{"version":3,"sources":["webpack://QuickQuote/webpack/bootstrap","webpack://QuickQuote/./src/store.js","webpack://QuickQuote/./src/config.js","webpack://QuickQuote/./src/misc/helpers.js","webpack://QuickQuote/./src/actions/actionFunctions.js","webpack://QuickQuote/./src/bvcomponents/appLayout.js","webpack://QuickQuote/./src/bvcomponents/look/core/constants.js","webpack://QuickQuote/./src/analytics.js","webpack://QuickQuote/./src/bvcomponents/sqft/constants.js","webpack://QuickQuote/./src/bvcomponents/visComponents/constants.js","webpack://QuickQuote/./src/bvcomponents/visComponents/designNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftConfig.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace.js","webpack://QuickQuote/./src/actions/lookFunctions.js","webpack://QuickQuote/./src/actions/actionTypes.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftHelper.js","webpack://QuickQuote/./src/bvcomponents/look/core/intermediatePart.js","webpack://QuickQuote/./src/misc/utils.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFunctions2.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftEventManager.js","webpack://QuickQuote/./src/routes.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/intermediatePart.js","webpack://QuickQuote/./src/actions/sqftMenuFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/loaderView.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFunctions.js","webpack://QuickQuote/./src/interfaces/featureInterface.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/intermediatePart.js","webpack://QuickQuote/./src/actions/sqftFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/assets.js","webpack://QuickQuote/./src/api/server-api.js","webpack://QuickQuote/./src/colorThemes.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/constants.js","webpack://QuickQuote/./src/misc/actionTypes.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/shapeHelper.js","webpack://QuickQuote/./src/bvcomponents/common/icons.js","webpack://QuickQuote/./src/actions/wizardFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookNavigationFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftShapeManager.js","webpack://QuickQuote/./src/actions/navigationFunctions.js","webpack://QuickQuote/./src/misc/fabricatorHardcode.js","webpack://QuickQuote/./src/misc/helperHooks.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/intermediatePart.js","webpack://QuickQuote/./src/bvcomponents/ui/materialSpinner.js","webpack://QuickQuote/./src/interfaces/wizardItemInterface.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/vanity.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/constants.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/shower.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureName.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/cartItemInterface.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/workspaceControllers.js","webpack://QuickQuote/./src/api/look-api.js","webpack://QuickQuote/./src/actions/selectionFunctions.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/vanity.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/shower.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/colorThemes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftStore.js","webpack://QuickQuote/./src/actions/tutorialFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderFigures.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/shower.js","webpack://QuickQuote/./src/actions/groheFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/sqftShape.js","webpack://QuickQuote/./src/misc/misc.js","webpack://QuickQuote/./src/api/api-popups.js","webpack://QuickQuote/./src/actions/shoppingCartFunctions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/cabinet.js","webpack://QuickQuote/./src/bvcomponents/ui/loadingSpinner.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentContext.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftHelperUi.js","webpack://QuickQuote/./src/bvcomponents/look/core/part.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/assets.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discounstInterface.js","webpack://QuickQuote/./src/bvcomponents/assets.js","webpack://QuickQuote/./src/misc/priceFunctions.js","webpack://QuickQuote/./src/actions/roomsFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookCanvasContext.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/part.js","webpack://QuickQuote/./src/bvcomponents/common/lockedView.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileMenuSelect.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/vanity.js","webpack://QuickQuote/./src/misc/filtersFunctions.js","webpack://QuickQuote/./src/actions/serverFunctions.js","webpack://QuickQuote/./src/misc/quotesFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/pnpoly.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftQuotesHelper.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerCommon.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/intermediatePart.js","webpack://QuickQuote/./src/misc/categorySwitchingFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/featureHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navUtils.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftNavigationHelper.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/appliance.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/accessoryCommon.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFunctions.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withUpdateLookCartItem.js","webpack://QuickQuote/./src/api/jsonApi.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/line.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/point.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftSlabManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/assetsSQFT.js","webpack://QuickQuote/./src/actions/sqftSlabFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/showerTubCombo.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/popups/withOverlayHoc.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/resourseCanas.js","webpack://QuickQuote/./src/actions/sqftResourceFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/userLoginButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SQFTResourceController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/lineHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layer.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/wallCommon.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/accessoryCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filterSwitchers.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/part.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filterSelection.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureThumbnail.js","webpack://QuickQuote/./src/misc/displayLogic.js","webpack://QuickQuote/./src/bvcomponents/ui/successNotification.js","webpack://QuickQuote/./src/misc/getCanvasImageFromLayout.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/countertopSwitchers.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filters.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/constants.js","webpack://QuickQuote/./src/actions/userFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/coordinatesHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelRadio.js","webpack://QuickQuote/./src/bvcomponents/common/goToMaterialPage.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/part.js","webpack://QuickQuote/./src/actions/contractsActions.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsFunctions.js","webpack://QuickQuote/./src/misc/visualizerSwitchingFunctions.js","webpack://QuickQuote/./src/misc/misc2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/workspaceEvents.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSteps.js","webpack://QuickQuote/./src/actions/assignPopupFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withZoomToFeature.js","webpack://QuickQuote/./src/actions/priceWorksheetActions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/cabinetSwitchers.js","webpack://QuickQuote/./src/bvcomponents/visComponents/partCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationRequests.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withClickCount.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookAllWallsRadioButton.js","webpack://QuickQuote/./src/bvcomponents/popups/messageBox.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/part.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftShapeIntersectionsManager.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktopNavigationCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/navigationFiltersSteps.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobileNavigationCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationButtons.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox.js","webpack://QuickQuote/./src/bvcomponents/common/mainButtons.js","webpack://QuickQuote/./src/bvcomponents/visComponents/visualizer.js","webpack://QuickQuote/./src/bvcomponents/tutorials/visualizerTutorial.js","webpack://QuickQuote/./src/bvcomponents/ui/copyright.js","webpack://QuickQuote/./src/actions/printFunctions.js","webpack://QuickQuote/./src/actions/paymentFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/text/numberText.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/movableImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/pointV2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderParts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftImageManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/canvasHelper.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqft3dArHelper.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardActions.js","webpack://QuickQuote/./src/visit/appointmentLogic/appointmentActions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/centerIsland.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModal.js","webpack://QuickQuote/./src/analyticsEcommerceParams.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartHeaderCommon.js","webpack://QuickQuote/./src/actions/sqftManualCalculationFunctions.js","webpack://QuickQuote/./src/misc/changeRoutePath.js","webpack://QuickQuote/./src/bvcomponents/common/demoPoints/demoPoints.js","webpack://QuickQuote/./src/bvcomponents/visComponents/imageCanvasCommonNew.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartStickyFooter.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/index.js","webpack://QuickQuote/./src/misc/backendFunctions.js","webpack://QuickQuote/./src/actions/initialFlowFunctions.js","webpack://QuickQuote/./src/api/user-api.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/mitered.js","webpack://QuickQuote/./src/actions/sqftMiteredFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/constantsFeature.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigation.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/countertopGroup.js","webpack://QuickQuote/./src/visit/globalLogic/globalActions.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardLogic.js","webpack://QuickQuote/./src/bvcomponents/visComponents/imageCanvasCommon.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/constants.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureImage.js","webpack://QuickQuote/./src/reducers/sqftMenuReducer.js","webpack://QuickQuote/./src/reducers/sqftSlabReducer.js","webpack://QuickQuote/./src/visit/api/api.js","webpack://QuickQuote/./src/visit/constants.js","webpack://QuickQuote/./src/visit/userLogic/userActions.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/countertopGroup.js","webpack://QuickQuote/./src/bvcomponents/look/iframeIntegration.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureDescription.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar_ducks.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/workspaceDataMapper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/polygon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutCommonNew.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutCommon.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetWorkspace.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/assets.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/externallWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/tubCommon.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/zIndex.js","webpack://QuickQuote/./src/reducers/fabricatorReducer.js","webpack://QuickQuote/./src/reducers/initialFlowReducer.js","webpack://QuickQuote/./src/bvcomponents/visComponents/allFeaturesChecker.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopNavItemsContext.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/uiIcon.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftCalculations.js","webpack://QuickQuote/./src/reducers/sqftManualCalculationReducer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapes.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboard.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserPhoneInput.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountCommon.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentFunctions.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsFunctions.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/index.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/uiHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/freeDrawHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/draw/drawImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamToolHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderCabinets.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/mitered.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/sqftSlabDraw.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabAdditionalShape.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftResoursesManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeAbsolute.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/moveDiagonalLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/resizeLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/rectangle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/labelsHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/freeDrawHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/lineHooks/lineCorner.js","webpack://QuickQuote/./src/bvcomponents/ui/select.js","webpack://QuickQuote/./src/bvcomponents/look/core/layout.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureCommon.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCommon.js","webpack://QuickQuote/./src/misc/constants.js","webpack://QuickQuote/./src/api/search-api.js","webpack://QuickQuote/./src/misc/loadVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarShareButtons.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/cabinet.js","webpack://QuickQuote/./src/visit/lixilLogic/lixilActions.js","webpack://QuickQuote/./src/visit/appointmentLogic/appointmentReducer.js","webpack://QuickQuote/./src/visit/wizardLogic/wizardLogicOld.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/selectionMobileViewSwitchers.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeatureRemoveButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/backsplashSelect.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/cabinetModuleSystem.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/appliance.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/centerIsland.js","webpack://QuickQuote/./src/bvcomponents/common/scheduleButton.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/deliveryFunctions.js","webpack://QuickQuote/./src/actions/unlockCalculationsFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroPopper.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsContext.js","webpack://QuickQuote/./src/reducers/instReducer.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheConfig.js","webpack://QuickQuote/./src/api/api.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspaceHistory.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/parseSqftData.js","webpack://QuickQuote/./src/bvcomponents/visComponents/qtCategoryName.js","webpack://QuickQuote/./src/actions/filtersFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/freeDraw.js","webpack://QuickQuote/./src/visit/api/lixil-api.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationItemsList.js","webpack://QuickQuote/./src/bvcomponents/visComponents/commonFeatureItemsMethods.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodySwipable.js","webpack://QuickQuote/./src/bvcomponents/visComponents/layoutNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/common/shareButton.js","webpack://QuickQuote/./src/bvcomponents/visComponents/pingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withPingPilotCheck.js","webpack://QuickQuote/./src/actions/shopFunctions.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteConstants.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftUiFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/interfaces/sqftInterfaces.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withSavePostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookMessaging.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserInput.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withInputValidations.js","webpack://QuickQuote/./src/bvcomponents/desktopHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptions.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentInfo.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyCartItem.js","webpack://QuickQuote/./src/interfaces/filterInterface.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/mixin/movable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/cursor.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/radius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/label.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/wall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/renderFreeDraw.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/wallHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/canvasPopup/resetSeam.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/commonParts/blink.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featuresFunctions.js","webpack://QuickQuote/./src/misc/metaDataFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/look/bathroomFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/api/sqftJsonApi.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox.js","webpack://QuickQuote/./src/reducers/wizardReducer.js","webpack://QuickQuote/./src/misc/presetsFunctions.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertopCommon.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/edgeCommon.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDisclaimer.js","webpack://QuickQuote/./src/translatesProvider.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shadow.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/wall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/showerAccessories.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanel.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertopCommon.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/edgeCommon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/navigationFilters.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizard.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/contextMenu.js","webpack://QuickQuote/./src/bvcomponents/common/homeMenu.js","webpack://QuickQuote/./src/bvcomponents/common/saveButton.js","webpack://QuickQuote/./src/bvcomponents/tutorials/tutorial.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/cabinetContextMenu.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/layout.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/contextMenu.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/contextMenuQKB.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/layout.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/contextMenuSimple.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/nonVisualizerSubPart.js","webpack://QuickQuote/./src/reducers/cartReducer.js","webpack://QuickQuote/./src/bvcomponents/ui/quantity.js","webpack://QuickQuote/./src/misc/userFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureSku.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withAddToCartPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeature.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCart.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsFieldsFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureMoreInfoButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartBackButton.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/bathroomVisualizer.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocument.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardDoneCheckMark.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftDataMapper.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftConfigHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspaceZoom.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/underlayment.js","webpack://QuickQuote/./src/bvcomponents/look/filtersHardcode.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftCabinetsDataMapper.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/dataHelper.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filtersBody.js","webpack://QuickQuote/./src/bvcomponents/common/checkBox.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/kitchenVisualizer.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/kvSceneVisualizer.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/bvSceneVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/lookVisualizer.js","webpack://QuickQuote/./src/bvcomponents/fireplace/fireplaceVisualizer.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/laundryRoomLayout.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withAddToQuote.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/NavigationHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SQFTFeaturesHeader.js","webpack://QuickQuote/./src/bvcomponents/ui/textInput.js","webpack://QuickQuote/./src/actions/iframeIntegrationFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeature.js","webpack://QuickQuote/./src/bvcomponents/ui/homeButton.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileMenu.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoPrice.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsCommonFunctions.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridItem.js","webpack://QuickQuote/./src/interfaces/shiftFilterTitleInterface.js","webpack://QuickQuote/./src/bvcomponents/visComponents/hardcodedCanvasImage.js","webpack://QuickQuote/./src/bvcomponents/ui/noInternetOverlay.js","webpack://QuickQuote/./src/bvcomponents/common/svgIcons/bathroomFeatureGroupIcons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePairPrice.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureSQFTButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureSoldOut.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureLockedBadge.js","webpack://QuickQuote/./src/actions/groheQuotingToolFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookMainCategory.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureRevertButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentButtons.js","webpack://QuickQuote/./src/reducers/index.js","webpack://QuickQuote/./src/reducers/stepsReducer.js","webpack://QuickQuote/./src/reducers/selectionReducer.js","webpack://QuickQuote/./src/reducers/serverReducer.js","webpack://QuickQuote/./src/misc/imagePolygon.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/loading_bar_middleware.js","webpack://QuickQuote/./src/lib/react-redux-loading-bar/immutable.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentStyles.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/styles/printDocumentStylesHelpers.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/styles/printDocumentStylesDiscounts.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentHeader.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentInfoFabricator.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/constants.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBody.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyBundledCartItems.js","webpack://QuickQuote/./src/misc/graniteTransformationUkSubDomains.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/similarProducts/printSimilarProducts.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/similarProducts/printSimilarProductsListItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionDescriptionCoverTranslates.js","webpack://QuickQuote/./src/api/axiosInstance.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/vertex.glsl","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasEnhancements/fragment.glsl","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/sqftCursorManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/pointRadius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SpacersController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/spacer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/model/modelCorePoint.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderMovableImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderMeasurementsInsideShape.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/renderSVG.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/mitered/miteredSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabAdditionalShapes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/slab/slabHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/endCapCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftMeasureUnitsHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/image/StaticImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/sqftShapeOffset.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/subscriptionEventManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/helpers/movableImageHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/imageParts/lineImage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/simpleLine.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeRotatable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/parts/ChangeValuePopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/HandlesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/models/LineHandlesModel.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/WallsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/ShapeColorsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/models/ShapeColor.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/line/WaterfallController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/waterfallOverlay.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/models/waterfallSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/line/WaterfallSegmentController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/RemovedFeaturesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SnappedShapeGroupsController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/SelectedShapesController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/store/controllers/Images3dController.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftFitSize.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/lineLength.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/bumpout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/draw/color.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/lineHooks/lineAttachmentsComposite.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/rotation.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamTool.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/slabParts/seamToolRender.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeMeasurementArrows.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeEditable.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeSpacer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeIntersections.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeMemory.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeRender.js","webpack://QuickQuote/./src/bvcomponents/common/exception.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCabinet.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/walkInTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerTubCombo/replacementTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerScreen.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/backWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/splitWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/leftWallSplitter.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/walls/ceilingPanels.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerWall.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerWallAccent.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/cornerShelf.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/showerPod.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/seats.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/showerRod.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/toiletBrush.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/paperHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/robeHook.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelRing.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/glassHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelRack.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/wainscoting.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towel.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelRing.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerAccessories/towelTowelHook.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerArm.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerHeadBundle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/tubSpout.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/handShowerKit.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/shower/showerCurb.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/bodySpray.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/diverterTrim.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/handShowerHolder.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/handShowerOnly.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerHose.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerSystem.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/showerTrimKit.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/valveTrim.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/showerNew/wallUnion.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/windowParent.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/window/windowKits.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/window/windowBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/globals/showerWallMirror.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureTop.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/enclosureBottom.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/bathTub/skirtingBoard.js","webpack://QuickQuote/./src/bvcomponents/look/core/parts/accessories.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/table.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/chair.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/carpet.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/lamp.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/basket.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/frame.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/accessories/plant.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/pTrap.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityWashstand.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityMiddle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/drawerPull.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/wsTowelBar.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityLegs.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/vanityConsole.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/doorHandle.js","webpack://QuickQuote/./src/bvcomponents/look/core/subparts/vanity/drawerHandle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeParts/shapeAutoShuffle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapesSpecialLayouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/api/sqftApi.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/box.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/iText.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBox/model/modelText.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/keyboardHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/duplicate.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/ruler.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/resultImages.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/shapeFunctions.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/cabinet/cabinetShapesLayout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/workspace/textBoxManager.js","webpack://QuickQuote/./src/bvcomponents/sqft/dto/FeatureObjectDTO.js","webpack://QuickQuote/./src/api/features-api.js","webpack://QuickQuote/./src/misc/markUpFunctions.js","webpack://QuickQuote/./src/misc/excelFunctions.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/handle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/dishwasher.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridge.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/hood.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/microwave.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/range.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/oven.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/stove.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridgeEnclosure.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/fridgeEnclosureHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/appliances/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/tallCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/sink.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/edgeProfile.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/cutouts.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/countertop/radius.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/crownMolding.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/doorHandle.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/cabinet/drawerHandle.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentBodyWizardItem.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentTotal.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentSignature.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscountsList.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscount.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentDiscountFinance.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printDocumentAsCentralText.js","webpack://QuickQuote/./src/visit/api/wizard-api.js","webpack://QuickQuote/./src/visit/globalLogic/saveJobData.js","webpack://QuickQuote/./src/visit/api/job-api.js","webpack://QuickQuote/./src/visit/globalLogic/saveAppointmentData.js","webpack://QuickQuote/./src/visit/api/user.js","webpack://QuickQuote/./src/visit/helperFunctions.js","webpack://QuickQuote/./src/visit/components/helpers/popupFunctions.js","webpack://QuickQuote/./src/misc/imageHovering.js","webpack://QuickQuote/./src/lib/pinch-zoom.js","webpack://QuickQuote/./src/lib/pinchScroll.js","webpack://QuickQuote/./src/bvcomponents/visComponents/canvasCheckForLayerParts.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubBase.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubRim.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubSpa.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/bathTub/bathTubTowelRack.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/floorNew.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/completeVanity.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityPedestal.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/lightingFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/window.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/ceiling.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerInteriorWall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerInteriorWallAccent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/globalShadow.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/ponyWall.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallA.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallB.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallC.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallExR.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/wallExL.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/wall/vanityAccent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/smallCornerShelf.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/sidebar.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/newFilters/filtersSearch.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboardKey.js","webpack://QuickQuote/./src/bvcomponents/common/OnScreenKeyboard/keyboardKeyType.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/body.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelCheckbox.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelWizardSteps.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyPanelNavigationFiltersSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookAllWallsRadioButtonSmall.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktop/bodyItems.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navigationItem.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/popoutWall.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/walls/backsplash.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/crownMolding.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/fridge.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/fridgeShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/hood.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/dishwasher.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/microwave.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/appliances/range.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/topCabinetShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/cabinet/bottomCabinetShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/sink.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/cutouts.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/edgeProfile.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/countertop/radius.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/cabinet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/chairs.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/sink.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/handle.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/centerIslandshadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/range.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/edge.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/centerIsland/chairsShadow.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardBody.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardBodyItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSelection.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/featureWizard/featureWizardSelectionItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/roomSceneNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/roomSceneNavigationItem.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/desktopNavigationLayoutsContent.js","webpack://QuickQuote/./src/bvcomponents/bvComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobile/mobileNavigationBodyNew.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/mobileParentNavigationItems.js","webpack://QuickQuote/./src/bvcomponents/common/quoteButton.js","webpack://QuickQuote/./src/bvcomponents/common/designButton.js","webpack://QuickQuote/./src/bvcomponents/common/minimizeButton.js","webpack://QuickQuote/./src/misc/downloadCSV.js","webpack://QuickQuote/./src/bvcomponents/common/demoPoints/demoPoint.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/exclamationMarkIcon.js","webpack://QuickQuote/./src/api/parseResponse.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/floorNew.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/baseboard.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/ceilingLights.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/globalShadow.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor1.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor2.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/subparts/globals/decor3.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/cabinet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/faucet.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/sink.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/edge.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/countertop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/islandHood.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/stovetop.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/pendants.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/centerIsland/rightIsland.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/backsplash.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/ponyWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/core/subparts/walls/splitWall.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/kvSceneComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeCornerSeat.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/bathtubLiner.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/replacementTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/walkInTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/jettedTub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerTubCombo/wallConfiguration.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerGlass.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/completeVanity.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityHandle.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityCabinet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityCountertop.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/vanityBacksplash.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/mirror.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/sink.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/vanity/faucet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerWallAccent.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDoor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerPanCombo.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDoorHandle.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/ponyWallCap.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/ponyWallGlass.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerFloor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/threshold.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerDrain.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/shower/showerHead.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/soapDish.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/cornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeCornerCaddie.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/grabBar.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/cornerShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/showerPod.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/seats.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/showerRod.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/windowBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/windowKits.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/largeShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/towelBar.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/showerAccessories/shampooShelf.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/toilet.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/walls/ceilingPanels.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/lightFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/decorWindow.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/decorSeat.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/lampFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/parts/bathtub.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/bathTub/bathTubBody.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/core/subparts/bathTub/bathTubFixture.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModalButton.js","webpack://QuickQuote/./src/bvcomponents/visComponents/navigation/navItemPositionModalSlatWall.js","webpack://QuickQuote/./src/bvcomponents/bvSceneComponent/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/contextMenuQKBButtons.js","webpack://QuickQuote/./src/bvcomponents/look/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/walls/ceiling.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/fireplaceParent.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/fireplace/fireplace.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/furniture.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/bvcomponents/fireplace/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/fireplace/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/zIndex.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/other.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/background.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/backgrounds/BackgroundBG.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/floor.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/walls.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/leftWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/rightWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/centerWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/walls/frontWall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/globals.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/decor.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/basket.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/cabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/cabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/countertop.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/hook.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/cabinetGroup.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/slatwall.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/overheadRack.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/topCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallCabinet.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/tallCabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/topHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomHandle.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/cabinet/bottomCabinetLeg.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/parts/accessories.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/core/subparts/globals/attachment.js","webpack://QuickQuote/./src/reducers/bathroomVisualizerReducer.js","webpack://QuickQuote/./src/reducers/loaderReducer.js","webpack://QuickQuote/./src/reducers/userReducer.js","webpack://QuickQuote/./src/reducers/messageBoxReducer.js","webpack://QuickQuote/./src/reducers/filterReducer.js","webpack://QuickQuote/./src/reducers/navigationReducer.js","webpack://QuickQuote/./src/reducers/sqftReducer.js","webpack://QuickQuote/./src/reducers/docuSignReducer.js","webpack://QuickQuote/./src/reducers/qtReducer.js","webpack://QuickQuote/./src/reducers/tutorialReducer.js","webpack://QuickQuote/./src/reducers/contractSigningReducer.js","webpack://QuickQuote/./src/reducers/priceWorksheetReducer.js","webpack://QuickQuote/./src/reducers/unlockCalculationsReducer.js","webpack://QuickQuote/./src/reducers/quotesReducer.js","webpack://QuickQuote/./src/reducers/advancedQuotingReducer.js","webpack://QuickQuote/./src/reducers/assignQuoteReducer.js","webpack://QuickQuote/./src/reducers/printReducer.js","webpack://QuickQuote/./src/reducers/sqftResourcesReducer.js","webpack://QuickQuote/./src/reducers/sqftMiteredReducer.js","webpack://QuickQuote/./src/reducers/lookReducer.js","webpack://QuickQuote/./src/reducers/groheReducer.js","webpack://QuickQuote/./src/reducers/iframeIntegrationReducer.js","webpack://QuickQuote/./src/reducers/groheQuotingToolReducer.js","webpack://QuickQuote/./src/reducers/paymentReducer.js","webpack://QuickQuote/./src/reducers/historyReducer.js","webpack://QuickQuote/./src/reducers/shopReducer.js","webpack://QuickQuote/./src/reducers/sqftTutorialReducer.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userFieldsErrors.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/privacyPolicyTerms.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useCloseSQFTCalc.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteInterfaces.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignPopupContext.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/subPartDoneCheckMark.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopup3dButtons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavLayouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useFetchFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookViewTypeSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsRelatedItemList.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeaturePriceLocked.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFilters.js","webpack://QuickQuote/./src/bvcomponents/look/lookPolicyLinks.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withLoginPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBar.js","webpack://QuickQuote/./src/bvcomponents/look/ui/inputFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/ui/twoFaCodeInput.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionListFeature.js","webpack://QuickQuote/./src/bvcomponents/ui/shoppingCartButton.js","webpack://QuickQuote/./src/bvcomponents/common/languageSwitcher.js","webpack://QuickQuote/./src/actions/advancedQuotingFunctions.js","webpack://QuickQuote/./src/bvcomponents/installation/instView.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoPriceLocked.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoDescription.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridWizardGroupItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/notInVisualizerView.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureNotInVisualizer.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeatureTop.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureNotInStock.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategoriesMenu.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/look/ui/navigationLoader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentFinalPrice.js","webpack://QuickQuote/./src/misc/loadScript.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartColumns.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizard.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentTitle.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentDescription.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSections.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainHeaderCloseButton.js","webpack://QuickQuote/./src/misc/browsers.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/contextMenuQKB.js","webpack://QuickQuote/./src/bvcomponents/common/dashboardButtons/backToDashboard.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/constants.js","webpack://QuickQuote/./src/bvcomponents/common/twoFactorAuthView.js","webpack://QuickQuote/./src/bvcomponents/popups/confirmPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withCloseSQFtCalc.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileRotateButtonHorizontalNew.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupSearch.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupWrapper.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterStepThumbnail.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolView.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftFooterAddToQuoteButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftFooterCancelButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/withSqftFooterCancel.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftPopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/square.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/wideAngle.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/horseshoe.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSwitchers/ManualCalculateSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/ExportButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ThreeDWorkspace.js","webpack://QuickQuote/./src/bvcomponents/ui/multiLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/helpers/sqftMobileHelper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/ARButtonGoogleWebXR.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ValidationPopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/sqftContextMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSwitchers/SlabToolSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/backsplashCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsLoading.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featurePriceInput.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolMitered/navMiteredSection.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersSearchInputAsync.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFiltersList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersValues.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookFilters/lookFiltersReset.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useWindowDimensions.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCanvasImage.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContent.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContentHeaderRightSide.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCartAnimationsChecker.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListFooter.js","webpack://QuickQuote/./src/actions/asyncActionFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeatureCheckmark.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/unlockCalculations/unlockCalculationSteps.js","webpack://QuickQuote/./src/bvcomponents/ui/loadingDots.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListActiveFeatureMobileButton.js","webpack://QuickQuote/./src/bvcomponents/ui/installButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartListSwitcher.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingSwitcher.js","webpack://QuickQuote/./src/bvcomponents/popups/orderCompletePopup/cloneQuoteButton.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeSections.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfo.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoBrand.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/featureCartItemsCount.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardFilterItem.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridFiltersTitle.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/gridFunctions.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/gallery.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionDescriptionCover.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/notCompatibleView.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainHeader.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubParts.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsFooterBackButton.js","webpack://QuickQuote/./src/bvcomponents/tutorials/materialsAgentTutorial.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterSteps.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/withMaterialsWizardFooterCommon.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/noteEditor.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsBundledProducts.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingListItemRemoveButton.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountSubTotal.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingSubpartItems.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProducts.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/recentlyViewedItems.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/depositDisclaimer.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartFooter.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartTotalColumns.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartCanvas.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartInstallationQuestion.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/quotes.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/priceWorksheetView.js","webpack://QuickQuote/./src/bvcomponents/ui/dropdowns/discountDropdown.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorialFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/hooks/useUpdateSureTax.js","webpack://QuickQuote/./src/bvcomponents/look/lookCanvas.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureContentInCart.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withUpdateCartItems.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureTopButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookLockedButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureWizardButton.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/analyticsEventHooks.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobile3dButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardList.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainFeatureGroupsExpandIcon.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withChangeFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookMainCategoryLoading.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheFeaturesHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFiltersIcon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/featureSubDescription.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterFiltersButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterViewButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureColorMatchCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withFeatureColorMatch.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartRoutes.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegister.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookAddressInput.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/getCreditCardType.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartContent.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withCartCheckoutClick.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheBillingAndShippingInputs.js","webpack://QuickQuote/./src/bvcomponents/look/ui/lookInput.js","webpack://QuickQuote/./src/bvcomponents/look/lookRouting.js","webpack://QuickQuote/./src/bvcomponents/look/lookLixilCategories.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContentCanvas.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardSelectedSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSelectedStep.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPagesFunctions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/withShopFeatureVisualizeClick.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeatureOptionsCommon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookCartButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookNotInVisualizerPopper.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroFooterAnchor.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCategory/lookCategoryHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainWizardSelectedSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardLmContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardCompletedAlertModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookRoomIdeasButton.js","webpack://QuickQuote/./src/main.js","webpack://QuickQuote/./src/polyfills.js","webpack://QuickQuote/./src/lib/babel-core/5.6.15-browser-polyfill.min.js","webpack://QuickQuote/./src/app.js","webpack://QuickQuote/./src/bvcomponents/index.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/commonVisualizer.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/desktopNavigation.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/contextMenuQKBButtons.js","webpack://QuickQuote/./src/bvcomponents/commonVisualizer/navigation/mobileNavigation.js","webpack://QuickQuote/./src/bvcomponents/common/dashboardButtons/backToDashboardButton.js","webpack://QuickQuote/./src/bvcomponents/popups.js","webpack://QuickQuote/./src/bvcomponents/popups/applyPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/userPopup/userFields.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/confirmationScheduleView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/monthView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/monthHeaderView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/dayView.js","webpack://QuickQuote/./src/bvcomponents/common/calendar/timeTableView.js","webpack://QuickQuote/./src/bvcomponents/ui/mobileRotateButtonIcon.js","webpack://QuickQuote/./src/bvcomponents/visComponents/docuSignLayer.js","webpack://QuickQuote/./src/bvcomponents/popups/depositPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopup.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupContent.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteCustomersList.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteEmployeesList.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupContentHoc.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomer.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomerInput.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupNewCustomerSelect.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuotePopupSaveButtons.js","webpack://QuickQuote/./src/bvcomponents/common/agreeEmailCheckbox.js","webpack://QuickQuote/./src/bvcomponents/popups/assignQuotePopup/assignQuoteContractSelection.js","webpack://QuickQuote/./src/bvcomponents/popups/orderCompletePopup/orderCompletePopup.js","webpack://QuickQuote/./src/bvcomponents/common/cookieMessage.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupApplyButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupBody.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupParentList.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeature.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureDropdown.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureDeleteButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupFeatureEyeball.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupParentListTitle.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupTitleFeatureDropdown.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopupCartItem.js","webpack://QuickQuote/./src/bvcomponents/popups/wizardConflictPopup/wizardConflictPopupButtons.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountAllFinanceOptionsPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/checkoutPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/fakeOfflineSqft.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/object.dataset.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/string.includes.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/string.startsWith.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/jquery.preBind.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/arrayMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/objectMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/polyfills/numberMethods.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/wrapText.js","webpack://QuickQuote/./src/bvcomponents/sqft/lib/fraction.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooter.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooterActiveShapeColorset.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/sqftFooterSlabInfo.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/SqftIcons.js","webpack://QuickQuote/./src/bvcomponents/popups/changeLayoutPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/rectangleIsland.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/wideAngleReverted.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftManualCalculateWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftCountertopRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftEdgeRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftEdgeRowDropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/manualCalculate/SqftBacksplashRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftNavSettingsWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftTutorial.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftSystemMessage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/AR3DPopup.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ar3d/ThreeDContent.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupChangeColorButton.js","webpack://QuickQuote/./src/bvcomponents/popups/sqftFeaturesPopup/sqftFeaturesPopupSaveImageButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ShapesGoogleModelViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/ShapesThreeJsViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/LightIntensitySlider.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/LightingSwitch.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/SeparateModelGLBViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/ModelLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/HDRMapLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/glbViewer/SingleModelGLBViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/threeD/workspaceComponents/ScreenshotButton.js","webpack://QuickQuote/./src/bvcomponents/ui/multiLoaderSteps.js","webpack://QuickQuote/./src/bvcomponents/common/svgIcons/multiLoaderIcons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ar3d/ArContent.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/GLBLoader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ar3d/ar/WebXRGoogleModelViewer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftSystemDeleteMessage.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepSelectSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepCropSlab.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftStepSelectImageType.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabHeader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabPricingCheckbox.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabFooter.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftLoadSlabFooterSelectImageTypeButtons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/sqftLabelsContextMenuCategorySwitching.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/contextmenu/contextmenuList.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/overlays/contextmenu/contextmenuButtons.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/labels/sqftLabelsContextMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/SqftContextMenuV2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/popup/ChangeValuePopupWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useLongPress.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/NavigationSidebar.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAside.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAside2.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAsideCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/SqftToolMenuCabinet.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/SqftToolMenuCountertop.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/WaterfallController.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavShapes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/shapes/layouts/dot.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/SqftNavSummary.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryRadii.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryAngles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryBumpouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryFeatureColors.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryEdges.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/summary/SqftSummaryWall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdges.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdgesFeature.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/edgesCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavEdgesMiteredButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavAppliances.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavAppliancesItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBumpouts.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/bumpout.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavBacksplashesFeature.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavBacksplashesCustomButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavCorners.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolRadius/SqftNavRadius.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolCorner/SqftNav45Corner.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/WallsUpModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/WallsLockModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menuSecondRowButtons/ShowMeasurementsInTheSlabModeButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationUpper.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftFeaturesChecker.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/commonParts/SqftOptionsRelatedItemRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationHandles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolHandles/SqftOptionsHandles.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolHandles/SqftOptionsHandlesContent.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationBottom.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationCrownMolding.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/toolCrown/SqftOptionsCrown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/crownmoldingCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavFeatures.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/SqftNavFeaturesRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/SqftNavAsideSlabMode.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/slab/SqftSlabWindow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/slab/toolMenu/SqftNavSeam.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavMitered.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolMitered/navMiteredSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavUnderlayment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/SqftNavWaterfall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSection.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolWaterfall/NavWaterfallSegmentSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/toolMenu/SqftNavigationTall.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/cabinet/filterMenu/SqftNavFiltersMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/SqftNavFeaturesGrid.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/FeaturesGrid.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/commonTools/featuresGrid/FeaturesRow.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashSection.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/navigation/menu/countertop/toolMenu/toolBacksplash/SqftNavCustomBacksplashSegment.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateSqftConfig.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useAddDeviceClass.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useToggleRoomsSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useOpenSQFTMenu.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useCheckWizardActiveItem.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useResetState.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/SqftHeader.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcher.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherLists.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListQuotes.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListCategories.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/quotesSwitcher/quotesSwitcherListRoomGroups.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/header/ModeDropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/ui/Dropdown.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/useChangeCabinetsColor.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateCabinetFeatures.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolViewWorkspace.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftCanvasContainer.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/SqftUseCanvas.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/controls/scale.js","webpack://QuickQuote/./src/bvcomponents/sqft/components/canvas/core/tutorial.js","webpack://QuickQuote/./src/bvcomponents/sqft/translatesProvider.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useImportSQFTData.js","webpack://QuickQuote/./src/bvcomponents/sqft/hocs/onLoad/useUpdateSlabFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookWhitePage.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookList.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListLeft.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListContentHeader.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMain.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActions.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsMoreButton.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsPopper.js","webpack://QuickQuote/./src/bvcomponents/look/list/listFeatureActions/lookListMainFeatureActionsPopperButtons.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookFeatureQuantityText.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListBundleFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartItemActions.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeatureCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/list/lookListMainFeatureShipping.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withOpenMiniCartPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayout.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutHeader.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutMain.js","webpack://QuickQuote/./src/bvcomponents/look/layouts/lookLayoutItem.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarLayoutButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarSaveButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarEditButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarEditButtonPopper.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withDemoShow.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarMoreButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSidebarModals/lookSideBarShareModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarFiltersButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarPingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookSideBar/lookSideBarRevertButton.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUser.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserHeader.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserLeftSide.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserContent.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookLoginButton.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookUserInputs.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookRegisterCheckboxes.js","webpack://QuickQuote/./src/bvcomponents/look/user/lookRegisterButton.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRooms.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRoomsMain.js","webpack://QuickQuote/./src/bvcomponents/look/rooms/lookRoomPreset.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookPopups.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookMessageBoxPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookQuestionPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopupFeature.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookStylePopupButtons.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookOverlayQuestions.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookOverlayQuestionsButtons.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withExitPostMessage.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookLoadingPopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookLoadingBar.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lookNotCompatiblePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopup.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupContent.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupContentInputs.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupFooter.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupFooterSubmit.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupTwoFa.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupTwoFaVerify.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupOptInCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupBox.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/leadCapturePopupBoxImage.js","webpack://QuickQuote/./src/bvcomponents/look/popups/leadCapturePopup/unlockCalculations/unlockCalculationStep.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookAllWallsTutorial.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookAllWallsTutorialHighlightFeature.js","webpack://QuickQuote/./src/bvcomponents/look/animations/lookMobileInfoButtonAnimatedIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookFeatureItemLocked.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookListFeature/lookListFeatureName.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionListFeatureQuantity.js","webpack://QuickQuote/./src/bvcomponents/popups/printPopup/printPopup.js","webpack://QuickQuote/./src/qkbRoutes.js","webpack://QuickQuote/./src/bvcomponents/quoteDesign/quoteDesignPage.js","webpack://QuickQuote/./src/bvcomponents/ui/websiteButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/hideItemsSwitcher.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/fabricatorCostSwitcher.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlow.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowFooterQuestion.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowType.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowRoom.js","webpack://QuickQuote/./src/bvcomponents/initialFlow/initialFlowLayout.js","webpack://QuickQuote/./src/bvcomponents/introVideo.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScope.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeMobile.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeSearchInput.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeDesktop.js","webpack://QuickQuote/./src/bvcomponents/projectScope/projectScopeDesktopSearchInput.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindowPage.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindow.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionWindowBvRequests.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMain.js","webpack://QuickQuote/./src/bvcomponents/installation/instList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociated.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociatedProducts.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoAssociatedProduct.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoDesc.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoMaterial.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoImage.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/featureInfoImagesMobile.js","webpack://QuickQuote/./src/bvcomponents/ui/addProductNoteButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFeatureInfo/addProductNoteEditor.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/selectionMainVirtualizedList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemButtons.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemQuantity.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemPrice.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemRelatedProductsButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionRowList/rowItemRelatedProducts.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardSqftButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardList.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardDesktopGrid.js","webpack://QuickQuote/./src/interfaces/wizardObjectInterface.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/wizardList/wizardMobileGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedFiltersGrid.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionGridFiltersTitleDropdown.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedGridMobile.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionGridList/selectionMainVirtualizedFiltersGridMobile.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/expandVisualizerMethods.js","webpack://QuickQuote/./src/actions/visualizerFunctions.js","webpack://QuickQuote/./src/bvcomponents/ui/icons/noInternetIcon.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionViewSwitchers.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/filtersButton.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooter.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainSelect.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionMainSelectCategory.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubPart.js","webpack://QuickQuote/./src/bvcomponents/selectionWindow/selectionFooterSubSteps.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizard.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardBody.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardMain.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsMainCanvas.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/materialsMainCanvasLayoutButton.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardMainList.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardHistoryListener.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterStep.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsCommon/useExpandCollapseLogic.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterButtons.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterDropDown.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/materialsWizardFooterSelectButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartView.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartMobile.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/changeRoomButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/priceInput.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemQuantity.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemCalcButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemTotal.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemSearch.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/cartItemSearchButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDiscountsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDiscountsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListInstallationItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsList.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/similarProducts/similarProductsListItem.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizard.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizardGroups.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/advancedQuoting/advancedQuotingWizard/advancedQuotingWizardGroupsSearch.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartItemsListWizardCustomItem.js","webpack://QuickQuote/./src/bvcomponents/ui/priceWorksheetButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartTaxInput.js","webpack://QuickQuote/./src/bvcomponents/ui/visualizerButton.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartFooterSubParts.js","webpack://QuickQuote/./src/bvcomponents/ui/buttonGroup.js","webpack://QuickQuote/./src/bvcomponents/qkbPages/materialsWizard/shoppingCartWizardFooterSteps.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/quote.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/priceWorksheetList.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discount.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountAdd.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountDeposit.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountFinance.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountNestedParent.js","webpack://QuickQuote/./src/bvcomponents/priceWorksheet/discountNestedChild.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartDesktop.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculations.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsSteps.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorial.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/unlockCalculationsTutorialLowes.js","webpack://QuickQuote/./src/bvcomponents/shoppingCart/shoppingCartSureTaxUpdater.js","webpack://QuickQuote/./src/misc/updateSureTax.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupSuccess.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupDocument.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFooter.js","webpack://QuickQuote/./src/bvcomponents/common/pager.js","webpack://QuickQuote/./src/api/contract-api.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractInterface.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFields.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupSignatureField.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupCheckboxField.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupNextIndicator.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/contractsPopupFieldValue.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/signaturePadPopup.js","webpack://QuickQuote/./src/bvcomponents/popups/contractSign/receiptSign.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorial.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorialModal.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheComponents.js","webpack://QuickQuote/./src/bvcomponents/look/lookZoomer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenu.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenuContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookContextMenuVanityContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSidebar.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsType.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsShelfSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsShowerPan.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsCabinetSide.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsBodySpray.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureOptionsSlatWall.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheRequiredFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeaturesTotalPrice.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheRequiredFeaturesSlider.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFeature/groheMobileFeatureAddedToTheCart.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategories.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheCategory.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFilters/groheFilters.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSimilarProducts.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeature/groheFeatureShort.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatures/groheFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingTool.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolIntro.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolSteps.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheQuotingTool/groheQuotingToolResult.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheFeatureInfo.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo3d.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfo3dViewer.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureInfoAug.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooter.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheMobile/groheMobileFooterButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardCompletedButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheRoomLayouts.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheRoomLayoutsContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomLayouts/groheLayoutItem.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomIdeas/groheRoomIdeasContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheRoomIdeas/groheRoomPreset.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCategories/groheSubCategories.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheTopButtons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheExitButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheMenuButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShareParentButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShareButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheSaveButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/grohePingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheTopButtons/groheShopButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSameColorFeatures/groheSameColorFeatures.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSameColorFeatures/groheSameColorFeaturesContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheSidebarHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLogin.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartStepper.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegisterInputs.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartLogin/groheCartLoginRegisterCheckbox.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPages/groheCartSuccess.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommended.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommendedList.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDesignRecommended/groheCartDesignRecommendedFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPages/groheCartTerms.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartConfirm/groheCartConfirm.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartConfirm/groheCartConfirmHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDeliveryColumn.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartCardColumns.js","webpack://QuickQuote/./src/bvcomponents/common/creditCardIcons.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDisclaimer.js","webpack://QuickQuote/./src/bvcomponents/look/hocs/withPaymentSubmit.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartTwoFA/groheCartTwoFA.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartTwoFA/groheCartTwoFAVerify.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCart.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartHeader.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartFooter.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBilling.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartShippingDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPaymentDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBillingDropdown.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartShipping.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPayment.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartPaymentInputs.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartPayment/groheCartBillingInfo.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDelivery.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliveryContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliverySection.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/shippingTimes.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheCart/groheCartDelivery/groheCartDeliveryInterface.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizard.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContent.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContentFeature.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheWizard/groheWizardContentSingleFeature.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionGroup.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionList.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockTutorialCaller.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionFilters.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardSectionFilterItem.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeaturePage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeature.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureImage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureImageGalleryItem.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureVisualizeButton.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeaturePrice.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureShipping.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureAddToCartComponents.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureSuccessMessage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureDownloads.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureBackNextButtons.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopFeaturePage.js/shopFeatureWizardButton.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryPage.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryList.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryVirtualizedGrid.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryListFeature.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryListFeatureOptions.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryAside.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopCategory/shopCategoryBackNextButtons.js","webpack://QuickQuote/./src/bvcomponents/look/shop/shopPingPilotButton.js","webpack://QuickQuote/./src/bvcomponents/look/grohe/groheNavigation/groheCompatabilitySection.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySectionButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookCompatability/lookCompatabilitySectionContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookComponents.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMain.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFooter.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFooterCounts.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSections.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMatchingStyleAlert.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMatchingStyleAlertModal.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureColorMatch.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureUnlockButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainFeatureGroups.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainDeleteNotification.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardContent.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSectionsMobile.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookFeature/lookFeatureMobileHeader.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMainSectionsMobileWizard.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMobile.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookMain/lookMobileFooterButton.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntro.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBox.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBoxSteps.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroBoxIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookIntro/lookIntroCanvasHighlighting.js","webpack://QuickQuote/./src/bvcomponents/look/popups/lockedOverlay/lookLockedOverlay.js","webpack://QuickQuote/./src/bvcomponents/look/animations/lookLockedOverlayAnimatedIcon.js","webpack://QuickQuote/./src/bvcomponents/look/lookFixedButtons.js","webpack://QuickQuote/./src/bvcomponents/look/lookNavigation/lookExitButton.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolPage.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolCabinetsIntro.js","webpack://QuickQuote/./src/bvcomponents/sqft/squareFootageToolAR.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","e","Promise","resolve","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","oe","err","console","error","jsonpArray","window","oldJsonpFunction","slice","store","compose","applyMiddleware","__REDUX_DEVTOOLS_EXTENSION__","f","createStoreWithMiddleware","_zoomLevel","_isDemo","_isShowroomMode","_isTimeoutDisabled","_isTabletMode","_kioskConfigs","_userInfo","_kioskStandAlone","document","kvConfig","kioskMode","parent","app","db","_parent","exitEditQuote","log","UseFullSizeImages","location","href","indexOf","IS_OFFLINE_MODE","offlineMode","includes","USE_SERVER_CACHING","AVAILABLE_VISUALIZERS","Bathroom","Kitchen","Fireplace","LaundryRoom","BATHROOM_VISUALIZER_TYPES","AVAILABLE_VISUALIZER_TYPES","kvScene","bvScene","bvLook","NAVIGATION_TYPES","qkb","look","product","IS_LIXIL_SERVERS","host","domain","IS_LIXIL_PRODUCTION","devMode","userId","visualizerType","toolVersion","navigationType","IS_PRODUCT_JOURNEY","IS_LOOK_JOURNEY","IS_LIXIL_UI","IS_QKB_UI","USE_FAB_FILTERS_ONLY","body","classList","add","getCommonVisualizerType","stringToCheck","toLowerCase","AVAILABLE_LANGUAGES","POST_MESSAGES","setIframeLanguage","userRegisterTrue","userRegisterFalse","userLoginTrue","userLoginFalse","IS_BATHROOM_OLD_BV_SCENE","REACT_APP_GOOGLE_API_KEY","_isQTEmbedded","_isTutorial","_visMgmt","_isDevMode","_showAllVisualizerGroups","showAllVisualizerGroups","_isMobile","test","navigator","userAgent","substr","_subdomain","IS_AS_BATHROOM","every","subDom","split","tables","config","getConfigs","configs","forEach","Config","AmazonS3","bucketName","root","encodeURI","userDataPath","replace","getScriptPath","scripts","getElementsByTagName","src","getAttribute","substring","lastIndexOf","appRootNode","layerSize","maxZoom","zoomIn","zoomOut","zoomLevel","viewSize","w","width","parseInt","height","demoUserDomains","isDemo","this","some","subdomain","kioskStandAlone","isKiosk","isShowroomMode","isTimeoutDisabled","isTabletMode","getSubdomain","isMobile","getParent","isQTEmbedded","isTutorial","isDevMode","isVisualizerManagement","userInfo","setUserInfo","getQuotePriceWithDiscounts","getQuotePriceWithTaxes","totalPriceObject","taxes","priceTaxes","reduce","acc","tax","materialTax","materialTaxes","totalPrice","totalDeliveryCost","materialPrice","installationPrice","installationTaxes","toFixedPrice","getDeliveryCost","deliveryList","getState","cartState","deliveryCostArray","delivery","cartItems","price","total","cost","calculateStoneCost","parseQuery","queryString","search","query","pairs","pair","decodeURIComponent","metaDataToCamelCase","featureThumbnailUrl","feature","size","menuType","PartMenuType","Complex","partThumbnail","dbFeature","customThumbnail","thumbnailUrl","s3FeatureImagePath","getPartThemeThumbnail","activeTheme","splitted","TAX_DISCOUNT_PCT","browserIsSafari","vendor","isIOSDevice","platform","isChrome","match","isIphoneX","iPhone","MSStream","aspect","screen","toFixed","isAndroid","isIframe","self","top","__pricingProfiles","isIE","MSInputMethodContext","documentMode","isFirefox","__pricingProfilesHit","pricingProfiles","QuotePricing","fabricatorState","pricingPreset","FEATURE_INSTALLATION","FEATURE_REGULAR","FEATURE_STONE","getFeatureType","isInstallation","stonePricingId","detectComplexLaborCartItem","cartItem","cartFeature","partId","autoAddToCart","complexLogic","hardcodedFloformV5Features","getTotalPrice","forQuote","calculateDiscount","cartItemsToCount","withNotInStock","state","filter","addedBy","CART_ITEM_ADDED_BY","user","isRemoved","isInStock","getBundledFeatures","instList","instState","fabricatorTaxes","settings","sureTax","Array","isArray","map","fabTax","id","materialRate","laborRate","nameIntl","laborTax","getInstallationsTotalCost","Number","isInteger","currentQuote","multipliedCostUsed","sort","a","b","getDifferentCurrencyCartItems","sharedFeatureName","featurePrice","parseFloat","displayFakePrice","calculateFeatureCost","quantity","fromQtCategory","stonePricing","serverState","stoneSupplier","stoneCost","SQFT_FEATURES","slabs","sqftSlabState","isSlabPricingEnabled","multipliedCost","multiplySlabCostForFeature","productPriceAfterDiscount","notTaxable","useShipping","getCartItemShippingCost","getCafeCountertopsDeliveryCost","Math","round","isEnabled","ignoreDiscounts","splitStaticPrice","priceWorksheetEnabled","discountSections","getFilteredSections","priceWorksheetState","discountSection","sortByOrder","getDiscountsForSection","customAddedDiscounts","discount","shouldCalculateDiscount","ignoreDiscount","type","DISCOUNT_TYPES","amount","cartItemToSkip","allCartItems","allSameFeaturesQuantity","checkCartItems","cItem","allStoneCost","laborExist","find","getFeatureCost","withTotalSlabCost","useSlabSqftPricing","forQuoteIndex","withCommas","ex","numberWithCommas","getSingleSlabArea","toFixedFeatureCost","storeState","slabArea","slabImageHeight","slabImageWidth","measureUnit","ceil10","sqInchesToSqFoot","mm2ToM2","quoteIndex","activeQuoteIndex","quotesState","featureCost","checkIfInCatProperty","getFeaturePriceProperty","featureTotalPrice","material","backsplashMaterial","quoteMaterial","quoteBacksplashMaterial","materials","index","isStoneFeature","fromVisualizerType","sqftState","ret","comparisonType","baseQuantity","maxQuantity","validateFeaturePrice","comparisonFor","fQuantity","plus","getHardCodedFloFormShopCartCost","$m","$b","getSqft","stoneSupplierStone","pricingProfileId","pricingPreset_id","quotePricing","__quotePricing","profile","_","first","pp","Id","ppdList","useFabricatorCostPrices","pricingProfileCostData","showSalePrices","pricingProfileDiscountData","pricingProfileData","ppd","slabSqftValue","end","materialSqft","msqft","$mc","$f","$c","$fa","ci","customDisplayName","displayName","groupName","wizardGroupId","fromWizardGroupId","wizardState","wizardActiveItem","keys","wizardSelectedValues","stepIndex","selectedValue","selectedFeature","$room","$i","$other","$useCostPrices","$useDiscountPrices","$sharedFeatureName","Function","logic","isNaN","markUpLogic","updatePriceWithMarkUp","__stoneSupplierStones","fabricatorSettings","minPrice","stoneSupplierStones","hasPricingProfileAssigned","fabPrice","calculatePrice","pricePlus","perQuantity","ceil","perUnit","margin","calcPriceWithMargin","stoneSupplierStoneInner","bFoundOther","validStoneSupplierStonePrice","trunc","metaData","toUpperCase","camelCased","charAt","capitalizeFirstLetters","str","word","join","getCurrencySign","currencyName","useDifferentCurrencies","getCurrencyPosition","getPriceWithCurrency","withSpace","alwaysRound","currencyPosition","currencySign","getFeatureCurrency","separateCurrency","isExact","formatter","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","getFeatureIsLocked","ignoreLocked","leadCaptureProperty","isVisualizerRoute","userState","filterState","isBackend","jobId","canSaveQuote","visualizerManagement","isPhoneNumberValidated","leadCaptureShoppingCart","hash","ROUTES","cart","list","featureIsLocked","unlocked","filterValues","filterValueIDs","filterKey","filterGroup","filterGroups","group","filterValue","values","lockedInWizard","array","order","getDefaultRoomName","objectWithoutProperties","obj","target","getArrayOfIdsFromBvState","bvState","checkDifferentVisualizers","arrayOfIds","bvStateValue","bvStateValueArrayItem","dbFeatureId","fabFeatId","getShareUrl","url","URL","searchParams","URLSearchParams","param","delete","set","baseHref","origin","pathname","toString","messages","quoteRoomType","getStringFeatureName","locale","fabricatorData","useCollectionName","isLowes","isCaesarStone","fromFeatureName","getFeatureName","isEncore","getCollectionName","_customDisplayName","getSlabUnit","getRoomName","quotes","getCurentQuoteRoomItem","quoteIndexToFind","quoteRoomNameToCompare","currentQuoteIndex","roomCartItem","getLowerCasedCustomDisplayName","room","upperCaseAlp","currentRoomName","roomItem","baseRoomName","quote","letterIndex","getBaseRoomName","getEventPosition","eventX","clientX","touches","changedTouches","eventY","clientY","x","y","getUrlParam","queryParam","getFeatureUnit","intl","formatMessage","unit","lowercasedUnit","getCartItemUnit","displayFakeFeatureGroupName","displayFakeQuantity","totalCount","getSlabsFeatureGroup","layout","getCurrentLayout","countertopFeatureGroup","getCountertopFeatureGroup","slabsFeatureGroup","addNonVisualizerSubPart","part","featuresList","translateId","wasCreatedFromGroupName","dbName","partName","getFeatureGroupName","getQtCategoriesWithSlabFeatureGroup","qtCategories","showSlabMode","selectedQuoteRoomCartItem","getCurrentQuoteRoomCartItem","selectedQuoteRoomFeature","activeCategory","qtCategory","featureIsMatchingQtCatName","categoryToSearch","subParts","subPart","findIndex","featureGroup","lowerCasedName","isDeStefano","customGroupDisplayName","canShowSqftButtonForFeature","fixDbFeatureProperties","fabFilterValueIDs","trim","forFeature","checkArray","canShowForCommonIds","enableSqFt","canShowSqftCabinetButtonForFeature","isCabinetsFabricator","canShowSqftButton","useCategorySwitching","getCartItemObject","fromFeature","newQuantity","qtActiveCategory","cartItemObject","selectionGroup","getRelatedFeaturesFromLayout","relatedFeatures","currentFeature","searchInputValue","selectedFilters","parentParts","parts","relatedFeaturesFound","noFeaturesFound","relatedFeature","featureIsFound","splitFeatureName","parentPart","relatedItems","relItem","edgeCondition","layoutType","description","filterFeaturesByValues","getFilteredRelatedFeatures","relatedFeaturesToCheck","relFeature","featureAlreadyExistIndex","getSplittedFeatureName","navigationSubItems","navItem","createRelatedGroups","relatedGroups","addedCartItem","cartQuantity","relatedFeatureGroupName","getAllFilterGroupValuesFromGroup","fValues","fValue","items","childValue","goToFabricatorUrl","websiteUrl","types","uuid","setWindowWidth","windowWidth","SET_WINDOW_WIDTH","payload","setJavascriptErrors","javascriptError","SET_JAVASCRIPT_ERRORS","setWindowHeight","windowHeight","SET_WINDOW_HEIGHT","setStonePricing","SET_STONE_PRICING","setCookieAccepted","cookieAccepted","SET_COOKIE_ACCEPTED","addVisualizersLoaded","newLoadedVisualizer","ADD_VISUALIZERS_LOADED","showSuccessNotification","successNotification","SHOW_SUCCESS_NOTIFICATION","addProjectDocument","file","sqftDiagram","documents","newDocument","uid","v4","text","created","Date","uploaded","existingCalcDiagramIndex","doc","ADD_PROJECT_DOCUMENT","setProjectDocumentsIds","oldDocuments","oldDoc","responseDoc","documentId","SET_PROJECT_DOCUMENTS_IDS","setJobId","SET_JOB_ID","setStep","activeStep","SET_STEP","setLayoutDataParts","layoutParts","SET_LAYOUT_DATA_PARTS","setStepSwitching","isSwitching","SET_STEP_SWITCHING","toggleSelectionWindow","selectionOpened","showFilters","dispatch","TOGGLE_SELECTION_WINDOW","setDefaultSelectionGroup","SET_DEFAULT_SELECTION_GROUP","setSelectionWindowView","selectionWindowView","SET_SELECTION_WINDOW_VIEW","toggleSelectionFeatureInfo","selectionFeatureInfo","TOGGLE_SELECTION_INFO","updateFeatureInfoCount","UPDATE_FEATURE_INFO_COUNT","setVanityType","vanityTypeSelected","SET_VANITY_TYPE","setShowerType","showerTypeSelected","SET_SHOWER_TYPE","changeSelectionInfoQuantity","selectionInfoQuantity","CHANGE_SELECTION_INFO_QUANTITY","togglePulseFeatureInfoQuantity","pulseFeatureInfoQuantity","TOGGLE_PULSE_FEATURE_INFO_QUANTITY","changeMaterialsInfoFeatureModules","materialsInfoFeatureModules","CHANGE_MATERIALS_INFO_FEATURE_MODULES","changeActivePartRelatedItemIndex","newActivePartRelatedItemIndex","activePartRelatedItemIndex","selectionState","CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX","isSameStep","setActiveFeature","activeFeature","SET_ACTIVE_FEATURE","toggleShowDescriptionCover","showDescriptionCover","TOGGLE_SHOW_DESCRIPTION_COVER","toggleBathroomVisualizerOpen","bvOpened","bathroomVisualizerState","bvVisited","loaderEnable","TOGGLE_BATHROOM_VISUALIZER_OPEN","setBathroomVisualizerVisited","SET_BATHROOM_VISUALIZER_VISITED","setBathroomVisualizerFeatures","bvFeatures","SET_BV_FEATURES","setBathroomVisualizerPresets","bvPresets","SET_BV_PRESETS","setActivePreset","activePreset","SET_ACTIVE_PRESET","setCanvasId","SET_BV_CANVAS_ID","toggleShowRestorePopup","showRestorePopup","TOGGLE_SHOW_RESTORE_POPUP","setCanvasDimensions","canvasDimensions","SET_CANVAS_DIMENSIONS","setCanvasScale","canvasScale","SET_CANVAS_SCALE","setLoadedPresets","loadedPresets","SET_LOADED_PRESETS","toggleLoader","loaderOpened","loaderText","loaderTitle","loaderFullScreen","TOGGLE_LOADER","setMultiLoader","multiLoader","SET_MULTI_LOADER","toggleUserPopup","userPopupState","TOGGLE_USER_POPUP","showCheckoutPopup","changeUserInfo","CHANGE_USER_INFO","changeUserInfoErrors","userInfoErrors","CHANGE_USER_INFO_ERRORS","toggleAdditionalFields","showAdditionalFields","TOGGLE_ADDITIONAL_FIELDS","setUserPhoneNumberValidated","validated","SET_USER_PHONE_NUMBER_VALIDATED","unlockPricing","userIsLoggedIn","userPopupOpened","addToCart","wizardIsActive","wizardActiveStep","allWizardsValues","fromWizardId","fromWizardGroup","fromWizardStep","wizardSteps","wizardGroup","isSquareFootageEnabled","getAvailableSteps","newCartItems","noteText","notesList","foundStep","getWizardStepFromCartItemFeature","getCorrectedWizardGroupForFeature","stepGroups","newCartItem","oldCartItem","bundleFeatures","bundleFeature","bundledFeatureQuantities","assign","bundleParentId","ADD_TO_CART","addDisplayLogicCartItem","ADD_DISPLAY_LOGIC_CART_ITEM","isAddedFromDisplayLogic","changeCartItemQuantity","removeFakeQuantity","CHANGE_CART_QUANTITY","removeFromCart","REMOVE_FROM_CART","changeCartFeature","skipOtherRules","CHANGE_CART_FEATURE","removeInstallationServiceFromCart","installationService","REMOVE_INSTALLATION_SERVICE_FROM_CART","clearCart","CLEAR_CART","toggleApplyPopup","applyPopupOpened","activeApplyPopupItems","TOGGLE_APPLY_POPUP","clickQuestionNo","questionNoClicked","CLICK_QUESTION_NO","setCameFromPage","cameFromPage","CAME_FROM_PAGE","addToRecentlyViewed","ADD_TO_RECENTLY_VIEWED","show","SHOW_CHECKOUT_POPUP","restoreCart","RESTORE_CART","toggleInstOpened","instOpened","TOGGLE_INST_OPENED","setInstList","SET_INST_LIST","setDefaultInstallations","defaultInstallations","SET_DEFAULT_INST_LIST","changeStateToQuote","SET_STATE_TO_QUOTE","setFabricatorData","SET_FABRICATOR_DATA","setFabricatorTaxes","SET_FABRICATOR_TAXES","updateFabricatorSettings","UPDATE_FABRICATOR_SETTINGS","toggleHideItemsSwitcher","TOGGLE_HIDE_ITEMS_PRICES","toggleUseFabricatorCostPrices","TOGGLE_USE_FABRICATOR_COST_PRICES","changeMessageBoxState","messageBoxState","CHANGE_MESSAGE_BOX","setSelectedFilters","SET_SELECTED_FILTERS","loadFilters","fg","fgValue","isFabricatorCustomFilter","LOAD_FILTERS","setExpandedFilters","expandedFilters","SET_EXPANDED_FILTERS","filterId","SHOW_FILTERS","showDocuSign","showFiltersIfHidden","SHOW_FILTERS_IF_NOT_VISIBLE","setFilterVisible","SET_FILTER_VISIBLE","loadMobileNav","LOAD_MOBILE_NAV","hideUserPopup","visible","inline","showSchedulerPopup","SHOW_SCHEDULER","toggleConfirmPopup","confirmPopupOpened","confirmPopupType","TOGGLE_CONFIRM_POPUP","callback","SHOW_DOCUSIGN","showDeposit","SHOW_DEPOSIT","checkForOrderCompletePopup","checkout","hasPaymentGateway","checkoutSuccess","showOrderCompletePopup","showCheckoutLayout","enableDeposit","unlockCalculationsState","unlockCalculationsTutorialIsFinished","_showDeposit","then","enableDocuSign","_showDocuSign","_showCheckoutPopup","shouldUseContractSigning","hashHistory","contract","_showContractSigning","catch","setQtCategoriesRequested","qtCategoriesRequested","SET_QT_CATEGORIES_REQUESTED","setQtCategoriesLoaded","qtCategoriesLoaded","SET_QT_CATEGORIES_LOADED","setQtActiveCategory","SET_QT_ACTIVE_CATEGORY","setIntroVideo","introVideo","SET_INTRO_VIDEO","updateCanvasCount","UPDATE_CANVAS_COUNT","setPresetWasChangedByUser","presetWasChangedByUser","SET_PRESET_WAS_CHANGED_BY_USER","setFirstLoadedPreset","firstLoadedPreset","SET_FIRST_LOADED_PRESET","addLayoutHistory","layoutState","ADD_LAYOUT_HISTORY","setLayoutHistory","layoutHistory","SET_LAYOUT_HISTORY","getCurrentLayoutInstance","getCurrentCanvas","getCurrentZIndexes","createFakeLayout","asLayout","scene","LayoutInstance","fakeLayout","isFakeLayout","parentGroups","getFeatures","needToLoadFeatures","allDbFeatures","s3Bindings","RoomLayout","isNewLayout","RoomScene","loadDbFeature","createCustomConfigurations","setDefaultFeatures","initialized","getVisualizerTypeFromBvScene","bathroom_floor","shower_body","kitchen_floor","getCurrentRoomType","LOOK_ROOM_TYPES","as","grohe","mainNeeded","oppositeNeeded","COUNTERTOP_LABELS","shower_wall","featureGroupCountertop","getSubPartFromQtCategories","getFeatureGroupByPartId","bathTubTypeToString","bathTypeType","BathTubType","Custom60in","FreeStanding","bathTubStringToType","bathtubString","LayoutType","Layout1","Layout2","Layout3","Layout4","Layout5","Layout6","Layout7","Layout8","Layout9","Layout10","Layout11","Layout12","Layout13","Layout14","Layout15","Layout16","Layout17","Layout18","Layout19","Layout20","LayoutAbbreviation","All","LayoutAbbreviations","LayoutAbbreviationsToRemove","METADATA","ALL","NO","LeftSide","RightSide","Center","Inner","Outer","StandAlone","SingleHole","WallHungSinks","WidespreadFaucets","BathtubWithEnclosures","BathtubWithoutEnclosures","ShowerComboTubType","bathtub_liner","replacement_tub","walk_in_tub","jetted_tub","CountsType","allLayoutFeaturesCount","largeLayoutFeaturesCount","smallLayoutFeaturesCount","totalFeaturesCount","VANITY_TYPES","VanityTypes","Complete","Custom","ShowerBodyType","Glass","Door","Simple","ShowerHeadTypes","shower_arm","shower_head_bundle","shower_trim_kit","shower_fixture","shower_system","ShowerHandTypes","hand_shower_kit","hand_shower_holder","vanity_cabinet","vanity_console","vanity_washstand","useNewNavLogicPartIds","vanityWizardFilters","showerWizardFilters","NotQCVanityDoorStylesFilters","COUNTERTOP_GROUP_BATHROOM","CABINET_GROUP_BATHROOM","CORNER_SHELVES_POSITIONS","SIDE_POSITIONS","CONTEXT_MENU_VANITY_ONLY","createParentPositions","layerPositions","position","createPageToLoadArray","nextFeaturesPageToLoadArray","layoutAbbreviation","page","allReceived","PAN_POSITIONS","VANITY_POSITIONS","LOOK_OPENED_TYPES","edit","featureZoom","LOOK_FEATURE_CONTENT","info","threeD","aug","gallery","LOOK_OVERLAYS","exit","intro","print","reset","loadingCart","questionLogin","questionShare","questionView","questionViewUpdated","questionRemove","saveSucess","stylePairing","styleColor","styleRemove","styleRemoveBack","styleRemoveFeature","notCompatiblePopup","leadCapture","LOCAL_STORAGE_KEYS","introVisited","saveQuoteRequired","requiredShareButton","LOOK_INTRO_STEPS","welcome","layoutsAndRooms","wallsAndFloor","saveAndMore","review","LOOK_INTRO_STEPS_MOBILE","layouts","rooms","CONTEXT_MENU_VANITY_BUTTONS","CONTEXT_MENU_BATHTUB_BUTTONS","CONTEXT_MENU_SPLIT_WALL","CONTEXT_MENU_SHOWER_ALL","CONTEXT_MENU_SHOWER_OTHER","CONTEXT_MENU_SHOWER_ACCESSORIES","CONTEXT_MENU_KITCHEN_COUNTERTOPS","CONTEXT_MENU_KITCHEN_CENTER_ISLAND","DECORS_MAX","ALL_CONTEXT_MENU","ALL_CONTEXT_MENU_KITCHEN","LOOK_WALLS","LOOK_WALLS_ONLY","POSSIBLE_ONE_POSITION","WHITE_PAGE_ROUTES","view","login","register","AVAILABLE_FILTERS","WIZARD_STEP_WIDTH","WIZARD_STEP_MOBILE_WIDTH","WIZARD_STEP_PRODUCT_JOURNEY","LOOK_NAVIGATION_LIST_TYPES","regular","designRec","notMatchingMeta","isAnalytics","ga","isMixPanel","mixpanel","Analytics","sendEvent","action","label","analyticsDebugging","gtag","track","source","shareUrl","sendPageEvent","sendDataEnteredEvent","sendClickEvent","sendEcommerceEvent","setUserId","setMixPanelPerson","email","phone","alias","identify","people","setExistingMixPanelPerson","logOutMixPanel","sendParentPostMessage","country","firstName","phoneNumber","postal","postMessage","getSkuForAnalytics","withPartId","sku","getStringForAnalytics","string","QKB_ANALYTIC_EVENTS","quotingToolWizardSwitch","LOOK_JOURNEY_ANALYTIC_EVENTS","lookExit","lookCartButton","lookSidebarHome","lookSidebarFilters","lookSidebarEdit","lookSidebarRooms","lookSidebarPingPilot","lookSidebarSave","lookSidebarMore","lookSidebarShare","lookSidebarReset","lookSidebarFacebook","lookSidebarTwitter","lookSidebarPinterest","lookSidebarFeatureGroup","lookFooterExpandMenu","lookFooterCloseMenu","lookMenuHeaderClose","lookMenuHeaderBack","lookMenuHeaderViewType","lookFooterList","lookZoomPlus","lookZoomMinus","lookCanvasLayer","lookCanvasContextMenu","lookCanvasContextMenuItem","lookCanvasDemoPoint","lookFeatureImageChangeLeft","lookFeatureImageChangeRight","lookFeature3dAndArOpen","lookFeature3dAndArClose","lookFeatureMoreInfoOpen","lookFeatureMoreInfoClose","lookFeatureInfoContentHeaderClose","lookFeatureInfoContent3dAr","lookFeatureInfoContentSwitch","lookFeatureInfoContentFeatureLink","lookFeatureInfoContentAccordionOpen","lookFeatureInfoContentAccordionClose","lookFeatureChange","lookFeatureUnlock","lookFeatureRemove","lookFeatureEnable","lookFeatureConfirmChange","lookFeatureOptions","lookFeatureMatchColorsCheckbox","lookFeatureMobile3dButton","lookFeaturesListDesignRecommended","lookFeaturesList","lookFeaturesFiltersClose","lookFeaturesFiltersReset","lookFeaturesFiltersAccordionOpen","lookFeaturesFiltersAccordionClose","lookFeaturesFiltersValueChecked","lookFeaturesFiltersValuerUnChecked","lookOverlayLeave","lookOverlaySave","lookPopupLogin","lookRoom","lookLeadCapturePopupLogin","lookLeadCapturePopupRegister","lookLeadCapturePopupForgotPassword","lookLeadCapturePopupTwoFAResendCode","lookLeadCapturePopupTwoFAReceiveCall","lookLeadCapturePopupTwoFAUpdatePhone","lookMobileActiveFeatureButton","lookMobileListClose","lookIntroLearnToUse","lookIntroStartDesign","lookIntroSkip","lookIntroFinalStepStartDesign","lookIntroPagination","lookIntroNextStep","lookRoomIdeasOnIntro","lookRoomIdeasOpen","lookRoomIdeasClose","lookRoomIdeasPreset","lookMainCategory","lookCanvasPolicyLinks","lookListPolicyLinks","lookListHeaderSave","lookListBackToCustomize","lookListAddToCart","lookListOpenMiniCart","lookListSelectAllItems","lookListCartItemSelect","lookListCartItemQuantityChange","lookListCartItemRemove","lookListCartItemMoreDropdown","lookListCartItemMoreDropdownWishlist","lookListCartItemMoreDropdownChange","lookStylePopupConfirmRemove","lookStylePopupRemoveBackContinue","lookStylePopupRemoveBack","lookStylePopupConfirm","lookPopupSaveSuccessSubmit","lookPopupSaveResetSubmit","lookPopupChangeViewSubmit","lookMenuWizard","lookWizardParent","lookWizardListFeature","lookWizardListFilter","lookWizardMatchAll","lookWizardCompletedClose","lookShowCompatabilityAlert","lookCloseCompatabilityAlert","lookCloseAndApplyCompatabilityAlert","lookLockedButton","lookSidebarRevertCtrlZ","PRODUCT_JOURNEY_ANALYTIC_EVENTS","productTopButtonsShop","productTopButtonsExit","productTopButtonsMenu","productTopButtonsShare","productTopButtonsPingPilot","productTopButtonsShareFacebook","productTopButtonsShareTwitter","productTopButtonsSharePinterest","productTopButtonsSave","productCanvasLayer","productCanvasContextMenu","productCanvasContextMenuItem","productCanvasDemoPoint","productSidebarHeaderAllProducts","productSidebarHeaderRoomLayouts","productSidebarHeaderCart","productSidebarCategory","productFeatureChange","productFeatureImageChangeLeft","productFeatureImageChangeRight","productFeatureMoreInfoOpen","productFeatureMoreInfoClose","productFeatureInfoContentAccordionOpen","productFeatureInfoContentAccordionClose","productFeatureQuantityChange","productFeatureRemove","productFeatureEnable","productFeature3dAndArOpen","productFeature3dAndArClose","productFeatureInfoContentHeaderClose","productFeatureInfoContent3dAr","productFeatureInfoContentSwitch","productFeatureInfoContentFeatureLink","productFeatureUnlockNow","productFeatureLockedBadge","productFeatureLocked3DButton","productFeatureSQFT","productFeatureAddToCart","productFeatureContinueShopping","productFeatureCloseProductsList","productFeatureOptions","productFeatureMobile3dButton","productFeaturesNext","productFeaturesList","productFeaturesListViewType","productFeaturesFiltersClose","productFeaturesFiltersReset","productFeaturesFiltersAccordionOpen","productFeaturesFiltersAccordionClose","productFeaturesFiltersValueChecked","productFeaturesFiltersValuerUnChecked","productSimilarListClose","productSimilarListTitle","productSimilarListFeature","productSimilarListFeatureAddToCart","productOverlayLeave","productOverlaySave","productPopupLogin","productMatchColorsVisualizeAllCheckbox","productRoom","productRoomLayouts","productRoomIdeas","productRoomIdeasPreset","productFiltersOpen","productMenuFooterButton","productPopupSaveSuccessSubmit","productPopupResetSubmit","productPopupChangeViewSubmit","roomsRoomLayouts","roomsRoomIdeas","cartCheckoutLogin","cartCheckoutRegister","cartCheckoutSuccessContinueShopping","cartCheckoutSuccessViewAll","cartCheckoutSuccessFeature","cartTermsAccept","cartTwoFANext","cartTwoFAUpdatePhone","cartTwoFAResendCode","cartTwoFAReceiveCall","leadCapturePopupLogin","leadCapturePopupRegister","leadCapturePopupForgotPassword","leadCapturePopupTwoFAResendCode","leadCapturePopupTwoFAReceiveCall","leadCapturePopupTwoFAUpdatePhone","productLockedButton","shopFeaturesList","shopFeaturesListOptions","shopFeatureOptions","shopFeatureAddToCart","shopHelpChat","shopSQFTButton","SHAPE_PART_ID","SQFT_POST_MESSAGE_ACTIONS","initialLoad","setQTData","closeSqFtCalc","callResetDataPopup","callChangeLayoutDataPopup","userIdleResetCounter","resetHistory","saveHistory","setNewLayoutOnSqft","setCanvasCenter","stopRender","startRender","MEASURE_UNITS","Metric","Imperial","edge","seamPiece","backsplashPiece","waterfallPiece","slabPlaceHolder","top_cabinet","bottom_cabinet","tall_cabinet","lower_cabinet_boxes","upper_cabinet_boxes","tall_cabinet_boxes","countertop","spacer","vanity_countertop","center_island_countertop","dishwasher","hood","SIDEBAR_NAVIGATION_BUTTONS","FEATUREGROUP_PART_ID","specialty_cut_and_designs","SHAPE_ROTATE_DIRECTION","right","left","ALIGN","center","SHAPE_TYPE","polygon","square","wideangle","horseshoe","appliances","RENDER_TEMPLATES","default","linesOnly","filledPrimary","accordingToFeature","filledActive","SIDEBAR2_BUTTONS","menu","classNames","hasMenu","SIDEBAR_BUTTONS_MENU","move","shapes","summary","cabinetset","SIDEBAR_SLAB_BUTTONS","rotate","loadSlab","seam","duplicate","MOVABLE_IMAGE_TYPES","slabImage","SIDEBAR_SLAB_SEAM_BUTTONS","addSeamHorizontal","addSeamVertical","undoSeam","resetSeams","freeDraw","resize","corners","radius","backsplash","end_cap","angle","bumpout","hardCodeIsLowes","mitered","hardCodeIsMcDermott","toolWaterfall","hardCodeIsModerno","hardCodeIsPorcelanosa","toolUnderlayment","SIDEBAR_NAVIGATION_CABINET_BUTTONS","SIDEBAR_TYPE_AREA_NAVIGATION_BUTTONS","lower","upper","tall","centerIsland","wall","top_handle","bottom_handle","end_panel","SQFT_APPLIANCES","SIDEBAR_NAVIGATION_BUTTONS_LEVEL3","filters","SIDEBAR_BUTTONS","message","shouldHardcodeMessage","subMenu","title","additionalClassNames","SIDEBAR_TYPE_AREA_BUTTONS","SIDEBAR_CABINET_BUTTONS","SIDEBAR_WITH_FEATURES_SUBMENU","SIDEBAR_HIDDEN_BUTTONS","buttonMitered","buttonCustomBacksplash","edgePeninsulaUnderwrap","SIDEBAR_SHAPE_BUTTONS","lshape","rectangle","dot","isDisabledInPopupShouldBeHidden","hardCodeIsCaesarStone","SIDEBAR_LAYOUTS_BUTTONS","refrigerator","range","sink","doubleSink","iceMachine","oven","stovetop","trashCompactor","wineFridge","CABINET_LABELS","SQFT_APPLIANCES_CAES","crown_molding","handle","SQFT_CABINET_APPLIANCES","SQFT_APPLIANCES_WITH_SUBMENU","microwave","SQFT_SHAPES_THAT_ADD_OVERHANG","SQFT_MODE","slab","SQFT_VIEW_MODE","twoDMode","threeDMode","threeDModeDoors","augmentedReality","augmentedRealityDoors","MANUAL_CALCULATION_ROW_TYPES","countertopRows","backsplashRows","edgeRows","DIRECTION","north","east","south","west","MANUAL_CALCULATION_MEASURE","SQFT_BACKSPLASH_TYPES","SQFT_BACKSPLASH_TYPES_METRIC","SQFT_WALL_TYPES","SQFT_MEASURE_UNIT","imperial","metric","FREE_DRAW_TYPE","shape","CONTEXT_MENU_TYPE","buttons","bumpouts","backsplashes","edges","shower_floor","vanity_accent","vanity_backsplash","shower_interior_wall","shower_interior_wall_accent","shower_wall_accent","accent_wall","wall_a","wall_b","wall_c","front_wall","underlayment","wall_door_end_accessory","base_door","island_panel","refridgerator_panel","END_CAP_CABINETS_PART_IDS","PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART","END_CAP_AREA_PART_IDS","END_CAP_PART_IDS","SQFT_AREA_TYPE_PART_IDS","SQFT_PARENT_FEATURE_GROUP_PART_IDS","SQFT_CHILD_FEATURE_GROUP_PART_IDS","BACKSPLASH_LABELS","HANDLE_TO_CABINETS","CABINET_COMMON_COLOR_PART_IDS","FEATURE_QUANTITY_UNITS","EDGE_LABELS","edge_profile","center_island_edge","CORNER_LABELS","corner","SHAPE_PART_IDS_USING_SAME_COLOR","FEATURES_WITH_0_VALUE_FOR_THE_SLABS","ALLOWED_LABEL_NAV_ITEMS","POINT_PROPERTY","arcLength","RESOURCE_TYPE","attachedToLine","waterfallSectionsData","underlaymentSections","RESOURCE_ATTACHED_TO_TYPE","waterfall","RESOURCE_ATTACHED_TO_NAME","WORKSPACE_RESOURCES","spacers","handles","walls","shapeColors","removedFeatures","snappedShapeGroups","selectedShapes","images3d","WATERFALL_SHAPES_KEY","cabinetReturn","overhangReturn","peninsulaUnderwrap","WATERFALL_SHAPES_NAME","SQFT_GROUP","area","cabinets","SQFT_AR3D_POPUP_CONTENT_TYPE","ar","SQFT_AR3D_GLB_VIEWER","singleModel","separateModels","MITER_UNDERWRAP_EDGE_NAMES","MITER_EDGE_NAMES","WATERFALL_OVERLAY_TYPE","MITERED_OVERLAY_TYPE","APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE","CABINET_SET2","ContentType","None","Layout","Design","DisplayRoom","Loading","QuotedItems","ContentTypeName","2","3","6","ContentTypeNameTranslate","UserPopupTypes","Unlock","GetQuote","NewDesign","Schedule","ConfirmPopupTypes","ConsultationRequest","SqftResetChanges","SqftUpdateQuestion","AssignQuoteOnExistingUser","DeleteCartItemsPopup","ChangeWizardToPreviousStepSelection","ReplaceRoomWhenItExistsInCartButWeAddNew","UserPopupContent","terms","forgot","twoFA","twoFAVerify","QuoteRequestType","RequestQuote","ScheduleAnAppointment","RequestDateTime","RegularDesign","RequestConsultation","UserAction","Login","Register","SqftUpdateTypes","Reset","UpdateData","dbFeatureRelatedFeaturesProperties","dbFeatureFilterProperties","otherMissingProperties","colorOptions","matchesMetaFailed","initializeDependentProperties","fieldWidth","getMM","fieldWidthCabinet","updateDimensions","updateDefaultScale","scale","defaultScale","div","createElement","appendChild","dpi","offsetHeight","removeChild","getDPI","kioskApp","initialize","updateWorkspace","innerWidth","workspace","fontSize","fontSizeMetric","fontSizeSmallest","getMeasureMultiplier","millimetersMultiplier","getMeasureUnitPostfix","shouldAddWhitespace","isCabinetGroupInURL","isSQFTEnabledInURL","getScaledGridSize","gridSize","isDefault","scaledGridSize","nearest","ctx","mmDivider","mm2ToM2Divider","inchesToMMultiplier","sqftToMmMultiplier","sqftToM2Multiplier","lnftToMmMultiplier","waterfallImperialHeight","waterfallMetricHeight","miteredEdgeAdditionalImperialArea","miteredEdgeAdditionalMetricArea","edgeHeightImperial","edgeHeightMetric","minApplianceLineLength","maxApplianceLineLength","imageWidthMetric","imageHeightMetric","imageWidthImperial","imageHeightImperial","canvas","getDefaultScaledGridSize","debug","snapToGrid","menuItemActive","defaultScaleExport","zoomSpeed","controls","scaleHoriz","flipH","flipV","rotateLeft","rotateRight","activeClass","activePalletItemClass","groups","tools","tutorialIsRunning","highlight","points","lines","demoShow","rotateAngle","SNAP_OFFSET","activeFontRegular","activeFontBold","crownMoldingParams","distance","glbViewer","useGoogleModelViewer","useStagingDomain","addEventListener","mouseDown","mouseDownPosition","allowDragEdge","allowDragBumpoutEdge","allowDragMiteredEdge","lineHighlight","loading","objIds","pos","nodes","appBody","designDefault","setCanvas","isInitialized","isEdgeFeatureError","dataHasBeenImported","isLastParent","miteredController","underlaymentController","resultImages","textBoxManager","onMouseDown","mousePos","lineInputFocused","stealCursor","setCursor","onMouseUp","updateShapesIntersections","updateShapesSnappedGroups","onMouseMove","terminate","xDiff","yDiff","setPos","moveWorkspace","resetCursor","getObjIds","setObjIds","who","setAllowEdges","allow","getAllowEdges","setAllowBumpoutEdges","getAllowBumpoutEdges","setAllowMiteredEdges","getAllowMiteredEdges","setAllowLineHighlight","getAllowLineHighlight","getCenter","setCenter","canvasWidth","canvasHeight","innerHeight","getVisibleCenter","getAllShapePoints","allShapePoints","shapeCenter","getPointField","getShapesCenterPoint","getCenterPoint","getCanvas","get$Canvas","getOffset","setPosition","newPos","clone","getPosition","getScale","isEmpty","getShapes","getHoverShape","isHovering","getHoveredSqftShape","getMovingShape","getHoverBumpout","getLines","isWithBumpout","bumpoutOverlay","isHoveringRect","getLineWithMovingBumpout","isBumpoutPointMoving","getHoverPoint","point","getHoverMiteredPoint","isWithMitered","getHoveredLine","getHoverSegment","hoveredLine","getHoveredLines","skipShapeIds","iterateShapes","shp","hoveredLines","getHoverSegmentV2","getHoveredLineCorner","getHoverSegmentOutlineCorner","getShapesWithoutAttachedResources","isWithoutHidden","isHidden","attachedToLineResources","sqftResourceState","concat","getShapeIds","getShapesByIds","ids","getShapesBySlabModeCoreParentId","slabModeCoreParentId","getAttachedToLineResource","clearWorkspace","removeAllShapes","removeAllTextBoxes","removeAllSlabImages","removeAllSlabBacksplashes","deleteAllResources","deleteAllMiteredSections","deleteShapeOffset","import","importData","clearAllMenusEvents","edgeFeatures","countertops","_images","_attachedResources","importShape","image","importSlabBacksplashes","slabAdditionalShapesList","attachedResource","getLinesAndLineCorners","line","attachedToId","isDisabledInPopup","attachResource","isLine","featureId","qtCatName","attachedTo","importImage","setImportedTextBoxes","textBoxes","importSlabImages","slabImages","sqftMenuState","isShapeFeatureMissing","showChangeShapeColorsMessage","importControllersData","controllers","rememberShapes","imageData","generateImage","importedMovableImage","addImage","subtype","priority","Image","imageProperty","shapeData","shapeIdsWithMissingFeature","setSQFTPopup","content","isOpened","confirmCallback","removeShapeWithIds","setShapeIdsWithMissingFeature","setShouldShowChangeShapeFeatureMissingMessage","closeSQFTPopup","confirmText","cancelCallback","cancelText","getPointProperty","arcLengths","from","getQtCatName","getSink","sinks","getAttachedTo","img","getImage","sinkId","dataset","bExists","qty","getBumpouts","flatMap","getBumpoutTotalArea","millimeters","inches","featureObjectDTO","addBumpoutArea","allLines","getLineCorners","allLineCorners","getLineById","getLineCornerById","undefined","lineCorner","getLineOrCornerLineById","lineSegment","getMiteredSections","sqftMiteredState","miteredSections","getShapeType","addedEdges","edgeName","isImageShapeType","isLabelShapeType","backsplashLength","realLength","lineLength","storedShapes","SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE","historyProps","getBacksplashArea","getBacksplashHeight","getBacksplashLength","getEdgeLength","getEdgeFeatures","edgeFeature","getLineLength","getLineLengthMm","getEdgeArea","parentId","segments","pieces","getTotalInches","getTotalMillimeters","getFeatureGroup","featureGroupName","mmToM","hoverShape","subType","historyCallBack","historyPosition","objId","hide","vc","newImage","onHover","onShapeHover","onInit","onShapeReady","attachedToShape","init","attachedShape","attachedToParentId","unshift","getImagesAttachedTo","addShape","shapeType","fromLayout","shapeParams","realPartId","checkShapeForAvailablePartId","mm","getMinMax","shapeId","newShape","openedMobileButton","setQtCatName","hasClass","addClass","removeClass","tutorialShape","setFeatureId","getShapeFeatureId","removeTutorialShape","removeShape","shapeIds","removeShapeById","removeSlabImage","movableImage","croppedSlabImages","deleteCroppedSlabImage","deregisterEvents","getShapeById","combinedShapes","shapesCopy","currentShape","overlay","destroy","deleteAttachedItem","to","removeAttachedItem","originalIndex","removeShapePieces","slabAdditionalShapes","removeShapeFromList","updateCalculations","updateSQFTCalculations","updateRemovedFeatures","addResource","removeFeatureBySQFTId","sqftId","deleteAttachedItemById","removeAllBumpouts","removeBumpouts","setSqftCroppedSlabImages","setIntl","$canvas","addEvent","events","MOUSE_MOVE","priorities","WORKSPACE","MOUSE_DOWN","MOUSE_UP","RENDER","render","isSFTCabinetsGroup","initCabinetEvents","renderGrid","workspaceController","start","scaledGrid","lineWidth","clearRect","beginPath","moveTo","lineTo","strokeStyle","stroke","setLookOpened","lookOpened","SET_LOOK_OPENED","setLookExpanded","lookExpanded","setLookParentKeys","lookParentKeys","SET_LOOK_PARENT_KEYS","setLookViewType","lookViewType","SET_LOOK_VIEW_TYPE","setWishlistPopupOpened","wishlistPopupOpened","SET_WISHLIST_POPUP_OPENED","setSidebarModalOpened","sidebarModalOpened","SET_SIDEBAR_MODAL_OPENED","setLookActiveFeature","newLookActiveFeature","lookActiveFeaturePositionInList","SET_LOOK_ACTIVE_FEATURE","lookActiveFeature","useTrumbleApi","quantityOptions","setTrumbleInventoryForFeatures","UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT","setLookActiveCategory","lookActiveCategory","SET_LOOK_ACTIVE_CATEGORY","setLookMoreInfoOpened","moreInfoOpened","moreInfoContent","SET_LOOK_MORE_INFO_OPENED","setLookPageOpened","lookPageOpened","SET_LOOK_PAGE_OPENED","setLookOverlayOpened","lookOverlayOpened","lookOverlayAction","SET_LOOK_OVERLAY_OPENED","setLookViewChangeOptions","lookViewChangeOptions","SET_LOOK_VIEW_CHANGE_OPTIONS","setLookStylePopup","lookStylePopup","SET_LOOK_STYLE_POPUP","setLookRemovePopup","lookRemovePopup","SET_LOOK_REMOVE_POPUP","setLookIntroStep","introStep","SET_LOOK_INTRO_STEP","setLookIntroHidden","introHidden","SET_LOOK_INTRO_HIDDEN","setLookContextMenu","contextMenu","SET_LOOK_CONTEXT_MENU","setLookWallsApplyTo","lookWallsApplyTo","SET_LOOK_WALLS_APPLY_TO","setLookAllWallsOpened","lookAllWallsOpened","SET_LOOK_ALL_WALLS_OPENED","setLookReturnAction","lookReturnAction","SET_LOOK_RETURN_ACTION","setLookDemoPointsClicked","lookDemoPointsClicked","SET_LOOK_DEMO_POINTS_CLICKED","updateNavigationCount","UPDATE_LOOK_NAVIGATION_COUNT","setLookCompatabilityAlert","lookCompatabilityAlert","SET_LOOK_COMPATABILITY_ALERT","setLookRestoreState","lookRestoreState","SET_LOOK_RESTORE_STATE","setLookLockedTutorial","lookLockedTutorial","SET_LOOK_LOCK_TUTORIAL","setLookAllWallsTutorial","lookAllWallsTutorial","SET_LOOK_ALL_WALLS_TUTORIAL","SET_RELATED_GROUPS","SET_RELATED_GROUPS_SEARCH","TOGGLE_GALLERY_VISIBLE","SET_GALLERY_ACTIVE_IMAGE_INDEX","SET_MATERIALS_PAGE_SUB_STEPS","SET_MATERIALS_PAGE_ACTIVE_SUB_STEP","TOGGLE_NOT_COMPATIBLE_VIEW","TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE","SET_ROW_ITEMS","SET_MATERIALS_PAGE_CANVAS_CLASS","SET_LANGUAGE","SET_ACTIVE_THEME","SET_NETWORK_CONNECTION","SET_INITIAL_VISUALIZER_TYPE","SET_STATIC_CANVAS_IMAGE","SET_EMPLOYEES_LIST","RESTORE_USER_STATE","SET_ALREADY_REGISTERED_USER","SET_LEAD_CAPTURE_CLICK_COUNT","SET_USER_POPUP_CONTENT","SET_USER_TWO_FA","SET_USER_OPT_IN","SUBMIT_PAYMENT","SUBMIT_PAYMENT_RESPONSE","SHOW_ORDER_COMPLETE_POPUP","TOGGLE_SHOW_MOBILE_QUOTES","TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST","SET_AGREE_EMAIL_CHECKBOX","SET_CART_FOOTER_ACTIVE_BUTTON_INDEX","SET_CART_ITEM_EDIT_FEATURE","SET_LOOK_REMOVED_CART_ITEMS","SET_AMAZON_IMAGE_URL","SET_CART_ITEMS_ADDED_TO_PARENT_CART","CHANGE_ALL_CART_ITEMS","SET_SURE_TAX","SET_SURE_TAX_LOADING","SET_MANUAL_TAX","SET_MARK_UP_LOGIC","SET_DELIVERY_LIST","SET_ALL_FEATURES_LOADED","SET_ALLOW_ROUTING","SET_ALLOW_MAIN_LOADING","SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED","SET_VISUALIZER_TYPE_CHANGING","TOGGLE_PRICE_WORKSHEET_OPENED","SET_DISCOUNT_SECTIONS","SET_CUSTOM_ADDED_DISCOUNTS","SET_FINANCE_PERCENTAGE","SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE","SET_DISCOUNT_FINANCE_CELLS_VISIBLE","SET_AVAILABLE_FILTER_VALUES","UPDATE_FILTERS_COUNT","SET_COUNTERTOP_FILTERS_RECEIVED","TOGGLE_DESKTOP_NAVIGATION","SET_ACTIVE_NAVIGATION_NAMES","SCHEDULER_SCHEDULE","SET_MODULE_CONTEXT_MENU_TYPE","SET_MODULE_CONTEXT_MENU_MODULE","SET_MODULE_CONTEXT_MENU_MODULE_PART","SET_MODULE_CONTEXT_MENU_DIRECTION","SET_NAVIGATION_VIEW_TYPE","SET_CABINETS_APPLY_TO","SET_CABINETS_APPLY_TO_BATHROOM","SET_COUNTERTOPS_APPLY_TO","SET_COUNTERTOPS_APPLY_TO_BATHROOM","SET_APPLY_TO_COMMON","SET_EDGES_APPLY_TO","SET_NAVIGATION_LOADING","UPDATE_DISABLE_FEATURE_GROUP_RADIO","TOGGLE_NAV_ITEM_POSITION_MODAL","SET_USE_FEATURES_LIGHT_REQUEST","SET_ACTIVE_NAVIGATION_FILTER","SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX","SET_CABINET_NAVIGATION_FILTER_COMPLETED","SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED","SET_COUNTERTOP_WIZARD","SET_WIZARD_CONFIG","SET_WIZARD_IS_ACTIVE","SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX","SET_WIZARD_LIST","SET_WIZARD_ACTIVE_ITEM","SET_WIZARD_SHOW_FEATURE_SECTION","SET_WIZARD_ACTIVE_STEP","SET_WIZARD_SELECTED_VALUES","SET_ALL_WIZARD_SELECTED_VALUES","SET_WIZARD_CONFLICT_POPUP_OPENED","SET_WIZARD_CONFLICT_STEPS","RESTORE_ALL_WIZARD_SELECTED_VALUES","SET_WIZARD_MISSING_FEATURES","SET_WIZARD_SQFT_CART_ITEMS","ENABLE_SQUARE_FOOTAGE","SET_SQUARE_FOOTAGE_GROUP","SET_SQFT_VIEW_MODE","LOAD_SQFT","UPDATE_SQFT","UPDATE_SQFT_CALCULATIONS","SET_SQFT_SQUARE_FEET","TOGGLE_CHANGE_LAYOUT_POPUP","SET_NEW_LAYOUT_ON_SQFT","SET_SQFT_MEASURE_UNIT","CHANGE_SQFT_FEATURES_POPUP","SQT_SQFT_FROM_FEATURE","SET_CABINETS_GLB","SET_CABINETS_AR_BLOB_URL","SET_API_ERROR_MESSAGE","SET_SHAPE_IDS_WITH_MISSING_FEATURES","SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE","ADD_SHAPE_ID_WITH_MISSING_FEATURES","SET_SELECTED_COUNTERTOP","SET_ABORT_CONTROLLER","SHOW_SLAB_TOOL","SET_SLAB_TOOL_VISITED","ADD_ROOM_WITH_VISITED_SLAB_TOOL","SET_ACTIVE_SLAB_ID","SET_ACTIVE_SLAB_URL","SET_SQFT_SLAB_ACTIVE_STEP","SET_SQFT_SLAB_SEARCH_TEXT","SET_SQFT_SLAB_ASPECT_RATIO","SET_SQFT_SLAB_IMAGE_WIDTH","SET_SQFT_SLAB_IMAGE_HEIGHT","SET_SQFT_SLAB_CROPPER_DATA","SET_SQFT_CROPPED_SLAB_IMAGES","ADD_SQFT_CROPPED_SLAB_IMAGE","DELETE_CROPPED_SLAB_IMAGE","SET_PRICE_PER_AREA","SET_SLAB_IMAGE_TYPE","SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE","SET_IS_SIZE_VALIDATION_FAILED","SET_IS_SLAB_PRICING_ENABLED","SET_MITERED_SECTIONS","ADD_MITERED_SECTION","CHANGE_MITERED_SECTION","DELETE_MITERED_SECTION","DELETE_ALL_MITERED_SECTIONS","SET_RESOURCES","ADD_RESOURCE","CHANGE_RESOURCE","DELETE_RESOURCE","DELETE_RESOURCE_ATTACHED_TO","DELETE_ALL_RESOURCES","SET_SELECTED_FEATURE","SET_SELECTED_PART_IDS","SET_SQFT_MENU_OPENED","SET_SQFT_MENU_LOCK","SET_SQFT_MENU_ACTIVE_BUTTON","SET_SQFT_SYSTEM_MESSAGE","SET_SQFT_AR3D_POPUP","SET_SQFT_POPUP","SET_SQFT_CONTEXT_MENU","SET_SQFT_CONTEXT_MENU_V2","SET_SQFT_SYSTEM_DELETE_MESSAGE","SET_SQFT_ACTIVE_SUB_MENU_BUTTON","SET_SQFT_ACTIVE_LEVEL3_BUTTON","SET_SQFT_ROOM_LAYOUTS","SET_SQFT_ACTIVE_ROOM","SET_SQFT_ACTIVE_ROOM_ID","SET_SQFT_ACTIVE_ROOM_TYPE","SET_SQFT_ACTIVE_ROOM_INDEX","SET_SQFT_ROOM_SWITCHER_VISIBLE","SET_FREE_DRAW_MODE","SET_CHANGE_VALUE_POPUPS","ADD_CHANGE_VALUE_POPUP","CHANGE_VALUE_POPUP","DELETE_CHANGE_VALUE_POPUP","SET_VALIDATION_POPUPS","ADD_VALIDATION_POPUP","VALIDATION_POPUP","DELETE_VALIDATION_POPUP","SET_WALLS_UP_MODE","SET_WALLS_LOCK_MODE","SET_IS_ITEXT_EDITING","SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES","SET_RE_CACHE_MENU_COUNTER","TOGGLE_SHOW_MANUAL_CALCULATION","SET_SWITCHER_POSITION","ADD_MANUAL_CALCULATION_ROW","UPDATE_MANUAL_CALCULATION_ROW","UPDATE_MANUAL_CALCULATION_ROWS","DELETE_MANUAL_CALCULATION_ROW","SET_SQFT_TUTORIAL_STEP","SET_SQFT_TUTORIAL_SWITCHING","SHOW_CONTRACT_SIGNING","SET_AFTER_CONTRACT_SIGN_CALLBACK","SHOW_MATERIALS_TUTORIAL","SET_MATERIALS_TUTORIAL_STEP","SET_MATERIALS_TUTORIAL_FINISHED","SHOW_MATERIALS_AGENT_TUTORIAL","SET_MATERIALS_AGENT_TUTORIAL_FINISHED","SHOW_VISUALIZER_TUTORIAL","SET_VISUALIZER_TUTORIAL_STEP","SET_VISUALIZER_TUTORIAL_FINISHED","CONTRACT_SIGNING_SET_STEP","CONTRACT_SIGNING_POST_SIGNATURE","CONTRACT_SIGNING_JOB_DOCUMENT","CONTRACT_SIGNING_SHOW_SIGNATURE_PAD","CONTRACT_SIGNING_SET_CONTRACTS_VALUES","SET_CONTRACT_BLOB","CONTRACT_SIGNING_RESTORE_VALUES","CONTRACT_SIGNING_SET_CONTRACTS_LIST","SET_FABRICATOR_SUBSCRIPTIONS","SET_INITIAL_FLOW_FINISHED","SET_INITIAL_FLOW_ADDITIONAL_ROOMS","SET_INITIAL_FLOW_BUTTON","SET_INITIAL_FLOW_ROOM","SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE","SET_INITIAL_FLOW_ROOM_LAYOUT","SET_INITIAL_FLOW_STEP","SET_SHOW_UNLOCK_CALCULATIONS","SET_UNLOCK_CALCULATIONS_STEP","SHOW_UNLOCK_CALCULATIONS_CART_ITEM","SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM","SHOW_UNLOCK_CALCULATIONS_TUTORIAL","SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP","SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED","ADD_NEW_QUOTE","SET_QUOTES","UPDATE_QUOTE","SET_ACTIVE_QUOTE_INDEX","TOGGLE_SHOW_ADVANCED_QUOTING","SET_ADVANCED_QUOTING_SEARCH_ITEM","TOGGLE_SHOW_ASSIGN_QUOTE_POPUP","SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT","SET_ASSIGN_QUOTE_POPUP_EMPLOYEE","SET_ASSIGN_QUOTE_POPUP_CUSTOMER","SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT","SET_ASSIGN_QUOTE_CLONE_MODE","SET_ASSIGN_QUOTE_OFFLINE_DATA","SET_RECEIPT_URL","SET_RECEIPT_SIGNATURE","SET_LOOK_EXPANDED","SET_LOOK_PARENT_KEY","SET_LOOK_LAYOUT_OPENED","SET_IFRAME_INTEGRATION_REQUEST","SET_IFRAME_INTEGRATION_RESPONSE","SET_GROHE_FILTERS_OPENED","SET_GROHE_SIMILAR_FEATURE","SET_GROHE_SIMILAR_PRODUCTS_OPENED","SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE","SET_GROHE_FILTERS_SEARCH_TEXT","SET_GROHE_LAST_OPENED_CATEGORY","SET_GROHE_SUB_CATEGORY_OPENED","SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS","SET_GROHE_ACTIVE_FEATURE_QUANTITY","SET_GROHE_SHARE_BUTTONS_OPENED","SET_GROHE_SAME_COLOR_ACTIVE_FEATURE","SET_GROHE_SAME_COLOR_SECTION_OPENED","SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED","SET_GROHE_EXISTING_TEMP_ID","SET_GROHE_WIZARD_NAME","SET_GROHE_WIZARD_OPENED","SET_GROHE_WIZARD_STEP","SET_PAYMENT_INFO","SET_CARD_INFO","SET_CARD_ERRORS","SET_SHIPPING_ERRORS","SET_SHIPPING_INFO","SET_BILLING_INFO","RESTORE_PAYMENT_INFO","SET_SHOP_PAGE_LOADED","SET_SHOP_PAGE_OPENED","SET_SHOP_LAST_PAGE_VISITED","SET_SHOP_PAGE_LEAVED","THUMBNAIL_SIZES","small","medium","large","imageThumbnail","features_root","getUrlSQFTHashParam","res","item","isEdge","getParamFromUrl","fabricatorId","getFontsize","getPointDistance","getFontsizeSmall","rotatePoint","PI","cos","sin","pointDistance","sqrt","pow","round10","getMidPoint","getClosestPoint","get45CornerLegDistanceByHypotenuse","hypotenuseDistance","point1","point2","getPointBetweenPoints","getSectionPartPoint","getParralelPoint","pointA","pointB","distanceFromLine","midPoint","getParallelPoints","vector","len","ud","parallelPoint1","parallelPoint2","getDistanceFromPointToLine","x1","y1","x2","y2","C","D","len_sq","xx","yy","dx","dy","getDistanceFromPointToInfiniteLine","abs","distanceFromPointA","decimals","Xa","Ya","Xb","Yb","k","Xc","Yc","posX","posY","offset","getMousePositionOnField","getPointOnWorkspace","mouseX","mouseY","wPos","getMousePositionOnShape","pointPosOnShape","getPointPositionOnShape","pointPosX","pointPosY","findClosestPointPairs","pointsA","pointsB","closestPoint","minDistance","MAX_VALUE","orientation","VERTICAL","HORIZONTAL","NORTHWEST","SOUTHEAST","NORTHEAST","SOUTHWEST","regex","RegExp","results","exec","mmToInches","numToLetter","num","mod","out","String","fromCharCode","letterToNum","charCodeAt","cmToInches","cm","inchesToM","cmToMm","inchesToMm","totalInches","shouldCeil","shouldRound","inchesToLNFT","sqftToM2","sqInchesToMM2","sqInchesToM2","sqftToMM2","lnftToMM","measureDistanceToInches","getTransformedMeasureUnit","numerator","denominator","common","total_segments","segmentDistance","fraction","rounded","floor","feet","reduced","decimal","gcd","getSnappedPos","distanceToInches","dist","fraction_text","distanceToMillimeters","lineBumpoutTotalHeight","lineCornerWidth","getLength","getLineBumpoutTotalHeight","get45CornerLegDistance","prevLine","getPrevLine","totalArea","isWaterfallFeature","isMiterEdge","miterEdgeHeight","getMiterEdgeHeight","backsplashValue","backsplashArea","getGCD","truncate","setStylesOnElement","element","styles","getMinInArray","attrib","prev","curr","getMaxInArray","getIntersectCords","getAspectRatio","heightGCD","aspectHeight","aspectWidth","getIntersectCordsBetweenLines","point3","point4","isRounded","shouldExtend","getIntersectCordsWithExtendedSegments","x3","y3","x4","y4","ua","ub","A1","B1","C1","A2","B2","C2","det","getPointOnTheLine","isPointInsideShape","includeBorder","inside","shapeLines","iPosition","jPosition","xi","yi","xj","yj","isPointOnLine","pt","linePt1","linePt2","dxc","dyc","dxl","dyl","getAreaByShoelaceFormula","addDecimalToLength","getAngleBetweenTwoPoints","atan2","getAngleRelativeToTheHorizontalAxis","getTanDeg","deg","rad","tan","getClosestHigherNumber","needle","isDisabledInPopupWithParents","isInnerCorner","minLineLength","shapePoints","getPointFieldArray","closePoint1","closePoint2","isPointInsidePolygon","parseImperialFractionToDecimal","input","wholePart","fractionPart","decimalValue","IntermediatePart","isChild","getNavItemsWithOptions","newFeatures","allFeatures","matchingFeatureProperty","useMatchingFeatureReplacement","neededColorName","getColorName","getColorFilterValue","otherOptions","getOptionsFromNavItemsForFeature","currentFeatureColor","customFullDisplayName","getMatchingOptionsName","matchByCollection","allowCheckForCollection","_collectionName","matchForSimilarSku","getSkusDifferences","lixilProductSubCategory","option","colorValue","mainFeature","allOptions","mainOption","setLayerPositions","conditions","getArrayOfConditions","defaultLayerLayoutPositions","matchesMetaForArrayOfConditions","layerPosition","matchingPositionFeature","getMatchingPositionFeature","name1","arrayOfConditions","cond","propName","roomLayoutMeta","condition","roomSceneMeta","propValue","getCurrentLayoutAbbreviation","skuNamesPartIds","whereToFind","getCurrentLayoutName","features","featuresPartsList","featuresParts","matchFeature","withSkuNameConditions","getCountertopGroupsSplittedFeatureName","_countertopGroupsCustomDisplayName","wasUpdatedFromAnotherResponse","manufacturerFilter","getFilterGroupValues","_customMatchingOptionsName","getSkuWithoutDot","getCustomFullDisplayName","getSplittedSku","_splittedSku","isFromAsRoom","getMatchingFeatureName","_customFullDisplayName","getModuleFeatureName","disabled","defaultDisabled","canBeDisabled","partNumber","instance","constructor","load_","setParent","featureList","featureName","galleryImages","featured","galImage","featuredImage","notAvailableInVisualizer","roomLayout","layoutName","roomLayoutAbbreviation","loadFeatureCommon","searchText","filteredAvailableFeatures","getFeaturesBySearchText","getFilteredFeaturesByFilters","featuresToDisplay","navigationSubItemsWithFilterMultipleConditions","returnUniqueNavFeatures","restOptions","returnAllFeatures","getFeaturesForNavigationFrom","HANDLES_GROUP_BATHROOM","allConditions","mountTypeCondition","matchesMetaForCondition","oneLayerPosition","navigationItemsWithOptions","navItems","collectionName","colorName","matchingOptionsName","conditionPassed","skuDiff","featureObject","filterNavigationItems","navFeatures","activePosition","navFeature","featuresToCheck","conditionObject","setNotInVisFeature","setFeatureGroupDefault","hideLayerCondition","hasAdditionalParts","checkIfFeaturePartIsMatching","_setLayers","setDefault","hideLayers","navFeatureCLick","firstClick","activeLockedFeature","featureClick","placeholderChanged","activeNotInVisualizerFeature","featureClicked","layer","activeFeatureParts","activeFeaturePart","placeholderFeature","zIndexes","getZIndex","increase","zIndex","additionalPartPartId","abbr","spaceWithLayoutName","edgeFilterGroup","filterGroupValue","activeFilters","activeFeatureConditions","getActiveFeatureConditions","getAdditionalPartsConditions","setActiveFeatureParts","getActiveFeaturePartsAccordingToActiveFeature","shower","currentActiveFeature","layoutAbbr","currentShowerBodyId","getCurrentShowerBodyId","wallConfiguration","previouslySelectedFeatures","showerBodyId","wallConfigurationFeature","filteredFeatures","hardCodedDefaultName","placeholderDefaultName","hardCodedDefault","placeholderDefault","hideItems","wizardGroups","clickedFeature","conflictingPositions","accParent","checkConflictingPosition","showerTubComboIsActive","showerBody","s3Path","s3BindingName","visualizer","isCropped","bvr_root","KIOSK_BVR_Root","S3_BVR_Root","bv5_root","KIOSK_BV5_Root","S3_BV5_Root","kv4_root","KIOSK_KV_Root","S3_KV4_Root","kv5_root","KIOSK_KV5_Root","S3_KV5_Root","bv6_root","s3Root","layersSize","s3FilterImagePath","S3_FILTERS_Root","KIOSK_FEATURES_Root","className","ignoreDefault","stopPropagation","preventDefault","iStartWith","hayStack","startsWith","iIncludes","getNonce","possible","random","iCmp","s1","s2","needToUppercase","matches","RgFeatureName","styleBkgImage","backgroundImage","getMetadataByDimensions","dimensions","NN","cb","getMousePos","evt","rect","getBoundingClientRect","getFilterGroupValue","featureFilterValueId","val","getFilterGroupValueByName","getAllFeatureFilters","featureHasSelectedFilters","featureFilterValueIds","filterObject","filterGroupId","unitedFilterValueIds","newFiltersArray","existingFilterGroup","filterGroupObject","existingFeatureFilter","filVal","scrollToDivInArea","divOffset","animate","scrollLeft","getTranslateX","myElement","getComputedStyle","WebKitCSSMatrix","webkitTransform","m41","reorder","indexA","indexB","tmp","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","isTouchDevice","prefixes","DocumentTouch","matchMedia","mq","makeLayerPolygon","fakeCanvas","setAttribute","context2D","getContext","globalAlpha","drawImage","imgData","getImageData","pnpoly","base64ToBlob","downloadCanvasImageById","canvasId","blob","getElementById","toDataURL","createObjectURL","download","click","revokeObjectURL","imageServer","LAYERS_SIZES","normal","full_hd","full_hd_large","isFeatureHasFilterValue","testFabFilter","filterGroup_id","filterValueId","testFilter","mergeFilterObjects","base64","mime","byteChars","atob","byteArrays","byteNumbers","byteArray","Uint8Array","Blob","toBoolean","visualizerOnly","convertImgToBase64URL","outputFormat","crossOrigin","onerror","onload","dataURL","disableFeature","updateLookCartItem","cabinetParent","topCabinet","allFeaturesReceived","getAdditionalFeaturesOnScroll","loaderDisable","bottomCabinet","bottomHandle","floorParent","floorBody","checkIfLookFeaturesReceived","disabledClick","updateLocalStorage","enableRelatedFeature","relatedFeaturesToEnable","relatedPartId","relatedFeatureGroup","someFeature","checkIfFeatureCanBeAddedToTheCart","shouldUseLixilAvailableQty","enableASInventorySync","enableGInventorySync","bundledFeatures","lixilAvailableQty","trumbleQty","cartItemInStock","getProductIdFromSku","featureIsBundle","getPostCartItemsList","forCart","lixilProductId","relatedProductParent","getLookId","getAvailableFeatureContent","availableFeatureContent","subDescription","preset","lookId","getLookIdUrl","withSlash","createShareUrl","getFeatureUrl","withCategory","finalUrl","urlName","urlPartId","getCategoryOnlyUrl","revertFeatureBeforeChange","featureGroups","getLookList","parentObject","featureBeforeChange","sameFeature","filterFeaturesByMetadata","metadataField","mType","getDefaultPresetByLook","numLookId","allMatchedPresets","buttonKey","afterSaveUrl","amazonImageUrl","shareImageUrl","shareImage","SHARE_BUTTONS","facebook","metaTag","querySelector","hostname","qfUrl","protocol","splittedHost","topLevelDomain","shareUrlSplitted","encodeURIComponent","pinterest","imageUrl","twitter","getShareWindowReference","open","getShareConfig","getFeatureParent","saveQuoteAndShare","propsShareUrl","saveNeeded","windowReference","isSafari","responseData","saveQuote","submit","showReceipt","setAmazonImageUrl","getCartItemsArrayFromFeature","neededFeature","firstCartItem","itemsToAdd","getSameFeatureWithAnotherMeta","metaName","activeFeatureValue","optionFeatures","metaValue","designNavigationItems","activeFeatureCollectionName","checkFeature","optFeature","getFeatureSectionIsHidden","lookFeature","getPropertyToMatchActiveFeature","getFeatureIsActive","parentFeatureGroup","removeLookPointFor","sku1","sku2","differences","letter","filterCartItems","withoutNotInStock","withoutZeroQuantity","parentsOnly","sortCartItemsForListPage","hideFeatureSection","showFeaturesOnly","partIdExistInQtCategory","isFeatureEnabled","hardCodelyRemovedClicking","isCoburn","Shower","showerDoorFeatureGroup","showerDoor","getWizardWithFirstStepCurrentPartId","wizardList","wizardItem","openWizardOnClick","firstStepGroups","getCurrentGroups","nodeType","getFeatureGroupFromWizardGroup","Small","SmallWithPopout","SmallWithPeninsula","SmallWithIsland","SmallWithPopoutWithPeninsula","SmallWithPopoutWithIsland","SmallWithPeninsulaWithIsland","SmallWithPopoutWithPeninsulaWithIsland","LShape","LShapeWithPeninsula","LShapeWithIsland","LShapeWithPeninsulaWithIsland","PLACEMENTS","Island","Countertop","MODULE_CONTEXT_MENU_TYPES","Filters","SliceButtons","MODULE_CONTEXT_MENU_DIRECTIONS","Vertical","Horizontal","CABINET_WIZARD_BUTTONS","buttonId","filtersGroupName","COUNTERTOP_WIZARD_BUTTONS","pluralText","wizardAllButton","displayText","parent_id","icon","additionalImages","BACKSPLASH_TYPES","COUNTERTOP_GROUP","CABINET_GROUP","EDGE_GROUP","sqftEventManager","renderEvents","renderEventsSlab","OVERALL","SLAB_RIGHT_PART_CONTENT","SLAB_RIGHT_PART_WORKSPACE","BOX_POINT","BOX","OVERLAY","IMAGE_LINE","IMAGE","POINT","SEGMENT_MEASUREMENTS","SEGMENT","SHAPE_LABEL","SHAPE_UPPER","SHAPE","SHAPE_SLAB_PLACEHOLDER","WALL","SLAB_IMAGE","SLAB_LEFT_PART","MOUSE_WHEEL","WHEEL","ON_MOUSE_WHEEL","RESIZE","TOUCH_START","TOUCH_END","TOUCH_MOVE","TOUCH_CANCEL","MOUSE_LEAVE","CLICK","DBLCLICK","CONTEXTMENU","KEYDOWN","DRAG_OVER","DROP","keyCode","ENTER","NumpadEnter","activeEvents","canvasOffset","processing","eventQueue","G_events","userIdleStartTimer","userIdleWarning","userIdleTimeOut","userIdleStopTimer","userIdleGoHome","userIdleGoHomeCountdown","hammerMC","LastKnownMousePos","zoomLock","resizeHandler","keydownHandler","getCtx","eventSort","pageX","pageY","getTouchPos","touch","mousepos","mousemove","event","sender","mouseup","mousedown","onMouseLeave","mouseleave","onKeyDown","code","onDblClick","onWheel","wheel","onResize","updateOffset","onContextmenu","contextmenu","onDrop","dragEvents","onDragOver","dragOverEvents","onTouchCancel","onRender","triangles","trigger","response","pinchToZoom","additionalEvent","isWithEventManager","Hammer","Manager","Pinch","enable","on","isComposing","processEventQueue","handled","touchPos","passive","clearAll","removeEventListener","override","revertBackAfterMouseUp","releaseStealLock","owner","cursor","noStealing","setCursorImage","cursorImage","getCursor","removeEvent","removeStuckCursorEvents","mouseupEvents","mouseupEvent","home","wizard","lookFeatureSku","category","cartLogin","cartRegister","cartTerms","cartBilling","cartBillingInfo","cartShipping","cartPayment","cartDelivery","cartTwoFAVerify","cartTwoFA","cartConfirm","cartSuccess","shop","shopRoutes","sqft","sqftCabinetsIntro","sqftCabinetsAR","sqftCabinetsTutorial","quoting","quoteDesign","newscope","shoppingcart","RgCabinetSize","vanitySize","fromName","lastDigit","binding","arrayOfBindings","Large","tryToSetTheSameFeature","setFeatureLayer","shadowFeature","layoutAbr","s3Binding","entityID","featureDefinitionId","fromS3Binding","handleClick","placeholderName","shadowNeeded","activeName","includesCI","setShadowFeature","parentGroup","shadows","compatibleFeatures","shadow","shadowName","featuresArray","activeFilterValueIDs","filter1","filter2","setSQFTMenuOpened","menuOpened","setSQFTMenuOpenedLock","menuOpenedLock","setSQFTActiveButton","activeButton","setSQFTActiveSubMenuButton","activeSubMenuButton","setSQFTActiveLevel3Button","activeLevel3Button","setSQFTActiveRoomIndex","activeRoomIndex","setSQFTActiveRoomType","activeRoomType","setSQFTActiveRoomId","activeRoomId","setSQFTActiveRoom","activeRoom","setIsRoomSwitcherVisible","isVisible","setFreeDrawMode","isFreeDrawMode","setWallsUpMode","isWallsUpMode","setWallsLockMode","isWallsLockMode","setSQFTRoomLayouts","roomLayouts","setSQFTContextMenu","setSQFTContextMenuV2","contextMenuV2","setSQFTSystemMessage","systemMessage","setSQFTAr3dPopup","ar3dPopup","setSQFTSystemDeleteMessage","systemDeleteMessage","sqftPopup","setChangeValuePopups","changeValuePopups","addChangeValuePopup","changeValuePopup","deleteChangeValuePopup","setValidationPopups","validationPopups","addValidationPopup","validationPopup","deleteValidationPopup","addShapeIdWithMissingFeature","setSelectedCountertop","selectedCountertop","setAbortController","abortRequestController","setIsItextEditing","isITextEditing","setIsSlabPlaceholderOverlapsWithMultipleShapes","isSlabPlaceholderOverlapsWithMultipleShapes","setReCacheMenuCounter","reCacheMenuCounter","showLoading","hideLoading","LoaderView","props","iframe","visualizersLoaded","color","COLORS","white","active","Component","connect","loaderState","lookState","getFeatureOptions","fromNavItemOptions","colorFilterGroup","activeFeatureValues","forSpecificLayout","forSpecificScene","alreadyAddedOptionIndex","getMatchingColorFeature","notMatchingFeature","colorFilterValue","currentCollectionName","currentFeatureName","featureFoundItems","setLayerPosition","getSameColorFeatures","sameColorOnly","sameColorFeatures","differentColorFeatures","doNotShowStylePopupFor","isAsBathroom","activeFilterGroupValue","sameFeatureAsActive","bathroomShowerPanExclude","getDisplaySameColorGroups","fromArray","activeCollectionFilterGroupValue","displayFeatures","otherGroup","colName","currentColGroup","sameColorObject","addedFeature","currentCollectionValue","getSimilarItemsList","matchingFeatures","sameColorItems","sameCollectionFeature","updateMirrorAndWallsCrop","vanityParent","mirror","setLayers","wallsParent","wallFeatureGroup","updateVanitySides","oldActiveFeature","currentSideMeta","nextSideMeta","vanity_type","nextVanityIsDouble","isDoubleVanity","isCountertopOrBacksplash","forceClick","updateVanityPositions","asBathroom","getActiveFeaturesAsObject","checkIfFeatureDisabled","featureParent","checkDisabledOnly","isDisabled","withLayerPositions","withDisabled","showAllGroups","showAllQtCategories","displayInMenu","defaultSubParts","featureGroupsObjects","getActiveFeatures","visType","sortByParents","parentKey","disallowedSkus","getLookListHeight","lmFeatureParent","opened","featuresLength","listHeight","styleNotificationIsVisible","getStyleAlertIsVisibleForGroup","isVisibleForNavigation","getCropCoordsCenter","createCartList","loadByTheDefault","existingCartItem","loadByTheDefaultCItem","foundFeature","getFeatureById","auto","relatedItemQuantity","alreadyAddedRelatedFeature","getLayerCenter","coords","canvasElement","clientWidth","clientHeight","COORDS_MAX","centerXPercentage","min_x","max_x","centerYPercentage","min_y","max_y","zoomPercentage","openedMenuWidth","featureMinX","featureMaxX","featureCenter","gPointPercent","shiftX","GROHE_CONFIG","sidebarWidth","mobile","featureX","getCoordsCenter","parsedCoords","getFeatureCropCoors","getStyleAlertNotMatchingFeatures","fromStyleAlertIcon","notMatchingFeatures","confirmedChange","wallsPartIds","wallPartId","wallGroup","alertIsVisible","names","compareCoords","getAllNotMatchingPartIds","setLocalStorageItem","localStorage","setItem","getLocalStorageItem","JSON","parse","getItem","zoomCanvasOut","imageCanvas","current","pinchZoom","zoomToCenter","getRoomLayouts","returnAllLayouts","newLooks","layoutNames","parents","roomScene","lookLayout","lookScene","currentName","getParsedLookUrl","checkURL","regexForRoomPreset","lookIdFromUrl","featureGroupFromUrl","skuFromUrl","splittedLookPath","currentCoords","commonCoords","coordProp","getFeatureCoords","isWizard","getCommonCoords","zoomFeatureGroup","Coords","toggleArrayValue","newArray","checkForContextMenuCommon","returnObject","allButtons","showButtons","isBathroom","whereToCheck","contextMenuArray","checkPartId","disabledClickablePartIds","withQuotingToolFeatures","hasNavItemsLength","activeVanityType","isVanity","isShower","isCenterIsland","existingWizardItem","button","testBtn","hasSubMenu","sinkIndex","sinkParent","isPedestal","backsplashIndex","backsplashParent","getExistingWizardForGroups","vanityButtonIndex","vanityWizardButton","wizardId","isAmericanStandard","showerWizardButton","isLixil","counteropWizardButton","accPartId","accFg","hideContext","getOptionStyles","thumbnail","backgroundColor","dbFeatureInterface","number","shippingCost","fabricatorCost","featureInterface","featureCollectionInterface","isRequired","arrayOf","featureGroupInterface","navItemInterface","path","someLayoutFound","hasNoVisualizerLayers","clickFrom","keyIndex","skuName","skuName2","regexForWizardId","wizardIsDisabled","getCurrentWizardList","isSameVisualizerWizard","disabledScenes","showWizardInsteadOfQT","getActiveWizardItem","stringId","wizItem","isCenterIslandGroup","getFeatureGroupByGroupName","getDefaultMaterialsWizardItem","categoryIsInTheWizard","firstOnly","lookWhere","getCurrentGroupsFromSource","wizGroup","getMaterialsWizardItem","params","getUrlFromString","currentVisType","lastSelectedWizardInThisQuote","isLastActiveWizard","foundWizItem","wizardItemId","cachedSiblingFeatures","siblingGroups","wizardEdges","wizEdge","siblingGroup","WIZARD_GROUP_TYPES","useIncluded","featuresIncluded","alreadyCached","cacheObject","wGroup","wGroupIndex","totalFeatures","included","exclObj","mergedGroups","featuresExcluded","excluded","exclFeature","getCorrectedWizardGroupId","stepSelectedValue","wizG","realWizardGroup","navItemIsExcluded","prevStepGroups","additionalWizardValuesToCheck","stepStr","toCheckValue","selectedPrevStep","selectedWizardGroupIsNotInCurrentStepAnymore","foundPreviouslySelectedGroup","wg","suggestedStepGroups","wizardGroupWithSelectedFeature","returnAllSteps","maxWizardSteps","stepsArray","currentGroups","findParentWizardFeatureGroup","getWizardStepCommonCoords","wizardFeatureParentGroup","currentTry","recursiveFindParent","checkWizardGroup","sourceEdge","nextToCheckWizardGroup","findFeatureBySelectedFilters","skuColor","sameColor","getFilterValueThumbnailAndStyles","currentFilterValue","isColor","backgroundSize","backgroundRepeat","backgroundPosition","featureDefinitionID","includedFeature","getLowerCasedSharedFeatureName","filterWizardNavItems","getCurrentWizardNavItems","shopPageOpened","showPrevStepsColorFirst","selectedStepsReversed","reverse","selectedStep","selectedFilter","parentWizardGroup","faucetParent","selectedFaucetConditions","filteredNavItems","allSelectedColors","currentColorOption","optionMatchForPrevSelectedColor","selectedColor","partIdGroups","getFilteredLayersForActiveWizard","layers","disableNotSelectedFeatureGroups","getCompressedAllWizardValues","newWizObject","wizValues","getCompressedFeature","getWizardStepIsDisabled","prevWizardGroup","notRequired","getWizardProductGroupName","productCartTitle","shouldUseNewWizardFeaturesRequestsLogic","counts","getMissingWizardFeatures","currentNavItems","requestInProgress","wizardMissingFeatures","missingSkus","setWizardMissingFeatures","slicedArray","stillMissingArray","getBvFeatures","missingSkusResponse","loadNewFeatures","useHideItemsDisabledfeatureGroups","visualizersLoadedLength","useEffect","getNextWizardStepQuantity","wizardSqftCartItems","addedCartItems","getFeatureGroupFeaturesQuantity","displayMaterialsWizardGroupAsFeature","custom","getWizardGroupFromCurrentSteps","wizardValues","neededWizardGroupId","neededStep","neededWizardGroup","step","mergedGroup","SHOWER_FLOOR_GROUP_BATHROOM","removeLayoutFromPartName","removeEdgeFromPartName","removeCabinetLayoutFromPartName","removeBacksplashTypeFromPartName","removeCountertopFromPartName","removeBacksplashFromPartName","cabinetLayout","enableSquareFootage","setSquareFootageGroup","SQFTGroup","setSQFTGroup","setSQFTViewMode","SQFTViewMode","loadSQFT","sqftLoaded","updateSQFT","sqftUpdateType","setSquareFeet","squareFeet","toggleChangeLayoutPopup","changeLayoutPopupOpened","layoutToApply","applyLayoutOnSqft","sendLayoutChangeOnSqft","setSqftMeasureUnit","changeSqftFeaturesPopup","sqftFeaturesPopup","setSqftFromFeature","sqftFromFeature","setSqftCabinetsGlb","cabinetsGlb","setCabinetsARBlobUrl","cabinetsARBlobUrl","setAPIErrorMessage","apiErrorMessage","getFeatureGroupIconURL","getFeatureGroupIconStyles","customImageUrl","getDashboardThemeIcon","largeLayout","bathTubThumbnail","ceilingThumbnail","floorThumbnail","showerThumbnail","showerAccessoriesThumbnail","showerOLDThumbnail","showerTubComboThumbnail","custom60in30X8Shower","custom30in30X8Shower","custom60in15X4Shower","custom30in15X4Shower","custom60inPonyShower","custom30inPonyShower","toiletThumbnail","vanityThumbnail","wallsThumbnail","windowThumbnail","smallLayout","featureGroupNameToIcon","largeLayoutShadow","smallLayoutShadow","shower30inWallShadow","floorPlaceholder","ceilingPlaceholder","showerWallSmallRoomPlaceholder","showerWallSmallRoomPlaceholder60in","showerFloorSmallRoomPlaceholder","showerFloorSmallRoomPlaceholder60in","showerPanSmallRoomPlaceholder","showerPanSmallRoomPlaceholder60in","LayoutThumbnails","homePage","vanity","vanity_sink","vanity_faucet","vanity_mirror","vanity_handle","shower_door","shower_pan","shower_pan_combo","shower_door_handle","threshold","bathtub","bathtub_fixture","toilet","ceiling","lighting","towel","left_shower_wall","right_shower_wall","pony_wall","fridge","left_wall","right_wall","popout_wall","faucet","center_island_sink","center_island_faucet","center_island_cabinet","center_island_handle","center_island_chairs","cutout","cutouts","edge_profiles","walls_ceiling","shareImageRebath","baseDashboardImagesPath","normalizeIconFileName","imageSplitted","actionTypes","getSaveQuoteFastData","forTempSave","printState","contractSigningState","needToRevertBackCostPrices","updateCurrentQuote","updatedQuotes","grandTotal","records","quoteObject","record","bvImage","staticCanvasImage","recordData","contractSigningValues","pagesCustomFieldsValue","contractsValues","savedInvoiceNumberOfPages","needToUpdateContract","receiptSignature","priceWorkSheetLogic","getPriceWorkSheetSaveValues","stringify","sqFtCalcImage","sqFtCalcData","canvasImage","sFtCalcDataJson","quoteId","recordCartItems","getCompressedCartItem","discounts","selected","oldDeleted","materialCost","installationCost","totalWithTaxes","customDeposit","getCustomDepositAmount","fromBV","notes","employeeId","installations","services","service","subId","saveQuoteFast","postMessageIsExecuting","savedFastData","yesNoConsultationRequest","quoteRequestType","fromCheckOutPage","assignQuotePopupCustomer","assignQuotePopupEmployee","showContractSignOnError","formData","FormData","sendConsumerEmail","agreeEmailCheckbox","customerEmail","salesPerson","fullName","salesPersonFullName","salesPersonEmail","leadOriginatorId","rawVal","postalCode","isNewUser","fromTool","installationTaxesRate","materialTaxesRate","fromDashboard","callFabricator","callFabricatorOnSave","language","fileContent","dataUri","append","employeeSelected","employeesListReceived","employeesList","getEmployees","emp","receipt","receiptCost","getCurrentReceipt","pdfReceipt","toBlob","pdfReceipt2","showContractSignPopup","contractsList","showLeadCaptureShoppingCart","showDepositPopup","receiptUrl","signedDocumentUrl","receiptPrinted","setReceiptUrl","retryFunction","renderErrorPopup","Error","skipRequestsFor","loadFiltersOnly","getFilterGroups","getBathroomVisualizerData","featuresCount","loadVisualizerOnly","forVisualizer","featuresToReceive","errorMessage","defaults","updatePresetsArray","wizardData","wizardDataV2","getParsedWizardList","setWizardList","setAllFeaturesLoaded","getBvPresets","getDisplayRoom","getJobIdPreset","editToken","getBVJobData","updateFeaturesWithMarkUp","featuresResponse","useMarkUpFeaturesRequests","getMarkUpForFeatures","markUpResponse","setResponseFeaturesMarkUp","arrayOfSkus","requestSharedFeatureNames","getBathroomVisualizerFeatures","getBvGroups","getBathroomVisualizerGroups","getBvGroupFeatures","pageSize","axiosController","requestOldFeatures","getBathroomVisualizerGroupFeatures","getBvGroupFilterValues","withStoneFilters","getBathroomVisualizerGroupFilterValues","filterResponse","submitPayment","paymentInfo","useNewHoc","transactionResponse","responseCode","msg","errors","errorText","messageDetails","sepIdx","getQtCategories","useWizard","getFabricatorSubscriptions","subscriptions","setFabricatorSubscriptions","fabricatorName","wasCreatedFromFabricator","globalMarkUp","parseMarkUp","setMarkUpLogic","getDiscounts","getFabricatorDiscounts","dis","enabled","isSaveOnlyDiscount","setDiscountSections","getNavigationButtons","testConnection","forTool","getMenuNavigation","menuData","copySqftImagesToAnotherJob","postData","copySqftImages","red","gray","gray2","gray3","gray4","light","GROHE_FILTER_COLORS","primary","primary_hover","active_hover","assetsPath","ShowerType","ShowerTypes","GET_CANVAS_SCALE","CANVAS_SCALE_CHANGED","RESET_CANVAS","ENABLE_PINCH_ZOOM","DISABLE_PINCH_ZOOM","CHANGE_LAYOUT","UPDATE_ALL_ITEMS","USER_IS_LOGGED_IN","USER_POPUP_CLOSED","REMOVE_GREEN_ZONE_ON_CANVAS","FEATURE_IS_CLICKED","OPEN_MOBILE_NAVIGATION","CHANGE_MOBILE_MENU_CONTENT_TYPE","UPDATE_QUOTING_TOOL","SHOW_NUMERIC_KBD","OVERLAY_CLICK","SHOW_SUMMARY","DIRECTIONS","EAST","WEST","NORTH","SOUTH","UNDEFINED","ShapeHelper","activeShape","activeShapeLines","intersectionPoints","activeShapeLine","testShapeLine","pointFieldActiveShapeLineFrom","pointFieldActiveShapeLineTo","pointFieldTestShapeLineFrom","pointFieldTestShapeLineTo","intersectionCords","shape1","shape2","testShapeLines","getIntersectionCordsV2","shape1Pos","vertex","distances","lineDirection","getAngleDirection","diff","lineMidPoint","diffX","diffY","getResources","getBordersOfWallLines","lineOrientation","getLineOrientation","pointFieldActivePoint","testImagePoints","getLinePointsPointField","getAppliances","images","getSlabImages","usePointsV2","modelCorePoint","getPosX","getPosY","slope","itemBounds","resultV","resultH","vertical","itemBound","horizontal","guides","minV","minH","newItemBounds","verticalElements","horizontalElements","verticalElement","horizontalElement","minLength","pointDistances","pointField","dir","isAngleInner","isInner","facing","isSlabMode","rotatePointX","posSlab","rotatePointY","xCords","yCords","min","max","getAbsolutePosFromSnapPossibilities","snapPossibilities","absolutePos","snapWithShape","snap","getLineLengthNumberText","pointFrom","pointTo","changeValueCallback","yOffset","xOffset","betweenPoints","shouldRenderFrameBorder","isLength","getPointDirection","aP","bP","cP","lineBeforeFrom","vDir","hDir","mAC","newDirection","cornerMargins","fromTop","fromLeft","fromRight","fromBottom","dirX","dirY","point1X","point1Y","point2X","point2Y","point3X","point3Y","pointBeforeX","pointBeforeY","direction","getLineLengthNumberTextV2","getLineDirection","getFontSizeFromContext","design","getLineLengthNumberTextV2ForTheImage","eventsPriority","deltaX","deltaY","getSlope","getSlopeV2","getAngleBetweenTwoSlopes","getAngleBetweenTwoLines","line1","line2","slopeLine1","slopeLine2","M1","M2","atan","getVectorByPoints","getEdgeFeatureGroup","getAngleBetweenTwoLinesV2","vector1","vector2","cosAngle","acos","getAngleBetween3Points","A","B","AB","BC","AC","edgeFeatureGroups","getIsShapePlacedOnTheFloor","edgeFeatureGroup","getNavItemsFromTheWizard","firstFeature","firstConditions","getCountertopPartNames","countertopNavItem","centerIslandNavItem","countertopPartName","centerIslandPartName","canShapeBeAutoShifted","testShape","isTestShapePlacedOnTheFloor","isTestShapePlacedOnTheWall","getIsShapePlacedOnTheWall","parentPartId","SaveIcon","viewBox","strokeWidth","fill","fillRule","transform","ProductsIconAnimated","version","xmlns","TimingIconAnimated","EditIcon","EyeBallIcon","cx","cy","rx","ry","ScreenshotIcon","PlusIcon","LookLayoutIcon","data-name","LookExitIcon","LookCoBrowseIcon","LookShareIcons","LookExpandIcon","LookMinimizeIcon","LookCartIcon","LookRoomIdeasIcon","Look3DIcon","LookAugmentRealityIcon","LookIconHover","strokeDasharray","LookIconNavigate","LookIntroIcon","groheIcon","AmericanStandardIcon","GroheListIcon","GroheFilterIcon","GroheGridIcon","GroheArchitectureIcon","GroheLockIcon","GroheLockIconSmall","GroheNoteAddIcon","GroheBoxIcon","GroheVehicleIcon","opacity","GroheDownloadIcon","GroheSQFTIcon","GroheInkPenIcon","setWizardIsActive","setWizardConfig","wizardConfig","setWizardActiveItem","setWizardShowFeatureSection","wizardShowFeatureSection","setWizardActiveStep","currentWizardItem","wizardConflictingSteps","newWizValues","selectedKeyNumber","wizObject","lastVisitedStep","clearWizardSelectedValue","setWizardSelectedValues","direct","currentStep","commonObject","newWizardSteps","getNextWizardSteps","changeWizardValuesToUseNewGroups","updatedWizardValues","shouldReassignValues","switchCartItemsToNewWizardGroups","shouldReassign","changeAllCartItems","getConflictingWizardSteps","getUpdatedAllWizardValues","setAllWizardSelectedValues","getMissingWizardValuesFeatures","compressedAllWizardsValues","missingFeatures","wizardObject","getWizardVisualizerType","compressedFeature","getLoadedFeatureById","featuresFromJob","getRestoredWizardValues","selectedWizardObject","compressedWG","foundWg","updateAllWizardValues","restoreAllWizardSelectedValues","valuesToRestore","setWizardConflictPopupOpened","wizardConflictPopupOpened","setWizardConflictSteps","setWizardSqftCartItems","getFeaturePropertyToSort","getNavItemsSortedByProperty","property2","prop1","prop2","prop3","prop4","getSortedNavItems","isQuotingTool","sortNavigationItems","showPricing","hideCheckoutBreakdownCost","hidePricesFromUser","propertyToSort","useMatchesFailedNavigation","unLockedFeatures","lockedFeatures","inVisFeatures","notInVisFeatures","getDesignRecommendedNavItems","getReorderedItems","needToReplaceActiveFeature","navItemsToChange","activeNavItem","isWalls","stoneFeatures","getStonesActiveFeatures","stoneName","existingInNavItems","sorted","nItemToChange","currentIndex","getReplacedNavItemsWithUnlockedFeatures","pricingIsLocked","pricingLocked","unlockedOption","nItem","desRecFilterGroup","desRecFeature","desRecColorFeatures","desRecValues","colorOption","desRecValue","filterValueObject","findNextVanityTypeFeature","getNavigationItemsLists","navItemsList","designRecommended","others","designNavItem","regularFeatures","MountHoles","navTranslate","existingNonMatchingList","navItemsObject","notMatchingMetaName","nextSink","nextFeatureGroup","nextSinkSku","isQCSink","maxWidth","maxTotalWidth","positionFeature","getSinksWidth","matchingVanities","allVanities","testFeature","currentSkuFeature","currentSideFeatures","updateNonCompatibleListWithVanity","nonCompatibleList","Vanity","currentVanityTypeFeatureGroup","nextVanity","fromToObject","getNextSinkOnWashstandOrConsoleChange","isQcSink","forSinkConditions","nextAvailableSinks","conditionsToMatch","updateSinkWithNewFeature","sinkFeature","checkForCompatabilityAlert","matchCounterTopObject","getMatchingCounterTop","matchingFeature","hasSameName","getSinkToClickFromMatchingSinks","clickedSinkConditions","nextFaucet","showerArmFeatureGroup","showerHeadParent","showerHead","clickedArmConditions","showPrice","clickLeadCapture","getMissingFeaturesAndClickThem","updateCanvas","originalPartId","requestInProcess","wallParent","missingFeatureObject","relatedItem","navigationItemName","requestFromBackendName","cropResponse","setGroupFeatures","setCurrentFeature","featureFound","activeFeatureBeforeAllWalls","clickFromAllWalls","alreadyRequestedFeatureNames","requestAfterRoomChange","getShowMatchRadio","checkForTileBacksplash","getApplyToLogic","setApplyToFunction","applyToArrayAll","currentApplyToArray","navigationState","cabinetsApplyTo","countertopsApplyToArray","edgesApplyTo","cabinetsApplyToBathroom","countertopsApplyToArrayBathroom","handlesApplyToBathroom","showerFloorApplyToBathroom","clickOnSimilarFeatures","wallFeature","applyToLogic","useFeaturesLightRequest","isSolidSurface","applyAllCountertops","applyClickTo","getSubPartByPartId","setActiveFeaturesBeforeAllWalls","applyToArray","onlyForOneFeatureGroup","promises","all","applyNewPreset","roomPreset","setActiveFeaturesFromObject","setItemsFromBvState","isRoomLayoutsVisible","featureQuantity","defaultQuantity","ShowerTubCombo","bathTubLiner","replacementTub","walkInTub","jettedTub","bottomTub","leftShowerWallType","showerComboSize","relatedItemName","RelatedItemClass","categoryEnabled","load","wallConfigurations","createCustomWallConfiguration","placeholdersNeeded","getRelatedItems","addTo","showerParent","setZIndex","conf","sqftShapeManager","addPlaceholderShape","shouldUseSlabPricing","shapeSegments","updateSlabPlaceholderFeatureId","deregisterLineEvents","setSlabPricing","initTitle","SLAB_IMAGE_TYPES","placeholder","getShapeByIds","hasSameFeatureId","firstFeatureId","hasSameSharedFeatureName","currentShapeFeature","currentShapeFeatureSharedName","testShapeFeature","setShapeFeature","visualizerFeature","setBacksplashFeatureId","setShapeFeatureId","setShapeRelatedParentFeatureId","relatedParentFeatureId","getCounterTopShapes","cLabel","getBacksplashLabeledShapes","hideSeamShapes","isWithShapePieces","hideShapePieces","restoreSeamShapes","reInitEvents","hideSlabShapes","restoreSlabShapes","reInitLineTitleEvents","hideMiteredSections","miteredOverlay","restoreMiteredSections","resetShapeChangesInTheSlabMode","updateSlabPoints","setShapePieces","shapeSlab","setRotationDegreesSlab","removeAllActiveBacksplashesAttachedToShape","checkForUpdateSlabPoints","isPointsChanged","checkForUpdateSlabPosition","isPositionChanged","updateSlabPosition","hideCorePieceShapes","restoreCorePieceShapes","hideShapeParts","shouldSkipSlabPlaceHolders","deregisterPartEvents","restoreShapeParts","reInitPartEvents","seamHistory","getSeamHistory","latestShape","pop","shapePieces","resetAllSeams","setSeamHistory","ctxCenter","minX","maxX","minY","maxY","getMinMaxWorkspacePoints","isIncludeBumpout","getMinMaxBumpoutPoints","disableRotatableStateForAllShapes","shapeRotatable","disableRotatableState","canShapeBeRotated","isShapeCanBeRotated","isMovableImageCanBeRotated","closeRotatablePopups","getIsRotatable","setIsRotatable","reInitShapePoints","setShapeAsRotatable","shapeOffset","changeValuePopupPosition","shapeHeight","getHeight","shapeCabinet","getShapeHeight","shapeWidth","getWidth","getShapeWidth","changeRotatedDegreeValuePopup","valuePopup","Direction","LEFT","newValuePopup","rotatedDegreesSlab","rotatedDegrees","rotateShapeTo90Deg","currentRotation","newRotation","getShapeCornerPoints","isPointOnField","bumpoutPoints","getBumpoutPoints","dragPoint","getMinMaxShapesPointsOnWorkspace","shouldGetRegularPosition","shapesPoints","getPointsPosOnWorkspace","pointsMinMax","getMinMaxPoints","getShapesConvexHullPointsOnWorkspace","convexHull","getShapesConvexHullPointsPointField","getPointsPointField","getShapesContourPointsOnWorkspace","shoudRemoveRepeatingPoints","shapesPointsOnWorkspace","unifiedPoints","unifyShapePoints","removeConsecutiveDuplicates","getShapesOverhangOnWorkspace","contourPoints","snappedShapes","minOverlap","overhangShapes","canShapeCreateOverhang","isShapeInsideSnappedShapes","overhangShape","pointsPosOnWorkspace","roundedPoints","roundShapePoints","cp1","cp2","rp1","rp2","areCollinearAndOverlap","getShapesContourPointsPointField","shapesPointField","getMinMaxShapePoints","getGrandParent","setIsDisabledShapeInPopup","resetShapeSeams","getSnappedShapes","snappedShapeGroup","shapeAbsolute","getSnappedShapeGroup","changeShapesFeatureIDIfColorWasChanged","changeFeatureIdIfColorWasChanged","updateShapeColorSet","updateColorSet","updateMinMaxMiteredPoints","updateMinMaxPoints","toggleDesktopNavigation","desktopNavigationOpened","setNavigationViewType","navigationViewType","setActiveNavigationNames","activeNavigationParentName","activeNavigationChildName","setNavigationLoading","navigationLoadingActive","setModuleContextMenuType","moduleContextMenuType","setModuleContextMenuDirection","moduleContextMenuDirection","setModuleContextMenuModule","moduleContextMenuModule","setModuleContextMenuModulePart","moduleContextMenuModulePart","setActiveNavigationFilter","activeNavigationFilter","setActiveNavigationFilterStepIndex","activeNavigationFilterStepIndex","setCabinetNavigationFilterCompleted","cabinetNavigationFilterCompleted","setCountertopNavigationFilterCompleted","countertopNavigationFilterCompleted","setCountertopWizard","countertopWizard","setCabinetsApplyTo","setCabinetsApplyToBathroom","setCountertopsApplyTo","countertopsApplyTo","newArrayLogic","setCountertopsApplyToBathroom","countertopsApplyToBathroom","setApplyToCommon","arrayToChange","isNewNotUsed","arrayPropertyToChange","setEdgesApplyTo","toggleUpdateDisableFeatureGroupRadio","updateDisableFeatureGroupRadio","toggleNavItemPositionModal","navItemPositionModal","setUseFeaturesLightRequest","LOWES_DISCLAIMER_EN","getFabricatorLogo","hardCodedLogo","isRenoDepot","hardCodedRenoDepotLogo","isRona","hardCodedRonaLogo","hardCodedLowesLogo","logoUrl","subDomain","hardCodeIsAmericanImport","hardCodeIsAmericanStandard","hardCodeIsRona","hardCodeIsRenoDepot","hardCodeIsFlexFinish","hardCodeIsGraniteTransformation","hardCodeIsGraniteTransformationUK","hardCodeIsLixil","hardCodeIsTorrco","hardCodeIsAgent","hardCodeIsCoburn","hardCodeIsSolidSurface","hardCodeIsLakesideSurfaces","hardCodeIsDeStefano","hardCodeIsNhance","hardCodeIsEncore","hardCodeIsFabricator","hardCodeIsFloform","hardCodeIsDeluxegarage","hardCodeIsRenuit","isProd","materialTotalCost","isCafeCountetops","fabId","fabricatorsHardcodeObject","isAmericanImport","isGraniteTransformation","isGraniteTransformationUK","isModerno","isMcDermott","isFlexFinish","isTorrco","isLakesideSurfaces","isNhance","isGrohe","usePrevious","ref","useRef","useIsMounted","isMountedRef","isMounted","useCallback","requestInProgressTimeoutId","IsMountedComponent","children","isMountedComponent","useOutsideClick","useSQFTCanvas","contains","handleClickThroughCanvasEvents","objectName","useOutsideClickSimple","excludedClassNames","closest","useProgressiveImage","useState","thumbnailLoaded","setThumbnailLoaded","complete","useFeaturesChecker","featuresLoaded","setFeaturesLoaded","callRecursiveFeaturesCheck","clearTimeout","checkFeatures","useShowRoomLayoutsButton","useMemo","splittedFromTheLayoutName","MaterialSpinner","withCounter","propTypes","oneOfType","bool","PropTypes","wizardGroupInterface","oneOf","scopeImageUrl","filtersExcluded","productCartDescription","uploadedImageUrl","noAvailableFilters","wizardGroupIcon","hideInCartAndReceipt","multipleAddToCart","inputFields","headerTitle","headerSubTitle","visibleInVisualizers","hideForCustomers","skipProductInfo","wizardNodeInterface","wizardEdgeInterface","wizardItemInterface","wizardNodes","startTitle","startDescription","wizardSelectedValueInterface","singleFeature","wizardAllObjectInterface","wizardConflictingObjectInterface","cartItemId","setCustomVanitySinkMetaData","activeSubType_","Types","vanityCabinet","completeVanity","vanityBacksplash","vanityHandle","vanityPTrap","vanityWashstand","vanityMiddle","drawerPull","wsTowelBar","vanityLegs","vanityConsole","doorHandle","drawerHandle","relatedGroupNames","loadFeature","faucetIndex","vanityPart","forFeatureGroup","getCounterTopSize","isAsBathroomState","sinkFeatureGroup","sinkTypes","currentSku","needToUpdateCustomMetadata","sinkUTypes","FloorWithIsland","KVSCENE_BACKSPLASH_TYPES","oldKitchenCabinetsLogicProfiles","hasOldCabinetLogic","useOldCabinetLogic","Type","customBodyType","showerGlass","showerInteriorWall","showerInteriorWallAccent","showerFloor","showerOverlay","showerPanCombo","showerFixture","showerBodySelectedByUser","showerDoorHandle","ponyWallCap","ponyWallGlass","showerFloorIsActive","relatedItemType","showerBodyFeature","handleNavigationItemClick","ponyWallIsActive","getActiveShowerGroup","showerDimensions","isPonyWallPart","showerSizeValues","warn","showerBodyType","comboPart","Combo","FeatureName","maxLength","stringFeatureName","injectIntl","cartItemInterface","isMinimumCharge","isMinimumChargeItems","keepOnLookUpdate","shippingName","shippingTime","controllersConfig","exportableControllers","workspaceControllers","getControllersExportData","exportData","controllerName","controller","LIXIL_USER_QUERY_PARAMS","postSaveTempData","getPassedUserInfo","userData","postSaveVisualizerImage","base64Image","tempData","expiresIn","postTrumbleInventory","getSaveTempData","getTempIdForPostMessage","returnAction","existingTempId","stringifiedSaveData","receivedTempId","postSureTax","postVerifyAddress","addressObject","address1","city","stateShort","errorDescription","getTrumbleShippingOptions","skuList","zipCode","postTrumbleShippingOptions","skusArray","requestMoreThanUsualPartIds","postShipperHQOptions","shippingAddress","destination","postShipperHqShipping","availableOptions","options","carrier","shippingRates","shippingRate","totalCharges","success","inventory","featureToUpdate","request6kFeatures","getFeaturesPageSize","isCommonRequest","createdManually","nextFeaturesPage","getNextPageToLoad","responseArray","oldFeatures","responseWithOldFeatures","allRelatedItemsCheck","neededParts","shouldUpdateNavigation","neededFeatureGroup","isVanityChild","isCabinetChild","isCountertop","isFaucetOrSink","isShowerHeadOrArm","isDoorOrShowerPan","appliancesParent","wallId","fridgeEnclosure","centerIslandCabinet","centerCountertop","edgeProfile","showerArm","responses","getFeatureFromTheBackendBySku","requestFirstSharedFeaturenames","featureGroupPartId","getFeatureBySku","response2","setRelatedGroups","setRelatedGroupsSearch","relatedGroupsSearch","toggleGalleryVisible","galleryVisible","galleryShowActiveFeature","setGalleryActiveImageIndex","galleryActiveImageIndex","setMaterialsPageSubSteps","subSteps","setMaterialsPageActiveSubStep","activeSubStep","toggleNotCompatibleView","showNotCompatibleView","toggleProductNoteEditorVisible","productNoteEditorVisible","setRowItems","rowItems","setMaterialsCanvasClass","materialsCanvasClass","pedestalSink","lightingFixture","showerWall","showerWallAccent","showerTubCombo","activeRelItem","COLOR","black","blackLight","blue","red_transparent","primary_transparent8","primary_transparent","active_disabled","active_transparent","SqftStore","viewGL","clickedEdgeButton","isShowSlabTool","isRegularMode","addSeamHistory","showMaterialsTutorial","materialsTutorialIsOpened","setMaterialsTutorialStep","materialsTutorialStep","setMaterialsTutorialFinished","materialsTutorialFinished","showMaterialsAgentTutorial","materialsAgentTutorialIsOpened","setMaterialsAgentTutorialFinished","materialsAgentTutorialFinished","showVisualizerTutorial","visualizerTutorialIsOpened","setVisualizerTutorialStep","visualizerTutorialStep","setVisualizerTutorialFinished","visualizerTutorialFinished","RenderFigures","isFilled","tl","tr","br","bl","defaultRadius","side","quadraticCurveTo","closePath","h","fullOval","lx","ty","by","magic","xMagic","yMagic","bezierCurveTo","arc","fillStyle","save","restore","scaleX","scaleY","lineColor","fillRect","innerX","innerY","innerW","innerH","centerX","centerY","radiusBig","radiusSmall","innerYTop","innerWTop","innerHTop","innerYBottom","innerWBottom","innerHBottom","centerXTop","centerYTop","centerYBottom","startPoint","strokeRect","drawArrow","context","fromX","fromY","toX","toY","drawRotatedArrow","cornerPointX","cornerPointY","midpoint","rotateDirectionPoint","arcTo","renderPolygon","firstPoint","renderPolygonArray","drawArrowsAround4points","prevPoint","nextPoint","afterNextPoint","offsetPoint1","offsetPoint2","midPoint2","drawArrowsAroundPoints","minArrowLength","renderHandle","showerScreen","showerHeadBundle","handShowerKit","tubSpout","bodySpray","diverterTrim","handShowerHolder","handShowerOnly","showerHose","showerSystem","showerTrimKit","valveTrim","wallUnion","shower_head_type","shower_hand_type","showerHeadType","fromPartId","arrayToDisable","arrayToEnable","canBeEnabled","showerType","setGroheFiltersOpened","filtersOpened","setGroheSimilarFeature","similarFeature","setGroheSimilarProductsOpened","similarProductsOpened","setGroheRequiredButNotIncludedFeature","requiredButNotIncludedFeature","setGroheFiltersSearchText","groheFiltersSearchText","setLastOpenedCategory","lastOpenedCategory","setGroheSubCategoryOpened","subCategoryOpened","setShowAddedToTheCartSuccess","showAddedToTheCartSuccess","setGroheActiveFeatureQuantity","groheActiveFeatureQuantity","setGroheShareButtonsOpened","groheShareButtonsOpened","setGroheSameColorActiveFeature","groheSameColorActiveFeature","setGroheSameColorSectionOpened","groheSameColorSectionOpened","setGroheSameColorCheckboxApplied","groheSameColorCheckboxApplied","setExisingTempId","exisingTempId","totalShapeCount","minAngle","maxAngle","marginFromShape","hovering","handlerHold","isPointsMovable","isRotatable","getAngleRotatedParts","rotatedAngleValue","baseConfiguration","isHovered","isActive","isPulsing","angleDirection","hoverShapeColor","redHoverShapeColor","fillColor","layout270","slabPos","staticCenterPoint","linesWithoutAngle","shapeSpacer","isSpacer","shapeEditable","shapeIntersections","shapeAutoShuffle","shapeMemory","shapeRender","colorSet","seamCutPoints","shapeParent","isContextMenuActive","labelsMenu","slabParentPartId","isPointsMoved","isResetSlabModePopupWasDisplayed","RIGHT","FlipDirection","rotateAngleParts","slabModeWaterfallSegmentId","originalPointsCoords","getFillColor","getDesign","getColorset","getIsPointsMovable","setType","setProperty","setId","setPartId","getFeatureNameById","isShapeUseTheSameFeatureColor","isSeamPiece","updateRelatedShapes","updateSeamShapes","setSlabParentPartId","setSlabModeCoreParentPartId","setSlabModeCoreParentId","setSlabModeWaterfallSegmentId","setColorSet","getColorSet","getOrGenerateNewShapeColorByFeatureId","relatedShapes","relatedShape","shapePieceId","shapePiece","updateSeamedShapesPosition","setPositionWithoutChange","setIsPointsChanged","addCrownMolding","setIsPointsMovable","getSize","resetMouseDown","isFromParams","thisShapeMeasurementPoints","getDepth","depth","setFillColor","green","alpha","setShape","setHovering","setHoveringOnlyShape","hoveringOnlyShape","getRotateAngleRectangle","rotateAnglePart","renderFrom","calculateRenderPosition","renderTo","renderFrom2","renderTo2","setSlabPosition","slabAbsolutePos","getSlabAbsolutePosition","canSnap","getAbsolutePosition","workspacePos","_pos","getSnappedPosition","getRegularPosition","getSlabPosition","isHoveringOnlyShape","setResetSlabModePopupWasDisplayed","getResetSlabModePopupWasDisplayed","addShapePieceId","restoreShapePieces","export","getTotalArea","isQuantityUnits","newFeature","relatedParentFeature","shouldChangeShapePartId","shouldChangeCabinetShapePartId","newParent","getNeededFeatureFromNavItems","featureRelatedFeatures","getFeatureRelatedFeatures","newShapeDbFeature","getCabinetSimilarFeatureFromAnotherColor","updateLineHovering","isAngleHovering","getHoverSegmentCorner","isCornerLineHovering","getPoints","getHoverLabel","labelOverlay","getHoverPointOnClick","isOverPointField","shouldIncludeBumpoutLines","linesWithBumpouts","getBumpoutLines","createLinesWithoutAngle","getLinesWithoutAnglePoints","getLinesWithoutAngle","lineCorners","getPointsCoords","setOriginalPointsCoords","getOriginalPointsCoords","getPointPosOnWorkspace","getOriginPointOnWorkspace","SHAPE_DIAMOND_LAYOUTS","shapeLayout","pointsOnWorkspace","anglesTotalArea","getCornersArea","getAnglesTotalArea","getEdgesAdditionalArea","getWaterfallToolAdditionalArea","getMiteredTotalArea","cornersAdditionalArea","getRectangle","basePoint1","basePoint2","norm","next","rect1","rect2","intersection","calculatePolygonClippingPolygonArea","getTotalLnft","getAttachedEdges","isWithWaterfallToolEdge","isWithPeninsulaUnderwrapEdge","waterfallOverlay","getResourceByLineId","getArea","getInnerCornerPoints","handleArrowInputIncrease","isNegative","basePoint","secondaryPoint","rotated90_1","rotated90_2","bottomLine","rotateAngleInputChange","moveShape","resetShapeSnappedGroup","updateShapeSnappedGroup","setAbsolutePosFromSnapPossibilities","setAbsolutePos","isMouseOverShape","wp","vertx","verty","vert2x","vert2y","pointDirection","pointFromX","pointFromY","prevState","rotPart","pnpolyArray","hideShapeOffsetInTheSlabMode","preventNegativeArea","restoreShapeOffsetInTheSlabMode","handleSlabPlaceholderIntersections","handlePlaceShapeOnTheLine","shiftKey","isShapeSelected","removeShapeFromSelection","addShapeToSelection","rememberShapePosition","setShapeToShapeOffset","setRotateAnglePartActive","deActivateRotateAngle","addSeamPieceVertical","addSeamPieceHorizontal","slabShapeOffset","getShapeOffset","initShapeOffset","hideAngleTooltip","angleTooltip","inputArrows","querySelectorAll","display","elem","parentNode","replaceChild","cloneNode","hideAngleTooltipArrows","inputArrowUp","inputArrowDown","clearInterval","pointsArray","reversePoints","reversedPoints","getPointCordsArray","lineIndex","setPosSlab","activateRotateAngle","isAngleRotatedPartsWithCorner","renderAngleCircle","inputSubmit","expandedSidebar","scrollTop","secondaryLineLength","oninput","focus","onkeydown","blur","onblur","holdStarter","holdActive","arrow","currentTarget","setInterval","deleteBumpout","setRotateAnglePartBaseConfiguration","basePointX","basePointX2","basePointY","basePointY2","baseOldX","baseOldY","baseOldX1","baseOldY1","widthDiff","rotated90_1Calc","rotated90_2Calc","anglePercentage","diffToMinus","pointToRotate1","pointToRotate2","getAngle","rotationCenterPoint","getRotationCentrePoint","rotated","rotated2","getOrientation","getNextLine","angleIsChanged","shouldSearchAmongLinesWithoutAngles","lineBefore","flip","flipDirection","degrees","aroundPoint","Right","count","changeCornerDirection","rotateShapeBumpoutPoints","rotateShapeRotatablePoints","bumpoutPointsKey","setRotationDegrees","rotationDegrees","removeActiveBacksplashByLine","getRandomInt","initEvents","getPriority","eventManager","resetState","reInitTitleEvents","restoreState","protect","isShapeHasIntersections","hasIntersections","renderAnglePartActive","rotateShape1","bgImageUrl","splitFilter","keysAndProps","prop","isObject","imagePathCache","imagePath","dev","pathPrefix","convertKeysToCamelCase","newObj","each","toCamel","build","destKey","ignore","playVideo","hideVideo","$guide","guide","pause","getIntroVideo","exportCanvasAsPNG","fileName","MIME_TYPE","imgURL","dlLink","downloadurl","monads","ifNotNull","notNullCallback","isEmail","isZip","zip","isPhoneNumber","region","phoneUtil","PhoneNumberUtil","getInstance","parsedPhone","isPossibleNumber","isValidNumberForRegion","getPhoneFormatted","formatInOriginalFormat","getUserPhoneSplitted","oldCountry","googlePhouneUtilInstance","allRegions","getSupportedRegions","phoneCountry","regionCode","dialCode","getCountryCode","iso2","getNationalNumber","phoneSplitted","parseUserResponse","newUserInfo","lastName","isNew","password","parseShippingAndBillingResponse","billingAddress","billingSameAsShipping","address2","getValidationErrors","currentValue","hasErrors","errorsObject","textSubStringEllipsis","_checkNetworkErrorMessage","renderMessagePopup","retryConnectionFunction","closeButtonCallback","afterContractSignCallback","closeMessageBox","needContractSignDocument","setAfterContractSignCallback","newStyles","renderAccountNotActivatedErrorPopup","resendActivationEmail","renderConfirmPopup","tag","confirmPopupTag","orderCompletePopupVisible","toggleShowMobileQuotes","showMobileQuotes","toggleShowAllQuotesCartItemsList","showAllQuotesCartItemsList","getMinimumChargeCartItem","fromCartItem","onlyMinimum","newDbFeature","costplus","minCartItem","setCartFooterActiveButtonIndex","cartFooterActiveButtonIndex","setCartItemEditFeature","cartItemEditFeature","setLookRemovedCartItems","lookRemovedCartItems","setCItemsAddedToParentCart","setSureTax","setSureTaxLoading","sureTaxLoading","setDeliveryList","clearCartAndStartOver","fullClear","setActiveQuoteIndex","setQuotes","setManualTax","manualTax","Cabinet","partThumbnailSize","crownMolding","topHandle","topCabinetShadow","bottomCabinetShadow","withHidden","hideWithoutFeatures","filterRelatedItem","LoadingSpinner","getWizardGroupName","allWizardSelectedValues","newValues","actionPayload","conflictingWizardSteps","confObject","nextStepKey","testWizG","selectedWizardValue","currentStepGroups","stepWizGroup","selectedWizardGroup","wG","mG","checkFeatureGroupForOpposite","erasedValues","newWizardStep","updated","newWizGroup","parseWizardData","getFeatureGroupFromWizardSteps","allItems","getUpdatedWizardId","mainResponse","parseOnly","newVisualizerType","wizardItemIndex","fixWizardItem","oldWizardItemId","withToolVersion","commonName","existingSubscription","hasSubscriptionForRoom","getVisualizerTypeFromSubscription","PrintDocumentContext","createContext","leftImagePos","inEnabled","isCenterButtonRightPartHovered","isCenterButtonLeftPartHovered","rightPartZoomedShapeId","leftPartZoomedShapeId","isSlabPlaceHolderPresent","measurementPoints","centerButtonRightPart","centerButtonLeftPart","getPos","setEnabled","setSlabPlaceHolderPresent","getRightPartWidth","initRightPart","initLeftPart","centerButton","beforeRenderCenterButtonRightPart","beforeRenderCenterButtonLeftPart","initSlabWorkspaceEvents","renderSlabLeftPartWrapper","renderSlabRightPartWrapper","disableSlabImages","eyeballButtonLeftPartClick","isOverRightPart","eyeballButtonRightPartClick","moveSlabWorkspace","shapesIds","closestHigherNumber","zoomToSlabShape","zoomToShape","rpw","isFullRender","renderSlabRightPart","isMeasurementVisibleInSlabMode","renderMeasurementsAroundSnappedShapes","foundGroup","changeWizardToNextStep","getNavItems","withPlaceholders","checkFeatureGroup","onSQFTLoadPrepareData","activeQuote","loadData","currentLayout","onSQFTLoadImport","remove","setMeasureUnit","rememberConfig","manualCalculate","manualCalculateImport","updateManualCalculateRows","getInitialManualCalcRows","closeSQFTTool","redirectToPage","shouldChangeWizardToNextStep","changeWizardStepRoute","isSQFTinUrl","getNextNotCheckedStep","withGroupIds","getWizardGroupsFromTheWizard","allNavItems","navItemsFromWizardGroup","newWizardGroupId","wizardStep","newNavItem","getUnderlaymentFeature","underlaymentFeatureGroup","underlaymentFeaure","Part","isParent","realFeaturesReceived","nextFeaturesPageToLoad","featureGroupVisible","featureGroupEnabled","selectedFeaturesHistory","filtersReceived","condValue","applianceThumbnail","cabinetThumbnail","centerIslandThumbnail","countertopGroupThumbnail","SmallLayoutShadow","DISCOUNT_MAIN_TYPES","freeFill","subTotal","nested","finance","deposit","percent","DISCOUNT_MODES","and","or","discountInterFace","DISCOUNT_SECTION_TYPES","DISCOUNT_FINANCE_CELLS","financePercentage","financeMonths","financeSalesPercentage","isRidged","isSubTotal","uuId","nestedParent","discountType","financeOptions","multiSelections","approveOptions","discountSectionsInterface","port","baseNewImagesPath","noInternetMode","getPriceWithIncluded","getShowPrice","forTotal","getMarkUpPrice","markUpValue","markUpType","percentCost","retail","markUpString","isUpdatedInJobBoard","addNewQuote","updateQuote","updatedQuote","LockedView","getQuoteEnabled","enableQuote","onClick","handleUserLoginClick","MobileMenuSelect","handleParentItemClick","parentItem","onParentItemClick","showRelatedItems","handleToggleDropdown","setState","scrollHeight","handleBackClick","activePart","handleRelatedItemClick","onSubPartClick","toggle","activeSubPart","handleWrapperBlur","handlePrevClick","prevItem","currentChildIndex","childItem","currentParentIndex","parentItems","prevParentItem","lastSubPart","handleNextClick","nextItem","nextParentItem","desktop","setShowName","nextProps","dropDownStyles","data-parent","func","instanceOf","defaultProps","setActivePartFilterValues","filterValuesArray","availableCountertopGroupFilters","allFilterGroups","getAvailableFiltersForNavItems","featureFilters","featureOptions","fOptions","filterGroupFromAll","currentFilterValues","getAvailableFiltersForReceivedFilters","getAvailableFilters","checkIfNeedToReceiveFeaturesIfFiltersApplied","currentParent","onScroll","arrayOfNeededFiltersToReceive","filterObj","filterIdsReceived","filterIds","existingFiltersRequest","filtersReceivedObject","allFeaturesWithFiltersReceived","getFeaturesFromBackendWithFilters","counterTopFiltersIdsReceived","existingFilterObject","featuresReceived","featuresCountToReceive","getSelectedFiltersLength","shopNavItems","getFeatureGroupFilters","filtersRequested","featureGroupFiltersResponse","updateFiltersCount","availableFilters","getHardCodedFilterGroups","setLanguage","setActiveTheme","setAgreeEmailCheckbox","setInitialVisualizerType","initialVisualizerType","setNetworkConnection","networkConnection","allFeaturesWereLoaded","setAllowRouting","allowRouting","setAllowMainLoading","allowMainLoading","setActionAfterVisualizerTypeIsChanged","actionAfterRoomChange","setVisualizerIsChanging","visualizerIsChanging","getQuoteInfo","forLocalStorage","nextVisualizerType","quoteTotalPrice","getQuoteVisualizerType","allowVisualizerSwitching","getImagePromiseFromLayout","leadFeatures","getActiveNames","getRoomImageFromQtCategory","isCreatedInSQFT","isVisibleInSQFT","indexToUpdate","currentQuoteObject","newQuotes","q","qIndex","setNewActiveQuote","newQuote","switchToNewVisualizerType","switchToWizardItem","deleteCartItemFromSQFTCalcData","sqftIds","cItemQuote","prepareSQFTData","sqftCalcData","updateQuoteWithSQFTData","deleteCartItemsThatAreMissingInSQFTCalcData","nvert","testx","testy","isPointInsidePolygonArray","reduxState","qtState","switcherTitle","roomNavItem","ACTIVE_ROOM_TYPE","getRoomNameInQuote","getQtCategoryName","roomGroup","getRoomGroupById","getQuoteByRoomName","isQuoteByQTCatNameEqualToCurrentQuote","newQuoteIndex","loadQuoteByQtCatName","loadActiveQuoteToSQFT","roomName","quoteByQtCatName","quoteByRoomName","saveSQFTDataToQuote","createQuoteIfNotExistOrUpdateCurrent","updateActiveQuoteWithSQFTData","addRoomToCart","getSQFTIdsFromAllParentLists","parentsLists","SQFTIds","parentsList","sqftFeatures","sqftFeature","getSQFTIdsFromSQFTCalcData","deleteCartItemsThatAreMissingInParentLists","SQFTCalcData","sqftQuantities","updatedQuantities","sum","currentQtCategoryInQuotes","getQuoteForCurrentQtCatName","createQuoteFromSqftCalcData","isManualCalculateNotEmpty","createNewQuoteFromCategory","getRoomCartItemForCategoryName","roomsFeatureGroup","ShowerCommon","isShowerCommonGroup","setShowerHeadType","showerSize","featureGroupId","modulePartsList","lowerCasedVisualizerType","existingAddedCartItem","getRoomNameToCompare","roomFg","roomFeatureNavItem","roomFeature","getCurrentQuoteRoomName","withVisualizerCheck","quoteRoomCartItem","qtCategoryName","fgNavItems","visualizerRoomName","roomsNavItems","getQtCategoryFromQuoteRoomName","updateQuoteRoomsForCartItems","setNewRoomIndex","shouldCreateNewQuotes","createdRoomCartItems","withCreated","existingCartRoom","newActiveQuoteIndex","newRoomCartItem","updateSQFTCreatedStatusForQuotes","quoteRoomName","qtCat","needToLowerCaseName","checkCatName","customLowerCasedName","originalLowerCasedName","checkIfNeedToSetNewCategory","getOtherRoomCartItemThatIsAddedToCurrentQuote","addedRoom","addNewQuoteWithNewRoomCartItem","oldRoomCartItem","isCabinetsMode","sqftFromFeatureParentGroup","relatedParentParentGroup","getEdgeFilterByValue","edgeFeatureId","getEdgeByFeatureId","parseNumberFromString","fractionMatch","whole","numberMatch","miterEdgeFeature","heightFromFeatureName","getMiterEdgeFeature","getMiterUnderwrap","getBumpoutFeature","bumpoutFeatureGroup","isFeatureUnitUseEach","createApplianceOnTheWorkspace","itemName","iconFullName","svg","xml","XMLSerializer","serializeToString","svg64","btoa","getDbFeatureName","ActualDisplayedName","getSortedFeatures","widthA","getActivePartsCounts","getAvailableLayouts","getShowOtherLayouts","showOtherLayouts","showSmallDesignForClients","showSmallDesignFromDashboard","getAvailableRoomScenes","availableRoomScenes","getAllFeatures","scrolledVerticalToTheEnd","ceilScrollHeight","floorScrollHeight","ceilScrollTop","floorScrollTop","ceilClientHeight","floorClientHeight","getSideBarSubParts","getSQFTGroupFromUrl","getIsSFTAreaGroup","isSFTAreaGroupInUrl","getSQFTGroup","getPartIdsFromMenuOpened","partIds","getSearchTextFromMenuOpened","getItemClickCallbackForPartId","itemClickCallback","setHighlighting","setSelectedFeature","Appliance","stove","fridgeEnclosureHandle","loadCommon","AccessoryCommon","showerCondition","accessoriesParent","otherFeatureGroup","soapDish","grabBar","largeCornerSeat","seats","newPosition","getAvailableWizardList","qtCatProperties","getWizardSubParts","getFeatureGroupDescription","customDescription","getGroupDescription","getLixilRequiredNotIncludedFeatures","lixilRequiredNotIncluded","formatStrToUrl","unitsToCountQuantity","getCartItemsCount","forceCheckAllQuantitties","featureUnit","getSubTotalPrice","withoutCurrent","allDiscounts","currentDiscount","disSection","customDiscount","section","sec","categoryId","customDiscounts","calculateCellValue","numberOfMonths","finalPrice","fixedDeposit","rate","nper","pv","cellValue","PMT","getNextCustomDiscountOrder","fromDiscount","shouldDisplayDiscount","selectedOption","getDepositDiscount","depositDiscount","priceTaken","getPercentage","getDepositAmount","selectedDiscounts","mapDispatchToProps","withRouter","groheState","history","withAddToCart","updateLookCartItemsNew","updateRemovedCartItems","newRemovedCartItems","existingIndex","removedCartItem","currentCartItem","oldExistingCartItem","positionKey","itemToAdd","changeUrl","directChange","needToBeUpdated","toiletEnabled","featureToClick","endsWith","searchString","subjectString","lastIndex","serverConfig","__hideFeatures","_get","signal","_post","post","headers","__urlBase","_getUrlBase","addUrlMode","baseUrl","hardcodeResponsesFolder","JsonApi","saveUserKiosk","saveQuoteKiosk","encodedUserId","quoteData","saveSchedule","json","getKioskApiResponse","reject","token","encodedCustomerId","forVisualizerType","allResponse","localUrl","remoteUrl","sharedFeatureNames","skus","Ids","fixedGroupName","fixGroupName","requestUrl","searchGroupName","oldVersion","fixFeaturesResponse","featureLocal","featuresPerGroupAmount","getKioskData","saveData","forceNew","otherData","additionalInfo","getRawKioskData","kioskData","KioskApp","PostMessage","customerId","postString","nextStep","getSkippedWizardValues","skippedValue","setWizardValuesFromCartItems","shouldUpdate","changeRoute","foundWizardSelectedObject","wizSelObject","urlStepNumber","nextUrl","currentHash","useChangeWizardStepRoute","useHistory","useRouteMatch","propsWizardItem","currentWizardIndex","prevEnabledWizard","nextEnabledWizard","stepUrl","withEdge","withBacksplash","withWall","withBumpout","isWithUnderlayment","isWithWaterfallEdge","isWithFakeEdge","withId","attachedHandleId","attachedHandleUrl","attachedCrownMoldingFeatureId","attachedCrownMoldingUrl","backsplashFeatureId","backsplashHeight","backsplashName","backsplashType","attachedItems","isWithCrownMolding","isWithEndCap","movePointDistance","angleLinePoints","slabModeSkipMiteredEdgeCreation","isHiddenForever","seamCutPoint","aroundLineColor","cornerGutterSize","outlineWidth","outlineMargin","horizontalOutlineMargin","lineThickness","overlayImportData","lineCornerImportData","overlayMiteredData","overlayUnderlaymentData","titleOverlay","staticOffset","blink","lineAttachmentsComposite","getAttachedShape","isWithEdge","isWithBacksplash","isWithHandle","isWithMiteredPrev","isWithMiterEdge","isWithWaterfallEdgeFeature","getAttachedFeature","shouldExcludePoints","getWithId","setWithId","setBacksplashHeight","attachedToResource","updateAttachedToLineResource","renderBacksplashText","getHandleId","setHandleId","getHandle3dURL","setHandle3dURL","getCrownMolding3dURL","setCrownMolding3dURL","getCrownMoldingFeatureId","setCrownMoldingFeatureId","getBacksplashFeatureId","updateAdditionalShapeFeature","setStateParams","getPointsFeatures","getAttachedItems","isAnyItemsAttached","attachedItemKey","setTutotialImage","tutorialImage","setFakeEdge","setHiddenForever","sqftMode","xCord","yCord","getLineField","fieldSquares","squeezeRatio","setMouseOverLine","field","getMouseOverLineV2","getLineBordersArrayV2","getLineHovering","addFreeSeam","mousePosOnShape","lineStart","lineEnd","getClosestPointOnLine","isCabinet","moveLine","updateCornerHoverState","underlaymentOverlay","waterfallData","existing","foundFrom","foundTo","createMiteredOverlay","addMiteredSection","createUnderlaymentOverlay","labelText","createWaterfallOverlay","temp","renderWaterfallText","historyPointFeatures","moveBumpout","moveMitered","nextLine","updateShapeWaterfallLength","updateMiteredLength","updateUnderlaymentLength","getLineDirectionV2","getPairedLines","pairedLines","prevLineStep2","nextLineStep2","prevLineStep3","getLineDistance","getBumpoutTotalHeight","getBiggestXPoint","getBiggestYPoint","getSmallestXPoint","getSmallestYPoint","getSmallestAndBiggestPointWithCorners","toCornerLength","getArcLength","fromCornerLength","toLinePoint","fromLinePoint","biggestLinePoint","smallestLinePoint","toCornerMargin","fromCornerMargin","getLinePointsWithoutCorners","toAngleLength","fromAngleLength","toPoint","fromPosition","toPosition","testLine","testLineFromPosition","testLineToPosition","intersections","toOnly","renderLineBorder","drawBumpoutLine","renderArcLength","renderAngle","nextLineRenderTo","radiusMultiplier","marginFrom","renderLineOverlay","highLightBorder","fromPointWithIndent","toPointWithIndent","drawResizeCursor","setLinePoints","marginTo","prevLineRenderFrom","drawLineFrom","drawLineTo","drawLineBumpoutPoints","bumpoutInOrOut","setPointsOutlineIntersection","prevLineFrom","nextLineTo","fromBorderIntersectionPoint","getBorderFromIntersection","fromOutlineIntersectionPoint","getOutlineFromIntersection","isWithAngle","isWithCorner","closestIntersectionPoint","toBorderIntersectionPoint","getBorderToIntersection","toOutlineIntersectionPoint","getOutlineToIntersection","renderCircle","getOutlineIntersectionPointWithNextTLine","pointOnTheLine","pointOnTheNextLine","nextLineToPointField","nextLineFromPointField","prevLineToPointField","prevLineFromPointField","pointOnTheLineBeforeFrom","pointOnThePrevLine","drawLine","border","drawCorner","interSectionPoint","drawAngle","lineCap","getOutlineStrokeStyle","getOutlineHoverStrokeStyle","getAnglePoints","cord1","cord2","cord3","cord4","get45CornerLegDistanceScaled","setMidpointOffset","pointName","deleteMitered","createLineLength","deleteUnderlayment","deleteWaterfallTool","attachedItemsKey","removeLineText","deleteSlabBacksplashByLine","deleteResourceAttachedTo","addEdgeToLine","renderEdgeText","addBacksplashToLine","addCrownMoldingToLine","crownMoldingName","addEndCapToLine","endCapName","addBumpoutToLine","addMiteredToLine","addUnderlaymentToLine","addWaterfallToLine","createSlabModeWaterfallShapes","addPeninsulaUnderwrapToLine","createPeninsulaUnderwrapOverlay","renderLineField","tutorial","highLightedByTutorial","isHighlightedLightOn","isBumpoutHighlighted","isMiteredHighlighted","canBeMoved","isMovable","pointWasMoved","miteredFeatureId","fillStyleEdge","fillStyleWhite","fillStyleBlack","fillStyleDelete","fillStyleBlue","radiusFillStyle","translateX","translateY","pointRadiusOverlay","setPointWasChangedInRegularMode","shouldResetSlabModePopupOnPointMoveBeDisplayed","renderResetSeamPopup","renderAngleArc","exportAndImportProperties","getMiteredFeatureId","setMiteredFeatureId","setPointWasChanged","setPointWasMoved","setTranslates","movePosition","canPointBeMoved","allowedNavItems","allowedNavItemsForMovingPoint","isLineWithBumpout","isPrevLineWithBumpout","miteredPoints","addEdgeToPoint","revertPositionIfHasIntersections","exportPoint","importPoint","xPos","yPos","useFieldWidth","getPointCords","isFitSize","isWithoutMitered","rememberPos","backupX","backupY","restorePos","marginX","marginY","pointDiff","pos2","shouldHighLightRadius","isNotHighlighted","renderCircleLayout","renderSmallCircleLayout","renderArrowCircleLayout","renderBlankLayout","renderHighlightRadiusLayout","renderRotateAngleLayout","renderWhitePointLayout","renderGrayPointLayoutV2","arcRadius","renderGrayPointLayout","renderArcLayoutOld","sqftSlabManager","resetBacksplashes","getSlabPlaceHolderShapes","hideShapeOffset","reInitShapeOffset","emit","animateShapeTransition","iconPlusGreen","iconPlusBlack","iconPlusBlue","iconplusPurple","objectFlipVertical","objectFlipHorizontal","iconGreenPlus32","iconGreenClip","iconHeight","iconLength","iconLink","iconThickness","iconEyeball","iconCursorPointer","iconLibrary","iconUpload","iconImage","showSlabTool","setActiveSlabId","activeSlabId","setActiveSlabUrl","activeSlabUrl","setActiveStep","setSlabSearchText","setSlabAspectRatio","slabAspectRatio","setSlabImageType","slabImageType","setSlabImageWidth","setSlabImageHeight","setCropperData","cropperData","addSqftCroppedSlabImage","croppedSlabImage","setSqftSlabToolVisited","isSlabToolVisited","addRoomWithVisitedSlabTool","setPricePerArea","pricePerArea","setMeasurementVisibleInSlabMode","setIsSizeValidationFailed","isSizeValidationFailed","setIsSlabPricingEnabled","replacementTubFixture","WithOverlay","popupClassName","overlayElement","fadeIn","hideOverlay","closePopup","fadeOut","any","seg","segCorner","resourceType","resourceId","addResourceToStore","shouldShowEyeBall","attachedToHovered","attachedToExisting","prepareResource","attachResourceToLine","createAttachedResourceInStore","shouldChangeExisting","newSection","resourceActionMap","addEdgeToCornerLine","addBacksplashToCornerLine","addSection","addMiteredToCornerLine","setResources","resources","resource","changeResource","deleteResource","setSelectedPartIds","selectedPartIds","UserLoginButton","userPopupType","handleLoginClick","toggleMobileButton","userLogoutActive","handleDropdownWrapperBlur","handleLogOutButtonClick","logout","saveQuoteAfterLogin","toggleShowAssignQuotePopup","allowClickLeadCapturePopup","SQFTResourceController","resourceName","removeResource","searchedId","exportedData","findLongestLine","longestLine","getDistanceLength","getLineCrownMoldingPoints","linePointsIds","getDiagonalPointsForTheLine","getLineBordersArrayV1","outlineDistance","pointField1","pointField2","pointOnTheLine2","parallelPoint4","getBordersOfTwoPoints","lineBorderArray","virtualLines","borderPointKey","currentLineBorderPoint","nextLineBorderPoint","virtualLine","addEdgeToTheLines","lineNumbers","addFakeEdgeToLines","setLineParams","shapeLine","updateWaterfallLength","setNewLineWidth","createSimpleLinesFromPoints","initAllLineLength","hideAllLineLength","findCollinearLine","searchLine","roundedSearchLinePoints","roundedTestPoints","isHorizontalDirection","isVerticalDirection","isWesternHemisphere","isEasternHemisphere","adjustedLines","legLengthTo","calculateLeg","legLengthFrom","linePosTo","linePointTo","linePosFrom","linePointFrom","cloneLine","newLinePosFrom","newLinePointFrom","legLength","newLinePosTo","newLinePointTo","Layer","fromS3","splitWallPartIds","shouldCheckAdditionalPartsConditions","WallCommon","splitWall","getSplitWallType","actions","toggleFilterArrayValue","FilterSwitchers","replaceFilterArrayValue","setActiveFilterValue","setDefaultFilterValue","setDefaultFilterArrayValue","availableFilterValues","setAvailableFiltersValues","filterGroupName","isRebath","activeFilterValueId","appliedFilter","dbFeaturesArray","setNextPage","loadedPage","fromSearch","edgeGroup","edgeValue","countertopFeature","addFilterArrayValue","FilterSelection","removeFilterSelection","getAvailableFilterValues","featuresToFind","moduleParts","FeatureThumbnail","isLoading","setThumbnailUrl","smallerSizeTried","setSmallerSizeTried","baseThumbnail","alt","onLoad","onError","featureIsMatchingDisplayLogic","displayLogic","displayRules","currentQuoteCartItems","visibleUpdated","rule","entityVal","entityId","countertopCount","matchingCartItem","entVal","ruleVal","comparison","isMatching","propertyName","originalValue","finalValue","inCatProperties","inCatFabCost","inCatCost","inCatPrice","getOldHidePropertyName","forPage","hidePropertyName","toolSettings","checkProperty","toolSettingsObject","tool","setFabricatorFeatureCategoriesProperties","fabricatorFeatureCategories","fabricatorFeatureCategoriesPropertiesAreSet","qtCategoriesList","inCat","currentFabricatorFeatureCategory","fabricatorFeatureCategoryId","inCatName","bvSetting","setting","kvSetting","hideFromBathroomVisualizer","enableVisualizer","hideFromBVQT","enableQuotingTool","hideFromKitchenVisualizer","hideFromFrontEnd","fCat","hideFromBV","hideFromKV","hideFromKVQT","forActiveQTCategory","SuccessNotification","isHiding","showQuoteSavedNotification","saveQuoteTimeoutId","createCanvas","backCtx","finishDraw","errorImages","backgroundLayers","quality","useNewEnhance","maxHeight","canvasObject1","canvasObject3","canvasObject2","globalCompositeOperation","imageObject","cropCoords","layerWidth","layerHeight","layerDimensions","dim","polygonArray","loadedImage","getSubscriptionThumbnail","fabricatorSubscriptions","subscription","getBackgroundLayers","showPlaceHolders","bvConfig","showPlaceholders","getLayers","backGroundLayers","imagesPromise","cnt","newLayoutType","Background","getIsBathroom","CountertopSwitchers","setToggledByUserProperty","currentCategoryPartId","COUNTERTOPGROUPS","applyTo","newPartId","toggleSwitchedOffByUser","neededSubPart","getUpdatedCountertopSwitcherButtons","countertopsApplyToPartId","countertopsApplyTo2","existingIndex2","setToggleOffProperies","toggleCountertopsApplyTo","getButtonName","getValueText","buttonIsDisabled","renderDropDown","selectItems","withCheckboxes","valueText","disabledButton","showAsDropdown","isMaterials","updateCountertopSwitcherButtons","currentGroupPartId","propsCountertopsApplyTo","setApplyTo","typeGroup","filterName","tileFilterValue","navigationItemPart","passedArrayApplyTo","clickedPartId","currentPartId","isNewKitchen","isNewKitchenBacksplash","featureName2","manufacturerFilterGroup","featureManValues","withSameManufacturerFeatures","currentHeight","getCurrentActiveFeatureType","sameHeight","getFeatureBacksplashType","searchFeaturesByName","turnOffToggles","FiltersClass","blurClickSet","activeFilterId","handleSearchInputChange","filterVisible","Layout41","SLAT_WALL_POSITIONS","setEmployeesList","setAlreadyRegisteredUserInfo","alreadyRegisteredUserInfo","setLeadCaptureClickCount","leadCaptureClickCount","setUserPopupContent","userPopupContent","setUserTwoFa","userTwoFa","setUserOptIn","optIn","crossProduct2D","vectorA","vectorB","findClosestIntersectingPointAndLine","referenceLine","perpendicularVector","getPerpendicularMidpointVector","intersectionPointsAndLines","intersectionPoint","getClosestLineAndIntersectionPoint","convertShapesToPolygons","convertShapeToPolygon","convertFromPolygon","areCollinear","getSegmentIntersectionPoint","isPointOnSegment","p1","p2","p3","p4","seg1","seg2","sortedY1","sortedY2","sortedX1","sortedX2","getOverlapLength","findLowestRightmostPoint","resultPoint","hypotenuse","lineVec","lineLen","lineUnitVec","mouseVec","dotProduct","clampedDotProduct","coordinates","findNearestPoint","targetPoint","nearestPoint","Infinity","getThePositionOfAPointToTheLeftOrRightOfALine","linePoint1","linePoint2","searchedPoint","ax","ay","bx","crossProduct","onSegment","allowOverlap","d1","d2","d3","d4","closestIntersectionPointAndLine","roundShapesPoints","cross","roundPoint","polygons","coord","union","a1","b1","c1","a2","b2","c2","determinant","findTopLeftPoint","topLeft","adjustPointsRelativeToTopLeft","sortPointsClockwise","topRight","bottomLeft","bottomRight","roundCoordinate","precision","factor","BodyPanelRadio","radioClick","refreshItems","forceUpdate","quotingTool","isToggle","canvasCount","firstCat","wizardAllObject","stepsState","currentActiveCategory","sPart","changeQTRoutePath","relatedItemIndex","subPartItem","showContractSigning","contractSignPostSignature","contractSignData","showSignaturePad","setContractsValues","contractId","pageIndex","fieldIndex","setContractSigningStep","setContractDocumentForJob","documentData","setContractBlob","contractBlob","restoreContractValues","setContractsList","getContracts","contractsReceived","useContractSigning","getContractDocuments","savedContracts","newOrderedList","contractIndex","getSelectedContracts","getActiveContract","allContractsList","withoutContractsCheck","setContractBlobs","receiptPagesLength","isOfflineFirstLoad","pagesCount","updatedContractsList","pagesFrom","pagesTo","useDocument","documentWithoutTagsUrl","documentUrl","blobUrl","fetch","responseFetch","totalPages","globalContractPage","getAllContractsValues","selectedContracts","activeContract","activeContractPage","changeContractsPage","newPage","changeContext","receiptPages","allValues","showPage","fixVisualizerType","neededSubscriptionName","getToolVersionByVisualizerType","disableLoader","wizardIsActiveObject","roomFeatureGroup","newActiveFeature","advancedQuotingState","showAdvancedQuoting","nextWizard","toolVersionToCheck","quoteCartItems","shouldSwitchVisualizer","hasSubscription","createNewQuoteAfterVisualizerChange","newRoomName","needToAddRoomToCart","replaceIncorrectSymbols","getPercentAmount","fromTotal","forCartItems","totalArray","featureCurrency","existingGroup","resetEvents","currentCursorOwner","clearRotateAngles","drawFinish","workspace_onClick","tookAction","bumpoutLine","getTextBoxes","initDraw","drawShape","isJustCreated","setIsJustCreated","box","mixin","movable","cornerLine","miteredPoint","deletePoint","resetHoveredPoint","lineWithTheLabel","activeMenu","cloneShape","cloneMovableImage","crown","createSpacer","isBoxActive","FeatureWizardSteps","setFeatureWizardStep","featureWizardStep","availableSteps","exitFeatureWizard","allStepsCompleted","selectedValueId","selectedItemIsLocked","showFeatureWizard","toggleWizardFilterSelection","enableFeatureWizard","isLastStep","nextStepIsLocked","lastStepIsDisabled","allProducts","finishClicked","wizardButton","prevStep","buttonName","getFilterDisplayName","showAssignQuotePopup","assignQuotePopupSaveButtons","setAssignQuotePopupSearchText","assignQuotePopupSearchText","setAssignQuotePopupEmployee","setAssignQuotePopupCustomer","setAssignQuotePopupSuccessText","assignQuotePopupSuccessText","setAssignQuoteCloneMode","assignQuoteCloneMode","setAssignQuoteOfflineData","offlineData","doNotZoomPartIds","shouldZoomPartId","shouldZoomToTheBottom","getCorrectedCenter","zoomFactor","zoomToFeature","zoomToPostion","closeOpenedCategory","clickOnFeature","lookUrl","hoveredLayer","featureExistInQuotingTool","allowFeatureScreen","shouldZoomCanvas","tapZoomFactor","zoomFeature","togglePriceWorksheetOpened","priceWorksheetOpened","setCustomAddedDiscounts","setFinancePercentage","setAllFinanceOptionsPopupVisible","allFinanceOptionsPopupVisible","setFinanceCellsVisible","financeCellsVisible","CabinetSwitchers","toggleCabinetsApplyTo","getCabinetsApplyTo","getSetCabinetsApplyTo","cabinetsApplyToPartId","CABINETGROUPS","getCabinetGroups","getFeatureDoorStyleFilter","doorStyleFilterGroup","neededPartId","doorStyles","featureDoorStyles","featureMaterials","ds","mat","applyAllCabinets","propsCabinetsApplyTo","PartCommon","originalName","checkedCatName","customGroupName","_lowercaseCustomDisplayName","_lowercaseSharedFeatureName","getRealFeaturesReceivedProperty","currentLayoutAbbr","collectionFg","fGroup","featureCollectionValue","featureCollectionValueObject","_colorName","getFeaturesFromLayout","currentLayoutFeatures","bvPreset","layout_type","stringifiedLayout","checkAutoAddToCart","setRoomNotInVisualizerProperty","clickable","shouldLoadInDifferentGroups","refactoredArray","Exception","NotImplementedBaseClass","arrayToFilter","getFeaturesBySearchTextLixil","_searchText","isPartName","isFilterName","filterGroupIds","filterIndex","fgv","collectionFilterGroup","matchByName","partsToo","neededId","inParts","arrayToFind","featureParts","matchingItem","_partNameWithoutSpaces","groupId","matchingFeatureExist","currentColorFilterValue","getFeatureByPartName","prevFeatureMatchingName","foundFinally","setCustomConfigurationsAfter","layoutToSet","addFromPageSize","uniqueLayoutsTypes","layoutNumber","activeFeatures","layersBinding","featuresHistory","createNavItems","returnNavItemsFromFeatures","propsFilterGroups","_useCurrency","_relatedFeaturesSet","loadRelatedFeatures","NavigationRequests","getBvPartFeatures","navigationItem","callBack","itemPart","_isMounted","getRelatedItemFeatures","checkIfAllFeaturesReceived","materialsPage","showerComboParent","centerIslandParent","countertopParent","applianceParent","isWallItem","vanityAccent","cabinet","checkIfAllFiltersReceived","changeLayout","firstChange","relatedArray","countertopPageChanges","getSubPartLayoutPageChanges","backsplashPageChanges","requestNeeded","requestNameNeeded","getNeeededKvPartsOnLayoutChange","finishChangeLayout","getBvSceneParts","oldType","currentState","selectLayout","refreshCB","childName","nextLayoutFeaturesPage","maxCurrentFeaturesPage","currentActiveName","neededLayoutName","relatedPartsToReceive","relatedPartsToReceiveForLayouts","pageChanges","nextLayoutName","featuresSize","searchName","WithClickCount","newLeadCount","clickLeadCount","LookAllWallsRadioButton","showColumnCheckbox","viewType","showTutorialToolTip","checked","allWallsCheckboxClick","control","disableRipple","onChange","MessageBox","getMessage","msgIndex","bClass","hClass","messageClass","buttonsElements","MessageBoxButton","sqftShapeIntersectionsManager","resetShapesIntersections","setOverlappedWithShapeIds","getTwoShapesIntersections","addOverlappedWithShape","checkIfShapeContainsAnother","logShapeFeatureIds","overlappedWithShapeIds","logSnappedShapeGroups","intersectedShape","showSlabPlaceHolderErrorMessage","slabPlaceHolderShapes","slabPlaceHolderShape","DesktopNavigationCommon","handleContextMenuClick","menuItem","showNavigation","clickedParent","clickedButton","isBacksplash","bType","backsplashSubPart","applyBacksplash","getFeatureByBacksplashType","parentNavigationItem","subMenuParent","contextMenuOpen","ponyWallAndLeftWallClick","contentType","triggerOpenNavigationMenu","setNewActiveFeature","clickFeature","subMenuText","handleNavTabClick","closeNavigation","navigationIsClosing","setContentType","openLayoutMenu","_menuOpened","activeDefaultPreset","showFilterSelection","showerWallWizardGroupsSelected","off","overlayClick","navClick","lockClick","userPopupClick","handleHeaderBackClick","resetNavigation","updateSideBar","updateSidebarItems","handleSubPartClick","childNavigationItem","subItemPart","childNavigationItemPartId","scrollAsideToMenuItem","rememberWallsSelection","setActivePartRelatedItemIndex","setNavigationFilterIfTheChildWasChanged","menuItemText","child","needToScroll","handleSubPartHover","renderGreenLayerByZindex","scrollToDefault","getElementsByClassName","handleMobileSelectClick","navigationItemClickCommon","useFilters","contentDesign","handleLayoutItemClick","contentRoom","contentLoading","contentDesignBody","onItemClick","navWidth","toggleApplyWallsCheckbox","handleSubTypeClick","showMenu","setStateActiveFeature","contentDesignWizard","getWizardGroupsByPartId","setWizardGroups","setWizardLockedItem","wizardStepIndex","onBackClick","onSubTypeClick","onSubPartHover","activeChildNavigationItem","presets","checkedForLockedPresets","presetIsLocked","handleDefaultPresetClick","bv_screen","navigationMenuButtons","availableNavButtons","tabClassName","navWrapper","_componentDidMount","_componentWillReceiveProps","setHoveredLayer","setDemoPointClicked","NavigationFiltersSteps","wizardButtons","nextStepIndex","lastStep","commonView","mounted","currentActiveIndex","firstStepIsActive","lastStepIsActive","isCountertopWizard","buttonIcon","MobileNavigationCommon","reRenderComponent","parentCategoryClick","parentItemText","firstChild","openMobileMenu","mobileMenuOpened","handleContextMenuBlur","scrollContentToTop","listContainer","messageBoxClick","twoFactorPopup","countryList","searchClick","wizardClick","loadingClick","touchMove","canvasIsDragging","setCanvasClass","handleChangeContentType","resetNav","resetEverything","resetWizardSteps","getDisplayRoomContent","toggleSearchInputFocus","searchInputFocused","contentBody","filterSelectionHasValues","switchers","updateParent","backsplashSelectClick","subTypes","activeSubType","subTypeToString","onFocus","onBlur","filtersVisible","keyType","existInQtCategory","parentUpdate","updateComponent","btn","goToMaterialsInfo","MobileNavigationButtons","handleDropDownButtonClick","designNavigationOpened","handleResetButtonClick","changeContentType","resetDropDown","handleDisplayRoomClick","newButtonClick","dropDownClick","handleFiltersClick","dashboardFramed","mobileNav","enableScheduling","buttonLayoutId","MobileNavigationAllWallsCheckbox","allWallsClick","allWallsApplied","MainButtons","handleLoginButtonClick","handleScheduleButtonClick","enableCalendarForScheduling","consoleTableAllFeatures","downloadCSV","consoleActiveFeatures","allPagesEnabled","quoteEnabled","goToCart","enableSharing","goBack","Visualizer","applyStoredItems","localStorageKey","setIframeMessaging","VISUALIZER_MANAGEMENT_ACTIONS","checkState","updatePresetRoomLayout","visualizerIsLoaded","canvasScaleChanged","canvas_scale","setFirstPreset","layoutTypes","isCartAndUserStatedUpdateNeeded","getQtCategoriesCommon","setNewBvState","firstLoad","handleRefresh","navBar","onBvLoad","askToRestore","checkShareUrl","jobResponse","parseJobIdResponse","canvasClass","removeAllClasses","imageCanvasScroll","newMessageBoxState","demoPointClicked","loadQtCategoriesFeatures","featureGroupsWithoutFeatures","loadFeatureGroupFeatures","toRequestFeatureGroups","finishLoading","setShopPageLoaded","getContractSignDocument","getAssignQuoteCustomersAndEmployees","alreadyRestored","initialFlowStep","initialFlowRoomLayout","tryToSetSelectedRoom","needToSaveQuote","saveJobResponse","visualizerIsSaved","getOfflineReceiptImages","getCustomersAndEmployees","custAndEmpResponse","clients","employees","assignQuoteOfflineCustomers","client","assignQuoteOfflineEmployees","employee","roomChosen","initialFlowState","initialFlowRoom","selectedRoomFeature","removeItem","checkToShowTutorial","lockedView","bvGroupsResponse","savedTempData","parseWizardResponse","setGroupsItemsCount","setQtCategoriesSubparts","recoverFromTempId","editJobId","bvStateVersion","isNewlyCreatedJob","GROHE_ON_OPEN_ACTION","shareFacebook","sharePinterest","shareTwitter","useMouseHovering","useTouchZoom","handleToggleFeatureInfo","VisualizerTutorial","componentDidMount","showTutorialStep","exitTutorial","scrollAndHighLightRing","roomLayoutsOrIdeas","getRoomLayoutsOrIdeasStepLogic","selector","changeHighlightRingPosition","handleNextStepClick","forever","getHighLightButton","buttonComponent","mainTranslate","ringStyles","texts","highlightButton","mainTextId","showText","showNextButton","tutorialState","date","year","getFullYear","printLogo","notFoundImage","assignQuotePopupNewCustomer","newEmployeeSelected","isContractSign","assignQuoteState","cartItemsThumbnails","receiptSettings","showThumbnailsAndDescriptions","getCartItemThumbnails","pdf","getCurrentReceiptPages","withReceiptUrl","onRenObj","receiptLayout","_INTERNAL__LAYOUT__DATA_","printReceipt","fileURL","setReceiptSignature","setPaymentInfo","setCardInfo","setCardErrors","cardErrors","setShippingErrors","shippingErrors","setShippingInfo","setBillingInfo","restorePaymentInfo","someValues","NumberText","isInit","initEventListeners","fontColor","fontFamily","fontHeight","valuePrefix","valuePostfix","isMouseOverText","getTextPointsArea","mText","measureText","getMaxLength","initialValue","inputWrapper","createAdjustableInput","onInputChange","onClose","valueBeforeUpdate","isHoveringPoint","hoveredPoint","isHoveredOverText","setValue","setAngle","setBetweenPoints","parentOffset","angleRad","calculatedXOffset","calculatedYOffset","getValue","isString","withSuffixes","updateOrientation","updatePositionBetweenPoints","pointBetweenPoints","renderFrameBorder","renderText","translate","roundedRect","font","textAlign","wrapText","MovableImage","_state","mouseDownSize","minimumHeight","minimumWidth","resizablePoint","onClicked","around","newPoint","_setHovering","_isMouesOverImage","_moveImage","initialSize","thickness","hoverColor","renderMovableImage","_setFillColor","_setImage","_setAttachedTo","_snappedPos","updateSnappedPos","resetAbsolutePos","setSnappedWithShape","setSnappedShapeGroup","updateLinesLength","updateLineLength","distancesToShapes","getDistancesToShapes","distancesToImages","getDistancesToImages","snapPossibilitiesToShapes","getSnappingPossibilities","snapPossibilitiesToImages","absolutePosToShapes","snappedWithShape","setSameSnappedShapesGroup","absolutePosToImages","snappedWithImage","realPos","realSize","axis","_getRotatedPoint","_onMouseDown","getCenterPosition","setSize","setInitialSize","getPosField","getThickness","getRotation","linesData","Lines","currentSrc","$","attr","nameMetric","shapeAbsoluteData","skipImportProps","lineData","rotateBorderPoints","getLinePoints","createLines","_onMouseMove","_onMouseUp","_render","initResizablePoint","pointParams","isCentered","isVisibleOnHover","moveCallback","grandParent","newWidth","newHeight","mouseUpCallback","mouseDownCallback","pointDesign","CORE_POINT_LAYOUTS","pointPositionX","pointPositionY","reInitLineEvents","appVersion","getSrc","isSVG","getBorderPointsOnWorkspace","posField","createBorderPointsPosition","getImagePoint","revealMeasurementsInsideShape","measurementInsideShape","revealEvents","hideMeasurementsInsideShape","hideEvents","isAnyLineHovering","createImageLinesFromPoints","shouldRenderMeasurementsInsideTheShape","getOuterShape","centerPos","centerPosOnField","ear","PointV2","pointPrams","isCenteredByY","isResizedByPoint","isScaledByPoint","shouldRotateShape","pointData","mixins","isHoveredWithParent","isMouseDownWithParent","subLineHeight","renderOval","renderImage","_modelCorePoint","setPosX","setPosY","isParentMovableHovered","isParentHovered","isParentChildrenHovered","hoveringWithChildren","isParentMouseDown","isParentChildrenMouseDown","mouseDownWithChildren","isMouseDown","RenderParts","drawMeasurementAroundPoints","xMargin","yMargin","drawShapeBorders","strokeTemplate","fillTemplate","renderDevMode","isShapeHovering","shapeColorSet","renderFilledPrimaryTemplate","primary_border","renderColorSetTemplate","renderFilledActiveTemplate","getBoundingBoxFromShape","drawStripedRectangle","color1","color2","lineGap","clip","fillStripedRectangle","gradient","createLinearGradient","addColorStop","drawDiagonalStripesV2","bbox","pointPos","drawDiagonalStripes","lightGray","darkGray","scaledLineWidth","drawHoveredBorders","shadowBlur","extendHoveredLine","shadowColor","drawSpacerBorders","drawShapeCrownMoldings","crownMoldingPoints","renderCrownMolding","drawShapeEndCap","lineState","renderEndCap","drawHandles","renderPosition","getIntersectionPoints","intPoint","pf","sqftImageManager","getAppliancesThatShouldRenderMeasurementsInsideTheShape","hideSlabImages","movableImages","restoreSlabImages","getExportedSlabImages","croppedImages","croppedImage","workspaceImages","movableImageData","workspaceImage","hideImages","restoreImages","hideTextBoxes","restoreTextBoxes","enableRegularMode","hideAdditionalShapes","enableSlabMode","shouldUpdatePlaceholderFeatureIds","initWaterfallToolShapes","initBacksplashAndEdgeShapes","initMiteredToolShapes","initUnderlaymentToolShapes","initBumpoutShapes","restoreBacksplashShapes","getDimensionsDependingOnShapePositions","maxCordX","maxCordY","imageWidth","imageHeight","fontSizeMatch","TubCommon","showerTubComboParent","setShowerTubCombo","setActiveTub","bottomTubId","applyFeatureIfNotCompatible","getUrlMatchingByColor","getRelatedFeatureMetadata","getCabinetDimensions","parentFeature","thirdPartyAR3DMetaData","getWidthFromDbFeature","getDepthFromDbFeature","getHeightFromDbFeature","featuresListToSearchForNewFeature","currentShapeDbFeature","cabinetBoxName","generateQRCode","qrData","getThirdPartyAR3DMetaData","thirdPartyAR3DUrl","metadataString","getDepthFromAR3DMetaData","Depth","getWidthFromAR3DMetaData","Width","getHeightFromAR3DMetaData","Height","getCategoryFromMetadata","getSpecialShape","SpecialShape","Category","getDepthFromDescription","getWidthFromDescription","getHeightFromDescription","normalizeString","findGLBLink","links","link","splitAndNormalize","getUrlByName","nameSearch","thirdPartyAR3DUrls","featureNameParts","urlParts","containsHEBeforeExtension","get3dURLsForFeature","urlByFeatureName","setCabinetsSetToCabinetGLB","startsFromH","isHoodShape","shapeDbFeature","shapeFeature","setCabinetGLBFromCabinetsSet","displayDoorsOnly","cabinetsData","CabinetsSet","prepareCabinetsSet","setUrlToCabinetGLB","abort","cabinetSet","abortController","AbortController","postCabinetSet","s3Url","relatedParentFeatureName","sortedUrls","groupUrlsByVersion","urlBySharedFeatureName","urlBySimilarity","similarityByWords","urlBySimilarityFromFeatureName","matchingUrl","getWizardList","getWizardListFromBackend","setLeadPopup","getErrorPopupObject","wizardsArray","nextActiveItem","SET_APPOINTMENT_DATE","SET_APPOINTMENT_TIME","SET_APPOINTMENT_TIME_STEP_ACTIVE","SET_AVAILABLE_APPOINTMENTS","SET_APPOINTMENTS_NOT_AVAILABLE","SET_SALES_REP_ID","setAvailableAppointments","setAppointmentDate","setAppointmentTime","time","timeSlot","setAppointmentTimeStepActive","timeStepIsActive","availableAppointmentDates","appointmentState","appointmentDate","appointmentTimeSlot","formattedToMatchApiDate","formatCalendarDateToMatchAvailableDate","selectedLixilDateObject","dateObject","salesRepAppointmentDate","salesRepsInSlots","timeSlotObject","setSalesRepId","setAppointmentsNotAvailable","appointmentsNotAvailable","salesRepID","getCommonLixilPostData","userLocation","productId","productName","getLixilCampaignInfo","Product","LIXIL_PRODUCT_TYPES","srBathing","contactData","installationAddress","address","zipcode","streetName","streetNumber","productInfo","checkLixilCalendar","postCalendarData","postLixilCalendar","postCalendarResponse","salesRepAvailability","availableSalesReps","getLixilSalesRep","postLixilGetSalesRep","postSalesRepResponse","calendarDate","withSlashes","day","getDate","month","getMonth","getSelectedLixilDateObject","appDate","Walls","Ceiling","RightWall","LeftWall","PopoutWall","Backsplash","BacksplashRightWall","BacksplashLeftWall","RightWallBacksplash","LeftWallBacksplash","Floor","Globals","GlobalShadow","Baseboard","CeilingLights","CeilingHighlights","Decor1","Decor2","Decor3","Decor4","TopCabinetShadow","TopCabinetShadowPart2","BottomCabinetShadow","TopCabinet","TopCabinetModuleBox","CrownMolding","TopCabinet2","TopCabinetModuleBox2","CrownMolding2","BottomCabinet","BottomCabinetModuleBox","BottomCabinet2","BottomCabinetModuleBox2","TopHandle","TopHandle2","BottomHandle","BottomHandle2","Peninsula","TopCabinetModules","BottomCabinetModules","Appliances","Microwave","Hood","Dishwasher","Range","Fridge","FridgeShadow","CountertopGroup","Countertop2","Sink","Faucet","Stovetop","CenterIsland","CenterIslandShadow","ChairsShadow","Chairs","Handle","moduleTopNumber","moduleBottomNumber","module_modulePart","getLayerDimensions","fullImagesFactor","checkForCanvasScale","offsetWidth","getMenuByHoveredLayer","contextMenuPartId","leftWallBacksplash","hoveredMousePos","rightWallBacksplash","backsplashLeftWall","backsplashRightWall","Edge","islandHood","chairs","setEdgeNotInVisualizer","disallowBlurClasses","NavItemPositionModal","activePartId","checkboxesUpdated","setCheckboxesUpdated","popupPosition","contextMenuBlur","cls","popupOpened","updateCheckboxes","maxRight","fixedTop","triangleStyles","marginTop","isShelf","positionsArray","getPositionsArray","shelf","shelfIndex","ownProps","getAnalyticsEcommerceItem","item_brand","itemQuantity","item_id","item_name","affiliation","companyName","coupon","item_category","lixilProductCategory","item_category2","item_category3","item_category4","item_category5","item_list_id","item_list_name","item_variant","location_id","getAnalyticsEcommerceValues","cartItemsToInclude","cartItemIndex","shipping","GroheCartHeaderCommon","subTitle","afterTitle","withSave","subTitleValues","aria-label","withoutSave","toggleShowManualCalculation","showManualCalculation","setSwitcherPosition","switcherPosition","addManualCalculateRow","updateManualCalculateRow","row","updatedRowValue","manualCalculationRows","deleteManualCalculateRow","changeRoutePath","nextRelatedItemIndex","nextPath","subPartName","getMaterialsFixedName","nextSubPart","DemoPoints","setPoints","layoutFeatures","getBathroomPointPositionByPartName","pointC","bvScenePoints","relPoint","bvScenePoint","getKitchenPointPosition","currentLayoutType","handleResize","pointResponsive","ImageCanvasCommonNew","alreadyRenderedImages","copyImages","shouldUpdateGreenZone","layersHoverings","backCtxBg","canvasBg","greenImage","mouseMoveSet","setOnMouseMove","setLayersHoverings","setShowCanvasLoader","getGliaImage","el","canvasImg","nonTransparentPixelHovered","mousePosArray","layerHovering","pixelHovered","willReadFrequently","hovered","layerIsExcludedFromHover","checkMorePointsPartIds","activeGreenZoneIndex","renderGreenLayer","draw","neededLayerHovering","canvasContext","firstX","isGreenHovering","firstY","lookCanvasClick","onDoubleClick","data-mobile","stickyFooterButtons","classes","variant","resetLoading","loadingBarReducer","loadingBarMiddleware","LoadingBar","ImmutableLoadingBar","_loading_bar","require","_loading_bar2","_interopRequireDefault","_loading_bar_middleware2","_loading_bar_ducks","_immutable2","compressedDbFeature","priceWasChanged","customCost","customPrice","compressedCartItem","featureDefinition_id","fabricatorFeatureId","calculatedCost","getCompressedCartItems","addGACookie","cookie","cookiesAll","cookie_ga","getCookie","getCartItemPartIdFix","setInitialFlowAdditionalRooms","initialFlowAdditionalRooms","setInitialFlowType","initialFlowType","setInitialFlowRoom","setInitialFlowVisualizerNotAvailable","visualizerNotAvailable","setInitialFlowFinished","initialFlowFinished","setInitialFlowRoomLayout","setInitialFlowStep","scheduleCustomer","am","scheduleData","scheduleEntryData","duration","alert","appointmentType","jobIdType","setUserLoginResponse","fromConfirmationDialog","showSchedule","updatedUserInfo","pendingPhoneVerification","responseDataBase","callUserRegisterErrorPopup","userLogin","showConfirmationPopup","userAction","assignQuote","withCheckoutLogic","noInternetCallBack","executeAfterRegisterIfUserExist","isEmailTaken","errorUserMatch","applyFunction","userRegister","agreedToTerms","subscribeToNewsletter","preferredCommunicationMethod","howDidYouHearAboutUs","phone2","registerResponse","schedulerPending","saveQuoteResponse","resetUserPassword","withLoader","emplList","getCustomerById","showContractOnError","generateTwoFaAuthenticationToken","generateAuthenticationToken","validateTwoFaAuthentication","authCode","validateAuthenticationRequest","sendAuthenticationRequest","MiteredController","imgSrc","miteredSectionsHTML","createCursor","registerEvents","attachMiteredEdge","attachMiteredUnderwrapEdge","checkForRestoreCursor","miteredSection","updateSection","changeMiteredSection","deleteSection","deleteMiteredSection","isWaitingToRestoreCursor","onMeasureUnitChange","getSegments","segment","heightNumberText","getEdgesLength","additionalLength","getEdgeLengthValue","getExportedMiteredEdges","edgeLengthValue","miteredSectionsArea","getMiteredToolTotalArea","setMiteredSections","SHAPE_HARDCODED_PART_IDS","SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST","leftWall","rightWall","centerWall","frontWall","popoutWall","backWall","ceilingPanels","leftWallSplitter","activeRelatedPart","selectedByUser","Navigation","userHasLoggedIn","navItemToClick","defaultPresetIndexToClick","messageListening","closeVisualizerNavigation","closeMobileNavigationMenu","hoveredZone","menuItemToShow","subMenuItemToShow","getSearchProducts","searchProductRequest","searchAPIDebounced","activeShower","ponyWall","receiveAllFeaturesAndClickFeatureByName","wallExL","exLSubPart","findAndClick","wallExLFeature","itemClick","searchForSameNameWallsBeforeFeatureApply","applyFeature","featureCanChangeShowerSize","applyAllWalls","itemParent","itemIsLocked","exLAndBathtubAndSmallRoom","callMetaMathesFailedPopup","nonCompatibleWith","handleChangeParent","callToiletFailPopup","shouldRecoverWalls","recoverPrevioslySelected","allWallsCanBeApplied","setPrevioslySelected","allWalls","featuresAvailableToClick","getAvailableFeatures","removeChoosingView","setDefaultPartAfterSubTypeClick","nextSubPartIndex","currentSubPart","subNavigationItem","featureToSet","defaultPreset","finishPresetLoading","currentActiveItemIsLocked","wizardActiveItemIsLocked","lockedFilters","showSmallRoomLayout","presetUnlocked","bvStateHasLockedItems","closeContextMenu","setWizardStepIndex","wizardGroupsName","currentGroup","selectedValueName","hidden","resetActiveFeature","vanityWizardGroups","showerWallWizardGroups","setWizardFiltersFromActiveItem","wizardConsumers","wizardClients","currentActiveFilters","selectedFilterValueId","doorStyleFilter","doorStyleActiveValue","doorStyleFilterValue","stepName","materialFilter","materialValueId","materialValue","showPositionsPopup","showLayerPositionsModal","eventPosition","contextMenuPosition","contextMenuPonyWall","bindCanvasClick","$scrollList","SET_LOADING","EXPAND_FOOTER_INFO","SET_LEAD_POPUP","ALLOW_SAVING_JOB_ON_INPUT_STEP","SET_JOB_SAVED","setJobSaved","SET_FOOTER_INFO_BUTTON_TEXT","setLoading","faradayLoading","expandFooterInfo","footerInfoExpanded","setFooterInfoButtonText","footerInfoButtonText","leadPopup","jobData","someUserInfoIsDifferent","setAllowJobSavingOnInputStep","registeredUser","saveJobAction","isDelayedSave","isLoggedIn","registerUser","registered","setRegisteredUserData","authToken","updateUser","updatedCustomer","postSaveJob","getSaveJobData","postScheduleAppointment","getSaveAppointmentData","LEAD_WIZARD_GROUP_TYPES","inputs","contact","appointment","getLeadFormSteps","leadFormSteps","leadStep","existingLeadStepObject","leadStepObject","leadStepName","leadStepUrl","leadSubSteps","getUrlLeadStepName","ImageCanvasCommon","drawPropsLayers","updateGliaCanvasImage","createPinchZoom","canUseUpdate","disable","updateLookCanvas","handleOrientationChange","fromDesktopToMobile","navBreakPoint","fromMobileToDesktop","layoutScene","excludedPartIdsFromHover","excludedIndexesFromHover","excludedLayer","existingGreenLayerHoveringIndex","getHoveringLayer","makeHoveringLayer","hoveringLayer","enableLoader","imagesRendered","alreadyRenderedImage","imageRendered","hoveringImage","allowPropsLayers","greenImageIndex","resizedContext","resizedCanvas","backgroundCanvas","windowHover","Window_Default","windowLayerHovering","layersHovering","Window_Covering","allLayers","timeout","hoveredLayerIndex","layersToRender","checkForLayerParts","moveStart","thisX","thisY","imageCanvasScroll2","statusSwipe","detectedSwipeLeft","detectedSwipeRight","currentTranslate","html","tX","tY","delta","nextPosition","visibleCanvasWidth","transform2d","mozTransform","msTransform","oTransform","moveEnd","hoverZones","backgroundImages","setPinchZoom","onlyLayers","onlyStateLayers","needToUpdateCanvas","onTouchStart","onTouchMove","onTouchEnd","Wall_A","Wall_B","Wall_C","Wall_A_Accent_Mask","Global_Shadow_Overlay","Ceiling_Lights","Wall_Lights","Towel_Rack","Body","ShowerDrain","FloorShadow","ExtrusionWallRight","ExtrusionWallRightShadow","Wall","Wall2","WallAccent","WallAccent2","WallShadow","LargeCornerCaddie","Fixture","ShowerHead","ShowerPanCombo","LargeCornerSeat","CornerCaddie","SoapDish","SmallCornerShelf","GrabBar","ExtrusionWallLeftHalfWall","ExtrusionWallLeftShadowHalfWall","Threshold","ThresholdShadow","ShowerDoor","ShowerDoorHandle","ExtrusionWallLeft","ExtrusionWallLeftShadow","Overlay","PonyWall","PonyWallShadow","PonyWallCap","PonyWallCapShadow","PonyWallGlass","Steam60in","0","TubCombo","WallConfiguration","Liner","ReplacementTub","WalkInTub","JettedTub","BathTub","FixtureFloorMount","Base","Spa","Top","Toilet","VanityBacksplash","CounterTop","Mirror","BackgroundBG","ShowerWall","CenterWall","ShowerWallAccent","Accessories","WindowBody","WindowKits","LargeCornerCaddie2","LargeCornerSeat2","CornerCaddie2","SoapDish2","SoapDish3","GrabBar2","GrabBar3","CornerShelf1","CornerShelf2","CornerShelf3","CornerShelf4","CornerShelf5","CornerShelf6","ShowerPod","LargeShelf","ShampooShelf","Seats","ShowerRod","TowelBar","ShowerPan","ShowerFixture","ShowerFixture2","ShowerDoor2","CeilingPanels","PaperHolder","ToiletPaper","ToiletPaperHolder","Towel","LightFixture","LampFixture","DecorWindow","DecorSeat","Bathtub","BathTubFixture","BathTubBody","sizeFactor","ShowerAccessories","largeCornerCaddie","cornerCaddie","smallCornerShelf","showerPod","windowBody","windowKits","largeShelf","shampooShelf","towelBar","caddie_type","Layout31","LookFeatureImage","withoutGallery","setGalleryImages","activeImageIndex","setActiveImageIndex","featureGalleryImages","galleryEnabled","preview","arrowClick","analyticsLabel","nextIndex","mainImageUrl","initialState","SET_CABINET_RELATED_ITEMS","roomSwitcher","menuItems","validationMessage","cabinetRelatedItems","filteredImages","roomsWithVisitedSlabTool","DEFAULT_SLAB_IMAGE_PART","upload","selectedImage","AxiosInstance","baseURL","leadApiGet","leadApiPost","VISIT_ROUTES","thanks","VISIT_STEPS","personal","project","IS_DEV_MODE","SKIP_CALENDAR","SET_USER_VALUE","SET_USER_LOCATION","SET_USER_ERRORS","SET_REGISTERED_USER_DATA","setUserLocation","setUserErrors","registeredUserEmail","registeredUserAuthToken","replacePhoneToMatchMask","cleaned","replaceMaskToPassPhoneOnTheBackend","GROHE_POST_MESSAGES_ACTIONS","signIn","openMiniCart","LookFeaturePrice","withUnit","isBundleChild","listPage","mainContentPrice","showPriceAlways","getQuote","showPriceLocked","lockedText","priceEditable","finalText","cartItemsLength","featureInfoCount","qtCategoriesLoadedLength","FeatureDescription","brief","textLength","desc","dangerouslySetInnerHTML","__html","_extends","arguments","_defineProperty","configurable","writable","scope","DEFAULT_SCOPE","SHOW","HIDE","RESET","_ref","_ref$scope","sqftManualCalculationState","miteredEdges","shapesList","totalSQFTArea","getCountertopArea","workspaceCenter","sqftApplianceImages","getCanvasApplianceImages","sqFtSlabImage","getSlabResultImage","sqFtSlabCalcImage","getSlabCalcImage","getCanvasImage","sqftCanvasImage","images3D","radii","shapeLength","getExportedTextBoxes","slabImagesTotalArea","getSlabImagesAreaGrouped","manualCalculationsCountertopArea","totalAreaToMeasureUnit","getExportedManualCalculateCountertops","manualDiv","getCanvasImageScaled","pointsCords","clonePoint","canPointsBeMoved","pointCord","LayoutCommonNew","getFeatureFromAllLayouts","featuresToLoad","childSubPart","featureLoaded","qtCategoryHasBeenChanged","changedSubPart","needToLoadFeature","useNames","needToChangeLayout","isFake","disabled_parts","previouslySelectedItem","getDefaultFeature","partIdPosition","additionalFeature","setCartStateAndUserStateFromBvState","mValue","LayoutCommon","selectedLayoutFeatures","getNotAvailableInVisualizerFeatures","notInVisualizerFeaturesThatLeft","featureSplittedName","allNotAvailableFeatures","additionalSet","neededDbFeatures","featureGroupFeatures","needToLoadFeatureGroupsFeatures","_navItemsCount","checkedAfterReceived","partsToShow","enabledParts","thirdParam","nItems","bvGroups","groupKeys","withShadow","currentType","ri","fixFeatureMetaData","dbFeatures","forParentGroup","applyCustomConfigurations","forNextBvState","employeesOnly","updateExistingFeature","fixFeatureBeforeLoad","loaded","setSpecificRules","withOtherGroups","skuNumber","allLayouts","withSharedFeatureName","propToSearch","featureGroupFound","searchFrom","allParents","sameSkuFeatures","sameSide","recentlyViewedItems","displayLogicCartItems","useSqftCartPopup","disabledPartIds","getDisabledFeatures","returnAllData","addSpecificPropertiesToLocalStorage","addDisabledPartsToLocalStorage","getActiveInstallations","addCartAndUserStatesToLocalStorage","checkAllLayouts","setCustomPrices","ciFeature","partDataHasLockedItems","isComplex","displayType","unitText","hasFeatures","anotherFg","qtCategoryId","hasFeaturePropertyName","bathroom","kitchen","fireplace","laundryroom","hasBVFeatures","hasKVFeatures","dbName2","addSubPartProperties","_subParts","newSubParts","qtCategorySubPartNavItem","isWordpressPlugin","getCartItemsFromBvState","defaultType","forceReturn","addCustomLayers","zSort","layerToReturn","bgImg","zIndexesObject","receiveAllFeatures","subItems","subItem","subPartsObject","qtCategoryIndex","excludedGroups","excludedGroupName","parentName","setCartAndUserState","hasPreviouslySavedItem","featureIndex","strippedGroupName","strippedCurrentName","inGeneral","qtCategoryToSearch","searchPartOfId","countertopExist","valueObj","CabinetWorkspace","cabinetShapes","cabinetShapesLayout","__crownMoldingParams","onRightClick","handleDrop","handleDrag","dataTransfer","getData","parentFeatureId","mousePosOnField","currentBottomTub","ExternallWall","isComplete","wallName","matchesByBindings","getShadowConditions","hardCodedName","activeShowerGroup","zIndexShadow","ponyWallFeature","decor","center_wall","background_bg","x1Percentage","x2Percentage","y1Percentage","y2Percentage","clickLogic","showNotCompatibleViewConditions","skipNotCompatible","parseFabricatorSettings","kitchenSettings","bathroomSettings","fireplaceSettings","laundryRoomSettings","finalSettings","getFinalSettings","finalKvSettings","finalBvSettings","finalFPSettings","finalLRSettings","received","fabricatorHardcode","useIMEAPI","useIMEAPI_PartnerId","currentSettingsProperty","nextSettings","useShipperHQ","hideYourListButton","dashboardUserPermissions","permission","ProtectedAreaId","AccessRights","getDashboardModeSettings","parseFabricatorSettingsOLD","kitchenToggles","oldKey","newKey","checkOut","generalProperties","settingsObject","stateSettings","fabricatorResponse","mUnit","leadCaptureProduct","measurement","showLanguageSelect","useVisualizerSwitching","callForPricing","enableASProductSync","enableGProductSync","INITIAL_FLOW_BUTTON_TYPES","Quote","AllFeaturesChecker","_filtersRequestsMade","withFiltersRequest","loaderOnly","initialShopContextValues","shopAllNavItems","shopNavItemsLoaded","shopActiveCategory","shopActiveFeature","shopLastActiveFeature","ShopContext","useShopContext","useContext","shopContextAction","shopContextReducer","UiIcon","manualCalculationsCheckForChangesApplied","manualCalculationsEdgesLength","manualCalculationsBacksplashArea","manualCalculationsEdgeLength","getEdgesArea","edgeCount","getBacksplashTotalArea","backsplashesArea","shapeArea","getSlabTotalArea","previousValue","imageSize","slabImagesAndPlaceHolders","slabImagesPrepared","preparedSlabImage","prepared","getSlabSameTypeArea","totalSlabs","getSlabSameType","getRowSum","getConvertedMultipliedValue","getCountertopQtCategory","getExportedManualCalculateBacksplashes","linearFeet","M","inputLength","inputHeight","getExportedManualCalculateEdges","selectedEdges","inputWidth","filteredRows","newRow","lastRow","lastRowId","getDefaultManualCalcRowEdge","DEFAULT_MANUAL_CALC_ROW","newList","isShowTypesList","getEdgesPlaceholder","SHAPE_LAYOUTS","upperLayoutType5","upperLayoutType2","upperLayoutType4","lowerLayoutType1","lowerLayoutType2","lowerLayoutType3","lowerLayoutType4","lowerLayoutType5","LowerIroningBoardRight","LowerIroningBoardLeft","IRONING_BOARD_DIRECTION","SHAPE_UPPER_LAYOUTS","SHAPE_LOWER_LAYOUTS","SHAPE_SQUARE_LAYOUTS","addShapeHelper","upperShapes","getShapeLayout","lowerShapes","otherShapes","shapeArray","getShapeLines","specialShape","specialLayoutName","specialShapes","cathetus","createPoints","createIroningBoardShape","resetUpperShapes","activeBacksplashData","backsplashShape","slabAdditionalShape","addActiveBacksplash","additionalShapes","backsplashShapeId","findAdditionalShapeByLine","additionalShape","shapeToRemove","LowerLCorner","LowerDullangle","LowerDualangle","LowerIroningBoard","LowerDimondShape","LowerDimondCorner","UpperDimondShape","UpperDimondCorner","UpperLCorner","OnScreenKeyboard","componentWillUnmount","keyboardFrame","detach","appendTo","handleShowKeyboard","handleOutsideClick","getFields","$parent","inputId","$parentInput","parentInput","$input","oskInputId","tryBindToParent","osk","fields","setKBPosition","lightbox","is","css","draggable","selectionStart","selectionEnd","blockOutsideClick","onShow","inputFocused","passwordify","changeValue","runKeyStroke","selStart","selEnd","inc","isUpperCase","select","setSelectionRange","setParentValue","done","mouseUp","renderEmailPanel","keyValue","renderNumericKeyboard","tabIndex","node","prependTo","$keyboardFrame","arrowKeys","mainFrameClass","keyValue2","raw","rightSide","replaceDialCode","inputValue","dialWithPlus","charLength","LookUserPhoneInput","isUserPopup","inputsValidated","inputRef","defaultValue","blurred","setBlurred","focused","setFocused","wasChanged","setWasChanged","utilsScript","handleInputBlur","isValid","restartInput","relatedTarget","replacedValue","fullNumber","formattedPhone","setInitialState","setFlag","setNumber","errorsExist","renderScreenKeyboard","handleInputChange","tel","v","IntlInputComponent","inputClassName","containerClassName","onSelectFlag","currentNumber","selectedCountryData","preferredCountries","getPreferredCountries","onPhoneNumberChange","forceCarrot","forceCarrotFunc","onPhoneNumberBlur","onPhoneNumberFocus","separateDialCode","defaultCountry","fieldId","aria-hidden","shrink","restartPhoneInput","DiscountCommon","handleDiscountSelectClick","isDiscountDisabled","updateDiscount","setDiscountProperty","getGrandTotal","withoutDiscount","forDiscount","discountAmount","getDiscountPercentageAmount","setAmountValue","getMaxDiscountValue","getDiscountAmount","getInputValue","customDepositAmount","renderAmountInput","isDiscount","numberInput","onRealChange","maxValue","currencySing","printContext","getCartItemName","SIMILAR_FILTER_GROUP_NAME","getFeaturesCollectionsList","cartFeatureFilters","featuresCollectionsList","cartFeatureFilter","collectionObject","colObject","getSimilarItemInfoObject","addedCountertops","featureCollection","totalCountertopsQuantity","fromCartItemName","countertopTotalPrice","subTotalPrice","filterValueName","loadTexture","gl","oc","texture","createTexture","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","setArrays","prog","vertex_buffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","getAttribLocation","vertexAttribPointer","FLOAT","enableVertexAttribArray","prepareWebGL","vertSh","createShader","VERTEX_SHADER","shaderSource","compileShader","fragSh","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","useProgram","viewport","webglCanvas","useNewCanvas","wgl","uSampler","getUniformLocation","uniform1i","activeTexture","TEXTURE0","clearColor","clear","COLOR_BUFFER_BIT","drawArrays","TRIANGLES","longPressInterval","longPressDelay","isClosed","adjustInputValue","dispatchEvent","Event","longPressTimeout","delayTimeout","startLongPress","stopLongPress","incrementButton","textContent","onmousedown","onmouseup","onmouseleave","decrementButton","onchange","closeInput","moveElement","newX","newY","speed","oldX","offsetLeft","oldY","offsetTop","distanceX","distanceY","startTime","performance","now","currentTime","elapsedTime","progress","delay","enableFreeDrawMode","disableFreeDrawMode","createShapeFromPoints","pointCords","isClonePointRequired","shapeCreationParams","polygonLines","polygonArea","minimumShapeArea","maximumShapeArea","maximumLineDistance","polygonLine","createWallFromPointsV2","centerPoint","lockedAngleStep","createShapeFromCorePoints","createPolygonFromCorePoints","DrawImage","htmlImg","svgImageId","isScale","svgImageDataURI","drawSvg","getHorizontalLineIntersectionPoints","mousePosOnFiled","verticalLinePoint1","verticalLinePoint2","getClosestIntersectionPoints","intersectionXPointAndLine1","intersectionXPointAndLine2","getVerticalLineIntersectionPoints","intersectionPointAndLine1","intersectionPointAndLine2","intersectionPoint1","intersectionPoint2","closestPont","getIntersectionPointsAndLines","pointAndLine","closestPont1","closestPont2","getCircleLineIntersection","circleX","circleY","circleRadius","lineX1","lineY1","lineX2","lineY2","t1","t2","RenderCabinets","getDiagonalPointsForTheSquare","returnPoints","pointIndex","previous","diagonalPoint","currentPoint","squarePoint","linePointId","crownMoldingPoint","fromPointField","toPointField","MiteredOverlay","sectionIndex","hoveredText","pointsDistance","heightMetric","thicknessMetric","maxSegmentPriority","minMiteredSize","measurementMargin","dragPointMargin","rulerMargin","heightMargin","sectionIndexMargin","sectionArrowWidth","letterMargin","thicknessMargin","movePointOffset","lineTextColor","deleteFillStyle","_segments","miteredTextParameters","setMiteredPoints","setSegments","movePointInOrStop","biggestLineCord","smallestLineCord","stopPointLeft","stopPointRight","moveStopPoints","smallestPointStopped","biggestPointStopped","lengthDiff","movePoint","moveMeasurements","getMousePosPointDiff","sameOrientation","getMiteredTextParameter","isMiteredPointMoving","preparePoints","prepareMeasurements","prepareHeight","initPoint","exportSegment","importMitered","preparePoint","shouldAddTwoPointsInTheMiddle","point33","point66","addMeasurementBetweenPoints","xMarginHeight","yMarginHeight","posHeight","heightValue","setSegmentHeightFromNumberValue","endPoint","updateSegmentsLength","updateSegmentThicknessPos","importSegment","point1Index","lengthText","setSegmentLengthFromNumberValue","getPointBetweenCords","closestIndex","secondPoint","isPrev","closestPointField","addPointBetweenPoints","getSegmentBetweenPoints","point2Index","getSegmentPointsBySegment","segmentIndex","removeMeasurementBetweenPoints","removeIndex","length2","updateCornerPoints","updateSectionHeightPos","setSegmentLength","numberText","miteredSegment","setPriority","resizeMiteredSegment","newValue","setSegmentHeight","setSegmentThicknessFromNumberValue","setSegmentThickness","getSegmentByNumberText","getResizedSegmentsWithoutPriority","closestLeft","closestRight","getResizedSegmentsFreeSpace","getResizedSegmentsByPriority","minPrevSegment","minNextSegment","prevSegments","nextSegments","movePointWithMouse","resizeMiteredSegmentFreeSpace","resizeMiteredSegmentWithoutPriority","resizeMiteredSegmentWithPriority","minNextSegmentIndex","minPrevSegmentIndex","segmentPoint1","segmentPoint2","moveAllNextPoints","segmentBetweenPoint2","moveAllPrevPoints","segmentBetweenPoint1","getLeftRightStopPoint","renderTopBlueLine","renderRuler","renderLetter","renderHeight","renderSectionIndex","pointsToRender","parallelPointFrom","parallelPointTo","drawFlatArrow","renderThickness","xMarginLine","yMarginLine","xMarginImage","yMarginImage","thicknessValue","renderSectionIndexOld","xWidth","yWidth","xMarginValue","yMarginValue","renderPos","renderDoubleCircle","isMouseOverPoint","slabState","slabWorkspacePos","shapeRegularPointField","shapeSlabPointField","clearSlabLeftPart","renderLinesWithoutStroke","slabIndex","movableImagePosition","movableImagePointField","movableImageSize","shapeCenterOffset","drawSlabMidDivider","renderSlabWorkspace","drawSlabRightPart","renderMeasurementArrows","getMeasurementPoints","renderMeasurementLength","sqftResourcesManager","getLineByAttachedItemId","attachedItem","ShapeAbsolute","__shape","__intersectionPoints","__absolutePos","__snappedWithShape","__snappedShapeGroup","setIntersectionsPoints","getSnappedWithShape","shapeGroup","setMinLengthToIntersectionPoints","__minLengthToIntersectionPoints","absolutePosition","movingLine","baseLineDistance","newFrom","newTo","pointDistance2","horizontalEastLineExpand","horizontalWestLineExpand","verticalSouthLineExpand","verticalNorthLineExpand","mathRound","pointOnTheLineFrom","pointOnTheLineTo","prevLineDirection","nextLineDirection","prevPrevLine","nextNextLine","prevPrevLineDirection","nextNextLineDirection","getMaxResizeWidth","rectangleWidth","RECTANGLE_WIDTH","rectangleHeight","RECTANGLE_HEIGHT","RECTANGLE_HEIGHT_METRIC","SHAPE_LABELS","updateShape","initLabel","firstShapeLine","setLabelText","thirdShapeLine","labelTextColor","isTitle","lineOffset","getFreeDrawPoint","pointState","getLockPointPos","getLockedPoint","existingPoint","lockedPosition","lockedPositionOnField","pointV2","angleStep","pointV2PointField","rotateToMouseAngle","closestAngle","LineCorner","additionalOutlineHoverWidth","isMouseOverAngle","isMouseOverCornerLine","getOutlineAngleLineField","getAngleLineField","cordCornerFrom","cordCornerTo","isLineCornerInner","pointIndent","pointOnTheBlueLine","pointOnTheBlueNextLine","cordCornerIndent","UiSelect","handleItemClick","selectItem","getSelectText","itemText","baseClass","data-index","WindowParent","otherParent","shower_tub_combo_is_active","bottom_tub","shower_floor_is_active","setShowerHandType","showerRod","robeHook","paperHolder","toiletBrush","towelTowelRing","towelTowelBar","towelTowelHook","EnclosureCommon","bathParent","relName","bathtubParent","bathTubBody","VanityCommon","counterTopSize","activeSideMeta","getActiveMatchingMetaFromRelatedItem","setShowLoader","loadAdditionalVisualizerGroups","additionalFeatures","qtCategoriesResponse","loadVisualizer","groupsResponse","LookSideBarShareButtons","outerWidth","screenX","screenLeft","outerHeight","screenY","screenTop","toolbar","status","directories","menubar","scrollbars","resizable","centerscreen","chrome","handleClose","autoFocusItem","data-id","shareClickButton","setLixilAuthorizationToken","useLixilCalendar","postSignInAuth","postAuthResponse","bathRemodel","lixilTermsText","globalState","textWithUpdatedButton","isSrBathing","addressIsNotSupported","appointmentTime","defaultTimeValue","featureIsExcluded","matchingName","getFilteredNavItems","afterCurrentSelectionWizardSteps","allWizardSteps","wizardGroupIndex","layoutThumbnails","globalShadowParent","Window","shower_interior_wall_accent_parts","shower_interior_wall_parts","left_shower_wall_type","partPredicate","bvStateKey","shower_type","shower_parts","shower_part_id","shower_accent_wall_part_id","accordingPart","showerFeature","availableParts","bathTub","bathtub_type","showerAccessoriesParent","SelectionMobileViewSwitchers","LookFeatureRemoveButton","isIcon","isList","alreadyDisabled","updateForOldUI","deleteButtonClick","featureLabel","startIcon","BacksplashSelect","handleBacksplashItemClick","maxClickCountReached","getBacksplashPart","useButtons","getBackplashTypes","renderButtons","topCabinetModuleSystem","bottomCabinetModuleSystem","getModuleCombinations","fridgeShadow","centerIslandshadow","ScheduleButton","scheduleButtonOnClick","getAnalyticsEvent","getSchedulingButton","stringNum","area2Codes","createDeliverySections","cartItemsList","deliveries","cartItemShippingCost","cartItemShippingName","cartItemShippingTime","cartItemShippingCode","existingDelivery","setCartItemsShipping","shippingOptions","shippingForItem","shippingObject","firstOption","shippingCode","area3Codes","getAreaCost","deliveryCost","materialsQuantity","totalQuantity","paymentState","setShowUnlockCalculations","showUnlockCalculations","setUnlockCalculationsStep","unlockCalculationsStep","showUnlockCalculationsCartItems","showCartItems","showUnlockCalculationsTotalItems","showTotalItems","setShowUnlockCalculationsTutorial","showUnlockCalculationsTutorial","setUnlockCalculationsTutorialStep","unlockCalculationsTutorialStep","setUnlockCalculationsTutorialFinished","LookIntroPopper","anchorRef","placement","toolTipText","roomIdeasButtonTranslate","anchorEl","transition","disablePortal","TransitionProps","transformOrigin","initialContext","pageRendered","selectedFieldIndex","ContractsContext","__tryAddToInstallation","__tryRemoveFromInstallations","__toggleInstallationServiceUsage","getInstallationCost","__installations","hourly","fabricatorFeature_id","fabricatorInstallation_id","hasChanges","ID","__getInstallations","inst","instGroup","installation","autoAddWithProduct","installationName","hideQuantity","instGroupIdx","serviceIdx","customerAdd","similarProductsWidth","mainBarWidth","handleHttpError","getResponse","shouldUseKvConfigDomain","HOST_NAME","checkApiError","__error__","ok","statusMessage","reason","isFormData","method","Headers","fixStringEncoding","forLeadForm","inputObject","getWizardFeatureAsync","nameToCompare","_self","cfg","clearHistory","getHistoryStore","restoreShapesFromHistory","setDataToQt","checkForChangesApplied","shapesChanged","historyShape","historyShapetoFind","getParsedSqftData","sqftPassedData","previouslyAddedSqftFeatures","sqftFeaturesObj","availablePartIdsKey","createSqftFeaturesObj","isFromCartFeatureAdded","featuresPassed","prepareCountertopFeaturesPassed","prepareSlabFeaturesPassed","prepareEdgesAndBacksplashesManual","prepareEdgesAndBacksplashes","prepareCrownMoldings","prepareHandles","prepareOtherCountertops","prepareRadius","prepareCorners","sections","prepareUnderlayment","featurePassed","getSimilarFeatureGroup","isSqftFromFeature","getQuantityFromCalculator","getFakePriceFromCalculator","getFeatureFromSQFT","featureToCheckUnit","quantityRounded","initialQuantity","isRecalculateSlabNeeded","recalculateSlabs","useStonePricing","useSlabImagePricing","parentList","firstOpen","splitPriceBetweenSlabsMaterial","setPriceIntoSingleFeature","commonSharedFeatureNames","getCommonSharedFeatureNames","sharedObject","biggestFeature","sortOrder","isBiggestFeature","isQuantityAddedToBiggestFeature","sortSqftFeatures","sortSharedObject","updateSharedObjectWithGroupQuantity","alreadyAdded","sharedName","quantityPerFeature","totalFeaturesInGroup","slabImagesGrouped","slabImagesGroup","centerIslandExist","manCountertopObject","sqftPassedDataCountertops","sqftPassedDataRadius","radiusObject","sqftPassedDataHandler","handlerObject","sqftPassedDataUnderlayment","passedData","sqftData","edgeLength","addedEdge","fakePrice","slabAlreadyInTheCart","slabImageAreaGroup","previouslyAddedSqftFeature","idToFind","slabParentFeatureGroup","getFeatureFromCalculatorPassedId","hasSamePartIdWithPreviouslyAddedFeature","foundNavItem","QtCategoryName","setAvailableFilterValues","isDrawFinished","addedPoints","dimensionToMouse","drawLineToMouse","outlineColor","drawType","useLockedPoints","currentNumericInput","clickedBackSplashButton","createDimensionToMouse","updateMeasurementToMousePosition","isLengthKeyCode","isBackspaceKeyCode","isDeleteKeyCode","createPointFromCurrentNumericInput","drawWall","lastPoint","isPointExist","segmentLength","newCordsAtDistance","drawStart","mPosOnField","lockedPointPos","lockPointOnField","isInited","isFitDistanceWithLastPoint","isMousePosFitDistanceWithLastPoint","wallPointLocked","getWallLockedPoint","wallPoint","getWallPoint","addLineDimensions","shouldResetPoints","addedPoint","dimension","preparedPoints","createWall","changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint","createShape","lockPointPos","intersectionPointOnField","postAuthData","jwtToken","withSignInRetryRequest","request","checkLixilPostalCode","serviceAvailable","NavigationItemsList","itemClickCount","reorderItems","checkPassed","getActiveFeatureName","uniquePartNamesArray","getSelectedWallIndexes","selectedFirstItemIndex","otherSelectedWallsIndexes","Map","uniquePartName","foundIndex","getLockedFeature","getActiveItemIndex","isActiveItemIndex","activeFeatureId","indexesToReplace","selectedExist","reOrderedFeatures","featuresToPlaceFirst","navItemToReplace","checkForSelectedAccessories","checkIfFeatureSelected","getNavItemsList","elements","reorderedFeatures","isPulsating","currentFeatureCartItemsCount","currentFeatureId","stoneFeature","customClassName","switchToFeatureInfo","largeThumbnail","getLoadingFeatures","onDesktopNavigationScroll","scrollWidth","getNewFeaturesOnScroll","onMobileNavigationScroll","finalScrollPosition","featureReceivingStarted","additionalFeaturesLoading","finishScrollRequest","shouldUpdateNavItems","needToUpdate","parentItemPassed","useNewWizardFeaturesRequestsLogic","additionalFeaturesOnScroll","CommonFeatureItemsMethods","scrollToRelatedFeatureId","featureInfo","setCommonStuff","nextCatName","neededCat","featureParentName","$scrollableDiv","scrollToArea","scrollToDiv","BodySwipable","getScrolllableElement","scrollableRef","scrollableSelector","handleOnMouseDown","swipeActive","scrollableElement","currentScrollLeft","handleOnMouseMove","handleOnMouseUp","LayoutNavigationItem","imageOnly","minHeight","ShareButton","clickShareAfterLogin","toggleShareList","shareListOpened","checkForLoggedIn","share","renderList","faceBookButtonClick","takeRight","getShareButtons","data-share","getShareList","createRef","shareButton","PingPilotButton","pingButton","pingButtonClick","WrappedComponent","usePingWidget","scriptAdded","dataSignal","shopPageLoaded","setShopPageOpened","setShopLastPageVisited","shopLastPageVisited","setShopPageLeaved","shopPageLeaved","CONTENT_TYPES","searchCustomer","newCustomer","contractSelect","PREFERRED_COMMUNICATION_METHODS","HOW_DID_YOU_HEAR_ABOUT_US_OPTIONS","animateButtonsJQ","$buttons","hideButtonsJQ","animateButtons","hideButtons","miteredSectionInterface","miteredSegmentInterface","waterfallSectionInterface","waterfallSection","waterfallSegmentInterface","waterfallSegment","changeValuePopupInterface","increaseCallback","decreaseCallback","inputChangeCallback","setIframeIntegrationRequest","savePostMessage","loginPostMessage","wishlistLines","savePostData","postMessageToParent","postMessageData","referrer","setIframeIntegrationResponse","iframeIntegrationState","iframeIntegrationRequest","iframeIntegrationResponse","iframeIntegrationRequestType","iframeIntegrationResponseSuccess","handleIFrameMessage","attachEvent","LookUserInput","userInputChange","userInputBlur","onInputBlur","useInputsValidation","required","InputLabelProps","helperText","setInputsValidated","DesktopHeader","toggleSubNav","subNavVisible","handleLogoClick","renderSubNav","nav","displayOrder","rel","showInstallations","addLaborCustomer","addLaborInstaller","logoStyles","initialFlowIsRunning","initialFlowEnabled","hideLogo","isShoppingCartPage","hideTopButtons","uploadsAndNotes","questionShown","DesktopHeaderWithRouter","LookFeatureOptions","lookActiveFeatureCustomName","lookActiveFeatureCollection","lookActiveFeatureMatchingFeature","lookActiveFeatureMountType","lookActiveFeatureMountHoles","lookActiveFeatureLixilSubCategory","navigationCount","setAvailableOptions","checkCollectionName","optionsButtonClick","storeActiveFeature","GroheFeatureOptions","wizardOptionClick","optionFeature","parentOptionClick","TERMINATING_ANIMATION_DURATION","ANIMATION_DURATION","PROGRESS_INCREASE","MAX_PROGRESS","UPDATE_TIME","_createClass","defineProperties","descriptor","Constructor","protoProps","staticProps","_react","_react2","_reactLifecyclesCompat","_propTypes","_reactRedux","_classCallCheck","TypeError","_possibleConstructorReturn","ReferenceError","_Component","_temp","_this","_len","args","_key","__proto__","getPrototypeOf","terminatingAnimationTimeoutId","newPercent","progressIncrease","simulateProgress","_ref2","maxProgress","subClass","superClass","setPrototypeOf","_inherits","prevProps","stop","progressIntervalId","updateTime","terminatingAnimationDuration","isShown","showFastActions","animationDuration","willChange","renderComponent","shouldStart","shouldStop","polyfill","ConnectedLoadingBar","loadingBar","getAddressFromObject","displayAddress","addressPart","PrintDocumentInfo","customerName","customerPhone","customerAddress","customerHasShippingAddress","threeColumns","main","sectionLeft","sectionTwo","mainTitle","mainText","mainTextEmail","sectionCenter","PrintDocumentBodyCartItem","isComplexMultipliedUsed","priceTotal","getFeatureQuantity","hideUnitPrice","displayFake","bundleProducts","wrap","cartItemWithThumbnail","cartItemThumbnail","cartItemThumbnailImage","uri","cartItemWithThumbnailBody","cartItemName","cartItemNameCentered","cartItemNameBig","hideSku","cartItemSkuFullWidth","wizardItemDescription","cartItemDescription","cartItemInfo","cartItemUnit","cartItemUnitItem","cartItemPrice","cartItemNote","cartItemUnitSKU","filterGroupInterface","visualType","filterValueInterface","navigationFilterValueInterface","Movable","_posX","_posY","_width","_height","isMouseOverArea","setHoveringWithChildren","p7","textarea","posOnField","cursorName","addedImages","renderCursor","alreadyAddedImage","addCursorImage","imgWidth","imgHeight","domImg","$img","ratio","mPos","navRadius","arcButtons","angleButtons","closeButton","cornerContainer","radiusContainer","measure","angleButton_onClick","handleButtonClick","arcButton_onClick","setImage","hoverPoint","hoverMiteredPoint","hoverSegmentCorner","TranslatesProvider","createRadiusElements","createCornerElements","textWidth","imageSrc","flagMargin","svgCache","setLine","editable","dString","midPointPointField","editState","editPoint","isInEditState","renderDimensionToMouseFromPoint","destroyPoints","setEditMode","setEditPoint","addPoint","disableEditingWall","destroyResource","isMouseOverWall","addedPointKey","lineFieldArray","wallLockedPoint","renderLines","drawLineFromPointV2ToMouse","renderLinesBetweenPoints","RenderFreeDraw","drawLines","nextPointField","drawLastLine","shouldUseLockedMode","drawLineFromPointV2ToMouseLocked","drawLineFromPointV2ToMouseFree","movablePoint","getWallByPoint","editWall","existingWallPoint","newWallPoint","__crownMoldingFeatureId","getShapeDepth","template","renderBorders","renderDimensionsInsideShape","renderHandles","renderDimensionsOutsideShape","renderTestShapeLines","renderShapeSnappedGroup","textHeight","mTextWidth","mTextHeight","lineHeight","movingShape","getCrownMoldingPoints","isHighlighted","timer","highliteBlinkTime","highliteBlinkTimeTotal","startHighlightingLoop","stopHighlightingLoop","subscr","existingDbFeature","relatedFeatureIds","relFeatureId","loadedDbFeature","coor","BackWall","skirting_board","shower_curb","bathtub_body","split_wall","towel_bar","towel_ring","shower_glass","grab_bar","robe_hook","window_body","toilet_brush","paper_holder","left_wall_splitter","left_wall_crop","right_wall_crop","front_wall_crop","shower_wall_mirror","back_wall","NonVisualizerSubPart","navigationNoMetaSubItems","homePageTitle","ToiletBody","neededFeatureGroupsToCheckOnShowerSizeChange","showerPanComboParent","newSizeCondition","newConditions","HARDCODED_DOMAIN","SqftJsonApi","sqftPost","TextBox","_posOnField","_placeholder","_design","addRect","addTextBox","modelText","txt","newState","alreadySelectedWizard","wizardWasRestored","skipStartStep","existingAllObject","existingValues","updatedValues","roomType","responseDefaults","noPresetsAtAll","presetIndex","fixEdgeMeta","metaObject","sinkMeta","mountWidthMeta","currentSinkMetaData","getCurrentSinkMetaData","conditionsWithoutSink","CountertopCommon","getFeatureEdgeFilter","getSameEdgesFeatures","currentEdgeMetaData","allEdgesCountertops","sameEdgeCountertops","countertopMetaDataValues","EdgeCommon","matchingByName","allCountertopFeatures","getEdgeFilterGroupFilters","_allEdgeFilters","allEdgeFilters","getMatchingCounterTopFeaturesBySplittedName","getEdgeFilterGroup","assignedEdgeFilter","metaDataMatchName","featurePart","forNavigation","PrintDocumentDisclaimer","withTotal","depositDisclaimer","enableDisclaimer","disclaimerMessage","getDisclaimerMessage","notification","notificationMargin","notificationImage","warningIcon","notificationText","TRANSLATES","getCustomJson","isEnglish","customJsonResponse","translations","setTranslations","renderLanguage","setRenderLanguage","prevLanguage","prevWasCreatedFromFabricator","parseTranslatesResponse","trans","translatesArray","translatesArrayIndex","translateValue","translateValueIndex","getCustomTranslates","transDoc","localeString","loadTranslates","responseMain","customTranslates","responseLowes","jsonFile","responseCaes","columnName","responseSqft","transSqft","defaultLocale","Shadow","wallExR","wallA","wallB","wallC","navSubItems","BodyPanel","renderAllWallsCheckbox","showWizardGroupsSelection","activeNavPart","showNavigationFilters","canUseNavigationFilter","canUseNavigationFilterSteps","activeFeatureEdgeFilter","edgeFilters","activeEdgeFilter","activeEdgeFilter2","currentFeatureFilters","matchingEdgeFeature","countertopFeatures","edgeFilterValue","edgeFilterId","currentEdgeFilterId","waterFallFilter","matchingCounterTop","NavigationFilters","setToStateFilterValues","setParentFilterValues","getFilterGroupNameByButtonId","colorFilterName","selectedColorFilter","filterG","selectedColorValue","reorderedFilterValues","reorderFilterItems","activeA","filterValueIsActive","activeB","getFeatureBodyItemThumbnail","modulePartJoined","inlayTypeObject","inlayTypes","mJoined","defaultInlayType","removeNavigationFiltersAndSetCommonView","handleFilterValueClick","neededInlayTypesObject","inlayTypeObj","existingMJoinedIndex","selectedF","activeFeatureNameSplitted","featureNameSplitted","getMatchingFeaturesBySplittedName","getFilterFeatureItem","renderMobileFiltersList","renderLoadingList","filterValueIndex","renderFiltersList","innerElements","resetFilters","countertopMaterialOrColor","counterTopWizard","FeatureWizard","updateStepValues","reload","setStepValues","getFilteredFeatures","getLockedPropertyValueObjectById","stepId","filterToFind","selectionAvailable","activeItemIsSelected","checkStepForHidden","doorStyleValueId","doorStyleValue","setLockedView","currentGroupValue","getCurrentFilterObject","selectedFilterObject","availableStep","defaultSteps","showMobileGroups","wizardValueObject","allFiltersObject","getFilterValue","currentStepFilterName","resetStepValues","setHiddenStateToStep","sizeStep","doorStyleStep","existingIdeallyFeature","doorStyleMatch","sizeMatch","sizeValue","patternStep","patternGroup","patternGroupSlabValue","smoothFilterObject","tryToClickOnMatchingFiltersItem","withoutDoorStyle","wizardIsFinished","getPlaceholdersFeatures","arrayOfSelectedKeys","foundFeaturesFromFilters","arrayOfCurrentKeys","onItemClickDisabled","askQuestion","filterValueClicked","itemIsSelected","currentFilter","hasValues","sizeIds","doNotPush","interiorShowerWallWizard","ContextMenu","contextMenuButtons","setShowerBodySelectionButtons","currentShowerSize","intlTranslate","bgImageText","isPony","clickedItemIndex","setWallBButtons","wallPart","zIndexToFind","clickedItem","vanityFaucet","getItemsToRender","hoveredParent","itemsToRender","menuButton","subNav","removeNotUsedTubItemsFromContextMenu","itemToRender","activeTub","keepThisItem","handleSubNavClick","showerTubComboSubParts","activeTubMenuItems","handleContextMenuHover","hoveredButton","hoveredZindex","setContextMenuButtons","getShowerRelatedItems","contextMenuStyles","onMouseOver","HomeMenu","handleBack","handleMobileBlur","backButtonClick","SaveButton","saving","handleSaveQuote","saveQuoteSubmit","Tutorial","stateProperty","highlightElement","globalShadow","countertopGroupParent","relatedName","matchingParts","featuresPart","moduleSystem","top_cabinet_parts","bottom_cabinet_parts","crown_molding_parts","countertop_parts","top_module_system","inlay_types","bottom_module_system","allSubParts","newSubPart","cPart","countertopSubParts","changedSubParts","getChangedSubPart","ContextMenuSimple","availablePartIds","getBackSplashButtons","setBacksplashButtons","backSplashButtons","currentLayoutName","CabinetContextMenu","resetModule","arrayNumber","setCabinetModule","moduleSplitted","modulePart","moduleSystemPart","oldIndex","getSliceButtons","getResetButton","getExitButton","openNavigationMenu","getCabinetConfigurationButtons","cabinetConfigurationButtons","availableModuleCombinations","getContextMenuButtons","sliceButtons","firstSliceIsActve","contextButton","contextButtonIndex","getShowerBodySelectionButtons","desItem","ContextMenuQKB","setStyles","setButtons","maxAllowedWidth","maxAllowedHeight","negativeMargin","getContextMenuPosition","contextStyles","modifiers","altAxis","altBoundary","tether","rootBoundary","padding","onClickAway","actionCartItems","stateCartItems","stateCartItem","sameCartItemIndex","checkForAddToCartFeaturesWithDisplayLogic","checkHardcodedRulesItems","oldItem","cartItemToDeleteIndex","isRecalculateSlabsInCartNeeded","recalculateSlabsInCart","isSlabsStillExistInCart","removeFakePriceFromCartItems","cI","activeApplyPopupItem","existingCartItemIndex","newCi","checkoutPopupVisible","depositVisible","depositCallback","cItemsAddedToParentCart","manualTaxEntered","supportedCountries","zipCodeRg","supportedCountriesList","displayLogicCartItem","allowMinimumChargeConditions","countertopItems","accumulator","MINIMUM_SQFT","MINIMUM_SQFT_2","theMostValuableCartItem","currentMostFeatureCost","checkLowesHardcodedRulesItems","uniqueSharedNames","uniqueSharedName","matchingItems","checkCaesHardcodedRulesItems","similarFeatures","isSameNameFeature","Quantity","minValue","handleOnKeyDown","allowDecimals","handleChangeValue","getColor","squared","htmlFor","readOnly","loginButtonCommonClick","updateInputValidations","loginResponse","saveQuoteAfterSignIn","savedSuccess","registerButtonCommonClick","registeredResponse","remindPasswordCommonClick","fullStore","getUpdatedUserInfoFromTheResponse","responseCustomer","tryToSetUserFromUrl","LookDropdown","selectedItem","selectItemClick","selectLabel","maxItems","changeErrorsObject","textOnly","setOpened","selectElement","checkForError","selectItemHeight","preText","endIcon","selectItemIndex","isSelected","handleSelectItemClick","LookFeatureSku","withoutCheckout","sendFeatures","lookImage","LookListFeature","fromDesignRecommended","isAllWallsTutorialItem","featureElement","noFeatureSection","showMatchRadio","positionInList","finished","showAllWalls","viewTypeFour","isLockedAndViewTypeFour","Consumer","compatabilityLogic","listFeatureClick","ShoppingCart","getRecentlyViewedItems","recentItem","recentItemId","getFinalButton","intlText","handleCheckOut","showBackToDashboard","leadCaptureOnQuote","handleSaveClick","handleStartOverClick","assignButtonsToShow","getFieldValue","getFirstUnfilledCustomField","contractsContext","signIsRequired","showReceiptInContract","customFieldInfo","fieldsNeeded","isEditable","isCheckBox","pageRect","ury","fieldIndexOnPage","getFieldNameWithoutRequired","getFieldCoords","contractFields","fieldsCoords","isCustom","fieldCoords","idx","getAlreadyFilledSignatureField","fieldName","signatureValue","withoutRequiredSignatureName","isSignature","getLookRowHeight","LookVirtualizedList","contentHeight","onScrollHandler","loadingCount","columnCount","listSettings","columnWidth","rowCount","rowHeight","overscanRowCount","showScrollingPlaceholder","useDynamicRowHeight","cellRenderer","columnIndex","rowIndex","noRowsRenderer","GroheFeatureQuantity","hideTitle","MIN","updateQuantity","quan","fromButton","analyticsAdjust","pattern","moreInfoType","GroheCartBackButton","BathroomVisualizer","setSubscribers","baseResponse","setVisualizerInfo","showTutorial","PrintDocument","Provider","pageAS","object-fit","pageNumber","fixed","showWizardStepDoneCheckMark","wizardSelectedValue","stepGroup","prepareData","prepareCountertopRows","prepareBacksplashRows","prepareEdgeRows","dataCountertops","preparedData","dataCountertop","dataBacksplashes","dataBacksplash","dataEdges","dataEdge","clearManualCalcData","manualCalculationRowType","getGroupedShapesByColor","getFeatureGlb","zoomToLine","shapePos","sqftPoup","popUpWidth","newWorkspacePos","zoomTo","isHalfScreen","shapeMinMax","zoomToInSlab","isXIncrementUp","isYIncrementUp","refreshIntervalId","incrementX","incrementY","UnderlaymentController","changeMaterialToColorArray","getHardCodedFilterGroupName","weShouldHideFilterGroup","weShouldHideFilterValue","selectedFiltersLength","getFixedFilterValueName","DEFAULT_COUNTERTOP_HEIGHT","DEFAULT_BACKSPLASH_HEIGHT","cabinetPositions","prepareCabinetsPositions","countertopPositions","CountertopPositions","prepareCountertopPositions","wallPositions","WallPositions","prepareWallPositions","shapePosition","prepareRegularCabinetSet","prepareImageCabinetSet","shapeDepth","radians","centerZ","offsetX","offsetZ","zCorrection","z","getShapeCorrectedPos","thetaRad","xInit","yInit","targetWidth","targetDepth","originPointOnWorkspace","material_url","CabinetsHelper","getCabinetPosY","threeDPos","getHandles","applianceRotatedDegrees","appliancePosition","adjustApplianceModelPosition","partIdsCoveredByCountertop","textureUrl","URLByFeatureName","getCountertopTexture","groupShapes","lastHeight","isDishwasher","prepareCountertopForGroup","posA","posB","countertopCabinets","countertopCabinet","countertopCabinetHeight","overhang","currentShapeHeight","upperCabinetHighestCabinetValue","getHighestCabinetValue","tallCabinetHighestCabinetValue","handle3dURL","similarity","longer","shorter","longerLength","costs","lastValue","editDistance","arrayToSearch","highestMatchCount","phraseBySimilarity","searchWords","urlWords","matchCount","urls","versionedUrls","versionMatch","isSqftPassedDataEmpty","FiltersBody","isFilterSelected","isFilterExpanded","handleExpandFilter","handleSelectFilter","handleGroupClick","handleReset","renderFiltersBody","availableOtherFilterGroups","renderGenericFilters","checkFilterGroupForAvailableFilterValues","renderBrand","renderColor","filterList","groupsFirst","filterOptions","name2","onChecked","brandFilterGroup","filterButtons","buttonText","filterNameLowerCased","buttonEnabled","CheckBox","KitchenVisualizer","kvGroupsResponse","KvSceneVisualizer","BvSceneVisualizer","LookVisualizer","decorAndAttachmentResponses","userDataResponse","FireplaceVisualizer","LaundryRoomLayout","slatWall","slatWallType","ProjectScopeFunctions","goToMaterialsPageCommon","parentSimple","getBathroomHomeSections","vanityItems","showerAndBathTubItems","otherItems","bathTubFixture","disableOnHomeSections","getKitchenHomeSections","getSections","sqftVisited","visited","closeSQFTCalc","useCloseSQFTCalc","handleAddToQuoteClick","stayOnSqft","isLocationNotUsesPopup","setEdgesQuantity","setRadiusQuantity","setBacksplashesQuantity","setCountertopsQuantity","saveSQFTHistory","edgesIdsObject","edgeId","setSubPartQuantity","radiusCount","angles","countertopSquareFeet","centerIslandCountertopSquareFeet","countertopIsAdded","countertopIsAddedToQtCategory","centerIslandCountertopIsAdded","updateCurrentFeature","setFeatureGroupSqftQuantity","setSqftQuantityToSubPartFinal","sqftQuantity","handleResizeClick","handleSpacerClick","handleRotateClick","handleWallClick","handleDuplicateClick","handleAngleClick","handleTextClick","handleResetClick","handleMiteredClick","handleUnderlaymentClick","SQFTFeaturesHeader","isFiltersOpened","protoTypes","featureTitleId","rgx","TextInput","inputElement","editing","getUpdatedValue","finishEditing","handleKeyDown","autoComplete","LookListMainFeature","withShipping","bundleExpanded","setBundleExpanded","outOfStock","expandBundleButton","isBundle","inStock","isBundleParent","HomeButton","MobileMenu","bvDataPart","showSubNav","getMenuItems","smallButton","smallButtonClassName","FeatureInfoPrice","mainFeaturePrice","showDiscount","unitAfter","accItemQuantity","salePercentage","priceOld","getListItemHeight","itemsList","widthPercentage","shouldReplaceSelectionInfoFeature","featureG","SelectionGridItem","goToFeatureInfo","wizardSkipAndAddToCartButtonVisible","quoteOrUnlockButtonVisible","isAddToCartButtonVisible","infoButtonVisible","handleFeatureClick","shiftFilterTitleInterface","shiftTitleIndex","elementIndex","positionTop","columnPosition","HardcodedCanvasImage","setStaticCanvasImage","currentQtCat","onLoadStart","retryConnectionClick","clipPath","LookFeaturePairPrice","GroheFeatureSQFTButton","featureOpened","handleSQFTButtonClick","shopState","GroheFeatureSoldOut","setGroheWizardOpened","wizardOpened","setGroheWizardName","wizardName","setGroheWizardStep","LookMainCategory","lookViewTypeWasChanged","navItemsLists","setNavItemsLists","firstOpenedFeature","setFirstOpenedFeature","firstOpenedConditions","setFirstOpenedConditions","shouldRunAnalytics","setShouldRunAnalytics","prevActiveCategory","setReceivedFeatures","clickedOnItem","navItemIndex","currentPositionInList","nItemsLists","firstLockedIndex","firstUnlockedIndex","withGrid","reqFeatures","desRecNavItemList","navItemList","regularNavItemList","notMatchingNavItemList","scrollObject","onEventScrollHandler","LookFeatureRevertButton","revertButtonClick","zoomToFeatureGroup","LookWizardContentButtons","onSkipClick","previousClick","nextClick","skipEnabled","isCompletedStep","nextDisabled","reducers","combineReducers","docuSignState","groheQuotingToolState","historyState","sqftTutorialState","updateFeatureCount","overflow","route","isTouch","javascriptErrors","handleToggleUserPopup","urlLanguage","urlTheme","bvData","newQuoteData","groupedFeatures","groupedFeaturesDescriptions","introVideoStarted","introVideoFinished","initialRoute","imgUrl","d3_geom_contourDx","NaN","d3_geom_contourDy","grid","d3_geom_contourStart","pdx","pdy","_slicedToArray","arr","iterator","_arr","_n","_d","_e","_s","_i","sliceIterator","promiseTypeSuffixes","defaultTypeSuffixes","_promiseTypeSuffixes","PENDING","FULFILLED","REJECTED","isPending","isFulfilled","isRejected","actionScope","meta","lightBlue","bold","getStyles","Font","family","StyleSheet","paddingTop","paddingBottom","paddingHorizontal","header","marginBottom","flexDirection","alignItems","justifyContent","headerInfo","headerLogo","flex","headerLogoAS","paddingLeft","paddingRight","headerLogoImage","alignSelf","objectFit","headerText","headerTextBold","specSheet","headerTextASSheet","headerTextASInfo","headerTextValue","sectionRight","borderBottomWidth","borderBottomColor","borderLeftColor","borderLeftWidth","borderLeftStyle","roomTitle","textTransform","roomBody","subPartTitle","marginRight","marginLeft","borderWidth","borderColor","borderRadius","flexBasis","flexGrow","flexShrink","borderStyle","cartItemSimilar","cartItemSimilarTitle","cartItemSimilarTitleBundled","cartItemBundled","cartItemSimilarTitlePadding","cartItemSimilarContent","cartItemSimilarContentCell","cartItemSimilarItem","borderBottomStyle","cartItemSimilarItemNoBorder","cartItemSimilarItemBlock","cartItemSimilarItemName","cartItemSimilarItemLabel","cartItemSimilarItemPrice","cartItemSimilarItemExample","roomTotal","marginVertical","roomTotalSecond","roomTotalText","roomTotalAmount","footer","footerLeft","marginHorizontal","totalSectionFirst","totalSection","totalSectionText","totalSectionAmount","totalSectionFinal","totalSectionAmountFinal","bottom","signature","signatureText","borderTopWidth","borderTopColor","borderTopStyle","signatureImage","width100","flexRow","flexColumn","flexCenter","marginT5","marginT8","marginT10","marginT16","marginT20","marginT30","marginT40","marginB5","marginB8","marginB10","marginB16","marginB20","marginB30","marginB40","marginL10","marginL20","marginR10","marginR20","discountDeposit","discountPercent","financeCell","financeCellMonths","financeCellText","PrintDocumentHeader","logoView","jobInfoView","toLocaleDateString","toLocaleTimeString","PrintDocumentInfoFabricator","mainAddress","addresses","adr","addressType","ADDRESSES_TYPES","Shipping","provence","contactEmail","emails","emailIndex","Billing","PrintDocumentBody","getGroupName","fixedPrice","uniqueCartItemIds","showWizardSteps","differentCurrencyObjects","currentCartItems","slabsCartItems","mainCartItems","subPartIndex","currObject","currentTotal","PrintDocumentBodyBundledCartItems","bundleCartItem","PrintSimilarProducts","insideQuote","featureCollectionIndex","lastItem","PrintSimilarProductsListItem","interceptors","use","toJSON","apiResponseError","apiGet","apiPost","sqftCursorManager","currentCursor","noCursorStealing","prefix","setPoint","cornerMargin","radiusLetter","dstring","Fraction","mtext","tLen","SpacersController","isNotCreatedSpacerExist","getIsCreated","Spacer","isCreated","createShapeFromSpacerPoints","getPointsToTheMouse","point3PointField","point4PointField","topLeftPoint","adjustedShapePoints","sortedPoints","newShapePosition","spacerShapeId","spacerShape","setCreated","renderLinesToMouse","betweenPoint1","betweenPoint2","distanceFromMouseToTheLine","pointLeftRightPosition","parallelPoints","ModelCorePoint","_x","_y","_mixins","setOuterShape","renderMeasurementsInsideShape","outerShape","renderSVG","RenderMeasurementsInsideShape","updateLinePoints","imageCenterPosOnField","imageCenterPosOnShape","imagePosOnField","imagePosOnShape","sideImagePoints","getImageSidePoints","lineStartVerticalOnImage","lineEndVerticalOnImage","sideShapePoints","getShapeSidePoints","lineStartVertical","lineEndVertical","renderLineToBorder","renderArrowLineToCenter","intersectionsWithShape","sideShapePoint","intersectionsWithImage","sideImagePoint","imageLine","closestPointPairs","entries","closestPointPair","startPointField","endPointField","betweenPointFrom","betweenPointTo","imageCenterPosOnShapePointField","lineStartHorizontal","lineEndHorizontal","lineStartHorizontalOnImage","lineEndHorizontalOnImage","intersectionXPointAndLine1WithImage","intersectionXPointAndLine2WithImage","intersectionXPoint1","intersectionXPoint2","intersectionXPoint1PointField","intersectionXPoint2PointField","measurement1Distance","measurement2Distance","measurement2BetweenPointTo","measurement2BetweenPointFrom","imageCenter","imgOffset","renderHovering","containerSize","getContainSize","drawBorder","aspectRatio","renderAttachedTo","MiteredSegment","_length","parentShape","attachedToLineResource","getBacksplashesPos","getSegmentById","getBumpoutPointCords","posOnFiled","getShapePosAndPoints","underlaymentPoints","getWaterfallPoints","addMiteredEdgesToWaterfallShape","miteredEdge","waterfallShapes","edgeParams","miteredEdgeDistance","SlabAdditionalShape","getShapeAdditionalShapes","findOneByBacksplashShapeId","activeBacksplash","disallowDemo","hoveredLineCorner","featureNameTranslated","StaticImage","beforeRenderCallback","getHoverArray","SQFTShapeOffset","animationPoints","offsetPoints","calculateOutlineV2","parentPoints","setLineDash","calculateOffsetPoints","offsetDistance","dir1","dir2","norm1","norm2","avgNorm","unitNorm","originalShapePoints","newShapePoints","getTime","elapsed","interpolatedShape","pointNew","pointOriginal","outlinePoints","nx","ny","listeners","eventName","LineImage","updatePosInsideShape","lineLengthText","prevValue","angleInRadians","posXDiff","posYDiff","currentSize","newImageWidth","newImageHeight","testNewImageValue","parallelLine","getParallelLine","updatePrentSize","SimpleLine","initLineLength","setLineLengthFromNumberValue","isMouseOverLineV2","lineBordersArray","lineHoveredArea","isMouseOverLine","moveLineWithMouse","imageState","pointFieldFrom","pointFieldTo","ShapeRotatable","initCornerBorderPoints","hideShapePoints","__cornerPoints","rotateToPointAngle","shapeCenterOnField","movablePointOnField","shapeZeroAnglePoint","rotateToAngleIn360","rotateToAngleWithoutHoveredPointAngle","normalizedRotateToDegreesValue","getCornerPoint","displayValueInPopup","getCornerPoints","getCornerPointsPointField","cornerPointsPointField","renderFramePoints","cornerPoint","HandlesController","addHandleToTheShape","findGLBModel","suffix","glbModels","modelWithSuffix","LineHandlesModel","lineId","handleId","WallsController","searchPoint","ShapeColorsController","defaultColorSets","getShapeColorByFeatureId","createShapeColor","g","getResourceById","baseColor","generateRandomRGB","shapeColorModel","ShapeColorModel","WaterfallController","addWaterfallToStore","waterFallOverlay","waterfallOverlaySegment","changeWaterfallSectionInStore","waterfallSectionData","segmentController","WaterfallOverlay","createPeninsulaUnderwrapSections","createWaterfallSections","getEnabledSegments","addSegment","segmentData","waterfallLength","underlaymentLength","isLineInWesternHemisphere","defaultCabinetReturnLength","defaultOverhangReturnLength","cabinetReturnLength","overhangReturnLength","parentSection","COMMON_HEIGHT","USE_DEPTH_INSTEAD_OF_HEIGHT","USE_LINE_LENGTH","overlayId","setIsDisabled","WaterfallSegmentController","parentController","changeSegmentLength","segmentId","postChangeValue","changeSegmentHeight","updatedSegment","changeSegmentThickness","changeSegmentIsDisabled","RemovedFeaturesController","SnappedShapeGroupsController","addNewSnappedShapeGroupNumber","newNumber","snappedShape","snappedWithShapeGroup","groupNumber","shouldUpdateAbsolutePos","aPos","bPos","visitedShapes","Set","resetShapesSnappedGroups","has","updateGroupForShapeAndConnected","connectedShapes","connectedShape","snapPossibilitiesToWalls","distancesToWalls","getDistancesToWalls","itemBoundsWithSamePartId","getItemBoundsForTheSamePartIdIfExist","absolutePosToWalls","snappedShapeIds","snappedShapeFromAllPossibilities","snapPossibility","SelectedShapesController","clearSelection","removeAllResources","Images3dController","isFitLineLength","isFitSiblingLineCorner","isFitBumpout","isFitPontDistancesToCornerLine","isFitByAngleBetweenLines","isFit","getBumpoutTextParameter","length4to","minDistanceNeeded","prevLineLength","isEditInputDisplayed","hoveredColor","originalLineText","lineTextResized","lineText","lineType","offsetFromLineEnd","getLine","getHoveredArea","rotatedPoint1","rotatedPoint2","pointToRotate3","rotatedPoint3","pointToRotate4","rotatedPoint4","getLineDistanceFull","roundedDiff","getAdditionalLineDistance","getCtxColor","getMidpoint","getLineLengthText","getLineDistanceFullInPixels","lineLengthInPx","additionalLineDistance","additionalDistance","orientationValue","space","medgeText","fromPosOnField","marginTotal","renderHoveredArea","hoveredArea","getFrameBorderPosition","minBumpoutSize","bumpoutTextParameters","lengthFrom1","length14","length34","bumpoutLines","flipPoints","biggestPoint","smallestPoint","stopPoint","move23Point","parentLine","lengthMidPoint","createBumpoutLines","bumpoutPointsCords","importPoints","bumpoutFeature","isFeatureExist","bumpoutData","bumpoutPoint","getBumpoutLength","bumpoutDistance","lineLengthInches","lineLengthMm","bumpoutLength","resizeBumpoutPart","vectorAB","vectorADrag","crossProdZ","drawBumpoutRect","renderMeasurements","bumpoutXOffset","bumpoutYOffset","pointDistance34","renderHorizontalText","renderRotatedText","bumpoutTextParameter","textToRender","pointArea","isMouseOverRect","textOrientation","inputPosition","inputClass","scaledValue","Color","LineAttachmentsComposite","component","execute","angleValue","tempLinePointFrom","tempLinePointTo","getRotationCentrePointByBottomLine","ShapeSlab","__seamTool","renderSeamLinesOnHover","renderSeamCutPoints","seamToolRender","renderSeamVerticalIntersection","renderSeamHorizontalIntersection","seamCutPointOnField","startPointOnField","endPointOnField","__measurementArrows","_shape","absoluteLinePoint1Pos","linesWithoutAnglePoints","seamShapesPoints","splitShape","createShapesFromSeamPointsAndSetSlabRotation","parentShapeCenter","seamPoints","isBacksplashPiece","preparePointCords","rotatedDiffPos","parentSlabAdditionalShape","newSlabAdditionalShape","setSlabPos","shapePieceCenterPointBeforeRotation","reqRotatedDegreesToZero","shapePieceCenterPointAfterRotation","coreShapeAbsolutePosition","slabAbsolutePosition","setParentId","seamPoint","splitOnlyOrientation","piece1Points","piece2Points","intersectionNumber","filterEqualAndPointsOnTheSameLine","isEqual","isOnTheSameLine","ip","seamTool","__measurement1","__measurement2","absoluteLinePoint2Pos","distancesToLines","getDistancesToPoint","snappingPossibilitiesToLines","getSnappingPossibilitiesToLines","renderSeamDashedLine","horizontalLinePoint1","horizontalLinePoint2","renderSeamArrowLine","intersection1","intersection2","intersectionYPoint1","intersectionYPoint2","intersectionYPoint1PointField","intersectionYPoint2PointField","mousePosOnShapePointField","measurement1Midpoint","measurement2Midpoint","measurement1Pos","measurement2Pos","removeOverlappedWithShape","overlappedId","restoreShapePosition","memory","shapeSlabAbsolutePos","shapeAbsolutePos","ShapeRender","renderRegularShape","shapeDesign","hoverLine","shapeState","VanityHandle","toggleVanityParts","VanityCabinet","canUseWizard","toggleLayerPositions","updateSink","updateVanityParts","getfilterValueIdByValue","placeholderAvailableFeatures","Other","windowNeededLayouts","BathTubLiner","navigationSubItemsWithSides","setShowerSize","WalkInTubFixture","ReplacementTubFixture","layerPriority","ShowerScreen","FrontWall","SplitWall","LeftWallSplitter","ShowerGlass","ShowerBody","loadedShowerBody","loadShowerDimensions","loadShowerMetaData","loadThumbnail","bathTubBase","availableFeatures","showerPanCondition","showerBodyParent","showerBodyThatFits","showerSizeValues2","condValue2","shBody","showerBodyToSet","comboParent","clickedPosition","nameSplitted","nameSplitted2","size2","CornerShelf","showerPodParent","windowParent","ToiletBrush","toiletParent","RobeHook","TowelRing","GlassHolder","TowelRack","Wainscoting","TowelTowelRing","towelRing","TowelTowelBar","TowelTowelHook","hardcodedSkus","finalNavItems","forMeta","leftNavItems","existingNavItem","setAdditionalMetaData","setDefaultAccordingToPreviousSelect","rememberPreviousSelection","compatible","ShowerFloor","thresholdAvailableFeatures","currentFloorName","sameThreshold","showerDoorParent","currentShowerPanCondition","showerFloorAvailableFeatures","currentThresholdName","sameShowerFloor","navItemFloor","setArmHeadType","ShowerArm","ShowerHeadBundle","TubSpout","HandShowerKit","ShowerCurb","BodySpray","DiverterTrim","HandShowerHolder","HandShowerOnly","ShowerHose","ShowerSystem","ShowerTrimKit","ValveTrim","WallUnion","removeInterferingParts","cornerShelf","FloorBody","compareMountPosition","dbFeatureLoading","checkForExistingDecor","currentDecorFeatureGroup","decorName","toiletPaper","decor1","showerWallMirror","lamp","mirrors","decorCount","Attachment","currentConditions","selectFrom","attFeature","alreadyAddedFeature","Decor","needShowerSizeMeta","ShowerWallMirror","enclosureTop","enclosureBottom","skirtingBoard","EnclosureTop","EnclosureBottom","SkirtingBoard","table","chair","carpet","basket","frame","plant","Table","Chair","Carpet","Lamp","Basket","Frame","Plant","VanityCountertop","activeMatchingSink","activeMatchingSinkSku","getActiveSkuFromRelatedItem","shownFeature","sinkFeatures","MountType","alreadyExistingIndex","shouldCheckSize","currentActiveMatchingFeatureSku","currentActiveMatchingFeatureMeta","sinkSku","currentMatchingMatchingFeature","currentMatchingMatchingSku","setVanityOnly","getNextVanityTypeFeature","setActiveFeatureByFilter","singleHoleMeta","activeMatchingVanity","activeMatchingFeatures","VanityFaucet","sinkActiveFeature","getMatchingSinks","matchingByCabinetType","withCurrentVanityType","sameCollectionName","sameCustomName","fromWhereToPick","featureToCLick","concettoTMIndex","sinkCollectionName","sinkCustomFullDisplayName","mountHolesMeta","sinkType","mountLevel","waterLevel","Ptrap","VanityWashstand","VanityMiddle","DrawerPull","WSTowelBar","VanityLegs","VanityConsole","DoorHandle","DrawerHandle","ShapeAutoShuffle","shapeToShift","shapeToShiftMeasurementPoints","hoveredLineDirection","hoveredLinePointFromPosOnWorkspace","shapesToShift","shapeCurrentPos","shapeNewPos","isHorizontal","isVertical","angleDifference","originalWidth","originalHeight","upperLeftX","upperLeftY","referencePosition","resultShapes","shapeTopLeftPoint","hoveredShape","calculateNewPosition","moveShapeToPositionAndRotate","getShapesToShift","calculatePositionDiffForOtherShapes","moveShapesToPositions","hoveredLinesShapes","lowestRightmostPoint","snappedShapesWithoutMovingShape","findShapesRightAndBelow","getUrlBase","fetchDataWithCancellation","shouldSaveDataInStore","cancelFetch","requests","Box","_mixin","initPoints","deleteEvents","removeBox","pointsParams","IText","_fontHeight","_hMargin","wMargin","fillStyleGray","fillStyleTransparent","parentWidth","parentHeight","createTextArea","fontFace","wrapWords","fillText","hMargin","textBaseline","spaces","currentLine","words","_modelText","ModelText","_txt","_font","_angle","isNumericKey","isCommaKey","isPeriodKey","isSpace","isSlash","newId","currentShapePosition","cloneShapeLines","cloneShapeLine","currentMovableImagePosition","getText","posText","adjustedSize","rulerSize","ResultImages","dimensionsMultiplier","clippingWidth","clippingHeight","getCanvasScreen","updateCanvasAtStartPoint","shouldReturnToRegularMode","shapesWithoutSlabImages","pointsMinMaxRegular","resultImage","updateCanvasSlab","applianceImages","createdImagesForShapes","applianceImage","outerShapePosition","newScale","startClippingX","startClippingY","updateCallback","srcCanvas","destinationCanvas","destCtx","currentCategory","createShapesFromCabinetSet","positions","cabinetData","TextBoxManager","_textBoxes","getHoveredTextBox","textBox","boxes","FeatureObjectDTO","arrayIds","MARK_UP_APPLY_TO_TYPES","retailPrice","retailPriceAndCost","MARK_UP_PROPS_MATCH","Retail","Cost","Discount","getUpdatedFeaturePriceFromMarkItem","dbFeatureIdString","setFeaturePriceFromMarkItem","markUpListItem","isCaes","priceType","PriceType","Value","setFeaturePriceFromMarkItemQKB","markUpItem","originalValues","markUpObject","fv","pvif","pmt","part2","fridgeConditions","getFridgeWidthAndHeightConditions","widthAndHeightArray","widthHeightConditions","currentHoodWidth","currentHoodNavItems","sameWidth","Oven","Stove","hideLayer","FridgeEnclosure","getFridgeEnclosureSplittedFeatureName","_fridgeEnclosureSplittedFeatureName","FridgeEnclosureHandle","hoodIsVisible","microwaveIsVisible","fridgeIsVisible","TallCabinet","withStoveConditions","withDishWasherConditions","withFridgeConditions","relatedFaucet","mountTypeMeta","EdgeProfile","Cutouts","Radius","currentTopCabinetColor","cabinetFeatures","cabinetFeature","rangeIsActive","PrintDocumentBodyWizardItem","baseInfo","withThumbnail","PrintDocumentTotal","allTaxes","showTaxes","roundedPrice","discountsTotalAmount","currObjectIndex","currencySubTotal","taxObject","taxObjectIndex","taxTotal","taxName","PrintDocumentSignature","formattedDate","toLocaleString","hour","minute","doNotFillNameAndDate","isSignField","hideSignatureField","PrintDocumentDiscountsList","discountSectionIndex","displayDiscounts","discountIndex","PrintDocumentDiscount","PrintDocumentDiscountFinance","financeSection","parsedOptions","propertyIndex","cellStyles","selectedDiscount","getJobRecords","selectedFeatures","lixilCampaignInfo","appointment_date_stc","slotStartTime","appointment_time_stc","lixilData","receiveSmsCheckbox","appForm","saveDataBeforeConverting","timeToPass","splittedTime","parsedUrl","parseUrl","getUserRegisterOrUpdateData","withNewBackgrounds","isBackgroundLayer","multipliers","putImageData","makeHoveringLayerOld","naturalHeight","nextSource","nextKey","triggerEvent","createEvent","initEvent","sanitizeValue","PinchZoom","elText","lastScale","coImage","containerScrolled","timerId","setupMarkup","bindEvents","update","isCloseTo","expected","interaction","zoomOutFactor","minZoom","lockDragAxis","use2d","dragPixelsBeforeClick","zoomStartEventName","zoomEndEventName","dragStartEventName","dragEndEventName","doubleTapEventName","handleDragStart","stopAnimation","lastDragPosition","hasInteraction","handleMove","getTouches","drag","sanitizeOffset","handleDragEnd","handleZoomStart","nthZoom","lastZoomCenter","handleZoom","touchCenter","getTouchCenter","handleZoomEnd","closeToOne","handleDoubleTap","startZoomFactor","updateProgress","scaleTo","getCurrentZoomCenter","swing","allowMoving","withFeatureScreen","zoomOutFromLeft","alreadyZoomed","startOffset","targetOffset","moveContainer","removeContainerScroll","withAnimation","setContainerTransform","moveGroheContainer","percentX","menuWidth","containerTransition","container","getContainerX","getContainerY","maxOffsetX","maxOffsetY","minOffsetX","minOffsetY","needToMoveContainer","scaleZoomFactor","addOffset","originalZoomFactor","lastCenter","getVectorAvg","vectors","sanitize","zoomOutAnimation","isInsaneOffset","sanitizeOffsetAnimation","sanitizedOffset","updateAspectRatio","setContainerY","getInitialZoomFactor","offsetRight","widthOffsetRatio","offsetBottom","heightOffsetRatio","canDrag","posTop","posLeft","framefn","timefn","inAnimation","animateNew","timeFraction","implementation","createHTMLDocument","innerHTML","insertBefore","webkitTransformOrigin","mozTransformOrigin","msTransformOrigin","oTransformOrigin","detectGestures","updateCheck","imgEl","nodeName","getCanvasTransform","targetZoomFactor","useNewScale","offsetY","transform3d","setCanvasTransform","updatePlaned","removeClone","offsetXForContainer","is3d","pointerEvents","WebkitTransition","MozTransition","firstMove","fingers","startTouches","setInteraction","newInteraction","updateInteraction","targetTouches","getDistance","cancelEvent","endTouches","startDistance","calculateScale","definePinchZoom","containerX","scrollTo","behavior","getLayerPartToRender","imageCanvasComponent","ShowerBodyIndexes","ShowerIndexes","missingBodyPart","layerHovering2","layersHoveringItem","missingZIndex","CabinetIndexes","CountertopGroupIndexes","missingZindex","missingZindex2","hoveredLayerIndex2","layerHovering3","hoveredLayerIndex3","needToCheck","layerHov","towelRack","bathtubRim","bathTubSpa","bathTubType_","bathTubParent","walkInTubType","possibleWalkInTubTypes","featurePartName","BathTubBase","sameStoneAsWalls","floorMount","placeTypeGroup","featurePlaceTypeValue","getFixtureType","BathTubRim","BathTubSpa","BathTubTowelRack","CompleteVanity","availableCompleteFeatures","vanityPedestal","handleMeta","hardCodedWizardConditions","VanityPedestal","counterTopsAvailable","LightingFixture","oldVanityType","colorFilter","secondFilter","mathesToCurrentVanity","featureHasFilters","itemA","itemB","tryToSetTheSameFeatureByFilters","setPlaceholderFeature","vanityFilters","matchingFilterFeature","currentNameSplitted","vanityFaucetFeature","sinkSize","getCurrentSinkSize","withSinkSize","isWindowCovering","isWindow","windowDefault","ceilingLight","CeilingBody","CeilingLight","LG","SM","activeShowerPartId","showerBodyActiveFeature","ShowerInteriorWall","wallFeatures","zIndex2","zIndex3","showerSize2","ShowerInteriorWallAccent","doorFeature","checkIfPlaceHolderFits","activeFeatureShowerPanCondition","setNewPlaceHolderFeature","compatibleValue","nameToFind","showerPanValues","showerDoorsThatFits","showerDoorFeature","showerPanValues2","showerSizePassed","showerPanPassed","condPanValue","condPanValue2","sameWallFeatures","showerDoorsThatFit","wallValue","dontFilterByDoorPanMeta","showerDoorType","showerDoorActiveFeature","currentShowerPanMetadata","previousFeature","currentColorArrayValue","colorGroup","existingPans","filteredFeature","filteredFeatureColor","col","filteredByPan","doorCondition","handleCondition","GlobalShadowBody","WallA","WallB","WallC","WallExR","WallExL","shadowSmallRoomName","showerValue","VanityAccent","DesktopNavigation","ponyWallGroup","openContextMenu","updateSideBarIds","sinkSizeConditionValue","tilePatternFilterGroup","acrylicPatternFilterGroup","tileID","acrID","showLockedView","onClickCapture","SidebarClass","getSideBarContent","dni","dniIndex","data-text","FiltersSearch","handleToggleSearch","searchVisible","searchInputNode","handleInputSearchFocus","KeyboardKey","RIGHT_PANEL","NORMAL","NUMERIC","NUMERIC_EXTENDED","PureComponent","BACKSPACE","NORMAL_3","NORMAL_5","NORMAL_2_5","BodyClass","showLoader","itemsDispatcher","level2ItemsNew","level1Items","currentPart","showNavigationFiltersSteps","BodyPanelCheckbox","BodyPanelWizardSteps","BodyPanelNavigationFiltersSteps","setNavigationWizardStep","wizardButtonIndex","countertopWizardPartIds","allowIcons","timeoutId","LookAllWallsRadioButtonSmall","showTooltip","setShowTooltip","getToolTipTranslate","BodyItemsClass","childItemText","renderVirtualizedGrid","menuBody","columnsCount","cloneElement","verticalAlign","BodyItems","column","featureIsEnabledForQt","sameWallAsLeftWall","leftWallName","featureIsFullWall","setFeatureByName","passedName","splittedName","findFeatureByPartName","cabinetLayoutMetaData","getUniqueFeatures","neededType","currentPartName","getTopCabinetCabinetLayoutMetadata","sameCabinetType","alReadySplitted","applianceType","doorSet","zIndexBox","activeFeaturePartIndex","currentModuleSystemNumber","modulePartSplitted","moduleMatchingPart","topCabinetApplianceType","getTopCabinetApplianceType","allowedPorticos","backsplashActiveFeature","matchedByName","zIndexBox2","featureFilterValueIDs","findFeaturesByModuleSystem","fPart","matchesInlayType","inlayTypeName","getFilterGroupObjectByInlayType","getFilteredFeaturesByTopCabinetFilters","activeTopCabinetFilters","woodTypeFilter","stainColorFilter","featureIsMatchingFilters","matchesByMetaDataAndFilters","filteredFeaturesByTopCabinetFilters","hoodType","isHood","isMicrowave","topCabinetConditions","matchingCabinets","getFeaturesMatchingAllCabinets","featuresMatchingAllCabinets","ignoreConditions","getTopCabinetType","getTopCabinetShadowLayout","ignoreAppliance","getBottomCabinetApplianceType","fromFeatureFilters","edgeFilterGroupId","realActiveFeaturePart","featureIsMatchingEdgeFilters","currentCheckFeature","currentFeatureEdgeFilters","relatedSink","existInSomeLayout","currentLayoutAbbreviation","getCabinetType","getChairType","FeatureWizardBody","getFilterValueObjectById","neededImage","filterValueIds","getFeatureWizardBodyItem","bgFilterName","backGroundSizeCover","selectedFilterValue","renderItemsList","currentValues","setCurrentValues","selectedId","selectedA","selectedB","FeatureWizardBodyItem","FeatureWizardSelection","setWizardValue","clickedFilterValue","setAllItems","FeatureWizardSelectionItem","activeScene","setActiveScene","RoomSceneNavigationItem","imageResponse","roomSceneClick","DesktopNavigationLayoutsContent","allowLoading","setAllowLoading","timeoutRef","MobileNavigation","showerGroup","MobileNavigationBodyNewClass","itemClicked","showMobileMenu","menuList","MobileNavigationBodyNew","MobileParentNavigationItems","parentItemClick","parentItemIndex","QuoteButton","DesignButton","toggleDesignList","designListOpened","handleDesignButtonClick","analyticsEvent","handleDesignResetClick","MinimizeButton","backToQuote","csvRows","blobConfig","encoding","msSaveBlob","DemoPoint","setNotesToFeatures","notesFeatures","notesFeature","hasMultipleVisualizers","loadFeaturesAndNotesForMultipleLayouts","featuresToReturn","differentVisualizers","recordIndex","arrayOfFeaturesIds","currentObject","forLayout","nextBvState","getBvStateProperty","isDesignOnly","firstRecord","loadedFeaturesFromJob","rec","recIndex","allWizardValues","restoreCartFeatures","allDiscountSections","sameDiscountSaved","selectedDiscountSection","discountSectionFound","discountFound","disc","savedCountry","jobMarkUp","baseboard","ceilingHighlights","ceilingLights","decor2","decor3","countertopGroup","alreadyExistingGroups","receiveBackSplashes","isCenterIslandDecor","IslandHood","Pendants","RightIsland","activeType","alreadyAddedFeatureIndex","alreadyAddedIndex","matchByType","matchByCabLayout","getBacksplashNavItems","sameNameOnly","updateRadio","handleRadioButtonClick","checkRelatedFeatureGroupPositions","filteredAvailableFeatures2","featuresToDisplay2","feature2","countertopSize","partsLayouts","partsRoomLayouts","pl","isPartsLayout","lightFixture","showOnLayouts","showPositionPopup","NavItemPositionModalButton","setChecked","positionName","getPositionName","isChecked","buttonClick","fromConflictingPopup","callConflictingPopup","checkForSameMountPosition","togglePosition","checkRelatedFeatureGroups","checkCenterGrabWall","checkboxDisabled","applyConflictingPosition","NavItemPositionModalSlatWall","isCurrentFeatureActive","getSlatWallButton","checkForContextMenu","hoveredPartId","needToRequestFeatureGroupsOnClick","ContextMenuQKBButtons","vanitySubMenuOpened","setVanitySubMenuOpened","contextButtonClick","vanButtons","openPartId","regularSink","isVanityParent","FireplaceParent","Furniture","worktop","cabinetLeg","hook","tallCabinet","tallHandle","tallCabinetLeg","CabinetLeg","Hook","CabinetGroup","SlatWall","isMainFeature","OverheadRack","TallHandle","TallCabinetLeg","BottomCabinetLeg","attachment1","allVisualizersPresets","renderSteps","userPopup2FAOpened","userSchedulerOpened","getDefaultCountry","countries","areaCodes","GBP","PLN","CAD","USD","edittoken","showPrivacyPolicy","confirmedAssign","twoFALoading","twoFAToken","loadFilterGroups","filtersCount","isNewBathroomOrKitchen","removeTutorial","_show","oldPage","isSignaturePadVisible","signaturePadTag","invoiceNumberOfPages","jobDocumentUrl","contractLoading","discountsReceived","advancedQuotingSearchItem","filteredResource","resourceTypes","filteredMiteredSections","removeMenuFromState","defaultCompatabilityObject","lookActiveFeatureStockCount","newScene","itemsToRemove","colors","featureGroupCount","anchorDbFeatureId","lastOpenedFeature","cardInfo","cardNumber","cardName","expMonth","expYear","cvv","selectedShippingAddressIndex","selectedBillingAddressIndex","lastState","getLastVisitedShopPage","withFeature","currentPage","UserFieldErrors","setTerms","privacyPolicyUrl","getPrivacyPolicyUrl","termsResponse","anchorScroll","anchor","closeLixilUi","leaveSqft","customerInterface","employeeInterface","customerError","subPartIsDone","relatedIem","SubPartDoneCheckMark","SqftFeaturesPopup3dButtons","threeDButtonClick","arButtonClick","threeDButtonID","augButtonID","setNewLayout","setNextLayout","shapeSize","setRoomLayouts","updatedRoomLayouts","roomLayoutIndex","roomIndex","expanded","buttonRefs","shapesLength","data-side","data-layout","shouldGetModelsOnlyWithThirdPartyAR3DUrls","featuresData","setFeaturesData","setIsLoading","newFeaturesData","rows","newViewType","getViewIcon","SqftOptionsRelatedItemList","shouldSortByWidth","activeItemIndex","setActiveItemIndex","containerRef","containerHeight","setContainerHeight","setParentFeature","setWidth","setupResizeObserver","resizeObserver","ResizeObserver","currentContainer","observe","unobserve","expandedGroheFiltersSearchText","relatedItemsList","emptyUrlsLog","LookVirtualizedListLoadingItem","LookFeaturePriceLocked","LookFilters","wrapperStyles","isRelatedItemsFilters","shouldCloseLevel3Sidebar","LookPolicyLinks","isSimple","useLocation","openLink","linkKey","ancestorOrigins","openUrl","sessionEnded","tempId","stringifiedParams","withHashUrl","LookSidebar","popupCloseClick","highLightForDemo","stylePopups","stylePopupOnMobile","popupType","sidebarButtonClicked","showRoomLayoutsButton","setInputValue","sendAuthRequest","TwoFaCodeInput","setAuthCode","inValidCode","setInValidCode","isBlurred","setIsBlurred","checkCode","newAuthCode","currentLocation","LookWizardSectionListFeature","applyWizardItemClick","propToMatch","nameLength","ShoppingCartButton","dropdownVisible","setDropdownVisible","activeLanguage","newVisible","languageIndex","handleLocaleClick","getLanguageName","toggleShowAdvancedQuoting","setAdvancedQuotingSearchItem","InstView","closeInstallationView","unmount","FeatureInfoPriceLocked","handlePriceLockClick","FeatureInfoDescription","pros","SelectionGridWizardGroupItem","isRowItem","wizardItemClick","clickOnLogic","NotInVisualizerView","getThumbnail","allVisualizerNotAvailable","goToBV","checkForDeletePopup","fromDelete","removeCartItemsWithQuoteIndex","cartItemsToRemove","checkForWizardPreviousChanges","LookFeatureNotInStock","GroheCategoriesMenu","isAccessory","showWizardItems","isShopPage","lmFeature","ACCESSORIES","acc_groups","GroheVirtualizedList","mainContent","parentPositions","loadScript","script","readyState","onreadystatechange","GroheCartColumns","isShort","instTaxes","showInstTaxes","showTotal","LockedPrice","getTaxColumn","LookWizard","closeCompatability","wizardSections","LookCompatabilitySection","compatabilityContentElem","closeButtonClick","opera","isInstagram","isFacebook","handleBackToDashboard","salesForceLoaded","sr","QCJobId","eventPayload","Sfdc","publish","sfdcMessage","handleSaveAndBackToDashboard","VIEW","steps","TwoFactorAuthClass","getDialogContent","getVerifyPhoneNumberContent","getTermsAndConditionsContent","getUpdatePhoneContent","handleResendSMS","handleResendVoice","handleCheckVerificationCode","validating","handlePostPhoneNumberUpdated","valid","handleUpdatePhoneNumber","setOldValues","phoneUpdateError","revertUserValues","oldPhoneNumber","getDialog","popupStyles","ConfirmPopup","handleApply","confirm","closeSQFtCalc","allowDelete","declineFunction","getConfirmMessage","MobileRotateButton","getIcon","getLogo","AssignQuoteVirtualizedList","selectEntity","activeEntity","noEntitiesFound","contentDimensions","hideEmployeesColumn","scrollToIndex","setScrollToIndex","prevEntity","scrollToIn","rowRenderer","customer","wrapperRef","handleClickOutside","MaterialsWizardFooterStepThumbnail","handleCloseSQFtCalc","SqftPopupWindow","isIsland","ManualCalculateSwitcher","sideBarButtons","blockStyle","exporter","gltf","ThreeDWorkspace","useCabinetLoader","MultiLoader","qrImage","setQrImage","arUrlForGlbFIle","extractedString","getARUrlForGlbFile","imageDataUrl","getDeviceType","DEVICE_TYPE","Android","iOS","unknown","getArButton","ARButton","makeImage","ARButtonGoogleWebXR","modelViewer","activateAR","contextMenuType","backSplashFeature","setBackSplashFeature","SqftOptionsLoading","FeaturePriceInput","priceEditing","setPriceEditing","hidePrice","togglePriceEditing","handlePriceOnChange","newAmount","NavMiteredSection","sectionName","SEGMENTS","debounceRequest","ended","debounceFn","fullWidth","LookFiltersList","wizardFeatureGroup","setActiveFilterId","availableFilter","isExpanded","underscoredText","expandIcon","aria-controls","GroheFiltersValues","filterValueText","resetFilterClick","getWindowDimensions","windowDimensions","setWindowDimensions","canvasSrc","setCanvasSrc","LookListContent","LookListContentHeaderRightSide","saveButtonClick","leadPopupWasOpened","setLeadPopupWasOpened","shouldOpenLeadCapturePopup","itemsToCount","hideTotal","hideCheckout","openMiniCartPostMessage","viewCartClick","addToCartPostMessage","leadCaptureTimeoutId","checkoutClick","lookListRequestQuote","downloadAllFeatures","useFeaturesRoomLayoutsChecker","fgObject","needToRequestNames","featureGroupObject","LookListFeatureCheckmark","getUnlockCalculationsCartItems","runAnimations","animateCartItems","exitAnimations","LoadingDots","LookListActiveFeatureMobileButton","InstallButton","fabSettings","ProjectScopeMobileHeader","ProjectScopeSections","updateSections","goToMaterialsPage","checkForWallsComplexGroup","wallsSubPart","qtCatSubPart","FeatureInfo","getDefaultFeatureQuantity","defaultOrPositionsQuantity","handleChangeItemQuantity","handleSQFTCabnetButtonClick","getFeatureModules","materialsQuantityIndex","mQuantity","showRecentlyViewedItems","navItemParent","changeActivePartRelatedItem","nextActivePartRelatedItemIndex","existInCart","associatedProduct","showFeatureModules","availableMeasureUnits","lowerCasedUnit","um","defaultMessage","isPriceUnlocked","FeatureInfoBrand","featureBrandValues","brandFilterValue","SelectionMainList","currentParentText","itemClickCountQuote","updatePositions","listItemHeight","deleteNotInVisualizerFeature","wizardSubStepIsActive","existingWizSetup","unlockedIndexes","$gridBody","isRowView","setRef","showItemsList","setRelatedStones","checkForDisabled","wizardClickOnLogic","clickLeadCaptureOnQuote","clickLeadCountOnQuote","checkIfNeedToSwitchRoom","handleOnMobileGridScroll","ceilScrollWidth","floorScrollWidth","ceilScrollLeft","floorScrollLeft","showListForce","currentFeatures","scrollElement","handleOnDesktopGridScroll","changeSet","renderVirtualizedList","isFinished","enableForQuoting","RowItem","isRelated","FeatureCartItemsCount","matchingCartItems","getAddedCartItemsCount","WizardFilterItem","SelectionGridFiltersTitle","filterTitle","allTitles","filtersGrid","isTopTitle","prevTitle","renderFeature","titleIndex","nextTitle","scrollToTitle","scrollToPosition","arrowUpDisabled","arrowDownDisabled","data-title","getWithFilters","withFilters","filtersLoading","materialFilterGroup","caesProfiles","countertopFilters","useGetFiltersRequest","useRequest","requestFilters","filtersLoaded","setFiltersLoaded","checkFilters","GalleryViewClass","handleCloseClick","galleryOpened","thumbnailClick","activeImage","gIndex","showFeature","SelectionDescriptionCover","prevActivePart","coverText","setCoverText","showCover","descText","player","play","playsInline","autoPlay","SelectionMainHeader","handleChangeListView","subPartPartId","showBacksplashSelect","showDisabledRadioButtons","SelectionFooterSubParts","scrollToActiveSubPart","animationTime","footerList","maxScroll","scrollIndex","neededScroll","handleFooterListScroll","shadowLeft","shadowRight","updateItems","setRelatedItems","getSubPartsList","withShoppingCart","itemIndex","handleFooterButtonClick","MaterialsFooterBackButton","checkForSubStepChange","subStepChange","MaterialsAgentTutorial","materialsAgentTutorialTimeoutId","setButtonsPositions","resizeId","MaterialsWizardFooterSteps","isShoppingCart","scrollElementRef","stepDisabled","quantityIsZero","$scrollableInfoArea","getCurrentRelatedCartItems","arrayToAddtoTheCart","relatedGroup","relatedItemCartObject","getCartFeatureParentName","ShoppingCartItemsList","switchToMaterialsPageGroup","listItem","neededQtCat","sIndex","createCommonParentsList","quotesList","cartList","addToCartList","featureGroupDisplayName","getCartItemsList","quotesListArray","isAddMoreDisabled","editFeatureGroupClick","editCartItem","index2","getInstallations","separateLaborInCart","instItem","instItemIndex","getTaxes","ShoppingCartItemsListItem","editorVisible","editorCanRender","handleRemoveClick","handleEditClick","handleAddNoteClick","onNoteSave","editingPriceAvailable","priceIsLocked","neededObject","wizValueObject","selectedWizValues","itemTitle","hasBundleProducts","closeEditor","parentCartItem","NoteEditor","setNoteText","onNoteSaveClick","ShoppingCartItemsBundledProducts","isAdvancedMode","advancedModeProperties","bundledCartItems","AdvancedQuotingListItem","deleteEmptyCartItem","setQuantity","setEditorVisible","handleNoteButtonClick","setClickedItemActiveQuoteIndex","isSearchDisabled","setParentQuantity","AdvancedQuotingListItemRemoveButton","prevConfirmPopupTag","deleteCartItem","DiscountSubTotal","shoppingCartItem","AdvancedQuotingSubpartItems","advancedCartItems","advancedCartItemsLength","allIds","allSqftIds","setCartItems","addEmptyCartItem","keepPrevious","currentCartItemsList","isAddProductButtonVisible","SimilarProducts","similarOpened","setSimilarOpened","updateState","RecentlyViewedItems","renderEmptyItems","emptyItems","recentlyItems","minItems","emptyItem","ShoppingCartFooter","finalButton","saveButton","renderFooterLeftSide","firstKey","showPriceWorksheet","finalButtonElement","saveButtonElement","activeButtonIndex","dropDownHeight","setActiveButtonIndex","clickFunction","ShoppingCartTotalColumns","showIncluded","avgPerSqftPrice","showAveragePrice","ShoppingCartCanvas","setStateLayers","openVisualizer","ImageCanvas","ShoppingCartInstallationQuestion","openInstallationView","handleNoClick","updateAllQuotes","PriceWorksheetView","closePriceSheetView","DiscountDropdown","dropdownItems","useIntl","dropdownTitle","UnlockCalculationsTutorialFunctions","runUpdates","updateSureTax","LookCanvas","useReducer","showCanvasLoader","movedCanvasForIntro","shouldOpenWizardItem","imageCanvasRef","GroheFeatureButtons","addToCartGroheButtonClick","continueShoppingButtonClick","changeButtonClick","lockedButtonClick","addToCartButtonTextId","mobileMainButtonClick","requiredFeatures","setRequiredFeatures","selection","selectedWizardValues","wizVal","allQuantity","GroheFeatureTopButtons","threeDDisabled","lixilQRCode","lixilAR3DUrls","hasWizard","contentToOpen","LookLockedButton","GroheFeatureWizardButton","wizardButtonClick","useViewItemAnalyticsEvent","prevActiveFeature","parentClick","hideInMenu","data-key","background","LookMainCategoryLoading","filtersButtonClick","viewButtonClick","badgeContent","invisible","FeatureSubDescription","LookFeatureColorMatchCheckbox","currentColorFeatures","checkboxText","updateAllLookCartItems","featuresToClick","checkboxClick","setSameColorFeatures","setCurrentColorFeatures","checkMatchingFeatures","sectionOpened","notPassedLeadCaptureProcess","checkRedirect","exact","executeAfterRegister","registerButtonClick","registerForm","googleComponentsToOurProperties","LookAddressInput","allowRef","setAllowRef","autoCompleteRef","google","maps","pacContainer","handlePlaceSelect","getPlace","formatted_address","address_components","componentKey","long_name","short_name","handleScriptLoad","places","Autocomplete","setFields","addListener","testCard","replaceAll","amex","visa","cup1","cup2","mastercard","mastercard2","disco1","disco2","disco3","diners","jcb","_getSvgCardIcon","iconName","isDeliveryPage","paymentSubmit","cartCheckoutClick","paymentResponse","transaction_id","transId","GroheBillingAndShippingInputs","setAddressInfo","setAddressErrors","addressErrors","shippingInputChange","checkValue","inputKey","LookInput","endAdornment","skusRequested","firstTimeLoaded","LookRouting","timeOut","lookHistoryListener","categorySet","featureSet","layoutChanged","activePresetState","getPartIdFromLixilCategoryName","allAvailableSubCategories","allAvailableCategories","categoryName","parsedCatName","LookWizardContentCanvas","setTransform","canvasLoaded","setCanvasLoaded","GroheWizardSelectedSteps","stepsContainerElement","useMobile","scrollContainerWidth","amountOfVisibleSteps","LookMainWizardSelectedStep","isProductJourneyDesktop","isProductJourneyMobile","stepWidth","featureIsInStock","notSelected","actFeature","shopContextState","shopContextDispatch","wasShopPage","cartOpened","loadShopPage","createRelatedItems","qtCatResponse","splittedAfterShop","skuId","getFeatureGroupFromUrl","shopCategoryId","getFeatureFromUrl","WithShopFeatureVisualizeClick","visualizeButtonClick","newPreset","ShopFeatureOptionsCommon","withTitle","navItemOptions","activeOption","activeOptionText","LookCartButton","cartButtonClick","showPopper","setShowPopper","prevActiveStep","LookFeature","lookLeadCaptureId","setFeatureGroupName","showSelectWord","useContainerOverFlow","LookWizardCompletedAlertModal","closeWizardButtonClick","getRoomIdeasTranslate","popperStep","roomIdeasButtonClick","buttonTranslate","resetMixpanelId","resetKiosk","ELEMENT","decimalAdjust","exp","predicate","thisArg","searchElement","fromIndex","sameValueZero","kValue","O","relativeStart","relativeEnd","Element","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentElement","floor10","u","global","_toolsProtectJs3","_babelPolyfill","__dirname","filename","process","normalizeArray","allowAboveRoot","up","last","splitPathRe","splitPath","xs","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","paths","relative","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","basename","ext","extname","_process","4","queue","draining","drainQueue","currentQueue","noop","nextTick","fun","browser","env","argv","versions","once","removeListener","removeAllListeners","chdir","umask","5","IS_INCLUDES","$this","toObject","toLength","toIndex","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","callbackfn","that","assertDefined","ES5Object","7","assert","msg1","msg2","def","fn","it","isFunction","8","enumKeys","T","S","9","TAG","cof","classof","stat","10","safe","forOf","$has","isExtensible","O1","LAST","FIRST","ITER","SIZE","DESC","fastKey","getEntry","entry","getConstructor","wrapper","NAME","ADDER","iterable","setDesc","setIter","iterated","kind","iter","11","$def","P","12","WEAK","LEAK","findFrozen","leakStore","13","BUGGY","species","assertInstance","methods","IS_WEAK","proto","fixMethod","KEY","buggyZero","chain","G","W","F","core","14","assertFunction","15","$redef","own","isGlobal","isProto","16","17","getKeys","getDesc","getSymbols","18","close","19","FW","20","getNames","windowNames","getOwnPropertyNames","getWindowNames","21","un","22","assertObject","23","$iter","SYMBOL_ITERATOR","Iterators","DEFAULT","IS_SET","FORCE","createMethod","$$","_native","_default","IteratorPrototype","getProto","24","SAFE_CLOSING","riter","25","setIterator","getIter","26","createDefiner","toInteger","bitmap","simpleSet","documentElement","getOwnPropertyDescriptor","setDescs","getOwnPropertySymbols","__e","__g","27","28","29","30","invoke","pargs","holder","31","tpl","SRC","_toString","base","inspectSource","32","regExp","isStatic","replacer","33","34","check","buggy","35","36","SPECIES","37","TO_STRING","38","repeat","fillChar","fillLen","RangeError","sFillStr","sFillVal","39","40","defer","channel","cel","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","counter","run","listner","importScripts","port2","port1","onmessage","41","42","sid","43","UNSCOPABLES","44","45","arrayMethod","IE_PROTO","ObjectProto","_slice","_join","getOwnDescriptor","IE8_DOM_DEFINE","$indexOf","$forEach","$map","$filter","$some","$every","Attributes","propertyIsEnumerable","Properties","keys1","keys2","keysLen1","createDict","iframeDocument","contentWindow","write","createGetKeys","Empty","seal","freeze","preventExtensions","isSealed","isFrozen","partArgs","bound","constr","buggySlice","createArrayReduce","isRight","memo","lz","begin","klass","upTo","cloned","arg","reduceRight","brokenDate","toISOString","isFinite","getUTCFullYear","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","callee","46","copyWithin","fin","47","endPos","48","forced","$find","49","50","arrayLike","mapfn","mapping","51","setUnscope","Arguments","52","of","53","54","HAS_INSTANCE","FunctionProto","55","56","strong","57","E","EPSILON","EPSILON32","MAX32","MIN32","sign","expm1","acosh","asinh","atanh","cbrt","clz32","LOG2E","cosh","fround","$abs","$sign","hypot","value1","value2","larg","imul","xn","yn","xl","yl","log1p","log10","LN10","log2","LN2","sinh","tanh","58","$Number","toNumber","valueOf","toPrimitive","binary","59","_isFinite","isSafeInteger","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","60","61","62","63","64","65","Wrapper","setProto","same","RECORD","isNode","asap","testResolve","sub","useNative","works","P2","thenableThenGotten","isThenable","notify","react","fail","rej","$reject","promise","isUnhandled","$resolve","executor","onFulfilled","onRejected","remaining","race","66","ITERATOR","$Reflect","Reflect","_apply","_isExtensible","_preventExtensions","buggyEnumerate","enumerate","Enumerate","reflect","thisArgument","argumentsList","construct","propertyKey","attributes","deleteProperty","receiver","ownKeys","V","existingDescriptor","ownDesc","67","$RegExp","re","CORRECT_NEW","ALLOWS_RE_WITH_FLAGS","flags","patternIsRegExp","flagsIsUndefined","68","69","$at","codePointAt","70","endPosition","71","$fromCodePoint","fromCodePoint","72","73","74","callSite","sln","75","76","77","setTag","shared","keyOf","$create","$names","$Symbol","setter","HIDDEN","_propertyIsEnumerable","SymbolRegistry","AllSymbols","setSymbolDesc","protoDesc","sym","symbolStatics","keyFor","useSetter","useSimple","78","weak","$WeakMap","79","80","$includes","81","82","getOwnPropertyDescriptors","83","createObjectToArray","isEntries","84","escape","85","86","at","87","$pad","lpad","88","rpad","89","$Array","statics","setStatics","90","ArrayValues","NL","NodeList","HTC","HTMLCollection","NLProto","HTCProto","91","$task","92","partial","MSIE","93","94","hasOwn","iteratorSymbol","inModule","runtime","regeneratorRuntime","ContinueSentinel","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","isGeneratorFunction","genFun","ctor","mark","awrap","AwaitArgument","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","Context","sent","delegate","tryEntries","resetTryEntry","tempName","tempIndex","rootRecord","completion","rval","dispatchException","exception","loc","caught","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","abrupt","finallyEntry","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","generator","_invoke","doneResult","returnMethod","tryCatch","makeInvokeMethod","invokeNext","invokeThrow","unwrapped","previousPromise","invokeReturn","enqueueResult","pushTryEntry","locs","iteratorMethod","subscribe","onData","App","BVQuotingTool","setJobIdVisualizerType","jobRecords","getFabricatorData","enableAutoSaveQuote","callRecursiveAutoSave","autoSaveTimerId","disableAutoSaveQuote","setMobileState","handleHeightResize","resizeHeightId","setGlobalHeight","getVisualizer","visMgmt","sessionStorage","CommonVisualizer","ApplyPopup","applyPopupItem","applyPopupItemIndex","handleApplyPopupToggle","applyCartItems","getFeaturesList","filteredActiveApplyPopupItems","allreadyExist","exisingIndex","filteredActiveApplyPopupItem","nextActiveApplyPopupItem","UserPopup","setCanvasImage","handleUserPopupToggle","checkFieldsForErrors","neededFields","handleSubmit","isValidPhone","handleChangeView","handleChangeTerms","termsSelected","setInputFocused","handleAdditionalFieldsShow","twoFAOnClose","cancel","updatedPhoneNumber","getTermsText","getUserPopupTitle","getUserPopupText","textKey","KioskMode","UserFields","dataSet","validation","handleInputFocus","closestLiElement","handleInputKeyPress","which","blurPhoneKeyboard","activeElement","errorsExistFirstName","errorsExistEmail","errorsExistPostal","data-input","data-validation","onKeyPress","ConfirmationScheduleView","selectedDate","aptType","handleMonthDayChange","handleTimeTableTimeChange","handleCancelClick","handleScheduleClick","dateChanged","timeChanged","contextTypes","router","MonthView","handlePrevMonthClick","subtract","handleNextMonthClick","handleDayClick","handleTodayClick","renderDays","mom","dayOfWeek","daysInMonth","today","moreCnt","monthHeaderView","dayView","TimeTableView","handleTimeClick","selectedTime","handleAptTypeClick","renderTimes","endTime","postfix","styleApt","styleHomeEstimate","postFix","MobileRotateButtonIcon","xlinkHref","filterUnits","in","stdDeviation","DocuSignLayer","setupDocuSignForm","docuSignSuccess","hideMe","errorMsg","jsonMatches","jObj","iFrameUrl","allowFullScreen","frameBorder","scrolling","fabricatorWebSiteUrl","newMsgBoxState","DepositPopup","agreeAndContinue","agreeChecked","closeDepositPopup","depositPerc","depositAmount","depositMessage","setContext","isContractSelect","changeContent","saveContract","newContextValues","agreeEmailCheckboxVisible","hideEmployeesList","switchToContract","AssignQuotePopupContent","salesPersons","setSalesPersons","customers","setCustomers","responseReceived","setResponseReceived","empList","customersList","testString","AssignQuoteCustomersList","customerSelected","handleCustomerClick","AssignQuoteEmployeesList","AssignQuotePopupContentHoc","setContentDimensions","assContentElement","setCurrentContentDimensions","AssignQuotePopupNewCustomer","selectFields","getSelectFields","activeContractName","cont","contIndex","getSelectedContractString","AssignQuotePopupNewCustomerInput","requiredFields","AssignQuotePopupNewCustomerSelect","methodIndex","AssignQuotePopupSaveButtons","saveFromAlreadyRegisteredUser","saveFromOfflineContract","newChangesExist","fullNameSplitted","quotesId","fromQuoteId","toQuoteId","showSaveButton","showCheckoutButton","checkoutButtonText","signIsDisabled","AssignQuoteContractSelection","prevIsActive","renderContractList","handleContractCheck","OrderCompletePopup","backToHomeClick","getAnotherQuoteClick","getPopupText","message1","message2","viewInSalesForce","scheduleFlexFinishAppointment","popupText","CookieMessage","cookieElement","checkToDisplayCookie","enableCookiePopup","handleAcceptButtonClick","handlePrivacyPolicyClick","getCookieMessage","setParentsLists","edgesFeatureGroup","edgesReceived","removeDeletedInSQFTFeatures","rebuildQuoteLists","quoteLists","SqftFeaturesPopupApplyButton","skipAddedSteps","applyButtonClick","$scrollToFeature","addedFeatures","newPreviouslySelectedFeatures","prepareSqftFeaturesBeforeAddToCart","findCartItemAlreadyAddedToCart","updateCartFeatureWithSqftFeature","updateCartFeatureWithSqftFeatureWithoutIdUpdate","replaceCartItem","updateCartFeatureWithSqftFeatureWithSqftIdUpdate","cartItemToAdd","addWizardProperties","remember","alreadyRememberedIndex","addCabinetFeatures","relatedGroupsWithNewQuantity","sqftFeaturesPrepared","isFoundById","isFoundByName","cartItemToUpdate","cartItemsInCurrentQuote","cartItemFeatureGroup","sqftFeatureFeatureGroup","isFoundByDbFeatureAndParentKey","isFoundBySqftIds","SqftFeaturesPopupBody","showNotification","show3dAndArButtons","SqftFeaturesPopupParentList","sqftFeatureIndex","SqftFeaturesPopupFeature","editButtonColor","shouldDisplayEyeball","shouldDisplayEditButton","data-feature","filterNavItemsWithSearch","productText","SqftFeaturesPopupFeatureDropdown","setProductText","ignored","dropdownElement","handleNavItemClick","namesArray","loader","wizNavItems","getNamesArray","SqftFeaturesPopupFeaturePrice","shouldSkipCeilPrice","useSlabPriceCalculation","toFixedFeatureCostParams","featureGroupTotalPrice","quantityToCalculateCost","getFeaturePrice","realUnit","displayQuantity","displayPrice","SqftFeaturesPopupFeatureDeleteButton","actionButtonColor","updatedLists","updatedList","SqftFeaturesPopupFeatureEyeball","openShapeRoom","zoomToSqftFeature","SqftFeaturesPopupParentListTitle","isChangeable","relatedParentPartId","SqftFeaturesPopupTitleFeatureDropdown","featureGroupSubPart","WizardConflictPopupCartItem","wizardSelectedKey","wizKey","runDeclineFunc","stepIndexClicked","defaultCountryValue","CheckoutPopup","scrollIntoView","scrollBack","removeAttribute","updatePaymentInfo","ccNum","paymentAmount","getPaymentAmount","checkoutCallback","offlineRetryCallback","depositTotal","countryIndex","showFake","setShowFake","defineGetter","defineSetter","lookupGetter","lookupSetter","hasOwnProp","oThis","aArgs","fToBind","FNOP","fBound","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","propDescriptor","HTML5_DOMStringMap","attrVal","attrName","attribute","attsLength","n0","e1","e2","preBind","currentBindings","CanvasRenderingContext2D","metrics","testWidth","isFloat","roundToPlaces","wholepart","toTeX","mixed","rescale","td","multiply","divide","equals","scalar","scaleup","gcf","primeFactors","factors","_factor","negative","remainder","approximation","countertopArea","setCountertopArea","edgesArea","setEdgesArea","setBacksplashArea","slabTotal","setSlabTotal","countertopMeasureUnit","edgesMeasureUnit","backsplashMeasureUnit","data-action","setActiveColorSet","handleShapeOffsetChange","activeShapeWithOffset","setIsOpened","getTotalItems","getTotalItem","xmlnsXlink","xmlSpace","ChangeLayoutPopup","setNewActiveFeatureInfo","shouldDisplayEdgeColumn","handleAddRow","$selector","dropDownUl","data-content","rowLetter","data-type","handleUpdateClick","handleToggleShowTypeClick","hideRowTypesList","updateRowSelectedFeatureAfterIndex","data-group","data-for","SqftEdgeRowDropdown","componentMeasureUnit","setComponentMeasureUnit","handleChangeMeasureUnitClick","handleSettingsClick","isSave","data-popup-id","data-value","data-step","data-menu","data-set","data-open","popupContent","setPopupContent","SqftFeaturesPopupSaveImageButton","SaveImageButtonClick","renderer","imageDataURL","domElement","screenshotIconStyle","camera-controls","camera-orbit","canvasRef","viewGLRef","onWindowResize","dispose","intensityValue","intensity","setIntensity","newIntensity","updateLightIntensity","handleLightingChange","updateSceneLighting","defaultChecked","THREE","SeparateModelGLBViewer","glbUrl","lightIntensity","spinner","animationFrameId","modelScale","envMap","modelLoader","modelsCenter","modelsSize","loadCountertops","countertopPromises","countertopPosition","getCountertops","loadWalls","wallPromises","wallPosition","getWall","initScene","loadCabinetSet","Scene","camera","PerspectiveCamera","WebGLRenderer","antialias","preserveDrawingBuffer","powerPreference","setPixelRatio","devicePixelRatio","outputColorSpace","SRGBColorSpace","useLegacyLights","toneMapping","ACESFilmicToneMapping","toneMappingExposure","shadowMap","autoUpdate","VSMShadowMap","gammaOutput","gammaFactor","enableDamping","dampingFactor","screenSpacePanning","maxDistance","loadHDRMap","HDR_MAP_LOADER","pmremGeneratorEXR","model","targetLength","Box3","setFromObject","Vector3","loadPromises","loadModel","allSettled","models","totalBox","calculateModelsBox","calculateAndSetCameraPosition","addLightV10","Object3D","expandByObject","copy","near","far","lookAt","updateProjectionMatrix","isMesh","receiveShadow","castShadow","isGroup","isLight","boxCenter","dynamicIntensity","baseHeight","PointLight","ambientLight","AmbientLight","directionalLight","DirectionalLight","addLight","Light","addLightV9","cancelAnimationFrame","ModelLoader","urlToLoad","target_width","getResizedCabinetModel","resizedCabinet","cabinetScene","rotation","MathUtils","degToRad","loadMaterial","loadHandles","materialUrl","materialGltf","traverse","materialMesh","getObjectByProperty","drawerObjects","doorObjects","logMeshes","handleIndex","loadHandle","gltfHandle","drawer","applyHandleAsChild","door","handleMesh","objectPlacement","handlePosition","handleRotation","cabinetPosition","finalHandlePosition","addVectors","handleClone","getResizedCornerCabinet","getResizedCabinet","LineBasicMaterial","geometry","BufferGeometry","setFromPoints","Line","allAssets","hdrLoader","hdrUrl","rgb","rgbeLoader","EquirectangularReflectionMapping","environment","needsUpdate","pmremGenerator","PMREMGenerator","compileEquirectangularShader","hdrTexture","fromEquirectangular","environmentIntensity","exrCubeRenderTarget","newEnvMap","SingleModelGLBViewer","initSceneV2","loadGLBModel","halfHeight","correctGltfProps","addLightV8","envMapIntensity","cameras","boxSize","multiplyScalar","maxSize","lightOffset","intensityScale","maxDimension","lightDistance","verticalOffset","lights","addLightV4","addLightV5","addLightV6","addLightV7","pointLight","floorGeometry","PlaneGeometry","floorMaterial","MeshStandardMaterial","Mesh","floorMat","roughness","metalness","bumpScale","textureLoader","TextureLoader","wrapS","RepeatWrapping","wrapT","anisotropy","sRGBEncoding","bumpMap","roughnessMap","floorMesh","reader","FileReader","onloadend","base64data","readAsDataURL","getCurrentStep","MultiLoaderSteps","shapesData","getAnimationSpeed","baseDuration","animationDurations","startAnimations","transformStyles","finishedIterations","loaderStep","loaderStepIndex","opacityDiff","GLBLoader","updateWorldMatrix","arraybuffer","hiddenModelViewerStyle","ar-scale","touch-action","shadow-intensity","max-camera-orbit","xr-environment","cropperRef","handleSelectSlab","initialAspectRatio","autoCropArea","crop","handleRectClick","imageType","isHeightFocused","setIsHeightFocused","isWidthFocused","setIsWidthFocused","handleSizeChange","rawValue","numericValue","cropper","setAspectRatio","sizeInputError","setActive","checkboxClasses","prepareImageDraw","imageElement","imageSource","croppedCanvas","getCroppedCanvas","imageFile","files","maxSizeMB","maxWidthOrHeight","useWebWorker","compressedFile","domString","handlePlaceholderClick","qtActiveCategoryName","separateSqftLabel","labelName","subpart","contextMenuTitle","contextMenuSelection","ContextmenuList","CONTEXTMENU_WIDTH","CONTEXTMENU_HEIGHT","data-part-id","getMaxWidth","KITCHEN_CONTEXT_MENU_BUTTONS","BATHROOM_CONTEXT_MENU_BUTTONS","CONTEXT_MENU_BUTTONS","SqftContextMenuV2","ChangeValuePopupWindow","defaultOptions","shouldPreventDefault","increaseLongPressEvent","decreaseLongPressEvent","strokeLinejoin","isTouchEvent","onLongPress","shouldLongPressBeContinuous","longPressTriggered","setLongPressTriggered","setHandlerHold","shouldTriggerClick","isSFTAreaGroup","sqftGroup","setSideBarButtons","menuThatStaysOpened","getSubMenuActiveButton","sidebarButton","subMenuActiveButton","submenuButton","setNavigationDisplayButton","preparedSidebarButtons","preparedButton","buttonToDisplay","newMenuButton","newMenu","buttonEls","newButtons","getTranslationId","handleWaterfallClick","addWaterfall_onClick","segName","handleFreeDrawClick","addWaterfallLayout","navItemMitered","shapeName","data-shape","counterTopArea","setCounterTopArea","setBumpouts","setEdges","setBacksplashes","setWalls","radiiCounts","radiusName","radiusDisplayName","anglesCount","angleDisplayName","anglesValue","angleName","messageTotal","bumpoutsArea","selectedEdge","setSelectedEdge","SqftNavEdgesFeature","data-shared-feature-name","setEgeFeature","attachAdditionalResources","edgeNameTranslated","lowerCaseEdgeName","attachEdgeResource","SqftNavEdgesMiteredButton","partIdMap","getFeatureGroupByItemName","getNavItemsWithThirdPartyAR3DUrls","processItemSelection","addBumpout_onClick","resetAllBumpouts","selectedBacksplash","setSelectedBacksplash","backsplashOptions","getBackSplashText","data-backsplash","data-name-metric","SqftNavBacksplashesCustomButton","activeCornersMenu","setActiveCornersMenu","radiusButtonRef","cornerButtonRef","data-href","isRadiiFeatures","radiiNavItems","staticFeature","staticFeatureGroup","getHardcodedRadii","radiiToDisplay","getHardcodedRadiiMitered","imperialRadii","radiiValue","getRadiusFeatureId","cornersNavItems","cornersToDisplay","getHardcodedCorners","cornerToDisplay","drawCornerValue","getCornerFeatureId","setSearchInput","SqftFeaturesChecker","checkSubPart","setDataTransfer","setData","dragImage","setDragImage","onDragStart","mouseEvent","MouseEvent","dragEvent","DragEvent","bubbles","cancelable","DataTransfer","dropEvent","handlePartId","generateHandles","SqftOptionsHandles","activeItem","setActiveItem","SqftOptionsHandlesContent","togglePartId","allowedPartId","SqftOptionsCrown","setRows","listWidth","setListWidth","isActiveItem","NavMiteredSegment","segmentMaxLength","navMiteredSegment","navMiteredSection","underlaymentSection","NavWaterfallSection","waterfallSegmentsData","getTitle","waterfallSegmentData","NavWaterfallSegment","segmentThickness","NavWaterfallSegmentSwitcher","hasMultiplePartIds","featureData","Fragment","shouldShowFullHeight","gridWidth","setGridWidth","SqftNavCustomBacksplashSection","SqftNavCustomBacksplashSegment","setHeightValue","hasRooms","roomsNavItem","QuotesSwitcher","isToggled","setIsToggled","handleDropDownClick","QuotesSwitcherLists","visibleQuotes","startIndex","QuotesSwitcherListQuotes","handleQuoteClick","quoteRoomFeature","loadQuoteToSQFT","visualizerQuotes","QuotesSwitcherListCategories","setQtCategories","categoriesFiltered","isMatchingWithQuote","isRoom","isRoomGroupExist","handleCategoryClick","nextQtCatName","existingQuoteForSelectedCategory","newVisualizer","QuotesSwitcherListRoomGroups","roomGroups","setRoomGroups","roomsNavItemsFiltered","roomNavItemPartName","nextRoomGroupName","existingQuoteIndex","handleItemSelect","handleDropdownSelect","prevIsOpen","onItemSelect","onDropdownSelect","isOpenInitially","Dropdown","isOpen","setIsOpen","internalActiveItem","setInternalActiveItem","toggleDropdown","topCabinetFeature","bottomCabinetFeature","getWorkspace","rest","showSqftTutorial","frameCount","renderTask","slide","ui","slider","setMouseWheel","detail","wheelDelta","scaleMinus","scalePlus","returnValue","resizeTimes","stepText","addImageToBody","nodeKey","tutorialImages","initNodes","translates","setSpecificStepRules","showTimer","ring","setButtonClicks","addCursorImages","buttonNext","addToQuote","addToQuote2","edgeImageButton","showNextStep","resizeLines","edgeClick","showFinishStep","forEver","removeCursorImages","animationFinished","$scrollDiv","moveRing","verticalLine","resizeVerticalLine","resizeVerticalLineBack","horizontalLine","resizeHorizontalLine","resizeHorizontalLineBack","toTheRight","basicX","stopResize","toTheBottom","basicY","timer2","edgesButtonsArray","edgeButton","chapeCount","excludedLines","translatesPath","replaceHtml","updateButtonAddToQuote","allElements","translated","innerText","getTranslationColumn","translationMissingValue","translationColumn","translateEdgeToFrench","edgeSharedFeatureName","isSqftVisited","whitePageRoute","prevPageRoute","LookListLeft","LookListContentHeader","selectAllChecked","LookListMainFeatureActions","LookListMainFeatureActionsMoreButton","moreOpened","setMoreOpened","showLabel","LookListMainFeatureActionsPopper","closePopper","LookListMainFeatureActionsPopperButtons","addToWishListButtonCLick","changeItemButtonCLick","LookFeatureQuantity","propsQuantity","useLixilQuantity","MAX","LookFeatureQuantityText","LookListBundleFeatures","GroheCartItemActions","LookListMainFeatureCheckbox","LookListMainFeatureShipping","existingFeature","shippingOption","LookLayoutMain","looks","setLooks","showAllLayouts","setShowAllLayouts","updateMain","lookIndex","LookLayoutItem","analyticsQuery","lookViewOpened","realDisabled","lookLayoutOpened","loginOpened","buttonTextId","wishlistButtonClick","neededIntroStep","showPoints","LookSideBarEditButtonPopper","setShowPoints","aria-describedby","shareModalOpened","setShareModalOpened","shareClick","resetLookClick","LookSideBarShareModal","hideButton","undoButtonClick","keyboardDetect","ctrlKey","popupClose","loginButtonClick","termsButtonClick","LookRegisterButton","LookRoomsMain","LookRoomPreset","closeRooms","afterSwitch","nextRoute","roomPresetClick","renderButton","questionPopups","getDescription","getButtonText","presetToSet","submitButtonClick","stylePrefix","LookStylePopupFeature","LookStylePopupButtons","removeButtonClick","updatedDeletedCartItems","getBundleFeatureWithoutChildItems","bundleFeatureWithoutChildItems","countRelatedProductParent","removeBackContinueButtonClick","removeBackAddItemsBackClick","removeBothButtonClick","titleString","exitPostMessage","leaveButtonClick","getButtons","sourceChanged","sourceChangeType","variantUrl","changedFeature","currentSelected","fromPreset","preparedVariantUrl","lixilVariantUrl","hideFunction","updateDesignButtonClick","LeadCapturePopupContent","isQuotation","getSubTitle","getContent","LeadCapturePopupContentInputs","forgotPasswordLinkClick","LeadCapturePopupFooter","privacyClick","oneButtonOnly","LeadCapturePopupFooterSubmit","tryToSwitchToTwoFa","resendSMSButtonClick","receiveCallButtonClick","fromShare","saveResponse","getSubmitButtonText","LeadCapturePopupTwoFA","LeadCapturePopupTwoFAVerify","LeadCapturePopupBoxImage","UnlockCalculationStep","closeTutorial","preventRequiredFunc","animationData","loop","autoplay","rendererSettings","preserveAspectRatio","LookFeatureItemLocked","LookListFeatureName","LookWizardSectionListFeatureQuantity","PrintPopup","logoString","logoBase64","setLogoBase64","setCartItemsThumbnails","setLogoUrl","newLogo","cartItemsThumbnailsBase64","_initialFlowVisited","inititalFlowOnEnter","checkForInitialFlow","nextState","visualizerOnEnter","visualizerEntered","checkForVisualizerOnly","newScopeOnEnter","materialsPageOnEnter","showTutorialVideo","shoppingCartOnEnter","onEnter","QuoteDesignPage","goToVisualizer","goToQuotingTool","buttonClass","WebsiteButton","showCheckoutLineItemPricesToggle","showPrices","showCostPricesToggle","InitialFlow","setQtCategoriesRooms","roomKey","handleFooterBackClick","InitialFlowFooterQuestion","getFooterQuestion","handleInitialButtonClick","buttonType","InitialFlowRoom","handleInitialRoomClick","kitchenSubscription","exitInitialFlow","InitialFlowLayout","setMissingInititalFlowValues","handleInitialRoomLayoutClick","layoutIndex","getLayouts","IntroVideo","getStepText","videoPath","videos","fluid","ProjectScope","ProjectScopeMobile","checkForResize","shopClicked","scrollY","changeContainerHeight","handleShopClick","$sections","searchInputChange","getSearchItems","getAllFeaturesByText","goToItemInfo","selectionBodyStyles","ProjectScopeSearchInput","handleOnFocus","handleOnBlur","ProjectScopeDesktop","getVisualizerName","ProjectScopeDesktopSearchInput","dropDownItems","smallDropDown","SelectionWindowPage","historyUpdateTimeout","SelectionMainWindow","updateQtRoutePath","getSubPartFeatures","listenToRouteChangeForQtCategories","nextCategory","qtCategoryIndexFromUrl","subPartsMatching","subPartIndexFromUrl","subPartIndexFromUrlTest","setFirstAvailableCategory","setFirstRoute","runActionAfterVisualizerChange","getActiveChildPart","nextCategoryName","hashHistoryListener","listenerObject","existingSelGroup","selGroup","changeActivePart","requestName","_partIdRequestsMade","nextSelGroup","relatedNavItem","checkForCheckedStep","activePartIndex","switchToDirectCategory","closeSelectionWindow","searchRequest","realSubPart","unlisten","listen","showVanityChoose","showShowerChoose","SelectionWindowBvRequests","SelectionMain","paginationOffset","pageCount","featuresPerPage","mobileSearch","canvasLoading","canvasExpanding","canvasCollapsing","needToRefreshItems","_ismounted","checkIfNeedToSwitchListView","checkViewType","setDesktopItemHeight","cameFromBV","firstClickDone","showLockScreen","showHomeButton","showVisualizerExpandButton","showNotInVisualizerView","getZoomingPartId","canvasImageStyles","renderCanvasPosition","handleToggleLayout","getCurrentParent","checkPart","navItemsForPrevParent","InstList","clickedIndex","handleServiceClick","groupIndex","serviceIndex","updateServiceValue","valueName","getSublistHeight","servicesLength","FeatureInfoAssociated","addAllClicked","handleAddAllClick","handleRelatedItemsSearchChange","handleViewAllOptionsClick","prodAll","FeatureInfoAssociatedProducts","relatedFeaturesRequestMade","activeDbFeatureId","getLoadedFeatures","relatedGroupIndex","subItemIndex","FeatureInfoAssociatedProduct","showGalleryButton","data-feature-id","FeatureInfoDesc","FeatureInfoMaterial","featureMaterialValues","materialFilterValue","gImg","changeImage","galleryExist","setVisible","setLoaded","cols","cache","fixedWidth","defaultHeight","SelectionMainVirtualizedList","thisFeatureAdded","rItem","showRowRelatedItems","updateVirtualizedCache","deferredMeasurementCache","RowItemButtons","RowItemQuantity","thisFeature","newRowItems","existingItemIndex","RowItemPrice","existingItem","RowItemRelatedProductsButton","RowItemRelatedProducts","setRelatedFeaturesRequestMade","relGroups","setRelGroups","loadedFeatures","featureHeight","relatedStyles","relatedFeatureIndex","MaterialsWizardSqftButton","WizardList","filterGroupValues","setFilterGroupValues","getFilterValues","filterGroupAll","filteredFilterValues","getRenderFilterValues","filterGroupValuesArray","filObject","WizardDesktopGrid","wizardObjectInterface","enableForVisualizer","WizardMobileGrid","minColumns","SelectionMainVirtualizedGrid","SelectionMainVirtualizedFiltersGrid","setCurrentFilter","defaultTitle","setDefaultTitle","gridFeatures","setGridFeatures","setAllTitles","reversedTitles","setReversedTitles","filterValuesAvailable","firstTitle","getFeaturesAndFirstTitle","renderFeatures","newAllTitles","skipTitles","countertopsFiltered","spacersCount","spacersTitleCount","rowsToAdd","onGridScroll","shiftTitle","firstT","getRowHeight","firstFilterTitle","SelectionGridFiltersTitleDropdown","dropdownOpened","setDropdownOpened","fTitle","fTitleIndex","SelectionMainVirtualizedGridMobile","SelectionMainVirtualizedFiltersGridMobile","columnsToAdd","getColumnWidth","firstRowFeatureIndex","ExpandVisualizerMethods","expandCanvas","wideScreen","bigScreen","SelectionViewSwitchers","showListView","data-view","FiltersButton","SelectionFooter","handleAddCartItemClick","updateCartAndGoBack","otherRoomCartItem","createNewQuoteAndAddNewCartItemAfterConfirmPopupClick","replaceOldCartItemAfterConfirmPopupClick","executeAfterAddToCart","updatedWithQuoteIndexRoomCartItem","exitFeatureInfo","changeRelatedItem","handleAddRowItemsClick","handleSelectItem","footerButtonCick","existingWizSetupIndex","wizObjectIndex","activateWizardAgain","canGoToFeatureInfo","handleNextButtonClick","renderFooterSelect","relatedItemClick","setCurrentWizardStepFinished","addToCartTranslate","rowIsActive","SelectionMainSelect","bvPart","SelectionMainSelectCategory","SelectionFooterSubPart","collapsing","collapseRing","expandTimeoutId","expandRing","SelectionFooterSubSteps","currentSteps","subStepIndex","mapDispathToProps","MaterialsWizardMain","setNavItems","scrollElem","setNavigationItems","newNavItems","setNewCanvasClass","prevFeatureGroup","alreadyAddedCartItem","fakeSetShowLoader","MaterialsMainCanvas","setCanvasLoading","showNotCompatibleViewReal","MaterialsWizardMainList","resizing","setResizing","prevItemHeight","itemHeight","updateHeight","alreadyRequestedWizardFeatures","currentStore","stepFromUrl","MaterialsWizardFooterStep","stepButtonClick","showDoneCheckMark","activeStepIndex","setExpanded","setCollapsing","goToTheNextStep","realNextStep","selectedValueIsNotFromCurrentSelections","currentG","mg","setMaterialsCameFromPage","newItems","isSingleFeatureGroup","showConflictingButton","greenNextIsVisible","hasNavItems","greenNextDisabled","alreadyInCart","addToCartVisible","addToCartDisabled","rowItem","renderWizardList","MaterialsWizardFooterSelectButton","ShoppingCartView","ShoppingCartMobile","onContentScroll","scartContent","needToShowQuestionAgain","handlePaneClick","activePaneIndex","activePane","$activePaneTitle","$scartContent","hardcodedImage","ShoppingCartMobileHeader","ShoppingCartMobileHeaderWithRouter","ChangeRoomButton","handleAddRoomClick","PriceInput","setPrice","CartItemQuantity","cartItemQuantity","isInputDisabled","CartItemCalcButton","handleCalculatorButtonClick","CartItemTotal","CartItemSearch","updateCounter","prevConfirmPopupOpened","updateInputText","updateForNewNavItem","closeDropdown","fromConflicting","neededVisualizerType","CartItemSearchButton","handleSearchButtonClick","ShoppingCartDiscountsList","getDiscountTitle","ShoppingCartDiscountsListItem","ShoppingCartItemsListInstallationItem","handleRemoveInstallationClick","instPrice","otherCartItems","isSlabsCartItem","slabCartItems","selectedQuoteRoomName","SimilarProductsList","SimilarProductsListItem","AdvancedQuotingWizard","notFromWizardCartItems","notFromWizardSlabCartItems","commonVisualizerType","wizardsSelectedObject","AdvancedQuotingWizardGroups","nothingSelected","AdvancedQuotingWizardGroupsSearch","defaultText","ShoppingCartItemsListWizardCustomItem","PriceWorksheetButton","handlePriceWorkSheetButtonClick","ShoppingCartTaxInput","VisualizerButton","ShoppingCartFooterSubParts","setSelectionGroup","firstCatName","ButtonGroup","dropdownOpenedFirstTime","setDropdownOpenedFirstTime","handleArrowClick","buttonIndex","currentQuoteWizards","wizValue","lastFinishedWizard","getLastWizardItem","quoteClick","quoteDeleteClick","updateAllQutoesTiedItems","changedCartFeatures","newAllValues","selectedObject","severalQuotes","showEditButtons","PriceWorksheetList","DiscountAdd","approvePersonSelectHandle","approveObject","optionIndex","DiscountDeposit","DiscountFinance","percentageChangeClick","dropdownItem","monthChangeClick","getDropdownOptions","textAfterProperty","dropdownPercentageItems","setCellVisible","withPercentage","dropdownMonthItems","DiscountNestedParent","allNested","uuIdId","nestedOptions","allSelectedNested","nestedChild","nestedChildIndex","parentDiscount","DiscountNestedChild","discountDropdownClick","updatedDiscounts","updatedDiscount","addNestedDiscountClick","lastSelectedNested","ShoppingCartDesktop","UnlockCalculations","UnlockCalculationsSteps","exitRunAnimations","currentRenderTime","renderUnlockCalcTimes","waitTime","renderIndex","getStep","stepStart","UnlockCalculationsTutorial","countertopButtonStyles","countertopButtonText","checkCountertopButtonStep","countertopSelector","countertopButton","$list","computed","UnlockCalculationsTutorialLowes","buttonStyles","currentDate","currentYear","currentMonth","sureTaxData","sureTaxResponse","totalTax","contractsPopupOpened","checkContractBlobs","contractData","closeContracts","closeSignPopup","ContractsPopupSuccess","showEmail","disableCustomerEmails","ContractsPopupDocument","contractRef","pageRef","depositValue","isReceipt","onLoadSuccess","onRenderSuccess","ContractsPopupFooter","onPagerClick","newContext","pageClick","firstUnFilledCustomField","postSaveContracts","Pagination","handlePageClick","pager","setPage","getPager","pages","startPage","endPage","postContractSign","signaturePngBase64","responseSaveQuote","replacements","customFieldValues","contractFieldValuesOnly","contractSign","getDocumentForJob","fromPostSignContract","pdfReceiptPagesLength","hasContractCallBack","DocumentValueDict","Replacements","CustomFieldValues","coordInterface","fieldInterface","isPresent","occurrencesCount","contractInterface","documentKey","documentOptions","cMapUrl","cMapPacked","needToScrollToViewAfterPageChange","ContractsPopupFields","masterContractFields","handleTextFieldOnKeyDown","scrollToIndicator","handleTextFieldOnBlur","block","handleNextIndicatorClick","pageOffsetLeft","pageOffsetTop","renderFields","selectedFieldCoords","selectedFieldHasValue","coordIndex","llx","lly","urx","yExpand","autoFocus","handleTextFieldOnChange","firstEmpty","ContractsPopupSignatureField","fieldValue","signatureName","alreadySignedSameFieldValue","data-coordname","ContractsPopupCheckboxField","ContractsPopupNextIndicator","ContractsPopupFieldValue","getFieldDiv","balance","SignaturePadPopup","setSignatureImage","sigCanvas","_sigPad","_reset","_canvas","fromDataURL","_isEmpty","isInformationFilled","postContractSignature","pngBase64","getTrimmedCanvas","isReceiptSign","closeContractSigning","contractSigningCallback","canvasProps","getReceiptSignStyles","childView","lookTutorialModalRef","neededNumber","scrollSelector","scrollDiv","firstLockedElem","modalEl","LookLockTutorialModal","nextButtonClick","roundToDecimals","getCurrentPositionFromScale","LookZoomer","currentPosition","setCurrentPosition","isDragging","setIsDragging","startY","setStartY","startPosition","setStartPosition","startZoomCenter","setStartZoomCenter","onZoomEnd","zoomButtonClick","currentScale","MIN_SCALE","getCurrentScaleFromPosition","nextScale","prevScale","thumbStyles","LookContextMenu","LookContextMenuContent","zoomedFeature","isShowerWizard","isVanityWizard","isCenterIslandWizard","wizButtonName","LookContextMenuVanityContent","setLoadingCart","prevOverlayOpened","locked","GroheFeature","GroheFeatureOptionsType","updateOptions","activeMetaDataValue","leftRightArray","GroheFeatureOptionsShelfSide","displaySideOptionsFor","GroheFeatureOptionsSide","leftDisabled","rightDisabled","getPanTranslateId","GroheFeatureOptionsShowerPan","currentMeta","positionsAvailable","GroheFeatureOptionsCabinetSide","neededPosition","isButtonDisabled","positionLetter","regexNumbersAndEmptyString","BODY_SPRAY_POSITIONS","GroheFeatureOptionsBodySpray","currentQuantity","positionIndex","GroheFeatureOptionsSlatWall","addedToCartClicked","setAddedToCartClicked","updateCartItems","cartItemsArray","requiredFeature","addAllToCartButtonClick","GroheFeaturesTotalPrice","totalFeaturesPrice","withDecimals","SLIDE_DIRECTIONS","sliderRef","handleScrollClick","categoriesOpened","GroheCategory","featureGroupClick","closeFilterClick","displaySameColorGroups","zoomToFeatureGroupByFeature","changeFeature","groheSimilarItemClick","GroheFeatureShort","addedToCart","setAddedToCart","addToCartButtonClick","layoutsOpened","wizardSubParts","totalSteps","featureGroupDescription","boundaryCount","hidePrevButton","hideNextButton","activeTitle","setActiveTitle","lixilURL","infoKey","panel","titleKey","LookFeatureInfo3d","arButtonOnly","threeDSrc","glb","usdz","hdr","arButton","slot","LookFeatureInfo3dViewer","reveal","ar-modes","ios-src","environment-image","class","exposure","aar-modes","quick-look-browsers","infoButtonClick","threeActive","threeColor","augActive","augColor","isRoomIdeasOpened","isRoomLayoutsOpened","continueShopping","selectedValues","canBeAdded","getCartButtonText","checkoutDisabled","allowRender","setAllowRender","roomButton","GroheLayoutItem","GroheRoomPreset","presetTitle","presetPrice","GroheTopButtons","topButtonClick","setHomeRoute","GroheMenuButton","GroheShareParentButton","GroheShareButton","shareButtonClick","GroheSaveButton","GroheSameColorFeaturesContent","sameColorFeature","headerButtonClick","GroheCartLoginHeader","allSteps","setUserInputValue","subTitleTranslateId","parentGroupClick","GroheCartDesignRecommendedList","translateIndex","setTranslateIndex","slideButtonCLick","GroheCartDesignRecommendedFeature","termsAcceptClick","GroheCartDeliveryColumn","resendCodeButtonClick","gcRef","cartFooterCheckoutClick","GroheCartFooter","paymentSelect","valuesBeforeCheckbox","setValuesBeforeCheckbox","defaultValues","addressError","setAddressError","confirmButtonClick","shipping_tier","addressValidated","isConfirmed","payment_type","GroheCartPaymentInputs","cardInputChange","countryItems","countryName","countryItem","cartItemsTotalQuantity","deliveriesReceived","setDeliveriesReceived","prevQuantity","getTrumbleResponseShipping","cartItemsString","getShippingHQResponseShipping","getOptionsAndCreateDeliveryList","deliveriesSections","deliveryIndex","GroheCartDeliverySection","deliveryCartItems","fromToString","getMinAndMaxDays","SHIPPING_TIMES","minDays","maxDays","days","groheCartDeliveryInterface","showWizard","selectedInSqft","canSelectNavItem","showFinalPrice","GroheWizardContentFeature","showPriceInput","GroheWizardContentSingleFeature","LookWizardSection","propsTypes","LookWizardSectionGroup","nextPedestal","LookWizardSectionList","setAdditionalFeaturesLoading","activePositionInListExist","LookLockTutorialCaller","LookWizardSectionFilters","LookWizardSectionFilterItem","listFilterClick","setFeature","featureDownloaded","setFeatureDownloaded","getFeature","featureFromUrl","newResponse","ShopFeature","galleryImageClick","galleryImageIndex","galleryImage","ShopFeatureImageGalleryItem","ShopFeatureVisualizeButton","ShopFeaturePrice","priceSplitted","ShopFeatureShipping","ShopFeatureOptions","setActiveOption","ShopFeatureAddToCartComponents","ShopFeatureSuccessMessage","setIsVisible","successElement","ShopFeatureDownloads","ShopFeatureBackNextButtons","ShopFeatureWizardButton","stateFeatureGroup","setStateFeatureGroup","checkReceivedFeatures","useSimpleView","ShopCategoryList","startLoadingAdditionalFeatures","ShopCategoryVirtualizedGrid","listElement","gridColumnCount","featureWidth","gridRowCount","gridItemRenderer","overscanIndicesGetter","cellCount","overscanCellsCount","stopIndex","overscanStartIndex","overscanStopIndex","disableHeight","autoHeight","ShopCategoryListFeature","ShopCategoryListFeatureOptions","prevFeature","ShopCategoryAside","ShopCategoryBackNextButtons","LookCompatabilitySectionButtons","closeAlert","compatabilityObject","compatabilityObjectIndex","toFeature","lm_styles","fullScreenHeight","sectionStyles","buyNow","expandDisabled","contentStyles","featureSectionIsHidden","LookFeatureMatchingStyleAlert","styleAlertModalOpened","setStyleAlertModalOpened","deletedFromCart","LookFeatureMatchingStyleAlertModal","reviewYourLookButtonClick","LookFeatureUnlockButton","setShowAllGroups","showAllGroupsCheckbox","parentObjects","LookWizardContent","thumbnailRef","nextActiveFeature","wizRef","LookIntroBox","urlBeforeIntro","setUrlBeforeIntro","skipIntroButtonClick","showAnotherTextFor","stepTranslateId","getStepTranslateId","roomIdeasTranslate","closeIntro","LookIntroBoxSteps","LookIntroBoxIcon","getPartIdsToHighLight","LookIntroCanvasHighlighting","runHighlighting","partIdsToHighLight","callRecursiveRendering","onTop","videoPlayerRef","video","muted"],"mappings":"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AA6BC,GAClC,OAAQA,GACN,KAAKC,EAAYC,WACf,MAAO,SACT,KAAKD,EAAYE,aACf,MAAO,a,EAGGC,oBAAT,SAA6BC,GAClC,OAAQA,GACN,IAAK,SACH,OAAOJ,EAAYC,WACrB,IAAK,WACH,OAAOD,EAAYE,eAnLzB,YAE0BG,EAAbA,WAAa,CACxBC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,GACVC,SAAU,IAGsBC,EAArBA,mBAAqB,CAChCC,IAAK,MACLrB,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,YA5CL,IA+CMG,EAAsBA,EAAtBA,oBAAsB,CACjC,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAuDW5B,GArD8B6B,EAA9BA,4BAA8B,CACzC,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAGsBC,EAAXA,SAAW,CACtBC,IAAK,MACLC,GAAI,KACJC,SAAU,IACVC,UAAW,IACXC,OAAQ,IACRC,MAAO,IACPC,MAAO,IACPC,WAAY,KACZC,WAAY,sBACZC,cAAe,kBACfC,kBAAmB,qBACnBC,sBAAuB,UACvBC,yBAA0B,cAGMC,EAArBA,mBAAqB,CAChCC,cAAe,gBACfC,gBAAiB,kBACjBC,YAAa,cACbC,WAAY,cAGYC,EAAbA,WAAa,CACxBC,uBAAwB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S,GACT,OAAU,GACV,MAAS,GACT,UAAa,UACb,gBAAmB,UACnB,YAAe,aAEjB,CACE,OAAU,sBACV,GAAM,GACN,EAAK,EACL,GAAM,mBACN,SAAY,EACZ,IAAO,iHACP,aAAgB,iHAChB,aAAgB,GAChB,aAAgB,GAChB,cAAiB,GACjB,MAAS,GACT,OAAU,GACV,MAAS,GACT,UAAa,UACb,gBAAmB,UACnB,YAAe,oBAEjB,CACE,OAAU,aACV,GAAM,GACN,EAAK,GACL,GAAM,mBACN,MAAS,GACT,OAAU,GACV,SAAY,gFACZ,YAAe,8GACf,eAAkB,CAChB,CACE,GAAM,GACN,GAAM,YAER,CACE,EAAK,GACL,GAAM,YAER,CACE,EAAK,GACL,GAAM,WAER,CACE,EAAK,EACL,GAAM,WAER,CACE,GAAM,GACN,GAAM,WAER,CACE,GAAM,GACN,GAAM,WAER,CACE,GAAM,GACN,GAAM,aAGV,SAAY,EACV,GACA,GACA,GACA,GACA,GACA,IAGJ,CACE,OAAU,aACV,GAAM,kBACN,EAAK,GACL,GAAM,mBACN,MAAS,GACT,OAAU,GACV,SAAY,gFACZ,YAAe,8GACf,eAAkB,CAChB,CACE,GAAM,GACN,GAAM,YAER,CACE,GAAM,GACN,GAAM,YAER,CACE,GAAM,GACN,GAAM,WAER,CACE,EAAK,EACL,GAAM,WAER,CACE,GAAM,GACN,GAAM,aAGV,SAAY,EACV,GACA,GACA,GACA,IAGJ,CACE,OAAU,aACV,GAAM,kBACN,EAAK,GACL,GAAM,mBACN,MAAS,GACT,OAAU,GACV,SAAY,gFACZ,YAAe,8GACf,eAAkB,CAChB,CACE,GAAM,GACN,GAAM,YAER,CACE,GAAM,GACN,GAAM,YAER,CACE,GAAM,GACN,GAAM,WAER,CACE,GAAM,GACN,GAAM,WAER,CACE,GAAM,GACN,GAAM,aAGV,SAAY,EACV,GACA,GACA,GACA,O,+EC14BmBC,EAAdA,YAAc,CACzBC,KAAM,EACNC,OAAQ,EACRC,OAAQ,EACRC,YAAa,EACbC,QAAS,EACTC,YAAa,EACbjqB,UAAW,GAGkBkqB,EAAlBA,gBAAkB,CAC7BlpD,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ACA2yB,iBACAE,uB,EAIYqG,wBApNhB,aAmBaC,GAjBAC,+EACAC,+EACAC,2EACAC,gFACAC,sFACqBC,EAArBA,8EAC0BC,EAA1BA,sFACAC,wFACAC,wFACAC,wFACAC,wFACAC,wFACAC,wFACAC,+EACAC,gFACAC,0EACAC,mFACAjB,6EACAkB,8EA4GPC,GA3G2BC,EAApBA,8EACoBC,EAApBA,8EACuBC,EAAvBA,0GACAC,iGACAC,qGAEAC,yKACAC,6KACAC,0JACAC,8JACAC,sJACAC,0JAEmBC,EAAnBA,iBAAmB,CAC9BhhB,MAAOif,EACPvqB,MAAOyrB,GAGec,EAAXA,SAAW,CACtBrsF,iFACAssF,yEACA71E,mFACA81E,uEACAC,2EACAC,2EACAjtE,kFACAktE,0EACAhyF,8EACAiF,oFACA8f,sFACAC,+FACAJ,kFACAqtE,6EACAC,2EACAC,iFACAC,uFACAC,yEACAC,sEACAC,sFACAC,oEACAtvC,oEACAuvC,sEACA5vH,6EACA6vH,gFACAC,uEACAxtE,kEACAC,kEACAC,kEACAutE,4EACAC,6EACA3tE,uEACA4tE,qEACAnrE,iEACA1H,gEACAlc,2EACAF,qFACAD,6EACAE,6EAEAmY,2EACAC,+DACA62E,mEACAlxE,iEACAc,yEACAJ,iFACAywE,qEACAC,sEACAC,uEACAl0E,2EACA8C,gEACAqxE,oEACAt3E,4EACAG,0FACAo3E,8EACAC,kFACAC,wFACAC,yFACAC,iFACAtzE,+EACAC,kFACA5E,oFACAC,uFACAi4E,mEACAC,oEACAltE,uEACAmtE,wEACAz4E,+DACAuL,6EACA1iC,+DACAkc,4EACA2zF,6EAGwBlzB,EAAbA,WAAa,CACxB17F,SAAU,sFACVQ,OAAQ,wFACRP,QAAS,uGAEqB4uH,EAAnBA,iBAAmB,0FASD,CAC7B,iBAAkB,aAClB,QAAW,eACX,wBAAyB,2BACzB,0BAA2B,6BAC3B,sBAAuB,yBACvB,iBAAkB,uBAClB,OAAU,cACV,OAAU,cACV,MAAS,eACT,eAAgB,kBAChB,eAAgB,kBAChB,QAAW,qBACX,eAAgB,iBAChB,eAAgB,iBAChB,cAAiB,mBACjB,QAAW,yBACX,oBAAqB,WACrB,KAAQ,YACR,uBAAwB,YACxB,uBAAwB,YACxB,KAAQ,mBACR,oBAAqB,+BACrB,WAAY,kBACZ,SAAY,gBACZ,gBAAiB,oBACjB,cAAe,oBAGV,SAAStE,EAAuB5vD,GACrC,IAAMx+D,GAASw+D,GAAoB,IAAK34D,cACxC,OAAQ7F,KAAQ2vH,EACZ,EAAAgD,wBAA0BhD,EAAuB3vH,GACjD,EAAA2yH,wBAxCwB,SAACn0D,GAC7B,OAASA,GAAoB,IAC1B34D,cACAqC,QAAQ,MAAO,KACfA,QAAQ,OAAQ,IAAM,OAoCK0qH,CAAsB5yH,GAmD/C,SAASuuH,EAAsBl5B,EAAiB9nF,GACrD,IAAMslH,EAAgBx9B,EAAgB/tF,MAAM,YAI5C,OAHIurH,EAAc,KAChBx9B,gCAAgD9nF,EAAhD,oBAA+EslH,EAAc,IAExFx9B,I,oeCzNT,Q,IACA,S,IACA,Q,IAEA,Q,IACA,MACA,QAKA,QAYA,SACA,QACA,QACYy9B,E,wJAAZ,OACA,Q,OACA,SACA,SACA,SACA,SAEA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,SACA,S,mDAOO,IAAM,EA2EA,EAqBA,EAgJA,EAoFP,EAeO,EAuBA,EAKA,EA/WAC,EAAuBA,EAAvBA,sBAAA,gCAAuB,mDAAOC,EAAP,sIAC5B1iH,EAAQ,UAAM5E,WACb2S,EACoC/N,EADpC+N,UAAW5H,EACyBnG,EADzBmG,YAAa1F,EACYT,EADZS,UAAW8B,EACCvC,EADDuC,YAAasB,EACZ7D,EADY6D,oBAAqBxI,EACjC2E,EADiC3E,UAAWsnH,EAC5C3iH,EAD4C2iH,WACrFC,EAAyC5iH,EAAzC4iH,qBAAsBhkH,EAAmBoB,EAAnBpB,iBACpBikH,EAA6BjkH,EAAgB+B,SAAS6H,0BAExD,UAAM0U,UAAS,IAAA6K,gCAA8B,IANb,UAQN,IAAA+6F,sBARM,cAQ5BC,EAR4B,OAS5BnoH,GAAa,IAAA+E,iBACbqjH,GAAa,IAAA7oH,wBAAuBS,GACpCqoH,EAAUF,EAAchiH,KAAI,SAACmiH,EAAaj9G,GAC9C,IAAIk9G,EAASx1H,OAAO+2B,OAAO,GAAIw+F,GAC/BC,EAAOC,QAAUD,EAAOE,mBAAqBF,EAAOC,QACpD,IAAIE,EAAa31H,OAAO+2B,OAAO,GAAIw+F,EAAYh2H,KAAM,CACnDgZ,iBAAkBC,EAAYD,iBAC9Bq9G,sBAAuBX,EAAqBY,uBAC5CC,gBAAiBb,EAAqBa,gBACtCC,0BAA2Bd,EAAqBc,0BAChDC,qBAAsBf,EAAqBe,qBAC3CC,iBAAkBjB,EAAWiB,iBAC7BC,qBAAqB,IAAAC,6BAA4BjgH,KAEnDs/G,EAAOj2H,KAAOw1H,EAAcY,EAAalW,KAAK2W,UAAUT,GACxDH,EAAOa,cAAgBd,EAAYe,aAAef,EAAYe,aAAaC,YAAc,KACzFf,EAAOgB,gBAAkBjB,EAAYe,aAAe7W,KAAK2W,UACvDp2H,OAAO+2B,OAAO,GAAIw+F,EAAYe,aAAc,CAC1CC,iBAAaj4D,KAEb,YACGk3D,EAAOc,oBACPd,EAAOiB,QACd,IAAMC,EAAkBA,GAAlBA,qBAAsBhpH,EAAUG,UAAUyE,QAAO,SAAAqJ,GAAA,OAAMA,EAAGhK,aAAegK,EAAGhK,YAAY1C,WAAc0M,EAAG7H,eAAiBwE,OAMhI,OAJAk9G,EAAOvoC,SAAWypC,EAAgBtjH,KAAI,SAAAuI,GAAA,OAAM,IAAAg7G,uBAAsBh7G,MAC9Do5G,UACKS,EAAOC,QAETD,KAEHx/G,EAAmB,wBAAIE,EAAoBF,iBAAiB5C,KAAI,SAAA+C,GAAA,OAAmBnW,OAAO+2B,OAAO,GAAI5gB,QACxG7D,QAAO,SAAA6D,GAIN,OAHAA,EAAgBygH,UAAY,wBAAIzgH,EAAgBygH,YAC7CtkH,QAAO,SAAAiE,GAAA,OAAYA,EAASsgH,YAC5BzjH,KAAI,SAAAmD,GAAA,OAAYvW,OAAO+2B,OAAO,GAAIxgB,EAAU,CAAEugH,gBAAYx4D,OACtDnoD,EAAgBygH,UAAUrrH,MAAK,SAAAgL,GAAA,OAAYA,EAASsgH,eAEzD9oH,EAAQ,CACZgpH,aAAc9pH,EAAWE,cACzB6pH,iBAAkB/pH,EAAWG,kBAC7BC,kBAAmBJ,EAAWI,kBAC9BL,cAAeC,EAAWD,cAC1BL,WAAYM,EAAWN,WACvBsqH,gBAAgB,IAAAzqH,wBAAuBS,GACvCiqH,eAAe,IAAAC,wBAAuBjhH,EAAoBF,iBAAkBq/G,IAE1EH,GACF,UAAM3lG,UAAS,IAAA6K,gCAA8B,IAzDb,kBA2D3B,CACL7Z,MAAO7b,SAASC,SAAS4b,OAAS3L,EAAY2L,MAC9C62G,QAAQ,EACR16C,aAAch4E,SAASC,SAASmC,OAChCuwH,MAAO,GACP7pG,UAAW,GACX8pG,YAAal3G,EAAU/T,SAASirH,WAChChrF,SAAU13B,EAAY03B,SACtBt2B,mBACAuhH,eAAe,aAAQzkH,EAAUD,UAAU,SAAAhT,GAAA,OAAKA,EAAE23H,SAASllH,QAAO,SAAAmlH,GAAA,OAAWA,EAAQZ,eACrFa,MAAOhzH,SAASgzH,OAAShzH,SAASgzH,MAAMt0G,SAAW1e,SAASgzH,MAAMt0G,WAAa,KAC/ErV,QACAunH,YAvEgC,mDAAvB,4CAgGAvyB,GArBgB40B,EAAhBA,eAAA,gCAAgB,8FACY,IAAnCjzH,SAASC,SAAS6b,eAA0B9b,SAASC,SAASkC,UAAWpD,OAAOm0H,uBADzD,yCAElB,MAFkB,uBAIC9C,IAJD,cAIrB+C,EAJqB,yBAMpB,UAAQF,cAAcE,IANF,kDAAhB,4CAqBY90B,EAAZA,WAAA,gCAAY,0DACSC,EADT,EACSA,OADT,IAES80B,gCAFT,aAGSC,wBAHT,MAG4B,EAAAjsE,iBAAiBI,cAH7C,MAIS8rE,wBAJT,aAKSC,gCALT,MAKoC,KALpC,MAMSC,gCANT,MAMoC,KANpC,MAOSC,+BAPT,aAQSl1B,oBART,oFAUgB,IAAnCv+F,SAASC,SAAS6b,aAVC,yCAWd,MAXc,cAajB43G,EAAW,IAAIC,SACfhmH,EAAQ,UAAM5E,WACb2S,EAAqG/N,EAArG+N,UAAWxL,EAA0FvC,EAA1FuC,YAAa3D,EAA6EoB,EAA7EpB,gBAAiBvD,EAA4D2E,EAA5D3E,UAAWunH,EAAiD5iH,EAAjD4iH,qBAAsBj4F,EAA2B3qB,EAA3B2qB,wBAC1EjqB,EAAmB9B,EAAnB8B,gBACDqK,EAAqBnM,EAAgB+B,UACvCkiH,EAA6B93G,EAAmBvC,0BAElD,UAAM0U,UAAS,IAAA6K,gCAA8B,IApBxB,UAsBK06F,IAtBL,WAsBjB+C,EAtBiB,OAuBnBK,IACFL,EAAcP,WAAaY,EAAyB5kH,IAEhDglH,EAAoB1jH,EAAY2jH,sBAAwBn7G,EAAmBnK,SAAWmN,EAAUM,wBAChGnhB,GA3BiB,gBA4BlBs4H,EA5BkB,CA6BrBC,2BACA90B,SACAg1B,mBACAM,oBACAE,eAAgBP,EAA2BA,EAAyBprF,MAAQ,OAASzsB,EAAUysB,OAASzsB,EAAU/T,SAASwgC,MAC3H4rF,YAAaP,EAA2BA,EAAyBQ,SAAWt4G,EAAU/T,SAASssH,oBAC/FC,iBAAkBx4G,EAAU/T,SAASusH,iBACrCC,iBAAmBp1H,OAAOg1H,YAAch1H,OAAOg1H,YAAYK,OAAWpjH,KAAKouE,MAAgB,IAAVpuE,KAAKqnE,IAAc,EACpGg8C,WAAY34G,EAAU/T,SAASmhC,OAC/BwrF,YAAat0H,SAASC,SAAS4b,OAAS3L,EAAY2L,OACpDlO,MAAO3E,EAAU2E,MACjB4mH,SAAwC,aAA9B,IAAAvxH,2BAC4B,IAAlChD,SAASC,SAASqC,aAAuD,IAAlCtC,SAASC,SAASqC,YAAoB,MAAQ,MACnD,IAAlCtC,SAASC,SAASqC,aAAuD,IAAlCtC,SAASC,SAASqC,YAAoB,MAAO,KACxFA,YAAatC,SAASC,SAASqC,YAC/BD,gBAAgB,IAAAyX,yBAAuB,IAAA9W,4BACvCT,eAAgBvC,SAASC,SAASsC,eAClC8wH,mBACAn4G,SAAUxC,EAAmBwC,SAC7Bs5G,sBAAwBnmH,GAAmBA,EAAgBS,WAAc,EACzE2lH,kBAAoBpmH,GAAmBA,EAAgBQ,cAAiB,EACxE8jH,MAAO,GACP+B,cAAe10H,SAASC,SAAS2b,UACjC+4G,eAAgB30H,SAASC,SAAS20H,uBAAwB,EAC1DC,SAAU3kH,EAAY2kH,SACtB/rG,UAAW5Y,EAAY4Y,UAAUlb,QAAO,SAAA2b,GAAA,OAAQA,EAAIF,YAAU3a,KAAI,SAACtR,GACjE,MAAO,CACLysB,WAAYzsB,EAAEysB,YAAc,EAC5BxsB,KAAMD,EAAEC,KACR6rB,KAAM9rB,EAAE8rB,KACRC,QAAS/rB,EAAE+rB,QACXH,IAAK5rB,EAAE4rB,IACP8rG,YAAa,UAAO/tH,gBAAkB3J,EAAEwrB,KAAKmsG,QAAU,SAG3Dx8G,YAAawiG,KAAK2W,UAAU1oH,EAAUuP,eAExCvY,SAASC,SAAS20H,sBAAuB,EAErC,UAAOntH,aACT7I,QAAQ4B,IAAI,0BAA2B3F,GAGzCqV,EAAY4Y,UAAU9jB,SAAQ,SAAAukB,GAC5BmqG,EAASsB,OAAO,QAASzrG,EAAIX,KAAMW,EAAIlsB,SAGzCq2H,EAASsB,OAAO,OAAQja,KAAK2W,UAAU72H,IAEnCo6H,EAAmB,MACnBp6H,EAAK+3H,WA/Ec,qBAgFCl3G,EAAUw5G,sBAhFX,sBAiFjBx5G,EAAUy5G,cAjFO,0CAkFX,IAAAC,eAAa,GAlFF,kDAkFY,GAlFZ,0BAgFfD,EAhFe,KAmFrBF,EAAmBE,EAAcziH,MAAK,SAAA2iH,GAAA,OAAQA,EAAIzmH,KAAO/T,EAAK+3H,cAnFzC,WAqFnB0C,EAAU,KAAMC,EAAc,KAC7Bv1H,SAASC,SAASo4F,eAtFA,mCAuFI,IAAAm9B,mBAAkBjC,EAA0B0B,GAvFhD,eAuFfQ,EAvFe,iBAwFLA,EAAWC,SAxFN,QAwFrBJ,EAxFqB,OAyFrB5B,EAASsB,OAAO,UAAWM,GAzFN,YA2FnB9E,EA3FmB,wBA4FrB,UAAM3lG,UAAS,IAAA6K,gCAA8B,IA5FxB,WA6FK,IAAA8/F,mBAAkBjC,EAA0B0B,GA7FjD,eA6FfU,EA7Fe,iBA8FDA,EAAYD,SA9FX,QA8FrBH,EA9FqB,OA+FrB7B,EAASsB,OAAO,cAAeO,GA/FV,iCAkGhB,UAAQl3B,UAAUr+F,SAASC,SAASC,UAAYrF,EAAO64H,GAC3Dj7F,KADI,+CACC,WAAOswE,GAAP,0FACE3K,EAAwC,YAAzB,aAAO2K,EAASluG,MAAoBkuG,EAASluG,KAAOkgH,KAAKC,MAAMjS,EAASluG,MAC7F,UAAMgwB,UAAS,IAAAd,UAASq0E,EAAaviF,QACjCuiF,EAAat1E,WAAas1E,EAAat1E,UAAUztB,QACnD,UAAMwvB,UAAS,IAAApB,wBAAuB20E,EAAat1E,YAG/C8sG,GAAwB,IAAA/8F,0BAAyBngB,EAAoB63G,EAAqBsF,eAE1FC,EAA8Bp9G,EAAmBuD,0BAA4Bqc,EAAwBC,qCACrGw9F,EAAmBr9G,EAAmB2f,iBAAmB3f,EAAmBuD,yBAA2Bqc,EAAwBC,sCAEjIy9F,EAAa,IACbV,EAbA,mCAcuB,IAAAE,mBAAkBjC,EAA0B0B,GAdnE,eAcIQ,EAdJ,iBAecA,EAAWC,SAfzB,QAeFJ,EAfE,OAgBFU,EAAa/3G,IAAI24E,gBAAgB0+B,GAhB/B,eAmBAA,IAAW/2B,IAAgBw3B,GAAqBD,GAC7CF,IAAyBrF,EAAqB0F,mBAAuBv9G,EAAmBuf,oBAC7Fl5B,OAAO6+F,KAAKo4B,EAAY,UACxB53B,EAAa83B,gBAAiB,GAEhC,UAAMrrG,UAAS,IAAAsrG,eAAcH,IAE7B53B,EAAa/0F,MAAQxO,EAAKwO,MA1BtB,kBA4BG+0F,GA5BH,mDADD,uDA+BJnlE,OAAM,SAAAp6B,GACL,IAAMu3H,EAAgB/3B,EAAUhgG,UAAV,EAAqB,CACzCigG,SACA80B,2BACAC,mBACAC,mBACAC,2BACAC,6BAIF,MAFA,IAAA6C,kBAAiB,UAAU,IAAIC,MAAMz3H,GAAQ,GAAIu3H,EAAe3C,IAChE,IAAAv6B,iBACM,IAAIo9B,MAAMz3H,OA5IG,mDAAZ,8CAkOP03H,GAlFyBC,EAAlBA,iBAAA,gCAAkB,0GACN,UAAQC,kBADF,cACvB1tB,EADuB,SAEbv6F,MAAMC,QAAQs6F,EAASluG,OACrC,UAAMgwB,UAAS,IAAAoL,aAAY8yE,EAASluG,OAHT,kBAKtBmC,QAAQC,WALc,kDAAlB,4CAQ4By5H,EAA5BA,0BAA4B,WAAmE,IAAlEC,EAAkE,uDAAlD,GAAIC,EAA8C,wDAAlBC,EAAkB,aACpGC,EAAoB,EAAAj2H,gBAAkB,IAAS81H,EACrD,OAAO,UAAQD,0BAA0BI,EAAmBD,GACzDp+F,MAAK,SAAA2lE,GAEJ,IAAKA,EAAavjG,MAAQujG,EAAavjG,KAAKgE,MAAO,CACjD,IAAMk4H,EAAgB34B,EAAavjG,KAAqCujG,EAAavjG,KAAKgE,MAAhD,4BAG1C,MAFA,IAAAw3H,kBAAiB,iBAAiBU,IAClC,IAAA79B,iBACM,IAAIo9B,MAAMS,GAmBhB,GAjBKH,IACH,UAAM/rG,UAAS,IAAAoL,aAAYmoE,EAAavjG,KAAK+hB,cAAgB,KAE7D,UAAMiO,UAAS,IAAAgK,yBAAwBupE,EAAavjG,KAAKg4H,iBAE3D,UAAMhoG,UAAS,IAAA7C,iBAAgBo2E,EAAavjG,KAAKoV,eAC7CmuF,EAAavjG,KAAKm8H,WACpB54B,EAAavjG,KAAKm8H,UAAW,IAAAC,oBAAmB74B,EAAavjG,KAAKm8H,SAAUH,GAQ5E,UAAMhsG,UAAS,IAAAkD,8BAA6BqwE,EAAavjG,KAAKm8H,SAAUH,KAEtEz4B,EAAavjG,KAAKq8H,YAAc94B,EAAavjG,KAAKs8H,aAAc,CAClE,IAAMp2B,GAAa,IAAAq2B,qBAAoBh5B,EAAavjG,MAAM,EAAOg8H,GACjE,UAAMhsG,UAAS,IAAAwsG,eAAct2B,IAW/B,OALsB,MAAlB41B,IACF,UAAM9rG,UAAS,IAAAysG,sBAAqBt3H,SAASC,SAASoC,iBACtD,UAAMwoB,UAAS,IAAAmE,kBAAiBovE,EAAavjG,KAAKm8H,SAAStoH,KAAI,SAAAusF,GAAA,OAAUA,EAAOrsF,SAG3EwvF,EAAavjG,QAGvBo+B,OAAM,SAACp6B,IACN,IAAAq6F,iBACAt6F,QAAQ4B,IAAI,4BAA6B3B,OAInB04H,EAAfA,aAAe,WAC1B,OAAO,UAAQC,iBACZ/+F,MAAK,SAAA2lE,GAEJ,IAAKA,EAAavjG,MAAQujG,EAAavjG,KAAKgE,MAG1C,OAFA,UAAMgsB,UAAS,IAAAkD,8BAA6B,KAC5CnvB,QAAQC,MAAM,kDACP,GAEP,IAAMmvB,EAAY+sF,KAAKC,MAAM5c,EAAavjG,MAE1C,OADA,UAAMgwB,UAAS,IAAAkD,8BAA6BC,IACrCA,KAGViL,OAAM,SAACp6B,IACN,IAAAq6F,iBACAt6F,QAAQ4B,IAAI,iBAAkB3B,OAIN44H,EAAjBA,eAAiB,SAAC57G,EAAO67G,GACpC,OAAO,UAAQC,aAAa97G,EAAO67G,IAGb,CAAC,aAAc,QAAS,WAE1CE,GAAA,gCAA2B,WAAOC,GAAP,kFACL,UAAM9uH,WAAzBwD,gBACa+B,SAASwpH,2BAA6BD,GACrDrpH,MAAMC,QAAQopH,IAAqBA,EAAiBx8H,QAH1B,oBAIzBk7H,EAAgB1vH,MAAK,SAAAuQ,GACvB,OAAOygH,EAAiBpzH,OAAM,SAAA8F,GAAA,OAAaA,EAAU6M,YAAcA,QALxC,yCAOpBygH,GAPoB,wBASA,IAAAE,sBAAqBF,GATrB,OASvBG,EATuB,QAU7B,IAAAC,2BAA0BJ,EAAkBG,GAVf,gCAYxBH,GAZwB,kDAA3B,6CAeuB3P,EAAhBA,eAAA,gCAAgB,WAAOxqG,GAAP,MAAmBw6G,EAAnB,uDAAiC,KAAMC,EAAvC,wDAA0EtB,EAA1E,oGACI,UAAQuB,8BAA8B16G,EAAYw6G,EAAaC,EAA2BtB,GAD9F,cACrBgB,EADqB,gBAErBD,EAAyBC,EAAmBA,EAAiBh9H,KAAO,IAF/C,gCAGpBg9H,GAHoB,kDAAhB,6CAMcQ,EAAdA,YAAc,SAACh2H,GAC1B,OAAO,UAAQi2H,4BAA4Bj2H,IAgBXk2H,EAArBA,oBAAA,gCAAqB,WAAOnhH,EAAWsrB,EAAM81F,EAAUh8G,GAAlC,MAAgDquE,EAAhD,uDAA6D,GAAIpoD,EAAjE,aAAqFg2F,EAArF,aAAsGC,EAAtG,aAA0Hr2H,EAA1H,oGACD,UAAQs2H,mCAAmCvhH,EAAWsrB,EAAM81F,EAAUh8G,EAAcquE,EAAYpoD,EAAoBg2F,EAAiBC,EAAoBr2H,GADxJ,cAC1Bw1H,EAD0B,gBAE1BD,EAAyBC,GAFC,gCAGzBA,GAHyB,kDAArB,mDAKyBe,EAAzBA,wBAAA,gCAAyB,WAAOxhH,EAAWqf,EAAUoiG,GAA5B,+FACP,UAAQC,uCAAuC1hH,EAAWqf,EAAUoiG,GAD7D,UAC9BE,EAD8B,OAEpCn6H,QAAQ4B,IAAI,iBAAkBu4H,IAC1BA,EAAel+H,KAAKgE,MAHY,uBAI3BA,EAASk6H,EAAel+H,KAAxBgE,OACP,IAAAw3H,kBAAiBx3H,GALiB,kBAM3B,CAAChE,KAAM,KANoB,gCAQ7Bk+H,GAR6B,kDAAzB,iDAWgBC,EAAhBA,cAAgB,SAACC,GAAmC,IAAtBC,EAAsB,wDACzDvrH,EAAQ,UAAM5E,WACbmH,EAAevC,EAAfuC,YACP,OAAO,UAAQ8oH,cAAcE,EAAYD,GAAZ,gBACxBA,EADwB,CAE3BtwF,QAASswF,EAAYtwF,QAAQtrC,KAC7B26E,aAAch4E,SAASC,SAASmC,OAChCyZ,MAAO7b,SAASC,SAAS4b,OAAS3L,EAAY2L,SAE7C4c,MAAK,SAAAswE,GAKJ,GAJA,UAAMl+E,SAAS,CACb7Y,KAAMm+G,EAAY7nD,wBAClB7gD,QAASshF,EAASluG,OAEhBq+H,EAAW,CACb,IAAMthD,EAAMmxB,EAASluG,KACrB,GAAI+8E,EAAIuhD,qBAAgE,MAAzCvhD,EAAIuhD,oBAAoBC,aAAsB,CAE3Er6H,OAAOm5B,iBAAkB,EACzB,IAAM89F,EAAa,UAAMjtH,WAAWunH,WAAW0F,WAC3CA,GACFj3H,OAAO6+F,KAAKo4B,EAAY,cAErB,CACL,IAAIqD,EAAM,GACNzhD,GAAQA,EAAIuhD,qBAAuBvhD,EAAIuhD,oBAAoBG,QAAU1hD,EAAIuhD,oBAAoBG,OAAOj+H,OAAS,GAAMu8E,EAAI/4E,MACzHw6H,EAAMzhD,EAAIuhD,oBAAoBG,OAAO,GAAGC,WAAa3hD,EAAI/4E,MAChD+4E,GAAOA,EAAIj7B,SAAWi7B,EAAIj7B,QAAQ68E,eAAen+H,OAAS,IACnEg+H,EAAMzhD,EAAIj7B,QAAQ68E,eAAe,GAAGtwG,MAGtC,IAAIuwG,GAAS,aAAYJ,EAAK,KAC1BI,GAAU,IACZJ,GAAM,aAAKA,EAAI/0H,OAAOm1H,EAAS,MAGjC,IAAApD,kBAAiBgD,EAAK,eAG1B,OAAOtwB,EAASluG,QAEjBo+B,OAAM,SAAAp6B,GAGL,MAFA,IAAAw3H,kBAAiB,UAAU,IAAIC,MAAMz3H,KACrC,IAAAq6F,iBACM,IAAIo9B,MAAMz3H,OAIS66H,EAAlBA,gBAAkB,SAAChvC,EAAYroF,GAC1C,OAAO,UAAQq3H,gBAAgBhvC,EAAYroF,GACxCo2B,MAAK,SAAAswE,GACJ,GAAKA,EAASluG,OAAQkuG,EAASluG,KAAKgE,OAAU2P,MAAMC,QAAQs6F,EAASluG,MAI9D,CACL,IAAM+nB,EAAemmF,EAASluG,KAAK+S,QAAO,SAAAsV,GACxC,SAAIA,EAAWy2G,YAAX,cAGwB,QAApBz2G,EAAW7lB,MAAmBmR,MAAMC,QAAQyU,EAAW24E,gBAAkB34E,EAAW24E,cAAcxgG,UAM5G,OAJI,UAAOoM,aACT7I,QAAQ4B,IAAI,qBAAmBoiB,GAG1BA,EAZP,OADAhkB,QAAQC,MAAM,kDACP,MAeVo6B,OAAM,SAAAp6B,GAGL,MAFA,IAAAw3H,kBAAiB,UAAU,IAAIC,MAAMz3H,KACrC,IAAAq6F,iBACM,IAAIo9B,MAAMz3H,OAIoB+6H,EAA7BA,2BAA6B,SAA7BA,IAA0E,IAA5C5hD,EAA4C,uDAA7Bh4E,SAASC,SAASmC,OAC1E,OAAO,UAAQw3H,2BAA2B5hD,GACvCv/C,MAAK,SAAAswE,GACJ,GAAKA,GAAaA,EAASluG,OAAQkuG,EAASluG,KAAKgE,MAE1C,CAED2P,MAAMC,QAAQs6F,EAASluG,KAAKg/H,gBAC9B,UAAMhvG,UAAS,IAAAivG,4BAA2B/wB,EAASluG,KAAKg/H,gBAEtD9wB,EAASluG,KAAKwT,iBAChB,UAAMwc,UAAS,IAAAuK,oBAAmB2zE,EAASluG,KAAKwT,kBAE9CrO,SAASC,SAASif,eAAiB6pF,EAASluG,KAAKkkB,gBACA,0BAAhDgqF,EAASluG,KAAKkkB,eAAeg7G,iBAChChxB,EAASluG,KAAKkkB,eAAei7G,yBAA2B,yBAE1D,IAAMC,EAAelxB,EAASluG,KAAKkkB,gBAAkBgqF,EAASluG,KAAKkkB,eAAek7G,cAC9E,IAAAC,aAAYnxB,EAASluG,KAAKkkB,eAAek7G,cACzC,GACAA,GACF,UAAMpvG,UAAS,IAAAsvG,gBAAeF,IAEhC,UAAMpvG,UAAS,IAAAqK,mBAAkB6zE,EAASluG,KAAKkkB,sBAnB/CngB,QAAQC,MAAM,kEAsBjBo6B,OAAM,SAAAp6B,GAIL,MAFA,IAAAw3H,kBAAiB,0CAA2C,GAAIuD,EAA2Bv7H,UAA3B,EAAsC25E,KACtG,IAAAkhB,iBACM,IAAIo9B,MAAMz3H,OAIMu7H,EAAfA,aAAe,WAA6C,IAA5CpiD,EAA4C,uDAA7Bh4E,SAASC,SAASmC,OAC5D,OAAO,UAAQi4H,uBAAuBriD,GACnCv/C,MAAK,SAAAswE,GACJ,GAAKA,GAAaA,EAASluG,OAAQkuG,EAASluG,KAAKgE,OAI/C,GADAD,QAAQ4B,IAAI,kCAAmCuoG,GAC3Cv6F,MAAMC,QAAQs6F,EAASluG,MAAO,CAChC,IAAMyW,EAAmBy3F,EAASluG,KAC/B6T,KAAI,SAAA+C,GAUH,OATAA,EAAgBygH,UAAY1jH,MAAMC,QAAQgD,EAAgBygH,WACtDzgH,EAAgBygH,UAAUtkH,QAAO,SAAA0sH,GAAA,OAAOA,EAAIC,WAC5C,GACJ9oH,EAAgBygH,UAAYzgH,EAAgBygH,UAAUxjH,KAAI,SAAAmD,GAIxD,OAHI,IAAA2oH,oBAAmB3oH,KACrBA,EAASsgH,UAAW,GAEftgH,KAEFJ,KAER7D,QAAO,SAAA6D,GAAA,OAAmBA,EAAgBygH,UAAU72H,UACvD,UAAMwvB,UAAS,IAAA4vG,qBAAoBnpH,UAlBrC1S,QAAQC,MAAM,+DAwBc67H,EAAvBA,qBAAuB,SAAvBA,IAAmD,IAA3BC,EAA2B,wDAC1DC,EAAU,GACd,OAAO56H,SAASC,SAASoC,gBACvB,IAAK,WACL,IAAK,KACL,IAAK,UACL,IAAK,SACHu4H,EAAU,KACV,MACF,IAAK,UACL,IAAK,UACHA,EAAU,KACV,MACF,QACEA,EAAU56H,SAASC,SAASoC,eAGhC,OAAO,UAAQw4H,kBAAkBD,EAASD,GACvCliG,MAAK,SAAAqiG,GACJ,OAAI96H,SAASC,SAASC,YAAay6H,IAGnC,UAAM9vG,UAAS,IAAAmM,eAAc8jG,EAASjgI,OAC/BigI,MAER7hG,OAAM,SAAAp6B,GAIL,OAHI87H,IACF,IAAAtE,kBAAiBx3H,EAAO,GAAI67H,EAAqBr8H,UAArB,GAAgC,IAEvDQ,MAI6Bk8H,EAA7BA,2BAA6B,WAAuD,IAAtD/iD,EAAsD,uDAAvCh4E,SAASC,SAASmC,OAAQ44H,EAAa,aAC/F,OAAO,UAAQC,eAAejjD,EAAcgjD,GACzCviG,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GAGL,MAFA,IAAAw3H,kBAAiB,UAAU,IAAIC,MAAMz3H,KACrC,IAAAq6F,iBACM,IAAIo9B,MAAMz3H,Q,gFC9lBAyzG,EAATA,OAAS,CACpB4oB,IAAK,UAELC,KAAM,UACNC,MAAO,UACPC,MAAO,UACPC,MAAO,UACPC,MAAO,UACPhpB,MAAO,UACPh2E,MAAO,WA8D0Bi/F,EAAtBA,oBAAsB,CACjC,eAAgB,UAChB,wBAAyB,UACzB,sBAAuB,UACvB,uBAAwB,UACxB,6BAA8B,W,UAhEX,CACnB,GAAM,CACJC,QAAS,UACTC,cAAe,UACflpB,OAAQ,UACRmpB,aAAc,UACdC,WAAY,aAEd,KAAQ,CACNH,QAAS,UACTC,cAAe,UACflpB,OAAQ,UACRmpB,aAAc,UACdC,WAAY,kBASd,QAAW,CACTH,QAAS,UACTC,cAAe,UACflpB,OAAQ,UACRmpB,aAAc,UACdC,WAAY,qBAEd,KAAQ,CACNH,QAAS,UACTC,cAAe,UACflpB,OAAQ,UACRmpB,aAAc,UACdC,WAAY,aAEd,MAAS,CACPH,QAAS,UACTC,cAAe,UACflpB,OAAQ,UACRmpB,aAAc,UACdC,WAAY,aAEd,GAAM,CACJH,QAAS,UACTC,cAAe,UACflpB,OAAQ,UACRmpB,aAAc,UACdC,WAAY,gBAEd,OAAU,CACRH,QAAS,UACTC,cAAe,UACflpB,OAAQ,UACRmpB,aAAc,UACdC,WAAY,sB,oFClBA7+F,oBAAT,SAA6BC,GAClC,OAAQA,GACN,KAAKC,EAAYC,WACf,MAAO,SACT,KAAKD,EAAYE,aACf,MAAO,a,EAGGC,oBAAT,SAA6BC,GAClC,OAAQA,GACN,IAAK,SACH,OAAOJ,EAAYC,WACrB,IAAK,WACH,OAAOD,EAAYE,eA9DCG,EAAbA,WAAa,CACxBgkE,MAAO,EACPsL,MAAO,GAGyBjuE,EAArBA,mBAAqB,CAChCC,IAAK,MACL0iE,MAAO,KACPsL,MAAO,MAGiB1sE,EAAbA,WAAa,CACxBC,uBAAwB,MACxBC,yBAA0B,QAC1BC,yBAA0B,QAC1BC,mBAAoB,SAff,IAkBMrD,EAAcA,EAAdA,YAAc,CACzBC,WAAY,aACZC,aAAc,uBAGWqD,EAAdA,YAAc,CACzBC,SAAU,WACVC,OAAQ,UAGgBm7F,EAAbA,WAAa,CACxBn7F,OAAQ,EACRD,SAAU,GAGkBE,EAAjBA,eAAiB,CAC5BC,MAAO,EACPC,KAAM,GAGmBi7F,EAAdA,YAAc,CACzBp7F,OAAQ,SACRD,SAAU,WACV7B,IAAK,OAGqBx0B,EAAfA,aAAe,CAC1B02B,OAAQ,EACRz2B,QAAS,GAoBuBw1B,EAArBA,mBAAqB,CAChCC,cAAe,gBACfC,gBAAiB,kBACjBC,YAAa,cACbC,WAAY,cAGqB2B,EAAtBA,oBAAsB,CAAC,OAAQ,YAAa,WAAY,SAElCC,EAAtBA,oBAAsB,CAAC,WAAY,gBAAiB,YAAa,YAAa,cAAe,iBAAkB,gBAEhFC,EAA/BA,6BAA+B,CAAC,aAAc,SAAU,aAAc,QAAS,SAAU,YAAa,WAAY,W,0FC7E3G,CAClBi6F,iBAAkB,mBAClBC,qBAAsB,uBACtBC,aAAc,eACdC,kBAAmB,oBACnBC,mBAAoB,qBACpBC,cAAe,gBACfC,iBAAkB,mBAClBC,kBAAmB,oBACnBC,kBAAmB,oBACnBC,4BAA6B,8BAC7BC,mBAAoB,qBACpBC,uBAAwB,yBACxBC,gCAAiC,kCACjCC,oBAAqB,sBAErBC,iBAAkB,mBAClBC,cAAe,gBACfC,aAAc,KACdnlG,cAAe,kB,+lBCnBjB,QACA,Q,IASA,O,IACA,Q,IACA,O,IACA,MACA,QACA,Q,IACA,Q,IACA,Q,IACA,O,IACA,Q,IACA,QACA,SACA,S,IACA,OACA,S,mDAGO,IAAMolG,EAAaA,EAAbA,WAAa,CACxBC,KAAM,OACNC,KAAM,OACNC,MAAO,QACPC,MAAO,QACPtgD,UAAW,YACXF,UAAW,YACXC,UAAW,YACXE,UAAW,YACXsgD,UAAW,aAGQC,G,oIAMoBC,GACrC,IAAIC,EAAmBD,EAAYlrE,WAC/BtY,EAAS,UAAUgY,YACnB0rE,EAAqB,GA+BzB,OA9BAD,EAAiBx4H,SAAQ,SAAC04H,GACxB3jF,EAAO/0C,SAAQ,SAASw7C,GAClBA,aAAiBA,EAAjBA,UAA+BA,EAAMoT,UAAYpT,EAAM5xC,KAAO2uH,EAAY3uH,IACvD4xC,EAAM6R,WACZrtD,SAAQ,SAAC24H,GACtB,IAAIC,GAAgC,IAAAzsE,eAAcusE,EAAgBrlE,KAAKr3C,EAAG08G,EAAgBrlE,KAAKp3C,EAAGy8G,GAC9FG,GAA8B,IAAA1sE,eAAcusE,EAAgBv+D,GAAGn+C,EAAG08G,EAAgBv+D,GAAGl+C,EAAGy8G,GACxFI,GAA8B,IAAA3sE,eAAcwsE,EAActlE,KAAKr3C,EAAG28G,EAActlE,KAAKp3C,EAAG08G,GACxFI,GAA4B,IAAA5sE,eAAcwsE,EAAcx+D,GAAGn+C,EAAG28G,EAAcx+D,GAAGl+C,EAAG08G,GAElFK,GAAoB,IAAA18C,mBACtBs8C,EAA8B58G,EAAG48G,EAA8B38G,EAC/D48G,EAA4B78G,EAAG68G,EAA4B58G,EAC3D68G,EAA4B98G,EAAG88G,EAA4B78G,EAC3D88G,EAA0B/8G,EAAG+8G,EAA0B98G,GACvD,GAGE+8G,IAKDP,EAAmBj9E,EAAM5xC,IAAM6uH,EAAmBj9E,EAAM5xC,KAAO,IAAIjT,KAAKqiI,YAO5EP,I,gDAQwBQ,EAAQC,GACvC,IAAIV,EAAmBS,EAAO5rE,WAC1BorE,EAAqB,GACrBU,EAAiBD,EAAO7rE,WA2B5B,OA1BAmrE,EAAiBx4H,SAAQ,SAAC04H,GACxBS,EAAen5H,SAAQ,SAAC24H,GACtB,IAAIC,GAAgC,IAAAzsE,eAAcusE,EAAgBrlE,KAAKr3C,EAAG08G,EAAgBrlE,KAAKp3C,EAAGy8G,GAC9FG,GAA8B,IAAA1sE,eAAcusE,EAAgBv+D,GAAGn+C,EAAG08G,EAAgBv+D,GAAGl+C,EAAGy8G,GACxFI,GAA8B,IAAA3sE,eAAcwsE,EAActlE,KAAKr3C,EAAG28G,EAActlE,KAAKp3C,EAAG08G,GACxFI,GAA4B,IAAA5sE,eAAcwsE,EAAcx+D,GAAGn+C,EAAG28G,EAAcx+D,GAAGl+C,EAAG08G,GAElFK,GAAoB,IAAAI,wBACtBR,EAA8B58G,EAAG48G,EAA8B38G,EAC/D48G,EAA4B78G,EAAG68G,EAA4B58G,EAC3D68G,EAA4B98G,EAAG88G,EAA4B78G,EAC3D88G,EAA0B/8G,EAAG+8G,EAA0B98G,GACvD,GAGE+8G,IAMDP,EAAmBS,EAAOtvH,IAAM6uH,EAAmBS,EAAOtvH,KAAO,IAAIjT,KAAKqiI,SAK1EP,I,kDAG0BQ,EAAQC,GAIzC,IAHA,IAAIG,EAAYJ,EAAOvtE,YAD0B,EAI9B,EAFE,IAAAS,eAAcktE,EAAUr9G,EAAGq9G,EAAUp9G,EAAGg9G,IAE7D,mBAAqC,CAAhC,IAAIK,OACP,IAAI,IAAAv7C,oBAAmBu7C,EAAQJ,GAC7B,OAAO,EAGX,OAAO,I,2CAOmBX,GAC1B,IAAIC,EAAmBD,EAAYlrE,WAC/BtY,EAAS,UAAUgY,YACnBwsE,EAAY,GAyChB,OAxCAf,EAAiBx4H,SAAQ,SAAC04H,GACxB,IAAIE,GAAgC,IAAAzsE,eAAcusE,EAAgBrlE,KAAKr3C,EAAG08G,EAAgBrlE,KAAKp3C,EAAGy8G,GAElG3jF,EAAO/0C,SAAQ,SAASw7C,GAClBA,aAAiBA,EAAjBA,UAA+BA,EAAMoT,UAAYpT,EAAM5xC,KAAO2uH,EAAY3uH,IACvD4xC,EAAM6R,WACZrtD,SAAQ,SAAC24H,GACtB,IAAIG,GAA8B,IAAA3sE,eAAcwsE,EAActlE,KAAKr3C,EAAG28G,EAActlE,KAAKp3C,EAAG08G,GACxFI,GAA4B,IAAA5sE,eAAcwsE,EAAcx+D,GAAGn+C,EAAG28G,EAAcx+D,GAAGl+C,EAAG08G,GAElFtwE,GAAW,IAAA0sB,4BACb6jD,EAA8B58G,EAAG48G,EAA8B38G,EAC/D68G,EAA4B98G,EAAG88G,EAA4B78G,EAC3D88G,EAA0B/8G,EAAG+8G,EAA0B98G,GAGzD,GAAIosC,GAAyB,IAAbA,EAAgB,CAC9B,IAAImxE,EAAgBh+E,EAAMi+E,kBAAkBd,GACxCe,EAAO1tH,KAAK4pE,IAAIvtB,GAEpB,GAAIqxE,EAAO,UAAWzxE,YAAa,CACjC,IAAI0xE,GAAe,IAAA/lD,aAAYklD,EAA6BC,GACxD7hI,EAAS,CACXskD,MAAOA,EACPmV,KAAM+nE,EACN9qE,MAAOgrE,EACPvwE,WACAqxE,OACAE,MAAOhB,EAA8B58G,EAAI29G,EAAa39G,EACtD69G,MAAOjB,EAA8B38G,EAAI09G,EAAa19G,GAExDs9G,EAAU/9E,EAAM5xC,IAAM2vH,EAAU/9E,EAAM5xC,KAAO,IAC5C2vH,EAAU/9E,EAAM5xC,IAAI4vH,EAAc/hD,aAAe8hD,EAAU/9E,EAAM5xC,IAAI4vH,EAAc/hD,cAAgB,IAAI9gF,KAAKO,cAQlHqiI,I,0CAOkBhB,GACzB,IAAIC,EAAmBD,EAAYlrE,WAC/BxO,EAAQ,UAAqBA,MAAMi7E,eACnCP,EAAY,GAgDhB,OA/CAf,EAAiBx4H,SAAQ,SAAC04H,GACxB,IAAIE,GAAgC,IAAAzsE,eAAcusE,EAAgBrlE,KAAKr3C,EAAG08G,EAAgBrlE,KAAKp3C,EAAGy8G,GAElG75E,EAAM7+C,SAAQ,SAASm3C,GACrB,GAAIA,aAAgBA,EAAhBA,QAAsB,CAExB,IAAIgiF,EAAiBhiF,EAAK4iF,wBAG1BxB,EAAYY,eAAiBA,EAE7BA,EAAen5H,SAAQ,SAAC24H,GACtB,IAAIG,EAA8BH,EAActlE,KAAKlH,gBACjD4sE,EAA4BJ,EAAcx+D,GAAGhO,gBAE7C9D,GAAW,IAAA0sB,4BACb6jD,EAA8B58G,EAAG48G,EAA8B38G,EAC/D68G,EAA4B98G,EAAG88G,EAA4B78G,EAC3D88G,EAA0B/8G,EAAG+8G,EAA0B98G,GAGzD,GAAIosC,EAAU,CACZ,IAAM2xE,EAAkB1B,EAAY2B,mBAAmBtB,EAActlE,KAAMslE,EAAcx+D,IAAI,GAEzFu/D,EAAO1tH,KAAK4pE,IAAIvtB,GAEpB,GAAIqxE,EAAO,UAAWzxE,YAAa,CACjC,IAAI0xE,GAAe,IAAA/lD,aAAYklD,EAA6BC,GACxD7hI,EAAS,CACXskD,MAAOrE,EACPwZ,KAAM+nE,EACN9qE,MAAOgrE,EACPvwE,WACAqxE,OACAE,MAAOhB,EAA8B58G,EAAI29G,EAAa39G,EACtD69G,MAAOjB,EAA8B38G,EAAI09G,EAAa19G,GAExDs9G,EAAUpiF,EAAKvtC,IAAM2vH,EAAUpiF,EAAKvtC,KAAO,IAC1C2vH,EAAUpiF,EAAKvtC,IAAIowH,GAAmBT,EAAUpiF,EAAKvtC,IAAIowH,IAAoB,IAAIrjI,KAAKO,eAS5FqiI,I,0CAOkBW,GACzB,IAAInlF,EAAS,UAAUgY,YACnBwsE,EAAY,GA8ChB,OA5CAxkF,EAAO/0C,SAAQ,SAASw7C,GAClBA,aAAiBA,EAAjBA,UAA+BA,EAAMoT,UAClBpT,EAAM6R,WACZrtD,SAAQ,SAAC24H,GACtB,IAAIG,GAA8B,IAAA3sE,eAAcwsE,EAActlE,KAAKr3C,EAAG28G,EAActlE,KAAKp3C,EAAG08G,GACxFI,GAA4B,IAAA5sE,eAAcwsE,EAAcx+D,GAAGn+C,EAAG28G,EAAcx+D,GAAGl+C,EAAG08G,GAElFtwE,GAAW,IAAAstB,oCACbukD,EAAsBl+G,EAAGk+G,EAAsBj+G,EAC/C68G,EAA4B98G,EAAG88G,EAA4B78G,EAC3D88G,EAA0B/8G,EAAG+8G,EAA0B98G,GAGzD,GAAIosC,EAAU,CACZ,IAAImxE,EAAgBh+E,EAAMi+E,kBAAkBd,GACxCe,EAAOrxE,EACX,OAAQmxE,EAAc/hD,aACpB,IAAK,WACHiiD,EAAOQ,EAAsBl+G,EAAI88G,EAA4B98G,EAAIqsC,GAAYA,EAC7E,MACF,IAAK,aACHqxE,EAAOQ,EAAsBj+G,EAAI68G,EAA4B78G,EAAIosC,GAAYA,EAOjF,GAAIA,EAAW,UAAWJ,YAAa,CACrC,IAAI/wD,EAAS,CACXskD,MAAOA,EACPmV,KAAMgoE,EACN/qE,MAAOssE,EACP7xE,WACAqxE,QAEFH,EAAU/9E,EAAM5xC,IAAM2vH,EAAU/9E,EAAM5xC,KAAO,IAC5C2vH,EAAU/9E,EAAM5xC,IAAI4vH,EAAc/hD,aAAe8hD,EAAU/9E,EAAM5xC,IAAI4vH,EAAc/hD,cAAgB,IAAI9gF,KAAKO,WAOhHqiI,I,+CAOuBhB,GAC9B,IAAIC,EAAmBD,EAAYlrE,WAC/BoM,EAAoB,UAAM11D,WAAWwH,cAAckuD,kBACnD8/D,EAAY,GAqChB,OApCAf,EAAiBx4H,SAAQ,SAAC04H,GACxB,IAAIE,GAAgC,IAAAzsE,eAAcusE,EAAgBrlE,KAAKr3C,EAAG08G,EAAgBrlE,KAAKp3C,EAAGy8G,GAElGj/D,EAAkBz5D,SAAQ,SAASw5D,GACjC,IAAKA,EAAa5K,SAEhB,IADA,IAAIurE,EAAkB3gE,EAAa4gE,0BAC1BjkI,EAAI,EAAGA,GAAKgkI,EAAgB9jI,OAAS,EAAGF,IAAK,CACpD,IAAIk9D,EAAO8mE,EAAgBhkI,GACvBgkE,EAAKggE,EAAgBhkI,IAAMgkI,EAAgB9jI,OAAS,EAAI,EAAIF,EAAI,GAChEkyD,GAAW,IAAA0sB,4BACb6jD,EAA8B58G,EAAG48G,EAA8B38G,EAC/Do3C,EAAKr3C,EAAGq3C,EAAKp3C,EACbk+C,EAAGn+C,EAAGm+C,EAAGl+C,GAEL+9G,EAAkB1B,EAAY2B,mBAAmB5mE,EAAM8G,GACzDu/D,EAAO1tH,KAAK4pE,IAAIvtB,GAEpB,GAAIqxE,EAAO,UAAWzxE,YAAa,CACjC,IAAI0xE,GAAe,IAAA/lD,aAAYvgB,EAAM8G,GACjCjjE,EAAS,CACXskD,MAAOge,EACP7I,KAAM+nE,EACN9qE,MAAOgrE,EACPvwE,WACAqxE,OACAE,MAAOhB,EAA8B58G,EAAI29G,EAAa39G,EACtD69G,MAAOjB,EAA8B38G,EAAI09G,EAAa19G,GAExDs9G,EAAU//D,EAAa5vD,IAAM2vH,EAAU//D,EAAa5vD,KAAO,IAC1D2vH,EAAU//D,EAAa5vD,IAAIowH,GAAmBT,EAAU//D,EAAa5vD,IAAIowH,IAAoB,IAAIrjI,KAAKO,WAO1GqiI,I,2CAOmBhB,GAC1B,IAAIC,EAAmBD,EAAYlrE,WAC/BnZ,EAAa,UAAiBmmF,gBAE5BC,EADW,UAAiBC,gBACRxrE,OAAO7a,GAC7BqlF,EAAY,GAqChB,OApCAf,EAAiBx4H,SAAQ,SAAC04H,GACxB,IAAIE,GAAgC,IAAAzsE,eAAcusE,EAAgBrlE,KAAKr3C,EAAG08G,EAAgBrlE,KAAKp3C,EAAGy8G,GAElG4B,EAAOt6H,SAAQ,SAASw5D,GACtB,IAAKA,EAAa5K,UAAY4K,EAAa5vD,KAAO2uH,EAAY3uH,GAE5D,IADA,IAAIuwH,EAAkB3gE,EAAa4gE,0BAC1BjkI,EAAI,EAAGA,GAAKgkI,EAAgB9jI,OAAS,EAAGF,IAAK,CACpD,IAAIk9D,EAAO8mE,EAAgBhkI,GACvBgkE,EAAKggE,EAAgBhkI,IAAMgkI,EAAgB9jI,OAAS,EAAI,EAAIF,EAAI,GAChEkyD,GAAW,IAAA0sB,4BACb6jD,EAA8B58G,EAAG48G,EAA8B38G,EAC/Do3C,EAAKr3C,EAAGq3C,EAAKp3C,EACbk+C,EAAGn+C,EAAGm+C,EAAGl+C,GAEL+9G,EAAkB1B,EAAY2B,mBAAmB5mE,EAAM8G,GACzDu/D,EAAO1tH,KAAK4pE,IAAIvtB,GAEpB,GAAIqxE,EAAO,UAAWzxE,YAAa,CACjC,IAAI0xE,GAAe,IAAA/lD,aAAYvgB,EAAM8G,GACjCjjE,EAAS,CACXskD,MAAOge,EACP7I,KAAM+nE,EACN9qE,MAAOgrE,EACPvwE,WACAqxE,OACAE,MAAOhB,EAA8B58G,EAAI29G,EAAa39G,EACtD69G,MAAOjB,EAA8B38G,EAAI09G,EAAa19G,GAExDs9G,EAAU//D,EAAa5vD,IAAM2vH,EAAU//D,EAAa5vD,KAAO,IAC1D2vH,EAAU//D,EAAa5vD,IAAIowH,GAAmBT,EAAU//D,EAAa5vD,IAAIowH,IAAoB,IAAIrjI,KAAKO,WAO1GqiI,I,yCAGiBvlD,EAAQC,GAA6B,IAArBumD,EAAqB,wDACvDxlD,EAAKwlD,EAAcxmD,EAAOymD,eAAeC,UAAY1mD,EAAOh4D,EAC5Dk5D,EAAKslD,EAAcvmD,EAAOwmD,eAAeC,UAAYzmD,EAAOj4D,EAC5Di5D,EAAKulD,EAAcxmD,EAAOymD,eAAeE,UAAY3mD,EAAO/3D,EAC5Dk5D,EAAKqlD,EAAcvmD,EAAOwmD,eAAeE,UAAY1mD,EAAOh4D,EAC9D2+G,GAAS3lD,EAAKE,IAAOH,EAAKE,GAC1BzqB,EAAQz+C,KAAKC,MAAMD,KAAK4pE,IAAIV,EAAKF,IACjCtqB,EAAQ1+C,KAAKC,MAAMD,KAAK4pE,IAAIT,EAAKF,IACrC,OAAc,IAAVxqB,EACK,WACY,IAAVC,EACF,aAEHkwE,GAAS,EACP1lD,EAAKF,EACA,YAEA,YAGLE,EAAKF,EACA,YAEA,c,+CAWiB6lD,GAC9B,GAAuC,IAAnCvkI,OAAOmc,KAAKooH,GAAYxkI,OAC1B,MAAO,GAET,IAAIykI,EAAU,GAAIC,EAAU,GAC5B,IAAK,IAAI5kI,KAAK0kI,EACRA,EAAW1kI,GAAG6kI,UAChBH,EAAW1kI,GAAG6kI,SAASh7H,SAAQ,SAACi7H,GAC9BH,EAAQnkI,KAAK,CACX6kD,MAAOy/E,EAAUz/E,MACjBmV,KAAMsqE,EAAUtqE,KAChB/C,MAAOqtE,EAAUrtE,MACjB4oB,OAAQykD,EAAU5yE,SAClBqxE,KAAMuB,EAAUrB,MAChBniD,YAAa,gBAIfojD,EAAW1kI,GAAG+kI,YAChBL,EAAW1kI,GAAG+kI,WAAWl7H,SAAQ,SAACi7H,GAChCF,EAAQpkI,KAAK,CACX6kD,MAAOy/E,EAAUz/E,MACjBmV,KAAMsqE,EAAUtqE,KAChB/C,MAAOqtE,EAAUrtE,MACjB4oB,OAAQykD,EAAU5yE,SAClBqxE,KAAMuB,EAAUpB,MAChBpiD,YAAa,kBAMrB,IAAI0jD,EAAS,GAGTC,EAAON,EAAQxwH,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEmvH,KAAOlvH,EAAEkvH,QAAM,GAC/C2B,EAAON,EAAQzwH,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEmvH,KAAOlvH,EAAEkvH,QAAM,GAUnD,OATI0B,GACFD,EAAOxkI,KAAKykI,GAEVC,GACFF,EAAOxkI,KAAK0kI,GAEVF,EAAO9kI,OAGJ8kI,I,2DASmCN,EAAY3yH,GACtD,GAAuC,IAAnC5R,OAAOmc,KAAKooH,GAAYxkI,OAC1B,MAAO,GAGT,IAAMilI,EAAgB,GAEtB,IAAK,IAAIliI,KAAOyhI,EACd,GAAIA,EAAWrkI,eAAe4C,GAAM,CAClC,IAAImiI,EAAmB,GACnBC,EAAqB,GAErBX,EAAWzhI,GAAK4hI,WAClBO,EAAmBV,EAAWzhI,GAAK4hI,SAASpyH,QAAO,SAAA6yH,GAAA,OAAmBA,EAAgBjgF,MAAMtzC,SAAWA,MAGrG2yH,EAAWzhI,GAAK8hI,aAClBM,EAAqBX,EAAWzhI,GAAK8hI,WAAWtyH,QAAO,SAAA8yH,GAAA,OAAqBA,EAAkBlgF,MAAMtzC,SAAWA,OAG7GqzH,EAAiBllI,OAAS,GAAKmlI,EAAmBnlI,OAAS,KAC7DilI,EAAcliI,GAAO,CACnB4hI,SAAUO,EAAiBllI,OAAS,EAAIklI,OAAmB3mE,EAC3DsmE,WAAYM,EAAmBnlI,OAAS,EAAImlI,OAAqB5mE,IAMzE,OAAO0mE,I,sDAQ8BT,GACrC,GAAuC,IAAnCvkI,OAAOmc,KAAKooH,GAAYxkI,OAC1B,MAAO,GAET,IAAIykI,EAAU,GAAIC,EAAU,GAC5B,IAAK,IAAI5kI,KAAK0kI,EACRA,EAAW1kI,GAAG6kI,UAChBH,EAAW1kI,GAAG6kI,SAASh7H,SAAQ,SAACi7H,GAC9BH,EAAQnkI,KAAK,CACXg6D,KAAMsqE,EAAUtqE,KAChB/C,MAAOqtE,EAAUrtE,MACjBvF,SAAU4yE,EAAU5yE,SACpBqxE,KAAMuB,EAAUvB,KAChBjiD,YAAa,gBAIfojD,EAAW1kI,GAAG+kI,YAChBL,EAAW1kI,GAAG+kI,WAAWl7H,SAAQ,SAACi7H,GAChCF,EAAQpkI,KAAK,CACXg6D,KAAMsqE,EAAUtqE,KAChB/C,MAAOqtE,EAAUrtE,MACjB8rE,KAAMuB,EAAUvB,KAChBjiD,YAAa,kBAMrB,IAAI0jD,EAAS,GAGTC,EAAON,EAAQxwH,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE89C,SAAW79C,EAAE69C,YAAU,GACvDgzE,EAAON,EAAQzwH,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE89C,SAAW79C,EAAE69C,YAAU,GAW3D,OAVI+yE,GACFD,EAAOxkI,KAAKykI,GAEVC,GACFF,EAAOxkI,KAAK0kI,GAGVF,EAAO9kI,OAGJ8kI,I,2CAGmB3/E,EAAOqM,GACjC,IAAIq2B,EAAa1iC,EAAM6R,WACnBsuE,EAAY,KACZC,EAAiB,GAerB,OAdA/zE,EAAO7nD,SAAQ,SAAS4tD,GACtBswB,EAAWl+E,SAAQ,SAAS2wD,GAC1B,IAAIkrE,GAAa,IAAA1vE,eAAcwE,EAAK0C,KAAKr3C,EAAG20C,EAAK0C,KAAKp3C,EAAG00C,GACrD6iB,GAAgB,IAAAN,kBAAiB2oD,EAAYjuE,GAEjDguE,EAAejlI,KAAK68E,IACF,OAAdmoD,GAAsBnoD,EAAgBmoD,KACxCA,EAAYnoD,SAIlBooD,EAAetxH,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,KAG3BoxH,GAAkC,O,2CAGfpgF,GAI1B,IAHA,IAAIsM,EAAQtM,EAAM6R,WAChBxF,EAAS,GAEF1xD,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC,GAAI2xD,EAAM3xD,GAAGgkE,GAAG/jB,MAAQ,GAAK0R,EAAM3xD,GAAGgkE,GAAGjc,UAAY,EAAG,CACtD,IAAI49E,EAAMtgF,EAAMi+E,kBAAkB3xE,EAAM3xD,IACpCyL,KAAKm6H,aAAaD,IACpBj0E,EAAOlxD,KAAKmxD,EAAM3xD,GAAGgkE,IAK3B,OAAOtS,I,mCAGWi0E,GAClB,IAAIE,GAAU,EACd,OAAOF,EAAIG,QACT,IAAK,KACqB,eAApBH,EAAIrkD,cACNukD,GAAU,GAEZ,MACF,IAAK,KACqB,aAApBF,EAAIrkD,cACNukD,GAAU,GAEZ,MACF,IAAK,KACqB,eAApBF,EAAIrkD,cACNukD,GAAU,GAEZ,MACF,IAAK,KACqB,aAApBF,EAAIrkD,cACNukD,GAAU,GAMhB,OAAOA,I,qCAIal0E,EAAOo0E,GAE3B,IADA,IAAIpoB,EAAQ,EAAGD,EAAQ,EAAGI,EAAQ,EAAGD,EAAQ,EACrC79G,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAAK,CACpC,IAAIgmI,EAAeD,EAAap0E,EAAM3xD,GAAGk9D,KAAK+oE,QAAQpgH,EAAI8rC,EAAM3xD,GAAGk9D,KAAKr3C,EACpEqgH,EAAeH,EAAap0E,EAAM3xD,GAAGk9D,KAAK+oE,QAAQngH,EAAI6rC,EAAM3xD,GAAGk9D,KAAKp3C,EACpE63F,EAAQqoB,IACVroB,EAAQqoB,GACNtoB,EAAQsoB,IACVtoB,EAAQsoB,GACNloB,EAAQooB,IACVpoB,EAAQooB,GACNroB,EAAQqoB,IACVroB,EAAQqoB,GAGZ,MAAO,CAACrgH,GAAK83F,EAAQD,GAAS,EAAKA,EAAO53F,GAAKg4F,EAAQD,GAAS,EAAKA,K,qCAGjDnsD,GACpB,IAAIy0E,EAASz0E,EAAOn+C,KAAK,SAAAkkD,GAAA,OAASA,EAAM5xC,KACpCugH,EAAS10E,EAAOn+C,KAAK,SAAAkkD,GAAA,OAASA,EAAM3xC,KAIxC,MAAO,CAACD,GAHEhQ,KAAKwwH,IAAL,MAAAxwH,MAAA,aAAaswH,IAAUtwH,KAAKywH,IAAL,MAAAzwH,MAAA,aAAaswH,KAAW,EAG1CrgH,GAFLjQ,KAAKwwH,IAAL,MAAAxwH,MAAA,aAAauwH,IAAUvwH,KAAKywH,IAAL,MAAAzwH,MAAA,aAAauwH,KAAW,O,OAKpDG,oCAAsC,SAACC,EAAmBzzE,GAC/D,GAAIyzE,EAAkBtmI,OAAS,EAAG,CAChC,IAAIstD,EAAQ,UAAWA,MACnBi5E,GAAcA,EAAdA,cAAkB1zE,GAClB2zE,EAAgB,KAYpB,OAXAF,EAAkB38H,SAAQ,SAAC88H,GACzB,OAAQA,EAAKrlD,aACX,IAAK,aACHmlD,EAAY3gH,GAAK6gH,EAAKpD,KAAO/1E,EAC7B,MACF,IAAK,WACHi5E,EAAY5gH,GAAK8gH,EAAKpD,KAAO/1E,EAGjCk5E,EAAgBC,EAAKthF,SAEhB,CAACohF,EAAaC,GAEvB,MAAO,CAAC,KAAM,O,aA9nBGvE,EAqoBkByE,EAA1BA,wBAA0B,SAACC,EAAWC,EAAS9hI,EAAQ+hI,GAClE,IAAM1oD,GAAW,IAAAZ,aAAYopD,EAAUpwE,cAAeqwE,EAAQrwE,eAC5DotE,EAAkBC,EAAmB+C,EAAWC,GAEhDzD,EAA+B,OAC/BnxE,GAAW,IAAA6qB,kBAAiB8pD,EAAWC,GAErCE,EAAU,EACZC,EAAU,EAEZ,OAAQpD,GACN,KAAK,EAAAviD,YAAYE,WACfwlD,EAAyC,SAA/B3D,EAAwC,IAAW,GAC7D,MAEF,KAAK,EAAA/hD,YAAYC,SACf0lD,EAA0C,UAA/B5D,EAAyC,IAAU,GAC9D,MAGF,KAAK,EAAA/hD,YAAYG,UACjB,KAAK,EAAAH,YAAYK,UACjB,KAAK,EAAAL,YAAYM,UACjB,KAAK,EAAAN,YAAYI,WAInB,IAAI3uB,EAAM,CACRltC,EAAGw4D,EAASx4D,EACZC,EAAGu4D,EAASv4D,EACZmhH,QAASA,EACTD,QAASA,EACT1lD,YAAauiD,EACbqD,cAAe,CACbL,UAAWA,EACXC,QAASA,IASb,OAAO,IAAI,EAAJ,QAAe50E,EAAUa,EALnB,CACXo0E,yBAAyB,EACzBC,UAAU,GAGiCpiI,EAAQ+hI,IAGtBM,EAApBA,kBAAoB,SAACC,EAAIC,EAAIC,EAAIC,GAC5C,IAEEC,EACAC,EAFAC,GAAM,IAAAnqD,aAAY6pD,EAAIE,GAGtBlmD,EAAc6gD,EAAY2B,mBAAmBwD,EAAGC,GAChDM,EAAe,GACfC,EAAgB,CACdC,QAAU,EACVC,SAAW,EACXC,UAAY,EACZC,WAAa,GAEfC,EAAO,UACPC,EAAO,UAELd,EAAGzhH,EAAI0hH,EAAG1hH,IACZsiH,EAAO,YAELb,EAAGxhH,EAAIyhH,EAAGzhH,IACZsiH,EAAO,YAGPV,EADEH,EAAGzhH,GAAK8hH,EAAI9hH,EACP,IAEA,IAGP6hH,EADEJ,EAAG1hH,GAAK+hH,EAAI/hH,EACP,IAEA,IAGT,IAAIwiH,EAAUf,EAAGzhH,EAAKyhH,EAAGzhH,EAAI,EAC3ByiH,EAAUhB,EAAGxhH,EAAKwhH,EAAGxhH,EAAI,EACzByiH,EAAUhB,EAAG1hH,EAAK0hH,EAAG1hH,EAAI,EACzB2iH,EAAUjB,EAAGzhH,EAAKyhH,EAAGzhH,EAAI,EACzB2iH,EAAUjB,EAAG3hH,EAAK2hH,EAAG3hH,EAAI,EACzB6iH,EAAUlB,EAAG1hH,EAAK0hH,EAAG1hH,EAAI,EACzB6iH,EAAelB,EAAe5hH,EAAK4hH,EAAe5hH,EAAI,EACtD+iH,EAAenB,EAAe3hH,EAAK2hH,EAAe3hH,EAAI,EA2BxD,MAzBoB,eAAhBw7D,IACFumD,EAAgBQ,EAAUE,EAAW,OAAS,QAG5B,aAAhBjnD,IACFumD,EAAgBS,EAAUE,EAAW,QAAU,UAG5CH,IAAYE,GAAaC,IAAYE,GAAaL,EAAUM,GAAmC,UAAjBd,GAC7EQ,IAAYE,GAAaC,IAAYE,GAAaH,EAAUf,EAAG3hH,GAAwB,UAAjBgiH,KAC1EC,EAAcC,SAAU,IAErBO,IAAYE,GAAaD,IAAYE,GAAaC,EAAUF,GAAaH,EAAUE,GACnFD,IAAYE,GAAaG,IAAiBN,GAAaO,EAAeN,GAAaC,EAAUF,KAChGP,EAAcE,UAAW,IAEtBM,IAAYE,GAAaH,IAAYM,GAAkBC,EAAeN,GAAaD,EAAUE,GAC7FD,IAAYE,GAAaD,IAAYE,GAAaD,EAAUE,GAAaH,EAAUF,KACtFP,EAAcG,WAAY,IAEvBI,IAAYE,GAAaC,IAAYE,GAAaJ,EAAUE,GAAaC,EAAUF,GACnFF,IAAYE,GAAaD,IAAYM,GAAkBP,EAAUM,GAAkBL,EAAUE,KAChGV,EAAcI,YAAa,GAGtB,CACLpC,OAAQ4B,EAAOC,EACfkB,UAAW,CAAChjH,EAAGsiH,EAAMriH,EAAGsiH,GACxBN,cAAgBA,EAChBxmD,YAAcA,EACdumD,aAAeA,IAQsBiB,EAA5BA,0BAA4B,SAACjC,EAAWC,EAAS9hI,EAAQ+hI,GACpE,IAAM1oD,GAAW,IAAAZ,aAAYopD,EAAUpwE,cAAeqwE,EAAQrwE,eAC5DotE,EAAkBC,EAAmB+C,EAAWC,GAChDzD,EAAgB0F,EAAiBlC,EAAWC,GAC5C50E,GAAW,IAAA6qB,kBAAiB8pD,EAAWC,GAErCE,EAAU,EACZC,EAAU,EAEZ,OAAQpD,GACN,KAAK,EAAAviD,YAAYE,WACf,IAAMpyB,EAAM,UAAiBy8C,SACvBv9C,GAAW,IAAA06E,wBAAuB55E,GACxC43E,EAAU3D,IAAkBxB,EAAWE,KAAOzzE,GAAYA,EAE1D,MAEF,KAAK,EAAAgzB,YAAYC,SACf0lD,EAAW5D,IAAkBxB,EAAWI,MAAQ,IAAS,GACzD,MAGF,KAAK,EAAA3gD,YAAYG,UACjB,KAAK,EAAAH,YAAYK,UACjB,KAAK,EAAAL,YAAYM,UACjB,KAAK,EAAAN,YAAYI,WAInB,IAAI3uB,EAAM,CACRltC,EAAGw4D,EAASx4D,EACZC,EAAGu4D,EAASv4D,EACZmhH,QAASA,EACTD,QAASA,EACT1lD,YAAauiD,EACbqD,cAAe,CACbL,UAAWA,EACXC,QAASA,IAITmC,EAAS,CACX9B,yBAAyB,EACzBC,UAAU,EACVprE,SAAU,UAAaqJ,WAAW8jC,SAGpC,OAAO,IAAI,EAAJ,QAAej3C,EAAUa,EAAKk2E,EAAQjkI,EAAQ+hI,IAMHmC,EAAvCA,qCAAuC,SAACrC,EAAWC,EAAS9hI,EAAQ+hI,GAC/E,IAAM1oD,GAAW,IAAAZ,aAAYopD,EAAUpwE,cAAeqwE,EAAQrwE,eAC5DotE,EAAkBC,EAAmB+C,EAAWC,GAChDzD,EAAgB0F,EAAiBlC,EAAWC,GAC5C50E,GAAW,IAAA6qB,kBAAiB8pD,EAAWC,GAErCE,EAAU,EACZC,EAAU,EACN73E,EAAM,UAAiBy8C,SACvBv9C,GAAW,IAAA06E,wBAAuB55E,GAExC,OAAQy0E,GACN,KAAK,EAAAviD,YAAYE,WACfwlD,EAA8C14E,EAE9C,MAEF,KAAK,EAAAgzB,YAAYC,SACf0lD,EAAW5D,IAAkBxB,EAAWI,OAAU,EAAK,EACvD+E,EAA8C14E,EAE9C,MAGF,KAAK,EAAAgzB,YAAYG,UACjB,KAAK,EAAAH,YAAYK,UACjB,KAAK,EAAAL,YAAYM,UACjB,KAAK,EAAAN,YAAYI,WAInB,IAAI3uB,EAAM,CACRltC,EAAGw4D,EAASx4D,EACZC,EAAGu4D,EAASv4D,EACZmhH,QAASA,EACTD,QAASA,EACT1lD,YAAauiD,EACbqD,cAAe,CACbL,UAAWA,EACXC,QAASA,IAITmC,EAAS,CACX9B,yBAAyB,EACzBC,UAAU,EACV+B,eAAgB,UAAa9jE,WAAW0jC,YAG1C,OAAO,IAAI,EAAJ,QAAe72C,EAAUa,EAAKk2E,EAAQjkI,EAAQ+hI,IArOhD,IAwOMgC,EAAmBA,EAAnBA,iBAAmB,SAAC7qD,EAAQC,GAAgC,IAAxB8E,EAAwB,wDACnEmmD,SAAQC,SASZ,OARIpmD,GACFmmD,EAASvzH,KAAK2nE,QAAQW,EAAOt4D,GAAI,GAAKhQ,KAAK2nE,QAAQU,EAAOr4D,GAAI,GAC9DwjH,EAASxzH,KAAK2nE,QAAQW,EAAOr4D,GAAI,GAAKjQ,KAAK2nE,QAAQU,EAAOp4D,GAAI,KAE9DsjH,EAASjrD,EAAOt4D,EAAIq4D,EAAOr4D,EAC3BwjH,EAASlrD,EAAOr4D,EAAIo4D,EAAOp4D,GAGzBsjH,EAAS,GAAgB,IAAXC,EACTxH,EAAWC,KACTsH,EAAS,GAAgB,IAAXC,EAChBxH,EAAWE,KACTsH,EAAS,GAAgB,IAAXD,EAChBvH,EAAWI,MACToH,EAAS,GAAgB,IAAXD,EAChBvH,EAAWG,MACToH,EAAS,GAAKC,EAAS,EACzBxH,EAAWlgD,UACTynD,EAAS,GAAKC,EAAS,EACzBxH,EAAWpgD,UACT2nD,EAAS,GAAKC,EAAS,EACzBxH,EAAWngD,UACT0nD,EAAS,GAAKC,EAAS,EACzBxH,EAAWjgD,UAEXigD,EAAWK,WAOT4B,EAAqBA,EAArBA,mBAAqB,SAAC+C,EAAWC,GAC5C,IAAIrC,EAAQ6E,EAASzC,EAAWC,GAC/BxyE,EAAQz+C,KAAKC,MAAMD,KAAK4pE,IAAIqnD,EAAQjhH,EAAIghH,EAAUhhH,IAClD0uC,EAAQ1+C,KAAKC,MAAMD,KAAK4pE,IAAIqnD,EAAQhhH,EAAI+gH,EAAU/gH,IAEnD,OAAc,IAAVwuC,EACK,EAAAgtB,YAAYC,SACA,IAAVhtB,EACF,EAAA+sB,YAAYE,WAEfijD,GAAS,EACPqC,EAAQjhH,EAAIghH,EAAUhhH,EACjB,EAAAy7D,YAAYI,UAEZ,EAAAJ,YAAYG,UAGjBqlD,EAAQjhH,EAAIghH,EAAUhhH,EACjB,EAAAy7D,YAAYK,UAEZ,EAAAL,YAAYM,WAMd0nD,EAAWA,EAAXA,SAAW,SAACzC,EAAWC,GAClC,IAAIjoD,EAAKgoD,EAAUhhH,EACjBk5D,EAAK+nD,EAAQjhH,EAIf,OAHOghH,EAAU/gH,EACVghH,EAAQhhH,IAEK+4D,EAAKE,IAGdwqD,EAAaA,EAAbA,WAAa,SAAC1C,EAAWC,GACpC,OAAIA,EAAQjhH,EAAIghH,EAAUhhH,GAAM,GACtBihH,EAAQhhH,EAAI+gH,EAAU/gH,IAAMghH,EAAQjhH,EAAIghH,EAAUhhH,GAErD9R,OAAOstE,WAeHmoD,GAP0BC,EAA1BA,wBAA0B,SAACC,EAAOC,GAC7C,IAAMC,EAAaL,EAAWG,EAAMxsE,KAAMwsE,EAAM1lE,IAC1C6lE,EAAaN,EAAWI,EAAMzsE,KAAMysE,EAAM3lE,IAEhD,OAAOwlE,EAAyBI,EAAYC,IAGNL,EAA3BA,yBAA2B,SAACM,EAAIC,GAE3C,IAAI9pF,EAAQpqC,KAAK4pE,KAAKsqD,EAAKD,IAAO,EAAIA,EAAKC,IAQ3C,OAAc,IALJl0H,KAAKm0H,KAAK/pF,GAKCpqC,KAAKqnE,KAOf+sD,EAAoBA,EAApBA,kBAAoB,SAACpsD,EAAQC,GACxC,MAAO,CAACj4D,EAAGi4D,EAAOj4D,EAAIg4D,EAAOh4D,EAAGC,EAAGg4D,EAAOh4D,EAAI+3D,EAAO/3D,IAoC1CokH,GA7B4BC,EAA5BA,0BAA4B,SAACT,EAAOC,GAC/C,IAAMS,EAAUH,EAAkBP,EAAM1lE,GAAI0lE,EAAMxsE,MAC5CmtE,EAAUJ,EAAkBN,EAAMzsE,KAAMysE,EAAM3lE,IAE9CsmE,GAAYF,EAAQvkH,EAAIwkH,EAAQxkH,EAAIukH,EAAQtkH,EAAIukH,EAAQvkH,GAC1DjQ,KAAKynE,KAAKznE,KAAK0nE,IAAI6sD,EAAQvkH,EAAG,GAAKhQ,KAAK0nE,IAAI6sD,EAAQtkH,EAAG,IACvDjQ,KAAKynE,KAAKznE,KAAK0nE,IAAI8sD,EAAQxkH,EAAG,GAAKhQ,KAAK0nE,IAAI8sD,EAAQvkH,EAAG,IAI3D,OAAOjQ,KAAK00H,KAAMD,IAUkBE,EAAzBA,uBAAyB,SAACC,EAAGC,EAAGzrD,GAC3C,IAAI0rD,EAAK90H,KAAKynE,KAAKznE,KAAK0nE,IAAImtD,EAAE7kH,EAAI4kH,EAAE5kH,EAAE,GAAIhQ,KAAK0nE,IAAImtD,EAAE5kH,EAAI2kH,EAAE3kH,EAAE,IACzD8kH,EAAK/0H,KAAKynE,KAAKznE,KAAK0nE,IAAImtD,EAAE7kH,EAAIo5D,EAAEp5D,EAAE,GAAIhQ,KAAK0nE,IAAImtD,EAAE5kH,EAAIm5D,EAAEn5D,EAAE,IACzD+kH,EAAKh1H,KAAKynE,KAAKznE,KAAK0nE,IAAI0B,EAAEp5D,EAAI4kH,EAAE5kH,EAAE,GAAIhQ,KAAK0nE,IAAI0B,EAAEn5D,EAAI2kH,EAAE3kH,EAAE,IAG7D,OAAyB,IAFFjQ,KAAK00H,MAAMK,EAAGA,EAAGD,EAAGA,EAAGE,EAAGA,IAAK,EAAED,EAAGD,IAE3B90H,KAAKqnE,IAGJgtD,EAAtBA,oBAAsB,WAC5B,UAAUY,oBACb,UAAUA,kBAAoB,IAGhC,IAAM5jI,EAAiBrC,SAASC,SAASoC,eAGzC,IAAK,UAAU4jI,kBAAkB5jI,GAAiB,CAChD,IAEMyf,GAAS,IAAAC,kBAAiB1f,GAE5BmhB,EAAe1B,EAAO+a,2BAJP,gBAanB,GARKrZ,IACHA,EAAe1B,EAAO+a,2BALD,uBAOlBrZ,IACHA,EAAe1B,EAAOsD,MAAP,YAA8BtD,EAAOsD,MAAP,WAA2BgyB,KACpE,CAAEh1B,KAAMN,EAAOsD,MAAP,WAA2BgyB,MACnC,OAED5zB,EAAc,CACjB,IAAI0S,EAAKpU,EAAOgb,wBAAwB,gBACpC5G,IACF1S,EAAe,CAACpB,KAAM8T,IAK1B,UAAU+vG,kBAAkB5jI,GAAkBmhB,EAGhD,OAAO,UAAUyiH,kBAAkB5jI,KA8FxB6jI,GA3FkBhrE,EAAlBA,gBAAkB,SAACirE,GAI9B,GAHKA,IACHA,EAAmBd,MAEhBc,EACH,MAAO,GAET,IACOp1G,EADO,UAAMhoB,WACWwO,YAAxBwZ,eAEP,GAAsC,IAAlC,UAAUkkC,aAAa55D,OAAc,CACvC,IAAIwwF,SAEJ,GAAI96D,EACF86D,GAAW,IAAAu6C,0BAAyBD,QAGpCt6C,GADe,IAAA9pE,oBACGm9E,sBAAsBinC,EACxC,GACA,IACA,EACA,MACA,GACA,CAAEE,aAAc,KAAMC,gBAAiB,OAIzC,UAAUrxE,aAAekxE,EACrBt6C,EACA,GAGN,OAAO,UAAU52B,cASmBsxE,EAAzBA,uBAAyB,WAAiB,IAAhBllH,EAAgB,uDAAT,KACtC1T,EAAQ,UAAM5E,WADiC,EAElB4E,EAAMmG,YAAlC4L,EAF8C,EAE9CA,OAAQ7L,EAFsC,EAEtCA,iBACTkL,EAAiBpR,EAAMpB,gBACvB4iG,EAAexhG,EAAM6oD,cAAc24C,aACnChmG,EAAYwE,EAAM3E,UAAUG,UAClCkY,EAAOA,GAAc,UAAUA,MACd,IAAA5B,aAAY5L,EAAkB1K,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAA9F,IAEMkB,EAAOkvF,GAA8BnvG,SAASC,SAASoC,eACvDyf,GAAS,IAAAC,oBAEXykH,EAAoB1kH,EAAO+a,2BAA2B,EAAAsZ,cAAc4B,WAAY93B,GAChFwmH,EAAsB3kH,EAAO+a,2BAA2B,EAAAsZ,cAAc+B,yBAA0Bj4B,GAE/FumH,GAAsBC,IACzBD,EAAoB1kH,EAAO+a,2BAA2B,EAAAsZ,cAAc4B,YACpE0uF,EAAsB3kH,EAAO+a,2BAA2B,EAAAsZ,cAAc+B,2BAInEsuF,GAAsBC,IACzBD,EAAoBC,EAAsB3kH,EAAO+a,2BAA2B,EAAAsZ,cAAc8B,oBAG5F,IAAMyuF,EAAqBF,EAAoBA,EAAkBpkH,KAAKlV,OAAS,EAAAipC,cAAc+B,yBACvFyuF,EAAuBF,EAAsBA,EAAoBrkH,KAAKlV,OAAS,EAAAipC,cAAc4B,WAEnG,MAAO,CAAC2uF,EAAoBC,IASOC,EAAxBA,sBAAwB,SAACpmF,EAAOqmF,GAC3C,IAAMC,EAA8BZ,EAA2BW,GACzDE,EAA6BC,EAA0BH,GAE7D,OAAQrmF,EAAM5xC,KAAOi4H,EAAUj4H,KAC3B4xC,EAAMtzC,SAAW,EAAAipC,cAAc0B,qBAAuBkvF,GACpDvmF,EAAMymF,eAAiB,EAAA9wF,cAAc0B,qBAAuBkvF,GAC5DvmF,EAAMtzC,SAAW,EAAAipC,cAAcyB,qBAAuBkvF,GACtDtmF,EAAMymF,eAAiB,EAAA9wF,cAAcyB,qBAAuBkvF,GAC5DtmF,EAAMtzC,SAAW,EAAAipC,cAAc2B,oBAAsBgvF,GACrDtmF,EAAMymF,eAAiB,EAAA9wF,cAAc2B,oBAAsBgvF,IAGzBZ,EAA7BA,2BAA6B,SAAC1lF,GACzC,OAAQA,EAAMtzC,SAAW,EAAAipC,cAAc2B,oBACpC0I,EAAMymF,eAAiB,EAAA9wF,cAAc2B,oBACrC0I,EAAMtzC,SAAW,EAAAipC,cAAcyB,qBAC/B4I,EAAMymF,eAAiB,EAAA9wF,cAAcyB,sBAG7BovF,EAA4BA,EAA5BA,0BAA4B,SAACxmF,GACxC,OAAQA,EAAMtzC,SAAW,EAAAipC,cAAc0B,qBACpC2I,EAAMymF,eAAiB,EAAA9wF,cAAc0B,sB,oqBC1qC1C,I,EAAA,O,oCAEwBqvF,EAAXA,SAAW,WACtB,OACE,+BAAK3gI,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAY31C,UAAU,aAC5D,6BAAG5iF,GAAG,eAAe8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACtE,6BAAG14H,GAAG,iBAAiB24H,UAAU,sCAAsCF,KAAK,WAC1E,6BAAGE,UAAU,qCACX,6BAAG34H,GAAG,2BAA2B04H,SAAS,WACxC,gCAAMlqI,EAAE,qiBAAqiBwR,GAAG,WAEljB,6BAAGA,GAAG,QAAQ24H,UAAU,mCACtB,mCAAS34H,GAAG,WAAWi+C,OAAO,wDAC9B,mCAASj+C,GAAG,YAAYi+C,OAAO,wFAST26E,EAAvBA,qBAAuB,kBAClC,+BAAKjhI,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,OAC1D,sDACA,6BAAG74H,GAAG,gBAAgB8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACvE,6BAAG14H,GAAG,yBAAyB24H,UAAU,iCAAiCF,KAAK,UAAUC,SAAS,WAChG,gCAAMlqI,EAAE,uzGACR,gCAAMA,EAAE,8kBACR,gCAAMA,EAAE,2kBACR,gCAAM48E,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKitD,YAAY,MAAM1lE,OAAO,YAC/D,6BAAGgmE,MAAM,6BAA6B94H,GAAG,QAAQy4H,KAAK,UAAUE,UAAU,2BAA2B/1C,UAAU,qBAC7G,gCAAMp0F,EAAE,wnBAAwnBkqI,SAAS,YACzoB,gCAAM14H,GAAG,YAAYoS,EAAE,aAAaC,EAAE,KAAK1a,MAAM,KAAKE,OAAO,OAC7D,gCAAMmI,GAAG,oBAAoBoS,EAAE,aAAaC,EAAE,KAAK1a,MAAM,KAAKE,OAAO,OACrE,gCAAMmI,GAAG,oBAAoBoS,EAAE,aAAaC,EAAE,IAAI1a,MAAM,KAAKE,OAAO,YAO5CkhI,EAArBA,mBAAqB,kBAChC,+BAAKn2C,UAAU,kBACb,+BAAKjrF,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,OAC1D,6BAAG74H,GAAG,wBAA4B8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACnF,6BAAG14H,GAAG,UAAUy4H,KAAK,UAAUC,SAAS,WACtC,gCAAMlqI,EAAE,kYACR,gCAAMA,EAAE,iZACR,gCAAMA,EAAE,qkBAGZ,6BAAGmqI,UAAU,oBAAoB7lE,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WAClF,6BAAG14H,GAAG,UAAUy4H,KAAK,UAAUC,SAAS,WACtC,gCAAMlqI,EAAE,oTACR,gCAAMA,EAAE,kYACR,gCAAMA,EAAE,6TAGZ,6BAAGmqI,UAAU,iCACX,6BAAG7lE,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,UAAU91C,UAAU,sBACxE,gCAAMp0F,EAAE,kiCAAkiCiqI,KAAK,UAAUC,SAAS,eAIxkC,+BAAK91C,UAAU,wBACb,+BAAKA,UAAU,iCAEjB,+BAAKA,UAAU,wBACf,+BAAKA,UAAU,+CACf,+BAAKA,UAAU,+CACf,+BAAKA,UAAU,+CACf,+BAAKA,UAAU,iDAIKo2C,EAAXA,SAAW,SAAC11B,GAAD,OACtB,+BAAK3rG,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,8BACtE,gCAAML,KAAMn1B,EAAMG,MAAOj1G,EAAE,6xCAA6xCwR,GAAG,YAIpyCi5H,EAAdA,YAAc,SAAC31B,GAAD,OACzB,+BAAK3rG,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,6BAA6BzsH,MAAOi3F,EAAMj3F,OAChH,2DACA,4DACA,6BAAGrM,GAAG,UAAU8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACjE,6BAAG14H,GAAG,UAAU24H,UAAU,uCACxB,6BAAG34H,GAAG,qBAAqB24H,UAAU,qCACnC,mCAAS34H,GAAG,oBAAoBy4H,KAAMn1B,EAAMG,MAAOxlD,OAAO,oDAC1D,mCAASj+C,GAAG,oBAAoBy4H,KAAMn1B,EAAMG,MAAOk1B,UAAU,gFAAgF16E,OAAO,6CACpJ,mCAASj+C,GAAG,kBAAkB8yD,OAAQwwC,EAAMG,MAAO+0B,YAAY,MAAMU,GAAG,KAAKC,GAAG,IAAIC,GAAG,aAAaC,GAAG,eACvG,gCAAM7qI,EAAE,yhBAAyhBwR,GAAG,wBAAwBy4H,KAAMn1B,EAAMG,aAOpjB61B,EAAjBA,eAAiB,SAACh2B,GAAD,OAC5B,+BAAK3rG,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,6BAA6BzsH,MAAOi3F,EAAMj3F,OAChH,2DACA,6BAAGrM,GAAG,mBAAmB8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WAC1E,6BAAG14H,GAAG,+BAA+B24H,UAAU,sBAAsBF,KAAMn1B,EAAMG,MAAOi1B,SAAS,WAC/F,6BAAG14H,GAAG,UAAU24H,UAAU,qBACxB,gCAAMnqI,EAAE,k3EAOM+qI,EAAXA,SAAW,SAACj2B,GAAD,OACtB,+BAAK3rG,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,8BACtE,6BAAG94H,GAAG,mBAAmB8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WAC1E,6BAAG14H,GAAG,UAAU24H,UAAU,sCAAsCF,KAAMn1B,EAAMG,OAC1E,6BAAGzjG,GAAG,oBAAoB24H,UAAU,qCAClC,6BAAG34H,GAAG,iBAAiB24H,UAAU,iCAC/B,mCAAS34H,GAAG,IAAIi+C,OAAO,kOAQLu7E,EAAjBA,eAAiB,SAACl2B,GAAD,OAC5B,6BAAGtjG,GAAG,aAAay5H,YAAU,cAC3B,gCAAMz5H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,gQACrCiqI,KAAMn1B,EAAMG,UAKMi2B,EAAfA,aAAe,SAACp2B,GAAD,OAC1B,6BAAGtjG,GAAG,aAAay5H,YAAU,cAC3B,gCAAMz5H,GAAG,YAAYy4H,KAAMn1B,EAAMG,MAAOg2B,YAAU,YAAYjrI,EAAE,gIAIpCmrI,EAAnBA,iBAAmB,SAACr2B,GAAD,OAC9B,6BAAGtjG,GAAG,YAAY8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,UAAUC,UAAU,eACvF,6BAAG34H,GAAG,yBAAyBy4H,KAAMn1B,EAAMG,MAAOi1B,SAAS,WACzD,gCAAMlqI,EAAE,+kDAA+kDwR,GAAG,aAKlkD45H,EAAjBA,eAAiB,CAC5B1rC,SAAU,gCAAMyqC,UAAU,+BAA+B34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,wHAChGogG,UACE,6BAAG5uF,GAAG,gBACJ,6BAAGA,GAAG,aAAay5H,YAAU,aAAad,UAAU,uBAClD,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,gpBAAgpBmqI,UAAU,2BAOjrBkB,EAAjBA,eAAiB,kBAC5B,gCAAM75H,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,4DAGXsrI,EAAnBA,iBAAmB,kBAC9B,gCAAMtrI,EAAE,wHAGkBurI,EAAfA,aAAe,kBAC1B,gCAAM/5H,GAAG,mBAAmBy5H,YAAU,oBAAoBjrI,EAAE,ogBAAogBmqI,UAAU,0BAG3iBqB,EAApBA,kBAAoB,kBAC/B,iCACE,gCAAMh6H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,uFACvC,gCAAMwR,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,wHACvC,gCAAMwR,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,qEACvC,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,iHACzC,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,kHACzC,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,kEACzC,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,+GACzC,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,8EACzC,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,qSACzC,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,sCACzC,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,4CAInByrI,EAAbA,WAAa,kBACxB,6BAAGtB,UAAU,8BACX,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,qMAAqMmqI,UAAU,iCACtP,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,2MAA2MmqI,UAAU,0BAC5P,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,0EAA0EmqI,UAAU,gCAC3H,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,6EAA6EmqI,UAAU,iCAC9H,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,iFAAiFmqI,UAAU,mCAIhGuB,EAAzBA,uBAAyB,kBACpC,6BAAGvB,UAAU,kBACX,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sCAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,0CAA0CmqI,UAAU,0BAC/F,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,wCAAwCmqI,UAAU,wBAC7F,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,iDAAiDmqI,UAAU,iCACtG,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sDAAsDmqI,UAAU,+BAC3G,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,0CAA0CmqI,UAAU,iCAC/F,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,6CAA6CmqI,UAAU,kCAIzEwB,EAAhBA,cAAgB,kBAC3B,+BAAKrB,MAAM,6BAA6BnhI,MAAM,KAAKE,OAAO,KAAK0gI,QAAQ,aACrE,6BAAGv4H,GAAG,YAAYy5H,YAAU,YAAYd,UAAU,sBAChD,6BAAG34H,GAAG,YAAYy5H,YAAU,YAAYd,UAAU,mBAAmBF,KAAK,OAAO3lE,OAAO,UAAU0lE,YAAY,IAAI4B,gBAAgB,OAChI,kCAAQlB,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,KAAK+jE,OAAO,SACtC,kCAAQomE,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,OAAO0pI,KAAK,aAMd4B,EAAnBA,iBAAmB,kBAC9B,6BAAGr6H,GAAG,YAAYy5H,YAAU,aAC1B,gCAAMz5H,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,qOAAqOmqI,UAAU,qBACxR,gCAAM34H,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,mIAAmImqI,UAAU,uBAI7J2B,EAAhBA,cAAgB,kBAC3B,6BAAGt6H,GAAG,WAAWy5H,YAAU,WAAWd,UAAU,8BAC9C,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,gbAAgbmqI,UAAU,yBACje,gCAAM34H,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,mGAAmGmqI,UAAU,+BAIjI4B,EAAZA,UACX,+BAAKzB,MAAM,6BAA6B94H,GAAG,iBAAiBy5H,YAAU,mBAAmB9hI,MAAM,SAASE,OAAO,KAAK0gI,QAAQ,iBAE1H,6BAAGv4H,GAAG,WAAWy5H,YAAU,WAAWd,UAAU,4BAC9C,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,qxBAAqxBmqI,UAAU,8BACt0B,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,yoBAAyoBmqI,UAAU,8BAC1rB,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,srBAAsrBmqI,UAAU,+BACvuB,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,wQAAwQmqI,UAAU,+BACzT,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,uMAAuMmqI,UAAU,+BACxP,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,2EAA2EmqI,UAAU,6BAC5H,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,uFAAuFmqI,UAAU,8BACxI,gCAAM34H,GAAG,SAASy5H,YAAU,SAASjrI,EAAE,iLAAiLmqI,UAAU,4BAA4BD,SAAS,cAKzO8B,EAAvBA,qBACX,+BAAK1B,MAAM,6BAA6BnhI,MAAM,UAAUE,OAAO,SAAS0gI,QAAQ,sBAC9E,6BAAGv4H,GAAG,4BAA4B24H,UAAU,wBAC1C,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,0fAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,igBAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,koEAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,ueAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,+IAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,olCAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,quCAKpBisI,EAAhBA,cAAgB,kBAC3B,gCAAMz6H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,inBAAinBmqI,UAAU,sBAGzoB+B,EAAlBA,gBAAkB,kBAC7B,6BAAG16H,GAAG,sBAAsB24H,UAAU,wBACpC,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,2jBAIlBmsI,EAAhBA,cAAgB,kBAC3B,gCAAM36H,GAAG,oBAAoB24H,UAAU,uBAAuBD,SAAS,UAAUlqI,EAAE,4lBAGhDosI,EAAxBA,sBAAwB,kBACnC,6BAAG56H,GAAG,aAAay5H,YAAU,cAC3B,gCAAMd,UAAU,kCAAkC34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,gxBAIhEqsI,EAAhBA,cAAgB,kBAE3B,gCAAM76H,GAAG,UACHy5H,YAAU,UAAUjrI,EAAE,0iBACtBmqI,UAAU,yCAKgBmC,EAArBA,mBAAqB,kBAEhC,gCAAM96H,GAAG,YAAY24H,UAAU,kBAAkBc,YAAU,YAAYjrI,EAAE,oOAG3CusI,EAAnBA,iBAAmB,kBAC9B,6BAAGpC,UAAU,oBACX,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,8gBAIrBwsI,EAAfA,aAAe,kBAC1B,6BAAGh7H,GAAG,mBAAmB24H,UAAU,iCACjC,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,uhBAAuhBiqI,KAAK,YACzkB,gCAAMz4H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,sJAAsJmqI,UAAU,2BAA2BF,KAAK,YAC7O,gCAAMz4H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kJAAkJmqI,UAAU,2BAA2BF,KAAK,cAI7MwC,EAAnBA,iBAAmB,kBAC9B,gCAAMj7H,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,gyBAAgyBmqI,UAAU,kBAAkBF,KAAK,UAAUyC,QAAQ,WAG71BC,EAApBA,kBAAoB,kBAC/B,6BAAGn7H,GAAG,wBAAwB24H,UAAU,+BACtC,6BAAG34H,GAAG,aAAay5H,YAAU,aAAad,UAAU,mBAClD,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,KAAKE,OAAO,KAAK4gI,KAAK,SACjF,gCAAMz4H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,8bAA8biqI,KAAK,eAKzd2C,EAAhBA,cAAgB,kBAC3B,+BAAKtC,MAAM,6BAA6BnhI,MAAM,OAAOE,OAAO,OAAOghI,QAAQ,MAAMN,QAAQ,iBACvF,gCAAM/pI,EAAE,o7EAGmB6sI,EAAlBA,gBAAkB,kBAC7B,+BAAKvC,MAAM,6BAA6BjhI,OAAO,OAAO0gI,QAAQ,iBAAiB5gI,MAAM,QACnF,gCAAMnJ,EAAE,6Q,ifC7UAgqB,E,wJAAZ,OACA,QACA,QACA,QACA,SAKA,SACA,SACA,Q,mDAEiC8iH,EAApBA,kBAAoB,SAACn5G,EAAgB1uB,GAAjB,MAAqC,CACpE2P,KAAMoV,EAAMwkD,qBACZnkD,QAAS,CAACsJ,iBAAgB1uB,oBAGG8nI,EAAlBA,gBAAkB,SAACC,GAAD,MAAmB,CAChDp4H,KAAMoV,EAAMukD,kBACZlkD,QAAS,CAAC2iH,kBAGiB/S,EAAhBA,cAAgB,SAACt2B,GAAD,MAAiB,CAC5C/uF,KAAMoV,EAAM0kD,gBACZrkD,QAAS,CAACs5E,gBAGuBspC,EAAtBA,oBAAsB,SAAC7yH,GAAwC,IAAtB5D,EAAsB,uDAAT,KACjE,OAAO,SAACiX,EAAU9hB,GAAa,IACtB+K,EAAe/K,IAAf+K,YAEP+W,EAAS,CACP7Y,KAAMoV,EAAM2kD,uBACZtkD,QAAS,CACPjQ,mBACA5D,WAAY1E,OAAOC,UAAUyE,GAAcA,EAAaE,EAAYD,sBAMjCy2H,EAA9BA,4BAA8B,SAACC,GAAD,MAA+B,CACxEv4H,KAAMoV,EAAM4kD,gCACZvkD,QAAS,CAAC8iH,8BAGuBC,EAAtBA,oBAAsB,SAACx5G,GAAyE,IAAvDy5G,EAAuD,uDAAnC,KAAM3qH,EAA6B,uDAAT,KAClG,OAAO,SAAC+K,EAAU9hB,GAAa,MACMA,IAA5B+K,EADsB,EACtBA,YAAayD,EADS,EACTA,YAEd3D,EAAa1E,OAAOC,UAAU2Q,GAAqBA,EAAoBhM,EAAYD,iBACnFmtF,EAAaypC,GAAqBlzH,EAAYC,iBAEhDkzH,EAAyBnzH,EAAYmzH,uBACrCC,EAAervI,OAAO+2B,OAAO,GAAI9a,EAAYG,sBAC5C,EAAD,WACFpc,OAAOmc,KAAKF,EAAYG,sBAAsBsuG,UAAUhhH,SAAQ,SAAA4lI,GAC1DA,EAAoB55G,UACf25G,EAAaC,MAItBrzH,EAAYmzH,uBAAuBrvI,SACrCqvI,EAAyB,IAE3B,IAAIz5G,EAAmB1Z,EAAY0Z,iBAC/B+vE,IACF/vE,EAAmB1Z,EAAY0Z,iBAAiBviB,KAAI,SAAAm8H,GAQlD,OAPIA,EAAU7oB,eAAiBhhB,EAAWpyF,IAAMi8H,EAAUj3H,aAAeA,IACpE,IAAA+sG,wBAAuBkqB,KAC1BA,EAAUC,gBAAkB95G,EACxBzZ,EAAYmzH,uBAAuBrvI,SACrCwvI,EAAUnzH,qBAAuBpc,OAAO+2B,OAAO,GAAIs4G,KAGhDE,MAIXhgH,EAAS,CACP7Y,KAAMoV,EAAM6kD,uBACZxkD,QAAS,CACPuJ,mBACAtZ,qBAAsBizH,EACtBD,yBACAz5G,mBACArd,kBAMgCm3H,EAA3BA,yBAA2B,SAAC9hB,GAAmE,IAAvDwhB,EAAuD,uDAAnC,KAAM3qH,EAA6B,uDAAT,KACjG,OAAO,SAAC+K,EAAU9hB,GAAa,MACMA,IAA5B+K,EADsB,EACtBA,YAAayD,EADS,EACTA,YAEd3D,EAAa1E,OAAOC,UAAU2Q,GAAqBA,EAAoBhM,EAAYD,iBACnFmtF,EAAaypC,GAAqBlzH,EAAYC,iBAEhDmzH,EAAervI,OAAO+2B,OAAO,GAAI9a,EAAYG,sBACjDpc,OAAOmc,KAAKF,EAAYG,sBAAsB1S,SAAQ,SAAA4lI,IAC/CA,IAAuB3hB,UACnB0hB,EAAaC,MAGxB,IAAI35G,EAAmB1Z,EAAY0Z,iBAC/B+vE,IACF/vE,EAAmB1Z,EAAY0Z,iBAAiBviB,KAAI,SAAAm8H,GAOlD,OANIA,EAAU7oB,eAAiBhhB,EAAWpyF,IAAMi8H,EAAUj3H,aAAeA,IACpE,IAAA+sG,wBAAuBkqB,IACtBtzH,EAAYmzH,uBAAuBrvI,SACrCwvI,EAAUnzH,qBAAuBpc,OAAO+2B,OAAO,GAAIs4G,IAGhDE,MAIXhgH,EAAS,CACP7Y,KAAMoV,EAAM8kD,2BACZzkD,QAAS,CACP/P,qBAAsBizH,EACtB15G,mBACArd,aACA82H,uBAAwBnzH,EAAYmzH,4BAMLM,EAA1BA,wBAA0B,SAACtzH,GAAsF,IAAhEuzH,EAAgE,wDAAhDjqC,EAAgD,uDAAnC,KAAMlhF,EAA6B,uDAAT,KACnH,OAAO,SAAC+K,EAAU9hB,GAAa,MACkCA,IAAxD+K,EADsB,EACtBA,YAAayD,EADS,EACTA,YAAavO,EADJ,EACIA,UAAWuD,EADf,EACeA,gBACrCpD,EAAaH,EAAbG,UACDqO,EAAmBwpF,GAAczpF,EAAYC,iBAC7C5D,EAAa1E,OAAOC,UAAU2Q,GAAqBA,EAAoBhM,EAAYD,iBAErF62H,EAAyBnzH,EAAYmzH,uBAEzC,IAAKO,GAAuD,IAA7C3vI,OAAOmc,KAAKC,GAAsBrc,OAAc,CAC7D,IAAM6vI,EAAc5vI,OAAOmc,KAAKC,GAAsB,GACtD,GAAIwzH,EAAa,CACf,IAAM55G,EAAc5Z,EAAqBwzH,GAAa55G,YAChDzZ,EAAkBH,EAAqBwzH,GAAarzH,gBAC1D,GAAIyZ,GAAeA,EAAY0xF,cAAgBnrG,EAAiB,CAC9D,IAAM0rG,EAAkBjyF,EAAY0xF,aAAatwG,MAAK,SAAA4wG,GAAA,QAAS,IAAAE,mBAAkB,CAACphG,KAAMvK,GAAkByrG,MACtGC,EACGA,EAAgB30G,KAAO8I,EAAqBwzH,GAAa55G,YAAY1iB,KACxE8I,EAAqBwzH,GAAa55G,YAAch2B,OAAO+2B,OAAO,GAAIf,EAAa,CAC7E1iB,GAAI20G,EAAgB30G,MAKxBhQ,QAAQ4B,IAAI,iDAAkD8wB,EAAY0xF,aAAcnrG,KAMhG,IAAI8yH,EAAeM,EACf3vI,OAAO+2B,OAAO,GAAI3a,GAClBpc,OAAO+2B,OAAO,GAAI9a,EAAYG,qBAAsBA,GAIxD,GAAI,EAAA/U,WAAa4J,EAAgB+B,SAAS0pB,UAAY7uB,EAAU9N,SAAW4vI,GACtEvzH,GAAqE,IAA7Cpc,OAAOmc,KAAKC,GAAsBrc,OAAc,CAE3E,IAAM6vI,GAAe5vI,OAAOmc,KAAKC,GAAsB,GACjDyzH,EAAe,CAAC3zH,mBAAkB5D,aAAY8D,wBAChD0zH,GAAiB,IAAAC,oBAAmB7zH,EAAkB0zH,EAAaP,GAJI,GAQzB,IAAAW,kCAAiCX,EAAcS,GAA5FG,EARsE,EAQtEA,oBARsE,EAQjDC,uBAExBb,EAAeY,EAEfH,GAAiB,IAAAC,oBAAmB7zH,EAAkB0zH,EAAaP,IAZM,OAgBtC,IAAAc,kCACnCL,EACAD,EACAhiI,GAHGsoB,EAhBsE,EAgBtEA,aAhBsE,EAgBxDi6G,gBAMjB7gH,GAAS,IAAA8gH,oBAAA,wBAAuBl6G,MAGlCi5G,GAAyB,IAAAkB,2BACvBjB,EACAQ,EACA15G,EACA25G,GAIJ,GAAI5zH,EAAJ,CAGE,IAAMyZ,EAAmBy5G,EAAuBrvI,OAC5Ckc,EAAY0Z,kBACZ,IAAA46G,2BAA0Bt0H,EAAa3D,EAAY4D,EAAiB5I,GAAI+7H,GAE5E9/G,EAAS,CACP7Y,KAAMoV,EAAM8kD,2BACZzkD,QAAS,CACP7T,aACA8D,qBAAsBizH,EACtB15G,mBACAy5G,iCAON7/G,EAAS,CACP7Y,KAAMoV,EAAM8kD,2BACZzkD,QAAS,CACP/P,qBAAsBizH,EACtBD,yBAEA92H,kBASkCk4H,EAA7BA,2BAA6B,SAACp0H,EAAsB9D,EAAYouG,GAAnC,MAAqD,CAC7FhwG,KAAMoV,EAAM+kD,+BACZ1kD,QAAS,CAAC/P,uBAAsB9D,aAAYouG,kBAjOvC,IAoOD,EAAA+pB,GAAA,gCAAiC,WAAOC,GAAP,2FAE/BC,EAAkB,GAGxBD,EAA2BhnI,SAAQ,SAAAknI,GAEjC,IAAM7pI,GAAiB,IAAA8pI,yBAAwBD,GAAc,GACvDpqH,GAAS,IAAAC,kBAAiB1f,GAE3B4pI,EAAgB5pI,KACnB4pI,EAAgB5pI,GAAkB,IAGpC/G,OAAOmc,KAAKy0H,EAAax0H,sBAAsB1S,SAAQ,SAAA2S,GACrD,IAAMy0H,EAAoBF,EAAax0H,qBAAqBC,GAAWE,gBACvE,GAAIu0H,EAAmB,CACrB,IAAM5oH,EAAe1B,EAAOgb,wBAAwBsvG,EAAkBl/H,QACtE,IAAKsW,IAAiByoH,EAAgB5pI,GAAgBtB,SAASqrI,EAAkBvuH,aAE/E,YADAouH,EAAgB5pI,GAAgB1G,KAAKywI,EAAkBvuH,aAGnCiE,EAAOuqH,qBAAqBD,EAAkBvuH,YAAa2F,IAC1DyoH,EAAgB5pI,GAAgBtB,SAASqrI,EAAkBvuH,cAChFouH,EAAgB5pI,GAAgB1G,KAAKywI,EAAkBvuH,oBAxB1B,8BA+BVviB,OAAOmc,KAAKw0H,GA/BF,qEA+B5B5pI,EA/B4B,SAgC/B4pI,EAAgB5pI,GAAgBhH,OAhCD,mCAkCH,IAAA6sH,eAAc+jB,EAAgB5pI,IAlC3B,SAkC3BiqI,EAlC2B,SAmCVA,EAAgBzxI,OAEtB,IAAAknB,kBAAiB1f,GACzB+lH,gBAAgBkkB,EAAgBzxI,MAtCR,iSA2C9BmC,QAAQC,WA3CsB,8EAAjC,6CA6CAsvI,EAA0B,SAACP,EAA4BjrC,GAG3D,IAAI9vE,EAAmB,GA4DvB,OA3DA+6G,EAA2BhnI,SAAQ,SAAAknI,GACjC,IAAInjB,EAAe,GACb/nB,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAOs9H,EAAalqB,gBAC1E,GAAKhhB,EAAL,CAKA,IAAM3+F,GAAiB,IAAA8pI,yBAAwBD,GAAc,GACvDpqH,GAAS,IAAAC,kBAAiB1f,GAEhC/G,OAAOmc,KAAKy0H,EAAax0H,sBAAsB1S,SAAQ,SAAA2S,GAErD,IAAM60H,EAAuBlxI,OAAO+2B,OAAO,GAAI65G,EAAax0H,qBAAqBC,IAUjF,GAPAoxG,EAAapxG,GAAa60H,EAAqBl7G,YAAch2B,OAAO+2B,OAAO,GAAIm6G,EAAsB,CACnGl7G,YAAah2B,OAAO+2B,OAAO,GAAIm6G,EAAqBl7G,YAAa,CAC/D0xF,aAAcwpB,EAAqBl7G,YAAY0xF,aAAe,GAAK,SAElE1nH,OAAO+2B,OAAO,GAAIm6G,GAGnBA,EAAqBl7G,YAAa,CACpC,IAAMiyF,EAAkBviB,EAAWrR,aAAaj9E,MAAK,SAAA8uG,GAAA,OAAYA,EAAS5yG,KAAO49H,EAAqBl7G,YAAY1iB,MAC9G20G,EACFwF,EAAapxG,GAAW2Z,YAAciyF,GAEtC3kH,QAAQ4B,IAAI,6CAA8CgsI,EAAqBl7G,aAC/Ey3F,EAAapxG,GAAa,IAExB60H,EAAqBl7G,YAAY0xF,cAAgBO,GACnDipB,EAAqBl7G,YAAY0xF,aAAah+G,SAAQ,SAAAynI,GACpD,IAAMC,EAAU1rC,EAAWrR,aAAaj9E,MAAK,SAAA8uG,GAC3C,OAAOA,EAAS5yG,KAAO69H,EAAa79H,IAAM4yG,EAASpqG,YAAcq1H,EAAar1H,aAE5Es1H,GACG3jB,EAAapxG,GAAW2Z,YAAY0xF,eACvC+F,EAAapxG,GAAW2Z,YAAY0xF,aAAe,IAErD+F,EAAapxG,GAAW2Z,YAAY0xF,aAAarnH,KAAKL,OAAO+2B,OAAO,GAAIq6G,EAAS,CAAC1pB,aAAc,SAEhGpkH,QAAQ4B,IAAI,8DAOpB,GAAIgsI,EAAqB30H,gBAAiB,CACxC,IAAM2L,EAAe1B,EAAOgb,wBAAwB0vG,EAAqB30H,gBAAgB3K,QACzF67G,EAAapxG,GAAWE,gBAAkB2L,EACtC1B,EAAOuqH,qBAAqBG,EAAqB30H,gBAAgBgG,YAAa2F,GAC9E,SAGRyN,EAAiBt1B,KAAKL,OAAO+2B,OAAO,GAAI65G,EAAc,CAACx0H,qBAAsBqxG,UApD3EnqH,QAAQ4B,IAAI,2EAA4E0rI,MAsD5FttI,QAAQ4B,IAAI,8BAA+BywB,GACpCA,GAGI07G,EAAwBA,EAAxBA,sBAAwB,SAAC17G,GAAD,MAAuB,CAC1Djf,KAAMoV,EAAMklD,mCACZ7kD,QAAS,CAACwJ,sBAGkC27G,EAAjCA,+BAAiC,SAACZ,GAC7C,uCAAO,WAAOnhH,EAAU9hB,GAAjB,0FACiBA,IAAfwO,EADF,EACEA,YADF,SAECw0H,EAA+BC,GAFhC,OAGCa,EAAkBN,EAAwBP,EAA4Bz0H,EAAYwpF,YACxFl2E,EAAS8hH,EAAsBE,IAJ1B,kDAAP,qDAQsC9kB,EAA3BA,yBAA2B,eAAC3wG,EAAD,uDAAa,GAAIywG,EAAjB,uDAAyC,GAAzC,MAAiD,CACvF71G,KAAMoV,EAAMmlD,4BACZ9kD,QAAS,CACPrQ,YACAywG,2BAIwCilB,EAA/BA,6BAA+B,SAACC,GAAD,MAAgC,CAC1E/6H,KAAMoV,EAAMglD,iCACZ3kD,QAAS,CAACslH,+BAG0BC,EAAzBA,uBAAyB,SAACtC,GAAD,MAA6B,CACjE14H,KAAMoV,EAAMilD,0BACZ5kD,QAAS,CAACijH,4BAG0BuC,EAAzBA,uBAAyB,SAACxkB,GAAD,MAA0B,CAC9Dz2G,KAAMoV,EAAMolD,2BACZ/kD,QAAS,CAACghG,0B,4nBClYZ,QAEA,QACA,QACA,QACA,Q,IACA,MACA,QACA,QACA,QACA,QACA,QACA,Q,IAKA,Q,IACA,QACA,Q,OACA,QAKA,QACA,QACA,QACA,Q,mDAEA,IA6qBa,EAwLA,EAwEA,EAyBA,EAt8BPykB,EAA2B,SAAC3mH,EAAS/nB,GACzC,MAAiB,SAAbA,EACK+nB,EAAQnE,KAAKhD,iBAEL,oBAAb5gB,EACK+nB,EAAQnE,KAAK1I,SAASlb,IAAa,MAErC+nB,EAAQnE,KAAK5jB,IAGhB2uI,EAA8B,SAACthD,EAAUrtF,EAAU4uI,GAavD,OAVAvhD,EAAWA,EAASv8E,MAAK,SAACC,EAAEC,GAC1B,IAAI69H,EAAQH,EAAyB39H,EAAG/Q,GACpC8uI,EAAQJ,EAAyB19H,EAAGhR,GACpC+uI,EAAQL,EAAyB39H,EAAG69H,GACpCI,EAAQN,EAAyB19H,EAAG49H,GACxC,OACKC,EAAQC,EAAS,EAAKD,EAAQC,GAAU,EAAKC,EAAQC,EAAS,EAAKD,EAAQC,GAAU,EAAI,MAarFC,EAAoBA,EAApBA,kBAAoB,SAAC5hD,GAAoC,IAA1B6hD,EAA0B,0DAC/B,UAAM3kI,WAApCwD,EAD6D,EAC7DA,gBAAiBmP,EAD4C,EAC5CA,UACjBM,EAA0BN,EAA1BM,uBACDtD,EAAqBnM,EAAgB+B,SAE3C,IAAKoK,EAAmB8rB,aAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,cAAmBE,EAiBjI,GAAI6vE,EAAS,IAAkC,kBAA5BA,EAAS,GAAGzpE,KAAKlV,QAA8B2+E,EAAS,GAAGzpE,KAAK9a,YAAYqmI,oBACpG9hD,EAAWA,EAAS,GAAGzpE,KAAK9a,YAAYqmI,oBAAoB9hD,QACvD,IAAInzE,EAAmBk1H,aAAgBrhI,EAAgBshI,2BAA8BthI,EAAgBuhI,mBAMrG,CACL,IAAMC,EAAiBliD,EAAShlF,MAAK,SAAA0f,GAAA,OAAWA,EAAQnE,KAAK1I,SAAb,mBAA4C,kBAAoB,OAEhHmyE,GADAA,EAAWshD,EAA4BthD,EAAUkiD,EAAgB,KAC7Cz+H,MAAK,SAACC,EAAGC,GAAJ,OAAU,IAAAvB,WAAUuB,EAAE4S,OAAQ,IAAAnU,WAAUsB,EAAE6S,UAC9DsrH,GAAiB7hD,EAAShlF,MAAK,SAAA0f,GAAA,OAAWA,EAAQnE,KAAK4rH,gCAC1DniD,EAAWshD,EAA4BthD,EAAU,2BAVnDA,EAAWA,EAASn9E,KAAI,SAAA6X,GAEtB,OADAA,EAAQnE,KAAKzS,cAAe,IAAAgD,gBAAe4T,EAAQnE,KAAM,GAClDmE,KAETslE,EAAWshD,EAA4BthD,EAAU,eAAgB,YAxB6F,CAC9J,IAAMoiD,EAAmBpiD,EACtBj+E,QAAO,SAAA2Y,GAAA,QAAY,IAAAjL,oBAAmBiL,EAAQnE,SAC9C1T,KAAI,SAAA6X,GAEH,OADAA,EAAQnE,KAAKzS,cAAe,IAAAgD,gBAAe4T,EAAQnE,KAAM,GAClDmE,KAEL2nH,EAAiBriD,EACpBj+E,QAAO,SAAA2Y,GAAA,OAAW,IAAAjL,oBAAmBiL,EAAQnE,SAC7C1T,KAAI,SAAA6X,GAEH,OADAA,EAAQnE,KAAKzS,cAAe,IAAAgD,gBAAe4T,EAAQnE,KAAM,GAClDmE,KAEXslE,EAAWnzE,EAAmBk1H,YAAnB,wBACNT,EAA4Bc,EAAkB,eAAgB,UADxD,aAENd,EAA4Be,EAAgB,eAAgB,UAFtD,wBAGHD,IAHG,aAGkBC,IAiB/B,GAAIR,EAAe,CAEjB,IAAMS,EAAgBtiD,EAASj+E,QAAO,SAAA2+E,GAAA,OAAeA,EAAWnqE,KAAKooE,4BAC/D4jD,EAAmBviD,EAASj+E,QAAO,SAAA2+E,GAAA,OAAcA,EAAWnqE,KAAKooE,4BACvEqB,0BACKsiD,IADL,aAGKC,IAGP,OAAOviD,GAmHIwiD,GAtGoBC,EAApBA,kBAAoB,SAC/BziD,EACA7oB,EACAM,EACA9/C,EACAkqH,GAEG,IADHa,IACG,yDAEH1iD,EAAWA,EAASj+E,QAAO,SAAA3D,GAAA,OAAWA,KAGtC,IAAMy1F,EAAqBl8E,IAAgB,IAAAs6E,kBAAiB96B,EAAmBM,GAC/E,IAAKo8B,EACH,OAAO7T,EAET,IAAM2iD,EAAmB,GACzB,GAAID,EAA4B,CAC9B,IAAME,EAAgB5iD,EAASn5E,MAAK,SAAA6T,GAClC,QAAKA,IAGE,IAAAk5E,oBAAmBl5E,EAAQnE,KAAM4gD,EAAmBM,EAAoB9/C,MAE7EirH,GACFD,EAAiB7yI,KAAK8yI,GAG1B,IAAMC,EAAU,EAAAxoG,gBAAgBnlC,SAAS2+F,EAAmBxyF,QAC5D,GAAIwhI,EAAS,CACX,IAAM5sH,GAAS,IAAAC,oBACT4sH,EAAgB7sH,EAAO8sH,0BAG7BD,EAAc3pI,SAAQ,SAAAgI,GACpB,GAAIA,GAAYA,EAASC,YAAa,CACpC,IAAM4hI,EAAY7hI,EAASC,YAAYoZ,yBACvC,IAAKmoH,EAAiB3nI,MAAK,SAAA0f,GAAA,OAAWA,EAAQnE,KAAKiE,2BAA6BwoH,KAAY,CAC1F,IAAMC,EAAqBjjD,EAASn5E,MAAK,SAAA6T,GAAA,OAAWA,EAAQnE,KAAKiE,2BAA6BwoH,KAC1FC,GACFN,EAAiBzxE,QAAQ+xE,QAOnC,IAAMC,EAAStB,EAAkB5hD,EAAU6hD,GAS3C,OARAc,EAAiBxpI,SAAQ,SAACgqI,GACxB,IAAMC,EAAeF,EAAOxrH,WAAU,SAAAgD,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAOogI,EAAc5sH,KAAK7X,UAAUqE,MACxGqgI,GAAgB,IAClBF,EAAOxyI,OAAO0yI,EAAc,GAC5BF,EAAOxyI,OAAO,EAAG,EAAGyyI,OAIjBD,GAU8CG,EAA1CA,wCAA0C,SAACrjD,GAEtD,OADwBsjD,IAAjBC,cAKAvjD,EAASn9E,KAAI,SAAA6X,GAClB,KAAK,IAAAjL,oBAAmBiL,EAAQnE,MAC9B,OAAOmE,EAIT,IAAKA,EAAQ4hC,aACX,OAAO5hC,EAET,IAAM8oH,EAAiB9oH,EAAQ4hC,aAAaz1C,MAAK,SAAAo0E,GAC/C,QAAKA,EAAO78E,UAGR68E,EAAO78E,QAAQM,UAAUqE,KAAO2X,EAAQnE,KAAK7X,UAAUqE,MAGnD,IAAA0M,oBAAmBwrE,EAAO78E,aAEpC,OAAIolI,IAAmBxjD,EAAShlF,MAAK,SAAAyoI,GAAA,OAASA,EAAMltH,KAAK7X,UAAUqE,KAAO2X,EAAQnE,KAAK7X,UAAUqE,MACxF,CAACwT,KAAMitH,EAAeplI,SAExBsc,KAxBAslE,GAiCiCwiD,EAA/BA,6BAA+B,SAACxiD,GAAa,MAET,UAAM9iF,WAA9C4S,EAFiD,EAEjDA,YAAa2R,EAFoC,EAEpCA,wBACb1Q,EAAgBjB,EAAhBiB,aACAuR,EAAgBb,EAAhBa,aAEDohH,EAAoB3yH,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,yBAAfA,EAAMxf,QAE3D,OAAKkyI,EAIE1jD,EAASj+E,QAAO,SAAA2Y,GAIrB,IAAMipH,GAAgB,IAAAxmD,sBAAqBziE,EAAQnE,KAAMmtH,GACnDE,GAAsB,IAAA58B,mBAAkBtsF,EAAQnE,KAAMxF,GAAc,EAAO2J,EAAQ4hC,cAAgB,IACnGunF,EAAeA,GAAfA,qBACAF,GAAiB,KADjB,cAEAC,GAAuB,IAAI/gI,KAAI,SAAAihI,GACjC,OAAO,IAAA3mD,sBAAqB2mD,EAAY1lI,QAASslI,QAGrD,OAAOG,GAAgBA,EAAa7oI,MAAK,SAAA+oI,GACvC,GAAIphI,MAAMC,QAAQmhI,GAChB,OAAOA,EAAY/oI,MAAK,SAAA4vB,GACtB,IAAMo5G,GAAoB,IAAA18C,qBAAoB18D,EAAU84G,GACxD,OAAOM,IAAuBA,EAAkB/xI,QAAUqwB,KAG9D,IAAM0hH,GAAoB,IAAA18C,qBAAoBy8C,EAAaL,GAC3D,OAAOM,IAAuBA,EAAkB/xI,QAAUqwB,QAvBrD,KAiIE2hH,GA/F0BC,EAA1BA,wBAA0B,SAAClkD,EAAU7oB,GAEhD,IAAK6oB,EAASxwF,OACZ,MAAO,CAAC,CACN2W,KAAM,EAAA40B,2BAA2BC,QACjCglD,SAAU,KAId,IAAImkD,EAAe,GAEbC,EAAoB5B,EAA6BxiD,GACnDokD,EAAkB50I,QACpB20I,EAAar0I,KAAK,CAChBqW,KAAM,EAAA40B,2BAA2BE,UACjC+kD,SAAU4hD,EAAkBwC,KAIhC,IAAMC,EAASD,EAAkB50I,OAASwwF,EAASj+E,QAAO,SAAA2Y,GACxD,OAAO0pH,EAAkBxrI,OAAM,SAAA0rI,GAAA,OAAiBA,EAAc/tH,KAAK7X,UAAUqE,KAAO2X,EAAQnE,KAAK7X,UAAUqE,SACxGi9E,EAEL,IAAKA,EAAS,GACZ,OAAOmkD,EAGT,IAAMxsH,EAAeqoE,EAAS,GAAGzpE,KAAK9a,YAEtC,OAAQkc,EAAatW,QACnB,IAAK,gBACH,IAAMkjI,EAAkB,CACtBp+H,KAAM,EAAA40B,2BAA2BC,QACjCglD,SAAU,IAGNwyB,EADe76F,EAAalc,YACF02C,KAEhCkyF,EAAOlrI,SAAQ,SAAAuhB,GACb,IAAK83F,IAAeA,EAAWtxF,gBAAkBxG,EAAQnE,KAAK1I,SAAS22H,YACjErtE,IAAqB,aAAQz8C,EAAQnE,KAAK1I,SAAS22H,WAAYrtE,EAAkBtpD,SAAS22H,aACzFD,EAAgBE,cAAgB/pH,EAAQnE,KAAK1I,SAAS22H,aACzDD,EAAgBE,aAAe,8BAAgC/pH,EAAQnE,KAAK1I,SAAS22H,WAAW,IAElGD,EAAgBvkD,SAASlwF,KAAK4qB,QACzB,GAAIA,EAAQnE,KAAK1I,SAAS22H,WAAY,CAC3C,IAAME,EAA0BP,EAAat9H,MAAK,SAAA89H,GAChD,OAAOA,EAAex+H,OAAS,EAAA40B,2BAA2BG,iBAAmBypG,EAAeC,sBAAwBlqH,EAAQnE,KAAK1I,SAAS22H,WAAW,MAEnJE,EACFA,EAAwB1kD,SAASlwF,KAAK4qB,GAEtCypH,EAAar0I,KAAK,CAChBqW,KAAM,EAAA40B,2BAA2BG,gBACjC0pG,oBAAqBlqH,EAAQnE,KAAK1I,SAAS22H,WAAW,GACtDxkD,SAAU,CAACtlE,GACX+pH,aAAc,8BAAgC/pH,EAAQnE,KAAK1I,SAAS22H,WAAW,SAKvFL,EAAar0I,KAAKy0I,GAClB,MAEF,QACEJ,EAAar0I,KAAK,CAChBqW,KAAM,EAAA40B,2BAA2BC,QACjCglD,SAAUqkD,IAMhB,OAAOF,GAsBgCF,EAA5BA,0BAA4B,SAACY,EAAUC,GAClD,IAAKD,EAASh3H,SAAT,iBAAwCg3H,EAASlmD,yBACpD,OAAO,KAET,IAAMomD,GAAc,IAAA1nD,kBAAiBwnD,EAASnmI,UAAUmF,mBACxD,GAAIihI,GAAoBA,EAAiB5jH,eACpC2jH,EAASh3H,SAAT,gBAAqC3Y,UAAS,IAAAmoF,kBAAiBynD,EAAiB5jH,cAAcxiB,UAAUmF,uBAEtGihI,EAAiB5jH,cAAcrT,SAA/B,iBACGi3H,EAAiB5jH,cAAcrT,SAA/B,iBACGi3H,EAAiB5jH,cAAcrT,SAA/B,gBAA2D3Y,SAAS6vI,IAC7E,OAAOD,EAAiB5jH,cAI5B,IAAM8jH,EAAWH,EAASh3H,SAAT,gBAAqC3Y,SAAS,EAAAg+B,SAASE,IAfD,EAnBnD,SAACyxG,GACrB,IAAII,EAAW,EACXC,EAAgB,EACpB,GAAIL,EAASh3H,SAAT,gBAAqC3Y,SAAS,EAAAg+B,SAASE,IAAK,CAC9D,IAAM9+B,EAASuwI,EAASppI,YACxBhM,OAAOmc,KAAKtX,EAAOkiC,gBAAgBr9B,SAAQ,SAAAs9B,GACzC,IAAM0uG,EAAkB7wI,EAAOkiC,eAAeC,GAC1C0uG,GAAmBA,EAAgBt3H,SAAhB,YACrBq3H,GAAiBC,EAAgBt3H,SAAhB,cAGjBg3H,EAASh3H,SAAT,YACFo3H,EAAWJ,EAASh3H,SAAT,WAIf,MAAO,CAACo3H,WAAUC,iBAmBgBE,CAAcP,GAAzCI,EAhBgE,EAgBhEA,SAAUC,EAhBsD,EAgBtDA,cAGbG,EADgBC,GAAdA,qBAAkBR,EAAiBpoD,WAAnC,aAAgDooD,EAAiBloD,gBACpC76E,QAAO,SAAAwjI,GACxC,QAAKA,EAAY13H,SAAZ,kBAGDm3H,IACGO,EAAY13H,SAAZ,gBAAwC3Y,SAAS,EAAAg+B,SAASE,OAG1DmyG,EAAY13H,SAAZ,cAGmC,MAApCg3H,EAASh3H,SAAS8tE,cAC2B,KAAxC4pD,EAAY13H,SAAZ,aACuC,KAAxC03H,EAAY13H,SAAZ,aAA8C03H,EAAY13H,SAAZ,YAAsCo3H,GACxC,MAA1CM,EAAY13H,SAAZ,eAELo3H,GAGEM,EAAY13H,SAAZ,YAAsCo3H,IAExCJ,EAASh3H,SAAT,gBAAqC3Y,UAAS,IAAAmoF,kBAAiBkoD,EAAY7mI,UAAUmF,qBACvF0hI,EAAY13H,SAAZ,gBAAwC3Y,SAAS6vI,OAGxD,GAAIM,EAAiB71I,OAAS,GAAKs1I,EAAiB5jH,cAAe,CAEjE,IAAM8hE,EAAuBqiD,EAAiBx+H,MAAK,SAAAzI,GAAA,OAAWA,EAAQM,UAAUqE,KAAO+hI,EAAiB5jH,cAAcxiB,UAAUqE,MAChI,GAAIigF,EACF,OAAOA,EAET,IAAMwiD,EAAoBH,EAAiBx+H,MAAK,SAAAzI,GAAA,OAAWA,EAAQM,UAAUmF,oBAAsBihI,EAAiB5jH,cAAcxiB,UAAUmF,qBAC5I,GAAI2hI,EACF,OAAOA,EAET,IAAIC,EAAsBJ,EAAiBtjI,QAAO,SAAA3D,GAAA,OAAW,aAAQA,EAAQyP,SAAR,KAA0Bg3H,EAASh3H,SAAT,SAe/F,OAdK43H,EAAoBj2I,SACvBi2I,EAAsBJ,EAAiBtjI,QAAO,SAAA3D,GAAA,OAAW,aAAQA,EAAQyP,SAAR,KAA0Bi3H,EAAiB5jH,cAAcrT,SAA/B,UAEzFm3H,IAAaS,EAAoBj2I,QAAUq1I,EAASh3H,SAAT,OACR,MAAjCg3H,EAASh3H,SAAT,KAA0B,GAC5B9a,QAAQ4B,IAAI,4CACHuwI,IACTO,EAAsBJ,EAAiBtjI,QAAO,SAAA3D,GAC5C,OAAOA,EAAQyP,SAAR,aAAmCzP,EAAQyP,SAAR,YAAkCq3H,KAE9EnyI,QAAQ4B,IAAI,sBAAuB8wI,KAGpBA,EAAoB1jI,QAAO,SAAA3D,GAAA,OAAWA,EAAQg8E,iBAAmB0qD,EAAiB5jH,cAAck5D,kBACjG,IAAMqrD,EAAoB,IAAMJ,EAAiB,GAErE,OAAOA,EAAiB,KAGpBK,EAAoC,SAACb,GAAqC,IAA3Bc,EAA2B,uDAAP,GACjE1vH,GAAS,IAAAC,oBACTozF,EAAerzF,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IACnC8iI,EAAgCv8B,EAAaxvF,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWioG,EAAaS,eAEhH,GAAI86B,EAASh3H,SAAT,kBAAyCg3H,EAASh3H,SAAT,iBAAsC3Y,SAASo0G,EAAaS,cAEvG,GAAI87B,GAAiCA,EAA8B3kH,eAAiB2jH,EAASh3H,SAAT,kBAC9Eg3H,EAASh3H,SAAT,gBAAqC3Y,UAAS,IAAAmoF,kBAAiBwoD,EAA8B3kH,cAAcxiB,UAAUmF,oBAAqB,CAC9I,IAAMiiI,EAAa7B,EAA0BY,EAAUgB,GAEnDC,GAAcD,EAA8B3kH,cAAcxiB,UAAUqE,KAAO+iI,EAAWpnI,UAAUqE,IAClG4iI,EAAkB71I,KAAK,CACrB08D,KAAMq5E,EAA8B3kH,cACpCoyC,GAAIwyE,UAMV,GAAIjB,EAASh3H,SAAT,UAA+B3Y,SAAS,MACrCywI,EAAkB3qI,MAAK,SAAA+qI,GAAA,OAAgBA,EAAazyE,IAAMyyE,EAAazyE,GAAG50D,UAAUqE,KAAO8hI,EAASnmI,UAAUqE,OACjH4iI,EAAkB71I,KAAK,CACrB08D,KAAMq5E,EAAgCA,EAA8B3kH,cAAgB2jH,EAASppI,YAAYylB,cACzGoyC,GAAIuxE,SAGH,GAAIA,EAASh3H,SAAT,iBAAuC,CAChD,IAAMi3H,EAAmBx7B,EAAaxvF,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWwjI,EAASh3H,SAAT,iBAAsC,MAC5H,GAAIi3H,EAAkB,CACpB,IAAMgB,EAAa7B,EAA0BY,EAAUC,GAEjDlsH,EAAcitH,EAChBA,EAA8B3kH,cAC9B2jH,EAASppI,YAAYylB,cACrB4kH,GACFH,EAAkB71I,KAAK,CACrB08D,KAAM5zC,EACN06C,GAAIwyE,KAMd,OAAOH,GAQIK,EAAwCA,EAAxCA,sCAAwC,SAAC5nI,GACpD,IAEMo0G,GAFS,IAAAt8F,oBACaqD,MAAM,EAAAqsH,OAAO7iI,IACTovC,KAC1B8zF,EAAWzzB,GAAcA,EAAWtxF,eAAiBsxF,EAAWtxF,cAAcrT,SAAzB,gBAAqD3Y,SAAS,EAAAg+B,SAASE,IAC5H8yG,EAAoB,CAAC,CACzBjqD,SAAU,kBACVI,UAAW4pD,EAAW,EAAA/yG,SAASE,IAAK,IAAAiqD,kBAAiBj/E,EAAQM,UAAUmF,oBACtE,CACDo4E,SAAU,aACVI,UAAW4pD,EAAW,EAAA/yG,SAASE,GAAKh1B,EAAQyP,SAAR,kBAYtC,GAVIo4H,GAAY7nI,EAAQyP,SAAR,aAEdq4H,EAAkBp2I,KAAK,CACrBmsF,SAAU,YACVI,UAAWj+E,EAAQyP,SAAR,cAMX2kG,GAAcA,EAAWtxF,gBAAkBsxF,EAAWtxF,cAAcw6D,gCAAgCwqD,GAAoB,CAC1H,IAEMC,GAFS,IAAAjwH,oBACSm9E,sBAAsB,CAAC98E,KAAMi8F,GAAa,GAAI,GAAIA,EAAWtxF,eACjDnf,QAAO,SAAA2Y,GAAA,OAAWA,EAAQnE,KAAKmlE,gCAAgCwqD,MAC7FE,EAAoB,CAAC,CACzBnqD,SAAU,aACVI,UAAWm2B,EAAWtxF,cAAcrT,SAAzB,aAEb,OAAOs4H,EAAmB32I,OACtB22I,EAAmBt/H,MAAK,SAAA6T,GAAA,OAAWA,EAAQnE,KAAKmlE,gCAAgC0qD,OAAuBD,EAAmB,GAC1H,KAEN,OAAO,MA0KI7C,GAnK2B+C,EAA3BA,yBAA2B,SAACjoI,GACvC,IAEMo0G,GAFS,IAAAt8F,oBACaqD,MAAM,EAAAqsH,OAAO7iI,IACTovC,KAEhC,GAAIqgE,GAAcA,EAAWtxF,cAAe,CAC1C,IAAM2jH,EAAWmB,EAAsC5nI,GACvD,GAAIymI,EAAU,CACZ,IAAMyB,EAAczB,EAAStuH,KACzBi8F,EAAWh8E,gBAAkBquG,EAAStuH,KAAK1I,SAAS8tE,eACtDlsF,OAAOmc,KAAK4mG,EAAWh8E,gBAAgBr9B,SAAQ,SAAAs9B,GAC7C,GAAIA,IAAa6vG,EAAYz4H,SAAS8tE,cACpC62B,EAAWh8E,eAAeC,GAAY6vG,OACjC,GAAI9zB,EAAWh8E,eAAeC,GAAW,CAC9C,IAAM25D,EAAcoiB,EAAW32B,2BAA2BplD,EAAU6vG,GACpE9zB,EAAWh8E,eAAeC,GAAY25D,GAAe,SAI3DoiB,EAAWtxF,cAAgBolH,KAUSC,EAA7BA,2BAA6B,SAACnoI,GACzC,GAAIA,EAAQugF,yBACV,MAAO,GAET,GAAyC,WAArCxqF,SAASC,SAASoC,eAA6B,CACjD,GAAkC,aAA9B,IAAAW,2BACF,OAAQiH,EAAQiD,QACd,IAAK,eACL,IAAK,qBACH,IAAMmlI,EAAwBpoI,EAAQ3C,YAAYgrI,sBAAsBroI,GACxE,OAAIooI,EAAsBE,kBAAoBF,EAAsBG,YAE3D,CAAC,CACNn6E,KAFuBpuD,EAAQ3C,YAAYA,YAAYywC,WAEhChrB,cACvBoyC,GAAIkzE,EAAsBE,kBAGvB,GAET,QACE,MAAO,GAGb,MAAO,GAET,IAAMzwH,GAAS,IAAAC,oBACTozF,EAAerzF,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IACnCw3G,EAAejR,EAAaka,OAC5BhR,EAAalJ,EAAan3D,KAC5BwzF,EAAoB,GAExB,OAAQvnI,EAAQiD,QACd,IAAK,gBACH,IAAKmxG,EAAWtxF,gBAAkBsxF,EAAWtxF,cAAcw6D,gCAAgC6+B,EAAa53B,2BAA2BvkF,IAAW,CAC5I,IAAMymI,EAAWzmI,EAAQwoI,gCAAgCp0B,EAAWtxF,eACpE,GAAI2jH,EAOF,OALAc,EAAkB71I,KAAK,CACrB08D,KAAMgmD,EAAWtxF,cACjBoyC,GAAIuxE,IAENc,EAAoBD,EAAkCb,EAAUc,GAIpE,MAAO,GAET,IAAK,cACH,IAAMkB,EAAwBr0B,EAAW7vB,2BAA2BvkF,GACpE,IAAKm8G,EAAar5F,gBAAkBq5F,EAAar5F,cAAcw6D,gCAAgCmrD,GAAwB,CACrH,IACMC,EADW7wH,EAAOo9E,sBAAsB,CAAC98E,KAAMgkG,GAAe,GAAI,GAAIA,EAAar5F,eAC7Dra,MAAK,SAAA6T,GAC/B,OAAOA,EAAQnE,KAAKmlE,gCAAgCmrD,MAEtD9zI,QAAQ4B,IAAI,aAAcmyI,GACtBA,GACFnB,EAAkB71I,KAAK,CACrB08D,KAAM+tD,EAAar5F,cACnBoyC,GAAIwzE,EAAWvwH,OAKrB,OADAovH,EAAoBD,EAAkCtnI,EAASunI,GAGjE,IAAK,iBACL,IAAK,iBACL,IAAK,mBACH,IAAMd,EAAWmB,EAAsC5nI,GACvD,KAAKo0G,EAAWtxF,eAAkB2jH,GAAYA,EAAStuH,KAAK7X,UAAUqE,KAAOyvG,EAAWtxF,cAAcxiB,UAAUqE,KAC1G8hI,EAAU,CAEZc,EAAkB71I,KAAK,CACrB08D,KAAMgmD,EAAWtxF,cACjBoyC,GAAIuxE,EAAStuH,OAEf,IAAMswH,EAAwBr0B,EAAW7vB,2BAA2BkiD,EAAStuH,MAC7E,IAAKgkG,EAAar5F,gBAAkBq5F,EAAar5F,cAAcw6D,gCAAgCmrD,GAAwB,CACrH,IACMC,EADW7wH,EAAOo9E,sBAAsB,CAAC98E,KAAMgkG,GAAe,GAAI,GAAIA,EAAar5F,eAC7Dra,MAAK,SAAA6T,GAC/B,OAAOA,EAAQnE,KAAKmlE,gCAAgCmrD,MAEtD9zI,QAAQ4B,IAAI,aAAcmyI,GACtBA,GACFnB,EAAkB71I,KAAK,CACrB08D,KAAM+tD,EAAar5F,cACnBoyC,GAAIwzE,EAAWvwH,QAMzB,OAAOovH,EAET,IAAK,aACH,IAAMoB,EAAwB3oI,EAAQ3C,YAEhCurI,EADeD,EAAsBtrI,YACLwrI,WACtC,IAAKD,IAAqB5oI,EAAQyP,SAAR,cACxB,OAAO83H,EAET,IAAMuB,EAAuBH,EAAsBvrD,uBAAuB34E,KAAI,SAAAs5E,GAC5E,MAA2B,kBAAvBA,EAAUF,SACL,CACLA,SAAU,gBACVI,UAAWj+E,EAAQyP,SAAR,eAGRsuE,KAET,IAAK6qD,EAAiB9lH,gBAAkB8lH,EAAiB9lH,cAAcw6D,gCAAgCwrD,GAAuB,CAC5H,IACMJ,EADW7wH,EAAOo9E,sBAAsB,CAAC98E,KAAMywH,GAAmB,GAAI,GAAIA,EAAiB9lH,eACrEra,MAAK,SAAA6T,GAC/B,OAAOA,EAAQnE,KAAKmlE,gCAAgCwrD,MAEtDn0I,QAAQ4B,IAAI,mBAAoBmyI,GAC5BA,GACFnB,EAAkB71I,KAAK,CACrB08D,KAAMw6E,EAAiB9lH,cACvBoyC,GAAIwzE,EAAWvwH,OAIrB,OAAOovH,EAET,QACE,OAAOA,IAQkBrC,EAAlBA,gBAAkB,WAAM,MACMnvI,SAASC,SAA3C2b,EAD4B,EAC5BA,UAAWC,EADiB,EACjBA,MAAOC,EADU,EACVA,aADU,EAEE,UAAM/S,WAApCwD,EAF4B,EAE5BA,gBACAyP,EAH4B,EAEXN,UACjBM,uBACDtD,EAAqBnM,EAAgB+B,SAE3C,MAAO,CACL0kI,UAAWt6H,EAAmBk1H,cAAgBrhI,EAAgBshI,4BAA8BthI,EAAgBuhI,mBAC5GsB,cAAe12H,EAAmB8rB,eAAiB5oB,GAAaC,GAASC,KAAkBE,EAC3Fi3H,iBAAkBv6H,EAAmBu6H,iBACrCl0B,SAAS,IAAAnzG,aAAcW,EAAgBwyG,WAY9Bm0B,EAAiCA,EAAjCA,gCAAA,gCAAiC,+CAAOjH,EAAP,uDAAyB,GAAIkH,EAA7B,wDAAmDC,EAAnD,uDAAoE,GAApE,0EACvCnH,EAAgB5wI,OADuB,yCAEnC2B,QAAQC,WAF2B,OAI5C8B,OAAOs0I,kBAAmB,GAC1B,IAAA7lH,gBACM1L,GAAS,IAAAC,oBACTuxH,EAAaxxH,EAAOsD,MAAP,MAEbozG,EAAW,KAT2B,wJAUnC+a,EAVmC,QAWnCC,EAA2DD,EAA3DC,YAAaC,EAA8CF,EAA9CE,mBAAoBC,EAA0BH,EAA1BG,uBAClClxH,EAASgxH,EAAYhxH,QAAUgxH,EAAY/wH,WAC7C+wH,EAAYvlD,sBAAwBqlD,GAAcA,EAAW3tH,aAAa9e,MAAK,SAAA+e,GAAA,OAAWA,EAAQ1Y,SAAWsmI,EAAYtmI,WAbnF,iCAcb,IAAAqrH,oBAAmB/1G,EAAS,QAAS,EAAGg2G,EAAU,GAAIkb,GAA0BD,GAdnE,OAclCE,EAdkC,OAepCnlI,MAAMC,QAAQklI,IAChBH,EAAYI,iBAAiBD,EAAcnb,GAAU,EAAO,GAAI,MAAM,GAAM,GAhBtC,UAmBtCgb,EAAYtmI,SAAWkmI,EAnBe,mCAoBjB,IAAA7a,oBAAmB/1G,EAAQ,EAAGg2G,EAAU,GAAIkb,GAA0BD,GApBrD,QAoBlC1qC,EApBkC,OAqBxCyqC,EAAYI,iBAAiB7qC,EAAUyvB,GAAU,EAAO,GAAI,MAAM,GAAM,GArBhC,oDAUXyT,EAVW,iXAwB5C,IAxB4C,8CAwBnCsH,EAxBmC,QAyBnCC,EAA8ED,EAA9EC,YAAaC,EAAiEF,EAAjEE,mBAAoBI,EAA6CN,EAA7CM,kBAAmBH,EAA0BH,EAA1BG,uBACrDI,EAAehyH,EAAOo9E,sBAAsB,CAAC98E,KAAMoxH,IAAc9gI,MAAK,SAAA6T,GAC1E,OAAOA,EAAQnE,KAAKiE,2BAA6BotH,KAE/CK,IACED,IACFL,EAAYO,4BAA8BP,EAAYzmH,eAExD+mH,EAAa1xH,KAAK4xH,mBAAkB,IAElCR,EAAYtmI,SAAWkmI,IACpBI,EAAYS,+BACfT,EAAYS,6BAA+B,IAE7CT,EAAYS,6BAA6Bt4I,KAAK+3I,GAA0BD,KAf5E,EAAiCxH,EAAjC,+CAAkD,IAxBN,4OA2C5CltI,OAAOs0I,kBAAmB,GAC1B,IAAAn6C,iBACIi6C,GACF,UAAMtoH,UAAS,IAAAgP,sBA9C2B,kBAgDrC78B,QAAQC,WAhD6B,yGAAjC,4CAgQAi3I,GA7MoBC,EAApBA,kBAAoB,SAAC50C,GAChC,GAAI,EAAAr5D,gBAAgBnlC,SAASw+F,EAAYryF,QACvC,OAAO,EAET,QAAQ,IAAAlK,4BACN,IAAK,UACL,IAAK,cACH,GAAI,EAAAwgG,WAAWziG,SAASw+F,EAAYryF,QAAS,CAC3C,GAA2B,iBAAvBqyF,EAAYryF,OAA2B,CACzC,IAAM4U,GAAS,IAAAC,oBACf,OAAOD,EAAOsD,MAAP,cAAgCtD,EAAOsD,MAAP,aAA6B2yB,aAC9Dj2B,EAAOsD,MAAP,aAA6B2yB,WAAW2xC,SAEhD,OAAO,EAET,SAAI,EAAA4Z,iBAAiBviG,SAASw+F,EAAYryF,SAAY,UAAoBknI,uBAAuB70C,KAG1F,EAAAgE,cAAcxiG,SAASw+F,EAAYryF,QAE5C,IAAK,WACH,OAAO,EAAA80B,uBAAuBjhC,SAASw+F,EAAYryF,SAC9C,EAAA60B,0BAA0BhhC,SAASw+F,EAAYryF,SAC/C,EAAAq+E,uBAAuBxqF,SAASw+F,EAAYryF,SAC5C,EAAAm8G,4BAA4BtoH,SAASw+F,EAAYryF,QACxD,QACE,OAAO,IASkBmnI,EAAlBA,gBAAkB,SAAC90C,GAC9B,IAAKA,GAAeA,EAAY/U,yBAC9B,OAAO,KAET,GAAI,EAAAtkD,gBAAgBnlC,SAASw+F,EAAYryF,QAAS,KACzC0lG,EAAa,UAAM7pG,WAAnB6pG,UACP,MAAO,CACL5gG,KAAM,QACNsQ,YAAa,gBACbgyH,yCACAC,kCACAC,oBAAqB5hC,EAAUttC,kBAGnC,QAAQ,IAAAtiE,4BACN,IAAK,UACL,IAAK,cACH,GAAI,EAAAugG,cAAcxiG,SAASw+F,EAAYryF,QAAS,KACvCunI,EAAmB,UAAM1rI,WAAzB0rI,gBACP,MAAO,CACLziI,KAAM,WACNsQ,YAAa,mBACbgyH,wCACAC,gCACAC,oBAAqBC,EAAgBC,iBAElC,GAAI,EAAApxC,iBAAiBviG,SAASw+F,EAAYryF,QAAS,KACjDunI,EAAmB,UAAM1rI,WAAzB0rI,gBACP,MAAO,CACLziI,KAAM,cACNsQ,YAAa,sBACbgyH,2CACAC,mCACAC,oBAAqBC,EAAgBE,yBAElC,GAAI,EAAAnxC,WAAWziG,SAASw+F,EAAYryF,QAAS,KAC3CunI,EAAmB,UAAM1rI,WAAzB0rI,gBACP,MAAO,CACLziI,KAAM,QACNsQ,YAAa,sBACbgyH,qCACAC,6BACAC,oBAAqBC,EAAgBG,cAGzC,MAEF,IAAK,WACH,GAAI,EAAA5yG,uBAAuBjhC,SAASw+F,EAAYryF,SAAiD,WAArClN,SAASC,SAASoC,eAA8B,KACnGoyI,EAAmB,UAAM1rI,WAAzB0rI,gBACP,MAAO,CACLziI,KAAM,WACNsQ,YAAa,mBACbgyH,gDACAC,gCACAC,oBAAqBC,EAAgBI,yBAElC,GAAI,EAAA9yG,0BAA0BhhC,SAASw+F,EAAYryF,QAAS,KAC1DunI,EAAmB,UAAM1rI,WAAzB0rI,gBACP,MAAO,CACLziI,KAAM,cACNsQ,YAAa,sBACbgyH,mDACAC,4CACAC,oBAAqBC,EAAgBK,iCAElC,GAAI,EAAAvpD,uBAAuBxqF,SAASw+F,EAAYryF,QAAS,KACvDunI,EAAmB,UAAM1rI,WAAzB0rI,gBACP,MAAO,CACLziI,KAAM,UACNsQ,YAAa,sBACbgyH,sCACAC,yCACAC,oBAAqBC,EAAgBM,wBAElC,GAAI,EAAA1rB,4BAA4BtoH,SAASw+F,EAAYryF,QAAS,KAC5DunI,EAAmB,UAAM1rI,WAAzB0rI,gBACP,MAAO,CACLziI,KAAM,cACNsQ,YAAa,sBACbgyH,sCACAC,8CACAC,oBAAqBC,EAAgBO,6BAO7C,OAAO,MAS6BC,EAAzBA,wBAAA,gCAAyB,WAAOC,EAAaC,GAApB,0BAAkCtB,EAAlC,kIAC9B/xH,GAAS,IAAAC,oBACV/P,EAAyBmjI,EAAzBnjI,KAAMuiI,EAAmBY,EAAnBZ,gBAFyB,EAIO,UAAMxrI,WAA1C0rI,EAJ6B,EAI7BA,gBAAiBloI,EAJY,EAIZA,iBACV,gBAATyF,GAA2ByiI,EAAgBW,wBAAwBlgF,eACzD,aAATljD,GAAwByiI,EAAgBW,wBAAwB1wF,UANlC,oBAO9BmvF,GAAsBtnI,EAAgB8oI,eAPR,uBAQhC,UAAMxqH,SAASsqH,EAAab,mBAAmB,IAAI,EAAMtiI,IARzB,kBASzBhV,QAAQC,WATiB,UAavB,gBAAT+U,EAbgC,wBAc5BsK,GAAkB,IAAAhB,oBAAmB45H,GAdT,kBAe3B,UAAoBI,oBAAoBJ,GAAc54H,EAAiBi4H,EAAiBV,IAf7D,WAgBhB,aAAT7hI,EAhByB,wBAiB5BsK,GAAkB,IAAAhB,oBAAmB45H,GAjBT,kBAkB3B,UAAiBK,aAAaL,GAAc54H,EAAiBi4H,EAAiBV,IAlBnD,WAoB5BJ,EAAqByB,EAAY7uH,yBACjCqtH,EAAyB5xH,EAAO4Z,YAAcw5G,EAAYtsD,yCAA2CssD,EAAY7uH,yBAEnH4lH,EAAkB,GACtBsI,EAAgBvvI,SAAQ,SAAAq1G,GACtB,IAAM/2F,EAAUxB,EAAO0zH,mBAAmBn7B,GAC1C,IAAK/2F,GAAYA,EAAQlB,KAAKlV,SAAWgoI,EAAYhoI,OACnD,OAAO,KAET,IAAM4mI,EAAehyH,EAAOo9E,sBAAsB57E,GAAS5Q,MAAK,SAAA6T,GAC9D,OAAOA,EAAQnE,KAAKiE,2BAA6BotH,KAE/CK,GACED,IACFvwH,EAAQlB,KAAK2xH,4BAA8BzwH,EAAQlB,KAAK2K,eAE1D+mH,EAAa1xH,KAAK4xH,mBAAkB,IAC1B1wH,EAAQlB,KAAK6xH,8BAAiC3wH,EAAQlB,KAAK6xH,6BAA6BlzI,SAAS2yI,IAI3GzH,EAAgBtwI,KAAK,CAAC63I,YAAalwH,EAAQlB,KAAMqxH,qBAAoBI,oBAAmBH,+BAGxFzH,EAAgB5wI,OA5Cc,wBA6ChC4wI,EAAgBtwI,KAAK,CAAC63I,YAAa0B,EAAY5tI,YAAamsI,qBAAoBI,oBAAmBH,2BA7CnE,UA+C1BR,EAA+BjH,GAAiB,EAAOiJ,EAAYhoI,QA/CzC,iCAiD3BlQ,QAAQC,WAjDmB,mDAAzB,+CA0DkCw4I,EAAlCA,gCAAkC,WAAsD,IAArDC,EAAqD,uDAAtC,GAAIC,EAAkC,uDAAT,KAC1F,GAAIA,GAA0BA,EAAuB5oH,cACnD4oH,EAAuB5B,4BAA8B4B,EAAuB5oH,kBAD9E,CAIA,IAAMjL,GAAS,IAAAC,oBACf2zH,EAAa1wI,SAAQ,SAAAkI,GACnB,IAAMsW,EAAe1B,EAAOgb,wBAAwB5vB,GAChDsW,GAAgBA,EAAauJ,gBAC/BvJ,EAAauwH,4BAA8BvwH,EAAauJ,oBAKxBmnH,EAAzBA,wBAAA,gCAAyB,WAAOpyH,GAAP,sFAChC8zH,EAAW,GACTlrD,EAAa5oE,EAAOqmE,+BAC1BrmE,EAAOuZ,cAAcr2B,SAAQ,SAAA7E,GACtBqO,MAAMC,QAAQtO,EAAOwlB,eAAkBxlB,EAAOwlB,aAAatqB,QAGhE8E,EAAOwlB,aAAa3gB,SAAQ,SAAAwe,GACtBA,EAAaw1E,qBACZx1E,EAAagf,6BACbhf,EAAagf,4BAA4BkoD,KACxClnE,EAAagf,4BAA4BkoD,GAAYhoD,MACzDkzG,EAASj6I,MAAK,IAAAs9F,+BAA8Bz1E,UAZd,kBAgB7BxmB,QAAQ64I,IAAID,IAhBiB,kDAAzB,8CAyBiBE,EAAjBA,gBAAA,gCAAiB,WAAOC,EAAY9mH,GAAnB,gFACtBnN,GAAS,IAAAC,qBACXkN,EAAcluB,SAASg1I,EAAWnnI,IAFV,uBAG1BkT,EAAOk0H,4BAA4BD,GAAY,GAAO,GAAO,GAAM,GAHzC,SAIpB7B,EAAuBpyH,GAJH,6CAMpBA,EAAOm0H,oBAAoBF,GANP,gCAQrB/4I,QAAQC,WARa,mDAAjB,uBAAAjB,MAAA,kBAWuBk6I,EAAvBA,qBAAuB,WAClC,OAAO,UAAOxuI,0BAA4B,UAAOD,aASJkhH,EAAlCA,gCAAkC,SAAC3lD,GAA2C,IAAxBx/C,EAAwB,uDAAT,KAC5E2yH,EAAkB,EAItB,IAHK3yH,GAAgBw/C,GAAqBA,EAAkB17D,YAC1Dkc,EAAew/C,EAAkB17D,aAE/Bkc,EAAc,CAChB,IAAMqrE,EAAuB7rB,GAAqBx/C,EAAauJ,eAAiBvJ,EAAa+pE,6BACzFsB,GAAwBA,EAAqBtkF,UAAU6rI,iBAAsE,IAAnDvnD,EAAqBtkF,UAAU6rI,gBAC3GD,EAAkBtnD,EAAqBtkF,UAAU6rI,iBACxC5yH,EAAa6e,gBAAoBwsD,GAAyBA,EAAqBrE,2BAExF2rD,EAAkB76I,OAAOmc,KAAK+L,EAAa6e,gBACxCz0B,QAAO,SAAA00B,GAAA,QAAc9e,EAAa6e,eAAeC,MAAWjnC,QAGnE,OAAO86I,I,kKCxgCT,S,IACA,OACA,QACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,Q,qDAEaE,gB,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAjsI,aAAaC,UADpB,OAGZ,EAAK2lF,wBAAyB,EAC9B,EAAK7lF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,0BACA,EAAKmY,SAAW,mBAChB,EAAKH,YAAc,uCACnB,EAAKqD,aAAe,GACpB,EAAKspE,kBAAoB,KACzB,EAAKqnD,aAAe,KACpB,EAAKC,eAAiB,KACtB,EAAKC,UAAY,KACjB,EAAKC,UAAY,KAGjB,EAAKC,UAAa12I,SAASC,UAA0C,SAA7BD,SAASC,SAASmC,OACtD,EAAAy9B,mBAAmBE,gBACnB,EAAAF,mBAAmBC,cACvB,EAAK62G,mBAAqB,OAC1B,EAAKC,gBAAkB,OApBX,E,qEAwBTrsI,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,gBACHy/H,EAAkB,eAClBC,YACA,MACF,IAAK,kBACHD,EAAkB,iBAClBC,YACA,MACF,IAAK,cACHD,EAAkB,YAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YAGJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,yCAKQ,WACZ3D,KAAKqoF,oBACRroF,KAAKqoF,kBAAoB,IAAI,EAAJ,SAAsB,GAC/CroF,KAAKqoF,kBAAkBw4B,OAAS,CAC9BtnF,uBAAwB,EACxBC,yBAA0B,EAC1BC,yBAA0B,GAE5Bz5B,KAAK+e,aAAao3C,QAAQn2D,KAAKqoF,mBAC/BroF,KAAKqoF,kBAAkB3nF,UAAY,kBAAM,IAE3C,IAAM2vI,EAAqB,CACzBZ,EAAea,8BAAf,uBAEE,iBACA,OACA,OACA,CACE,WAAc,CAAC,QACf,eAAkB,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,SAErEtwI,KACA,KAEFyvI,EAAea,8BAAf,uBAEE,iBACA,OACA,OACA,CACE,WAAc,CAAC,QACf,eAAkB,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,SAErEtwI,KACA,SAGJtL,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA8gB,GAC9B,EAAKmpE,kBAAkB5sE,aAAayD,GAAcmxH,EAClD,EAAKhoD,kBAAkBw4B,OAAO3hG,EAAW5iB,cAAgB,8B,gCAyBnD4e,EAAQq1H,GAEhB,IAAKvwI,KAAKopF,uBACR,OAAO,KAGT,IAAIpY,EAAM,GAQV,OAPAhxE,KAAKwwI,kBAAkBpyI,SAAQ,SAAAwuI,GAC7BA,EAAYn+B,UAAUvzF,GACrBq1H,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMz/D,GAC3C47D,EAAYzmH,eAAgBymH,EAAYzmH,cAAc0gE,MAAM4pD,MAAMz/D,MAGjEA,EAAIv8E,OAASu8E,EAAM,O,uCAI1B,OAAO,IAAI,EAAJ,QAAyB,mBAAoBhxE,Q,iCAKpD,IAAIyc,EAAWA,GAAXA,qBACCzc,KAAKwwI,kBAAkBxpI,QAAO,SAAAiqE,GAAA,OAAQA,EAAK1gD,WAASzoB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,QADnG,aAEClP,KAAKkb,OAAOsD,MAAMu7E,OAAOt9E,WAAWzV,QAAO,SAAA0V,GAC5C,MAAyB,YAAjBA,EAAQ4F,MACO,gBAAjB5F,EAAQ4F,MACS,iBAAjB5F,EAAQ4F,MACS,wBAAjB5F,EAAQ4F,MACS,gBAAjB5F,EAAQ4F,MACS,WAAjB5F,EAAQ4F,MACS,cAAjB5F,EAAQ4F,MACS,kBAAjB5F,EAAQ4F,MACS,oBAAjB5F,EAAQ4F,UAUlB,OANItiB,KAAK8vI,YAAc,EAAA72G,mBAAmBG,cACxC3c,EAAWA,EAASzV,QAAO,SAAA0V,GACzB,MAA+B,gBAAxBA,EAAQlB,KAAKlV,QAAoD,uBAAxBoW,EAAQlB,KAAKlV,QAA2D,mBAAxBoW,EAAQlB,KAAKlV,WAI1GmW,I,8CAIP,OAAOzc,KAAKkb,OAAOsD,MAAMu7E,OAAOy2C,kBAAkBxpI,QAAO,SAAAgY,GACvD,MAA2B,mBAAnBA,EAAQ1Y,QACS,gBAAnB0Y,EAAQ1Y,QACW,yBAAnB0Y,EAAQ1Y,QACW,gCAAnB0Y,EAAQ1Y,QACW,gBAAnB0Y,EAAQ1Y,QACW,uBAAnB0Y,EAAQ1Y,QACW,cAAnB0Y,EAAQ1Y,QACW,kBAAnB0Y,EAAQ1Y,QACW,oBAAnB0Y,EAAQ1Y,Y,0CAMhB,GADAtG,KAAKopF,wBAAyB,EAC1BppF,KAAKkb,OAAO9P,OAAS,EAAAsrB,WAAWgkE,MAAO,CACzC,IAAMg2C,EAAe1wI,KAAKkb,OAAOsD,MAAMu7E,OACnC22C,EAAarnD,YAAcqnD,EAAarnD,WAAWvG,WACrD4tD,EAAarnD,WAAWvG,UAAW,EACnC4tD,EAAarnD,WAAWuJ,gBACxB5yF,KAAKopF,wBAAyB,M,2CAMlC,OAAO,I,8EAKCnC,GACR,IAAKjnF,KAAKopF,uBACR,OAAO,KAGNnC,GACDjnF,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEyhI,UAAU1pD,Q,mCAGlC6oD,GACX9vI,KAAK8vI,UAAYA,I,mCAIjB,OAAO9vI,KAAKgwI,kB,yCAIZ,OAAOhwI,KAAK+vI,qB,oCAGAA,EAAoBC,GAChChwI,KAAK+vI,mBAAqBA,EAC1B/vI,KAAKgwI,gBAAkBA,I,4FA3HYpsI,EAAiBnN,EAAMs5I,EAAoBC,EAAiBl9H,EAAUvZ,EAAQyO,GACjH,IAAM4oI,EAAO,IAAI,EAAJ,QAiBb,OAhBAA,EAAK/0H,SAAWplB,EAChBm6I,EAAKroD,aAAe9xF,EAAK6F,cAAcqC,QAAQ,MAAO,KACtDiyI,EAAKjtI,UAAY,GACjBitI,EAAKrtD,YAAc9sF,EACnBm6I,EAAKpgI,UAAY,qBACjBogI,EAAKZ,gBAAkBA,EAEvBY,EAAKlwI,UAAY,kBAAMnH,EAAO8uF,mBAC9BuoD,EAAK99H,SAAWA,EAChB89H,EAAKb,mBAAqBA,EAC1Ba,EAAKhtI,gBAAkBA,EACvBgtI,EAAKjtI,WAAY,IAAAsZ,wBAAuB,CACtCnK,WACA9K,KACA2N,UAAU,IAELi7H,M,aA3HF5oI,GAAK,mB,2HCZd,O,IACA,Q,IACA,OACA,Q,IAWA,Q,IACA,Q,IACA,QACA,Q,IACA,S,IACA,SACA,Q,IAOA,MAEA,QACA,S,IACA,QACA,SACA,S,IACA,QACA,QACA,SACA,S,mDAOA,IAAM6oI,EAAmB,CACvB19F,OAAQ,GACRkU,OAAQ,EACRgP,SAAU,SAASzB,EAAU0B,EAAWhB,EAAiBhvD,GAA6C,IAArCiwD,EAAqC,uDAAxB,KAAMC,EAAkB,uDAAJ,GAC1FK,EAAU,UAAUR,SAASzB,EAAU0B,EAAWhB,EAAiBhvD,EAAQiwD,EAAYC,GAEvFzvD,EAAQ,UAAM5E,WACd02D,EAAqB9xD,EAAMgH,UAAU8qD,mBAG3C,OAFA,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,IAEpDhC,GAETi6E,oBAAqB,SAASnxI,EAAOE,GACnC,IACMkxI,EADQ,UAAM5uI,WACewH,cAAcC,qBAC3ConI,EAAgB,IAAI,EAAJ,QAAcrxI,EAAOE,GACrCg3D,EAAUg6E,EAAiBx6E,SAAS26E,EAAe,SAAU,KAAM,EAAAzhG,cAAcqB,iBACjFgJ,EAAQi3F,EAAiB74E,aAAanB,GAC5C,UAA8BpO,4BAC9B,UAA8BwoF,iCAC9Br3F,EAAMs3F,uBACNt3F,EAAMu3F,eAAeJ,IACrB,IAAAK,WAAU,cAAe,EAAAC,iBAAiBC,YAAa13F,IAEzDoe,aAAc,SAASnB,GACrB,OAAO,UAAUmB,aAAanB,IAEhC06E,cAAe,SAASjkF,GACtB,OAAO,UAAUnC,YAAYnkD,QAAO,SAAA4yC,GAAA,OAAS0T,EAAInzD,SAASy/C,EAAM5xC,QAElEwpI,iBA9BuB,SA8BNr+F,GACf,GAAsB,IAAlBA,EAAO1+C,OAAc,OAAO,EAEhC,IAAMg9I,EAAiBt+F,EAAO,GAAGic,UAHV,uBAIvB,YAAgBjc,EAAhB,+CAAwB,CACtB,GADsB,QACdic,YAAcqiF,EACpB,OAAO,GANY,6EAUvB,OAAO,GAETC,yBA1CuB,SA0CEv+F,GACvB,GAAsB,IAAlBA,EAAO1+C,OAAc,OAAO,EAEhC,IAAMg9I,EAAiBt+F,EAAO,GAAGic,UAC3Bl0C,GAAS,IAAAC,oBACTw2H,EAAsBz2H,EAAOo2F,eAAemgC,GAAgB,GAClE,GAAIE,EAAqB,CACvB,IAAMC,EAAgCD,EAAoBhuI,UAAUmF,kBAD7C,uBAEvB,YAAsBqqC,EAAtB,+CAA8B,KAArB8sF,EAAqB,QACtB4R,EAAmB32H,EAAOo2F,eAAe2uB,EAAU7wE,WAAW,GACpE,GAAIyiF,GAAoBA,EAAiBluI,UAAUmF,oBAAsB8oI,EACvE,OAAO,GALY,8EAUzB,OAAO,GAETl6E,gBAAiB,SAASb,GACxB,OAAO,UAAUa,gBAAgBb,IAEnCi7E,gBAAiB,SAAUj7E,EAASk7E,GAClC,GAAIA,GAAqBA,EAAkBpuI,UAAW,CACpD,IAAIi2C,EAAQ,UAAUoe,aAAanB,GAEnC,GAAIjd,aAAiBA,EAAjBA,SAA8BA,aAAiBA,EAAjBA,QAChCA,EAAMyd,aAAa06E,EAAkBpuI,UAAUqE,SAC1C,GAAI4xC,GAASA,EAAMxuC,OAAS,EAAAuxC,0BAA0BrI,WAAY,CACvE,IACMya,EADY,UAAUiJ,aAAape,EAAMsc,oBACxBpD,YAAYlZ,EAAMoV,cACrCD,GACFA,EAAKijF,uBAAuBD,EAAkBpuI,UAAUqE,OAKhEiqI,kBAAmB,SAAUp7E,EAASzH,GACpC,IAAIxV,EAAQ,UAAUoe,aAAanB,IAE/Bjd,aAAiBA,EAAjBA,SAA8BA,aAAiBA,EAAjBA,UAChCA,EAAMyd,aAAajI,IAGvB8iF,+BAAgC,SAAUr7E,EAASzH,GACjD,IAAIxV,EAAQ,UAAUoe,aAAanB,IAE/Bjd,aAAiBA,EAAjBA,SAA8BA,aAAiBA,EAAjBA,WAChCA,EAAMu4F,uBAAyB/iF,IAGnCgjF,oBA5FuB,WA+FrB,OAFe,UAAUjnF,YAEXnkD,QAAO,SAAS4yC,GAE5B,QADwBllD,OAAOmc,KAAP,qBAA+B/E,MAAK,SAAAumI,GAAA,OAAUA,IAAWz4F,EAAMxuC,UAI/EwuC,EAAMxuC,OACR,EAAA4oD,6CAA6C75D,SAASy/C,EAAMtzC,YAGtEgsI,2BAxGuB,WA2GrB,OAFe,UAAUnnF,YAEXnkD,QAAO,SAAAylD,GAAA,OAAO/3D,OAAOmc,KAAP,qBAA+B1W,SAASsyD,EAAInmD,YAE1EisI,eAAgB,WACD,UAAUpnF,YAChB/sD,SAAQ,SAAAw7C,QAEiBoZ,IAA5BpZ,EAAM44F,oBACH54F,EAAM44F,sBACL,IAAAz7F,oCAAqC6C,EAAMqV,mBAE/CrV,EAAM64F,sBAIZC,kBAAmB,WACJ,UAAUvnF,YAChB/sD,SAAQ,SAAAw7C,QACmBoZ,IAA5BpZ,EAAM44F,mBACJ54F,EAAM44F,sBACP54F,EAAMoT,WACL,IAAAjW,oCAAqC6C,EAAMqV,mBAE/CrV,EAAM+4F,mBAIZC,eAAgB,WACD,UAAUznF,YAChB/sD,SAAQ,SAAAw7C,GACTA,EAAMtzC,SAAW,EAAAipC,cAAcqB,iBACjCgJ,EAAMme,uBAIZ86E,kBAAmB,WACJ,UAAU1nF,YAChB/sD,SAAQ,SAAAw7C,GACTA,EAAMtzC,SAAW,EAAAipC,cAAcqB,kBACjCgJ,EAAM+4F,eACN/4F,EAAMs3F,uBACNt3F,EAAMk5F,6BAIZC,oBAAqB,WACnB,IAAM7sF,EAAQ,UAAUuF,WADM,uBAE9B,YAAmBvF,EAAnB,+CAA0B,KAAf6I,EAAe,QACpBA,EAAK7C,iBACP6C,EAAKikF,eAAej7E,oBAJM,+EAQhCk7E,uBAAwB,WACtB,IAAM/sF,EAAQ,UAAUuF,WADS,uBAEjC,YAAmBvF,EAAnB,+CAA0B,KAAf6I,EAAe,QACpBA,EAAK7C,iBACP6C,EAAKikF,eAAeL,gBAJS,+EAQnCO,+BAAgC,SAAUt5F,GACxCA,EAAMu5F,mBACNv5F,EAAM8e,oBACN9e,EAAMw5F,eAAe,IACrBx5F,EAAMy5F,UAAUC,uBAAuB,GACvC,UAAc36E,qBAAqB46E,2CAA2C35F,IAEhF45F,yBAA0B,WACX,UAAUroF,YAChB/sD,SAAQ,SAAAw7C,GACTA,aAAiBA,EAAjBA,UACE,CAAC,EAAArK,cAAckB,UAAW,EAAAlB,cAAcqB,iBAAiBz2C,SAASy/C,EAAMtzC,SAExEszC,EAAM65F,kBACR75F,EAAM65F,iBAAkB,EACxB5C,EAAiBqC,+BAA+Bt5F,QAKxD85F,2BAA4B,WACb,UAAUvoF,YAChB/sD,SAAQ,SAAAw7C,GACTA,aAAiBA,EAAjBA,UACE,CAAC,EAAArK,cAAckB,UAAW,EAAAlB,cAAcqB,iBAAiBz2C,SAASy/C,EAAMtzC,SAExEszC,EAAM+5F,oBACR/5F,EAAMg6F,qBACNh6F,EAAM+5F,mBAAoB,EAC1B,UAAch7E,qBAAqB46E,2CAA2C35F,QAKtFi6F,oBAAqB,WACN,UAAU1oF,YAChB/sD,SAAQ,SAAAw7C,QACmBoZ,IAA5BpZ,EAAM44F,oBACL54F,EAAM44F,qBACL54F,EAAMoT,UACN,CAAC,EAAAzd,cAAckB,UAAW,EAAAlB,cAAcqB,iBAAiBz2C,SAASy/C,EAAMtzC,UACxE,IAAAywC,oCAAqC6C,EAAMqV,mBAE/CrV,EAAMme,uBAIZ+7E,uBAAwB,WACT,UAAU3oF,YAChB/sD,SAAQ,SAAAw7C,QACmBoZ,IAA5BpZ,EAAM44F,oBACL54F,EAAM44F,sBACN54F,EAAMoT,UACL,CAAC,EAAAzd,cAAckB,UAAW,EAAAlB,cAAcqB,iBAAiBz2C,SAASy/C,EAAMtzC,UACxE,IAAAywC,oCAAqC6C,EAAMqV,mBAE/CrV,EAAM+4F,mBAIZoB,eAAgB,WAA4C,IAAnCC,IAAmC,yDACtD7gG,EAAS,UAAUgY,YACvBhY,EAAO/0C,SAAQ,SAAAw7C,GACTA,aAAiBA,EAAjBA,YACE,IAAA7C,qCAAqC6C,EAAMqV,oBAC3C+kF,GAA8Bp6F,EAAMtzC,SAAW,EAAAipC,cAAcqB,iBAEjEgJ,EAAMq6F,2BAIZC,kBAAmB,WACJ,UAAU/oF,YAChB/sD,SAAQ,SAAAw7C,KACTA,aAAiBA,EAAjBA,UACE,CAAC,EAAArK,cAAckB,UAAW,EAAAlB,cAAcqB,iBAAiBz2C,SAASy/C,EAAMtzC,UACxE,IAAAywC,oCAAqC6C,EAAMqV,mBAE/CrV,EAAMu6F,uBAWZngG,SAAU,WACR,IAAIogG,EAAc,UAAUC,iBAC5B,KAAID,EAAY3/I,QAAU,GAA1B,CAIA,IADA,IAAI6/I,EAAcF,EAAYG,MACrBhgJ,EAAI+/I,EAAYE,YAAY//I,OAAS,EAAGF,GAAK,EAAGA,IAAK,CAC5D,IAAIk4D,EAAM,UAAUuL,aAAas8E,EAAYE,YAAYjgJ,IACzD,UAAUijE,YAAY/K,GAExB6nF,EAAYlB,eAAe,IAC3BkB,EAAY3B,iBAEd8B,cAAe,WACbz0I,KAAK8zI,yBACL9zI,KAAK+zI,iBAEL,IADA,IAAI5gG,EAAS,UAAUgY,YACd52D,EAAI4+C,EAAO1+C,OAAS,EAAGF,GAAK,EAAGA,IAClC4+C,EAAO5+C,aAAP,YACE4+C,EAAO5+C,GAAG+R,SAAW,EAAAipC,cAAckB,UACrC,UAAU+mB,YAAYrkB,EAAO5+C,IACpB4+C,EAAO5+C,GAAGi+I,qBACnBr/F,EAAO5+C,GAAG6+I,eAAe,KAI/B,UAAUsB,eAAe,KAE3BvqF,iBAAkB,WAIhB,MAAO,CACL/vC,GAAI,UAAUu6H,UAAUv6H,EAAK,UAAU0qC,OAAOnlD,MAAQ,GAAM,UAAWoiD,MACvE1nC,GAAI,UAAUs6H,UAAUt6H,EAAK,UAAUyqC,OAAOjlD,OAAS,GAAM,UAAWkiD,QAG5E6U,UAAW,SAAChC,GAGV,IAFA,IAAIggF,EAAO,KAAMC,EAAO,EACpBC,EAAO,KAAMC,EAAO,EACfxgJ,EAAI,EAAGA,EAAIqgE,EAASngE,OAAQF,IAAK,CACxC,IAAIsB,EAAI++D,EAASrgE,IACJ,OAATqgJ,GAAiB/+I,EAAE47D,KAAKr3C,EAAIw6H,KAC9BA,EAAO/+I,EAAE47D,KAAKr3C,GACZvkB,EAAE47D,KAAKr3C,EAAIy6H,IACbA,EAAOh/I,EAAE47D,KAAKr3C,IACH,OAAT06H,GAAiBj/I,EAAE47D,KAAKp3C,EAAIy6H,KAC9BA,EAAOj/I,EAAE47D,KAAKp3C,GACZxkB,EAAE47D,KAAKp3C,EAAI06H,IACbA,EAAOl/I,EAAE47D,KAAKp3C,GAElB,MAAO,CACL1a,MAAOk1I,EAAOD,EACd/0I,OAAQk1I,EAAOD,EACf16H,EAAG,CACDwgH,IAAKga,EACL/Z,IAAKga,GAEPx6H,EAAG,CACDugH,IAAKka,EACLja,IAAKka,KAIXC,yBAA0B,SAACpyF,GASzB,IATgE,IAA5BqyF,IAA4B,yDAC5DxjF,SACA8G,SACAq8E,EAAO,KACPC,EAAO,KACPC,EAAO,KACPC,EAAO,KACPngE,EAAShyB,EAAUgI,YACnBzX,EAASyP,EAAUuI,YACd52D,EAAI,EAAGA,EAAI4+C,EAAO1+C,OAAQF,IAAK,CACtC,IAAIqlD,EAAQzG,EAAO5+C,GACnB,GAAIqlD,EAAM6R,SAER,IADA,IAAIvF,EAAQtM,EAAM6R,WACT/zD,EAAI,EAAGA,EAAIwuD,EAAMzxD,OAAQiD,IAAK,CAWrC,GAVA+5D,EAAOvL,EAAMxuD,GAAG+5D,KAAKlH,gBACrBgO,EAAKrS,EAAMxuD,GAAG6gE,GAAGhO,gBAEJ,OAATqqF,IACFA,EAAOnjF,EAAKr3C,EAAIm+C,EAAGn+C,EAAIq3C,EAAKr3C,EAAIm+C,EAAGn+C,EACnCy6H,EAAOpjF,EAAKr3C,EAAIm+C,EAAGn+C,EAAIq3C,EAAKr3C,EAAIm+C,EAAGn+C,EACnC06H,EAAOrjF,EAAKp3C,EAAIk+C,EAAGl+C,EAAIo3C,EAAKp3C,EAAIk+C,EAAGl+C,EACnC06H,EAAOtjF,EAAKp3C,EAAIk+C,EAAGl+C,EAAIo3C,EAAKp3C,EAAIk+C,EAAGl+C,GAGjC46H,GAAoB/uF,EAAMxuD,GAAGg0D,eAAiBxF,EAAMxuD,GAAGg0D,gBAAiB,OAC/CmlF,EAAiBqE,uBAAuBhvF,EAAMxuD,GAAIk9I,EAAMC,EAAMC,EAAMC,GADrB,qBACzEH,EADyE,KACnEC,EADmE,KAC7DC,EAD6D,KACvDC,EADuD,KAI5EH,EAAOnjF,EAAKr3C,EAAIw6H,EAAOnjF,EAAKr3C,EAAIw6H,EAChCC,EAAOpjF,EAAKr3C,EAAIy6H,EAAOpjF,EAAKr3C,EAAIy6H,EAChCD,EAAOr8E,EAAGn+C,EAAIw6H,EAAOr8E,EAAGn+C,EAAIw6H,EAC5BC,EAAOt8E,EAAGn+C,EAAIy6H,EAAOt8E,EAAGn+C,EAAIy6H,EAE5BC,EAAOrjF,EAAKp3C,EAAIy6H,EAAOrjF,EAAKp3C,EAAIy6H,EAChCC,EAAOtjF,EAAKp3C,EAAI06H,EAAOtjF,EAAKp3C,EAAI06H,EAChCD,EAAOv8E,EAAGl+C,EAAIy6H,EAAOv8E,EAAGl+C,EAAIy6H,EAC5BC,EAAOx8E,EAAGl+C,EAAI06H,EAAOx8E,EAAGl+C,EAAI06H,GAKlC,MAAO,CACLH,KAAOA,EAAOhgE,EAAOx6D,EACrBy6H,KAAOA,EAAOjgE,EAAOx6D,EACrB06H,KAAOA,EAAOlgE,EAAOv6D,EACrB06H,KAAOA,EAAOngE,EAAOv6D,IAGzB86H,kCAAmC,WACjC,IAAMhiG,EAAS,UAAUgY,YADc,uBAEvC,YAAoBhY,EAApB,+CAA4B,KAAjByG,EAAiB,QACtBA,aAAiBA,EAAjBA,SAA8BA,EAAMw7F,gBACtCvE,EAAiBwE,sBAAsBz7F,IAJJ,+EAQzC07F,kBAAmB,SAAC17F,GAClB,IAAM27F,EAAsB37F,aAAiBA,EAAjBA,SACM,IAA7BA,EAAM46F,YAAY//I,SACjBmlD,EAAMqV,qBACLrV,EAAM8R,iBAAmB9R,EAAMsS,iBAEhCspF,EAA6B57F,aAAiBA,EAAjBA,SAAiCA,EAAMxuC,OAAS,EAAAuoC,oBAAoBC,UACvG,OAAO2hG,GAAuBC,GAEhCC,qBAAsB,WACL,UAAUtqF,YAClB/sD,SAAQ,SAAAw7C,GACTA,EAAM87F,gBAAkB97F,EAAM87F,kBAChC7E,EAAiBwE,sBAAsBz7F,OAI7Cy7F,sBAAuB,SAACz7F,GACtBA,EAAM+7F,gBAAe,GACrB/7F,EAAMw7F,eAAeQ,oBACrBh8F,EAAMw7F,eAAe/8E,UACrBze,EAAMw7F,eAAiB,KACvB,UAAMnxH,UAAS,IAAAimF,wBAAuB,QAAUtwD,EAAM5xC,MAExD6tI,oBAAqB,SAACj8F,GACpB,IAAM0gF,EAAa,UAAUA,aAE7B,KAAI1gF,aAAiBA,EAAjBA,SAAiCA,EAAMxuC,OAAS,EAAAuoC,oBAAoBC,WAAa0mF,GAArF,CAGA1gF,EAAMw7F,eAAiB,IAAI,EAAJ,QAAmBx7F,GAC1CA,EAAM+7F,gBAAe,GACrB,IAAMG,EAAcl8F,EAAMgR,YAEtBmrF,SACJ,IAFkB,IAAA77E,sBAEH,CACb,IAAM87E,EAAcp8F,aAAiBA,EAAjBA,QAAgCA,EAAMq8F,YAAar8F,EAAMs8F,aAAaC,iBACpFC,EAAax8F,aAAiBA,EAAjBA,QAAgCA,EAAMy8F,WAAaz8F,EAAMs8F,aAAaI,gBACzFP,EAA2B,CAACjkG,KAAMgkG,EAAY17H,EAAGlV,IAAK4wI,EAAYz7H,GAAK27H,EAAcI,GAAc,UAAWr0F,MAAQ,QAEtHg0F,EAA2B,CAACjkG,KAAMgkG,EAAY17H,EAAGlV,IAAK4wI,EAAYz7H,GAGpE,IAAMk8H,EAAgC,IAAI,EAAJ,QACpC,QAAU38F,EAAM5xC,GAChB,EACA,KACA,WACE,UAAW46C,UAAUsC,eAAiB,EAAAzT,2BAA2ByB,KACjE29F,EAAiBwE,sBAAsBz7F,MAIzC,WACE,IACM48F,EADQ,UAAMr0I,WACKytD,cAAcm6C,kBAAkBj+F,MAAK,SAAA0qI,GAAA,OAAcA,EAAWxuI,KAAO,QAAU4xC,EAAM5xC,MAC9G4xC,EAAMrG,OAAO,EAAGqG,EAAM68F,UAAUC,KAAMpc,GACtC,IAAMqc,GAAgBA,EAAhBA,cAAoBH,EAApB,CAAgCt/I,MAAOojI,EAAa1gF,EAAMg9F,mBAAqBh9F,EAAMi9F,iBAC3F,UAAM5yH,UAAS,IAAAgmF,kBAAiB0sC,OAElC,WACE,IACMH,EADQ,UAAMr0I,WACKytD,cAAcm6C,kBAAkBj+F,MAAK,SAAA0qI,GAAA,OAAcA,EAAWxuI,KAAO,QAAU4xC,EAAM5xC,MACxG9Q,GAASojI,EAAa1gF,EAAMg9F,mBAAqBh9F,EAAMi9F,gBAAkB,EAAI,EAAI,KAAO,EAC9Fj9F,EAAMrG,OAAOr8C,EAAO0iD,EAAM68F,UAAUC,KAAMpc,GAC1C,UAAMr2G,UAAS,IAAAgmF,mBAAA,gBAAqBusC,EAArB,CAAiCt/I,MAAOojI,EAAa1gF,EAAMg9F,mBAAqBh9F,EAAMi9F,sBAEvG,SAAC1gJ,GACC,IACMqgJ,EADQ,UAAMr0I,WACKytD,cAAcm6C,kBAAkBj+F,MAAK,SAAA0qI,GAAA,OAAcA,EAAWxuI,KAAO,QAAU4xC,EAAM5xC,MACxG9Q,EAAQ0I,SAASzJ,EAAEugB,OAAOxf,OAC5BoR,OAAOC,UAAUrR,IAAU,IAAMA,EAAQ,IAC3C0iD,EAAMrG,OAAOr8C,GAASojI,EAAa1gF,EAAMg9F,mBAAqBh9F,EAAMi9F,gBAAiBj9F,EAAM68F,UAAUC,KAAMpc,GAC3GA,EAAa1gF,EAAMg9F,mBAAqB1/I,EAAQ0iD,EAAMi9F,eAAiB3/I,EACvE,UAAM+sB,UAAS,IAAAgmF,mBAAA,gBAAqBusC,EAArB,CAAiCt/I,MAAOA,SAG3DojI,EAAa1gF,EAAMg9F,mBAAqBh9F,EAAMi9F,eAC9Cd,GAEF,UAAM9xH,UAAS,IAAA+lF,qBAAoBusC,MAGrCO,mBAAoB,SAACl9F,GAEnB,IAAM0gF,EAAa,UAAUA,aAIvBkc,EAHQ,UAAMr0I,WAGKytD,cAAcm6C,kBAAkBj+F,MAAK,SAAA0qI,GAAA,OAAcA,EAAWxuI,KAAO,QAAU4xC,EAAM5xC,MAGxG+uI,EAAkBzc,EAAa1gF,EAAMg9F,mBAAqBh9F,EAAMi9F,eAGtE,GAAI,CAAC,EAAG,GAAI,IAAK,IAAK,KAAK18I,SAAS48I,GAAkB,CAEpD,IAAMC,GAAeD,EAAkB,IAAM,IAG7Cn9F,EAAMrG,OAAOyjG,EAAcD,EAAiBn9F,EAAM68F,UAAUC,KAAMpc,GAG9DA,EACF1gF,EAAMg9F,mBAAqBI,EAE3Bp9F,EAAMi9F,eAAiBG,EAGzB,UAAM/yH,UAAS,IAAAgmF,mBAAA,gBAAqBusC,EAArB,CAAiCt/I,MAAO8/I,QAI3DC,qBAAsB,aAGtB/B,uBAAwB,SAACnmF,EAAM6lF,EAAMC,EAAMC,EAAMC,EAAMmC,GACrD,IAAIC,EAAgBpoF,EAAKpD,eAAeyrF,mBACpCnd,SAWJ,MAAO,CALP2a,GAJE3a,EADEid,GACW,IAAA3sF,eAAc4sF,EAAcE,UAAUj9H,EAAG+8H,EAAcE,UAAUh9H,EAAG00C,EAAKruD,aAEzEy2I,EAAcE,WAEXj9H,EAAIw6H,EAAO3a,EAAW7/G,EAAIw6H,EAC5CC,EAAO5a,EAAW7/G,EAAIy6H,EAAO5a,EAAW7/G,EAAIy6H,EAC5CC,EAAO7a,EAAW5/G,EAAIy6H,EAAO7a,EAAW5/G,EAAIy6H,EAC5CC,EAAO9a,EAAW5/G,EAAI06H,EAAO9a,EAAW5/G,EAAI06H,IAI9CuC,iCAAkC,SAACnkG,GAA6C,IAArCokG,EAAqC,wDAC9E,GAAIpkG,EAAO1+C,OAAS,EAAG,CACrB,IAAI+iJ,EAAe,GACnBrkG,EAAO/0C,SAAQ,SAAAquD,GACTA,EAAIgrF,yBACND,EAAaziJ,KAAb,MAAAyiJ,GAAA,aAAqB/qF,EAAIgrF,wBAAwBF,QAGrD,IAAIG,EAAe7G,EAAiB8G,gBAAgBH,GAAc,GAIlE,MAAO,CACL,CAACp9H,EAAGs9H,EAAa9C,KAAMv6H,EAAGq9H,EAAa5C,MACvC,CAAC16H,EAAGs9H,EAAa7C,KAAMx6H,EAAGq9H,EAAa5C,MACvC,CAAC16H,EAAGs9H,EAAa7C,KAAMx6H,EAAGq9H,EAAa3C,MACvC,CAAC36H,EAAGs9H,EAAa9C,KAAMv6H,EAAGq9H,EAAa3C,OAG3C,MAAO,IAET6C,qCAAsC,SAACzkG,GACrC,GAAIA,EAAO1+C,OAAS,EAAG,CACrB,IAAI+iJ,EAAe,GAInB,OAHArkG,EAAO/0C,SAAQ,SAAAquD,GACb+qF,EAAaziJ,KAAb,MAAAyiJ,GAAA,aAAqB/qF,EAAIgrF,gCAEpB,IAAAI,YAAWL,GAEpB,MAAO,IAETM,oCAAqC,SAAC3kG,GACpC,GAAIA,EAAO1+C,OAAS,EAAG,CACrB,IAAI+iJ,EAAe,GAInB,OAHArkG,EAAO/0C,SAAQ,SAAAquD,GACb+qF,EAAaziJ,KAAb,MAAAyiJ,GAAA,aAAqB/qF,EAAIsrF,4BAEpB,IAAAF,YAAWL,GAEpB,MAAO,IAETQ,kCAAmC,SAAC7kG,GAA8C,IAAtC8kG,IAAsC,yDAChF,GAAI9kG,EAAO1+C,OAAS,EAAG,CACrB,IAAMyjJ,EAA0B/kG,EAAOrrC,KAAI,SAAA2kD,GACzC,OAAOA,EAAIgrF,6BAEPU,GAAgB,IAAAC,kBAAiBF,GAIvC,OAHID,IACF,IAAAI,6BAA4BF,GAEvBA,EAET,MAAO,IAETG,6BAA8B,SAACC,EAAeC,GAAkC,IAAnBC,EAAmB,uDAAN,EAClEtlG,EAAS,UAAUgY,YACnButF,EAAiBvlG,EAAOnsC,QAAO,SAAAylD,GACjC,IAAMksF,EAAyB,EAAAzgG,8BAA8B/9C,SAASsyD,EAAI2I,UAAY,EAAAld,8BAA8B/9C,SAASsyD,EAAInmD,QAC3HsyI,EAA6BJ,EAAcr+I,SAASsyD,GAC1D,OAAOksF,IAA2BC,KAGlCtiE,EAAU,IAAI1uE,MAAM2wI,EAAc9jJ,OAAS8jJ,EAAc9jJ,OAAS,EAAI,GAAGgsI,MAAK,GAElF,GAAIiY,EAAejkJ,OAAS,EAAG,4BAC7B,YAA4BikJ,EAA5B,+CAA4C,KAAjCG,EAAiC,QACpCC,EAAuBD,EAAcpB,0BACrCsB,GAAgB,IAAAC,kBAAiBF,GACvCC,EAAchkJ,KAAKgkJ,EAAc,IAEjC,IAAK,IAAIxkJ,EAAI,EAAGA,EAAIgkJ,EAAc9jJ,OAAS,EAAGF,IAG5C,IAFA,IAAM0kJ,EAAMV,EAAchkJ,GACpB2kJ,EAAMX,EAAchkJ,EAAI,GACrBkB,EAAI,EAAGA,EAAIsjJ,EAActkJ,OAAS,EAAGgB,IAAK,CACjD,IAAM0jJ,EAAMJ,EAActjJ,GACpB2jJ,EAAML,EAActjJ,EAAI,GAC9B,IAAI,IAAA4jJ,wBAAuBJ,EAAKC,EAAKC,EAAKC,EAAKX,GAAa,CAC1DniE,EAAQ/hF,IAAK,EACb,SAdqB,8EAqB/B,OAAO+hF,GAETgjE,iCAAkC,SAACnmG,GACjC,GAAIA,EAAO1+C,OAAS,EAAG,CACrB,IAAM8kJ,EAAmBpmG,EAAOrrC,KAAI,SAAA2kD,GAClC,OAAOA,EAAIsrF,yBAEb,OAAO,IAAAK,kBAAiBmB,GAE1B,MAAO,IAETC,qBAAsB,SAAC5/F,GAUrB,IAV+E,IAAnDq7F,IAAmD,yDAA1BiC,IAA0B,yDAC3EzlF,SACA8G,SACAq8E,EAAO,KACPC,EAAO,KACPC,EAAO,KACPC,EAAO,KACP7uF,EAAQtM,EAAM6R,WAGT/zD,EAAI,EAAGA,EAAIwuD,EAAMzxD,OAAQiD,IAAK,CAgBrC,GAfIw/I,GACFzlF,GAAO,IAAAlH,eAAcrE,EAAMxuD,GAAG+5D,KAAKr3C,EAAG8rC,EAAMxuD,GAAG+5D,KAAKp3C,EAAGu/B,GACvD2e,GAAK,IAAAhO,eAAcrE,EAAMxuD,GAAG6gE,GAAGn+C,EAAG8rC,EAAMxuD,GAAG6gE,GAAGl+C,EAAGu/B,KAEjD6X,EAAOvL,EAAMxuD,GAAG+5D,KAChB8G,EAAKrS,EAAMxuD,GAAG6gE,IAGH,OAATq8E,IACFA,EAAOnjF,EAAKr3C,EAAIm+C,EAAGn+C,EAAIq3C,EAAKr3C,EAAIm+C,EAAGn+C,EACnCy6H,EAAOpjF,EAAKr3C,EAAIm+C,EAAGn+C,EAAIq3C,EAAKr3C,EAAIm+C,EAAGn+C,EACnC06H,EAAOrjF,EAAKp3C,EAAIk+C,EAAGl+C,EAAIo3C,EAAKp3C,EAAIk+C,EAAGl+C,EACnC06H,EAAOtjF,EAAKp3C,EAAIk+C,EAAGl+C,EAAIo3C,EAAKp3C,EAAIk+C,EAAGl+C,GAGjC46H,GAAoB/uF,EAAMxuD,GAAGg0D,gBAAiB,OACrBmlF,EAAiBqE,uBAAuBhvF,EAAMxuD,GAAIk9I,EAAMC,EAAMC,EAAMC,EAAOmC,GADtD,qBAC/CtC,EAD+C,KACzCC,EADyC,KACnCC,EADmC,KAC7BC,EAD6B,KAIlDH,EAAOnjF,EAAKr3C,EAAIw6H,EAAOnjF,EAAKr3C,EAAIw6H,EAChCC,EAAOpjF,EAAKr3C,EAAIy6H,EAAOpjF,EAAKr3C,EAAIy6H,EAChCD,EAAOr8E,EAAGn+C,EAAIw6H,EAAOr8E,EAAGn+C,EAAIw6H,EAC5BC,EAAOt8E,EAAGn+C,EAAIy6H,EAAOt8E,EAAGn+C,EAAIy6H,EAE5BC,EAAOrjF,EAAKp3C,EAAIy6H,EAAOrjF,EAAKp3C,EAAIy6H,EAChCC,EAAOtjF,EAAKp3C,EAAI06H,EAAOtjF,EAAKp3C,EAAI06H,EAChCD,EAAOv8E,EAAGl+C,EAAIy6H,EAAOv8E,EAAGl+C,EAAIy6H,EAC5BC,EAAOx8E,EAAGl+C,EAAI06H,EAAOx8E,EAAGl+C,EAAI06H,EAG9B,MAAO,CACLH,KAAOA,EACPC,KAAOA,EACPC,KAAOA,EACPC,KAAOA,IAGX4C,gBAAiB,SAAC1xF,GAOhB,IAPkD,IAA1BixF,IAA0B,yDAC9ClrF,SACA4oF,EAAO,KACPC,EAAO,KACPC,EAAO,KACPC,EAAO,KAEFr9I,EAAI,EAAGA,EAAIuuD,EAAOxxD,OAAQiD,IAE/Bs0D,EADEkrF,GACM,IAAA3sF,eAActE,EAAOvuD,GAAG0iB,EAAG6rC,EAAOvuD,GAAG2iB,EAAG4rC,EAAOvuD,GAAG+hJ,eAAiBxzF,EAAOvuD,GAAG+hJ,iBAArC,WAExCxzF,EAAOvuD,GAGJ,OAATk9I,IACFA,EAAO5oF,EAAM5xC,EACby6H,EAAO7oF,EAAM5xC,EACb06H,EAAO9oF,EAAM3xC,EACb06H,EAAO/oF,EAAM3xC,GAGfu6H,EAAO5oF,EAAM5xC,EAAIw6H,EAAO5oF,EAAM5xC,EAAIw6H,EAClCC,EAAO7oF,EAAM5xC,EAAIy6H,EAAO7oF,EAAM5xC,EAAIy6H,EAClCC,EAAO9oF,EAAM3xC,EAAIy6H,EAAO9oF,EAAM3xC,EAAIy6H,EAClCC,EAAO/oF,EAAM3xC,EAAI06H,EAAO/oF,EAAM3xC,EAAI06H,EAGpC,MAAO,CACLH,KAAOA,EACPC,KAAOA,EACPC,KAAOA,EACPC,KAAOA,IAGX2E,0BAA2B,SAAC1xI,EAAIinD,GAC9B,IAAIrV,EAAQi3F,EAAiB74E,aAAahwD,GACtC4xC,IACFA,EAAMqV,kBAAoBA,GACtB,IAAAlY,qCACEkY,GAAqBrV,EAAMme,kBAC7Bne,EAAMme,mBACNne,EAAMy5F,UAAUsG,mBACP//F,EAAM+4F,cACf/4F,EAAM+4F,kBAKdiH,iBAAkB,SAACC,GAEf,OADe,UAAU1uF,YACXnkD,QAAO,SAAAylD,GACnB,SAAUA,EAAIqtF,eAAkBrtF,EAAIqtF,cAAcC,yBAA2BF,OAInFG,uCAAwC,SAAC32I,GACvC,GAAIA,GAAWA,EAAQiD,OAAQ,CAC7B,IAAM6sC,EAAS,UAAUgY,YACnB7kD,EAAS5R,OAAOmc,KAAP,qCAA+C1W,SAASkJ,EAAQiD,QAC3E,EAAAk1C,kCAAkCn4C,EAAQiD,QAC1CjD,EAAQiD,OAGW6sC,EAAOnsC,QAAO,SAAA4yC,GAAA,OAASA,EAAMtzC,SAAWA,GAAUszC,EAAMymF,eAAiB/5H,KACjFlI,SAAQ,SAACw7C,GAClBA,aAAiBA,EAAjBA,SACFA,EAAMqgG,iCAAiC52I,QAK/C62I,oBAAqB,SAACrjF,GACpB,IAAMjd,EAAQ,UAAUoe,aAAanB,GACjCjd,aAAiBA,EAAjBA,SACFA,EAAMugG,kBAGVC,0BAA2B,SAACxgG,GAC1B,IAAMsM,EAAQtM,EAAM6R,WADgB,uBAEpC,YAAmBvF,EAAnB,+CAA0B,KAAf6I,EAAe,QACpBA,EAAK7C,iBACP6C,EAAKikF,eAAeqH,sBAJY,gF,UAUzBxJ,G,0vBC/wBHrwH,E,wJAAZ,OAEuC85H,EAA1BA,wBAA0B,eAACC,EAAD,8DAAsC,CAC3EnvI,KAAMoV,EAAMgjD,0BACZ3iD,QAAS,CAAC05H,6BAGyBC,EAAxBA,sBAAwB,eAACC,EAAD,uDAAsB,EAAtB,MAA6B,CAChErvI,KAAMoV,EAAMujD,yBACZljD,QAAS,CAAC45H,wBAG4BC,EAA3BA,yBAA2B,SAACC,EAA4BC,GAA7B,MAA4D,CAClGxvI,KAAMoV,EAAMijD,4BACZ5iD,QAAS,CAAC85H,6BAA4BC,+BAGJC,EAAvBA,qBAAuB,SAACC,GAAD,MAA8B,CAChE1vI,KAAMoV,EAAM8jD,uBACZzjD,QAAS,CAACi6H,6BAI4BC,EAA3BA,yBAA2B,SAACC,GAAD,MAA4B,CAClE5vI,KAAMoV,EAAMmjD,6BACZ9iD,QAAS,CAACm6H,2BAEiCC,EAAhCA,8BAAgC,SAACC,GAAD,MAAiC,CAC5E9vI,KAAMoV,EAAMsjD,kCACZjjD,QAAS,CAACq6H,gCAE8BC,EAA7BA,2BAA6B,SAACC,GAAD,MAA8B,CACtEhwI,KAAMoV,EAAMojD,+BACZ/iD,QAAS,CAACu6H,6BAEkCC,EAAjCA,+BAAiC,SAACC,GAAD,MAAkC,CAC9ElwI,KAAMoV,EAAMqjD,oCACZhjD,QAAS,CAACy6H,iCAI6BC,EAA5BA,0BAA4B,SAACC,GAAD,MAA6B,CACpEpwI,KAAMoV,EAAMkkD,6BACZ7jD,QAAS,CAAC26H,4BAEsCC,EAArCA,mCAAqC,SAACC,GAAD,MAAsC,CACtFtwI,KAAMoV,EAAMmkD,wCACZ9jD,QAAS,CAAC66H,qCAEuCC,EAAtCA,oCAAsC,SAACC,GAAD,MAAuC,CACxFxwI,KAAMoV,EAAMokD,wCACZ/jD,QAAS,CAAC+6H,sCAI0CC,EAAzCA,uCAAyC,SAACC,GAAD,MAA0C,CAC9F1wI,KAAMoV,EAAMqkD,2CACZhkD,QAAS,CAACi7H,yCAEuBC,EAAtBA,oBAAsB,SAACC,GAAD,MAAuB,CACxD5wI,KAAMoV,EAAMskD,sBACZjkD,QAAS,CAACm7H,sBAEsBC,EAArBA,mBAAqB,SAACnO,GAAD,MAAsB,CACtD1iI,KAAMoV,EAAMwjD,sBACZnjD,QAAS,CAACitH,qBAE8BoO,EAA7BA,2BAA6B,SAACjO,GAAD,MAA8B,CACtE7iI,KAAMoV,EAAMyjD,+BACZpjD,QAAS,CAACotH,6BAEyBkO,EAAxBA,sBAAwB,SAACC,GAAD,IAAqBC,EAArB,8DAAgD,CACnFjxI,KAAMoV,EAAM0jD,yBACZrjD,QAAS,CAACu7H,qBAAoBC,mBAEaC,EAAhCA,8BAAgC,SAACC,GAAD,IAA6BF,EAA7B,8DAAwD,CACnGjxI,KAAMoV,EAAM2jD,kCACZtjD,QAAS,CAAC07H,6BAA4BF,mBAERG,EAAnBA,iBAAmB,SAACC,EAAeC,EAActxI,GAC5D,IAAIuxI,EAAwB,OAC5B,OAAQvxI,GACN,IAAK,UACHuxI,EAAwB,yBACxB,MACF,IAAK,cACHA,EAAwB,6BACxB,MACF,QACE3kJ,QAAQC,MAAM,qCAAsCmT,GAGxD,MAAO,CACLA,KAAMoV,EAAM4jD,oBACZvjD,yBACG87H,EAAwBF,KAIAG,EAAlBA,gBAAkB,SAAC5O,GAAD,MAAmB,CAChD5iI,KAAMoV,EAAM6jD,mBACZxjD,QAAS,CAACmtH,kBAIwC6O,EAAvCA,qCAAuC,SAACC,GAAD,MAAqC,CACvF1xI,KAAMoV,EAAM+jD,mCACZ1jD,QAAS,CAACi8H,oCAI8BC,EAA7BA,2BAA6B,SAACC,GAAD,MAA2B,CACnE5xI,KAAMoV,EAAMgkD,+BACZ3jD,QAAS,CAACm8H,0BAG8BC,EAA7BA,2BAA6B,SAACzO,GAAD,MAA8B,CACtEpjI,KAAMoV,EAAMikD,+BACZ5jD,QAAS,CAAC2tH,8B,szBCvHZ,YACA,Q,WACA,S,mDAEmC0O,EAAtBA,oBAAsB,s/BAEFC,EAApBA,kBAAoB,SAAChlI,GAChC,IAAMilI,EAAgBA,mEAKtB,OAAI,IAAAh4I,QACE+S,EAAeklI,YAJUC,uDAMlBnlI,EAAeolI,OALFC,iDAObrlI,EAAeE,QATDolI,kDAYlBL,EAGL,UAAOv8I,aAAesX,EAAeulI,UAAYvlI,EAAeulI,QAAQvjJ,SAAS,SAAWf,SAASC,SAASgC,OACzGjC,SAASC,SAASgC,OAAS8c,EAAeulI,QAG5CvlI,EAAeulI,SAAWN,GAvB5B,IA0BM1oG,EAAkBA,EAAlBA,gBAAkB,WAE7B,SAAI,UAAO7zC,aAA6C,SAA7BzH,SAASC,SAASmC,SAD1B,CAAC,eAAgB,SAAU,SAAU,QAAS,SAAU,cAIzDyE,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGvDC,EAA2BA,EAA3BA,yBAA2B,WAEtC,SAAI,UAAO/8I,aAA6C,SAA7BzH,SAASC,SAASmC,QAAkD,SAA7BpC,SAASC,SAASmC,SADjE,CAAC,iBAAkB,wBAIpByE,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGvDE,EAA6BA,EAA7BA,2BAA6B,WAExC,SAAI,UAAOh9I,aAA6C,SAA7BzH,SAASC,SAASmC,QAAkD,SAA7BpC,SAASC,SAASmC,SADjE,CAAC,oBAIFyE,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGvDG,EAAiBA,EAAjBA,eAAiB,WAE5B,MADmB,CAAC,SAAU,SACZ79I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGvDI,EAAsBA,EAAtBA,oBAAsB,WAEjC,MADmB,CAAC,SAAU,cACZ99I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGvD3mG,EAAwBA,EAAxBA,sBAAwB,WAEnC,OAAO59C,SAASC,SAASif,eADT,CAAC,gBAAiB,+BACgBrY,MAAK,SAAA5E,GAAA,OAAUlD,OAAO2B,SAASC,KAAKI,SAASkB,OAGpFy5C,EAAoBA,EAApBA,kBAAoB,WAE/B,MADmB,CAAC,WACF70C,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKuC,cAAcnC,SAASwjJ,OAQrE/oG,GALwBG,EAAxBA,sBAAwB,WAEnC,MADmB,CAAC,eACF90C,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKuC,cAAcnC,SAASwjJ,OAG/C/oG,EAAtBA,oBAAsB,WAEjC,MADmB,CAAC,aAAc,QAChB30C,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,QAGvDK,EAAuBA,EAAvBA,qBAAuB,WAElC,MADmB,CAAC,aAAc,cAAe,eAC/B/9I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGvDM,EAAkCA,EAAlCA,gCAAkC,WAE7C,MADmB,CAAC,0BAA2B,yBAC7Bh+I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGvDO,EAAoCA,EAApCA,kCAAoC,WAC/C,OAAO,UAAkCj+I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAG9EQ,EAAkBA,EAAlBA,gBAAkB,WAC7B,MAAO,CAAC,OAAQ,OAAQ,QAAQl+I,MAAK,SAAAzE,GAAA,OAAWpC,SAASC,SAASmC,SAAWA,MAAW,CAAC,QAAS,SAAU,oBAAoByE,MAAK,SAAA09I,GACnI,OAAOxlJ,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAK2C,OAAU5F,OAAO2B,SAASsB,KAAK2C,MAAM,KAAK,KAAO4/I,MAU5FS,GANkBC,EAAlBA,gBAAkB,WAC7B,OAAoC,SAA7BjlJ,SAASC,SAASmC,QACvBrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAK2C,OAAiD,UAAvC5F,OAAO2B,SAASsB,KAAK2C,MAAM,KAAK,IAI3DqgJ,EAAnBA,iBAAmB,WAC9B,OAAoC,SAA7BhlJ,SAASC,SAASmC,QAAkD,SAA7BpC,SAASC,SAASmC,QAC9DrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAAS,YAI9EmkJ,EAAmBA,EAAnBA,iBAAmB,WAC9B,OAAoC,SAA7BllJ,SAASC,SAASmC,QAAkD,SAA7BpC,SAASC,SAASmC,QAC9DrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAAS,aAI9EokJ,EAAyBA,EAAzBA,uBAAyB,WACpC,OAAoC,SAA7BnlJ,SAASC,SAASmC,QACvBrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAAS,iBAI9EqkJ,EAA6BA,EAA7BA,2BAA6B,WACxC,OAAoC,SAA7BplJ,SAASC,SAASmC,QACvBrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAAS,sBAI9EskJ,EAAsBA,EAAtBA,oBAAsB,WACjC,OAAoC,SAA7BrlJ,SAASC,SAASmC,QACvBrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAAS,eACpFhC,OAAO2B,SAASC,KAAKI,SAAS,6BAGxBukJ,EAAmBA,EAAnBA,iBAAmB,WAC9B,OAAoC,SAA7BtlJ,SAASC,SAASmC,QACvBrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAAS,WACpFhC,OAAO2B,SAASC,KAAKI,SAAS,yBAGxBwkJ,EAAmBA,EAAnBA,iBAAmB,WAC9B,OAAoC,SAA7BvlJ,SAASC,SAASmC,QACvBrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAAS,WACpFhC,OAAO2B,SAASC,KAAKI,SAAS,yBAuDxBykJ,GApDWnmI,EAAXA,SAAWkmI,IAESE,EAApBA,kBAAoB,WAE/B,MADmB,CAAC,WACF5+I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKuC,cAAcnC,SAASwjJ,OAG5CmB,EAAzBA,uBAAyB,WAEpC,MADmB,CAAC,gBACF7+I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGpCoB,EAAnBA,iBAAmB,WAE9B,MADmB,CAAC,UACF9+I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGhClgI,EAAvBA,qBAAuB,WAClC,MAAO,CAAC,OAAQ,OAAQ,QAAQxd,MAAK,SAAAzE,GAAA,OAAUpC,SAASC,SAASmC,SAAWA,MAGxDwjJ,EAATA,OAAS,WAEpB,MADmB,CAAC,sBAAuB,2BACzB/+I,MAAK,SAAA09I,GAAA,OAAaxlJ,OAAO2B,SAASC,KAAKI,SAASwjJ,OAGrBnvI,EAAlCA,gCAAkC,SAACjM,GAC9C,IAAI08I,EAAoB,EAkBxB,OAjBA18I,EACGyE,QAAO,SAAAZ,GACN,MAA2B,6BAApBA,EAASE,QACS,eAApBF,EAASE,QACY,eAApBF,EAASE,SACqB,OAA/BF,EAASsK,mBACyB,OAA/BtK,EAASsK,mBACsB,OAA/BtK,EAASsK,mBACsB,QAA/BtK,EAASsK,mBACsB,QAA/BtK,EAASsK,mBACsB,QAA/BtK,EAASsK,sBAGlBtS,SAAQ,SAAAgI,GACP64I,IAAqB,IAAAlzI,gBAAe3F,EAASC,YAAaD,EAAS+C,SAAU/C,EAASgD,mBAG/D,GAApB61I,GAGuBC,EAAnBA,iBAAgD,SAA7B9lJ,SAASC,SAASmC,QAChDrD,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAAS,kBAGrDykJ,EAAvBA,qBAAuB,WAAkC,IAAjCjB,EAAiC,uDAArB,GAAIwB,EAAiB,uDAAT,KAC3D,SAAKxB,IAAcwB,KAGXA,GAAU/lJ,SAASC,SAASmC,SAAW2jJ,GAC7ChnJ,OAAO2B,SAASsB,MAAQjD,OAAO2B,SAASsB,KAAKjB,UAAYhC,OAAO2B,SAASsB,KAAKjB,SAASwjJ,IACpFxlJ,OAAO2B,SAASC,KAAKI,SAAS,iBAAmBwjJ,MAIfyB,EAA5BA,0BAA4B,CAUvC/mI,QAASq8B,IACT6oG,OAAQO,IACRT,YAAaU,IACbsB,iBAAkBzB,IAClB3lC,mBAAoB4lC,IACpBvlI,cAAe0+B,IACfsoG,wBAAyBrB,IACzBsB,0BAA2BrB,IAC3BsB,UAAW1qG,IACX2qG,YAAa7qG,IACb8qG,aAAc1B,IACd7lC,QAASgmC,IACTwB,SAAUvB,IACVtkD,SAAUwkD,IACV7P,eAAgB8P,IAChBqB,mBAAoBpB,IACpB1hI,YAAa2hI,IACboB,SAAUnB,IACVjmI,SAAUkmI,IACVmB,QAAS,EAAA3kJ,kBAAoByjJ,EAAqB,QAAS,U,sQCnP7D,O,IACA,OACA,Q,IACA,MACA,Q,IACA,OACA,QACA,Q,mDAE2BmB,EAAdA,YAAc,SAAC7oJ,GAC1B,IAAM8oJ,GAAM,IAAAC,UAIZ,OAHA,IAAAt+B,YAAU,WACRq+B,EAAIxrC,QAAUt9G,KAET8oJ,EAAIxrC,SALN,IAQM0rC,EAAeA,EAAfA,aAAe,WAC1B,IAAMC,GAAe,IAAAF,SAAO,GACtBG,GAAY,IAAAC,cAAY,kBAAMF,EAAa3rC,UAAS,IAM1D,OAJA,IAAAmN,YAAU,WACR,OAAO,WAAYw+B,EAAa3rC,SAAU,KACzC,IAEI4rC,GAsGLE,GAnG8BC,EAArBA,mBAAqB,SAACj1C,GAAU,IACpCk1C,EAAYl1C,EAAZk1C,SACDC,EAAqBP,IAC3B,MAA2B,mBAAbM,EAA0BA,EAASC,GAAsBD,GAG1CE,EAAlBA,gBAAkB,SAACV,EAAKjvH,GAAoC,IAA1B4vH,EAA0B,wDACjEl6C,EAAc,SAAAtwG,GACd6pJ,EAAIxrC,UAAYwrC,EAAIxrC,QAAQosC,SAASzqJ,EAAEugB,SACzCqa,EAAS56B,IAIP0qJ,EAAiC,SAACz4F,EAAUjyD,GAIhD,OAHI6pJ,EAAIxrC,UAAYwrC,EAAIxrC,QAAQosC,SAASzqJ,EAAEugB,SACzCqa,EAAS56B,IAEJ,IAGT,IAAAwrH,YAAU,WACR,GAAIg/B,EAAe,CACjB,IAAMG,EAAa,CAAErqJ,KAAM,0BAW3B,OATA2C,SAASytD,iBAAiB,UAAiB6S,OAAOilC,MAAO8H,GAEzD,UAAiBhtC,SACf,UAAiBC,OAAOI,WACxB+mF,EACAC,EACA,UAAiBlnF,WAAWojC,SAGvB,WACL5jG,SAAS8pG,oBAAoB,UAAiBxpC,OAAOilC,MAAO8H,GAE5D,UAAiB7C,YAAYk9C,OAIhC,CAACd,EAAKjvH,EAAU4vH,KAGgBI,EAAxBA,sBAAwB,SAACf,EAAKjvH,GAAwC,IAA9BiwH,EAA8B,uDAAT,KAClEv6C,EAAc,SAAA7F,GAClB,GAAIo/C,EAAIxrC,UAAYwrC,EAAIxrC,QAAQosC,SAAShgD,EAAMlqF,QAAS,CACtD,GAAIsqI,GAAsBA,EAAmB/gJ,MAAK,SAAA2qF,GAChD,OAAOgW,EAAMlqF,OAAOxa,UAAU0kJ,SAASh2D,IAAcgW,EAAMlqF,OAAOuqI,QAAQ,IAAIr2D,MAE9E,OAEF75D,EAAS6vE,MAIb,IAAA+gB,YAAU,WAGR,OAFAvoH,SAASytD,iBAAiB,QAAS4/C,GAE5B,WACLrtG,SAAS8pG,oBAAoB,QAASuD,QAKTy6C,EAAtBA,oBAAsB,SAACrqD,GAAa,OAED,IAAAsqD,WAAS,GAFR,qBAExCC,EAFwC,KAEvBC,EAFuB,KAGzCjB,EAAYF,IA6BlB,OA3BA,IAAAv+B,YAAU,WACR,IAAMjzD,EAAQ,IAAI8B,MAClB9B,EAAMojC,OAAS,WACTsuD,KACFiB,GAAmB,IAGvB3yF,EAAMmjC,QAAU,WACVuuD,KACFiB,GAAmB,IAGvB,IACE3yF,EAAM3vD,IAAM83F,EACRnoC,EAAM4yF,UACJlB,KACFiB,GAAmB,GAGvB,MAAOlrJ,GACHiqJ,KACFiB,GAAmB,MAItB,CAACxqD,IAEGuqD,GAGwB,MAECG,EAArBA,mBAAqB,SAAC3kI,EAAc8kG,GAA4B,OAE/B,IAAAy/B,YAASvkI,GAAeA,EAAaw1E,qBAFN,qBAEpEovD,EAFoE,KAEpDC,EAFoD,KAGrErB,EAAYF,IAwClB,OAVA,IAAAv+B,YAAU,WACR,IAAK/kG,IAAiB8kG,EACpB,OAAO,EAEJ9kG,EAAaw1E,qBAhCE,WACpB,IAAKx1E,EAAaw1E,oBAChB,GAAIx1E,EAAaokG,kBAAmB,CAalCtyB,YAZmC,SAA7BgzD,IAEJ,GADA1pJ,QAAQ4B,IAAI,6BAA8BgjB,GACtCA,EAAaw1E,oBAMf,OALAuvD,aAAarB,GACb,UAAMr8H,UAAS,IAAAo7C,+BACX+gF,KACFqB,GAAkB,IAItBnB,EAA6B5xD,WAAWgzD,EAA4B,OAE/B,UAEvC,IAAA/uD,6BAA4B/1E,GAAciV,MAAK,WAE7C,UAAM5N,UAAS,IAAAo7C,0BACX+gF,KACFqB,GAAkB,MAYxBG,KAGD,CAAChlI,EAAc8kG,IAEX8/B,GAG+BK,EAA3BA,yBAA2B,SAACt6H,EAAc9mB,EAAUihH,GAC/D,OAAO,IAAAogC,UAAQ,WACb,QAAKpgC,KAGDjhH,MAGA,UAAOK,4BAGP,IAAAk+I,YAGG,IAAArqC,kBAAiBlgH,OAAS,MAEhC,CAAC8yB,EAAcm6F,EAAyBjhH,M,yJC/L7C,QAEA,Q,IACA,OACA,S,IACA,MACA,SACA,QACA,Q,qDAKao+E,iB,YAEX,WAAYC,IAAS,iGACb,EAAOA,IADM,SA4IrByB,kBAAoB,WAAwC,IAAvCp6D,EAAuC,uDAAvB,EAAKA,cACxC,GAAKA,EAAL,CAGA,IAAMjL,EAAS,EAAKxa,YAAYwa,OAC1BslE,EAAa,EAAKC,uBACpBvlE,GAAU,EAAKwlE,6BAA+B,EAAKA,4BAA4BxlE,EAAO9P,MACxF1W,OAAOmc,KAAK,EAAK4qB,gBAAgBr9B,SAAQ,SAAA5G,GACnC,EAAKkpF,4BAA4BxlE,EAAO9P,QAAU5T,GAC/C,EAAKikC,eAAejkC,IAAS,EAAKikC,eAAejkC,GAAKmpF,gCAAgCH,GAElFr6D,EAAcxiB,UAAUmP,SAAxB,gBAAsDtb,IAC/D,EAAKikC,eAAejkC,GAAO,MAF3B,EAAKikC,eAAejkC,GAAO2uB,KAM/BzxB,OAAOmc,KAAK,EAAK4qB,gBAAgBr9B,SAAQ,SAAA5G,GACvC,GAAI0jB,EAAOia,aACT,GAAKhP,EAAcxiB,UAAUmP,SAAxB,gBAAsDtb,GACrD,EAAKikC,eAAejkC,KAAS,EAAKikC,eAAejkC,GAAKmpF,gCAAgCH,GAC1F,EAAK/kD,eAAejkC,GAAO2uB,OAEtB,GAAI,EAAKsV,eAAejkC,GAAM,CACnC,IAAMqpF,EAA0B,EAAKC,2BAA2BtpF,GAC5DqpF,IACF,EAAKplD,eAAejkC,GAAOqpF,SAI/B,GAAK16D,EAAcxiB,UAAUmP,SAAxB,gBAAsDtb,GACpD,EAAKikC,eAAejkC,IAAS,EAAKikC,eAAejkC,GAAKmpF,gCAAgCH,GAGtF,CACL,IAAMK,EAA0B,EAAKC,2BAA2BtpF,GAC5DqpF,IACF,EAAKplD,eAAejkC,GAAOqpF,QAL7B,EAAKplD,eAAejkC,GAAO2uB,OA3KhB,EA8LrB26D,2BAA6B,WAAwE,IAAvEplD,EAAuE,uDAA5D,GAAI7d,EAAwD,uDAA1C,EAAKsI,cAAeowC,EAAsB,uDAAT,KAC1F,GAAI14C,EAAa,CACf,IAAMkjE,EAAQljE,EAAY4B,yBACtBuhE,EAAoB,EAAKP,uBAO7B,GANI5iE,EAAY/K,SAAZ,SACFkuE,EAAkBjsF,KAAK,CACrBmsF,SAAU,UACVI,UAAWzjE,EAAY/K,SAAZ,UAGXyjD,EAAY,CACd,IAAI4qB,EAAiBH,EAAkBl1E,MAAK,SAAAs1E,GAAA,MAAoC,eAAvBA,EAAUF,YAC/DG,EAAgBL,EAAkBl1E,MAAK,SAAAs1E,GAAA,MAAoC,cAAvBA,EAAUF,YAC9DC,IACFA,EAAeG,UAAY/qB,EAAWgrB,gCAEpCF,IACFA,EAAcC,UAAY/qB,EAAWniC,OAGzC,IAAMotD,EAAkB,CAAC,cAAe,cAAe,oBACjDC,EAAgB,EAAKhmD,gBAAmBC,IAAahnC,OAAOmc,KAAK,EAAK4qB,gBAAgB,GAAuB,EAAKomD,cAArB,EAAKF,SACxG,OAAOF,EAAY31E,MAAK,SAACzI,GACvB,OAAQm+E,EAAgBrnF,SAAS,EAAKmM,SAAWy6E,IAAU19E,EAAQoc,2BAC9Dpc,EAAQs9E,gCAAgCK,IAAsB39E,EAAQyP,SAAR,gBAAsC4oB,KAG7G,OAAO,MAzNY,EAuWrBsmD,uCAAyC,WAIvC,OAH+C,MAA3C,EAAKC,qCACP,EAAKA,mCAAqC,EAAKt+E,UAAUmF,mBAEpD,EAAKm5E,oCA3WO,EA8WrBxiE,uBAAyB,WAIvB,OAH+B,MAA3B,EAAK9G,qBACP,EAAKA,mBAAqB,EAAKhV,UAAUmF,mBAAqB,EAAK+S,UAAY,IAE1E,EAAKlD,oBAlXO,EAqXrBgqE,uBAAyB,WACvB,OAAO,EAAKljE,0BAtXO,EAyXrBojE,qBAAuB,WAErB,OAAO,EAAKhnE,SAAS9d,MAAM,MAAM,IAzXjC,EAAK+kF,UAAW,EAChB,EAAKC,iBAAkB,EACvB,EAAKC,eAAgB,EAJF,E,qEAWhBr/E,GACH,GAAI3D,KAAKy7B,eAAgB,CACvB93B,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,MAAgE,MAAlCnP,EAAUmP,SAAV,KAA2B,GAC3FnP,EAAUmP,SAAV,KAA2B,GAC3B,EAAAwoB,eAAe,GACnB,IAAM2nD,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EAC7E4nD,EAAW,IAAIljF,KAAKmjF,aAAY,EAAOF,GAC7C,OAAOjjF,KAAKojF,MAAMz/E,EAAWu/E,GAAU,EAAqB,IAAfD,EAAmB,WAAa,iBAE/E,OAAOjjF,KAAKojF,MAAMz/E,EAAW,IAAI3D,KAAKmjF,e,4BAUlCx/E,EAAW6X,GAA+C,WAAzC6nE,IAAyC,yDAAvB1B,EAAuB,uDAAZ,WAE5C2B,EAAc3B,EAAW,OAExBpxE,EAAe5M,EAAf4M,YAJuD,GAK1C,IAAAsO,kBAAiBtO,GAAhCgzE,EALyD,EAKzDA,YAML,IALKA,GAAe5/E,EAAU6M,WAAa7M,EAAU4M,cACnDgzE,EAAc5/E,EAAU4M,YAAY5R,QAAQgF,EAAU6M,UAAY,MAAO,KAIvE6yE,IACF7nE,EAAK9a,UAAY,kBAAM,GACnBiD,EAAU6/E,eAAe,CAC3B,IAAMC,EAAW9/E,EAAU6/E,cAAc13E,MAAK,SAAA43E,GAAA,OAAYA,EAASD,YAC/DA,IACFzjF,KAAK2jF,cAAgBF,EAASrsE,KAEhCzT,EAAU6/E,cAAgB7/E,EAAU6/E,cAAc96E,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAE4pC,QAAU7pC,EAAE6pC,WAqBnF,GAjBK7uC,EAAUmF,mBACb9Q,QAAQC,MAAM,iCAAkC0L,GAGlD6X,EAAKK,SAAW0nE,EAChB/nE,EAAK1I,SAAWnP,EAAUmP,UAAY,GAElCnP,EAAUixB,YAAcjxB,EAAUixB,WAAWngC,OAIjD+mB,EAAK7X,UAAYA,GAAa,GACzB6X,EAAK7X,UAAUkS,iBAClB2F,EAAK7X,UAAUkS,eAAiB,IAElC2F,EAAKooE,0BAA4BjgF,EAAUixB,aAAejxB,EAAUixB,WAAWngC,OAE3E+mB,EAAK1I,SAAS+hB,WAAY,CAC5B,IAAMgvD,EAAaroE,EAAK1I,SAAS+hB,WACjC,GAAIgvD,EAAW1pF,SAAS,EAAA49B,mBAAmBC,KACzCtjC,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKR,GAAaQ,GAAY/uF,KAAKymB,WAEhC,GAAI5T,MAAMC,QAAQg8E,IAAeA,EAAWpvF,OACjDovF,EAAWzlF,SAAQ,SAAA2lF,GACjB,IAAMD,GAAa,mCAA2BC,GAC1CD,GACF,EAAKR,GAAaQ,GAAY/uF,KAAKymB,UAGlC,CACL,IAAMsoE,GAAa,mCAA2BD,GAC3CC,GACD9jF,KAAKsjF,GAAaQ,GAAY/uF,KAAKymB,IAkBzC,OAbIA,EAAKooE,0BAA6BpoE,EAAK1I,SAAS+hB,aAClDrZ,EAAKooE,0BAA2B,EAChClvF,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKR,GAAaQ,GAAY/uF,KAAKymB,OAQvCxb,KAAKgkF,kBAAkBxoE,GAEhBA,I,mDAIP,OAAOxb,KAAKygF,yB,yCAIK5qC,EAASouC,GAE1B,IAAMC,EAA4BlkF,KAAKmkF,wBAAwBnkF,KAAKokF,6BAA6BvuC,EAAS71C,KAAK2hF,UAAWsC,GACtHI,EAAoBrkF,KAAKskF,+CAA+CtkF,KAAKygF,sBAAqB,GAAOyD,GAE7G,OAAOlkF,KAAKukF,wBAAwBF,K,mDAGTnD,EAAUI,GAA4C,IAAjCsE,EAAiC,uDAAf5lF,KAAK2hF,SACvE,OAAOiE,EAAgB5+E,QAAO,SAAC3D,GAC7B,OAAOA,EAAQyhF,wBAAwB5D,EAAUI,MAChDx5E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,qEAGP8xE,GAAoD,IAAjC4E,EAAiC,uDAAf5lF,KAAK2hF,SAGvF,OAAOiE,EAAgB5+E,QAAO,SAAC3D,GAC7B,OAAOA,EAAQugF,0BAA4B5C,EAAkBnjF,OAAM,SAACgoF,GAAoB,IAC/E3E,EAAuB2E,EAAvB3E,SAAUI,EAAauE,EAAbvE,UACjB,OAAOj+E,EAAQyhF,wBAAwB5D,EAAUI,W,iCAK5CpmE,GAAoC,IAA5B4qE,EAA4B,wDAC7C9lF,KAAK+lF,uBAAuB7qE,EAAQ4qE,K,6CA+Cf,WACrBpxF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAA5G,GACvC,EAAKikC,eAAejkC,GAAO,EAAKsrF,SAAW,KAAO,EAAKhC,2BAA2BtpF,Q,6CAmCpF,IAAM0jB,EAASlb,KAAKU,YAAYwa,OAChC,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWpmE,EAAOqmE,gCACjB,CACDL,SAAU,YACVI,UAAWpmE,EAAOkZ,U,gCAIZlZ,GACR,OAAIlb,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKimF,oBACPjmF,KAAKkmF,+BAEAlmF,KAAKmmF,WAAWjrE,KAEzBlb,KAAKomF,WAAWlrE,GACTlb,KAAKmmF,WAAWjrE,M,gDAGvB,OAAO,I,wCAGSvG,GACZ3U,MAAQA,KAAK2D,WAAa3D,KAAK2D,UAAUmF,mBAC3C9Q,QAAQ4B,IAAOoG,KAAKsG,OAApB,IAA+BtG,KAAK2D,UAAUmF,mBAEhD9I,KAAKymG,YAAY9xF,EAAc,e,+CAG4B,IAAtC8zE,EAAsC,uDAAnB,GAAI5sE,EAAe,uDAAJ,GACvD,GAAI7b,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,SAAU,CACrD,IAAIkmI,EAA4BlmI,EAC5B7b,KAAK0iH,yBAAyB7mG,GAC9B7b,KAAKmmB,cAAcw8D,yBAIvB,GAHA3iF,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GACzC,OAAOA,EAAQs/E,2BAA6Bo/D,KAE1C/hJ,KAAKmmB,cACP,OAAO,EAGX,OAAO,I,oCAMyB,IAAtBxR,EAAsB,wDAC1Bpb,EAASyG,KAAKU,YACbuM,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACP1T,EAAOgtF,WAAWt5E,IAAoB,EACtC,IAAMyI,GAAkB,IAAAhB,oBAAmB1U,KAAM2U,GAC7Ce,EACFnc,EAAOitF,oBAAsBxmF,MAEzBzG,EAAOitF,sBACTjtF,EAAOitF,oBAAsB,MAE/BxmF,KAAKymF,kB,qCAKP,IAAMltF,EAASyG,KAAKU,YACpBnH,EAAOmtF,oBAAqB,EACxB1mF,KAAK4jF,yBACPrqF,EAAOotF,6BAA+B3mF,KAC7BzG,EAAOotF,8BAChBptF,EAAOotF,6BAA+B,KACtCptF,EAAO4sB,cAAgBnmB,MAEvBzG,EAAO4sB,cAAgBnmB,KAEzBA,KAAK4mF,mB,mCAGM,WACP5mF,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAM9nF,IAAM,IAE7B6I,MAAMC,QAAQ7H,KAAK8mF,qBAAuB9mF,KAAK8mF,mBAAmBryF,QACpEuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC3BA,GAAqBA,EAAkBF,QACzCE,EAAkBF,MAAM9nF,IAAM,OAIhCiB,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAM9nF,IAAM,IAElCiB,KAAKy7B,gBACP/mC,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAA5G,GACnC,EAAKikC,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAM9nF,IAAM,S,gCAMnCkoF,GAAU,WAEZC,EAAY,SAAC7jF,GAA2B,IAAlBiD,EAAkB,uDAAT,KACnC,OAAOjD,EAAQyP,SAAR,SAA8D,IAA/BzP,EAAQyP,SAAR,SAAsCm0E,EAAS3gF,GAAU,EAAKA,SAGlGtG,KAAKy7B,eACP/mC,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GAC7C,IAAMp2G,EAAU,EAAKo4B,eAAejkC,GAChC6L,IACFA,EAAQwjF,MAAMO,OAASF,EAAU7jF,GAAoB,GAATo2G,MAGvCxyB,GAAYjnF,KAAKmmB,gBAC1BnmB,KAAKmmB,cAAc0gE,MAAMO,OAASF,EAAUlnF,KAAKmmB,eAC7CnmB,KAAKimF,oBAAsBjmF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QAChFuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,EAAmB0yB,GAClD1yB,EAAkBF,MAAMO,OAASF,EAAUH,EAAmB,EAAKM,sBAAyC,IAAhBoyB,EAAW,S,6CAMxF59F,GACrB,IACM2rE,EADe,UAAMrlF,WAAW4S,YAAYiB,aACblK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,QAC9E+wF,GAAmBA,EAAgBrxE,QAAUqxE,EAAgBrxE,OAAO1hB,QACxC+yF,EAAgBrxE,OAAOzN,MAAK,SAACC,EAAEC,GAC3D,OAAOD,EAAEzR,OAAS0R,EAAE1R,OAAU0R,EAAE1R,MAAMzC,OAASkU,EAAEzR,MAAMzC,UAEnC2J,SAAQ,SAACqpF,GAC7B5rE,EAAWA,EAAS9d,MAAM,IAAI0pF,EAAiBvwF,OAAOmc,KAAK,OAG/D,OAAOwI,I,+CA0BgBuC,EAAgBspE,GAA6B,IAAd7xC,EAAc,uDAAJ,GAChE,OAAOA,EAAQh4C,OAAM,SAAAmJ,GACnB,OAAO0gF,EAAc1gF,EAAOgB,KACvBoW,EAAeza,UAAUkS,eAAe7O,EAAOgB,KAC/CoW,EAAeza,UAAUkS,eAAe7O,EAAOgB,IAAI7N,SAASutF,EAAc1gF,EAAOgB,IAAI,S,sEAIgB,WAAhE6V,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAI8D,SACEhG,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAIhC7d,KAAK6nF,+BACP7G,EAAoBhhF,KAAK6nF,6BAA6B7G,KAExD8F,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAAD,OAAa09E,IAAU19E,EAAQoc,6BAGvDhrB,UACrBsyF,EAAoBD,EAAmBh7E,MAAK,SAACzI,GAC3C,OAAOA,EAAQs9E,gCAAgCK,SAG/C+F,EAAoBD,EAAmB,MAG3CA,EAAqBC,EAAoB,CAACA,GAAqB,IAC5C3oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,I,qDAIP,GAAI9mF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,OAAQ,CAC7D,IAAMkzF,EAA0B3nF,KAAK4nF,6BAC/B7G,EAAQ/gF,KAAKmmB,cAAc1G,yBAC3BsnE,EAAoB/mF,KAAK8mF,mBAAmB,GAC5CC,EAAkBpG,gCAAgCgH,IACnD5G,IAAUgG,EAAkBtnE,2BAC/Bzf,KAAK8mF,mBAAqB9mF,KAAK8nF,sBAAsB9nF,KAAKmmB,cAAewhE,SAG3E3nF,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,8CAImD,IAAhEjqE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,OAAO3nF,KAAK+nF,8CAA8ClqE,EAAa8pE,O,0FCtc3E,I,IAAA,MACA,O,IACA,M,IAEA,Q,IAEA,O,IACA,Q,mDAEA,IAAMq6D,EAAkB,SAAC12C,GAAU,IAC1BtnG,EAAyCsnG,EAAzCtnG,YAAaynG,EAA4BH,EAA5BG,MAAOnoG,EAAqBgoG,EAArBhoG,KAAM2+I,EAAe32C,EAAf22C,YAE3B5tI,EAAQ,CAAC,MAASo3F,GAAS,UAAaznG,GAAa4nG,QAE3D,OAAItoG,EAEA,+BAAKsnF,UAAU,UACb,mCAAkBv2E,MAAOA,EAAO/Q,KAAMA,KAM1C,+BAAKsnF,UAAU,SAASv2E,MAAO4tI,EAAc5tI,EAAQ,MAClD4tI,EAAc,mCAAYr3D,UAAU,mBAAqB,KAC1D,mCAAkBv2E,MAAOA,MAK/B2tI,EAAgBE,UAAY,CAC1Bz2C,MAAO,UAAUjpE,OACjBl/B,KAAM,UAAU6+I,UAAU,CAAC,UAAU3/G,OAAQ,UAAUo2E,SACvDqpC,YAAa,UAAUG,M,WASV,IAAAt2C,UANS,SAACxzG,GACvB,MAAO,CACL0L,YAAa1L,EAAMgR,YAAYtF,eAIpB,CAAyBg+I,I,kSC1CxC,IAAYK,E,wJAAZ,MACA,SACA,QAKO,IAAM3mC,EAAqBA,EAArBA,mBAAqB,CAChCzlG,MAAO,QACPjP,OAAQ,SACRi7G,OAAQ,UAGGqgC,EAAuBA,EAAvBA,qBAAuB,CAClCt6I,GAAIq6I,EAAU7/G,OAAOy2E,WACrBze,SAAU6nD,EAAUE,MAAM7tJ,OAAOmc,KAAK6qG,IAAqBzC,WAC3DzoG,UAAW6xI,EAAU7/G,OAAOy2E,WAC5BlsB,cAAes1D,EAAUzpC,OACzB4pC,cAAeH,EAAU7/G,OACzBlyB,kBAAmB+xI,EAAU7/G,OAC7BmxF,QAAS0uB,EAAUD,KAAKnpC,WACxB/iE,MAAOmsG,EAAU7/G,OACjBrjB,YAAakjI,EAAU7/G,OACvB65E,iBAAkBgmC,EAAUhsI,MAC5BulG,iBAAkBymC,EAAUhsI,MAC5BslG,YAAa0mC,EAAUD,KACvBK,gBAAiBJ,EAAUhsI,MAC3BsqG,iBAAkB0hC,EAAU7/G,OAC5BkgH,uBAAwBL,EAAU7/G,OAClCmgH,iBAAkBN,EAAU7/G,OAC5BogH,mBAAoBP,EAAUD,KAC9B3hC,YAAa4hC,EAAUD,KACvBhmC,aAAcimC,EAAUhsI,MACxBwsI,gBAAiBR,EAAU7/G,OAC3BsgH,qBAAsBT,EAAUD,KAChCW,kBAAmBV,EAAUD,KAC7BY,YAAaX,EAAUhsI,MACvB4sI,YAAaZ,EAAU7/G,OACvB0gH,eAAgBb,EAAU7/G,OAC1B2gH,qBAAsBd,EAAUhsI,MAChC+sI,iBAAkBf,EAAUD,KAC5BiB,gBAAiBhB,EAAUD,MAGhBkB,EAAsBA,EAAtBA,oBAAsB,CACjCt7I,GAAIq6I,EAAU7/G,OAAOy2E,WACrB7tG,KAAMi3I,EAAU7/G,OAAOy2E,WACvBv9E,SAAU2mH,EAAU1qJ,OAAOshH,WAC3B5kG,MAAOguI,EAAU1qJ,OACjB1D,KAAMouJ,EAAUzoG,MAAM,CACpBlvB,YAAa23H,EAAUzoG,MAAM0oG,MAIpBiB,EAAsBA,EAAtBA,oBAAsB,CACjCv7I,GAAIq6I,EAAU7/G,OAAOy2E,WACrBl4E,OAAQshH,EAAU7/G,OAAOy2E,WACzBviG,OAAQ2rI,EAAU7/G,OAAOy2E,WACzBn2B,SAAUu/D,EAAUD,MAGaoB,EAAtBA,oBAAsB,CACjCx7I,GAAIq6I,EAAUzpC,OACdpvB,WAAY64D,EAAU7/G,OACtB/rC,KAAM4rJ,EAAU7/G,OAChBrjB,YAAakjI,EAAU7/G,OACvBuiF,eAAgBs9B,EAAU7/G,OAC1BmgH,iBAAkBN,EAAU7/G,OAC5BmxF,QAAS0uB,EAAUD,KACnBt5D,UAAWu5D,EAAUD,KACrB72B,SAAU82B,EAAUD,KAGpBr5D,aAAcs5D,EAAUnpC,QAAQmpC,EAAUzoG,MAAM0oG,IAChDmB,YAAapB,EAAUnpC,QAAQmpC,EAAUzoG,MAAM0pG,IAC/C/nC,YAAa8mC,EAAUnpC,QAAQmpC,EAAUzoG,MAAM2pG,IAC/CvpC,eAAgBqoC,EAAUnpC,QAAQmpC,EAAUzpC,QAC5C8qC,WAAYrB,EAAU7/G,OACtBmhH,iBAAkBtB,EAAU7/G,QAGcohH,EAA/BA,6BAA+B,CAC1Ct9I,OAAQ+7I,EAAU7/G,OAClB9X,YAAa23H,EAAUzoG,MAAM0oG,GAC7BhjC,eAAgB+iC,EAAUzoG,MAAV,wBAChB3oC,gBAAiBoxI,EAAUzoG,MAAV,oBACjBzwC,SAAUk5I,EAAUzpC,OACpBirC,cAAexB,EAAUD,MAGa0B,EAA3BA,yBAA2B,CACtC92I,WAAYq1I,EAAUzpC,OAAOK,WAC7BirB,gBAAiBme,EAAUzpC,OAC3BsC,mBAAoBmnC,EAAUD,KAC9BhnC,aAAcinC,EAAUF,UAAU,CAACE,EAAU7/G,OAAQ6/G,EAAUzpC,SAASK,WACxEzvB,WAAY64D,EAAU7/G,OACtB1xB,qBAAsBuxI,EAAU1qJ,QAGcosJ,EAAnCA,iCAAmC,CAC9ChzI,UAAWsxI,EAAUzpC,OAAOK,WAC5BxoG,cAAe4xI,EAAU7/G,OAAOy2E,WAChC+qC,WAAY3B,EAAU7/G,OAAOy2E,a,yJCtG/B,S,IACA,OACA,QACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,QACA,Q,IACA,S,IACA,S,qDAEa4xB,Q,gBAQX,cAAc,iGACN,GAAM,EAAO,EAAArnI,aAAaC,UADpB,SAwPdwgJ,4BAA8B,SAAC5gJ,GAC7B,OAAQA,EAAQM,UAAUs8E,yBACxB,IAAK,0BACH,MAAO,WACT,IAAK,kCACL,IAAK,4BACH,MAAO,YACT,IAAK,4BACL,IAAK,mBACH,MAAO,aACT,QACE,MAAO,KAhQX,EAAK18E,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKhY,cAAL,kBACA,EAAKwgJ,eAAiBrZ,EAAOsZ,MAAMrqH,OACnC,EAAK/a,aAAe,GACpB,EAAKwxH,oBAAqB,EAG1B,EAAK6T,cAAgB,KACrB,EAAKC,eAAiB,KACtB,EAAKlzG,WAAa,KAClB,EAAKiG,KAAO,KACZ,EAAKqxE,OAAS,KACd,EAAK67B,iBAAmB,KACxB,EAAKC,aAAe,KACpB,EAAK/1C,OAAS,KACd,EAAKg2C,YAAc,KACnB,EAAKC,gBAAkB,KACvB,EAAKC,aAAe,KACpB,EAAKC,WAAa,KAClB,EAAKC,WAAa,KAClB,EAAKC,WAAa,KAClB,EAAKA,WAAa,KAClB,EAAKC,cAAgB,KACrB,EAAKC,WAAa,KAClB,EAAKC,aAAe,KAEpB,EAAKh2C,YAAc,EAAAr1E,aAAaiB,eAChC,EAAKqqH,kBAAoB,CAAC,OAAQ,SAAU,aAAc,SAAU,mBAAoB,gBAAiB,SACvG,QAAS,YAAa,gBAAiB,cAAe,eAAgB,cAAe,UAAW,cAChG,iBAlCU,E,qEAqCTthJ,GAA+B,WAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,OACHy/H,EAAkB,OAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YACA,MACF,IAAK,aACL,IAAK,qBACHD,EAAkB,aAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YACA,MACF,IAAK,mBACL,IAAK,aACL,IAAK,aACHD,EAAkB,mBAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,SACL,IAAK,UACHD,EAAkB,gBAClBC,YACA,MAEF,IAAK,QACHD,EAAkB,cAClBC,YACA,MAEF,IAAK,YACHD,EAAkB,kBAClBC,YACA,MAEF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MAEF,IAAK,cACHD,EAAkB,aAClBC,YACA,MAEF,IAAK,eACHD,EAAkB,aAClBC,YACA,MAEF,IAAK,cACHD,EAAkB,aAClBC,YACA,MAEF,IAAK,UACHD,EAAkB,gBAClBC,YAIJ,GAAID,EAAiB,CACnB,IAAKjwI,KAAKiwI,GAER,GADAjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,SAApBD,EAA4B,CAC9B,IAAMkV,EAAcnlJ,KAAK+e,aAAapC,WAAU,SAAAqC,GAAA,MAAgC,WAArBA,EAAQnD,YACnEspI,EAAcnlJ,KAAK+e,aAAappB,OAAOwvJ,EAAa,EAAGnlJ,KAAKo3C,MAAQp3C,KAAK+e,aAAahqB,KAAKiL,KAAKo3C,UACnE,mBAApB64F,EACTjwI,KAAK+e,aAAao3C,QAAQn2D,KAAKqkJ,gBACF,kBAApBpU,EACTjwI,KAAK+e,aAAao3C,QAAQn2D,KAAKokJ,eAE/BpkJ,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,IAUhC,OAPKjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACpCwkJ,GACFllJ,KAAKiwI,GAAiBG,KAAKzsI,IAEtB,EAET,OAAO,I,wCAGS,WAChB,OAAO3D,KAAK+e,aAAa/X,QAAO,SAAAiqE,GAAA,OAAQA,EAAK1gD,QAAQp2B,SAAS,EAAK+pJ,qB,iCAInE,OAAOlkJ,KAAKokJ,eAAiBpkJ,KAAKqkJ,eAAiB,CAACxZ,EAAOsZ,MAAMrqH,OAAQ+wG,EAAOsZ,MAAMtqH,UAAY,K,2CAIlG,OAAO75B,KAAKkkJ,iBAAmBrZ,EAAOsZ,MAAMtqH,W,sCAI5C,OAAO75B,KAAKkkJ,iB,iCAIZ,IAAMnlI,EAAe/e,KAAKwwI,kBACpBl0B,EAAW,GACX8oC,EAAarmI,EAAajT,MAAK,SAAA6T,GAAA,MAA8B,mBAAnBA,EAAQrZ,UAMxD,OALI8+I,GAAcA,EAAWj/H,eACxBi/H,EAAWj/H,cAAcrT,SAAzB,cACAsyI,EAAWj/H,cAAcrT,SAAzB,aAAkD3Y,SAAS,SAC9DmiH,EAASvnH,KAAK,iBAETgqB,EACJ/X,QAAO,SAAAiqE,GAAA,OAASqrC,EAASniH,SAAS82E,EAAK3qE,WACvCwB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,yCAShCkmD,GACjBp1D,KAAKkkJ,eAAiB9uF,EACtBp1D,KAAKwwI,kBAAkBpyI,SAAQ,SAACwuI,GACzBA,EAAYzmH,eACfymH,EAAYxmD,kB,wDAMhB,OAAOpmF,KAAKyc,WAAW,K,iCAGdvB,GACTlb,KAAKwwI,kBAAkBpyI,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,Q,qCAGpCmqI,GACb,IAAI1/C,EAAa3lG,KAAKslJ,qBAAuB,KAC7C,OAAoB,OAAf3/C,GAAwB/9F,MAAMC,QAAQ89F,IAAkC,OAAnBA,EAAW,KAChE0/C,GAAgD,sBAA3BA,EAAgB/+I,QAA6D,sBAA3B++I,EAAgB/+I,OACnF,CAAC,MAEHq/F,I,0CAGW,WACZmlC,EAAgC9qI,KAAK+e,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAW,EAAK0oG,eAIhG,OAHI87B,IAAkCA,EAA8B3kH,eAClEnmB,KAAKokJ,cAAch+D,aAEb0kD,GAAiCA,EAA8B3kH,cACnE2kH,EAA8B3kH,cAAcxiB,UAAUmP,SAAtD,WACA,O,uCAGyB,IAAhBzP,EAAgB,uDAAN,KACvB,GAAIrD,KAAKgvG,cAAgB,EAAAr1E,aAAaiB,iBAAmB56B,KAAKokJ,cAC5D,OAAO,EAET,IAAM5rD,EAAen1F,GAAWrD,KAAKokJ,cAAcj+H,cACnD,OAAOqyE,GAAgBA,EAAa1lF,SAAb,aAAkF,KAAzC0lF,EAAa1lF,SAAb,c,wCAGhDgwE,GAChB9iF,KAAKwwI,kBAAkBpyI,SAAQ,SAAA4gB,GACN,gBAAnBA,EAAQ1Y,QAA+C,kBAAnB0Y,EAAQ1Y,QACxB,sBAAnB0Y,EAAQ1Y,QAAqD,mBAAnB0Y,EAAQ1Y,QAC/B,kBAAnB0Y,EAAQ1Y,QAAiD,sBAAnB0Y,EAAQ1Y,SACjD0Y,EAAQ8jE,SAAWA,Q,kDAKGx8E,GAC1B,IAAMsmI,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWA,KACzE,OAAOsmI,GAAeA,EAAYzmH,eAAiBymH,EAAYzmH,cAAcxiB,UAAUmF,mBACnF,IAAAw5E,kBAAiBsqD,EAAYzmH,cAAcxiB,UAAUmF,mBACrD,O,2DAG+BxC,GAAsC,IAA9B4xF,EAA8B,uDAAnB,kBAChD00C,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWA,KACzE,OAAOsmI,GAAeA,EAAYzmH,cAC9BymH,EAAYzmH,cAAcrT,SAASolF,GACnC,O,yCAkBsC,WAA3BqtD,EAA2B,wDAE1C,GADAvtJ,QAAQ4B,IAAI,mBAAoB2rJ,IAC5B,IAAA/vH,oBAAmBx1B,KAAKkb,UAAY,EAAAua,gBAAgBC,IAAM6vH,EAAmB,CAC/E,IAAMC,EAAmBxlJ,KAAK+e,aAAajT,MAAK,SAAAkT,GAAA,MAA8B,gBAAnBA,EAAQ1Y,UACnEtG,KAAK+e,aAAa3gB,SAAQ,SAAA4gB,GACxBtqB,OAAOmc,KAAKmO,EAAQvD,cAAcrd,SAAQ,SAAA0lF,GACxC,wBAAI9kE,EAAQvD,aAAaqoE,KAAzB,aAAyC9kE,EAAQ4iE,kBAAkBkC,KAAah8E,KAAI,SAAAzE,GAElF,GADAA,EAAQM,UAAUmP,SAAlB,WAA2C,EAAC,IAAAwvE,kBAAiBj/E,EAAQM,UAAUmF,oBACxD,gBAAnBkW,EAAQ1Y,QAA4BsB,MAAMC,QAAQxE,EAAQM,UAAUmP,SAAlB,iBAAgD,CACpGzP,EAAQM,UAAUmP,SAAlB,sBAAsD,EAAKmxI,4BAA4B5gJ,GACvFA,EAAQyP,SAAR,sBAA4C,EAAKmxI,4BAA4B5gJ,GAC7E,IAAIoiJ,EAAY,GAChBpiJ,EAAQM,UAAUmP,SAAlB,gBAA8C1U,SAAQ,SAAAsnJ,GACpDhxJ,OAAOmc,KAAP,gBAA0BzS,SAAQ,SAAAkI,GAChC,IAAMsW,EAAe,EAAKmC,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWA,KAC1E,GAAIsW,EAAc,CAChB,IAAMvZ,EAAU,wBAAIuZ,EAAanB,aAAaqoE,KAA9B,aAA8ClnE,EAAaglE,kBAAkBkC,KAAah4E,MAAK,SAAA0+H,GAC7G,OAAO,IAAAloD,kBAAiBkoD,EAAY7mI,UAAUmF,qBAAuB48I,KAEnEriJ,GACFoiJ,EAAU1wJ,KAAKsO,EAAQiD,aAGzBtO,QAAQ4B,IAAI,gDAAiD0M,SAI/DjD,EAAQM,UAAUmP,SAAlB,iBAAiDzP,EAAQM,UAAUmP,SAAlB,gBAA8C3Y,SAAS,EAAAg+B,SAASE,MACnHotH,EAAU1wJ,KAAK,EAAA4kC,aAAaiB,gBAC5Bv3B,EAAQM,UAAUmP,SAAlB,WAA2C,CAAC,EAAAqlB,SAASC,KACrD/0B,EAAQyP,SAAR,WAAiC,CAAC,EAAAqlB,SAASC,MAK7C/0B,EAAQM,UAAUmP,SAAlB,iBAAiD2yI,EACjDpiJ,EAAQyP,SAAR,iBAAuC2yI,EAEzC,GAAuB,mBAAnBzmI,EAAQ1Y,QAA+BsB,MAAMC,QAAQxE,EAAQM,UAAUmP,SAAlB,kBAAkD0yI,EAAkB,CAC3H,IAAIC,EAAY,GAChBpiJ,EAAQM,UAAUmP,SAAlB,gBAA8C1U,SAAQ,SAAAsnJ,GACpD,IAAMna,EAAc,wBAAIia,EAAiB/pI,aAAaqoE,KAAlC,aAAkD0hE,EAAiB5jE,kBAAkBkC,KAAah4E,MAAK,SAAA0+H,GACzH,OAAO,IAAAloD,kBAAiBkoD,EAAY7mI,UAAUmF,qBAAuB48I,KAEvE,GAAIna,EAAa,CACf,IAAMngI,EAAO,EAAK64I,4BAA4B1Y,GACzCka,EAAUtrJ,SAASiR,IACtBq6I,EAAU1wJ,KAAK,EAAKkvJ,4BAA4B1Y,QAItDloI,EAAQM,UAAUmP,SAAlB,sBAAsD2yI,EACtDpiJ,EAAQyP,SAAR,sBAA4C2yI,EAI9C,OAAOpiJ,WAKfrD,KAAK2lJ,4BAA6B,I,2CAI9B,IAAAnwH,oBAAmBx1B,KAAKkb,UAAY,EAAAua,gBAAgBC,IACtD11B,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACpBA,EAAY5mD,qBACd4mD,EAAY9pD,SAAW8pD,EAAY5mD,6B,aAlVpCh+E,GAAK,S,EAELm8I,MAAQ,CACbtqH,SAAU,WACVC,OAAQ,U,kFC9BcpD,EAAbA,WAAa,CACxBC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,GAGuBe,EAArBA,mBAAqB,CAChCC,IAAK,MACLrB,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,WAGwBiB,EAAtBA,oBAAsB,CACjC,UACA,UACA,UACA,UACA,UACA,WAEyCC,EAA9BA,4BAA8B,CACzC,UACA,UACA,UACA,UACA,UACA,WAGsBC,EAAXA,SAAW,CACtBC,IAAK,MACLwtH,WAAY,CAAC,IAAK,KAAM,KAAM,MAC9BC,gBAAiB,UACjBxtH,GAAI,MAGoBijE,EAAbA,WAAa,CACxBC,OAAQ,SACRC,WAAY,cAG0BsqD,EAA3BA,yBAA2B,CAAC,SAAU,SAAU,SAAU,QAE7C5mH,EAAbA,WAAa,GAlDnB,IAoDD6mH,EAAkC,CACtC,gBACA,cACA,aACA,eACA,qBACA,sBACA,oBACA,8BACA,iCACA,6BACA,kBACA,kBACA,aACA,kCACA,qBACA,mBACA,yBACA,8BACA,wBACA,kBACA,mBACA,0CACA,2BACA,2BACA,WACA,sBACA,kBACA,yBACA,qBACA,mBACA,eACA,gBACA,cAGWC,EAAqBA,EAArBA,mBAAqB,WAChC,IAAK7tJ,OAAO2B,SAASsB,MAAyC,iBAAzBjD,OAAO2B,SAASsB,KACnD,OAAO,EAET,IAAMuiJ,EAAYxlJ,OAAO2B,SAASsB,KAAK2C,MAAM,KAAK,GAClD,OAAI5F,OAAO2B,SAASsB,KAAKjB,SAAS,kBACX,sBAAdwjJ,GAAmD,WAAdA,GAAwC,cAAdA,EAEjEA,EAAUxjJ,SAAS,iBAAmBhC,OAAO2B,SAASC,KAAKI,SAAS,+BACtE4rJ,EAAgC9lJ,MAAK,SAAAgP,GACtC,OAAQA,IAAY0uI,GAAcxlJ,OAAO2B,SAASC,KAAKI,SAAS,iBAAmB8U,OAIvDg3I,EAArBA,mBAAqBD,K,4JCtGlC,QAEA,S,IACA,OACA,QACA,QACA,QAIA,Q,IACA,Q,IAEA,S,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEajsD,Q,gBAUX,cAAc,iGACN,GAAM,EAAO,EAAAv2F,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,kBACA,EAAKmY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKqD,aAAe,GACpB,EAAKmlI,eAAiBnqD,EAAOmsD,KAAKpsH,OAElC,EAAKqsH,eAAiB,EAAApsH,eAAeC,MAErC,EAAKqvD,WAAa,KAClB,EAAK+8D,YAAc,KACnB,EAAKC,mBAAqB,KAC1B,EAAKC,yBAA2B,KAGhC,EAAKC,YAAc,KACnB,EAAKC,cAAgB,KAGrB,EAAKC,eAAiB,KACtB,EAAK9+B,UAAY,KACjB,EAAK++B,cAAgB,KACrB,EAAKC,0BAA2B,EAChC,EAAK1sD,WAAa,KAClB,EAAK2sD,iBAAmB,KAExB,EAAKC,YAAc,KACnB,EAAKC,cAAgB,KAErB,EAAK9/C,QAAU,KAEf,EAAK3d,WAAa,IAAI,EAAJ,SAAe,GACjC,EAAKA,WAAW3oF,UAAY,qBAC5B,EAAK2oF,WAAWj+E,KAAO2uF,EAAOmsD,KAAKluH,IACnC,EAAKqxD,WAAWw3B,OAAS,CACvBtnF,uBAAwB,EACxBC,yBAA0B,EAC1BC,yBAA0B,GAE5B,EAAK1a,aAAahqB,KAAK,EAAKs0F,YAE5B,EAAK09D,qBAAsB,EA5Cf,E,qEAgDTpjJ,GAAW,WACVssI,EAAkB,GACpB+W,EAAkB,GAClB9W,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACE7M,EAAU4M,YAAYpW,SAAS,eAClC81I,EAAkB,iBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,QAEhC,MACF,IAAK,cACL,IAAK,qBACHm2G,EAAkB,qBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,qBACHm2G,EAAkB,2BAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACL,IAAK,cACEn2B,EAAU4M,YAAYpW,SAAS,eAClC81I,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,QAEhC,MACF,IAAK,qBACHm2G,EAAkB,mBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,YACHm2G,EAAkB,YAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACHm2G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,iBACHm2G,EAAkB,gBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,eACHi4G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,iBAEDn2B,EAAU4M,YAAYpW,SAAS,kCAC5BwJ,EAAU4M,YAAYpW,SAAS,0BAC/BwJ,EAAU4M,YAAYpW,SAAS,wBAC/BwJ,EAAU4M,YAAYpW,SAAS,oCAElC81I,EAAkB,UAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,KAEhC,MACF,IAAK,gBACHi4G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,kBACHi4G,EAAkB,gBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,eACEh4B,KAAKqpF,aACRrpF,KAAKqpF,WAAa,IAAI,EAAJ,SAAe,GACjCrpF,KAAK+e,aAAahqB,KAAKiL,KAAKqpF,aAE9B4mD,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MAMF,IAAK,cACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAIlC,QAAIm2G,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiB7kI,KAAO47I,EAC7BhnJ,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,4EAODuX,EAAQq1H,GAChB,IAAIv/D,EAAM,GACJjyD,EAAe/e,KAAKwwI,kBAqC1B,OAnCAzxH,EAAa3gB,SAAQ,SAAAwuI,GACnBA,EAAYn+B,UAAUvzF,MAEpBlb,KAAKi6F,aAAej6F,KAAKi6F,WAAW9zE,eACtCnmB,KAAKi6F,WAAWwU,UAAUvzF,GAExBlb,KAAK4mJ,mBAAqB5mJ,KAAK4mJ,iBAAiBzgI,eAClDnmB,KAAK4mJ,iBAAiBn4C,UAAUvzF,GAElC6D,EAAa3gB,SAAQ,SAAAwuI,GAElB2D,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMz/D,GAC3C47D,EAAYzmH,eAAiBymH,EAAYzmH,cAAc0gE,OAAQ+lD,EAAYzmH,cAAc0gE,MAAM4pD,MAAMz/D,IAIpG47D,aAAuBA,EAAvBA,SAAqCA,aAAuBA,EAAvBA,UACrCA,EAAY9lD,oBAAsB8lD,EAAY9lD,mBAAmBryF,QACpEm4I,EAAY9lD,mBAAmB1oF,SAAQ,SAAC2oF,GACtCA,IAAsBA,EAAkBjE,UAAYiE,EAAkBF,OAASE,EAAkBF,MAAM4pD,MAAMz/D,MAG7G47D,aAAuBA,EAAvBA,SAA6CA,EAAY9lD,oBAAsB8lD,EAAYlmD,oBAAsBkmD,EAAY9lD,mBAAmBryF,QAClJm4I,EAAY9lD,mBAAmB1oF,SAAQ,SAAC2oF,GACtCA,IAAsBA,EAAkBjE,UAAYiE,EAAkBF,OAASE,EAAkBF,MAAM4pD,MAAMz/D,MAI7G47D,EAAYzmC,eAAiBymC,EAAYzmC,cAActf,OACzD+lD,EAAYzmC,cAActf,MAAM4pD,MAAMz/D,MAKnCA,EAAIv8E,OAASu8E,EAAM,O,uCAI1B,OAAO,IAAI,EAAJ,QAAyB,SAAUhxE,Q,yCAGzB61C,EAASouC,GAAY,WAEtC,OADkCC,EAA5BA,sOAA6FruC,GAAUouC,GAC5Ej9E,QAAO,SAAAtO,GAAA,OAAK,EAAKwrJ,iBAAmBnqD,EAAOmsD,KAAKrsH,SAAWnhC,EAAE0S,OAAS,EAAA6pH,WAAWp7F,SAAWnhC,EAAE0S,OAAS,EAAA6pH,WAAWp7F,YAChJ/xB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,iCAIpD,OAAOlP,KAAKqpF,YAAerpF,KAAKqpF,WAAW1H,SAAS1hF,MAAK,SAAAgnJ,GAAA,OAAgD,IAA3BA,EAAkB77I,SAC3FpL,KAAKqpF,WAAW1H,SAAS1hF,MAAK,SAAAgnJ,GAAA,OAAgD,IAA3BA,EAAkB77I,QAAe,CACvF2uF,EAAOmsD,KAAKpsH,OACZigE,EAAOmsD,KAAKrsH,UACV,K,2CAIJ,OAAO,I,sCAIP,OAAO75B,KAAKkkJ,iB,yCAGK9uF,EAAS8xF,GAC1BlnJ,KAAKkkJ,eAAiB9uF,EACtBp1D,KAAKqpF,WAAWjD,aACZ8gE,GACFA,EAA0BlnJ,KAAKqpF,WAAW3pE,qBAAqB,M,wCAIjD,WACVX,GAAe,aAAQ/e,KAAK+e,aAAc,iBAChD,OAAI/e,KAAKopF,yBACArqE,EAEFA,EAAa/X,QAAO,SAAC4lI,GAC1B,OAAOA,EAAYxhI,OAAS,EAAK84I,gBAAkBtX,EAAYxhI,OAAS2uF,EAAOmsD,KAAKluH,S,iCAKtF,IACMmvH,EAA4D,SADxCnnJ,KAAKonJ,uBACYC,mBAC3C,OAAOrnJ,KAAKwwI,kBACTxpI,QAAO,SAAAiqE,GAIN,OAHIA,EAAKq2E,iBACPr2E,EAAK1gD,QAAU42H,GAEVl2E,EAAK1gD,WAEbzoB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,iCA0BxCgM,IACY,aAAQlb,KAAK+e,aAAc,iBACnC3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,Q,wDAIvC,OAAOlb,KAAKyc,WAAW,K,iFAWvB,IAAKzc,KAAKqpF,aAAerpF,KAAKqpF,WAAWljE,cACvC,OAAO,KAET,IAAIohI,EAAmBvnJ,KAAKqpF,WAAWljE,cAAcrT,SAA9B,WAWvB,OAVKy0I,GAAqBA,EAAiB9yJ,OAMR,MAAxB8yJ,EAAiB,KAC1BA,EAAiB,GAAKvnJ,KAAKqpF,WAAWljE,cAActK,SAAS1hB,SAAS,QAAU,OAAS,QANrF6F,KAAKqpF,WAAWljE,cAActK,SAAS1hB,SAAS,YAClDotJ,EAAmB,CAAC,QAEpBvvJ,QAAQwvJ,KAAK,mBAMVD,EAAiB,K,yCAOxB,OAAKvnJ,KAAKqpF,WAEHrpF,KAAKqpF,WAAWljE,cAAgBnmB,KAAKqpF,WAAWljE,cAAckhI,iBAAmB,KAD/E,S,mCAMT,OAAKrnJ,KAAKqpF,aAECrpF,KAAKopF,2BAGPppF,KAAKqpF,WAAWljE,eAAiBnmB,KAAKqpF,WAAWljE,cAAcshI,iBAAmB1tD,EAAOmsD,KAAKpsH,U,+CAKvG,IAAM4tH,EAAY1nJ,KAAKkb,OAAOsD,MAAM,EAAAixH,eAAeznI,IACnD,OAAO0/I,GAAaA,EAAUt+D,yB,6CAI9B,OAAOppF,KAAKopF,yBAA2BppF,KAAKkb,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAMhI,S,aA3WzEgI,GAAK,S,EAELk+I,KAAO,CACZpsH,OAAQ,SACRD,SAAU,WACV8tH,MAAO,QACP3vH,IAAK,O,kFCpCT,I,EAAA,OACA,O,oCACA,OAEA,QACA,QAEA,IAAM4vH,EAAc,SAACt8C,GAAU,IACtBjoG,EAA6EioG,EAA7EjoG,QAASoX,EAAoE6wF,EAApE7wF,KAAMtC,EAA8DmzF,EAA9DnzF,eAAgB0vI,EAA8Cv8C,EAA9Cu8C,UAAW7xI,EAAmCs1F,EAAnCt1F,aAAcoC,EAAqBkzF,EAArBlzF,kBAC3D0vI,GAAoB,IAAA7vI,sBAAqB5U,EAASoX,EAAK1C,SAAU0C,EAAKvC,OAAQC,EAAgBnC,EAAcoC,GAChH,OAAOxY,SAASioJ,KAAeA,GAAY,IAAA5tE,UAAS6tE,EAAmBD,GAAaC,GAGtFF,EAAY1F,UAAY,CACtB2F,UAAW,UAAUjvC,OACrBv1G,QAAS,UAAU1L,OAAOshH,WAC1B7gG,kBAAmB,UAAUgqI,M,WAahB,IAAA2F,aACb,IAAAj8C,UAXsB,SAACxzG,GAAU,IAC1B0d,EAAgB1d,EAAMyc,YAAtBiB,aACP,MAAO,CACLmC,eAAgB7f,EAAMqN,gBACtBqQ,kBAIuB,GAGzB,CAA6C4xI,K,8HC9B/C,I,EAAA,O,oCACA,QAEO,IAAM1gJ,EAAqBA,EAArBA,mBAAqB,CAChCC,KAAM,OACNoqG,KAAM,QAGyBy2C,EAApBA,kBAAoB,CAC/BhgJ,GAAI,UAAUw6B,OACd0oB,QAAS,UAAUk3F,KACnB6F,gBAAiB,UAAU7F,KAC3B8F,qBAAsB,UAAU9F,KAChCnkI,eAAgB,UAAUukB,OAC1Bl8B,OAAQ,UAAUk8B,OAAOy2E,WACzBzwG,aAAc,UAAUowG,OACxBvyG,YAAa,UAAUuzC,MAAV,oBACbzwC,SAAU,UAAUg5I,UAAU,CAAC,UAAUvpC,OAAQ,UAAUp2E,SAC3DznB,oBAAqB,UAAUonI,UAAU,CAAC,UAAUvpC,OAAQ,UAAUp2E,SACtE02B,OAAQ,UAAUipF,UAAU,CAAC,UAAUvpC,OAAQ,UAAUp2E,SACzD7nB,KAAM,UAAU6nB,OAChB6sB,UAAW,UAAU7sB,OACrBwxD,qBAAsB,UAAUp6C,MAAV,oBACtB3yC,QAAS,UAAUs7I,MAAM,CAACr7I,EAAmBqqG,KAAMrqG,EAAmBC,OACtEC,UAAW,UAAUg7I,KACrB+F,iBAAkB,UAAU/F,KAC5BgG,aAAc,UAAU5lH,OACxB6lH,aAAc,UAAU7lH,OACxBq2E,aAAc,UAAUD,OACxBtuF,aAAc,UAAUsuF,OACxBpuF,eAAgB,UAAUouF,OAC1BloG,kBAAmB,UAAU8xB,OAC7B1W,wBAAyB,UAAUs2H,KACnCt0I,mBAAoB,UAAU00B,OAC9Bp5B,eAAgB,UAAUo5B,OAC1B9W,eAAgB,UAAU8W,S,4JCnC5B,cACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UAEa8lH,EAAoBA,EAApBA,kBAAoB,CAC/BC,sBAAuB,CACrB,qBACA,YAIEC,EAAuB,CAC3BvrG,MAAO,IAAI,EAAJ,gBACP7L,OAAQ,IAAI,EAAJ,kBACR4L,QAAS,IAAI,EAAJ,kBACTE,YAAa,IAAI,EAAJ,sBACbN,UAAW,IAAI,EAAJ,oBACXO,gBAAiB,IAAI,EAAJ,0BACjBC,mBAAoB,IAAI,EAAJ,6BACpBC,eAAgB,IAAI,EAAJ,yBAChBC,SAAU,IAAI,EAAJ,oBAG4BmrG,EAA3BA,yBAA2B,WACtC,IAAMC,EAAa,GAQnB,OAPAJ,EAAkBC,sBAAsBnqJ,SAAQ,SAAAuqJ,GAC9C,IAAMC,EAAaJ,EAAqBG,GACpCC,GAA+C,mBAA1BA,EAAWF,aAClCA,EAAWC,GAAkBC,EAAWF,iBAIrCA,GAG4B34F,EAAxBA,sBAAwB,SAAC97D,GAChCA,GACFS,OAAOmc,KAAK5c,GAAMmK,SAAQ,SAAAuqJ,GACxB,IAAMC,EAAaJ,EAAqBG,GACpCC,GAA+C,mBAA1BA,EAAWz6F,YAClCy6F,EAAWz6F,WAAWl6D,EAAK00J,Q,UAMpBH,G,qiBCpDf,QACA,QACA,QACA,Q,IACA,MACA,QACA,QACA,QACA,QACA,Q,mDAEO,IAsDM,EAiEA,EAmGA,EA0EA,EAmIA,EAvaAK,EAA0BA,EAA1BA,wBAA0B,CAAC,SAAU,QAAS,QAAS,QAAS,QAAS,UAqCzEC,GAnCoBC,EAApBA,kBAAoB,SAACzxI,GAQhC,IAAM0xI,EAAW,CACf53E,cAAeh4E,SAASC,SAASmC,QAUnC,OARAqtJ,EAAwBzqJ,SAAQ,SAAAxG,GAC9BoxJ,EAASpxJ,GAAY0f,EAAaxgB,IAAIc,GACrB,WAAbA,GAAsC,UAAbA,EACvB0f,EAAaxgB,IAAIc,GAAUmG,MAAM,YAAY,GAAGY,QAAQ,KAAM,KAC9D2Y,EAAaxgB,IAAIc,GAAU+G,QAAQ,KAAM,KAC3C,MAEN3G,QAAQ4B,IAAI,mBAAoBovJ,GACzB,UAAQD,kBAAkBC,GAC9Bn3H,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GACLD,QAAQ4B,IAAI,kCAAkC,IAAI81H,MAAMz3H,QAIvBgxJ,EAA1BA,wBAA0B,SAACC,GAEtC,OAAO,UAAQD,yBAAyB7vJ,SAASC,SAASmC,OAAQ0tJ,GAC/Dr3H,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GACLD,QAAQ4B,IAAI,wCAAwC,IAAI81H,MAAMz3H,QAIpC6wJ,EAAnBA,iBAAmB,SAACK,GAAwC,IAA9BnhJ,EAA8B,uDAAzB,GAAIohJ,EAAqB,uDAAT,GAC9D,OAAO,UAAQN,iBAAiBK,EAAUnhJ,EAAIohJ,GAC3Cv3H,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GACLD,QAAQ4B,IAAI,iCAAiC,IAAI81H,MAAMz3H,SAuEhDoxJ,GAnEkBC,EAAlBA,gBAAkB,WAAa,IAAZthJ,EAAY,uDAAP,GACnC,OAAO,UAAQshJ,gBAAgBthJ,GAC5B6pB,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GAELD,QAAQ4B,IAAI,gCAAgC,IAAI81H,MAAMz3H,QAIrBsxJ,EAA1BA,yBAAA,gCAA0B,uBAAOC,EAAP,uDAAsB,GAAIC,EAA1B,uDAA2C,GAA3C,wFACT,IAAAjgC,uBAAqB,GADZ,cAC/B+C,EAD+B,QAGvBvC,QAAQ,GAAG/1H,KAAzB,aAAgDu1J,EAChDxxJ,QAAQ4B,IAAI,6CAA8C6vJ,EAAgBl9B,GACpEm9B,EAAsBv1C,KAAK2W,UAAUyB,GALN,SAMVu8B,EAAiBY,EAAqBD,GAN5B,UAMjCE,EANiC,yCAQZb,EAAiBY,EAAqBD,GAR1B,QAQnCE,EARmC,wCAU9BA,GAV8B,mDAA1B,4CAacC,EAAdA,YAAc,SAACx1B,GAC1B,OAAO,UAAQw1B,YAAYx1B,GACxBviG,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GAAA,OAASD,QAAQ4B,IAAI,4BAA4B,IAAI81H,MAAMz3H,QAGrC4xJ,EAApBA,kBAAoB,SAACC,GAChC,OAAO,UAAQD,kBAAmB,CAChC,SAAY,GACZ,UAAaC,EAAcC,UAAY,IAAIhsJ,MAAM,KAAK,GACtD,KAAS+rJ,EAAcE,KACvB,MAAUF,EAAcG,YAAcH,EAAc/iJ,MAAM1O,MAAM,EAAG,GACnE,MAAUyxJ,EAAc5nH,QAAU,IAAInkC,MAAM,KAAK,IAAM,KACvD,MAAU+rJ,EAAc5nH,QAAU,IAAInkC,MAAM,KAAK,IAAM,OAEtD8zB,MAAK,SAAAswE,GACJ,OAAIA,EAASluG,KAAKgE,MACT,CACLiyJ,iBAAkB/nD,EAASluG,KAAKgE,OAG7BkqG,EAASluG,QAEjBo+B,OAAM,SAAAp6B,GACL,OAAIA,GAASA,EAAMkqG,UAAYlqG,EAAMkqG,SAASluG,MAAQgE,EAAMkqG,SAASluG,KAAKgE,MACjE,CACLiyJ,iBAAkBjyJ,EAAMkqG,SAASluG,KAAKgE,OAGnC,CACLiyJ,iBAAkBjyJ,GAASA,EAAM89C,QAAU99C,EAAM89C,QAAU,8BAA8B,IAAI25E,MAAMz3H,QAKlEkyJ,EAA5BA,0BAA4B,SAACC,EAASC,GACjD,OAAO,UAAQF,0BAA0BC,EAASC,GAC/Cx4H,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GAAA,OAASD,QAAQ4B,IAAI,4BAA4B,IAAI81H,MAAMz3H,QAE5BqyJ,EAA7BA,2BAA6B,SAACl2B,EAAUi2B,GACnD,OAAO,UAAQC,2BAA2Bl2B,EAAUi2B,GACjDx4H,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GAAA,OAASD,QAAQ4B,IAAI,4BAA4B,IAAI81H,MAAMz3H,QAElCoxJ,EAAvBA,qBAAuB,WAAoB,IAAnBkB,EAAmB,uDAAP,GAE/C,OAAO,UAAQlB,qBAAqBkB,GACjC14H,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GAAA,OAASD,QAAQ4B,IAAI,qCAAqC,IAAI81H,MAAMz3H,SAwEzEuyJ,GArE8BC,EAAvBA,sBAAA,gCAAuB,WAAOC,GAAP,cAAwBnoJ,EAAxB,uDAAoC,GAApC,8EAC3B0nJ,EAAmCS,EAAnCT,WAAYljJ,EAAuB2jJ,EAAvB3jJ,MAAOijJ,EAAgBU,EAAhBV,KAAM9nH,EAAUwoH,EAAVxoH,OAC1BkyF,EAAW,CACfu2B,YAAa,CACX,QAAW,KACX,OAAUV,GAAcljJ,EAAM1O,MAAM,EAAG,GACvC,KAAQ2xJ,EACR,QAAW9nH,GAEb9hB,MAAO7d,EAAUuF,KAAI,SAAA1B,GAAA,MAAa,CAChC,OAAUA,EAASC,YAAY1C,UAAUqE,GACzC,IAAO5B,EAASC,YAAY1C,UAAU2+B,IACtC,YAAc,IAAAv2B,gBAAe3F,EAASC,YAAa,EAAGD,EAASgD,gBAC/D,SAAYhD,EAAS+C,cAbS,kBAiB3B,UAAQyhJ,sBAAsBx2B,GAClCviG,MAAK,SAAAswE,GACJnqG,QAAQ4B,IAAI,iCAAkCuoG,GAAYA,EAASluG,KAAOkuG,EAASluG,KAAOkuG,GAC1F,IAAI0oD,EAAmB,GACvB,OAAK1oD,EAASluG,MAAS2T,MAAMC,QAAQnT,OAAOmc,KAAKsxF,EAASluG,OAG1D42J,EAAmBn2J,OAAOmc,KAAKsxF,EAASluG,MAAM6T,KAAI,SAAAmP,GAChD,OAAKrP,MAAMC,QAAQs6F,EAASluG,KAAKgjB,KAAkBkrF,EAASluG,KAAKgjB,GAAaxiB,OAavE,CAACwiB,aAAcA,EAAa6zI,QAVnB3oD,EAASluG,KAAKgjB,GAAao7C,SAAQ,SAAA04F,GACjD,OAAOA,EAAQC,cAAcljJ,KAAI,SAAAmjJ,GAC/B,MAAO,CACLvoJ,KAAMuoJ,EAAaC,aACnBh1G,MAAO+0G,EAAa/0G,MACpB5zC,SAAU2oJ,EAAa3oJ,UAAY,IACnC6+F,KAAM8pD,EAAa9pD,aARhB,CAAClqF,aAAcA,EAAa6zI,QAAS,OAJvCD,KAoBVx4H,OAAM,SAAAp6B,GAAA,OAASD,QAAQ4B,IAAI,qCAAqC,IAAI81H,MAAMz3H,QA1C3C,kDAAvB,6CAkDiCskE,EAAjCA,+BAAiC,WAAwB,IAAvB6qC,EAAuB,uDAAP,GACvDmjD,EAAYnjD,EAAct/F,KAAI,SAAAzE,GAAA,OAAWA,EAAQM,UAAU2+B,OACjE,OAAO+mH,EAAqBkB,GACzB14H,MAAK,SAAA2lE,GAEAA,GAAgBA,EAAa2zD,SAAW3zD,EAAa4zD,WACvD12J,OAAOmc,KAAK2mF,EAAa4zD,WAAWhtJ,SAAQ,SAAAkkC,GAC1C,IAAM+oH,EAAkBjkD,EAAct7F,MAAK,SAAAzI,GAAA,OAAWA,EAAQM,UAAU2+B,MAAQA,KAC5E+oH,IACGA,EAAgB/uF,kBACnB+uF,EAAgB/uF,gBAAkB,IAEpC+uF,EAAgB/uF,gBAAgBm3B,WAAa+D,EAAa4zD,UAAU9oH,GAAK8oH,kBAOjD,CAAC,gBAAiB,cAAe,cAAe,aAAc,QAChG,kBAAmB,mBAAoB,mBAAoB,iBAAkB,gBAOzEE,EAAoBA,GAApBA,uCAAuC,aAAc,gBAAiB,OAAQ,qBAAsB,kBAC7FC,EAAsBA,EAAtBA,oBAAsB,SAAC3uI,GAClC,IAAIg1G,EAAW,IACf,GAAyC,YAArCx4H,SAASC,SAASoC,gBAAgC6vJ,EAAkBnxJ,SAASyiB,EAAatW,QAC5FsrH,EAAW,SACN,GAAI,EAAAl1B,iBAAiBviG,SAASyiB,EAAatW,QAAS,KAClDunI,EAAmB,UAAM1rI,WAAzB0rI,iBACkC,YAArCz0I,SAASC,SAASoC,gBAAgCoyI,EAAgBW,wBAAwBlgF,eAC5FsjE,EAAW,UAGyB,WAArCx4H,SAASC,SAASoC,gBAA+B+uJ,EAA4BrwJ,SAASyiB,EAAatW,SAC3D,YAArClN,SAASC,SAASoC,iBAAyD,gBAAxBmhB,EAAatW,QAAoD,yBAAxBsW,EAAatW,WAE7GsrH,EAAW,KAKb,OAHIh1G,EAAaw1E,qBAAoC,MAAbw/B,IACtCA,EAAW,KAENA,GAGIv/B,EAAgCA,EAAhCA,+BAAA,gCAAgC,WAAOz1E,GAAP,8BAAqB4uI,EAArB,mIACvC5uI,EAAa6uI,kBAAmB7uI,EAAaokG,kBADN,uBAErCpkG,EAAa6uI,kBACf7uI,EAAaw1E,qBAAsB,GAHI,mBAKlC,GALkC,UAQ3Cx1E,EAAaokG,mBAAoB,EAE3B4Q,EAAW25B,EAAoB3uI,GAC/B1B,EAAS0B,EAAalc,WACxBkc,EAAalc,YAAYwa,SACzB,IAAAC,oBACE+sE,EAAahtE,EAAOqmE,+BACpBmqE,EAAmB9uI,EAAa+uI,kBAAkBzjE,IAEpDtrE,EAAayqE,qBAjB0B,sBAkBnCqlD,EAAaxxH,EAAOsD,MAAP,SACekuH,EAAW3tH,aAAa9e,MAAK,SAAA+e,GAAA,OAAWA,EAAQ1Y,SAAWsW,EAAatW,UAnBjE,mCAqBZ,IAAAqrH,qBAAoB/0G,EAAahB,QAAUgB,EAAaf,UAAY,QAAS6vI,EAA6B,EAAX95B,GArBnF,QAqBjCmb,EArBiC,OAsBnCnlI,MAAMC,QAAQklI,IAChBnwH,EAAaowH,iBAAiBD,EAAyB,EAAXnb,GAAc,EAAO1pC,EAAYwjE,GAAkB,GAAQF,GAvBlE,0BA4BpB,IAAA75B,oBAAmB/0G,EAAahB,QAAUgB,EAAaf,SAAU6vI,EAAkB95B,GA5B/D,WA4BrCzvB,EA5BqC,OA8BvCypD,EAAgBhkJ,MAAMC,QAAQs6F,GAAYA,EAAW,GACrD0pD,EAAc,IACd3wI,EAAO4Z,cAAelY,EAAagf,6BAAgChf,EAAaw1E,qBAAwB,EAAD,oBACrG,EAAAuK,cAAcxiG,SAASyiB,EAAatW,SAAW,EAAAo2F,iBAAiBviG,SAASyiB,EAAatW,SACrF,EAAA60B,0BAA0BhhC,SAASyiB,EAAatW,SAlCZ,sBAmCJ,UAAMnE,WAAWwO,YAA/CwpF,EAnCkC,EAmClCA,WAAYhwE,EAnCsB,EAmCtBA,gBACd,IAAA8vF,uBAAsB9f,EAAYhwE,GApCE,mCAqCD,IAAAwnG,oBAAmB/0G,EAAahB,QAAUgB,EAAaf,SAAU6vI,EAAkB,IAAO,GAAI,GAAI,GAAI,MAAM,GArC3G,QAqCjCI,EArCiC,OAsCnClkJ,MAAMC,QAAQikJ,KAChBD,EAAcC,GAvCuB,eA4C3ClvI,EAAaowH,iBAAiB4e,EAAeh6B,GAAU,EAAM1pC,EAAYwjE,GAAkB,GAAQF,GAE/FK,EAAYp3J,QACdmoB,EAAaowH,iBAAiB6e,EAAaj6B,GAAU,EAAO1pC,EAAYwjE,GAAkB,GAAM,GAElG9uI,EAAaokG,mBAAoB,EAjDU,kBAyDpC4qC,GAzDoC,mDAAhC,6CA4DPG,EAAuB,SAAChlD,EAAailD,GAMzC,OALAjlD,EAAYhoF,aAAa3gB,SAAQ,SAAA4gB,GAC1BA,EAAQozE,qBAAwB45D,EAAY/rJ,MAAK,SAAA2c,GAAA,OAAgBA,EAAatW,SAAW0Y,EAAQ1Y,WACpG0lJ,EAAYj3J,KAAKiqB,MAGdgtI,GAQkCr5D,EAA9BA,6BAAA,gCAA8B,WAAO/1E,GAAP,kDAAqBqvI,IAArB,mIACnC/wI,EAAS0B,EAAalc,WACxBkc,EAAalc,YAAYwa,SACzB,IAAAC,oBACE+sE,EAAahtE,EAAOqmE,+BACtByqE,EAAc,GACdE,EAAqB,OACpBtvI,EAAaw1E,qBACZx1E,EAAagf,8BAAgChf,EAAagf,4BAA4BssD,GAAYpsD,OACtGkwH,EAAYj3J,KAAK6nB,GAGb2xF,EAAerzF,EAAOsD,MAAP,OACf0zE,EAAgBh3E,EAAOsD,MAAP,QAGhB2tI,EAAgB59C,GAAgBA,EAAaxvF,aAAa9e,MAAK,SAAA+e,GAAA,OAAWA,EAAQ1Y,SAAWsW,EAAatW,UAC1G8lJ,EAAiBl6D,IACjBA,EAAcnzE,aAAa9e,MAAK,SAAA+e,GAAA,OAAWA,EAAQ1Y,SAAWsW,EAAatW,WAClD,WAAxBsW,EAAatW,QACW,eAAxBsW,EAAatW,QACW,0BAAxBsW,EAAatW,QACW,aAAxBsW,EAAatW,QACW,UAAxBsW,EAAatW,QACW,SAAxBsW,EAAatW,QACd+lJ,EAAe,EAAA3vD,iBAAiBz8F,MAAK,SAAAqG,GAAA,OAAUA,IAAWsW,EAAatW,UACvE4qE,EAAS,EAAA0rB,WAAW38F,MAAK,SAAAqG,GAAA,OAAUA,IAAWsW,EAAatW,UAC3D8pG,GAAU,IAAAh0G,2BACVkwJ,EAA6B,YAAZl8C,IAA0BxzF,EAAatW,OAAOnM,SAAS,WAAayiB,EAAatW,OAAOnM,SAAS,SAClHoyJ,EAAgC,aAAZn8C,IAA2BxzF,EAAatW,OAAOnM,SAAS,eAAiByiB,EAAatW,OAAOnM,SAAS,gBAC1HqyJ,EAAgC,aAAZp8C,IAA2BxzF,EAAatW,OAAOnM,SAAS,gBAAkByiB,EAAatW,OAAOnM,SAAS,sBAI7HgyJ,EAlCqC,iBAmCvCH,EAAcD,EAAqBx9C,EAAcy9C,IAC7C,IAAAx2H,wBAAyB,EAAAC,gBAAgBC,KACrCg3G,EAAaxxH,EAAOsD,MAAP,MACbiuI,EAAmBvxI,EAAOsD,MAAP,WACrBkuH,GACF,CAAC,YAAa,YAAa,YAAYtuI,SAAQ,SAAAsuJ,GACzChgB,EAAWggB,KAAYhgB,EAAWggB,GAAQt6D,qBAC5C45D,EAAYj3J,KAAK23I,EAAWggB,OAI9BD,GAAoBA,EAAiBE,kBAAoBF,EAAiBE,gBAAgBv6D,qBAC5F45D,EAAYj3J,KAAK03J,EAAiBE,kBA/CC,4BAkD9BP,EAlD8B,iBAmDvCJ,EAAcD,EAAqB75D,EAAe85D,GACtB,0BAAxBpvI,EAAatW,SACTsmJ,EAAsB1xI,EAAOgb,wBAAwB,2BAEzD81H,EAAYj3J,KAAK63J,GAvDkB,4BA0D9BP,EA1D8B,iBA2DjCl7G,EAAaj2B,EAAOsD,MAAP,WAA6BtD,EAAOsD,MAAP,WAA2B2yB,WAAa,KAClFmD,EAAap5B,EAAOsD,MAAP,MAAwBtD,EAAOsD,MAAP,MAAsB81B,WAAa,KACxEu4G,EAAmB3xI,EAAOsD,MAAP,aAA+BtD,EAAOsD,MAAP,aAA6B2yB,WAAa,KAC5F27G,EAAc5xI,EAAOsD,MAAP,WAA6BtD,EAAOsD,MAAP,WAA2BsuI,aAAe5xI,EAAOsD,MAAP,WAA2BgyB,KAAO,KAC7H,CAACW,EAAYmD,EAAYu4G,EAAkBC,GAAa1uJ,SAAQ,SAAA4gB,GAC1DA,GAAYA,EAAQ1Y,SAAWsW,EAAatW,SAAY0Y,EAAQozE,qBAClE45D,EAAYj3J,KAAKiqB,MAGO,6BAAxBpC,EAAatW,QAAyC4U,EAAOsD,MAAP,cAAgCtD,EAAOsD,MAAP,aAA6B44B,MACrH40G,EAAYj3J,KAAKmmB,EAAOsD,MAAP,aAA6B44B,MArET,4BAuE9Bk1G,EAvE8B,iBAwEjC/yJ,EAASqjB,EAAalc,YAxEW,KAyE/Bkc,EAAatW,OAzEkB,OA0EhC,yBA1EgC,MA2EhC,WA3EgC,QA8EhC,uBA9EgC,MA+EhC,SA/EgC,gCA4EnC4lJ,EAAqB3yJ,EAAO69C,KA5EO,oCAgFnC80G,EAAqB3yJ,EAAOkvH,OAhFO,iEAqFV,uBAAxB7rG,EAAatW,QAAoC/M,EAAO43C,YAC3D66G,EAAYj3J,KAAKwE,EAAO43C,YAtFa,wBAwF9Bq7G,EACTN,EAAqBtvI,EAAatW,OAAOnM,SAAS,eAC9CyiB,EAAalc,YAAY+lJ,eACzB7pI,EAAalc,YAAYu5F,WACpBsyD,EACTL,EAAqBtvI,EAAatW,OAAOnM,SAAS,cAC9CyiB,EAAalc,YAAYwrI,WACzBtvH,EAAalc,YAAYqsJ,UACpB77E,EACTg7E,EAAqBtvI,EAAalc,YAAYywC,WACb,UAAxBv0B,EAAatW,QAA8C,UAAxBsW,EAAatW,SACrDsW,EAAalc,YAAY8wC,MAC3Bw6G,EAAYj3J,KAAK6nB,EAAalc,YAAY8wC,MAExC50B,EAAalc,YAAY62C,MAC3By0G,EAAYj3J,KAAK6nB,EAAalc,YAAY62C,MAExC26C,GAAiBA,EAAcK,eACjCy5D,EAAYj3J,KAAKm9F,EAAcK,eAE7BL,GAAiBA,EAAcM,cACjCw5D,EAAYj3J,KAAKm9F,EAAcM,eA7GM,eAgHrC05D,IAAuBA,EAAmB95D,qBAC5C45D,EAAYj3J,KAAKm3J,GAjHsB,UAmHjB91J,QAAQ64I,IAAR,wBACnB+c,EAAYlkJ,IAAZ,+CAAgB,WAAM8kI,GAAN,uFAA2Bv6C,EAA8Bu6C,GAAa,GAAtE,0FAAhB,0DApHoC,eAmHnCogB,EAnHmC,OAuHrCb,GACFjxI,EAAO+Z,6BAGLg3H,GAEF,UAAMhoI,UAAS,IAAAo7C,0BA7HwB,kBAgIlC2tF,GAhIkC,mDAA9B,6CAmIgCC,EAAhCA,+BAAA,gCAAgC,WAAOx3C,EAAYD,GAAnB,gGACvC03B,OADuC,EAErCggB,EAAsE,WAArC9zJ,SAASC,SAASoC,eAFd,UAGpB,IAAA6lH,eAAc,KAAM,CAAC7L,GAAay3C,GAHd,YAGrC/qD,EAHqC,4BAKrCq/C,EAAiBr/C,EAASluG,MAAQ,IAChCinB,GAAS,IAAAC,qBACRqmG,gBAAgBggC,GACjB2L,EAAqB33C,EAAsBA,EAAoB72G,QAAQ,MAAO,KAAO,GAC3FuuI,EAAehyH,EAAOkyI,gBAAgB33C,EAAY03C,GAAoB,EAAOD,GACxE1L,EAAe/sJ,QAAWy4I,EAVU,mCAWf,IAAA5rB,eAAc,KAAM,CAAC7L,IAAcy3C,GAXpB,SAWjCG,EAXiC,SAYtBzlJ,MAAMC,QAAQwlJ,EAAUp5J,OAASo5J,EAAUp5J,KAAKQ,SAC/DymB,EAAOsmG,gBAAiB6rC,EAAUp5J,MAClCi5I,EAAehyH,EAAOkyI,gBAAgB33C,EAAY03C,GAAoB,GAAQD,IAdzC,iCAkBpChgB,GAlBoC,mDAAhC,gD,uVClbb,IAAY1sH,E,wJAAZ,OAEgC8sI,EAAnBA,iBAAmB,SAACztI,GAAD,MAAoB,CAClDzU,KAAMoV,EAAM2/C,mBACZt/C,QAAS,CAAEhB,mBAGyB0tI,EAAzBA,uBAAyB,SAACC,GAAD,MAA0B,CAC9DpiJ,KAAMoV,EAAM4/C,0BACZv/C,QAAS,CAAE2sI,yBAGuBC,EAAvBA,qBAAuB,SAACC,GAAD,IAAiBC,EAAjB,uDAA4C,KAA5C,MAAsD,CACxFviJ,KAAMoV,EAAM6/C,uBACZx/C,QAAS,CAAE6sI,iBAAgBC,8BAGaC,EAA7BA,2BAA6B,SAACC,GAAD,MAA8B,CACtEziJ,KAAMoV,EAAM8/C,+BACZz/C,QAAS,CAAEgtI,6BAG2BC,EAA3BA,yBAA2B,SAACC,GAAD,MAAe,CACrD3iJ,KAAMoV,EAAM+/C,6BACZ1/C,QAAS,CAAEktI,cAGgCC,EAAhCA,8BAAgC,SAACC,GAAD,MAAoB,CAC/D7iJ,KAAMoV,EAAMggD,mCACZ3/C,QAAS,CAAEotI,mBAG0BC,EAA1BA,wBAA0B,SAACC,GAAD,MAA4B,CACjE/iJ,KAAMoV,EAAMigD,2BACZ5/C,QAAS,CAAEstI,2BAGiCC,EAAjCA,+BAAiC,SAACC,GAAD,MAA+B,CAC3EjjJ,KAAMoV,EAAMkgD,mCACZ7/C,QAAS,CAAEwtI,8BAGcC,EAAdA,YAAc,SAACC,GAAD,MAAe,CACxCnjJ,KAAMoV,EAAMmgD,cACZ9/C,QAAS,CAAE0tI,cAE0BC,EAA1BA,wBAA0B,SAACC,GAAD,MAA2B,CAChErjJ,KAAMoV,EAAMogD,gCACZ//C,QAAS,CAAE4tI,2B,8IChDb,S,IACA,OACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEa5jB,Q,gBAQX,cAAc,iGACN,GAAM,EAAO,EAAArnI,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKhY,cAAL,kBACA,EAAKwgJ,eAAiBrZ,EAAOsZ,MAAMrqH,OACnC,EAAK/a,aAAe,GACpB,EAAKwxH,oBAAqB,EAG1B,EAAKme,aAAe,KACpB,EAAKrK,eAAiB,KACtB,EAAKlzG,WAAa,KAClB,EAAKiG,KAAO,KACZ,EAAKqxE,OAAS,KACd,EAAK67B,iBAAmB,KACxB,EAAKC,aAAe,KACpB,EAAK/1C,OAAS,KACd,EAAKmgD,gBAAkB,KApBX,E,qEAuBThrJ,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,OACHy/H,EAAkB,OAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YACA,MACF,IAAK,mBACHD,EAAkB,kBAClBC,YACA,MACF,IAAK,aACHD,EAAkB,aAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YACA,MACF,IAAK,mBACL,IAAK,aACL,IAAK,aACHD,EAAkB,mBAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,SACH,IAAMmU,EAAiB1gJ,EAAUmP,UAAYnP,EAAUmP,SAAV,QACxCnP,EAAUmP,SAAV,OAA6B3Y,SAAS,YAE3C81I,EAAkBoU,EAAiB,iBAAmB,eACtDnU,EAAmBmU,EAAiBA,EAAjBA,kBAIvB,GAAIpU,EAAiB,CACnB,IAAKjwI,KAAKiwI,GAER,GADAjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,SAApBD,EAA4B,CAC9B,IAAMkV,EAAcnlJ,KAAK+e,aAAapC,WAAU,SAAAqC,GAAA,MAAgC,WAArBA,EAAQnD,YACnEspI,EAAcnlJ,KAAK+e,aAAappB,OAAOwvJ,EAAa,EAAGnlJ,KAAKo3C,MAAQp3C,KAAK+e,aAAahqB,KAAKiL,KAAKo3C,UACnE,mBAApB64F,EACTjwI,KAAK+e,aAAao3C,QAAQn2D,KAAKqkJ,gBACF,iBAApBpU,EACTjwI,KAAK+e,aAAao3C,QAAQn2D,KAAK0uJ,cAE/B1uJ,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,IAQhC,OALKjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,EAET,OAAO,I,gCAGCuX,EAAQq1H,GAChB,IAAIv/D,EAAM,GAYV,OAXAhxE,KAAKuwI,oBAAqB,EAC1BvwI,KAAKwwI,kBAAkBpyI,SAAQ,SAAAwuI,GAC7BA,EAAYn+B,UAAUvzF,GACrBq1H,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMz/D,GAC3C47D,EAAYzmH,eAAiBymH,EAAYzmH,cAAc0gE,OAAS+lD,EAAYzmH,cAAc0gE,MAAM9nF,IAC9F6tI,EAAYzmH,cAAc0gE,MAAM4pD,MAAMz/D,GACtC47D,EAAY5lD,oBAAsB4lD,EAAY5lD,mBAAmBH,OAAS+lD,EAAY5lD,mBAAmBH,MAAM9nF,KAC7G6tI,EAAY5lD,mBAAmBH,MAAM4pD,MAAMz/D,MAG9CA,EAAIv8E,OAASu8E,EAAM,O,wCAGV,WAChB,OAAOhxE,KAAK+e,aAAa/X,QAAO,SAAAiqE,GAAA,OAAQA,EAAK1gD,QAAQp2B,SAAS,EAAK+pJ,qB,uCAInE,OAAO,IAAI,EAAJ,QAAyB,SAAUlkJ,Q,iCAI1C,OAAOA,KAAK0uJ,cAAgB1uJ,KAAKqkJ,eAAiB,CAACxZ,EAAOsZ,MAAMrqH,OAAQ+wG,EAAOsZ,MAAMtqH,UAAY,K,2CAIjG,OAAO75B,KAAKkkJ,iBAAmBrZ,EAAOsZ,MAAMtqH,W,sCAI5C,OAAO75B,KAAKkkJ,iB,iCAIZ,IAAMnlI,EAAe/e,KAAKwwI,kBACpBl0B,EAAW,GACX8oC,EAAarmI,EAAajT,MAAK,SAAA6T,GAAA,MAA8B,mBAAnBA,EAAQrZ,UAMxD,OALI8+I,GAAcA,EAAWj/H,eACxBi/H,EAAWj/H,cAAcrT,SAAzB,cACAsyI,EAAWj/H,cAAcrT,SAAzB,aAAkD3Y,SAAS,SAC9DmiH,EAASvnH,KAAK,iBAETgqB,EACJ/X,QAAO,SAAAiqE,GAAA,OAASqrC,EAASniH,SAAS82E,EAAK3qE,WACvCwB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,yCAShCkmD,GACjBp1D,KAAKkkJ,eAAiB9uF,EACtBp1D,KAAKwwI,kBAAkBpyI,SAAQ,SAACwuI,GACzBA,EAAYzmH,eACfymH,EAAYxmD,kB,wDAMhB,OAAOpmF,KAAKyc,WAAW,K,iCAGdvB,GACTlb,KAAKwwI,kBAAkBpyI,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,Q,uCAIjD,OAAOlb,KAAKslJ,qBAAuB,S,0CAKnC,OAAItlJ,KAAKkkJ,iBAAmBrZ,EAAOsZ,MAAMrqH,QAAU95B,KAAK0uJ,eAAiB1uJ,KAAK0uJ,aAAahoE,oBACtF1mF,KAAK0uJ,aAAa1nE,oBAA2E,KAApDhnF,KAAK0uJ,aAAa1nE,mBAAmB2e,WAC1E,OAGL3lG,KAAKkkJ,iBAAmBrZ,EAAOsZ,MAAMtqH,UAClC75B,KAAKqkJ,eAAel+H,eACvBnmB,KAAKqkJ,eAAej+D,aAEfpmF,KAAKqkJ,eAAel+H,cAAcw/E,WAAa,OAElD3lG,KAAK0uJ,eAAiB1uJ,KAAK0uJ,aAAavoI,eAC1CnmB,KAAK0uJ,aAAatoE,aAEZpmF,KAAK0uJ,cAAgB1uJ,KAAK0uJ,aAAavoI,cAC3CnmB,KAAK0uJ,aAAavoI,cAAcw/E,WAAa,KAC7C,Q,wCAIU7iB,GAChB9iF,KAAKwwI,kBAAkBpyI,SAAQ,SAAA4gB,GACN,gBAAnBA,EAAQ1Y,QAA+C,kBAAnB0Y,EAAQ1Y,QACxB,sBAAnB0Y,EAAQ1Y,QAAqD,mBAAnB0Y,EAAQ1Y,QAC/B,kBAAnB0Y,EAAQ1Y,SACX0Y,EAAQ8jE,SAAWA,U,aAzMlB96E,GAAK,S,EAELm8I,MAAQ,CACbtqH,SAAU,WACVC,OAAQ,U,sJCpBZ,QAEA,S,IACA,OACA,QACA,QAIA,S,IAEA,S,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEaigE,Q,gBAUX,cAAc,iGACN,GAAM,EAAO,EAAAv2F,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,kBACA,EAAKmY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKqD,aAAe,GACpB,EAAKmlI,eAAiBnqD,EAAOmsD,KAAKpsH,OAElC,EAAKqsH,eAAiB,EAEtB,EAAK98D,WAAa,KAClB,EAAK+8D,YAAc,KACnB,EAAKwI,WAAa,KAClB,EAAKC,iBAAmB,KAGxB,EAAKtI,YAAc,KACnB,EAAKC,cAAgB,KAGrB,EAAKC,eAAiB,KACtB,EAAK9+B,UAAY,KACjB,EAAK++B,cAAgB,KACrB,EAAKC,0BAA2B,EAChC,EAAK1sD,WAAa,KAClB,EAAK2sD,iBAAmB,KAExB,EAAKC,YAAc,KACnB,EAAKC,cAAgB,KAErB,EAAKz9D,WAAa,IAAI,EAAJ,SAAe,GACjC,EAAKA,WAAW3oF,UAAY,qBAC5B,EAAK2oF,WAAWj+E,KAAO2uF,EAAOmsD,KAAKluH,IACnC,EAAKqxD,WAAWw3B,OAAS,CACvBtnF,uBAAwB,EACxBC,yBAA0B,EAC1BC,yBAA0B,GAE5B,EAAK1a,aAAahqB,KAAK,EAAKs0F,YAE5B,EAAK09D,qBAAsB,EA1Cf,E,qEA8CTpjJ,GAAW,WACVssI,EAAkB,GACpB+W,EAAkB,GAClB9W,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACL,IAAK,cACHy/H,EAAkB,iBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACL,IAAK,eACL,IAAK,qBACHm2G,EAAkB,qBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,qBACHm2G,EAAkB,mBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACL,IAAK,cACEn2B,EAAU4M,YAAYpW,SAAS,eAClC81I,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,QAEhC,MACF,IAAK,qBACHm2G,EAAkB,mBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,YACHm2G,EAAkB,YAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACHm2G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,iBACHm2G,EAAkB,gBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,eACHi4G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,gBACHm2G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,kBACHi4G,EAAkB,gBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,eACEh4B,KAAKqpF,aACRrpF,KAAKqpF,WAAa,IAAI,EAAJ,SAAe,GACjCrpF,KAAK+e,aAAahqB,KAAKiL,KAAKqpF,aAE9B4mD,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MAMF,IAAK,cACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAIlC,QAAIm2G,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiB7kI,KAAO47I,EAC7BhnJ,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,6EA8CT,OAAO3D,KAAKqpF,YAAerpF,KAAKqpF,WAAW1H,SAAS1hF,MAAK,SAAAgnJ,GAAA,OAAgD,IAA3BA,EAAkB77I,SAC3FpL,KAAKqpF,WAAW1H,SAAS1hF,MAAK,SAAAgnJ,GAAA,OAAgD,IAA3BA,EAAkB77I,QAAe,CACvF2uF,EAAOmsD,KAAKpsH,OACZigE,EAAOmsD,KAAKrsH,UACV,K,2CAIJ,OAAO,I,sCAIP,OAAO75B,KAAKkkJ,iB,yCAGK9uF,EAAS8xF,GAC1BlnJ,KAAKkkJ,eAAiB9uF,EACtBp1D,KAAKqpF,WAAWjD,aACZ8gE,GACFA,EAA0BlnJ,KAAKqpF,WAAW3pE,qBAAqB,M,wCAIjD,WACVX,GAAe,aAAQ/e,KAAK+e,aAAc,iBAChD,OAAI/e,KAAKopF,yBACArqE,EAEFA,EAAa/X,QAAO,SAAC4lI,GAC1B,OAAOA,EAAYxhI,OAAS,EAAK84I,gBAAkBtX,EAAYxhI,OAAS2uF,EAAOmsD,KAAKluH,S,iCAKtF,IACMmvH,EAA4D,SADxCnnJ,KAAKonJ,uBACYC,mBAC3C,OAAOrnJ,KAAKwwI,kBACTxpI,QAAO,SAAAiqE,GAIN,OAHIA,EAAKq2E,iBACPr2E,EAAK1gD,QAAU42H,GAEVl2E,EAAK1gD,WAEbzoB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,iCA0BxCgM,IACY,aAAQlb,KAAK+e,aAAc,iBACnC3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,Q,wDAIvC,OAAOlb,KAAKyc,WAAW,K,iFAWvB,GAAIzc,KAAKopF,yBAA0B,CACjC,IAAM0lE,EAAiB9uJ,KAAKonJ,uBAC5B,GAAI0H,EAAgB,CAClB,IAAMC,EAAgBD,EAAe/vI,aAAajT,MAAK,SAAA8Q,GAAA,OAAgBA,EAAatW,SAAWwoJ,EAAehf,cACzGgf,EAAenf,eACpB,GAAIof,GAAiBA,EAAc5oI,eAAiB4oI,EAAc5oI,cAAcrT,SAA5B,WAClD,OAAOi8I,EAAc5oI,cAAcrT,SAA5B,WAAmD,GAG9D,OAAO,KAET,IAAK9S,KAAKqpF,aAAerpF,KAAKqpF,WAAWljE,cACvC,OAAO,KAET,IAAIohI,EAAmBvnJ,KAAKqpF,WAAWljE,cAAcrT,SAA9B,WAWvB,OAVKy0I,GAAqBA,EAAiB9yJ,OAMR,MAAxB8yJ,EAAiB,KAC1BA,EAAiB,GAAKvnJ,KAAKqpF,WAAWljE,cAActK,SAAS1hB,SAAS,QAAU,KAAO,MANnF6F,KAAKqpF,WAAWljE,cAActK,SAAS1hB,SAAS,YAClDotJ,EAAmB,CAAC,MAEpBvvJ,QAAQwvJ,KAAK,mBAMVD,EAAiB,K,yCAOxB,OAAKvnJ,KAAKqpF,WAEHrpF,KAAKqpF,WAAWljE,cAAgBnmB,KAAKqpF,WAAWljE,cAAckhI,iBAAmB,KAD/E,S,mCAMT,OAAKrnJ,KAAKqpF,aAECrpF,KAAKopF,0BAGPppF,KAAKqpF,WAAWljE,gB,+CAKzB,IAAMuhI,EAAY1nJ,KAAKkb,OAAOsD,MAAM,EAAAixH,eAAeznI,IACnD,OAAO0/I,GAAaA,EAAUt+D,yB,6CAI9B,OAAOppF,KAAKopF,yBAA2BppF,KAAKkb,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAMhI,S,aA1VzEgI,GAAK,S,EAELk+I,KAAO,CACZpsH,OAAQ,SACRD,SAAU,WACV8tH,MAAO,QACP3vH,IAAK,O,sFCTYg3H,EAARA,MAAQ,CACnBC,MAAO,UACPC,WAAY,UACZvjD,MAAO,UACPwjD,KAAM,UACN76B,IAAK,UACL86B,gBAAiB,2B,UA/BE,CACnB,GAAM,CACJv6B,QAAS,UACTC,cAAe,UACfu6B,qBAAsB,uBACtBC,oBAAqB,uBACrB1jD,OAAQ,UACRmpB,aAAc,UACdw6B,gBAAiB,uBACjBC,mBAAoB,uBACpBx6B,WAAY,aAEd,KAAQ,CACNH,QAAS,UACTC,cAAe,UACfu6B,qBAAsB,uBACtBC,oBAAqB,qBACrB1jD,OAAQ,UACRmpB,aAAc,UACdw6B,gBAAiB,uBACjBC,mBAAoB,uBACpBx6B,WAAY,oB,8ECrBhB,I,EAAA,O,oCACA,QACA,IAAMy6B,EAAY,CAChBC,OAAQ,KACR/a,UAAW,CACTv6H,EAAG,EACHC,EAAG,GAELyqC,OAAQ,CACNnlD,MAAO,EACPE,OAAQ,GAEVw0C,OAAQ,CACNiI,UAAW,EACX9H,MAAO,EACPm7G,kBAAmB,KACnBvgG,UAAW,MAEbmwE,iBAAkB,KAClBlxE,aAAc,GACdisE,WAAY,WAEV,OADmB,UAAMn4H,WACPwH,cAAcimJ,gBAElCC,cAAe,WAEb,OADmB,UAAM1tJ,WACNwH,cAAcimJ,gBAEnC/2F,mBAAoB,WAClB,IACMA,EADQ,UAAM12D,WACa4L,UAAU8qD,mBAC3C,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,KAE7DtF,aAAc,aAGd6gF,YAAa,GACbM,eAAgB,SAASN,GACvBp0I,KAAKo0I,YAAcA,GAErB0b,eAAgB,SAASj5F,GACvB72D,KAAKo0I,YAAYr/I,KAAK8hE,IAExBw9E,eAAgB,WACd,OAAOr0I,KAAKo0I,c,UAIDqb,G,gUC/Cf,IAAYjvI,E,wJAAZ,OAEqCuvI,EAAxBA,sBAAwB,SAACC,GAAD,MAAgC,CACnE5kJ,KAAMoV,EAAMkrD,wBACZ7qD,QAAS,CAACmvI,+BAG4BC,EAA3BA,yBAA2B,SAACC,GAAD,MAA4B,CAClE9kJ,KAAMoV,EAAMmrD,4BACZ9qD,QAAS,CAACqvI,2BAGgCC,EAA/BA,6BAA+B,SAACC,GAAD,MAAgC,CAC1EhlJ,KAAMoV,EAAMorD,gCACZ/qD,QAAS,CAACuvI,+BAG8BC,EAA7BA,2BAA6B,SAACC,GAAD,MAAqC,CAC7EllJ,KAAMoV,EAAMqrD,8BACZhrD,QAAS,CAACyvI,oCAGqCC,EAApCA,kCAAoC,SAACC,GAAD,MAAqC,CACpFplJ,KAAMoV,EAAMsrD,sCACZjrD,QAAS,CAAC2vI,oCAG0BC,EAAzBA,uBAAyB,SAACC,GAAD,MAAiC,CACrEtlJ,KAAMoV,EAAMurD,yBACZlrD,QAAS,CAAC6vI,gCAG6BC,EAA5BA,0BAA4B,SAACC,GAAD,MAA6B,CACpExlJ,KAAMoV,EAAMwrD,6BACZnrD,QAAS,CAAC+vI,4BAGiCC,EAAhCA,8BAAgC,SAACC,GAAD,MAAiC,CAC5E1lJ,KAAMoV,EAAMyrD,iCACZprD,QAAS,CAACiwI,iC,0ICvCZ,OACA,Q,IACA,O,IACA,O,IAEA,O,uDAEqBC,G,gHAoBAptG,EAAKvpC,EAAGC,EAAG1a,EAAOE,EAAQw0C,EAAQ28G,EAAUl2F,GAO7D,QANsB,IAAXA,IACTA,GAAS,QAEW,IAAXzmB,IACTA,EAAS,GAEW,iBAAXA,EACTA,EAAS,CAAC48G,GAAI58G,EAAQ68G,GAAI78G,EAAQ88G,GAAI98G,EAAQ+8G,GAAI/8G,OAC7C,CACL,IAAIg9G,EAAgB,CAACJ,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGC,GAAI,GAC9C,IAAK,IAAIE,KAAQD,EACfh9G,EAAOi9G,GAAQj9G,EAAOi9G,IAASD,EAAcC,GAGjD3tG,EAAI+W,YACJ/W,EAAIgX,OAAOvgD,EAAIi6B,EAAO48G,GAAI52I,GAC1BspC,EAAIiX,OAAOxgD,EAAIza,EAAQ00C,EAAO68G,GAAI72I,GAClCspC,EAAI4tG,iBAAiBn3I,EAAIza,EAAO0a,EAAGD,EAAIza,EAAO0a,EAAIg6B,EAAO68G,IACzDvtG,EAAIiX,OAAOxgD,EAAIza,EAAO0a,EAAIxa,EAASw0C,EAAO88G,IAC1CxtG,EAAI4tG,iBAAiBn3I,EAAIza,EAAO0a,EAAIxa,EAAQua,EAAIza,EAAQ00C,EAAO88G,GAAI92I,EAAIxa,GACvE8jD,EAAIiX,OAAOxgD,EAAIi6B,EAAO+8G,GAAI/2I,EAAIxa,GAC9B8jD,EAAI4tG,iBAAiBn3I,EAAGC,EAAIxa,EAAQua,EAAGC,EAAIxa,EAASw0C,EAAO+8G,IAC3DztG,EAAIiX,OAAOxgD,EAAGC,EAAIg6B,EAAO48G,IACzBttG,EAAI4tG,iBAAiBn3I,EAAGC,EAAGD,EAAIi6B,EAAO48G,GAAI52I,GAC1CspC,EAAI6tG,YACAR,GACFrtG,EAAI88E,OAEF3lE,GACFnX,EAAImX,W,iCAIUnX,EAAKjkD,EAAG+xJ,EAAGr3I,GAA4B,IAAzBC,EAAyB,uDAArB,EAAGq3I,EAAkB,wDACnDC,EAAKv3I,EAAQ,GAAJ1a,EACT0hI,EAAKhnH,EAAQ,GAAJ1a,EACTkyJ,EAAKv3I,EAAQ,GAAJo3I,EACTI,EAAKx3I,EAAQ,GAAJo3I,EAETK,EAAQ,cACRC,EAASD,EAAQpyJ,EAAI,GACrBsyJ,EAASP,EAAIK,EAAQ,GAEzBnuG,EAAIgX,OAAOvgD,EAAGw3I,GACdjuG,EAAIsuG,cAAc73I,EAAI23I,EAAQH,EAAIxwB,EAAI/mH,EAAI23I,EAAQ5wB,EAAI/mH,GACtDspC,EAAIsuG,cAAc7wB,EAAI/mH,EAAI23I,EAAQ53I,EAAI23I,EAAQF,EAAIz3I,EAAGy3I,GACjDH,IACF/tG,EAAIsuG,cAAc53I,EAAI03I,EAAQF,EAAIF,EAAIt3I,EAAI23I,EAAQL,EAAIt3I,GACtDspC,EAAIsuG,cAAcN,EAAIv3I,EAAI43I,EAAQ53I,EAAI23I,EAAQH,EAAIx3I,EAAGw3I,M,yCAuD/BjuG,EAAKs2E,EAAY5lF,EAAQmmB,GAEjD7W,EAAIuuG,IACFj4B,EAAW7/G,EACX6/G,EAAW5/G,EACXg6B,EACA,EACU,EAAVjqC,KAAKqnE,IACL,GAEF9tB,EAAIkX,YAAc,UAAa,UAAW72D,aAAa6wH,QACvDlxE,EAAIwuG,UAAY,UAChBxuG,EAAI6W,UAAYA,EAChB7W,EAAImX,SACJnX,EAAI88E,OAGJ98E,EAAI+W,YACJ/W,EAAIuuG,IACFj4B,EAAW7/G,EACX6/G,EAAW5/G,EACXg6B,EAAS,EACT,EACU,EAAVjqC,KAAKqnE,IACL,GAGF9tB,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAa6wH,QACrDlxE,EAAI6W,UAAYA,EAChB7W,EAAI88E,S,mCAGcxG,GAMlB,IALkB5lF,EAKlB,uDAL2B,EACTmmB,EAIlB,uDAJ8B,EACZK,EAGlB,uDAHgC,UACds3F,EAElB,uDAF8B,KACZxuG,EAClB,uDADwB,UAAiBy8C,SAEzCz8C,EAAIyuG,OACJzuG,EAAI+W,YACJ/W,EAAIuuG,IACFj4B,EAAW7/G,EACX6/G,EAAW5/G,EACXg6B,EACA,EACU,EAAVjqC,KAAKqnE,IACL,GAEF9tB,EAAIkX,YAAcA,EAClBlX,EAAI6W,UAAYA,EAChB7W,EAAImX,SACAq3F,IACFxuG,EAAIwuG,UAAYA,EAChBxuG,EAAI88E,QAEN98E,EAAI6tG,YACJ7tG,EAAI0uG,Y,2BAmIM1uG,EAAKvpC,EAAGC,EAAG1a,EAAOE,GAE5B,IAYMyyJ,EAAS3yJ,EAZO,IAahB4yJ,EAAS1yJ,EAZQ,IAejB2yJ,EAAY,UAAa,UAAWxuJ,aAAa6wH,QACvDlxE,EAAI6W,UAFc,EAEU83F,EAC5B3uG,EAAIkX,YAAc23F,EAGlB7uG,EAAIwuG,UAAY,UAChBxuG,EAAI8uG,SAASr4I,EAAGC,EAAG1a,EAAOE,GAG1B8jD,EAAI+W,YACJ/W,EAAI0oC,KAAKjyE,EAAGC,EAAG1a,EAAOE,GACtB8jD,EAAImX,SAGJ,IAAM43F,EAASt4I,EA1BI,GA0Bak4I,EAC1BK,EAASt4I,EA1BI,GA0Bak4I,EAC1BK,EA9BiB,IA8BSN,EAC1BO,EA9BkB,IA8BSN,EACjC5uG,EAAI+W,YACJ/W,EAAI0oC,KAAKqmE,EAAQC,EAAQC,EAAQC,GACjClvG,EAAImX,SAGJ,IAAMg4F,EAAU14I,EA/BM,IA+Bck4I,EAC9BS,EAAU14I,EA/BM,IA+Bck4I,EAC9BS,EAnCkB,GAmCYV,EAC9BW,EAnCoB,WAmCcX,EAExC3uG,EAAI+W,YACJ/W,EAAIuuG,IAAIY,EAASC,EAASC,EAAW,EAAG,EAAI5oJ,KAAKqnE,IACjD9tB,EAAImX,SAEJnX,EAAI+W,YACJ/W,EAAIuuG,IAAIY,EAASC,EAASE,EAAa,EAAG,EAAI7oJ,KAAKqnE,IACnD9tB,EAAImX,W,iCAYYnX,EAAKvpC,EAAGC,EAAG1a,EAAOE,GAElC,IAgBMyyJ,EAAS3yJ,EAhBO,IAiBhB4yJ,EAAS1yJ,EAhBQ,IAmBjB26D,EAAY,KAAO83F,EAIzB3uG,EAAIwuG,UAAY,UAChBxuG,EAAI8uG,SAASr4I,EAAGC,EAAG1a,EAAOE,GAG1B8jD,EAAI6W,UAAYA,EAChB7W,EAAIkX,YARc,UASlBlX,EAAI+W,YACJ/W,EAAI0oC,KAAKjyE,EAAGC,EAAG1a,EAAOE,GACtB8jD,EAAImX,SAGJ,IAAM43F,EAASt4I,EA7BI,GA6Bak4I,EAC1BY,EAAY74I,EA7BI,GA6BgBk4I,EAChCY,EAnCoB,IAmCYb,EAChCc,EAnCqB,IAmCYb,EACvC5uG,EAAI+W,YACJ/W,EAAI0oC,KAAKqmE,EAAQQ,EAAWC,EAAWC,GACvCzvG,EAAImX,SAGJ,IAAMu4F,EAAeh5I,EApCI,IAoCmBk4I,EACtCe,EAzCuB,IAyCehB,EACtCiB,EAzCwB,IAyCehB,EAC7C5uG,EAAI+W,YACJ/W,EAAI0oC,KAAKqmE,EAAQW,EAAcC,EAAcC,GAC7C5vG,EAAImX,SAGJ,IAAM04F,EAAap5I,EAzCG,IAyCiBk4I,EACjCmB,EAAap5I,EAzCM,IAyCiBk4I,EACpCS,EA7CkB,GA6CYV,EAC9BW,EA7CoB,WA6CcX,EAExC3uG,EAAI+W,YACJ/W,EAAIuuG,IAAIsB,EAAYC,EAAYT,EAAW,EAAG,EAAI5oJ,KAAKqnE,IACvD9tB,EAAImX,SAEJnX,EAAI+W,YACJ/W,EAAIuuG,IAAIsB,EAAYC,EAAYR,EAAa,EAAG,EAAI7oJ,KAAKqnE,IACzD9tB,EAAImX,SAGJ,IAAM44F,EAAgBr5I,EArDM,IAqDoBk4I,EAEhD5uG,EAAI+W,YACJ/W,EAAIuuG,IAAIsB,EAAYE,EAAeV,EAAW,EAAG,EAAI5oJ,KAAKqnE,IAC1D9tB,EAAImX,SAEJnX,EAAI+W,YACJ/W,EAAIuuG,IAAIsB,EAAYE,EAAeT,EAAa,EAAG,EAAI7oJ,KAAKqnE,IAC5D9tB,EAAImX,W,0CAIqBnX,EAAKgwG,EAAYh0J,EAAOE,GACjD8jD,EAAIwuG,UAAY,QAChBxuG,EAAI8uG,SAASkB,EAAWv5I,EAAGu5I,EAAWt5I,EAAG1a,EAAOE,K,iCAIhC8jD,EAAKgwG,EAAYh0J,EAAOE,GACxC8jD,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,UAClBlX,EAAIiwG,WAAWD,EAAWv5I,EAAGu5I,EAAWt5I,EAAG1a,EAAOE,O,OAxY7Cg0J,UAAY,SAACC,EAASC,EAAOC,EAAOC,EAAKC,GAC9C,IACErgF,EAAKogF,EAAMF,EACXjgF,EAAKogF,EAAMF,EACXx/G,EAAQpqC,KAAKozE,MAAM1J,EAAID,GAEzBigF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOq5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EAPD,GAOiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAPhD,GAOgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IACzGqiF,EAAQn5F,OAAOs5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EATD,GASiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAThD,GASgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAEzGqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAZD,GAYmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAZlD,GAYoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAC7GqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAdD,GAcmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAdlD,GAcoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,K,EAGxG0iF,iBAAmB,SAACL,EAASC,EAAOC,EAAOC,EAAKC,EAAKE,EAAcC,EAAcjuG,GACtF,IAAMkuG,GAAW,IAAAtiF,aAAY,CAAC53D,EAAG25I,EAAO15I,EAAG25I,GAAQ,CAAC55I,EAAG65I,EAAK55I,EAAG65I,IACzDK,GAAuB,IAAAjiF,uBAAsBgiF,EAAU,CAACl6I,EAAGg6I,EAAc/5I,EAAGg6I,GAAejuG,GAE/FytB,EAAKogF,EAAMM,EAAqBn6I,EAChC05D,EAAKogF,EAAMK,EAAqBl6I,EAChCm6B,EAAQpqC,KAAKozE,MAAM1J,EAAID,GACnBx/B,GAAS,IAAAi9B,kBAAiB,CAACl3D,EAAG25I,EAAO15I,EAAG25I,GAAQ,CAAC55I,EAAGg6I,EAAc/5I,EAAGg6I,IAC3EP,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQU,MACNJ,EACAC,EACAJ,EACAC,EACA7/G,GAIFy/G,EAAQn5F,OAAOs5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EAhBD,EAgBiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAhBhD,EAgBgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IACzGqiF,EAAQn5F,OAAOs5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EAlBD,EAkBiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAlBhD,EAkBgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAGzGoC,EAAK0gF,EAAqBn6I,EAAI25I,EAC9BjgF,EAAKygF,EAAqBl6I,EAAI25I,EAC9Bx/G,EAAQpqC,KAAKozE,MAAM1J,EAAID,GACvBigF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAzBD,EAyBmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAzBlD,EAyBoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAC7GqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EA3BD,EA2BmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EA3BlD,EA2BoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,K,EA+DxGgjF,cAAgB,SAACxuG,GAInB,IAHmBuU,EAGnB,uDAH+B,EACZK,EAEnB,uDAFiC,qBACdlX,EACnB,uDADyB,UAAiBy8C,SAEvCs0D,EAAazuG,EAAO,GAC1BtC,EAAI+W,YACJ/W,EAAIgX,OAAO+5F,EAAWt6I,EAAGs6I,EAAWr6I,GAHjC,2BAIH,YAAoB4rC,EAApB,+CAA4B,KAAjB+F,EAAiB,QAC1BrI,EAAIiX,OAAO5O,EAAM5xC,EAAG4xC,EAAM3xC,IALzB,6EAOHspC,EAAI6W,UAAYA,EAChB7W,EAAIkX,YAAcA,EAClBlX,EAAImX,SACJnX,EAAI6tG,a,EAGCmD,mBAAqB,SAAC1uG,GAIxB,IAHmBuU,EAGnB,uDAH+B,EACZK,EAEnB,uDAFiC,qBACdlX,EACnB,uDADyB,UAAiBy8C,SAEvCs0D,EAAazuG,EAAO,GAC1BtC,EAAI+W,YACJ/W,EAAIgX,OAAO+5F,EAAW,GAAIA,EAAW,IAHlC,2BAIH,YAAoBzuG,EAApB,+CAA4B,KAAjB+F,EAAiB,QAC1BrI,EAAIiX,OAAO5O,EAAM,GAAIA,EAAM,KAL1B,6EAOHrI,EAAIiX,OAAO85F,EAAW,GAAIA,EAAW,IACrC/wG,EAAI6W,UAAYA,EAChB7W,EAAIkX,YAAcA,EAClBlX,EAAImX,SACJnX,EAAI6tG,a,EAGCoD,wBAA0B,SAACjxG,EAAKsC,GAAwB,IAAhB2uB,EAAgB,uDAAP,GACtD3uB,EAAO7nD,SAAQ,SAAC4tD,EAAOp+C,GACrB,IAAMinJ,EAAY5uG,EAAiB,IAAVr4C,EAAcq4C,EAAOxxD,OAAS,EAAImZ,EAAQ,GAC7DknJ,EAAY7uG,EAChBr4C,IAAUq4C,EAAOxxD,OAAS,EAAI,EAAImZ,EAAQ,GAEtCmnJ,EAAiB9uG,EACrBr4C,IAAUq4C,EAAOxxD,OAAS,EACtB,EACAmZ,IAAUq4C,EAAOxxD,OAAS,EAC1B,EACAmZ,EAAQ,GAERonJ,GAAe,IAAA94E,mBAAkBlwB,EAAO6oG,EAAWjgF,GACnDqgF,GAAe,IAAA/4E,mBAAkB44E,EAAWC,EAAgBngF,GAbnC,GAcD,IAAA/B,mBAAkB7mB,EAAO8oG,GAAalgF,GAdrC,qBAcxBhC,EAdwB,KAcdsiF,EAdc,KAgB/BvxG,EAAI+W,YACJq2F,EAAc8C,UAAWlwG,EACvBqxG,EAAa56I,EACb46I,EAAa36I,EACb46I,EAAa76I,EACb66I,EAAa56I,GAEf02I,EAAc8C,UAAWlwG,EACvBivB,EAASx4D,EACTw4D,EAASv4D,EACT66I,EAAU96I,EACV86I,EAAU76I,GAEZspC,EAAI6W,UAAY,EAChB7W,EAAImX,SACJnX,EAAI6tG,gB,EAID2D,uBAAyB,SAACxxG,EAAKsC,GAA4C,IAApC2uB,EAAoC,uDAA3B,GAAIwgF,EAAuB,uDAAN,EAC1EnvG,EAAO7nD,SAAQ,SAAC4tD,EAAOp+C,GACrB,IAAMknJ,EAAY7uG,EAChBr4C,IAAUq4C,EAAOxxD,OAAS,EAAI,EAAImZ,EAAQ,GAK5C,IAHsB,IAAA0jE,kBAAiBtlB,EAAO8oG,GAChC,UAAU7pG,WAEImqG,EAAgB,QACZ,IAAAviF,mBAAkB7mB,EAAO8oG,GAAalgF,GAD1B,qBACnChC,EADmC,KACzBsiF,EADyB,KAE1CvxG,EAAI+W,YACJq2F,EAAc8C,UAAWlwG,EACvBivB,EAASx4D,EACTw4D,EAASv4D,EACT66I,EAAU96I,EACV86I,EAAU76I,GAEZspC,EAAI6W,UAAY,EAChB7W,EAAImX,SACJnX,EAAI6tG,iB,EAKH6D,aAAe,SAAC1xG,EAAKivB,GAC1BjvB,EAAIyuG,OACJzuG,EAAI+W,YACJ/W,EAAIwuG,UAAY,QAChBxuG,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,UAAa,UAAW72D,aAAa6wH,QACvDlxE,EAAIuuG,IAAIt/E,EAASx4D,EAAGw4D,EAASv4D,EAAG,GAAI,EAAG,EAAIjQ,KAAKqnE,IAAI,GACpD9tB,EAAI88E,OACJ98E,EAAImX,SACJnX,EAAI6tG,YAEJ7tG,EAAI+W,YACJ/W,EAAIgX,OAAOiY,EAASx4D,EAAGw4D,EAASv4D,GAChCspC,EAAIiX,OAAOgY,EAASx4D,EAAI,EAAIw4D,EAASv4D,GACrCspC,EAAIiX,OAAOgY,EAASx4D,EAAI,EAAIw4D,EAASv4D,EAAI,GAEzCspC,EAAIgX,OAAOiY,EAASx4D,EAAGw4D,EAASv4D,GAChCspC,EAAIiX,OAAOgY,EAASx4D,EAAI,EAAIw4D,EAASv4D,GACrCspC,EAAIiX,OAAOgY,EAASx4D,EAAI,EAAIw4D,EAASv4D,EAAI,GACzCspC,EAAImX,SAEJnX,EAAI0uG,W,aA5SatB,G,kJCRrB,QAEA,S,IACA,OACA,QACA,QAIA,S,IAEA,S,IACA,S,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SAEA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEah3D,Q,gBAUX,cAAc,iGACN,GAAM,EAAO,EAAAv2F,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,kBACA,EAAKmY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKqD,aAAe,GACpB,EAAKmlI,eAAiBnqD,EAAOmsD,KAAKpsH,OAElC,EAAKqsH,eAAiB,EAEtB,EAAK98D,WAAa,KAClB,EAAKisE,aAAe,KACpB,EAAKlP,YAAc,KACnB,EAAKwI,WAAa,KAClB,EAAKC,iBAAmB,KAGxB,EAAKtI,YAAc,KACnB,EAAKC,cAAgB,KAGrB,EAAKC,eAAiB,KACtB,EAAK9+B,UAAY,KACjB,EAAK++B,cAAgB,KACrB,EAAKC,0BAA2B,EAChC,EAAK1sD,WAAa,KAClB,EAAK2sD,iBAAmB,KAExB,EAAKC,YAAc,KACnB,EAAKC,cAAgB,KACrB,EAAK5a,WAAa,KAClB,EAAK6gB,UAAY,KACjB,EAAKwI,iBAAmB,KACxB,EAAKC,cAAgB,KACrB,EAAKC,SAAW,KAChB,EAAKC,UAAY,KACjB,EAAKC,aAAe,KACpB,EAAKC,iBAAmB,KACxB,EAAKC,eAAiB,KACtB,EAAKC,WAAa,KAClB,EAAKC,aAAe,KACpB,EAAKC,cAAgB,KACrB,EAAKC,UAAY,KACjB,EAAKC,UAAY,KAEjB,EAAK7sE,WAAa,IAAI,EAAJ,SAAe,GACjC,EAAKA,WAAW3oF,UAAY,qBAC5B,EAAK2oF,WAAWj+E,KAAO2uF,EAAOmsD,KAAKluH,IACnC,EAAKqxD,WAAWw3B,OAAS,CACvBtnF,uBAAwB,EACxBC,yBAA0B,EAC1BC,yBAA0B,GAE5B,EAAK1a,aAAahqB,KAAK,EAAKs0F,YAE5B,EAAK09D,qBAAsB,EAC3B,EAAKoP,iBAAmB,EAAAh8H,gBAAgBI,eACxC,EAAK67H,iBAAmB,EAAA37H,gBAAgBE,mBACxC,EAAKsqH,kBAAoB,CAAC,aAAc,cAAe,qBAAsB,cAAe,qBAC1F,YAAa,cAAe,iBAAkB,eAAgB,cAAe,aAAc,qBAC3F,gBAAiB,kBAAmB,gBAAiB,eAAgB,cAAe,YAAa,kBACjG,cAAe,aAAc,gBAAiB,qBAAsB,mBAAoB,cACxF,gBAAiB,kBAAmB,aAAc,cAhExC,E,qEAmETthJ,GAA+B,WAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpB+W,EAAkB,GAClB9W,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aAKL,IAAK,cACHy/H,EAAkB,iBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACL,IAAK,eACL,IAAK,qBACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,qBACHm2G,EAAkB,mBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACL,IAAK,cACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,qBACHm2G,EAAkB,mBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,YACHm2G,EAAkB,YAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACL,IAAK,eACHm2G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,iBACHm2G,EAAkB,gBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,eACHi4G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,aACHm2G,EAAkB,YAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,qBACHi4G,EAAkB,mBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,gBACHi4G,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,kBACHi4G,EAAkB,gBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,gBACHi4G,EAAkB,eAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MACF,IAAK,eACEh4B,KAAKqpF,aACRrpF,KAAKqpF,WAAa,IAAI,EAAJ,SAAe,GACjCrpF,KAAK+e,aAAahqB,KAAKiL,KAAKqpF,aAE9B4mD,EAAkB,cAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKluH,IAC9B,MAMF,IAAK,cACHi4G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,YACHm2G,EAAkB,WAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,kBACHm2G,EAAkB,gBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,aACHm2G,EAAkB,YAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,gBACL,IAAK,qBACHm2G,EAAkB,eAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,qBACHm2G,EAAkB,mBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,mBACHm2G,EAAkB,iBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,cACHm2G,EAAkB,aAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,gBACHm2G,EAAkB,eAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,kBACHm2G,EAAkB,gBAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,aACHm2G,EAAkB,YAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAC9B,MACF,IAAK,aACHm2G,EAAkB,YAClBC,YACA8W,EAAkBjtD,EAAOmsD,KAAKpsH,OAIlC,QAAIm2G,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiB7kI,KAAO47I,EACzB9B,GACFllJ,KAAKiwI,GAAiBG,KAAKzsI,IAEtB,K,6EA8CT,OAAO3D,KAAKqpF,YAAerpF,KAAKqpF,WAAW1H,SAAS1hF,MAAK,SAAAgnJ,GAAA,OAAgD,IAA3BA,EAAkB77I,SAC3FpL,KAAKqpF,WAAW1H,SAAS1hF,MAAK,SAAAgnJ,GAAA,OAAgD,IAA3BA,EAAkB77I,QAAe,CACvF2uF,EAAOmsD,KAAKpsH,OACZigE,EAAOmsD,KAAKrsH,UACV,K,2CAIJ,OAAO,I,sCAIP,OAAO75B,KAAKkkJ,iB,yCAGK9uF,EAAS8xF,GAC1BlnJ,KAAKkkJ,eAAiB9uF,EACtBp1D,KAAKqpF,WAAWjD,aACZ8gE,GACFA,EAA0BlnJ,KAAKqpF,WAAW3pE,qBAAqB,M,wCAIjD,WACVX,GAAe,aAAQ/e,KAAK+e,aAAc,iBAChD,OAAI/e,KAAKopF,yBACArqE,EAEFA,EAAa/X,QAAO,SAAC4lI,GAC1B,OAAOA,EAAYxhI,OAAS,EAAK84I,gBAAkBtX,EAAYxhI,OAAS2uF,EAAOmsD,KAAKluH,S,iCAOtF,OAAOh4B,KAAKwwI,kBACTxpI,QAAO,SAAAiqE,GAIN,OAAOA,EAAK1gD,WAEbzoB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,iCA0BxCgM,IACY,aAAQlb,KAAK+e,aAAc,iBACnC3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,Q,wDAIvC,OAAOlb,KAAKyc,WAAW,K,iFAWvB,GAAIzc,KAAKopF,yBAA0B,CACjC,IAAM0lE,EAAiB9uJ,KAAKonJ,uBAC5B,GAAI0H,EAAgB,CAClB,IAAMC,EAAgBD,EAAe/vI,aAAajT,MAAK,SAAA8Q,GAAA,OAAgBA,EAAatW,SAAWwoJ,EAAehf,cACzGgf,EAAenf,eACpB,GAAIof,GAAiBA,EAAc5oI,eAAiB4oI,EAAc5oI,cAAcrT,SAA5B,WAClD,OAAOi8I,EAAc5oI,cAAcrT,SAA5B,WAAmD,GAG9D,OAAO,KAET,OAAI9S,KAAKymJ,gBAAkBzmJ,KAAKymJ,eAAetgI,eAAiBnmB,KAAKymJ,eAAetgI,cAAcrT,SAAlC,YAC3D9S,KAAKymJ,eAAetgI,cAAcw6D,gCAAgC3gF,KAAKymJ,eAAehmE,wBAClFzgF,KAAKymJ,eAAetgI,cAAcrT,SAAlC,WAAyD,GAE3D,O,yCAOP,OAAK9S,KAAKqpF,WAEHrpF,KAAKqpF,WAAWljE,cAAgBnmB,KAAKqpF,WAAWljE,cAAckhI,iBAAmB,KAD/E,S,mCAMT,OAAKrnJ,KAAKqpF,aAECrpF,KAAKopF,0BAGPppF,KAAKqpF,WAAWljE,gB,+CAKzB,IAAMuhI,EAAY1nJ,KAAKkb,OAAOsD,MAAM,EAAAixH,eAAeznI,IACnD,OAAO0/I,GAAaA,EAAUt+D,yB,6CAI9B,OAAOppF,KAAKopF,yBAA2BppF,KAAKkb,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAMhI,O,wCAG9Dq2J,GAAiC,IAAjBC,EAAiB,uDAAJ,GAC7Ct2J,KAAKm2J,iBAAmBE,EAExB,IAAIE,EAAiB,GACjBC,EAAgB,GACpB,OAAQH,GACN,KAAK,EAAAl8H,gBAAgBE,mBACnBk8H,EAAiB,CAACv2J,KAAK+sJ,UAAW/sJ,KAAKksI,WAAYlsI,KAAK0mJ,cAAe1mJ,KAAKg2J,cAAeh2J,KAAK+1J,cAChGS,EAAgB,CAACx2J,KAAKu1J,kBACtB,MACF,KAAK,EAAAp7H,gBAAgBC,WACnB,OAAQk8H,GACN,IAAK,aACL,IAAK,cACHE,EAAgB,CAACx2J,KAAK+sJ,UAAW/sJ,KAAKksI,WAAYlsI,KAAKi2J,WACvD,MACF,IAAK,cACL,IAAK,aACL,IAAK,mBACL,IAAK,qBACHO,EAAgB,CAACx2J,KAAK41J,iBAAkB51J,KAAK61J,eAAgB71J,KAAKk2J,UAAWl2J,KAAK81J,YAClF,MACF,QACEU,EAAgB,CAACx2J,KAAK+sJ,UAAW/sJ,KAAKksI,WAAYlsI,KAAKk2J,WAG3DK,EAAiB,CAACv2J,KAAKu1J,iBAAkBv1J,KAAK0mJ,cAAe1mJ,KAAKg2J,cAAeh2J,KAAK+1J,cACtF,MACF,KAAK,EAAA57H,gBAAgBG,gBACnBi8H,EAAiB,CAACv2J,KAAK+sJ,UAAW/sJ,KAAKksI,WAAYlsI,KAAK0mJ,cAAe1mJ,KAAKu1J,iBAAkBv1J,KAAK+1J,aAAc/1J,KAAKk2J,WACtHM,EAAgB,CAACx2J,KAAKi2J,UAAWj2J,KAAKg2J,eACtC,MACF,KAAK,EAAA77H,gBAAgBK,cACnB+7H,EAAiB,CAACv2J,KAAK+sJ,UAAW/sJ,KAAKksI,WAAYlsI,KAAK0mJ,cAAe1mJ,KAAKu1J,iBAAkBv1J,KAAKg2J,cAAeh2J,KAAKk2J,WACvHM,EAAgB,CAACx2J,KAAK+1J,cACtB,MACF,KAAK,EAAA57H,gBAAgBI,eACnBg8H,EAAiB,CAACv2J,KAAK+sJ,UAAW/sJ,KAAKksI,WAAYlsI,KAAKu1J,iBAAkBv1J,KAAKg2J,cAAeh2J,KAAKk2J,UAAWl2J,KAAK81J,WAAY91J,KAAK61J,eAAgB71J,KAAK41J,kBACzJY,EAAgB,CAACx2J,KAAK0mJ,eAK1B6P,EAAen4J,SAAQ,SAAAwe,GACjBA,IAAiBA,EAAakmE,WAChClmE,EAAakmE,UAAW,MAG5B0zE,EAAcp4J,SAAQ,SAAAwe,GAChBA,GAAgBA,EAAakmE,UAAYlmE,EAAa65I,iBACxD75I,EAAakmE,UAAW,Q,wCAMZ4zE,GAChB12J,KAAKo2J,iBAAmBM,EAExB,IAAIH,EAAiB,GACjBC,EAAgB,GACpB,OAAQE,GACN,KAAK,EAAAj8H,gBAAgBC,gBACnB67H,EAAiB,CAACv2J,KAAK41J,iBAAkB51J,KAAK61J,eAAgB71J,KAAK81J,YACnEU,EAAgB,CAACx2J,KAAKw1J,eACtB,MACF,KAAK,EAAA/6H,gBAAgBE,mBACnB47H,EAAiB,CAACv2J,KAAKw1J,eACvBgB,EAAgB,CAACx2J,KAAK41J,iBAAkB51J,KAAK61J,eAAgB71J,KAAK81J,YAKtES,EAAen4J,SAAQ,SAAAwe,GACjBA,IAAiBA,EAAakmE,WAChClmE,EAAakmE,UAAW,MAG5B0zE,EAAcp4J,SAAQ,SAAAwe,GAChBA,GAAgBA,EAAakmE,UAAYlmE,EAAa65I,iBACxD75I,EAAakmE,UAAW,U,aAzgBvB96E,GAAK,S,EAELk+I,KAAO,CACZpsH,OAAQ,SACRD,SAAU,WACV8tH,MAAO,QACP3vH,IAAK,O,sfCnDT,IAAYxX,E,wJAAZ,OAEqCm2I,EAAxBA,sBAAwB,eAACC,EAAD,8DAA4B,CAC/DxrJ,KAAMoV,EAAMquD,yBACZhuD,QAAS,CAAC+1I,mBAG0BC,EAAzBA,uBAAyB,eAACC,EAAD,8DAA6B,CACjE1rJ,KAAMoV,EAAMsuD,0BACZjuD,QAAS,CAACi2I,oBAGiCC,EAAhCA,8BAAgC,eAACC,EAAD,8DAAoC,CAC/E5rJ,KAAMoV,EAAMuuD,kCACZluD,QAAS,CAACm2I,2BAGyCC,EAAxCA,sCAAwC,eAACC,EAAD,8DAA2C,CAC9F9rJ,KAAMoV,EAAMwuD,4CACZnuD,QAAS,CAACq2I,mCAG6BC,EAA5BA,0BAA4B,eAACC,EAAD,uDAA0B,GAA1B,MAAkC,CACzEhsJ,KAAMoV,EAAMyuD,8BACZpuD,QAAS,CAACu2I,4BAGyBC,EAAxBA,sBAAwB,eAACC,EAAD,uDAAsB,GAAtB,MAA8B,CACjElsJ,KAAMoV,EAAM0uD,+BACZruD,QAAS,CAACy2I,wBAG6BC,EAA5BA,0BAA4B,eAACC,EAAD,uDAAqB,GAArB,MAA6B,CACpEpsJ,KAAMoV,EAAM2uD,8BACZtuD,QAAS,CAAC22I,uBAGgCC,EAA/BA,6BAA+B,eAACC,EAAD,uDAA6B,GAA7B,MAAqC,CAC/EtsJ,KAAMoV,EAAM4uD,yCACZvuD,QAAS,CAAC62I,+BAGiCC,EAAhCA,8BAAgC,eAACC,EAAD,uDAA8B,GAA9B,MAAsC,CACjFxsJ,KAAMoV,EAAM6uD,kCACZxuD,QAAS,CAAC+2I,gCAG8BC,EAA7BA,2BAA6B,eAACC,EAAD,uDAA2B,GAA3B,MAAmC,CAC3E1sJ,KAAMoV,EAAM8uD,+BACZzuD,QAAS,CAACi3I,6BAGkCC,EAAjCA,+BAAiC,eAACC,EAAD,uDAA+B,GAA/B,MAAuC,CACnF5sJ,KAAMoV,EAAM+uD,oCACZ1uD,QAAS,CAACm3I,iCAGkCC,EAAjCA,+BAAiC,eAACC,EAAD,uDAA+B,GAA/B,MAAuC,CACnF9sJ,KAAMoV,EAAMgvD,oCACZ3uD,QAAS,CAACq3I,iCAGoCC,EAAnCA,iCAAmC,eAACC,EAAD,uDAAiC,GAAjC,MAAyC,CACvFhtJ,KAAMoV,EAAMivD,sCACZ5uD,QAAS,CAACu3I,mCAGoBC,EAAnBA,iBAAmB,eAACC,EAAD,uDAAiB,GAAjB,MAAyB,CACvDltJ,KAAMoV,EAAMkvD,2BACZ7uD,QAAS,CAACy3I,oB,mHCFG,SAAStwJ,EAAIuwJ,EAAiBjiG,EAAWhwD,EAAQiwD,GAA8B,WAAlBC,EAAkB,uDAAJ,GAEpFvxD,EAAOjF,KACT45C,EAAQ,KAIR4+G,GAAY,GACZC,EAAW,GACXC,EAAkB,UAAUp+B,eAAgB,IAAApgE,sBAAuB,EAAI,GACvEnzD,GAAQ,CACN+/C,WAAW,EACXC,kBAAmB,KACnB4xG,UAAU,EACVC,YAAa,KACbC,iBAAiB,EACjBC,aAAa,GAoLjB,SAASC,GAAqBziG,GAC5B,OAAQA,GACN,IAAK,YACH,MAAO,CAAC,CACN0iG,kBAAmB,EACnB/6B,MAAO,EACPC,MAAO,EACP+6B,kBAAmB,KACnBC,WAAW,EACXC,UAAU,EACVC,WAAW,EACX9iG,YACA+iG,eAAgB,SACf,CACDL,kBAAmB,EACnB/6B,MAAO,EACPC,MAAO,EACP+6B,kBAAmB,EACnBC,WAAW,EACXC,UAAU,EACVC,WAAW,EACX9iG,YACA+iG,eAAgB,SAEpB,IAAK,YACH,MAAO,CAAC,CACNL,kBAAmB,EACnB/6B,MAAO,EACPC,MAAO,EACP+6B,kBAAmB,KACnBC,WAAW,EACXC,UAAU,EACV7iG,YACA+iG,eAAgB,SACf,CACDL,kBAAmB,EACnB/6B,MAAO,EACPC,MAAO,EACP+6B,kBAAmB,EACnBC,WAAW,EACXC,UAAU,EACV7iG,YACA+iG,eAAgB,SAEpB,QACE,MAAO,IA/Nbr5J,KAAKw9H,OAAS,CACZ87B,gBAAiB,wBACjBC,mBAAoB,qBACpBC,UAAW,yBAEbx5J,KAAKy5J,UAAY,CAAC,KAAM,MAAO,MAAO,QACtCz5J,KAAKw2D,YAAcA,EAEnBx2D,KAAKsnD,IAAM,CACTltC,EAAG,EACHC,EAAG,GAELra,KAAK05J,QAAU,CACbt/I,EAAG,EACHC,EAAG,GAELra,KAAK25J,kBAAoB,KACzB35J,KAAKu3H,eAAiB,KACtBv3H,KAAK45J,kBAAoB,KACzB55J,KAAKqzI,UAAY,IAAI,EAAJ,QAAcrzI,MAC/BA,KAAKk2I,aAAe1/E,EAAY0/E,aAAe,IAAI,EAAJ,QAAiBl2I,MAAQ,KAExEA,KAAK85I,cAAgB,IAAI,EAAJ,QAAkB95I,MACvCA,KAAK65J,YAAcrjG,EAAYsjG,SAAW,IAAI,EAAJ,QAAgB95J,MAAQ,KAClEA,KAAK+5J,cAAgB,IAAI,EAAJ,QAAkB/5J,MACvCA,KAAKg6J,mBAAqB,IAAI,EAAJ,QAAuBh6J,MACjDA,KAAKi6J,iBAAmB,IAAI,EAAJ,QAAqBj6J,MAC7CA,KAAKk6J,YAAc,IAAI,EAAJ,QAAgBl6J,MACnCA,KAAKm6J,YAAc,IAAI,EAAJ,QAAgBn6J,MACnCA,KAAKo1I,eAAiB,KACtBp1I,KAAKo6J,SAAW,KAChBp6J,KAAKw0I,YAAc,GACnBx0I,KAAKq6J,cAAgB,GACrBr6J,KAAKs6J,YAAc,KACnBt6J,KAAKwtD,qBAAuB,KAC5BxtD,KAAKgI,GAAKA,EACVhI,KAAKovD,UAAY,KACjBpvD,KAAKujF,YAAc,KACnBvjF,KAAKmyI,uBAAyB,KAC9BnyI,KAAKs2D,UAAYA,EACjBt2D,KAAKu6J,qBAAsB,EAC3Bv6J,KAAKw6J,WAAa,KAClBx6J,KAAKsG,OAASA,EACdtG,KAAKqgI,aAAe,KACpBrgI,KAAKy6J,iBAAmB,KACxBz6J,KAAKqvD,UAAY,KACjBrvD,KAAKu2D,WAAaA,EAClBv2D,KAAK62I,eAAiB,EACtB72I,KAAK42I,mBAAqB,EAC1B52I,KAAKgtD,UAAW,EAChBhtD,KAAK06J,eAAgB,EACrB16J,KAAKyzI,iBAAkB,EACvBzzI,KAAK2zI,mBAAoB,EACzB3zI,KAAK26J,kCAAmC,EACxC36J,KAAKy2I,UAAY,CACfmkB,MAAO,EACPlkB,KAAM,GAER12I,KAAK66J,cAAgB,CACnB9kF,WAAY,EACZD,SAAU,GAEZ91E,KAAK86J,iBAAmB/B,GAAqBziG,GAC7Ct2D,KAAKivD,mBAAoB,EACzBjvD,KAAK+6J,2BAA6B,KAClC/6J,KAAK+wI,sBAAuB,EAC5B/wI,KAAKg7J,sBAAuB,EAE5Bh7J,KAAKmC,SAAW,WAAQ,OAAO4E,IAC/B/G,KAAKi7J,aAAe,WAAQ,OAAO,EAAKz9B,OAAOg8B,WAC/Cx5J,KAAKk7J,UAAY,WAAQ,OAAO,EAAK19B,QACrCx9H,KAAKm7J,YAAc,WAAQ,OAAO,EAAKf,UACvCp6J,KAAKo7J,mBAAqB,WAAQ,OAAOr0J,GAAM8xJ,iBAC/C74J,KAAKq7J,QAAU,SAACjwJ,GAAWnG,EAAKmG,KAAOA,GACvCpL,KAAKs7J,YAAc,SAAC7kK,EAAMS,GAAY+N,EAAKxO,GAAQS,GACnD8I,KAAKu7J,MAAQ,SAACvzJ,GAAS,EAAKA,GAAKA,GACjChI,KAAKw7J,UAAY,SAACl1J,GAAYrB,EAAKqB,OAASA,GAC5CtG,KAAKwY,eAAiB,WAAQ,OAAO,EAAK+qE,aAC1CvjF,KAAKq3D,aAAe,SAACjI,GAGnB,EAAKA,UAAYA,EACjB,EAAKm0B,aAAc,IAAAk4E,oBAAmBrsG,GACtC,IAAMssG,EAAgChnK,OAAOyhB,OAAP,mCAA+Chc,SAAS,EAAKmM,QAC7Fq1J,EAAc,EAAKr1J,SAAW,EAAAipC,cAAckB,WAC9CirH,GAAiCC,KACnC,EAAKxhB,iBACL,EAAKyhB,sBACL,EAAKC,qBAGT77J,KAAK87J,oBAAsB,SAACx1J,GAAa,EAAKm0J,iBAAmBn0J,GACjEtG,KAAK+7J,4BAA8B,SAACz1J,GAAa,EAAKm0J,iBAAmBn0J,GACzEtG,KAAKg8J,wBAA0B,SAACh0J,GAAS,EAAKwlD,qBAAuBxlD,GACrEhI,KAAKi8J,8BAAgC,SAACj0J,GAAQ,EAAK+yJ,2BAA6B/yJ,GAChFhI,KAAKk8J,YAAc,SAAC9B,GAAc,EAAKA,SAAWA,GAClDp6J,KAAKm8J,YAAc,WAAQ,OAAO,EAAK/B,UACvCp6J,KAAKm6I,eAAiB,WACpB,EAAKigB,SAAW,UAAqB,EAAAt9G,oBAAoBI,aACtDk/G,sCAAsC,EAAKhtG,YAEhDpvD,KAAK47J,oBAAsB,WACzB,IAAMS,EAAgB,UAAU9uG,gCAAgC,CAAC,EAAKvlD,KADvC,uBAE/B,YAA2Bq0J,EAA3B,+CAA0C,KAA/BC,EAA+B,QACxCA,EAAajlG,aAAa,EAAKjI,WAC/BktG,EAAaJ,YAAY,EAAK9B,WAJD,+EAOjCp6J,KAAK67J,iBAAmB,WACtB,EAAKrnB,YAAYp2I,SAAQ,SAAAm+J,GACvB,IAAIC,EAAa,UAAUxkG,aAAaukG,GACxCC,EAAWnlG,aAAa,EAAKjI,WAC7BotG,EAAWN,YAAY,EAAK9B,cAGhCp6J,KAAKy8J,2BAA6B,WAChC,EAAKjoB,YAAYp2I,SAAQ,SAAAm+J,GACN,UAAUvkG,aAAaukG,GAC7BG,yBAAyB,EAAKp1G,SAG7CtnD,KAAKg3D,aAAe,SAAC3H,GAAe,EAAKA,UAAYA,GACrDrvD,KAAK28J,mBAAqB,SAAClpB,GAAqB,EAAKA,gBAAkBA,GACvEzzI,KAAK48J,gBAAkB,WACrB,EAAK1mB,cAAe,EAAKA,aAAa0mB,mBAExC58J,KAAKg3D,aAAe,SAAC3H,GAAgB,EAAKA,UAAYA,GACtDrvD,KAAK01I,eAAiB,WAAQ,OAAO3uI,GAAM+xJ,aAC3C94J,KAAK21I,eAAiB,SAACmjB,GAAkB/xJ,GAAM+xJ,YAAcA,GAC7D94J,KAAK68J,mBAAqB,SAAChE,GAAsB9xJ,GAAM8xJ,gBAAkBA,GACzE74J,KAAKmxI,eAAiB,SAACj6I,GAAY,EAAK65I,qBAAuB75I,GAO/D8I,KAAK88J,QAAU,WACb,MAAO,CACLn9J,OAAO,IAAA2xE,kBAAiB13B,EAAM,GAAG6X,KAAM7X,EAAM,GAAG2e,IAChD14D,QAAQ,IAAAyxE,kBAAiB13B,EAAM,GAAG6X,KAAM7X,EAAM,GAAG2e,MAGrDv4D,KAAK+8J,eAAiB,WACpBh2J,GAAM+/C,WAAY,EAClB//C,GAAMggD,kBAAoB,MAS5B/mD,KAAKq2I,SAAW,WAA0B,IAAzB2mB,EAAyB,wDACxC,GAAIA,EACF,OAAO,EAAKxmG,YAAY72D,MAE1B,IAAMs9J,EAA6B,UAAiB3lB,iCAAiC,CAAC,IACtF,OAAO,IAAAhmE,kBAAiB2rF,EAA2B,GAAIA,EAA2B,KAEpFj9J,KAAKi2I,UAAY,WAA0B,IAAzB+mB,EAAyB,wDACzC,GAAIA,EACF,OAAO,EAAKxmG,YAAY32D,OAE1B,IAAMo9J,EAA6B,UAAiB3lB,iCAAiC,CAAC,IACtF,OAAO,IAAAhmE,kBAAiB2rF,EAA2B,GAAIA,EAA2B,KAEpFj9J,KAAKk9J,SAAW,WAA0B,IAAzBF,EAAyB,wDACxC,GAAIA,EACF,OAAO,EAAKxmG,YAAY2mG,OAK5Bn9J,KAAK21D,QAAU,KAoDf,IAAMynG,GAAe,SAAC9oC,EAAK+oC,EAAOlO,EAAMmO,GACtC,EAAK9/B,OAAOg8B,UACV,QAAUllC,EAAM,KAAO+oC,EAAQ,KAAOlO,EAAO,KAAOmO,EAAQ,KAkBhE,SAASC,GAAS3oG,GAChBhb,EAAQgb,EACR,IAAK,IAAIrgE,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAGyhE,KAAK/wD,GAGlB,SAASu4J,GAAYtmK,GAAiC,OAAxB6P,GAAM4xJ,SAAWzhK,EAAcA,EAC7D,SAASumK,GAAqBvmK,GAA0C,OAAjC6P,GAAM22J,kBAAoBxmK,EAAcA,EA4jB/E,SAASymK,GAAwBC,GAE/B,IAAM3/B,EAAQrkF,EAAMgkH,EAAgB3/B,OAChC4/B,EAAa5/B,EAAM6/B,wBAAwB7/B,EAAMxsE,MACjDssG,EAAW9/B,EAAM6/B,wBAAwB7/B,EAAM1lE,IAE7C2lE,EAAQtkF,EAAMgkH,EAAgB1/B,OAChC8/B,EAAc9/B,EAAM4/B,wBAAwB5/B,EAAMzsE,MAClDwsG,EAAY//B,EAAM4/B,wBAAwB5/B,EAAM3lE,IACpD,MAAO,CACL,CAACslG,EAAWzjJ,EAAGyjJ,EAAWxjJ,GAC1B,CAAC0jJ,EAAS3jJ,EAAG2jJ,EAAS1jJ,GACtB,CAAC2jJ,EAAY5jJ,EAAG4jJ,EAAY3jJ,GAC5B,CAAC4jJ,EAAU7jJ,EAAG6jJ,EAAU5jJ,IA/lB5Bra,KAAK6qD,YAAc,SAAC3zD,GAClB,EAAKowD,IAAMpwD,EACX,EAAKy8I,mBAAoB,EACzB,EAAK8oB,8BAEPz8J,KAAK08J,yBAA2B,SAACxlK,GAC/B,EAAKowD,IAAMpwD,EACX,EAAKulK,8BAKPz8J,KAAKk+J,gBAAkB,SAAChnK,GACtB,EAAKwiK,SAAU,aAAMxiK,IAWvB8I,KAAKgrD,YAAc,WACjB,IAEI1D,SAEJ,GAJmB,UAAMnlD,WACSwH,cAAcimJ,eAG5B,CAClB,IAAIuO,EAAkB,EAAKC,0BAC3B92G,EAAM62G,GAAoC,EAAKzE,aAC1C,QAAyB1mG,IAArB,EAAKwD,aAA6B,EAAKA,YAAY6nG,QAAS,CACrE,IAAIrjC,EAAc,EAAK8e,cAAcwkB,sBACrCh3G,EAAsB,OAAhB0zE,EAAuBA,EAAc,EAAK1zE,SAEhDA,EAAM,EAAKA,IAGb,OAAOA,GAETtnD,KAAK4qD,UAAY,WACf,IAAM7I,EAAQ,UAAOA,MACfw8G,EAAe,UAAU3zG,YAC3B4zG,EAAO,EAAKxzG,cAIhB,OAHI,UAAOpI,UAAUqC,aACnBu5G,EAAO,EAAKC,sBAEP,CACLrkJ,EAAGmkJ,EAAankJ,EAAKokJ,EAAKpkJ,EAAI2nC,EAC9B1nC,EAAGkkJ,EAAalkJ,EAAKmkJ,EAAKnkJ,EAAI0nC,IAGlC/hD,KAAK0+J,mBAAqB,WAAQ,OAAO,EAAKp3G,KAC9CtnD,KAAK2+J,gBAAkB,WAAQ,OAAO,EAAKjF,SAC3C15J,KAAKo+J,wBAA0B,WAAQ,OAAO,EAAK/qB,UAAUirB,uBAC7Dt+J,KAAKy+J,mBAAqB,WAAQ,OAAO,IAAA5lF,eAAc,EAAK7tB,gBAE5DhrD,KAAKqrD,WAAa,WAChB,IAAMivE,EAAa,UAAUA,aAC7B,IAAKA,EAAY,4BACf,YAAmBt6H,KAAKyrD,WAAxB,+CAAoC,CAClC,GADkC,QACzBJ,WAAWivE,GAClB,OAAO,GAHI,8EAOjB,OAA0B,IAAnBvzH,GAAM4xJ,UAEf34J,KAAK4+J,oBAAsB,WAAa,OAAmC,IAA5B73J,GAAM22J,mBACrD19J,KAAKwyI,kBAAoB,WACvB,OAAO,EAAKgC,YAAY//I,OAAS,GAEnCuL,KAAK6+J,kCAAoC,SAAC3nK,GACxC,OAAO,EAAKyjK,iCAAmCzjK,GAEjD8I,KAAK8+J,kCAAoC,WACvC,OAAO,EAAKnE,kCAEd36J,KAAKozI,eAAiB,SAACoB,GACrB,EAAKA,YAAcA,GAErBx0I,KAAK++J,gBAAkB,SAACloG,GACtB,EAAK29E,YAAYz/I,KAAK8hE,IAExB72D,KAAKyyI,gBAAkB,WACrB,EAAK+B,YAAYp2I,SAAQ,SAAAm+J,GACvB,IAAIC,EAAa,UAAUxkG,aAAaukG,GACpCC,EACFA,EAAWzkG,mBAEX//D,QAAQC,MAAM,+BAAgCskK,OAIpDv8J,KAAKg/J,mBAAqB,WACxB,EAAKxqB,YAAYp2I,SAAQ,SAAAm+J,GACN,UAAUvkG,aAAaukG,GAC7B5pB,mBAGf3yI,KAAK04D,kBAAoB,WACvB,EAAK87E,YAAYp2I,SAAQ,SAAAm+J,GACvB,UAAU7kG,gBAAgB6kG,OAI9Bv8J,KAAKi/J,OAAS,WAIZ,IAHA,IAAI/4G,EAAQ,GACRuzB,EAAY,EAAKylF,eACjBt7C,EAAwC,aAA3B,UAAWh3G,YAA6BxC,KAAKyC,QAAO,IAAAC,kBAAiB2sE,IAAa,IAAK,IAAA1sE,SAAQ9H,EAAKi6J,aAAazlF,IACzHllF,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChC2xD,EAAMnxD,KAAK6kD,EAAMrlD,GAAG0qK,UAEtB,IAAIjyG,EAAW,CAAC,EAAAzd,cAAckB,UAAW,EAAAlB,cAAcqB,iBAAiBz2C,SAAS,EAAKmM,QAClF64J,EAAkB,EAAAvjH,uBAAuBzhD,SAAS,EAAKmM,QAE3D,MAAO,CACLghD,IAAK,EAAKA,IACVoyG,QAAS,EAAKA,QACd1xJ,GAAI,EAAKA,GACTonD,UAAW,EAAKA,UAChBgrG,SAAU,EAAKA,SACfhvJ,KAAM,EAAKA,KACX4hD,SAAUA,EACVwnF,YAAa,EAAKA,YAClB6lB,cAAe,EAAKA,cACpBC,YAAa,EAAKA,YAClBp0G,MAAOA,EACPoQ,UAAW,EAAKA,UAChBugF,eAAgB,EAAKA,eACrBD,mBAAoB,EAAKA,mBACzBtwI,OAAQ,EAAKA,OACb+oD,UAAW,EAAKA,UAChBkH,WAAY,EAAKA,WACjBqtD,WAAYu7C,EAAkB,EAAIv7C,EAClC30D,kBAAmB,EAAKA,kBACxB6rG,iBAAkB,EAAKA,iBACvBrnB,gBAAiB,EAAKA,gBACtBE,kBAAmB,EAAKA,kBACxBgnB,iCAAkC,EAAKA,iCACvCtnB,UAAW,EAAKA,UAAU4rB,SAC1B/oB,aAAc,EAAKA,aAAe,EAAKA,aAAa+oB,SAAW,KAC/DnlB,cAAe,EAAKA,cAAgB,EAAKA,cAAcmlB,SAAW,KAClEzoG,YAAa,EAAKA,YAClB27E,uBAAwB,EAAKA,uBAC7BzhI,kBAAmB,EAAKA,kBACxB88C,qBAAsB,EAAKA,qBAC3B6yE,aAAc,EAAKA,aACnBo6B,iBAAkB,EAAKA,iBACvB1pB,qBAAsB,EAAKA,qBAC3BiqB,qBAAsB,EAAKA,uBAG/Bh7J,KAAKkuD,OAAS,SAACh3D,GACb,CAAC,aAAc,KAAM,SAAU,YAAa,iBAAkB,qBAAsB,mBAAoB,aACtG,OAAQ,WAAY,cAAe,MAAO,UAAW,YAAa,oBAAqB,kBACvF,oBAAqB,YAAa,mCAAoC,cAAe,eAAgB,gBACrG,yBAA0B,WAAY,oBAAqB,uBAAwB,gBAAiB,eACpG,mBAAoB,uBAAwB,wBAC3CkH,SAAQ,SAAA5G,GACPyN,EAAKzN,GAAON,EAAMM,MAGtB,IADA,IAAI0uD,EAAQ,GACH3xD,EAAI,EAAGA,EAAI2C,EAAMgvD,MAAMzxD,OAAQF,IAAK,CAC3C,IAAIw6D,EAAO,IAAI,EAAJ,QACXA,EAAKb,OAAOh3D,EAAMgvD,MAAM3xD,GAAI2xD,GAC5BA,EAAMnxD,KAAKg6D,GAEbnV,EAAQsM,EACR,IAAK,IAAI3xD,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAGyhE,KAAK/wD,GAehB,GAbA,EAAK+wD,OACL,EAAKq9E,UAAUnlF,OAAOh3D,EAAMm8I,WACxBn8I,EAAMg/I,eACR,EAAKA,aAAe,IAAI,EAAJ,QAAiB,GACrC,EAAKA,aAAahoF,OAAOh3D,EAAMg/I,eAE7Bh/I,EAAM4iJ,gBACR,EAAKA,cAAgB,IAAI,EAAJ,QAAkB,GACvC,EAAKA,cAAc5rF,OAAOh3D,EAAM4iJ,gBAE9B,CAAC,EAAAvqG,cAAcqB,gBAAiB,EAAArB,cAAckB,WAAWt2C,SAASjD,EAAMoP,SAC1E,EAAKyxD,mBAEP,qBAAwB,CACtB,IACOusD,EADY,UAAMniH,WACY4L,UAA9Bu2G,gBACHA,GAAmBA,EAAgBj+G,YAIrC,EAAKmwD,YAAYsjG,WACnB,EAAKD,YAAc,IAAI,EAAJ,QAAgB,KAGvC75J,KAAKi6I,iCAAmC,WAAsB,IAArBmlB,EAAqB,uDAAT,KAC7ClkJ,GAAS,IAAAC,oBACTkkJ,EAAuBnkJ,EAAOo2F,eAAe,EAAK6gC,wBAAwB,GAC1ER,EAAsBz2H,EAAOo2F,eAAe,EAAKliD,WAAW,GAC5DkwG,GAA0B,IAAAC,gCAA+BF,EAAsBD,GACrF,GAAIE,GAA2BF,EAAWz7J,WAAaguI,EAAqB,CAC1E,IAAM6tB,EAAY,UAAiBC,6BAA6BL,EAAWz7J,UAAUmF,kBAAmBu2J,EAAqB3+J,aAE7H,GAAI8+J,GAAaA,EAAU77J,UAAW,CACpC,IAAM+7J,EAAyBF,EAAUG,4BACnCC,GAAoB,IAAAC,0CAAyCH,EAAwB/tB,EAAoBhuI,WAE3Gi8J,GAEF,EAAKztB,uBAAyBqtB,EAAU77J,UAAUqE,GAClD,EAAKqvD,aAAauoG,EAAkB53J,MAEpC,UAAMic,UAAS,IAAAumF,8BAA6B,EAAKxiG,KACjD,UAAMic,UAAS,IAAAitC,gDAA8C,MAKnE,OAAO,GAETlxD,KAAKosD,gBAAkB,WACrB,IAAK,IAAI73D,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChC,GAAIqlD,EAAMrlD,GAAG82D,aACX,OAAOzR,EAAMrlD,IAInByL,KAAK2sD,kBAAoB,WACvB,IAAK,IAAIp4D,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAEhC,GADAqlD,EAAMrlD,GAAGurK,mBAAmB,UAAiB3zE,eACzCvyC,EAAMrlD,GAAG82D,aACX,OAAOzR,EAAMrlD,IAInByL,KAAK6sD,6BAA+B,WAClC,IAAK,IAAIt4D,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChC,GAAIqlD,EAAMrlD,GAAGwrK,kBACX,OAAOnmH,EAAMrlD,GAAG0+D,YAItBjzD,KAAKggK,sBAAwB,WAC3B,IAAK,IAAIzrK,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChC,GAAIqlD,EAAMrlD,GAAG0rK,uBACX,OAAOrmH,EAAMrlD,GAAG0+D,YAItBjzD,KAAK+rD,cAAgB,WACnB,IAAK,IAAIx3D,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChC,GAAIqlD,EAAMrlD,GAAGgkE,GAAGlN,aACd,OAAOzR,EAAMrlD,GAAGgkE,IAItBv4D,KAAKisD,qBAAuB,WAC1B,IAAK,IAAI13D,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChC,GAAIqlD,EAAMrlD,GAAG23D,gBAAiB,4BAC5B,YAAkBtS,EAAMrlD,GAAGy+I,eAAektB,YAA1C,+CAAuD,KAA9Cl0G,EAA8C,QACrD,GAAIA,EAAMX,aACR,OAAOW,GAHiB,gFASlChsD,KAAKmgK,cAAgB,WACnB,IAAK,IAAI5rK,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChC,GAAIqlD,EAAMrlD,GAAG6rK,cAAgBxmH,EAAMrlD,GAAG6rK,aAAalH,YACjD,OAAOt/G,EAAMrlD,GAAG6rK,cAItBpgK,KAAKqgK,qBAAuB,WAC1B,IAAK,IAAI9rK,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChC,GAAIqlD,EAAMrlD,GAAGgkE,GAAG+nG,mBACd,OAAO1mH,EAAMrlD,GAAGgkE,IAItBv4D,KAAK8pD,UAAY,WACf,IAAK,EAAK6vG,kBAAmB,CAC3B,IAAI1zG,EAAS,EAAKi6G,YAElB,EAAKvG,kBAAoB,UAAYlvG,eAAexE,GAEtD,OAAO,EAAK0zG,mBAMd35J,KAAK+pD,UAAY,SAAC7yD,GAChB,EAAKyiK,kBAAoBziK,GAE3B8I,KAAKyrD,SAAW,WAAuC,IAAtC80G,EAAsC,wDACrD,GAAIA,EAA2B,CAC7B,IAAMC,EAAoB,GAQ1B,OAPA5mH,EAAMx7C,SAAQ,SAAA2wD,GACRA,EAAKrD,gBACP80G,EAAkBzrK,KAAlB,MAAAyrK,GAAA,aAA0BzxG,EAAKpD,eAAe80G,oBAE9CD,EAAkBzrK,KAAKg6D,MAGpByxG,EAGT,OAAO5mH,GAET55C,KAAK0gK,wBAA0B,WAE7B,OADA,EAAK9G,mBAAoB,IAAA+G,4BAA2B,EAAKl1G,YAClD,EAAKmuG,mBAEd55J,KAAK4gK,qBAAuB,WAC1B,OAAO,EAAKhH,mBAEd55J,KAAK4yD,eAAiB,WACpB,IAAMiuG,EAAc,GAKpB,OAJAjnH,EAAMx7C,SAAQ,SAAA2wD,QACYiE,IAApBjE,EAAKkE,YACP4tG,EAAY9rK,KAAKg6D,EAAKkE,eAEnB4tG,GAET7gK,KAAKkgK,UAAY,WACf,OAAO,EAAKz0G,WAAW3jD,KAAI,SAAAinD,GAAA,OAAQA,EAAK0C,SAE1CzxD,KAAK8gK,gBAAkB,WACrB,OAAO,EAAKr1G,WAAW3jD,KAAI,SAAAinD,GAAU,MAAO,CAC1C30C,EAAGhQ,KAAK2nE,QAAQhjB,EAAK0C,KAAKr3C,GAAI,GAC9BC,EAAGjQ,KAAK2nE,QAAQhjB,EAAK0C,KAAKp3C,GAAI,GAC9BrS,GAAI+mD,EAAK0C,KAAKzpD,QAGlBhI,KAAK+gK,wBAA0B,SAAC7pK,GAC9B,EAAK8jK,qBAAuB9jK,GAE9B8I,KAAKghK,wBAA0B,WAC7B,OAAO,EAAKhG,sBAEdh7J,KAAKy3I,wBAA0B,WAAsC,IAArCF,EAAqC,wDACnE,OAAO,EAAK9rF,WAAW3jD,KAAI,SAAAinD,GAAU,uBAAWA,EAAK0C,KAAKwvG,uBAAuB1pB,GAA5C,CAAuEvvI,GAAI+mD,EAAK0C,KAAKzpD,SAE5HhI,KAAK+3I,oBAAsB,WACzB,OAAO,EAAKtsF,WAAW3jD,KAAI,SAAAinD,GAAU,wBAAW,IAAAxE,eAAcwE,EAAK0C,KAAKr3C,EAAG20C,EAAK0C,KAAKp3C,EAAG,GAAnD,CAA0DrS,GAAI+mD,EAAK0C,KAAKzpD,SAE/GhI,KAAKkhK,0BAA4B,WAU/B,GAAI,EAAK1qG,aAAe,EAAA2qG,sBAAsBhnK,SAAS,EAAKq8D,YAAY4qG,aAAc,CACpF,IAAMC,EAAoB,EAAK5pB,0BAC/B,OAAO,IAAA18D,+BAA8BsmF,EAAkB,GAAIA,EAAkB,GAAIA,EAAkBA,EAAkB5sK,OAAS,GAAI4sK,EAAkBA,EAAkB5sK,OAAS,IAAI,GAAM,GAG3L,OAAO,EAAKyrK,YAAY,GAAGe,0BAE7BjhK,KAAK8yD,YAAc,SAAS9qD,GAC1B,OAAOhI,KAAKyrD,WAAW3/C,MAAK,SAACijD,GAAD,OAAUA,EAAK/mD,KAAOA,MAEpDhI,KAAKk/J,aAAe,WAClB,IACEoC,EADE7nF,SA4BJ,OAxBAA,EAAuC,aAA3B,UAAW7sE,YAA6B,EAAKkoD,iBAAmB,EAAKC,sBAEjF0kB,GAAwC,aAA3B,UAAW7sE,YAA6B,EAAK20J,kBAAmB,IAAA5pF,eAAc,EAAK4pF,kBAIhG9nF,GAAa,EAAKnnB,sBAGlBgvG,EAAkB,EAAKE,qBACvB/nF,GAAwC,aAA3B,UAAW7sE,YAA6B00J,GAAkB,IAAA3pF,eAAc2pF,GAGrF7nF,GAAa,EAAKgoF,yBAGlBhoF,GAAa,EAAKioF,iCAGlBjoF,GAAa,EAAKkoF,uBAQpB3hK,KAAKuhK,eAAiB,WACpB,IAAMt7G,EAAS,EAAKi6G,YAChB0B,EAAwB,EAE5B,SAASC,EAAaC,EAAYC,EAAYpiK,GAC5C,IAAMy9H,EAAY,CAChBhjH,EAAG2nJ,EAAW3nJ,EAAI0nJ,EAAW1nJ,EAC7BC,EAAG0nJ,EAAW1nJ,EAAIynJ,EAAWznJ,GAGzB5lB,EAAS2V,KAAKynE,KAAK,SAAAurD,EAAUhjH,EAAK,GAAf,SAAmBgjH,EAAU/iH,EAAK,IACrD2nJ,GACA5kC,EAAU/iH,EAAI5lB,EADdutK,EAED5kC,EAAUhjH,EAAI3lB,EAWnB,MAAO,CARM,CACX,CAACqtK,EAAW1nJ,EAAI4nJ,EAASriK,EAAQ,EAAGmiK,EAAWznJ,EAAI2nJ,EAASriK,EAAQ,GACpE,CAACmiK,EAAW1nJ,EAAI4nJ,EAASriK,EAAQ,EAAGmiK,EAAWznJ,EAAI2nJ,EAASriK,EAAQ,GACpE,CAACoiK,EAAW3nJ,EAAI4nJ,EAASriK,EAAQ,EAAGoiK,EAAW1nJ,EAAI2nJ,EAASriK,EAAQ,GACpE,CAACoiK,EAAW3nJ,EAAI4nJ,EAASriK,EAAQ,EAAGoiK,EAAW1nJ,EAAI2nJ,EAASriK,EAAQ,GACpE,CAACmiK,EAAW1nJ,EAAI4nJ,EAASriK,EAAQ,EAAGmiK,EAAWznJ,EAAI2nJ,EAASriK,EAAQ,KAMxE,IAAK,IAAIpL,EAAI,EAAGA,EAAI0xD,EAAOxxD,OAAQF,IAAK,CACtC,IAAMgmF,EAAOt0B,GAAQ1xD,EAAI,EAAI0xD,EAAOxxD,QAAUwxD,EAAOxxD,QAC/C+/G,EAAUvuD,EAAO1xD,GACjB0tK,EAAOh8G,GAAQ1xD,EAAI,GAAK0xD,EAAOxxD,QAE/B+/C,GAAQ,IAAAuqF,wBAAuBxkD,EAAMi6B,EAASytD,GAIpD,GAA0B,IAAtB73J,KAAKC,MAAMmqC,KAAiBpqC,KAAKC,MAAMmqC,GAAS,IAAMpqC,KAAKC,MAAMmqC,GAAS,IAAK,CACjF,IAGM0tH,EAAQL,EAAatnF,EAAMi6B,EAHd,IAIb2tD,EAAQN,EAAartD,EAASytD,EAJjB,IAMbG,EAAe,UAAgBA,aAAa,CAACF,GAAQ,CAACC,IAE5D,GAAIC,GAAgBA,EAAa3tK,OAAS,EAAG,CAC3C,IAAIglF,EAAY,EAChB2oF,EAAahkK,SAAQ,SAAC8zC,GACpBunC,IAAa,IAAA4oF,qCAAoCnwH,MAGnD0vH,GAAyBnoF,EACzBzhF,QAAQ4B,IAAI,wBAAyB6/E,QAErCzhF,QAAQ4B,IAAI,0BAKlB,OAAOgoK,GAGT5hK,KAAKsiK,aAAe,WAClB,OAAOl4J,KAAKkI,MAAK,IAAAmlE,cAAaz3E,KAAKk/J,kBAGrCl/J,KAAKuiK,iBAAmB,WAEtB,OADmB,UAAMpgK,WACP+qD,kBAAkB1Q,eAAex1C,QAAO,SAAAw1C,GACxD,OAAO5C,EAAM35C,MAAK,SAAA8uD,GAAA,OAAQvS,EAAewS,eAAiBD,EAAK/mD,UAInEhI,KAAK0hK,+BAAiC,WACpC,IAAIjoF,EAAY,EAWhB,OAVc,EAAKhuB,WACbrtD,SAAQ,SAAA2wD,GACZ,GAAIA,EAAKyzG,0BAA4BzzG,EAAKyzG,2BAA6BzzG,EAAK0zG,gCAAiC,CAC3G,IAAMC,EAAmB,UAAqB9lH,UAAU+lH,oBAAoB5zG,EAAK/mD,IAC7E06J,IACFjpF,GAAaipF,EAAiBE,eAK7BnpF,GAGTz5E,KAAKyhK,uBAAyB,WAC5B,IAAIhoF,EAAY,EAShB,OAPc,EAAK8oF,mBACbnkK,SAAQ,SAAAoyC,GACZ,IAAMue,EAAO,UAAU+D,YAAYtiB,EAAKwe,cAClC8E,EAAoC,aAAvB,UAAOlnD,YAA6BmiD,EAAKyF,gBAAkBzF,EAAK0F,kBACnFglB,IAAa,IAAA/kB,aAAY3F,EAAM+E,EAAYtjB,EAAK4e,cAG3CqqB,GAGTz5E,KAAKwhK,mBAAqB,WACxB,IAAI/nF,EAAY,EAUhB,OATkB,UAAYopF,qBAAqB,GACvCzkK,SAAQ,SAAA4tD,GACdA,EAAMxX,MACRilC,GAAcztB,EAAMxX,MAAQwX,EAAMxX,MAAQ,EAAK,EACtCwX,EAAM1P,YACfm9B,GAAcztB,EAAM1P,UAAY0P,EAAM1P,UAAY,EAAK,MAIpDm9B,GAGTz5E,KAAKsyD,oBAAsB,WACzB,IAAIzU,EAAO,EASX,OARAjE,EAAMx7C,SAAQ,SAAC2wD,GACTA,EAAKrD,iBAAmBqD,EAAKpD,iBAC/B9N,GAA+B,aAAvB,UAAOjxC,YACXmiD,EAAKpD,eAAe2G,sBAAsBE,OAC1CzD,EAAKpD,eAAe2G,sBAAsBC,gBAI3C1U,GAGT79C,KAAK2hK,oBAAsB,WACzB,IAAIloF,EAAY,EAOhB,OANA7/B,EAAMx7C,SAAQ,SAAA2wD,GACRA,EAAK7C,iBAAmB6C,EAAKikF,iBAC/Bv5D,GAAa1qB,EAAKikF,eAAe2uB,0BAI9BloF,GAGTz5E,KAAK80D,eAAiB,WA8BpB,MAtBuB,WAAnB7vD,EAAKqxD,WAMqB,cAAnBrxD,EAAKqxD,WAMLrxD,EAAKqxD,UAPAt2D,KAAKq9E,4BAoBvBr9E,KAAKq9E,yBAA2B,WAC9B,OAAO,IAAAA,0BAAyBzjC,IAGlC55C,KAAK0rD,cAAgB,WACnB,OAAO9R,EAAM35C,MAAK,SAAC8uD,GACjB,OAAOA,EAAKrD,oBAIhB1rD,KAAKksD,cAAgB,WACnB,OAAOtS,EAAM35C,MAAK,SAAC8uD,GACjB,OAAOA,EAAK7C,oBAIhBlsD,KAAK+0D,oBAAsB,WACzB,OAAO,IAAA4iB,eAAc33E,KAAKq9E,6BAoB5B,IAAIylF,GAA2B,SAACC,EAAYtkF,EAAOm/E,EAAiBoF,EAAWC,EAAgBC,EAAaC,EAAaC,GAErH3kF,EAAMvnF,MADJ6rK,GACatkF,EAAMvnF,MAAQ,GAEdunF,EAAMvnF,MAAQ,EAG/B+N,EAAKo+J,uBAAuB5kF,EAAOm/E,EAAiBoF,EAAWC,EAAgBC,EAAaC,EAAaC,IAGrGE,GAAY,SAACl7G,GACjB,IAAIrG,EAAQ,UAAUkJ,WAClBpC,GAAS9hD,GAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACnD+G,GAAS/hD,GAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAEnD6tG,EAAiB,UAAMztJ,WAAWwH,cAAcimJ,eACpD,GAAI,EAAKp5F,YAAY6nG,SAAWzO,EAAgB,CAC9C,IAAM9V,EAAgB8V,EAAiB,EAAKvc,UAAUyG,cAAgB,EAAKA,cAC3E,UAAqB18F,mBAAmBmmH,uBAAuBzpB,GAC/D,UAAqB18F,mBAAmBomH,wBAAwB,GAAM,GAGpE5T,GAYF,EAAK8J,QAAQt/I,GAAKyuC,EAClB,EAAK6wG,QAAQr/I,GAAKyuC,GAIlB,EAAK+B,YAAY,CACfzwC,EAAG,EAAKktC,IAAIltC,EAAIyuC,EAChBxuC,EAAG,EAAKitC,IAAIjtC,EAAIyuC,IAIpB/hD,GAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,EACrCrT,GAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAIvCra,KAAKyjK,oCAAsC,SAAC1oC,GAC1C,GAAIA,EAAkBtmI,OAAS,EAAG,CAChC,IAAIstD,EAAQ,UAAUkJ,WAClB+vE,GAAcA,EAAdA,cAAkB,EAAK0+B,SAC3B3+B,EAAkB38H,SAAQ,SAAC88H,GACzB,OAAQA,EAAKrlD,aACX,IAAK,aACHmlD,EAAY3gH,GAAK6gH,EAAKpD,KAAO/1E,EAC7B,MACF,IAAK,WACHi5E,EAAY5gH,GAAK8gH,EAAKpD,KAAO/1E,EAGjC,EAAKsxF,UAAUqwB,eAAe1oC,QAKpC,IAAM2oC,GAAmB,SAACv7G,GAaxB,IAZA,IAAMrG,EAAQ,UAAUkJ,WACtB24G,EAAK,UAAUh5G,YACftD,EAAMriD,EAAK+lD,cACX4pB,EAAS,CACPx6D,EAAGguC,EAAShuC,EAAKktC,EAAIltC,EAAI2nC,EAAS6hH,EAAGxpJ,EACrCC,EAAG+tC,EAAS/tC,EAAKitC,EAAIjtC,EAAI0nC,EAAS6hH,EAAGvpJ,GAEvCwpJ,EAAQ,GACRC,EAAQ,GACRC,EAAS,GACTC,EAAS,GAEFzvK,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAAK,CACrC,IAAM+lI,EAAa,UAAUA,aAC7B,GAAI1gF,EAAMrlD,GAAG82D,WAAWivE,KAAgBA,GACnC1gF,EAAMrlD,GAAGwrK,mBACTnmH,EAAMrlD,GAAG0rK,uBAIZ,OAFAxC,IAAqB,GAEdD,IAAY,GAErB,IAAIyG,EAAkBrqH,EAAMrlD,GAAGk9D,KAAKmqE,oBAChCsoC,EAAatqH,EAAMrlD,GAAGk9D,KAAKr3C,EAC3B+pJ,EAAavqH,EAAMrlD,GAAGk9D,KAAKp3C,EAE/B,OAAQ4pJ,GACN,IAAK,UACHJ,EAAM9uK,KAAKmvK,EAAaniH,EAAQ22G,GAChCoL,EAAM/uK,KAAKovK,EAAapiH,EAAQ22G,GAChC,MACF,IAAK,WACHmL,EAAM9uK,KAAKmvK,EAAaniH,EAAQ22G,GAChCoL,EAAM/uK,KAAKovK,EAAapiH,EAAQ22G,GAChC,MACF,IAAK,cACHmL,EAAM9uK,KAAKmvK,EAAaniH,EAAQ22G,GAChCoL,EAAM/uK,KAAKovK,EAAapiH,EAAQ22G,GAChC,MACF,IAAK,aACHmL,EAAM9uK,KAAKmvK,EAAaniH,EAAQ22G,GAChCoL,EAAM/uK,KAAKovK,EAAapiH,EAAQ22G,GAChC,MACF,QACEmL,EAAM9uK,KAAKmvK,EAAaniH,GACxB+hH,EAAM/uK,KAAKovK,EAAapiH,GAG5BgiH,EAAOhvK,KAAKmvK,EAAaniH,GACzBiiH,EAAOjvK,KAAKovK,EAAapiH,GAE3B,IAAIqiH,EAAYn/J,EAAKomD,aAiBrB,OAdAmyG,IADiB,aAAO5jH,EAAMnlD,OAAQovK,EAAOC,EAAOlvF,EAAOx6D,EAAGw6D,EAAOv6D,IAErEojJ,IAAqB,aAAO7jH,EAAMnlD,OAAQsvK,EAAQC,EAAQpvF,EAAOx6D,EAAGw6D,EAAOv6D,IAC3EpV,EAAK61J,iBAAiB18J,SAAQ,SAACw/J,GACL,cAAnB34J,EAAKqxD,YACJsnG,EAAgB5E,mBACjB/zJ,EAAK61J,iBAAiB76J,MAAK,SAAAokK,GAAA,OAAWA,EAAQrL,kBAAoB,KACrE4E,EAAgB1E,WAAY,EAE5B0E,EAAgB1E,WAAY,IAAAoL,aAAY3G,GAAwBC,GAAkBx1G,MAGlFg8G,IAAcn/J,EAAKomD,cACrB,UAAiBpC,YAAYhkD,GAExB,EAAKomD,cAIR1C,GAAc,SAACP,EAAUjyD,GAC7B,OAAIA,EAAEyyD,YAAc7hD,GAAM+/C,WACxB22G,IAAqB,GACdD,IAAY,IAEjBmG,GAAiBv7G,IAEfnjD,EAAK0wD,SACP1wD,EAAK0wD,QAAQ1wD,GAG6B,gBAAxC,UAAW29C,UAAUsC,gBAEnBjgD,EAAKymD,iBAAmBzmD,EAAKinD,mBAC/B,UAAiB5D,aAAY,GAC7B,UAAiBC,UAAU,OAAQtjD,IAE5B8B,GAAM+/C,YAAc,UAAUyC,iBACvC,UAAiBhB,UAAU,OAAQtjD,GAAM,GAGzCq+J,GAAUl7G,GACVm8G,MACU,UAAUh7G,iBACpB,UAAiBhB,UAAU,OAAQtjD,GAE9B8B,GAAM+/C,YAGX//C,GAAM+/C,YAAc,UAAUyC,kBAChC,UAAiBhB,UAAU,OAAQtjD,GAAM,GACzCq+J,GAAUl7G,IAaZ,UAAiBa,YAAYhkD,IACtB,IAEHm8F,GAAa,SAACh5C,EAAUjyD,KAMxBqyD,GAAY,SAACJ,EAAUjyD,GAI3B,UAAiBktG,iBAAiB,GAClC,EAAKw5D,oBAAmB,GACxB,EAAK2H,sBACD,EAAKn5G,eACPo5G,KACA,EAAKzK,mBAAmB0K,qCACpB39J,GAAM+/C,WACR,EAAKmzG,iBAAiB0K,6BAG1B59J,GAAM+/C,WAAY,EAClB//C,GAAMggD,kBAAoB,MAGtBoB,GAAc,SAACC,EAAUjyD,GAG7B,GAAI,EAAKk1D,aAAc,CAerB,GAbIl1D,EAAEyuK,WACA,UAAqBvnH,eAAewnH,gBAAgB,GACtD,UAAqBxnH,eAAeynH,yBAAyB,GAE7D,UAAqBznH,eAAe0nH,oBAAoB,IAG5D,EAAK7K,YAAY8K,wBACjBC,KACI,UAAiBthE,YAAY3pG,QAAQ,SAAW,IAClD+M,GAAM+/C,WAAY,EAClB//C,GAAMggD,kBAAoBqB,GAExB,UAAWpC,UAAUI,YAAa,CAEpC,GAAInhD,EAAKymD,iBAAmBzmD,EAAKinD,iBAAmB,EAAKwuG,eAAyC,IAAxB,EAAK7jB,eAC7E,OAIF5xI,EAAK61J,iBAAiB18J,SAAQ,SAACw/J,GACzBA,EAAgB1E,UAElBj0J,EAAKigK,yBAAyBtH,GAE9BA,EAAgBzE,UAAW,KAG1Bl0J,EAAK61J,iBAAiB76J,MAAK,SAAA29J,GAAA,OAAmBA,EAAgBzE,aACjEl0J,EAAKkgK,wBAIT,GAAI,EAAK7+J,SAAW,EAAAipC,cAAcqB,gBAAiB,CACjD,IACMi3D,EADa,UAAM1lG,WACOytD,cAAci4C,aAC1CA,IAAiB,EAAAh0D,0BAA0BE,iBAC7C,EAAKs/F,UAAU+xB,qBAAqBh9G,GACpC,EAAKu0G,oBAAmB,IACf90D,IAAiB,EAAAh0D,0BAA0BC,oBACpD,EAAKu/F,UAAUgyB,uBAAuBj9G,GACtC,EAAKu0G,oBAAmB,IAI5B,OAAO,EAET,OAAO,GAGH4H,GAA+B,WACnC,GAAI,UAAUjqC,aAAc,CAC1B,IAAMgrC,EAAkB,UAAcC,iBAClCD,GACFA,EAAgB9vG,SAKhBivG,GAAkC,WACtC,GAAI,UAAUnqC,aAAc,CAC1B,IAAMgrC,EAAkB,UAAcC,iBAClCD,GACFA,EAAgBjT,YAKhB4S,GAAwB,WACT,UAAU3qC,cAEX,EAAKh0H,SAAW,EAAAipC,cAAcqB,iBAC9C,UAAgB40H,gBAAgB,IAIpC,SAASC,KACP,IAAMC,EAAetsK,SAAS02F,eAAe,iBACvC61E,EAAc,GAAGttK,MAAMxD,KAAKuE,SAASwsK,iBAAiB,iCAGxDF,IACFA,EAAarxJ,MAAMwxJ,QAAU,OAE7BF,EAAYvnK,SAAQ,SAAU0nK,GAC5BA,EAAKC,WAAWC,aAAaF,EAAKG,WAAU,GAAOH,OAMzD,SAASI,GAAwBhvK,GAC/B,IAAMwuK,EAAetsK,SAAS02F,eAAe,iBACvCq2E,EAAe,GAAG9tK,MAAMxD,KAAK6wK,EAAaE,iBAAiB,mCAC3DQ,EAAiB,GAAG/tK,MAAMxD,KAAK6wK,EAAaE,iBAAiB,qCAEnEO,EAAa/nK,SAAQ,SAACi5G,GAChBngH,IAAUshK,GACZnhD,EAAOhjG,MAAMwxJ,QAAU,OACvBQ,cAAct/J,GAAM6xJ,cAEpBvhD,EAAOhjG,MAAMwxJ,QAAU,WAG3BO,EAAehoK,SAAQ,SAACi5G,GAClBngH,IAAUuhK,GACZphD,EAAOhjG,MAAMwxJ,QAAU,OACvBQ,cAAct/J,GAAM6xJ,cAEpBvhD,EAAOhjG,MAAMwxJ,QAAU,WAS7B7lK,KAAKo+E,mBAAqB,WACxB,IAAIkoF,EAAc,GADY,uBAE9B,YAAmB1sH,EAAnB,+CAA0B,KAAfmV,EAAe,QACxBu3G,EAAYvxK,MAAK,IAAAw1D,eAAcwE,EAAK0C,KAAKr3C,EAAG20C,EAAK0C,KAAKp3C,EAAG00C,KAH7B,6EAK9B,OAAOu3G,GAETtmK,KAAKwkK,oBAAsB,WACzB,GAAI,EAAKtF,eAAiB,EAAG,CAC3B,EAAKqH,gBACL,IACM1tG,EADQ,UAAM12D,WACa4L,UAAU8qD,mBAE3C,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,MAG/D74D,KAAKumK,cAAgB,WACnB,IAAMC,EAAiB,EAAKC,qBAAqBrnD,UACjDxlE,EAAMx7C,SAAQ,SAAC2wD,EAAM23G,GACnB33G,EAAK0C,KAAK1I,OAAO,CACf3uC,EAAGosJ,EAAeE,GAAWtsJ,EAC7BC,EAAGmsJ,EAAeE,GAAWrsJ,IAE/B00C,EAAK0C,KAAKk1G,WAAW,CACnBvsJ,EAAGosJ,EAAeE,GAAWtsJ,EAC7BC,EAAGmsJ,EAAeE,GAAWrsJ,QAInCra,KAAKymK,mBAAqB,WACxB,IAAIH,EAAc,GADY,uBAE9B,YAAmB1sH,EAAnB,+CAA0B,KAAfmV,EAAe,QACxBu3G,EAAYvxK,KAAK,CAACqlB,EAAG20C,EAAK0C,KAAKr3C,EAAGC,EAAG00C,EAAK0C,KAAKp3C,KAHnB,6EAK9B,OAAOisJ,GAETtmK,KAAK4mK,oBAAsB,WAAY,WACrChtH,EAAMx7C,SAAQ,SAAC2wD,EAAM23G,GAAc,2BACjC,YAA8BzhK,EAAK61J,iBAAnC,+CAAqD,KAA1C8C,EAA0C,QACnD,IAAI,EAAKiJ,8BAA8BjJ,GAGvC,GAAI8I,IAAc9I,EAAgB3/B,OACX2/B,GAAsD,UAAnCA,EAAgBvE,eAA8BtqG,EAAK0C,KAAO1C,EAAKwJ,IAC3FuuG,kBAAoB,QAC3B,GAAIJ,IAAc9I,EAAgB1/B,MAAO,EACtB0/B,GAAsD,UAAnCA,EAAgBvE,eAA8BtqG,EAAKwJ,GAAKxJ,EAAK0C,MACzFq1G,kBAAoB,KAVN,kFAkBrC9mK,KAAKmlK,sBAAwB,WAC3BlgK,EAAK61J,iBAAiB18J,SAAQ,SAACw/J,GAC7BA,EAAgBzE,UAAW,EAC3ByE,EAAgB1E,WAAY,KAG9BuM,MAEFzlK,KAAKklK,yBAA2B,SAAUtH,GACxC6H,KACA7H,EAAgBzE,UAAW,EAC3B,IAAMuM,EAAetsK,SAAS02F,eAAe,iBACvCrR,EAAQrlF,SAAS02F,eAAe,eAChCq2E,EAAe,GAAG9tK,MAAMxD,KAAK6wK,EAAaE,iBAAiB,mCAC3DQ,EAAiB,GAAG/tK,MAAMxD,KAAK6wK,EAAaE,iBAAiB,qCAC7DD,EAAcQ,EAAah5G,OAAOi5G,GAClCW,EAAc,GAAG1uK,MAAMxD,KAAK6wK,EAAaE,iBAAiB,uCAEhE,IAAI5lK,KAAK6mK,8BAA8BjJ,GAAvC,CAGAn/E,EAAMyQ,aAAa,MAAOspE,EAAS1gJ,YACnC2mE,EAAMyQ,aAAa,MAAOupE,EAAS3gJ,YACnC4tJ,EAAarxJ,MAAMwxJ,QAAU,OAG7BpnF,EAAMvnF,MAAQ,GAAK0mK,EAAgB5E,kBAGnCv6E,EAAMo8C,IAAO+iC,GAAiD,cAA9BA,EAAgBtnG,WAA6BsnG,GAAsD,UAAnCA,EAAgBvE,eAA8B,GAAKZ,EACnJh6E,EAAMm8C,IAAOgjC,GAAiD,cAA9BA,EAAgBtnG,WAA6BsnG,GAAsD,UAAnCA,EAAgBvE,eAA8B,EAAIb,EAClJ0N,IAAwBznF,EAAMvnF,OAE9Bw3F,YAAW,WACT,IAAMs4E,EAAkB5tK,SAASg9F,cAAc,kBAC3C4wE,IACF,aAAEA,GAAiBx5E,QAAQ,CAACy5E,WAAW,aAAED,GAAiBnnK,UAAW,OAEtE,KAGH,IAKIqjK,EAAaC,EALXH,EAAapF,GAAsD,UAAnCA,EAAgBvE,eAA8Bz/G,EAAMgkH,EAAgB3/B,OAAOxsE,KAAO7X,EAAMgkH,EAAgB3/B,OAAO1lE,GAC/I0qG,EAAkBrF,GAAsD,UAAnCA,EAAgBvE,eAA8Bz/G,EAAMgkH,EAAgB1/B,OAAO3lE,GAAK3e,EAAMgkH,EAAgB1/B,OAAOzsE,KAClJ2xG,EAAcxF,GAAsD,UAAnCA,EAAgBvE,eAA8Bz/G,EAAMgkH,EAAgB3/B,MAAQ,GAAKrkF,EAAMgkH,EAAgB3/B,MAAQ,GAChJipC,EAAsBttH,EAAMgkH,EAAgB1/B,OAAO1pE,gBAIzD,OAAQopG,EAAgBtnG,WACtB,QACA,IAAK,YACL,IAAK,YACCsnG,GAAsD,UAAnCA,EAAgBvE,eAIc,SAA/C+J,EAAW9lC,mBAAmBlB,cAChC8mC,EAAc,CAAC9oJ,EAAG6oJ,EAAe7oJ,EAAI8sJ,EAAqB7sJ,EAAG2oJ,EAAU3oJ,GACvE8oJ,EAAc,CAAC/oJ,EAAG6oJ,EAAe7oJ,EAAI8sJ,EAAqB7sJ,EAAG4oJ,EAAe5oJ,IACpB,SAA/C+oJ,EAAW9lC,mBAAmBlB,cACvC8mC,EAAc,CAAC9oJ,EAAG6oJ,EAAe7oJ,EAAI8sJ,EAAqB7sJ,EAAG2oJ,EAAU3oJ,GACvE8oJ,EAAc,CAAC/oJ,EAAG6oJ,EAAe7oJ,EAAI8sJ,EAAqB7sJ,EAAG4oJ,EAAe5oJ,IACpB,UAA/C+oJ,EAAW9lC,mBAAmBlB,cACvC8mC,EAAc,CAAC9oJ,EAAG4oJ,EAAU5oJ,EAAGC,EAAG4oJ,EAAe5oJ,EAAI6sJ,GACrD/D,EAAc,CAAC/oJ,EAAG6oJ,EAAe7oJ,EAAGC,EAAG4oJ,EAAe5oJ,EAAI6sJ,IACF,UAA/C9D,EAAW9lC,mBAAmBlB,eACvC8mC,EAAc,CAAC9oJ,EAAG4oJ,EAAU5oJ,EAAGC,EAAG4oJ,EAAe5oJ,EAAI6sJ,GACrD/D,EAAc,CAAC/oJ,EAAG6oJ,EAAe7oJ,EAAGC,EAAG4oJ,EAAe5oJ,EAAI6sJ,IAOT,SAA/C9D,EAAW9lC,mBAAmBlB,cAChC8mC,EAAc,CAAC9oJ,EAAG6oJ,EAAe7oJ,EAAI8sJ,EAAqB7sJ,EAAG4oJ,EAAe5oJ,GAC5E8oJ,EAAc,CAAC/oJ,EAAG6oJ,EAAe7oJ,EAAI8sJ,EAAqB7sJ,EAAG2oJ,EAAU3oJ,IACf,SAA/C+oJ,EAAW9lC,mBAAmBlB,cACvC8mC,EAAc,CAAC9oJ,EAAG6oJ,EAAe7oJ,EAAI8sJ,EAAqB7sJ,EAAG4oJ,EAAe5oJ,GAC5E8oJ,EAAc,CAAC/oJ,EAAG6oJ,EAAe7oJ,EAAI8sJ,EAAqB7sJ,EAAG2oJ,EAAU3oJ,IACf,UAA/C+oJ,EAAW9lC,mBAAmBlB,cACvC8mC,EAAc,CAAC9oJ,EAAG6oJ,EAAe7oJ,EAAGC,EAAG4oJ,EAAe5oJ,EAAI6sJ,GAC1D/D,EAAc,CAAC/oJ,EAAG4oJ,EAAU5oJ,EAAGC,EAAG4oJ,EAAe5oJ,EAAI6sJ,IACG,UAA/C9D,EAAW9lC,mBAAmBlB,eACvC8mC,EAAc,CAAC9oJ,EAAG6oJ,EAAe7oJ,EAAGC,EAAG4oJ,EAAe5oJ,EAAI6sJ,GAC1D/D,EAAc,CAAC/oJ,EAAG4oJ,EAAU5oJ,EAAGC,EAAG4oJ,EAAe5oJ,EAAI6sJ,IAO7DxB,EAAarxJ,MAAMy9B,KAAOkxH,EAAUz4G,gBAAgBnwC,EAAI,KACxDsrJ,EAAarxJ,MAAMnP,IAAM89J,EAAUz4G,gBAAgBlwC,EAAI,KAGvDokE,EAAM0oF,QAAU,kBAAMliK,EAAKo+J,uBAAuB5kF,EAAOm/E,EAAiBoF,EAAWC,EAAgBC,EAAaC,EAAaC,IAC/H3kF,EAAM2oF,QACN3oF,EAAM4oF,UAAY,SAASlxK,GAJT,KAKZA,EAAE8oG,SACJ9oG,EAAEugB,OAAO4wJ,QAQb7oF,EAAM8oF,OAAS,aAOf,IAAIC,SAEAC,GAAa,EACjB9B,EAAYvnK,SAAQ,SAAUspK,GAgC5BA,EAAM7gH,iBAAiB,aA/BF,SAAC1wD,GACpBA,EAAE20F,kBACF30F,EAAE40F,iBACF,IAAMg4E,EAAgD,qBAAnC5sK,EAAEwxK,cAAc11G,QAAQvxB,OAE3C8mI,EAAc94E,YAAW,WACvB84E,EAAc,KACdC,GAAa,EAEb1gK,GAAM6xJ,YAAcgP,aAAY,WAC1BH,GACF3E,GAAyBC,EAAYtkF,EAAOm/E,EAAiBoF,EAAWC,EAAgBC,EAAaC,EAAaC,KAEnH,MAhBO,QAmCdsE,EAAM7gH,iBAAiB,WAfJ,SAAC1wD,GAClB,GAAIqxK,EAAa,CACf7lB,aAAa6lB,GAEb,IAAMzE,EAAgD,qBAAnC5sK,EAAEwxK,cAAc11G,QAAQvxB,OAC3CoiI,GAAyBC,EAAYtkF,EAAOm/E,EAAiBoF,EAAWC,EAAgBC,EAAaC,EAAaC,QAI3GqE,IACPA,GAAa,EACbpB,cAAct/J,GAAM6xJ,oBAM1BmO,EAAY,GAAGlgH,iBAAiB,QAAS5hD,EAAKkgK,uBAE9Cz2E,YAAW,WACTt1F,SAASytD,iBAAiB,QAASygH,KAClC,KAtDH,SAASA,EAAKnxK,IACP,aAAEA,EAAEugB,QAAQuqI,QAAQ,cACvBxiE,EAAM6oF,SAsDZtnK,KAAKq5D,eAAiB,WACpB,IAAK,IAAI9kE,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAC5BqlD,EAAMrlD,GAAGo3D,gBACX/R,EAAMrlD,GAAGszK,iBAQf7nK,KAAK8nK,oCAAsC,SAAClK,EAAiBoF,EAAWC,EAAgBC,EAAaC,EAAaC,GAChHxF,EAAgB3E,kBAAoB,CAClC8O,WAAY/E,EAAU5oJ,EACtB4tJ,YAAa/E,EAAe7oJ,EAC5B6tJ,WAAYjF,EAAU3oJ,EACtB6tJ,YAAajF,EAAe5oJ,EAC5B6oJ,YAAaA,EACbC,YAAaA,EACbgF,SAAU/E,EAAW3xG,KAAKr3C,EAC1BguJ,SAAUhF,EAAW3xG,KAAKp3C,EAC1BguJ,UAAWjF,EAAW7qG,GAAGn+C,EACzBkuJ,UAAWlF,EAAW7qG,GAAGl+C,EACzBkuJ,UAAWn+J,KAAK4pE,IAAIgvF,EAAU3oJ,EAAI4oJ,EAAe5oJ,KASrDra,KAAKqjK,uBAAyB,SAAC5kF,EAAOm/E,EAAiBoF,EAAWC,EAAgBuF,EAAiBC,EAAiBrF,GAC7GxF,EAAgB3E,mBAA2D,IAAtC2E,EAAgB5E,mBACxD,EAAK8O,oCAAoClK,EAAiBoF,EAAWC,EAAgBuF,EAAiBC,EAAiBrF,GAFQ,MAO7HxF,EAAgB3E,kBADlB8O,EAN+H,EAM/HA,WAAYC,EANmH,EAMnHA,YAAaC,EANsG,EAMtGA,WAAYC,EAN0F,EAM1FA,YAAaC,EAN6E,EAM7EA,SAAUC,EANmE,EAMnEA,SAAUC,EANyD,EAMzDA,UAAWC,EAN8C,EAM9CA,UAAWC,EANmC,EAMnCA,UAAWrF,EANwB,EAMxBA,YAAaC,EANW,EAMXA,YAElH1kF,EAAMvnF,OAASunF,EAAMo8C,MACvBp8C,EAAMvnF,OAASunF,EAAMo8C,KAEnBp8C,EAAMvnF,OAASunF,EAAMm8C,MACvBn8C,EAAMvnF,OAASunF,EAAMm8C,KAIvB,IAAI1jI,EAAQ,IAAMunF,EAAMvnF,MAExBgvK,IAAwBznF,EAAMvnF,OAE9B+N,EAAK61J,iBAAiB18J,SAAQ,SAACw/J,GACzBA,EAAgBzE,WAClByE,EAAgB5E,kBAAoB9hK,MAGxC,IAAMwxK,EAAkBt+J,KAAKC,MAAc,IAARnT,EAAc,GAAK,KAAO,IACvDyxK,EAAcv+J,KAAKC,MAAMk+J,EAAYG,EAAkB,IAAM,KAAO,IAEpEE,EAAkB1xK,EAAQ,GAAM,CAACkjB,EAAE+tJ,EAAU9tJ,EAAG+tJ,GAAYlF,EAC5D2F,EAAkB3xK,EAAQ,GAAM,CAACkjB,EAAEiuJ,EAAWhuJ,EAAGiuJ,GAAanF,EAC9D3uH,GAAQ,IAAAs0H,UAASlL,EAAiB1mK,GAEpC6xK,GAAsB,IAAAC,wBAAuBpL,EAAiB1mK,EAAOksK,EAAYJ,EAAWC,GAK5FgG,GAAU,IAAAz3F,aAAYo3F,EAAgBG,EAAqBv0H,GAC3D00H,GAAW,IAAA13F,aAAYq3F,EAAgBE,EAAqBv0H,GAYhE,OAVA4uH,EAAW3xG,KAAKr3C,EAAI6uJ,EAAQ7uJ,EAC5BgpJ,EAAW3xG,KAAKp3C,EAAI4uJ,EAAQ5uJ,EAC5B+oJ,EAAW7qG,GAAGn+C,EAAI8uJ,EAAS9uJ,EAC3BgpJ,EAAW7qG,GAAGl+C,EAAI6uJ,EAAS7uJ,EAOnBujJ,EAAgBtnG,WACtB,IAAK,YACL,IAAK,YACL,QAEE,GAAIqyG,EAAcJ,EAChB,GAAI3K,GAAsD,UAAnCA,EAAgBvE,eAErC,OAAQ+J,EAAW+F,kBACjB,KAAK,EAAAtzF,YAAYE,WACfitF,EAAU5oJ,EAAI2tJ,EAAY9E,EAAe7oJ,EAAI4tJ,EAC7C,MAEF,KAAK,EAAAnyF,YAAYC,SACfktF,EAAU3oJ,EAAI4tJ,EAAYhF,EAAe5oJ,EAAI6tJ,EAC7C,MAEF,KAAK,EAAAryF,YAAYI,UAAa+sF,EAAU3oJ,EAAI4tJ,EAAaU,EAAa1F,EAAe5oJ,EAAI6tJ,EACvF,MAEF,KAAK,EAAAryF,YAAYG,UAAagtF,EAAU3oJ,EAAI4tJ,EAAaU,EAAa1F,EAAe5oJ,EAAI6tJ,EACvF,MAEF,KAAK,EAAAryF,YAAYK,UAAa8sF,EAAU5oJ,EAAI2tJ,EAAaY,EAAa1F,EAAe7oJ,EAAI4tJ,EACvF,MAEF,KAAK,EAAAnyF,YAAYM,UAAa6sF,EAAU5oJ,EAAI2tJ,EAAaY,EAAa1F,EAAe7oJ,EAAI4tJ,OAQ3F,OAAQ5E,EAAW+F,kBACjB,KAAK,EAAAtzF,YAAYE,WAAcitF,EAAU5oJ,EAAI2tJ,EAAY9E,EAAe7oJ,EAAI4tJ,EAC1E,MAEF,KAAK,EAAAnyF,YAAYC,SAAYktF,EAAU3oJ,EAAI4tJ,EAAYhF,EAAe5oJ,EAAI6tJ,EACxE,MAEF,KAAK,EAAAryF,YAAYI,UAAa+sF,EAAU5oJ,EAAI2tJ,EAAaY,EAAa1F,EAAe7oJ,EAAI4tJ,EACvF,MAEF,KAAK,EAAAnyF,YAAYG,UAAagtF,EAAU5oJ,EAAI2tJ,EAAaY,EAAa1F,EAAe7oJ,EAAI4tJ,EACvF,MAEF,KAAK,EAAAnyF,YAAYK,UAAa8sF,EAAU3oJ,EAAI4tJ,EAAaU,EAAa1F,EAAe5oJ,EAAI6tJ,EACvF,MAEF,KAAK,EAAAryF,YAAYM,UAAa6sF,EAAU3oJ,EAAI4tJ,EAAaU,EAAa1F,EAAe5oJ,EAAI6tJ,OAU7F,GAAItK,GAAsD,UAAnCA,EAAgBvE,eAErC,OAAQ+J,EAAW+F,kBACjB,KAAK,EAAAtzF,YAAYE,WACgE,aAA3E9wE,EAAKmkK,YAAYpG,EAAUtiK,aAAa48H,mBAAmBznD,aAC7DmtF,EAAU5oJ,EAAI2tJ,EAAaQ,EAC3BtF,EAAe7oJ,EAAI4tJ,EAAcO,GAEkB,SAA/CnF,EAAW9lC,mBAAmBlB,aAC+C,aAA3En3H,EAAKu0E,YAAYwpF,EAAUtiK,aAAa48H,mBAAmBznD,aAC7DmtF,EAAU5oJ,EAAI2tJ,EACd9E,EAAe7oJ,EAAI4tJ,IAEnBhF,EAAU5oJ,EAAI2tJ,EAAaQ,EAC3BtF,EAAe7oJ,EAAI4tJ,EAAcO,GAG4C,aAA3EtjK,EAAKu0E,YAAYwpF,EAAUtiK,aAAa48H,mBAAmBznD,aAC7DmtF,EAAU5oJ,EAAI2tJ,EACd9E,EAAe7oJ,EAAI4tJ,IAEnBhF,EAAU5oJ,EAAI2tJ,EAAaQ,EAC3BtF,EAAe7oJ,EAAI4tJ,EAAcO,GAIvC,MACF,KAAK,EAAA1yF,YAAYC,SACgE,aAA3E7wE,EAAKmkK,YAAYpG,EAAUtiK,aAAa48H,mBAAmBznD,cACV,UAA/CutF,EAAW9lC,mBAAmBlB,aAC+C,eAA3En3H,EAAKu0E,YAAYwpF,EAAUtiK,aAAa48H,mBAAmBznD,aAC7DmtF,EAAU3oJ,EAAI4tJ,EACdhF,EAAe5oJ,EAAI6tJ,IAEnBlF,EAAU3oJ,EAAI4tJ,EAAaM,EAC3BtF,EAAe5oJ,EAAI6tJ,EAAcK,GAG4C,eAA3EtjK,EAAKu0E,YAAYwpF,EAAUtiK,aAAa48H,mBAAmBznD,aAC7DmtF,EAAU3oJ,EAAI4tJ,EACdhF,EAAe5oJ,EAAI6tJ,IAEnBlF,EAAU3oJ,EAAI4tJ,EAAaM,EAC3BtF,EAAe5oJ,EAAI6tJ,EAAcK,IAIvC,MACF,KAAK,EAAA1yF,YAAYI,UACfgtF,EAAe7oJ,EAAI4tJ,EAAcO,EAAYI,EAC7C3F,EAAU5oJ,EAAI2tJ,EAAaQ,EAC3B,MAEF,KAAK,EAAA1yF,YAAYK,UACf+sF,EAAe5oJ,EAAI6tJ,EAAcK,EAAYI,EAC7C3F,EAAU3oJ,EAAI4tJ,EAAaM,EAC3B,MAEF,KAAK,EAAA1yF,YAAYM,UACf8sF,EAAe7oJ,EAAI4tJ,EACnBhF,EAAU5oJ,EAAI2tJ,EACd/E,EAAU3oJ,EAAI4tJ,EAAaM,EAC3BtF,EAAe5oJ,EAAI6tJ,EAAcK,EAAYI,EAC7C,MAEF,KAAK,EAAA9yF,YAAYG,UACfitF,EAAe7oJ,EAAI4tJ,EAAcO,EAAYI,EAC7C3F,EAAU5oJ,EAAI2tJ,EAAaQ,OAQ/B,OAAQnF,EAAW+F,kBACjB,KAAK,EAAAtzF,YAAYE,WACgE,aAA3E9wE,EAAKmkK,YAAYpG,EAAUtiK,aAAa48H,mBAAmBznD,YACV,SAA/CutF,EAAW9lC,mBAAmBlB,cAChC4mC,EAAU5oJ,EAAI2tJ,EAAaQ,EAC3BtF,EAAe7oJ,EAAI4tJ,EAAcO,IAEjCvF,EAAU5oJ,EAAI2tJ,EAAaQ,EAC3BtF,EAAe7oJ,EAAI4tJ,EAAcO,IAGnCvF,EAAU5oJ,EAAI2tJ,EACd9E,EAAe7oJ,EAAI4tJ,GAErB,MACF,KAAK,EAAAnyF,YAAYC,SACgE,eAA3E7wE,EAAKmkK,YAAYpG,EAAUtiK,aAAa48H,mBAAmBznD,cACV,UAA/CutF,EAAW9lC,mBAAmBlB,cAChC4mC,EAAU3oJ,EAAI4tJ,EAAaM,EAC3BtF,EAAe5oJ,EAAI6tJ,EAAcK,IAEjCvF,EAAU3oJ,EAAI4tJ,EAAaM,EAC3BtF,EAAe5oJ,EAAI6tJ,EAAcK,IAGrC,MACF,KAAK,EAAA1yF,YAAYI,UACf+sF,EAAU3oJ,EAAI4tJ,EAAaM,EAC3BtF,EAAe5oJ,EAAI6tJ,EAAcK,EAAYI,EAC7C,MAEF,KAAK,EAAA9yF,YAAYK,UACf+sF,EAAe7oJ,EAAI4tJ,EAAcO,EAAYI,EAC7C3F,EAAU5oJ,EAAI2tJ,EAAaQ,EAC3B,MAEF,KAAK,EAAA1yF,YAAYM,UACf6sF,EAAU5oJ,EAAI2tJ,EAAaQ,EAC3BtF,EAAe7oJ,EAAI4tJ,EAAcO,EAAYI,EAC7C,MAEF,KAAK,EAAA9yF,YAAYG,UACfgtF,EAAU3oJ,EAAI4tJ,EAAaM,EAC3BtF,EAAe5oJ,EAAI6tJ,EAAcK,EAAWI,GAWxD,CAAC3F,EAAWC,GAAgB7kK,SAAQ,SAAA4tD,IAC9BA,EAAM1P,WAAa0P,EAAMxX,SAC3BwX,EAAM1P,UAAY,EAClB0P,EAAMxX,MAAQ,GAGhBwX,EAAMq9G,iBAAmBnyK,EACzB80D,EAAM4xG,gBAAkBA,KAE1BwF,EAAW3xG,KAAKmsG,gBAAkBA,EAClCwF,EAAW7qG,GAAGqlG,gBAAkBA,GAIlC59J,KAAKopK,YAAc,SAACr6G,EAAMnhD,EAAO07J,GAC/B,IAAMpjH,EAAQojH,EAAsC,EAAK1I,uBAAyBhnH,EAE9EqoH,GADJr0J,EAAQA,GAASs4C,EAAMlsD,QAAQ+0D,IACZ,EAInB,OAHInhD,IAAUs4C,EAAMzxD,OAAS,IAC3BwtK,EAAO,GAEF/7G,EAAM+7G,IAEfjiK,KAAKw5E,YAAc,SAASzqB,EAAMnhD,GAEhC,IAAI2sE,GADJ3sE,EAAQA,GAASgsC,EAAM5/C,QAAQ+0D,IACZ,EAInB,OAHc,IAAVnhD,IACF2sE,EAAO3gC,EAAMnlD,OAAS,GAEjBmlD,EAAM2gC,IAEfv6E,KAAK63H,kBAAoB,SAAS9oE,GAChC,IAAInhD,EAAQgsC,EAAM5/C,QAAQ+0D,GACtB7I,EAAQ,CACV+3E,MAAOrkF,EAAMhsC,GACbswH,MAAOl+H,KAAKopK,YAAYr6G,EAAMnhD,GAC9B27J,WAAYvpK,KAAKw5E,YAAYzqB,EAAMnhD,IAErC,OAAO,IAAAguH,mBAAkB11E,EAAM+3E,MAAMxsE,KAAMvL,EAAM+3E,MAAM1lE,GAAIrS,EAAMg4E,MAAM3lE,GAAIrS,EAAMqjH,WAAW93G,OAE9FzxD,KAAKwpK,KAAO,SAASC,GACnB,IAAIl1K,SACJ,OAAOk1K,GACL,KAAKxkK,EAAK41J,cAAc9kF,WACtB,IAAIs8B,EAAQ,EACZ,IAAK99G,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IACxB89G,EAAQz4D,EAAMrlD,GAAGk9D,KAAKp3C,IACxBg4F,EAAQz4D,EAAMrlD,GAAGk9D,KAAKp3C,GAG1B,IAAK9lB,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAC5BqlD,EAAMrlD,GAAGk9D,KAAKp3C,EAAIg4F,EAAQz4D,EAAMrlD,GAAGk9D,KAAKp3C,EAE1C,MACF,KAAKpV,EAAK41J,cAAc/kF,SACtB,IAAIo8B,EAAQ,EACZ,IAAK39G,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IACxB29G,EAAQt4D,EAAMrlD,GAAGk9D,KAAKr3C,IACxB83F,EAAQt4D,EAAMrlD,GAAGk9D,KAAKr3C,GAG1B,IAAK7lB,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAC5BqlD,EAAMrlD,GAAGk9D,KAAKr3C,EAAI83F,EAAQt4D,EAAMrlD,GAAGk9D,KAAKr3C,IAKhDpa,KAAKuzC,OAAS,SAASm2H,EAAStsC,GAAmD,IAAxC9C,EAAwC,wDAApBqvC,EAAoB,uDAAN,KAM3ErvC,EAAat6H,KAAK42I,oBAAsB8yB,EAAU1pK,KAAK62I,gBAAkB6yB,EAChD,MAAxB1pK,KAAK62I,iBAA4B72I,KAAK62I,eAAiB,GAC3B,MAA5B72I,KAAK42I,qBAAgC52I,KAAK42I,mBAAqB,GAEhExZ,EAAYA,GAAan4H,EAAKwxI,UAAUmzB,MACxC,IAAIp1H,EAASk1H,EAAUt/J,KAAKqnE,GAAK,IAC7B2rD,IAAcn4H,EAAKwxI,UAAUC,OAC/BliG,IAAU,GAEPm1H,IACHA,EAAc3pK,KAAK8pD,aAIrB,IAAK,IAAIv1D,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAGk9D,KAAKle,OAAOo2H,EAAan1H,EAAO8lF,GAE3C,IAAK,IAAI/lI,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAAK,CACrC,IAAI0pI,EAAQj+H,KAAK63H,kBAAkBj+E,EAAMrlD,IACvCs1K,EAAUt1K,EAAI,EAAK,EAAKqlD,EAAMnlD,OAAS,EAAIF,EAAI,EAC/C2pI,EAAQl+H,KAAK63H,kBAAkBj+E,EAAMiwH,IAEvCjwH,EAAMrlD,GAAGk9D,KAAKq4G,sBAAsB7rC,EAAOC,GAE7Cl+H,KAAK+pK,yBAAyBJ,EAAan1H,EAAO8lF,GAC9Ct6H,KAAKo1I,gBACPp1I,KAAKo1I,eAAe40B,2BAA2BL,EAAan1H,EAAO8lF,GAEhEA,GACHt6H,KAAK28J,oBAAmB,IAG5B38J,KAAK+pK,yBAA2B,SAACJ,EAAan1H,EAAO8lF,GACnD,GAAI,EAAK5uE,gBAAiB,4BACxB,YAAmB,EAAKD,WAAxB,+CAAoC,KAAzBsD,EAAyB,QAClC,GAAIA,EAAKrD,gBAAiB,CACxB,IAAMyrF,EAAgBpoF,EAAKpD,eAAeyrF,mBAC1C,IAAK,IAAM6yB,KAAoB9yB,EACzBA,EAAcviJ,eAAeq1K,IAC/B9yB,EAAc8yB,GAAkB12H,OAAOo2H,EAAan1H,EAAO8lF,KAN3C,gFAa5Bt6H,KAAKkqK,mBAAqB,SAACC,GACzB,EAAKtzB,eAAiBszB,GAExBnqK,KAAKmzI,iBAAmB,WACtB,IAAK,IAAI5+I,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAGhC,GAFAqlD,EAAMrlD,GAAGk9D,KAAK+oE,QAAQpgH,EAAI+5F,KAAKC,MAAMD,KAAK2W,UAAUlxE,EAAMrlD,GAAGk9D,KAAKnK,IAAIltC,IACtEw/B,EAAMrlD,GAAGk9D,KAAK+oE,QAAQngH,EAAI85F,KAAKC,MAAMD,KAAK2W,UAAUlxE,EAAMrlD,GAAGk9D,KAAKnK,IAAIjtC,IAClEu/B,EAAMrlD,GAAGm3D,gBAAiB,CAE5B,UAAciN,qBAAqByxG,6BAA6BxwH,EAAMrlD,IAGtE,IAAM4iJ,EAAgBv9F,EAAMrlD,GAAGo3D,eAAeyrF,mBAC9C,IAAK,IAAIprF,KAASmrF,EAChBA,EAAcnrF,GAAOwuE,SAAU,aAAM2c,EAAcnrF,GAAO1E,OAKlEtnD,KAAK4zI,mBAAqB,WACxB,EAAKsqB,gBAAgB,EAAK52G,MAE5BtnD,KAAKg2D,KAAO,SAACt6B,EAAUk5B,GAiBrB,SAASy1G,EAAazvC,EAAKC,GACzB,OAAOzwH,KAAKouE,MAAMpuE,KAAKkhF,UAAYuvC,EAAMD,IAAQA,EAjB/Cl/F,IACF,EAAKghI,yBAAyBhhI,GAC9B,EAAKwiI,gBAAgBxiI,IAEnB,EAAAs4B,6CAA6C75D,SAAS,EAAKmM,UAC7D,EAAKqtI,mBAAoB,GAGvB/+E,GACF2oG,GAAS3oG,IAGsC,IAA7C3vD,EAAKw0J,UAAUz/J,QAAQ,EAAKu8D,cAC9BtxD,EAAK4xI,eAAiB,KAMxB0hB,GAAmB6E,GAAaiN,EAAa,EAAG,KAAMA,EAAa,EAAG,KAAMA,EAAa,EAAG,KAAM,IAClG,EAAKC,WAAL,YAEFtqK,KAAKuqK,YAAc,SAACC,GAClB,OAAQ,EAAKlkK,QACX,KAAK,EAAAipC,cAAc0B,oBAAqB,OAAOu5H,EAAa5wG,WAAWgkC,YACvE,KAAK,EAAAruD,cAAcqB,gBAAiB,OAAO45H,EAAa5wG,WAAWkkC,uBACnE,QAAS,OAAO0sE,EAAa5wG,WAAWikC,QAG5C79F,KAAKsqK,WAAa,WAAqC,IAApCE,EAAoC,iEACrDA,EAAa/wG,SACX+wG,EAAa9wG,OAAOC,WACpBhR,GACA,EACA,EAAK4hH,YAAYC,IAEnBA,EAAa/wG,SACX+wG,EAAa9wG,OAAOI,WACpB3R,GACA,EACA,EAAKoiH,YAAYC,IAEnBA,EAAa/wG,SACX+wG,EAAa9wG,OAAOK,SACpBvR,GACA,EACA,EAAK+hH,YAAYC,IAEnBA,EAAa/wG,SACX+wG,EAAa9wG,OAAOM,OACpB,EAAKC,OACL,EACA,EAAKswG,YAAYC,IAEnBA,EAAa/wG,SACX+wG,EAAa9wG,OAAOklC,SACpBwC,GACA,EACA,EAAKmpE,YAAYC,KAGrBxqK,KAAKyqK,WAAa,WAChB1jK,GAAM+/C,WAAY,EAClB//C,GAAMggD,kBAAoB,KAC1BhgD,GAAM4xJ,UAAW,EACjB5xJ,GAAM6xJ,YAAc,MAEtB54J,KAAK+3D,iBAAmB,WACtB,UAAiB6rC,YAAY,GAC7B,EAAK6mE,aACL,EAAKz9G,UAAW,EAChB,EAAKkkF,wBAEPlxI,KAAKkxI,qBAAuB,WAC1B,IAAK,IAAI38I,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAGwjE,oBAGb/3D,KAAK8yI,sBAAwB,WAC3B,IAAK,IAAIv+I,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAGm2K,qBAGb1qK,KAAK2yI,aAAe,WAClB,GAAI,EAAK3lF,SAAU,CACjB,EAAKs9G,WAAL,WACA,EAAKK,eACL,EAAK39G,UAAW,EAChB,IAAK,IAAIz4D,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAGo+I,iBAIf3yI,KAAKi0I,qBAAuB,WAC1B,IAAK,IAAI1/I,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAG0/I,wBAGbj0I,KAAKm0I,iBAAmB,WACtB,IAAK,IAAI5/I,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAG4/I,oBAGbn0I,KAAK2qK,aAAe,WAClB5jK,GAAQ,CACN+/C,WAAW,EACXC,kBAAmB,KACnB4xG,UAAU,EACVC,YAAa,OAGjB54J,KAAKq4D,QAAU,SAACuyG,GACd,IAAKA,EAAS,CACZ,IAAK,IAAIr2K,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAChCqlD,EAAMrlD,GAAG8jE,UAEP,EAAK+8E,gBACP,UAAiBC,sBAAsB,GAEzC,UAAiBzxC,YAAY3+F,KAGjCjF,KAAKsoD,YAAc,SAASc,GAC1B,IAAK,IAAI70D,EAAI,EAAGA,EAAIqlD,EAAMnlD,OAAQF,IAC5BqlD,EAAMrlD,KAAO60D,GACf,UAAiBH,YAAYhkD,IAInCjF,KAAKipD,YAAc,WACjB,UAAiBA,YAAYhkD,IAE/BjF,KAAK6qK,wBAA0B,WAC7B,OAAOjxH,EAAM35C,MAAK,SAAA8uD,GAChB,OAAOA,EAAK+7G,uBAGhB9qK,KAAK+qK,sBAAwB,SAASnN,EAAiBj6G,GACrDA,EAAIyuG,OACJzuG,EAAI+W,YACJ,IAAMswG,EAAerN,GAAwBC,GAC7Cj6G,EAAIgX,OAAOqwG,EAAa,GAAG,GAAIA,EAAa,GAAG,IAC/CrnH,EAAIiX,OAAOowG,EAAa,GAAG,GAAIA,EAAa,GAAG,IAC/CrnH,EAAIiX,OAAOowG,EAAa,GAAG,GAAIA,EAAa,GAAG,IAC/CrnH,EAAIiX,OAAOowG,EAAa,GAAG,GAAIA,EAAa,GAAG,IAC/CrnH,EAAI6tG,YACJ7tG,EAAIwuG,UAAY,0BAChBxuG,EAAI88E,OACJ98E,EAAI0uG,WAGNryJ,KAAK6mK,8BAAgC,SAACjJ,GACpC,IAAI3/B,EAAQh5H,EAAKu0E,YAAY5/B,EAAMgkH,EAAgB3/B,QAC/CC,EAAQtkF,EAAMgkH,EAAgB1/B,OASlC,OAPwB,cAAnBj5H,EAAKqxD,WAAgD,cAAnBrxD,EAAKqxD,YACvCsnG,EAAgB3/B,MAAQ2/B,EAAgB1/B,QAE3CD,EAAQrkF,EAAMgkH,EAAgB3/B,OAC9BC,EAAQj5H,EAAKu0E,YAAY5/B,EAAMgkH,EAAgB1/B,SAG1C,CAACD,EAAOC,GAAOj+H,MAAK,SAAC8uD,GAC1B,OAAOA,EAAKwJ,GAAG/jB,MAAQ,GAAKua,EAAKwJ,GAAGjc,UAAY,MAIpDt8C,KAAKi6D,OAAS,SAACtW,GACb,EAAKw2G,YAAYlgG,OAAOtW,KA1gE5B,I,IAAA,Q,IACA,O,IAEA,QACA,S,WAEA,O,IAGA,OACA,QAWA,UACA,Q,WAIA,O,IACA,Q,IACA,MACA,Q,IAKA,S,IAEA,Q,IACA,SACA,Q,IACA,O,IACA,Q,IACA,Q,IACA,Q,IACA,SACA,SACA,QACA,SAIA,Q,IAIA,O,IACA,Q,IACA,S,IACA,S,IACA,SACA,S,IACA,Q,IACA,SACA,SACA,SACA,SACA,S,uJCjEA,O,IACA,OACA,U,6DAEe,CACbsnH,WAAY,SAAUp0E,GACpB,MAAO,QAAUA,EAAW,MAE9Bq0E,YAAa,SAAUlkK,GACrB,IAAMgqE,EAAM,GAKZ,OAJAhqE,EAAOjJ,MAAM,KAAKK,SAAQ,SAAU6E,GAClC,IAAM+6C,EAAK/6C,EAAKlF,MAAM,KACtBizE,EAAIhzB,EAAG,IAAMA,EAAG,MAEXgzB,GAETm6F,aAAc,SAAU10J,GACtB,IAAMu6D,EAAMt8E,OAAOmc,KAAK4F,GAExB,IAAK,IAAIjf,KADTQ,QAAQ4B,IAAIo3E,GACIA,EAAK,CACnB,IAAMo6F,EAAO30J,EAAIjf,GACboQ,MAAMC,QAAQujK,IAChBp6F,EAAIj8E,KAAKq2K,GAIb,OAAOp6F,GAETq6F,SAAU,SAAU5+E,GAClB,OAAY,OAARA,IAGqB,mBAARA,GAAuC,iBAAf,IAAOA,EAAP,0BAAOA,MAGlD6+E,eAAgB,GAChBC,UAAW,SAAU78G,GACnB,IAAI2qD,EAAOr5G,KAAKsrK,eAAe58G,GAM/B,OALK2qD,IACHA,GAAO,UAAOl5G,iBAAmB/G,SAASC,SAASmyK,IAAM,KAAO,sBAAwB98G,EACxF1uD,KAAKsrK,eAAe58G,GAAS2qD,GAGxBA,GAOToyD,WAAY,SAAUpyD,EAAMwwD,GAE1B,IADAA,EAAQA,GAAS,EACVA,KAAU,GAAG,CAClB,IAAMj8J,EAAQyrG,EAAKn6G,YAAY,KAC/B,IAAe,IAAX0O,EACF,OAAOyrG,EAGTA,EAAOA,EAAK37G,OAAO,EAAGkQ,GAGxB,OAAOyrG,GAOT7nB,UAAW,SAAUt6F,GAInB,OAHuB,iBAAXA,IACVA,EAAQA,EAAMoF,eAERpF,GACN,KAAK,EACL,IAAK,OACL,KAAK,EACL,IAAK,IACL,IAAK,KACL,IAAK,MACH,OAAO,EACT,QACE,OAAO,IAIbw0K,uBAAwB,SAAUj1J,GAChC,IAAKA,GAAsB,iBAAf,IAAOA,EAAP,0BAAOA,IACjB,OAAO,KAGT,GAAIA,aAAe7O,MACjB,OAAO,UAAEE,IAAI2O,GAAK,SAAUvf,GAC1B,OAAO8I,KAAK0rK,uBAAuBx0K,MAIvC,IAAMy0K,EAAS,GAMf,OALA,UAAEC,KAAKn1J,GAAK,SAAUjf,EAAKN,GACzBM,EAAMA,EAAIyb,OAAO,GAAG3W,cAAgB9E,EAAIa,MAAM,GAC9CszK,EAAOn0K,GAAON,KAGTy0K,GAETE,QAAS,SAAUl1K,GACjB,IAAIm1K,SAAOt0K,SAAKu0K,SAAS70K,SAEzB,GAAIP,aAAaiR,MAEf,IAAKpQ,KADLs0K,EAAQ,GACIn1K,EAGW,iBAAjB,KAFJO,EAAQP,EAAEa,IAEN,0BAAON,MACTA,EAAQ8I,KAAK6rK,QAAQ30K,IAEvB40K,EAAM/2K,KAAKmC,QAIb,IAAKM,KADLs0K,EAAQ,GACIn1K,EACNA,EAAE/B,eAAe4C,KACnBu0K,GAAWv0K,EAAIyb,OAAO,GAAG3W,cAAgB9E,EAAIa,MAAM,IAAMb,GAAKsgB,WAEhD,QADd5gB,EAAQP,EAAEa,KAC6B,iBAAjB,IAAON,EAAP,0BAAOA,MAC3BA,EAAQ8I,KAAK6rK,QAAQ30K,IAGvB40K,EAAMC,GAAW70K,GAIvB,OAAO40K,GAETjhF,cAAe,SAAU10F,GACvBA,EAAE20F,kBACF30F,EAAE40F,kBAIJihF,OAAQ,SAAU71K,EAAG+1F,GACnBlsF,KAAK6qF,cAAc10F,GACnB+1F,KAIF+/E,UAAW,SAAUjkK,IAEd5O,SAASC,SAASC,WAAa,UAAOqH,gBAc7CurK,UAAW,SAAUlkK,GACnB,IAAMmkK,GAAS,aAAEnkK,GACjB,GAAKmkK,EAAO13K,OAAZ,CAGA,IAAM23K,EAAQD,EAAO,GACrBA,EAAO32G,OACP42G,EAAMC,UAERC,cAAe,SAAU7sI,GACvB,IAAM45E,EAAO,UAAOl5G,gBAAkB,wBAA0B,yCAChE,OAAQs/B,GACN,IAAK,SACH,OAAO45E,EAAO,mCAChB,IAAK,QACH,OAAOA,EAAO,8BAChB,QACE,MAAO,KAGbkzD,kBAAmB,SAAU36D,EAAe46D,GAC1C,IAAMC,EAAY,YACdC,EAAS96D,EAAc7hB,UAAU08E,GAGrCC,EAASA,EAAO/tK,QAAQ,qBAAsB,iCAI9C,IAAMguK,EAASvzK,SAAS8oD,cAAc,KACtCyqH,EAAO18E,SAAWu8E,EAClBG,EAAO5yK,KAAO2yK,EACdC,EAAO16G,QAAQ26G,YAAc,CAACH,EAAWE,EAAO18E,SAAU08E,EAAO5yK,MAAMsZ,KAAK,KAE5Eja,SAAS6C,KAAKkmD,YAAYwqH,GAC1BA,EAAOz8E,QACP92F,SAAS6C,KAAKqmD,YAAYqqH,IAE5BE,OAAQ,CACNC,UAAW,SAAUn2K,EAAGo2K,GACtB,OAAIp2K,EACKo2K,EAAgBp2K,GAGlB,OAGX84F,OAAQ,SAAUxpC,EAAQ1oD,GACxB,IAAIhJ,EAAGkB,EAAGc,GAAI,EACd,IAAKhC,EAAI,EAAGkB,EAAIwwD,EAAOxxD,OAAO,EAAGF,EAAI0xD,EAAOxxD,OAAQgB,EAAIlB,IAC9C0xD,EAAO1xD,GAAG8lB,EAAI9c,EAAK8c,GAAS4rC,EAAOxwD,GAAG4kB,EAAI9c,EAAK8c,GACnD9c,EAAK6c,GAAM6rC,EAAOxwD,GAAG2kB,EAAI6rC,EAAO1xD,GAAG6lB,IAAQ7c,EAAK8c,EAAI4rC,EAAO1xD,GAAG8lB,IAAQ4rC,EAAOxwD,GAAG4kB,EAAI4rC,EAAO1xD,GAAG8lB,GAAM4rC,EAAO1xD,GAAG6lB,IAChH7jB,GAAKA,GAGT,OAAOA,GAETy2K,QAAS,SAAUzrI,GACjB,IAAKA,IAAiC,IAAxBA,EAAMvnC,QAAQ,KAC1B,OAAO,EAKT,MADW,0JACDuD,KAAKgkC,IAEjB0rI,MAAO,SAAUC,GAGf,MAFc,6CAED3vK,KAAK2vK,IASpBC,cAAe,SAAU3rI,EAAO4rI,GAC9BA,EAASA,GAAU,KACnB,IAAMC,EAAY,EAAAC,gBAAgBC,cAClC,IACE,GAAI/rI,EAAO,CACT,IAAMgsI,EAAcH,EAAUj5D,MAAM5yE,EAAO4rI,GAC3C,OAAOC,EAAUI,iBAAiBD,IAAgBH,EAAUK,uBAAuBF,EAAaJ,GAElG,OAAO,EACP,MAAMhhK,GACN,OAAO,IAGXuhK,kBAAmB,SAACnsI,EAAO4rI,GACzBA,EAASA,GAAU,KACnB,IAAMC,EAAY,EAAAC,gBAAgBC,cAClC,IACE,GAAI/rI,EAAO,CACT,IAAMgsI,EAAcH,EAAUj5D,MAAM5yE,EAAO4rI,GAC3C,OAAOC,EAAUO,uBAAuBJ,EAAaJ,IAEvD,MAAMhhK,GACNpU,QAAQ4B,IAAIwS,GAEd,OAAOo1B,GAETqsI,qBAAsB,SAACrsI,GAA2B,IAApBssI,EAAoB,uDAAP,GACnCC,EAA2B,EAAAT,gBAAgBC,cAC7C,UAAO1sK,aACT7I,QAAQ4B,IAAI,2BAA4Bm0K,GAE1C,IAAMC,EAAaD,EAAyBE,sBAE5C,IACE,IAAMT,EAAcO,EAAyB35D,MAAM5yE,GAI7C0sI,EAAeJ,GAAcE,EAAW7zK,SAAS2zK,IACpDC,EAAyBL,uBAAuBF,EAAaM,GAC5DA,EACAE,EAAWliK,MAAK,SAAAqiK,GAAA,OAAcJ,EAAyBL,uBAAuBF,EAAaW,OAAgB,GAE/G,MAAO,CACLpsI,QAAS,CACPqsI,SAAU,GAAKZ,EAAYa,iBAC3BC,KAAMJ,EAAa5xK,eAErB2lC,YAAa,GAAKurI,EAAYe,qBAEhC,MAAOniK,GACH,UAAOvL,aACT7I,QAAQ4B,IAAI,2BAA4B4nC,GAG5C,IAAMgtI,EAAgBhtI,EAAQA,EAAMh9B,MAAM,sBAAwB,GAClE,MAAO,CACLy9B,YAAausI,EAAc,IAAMhtI,GAAS,KAG9CitI,kBAAmB,SAASj3E,GAA+B,IAAjBs2E,EAAiB,uDAAJ,GAAI,EAC1B9tK,KAAK6tK,qBAAqBr2E,EAAarhF,OAAOqrB,MAAOssI,GAAct2E,EAAarhF,OAAO4rB,SAAW,IAA1HE,EADkD,EAClDA,YAAaF,EADqC,EACrCA,QACd2sI,EAAc,CAClBntI,MAAOi2D,EAAaj2D,MACpBS,UAAWw1D,EAAarhF,OAAO6rB,UAC/B2sI,SAAUn3E,EAAarhF,OAAOw4J,SAC9B1sI,cACAC,OAAQs1D,EAAarhF,OAAO+rB,OAC5B0sI,OAAO,EACPC,SAAU,IAWZ,OATI9sI,IACF2sI,EAAY3sI,QAAUA,GAExB,CAAC,WAAY,WAAY,YAAa,WAAY,SAAU,OAAQ,YAAY3jC,SAAQ,SAAA5G,GAClFggG,EAAarhF,QAAUqhF,EAAarhF,OAAO3e,KAE7Ck3K,EADyB,aAARl3K,EAAsB,QAAUA,GACG,QAA7BggG,EAAarhF,OAAO3e,GAAiB,GAAKggG,EAAarhF,OAAO3e,OAGlFk3K,GAETI,gCAAiC,SAASt3E,GAAc,IAC/Cu3E,EAA0Dv3E,EAA1Du3E,eAAgBrkB,EAA0ClzD,EAA1CkzD,gBAAiBskB,EAAyBx3E,EAAzBw3E,sBACxC,MAAO,CACLtkB,gBAAiB,CACft9B,SAAUs9B,EAAkBA,EAAgBj0J,KAAO,GACnDszJ,SAAUW,EAAkBA,EAAgBX,SAAW,GACvDklB,SAAUvkB,EAAkBA,EAAgBukB,SAAW,GACvDjlB,KAAMU,EAAkBA,EAAgBV,KAAO,GAC/CjjJ,MAAO2jJ,EAAkBA,EAAgB3jJ,MAAQ,GACjDm7B,OAAQwoH,EAAkBA,EAAgBwiB,IAAM,IAElD6B,eAAgB,CACd3hD,SAAU2hD,EAAiBA,EAAet4K,KAAO,GACjDszJ,SAAUglB,EAAiBA,EAAehlB,SAAW,GACrDklB,SAAUF,EAAiBA,EAAeE,SAAW,GACrDjlB,KAAM+kB,EAAiBA,EAAe/kB,KAAO,GAC7CjjJ,MAAOgoK,EAAiBA,EAAehoK,MAAQ,GAC/Cm7B,OAAQ6sI,EAAiBA,EAAe7B,IAAM,IAEhD8B,wBAAyBA,IAG7BvuK,SAAU,WACR,MAAQ,qUAAqUlD,KAAKC,UAAUC,YAErV,0kDAA0kDF,KAAKC,UAAUC,UAAUC,OAAO,EAAG,KAEtnD2sK,aAxVa,SAwVAzvC,EAAKC,GAChB,OAAOzwH,KAAKouE,MAAMpuE,KAAKkhF,UAAYuvC,EAAMD,IAAQA,GASnDs0C,oBAlWa,SAkWOC,EAAcv3K,EAAUugB,GAC1C,IAAMu6G,EAAS,GAEf,GAAIv6G,EAAeG,cAAe,CAChC,OAAQ1gB,GACN,IAAK,WACH,IAAKu3K,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAEmB,IAAxBy8C,EAAa16K,OACfi+H,EAAO39H,KAAK,gCACHo6K,EAAa16K,OAAS,IAC/Bi+H,EAAO39H,KAAK,+BAET,wBAAwBwI,KAAK4xK,IAChCz8C,EAAO39H,KAAK,sCAEd,MAEF,IAAK,OACL,IAAK,QACH,IAAKo6K,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAKb,OAAOA,EAGT,OAAQ96H,GACN,IAAK,YACH,IAAKu3K,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAEmB,IAAxBy8C,EAAa16K,OACfi+H,EAAO39H,KAAK,gCACHo6K,EAAa16K,OAAS,IAC/Bi+H,EAAO39H,KAAK,+BAET,wBAAwBwI,KAAK4xK,IAChCz8C,EAAO39H,KAAK,sCAEd,MAEF,IAAK,QACH,IAAKo6K,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAEJ,4CAA4Cn1H,KAAK4xK,IACpDz8C,EAAO39H,KAAK,mCAEd,MAEF,IAAK,cACH,IAAKo6K,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAMT,MAEF,IAAK,SACH,IAAKy8C,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAET,IAAK1yH,KAAKitK,MAAMkC,GAEd,OADAz8C,EAAO39H,KAAK,sCACL29H,EAET,MAEF,IAAK,SACCy8C,EAAa16K,OAAS,IACxBi+H,EAAO39H,KAAK,2CAKlB,OAAO29H,GAET08C,UAAW,SAACC,GACV,SAAU36K,OAAOmc,KAAKw+J,GAAc56K,SAAUC,OAAOmc,KAAKw+J,GAAcpvK,MAAK,SAAAzI,GAAA,OAAO63K,EAAa73K,IAAQ63K,EAAa73K,GAAK/C,YAE7H66K,sBAAuB,SAAChtJ,EAAM7tB,GAC5B,OAAK6tB,IAAS7tB,GAAW6tB,EAAK7tB,OAASA,EAC9B6tB,GAAQ,GAEVA,EAAKrjB,UAAU,EAAGxK,GAAU,OAErCsmH,iBAAkB,SAACz4F,GACjB,OAAKA,EAGEA,EAAKhmB,cAAcqC,QAAQ,KAAM,KAF/B,M,yMC1cb,Q,IAEA,MACY6hB,E,wJAAZ,OACA,QAIA,SAGA,Q,IACA,QACA,QACA,SACA,Q,mDAEA,IAAM+uJ,EAA4B,SAACx5H,GAEjC,OAAOA,IAAwB,kBAAZA,GAAgCA,EAAQ57C,UAAY47C,EAAQ57C,SAAS,kBAClF47C,EAAQA,SAAWA,EAAQA,QAAQ57C,SAAS,mBAD3C,mBAkFIq1K,GArEmB//C,EAAnBA,iBAAmB,SAAC15E,GAKqC,IAJrCG,EAIqC,uDAJ7B,0BACRu5H,EAGqC,uDAHX,KAC1B5iD,EAEqC,wDADrC6iD,EACqC,uDADf,KACtBC,EAAqC,uDAAT,KACvDJ,EAA0Bx5H,KAC5BA,EAAU,iBACVG,EAAQ,mBAEV,IAAM05H,EAAkB,WACtB,UAAM3rJ,UAAS,IAAA+K,uBAAsB,CACnCuB,SAAS,MAGPupB,EAAU,CAAC,CACfx3B,KAAmB,mBAAZyzB,EAA+B,yBAA2B,sBACjE01D,MAAoB,mBAAZ11D,EAA+B,OAAS,MAChDm6C,MAAO,WACL0/E,IACIF,GACFA,OAIN,GAAgB,mBAAZ35H,EAA8B,CAChC,GAAI82E,EAAyB,OACqB,UAAM1qH,WAA/CwD,EADoB,EACpBA,gBAAiBgkH,EADG,EACHA,qBAClBkmD,EAA2B,EAAA51K,kBAC5B,IAAAg4B,0BAAyBtsB,EAAgB+B,SAAUiiH,EAAqBsF,eACzE4gD,GACF/1H,EAAQ/kD,KAAK,CACXutB,KAAM,0BACNmpF,MAAO,QACPvb,MAAO,WACL0/E,IAEID,GACF,UAAM1rJ,UAAS,IAAA6rJ,8BAA6BH,IAE9C,EAAAz9I,YAAYn9B,KAAK,EAAAwgB,OAAO4c,aAK5Bs9I,GACF31H,EAAQ/kD,KAAK,CACXutB,KAAM,6BACNmpF,MAAO,QACPvb,MAAO,WACL0/E,IACAH,OAKR,UAAMxrJ,SAAS,CACb7Y,KAAMoV,EAAM0O,mBACZrO,QAAS,CACP0P,SAAS,EACT2lB,QACAH,UACA99C,MAAmB,mBAAZ89C,EACPg6H,WAAW,EACXj2H,cAK4B01H,EAArBA,mBAAqB,SAACz5H,GACjC,IAAIG,EAAQ,0BACRq5H,EAA0Bx5H,KAC5BA,EAAU,iBACVG,EAAQ,mBAEV,UAAMjyB,SAAS,CACb7Y,KAAMoV,EAAM0O,mBACZrO,QAAS,CACP0P,SAAS,EACT2lB,QACAH,UACA99C,OAAO,EACPu4B,QAAQ,EACRspB,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,UAAMjsE,SAAS,CACb7Y,KAAMoV,EAAM0O,mBACZrO,QAAS,CACP0P,SAAS,aAS4By/I,EAAtCA,oCAAsC,SAACj6H,EAASxU,GAC3D,UAAMtd,SAAS,CACb7Y,KAAMoV,EAAM0O,mBACZrO,QAAS,CACP0P,SAAS,EACTwlB,UACA99C,OAAO,EACPu4B,QAAQ,EACRspB,QAAS,CAAC,CACRx3B,KAAM,iDACNmpF,MAAO,QACPvb,MAAO,WACL,UAAMjsE,UAAS,IAAAqM,mBACf,IAAA1J,cAAa,mCACb,UAAQqpJ,sBAAsB1uI,GAC3B1P,MAAK,YACJ,IAAAygE,iBACAk9E,EAAmB,0DAGxB,CACDltJ,KAAM,sBACNmpF,MAAO,MACPvb,MAAO,WACL,UAAMjsE,UAAS,IAAAqM,yBAOS4/I,EAArBA,mBAAqB,SAACr/I,EAAkBs/I,GAAmC,IAA9Bv/I,IAA8B,yDACtF,UAAM3M,SAAS,CACb7Y,KAAMoV,EAAMsQ,qBACZjQ,QAAS,CACP+P,qBACAC,mBACAu/I,iCAAqBD,Q,ybCxK3B,I,EAAA,Q,oCAEY3vJ,E,wJAAZ,OACA,QACA,SACA,SACA,SACA,QACA,SAEsC+Q,EAAzBA,uBAAyB,SAAC8+I,GAAD,MAAgC,CACpEjlK,KAAMoV,EAAMmhD,0BACZ9gD,QAAS,CAACwvJ,+BAG0BC,EAAzBA,uBAAyB,SAACC,GAAD,MAAuB,CAC3DnlK,KAAMoV,EAAMohD,0BACZ/gD,QAAS,CAAC0vJ,sBAGoCC,EAAnCA,iCAAmC,SAACC,GAAD,MAAiC,CAC/ErlK,KAAMoV,EAAMqhD,uCACZhhD,QAAS,CAAC4vJ,gCAG4BC,EAA3BA,yBAA2B,SAACC,GAAoD,IAAtCC,EAAsC,wDAAjBznK,EAAiB,uDAAN,EAC9E8U,EAA0C0yJ,EAA1C1yJ,eAAgB3X,EAA0BqqK,EAA1BrqK,OAAQkC,EAAkBmoK,EAAlBnoK,aACzBqoK,EAAen8K,OAAO+2B,OAAO,GAAIklJ,EAAatqK,YAAY1C,UAAW,CACzEqE,GAAI,EACJsI,kBAAmB,mCACnBC,YAAa,mCACbzH,kBAAmB,qCAEjB8nK,IACFC,EAAanuK,KAAO,IACpBmuK,EAAaC,SAAW,IACxBD,EAAa3qK,eAAiB,MAEhC,IAAI6qK,EAAc,CAChB/oK,GAAI,UAAKqa,KACT6oC,SAAS,EACT+8F,iBAAiB,EACjBC,sBAAuB0oB,EACvB3yJ,iBACA3X,SACAkC,eACAW,WACA9C,YAAa3R,OAAO+2B,OAAO,GAAIklJ,EAAatqK,YAAa,CACvDkS,gBAAiBo4J,EAAatqK,YAAYmS,iBAC1CqD,SAAU,mCACVlD,mBAAoB,mCACpBspE,mCAAoC,mCACpCnvE,SAAU,GACViY,UAAW,GACXi3D,uCAAwC,WACtC,OAAOhiF,KAAK6b,UAEd4D,uBAAwB,WACtB,OAAOzf,KAAK6b,UAEdrD,eAAgB,WACd,OAAOxY,KAAK6b,UAEdlY,UAAWktK,KAQf,OALIF,EAAarmJ,cAAgBymJ,EAAYrgK,qBAC3CqgK,EAAYzmJ,aAAeqmJ,EAAarmJ,aACxCymJ,EAAYvmJ,eAAiBmmJ,EAAanmJ,eAC1CumJ,EAAYrgK,kBAAoBigK,EAAajgK,mBAExCqgK,GAGqCC,EAAjCA,+BAAiC,SAACC,GAAD,MAAkC,CAC9E7lK,KAAMoV,EAAMuhD,oCACZlhD,QAAS,CAACowJ,iCAG0BC,EAAzBA,uBAAyB,SAACC,GAAD,MAA0B,CAC9D/lK,KAAMoV,EAAMwhD,2BACZnhD,QAAS,CAACswJ,yBAG2BC,EAA1BA,wBAA0B,SAACC,GAAD,MAA2B,CAChEjmK,KAAMoV,EAAMyhD,4BACZphD,QAAS,CAACwwJ,0BAG8BC,EAA7BA,2BAA6B,SAAC/uK,GAAD,MAAgB,CACxD6I,KAAMoV,EAAM2hD,oCACZthD,QAAS,CAACte,eAGsBwiI,EAArBA,mBAAqB,SAACxiI,GAAD,MAAgB,CAChD6I,KAAMoV,EAAM4hD,sBACZvhD,QAAS,CAACte,eAGcgvK,EAAbA,WAAa,SAAC5pK,GAAD,MAAc,CACtCyD,KAAMoV,EAAM6hD,aACZxhD,QAAS,CAAClZ,aAEqB6pK,EAApBA,kBAAoB,SAACC,GAAD,MAAqB,CACpDrmK,KAAMoV,EAAM8hD,qBACZzhD,QAAS,CAAC4wJ,oBAEmBC,EAAlBA,gBAAkB,SAACxvK,GAAD,MAAmB,CAChDkJ,KAAMoV,EAAMiiD,kBACZ5hD,QAAS,CAAC3e,kBAGyByvK,EAAxBA,sBAAwB,WAAuB,IAAtBC,EAAsB,wDAC1D,OAAO,SAAC3tJ,GACF2tJ,IACF3tJ,GAAS,IAAAmgH,yBAAwB,IAAI,IACrCngH,GAAS,IAAA2/G,qBAAoB,IAC7B3/G,GAAS,IAAA8hH,uBAAsB,KAC/B9hH,GAAS,IAAA4tJ,qBAAoB,IAC7B5tJ,GAAS,IAAA6tJ,WAAU,CAAC,OAEtB7tJ,GAAS,IAAAyI,cACTzI,GAAS,IAAAsrG,eAAc,KACvBtrG,GAAS,IAAA2zE,mBAAkB,KAC3B3zE,GAAS,IAAAd,UAAS,IAClB/pB,SAASC,SAAS4b,MAAQ,OAIF88J,EAAfA,aAAe,SAACC,GAAD,MAAgB,CAC1C5mK,KAAMoV,EAAM+hD,eACZ1hD,QAAS,CAACmxJ,eAGkBz+C,EAAjBA,eAAiB,SAAC5hH,GAAD,MAAkB,CAC9CvG,KAAMoV,EAAMgiD,kBACZ3hD,QAAS,CAAClP,kB,sJCxIZ,QACA,SACA,QACA,S,IACA,O,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBsgK,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAzuK,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAL,mBACA,EAAKwuK,kBAAoB,MACzB,EAAKx2J,YAAc,6BAGnB,EAAKy2E,WAAa,KAClB,EAAKI,cAAgB,KACrB,EAAK4/E,aAAe,KACpB,EAAKC,UAAY,KACjB,EAAK5/E,aAAe,KACpB,EAAK6/E,iBAAmB,KACxB,EAAKC,oBAAsB,KAhBf,E,qEAmBT3uK,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,iBACHy/H,EAAkB,gBAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YAKA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,qBACHD,EAAkB,mBAClBC,YACA,MACF,IAAK,wBACHD,EAAkB,sBAClBC,YAGJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,UAAW3D,Q,2CAI3C,OAAO,I,wCAIP,OAAO,aAAQA,KAAK+e,aAAc,mB,iCAGqB,WAAhDwzJ,IAAgD,yDAA7BC,EAA6B,wDACvD,OAAOxyK,KAAKwwI,kBACTxpI,QAAO,SAAAiqE,GAAA,OAAQ,EAAKwhG,kBAAkBxhG,EAAMshG,MAC5CvrK,QAAO,SAAAiqE,GACN,OAAqB,kBAAhBA,EAAK3qE,QAA8C,eAAhB2qE,EAAK3qE,SAA4BksK,GAAuBvhG,EAAKmhB,oBAC5FnhB,EAAKvxD,mBAAmB,GAAI,IAAIjrB,OAElCw8E,KAERnpE,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,wFAQjD,OAAIlP,KAAKmyF,YAAcnyF,KAAKmyF,WAAWhsE,eACjCnmB,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,QACK9S,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,QAA4D,GAMhE,K,6CAiBP,OAAI9S,KAAKuyF,eAAiBvyF,KAAKuyF,cAAcpsE,eACvCnmB,KAAKuyF,cAAcpsE,cAAcxiB,UAAUmP,SAA3C,QACK9S,KAAKuyF,cAAcpsE,cAAcxiB,UAAUmP,SAA3C,QAA+D,GAMnE,K,mDAIP,OAAI9S,KAAKmyF,YAAcnyF,KAAKmyF,WAAWhsE,eACjCnmB,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,UACK9S,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,UAA8D,GAMlE,S,kDAIP,OAAI9S,KAAKmyF,YAAcnyF,KAAKmyF,WAAWhsE,eAAiBnmB,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,cAC/C9S,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,cAAkE,GAEpE,K,sDAIP,OAAI9S,KAAKuyF,eAAiBvyF,KAAKuyF,cAAcpsE,eACvCnmB,KAAKuyF,cAAcpsE,cAAcxiB,UAAUmP,SAA3C,UACK9S,KAAKuyF,cAAcpsE,cAAcxiB,UAAUmP,SAA3C,UAAiE,GAMrE,Y,aArKF9K,GAAK,U,aADOiqK,G,8ECdrB,I,IAAA,M,IACA,M,IACA,OACA,Q,mDAEA,IAAMS,EAAiB,SAACpnE,GACtB,iBACE,OAAO,wCAET,IAAMhoG,EAAOgoG,EAAMhoG,MAAQ,QAC3B,OAAO,+BAAKsnF,UAAW,0EAA4EtnF,KAGrGovK,EAAexwB,UAAY,CACzB5+I,KAAM,UAAUk/B,QAGlBkwI,EAAeniK,YAAc,iB,UAEdmiK,G,6cCnBf,QACA,Q,OACA,SACA,S,mDAKkCC,EAArBA,mBAAqB,SAACjoJ,GACjC,OAAKA,IAGEA,EAAYwrB,OAASxrB,EAAYpa,mBAAqBoa,EAAYi2F,kBAAoBj2F,EAAYla,YAFhG,IAeuBi0H,EAArBA,mBAAqB,SAAC7zH,EAAkB0zH,EAAasuC,GAGhE,IAAIC,EAAY,GAsBhB,OArBAn+K,OAAOmc,KAAK+hK,GAAyBx0K,SAAQ,SAAA5G,IACtCA,GAAO8sI,IACVuuC,EAAUr7K,GAAOo7K,EAAwBp7K,QAIJ,IAAAozB,mBAAkBha,EAAkBiiK,GAAW,EAAMD,IA2BvD5tC,EAA5BA,0BAA4B,SAAC4tC,EAAyBE,EAAevwK,EAAWiiI,GAAmB,IAEvG5zH,EAAgCkiK,EAAhCliK,iBAAkB5D,EAAc8lK,EAAd9lK,WAEnBs3H,GAAe5vI,OAAOmc,KAAKiiK,EAAchiK,sBAAsB,GAEjEiiK,EAAyB,GAE7BxwK,EAAUnE,SAAQ,SAAAgI,GAChB,SAAKA,EAASsK,mBAAsBtK,EAASoC,eAAiBwE,GAAgB5G,EAASkkB,eAAiB1Z,EAAiB5I,OAGpHtT,OAAOmc,KAAK+hK,GAAyBn+K,OAAS,IAAO2R,EAASokB,gBAC7DpkB,EAASokB,iBAAmB85G,MAG9ByuC,EAAuB9yK,MAAK,SAAA+yK,GAAA,OAAcA,EAAWhvB,aAAe59I,EAAS4B,YAI5Ew8H,EAAevkI,MAAK,SAAAsiH,GAAA,OAAQA,EAAKp3F,WAAWlrB,MAAK,SAAAyqB,GAAA,OAAeA,EAAY1iB,KAAO5B,EAASsK,yBAC3F8zH,EAAep+H,EAASokB,gBAMnBg6G,EAAep+H,EAASokB,eAAiB,IAAMg6G,EAAep+H,EAASokB,eAAiB,GAAGW,WALpG4nJ,EAAuBh+K,KAAK,CAC1Bgc,UAAW3K,EAASokB,eACpB/Z,cAAerK,EAASsK,kBACxBszI,WAAY59I,EAAS4B,WA6B3B,IAAMirK,EAAc3uC,EAAc,EAuBlC,OAtBIyuC,EAAuB9yK,MAAK,SAAA+yK,GAAA,OAAcA,EAAWjiK,YAAckiK,MACrE1wK,EAAUnE,SAAQ,SAAAgI,GAChB,SAAKA,EAASsK,mBAAsBtK,EAASoC,eAAiBwE,GAAgB5G,EAASkkB,eAAiB1Z,EAAiB5I,OAGrH+qK,EAAuB9yK,MAAK,SAAA+yK,GAAA,OAAcA,EAAWhvB,aAAe59I,EAAS4B,YAI7E5B,EAASokB,iBAAmB85G,GAC9ByuC,EAAuB58G,QAAQ,CAC7BplD,UAAW3K,EAASokB,eACpB/Z,cAAerK,EAASsK,kBACxBszI,WAAY59I,EAAS4B,UAStB+qK,GAUuCluC,EAAnCA,iCAAmC,SAACL,EAAgBsuC,EAAevwK,GAAc,IAErFqO,EAAgCkiK,EAAhCliK,iBAAkB5D,EAAc8lK,EAAd9lK,WAErB83H,GAAiB,EAkCrB,MAAO,CAACj6G,aAhCatoB,EAAUuF,KAAI,SAAA1B,GACjC,OAAKA,EAASsK,mBAAsBtK,EAASoC,eAAiBwE,GAAgB5G,EAASkkB,eAAiB1Z,EAAiB5I,IAIpHw8H,EAAevkI,MAAK,SAAAsiH,GAAA,OAAQA,EAAKp3F,WAAWlrB,MAAK,SAAAyqB,GAAA,OAAeA,EAAY1iB,KAAO5B,EAASsK,yBAC3F8zH,EAAep+H,EAASokB,iBAE5Bg6G,EAAepmI,SAAQ,SAAAmkH,GACrB,GAAKA,EAAKp3F,YAAeo3F,EAAKp3F,WAAW,MAAOo3F,EAAKp3F,WAAW12B,OAAS,GAAzE,CAGA,IAAIy+K,EAAW3wD,EAAKp3F,WAAW,GAC3B+nJ,EAAS1iK,YAAcpK,EAASC,YAAY1C,UAAU6M,YAGtD0iK,EAAS92D,eAEX82D,EAAWA,EAAS92D,aAAatwG,MAAK,SAAA02G,GAAA,OAAeA,EAAYx6G,KAAOu6G,EAAKp3F,WAAW,GAAGnjB,OACtFkrK,EAAS92D,aAAatwG,MAAK,SAAA02G,GAAA,QAAgB,IAAA5F,mBAAkB,CAACphG,KAAMpV,EAASC,aAAcm8G,QAE7F0wD,EAAS92D,cAAgB82D,KAAc,IAAAt2D,mBAAkB,CAACphG,KAAMpV,EAASC,aAAc6sK,MAC1FpuC,GAAiB,EACjB1+H,EAASokB,eAAiB+3F,EAAKxxG,UAC/B3K,EAASsK,kBAAoBwiK,EAASlrK,GACtChQ,QAAQ4B,IAAI,oBAAqBwM,SAIhCA,GA3BEA,KA8BW0+H,mBAnLjB,IAsLM5nB,EAA+CA,EAA/CA,6CAA+C,SAACi2D,EAAqBC,GAChF,IAAMC,EAAeD,EAAkB,GACjCE,EAAsBH,EAAsBA,EAAoBzoJ,YAAc,KACpF,QAAI0oJ,EAAkB3+K,OAAS,GAAK4+K,GAAgBD,EAAkBnzK,MAAK,SAAAszK,GAAA,OAAMA,EAAGvrK,KAAOsrK,EAAoBtrK,SAGxGsrK,GAAuBD,GAAiBC,EAAoBtrK,KAAOqrK,EAAarrK,MAChFqrK,EAAaj3D,eAAiBi3D,EAAaj3D,aAAa3nH,SACvD4+K,EAAaj3D,aAAan8G,MAAK,SAAAuzK,GAAA,OAAMA,EAAGxrK,KAAOsrK,EAAoBtrK,SAwIvEyrK,GA9H0C/uC,EAAnCA,iCAAmC,SAACX,EAAcS,GAE7D,IAAII,GAAuB,EACvBD,EAAsBjwI,OAAO+2B,OAAO,GAAIs4G,GAE5CrvI,OAAOmc,KAAK8zH,GAAqBvmI,SAAQ,SAAA5G,GAEnCmtI,EAAoBntI,GAAKkzB,aACxBi6G,EAAoBntI,GAAKyZ,kBACxBuzH,EAAevkI,MAAK,SAAAsiH,GAAA,OAAoC,IAA3BA,EAAKp3F,WAAW12B,QAAkB8tH,EAAKp3F,WAAW,GAAGnjB,KAAO28H,EAAoBntI,GAAKkzB,YAAY1iB,OAC9Hw8H,EAAehtI,IAAQgtI,EAAehtI,GAAK2zB,YAAyD,IAA1Cq5G,EAAehtI,GAAK2zB,WAAW12B,QACvFkwI,EAAoBntI,GAAKkzB,YAAYla,YAAcg0H,EAAehtI,GAAK2zB,WAAW,GAAG3a,aACrF,IAAAosG,mBAAkB,CAACphG,KAAMmpH,EAAoBntI,GAAKyZ,iBAAkBuzH,EAAehtI,GAAK2zB,WAAW,MAEzGy5G,GAAuB,EACvBD,EAAoBntI,GAAKkzB,YAAc85G,EAAehtI,GAAK2zB,WAAW,OAK1E,IAAMuoJ,EAAe,GAiGrB,OA7FAlvC,EAAepmI,SAAQ,SAAAu1K,GACrB,GAAwC,IAApCA,EAAcxoJ,WAAW12B,QAAyD,UAAzCk/K,EAAcxoJ,WAAW,GAAGqvE,SAAzE,CAGA,IAAM64E,EAAeM,EAAcxoJ,WAAW,GAC9C,IAAKw5G,EAAoBgvC,EAAc5iK,YACpC4zH,EAAoBgvC,EAAc5iK,YAC9B4zH,EAAoBgvC,EAAc5iK,WAAW2Z,cAC5Ci6G,EAAoBgvC,EAAc5iK,WAAW2Z,YAAYla,YAAc6iK,EAAa7iK,WAEnF0sG,EAA6CynB,EAAoBgvC,EAAc5iK,WAAY4iK,EAAcxoJ,aAC7G,CAEH,IAAIyoJ,GAAU,EACdl/K,OAAOmc,KAAKkzH,GAAc3lI,SAAQ,SAAA5G,IAE5BusI,EAAavsI,GAAKkzB,cACjBq5G,EAAavsI,GAAKyZ,iBAClB8yH,EAAavsI,GAAKkzB,YAAYla,YAAc6iK,EAAa7iK,WACvDg0H,EAAehtI,IAAmD,IAA1CgtI,EAAehtI,GAAK2zB,WAAW12B,QAAiBsvI,EAAavsI,GAAKkzB,YAAYla,YAAcg0H,EAAehtI,GAAK2zB,WAAW,GAAG3a,YACvJ,IAAAosG,mBAAkB,CAACphG,KAAMuoH,EAAavsI,GAAKyZ,iBAAkBoiK,KAEjEzuC,GAAuB,EACvB8uC,EAAaC,EAAc5iK,WAAarc,OAAO+2B,OAAO,GAAIk5G,EAAoBgvC,EAAc5iK,YAC5F4zH,EAAoBgvC,EAAc5iK,WAAarc,OAAO+2B,OAAO,GAAIs4G,EAAavsI,GAAM,CAClFkzB,YAAa2oJ,IAEfO,GAAU,MAKTA,IACHF,EAAaC,EAAc5iK,WAAarc,OAAO+2B,OAAO,GAAIk5G,EAAoBgvC,EAAc5iK,YAC5F4zH,EAAoBgvC,EAAc5iK,WAAa,UACxC4zH,EAAoBgvC,EAAc5iK,iBAQ/CyzH,EAAepmI,SAAQ,SAAAu1K,GACrB,GAAwC,IAApCA,EAAcxoJ,WAAW12B,QAAyD,UAAzCk/K,EAAcxoJ,WAAW,GAAGqvE,SAAzE,CAGA,IAAM64E,EAAeM,EAAcxoJ,WAAW,GACzCw5G,EAAoBgvC,IAAmBhvC,EAAoBgvC,GAAejpJ,aAC7Eh2B,OAAOmc,KAAK6iK,GAAct1K,SAAQ,SAAA5G,GAC5Bk8K,EAAal8K,GAAKkzB,aAAegpJ,EAAal8K,GAAKyZ,iBACjDyiK,EAAal8K,GAAKkzB,YAAYla,YAAc6iK,EAAa7iK,aACzD,IAAAosG,mBAAkB,CAACphG,KAAMk4J,EAAal8K,GAAKyZ,iBAAkBoiK,KACjE1uC,EAAoBgvC,EAAc5iK,WAAarc,OAAO+2B,OAAO,GAAIs4G,EAAavsI,GAAM,CAClFkzB,YAAa2oJ,IAGfK,EAAal8K,GAAO,WAO5B9C,OAAOmc,KAAK8zH,GAAqBvmI,SAAQ,SAAA5G,GACvC,GAAKmtI,EAAoBntI,IAASmtI,EAAoBntI,GAAKkzB,aAAgB85G,EAAehtI,IACpFgtI,EAAehtI,GAAK2zB,WAAW12B,QAAqD,IAA1C+vI,EAAehtI,GAAK2zB,WAAW12B,OAD/E,CAMA,IAAMo/K,EAAcrvC,EAAehtI,GAAK2zB,WAAW,GAE/C+xF,EAA6CynB,EAAoBntI,GAAMgtI,EAAehtI,GAAK2zB,cAE7Fw5G,EAAoBntI,GAAO,CACzBkzB,YAAampJ,QAOnBn/K,OAAOmc,KAAK8zH,GAAqBvmI,SAAQ,SAAA5G,IAClCmtI,EAAoBntI,GAAKkzB,aAAe85G,EAAehtI,IAAQgtI,EAAehtI,GAAK2zB,WAAW12B,QACnD,IAA1C+vI,EAAehtI,GAAK2zB,WAAW12B,QAAiBkwI,GAAqBntI,EAAM,IAAMmtI,GAAqBntI,EAAM,GAAGkzB,cAEnHi6G,EAAoBntI,GAAO,CACzBkzB,YAAa85G,EAAehtI,GAAK2zB,WAAW,QAK3C,CAACw5G,sBAAqBC,yBASM,SAACt+H,EAAQsW,EAAc65F,GAC1D,OAAQnwG,GACN,IAAK,aACH,OAAOmwG,GAAuC,sBAAxB75F,EAAatW,OACrC,IAAK,qBACH,MAA+B,iBAAxBsW,EAAatW,OACtB,IAAK,eACH,MAA+B,uBAAxBsW,EAAatW,OACtB,IAAK,aACH,MAAgC,6BAAxBsW,EAAatW,QAA2CmwG,GAAuC,sBAAxB75F,EAAatW,OAC9F,IAAK,2BACH,MAAgC,eAAxBsW,EAAatW,QAA6BmwG,GAAuC,sBAAxB75F,EAAatW,OAChF,IAAK,UACH,MAA+B,WAAxBsW,EAAatW,OACtB,QACE,OAAOsW,EAAatW,SAAWA,KAoD/BwtK,GA3C0C7oJ,EAAnCA,iCAAmC,SAACR,EAAarkB,GAC5D,IAAI4kB,EAAYP,EAAY3e,MAAK,SAAAy2G,GAAA,OAAQA,EAAKp3F,WAAWlrB,MAAK,SAAAyqB,GAC5D,IAAM9N,GAAe,IAAA69E,gCAA+B/vE,GACpD,OAAO9N,GAAgBA,EAAatW,SAAWF,EAASE,aAE1D,IAAK0kB,EAAW,CACd,IAAMyrF,EAA2C,cAA9B,IAAAr6G,2BACnB4uB,EAAYP,EAAY3e,MAAK,SAAAy2G,GAAA,OAAQA,EAAKp3F,WAAWlrB,MAAK,SAAAyqB,GACxD,IAAM9N,GAAe,IAAA69E,gCAA+B/vE,GACpD,QAAK9N,GAGE62J,EAA6BrtK,EAASE,OAAQsW,EAAc65F,SAGvE,OAAOzrF,GAQqC+oJ,EAAjCA,+BAAiC,SAACtpJ,EAAankB,GAAW,2BACrE,YAAmBmkB,EAAnB,+CAAgC,KAArB83F,EAAqB,+BAC9B,YAA0BA,EAAKp3F,WAA/B,+CAA2C,KAAhCT,EAAgC,QACnC9N,GAAe,IAAA69E,gCAA+B/vE,GACpD,GAAI9N,GAAgBA,EAAatW,SAAWA,EAC1C,MAAO,CAACkV,KAAMoB,IAJY,+EADqC,6EASrE,IAAM65F,EAA2C,cAA9B,IAAAr6G,2BATkD,uBAUrE,YAAmBquB,EAAnB,+CAAgC,KAArB83F,EAAqB,+BAC9B,YAA0BA,EAAKp3F,WAA/B,+CAA2C,KAAhCT,EAAgC,QACnC9N,GAAe,IAAA69E,gCAA+B/vE,GACpD,GAAI9N,GAAgB62J,EAA6BntK,EAAQsW,EAAc65F,GACrE,MAAO,CAACj7F,KAAMoB,IAJY,+EAVqC,+EAoB/C,SAAC0zG,GACvB,IAAI0jD,EAAiC,iBAAf1jD,EAA0Bnc,KAAKC,MAAMkc,GAAc,GAMzE,MAL0B,iBAAtB,IAAOA,EAAP,0BAAOA,KAA0C,MAAdA,GACrC57H,OAAOmc,KAAKy/G,GAAYlyH,SAAQ,SAAA5G,GAC9Bw8K,0BAAeA,IAAf,aAA4B7/D,KAAKC,MAAMkc,EAAW94H,SAG/Cw8K,IAuCIC,GA9BsBzjD,EAAtBA,oBAAsB,SAAC0jD,EAAcC,GAAsC,IAA3BC,EAA2B,uDAAP,GACxE9jD,EAA4B4jD,EAA5B5jD,WAAYC,EAAgB2jD,EAAhB3jD,aACbyjD,EAAWF,EAAgBvjD,GAAgBD,GAIjD,GAHI,UAAOzvH,aACT7I,QAAQ4B,IAAI,mBAAoBo6K,GAE9BG,EACF,OAAOH,EAAShtK,QAAO,SAAAozF,GAAA,OAAcA,EAAWu5B,WAElD,IAAMx5B,EAAa65E,EACdhtK,QAAO,SAAAozF,GAAA,OAAcA,EAAWu5B,WAChC7rH,KAAI,SAACsyF,EAAYi6E,GAOhB,MAL8B,SAD9Bj6E,GAAa,IAAAk6E,eAAcl6E,EAAYi6E,GAAiB,EAAOD,IAChD5qF,aACb4Q,EAAW5Q,YAAa,IAAAptF,yBAAwBg4K,GAChDh6E,EAAWpyF,GAAKoyF,EAAWpyF,GAAK,KAElCoyF,EAAWpyF,GAAKisK,EAAmB75E,EAAW5Q,WAAY4Q,EAAWpyF,IAC9DoyF,KAGb,OADApiG,QAAQ4B,IAAI,aAAcugG,GACnBA,GASyB85E,EAArBA,mBAAqB,SAACx4K,EAAgB84K,GACjD,QAAQ,IAAAn4K,yBAAwBX,IAC9B,IAAK,cACH,GAAI84K,EAAkB,IACpB,OAAOA,EAAkB,IAE3B,MACF,IAAK,YACH,GAAIA,EAAkB,IACpB,OAAOA,EAAkB,IAE3B,MACF,IAAK,WACH,GAAIA,EAAkB,IACpB,OAAOA,EAAkB,IAE3B,MACF,QACE,OAAOA,KAUAhvC,EAA0BA,EAA1BA,wBAA0B,SAACnrC,GAAwC,IAA5Bo6E,EAA4B,wDAE1EC,EAAar6E,EAAW5Q,WAE5B,IAAKirF,EAAY,CACfA,EAAa,UACb,IAAMr5D,EAAehhB,EAAWpyF,IAAMoyF,EAAWghB,aAC7CA,EAAe,MACjBq5D,EAAa,eACTr5D,EAAe,IACnBq5D,EAAa,YACJr5D,EAAe,MACxBq5D,EAAa,YAIjB,GAAID,EAAiB,CACnB,IAAME,GAAuB,IAAAC,wBAAuBF,GACpD,OAAIC,GACK,IAAAE,mCAAkCF,GAEpCD,EAET,OAAOA,GAS6B16D,EAAzBA,uBAAyB,SAAC3f,GAA2D,IAA/C3+F,EAA+C,wDAA9B,IAAAW,2BAClE,MAA8B,QAA1Bg+F,EAAW5Q,aAGX4Q,EAAW5Q,WACN4Q,EAAW5Q,aAAe/tF,EAE5B8pI,EAAwBnrC,KAAgB3+F,K,+GClgBjD,I,EAAA,O,oCAEoCo5K,EAAvBA,qBAAuB,UAAMC,cAAc,CACtD/8J,SAAU,M,iGCHZ,OACA,S,IACA,O,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,QACA,Q,IACA,M,6DA0Re,IAxRO,WAAW,WAC/B/X,KAAKwqK,aAAL,UACAxqK,KAAK8gJ,WAAa,CAACrqJ,KAAM,iBACzBuJ,KAAK+0K,aAAe,CAClB36J,EAAG,EACHC,EAAG,GAELra,KAAK+G,MAAQ,CACXiuK,WAAW,EACXluH,WAAW,EACXC,kBAAmB,KACnBkuH,gCAAgC,EAChCC,+BAA+B,EAC/BC,uBAAwB,EACxBC,sBAAuB,EACvBC,0BAA0B,GAE5Br1K,KAAKsnD,IAAM,CACTltC,EAAG,EACHC,EAAG,GAELra,KAAK24D,qBAAuB,IAAI,EAAJ,QAC5B34D,KAAKs1K,kBAAoB,GACzBt1K,KAAK81I,YAAc,KACnB91I,KAAKu1K,sBAAwB,KAC7Bv1K,KAAKw1K,qBAAuB,KAE5Bx1K,KAAK4qD,UAAY,WACf,OAAO5qD,KAAK8pD,aAGd9pD,KAAKy1K,OAAS,WACZ,OAAO,EAAKnuH,KAGdtnD,KAAK+oD,OAAS,SAASzB,GACrBtnD,KAAKsnD,KAAL,gBAAeA,IAGjBtnD,KAAK8pD,UAAY,WACf,OAAO9pD,KAAKsnD,KAGdtnD,KAAK01K,WAAa,SAACjpF,GACjB,EAAK1lF,MAAMiuK,UAAYvoF,GAGzBzsF,KAAK21K,0BAA4B,SAAClpF,GAChC,EAAK1lF,MAAMsuK,yBAA2B5oF,GAGxCzsF,KAAK41K,kBAAoB,WACvB,OAAO,UAAUlrH,YAAY/qD,MAAQ,GAGvCK,KAAKulK,eAAiB,WACpB,OAAO,EAAKzvB,aAGd91I,KAAKg2D,KAAO,WACV,EAAK6/G,gBACL,EAAKC,gBAGP91K,KAAK61K,cAAgB,WACnB,EAAKN,sBAAwB,IAAI,EAAJ,QAC3B,UACA,EAAK/K,aAAapqE,SAASt7C,OAAOnlD,MAAQ,GAAK,UAAgBo2K,aAAap2K,MAC5E,GACA,UAAgBo2K,aAAap2K,MAC7B,UAAgBo2K,aAAal2K,QAC7B,GACA,EACA,EAAKm2K,kCAAkCv+K,KAAK,IAE9C,EAAK+9K,qBAAuB,IAAI,EAAJ,QAC1B,UACA,EAAKhL,aAAapqE,SAASt7C,OAAOnlD,MAAQ,EAAI,GAAK,UAAgBo2K,aAAap2K,MAChF,GACA,UAAgBo2K,aAAap2K,MAC7B,UAAgBo2K,aAAal2K,QAC7B,GACA,EACA,EAAKo2K,iCAAiCx+K,KAAK,IAE7C,EAAKy+K,2BAGPl2K,KAAK81K,aAAe,WAClB,EAAKtL,aAAa/wG,SAChB,EAAK+wG,aAAa9wG,OAAOM,OACzB,EAAKm8G,0BACL,EAAKr1B,WACL,EAAK0pB,aAAa5wG,WAAW6jC,uBAIjCz9F,KAAKk2K,wBAA0B,WAC7Bl2K,KAAKwqK,aAAa/wG,SAChBz5D,KAAKwqK,aAAa9wG,OAAOC,WACzB35D,KAAK2oD,YACL3oD,KAAK8gJ,WACL9gJ,KAAKwqK,aAAa5wG,WAAWsjC,2BAE/Bl9F,KAAKwqK,aAAa/wG,SAChBz5D,KAAKwqK,aAAa9wG,OAAOI,WACzB95D,KAAKmoD,YACLnoD,KAAK8gJ,WACL,UAAalnF,WAAWsjC,2BAE1Bl9F,KAAKwqK,aAAa/wG,SAChBz5D,KAAKwqK,aAAa9wG,OAAOK,SACzB/5D,KAAKwoD,UACLxoD,KAAK8gJ,WACL,UAAalnF,WAAWsjC,2BAE1Bl9F,KAAKwqK,aAAa/wG,SAChBz5D,KAAKwqK,aAAa9wG,OAAOykC,MACzBn+F,KAAKqhG,QACLrhG,KAAK8gJ,WACL9gJ,KAAKwqK,aAAa5wG,WAAWsjC,2BAE/Bl9F,KAAKwqK,aAAa/wG,SAChBz5D,KAAKwqK,aAAa9wG,OAAOM,OAD3B,sBAGEh6D,KAAK8gJ,WACL9gJ,KAAKwqK,aAAa5wG,WAAWsjC,2BAE/Bl9F,KAAKwqK,aAAa/wG,SAChBz5D,KAAKwqK,aAAa9wG,OAAOM,OACzBh6D,KAAKo2K,2BACLp2K,KAAK8gJ,WACL9gJ,KAAKwqK,aAAa5wG,WAAWqjC,yBAE/Bj9F,KAAKwqK,aAAa/wG,SAChBz5D,KAAKwqK,aAAa9wG,OAAOM,OACzBh6D,KAAKu1K,sBAAsBt7G,OAC3Bj6D,KAAK8gJ,WACL9gJ,KAAKwqK,aAAa5wG,WAAWqjC,yBAE/Bj9F,KAAKwqK,aAAa/wG,SAChBz5D,KAAKwqK,aAAa9wG,OAAOM,OACzBh6D,KAAKw1K,qBAAqBv7G,OAC1Bj6D,KAAK8gJ,WACL9gJ,KAAKwqK,aAAa5wG,WAAWqjC,0BAIjCj9F,KAAKq2K,kBAAoB,WACvB,EAAK7L,aAAa5mE,YAAY,EAAKk9C,aAGrC9gJ,KAAK+3D,iBAAmB,WACtB,EAAKyyG,aAAa5mE,YAAY,EAAKk9C,aAGrC9gJ,KAAKmoD,YAAc,SAACC,EAAUjyD,GAK5B,OAHI,EAAK4Q,MAAMmuK,+BACb,EAAKoB,+BAEF,EAAKC,gBAAgBnuH,KAGtB,EAAKrhD,MAAMkuK,gCACb,EAAKuB,8BAEP,EAAKhM,aAAaliH,aAAY,GAAM,GACpC,EAAKvhD,MAAM+/C,WAAY,EACvB,EAAK//C,MAAMggD,kBAAoBqB,EAC/B,EAAKoiH,aAAajiH,UAAU,WAAY,GAAM,IAEvC,IAGTvoD,KAAKwoD,UAAY,SAACJ,EAAUjyD,GAC1B,QAAK,EAAKogL,gBAAgBnuH,KAG1B,EAAKrhD,MAAM+/C,WAAY,EACvB,EAAK//C,MAAMggD,kBAAoB,KAExB,EAAK4B,YAAYP,EAAUjyD,KAGpC6J,KAAK2oD,YAAc,SAACP,EAAUjyD,GAC5B,OAAIA,EAAEyyD,YAGN,EAAK7hD,MAAMmuK,8BAAgC,EAAKM,qBAAqBtc,UAAU9wG,KAC1E,EAAKmuH,gBAAgBnuH,KAG1B,EAAKrhD,MAAMkuK,+BAAiC,EAAKM,sBAAsBrc,UAAU9wG,GAC7E,EAAKrhD,MAAM+/C,UACb,EAAK2vH,kBAAkBruH,GAEvB,EAAKoiH,aAAavhH,YAAY,IAEzB,KAGTjpD,KAAKqhG,QAAU,SAACj5C,EAAUjyD,GAIxB,OAAO,GAET6J,KAAKy2K,kBAAoB,SAACruH,GACxB,IAAK,EAAKmuH,gBAAgBnuH,GACxB,OAAO,EAET,IAAIS,EAAQT,EAAShuC,EAAI,EAAKrT,MAAMggD,kBAAkB3sC,EAClD0uC,EAAQV,EAAS/tC,EAAI,EAAKtT,MAAMggD,kBAAkB1sC,EAEtD,EAAKitC,IAAIltC,GAAKyuC,EACd,EAAK9hD,MAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,EAE1C,EAAKktC,IAAIjtC,GAAKyuC,EACd,EAAK/hD,MAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAG5Cra,KAAKg2K,kCAAoC,WACvC,EAAKT,sBAAsBn7J,EAAI,EAAKowJ,aAAapqE,SAASt7C,OAAOnlD,MAAQ,GAAK,UAAgBo2K,aAAap2K,OAG7GK,KAAKi2K,iCAAmC,WACtC,EAAKT,qBAAqBp7J,EAAI,EAAKowJ,aAAapqE,SAASt7C,OAAOnlD,MAAQ,EAAI,GAAK,UAAgBo2K,aAAap2K,OAGhHK,KAAKw2K,4BAA8B,WACjC,IAAME,EAAY,UAAUtpH,cACtBupH,GAAsB,IAAA74F,wBAAuB,EAAK/2E,MAAMouK,uBAAwBuB,GAChF98H,EAAQ,UAAUoe,aAAa2+G,GASrC,OAPI/8H,aAAiBA,EAAjBA,SACF,UAAcg9H,gBAAgBh9H,GAAO,GACrC,EAAK7yC,MAAMouK,uBAAyBv7H,EAAM5xC,KAE1C,EAAKjB,MAAMouK,uBAAiD,OAAxBwB,EAA+B,EAAIA,EACvE,EAAKH,gCAEA,GAGTx2K,KAAKs2K,2BAA6B,WAChC,IAAMI,EAAY,UAAUtpH,cACtBupH,GAAsB,IAAA74F,wBAAuB,EAAK/2E,MAAMquK,sBAAuBsB,GAC/E98H,EAAQ,UAAUoe,aAAa2+G,GASrC,OAPI/8H,aAAiBA,EAAjBA,SACF,UAAci9H,YAAYj9H,GAAO,GACjC,EAAK7yC,MAAMquK,sBAAwBx7H,EAAM5xC,KAEzC,EAAKjB,MAAMquK,sBAAgD,OAAxBuB,EAA+B,EAAIA,EACtE,EAAKL,+BAEA,GAGTt2K,KAAKu2K,gBAAkB,WAAuB,IAAtBnuH,EAAsB,uDAAX,CAAChuC,EAAG,GACjC08J,EAAM,EAAKlB,oBAEf,OAAOxtH,EAAShuC,EAAI08J,GAGtB92K,KAAKo2K,2BAA6B,SAACzyH,GAA8B,IAAzBozH,EAAyB,wDAE7D,OAAO,IAAAC,qBAAoBrzH,EAAKozH,IAGpC/2K,KAAKm2K,0BAA4B,SAACxyH,GACb,UAAMxhD,WACuBwH,cAAcstK,iCAE5D,IAAAC,uCAAsCvzH,EAAK,EAAK2xH,sB,2SC9RtD,Q,IACA,M,IACA,O,IAEA,O,IACA,QACA,QAMA,QACA,UACA,SACA,SACA,QACA,QAIA,SACA,UACA,Q,mDAEO,IAAMtgH,EAAkBA,EAAlBA,gBAAkB,WAA6C,IAA5Cp/B,EAA4C,uDAA/B,2BACrC1a,GAAS,IAAAC,oBACXyB,EAAe1B,EAAO+a,2BAA2BL,GACrD,IAAKhZ,EAAc,CACjB,IAAMu6J,EAAaj8J,EAAOgb,wBAAwBN,GAC9CuhJ,IACFv6J,EAAe,CAACpB,KAAM27J,IAS1B,OANKv6J,IACHA,EAAe1B,EAAOsD,MAAP,YAA8BtD,EAAOsD,MAAP,WAA2B2yB,WACpE,CAAC31B,KAAMN,EAAOsD,MAAP,WAA2B2yB,YAClC,MAGCv0B,GA8HIw6J,GA3HcC,EAAdA,YAAc,SAACz6J,GAA0G,IAA5FqnE,EAA4F,uDAA/E,GAAIpuC,EAA2E,uDAAlE,GAAIyhI,IAA8D,yDAApCxgE,EAAoC,wDAChI7xB,EAAW,GACf,IAAKroE,EACH,OAAOqoE,EAET,IAAIsyF,EAAoB36J,EAAapB,KAAOoB,EAAe,CAACpB,KAAMoB,GAC5D7V,EAAQ,UAAM5E,WACbgoB,EAAkBpjB,EAAM4J,YAAxBwZ,eAEP,GAAIA,EACF86D,EAAWu6C,EAAyB+3C,EAAmBtzF,EAAYpuC,OAC9D,CACL,IAAM36B,GAAS,IAAAC,oBACf8pE,EAAW/pE,EAAOo9E,sBAAsBi/E,EACtC1hI,EACAouC,EACAqzF,EACAxgE,EACA,GACA,CAAE2oB,aAAc,KAAMC,gBAAiB,OAI3C,OAAOz6C,GAG4BuyF,EAAxBA,sBAAwB,WACnC,IAAMt8J,GAAS,IAAAC,oBACTpU,EAAQ,UAAM5E,WACd2W,EAAS/R,EAAMmG,YAAY4L,OAC3B7L,EAAmBlG,EAAMmG,YAAYD,iBACrC+I,EAAejP,EAAMgO,YAAYiB,aACjCmC,EAAiBpR,EAAMpB,gBAGvB8xK,EAAc3+J,EAAO7L,GAErBL,EAAcuL,EAAezQ,SAASkF,YACtCiU,EAAU,CACd62J,SAAWD,GAAeA,EAAYzsD,aAAgBysD,EAAYzsD,aAAe,KACjFp+G,cACAwkE,aAAch4E,SAASC,SAASmC,OAChC2c,iBACAw/J,cAAez8J,EAAOqmE,+BACtBvrE,aAAcA,GAiBhB,OAFAhe,QAAQ4B,IAAI,sCAAuCinB,GAE5CA,GAKuB+2J,EAAnBA,iBAAmB,SAAC/2J,GAAY,IACtCuwD,EAAoFvwD,EAApFuwD,aAAcj5D,EAAsE0I,EAAtE1I,eAAgBw/J,EAAsD92J,EAAtD82J,cAAe/qK,EAAuCiU,EAAvCjU,YAAa8qK,EAA0B72J,EAA1B62J,SAAU1hK,EAAgB6K,EAAhB7K,aACzE,UAAOmC,eAAiBA,EACxBhgB,OAAOi5E,aAAeA,EACtBj5E,OAAOw/K,cAAgBA,EACvB,UAAO3hK,aAAeA,EAMlBpJ,IACF,GAAGvU,MAAMxD,KAAKuE,SAASwsK,iBAAiB,iCAAiCxnK,SAAQ,SAAA+7E,GAC9EA,EAAQloB,QAAQ/6D,QAAU0V,EACvButE,EAAQj+E,UAAUC,IAAI,UACtBg+E,EAAQj+E,UAAU27K,OAAO,cAE/B,IAAAC,gBAAelrK,GACf,UAAQmrK,eAAe,CAACnrK,iBAItB8qK,GAE+B,KADjCA,EAAgC,iBAAbA,EAAyBvjE,KAAKC,MAAMsjE,GAAYA,GACtDM,iBACX,IAAAC,uBAAsBP,GAEtB,UAAUxpH,OAAOwpH,IAET,UAAO3xH,mBACjB,UAAUmI,OAAO,IAKjB,UAAMjqC,UAAS,IAAAi0J,4BAA0B,IAAAC,+BAE3C,IACMt/G,EADQ,UAAM12D,WACa4L,UAAU8qD,mBAC3C,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,KAGhCu/G,EAAhBA,cAAgB,SAACC,EAAgBC,EAA8BC,GAC1E,IAAMC,EAAcrgL,OAAO2B,SAASwb,KAAKnb,SAAS,QAClD,UAAM8pB,UAAS,IAAAo/F,iBAAgB,EAAAhrE,eAAeC,WAE1CkgI,EACF,EAAAtmJ,YAAYn9B,KAAKsjL,IAEjB,UAAMp0J,UAAS,IAAAg/F,sBAAoB,IACnC,UAAMh/F,UAAS,IAAAi/F,uBAAsB,OACjCo1D,GACFlB,EAAuBmB,KAKSnB,EAAzBA,uBAAyB,SAACmB,GACrC,IAAMxxK,EAAQ,UAAM5E,WAD2C,EAEoB4E,EAAM4J,YAAlFwZ,EAFwD,EAExDA,eAAgBC,EAFwC,EAExCA,iBAAkBtZ,EAFsB,EAEtBA,qBAAsBF,EAFA,EAEAA,iBACxDrO,EAAawE,EAAM3E,UAAnBG,UACA0K,EAAoBlG,EAAMmG,YAA1BD,iBACAwX,EAAwB1d,EAAMgf,eAA9BtB,qBACH0F,GAAkBvZ,IAChB6T,GACF,UAAMR,UAAS,IAAAO,4BAA2B,OAG5C+zJ,GADqB,IAAAE,uBAAsB7nK,EAAkBwZ,EAAkBtZ,EAAsBvO,EAAW0K,OAKvGuyH,EAA2BA,EAA3BA,yBAA2B,SAAC9iH,GAAyI,IAAhIunE,EAAgI,uDAAnH,GAAIpuC,EAA+G,uDAAtG,GAAIplC,EAAkG,uDAAlF,KAAMhV,EAA4E,uDAA3DrC,SAASC,SAASoC,eAAgBi9K,EAAyB,wDAE5KloK,EAAYkM,EAAQlB,KAAKG,yBAA2Be,EAAQlB,KAAKI,QAAUc,EAAQlB,KAAKK,SACtF4O,EAAckuJ,EAA6BnoK,EAAWC,GACtDyK,GAAS,IAAAC,kBAAiB1f,GAC1BwpF,EAAW/pE,EAAOo9E,sBAAsB57E,EAASm5B,EAASouC,GAAY,EAAO,OAG/E20F,EAAc,GAClB,GAAInuJ,EAAYh2B,OACd,GAA2B,IAAvBg2B,EAAYh2B,OAAc,CAC5B,IAAMokL,EAA0B5zF,EAASj+E,QAAO,SAAA2Y,GAAA,QAAY,IAAAi9F,mBAAkBj9F,EAAS8K,EAAY,GAAGU,WAAW,OAC7G0tJ,EAAwBpkL,SAC1BmkL,EAAcC,GACTpoK,GAAiBioK,IACpBE,EAAcA,EAAY9wK,KAAI,SAAA6X,GAC5B,uBAAWA,EAAX,CAAoBm5J,iBAAkBruJ,EAAY,GAAGU,WAAW,GAAGnjB,GAAI2rK,cAAelpJ,EAAY,GAAG1Z,qBAItG,4BACL,IADK,IACL,EADK,iBACMgoK,EADN,QAEGF,EAA0B5zF,EAASj+E,QAAO,SAAA2Y,GAAA,QAAY,IAAAi9F,mBAAkBj9F,EAASo5J,EAAW5tJ,WAAW,OACzG0tJ,EAAwBpkL,SACrBmkL,EAAYnkL,OAQfokL,EAAwBz6K,SAAQ,SAAA46K,GACzBJ,EAAY34K,MAAK,SAAA0f,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAOgxK,EAAWx9J,KAAK7X,UAAUqE,OACvF4wK,EAAY7jL,MACT0b,GAAiBioK,GAAlB,gBACQM,EADR,CACoBF,iBAAkBC,EAAW5tJ,WAAW,GAAGnjB,GAAI2rK,cAAeoF,EAAWhoK,YACzFioK,OAZVJ,EAAcC,GACTpoK,GAAiBioK,IACpBE,EAAcA,EAAY9wK,KAAI,SAAA6X,GAC5B,uBAAWA,EAAX,CAAoBm5J,iBAAkBC,EAAW5tJ,WAAW,GAAGnjB,GAAI2rK,cAAeoF,EAAWhoK,mBAPvG,EAAyB0Z,EAAzB,+CAAsC,IADjC,8EA2BT,OAAOmuJ,GAUID,EAA+BA,EAA/BA,6BAA+B,SAACnoK,GAAuD,IAA5CC,EAA4C,uDAA5B,KAAM2M,EAAsB,uDAAT,KACnFrW,EAAQ,UAAM5E,WAD8E,EAEjD4E,EAAM4J,YAAhDC,EAF2F,EAE3FA,iBAAkBE,EAFyE,EAEzEA,qBACnB2Z,GAAc,IAAAG,mBAAkBha,EAAkBE,GAAsB,GAE9E,OAAO2Z,EAAYzjB,QAAO,SAAC+xK,GACzB,OAAqC,IAAjCA,EAAW5tJ,WAAW12B,QAAiBskL,EAAW5tJ,WAAW,GAAG3a,YAAcA,MAG9EC,GAAkBsoK,EAAW5tJ,WAAW,GAAGnjB,KAAOyI,MAGlD2M,KACM,IAAAw/F,mBAAkB,CAACphG,KAAM4B,GAAa27J,EAAW5tJ,WAAW,UAMpC8tJ,EAAzBA,uBAAyB,WACpC,IAAMC,EAA2BlkH,EAAgB,gBAG7CiwB,SAFU,UAAM9iF,WACWwO,YAAxBwZ,eAGL86D,EAAWu6C,EAAyB05C,EAA0B,GAAI,IAGlEj0F,GADe,IAAA9pE,oBACGm9E,sBAAsB4gF,EACtC,GACA,IACA,EACA,MACA,GACA,CAAEz5C,aAAc,KAAMC,gBAAiB,OAI3C,IACMy5C,EAAqBl0F,EAASn5E,MAAK,SAAA6T,GAAA,MADV,uBACqBA,EAAQnE,KAAKhD,oBACjE,OAAI2gK,IAIGl0F,EAASxwF,OAASwwF,EAAS,GAAK,Q,wIC1RzC,QACA,Q,IACA,QACA,Q,IACA,Q,IACA,O,qDAEam0F,K,YAEX,WAAYC,EAAUv6F,EAASv7E,IAAU,yGAEnCu7E,GAAYu6F,GAAY91K,IAAa,EAAAC,aAAa02B,UACpD,EAAKze,aAAe,GACpB,EAAKmmE,kBAAoB,GACzBltF,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKroE,aAAaqoE,GAAc,GAChC,EAAKlC,kBAAkBkC,GAAc,MAEvC,EAAKsO,qBAAsB,EAC3B,EAAKknF,sBAAuB,EAC5B,EAAKC,uBAAyB,EAC9B,EAAKpzJ,cAAgB,KACrB,EAAK6gE,mBAAqB,KAC1B,EAAKN,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKC,oBAAsB,KAC3B,EAAKG,6BAA+B,KAEpC,EAAKp2D,SAAU,EACf,EAAK4/G,iBAAkB,EACvB,EAAKj1H,OAAS,KACd,EAAKs+J,qBAAsB,EAC3B,EAAKC,qBAAsB,EAC3B,EAAKC,wBAA0B,GAC/B,EAAKC,gBAAkB,KACvB,EAAKpmE,iBAAkB,EACvB,EAAKne,oBAAsB,MAEzBikF,IACF,EAAK31K,cAAgB,GACrB,EAAKqb,aAAe,IAEjB+/D,GAAYu6F,IACf,EAAK11K,UAAY,KACjB,EAAKkjF,MAAQ,IAAI,EAAJ,QAAU,MACvB,EAAKluE,mBAAqB,KAC1B,EAAKoS,UAAY,IAEnB,EAAKlP,SAAW,GAzCuB,E,wFAiEjBplB,EAAMS,GAAO,WACnC,MAAa,eAATT,GAAyC,kBAAhBuJ,KAAKsG,OACzBtG,KAAK8S,SAAL,QAA2B9S,KAAK8S,SAAL,OAA0B5b,EAEjD,cAATT,GAAwC,gBAAhBuJ,KAAKsG,QAEvBtG,KAAK8S,SAAL,WAA+B9S,KAAK8S,SAAL,UAA6B5b,IAEzD,eAATT,GAAyC,gBAAhBuJ,KAAKsG,QAC3BsB,MAAMC,QAAQ7H,KAAK8S,SAAL,YAAgC9S,KAAK8S,SAAL,UAA2B3Y,SAAS,SAIpF6F,KAAK8S,SAASrc,KAGfmR,MAAMC,QAAQ7H,KAAK8S,SAASrc,IACvBuJ,KAAK8S,SAASrc,GAAMwJ,MAAK,SAAA25K,GAC9B,OAAOA,IAAc,EAAAzhJ,SAASC,MAAQxwB,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAKquF,EAAWntF,OAAQ,IAAAlB,MAAKquF,EAAW1iL,OAGpH8I,KAAK8S,SAASrc,KAAU,EAAA0hC,SAASC,MAClCxwB,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAK,EAAKz4E,SAASrc,GAAOg2F,OAAQ,IAAAlB,MAAKvrF,KAAK8S,SAASrc,GAAOS,O,sDAG7E8pF,GAAmB,WACjD,OAAOA,EAAkBnjF,OAAM,SAACujF,GAC9B,OAAO,EAAK0D,wBAAwB1D,EAAUF,SAAUE,EAAUE,gB,uCAKpE,OAAO,IAAI,EAAJ,QAAyBthF,KAAK6b,SAAU7b,Q,6BArDpCyb,K,eAIX,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKyb,aAAaP,EAAOwmE,0B,kCAEhBjmE,K,eAIhB,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAK4hF,kBAAkB1mE,EAAOwmE,4B,6RCjEzC,aAEam4F,qFACAC,yEACAC,2FACAC,uFACA/zD,0EACAb,2EAEoBiB,EAApBA,0GACoB4zD,EAApBA,0GAGmBjzD,EAAnBA,iBAAmB,CAC9BtsB,8DACAC,yEACAC,4EACAC,yEACAC,uFACAC,oFACAC,uFACAC,kGACAC,+DACAC,6EACAC,0EACAC,0F,iKCzBF,S,IACA,OACA,QACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,Q,qDAEao0C,gB,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAjsI,aAAaC,UADpB,OAGZ,EAAK2lF,wBAAyB,EAC9B,EAAK7lF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,0BACA,EAAKmY,SAAW,mBAChB,EAAKH,YAAc,uCACnB,EAAKqD,aAAe,GACpB,EAAKspE,kBAAoB,KACzB,EAAKqnD,aAAe,KACpB,EAAKC,eAAiB,KACtB,EAAKC,UAAY,KACjB,EAAKC,UAAY,KAGjB,EAAKC,UAAY,EAAA72G,mBAAmBE,gBACpC,EAAK42G,mBAAqB,OAC1B,EAAKC,gBAAkB,OAlBX,E,qEAsBTrsI,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,gBACHy/H,EAAkB,eAClBC,YACA,MACF,IAAK,kBACHD,EAAkB,iBAClBC,YACA,MACF,IAAK,cACHD,EAAkB,YAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YAGJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,yCAKQ,WACZ3D,KAAKqoF,oBACRroF,KAAKqoF,kBAAoB,IAAI,EAAJ,SAAsB,GAC/CroF,KAAKqoF,kBAAkBw4B,OAAS,CAC9BtnF,uBAAwB,EACxBC,yBAA0B,EAC1BC,yBAA0B,GAE5Bz5B,KAAK+e,aAAao3C,QAAQn2D,KAAKqoF,mBAC/BroF,KAAKqoF,kBAAkB3nF,UAAY,kBAAM,IAE3ChM,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA8gB,GAC9B,EAAKmpE,kBAAkB5sE,aAAayD,GAAc,CAChDuwH,EAAea,8BAAf,uBAEE,iBACA,OACA,OACA,CACE,WAAc,CAACpxH,GACf,WAAc,CAAC,QACf,eAAkB,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,SAErE,EACA,SAGJ,EAAKmpE,kBAAkBw4B,OAAO3hG,EAAW5iB,cAAgB,8B,gCAyBnD4e,EAAQq1H,GAEhB,IAAKvwI,KAAKopF,uBACR,OAAO,KAGT,IAAIpY,EAAM,GAQV,OAPAhxE,KAAKwwI,kBAAkBpyI,SAAQ,SAAAwuI,GAC7BA,EAAYn+B,UAAUvzF,GACrBq1H,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMz/D,GAC3C47D,EAAYzmH,eAAgBymH,EAAYzmH,cAAc0gE,MAAM4pD,MAAMz/D,MAGjEA,EAAIv8E,OAASu8E,EAAM,O,iCAK1B,IAAIv0D,EAAWA,GAAXA,qBACCzc,KAAKwwI,kBAAkBxpI,QAAO,SAAAiqE,GAAA,OAAQA,EAAK1gD,WAASzoB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,QADnG,aAEClP,KAAKkb,OAAOsD,MAAMu7E,OAAOt9E,WAAWzV,QAAO,SAAA0V,GAC5C,MAAyB,YAAjBA,EAAQ4F,MACO,gBAAjB5F,EAAQ4F,MACS,iBAAjB5F,EAAQ4F,MACS,wBAAjB5F,EAAQ4F,MACS,gBAAjB5F,EAAQ4F,MACS,WAAjB5F,EAAQ4F,MACS,cAAjB5F,EAAQ4F,MACS,kBAAjB5F,EAAQ4F,MACS,oBAAjB5F,EAAQ4F,UAUlB,OANItiB,KAAK8vI,YAAc,EAAA72G,mBAAmBG,cACxC3c,EAAWA,EAASzV,QAAO,SAAA0V,GACzB,MAA+B,gBAAxBA,EAAQlB,KAAKlV,QAAoD,uBAAxBoW,EAAQlB,KAAKlV,QAA2D,mBAAxBoW,EAAQlB,KAAKlV,WAI1GmW,I,8CAIP,OAAOzc,KAAKkb,OAAOsD,MAAMu7E,OAAOy2C,kBAAkBxpI,QAAO,SAAAgY,GACvD,MAA2B,mBAAnBA,EAAQ1Y,QACS,gBAAnB0Y,EAAQ1Y,QACW,yBAAnB0Y,EAAQ1Y,QACW,uBAAnB0Y,EAAQ1Y,QACW,gBAAnB0Y,EAAQ1Y,QACW,uBAAnB0Y,EAAQ1Y,QACW,cAAnB0Y,EAAQ1Y,QACW,kBAAnB0Y,EAAQ1Y,QACW,oBAAnB0Y,EAAQ1Y,Y,0CAMhB,GADAtG,KAAKopF,wBAAyB,EAC1BppF,KAAKkb,OAAO9P,OAAS,EAAAsrB,WAAWgkE,MAAO,CACzC,IAAMg2C,EAAe1wI,KAAKkb,OAAOsD,MAAMu7E,OACnC22C,EAAarnD,YAAcqnD,EAAarnD,WAAWvG,WACrD4tD,EAAarnD,WAAWvG,UAAW,EACnC4tD,EAAarnD,WAAWuJ,gBACxB5yF,KAAKopF,wBAAyB,M,2CAMlC,OAAO,I,8EAKCnC,GACR,IAAKjnF,KAAKopF,uBACR,OAAO,KAGNnC,GACDjnF,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEyhI,UAAU1pD,Q,mCAGlC6oD,GACX9vI,KAAK8vI,UAAYA,I,mCAIjB,OAAO9vI,KAAKgwI,kB,yCAIZ,OAAOhwI,KAAK+vI,qB,oCAGAA,EAAoBC,GAChChwI,KAAK+vI,mBAAqBA,EAC1B/vI,KAAKgwI,gBAAkBA,I,4FAvHYpsI,EAAiBnN,EAAMs5I,EAAoBC,EAAiBl9H,EAAUvZ,EAAQyO,GACjH,IAAM4oI,EAAO,IAAI,EAAJ,QAiBb,OAhBAA,EAAK/0H,SAAWplB,EAChBm6I,EAAKroD,aAAe9xF,EAAK6F,cAAcqC,QAAQ,MAAO,KACtDiyI,EAAKjtI,UAAY,GACjBitI,EAAKrtD,YAAc9sF,EACnBm6I,EAAKpgI,UAAY,qBACjBogI,EAAKZ,gBAAkBA,EAEvBY,EAAKlwI,UAAY,kBAAMnH,EAAO8uF,mBAC9BuoD,EAAK99H,SAAWA,EAChB89H,EAAKb,mBAAqBA,EAC1Ba,EAAKhtI,gBAAkBA,EACvBgtI,EAAKjtI,WAAY,IAAAsZ,wBAAuB,CACtCnK,WACA9K,KACA2N,UAAU,IAELi7H,M,aA7GF5oI,GAAK,mB,mPCdd,IAAYq6I,E,wJAAZ,MAEO,IAAM63B,EAAsBA,EAAtBA,oBAAsB,CACjCj4D,OAAQ,SACRk4D,SAAU,WACVC,SAAU,WACVC,OAAQ,SACRC,QAAS,UACTC,QAAS,WAGElvK,EAAiBA,EAAjBA,eAAiB,CAC5B7I,MAAO,QACPg4K,QAAS,WAGEC,EAAiBA,EAAjBA,eAAiB,CAC5BC,IAAK,MACLC,GAAI,MAcOC,GAXyBC,EAAzBA,uBAAyB,CACpCroI,QAAS,UACT8nI,QAAS,WAG2BQ,EAAzBA,uBAAyB,CACpCC,kBAAmB,qBACnBC,cAAe,SACfC,uBAAwB,2BAGOL,EAApBA,kBAAoB,CAC/B5yK,GAAIq6I,EAAUF,UAAU,CAACE,EAAUzpC,OAAQypC,EAAU7/G,SAASy2E,WAC9D3iG,MAAO+rI,EAAUzpC,OAAOK,WACxBxiH,KAAM4rJ,EAAU7/G,OAAOy2E,WACvB0a,QAAS0uB,EAAUD,KAAKnpC,WACxB7tG,KAAMi3I,EAAUE,MAAM,CAACl3I,EAAe7I,MAAO6I,EAAemvK,UAAUvhE,WACtE7hH,KAAMirJ,EAAUE,MAAM,CAACk4B,EAAeC,IAAKD,EAAeE,KAAK1hE,WAC/D3tG,OAAQ+2I,EAAUzpC,OAAOK,WACzBiiE,SAAU74B,EAAUD,KAAKnpC,WACzBkiE,WAAY94B,EAAUD,KACtB72B,SAAU82B,EAAUD,KAEpB52B,WAAY62B,EAAUD,KACtBg5B,KAAM/4B,EAAU7/G,OAChB64I,aAAch5B,EAAUF,UAAU,CAACE,EAAUzpC,OAAQypC,EAAU7/G,SAC/D84I,aAAcj5B,EAAUE,MAAM7tJ,OAAOmc,KAAKqpK,IAC1Ca,kBAAmB14B,EAAUzpC,OAC7BoiE,cAAe34B,EAAUzpC,OACzBqiE,uBAAwB54B,EAAUzpC,OAClC2iE,eAAgBl5B,EAAU7/G,OAC1Bg5I,gBAAiBn5B,EAAUD,KAC3Bq5B,eAAgBp5B,EAAU7/G,SAGak5I,EAA5BA,0BAA4B,CACvC1zK,GAAIq6I,EAAUzpC,OAAOK,WACrB3iG,MAAO+rI,EAAUzpC,OAAOK,WACxBxiH,KAAM4rJ,EAAU7/G,OAAOy2E,WACvB7tG,KAAMi3I,EAAU7/G,OAChB8oF,UAAW+2B,EAAUnpC,QAAQmpC,EAAUzoG,MAAMghI,M,8EC7DRxxD,EAA1BA,wBAA0BhwH,SAASC,SAASC,UAAY,0DAAgF,SAAlBQ,SAAS6hL,KACxI,qFACA,gEAC6BC,EAApBA,kBAAqBxiL,SAASC,SAASC,WAAaF,SAASC,SAASwiL,gBAAoC,SAAlB/hL,SAAS6hL,KAC1G,KACA,+B,4MCmDYtvK,iBAAT,SAA0B+N,GAC/B,OAAOA,EAAEtC,WAAWnZ,QAAQ,wBAAyB,MAzDvD,Y,IACA,M,mDAUoCm9K,EAAvBA,qBAAuB,SAACt5K,EAAOa,EAAS8U,EAAgBJ,GACnE,OAAIvV,GACK,IAAAkR,sBAAqByE,EAAezQ,SAAUlF,EAAOa,GAAS,GAEnEA,GAAW8U,EAAeE,UAA+B,uBAAnBhV,EAAQiD,QAAsD,SAAnBjD,EAAQiD,QACpFyR,EAAS,4BAEXA,EAAS,0BASqB1K,EAA1BA,wBAA0B,SAAChK,GAAuC,IAA9ByO,EAA8B,uDAAT,KAChEpK,EAAWoK,EAIf,OAHKpK,IACHA,EAAW,UAAMvF,WAAWwD,gBAAgB+B,UAE1CA,EAAS6H,wBACJlM,EAAQM,UAAUnB,MAEvBkF,EAAS+H,gBAA8D,iBAApCpM,EAAQM,UAAUm1G,gBAAgCz1G,EAAQM,UAAUm1G,eAAiB,EACnHz1G,EAAQM,UAAUm1G,eAEpBz1G,EAAQM,UAAUjB,MAUCq5K,EAAfA,aAAe,SAAC5jK,GAAqC,IAArB6jK,EAAqB,wDAC1DlqK,EAAqBqG,EAAezQ,SAC1C,OAAIs0K,EACKlqK,EAAmBk1H,cAAgB7uH,EAAe+uH,mBAEpDp1H,EAAmBk1H,cAAgB7uH,EAAe8uH,4BAA8B9uH,EAAe+uH,oBAcxG,IAAM+0C,EAAiB,SAACz5K,EAAO05K,EAAaC,GAC1C,IAAMC,EAAc55K,EAAQ05K,EAAc,IAC1C,MAAsB,cAAfC,EAA6B35K,EAAQ45K,EAAc55K,EAAQ45K,GAU/BxqK,EAAxBA,sBAAwB,SAACpP,EAAOmP,EAAaG,GACxD,IAAKtP,IAAUmP,EACb,OAAOnP,EAET,GAAIsP,GAAsBA,EAAmBvC,yBAC3C,GAAIoC,EAAYjP,MAAQiP,EAAYjP,KAAKxL,MACvC,OAAO+kL,EAAez5K,EAAOmP,EAAYjP,KAAKxL,MAAOya,EAAYjP,KAAK0I,WAEnE,GAAI0G,GAAsBA,EAAmBrC,gBAClD,GAAIkC,EAAY25G,WAAa35G,EAAY25G,UAAUp0H,MACjD,OAAO+kL,EAAez5K,EAAOmP,EAAY25G,UAAUp0H,MAAOya,EAAY25G,UAAUlgH,WAE7E,GAAIuG,EAAY0qK,QAAU1qK,EAAY0qK,OAAOnlL,MAClD,OAAO+kL,EAAez5K,EAAOmP,EAAY0qK,OAAOnlL,MAAOya,EAAY0qK,OAAOjxK,MAE5E,OAAO5I,GAGkB8wH,EAAdA,YAAc,SAACgpD,GAC1B,IAAKA,EACH,MAAO,GAET,IAAIjpD,EAAelf,KAAKC,MAAMkoE,GAY9B,MAX4B,iBAAxB,IAAOjpD,EAAP,0BAAOA,KAA8C,MAAhBA,IAEvC3+H,OAAOmc,KAAKwiH,GAAcj1H,SAAQ,SAAA5G,GACE,YAA7B,aAAO67H,EAAa77H,KAAsB67H,EAAa77H,GAAKN,QAC/Dm8H,EAAa77H,GAAKN,OAASm8H,EAAa77H,GAAKN,UAG7Cm8H,EAAakpD,4BACRlpD,EAAakpD,qBAGjBlpD,I,mJChHT,IAAY7yG,E,wJAAZ,OAE2Bg8J,EAAdA,YAAc,iBAAO,CAChCpxK,KAAMoV,EAAMitD,cACZ5sD,QAAS,KAGcixJ,EAAZA,UAAY,SAACh5J,GAAD,MAAa,CACpC1N,KAAMoV,EAAMktD,WACZ7sD,QAAS,CAAC/H,YAGe2jK,EAAdA,YAAc,SAAC/iK,EAAOgjK,GAAR,MAA0B,CACnDtxK,KAAMoV,EAAMmtD,aACZ9sD,QAAS,CAACnH,QAAOgjK,kBAGgB7K,EAAtBA,oBAAsB,SAAC5kK,GAAD,MAAuB,CACxD7B,KAAMoV,EAAMotD,uBACZ/sD,QAAS,CAAC5T,uB,8ECpBZ,W,WAEe,IAAA6nK,eAAc,K,0ICF7B,QACA,Q,IACA,Q,IACA,Q,qDAEasE,K,YAEX,WAAYC,EAAUv6F,EAASv7E,IAAU,yGAEnCu7E,GAAYu6F,GAAY91K,IAAa,EAAAC,aAAa02B,UACpD,EAAKze,aAAe,CAClBuqF,MAAO,GACPtL,MAAO,IAET,EAAK9Y,kBAAoB,CACvBokB,MAAO,GACPtL,MAAO,IAET,EAAKtI,qBAAsB,EAC3B,EAAKknF,sBAAuB,EAC5B,EAAKC,uBAAyB,EAC9B,EAAKpzJ,cAAgB,KACrB,EAAK6gE,mBAAqB,KAC1B,EAAKmf,cAAgB,KACrB,EAAKzf,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKC,oBAAsB,KAC3B,EAAKG,6BAA+B,KAEpC,EAAKp2D,SAAU,EACf,EAAK4/G,iBAAkB,EACvB,EAAKj1H,OAAS,KACd,EAAKs+J,qBAAsB,EAC3B,EAAKC,qBAAsB,EAC3B,EAAKE,gBAAkB,MAErBN,IACF,EAAK31K,cAAgB,GACrB,EAAKqb,aAAe,IAEjB+/D,GAAYu6F,IACf,EAAK11K,UAAY,KACjB,EAAKkjF,MAAQ,IAAI,EAAJ,QAAU,MACvB,EAAKluE,mBAAqB,KAC1B,EAAKoS,UAAY,IAEnB,EAAKlP,SAAW,GAzCuB,E,iFA4DvC7b,KAAK6yF,uB,8CAUiBp8F,EAAMS,GAC5B,OAAO8I,KAAK8S,SAASrc,IAASuJ,KAAK8S,SAASrc,GAAMwJ,MAAK,SAAA25K,GACrD,OAAOhyK,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAKquF,EAAWntF,GAAK,OAAS,IAAAlB,MAAKquF,EAAW1iL,GAAO,Q,sDAIzE8pF,GAAmB,WACjD,OAAOA,EAAkBnjF,OAAM,SAACujF,GAC9B,IAAIiE,EAAkB,EAAKP,wBAAwB1D,EAAUF,SAAUE,EAAUE,WAOjF,MAN2B,SAAvBF,EAAUF,UAAwBmE,EAEJ,SAAvBjE,EAAUF,UAA+C,SAAxBE,EAAUE,WAAwB15E,MAAMC,QAAQ,EAAKiL,SAAL,OACvF,EAAKA,SAAL,KAAsB3Y,SAAS,UAClCkrF,GAAkB,GAHlBA,EAAkB,EAAKP,wBAAyB,OAAQ1D,EAAUE,WAK7D+D,O,6BAzCE5pE,K,eAIX,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKyb,aAAaP,EAAOwmE,0B,kCAEhBjmE,K,eAIhB,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAK4hF,kBAAkB1mE,EAAOwmE,4B,6FC/DzC,I,IAAA,MACA,O,IAEA,O,IACA,MACA,Q,mDAEA,IAAMi7F,EAAa,SAACrxE,GAClB,IACMsxE,EADqB,UAAMz6K,WAAWwD,gBAAgB+B,SACjBm1K,YAC3C,OACE,+BAAKjyF,UAAU,QACb,kCAAQA,UAAU,sBAAsBkyF,QAAS,kBAAM,UAAU37I,eAAe,eAAiBmqE,EAAMplF,iBAAiB,SACxH,+BAAK0kE,UAAU,gBACb,gCAAMA,UAAU,cAChB,6BAAGA,UAAU,aACX,4CAAkB5iF,GAAG,6BAEvB,kCAAQ4iF,UAAU,2CACVkyF,QAAS,kBAAM,UAAU37I,eAAey7I,EAAkB,YAAc,kBAAoBtxE,EAAMyxE,qBAChGH,EAAkB,EAAAt9H,eAAeE,SAAW,EAAAF,eAAeC,UAEnE,4CAAkBv3C,GAAI40K,EAAkB,8BAAgC,qCAOlFD,EAAWpsK,YAAc,a,UAEVosK,G,+IC/Bf,O,WACA,M,IACA,OACA,O,IAEA,O,IACA,OACA,Q,uDAEqBK,G,gBAiBnB,WAAY1xE,IAAO,gGACXA,IADW,SAoCnB2xE,sBAAwB,SAACC,GACvB,UAAU/7I,eAAe,uBACzB,UAAUA,eAAe,wBAA0B+7I,EAAW56J,MAC9DtqB,QAAQ4B,IAAI,mBAAoBsjL,GAChC,EAAK5xE,MAAM6xE,kBAAkBD,GAC7B,IAAIE,GAAmB,GACE,YAApBF,EAAW56J,MACwB,aAArClpB,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,iBAC/C,UAApByhL,EAAW56J,MAAwC,WAApB46J,EAAW56J,MAAyC,WAApB46J,EAAW56J,OAC7E86J,GAAmB,EACnB,EAAKC,wBAGP,EAAKC,SAAS,CACZF,mBACA1hK,YAAawhK,EAAW1hK,KAAKE,cAEP,UAApBwhK,EAAW56J,MACb,aAAE,cAAckrE,QAAQ,CAACy5E,UAAW7tK,SAAS6C,KAAKshL,cAAe,KACpC,YAApBL,EAAW56J,OACpB,aAAE,cAAckrE,QAAQ,CAACy5E,UAAW,GAAI,MAxDzB,EA4DnBuW,gBAAkB,WAChB,EAAKF,SAAS,CACZF,kBAAkB,EAClB1hK,YAAa,EAAK4vF,MAAMmyE,WAAW/hK,eA/DpB,EAmEnBgiK,uBAAyB,SAAC9wC,GACxB,UAAUzrG,eAAe,wBACzB,UAAUA,eAAe,yBAA2ByrG,EAAYpxH,KAAKK,UACrE7jB,QAAQ4B,IAAI,cAAegzI,GAC3B,EAAKthC,MAAMqyE,eAAe/wC,GAC1B,EAAKywC,uBACL,EAAKC,SAAS,CACZ5hK,YAAakxH,EAAYpxH,KAAKE,cAEP,YAArBkxH,EAAYtqH,OACd,aAAE,cAAckrE,QAAQ,CAACy5E,UAAW,GAAI,MA7EzB,EAiFnBoW,qBAAuB,WACrB,UAAUl8I,eAAe,EAAKp6B,MAAM62K,OAChC,4CACA,2CAGJ,EAAKN,SAAS,CACZM,QAAS,EAAK72K,MAAM62K,SACnB,WACG,EAAK72K,MAAM62K,QACb,EAAKN,SAAS,CACZ7gK,SAAU,EAAK6uF,MAAMmyE,WAAWhhK,WAChC2gK,iBAAqD,WAAnC,EAAK9xE,MAAMmyE,WAAW5hK,YAAkC,EAAKyvF,MAAMuyE,gBAEvFnvF,YAAW,WACTv2F,OAAO0uD,iBAAiB,QAAS,EAAKi3H,qBACrC,IAEH3lL,OAAO+qG,oBAAoB,QAAS,EAAK46E,uBAnG5B,EAwGnBA,kBAAoB,SAAC3nL,GACdA,EAAEugB,OAAOuqI,QAAQ,qCAChB9qJ,EAAEugB,OAAOuqI,QAAQ,gCAAmC9qJ,EAAEugB,OAAOuqI,QAAQ,2BACzE,EAAKo8B,wBA3GU,EA+GnBU,gBAAkB,WAChB,UAAU58I,eAAe,+BAOzB,IAAI68I,EAAW,KACf,GAAI,EAAK1yE,MAAMuyE,cAAe,CAC5B,IAAMphK,EAAW,EAAK6uF,MAAMmyE,WAAWhhK,WACjCwhK,EAAoBxhK,EAASE,WAAU,SAAAuhK,GAC3C,OAAO,EAAK5yE,MAAMuyE,cAAcv3K,SAAW43K,EAAU1iK,KAAKlV,UAE5D03K,EAAWvhK,EAASwhK,EAAoB,GAI1C,GAAID,EACF,EAAK1yE,MAAMqyE,eAAeK,GAC1B,EAAKV,SAAS,CACZ5hK,YAAasiK,EAASxiK,KAAKE,kBAExB,CACL,IAAMyiK,EAAqB,EAAK7yE,MAAM8yE,YAAYzhK,WAAU,SAAAugK,GAC1D,IAAMrhK,EAAW,EAAKyvF,MAAMmyE,WAAW5hK,SACvC,OAAOqhK,EAAW56J,OAASzG,KAEvBwiK,EAAiB,EAAK/yE,MAAM8yE,YAAYD,EAAqB,GAInE,GAAIE,EAAgB,CAClB,EAAK/yE,MAAM6xE,kBAAkBkB,GAC7B,IAAM5hK,EAAW4hK,EAAe7iK,KAAKiB,WAC/B6hK,EAAc7hK,EAASA,EAAShoB,OAAS,GAEV,IAAjC4pL,EAAe7iK,KAAKjY,UACtBmrF,YAAW,WACT,EAAK4c,MAAMqyE,eAAeW,GAC1B,EAAKhB,SAAS,CACZ5hK,YAAa4iK,EAAY9iK,KAAKE,gBAE/B,MA1JQ,EAiKnB6iK,gBAAkB,WAChB,UAAUp9I,eAAe,2BACzB,IAAIq9I,EAAW,KACf,GAAI,EAAKlzE,MAAMuyE,cAAe,CAC5B,IAAMphK,EAAW,EAAK6uF,MAAMmyE,WAAWhhK,WACjCwhK,EAAoBxhK,EAASE,WAAU,SAAAuhK,GAC3C,OAAO,EAAK5yE,MAAMuyE,cAAcv3K,SAAW43K,EAAU1iK,KAAKlV,UAE5Dk4K,EAAW/hK,EAASwhK,EAAoB,GAE1C,GAAIO,EACF,EAAKlzE,MAAMqyE,eAAea,GAC1B,EAAKlB,SAAS,CACZ5hK,YAAa8iK,EAAShjK,KAAKE,kBAExB,CACL,IAAMyiK,EAAqB,EAAK7yE,MAAM8yE,YAAYzhK,WAAU,SAAAugK,GAC1D,IAAMrhK,EAAW,EAAKyvF,MAAMmyE,WAAW5hK,SACvC,OAAOqhK,EAAW56J,OAASzG,KAEvB4iK,EAAiB,EAAKnzE,MAAM8yE,YAAYD,EAAqB,GACnE,GAAIM,EAAgB,CAClB,EAAKnzE,MAAM6xE,kBAAkBsB,GAC7B,IACMH,EADWG,EAAejjK,KAAKiB,WACR,GACQ,IAAjCgiK,EAAejjK,KAAKjY,UACtBmrF,YAAW,WACT,EAAK4c,MAAMqyE,eAAeW,GAC1B,EAAKhB,SAAS,CACZ5hK,YAAa4iK,EAAY9iK,KAAKE,gBAE/B,MA9LT,EAAK3U,MAAQ,CACX62K,QAAQ,EACRR,kBAAkB,EAClB1hK,YAAa,EAAK4vF,MAAMuyE,cAAgB,EAAKvyE,MAAMuyE,cAAcniK,YAAc,IALhE,E,oFAUZ1b,KAAKsrG,MAAMozE,SACd1+K,KAAK2+K,YAAY3+K,KAAKsrG,S,6CAKxBnzG,OAAO+qG,oBAAoB,QAASljG,KAAK89K,qB,gDAGjBc,GACxB5+K,KAAK2+K,YAAYC,K,kCAGPtzE,GACNA,EAAMuyE,eAAkBvyE,EAAMuyE,cAAcniK,cAAgB1b,KAAK+G,MAAM2U,aACzE1b,KAAKs9K,SAAS,CACZ5hK,YAAa4vF,EAAMuyE,cAAcniK,eAGhC4vF,EAAMuyE,eAAiBvyE,EAAMmyE,YAAenyE,EAAMmyE,WAAW5hK,WAAa7b,KAAK+G,MAAM2U,aACxF1b,KAAKs9K,SAAS,CACZ5hK,YAAa4vF,EAAMmyE,WAAW/hK,gB,+BAuK3B,WAEDmjK,EAAiB7+K,KAAK+G,MAAM62K,OAAS,CAAE/9K,OAAQG,KAAKsrG,MAAMozE,QAAU,IAAMvmL,OAAO+xD,YAAc,IAAO,GAE5G,OACE,+BAAK0gC,UAAU,eAEb,+BAAKA,UAAU,sBACb,kCAAQA,UAAU,gDAAgDkyF,QAAS98K,KAAK+9K,kBAChF,kCAAQnzF,UAAU,gDAAgDkyF,QAAS98K,KAAKu+K,mBAElF,+BAAK3zF,UAAW,eAAiB5qF,KAAK+G,MAAM62K,OAAS,uBAAyB,KAC5E,+BAAKhzF,UAAU,qBAAqBkyF,QAAS98K,KAAKq9K,sBAChD,gCAAMzyF,UAAU,4BAA2B,4CAAkB5iF,GAAG,8BAChE,gCAAM4iF,UAAU,4BACb5qF,KAAK+G,MAAM2U,YAAc,4CAAkB1T,GAAIhI,KAAK+G,MAAM2U,cAAiB,OAGhF,+BAAKkvE,UAAW,yBAA2B5qF,KAAK+G,MAAMq2K,iBAAmB,kCAAoC,IAAK/oK,MAAOwqK,GACtH7+K,KAAK+G,MAAMq2K,iBACR,kCAAQxyF,UAAU,6BAA6BkyF,QAAS98K,KAAKw9K,iBAC7D,4CAAkBx1K,GAAG,4BAErB,KACJ,8BAAI4iF,UAAU,8BACX5qF,KAAK+G,MAAMq2K,kBAAoBp9K,KAAKsrG,MAAMmyE,WAAaz9K,KAAKsrG,MAAMmyE,WAAWhhK,UAAS,GAAM,GAAM3U,KAAI,SAAC4U,EAAS9O,GAK/G,OAJK8O,EAAQlB,KAAKE,aAChB1jB,QAAQskC,KAAK,sCAAuC5f,EAAQlB,KAAKlV,SAEpD,IAAA6U,oBACH47F,kBAAkBr6F,GAI5B,8BAAIllB,IAAK,kBAAkBoW,EACvBkxK,cAAa,EAAKxzE,MAAMmyE,WAAW5hK,SACnCihK,QAAS,kBAAM,EAAKY,uBAAuBhhK,IAC3CkuE,UAAW,mCACR,EAAK0gB,MAAMuyE,eAAkB,EAAKvyE,MAAMuyE,cAAchiK,WAAaa,EAAQ4F,KAC1E,2CAA6C,IAFtC,qCAG4B5F,EAAQlB,KAAKlV,QACrDoW,EAAQlB,KAAKE,YAAc,4CAAkB1T,GAAI0U,EAAQlB,KAAKE,cAAiB,MAV3E,QAaN1b,KAAKsrG,MAAM8yE,YAAYt2K,KAAI,SAACo1K,EAAYtvK,GAI3C,OAHKsvK,EAAW1hK,KAAKE,aACnB1jB,QAAQskC,KAAK,6CAA8C4gJ,EAAW56J,MAGtE,8BAAI9qB,IAAK,WAAWoW,EAChBkvK,QAAS,kBAAM,EAAKG,sBAAsBC,IAC1CtyF,UAAW,mCACR,EAAK0gB,MAAMmyE,YAAe,EAAKnyE,MAAMmyE,WAAW5hK,WAAaqhK,EAAW56J,KACvE,2CAA6C,IAFtC,qCAG4B46J,EAAW56J,KAAKhmB,cAAcqC,QAAQ,KAAK,MACnFu+K,EAAW1hK,KAAKE,YAAc,4CAAkB1T,GAAIk1K,EAAW1hK,KAAKE,cAAiB,iB,kBA5QjGwmI,UAAY,CAGjBy7B,eAAgB,UAAUoB,KAAK9lE,WAC/BkkE,kBAAmB,UAAU4B,KAAK9lE,WAClCmlE,YAAa,UAAUllE,QAAQ,UAAU8lE,WAAV,YAC/BvB,WAAY,UAAU9lL,OACtBkmL,cAAe,UAAUlmL,OACzB+mL,QAAS,UAAUt8B,M,EAGd68B,aAAe,CACpBP,SAAS,G,aAdQ1B,G,8ICTrB,S,IACA,OACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEanyC,Q,gBAQX,cAAc,iGACN,GAAM,EAAO,EAAArnI,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKhY,cAAL,kBACA,EAAKwgJ,eAAiBrZ,EAAOsZ,MAAMrqH,OACnC,EAAK/a,aAAe,GACpB,EAAKwxH,oBAAqB,EAG1B,EAAK6T,cAAgB,KACrB,EAAKC,eAAiB,KACtB,EAAKlzG,WAAa,KAClB,EAAKiG,KAAO,KACZ,EAAKqxE,OAAS,KACd,EAAK67B,iBAAmB,KACxB,EAAKC,aAAe,KACpB,EAAK/1C,OAAS,KAnBF,E,qEAsBT7qG,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,OACHy/H,EAAkB,OAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YACA,MACF,IAAK,aACHD,EAAkB,aAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YACA,MACF,IAAK,mBACL,IAAK,aACL,IAAK,aACHD,EAAkB,mBAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,SACH,IAAMmU,EAAiB1gJ,EAAUmP,UAAYnP,EAAUmP,SAAV,QACxCnP,EAAUmP,SAAV,OAA6B3Y,SAAS,YAE3C81I,EAAkBoU,EAAiB,iBAAmB,gBACtDnU,EAAmBmU,EAAiBA,EAAjBA,kBAIvB,GAAIpU,EAAiB,CACnB,IAAKjwI,KAAKiwI,GAER,GADAjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,SAApBD,EAA4B,CAC9B,IAAMkV,EAAcnlJ,KAAK+e,aAAapC,WAAU,SAAAqC,GAAA,MAAgC,WAArBA,EAAQnD,YACnEspI,EAAcnlJ,KAAK+e,aAAappB,OAAOwvJ,EAAa,EAAGnlJ,KAAKo3C,MAAQp3C,KAAK+e,aAAahqB,KAAKiL,KAAKo3C,UACnE,mBAApB64F,EACTjwI,KAAK+e,aAAao3C,QAAQn2D,KAAKqkJ,gBACF,kBAApBpU,EACTjwI,KAAK+e,aAAao3C,QAAQn2D,KAAKokJ,eAE/BpkJ,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,IAQhC,OALKjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,EAET,OAAO,I,wCAGS,WAChB,OAAO3D,KAAK+e,aAAa/X,QAAO,SAAAiqE,GAAA,OAAQA,EAAK1gD,QAAQp2B,SAAS,EAAK+pJ,qB,iCAInE,OAAOlkJ,KAAKokJ,eAAiBpkJ,KAAKqkJ,eAAiB,CAACxZ,EAAOsZ,MAAMrqH,OAAQ+wG,EAAOsZ,MAAMtqH,UAAY,K,2CAIlG,OAAO75B,KAAKkkJ,iBAAmBrZ,EAAOsZ,MAAMtqH,W,sCAI5C,OAAO75B,KAAKkkJ,iB,iCAIZ,IAAMnlI,EAAe/e,KAAKwwI,kBACpBl0B,EAAW,GACX8oC,EAAarmI,EAAajT,MAAK,SAAA6T,GAAA,MAA8B,mBAAnBA,EAAQrZ,UAMxD,OALI8+I,GAAcA,EAAWj/H,eACxBi/H,EAAWj/H,cAAcrT,SAAzB,cACAsyI,EAAWj/H,cAAcrT,SAAzB,aAAkD3Y,SAAS,SAC9DmiH,EAASvnH,KAAK,iBAETgqB,EACJ/X,QAAO,SAAAiqE,GAAA,OAASqrC,EAASniH,SAAS82E,EAAK3qE,WACvCwB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,yCAShCkmD,GACjBp1D,KAAKkkJ,eAAiB9uF,EACtBp1D,KAAKwwI,kBAAkBpyI,SAAQ,SAACwuI,GACzBA,EAAYzmH,eACfymH,EAAYxmD,kB,wDAMhB,OAAOpmF,KAAKyc,WAAW,K,iCAGdvB,GACTlb,KAAKwwI,kBAAkBpyI,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,Q,uCAIjD,OAAOlb,KAAKslJ,qBAAuB,O,0CAOnC,OAHItlJ,KAAKokJ,gBAAkBpkJ,KAAKokJ,cAAcj+H,eAC5CnmB,KAAKokJ,cAAch+D,aAEbpmF,KAAKokJ,eAAiBpkJ,KAAKokJ,cAAcj+H,cAC7CnmB,KAAKokJ,cAAcj+H,cAAcxiB,UAAUmP,SAA3C,WACA,O,wCAGYgwE,GAChB9iF,KAAKwwI,kBAAkBpyI,SAAQ,SAAA4gB,GACN,gBAAnBA,EAAQ1Y,QAA+C,kBAAnB0Y,EAAQ1Y,QACxB,sBAAnB0Y,EAAQ1Y,QAAqD,mBAAnB0Y,EAAQ1Y,QAC/B,kBAAnB0Y,EAAQ1Y,QAAiD,sBAAnB0Y,EAAQ1Y,SACjD0Y,EAAQ8jE,SAAWA,U,aAnKlB96E,GAAK,S,EAELm8I,MAAQ,CACbtqH,SAAU,WACVC,OAAQ,U,iXCnBZ,I,IAAA,Q,IACA,QACYrZ,E,wJAAZ,OAEA,QACA,Q,OACA,QACA,QACA,QACA,QACA,U,IACA,MACA,S,mDAUmC6+D,EAAtBA,oBAAsB,SAACljB,EAAmBpmD,GAA0C,IAA5Bm2F,EAA4B,uDAAT,KACtF,IAAK/vC,IAAsBx0D,MAAMC,QAAQmO,GACvC,OAAO,KAOT,GAJKm2F,IACHA,EAAmBn2F,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,UAAfA,EAAMxf,UAGjD01G,EACH,OAAO,KAGT,IAAMC,GAAsB,IAAAhqB,sBAAqBhmB,EAAmB+vC,GAIpE,OAAKvkG,MAAMC,QAAQukG,IAAyBA,EAAoB33G,QAIzD,IAAA83F,qBAAoB6f,EAAoB,GAAID,GAH1C,MAlBJ,IAwBM+yE,EAA4BA,EAA5BA,0BAA4B,SAACC,EAAmB1B,EAAYznK,GAEvE,GADAhe,QAAQ4B,IAAI,kCAAmCulL,IAC1C,EAAAziF,iBAAiBviG,SAASsjL,EAAWn3K,SAAiC,sBAAtBm3K,EAAWn3K,SAC3D64K,IAAsB,UAAOt+K,cAAgB,EAAD,qBAAuB,CACtE,IAAIu+K,EAAkC,CAAC,QAAS,cAAe,aAAc,eAAgB,sBAAuB,eAAgB,eAC1G,eAAtB3B,EAAWn3K,QACb84K,EAAgCrqL,KAAK,YAEN,SAA7BqE,SAASC,SAASmC,SACpB4jL,EAAgCrqL,KAAK,sBACrCqqL,EAAgCrqL,KAAK,yBACrCqqL,EAAgCrqL,KAAK,gBAEN,SAA7BqE,SAASC,SAASmC,QACpB4jL,EAAgCrqL,KAAK,eAEN,SAA7BqE,SAASC,SAASmC,QACpB4jL,EAAgCrqL,KAAK,SAEnCoD,OAAO2B,SAASC,KAAKI,SAAS,SAChCilL,EAAgCrqL,KAAK,sBAEnC,IAAA0pJ,yBACF2gC,EAAkCA,EAAgCp4K,QAAO,SAAAtO,GACvE,MAAa,eAANA,GAA4B,iBAANA,MAEC3D,KAAK,uBAEnC,IAAA8pJ,uBACFugC,EAAkCA,EAAgCp4K,QAAO,SAAAtO,GAAA,MAAW,gBAANA,MAEhF,IAAM2mL,EAAkBrpK,EAAahP,QAAO,SAAA+O,GAC1C,OAAI5d,OAAO2B,SAASC,KAAKI,SAAS,eACzB4b,EAAYtf,OAASsf,EAAYtf,KAAK0D,SAAS,QAUjD4b,GAAeA,EAAYtf,MAAQ2oL,EAAgCjlL,SAAS4b,EAAYtf,KAAK0mB,OAAO7gB,kBAE7G6iL,EAAoBA,EAAkBn4K,QAAO,SAAA6oB,GAC3C,OAAOwvJ,EAAgBp/K,MAAK,SAAA8V,GAAA,OAAeA,EAAYI,QAAUJ,EAAYI,OAAOlW,MAAK,SAAAgpI,GACvF,OAAOA,EAAkBjhI,KAAO6nB,WAIlC4tJ,EAAWrrF,sBAAuB,IAAAwrD,8BACpC6/B,EAAW97F,SAASvjF,SAAQ,SAAAiF,GAC1B,CAAC,iBAAkB,qBAAqBjF,SAAQ,SAAA5G,GAC1C6L,EAAQM,UAAUnM,IACpB9C,OAAOmc,KAAKxN,EAAQM,UAAUnM,IAAM4G,SAAQ,SAAA2uF,GAC1C,IAAMn3E,EAAevS,EAAQM,UAAUnM,GAAKu1F,GACxCnlF,MAAMC,QAAQ+N,IAChBA,EAAaxX,SAAQ,SAAAwyF,GACduuF,EAAkBhlL,SAASy2F,IAC9BuuF,EAAkBpqL,KAAK67F,eAQrC54F,QAAQ4B,IAAI,mCAAoCulL,IAElD1B,EAAW9D,gBAAkBwF,GAWlBG,EAAiCA,EAAjCA,+BAAiC,SAACr6F,EAAUo6F,GAEvD,IADA,IAAIrpK,EAAe,GADwD,WAElEzhB,GACP,IAAMikG,EAAevT,EAAS1wF,GAAGinB,KAC7B+jK,GAAiB,IAAA5yF,sBAAqB6L,GACpCgnF,EAAiBv6F,EAAS1wF,GAAGgtD,aAC/B35C,MAAMC,QAAQ23K,IAAmBA,EAAe/qL,QAClD+qL,EAAephL,SAAQ,SAAC8hF,GACtB,GAAIA,EAAO78E,QAAQM,UAAUqE,KAAOwwF,EAAa70F,UAAUqE,GAAI,CAC7D,IAAMy3K,GAAW,IAAA9yF,sBAAqBzM,EAAO78E,SAC7Ck8K,GAAiB,IAAAzuF,oBAAmByuF,EAAgBE,OAI1D/qL,OAAOmc,KAAK0uK,GAAgBnhL,SAAQ,SAAA5G,GAClC,IAAI01F,EAAsBl3E,EAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMjO,MAAQxQ,KAC7DkoL,EAAqBL,EAAgBvzK,MAAK,SAAAmK,GAAA,OAASA,EAAMjO,MAAQxQ,KAOvE,GANK01F,GACCwyF,IACFxyF,EAAsBx4F,OAAO+2B,OAAO,GAAIi0J,EAAoB,CAACvpK,OAAQ,KACrEH,EAAajhB,KAAKm4F,IAGlBA,EAAqB,CACvB,IAAMyyF,EAAsBJ,EAAeryF,EAAoBllF,IAC3DJ,MAAMC,QAAQ83K,IAChBA,EAAoBvhL,SAAQ,SAAAwyF,GAC1B,IAAK1D,EAAoB/2E,OAAOlW,MAAK,SAAAkgB,GAAA,OAAUA,EAAOnY,KAAO4oF,MAAkB8uF,EAAoB,CACjG,IAAMv/J,GAAS,IAAAosE,qBAAoBqE,EAAe8uF,GAC9Cv/J,GACF+sE,EAAoB/2E,OAAOphB,KAAKorB,YA5BrC5rB,EAAI,EAAGA,EAAI0wF,EAASxwF,OAAQF,IAAK,EAAjCA,GAoCT,OAAOyhB,GASI4pK,EAAwCA,EAAxCA,sCAAwC,SAAChjK,EAAcyiK,GAElE,IADA,IAAIrpK,EAAe,GADmE,WAE7EzhB,GAEP,IADA,IAAMwhB,EAAcspK,EAAgB9qL,GAHgD,WAI3EggF,GACP,IAAMr+D,EAAcH,EAAYI,OAAOo+D,GACvC,GAAI33D,EAAa+8J,gBAAgBx/K,SAAS+b,EAAYlO,IAAK,CACzD,IAAIklF,EAAsBl3E,EAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMjO,KAAO+N,EAAY/N,MACzEklF,IACHA,EAAsBx4F,OAAO+2B,OAAO,GAAI1V,EAAa,CAACI,OAAQ,KAC9DH,EAAajhB,KAAKm4F,IAEfA,EAAoB/2E,OAAOlW,MAAK,SAAAkgB,GAAA,OAAUA,EAAOnY,KAAOkO,EAAYlO,OACvEklF,EAAoB/2E,OAAOphB,KAAKmhB,KAT7Bq+D,EAAI,EAAGA,EAAIx+D,EAAYI,OAAO1hB,OAAQ8/E,IAAK,EAA3CA,IAFFhgF,EAAI,EAAGA,EAAI8qL,EAAgB5qL,OAAQF,IAAK,EAAxCA,GAgBT,OAAOyhB,GAiGI6pK,GA9F+CC,EAA/CA,6CAA+C,SAACxhK,EAAiByhK,GAAoC,IAArBC,EAAqB,wDAC5GC,GAAgC,aAClC3hK,EAAgBxW,KAAI,SAAAo4K,GAAA,OAAaA,EAAUrwJ,aAU7C,GARIkwJ,EAAcI,oBAEhBF,EAAgCA,EAA8Bj5K,QAAO,SAACkP,GACpE,OAAQ6pK,EAAcI,kBAAkBr0K,MAAK,SAAAq0K,GAC3C,OAAOA,EAAkBC,UAAUjmL,SAAS+b,WAI7C+pK,EAA8BxrL,OACjC,OAAO,EAET,GAAKsrL,EAAcI,kBAMZ,CACL,IAAME,EAAyBN,EAAcI,kBAAkBr0K,MAAK,SAAAw0K,GAClE,OAAO,aAAQA,EAAsBF,UAAU13K,OAAQu3K,EAA8Bv3K,WAEvF,OAAI23K,IACEA,EAAuBE,iCAAmCP,IAGrDK,EAGF,CACLJ,gCACAnkJ,KAAM,GAjBV,OADAikJ,EAAcI,kBAAoB,GAC3B,CACLF,gCACAnkJ,KAAM,IAqBqC0kJ,EAApCA,kCAAoC,SAAC5jK,EAAc6jK,GAA8D,IAAhCC,EAAgC,uDAAT,KAC7G5zF,EAAe4zF,GAAwB,CAC3CjgK,KAAMA,EAAK4B,KACX+9J,UAAWK,EACXE,iBAAkB,EAClB7kJ,KAAM,GAEH4kJ,GACH9jK,EAAaujK,kBAAkBprL,KAAK+3F,GAEtC,IAAM8zF,EAAyB,IAE/B,OADAhkK,EAAaokG,mBAAoB,GAC1B,IAAA2Q,oBACL/0G,EAAahB,QAAUgB,EAAaf,SACpCixE,EAAahxD,KACb8kJ,EACAH,GAEC5uJ,MAAK,SAACswE,GAiBL,OAhBAvlF,EAAaokG,mBAAoB,EAC7B7e,GAAYA,EAAS1tG,SACvBuD,QAAQ4B,IAAI,6BAA8BuoG,GAC1CvlF,EAAaowH,iBAAiB7qC,EAAUy+E,GAAwB,EAAO,GAAI,MAAM,GACjFhkK,EAAaujK,kBAAoBvjK,EAAaujK,kBAAkBr4K,KAAI,SAACw4K,GASnE,OARIA,EAAsB7/J,OAASqsE,EAAarsE,OAC9C6/J,EAAsBK,kBAAoBx+E,EAAS1tG,OAC/C0tG,EAAS1tG,OAASmsL,EACpBN,EAAsBC,gCAAiC,EAEvDD,EAAsBxkJ,QAGnBwkJ,MAGJn+E,MAI2B0+E,EAA3BA,yBAA2B,SAAC9qK,EAAauI,GACpD,OAAOA,EAAgBhd,QAAO,SAACmB,EAAO68G,GACpC,OAAO78G,GAASsT,EAAY/N,KAAOs3G,EAAevyB,cAAgB,EAAI,KACrE,IAY8B8yF,EAAtBA,oBAAsB,SAACjjK,EAActW,EAAQ+4K,GAAyC,IAAxByB,EAAwB,uDAAT,KAClF5lK,GAAS,IAAAC,oBAIf,IAHKyB,GAAgBtW,IACnBsW,EAAe1B,EAAOgb,wBAAwB5vB,IAE5CsW,EAAc,CAChB,GAAIA,EAAa+8J,gBACf,OAAOiG,EAAsChjK,EAAcyiK,GAE7D,IAAMp6F,EAAW67F,GAAgB5lK,EAAOo9E,sBACtC,CAAC98E,KAAMoB,GACP,GACA,GACA,MACA,EACAyiK,GAEF,OAAOC,EAA+Br6F,EAAUo6F,GAElD,MAAO,KAS6B0B,EAAzBA,uBAAyB,SAACnkK,GAAuC,IAAxBkkK,EAAwB,uDAAT,KACnE,IAAKlkK,EACH,MAAO,GAFmE,MAIpC,UAAMza,WAAW4S,YAAlDuJ,EAJqE,EAIrEA,gBAAiBtI,EAJoD,EAIpDA,aACnB4G,EAAa+8J,iBAAoB/8J,EAAa08J,sBAAyB18J,EAAaokK,mBAEvFpkK,EAAaokK,kBAAmB,GAChC,IAAAhvD,wBAAuBp1G,EAAahB,QAAUgB,EAAaf,SAAU,MAAM,GACxEgW,MAAK,SAACovJ,GACL/B,EAA0B+B,EAA4BhtL,KAAM2oB,EAAc5G,GAC1E,UAAMiO,UAAS,IAAAi9J,2BAGrB,IAAMC,EAAmBtB,EAAoBjjK,EAAc,GAAI5G,EAAc8qK,GAK7E,OAAO,IAAAM,0BAAyBD,EAAkBvkK,EAAatW,OAAQgY,K,mVChVzE,IAAYkC,E,wJAAZ,OAE2B6gK,EAAdA,YAAc,SAACpzD,GAAD,MAAe,CACxC7iH,KAAMoV,EAAMqgD,aACZhgD,QAAS,CAACotG,cAGkBqzD,EAAjBA,eAAiB,SAACt9K,GAAD,MAAkB,CAC9CoH,KAAMoV,EAAMsgD,iBACZjgD,QAAS,CAAC7c,iBAGyBu9K,EAAxBA,sBAAwB,SAACt0D,GAAD,MAAyB,CAC5D7hH,KAAMoV,EAAMshD,yBACZjhD,QAAS,CAACosG,wBAG4Bu0D,EAA3BA,yBAA2B,SAACC,GAAD,MAA4B,CAClEr2K,KAAMoV,EAAMwgD,4BACZngD,QAAS,CAAC4gK,2BAGwBC,EAAvBA,qBAAuB,SAACC,GAAD,MAAwB,CAC1Dv2K,KAAMoV,EAAMugD,uBACZlgD,QAAS,CAAC8gK,uBAGqB/pF,EAApBA,kBAAoB,SAAC9B,GAAD,MAAqB,CACpD1qF,KAAMoV,EAAM0hD,qBACZrhD,QAAS,CAACi1E,oBAGwB46B,EAAvBA,qBAAuB,SAACkxD,GAAD,MAA4B,CAC9Dx2K,KAAMoV,EAAMkiD,wBACZ7hD,QAAS,CAAC+gK,2BAGmBC,EAAlBA,gBAAkB,SAACC,GAAD,MAAmB,CAChD12K,KAAMoV,EAAMmiD,kBACZ9hD,QAAS,CAACihK,kBAGuBC,EAAtBA,oBAAsB,SAACC,GAAD,MAAuB,CACxD52K,KAAMoV,EAAMoiD,uBACZ/hD,QAAS,CAACmhK,sBAGyCC,EAAxCA,sCAAwC,SAACC,GAAD,MAA4B,CAC/E92K,KAAMoV,EAAMqiD,yCACZhiD,QAAS,CAACqhK,2BAG2BC,EAA1BA,wBAA0B,SAACC,GAAD,MAA2B,CAChEh3K,KAAMoV,EAAMsiD,6BACZjiD,QAAS,CAACuhK,2B,uNCtDZ,MACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,SACA,S,IACA,OACA,SAIA,S,mDAUO,IAAM,EA4CA,EA6CA,EA0BA,EAnHAC,EAAeA,EAAfA,cAAA,gCAAe,WAAOr1K,GAAP,sBAAmBsnB,EAAnB,uDAAgC,KAAMguJ,EAAtC,wDAA+DC,EAA/D,aAAmFp4D,EAAnF,uDAA6F,GAA7F,0EACpBpjH,EAAQ,UAAM5E,WACb2W,EAAU/R,EAAMmG,YAAhB4L,OACApR,EAAYX,EAAMpB,gBAAlB+B,SACAqgB,EAAoBhhB,EAAM2f,wBAA1BqB,iBACDy6J,GAAkB,IAAA97K,eAAcsG,GAChCm+G,EAAUryG,EAAO9L,IAAe8L,EAAO9L,GAAYm+G,QAAUryG,EAAO9L,GAAYm+G,QAAU,KAC1Ft0B,EAAW/9E,EAAO9L,IAAe8L,EAAO9L,GAAY6pF,SAAW/9E,EAAO9L,GAAY6pF,SAAW,KAE7Fx9E,GAAO,IAAAopK,wBAAuBz1K,EAAYu1K,GAE1CrnK,EAASoZ,IAAc,IAAAnZ,kBAAiBzT,EAASg7K,yBAA2BrpK,EAAOjgB,SAASC,SAASoC,gBAGtG6mL,GAAoBn4D,EAdC,oBAepB/wH,SAASC,SAASoC,iBAAmB4d,IAAQP,EAAO9L,KAAe8L,EAAO9L,GAAYm9G,QAflE,iBAgBtBA,EAAUrxG,EAAO9L,GAAYm9G,QAhBP,yCAkBN,IAAI/zH,SAAQ,SAACC,GAAD,OAAaA,GAAQ,IAAAssL,2BAA0BznK,EAAQ6M,OAlB7D,QAkBtBoiG,EAlBsB,wCAsBnB,CACLgB,UACAt0B,WAEA5iG,KAAMinB,EAAOq0F,2BAA0B,GAAO,GAAM,GACpDqzE,aAAc1nK,EAAO2nK,iBACrB14D,UACAjrG,WAAYhE,EAAO9P,KACnBiO,OACAoyG,aAAc+2D,EAAgB3gL,cAC9BmpH,aAAclyG,EAAO9L,IAAc8L,EAAO9L,GAAYg+G,cAAuB,KAC7EU,iBAAkB82D,EAAgB1gL,kBAClCC,kBAAmBygL,EAAgBzgL,kBACnCL,cAAe8gL,EAAgB9gL,cAC/BL,WAAYmhL,EAAgBnhL,WAC5B+oH,mBAAmB,IAAA04D,4BAA2B,GAAI91K,GAClD+1K,kBAAiBjqK,EAAO9L,IAAc8L,EAAO9L,GAAY+1K,gBACzDC,iBAAiBlqK,EAAO9L,IAAc8L,EAAO9L,GAAYg2K,gBACzD3zH,UAAWv2C,EAAO9L,GAAc8L,EAAO9L,GAAYqiD,UAAY,KAxCvC,mDAAf,6CA4CqBw6D,EAArBA,oBAAA,gCAAqB,WAAO78G,EAAYu1K,GAAnB,gBAAuCD,EAAvC,wIACG,UAAMngL,WAAW+K,YAA7C4L,EADyB,EACzBA,OAAQ7L,EADiB,EACjBA,iBACTg2K,EAAgB36K,OAAOC,UAAUyE,GAAcA,EAAaC,EAFlC,SAGCo1K,EAAaY,EAAe,KAAMX,EAAiBC,GAHpD,cAG1BW,EAH0B,OAI1BC,EAJ0B,wBAIVrqK,EAAOhR,KAAI,SAACs7K,EAAGC,GAAJ,OAAgBA,IAAWJ,EAAiBC,EAAqBE,OAC7Fd,GACH,UAAMr+J,UAAS,IAAA6tJ,WAAUqR,IANK,kBAQzBA,GARyB,kDAArB,+CA6CoBG,EAApBA,mBAAA,gCAAoB,WAAO11K,EAAOu1K,GAAd,oFAC1BA,IACHA,EAAY,UAAMhhL,WAAW+K,YAAY4L,UAErCyqK,EAAWJ,EAAUv1K,MACV21K,EAASrkK,YAAsC,IAAxBqkK,EAASrkK,aAAqBqkK,EAAStvL,KALhD,qBAM7B,IAAA2yB,gBACI28J,EAASlqK,OAASjgB,SAASC,SAASoC,eAPX,iCAQrB,IAAA+nL,2BAA0BD,EAASlqK,MAAM,GARpB,cAUvB6B,GAAS,IAAAC,oBACTvE,EAAU2sK,EAAStvL,KACA,UAAMkO,WAAWwO,YAAnCwZ,iBAGL,IAAAs5J,oBAAmB,KAAM,KAAM,KAAM,MAAM,GAfhB,kBAiBtBvoK,EAAOm0H,oBAAoBz4H,GAC7Bib,MAAK,YACJ,IAAAygE,iBACA,UAAMruE,UAAS,IAAAk+J,0BAAwB,QApBhB,iCAuBxB/rL,QAAQC,WAvBgB,mDAApB,+CA0BiCqtL,EAAjCA,gCAAA,gCAAiC,WAAO/3K,GAAP,uFACxCA,EAAMg4K,UAAWh4K,EAAMg4K,QAAQlvL,OADS,wBAEpCsS,EAAQ,UAAM5E,WACd2W,EAAS/R,EAAMmG,YAAY4L,OAC3B8qK,EAAa9qK,EAAOnN,EAAMnD,cAGhC,UAAU0lD,OAAO01H,EAAW54D,cAC5B,wBAAIr/G,EAAMg4K,UAASvlL,SAAQ,SAAA86D,GACzB,UAAUD,sBAAsBC,MATQ,UAaf,IAAA2qH,mBAbe,OAapCC,EAboC,QAc1C,IAAAC,yBAAwBD,EAAcn4K,EAAMnD,eAG5C,IAAAw7K,+CAjB0C,mDAAjC,8C,yFC5IE,SAAWC,EAAOpgB,EAAOC,EAAOogB,EAAOC,GAClD,IAAI5vL,EAAGkB,EAAGc,GAAI,EACd,IAAKhC,EAAI,EAAGkB,EAAIwuL,EAAM,EAAG1vL,EAAI0vL,EAAOxuL,EAAIlB,IAC5BuvK,EAAMvvK,GAAK4vL,GAAargB,EAAMruK,GAAK0uL,GACrCD,GAAUrgB,EAAMpuK,GAAKouK,EAAMtvK,KAAS4vL,EAAQrgB,EAAMvvK,KAASuvK,EAAMruK,GAAKquK,EAAMvvK,IAAOsvK,EAAMtvK,KACvFgC,GAAKA,GAGjB,OAAOA,G,EAEK+tK,YAAT,SAAqBr+G,EAAQ1oD,GAChC,IAAIhJ,SAAGkB,SAAGc,GAAI,EACd,IAAKhC,EAAI,EAAGkB,EAAIwwD,EAAOxxD,OAAS,EAAGF,EAAI0xD,EAAOxxD,OAAQgB,EAAIlB,IAChD0xD,EAAO1xD,GAAG,GAAKgJ,EAAK8c,GAAQ4rC,EAAOxwD,GAAG,GAAK8H,EAAK8c,GACnD9c,EAAK6c,GAAK6rC,EAAOxwD,GAAG,GAAKwwD,EAAO1xD,GAAG,KAAOgJ,EAAK8c,EAAI4rC,EAAO1xD,GAAG,KACzD0xD,EAAOxwD,GAAG,GAAKwwD,EAAO1xD,GAAG,IAAM0xD,EAAO1xD,GAAG,KAC5CgC,GAAKA,GAGb,OAAOA,G,EAQKgoF,qBAAT,SAA8BvyB,EAAO9Z,GAO1C,IAHA,IAAI93B,EAAI4xC,EAAM5xC,EAAGC,EAAI2xC,EAAM3xC,EACvBgiE,GAAS,EAEJ9nF,EAAI,EAAGkB,EAAIy8C,EAAQz9C,OAAS,EAAGF,EAAI29C,EAAQz9C,OAAQgB,EAAIlB,IAAK,CACnE,IAAIkoF,EAAKvqC,EAAQ39C,GAAG6lB,EAAGsiE,EAAKxqC,EAAQ39C,GAAG8lB,EACnCsiE,EAAKzqC,EAAQz8C,GAAG2kB,EAAGwiE,EAAK1qC,EAAQz8C,GAAG4kB,EACrBqiE,EAAKriE,GAAQuiE,EAAKviE,GAC9BD,GAAKuiE,EAAKF,IAAOpiE,EAAIqiE,IAAOE,EAAKF,GAAMD,IAE9BJ,GAAUA,GAG3B,OAAOA,G,EAQO+nG,0BAAT,SAAmCp4H,EAAO9Z,GAI/C,IAHA,IAAI93B,EAAI4xC,EAAM,GAAI3xC,EAAI2xC,EAAM,GAExBqwB,GAAS,EACJ9nF,EAAI,EAAGkB,EAAIy8C,EAAQz9C,OAAS,EAAGF,EAAI29C,EAAQz9C,OAAQgB,EAAIlB,IAAK,CACnE,IAAIkoF,EAAKvqC,EAAQ39C,GAAG,GAAImoF,EAAKxqC,EAAQ39C,GAAG,GACpCooF,EAAKzqC,EAAQz8C,GAAG,GAAImnF,EAAK1qC,EAAQz8C,GAAG,GAEtBinF,EAAKriE,GAAOuiE,EAAKviE,GAC7BD,GAAKuiE,EAAKF,IAAOpiE,EAAIqiE,IAAOE,EAAKF,GAAMD,IAC9BJ,GAAUA,GAG3B,OAAOA,I,0qBChET,OAEA,S,IAIA,MACA,SACA,QACA,SACA,SACA,SACA,QAKA,SACA,SACA,QACA,Q,mDAKO,IA+CM,EAoCA,EASA,EA4JA,EAcA,EAoBA,EAqBP,EA/SO3qB,EAAeA,EAAfA,aAAe,WAC1B,IAAM2yH,EAAa,UAAMliL,WAClBkmG,EAAkBg8E,EAAWz0H,cAA7By4C,eACAtqF,EAAoBsmK,EAAWC,QAA/BvmK,iBACAwqF,EAAgB87E,EAAWz0H,cAA3B24C,aACAt7F,EAAoBo3K,EAAWn3K,YAA/BD,iBACDkL,EAAiBksK,EAAW1+K,gBAC5B8U,EAAO,UAAUA,KAEnB8pK,SACAC,SAEJ,OAAQn8E,GACN,KAAK,EAAAo8E,iBAAiB/qK,MACpB6qK,GAAgB,IAAAG,oBAAmBz3K,GACnC,MACF,KAAK,EAAAw3K,iBAAiBtgF,SACpBogF,GAAgB,IAAAI,mBAAkB5mK,EAAkBtD,EAAMtC,GAC1D,MACF,KAAK,EAAAssK,iBAAiBG,UAKlBL,GAJFC,EAAcK,EAAiBt8E,KAIb,IAAAtwF,sBAAqBusK,EAAYhpK,KAAMf,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAFnE,GAOtB,OAAOosK,GAuCIO,GAlCwCC,EAAxCA,sCAAwC,SAAC11H,GACpD,IAAMtoD,EAAQ,UAAM5E,WACd2W,EAAS/R,EAAMmG,YAAY4L,OAC3B7L,EAAmBlG,EAAMmG,YAAYD,iBACrCyM,EAAQorK,EAAmBz1H,GAC7B21H,EAAgBlsK,EAAO9e,QAAQ0f,GAGnC,OAAOzM,KAFP+3K,EAAgBA,EAAgB,EAAI,EAAIA,IAONC,EAAvBA,sBAAA,gCAAuB,WAAO51H,GAAP,mFAC5BtoD,EAAQ,UAAM5E,WACd2W,EAAS/R,EAAMmG,YAAY4L,OAC3BY,EAAQorK,EAAmBz1H,GAEjCriD,GADIA,EAAa8L,EAAO9e,QAAQ0f,IACN,EAAI,EAAI1M,EAElC,UAAMiX,UAAS,IAAA4tJ,qBAAoB7kK,IAEnCk4K,IAAwBrzJ,OAGxB,UAAM5N,UAAS,IAAAqkF,qBAAoBj5C,IACnC,UAAMprC,UAAS,IAAAikF,wBAAuB,OACtC,UAAMjkF,UAAS,IAAAmkF,uBAAsB,EAAAq8E,iBAAiB/qK,QAdpB,mDAAvB,6CAqBqBorK,EAArBA,mBAAqB,SAACK,GAGjC,OAFc,UAAMhjL,WACC+K,YAAY4L,OACnBhN,MAAK,SAAC4N,EAAO9L,GACzB,IAAMw3K,EAAmB1rK,EAAM21C,YAAc81H,EAAShoK,OAAO7gB,cAEvD+oL,GADkB,IAAAX,oBAAmB92K,GACHuP,OAAO7gB,gBAAkB6oL,EAAShoK,OAAO7gB,cAEjF,OAAO8oL,GAAoBC,OAOlBH,EAAwBA,EAAxBA,uBAAA,gCAAwB,0FAC/BrkK,GAAU,IAAA22J,0BACd,IAAAI,kBAAiB/2J,GAFkB,kDAAxB,4CAuCAkjK,GA9BsBuB,EAAtBA,qBAAA,gCAAsB,6BAAOxB,EAAP,uDAAsB,KAAtB,0EAC3B/8K,EAAQ,UAAM5E,WACdkmG,EAAiBthG,EAAM6oD,cAAcy4C,eACrCtqF,EAAmBhX,EAAMu9K,QAAQvmK,iBACjCwqF,EAAexhG,EAAM6oD,cAAc24C,aACnChmG,EAAYwE,EAAM3E,UAAUG,UAC5B4lG,EAAkBphG,EAAM6oD,cAAcu4C,gBAExCE,IAAmB,EAAAo8E,iBAAiBtgF,SARP,iCASzBohF,EAAqCxnK,EAAiBZ,OAAO7gB,eATpC,kCAUtB+rG,IAAmB,EAAAo8E,iBAAiBG,UAVd,kCAazBW,EAAqCh9E,GAbZ,mCAe1Bu7E,EAf0B,mCAgBR,IAAAD,mBAhBQ,QAgB7BC,EAhB6B,OAiB7B9rL,QAAQ4B,IAAI,qBAAsBkqL,GAjBL,QAmB/B0B,EAA8B1B,IACJ,IAAA3nK,6BAA4B5Z,EAAW4lG,IAE/Ds9E,EAAc/zH,KAtBe,mDAAtB,4CA8B0BqyH,EAA1BA,wBAA0B,SAAC9vL,EAAM+Y,GAC5C,IAGMm2K,EAHQ,UAAMhhL,WACK+K,YAAjB4L,OAEiBhR,KAAI,SAAC4R,EAAO2pK,GACnC,OAAIA,IAAWr2K,GACb,gBACK0M,EADL,CAEEsxG,8BAAmB/2H,KAGhBylB,KAGT,UAAMuK,UAAS,IAAA6tJ,WAAUqR,MAMdqC,EAAgCA,EAAhCA,8BAAgC,SAACvxL,GAC5C,IACQgZ,EADM,UAAM9K,WACe+K,YAA3BD,iBAER82K,EAAwB9vL,EAAMgZ,IAGnBy4K,EAA+BA,EAA/BA,6BAA+B,SAACC,GAC3C,IAAMC,EAAU,GAehB,OAdAD,EAAavnL,SAAQ,SAAAynL,GACnBnxL,OAAOmc,KAAKg1K,GAAaznL,SAAQ,SAAAkyG,GAC/B,GAAKu1E,EAAYv1E,IAAeu1E,EAAYv1E,GAAW3uB,SAAvD,CAGA,IAAImkG,EAAeD,EAAYv1E,GAAW3uB,SACtCmkG,GAAgBA,EAAarxL,QAC/BqxL,EAAa1nL,SAAQ,SAAA2nL,GACnBH,EAAQ7wL,KAAKgxL,EAAY7sH,kBAM1B0sH,GAmBII,GAd6CC,EAA7CA,2CAA6C,SAACN,EAAcpjL,GACvE,IAAMohL,EAAU+B,EAA6BC,GACvBpjL,EAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAMutD,SAAWyqH,EAAQxpL,SAASwR,EAAMutD,WAE1E96D,SAAQ,SAAAuN,GACpB,UAAMsY,UAAS,IAAAiI,gBAAevgB,QASQq6K,EAA7BA,2BAA6B,SAACE,GACzC,GAAIA,EAAc,CAChB,IAAMN,EAAU,GAKhB,OAJAM,EAAa53H,YAAYlwD,SAAQ,SAAA+yC,GAC/By0I,EAAQ7wL,KAAKo8C,EAAWnpC,GAAG8P,eAGtB8tK,KAyDEL,GAnD8CvB,EAA9CA,4CAA8C,WACzD,IAAMj9K,EAAQ,UAAM5E,WACdI,EAAYwE,EAAM3E,UAAUG,UAC5BuP,EAAqB/K,EAAMpB,gBAAgB+B,SAClCX,EAAMmG,YAAY4L,OAE1B1a,SAAQ,SAACsb,EAAO1M,GACrB,GAAI0M,EAAMsxG,aAAc,CACtB,IAAM24D,EAAUqC,EAA2BtsK,EAAMsxG,cAEjDzoH,EACGyE,QAAO,SAAA2E,GAAA,OAASA,EAAMnD,eAAiBwE,KACvC5O,SAAQ,SAAAuN,GACP,GAAIA,EAAMw6K,eAAgB,CACxB,IAAMC,GAAoBA,EAApBA,cAAyBz6K,EAAMw6K,gBAGrCzxL,OAAOmc,KAAKu1K,GAAmBhoL,SAAQ,SAAA86D,GAChCyqH,EAAQxpL,SAAS++D,WACbktH,EAAkBltH,MAI7B,IAAIp7C,EAAcppB,OAAOyhB,OAAOiwK,GAAmB9kL,QAAO,SAAC+kL,EAAKl0H,GAAN,OAAck0H,EAAMl0H,IAAK,GAG/E,EAAAhX,2CAA2ChhD,SAASwR,EAAMrF,UAC5DwX,EAAchM,EAAmBlF,cAAgB,EAAAyjC,cAAcC,OAC3DlmC,KAAKyC,OAAOiR,GAAc,GAC1B1T,KAAKkI,KAAKwL,IAIZppB,OAAOmc,KAAKu1K,GAAmB3xL,OAAS,EAC1C,UAAMwvB,UAAS,IAAAmI,oBAAA,gBACVzgB,EADU,CAEbw6K,eAAgBC,EAChBj9K,SAAU2U,MAGZ,UAAMmG,UAAS,IAAAiI,gBAAevgB,aAWQ45K,EAAvCA,sCAAA,gCAAuC,WAAOl2H,GAAP,sFAC5Ci3H,EAA4BC,EAA4Bl3H,GADZ,UAEvB,IAAAw0H,mBAFuB,UAE5CC,EAF4C,OAG7CwC,EAH6C,gCAI1CE,EAA4B1C,EAAcz0H,GAJA,8BAMhDm2H,EAA8B1B,GANkB,mDAAvC,8CAcA0C,EAA8BA,EAA9BA,6BAAA,gCAA8B,WAAO1C,EAAcz0H,GAArB,0EACpC,UAAUnE,YAAau7H,EAA0B3C,GADb,gCAEjC4C,EAA2B5C,EAAcz0H,GAFR,kDAA9B,+CASAk3H,EAA8BA,EAA9BA,4BAA8B,SAACl3H,GAE1C,OADiB,UAAMltD,WAAW+K,YAA3B4L,OACOhN,MAAK,SAAA4N,GAAA,OACjBA,EAAM21C,YAAcA,IACS,IAA1B31C,EAAMspK,oBAOA0D,EAA6BA,EAA7BA,4BAAA,gCAA6B,WAAM5C,EAAc/lK,GAApB,gFACnC,UAAUmtC,YAAau7H,EAA0B3C,GADd,gCAEjBtH,EAAYsH,EAAc/lK,GAFT,OAEhCjF,EAFgC,OAGtC,UAAMmL,UAAS,IAAA4tJ,qBAAoB/4J,EAAOrkB,OAAS,IACnDgxL,EAAc1nK,GAJwB,kDAA7B,+CAQA0oK,EAA4BA,EAA5BA,0BAA4B,SAAC3C,GACxC,QAAIA,EAAa9L,kBACR8L,EAAax1H,YAAY75D,OAAS,GACpCqvL,EAAa9pI,aAAavlD,OAAS,GACnCqvL,EAAa7pI,MAAMxlD,OAAS,IAS/B+nL,GAAA,gCAAc,WAAOsH,EAAc/lK,GAArB,sFAEXjF,EAAU,UAAM3W,WAAW+K,YAA3B4L,OACDqqK,EAHY,wBAGIrqK,GAHJ,CAGY,CAC5BqyG,QAAS,KACT43D,iBAAiB,EACjBC,iBAAiB,EACjB3zH,UAAWtxC,EAAiBZ,OAAO7gB,cACnC0uH,aAAc84D,KAEhB,UAAM7/J,UAAS,IAAA6tJ,WAAUqR,IAVP,kBAYXA,GAZW,kDAAd,+CAkBOsC,EAAgBA,EAAhBA,cAAgB,SAACp2H,GAC5B,IAAMl2C,GAAe,IAAAwtK,gCAA+Bt3H,GACpD,GAAIl2C,EAEF,OADA,UAAM8K,UAAS,IAAAiG,WAAU,CAAC/Q,KACnBA,GAQE0rK,EAAmBA,EAAnBA,iBAAmB,SAACM,GAC/B,IAAMyB,GAAoB,IAAA5xH,iBAAgB,QAG1C,OAFsB,IAAAqiH,aAAYuP,EAAmB,GAAI,IAAI,GAAO,GAE/C96K,MAAK,SAAA6T,GACxB,OAAOA,EAAQnE,KAAKhD,iBAAiBlc,gBAAkB6oL,EAAS7oL,mB,qJC3WpE,QACA,Q,uDAEqBuqL,E,YAEnB,WAAYv7E,IAAO,gGACXA,IADW,OAEjB,EAAKw7E,qBAAsB,EAFV,E,iFAMjB,IAAMvtL,EAASyG,KAAKU,YACdgwI,EAAen3I,EAAOmH,YAC5BgwI,EAAaq2C,kBAAkB,EAAA5sJ,gBAAgBC,WAAY7gC,EAAO+M,QAC9DoqI,EAAagW,eAAiBhW,EAAagW,cAAcvgI,eAAiBuqH,EAAagW,cAAcvgI,cAAcrT,SAAzC,YACxE49H,EAAagW,cAAcvgI,cAAcrT,SAAzC,UAA+D3Y,SAAS,OAASu2I,EAAagW,cAAc5jE,WAIhH4tD,EAAagW,cAAc5jE,UAAW,K,6CAKxC,IAAM4tD,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GACEwmG,EAAat2C,EAAas2C,aAOhC,OANIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,I,6CAGiC,IAArBymG,EAAqB,uDAAJ,GAC9Bv2C,EAAe1wI,KAAKU,YACpBkc,EAAe8zH,EAAau2C,GAClC,SAAUrqK,IAAgBA,EAAauJ,eAAkBvJ,EAAakmE,Y,qCAGzDpnD,EAAUp1B,GACvB,IAAMymJ,EAAY/sJ,KAAKU,YAAYqe,aAAajT,MAAK,SAAA8Q,GAAA,OAAgBA,EAAatW,SAAWA,KACzFymJ,GAAaA,EAAUtxH,iBACrBz7B,KAAKy7B,eAAeC,IAQtBqxH,EAAUtxH,eAAeC,GAAYqxH,EAAUjsE,2BAA2BplD,GACtEqxH,EAAUjqE,WACZiqE,EAAUjqE,UAAW,IAGvBiqE,EAAUtxH,eAAeC,GAAY,Q,gDAMzC,OAAO,M,iCA7DUmrJ,G,wICHrB,QACA,Q,IACA,QACA,Q,IACA,Q,IACA,O,qDAEazN,K,YAEX,WAAYC,EAAUv6F,EAASv7E,IAAU,yGAEnCu7E,GAAYu6F,GAAY91K,IAAa,EAAAC,aAAa02B,UACpD,EAAKze,aAAe,GACpB,EAAKmmE,kBAAoB,GACzB,EAAKslG,gBAAkB,GACvBxyL,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKroE,aAAaqoE,GAAc,GAChC,EAAKlC,kBAAkBkC,GAAc,GACrC,EAAKojG,gBAAgBpjG,GAAc,MAErC,EAAKsO,qBAAsB,EAC3B,EAAKknF,sBAAuB,EAC5B,EAAKC,uBAAyB,EAC9B,EAAKpzJ,cAAgB,KACrB,EAAK6gE,mBAAqB,KAC1B,EAAKN,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKC,oBAAsB,KAC3B,EAAKG,6BAA+B,KAEpC,EAAKp2D,SAAU,EACf,EAAK4/G,iBAAkB,EACvB,EAAKj1H,OAAS,KACd,EAAKs+J,qBAAsB,EAC3B,EAAKC,qBAAsB,EAC3B,EAAKC,wBAA0B,GAC/B,EAAKC,gBAAkB,MAErBN,IACF,EAAK31K,cAAgB,GACrB,EAAKqb,aAAe,IAEjB+/D,GAAYu6F,IACf,EAAK11K,UAAY,KACjB,EAAKkjF,MAAQ,IAAI,EAAJ,QAAU,MACvB,EAAKluE,mBAAqB,KAC1B,EAAKoS,UAAY,IAEnB,EAAKlP,SAAW,GAzCuB,E,wFAqEjBplB,EAAMS,GAC5B,OAAO8I,KAAK8S,SAASrc,IAASuJ,KAAK8S,SAASrc,GAAMwJ,MAAK,SAAA25K,GACrD,OAAOA,IAAc,EAAAzhJ,SAASC,MAAQxwB,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAKquF,EAAWntF,OAAQ,IAAAlB,MAAKquF,EAAW1iL,S,sDAI3F8pF,GAAmB,WACjD,OAAOA,EAAkBnjF,OAAM,SAACujF,GAC9B,OAAO,EAAK0D,wBAAwB1D,EAAUF,SAAUE,EAAUE,gB,uCAKpE,OAAO,IAAI,EAAJ,QAAyBthF,KAAK6b,SAAU7b,Q,6BAtCpCyb,K,eAIX,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKyb,aAAaP,EAAOwmE,0B,kCAEhBjmE,K,eAIhB,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAK4hF,kBAAkB1mE,EAAOwmE,0B,kCAGrC,IAAMxmE,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKknL,gBAAgBhsK,EAAOwmE,4B,uKCrEvC,QAEA,Q,IACA,OACA,S,IACA,MACA,SACA,Q,qDAKa7C,iB,YAEX,WAAYC,IAAS,iGACb,EAAOA,IADM,SAoIrByB,kBAAoB,WAAwC,IAAvCp6D,EAAuC,uDAAvB,EAAKA,cACxC,GAAKA,EAAL,CAGA,IAAMjL,EAAS,EAAKxa,YAAYwa,OAC1BslE,EAAa,EAAKC,uBACpBvlE,GAAU,EAAKwlE,6BAA+B,EAAKA,4BAA4BxlE,EAAO9P,MACxF1W,OAAOmc,KAAK,EAAK4qB,gBAAgBr9B,SAAQ,SAAA5G,GACnC,EAAKkpF,4BAA4BxlE,EAAO9P,QAAU5T,GAC/C,EAAKikC,eAAejkC,IAAS,EAAKikC,eAAejkC,GAAKmpF,gCAAgCH,GAElFr6D,EAAcxiB,UAAUmP,SAAxB,gBAAsDtb,IAC/D,EAAKikC,eAAejkC,GAAO,MAF3B,EAAKikC,eAAejkC,GAAO2uB,KAM/BzxB,OAAOmc,KAAK,EAAK4qB,gBAAgBr9B,SAAQ,SAAA5G,GACvC,GAAI0jB,EAAOia,aACT,GAAKhP,EAAcxiB,UAAUmP,SAAxB,gBAAsDtb,GACrD,EAAKikC,eAAejkC,KAAS,EAAKikC,eAAejkC,GAAKmpF,gCAAgCH,GAC1F,EAAK/kD,eAAejkC,GAAO2uB,OAEtB,GAAI,EAAKsV,eAAejkC,GAAM,CACnC,IAAMqpF,EAA0B,EAAKC,2BAA2BtpF,GAC5DqpF,IACF,EAAKplD,eAAejkC,GAAOqpF,SAI/B,GAAK16D,EAAcxiB,UAAUmP,SAAxB,gBAAsDtb,GACpD,EAAKikC,eAAejkC,IAAS,EAAKikC,eAAejkC,GAAKmpF,gCAAgCH,GAGtF,CACL,IAAMK,EAA0B,EAAKC,2BAA2BtpF,GAC5DqpF,IACF,EAAKplD,eAAejkC,GAAOqpF,QAL7B,EAAKplD,eAAejkC,GAAO2uB,OAnKhB,EAsLrB26D,2BAA6B,WAAwE,IAAvEplD,EAAuE,uDAA5D,GAAI7d,EAAwD,uDAA1C,EAAKsI,cAAeowC,EAAsB,uDAAT,KAC1F,GAAI14C,EAAa,CACf,IAAMkjE,EAAQljE,EAAY4B,yBACtBuhE,EAAoB,EAAKP,uBAO7B,GANI5iE,EAAY/K,SAAZ,SACFkuE,EAAkBjsF,KAAK,CACrBmsF,SAAU,UACVI,UAAWzjE,EAAY/K,SAAZ,UAGXyjD,EAAY,CACd,IAAI4qB,EAAiBH,EAAkBl1E,MAAK,SAAAs1E,GAAA,MAAoC,eAAvBA,EAAUF,YAC/DG,EAAgBL,EAAkBl1E,MAAK,SAAAs1E,GAAA,MAAoC,cAAvBA,EAAUF,YAC9DC,IACFA,EAAeG,UAAY/qB,EAAWgrB,gCAEpCF,IACFA,EAAcC,UAAY/qB,EAAWniC,OAGzC,IAAMotD,EAAkB,CAAC,cAAe,cAAe,oBACjDC,EAAgB,EAAKhmD,gBAAmBC,IAAahnC,OAAOmc,KAAK,EAAK4qB,gBAAgB,GAAuB,EAAKomD,cAArB,EAAKF,SACxG,OAAOF,EAAY31E,MAAK,SAACzI,GACvB,OAAQm+E,EAAgBrnF,SAAS,EAAKmM,SAAWy6E,IAAU19E,EAAQoc,2BAC9Dpc,EAAQs9E,gCAAgCK,IAAsB39E,EAAQyP,SAAR,gBAAsC4oB,KAG7G,OAAO,MAjNY,EA+VrBsmD,uCAAyC,WAIvC,OAH+C,MAA3C,EAAKC,qCACP,EAAKA,mCAAqC,EAAKt+E,UAAUmF,mBAEpD,EAAKm5E,oCAnWO,EAsWrBxiE,uBAAyB,WASvB,OAR+B,MAA3B,EAAK9G,qBACP,EAAKA,mBAAqB,EAAKhV,UAAUmF,mBAAqB,EAAK+S,UAAY,GAC3D,6BAAhB,EAAKvV,SACP,EAAKqS,mBAAqB,EAAKA,mBAC5Bha,QAAQ,QAAS,IACjBA,QAAQ,+BAAgC,MAGxC,EAAKga,oBA/WO,EAkXrBgqE,uBAAyB,WACvB,OAAO,EAAKljE,0BAnXO,EAsXrBojE,qBAAuB,WAErB,OAAO,EAAKhnE,SAAS9d,MAAM,MAAM,IAtXjC,EAAK+kF,UAAW,EAChB,EAAKC,iBAAkB,EACvB,EAAKC,eAAgB,EAJF,E,qEAWhBr/E,GACH,OAAO3D,KAAKojF,MAAMz/E,EAAW,IAAI3D,KAAKmjF,e,4BAUlCx/E,EAAW6X,GAA+C,WAAzC6nE,IAAyC,yDAAvB1B,EAAuB,uDAAZ,WAE5C2B,EAAc3B,EAAW,OAExBpxE,EAAe5M,EAAf4M,YAJuD,GAK1C,IAAAsO,kBAAiBtO,GAAhCgzE,EALyD,EAKzDA,YAML,IALKA,GAAe5/E,EAAU6M,WAAa7M,EAAU4M,cACnDgzE,EAAc5/E,EAAU4M,YAAY5R,QAAQgF,EAAU6M,UAAY,MAAO,KAIvE6yE,IACF7nE,EAAK9a,UAAY,kBAAM,GACnBiD,EAAU6/E,eAAe,CAC3B,IAAMC,EAAW9/E,EAAU6/E,cAAc13E,MAAK,SAAA43E,GAAA,OAAYA,EAASD,YAC/DA,IACFzjF,KAAK2jF,cAAgBF,EAASrsE,KAEhCzT,EAAU6/E,cAAgB7/E,EAAU6/E,cAAc96E,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAE4pC,QAAU7pC,EAAE6pC,WAqBnF,GAjBK7uC,EAAUmF,mBACb9Q,QAAQC,MAAM,iCAAkC0L,GAGlD6X,EAAKK,SAAW0nE,EAChB/nE,EAAK1I,SAAWnP,EAAUmP,UAAY,GAElCnP,EAAUixB,YAAcjxB,EAAUixB,WAAWngC,OAIjD+mB,EAAK7X,UAAYA,GAAa,GACzB6X,EAAK7X,UAAUkS,iBAClB2F,EAAK7X,UAAUkS,eAAiB,IAElC2F,EAAKooE,0BAA4BjgF,EAAUixB,aAAejxB,EAAUixB,WAAWngC,OAE3E+mB,EAAK1I,SAAS+hB,WAAY,CAC5B,IAAMgvD,EAAaroE,EAAK1I,SAAS+hB,WACjC,GAAIgvD,EAAW1pF,SAAS,EAAA49B,mBAAmBC,KACzCtjC,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKR,GAAaQ,GAAY/uF,KAAKymB,WAEhC,GAAI5T,MAAMC,QAAQg8E,IAAeA,EAAWpvF,OACjDovF,EAAWzlF,SAAQ,SAAA2lF,GACjB,IAAMD,GAAa,mCAA2BC,GAC1CD,GACF,EAAKR,GAAaQ,GAAY/uF,KAAKymB,UAGlC,CACL,IAAMsoE,GAAa,mCAA2BD,GAC3CC,GACD9jF,KAAKsjF,GAAaQ,GAAY/uF,KAAKymB,IAkBzC,OAbIA,EAAKooE,0BAA6BpoE,EAAK1I,SAAS+hB,aAClDrZ,EAAKooE,0BAA2B,EAChClvF,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKR,GAAaQ,GAAY/uF,KAAKymB,OAQvCxb,KAAKgkF,kBAAkBxoE,GAEhBA,I,mDAIP,OAAOxb,KAAKygF,yB,yCAIK5qC,EAASouC,GAE1B,IAAMC,EAA4BlkF,KAAKmkF,wBAAwBnkF,KAAKokF,6BAA6BvuC,EAAS71C,KAAK2hF,UAAWsC,GACtHI,EAAoBrkF,KAAKskF,+CAA+CtkF,KAAKygF,sBAAqB,GAAOyD,GAE7G,OAAOlkF,KAAKukF,wBAAwBF,K,mDAGTnD,EAAUI,GAA4C,IAAjCsE,EAAiC,uDAAf5lF,KAAK2hF,SACvE,OAAOiE,EAAgB5+E,QAAO,SAAC3D,GAC7B,OAAOA,EAAQyhF,wBAAwB5D,EAAUI,MAChDx5E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,qEAGP8xE,GAAoD,IAAjC4E,EAAiC,uDAAf5lF,KAAK2hF,SAGvF,OAAOiE,EAAgB5+E,QAAO,SAAC3D,GAC7B,OAAOA,EAAQugF,0BAA4B5C,EAAkBnjF,OAAM,SAACgoF,GAAoB,IAC/E3E,EAAuB2E,EAAvB3E,SAAUI,EAAauE,EAAbvE,UACjB,OAAOj+E,EAAQyhF,wBAAwB5D,EAAUI,W,iCAK5CpmE,GAAoC,IAA5B4qE,EAA4B,wDAC7C9lF,KAAK+lF,uBAAuB7qE,EAAQ4qE,K,6CA+Cf,WACrBpxF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAA5G,GACvC,EAAKikC,eAAejkC,GAAO,EAAKsrF,SAAW,KAAO,EAAKhC,2BAA2BtpF,Q,6CAmCpF,IAAM0jB,EAASlb,KAAKU,YAAYwa,OAChC,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWpmE,EAAOqmE,gCACjB,CACDL,SAAU,YACVI,UAAWpmE,EAAOkZ,U,gCAIZlZ,GACR,OAAIlb,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKimF,oBACPjmF,KAAKkmF,+BAEAlmF,KAAKmmF,WAAWjrE,KAEzBlb,KAAKomF,WAAWlrE,GACTlb,KAAKmmF,WAAWjrE,M,gDAGvB,OAAO,I,wCAGSvG,GACZ3U,MAAQA,KAAK2D,WAAa3D,KAAK2D,UAAUmF,mBAC3C9Q,QAAQ4B,IAAOoG,KAAKsG,OAApB,IAA+BtG,KAAK2D,UAAUmF,mBAEhD9I,KAAKymG,YAAY9xF,EAAc,e,+CAG4B,IAAtC8zE,EAAsC,uDAAnB,GAAI5sE,EAAe,uDAAJ,GACvD,GAAI7b,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,SAAU,CACrD,IAAIkmI,EAA4BlmI,EAC5B7b,KAAK0iH,yBAAyB7mG,GAC9B7b,KAAKmmB,cAAcw8D,yBAIvB,GAHA3iF,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GACzC,OAAOA,EAAQs/E,2BAA6Bo/D,KAE1C/hJ,KAAKmmB,cACP,OAAO,EAGX,OAAO,I,oCAMyB,IAAtBxR,EAAsB,wDAC1Bpb,EAASyG,KAAKU,YACbuM,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACP1T,EAAOgtF,WAAWt5E,IAAoB,EACtC,IAAMyI,GAAkB,IAAAhB,oBAAmB1U,KAAM2U,GAC7Ce,EACFnc,EAAOitF,oBAAsBxmF,MAEzBzG,EAAOitF,sBACTjtF,EAAOitF,oBAAsB,MAE/BxmF,KAAKymF,kB,qCAKP,IAAMltF,EAASyG,KAAKU,YACpBnH,EAAOmtF,oBAAqB,EACxB1mF,KAAK4jF,yBACPrqF,EAAOotF,6BAA+B3mF,KAC7BzG,EAAOotF,8BAChBptF,EAAOotF,6BAA+B,KACtCptF,EAAO4sB,cAAgBnmB,MAEvBzG,EAAO4sB,cAAgBnmB,KAEzBA,KAAK4mF,mB,mCAGM,WACP5mF,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAM9nF,IAAM,IAE7B6I,MAAMC,QAAQ7H,KAAK8mF,qBAAuB9mF,KAAK8mF,mBAAmBryF,QACpEuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC3BA,GAAqBA,EAAkBF,QACzCE,EAAkBF,MAAM9nF,IAAM,OAIhCiB,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAM9nF,IAAM,IAElCiB,KAAKy7B,gBACP/mC,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAA5G,GACnC,EAAKikC,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAM9nF,IAAM,S,gCAMnCkoF,GAAU,WAEZC,EAAY,SAAC7jF,GAA2B,IAAlBiD,EAAkB,uDAAT,KACnC,OAAOjD,EAAQyP,SAAR,SAA8D,IAA/BzP,EAAQyP,SAAR,SAAsCm0E,EAAS3gF,GAAU,EAAKA,SAGlGtG,KAAKy7B,eACP/mC,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GAC7C,IAAMp2G,EAAU,EAAKo4B,eAAejkC,GAChC6L,IACFA,EAAQwjF,MAAMO,OAASF,EAAU7jF,GAAoB,GAATo2G,MAGvCxyB,GAAYjnF,KAAKmmB,gBAC1BnmB,KAAKmmB,cAAc0gE,MAAMO,OAASF,EAAUlnF,KAAKmmB,eAC7CnmB,KAAKimF,oBAAsBjmF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QAChFuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,EAAmB0yB,GAClD1yB,EAAkBF,MAAMO,OAASF,EAAUH,EAAmB,EAAKM,sBAAyC,IAAhBoyB,EAAW,S,6CAMxF59F,GACrB,IACM2rE,EADe,UAAMrlF,WAAW4S,YAAYiB,aACblK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,QAC9E+wF,GAAmBA,EAAgBrxE,QAAUqxE,EAAgBrxE,OAAO1hB,QACxC+yF,EAAgBrxE,OAAOzN,MAAK,SAACC,EAAEC,GAC3D,OAAOD,EAAEzR,OAAS0R,EAAE1R,OAAU0R,EAAE1R,MAAMzC,OAASkU,EAAEzR,MAAMzC,UAEnC2J,SAAQ,SAACqpF,GAC7B5rE,EAAWA,EAAS9d,MAAM,IAAI0pF,EAAiBvwF,OAAOmc,KAAK,OAG/D,OAAOwI,I,+CA+BgBuC,EAAgBspE,GAA6B,IAAd7xC,EAAc,uDAAJ,GAChE,OAAOA,EAAQh4C,OAAM,SAAAmJ,GACnB,OAAO0gF,EAAc1gF,EAAOgB,KACvBoW,EAAeza,UAAUkS,eAAe7O,EAAOgB,KAC/CoW,EAAeza,UAAUkS,eAAe7O,EAAOgB,IAAI7N,SAASutF,EAAc1gF,EAAOgB,IAAI,S,sEAIgB,WAAhE6V,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAI8D,SACEhG,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,IAIpCipE,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAAD,OAAa09E,IAAU19E,EAAQoc,6BAGvDhrB,UACrBsyF,EAAoBD,EAAmBh7E,MAAK,SAACzI,GAC3C,OAAOA,EAAQs9E,gCAAgCK,SAG/C+F,EAAoBD,EAAmB,MAG3CA,EAAqBC,EAAoB,CAACA,GAAqB,IAC5C3oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,I,qDAIP,GAAI9mF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,OAAQ,CAC7D,IAAMkzF,EAA0B3nF,KAAK4nF,6BAC/B7G,EAAQ/gF,KAAKmmB,cAAc1G,yBAC3BsnE,EAAoB/mF,KAAK8mF,mBAAmB,GAC5CC,EAAkBpG,gCAAgCgH,IACnD5G,IAAUgG,EAAkBtnE,2BAC/Bzf,KAAK8mF,mBAAqB9mF,KAAK8nF,sBAAsB9nF,KAAKmmB,cAAewhE,SAG3E3nF,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,8CAImD,IAAhEjqE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,OAAO3nF,KAAK+nF,8CAA8ClqE,EAAa8pE,O,6gBC/b3E,QACA,Q,IACA,MACA,SACA,QACA,QACA,SACA,SACA,QACA,QACA,S,mDAO0Cm7F,EAA7BA,2BAA6B,SAACzzH,EAAWriD,GAAe,MAC9B,UAAM7K,WAApCwD,EAD4D,EAC5DA,gBAAiBvD,EAD2C,EAC3CA,UACxB,IAAKuD,EAAgB+B,SAASiW,qBAC5B,MAAO,GAET,IAAMwpK,GAA2B,IAAA/qL,2BAA0BE,cAC3D,IAAK+yD,GAAajtD,EAAUG,UAAU9N,QAAU6T,OAAOC,UAAUyE,GAAa,KAEtEo6K,EADchlL,EAAbG,UACiCuJ,MAAK,SAAAH,GAAA,MAA0B,SAAjBA,EAAMrF,QAAsBqF,EAAMnD,eAAiBwE,KACzG,OAAIo6K,GAA0B7qK,EAA2B6qK,EAAsB/gL,YAAa8gL,IACrFxhL,EAAgB+B,SAASg7K,2BAA6B,IAAA/N,wBAAuB0S,EAAqBD,EAAsB/gL,cAGxH,IAFE,IAAAjD,qBAAoBgkL,EAAsB/gL,aAIrD,IAAMkT,EAAkB81C,EAAUlyC,OAAO7gB,cACnC4e,GAAS,IAAAC,oBACTmsK,EAASpsK,EAAOgb,wBAAwB,QAC9C,GAAIoxJ,EAAQ,CACV,IACMC,EADarsK,EAAOo9E,sBAAsB,CAAC98E,KAAM8rK,GAAS,KAAM,IAAI,EAAO,OAC3Cx7K,MAAK,SAAA6T,GACzC,OAAOpD,EAA2BoD,EAAQnE,KAAMjC,KAAqBgD,EAA2BoD,EAAQnE,KAAM2rK,MAEhH,GAAII,EACF,OAAO,IAAAnkL,qBAAoBmkL,EAAmB/rK,MAGlD,MAAO,IA3BF,IA8HM,EAoFA,EAuFA,EAtQAW,EAA8BA,EAA9BA,4BAA8B,SAAC5Z,EAAWyK,GACrD,OAAOzK,EAAUuJ,MAAK,SAAAH,GAAA,MAA0B,SAAjBA,EAAMrF,QAAqBqF,EAAMnD,eAAiBwE,MAOtEq6K,EAAuBA,EAAvBA,qBAAuB,SAACG,GACnC,OAAKA,EAGDA,EAAYpuK,+BACPouK,EAAYpuK,kCAAoCouK,EAAY7jL,UAAUmF,mBAAqB,GAE7F0+K,EAAY7jL,UAAUmF,mBAAqB,GALzC,IA2BE69K,GAb0Bc,EAA1BA,wBAA0B,SAACllL,EAAWyK,GAA4C,IAAhC06K,EAAgC,wDACvFC,EAAoBxrK,EAA4B5Z,EAAWyK,GACjE,OAAI26K,GAAqBA,EAAkBthL,YAClCghL,EAAqBM,EAAkBthL,aAEzCqhL,GAAsB,IAAAtrL,2BAA4B,IAQbuqL,EAAjCA,+BAAiC,SAACiB,EAAgB91K,GAC7D,IAAMyH,EAAkBquK,EAAezqK,OAAO7gB,cACxC4e,GAAS,IAAAC,oBAGf,GAAID,EAAOc,aACT,IAAK,IAAIznB,EAAI,EAAGA,EAAI2mB,EAAOc,aAAavnB,OAAQF,IAAK,CACnD,IAAM+nB,EAAapB,EAAOc,aAAaznB,GACvC,GAAI+nB,EAAWG,SAAU,CACvB,IAAM6qK,EAAShrK,EAAWG,SAAS3Q,MAAK,SAAA4Q,GAAA,MAAmC,SAAxBA,EAAQlB,KAAKlV,UAChE,GAAIghL,EAAQ,CACV,IAAMO,EAAa3sK,EAAOo9E,sBAAsBgvF,EAAQ,KAAM,IAAI,GAAO,GACrEC,EAAqBM,EAAW/7K,MAAK,SAAA6T,GAAA,OAAWpD,EAA2BoD,EAAQnE,KAAMjC,MAC7F,IAAKguK,EAAoB,CACvB,IAAI7/K,EAAWoK,EACVpK,IACHA,EAAW,UAAMvF,WAAWwD,gBAAgB+B,UAE1CA,EAASg7K,0BAA0B,WACrC,IAAMoF,GAAqB,IAAA1rL,yBAAwBhD,SAASC,SAASoC,gBACjEqsL,IAAuBF,IAEzBL,EAAqBM,EAAW/7K,MAAK,SAAA6T,GAAA,OAAWpD,EAA2BoD,EAAQnE,KAAMssK,OAJtD,GAQzC,GAAIP,EACF,OAAO,IAAA3pK,mBAAkB2pK,EAAmB/rK,KAAM,EAAGc,EAAW7lB,QAQ1E,IAAMmwL,EAAoB1rK,EAAO+a,2BAA2B,QACtD8xJ,GAAgB,IAAA1Q,aAAYuP,EAAmB,GAAI,IAAI,GAAO,GAEpE,GAAImB,EAAe,CACjB,IAAMR,EAAqBQ,EAAcj8K,MAAK,SAAA6T,GAAA,OAAWpD,EAA2BoD,EAAQnE,KAAMjC,MAClG,GAAIguK,EACF,OAAO,IAAA3pK,mBAAkB2pK,EAAmB/rK,KAAM,EAAGosK,GAIzD,OAAO,OA2GII,GAlG+BC,EAA/BA,8BAAA,gCAA+B,WAAOp9J,GAAP,sCAAqBq9J,EAArB,wDAA8CC,IAA9C,qIAC8B,UAAMhmL,WAAvEwD,EADmC,EACnCA,gBAAiB2+K,EADkB,EAClBA,QAASliL,EADS,EACTA,UAAW8K,EADF,EACEA,YAAayD,EADf,EACeA,YACpDhL,EAAgB+B,SAASiW,qBAFY,yCAGjCkN,GAHiC,OAKnC9M,EAAoBumK,EAApBvmK,iBACAxb,EAAaH,EAAbG,UACAuW,EAA4B5L,EAA5B4L,OAAQ7L,EAAoBC,EAApBD,iBACRktF,EAA8BxpF,EAA9BwpF,WAAYhwE,EAAkBxZ,EAAlBwZ,eAEbi+J,EAAuB,GACvBltK,GAAS,IAAAC,oBAX2B,0BAaZ0P,IAbY,qIAa/BO,EAb+B,KAelCi9J,EAfkC,wBAehB9lL,GAAc6lL,GAEhC7uK,EAAkB6R,EAAYikC,UAAYjkC,EAAYikC,UAAUlyC,OAAO7gB,cAAgByhB,EAAiBZ,OAAO7gB,cAC/GgsL,EAAmBnsK,EAA4BksK,EAAap7K,GAElEjV,QAAQ4B,IAAI,mBAAoB0uL,KAE5BA,GAAoBA,EAAiBjiL,eACtC,IAAA4zG,uBAAsB9f,EAAYhwE,IAChCjP,EAAOc,cAAgBd,EAAOc,aAAavnB,OAAS,IACnD8nB,EAA2B+rK,EAAiBjiL,YAAakT,IAC7D5T,EAAgB+B,SAASg7K,0BAA4B4F,GAAoBA,EAAiBx6K,oBACxFw6K,EAAiBx6K,qBAAuB1U,SAASC,SAASoC,gBA3BtB,oBA+BjCkrL,EAA+BptK,EAAiB5T,EAAgB+B,UA/B/B,4DAmChC0/K,EAAwBiB,EAAYv8K,MAAK,SAAAH,GAAA,MAA0B,SAAjBA,EAAMrF,QAAqBiW,EAA2B5Q,EAAMtF,YAAakT,MAC7HgvK,EAAsB,GACtBnB,EArCkC,iBAsCpCmB,EAAsBnB,EAAsB5+K,aAtCR,4BAuC3B2/K,EAvC2B,mCAwCT,IAAAt+D,sBAxCS,QAwC9BrhH,EAxC8B,OAyC9B26K,EAzC8B,wBAyCd36K,GAzCc,CAyCA,KACpC+/K,EAAsBzvK,EAAOrkB,OAC7B,UAAMwvB,UAAS,IAAA6tJ,WAAUqR,KAEnBhqK,EAAewtK,EAA+BptK,EAAiB5T,EAAgB+B,aAChEmjB,EAAa5qB,MAAK,SAAA0L,GAErC,OAAQA,EAAMnD,eAAiB2Q,EAAa3Q,cACtCmD,EAAMrF,SAAW6S,EAAa7S,QAC9BqF,EAAMtF,YAAY1C,UAAUqE,KAAOmR,EAAa9S,YAAY1C,UAAUqE,QAEtEwgL,EAAkB9zL,OAAO+2B,OAAO,GAAItS,EAAc,CACtD3Q,aAAc+/K,IAEhB19J,EAAa91B,KAAKyzL,GAClBJ,EAAqBrzL,KAAKyzL,IAxDQ,QA2DtCxwL,QAAQ4B,IAAI,sBAAuB2uL,GACnCn9J,EAAY5iB,aAAe+/K,EACvBL,GACF,UAAMjkK,UAAS,IAAA4tJ,qBAAoB0W,IA9DC,wBAgE5BD,GAA4C,SAAvBl9J,EAAY9kB,SACrC6S,EAAewtK,EAA+BptK,EAAiB5T,EAAgB+B,aAE7E8gL,EAAkB9zL,OAAO+2B,OAAO,GAAItS,EAAc,CACtD3Q,aAAcF,OAAOC,UAAU6iB,EAAY5iB,cAAgB4iB,EAAY5iB,aAAeyE,IAExF4d,EAAa91B,KAAKyzL,GAClBJ,EAAqBrzL,KAAKyzL,IAvEU,wQA6EnC39J,GA7EmC,mDAA/B,6CAoFmC49J,EAAnCA,kCAAA,gCAAmC,4FACvC3vK,EAAU,UAAM3W,WAAW+K,YAA3B4L,OACDgxG,EAAgBhxG,EAAOhR,KAAI,SAAA4R,GAE/B,OADAA,EAAMspK,iBAAkB,GACxB,gBAAWtpK,MAGb,UAAMuK,UAAS,IAAA6tJ,WAAUhoD,IAPqB,kDAAnC,4CAciCk+D,EAAjCA,+BAAiC,SAACU,GAAkC,IAAnBrlL,EAAmB,uDAAT,KAChE6X,GAAS,IAAAC,oBACf,OAAKD,EAAOc,aAGLd,EAAOc,aAAalQ,MAAK,SAAA68K,GAC9B,OAAItlL,EACKkZ,EAA2BlZ,EAASslL,EAAMlyL,MAAM,GAElDkyL,EAAMlyL,KAAK0mB,OAAO7gB,gBAAkBosL,KANpC,OAgBEnsK,EAA6BA,EAA7BA,2BAA6B,SAAClZ,GAA8D,IAArDukL,EAAqD,uDAApC,GAAIgB,EAAgC,wDACvG,IAAKvlL,IAAYukL,EACf,OAAO,EAET,IAAMiB,EAAeD,EAAsBhB,EAAezqK,OAAO7gB,cAAgBsrL,EAK3EkB,EAAuBzlL,EAAQ+V,+BAAiC/V,EAAQ+V,iCAAmC,GAC3G2vK,EAAyB1lL,EAAQy7G,+BAAiCz7G,EAAQy7G,iCAAmC,GACnH,OAAQgqE,IAAyBD,GAAkBE,IAA2BF,GAOrCG,EAA9BA,4BAA8B,WAAoB,IAAnBh8K,EAAmB,uDAAN,EAAM,EACxB,UAAM7K,WAApCwD,EADsD,EACtDA,gBAAiBvD,EADqC,EACrCA,UACxB,GAAIuD,EAAgB+B,SAASiW,qBAAsB,CACjD,IAAMzB,EAA4BC,EAA4B/Z,EAAUG,UAAWyK,GAC7EsP,EAAa0rK,EAA+B,GAAI9rK,EAA4BA,EAA0B7V,YAAc,MAC1H,GAAIiW,EAEF,OADA,UAAM2H,UAAS,IAAA2O,qBAAoBtW,EAAW7lB,QACvC,EAGX,OAAO,GAQoDwyL,EAAhDA,8CAAgD,SAACp+J,GAC5D,GAA4B,IAAxBA,EAAap2B,QAA2C,SAA3Bo2B,EAAa,GAAGvkB,OAC/C,OAAO,KAFoE,MAI5C,UAAMnE,WAAhCC,EAJsE,EAItEA,UAAW8K,EAJ2D,EAI3DA,YACZg8K,EAAY/sK,EAA4B/Z,EAAUG,UAAW2K,EAAYD,kBAC/E,OAAIi8K,GAAcA,EAAU7iL,YAAYwV,WAAagP,EAAa,GAAGxkB,YAAYwV,SACxEqtK,EAEF,MASqCC,EAAjCA,gCAAA,gCAAiC,WAAOX,EAAiBY,GAAxB,wGACQ,UAAMjnL,WAAnD+K,EADqC,EACrCA,YAAayD,EADwB,EACxBA,YAAahL,EADW,EACXA,gBAC1BmT,EAA4B5L,EAA5B4L,OAAQ7L,EAAoBC,EAApBD,iBAF6B,UAIjB,IAAA48G,sBAJiB,cAItCrhH,EAJsC,OAKtC26K,EALsC,wBAKtB36K,GALsB,CAKR,KAE9B+/K,EAAsBzvK,EAAOrkB,OACnC+zL,EAAkB9zL,OAAO+2B,OAAO,GAAI+8J,EAAiB,CACnDhgL,aAAc+/K,IAEhB,UAAMtkK,UAAS,IAAA6tJ,WAAUqR,IACzB,UAAMl/J,UAAS,IAAA4tJ,qBAAoB0W,IAC/Ba,GAAmBz4K,GAAeA,EAAY0Z,iBAAiB51B,QAAUkc,EAAYC,mBACjFiiK,EAAYliK,EAAY0Z,iBAAiBviB,KAAI,SAAAm8H,GACjD,GAAIA,EAAUj3H,aAAeC,GACxBg3H,EAAU/oB,oBACV+oB,EAAU7oB,eAAiBzqG,EAAYC,iBAAiB5I,IACxDi8H,EAAUnzH,sBACTpc,OAAOmc,KAAKozH,EAAUnzH,sBAAsBrc,SAAYkc,EAAYyZ,iBAAmB,GAChB,SAAxE65G,EAAUnzH,qBAAqBH,EAAYyZ,kBAAkB9jB,QAC7D29H,EAAUnzH,qBAAqBH,EAAYyZ,kBAAkBnZ,iBAC7DgzH,EAAUnzH,qBAAqBH,EAAYyZ,kBAAkBnZ,gBAAgBtN,UAAUqE,KAAOohL,EAAgB/iL,YAAY1C,UAAUqE,GAAI,CAE3I,GADAhQ,QAAQ4B,IAAI,qFAC+C,IAAvDlF,OAAOmc,KAAKozH,EAAUnzH,sBAAsBrc,QAAgBkR,EAAgB+B,SAASg7K,yBAEvF,OAAO,KAEPz+C,EAAUnzH,qBAAqBH,EAAYyZ,kBAAoB11B,OAAO+2B,OACpE,GACAw4G,EAAUnzH,qBAAqBH,EAAYyZ,kBAC3C,CAACnZ,gBAAiBm4K,EAAgB/iL,cAIxC,OAAO49H,KACNj9H,QAAO,SAAAi9H,GAAA,OAAaA,KACvB,UAAMhgH,UAAS,IAAA8hH,uBAAsB8sC,KArCK,kBAuCrC2V,GAvCqC,mDAAjC,gD,ybC1Tb,Q,IASA,MACA,Q,IACA,OACA,QACA,QACA,SACA,S,IACA,O,mDAEiClxH,EAApBA,kBAAoB,SAAChxD,GAChC,IAAMS,EAAQ,UAAM5E,WACZmiH,EAAoBv9G,EAAMgH,UAA1Bu2G,gBAFmC,EAGMv9G,EAAM4J,YAA/CwZ,EAHmC,EAGnCA,eAAgBrZ,EAHmB,EAGnBA,qBAClBoK,GAAS,IAAAC,oBACTkuK,GAAiB,IAAAnvH,sBAGvB,GAAI/vC,EACF,IAAK,IAAM3yB,KAAOsZ,EAChB,GAAIA,EAAqBlc,eAAe4C,GAAM,CAC5C,IAAMyZ,EAAkBH,EAAqBtZ,GAAOsZ,EAAqBtZ,GAAKyZ,gBAAkB,KAChG,GAAIA,GAAmBA,EAAgB3K,SAAWA,EAChD,OAAO2K,EAAgBtN,UAAUqE,GAOzC,IAAKqhL,GAAkB/kE,GAAmBA,EAAgBj+G,YAAYC,SAAWA,EAE/E,OADAtO,QAAQ4B,IAAI,2CAA4C0qH,EAAgBj+G,YAAY1C,UAAUqE,IACvFs8G,EAAgBj+G,YAAY1C,UAAUqE,GAI/C,IAAM4U,EAAe1B,EAAOgb,wBAAwB5vB,GACpD,GAAIsW,GAAgBA,EAAauJ,cAE/B,OADAnuB,QAAQ4B,IAAI,iDAAkDgjB,EAAauJ,cAAcxiB,UAAUqE,IAC5F4U,EAAauJ,cAAcxiB,UAAUqE,GAI9C,GAAI1B,IAAW,EAAAipC,cAAcqB,gBAAiB,CAC5C,IAAMx1B,GAAyB,IAAAC,6BAC/B,GAAIipG,GAAmBA,EAAgBj+G,YAAYC,SAAW8U,EAAuB9U,OAEnF,OADAtO,QAAQ4B,IAAI,mEAAoE0qH,EAAgBj+G,YAAY1C,UAAUqE,IAC/Gs8G,EAAgBj+G,YAAY1C,UAAUqE,GAG/C,GAAIoT,GAA0BA,EAAuB+K,cAEnD,OADAnuB,QAAQ4B,IAAI,yEAA0EwhB,EAAuB+K,cAAcxiB,UAAUqE,IAC9HoT,EAAuB+K,cAAcxiB,UAAUqE,GAO1D,OADAhQ,QAAQ4B,IAAI,sBAAuB,MAC5B,MAGyB6hK,EAArBA,mBAAqB,SAACrsG,GACjC,IACM/rD,GADS,IAAA8X,oBACQm2F,eAAeliD,GAChC30C,EAAO,UAAUA,KAEjBtC,EADQ,UAAMhW,WACSwD,gBAE7B,OAAO,IAAAsS,sBAAqB5U,EAASoX,EAAK1C,SAAU0C,EAAKvC,OAAQC,IAGrBonJ,EAAjCA,+BAAiC,SAACF,EAAsBD,GAGnE,IAAKA,IAAeC,EAClB,OAAO,EAGT,IAAMiqB,EAA6BlqB,EAAW1+J,YACxC6oL,EAA2BlqB,EAAqB3+J,YAEtD,GAAI,gCAAgCvG,SAASmvL,EAA2BhjL,SACnE,gCAAgCnM,SAASovL,EAAyBjjL,SAElC84J,EAAW5mJ,mBACb6mJ,EAAqB7mJ,iBAKpD,OAAO,EAIX,OAAO,GAG2BgxK,EAAvBA,qBAAuB,WAA+B,IAA9BtzK,EAA8B,uDAAhB,YAC3CnP,EAAQ,UAAM5E,WACd6T,EAAejP,EAAMgO,YAAYiB,aACjCwxE,EAAkBxxE,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,QAElF,OAAO+wF,EAAkBA,EAAgBrxE,OAAOnP,QAAO,SAAAiP,GAAA,OAASA,EAAM/e,QAAUgf,KAAe,IAG/DwjE,EAArBA,mBAAqB,SAAC+vG,GACjC,IAAMxkG,GAAW,IAAA3wB,mBACjB,IAAK2wB,EACH,OAAO,EAET,IAAI1wB,EAAc0wB,EAASn5E,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAK7X,UAAUqE,KAAOyhL,KACnE,IAAKl1H,EACH,OAAO,EAGT,IAAM95C,EAAO,UAAUA,KAEjBtC,EADQ,UAAMhW,WACSwD,gBAG7B,OAFyB,IAAAsS,sBAAqBs8C,EAAY/4C,KAAMf,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAElE7b,cAAcnC,SAAS,cAGxBw/E,EAAdA,YAAc,SAACvqB,GAC1B,IAAM61B,GAAW,IAAA3wB,mBACjB,IAAK2wB,EACH,OAAO,EAGT,IAAIz0C,EAAOy0C,EAASn5E,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAK7X,UAAUqE,KAAOonD,KAC5D,IAAK5e,EACH,OAAO,EAGT,IAAMijB,EAAWjjB,EAAKh1B,KAAKhD,iBAE3B,OAAO,EAAA6lC,iBAAiBlkD,SAASs5D,IA/H5B,IAkIMi2H,EAAqBA,EAArBA,mBAAqB,SAACt6H,GACjC,IAAM61B,GAAW,IAAA3wB,mBACjB,IAAK2wB,EACH,OAAO,KAGT,IAAIz0C,EAAOy0C,EAASn5E,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAK7X,UAAUqE,KAAOonD,KAC5D,OAAK5e,GACI,MAMLm5I,EAAwB,SAACx2K,GAE7B,IAAMy2K,EAAgBz2K,EAAI3O,MAAM,wBAChC,GAAIolL,EAAe,qBAC0BA,EAD1B,GACPC,GADO,WACA5xG,EADA,KACWC,EADX,KAGjB,OAAOlvE,WAAW6gL,GAAU7gL,WAAWivE,GAAajvE,WAAWkvE,GAIjE,IAAM4xG,EAAc32K,EAAI3O,MAAM,gBAC9B,OAAIslL,EACK1/K,KAAKywH,IAAL,MAAAzwH,MAAA,aAAY0/K,EAAYhiL,IAAIQ,UAG9B,MAGyBuxE,EAArBA,mBAAqB,WAAsB,IAArBzqB,EAAqB,uDAAT,KAE7C,GAAIA,EAAW,CACb,IAAM26H,EAAmBL,EAAmBt6H,GAC5C,GAAI26H,EAAkB,CACpB,IAAMt2H,EAAWs2H,EAAiBvuK,KAAKhD,iBAEjCwxK,EAAwBL,EAAsBl2H,GAEpD,GAAiB,kBAAbA,GACCu2H,EAAwB,GAE3B,OAAOA,GAKb,MAAkC,aAA3B,UAAWp9K,YAA6B,UAAWw3C,kCAAoC,UAAWC,iCAGxE4lI,EAAtBA,oBAAsB,WACjC,IAAMhlG,GAAW,IAAA3wB,mBACjB,IAAK2wB,EACH,OAAO,KAGT,IAAI1wB,EAAc0wB,EAASn5E,MAAK,SAAA0kC,GAC9B,OAAO,EAAA6N,iBAAiBlkD,SAASq2C,EAAKh1B,KAAKK,aAO7C,OAJK04C,IACHA,EAAc0wB,EAASn5E,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAKK,SAASvf,cAAcnC,SAAS,aAG5Eo6D,EACKA,EAAY/4C,KAGd,MAGwB0uK,EAApBA,kBAAoB,WAC/B,IAAMjlG,GAAW,IAAA3wB,mBACjB,IAAK2wB,EACH,OAAO,KAGT,IAAI1wB,EAAc0wB,EAASn5E,MAAK,SAAA0kC,GAC9B,OAAO,EAAA4N,2BAA2BjkD,SAASq2C,EAAKh1B,KAAKK,SAASvf,kBAGhE,OAAIi4D,EACKA,EAAY/4C,KAGd,MAGwB2uK,EAApBA,kBAAoB,WAC/B,IAAMC,GAAsB,IAAAp1H,iBAAgB,EAAAtjB,qBAAqBC,2BAGjE,OAFe,IAAAx2B,oBAEDm9E,sBAAsB8xF,EAClC,GACA,WACA,GACA,EACA,GACA,CAAE3qD,aAAc,KAAMC,gBAAiB,QAIP2qD,EAAvBA,qBAAuB,SAAChnL,GACnC,MAAkC,SAA3BA,EAAQM,UAAUgX,MAGkB2vK,EAAhCA,8BAAgC,SAACC,GAA4C,IAAlCn7H,EAAkC,uDAAtB,KAAM9rD,EAAgB,uDAAT,KACzEw5J,EAAU,SAACytB,GACf,OAAQA,GACN,KAAK,EAAA50I,gBAAgByB,KACnB,MAAO,CAACz3C,MAAO,GAAIE,OAAQ,IAC7B,KAAK,EAAA81C,gBAAgB0B,WACnB,MAAO,CAAC13C,MAAO,GAAIE,OAAQ,IAC7B,QACE,MAAO,CAACF,MAAO,GAAIE,OAAQ,MAG5ByD,IACHA,EAAOw5J,EAAQytB,IAGjB,IAAIC,EAAe,QAASD,EAAU,eAClCE,EAAMrxL,SAAS02F,eAAe06F,GAClC,GAAKC,EAAL,CAIAzyL,QAAQ4B,IAAI,MAAO4wL,GAEnB,IAAI14H,EAAM,IAAItB,MACZk6H,GAAM,IAAIC,eAAgBC,kBAAkBH,GAC5CI,EAAQC,KAAKJ,GAEf54H,EAAI/yD,IAAM,6BAA+B8rL,EAEzC,IAAMjzH,EAAe,UAAUvH,SAASyB,EAAKxuD,EAAK3D,MAAO2D,EAAKzD,OAAQ,KAAM,KAAM,EAAAoyC,WAAWK,WAAYi4I,GAAU,eAGnH,OAFA3yH,EAAaP,aAAajI,GAEnBwI,EAdL5/D,QAAQ4B,IAAI,gBAAiB,QAAS2wL,EAAU,iBAiBpBQ,EAAnBA,iBAAmB,SAACpnL,GAC/B,OAAOA,EAAUmP,SAASk4K,oBACtBrnL,EAAU2M,mBAAsB3M,EAAU2M,oBAAsB3M,EAAUmF,kBACxEnF,EAAU2M,kBACVwC,SAASk4K,oBAAoB,GAC/BrnL,EAAU2M,mBAAqB3M,EAAU4M,aAAe5M,EAAUmF,mBAOvCmiL,EAApBA,kBAAoB,SAACtpG,GAuBhC,OAtBAA,EAASj5E,MAAK,SAACC,EAAGC,GAChB,IAAMqlF,EAAStlF,EAAEhF,UAAUwb,YAAYnlB,QAAQ,SACzCk0F,EAAStlF,EAAEjF,UAAUwb,YAAYnlB,QAAQ,SAG/C,IAAgB,IAAZi0F,IAA6B,IAAZC,EAAe,CAClC,IAAMg9F,EAAStrL,SAAS+I,EAAEhF,UAAUwb,YAAYzhB,OAAOuwF,EAAS,EAAG,GAAI,IAGvE,OAFeruF,SAASgJ,EAAEjF,UAAUwb,YAAYzhB,OAAOwwF,EAAS,EAAG,GAAI,IAEvDg9F,EACX,OAAgB,IAAZj9F,GAED,GACa,IAAZC,EAEF,EAGA,KAIJvM,I,iOCtUT,I,IAAA,QACA,QACA,QACA,Q,IACA,O,mDAEoCwpG,EAAvBA,qBAAuB,SAAC1N,EAAY35F,GAC/C,IAAI+8B,EAAS,EACb,OAAQznH,SAASC,SAASoC,gBACxB,IAAK,WACL,IAAK,KACCgiL,EAAW58D,SACbA,EAAS48D,EAAW58D,OAAOtnF,uBAAyBkkJ,EAAW58D,QAAO,2BAAmB/8B,KAE3F,MAEF,IAAK,UACL,IAAK,KAMH,IALiB,CACf,QAAS,sBAAuB,WAAY,yBAA0B,SAAU,OAAQ,iBACxF,aAAc,uBAAwB,qBAAsB,2BAA4B,cACxF,qBAAsB,gBAEV3pF,SAASsjL,EAAWn3K,SAAWm3K,EAAW58D,OAAQ,CAC9D,IAAM34B,EAAa,EAAAnwD,mBAAmB+rD,GAAYxnF,cAClDukH,EAAS48D,EAAW58D,OAAO34B,IAKjC,OAAO24B,GAxBF,IA2BMuqE,EAAsBA,EAAtBA,oBAAsB,WACjC,IAAMlwK,GAAS,IAAAC,oBACT45F,EAAU75F,EAAOuZ,cAEvB,MAAyC,YAArCr7B,SAASC,SAASoC,eACb,CAAC,WAGH/G,OAAOmc,KAAKqK,EAAO45F,aACvB9tG,QAAO,SAAAxP,GAAA,MAAe,QAARA,GAAiBu9G,EAAQ90G,MAAK,SAAA1G,GAO3C,OANoCA,EAAOwlB,cAAgBxlB,EAAOwlB,aAAajT,MAAK,SAAAkT,GAClF,OAAOA,EAAQvD,aAAajkB,IAAQwnB,EAAQvD,aAAajkB,GAAK/C,QAAUuqB,EAAQvD,aAAajkB,GAAKyI,MAAK,SAAAoD,GACrG,OAAOA,EAAQM,UAAUixB,wBAQAy2J,EAAtBA,oBAAsB,SAACv5K,GAClC,GAAI1Y,SAASC,SAASqC,aAAe,IAAM,UAAOoF,yBAChD,OAAO,EAET,IAAIwqL,EACoC,aAArClyL,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,gBAClEqW,IAAuBA,EAAmBy5K,2BACxCz5K,EAAmB05K,8BAAgCpyL,SAASC,SAAS2b,WAK7E,OAHIs2K,IACFA,EAAmBF,IAAsB32L,OAAS,GAE7C62L,GAG6BG,EAAzBA,uBAAyB,WAIpC,IAHA,IAAIC,EAAsB,GAEpBzsG,GADS,IAAA9jE,oBACYwwK,iBAClBp3L,EAAI,EAAGA,EAAI0qF,EAAYxqF,OAAQF,IAAK,CAC3C,IAAM8O,EAAU47E,EAAY1qF,GACxB8O,EAAQM,UAAUmP,UAAYlL,MAAMC,QAAQxE,EAAQM,UAAUmP,SAAlB,YAC9CzP,EAAQM,UAAUmP,SAAlB,UAAwC1U,SAAQ,SAAAg2B,GACzCs3J,EAAoBvxL,SAASi6B,IAChCs3J,EAAoB32L,KAAKq/B,MAKjC,OAAOs3J,EAAoBhjL,QAGWkjL,EAA3BA,yBAA2B,SAAC,GAA4C,IAA3C95E,EAA2C,EAA3CA,aAAcyrE,EAA6B,EAA7BA,aAActW,EAAe,EAAfA,UAC9D4kB,EAAmBzhL,KAAKkI,KAAKirK,GAC7BuO,EAAoB1hL,KAAKouE,MAAM+kG,GAC/BwO,EAAgB3hL,KAAKkI,KAAK20J,GAC1B+kB,EAAiB5hL,KAAKouE,MAAMyuF,GAC5BglB,EAAmB7hL,KAAKkI,KAAKw/F,GAC7Bo6E,EAAoB9hL,KAAKouE,MAAMs5B,GAErC,OAAQ+5E,EAAmBE,IAAkBE,GACvCJ,EAAmBG,IAAmBC,GACtCJ,EAAmBE,IAAkBG,GACrCL,EAAmBG,IAAmBE,GACtCJ,EAAoBC,IAAkBE,GACtCH,EAAoBE,IAAmBC,GACvCH,EAAoBE,IAAmBE,GACvCJ,EAAoBE,IAAmBE,GASbC,EAArBA,mBAAqB,SAACplF,GACjC,IAAKA,IAAgBA,EAAYtqF,WAAasqF,EAAY7rF,OACxD,MAAO,GAET,IAAIuB,EAAWsqF,EAAYtqF,UAAS,GAAM,IAAS,GAC7CvB,EAAS6rF,EAAY7rF,OAQ3B,OAPK,UAAO7d,4BACVof,EAAWA,EAASzV,QAAO,SAAA0V,GACzB,OAAOxB,EAAO67F,kBAAkBr6F,OAK7BD,I,mQC1HT,I,IAAA,MACA,QAOA,Q,IACA,O,IAEA,SACA,SACA,Q,mDAEO,IAAM2vK,EAAsBA,EAAtBA,oBAAsB,WACjC,OAAO,IAAAr7G,qBAAoB,UAMIs7G,EAApBA,kBAAoB,WAC/B,IAAMC,EAAsBF,IAErB9nE,EADa,UAAMniH,WAAnB4L,UACAu2G,gBAEP,OAAOgoE,GAAuBhoE,GAAoB5vH,OAAOmc,KAAP,2BAAqC1W,SAASmqH,EAAgBj+G,YAAYC,SAM5F4zD,EAArBA,mBAAqB,WAChC,IAAM9W,EAAsB,UAAWA,sBAEhC+/D,EADa,UAAMhhH,WAAnB4L,UACAo1G,UAEP,OAAO//D,GAAuB+/D,IAAc,EAAAvlE,WAAWE,UAM7ByuI,EAAfA,aAAe,WAC1B,IAAMD,EAAsBF,IAErBjpE,EADa,UAAMhhH,WAAnB4L,UACAo1G,UAEP,OAAImpE,IAIAnpE,GAIG,EAAAvlE,WAAWpL,UAGoBg6I,EAA3BA,yBAA2B,SAAC/kF,GACvC,IAAIglF,EAAUhlF,EAAa,CAACA,GAAc,GAY1C,OAXIA,IAAe,EAAAxyD,mCAAmCK,aACpDm3I,EAAU,CAAC,cACFhlF,IAAe,EAAA9xD,gBAAgBuB,aACxCu1I,EAAU,CAAC,UACFhlF,IAAe,EAAA9xD,gBAAgB6B,SACxCi1I,EAAU,CAAC,SACFhlF,IAAe,EAAAxyD,mCAAmCS,UAC3D+2I,8BACShlF,IAAe,EAAAh2D,2BAA2B8C,UACnDk4I,2BAEKA,GAGkCC,EAA9BA,4BAA8B,SAACjlF,GAC1C,IAAIxjB,EAAa,GAIjB,OAHIwjB,IAAe,EAAAxyD,mCAAmCS,YACpDuuC,EAAa,IAERA,GAGoC0oG,EAAhCA,8BAAgC,SAACrmL,GAC5C,IAAIsmL,EAAoB,IAAIp7K,SAa5B,OAZI,EAAA6pC,iBAAiBlhD,SAASmM,GAC5BsmL,EAAoB,SAACz2L,EAAGkN,GACtB,UAAawpL,iBAAgB,GAC7B,UAAappF,iBACb,UAAMx/E,UAAS,IAAA6oK,oBAAmBzpL,KAE3BiD,IAAW,EAAAipC,cAAc4B,aAClCy7I,EAAoB,SAACz2L,EAAGkN,GACtB,UAAM4gB,UAAS,IAAAwmF,uBAAsBpnG,EAAQM,UAAUqE,OAIpD4kL,I,+IClGT,SACA,QACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBG,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAvpL,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKnY,cAAL,qBACA,EAAKwuK,kBAAoB,MACzB,EAAKx2J,YAAc,+BAGnB,EAAK61B,WAAa,KAClB,EAAK82E,OAAS,KACd,EAAK72E,KAAO,KACZ,EAAKyG,UAAY,KACjB,EAAKd,MAAQ,KACb,EAAK61I,MAAQ,KACb,EAAKx1I,SAAW,KAChB,EAAKm1G,gBAAkB,KACvB,EAAKsgC,sBAAwB,KAC7B,EAAK11I,KAAO,KACZ,EAAK0tG,kBAAoB,CAAC,aAAc,SAAU,mBAAoB,OAAQ,YAAa,QAAS,QAClG,WAAY,QArBF,E,qEAwBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACHy/H,EAAkB,aAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YACA,MACF,IAAK,0BACHD,EAAkB,wBAClBC,YACA,MACF,IAAK,mBACHD,EAAkB,kBAClBC,YACA,MACF,IAAK,OACHD,EAAkB,OAClBC,YACA,MACF,IAAK,YACHD,EAAkB,YAClBC,YACA,MACF,IAAK,QACHD,EAAkB,QAClBC,YACA,MACF,IAAK,QACHD,EAAkB,QAClBC,YACA,MACF,IAAK,WACL,IAAK,WACHD,EAAkB,WAClBC,YACA,MACF,IAAK,OACHD,EAAkB,OAClBC,YAGJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,2CAIrE,OAAO,I,6DA3EFl9I,GAAK,a,aADO+kL,G,qJCfrB,SACA,QACA,QACA,S,uDAEqBI,E,YAEnB,WAAY7hF,GAAO,iGACXA,I,uFAIN,IAAI9qB,GAAaA,EAAbA,6GACEtlE,EAASlb,KAAKU,YAAYwa,OAC1Bw1H,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAOhC,GANIt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGK,aAAhBhnL,KAAKsG,OAAuB,CAC9B,IAAM8mL,EAAkB18C,EAAatnD,0BAA4BluE,EAAOsD,MAAM,EAAAixH,eAAeznI,KACzFkT,EAAOsD,MAAM,EAAAixH,eAAeznI,IAAI8nI,YAAc,EAAA72G,mBAAmBG,YACjE,MACA,SACJonD,EAAWzrF,KAAK,CACdmsF,SAAU,SACVI,UAAW8rG,IAGf,OAAO5sG,I,wDAGyB9kD,GAAU,WACpC2xJ,EAAoBrtL,KAAKU,YAEzBsmL,EADeqG,EAAkBnyK,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC3Bg/K,aAC5BsG,EAAoB,KACxB,OAAQttL,KAAKsG,QACX,IAAK,WACHgnL,EAAoBD,EAAkBE,SACtC,MACF,IAAK,YACHD,EAAoBD,EAAkBG,QACtC,MACF,IAAK,eACHF,EAAoBD,EAAkBI,gBACtC,MACF,IAAK,oBACHH,EAAoBD,EAAkBK,MAK1C,GAAmB,OAAf1G,EACEsG,GAAqBA,EAAkB7xJ,iBAAmBz7B,KAAK8iF,UAAYpuF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBx7B,MAAK,SAAAzI,GAAA,OAAO,EAAKikC,eAAejkC,OAC9I9C,OAAOmc,KAAKy8K,EAAkB7xJ,gBAAgBr9B,SAAQ,SAAA5G,GACpD81L,EAAkB7xJ,eAAejkC,GAAO,QAGxCwI,KAAKy7B,gBACP/mC,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAA5G,GACnCA,IAAQkkC,IACV,EAAKD,eAAejkC,GAAO,cAKjC,GAAIwI,KAAKy7B,eAAeC,IAAa4xJ,GAAqBA,EAAkB7xJ,eAAeC,KAAc4xJ,EAAkBxqG,SAAU,CACnI,IAAM6qG,EAAcjyJ,IAAa,EAAAJ,eAAe,GAAK,EAAAA,eAAe,GAAK,EAAAA,eAAe,GACxF,IAAKt7B,KAAKy7B,eAAekyJ,GAAc,CACrC,IAAM9sG,EAA0BysG,EAAkBxsG,2BAA2B6sG,EAAaL,EAAkB7xJ,eAAeC,IACvHmlD,IACFysG,EAAkB7xJ,eAAekyJ,GAAe9sG,GAGpDysG,EAAkB7xJ,eAAeC,GAAY,U,iCAzEhCyxJ,G,qQCLrB,I,EAAA,QACA,UACA,QACA,QACA,QACA,QACA,O,oCAQsCS,EAAzBA,uBAAyB,SAACxxH,GACrC,IAAKA,EACH,MAAO,GAET,IAAM7iE,EAAS6iE,EAAkB17D,YAEjC,OAAOnH,EAAOs0L,gBAAkBt0L,EAAOs0L,gBAAkB,IAQ1BC,EAApBA,kBAAoB,SAAClG,GAChC,IAAM1sK,GAAS,IAAAC,oBACf,GAAID,EAAOc,aAAc,CAGvB,IAAIM,EAAapB,EAAOc,aAAalQ,MAAK,SAAA68K,GAAA,OAASA,EAAMlyL,OAASmxL,KAClE,GAAItrK,GAAcA,EAAWG,SAC3B,OAAOH,EAAWG,SAGtB,MAAO,IAUiCsxK,EAA7BA,2BAA6B,SAACrxK,EAASjC,EAAMtC,GACxD,IAAM1hB,GAAQimB,EAAQK,wBAA0BL,EAAQb,UAAY,IAAIvf,cACxE,IAAK6b,EAAeE,SAAWF,EAAeG,gBAAkBmC,EAAK1C,SAAU,CAC7E,GAAoB,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,2BAA6BthB,GACxE,OAAOgkB,EAAKC,cAAc,CAAC1S,GAAI,2BAA8BvR,IACxD,GAAoB,UAAhBgkB,EAAKvC,QAAsBuC,EAAK1C,SAAS,0CAA4CthB,GAC9F,OAAOgkB,EAAKC,cAAc,CAAC1S,GAAI,0CAA6CvR,IAGhF,OAAOimB,EAAQsxK,mBAAqBtxK,EAAQyC,aACvC1E,EAAKC,cAAc,CAAE1S,IAAI,IAAAimL,qBAAoBvxK,EAAQb,aAkBTqyK,EAAtCA,oCAAsC,SAAC7qL,GAClD,GAAIuE,MAAMC,QAAQxE,EAAQM,UAAUwqL,2BAA6B9qL,EAAQM,UAAUwqL,yBAAyB15L,OAAQ,CAMlH,IAEI05L,GAFW,IAAAhzK,oBACUwwK,gBAAe,GACG3kL,QAAO,SAACwxF,GACjD,OAAOn1F,EAAQM,UAAUwqL,yBAAyBh0L,SAASq+F,EAAa70F,UAAUqE,OAIpF,OAFAhQ,QAAQ4B,IAAI,2BAA4Bu0L,GAEjCA,EAET,MAAO,IAQqBC,EAAjBA,eAAiB,SAACj7K,GAC7B,OAAKA,EAIEA,EAAIxU,QAAQ,OAAQ,KAAKrC,cAHvB,IAY4BujF,EAA1BA,wBAA0B,SAACx8E,GACtC,OAMO,GA3GF,IA8GDgrL,EAAuB,CAAC,OAAQ,QAAS,MAAO,OAAQ,OAAQ,eASrCC,EAApBA,kBAAoB,SAAC/rL,GAAwE,IAA7DkY,EAA6D,uDAAtD,KAAM8zK,EAAgD,0EAElGp2K,EAAiB,UAAMhW,WAAWwD,gBAExC,OAAOpD,EAAUjB,QAAO,SAACmB,EAAO2D,GAE9B,MADyBA,EAAS4tF,uBAAyB5tF,EAASgB,YAAa,IAAAssF,iBAAgBttF,KACxE,EAAAxK,oBAAsBwK,EAASa,UAAY,EAAAC,mBAAmBC,KACrF,OAAO1E,EAGT,GAAI8rL,EACF,OAAO9rL,EAAQ2D,EAAS+C,SACnB,GAAIsR,EAAM,CACf,IAAM+zK,GAAc,IAAAh0K,gBAAepU,EAASC,YAAaoU,EAAMtC,EAAgB/R,EAAS+C,UAElFwR,GADe,IAAAE,iBAAgBzU,EAAUqU,IAClB+zK,GAAe,GAC5C,GAAI7zK,GAAQ0zK,EAAqBl0L,SAASwgB,EAAKre,eAC7C,OAAOmG,EAAQ2D,EAAS+C,SAI5B,OAAO1G,EAAQ,IACd,K,iaC3JL,QAMA,SACA,UACA,SAEgCgsL,EAAnBA,iBAAmB,SAAC/jL,EAAkBG,EAAiBI,GAAgE,IAAtDyjL,EAAsD,wDAA9B1jL,EAA8B,uDAAP,GACrHrJ,GAAa,IAAA+E,eAAc,MAAM,GAEjCioL,GAAe,IAAA7jL,aAAYC,EAAuBF,EAAiBG,IACrET,EAAkBokL,EAAa3nL,QAAO,SAAA4nL,GACxC,QAAK1jL,EAAwB0jL,KAGtBF,EACHE,EAAgBt4K,OAASrL,EAASqL,MAClCs4K,EAAgBt4K,MAAQrL,EAASqL,UAEvC5L,EAAiBtM,SAAQ,SAAAywL,GACnBA,EAAWv4K,MAAQzL,EAAgByL,QACrC/L,0BAAsBA,IAAtB,aAA0CskL,EAAWvjE,gBAGzDtgH,EAAqB5M,SAAQ,SAAA0wL,GAC3B,IAAMC,EAAUrkL,EAAiBoB,MAAK,SAAAkjL,GAAA,OAAOA,EAAIhnL,KAAO8mL,EAAeG,cAClEF,GAGDA,EAAQz4K,MAAQzL,EAAgByL,QAClC/L,0BAAsBA,GAAtB,CAAuCukL,QAI3C,IAAM/kE,GAAa,IAAA9oH,4BAA2BU,EAAY4I,GAC1D,OAAO,IAAAvI,cAAa+nH,IA5Bf,IA+BMh/G,EAAyBA,EAAzBA,uBAAyB,SAACF,EAAiBG,GACtD,IAAMkkL,EAAkBlkL,EAAqBhE,QAAO,SAAA0sH,GAClD,OAAOA,EAAInI,UAAamI,EAAIu7D,aAAepkL,EAAgB7C,MAE7D,8BAAW6C,EAAgBygH,YAA3B,aAAyC4jE,KA8B9Bt7D,GA3BqBu7D,EAArBA,mBAAqB,SAAC,GAAkG,IAAjGzkL,EAAiG,EAAjGA,iBAAkBqwK,EAA+E,EAA/EA,kBAAmBjpK,EAA4D,EAA5DA,mBAAqBs9K,EAAuC,uDAAtB,EAAGC,EAAmB,uDAAN,EAC7H,IAAKD,IAAmBC,EACtB,MAAO,MAET,IAAMC,EAAezjE,EAAuBnhH,EAAkB2kL,IAAe,EACvEE,EAAOxU,EAAoB,IAAM,GACjCyU,EAAOJ,EACPK,IAAOJ,EAAaC,GAKpBI,GAAY,IAAAC,KAAIJ,EAAMC,EAAMC,GAElC,OAAO,IAAA/7K,sBAAqB5B,EAAoB49K,EAAW,MAAM,GAAO,IAGhCE,EAA7BA,2BAA6B,SAACC,GACzC,QAASA,EAAav5K,MAAQ,KAAMxR,QAAQ,IAGX6F,EAAtBA,oBAAsB,SAACD,GAClC,OAAOA,EAAiB1D,QAAO,SAAA+nL,GAC7B,OAAOA,EAAQ3jL,OAAS,EAAAyvK,uBAAuBP,YAIjB1mD,EAArBA,mBAAqB,SAAC3oH,GACjC,OAAOA,EAASqwK,eAAiB,EAAApB,oBAAoBI,SAAWrvK,EAASqwK,eAAiB,EAAApB,oBAAoBK,UAGnGuV,EAAwBA,EAAxBA,sBAAwB,SAAC7kL,GACpC,OAAOA,EAASsgH,WAAaqI,EAAmB3oH,IAGrCC,EAA0BA,EAA1BA,wBAA0B,SAACD,GACtC,GAAIA,EAASiwK,SAAU,CACrB,IAAMO,EAAiBxwK,EAASwwK,eAAiBtnE,KAAKC,MAAMnpG,EAASwwK,gBAAkB,KACvF,GAAIA,GAAkBA,EAAe3wB,SAAW2wB,EAAe3wB,QAAQr2J,SAAWgnL,EAAesU,eAC/F,OAAO,EAGX,OAAOD,EAAsB7kL,KAAcA,EAASkwK,YAGzC6U,EAAqBA,EAArBA,mBAAqB,SAACtlL,GACjC,IAAIulL,EAAkB,KAQtB,OAPAvlL,EAAiBtM,SAAQ,SAAAyM,GACvBA,EAAgBygH,UAAUltH,SAAQ,SAAA6M,GAC5BA,EAASqwK,eAAiB,EAAApB,oBAAoBK,UAChD0V,EAAkBhlL,SAIjBglL,GASIpkE,EAAyBA,EAAzBA,uBAAyB,SAACnhH,GAAqC,IAAnBq/G,EAAmB,uDAAN,EAC9DkmE,EAAkBD,EAAmBtlL,GAC3C,IAAKulL,EACH,OAAO,KAET,GAAIA,EAAgB7kL,OAAS,EAAAC,eAAe7I,MAC1C,OAAOytL,EAAgB3kL,OAEzB,IAAM4kL,GAAa,IAAAC,eAAcpmE,EAAYkmE,EAAgB3kL,QAC7D,OAAO,IAAAtJ,cAAaoI,KAAKyI,MAAmB,IAAbq9K,GAAoB,MAGrBE,EAAnBA,iBAAmB,SAAC1lL,EAAkBq/G,EAAY5xG,GAC7D,IAAMyzG,EAAgBC,EAAuBnhH,EAAkBq/G,GAC/D,OAAsB,OAAlB6B,EACKA,EAEFzzG,EAAezQ,SAAS6yK,QAC3BnwK,KAAKouE,MAAOuxC,GAAc5xG,EAAezQ,SAAS6yK,QAAU,KAAQ,KAAO,IAC3E,GAGqC1vD,EAA9BA,4BAA8B,SAACjgH,GAC1C,IAAMylL,EAAoB,GAa1B,OAZAzlL,EAAoBF,iBAAiBtM,SAAQ,SAAAywL,GACvCA,EAAWzjL,OAAS,EAAAyvK,uBAAuBP,SAG/CuU,EAAWvjE,UAAUltH,SAAQ,SAAA6M,GACvBA,EAASsgH,UACX8kE,EAAkBt7L,KAAKL,OAAO+2B,OAAO,GAAIxgB,EAAU,CACjDgkL,WAAYJ,EAAW7mL,YAKxB,CACLqoL,oBACAtV,kBAAmBnwK,EAAoBmwK,kBACvC/vK,qBAAsBJ,EAAoBI,wB,gICtJ9C,OACA,QAEA,QACA,QACA,QAKA,SACA,QAIA,QACA,QACA,QAEA,IAoRMslL,EAAqB,CACzBpkK,gCACAhC,sBACA+I,sCACAm+I,kDACA1kJ,sBACAgB,2B,WAGa,IAAA6iK,aACb,IAAAzkF,UA7BsB,SAACxzG,GAAU,IAC1B8jE,EAAqB9jE,EAAM0zG,UAA3B5vC,kBAD0B,EAES9jE,EAAM8J,UAAzCG,EAF0B,EAE1BA,UAAW8uK,EAFe,EAEfA,qBAMlB,MAAO,CACLj1G,oBACA75D,YACAwb,iBARyBzlB,EAAMgsL,QAA1BvmK,iBASLszJ,uBACAr7J,aATqB1d,EAAMyc,YAAtBiB,aAUL4hJ,2BATmCt/J,EAAMk4L,WAApC54B,2BAUL9lJ,mBATiBxZ,EAAMqN,gBAAlB+B,YAuBkB4oL,EAAzB,EA9R6B,SAAChlF,GAAU,IAEjC/oG,EAEyC+oG,EAFzC/oG,UAAsCwb,GAEGutF,EAF9Bp/E,eAE8Bo/E,EAFdphF,UAEcohF,EAFHvtF,kBAAkBq+C,EAEfkvC,EAFelvC,kBAAmBq0H,EAElCnlF,EAFkCmlF,QAASjwC,EAE3Cl1C,EAF2Ck1C,SAAUvtH,EAErDq4E,EAFqDr4E,kBACnGo+I,EAC8C/lE,EAD9C+lE,qBAAsBD,EACwB9lE,EADxB8lE,wBAAyBp7J,EACDs1F,EADCt1F,aAAc4hJ,EACftsD,EADessD,2BAC7DlrI,EAA8C4+E,EAA9C5+E,UAAWgB,EAAmC49E,EAAnC59E,YAAa5b,EAAsBw5F,EAAtBx5F,mBAOpBmgF,EAAqB,WAA8D,IAA7D6F,EAA6D,uDAA7C17B,EAAmBs0H,EAA0B,wDAKvF,OAAOC,EAAuB74F,EAAe44F,IAqGzCE,EAAyB,SAAC54F,GAC9B,GAAIq5E,EAAqB58K,OAAQ,CAC/B,IAAIo8L,EAAsBA,GAAtBA,qBAA0Bxf,IAC9Br5E,EAAW55F,SAAQ,SAAAgI,GACjB,IAAM0qL,EAAgBD,EAAoBl0K,WAAU,SAAAo0K,GAClD,OAAI3qL,EAASC,YAAYyM,SAAS8tE,cACxBmwG,EAAgBzqL,SAAWF,EAASE,QACtCF,EAASC,YAAYyM,SAAS8tE,gBAAkBmwG,EAAgB1qL,YAAYyM,SAAS8tE,cAEtFmwG,EAAgBzqL,SAAWF,EAASE,QACzCyqL,EAAgB/8F,sBAAwB+8F,EAAgB/8F,qBAAqB1tF,SAAWF,EAASE,UAGjGwqL,GAAiB,GACnBD,EAAoBl7L,OAAOm7L,EAAe,MAG1CD,EAAoBp8L,SAAW48K,EAAqB58K,QACtD28K,EAAwByf,KAKxBF,EAAyB,SAAC74F,EAAe44F,GAE7ChkK,IACA,IAAIsrE,GAAa,IAAAiZ,gBAAelzF,EAAkB,MA6BlD,GA5BAi6E,EAAW55F,SAAQ,SAAA4yL,GACjB,IAAMC,EAAsB1uL,EAAUuJ,MAAK,SAAAH,GAAA,OAASA,EAAMrF,SAAW0qL,EAAgB1qL,UACrF,GAAI2qL,IAAwB,EAAD,qBACzBD,EAAgB/pL,QAAUgqL,EAAoBhqL,QAC1CgqL,EAAoB9nL,SAAW6nL,EAAgB7nL,UACjD,GAAI6nL,EAAgB3qL,YAAY3F,UAAW,CACzC,IAAMnH,EAASy3L,EAAgB3qL,YAAY3F,YACvCnH,EAAOkiC,eACTu1J,EAAgB7nL,SAAWzU,OAAOmc,KAAKtX,EAAOkiC,gBAAgBz0B,QAAO,SAAAkqL,GAAA,OAAe33L,EAAOkiC,eAAey1J,MAAcz8L,OAExHu8L,EAAgB7nL,SAAW8nL,EAAoB9nL,cAGjD6nL,EAAgB7nL,SAAW8nL,EAAoB9nL,SAIjD,EAAAvN,oBAAsBk8F,IAAkBA,EAAclU,2BACpDotG,EAAgB1qL,SAAWwxF,EAAcxxF,QACvC0qL,EAAgBh9F,sBACdg9F,EAAgBh9F,qBAAqBrwF,UAAUqE,KAAO8vF,EAAcn0F,UAAUqE,MACpFgpL,EAAgB7nL,SAAWyuJ,EACvB84B,IACFM,EAAgB/pL,QAAU,EAAAC,mBAAmBC,UAKjD2wF,GAAiBA,EAAclU,yBAA0B,CAC3D,IAAMx4D,GAAc,IAAAxN,mBAAkBk6E,EAAe8/D,EAA4B75I,GACjFqN,EAAYnkB,QAAUypL,EAAgB,EAAAxpL,mBAAmBC,KAAO,EAAAD,mBAAmBqqG,KACnFvZ,EAAWjjG,KAAKq2B,GAEd,EAAAxvB,oBAAsBkW,EAAmBsf,WAC3C4mE,0BAAiBA,IAAjB,aAAgCz1F,EAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAM1E,UAAY,EAAAC,mBAAmBC,WAE7F2K,EAAmBsf,UACrB7uB,EAAUnE,SAAQ,SAAAuN,GACXA,EAAMw8I,mBAGNnwD,EAAW/3F,MAAK,SAAAkxL,GAAA,OAAaA,EAAUnpL,KAAO2D,EAAM3D,OACvDgwF,EAAWjjG,KAAK4W,OAItB+hB,EAAY,CAACnrB,UAAWy1F,IACxB44F,EAAuB54F,IACR,IAAA78E,oBACR03E,sBA6DT,OAAO2tD,EAASvuD,GAnDe,WAG0B,IAHzBqhB,EAGyB,uDAHH,GACtBz1F,EAEyB,uDAFXu+C,EACdg1H,IACyB,yDAAzBC,EAAyB,wDACnDC,EAAkB,CAACzzK,GACvB,GAAIy1F,EAAoB7+G,OAAQ,CAC9B,IAAMm4G,EAAqB/uF,EAAY4B,yBACnC8xK,GAAgB,EACpBj+E,EAAoBl1G,SAAQ,SAAAquG,GAC1B,GAAIA,EAAmB9oG,UAAUqE,KAAO6V,EAAYla,UAAUqE,GAAI,CAChE,IAAMslG,EAAsB+jF,EAAe,CAAC71K,KAAMixF,IAAsB,IAAAD,yBAAwB3uF,EAAa4uF,EAAoBz2F,GACjI,GAAIs3F,EAGF,QAFA,IAAAhnB,iBAAgBgnB,EAAoB9xF,MAAM,GAC1C81K,EAAgBv8L,KAAKu4G,EAAoB9xF,MACjC8xF,EAAoB9xF,KAAKlV,QAC/B,IAAK,eACL,IAAK,eACH,IAAKirL,EAAe,CAClB,IACMt+F,GADS,IAAA93E,oBACoB+a,wBAAwB,UACvD+8D,GAAuBA,EAAoBnQ,UAAYmQ,EAAoB9sE,gBAAkBorK,KAC/F,IAAAjrG,iBAAgB2M,EAAoB9sE,eAAe,GACnDmrK,EAAgBv8L,KAAKk+F,EAAoB9sE,sBASjDnuB,QAAQ4B,IAAI,gCAAiC6yG,EAAmBnmG,OAAQsmG,OAKhF0kF,EAAgBlzL,SAAQ,SAAAozL,IACtB,IAAAlrG,iBAAgBkrG,GAAgB,MAGlCv/F,EAAmBp0E,GACnBoV,IAKIm+J,GACFX,EAAQ17L,MAAK,IAAA2/F,eAAc72E,GAAa,Y,iKC7Q9C,OACA,Q,OAKA,QACA,Q,IACA,M,IACA,SACA,SACA,SACA,S,mDAIKg5D,OAAOliF,UAAU88L,UACpB/8L,OAAOkC,eAAeigF,OAAOliF,UAAW,WAAY,CAClDuC,MAAO,SAASw6L,EAAch2J,GAC5B,IAAIi2J,EAAgB3xL,KAAK8X,iBACRk7C,IAAbt3B,GAA0BA,EAAWi2J,EAAcl9L,UACrDinC,EAAWi2J,EAAcl9L,QAE3BinC,GAAYg2J,EAAaj9L,OACzB,IAAIm9L,EAAYD,EAAc33L,QAAQ03L,EAAch2J,GACpD,OAAsB,IAAfk2J,GAAoBA,IAAcl2J,KAK/C,IAAMm2J,EAAez4L,SAASC,SACxBy4L,GAAiB,IAAAtgG,WAAUqgG,EAAar8H,MAAQ,EAAI,EAE1D,SAASu8H,EAAK36K,EAAKy6G,GACjB,OAAOA,EAAkB,UAAc/6H,IAAIsgB,EAAK,CAC9C46K,OAAQngE,EAAgBmgE,SACrB,UAAcl7L,IAAIsgB,GAGzB,SAAS66K,EAAM76K,EAAKnjB,GAElB,OAAO,UAAci+L,KAAK96K,EAAKnjB,EAAM,CACnCk+L,QAAS,CACP,eAAgB,mBAChB,uBAAuB,aAAE,0CAA0C1lG,SAKzE,IAAI2lG,EAAY,KAEhB,SAASC,IACP,GAAID,EAAW,OAAOA,EADD,IAEhBz0C,EAAavkJ,SAASC,SAAtBskJ,UAKL,OADAy0C,GADAz0C,EAAYA,EAAYA,EAAY,IAAM,IAClBA,EAAZA,UAQd,IAAM20C,EAAa,SAACC,GAAiC,IAAxB92L,EAAwB,uDAAP,GACtC20G,GAAU,IAAAh0G,yBAAwBX,GACxC,OAAI,EAAAN,kBAA0D,WAArC/B,SAASC,SAASoC,eAClC82L,EAEFA,GAAWA,EAAQp4L,SAAS,KAAO,IAAM,KAAzC,QAAwDi2G,GAG3DoiF,EAA0B,WAC9B,MAAyC,WAArCp5L,SAASC,SAASoC,eACb,uBAEF,kBAGYg3L,E,+HACOx9K,EAAO7J,GAG/B,OAFA6J,EAAQA,GAAS,EACjB7J,EAAOA,GAAQ,aACR2mL,EAAQM,IAAR,eAAoCR,EAAar2L,OAAjD,0BAAiFyZ,EAAjF,SAA+F7J,EAA/F,4B,sCAIc6J,EAAO7J,GAC5B6J,EAAQA,GAAS,EACjB7J,EAAOA,GAAQ,aAEf,IAAIgM,EAASi7K,IAAT,eAAqCR,EAAar2L,OAAlD,0BAAkFyZ,EAAlF,SAAgG7J,EAAhG,SAA6G0mL,EAIjH,OAHI,UAAOrxL,aACT2W,GAAO,UAEF26K,EAAK36K,K,wCAGY48G,GACxB,OAAI56H,SAASC,SAASwiL,eACbzlL,QAAQC,QAAQ,CAACpC,KAAM,KAKzB89L,EAHK/9D,EACLq+D,IADK,+DACuER,EAAar2L,OADpF,YACsGw4H,EAC3Gq+D,IAFK,+DAEuER,EAAar2L,U,gCAIjFvH,GACf,GAAGmF,SAASC,SAASC,UAAW,CAC9B,IAAI6oG,EAAWniG,KAAK0yL,cAAcz+L,GAClC,OAAOmC,QAAQC,QAAQ8rG,GAEvB,OAAO8vF,EAAMI,IAAgB,0BAA2Bp+L,K,mCAKxCA,GAClB,GAAGmF,SAASC,SAASC,UAAW,CAC9B,IAAI6oG,EAAWniG,KAAK0yL,cAAcz+L,GAClC,OAAOmC,QAAQC,QAAQ8rG,GAEvB,OAAO8vF,EAASI,IAAT,6BAAoDp+L,K,gCAK9CA,GACf,GAAGmF,SAASC,SAASC,UAAW,CAC9B,IAAMyN,EAAQ,UAAM5E,WACbmH,EAA0BvC,EAA1BuC,YACDvI,EAD2BgG,EAAb+N,UACO/T,SAC3B,OAAOf,KAAK2yL,eAAex+E,KAAK2W,UAAU,CACxC6yB,UAAWvkJ,SAASC,SAASskJ,UAC7Bi1C,cAAe7xL,EAAS6xL,cACxBC,UAAW1+E,KAAK2W,UAAU72H,GAC1B+T,GAAIsB,EAAY2L,SAGlB,OAAOg9K,EAAMI,IAAgB,wBAAyBp+L,K,oCAKrCA,GACnB,OAAOg+L,EAAMI,IAAgB,4BAA6Bp+L,K,wCAMnCstC,EAAO0sF,GAC9B,OAAOgkE,EAAMI,IAAgB,gCAAiC,CAC5D9wJ,QACA0sF,WACA78C,aAAch4E,SAASC,SAASmC,W,uCAIZvH,GACtB,OAAGmF,SAASC,SAASC,UACZ0G,KAAK8yL,aAAa3+E,KAAK2W,UAAU,CACtC6yB,UAAWvkJ,SAASC,SAASskJ,UAC7Bo1C,KAAM5+E,KAAK2W,UAAU72H,MAGhBg+L,EAAMI,IAAgB,uBAAwBp+L,K,iCAIvCghB,GAChB,OAAO88K,GA/GoB,eAAtBF,EAAazmL,KAAwBinL,IAAgB,mBAAqBR,EAAar2L,OAAS,KA+G5E,yBAA2ByZ,K,mCAGlCA,EAAO67G,GACzB,OAAOihE,EAAKM,IAAgB,4BAA8Bp9K,GAAS67G,EAAY,cAAgBA,EAAY,O,qCAI3G,OAAG13H,SAASC,SAASC,UACZlD,QAAQC,QAAQ2J,KAAKgzL,oBAAoB55L,SAASC,SAASmC,OAA3C,8BAAgFpC,SAASC,SAASmC,SAElHu2L,EAAQM,IAAR,8BAAkDj5L,SAASC,SAASmC,U,oDAK7E,IAAMsZ,EAAY,UAAM3S,WAAW2S,UAC5B/T,EAAY+T,EAAZ/T,SACP,OAAIA,GAAYA,EAASkhC,cAAiE,IAAlDlhC,EAASkhC,YAAYjoC,QAAQ,gBAC5D+3L,EAAKM,IAAgB,gFAAkF17F,mBAAmB7hF,EAAU89K,gBACnI7xL,GAAYA,EAASkhC,cAAiE,IAAlDlhC,EAASkhC,YAAYjoC,QAAQ,gBAClE5D,QAAQC,QAAQ,wCAEhBD,QAAQ68L,W,gDAIcC,EAAO36H,EAAIntD,GAC1C,MAAa,yCAAV8nL,EACMjB,EAAMI,IAAgB,yDAA0D,CAACa,QAAO36H,KAAIntD,SAE5FhV,QAAQC,SAAQ,K,oDAGU68L,EAAO/xF,EAAMl/D,GAChD,IAAMntB,EAAY,UAAM3S,WAAW2S,UACnC,MAAa,yCAAVo+K,EACM98L,QAAQC,QAAQ,CAACpC,KAAe,WAATktG,IAEvB8wF,EAAMI,IAAgB,6DAA8D,CAACa,QAAO/xF,OAAMl/D,cAAakxJ,kBAAmBr+K,EAAU89K,kB,sCAIhIh8K,GACrB,OAAOq7K,EAASI,IAAT,8BAAmDj5L,SAASC,SAASmC,OAArE,6BAAyG,CAACob,M,uCAIjH,OAAOm7K,EAAQM,IAAR,6BAAiDj5L,SAASC,SAASmC,OAAnE,gC,4CAGoB+lC,GAC3B,OAAO0wJ,EAASI,IAAT,oCACL,CAAC9wJ,QAAO6vC,cAAeh4E,SAASC,SAASmC,W,mFAGNu0H,EAAeqjE,G,wFAC9C33L,EAAiB23L,GAAqBh6L,SAASC,SAASoC,gBAC1DrC,SAASC,SAASwiL,e,iCACWkW,EAAKS,IAA4B,wC,cAA1DvhE,E,gBACkB8gE,EAAKS,IAA4B,gC,cAArDa,E,QACQp/L,KAAK0tF,SAAWsvC,EAAiBh9H,K,kBACtCo/L,G,eAELC,EAAWhB,EAAWA,wBAAuBl5L,SAASC,SAASmC,OAAUC,GACzE83L,EACAjB,EAD+B,WAAnB72L,EACD62L,wBAAuBl5L,SAASC,SAASmC,QAAUu0H,EAAgB,qBAAqBA,EAAgB,IACxGuiE,wBAAuBl5L,SAASC,SAASmC,QAAUu0H,EAAgB,IAAIA,EAAgB,IADwBt0H,G,kBAEvHrC,SAASC,SAASC,UACf0G,KAAKgzL,oBAAoB55L,SAASC,SAASmC,OAAQ83L,GACnDvB,EAAKA,GAAGM,IAAgBkB,I,qJAGCz8K,EAAYw6G,GAAgE,IAAnDC,EAAmD,wDAAhB91H,EAAgB,aAC/G,GAAIrC,SAASC,SAASwiL,gBAAlB,kBACF,OAAOzlL,QAAQC,QAAQ,CAACpC,KAAM,KAEhC,IAAMs+L,EAAUD,EAAcD,IAAd,wBAAkDj5L,SAASC,SAASmC,OAApE,YAAuFC,GACvG,OAAOw2L,EAAMM,EAASjhE,EAClBC,EAA4B,CAACiiE,mBAAoBliE,GAAe,CAACmiE,KAAMniE,GACvE,CAACoiE,IAAK58K,M,kDAGuBrb,GACjC,GAAIrC,SAASC,SAASwiL,eACpB,OAAOkW,EAAKS,IAA4B,6BAE1C,IAAMc,EAAWhB,EAAWA,wBAAuBl5L,SAASC,SAASmC,OAApD,UAAqEC,GACtF,OAAOrC,SAASC,SAASC,UACf0G,KAAKgzL,oBAAoB55L,SAASC,SAASmC,OAAQ83L,GACnDvB,EAAKA,GAAGM,IAAgBiB,K,mCAGhB9iL,GAClB,OAAOA,EAAU2M,OAAOxe,QAAQ,MAAM,UAAUA,QAAQ,KAAK,OAAOA,QAAQ,KAAK,S,4FAGnC6R,G,sBACAsrB,E,uDAAO,EACP81F,E,uDAAW,IACXh8G,E,uDAAe,GACfquE,E,uDAAa,GACbpoD,E,uDAAqB,GACrBg2F,E,aACAC,E,wDACAr2H,E,uDAAiBrC,SAASC,SAASoC,e,sIAExErF,QAAQC,QAAQ,CAACpC,KAAM,M,UAEhC29H,EAA0B,SAAdphH,EAAwB,KAAOohH,EACrC+hE,EAAiBlB,EAAQmB,aAAapjL,GACtC0K,GAAS,IAAAC,oBAEXm4K,EAAWp4K,EAAO4Z,aAAmC,YAAnBr5B,IAAiC,EAAD,iBAAvD,yBACarC,SAASC,SAASmC,OAD/B,aACkDm4L,EADlD,wBAEYv6L,SAASC,SAASmC,OAF9B,aAEiDm4L,EAE5DE,E,GAAgBxB,IAAgBiB,E,IAAYx3J,E,IAAQ81F,E,IAElDkiE,EAAkB54K,EAAO4Z,aAAetkB,EAAUrW,SAAS,SAAWqW,EAAU7R,QAAQ,QAAS,IAAM6R,EACvGoM,EAAe1B,EAAOo/F,2BAA2Bw5E,IAEnD,EAAA15L,qBAA0C,OAAnBqB,GAA8C,YAAnBA,KAC/Cq2H,GAAsBl1G,GAAgBA,EAAagf,+BACpDkoD,EAAajoD,GAAyB3gB,EAAOqmE,+BAAhC,IACbrmE,EAAO4Z,cACTgvD,EAAaA,EAAWnlF,QAAQ,SAAU,KAE5Ck1L,GAAc/vG,GAGhB+vG,EAAavB,EAAWuB,EAAYp4L,GAEhCma,EAAanhB,QACfmhB,EAAaxX,SAAQ,SAAC8X,GACpB29K,IAAeA,EAAW15L,SAAS,KAAO,IAAM,KAAO,YAAc+b,KAGrE+tE,IACF4vG,IAAeA,EAAW15L,SAAS,KAAO,IAAM,KAAO,UAAY8pF,GAG1C,UAAM9hF,WAAWwD,gBAAgB+B,SACrCk2B,cACrBi2J,IAAeA,EAAW15L,SAAS,KAAO,IAAM,KAAO,mBAErD23H,IACIiiE,EAAyD,aAA5C,IAAA33L,yBAAwBX,GAAgC,MAAQ,MACnFo4L,IAAeA,EAAW15L,SAAS,KAAO,IAAM,KAAO,eAAiB45L,IAGzD36L,SAASC,SAASC,U,kCACzB0G,KAAKgzL,oBAAoB55L,SAASC,SAASmC,OAAQ83L,EAAU,CAAC19K,eAAcquE,aAAYnoD,OAAM81F,WAAUxmH,KAAM,a,6DAC9G2mL,EAAK8B,EAAYhiE,G,+BAFrB1vB,E,KAGF,UAAOthG,aACT7I,QAAQ4B,IAAIi6L,EAAa,YAAa1xF,GAEnCA,GAAaA,EAASluG,OAAQkuG,EAASluG,KAAKgE,M,wBAC/C,IAAAw3H,kBAAiBttB,EAASluG,KAAKgE,O,kBACxB,I,kCAEF,IAAA+7L,qBAAoB7xF,EAASluG,O,8JAGkE,IAA1Duc,EAA0D,uDAA9C,GAAIqf,EAA0C,uDAA/B,KAAMoiG,IAAyB,yDACtG,GAAI74H,SAASC,SAASwiL,eACpB,OAAOzlL,QAAQC,QAAQ,CAACpC,KAAM,KAEhC,IAAM0/L,EAAiBlB,EAAQmB,aAAapjL,GACxC8iL,EAAWA,wBAAuBl6L,SAASC,SAASmC,OAApD,YAAsEm4L,EAAtE,IACAM,EAAeA,wBAAuB76L,SAASC,SAASmC,OAAxD,aAA2Em4L,EAE/E,uBACEL,WAEFA,EAAWhB,EAAWgB,GACtBW,EAAe3B,EAAW2B,GAC1B,IAAIJ,EAAaA,GAAGxB,IAAgBiB,EAQpC,OAPIzjK,IACFgkK,GAA0BhkK,GAEvBoiG,IACH4hE,EAAaA,GAAcA,EAAW15L,SAAS,KAAO,IAAM,KAAO,sBAGlEf,SAASC,SAASC,UACZ0G,KAAKgzL,oBAAoB55L,SAASC,SAASmC,OAAQ83L,EAAU,CAACloL,KAAM,UAAWykB,WAAUokK,iBAEzFlC,EAAK8B,K,sCAIO/vG,EAAYsvG,GACjC,GAAIh6L,SAASC,SAASwiL,eACpB,OAAOkW,EAAKS,IAA4B,gCAE1C,IAAM0B,EAAyB/7L,OAAO2B,SAASC,KAAKI,SAAS,6BAC5B,SAA7Bf,SAASC,SAASmC,OAAqB,IAAM,GAC3CC,GAAiB,IAAAW,yBAAwBg3L,GAIzCE,GADS,IAAAn4K,kBAAiBi4K,GACRt+J,YAAP,4CAC8B17B,SAASC,SAASmC,OADhD,IAC0DC,EAD1D,4CAE0BrC,SAASC,SAASmC,OAF5C,IAEsDC,EAFtD,sBAE0Fy4L,EAF1F,SAEyHz4L,EAFzH,WAEkJqoF,EACnK,OAAO1qF,SAASC,SAASC,UACf0G,KAAKgzL,oBAAoB55L,SAASC,SAASmC,OAAQ83L,GACnDvB,EAAKA,GAAGM,IAAgBiB,K,oCAGfr/L,GACnB,OAAGmF,SAASC,SAASC,UACZlD,QAAQC,QAAQ2J,KAAKm0L,aAAa,YAAahgF,KAAK2W,UAAU,CACnE9iH,GAAI/T,EAAKghB,MACTm/K,SAAUngM,EAAKA,SAIVg+L,EAASI,IAAT,4BAAmDp+L,K,mCAI1CA,GAClB,OAAOg+L,EAASI,IAAT,+BAAsDp+L,K,wCAGtCghB,GAAyB,IAAlBo/K,EAAkB,wDAChD,OAAOpC,EAASI,IAAT,gCAAsDp9K,EAAtD,IAA+Do/K,EAAY,M,6CAGf,IAAzCjjH,EAAyC,uDAA1Bh4E,SAASC,SAASmC,OAC3D,OAAOu2L,EAAQM,IAAR,mCAAwDjhH,K,iDAGQ,IAAzCA,EAAyC,uDAA1Bh4E,SAASC,SAASmC,OAC/D,OAAIpC,SAASC,SAASwiL,eACbkW,EAAKS,IAA4B,gCAEnCP,EAASI,IAAT,gCAAsDjhH,EAAtD,O,iDAGyBA,GAChC,GAAIh4E,SAASC,SAASwiL,eACpB,OAAOkW,EAAKS,IAA4B,iCAE1C,IAAMc,EAAWA,6CAA6CliH,EAC9D,OAAOh4E,SAASC,SAASC,UACf0G,KAAKgzL,oBAAoB5hH,EAAckiH,GACvCvB,EAAKA,GAAGM,IAAgBiB,K,6CAGNliH,GAC5B,OAAIh4E,SAASC,SAASwiL,eACbkW,EAAKS,IAA4B,6BAEnCT,EAAQM,IAAR,oCAAyDjhH,K,6EAGjCA,EAAckiH,G,MAAUgB,E,uDAAY,K,8EAC/DrgM,EAAO,CACTm9E,eACAkiH,WACAiB,gCAAoBD,I,kBAEft0L,KAAKm0L,aAAa,UAAWlgM,I,sKAGZmX,EAAMnX,G,6FACR+L,KAAKw0L,gBAAgBppL,EAAMnX,G,aACzB,iBADpBwgM,E,UAEFA,EAAYtgF,KAAKC,MAAMqgF,I,kBAElB,CAACxgM,KAAMwgM,I,sIAGOrpL,EAAMnX,GAK3B,OAJgBygM,SAASC,YAAY,CACnCvpL,OACAnX,W,qCAKkBA,GAAQ,OAAO+L,KAAKm0L,aAAa,YAAalgM,K,oCAC/CA,GAAQ,OAAO+L,KAAKm0L,aAAa,WAAYlgM,K,mCAC9CA,GAAQ,OAAO+L,KAAKm0L,aAAa,WAAYlgM,K,iDAEQ,IAAzCm9E,EAAyC,uDAA1Bh4E,SAASC,SAASmC,OAC/D,OAAIpC,SAASC,SAASwiL,eACbkW,EAAKS,IAA4B,+BAEnCT,EAAQM,IAAR,6CAAkEjhH,EAAlE,O,sCAGcwjH,GACrB,OAAO7C,EAAQM,IAAR,+BAAoDuC,EAApD,kB,qCAEaxjH,EAAcgjD,GAClC,OAAO69D,EAASI,IAAT,8BAAoDjhH,EAApD,IAAqEgjD,K,wCAErD40B,GACvB,OAAOipC,EAASI,IAAT,iCAAwDrpC,K,8CAElC53E,EAAcgjD,GAC3C,OAAO69D,EAASI,IAAT,mCAAyDjhH,EAAgBgjD,K,uCAE1DA,GAAmC,IAAzBpsH,EAAyB,uDAApB,GAAIohJ,EAAgB,uDAAJ,GACjDyrC,EAAgBxC,IAAhB,2BAOJ,OANIrqL,IACF6sL,OAAiB7sL,GAEfohJ,IACFyrC,OAAiBzrC,GAEZ6oC,EAAM4C,EAAY,CAAC,KAAQzgE,M,wCAEJ,IAATpsH,EAAS,uDAAJ,GAC1B,OAAO+pL,EAAQM,IAAR,2BAAgDrqL,K,kCAEtCosH,GAAmD,IAAzChjD,EAAyC,uDAA1Bh4E,SAASC,SAASmC,OAC5D,OAAOy2L,EAASI,IAAT,kCAAwDjhH,EAAgBgjD,K,wCAExDA,GACvB,OAAO69D,EAASI,IAAT,4BAAmDj+D,K,gDAE3Bg2B,EAASC,GACxC,OAAO0nC,EAAQM,IAAR,yCAA8DjoC,EAA9D,IAAyEC,K,iDAEhDj2B,EAAUi2B,GAC1C,OAAO4nC,EAASI,IAAT,sCAA4DhoC,EAAWj2B,K,2CAEpDA,GAC1B,OAAO69D,EAASI,IAAT,gCAAuDj+D,K,4CAEnCA,GAC3B,OAAO69D,EAASI,IAAT,gCAAuDj+D,K,wCAEA,IAAzChjD,EAAyC,uDAA1Bh4E,SAASC,SAASmC,OACtD,OAAOu2L,EAAQM,IAAR,4BAAiDjhH,K,2CAE9Bg2B,GAC1B,OAAO6qF,EAASI,IAAT,4BAAmDjrF,O,eAlbzCqrF,G,2MChFrB,QACA,QAEA,Q,IACA,MACA,Q,IAKA,QACA,QACA,QACA,SAIA,Q,mDAEqCha,EAAxBA,sBAAwB,SAAC7nK,EAAkBwZ,EAAkBtZ,EAAsBvO,EAAW0K,GACzG,IAAI6nL,EAAW1qK,EAAmB,EAElC,OAAO0qK,GAHF,IA2BDC,EAAyB,SAACD,EAAU1qK,EAAkBgwE,EAAYtpF,GAClEgkL,EAAW1qK,IAEO,IAAAQ,mBAAkBwvE,EAAYtpF,GAAsB,GAC5D1S,SAAQ,SAACmkH,EAAMxxG,GACzB,GAAKA,EAAY+jL,KAAehkL,EAAqBC,KAChD,IAAAmsG,8CAA6CpsG,EAAqBC,GAAYwxG,EAAKp3F,aAAc,CACpG,IAAMT,EAAc63F,EAAKp3F,WAAW,GACpC,GAAIT,EAAa,CACf,IAAMsqK,GAAeA,EAAfA,cACHjkL,EAAY,CACX2Z,gBAGJ,UAAMzG,UAAS,IAAAmgH,yBAAwB4wD,IACvClkL,EAAuBpc,OAAO+2B,OAAO3a,EAAsBkkL,QAKnE,OAAOlkL,GA8CI2yK,GAvC+BwR,EAA/BA,6BAA+B,SAAC1yL,GAAc,MACR,UAAMJ,WAAWwO,YAA3DG,EADkD,EAClDA,qBAAsBF,EAD4B,EAC5BA,iBAC7B,GAAKA,GAAqBrO,EAAU9N,OAApC,CAGA,IAAIygM,GAAe,EACf/yE,EAAeztH,OAAO+2B,OAAO,GAAI3a,GAC/B2Z,GAAc,IAAAG,mBAAkBha,EAAkBE,GAAsB,GAI9EvO,EAAUnE,SAAQ,SAACgI,GACjB,GAAKA,EAASsK,mBACRpI,OAAOC,UAAUnC,EAASokB,iBAC1BpkB,EAASkkB,cAAiBlkB,EAASkkB,eAAiB1Z,EAAiB5I,KACtEm6G,EAAa/7G,EAASokB,iBAGvBC,EAAYrkB,EAASokB,iBAAmBC,EAAYrkB,EAASokB,gBAAgBW,WAAY,CAC3F,IAAMT,EAAcD,EAAYrkB,EAASokB,gBAAgBW,WAAWrf,MAAK,SAAAynK,GAAA,OAAMA,EAAGvrK,KAAO5B,EAASsK,qBAE9Fga,IACFy3F,EAAa/7G,EAASokB,gBAAkB,CACtCE,gBAEG,IAAAkyF,mBAAkB,CAACphG,KAAMpV,EAASC,aAAcqkB,KACnDy3F,EAAa/7G,EAASokB,gBAAgBvZ,gBAAkB7K,EAASC,YACjE87G,EAAa/7G,EAASokB,gBAAgBlkB,OAASF,EAASE,QAE1D4uL,GAAe,OAIjBA,GAEF,UAAMjxK,UAAS,IAAAmgH,yBAAwBjiB,GAAc,EAAMvxG,MAI7B6yK,EAArBA,mBAAqB,SAACrpF,EAAY06F,EAAU9nL,GAAyD,IAA7CyD,EAA6C,uDAA7B,KAAM0kL,IAAuB,2DAC7E,UAAMhzL,WAAlC+K,EADyG,EACzGA,YAAayD,EAD4F,EAC5FA,YACb0Z,EAAsC1Z,EAAtC0Z,iBAAkBD,EAAoBzZ,EAApByZ,iBAEpBgwE,IACHA,GAAa,IAAAmgB,kCAGf,IAAI4H,EAAe,GACbizE,EAA4B/qK,EAAiBve,MAAK,SAAAupL,GACtD,OAAQA,EAAaroL,aAAeE,EAAYD,kBAAsBooL,EAAaj6E,eAAiBhhB,EAAWpyF,KAC1G,IAAA+xG,wBAAuBs7E,MAQ9B,GANID,IACFjzE,EAAeztH,OAAO+2B,OAAO,GAAI2pK,EAA0BtkL,sBAC3DqxG,EAAe4yE,EAAuBD,EAAU1qK,EAAkBgwE,EAAY+nB,IAEhF,UAAMl+F,UAAS,IAAAw/G,qBAAoBrpC,EAAYptF,IAC/C,UAAMiX,UAAS,IAAAmgH,yBAAwBjiB,GAAc,EAAM/nB,IACvD9xF,OAAOC,UAAUusL,GAAW,CAC9B,GAAIrkL,EAAe,QACI,IAAAyxG,gCAA+B9nB,EAAY+nB,EAAc1xG,GAAvE4xG,EADU,EACVA,WACHA,GAAeA,EAAWtxG,YAAc+jL,IAC1CA,EAAWzyE,EAAWtxG,WAG1B,UAAMkT,UAAS,IAAA2/G,qBAAoBkxD,SAKlB,KAHjBA,EAAWM,GAA6B9sL,OAAOC,UAAU6sL,EAA0BlxD,iBAC/EkxD,EAA0BlxD,gBAC1B/hB,EAAeztH,OAAOmc,KAAKsxG,GAAc1tH,OAAS,IACX,IAArB21B,GACpB,UAAMnG,UAAS,IAAA2/G,qBAAoB,IAGvC,GAAKuxD,EAAL,CAGA,IAAMG,EAAgBR,EAAW,EAC3BS,EAAU,cAAgB,UAAKx6E,iBAAiB3gB,EAAW3jG,MAAQ,IAAM6+L,EACzEE,EAAcr9L,OAAO2B,SAASwb,KAAKvX,MAAM,KAAK,GAC/Cy3L,GAAgBA,IAAgBD,GACnC,EAAArjK,YAAYn9B,KAAKwgM,MAImBE,EAA3BA,yBAA2B,WAEtC,IAAIhF,GAAU,IAAAiF,cAST75K,GARY,IAAA85K,iBAQW76E,OAAvBj/F,SAiEL,MAAO,CAAC08J,sBA/DsB,SAACuc,EAAUc,GAAoB,MAEF,UAAMzzL,WAAWwO,YAAnEC,EAFoD,EAEpDA,iBAAkBwZ,EAFkC,EAElCA,iBAAkB+vE,EAFgB,EAEhBA,WACtCrpF,EAAwB,UAAM3O,WAAWwO,YAAzCG,qBAEC+yH,EAAoB+xD,GAAmBhlL,EAE7CE,EAAuBikL,EAAuBD,EAAU1qK,EAAkBy5G,EAAmB/yH,GAE7F,IAAM4sG,GAAgB,IAAAnjB,kBAAiBspC,EAAmBixD,EAAUhkL,GAEpE,GAAIsZ,GAAoB,IAAMszF,EAAcjpH,OAA5C,CACE,IAAMohM,EAAqB17F,EAAWx9E,WAAU,SAAAy9E,GAAA,OAAcA,EAAWpyF,KAAO67H,EAAkB77H,MAElG,IAAkB,IAAd8sL,GAAwC,IAArB1qK,EAAwB,CAC7C,IAAM0rK,EAAoB37F,EAAWruF,MAAK,SAACsuF,EAAYi6E,GACrD,OAAQj6E,EAAWpyF,KAAO67H,EAAkB77H,IAAQqsK,EAAkBwhB,KAOxE,YALIC,EACFrS,EAAmBqS,GAEnBrF,EAAQ17L,KAAK,EAAAwgB,OAAOgwF,cAKxB,IAAMwwF,EAAoB57F,EAAWruF,MAAK,SAACsuF,EAAYi6E,GACrD,OAAQj6E,EAAWpyF,KAAO67H,EAAkB77H,IAAQqsK,EAAkBwhB,KAEpEE,EACFtS,EAAmBsS,GAEnBtF,EAAQ17L,KAAK,EAAAwgB,OAAOkwF,mBAQxB,GAFA,UAAMxhF,UAAS,IAAA2/G,qBAAoBkxD,KAEnC,eAQKj5K,IACHA,EAAW,UAAKk/F,iBAAiB8oB,EAAkBptI,OAGrD,IAAMi0B,EAAcgzF,EAAc,GAClC,GAAKhzF,EAAL,CAIA,IAAMsrK,EAAU,UAAKj7E,iBAAiBrwF,EAAYpa,mBAAqBoa,EAAYla,WAAa,IAE1F8kL,EAAgBR,EAAW,EACjCrE,EAAQ17L,KAAK,cAAgB8mB,EAAW,IAAMy5K,GAAiBU,EAAU,IAAMA,EAAU,UANvFh+L,QAAQskC,KAAK,kE,kHC5JJ,SAAUm1B,EAAM8G,GAAmB,WAAfh/D,EAAe,uDAAN,KAEtC0L,EAAOjF,KAET+G,EAAQ,CACNqhD,SAAU,GACVtB,WAAW,EACXC,kBAAmB,KACnBsE,YAAY,EACZ4qI,UAAU,EACVC,gBAAgB,EAChBC,UAAU,EACVC,aAAa,EACblqI,eAAe,EACfmqI,oBAAoB,EACpBC,qBAAqB,EACrB7zB,8BAA8B,EAC9B8zB,gBAAgB,EAChBC,OAAQ,KACRC,iBAAkB,KAClBC,kBAAmB,KACnBC,8BAA+B,KAC/BC,wBAAyB,KACzBC,oBAAqB,KACrBC,iBAAkB,EAClBC,eAAgB,GAChBC,eAAgB,GAChBC,cAAe,CACbC,oBAAoB,EACpBC,cAAc,GAEhBC,kBAAmB,EACnBC,gBAAiB,GACjBC,iCAAiC,EACjCC,iBAAiB,EACjBC,aAAc,MAEhBh6D,EAAS,CACPi6D,gBAAiB,UACjBC,iBAAkB,GAClBC,aAAc,EACdC,cAAe,EACfC,wBAAyB,EACzBC,cAAe,GAEjBC,EAAoB,KACpBC,EAAuB,KACvBC,EAAqB,KACrBC,EAA0B,KAC1BtgE,EAAgB,GAqBlB,SAASv0C,EAAUnsF,GAASqC,EAASrC,EAnBrC8I,KAAKgI,IAAK,eACVhI,KAAKyxD,KAAOA,EACZzxD,KAAKu4D,GAAKA,EACVv4D,KAAK2jD,IAAM,KACX3jD,KAAKi2D,cAAgB,KACrBj2D,KAAKo4D,QAAU,KACfp4D,KAAKizD,WAAa,KAClBjzD,KAAK2rD,eAAiB,KACtB3rD,KAAKgzI,eAAiB,KACtBhzI,KAAK0iK,iBAAmB,KACxB1iK,KAAKogK,aAAe,KACpBpgK,KAAKm4L,aAAe,KACpBn4L,KAAKo4L,aAAe,KACpBp4L,KAAKmvD,QAAS,EACdnvD,KAAKq4L,MAAQ,IAAI,EAAJ,QAEbr4L,KAAKs4L,yBAA2B,IAAI,EAAJ,QAKhCt4L,KAAKU,UAAY,WAAa,OAAOnH,GACrCyG,KAAKu4L,iBAAmB,WAAQ,OAAO,EAAKtiI,eAC5Cj2D,KAAK0rD,cAAgB,WAAa,OAAO3kD,EAAMqvL,aAC/Cp2L,KAAKw4L,WAAa,WAAa,OAAOzxL,EAAMkvL,UAC5Cj2L,KAAKwiK,wBAA0B,WAAQ,OAAOz7J,EAAMuvL,qBACpDt2L,KAAKyiK,6BAA+B,WAAQ,OAAO17J,EAAM07J,8BACzDziK,KAAKy4L,iBAAmB,WAAQ,OAAO1xL,EAAMmvL,gBAC7Cl2L,KAAKksD,cAAgB,WAAa,OAAOnlD,EAAMmlD,eAC/ClsD,KAAKq2L,mBAAqB,WAAa,OAAOtvL,EAAMsvL,oBACpDr2L,KAAK04L,aAAe,WAAa,OAAO3xL,EAAM0vL,kBAC9Cz2L,KAAK24L,kBAAoB,WAEvB,OADiBp/L,EAAOigF,YAAYv0E,GACpBinD,iBAElBlsD,KAAK44L,gBAAkB,WACrB,IAAM/pI,EAAmB,UAAUgD,cAAc,GACjD,GAAIhD,EACF,OAAO,IAAA8qB,aAAY9qB,EAAiBO,YAIxCpvD,KAAK64L,2BAA6B,WAChC,IAAMhqI,EAAmB,UAAUgD,cAAc,GACjD,GAAIhD,EACF,OAAO,IAAA6qB,oBAAmB7qB,EAAiBO,YAG/CpvD,KAAKk3L,mBAAqB,WACxB,OAAOnwL,EAAMkwL,cAAcC,oBAG7Bl3L,KAAK84L,mBAAqB,WACxB,IAAMjqI,EAAmB,UAAUgD,cAAc,GAGjD,OAFe,IAAA12C,oBAEDm2F,eAAeziD,EAAiBO,WAAW,IAE3DpvD,KAAKqrD,WAAa,WAAiC,IAAhC0tI,EAAgC,wDACjD,QAAKA,IAAuB,EAAKtnI,KAAKpG,eAG/BtkD,EAAMskD,YAEfrrD,KAAK+/J,gBAAkB,WAAa,OAAO//J,KAAKizD,WAAWlsD,MAAMskD,YACjErrD,KAAKigK,qBAAuB,WAAa,OAAOjgK,KAAKizD,WAAWlsD,MAAMk5J,sBACtEjgK,KAAKk7J,UAAY,WAAa,OAAO19B,GACrCx9H,KAAKg5L,UAAY,WAAQ,OAAOjyL,EAAMyvL,QACtCx2L,KAAKi5L,UAAY,SAAC/hM,GAAY6P,EAAMyvL,OAASt/L,GAC7C8I,KAAKm0D,oBAAsB,WAAQ,OAAOptD,EAAM+vL,kBAChD92L,KAAKk5L,oBAAsB,SAAChiM,GAE1B,IAAMiiM,GAAqBA,EAArBA,cAAyB,UAAqB1rI,0BAA0B,IAC9E0rI,EAAmBt5L,OAAS3I,EAC5B,UAAqBkiM,6BAA6BD,GAElDpyL,EAAM+vL,iBAAmB5/L,EACzB,EAAKkhE,QAAQihI,qBAAqBtyL,EAAMgwL,eAAgBhwL,EAAMiwL,iBAEhEh3L,KAAKs5L,YAAc,WAAQ,OAAOvyL,EAAM0vL,kBACxCz2L,KAAKu5L,YAAc,SAACnqI,GAAgBroD,EAAM0vL,iBAAmBrnI,GAC7DpvD,KAAKw5L,eAAiB,WAAQ,OAAOzyL,EAAM2vL,mBAC3C12L,KAAKy5L,eAAiB,SAACriL,GAAUrQ,EAAM2vL,kBAAoBt/K,GAC3DpX,KAAK05L,qBAAuB,WAAQ,OAAO3yL,EAAM6vL,yBACjD52L,KAAK25L,qBAAuB,SAACviL,GAAUrQ,EAAM6vL,wBAA0Bx/K,GACvEpX,KAAK45L,yBAA2B,WAAQ,OAAO7yL,EAAM4vL,+BACrD32L,KAAK65L,yBAA2B,SAACziL,GAAUrQ,EAAM4vL,8BAAgCv/K,GACjFpX,KAAK85L,uBAAyB,WAAQ,OAAO,UAAqBrsI,0BAA0B,GAAMopI,qBAClG72L,KAAKgyI,uBAAyB,SAAC5iF,GAC7BroD,EAAM8vL,oBAAsBznI,EAG5B,IAAM+pI,GAAqBA,EAArBA,cAAyB,UAAqB1rI,0BAA0B,IAC9E0rI,EAAmBtC,oBAAsBznI,EACzC,UAAqBgqI,6BAA6BD,GAGlD,UAAcxgI,qBAAqBohI,6BAA6B,EAAM3qI,IAGxEpvD,KAAKmC,SAAW,WAAQ,OAAO4E,GAC/B/G,KAAKg6L,eAAiB,SAACl/E,GACrB/zG,mBAAYA,EAAU+zG,IAExB96G,KAAKi6L,kBAAoB,WACvB,MAAO,CACLxoI,KAAM,CACJnV,UAAWr3C,EAAKwsD,KAAKnV,UACrB9H,MAAOvvC,EAAKwsD,KAAKjd,MACjBp6B,EAAGnV,EAAKwsD,KAAKr3C,EACbC,EAAGpV,EAAKwsD,KAAKp3C,EACb4pJ,eAAgBh/J,EAAKwsD,KAAKwyG,eAC1BhoH,OAAQh3C,EAAKwsD,KAAKxV,QAEpBsc,GAAI,CACFjc,UAAWr3C,EAAKszD,GAAGjc,UACnB9H,MAAOvvC,EAAKszD,GAAG/jB,MACfp6B,EAAGnV,EAAKszD,GAAGn+C,EACXC,EAAGpV,EAAKszD,GAAGl+C,EACX4pJ,eAAgBh/J,EAAKszD,GAAG0rG,eACxBhoH,OAAQh3C,EAAKszD,GAAGtc,UAItBj8C,KAAKmpK,eAAiB,WACpB,OAAO,IAAA9wC,oBAAmB,EAAK5mE,KAAM,EAAK8G,KAE5Cv4D,KAAKk6L,iBAAmB,WACtB,IAAIC,GAAqB,EACzB,IAAK,IAAMC,KAAmBrzL,EAAMkwL,cAC9BlwL,EAAMkwL,cAAcmD,KACtBD,GAAqB,GAGzB,OAAOpzL,EAAMkvL,UACRlvL,EAAMmvL,gBACNnvL,EAAMovL,UACNpvL,EAAMqvL,aACNrvL,EAAMmlD,eACNnlD,EAAMsvL,oBACNr2L,KAAKwiK,2BACLxiK,KAAKyiK,gCACL17J,EAAMyvL,QACN2D,GAEPn6L,KAAKq6L,iBAAmB,SAAU3rI,GAChCzpD,EAAKq1L,cAAgB5rI,GAEvB1uD,KAAKu2L,eAAiB,WAAQ,OAAOxvL,EAAMwvL,gBAC3Cv2L,KAAKu6L,YAAc,SAACrjM,GAAY6P,EAAMwvL,eAAiBr/L,GACvD8I,KAAKw6L,iBAAmB,SAACtjM,GAAY6P,EAAMwwL,gBAAkBrgM,GAG7D8I,KAAK89J,wBAA0B,SAAC9xG,EAAOyuI,GACrC,IACM7qC,EADQ,UAAMztJ,WACSwH,cAAcimJ,eACvCh7E,EAAS,EAAKwjH,aAAe,EAAKA,aAAe,EAAKxtI,YACtD7I,EAAQ,UAAOA,MACf24I,EAAQ,EACRC,EAAQ,EAaZ,OAZK/qC,GAAkB6qC,IAAa,EAAAtiJ,UAAUlY,QAIxC+rB,EAAMwuE,SACRkgE,EAAQ1uI,EAAMwuE,QAAQpgH,EACtBugL,EAAQ3uI,EAAMwuE,QAAQngH,GAEtBriB,QAAQC,MAAM,8BAPhByiM,EAAQ1uI,EAAM1E,IAAIltC,EAClBugL,EAAQ3uI,EAAM1E,IAAIjtC,GAUb,CACLD,EAAIsgL,EAAQ34I,EAAS6yB,EAAOx6D,EAC5BC,EAAIsgL,EAAQ54I,EAAS6yB,EAAOv6D,IAYhC,IAAMugL,GAAe,WACnB,IAAIC,EAAe,CACjBppI,KAAM,KACN8G,GAAI,KACJtS,OAAQ,GACRoF,WAAYtkD,EAAMskD,YAGpBwvI,EAAappI,KAAOxsD,EAAKwsD,KAAKlH,gBAC9BswI,EAAatiI,GAAKtzD,EAAKszD,GAAGhO,gBAC1B,IAAI6tE,GAAkB,IAAAC,oBAAmB,EAAK5mE,KAAM,EAAK8G,IACzD,GAAI6/D,GAAmB,EAAAviD,YAAYE,YAAcqiD,GAAmB,EAAAviD,YAAYC,SAAU,CACxF,GAAI7wE,EAAKwsD,KAAKr3C,EAAInV,EAAKszD,GAAGn+C,EAAG,CAC3B,IAAIA,EAAIygL,EAAappI,KAAKr3C,EAC1BygL,EAAappI,KAAKr3C,EAAIygL,EAAatiI,GAAGn+C,EACtCygL,EAAatiI,GAAGn+C,EAAIA,EAEtB,GAAInV,EAAKwsD,KAAKp3C,EAAIpV,EAAKszD,GAAGl+C,EAAG,CAC3B,IAAIA,EAAIwgL,EAAappI,KAAKp3C,EAC1BwgL,EAAappI,KAAKp3C,EAAIwgL,EAAatiI,GAAGl+C,EACtCwgL,EAAatiI,GAAGl+C,EAAIA,GAIxB,IAAI3hB,EAAImiM,EAAappI,KACjBt6D,EAAI0jM,EAAatiI,GAEnBuiI,EAAe,EAYjB,OAAOljE,EAAc/hD,aACnB,IAAK,aACgC,SAA/B+hD,EAAcwE,cAChB0+D,EAAgB3jM,EAAEijB,EAAI1hB,EAAEiH,MAAM,GAAMjH,EAAE0hB,EAAI1hB,EAAEiH,MAAM,GAAM,GAAK,GAAK,EAClEk7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAI1hB,EAAEiH,MAAM,EAAIm7L,EAAczgL,EAAG3hB,EAAE2hB,EAjB3C,EAER,KAgBfwgL,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAI1hB,EAAEiH,MAAM,EAAIm7L,EAAczgL,EAAGljB,EAAEkjB,EAlB3C,EAER,KAiBfwgL,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAI1hB,EAAEiH,MAAM,EAAIm7L,EAAczgL,EAAGljB,EAAEkjB,EAAIljB,EAAE0I,OAnBjD,EAER,KAkBfg7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAI1hB,EAAEiH,MAAM,EAAIm7L,EAAczgL,EAAG3hB,EAAE2hB,EAAI3hB,EAAEmH,OApBjD,EAER,MAmByB,SAA/B+3H,EAAcwE,eACvB0+D,EAAgB3jM,EAAEijB,EAAI1hB,EAAEiH,MAAM,GAAMjH,EAAE0hB,EAAI1hB,EAAEiH,MAAM,GAAM,GAAK,GAAK,EAClEk7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAI1hB,EAAEiH,MAAM,EAAIm7L,EAAczgL,EAAG3hB,EAAE2hB,EAvB3C,EAER,KAsBfwgL,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAI1hB,EAAEiH,MAAM,EAAIm7L,EAAczgL,EAAGljB,EAAEkjB,EAxB3C,EAER,KAuBfwgL,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAI1hB,EAAEiH,MAAM,EAAIm7L,EAAczgL,EAAGljB,EAAEkjB,EAAIljB,EAAE0I,OAzBjD,EAER,KAwBfg7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAI1hB,EAAEiH,MAAM,EAAIm7L,EAAczgL,EAAG3hB,EAAE2hB,EAAI3hB,EAAEmH,OA1BjD,EAER,MA0BjB,MAEF,IAAK,WACgC,UAA/B+3H,EAAcwE,cAChB0+D,EAAgB3jM,EAAEkjB,EAAIljB,EAAE0I,OAAO,GAAMnH,EAAE2hB,EAAIljB,EAAE0I,OAAO,GAAM,GAAK,GAAK,EACpEg7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAjCR,EAER,GA+B+DC,EAAG3hB,EAAE2hB,EAAIljB,EAAE0I,OAAO,EAAIi7L,IACpGD,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAI1hB,EAAEiH,MAlCd,EAER,GAgCyE0a,EAAG3hB,EAAE2hB,EAAIljB,EAAE0I,OAAO,EAAIi7L,IAC9GD,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAIjjB,EAAEwI,MAnCd,EAER,GAiCyE0a,EAAGljB,EAAEkjB,EAAIljB,EAAE0I,OAAO,EAAIi7L,IAC9GD,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EApCR,EAER,GAkC+DC,EAAGljB,EAAEkjB,EAAIljB,EAAE0I,OAAO,EAAIi7L,KAC5D,UAA/BljE,EAAcwE,eACvB0+D,EAAgB3jM,EAAEkjB,EAAIljB,EAAE0I,OAAO,GAAMnH,EAAE2hB,EAAIljB,EAAE0I,OAAO,GAAM,GAAK,GAAK,EACpEg7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAvCR,EAER,GAqC+DC,EAAG3hB,EAAE2hB,EAAIljB,EAAE0I,OAAO,EAAIi7L,IACpGD,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAI1hB,EAAEiH,MAxCd,EAER,GAsCyE0a,EAAG3hB,EAAE2hB,EAAIljB,EAAE0I,OAAO,EAAIi7L,IAC9GD,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAIjjB,EAAEwI,MAzCd,EAER,GAuCyE0a,EAAGljB,EAAEkjB,EAAIljB,EAAE0I,OAAO,EAAIi7L,IAC9GD,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EA1CR,EAER,GAwC+DC,EAAGljB,EAAEkjB,EAAIljB,EAAE0I,OAAO,EAAIi7L,KAEtG,MAEF,IAAK,YACL,IAAK,YACHD,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAGC,EAAG3hB,EAAE2hB,IACvCwgL,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAGC,EAAGljB,EAAEkjB,IACvCwgL,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAIjjB,EAAEwI,MAAO0a,EAAGljB,EAAEkjB,EAAIljB,EAAE0I,SACvDg7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAI1hB,EAAEiH,MAAO0a,EAAG3hB,EAAE2hB,EAAI3hB,EAAEmH,SACzD,MACA,IAAK,YACL,IAAK,YACHg7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAI1hB,EAAEiH,MAAO0a,EAAG3hB,EAAE2hB,IACjDwgL,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAIjjB,EAAEwI,MAAO0a,EAAGljB,EAAEkjB,IACjDwgL,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAGjjB,EAAEijB,EAAGC,EAAGljB,EAAEkjB,EAAIljB,EAAE0I,SAC7Cg7L,EAAa50I,OAAOlxD,KAAK,CAACqlB,EAAG1hB,EAAE0hB,EAAGC,EAAG3hB,EAAE2hB,EAAI3hB,EAAEmH,SAGjD,OAAOg7L,GA4ET,SAASE,GAAiB3yI,GAIxB,IAHA,IAAI4yI,EAAQJ,KACR/2B,EAAQ,GACRC,EAAQ,GACJvvK,EAAI,EAAGA,EAAIymM,EAAM/0I,OAAOxxD,OAAQF,IACtCsvK,EAAM9uK,KAAKimM,EAAM/0I,OAAO1xD,GAAG6lB,GAC3B0pJ,EAAM/uK,KAAKimM,EAAM/0I,OAAO1xD,GAAG8lB,GAI7B,OAFAtT,EAAMskD,YAAa,aAAO2vI,EAAM/0I,OAAOxxD,OAAQovK,EAAOC,EAAO17G,EAAShuC,EAAGguC,EAAS/tC,GAE3EtT,EAAMskD,YAActkD,EAAM+/C,UAiBnC,SAAS0B,GAAUJ,EAAUjyD,GAGvB4Q,EAAM+/C,YACR//C,EAAM+/C,WAAY,EAClB//C,EAAMggD,kBAAoB,KAC1B9hD,EAAKwsD,KAAKxM,aACVhgD,EAAKszD,GAAGtT,cAlBZjlD,KAAKi7L,mBAAqB,SAAC7yI,GAEzB,OADA,EAAK03G,mBAAmB13G,GACjBrhD,EAAMskD,YAActkD,EAAM+/C,WAEnC9mD,KAAK8/J,mBAAqB,WAA+C,IAA9C13G,EAA8C,uDAAnC,UAAiB+jC,cACrDplF,EAAMskD,YAAa,IAAAkzB,sBAAqBn2B,GAAU,IAAA8yI,uBAAsB,EAAKzpI,KAAM,EAAK8G,GAAIilE,EAAOs6D,cAAuC,GAAvBt6D,EAAOs6D,iBAE5H93L,KAAKm7L,gBAAkB,WACrB,OAAOp0L,EAAMskD,YAaf,IAAMlD,GAAc,SAACC,EAAUjyD,GAE7B,IACM0xG,EADa,UAAM1lG,WACOytD,cAAci4C,aAE9C,IAAM,UAAalE,YAAY3pG,QAAQ,aAAe,GACjD,UAAa2pG,YAAY3pG,QAAQ,aAAe,GAChD,UAAa2pG,YAAY3pG,QAAQ,cAAgB,GACjD,UAAa2pG,YAAY3pG,QAAQ,cAAgB,IACjD+M,EAAMskD,WAKT,OAHAtkD,EAAM+/C,WAAY,EAClB//C,EAAMqwL,mBAAoB,IAAA9lH,kBAAiBrsE,EAAKwsD,KAAMxsD,EAAKszD,IAC3DxxD,EAAMggD,kBAAoBqB,GACnB,EAIT,GAAIy/C,IAAiB,EAAAh0D,0BAA0BunJ,aAAer0L,EAAMskD,WAAY,CAC9E,IAAMgwI,GAAkB,IAAAnmH,yBAAwB9sB,EAAShuC,EAAGguC,EAAS/tC,EAAG,EAAK3Z,aACvE46L,EAAYr2L,EAAKwsD,KACjB8pI,EAAUt2L,EAAKszD,GACfi/H,GAAe,IAAAgE,uBAAsBF,EAAWC,EAASF,GAEzDzhJ,EAAQ,EAAKl5C,YAMnB,OALIk5C,EAAMygH,cAAc5lK,QAAU,GAChCmlD,EAAMygH,cAAcnlK,QAEtB0kD,EAAMygH,cAActlK,KAAKyiM,IAElB,EAGT,OAAO,GAEH7uI,GAAc,SAACP,EAAUjyD,GAM7B,IAAMslM,GAAY,IAAAvhI,sBACZogE,EAAa,UAAUA,aAE7B,GADwBmhE,GAAanhE,EAAa,EAAK2gE,mBAAmB7yI,GAAY2yI,GAAiB3yI,GAClF,CACnB,GAAI,UAAUmB,kBAAoBtkD,EAAKwsD,KAAK43G,iBAAmBpkK,EAAKszD,GAAG8wG,eAAgB,CAMrF,OALItiK,EAAM+/C,WACR,EAAK40I,SAAStzI,GAEhB,UAAai7C,iBAAiB9pG,GAC9B,UAAa+uD,eACN,IAAA+vE,oBAAmB,EAAK5mE,KAAM,EAAK8G,KACxC,KAAK,EAAAsd,YAAYE,WACf,UAAaxtB,UAAU,WAAYtjD,GACnC,MACF,KAAK,EAAA4wE,YAAYC,SACf,UAAavtB,UAAU,WAAYtjD,GACnC,MACF,KAAK,EAAA4wE,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,UAAa1tB,UAAU,YAAatjD,GACpC,MACF,KAAK,EAAA4wE,YAAYK,UACjB,KAAK,EAAAL,YAAYM,UACf,UAAa5tB,UAAU,YAAatjD,GAGxC,OAAO8B,EAAM+/C,UAGf,GAAI,UAAOd,UAAUE,OAASn/C,EAAMskD,WAGlC,OAFA,UAAag4C,iBAAiB9pG,GAC9B,UAAa+uD,eACN,EAGT,GAAI,EAAK4xI,mBACP,OAAO,EAUX,OANA,EAAKjnI,WAAW0oI,uBAAuBvzI,GAEnC,UAAUgD,gBAGd,UAAanC,YAAYhkD,IAClB,GAET,SAAS+7F,KACPj6F,EAAMskD,YAAa,EACnBtkD,EAAM+/C,WAAY,EAIpB9mD,KAAKi/J,OAAS,WACZ,MAAO,CACLj3J,GAAI,EAAKA,GACTypD,KAAM,EAAKA,KAAKwtG,SAChB1mG,GAAI,EAAKA,GAAG0mG,SACZxqH,QAAS,EAAKkX,eAAiB,EAAKA,eAAeszG,SAAW,KAE9DtqH,QAAS,EAAKq+F,eAAiB,EAAKA,eAAeisB,SAAW,KAC9DpkH,aAAc,EAAK+gJ,oBAAsB,EAAKA,oBAAoB38B,SAAW,KAC7E48B,cAAe,EAAKn5B,iBAAmB,EAAKA,iBAAiBzD,SAAW,KACxEt+H,MAAO,EAAKy/H,aAAe,EAAKA,aAAanB,SAAW,KACxDk5B,aAAc,EAAKA,aAAe,EAAKA,aAAal5B,SAAW,KAC/D7mG,QAAS,EAAKA,QAAU,EAAKA,QAAQ6mG,SAAW,KAChDhsG,WAAY,EAAKA,WAAa,EAAKA,WAAWgsG,SAAW,KACzDl4J,MAAO,UAAEgkD,MAAMhkD,KAInB/G,KAAKkuD,OAAS,SAACh3D,EAAO4kM,GACpB/0L,EAAQ7P,EAAM6P,MACdgxL,EAAoB7gM,EAAMkhE,QAC1B4/H,EAAuB9gM,EAAM+7D,WAE7B,IADA,IAAI8oI,EAAY,KAAMC,EAAU,KACvBznM,EAAI,EAAGA,EAAIunM,EAASrnM,UAAYsnM,IAAaC,GAAUznM,IACzDwnM,GAAaD,EAASvnM,GAAGk9D,KAAKzpD,IAAM9Q,EAAMu6D,KAAKzpD,GAExC+zL,GAAaD,EAASvnM,GAAGgkE,GAAGvwD,IAAM9Q,EAAMu6D,KAAKzpD,GAE7Cg0L,GAAWF,EAASvnM,GAAGgkE,GAAGvwD,IAAM9Q,EAAMqhE,GAAGvwD,GAEzCg0L,GAAWF,EAASvnM,GAAGk9D,KAAKzpD,IAAM9Q,EAAMqhE,GAAGvwD,KACrDg0L,EAAUF,EAASvnM,GAAGk9D,MAFtBuqI,EAAUF,EAASvnM,GAAGgkE,GAFtBwjI,EAAYD,EAASvnM,GAAGgkE,GAFxBwjI,EAAYD,EAASvnM,GAAGk9D,KAS5BxsD,EAAK+C,GAAK9Q,EAAM8Q,GACZ+zL,EACF92L,EAAKwsD,KAAOsqI,GAEZ92L,EAAKwsD,KAAO,IAAI,EAAJ,QACZxsD,EAAKwsD,KAAKvD,OAAOh3D,EAAMu6D,OAErBuqI,EACF/2L,EAAKszD,GAAKyjI,GAEV/2L,EAAKszD,GAAK,IAAI,EAAJ,QACVtzD,EAAKszD,GAAGrK,OAAOh3D,EAAMqhE,KAEnBrhE,EAAMu9C,UAERxvC,EAAK0mD,eAAiB,IAAI,EAAJ,QACtB1mD,EAAK0mD,eAAeuC,OAAOjpD,EAAM/N,EAAMu9C,SACvC1tC,EAAMqvL,aAAc,GAElBl/L,EAAMy9C,UAE4B,OAAhC,UAAUoT,oBACZ,UAAUA,kBAAoB,IAAI,EAAJ,SAEhC,EAAKirF,eAAiB,UAAUjrF,kBAAkBk0I,qBAAqB,GACvE,EAAKjpD,eAAe9kF,OAAOjpD,EAAM/N,EAAMy9C,SACvCsjJ,EAAqB/gM,EAAMy9C,QAC3B5tC,EAAMmlD,eAAgB,EACtB,UAAMjoC,UAAS,IAAAi4K,mBAAkB,EAAKlpD,kBAEpC97I,EAAM2jD,eAEiC,OAArC,UAAUmN,yBACZ,UAAUA,uBAAyB,IAAI,EAAJ,SAErC,EAAK4zI,oBAAsB,UAAU5zI,uBAAuBm0I,0BAA0B,GACtF,EAAKP,oBAAoB1tI,OAAO,EAAMh3D,EAAM2jD,cAC5Cq9I,EAA0BhhM,EAAM2jD,aAChC9zC,EAAMsvL,oBAAqB,EAC3B,UAAMpyK,UAAS,IAAA+0C,aAAY,EAAAzc,cAAcG,qBAAsB,EAAKk/I,uBAElE1kM,EAAMypC,QAER17B,EAAKm7J,aAAe,IAAI,EAAJ,QACpBn7J,EAAKm7J,aAAapqG,KAAK/wD,EAAM/N,EAAMypC,MAAMy7J,UAAWllM,EAAMypC,MAAMr6B,QAChErB,EAAKm7J,aAAalyG,OAAOh3D,EAAMypC,QAE7BzpC,EAAMihM,eAERlzL,EAAKkzL,aAAe,IAAI,EAAJ,QACpBlzL,EAAKkzL,aAAaniI,KAAK/wD,EAAM/N,EAAMihM,aAAapxL,MAAMq1L,UAAWllM,EAAMihM,aAAapxL,MAAMT,QAC1FrB,EAAKkzL,aAAajqI,OAAOh3D,EAAMihM,eAE7BjhM,EAAM2kM,gBACR,EAAKn5B,iBAAmB,UAAqB9lH,UAAUy/I,uBAAuB,EAAMnlM,EAAM2kM,iBAG9F77L,KAAKg2D,KAAO,SAACz8D,EAAQ+iM,GACnBA,EAAOA,IAAQ,EACfj5G,EAAU9pF,GACV,EAAK05D,WAAa,IAAI,EAAJ,QAAe,GAC7B+kI,GACF,EAAK/kI,WAAW/E,OAAO8pI,GAEpBsE,IACH,EAAKhyB,aACLrlK,EAAKwsD,KAAKuE,KAAK/wD,IAEZq3L,GAAS/iM,EAAO28I,cAAgB38I,EAAO+M,SAAW,EAAAipC,cAAc6B,SACnEnsC,EAAKmzD,QAAU,IAAI,EAAJ,QACfnzD,EAAKmzD,QAAQpC,KAAK/wD,GACd8yL,GACF9yL,EAAKmzD,QAAQlK,OAAO6pI,IAGpB,EAAK/kD,gBACP,EAAKA,eAAeh9E,KAAKiiI,GAKvB,EAAK2D,qBACP,EAAKA,oBAAoB5lI,KAAKkiI,GAE5B,EAAK11B,2BACP,EAAKpqG,QAAQmkI,oBAAoB,EAAA1/I,0BAA0BD,UAAW,EAAAD,0BAA0BC,WAGlGg7E,EAAgBr+H,EAAOs+H,kBAAkB5yH,GAErCA,EAAKu3L,uBACPv3L,EAAKwsD,KAAKjd,MAAQvvC,EAAKu3L,qBAAqB/qI,KAAKjd,MACjDvvC,EAAKwsD,KAAKnV,UAAYr3C,EAAKu3L,qBAAqB/qI,KAAKnV,UACrDr3C,EAAKwsD,KAAKr3C,EAAInV,EAAKu3L,qBAAqB/qI,KAAKr3C,EAC7CnV,EAAKwsD,KAAKp3C,EAAIpV,EAAKu3L,qBAAqB/qI,KAAKp3C,EAC7CpV,EAAKwsD,KAAKwyG,eAAiBh/J,EAAKu3L,qBAAqB/qI,KAAKwyG,eAC1Dh/J,EAAKwsD,KAAKxV,OAASh3C,EAAKu3L,qBAAqB/qI,KAAKxV,OAElDh3C,EAAKszD,GAAG/jB,MAAQvvC,EAAKu3L,qBAAqBjkI,GAAG/jB,MAC7CvvC,EAAKszD,GAAGjc,UAAYr3C,EAAKu3L,qBAAqBjkI,GAAGjc,UACjDr3C,EAAKszD,GAAGn+C,EAAInV,EAAKu3L,qBAAqBjkI,GAAGn+C,EACzCnV,EAAKszD,GAAGl+C,EAAIpV,EAAKu3L,qBAAqBjkI,GAAGl+C,EACzCpV,EAAKszD,GAAG0rG,eAAiBh/J,EAAKu3L,qBAAqBjkI,GAAG0rG,eACtDh/J,EAAKszD,GAAGtc,OAASh3C,EAAKu3L,qBAAqBjkI,GAAGtc,OAE9Ch3C,EAAKu3L,qBAAuB,OAKhCx8L,KAAKsqK,WAAa,WAChB,UAAa7wG,SACX,UAAaC,OAAOC,WACpBhR,GACA,EACA,UAAaiR,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOI,WACpB3R,GACA,EACA,UAAayR,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOK,SACpBvR,GACA,EACA,UAAaoR,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOglC,YACpBsC,GACA,EACA,UAAapnC,WAAWojC,UAG5Bh9F,KAAK+3D,iBAAmB,WACtB,UAAa6rC,YAAY,GACzB,EAAKnyC,KAAKsG,mBACV,EAAKK,QAAQL,mBACT,EAAKpM,gBACP,EAAKA,eAAeoM,mBAElB,EAAKi7E,gBACP,EAAKA,eAAej7E,mBAElB,EAAKogI,cACP,EAAKA,aAAapgI,mBAEhB,EAAKK,SACP,EAAKA,QAAQL,oBAGjB/3D,KAAK2yI,aAAe,WACd5rI,EAAMwwL,kBAGV,EAAKjtB,aACL,EAAK74G,KAAKkhF,eACL,EAAKK,gBACR,EAAK56E,QAAQu6E,eAEX,EAAKhnF,gBACP,EAAKA,eAAeoM,mBAElB,EAAKi7E,gBACP,EAAKA,eAAeL,eAElB,EAAKwlD,cACP,EAAKA,aAAaxlD,eAEhB,EAAKv6E,SACP,EAAKA,QAAQu6E,iBAGjB3yI,KAAKi0I,qBAAuB,WACtB,EAAKtoF,gBACP,EAAKA,eAAeoM,mBAElB,EAAKi7E,gBACP,EAAKA,eAAej7E,mBAElB,EAAK6jI,qBACP,EAAKA,oBAAoB7jI,mBAEvB,EAAKqoG,cACP,EAAKA,aAAansB,uBAEhB,EAAKkkD,cACP,EAAKA,aAAalkD,uBAEhB,EAAK77E,SACP,EAAKA,QAAQL,mBAEf,EAAKtG,KAAKwiF,wBAEZj0I,KAAKm0I,iBAAmB,WAClB,EAAKxoF,gBACP,EAAKA,eAAegnF,eAElB,EAAKK,gBACP,EAAKA,eAAeL,eAElB,EAAKipD,qBACP,EAAKA,oBAAoB7jI,mBAEvB,EAAKqoG,cACP,EAAKA,aAAajsB,mBAEhB,EAAKgkD,cACP,EAAKA,aAAahkD,mBAEhB,EAAK/7E,UAAY,EAAK46E,gBACxB,EAAK56E,QAAQu6E,eAEf,EAAKlhF,KAAK0iF,oBAEZn0I,KAAK0qK,kBAAoB,WACnB,EAAKytB,cACP,EAAKA,aAAahkD,oBAGtBn0I,KAAKq4D,QAAU,SAASuyG,GACtB,IAAKA,EAAS,CACZ,IAAIl8G,EAAQ,UAAU0H,oBAAoBnxD,GACtCypD,GACFA,EAAM2J,UAER,UAAaurC,YAAY3+F,GACzBA,EAAKwsD,KAAK4G,UACNpzD,EAAKmzD,SACPnzD,EAAKmzD,QAAQC,UACXpzD,EAAK+tI,gBACP/tI,EAAK+tI,eAAe36E,YAI1Br4D,KAAK07L,SAAW,SAACtzI,GAMf,IAAIrG,EAAQ,UAAUkJ,WAElBpC,GAAS9hD,EAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACnD+G,GAAS/hD,EAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAGnDprD,GAAI,IAAA0hI,oBAAmB,EAAK5mE,KAAM,EAAK8G,IAC3C,GAAI5hE,IAAM,EAAAk/E,YAAYC,SACpB7wE,EAAKwsD,KAAKr3C,GAAKyuC,EACf5jD,EAAKszD,GAAGn+C,GAAKyuC,EACT5jD,EAAKymD,gBACPzmD,EAAK0mD,eAAe8wI,YAAY5zI,EAAO,GAC9B5jD,EAAKinD,gBACdjnD,EAAK+tI,eAAe0pD,YAAY7zI,EAAO,GAC9B,EAAKwtI,sBACd,EAAKuF,oBAAoBc,YAAY7zI,EAAO,GAE9C9hD,EAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,OAChC,GAAIzjB,IAAM,EAAAk/E,YAAYE,WAC3B9wE,EAAKwsD,KAAKp3C,GAAKyuC,EACf7jD,EAAKszD,GAAGl+C,GAAKyuC,EACT7jD,EAAKymD,gBACPzmD,EAAK0mD,eAAe8wI,YAAY,EAAG3zI,GAC1B7jD,EAAKinD,gBACdjnD,EAAK+tI,eAAe0pD,YAAY,EAAG5zI,GAC1B,EAAKutI,sBACd,EAAKuF,oBAAoBc,YAAY,EAAG5zI,GAE1C/hD,EAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,MAChC,CACL,IAAMsiL,EAAWpjM,EAAO6vK,YAAYnkK,GAC9Bs0E,EAAWhgF,EAAOigF,YAAYv0E,IACpC,aAAiBA,EAAM03L,EAAUpjH,EAAUxyE,EAAMqwL,kBAAmBtuI,EAAOnyD,GAC3EoQ,EAAMggD,kBAAoBqB,GAK5B,IAAAw0I,4BAA2B,IAC3B,IAAAC,qBAAoB,IACpB,IAAAC,0BAAyB,GAEzB,IACMjkI,EADa,UAAM12D,WACa4L,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,KAE7D74D,KAAKs9H,iBAAmB,WACtB,OAAO/jI,EAAOs+H,kBAAkB5yH,IAElCjF,KAAK+8L,mBAAqB,WACxB,OAAO,IAAAz/D,kBAAiBt9H,KAAKyxD,KAAMzxD,KAAKu4D,KAE1Cv4D,KAAKg9L,eAAiB,WACpB,IAAIC,EAAc,GAClB,OAAQ1jM,EAAO+8D,WACb,IAAK,YACH,IAAMijB,EAAWhgF,EAAOigF,YAAYv0E,GAC9B03L,EAAWpjM,EAAO6vK,YAAYnkK,GAC9Bi4L,EAAgB3jM,EAAOigF,YAAYD,GACnC4jH,EAAgB5jM,EAAO6vK,YAAYuzB,GACnCS,EAAgB7jM,EAAOigF,YAAY0jH,GAGzCD,EAAc,CAFQ1jM,EAAO6vK,YAAY+zB,GAEXC,GAC9B,MAEF,QACEH,EAAc,CAAC1jM,EAAOigF,YAAYv0E,GAAO1L,EAAO6vK,YAAYnkK,IAIhE,OAAOg4L,GAETj9L,KAAKw0D,cAAgB,WACnB,IAAI/N,GAAW,IAAA6qB,kBAAiBrsE,EAAKwsD,KAAMxsD,EAAKszD,IAEhD,OAAOtzD,EAAKq4E,oBAAmB,IAAAvF,yBAAwBtxB,KAGzDzmD,KAAKy0D,gBAAkB,WACrB,IAAIhO,GAAW,IAAA6qB,kBAAiBrsE,EAAKwsD,KAAMxsD,EAAKszD,IAEhD,OAAO,IAAAwf,yBAAwBtxB,GAAU8L,aAG3CvyD,KAAKq9L,gBAAkB,WACrB,OAAO,IAAA/rH,kBAAiBrsE,EAAKwsD,KAAMxsD,EAAKszD,KAG1Cv4D,KAAKq5E,0BAA4B,WAC/B,OAAOp0E,EAAKq4E,mBAAmBr4E,EAAK0mD,eAAe2xI,0BAGrDt9L,KAAKs9E,mBAAqB,SAASxpB,GACjC,OAAO,IAAAwpB,oBAAmBxpB,IAE5B9zD,KAAKu9L,iBAAmB,WACtB,OAAOt4L,EAAKwsD,KAAKr3C,EAAInV,EAAKszD,GAAGn+C,EAAInV,EAAKwsD,KAAOxsD,EAAKszD,IAEpDv4D,KAAKw9L,iBAAmB,WACtB,OAAOv4L,EAAKwsD,KAAKp3C,EAAIpV,EAAKszD,GAAGl+C,EAAIpV,EAAKwsD,KAAOxsD,EAAKszD,IAEpDv4D,KAAKy9L,kBAAoB,WACvB,OAAOx4L,EAAKwsD,KAAKr3C,EAAInV,EAAKszD,GAAGn+C,EAAInV,EAAKwsD,KAAOxsD,EAAKszD,IAEpDv4D,KAAK09L,kBAAoB,WACvB,OAAOz4L,EAAKwsD,KAAKp3C,EAAIpV,EAAKszD,GAAGl+C,EAAIpV,EAAKwsD,KAAOxsD,EAAKszD,IAMpDv4D,KAAK29L,sCAAwC,WAC3C,IAAIhnM,GAAI,IAAA0hI,oBAAmB,EAAK5mE,KAAM,EAAK8G,IACzCq/D,EAAgB,EAAK0F,mBAErB/jD,EAAWhgF,EAAOigF,YAAYv0E,GAC9B24L,EAAiB34L,EAAKszD,GAAGslI,gBAAkB54L,EAAKq0E,yBAChDwkH,EAAmBvkH,EAAShhB,GAAGslI,gBAAkBtkH,EAASD,yBAC1DykH,EAAcrpM,OAAO+2B,OAAO,GAAIxmB,EAAKszD,IACrCylI,EAAgBtpM,OAAO+2B,OAAO,GAAIxmB,EAAKwsD,MACvCwsI,EAAmB,KACnBC,EAAoB,KACpBC,EAAiB,KACjBC,EAAmB,KAsCrB,OApCIznM,IAAM,EAAAk/E,YAAYC,UAEpBmoH,EAAmBvpM,OAAO+2B,OAAO,GAAI,EAAK+xK,oBAC1CU,EAAoBxpM,OAAO+2B,OAAO,GAAI,EAAKiyK,qBACR,UAA/B9lE,EAAcwE,cAChB+hE,GAAkBL,EAClBM,GAAoBR,EACpBG,EAAY1jL,GAAK+jL,EACjBJ,EAAc3jL,GAAK8jL,IAEnBA,GAAkBP,EAClBQ,GAAoBN,EACpBC,EAAY1jL,GAAK8jL,EACjBH,EAAc3jL,GAAK+jL,GAErBH,EAAiB5jL,GAAK8jL,EACtBD,EAAkB7jL,GAAK+jL,GACdznM,IAAM,EAAAk/E,YAAYE,aAE3BkoH,EAAmBvpM,OAAO+2B,OAAO,GAAI,EAAK8xK,oBAC1CW,EAAoBxpM,OAAO+2B,OAAO,GAAI,EAAKgyK,qBACR,SAA/B7lE,EAAcwE,cAChB+hE,GAAkBP,EAClBQ,GAAoBN,EACpBC,EAAY3jL,GAAK+jL,EACjBH,EAAc5jL,GAAKgkL,IAEnBD,GAAkBL,EAClBM,GAAoBR,EACpBG,EAAY3jL,GAAKgkL,EACjBJ,EAAc5jL,GAAK+jL,GAErBF,EAAiB7jL,GAAK+jL,EACtBD,EAAkB9jL,GAAKgkL,GAGlB,CAACF,EAAmBD,EAAkBF,EAAaC,IAE5Dh+L,KAAKq+L,4BAA8B,WACjC,IAAIT,EAAiB,EAAKrlI,GAAGslI,eAC3BS,EAAgB,EAAK/lI,GAAGuwG,WACxBg1B,EAAmB,EAAKrsI,KAAKosI,eAC7BU,EAAkB,EAAK9sI,KAAKq3G,WAExB01B,GAAU,IAAAtiH,mBAAkB,EAAK3jB,GAAI,EAAK9G,MAAOmsI,IAAmBU,GAG1E,MAAO,EAFW,IAAApiH,mBAAkB,EAAKzqB,KAAM,EAAK8G,IAAKulI,IAAqBS,GAE3DC,IAErBx+L,KAAK4qD,UAAY,WACf,IAAI7I,EAAQ,UAAOA,MACfw8G,EAAe,UAAU3zG,YAC7B,IAAIrxD,EAUF,MAAO,CAAC6gB,EAAG,EAAGC,EAAG,GATjB,IAAImkJ,EAAOjlK,EAAOyxD,cAWpB,OAVM,UAAOpI,UAAUqC,aACnBu5G,EAAOjlK,EAAOklK,sBAEH,CACXrkJ,EAAGmkJ,EAAankJ,EAAKokJ,EAAKpkJ,EAAI2nC,EAC9B1nC,EAAGkkJ,EAAalkJ,EAAKmkJ,EAAKnkJ,EAAI0nC,IAOpC/hD,KAAKsoD,YAAc,SAASc,GACtBnkD,EAAKwsD,OAASrI,GAChB,UAAaH,YAAYhkD,IAG7BjF,KAAKyqK,WAAa,WAChB1jK,EAAM+/C,WAAY,EAClB//C,EAAMggD,kBAAoB,KAC1BhgD,EAAMskD,YAAa,GAErBrrD,KAAK8qK,iBAAmB,WACtB,IAAM5kH,EAAQ3sD,EAAOkyD,WACfgzI,GAAe,IAAAl0I,eAAc,EAAKkH,KAAKr3C,EAAG,EAAKq3C,KAAKp3C,GACpDqkL,GAAa,IAAAn0I,eAAc,EAAKgO,GAAGn+C,EAAG,EAAKm+C,GAAGl+C,GAEpD,OAAO6rC,EAAMjmD,MAAK,SAAA0+L,GAChB,IAAMplH,EAAWhgF,EAAOigF,YAAY,GAC9BmjH,EAAWpjM,EAAO6vK,YAAY,GAEpC,GAAIu1B,EAAS32L,KAAO,EAAKA,IAAM22L,EAAS32L,KAAOuxE,EAASvxE,IAAM22L,EAAS32L,KAAO20L,EAAS30L,GACrF,OAAO,EAET,IAAM42L,GAAuB,IAAAr0I,eAAco0I,EAASltI,KAAKr3C,EAAGukL,EAASltI,KAAKp3C,GACpEwkL,GAAqB,IAAAt0I,eAAco0I,EAASpmI,GAAGn+C,EAAGukL,EAASpmI,GAAGl+C,GAC9DykL,GAAgB,IAAA/jH,+BACpB0jH,EAAcC,EAAYE,EAAsBC,GAUlD,OAAOC,MAUX9+L,KAAKi6D,OAAS,SAACtW,EAAKo7I,EAAQtE,GAC1B,EAAKuE,iBAAiBr7I,EAAKo7I,EAAQtE,IASrCz6L,KAAKg/L,iBAAmB,SAACr7I,EAAKo7I,EAAQtE,GACpC,IAAI,YAAa,UAAUt4L,WAAWilD,QAAtC,CACA,EAAKzD,IAAMA,EACXo7I,EAASA,IAAU,EACnB,IAAMhhC,EAAW94J,EAAK64J,wBAAwB74J,EAAKszD,GAAIkiI,GACjD58B,EAAa54J,EAAK64J,wBAAwB74J,EAAKwsD,KAAMgpI,IA+BvD1zL,EAAMqvL,aAAgB,UAAU97D,cAAiB,EAAKrrE,mBACxDgwI,GAAgBt7I,GAGd1+C,EAAKszD,GAAGjc,UAAY,IAAM,UAAUg+E,aACtC,EAAK4kE,gBAAgBv7I,EAAKk6G,EAAYE,GAC7B94J,EAAKszD,GAAG/jB,MAAQ,EACzB,EAAK2qJ,YAAYx7I,EAAKk6G,EAAYE,GAElCp6G,EAAIiX,OAAOmjG,EAAS3jJ,EAAG2jJ,EAAS1jJ,KAIpCra,KAAKk/L,gBAAkB,SAACv7I,EAAKk6G,EAAYE,GACvC,IACI1pH,EADmB,EAAKkkB,GAAGjc,UACC,UAAOyF,MAGvC,OAFUxoD,EAAOs+H,kBAAkB,GAEvBhiD,aACV,IAAK,aACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,QACE,IAAM8mH,EAAWpjM,EAAO6vK,YAAY,GAC9Bg2B,EAAmBzC,EAAS7+B,wBAAwB6+B,EAASpkI,IAC7D/jB,GAAQ,IAAAuqF,wBAAuB8+B,EAAYE,EAAUqhC,GACrDC,EAAmB,EAAK9mI,GAAGjc,UAAY,UAAOyF,MAC9Cu9I,EAAal1L,KAAK4pE,IAAIqrH,GAAmB,IAAA3hH,WAAUtzE,KAAKC,MAAMmqC,EAAQ,KACtEi+B,GAAS,IAAAH,uBAAsByrF,EAAUF,EAAYyhC,GACrD5sH,GAAS,IAAAJ,uBAAsByrF,EAAU94J,EAAK64J,wBAAwB6+B,EAASpkI,IAAKlkB,GAE1FsP,EAAIiX,OAAO6X,EAAOr4D,EAAGq4D,EAAOp4D,GAE5BspC,EAAI6wG,MAAMuJ,EAAS3jJ,EAAG2jJ,EAAS1jJ,EAAGq4D,EAAOt4D,EAAGs4D,EAAOr4D,EAAGg6B,KAK5Dr0C,KAAKm/L,YAAc,SAACx7I,EAAKk6G,EAAYE,GACnC,IACI1pH,EADmBjqC,KAAKynE,KAAmC,EAA7BznE,KAAK0nE,IAAI,EAAKvZ,GAAG/jB,MAAO,IAC1B,UAAOuN,MAGvC,OAFUxoD,EAAOs+H,kBAAkB,GAEvBhiD,aACV,IAAK,aACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACH,IAAM8mH,EAAWpjM,EAAO6vK,YAAY,GAC9Bg2B,EAAmB,EAAKthC,wBAAwB6+B,EAASpkI,IACzDka,GAAS,IAAAH,uBAAsByrF,EAAUF,EAAYxpH,EAAS,GAC9Dq+B,GAAS,IAAAJ,uBAAsByrF,EAAUqhC,EAAkB/qJ,EAAS,GAC1EsP,EAAIiX,OAAO6X,EAAOr4D,EAAGq4D,EAAOp4D,GAC5BspC,EAAIiX,OAAO8X,EAAOt4D,EAAGs4D,EAAOr4D,KAQlCra,KAAKu/L,kBAAoB,SAAS57I,GAChC,UAAWsW,OAAOtW,EAAK1+C,IAGzB,IAAMu6L,GAAkB,SAAC/zF,GACvB,IAAKxmG,EAAKwsD,KAAK43G,iBAAmBpkK,EAAKszD,GAAG8wG,eAAgB,OACT,EAAKg1B,8BADI,qBACnDoB,EADmD,KAC9BC,EAD8B,KAEtD7hC,GAAa,IAAAtzG,eAAck1I,EAAoBrlL,EAAGqlL,EAAoBplL,EAAG,GACzE0jJ,GAAW,IAAAxzG,eAAcm1I,EAAkBtlL,EAAGslL,EAAkBrlL,EAAG,GAerEpV,EAAK0+C,IAAI+W,YACTz1D,EAAK0+C,IAAIgX,OAAOkjG,EAAWzjJ,EAAGyjJ,EAAWxjJ,GACrCtT,EAAMqvL,aACR6I,GAAgBh6L,EAAK0+C,KAEvB1+C,EAAK0+C,IAAIiX,OAAOmjG,EAAS3jJ,EAAG2jJ,EAAS1jJ,GACrCpV,EAAK0+C,IAAI6W,UAAY,EACrBv1D,EAAK0+C,IAAIkX,YAAc4wC,EACvBxmG,EAAK0+C,IAAImX,SACT71D,EAAK0+C,IAAI6tG,cAqBb,SAASytC,GAAgBt7I,GACvB,IAAIwzF,EAAgBlyI,EAAK0mD,eAAeyrF,mBACtChlE,EAASntE,EAAK64J,wBAAwB3mB,EAAc/kE,QACpDC,EAASptE,EAAK64J,wBAAwB3mB,EAAc9kE,QACpD2I,EAAS/1E,EAAK64J,wBAAwB3mB,EAAcn8D,QACpDC,EAASh2E,EAAK64J,wBAAwB3mB,EAAcl8D,QAEtDt3B,EAAIiX,OAAOwX,EAAOh4D,EAAGg4D,EAAO/3D,GAC5BspC,EAAIiX,OAAOyX,EAAOj4D,EAAGi4D,EAAOh4D,GAC5BspC,EAAIiX,OAAOogB,EAAO5gE,EAAG4gE,EAAO3gE,GAC5BspC,EAAIiX,OAAOqgB,EAAO7gE,EAAG6gE,EAAO5gE,GAG9B,IAAMslL,GAAmB,WACvB,IACE9hC,EAAgB54J,EAAK64J,wBAAwB74J,EAAKwsD,MAClDssG,EAAgB94J,EAAK64J,wBAAwB74J,EAAKszD,IAChD5hE,GAAI,IAAA0hI,oBAAmB,EAAK5mE,KAAM,EAAK8G,IACrCj1D,GAAQ2B,EAAKq1L,cAAcroI,QAAQ3uD,KACrC3M,IAAM,EAAAk/E,YAAYC,SACpB7wE,EAAK0+C,IAAI2rC,UAAUrqF,EAAKq1L,cAAe,EAAG,EAAGh3L,EAAMA,EAAMu6J,EAAWzjJ,EAAI9W,EAAK,EAAGu6J,EAAWxjJ,GAAKwjJ,EAAWxjJ,EAAI0jJ,EAAS1jJ,GAAG,EAAI/W,EAAK,EAAGA,EAAMA,GACpI3M,IAAM,EAAAk/E,YAAYE,YAC3B9wE,EAAK0+C,IAAI2rC,UAAUrqF,EAAKq1L,cAAe,EAAG,EAAGh3L,EAAMA,EAAMu6J,EAAWzjJ,GAAKyjJ,EAAWzjJ,EAAI2jJ,EAAS3jJ,GAAG,EAAI9W,EAAK,EAAGu6J,EAAWxjJ,EAAI/W,EAAK,EAAGA,EAAMA,IAIjJtD,KAAK4/L,cAAgB,WACnB,IAAI/hC,EAAa54J,EAAK64J,wBAAwB74J,EAAKwsD,MACjDssG,EAAW94J,EAAK64J,wBAAwB74J,EAAKszD,IAC7C+mI,EAAa,EACbO,EAAa,EAGTtmH,EAAWhgF,EAAOigF,YAAYv0E,GAC9B03L,EAAWpjM,EAAO6vK,YAAYnkK,GAGpC,GAFA2yH,EAAgBr+H,EAAOs+H,kBAAkB5yH,GAErC,EAAKwsD,KAAKnV,UAAY,EAAG,CAC3B,IAAMwjJ,EAAqBvmH,EAASukF,wBAAwBvkF,EAAS9nB,MAC/Djd,GAAQ,IAAAuqF,wBAAuB+gE,EAAoBjiC,EAAYE,GAC/DshC,EAAmBp6L,EAAKwsD,KAAKnV,UAAY,UAAOyF,MACtDu9I,EAAal1L,KAAK4pE,IAAIqrH,GAAmB,IAAA3hH,WAAUtzE,KAAKC,MAAMmqC,EAAQ,UAS7D,EAAKid,KAAKjd,MAAQ,IAC3B8qJ,EAAar6L,EAAKwsD,KAAKjd,MAAQ,UAAOuN,MAAQ,KAAOy7E,EAAOo6D,eAG9D,GAAI,EAAKr/H,GAAGjc,UAAY,EAAG,CACzB,IAAM8iJ,EAAmBzC,EAAS7+B,wBAAwB6+B,EAASpkI,IAC7D/jB,GAAQ,IAAAuqF,wBAAuB8+B,EAAYE,EAAUqhC,GACrDC,EAAmB,EAAK9mI,GAAGjc,UAAY,UAAOyF,MACpD89I,EAAWz1L,KAAK4pE,IAAIqrH,GAAmB,IAAA3hH,WAAUtzE,KAAKC,MAAMmqC,EAAQ,UAQ3D,EAAK+jB,GAAG/jB,MAAQ,IACzBqrJ,EAAW56L,EAAKszD,GAAG/jB,MAAQ,UAAOuN,MAAQ,MAK5C,GAFA98C,EAAK86L,aAAe96L,EAAK86L,cAAgB,KACzC96L,EAAK+6L,WAAa/6L,EAAK+6L,YAAc,KACjCj5L,EAAMqvL,YAAa,CACrB,IAAIj/C,EAAgBlyI,EAAK0mD,eAAeyrF,mBACvChlE,EAASntE,EAAK64J,wBAAwB3mB,EAAc/kE,QACpDC,EAASptE,EAAK64J,wBAAwB3mB,EAAc9kE,QACpD2I,EAAS/1E,EAAK64J,wBAAwB3mB,EAAcn8D,QACpDC,EAASh2E,EAAK64J,wBAAwB3mB,EAAcl8D,QAErDh2E,EAAKg7L,sBAAwBh7L,EAAKg7L,uBAAyB,KAe7D,OATkC,eAA9BroE,EAAc/hD,aAAgC+hD,EAAc/hD,YASxD+hD,EAAc/hD,aACpB,IAAK,aACgC,SAA/B+hD,EAAcwE,cAChBkjE,EAA2D,UAA7C/lH,EAAS+jD,mBAAmBlB,aAA4BkjE,EAAa,GAAKA,EACxFO,EAAyD,UAA7ClD,EAASr/D,mBAAmBlB,aAA4ByjE,EAAW,GAAKA,EACpF56L,EAAK86L,aAAe,CAAC3lL,EAAGyjJ,EAAWzjJ,EAAIklL,EAAYjlL,EAAGwjJ,EAAWxjJ,EAAI,GACrEpV,EAAK+6L,WAAa,CAAC5lL,EAAG2jJ,EAAS3jJ,EAAIylL,EAAUxlL,EAAG0jJ,EAAS1jJ,EAAI,GACzDtT,EAAMqvL,cACRnxL,EAAKg7L,sBAAiE,QAAzC,EAAKt0I,eAAeu0I,iBAC/C,CACE9tH,OAAQ,CAACh4D,EAAGg4D,EAAOh4D,EAAI,EAAGC,EAAG0jJ,EAAS1jJ,EAAI,GAC1Cg4D,OAAQ,CAACj4D,EAAGi4D,EAAOj4D,EAAI,EAAGC,EAAGg4D,EAAOh4D,EAAI,GACxC2gE,OAAQ,CAAC5gE,EAAG4gE,EAAO5gE,EAAI,EAAGC,EAAG2gE,EAAO3gE,EAAI,GACxC4gE,OAAQ,CAAC7gE,EAAG6gE,EAAO7gE,EAAI,EAAGC,EAAG4gE,EAAO5gE,EAAI,IACtC,CACF+3D,OAAQ,CAACh4D,EAAGg4D,EAAOh4D,EAAI,EAAGC,EAAG0jJ,EAAS1jJ,EAAI,GAC1Cg4D,OAAQ,CAACj4D,EAAGi4D,EAAOj4D,EAAI,EAAGC,EAAGg4D,EAAOh4D,EAAI,GACxC2gE,OAAQ,CAAC5gE,EAAG4gE,EAAO5gE,EAAI,EAAGC,EAAG2gE,EAAO3gE,EAAI,GACxC4gE,OAAQ,CAAC7gE,EAAG6gE,EAAO7gE,EAAI,EAAGC,EAAG4gE,EAAO5gE,EAAI,KAG9C8lL,GAA6B5mH,EAAUojH,GACvC13L,EAAK86L,aAAe,CAAC3lL,EAAGnV,EAAK86L,aAAa3lL,EApFpB,EAoFiDC,EAAGpV,EAAK86L,aAAa1lL,GAC5FpV,EAAK+6L,WAAa,CAAC5lL,EAAGnV,EAAK+6L,WAAW5lL,EArFhB,EAqF6CC,EAAGpV,EAAK+6L,WAAW3lL,IAC9C,SAA/Bu9G,EAAcwE,eACvBkjE,EAA2D,UAA7C/lH,EAAS+jD,mBAAmBlB,aAA4BkjE,EAAa,GAAKA,EACxFO,EAAyD,UAA7ClD,EAASr/D,mBAAmBlB,aAA4ByjE,EAAW,GAAKA,EACpF56L,EAAK86L,aAAe,CAAC3lL,EAAGyjJ,EAAWzjJ,EAAIklL,EAAYjlL,EAAGwjJ,EAAWxjJ,EAAI,GACrEpV,EAAK+6L,WAAa,CAAC5lL,EAAG2jJ,EAAS3jJ,EAAI,EAAIylL,EAAUxlL,EAAG0jJ,EAAS1jJ,EAAI,GAE7DtT,EAAMqvL,cACRnxL,EAAKg7L,sBAAiE,QAAzC,EAAKt0I,eAAeu0I,iBAC/C,CACE9tH,OAAQ,CAACh4D,EAAGg4D,EAAOh4D,EAAI,EAAGC,EAAG0jJ,EAAS1jJ,EAAI,GAC1Cg4D,OAAQ,CAACj4D,EAAGi4D,EAAOj4D,EAAI,EAAGC,EAAGg4D,EAAOh4D,EAAI,GACxC2gE,OAAQ,CAAC5gE,EAAG4gE,EAAO5gE,EAAI,EAAGC,EAAG2gE,EAAO3gE,EAAI,GACxC4gE,OAAQ,CAAC7gE,EAAG6gE,EAAO7gE,EAAI,EAAGC,EAAG4gE,EAAO5gE,EAAI,IACtC,CACF+3D,OAAQ,CAACh4D,EAAGg4D,EAAOh4D,EAAI,EAAGC,EAAG0jJ,EAAS1jJ,EAAI,GAC1Cg4D,OAAQ,CAACj4D,EAAGi4D,EAAOj4D,EAAI,EAAGC,EAAGg4D,EAAOh4D,EAAI,GACxC2gE,OAAQ,CAAC5gE,EAAG4gE,EAAO5gE,EAAI,EAAGC,EAAG2gE,EAAO3gE,EAAI,GACxC4gE,OAAQ,CAAC7gE,EAAG6gE,EAAO7gE,EAAI,EAAGC,EAAG4gE,EAAO5gE,EAAI,KAG9C8lL,GAA6B5mH,EAAUojH,GACvC13L,EAAK86L,aAAe,CAAC3lL,EAAGnV,EAAK86L,aAAa3lL,EA3GpB,EA2GiDC,EAAGpV,EAAK86L,aAAa1lL,GAC5FpV,EAAK+6L,WAAa,CAAC5lL,EAAGnV,EAAK+6L,WAAW5lL,EA5GhB,EA4G6CC,EAAGpV,EAAK+6L,WAAW3lL,IAExF,MACF,IAAK,WACgC,UAA/Bu9G,EAAcwE,cAChBkjE,EAA2D,SAA7C/lH,EAAS+jD,mBAAmBlB,aAA2BkjE,EAAa,GAAKA,EACvFO,EAAyD,SAA7ClD,EAASr/D,mBAAmBlB,aAA2ByjE,EAAW,GAAKA,EACnF56L,EAAK86L,aAAe,CAAC3lL,EAAGyjJ,EAAWzjJ,EAAI,EAAGC,EAAGwjJ,EAAWxjJ,EAAIilL,GAC5Dr6L,EAAK+6L,WAAa,CAAC5lL,EAAG2jJ,EAAS3jJ,EAAI,EAAGC,EAAG0jJ,EAAS1jJ,EAAIwlL,GAClD94L,EAAMqvL,cACRnxL,EAAKg7L,sBAAiE,QAAzC,EAAKt0I,eAAeu0I,iBAC/C,CACE9tH,OAAQ,CAACh4D,EAAGg4D,EAAOh4D,EAAI,EAAGC,EAAG+3D,EAAO/3D,EAAI,GACxCg4D,OAAQ,CAACj4D,EAAGi4D,EAAOj4D,EAAI,EAAGC,EAAGg4D,EAAOh4D,EAAI,GACxC2gE,OAAQ,CAAC5gE,EAAG4gE,EAAO5gE,EAAI,EAAGC,EAAG2gE,EAAO3gE,EAAI,GACxC4gE,OAAQ,CAAC7gE,EAAG6gE,EAAO7gE,EAAI,EAAGC,EAAG4gE,EAAO5gE,EAAI,IACtC,CACF+3D,OAAQ,CAACh4D,EAAGg4D,EAAOh4D,EAAI,EAAGC,EAAG+3D,EAAO/3D,EAAI,GACxCg4D,OAAQ,CAACj4D,EAAGi4D,EAAOj4D,EAAI,EAAGC,EAAGg4D,EAAOh4D,EAAI,GACxC2gE,OAAQ,CAAC5gE,EAAG4gE,EAAO5gE,EAAI,EAAGC,EAAG2gE,EAAO3gE,EAAI,GACxC4gE,OAAQ,CAAC7gE,EAAG6gE,EAAO7gE,EAAI,EAAGC,EAAG4gE,EAAO5gE,EAAI,KAG9C8lL,GAA6B5mH,EAAUojH,GACvC13L,EAAK86L,aAAe,CAAC3lL,EAAGnV,EAAK86L,aAAa3lL,EAAGC,EAAGpV,EAAK86L,aAAa1lL,EApI5C,GAqItBpV,EAAK+6L,WAAa,CAAC5lL,EAAGnV,EAAK+6L,WAAW5lL,EAAGC,EAAGpV,EAAK+6L,WAAW3lL,EArItC,IAsIkB,UAA/Bu9G,EAAcwE,eACvByjE,EAAyD,SAA7ClD,EAASr/D,mBAAmBlB,aAA2ByjE,EAAW,GAAKA,EACnFP,EAA2D,SAA7C/lH,EAAS+jD,mBAAmBlB,aAA2BkjE,EAAa,GAAKA,EACvFr6L,EAAK86L,aAAe,CAAC3lL,EAAGyjJ,EAAWzjJ,EAAI,EAAGC,EAAGwjJ,EAAWxjJ,EAAIilL,GAC5Dr6L,EAAK+6L,WAAa,CAAC5lL,EAAG2jJ,EAAS3jJ,EAAI,EAAGC,EAAG0jJ,EAAS1jJ,EAAIwlL,GAClD94L,EAAMqvL,cACRnxL,EAAKg7L,sBAAiE,QAAzC,EAAKt0I,eAAeu0I,iBAC/C,CACE9tH,OAAQ,CAACh4D,EAAGg4D,EAAOh4D,EAAI,EAAGC,EAAG+3D,EAAO/3D,EAAI,GACxCg4D,OAAQ,CAACj4D,EAAGi4D,EAAOj4D,EAAI,EAAGC,EAAGg4D,EAAOh4D,EAAI,GACxC2gE,OAAQ,CAAC5gE,EAAG4gE,EAAO5gE,EAAI,EAAGC,EAAG2gE,EAAO3gE,EAAI,GACxC4gE,OAAQ,CAAC7gE,EAAG6gE,EAAO7gE,EAAI,EAAGC,EAAG4gE,EAAO5gE,EAAI,IACtC,CACF+3D,OAAQ,CAACh4D,EAAGg4D,EAAOh4D,EAAI,EAAGC,EAAG+3D,EAAO/3D,EAAI,GACxCg4D,OAAQ,CAACj4D,EAAGi4D,EAAOj4D,EAAI,EAAGC,EAAGg4D,EAAOh4D,EAAI,GACxC2gE,OAAQ,CAAC5gE,EAAG4gE,EAAO5gE,EAAI,EAAGC,EAAG2gE,EAAO3gE,EAAI,GACxC4gE,OAAQ,CAAC7gE,EAAG6gE,EAAO7gE,EAAI,EAAGC,EAAG4gE,EAAO5gE,EAAI,KAG9C8lL,GAA6B5mH,EAAUojH,GACvC13L,EAAK86L,aAAe,CAAC3lL,EAAGnV,EAAK86L,aAAa3lL,EAAGC,EAAGpV,EAAK86L,aAAa1lL,EA1J5C,GA2JtBpV,EAAK+6L,WAAa,CAAC5lL,EAAGnV,EAAK+6L,WAAW5lL,EAAGC,EAAGpV,EAAK+6L,WAAW3lL,EA3JtC,IA6JxB,MACF,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,QAEE,GAAIilL,EAAY,CACd,IAAMc,EAAe,EAAKtiC,wBAAwBvkF,EAAS9nB,OACvD,IAAAwsB,eAAc1kF,EAAQskK,EAAYE,EAAUqiC,KAC9Cd,GAA0B,GAE5BzhC,GAAa,IAAA3hF,mBAAkB2hF,EAAYE,GAAWuhC,GAExD,GAAIO,EAAU,CACZ,IAAMQ,EAAa,EAAKviC,wBAAwB6+B,EAASpkI,KACrD,IAAA0lB,eAAc1kF,EAAQskK,EAAYE,EAAUsiC,KAC9CR,GAAsB,GAExB9hC,GAAW,IAAA7hF,mBAAkB6hF,EAAUF,GAAagiC,GAd/C,OAiBgC,IAAAhtH,mBAAkBkrF,EAAUF,EAhB5C,GADhB,qBAiBN,EAAKkiC,aAjBC,KAiBa,EAAKC,WAjBlB,KAkBPG,GAA6B5mH,EAAUojH,KA+H7C,IAAMwD,GAA+B,SAAC5mH,EAAUojH,GAC9C,IAAM2D,EAA8BC,GAA0BhnH,GACxDinH,EAA+BC,GAA2BlnH,GAChE,IAAK+mH,GAA+BE,KAC7B,EAAK/uI,KAAKivI,gBACV,EAAKjvI,KAAKkvI,eACf,CACA,IAAI9pE,EAAqB,GACrBypE,GAA6BzpE,EAAmB9hI,KAAKurM,GACrDE,GAA8B3pE,EAAmB9hI,KAAKyrM,GAC1D,IAAMI,GAA2B,IAAA3uH,iBAAgBhtE,EAAK+6L,WAAYnpE,GAU9D+pE,EAAyBxmL,GAAKwmL,EAAyBvmL,IACzD,EAAK0lL,aAAe,CAAC3lL,EAAGwmL,EAAyBxmL,EAAGC,EAAGumL,EAAyBvmL,IAIpF,IAAMwmL,EAA4BC,GAAwBnE,GACpDoE,EAA6BC,GAAyBrE,GAE5D,IAAKkE,GAA6BE,KAC3B,EAAKxoI,GAAGmoI,gBACR,EAAKnoI,GAAGooI,eACb,CACA,IAAI9pE,EAAqB,GACrBgqE,GAA6BhqE,EAAmB9hI,KAAK8rM,GACrDE,GAA8BlqE,EAAmB9hI,KAAKgsM,GAC1D,IAAMH,GAA2B,IAAA3uH,iBAAgBhtE,EAAK86L,aAAclpE,GAC/D,UAAcoqE,aAQfL,EAAyBxmL,GAAKwmL,EAAyBvmL,IACzD,EAAK2lL,WAAa,CAAC5lL,EAAGwmL,EAAyBxmL,EAAGC,EAAGumL,EAAyBvmL,MAoC9E6mL,GAA2C,WAC/C,IAAMvE,EAAWpjM,EAAO6vK,YAAY,GACpCuzB,EAASiD,gBACT,IAAMuB,GAAiB,IAAAjlH,mBAAkB,EAAK8jH,WAAY,EAAKD,aAAc,KACvEqB,GAAqB,IAAAllH,mBAAkBygH,EAASoD,aAAcpD,EAASqD,WAAY,KACzF,OAAO,IAAAtlH,mBACL,EAAKqlH,aAAa3lL,EAClB,EAAK2lL,aAAa1lL,EAClB8mL,EAAe/mL,EACf+mL,EAAe9mL,EACf+mL,EAAmBhnL,EACnBgnL,EAAmB/mL,EACnBsiL,EAASoD,aAAa3lL,EACtBuiL,EAASoD,aAAa1lL,IAGpBymL,GAA0B,SAACnE,GAC/B,IAAIvlE,GAAoB,EACxB,GAAIulE,EAASqD,WAAY,CACvB,IAAMqB,EAAuB1E,EAASpkI,GAAGhO,eAAc,GACjD+2I,EAAyB3E,EAASlrI,KAAKlH,eAAc,GACrD42I,GAAiB,IAAAjlH,mBAAkBj3E,EAAK+6L,WAAY/6L,EAAK86L,aAAa,IACtEqB,GAAqB,IAAAllH,mBAAkBolH,EAAwBD,EAAsB,IAE3FjqE,GAAoB,IAAA18C,mBAClBz1E,EAAK86L,aAAa3lL,EAClBnV,EAAK86L,aAAa1lL,EAClB8mL,EAAe/mL,EACf+mL,EAAe9mL,EACf+mL,EAAmBhnL,EACnBgnL,EAAmB/mL,EACnBgnL,EAAqBjnL,EACrBinL,EAAqBhnL,GAgBzB,OAAO+8G,GAGHmpE,GAA4B,SAAChnH,GACjC,IAAI69C,GAAoB,EAExB,GAAI79C,EAASwmH,aAAc,CACzB,IAAMwB,EAAuBhoH,EAAShhB,GAAGhO,eAAc,GACjDi3I,EAAyBjoH,EAAS9nB,KAAKlH,eAAc,GACrDk3I,GAA2B,IAAAvlH,mBAAkB,EAAK6jH,aAAc,EAAKC,WAAW,IAChF0B,GAAqB,IAAAxlH,mBAAkBqlH,EAAsBC,EAAwB,IAC3FpqE,GAAoB,IAAA18C,mBAClB+mH,EAAyBrnL,EACzBqnL,EAAyBpnL,EACzB,EAAK2lL,WAAW5lL,EAChB,EAAK4lL,WAAW3lL,EAChBmnL,EAAuBpnL,EACvBonL,EAAuBnnL,EACvBqnL,EAAmBtnL,EACnBsnL,EAAmBrnL,GAgBvB,OAAO+8G,GAGT,SAASqpE,GAA4BlnH,GACnC,IAAI69C,GAAoB,EAExB,GAAI79C,EAASwmH,aAAc,CACzB,IAAM0B,GAA2B,IAAAvlH,mBAAkBj3E,EAAK86L,aAAc96L,EAAK+6L,WAAW,IAChF0B,GAAqB,IAAAxlH,mBAAkB3C,EAASymH,WAAYzmH,EAASwmH,aAAc,IACzF3oE,GAAoB,IAAA18C,mBAClB+mH,EAAyBrnL,EACzBqnL,EAAyBpnL,EACzBpV,EAAK+6L,WAAW5lL,EAChBnV,EAAK+6L,WAAW3lL,EAChBk/D,EAASwmH,aAAa3lL,EACtBm/D,EAASwmH,aAAa1lL,EACtBqnL,EAAmBtnL,EACnBsnL,EAAmBrnL,GAevB,OAAO+8G,EAGT,SAAS4pE,GAA0BrE,GACjC,IAAIvlE,GAAoB,EACxB,GAAIulE,EAASqD,WAAY,CACvB,IAAMmB,GAAiB,IAAAjlH,mBAAkBj3E,EAAK+6L,WAAY/6L,EAAK86L,aAAa,IACtEqB,GAAqB,IAAAllH,mBAAkBygH,EAASoD,aAAcpD,EAASqD,WAAY,IACzF5oE,GAAoB,IAAA18C,mBAClBz1E,EAAK86L,aAAa3lL,EAClBnV,EAAK86L,aAAa1lL,EAClB8mL,EAAe/mL,EACf+mL,EAAe9mL,EACf+mL,EAAmBhnL,EACnBgnL,EAAmB/mL,EACnBsiL,EAASqD,WAAW5lL,EACpBuiL,EAASqD,WAAW3lL,GAgBxB,OAAO+8G,EAMT,IAAMuqE,GAAW,SAACl2F,EAAOm2F,GAEvB38L,EAAK26L,gBACL36L,EAAK0+C,IAAI+W,YACLz1D,EAAK86L,cAAgB96L,EAAK+6L,aACxBj5L,EAAMqvL,aACRnxL,EAAK0+C,IAAIgX,OAAO11D,EAAK86L,aAAa3lL,EAAGnV,EAAK86L,aAAa1lL,GACvDpV,EAAK0+C,IAAIiX,OAAO31D,EAAKg7L,sBAAsB7tH,OAAOh4D,EAAGnV,EAAKg7L,sBAAsB7tH,OAAO/3D,GAEvFpV,EAAK0+C,IAAIgX,OAAO11D,EAAKg7L,sBAAsB7tH,OAAOh4D,EAAGnV,EAAKg7L,sBAAsB7tH,OAAO/3D,GACvFpV,EAAK0+C,IAAIiX,OAAO31D,EAAKg7L,sBAAsB5tH,OAAOj4D,EAAGnV,EAAKg7L,sBAAsB5tH,OAAOh4D,GAEvFpV,EAAK0+C,IAAIgX,OAAO11D,EAAKg7L,sBAAsB5tH,OAAOj4D,EAAGnV,EAAKg7L,sBAAsB5tH,OAAOh4D,GACvFpV,EAAK0+C,IAAIiX,OAAO31D,EAAKg7L,sBAAsBjlH,OAAO5gE,EAAGnV,EAAKg7L,sBAAsBjlH,OAAO3gE,GAEvFpV,EAAK0+C,IAAIgX,OAAO11D,EAAKg7L,sBAAsBjlH,OAAO5gE,EAAGnV,EAAKg7L,sBAAsBjlH,OAAO3gE,GACvFpV,EAAK0+C,IAAIiX,OAAO31D,EAAKg7L,sBAAsBhlH,OAAO7gE,EAAGnV,EAAKg7L,sBAAsBhlH,OAAO5gE,GAEvFpV,EAAK0+C,IAAIiX,OAAO31D,EAAKg7L,sBAAsBhlH,OAAO7gE,EAAGnV,EAAKg7L,sBAAsBhlH,OAAO5gE,GACvFpV,EAAK0+C,IAAIiX,OAAO31D,EAAK+6L,WAAW5lL,EAAGnV,EAAK+6L,WAAW3lL,KAEnDpV,EAAK0+C,IAAIgX,OAAO11D,EAAK86L,aAAa3lL,EAAGnV,EAAK86L,aAAa1lL,GACvDpV,EAAK0+C,IAAIiX,OAAO31D,EAAK+6L,WAAW5lL,EAAGnV,EAAK+6L,WAAW3lL,KAGvDpV,EAAK0+C,IAAI6W,UAAY,EACrBv1D,EAAK0+C,IAAIkX,YAAc4wC,EACvBxmG,EAAK0+C,IAAImX,SACT71D,EAAK0+C,IAAI6tG,aAGLqwC,GAAa,SAACp2F,GAClBxmG,EAAK0+C,IAAI+W,YACTz1D,EAAK0+C,IAAI6W,UAAY,EACrBv1D,EAAK0+C,IAAIkX,YAAc4wC,EAEvB,IACEsyD,EAAc94J,EAAK64J,wBAAwB74J,EAAKszD,IAChDslG,EAAc54J,EAAK64J,wBAAwB74J,EAAKwsD,MAEhDpd,EAAcpvC,EAAKszD,GAAGjc,UAAY,UAAOyF,MACzC46I,EAAcpjM,EAAO6vK,YAAYnkK,GAUnC,OANkC,gBAFlC2yH,EAAgBr+H,EAAOs+H,kBAAkB5yH,IAEvB4wE,aAAgC+hD,EAAc/hD,YAMxD+hD,EAAc/hD,aACpB,IAAK,aACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACH,IAAMisH,EAAoBZ,KAEpBb,EAAa,EAAKviC,wBAAwB6+B,EAASpkI,KACrD,IAAA0lB,eAAc1kF,EAAQskK,EAAYE,EAAUsiC,KAC9ChsJ,GAAkB,KACJ,IACZA,GAAU,GAGd,EAAKsP,IAAIgX,OAAO,EAAKqlI,WAAW5lL,EAAG,EAAK4lL,WAAW3lL,GACnD,EAAKspC,IAAI6wG,MAAMstC,EAAkB1nL,EAAG0nL,EAAkBznL,EAAGsiL,EAASoD,aAAa3lL,EAAGuiL,EAASoD,aAAa1lL,EAAGg6B,EAAS,GAEpH,EAAKsP,IAAIgX,OAAOgiI,EAASoD,aAAa3lL,EAAGuiL,EAASoD,aAAa1lL,GAC/D,EAAKspC,IAAI6wG,MAAMstC,EAAkB1nL,EAAG0nL,EAAkBznL,EAAG,EAAK2lL,WAAW5lL,EAAG,EAAK4lL,WAAW3lL,EAAGg6B,EAAS,GAqB5GpvC,EAAK0+C,IAAImX,SACT71D,EAAK0+C,IAAI6tG,aAGLuwC,GAAY,SAACt2F,GACjB,IAAI5wC,SAEJ,EAAKlX,IAAI+W,YACT,EAAK/W,IAAI6W,UAAY,EAErB,EAAK7W,IAAIkX,YAAc2iE,EAAOi6D,gBAC9B,EAAK9zI,IAAIq+I,QAAU,SAGf,EAAK/uI,WAAWlsD,MAAMskD,YAAc,UAAas4C,YAAY3pG,QAAQ,WAAa,IAChF,EAAKi5D,WAAWlsD,MAAMkvL,UAAY,EAAKhjI,WAAWlsD,MAAMmvL,gBAAkB,EAAKjjI,WAAWlsD,MAAMovL,UAAa,EAAKljI,WAAWlsD,MAAMkwL,eAAiB,EAAKhkI,WAAWlsD,MAAMkwL,cAAcE,cAC5Lt8H,EAAc,qBACL,EAAK5H,WAAWlsD,MAAMkvL,SAC/Bp7H,EAAc,UAAMonI,sBAAsB,QACjC,EAAKhvI,WAAWlsD,MAAMmvL,eAC/Br7H,EAAc,UAAMonI,sBAAsB,cACjC,EAAKhvI,WAAWlsD,MAAMkwL,eAAiB,EAAKhkI,WAAWlsD,MAAMkwL,cAAcE,aACpFt8H,EAAc,UAAMonI,sBAAsB,EAAAtlJ,0BAA0BpI,SAC3D,EAAK0e,WAAWlsD,MAAMovL,SAC/Bt7H,EAAc,UAAMonI,sBAAsB,QACjC,UAAOj8I,UAAUE,OAAS,EAAK+M,WAAWlsD,MAAMskD,YACzDwP,EAAc,UAAMqnI,6BACpB,EAAKv+I,IAAIkX,YAAcA,GACd,UAAO7U,UAAUE,OAAS,UAAOF,UAAUG,UAAa,UAAOH,UAAUh+C,KAAOjB,EAAMyvL,SAC/F37H,EAAc,UAAMqnI,8BAGtB,IAAI7K,EAAkB,EAAKpkI,WAAWkvI,iBAEtC,EAAKx+I,IAAIkX,YAAcA,GAA4B4wC,EACnD,EAAK9nD,IAAIgX,OAAO08H,EAAgB+K,MAAMhoL,EAAGi9K,EAAgB+K,MAAM/nL,GAC/D,EAAKspC,IAAIiX,OAAOy8H,EAAgBgL,MAAMjoL,EAAGi9K,EAAgBgL,MAAMhoL,GAC/D,EAAKspC,IAAIiX,OAAOy8H,EAAgBiL,MAAMloL,EAAGi9K,EAAgBiL,MAAMjoL,GAC/D,EAAKspC,IAAIiX,OAAOy8H,EAAgBkL,MAAMnoL,EAAGi9K,EAAgBkL,MAAMloL,GAE/D,EAAKspC,IAAIgX,OAAO08H,EAAgBkL,MAAMnoL,EAAGi9K,EAAgBkL,MAAMloL,GAI/D,EAAKspC,IAAImX,SACT,EAAKnX,IAAI6tG,YAcT,EAAK7tG,IAAImX,SACT,EAAKnX,IAAI6tG,aAGXxxJ,KAAKwiM,6BAA+B,WAClC,OAAO,IAAAtwH,oCAAmC,EAAK3Z,GAAG/jB,OAAS,EAAK+jB,GAAGjc,WAAa,UAAOyF,OAGzF/hD,KAAKs5E,uBAAyB,WAC5B,OAAO,IAAApH,oCAAmC,EAAK3Z,GAAG/jB,OAAS,EAAK+jB,GAAGjc,YAGrEt8C,KAAK6nK,cAAgB,WACnB9gK,EAAMqvL,aAAc,EACpB,EAAKzqI,eAAe0M,UACpB,EAAKD,QAAQqqI,kBAAkB,EAAG,GAClC,IAAItrD,EAAgB,EAAKxrF,eAAeyrF,mBACxC,IAAK,IAAMsrD,KAAavrD,EAClBA,EAAcviJ,eAAe8tM,IAC/BvrD,EAAcurD,GAAWrqI,UAG7B,EAAK1M,eAAiB,MAGxB3rD,KAAK2iM,cAAgB,WACnB57L,EAAMmlD,eAAgB,EACtB,EAAK8mF,eAAe36E,UACpB,EAAK26E,eAAiB,KACtB,EAAK56E,QAAQqqI,kBAAkB,EAAG,GAClC,EAAKG,oBAGP5iM,KAAK6iM,mBAAqB,WACxB97L,EAAMsvL,oBAAqB,EAC3B,EAAKuF,oBAAoBvjI,UACzB,EAAKujI,oBAAsB,KAC3B,EAAKxjI,QAAQqqI,kBAAkB,EAAG,GAClC,EAAKG,oBAGP5iM,KAAK8iM,oBAAsB,WACzB,EAAKpgC,iBAAiBrqG,UACtB,UAAqBzb,UAAUyb,QAAQ,EAAKqqG,kBAC5C,EAAKA,iBAAmB,MAG1B1iK,KAAK4iM,iBAAmB,WACtB,EAAKxqI,QAAU,IAAI,EAAJ,QACf,EAAKA,QAAQpC,KAAK/wD,IAGpBjF,KAAKs4D,mBAAqB,WAQxB,IAAK,IAAMyqI,KAPXh8L,EAAMkvL,UAAW,EACjBlvL,EAAMuvL,qBAAsB,EAC5BvvL,EAAM07J,8BAA+B,EACrC17J,EAAMmvL,gBAAiB,EACvBnvL,EAAMovL,UAAW,EACjBpvL,EAAMqvL,aAAc,EACpBrvL,EAAMyvL,OAAS,KACgBzvL,EAAMkwL,cACnClwL,EAAMkwL,cAAc8L,IAAoB,EAE1C,EAAK9sI,cAAgB,KACjB,EAAKmC,SACP,EAAKA,QAAQ4qI,iBAGX,EAAKr3I,gBACP,EAAKk8G,gBAEH,EAAKzH,cACP,EAAKA,aAAa/nG,UAEhB,EAAK8/H,cACP,EAAKA,aAAa9/H,UAEhB,EAAK26E,gBACP,EAAK2vD,gBAEH,EAAK/G,qBACP,EAAKiH,qBAEH,EAAKngC,kBACP,EAAKogC,sBAEP,UAAgBG,2BAA2B,GAC3C,UAAMh/K,UAAS,IAAAi/K,0BAAyB,EAAA3mJ,cAAcC,eAAgB,KAGxEx8C,KAAKmjM,cAAgB,SAAS1vI,EAAUzrD,GAOtC,IAAK,IAAMoyL,KANXrzL,EAAMkvL,UAAW,EACjBlvL,EAAMmvL,gBAAiB,EACvBnvL,EAAMovL,UAAW,EACjBpvL,EAAMuvL,qBAAsB,EAC5BvvL,EAAM07J,8BAA+B,EACrC17J,EAAMyvL,OAASxuL,EACejB,EAAMkwL,cAClClwL,EAAMkwL,cAAcmD,IAAmB,EAEzCn1L,EAAKmzD,QAAQgrI,eAAe3vI,IAG9BzzD,KAAKqjM,oBAAsB,SAACtM,EAAgB3rL,EAAMgkD,EAAW0nI,GAe3D,IAAK,IAAMsD,IAdE,SAAThvL,GACFrE,EAAMovL,UAAW,EACjBpvL,EAAMmvL,gBAAiB,IAEvBnvL,EAAMmvL,gBAAiB,EACvBnvL,EAAMovL,UAAW,GAEnBpvL,EAAMkvL,UAAW,EACjBlvL,EAAMgwL,eAAiBA,EACvBhwL,EAAMiwL,eAAiB5rL,EACvBrE,EAAMuvL,qBAAsB,EAC5BvvL,EAAM07J,8BAA+B,EACrC17J,EAAMyvL,OAASpnI,EACf,EAAK8pI,oBAAoBpC,GACK/vL,EAAMkwL,cAClClwL,EAAMkwL,cAAcmD,IAAmB,EAEzCn1L,EAAKmzD,QAAQihI,qBAAqBtC,EAAgB3rL,IAGpDpL,KAAKsjM,sBAAwB,SAACC,EAAkBn4L,EAAMpD,GACpDjB,EAAMmvL,gBAAiB,EACvBnvL,EAAMovL,UAAW,EACjBpvL,EAAMkvL,UAAW,EACjBlvL,EAAMuvL,qBAAsB,EAC5BvvL,EAAM07J,8BAA+B,EACrC17J,EAAMkwL,cAAcC,oBAAqB,EACzCnwL,EAAMyvL,OAASxuL,GAIjBhI,KAAKwjM,gBAAkB,SAACC,EAAYr4L,EAAMpD,GACxCjB,EAAMmvL,gBAAiB,EACvBnvL,EAAMovL,UAAW,EACjBpvL,EAAMkvL,UAAW,EACjBlvL,EAAMuvL,qBAAsB,EAC5BvvL,EAAM07J,8BAA+B,EACrC17J,EAAMkwL,cAAcE,cAAe,EACnCpwL,EAAMkwL,cAAcC,oBAAqB,EACzCnwL,EAAMyvL,OAASxuL,GAIjBhI,KAAK0jM,iBAAmB,SAASt7I,EAAUs6I,EAAW16L,GAK/CjB,EAAMqvL,aAELnxL,EAAKkkK,mBAAqB,EAAAtzF,YAAYC,UAAY7wE,EAAKkkK,mBAAqB,EAAAtzF,YAAYE,aAC1FhvE,EAAMqvL,aAAc,EACpBnxL,EAAK0mD,eAAiB,IAAI,EAAJ,QACtB1mD,EAAK0mD,eAAeqK,KAAK/wD,KAK/BjF,KAAK2jM,iBAAmB,WACtB,IAAK,IAAMvJ,KAAmBrzL,EAAMkwL,cAClClwL,EAAMkwL,cAAcmD,IAAmB,EAEzC,OAAKrzL,EAAMmlD,gBACT,EAAKoM,qBACLvxD,EAAMmlD,eAAgB,EACc,OAAhC,UAAUnE,oBACZ,UAAUA,kBAAoB,IAAI,EAAJ,SAEhC,EAAKirF,eAAiB,UAAUjrF,kBAAkBk0I,qBAAqB,GACvE,EAAKjpD,eAAeh9E,QAKf,EAAKg9E,gBAGdhzI,KAAK4jM,sBAAwB,WAC3B,IAAK,IAAMxJ,KAAmBrzL,EAAMkwL,cAClClwL,EAAMkwL,cAAcmD,IAAmB,EAEzC,OAAKrzL,EAAMsvL,qBAET,EAAK/9H,qBACD,EAAK6wG,mBAAqB,EAAAtzF,YAAYC,UAAY,EAAKqzF,mBAAqB,EAAAtzF,YAAYE,cAC1FhvE,EAAMsvL,oBAAqB,EACc,OAArC,UAAUruI,yBACZ,UAAUA,uBAAyB,IAAI,EAAJ,SAErC,EAAK4zI,oBAAsB,UAAU5zI,uBAAuBm0I,0BAA0B,GACtF,EAAKP,oBAAoB5lI,QAMtB,EAAK4lI,qBAGd57L,KAAK6jM,mBAAqB,WAAgD,IAA/CptM,EAA+C,uDAAxC,EAAAomD,0BAA0BD,UAC1D,IAAK,IAAMw9I,KAAmBrzL,EAAMkwL,cAClClwL,EAAMkwL,cAAcmD,IAAmB,EAEzC,OAAK,EAAK53B,4BACR,EAAKlqG,qBACD,EAAK6wG,mBAAqB,EAAAtzF,YAAYC,UAAY,EAAKqzF,mBAAqB,EAAAtzF,YAAYE,cAC1FhvE,EAAMuvL,qBAAsB,EAC5BvvL,EAAM07J,8BAA+B,EACrC17J,EAAMmvL,gBAAiB,EACvBnvL,EAAMovL,UAAW,EACjBpvL,EAAMkvL,UAAW,EACjB,EAAKvzB,iBAAmB,UAAqB9lH,UAAUy/I,uBAAuB,IAC9E,IAAAyH,iCACA,EAAK1rI,QAAQmkI,oBAAoB9lM,EAAM,EAAAkmD,0BAA0BC,YAK9D,EAAK8lH,kBAGd1iK,KAAK+jM,4BAA8B,WACjC,IAAK,IAAM3J,KAAmBrzL,EAAMkwL,cAClClwL,EAAMkwL,cAAcmD,IAAmB,EAEzC,OAAK,EAAK33B,gCACJ,EAAK0G,mBAAqB,EAAAtzF,YAAYC,UAAY,EAAKqzF,mBAAqB,EAAAtzF,YAAYE,aAC1FhvE,EAAM07J,8BAA+B,EACrC17J,EAAMuvL,qBAAsB,EAC5BvvL,EAAMmvL,gBAAiB,EACvBnvL,EAAMovL,UAAW,EACjBpvL,EAAMkvL,UAAW,EACjB,EAAKvzB,iBAAmB,UAAqB9lH,UAAUonJ,gCAAgC,IACvF,IAAAF,kCAKG,EAAKphC,kBAGd1iK,KAAKikM,gBAAkB,SAACtgJ,GAItB,GAFA,EAAKA,IAAMA,EAEP,UAAOqC,UAAUk+I,UAAYj/L,EAAKk/L,sBACpCxC,GAAS,WACTnC,GAAgB,WACZv6L,EAAKq1L,eACPqF,UAEG,GAAI,UAAO35I,UAAUE,OAASn/C,EAAMskD,WAEzC,OAAQ,UAAOrF,UAAU56C,MACvB,IAAK,OACC,UAAO46C,UAAUh+C,KAAOjB,EAAMyvL,OAChCmL,GAAS,UAAa,UAAO39L,aAAawrJ,oBAE1CmyC,GAAS,UAAa,UAAO39L,aAAa4nG,QAE5C,MACF,KAAK,EAAAjvD,0BAA0BrI,WAC/B,KAAK,EAAAqI,0BAA0BC,UACzB,UAAOoJ,UAAUh+C,KAAOjB,EAAMyvL,OAChCmL,GAAS,UAAa,UAAO39L,aAAasrJ,qBAE1CqyC,GAAS,UAAa,UAAO39L,aAAa6wH,SAE5C,MACF,IAAK,OACC,UAAO7uE,UAAUh+C,KAAOjB,EAAMyvL,OAChCmL,GAAS,mBAETA,GAAS,UAAa,UAAO39L,aAAa6wH,SAE5C,MACF,KAAK,EAAAl4E,0BAA0BpI,QACzB,UAAOyR,UAAUh+C,KAAOjB,EAAMyvL,OAChCmL,GAAS,EAAA3yC,MAAMI,iBAEfuyC,GAAS,EAAA3yC,MAAM16B,KAEjB,MACF,QACEqtE,GAAS,UAAa,UAAO39L,aAAawrJ,yBAIzC,GAAI,UAAOxpG,UAAUE,OAAS,UAAOF,UAAUG,UAAa,UAAOH,UAAUh+C,KAAOjB,EAAMyvL,OAC/F,OAAQ,UAAOxwI,UAAU56C,MACvB,IAAK,OACL,QACEu2L,GAAS,UAAa,UAAO39L,aAAawrJ,oBAC1C,MACF,KAAK,EAAA7yG,0BAA0BrI,WAC/B,KAAK,EAAAqI,0BAA0BpI,QAC/B,KAAK,EAAAoI,0BAA0BC,UAC7B+kJ,GAAS,UAAa,UAAO39L,aAAasrJ,qBAC1C,MACF,IAAK,OACHqyC,GAAS,wBAGR,GAAI,EAAKtJ,MAAM+L,qBAChBr9L,EAAMkvL,UAAY,EAAKxzB,+BACzBk/B,GAAS,UAAa,UAAO39L,aAAawrJ,oBACjCzoJ,EAAMmvL,gBAAkBnvL,EAAMqvL,aAAe,EAAK5zB,0BAC3Dm/B,GAAS,UAAa,UAAO39L,aAAasrJ,qBACjCvoJ,EAAMovL,SACfwL,GAAS,mBACA56L,EAAMkwL,eAAiBlwL,EAAMkwL,cAAcE,cACpDwK,GAAS,EAAA3yC,MAAMI,qBAEZ,CACD,UAAU7lG,iBAAmB,UAAUM,yBACzC21I,GAAgB,YAGd,UAAO58I,UAAUoC,OAASj+C,EAAMskD,aAAe,UAAOrF,UAAUE,OAAS,UAAUqD,kBACrFi2I,GAAgB,WAGlB,IAAM3pH,EAAc,EAAKynD,mBAAmBznD,YACtCwuH,EAAuB,UAAU56I,wBAA0B,UAAUI,wBACrEy6I,EAAuB,UAAU36I,wBAA0B,UAAUE,yBACtEw6I,IAAwBC,GACP,aAAhBzuH,GAA8C,eAAhBA,GAElC2pH,GAAgB,UAAa,UAAOx7L,aAAa6wH,UAG/C,UAAOjyE,UAAUoC,OAChBj+C,EAAMskD,aAAe,UAAOrF,UAAUE,QAEtC,UAAUuD,wBAA0B,UAAUE,0BAC3B,aAAhBksB,GAA8C,eAAhBA,KAGpC2pH,GAAgB,UAAa,UAAOx7L,aAAa6wH,SAG/C9tH,EAAMskD,YAAc,UAAas4C,YAAY3pG,QAAQ,WAAa,IAChE+M,EAAMkvL,UACLlvL,EAAMmvL,gBACLnvL,EAAMkwL,eAAiBlwL,EAAMkwL,cAAcE,cAC5CpwL,EAAMovL,UACN,EAAK1zB,gCACL,EAAKD,2BAEVm/B,GAAS,sBACA56L,EAAMkvL,UAAY,EAAKxzB,gCAChCk/B,GAAS,UAAa,UAAO39L,aAAa4nG,QACtC3mG,EAAKq1L,eACPqF,MAEO54L,EAAMmvL,gBAEN,EAAK1zB,0BADdm/B,GAAS,UAAa,UAAO39L,aAAa6wH,SAGjC9tH,EAAMovL,SACfwL,GAAS,WACA56L,EAAMqvL,YACfuL,GAAS,WACA56L,EAAMkwL,eAAiBlwL,EAAMkwL,cAAcE,aACpDwK,GAAS,EAAA3yC,MAAM16B,KAEfqtE,GAAS,WAKT18L,EAAKszD,GAAGjc,UAAY,IAClB,UAAaqnD,YAAY3pG,QAAQ,WAAa,IAAM+M,EAAMskD,YAAcpmD,EAAKszD,GAAG+nG,mBAClFuhC,GAAW,sBAEXA,GAAW,YAKX58L,EAAKszD,GAAG/jB,MAAQ,IACd,UAAamvD,YAAY3pG,QAAQ,WAAa,IAC5C+M,EAAMskD,aACNpmD,EAAKszD,GAAG+nG,oBAAsBr7J,EAAKguD,WAAWlsD,MAAMk5J,sBAExD8hC,GAAU,sBAEVA,GAAU,YAGdp+I,EAAI0uG,YA91ER,I,IAAA,O,IACA,Q,IAEA,O,IACA,Q,IACA,SACA,S,WACA,O,IACA,OACA,Q,IAgBA,Q,IACA,S,IACA,Q,IACA,QAEA,S,WACA,S,IACA,MACA,QAOA,Q,IACA,QACA,SACA,S,IACA,QACA,Q,IACA,QACA,SAMA,S,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,OACA,SACA,SACA,Q,IACA,S,IACA,SAEA,S,oLC9Be,SAAUj4I,EAAGC,EAAG+iH,EAAWnhF,GAA2B,WAAnBsoJ,IAAmB,yDAE/Dt/L,EAAOjF,KACTzG,EAAS,KACTwN,EAAQ,CACNy9L,WAAW,EACX19I,WAAW,EACXC,kBAAmB,GACnBwkE,UAAU,EACVlgE,YAAY,EACZjD,SAAU,GACVq8I,eAAe,EACfF,aACAG,iBAAkB,MAEpBvyC,EAAY,UACZwyC,EAAgB,UAAa,UAAW3gM,aAAa4nG,OACrDg5F,EAAiB,UACjBC,EAAiB,UACjBC,EAAkB,UAClBC,EAAgB,UAAa,UAAW/gM,aAAa6wH,QAGrDmwE,EAAkB,UAClBC,SACAC,SACAC,EAAqB,KAEvBnlM,KAAKgI,IAAK,eACVhI,KAAKsnD,IAAM,CAACltC,IAAGC,KACfra,KAAKw6H,QAAU,CACbpgH,EAAGA,EAAI+5F,KAAKC,MAAMD,KAAK2W,UAAU1wG,IAAM,EACvCC,EAAGA,EAAI85F,KAAKC,MAAMD,KAAK2W,UAAUzwG,IAAM,GAEzC3lB,OAAOkC,eAAeoJ,KAAM,IAAK,CAC/B0X,IAAK,SAACxgB,GAKJ,OAJAkuM,IACI,UAAUv1C,kBAAmB,IAAAw1C,gDAA+C,EAAK5rD,oBACnF,IAAA6rD,sBAAqB,EAAK7rD,kBAErB,UAAUnf,aAAgB,EAAKE,QAAQpgH,EAAIpR,WAAW9R,GAAS,EAAKowD,IAAIltC,EAAIpR,WAAW9R,IAEhGJ,IAAK,WACH,YAAiBk8D,IAAb,EAAK1L,KACPtvD,QAAQ4B,IAAI,yBACL,GAEF,UAAU0gI,aAAgB,EAAKE,QAAQpgH,EAAI,EAAKktC,IAAIltC,KAG/D1lB,OAAOkC,eAAeoJ,KAAM,IAAK,CAC/B0X,IAAK,SAACxgB,GAKJ,OAJAkuM,IACI,UAAUv1C,kBAAmB,IAAAw1C,gDAA+C,EAAK5rD,oBACnF,IAAA6rD,sBAAqB,EAAK7rD,kBAErB,UAAUnf,aAAgB,EAAKE,QAAQngH,EAAInjB,EAAQ,EAAKowD,IAAIjtC,EAAInjB,GAEzEJ,IAAK,WACH,YAAiBk8D,IAAb,EAAK1L,KACPtvD,QAAQ4B,IAAI,yBACL,GAEF,UAAU0gI,aAAgB,EAAKE,QAAQngH,EAAI,EAAKitC,IAAIjtC,KAG/Dra,KAAKs8C,UAAY,EACjBt8C,KAAKw0C,MAAQ,EACbx0C,KAAKovD,UAAY,KACjBpvD,KAAKikK,eAAiB7mC,EACtBp9H,KAAKi8C,OAASA,EACdj8C,KAAK8mK,mBAAoB,EACzB9mK,KAAKulM,gBAAiB,EACtBvlM,KAAKqpK,gBAAiB,EACtBrpK,KAAKkb,OAAS,KACdlb,KAAK49J,gBAAkB,KACvB59J,KAAKwlM,0BAA4B,CAC/B,KAAM,IAAK,IAAK,MAAO,UAAW,YAAa,QAAS,iBAAkB,SAAU,kBAAmB,iBACvG,oBAAqB,iBAAkB,aAEzCxlM,KAAKgtD,SAAW,WACd,IACI4iG,EADe,UAAMztJ,WACOwH,cAAcimJ,eAExCh2G,EAAQ,EAAK6/F,iBAEnB,SACEmW,GACIh2G,GAASA,EAAMs8F,cACft8F,GAASA,EAAMigH,cAGvB75J,KAAK+oD,OAAS,SAAC7xD,GACb,EAAKowD,IAAMpwD,GAEb8I,KAAK2mK,WAAa,SAACzvK,GACjB,EAAKsjI,QAAUtjI,GAEjB8I,KAAK0gM,YAAc,WACjB,OAAO,EAAKlsJ,MAAQ,GAEtBx0C,KAAK2gM,aAAe,WAClB,OAAO,EAAKrkJ,UAAY,GAa1Bt8C,KAAKylM,oBAAsB,WACzB,OAAO1+L,EAAM29L,kBAEf1kM,KAAK0lM,oBAAsB,SAAC19L,GAC1BjB,EAAM29L,iBAAmB18L,GAE3B,IAAMo9L,EAAkC,WAClB,UAAUv1C,iBAChB81C,KAEVA,EAAqB,WACzB,IAAIpsM,EAAS,EAAKmH,YAClB,GAAInH,GAAUA,EAAO3E,eAAe,aAAc,CAChD,IAAIglD,EAAQrgD,EAAOmH,YACfk5C,aAAiBA,EAAjBA,QACFA,EAAMl5C,YAAYi8J,oBAAmB,GAC5B/iH,aAAiBA,EAAjBA,SACTA,EAAM+iH,oBAAmB,KAIzBipC,EAAmB,WACvB,IAAIrsM,EAAS,EAAKmH,YAClB,GAAInH,GAAUA,EAAO3E,eAAe,aAAc,CAChD,IAAIglD,EAAQrgD,EAAOmH,YACfk5C,aAAiBA,EAAjBA,QACFA,EAAMl5C,YAAYg6J,eAAgB,EACzB9gH,aAAiBA,EAAjBA,UACTA,EAAM8gH,eAAgB,KAItB8pC,EAAY,WAChB,IAAI5qJ,EAAQrgD,EAAOmH,YAEnB,OAAQqG,EAAMy9L,WAAa5qJ,EAAMz3C,WAAW02J,iBAG9C,SAASgtC,IACP,OAAQ5gM,EAAKg/J,gBACX,IAAK,UACHghC,GAAc,GACdC,GAAc,EACd,MACF,IAAK,WACHD,EAAa,EACbC,GAAc,EACd,MACF,IAAK,cACHD,EAAa,EACbC,EAAa,GACb,MACF,IAAK,aACHD,GAAc,GACdC,EAAa,GACb,MACF,QACED,EAAa,EACbC,EAAa,GAKnB,IAAMv8I,EAAc,SAACP,EAAUjyD,GAG7B,OAFA4Q,EAAMqhD,SAAWA,EACjBrhD,EAAMskD,WAAa,EAAKi1G,mBACpBnqK,EAAEyyD,WACJ7hD,EAAMskD,YAAa,GACZ,IAGLtkD,EAAM+/C,YACR,UAAayB,UAAU,OAAQ,GAAM,GACjCi8I,OACE,IAAAa,gDAA+C,EAAK5rD,mBACtD,IAAA6rD,sBAAqB,EAAK7rD,kBAE1B,EAAKqsD,aAAa19I,KAKpB,UAAWpC,UAAUC,QAAUl/C,EAAMskD,YACvC,UAAa/C,cACb,UAAaC,UAAU,UAAWtjD,IAC3B,IAEP,UAAagkD,YAAYhkD,IAEpB,KAGHujD,EAAY,SAACJ,EAAUjyD,GAG3B4Q,EAAM+/C,WAAY,EAClB//C,EAAMggD,kBAAoB,MAQtBg/I,EAAkB,WACtB,IAAM1hB,EAAa,UAAMliL,WACnB0lG,EAAew8E,EAAWz0H,cAAci4C,aACxC+nD,EAAiBy0B,EAAW16K,cAAcimJ,eAkB1Co2C,EAAkBC,EAElBrsJ,EAAQrgD,EAAOmH,YACjBwlM,GAAoB,EACpBC,GAAwB,EAC5B,GAAIvsJ,aAAiBA,EAAjBA,QAA4B,CAC9B,IAAM2/B,EAAW3/B,EAAM4/B,YAAYjgF,GACnC2sM,EAAoB,EAAKxlM,YAAYgrD,gBACrCy6I,EAAwB5sH,EAAS7tB,gBAGnC,OAAO3kD,EAAMw9L,YAERyB,EAAgB7rM,SAAS0tG,KACxB+nD,IACAs2C,IACAC,IACA,EAAKzF,gBACL,EAAKC,gBAIPx4I,EAAc,SAACC,EAAUjyD,GAG7B,GAAI4Q,EAAMskD,YAAc06I,IAAmB,CACzC,IAAInsJ,EAAQrgD,EAAOmH,YAOnB,OANIk5C,aAAiBA,EAAjBA,SACFA,EAAMijH,oBAAmB,GAE3B91J,EAAM+/C,WAAY,EAClB//C,EAAMggD,kBAAoBqB,GAEnB,EAGT,GAAIrhD,EAAMskD,YAEJ9xD,aAAkBA,EAAlBA,QAAkC,CACpC,IAAM6sM,EAAgB7sM,EAAO2mK,YAC7B,GAAI,EAAKl4J,KAAOo+L,EAAcA,EAAc3xM,OAAS,GAAGuT,IAAM,EAAKA,KAAOo+L,EAAc,GAAGp+L,GACpE,UAAU+jD,gBAClBs6I,iBAInB,OAAO,GAwCT,SAAShjH,EAAUnsF,GAASqC,EAASrC,EAtCrC8I,KAAKqmM,eAAiB,WACpB,IAAMhiB,EAAa,UAAMliL,WAEzB,GADqBkiL,EAAWz0H,cAAci4C,eACzB,EAAAp2D,2BAA2BjB,KAAM,CACpD,IAAM4e,EAAYi1H,EAAWz0H,cAAcm4C,oBAC3C,EAAK29F,oBAAoBt2I,GAE3B,IAAMyJ,EAAqBwrH,EAAWt2K,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,KAG7D74D,KAAK8lM,aAAe,SAAC19I,GACnB,IAAIrG,EAAQ,UAAUkJ,WAClBpC,GAAS9hD,EAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACnD+G,GAAS/hD,EAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAEvDh7C,EAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,EACrCrT,EAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,EACrC,EAAKitC,IAAIltC,GAAKyuC,EACd,EAAKvB,IAAIjtC,GAAKyuC,EACd,EAAKw9I,iCAAiCz9I,EAAOC,GAC7Cs8I,IACAQ,IACA7+L,EAAM09L,eAAgB,GAExBzkM,KAAKsmM,iCAAmC,SAACz9I,EAAOC,GAC9C,IAAIlP,EAAQrgD,EAAOmH,YAEfk5C,aAAiBA,EAAjBA,SACwBA,EAAMixH,4BAG9B,EAAKvjH,IAAIltC,GAAKyuC,EACd,EAAKvB,IAAIjtC,GAAKyuC,IAUpB9oD,KAAKi/J,OAAS,WACZ,IAAIsnC,EAAc,GAIlB,OAHA,EAAKf,0BAA0BpnM,SAAQ,SAACxG,GACtC2uM,EAAY3uM,GAAY,UAAEmzD,MAAM,EAAKnzD,OAEhC2uM,GAETvmM,KAAKkuD,OAAS,SAACs4I,GACb,EAAKhB,0BAA0BpnM,SAAQ,SAACxG,GACtC,EAAKA,GAAY,UAAEmzD,MAAMy7I,EAAY5uM,OAGlC4uM,EAAA,UAA2CxzI,IAArBwzI,EAAA,QAAuDxzI,IAArBwzI,EAAA,IAC3D,EAAKl/I,IAAM,CAAEltC,EAAG,UAAE2wC,MAAMy7I,EAAA,GAAmBnsL,EAAG,UAAE0wC,MAAMy7I,EAAA,MAG1DxmM,KAAKqrD,WAAa,WAAa,OAAOtkD,EAAMskD,YAC5CrrD,KAAKU,UAAY,WAAa,OAAOnH,GACrCyG,KAAKy5I,eAAiB,WACpB,IAAMlgJ,EAAS,EAAKmH,YACpB,OAAInH,GAAUA,EAAOmH,UACZnH,EAAOmH,YAET,MAETV,KAAKsgK,iBAAmB,WACtB,IAAI06B,EAAQ,EAAKzwI,gBASjB,OAPAxjD,EAAMskD,WACJtkD,EAAMqhD,SAAShuC,GAAK4gL,EAAM5gL,EAAI,EAAKkiC,UAAY,EAAK9H,OACpDztC,EAAMqhD,SAAShuC,GAAK4gL,EAAM5gL,EAAI4gL,EAAMr7L,MAAQ,EAAK28C,UAAY,EAAK9H,OAClEztC,EAAMqhD,SAAS/tC,GAAK2gL,EAAM3gL,EAAI,EAAKiiC,UAAY,EAAK9H,OACpDztC,EAAMqhD,SAAS/tC,GAAK2gL,EAAM3gL,EAAI2gL,EAAMn7L,OAAS,EAAKy8C,UAAY,EAAK9H,MAG9DztC,EAAMskD,YAEfrrD,KAAK8oK,SAAW,WACd,OAAO9oK,KAAKw0C,OAEdx0C,KAAK69L,aAAe,WAClB,OAAO79L,KAAKs8C,WAEdt8C,KAAKw4D,mBAAqB,WACxBx4D,KAAKs8C,UAAY,EACjBt8C,KAAKw0C,MAAQ,EACbx0C,KAAK0lM,oBAAoB,MACzB,UAAiBtrD,0BAA0Bp6I,KAAKy5I,kBAEhD,UAAiBvG,+BAA+BlzI,KAAKy5I,mBAEvDz5I,KAAKuzC,OAAS,SAAC37B,EAAQ48B,EAAO8lF,GAC5B,IAAItsH,EAAM,CAACoM,EAAG,EAAGC,EAAG,GAChB62I,EAAS,EAAK92I,EAAIxC,EAAOwC,EAAzB82I,EAA+B,EAAK72I,EAAIzC,EAAOyC,EAEnDrM,EAAIoM,EAAI82I,EAAO9mJ,KAAKsnE,IAAIl9B,GAAS08G,EAAO9mJ,KAAKunE,IAAIn9B,GACjDxmC,EAAIqM,EAAI62I,EAAO9mJ,KAAKunE,IAAIn9B,GAAS08G,EAAO9mJ,KAAKsnE,IAAIl9B,GAGjD,IAAMiyJ,EAAOr8L,KAAK2nE,QAAQ3nE,KAAK2nE,QAAQ/jE,EAAIoM,GAAI,GAAKhQ,KAAK2nE,QAAQn6D,EAAOwC,GAAI,IAAK,GAC3EssL,EAAOt8L,KAAK2nE,QAAQ3nE,KAAK2nE,QAAQ/jE,EAAIqM,GAAI,GAAKjQ,KAAK2nE,QAAQn6D,EAAOyC,GAAI,IAAK,GACjFigH,EAAa,EAAKqsC,WAAW,CAACvsJ,EAAGqsL,EAAMpsL,EAAGqsL,IAAS,EAAK39I,OAAO,CAAC3uC,EAAGqsL,EAAMpsL,EAAGqsL,KAE9E1mM,KAAK47H,kBAAmB,WACtB,OAAO57H,KAAKikK,gBAEdjkK,KAAK8pK,sBAAwB,SAAS7rC,EAAOC,GAKjB,aAAtBD,EAAMpoD,aAAqD,UAAvBooD,EAAM7B,cACnB,eAAtB8B,EAAMroD,aAAuD,SAAvBqoD,EAAM9B,eAC/Cp8H,KAAKikK,eAAiB,cAEE,eAAtBhmC,EAAMpoD,aAAuD,SAAvBooD,EAAM7B,cACrB,aAAtB8B,EAAMroD,aAAqD,UAAvBqoD,EAAM9B,eAC7Cp8H,KAAKikK,eAAiB,WAEE,aAAtBhmC,EAAMpoD,aAAqD,UAAvBooD,EAAM7B,cACnB,eAAtB8B,EAAMroD,aAAuD,SAAvBqoD,EAAM9B,eAC/Cp8H,KAAKikK,eAAiB,YAEE,eAAtBhmC,EAAMpoD,aAAuD,SAAvBooD,EAAM7B,cACrB,aAAtB8B,EAAMroD,aAAqD,UAAvBqoD,EAAM9B,eAC7Cp8H,KAAKikK,eAAiB,eAGE,aAAtBhmC,EAAMpoD,aAAqD,UAAvBooD,EAAM7B,cACnB,eAAtB8B,EAAMroD,aAAuD,SAAvBqoD,EAAM9B,eAC/Cp8H,KAAKikK,eAAiB,WAEE,eAAtBhmC,EAAMpoD,aAAuD,SAAvBooD,EAAM7B,cACrB,aAAtB8B,EAAMroD,aAAqD,UAAvBqoD,EAAM9B,eAC7Cp8H,KAAKikK,eAAiB,YAEE,aAAtBhmC,EAAMpoD,aAAqD,UAAvBooD,EAAM7B,cACnB,eAAtB8B,EAAMroD,aAAuD,SAAvBqoD,EAAM9B,eAC/Cp8H,KAAKikK,eAAiB,eAEE,eAAtBhmC,EAAMpoD,aAAuD,SAAvBooD,EAAM7B,cACrB,aAAtB8B,EAAMroD,aAAqD,UAAvBqoD,EAAM9B,eAC7Cp8H,KAAKikK,eAAiB,eAI1BjkK,KAAKuqD,cAAgB,WAA0B,IAAzBo8I,IAAyB,yDACvClL,GAAY,IAAAvhI,sBACdxY,EAAa+5I,EAAY,UAAW75I,kBAAoB,UAAWF,WACrE1P,EAAS0P,EAAa,EACtBK,EAAQ,UAAUkJ,WAClB2pB,EAASr7E,EAAOqxD,YAElB,MAAO,CACLxwC,EAAI,EAAKA,EAAI2nC,EAAS6yB,EAAOx6D,GAAKusL,EAAgB30J,EAAS,GAC3D33B,EAAI,EAAKA,EAAI0nC,EAAS6yB,EAAOv6D,GAAKssL,EAAgB30J,EAAS,GAC3DnyC,OAAQ6hD,EACR/hD,MAAO+hD,IAIX1hD,KAAKihK,uBAAyB,SAAC1pB,GAC7B,IAAM9qF,EAAM,EAAKgtF,iBACb/9G,SAEFA,EADE+wB,EACS8qF,GAA4B9qF,EAAInF,IAAMmF,EAAInF,IAAMmF,EAAIzB,cAEpDusF,GAA4Bh+I,EAAO+tD,IAAM/tD,EAAO+tD,IAAM/tD,EAAOyxD,cAE1E,IAAM5wC,EAAIm9H,GAA4B,EAAKjwF,IAAIltC,GAAK,EAAKA,EACnDC,EAAIk9H,GAA4B,EAAKjwF,IAAIjtC,GAAK,EAAKA,EAEzD,MAAO,CACLD,EAAGA,EAAIshB,EAASthB,EAChBC,EAAGA,EAAIqhB,EAASrhB,IAIpBra,KAAK4mM,cAAgB,WACnB,IAAI3sE,EAAa,EAAK1vE,gBAEtB,MAAO,CACLnwC,EAAG6/G,EAAW7/G,EAAI6/G,EAAWt6H,MAAQ,EACrC0a,EAAG4/G,EAAW5/G,EAAI4/G,EAAWt6H,MAAQ,IAIzCK,KAAKilD,WAAa,aAMlBjlD,KAAKq4D,QAAU,SAASuyG,GACjBA,IACH,UAAahnE,YAAY3+F,GACzBkgM,EAAmB9sI,YAIvBr4D,KAAKg2D,KAAO,SAASz8D,GACnB8pF,EAAU9pF,GACVyG,KAAKsqK,cACL66B,EAAqB,IAAI,EAAJ,SACFnvI,KAAK/wD,IAE1BjF,KAAKsqK,WAAa,WAChB,UAAa7wG,SACX,UAAaC,OAAOC,WACpBhR,EACA1jD,EACA,UAAa20D,WAAW4jC,OAE1B,UAAa/jC,SACX,UAAaC,OAAOI,WACpB3R,EACAljD,EACA,UAAa20D,WAAW4jC,OAE1B,UAAa/jC,SACX,UAAaC,OAAOK,SACpBvR,EACAvjD,EACA,UAAa20D,WAAW4jC,OAE1B,UAAa/jC,SACX,UAAaC,OAAOM,OACpB,EAAKC,OACLh1D,EACA,UAAa20D,WAAW4jC,QAG5Bx9F,KAAK+3D,iBAAmB,WACtB,UAAa6rC,YAAY,IAE3B5jG,KAAK2yI,aAAe,WAClB,EAAK23B,cAEPtqK,KAAKi0I,qBAAuB,WACtBkxD,GACFA,EAAmBlxD,wBAGvBj0I,KAAKm0I,iBAAmB,WAClBgxD,GACFA,EAAmBhxD,oBAIvBn0I,KAAK6mM,UAAY,WACf,OAAIttM,EAAO41D,QACK,IAAI,EAAJ,QAAY51D,GAEXstM,UAAU,UAAUxyJ,OAAOG,OAAU,UAAUH,OAAOiI,YAKzEt8C,KAAK8mM,iBAAmB,WACtB,QAAS9mM,KAAKU,aAAcV,KAAKU,YAAYwrD,iBACtClsD,KAAKU,aAAcV,KAAKU,YAAYi4L,sBAE7C34L,KAAK+mM,YAAc,WACjB,EAAKC,QAAU,EAAK5sL,EACpB,EAAK6sL,QAAU,EAAK5sL,GAEtBra,KAAKknM,WAAa,WAChB,EAAK9sL,EAAI,EAAK4sL,QACd,EAAK3sL,EAAI,EAAK4sL,SAGhBjnM,KAAKi6D,OAAS,SAACtW,GACb,KAAI,WAAa,UAAUxhD,WAAWilD,UAIlC,IAAArQ,qCAAqC,IAAAinC,8BAA6B,IAIlE,EAAKhxB,YAAT,CACA,IACM66C,EADa,UAAM1lG,WACOytD,cAAci4C,aACxClxG,EAAI4C,EAAOqxD,YAEfqvE,EAAah1H,EAAKslD,gBAClBxI,EAAa,UAAWA,MACxBolJ,SACAC,SAEF,OAAQ,EAAKnjC,gBACX,IAAK,UACHkjC,GAAW,GACXC,GAAW,GACX,MACF,IAAK,WACHD,EAAU,EACVC,GAAW,GACX,MACF,IAAK,cACHD,EAAU,EACVC,EAAUniM,EAAKoiM,UAAY,EAAIpiM,EAAKoiM,UAAY,EAChD,MACF,IAAK,aACHF,EAAUliM,EAAKoiM,WAAa,GAAKpiM,EAAKoiM,WAAa,GACnDD,EAAU,EACV,MACF,QACED,EAAU,EACVC,EAAU,EAId,IAAI9/I,EAAM,CACRltC,EAAGzjB,EAAEyjB,EAAK,EAAKA,EAAI2nC,EAASolJ,EAC5B9sL,EAAG1jB,EAAE0jB,EAAK,EAAKA,EAAI0nC,EAASqlJ,GAG1BE,EAAO,CACTltL,EAAGzjB,EAAEyjB,EAAK,EAAKA,EAAI2nC,EACnB1nC,EAAG1jB,EAAE0jB,EAAK,EAAKA,EAAI0nC,GAIfwlJ,EAAwB,UAAWvhJ,UAAUC,UAC5C,EAAK3J,UAAY,GAAK,EAAK9H,MAAQ,KACpCvvC,EAAKokK,gBACN,EAAKw9B,YAEJW,IAAqB,UAAWxhJ,UAAUC,UAAY,EAAK3J,UAAY,GAAK,EAAK9H,MAAQ,KAC1F,UAAWwR,UAAUC,SAAW,EAAK4gJ,YAE1CljJ,EAAIyuG,OACJzuG,EAAI+W,YAEgB,iBAAhB,EAAKx/C,QACP,EAAKusL,mBAAmB9jJ,EAAKs2E,GAEzB,UAAat2B,YAAY3pG,QAAQ,WAAa,GAAK+M,EAAMskD,YAAc9xD,aAAkBA,EAAlBA,QACzEoqD,EAAIwuG,UAAY2yC,EAEhBnhJ,EAAIwuG,UAAYyyC,EAElBjhJ,EAAI88E,QAEqB,uBAAhB,EAAKvlH,QAAmCnU,EAAMskD,YAAc06I,IACrE,EAAK2B,wBAAwB/jJ,EAAKs2E,GAET,iBAAhB,EAAK/+G,QACd,EAAKusL,mBAAmB9jJ,EAAKs2E,GAC7Bt2E,EAAIwuG,UAAY0yC,EAChBlhJ,EAAI88E,QAEqB,iBAAhB,EAAKvlH,OACd,EAAKysL,wBAAwBhkJ,EAAKs2E,GAET,UAAhB,EAAK/+G,OACd,EAAK0sL,kBAAkBjkJ,EAAK2D,GAEnBigJ,EACT,EAAKM,4BAA4BlkJ,EAAKs2E,GAE7B,UAAWj0E,UAAUI,aAAe,EAAK0gH,kBAClD,EAAKghC,wBAAwBnkJ,EAAKs2E,IAG9B,EAAKwrE,sBACP9hJ,EAAIwuG,UAAYwyC,EAEhBhhJ,EAAIwuG,UAAYA,EAGd,EAAK71G,UAAY,GAAK,EAAK9H,MAAQ,GAG5BgzJ,IACLvB,EAA8B9rM,SAAS0tG,GACzC,EAAKkgG,uBAAuBpkJ,EAAK2jJ,GAMjC,EAAKU,wBAAwBrkJ,KAKnCA,EAAI6tG,YACJ7tG,EAAI0uG,YAGNryJ,KAAK8nM,wBAA0B,SAACnkJ,EAAKs2E,GAG9B1gI,EAAOmH,YAAYgrD,iBAClBnyD,EAAOmH,YAAYwrD,iBACnB3yD,EAAOmH,YAAYg6J,eACkB,IAAtCnhK,EAAOmH,YAAYm2I,iBAGtBgvD,IACAliJ,EAAIuuG,IACFj4B,EAAW7/G,EAAI6qL,EAAahrE,EAAWt6H,MAAQ,EAC/Cs6H,EAAW5/G,EAAI6qL,EAAa,EAAIjrE,EAAWt6H,MAAQ,EACnD,EAAKmnK,kBACL,EACA,EAAI18J,KAAKqnE,IAEX9tB,EAAI6tG,YACJ7tG,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,UAAa,UAAW72D,aAAa4nG,OACvDjoD,EAAIwuG,UAAY,2BAChBxuG,EAAI88E,OACJ98E,EAAImX,SACJnX,EAAI+W,YACJ/W,EAAIuuG,IAAIj4B,EAAW7/G,EAAI,KAAS6qL,EAAa,EAAGhrE,EAAW5/G,EAAI,KAAS6qL,EAAY,EAAKp+B,kBAAoB,EAAG,EAAG,EAAI18J,KAAKqnE,IAC5H9tB,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAa4nG,OACrDjoD,EAAI88E,OACJ98E,EAAI6tG,YAEA,EAAK+zC,iBACP5hJ,EAAI+W,YACJ/W,EAAIkX,YAAc,UAAa,UAAW72D,aAAa4nG,OACvDjoD,EAAIuuG,IACFj4B,EAAW7/G,EAAI6qL,EAAa,EAAIhrE,EAAWt6H,MAAQ,EACnDs6H,EAAW5/G,EAAI4/G,EAAWt6H,MAAQ,EAClC,EAAK4lM,eACL,EACAn7L,KAAKqnE,GAAK,GAEZ9tB,EAAImX,YAKV96D,KAAK6nM,4BAA8B,SAAClkJ,EAAKs2E,GAGvC4rE,IACAliJ,EAAIuuG,IACFj4B,EAAW7/G,EAAI6qL,EAAahrE,EAAWt6H,MAAQ,EAC/Cs6H,EAAW5/G,EAAI6qL,EAAajrE,EAAWt6H,MAAQ,EAC/Cs6H,EAAWt6H,MAAQ,EACnB,EACA,EAAIyK,KAAKqnE,IAEX9tB,EAAI6tG,YACJ7tG,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAcmqI,EAClBrhJ,EAAImX,SAEJnX,EAAI+W,YACJ/W,EAAIuuG,IAAIj4B,EAAW7/G,EAAI,KAAO6qL,EAAa,EAAGhrE,EAAW5/G,EAAI,KAAO6qL,EAAY,EAAG,EAAG,EAAI96L,KAAKqnE,IAAI,GACnG9tB,EAAIwuG,UAAY6yC,EAChBrhJ,EAAI88E,QAGNzgI,KAAKynM,mBAAqB,SAAC9jJ,EAAKs2E,GAC9B4rE,IACAliJ,EAAIuuG,IACFj4B,EAAW7/G,EAAI6qL,EAAahrE,EAAWt6H,MAAQ,EAC/Cs6H,EAAW5/G,EAAI6qL,EAAajrE,EAAWt6H,MAAQ,EAC/C,EACA,EACA,EAAIyK,KAAKqnE,IAEX9tB,EAAI6tG,YACJ7tG,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAcgqI,EAClBlhJ,EAAImX,SAEJnX,EAAI+W,YACJ/W,EAAIuuG,IACFj4B,EAAW7/G,EAAI6qL,EAAahrE,EAAWt6H,MAAQ,EAC/Cs6H,EAAW5/G,EAAI6qL,EAAajrE,EAAWt6H,MAAQ,EAC/C,EACA,EACA,EAAIyK,KAAKqnE,IACT,IAIJzxE,KAAK0nM,wBAA0B,SAAC/jJ,EAAKs2E,GACnC,IAAIguE,SACJtkJ,EAAI6W,UAAY,EACZzzD,EAAMskD,YACR48I,EAAY,EACZtkJ,EAAIwuG,UAAY,EAAAnD,MAAME,aAEtB+4C,EAAY,EACZtkJ,EAAIwuG,UAAY,EAAAnD,MAAMrjD,OAGxBhoD,EAAIuuG,IACFj4B,EAAW7/G,EAAI6/G,EAAWt6H,MAAQ,EAClCs6H,EAAW5/G,EAAI4/G,EAAWt6H,MAAQ,EAClCsoM,EACA,EACA,EAAI79L,KAAKqnE,IACT,GAGF9tB,EAAIkX,YAAc,UAAa,UAAO72D,aAAa6wH,QAEnDlxE,EAAImX,SACJnX,EAAI88E,QAGNzgI,KAAK4nM,kBAAoB,SAACjkJ,EAAK2D,GAC7B3D,EAAI0oC,KAAK/kC,EAAIltC,EAAGktC,EAAIjtC,EAAG,EAAG,GAC1BspC,EAAI88E,QAGNzgI,KAAK2nM,wBAA0B,SAAChkJ,EAAKs2E,GACnC4rE,IAEAliJ,EAAI+W,YACJ/W,EAAIuuG,IACFj4B,EAAW7/G,EAAI6qL,EAAahrE,EAAWt6H,MAAQ,EAC/Cs6H,EAAW5/G,EAAI6qL,EAAajrE,EAAWt6H,MAAQ,EAC/C,GACA,EACA,EAAIyK,KAAKqnE,IACT,GAEF9tB,EAAIwuG,UAAY4yC,EAChBphJ,EAAI88E,QAGNzgI,KAAKkoM,sBAAwB,SAACvkJ,EAAK2D,GACjC3D,EAAI0oC,KAAK/kC,EAAIltC,EAAGktC,EAAIjtC,EAAG,EAAG,GAC1BspC,EAAIwuG,UAAY,wBAChBxuG,EAAI88E,OACJ98E,EAAI6tG,aAGNxxJ,KAAKmoM,mBAAqB,SAACxkJ,EAAKs2E,EAAY3yE,GAC1CtvD,QAAQ4B,IAAI,eAAgBqgI,EAAW7/G,GACvCpiB,QAAQ4B,IAAI,eAAgBqgI,EAAW5/G,GACvCriB,QAAQ4B,IAAI,SAAU,EAAK0iD,WAE3BqH,EAAI+W,YACJ/W,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAcmqI,EAClBrhJ,EAAIkX,YAAc,UAClBlX,EAAIgX,OAAOs/D,EAAW7/G,EAAI,GAAI6/G,EAAW5/G,EAAI,IAC7CspC,EAAI6wG,MAAMv6B,EAAW7/G,EAAI,GAAI6/G,EAAW5/G,EAAI,GAAI4/G,EAAW7/G,EAAI,GAAI6/G,EAAW5/G,EAAI,GAAI,IACtFspC,EAAImX,SACJ9iE,QAAQ4B,IAAI,aAEZ+pD,EAAIgX,OAAOrT,EAAIltC,EAAGktC,EAAIjtC,GACtBspC,EAAI6wG,MAAMltG,EAAIltC,EAAGktC,EAAIjtC,EAAGitC,EAAIltC,EAAI,GAAIktC,EAAIjtC,EAAI,GAAI,EAAKiiC,WACrDqH,EAAImX,SACJ9iE,QAAQ4B,IAAI,aAGdoG,KAAKgoM,wBAA0B,SAACrkJ,GAC9BA,EAAI+W,YACJ,IACMiiI,EADQpjM,EAAOmH,YACE0oK,YAAY7vK,GAO7B4nM,IALuB,IAAApiE,wBAAuBxlI,EAAOk4D,KAAMl4D,EAAOg/D,GAAIokI,EAASpkI,KAK9D,IAAA2jB,mBACrB3iF,EAAOg/D,GAAGhO,eAAc,GACxBhxD,EAAOk4D,KAAKlH,eAAc,GAC1B,KAEI62I,GAAqB,IAAAllH,mBACzBygH,EAASlrI,KAAKlH,eAAc,GAC5BoyI,EAASpkI,GAAGhO,eAAc,GAC1B,IAEI+pG,GAAW,IAAAtiF,aAAYmvH,EAAgBC,GACzC1sH,EAAO4/E,EAASl6I,EAChBu6D,EAAO2/E,EAASj6I,EAIpBspC,EAAI0oC,KACF3X,EAAO,EACPC,EAAO,EACP,EAAG,GAELhxB,EAAIwuG,UAAY,wBAChBxuG,EAAI88E,QAGNzgI,KAAK+nM,uBAAyB,SAACpkJ,EAAK2jJ,GAClC3jJ,EAAIuuG,IACFo1C,EAAKltL,EACLktL,EAAKjtL,EACL,EACA,EACA,EAAIjQ,KAAKqnE,IAEX9tB,EAAIwuG,UAAY,mBAChBxuG,EAAI88E,OACJ98E,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAckqI,EAClBphJ,EAAImX,WAl6BR,I,IAAA,O,IACA,Q,IAGA,O,IACA,S,IACA,O,IACA,OACA,S,WAEA,S,IACA,Q,IACA,M,IACA,Q,IACA,QACA,QAMA,Q,IACA,QACA,QAEA,QACA,SACA,S,IACA,O,mDAEO,IAAMmrI,EAAgCA,EAAhCA,8BAAgC,CAC3C,EAAAx0J,2BAA2ByC,SAC3B,EAAAzC,2BAA2B0C,S,iGChC7B,Q,IACA,OACA,Q,IACA,S,IACA,Q,mDAGA,IAAMq2H,GAAe,E,EAFrB,SAEqB,WAEf49B,GAAkBA,EAAlBA,cACD59B,EADC,CAGJuL,aAAc,CACZp2K,MAAO,GACPE,OAAQ,GAGV8uD,uBAAwB,SAACx4C,GACvB,UAAcwiD,qBAAqB0vI,oBACnC,UAAc1vI,qBAAqBxK,WAAWh4C,IAEhD23C,0BAA2B,SAAC33C,GAC1B,UAAcwiD,qBAAqB0vI,kBAAkBlyL,IAEvD8sL,2BAA4B,SAACl0I,GAC1B,UAAc4J,qBAAqByxG,6BAA6Br7G,IAEnEu5I,yBAA0B,WACvB,OAAO,UAAUn9I,YAAYnkD,QAAO,SAAAylD,GAAA,OAAOA,EAAInmD,SAAW,EAAAipC,cAAcqB,oBAE3Eqd,kBAAmB,WACb,UAAc6nF,aAChB,UAAcA,YAAYr+H,SAE5B,UAAcq+H,YAAc,MAE9ByyD,gBAAiB,WACV,UAAczyD,aAChB,UAAcA,YAAY/9E,oBAG/BywI,kBAAmB,WACb,UAAc1yD,aAChB,UAAcA,YAAYnD,gBAG9B6yB,gBAAiB,SAAU5rH,GAAO,WAC1BzG,EAAS,UAAUgY,YACrBvR,aAAiBA,EAAjBA,UACgC,OAA9B,UAAck8F,aAChB,UAAcA,YAAc,IAAI,EAAJ,QAAoB3iG,EAAO,IACvD,UAAc2iG,YAAY9/E,OAC1B,UAAc8/E,YAAYzyD,UAAUzpC,GACpC55C,KAAKyoM,KAAK,qBAAsB,UAAc3yD,cAE9C,UAAcA,YAAY4yD,uBACxB9uJ,GACA,WAAO,EAAK6uJ,KAAK,qBAAsB,UAAc3yD,oB,UAQhDsyD,G,iWCjEf,aAE6BO,EAAhBA,6EACgBC,EAAhBA,6EACeC,EAAfA,2EACiBC,EAAjBA,+EACqBC,EAArBA,4FACuBC,EAAvBA,gGACkBC,EAAlBA,+EACgBC,EAAhBA,yDACaC,EAAbA,mEACaC,EAAbA,mEACWC,EAAXA,+DACgBC,EAAhBA,yEACcC,EAAdA,qEACoBC,EAApBA,8EACcC,EAAdA,oEACaC,EAAbA,mEACYC,EAAZA,kE,6fClBb,IAAYnpL,E,wJAAZ,OAE4BopL,EAAfA,aAAe,SAACh6C,GAAD,MAAqB,CAC/CxkJ,KAAMoV,EAAMymD,eACZpmD,QAAS,CAAC+uI,oBAGmBi6C,EAAlBA,gBAAkB,SAACC,GAAD,MAAmB,CAChD1+L,KAAMoV,EAAM4mD,mBACZvmD,QAAS,CAACipL,kBAGoBC,EAAnBA,iBAAmB,SAACC,GAAD,MAAoB,CAClD5+L,KAAMoV,EAAM6mD,oBACZxmD,QAAS,CAACmpL,mBAGiBC,EAAhBA,cAAgB,SAAC3mL,GAAD,MAAiB,CAC5ClY,KAAMoV,EAAM8mD,0BACZzmD,QAAS,CAACyC,gBAGqB4mL,EAApBA,kBAAoB,SAACjmH,GAAD,MAAiB,CAChD74E,KAAMoV,EAAM+mD,0BACZ1mD,QAAS,CAACojE,gBAGsBkmH,EAArBA,mBAAqB,SAACC,GAAD,MAAsB,CACtDh/L,KAAMoV,EAAMgnD,2BACZ3mD,QAAS,CAACupL,qBAGoBC,EAAnBA,iBAAmB,SAACC,GAAD,MAAoB,CAClDl/L,KAAMoV,EAAMwnD,oBACZnnD,QAAS,CAACypL,mBAGqBC,EAApBA,kBAAoB,SAAC59L,GAAD,MAAqB,CACpDvB,KAAMoV,EAAMinD,0BACZ5mD,QAAS,CAAClU,oBAGsB69L,EAArBA,mBAAqB,SAAC99L,GAAD,MAAsB,CACtDtB,KAAMoV,EAAMknD,2BACZ7mD,QAAS,CAACnU,qBAGkB+9L,EAAjBA,eAAiB,SAACC,GAAD,MAAkB,CAC9Ct/L,KAAMoV,EAAMmnD,2BACZ9mD,QAAS,CAAC6pL,iBAG4BpxI,EAA3BA,yBAA2B,SAACzB,GAAD,MAAwB,CAC9DzsD,KAAMoV,EAAMonD,6BACZ/mD,QAAS,CAACg3C,uBAG2B8yI,EAA1BA,wBAA0B,SAACC,GAAD,MAAuB,CAC5Dx/L,KAAMoV,EAAMqnD,4BACZhnD,QAAS+pL,IAG2BC,EAAzBA,uBAAyB,SAACC,GAAD,MAAwB,CAC5D1/L,KAAMoV,EAAM0mD,sBACZrmD,QAAS,CAACiqL,uBAG8BC,EAA7BA,2BAA6B,SAAC17I,GAAD,MAAgB,CACxDjkD,KAAMoV,EAAM2mD,gCACZtmD,QAASwuC,IAG2ByI,EAAzBA,uBAAyB,SAAC9vD,GAAD,MAAS,CAC7CoD,KAAMoV,EAAMsnD,0BACZjnD,QAAS,CAAC7Y,QAGmBgjM,EAAlBA,gBAAkB,SAACC,GAAD,MAAmB,CAChD7/L,KAAMoV,EAAMunD,mBACZlnD,QAAS,CAACoqL,kBAGmCC,EAAlCA,gCAAkC,SAACj0B,GAAD,MAAqC,CAClF7rK,KAAMoV,EAAMynD,wCACZpnD,QAAS,CAACo2J,oCAG6Bk0B,EAA5BA,0BAA4B,SAACC,GAAD,MAA6B,CACpEhgM,KAAMoV,EAAM0nD,8BACZrnD,QAAS,CAACuqL,4BAG2BC,EAA1BA,wBAA0B,SAACzhM,GAAD,MAA2B,CAChEwB,KAAMoV,EAAM2nD,4BACZtnD,QAAS,CAACjX,2B,2KC9FZ,S,IACA,OACA,QACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,Q,IACA,S,IACA,S,qDAEa6lI,gB,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAjsI,aAAaC,UADpB,OAGZ,EAAK2lF,wBAAyB,EAC9B,EAAK7lF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,0BACA,EAAKmY,SAAW,mBAChB,EAAKH,YAAc,uCACnB,EAAKqD,aAAe,GACpB,EAAKspE,kBAAoB,KACzB,EAAKqnD,aAAe,KACpB,EAAKC,eAAiB,KACtB,EAAK27D,sBAAwB,KAC7B,EAAK17D,UAAY,KACjB,EAAKC,UAAY,KAGjB,EAAKC,UAAY,EAAA72G,mBAAmBE,gBACpC,EAAK42G,mBAAqB,OAC1B,EAAKC,gBAAkB,OACvB,EAAKiV,kBAAoB,CAAC,gBAAiB,kBAAmB,cAAe,aAAc,2BApB/E,E,qEAuBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,gBACHy/H,EAAkB,eAClBC,YACA,MACF,IAAK,kBACHD,EAAkB,iBAClBC,YACA,MACF,IAAK,sBACHD,EAAkB,mBAClBC,YACA,MACF,IAAK,0BACL,IAAK,0BACHD,EAAkB,wBAClBC,YACA,MACF,IAAK,cACL,IAAK,cACHD,EAAkB,YAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YAGJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,yCAGpD,WACZllJ,KAAKqoF,oBACRroF,KAAKqoF,kBAAoB,IAAI,EAAJ,SAAsB,GAC/CroF,KAAKqoF,kBAAkBw4B,OAAS,CAC9BtnF,uBAAwB,EACxBC,yBAA0B,EAC1BC,yBAA0B,GAE5Bz5B,KAAK+e,aAAao3C,QAAQn2D,KAAKqoF,mBAC/BroF,KAAKqoF,kBAAkB3nF,UAAY,kBAAM,IAE3C,IAAM2vI,EAAqB,CAazBZ,EAAea,8BAAf,uBAEE,iBACA,OACA,OACA,CACE,WAAc,CAAC,QACf,eAAkB,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,SAErEtwI,KACA,SAGJtL,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA8gB,GAC9B,EAAKmpE,kBAAkB5sE,aAAayD,GAAcmxH,EAC9C,EAAKhoD,kBAAkBw4B,QACzB,EAAKx4B,kBAAkBw4B,OAAO3hG,EAAW5iB,cAAgB,8B,gCA0BrD4e,EAAQq1H,GAEhB,OAAKvwI,KAAKopF,wBAIV,mGAAuBluE,EAAQq1H,GAHtB,O,iCAQT,IAAI9zH,EAAWA,GAAXA,qBACCzc,KAAKwwI,kBAAkBxpI,QAAO,SAAAiqE,GAAA,OAAQA,EAAK1gD,WAASzoB,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,QADnG,aAEClP,KAAKkb,OAAOsD,MAAMu7E,OAAOt9E,WAAWzV,QAAO,SAAA0V,GAC5C,MAAyB,YAAjBA,EAAQ4F,MACO,gBAAjB5F,EAAQ4F,MACS,iBAAjB5F,EAAQ4F,MACS,wBAAjB5F,EAAQ4F,MACS,gBAAjB5F,EAAQ4F,MACS,WAAjB5F,EAAQ4F,MACS,cAAjB5F,EAAQ4F,MACS,kBAAjB5F,EAAQ4F,MACS,oBAAjB5F,EAAQ4F,UAUlB,OANItiB,KAAK8vI,YAAc,EAAA72G,mBAAmBG,cACxC3c,EAAWA,EAASzV,QAAO,SAAA0V,GACzB,MAA+B,gBAAxBA,EAAQlB,KAAKlV,QAAoD,uBAAxBoW,EAAQlB,KAAKlV,QAA2D,mBAAxBoW,EAAQlB,KAAKlV,WAI1GmW,I,8CAIP,OAAOzc,KAAKkb,OAAOsD,MAAMu7E,OAAOy2C,kBAAkBxpI,QAAO,SAAAgY,GACvD,MAA2B,mBAAnBA,EAAQ1Y,QACS,gBAAnB0Y,EAAQ1Y,QACW,gBAAnB0Y,EAAQ1Y,QACW,uBAAnB0Y,EAAQ1Y,QACW,gBAAnB0Y,EAAQ1Y,QACW,uBAAnB0Y,EAAQ1Y,QACW,cAAnB0Y,EAAQ1Y,QACW,kBAAnB0Y,EAAQ1Y,QACW,oBAAnB0Y,EAAQ1Y,Y,0CAKhBtG,KAAKopF,wBAAyB,I,2CAI9B,OAAO,I,8EAKCnC,GACR,IAAKjnF,KAAKopF,uBACR,OAAO,KAGNnC,GACDjnF,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEyhI,UAAU1pD,Q,mCAGlC6oD,GACX9vI,KAAK8vI,UAAYA,I,mCAIjB,OAAO9vI,KAAKgwI,kB,yCAIZ,OAAOhwI,KAAK+vI,qB,oCAGAA,EAAoBC,GAChChwI,KAAK+vI,mBAAqBA,EAC1B/vI,KAAKgwI,gBAAkBA,K,qDAvGYpsI,EAAiBnN,EAAMs5I,EAAoBC,EAAiBl9H,EAAUvZ,EAAQyO,GACjH,IAAM4oI,EAAO,IAAI,EAAJ,QAiBb,OAhBAA,EAAK/0H,SAAWplB,EAChBm6I,EAAKroD,aAAe9xF,EAAK6F,cAAcqC,QAAQ,MAAO,KACtDiyI,EAAKjtI,UAAY,GACjBitI,EAAKrtD,YAAc9sF,EACnBm6I,EAAKpgI,UAAY,qBACjBogI,EAAKZ,gBAAkBA,EAEvBY,EAAKlwI,UAAY,kBAAMnH,EAAO8uF,mBAC9BuoD,EAAK99H,SAAWA,EAChB89H,EAAKb,mBAAqBA,EAC1Ba,EAAKhtI,gBAAkBA,EACvBgtI,EAAKjtI,WAAY,IAAAsZ,wBAAuB,CACtCnK,WACA9K,KACA2N,UAAU,IAELi7H,M,aA1HF5oI,GAAK,mB,4IChBd,QACA,Q,IACA,QACA,Q,IACA,Q,IACA,O,qDAEaoxK,K,YAEX,WAAYC,EAAUv6F,EAASv7E,IAAU,yGAEnCu7E,GAAYu6F,GAAY91K,IAAa,EAAAC,aAAa02B,UACpD,EAAKze,aAAe,GACpB,EAAKmmE,kBAAoB,GACzB,EAAKslG,gBAAkB,GACvBxyL,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKroE,aAAaqoE,GAAc,GAChC,EAAKlC,kBAAkBkC,GAAc,GACrC,EAAKojG,gBAAgBpjG,GAAc,MAErC,EAAKsO,qBAAsB,EAC3B,EAAKknF,sBAAuB,EAC5B,EAAKC,uBAAyB,EAC9B,EAAKpzJ,cAAgB,KACrB,EAAK6gE,mBAAqB,KAC1B,EAAKmf,cAAgB,KACrB,EAAKzf,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKC,oBAAsB,KAC3B,EAAKG,6BAA+B,KAEpC,EAAKp2D,SAAU,EACf,EAAK4/G,iBAAkB,EACvB,EAAKj1H,OAAS,KACd,EAAKs+J,qBAAsB,EAC3B,EAAKC,qBAAsB,EAC3B,EAAKC,wBAA0B,GAC/B,EAAKC,gBAAkB,MAErBN,IACF,EAAK31K,cAAgB,GACrB,EAAKqb,aAAe,IAEjB+/D,GAAYu6F,IACf,EAAK11K,UAAY,KACjB,EAAKkjF,MAAQ,IAAI,EAAJ,QAAU,MACvB,EAAKluE,mBAAqB,KAC1B,EAAKoS,UAAY,IAEnB,EAAKlP,SAAW,GA1CuB,E,wFAsEjBplB,EAAMS,GAAO,WACnC,QAAK8I,KAAK8S,SAASrc,KAGfmR,MAAMC,QAAQ7H,KAAK8S,SAASrc,IACvBuJ,KAAK8S,SAASrc,GAAMwJ,MAAK,SAAA25K,GAC9B,OAAOA,IAAc,EAAAzhJ,SAASC,MAAQxwB,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAKquF,EAAWntF,OAAQ,IAAAlB,MAAKquF,EAAW1iL,OAGpH8I,KAAK8S,SAASrc,KAAU,EAAA0hC,SAASC,MAClCxwB,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAK,EAAKz4E,SAASrc,GAAOg2F,OAAQ,IAAAlB,MAAKvrF,KAAK8S,SAASrc,GAAOS,O,sDAG7E8pF,GAAmB,WACjD,OAAOA,EAAkBnjF,OAAM,SAACujF,GAC9B,OAAO,EAAK0D,wBAAwB1D,EAAUF,SAAUE,EAAUE,gB,uCAKpE,OAAO,IAAI,EAAJ,QAAyBthF,KAAK6b,SAAU7b,Q,6BA7CpCyb,K,eAIX,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKyb,aAAaP,EAAOwmE,0B,kCAEhBjmE,K,eAIhB,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAK4hF,kBAAkB1mE,EAAOwmE,0B,kCAGrC,IAAMxmE,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKknL,gBAAgBhsK,EAAOwmE,4B,6FCtEvC,W,WACA,O,IACA,M,mDAEA,IAAM6pH,EAAc,SAACjgG,GAAU,IAEtBk1C,EAAyDl1C,EAAzDk1C,SAAUjwH,EAA+C+6E,EAA/C/6E,QAASq6D,EAAsC0gB,EAAtC1gB,UAAWkyF,EAA2BxxE,EAA3BwxE,QAAS0uB,EAAkBlgG,EAAlBkgG,eAExCC,GAAiB,IAAAxrD,QAAO,OAE9B,IAAAt+B,YAAU,WACJ8pF,GAAkBA,EAAej3F,UACnC,aAAEi3F,EAAej3F,SAASk3F,OAAO,OAElC,CAACn7K,IAEJ,IAAMo7K,EAAc,SAACC,GACfH,GAAkBA,EAAej3F,UACnC,aAAEi3F,EAAej3F,SAASq3F,QAAQ,KAAK,WACjCD,GACFA,QAgBR,OACE,+BAAKhhH,UAAW,4BAA8BA,GAAa,IACtDo1D,IAAKyrD,EACL3uB,QAbgB,SAACl8E,GACjBk8E,IAGD0uB,GAAkB5qG,EAAMlqF,OAAOuqI,QAAQ,IAAMuqD,IAGjDG,EAAY7uB,MAOTt8B,EAASmrD,KAKhBJ,EAAYrpD,UAAY,CACtB1B,SAAU,UAAUsrD,IACpBlhH,UAAW,UAAUpoD,OACrBgpK,eAAgB,UAAUhpK,OAC1Bs6I,QAAS,UAAUiC,M,UAGNwsB,G,sJCpDf,OACA,Q,IACA,MACA,SACA,QACA,QACA,QACA,QACA,S,IACA,O,mDAgB8Br8I,EAAjBA,eAAiB,SAC5B68I,EACAC,EACAC,EACA78I,EACA9oD,EACAi9E,GAMG,IALH1jF,EAKG,uDALM,EACTqsM,EAIG,uDAJU,KACb78I,EAGG,uDAHS,KACZ88I,IAEG,yDADHC,IACG,4DACGC,EAAoBL,GAAaD,EACjCO,EAAqB,UAAUz6I,cAAcw6I,GAC7ClT,EAAqBoT,EAAgBR,EAAKC,EAAWC,EAAc78I,EAAW9oD,EAAQi9E,EAAa2oH,EAAY78I,EAAWxvD,EAAQusM,GAExII,EAAqBT,EAAKC,EAAWC,EAAc78I,EAAW9oD,EAAQi9E,EAAa1jF,EAAQusM,GAEvFD,GACFM,EAA8BH,EAAoBnT,GAGpDhoI,KAvBK,IA0BDs7I,EAAgC,SAACC,EAAsBvT,GAC3D,IAAMz4J,EAASgsK,EAAuBA,EAAvBA,6BACf,UAAMzoL,SAASyc,EAAO,EAAA6b,cAAcC,eAAgB28I,KAGhDqT,EAAuB,SAACT,EAAKC,EAAWC,EAAc78I,EAAW9oD,EAAQi9E,EAAa1jF,GAAW,MACjGw1D,EAAkB,aAClBs3I,SAEEC,MACJ,KAASZ,EAAaA,EAAUa,oBAAoBp1M,UAA9B,EAAyC8rF,EAAan0B,GAAa28I,EAAI5I,cAAc1rM,UAAlB,EAA6B8rF,EAAan0B,GACnI,WAAe48I,EAAaA,EAAUc,0BAA0Br1M,UAApC,EAA+C8rF,EAAa0oH,EAAc78I,EAAWvvD,GAAUksM,EAAI1I,oBAAoB5rM,UAAxB,EAAmC8rF,EAAa0oH,EAAc78I,EAAWvvD,KAFhM,eAGH,EAAA88C,0BAA0BlI,SAAU,WAC/Bs3J,IAAQA,EAAIrgJ,iBAAiBqgJ,EAAIrI,uBAJnC,eAMH,EAAA/mJ,0BAA0BhI,SAAU,WAC/Bo3J,IAAQA,EAAI7/I,kBACdygJ,EAAaZ,EAAIpI,qBACD,UAAU57I,kBAAkBglJ,WAAWJ,GAErDX,IAAcA,EAAU9/I,kBAC1BygJ,EAAaX,EAAUgB,2BACP,UAAUjlJ,kBAAkBglJ,WAAWJ,OAbvD,eAgBH,EAAAhwJ,0BAA0B9B,cAAe,WACpCkxJ,IAAQA,EAAI7/I,kBACdygJ,EAAaZ,EAAInI,0BACD,UAAU57I,uBAAuB+kJ,WAAWJ,OAnB5D,eAsBH,EAAAhwJ,0BAA0B9E,eAAgB,kBAAMk0J,EAAIzI,sBAAsB//G,EAAan0B,OAtBpF,eAuBH,EAAAzS,0BAA0BpI,SAAU,kBAAMw3J,EAAIvI,gBAAgBjgH,EAAan0B,MAvBxE,GA0BFw9I,EAAkBX,KACpB52I,EAAkBu3I,EAAkBX,IAGtC52I,KAGWlE,EAAiBA,EAAjBA,eAAiB,WACd,UAAMhvD,WACYytD,cAAci6C,UAAU/4C,UAGtD,UAAM7sC,UAAS,IAAA2sC,cAAa,CAC1B1a,MAAO,UAAUz7B,KAAKC,cAAc,CAAE1S,GAAI,mCAC1C6oD,QAAS,GACTC,UAAU,EACVC,gBAAiB,aACjBK,YAAa,GACbC,eAAgB,aAChBC,WAAY,OAKZi7I,EAAkB,SAACR,EAAKC,EAAWC,EAAc78I,EAAW9oD,EAAQi9E,EAAa2oH,EAAY78I,EAAWxvD,GAAqC,IAA7BusM,IAA6B,yDAC3IC,EAAoBL,GAAaD,EACjC/jM,EAAKkkM,GAAeG,GAAqBA,EAAkBrkM,KAAO,UAEpEkuD,EAAqB,KACzB,GAAIm2I,GAAqBA,EAAkB3rM,UAAW,CACpD,IAAMnH,EAAS8yM,EAAkB3rM,YACjCw1D,EAAqB38D,EAASA,EAAOyO,GAAK,KAG5C,MAAO,CACLA,KACAoD,KAAM6gM,EACN78I,YACA34D,KAAM8sF,EACNv0B,aAAcq9I,EAAoBA,EAAkBrkM,GAAK,KACzD1B,SACAkV,KAAMwwL,EAAY,aAAe,OACjC91I,qBACAjH,kBAAmBo9I,EAAoBA,EAAkBp9I,kBAAoB,KAC7EI,UAAWA,IAAa,IAAAqC,gBACxB06I,oBACAvsM,SAEAo/J,OAdK,WAcI,WACHxqK,EAAS,EAAGo/D,EAAa,EAAGC,EAAa,EAAGjW,EAAO,EACjDkR,EAAO,UAAUmE,wBAAwBlzD,KAAKgvD,cAEpD,GAAID,EAAM,CACR,OAAQk9I,GACN,KAAK,EAAAtvJ,0BAA0BnM,KAC7B,IACM7wB,GADW,IAAA20C,mBACQxoD,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAK7X,UAAUqE,KAAO,EAAKonD,aAChE/rD,EAAUsc,EAAUA,EAAQnE,KAAO,KACnCb,EAAOtX,EAAUA,EAAQM,UAAUgX,KAAO,KAChDlmB,EAAUkmB,GAA+B,SAAvBA,EAAKre,cAA4B,GAAI,IAAA+3D,eAActF,GACrE8E,GAAa,IAAAQ,eAActF,GAC3B+E,EAAwC,aAA3B,UAAWlnD,YAA6BmiD,EAAKyF,gBAAkBzF,EAAK0F,kBACjF5W,GAAO,IAAA6W,aAAY3F,EAAM+E,EAAY1E,GACrC,MAEF,KAAK,EAAAzS,0BAA0BrI,WAC7B7/C,GAAS,IAAAy/D,mBAAkBnF,EAAKoF,sBAAuBpF,GACvD,MACF,QACEt6D,EAASo/D,GAAa,IAAAQ,eAActF,GAGxC,uBAAY/uD,KAAZ,CAAkBvL,SAAQo/D,aAAYC,aAAYjW,SAGpD,MAAO,O,8OCjKb,IAAYr9B,E,wJAAZ,OAE4BysL,EAAfA,aAAe,SAAChB,EAAciB,GAAf,MAA8B,CACxD9hM,KAAMoV,EAAMioD,cACZ5nD,QAAS,CAACorL,eAAciB,eAGCl0I,EAAdA,YAAc,SAACizI,EAAckB,GAAf,MAA6B,CACtD/hM,KAAMoV,EAAMkoD,aACZ7nD,QAAS,CAACorL,eAAckB,cAGIC,EAAjBA,eAAiB,SAACnB,EAAckB,GAAf,MAA6B,CACzD/hM,KAAMoV,EAAMmoD,gBACZ9nD,QAAS,CAACorL,eAAckB,cAGIE,EAAjBA,eAAiB,SAACpB,EAAcjkM,GAAf,MAAuB,CACnDoD,KAAMoV,EAAMooD,gBACZ/nD,QAAS,CAACorL,eAAcjkM,QAGck7L,EAA3BA,yBAA2B,SAAC+I,EAAc38I,GAAf,MAA+B,CACrElkD,KAAMoV,EAAMqoD,4BACZhoD,QAAS,CAACorL,eAAc38I,gBAGQvB,EAArBA,mBAAqB,iBAAO,CACvC3iD,KAAMoV,EAAMsoD,qBACZjoD,QAAS,KAGuBisK,EAArBA,mBAAqB,SAAC77K,GAAD,MAAsB,CACtD7F,KAAMoV,EAAMuoD,qBACZloD,QAAS,CAAC5P,qBAGsBq8L,EAArBA,mBAAqB,SAACC,GAAD,MAAsB,CACtDniM,KAAMoV,EAAMwoD,sBACZnoD,QAAS,CAAC0sL,sB,2ICvCZ,O,OACA,O,IACA,MACA,O,IAEA,MACA,Q,IACA,OACA,QACA,S,uDAEMC,G,gBAMJ,WAAYliG,IAAO,gGACXA,IADW,SAiDnByxE,qBAAuB,WAA2C,IAA1C0wB,EAA0C,uDAA1B,EAAAnuJ,eAAeC,OACrD,UAAUpe,eAAe,cACzBqsK,EAAgBE,kBAAhB,gBAAqC,EAAKpiG,MAA1C,CAAiDqiG,mBAAoB,EAAKA,mBAAoBF,oBAnD7E,EAsDnBE,mBAAqB,WACnB,EAAKrwB,SAAS,CACZswB,kBAAmB,EAAK7mM,MAAM6mM,mBAC7B,WACDl/G,YAAW,WACT,EAAK3nF,MAAM6mM,iBACPz1M,OAAO0uD,iBAAiB,QAAS,EAAKgnJ,2BACtC11M,OAAO+qG,oBAAoB,QAAS,EAAK2qG,6BAC5C,OA9DY,EAkEnBA,0BAA4B,SAAC13M,GACJA,EAAEugB,OAAOuqI,QAAQ,uCAEtC,EAAK0sD,sBArEU,EAyEnBG,wBAA0B,SAACC,GACzB,UAAU5sK,eAAe,eACrB4sK,GACF,EAAKziG,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBD,gBAAgB,EAChB5U,wBAAwB,IAG5B,EAAKu4L,sBAhFL,EAAK5mM,MAAQ,CACX6mM,kBAAkB,GAHH,E,yEAqFV,WACP,OACE,+BAAKhjH,UAAW,4BAA8B5qF,KAAKsrG,MAAM1gB,WAAa,KACpE,kCACEA,UAAW,2CAA6C5qF,KAAK+G,MAAM6mM,iBAAmB,4BAA8B,IACpH9wB,QAAS,kBAAM,EAAKC,yBACpB,gCAAMnyF,UAAU,0BACb5qF,KAAKsrG,MAAMthF,eACR,4CAAkBhiB,GAAI,2BACtB,4CAAkBA,GAAI,4BAG9B,+BAAK4iF,UAAW,kBAAoB5qF,KAAK+G,MAAM6mM,iBAAmB,0BAA4B,KAC5F,+BAAKhjH,UAAU,2BACb,6BAAGA,UAAU,gCAA+B,4CAAkB5iF,GAAI,oCAClE,+BAAK4iF,UAAU,mCACb,kCAAQA,UAAU,+BAA+BkyF,QAAS,kBAAM,EAAKgxB,yBAAwB,KAC3F,4CAAkB9lM,GAAI,uCAExB,kCAAQ4iF,UAAU,+BAA+BkyF,QAAS,kBAAM,EAAKgxB,yBAAwB,KAC3F,4CAAkB9lM,GAAI,8C,kBA7G7Bk6I,UAAY,CACjBt3D,UAAW,UAAUpoD,Q,EAUhBkrK,iBAAmB,YAIO,IAHJ1kL,EAGI,EAHJA,gBAGI,IAHa2kL,0BAGb,MAHkC,KAGlC,MAFJK,2BAEI,aAFyBP,qBAEzB,MAFyC,EAAAnuJ,eAAeC,OAExD,MADJnuB,gBACI,SACzBrqB,EAAQ,UAAM5E,WACd2P,EAAqB/K,EAAMpB,gBAAgB+B,SAIjD,GAAIX,EAAM+N,UAAUkV,eAAgB,CAClC,GAAIlY,EAAmBwuC,MAAO,CAC5B,IAAKv5C,EAAM+N,UAAUM,uBAEnB,OADA4T,EAAgB,CAACiB,iBAAiB,EAAM+jL,sBAAqBP,gBAAer8K,cACrE,EAEP,GAAIu8K,EAEF,OADAA,KACO,OAIX,GAAIA,EAEF,OADAA,KACO,EAIX,OAAO,EAEP,OAAIv0M,SAASC,SAAS2b,WACpB,UAAMiP,UAAS,IAAAgqL,6BAA2B,KACnC,IAETjlL,EAAgB,CAACiB,iBAAiB,EAAM+jL,sBAAqBP,gBAAer8K,aACxEq8K,IAAkB,EAAAnuJ,eAAeG,YACnCtnD,OAAO+1M,4BAA6B,IAE/B,I,cA8EE,IAAApiG,UARS,SAACxzG,GACvB,MAAO,CACL0xB,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxCtD,mBAAoBxZ,EAAMqN,gBAAgB+B,YAIN,CACtCshB,kCACAilL,yDAFa,CAGZT,I,gJC/IH,O,qDAEaW,uB,WAGX,WAAYC,GAAc,sCAF1BA,aAAe,KAEW,KAwB1BC,eAAiB,SAAClB,GAChB,IAAMv/L,EAAQ,UAAU,EAAKwgM,cAAcp0M,QAAQmzM,GAKnD,OAJIv/L,GAAS,GACX,UAAU,EAAKwgM,cAAcz4M,OAAOiY,EAAO,GAGtC,UAAU,EAAKwgM,eA7BtBpuM,KAAKouM,aAAeA,E,4DAIpB,OAAO,UAAUpuM,KAAKouM,gB,kCAGZjB,GAGV,OAFA,UAAUntM,KAAKouM,cAAcr5M,KAAKo4M,GAE3B,UAAUntM,KAAKouM,gB,sCAGRjB,GACd,IAAMv/L,EAAQ,UAAU5N,KAAKouM,cAAcp0M,QAAQmzM,GAMnD,OALIv/L,GAAS,IACXu/L,EAAS90I,UACT,UAAUr4D,KAAKouM,cAAcz4M,OAAOiY,EAAO,IAGtC,UAAU5N,KAAKouM,gB,sCAYRE,GACd,OAAO,UAAUtuM,KAAKouM,cAActiM,MAAK,SAAAqhM,GAAA,OAAYA,EAASnlM,KAAOsmM,O,2CAGlD,2BACnB,YAAqB,UAAUtuM,KAAKouM,cAApC,+CAAmD,SACxC/1I,WAFQ,6EAInB,UAAUr4D,KAAKouM,cAAgB,K,mCAI/B,IAAMG,EAAe,GADV,uBAEX,YAAqB,UAAUvuM,KAAKouM,cAApC,+CAAmD,KAA1CjB,EAA0C,QACjDoB,EAAax5M,KAAKo4M,EAASluC,OAASkuC,EAASluC,SAAWkuC,IAH/C,6EAKX,OAAOoB,I,iCAGEt6M,GACT,UAAU+L,KAAKouM,cAAgB,GADhB,2BAEf,YAAqBn6M,EAArB,+CAA2B,KAAlBk5M,EAAkB,QACzB,UAAUntM,KAAKouM,cAAcr5M,KAAKo4M,EAASj/I,OAASi/I,EAASj/I,SAAWi/I,IAH3D,kF,mjBCkRHqB,gBAAT,SAAyBtoJ,GAC9B,IAAKA,GAA0B,IAAjBA,EAAMzxD,OAClB,OAAO,KAGT,IAAIg6M,EAAcvoJ,EAAM,GACpB2hG,GAAY,IAAAv2E,kBAAiBm9H,EAAYh9I,KAAMg9I,EAAYl2I,IAU/D,OARArS,EAAM9nD,SAAQ,SAAA2wD,GACZ,IAAMt6D,GAAS,IAAA68E,kBAAiBviB,EAAK0C,KAAM1C,EAAKwJ,IAC5C9jE,EAASozJ,IACXA,EAAYpzJ,EACZg6M,EAAc1/I,MAIX0/I,G,EAGOC,kBAAT,SAA2BjoJ,GAChC,OAAQ,UAAW75C,aACjB,KAAK,EAAAyjC,cAAcC,OACjB,OAAO,IAAAynC,yBAAwBtxB,GAAU8L,YAC3C,KAAK,EAAAliB,cAAcE,SACnB,QACE,OAAO,IAAA+sC,qBAAmB,IAAAvF,yBAAwBtxB,MApWxD,I,IAAA,Q,IACA,OACA,Q,IAQA,OACA,SACA,Q,IACA,OACA,SACA,Q,IACA,Q,IACA,Q,mDAMyCkoJ,EAA5BA,0BAA4B,SAAC5/I,GACxC,IAAM6/I,EAAgB,CACpB7/I,EAAK0C,KAAKzpD,GACV+mD,EAAKwJ,GAAGvwD,IAEJm2E,EAAcpvB,EAAKruD,YAAYq3I,sBAErC,OAAO,UAAe82D,4BAA4B1wH,EAAa,UAAW33B,mBAAmBC,SAAUmoJ,IASpEE,EAAxBA,sBAAwB,SAAC18H,EAAQC,EAAQ08H,GACpD,IAAMC,EAAc58H,EAAO7nB,eAAc,GACnC0kJ,EAAc58H,EAAO9nB,eAAc,GACnC42I,GAAiB,IAAAjlH,mBAAkB8yH,EAAaC,EAAaF,GAC7DG,GAAkB,IAAAhzH,mBAAkB+yH,EAAaD,EAAaD,GACpE,MAAO,EACL,IAAAv9H,aAAYw9H,EAAa7N,EAAgB,KACzC,IAAA3vH,aAAYw9H,EAAa7N,GAAiB,KAC1C,IAAA3vH,aAAYy9H,EAAaC,EAAiB,KAC1C,IAAA19H,aAAYy9H,EAAaC,GAAkB,MAzBxC,IAmCMhU,EAAwBA,EAAxBA,sBAAwB,SAAC9oH,EAAQC,EAAQ08H,GACpD,IAAMC,EAAc58H,EAAO7nB,eAAc,GACnC0kJ,EAAc58H,EAAO9nB,eAAc,GAF+B,GAG/B,IAAAsoB,mBAAkBm8H,EAAaC,EAAaF,GAHb,qBAGjE97H,EAHiE,KAGjDC,EAHiD,QAI/B,IAAAL,mBAAkBm8H,EAAaC,GAAcF,GAJd,qBAIjEI,EAJiE,KAKxE,MAAO,CACLl8H,EACAC,EAPsE,KAStEi8H,IAWiCC,EAAxBA,sBAAwB,SAAC39I,EAAM8G,EAAIu/H,GAC9C,IAAMuX,EAAkBnU,EAAsBzpI,EAAM8G,EAAIu/H,GAGpDwX,EAAe,GAJ6C,WAKrDC,GACT,IAAMx8H,EAAMs8H,EAAgB56M,OACtB+6M,EAAyBH,GAAiBE,GAE1CE,EAAsBJ,IAAkBE,EAAiB,GAAKx8H,GAChE28H,EAAc,CAChBj+I,sBACK+9I,EADL,CAEE32E,eAAgB,CACdC,QAAS,WAAc,OAAO02E,EAAuBp1L,GACrD2+G,QAAS,WAAc,OAAOy2E,EAAuBn1L,IAEvDkwC,cAAe,WAAc,OAAOilJ,KAEtCj3I,oBACKk3I,EADL,CAEE52E,eAAgB,CACdC,QAAS,WAAc,OAAO22E,EAAoBr1L,GAClD2+G,QAAS,WAAc,OAAO02E,EAAoBp1L,IAEpDkwC,cAAe,WAAc,OAAOklJ,KAEtC7kJ,UAAW,WACT,YAAO,GAAKA,cAGhB0kJ,EAAav6M,KAAK26M,IA1BpB,IAAK,IAAMH,KAAkBF,EAAiB,EAAnCE,GA6BX,OAAOD,GAGwBK,EAApBA,kBAAoB,SAAC94I,EAASrmB,EAAMo/J,GAA0C,IAA7BxD,IAA6B,yDACnFxyJ,EAAQ,UAAUoe,aAAanB,GAC/B3Q,EAAQtM,EAAM6R,WAEpBvF,EAAM9nD,SAAQ,SAAC2wD,EAAMnhD,GACfgiM,EAAYz1M,SAASyT,KAEvB,IAAAshD,gBAAeH,EACb,KACA,EAAApS,0BAA0BnM,KAC1BA,EAAK7sC,UAAUqE,GACf,KACAwoC,EAAKh4B,iBACL,EACA,KACA,MACA,EACA4zL,OAU0ByD,EAArBA,mBAAqB,SAACh5I,EAAS+4I,GAC5B,UAAU53I,aAAanB,GACjBpL,WAEdrtD,SAAQ,SAAC2wD,EAAMnhD,GACfgiM,EAAYz1M,SAASyT,IACvBmhD,EAAKwrI,aAAY,OAKMuV,EAAhBA,cAAgB,SAACj5I,EAAS+4I,EAAa90F,GACpC,UAAU9iD,aAAanB,GACjBpL,WAEdrtD,SAAQ,SAAC2wD,EAAMnhD,GACfgiM,EAAYz1M,SAASyT,IACvBmhD,EAAKirI,eAAel/E,OAKgB8hF,EAA7BA,2BAA6B,SAAC7tI,GACzC,IAAMnV,EAAQmV,EAAKruD,YAD+B,uBAElD,YAAwBk5C,EAAM6R,WAA9B,+CAA0C,KAA/BskJ,EAA+B,SACpCA,EAAUvtC,2BAA6ButC,EAAUttC,iCACnD,UAAqB7lH,UAAUozJ,sBAAsBD,IAJP,+EASjBlT,EAAtBA,oBAAsB,SAAC9tI,GAClC,IAAMnV,EAAQmV,EAAKruD,YADwB,uBAE3C,YAAwBk5C,EAAM6R,WAA9B,+CAA0C,KAA/BskJ,EAA+B,QACpCA,EAAU7jJ,iBACZ6jJ,EAAU/8D,eAAei9D,mBAJc,+EASLnT,EAA3BA,yBAA2B,SAAC/tI,GACvC,IAAMnV,EAAQmV,EAAKruD,YAD6B,uBAEhD,YAAwBk5C,EAAM6R,WAA9B,+CAA0C,KAA/BskJ,EAA+B,QACpCA,EAAU1Z,sBACZ0Z,EAAUnU,oBAAoBqU,mBAJc,+EAcPC,EAA9BA,4BAA8B,SAACjqJ,GAG1C,IAFA,IAAIC,EAAQ,GAEH3xD,EAAI,EAAGA,EAAI0xD,EAAOxxD,OAAQF,IAAK,CACtC,IAAIw6D,EAAO,CACT0C,KAAMxL,EAAO1xD,GACbgkE,GAAItS,GAAQ1xD,EAAI,GAAK0xD,EAAOxxD,SAE9ByxD,EAAMnxD,KAAKg6D,GAGb,OAAO7I,GAGwBiqJ,EAApBA,kBAAoB,WAC/B,IAAMjqJ,EAAQ,UAAUuF,WADa,uBAErC,YAAmBvF,EAAnB,+CAA0B,KAAf6I,EAAe,QACpBA,EAAKqJ,SACPrJ,EAAKqJ,QAAQu6E,gBAJoB,+EASNy9D,EAApBA,kBAAoB,WAC/B,IAAMlqJ,EAAQ,UAAUuF,WADa,uBAErC,YAAmBvF,EAAnB,+CAA0B,KAAf6I,EAAe,QACpBA,EAAKqJ,SACPrJ,EAAKqJ,QAAQL,oBAJoB,+EASNs4I,EAApBA,kBAAoB,SAACC,GAChC,IAAMpqJ,EAAQ,UAAUuF,WAClB8kJ,GAA0B,IAAAv3D,kBAAiB,CAACs3D,EAAW7+I,KAAKwvG,yBAA0BqvC,EAAW/3I,GAAG0oG,2BAF3D,uBAG/C,YAAuB/6G,EAAvB,+CAA8B,KAAnBy4I,EAAmB,QACtB6R,GAAoB,IAAAx3D,kBAAiB,CAAC2lD,EAASltI,KAAKwvG,yBAA0B09B,EAASpmI,GAAG0oG,2BAChG,IAAI,IAAA5nB,wBAAuBk3D,EAAwB,GAAIA,EAAwB,GAAIC,EAAkB,GAAIA,EAAkB,GAAI,GAC7H,OAAO7R,GANoC,+EAWZ8R,EAAxBA,sBAAwB,SAAC74E,GACpC,MAAO,CAAC,EAAAxB,WAAWE,KAAM,EAAAF,WAAWC,MAAMl8H,SAASy9H,IAGlB84E,EAAtBA,oBAAsB,SAAC94E,GAClC,MAAO,CAAC,EAAAxB,WAAWG,MAAO,EAAAH,WAAWI,OAAOr8H,SAASy9H,IAGpB+4E,EAAtBA,oBAAsB,SAAC/4E,GAClC,MAAO,CAAC,EAAAxB,WAAWE,KAAM,EAAAF,WAAWpgD,UAAW,EAAAogD,WAAWG,MAAO,EAAAH,WAAWlgD,WAAW/7E,SAASy9H,IAG/Dg5E,EAAtBA,oBAAsB,SAACh5E,GAClC,MAAO,CAAC,EAAAxB,WAAWC,KAAM,EAAAD,WAAWjgD,UAAW,EAAAigD,WAAWI,MAAO,EAAAJ,WAAWngD,WAAW97E,SAASy9H,IAMxD+oC,EAA7BA,2BAA6B,SAACz6G,GACzC,IAAM2qJ,EAAgB,GA+DtB,OA7DA3qJ,EAAM9nD,SAAQ,SAAC2wD,GACb,GAAIA,EAAKwJ,GAAG/jB,MAAQ,GAAKua,EAAK0C,KAAKjd,MAAQ,EAAG,CAE5C,IAAMs8J,GAAc,IAAAC,cAAahiJ,EAAKwJ,GAAG/jB,OACnCw8J,GAAgB,IAAAD,cAAahiJ,EAAK0C,KAAKjd,OAGvCy8J,GAAY,IAAA3+H,uBAAsBvjB,EAAKwJ,GAAIxJ,EAAK0C,KAAMu/I,GAAgB,GACtEE,EAAc,IAAI,EAAJ,QAAUD,EAAU72L,EAAG62L,EAAU52L,GAE/C82L,GAAc,IAAA7+H,uBAAsBvjB,EAAK0C,KAAM1C,EAAKwJ,GAAIy4I,GAAgB,GACxEI,EAAgB,IAAI,EAAJ,QAAUD,EAAY/2L,EAAG+2L,EAAY92L,GAGrDg3L,GAAYA,EAAZA,cAAiBtiJ,GACvBsiJ,EAAU94I,GAAK24I,EACfG,EAAU5/I,KAAO2/I,EACjBP,EAAc97M,KAAKs8M,GAGnB,IAAM1U,EAAW5tI,EAAKruD,YAAY0oK,YAAYr6G,GACxCuiJ,GAAiB,IAAAh/H,uBAAsBqqH,EAASlrI,KAAMkrI,EAASpkI,GAAIu4I,GAAc,GACjFS,EAAmB,IAAI,EAAJ,QAAUD,EAAel3L,EAAGk3L,EAAej3L,GAEpEw2L,EAAc97M,KAAK,IAAI,EAAJ,QAASm8M,EAAaK,EAAkBxiJ,EAAKruD,mBAG3D,GAAIquD,EAAKwJ,GAAG/jB,MAAQ,EAAG,CAE5B,IAAMg9J,GAAY,IAAAT,cAAahiJ,EAAKwJ,GAAG/jB,OACjC88J,GAAiB,IAAAh/H,uBAAsBvjB,EAAKwJ,GAAIxJ,EAAK0C,KAAM+/I,GAAY,GACvED,EAAmB,IAAI,EAAJ,QAAUD,EAAel3L,EAAGk3L,EAAej3L,GAE9DsiL,EAAW5tI,EAAKruD,YAAY0oK,YAAYr6G,GACxC0iJ,GAAe,IAAAn/H,uBAAsBqqH,EAASlrI,KAAMkrI,EAASpkI,GAAIi5I,GAAY,GAC7EE,EAAiB,IAAI,EAAJ,QAAUD,EAAar3L,EAAGq3L,EAAap3L,GAGxDg3L,mBAAiBtiJ,GACvBsiJ,EAAU94I,GAAKg5I,EACfV,EAAc97M,KAAKs8M,GAGnBR,EAAc97M,KAAK,IAAI,EAAJ,QAASw8M,EAAkBG,EAAgB3iJ,EAAKruD,mBAE9D,GAAIquD,EAAK0C,KAAKjd,MAAQ,EAAG,CAE9B,IAAMg9J,GAAY,IAAAT,cAAahiJ,EAAK0C,KAAKjd,OACnCi9J,GAAe,IAAAn/H,uBAAsBvjB,EAAK0C,KAAM1C,EAAKwJ,GAAIi5I,GAAY,GACrEE,EAAiB,IAAI,EAAJ,QAAUD,EAAar3L,EAAGq3L,EAAap3L,GAExDg3L,mBAAiBtiJ,GACvBsiJ,EAAU5/I,KAAOigJ,EACjBb,EAAc97M,KAAKs8M,QAInBR,EAAc97M,KAAKg6D,MAIhB8hJ,I,uHClUT,Q,uDAEqBc,E,WAajB,WAAYnoH,GAAiD,IAArCpC,EAAqC,uDAA5B,EAAGroF,EAAyB,uDAAnB,GAAI6yM,IAAe,oFAZ7DxqH,OAAS,EAYoD,KAV7DroF,IAAM,GAUuD,KAR7D6yM,QAAS,EASL5xM,KAAKonF,OAASA,EACdpnF,KAAKjB,IAAMA,EACXiB,KAAK4xM,OAASA,EACd5xM,KAAKwpF,WAAaA,EAClBxpF,KAAKzB,WAAa,G,mDAOhBkrF,GACJ,OAAOzpF,KAAK4xM,QAAS,IAAAtoH,QAAOtpF,KAAKjB,IAAKiB,KAAKwpF,WAAYC,EAAWzpF,KAAKzB,YAAcyB,KAAKjB,M,oCAG9EsnG,GACVrmG,KAAKjB,IAAMsnG,EAAYA,EAAUgT,KAAO,KACxCr5G,KAAKzB,WAAa8nG,EAAYA,EAAU9nG,WAAa,K,4BAOnDy/C,GACEh+C,KAAKjB,KACLi/C,EAAGjpD,KAAKiL,U,eAxCC2xM,G,qJCFrB,QACA,SACA,QACA,QACA,Q,mDAEA,IAAME,EAAmB,CAAC,YAAa,aAAc,aAAc,sBAC7DC,EAAuC,CAAC,aAAc,aAAc,aAErDC,E,YAEnB,WAAYzmG,GAAO,iGACXA,I,uFAGe,WACf9qB,GAAaA,EAAbA,6GACAkwD,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IACpDg/K,EAAat2C,EAAeA,EAAas2C,aAAe,KAQ9D,GAPIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,KAIX,IAAAxxJ,oBAAmBk7G,EAAax1H,UAAY,EAAAua,gBAAgBC,IAAMm8K,EAAiBh0M,OAAM,SAAAyI,GAAA,OAAU,EAAKA,SAAWA,KAAS,CAC9H,IAAMomI,EAAa1sI,KAAKU,YACpBgsI,GAAcA,EAAWslE,WAC3BxxH,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWorD,EAAWulE,qBAI5B,OAAOzxH,I,qDAG4C,WAAxBQ,EAAwB,uDAAJ,GAC/C,GAAI8wH,EAAqCj0M,OAAM,SAAAyI,GAAA,OAAU,EAAKA,SAAWA,KACvE,OAAO06E,EAET,IAAM9lE,EAASlb,KAAKU,YAAYwa,OAChC,IAAKA,EACH,OAAO8lE,EAET,IAAMutB,EAAerzF,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IACzC,IAAKumG,EACH,OAAOvtB,EAWT,IAAKA,EAAkB/gF,MAAK,SAAAmhF,GAAA,MAAoC,gBAAvBA,EAAUF,YAA6B,CAC9E,IAAMstB,EAASD,EAAaC,OACxBA,GAAUA,EAAOroF,gBAAkBqoF,EAAO1rB,UAAY0rB,EAAOroF,cAAcrT,SAArB,aACxDkuE,EAAkBjsF,KAAK,CACrBmsF,SAAU,cACVI,UAAWktB,EAAOroF,cAAcrT,SAArB,cAIjB,OAAOkuE,M,iCA3DU+wH,G,qJCTrB,SACA,QACA,Q,uDAGqB5kB,E,YAEnB,WAAY7hF,GAAO,iGACXA,I,uFAIN,IAAI9qB,GAAaA,EAAbA,6GAEEkwD,EADS1wI,KAAKU,YAAYwa,OACJsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAOhC,OANIt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,I,wDAGyB9kD,GAChC,IAAM2xJ,EAAoBrtL,KAAKU,YAEzBsmL,EADeqG,EAAkBnyK,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC3Bg/K,aAC5BsG,EAAoB,KACxB,OAAQttL,KAAKsG,QACX,IAAK,WACHgnL,EAAoBD,EAAkBE,SACtC,MACF,IAAK,YACHD,EAAoBD,EAAkBG,QACtC,MACF,IAAK,eACHF,EAAoBD,EAAkBI,gBACtC,MACF,IAAK,oBACHH,EAAoBD,EAAkBK,MAK1C,GAAmB,OAAf1G,EACFtyL,OAAOmc,KAAKy8K,EAAkB7xJ,gBAAgBr9B,SAAQ,SAAA5G,GACpD81L,EAAkB7xJ,eAAejkC,GAAO,aAG1C,GAAIwI,KAAKy7B,eAAeC,IAAa4xJ,GAAqBA,EAAkB7xJ,eAAeC,KAAc4xJ,EAAkBxqG,SAAU,CACnI,IAAM6qG,EAAcjyJ,IAAa,EAAAJ,eAAe,GAAK,EAAAA,eAAe,GAAK,EAAAA,eAAe,GACxF,IAAKt7B,KAAKy7B,eAAekyJ,GAAc,CACrC,IAAM9sG,EAA0BysG,EAAkBxsG,2BAA2B6sG,EAAaL,EAAkB7xJ,eAAeC,IACvHmlD,IACFysG,EAAkB7xJ,eAAekyJ,GAAe9sG,GAGpDysG,EAAkB7xJ,eAAeC,GAAY,U,iCAtDhCyxJ,G,oMCLrB,O,OACA,O,IACA,M,IACA,QACA,OAEY+kB,E,wJAAZ,O,mDAIO,IAAMC,EAAyBA,EAAzBA,uBAAyB,SAAC97L,EAAD,GAAsC,IAA7BwZ,EAA6B,EAA7BA,SAAUk9D,EAAmB,EAAnBA,cACnDn/E,GAAQ,aAAUyI,EAAO,CAAC02E,kBAM9B,OALIn/E,GAAS,EACXyI,EAAMzI,GAAOiiB,WAAaA,EAAWxZ,EAAM1gB,OAAOiY,EAAO,GAAKyI,EAAM1gB,OAAOiY,EAAO,EAAG,CAACiiB,WAAUk9D,kBAEhG12E,EAAMthB,KAAK,CAAC86B,WAAUk9D,kBAEjB12E,GAqBH+7L,GAlBiCC,EAA1BA,wBAA0B,SAACh8L,EAAD,GAAsC,IAA7BwZ,EAA6B,EAA7BA,SAAUk9D,EAAmB,EAAnBA,cACpDn/E,GAAQ,aAAUyI,EAAO,CAAC02E,kBAM9B,OALIn/E,GAAS,EACXyI,EAAM1gB,OAAOiY,EAAO,EAAG,CAACiiB,WAAUk9D,kBAElC12E,EAAMthB,KAAK,CAAC86B,WAAUk9D,kBAEjB12E,G,gBAoBP,WAAYi1F,IAAO,gGACXA,IADW,SAsDnBgnG,qBAAuB,SAACziL,EAAUk9D,GAChC,EAAKue,MAAMn8E,mBAAmBgjL,EAAuBA,GAAvBA,qBAA2B,EAAK7mG,MAAMhtF,kBAAkB,CAACuR,WAAUk9D,oBAvDhF,EA0DnBwlH,sBAAwB,WA3ES,IAACl8L,EAAO02E,EACrCn/E,EA2EF,EAAK09F,MAAMn8E,oBA5EqB9Y,EA4EyBm8L,GAA3BA,qBAA+B,EAAKlnG,MAAMhtF,kBA5EjCyuE,EA4EmD,EAAKhmF,MAAMgP,YAAY/N,IA3E/G4F,GAAQ,aAAUyI,EAAO,CAAC02E,oBACjB,GACX12E,EAAM1gB,OAAOiY,EAAO,GAEfyI,KAcL,EAAKtP,MAAQ,CACX0rM,sBAAuB,GACvB18L,YAAa,IAJE,E,oFASjB/V,KAAK0yM,0BAA0B1yM,KAAKsrG,S,gDAGZszE,GACpBA,EAAUnB,YAAcz9K,KAAKsrG,MAAMmyE,YAAcmB,EAAUnB,WAAW5hK,WAAa7b,KAAKsrG,MAAMmyE,WAAW5hK,UAC3G7b,KAAK0yM,0BAA0B9zB,K,6CAKjC5+K,KAAKuyM,0B,kDAG2C,IAAxB3zB,EAAwB,uDAAZ5+K,KAAKsrG,MACnCmnG,EAAwB,GACxB18L,EAAc6oK,EAAU5oK,aAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASmoL,EAAU+zB,mBAC5Ex6L,EAAiBnY,KAAKsrG,MAAMnzF,eAC9BpC,IACF6oK,EAAUnB,WAAW97F,SAASvjF,SAAQ,SAACiF,GACjCA,EAAQM,UAAUkS,eAAeE,EAAY/N,KAC/C3E,EAAQM,UAAUkS,eAAeE,EAAY/N,IAAI5J,SAAQ,SAAC8X,GACxD,IAAKu8L,EAAsBt4M,SAAS+b,GAAc,CAChD,IAAMiK,EAASpK,EAAYI,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAOkO,KACpC,SAAjBiK,EAAOjpB,QACJihB,GAAmBA,IAAmBA,EAAey6L,WACxDH,EAAsB19M,KAAKmhB,GAEH,2BAAjBiK,EAAOjpB,QACXihB,GAAmBA,GAAkBA,EAAey6L,WACvDH,EAAsB19M,KAAKmhB,GAG7Bu8L,EAAsB19M,KAAKmhB,UAMrClW,KAAKs9K,SAAS,CACZm1B,wBACA18L,mB,+BAaG,WAMH88L,EAAsB,KAC1B,GAAI7yM,KAAK+G,MAAM0rM,sBAAsBh+M,QAAUuL,KAAK+G,MAAMgP,aAAe/V,KAAKsrG,MAAMhtF,gBAAgB7pB,OAAQ,CAC1G,IAAMq+M,EAAgB9yM,KAAKsrG,MAAMhtF,gBAAgBxS,MAAK,SAAAo0K,GAAA,OAAaA,EAAUnzF,gBAAkB,EAAKhmF,MAAMgP,YAAY/N,MAClH8qM,IACFD,EAAsBC,EAAcjjL,UAIxC,OAAO7vB,KAAK+G,MAAM0rM,sBAAsBh+M,OACtCuL,KAAKsrG,MAAM7qG,SACT,+BAAKmqF,UAAU,OACb,8BAAIA,UAAW,2CACb,8BAAIA,UAAW,gCACXioH,EAA+C,GAAzB,wBACtB/1B,QAAS98K,KAAKuyM,uBAChB,oCAAM,4CAAkBvqM,GAAG,+BAE5BhI,KAAK+G,MAAM0rM,sBAAsB3qM,KAAI,SAAC8oF,EAAehjF,GACpD,IAAMq7H,EAAoB,EAAKliI,MAAMgP,YAAYI,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAO4oF,KAC/E,OACE,8BAAIhG,UAAW,4BAA8Bq+C,EAAkB/xI,MAAMyH,QAAQ,KAAK,IAAIrC,eACnFu2M,IAAwBjiH,EAAgB,uBAAyB,IAChEp5F,IAAK,cAAcoW,EAAOkvK,QAAS,kBAAM,EAAKw1B,qBAAqB1hH,EAAe,EAAK7pF,MAAMgP,YAAY/N,MAC3G,oCAAOihI,EAAkB/xI,aAOnC,+BAAK0zF,UAAU,gBACb,8BAAIA,UAAU,qBACZ,8BAAIA,UAAW,4DACXioH,EAA6D,GAAvC,sCACtB/1B,QAAS98K,KAAKuyM,uBAChB,gCAAM3nH,UAAU,kCACd,4CAAkB5iF,GAAG,kCAGxBhI,KAAK+G,MAAM0rM,sBAAsB3qM,KAAI,SAAC8oF,EAAehjF,GACpD,IAAMq7H,EAAoB,EAAKliI,MAAMgP,YAAYI,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAO4oF,KAC/E,OACE,8BAAIhG,UAAW,wDAA0Dq+C,EAAkB/xI,MAAMyH,QAAQ,KAAK,IAAIrC,eAC/Gu2M,IAAwBjiH,EAAgB,qCAAuC,IAC9Ep5F,IAAK,cAAcoW,EAAOkvK,QAAS,kBAAM,EAAKw1B,qBAAqB1hH,EAAe,EAAK7pF,MAAMgP,YAAY/N,MAC3G,gCAAM4iF,UAAU,mCAChB,gCAAMA,UAAU,kCAAkCq+C,EAAkB/xI,aAO9E,S,kBAhICgrJ,UAAY,CAEjBzhJ,SAAU,UAAU2hJ,KACpBq7B,WAAY,UAAU9lL,OAAOshH,WAC7B05F,gBAAiB,UAAUnwK,OAAOy2E,Y,cA0IvB,IAAAnN,UAVS,SAACxzG,GAAD,MAAY,CAClC0d,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,oBAGV,SAAC2F,GAAD,MAAe,CACxCkL,mBAAoB,SAAC7Q,GAAD,OAAqB2F,EAASiuL,EAAQ/iL,mBAAmB7Q,QAGhE,CAA6C8zL,I,kJCtL5D,QACA,Q,IACA,Q,IACA,MACA,Q,IACA,Q,qDAEah5B,K,YAEX,WAAYC,EAAUv6F,EAASv7E,IAAU,yGAEnCu7E,GAAYu6F,GAAY91K,IAAa,EAAAC,aAAa02B,UACpD,EAAKze,aAAe,GACpB,EAAKmmE,kBAAoB,GACzB,EAAKslG,gBAAkB,GACvBxyL,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKroE,aAAaqoE,GAAc,GAChC,EAAKlC,kBAAkBkC,GAAc,GACrC,EAAKojG,gBAAgBpjG,GAAc,MAErC,EAAKsO,qBAAsB,EAC3B,EAAKknF,sBAAuB,EAC5B,EAAKC,uBAAyB,EAC9B,EAAKpzJ,cAAgB,KACrB,EAAK6gE,mBAAqB,KAC1B,EAAKmf,cAAgB,KACrB,EAAKzf,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKC,oBAAsB,KAC3B,EAAKG,6BAA+B,KAEpC,EAAKp2D,SAAU,EACf,EAAK4/G,iBAAkB,EACvB,EAAKj1H,OAAS,KACd,EAAKs+J,qBAAsB,EAC3B,EAAKC,qBAAsB,EAC3B,EAAKC,wBAA0B,GAC/B,EAAKC,gBAAkB,MAErBN,IACF,EAAK31K,cAAgB,GACrB,EAAKqb,aAAe,IAEjB+/D,GAAYu6F,IACf,EAAK11K,UAAY,KACjB,EAAKkjF,MAAQ,IAAI,EAAJ,QAAU,MACvB,EAAKluE,mBAAqB,KAC1B,EAAKoS,UAAY,IAEnB,EAAKlP,SAAW,GA1CuB,E,iFAgExBk3L,GAA8G,IAA7FnhF,EAA6F,uDAAlF,IAAMohF,IAA4E,yDAAxD9qH,EAAwD,uDAA3C,GAA2C,OAAvC+qH,EAAuC,uDAA1B,KAAMC,EAAoB,wDAI7H,IAFA,0GAAuBH,EAAiBnhF,EAAUohF,EAAa9qH,EAAY+qH,EAAYC,GAEnE,iBAAhBlzM,KAAKsG,QAA6C,uBAAhBtG,KAAKsG,OAAiC,CAC1E,IAAM6qC,EAAanxC,KAAKU,YAAYywC,WAE9Bn7B,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5Cm9L,EAAYn9L,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,QACxE08M,GAAahiK,GACfz8C,OAAOmc,KAAK7Q,KAAKyb,cAAcrd,SAAQ,SAAA8gB,GACrC,IAAK,IAAI3qB,EAAI,EAAGA,EAAI,EAAKknB,aAAayD,GAAYzqB,OAAQF,IAAK,CAC7D,IAAM8O,EAAU,EAAKoY,aAAayD,GAAY3qB,GAC1C8O,EAAQM,UAAUkS,eAAes9L,EAAUnrM,KAAK,WAClD,IAAMorM,EAAY/vM,EAAQM,UAAUkS,eAAes9L,EAAUnrM,IAAI,GAC/CmpC,EAAW11B,aAAayD,GAAYjf,MAAK,SAAAozM,GACzD,OAAOA,EAAkB1vM,UAAUkS,eAAes9L,EAAUnrM,KACzDqrM,EAAkB1vM,UAAUkS,eAAes9L,EAAUnrM,IAAI7N,SAASi5M,QAGrE/vM,EAAQugF,0BAA2B,GAPa,U,8CAsBtCntF,EAAMS,GAC5B,OAAO8I,KAAK8S,SAASrc,IAASuJ,KAAK8S,SAASrc,GAAMwJ,MAAK,SAAA25K,GACrD,OAAOA,IAAc,EAAAzhJ,SAASC,MAAQxwB,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAKquF,EAAWntF,GAAK,OAAS,IAAAlB,MAAKquF,EAAW1iL,GAAO,S,sDAIxG8pF,GAAmB,WACjD,OAAOA,EAAkBnjF,OAAM,SAACujF,GAC9B,OAAO,EAAK0D,wBAAwB1D,EAAUF,SAAUE,EAAUE,gB,6BA9DzD7lE,K,eAIX,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKyb,aAAaP,EAAOwmE,0B,kCAEhBjmE,K,eAIhB,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAK4hF,kBAAkB1mE,EAAOwmE,0B,kCAGrC,IAAMxmE,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKknL,gBAAgBhsK,EAAOwmE,4B,qLCtEvC,O,OACA,O,IACA,M,IACA,QACA,OAEYwwH,E,wJAAZ,O,mDAEO,IAAMoB,EAAsBA,EAAtBA,oBAAsB,SAACj9L,EAAD,GAAsC,IAA7BwZ,EAA6B,EAA7BA,SAAUk9D,EAAmB,EAAnBA,cAChDn/E,GAAQ,aAAUyI,EAAO,CAAC02E,kBAM9B,OALIn/E,GAAS,EACXyI,EAAM1gB,OAAOiY,EAAO,EAAG,CAACiiB,WAAUk9D,kBAElC12E,EAAMthB,KAAK,CAAC86B,WAAUk9D,kBAEjB12E,GAGHk9L,G,gBAQJ,WAAYjoG,IAAO,gGACXA,IADW,SA6GnBgnG,qBAAuB,SAACziL,EAAUk9D,GAChC,EAAKue,MAAMn8E,mBAAmBmkL,EAAoBA,GAApBA,qBAAwB,EAAKhoG,MAAMhtF,kBAAkB,CAACuR,WAAUk9D,mBAC9F,EAAKue,MAAMkoG,yBA7GX,EAAKzsM,MAAQ,CACX0rM,sBAAuB,GACvB18L,YAAa,IAJE,E,oFASjB/V,KAAK0yM,0BAA0B1yM,KAAKsrG,S,gDAGZszE,GACpBA,EAAUnB,YAAcz9K,KAAKsrG,MAAMmyE,YAAcmB,EAAUnB,WAAW5hK,WAAa7b,KAAKsrG,MAAMmyE,WAAW5hK,UAC3G7b,KAAK0yM,0BAA0B9zB,K,kGAkFe,IAAxBA,EAAwB,uDAAZ5+K,KAAKsrG,MACnCv1F,EAAc6oK,EAAU5oK,aAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASmoL,EAAU+zB,mBAC5EF,EAAwBc,EAAgBE,yBAC5C70B,EAAU5oK,aAAc4oK,EAAU+zB,gBAAiB/zB,EAAUnB,WAAYz9K,KAAKsrG,MAAMnzF,gBAElFpC,GACF/V,KAAKs9K,SAAS,CACZm1B,wBACA18L,kB,+BAUG,WAcP,OAAO/V,KAAK+G,MAAM0rM,sBAAsBh+M,OACtC,+BAAKm2F,UAAW5qF,KAAKsrG,MAAM7qG,SAAW,cAAgB,iBACpD,8BAAImqF,UAAU,aACZ,8BAAIA,UAAW,uCACXkyF,QAAS98K,KAAKsrG,MAAMkoG,uBACtB,4CAAkBxrM,GAAG,8BAEtBhI,KAAK+G,MAAM0rM,sBAAsB3qM,KAAI,SAAC8oF,EAAehjF,GACpD,IAAMq7H,EAAoB,EAAKliI,MAAMgP,YAAYI,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAO4oF,KAC/E,OACE,8BAAIhG,UAAW,oCAAsCq+C,EAAkB/xI,MAAMyH,QAAQ,KAAK,IAAIrC,cAC1F9E,IAAK,cAAcoW,EAAOkvK,QAAS,kBAAM,EAAKw1B,qBAAqB1hH,EAAe,EAAK7pF,MAAMgP,YAAY/N,MAC3G,oCACE,4CAAkBA,GAAIihI,EAAkB/xI,eAOlD,Q,gDApH0B8e,EAAc28L,EAAiBl1B,EAAYtlK,GAAsC,IAAtBmG,EAAsB,uDAAJ,GACrGm0L,EAAwB,GACxB18L,EAAcC,EAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASk8M,KAC9D,GAAI58L,GAAe0nK,EAAWhiK,aAAc,CAC1C,IAAMi4L,EAAuC,eAArB39L,EAAYtf,KAAyBgnL,EAAWk2B,YAAcl2B,EAAW97F,SAGjG+xH,EAAet1M,SAAQ,SAACiF,GAClBA,EAAQM,UAAUkS,eAAeE,EAAY/N,KAAOsW,EAAgBzgB,OAAM,SAAAivF,GAC1E,OAAOzpF,EAAQM,UAAUkS,eAAei3E,EAAaC,gBAChD1pF,EAAQM,UAAUkS,eAAei3E,EAAaC,eAAe5yF,SAAS2yF,EAAaj9D,cAE1FxsB,EAAQM,UAAUkS,eAAeE,EAAY/N,IAAI5J,SAAQ,SAAC8X,GACxD,IAAKu8L,EAAsBt4M,SAAS+b,GAAc,CAEhD,IAAMiK,EAASpK,EAAYI,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAOkO,KACrDiK,IACmB,SAAjBA,EAAOjpB,QACJihB,GAAmBA,IAAmBA,EAAey6L,WAUxDH,EAAsB19M,KAAKmhB,GAEH,2BAAjBiK,EAAOjpB,QACXihB,GAAmBA,GAAkBA,EAAey6L,WACvDH,EAAsB19M,KAAKmhB,GAU7Bu8L,EAAsB19M,KAAKmhB,WAmBzC,OAAOu8L,M,kBAnGFvwD,UAAY,CACjBsxD,sBAAuB,UAAUz0B,KAAK9lE,WACtCx4G,SAAU,UAAU2hJ,KACpBq7B,WAAY,UAAU9lL,Q,cAqKX,IAAAm0G,UAVS,SAACxzG,GAAD,MAAY,CAClC0d,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,oBAGV,SAAC2F,GAAD,MAAe,CACxCkL,mBAAoB,SAAC7Q,GAAD,OAAqB2F,EAASiuL,EAAQ/iL,mBAAmB7Q,QAGhE,CAA6Ci1L,I,6FC5L5D,O,WACA,M,IAEA,QACA,QACA,SACA,QACA,Q,0DAEA,IAAMK,EAAmB,SAACtoG,GAAU,IAE3BjoG,EAAkCioG,EAAlCjoG,QAAS4T,EAAyBq0F,EAAzBr0F,YAAaxW,EAAY6qG,EAAZ7qG,SAFK,GAGA,IAAA0gJ,WAAS,GAHT,qBAG3B0yD,EAH2B,KAGhBtrL,EAHgB,QAIM,IAAA44H,UAAS,IAJf,qBAI3Bt9I,EAJ2B,KAIbiwM,EAJa,QAKc,IAAA3yD,WAAS,IAAA/7I,SAAU,UAAOvE,aALxC,qBAK3BkzM,EAL2B,KAKTC,EALS,MAiBlC,IAAAryF,YAAU,WATe,IACjBr+G,EAGA2wM,EAMN1rL,GAAa,GACbyrL,GAAoB,IAAA5uM,SAAU,UAAOvE,aAV/ByC,EAAO7C,GAAYA,EAAZA,YACT,EAAAgwE,gBAAgBC,OAChB,IAAAtrE,SAAU,UAAOvE,YAAc,EAAA4vE,gBAAgBE,OAAS,EAAAF,gBAAgBG,MACtEqjI,GAAgB,IAAA7wM,qBAAoBC,EAASC,GACnDwwM,EAAgBG,GAAiBA,EAAjBA,kDASf,CAACh9L,IAYJ,OAAKpT,GAAgBkwM,EAEjB,+BAAKnpH,UAAU,qBACb,+BAAKA,UAAW,2BACX7rF,IAAA,iDACAm1M,IAAI,MAMb,+BAAKtpH,UAAU,qBACZ/mF,EACG,+BAAK+mF,UAAW,4BAA8BipH,EAAY,qCAAuC,IAC5F90M,IAAK8E,EACLswM,OAAQ,WACN5rL,GAAa,IAEf6rL,QA5BY,WACnB3zM,GAAYszM,EACdD,oDACUC,IACVxrL,GAAa,GACburL,GAAgB,IAAA1wM,qBAAoBC,EAAS,EAAAotE,gBAAgBE,SAC7DqjI,GAAoB,KAuBXE,IAAI,KACT,KACHL,EAAY,wCAAoB,OAKvCD,EAAiB1xD,UAAY,CAC3B7+I,QAAS,UAAU1L,OAAOshH,WAC1Bx4G,SAAU,UAAU2hJ,M,UAGPwxD,G,8LC/DSS,EAXxB,I,EAAA,O,oCACA,QAUe,SAASA,EAA8BhxM,GAA6D,IAApDd,EAAoD,uDAAxC,GAAIiG,EAAoC,uDAArB,EAAG6hB,EAAkB,aAE7GkG,EAAoD,SAA1CltB,EAAQM,UAAU2wM,aAAa5zK,OACzCv3B,EAAW,EACTorM,EAAelxM,EAAQM,UAAU4wM,aAEvC,GAAI3sM,MAAMC,QAAQ0sM,IAAiBA,EAAa9/M,OAK9C,IAHA,IAAM+/M,EAAwBjyM,EAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAMnD,eAAiBA,KAC3EisM,GAAiB,EAHiC,WAK7ClgN,GACP,IAAMmgN,EAAOH,EAAahgN,GACtBogN,EAAY,EAIhB,GAAID,GAAQA,EAAKE,SAAU,CACzB,IAAuB,IAAnBF,EAAKE,SAAiB,CACxB,IAAIC,EAAkB,EACtBL,EAAsBp2M,SAAQ,SAACgI,GACzBA,EAASE,OAAOnM,SAAS,gBAC3B06M,GAAmBzuM,EAAS+C,aAGhCwrM,EAAYE,MACP,CACL,IAAMC,EAAmBN,EAAsB1oM,MAAK,SAAC1F,GACnD,OAAOsuM,EAAKE,WAAaxuM,EAASC,YAAY1C,UAAUqE,MAEtD8sM,IACFH,EAAYG,EAAiB3rM,UAGjC,IAAI7T,GAAS,EAEXy/M,EAAUn1M,SAAS+0M,GACnBK,EAAUp1M,SAAS80M,EAAKx9M,OAC1B,OAAQw9M,EAAKO,YACX,IAAK,IACH3/M,EAAqB,IAAXy/M,GAA4B,IAAZC,GAAyBD,EAASC,EAC5D,MACF,IAAK,KACH1/M,EAASy/M,GAAUC,EACnB,MACF,IAAK,IACH1/M,EAASy/M,IAAWC,EACpB,MACF,IAAK,IACH1/M,EAASy/M,EAASC,EAClB,MACF,IAAK,KACH1/M,EAASy/M,GAAUC,EACnB,MACF,IAAK,SACH1/M,EAAS+0B,GAAoBA,EAAiBpqB,MAAK,SAAAgkI,GACjD,OAAOA,EAAUj3H,aAAexE,GAAgBy7H,EAAUnzH,sBACrDpc,OAAOmc,KAAKozH,EAAUnzH,sBAAsB7Q,MAAK,SAAAzI,GAClD,OAAOysI,EAAUnzH,qBAAqBtZ,GAAKyZ,iBACtCgzH,EAAUnzH,qBAAqBtZ,GAAKyZ,gBAAgBtN,UAAUqE,KAAO0sM,EAAKE,eAKpFt/M,IACEm/M,IACHlkL,GAAWA,EACXkkL,GAAiB,GAEnBtrM,GAAsBwrM,KA1DnBpgN,EAAI,EAAGA,EAAIggN,EAAa9/M,OAAQF,IAAK,EAArCA,GAkEX,OAHIg8B,IAAYpnB,IACdA,EAAW,GAEN,CAACA,WAAU+rM,WAAY3kL,GAWInjB,EAAvBA,qBAAuB,SAAC/J,EAAS8xM,EAAcC,EAAehsM,GACzE,IAAMisM,OAAuC,IAAlBD,EAAiCA,EAAgB/xM,EAAQM,UAAUwxM,GAC9F,OAAI9xM,EAAQiyM,iBAAmBlsM,GAAkB/F,EAAQiyM,gBAAgB1gN,eAAewU,IACnF/F,EAAQiyM,gBAAgBlsM,GAAgBxU,eAAeugN,GACrC,eAAjBA,EACiB,UAAMhzM,WAAWwD,gBAA7B+B,SACM+H,gBAAkF,iBAAxDpM,EAAQiyM,gBAAgBlsM,GAAgBmsM,aACtElyM,EAAQiyM,gBAAgBlsM,GAAgBmsM,aAEoB,iBAAtDlyM,EAAQiyM,gBAAgBlsM,GAAgBosM,UACnDnyM,EAAQiyM,gBAAgBlsM,GAAgBosM,UACuB,iBAAvDnyM,EAAQiyM,gBAAgBlsM,GAAgBqsM,WAC9CpyM,EAAQiyM,gBAAgBlsM,GAAgBqsM,WACxCJ,EAEDhyM,EAAQiyM,gBAAgBlsM,GAAgB+rM,GAE1CE,GAjBF,IA0BMK,EAAyBA,EAAzBA,uBAAyB,WAAyE,IAAxEC,EAAwE,uDAA9D,cAAel6M,EAA+C,wDAA9B,IAAAW,2BAC3Ew5M,EAAmB,GACvB,OAAQn6M,GACN,IAAK,UACHm6M,EAAgC,gBAAZD,EAA6B,mBAAqB,4BACtE,MACF,IAAK,WACHC,EAAgC,gBAAZD,EAA6B,eAAiB,6BAKtE,OAAOC,GAWIh8G,EAAmBA,EAAnBA,iBAAmB,SAACv2F,GAAsG,IAA7FsyM,EAA6F,uDAAnF,cAAevsM,EAAoE,uDAAnD,GAAI3N,EAA+C,wDAA9B,IAAAW,2BAMjGw5M,EAAmBF,EAAuBC,EAASl6M,GAEzD,GAAI4H,EAAQiyM,iBAAmBlsM,GAAkB/F,EAAQiyM,gBAAgB1gN,eAAewU,IACnF/F,EAAQiyM,gBAAgBlsM,GAAgBxU,eAAeghN,GAC1D,OAAQvyM,EAAQiyM,gBAAgBlsM,GAAgBwsM,GAGlD,IAAMC,EAAexyM,EAAQM,UAAUkyM,aACvC,GAAIjuM,MAAMC,QAAQguM,IAAiBA,EAAaphN,OAAQ,CACtD,IAAMqhN,EAA4B,gBAAZH,EAA4B,oBAAsB,mBACxE,OAAOE,EAAa51M,MAAK,SAAA81M,GAAA,OAAsBA,EAAmBC,OAASv6M,GAAkBs6M,EAAmBD,MAGlH,OAAQzyM,EAAQM,UAAUiyM,IAGtBK,EAA2C,SAAC5yM,GAChD,GAAIuE,MAAMC,QAAQxE,EAAQM,UAAUuyM,8BAAgC7yM,EAAQM,UAAUuyM,4BAA4BzhN,SAAW4O,EAAQ8yM,4CAA6C,CAChL,IAAM58M,EAAS8J,EAAQ3C,YACjBwa,EAAS3hB,EAAO2hB,QAAU3hB,EAAOmH,YAAYwa,OAC/CA,EAAOk7L,kBAAoB78M,EAAOquL,iBAC/BvkL,EAAQiyM,kBACXjyM,EAAQiyM,gBAAkB,IAE5B5gN,OAAOmc,KAAKtX,EAAOs0L,iBAAiBzvL,SAAQ,SAAAixD,GAC1C,IAAMgnJ,EAAQn7L,EAAOk7L,iBAAiBtqM,MAAK,SAAA68K,GAAA,OAASA,EAAMlyL,OAAS44D,KACnE,GAAKgnJ,EAGL,IAAK,IAAI9hN,EAAI,EAAGA,EAAI8O,EAAQM,UAAUuyM,4BAA4BzhN,OAAQF,IAAK,CAC7E,IAAM+hN,EAAmCjzM,EAAQM,UAAUuyM,4BAA4B3hN,GACvF,GAAI+hN,EAAiCC,8BAAgCF,EAAMruM,GAAI,CAmB7E,GAlBK3E,EAAQiyM,gBAAgBjmJ,KAC3BhsD,EAAQiyM,gBAAgBjmJ,GAAa,IAEQ,OAA3CinJ,EAAiC9zM,QACnCa,EAAQiyM,gBAAgBjmJ,GAAWomJ,WAAaa,EAAiC9zM,OAErC,OAA1C8zM,EAAiC5zM,OACnCW,EAAQiyM,gBAAgBjmJ,GAAWmmJ,UAAYc,EAAiC5zM,MAE1B,OAApD4zM,EAAiCx9F,iBACnCz1G,EAAQiyM,gBAAgBjmJ,GAAWkmJ,aAAee,EAAiCx9F,gBAEhC,OAAjDw9F,EAAiC/lM,cACnClN,EAAQiyM,gBAAgBjmJ,GAAWmnJ,UAAYF,EAAiC/lM,aAE9E+lM,EAAiC9vM,eACnCnD,EAAQiyM,gBAAgBjmJ,GAAW7oD,aAAe8vM,EAAiC9vM,cAEjFoB,MAAMC,QAAQyuM,EAAiCT,eAAiBS,EAAiCT,aAAaphN,OAAQ,CACxH,IAAMgiN,EAAYH,EAAiCT,aAAa/pM,MAAK,SAAA4qM,GAAA,MAA4B,aAAjBA,EAAQV,QAClFW,EAAYL,EAAiCT,aAAa/pM,MAAK,SAAA4qM,GAAA,MAA4B,YAAjBA,EAAQV,QACpFS,IACFpzM,EAAQiyM,gBAAgBjmJ,GAAWunJ,4BAA8BH,EAAUI,iBAC3ExzM,EAAQiyM,gBAAgBjmJ,GAAWynJ,cAAgBL,EAAUM,mBAE3DJ,IACFtzM,EAAQiyM,gBAAgBjmJ,GAAW2nJ,2BAA6BL,EAAUE,iBAC1ExzM,EAAQiyM,gBAAgBjmJ,GAAW4nJ,kBAAoBN,EAAUI,wBAInE1zM,EAAQiyM,gBAAgBjmJ,GAAWunJ,2BAC/BvzM,EAAQM,UAAUuyM,4BAA4Br4M,OAAM,SAAAq5M,GAAA,OAAQA,EAAKC,eAAe9zM,EAAQM,UAAUwzM,WACtG9zM,EAAQiyM,gBAAgBjmJ,GAAWynJ,aAAeR,EAAiCQ,aAEnFzzM,EAAQiyM,gBAAgBjmJ,GAAW2nJ,0BACjC3zM,EAAQM,UAAUuyM,4BAA4Br4M,OAAM,SAAAq5M,GAAA,OAAQA,EAAKE,eAAe/zM,EAAQM,UAAUyzM,WACpG/zM,EAAQiyM,gBAAgBjmJ,GAAW4nJ,iBAAmBX,EAAiCe,aAEzF,WAINh0M,EAAQ8yM,6CAA8C,GAG1D,OAAO9yM,GAG6B0tG,EAAzBA,uBAAyB,SAAC1tG,EAASyzG,GAAsD,IAA7BwgG,EAA6B,uDAAP,GAE7F,IAAKj0M,IAAYA,EAAQM,UACvB,OAAO,EAKT,IAFAN,EAAU4yM,EAAyC5yM,IAEvCM,UAAU4C,cACpB,OAAoC,SAA7BnN,SAASC,SAASmC,OACpB,GAAIs7G,GAAwD,QAA5BA,IACjCld,EAAiBv2F,EAAS,cAAei0M,GAC7C,OAAO,EACD,GAAIxgG,GAAwD,QAA5BA,IAClCld,EAAiBv2F,EAAS,cAAei0M,KACzC19G,EAAiBv2F,EAAS,aAAci0M,GAC5C,OAAO,EACF,GAAIj0M,EAAQM,UAAU2wM,aAAc,CACzC,IAAM9nM,EAAa,UAAMrK,WACzB,OAAOkyM,EACLhxM,EACAmJ,EAAWpK,UAAUG,UACrBiK,EAAWU,YAAYD,iBACvBT,EAAWmE,YAAY0Z,kBAG3B,OAAO,I,kKCrQT,MACA,OACA,O,IAEA,MACA,Q,uDAEMktL,E,yOAEJxwM,MAAQ,CACN2pG,QAAQ,EACR8mG,UAAU,G,iHAGc54B,GAAW,WAC/BA,EAAU/8J,oBAAoB2L,OAASxtB,KAAKsrG,MAAMzpF,oBAAoB2L,KACxEkhE,YAAW,WACT,EAAK4uF,SAAS,CACZ5sE,QAAQ,MAET,IACOkuE,EAAU/8J,oBAAoB2L,MAAQxtB,KAAKsrG,MAAMzpF,oBAAoB2L,MAC/ExtB,KAAKs9K,SAAS,CACZk6B,UAAU,EACV9mG,QAAQ,IACP,WACDhiB,YAAW,WACT,EAAK4uF,SAAS,CACZk6B,UAAU,MAEX,U,+BAKA,MAC8Bx3M,KAAKsrG,MAAMzpF,oBAAzC2L,EADA,EACAA,KAAM+uE,EADN,EACMA,KAAMrmD,EADZ,EACYA,MAAOH,EADnB,EACmBA,QAE1B,OAAOvoB,GAAQxtB,KAAK+G,MAAMywM,SACxB,+BAAK5sH,UAAW,mCAAqC5qF,KAAK+G,MAAM2pG,OAAS,gCAAkC,KACzG,+BAAK9lB,UAAU,oBACb,+BAAKA,UAAW,kDAAoD2R,IACpE,+BAAK3R,UAAU,0BACb,6BAAGA,UAAU,aAAY,4CAAkB5iF,GAAIkuC,KAC/C,6BAAG00C,UAAU,mBACX,gCAAMA,UAAU,yBAAwB,4CAAkB5iF,GAAI+tC,SAKpE,S,GA3C0B,UAAM81D,W,WAsDzB,IAAAC,UANS,SAACxzG,GACvB,MAAO,CACLupB,oBAAqBvpB,EAAMgR,YAAYuY,uBAIH,GAAzB,CAA6B01L,GAEFE,EAA7BA,2BAA6B,WAAmD,IAAlDvhK,EAAkD,uDAA1C,sCAC7C98C,SAASC,SAASo4F,gBAA6B,wCAAVv7C,IACvCA,EAAQ,wCAEN,UAAM/zC,WAAWmH,YAAYuY,sBAC/B1pB,OAAOwpJ,aAAaxpJ,OAAOu/M,oBAC3B,UAAMzzL,UAAS,IAAArC,yBAAwB,CACrC4L,MAAM,MAGV,UAAMvJ,UAAS,IAAArC,yBAAwB,CACrC4L,MAAM,EACN+uE,KAAM,YACNrmD,QACAH,QAAS,2CAEX59C,OAAOu/M,mBAAqBhpH,YAAW,WACrC,UAAMzqE,UAAS,IAAArC,yBAAwB,CACrC4L,MAAM,OAEP,O,qKCnFL,M,IACA,Q,IACA,QACA,Q,mDAEA,IAUM,EAVAmqL,EAAe,SAACh4M,EAAOE,GAC3B,IAAMilD,EAAS1rD,SAAS8oD,cAAc,UACtC4C,EAAOnlD,MAAQA,EACfmlD,EAAOjlD,OAASA,EAChB,IAAI+3M,EAAU9yJ,EAAOsqC,WAAW,MAGhC,MAAO,CAACtqC,SAAQ8yJ,YAGZC,GAAA,gCAAa,WAAOn/E,EAAQo/E,EAAa73F,GAA5B,8BAAoC38G,EAApC,uDAA2C,KAAMy0M,EAAjD,uDAAoE,GAAIC,EAAxE,aAAiFC,EAAjF,+HAGbH,GAAeA,EAAYrjN,SAC7BikI,EAASA,EAAO1xH,QAAO,SAAA0nD,GAAA,OAASA,GAASA,EAAM3vD,MAAQ+4M,EAAY39M,SAASu0D,EAAM3vD,SAG9EY,EAAQ2D,EAAOA,EAAK3D,MAAQ,IAC5BE,EAASyD,EAAOA,EAAKzD,OAAS,IAC9BqqI,EAAW,KACXguE,EAAY,MAGZC,EAAgBR,EAAah4M,EAAOE,IAC5B+3M,QAAQzlD,UAAY,UAClCgmD,EAAcP,QAAQnlD,SAAS,EAAG,EAAG0lD,EAAcrzJ,OAAOnlD,MAAOw4M,EAAcrzJ,OAAOjlD,QAChFu4M,EAAgBT,EAAaztE,EAAUguE,GAGzCH,EAAiBtjN,UACb4jN,EAAgBV,EAAah4M,EAAOE,IAC5B+3M,QAAQU,yBAA2B,UACjD5/E,EAAOt6H,SAAQ,SAACm6M,GACd,IAAM1xH,EAAQkxH,EAAiBjsM,MAAK,SAAA+6E,GAAA,OAASA,EAAMn4B,QAAU6pJ,EAAYx5M,OACzE,GAAI8nF,EACF,GAAIA,EAAM2xH,YAAoD,YAArCp/M,SAASC,SAASoC,eAA+B,CACxE28M,EAAcR,QAAQn9I,UAAU,EAAG,EAAGyvE,EAAUguE,GAChD,IAAIO,EAAa5xH,EAAM2xH,WAAW,GAAK3xH,EAAM2xH,WAAW,GACpDE,EAAc7xH,EAAM2xH,WAAW,GAAK3xH,EAAM2xH,WAAW,GACzDJ,EAAcR,QAAQtoH,UAAUipH,EAAa,EAAG,EAAGE,EAAYC,EAAa7xH,EAAM2xH,WAAW,GAAI3xH,EAAM2xH,WAAW,GAAIC,EAAYC,GAClIN,EAAcR,QAAQtoH,UAAU8oH,EAActzJ,OAAQ,EAAG,EAAGolF,EAAUguE,EAAU,EAAG,EAAGv4M,EAAOE,QACxF,GAAIgnF,EAAM8xH,gBAAiB,CAChC,IAAMC,EAAM/xH,EAAM8xH,gBAElBN,EAAcT,QAAQtoH,UAAUipH,EAAa,EAAG,EAAGK,EAAIj5M,MAAOi5M,EAAI/4M,OAAQ+4M,EAAIC,aAAa,GAAG,GAAID,EAAIC,aAAa,GAAG,GAAID,EAAIj5M,MAAOi5M,EAAI/4M,aAEzI04M,EAAY54M,MAAQA,EACpB44M,EAAY14M,OAASA,EACrBw4M,EAAcT,QAAQtoH,UAAUipH,EAAa,EAAG,EAAG54M,EAAOE,OAIhE,aAAcw4M,EAAcvzJ,OAAQmzJ,GACpCE,EAAcP,QAAQtoH,UAAU+oH,EAAcvzJ,OAAQ,EAAG,EAAGnlD,EAAOE,EAAQ,EAAG,EAAGF,EAAOE,IA3CzE,kJA+CNi5M,EA/CM,UAgDTjyH,EAAQo5B,EAAOn0G,MAAK,SAAAm0G,GAAA,OAAUA,EAAOvxD,QAAUoqJ,EAAY/5M,UACpDg5M,EAAiBl6M,OAAM,SAAAgpF,GAAA,OAASA,EAAMn4B,QAAUoqJ,EAAY/5M,OAjD1D,qBAkDT8nF,EAAM2xH,WAlDG,wBAmDXJ,EAAcR,QAAQn9I,UAAU,EAAG,EAAGyvE,EAAUguE,GAC5CO,EAAa5xH,EAAM2xH,WAAW,GAAK3xH,EAAM2xH,WAAW,GACpDE,EAAc7xH,EAAM2xH,WAAW,GAAK3xH,EAAM2xH,WAAW,GACzDJ,EAAcR,QAAQtoH,UAAUwpH,EAAa,EAAG,EAAGL,EAAYC,EAAa7xH,EAAM2xH,WAAW,GAAI3xH,EAAM2xH,WAAW,GAAIC,EAAYC,GAtDvH,UAuDLP,EAAcP,QAAQtoH,UAAU8oH,EAActzJ,OAAQ,EAAG,EAAGolF,EAAUguE,EAAU,EAAG,EAAGv4M,EAAOE,GAvDxF,uCAkEXi5M,EAAYn5M,MAAQA,EACpBm5M,EAAYj5M,OAASA,EAnEV,UAoELs4M,EAAcP,QAAQtoH,UAAUwpH,EAAa,EAAG,EAAGn5M,EAAOE,GApErD,YAsET,UAAKY,aAAL,cAtES,kCAuEL,IAAIrK,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAvEtC,oDA+CSqiI,EA/CT,0YA4EVy/E,EAAcrzJ,OAAOirC,UAAU,aAAcioH,IA5EnC,+EAAb,iDA+EAe,EAA2B,WAC/B,IAAMpzM,EAAkB,UAAMxD,WAAWwD,gBACzC,GAAIA,EAAgBqzM,wBAAyB,CAC3C,IAAIvgG,EAAY,GAMhB,OALA9yG,EAAgBqzM,wBAAwB56M,SAAQ,SAAC66M,GAC3CA,EAAaxgG,YACfA,EAAYwgG,EAAaxgG,cAGtBA,EAET,MAAO,IA+DIygG,GArD4Bv2B,EAA5BA,0BAA4B,SAACznK,GAA8D,IAAtD5X,EAAsD,uDAA/C,KAAM00M,EAAyC,uDAA/B,GAAKC,EAA0B,wDACtG,IAAK/8L,EACH,OAAO9kB,QAAQC,QAAQ0iN,KAEzB,IAAMI,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBAEzDp5F,EAAS/kG,EAAOo+L,UAAUH,GAAkB,GAClD,IAAKl5F,EAAOxrH,OACV,OAAO2B,QAAQC,QAAQ0iN,KAGzB,IAAMQ,EAAmBL,EAAoBj5F,EAAQ/kG,GACjDs+L,EAAgB,IAAIpjN,SAAQ,SAACC,GAC/B,IAAIojN,EAAM,EACJ/gF,EAAS,GACTo/E,EAAc,GACpB73F,EAAO7hH,SAAQ,SAACyoF,GACd,IAAMn4B,EAAQ,IAAI8B,MAClB9B,EAAMkjC,YAAc,YACpBljC,EAAMiqJ,gBAAkB9xH,EAAM8xH,iBAAmB,KACjDjqJ,EAAMijD,OAAS9qB,EAAM8qB,QAAU,KAC/B+mB,EAAO3jI,KAAK25D,GACZA,EAAMojC,OAAS,aACb2nH,IACYx5F,EAAOxrH,QACjB4B,EAAQwhN,EAAWn/E,EAAQo/E,EAAa73F,EAAQ38G,EAAMi2M,EAAkBvB,EAASC,KAGrFvpJ,EAAMmjC,QAAU,WAEd75F,QAAQC,MAAM,sBAAwBy2D,EAAM3vD,KAC5C06M,IACA3B,EAAY/iN,KAAK25D,EAAM3vD,KACnB06M,IAAQx5F,EAAOxrH,QACjB4B,EAAQwhN,EAAWn/E,EAAQo/E,EAAa73F,EAAQ38G,EAAMi2M,EAAkBvB,EAASC,KAGrF,IACEvpJ,EAAM3vD,IAAM8nF,EAAMn4B,MAClB,MAAOv4D,GACP6B,QAAQ4B,IAAIzD,EAAG,wBAA0B0wF,EAAMn4B,cAIrD,OAAO8qJ,EAAc3nL,MAAK,SAAAswE,GAAA,OAAYA,MASL+2G,EAAtBA,oBAAsB,SAACj5F,EAAQ/kG,GAAkC,IAA1Bw+L,EAA0B,wDAC5E,GAAKx+L,GAAUA,EAAO4Z,aAAgB4kL,EACpC,OAAOz5F,EAAOj5G,QAAO,SAAC6/E,GAAD,OAAWA,EAAMO,QAAU,OAElD,IAAKlsE,EACH,MAAO,GAET,IAAMzkB,EAAOykB,EAAOwmE,uBACpB,OAAOu+B,EAAOj5G,QAAO,SAAC6/E,GACpB,OAAO3rE,EAAO+rE,SAASxwF,IAASykB,EAAO+rE,SAASxwF,GAAMkjN,YACpDjlN,OAAOyhB,OAAO+E,EAAO+rE,SAASxwF,GAAMkjN,YAAY15M,MAAK,SAAAmnF,GAAA,OAAUA,IAAWP,EAAMO,gB,oJClLtF,O,WACA,MACA,O,IACA,OACA,OAEA,QACA,QACA,Q,IACA,Q,IACA,O,IACA,MACA,Q,IACA,Q,IACA,OACA,QACA,QACA,QACA,QACA,Q,mDAEA,IAAMwyH,EAAgB,WACpB,MAAqC,cAA9B,IAAAx9M,4BAGHy9M,G,6OAmBJC,yBAA2B,SAACxuG,GAC1B,IAAMyuG,EAAwBzuG,EAAMuyE,cAAcv3K,OAE5CmwG,EAAamjG,IAEbI,EAAmBvjG,EAAaA,EAAbA,6CACnBwjG,EAAUxjG,EAAa,EAAKnL,MAAMixC,2BAA6B,EAAKjxC,MAAM8wC,mBAEhF49D,EAAiB57M,SAAQ,SAAAkI,GACvB,GAAIA,IAAWyzM,EACTC,EAAiB/5M,MAAK,SAAAi6M,GACxB,OAAQA,IAAcH,IAA2BE,EAAQC,GAAW//M,SAAS4/M,QAE7EzuG,EAAMuyE,cAAcs8B,yBAA0B,QAGhD,IAAKF,EAAQ3zM,GAAQnM,SAAS4/M,GAAwB,CACpD,IAAMK,GAAgB,IAAAj/L,oBAAmByzH,mBAAmBtoI,GACxD8zM,IACFA,EAAc5+L,KAAK2+L,yBAA0B,Q,EAOvDE,oCAAsC,SAAC/zM,GAAW,MAC1C2zM,EAAUL,IAAkB,EAAKtuG,MAAMixC,2BAA6B,EAAKjxC,MAAM8wC,mBACjFA,EAAqB69D,EAAQ,EAAK3uG,MAAMuyE,cAAcv3K,QACpDwqL,EAAgB10C,EAAmBz/H,WAAU,SAAA29L,GAAA,OAA4BA,IAA6Bh0M,KACxGwqL,GAAiB,EACnB10C,EAAmBzmJ,OAAOm7L,EAAe,GAEzC10C,EAAmBrnJ,KAAKuR,GAE1B,IAAIi0M,EAAsBN,EAAQ3zM,GAC5Bk0M,EAAiBD,EAAoB59L,WAAU,SAAA29L,GAAA,OAA4BA,IAA6B,EAAKhvG,MAAMuyE,cAAcv3K,UAOvI,OANIwqL,GAAiB,EACnBypB,EAAoB5kN,OAAO6kN,EAAgB,GAE3CD,EAAoBxlN,KAAK,EAAKu2G,MAAMuyE,cAAcv3K,QAEpD,EAAKm0M,sBAAsBn0M,EAAQ81I,EAAoBm+D,GACvD,qBACG,EAAKjvG,MAAMuyE,cAAcv3K,OAAS81I,IADrC,eAEG91I,EAASi0M,GAFZ,G,EA4BFE,sBAAwB,SAACn0M,EAAQ81I,EAAoBm+D,GACnD,EAAKjvG,MAAMuyE,cAAcs8B,yBAA2B/9D,EAAmBjiJ,SAASmM,GAChF,IAAM8zM,GAAgB,IAAAj/L,oBAAmByzH,mBAAmBtoI,GACxD8zM,IACFA,EAAc5+L,KAAK2+L,yBAA2BI,EAAoBpgN,SAAS,EAAKmxG,MAAMuyE,cAAcv3K,U,EAIxGo0M,yBAA2B,SAACp0M,GAC1B,UAAU66B,eAAe,uBAAyB76B,IAC/BszM,IAAkB,EAAKtuG,MAAMgxC,8BAAgC,EAAKhxC,MAAM6wC,uBAChF,EAAKk+D,oCAAoC/zM,K,EAGtDq0M,cAAgB,SAACr0M,EAAQ4U,GAAW,MACH,EAAKowF,MAA7B7wF,EAD2B,EAC3BA,KAAMtC,EADqB,EACrBA,eACb,GAAoB,UAAhBsC,EAAKvC,OAAoB,CAC3B,IAAM0E,EAAe1B,EAAOgb,wBAAwB5vB,GACpD,GAAIsW,EACF,OAAO,IAAAd,qBAAoBc,EAAcnC,EAAMtC,GAGnD,OAAQ7R,GACN,IAAK,aACL,IAAK,oBACH,MAAO,aACT,IAAK,aACL,IAAK,oBACH,MAAO,aACT,IAAK,2BACH,MAAO,gBACT,QACE,MAAO,K,EA8Mbs0M,aAAe,WACb,MAAwC,eAApC,EAAKtvG,MAAMuyE,cAAcv3K,OACvB,EAAKglG,MAAM3qF,YAAc,IACpB,4CAAkB3Y,GAAG,qDAErB,4CAAkBA,GAAG,qDAG1B,EAAKsjG,MAAM3qF,YAAc,IACpB,4CAAkB3Y,GAAG,qDACnB,EAAKsjG,MAAM3qF,YAAc,IAC3B,4CAAkB3Y,GAAG,sDAErB,4CAAkBA,GAAG,sD,EAKlC6yM,iBAAmB,SAACv0M,GAClB,IAAM4U,GAAS,IAAAC,oBACf,OAAO,EAAKmwF,MAAMuyE,cAAcv3K,SAAWA,GACA,YAArClN,SAASC,SAASoC,gBAA2C,6BAAX6K,IAChD4U,EAAOqmE,+BAA+BpnF,SAAS,M,EAGzD2gN,eAAiB,WACf,IAAMrkG,EAAamjG,IACbI,EAAmBvjG,EAAaA,EAAbA,6CAEnB2lC,GADU3lC,EAAa,EAAKnL,MAAMixC,2BAA6B,EAAKjxC,MAAM8wC,oBAC7C,EAAK9wC,MAAMuyE,cAAcv3K,QAE5D,IAAK81I,EACH,OAAO,KAGT,IAAMlhI,GAAS,IAAAC,oBAEf,OACE,mCAAU/P,KAAM,EACN2vM,YAAaf,EACbgB,gBAAgB,EAChBC,UAAW,EAAKL,gBACvBZ,EAAiBlyM,KAAI,SAAAxB,GACpB,IAAM40M,EAAiB,EAAKL,iBAAiBv0M,GAC7C,OACE,8BAAI9O,IAAK,kBAAkB8O,EACvBskF,UAAW,iCACb,gCAAMA,UAAW,kCACdswH,GAAkB9+D,EAAmBjiJ,SAASmM,GAAU,wBAA0B,KAClF40M,EAAiB,yBAA2B,IACzCp+B,QAAS,kBAAMo+B,GAAyB,EAAKR,yBAAyBp0M,MAC5E,gCAAMskF,UAAW,sBAAwBswH,EAAiB,gCAAkC,IACtFp+B,QAAS,kBAAMo+B,GAAyB,EAAKR,yBAAyBp0M,KACzE,EAAKq0M,cAAcr0M,EAAQ4U,U,2GAnXxClb,KAAK85M,yBAAyB95M,KAAKsrG,S,gDAGXszE,GACpBA,EAAUf,cAAcv3K,SAAWtG,KAAKsrG,MAAMuyE,cAAcv3K,QAC9DtG,KAAK85M,yBAAyBl7B,K,+BAuXzB,WAEP,GAAI5+K,KAAKsrG,MAAM6vG,eACb,OAAOn7M,KAAK86M,iBAGd,IAAMrkG,EAAamjG,IACbI,EAAmBvjG,EAAaA,EAAbA,6CAEnB2lC,GADU3lC,EAAaz2G,KAAKsrG,MAAMixC,2BAA6Bv8I,KAAKsrG,MAAM8wC,oBAC7Cp8I,KAAKsrG,MAAMuyE,cAAcv3K,QACtD4U,GAAS,IAAAC,oBAEf,OACE,+BAAKyvE,UAAW,YACb5qF,KAAKsrG,MAAM7qG,SAAW,oBAAsB,KAC5CT,KAAKsrG,MAAM8vG,YAAc,uBAAyB,KACnD,+BAAKxwH,UAAU,kBAAf,YACA,8BAAIA,UAAU,oBACXovH,EAAiBlyM,KAAI,SAAAxB,GAEpB,OADmB,EAAKu0M,iBAAiBv0M,GACrB,KAClB,8BAAI9O,IAAK8O,EACLskF,UAAW,sDAAwDtkF,GACpE81I,EAAmBjiJ,SAASmM,GAAU,sCAAwC,IAC7Ew2K,QAAS,kBAAM,EAAK49B,yBAAyBp0M,KAC/C,gCAAMskF,UAAU,kCAChB,gCAAMA,UAAU,iCAAiC,EAAK+vH,cAAcr0M,EAAQ4U,IAC5E,+BAAK0vE,UAAU,kCACb,kCAAQA,UAAW,4BAChBwxD,EAAmBjiJ,SAASmM,GAAU,qBAAuB,KAC9D,gCAAMskF,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,iC,kBApalFk6I,UAAY,CACjB27B,cAAe,UAAUlmL,OAAOshH,WAChCx4G,SAAU,UAAU2hJ,KACpBg5D,YAAa,UAAUh5D,KACvB+4D,eAAgB,UAAU/4D,M,EA8DrBi5D,gCAAkC,SAAC/0M,EAAQg1M,GAAqD,MAAjCC,EAAiC,uDAAP,GAC1Fn/D,EAAqBm/D,EAAwBD,GAC3CxqB,EAAgB10C,EAAmBz/H,WAAU,SAAA29L,GAAA,OAA4BA,IAA6Bh0M,KACxGwqL,GAAiB,EACnB10C,EAAmBzmJ,OAAOm7L,EAAe,GAEzC10C,EAAmBrnJ,KAAKuR,GAE1B,IAAIi0M,EAAsBgB,EAAwBj1M,GAC5Ck0M,EAAiBD,EAAoB59L,WAAU,SAAA29L,GAAA,OAA4BA,IAA6BgB,KAC1GxqB,GAAiB,EACnBypB,EAAoB5kN,OAAO6kN,EAAgB,GAE3CD,EAAoBxlN,KAAKumN,GAE3B,IAAME,EAAa5B,IAAkBA,EAAlBA,sDACnB,UAAM31L,SAASu3L,wBACZF,EAAqBl/D,IADT,eAEZ91I,EAASi0M,GAFG,M,EA0CV/sE,uBAAyB,SAACxkD,GAC/B,GAAI4wH,KAA8C,eAA1B5wH,EAAe1iF,OACrC,OAAO,EAFyC,IAI3CyO,EAAe,UAAM5S,WAArB4S,YACP,IAAKA,IAAgBnN,MAAMC,QAAQkN,EAAYiB,cAC7C,OAAO,EAET,IAAMylM,EAAY1mM,EAAYiB,aAAalK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,QAC/D,IAAKglN,IAAcA,EAAUzzM,KAAOyzM,EAAUtlM,OAC5C,OAAO,EAET,IAAMopK,GAAiB,IAAA5yF,sBAAqB3D,GAC5C,SAAKu2F,IAAmB33K,MAAMC,QAAQ03K,EAAek8B,EAAUzzM,OAGxD,CAAC,OAAQ,SAAU,gBAAiB,gBAAgB/H,MAAK,SAAAy7M,GAC9D,IAAMC,EAAkBF,EAAUtlM,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIv1F,QAAUwkN,KACnE,OAAOC,GAAmBp8B,EAAek8B,EAAUzzM,IAAI7N,SAASwhN,EAAgB3zM,Q,EAI7E0mI,oBAAsB,SAACktE,EAAoBjnM,GAAuE,IAAzDknM,EAAyD,uDAApC,KAAM5uE,EAA8B,wDACjHx2B,EAAamjG,IACbI,EAAmBvjG,EAAaA,EAAbA,6CACnB8kG,EAA0B,UAAMp5M,WAAW0rI,gBAC/Cp3B,EAAa,6BAA+B,sBAExCqlG,EAAgBF,EAAmBt1M,OACnC4U,GAAS,IAAAC,oBACTihI,EAAqBy/D,GACxBN,EAAwBO,GADA,wBACqBP,EAAwBO,KAAkB,GACpFhrB,EAAgB10C,EAAmBz/H,WAAU,SAAA29L,GAAA,OAA4BA,IAA6BwB,KACxGhrB,GAAiB,GACnB10C,EAAmBzmJ,OAAOm7L,EAAe,GAE3C,IAAMzrD,EAAkB,GA8CxB,OA7CAnqH,EAAOuZ,cAAcr2B,SAAQ,SAAA2oG,GACRA,EAAYhoF,aAClB3gB,SAAQ,SAACwuI,GACpB,IAAMmvE,EAAgBnvE,EAAYtmI,OAClC,GAAI0zM,EAAiB7/M,SAAS4hN,IAAmBA,IAAkBD,IAC7D1/D,EAAmBjiJ,SAASyyI,EAAYtmI,UAAYsmI,EAAYutE,yBAA0B,CAC9F,IAAMttE,EAAqB+uE,EAAmB55H,yCAC9C,GAAsC,IAAlC5oF,SAASC,SAASqC,YAEpB,KAD0B,UAAMyG,WAAzB0rI,gBACcW,wBAAwBlgF,aACpC1mD,MAAMC,QAAQ+kI,EAAYS,+BAAkCT,EAAYS,6BAA6BlzI,SAAS0yI,IAGrH,OADAxH,EAAgBtwI,KAAK,CAAC63I,cAAaC,qBAAoBl4H,eAAckJ,YAAa+9L,KAC3E,EAGX,IAAI9jH,EAAgB+hH,EAAoBp6C,6BAA6Bm8C,EAAoBhvE,GAYzF,GAXK90C,GAAuD,YAArC1+F,SAASC,SAASoC,gBACnCyf,EAAOqmE,+BAA+BpnF,SAAS,MAA2B,6BAAlB4hN,IAC5DjkH,EAAgB80C,EAAYnxH,aAAZ,+BACXmxH,EAAYnxH,aAAZ,8BAA0D3P,MAAK,SAACzI,GAEnE,OADoBA,EAAQ2+E,2CACL6qD,QAGvB/0C,EAAgB,CAACt8E,KAAMs8E,IAGvBA,IAAkBA,EAAct8E,KAAKooE,yBACnCqpD,IACFL,EAAYO,4BAA8BP,EAAYzmH,eAExD2xE,EAAct8E,KAAK4xH,kBAAkBz4H,GAChCi4H,EAAYutE,yBAA4B/9D,EAAmBjiJ,SAAS4hN,IACvElC,EAAoBwB,gCAAgCU,EAAeD,EAAeP,OAE/E,CACL,GAAI1B,EAAoBrsE,uBAAuBouE,GAC7C,OAAO,EAETv2E,EAAgBtwI,KAAK,CAAC63I,cAAaC,qBAAoBl4H,eAAckJ,YAAa+9L,YAKnF/B,EAAoBvtE,+BAA+BjH,EAAiBu2E,EAAoB3uE,I,EAG1FwyB,6BAA+B,SAAC5hJ,EAAajB,GAClD,IAAIqoE,SACE+2H,EAAkD,IAAlC5iN,SAASC,SAASqC,YAClCugN,EAAiD,eAAxBr/L,EAAatW,QAA2B01M,EACvE/2H,EAAWroE,EAAa8C,qBACxB,IAAMmtH,EAAqBhvH,EAAYmkE,yCACnCmsB,EAAmBlpB,EAASj+E,QAAO,SAAA2+E,GACrC,GAAIA,EAAWnqE,KAAKooE,yBAClB,OAAO,EAET,IAAML,EAAcoC,EAAWnqE,KAAKiE,yBAC9By8L,EAAev2H,EAAWnqE,KAAKwmE,yCACrC,OAAOuB,IAAgBA,IAAgBspD,GAAsBqvE,IAAiBrvE,MAEhF,GAAI1+B,EAAiB15G,OAAS,GAAKunN,EAAc,CAC/C,IACMG,EADe,UAAMh6M,WAAW4S,YAAYiB,aACLlK,MAAK,SAAAmK,GAAA,MAAuC,kBAA7BA,EAAMxf,MAAQ,IAAI0mB,UAC9E,GAAIg/L,EAAyB,CAC3B,IAAMC,GAAmB,IAAAh6H,sBAAqBvkE,EAAas+L,GAC3D,GAAIC,GAAoBA,EAAiB3nN,OAAQ,CAC/C,IAAM4nN,EAA+BluG,EAAiBnnG,QAAO,SAAA2Y,GAAA,OAAW,IAAAitE,2BAA0BjtE,EAAQnE,KAAM,CAAC,CAC/GuxE,cAAeovH,EAAwBn0M,GACvC6nB,SAAUusL,EAAiB,SAEzBC,EAA6B5nN,SAC/BuD,QAAQ4B,IAAI,uCAAwCyiN,GACpDluG,EAAmBkuG,KAK3B,GAAIJ,EAAwB,CAC1B,IAAMK,EAAgB1/L,EAAa2/L,8BACnC,GAAID,EAAe,CACjB,IAAME,EAAaruG,EAAiBnnG,QAAO,SAAA2Y,GAAA,OAAW/C,EAAa6/L,yBAAyB98L,EAAQnE,QAAU8gM,KAC9G,GAAIE,EAAW/nN,OAEb,OADAuD,QAAQ4B,IAAI,oBAAqB4iN,GAC1BA,EAAW,IAIxB,OAAOruG,EAAiB,IAAM,M,EAGzBm+B,+BAAiC,SAACjH,EAAiBu2E,GAAkD,IAA9B3uE,EAA8B,wDAC1G,GAAI5H,EAAgB5wI,OAAQ,CAC1B,IAAMgiH,EAAamjG,IACnBzhN,OAAOs0I,kBAAmB,GAC1B,IAAA7lH,gBACA,IAAMooH,EAAW3J,EAAgBv9H,KAAI,SAAC6kI,GACpC,IAAMC,EAAcD,EAAqBC,YACzC,OAAO,UAAW8vE,qBAAqB9vE,EAAaD,EAAqBE,oBACtEh7G,MAAK,SAAAswE,GACJ,SAASw6G,IAEP,IADsBf,EAAmBl7M,YACtBy5M,wBAAyB,CAC1C,IAAI/9D,EAAqB,UAAMj6I,WAAW0rI,gBACxCp3B,EAAa,6BAA+B,sBAExCq6E,EAAgB10C,EAAmBw/D,EAAmBt1M,QAAQqW,WAAU,SAAA29L,GAAA,OAA4BA,IAA6B1tE,EAAYtmI,UAInJ,GAHIwqL,GAAiB,GACnB10C,EAAmBw/D,EAAmBt1M,QAAQ3Q,OAAOm7L,EAAe,IAEjElkD,EAAYutE,wBAAyB,CACxC,IAAMrpB,EAAgB10C,EAAmBxP,EAAYtmI,QAAQqW,WAAU,SAAA29L,GAAA,OAA4BA,IAA6BsB,EAAmBt1M,UAC/IwqL,GAAiB,GACnB10C,EAAmBxP,EAAYtmI,QAAQ3Q,OAAOm7L,EAAe,GAGjE,IAAM0qB,EAAa/kG,EAAaA,EAAbA,sDACnB,UAAMxyF,SAASu3L,EAAWp/D,KAG9B,GAAIj6C,GAAYA,EAAS1tG,OAAQ,CAC/B,IAAIqjG,EAAgB+hH,EAAoBp6C,6BAA6B9yB,EAAqB9uH,YAAa+uH,GACvG,GAAI90C,EAAe,CACjB,IAAIskD,EAAqB,UAAMj6I,WAAW0rI,gBACxCp3B,EAAa,6BAA+B,sBAE1Cw2B,IACFL,EAAYO,4BAA8BP,EAAYzmH,eAExD2xE,EAAct8E,KAAK4xH,kBAAkBT,EAAqBh4H,cACrDi4H,EAAYutE,yBAA4B/9D,EAAmBw/D,EAAmBt1M,QAAQnM,SAASyyI,EAAYtmI,SAC9GuzM,EAAoBwB,gCAAgCzuE,EAAYtmI,OAAQs1M,EAAmBt1M,OAAQ81I,GAAoB,QAGzHugE,SAGFA,IAMF,OAJK/vE,EAAYS,+BACfT,EAAYS,6BAA+B,IAE7CT,EAAYS,6BAA6Bt4I,KAAK43I,EAAqBE,oBAC5D1qC,QAGb,OAAO/rG,QAAQ64I,IAAID,GAChBn9G,MAAK,WACJ15B,OAAOs0I,kBAAmB,EACY,IAAlCrzI,SAASC,SAASqC,cAItB,aAAEvD,QAAQ+pG,QAAQ,UAAYszB,eAC9B,UAAMvxG,UAAS,IAAAgP,sBACfy7D,YAAW,YACT,aAAEv2F,QAAQ+pG,QAAQ,UAAYszB,gBAC9B,IAAAljC,mBACC,KARD,IAAAA,sB,GA+HNg+F,EAAqB,CACzBn0C,8CACAG,+D,WAGa,IAAAyL,aACb,IAAAj8C,UAbsB,SAACxzG,GAAD,MAAY,CAClC8jJ,mBAAoB9jJ,EAAMu1I,gBAAgBuO,mBAC1CG,2BAA4BjkJ,EAAMu1I,gBAAgB0O,2BAClD57H,YAAaroB,EAAMgR,YAAYqX,YAC/BxI,eAAgB7f,EAAMqN,mBASG2qL,EAAzB,CAA6CupB,K,+HCxd/C,O,OACA,O,IACA,MAEA,Q,IACA,S,uDAEM+C,G,6OASJC,cAAe,E,EAkBf/+B,kBAAoB,SAAC3nL,GACdA,EAAEugB,OAAOuqI,QAAQ,uBAA0B9qJ,EAAEugB,OAAOuqI,QAAQ,8BAAgC,EAAK31C,MAAMtjG,KAAO,EAAKsjG,MAAMwxG,iBAC5H,EAAKxxG,MAAMtnF,aAAY,GACvB5qB,SAAS8pG,oBAAoB,QAAS,EAAK46E,mBAC3C,EAAK++B,cAAe,I,2GAnBtB78M,KAAKsrG,MAAMn8E,mBAAmB,M,gDAGNyvJ,GACpBA,EAAUV,aAAel+K,KAAKsrG,MAAM4yE,WAClCl+K,KAAKsrG,MAAM4yE,WAAaU,EAAUV,UAAU57J,OAAStiB,KAAKsrG,MAAM4yE,UAAU57J,QAC9EtiB,KAAKsrG,MAAMn8E,mBAAmB,IAC9BnvB,KAAKsrG,MAAM57E,mBAAmB,KAE5BkvJ,EAAUruJ,UAAYvwB,KAAK68M,eAC7B78M,KAAK68M,cAAe,EACpBzjN,SAASytD,iBAAiB,QAAS7mD,KAAK89K,sB,+BAa1C,OACE,+BAAKlzF,UAAW,qBAAuB5qF,KAAKsrG,MAAM/6E,QAAU,8BAAgC,KACzFvwB,KAAKsrG,MAAM/6E,SAAWvwB,KAAKsrG,MAAM4yE,UAChC,mCAAal2K,GAAIhI,KAAKsrG,MAAMtjG,GACfi8E,WAAYjkF,KAAKsrG,MAAMrnB,WACvB84H,wBAAyB/8M,KAAKsrG,MAAMyxG,wBACpC7+B,UAAWl+K,KAAKsrG,MAAM4yE,YAEjC,U,sBA1CHh8B,UAAY,CACjBl6I,GAAI,UAAUw6B,OAAOy2E,WACrBh1B,WAAY,UAAUzhD,OAAOy2E,WAC7B8jG,wBAAyB,UAAUh+B,KAAK9lE,WACxCilE,UAAW,UAAUvmL,Q,GAoDnB24L,EAAqB,CACzBnhK,wCACAO,wCACA1L,2B,WAEa,IAAA8nF,UAbS,SAACxzG,GACvB,MAAO,CACLwkN,eAAgBxkN,EAAMyc,YAAY8a,SAClCU,QAASj4B,EAAMyc,YAAYiP,YAC3Bg5L,cAAe1kN,EAAMyc,YAAYioM,iBASG1sB,EAAzB,CAA6CssB,I,+ECtElClmL,EAAbA,WAAa,CACxBC,QAAS,EACTC,QAAS,EACTqmL,SAAU,IAGsBllL,EAArBA,mBAAqB,CAChCC,IAAK,MACLrB,QAAS,UACTC,QAAS,UACTqmL,SAAU,YAGuBhlL,EAAtBA,oBAAsB,CACjC,UACA,UACA,YAEyCC,EAA9BA,4BAA8B,CACzC,WACA,UACA,WAGsBC,EAAXA,SAAW,CACtBC,IAAK,OAGmB8G,EAAbA,WAAa,GAESg+K,EAAtBA,oBAAsB,CAAC,KAAK,KAAK,KAAK,O,6NC7BnD,IAAY18L,E,wJAAZ,OAEgC28L,EAAnBA,iBAAmB,SAAC5uF,GAAD,MAAoB,CAClDnjH,KAAMoV,EAAM0gD,mBACZrgD,QAAS,CAAC0tG,mBAGgC6uF,EAA/BA,6BAA+B,SAACC,GAAD,MAAgC,CAC1EjyM,KAAMoV,EAAM4gD,4BACZvgD,QAAS,CAACw8L,+BAG4BC,EAA3BA,yBAA2B,SAACC,GAAD,MAA4B,CAClEnyM,KAAMoV,EAAM6gD,6BACZxgD,QAAS,CAAC08L,2BAGuBC,EAAtBA,oBAAsB,SAACC,GAAD,MAAuB,CACxDryM,KAAMoV,EAAM8gD,uBACZzgD,QAAS,CAAC48L,sBAGgBC,EAAfA,aAAe,SAACC,GAAD,MAAgB,CAC1CvyM,KAAMoV,EAAM+gD,gBACZ1gD,QAAS,CAAC88L,eAGgBC,EAAfA,aAAe,SAACC,GAAD,MAAY,CACtCzyM,KAAMoV,EAAMghD,gBACZ3gD,QAAS,CAACg9L,Y,gZCmDIC,eAAT,SAAwBC,EAASC,GAGtC,OAAOD,EAAQ3jM,EAAI4jM,EAAQ3jM,EAAI0jM,EAAQ1jM,EAAI2jM,EAAQ5jM,G,EAWrC6jM,oCAAT,SAA6CC,EAAeh4J,GAEjE,IAAMi4J,EAAsBC,EAA+BF,GAGrDG,EAA6B,GALqC,uBAMxE,YAAmBn4J,EAAnB,+CAA0B,KAAf6I,EAAe,QAExB,GAAIA,EAAK/mD,KAAOk2M,EAAcl2M,GAA9B,CAIA,IAAMs2M,GAAoB,IAAAvjI,+BAA8BojI,EAAoB1sJ,KAAM0sJ,EAAoB5lJ,GAAIxJ,EAAK0C,KAAM1C,EAAKwJ,IAAI,GAAM,GAEhI+lJ,GACFD,EAA2BtpN,KAAK,CAC9Bg6D,OACA/C,MAAOsyJ,MAjB2D,6EAsBxE,OAAOC,EAAmCL,EAAeG,I,EAgM3CG,0B,EAIAC,wB,EAKAC,qB,EA4BArmE,4BAAT,SAAqCpyF,GAE1C,OAAOA,EAAOj/C,QAAO,SAACglD,EAAOp+C,EAAOyI,GAElC,GAAc,IAAVzI,EACF,OAAO,EAET,IAAMinJ,EAAYx+I,EAAMzI,EAAQ,GAChC,OAAOo+C,EAAM5xC,IAAMy6I,EAAUz6I,GAAK4xC,EAAM3xC,IAAMw6I,EAAUx6I,M,EAI5CskM,e,EAOAC,8B,EAoBAC,mB,EAyCAxlE,uBAAT,SAAgCylE,EAAIC,EAAIC,EAAIC,EAAIxmE,GAErD,GAAIkmE,EAAaG,EAAIC,EAAIC,EAAIC,GAAK,CAMhC,OAzCJ,SAA0BC,EAAMC,GAC9B,GAAID,EAAK5kJ,MAAMlgD,IAAM8kM,EAAKpvM,IAAIsK,GAAK8kM,EAAK5kJ,MAAMlgD,IAAM+kM,EAAK7kJ,MAAMlgD,EAAG,CAChE,IAAMglM,EAAW,CAACF,EAAK5kJ,MAAMjgD,EAAG6kM,EAAKpvM,IAAIuK,GAAG3R,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,KACzDy2M,EAAW,CAACF,EAAK7kJ,MAAMjgD,EAAG8kM,EAAKrvM,IAAIuK,GAAG3R,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,KAE/D,OAAIw2M,EAAS,GAAKC,EAAS,IAAMA,EAAS,GAAKD,EAAS,GAC/C,EAGQh1M,KAAKwwH,IAAIwkF,EAAS,GAAIC,EAAS,IAAMj1M,KAAKywH,IAAIukF,EAAS,GAAIC,EAAS,IAIvF,GAAIH,EAAK5kJ,MAAMjgD,IAAM6kM,EAAKpvM,IAAIuK,GAAK6kM,EAAK5kJ,MAAMjgD,IAAM8kM,EAAK7kJ,MAAMjgD,EAAG,CAChE,IAAMilM,EAAW,CAACJ,EAAK5kJ,MAAMlgD,EAAG8kM,EAAKpvM,IAAIsK,GAAG1R,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,KACzD22M,EAAW,CAACJ,EAAK7kJ,MAAMlgD,EAAG+kM,EAAKrvM,IAAIsK,GAAG1R,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,KAE/D,OAAI02M,EAAS,GAAKC,EAAS,IAAMA,EAAS,GAAKD,EAAS,GAC/C,EAGQl1M,KAAKwwH,IAAI0kF,EAAS,GAAIC,EAAS,IAAMn1M,KAAKywH,IAAIykF,EAAS,GAAIC,EAAS,IAIvF,IAAMn9C,EAAew8C,EAA4BM,EAAMC,GACvD,GAAI/8C,GAAgBy8C,EAAiBz8C,EAAc88C,IAASL,EAAiBz8C,EAAc+8C,GACzF,OAAO/0M,KAAKynE,KAAKznE,KAAK0nE,IAAIswF,EAAahoJ,EAAI8kM,EAAK5kJ,MAAMlgD,EAAG,GAAKhQ,KAAK0nE,IAAIswF,EAAa/nJ,EAAI6kM,EAAK5kJ,MAAMjgD,EAAG,IAGxG,OAAO,EASiBmlM,CAFT,CAAEllJ,MAAOwkJ,EAAIhvM,IAAKivM,GAClB,CAAEzkJ,MAAO0kJ,EAAIlvM,IAAKmvM,KAGPxmE,EAE1B,OAAO,G,EAQOgnE,yBAAT,SAAkCx5J,GACvC,IAAKA,EAAOxxD,OACV,OAAO,KAKT,IAFA,IAAIirN,EAAcz5J,EAAO,GAEhB1xD,EAAI,EAAGA,EAAI0xD,EAAOxxD,OAAQF,KAC7B0xD,EAAO1xD,GAAG6lB,EAAIslM,EAAYtlM,GAEnB6rC,EAAO1xD,GAAG6lB,IAAMslM,EAAYtlM,GAAK6rC,EAAO1xD,GAAG8lB,EAAIqlM,EAAYrlM,KADpEqlM,EAAcz5J,EAAO1xD,IAMzB,OAAOmrN,G,EAQO3O,aAAT,SAAsB4O,GAE3B,OAAOA,EAAav1M,KAAKynE,KAAK,I,EAWhB2pH,sBAAT,SAA+BF,EAAWC,EAASnzI,GACxD,IAAMw3J,EAAU,CACdxlM,EAAGmhL,EAAQnhL,EAAIkhL,EAAUlhL,EACzBC,EAAGkhL,EAAQlhL,EAAIihL,EAAUjhL,GAGrBwlM,GAAU,IAAAvuI,kBAAiBgqH,EAAWC,GACtCukB,EAAc,CAClB1lM,EAAGwlM,EAAQxlM,EAAIylM,EACfxlM,EAAGulM,EAAQvlM,EAAIwlM,GAGXE,EAAW,CACf3lM,EAAGguC,EAAShuC,EAAIkhL,EAAUlhL,EAC1BC,EAAG+tC,EAAS/tC,EAAIihL,EAAUjhL,GAGtB2lM,EAAaD,EAAS3lM,EAAI0lM,EAAY1lM,EAAI2lM,EAAS1lM,EAAIylM,EAAYzlM,EACnE4lM,EAAoB71M,KAAKywH,IAAI,EAAGzwH,KAAKwwH,IAAIolF,EAAYH,IACrDzlM,EAAIkhL,EAAUlhL,EAAI0lM,EAAY1lM,EAAI6lM,EAClC5lM,EAAIihL,EAAUjhL,EAAIylM,EAAYzlM,EAAI4lM,EAExC,MAAO,CACL7lM,EAAGA,EACHC,EAAGA,I,EAiESgoJ,oCAAT,SAA6CnwH,GAClD,IAAKA,GAA8B,IAAnBA,EAAQz9C,OAAc,OAAO,EAK7C,IAHA,IAAIopD,EAAO,EACLqiK,EAAchuK,EAAQ,GAEnB39C,EAAI,EAAGA,EAAI2rN,EAAYzrN,OAAS,EAAGF,IAAK,qBAC9B2rN,EAAY3rN,GADkB,GACxC6+E,EADwC,KACpCC,EADoC,qBAE9B6sI,EAAY3rN,EAAI,GAFc,GAExC++E,EAFwC,KAEpCC,EAFoC,KAG/C11B,GAAQu1B,EAAKG,EAAKD,EAAKD,EAGzB,OAAOjpE,KAAK4pE,IAAIn2B,EAAO,I,EAGTsiK,iBAAT,SAA2BC,EAAan6J,GAC7C,IAAIo6J,EAAe,KACf1qI,EAAc2qI,IAFmC,uBAIrD,YAAoBr6J,EAApB,+CAA4B,KAAjB+F,EAAiB,QACpBvF,EAAWr8C,KAAKynE,KACpBznE,KAAK0nE,IAAI9lB,EAAM5xC,EAAIgmM,EAAYhmM,EAAG,GAAKhQ,KAAK0nE,IAAI9lB,EAAM3xC,EAAI+lM,EAAY/lM,EAAG,IAEvEosC,EAAWkvB,IACbA,EAAclvB,EACd45J,EAAer0J,IAVkC,6EAcrD,OAAOq0J,GAtlBT,Y,IACA,Q,mDAW6DE,EAAhDA,8CAAgD,SAACC,EAAYC,EAAYC,GACpF,OAAQA,EAActmM,EAAIomM,EAAWpmM,IAAMqmM,EAAWpmM,EAAImmM,EAAWnmM,IAAMqmM,EAAcrmM,EAAImmM,EAAWnmM,IAAMomM,EAAWrmM,EAAIomM,EAAWpmM,IAO1I,SAASgjH,EAAUujF,EAAIC,EAAIC,EAAIhvD,EAAI3wB,EAAIC,GACrC,OALF,SAAsBw/E,EAAIC,EAAIC,EAAIhvD,GAChC,OAAO8uD,EAAK9uD,EAAK+uD,EAAKC,EAIfC,CAAa5/E,EAAKy/E,EAAIx/E,EAAKy/E,EAAIC,EAAKF,EAAI9uD,EAAK+uD,GAGtD,SAASG,EAAUJ,EAAIC,EAAIC,EAAIhvD,EAAI3wB,EAAIC,GAGrC,OAFiBw/E,GAAMz/E,GAAMA,GAAM2/E,GAAQF,GAAMz/E,GAAMA,GAAM2/E,KAC5CD,GAAMz/E,GAAMA,GAAM0wB,GAAQ+uD,GAAMz/E,GAAMA,GAAM0wB,GAgBzBr6B,EAAzBA,uBAAyB,SAACmpF,EAAIC,EAAIC,EAAIhvD,EAAI3wB,EAAIC,EAAIttD,EAAIC,GAA4B,IAAxBktI,IAAwB,yDACvFC,EAAK7jF,EAAUujF,EAAIC,EAAIC,EAAIhvD,EAAI3wB,EAAIC,GACnC+/E,EAAK9jF,EAAUujF,EAAIC,EAAIC,EAAIhvD,EAAIh+E,EAAIC,GACnCqtI,EAAK/jF,EAAU8D,EAAIC,EAAIttD,EAAIC,EAAI6sI,EAAIC,GACnCQ,EAAKhkF,EAAU8D,EAAIC,EAAIttD,EAAIC,EAAI+sI,EAAIhvD,GAEzC,GAAIovD,EAAKC,EAAK,GAAKC,EAAKC,EAAK,EAAG,CAC9B,IAAMzlI,EAAKk2E,EAAK+uD,EACVhlI,EAAK+kI,EAAKE,EACVhlI,EAAKF,EAAKglI,EAAK/kI,EAAKglI,EACpB9kI,EAAKhI,EAAKqtD,EACVplD,EAAKmlD,EAAKrtD,EACVmI,EAAKF,EAAKolD,EAAKnlD,EAAKolD,EAEpBllD,EAAMN,EAAKI,EAAKD,EAAKF,EAC3B,GAAY,IAARK,EACF,OAAO,KAEP,IAAM7hE,GAAK2hE,EAAKF,EAAKD,EAAKI,GAAMC,EAC1B5hE,GAAKshE,EAAKK,EAAKF,EAAKD,GAAMI,EAChC,MAAO,CAAC7hE,EAAGC,GAIf,OAAK2mM,GAAuB,IAAPC,GAAmB,IAAPC,IAAaH,EAAUJ,EAAIC,EAAIC,EAAIhvD,EAAI3wB,EAAIC,KAAO4/E,EAAUJ,EAAIC,EAAIC,EAAIhvD,EAAIh+E,EAAIC,IAIrG,IAAPmtI,GAAYF,EAAUJ,EAAIC,EAAIC,EAAIhvD,EAAI3wB,EAAIC,IACrC,IAAP+/E,GAAYH,EAAUJ,EAAIC,EAAIC,EAAIhvD,EAAIh+E,EAAIC,IACnC,IAAPqtI,GAAYJ,EAAU7/E,EAAIC,EAAIttD,EAAIC,EAAI6sI,EAAIC,IACnC,IAAPQ,GAAYL,EAAU7/E,EAAIC,EAAIttD,EAAIC,EAAI+sI,EAAIhvD,GACpC,MAPA,MA6DJ,IAAM0sD,EAAqCA,EAArCA,mCAAqC,SAACxvJ,EAAMsvJ,GACvD,IAAIgD,EAAkC,KAClC1rI,EAAc2qI,IAFoE,uBAGtF,YAA2BjC,EAA3B,+CAAuD,KAA5Cj8C,EAA4C,QAC/CxvF,GAAW,IAAAZ,aAAYjjB,EAAK0C,KAAM1C,EAAKwJ,IACvC9R,GAAW,IAAA6qB,kBAAiBsB,EAAUwvF,EAAap2G,OACrDvF,EAAWkvB,IACbA,EAAclvB,EACd46J,EAAkCj/C,IARgD,6EAYtF,OAAOi/C,GAGIjD,EAAiCA,EAAjCA,+BAAiC,SAACrvJ,GAC7C,IAAM6jB,GAAW,IAAAZ,aAAYjjB,EAAK0C,KAAM1C,EAAKwJ,IACvCua,EACD/jB,EAAK0C,KAAKp3C,EAAI00C,EAAKwJ,GAAGl+C,EADrBy4D,EAED/jB,EAAKwJ,GAAGn+C,EAAI20C,EAAK0C,KAAKr3C,EAI3B,MAAO,CACLq3C,KAAMmhB,EACNra,GAAI,CACFn+C,EAAGw4D,EAASx4D,EAAI04D,EAChBz4D,EAAGu4D,EAASv4D,EAAIy4D,KAsITwuI,GAhIazpE,EAAbA,WAAa,SAAC5xF,GAEzBA,EAAOv9C,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE0R,IAAMzR,EAAEyR,EAAI1R,EAAEyR,EAAIxR,EAAEwR,EAAIzR,EAAE0R,EAAIzR,EAAEyR,KAKxD,IAHA,IAAMknM,EAAQ,SAAC5qN,EAAGgS,EAAGC,GAAP,OAAcD,EAAEyR,EAAIzjB,EAAEyjB,IAAMxR,EAAEyR,EAAI1jB,EAAE0jB,IAAM1R,EAAE0R,EAAI1jB,EAAE0jB,IAAMzR,EAAEwR,EAAIzjB,EAAEyjB,IAExE+6B,EAAQ,GACL5gD,EAAI,EAAGA,EAAI0xD,EAAOxxD,OAAQF,IAAK,CACtC,KAAO4gD,EAAM1gD,QAAU,GAAK8sN,EAAMpsK,EAAMA,EAAM1gD,OAAS,GAAI0gD,EAAMA,EAAM1gD,OAAS,GAAIwxD,EAAO1xD,KAAO,GAChG4gD,EAAMo/F,MAERp/F,EAAMpgD,KAAKkxD,EAAO1xD,IAIpB,IADA,IAAM6gD,EAAQ,GACL7gD,EAAI0xD,EAAOxxD,OAAS,EAAGF,GAAK,EAAGA,IAAK,CAC3C,KAAO6gD,EAAM3gD,QAAU,GAAK8sN,EAAMnsK,EAAMA,EAAM3gD,OAAS,GAAI2gD,EAAMA,EAAM3gD,OAAS,GAAIwxD,EAAO1xD,KAAO,GAChG6gD,EAAMm/F,MAERn/F,EAAMrgD,KAAKkxD,EAAO1xD,IAQpB,OAJA4gD,EAAMo/F,MACNn/F,EAAMm/F,MAGCp/F,EAAMgY,OAAO/X,IAqGWksK,EAApBA,kBAAoB,SAAC9pE,GAChC,OAAOA,EAAa1vI,KAAI,SAAA8xC,GAAA,OACtBo/F,EAAiBp/F,QAIRo/F,EAAmBA,EAAnBA,iBAAmB,SAAC76D,GAC/B,OAAOA,EAAYr2E,KAAI,SAAAkkD,GAAA,OAASw1J,EAAWx1J,OAGvCw1J,EAAa,SAACx1J,GAElB,MAAO,CACL5xC,EAAGhQ,KAAKC,MAFQ,IAEF2hD,EAAM5xC,GAFJ,IAGhBC,EAAGjQ,KAAKC,MAHQ,IAGF2hD,EAAM3xC,GAHJ,IAIhBrS,GAAIgkD,EAAMhkD,KAKP,SAASw2M,EAAwBhnE,GACtC,OAAOA,EAAa1vI,KAAI,SAAAq2E,GAAA,MAAe,CAACsgI,EAAsBtgI,OAGzD,SAASsgI,EAAsBtgI,GACpC,OAAOA,EAAYr2E,KAAI,SAAAkkD,GAAA,MAAS,CAACA,EAAM5xC,EAAG4xC,EAAM3xC,MAI3C,SAASqkM,EAAmB+C,GACjC,OAAI75M,MAAMC,QAAQ45M,IAAaA,EAAShtN,OAC/BgtN,EAAS,GAAG,GAAG35M,KAAI,SAAA45M,GAAA,MAAU,CAAEtnM,EAAGsnM,EAAM,GAAIrnM,EAAGqnM,EAAM,OAEvD,GAWuBtpE,EAAnBA,iBAAmB,SAACjlG,GAC/B,IACMsuK,EAAWjD,EADK8C,EAAkBnuK,IAQxC,OAAOurK,EANQ,UAAgBiD,MAAMF,KAsBhC,SAAS9C,EAAaG,EAAIC,EAAIC,EAAIC,GAEvC,OAAQF,EAAG3kM,EAAI0kM,EAAG1kM,IAAM6kM,EAAG5kM,EAAI2kM,EAAG3kM,KAAQ4kM,EAAG7kM,EAAI4kM,EAAG5kM,IAAM2kM,EAAG1kM,EAAIykM,EAAGzkM,IAChEjQ,KAAKwwH,IAAIkkF,EAAG1kM,EAAG2kM,EAAG3kM,IAAMhQ,KAAKywH,IAAImkF,EAAG5kM,EAAG6kM,EAAG7kM,IAAMhQ,KAAKywH,IAAIikF,EAAG1kM,EAAG2kM,EAAG3kM,IAAMhQ,KAAKwwH,IAAIokF,EAAG5kM,EAAG6kM,EAAG7kM,IACzFhQ,KAAKwwH,IAAIkkF,EAAGzkM,EAAG0kM,EAAG1kM,IAAMjQ,KAAKywH,IAAImkF,EAAG3kM,EAAG4kM,EAAG5kM,IAAMjQ,KAAKywH,IAAIikF,EAAGzkM,EAAG0kM,EAAG1kM,IAAMjQ,KAAKwwH,IAAIokF,EAAG3kM,EAAG4kM,EAAG5kM,GAG1F,SAASukM,EAA4BM,EAAMC,GAChD,IAAMyC,EAAK1C,EAAKpvM,IAAIuK,EAAI6kM,EAAK5kJ,MAAMjgD,EAC7BwnM,EAAK3C,EAAK5kJ,MAAMlgD,EAAI8kM,EAAKpvM,IAAIsK,EAC7B0nM,EAAKF,EAAK1C,EAAK5kJ,MAAMlgD,EAAIynM,EAAK3C,EAAK5kJ,MAAMjgD,EAEzC0nM,EAAK5C,EAAKrvM,IAAIuK,EAAI8kM,EAAK7kJ,MAAMjgD,EAC7B2nM,EAAK7C,EAAK7kJ,MAAMlgD,EAAI+kM,EAAKrvM,IAAIsK,EAC7B6nM,EAAKF,EAAK5C,EAAK7kJ,MAAMlgD,EAAI4nM,EAAK7C,EAAK7kJ,MAAMjgD,EAEzC6nM,EAAcN,EAAKI,EAAKD,EAAKF,EAEnC,OAAoB,IAAhBK,EACK,KAIA,CAAE9nM,GAFE0nM,EAAKE,EAAKC,EAAKJ,GAAMK,EAEpB7nM,GADDunM,EAAKK,EAAKF,EAAKD,GAAMI,GAK7B,SAASrD,EAAiB/hI,EAAIivH,GACnC,OAAO3hM,KAAKwwH,IAAImxE,EAAIzxI,MAAMlgD,EAAG2xL,EAAIj8L,IAAIsK,IAAM0iE,EAAG1iE,GAAK0iE,EAAG1iE,GAAKhQ,KAAKywH,IAAIkxE,EAAIzxI,MAAMlgD,EAAG2xL,EAAIj8L,IAAIsK,IACvFhQ,KAAKwwH,IAAImxE,EAAIzxI,MAAMjgD,EAAG0xL,EAAIj8L,IAAIuK,IAAMyiE,EAAGziE,GAAKyiE,EAAGziE,GAAKjQ,KAAKywH,IAAIkxE,EAAIzxI,MAAMjgD,EAAG0xL,EAAIj8L,IAAIuK,GAyHtD8nM,EAAnBA,iBAAmB,SAACl8J,GAC/B,OAAOA,EAAO3kD,QAAO,SAAC8gN,EAASp2J,GAC7B,OAAIA,EAAM3xC,EAAI+nM,EAAQ/nM,GAAM2xC,EAAM3xC,IAAM+nM,EAAQ/nM,GAAK2xC,EAAM5xC,EAAIgoM,EAAQhoM,EAC9D4xC,EAEFo2J,IACNn8J,EAAO,KAGiCo8J,EAAhCA,8BAAgC,SAACp8J,EAAQm8J,GACpD,OAAOn8J,EAAOn+C,KAAI,SAAAkkD,GAAA,MAAU,CAC1B5xC,EAAG4xC,EAAM5xC,EAAIgoM,EAAQhoM,EACrBC,EAAG2xC,EAAM3xC,EAAI+nM,EAAQ/nM,OAIUioM,EAAtBA,oBAAsB,SAACr8J,GAClC,IAAIm8J,SAASG,SAAUC,SAAYC,SAG7BC,EAAkB,SAACxrN,GAA0B,IAAnByrN,EAAmB,uDAAP,GACpCC,EAASx4M,KAAK0nE,IAAI,GAAI6wI,GAC5B,OAAOv4M,KAAKC,MAAMnT,EAAQ0rN,GAAUA,GAIhC7pE,EAAgB9yF,EAAOn+C,KAAI,SAAAkkD,GAAA,MAAU,CACzC5xC,EAAGsoM,EAAgB12J,EAAM5xC,GACzBC,EAAGqoM,EAAgB12J,EAAM3xC,OAIrBu6H,EAAOxqI,KAAKwwH,IAAL,MAAAxwH,MAAA,aAAY2uI,EAAcjxI,KAAI,SAAAjQ,GAAA,OAAKA,EAAEuiB,OAC5Cy6H,EAAOzqI,KAAKywH,IAAL,MAAAzwH,MAAA,aAAY2uI,EAAcjxI,KAAI,SAAAjQ,GAAA,OAAKA,EAAEuiB,OAC5C06H,EAAO1qI,KAAKwwH,IAAL,MAAAxwH,MAAA,aAAY2uI,EAAcjxI,KAAI,SAAAjQ,GAAA,OAAKA,EAAEwiB,OAC5C06H,EAAO3qI,KAAKywH,IAAL,MAAAzwH,MAAA,aAAY2uI,EAAcjxI,KAAI,SAAAjQ,GAAA,OAAKA,EAAEwiB,OAgBlD,OAbA0+H,EAAc36I,SAAQ,SAAA4tD,GAChBA,EAAM5xC,IAAMw6H,GAAQ5oF,EAAM3xC,IAAMy6H,EAClCstE,EAAUp2J,EACDA,EAAM5xC,IAAMy6H,GAAQ7oF,EAAM3xC,IAAMy6H,EACzCytE,EAAWv2J,EACFA,EAAM5xC,IAAMw6H,GAAQ5oF,EAAM3xC,IAAM06H,EACzCytE,EAAax2J,EACJA,EAAM5xC,IAAMy6H,GAAQ7oF,EAAM3xC,IAAM06H,IACzC0tE,EAAcz2J,MAKbo2J,GAAYG,GAAaC,GAAeC,EAOtC,CAACL,EAASG,EAAUE,EAAaD,IANtCxqN,QAAQC,MAAM,SAAUguD,GACxBjuD,QAAQC,MAAM,mCAAoC,CAACmqN,UAASG,WAAUC,aAAYC,gBAC3E,Q,oJCljBX,O,WACA,MACA,O,IACA,OACA,O,IAEA,O,IACA,O,IACA,QACA,QACA,QACA,Q,uDAEMI,G,oPAeJC,Y,6BAAa,+FACLjlC,EAAgB,EAAKvyE,MAAMuyE,cACjC,UAAU18I,eAAe,kBAAoB08I,EAAcv3K,QACrD4U,GAAS,IAAAC,oBACV0iK,EAAc/6F,WAAY+6F,EAAc13J,gBAAiBjL,EAAO4Z,YAJ1D,iCAKH,IAAAk9D,gBAAe6rF,EAAc13J,eAL1B,8BAOT03J,EAAc/6F,UAAY+6F,EAAc/6F,SACxC+6F,EAAcjrF,gBACdirF,EAAchrF,qBATL,SAWX,aAAE16F,QAAQ+pG,QAAQ,UAAYszB,eAC1B,EAAKlqB,MAAMy3G,cACb,EAAKz3G,MAAMy3G,eAEb,EAAKC,cACL,EAAK13G,MAAMr4E,oBACXy7D,YAAW,WACT,EAAKs0H,gBACJ,GAnBQ,8C,gGAuBX,IAAMnlC,EAAgB79K,KAAKsrG,MAAMuyE,cAE3B4d,EAAY5d,GADM,CAAC,cAAe,iBAAkB,yBACP1jL,SAAS0jL,EAAcv3K,QAEpE+lJ,EAAewxB,GADK,CAAC,aAAc,aAAc,4BACC1jL,SAAS0jL,EAAcv3K,QAE/E,GAAItG,KAAKsrG,MAAM23G,YACb,OACE,+BAAKr4H,UAAU,kBACb,gCAAMA,UAAU,kBAAiB,4CAAkB5iF,GAAG,mCACtD,kCAAQ4iF,UAAW,4BAA8BizF,IAAkBA,EAAc/6F,SAAW,qBAAuB,IAC3Gg6F,QAAS98K,KAAK8iN,YACpB,gCAAMl4H,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,uBAQ/E,IADe,IAAAmT,oBACJ2Z,YAAa,CACtB,IAAK+oJ,IAAkBA,EAAc13J,cACnC,OAAO,KAET,IAAM7D,EAAOtiB,KAAKsrG,MAAM7qG,UAAqC,0BAAzBo9K,EAAcv3K,QAAsCtG,KAAKsrG,MAAM3qF,YAAc,IAC7G,iBACA,iCACJ,OAAO,mCAAyBg4E,YAAaklF,EAAc13J,cAC3B48L,aAAc/iN,KAAKsrG,MAAMy3G,aACzBzgM,KAAMA,EACN4gM,UAAU,IAG5C,OACE,kCAAQt4H,UAAW,YAChBizF,IAAkBA,EAAc/6F,SAAW,qBAAuB,MACjE9iF,KAAKsrG,MAAM7qG,UAAYg7L,GAAapvC,EAAe,mBAAqB,IACpEywB,QAAS98K,KAAK8iN,YACpB,gCAAMl4H,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,0B,kBA9EtEk6I,UAAY,CACjB27B,cAAe,UAAUlmL,OAAOshH,WAChCx4G,SAAU,UAAU2hJ,KACpB6gE,YAAa,UAAU7gE,KACvB2gE,aAAc,UAAUhkC,M,GA4FtBuR,EAAqB,CACzBr9J,uC,WAGa,IAAA64E,UAhBS,SAACxzG,GAKvB,MAAO,CACLwkJ,+BALuCxkJ,EAAMu1I,gBAAxCiP,+BAMLn8H,YALoBroB,EAAMgR,YAArBqX,YAMLwiM,YALoB7qN,EAAMouB,wBAArBy8L,eAa+B7yB,EAAzB,CAA6CuyB,I,iFCnH5D,YACA,SACA,Q,IACA,MACA,Q,IAMA,OACA,S,6DAEe,SAACz1L,GAA+G,IAAjGg2L,EAAiG,wDAA/E1mM,EAA+E,uDAArE,KAAMkrK,EAA+D,uDAA9C,GAAIy7B,EAA0C,uDAAxB,KAAMtyM,EAAkB,uDAAN,EACjHmK,GAAS,IAAAC,oBACTpU,EAAQ,UAAM5E,WAFyG,EAGxE4E,EAAMgf,eAApD9H,EAHsH,EAGtHA,eAAgB6H,EAHsG,EAGtGA,2BACjBrC,EAAc1c,EAAMu8M,WAAW7/L,YAC/B1F,EAAmB6pK,IAAmBlrK,GAAWA,EAAQlB,KAAOkB,EAAQlB,KAAKosK,eAAiB7gL,EAAMu9K,QAAQvmK,kBAElH,UAAMkG,UAAS,IAAAH,wBAAsB,EAAM7F,GAAkBwF,EAAY,KACzE,UAAMQ,UAAS,IAAAuC,+BAA6B,IAC5C,UAAMvC,UAAS,IAAAkJ,iBAAgBC,IAT8F,MAWxFrmB,EAAM4J,YAApCwpF,EAXsH,EAWtHA,WAAYhwE,EAX0G,EAW1GA,eACnB,GAAIk5L,EAAJ,CAAqB,IACZjoG,EAA4BioG,EAA5BjoG,aAAcpuG,EAAcq2M,EAAdr2M,WACfotF,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAOozG,MAC7D,IAAAqoE,oBAAmBrpF,EAAYrpF,EAAW/D,QAErC,GAAImd,GACT,IAAAs5J,0BADK,CAKP,GAAIvoK,EAAOc,aAAc,CACvB,IAAIunM,EAAwBroM,EAAOc,aAAalQ,MAAK,SAAA68K,GAAA,OAASA,EAAMlyL,OAASsnB,KAC7E,GAAIrB,EAAS,CAIX,GAHK6mM,IACHA,EAAwBroM,EAAOc,aAAalQ,MAAK,SAAA68K,GAAA,OAASA,EAAMlsK,SAASxc,MAAK,SAAAujN,GAAA,OAASA,EAAMhoM,KAAKlV,SAAWoW,EAAQlB,KAAKlV,eAEvHi9M,EAaH,OAZI,UAAO1iN,aACT7I,QAAQ4B,IAAI,gCAEVshB,EAAOc,aAAavnB,QACtB,UAAMwvB,UAAS,IAAA2O,qBAAoB1X,EAAOc,aAAa,GAAGvlB,OAC1D,UAAMwtB,UAAS,IAAA2B,kCAAiC,KAChD,IAAA69L,mBAAkBvoM,EAAOc,aAAa,GAAGvlB,KAAM,IAE1C0B,OAAO2B,SAASC,KAAKI,SAAS,cACjC,EAAA+3B,YAAYn9B,KAAK,cAKvB,IAAM2uN,EAAmBH,EAAsB9mM,SAASE,WAAU,SAAAgnM,GAChE,OAAOA,EAAYnoM,KAAKlV,SAAWoW,EAAQlB,KAAKlV,UAElD,UAAM2d,UAAS,IAAA2O,qBAAoB2wL,EAAsB9sN,OACzD,UAAMwtB,UAAS,IAAA2B,kCAAiC89L,GAAoB,EAAIA,EAAmB,KAC3F,IAAAD,mBAAkBF,EAAsB9sN,KAAMitN,QACzC,IAAKH,IAA0BA,EAAsB9mM,SAASqJ,IAA+Bs9L,EAAU,CAC5G,IAAM9mM,EAAapB,EAAOc,aAAa,GACvC,UAAMiI,UAAS,IAAA2O,qBAAoBtW,EAAW7lB,OAC9C,UAAMwtB,UAAS,IAAA2B,kCAAiC,KAChD,IAAA69L,mBAAkBnnM,EAAW7lB,KAAM,IAIlC0B,OAAO2B,SAASC,KAAKI,SAAS,cACjC,EAAA+3B,YAAYn9B,KAAK,gB,wICvErB,QACA,Q,IACA,QACA,S,IACA,Q,qDAEaqkL,K,YAEX,WAAYC,EAAUv6F,EAASv7E,IAAU,yGAEnCu7E,GAAYu6F,GAAY91K,IAAa,EAAAC,aAAa02B,UACpD,EAAKze,aAAe,GACpB,EAAKmmE,kBAAoB,GACzB,EAAKslG,gBAAkB,GACvBxyL,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKroE,aAAaqoE,GAAc,GAChC,EAAKlC,kBAAkBkC,GAAc,GACrC,EAAKojG,gBAAgBpjG,GAAc,MAErC,EAAKsO,qBAAsB,EAC3B,EAAKknF,sBAAuB,EAC5B,EAAKC,uBAAyB,EAC9B,EAAKpzJ,cAAgB,KACrB,EAAK6gE,mBAAqB,KAC1B,EAAKmf,cAAgB,KACrB,EAAKzf,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKC,oBAAsB,KAC3B,EAAKG,6BAA+B,KAEpC,EAAKp2D,SAAU,EACf,EAAK4/G,iBAAkB,EACvB,EAAKj1H,OAAS,KACd,EAAKs+J,qBAAsB,EAC3B,EAAKC,qBAAsB,EAC3B,EAAKC,wBAA0B,GAC/B,EAAKC,gBAAkB,MAErBN,IACF,EAAK31K,cAAgB,GACrB,EAAKqb,aAAe,IAEjB+/D,GAAYu6F,IACf,EAAK11K,UAAY,KACjB,EAAKkjF,MAAQ,IAAI,EAAJ,QACb,EAAKluE,mBAAqB,KAC1B,EAAKoS,UAAY,IAEnB,EAAKlP,SAAW,GA1CuB,E,wFAsEjBplB,EAAMS,GAC5B,OAAO8I,KAAK8S,SAASrc,IAASuJ,KAAK8S,SAASrc,GAAMwJ,MAAK,SAAA25K,GACrD,OAAOA,IAAc,EAAAzhJ,SAASC,MAAQxwB,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAKquF,EAAWntF,OAAQ,IAAAlB,MAAKquF,EAAW1iL,S,sDAI3F8pF,GAAmB,WACjD,OAAOA,EAAkBnjF,OAAM,SAACujF,GAC9B,OAAO,EAAK0D,wBAAwB1D,EAAUF,SAAUE,EAAUE,gB,6BAjCzD7lE,K,eAIX,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKyb,aAAaP,EAAOwmE,0B,kCAEhBjmE,K,eAIhB,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAK4hF,kBAAkB1mE,EAAOwmE,0B,kCAGrC,IAAMxmE,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKknL,gBAAgBhsK,EAAOwmE,4B,kYCrE3BlhE,E,wJAAZ,OAGmCojM,EAAtBA,oBAAsB,SAACp2L,GAAD,IAAOuD,EAAP,uDAAkB,KAAlB,MAA4B,CAC7D3lB,KAAMoV,EAAMgrD,sBACZ3qD,QAAS,CAAC2M,OAAMuD,cAG0B++I,EAA/BA,6BAA+B,SAACH,GAAD,MAAgC,CAC1EvkK,KAAMoV,EAAMirD,iCACZ5qD,QAAS,CAAC8uJ,+BAG6Bk0C,EAA5BA,0BAA4B,SAACC,GAAD,MAAuB,CAC9D14M,KAAMoV,EAAM2rD,gCACZtrD,QAASijM,IAGqBC,EAAnBA,iBAAmB,SAACv2L,EAAM2iJ,GAAP,MAAgB,CAC9C/kK,KAAMoV,EAAM6rD,oCACZxrD,QAAS,CAAC2M,OAAM2iJ,SAGgB6zC,EAArBA,mBAAqB,SAAC,GAAqD,IAApDC,EAAoD,EAApDA,WAAYC,EAAwC,EAAxCA,UAAWC,EAA6B,EAA7BA,WAAY1tN,EAAiB,EAAjBA,KAAMS,EAAW,EAAXA,MAC3E,OAAO,SAAC+sB,EAAU9hB,GAAa,IACxBqoH,EAAmBroH,IAAWwnH,qBAA9Ba,gBACAy5F,IAGAz5F,EAAgBy5F,KACnBz5F,EAAgBy5F,GAAc,IAE3Bz5F,EAAgBy5F,GAAYC,KAC/B15F,EAAgBy5F,GAAYC,GAAa,IAE3C15F,EAAgBy5F,GAAYC,GAAWC,GAAc,CAAC1tN,OAAMS,SAC5D+sB,EAAS,CACP7Y,KAAMoV,EAAM8rD,sCACZzrD,QAAS,CACP2pG,iCAAqBA,SAMS45F,EAAzBA,uBAAyB,SAAA7hG,GAAA,MAAS,CAC7Cn3G,KAAMoV,EAAM0rD,0BACZrrD,QAAS,CAAC0hG,UAG6B8hG,EAA5BA,0BAA4B,SAACC,GAAD,MAAmB,CAC1Dl5M,KAAMoV,EAAM4rD,8BACZvrD,yBAAayjM,KAGgBC,EAAlBA,gBAAkB,SAACC,GAAD,MAAmB,CAChDp5M,KAAMoV,EAAM+rD,kBACZ1rD,QAAS,CAAC2jM,kBAGyBC,EAAxBA,sBAAwB,SAACl6F,EAAwBE,EAA2BC,GAApD,IAA0EF,EAA1E,uDAA4F,GAA5F,MAAoG,CACvIp/G,KAAMoV,EAAMgsD,gCACZ3rD,QAAS,CAAC0pG,yBAAwBE,4BAA2BC,uBAAsBF,qBAGrDk6F,EAAnBA,iBAAmB,SAACz1F,GAAD,MAAoB,CAClD7jH,KAAMoV,EAAMisD,oCACZ5rD,QAAS,CAACouG,oB,oRCnEZ,QACA,Q,IACA,MACA,S,mDAE4B01F,EAAfA,cAAA,gCAAe,yGACsB,UAAMxiN,WAA/CwnH,EADmB,EACnBA,qBAAsBhkH,EADH,EACGA,iBACzBgkH,EAAqBi7F,mBAAsBj/M,EAAgB+B,SAASm9M,mBAF9C,uBAGnBl7F,EAAqBi7F,mBACxB,UAAM3gM,UAAS,IAAAygM,kBAAiB,KAJV,mDASD,UAAQI,uBATP,UASlB3iH,EATkB,OAUxBnqG,QAAQ4B,IAAI,WAAYuoG,IACpBA,IAAYv6F,MAAMC,QAAQs6F,EAASluG,MAXf,wBAYhB8wN,GAAiB,IAAA7wG,qBAAoB,mBACvC8wG,EAAiB7iH,EAASluG,KAC3ByU,MAAK,SAACC,EAAGC,GAAJ,OAAWD,EAAE2N,MAAQ1N,EAAE0N,MAAS,GAAK,KAC1CxO,KAAI,SAACqqB,EAAU8yL,GAGd,GAFA9yL,EAASo5F,UAAW,EACpBp5F,EAAS7b,MAAQ2uM,EACb7rN,SAASC,SAAS2b,UAAW,CAC/B,IAAMmqI,EAAQ/lJ,SAASC,SAASmC,QAAU,YACtCupN,GAAkBA,EAAe5lE,IAAUv3I,MAAMC,QAAQk9M,EAAe5lE,KACvE4lE,EAAe5lE,GAAO1qJ,OAAS,GAAKswN,EAAe5lE,GAAOhlJ,SAASg4B,EAASnqB,MAC/EmqB,EAASo5F,UAAW,QAEbp5F,EAASqxB,YAClBrxB,EAASo5F,UAAW,GAOtB,OAL6B,IAAzBppB,EAASluG,KAAKQ,QAAiBkR,EAAgBsyG,oBAAwC,IAAlBgtG,KAGvE9yL,EAASo5F,UAAW,GAEfp5F,KAEX,UAAMlO,UAAS,IAAAygM,kBAAiBM,IAlCV,kBAmCfA,GAnCe,eAqCtB,UAAM/gM,UAAS,IAAAygM,kBAAiB,KArCV,kBAsCf,IAtCe,iEAyCxB1sN,QAAQ4B,IAAI,QAAZ,MACA,UAAMqqB,UAAS,IAAAygM,kBAAiB,KA1CR,kBA2CjB,IA3CiB,4DAAf,4CAAN,IAAM,EAoEA,EArBAQ,EAAuBA,EAAvBA,qBAAuB,SAACj2F,GACnC,OAAKrnH,MAAMC,QAAQonH,IAAmBA,EAAcx6H,OAG7Cw6H,EAAcjoH,QAAO,SAAAmrB,GAAA,OAAYA,EAASo5F,YAFxC,IA4CE45F,GAvC2BlzL,EAA3BA,yBAA2B,SAACngB,EAAoBszM,GAAoD,IAAlCC,EAAkC,wDAC/G,IAAKvzM,EAAmB+yM,mBACtB,OAAO,EAET,GAAIQ,EACF,OAAO,EAET,IAAKD,EAAkB,KACdn2F,EAAiB,UAAM9sH,WAAWwnH,qBAAlCsF,cACPm2F,EAAmBn2F,EAErB,OAAOi2F,EAAqBE,GAAkB3wN,QAGhB6wN,EAAnBA,kBAAA,gCAAmB,WAAOr2F,GAAP,0BAAsBs2F,EAAtB,uDAA2C,EAAGC,EAA9C,+HAC1BC,EAAaF,GAAsB,EACnCG,EAAuBz2F,EAFG,8BAGPy2F,EAHO,sEAGnBvzL,EAHmB,SAInBwzL,UAAY,EACrBxzL,EAASyzL,QAAU,GACfzzL,EAASo5F,WAAYi6F,EANG,sBAOpBK,EAAc1zL,EAAS2zL,wBAA0B3zL,EAAS4zL,cAC5C5zL,EAAS6zL,QARH,kCASIC,MAAMJ,GATV,eASlBK,EATkB,iBAULA,EAAcr2H,OAVT,QAUlBA,EAVkB,OAWxB19D,EAAS6zL,QAAU3uM,IAAI24E,gBAAgBH,GAXf,QAa1B19D,EAASwzL,UAAYF,GAAcF,EAAqB,EAAI,GAC5DE,GAA0BtzL,EAASszL,WACnCtzL,EAASyzL,QAAUH,GAAcF,EAAqB,EAAI,GAfhC,+QAkB1BC,GACF,UAAMvhM,UAAS,IAAAygM,kBAAiBgB,IAnBJ,kBAsBvB,CAACA,uBAAsBS,WAAYV,IAtBZ,8EAAnB,6CAyBoBN,EAApBA,kBAAoB,SAACl2F,EAAem3F,GAC/C,OAAOn3F,EAAcnjH,MAAK,SAAAqmB,GACxB,OAAOi0L,GAAqBj0L,EAASwzL,WAAaS,EAAqBj0L,EAASyzL,aAIvES,EAAwBA,EAAxBA,sBAAwB,SAACp3F,EAAe6kC,GACnD,IAAMwyD,EAAoBpB,EAAqBj2F,GACzCs3F,EAAiBpB,EAAkBmB,EAAmBxyD,EAAQsyD,oBAC9DI,EAAqBD,EACvBzyD,EAAQsyD,mBAAqB,EAAIG,EAAeZ,UAChD,EACJ,uBACK7xD,EADL,CAEEwyD,oBACAC,iBACAC,wBAI+BC,EAAtBA,oBAAsB,SAACC,EAASz3F,EAAe6kC,EAAS6yD,GAAkB,IAC9EC,EAAoD9yD,EAApD8yD,aAAcL,EAAsCzyD,EAAtCyyD,eAAgBH,EAAsBtyD,EAAtBsyD,mBAC/BS,EAAYR,EAAsBp3F,GAAtB,gBAAyC6kC,EAAzC,CAAkDsyD,mBAAoBM,KAElFI,EAAYD,EAAUN,gBAAkBA,GAAmBM,EAAUN,eAAeP,UAAYO,EAAeP,SAC/GY,GAAiBF,GAAWE,GAAkBR,GAAsBQ,EAE1ED,mBAAkB7yD,EAAlB,CAA2BsyD,mBAAoBM,EAASI,gB,+WC7H1D,O,IAEA,MACA,QACA,Q,IAOA,OACA,QACA,SACA,SAKA,S,IACA,QACA,QACA,QAMA,QACA,SACA,Q,mDAEO,IA2DM,EAqNA,EAhRAC,EAAoBA,EAApBA,kBAAoB,WAC/B,GAAI3tN,SAASC,SAASqC,YAAc,GAAhC,4BAAuG,cAArCtC,SAASC,SAASoC,eAEtF,OADArC,SAASC,SAASmxF,WAAa,UACvBpxF,SAASC,SAASoC,gBACxB,IAAK,WACHrC,SAASC,SAASoC,eAAmD,IAAlCrC,SAASC,SAASqC,YAAoB,SAAW,UACpF,MACF,IAAK,UACHtC,SAASC,SAASoC,eAAiB,eAMvCrC,SAASC,SAASmxF,WAAa,UAItBmqF,EAAyBA,EAAzBA,uBAAyB,SAACt7J,GAAS,IACvC1T,EAAmB,UAAMxD,WAAzBwD,gBACDqhN,GAAyB,IAAA5qN,yBAAwBid,GACvD,OAAO1T,EAAgBqzM,yBAClBrzM,EAAgBqzM,wBAAwBltM,MAAK,SAAAmtM,GAAA,OAAgBA,GAAgBA,EAAa9sF,QAAQ7vH,gBAAkB0qN,MAQ9GC,EAAiCA,EAAjCA,+BAAiC,SAAC7yC,GAA2C,IAAxB6kC,EAAwB,uDAAT,KAC/E,GAAI7kC,IAAsB,EAAAz5K,2BAA2BH,UACnD,OAAO,EAET,GAAIy+M,GAAgB3wM,OAAOC,UAAU0wM,EAAav9M,aAChD,OAAOu9M,EAAav9M,YAEtB,OAAQ04K,GACN,KAAK,EAAAz5K,2BAA2BL,SAChC,KAAK,EAAAK,2BAA2BJ,QAC9B,OAAO,EAET,KAAK,EAAAI,2BAA2BE,QAChC,KAAK,EAAAF,2BAA2BC,QAC9B,OAAO,EAET,KAAK,EAAAD,2BAA2BG,OAC9B,OAAO,EAET,QACE,OAAO,IAgIA85K,GAvH4B4O,EAA5BA,2BAAA,gCAA4B,WAAOnqK,GAAP,gEAAa6tM,IAAb,qIAC0B,UAAM/kN,WAAhEwD,EADgC,EAChCA,gBAAiB2D,EADe,EACfA,YAAa4D,EADE,EACFA,YAAayD,EADX,EACWA,YAC7ChL,EAAgB+B,SAASg7K,yBAFS,0CAG9B,GAH8B,UAKhCl3E,EAAqBliG,EAArBkiG,kBAEDkpE,EAAuBC,EAAuBt7J,GAPb,0CAS9B,GAT8B,cAWvB,IAAA8B,oBACNga,aAAc,GACxB,IAAAvO,gBAEMwtJ,EAAoBQ,EAAkCF,GAE5D,UAAMzwJ,UAAS,IAAAk+J,0BAAwB,IAjBA,WAmBjC,IAAAt4D,oBAAmB38G,EAAYD,iBAAkBmnK,GAAmB,GAnBnC,WAqBvCp8K,QAAQ4B,IAAI,oBAAqBw6K,GAE5B5oE,EAAkBrxG,SAASi6K,GAvBO,mCAwBhB,aAAeA,GAAmB,GAxBlB,6DA0B5B,GA1B4B,eA6BnCzjK,EAAYw2M,qBAAqBvyN,eAAew/K,IAC9CzjK,EAAYw2M,qBAAqB/yC,KAAuBzjK,EAAYwZ,gBACxE,UAAMlG,UAAS,IAAAq/G,mBAAkB3yH,EAAYw2M,qBAAqB/yC,KAGpEh7K,SAASC,SAASoC,eAAiB24K,EACnCh7K,SAASC,SAASqC,YAAcurN,EAA+B7yC,EAAmBM,GAClFqyC,IACA,UAAM9iM,UAAS,IAAA6D,yBAET5M,GAAS,IAAAC,qBACHga,cACVja,EAAOia,aAAc,GAEjB1R,EAAcvI,EAAOuZ,cACxBztB,QAAO,SAAA+/F,GAAA,OAAeA,EAAYopC,mBAClCroI,KAAI,SAACi/F,GAAD,OAAiBA,EAAYlrF,aAE9BurM,EAAmBlsM,EAAOgb,wBAAwB,WAEhDmxL,EAAmBD,EAAiBzlI,SAAS71E,MAAK,SAAAzI,GAAA,OAAW,IAAAgkL,sBAAqBhkL,GAAS/G,gBAAkBo4K,EAAqBvoD,cAEtIi7F,EAAiBjhM,cAAgBkhM,EADb,EAGgD,UAAMllN,WAAnE+K,EAHa,EAGbA,YAAayD,EAHA,EAGAA,YAAa22M,EAHb,EAGaA,qBAAsBllN,EAHnC,EAGmCA,UAChD+3F,EAAkExpF,EAAlEwpF,WAAYhwE,EAAsDxZ,EAAtDwZ,eAAgBE,EAAsC1Z,EAAtC0Z,iBAAkBzZ,EAAoBD,EAApBC,iBAC9C22M,EAAuBD,EAAvBC,oBACAhlN,EAAaH,EAAbG,WAEH,IAAA03G,uBAAsB9f,EAAYhwE,KAC9Bq9L,GAAa,IAAAjtG,oCAEZ3pG,GAAqBA,EAAiB5I,KAAOw/M,EAAWx/M,IAC3D,UAAMic,UAAS,IAAAw/G,qBAAoB+jF,EAAYt6M,EAAYD,sBAEvDguG,EAAgC5wF,EAAiBve,MAAK,SAAAm4H,GAC1D,OAAOA,EAAUj3H,aAAeE,EAAYD,kBAAoBg3H,EAAU/oB,oBACrEssG,EAAWx/M,KAAOi8H,EAAU7oB,kBAEI1mH,OAAOmc,KAAKoqG,EAA8BnqG,sBAAsBrc,QAAU,KACzG21B,EAAmB,GACnBszF,GAAgB,IAAAnjB,kBAAiBitH,EAAYp9L,EAAkB,KACnD,KACVxN,GAAe,IAAA69E,gCAA+BijB,EAAc,MACrB,SAAxB9gG,EAAatW,SAChC,UAAM2d,UAAS,IAAAmgH,0BAAA,gBACZh6G,EAAmB,CAClBM,aAAa,IAAAQ,mCAAkCwyF,EAAc,GAAI2pG,GACjEp2M,gBAAiBo2M,EACjB/gN,OAAQ,SAET4G,EAAYD,iBAAkBu6M,EAAWx/M,KACxCu/M,KACIrrM,GAA4B,IAAAC,6BAA4B5Z,EAAW2K,EAAYD,oBAEnF,UAAMgX,UAAS,IAAAiI,gBAAehQ,KAE1B/C,GAAe,IAAAyE,mBAAkBypM,EAAkB,EAAG,KAC/C7+M,aAAe0E,EAAYD,iBACxCkM,EAAamR,aAAek9L,EAAWx/M,GACvCmR,EAAaqR,eAAiBJ,EAC9BjR,EAAazI,kBAAoBgtG,EAAc,GAAG11G,GAClD,UAAMic,UAAS,IAAAiG,WAAU,CAAC/Q,UAU1C,UAAM8K,UAAS,IAAAT,oBAAmBC,IAClC,UAAMQ,UAAS,IAAAE,0BAAyBV,EAAY,KACpD,UAAMQ,UAAS,IAAAyK,8BAEf,aAAEv2B,QAAQ+pG,QAAQ,UAAYuzB,kBAE9Bz9H,QAAQ4B,IAAI,2BAA4BR,SAASC,SAASoC,gBAE1DizF,YAAW,WACT,UAAMzqE,UAAS,IAAAk+J,0BAAwB,MACtC,KAEC+kC,IACF,IAAA50H,iBAlHqC,mBAoHhC,GApHgC,mDAA5B,6CAuHoCsiF,EAApCA,kCAAoC,SAACqkC,GAChD,IAAMwO,EAAqBxO,EAAav9M,aAAe,EACvD,OAAQu9M,EAAa9sF,SACnB,IAAK,WACL,IAAK,WACH,OAA8B,IAAvBs7F,EACH,SACuB,IAAvBA,EAA2B,UAAY,WAC7C,IAAK,UACL,IAAK,UACH,OAA8B,IAAvBA,EAA2B,UAAY,UAChD,IAAK,YACL,IAAK,YACH,MAAO,YACT,QACE,OAAOxO,EAAa9sF,WASYs2D,EAAzBA,uBAAyB,SAACz1K,EAAYu1K,GAAuB,MACT,UAAMpgL,WAA9D+K,EADiE,EACjEA,YAAa9K,EADoD,EACpDA,UAAWuD,EADyC,EACzCA,gBAAiB2D,EADwB,EACxBA,YACzC/G,EAAaH,EAAbG,UACAuW,EAA4B5L,EAA5B4L,OAAQ7L,EAAoBC,EAApBD,iBAEf,GAAItH,EAAgB+B,SAASg7K,yBAA0B,CACrD,IAAMvpK,GAAe,IAAAgD,6BAA4B5Z,EAAWyK,GAC5D,GAAImM,EAAc,CAChB,IAAMu7J,EAAuBC,GAAuB,IAAA0S,sBAAqBluK,EAAa9S,cACtF,GAAIquK,EACF,OAAOE,EAAkCF,GAG7C,IAAMgzC,EAAiBnlN,EAAUyE,QAAO,SAAAZ,GACtC,QAAQA,EAASoC,eAAiBwE,GAAiB5G,EAASC,aAAeD,EAASC,YAAY1C,UAAU4C,eACnGH,EAASC,aACTD,EAASC,YAAY1C,UAAU2wM,cAC/B1sM,MAAMC,QAAQzB,EAASC,YAAY1C,UAAU4wM,eAC7CnuM,EAASC,YAAY1C,UAAU4wM,aAAat0M,MAAK,SAAAy0M,GAAA,OAAQA,SAElE,GAAIgT,EAAejzN,QAAUizN,EAAe,GAAG55M,oBAC1C45M,EAAe7pN,OAAM,SAAAuI,GAAA,OAAYA,EAAS0H,qBAAuB45M,EAAe,GAAG55M,sBACtF,OAAO45M,EAAe,GAAG55M,mBAE3B,GAAIy0K,EACF,OAAOA,EAET,GAAIv1K,IAAeC,IAAqB3D,EAAY84K,qBAClD,OAAOhpL,SAASC,SAASoC,eAG7B,OAAIqd,GAAUA,EAAO9L,IAAe8L,EAAO9L,GAAYqM,KAC9CP,EAAO9L,GAAYqM,KAErBjgB,SAASC,SAASoC,gBAWWksN,EAAzBA,uBAAyB,SAAC/gI,EAAgBu+F,EAAUrzK,EAAoBswK,GACnF,IAAKtwK,EAAmB4wK,0BAA4BN,EAClD,OAAO,EAGT,IAAI/oK,EAAO8rK,IAAY,IAAAkC,sBAAqBzgG,GAGtCghI,EAAkBjzC,EAAuBt7J,GAGzC+6J,EAAoBwzC,EAAkBhzC,EAAkCgzC,GAAmB,KACjG,SAAIxzC,GAAsBh7K,SAASC,SAASoC,iBAAmB24K,IACtDA,GAYwCyzC,EAAtCA,qCAAA,gCAAsC,qCAAOC,EAAP,uDAAqB,GAAIC,IAAzB,yIACV,UAAM5lN,WAAtCwD,EAD0C,EAC1CA,gBAAiBuH,EADyB,EACzBA,YACjB4L,EAA4B5L,EAA5B4L,OAAQ7L,EAAoBC,EAApBD,iBAFkC,UAItB,IAAA48G,oBAAmB58G,GAJG,cAI3CzE,EAJ2C,OAK3C26K,EAL2C,wBAK3B36K,GAL2B,CAKb,KAC9B+/K,EAAsBzvK,EAAOrkB,OACnC,UAAMwvB,UAAS,IAAA6tJ,WAAUqR,IACzB,UAAMl/J,UAAS,IAAA4tJ,qBAAoB0W,IAC/Bw/B,IACI5uM,GAAe,IAAAwtK,gCAA+BmhC,EAAaniN,EAAgB+B,aAEzE8gL,EAAkB9zL,OAAO+2B,OAAO,GAAItS,EAAc,CACtD3Q,aAAc+/K,IAEhB,UAAMtkK,UAAS,IAAAiG,WAAU,CAACs+J,MAfmB,kBAkB1CpyL,QAAQC,SAAQ,IAlB0B,mDAAtC,6C,8EChT0B2xN,EAA1BA,wBAA0B,SAACxlL,GACtC,OAAOA,EAAO7jC,QAAQ,SAAU,IAAIA,QAAQ,KAAM,IAAIA,QAAQ,IAAK,KAQxCwxL,EAAhBA,cAAgB,SAACj5L,EAAOsjL,GACnC,OAAQtjL,EAAQ,IAAOsjL,GAQOytC,EAAnBA,iBAAmB,SAAC/wN,EAAOgxN,GACtC,OAAKhxN,EAGGgxN,EAAYhxN,EAAS,IAFpB,GAWkC2R,EAAhCA,8BAAgC,SAACiJ,GAA0C,IAAtBq2M,EAAsB,uDAAP,GAC3EC,EAAa,GACjB,OAAKt2M,EAAmB0B,wBAA2B20M,EAAa1zN,QAGhE0zN,EAAa/pN,SAAQ,SAAAgI,GACnB,GAAIA,EAASC,aAAeD,EAASC,YAAY0N,mBAAoB,CACnE,IAAMs0M,EAAkBjiN,EAASC,YAAY0N,qBAC7C,GAAIs0M,GAAoBA,IAAoBv2M,EAAmBwC,SAAW,CACxE,IAAMg0M,EAAgBF,EAAWt8M,MAAK,SAAAqhF,GACpC,OAAOA,EAAkB74E,WAAa+zM,KAEpCC,EACFA,EAAc/lN,UAAUxN,KAAKqR,GAE7BgiN,EAAWrzN,KAAK,CACduf,SAAU+zM,EACV9lN,UAAW,CAAC6D,UAOfgiN,GArBEA,I,2GClCX,I,IAAA,O,IACA,O,IACA,O,IACA,MACA,QAKA,QAMA,Q,IACA,QAGA,SACA,Q,IACA,Q,IACA,S,IACA,Q,IACA,Q,IACA,O,IACA,O,IACA,QACA,QACA,S,mDAEA,IA8RMG,EAAc,WAClB,UAAajgK,aAAY,GACzB,UAAaW,YAAYhkD,MACzB,UAAUokD,eAAc,GACxB,UAAUG,sBAAqB,GAC/B,UAAO5G,UAAUsC,eAAiB,MAGDkJ,EAAtBA,oBAAsB,WACjC,UAAiB9F,aAAY,GAC7B,UAAiBW,YAAY,UAAiBu/J,oBAC9C,UAAW5lK,UAAUsC,eAAiB,KAKtC,UAAUmE,eAAc,GACxB,UAAUG,sBAAqB,GAC/B,UAAUE,sBAAqB,GAE3B,UAAU3B,6BAAV,WACF,UAAUA,kBAAkBgQ,oBAE9B,IAAA0wJ,qBACA,UAAWziK,UAAUC,QAAS,EAC9B,UAAWD,UAAUE,OAAQ,EAC7B,UAAWF,UAAU56C,KAAO,GAC5B,UAAW46C,UAAUh+C,GAAK,KAC1B,UAAiB67F,0BAEjB,UAAM5/E,UAAS,IAAAmlF,oBAAmB,CAACt4C,UAAU,KAC7C,UAAM7sC,UAAS,IAAA2jF,qBAAoB,KACnC,UAAM3jF,UAAS,IAAA6jF,4BAA2B,KAC1C,UAAM7jF,UAAS,IAAA+jF,2BAA0B,OACzC,UAAM/jF,UAAS,IAAAkzI,2BAA0B,KACzC,UAAMlzI,UAAS,IAAAD,cAAY,IAC3B,UAAS0kM,aACT,UAASrwJ,UACT,UAAiB88E,qC,UAKJ,IAzUS,WAAW,WAC7BlwI,EAAOjF,KACXA,KAAK2oN,kBAAoB,SAACvgK,GACxB,IAAIwgK,GAAa,EACX7hN,EAAQ,UAAM5E,WACd0lG,EAAe9gG,EAAM6oD,cAAci4C,aACnC+nD,EAAiB7oJ,EAAM4C,cAAcimJ,eACrC3mD,EAAkBliG,EAAM6oD,cAAcq5C,gBACtC6B,EAAiB/jG,EAAM6oD,cAAck7C,eAErClxD,EAAQ,UAAUwR,gBAClBy9J,EAAc,UAAUr9J,kBACxBiE,EAAY,UAAUvH,eAAe4gK,eACvCvlH,EAAS,UAAaI,YAE1B,GAAIkE,IAAiB,EAAAlxD,sBAAsBzC,WACrC,UAAU6X,gBAId,OAFA,UAASg9J,SAAS9/G,GAClB,UAAS+/G,UAAU5gK,IACZ,EAGT,GAAI,UAAqBhX,OAAO63K,cAE9B,OADA,UAAqB73K,OAAO83K,kBAAiB,IACtC,EAGLtvK,GAAS,UAAUiS,4BACF9kD,EAAM6oD,cAAc63C,YAGjCmoD,GACgB,SAAjB/nD,GACiB,UAAjBA,GACiB,WAAjBA,GACiB,UAAjBA,GACiB,aAAjBA,GACiB,WAAjBA,GACiB,cAAjBA,IACAtE,GAAyB,SAAdA,EAAO,IAA+B,SAAdA,EAAO,KAE7C,UAAMt/E,UAAS,IAAAujF,mBAAkB,SACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,SACnC2gH,IACA,UAAO3lK,UAAUsC,eAAiB,QAGpC,UAAMjhC,UAAS,IAAAyjF,wBAAsB,KAMrC,EAAK+9D,mBAQP,GAAI59D,EAAc,CAEhB,IAAI5+C,GAAc,EAClB,GAAIrP,EAAO,CACT,IAAImV,SACJ,OAAO84C,GACL,IAAK,SAEH,GAAIp4C,EAAUh7D,OAAS,EAAG,4BACxB,YAAoBg7D,EAApB,+CAA+B,CAC7B,GAD6B,QACjB05J,IAAIC,MAAMC,QAAQtiN,MAAM4xJ,SAElC,QAJoB,8EAQ1B,GAAmB,eAAf/+G,EAAMxuC,KACR,UAAUosD,YAAY5d,QACjB,GAAmB,cAAfA,EAAMxuC,MAAwBwuC,EAAMtzC,SAAW,EAAAipC,cAAcqB,gBACtE,UAAUmoB,sBAAsBnf,GAChC,UAAU+d,gBAAgB/d,OACrB,CACL,IAAMmV,EAAOnV,EAAMwS,mBAAqBxS,EAAMiT,+BACxCb,EAAQpS,EAAMymH,qBAAqBj4G,GACnCkhK,EAAa1vK,EAAMomH,wBACnBupD,EAAe3vK,EAAMqS,uBACrBtrB,EAAQiZ,EAAMumH,gBAEpB,GAAImpD,EACEA,EAAWpvB,mBACbovB,EAAWhxJ,qBAEXgxJ,EAAWv6J,KAAKwJ,GAAGC,0BAEhB,GAAIxM,IAAUA,EAAM6xI,gBAAkB7xI,EAAM88G,YAAc98G,EAAMy5I,uBACrEz5I,EAAMwM,qBACNowJ,GAAa,OACR,GAAIW,GAAgBx6J,EACzBA,EAAKikF,eAAew2E,YAAYD,GAChCx6J,EAAKikF,eAAey2E,yBACf,GAAI16J,GAAQA,EAAKmrI,mBAEtBnrI,EAAKuJ,0BACA,GAAI33B,EAAO,CAChB,IAAM+oL,EAAmB/oL,EAAMjgC,YAC/BgpN,EAAiBtpD,aAAa/nG,UAC9BqxJ,EAAiBtpD,aAAe,UACtBxQ,GAGV,UAAM3rI,UAAS,IAAA0lF,4BAA2B,CAAC74C,UAAU,EAAMlX,MAAOA,KAGlEgvK,GAAa,EAKjB,MACF,IAAK,SACHhvK,EAAM4vH,KAAK5vH,EAAMihH,cAAc9kF,YAC/B,UAAO1wB,SAASE,MAAM4R,YAAY,UAAOxR,aACzCsD,GAAc,EACd,MACF,IAAK,SACHrP,EAAM4vH,KAAK5vH,EAAMihH,cAAc/kF,UAC/B,UAAOzwB,SAASG,MAAM2R,YAAY,UAAOxR,aACzCsD,GAAc,EACd,MACF,IAAK,eAML,IAAK,cAMH,MACF,KAAK,EAAAxX,2BAA2B9Q,MAC9B,UAAa2nB,aAAY,GACzB,UAAaW,YAAYhkD,GAErB,UAAM9C,WAAWytD,cAAc2O,YAAYzN,UAC7C,UAAM7sC,UAAS,IAAAmlF,oBAAmB,CAACt4C,UAAU,KAE/C,UAAM7sC,UAAS,IAAAmlF,oBAAmB,CAACt4C,UAAU,EAAM64J,WAAY,SAAUriK,IAAKc,EAAU7uD,OAAQqgD,KAChGgvK,GAAa,EAEb,MACF,QACEA,GAAa,EAGjB,OAAO/gH,GACL,KAAK,EAAAv0D,qBAAqBC,OAKpB,UAAiB+hG,kBAAkB17F,KAChCA,EAAM87F,iBAKT,UAAiBL,sBAAsBz7F,IAJvC,UAAiB67F,qBAAqB77F,GACtC,UAAiBi8F,oBAAoBj8F,GACrC,UAAiBk9F,mBAAmBl9F,KAKxCgvK,GAAa,EACb,MACF,KAAK,EAAAn3K,2BAA2BiC,UAC1BkG,aAAiBA,EAAjBA,UAA+Bg2G,GAC9Bh2G,aAAiBA,EAAjBA,SAA8BA,EAAMtzC,SAAW,EAAAipC,cAAcqB,gBAEhE,UAAUg5K,WAAWhwK,GACZA,aAAiBA,EAAjBA,SACT,UAAUiwK,kBAAkBjwK,GAG9BgvK,GAAa,EAEb,MACF,KAAK,EAAA3zK,mCAAmC60K,MAGtC,MACF,KAAK,EAAA70K,mCAAmCS,UACxC,KAAK,EAAAjE,2BAA2B8C,QAG9B,MACF,KAAK,EAAAU,mCAAmC7D,QAEtC2d,EAAO,UAAU5C,oBAEf,UAAqB/a,OAAO24K,aAAah7J,EAAK0C,KAAM1C,EAAKwJ,GAAI3e,EAAMoR,eACnE+D,EAAK07G,aACL7wH,EAAM6wH,aACNm+C,GAAa,SASd,GAAIC,EACT,OAAOhhH,GACL,IAAK,SAEHghH,EAAYvwJ,qBACZswJ,GAAa,MAKZ,CACL,GAAqB,gBAAjB/gH,QAGG,GAAqB,WAAjBA,EACT,UAAav/C,aAAY,GACzB,UAAaC,UAAU,SAAUtjD,GAAM,QAClC,GAAI4iG,IAAiB,EAAAp2D,2BAA2BnvB,OAChD,UAAU4lC,eAAe8hK,gBACxBl/G,EACJ,CACA,IAAIxjD,GAAM,IAAAutB,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GACzC,IAAI,EAAJ,QAAYitC,GAClB0O,OAERh+D,QAAQ4B,IAAI,UAAOgpD,UAAUsC,gBAG7B,UAAOtC,UAAUsC,eAAiB,KAGtC0jK,GAAa,EACb3/J,GAAc,EAGhB,IACM4P,EADQ,UAAM12D,WACa4L,UAAU8qD,mBAC3C,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,IACvD5P,IACF,UAAaA,YAAYhkD,GACzB,UAAO29C,UAAUsC,eAAiB,MAItC,OAAO0jK,GAGT5oN,KAAKg2D,KAAO,WACV,UAAayD,SACX,UAAaC,OAAOK,SACpB90D,EAAK0jN,kBACL1jN,EACA,UAAa20D,WAAWojC,UAI5Bh9F,KAAKylK,iBAAmB,WAEtB,IAAMC,EAAetsK,SAAS02F,eAAe,iBACvC61E,EAAc,GAAGttK,MAAMxD,KAAKuE,SAASwsK,iBAAiB,iCACtDmB,EAAc,GAAG1uK,MAAMxD,KAAKuE,SAASwsK,iBAAiB,uCAExDF,IACFA,EAAarxJ,MAAMwxJ,QAAU,OAC7BF,EAAYvnK,SAAQ,SAAU0nK,GAC5BA,EAAKC,WAAWC,aAAaF,EAAKG,WAAU,GAAOH,MAErDiB,EAAY,GAAG7jE,oBAAoB,QAASj+F,EAAKkgK,2B,8HCvTvD,O,WACA,MACA,OACA,O,uDAEM8kD,G,6OAeJC,qBAAuB,SAACp1B,EAAUhyG,GAEhC,GAAIA,EACF,OAAO,EAGT,OAAQgyG,GACN,IAAK,OACHA,EAA4C,IAAjC,EAAKxpF,MAAM6+G,kBAA0B,EAAI,EAAK7+G,MAAM6+G,kBAAoB,EACnF,MACF,IAAK,OACH,GAAI,EAAK7+G,MAAM6+G,oBAAuB,EAAK7+G,MAAM8+G,eAAe31N,OAAS,EAEvE,YADA,EAAK62G,MAAM++G,kBAAkB,EAAK/+G,MAAM8+G,gBAGxCt1B,EAAW,EAAKxpF,MAAM6+G,kBAAoB,EAMhD,IAAM7lF,EAAc,EAAKh5B,MAAM8+G,eAAet1B,EAAW,GACnDhjL,EAAqB,EAAKw5F,MAAMx5F,mBACjCgjL,EAAW,EAAKxpF,MAAM6+G,mBAAsB7lF,IAAgB,EAAKh5B,MAAMg/G,qBACrEhmF,EAAYimF,iBAAoBz4M,EAAmB8rB,aAAe0mG,EAAYkmF,uBAAyB,EAAKl/G,MAAMl2F,0BAGrH,EAAKk2F,MAAMm/G,mBACb,EAAKn/G,MAAM4+G,qBAAqBp1B,GACf,IAAbA,GACF,EAAKxpF,MAAMo/G,6BAA4B,IAGzC,EAAKp/G,MAAMq/G,oBAAoB71B,K,gGAI1B,WAEDxwD,EAActkI,KAAKsrG,MAAM8+G,eAAepqN,KAAKsrG,MAAM6+G,mBAEnDS,EAAa5qN,KAAKsrG,MAAM6+G,oBAAsBnqN,KAAKsrG,MAAM8+G,eAAe31N,OAAS,EAEjFqd,EAAqB9R,KAAKsrG,MAAMx5F,mBAChC+4M,EAAmBvmF,IAAgBtkI,KAAKsrG,MAAMg/G,mBAAqBx4M,EAAmB8rB,aAAe0mG,EAAYkmF,uBAAyBxqN,KAAKsrG,MAAMl2F,uBAErJ01M,EAAqBxmF,KAAiBA,EAAYimF,iBAAmBM,GAE3E,OACE,+BAAKjgI,UAAW,OAAS5qF,KAAKsrG,MAAM7qG,SAAW,GAAK,kBACjDT,KAAKsrG,MAAMm/G,oBAAsBzqN,KAAKsrG,MAAMy/G,cAAgB/qN,KAAKsrG,MAAMg/G,mBAAsBtqN,KAAKsrG,MAAMg/G,oBAAsBtqN,KAAKsrG,MAAM0/G,eACxI,+BAAKpgI,UAAW,+BACZ5qF,KAAKsrG,MAAM6+G,kBAA8C,GAA1B,yBAA+BrtC,QAAS,kBAAM,EAAKotC,qBAAqB,UACzG,oCAAM,4CAAkBliN,GAAG,kCAE3B,KACJ,8BAAI4iF,UAAW,oBACZ5qF,KAAKsrG,MAAM7qG,SAAW,sBAAsBT,KAAKsrG,MAAM6+G,kBAAoB,yBAC3EnqN,KAAKsrG,MAAM7qG,SAAW,kCAAkCT,KAAKsrG,MAAM8+G,eAAe31N,OAAS,KAC3FuL,KAAKsrG,MAAMy/G,aAAgB/qN,KAAKsrG,MAAM0/G,cAAgB,+BAAiC,KACvFhrN,KAAKsrG,MAAMy/G,aAAgB/qN,KAAKsrG,MAAMm/G,mBAAqBzqN,KAAKsrG,MAAM0/G,cACrE,8BAAIpgI,UAAW,gCACb5qF,KAAKsrG,MAAMm/G,kBAA6C,GAAzB,wBAC7B3tC,QAAS,kBAAM,EAAKxxE,MAAM++G,kBAAkB,EAAK/+G,MAAM8+G,kBACzD,oCAAM,4CAAkBpiN,GAAG,+BAE3B,KACHhI,KAAKsrG,MAAM8+G,eAAetiN,KAAI,SAACmjN,EAAcr9M,GAC5C,IAAMs9M,EAAW,EAAK5/G,MAAM8+G,eAAex8M,EAAQ,GAC7Ck1E,EAAWl1E,KAAWs9M,EAASX,iBAC/Bz4M,EAAmB8rB,aAAestL,EAASV,uBAAyB,EAAKl/G,MAAMl2F,wBAC/E+1M,EAAa,EAAK7/G,MAAM8/G,qBAAqBH,EAAavP,YAC1DnrM,EAAc,EAAK+6F,MAAM8/G,qBAAqBH,EAAavP,WAAY,EAAKpwG,MAAM7wF,MACxF,OACE,8BAAImwE,UAAW,4BAA8BugI,EAAWxsN,QAAQ,KAAK,IAAIrC,eACtEsR,IAAU,EAAK09F,MAAM6+G,mBAAsB,EAAK7+G,MAAMy/G,YAAuC,GAAzB,yBACpEjoI,EAAW,yBAA2B,IACrCtrF,IAAK,eAAeoW,EAAOkvK,QAAS,kBAAM,EAAKotC,qBAAqBt8M,EAAOk1E,KAC7E,oCAAOvyE,GACN,EAAK+6F,MAAM8+G,eAAex8M,GAAO28M,iBAAmB38M,IAAU,EAAK09F,MAAM6+G,kBACtE,gCAAMv/H,UAAU,sCAChB,UAMX5qF,KAAKsrG,MAAMm/G,oBAAsBzqN,KAAKsrG,MAAMy/G,cAAgB/qN,KAAKsrG,MAAMg/G,mBAAsBtqN,KAAKsrG,MAAMg/G,oBAAsBtqN,KAAKsrG,MAAM0/G,eACxI,+BAAKpgI,UAAW,gCACbkgI,EAAqB,wBAA0B,KAC/CxmF,GAAeA,EAAYimF,gBAAkB,wBAA0B,IACrEztC,QAAS,kBAAM,EAAKotC,qBAAqB,OAAQY,KACpD,oCACE,4CAAkB9iN,GAAI4iN,EAAa,gCAAkC,kCAGvE,U,kBA7GH1oE,UAAY,CACjBkoE,eAAgB,UAAU/zM,MAC1B8zM,kBAAmB,UAAUvxG,OAC7BsxG,qBAAsB,UAAUnrC,KAChCsrC,kBAAmB,UAAUtrC,KAC7BqsC,qBAAsB,UAAUrsC,KAAK9lE,WACrCyxG,4BAA6B,UAAU3rC,KACvCgsC,YAAa,UAAU3oE,KACvBkoE,kBAAmB,UAAUloE,KAC7B4oE,cAAe,UAAU5oE,KACzBqoE,kBAAmB,UAAUroE,M,cAgHlB,IAAA2F,aACb,IAAAj8C,UAPsB,SAACxzG,GAAD,MAAY,CAClCwZ,mBAAoBxZ,EAAMqN,gBAAgB+B,aAGjB,iBAAO,KAGhC,CAA6CuiN,K,qSCjI/C,IAAYzpM,E,wJAAZ,OAE0CytL,EAA7BA,2BAA6B,SAACod,GAAD,IAAuBC,EAAvB,uDAAqD,MAArD,MAAgE,CACxGlgN,KAAMoV,EAAMutD,+BACZltD,QAAS,CAACwqM,uBAAsBC,iCAGWC,EAAhCA,8BAAgC,SAACC,GAAD,MAAiC,CAC5EpgN,KAAMoV,EAAMwtD,mCACZntD,QAAS,CAAC2qM,gCAG+BC,EAA9BA,4BAA8B,SAAC7+F,GAAD,MAA+B,CACxExhH,KAAMoV,EAAMytD,gCACZptD,QAAS,CAAC+rG,8BAG+B8+F,EAA9BA,4BAA8B,SAAC/+F,GAAD,MAA+B,CACxEvhH,KAAMoV,EAAM0tD,gCACZrtD,QAAS,CAAC8rG,8BAGkCg/F,EAAjCA,+BAAiC,SAACC,GAAD,MAAkC,CAC9ExgN,KAAMoV,EAAM2tD,oCACZttD,QAAS,CAAC+qM,iCAG2BC,EAA1BA,wBAA0B,SAACC,GAAD,MAA2B,CAChE1gN,KAAMoV,EAAM4tD,4BACZvtD,QAAS,CAACirM,0BAG6BC,EAA5BA,0BAA4B,SAACC,GAAD,MAAkB,CACzD5gN,KAAMoV,EAAM6tD,8BACZxtD,QAASmrM,K,wKCnCX,WACA,Q,IACA,OAEA,QACA,QACA,QACA,Q,IAMA,MACA,QACA,QACA,QACA,QACA,QAMA,Q,mDAEO,IAAMC,EAAmBA,EAAnBA,iBAAmB,CAAC,gBAAiB,YAAa,aAAc,aAAc,YACzF,aAAc,qBAAsB,iBAAkB,eAAgB,eAE3DC,EAAmBA,EAAnBA,iBAAmB,SAAC5lN,EAAQ7F,GACvC,QAAK6F,OAGA7F,IAAa,EAAAk8F,cAAcxiG,SAASmM,IAAW,EAAAo2F,iBAAiBviG,SAASmM,IAAW,EAAAs2F,WAAWziG,SAASmM,QAGpG2lN,EAAiB9xN,SAASmM,IACtB,eAAXA,GAAgE,cAArClN,SAASC,SAASoC,kBAIpC0wN,EAAwBA,EAAxBA,sBAAwB,SAAC7lN,GACpC,QAAKA,IAGa,kBAAXA,GAAyC,mBAAXA,IAG1B8lN,EAAqBA,EAArBA,mBAAqB,SAACp6K,GAAgE,IAAxD+P,EAAwD,uDAAhD,KAAMinC,EAA0C,aAA1BurB,EAA0B,aAAb9zG,EAAa,aAC1F8mB,EAAgB,UAAMplB,WAAWukB,wBAAjCa,aACP,IAA+B,mBAA1ByhE,EAAe1iF,QAAyD,kBAA1B0iF,EAAe1iF,SAChB,IAA7CiuG,EAAYC,QAAQC,UAAU43G,WAAkB,CAInD,OAHqB,IAAjB9kM,IACFw6B,EAAQ,KAEFx6B,GACN,KAAK,EACHyqB,EAAO33B,EAAI23B,EAAO33B,EAAI,GACtB,MACF,KAAK,EACH23B,EAAO33B,EAAI23B,EAAO33B,EAAI,GAKrB5Z,IACH,aAAE,cAAc+sF,QAAQ,CAACy5E,UAAW,GAAI,KAG5C,MAAO,CAACllH,QAAO/P,WAiLXs+I,EAAqB,CACzB7zH,8CACAT,4CACAjB,8BACA7wC,sBACAjC,gCACAgL,sCACAisC,oDACAlC,uC,WAGa,IAAAuzH,aACb,IAAAzkF,UA1BsB,SAACxzG,GAAU,MACmDA,EAAM0zG,UAAnFhxC,EAD0B,EAC1BA,WAAYoB,EADc,EACdA,kBAAmBM,EADL,EACKA,mBAAoB8C,EADzB,EACyBA,uBAG1D,MAAO,CACLxE,aACAoB,oBACA37D,SALiBnI,EAAMgR,YAAlB7I,SAMLsd,iBALyBzlB,EAAMgsL,QAA1BvmK,iBAML2+C,qBACA8C,4BAgBuB8wH,EAAzB,EA1LwB,SAAChlF,GAAU,IAE5BmlF,EAEsGnlF,EAFtGmlF,QAASjwC,EAE6Fl1C,EAF7Fk1C,SAAUjsC,EAEmFjJ,EAFnFiJ,YAAa9zG,EAEsE6qG,EAFtE7qG,SAAUg8D,EAE4D6uC,EAF5D7uC,sBAAuBT,EAEqCsvC,EAFrCtvC,qBAAsBhB,EAEeswC,EAFftwC,WAC5FD,EAC2GuwC,EAD3GvwC,cAAe7wC,EAC4FohF,EAD5FphF,UAAWnM,EACiFutF,EADjFvtF,iBAAkBkK,EAC+DqjF,EAD/DrjF,eAAgBgL,EAC+Cq4E,EAD/Cr4E,kBAAmBmpC,EAC4BkvC,EAD5BlvC,kBAC/E8C,EAA2GosC,EAA3GpsC,yBAA0BjC,EAAiFquC,EAAjFruC,eAAgBD,EAAiEsuC,EAAjEtuC,kBAAmBN,EAA8C4uC,EAA9C5uC,mBAAoB8C,EAA0B8rC,EAA1B9rC,uBAyJnF,OAAOghF,GA5IoB,SAACl6I,EACAgmN,EACAC,GAI0B,IAH1Bn7B,IAG0B,yDAF1BlrK,IAE0B,yDAD1BsmM,IAC0B,yDAA1BC,IAA0B,yDAChDC,EAAU,EAAAn3M,OAAOyuF,KACjBhb,SACJ,GAAI1iF,EAAQ,CACV,IAAM4U,GAAS,IAAAC,oBACTyB,EAAe0vM,EAAgBA,EAAc5rN,YAAcwa,EAAOgb,wBAAwB5vB,GAsBhG,GArBA0iF,EAAiBsjI,IAAkB1vM,EAAeA,EAAauJ,cAAgB,MAC3EvJ,GAAgBA,EAAa6e,iBAAmB6wL,EAC9CC,GACFvjI,EAAiBpsE,EAAakkE,2BAA2ByrI,MAClC3vM,EAAa6e,eAAe8wL,IACjD3vM,EAAa6e,eAAe8wL,GAAiBvjI,EAC7C9+D,EAAU,EAAC,IAAAtM,mBAAkBorE,EAAgB,EAAGjrE,MACtCirE,IACVA,EAAiBpsE,EAAauJ,eAAiBvJ,EAAa+pE,8BAG9DjyF,OAAOmc,KAAK+L,EAAa6e,gBAAgBr9B,SAAQ,SAACs9B,GAC5C9e,EAAa6e,eAAeC,IAAatiC,SAASuzN,cACjD/vM,EAAa6e,eAAeC,GAAUmrD,MAAMO,SAAWhuF,SAASuzN,aAAavlI,SAChF4B,EAAiBpsE,EAAa6e,eAAeC,QAI1C9e,GAAiBA,EAAa6e,gBAAmButD,IAC1DA,EAAiBpsE,EAAauJ,eAAiBvJ,EAAa+pE,8BAE1DqC,EAAgB,CAClBhxF,QAAQ4B,IAAI,iBAAkBovF,GAC1ByjI,KACF,IAAA35H,sBAAqB9J,EAAgB9+D,EAAWnM,IAChD,IAAAuoE,iBAAgB0C,IAGd9iE,GACF81C,EAAqBgtB,GAEvBpsE,EAAaw4E,oBAAsBpM,EACnC,IAAM4jI,EAA4B1xM,EAAOy+E,wBAAwBrzF,GAC3DumN,EAAqBD,KAA8B,IAAAnzH,qBAAmB,EAAMnzF,EAAQ0iF,EAAgBxpB,GAErG,EAAD,qBAAuB/+D,GAAaylB,GAG7B0mM,GAA+B,EAAD,oBAAwBlwJ,IAAsB8vJ,GAChF,EAAD,qBAAuBK,GAG3BH,GAAU,IAAAh4H,eAAc1L,GAAgB,GACxCvsB,EAAsBusB,EAAe1iF,SAHrComN,GAAU,IAAAh4H,eAAc1L,IAJxB0jI,GAAU,IAAA33H,oBAAmB/L,EAAe1iF,QAC5Cm2D,EAAsBusB,EAAe1iF,SAWvC,IAAMsvG,GAAe,IAAAE,kBAAiB9sB,KAAmB,IAAAgtB,iBAAgBp5F,EAAcosE,EAAgBurB,EAAYC,QAAQ1vD,QACrHgoK,EAAmBv4G,EAAYC,SAAWD,EAAYC,QAAQC,WAAamB,GAAgBlhH,OAAOmc,KAAK+kG,GAAcnhH,SACrHu0F,EAAepF,0BAA4BsoI,EAAiBljI,EAAe1iF,OAAQ7F,GACzF,GAAIqsN,EAAkB,OAEIV,GACtB,IAAA16G,gBAAekE,EAAcrB,EAAYC,QAAQ1vD,OAAQrkD,GACzD,KAAMuoF,EAAgBurB,EAAa9zG,GAF9BuxC,EAFa,EAEbA,OAAQ+P,EAFK,EAELA,MAMfwyD,EAAYC,QAAQC,UAAUC,aAAa1iE,EAAQ+P,GAAO,EAAO8qK,GACjE5kM,EAAessF,EAAYC,QAAQC,UAAUq2C,QAAQiiE,oBAC5CZ,EAAsBnjI,EAAe1iF,UAC9C,aAAE,cAAcknF,QAAQ,CAACy5E,UAAW7tK,SAAS6C,KAAKshL,cAAe,KAE9DviH,IACHD,EAAc,EAAA7+B,kBAAkBE,aAChC8iC,GAAyB,IAEvB,EAAAtjE,oBAAsBqhE,GACxBD,EAAkB,KAOxB,OAHIo0H,GACFX,EAAQ17L,KAAK23N,GAER1jI,KAG2B,SAACgkI,GACnC,IAAMpwM,EAAeowM,EAAYtsN,cACfssN,GAAetxL,UAAc9e,GAAgBA,EAAakmE,aAErE1mB,GAAqB1gC,WACxBsxL,EAAcpwM,EAAakkE,2BAA2BplD,aAEpD9e,EAAa6e,eAAeC,UAAYsxL,GAGxCA,IACFpwM,EAAauJ,cAAgB6mM,GAE/Bh1N,QAAQ4B,IAAI,2BAA4BozN,EAAapwM,IAEvD,IAAM1B,GAAS,IAAAC,oBACf,GAAI6xM,EAAa,CACf,IAAK5wJ,EACY4wJ,EAAYtsN,YACpB00F,oBAAsB43H,EAM/B,GAJAhxJ,EAAqBgxJ,IACrB,IAAA1mI,iBAAgB0mI,IAChB,IAAAl6H,sBAAqBk6H,EAAa9iM,EAAWnM,GAEzCtd,EAEgBusN,IAAgB9xM,EAAOy+E,wBAAwBqzH,EAAY1mN,SAI3Em2D,EAAsB,IAQ1B,GADAxpC,IACIshF,GAAeA,EAAYC,SAAWD,EAAYC,QAAQC,YAAc,EAAAp1E,WAAWllC,SAAS6yN,EAAY1mN,QAAS,CACnH,IAAMsvG,GAAe,IAAAE,kBAAiBk3G,KAAgB,IAAAh3G,iBAAgBp5F,GAAgBowM,EAAYtsN,YAAassN,EAAaz4G,EAAYC,QAAQ1vD,QAC1I9S,GAAS,IAAA0/D,gBAAekE,EAAcrB,EAAYC,QAAQ1vD,OAAQrkD,GAClEshD,EAAQwyD,EAAYC,QAAQC,UAAUq2C,QAAQiiE,cACpDx4G,EAAYC,QAAQC,UAAUC,aAAa1iE,EAAQ+P,GAAO,EAAM7mC,EAAOy+E,wBAAwBqzH,EAAY1mN,SAC3G2hB,EAAe85B,a,8PChOvB,IAAYvhC,E,wJAAZ,OAE0CysM,EAA7BA,2BAA6B,SAACC,GAAD,MAA2B,CACnE9hN,KAAMoV,EAAMuiD,8BACZliD,QAAS,CACPqsM,0BA6B+Br5F,EAAtBA,oBAAsB,SAACnpH,GAAD,MAAuB,CACxDU,KAAMoV,EAAMwiD,sBACZniD,QAAS,CACPnW,sBAImCyiN,EAA1BA,wBAA0B,SAACniN,GAAD,MAA2B,CAChEI,KAAMoV,EAAMyiD,2BACZpiD,QAAS,CAAC7V,0BAGwBoiN,EAAvBA,qBAAuB,SAACryC,GAAD,MAAwB,CAC1D3vK,KAAMoV,EAAM0iD,uBACZriD,QAAS,CAACk6J,uBAGoCsyC,EAAnCA,iCAAmC,SAACC,GAAD,MAAoC,CAClFliN,KAAMoV,EAAM2iD,sCACZtiD,QAAS,CAACysM,mCAG0BC,EAAzBA,uBAAyB,SAACC,GAAD,MAA0B,CAC9DpiN,KAAMoV,EAAM4iD,mCACZviD,QAAS,CAAC2sM,0B,+JC1DZ,O,WACA,MACA,OACA,OAEA,QACA,Q,IACA,QACA,Q,IACA,OACA,Q,IACA,MACA,QACA,Q,yDAEMC,G,6OAgBJC,sBAAwB,SAACpnN,GACvB,UAAU66B,eAAe,qBAAuB76B,GAChD,IAAIwnI,EAAkBA,GAAlBA,qBAAsB,EAAK6/E,uBACzB1xE,EAAqB,EAAK2xE,wBAC1B98B,EAAgBhjD,EAAgBnxH,WAAU,SAAAkxM,GAAA,OAAyBA,IAA0BvnN,KAC/FwqL,GAAiB,EACnBhjD,EAAgBn4I,OAAOm7L,EAAe,GAEtChjD,EAAgB/4I,KAAKuR,GAEvB21I,EAAmBnO,I,EAGrB6sE,cAAgB,SAACr0M,EAAQ4U,GAAW,MACH,EAAKowF,MAA7B7wF,EAD2B,EAC3BA,KAAMtC,EADqB,EACrBA,eACb,GAAoB,UAAhBsC,EAAKvC,OAAoB,CAC3B,IAAM0E,EAAe1B,EAAOgb,wBAAwB5vB,GACpD,GAAIsW,EACF,OAAO,IAAAd,qBAAoBc,EAAcnC,EAAMtC,GAGnD,OAAQ7R,GACN,IAAK,cACH,OAAO,EAAKglG,MAAM6vG,eAAiB,gBAAkB,QACvD,IAAK,iBACH,OAAO,EAAK7vG,MAAM6vG,eAAiB,gBAAkB,QACvD,IAAK,wBACH,MAAO,gBACT,IAAK,iBACH,MAAO,UACT,IAAK,gBACH,MAAO,SACT,QACE,MAAO,K,EAwEbP,aAAe,WACb,OAAI,EAAKtvG,MAAM3qF,YAAc,IACpB,4CAAkB3Y,GAAG,kDACnB,EAAKsjG,MAAM3qF,YAAc,IAC3B,4CAAkB3Y,GAAG,mDAErB,4CAAkBA,GAAG,mD,EAIhC6yM,iBAAmB,SAACv0M,GAClB,IAAM4U,GAAS,IAAAC,oBACf,OAAO,EAAKmwF,MAAMuyE,cAAcv3K,SAAWA,GACA,YAArClN,SAASC,SAASoC,gBAA2C,0BAAX6K,IAChD4U,EAAOqmE,+BAA+BpnF,SAAS,M,EAGzD2gN,eAAiB,WACf,IAAMgT,EAAgB,EAAKC,mBACrBjgF,EAAkB,EAAK6/E,qBACvBzyM,GAAS,IAAAC,oBAEf,OACE,mCAAU/P,KAAM,EACN2vM,YAAa+S,EACb9S,gBAAgB,EAChBC,UAAW,EAAKL,gBACvBkT,EAAchmN,KAAI,SAAAxB,GACjB,IAAM40M,EAAiB,EAAKL,iBAAiBv0M,GAC7C,OACE,8BAAI9O,IAAK,kBAAkB8O,EACvBskF,UAAW,iCACb,gCAAMA,UAAW,kCACdswH,GAAkBptE,EAAgB3zI,SAASmM,GAAU,wBAA0B,KAC/E40M,EAAiB,yBAA2B,IACzCp+B,QAAS,kBAAMo+B,GAAyB,EAAKwS,sBAAsBpnN,MACzE,gCAAMskF,UAAW,sBAAwBswH,EAAiB,gCAAkC,IACtFp+B,QAAS,kBAAMo+B,GAAyB,EAAKwS,sBAAsBpnN,KACtE,EAAKq0M,cAAcr0M,EAAQ4U,U,EAS1C6yM,iBAAmB,WACjB,MAAyC,YAArC30N,SAASC,SAASoC,eACpB,yBAEK,0CAAmBuL,QAAO,SAAAV,GAAA,MAAqB,qBAAXA,M,EAG7CqnN,mBAAqB,WACnB,MAA4C,YAArCv0N,SAASC,SAASoC,eAA+B,EAAK6vG,MAAM2iC,wBAA0B,EAAK3iC,MAAMwiC,iB,EAG1G8/E,sBAAwB,WACtB,MAA4C,YAArCx0N,SAASC,SAASoC,eAA+B,EAAK6vG,MAAM4wC,2BAA6B,EAAK5wC,MAAM2wC,oB,2GA5K3G,IAAMnO,EAAkB9tI,KAAK2tN,qBACvB1xE,EAAqBj8I,KAAK4tN,wBAC3B9/E,EAAgB3zI,SAAS6F,KAAKsrG,MAAMuyE,cAAcv3K,UACrDwnI,EAAgB/4I,KAAKiL,KAAKsrG,MAAMuyE,cAAcv3K,QAC9C21I,EAAmBnO,M,+BA2Kd,WACDggF,EAAgB9tN,KAAK+tN,mBAC3B,GAAI/tN,KAAKsrG,MAAM6vG,eACb,OAAOn7M,KAAK86M,iBAEd,IAAMhtE,EAAkB9tI,KAAK2tN,qBACvBzyM,GAAS,IAAAC,oBACf,OACE,+BAAKyvE,UAAW,YAAc5qF,KAAKsrG,MAAM7qG,SAAW,oBAAsB,KACxE,+BAAKmqF,UAAU,kBAAf,YACA,8BAAIA,UAAU,oBACXkjI,EAAchmN,KAAI,SAAAxB,GAEjB,OADmB,EAAKu0M,iBAAiBv0M,GACrB,KAClB,8BAAI9O,IAAK8O,EACLskF,UAAW,sDAAwDtkF,GACpEwnI,EAAgB3zI,SAASmM,GAAU,sCAAwC,IAC1Ew2K,QAAS,kBAAM,EAAK4wC,sBAAsBpnN,KAC5C,gCAAMskF,UAAU,kCAChB,gCAAMA,UAAU,iCAAiC,EAAK+vH,cAAcr0M,EAAQ4U,IAC5E,+BAAK0vE,UAAU,kCACb,kCAAQA,UAAW,4BAChBkjD,EAAgB3zI,SAASmM,GAAU,qBAAuB,KAC3D,gCAAMskF,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,iC,kBA9MlFk6I,UAAY,CACjB27B,cAAe,UAAUlmL,OAAOshH,WAChCx4G,SAAU,UAAU2hJ,M,EAiDf4rE,0BAA4B,SAAC3qN,GAAsC,IAA7Bq4M,EAA6B,uDAAhB,YACxD,IAAKr4M,EACH,OAAO,KAET,IAAM2S,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5Ci4M,EAAuBj4M,EAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASilN,KACvE,OAAOuS,IAAyB5qN,EAAQM,UAAUuZ,kBAAkB+wM,EAAqBjmN,KAAO3E,EAAQM,UAAUkS,eAAeo4M,EAAqBjmN,M,EAGjJy3J,6BAA+B,SAAC5yB,EAAoBjwH,GACzD,OAAOA,EAAa+kE,SAAS71E,MAAK,SAACzI,GACjC,IAAMkgF,EAAclgF,EAAQoc,yBAAyB9gB,QAAW0E,EAAQM,UAAU6M,UAA9D,MAA8E,IAClG,OAAO+yE,GAAespD,GAAuBtpD,IAAgBspD,M,EAI1D8B,c,gCAAe,WAAOitE,EAAoBjnM,EAAcm5H,GAAzC,0BAA0Db,EAA1D,+HACd/xH,GAAS,IAAAC,oBACXkqH,EAAkB,GAFF,8BAGOyI,EAHP,qEAGTogF,EAHS,QAIZtxM,EAAe1B,EAAOgb,wBAAwBg4L,GAJlC,wDAQdp2H,OARc,EASuB,YAArC1+F,SAASC,SAASoC,eAA8B,WAClD,IAAM0yN,EAAaV,EAAiBO,0BAA0BpS,EAAoB,aAC5EjuM,EAAY8/M,EAAiBO,0BAA0BpS,EAAoB,YACjF9jH,EAAgBq2H,GAAcvxM,EAAa+kE,SAAS71E,MAAK,SAACzI,GACxD,IAAM+qN,EAAoBX,EAAiBO,0BAA0B3qN,EAAS,aACxEgrN,EAAmBZ,EAAiBO,0BAA0B3qN,EAAS,YAC7E,OAAO8qN,GAAcC,GAAqBzgN,GAAa0gN,GACjDD,EAAkBnuN,MAAK,SAAAquN,GAAA,OAAMH,EAAWh0N,SAASm0N,OACjDD,EAAiBpuN,MAAK,SAAAsuN,GAAA,OAAO5gN,EAAUxT,SAASo0N,SARN,IAW5C1hF,EAAqB+uE,EAAmBn8L,yBAAyB9gB,QAAWi9M,EAAmBj4M,UAAU6M,UAApF,MAAoG,KAC/HsnF,EAAgB21H,EAAiBhuD,6BAA6B5yB,EAAoBjwH,KAE3EA,EAAaywH,8BAAiCzwH,EAAaywH,6BAA6BlzI,SAAS0yI,IACtGxH,EAAgBtwI,KAAK,CAAC63I,YAAahwH,EAAciwH,qBAAoBI,mBAAmB,KAGxFn1C,IACEm1C,IACFrwH,EAAauwH,4BAA8BvwH,EAAauJ,eAE1D2xE,EAAcs1C,kBAAkBz4H,IA/BhB,4QAkChB0wH,EAAgB5wI,OAlCA,mCAmCZ,IAAA63I,gCAA+BjH,GAAiB,GAnCpC,iCAqCbjvI,QAAQC,WArCK,8E,mDAwCfm4N,iBAAmB,SAAC5S,EAAoBjnM,GAC7C,IAAM85M,EAAuB,UAAMtsN,WAAW0rI,gBACP,YAArCz0I,SAASC,SAASoC,eAA+B,0BAA4B,mBAEzEqyI,EAAkBA,GAAlBA,qBAAsB2gF,IACtB39B,EAAgBhjD,EAAgBnxH,WAAU,SAAAkxM,GAAA,OAAyBA,IAA0BjS,EAAmBt1M,UAItH,OAHIwqL,GAAiB,GACnBhjD,EAAgBn4I,OAAOm7L,EAAe,GAEjC28B,EAAiB9+E,aAAaitE,EAAoBjnM,EAAcm5H,I,GA6GrEwiD,EAAqB,CACzBr0C,wCACAC,yD,WAGa,IAAA6L,aACb,IAAAj8C,UAbsB,SAACxzG,GAAD,MAAY,CAClCw1I,gBAAiBx1I,EAAMu1I,gBAAgBC,gBACvCG,wBAAyB31I,EAAMu1I,gBAAgBI,wBAC/CttH,YAAaroB,EAAMgR,YAAYqX,YAC/BxI,eAAgB7f,EAAMqN,mBASG2qL,EAAzB,CAA6Cm9B,K,sICxP/C,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,OACA,UACA,Q,IAMA,MACA,S,OACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,S,uDAEqBiB,E,8DAubnBl2M,eAAiB,WACf,IAAMm2M,EAAe,EAAK77M,SAASk4K,oBAC/B,EAAKrnL,UAAU2M,mBAAsB,EAAK3M,UAAU2M,oBAAsB,EAAK3M,UAAUmF,kBACvF,EAAKnF,UAAU2M,kBACf,EAAKwC,SAASk4K,oBAAoB,GACpC,EAAKrnL,UAAU2M,mBAAqB,EAAKuL,UAAY,GACnD+yM,GAAiB,IAAAxhN,sBAAqB,EAAM,YAAauhN,IAAiBA,GAAgB,GAC1Fp1N,EAAS,EAAKmH,YACpB,OAAOkuN,EAAejwN,SAAS,EAAKgF,UAAUkrN,iBAAmBt1N,EAAOqiB,QAAUriB,EAAOsiB,UAAY,MAAO,K,KAG9GzC,+BAAiC,WAO/B,OANK,EAAK01M,8BACR,EAAKA,6BAA+B,EAAKnrN,UAAU2M,mBAAqB,EAAKuL,UAAY,IACtFsB,OACA7gB,cACAqC,QAAQ,UAAW,KAEjB,EAAKmwN,6B,KAGdhwG,+BAAiC,WAO/B,OANK,EAAKiwG,8BACR,EAAKA,6BAA+B,EAAKprN,UAAUmF,mBAAqB,EAAK+S,UAAY,IACtFsB,OACA7gB,cACAqC,QAAQ,UAAW,KAEjB,EAAKowN,6B,KA2EdC,gCAAkC,WAChC,IACMC,GADS,EAAK/zM,QAAU,EAAKxa,YAAYwa,QACdqmE,+BACjC,OAAO,EAAK3lD,4BACR,EAAKA,4BAA4BqzL,GAAmBlzL,YACpD,EAAKu9I,sB,KAGX3tB,kBAAoB,SAACsjE,GAEnB,GAAI,EAAKrzL,4BAA6B,CACpC,IAAKqzL,EAEHA,GADe,EAAK/zM,QAAU,EAAKxa,YAAYwa,QACpBqmE,+BAE7B,OAAO,EAAK3lD,4BAA4BqzL,GAAmBnzL,KAE7D,OAAO,EAAKy9I,wB,KAGd7gK,kBAAoB,SAAC1C,GACnB,GAAI,EAAK8pE,gBACP,OAAO,EAAKA,gBAEd,IAAMovI,EAAel5M,EAAeA,EAAalK,MAAK,SAAAqjN,GAAA,MAA0B,eAAhBA,EAAO14N,QAAyB,KAChG,GAAIy4N,EAAc,CAChB,IAAME,GAAyB,IAAAhtI,sBAAqB,EAAM8sI,GAC1D,GAAItnN,MAAMC,QAAQunN,GAAyB,CACzC,IAAMC,GAA+B,IAAA9iI,qBAAoB6iI,EAAuB,GAAIF,GACpF,GAAIG,EAEF,OADA,EAAKvvI,iBAAkB,IAAA5sE,wBAAuBm8M,EAA6BhzH,aACpE,EAAKvc,iBAIlB,MAAO,I,KAGTT,aAAe,SAACrpE,GACd,GAAI,EAAKs5M,WACP,OAAO,EAAKA,WAEd,IAAMnjH,EAAmBn2F,EAAeA,EAAalK,MAAK,SAAAqjN,GAAA,MAA0B,UAAhBA,EAAO14N,QAAoB,KAE/F,GAAI01G,EAAkB,CACpB,IAAMijH,GAAyB,IAAAhtI,sBAAqB,EAAM+pB,GAC1D,GAAIvkG,MAAMC,QAAQunN,GAAyB,CACzC,IAAMC,GAA+B,IAAA9iI,qBAAoB6iI,EAAuB,GAAIjjH,GACpF,GAAIkjH,EAEF,OADA,EAAKC,YAAa,IAAAp8M,wBAAuBm8M,EAA6BhzH,aAC/D,EAAKizH,YAIlB,MAAO,I,KAGT/sI,yBAA2B,WACzB,OAAO,EAAK9iE,0B,KAGdkgE,uBAAyB,WACvB,OAAO,EAAKlgE,0B,KAwDd8vM,sBAAwB,SAACzrI,EAAYwoB,EAAkBrtB,GAIrD,IAHA,IAAIuwI,EAAwB,EAAK/zL,eAAL,wBACnB,EAAKhgB,aAAaqoE,IAAe,KADd,aACuB,EAAKlC,kBAAkBkC,IAAe,KACpF,EAAKroE,aAAaqoE,IAAe,GAH+B,WAI5DvvF,GACP,IAAM8O,EAAUmsN,EAAsBj7N,GACtC,GAAI+3G,GAAoBjpG,EAAQyP,SAAR,YAAkCzP,EAAQyP,SAAR,UAA8B3Y,SAASmyG,GAC/F,iBAEF,IAAM/oB,EAAclgF,EAAQoc,yBACvBw/D,EAAYh/E,MAAK,SAAA+tG,GAAA,OAAgBA,EAAavuF,2BAA6B8jE,MAC9EtE,EAAYlqF,KAAKsO,IAPZ9O,EAAI,EAAGA,EAAIi7N,EAAsB/6N,OAAQF,IAAK,EAA9CA,GAUT,OAAO0qF,G,KAGTyF,6BAA+B,WAAsB,IAArBF,EAAqB,uDAAP,GACrCC,EAA0DD,EAA1DC,kBAAmB4nB,EAAuC7nB,EAAvC6nB,kBAAmBC,EAAoB9nB,EAApB8nB,iBAC7C,GAAI7nB,EAAmB,CACrB,IAAMvpE,EAAS,EAAKxa,YAAYwa,OAC5B+jE,EAAc,GAGlB,GADAA,EAAc,EAAKswI,sBAAsBljH,GAAsB,SAAWnxF,EAAO9P,KAAOkhG,EAAkBrtB,GACtGotB,EACF,OAAOptB,EANY,IASd73D,EAAa,UAAMjlB,WAAWukB,wBAA9BU,UASa,KAAhBlM,EAAO9P,MAAqD,WAArChS,SAASC,SAASoC,iBAC3CwjF,EAAc,EAAKswI,sBAAsB,WAAY,IAAKtwI,IAM5D73D,EAAUhpB,SAAQ,SAAAqxN,GAChB,GAAIA,EAASC,cAAgBx0M,EAAO9P,KAApC,CAGA,IAAMukN,EAAoB,SAAWF,EAASC,YAC9CzwI,EAAc,EAAKswI,sBAAsBI,EAAmB,IAAK1wI,OAGnE,IAAM61B,EAAcpgH,OAAOmc,KAAKqK,EAAO45F,aAAa9tG,QAAO,SAAAxP,GAAA,MAAe,QAARA,KAKlE,OAJAs9G,EAAY12G,SAAQ,SAAC8gB,GACnB+/D,EAAc,EAAKswI,sBAAsBrwM,EAAY,KAAM+/D,MAGtDA,EAET,OAAO,EAAKxjD,eAAL,wBAA0B,EAAKkmD,WAA/B,aAA4C,EAAKE,gBAAiB,EAAKF,U,KAGhFiuI,mBAAqB,SAACvsN,GAEpB,GAAKA,EAAQM,UAAU4C,cAAvB,CAGA,IAAMwgG,EAAc,EAAKrmG,UAAY,EAAKA,YAAc,KACxD,KAAIqmG,GAAeA,EAAY7rF,QAAU6rF,EAAY7rF,OAAOqZ,cAA5D,CAGA,IAAMnuB,EAAW,CACf6X,eAAiB8oF,GAAeA,EAAYxjG,SAAYwjG,EAAYlrF,SAAW,EAAKA,SACpF1S,SAAU,EACV7C,OAAQ,EAAKA,OACbD,YAAahD,GAEf,GAAIA,EAAQM,UAAU2wM,aAAc,CAClC,IAAM9nM,EAAa,UAAMrK,WADS,GAEH,aAC7BkB,EACAmJ,EAAWpK,UAAUG,UACrBiK,EAAWU,YAAYD,iBACvBT,EAAWmE,YAAY0Z,kBAJlBlhB,EAF2B,EAE3BA,SAF2B,EAEjB+rM,aAMG1oM,EAAWpK,UAAUG,UAAUtC,MAAK,SAAA0L,GACtD,OAAOA,EAAMtF,aAAesF,EAAMtF,YAAY1C,WAAcgI,EAAMtF,YAAY1C,UAAUqE,KAAO3E,EAAQM,UAAUqE,QAEjH5B,EAAS+C,SAAWA,EACpB,UAAM8a,UAAS,IAAAiG,WAAU,CAAC9jB,MAE5B,UAAM6d,UAAS,IAAA2H,yBAAwBxlB,EAAU,EAAK1F,YAAYwa,OAAOzf,sBAEzE,UAAMwoB,UAAS,IAAAiG,WAAU,CAAC9jB,Q,KAI9B49E,kBAAoB,SAAC3gF,GAKnB,GAJA,EAAKusN,mBAAmBvsN,GACY,SAAhCA,EAAQM,UAAU6M,YACpBnN,GAAU,IAAAwsN,gCAA+BxsN,IAEvC,EAAAvH,cAAgBuH,EAAQM,UAAUmsN,UAAW,CAC/C,IAAM50M,EAAS,EAAKxa,YAAYwa,OAC5BA,GAAUA,EAAO27F,2BAA6B37F,EAAO27F,yBAAyB18G,SAAS,EAAKmM,SAC9F4U,EAAO27F,yBAAyB9hH,KAAK,EAAKuR,U,KA6HhDy4E,uBAAyB,WAGkB,IAHjB3hE,EAGiB,uDAHL,KACZ4hE,EAEiB,uDAFH,GACdC,EACiB,uDADH,GACdjpE,EAAiB,aAEnCkpE,EAA0B,EAAKC,+BAAiC,kBAChEC,EAAkBhiE,EAAaA,EAAWiiE,aAAarpE,GAAgB,GAE7E,OAAOgpE,EAAYl3E,KAAI,SAAAsW,GACrB,IAAMlI,GAAc,IAAAopE,qBAAoBlhE,EAAgBpI,GACpDupE,GAAe,IAAAC,kCAAiCphE,EAAgB6gE,EAAajpE,GAE3EypE,EAAsBrhE,EAAeihE,aAAarpE,GAClD0pE,EAAwBthE,EAAeuhE,yBAE7C,GAAIviE,IAAegB,EAAeza,UAAUqE,KAAOoV,EAAWzZ,UAAUqE,IACrE03E,IAA0BtiE,EAAWuiE,4BACjCviE,EAAWtK,SAASosE,KAA4B,aAAQ9hE,EAAWtK,SAASosE,GAA0B9gE,EAAetL,SAASosE,MAC/HO,GAAuBriE,EAAWiiE,aAAarpE,IAAkBypE,IAAwBriE,EAAWiiE,aAAarpE,IAKrH,OAHIE,IAAgBqpE,EAAat/E,MAAK,SAAAigF,GAAA,OAAUA,EAAOC,WAAWn4E,KAAOkO,EAAYlO,OACnFu3E,EAAaxqF,KAAK,CAACsO,QAAS+a,EAAgB+hE,WAAYjqE,IAEnD,CACLkqE,YAAahjE,EACbmiE,aAAcA,EAAav4E,QAAO,SAAAk5E,GAAA,OAAUA,EAAO78E,QAAQM,UAAUqE,KAAOoV,EAAWzZ,UAAUqE,OAGnG,IAAKkO,EACH,MAAO,CAACkqE,YAAahiE,EAAgBmhE,aAAc,IAErD,IAAMc,EAAaA,CAAC,CAACh9E,QAAS+a,EAAgB+hE,WAAYjqE,IAApD,qBAAqEqpE,IACrEe,EAAcljE,GAAcgiE,GAAmBiB,EAAWv0E,MAAK,SAAAo0E,GAAA,OAAUA,EAAO78E,QAAQg8E,aAAarpE,KAAkBopE,KAE7H,OAAIkB,EACK,CACLF,YAAaE,EAAWj9E,QACxBk8E,aAAcc,EAAWr5E,QAAO,SAAAk5E,GAAA,OAAUA,EAAO78E,QAAQM,UAAUqE,KAAOs4E,EAAWj9E,QAAQM,UAAUqE,OAGpG,CAACo4E,YAAahiE,EAAgBmhE,oB,wDAh6BhC0wD,EAAiBC,EAAkBvsI,GAAoE,WAAzDuhJ,IAAyD,yDAArC6qE,EAAqC,wDAChH,QAAI9/E,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACpCwkJ,GACFllJ,KAAKiwI,GAAiBG,KAAKzsI,IAErBosN,K,2CAKS,WACf/vN,KAAKilJ,mBACPjlJ,KAAKilJ,kBAAkB7mJ,SAAQ,SAAAoS,GAC7B,EAAK4/H,KAAK,CAAC5/H,cAAY,Q,+CAKJqlC,EAASouC,GAChC,OAAOjkF,KAAKukF,wBAAwBvkF,KAAKmkF,wBAAwBnkF,KAAKokF,6BAA6BvuC,EAAS71C,KAAK2hF,UAAWsC,M,yCAQ3GpuC,EAASouC,GAC1B,OAAOjkF,KAAKmkF,wBAAwBnkF,KAAKokF,6BAA6BvuC,GAAUouC,GAC7En8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,+DAGbgyE,EAAUI,GAA4C,IAAjCsE,EAAiC,uDAAf5lF,KAAK2hF,SAC7EquI,EAAkBpqI,EAAgB99E,KAAI,SAACzE,GAE3C,OADAA,EAAQm+C,mBAAsBn+C,EAAQyhF,wBAAwB5D,EAAUI,GACjEj+E,KAET,OAAO2sN,EAAgBloN,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAOhE+3E,GACLA,GACDjnF,KAAKwwI,kBAAkBpyI,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEyhI,UAAU1pD,Q,2BAS/CtjF,GACH3L,QAAQ4B,IAAI,iBAAkBoG,KAAM2D,GACpC,EAAAssN,UAAUC,4B,iCAQgB,WAAnB39C,IAAmB,yDAC1B,OAAOvyK,KAAKwwI,kBACTxpI,QAAO,SAAAiqE,GAAA,OAAQ,EAAKwhG,kBAAkBxhG,EAAMshG,MAC5CzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,wCAGjC09H,EAAa2lC,GAC7B,OAAOA,EACH3lC,EAAYr8G,SAAWq8G,EAAY6sC,oBACnC7sC,EAAYr8G,SACXq8G,EAAY6sC,sBACX7sC,EAAY4sC,sBAAyB5sC,EAAY4sC,qBAAuBpgL,SAASC,SAAS2b,a,uCAOhG,EAAAi7M,UAAUC,wBAAwBlwN,Q,iCASlC,MAAO,K,wCASP,OAAO,O,2CAOP,EAAAiwN,UAAUC,wBAAwBlwN,Q,sCAIlC,EAAAiwN,UAAUC,wBAAwBlwN,Q,mDAGP61C,GAAwC,IAA/BuxD,EAA+B,uDAAfpnG,KAAK2hF,SACzD,OAAQ,aAAQ9rC,GAA6DuxD,GAAiB,IAAnE,IAAAhoF,wBAAuBgoF,EAAevxD,K,8CAG3Cs6K,EAAelsI,GACrC,IAAKA,EACH,OAAOksI,EAET,iBACE,OAAOnwN,KAAKowN,6BAA6BD,EAAelsI,GAE1D,IAAMjuE,EAAe,UAAM7T,WAAW4S,YAAYiB,aAClD,OAAOm6M,EAAcnpN,QAAO,SAAA3D,GAC1B,IAAMgtN,GAAc,aAAKpsI,EAAW3nF,eAChC00E,IAAS3tE,EACb,GAAI2tE,EAAK,CACP,IAAM6b,EAAwBn4F,OAAO+2B,OAAOpoB,EAAQM,UAAUkS,eAAgBxS,EAAQM,UAAUuZ,mBAC5FozM,EAAajtN,EAAQmV,gBAAkBnV,EAAQmV,iBAAiBlc,cAAcnC,SAASk2N,GACvFE,GAAe,EAEnB,IAAID,EAAY,gBACNvjI,GACN,IAAIyjI,EAAiB3jI,EAAsBE,GAF/B,WAGJ0jI,GACN,IAAI5gM,EAAW2gM,EAAeC,GAC9B,GAAGz6M,EAAa+2E,IAAkB/2E,EAAa+2E,GAAe52E,OAAQ,CACpE,IAAIJ,EAAcC,EAAalK,MAAK,SAAAwjB,GAAA,OAAMA,EAAGtnB,KAAO+kF,KACpD,GAAIh3E,GAAeA,EAAYI,OAAQ,CACrC,IAAInP,EAAS+O,EAAYI,OAAOrK,MAAM,SAAA4kN,GAAA,OAAOA,EAAI1oN,KAAO6nB,KACpD7oB,IACFupN,EAAgBA,GAAgBvpN,EAAOq1F,YAAY//F,cAAcnC,SAASk2N,IAAgBrpN,EAAO9P,MAAMoF,cAAcnC,SAASk2N,OAPtI,IAAI,IAAII,KAAeD,EAAgB,EAA/BC,IAFV,IAAI,IAAI1jI,KAAiBF,EAAuB,EAAxCE,GAiBV/b,EAAMs/I,GAAcC,EAEtB,OAAOv/I,O,mDAIkBm/I,EAAelsI,GAC1C,IAAMjuE,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5C26M,EAAwB36M,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,eAAfA,EAAMxf,QACzD45N,EAAcpsI,EAAW9mE,OAAO7gB,cAEtC,OAAO6zN,EAAcnpN,QAAO,SAAA3D,GAC1B,IAAMwpF,GAAwB,IAAAF,sBAAqBtpF,GAC7Ci/B,GAAOj/B,EAAQoc,0BAA4B,IAAInjB,cAC/CgU,GAAqBjN,EAAQM,UAAU2M,mBAAqB,IAAIhU,cAElE00E,IAAS3tE,EACb,GAAI2tE,EAAK,CACP,IAAI4/I,EAAetuL,GAAOA,EAAInoC,SAASk2N,IAAkB//M,GAAqBA,EAAkBnW,SAASk2N,GACrGE,GAAe,EAUnB,IARKK,GAAeD,GAAyB/oN,MAAMC,QAAQglF,EAAsB8jI,EAAsB3oN,OACrG4oN,EAAc/jI,EAAsB8jI,EAAsB3oN,IAAI/H,MAAK,SAAA4vB,GACjE,OAAO8gM,EAAsBx6M,OAAOlW,MAAK,SAAAkgB,GACvC,OAAQA,EAAOnY,KAAO6nB,GAAa1P,EAAOk8E,aAAel8E,EAAOk8E,YAAY//F,cAAcnC,SAASk2N,WAKpGO,EAAa,gBACR7jI,GACN,IAAIyjI,EAAiB3jI,EAAsBE,GAF7B,WAGN0jI,GACN,IAAI5gM,EAAW2gM,EAAeC,GAC9B,GAAGz6M,EAAa+2E,IAAkB/2E,EAAa+2E,GAAe52E,OAAQ,CACpE,IAAIJ,EAAcC,EAAalK,MAAK,SAAAwjB,GAAA,OAAMA,EAAGtnB,KAAO+kF,KACpD,GAAIh3E,GAAeA,EAAYI,OAAQ,CACrC,IAAInP,EAAS+O,EAAYI,OAAOrK,MAAK,SAAA4kN,GAAA,OAAOA,EAAI1oN,KAAO6nB,KACnD7oB,IACFupN,EAAgBA,GAAgBvpN,EAAOq1F,YAAY//F,cAAcnC,SAASk2N,IAAgBrpN,EAAO9P,MAAMoF,cAAcnC,SAASk2N,OAPtI,IAAI,IAAII,KAAeD,EAAgB,EAA/BC,IAFV,IAAI,IAAI1jI,KAAiBF,EAAuB,EAAxCE,GAiBV/b,EAAM4/I,GAAeL,EAEvB,OAAOv/I,O,2BAST,OAAOhxE,KAAK2D,UAAUqE,K,qCASTonD,GAA6B,IAAlByhK,EAAkB,wDACpCC,GAAY1hK,EAClB,KAAKpvD,KAAK2hF,UAAckvI,GAAa7wN,KAAK6hF,eAExC,OADA7pF,QAAQC,MAAM,2CAA4C+H,MACnD,KAOT,IADA,IAAMi/E,EAAc4xI,EAAWA,GAAXA,qBAAe7wN,KAAK2hF,WAApB,aAAiC3hF,KAAK6hF,gBAAiB7hF,KAAK2hF,SACvEptF,EAAI,EAAGA,EAAI0qF,EAAYxqF,OAAQF,IACtC,GAAI0qF,EAAY1qF,GAAGoP,UAAUqE,KAAO8oN,EAClC,OAAO7xI,EAAY1qF,GAGvB,OAAO,O,2CAGYsnB,GAA2B,IAAjBk1M,EAAiB,wDAC9C,IAAKl1M,EACH,OAAO,KAETA,EAAWA,EAAS9d,MAAM,KAAKsV,KAAK,IAAI/W,cACxC,IAAM00N,EAAcD,GAAW/wN,KAAKixN,aAAejxN,KAAKixN,aAAanpN,KAAI,SAAAzE,GAAa,MAAO,CAACmY,KAAMnY,MAAcrD,KAAK0f,qBACjHwxM,EAAeF,EAAYllN,MAAK,SAAA65E,GACpC,IAAMtiF,EAAUsiF,EAAWnqE,KAC3B,SAAKnY,EAAQwY,UAAYxY,EAAQugF,4BAG5BvgF,EAAQ8tN,yBACX9tN,EAAQ8tN,uBAAyB9tN,EAAQs/E,yBAAyB5kF,MAAM,KAAKsV,KAAK,IAAI/W,eAEjFuf,IAAaxY,EAAQ8tN,2BAE9B,OAAOD,EAAeA,EAAa11M,KAAO,O,qFAYA,IAA5B+0H,EAA4B,wDAC1C,OAAOA,GAAsBvwI,KAAKgnF,qBAAuBhnF,KAAK0mF,mBAC1D1mF,KAAKgnF,mBAAmBrjF,UAAUqE,GAClChI,KAAKmmB,cAAcxiB,UAAUqE,K,4CAOC,IAAhB3E,EAAgB,uDAAN,KACtBM,EAAYN,EAAUA,EAAQM,UAAY3D,KAAK2D,UACrD,OAAOA,EAAUi7G,sB,6HAYjB,MAAO,K,4CAIQ5+G,KAAKkb,QAAUlb,KAAKU,YAAYwa,QAAUlb,KAAKU,YAAYA,YAAYwa,QAC/E23E,uB,2CAQP,EAAAo9H,UAAUC,4B,gFAeAkB,GACV,OAAOpxN,KAAK2D,UAAUkS,eAAeu7M,GAAS,K,gGAe9C,OAAO,O,wCAIP,OAAOpxN,KAAK+e,e,iCAOH7D,GACTlb,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GAAA,OAAeA,EAAYxmD,WAAWlrE,Q,6CAG3CA,GAAyD,WAAjD4qE,EAAiD,uDAA5B9lF,KAAKu5G,sBACjD/4B,EAAaxgF,KAAKygF,qBAAuBzgF,KAAKygF,uBAAyB,KACzEgI,EAAmBjI,EAAaxgF,KAAK2hF,SAAS36E,QAAO,SAAA3D,GACvD,OAAOyiF,GAEHziF,EAAQM,UAAUixB,aADlBvxB,EAAQs9E,gCAAgCH,MAEzCxgF,KAAK2hF,SAE+B,WAArCvoF,SAASC,SAASoC,gBAAgCgtF,EAAiBh0F,SACjE,IAAA+gC,oBAAmBta,KAAY,EAAAua,gBAAgBC,IAAS11B,KAAKsG,OAAOnM,SAAS,UAAY6F,KAAKimF,qBAClGwC,EAAmBzoF,KAAKygF,qBACpBzgF,KAAK6hF,cAAc76E,QAAO,SAAAtO,GAAA,OAAKA,EAAEiL,UAAUixB,YAAcl8B,EAAEioF,gCAAgCH,MAC3FxgF,KAAK6hF,eAGX,IAAMwvI,EAAuBrxN,KAAKimG,uBAAuBxd,EAAkB,MACtE4oI,IACHrxN,KAAKmmB,cAAgBsiE,EAAiB,IAExC,IAAM9G,EAAW3hF,KAAK2hF,SAClB,EAAA7lF,cAAgBkE,KAAKmmB,gBAAkBnmB,KAAK2mF,8BAAgC/+E,MAAMC,QAAQ85E,IACzFA,EAASltF,QAAUktF,EAAS9jF,OAAM,SAAAwF,GAAA,OAAWA,EAAQugF,8BACxD5jF,KAAK2mF,6BAA+BhF,EAAS,IAK3C3hF,KAAKimF,qBACPjmF,KAAK8mF,mBAAqB9mF,KAAK8nF,yBAE7B9nF,KAAKy7B,iBACHz7B,KAAKmmB,cACPnmB,KAAKugF,oBAEL7rF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAA5G,GACvC,EAAKikC,eAAejkC,GAAO,W,+CAM0B,WAAtCixF,EAAsC,uDAAnB,GAAI5sE,EAAe,uDAAJ,GACjDosE,EAAuBjoF,KAAKmmB,cAClC,GAAI8hE,GAAwBA,EAAqBpsE,SAAU,CACzD,IAAIkmI,EAA4BlmI,GAAY7b,KAAK0iH,yBAC7C1iH,KAAK0iH,yBAAyB7mG,GAC9B7b,KAAKmmB,cAAcw8D,yBAIvB,GAHA3iF,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GACzC,OAAOA,EAAQs/E,2BAA6Bo/D,MAEzC/hJ,KAAKmmB,cAAe,CACvB,IAAMnQ,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5C02F,GAAmB,IAAAptB,qBAAoB2I,EAAsBjyE,GAC/D02F,IACF1sG,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GACzC,IAAMiuN,GAA0B,IAAAhyI,qBAAoBj8E,EAAS2S,GAC7D,OAAOs7M,GAA2BA,EAAwBtpN,KAAO0kG,EAAiB1kG,QAK1F,IAAKhI,KAAKmmB,eAAiBnmB,KAAK05K,wBAAyB,4BACvD,YAAwB15K,KAAK05K,wBAAwBrhL,MAAM,EAAG,GAA9D,+CAAkE,KAAzDkrF,EAAyD,QAC1D8tB,EAAerxG,KAAKuxN,qBAAqBhuI,GAC/C,GAAI8tB,EAAc,kBAChB,IAAMmgH,EAA0BngH,EAAa1uB,yBACvC8uI,EAAehpI,EAAiB38E,MAAK,SAAAzI,GACzC,OAAOA,EAAQs/E,2BAA6B6uI,KAE9C,GAAIC,EAEF,OADA,EAAKtrM,cAAgBsrM,EACrB,QAPc,kBAOd,QAViD,8EAezD,QAASzxN,KAAKmmB,gB,uCA2CC4sL,GAMqC,IALrCnhF,EAKqC,uDAL1B,IACXohF,IAIqC,yDAHrC9qH,EAGqC,uDAHxB,GACb+qH,EAEqC,uDAFxB,KAEwB,OADrCC,EACqC,wDAArCwe,IAAqC,yDAE9Cx2M,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OACzCy2M,EAAczpI,GAAchtE,EAAOqmE,+BAEzC,GAAIyxH,EAAa,CAEf,IAAIz5B,EAAyB,EACvBq4C,EAA+B,MAAbhgG,EAAoB,EAAI,EAE9C2nD,EADEv5K,KAAK47B,4BACkBtzB,OAAOC,UAAU0qM,GACtCjzM,KAAK47B,4BAA4B+1L,GAAa71L,KAAO81L,EACrD5xN,KAAK47B,4BAA4B+1L,GAAa71L,KAAO,EAEhCxzB,OAAOC,UAAU0qM,GACtCjzM,KAAKu5K,uBAAyBq4C,EAC9B5xN,KAAKu5K,uBAAyB,EAQpCv5K,KAAKu5K,uBAAyBA,EAC1Bv5K,KAAK47B,8BACP57B,KAAK47B,4BAA4B+1L,GAAa71L,KAAOy9I,GAEvDv5K,KAAKoyF,qBAAsB,EAE7B,IAAK8gH,EACH,GAAIlzM,KAAK47B,4BAA6B,CACpC57B,KAAK47B,4BAA4B+1L,GAAa51L,YAAcg3K,EAAgBt+M,OAASm9H,EADjD,IAE7BxqG,EAAa,UAAMjlB,WAAWukB,wBAA9BU,UACP,GAAIA,GAAaA,EAAU3yB,OAAQ,CACjC,IAAMo9N,EAAqBzqM,EAAU9lB,QAAO,SAACmB,EAAO4xF,GAIlD,OAHK5xF,EAAMxC,MAAK,SAAAif,GAAA,OAAcA,IAAem1E,EAAOq7H,gBAClDjtN,EAAM1N,KAAKs/F,EAAOq7H,aAEbjtN,IACN,IACHzC,KAAKs5K,qBAAuBu4C,EAAmBh0N,OAAM,SAAAi0N,GACnD,IAAMhuI,EAAa5oE,EAAOwmE,qBAAqBowI,GAC/C,OAAO,EAAKl2L,4BAA4BkoD,IAAe,EAAKloD,4BAA4BkoD,GAAY/nD,oBAGtG/7B,KAAKs5K,qBAAuBy5B,EAAgBt+M,OAASm9H,OAGvD5xH,KAAKs5K,qBAAuBy5B,EAAgBt+M,OAASm9H,EAIzD12G,EAAOsmG,gBAAgBuxF,EAAiB/yM,KAAM0xN,K,gCA4EtCx2M,EAAQq1H,GAChB,IAAItwB,EAAS,GAiCb,OAhCAjgH,KAAKwwI,kBACFxpI,QAAO,SAAAgY,GAAA,OAAWA,EAAQy6J,uBAC1Br7K,SAAQ,SAAAwuI,GACPA,EAAYn+B,UAAUvzF,GACtB,IAAI62M,EAAiB,GACjBnlF,EAAYnxG,eACd/mC,OAAOmc,KAAK+7H,EAAYnxG,gBAAgBr9B,SAAQ,SAAA5G,GAC1Co1I,EAAYnxG,eAAejkC,IAC7Bu6N,EAAeh9N,KAAK63I,EAAYnxG,eAAejkC,OAI/C+4I,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBACvE+qI,EAAeh9N,KAAK63I,EAAY5lD,oBACvB4lD,EAAYzmH,eAAwC,eAAvBymH,EAAYtmI,QAClDyrN,EAAeh9N,KAAK63I,EAAYzmH,eAGhCymH,EAAY9lD,oBAAsB8lD,EAAY9lD,mBAAmBryF,SACnEs9N,0BAAqBA,IAArB,aAAwCnlF,EAAY9lD,sBAEtDirI,EAAe3zN,SAAQ,SAAC2oF,GAClBA,GAAqBA,EAAkBF,MAAM9nF,MAE/CgoF,EAAkBF,MAAM8qB,OAAS5qB,EAAkBj0E,SAAlB,OACjCi0E,EAAkBF,MAAMvgF,OAASygF,EAAkBzgF,OACnDygF,EAAkBF,MAAMjG,cAAgBmG,EAAkBj0E,SAAS8tE,cACnEmG,EAAkBF,MAAM2xH,YAAa,IAAArlG,qBAAoBpsB,GACzDk5B,EAAOlrH,KAAKgyF,EAAkBF,cAI/Bo5B,EAAOxrH,OAASwrH,EAAS,O,6CAKhCjgH,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACxBA,EAAYO,4BAA+BP,EAAYlmD,mBAEnDkmD,EAAYzmH,cADZ,mB,iCA6HGjL,GAAQ,WAEZlb,KAAK8iF,SA+BR9iF,KAAKqmF,cA9BArmF,KAAKmmB,eACRnmB,KAAKomF,WAAWlrE,GAEdlb,KAAKy7B,eACP/mC,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAA5G,GACnC,EAAKikC,eAAejkC,KAClB,EAAKikC,eAAejkC,GAAKmpF,gCAAgC,EAAKF,wBAChE,EAAKylB,gBAAgB,EAAKzqE,eAAejkC,GAAM0jB,GAE/C,EAAKugB,eAAejkC,GAAKqvF,MAAM9nF,IAAM,OAIlCiB,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcy9D,2BAC/B,eAAhB5jF,KAAKsG,QACPtG,KAAKkmG,gBAAgBlmG,KAAKmmB,cAAejL,GAEvClb,KAAKimF,oBAA4D,YAArC7sF,SAASC,SAASoC,iBAChDuE,KAAK8mF,mBAAqB9mF,KAAK8nF,yBAE7BlgF,MAAMC,QAAQ7H,KAAK8mF,qBAAuB9mF,KAAK8mF,mBAAmBryF,QACpEuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/B,EAAKmf,gBAAgBnf,EAAmB7rE,OAI1Clb,KAAKgnF,oBACPhnF,KAAKkmG,gBAAgBlmG,KAAKgnF,mBAAoB9rE,M,sCAOpCkD,EAAgBlD,GAG9B,IAAMkrF,EAAYlrF,EAAOqmE,+BACzB,GAAKnjE,GAAmBA,EAAeza,WAAcya,EAAeza,UAAUixB,YACtExW,EAAeza,UAAUmP,SAAzB,YAAqDsL,EAAeza,UAAUmP,SAAzB,WAAgD3Y,SAASisG,GADtH,CAOA,IAAMC,EAAYjoF,EAAeza,UAAUixB,WAAW9oB,MAAK,SAAAg6F,GAAA,OAAWA,EAAQtc,aAAetuE,EAAO82M,iBACpG5zM,EAAeyoE,MAAM9nF,IAAMsnG,EAAYA,EAAUgT,KAAO,KACxDj7F,EAAeyoE,MAAMtoF,WAAa8nG,EAAYA,EAAU9nG,WAAa,UAP/D6f,IACFA,EAAeyoE,MAAM9nF,IAAM,M,uCAU/B,IAAMkzN,EAAkBjyN,KAAKmmB,cAAgBnmB,KAAK05K,wBAA0B15K,KAAKU,YAAYg5K,wBACvF79J,EAAW7b,KAAKmmB,cAAgBnmB,KAAKmmB,cAActK,SAAW7b,KAAK6b,SACrEjU,MAAMC,QAAQoqN,IAAqBA,EAAgB,KAAOp2M,IAC5Do2M,EAAgB97J,QAAQt6C,GACpBo2M,EAAgBx9N,OAAS,IAC3Bw9N,EAAgB19E,OAGpBv0I,KAAK6yF,uB,iDAMoBh9C,EAASz4B,EAAYpH,EAAcquE,GAE5D,IAAIrF,EAAc,GACdiG,EAAW,GACT/F,EAA0Bl/E,KAAKm/E,+BAAiC,kBAEtE,GAAInpE,GAAgBA,EAAavhB,UAAYohD,IAAYnhD,OAAOmc,KAAKglC,GAASphD,QAAS,CAGrF,IAHqF,eAG5EF,GACP,IAAM6pB,EAAiBimE,EAAkB9vF,GACnC4wF,EAAY/mE,EAAeihE,aAAarpE,GACxCovE,EAAsBhnE,EAAeuhE,2BACpBwF,IACjBnG,EAAY/+E,MAAK,SAAAoD,GAAA,OAAWA,EAAQs8E,2BAA6ByF,MACjEhnE,EAAetL,SAASosE,KAA6BF,EAAY/+E,MAAK,SAAAoD,GAAA,OAAWA,EAAQyP,SAASosE,KAC7F,aAAQ77E,EAAQyP,SAASosE,GAA0B9gE,EAAetL,SAASosE,SAEpFF,EAAYjqF,KAAKqpB,IATZ7pB,EAAI,EAAGA,EAAI8vF,EAAkB5vF,OAAQF,IAAK,EAA1CA,GAYT0wF,EAAWjlF,KAAKukF,wBAAwBvkF,KAAK++E,uBAAuB3hE,EAAY4hE,EAAaqF,EAAmBruE,GAAclO,KAAI,SAAAy9E,GAChI,OAAO,IAAI,EAAJ,QAAyBA,EAAcnF,YAAYmD,YAAagC,EAAcnF,YAAamF,EAAchG,kBAC9G,GAQN,OANK0F,EAASxwF,SACZwwF,EAAWjlF,KAAKukF,wBAAwBF,IAKnCY,I,8CAwDeZ,GAA0C,IAAvB6tI,IAAuB,yDAC1DjtI,EAAWitI,EAAiBlyN,KAAKmyN,2BAA2B9tI,GAAqBA,EACvF,MAAyC,YAArCjrF,SAASC,SAASoC,gBAAgD,SAAfuE,KAAKsG,QAAmC,uBAAftG,KAAKsG,QACjE,gBAAftG,KAAKsG,QAA0C,kBAAftG,KAAKsG,OAGtClN,SAASC,SAASqC,aAAe,GAC5B,aAAOupF,GAAU,SAACtlE,GAAD,OAAaA,EAAQnE,KAAK7X,UAAUqE,IAAM2X,EAAQnE,KAAK7X,UAAUmF,sBAEpF,aAAOm8E,GAAU,SAACtlE,GAAD,OAAaA,EAAQnE,KAAK7X,UAAUqE,OALnD,aAAOi9E,GAAU,SAACtlE,GAAD,OAAaA,EAAQnE,KAAK7X,UAAUqE,IAAM2X,EAAQnE,KAAKiE,8B,iDAQxD4kE,GACzB,OAAOA,EAAkBv8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,U,eAp7BzDw/M,EAy7BrBA,EAAW/5N,UAAUof,mBAAqB,SAAUq+M,GAClD,GAAI19N,OAAOE,eAAeoL,KAAKqyN,cAC7B,OAAOryN,KAAKqyN,aAEdryN,KAAKqyN,aAAe,KACpB,IACMt8M,GADeq8M,GAAqB,UAAMjwN,WAAW4S,YAAYiB,cACtClK,MAAK,SAAAmK,GAAA,MAAwB,aAAfA,EAAMxf,QACrD,IAAKsf,EACH,OAAO/V,KAAKqyN,aAEd,IAAMjD,GAAyB,IAAAhtI,sBAAqBpiF,KAAM+V,GAC1D,GAAInO,MAAMC,QAAQunN,GAAyB,CACzC,IAAMC,GAA+B,IAAA9iI,qBAAoB6iI,EAAuB,GAAIr5M,GAChFs5M,IACFrvN,KAAKqyN,aAAehD,EAA6Bn4N,OAGrD,OAAO8I,KAAKqyN,cAGd3D,EAAW/5N,UAAUgrK,0BAA4B,WAM/C,OALK3/J,KAAKsyN,uBAER,IAAAC,qBAAoBvyN,KAAK2D,UAAW3D,KAAKU,YAAYA,YAAYwa,QACjElb,KAAKsyN,qBAAsB,GAEtBtyN,KAAK2D,UAAUwa,kB,iLC5+BxB,O,IACA,QAEA,QACA,QACA,QACA,QACA,QAKA,SACA,Q,IACA,MACA,Q,uDAEqBq0M,G,sPAEnBC,mB,gCAAoB,WAAOxhJ,EAAMyhJ,GAAb,oBAA6BC,EAA7B,uDAAwC,KAAxC,0EACb1hJ,EAAKz1D,KAAKiwI,iBAAoBx6E,EAAKz1D,KAAKwlG,kBAD3B,oBAEV4xG,EAAW3hJ,EAAKz1D,KAChBN,EAAS03M,GAAYA,EAASlyN,WAChCkyN,EAASlyN,YAAYwa,SACrB,IAAAC,oBACAywI,OANY,GAOZ1wI,EAAO4Z,YAPK,kCAQQ,IAAAu9D,+BAA8BugI,GAAU,GARhD,OAQdhnE,EARc,sCAURh6B,GAAW,IAAA25B,qBAAoBqnE,GAC/B1qI,EAAahtE,EAAOqmE,+BACpBmqE,EAAmBknE,EAASjnE,kBAAkBzjE,GACpD0qI,EAAS5xG,mBAAoB,EAbf,WAcS,IAAA2Q,oBAAmBihG,EAASh3M,QAAUg3M,EAAS/2M,SAAU6vI,EAAkB95B,GAdpF,QAcRzvB,EAdQ,OAgBdypD,EAAgBhkJ,MAAMC,QAAQs6F,GAAYA,EAAW,GAErDywH,EAAS5xG,mBAAoB,EAI7B4xG,EAAS5lF,iBAAiB4e,EAAeh6B,GAAU,EAAM1pC,EAAYwjE,GAtBvD,eAwBZgnE,GACF,EAAKp1C,UAAL,qBACGo1C,EAAiBzhJ,IADpB,yBAEU,IAFV,sCAGuB,GAHvB,IAIG,WACD,EAAKqsG,SAAS,CACZrjH,QAAQ,IAEV,EAAK+oJ,iBAGL2P,GACFA,IAEE,EAAKE,YACP,EAAK7P,cAxCS,kBA2CTp3D,GA3CS,8C,iDA+CpBknE,uBAAyB,SAAClmF,GACxB,OAAO,EAAK6lF,kBAAkB,CAC5Bj3M,KAAMoxH,EACNtqH,KAAMsqH,EAAY/wH,UACjB,K,EAGLk3M,2BAA6B,SAAC9hJ,EAAMyhJ,EAAgBC,EAAUK,GAC5D,qBACE,OAAO,EAET,IAAMJ,EAAW3hJ,EAAKz1D,KAChBN,EAAS03M,GAAYA,EAASlyN,WAChCkyN,EAASlyN,YAAYwa,SACrB,IAAAC,oBACE+sE,EAAahtE,EAAOqmE,+BACpBrmE,EAAO4Z,aAAgB89L,IAAiC,UAApBA,EAAStsN,QAA0C,UAApBssN,EAAStsN,SAC3EssN,EAASxgI,uBAAwBwgI,EAASh3L,6BAAgCg3L,EAASh3L,4BAA4BssD,GAAYpsD,OAChI,EAAK22L,kBAAkBxhJ,EAAMyhJ,EAAgBC,GAE3Cz3M,EAAO4Z,cACT,IAAA69D,6BAA4BigI,GAAU,GAAM/gM,MAAK,WAC3CmhM,EACE,EAAKH,YACP,EAAK7P,cAGP2P,EAAWA,IAAa,EAAK3P,iBAInC,IA2GQ,EA3GFtyE,EAAex1H,EAAOsD,MAAP,OACfkuH,EAAaxxH,EAAOsD,MAAP,MACby0M,EAAoB/3M,EAAOsD,MAAM,oBACjC0zE,EAAgBh3E,EAAOsD,MAAP,QAChB00M,EAAqBh4M,EAAOsD,MAAP,aACrB20M,EAAmBj4M,EAAOsD,MAAP,WACnB40M,EAAkBl4M,EAAOsD,MAAP,WAExB,GAAI,EAAK60M,WAAWT,GAClBlmF,EAAW3tH,aAAa3gB,SAAQ,SAAAwuI,GAC1BA,EAAYtmI,SAAWssN,EAAStsN,QAAWsmI,EAAYx6C,qBACzD,EAAK0gI,uBAAuBlmF,WAG3B,GAAwB,mBAApBgmF,EAAStsN,OAA6B,CAO/C,GANqBssN,EAASlyN,YACjBqe,aAAa3gB,SAAQ,SAAAwuI,GAC5BA,EAAYtmI,SAAWssN,EAAStsN,QAAWsmI,EAAYx6C,qBACzD,EAAK0gI,uBAAuBlmF,OAG3B1xH,EAAO4Z,YAAa,CACvB,IAAMnV,EAAU,CACdnE,KAAMk1H,EAAarnD,WACnB/mE,KAAMouH,EAAarnD,WAAWxtE,UAEhC,EAAKk3M,2BAA2BpzM,EAAS,IACrC+sH,EAAW4mF,eAAiB5mF,EAAW4mF,aAAalhI,qBACtD,EAAK0gI,uBAAuBpmF,EAAW4mF,oBAGtC,GAAwB,gBAApBV,EAAStsN,OACdoqI,GAAgBA,EAAakW,mBAAqBlW,EAAakW,iBAAiBx0D,qBAClF,EAAK0gI,uBAAuBpiF,EAAakW,uBAEtC,GAAwB,gBAApBgsE,EAAStsN,OACd4rF,GAAiBA,EAAcigF,eAAiBjgF,EAAcigF,aAAa//E,qBAC7E,EAAK0gI,uBAAuB5gI,EAAcigF,cAExCjgF,GAAiBA,EAAckgF,YAAclgF,EAAckgF,UAAUhgF,qBACvE,EAAK0gI,uBAAuB5gI,EAAckgF,WAExClgF,GAAiBA,EAAcK,gBAAkBL,EAAcK,cAAcH,qBAC/E,EAAK0gI,uBAAuB5gI,EAAcK,eAExC2gI,GAAsBA,EAAmBK,UAAYL,EAAmBK,QAAQnhI,qBAClF,EAAK0gI,uBAAuBI,EAAmBK,SAE7CH,GAAmBA,EAAgB5hL,OAAS4hL,EAAgB5hL,KAAK4gD,qBACnE,EAAK0gI,uBAAuBM,EAAgB5hL,WAEzC,GAAwB,mBAApBohL,EAAStsN,OACd4rF,GAAiBA,EAAcC,aAAeD,EAAcC,WAAWC,qBACzE,EAAK0gI,uBAAuB5gI,EAAcC,YAExC+gI,GAAsBA,EAAmBK,UAAYL,EAAmBK,QAAQnhI,qBAClF,EAAK0gI,uBAAuBI,EAAmBK,SAE7CrhI,GAAiBA,EAAcM,eAAiBN,EAAcM,aAAaJ,qBAC7E,EAAK0gI,uBAAuB5gI,EAAcM,mBAEvC,GAAwB,0BAApBogI,EAAStsN,OACd4rF,GAAiBA,EAAcC,aAAeD,EAAcC,WAAWC,qBACzE,EAAK0gI,uBAAuB5gI,EAAcC,YAExCD,GAAiBA,EAAcK,gBAAkBL,EAAcK,cAAcH,qBAC/E,EAAK0gI,uBAAuB5gI,EAAcK,oBAEvC,GAAwB,eAApBqgI,EAAStsN,OACd4sN,GAAsBA,EAAmB/hL,aAAe+hL,EAAmB/hL,WAAWihD,qBACxF,EAAK0gI,uBAAuBI,EAAmB/hL,YAE7Cu7F,GAAcA,EAAWp4F,aAAeo4F,EAAWp4F,WAAW89C,qBAChE,EAAK0gI,uBAAuBpmF,EAAWp4F,iBAEpC,GAAwB,6BAApBs+K,EAAStsN,QACd6sN,IAAoBA,EAAiBhiL,YAAgBgiL,EAAiBhiL,WAAWihD,qBAC9E8gI,EAAmB/hL,aAAe+hL,EAAmB/hL,WAAWihD,qBACrE,EAAK0gI,uBAAuBK,EAAiBhiL,YAE3Cu7F,GAAcA,EAAWp4F,aAAeo4F,EAAWp4F,WAAW89C,qBAChE,EAAK0gI,uBAAuBpmF,EAAWp4F,iBAEpC,GAAwB,eAApBs+K,EAAStsN,OACd6sN,GAAoBA,EAAiBhiL,aAAegiL,EAAiBhiL,WAAWihD,qBAClF,EAAK0gI,uBAAuBK,EAAiBhiL,YAE3C+hL,GAAsBA,EAAmB/hL,aAAe+hL,EAAmB/hL,WAAWihD,qBACxF,EAAK0gI,uBAAuBI,EAAmB/hL,iBAE5C,GAAwB,iBAApByhL,EAAStsN,OACd6sN,GAAoBA,EAAiBhiL,aAAegiL,EAAiBhiL,WAAWihD,qBAClF,EAAK0gI,uBAAuBK,EAAiBhiL,iBAE1C,GAAwB,uBAApByhL,EAAStsN,OACd4sN,GAAsBA,EAAmB/hL,aAAe+hL,EAAmB/hL,WAAWihD,qBACxF,EAAK0gI,uBAAuBI,EAAmB/hL,iBAE5C,GAAwB,cAApByhL,EAAStsN,QAA8C,SAApBssN,EAAStsN,OACjD4rF,GAAiBA,EAAcC,aAAeD,EAAcC,WAAWC,qBACzE,EAAK0gI,uBAAuB5gI,EAAcC,iBAEvC,GAAIygI,EAASnnE,gBAAiB,CACnC,IAAMO,EAAc,CAAC,YAAa,mBAAoB,qBAClD2mE,GACF3mE,EAAYj3J,KAAK,WAEb,gCAAU,oGACDqB,QAAQ64I,IAAR,wBAAgByB,EAAa3xH,aAAajX,IAA1B,+CAA8B,WAAM8kI,GAAN,0EACrDA,EAAYtmI,SAAWssN,EAAStsN,QAAWsmI,EAAYx6C,oBADF,gCAE1C,EAAK0gI,uBAAuBlmF,GAFc,qFAA9B,yDAAhB,aAINF,EAAW3tH,aAAajX,IAAxB,+CAA4B,WAAM8kI,GAAN,2EAC7Bof,EAAY7xJ,SAASyyI,EAAYtmI,SAAYsmI,EAAYx6C,oBAD5B,gCAElB,EAAK0gI,uBAAuBlmF,GAFV,qFAA5B,0DALO,qFAAV,8CAYH/6G,MAAK,WACJ6+G,EAAarnD,WAAW+I,qBAAsB,EAC9C6gI,EAAkB5qI,kBAAkB+J,qBAAsB,EACtD4gI,EACE,EAAKH,YACP,EAAK7P,cAGP2P,EAAWA,IAAa,EAAK3P,mB,EAMvCwQ,0BAA4B,SAAC31C,EAAewB,GAC1C,OAAO,IAAArtD,wBAAuB6rD,EAAcjiK,QAAUiiK,EAAchiK,UACjEgW,MAAK,SAACswE,GAEL,OADA,IAAA+8E,2BAA0B/8E,EAASluG,KAAM4pL,EAAewB,IACjD,M,EAIbg0C,WAAa,SAACT,GACZ,IAAIp/G,EAAe,GACnB,OAAOp6G,SAASC,SAASoC,gBACvB,IAAK,WACL,IAAK,KACH+3G,EAAe,CAAC,SAAU,SAAU,SAAU,oBAAqB,mBAAmB,aACtF,MACF,IAAK,UACHA,EAAe,CAAC,YAAa,aAAc,eAC3C,MACF,IAAK,UACHA,EAAe,CAAC,YAAa,aAAc,cAAe,aAAc,eACxE,MACF,IAAK,UACL,IAAK,SACHA,EAAe,CAAC,YAAa,aAAc,cAAe,wBAC1D,MACF,QACEA,EAAe,CAAC,YAAa,aAAc,eAE/C,OAAOA,EAAar5G,SAASy4N,EAAStsN,S,EAwBxCmtN,aAAe,SAACv0M,GAAoC,IAAxBw0M,EAAwB,wDAC7CA,IACH,IAAA9sM,gBAEFzuB,OAAOs0I,kBAAmB,EAC1B,IAAMvxH,GAAS,IAAAC,oBACf,OAAQ/hB,SAASC,SAASoC,gBACxB,IAAK,UACL,IAAK,KACH,IAAMy2F,EAAgBh3E,EAAOsD,MAAP,QAChB40M,EAAkBl4M,EAAOsD,MAAP,WAClBkwF,EAAcxzF,EAAOsD,MAAP,MACd20M,EAAmBj4M,EAAOsD,MAAP,WACnBwtI,EAAc,CAAC,YAAa,SAAU,cAAe,aAAc,iBAAkB,gBACzF,cAAe,aAAc,cAC3B2nE,EAAe,GACnB,CAACzhI,EAAekhI,EAAiB1kH,EAAaykH,GAAkB/0N,SAAQ,SAAA7E,GAClEA,IACFo6N,0BAAmBA,IAAnB,aAAoCp6N,EAAOwlB,mBAG/C40M,EAAeA,EAAa3sN,QAAO,SAAC4lI,GAClC,OAAOof,EAAY7xJ,SAASyyI,EAAYtmI,UAAYsmI,EAAYx6C,uBAElE,IAAMwhI,EAAwB,EAAKC,4BAA4BV,EAAkB,aAAcj0M,GACzF40M,EAAwB,EAAKD,4BAA4BnlH,EAAa,aAAcxvF,GAC1F,GAAIy0M,EAAal/N,QACZm/N,EAAsBG,eACtBH,EAAsBI,mBACtBF,EAAsBC,eACtBD,EAAsBE,kBAEzB,OAAO,EAAKC,gCAAgC/0M,EAAYy0M,EAAc,CAACC,EAAuBE,GAAwBJ,GAEtH,EAAKQ,mBAAmBh1M,GAE1B,MAGF,IAAK,UACH,EAAKi1M,gBAAgBj1M,GACrB,MAEF,IAAK,WACL,IAAK,KACH,IAAMwxH,EAAex1H,EAAOsD,MAAP,OACrB,GAAIkyH,GAAgBA,EAAarnD,aAAeqnD,EAAarnD,WAAW+I,oBAAqB,CAC3F,IAAMzyE,EAAU,CACdnE,KAAMk1H,EAAarnD,WACnB/mE,KAAMouH,EAAarnD,WAAWxtE,UAE1Bu4M,EAAUl5M,EAAO9P,KACvB8P,EAAO9P,KAAO8T,EACd,EAAK8jM,cACL,EAAK+P,2BAA2BpzM,EAAS,IAAI,WAC3C,EAAKu0M,mBAAmBh1M,EAAYk1M,WAGtC,EAAKF,mBAAmBh1M,GAE1B,MAEF,QACE,EAAKg1M,mBAAmBh1M,EAAY,KAAM,KAAMw0M,K,EAKtDQ,mBAAqB,SAACh1M,EAAYk1M,EAASC,GAAsC,IAAxBX,EAAwB,wDACzEx4M,GAAS,IAAAC,oBAoBf,OAnBI7S,OAAOC,UAAU6rN,KACnB,IAAAxtM,gBACA1L,EAAO9P,KAAOgpN,EACdl5M,EAAOo5M,aAAap1M,EAAYk1M,EAASC,IAEzCn5M,EAAOo5M,aAAap1M,GAEtB/mB,OAAOs0I,kBAAmB,EACrBvxH,EAAOia,aAAgBu+L,IAC1Bx4M,EAAOia,aAAc,GAEnB,EAAKm2E,MAAMipH,YAAcb,GAC3B,EAAKpoH,MAAMipH,YAERb,IACH,EAAK1Q,cACL,UAAM/+L,UAAS,IAAAgP,uBACf,IAAAq/D,mBAEK,G,EAGT6hI,gBAAkB,SAACj1M,GACjB,IAAMhE,GAAS,IAAAC,oBACTuzF,EAAcxzF,EAAOsD,MAAP,MACdkyH,EAAex1H,EAAOsD,MAAP,OACfwtI,EAAc,CAAC,YAAa,aAAc,uBAAwB,kBACpEhd,EAAW,GACf,CAACtgC,EAAagiC,GAActyI,SAAQ,SAAA7E,GAC9BA,GAAUA,EAAOwlB,cACnBxlB,EAAOwlB,aAAa3gB,SAAQ,SAAAwuI,GACtBof,EAAY7xJ,SAASyyI,EAAYtmI,UAAYsmI,EAAYx6C,qBAC3D48C,EAASj6I,KAAK,EAAK+9N,uBAAuBlmF,UAKlD,IAAMwnF,EAAUl5M,EAAO9P,KACvB8P,EAAO9P,KAAO8T,EACd9oB,QAAQ64I,IAAID,GAAUn9G,MAAK,kBAAM,EAAKqiM,mBAAmBh1M,EAAYk1M,O,EAGvEP,4BAA8B,SAACt6N,EAAQi7N,EAAWt1M,GAChD,IACE60M,GAAgB,EAChBC,GAAoB,EACpBS,EAAyB,EACzBC,EAAyB,EAC3B,GAAIn7N,GAAUA,EAAOi7N,KACf,EAAAp6N,oBAAsBb,EAAOi7N,GAAW54L,8BAC1C84L,EAAyBtqN,KAAKywH,IAAL,MAAAzwH,MAAA,aAAY1V,OAAOyhB,OAAO5c,EAAOi7N,GAAW54L,6BAA6B9zB,KAAI,SAAA2O,GAAA,OAAOA,EAAIqlB,WACjH24L,EAA0Bl7N,EAAOi7N,GAAW54L,4BAA4B,EAAA3D,oBAAoB/Y,IAAc4c,MAC7E44L,IAC3BX,GAAgB,IAGhBx6N,EAAOi7N,GAAWruM,eAAe,CACnC,IAAMwuM,EAAoBp7N,EAAOi7N,GAAWruM,cAAc1G,yBACpDm1M,GAAmB,2BAAoB11M,GACvB3lB,EAAOi7N,GAAW/4M,aAAam5M,GAAkB9oN,MAAK,SAACzI,GAC3E,IAAMkgF,EAAclgF,EAAQoc,yBAC5B,OAAO8jE,GAAeoxI,GAAsBpxI,IAAgBoxI,OAG5DX,EAAoBW,EAAkB52N,MAAM,KAAK,IAIvD,MAAO,CACLg2N,gBACAC,oBACAS,yBACAC,yBACA9nF,YAAarzI,EAASA,EAAOi7N,GAAa,O,EAI9CP,gCAAkC,SAAC/0M,EAAY21M,EAAuBC,GAAyD,IAAxBpB,EAAwB,wDACvHx4M,GAAS,IAAAC,oBACTk5M,EAAen5M,EAAOq0F,2BAA0B,GAAM,GAAO,GAC7D6kH,EAAUl5M,EAAO9P,KACvB8P,EAAO9P,KAAO8T,EACTw0M,GACH,EAAK1Q,cAEP,IAAMh0E,EAAW6lF,EAAsB/sN,KAAI,SAAC8kI,GAC1C,IAAMtpI,EAAO,EAAAo5F,iBAAiBviG,SAASyyI,EAAYtmI,QAAU,IAAO,IACpE,OAAO,IAAAqrH,oBAAmBib,EAAYhxH,QAAUgxH,EAAY/wH,SAAU,EAAGvY,GAAMuuB,MAAK,SAAAswE,GAElF,OADAyqC,EAAYI,iBAAiBplI,MAAMC,QAAQs6F,GAAYA,EAAW,GAAI7+F,GAC/D6+F,QAkBX,OAfA2yH,EAAgC12N,SAAQ,SAAC22N,GACvC,GAAIA,EAAYhB,cAAe,CAC7B,IAAMiB,EAAiB,EAAA/8L,oBAAoB/Y,GACrC+1M,EAAe,KAAQF,EAAYL,uBAAyBK,EAAYN,wBAC9EzlF,EAASj6I,MAAK,IAAA48H,oBAAmBojG,EAAYnoF,YAAY/wH,SAAUk5M,EAAYN,uBAAwBQ,EAAc,GAAI,GAAID,GAC1HnjM,MAAK,SAAAswE,GAGJ,OAFA4yH,EAAYnoF,YAAYhxG,4BAA4Bo5L,GAAgBl5L,KAAOi5L,EAAYL,uBAAyB,EAChHK,EAAYnoF,YAAYI,iBAAiBplI,MAAMC,QAAQs6F,GAAYA,EAAW,IACvEA,MAGT4yH,EAAYf,mBACdhlF,EAASj6I,KAAKy9N,EAAmB9V,qBAAqBqY,EAAYnoF,YAAamoF,EAAYf,uBAGxF59N,QAAQ64I,IAAID,GAAUn9G,MAAK,kBAAM,EAAKqiM,mBAAmBh1M,EAAYk1M,EAASC,EAAcX,O,kEAtM9FhX,qBAAuB,SAAC9vE,EAAasoF,GAAgC,IAApBtjG,EAAoB,uDAAT,KACjE,GAAIhqH,MAAMC,QAAQ+kI,EAAYS,+BACzBT,EAAYS,6BAA6BlzI,SAAS+6N,GACrD,OAAO9+N,QAAQC,UAEjB,IAAMulB,EAASgxH,EAAYhxH,QAAUgxH,EAAY/wH,SACjD,OAAO,IAAA81G,oBAAmB/1G,EAAQ,EAAGg2G,EAAU,GAAIsjG,GAChDrjM,MAAK,SAAAswE,GAUJ,OATIA,GAAYA,EAAS1tG,SACvBm4I,EAAYI,iBAAiB7qC,EAAU,GAAG,GACrCyqC,EAAYS,+BACfT,EAAYS,6BAA+B,IAEzC6nF,GACFtoF,EAAYS,6BAA6Bt4I,KAAKmgO,IAG3C/yH,M,aArQMqwH,G,gFCjBrB,I,EAAA,OACA,O,oCAEA,SACA,QACA,QAGA,IAAM2C,EAAiB,SAAC7pH,GAAU,IAEzBx5F,EACmBw5F,EADnBx5F,mBAAoBsD,EACDk2F,EADCl2F,uBAAwBmoM,EACzBjyG,EADyBiyG,sBAAuBD,EAChDhyG,EADgDgyG,yBAA0B98D,EAC1El1C,EAD0Ek1C,SAClGrjF,EAAwBmuC,EAAxBnuC,qBAgBF,OAAOqjF,GAdsB,WAC3B,IAAKprI,GAA0BtD,EAAmBu6H,iBAAkB,CAClE,IAAM+oF,EAAe7X,EAAwB,EAC7C,GAAI6X,GAAgBtjN,EAAmBujN,eAErC,OADAl4J,EAAqB,EAAAzgC,cAAckB,cAC5B,EAEP0/K,EAAyB8X,GAG7B,OAAO,MAOXD,EAAejzE,UAAY,CACzB1B,SAAU,UAAUsrD,IAAI7yF,YAG1B,IAUMq3E,EAAqB,CACzBgtB,oDACAngJ,6C,WAGa,IAAA2uC,UAfS,SAACxzG,GAAU,IAC1BoP,EAAYpP,EAAMqN,gBAAlB+B,SAD0B,EAEuBpP,EAAMwc,UAC9D,MAAO,CACLhD,mBAAoBpK,EACpB0N,uBAL+B,EAE1BA,uBAILmoM,sBAN+B,EAEFA,yBAaOjtB,EAAzB,CAA6C6kC,I,uHCjD5D,MACA,OACA,O,IACA,M,IACA,O,IAEA,Q,IACA,QAEA,QAEA,QACA,QACA,QACA,Q,IACA,O,IACA,S,mDAGA,IAAMG,EAA0B,SAAChqH,GAAU,IAElC3S,EACkC2S,EADlC3S,YAAav8B,EACqBkvC,EADrBlvC,kBAAmB3hD,EACE6wF,EADF7wF,KAAMwY,EACJq4E,EADIr4E,kBAAmBhP,EACvBqnF,EADuBrnF,SAAUsxM,EACjCjqH,EADiCiqH,mBAAoBnqN,EACrDkgG,EADqDlgG,KAAMoqN,EAC3DlqH,EAD2DkqH,SAClGC,EAAuCnqH,EAAvCmqH,oBAAqBt9M,EAAkBmzF,EAAlBnzF,eAEjBm2H,EAAc31C,GAAev8B,EAEnC,IAAKkyE,GAAen2H,EAAeM,SACjC,OAAO,KAGT,IAAMyC,GAAS,IAAAC,oBAETozH,GAAe,IAAAd,iBAAgBa,GACrC,IAAKC,EACH,OAAO,KAfgC,IA6BnC,EAXC7yH,EAAyE6yH,EAAzE7yH,YAAagyH,EAA4Da,EAA5Db,mBAAoBC,EAAwCY,EAAxCZ,gBAAiBC,EAAuBW,EAAvBX,oBACnD8nF,EAAU9nF,EAAoBzzI,SAASm0I,EAAYhoI,QAEnDimI,EAAe,WACnB,aACE,aAAEp0I,QAAQ+pG,QAAQ,UAAYszB,eAE9BviG,KAIE0iM,GAAA,gCAAwB,wFACxBD,EADwB,uBAEtB9nF,EAAoBn5I,QACtBwvB,EAASypH,EAAmB,IAAI,EAAMa,EAAanjI,OAErDuiI,EAAgBvvI,SAAQ,SAAAq1G,GACtB,IAAM/2F,EAAUxB,EAAO0zH,mBAAmBn7B,GAC1C,IAAK/2F,GAAYA,EAAQlB,KAAKlV,SAAWgoI,EAAYhoI,SAAYoW,EAAQlB,KAAK2xH,4BAC5E,OAAO,KAETzwH,EAAQlB,KAAK2xH,4BAA4BC,mBAAkB,MAE7Db,IAZ0B,iCAgBxBoB,EAAgBl5I,SAAWm5I,EAAoBn5I,QACjDwvB,EAASypH,EAAmBA,GAAnBA,qBAAuBC,KAAkB,EAAMY,EAAanjI,OAjB3C,UAmBtB,IAAAijI,wBAAuBC,EAAaC,GAnBd,OAoB5BhC,IApB4B,kDAAxB,4CAuBN,OAAIgpF,EAEA,+BAAK3qI,UAAU,kBACb,gCAAMA,UAAU,yBAAwB,4CAAkB5iF,GAAI0T,IAA9D,KACA,kCAAQkvE,UAAW,4BAA8B8qI,EAAU,qBAAuB,IAC1E54C,QAAS64C,GACf,gCAAM/qI,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,uBAMlE,UAAToD,EACK,mCAA8BuqN,sBAAuBA,EACvBh9H,YAAaA,EACb88H,oBAAqBA,EACrBC,QAASA,EACTF,SAAUA,EACV95M,YAAaA,IAIlD,mCACEilB,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAI0T,IAC/Bk6M,QACE,mCACEF,QAASA,EACT9qI,UAAU,kBAQVirI,eAAA,EACAC,SAAUH,EACVlqH,MAAM,eAOhB6pH,EAAwBpzE,UAAY,CAClCvpD,YAAa,UAAU/+C,MAAV,oBACb27K,mBAAoB,UAAUnzE,KAC9BqzE,oBAAqB,UAAUrzE,KAC/Bh3I,KAAM,UAAUo3B,OAChBgzL,SAAU,UAAU58G,Q,WA0BP,IAAAmvC,aACb,IAAAj8C,UAxBsB,SAACxzG,GAAU,MACaA,EAAM0zG,UAA7C5vC,EAD0B,EAC1BA,kBAAmBsC,EADO,EACPA,iBACnB16D,EAAe1L,EAAMgR,YAArBtF,YAF0B,EAIgC1L,EAAMu1I,gBADhEE,EAH0B,EAG1BA,wBAAyBD,EAHC,EAGDA,gBAAiBG,EAHhB,EAGgBA,wBAAyBD,EAHzC,EAGyCA,aAAcG,EAHvD,EAGuDA,uBAIxF,MAAO,CACL/xE,oBACAp4D,cACA+pI,0BAAyBD,kBAAiBpvE,mBAAkBuvE,0BAAyBD,eACrFE,gCAX+B,EAI/BA,gCAOiCC,yBAAwBC,2BAX1B,EAIEA,2BAQjCj2H,eAPqB7f,EAAMqN,oBAWJ,SAACse,GAC1B,MAAO,CACLgP,kBAAmB,kBAAMhP,GAAS,IAAAgP,uBAClChP,cAKF,CAA6CqxM,K,0ICrJ/C,MACA,O,IACA,Q,IACA,Q,IACA,SACA,Q,uDAEMS,E,yOAEJxlN,YAAc,a,EAEdylN,WAAa,WAAM,IACVv7M,EAAQ,EAAK6wF,MAAb7wF,KAEDs7B,GADQ,EAAKu1D,MAAMvkG,OAAS,EAAKukG,OACjBv1D,QAEtB,OAAInuC,MAAMC,QAAQkuC,GACTA,EAAQjuC,KAAI,SAAC2qH,EAAKwjG,GAAN,OAAmB,6BAAGz+N,IAAK,MAAMy+N,GACjDx7M,EAAK1C,SAAS06G,GAAO,4CAAkBzqH,GAAIyqH,IAASA,OAE9C,aAAS18E,GACXA,EAAQ/tC,GACX,4CAAkBA,GAAI+tC,EAAQ/tC,GAAImO,QAAA,gBAAY4/B,KAC9CA,EAAQA,QACNA,EAAQA,QACRA,EAAQj+B,SAAWi+B,EAAQj+B,WAAa,KACrCi+B,EACFt7B,EAAK1C,SAASg+B,GAAW,4CAAkB/tC,GAAI+tC,IAAaA,EAAQp3C,QAAQ,MAAO,UAEnF,S,gGAIF,WACD2sG,EAAQtrG,KAAKsrG,MAAMvkG,OAAS/G,KAAKsrG,MAEvC,IAAKA,EAAM/6E,QACT,OAAO,KAGT,IAAM2lM,EAAS5qH,EAAMrzG,MAAQ,oBAAsB,qBAC7Ck+N,EAAS7qH,EAAMrzG,MAAQ,8BAAgC,+BACvDm+N,GAAgB9qH,EAAMrzG,MAAQ,0BAA4B,6BAC7DqzG,EAAM96E,OAAS,8BAAgC,IAC9C6lM,EAAkB,GAiBtB,OAhBI/qH,EAAMxxD,SAAWwxD,EAAMxxD,QAAQrlD,OACjC4hO,EAAkB/qH,EAAMxxD,QAAQhyC,KAAI,SAACc,GACnC,OAAO,wBAAC0tN,EAAD,CAAkBj/G,OAAQzuG,EAAGpR,IAAKoR,EAAE0Z,UAG7C+zM,EAAgBthO,KACd,wBAACuhO,EAAD,CAAkBj/G,OAAQ,CACxB5L,MAAO,OACPnpF,KAAM,2BACN4tE,MAAO,iBAOTob,EAAMykE,UAEN,mCAAanlF,UAAU,qBACpB,SAAC+gH,GAAD,OACC,+BAAK/gH,UAAW,wCAA0C0gB,EAAMrzG,MAAQ,sBAAwB,KAC3E,oBAAhBqzG,EAAMp1D,MAA8B,8BAAgC,KACvE,+BAAK00C,UAAU,uBACb,+BAAKA,UAAU,6BACb,mCAAqB6gB,MAAOH,EAAMrzG,OAAyB,oBAAhBqzG,EAAMp1D,MAA8B,EAAAw1D,OAAO4oB,IAAM,QAE9F,+BAAK1pC,UAAU,6BACb,4CAAkB5iF,GAAIsjG,EAAMp1D,OAAS,8BAGzC,+BAAK00C,UAAU,sBACZ,EAAKorI,cAER,+BAAKprI,UAAU,yBACZ0gB,EAAMxxD,SAAWwxD,EAAMxxD,QAAQrlD,OAAS62G,EAAMxxD,QAAQhyC,KAAI,SAACuvG,GAC1D,OACE,kCAAQzsB,UAAW,0BAA0BysB,EAAO5L,MAC5Cj0G,IAAK6/G,EAAO/0F,KACZw6J,QAAS,SAAC3mL,GACRA,EAAE20F,kBACF30F,EAAE40F,iBACF4gH,GAAY,WACVt0F,EAAOnnB,aAGjB,4CAAkBloF,GAAIqvG,EAAO/0F,WAG9B,UASf,+BAAKsoE,UAAU,uBACb,+BAAKA,UAAU,uBACb,+BAAKA,UAAWurI,GAAQ,4CAAkBnuN,GAAG,6BAC7C,+BAAK4iF,UAAWsrI,IAChB,+BAAKtrI,UAAW,uBAAyBwrI,GAAep2N,KAAKg2N,cAC7D,+BAAKprI,UAAU,kDAAkDyrI,S,GApGlD,UAAMxqH,WA2GzByqH,EAAmB,SAAC,GAAa,IAAZj/G,EAAY,EAAZA,OACzB,OACE,kCAAQzsB,UAAW,wBAAwBysB,EAAO5L,MAAOqxE,QAAS,SAAC3mL,GACjEA,EAAE20F,kBACF30F,EAAE40F,iBACFssB,EAAOnnB,UAEP,gCAAMtF,UAAU,uCACd,4CAAkB5iF,GAAIqvG,EAAO/0F,U,WAMtB,IAAAylI,YAAWguE,I,wIChI1B,QACA,Q,IACA,QACA,S,IACA,Q,qDAEa38C,K,YAEX,WAAYC,EAAUv6F,EAASv7E,IAAU,yGAEnCu7E,GAAYu6F,GAAY91K,IAAa,EAAAC,aAAa02B,UACpD,EAAKze,aAAe,GACpB,EAAKmmE,kBAAoB,GACzB,EAAKslG,gBAAkB,GACvBxyL,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKroE,aAAaqoE,GAAc,GAChC,EAAKlC,kBAAkBkC,GAAc,GACrC,EAAKojG,gBAAgBpjG,GAAc,MAErC,EAAKsO,qBAAsB,EAC3B,EAAKknF,sBAAuB,EAC5B,EAAKC,uBAAyB,EAC9B,EAAKpzJ,cAAgB,KACrB,EAAK6gE,mBAAqB,KAC1B,EAAKmf,cAAgB,KACrB,EAAKzf,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKC,oBAAsB,KAC3B,EAAKG,6BAA+B,KAEpC,EAAKp2D,SAAU,EACf,EAAK4/G,iBAAkB,EACvB,EAAKj1H,OAAS,KACd,EAAKs+J,qBAAsB,EAC3B,EAAKC,qBAAsB,EAC3B,EAAKC,wBAA0B,GAC/B,EAAKC,gBAAkB,MAErBN,IACF,EAAK31K,cAAgB,GACrB,EAAKqb,aAAe,IAEjB+/D,GAAYu6F,IACf,EAAK11K,UAAY,KACjB,EAAKkjF,MAAQ,IAAI,EAAJ,QAAU,aACvB,EAAKluE,mBAAqB,KAC1B,EAAKoS,UAAY,IAEnB,EAAKlP,SAAW,GA1CuB,E,wFAsEjBplB,EAAMS,GAC5B,OAAO8I,KAAK8S,SAASrc,IAASuJ,KAAK8S,SAASrc,GAAMwJ,MAAK,SAAA25K,GACrD,OAAOA,IAAc,EAAAzhJ,SAASC,MAAQxwB,MAAMC,QAAQ3Q,GAASA,EAAM+I,MAAK,SAAAwsF,GAAA,OAAO,IAAAlB,MAAKquF,EAAWntF,OAAQ,IAAAlB,MAAKquF,EAAW1iL,S,sDAI3F8pF,GAAmB,WACjD,OAAOA,EAAkBnjF,OAAM,SAACujF,GAC9B,OAAO,EAAK0D,wBAAwB1D,EAAUF,SAAUE,EAAUE,gB,6BAjCzD7lE,K,eAIX,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKyb,aAAaP,EAAOwmE,0B,kCAEhBjmE,K,eAIhB,IAAMP,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAK4hF,kBAAkB1mE,EAAOwmE,0B,kCAGrC,IAAMxmE,EAASlb,KAAKkb,QAAUlb,KAAKU,YAAYwa,OAC/C,OAAOlb,KAAKknL,gBAAgBhsK,EAAOwmE,4B,+FCrEvC,I,IAAA,Q,IAEA,OACA,Q,IAGA,Q,IACA,O,IACA,O,IACA,QACA,S,mDAEA,IAAM60I,EAAgC,CACpCC,yBADoC,WAElC,IAAMrjL,EAAS,UAAUgY,YADA,uBAEzB,YAAoBhY,EAApB,+CAA4B,KAAjByG,EAAiB,QACtBA,aAAiBA,EAAjBA,SACFA,EAAMogH,mBAAmBy8D,0BAA0B,KAJ9B,+EAQ3BhuK,0BAToC,WAUlCzoD,KAAKw2N,2BAEL,IAAMrjL,EAAS,UAAUgY,YAHC,uBAK1B,YAAoBhY,EAApB,+CAA4B,KAAjByG,EAAiB,QAC1B,GAAIA,aAAiBA,EAAjBA,QAA4B,4BAC9B,YAAwBzG,EAAxB,+CAAgC,KAArB8sF,EAAqB,QAC9B,GAAIA,aAAqBA,EAArBA,SACCrmF,EAAM5xC,KAAOi4H,EAAUj4H,GAC1B,CACA,IAAMgyJ,EAAqB,UAAY08D,0BAA0B98K,EAAOqmF,GAClExoE,EAAW/iE,OAAOmc,KAAKmpJ,GACzBviG,EAAShjE,OACXmlD,EAAMogH,mBAAmB28D,wBAAwBl/J,EAAS,IACjD,UAAYm/J,4BAA4Bh9K,EAAOqmF,KAGxDA,EAAU+5B,mBAAmB28D,uBAAuB/8K,EAAM5xC,IAC1D4xC,EAAMogH,mBAAmB28D,uBAAuB12F,EAAUj4H,OAblC,gFANR,+EA6B5B6uN,mBAtCoC,WAuClC,IAAM1jL,EAAS,UAAUgY,YADN,uBAEnB,YAAoBhY,EAApB,+CAA4B,KAAjByG,EAAiB,QAC1B5hD,QAAQ4B,IAAI,WAAYggD,EAAM5xC,IAC9BhQ,QAAQ4B,IAAI,mBAAoBggD,EAAMwV,WACtCp3D,QAAQ4B,IAAI,kDAAmDggD,EAAMogH,mBAAmB88D,yBALvE,+EAQrBC,sBA9CoC,WA+ClC,IAAM5jL,EAAS,UAAUgY,YACzBnzD,QAAQ4B,IAAI,UAFU,2BAGtB,YAAoBu5C,EAApB,+CAA4B,KAAjByG,EAAiB,QACtBA,aAAiBA,EAAjBA,UACF5hD,QAAQ4B,IAAI,WAAYggD,EAAM5xC,IAC9BhQ,QAAQ4B,IAAI,aAAcggD,EAAMslH,gBAChClnK,QAAQ4B,IAAI,6BAA8BggD,EAAMkgG,cAAcC,wBAC9D/hJ,QAAQ4B,IAAI,uCAAwCggD,EAAMy5F,UAAUyG,cAAcC,0BARhE,6EAWtB/hJ,QAAQ4B,IAAI,WAEdq3I,+BA3DoC,WA4DlC,IAAM99F,EAAS,UAAUgY,YADM,uBAE/B,YAAoBhY,EAApB,+CAA4B,KAAjByG,EAAiB,QAC1B,GAAIA,aAAiBA,EAAjBA,SACCA,EAAMtzC,SAAW,EAAAipC,cAAcqB,iBAG9BgJ,EAAMogH,mBAAmB88D,uBAAuBriO,QAAU,EAAG,CAC/D,IAAMuiO,EAAmB,UAAiBh/J,aAAape,EAAMogH,mBAAmB88D,uBAAuB,IACvGl9K,EAAMyd,aAAa,UAAEtM,MAAMisK,EAAiB5nK,YAC5CxV,EAAMkiH,oBAAoB,UAAE/wG,MAAMisK,EAAiBv8D,iBAAmBu8D,EAAiBv8D,iBAAmBu8D,EAAiB1wN,WAVlG,+EAgBjC2wN,gCA3EoC,WA8ElC,IAFAC,EAEA,uDAFwB,UAAgB5uB,2BACxCv3K,EACA,uDADW,IAAIvf,SACf,uBACA,YAAmC0lN,EAAnC,+CAA0D,KAA/CC,EAA+C,QAExD,GAAIA,EAAqBn9D,mBAAmB88D,uBAAuBriO,QAAU,EAAG,CAC9E,IAAM0+C,EAAS,UAAiBo+F,cAAc4lF,EAAqBn9D,mBAAmB88D,wBAEnF,UAAiBplF,yBAAyBv+F,IACvC,UAAiBq+F,iBAAiBr+F,MAGtC,IAAAs8E,kBAAiB,UAAUh1G,KAAKC,cAAc,CAAC1S,GAAI,sDACnD+oB,OAXN,gF,UAkBWwlM,G,mJC5Gf,M,IACA,M,IACA,OACA,O,IAEA,Q,IACA,OACA,Q,IACA,S,IACA,SACA,Q,IACA,Q,IACA,OACA,QACA,Q,IACA,SACA,S,IACA,S,uDAEqBa,G,gBAgBnB,WAAY9rH,IAAO,gGACXA,IADW,SAkBnB+rH,uBAAyB,SAACC,GACxB,IAAMp8M,GAAS,IAAAC,oBACf,IAAK,EAAKpU,MAAMwwN,eAAgB,CAC9B,IAAIC,EAAgB,GAAIC,EAAgB,GAClCC,EAAe,EAAAj7H,iBAAiBx8F,MAAK,SAAA03N,GAAA,OAASA,IAAUL,EAASh1M,QACvE,GAAsB,iBAAlBg1M,EAASh1M,KACP,EAAKgpF,MAAMiwC,4BACb,EAAKjwC,MAAMiwC,0BAA0B,EAAAr/C,0BAA0B,GAAGF,UAClE,EAAKsP,MAAMmwC,mCAAmC,SAE3C,GAAIi8E,EAAc,CACvB,IACME,EADc18M,EAAOsD,MAAP,MACkBO,aAAajT,MAAK,SAAAkT,GAAA,MAA8B,eAAnBA,EAAQ1Y,UAC3EkxN,EAAgB,QAChBC,EAAgB,aACZ,EAAKnsH,MAAMiwC,4BACb,EAAKjwC,MAAMiwC,0BAA0B,EAAAr/C,0BAA0B,GAAGF,UAClE,EAAKsP,MAAMmwC,mCAAmC,IAEhD,IAAMo8E,EAAkB,WACtB,IAAMrmC,EAAiBomC,EAAkBE,2BAA2BR,EAASh1M,MAC7E,GAAIkvK,EAAgB,CAClBx5L,QAAQ4B,IAAI,iBAAkB43L,GAC9BA,EAAe/qF,cACf,EAAK6E,MAAMplF,iBAAiBsrK,GAC5B,IAAMtU,EAAa,EAAKn2K,MAAMgxN,qBAC9B,EAAKz6C,SAAS,CACZy6C,qBAAsB,OACrB,WACD,EAAKz6C,SAAS,CACZy6C,qBAAsB76C,SAKzB06C,EAAkBxlI,oBAGrBylI,IAFA,EAAK9E,2BAA2B,CAACv3M,KAAMo8M,GAAoB,KAAMC,GAKhEH,IACHD,EAAgBH,EAASh1M,KACzBk1M,EAAgBF,EAASU,eAAiB,EAAKjxN,MAAMkxN,iBAEnDT,GAAiBA,EAAcvhO,SACjCuhO,EAAgB,WAMI,UAAlBA,GAAgD,qBAAlBC,GAA0D,cAAlBA,GACxE,EAAKS,yBAAyBZ,GAGhC,EAAKh6C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WAKD,GAJA,EAAKllH,aACL,EAAK2wH,0BAA0BX,EAAeD,IAC9C,aAAEp+N,UAAUupG,GAAG,QAAS,EAAKm7E,mBAC7B,EAAKu6C,sBACDf,EAASgB,eAAiBZ,EAAc,CAC1C,IAAMlmC,EAAiB8lC,EAAS97M,KAAKmmE,SAAS71E,MAAK,SAAAzI,GAAA,OAAWA,EAAQwY,WAAay7M,EAASiB,eACxF/mC,GACFA,EAAe/qF,oBAvFN,EA8FnB+xH,kBAAoB,SAACL,GAAD,OAAiB,SAAChiO,GACpC,UAAUgrC,eAAe,iBAAmBg3L,IAG5C,IAAAttI,eAAc10F,GACV,EAAK4Q,MAAMoxN,cAAgBA,EAC7B,EAAKM,gBAAgBtiO,GACX,EAAKuiO,qBACf,EAAKC,eAAeR,KAtGL,EA0GnBS,eAAiB,SAACjG,GAChB,IAAMwF,EAAc/+N,SAASg9F,cAAc,yBACvC,EAAA13C,YAAYE,OACZxlD,SAASg9F,cAAc,wBACrB,EAAA13C,YAAYI,YACZ,EAAAJ,YAAYE,OAClB,EAAK0+H,SAAS,CACZi6C,gBAAgB,EAChBY,cACAF,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAK0L,sBACL,EAAK5wH,cACL,aAAEruG,UAAUupG,GAAG,QAAS,EAAKm7E,mBAC7B60C,QAzHe,EA6HnBlrH,WAAa,WACX,EAAKoxH,eA9HY,EAiInBF,eAAiB,SAACR,GAChB,EAAK76C,SAAS,CACZi6C,gBAAgB,EAChBY,cACAF,iBAAiB,EACjBtL,aAAc,GACdmM,oBAAqB,OACpB,WACD,EAAKrxH,cACL,aAAEruG,UAAUupG,GAAG,QAAS,EAAKm7E,mBACzBq6C,IAAgB,EAAAz5K,YAAYG,QAC9B,EAAKw5K,0BA5IQ,EAiJnBI,gBAAkB,SAACtiO,GACjB,UAAUgrC,eAAe,aACrBhrC,IACF,IAAA00F,eAAc10F,GAEhB,EAAKm1G,MAAMplF,iBAAiB,MAC5B,EAAKwyM,qBAAsB,EAC3B,EAAKp7C,SAAS,CACZi6C,gBAAgB,EAChBwB,qBAAqB,EACrBC,gCAAgC,IAC/B,WACDtqI,YAAW,WACT,EAAK4uF,SAAS,CACZ66C,YAAa,EAAAz5K,YAAYC,KACzBo6K,qBAAqB,EACrBC,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAKy0I,qBAAsB,OAE5B,MACH,aAAEt/N,UAAU6/N,IAAI,QAAS,EAAKn7C,sBAE5B,EAAKxyE,MAAMovC,0BACb,EAAKpvC,MAAMovC,yBAAyB,GAAI,IAE1ChsD,YAAW,WACL,EAAK4c,MAAMgvC,yBACb,EAAKhvC,MAAMgvC,yBAAwB,GAEjC,EAAKhvC,MAAMiwC,4BACb,EAAKjwC,MAAMiwC,0BAA0B,EAAAx/C,uBAAuB,GAAGC,UAC/D,EAAKsP,MAAMmwC,mCAAmC,MAE/C,MApLc,EAuLnBqiC,kBAAoB,SAAC3nL,GACnB,IAAM+iO,EAAe/iO,EAAEugB,OAAOuqI,QAAQ,gBAChCk4E,EAAWhjO,EAAEugB,OAAOuqI,QAAQ,QAC5Bm4E,EAAYjjO,EAAEugB,OAAOuqI,QAAQ,mBAC7Bo4E,EAAiBljO,EAAEugB,OAAOuqI,QAAQ,0BACpCi4E,GAAiBC,GAAaC,GAAcC,GAAmBljO,EAAEugB,OAAOuqI,QAAQ,aAClF,EAAKw3E,gBAAgBtiO,IA7LN,EAiMnBmjO,sBAAwB,WACtB,EAAKC,mBAlMY,EAqMnBC,cAAgB,WACd,EAAKl8C,SAAS,CACZm8C,oBAAoB,IACnB,WACD,EAAKn8C,SAAS,CACZm8C,oBAAoB,QA1MP,EA+MnBC,mBAAqB,SAACC,GAAuD,IAAlCn+E,EAAkC,uDAAT,KAC5Do+E,EAAcD,EAAoBn+M,KAClCq+M,EAA4BD,EAAYtzN,OAC1C,UAAOzF,aAAe,EAAKkG,MAAM4yN,sBAAwB,EAAK5yN,MAAM4yN,oBAAoBr3M,OAASq3M,EAAoBr3M,MAAQs3M,EAAY92I,WACvI82I,EAAY52I,gBACd42I,EAAY92I,UAAY82I,EAAY92I,SACpC82I,EAAYhnI,gBACZ,EAAK0Y,MAAMipH,aAGfqF,EAAYl5N,YAAYg5N,mBAAmBE,GAC3C,EAAKt8C,SAAS,CACZq8C,sBACAZ,oBAAqBa,EAAYxnI,oBACjC4mI,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAK61I,sBAAsBH,EAAoBr3M,MAC/C,EAAKy3M,yBACL,EAAKhH,2BAA2B4G,EAAqB,0BAEvD,EAAKtB,oBAAoBsB,GAEzB,EAAKK,8BAA8BL,GAE/B,EAAKruH,MAAMovC,0BACV,EAAK3zI,MAAMgxN,sBAAwB,EAAKhxN,MAAMgxN,qBAAqBz1M,MACnEq3M,GAAuBA,EAAoBn+M,MAE9C,EAAK8vF,MAAMovC,yBACT,EAAK3zI,MAAMgxN,qBAAqBz1M,KAAKhmB,cAAcqC,QAAQ,KAAK,KAChEk7N,GAIJ,EAAKI,wCAAwCJ,EAA2Br+E,GAEvC,YAA7Bm+E,EAAoBr3M,OACtB,aAAE,cAAckrE,QAAQ,CAACy5E,UAAW,GAAI,MArPzB,EA0PnB6yD,sBAAwB,SAACI,GACvB,IAAM3gO,GAAS,aAAEH,SAASg9F,cAAc,oBAClC+jI,EAAQ5gO,EAAOuS,KAAK,oCAAqCouN,EAAc,MAC7E,GAAI3gO,GAAU4gO,EAAO,CACnB,IAAMC,GAAgBD,EAAMlmO,KAAK,UAAY,EAC7CsF,EAAOi0F,QAAQ,CACby5E,UAAWmzD,EAAe7gO,EAAOsG,SAAW,GAC3C,OAjQY,EAqQnBw6N,mBAAqB,SAAAV,GACnB,IAAMxzM,EAAgBwzM,EAAoBn+M,KAAK2K,cAC/C,GAAIA,EAAe,CACjB,IAAMihE,EAASjhE,EAAc0gE,MAAMO,OACnCA,GAAU,EAAKkkB,MAAMgvH,yBAAyBlzI,KAzQ/B,EA6QnBmzI,gBAAkB,WAChB,IAAM9+M,EAAeriB,SAASohO,uBAAuB,mBACjD/+M,EAAahnB,SACfgnB,EAAa,GAAGgyE,WAAa,IAhRd,EAoRnBgtI,wBAA0B,SAACtkO,GACpB,EAAK4Q,MAAMwwN,gBAAmB,EAAKxwN,MAAMgxN,uBAC5C5hO,EAAE20F,kBACG,EAAK/jF,MAAMgxN,sBACd,EAAKz6C,SAAS,CACZq8C,oBAAqB,QAIvB,EAAK5yN,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAW,EAAK65K,qBACzD,EAAKC,eAAe,EAAAj6K,YAAYG,SA9RjB,EAkSnB67K,0BAA4B,SAACzpJ,GACtB,EAAKlqE,MAAMgxN,qBA6Bd,EAAKzsH,MAAMplF,iBAAiB+qD,EAAKz1D,OA5B7By1D,EAAKz1D,KAAKjY,WAAa,EAAAC,aAAa02B,QACtC,EAAK64L,2BAA2B9hJ,EAAM,wBAExC,EAAKqsG,SAAS,CACZy6C,qBAAsB9mJ,EACtB8nJ,oBAAmC,UAAd9nJ,EAAK3uD,MAAoB2uD,EAAKz1D,KAAK42E,sBACvD,WACD,IAAM32E,EAAeriB,SAASohO,uBAAuB,mBACjD/+M,EAAahnB,SACfgnB,EAAa,GAAGgyE,WAAa,GAG/B,IAAMhxE,GAAW,IAAA0vK,oBAAmB,EAAKplL,MAAMgxN,qBAAqBv8M,MAChEiB,EAAS,IAAOA,EAAS,GAAGjB,KAAKjY,WAAa,EAAAC,aAAa02B,OAC7D,EAAKw/L,mBAAmBj9M,EAAS,IAEjCiyE,YAAW,WACT,EAAK2pI,oBAAoB,CAAC78M,KAAMy1D,EAAKz1D,SACpC,GAED,EAAK8vF,MAAMovC,0BAA4B,EAAK3zI,MAAMgxN,sBAAwB,EAAKhxN,MAAMgxN,qBAAqBz1M,MAC5G,EAAKgpF,MAAMovC,yBACT,EAAK3zI,MAAMgxN,qBAAqBz1M,KAAKhmB,cAAcqC,QAAQ,KAAK,KAAM,OAI5E,EAAK2sG,MAAMnnF,yBAAyB8sD,EAAKz1D,KAAKK,YAI5C,UAAOhb,aAAezH,SAASC,SAASC,aAC1CtB,QAAQ4B,IAAI,OAAQq3E,GAChBA,EAAKz1D,KAAK7X,WACZ3L,QAAQ4B,IAAI,qBAAsBq3E,EAAKz1D,KAAK7X,UAAUmF,qBArUzC,EA0UnB+nD,QAAU,SAACkiE,EAAWhqC,EAAc4xI,GAElC,OAAQ,EAAK5zN,MAAMoxN,aACjB,KAAK,EAAAz5K,YAAYG,OACf,OAAO,EAAK+7K,cAAc7nG,EAAWhqC,EAAc4xI,GACrD,KAAK,EAAAj8K,YAAYE,OACf,OAAO,mCAAiCi8K,sBAAuB,EAAKA,wBACtE,KAAK,EAAAn8K,YAAYI,YACf,OAAO,EAAKg8K,cACd,KAAK,EAAAp8K,YAAYK,QACf,OAAO,EAAKg8K,iBACd,KAAK,EAAAr8K,YAAY3pB,UACf,OAAO,wCACT,QACE,OAbU,OA3UG,EA4VnBimM,kBAAoB,SAACjoG,EAAWhqC,GAAqC,IAAvB4xI,EAAuB,wDACnE,OACE,mCAAMz9C,WAAY,EAAKn2K,MAAMgxN,qBACvB75C,UAAW,EAAKn3K,MAAM4yN,oBACtBsB,YAAa,EAAK/zE,0BAElBjjE,WAAY,EAAKl9E,MAAMk9E,WACvBi3I,SAAU,EAAKn0N,MAAMm0N,SACrBC,yBAA0B,EAAKA,yBAC/B9H,WAAY,EAAKA,WACjB+H,mBAAoB,EAAKA,mBACzBpyM,gBAAiB,EAAKsiF,MAAMtiF,gBAC5BqyM,SAAU,EAAKt0N,MAAMwwN,gBAAmB,EAAKxwN,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAC/E14B,cAAe,EAAKmlF,MAAMnlF,cAC1Bm1M,sBAAuB,EAAKhwH,MAAMplF,iBAClC6sG,UAAWA,EACX03F,kBAAmB,EAAK1jN,MAAM0jN,kBAC9B1hI,aAAcA,EACd4hI,oBAAqB,EAAKA,oBAC1BN,kBAAmB,EAAKA,kBACxBe,qBAAsB,EAAKA,qBAC3BuP,WAAYA,EACZnnB,sBAAuB,EAAKA,sBAC5BulB,oBAAqB,EAAKhyN,MAAMgyN,oBAChCrO,4BAA6B,EAAKA,4BAClC6J,UAAW,EAAKjpH,MAAMipH,aArXb,EA0XnBgH,oBAAsB,WACpB,IAAMxyI,EAAe,EAAKhiF,MAAM,EAAKy0N,wBAAwB,EAAKz0N,MAAM4yN,oBAAoBn+M,KAAKlV,SACjG,OACE,mCACEq7E,SAAU,EAAK56E,MAAM4yN,oBAAoBn+M,KAAKmmE,SAC9C0oI,kBAAmB,EAAKA,kBACxBthI,aAAcA,EACdm+D,0BAA2B,EAAKA,0BAChCzmJ,UAAU,EACVg7N,gBAAiB,EAAKA,gBACtBzsM,sBAAuB,EAAKs8E,MAAMt8E,sBAClC5Z,uBAAwB,EAAKk2F,MAAMl2F,uBACnC4U,eAAgB,EAAKshF,MAAMthF,eAC3BhB,gBAAiB,EAAKsiF,MAAMtiF,gBAC5By0J,WAAY,EAAK12K,MAAMgxN,qBAAqBv8M,KAC5CqiK,cAAe,EAAK92K,MAAM4yN,oBAAoBn+M,KAC9C2/M,yBAA0B,EAAKA,yBAC/B9H,WAAY,EAAKA,WACjB+H,mBAAoB,EAAKA,mBACzBM,oBAAqB,EAAKA,oBAC1BC,gBAAiB,EAAK50N,MAAM40N,gBAC5BvQ,qBAAsB,EAAKA,qBAC3B4N,+BAAgC,EAAKjyN,MAAMiyN,+BAC3CtO,4BAA6B,EAAKA,4BAClC3N,wBAAyB,EAAKA,wBAC9B94H,WAAY,EAAKl9E,MAAMk9E,cAnZV,EAwZnB22I,cAAgB,SAAC7nG,EAAWhqC,EAAc4xI,GAWxC,OACE,+BAAK/vI,UAAU,UACZ,EAAK7jF,MAAMgxN,qBACR,mCAASv8M,KAAM,EAAKzU,MAAMgxN,qBAAqBv8M,KACtCogN,YAAa,EAAKtC,sBAClBuC,eAAgB,EAAKT,mBACrBz9C,eAAgB,EAAK+7C,mBACrBoC,eAAgB,EAAKzB,mBACrBtd,wBAAyB,EAAKA,wBAC9B94H,WAAY,EAAKl9E,MAAMk9E,WACvBw1I,mBAAoB,EAAK1yN,MAAM0yN,mBAC/BsC,0BAA2B,EAAKh1N,MAAM4yN,sBAC/C,KACH,EAAK5yN,MAAM0jN,kBACV13F,GAAa,EAAKhsH,MAAM4yN,qBAAuB,EAAK5yN,MAAM4yN,oBAAoBn+M,MAAQ,EAAKzU,MAAMgxN,qBAC7F,EAAKwD,sBACL,EAAKP,mBAAkB,EAAOjyI,EAAc4xI,GAC9C,EAAKK,kBAAkBjoG,EAAWhqC,EAAc4xI,KApbvC,EAkcnBG,YAAc,WACZ,IAAIkB,EAAU,EAAKC,0BACnB,OACE,+BAAKrxI,UAAW,UAAa,EAAK0gB,MAAMlkF,UAAU3yB,OAA4B,GAAnB,mBACxDunO,EAAQvnO,OACP,8BAAIm2F,UAAU,eACXoxI,EAAQl0N,KAAI,SAACusF,EAAQzmF,GACpB,OACE,8BAAIg9E,UAAW,+CACZ,EAAK7jF,MAAM+xN,sBAAwBlrN,EAAQ,UAAY,KACvDymF,EAAO6nI,eAAiB,6BAA+B,IACtD1kO,IAAK,SAAWoW,EAAOkvK,QAAS,kBAAM,EAAKq/C,yBAAyBvuN,EAAOymF,EAAO6nI,iBAClF7nN,MAAO,CAACy3E,gBAAiBA,OAAOuI,EAAO+nI,UAA/B,WAIhB,6BAAGxxI,UAAU,eAAc,4CAAkB5iF,GAAG,gCAldvC,EAudnB+yN,eAAiB,WACf,OAAO,+BAAKnwI,UAAU,kFAxdL,EA2dnByxI,sBAAwB,SAACC,GACvB,OACE,+BAAK1xI,UAAU,qBACZ0xI,EAAoBx0N,KAAI,SAACqwN,GACxB,GAAqC,gBAAjC,EAAAl5K,gBAAgBk5K,MACO,IAAA9sC,qBAAoB,EAAK//E,MAAMx5F,oBAEtD,OAAO,KAGX,GAAqC,eAAjC,EAAAmtC,gBAAgBk5K,GAA+B,CACjD,IAAM7sC,GAAmB,IAAAG,0BACzB,IAAKH,IAAqBA,EAAiB72L,QAAuC,IAA5B62L,EAAiB72L,OACrE,OAAO,KAGX,GAAqC,eAAjC,EAAAwqD,gBAAgBk5K,IAAuE,YAArC/+N,SAASC,SAASoC,iBAAiC,UAAOoF,YAC9G,OAAO,KAET,IAAM07N,EAAe,EAAAt9K,gBAAgBk5K,GAAa77N,cAAcqC,QAAQ,IAAI,KAC5E,OACE,+BAAKisF,UAAW,YAAc2xI,GAAgB,EAAKx1N,MAAMoxN,cAAgBA,EAAc,eAAiB,IACnG3gO,IAAK,SAAW2gO,EAChBr7C,QAAS,EAAK07C,kBAAkBL,IAClC,gCAAMvtI,UAAU,YACf,4CAAkB5iF,GAAI,EAAAq3C,yBAAyB84K,YAlf3D,EAAKqE,WAAa,KAClB,EAAK9D,qBAAsB,EAHV,E,oFAOjB14N,KAAKs9K,SAAS,CACZ49C,UAAU,aAAEl7N,KAAKw8N,YAAY78N,UAE/BK,KAAKsrG,MAAMkvC,sBAAsB,GACjCx6I,KAAKy8N,uB,gDAGmB79C,GACxB5+K,KAAK08N,2BAA2B99C,O,gBA7B3B18B,UAAY,CACjBqyE,UAAW,UAAUx1C,KAAK9lE,WAC1BqhH,yBAA0B,UAAUv7C,KACpC/vJ,sBAAuB,UAAU+vJ,KACjC49C,gBAAiB,UAAU59C,KAC3B/0J,eAAgB,UAAUo4H,KAC1BhtI,uBAAwB,UAAUgtI,KAClCp5H,gBAAiB,UAAU+1J,KAC3B74J,iBAAkB,UAAU64J,KAC5B69C,oBAAqB,UAAU79C,KAC/B54J,cAAe,UAAUxuB,OACzBma,mBAAoB,UAAUna,Q,aAbby/N,G,8HCnBrB,O,WACA,MACA,OACA,OAEA,QAMA,QACA,Q,uDAEMyF,G,gBAUJ,WAAYvxH,IAAO,gGACXA,IADW,SAsBnB++G,kBAAoB,WAClB,EAAK/+G,MAAMiwC,0BAA0B,EAAAx/C,uBAAuB,GAAGC,UAC/D,EAAKsP,MAAMmwC,mCAAmC,GACvB,CAAC,cAAe,kBAEpBthJ,SAAS,EAAKmxG,MAAMmyE,WAAWn3K,QAChD,EAAKglG,MAAMqwC,qCAAoC,GAFvB,CAAC,aAAc,2BAA4B,eAAgB,qBAAsB,cAG9ExhJ,SAAS,EAAKmxG,MAAMmyE,WAAWn3K,SAC1D,EAAKglG,MAAMuwC,wCAAuC,IA9BnC,EAkCnBjxH,kBAAoB,WAClB,IAAIkyM,EAAgB,GACpB,OAAQ,EAAKxxH,MAAMmyE,WAAWn3K,QAC5B,IAAK,cACL,IAAK,iBACHw2N,EAAgB,EAAA/gI,uBAAuB/0F,QAAO,SAAAikN,GAC5C,MAA8B,iBAA1BA,EAAajvH,SACR,EAAKsP,MAAM7qG,SAEa,eAA1BwqN,EAAajvH,YAEtB,MACF,IAAK,aACL,IAAK,eACL,IAAK,aACH8gI,8BACA,MACF,IAAK,2BACL,IAAK,qBACHA,EAAgB,EAAA5gI,0BAA0B7jG,MAAM,EAAG,GAGvD,OAAOykO,GAxDU,EA2DnB5S,qBAAuB,SAAC6S,GAA8C,IAA/Bj6I,EAA+B,wDAAbk6I,EAAa,aAEpE,GAAIl6I,EACF,OAAO,EAET,IAAMsnI,EAAiB,EAAKx/L,oBACxBoyM,EACF,EAAK3S,qBAEL,EAAK/+G,MAAMiwC,0BAA0B6uE,EAAe2S,GAAe/gI,UACnE,EAAKsP,MAAMmwC,mCAAmCshF,IAEhD,IAAME,EAAc,EAAK3xH,MAAM3qF,YAAc,IAAO,EAAI,EAClDq7E,EAAWouH,EAAe2S,GAAe/gI,SAC3CA,IAAa,EAAAE,0BAA0B,GAAGF,SAC5C,EAAKsP,MAAMkvC,sBAAsB,GACxB,EAAKlvC,MAAMmvC,qBAAuBwiF,GAC3C,EAAK3xH,MAAMkvC,sBAAsByiF,GAE/BjhI,IAAa,EAAAE,0BAA0B,GAAGF,UAC5C,EAAKsP,MAAMn8E,mBAAmB,KA7EhC,EAAKpoB,MAAQ,CACXm2N,SAAS,GAEX,EAAKrK,YAAa,EALD,E,oFAQC,WAClB7yN,KAAK6yN,YAAa,EAClBnkI,YAAW,WACL,EAAKmkI,YACP,EAAKv1C,SAAS,CACZ4/C,SAAS,MAGZ,K,6CAGHl9N,KAAK6yN,YAAa,I,+BAgEX,WACDzI,EAAiBpqN,KAAK4qB,oBACtBuyM,EAAsBn9N,KAAKsrG,MAAMowC,gCAEjC0hF,EAA2C,IAAvBD,EACpBE,EAAmBF,IAAuB/S,EAAe31N,OAAS,EAElEmnJ,EAAmC57I,KAAKsrG,MAAM7qG,UAAYT,KAAKsrG,MAAMswC,mCACxC,gBAAjC57I,KAAKsrG,MAAMmyE,WAAWn3K,QAA6D,mBAAjCtG,KAAKsrG,MAAMmyE,WAAWn3K,QAOpEg3N,EAD0B,CAAC,aAAc,2BAA4B,eAAgB,qBAAsB,cAC9DnjO,SAAS6F,KAAKsrG,MAAMmyE,WAAWn3K,QAElF,OACE,+BAAKskF,UAAW,eAAiB5qF,KAAK+G,MAAMm2N,UAAYl9N,KAAKsrG,MAAM7qG,SAAW,wBAA0B,KACrGT,KAAKsrG,MAAM7qG,SAAW,uBAAyB,KAC/CT,KAAKsrG,MAAM7qG,SAAW,KACrB,+BAAKmqF,UAAU,cACb,gCAAMA,UAAU,qBACbw/H,EAAe+S,GAAf,YACe/S,EAAe+S,GAAoB76M,KADlD,aACmEtiB,KAAKsrG,MAAMmyE,WAAW5hK,SADzF,IAEG,MAELyhN,EAAqB,KAAO,kCAAQ1yI,UAAU,8BAA8BkyF,QAAS98K,KAAKqqN,mBACzF,4CAAkBriN,GAAG,kCAI3B,+BAAK4iF,UAAW,OAAS5qF,KAAKsrG,MAAM7qG,SAAW,GAAK,kBACjDm7I,EAAmC,KAClC,+BAAKhxD,UAAW,+BAAiCwyI,EAAoB,wBAA0B,IAC1FtgD,QAAS,kBAAM,EAAKotC,qBAAqBiT,EAAqB,EAAGC,KACpE,oCAAM,4CAAkBp1N,GAAG,kCAG/B,8BAAI4iF,UAAW,oBACZ5qF,KAAKsrG,MAAM7qG,SAAW,sBAAsB08N,EAAqB,yBACjEn9N,KAAKsrG,MAAM7qG,SAAW,kCAAkC2pN,EAAe31N,OAAS,KAChFmnJ,EAAmC,+BAAiC,KAEpEwuE,EAAetiN,KAAI,SAACmjN,EAAcr9M,GACjC,IACM2vN,EAAaD,GAAgD,iBAA1BrS,EAAajvH,SAA8B,SAAWivH,EAAajvH,SAC5G,OACE,8BAAIpR,UAAW,4BAA8B2yI,GAC1C3vN,IAAU,EAAK09F,MAAMowC,gCAAkC,uBAAyB,IAC/ElkJ,IAAK,eAAeoW,EAAOkvK,QAAS,kBAAM,EAAKotC,qBAAqBt8M,GALzD,KAMb,gCAAMg9E,UAAU,kCAAkCqgI,EAAa3oM,WAKtEs5H,EAAmC,KAClC,+BAAKhxD,UAAW,gCAAkCyyI,GAAoBC,EAAqB,wBAA0B,yBAChHxgD,QAAS,kBAAM,EAAKotC,qBAClBiT,EAAqB,EACrBE,GAAoBC,EACpBD,IAAqBC,KAE1B,oCACE,4CAAkBt1N,GAAIq1N,EAClBC,EAAqB,8BAAgC,gCACrD,wC,kBA7JXp7E,UAAY,CACjBkoE,eAAgB,UAAU/zM,MAC1B6zM,qBAAsB,UAAUnrC,KAChCsrC,kBAAmB,UAAUtrC,KAC7B0rC,kBAAmB,UAAUroE,KAC7B3hJ,SAAU,UAAU2hJ,M,GA4KlBkuC,EAAqB,CACzB/0C,sDACAE,wEACAE,0EACAE,gFACArB,8CACArrH,yC,WAGa,IAAA28E,UAlBS,SAACxzG,GAAD,MAAY,CAClCkjJ,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CE,gCAAiCpjJ,EAAMu1I,gBAAgB6N,gCACvDE,iCAAkCtjJ,EAAMu1I,gBAAgB+N,iCACxDE,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3DrB,mBAAoBniJ,EAAMu1I,gBAAgB4M,mBAC1C95H,YAAaroB,EAAMgR,YAAYqX,eAYO2vK,EAAzB,CAA6CusC,I,mJC1M5D,M,IACA,M,IACA,O,IAEA,QACA,Q,IACA,S,IACA,O,IACA,Q,IACA,Q,IACA,OACA,Q,IACA,SAEA,Q,IACA,QACA,Q,IACA,QACA,S,uDAEqBW,G,gBAiBnB,WAAYlyH,IAAO,gGACXA,IADW,SAmEnBmyH,kBAAoB,WAClB,EAAKngD,SAAS,CACZrjH,QAAQ,IACP,WACD,EAAKqjH,SAAS,CACZrjH,QAAQ,QAxEK,EA6EnByjK,oBAAsB,SAACC,GACrB,IAAMnG,EAAgB,EAAKzwN,MAAMuxF,sBAAsBxsF,MAAK,SAAAmlE,GAAA,OAAQA,EAAK3uD,OAASq7M,KAClF,GAAInG,EAAch8M,KAAKjY,WAAa,EAAAC,aAAa02B,OAC/C,EAAKk+L,0BAA0BZ,EAAcl1M,UACxC,CACL,IAAMs7M,GAAa,IAAAzxC,oBAAmBqrC,EAAch8M,MAAM,GACtDoiN,GACF,EAAKxF,0BAA0BwF,EAAWt7M,KAAMk1M,EAAcl1M,MAG3C,UAAnBq7M,GACF,aAAE,cAAcnwI,QAAQ,CAACy5E,UAAW7tK,SAAS6C,KAAKshL,cAAe,KACrC,YAAnBogD,IACT,aAAE,cAAcnwI,QAAQ,CAACy5E,UAAW,GAAI,MA1FzB,EA8FnB42D,eAAiB,WAEf,EAAKvgD,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAKllH,aACL/Y,YAAW,YACT,aAAEt1F,UAAUupG,GAAG,QAAS,EAAKm7E,mBAC7B3lL,OAAO2lO,kBAAmB,GAC1B,aAAE3lO,QAAQ+pG,QAAQ,UAAYqzB,oBAC9Bn8H,SAAS8pG,oBAAoB,QAAS,EAAK66H,yBAC1C,OA5GY,EAgHnBC,mBAAqB,WACnB,IAAMC,EAAgB7kO,SAASg9F,cAAc,uBACzC6nI,IACFA,EAAch3D,UAAY,IAnHX,EAuHnB6W,kBAAoB,SAAC3nL,GACnB,IAAMgjO,EAAWhjO,EAAEugB,OAAOuqI,QAAQ,mBAC5Bi9E,EAAkB/nO,EAAEugB,OAAOuqI,QAAQ,sBACnCm4E,EAAYjjO,EAAEugB,OAAOuqI,QAAQ,mBAC7Bo4E,EAAiBljO,EAAEugB,OAAOuqI,QAAQ,yBAClCk9E,EAAiBhoO,EAAEugB,OAAOuqI,QAAQ,kCAClCm9E,EAAcjoO,EAAEugB,OAAOuqI,QAAQ,sBAC/Bo9E,EAAcloO,EAAEugB,OAAOuqI,QAAQ,qBAC/Bq9E,EAAcnoO,EAAEugB,OAAOuqI,QAAQ,kBAC/Bs9E,EAAepoO,EAAEugB,OAAOuqI,QAAQ,kCACjCk4E,GAAa+E,GAAoBG,GAAgBjF,GAAcC,GAAmB8E,GACjFC,GAAgBG,GAAiBpmO,OAAOqmO,WACxCF,GAAgBnmO,OAAOsmO,mBAAoBrlO,SAAS6C,KAAKC,UAAU0kJ,SAAS,aAChF,EAAK63E,mBApIU,EAwInBA,gBAAkB,WACXtgO,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe,QAAQ,GAEpC,EAAKphD,SAAS,CACZi6C,gBAAgB,EAChBwB,qBAAqB,EACrBC,gCAAgC,IAC/B,WACDtqI,YAAW,WACT,EAAK4uF,SAAS,CACZ66C,YAAa,EAAAz5K,YAAYC,KACzBslC,WAAY,GACZ80I,qBAAqB,EACrBC,gCAAgC,IAElC,EAAK1tH,MAAMplF,iBAAiB,QAE3B,MACH,aAAE9sB,UAAU6/N,IAAI,QAAS,EAAKn7C,mBAC9B3lL,OAAO2lO,kBAAmB,GAC1B,aAAE3lO,QAAQ+pG,QAAQ,UAAYozB,uBA7Jf,EAiKnByoG,sBAAwB,SAAC5nO,GACNA,EAAEugB,OAAOuqI,QAAQ,2BAEhB9oJ,OAAOqmO,WACvB,EAAKlhD,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KACb,WACDvzN,SAAS8pG,oBAAoB,QAAS,EAAK66H,2BAzK9B,EA8KnBY,wBAA0B,SAACxG,GAAkC,IAArByG,EAAqB,wDAC3D,EAAKthD,SAAS,CACZ66C,cACAJ,qBAAsB6G,EAAW,KAAO,EAAK73N,MAAMgxN,qBACnD4B,oBAAqBiF,EAAW,KAAO,EAAK73N,MAAM4yN,sBAEhDxB,IAAgB,EAAAz5K,YAAYG,QAC9B,EAAKw5K,uBArLU,EA2LnBkC,gBAAkB,SAACtpJ,GACZ94E,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAeztJ,EAAK3uD,KAAKhmB,cAAcqC,QAAQ,KAAM,MAElE,EAAKq/N,sBA/LY,EAoMnBa,gBAAkB,WAChB,EAAKvzH,MAAMuzH,kBACX,EAAKpG,kBACL/pI,YAAW,WACT,EAAKowI,qBACJ,MAzMc,EA4MnBr3H,WAAa,WACX,EAAKu2H,qBACL,EAAK3F,sBACL,EAAKQ,eA/MY,EAkNnBxB,uBAAyB,SAACC,GACxB,IAAMp8M,GAAS,IAAAC,oBACf,IAAK,EAAKpU,MAAMwwN,eAAgB,CAE9B,IAAIC,EAAgB,GAAIC,EAAgB,GAClCC,EAAe,EAAAj7H,iBAAiBx8F,MAAK,SAAA03N,GAAA,OAASA,IAAUL,EAASh1M,QAEvE,GAAsB,iBAAlBg1M,EAASh1M,KACP,EAAKgpF,MAAMiwC,4BACb,EAAKjwC,MAAMiwC,0BAA0B,EAAAr/C,0BAA0B,GAAGF,UAClE,EAAKsP,MAAMmwC,mCAAmC,SAE3C,GAAIi8E,EAAc,CACvB,IACME,EADc18M,EAAOsD,MAAP,MACkB/B,WAAW3Q,MAAK,SAAA4Q,GAAA,MAAmC,eAAxBA,EAAQlB,KAAKlV,UAC9E,EAAKysN,2BAA2B6E,GAChC,IAAMpmC,EAAiBomC,EAAkBp8M,KAAKs8M,2BAA2BR,EAASh1M,MAE9EkvK,GACFA,EAAe/qF,cAEjB+wH,EAAgB,QAChBC,EAAgB,aAEZ,EAAKnsH,MAAMiwC,4BACb,EAAKjwC,MAAMiwC,0BAA0B,EAAAr/C,0BAA0B,GAAGF,UAClE,EAAKsP,MAAMmwC,mCAAmC,IAI7Ci8E,IACHD,EAAgBH,EAASh1M,KACzBk1M,EAAgBF,EAASU,eAAiB,EAAKjxN,MAAMkxN,iBAGnDT,GAAiBA,EAAcvhO,SACjCuhO,EAAgB,WAGbr/N,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAelH,EAAcl7N,cAAcqC,QAAQ,KAAM,MAGhD,UAAlB64N,GAAgD,qBAAlBC,GAA0D,cAAlBA,GACxE,EAAKS,yBAAyBZ,GAGhC,EAAKh6C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WAOD,GANA,EAAKllH,aACL,EAAK2wH,0BAA0BX,EAAeD,IAC9C,aAAEp+N,UAAUupG,GAAG,QAAS,EAAKm7E,mBAC7B3lL,OAAO2lO,kBAAmB,GAC1B,aAAE3lO,QAAQ+pG,QAAQ,UAAYqzB,qBAC9B,aAAEn8H,UAAU6/N,IAAI,QAAS,EAAK8E,uBAC1BzG,EAASgB,eAAiBZ,EAAc,CAC1C,IAAMlmC,EAAiB8lC,EAAS97M,KAAKmmE,SAAS71E,MAAK,SAAAzI,GAAA,OAAWA,EAAQwY,WAAay7M,EAASiB,eACxF/mC,GACFA,EAAe/qF,oBAhRN,EAwRnBs4H,sBAAwB,WACtB,IAAI/C,EAAU,EAAKC,0BACnB,OACE,+BAAKrxI,UAAW,eAAkBoxI,EAAQvnO,OAAiC,GAAxB,wBAChDunO,EAAQvnO,OACP,8BAAIm2F,UAAU,qBACXoxI,EAAQl0N,KAAI,SAACusF,EAAQzmF,GAAT,OACX,8BAAIg9E,UAAW,0BACZ,EAAK7jF,MAAM+xN,sBAAwBlrN,EAAQ,kCAAoC,IAC9EkvK,QAAS,kBAAM,UAAU37I,eAAe,0BAA4BvzB,IAAU,EAAKuuN,yBAAyBvuN,EAAOymF,EAAO6nI,iBAC1H1kO,IAAKoW,GACP,+BAAKg9E,UAAW,gCACbyJ,EAAO6nI,eAAiB,wCAA0C,KACnE,+BAAKn9N,IAAKs1F,EAAO+nI,UAAWloB,IAAI,oBAMxC,6BAAGtpH,UAAU,qBAAb,2BA3SW,EAiTnB2wI,oBAAsB,WACpB,IAAMxyI,EAAe,EAAKhiF,MAAM,EAAKy0N,wBAAwB,EAAKz0N,MAAM4yN,oBAAoBn+M,KAAKlV,SACjG,OACE,mCACEq7E,SAAU,EAAK56E,MAAM4yN,oBAAoBn+M,KAAKmmE,SAC9C0oI,kBAAmB,EAAKA,kBACxBe,qBAAsB,EAAKA,qBAC3BriI,aAAcA,EACd4yI,gBAAiB,EAAK50N,MAAM40N,gBAC5Bz0E,0BAA2B,EAAKA,0BAChCzmJ,UAAU,EACVg7N,gBAAiB,EAAKA,gBACtBC,oBAAqB,EAAKA,oBAC1B1sM,sBAAuB,EAAKs8E,MAAMt8E,sBAClC5Z,uBAAwB,EAAKk2F,MAAMl2F,uBACnC4U,eAAgB,EAAKshF,MAAMthF,eAC3BhB,gBAAiB,EAAKsiF,MAAMtiF,gBAC5B60J,cAAe,EAAK92K,MAAM4yN,oBAAoBn+M,KAC9Cw9M,+BAAgC,EAAKjyN,MAAMiyN,+BAC3CtO,4BAA6B,EAAKA,4BAClC3N,wBAAyB,EAAKA,wBAC9B94H,WAAY,EAAKl9E,MAAMk9E,cAtUV,EAiVnB+6I,uBAAyB,WACvB,EAAK1hD,SAAS,CACZ2hD,oBAAqB,EAAKl4N,MAAMk4N,sBAnVjB,EAuVnBxqM,YAAc,SAACvZ,GACb,IAAMgiK,EAAa,EAAKn2K,MAAMgxN,qBACxB75C,EAAY,EAAKn3K,MAAM4yN,oBACvB55C,EAAiB7C,GAAeA,EAAW1hK,KAAKjY,WAAa,EAAAC,aAAa02B,OAAWgjJ,EAAagB,EACxG,OAAK6B,EAGU7kK,EAAOo9E,sBAAsBynF,EAAe,EAAKz0E,MAAMhtF,gBAAiB,EAAKvX,MAAMk9E,YAFzF,IA5VQ,EAkWnBi7I,YAAc,SAACv9I,EAAUoxC,EAAW4nG,EAAYl9C,EAAYI,EAAeshD,EAA0B/sI,GAAwB,IACpH33E,EAAQ,EAAK6wF,MAAb7wF,KACDS,GAAS,IAAAC,oBACT25F,GAAc,IAAAs2E,uBACpB,OACE,+BAAKxgG,UAAW,aACZ,EAAK7jF,MAAMoxN,cAAgB,EAAAz5K,YAAYG,SAAW,EAAK93C,MAAMgxN,sBAC9D,EAAKhxN,MAAMoxN,cAAgB,EAAAz5K,YAAYI,YAAc,mBAAqB,KAC1Ei0E,GAAc4nG,GAAcwE,EAA4B,qBAAuB,KAC/E,EAAKp4N,MAAMoxN,cAAgB,EAAAz5K,YAAYE,OAAS,qBAAuB,KAEvE,EAAK73C,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAU4+H,EAChD,+BAAK7yF,UAAU,kBACb,mCAA8Bw0I,UAAW,CAAC,EAAE,KAC3CvhD,GAA0C,eAAzBA,EAAcv3K,QAAyD,aAA9B,IAAAlK,2BACzD,+BAAKwuF,UAAU,yBACb,mCAAkBy0I,aAAc,EAAKC,yBAErC,KACJ,+BAAK10I,UAAU,2BACZ6yF,EAAWl6K,WAAa,EAAAC,aAAaC,SAAWg6K,EAAW8hD,WAAW9qO,OACnEgpL,EAAW8hD,WAAWz3N,KAAI,SAAAstD,GAAA,OAC1B,kCAAQw1B,UAAW,kCAChB6yF,EAAW+hD,kBAAoBpqK,EAAU,0CAA4C,IAChF0nH,QAAS,kBAAM,EAAKs+C,mBAAmBhmK,IACvC59D,IAAK49D,GACVqoH,EAAWgiD,gBAAgBrqK,IAAYA,MAG1C,iCAAOw1B,UAAW,gBACf,EAAK7jF,MAAMk9E,WAAa,yBAA2B,KACnD,EAAKl9E,MAAMk9E,YAAc,EAAKl9E,MAAMk9E,WAAWxvF,OAAS,GAAK,4BAA8B,IAEvFyC,MAAO,EAAK6P,MAAMk9E,WAClBy7I,QAAS,EAAKV,uBACdW,OAAQ,EAAKX,uBACblJ,SAAU,EAAK/Y,wBACfzrE,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,iCACrCA,GAAG,gBAGb,EAAKjB,MAAMk9E,WACR,kCAAQ2G,UAAW,wBACXkyF,QAAS,kBAAM,EAAKigC,wBAAwB,CAACrmM,OAAQ,CAACxf,MAAO,SACrE,OAGN,KACJ,+BACE0zF,UAAW,sBAAwB,EAAK0gB,MAAMs0H,eAAiB,sCAAwC,KACtG,EAAK74N,MAAMoxN,cAAgB,EAAAz5K,YAAYE,OACtC,+BAAKgsC,UAAU,eACb,8BAAIA,UAAU,qBACXkqB,EAAYhtG,KAAI,SAAAtQ,GACf,OAAO,mCAAsB0jB,OAAQA,EACR1jB,IAAKA,EACLqoO,QAASroO,EACTiJ,UAAU,EACVo6N,sBAAuB,EAAKA,6BAI7D,KACH,EAAK9zN,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OACtC,+BAAK+rC,UAAU,eACZ,EAAK7jF,MAAMgxN,qBACV,EAAKhxN,MAAMkzD,OACT,mCAAyB0nB,SAAUA,EACV41I,eAAgB,EAAKxwN,MAAMwwN,eAC3Br6C,WAAY,EAAKn2K,MAAMgxN,qBACvB75C,UAAW,EAAKn3K,MAAM4yN,oBACtBsB,YAAa,EAAK/zE,0BAClBl9H,eAAgB,EAAKshF,MAAMthF,eAC3BhB,gBAAiB,EAAKsiF,MAAMtiF,gBAC5B7C,cAAe,EAAKmlF,MAAMnlF,cAC1B/Q,uBAAwB,EAAKk2F,MAAMl2F,uBACnC6uE,WAAY,EAAKl9E,MAAMk9E,WACvBswI,UAAW,EAAKjpH,MAAMipH,UACtBzwI,WAAY5oE,EAAOwmE,uBACnBo+I,mBAAmB5kN,EAAOc,cAAe6hK,GAAiBA,EAAciiD,kBACxE1tI,oBAAqBA,EACrB2tI,aAAc,EAAKC,kBAE1C,+BAAKp1I,UAAU,iFACjB,mCAA6BqwI,YAAa,EAAKyC,uBAEnD,KACH,EAAK32N,MAAMoxN,cAAgB,EAAAz5K,YAAYI,YAAc,EAAKigL,wBAA0B,KACpF,EAAKh4N,MAAMoxN,cAAgB,EAAAz5K,YAAYK,QACtC,+BAAK6rC,UAAU,iFACb,QA1bV,EAAK7jF,MAAMkzD,QAAS,EACpB,EAAKlzD,MAAMk4N,oBAAqB,EAHf,E,oFAMC,YAClB,aAAE7lO,UAAUupG,GAAG,UAAYmzB,uBAAwB91H,KAAK69N,iBACxD,aAAEzkO,UAAUupG,GAAG,UAAYozB,iCAAiC,SAACn1B,EAAOu3H,GAClE,EAAKwG,wBAAwBxG,GAAa,MAE5Cn4N,KAAKsrG,MAAMkvC,sBAAsB,GACjCx6I,KAAKy8N,uB,gDAGmB79C,GAAW,WAC7B1jK,GAAS,IAAAC,oBAIf,GAHKnb,KAAK+G,MAAMuxF,uBAA0Bt4F,KAAK+G,MAAMuxF,sBAAsB7jG,QACzEuL,KAAKs9K,SAAS,CAAChlF,sBAAuBp9E,EAAOo9E,0BAE3CsmF,EAAU5oK,aAAavhB,OAAQ,CACjC,IAAIurO,GAAkB,EAClBphD,EAAU5oK,aAAavhB,SAAWuL,KAAKsrG,MAAMt1F,aAAavhB,SAC5DurO,EAAkBphD,EAAU5oK,aAAa/V,MAAK,SAAC+G,EAAQ4G,GACrD,OAAO5G,EAAO6oB,WAAa,EAAKy7E,MAAMt1F,aAAapI,GAAOiiB,UACrD7oB,EAAO+lF,gBAAkB,EAAKue,MAAMt1F,aAAapI,GAAOm/E,kBAG7DizI,GACFhgO,KAAKy9N,oBAGT,GAAI7+C,EAAUpjC,yBAA2Bx7I,KAAKsrG,MAAMkwC,wBAC/C,EAAAt/C,0BAA0Bj8F,MAAK,SAAAggO,GAAA,OAAOA,EAAIjkI,WAAa4iF,EAAUpjC,2BAChEx7I,KAAK+G,MAAMgxN,uBACqC,eAAlD/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,UACgB,iBAAlD7b,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,UACvC,CACD,IAAMY,EAAWzc,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKiB,WAClDC,EAAU,KACd,OAAQkiK,EAAUpjC,wBAChB,KAAK,EAAAt/C,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAKlC,KAAK,EAAAE,0BAA0B,GAAGF,SAChCt/E,EAA6D,eAAlD1c,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,SAC5CY,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,eAAtBA,EAAMhoM,KAAKlV,UAClCmW,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,6BAAtBA,EAAMhoM,KAAKlV,UACtC,MACF,KAAK,EAAA41F,0BAA0B,GAAGF,SAChCt/E,EAA6D,eAAlD1c,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,SAC5CY,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,iBAAtBA,EAAMhoM,KAAKlV,UAClCmW,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,uBAAtBA,EAAMhoM,KAAKlV,UAGtCoW,GACF1c,KAAK05N,mBAAmBh9M,EAASkiK,EAAUpjC,wBAIjDx7I,KAAK08N,2BAA2B99C,O,gBA/E3B18B,UAAY,CACjBlzH,sBAAuB,UAAU+vJ,KAAK9lE,WACtC4lH,gBAAiB,UAAU9/C,KAAK9lE,WAChCinH,kBAAmB,UAAUnhD,KAC7B2/C,eAAgB,UAAU3/C,KAC1BnvF,SAAU,UAAUptD,OACpBxY,eAAgB,UAAUo4H,KAC1Bp5H,gBAAiB,UAAU+1J,KAC3B74J,iBAAkB,UAAU64J,KAC5B54J,cAAe,UAAUxuB,OACzBma,mBAAoB,UAAUna,OAC9Byd,uBAAwB,UAAUgtI,KAClCw6E,oBAAqB,UAAU79C,M,aAddy+C,G,8HCpBrB,O,WACA,MACA,OACA,O,IAEA,MACYtrB,E,wJAAZ,O,IACA,QAEA,Q,IACA,O,IACA,Q,IACA,Q,IACA,OACA,S,uDAEMiuB,G,gBAcJ,WAAY70H,IAAO,gGACXA,IADW,SAOnB80H,0BAA4B,SAACh1N,GAC3B,UAAU+1B,eAAe,UAAY/1B,EAAO,mBAC5C,EAAKkyK,SAAS,CACZ+iD,uBAAwB,EAAKt5N,MAAMs5N,yBAA2Bj1N,EAAO,GAAKA,IACzE,WACD,EAAKrE,MAAMs5N,uBACPloO,OAAO0uD,iBAAiB,QAAS,EAAKgnJ,2BACtC11M,OAAO+qG,oBAAoB,QAAS,EAAK2qG,+BAd9B,EAkBnByyB,uBAAyB,WACvB,UAAUn/L,eAAe,oCACzB,EAAKmqE,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,QAAS,kCACT+D,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,UAAU/uD,eAAe,8BACzB,EAAKmqE,MAAMt8E,sBAAsB,CAACuB,SAAQ,MAE5C,CACAjO,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,WACL,UAAU/uD,eAAe,+BACzB,EAAKmqE,MAAMt8E,sBAAsB,CAACuB,SAAQ,IAC1Cm+D,YAAW,WACT,EAAK4uF,SAAS,CACZ+iD,uBAAwB,KAE1B,EAAK/0H,MAAMuzH,oBACV,WAzCQ,EA+CnB0B,kBAAoB,SAACpI,GACnB,EAAK7sH,MAAMqzH,wBAAwBxG,GACnC,EAAKqI,iBAjDY,EAoDnBA,cAAgB,WACd,EAAKljD,SAAS,CACZ+iD,uBAAwB,KACvB,WACDloO,OAAO+qG,oBAAoB,QAAS,EAAK2qG,+BAxD1B,EA4DnB4yB,uBAAyB,WACvB,UAAUt/L,eAAe,yCACzB,EAAKo/L,kBAAkB,EAAA7hL,YAAYI,aACnC,EAAK0hL,iBA/DY,EAkEnB3yB,0BAA4B,SAAC13M,GAC3B,IAAMuqO,EAAiBvqO,EAAEugB,OAAOuqI,QAAQ,8BAClC0/E,EAAgBxqO,EAAEugB,OAAOuqI,QAAQ,4BACjCo4E,EAAiBljO,EAAEugB,OAAOuqI,QAAQ,yBACnCy/E,GAAmBC,GAAkBtH,GACxC,EAAKmH,iBAvEU,EA2EnBI,mBAAqB,WACnB,UAAUz/L,eAAe,uBACzB,UAAMld,SAASiuL,EAAQliL,oBAAoB,sBA3E3C,EAAKjpB,MAAQ,CACXs5N,uBAAwB,IAHT,E,yEAgFV,WACA5lN,EAAQza,KAAKsrG,MAAb7wF,KACDomN,EAAkB,UAAO//N,yBACzBgR,EAAqB9R,KAAKsrG,MAAMx5F,mBAClCw5K,GAAmB,IAAAD,qBAAoBv5K,GAE3C,OACE,+BAAK84E,UAAU,sBACZ5qF,KAAKsrG,MAAMw1H,UAAUrsO,QAAUuL,KAAKsrG,MAAM3qF,YAAc,IACvD,wCACE,KACH3gB,KAAKsrG,MAAMysH,qBACV,kCAAQntI,UAAU,+DACVkyF,QAAS98K,KAAK4gO,oBACpB,gCAAMh2I,UAAU,kCAAiC,4CAAkB5iF,GAAG,8BACrEhI,KAAKsrG,MAAMhtF,gBAAgB7pB,OAC1B,gCAAMm2F,UAAU,iCAAiC5qF,KAAKsrG,MAAMhtF,gBAAgB7pB,QAAiB,MAG/F,KAQHosO,EAAkB,KAAO,wCAC1B,kCAAQj2I,UAAW,6BAChB5qF,KAAKsrG,MAAM6sH,cAAgB,EAAAz5K,YAAYG,OACtC,qCAAuC,uCACF,SAAtC7+C,KAAK+G,MAAMs5N,uBAAoC,qCAAuC,IACjFvjD,QAAS,kBAAM,EAAKsjD,0BAA0B,UACpD,gCAAMx1I,UAAU,kCACd,4CAAkB5iF,GAAIhI,KAAKsrG,MAAM6sH,cAAgB,EAAAz5K,YAAYG,OACzD,0BACA7+C,KAAKsrG,MAAM6sH,cAAgB,EAAAz5K,YAAYE,OAAS,0BAA4B,iCAGpF,+BAAKgsC,UAAW,iBACb5qF,KAAK+G,MAAMs5N,uBAAX,0BAA8DrgO,KAAK+G,MAAMs5N,uBAA2B,KACpGrgO,KAAK+G,MAAMs5N,wBAA0B/0C,EAArC,8BAAwF,KACxFtrL,KAAK+G,MAAMs5N,wBAA0BvuN,EAAmBivN,iBAAxD,gCAA6G,KACvE,SAAtC/gO,KAAK+G,MAAMs5N,uBACV,8BAAIz1I,UAAU,uBACZ,8BAAIA,UAAU,4DACVkyF,QAAS,kBAAM,UAAU37I,eAAe,+BAAiC,EAAKo/L,kBAAkB,EAAA7hL,YAAYG,UAC9G,4CAAkB72C,GAAG,6BAEvB,8BAAI4iF,UAAU,0DAA0DkyF,QAAS98K,KAAKygO,wBACpF,4CAAkBz4N,GAAG,kCAGtBsjL,EACC,8BAAI1gG,UAAU,4DACVkyF,QAAS,kBAAM,UAAU37I,eAAe,mCAAqC,EAAKo/L,kBAAkB,EAAA7hL,YAAYE,UAClH,4CAAkB52C,GAAG,iCAErB,KACJ,8BAAI4iF,UAAU,2DACVkyF,QAAS98K,KAAKsgO,wBAAwB,4CAAkBt4N,GAAG,gCAC/D,mCAAgBg5N,eAAgB,0BAEhC,KACmC,WAAtChhO,KAAK+G,MAAMs5N,uBACV,+BAAKz1I,UAAU,yBACb,iCAAOA,UAAW,+BACf5qF,KAAK+G,MAAMk9E,WAAa,kCAAoC,IACxD/sF,MAAO8I,KAAKsrG,MAAMrnB,WAAY74E,KAAK,OACnC0qN,SAAU91N,KAAKsrG,MAAMyxG,wBACrBzrE,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,mCAC3ChI,KAAKsrG,MAAMrnB,WACV,kCAAQ2G,UAAU,8BAA8BkyF,QAAS,WACvD,UAAU37I,eAAe,gBACzB,EAAKmqE,MAAMyxG,wBAAwB,CAACrmM,OAAO,CAACxf,MAAM,SAElD,MAEJ,W,kBA1KLgrJ,UAAY,CACjBy8E,wBAAyB,UAAU5/C,KAAK9lE,WACxC8jG,wBAAyB,UAAUh+B,KAAK9lE,WACxC4lH,gBAAiB,UAAU9/C,KAAK9lE,WAChCk/G,YAAa,UAAUv/G,OAAOK,WAC9Bh1B,WAAY,UAAUzhD,OACtBu1L,qBAAsB,UAAUpgO,OAChCi4F,SAAU,UAAUptD,OACpBxY,eAAgB,UAAUo4H,KAC1Bp5H,gBAAiB,UAAU+1J,M,cAiLhB,IAAAh3B,aACb,IAAAj8C,UAVsB,SAACxzG,GAAD,MAAY,CAClCwoO,UAAWxoO,EAAMu1I,gBAAgBizF,UACjCngN,YAAaroB,EAAMgR,YAAYqX,YAC/B7O,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C4W,gBAAiBhmB,EAAMyc,YAAYuJ,mBAGV,GAGzB,CAA6C6hN,K,+IC7M/C,O,WACA,MACA,O,IAEA,O,IACA,O,uDAEqBc,G,6OAOnBC,cAAgB,WACd,UAAU//L,eAAe,qBACzB,EAAKmqE,MAAM6vH,2BACXzsI,YAAW,WACT,EAAKs0H,gBACJ,I,gGAIH,OACE,kCAAQp4H,UAAU,sBAAsBkyF,QAAS98K,KAAKkhO,eACpD,gCAAMt2I,UAAW,eAAiB5qF,KAAKsrG,MAAMysH,qBAAqBv8M,KAAK2lN,gBAAkB,wBAA0B,MACnH,gCAAMv2I,UAAU,sBACd,4CAAkB5iF,GAAG,yBADvB,IACgD,mCAAK,4CAAkBA,GAAG,+B,kBAlBzEk6I,UAAY,CACjB61E,qBAAsB,UAAU/4C,WAAV,WAA2C/lE,WACjEkiH,yBAA0B,UAAUp8C,KAAK9lE,Y,aAJxBgoH,G,wJCPrB,MACA,O,IACA,MACA,O,IAEA,Q,IAEA,Q,IACA,OACA,Q,IACA,Q,IACA,S,IACA,SACA,Q,IACA,Q,IACA,SACA,QACA,SACA,Q,IACA,O,IACA,QACA,QACA,U,IACA,Q,uDAEMG,G,oPAUJd,uBAAyB,WACvB,UAAUn/L,eAAe,wBACzB,EAAKmqE,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,QAAS,wBACT+D,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,UAAU/uD,eAAe,sBACzB,EAAKmqE,MAAMt8E,sBAAsB,CAACuB,SAAS,MAE5C,CACDjO,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,WACL,UAAU/uD,eAAe,mBACzB,EAAKmqE,MAAMt8E,sBAAsB,CAACuB,SAAS,IAC3C,EAAK+6E,MAAMuzH,wB,EAMnBwC,uBAAyB,SAAC5zB,GACxB,UAAUtsK,eAAe,qBACzB,EAAKmqE,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBwjL,mB,EAIJK,wBAA0B,WACxB,UAAU3sK,eAAe,+BACzB,EAAKmqE,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,QAAS,yBACT+D,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,UAAU/uD,eAAe,yBACzB,EAAKmqE,MAAMt8E,sBAAsB,CAACuB,SAAS,MAE5C,CACDjO,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,WACL,UAAU/uD,eAAe,0BACzB,EAAKmqE,MAAMt8E,sBAAsB,CAACuB,SAAS,IAC3C,EAAK+6E,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBD,gBAAgB,EAChB5U,wBAAwB,U,EAOlCksN,0BAA4B,WAC1B,IAAMxvN,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SACrD,UAAUy5B,eAAe,oCACpB,EAAKmqE,MAAMl2F,uBAIZtD,EAAmByvN,4BACrB,EAAKj2H,MAAM76E,oBAAmB,IAE9B,IAAAgnE,WAAU,CAACC,QAAQ,EAAM+0B,iBAAkBjsE,iBAAiBE,wBACzD7uB,MAAK,YACJ,IAAA29I,oBAAmB,gDARvB,EAAK6xD,uBAAuB,EAAA/hL,eAAeI,W,EAa/CisI,eAAiB,YACA,IAAAxwK,oBACQsZ,aAAY,GAC3Br2B,SAAQ,SAAC7E,GACf,MAAAA,EAAOwlB,aAAa3gB,SAApB,gCAA4B,WAAM4gB,GAAN,uFACpB,EAAK+zM,2BAA2B,CAACv3M,KAAMwD,IADnB,6CAA5B,kD,EAMJwiN,yB,6BAA0B,qGACxB,IAAA56M,gBACM1L,GAAS,IAAAC,oBAGT45F,EAAU75F,EAAOuZ,aAAY,GALX,SAOlB,EAAKk3J,iBAPa,OASpB1sG,EAAc,CAChB,CAAC,YAAa,oBAAqB,oBAAqB,WAAY,YAEtE81B,EAAQ32G,SAAQ,SAAC7E,GACfA,EAAOwlB,aAAa3gB,SAAQ,SAAA4gB,GAC1B,IADqC,eAC5BzqB,GACP,IAAM8O,EAAU2b,EAAQ2iE,SAASptF,GAC7B8O,GAAW47E,EAAYphF,OAAM,SAAAnF,GAAA,OAAMA,EAAEoQ,oBAAsBzF,EAAQM,UAAUmF,mBAC3EpQ,EAAE8X,YAAcnN,EAAQM,UAAU6M,cACtCyuE,EAAYlqF,KAAK,CACfsO,EAAQM,UAAU6M,UAClBnN,EAAQM,UAAUmF,kBAClBzF,EAAQM,UAAU2M,kBAClB6jG,KAAK2W,UAAUznH,EAAQM,UAAUmP,UACjCqhG,KAAK2W,UAAUznH,EAAQM,UAAUkyC,YAT9BthD,EAAI,EAAGA,GAAKyqB,EAAQ2iE,SAASltF,OAAQF,IAAK,EAA1CA,SAebyD,QAAQ4B,IAAIqlF,IACZ,IAAAqT,kBACA,IAAAmvI,aAAYxiJ,GA/BY,8C,EAkC1ByiJ,sBAAwB,WACtB,IAAMxmN,GAAS,IAAAC,oBACfnjB,QAAQ4B,IAAI,mBAAoBshB,EAAOi1F,mBAAkB,IACzDn4G,QAAQ4B,IAAI,wBAAyBshB,EAAO2nK,kBAC5C7qL,QAAQ4B,IAAI,oCAAqCu6G,KAAK2W,UAAU5vG,EAAOq0F,2BAA0B,GAAO,GAAM,KAC9G,EAAKiyH,2B,gGAGE,WACD1vN,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAC/Cm5N,EAAkB,UAAO//N,yBACzB6gO,GAAmBvoO,SAASC,SAASo4F,eACrCmwI,EAAe9vN,EAAmB+qK,YACxC,OACE,+BAAKjyF,UAAU,eACZ5qF,KAAKsrG,MAAM3qF,YAAc,IACxB,mCAAc2gN,0BAA2BthO,KAAKshO,0BAChCM,aAAcA,EACdtB,uBAAwBtgO,KAAKsgO,yBAEzC,KACHtgO,KAAKsrG,MAAM3qF,YAAc,KAAOkgN,GAAoB7gO,KAAKsrG,MAAMnzF,eAAeiZ,UAAYpxB,KAAKsrG,MAAMu2H,UAAYF,EAAmB,KACnI,wCAEDC,EAAe,wCAAiB,KACjC,mCAAiBpkG,OAAO,eACxB,mCAAgBwjG,eAAe,kBAC7BlvN,EAAmB8rB,aAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,MASnF,KARF,kCAAQ21E,UAAU,qCACVkyF,QAAS98K,KAAKsrG,MAAMthF,eAChBhqB,KAAK8tM,wBACL,kBAAM,EAAKuzB,uBAAuB,EAAA/hL,eAAeC,UAC3D,gCAAMqrC,UAAU,qBACd,4CAAkB5iF,GAAIhI,KAAKsrG,MAAMthF,eAAiB,eAAiB,kBAIxE,UAAOnpB,YACN,kCAAQ+pF,UAAU,sCAAsCkyF,QAAS98K,KAAK0hO,uBACpE,gCAAM92I,UAAU,qBAAhB,eAEA,KACF94E,EAAmBk1H,aAAgBhnI,KAAKsrG,MAAMu2H,UAAYF,EAC1D,kCAAQ/2I,UAAU,kCACVkyF,QAAS98K,KAAKsrG,MAAMu2H,UAC1B,gCAAMj3I,UAAU,qBAAoB,4CAAkB5iF,GAAG,gBACxDhI,KAAKsrG,MAAM/oG,UAAU9N,OACpB,gCAAMm2F,UAAU,uBAAuB5qF,KAAKsrG,MAAM/oG,UAAU9N,QAC1D,MAEJ,KACHqd,EAAmBgwN,gBAAkBjB,EAAkB,wCAAiB,KACzE,kCAAQj2I,UAAU,mCAAmCkyF,QAAS98K,KAAKsgO,wBACjE,gCAAM11I,UAAU,qBAAoB,4CAAkB5iF,GAAG,kBAE1D25N,EAAkB,wCAAoB,KACtC3hO,KAAKsrG,MAAMw1H,UAAUrsO,QAAUuL,KAAKsrG,MAAM3qF,aAAe,IAAM,wCAAc,KAC7EvnB,SAASC,SAAS4b,MAAQ,+BAAK21E,UAAU,yBAA2B,U,gBA1LpEs3D,UAAY,CACjB6/E,OAAQ,UAAUhjD,KAClB8iD,SAAU,UAAU9iD,KACpB/vJ,sBAAuB,UAAU+vJ,KAAK9lE,WACtC4lH,gBAAiB,UAAU9/C,KAAK9lE,WAChCrpB,SAAU,UAAUptD,Q,cAsMT,IAAAspE,UAXS,SAACxzG,GACvB,MAAO,CACLwoO,UAAWxoO,EAAMu1I,gBAAgBizF,UACjCv+N,UAAWjK,EAAM8J,UAAUG,UAC3Boe,YAAaroB,EAAMgR,YAAYqX,YAC/BxI,eAAgB7f,EAAMqN,gBACtByP,uBAAwB9c,EAAMwc,UAAUM,uBACxC4U,eAAgB1xB,EAAMwc,UAAUkV,kBAII,CACtCyG,wCACAzH,mCAFa,CAGZo4M,I,oLCzOH,M,IACA,OACA,Q,IACA,OAEA,QACA,Q,IACA,O,IACA,Q,IACA,QACA,Q,OAMA,UACA,SACA,QACA,Q,IACA,MACA,SACA,QAEA,SACA,SACA,SACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,SACA,SACA,S,uDAGqBY,G,gBAmBnB,WAAY12H,GAAO,8GACXA,IADW,SA0DnB22H,iBAAmB,YACjB,IAAAr7M,gBACA,EAAKoI,sBAAsB,CAACuB,SAAQ,IACpC,IACE,IAAM3Z,EAAUu9F,KAAKC,MAAMj8G,OAAO67G,aAAaK,QAAQ,EAAKn5F,OAAOgnN,kBACnE,EAAKhnN,OAAOm0H,oBAAoBz4H,GAAS,GACzC,MAAOxK,GAAMpU,QAAQ4B,IAAI,0CAA2CwS,IACtE,IAAAkmF,kBAjEiB,EAoEnB6vI,mBAAqB,WACf,UAAOrhO,0BACT3I,OAAO0uD,iBAAiB,WAAW,SAAC+5C,IAC9BA,EAAM3sG,MAAS2sG,EAAM3sG,KAAKysC,SAAW,EAAA0hM,8BAA8BjgO,UAClEy+F,EAAM3sG,KAAKysC,SAAW,EAAA0hM,8BAA8BC,YACvD3zI,YAAW,YACT,IAAAi0F,2BAA0B,EAAKznK,QAC5B2W,MAAK,SAAAswE,GACJ,IAAMvrF,EAAU,EAAKsE,OAAOq0F,2BAA0B,GAAO,GAAO,GACpE34F,EAAQwlN,UAAYj6H,EAEpBhqG,OAAOoB,OAAO4oC,YAAY,CACxBzB,OAAQkgE,EAAM3sG,KAAKysC,OACnB7f,QAASjK,GACR,UAEN,GAEDgqF,EAAM3sG,MAAQ2sG,EAAM3sG,KAAKysC,SAAW,EAAA0hM,8BAA8B9kD,WAC1B,WAArClkL,SAASC,SAASoC,iBACrBmlG,EAAM3sG,KAAK2iB,SAAU,IAAA0rN,wBAAuB1hI,EAAM3sG,KAAK2iB,SACvD5e,QAAQ4B,IAAI,wBAAyBgnG,EAAM3sG,KAAK2iB,UAElD,EAAKsE,OAAOm0H,oBAAoBzuC,EAAM3sG,KAAK2iB,aAK7Cze,OAAOoB,QACTpB,OAAOoB,OAAO4oC,YAAY,CACxBzB,OAAQ,EAAA0hM,8BAA8BG,oBACrC,MAnGY,EAwGnBC,mBAAqB,SAAC5hI,EAAO6hI,GACN,IAAjBA,IACF,EAAK7F,uBACL,aAAEzkO,QAAQ8gO,IAAI,UAAY7jG,wBA3GX,EAuOnBstG,gBAvOmB,gCAuOF,WAAOvzF,EAAYwzF,GAAnB,MAAgCC,EAAhC,kIACVD,IAAeA,EAAYxzF,EAAWugF,aAD5B,oBAGb13N,QAAQ4B,IAAI,aAAcu1I,KACpBugF,GAAevgF,EAAWugF,cAC2B,IAAhBA,GAAuBA,KAAiB,EAAKx0M,OAAO9P,KALlF,gCAOL,EAAKqoN,aAAa/D,GAAa,GAP1B,cAST,EAAKpkH,MAAMh4E,sBACb,EAAKg4E,MAAMh4E,qBAAqB67G,EAAWnnI,IAVhC,UAYP,EAAKkT,OAAOm0H,oBAChBF,EAAYyzF,GAAiC,SAAChsN,GAAD,OAAaA,KAAS,GAbxD,8CAvOE,iDAyPnBisN,sBAAwB,WACtB,OAAQ,EAAKv3H,MAAM/4E,uBAAyB,EAAK+4E,MAAM/4E,sBAAsBp4B,SAAS,EAAK+gB,OAAOzf,gBAC9FrF,QAAQC,QAAQ,KAChB,IAAAy8H,iBAAgB,EAAK53G,OAAOqmE,iCA5Pf,EA+PnBuhJ,cAAgB,SAAClsN,GAA+B,IAAtBmsN,EAAsB,wDAC9C,EAAK7nN,OAAOia,aAAc,EACrB4tM,IACH,IAAAn8M,gBAEF,EAAK1L,OAAOk0H,4BAA4Bx4H,GAAS,GAAO,GAAO,GAAM,GAChEmsN,IACH,EAAKC,iBACL,IAAA1wI,mBAvQe,EA2QnBusI,gBAAkB,WAChB,EAAK3jN,OAAO2jN,kBACR,EAAKoE,QAAU,EAAKA,OAAOnE,kBAC7B,EAAKmE,OAAOnE,mBAEd,EAAKkE,iBAhRY,EAmRnBnB,SAAW,WACT,EAAKv2H,MAAM9kF,8BAA6B,GACxC,EAAK8kF,MAAMn+E,gBAAgB,cACtBh1B,OAAO2B,SAASC,KAAKI,SAAS,iBACjC,EAAA+3B,YAAYn9B,KAAK,iBAvRF,EA2RnBmuO,SAAW,WAET,GADA,EAAK53H,MAAM7jF,YAAY,EAAK1gB,MAAM6oF,UAC9B,EAAA7zF,WAAa3C,SAASC,SAASo4F,eACjC,EAAK6Z,MAAM9kF,8BAA6B,GACnCruB,OAAO2B,SAASC,KAAKI,SAAS,eACjC,EAAA+3B,YAAYn9B,KAAK,kBAEd,CACL,IAAM0uB,EAAc,EAAKvI,OAAOuZ,cAC7BztB,QAAO,SAAA+/F,GAAA,OAAeA,EAAYopC,mBAClCroI,KAAI,SAACi/F,GAAD,OAAiBA,EAAYlrF,YACpC,EAAKyvF,MAAM9nF,mBAAmBC,GAC9B,EAAK6nF,MAAMnnF,yBAAyBV,EAAY,KAChD,aAAEtrB,QAAQ+pG,QAAQ,UAAYuzB,mBAE5B,EAAA15H,WAAe3C,SAASC,SAAS4b,OAAS7b,SAASC,SAAS4b,MAAQ,GAAO,UAAOnU,0BACpF,EAAKqiO,aAAa,EAAKjoN,OAAOgnN,kBA3Sf,EA+SnBkB,eA/SmB,6BA+SH,gGACV5lG,EAAS,IAAIjmH,gBAAgBpf,OAAO2B,SAASgJ,QAAQhM,IAAI,YAChB,MAA9B0mI,EAAOA,EAAO/oI,OAAS,KACpC+oI,EAASA,EAAOnlI,MAAM,GAAI,KAExBmlI,EALU,kCAMc,IAAA3M,gBAAe2M,GAN7B,UAMN6lG,EANM,OAOZrrO,QAAQ4B,IAAI,qCAAuC4jI,EAAQ6lG,KACvDA,GAAeA,EAAYpvO,MAAQ2T,MAAMC,QAAQw7N,EAAYpvO,KAAK+1H,UAAYq5G,EAAYpvO,KAAK+1H,QAAQv1H,QAR/F,wBASV,EAAKy8G,iBAAmBmyH,EAAYpvO,KAAK+1H,QAAQ,GAAG/1H,KAT1C,WAUJ,IAAAqvO,oBAAmBD,EAAYpvO,MAAM,GAVjC,8CA/SG,EA8TnB+uO,cAAgB,WACd,EAAKhgB,eA/TY,EAkUnBsX,yBAA2B,SAAClzI,GAC1B,EAAKmtB,YAAY+lH,yBAAyBlzI,IAnUzB,EAsUnBu1I,gBAAkB,SAAC/7H,GACjB,EAAK2T,YAAYooH,gBAAgB/7H,IAvUhB,EA0UnB89H,eAAiB,SAAC6E,EAAaC,GACzB,EAAKjvH,aACP,EAAKA,YAAYkvH,kBAAkBF,EAAaC,EAAkB,EAAKtoN,OAAO9P,KAAM,EAAK8P,OAAOkZ,QA5UjF,EAgVnBpF,sBAAwB,SAAC00M,GACvB,EAAKpmD,SAAS,CACZruJ,iCAAqB,EAAKloB,MAAMkoB,gBAAoBy0M,MAlVrC,EAsVnBx9M,iBAAmB,SAACC,GAClB,EAAKm3J,SAAS,CACZn3J,mBAxVe,EA4VnBy2M,oBAAsB,WACpB,EAAKt/C,SAAS,CACZqmD,kBAAkB,KA9VH,EAkWnBC,yBAA2B,SAAC5nN,GAC1B,IAAM6nN,EAA+B,EAAK3oN,OAAO4oN,yBAAyB9nN,GAD/B,EAGN,UAAM7Z,WAAWwO,YAA/CwpF,EAHoC,EAGpCA,WAAYhwE,EAHwB,EAGxBA,eACnB,GAAI05M,EAA6BpvO,SAAW,EAAD,eAAiB,IAAAwlH,uBAAsB9f,EAAYhwE,GAC5F,GAAI,EAAKjP,OAAO4Z,YAAa,CAC3B,IAAMivM,EAAyBF,EAA6B78N,QAAO,SAAA0V,GAAA,OAAYA,EAAQlB,KAAKogB,+BAE5FxlC,QAAQ64I,IAAI80F,EAAuBj8N,KAAI,SAAA4U,GACrC,OAAO,IAAA21E,+BAA8B31E,EAAQlB,MAAM,OACjDqW,MAAK,YACP,aAAE15B,QAAQ+pG,QAAQ,UAAYuzB,0BAE3BouG,EAA6BzlO,SAAQ,SAAAolN,GAC1C,EAAKuP,2BAA2BvP,EAAO,MAAM,YAC3C,aAAErrN,QAAQ+pG,QAAQ,UAAYuzB,qBAC7B,OAlXU,EAuXnBuuG,eAvXmB,6BAuXH,iGACd,UAAM//M,UAAS,IAAAggN,oBAAkB,IACjC,UAAMhgN,UAAS,IAAA49J,kBAAgB,IAFjB,SAGR,EAAKqiD,0BAHG,uBAIR,EAAKC,sCAJG,OAMd,qBACMjzH,EAAmB,EAAKA,kBAAoB,EAAKA,iBAAiBlpG,KAAO,EAAKsjG,MAAM/jF,aAAe,EAAK2pF,iBAAmB,OACrGA,EAAiBkzH,iBACzC11I,YAAW,WAAM,IACR3wE,EAAoB,UAAM5b,WAAWmiL,QAArCvmK,iBACDxb,GAAY,IAAA0uG,gBAAelzF,EAAkBmzF,GAC/C3uG,EAAU9N,QACZ,UAAMwvB,UAAS,IAAAiG,WAAU3nB,MAE1B,MAI4B,IAA/B,EAAK+oG,MAAM+4H,iBACb,EAAK5Q,aAAa,EAAKnoH,MAAMg5H,uBAC7B,EAAKC,yBAELvsO,QAAQ4B,IAAI,cAAe,EAAKshB,QAChC,EAAKA,OAAOia,aAAc,EAC1B,EAAK6tM,gBACA,EAAK13H,MAAM7kF,WAAZ,eAAwC,EAAKvL,OAAOo+L,YAAY7kN,SAClE,IAAA69F,kBAGJ,EAAK6vI,qBACL,EAAK72H,MAAM7pF,qBAAqB,EAAKvG,OAAOzf,iBACxC,EAAK+oO,iBAAmBrsO,OAAO2B,SAASC,KAAKI,SAAS,qBACxDu0F,YAAW,YACT,IAAA+I,WAAU,CAACC,QAAQ,EAAMC,aAAa,IACnC9lE,MAAK,SAAC4yM,GACD,EAAKn5H,MAAMr4E,mBACb,EAAKq4E,MAAMr4E,oBAET96B,OAAO2B,SAASC,KAAKI,SAAS,oBAAsBhC,OAAOoB,QAC7DpB,OAAOoB,OAAO4oC,YAAY,CACxBzB,OAAQ,EAAA0hM,8BAA8BsC,kBACtCD,mBACC,UAGR,GAEL/1I,YAAW,WACJ,EAAKxzE,OAAOyZ,cAAclgC,UAC7B,IAAA69F,kBACA,IAAAm9B,kBAAiB,4BAElB,MACC,EAAA5zH,iBAAqBzC,SAASC,SAAS2b,YAAc,IAAAk/F,qBAAoB,EAAAr2E,mBAAmBC,gBAC3F,EAAK5iB,OAAO4Z,aAAgB17B,SAASC,SAAS4b,OACjD,UAAMgP,UAAS,IAAAk5C,sBAAqB,EAAAzgC,cAAcE,QAxDtC,8CAvXG,EAmbnBsnM,yBAnbmB,6BAmbO,2GAEI,IAAAvf,gBAFJ,UAElB11F,EAFkB,QAIpB,EAAAh1H,mBAAmB,IAAAg4B,0BAAyB,EAAKq5E,MAAMx5F,mBAAoB,MAAM,GAJ7D,iCAKhB,IAAA6yN,2BALgB,wBAMhB,IAAArf,kBAAiBr2F,EAAe,GAAG,GANnB,6CAnbP,EAscnBk1G,qCAtcmB,6BAscmB,8FAChC,EAAAlqO,kBAAmBb,SAASC,SAAS2b,WAAc5b,SAASC,SAASo4F,eADrC,gCAED,UAAQmzI,2BAFP,QAE5BC,EAF4B,SAGRA,EAAmB5wO,OAAS4wO,EAAmB5wO,KAAK6wO,SAAWD,EAAmB5wO,KAAK8wO,YAC/G,UAAM9gN,UAAS,IAAA8nM,2BAA0B,CACvCiZ,6BAA8BH,EAAmB5wO,KAAK6wO,SAAW,IAAI99N,QAAO,SAAAi+N,GAAA,OAAUA,EAAO73G,UAAY63G,EAAO1jM,SAChH2jM,6BAA8BL,EAAmB5wO,KAAK8wO,WAAa,IAAI/9N,QAAO,SAAAm+N,GAAA,OAAYA,EAAS/3G,eANrE,6CAtcnB,EAkdnBm3G,qBAAuB,WACrB,IAAMa,EAAa,UAAMjjO,WAAWkjO,iBAAiBC,gBAC9Cr4N,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACH,EAAKiO,OAAOc,cAAgBopN,GAC9B,EAAKlqN,OAAOc,aAAa5d,SAAS,SAAAke,GAC5BA,EAAWG,UACbH,EAAWG,SAASre,SAAQ,SAACse,GAC3B,GAA8B,SAA1BA,EAAQlB,KAAKK,UACXa,EAAQlB,KAAKmmE,SAAU,CACzB,IAAM4jJ,EAAsB7oN,EAAQlB,KAAKmmE,SAAS71E,MAAK,SAAAzI,GAAA,OAAWA,EAAQwY,WAAaupN,KACnFG,IACF7oN,EAAQlB,KAAK2K,cAAgBo/M,EAC7B7oN,EAAQlB,KAAK+qE,WAAWt5E,IAAoB,WA9dzC,EAwenBk2N,aAAe,SAACjB,GACd,IACkB/tH,KAAKC,MAAMj8G,OAAO67G,aAAaK,QAAQ6tH,KAErD,EAAKlzM,sBAAsB,CACzBuB,SAAS,EACTwlB,QAAS,iCACT+D,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,EAAKlhE,sBAAsB,CAACuB,SAAQ,IACpCp4B,OAAO67G,aAAawxH,WAAWtD,KAEjC,CACA5/M,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,EAAK+xI,qBAIlB,MAAO71N,GAAMpU,QAAQ4B,IAAI,yBAA0BwS,KA7fpC,EAggBnBq5N,oBAAsB,WACpB,OAAQ,EAAKn6H,MAAM7kF,UAAY,EAAK6kF,MAAM3kF,YAAc,EAAK2kF,MAAMolD,4BAC9D,EAAKx1I,OAAOia,cAAgB,EAAKm2E,MAAMwlD,4BAA8B,EAAKxlD,MAAM/pF,iBAC/E,EAAKxa,MAAMkoB,gBAAgBsB,SAjgBjC,EAAKgkF,YAAc,KACnB,EAAK0uH,OAAS,KACd,EAAK/xH,iBAAmB,KACxB,EAAKszH,iBAAkB,EACvB,EAAKz9N,MAAQ,CACXkoB,gBAAiB,CACfsB,SAAS,GAEXq/D,SAAU,UAAKvtE,KACfqjN,YAAY,EACZv/M,cAAe,KACfw9M,kBAAkB,EAClB7hD,cAAc,GAKhB,gBACE,IAAAl7J,gBApBe,E,wFAyBjB,aAAEzuB,QAAQwqG,GAAG,UAAY6yB,cAAex1H,KAAKgjO,gBAC7C,aAAE7qO,QAAQwqG,GAAG,UAAY8yB,iBAAkBz1H,KAAKgjO,gBAChD,aAAE7qO,QAAQwqG,GAAG,UAAYyyB,qBAAsBp1H,KAAKwiO,sB,gDAG5B5jD,GAOxB,GANIA,EAAUn4J,WAAazmB,KAAKsrG,MAAM7kF,WACpCzmB,KAAKgjO,gBACD,EAAAjnO,YAAciE,KAAKsrG,MAAMwlD,4BAA8B9wJ,KAAKsrG,MAAMmlD,wBACpEzwJ,KAAKsrG,MAAMmlD,wBAAuB,KAGjCmuB,EAAUh3J,kBAAoB5nB,KAAKsrG,MAAM1jF,iBAAkB,CAC9D5nB,KAAKgvB,sBAAsB,CAACuB,SAAQ,IACpC,IACEp4B,OAAO67G,aAAawxH,WAAWxlO,KAAKkb,OAAOgnN,iBAC3C,MAAO91N,GAAMpU,QAAQ4B,IAAI,yBAA0BwS,IAEnD,EAAArQ,WAAa6iL,EAAU0mD,iBAAoB1mD,EAAU0mD,kBAAoBtlO,KAAKsrG,MAAMg6H,iBACtFtlO,KAAKukO,yB,8CAKP,aAAEpsO,QAAQ8gO,IAAI,UAAYzjG,cAAex1H,KAAKgjO,gBAC9C,aAAE7qO,QAAQ8gO,IAAI,UAAYxjG,iBAAkBz1H,KAAKgjO,gBACjD,aAAE7qO,QAAQ8gO,IAAI,UAAY7jG,qBAAsBp1H,KAAKwiO,sB,8CAIrD,OAAQrqO,OAAOs0I,mB,2EAwDOynC,EAAcyxD,EAAkB3pN,EAAc2mN,EAAa34M,EAAgB47M,G,iGAC7F,UAAO/kO,aAAezH,SAASC,SAASC,aAC1CtB,QAAQ4B,IAAI,qBAAmBs6K,GAC3BA,GACFl8K,QAAQ4B,IAAI,8BAA4Bs6K,EAAavyF,UAEvD3pF,QAAQ4B,IAAI,yBAAuB+rO,GACnC3tO,QAAQ4B,IAAI,sBAAoBgsO,KAElC,IAAAC,qBAAoB3xD,EAAcl4J,EAAchc,KAAKkb,OAAOzf,gBACxDugB,EAAavnB,QACfuL,KAAK4jO,yBAAyB5nN,GAEhChc,KAAKkb,OAAO+Z,6BACZj1B,KAAKkb,OAAO4qN,oBAAoBH,GAQhC3lO,KAAKkb,OAAOga,qBACRlZ,EAAavnB,SACfuL,KAAKkb,OAAO6qN,wBAAwB/pN,GACpChc,KAAK4jO,yBAAyB5nN,I,GAKR,IAAAo5F,oBAAjBG,E,EAAAA,cAEDymH,EAAU9nD,EAAa9jD,UAAY,GACzCp4H,QAAQ4B,IAAI,UAAWoiO,GAEnB9qH,EAAmB,KACnB0xH,GAAkC,IAElCoD,EAAoBJ,GAAiBh+N,MAAMC,QAAQ+9N,EAAc57G,U,wBAEnEhyH,QAAQ4B,IAAI,kCAAmCgsO,GAC/C5lO,KAAKkxG,iBAAmB00H,EAAc57G,QAAQ,GAAG/1H,KACjD+L,KAAKkxG,iBAAiBkzH,iBAAkB,EACxClzH,EAAmB00H,EAAc57G,QAAQ,GAAG/1H,K,WACtC,IAAAqvO,oBAAmBsC,G,WAE3B5tO,QAAQ4B,IAAI,iBAAkBowB,GAEzBknF,IACHA,EAAmBqE,GAAgB,IAAA9f,wBAAuBumI,EAASzmH,GAAiB,KACpFv9G,QAAQ4B,IAAI,oCAAqCs3G,GACjDl5G,QAAQ4B,IAAI,gBAAiB27G,IAE1BrE,IACHA,EAAmB8qH,EAAQlwN,MAAK,SAAAuoF,GAAA,OAAUA,EAAO6c,oBACjDl5G,QAAQ4B,IAAI,mCAAoCs3G,IAE5C+0H,EAAY7sO,SAASC,SAAS4b,OAAS7b,SAASC,SAAS4b,MAAQ,EACvEjd,QAAQ4B,IAAI,YAAaqsO,GAEnBn1G,EAAY,UAAM3uH,WAAW2S,UAAUg8G,UAC7C94H,QAAQ4B,IAAI,YAAak3H,IAErBm1G,IAAan1G,E,mCAEW,IAAAD,gBAAez3H,SAASC,SAAS4b,MAAO67G,G,aAA5DuyG,E,UACaA,EAAYpvO,MAASovO,EAAYpvO,KAAKgE,M,wBACnD2P,MAAMC,QAAQw7N,EAAYpvO,KAAK+1H,UAAYq5G,EAAYpvO,KAAK+1H,QAAQv1H,SACtEuL,KAAKkxG,iBAAmBmyH,EAAYpvO,KAAK+1H,QAAQ,GAAG/1H,KAChD+L,KAAKkxG,kBAAoBlxG,KAAKkxG,iBAAiBg1H,iBACjDlmO,KAAKkxG,iBAAiBkzH,iBAAkB,I,WAGtC,IAAAd,oBAAmBD,EAAYpvO,M,YACjCi9G,KAAoB,IAAAi1H,mBAAkB9C,EAAYpvO,M,kCAC9C+L,KAAK0iO,eAAexxH,EAAkByxH,G,0BACtC,IAAA94G,oBAAmB,G,oCAElB3Y,E,kCACHlxG,KAAK0iO,eAAexxH,EAAkByxH,G,eAE1C,EAAA5mO,WAAc3C,SAASC,SAASo4F,gBAC7Bt5F,OAAO2B,SAASC,KAAKI,SAAS,OAAUhC,OAAO2B,SAASC,KAAKgE,MAAM,MAAM,GAAGtJ,SAC7EuL,KAAKsrG,MAAMx5F,mBAAmBsf,SAChCpxB,KAAK6hO,YAEL7hO,KAAKsrG,MAAM9kF,8BAA6B,GACnCruB,OAAO2B,SAASC,KAAKI,SAAS,eACjC,EAAA+3B,YAAYn9B,KAAK,gB,mBAIhB,G,YACEm8G,E,oBACJ80H,E,kCACGhmO,KAAK0iO,eAAexxH,EAAkByxH,EAAaC,G,YAGvD1xH,EAAiBs4C,a,oBACnBxpJ,KAAKwkO,iBAAkB,EAClBx6M,E,wBACHhyB,QAAQskC,KAAR,yBAAsC40E,EAAiBs4C,aAAvD,+D,2BAGEt4C,EAAiBs4C,eAAiB,EAAA48E,qBAAqB3uI,UACzD/I,YAAW,YAAO,aAAE,iCAAiCwT,QAAQ,WAAW,GAC/D,CACT,EAAAkkI,qBAAqBC,cACrB,EAAAD,qBAAqBE,eACrB,EAAAF,qBAAqBG,cAActmO,MAAK,SAAAygC,GAAA,OAAUwwE,EAAiBs4C,eAAiB9oH,MACpFguD,YAAW,WAAM,IACR1tD,EAAY,UAAM7+B,WAAWmH,YAA7B03B,UACP,IAAAm2D,mBAAkB+Z,EAAiBs4C,aAAcxoH,KAChD,G,2HAjPJi+I,aAAe,CACpBunD,kBAAkB,EAClBC,cAAc,G,EAGTvkF,UAAY,CACjBl5H,gBAAiB,UAAU+1J,KAC3Bx8K,UAAW,UAAU8T,MACrBmwN,iBAAkB,UAAUpkF,KAC5BqkF,aAAc,UAAUrkF,KACxBp4H,eAAgB,UAAUo4H,KAC1BhtI,uBAAwB,UAAUgtI,KAClCskF,wBAAyB,UAAU3nD,KACnC9pK,MAAO,UAAU2jG,OACjBkoH,UAAW,UAAUzqN,O,aAhBJ2rN,G,kICxCrB,M,IACA,OACA,O,IACA,MACA,OAEA,S,uDAUM2E,G,gBAMJ,WAAYr7H,IAAO,gGACXA,IADW,SAUnBs7H,kBAAoB,WAClB,IAAI9xC,EAAW,EAAKxpF,MAAMslD,uBACtBx3J,SAASC,SAASo4F,iBAAmB,EAAK6Z,MAAMslD,wBAClD,EAAKtlD,MAAMqlD,0BAA0B,GACrCmkC,EAAW,GACW,IAAbA,GAAmB,EAAKxpF,MAAM7qG,WACvC,EAAK6qG,MAAMqlD,0BAA0B,GACrCmkC,EAAW,GAEI,IAAbA,EACE,EAAKxpF,MAAMx5F,mBAAmBgwN,gBAChC,aAAE,iCAAiCp2B,OAAO,KAC1C,EAAKm7B,iBAAiB/xC,IAEtB,EAAKgyC,cAAa,KAGpB,aAAE,iCAAiCp7B,OAAO,KAC1C,EAAKm7B,iBAAiB/xC,KA5BP,EAgCnB+xC,iBAAmB,WAAkD,IAAjD/xC,EAAiD,uDAAtC,EAAKxpF,MAAMslD,uBACxC,OAAQkkC,GACN,KAAK,EACH,EAAKiyC,uBAAuB,6CAC5B,MAEF,KAAK,EACC,EAAKz7H,MAAM7qG,SACb,EAAKsmO,uBAAuB,qCAAsC,IAElE,aAAE,cAAcv5I,QAAQ,CAACy5E,UAAW,GAAI,KAAK,WAC3C,IAAM+/D,EAAqB,EAAKC,iCAC5BD,EAAmBE,UACrB,EAAKC,4BAA4BH,EAAmBE,WAEtD,aAAE,kBAAkBx7B,OAAO,QAG/B,MAEF,KAAK,EAOH,EAAKq7B,uBAAuB,uCA3Df,EAmEnBA,uBAAyB,SAACG,GAAqD,IAA3CjgE,EAA2C,uDAA/B7tK,SAAS6C,KAAKshL,cAC5D,aAAE,cAAc/vF,QAAQ,CAACy5E,aAAY,KAAK,WACxC,EAAKkgE,4BAA4BD,IACjC,aAAE,wCAAwCx7B,OAAO,KAAK,WAChD,EAAKpgG,MAAM7qG,UACbiuF,YAAW,WACT,EAAKy4I,4BAA4BD,KAChC,YA1EQ,EAgFnBE,oBAAsB,WACpB,IAAMtyC,EAAW,EAAKxpF,MAAMslD,uBAAyB,EAErD,OADA,EAAKtlD,MAAMqlD,0BAA0BmkC,GAC7BA,GACN,KAAK,EACH,EAAKgyC,eACL,MACF,KAAK,EACC,EAAKx7H,MAAM7qG,SACbiuF,YAAW,WACT,EAAKy4I,4BAA4B,gCAChC,KAEH,EAAKL,eAEP,MAEF,KAAK,EACC,EAAKx7H,MAAM7qG,SACb,EAAK0mO,4BAA4B,qCAEjC,EAAKL,cAAa,KArGP,EA4GnBA,aAAe,SAACO,IACd,aAAE,iCAAiCx7B,QAAQ,KAAK,WAE9C,GADA,EAAKvgG,MAAMmlD,wBAAuB,GAC9B42E,EAAS,CACX,EAAK/7H,MAAM6kD,8BAA6B,GACxC,EAAK7kD,MAAMulD,+BAA8B,GACzC,IACE14J,OAAO67G,aAAaC,QAAQ,+BAA+B,GAC3D97G,OAAO67G,aAAaC,QAAQ,gCAAgC,GAC5D,MAAO7nG,GAAMpU,QAAQ4B,IAAI,yBAA0BwS,SArHxC,EA0HnBk7N,mBAAqB,WACnB,OAAQ,EAAKh8H,MAAMslD,wBACjB,KAAK,EACH,OACE,kCAAQhmE,UAAU,2CAA2CkyF,QAAS,EAAKsqD,qBACzE,gCAAMx8I,UAAU,qBACd,4CAAkB5iF,GAAG,kBAK7B,KAAK,EACH,OAAI,EAAKsjG,MAAM7qG,SAEX,kCAAQmqF,UAAU,oCAAoCkyF,QAAS,EAAKsqD,qBAClE,gCAAMx8I,UAAU,qBACd,4CAAkB5iF,GAAG,8BAKtB,EAAKi/N,iCAAiCM,gBAE/C,KAAK,EACH,OAAQ,EAAKj8H,MAAM7qG,SACjB,kCAAQmqF,UAAU,oCACVkyF,QAAS,EAAKsqD,qBACpB,gCAAMx8I,UAAU,qBACd,4CAAkB5iF,GAAG,kCAGvB,KAEN,KAAK,EACH,OACE,kCAAQ4iF,UAAW,mCAAoCkyF,QAAS,kBAAM,EAAKgqD,cAAa,KACtF,gCAAMl8I,UAAU,qBACd,4CAAkB5iF,GAAG,yBAK7B,QACE,OAAO,OArKM,EAyKnBi/N,+BAAiC,WAE/B,OAD2B7tO,SAASg9F,cAAc,yBAEzC,CACL8wI,SAAU,2CACVK,gBACE,+BAAK38I,UAAU,uBAAuBkyF,QAAS,EAAKsqD,qBAClD,gCAAMx8I,UAAU,YACd,4CAAkB5iF,GAAG,6BAI3Bw/N,cAAe,cAGOpuO,SAASg9F,cAAc,wBAExC,CACL8wI,SAAU,0CACVK,gBACE,+BAAK38I,UAAU,sBAAsBkyF,QAAS,EAAKsqD,qBACjD,gCAAMx8I,UAAU,YACd,4CAAkB5iF,GAAG,4BAI3Bw/N,cAAe,aAGZ,CACLN,SAAU,GACVM,cAAe,KACfD,gBAAiB,OAvMnB,EAAKxgO,MAAQ,CACX0gO,WAAY,CACV31L,KAAM,EACN5sC,IAAK,IALQ,E,yEA6MV,WACDuiO,EAAaznO,KAAK+G,MAAM0gO,WACxBC,EAAS1nO,KAAKsrG,MAAM7qG,SAAY,SAAW,UAC3CknO,EAAkB3nO,KAAKsnO,qBACvBM,EAAqD,IAAtC5nO,KAAKsrG,MAAMslD,wBAAkC5wJ,KAAKsrG,MAAM7qG,UAChB,cAAxDT,KAAKinO,iCAAiCO,cADxB,4BAGaE,EAHb,QAG0B1nO,KAAKsrG,MAAMslD,uBAHrC,4BAEa82E,EAFb,QAE0B1nO,KAAKsrG,MAAMslD,uBAFrC,IAIbi3E,IAAmD,IAAtC7nO,KAAKsrG,MAAMslD,yBAAiC5wJ,KAAKsrG,MAAM7qG,UACpEqnO,EAAiB9nO,KAAKsrG,MAAMslD,uBAAyB,GAAKi3E,EAChE,OACE,+BAAKj9I,UAAW,iDACd,+BAAKA,UAAW,YACd,+BAAKA,UAAU,iBACb,6BAAGA,UAAU,uBACVi9I,EAAW,4CAAkB7/N,GAAI4/N,IAAgB,MAEpD,+BAAKh9I,UAAU,0BACZi9I,EACC,kCAAQj9I,UAAU,+CACVkyF,QAAS,kBAAM,EAAKgqD,cAAa,IAAO9+N,GAAG,kBACjD,4CAAkBA,GAAG,iDAErB,KACH8/N,EACC,kCAAQl9I,UAAU,iEACVkyF,QAAS98K,KAAKonO,oBAAqBp/N,GAAG,iBAC5C,4CAAkBA,GAAG,yCAErB,OAGR,gCAAM4iF,UAAU,iDAAiDv2E,MAAO,CACtE,UAAa,aAAaozN,EAAW31L,KAAM,OAAO21L,EAAWviO,IAAK,SAEnEyiO,EACC,+BAAK/8I,UAAW,gCAAkC5qF,KAAKsrG,MAAMslD,uBAAwBv8I,MAAO,CAC1Fy9B,KAAM21L,EAAW31L,KACjB5sC,IAAKuiO,EAAWviO,MAEfyiO,GAED,W,KAjQd,Q,WAMSzlF,UAAY,CACjBzhJ,SAAU,UAAU2hJ,KAAKnpC,Y,cA2Qd,IAAAnN,UATS,SAACxzG,GAAU,IAC1BoP,EAAYpP,EAAMqN,gBAAlB+B,SACP,MAAO,CACLiZ,YAAaroB,EAAMgR,YAAYqX,YAC/BiwI,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5C9+I,mBAAoBpK,KAIgB,CACtCqoJ,8CACAI,4DACAM,gDACAI,8DACAF,uDALa,CAMZg2E,I,8ECpSH,I,EAAA,O,oCACA,OACA,O,WAoBe,IAAA76H,UANS,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAIX,EAlBG,SAAC2lG,GAAU,IAEpBnzF,EAAkBmzF,EAAlBnzF,eACD6vN,EAAO,IAAIxlN,KAEjB,OACE,+BAAKooE,UAAW,aAAezyE,EAAeknI,iBAAmB,0BAA4B,KAC3F,gDAAsBr3I,GAAG,YAAYmO,OAAQ,CAAC8xN,KAAMD,EAAKE,sB,gRCX/D,S,IACA,S,IAEA,MACY1nN,E,wJAAZ,OACA,QACA,QACA,QACA,QACA,S,mDAEA,IAGa,EAiEA,EA2BA,EAuDA,EAQA,EA9JT2nN,EAAY,GACZC,EAAgB,GAEPx5G,EAAoBA,EAApBA,mBAAA,gCAAoB,WAAOy5G,EAA6BC,EAAqBtmI,EAAUumI,GAAnE,8GAG4C,UAAMpmO,WAD1E2S,EAFwB,EAExBA,UAAWxL,EAFa,EAEbA,YAAa3D,EAFA,EAEAA,gBAAiBvD,EAFjB,EAEiBA,UAAW8K,EAF5B,EAE4BA,YAAatC,EAFzC,EAEyCA,oBACtEmK,EAH6B,EAG7BA,YAAayzN,EAHgB,EAGhBA,iBAAkB73N,EAHF,EAGEA,YAAahH,EAHf,EAGeA,cAAe+/G,EAH9B,EAG8BA,WAEtDiD,EAAsD67G,EAAtD77G,yBAA0BC,EAA4B47G,EAA5B57G,yBALF,KAOnBu7G,EAPmB,sCAOA,IAAAz2I,wBAAsB,IAAAyrD,mBAAkBx3I,IAPxC,6BAO/BwiO,EAP+B,KAQ3BM,EAAsB,IACtB9iO,EAAgB+iO,kBAAmB/iO,EAAgB+iO,gBAAgBC,8BATxC,kCAUDC,EAAsBxmO,EAAUG,UAAWoO,GAV1C,QAU7B83N,EAV6B,yCAaxB,IAAAI,MAAI,aAAc,CACvB1wN,eAAgBxS,EAChB5E,SAAU+T,EAAU/T,SACpB+X,OAAQ5L,EAAY4L,OACpBvW,UAAWH,EAAUG,UACrBqI,sBACA+hH,yBAA0B07G,GAA+B17G,EACzD0B,iBAAkBi6G,GAAuB17G,EACzC10G,OAAQ5O,EAAY2kH,SACpBj4G,aAAcjB,EAAYiB,aAC1BhS,YAAasF,EAAYtF,YACzBiR,MAAO3L,EAAY2L,MACnBkzN,YACAx3N,cACAhH,gBACA8+N,sBACA/+G,aACA1nB,WACAumI,qBA/B6B,mDAApB,mDAiEAO,EAAyBA,EAAzBA,wBAAA,gCAAyB,WAAOC,GAAP,yFAE9BvvB,EAAgB,IAAIpjN,QAAJ,+CAAY,WAAOC,GAAP,sFACxB2rG,EAAW,SAACgnI,GAEhB,IAAMC,EAAgBD,EAAWA,EAASE,yBAA2B,KAC/DtiB,EAAeqiB,GAAiBA,EAAczoF,SAAWyoF,EAAczoF,SAAS/rJ,OAAS,EACzF26H,EAAa/3G,IAAI24E,gBAAgBg5I,EAASn5I,MAEhDx5F,EAAQ,CAAC+4H,aAAY65G,gBAAeriB,kBAPR,SASJh4F,EAAkB,KAAM,KAAM5sB,GAAU,GATpC,cASxB+sB,EATwB,gBAUxBA,EAAYD,SAVY,kDAAZ,wDAYhBi6G,EAd8B,yCAezBvvB,EAAc3nL,MAAK,SAAAswE,GAAA,OAAYA,MAfN,gCAiB3B,GAjB2B,mCAmBlCnqG,QAAQ4B,IAAI,8BAAZ,OACImvO,EApB8B,0CAqBzB,CAAC35G,WAAY,GAAIw3F,aAAc,IArBN,iCAuB3B,GAvB2B,2DAAzB,6CA2BAgiB,EAAwBA,EAAxBA,uBAAA,gCAAwB,WAAOrmO,EAAWoO,GAAlB,mHAC/B83N,EAAsB,GADS,8BAEZlmO,EAFY,yEAExB6D,EAFwB,iBAIzBvC,GAAe,IAAAT,qBAAoBgD,EAASC,YAAa,EAAAoqE,gBAAgBC,OAJhD,WAKU,IAAAghB,uBAAsB7tF,GALhC,WAK/B4kO,EAAoBriO,EAAS4B,IALE,OAM1BygO,EAAoBriO,EAAS4B,IANH,oBAOxBogO,EAPwB,mCAQL,IAAA12I,uBAAA,kDARK,QAQ3B02I,EAR2B,eAU7BK,EAAoBriO,EAAS4B,IAAMogO,EAVN,0DAa/BK,EAAoBriO,EAAS4B,IAA7B,iDAb+B,uSAgBd2I,EAAY0Z,iBAhBE,oEAgBxB45E,EAhBwB,uCAiBfvvG,OAAOmc,KAAKozF,EAAOnzF,sBAjBJ,sEAiBtBtZ,EAjBsB,SAkB3BysG,EAAOnzF,qBAAqBtZ,GAAKkzB,aAC/Bu5E,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY8vE,WAAa,EAAAkhB,mBAAmBuG,SAC9Ehe,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAYq6F,eApBnB,6CAsBkD,IAAArzB,uBAAA,6BAC9CiF,mBAAmBsN,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAYq6F,iBAvBpE,WAsB3B0jH,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IAtBtC,OAyBtBygO,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IAzB3C,mCA0BoD,IAAA0pF,uBAAA,8BAC7CuS,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAYq6F,gBA3BpD,QA0BzB0jH,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IA1BxC,kBA8BtBygO,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IA9B3C,mCA+BoD,IAAA0pF,uBAC3EuS,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAYq6F,gBAhCtB,QA+BzB0jH,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IA/BxC,kBAmCtBygO,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IAnC3C,mCAoCoD,IAAA0pF,uBAC3EuS,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAYq6F,eAAiB,0BArCvC,QAoCzB0jH,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IApCxC,kBAwCtBygO,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IAxC3C,oBAyCpBogO,EAzCoB,mCA0CD,IAAA12I,uBAAA,kDA1CC,QA0CvB02I,EA1CuB,eA4CzBK,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IAAMogO,EA5C9C,2DA+C3BK,EAAoBxkI,EAAOnzF,qBAAqBtZ,GAAKkzB,YAAY1iB,IAAjE,iDA/C2B,qjBAoD5BygO,GApD4B,yJAAxB,+CAuD0B9D,EAA1BA,yBAAA,gCAA0B,qGACX,UAAMxiO,WAAzBwD,EAD8B,EAC9BA,gBAD8B,UAEf,IAAA+rF,uBAAA,kDAFe,cAErC02I,EAFqC,iBAGnB,IAAA12I,wBAAsB,IAAAyrD,mBAAkBx3I,IAHrB,cAGrCwiO,EAHqC,gBAI/BW,GAAuB,GAJQ,iCAK9B,GAL8B,mDAA1B,4CAQeK,EAAfA,cAAA,gCAAe,8GACDv6G,IADC,cACpBC,EADoB,gBAEJA,EAAWC,SAFP,OAEpBJ,EAFoB,OAGpB06G,EAAU/xN,IAAI24E,gBAAgB0+B,GACpCv2H,OAAO6+F,KAAKoyI,EAAS,UAJK,kDAAf,4CAOgB75G,EAAhBA,cAAgB,SAACH,GAAD,MAAiB,CAC5ChkH,KAAMoV,EAAM8tD,gBACZztD,QAAS,CAACuuG,gBAGuBi6G,EAAtBA,oBAAsB,SAAC1+G,GAAD,MAAuB,CACxDv/G,KAAMoV,EAAM+tD,sBACZ1tD,QAAS,CAAC8pG,uB,iNCtLZ,IAAYnqG,E,wJAAZ,OAE8B8oN,EAAjBA,eAAiB,SAAC7yO,EAAMS,GAAP,MAAkB,CAC9CkU,KAAMoV,EAAMsvD,iBACZjvD,QAAS,CAACpqB,OAAMS,WAGSqyO,EAAdA,YAAc,SAAC9yO,EAAMS,GAAP,MAAkB,CAC3CkU,KAAMoV,EAAMuvD,cACZlvD,QAAS,CAACpqB,OAAMS,WAGWsyO,EAAhBA,cAAgB,SAACC,GAAD,MAAiB,CAC5Cr+N,KAAMoV,EAAMwvD,gBACZnvD,QAAS,CAAC4oN,gBAGqBC,EAApBA,kBAAoB,SAACC,GAAD,MAAqB,CACpDv+N,KAAMoV,EAAMyvD,oBACZpvD,QAAS,CAAC8oN,oBAGmBC,EAAlBA,gBAAkB,SAACnzO,EAAMS,GAAP,MAAkB,CAC/CkU,KAAMoV,EAAM0vD,kBACZrvD,QAAS,CAACpqB,OAAMS,WAGY2yO,EAAjBA,eAAiB,SAACpzO,EAAMS,GAAP,MAAkB,CAC9CkU,KAAMoV,EAAM2vD,iBACZtvD,QAAS,CAACpqB,OAAMS,WAGgB4yO,EAArBA,mBAAqB,SAACC,GAAD,MAAiB,CACjD3+N,KAAMoV,EAAM4vD,qBACZvvD,QAASkpN,K,2HCnCX,SACA,Q,IACA,Q,IAEA,O,IACA,O,IACA,OACA,QAOA,S,OACA,QACA,Q,IACA,QACA,S,uDAEqBC,G,aAiCnB,WAAY9yO,EAAOowD,EAAKk2E,GAAkE,IAA1DjkI,EAA0D,iEAAtCw3B,EAAsC,uDAA3Bvf,WAAYy4N,IAAe,4FACxFjqO,KAAK9I,MAAQA,EACbxC,OAAO+2B,OAAOzrB,KAAKsnD,IAAKA,GACxB5yD,OAAO+2B,OAAOzrB,KAAKw9H,OAAQA,GAC3Bx9H,KAAKzG,OAASA,EACdyG,KAAK+wB,SAAWA,EAChB/wB,KAAKgI,IAAK,UAENiiO,GACFjqO,KAAKkqO,qB,yDAIP,OAAOlqO,KAAKzG,S,2CAQZ,UAAakgE,SACX,UAAaC,OAAOM,OACpBh6D,KAAKi6D,OAAOxiE,KAAKuI,MACjBA,KACAA,KAAKw9H,OAAOE,gBAEd,UAAajkE,SACX,UAAaC,OAAOC,WACpB35D,KAAK2oD,YACL3oD,KACAA,KAAKw9H,OAAOE,gBAEd,UAAajkE,SACX,UAAaC,OAAOI,WACpB95D,KAAKmoD,YACLnoD,KACAA,KAAKw9H,OAAOE,gBAEd,UAAajkE,SACX,UAAaC,OAAOK,SACpB/5D,KAAKwoD,UACLxoD,KACAA,KAAKw9H,OAAOE,gBAEd,UAAajkE,SACX,UAAaC,OAAOglC,YACpB1+F,KAAKghG,aACLhhG,KACA,UAAa45D,WAAWojC,W,gCAK1Bh9F,KAAK+3D,qB,mCAIA/3D,KAAK+G,MAAMimD,WACdhtD,KAAK+3D,mBACL/3D,KAAK+G,MAAMimD,UAAW,K,qCAKpBhtD,KAAK+G,MAAMimD,WACbhtD,KAAKkqO,qBACLlqO,KAAK+G,MAAMimD,UAAW,K,yCAKxB,UAAa42C,YAAY5jG,Q,qCAIzBA,KAAKkqO,uB,kCA3DL,OAAOlqO,KAAKsnD,IAAIuuB,gB,kCAjDlB7tE,GAAK,K,KACLw1H,OAAS,CACP2sG,UAAW,UAAa,UAAWnmO,aAAa6wH,QAChDu1G,WAAY,WACZC,WAAY,GACZ1uG,UAAU,EACV2uG,YAAa,GACbC,aAAc,GACd7uG,yBAAyB,EACzBgC,eAAgB,UAAa9jE,WAAW8jC,S,KAE1CxmG,MAAQ,E,KACR65B,SAAW,K,KACXu2B,IAAM,CACJltC,EAAG,EACHC,EAAG,EACHmhH,QAAS,EACTD,QAAS,EACT/mF,MAAO,EACPqhC,YAAa,EAAAugD,WAAWC,KACxBoF,cAAe,CACbL,UAAW,KACXC,QAAS,O,KAGbt0H,MAAQ,CACNmyJ,WAAW,EACXpyG,WAAW,EACXC,kBAAmB,KACnBiG,UAAU,G,KAkFZrE,YAAc,SAACP,EAAUjyD,GAIvB,GAFA,EAAK4Q,MAAMmyJ,UAAY,EAAKsxE,gBAAgBpiL,IAExC,EAAKrhD,MAAMmyJ,UAMb,OADA,UAAajwG,YAAY,IAClB,EALP,UAAaX,cAEb,UAAaC,UAAW,CAAC,EAAA6tE,WAAWE,KAAM,EAAAF,WAAWC,MAAMl8H,SAAS,EAAKmtD,IAAIuuB,aAAgB,OAAS,gBAAiB,I,KAO3H20J,gBAAkB,SAACpiL,GACjB,OAAO,IAAAk8G,aAAY,EAAKmmE,oBAAqBriL,I,KAG/CqiL,kBAAoB,WAClB,IAAMC,EAAQ,UAAatqI,SAASuqI,YAAY,EAAKntG,OAAO8sG,YAAc,EAAKpzO,MAAQ,EAAKsmI,OAAO+sG,cAD3E,EAET,EAAK90D,SAAbr7J,EAFiB,EAEjBA,EAAGC,EAFc,EAEdA,EAENisJ,EAAc,GAoBlB,MAlBI,CAAC,EAAAlwC,WAAWE,KAAM,EAAAF,WAAWC,MAAMl8H,SAAS,EAAKmtD,IAAIuuB,aACvDywF,EAAc,CACZ,CAAClsJ,EAAIhQ,KAAKyC,OAAO69N,EAAM/qO,OAAO,GAAK,EAAG0a,EAAI,EAAKmjH,OAAO6sG,WAAa,GACnE,CAACjwN,EAAIhQ,KAAKyC,OAAO69N,EAAM/qO,OAAO,GAAK,EAAG0a,EAAI,EAAKmjH,OAAO6sG,WAAa,GACnE,CAACjwN,EAAIhQ,KAAKyC,OAAO69N,EAAM/qO,OAAO,GAAK,EAAG0a,EAAI,EAAKmjH,OAAO6sG,WAAa,GACnE,CAACjwN,EAAIhQ,KAAKyC,OAAO69N,EAAM/qO,OAAO,GAAK,EAAG0a,EAAI,EAAKmjH,OAAO6sG,WAAa,IAE5D,CAAC,EAAAj0G,WAAWG,MAAO,EAAAH,WAAWI,OAAOr8H,SAAS,EAAKmtD,IAAIuuB,eAChEywF,EAAc,CACZ,CAAClsJ,EAAI,EAAKojH,OAAO6sG,WAAa,EAAGhwN,EAAIjQ,KAAKyC,OAAO69N,EAAM/qO,OAAO,GAAK,GACnE,CAACya,EAAI,EAAKojH,OAAO6sG,WAAa,EAAGhwN,EAAIjQ,KAAKyC,OAAO69N,EAAM/qO,OAAO,GAAK,GACnE,CAACya,EAAI,EAAKojH,OAAO6sG,WAAa,EAAGhwN,EAAIjQ,KAAKyC,OAAO69N,EAAM/qO,OAAO,GAAK,GACnE,CAACya,EAAI,EAAKojH,OAAO6sG,WAAa,EAAGhwN,EAAIjQ,KAAKyC,OAAO69N,EAAM/qO,OAAO,GAAK,KAMhE2mK,G,KAGT99G,UAAY,SAACJ,EAAUjyD,GAGjB,EAAK4Q,MAAM+/C,YACb,EAAK//C,MAAM+/C,WAAY,EACvB,EAAK//C,MAAMggD,kBAAoB,O,KAInCoB,YAAc,SAACC,EAAUjyD,GAGvB,GAAI,EAAK4Q,MAAMmyJ,YAAc9/J,SAASg9F,cAAc,eAAgB,CAClEj+F,OAAOkwD,kBAAmB,EAC1B,UAAaC,cAEb,IAAMu/F,EAAY,EAAKtuJ,OAAOqxO,aAAe,EAAKrxO,OAAOqxO,eAAiB,IAAO,UAAW5nL,uBACtFsE,EAAM,EAAKmuH,SACXo1D,EAAe,EAAKrtG,OAAO7B,UACF,WAA3B,UAAW/uH,aACT,IAAAmrE,yBAAwB,EAAK7gF,OAAOq7D,YAEtC,EAAKr7D,MAEH4zO,GAAe,IAAAC,uBAAsB,CACzCrvM,SAAU4rB,EACVujL,aAAcA,EAAa/yN,WAC3B8iH,IAAK,EACLC,IAAKgtB,EACLhyE,YAAa,CAAC,EAAAugD,WAAWE,KAAM,EAAAF,WAAWC,MAAMl8H,SAAS,EAAKmtD,IAAIuuB,aAAe,aAAe,WAChGigJ,SAAU,EAAKkV,cACfC,QAAS,WACP9yO,OAAOkwD,kBAAmB,EAC1B,EAAKthD,MAAMmyJ,WAAY,GAEzB32C,KAAM,IAGRnpH,SAASg9F,cAAc,mBAAmBj0C,YAAY2oL,GAExCA,EAAa10I,cAAc,qBACnCgxE,QAGR,OAAO,G,KAGT4jE,cAAgB,SAAC9zO,GACf,IAAMg0O,EAAoB,EAAKh0O,MAC/B,EAAKA,MAAQA,EACb,EAAK65B,SAAS75B,EAAO,EAAMg0O,I,KAG7BlqI,aAAe,WACb,EAAKj6F,MAAMokO,iBAAkB,EAC7B,EAAKpkO,MAAM+/C,WAAY,EACvB,EAAK//C,MAAMqkO,aAAe,KAC1B,EAAKrkO,MAAMskO,mBAAoB,G,KAGjCC,SAAW,SAACp0O,GACV,EAAKA,MAAQA,G,KAGf6xD,OAAS,SAACzB,GACR,EAAKA,IAAIltC,EAAIktC,EAAIltC,EACjB,EAAKktC,IAAIjtC,EAAIitC,EAAIjtC,G,KAGnBkxN,SAAW,SAAC/2L,GACV,EAAK8S,IAAI9S,MAAQA,G,KAGnBg3L,iBAAmB,SAACpwG,EAAWC,GAC7B,EAAK/zE,IAAIm0E,cAAcL,UAAYA,EACnC,EAAK9zE,IAAIm0E,cAAcJ,QAAUA,G,KAGnCo6C,OAAS,WACP,IAAMg2D,EAAe,EAAKlyO,OAAOqxD,YAAc,EAAKrxD,OAAOqxD,YAAc,CAAExwC,EAAG,EAAGC,EAAG,GAC9E0nC,EAAQ,UAAEgJ,MAAM,UAAWhJ,OAC7BvN,EAAQ,EAAK8S,IAAI9S,MAGjB,EAAK8S,IAAIm0E,cAAcL,YACzB5mF,GAAQ,IAAA+oC,0BAAyB,EAAKj2B,IAAIm0E,cAAcL,UAAW,EAAK9zE,IAAIm0E,cAAcJ,UAG5F,IAAMqwG,EAAWl3L,GAASpqC,KAAKqnE,GAAK,KAG9Bk6J,EAAoB,EAAKrkL,IAAIk0E,QAAUpxH,KAAKsnE,IAAIg6J,GAAY,EAAKpkL,IAAIi0E,QAAUnxH,KAAKunE,IAAI+5J,GACxFE,EAAoB,EAAKtkL,IAAIk0E,QAAUpxH,KAAKunE,IAAI+5J,GAAY,EAAKpkL,IAAIi0E,QAAUnxH,KAAKsnE,IAAIg6J,GAE9F,MAAO,CACLtxN,EAAG,EAAKktC,IAAIltC,EAAI2nC,EAAQ4pL,EAAoBF,EAAarxN,EACzDC,EAAG,EAAKitC,IAAIjtC,EAAI0nC,EAAQ6pL,EAAoBH,EAAapxN,I,KAI7DwxN,SAAW,SAACC,GAAmC,IAAzBC,EAAyB,wDACzC70O,EAAQ,EAAKA,MAYjB,OAXI,EAAKsmI,OAAO7B,SACdzkI,EAAmC,WAA3B,UAAW0V,aACf,IAAAqsE,uBAAsB/hF,IACtB,IAAA4hF,kBAAiB5hF,GACZ40O,IACT50O,EAAQA,EAAM4gB,YAEZi0N,IACF70O,EAAQ,EAAKsmI,OAAO8sG,YAAcpzO,EAAM4gB,WAAa,EAAK0lH,OAAO+sG,cAG5DrzO,G,KAGT80O,kBAAoB,WACd,EAAK1kL,IAAIm0E,cAAcL,YACzB,EAAK9zE,IAAIuuB,aAAc,IAAAynD,kBAAiB,EAAKh2E,IAAIm0E,cAAcL,UAAW,EAAK9zE,IAAIm0E,cAAcJ,SAAS,K,KAI9G4wG,4BAA8B,WAC5B,GAAI,EAAK3kL,IAAIm0E,cAAcL,UAAW,CACpC,IAAM8wG,GAAqB,IAAAl6J,aAAY,EAAK1qB,IAAIm0E,cAAcL,UAAW,EAAK9zE,IAAIm0E,cAAcJ,SAEhG,EAAK/zE,IAAIltC,EAAI8xN,EAAmB9xN,EAChC,EAAKktC,IAAIjtC,EAAI6xN,EAAmB7xN,I,KAIpC4/C,OAAS,SAACtW,IACH,IAAA5M,qCAAqC,IAAAinC,8BAA6B,IAClD,IAAf,EAAK12B,IAAIltC,GAA0B,IAAf,EAAKktC,IAAIjtC,IAKnC,EAAK2xN,oBACL,EAAKC,8BACD,EAAKzuG,OAAO9B,yBACd,EAAKywG,kBAAkBxoL,GAEzB,EAAKyoL,WAAWzoL,K,KAGlBwoL,kBAAoB,SAACxoL,GACnBA,EAAI+W,YACJ,IAAMpT,EAAM,EAAKmuH,SACXv+K,EAAQ,EAAK20O,UAAS,GAAM,GAC5BnB,EAAQ/mL,EAAIgnL,YAAYzzO,GAC1Bs9C,EAAQ,EACR,EAAK8S,IAAIm0E,cAAcL,YACzB5mF,GAAQ,IAAA+oC,0BAAyB,EAAKj2B,IAAIm0E,cAAcL,UAAW,EAAK9zE,IAAIm0E,cAAcJ,SAEtF,CAAC,EAAAjF,WAAWpgD,UAAW,EAAAogD,WAAWjgD,WAAWh8E,SAAS,EAAKmtD,IAAIuuB,eACjErhC,GAAS,MAIbmP,EAAIkX,YAAc,UAAa,UAAW72D,aAAa6wH,QACvDlxE,EAAI6W,UAAY,EAChB7W,EAAIwuG,UAAY,EAAAnD,MAAMrjD,MAEtBhoD,EAAIyuG,OACJzuG,EAAI0oL,UACF/kL,EAAIltC,EACJktC,EAAIjtC,GAENspC,EAAIpQ,OAAOiB,GAASpqC,KAAKqnE,GAAK,MAC9B,UAAc66J,YAAY3oL,GACtB+mL,EAAM/qO,MAAQ,GACd,EAAK69H,OAAO6sG,WAAa,IACb,IAAdK,EAAM/qO,MACN,EAAK69H,OAAO6sG,WAAa,EACzB,GACA,GACA,GAGF1mL,EAAI0uG,UACJ1uG,EAAI6tG,a,KAGN46E,WAAa,SAACzoL,GACZ,IACE0mL,EAAa,EAAK7sG,OAAO6sG,WACzBkC,EAAOlC,EAAa,MAAQ,EAAK7sG,OAAO4sG,WACxClzO,EAAQ,EAAK20O,UAAS,GAAM,GAE5BnB,EAAQ/mL,EAAIgnL,YAAYzzO,GACxBowD,EAAM,EAAKmuH,SACTjhI,EAAQ,EAAK8S,IAAI9S,MASrB,OARAmP,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChB7oL,EAAIwuG,UAAY,EAAK30B,OAAO2sG,UACxB,EAAK7iL,IAAIm0E,cAAcL,YACzB5mF,GAAQ,IAAA+oC,0BAAyB,EAAKj2B,IAAIm0E,cAAcL,UAAW,EAAK9zE,IAAIm0E,cAAcJ,UAGpF,EAAKxlD,aACX,KAAK,EAAAugD,WAAWC,KAChB,KAAK,EAAAD,WAAWE,KAChB,KAAK,EAAAF,WAAWI,MAChB,KAAK,EAAAJ,WAAWG,MAChB,KAAK,EAAAH,WAAWngD,UAChB,KAAK,EAAAmgD,WAAWjgD,UAChB,KAAK,EAAAigD,WAAWlgD,UAChB,KAAK,EAAAkgD,WAAWpgD,UAEV,EAAK1uB,IAAIm0E,cAAcL,WACrB,CAAC,EAAAhF,WAAWpgD,UAAW,EAAAogD,WAAWjgD,UAAW,EAAAigD,WAAWE,MAAMn8H,SAAS,EAAKmtD,IAAIuuB,eAClFrhC,GAAS,KAIbmP,EAAIyuG,OACJzuG,EAAI0oL,UAAU/kL,EAAIltC,EAAGktC,EAAIjtC,GACzBspC,EAAIpQ,OAAOiB,GAASpqC,KAAKqnE,GAAK,MAC9B9tB,EAAI8oL,SAASv1O,EAAOmzO,EAAa,EAAGA,EAAa,EAAGK,EAAOL,GAC3D1mL,EAAI0uG,a,aA1XS23E,G,oICpBrB,Q,IAEA,O,IACA,O,IACA,OACA,QAOA,Q,OAEA,Q,IAKA,MACA,S,WACA,S,IACA,Q,IACA,QAEA,U,IACA,OACA,Q,uDAGM0C,G,aAuBJ,WAAY1kO,GAA8B,IAA1BuoD,EAA0B,uDAAf,KAAM6E,EAAS,gDACxCp1D,KAAKgI,GAAKA,EACVhI,KAAKuwD,SAAWA,EAChBvwD,KAAKo1D,QAAUA,EACfp1D,KAAKsnD,IAAM,CAAEltC,EAAG,EAAGC,EAAG,GACtBra,KAAK2sO,OAAS,CACZ7lL,WAAW,EACXC,kBAAmB,KACnB6lL,cAAe,KACfj0E,UAAU,EACVG,aAAa,EACb+zE,cAAe,EACfC,aAAc,GAEhB9sO,KAAK62I,eAAiB,EACtB72I,KAAK42I,mBAAqB,EAC1B52I,KAAKovD,UAAYpnD,EACjBhI,KAAKirM,aAAe,EACpBjrM,KAAKgtD,UAAW,EAChBhtD,KAAKivD,mBAAoB,EACzBjvD,KAAKy2I,UAAY,CACfmkB,MAAO,EACPlkB,KAAM,GAER12I,KAAK66J,cAAgB,CACnB9kF,WAAY,EACZD,SAAU,GAEZ91E,KAAK+sO,eAAiB,KACtB/sO,KAAKgtO,UAAY,KACjBhtO,KAAK21D,QAAU,KACf31D,KAAK85I,cAAgB,IAAI,EAAJ,QAAkB95I,MACvCA,KAAK86G,OAAS,CACZujD,SAAS,G,8DAsJIryG,EAAOihL,EAAQz4L,GAC9B,IAAI3+C,EAAIuU,KAAKunE,IAAIn9B,GACbj+C,EAAI6T,KAAKsnE,IAAIl9B,GACjBwX,EAAM5xC,GAAK6yN,EAAO7yN,EAClB4xC,EAAM3xC,GAAK4yN,EAAO5yN,EAElB,IAAI6yN,EACClhL,EAAM5xC,EAAI7jB,EAAIy1D,EAAM3xC,EAAIxkB,EADzBq3O,EAEClhL,EAAM5xC,EAAIvkB,EAAIm2D,EAAM3xC,EAAI9jB,EAG7B,MAAO,CACL6jB,EAAG8yN,EAAaD,EAAO7yN,EACvBC,EAAG6yN,EAAaD,EAAO5yN,K,mCAKd+tC,EAAUjyD,GACrB,OAAIA,EAAEyyD,WACJ5oD,KAAKmtO,cAAa,IACX,GAELntO,KAAKotO,kBAAkBhlL,IACrBpoD,KAAK21D,SACP31D,KAAK21D,QAAQ31D,MAEXA,KAAK2sO,OAAO7lL,WACd,UAAayB,UAAU,OAAQvoD,MAAM,GACrCA,KAAKqtO,WAAWjlL,IAGhB,UAAaG,UAAU,OAAQvoD,OAE1B,IAGLA,KAAK2sO,OAAO7lL,WACd9mD,KAAKqtO,WAAWjlL,GAElB,UAAaa,YAAYjpD,OAClB,K,iCAGEooD,EAAUjyD,GAGnB,UAAaktG,iBAAiBrjG,MAC9BA,KAAK2sO,OAAO7lL,WAAY,EACxB9mD,KAAK2sO,OAAO5lL,kBAAoB,KAChC/mD,KAAK2sO,OAAOC,cAAgB,S,kCA/P9Bl+K,MAAQ,K,KACR4+K,YAAc,CACZ3tO,MAAO,GACPE,OAAQ,GACR0tO,UAAW,I,KAEbjqO,KAAO,CACL3D,MAAO,GACPE,OAAQ,GACR0tO,UAAW,I,KAEbC,WAAa,U,KAIbl+K,WAAa,K,KAIbgH,UAAY,S,KACZm3K,mBAAqB,K,KA0CrBC,cAAgB,SAACp5G,EAAK+oC,EAAOlO,EAAMmO,K,KAKnCqwE,UAAY,SAACz2O,GAAY,EAAKw3D,MAAQx3D,G,KACtC02O,eAAiB,SAAC12O,GACZA,IACF,EAAKo4D,WAAap4D,I,KAGtBi2O,aAAe,SAACj2O,GAEd,OADA,EAAKy1O,OAAOh0E,SAAWzhK,EAChBA,G,KAET22O,YAAc,WACZ,IAAIpqL,EAAiB,UAAOb,UAAUU,oBAItC,MAAO,CACLlpC,EAHShQ,KAAKC,MAAM,EAAKi9C,IAAIltC,EAAIqpC,GAAkBA,EAInDppC,EAHSjQ,KAAKC,MAAM,EAAKi9C,IAAIjtC,EAAIopC,GAAkBA,I,KAOvD4pL,WAAa,SAACjlL,GACZ,IAAMrG,EAAQ,UAAUkJ,WACpBpC,GAAS,EAAK8jL,OAAO5lL,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACzD+G,GAAS,EAAK6jL,OAAO5lL,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAE7D,EAAK+rL,mBAEL,EAAKxmL,IAAIltC,GAAKyuC,EACd,EAAK8jL,OAAO5lL,kBAAkB3sC,EAAIguC,EAAShuC,EAE3C,EAAKktC,IAAIjtC,GAAKyuC,EACd,EAAK6jL,OAAO5lL,kBAAkB1sC,EAAI+tC,EAAS/tC,G,KAG7C0zN,iBAAmB,WACb,EAAKjzH,OAAOujD,UACd,EAAKvkB,cAAc4pB,eAAe,MAClC,EAAK5pB,cAAck0F,oBAAoB,MACvC,EAAKl0F,cAAcm0F,qBAAqB,Q,KAI5CC,kBAAoB,WAAM,2BACxB,YAAmB,EAAKziL,WAAxB,+CAAoC,SAC7B0iL,oBAFiB,+E,KAM1BL,iBAAmB,WACjB,GAAI,EAAKhzH,OAAOujD,QAAS,CACvB,EAAKvkB,cAAc4pB,eAAe,MAClC,EAAK5pB,cAAck0F,oBAAoB,MACvC,EAAKl0F,cAAcm0F,qBAAqB,MAGxC,IAAIG,EAAoB,UAAYC,qBAAqB,GACrDC,EAAoB,UAAYC,qBAAqB,GAKrDC,EAA4B,UAAYC,yBAAyBL,GACjEM,EAA4B,UAAYD,yBAAyBH,GAb9C,EA0BuB,UAAYxzG,oCAAoC0zG,EAA2B,EAAKlnL,KA1BvG,qBA0BlBqnL,EA1BkB,KA0BGC,EA1BH,KA2BnBD,IACF,EAAK70F,cAAc4pB,eAAeirE,GAClCC,EAAiB90F,cAAck0F,oBAAoB,GACnD,UAAqB5wL,mBAAmByxL,0BAA0B,EAAMD,IA9BnD,MAkCuB,UAAY9zG,oCAAoC4zG,EAA2B,EAAKpnL,KAlCvG,qBAkClBwnL,EAlCkB,KAkCGC,EAlCH,KAmCnBD,IACF,EAAKh1F,cAAc4pB,eAAeorE,GAClC,UAAqB1xL,mBAAmByxL,0BAA0B,EAAME,M,KAM9E3B,kBAAoB,SAAChlL,GA2BnB,IA1BA,IAAIrG,EAAQ,UAAUkJ,WAClB2pB,EAAS,UAAUhqB,YACnBokL,EAAU,CACZ50N,EAAI,EAAKktC,IAAIltC,EAAI2nC,EAAS6yB,EAAOx6D,EACjCC,EAAI,EAAKitC,IAAIjtC,EAAI0nC,EAAS6yB,EAAOv6D,GAE/B40N,EACK,EAAK3rO,KAAK3D,MAAQoiD,EADvBktL,EAEM,EAAK3rO,KAAKzD,OAASkiD,EAEzBmtL,EAAO,CACT90N,EAAG40N,EAAQ50N,EAAK60N,EAAiB,EACjC50N,EAAG20N,EAAQ30N,EAAK40N,EAAkB,GAEhChpL,EAAS,CACX,EAAKkpL,iBAAiB,CAAC/0N,EAAG40N,EAAQ50N,EAAGC,EAAG20N,EAAQ30N,GAAI60N,EAAM,EAAKr4F,gBAC/D,EAAKs4F,iBAAiB,CAAC/0N,EAAG40N,EAAQ50N,EAAI60N,EAAgB50N,EAAG20N,EAAQ30N,GAAI60N,EAAM,EAAKr4F,gBAChF,EAAKs4F,iBAAiB,CAAC/0N,EAAG40N,EAAQ50N,EAAI60N,EAAgB50N,EAAG20N,EAAQ30N,EAAI40N,GAAkBC,EAAM,EAAKr4F,gBAClG,EAAKs4F,iBAAiB,CAAC/0N,EAAG40N,EAAQ50N,EAAGC,EAAG20N,EAAQ30N,EAAI40N,GAAkBC,EAAM,EAAKr4F,iBAG/EhC,EAAO5uF,EAAO,GAAG7rC,EACjB26H,EAAO9uF,EAAO,GAAG5rC,EACjBu6H,EAAO3uF,EAAO,GAAG7rC,EACjB06H,EAAO7uF,EAAO,GAAG5rC,EAEZ9lB,EAAI,EAAGA,EAAI0xD,EAAOxxD,OAAQF,IAAK,CACtC,IAAIy3D,EAAQ/F,EAAO1xD,GACfsgJ,EAAO7oF,EAAM5xC,IACfy6H,EAAO7oF,EAAM5xC,GACXw6H,EAAO5oF,EAAM5xC,IACfw6H,EAAO5oF,EAAM5xC,GACX26H,EAAO/oF,EAAM3xC,IACf06H,EAAO/oF,EAAM3xC,GACXy6H,EAAO9oF,EAAM3xC,IACfy6H,EAAO9oF,EAAM3xC,GAGjB,IAAMgxC,EAAajD,EAAShuC,EAAIw6H,GAAQxsF,EAAS/tC,EAAIy6H,GAAQ1sF,EAAShuC,EAAIy6H,GAAQzsF,EAAS/tC,EAAI06H,EAG/F,OAFA,EAAKo4F,aAAa9hL,GAEXA,G,KAwDT+jL,aAAe,SAAChnL,EAAUjyD,GAGxB,GAAI,EAAKk1D,aAAc,CACrB,IAAMg5H,EAAa,UAAMliL,WACnB0lG,EAAew8E,EAAWz0H,cAAci4C,aACxC+nD,EAAiBy0B,EAAW16K,cAAcimJ,eAchD,OAXI/nD,IAAiB,EAAAv0D,qBAAqB77B,QAAUm4I,GAClD,UAAUj4F,gBAAgB,GAIxB,UAAagsC,YAAY3pG,QAAQ,SAAW,IAE9C,EAAK2yO,OAAO7lL,WAAY,EACxB,EAAK6lL,OAAO5lL,kBAAoBqB,EAChC,EAAKukL,OAAOC,cAAgB,EAAK9vE,YAE5B,EAET,OAAO,G,KAITkuC,gBAAkB,SAACv+G,GAAU,EAAKw+G,aAAe,UAAElgJ,MAAM0hC,I,KACzD5hC,YAAc,SAAC3zD,GAAY,EAAKowD,IAAMpwD,G,KACtCqkK,MAAQ,SAACvzJ,GAAS,EAAKA,GAAKA,G,KAC5BqvD,aAAe,SAACjI,GAAgB,EAAKA,UAAYA,G,KACjDsmF,eAAiB,WAAQ,OAAO,EAAKi3F,OAAO7zE,a,KAC5C32J,SAAW,WAAQ,OAAO,EAAKwqO,Q,KAC/Bh3F,eAAiB,SAACmjB,GAAkB,EAAK6zE,OAAO7zE,YAAcA,G,KAC9DoR,mBAAqB,SAACC,GACpB,EAAKtzB,eAAiBszB,G,KAExBrgH,UAAY,WACV,MAAO,CACL1vC,EAAG,EAAK9W,KAAK3D,MAAQ,EACrB0a,EAAG,EAAK/W,KAAKzD,OAAS,I,KAG1BwvO,kBAAoB,WAClB,IAAMr9L,EAAS,EAAK8X,YACdpuB,EAAW,EAAKsvB,cAEtB,MAAO,CACL5wC,EAAGshB,EAASthB,EAAI43B,EAAO53B,EACvBC,EAAGqhB,EAASrhB,EAAI23B,EAAO33B,I,KAI3Bi1N,QAAU,SAACp4O,GACT,EAAKoM,KAAK3D,MAAQzI,EAAMyI,MACxB,EAAK2D,KAAKzD,OAAS3I,EAAM2I,Q,KAG3B0vO,eAAiB,SAACr4O,GAChB,EAAKo2O,YAAY3tO,MAAQzI,EAAMyI,MAC/B,EAAK2tO,YAAYztO,OAAS3I,EAAM2I,Q,KAGlCmrD,YAAc,WACZ,IAAIgwE,EAAc,EAAK8e,cAAcwkB,sBAErC,OAAuB,OAAhBtjC,EAAuBA,EAAc,EAAK1zE,K,KAEnDm3G,mBAAqB,WAAQ,OAAO,EAAKovE,e,KACzC2B,YAAc,WACZ,IAAI9zM,EAAW,EAAKsvB,cAChB4pB,EAAS,UAAUhqB,YACjB7I,EAAQ,UAAUkJ,WAExB,MAAO,CACL7wC,GAAKshB,EAASthB,EAAK,EAAK9W,KAAK3D,MAAQ,GAAMoiD,EAAS6yB,EAAOx6D,EAC3DC,GAAKqhB,EAASrhB,EAAK,EAAK/W,KAAKzD,OAAS,GAAMkiD,EAAS6yB,EAAOv6D,I,KAGhEgxC,WAAa,WAEX,OAAgC,IAAzB,EAAKshL,OAAOh0E,U,KAErB9mG,cAAgB,WAAQ,OAAO,EAAKvC,Y,KACpCyC,SAAW,WAAQ,OAAO,EAAKrD,O,KAC/BouG,QAAU,WAAQ,OAAO,EAAKx5J,M,KAC9B+yI,SAAW,WAAQ,OAAO,EAAKymB,UAAUn9J,O,KACzCs2I,UAAY,WAAQ,OAAO,EAAK6mB,UAAUj9J,Q,KAC1C4vO,aAAe,WAAQ,OAAO,EAAK3yE,UAAUywE,W,KAC7CmC,YAAc,WAAQ,OAAO,EAAK74F,gB,KAClCooB,OAAS,WACP,IAAI0wE,EAAY,GACVC,EAAQ,EAAKnkL,WACnB,IAAK,IAAMi7G,KAAakpE,EAClBA,EAAMh7O,eAAe8xK,IACvBipE,EAAU56O,MAAV,cAAgB2xK,aAAckpE,EAAMlpE,GAAWhe,eAInD,IAAIA,EAAa,CACfphG,IAAK,EAAKA,IACVt/C,GAAI,EAAKA,GACTonD,UAAW,EAAKA,UAAY,EAAKA,UAAY,EAAKV,MAAMuD,QAAQjqD,GAChE0mD,MAAO,CACL3vD,IAAK,EAAK2vD,MAAMmhL,YAAcC,EAAE,EAAKphL,OAAOqhL,KAAK,OACjD/nO,GAAI,EAAK0mD,MAAMuD,QAAQjqD,GACvBvR,KAAM,EAAKi4D,MAAMuD,QAAQx7D,KACzBu5O,WAAY,EAAKthL,MAAMuD,QAAQ+9K,WAC/BrwO,MAAO,EAAK+uD,MAAM/uD,MAClBE,OAAQ,EAAK6uD,MAAM7uD,QAErBuL,KAAM,EAAKA,KACXgqD,QAAS,EAAKA,QACd55C,KAAM,EAAKA,KACXlY,KAAM,EAAKA,KACXuzI,eAAgB,EAAKA,eACrBD,mBAAoB,EAAKA,mBACzBtnF,WAAY,EAAKA,WAAa,EAAKA,WAAWtnD,GAAK,KACnDkuD,mBAAoB,EAAK5G,YACrB,EAAKA,WAAW5uD,UACd,EAAK4uD,WAAW5uD,YAAYsH,GAE9B,KACJinD,kBAAmB,EAAKA,kBACxBg8I,aAAc,EAAKA,aACnB16I,SAAU,EAAKA,SACf0/K,kBAAmB,EAAKn2F,cAAgB,EAAKA,cAAcmlB,SAAW,KACtE0wE,UAAWA,GAMb,GAJI,EAAKrgL,YAAc,EAAKA,WAAWkF,gBACrCk0F,EAAW50F,WAAoC,WAAvB,UAAOlnD,aAA2B,IAAAsoD,OAAM,EAAK5F,WAAWmF,mBAAqB,EAAKnF,WAAWkF,gBACrHk0F,EAAWpiJ,OAAS,EAAKgpD,WAAW5uD,YAAY4F,QAEhC,SAAd,EAAK8E,KAAiB,CACxB,IACIolC,GADa,IAAA8jB,mBACGxoD,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAK7X,UAAUqE,MAAQ,EAAK0mD,MAAMuD,QAAQjqD,MAC5E2S,EAAO61B,EAAOA,EAAK71B,KAAO,KAC9B+tI,EAAWj0J,OAAgD,UAAtCkmB,EAAOA,EAAKre,cAAgB,MAC7C,EACuB,aAAvB,UAAOsQ,aAA6B,IAAAynD,eAAc,EAAK/E,aAAc,IAAA4F,QAAM,IAAAb,eAAc,EAAK/E,iBAC3E,eAAd,EAAKlkD,KACds9I,EAAWj0J,QAAS,IAAAy/D,mBAAkB,EAAK5E,WAAW6E,sBAAuB,EAAK7E,YAC3D,SAAd,EAAKlkD,OACds9I,EAAWj0J,OAASi0J,EAAW50F,YAGjC,OAAO40F,G,KAETv6F,WAAa,SAACA,GACZ,IAAM+hL,EAAkB,CAAC,QAAS,gBAAiB,aAWnD,GAVAx7O,OAAOmc,KAAKs9C,GAAY/vD,SAAQ,SAAA5G,GAC1B22D,EAAWv5D,eAAe4C,KACvB04O,EAAgB/1O,SAAS3C,KAC5B,EAAKA,GAAO22D,EAAW32D,QAIzB22D,EAAW8hL,mBACb,EAAKn2F,cAAc5rF,OAAOC,EAAW8hL,mBAEnC9hL,EAAWwhL,UAAW,4BACxB,IADwB,IACxB,EADwB,iBACbQ,EADa,QAEhBphL,EAAO,EAAK7I,MAAMp6C,MAAK,SAAAijD,GAAA,OAAQA,EAAK23G,aAAeypE,EAASzpE,aAC9D33G,GACFA,EAAKZ,WAAWgiL,IAHpB,EAAuBhiL,EAAWwhL,UAAlC,+CAA6C,IADrB,gF,KA6C5B76K,eAAiB,WACf,OAAO,G,KAOT00G,KAAO,SAASC,K,KAGhBl2H,OAAS,SAACm2H,EAAStsC,GAEjB,GAAI,EAAKhyH,OAAS,EAAAuoC,oBAAoBC,UAAtC,CAGA,IAAM0mF,EAAa,UAAMn4H,WAAWwH,cAAcimJ,eAClDt1B,EAAa,EAAKsc,oBAAsB8yB,EAAU,EAAK7yB,gBAAkB6yB,EAChD,MAAxB,EAAK7yB,iBAA4B,EAAKA,eAAiB,GAC3B,MAA5B,EAAKD,qBAAgC,EAAKA,mBAAqB,GAEhExZ,EAAYA,GAAa,EAAKqZ,UAAUmzB,MACxC,IAAIp1H,EAASk1H,EAAUt/J,KAAKqnE,GAAK,IAC7B2rD,IAAc,EAAKqZ,UAAUC,OAC/BliG,IAAU,GACR,EAAK4gG,gBACP,EAAKA,eAAe40B,2BAA2B,EAAKlgH,YAAatV,EAAO8lF,GAE1E,EAAK81G,mBAAmB57L,K,KAE1B47L,mBAAqB,SAAC57L,GACpB,IAAMxC,EAAS,EAAK8X,YADU,uBAE9B,YAAwB,EAAKumL,gBAA7B,+CAA8C,SAClC98L,OAAOvB,EAAQwC,IAHG,+E,KAMhCwhB,KAAO,SAACt6B,EAAUgzB,EAAOprD,EAAMgsD,EAAYtC,GAMzC,SAASq9G,EAAazvC,EAAKC,GACzB,OAAOzwH,KAAKouE,MAAMpuE,KAAKkhF,UAAYuvC,EAAMD,IAAQA,EANnD,EAAK/vE,YAAYnvB,GACjB,EAAKiyM,UAAUj/K,GACf,EAAK4gL,QAAQhsO,GACb,EAAKisO,eAAejsO,GACpB,EAAKsqO,eAAet+K,GAIpB,EAAKo+K,cAAcrjE,EAAa,EAAG,KAAMA,EAAa,EAAG,KAAMA,EAAa,EAAG,KAAM,IACjFr9G,EACF,EAAKA,UAAW,EAEhB,EAAKs9G,aAGP,EAAKpkH,MAAQ,EAAKoqL,cAEd,EAAKllO,OAAS,EAAAuoC,oBAAoBC,WACpC,EAAKs9F,uBAGP,EAAKu8F,mBAAqB,IAAI,EAAJ,QAAuB,I,KAEnDnjE,WAAa,WACX,UAAa7wG,SACX,UAAaC,OAAOC,WACpB,EAAK42K,aACL,EACA,EAAKhgL,SAAW,EAAKA,SAAW,UAAaqJ,WAAW2jC,OAAS,EAAKjuC,WAAa,EAAI,IAEzF,UAAamK,SACX,UAAaC,OAAOI,WACpB,EAAKs1K,aACL,EACA,EAAK7+K,SAAW,EAAKA,SAAW,UAAaqJ,WAAW2jC,OAAS,EAAKjuC,WAAa,EAAI,IAEzF,UAAamK,SACX,UAAaC,OAAOK,SACpB,EAAKy2K,WACL,EACA,EAAKjgL,SAAW,EAAKA,SAAW,UAAaqJ,WAAW2jC,OAAS,EAAKjuC,WAAa,EAAI,IAEzF,UAAamK,SACX,UAAaC,OAAOM,OACpB,EAAKy2K,QACL,EACA,EAAKlgL,SAAW,EAAKA,SAAW,UAAaqJ,WAAW2jC,OAAS,EAAKjuC,WAAa,EAAI,K,KAI3FohL,mBAAqB,WACnB,IAAIC,EAAc,CAChBpgL,SAAU,UAAaqJ,WAAWujC,UAClCksH,SAAS,EACTunB,YAAY,EACZC,kBAAkB,EAClBC,aAAc,SAAC1oL,EAAUihK,GAEvB,IAAMzxJ,EAAeyxJ,EAAQ0nB,YAEvBhqO,EAAQ6wD,EAAaz1D,WACvB4/C,EAAQ,UAAUkJ,WAClBpC,GAASwgK,EAAQtiN,MAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EAC3D+G,GAASugK,EAAQtiN,MAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAGzDivL,GAAY3nB,EAAQtiN,MAAM6lO,cAAcjtO,MAAQkpD,EAAQwgK,EAAQtiN,MAAM6lO,cAAc/sO,OAASipD,GAAS,EACtGmoL,GAAa5nB,EAAQtiN,MAAM6lO,cAAc/sO,OAASipD,EAAQugK,EAAQtiN,MAAM6lO,cAAcjtO,MAAQkpD,GAAS,EAEzGooL,GAAalqO,EAAM8lO,eAAiBmE,GAAYjqO,EAAM+lO,eACxDl1K,EAAa03K,QAAQ,CACnB3vO,MAAOqxO,EACPnxO,OAAQoxO,IAEV5nB,EAAQ30I,KAAOs8J,EACf3nB,EAAQ10I,KAAOs8J,IAGnBC,gBAAiB,SAAC9oL,EAAUihK,GAC1BA,EAAQtiN,MAAM6lO,cAAgB,MAEhCuE,kBAAmB,SAAC/oL,EAAUihK,GAC5B,IAAMzxJ,EAAeyxJ,EAAQ0nB,YAC7B1nB,EAAQtiN,MAAM6lO,eAAd,gBAAkCh1K,EAAaklG,aAG/Cs0E,EAAc,CAChB/8L,OAAQ,GACRmmB,UAAW,EACXt/C,OAAQ,EAAAm2N,mBAAmBl9L,QAGvB7wC,EAAO,EAAKw5J,UACZw0E,EAAiBhuO,EAAK3D,MACtB4xO,EAAiBjuO,EAAKzD,OAC5B,EAAKktO,eAAiB,IAAI,EAAJ,QAAYuE,EAAgBC,EAAgB,EAAMZ,EAAaS,I,KAGvFr5K,iBAAmB,WACjB,UAAa6rC,YAAY,GACzB,EAAK52C,UAAW,EAChB,EAAKkkF,wB,KAGPA,qBAAuB,WACrB,IAAMhrF,EAAQ,EAAKuF,WADQ,uBAE3B,YAAmBvF,EAAnB,+CAA0B,SACnB6R,oBAHoB,+E,KAO7B46E,aAAe,WACT,EAAK3lF,WACP,EAAKs9G,aACL,EAAKt9G,UAAW,EAChB,EAAKwkL,qB,KAITA,iBAAmB,WAEjB,GAAI,EAAKpmO,OAAS,EAAAuoC,oBAAoBC,UAAW,4BAC/C,YAAmB,EAAK6X,WAAxB,+CAAoC,SAC7BknF,gBAFwC,gF,KAOnDt6E,QAAU,SAACuyG,GACT,IAAKA,EAAS,CACZ,UAAahnE,YAAY,GADb,2BAEZ,YAAmB,EAAKn4C,WAAxB,+CAAoC,SAC7B4M,WAHK,6EAKR,EAAK00K,gBACP,EAAKA,eAAe10K,Y,KAK1B/P,YAAc,SAASc,GACjBppD,OAASopD,GACX,UAAaH,YAAYjpD,O,KAI7BipD,YAAc,SAASG,GAErB,UAAaH,YAAYjpD,O,KAU3BoF,KAAO,WACL,MAAQ,WAAY7H,KAAKpF,OAAOqF,UAAUi0O,a,KAG5CC,OAAS,SAAS5/K,GAChB,GAAIA,EAAK,CACP,IAAI/yD,EAAM+yD,EAAI9yD,aAAa,OAC3B,GAAID,EACF,OAAOA,EAGT,GADAA,EAAM+yD,EAAI9yD,aAAa,SAErB,OAAOD,EAAIJ,QAAQ,2DAA4D,IAAIA,QAAQ,QAAS,IAGxG,MAAO,I,KAGTgzO,MAAQ,SAAC7/K,GACP,MAAQ,+BAAgCv0D,KAAK,EAAKm0O,OAAO5/K,K,KAG3D0mE,wBAA0B,WAExB,OADe,EAAK/sE,WAAW3jD,KAAI,SAAAinD,GAAA,OAAQA,EAAK0C,QAClC3pD,KAAI,SAAAkkD,GAAA,OAAS,IAAAzB,eAAcyB,EAAM5xC,EAAG4xC,EAAM3xC,EAAG,O,KAG7D09H,oBAAsB,WACpB,OAAO,EAAKvf,2B,KAGdo5G,2BAA6B,WAC3B,IAAMC,EAAW,EAAK7mL,cAEtB,OADe,EAAKS,WAAW3jD,KAAI,SAAAinD,GAAA,OAAQA,EAAK0C,QAClC3pD,KAAI,SAAAkkD,GAChB,MAAO,CACL5xC,EAAGy3N,EAASz3N,EAAI4xC,EAAM5xC,EACtBC,EAAGw3N,EAASx3N,EAAI2xC,EAAM3xC,O,KAK5Bo9H,wBAA0B,WACxB,OAAO,EAAKm6F,8B,KAGdE,2BAA6B,WAC3B,MAAO,EACL,IAAAC,eAAc,EAAG,EAAG,IACpB,IAAAA,eAAc,EAAKzuO,KAAK3D,MAAO,EAAG,IAClC,IAAAoyO,eAAc,EAAKzuO,KAAK3D,MAAO,EAAK2D,KAAKzD,OAAQ,IACjD,IAAAkyO,eAAc,EAAG,EAAKzuO,KAAKzD,OAAQ,K,KAWvC4rD,SAAW,WACT,OAAO,EAAKvF,O,KAGdszB,YAAc,SAACzqB,GACb,IAAMnhD,EAAQ,EAAKs4C,MAAMlsD,QAAQ+0D,GACjC,OAAe,IAAXnhD,EAAqB,KAElB,EAAKs4C,OAAOt4C,EAAQ,EAAI,EAAKs4C,MAAMzxD,QAAU,EAAKyxD,MAAMzxD,S,KAGjE20K,YAAc,SAACr6G,GACb,IAAMnhD,EAAQ,EAAKs4C,MAAMlsD,QAAQ+0D,GACjC,OAAe,IAAXnhD,EAAqB,KAElB,EAAKs4C,OAAOt4C,EAAQ,GAAK,EAAKs4C,MAAMzxD,S,KAG7C47O,cAAgB,WACd,OAAO,EAAKnqL,MAAMp+C,KAAI,SAAAinD,GAAA,OAAQA,EAAK0C,S,KAGrCugL,8BAAgC,WAAM,2BACpC,YAAwB,EAAKvmL,WAA7B,+CAAyC,SAC7BwmL,uBAAuBC,gBAFC,+E,KAMtCC,4BAA8B,WAAM,2BAClC,YAAwB,EAAK1mL,WAA7B,+CAAyC,SAC7BwmL,uBAAuBG,cAFD,+E,KAMpCC,kBAAoB,WAClB,IAAMnsL,EAAQ,EAAKuF,WADK,uBAExB,YAAmBvF,EAAnB,+CAA0B,CACxB,GADwB,QACfmF,aACP,OAAO,GAJa,6EAQxB,OAAO,G,KAGTilL,YAAc,WACZ,OAAO,IAAAgC,4BAA2B,EAAKR,6BAA8B,I,KAGvElnL,UAAY,WACV,IAAM7I,EAAQ,UAAOA,MACfw8G,EAAe,UAAU3zG,YAC3B4zG,EAAO,EAAKxzG,cAIhB,OAHI,UAAOpI,UAAUqC,aACnBu5G,EAAO,EAAKC,sBAEP,CACLrkJ,EAAGmkJ,EAAankJ,EAAKokJ,EAAKpkJ,EAAI2nC,EAC9B1nC,EAAGkkJ,EAAalkJ,EAAKmkJ,EAAKnkJ,EAAI0nC,I,KAIlCwwL,uCAAyC,WACvC,OAAO,EAAA/zL,4DAA4DrkD,SAAS,EAAKi7D,YAC3E,IAAApe,0B,KAGRw7L,cAAgB,WACd,IAAMC,EAAY,EAAK3oL,YACjB4oL,GAAmB,IAAAnoL,eAAckoL,EAAUr4N,EAAGq4N,EAAUp4N,EAAG,GAC3D84B,EAAS,UAAUgY,WAAU,GAHf,uBAKpB,YAAkBhY,EAAlB,+CAA0B,KAAjByG,EAAiB,QAExB,GAAIA,aAAiBA,EAAjBA,QAOF,IAD4B,IAAAuiC,oBAAmBu2J,EAAkB94L,GAAO,GAEtE,OAAOA,GAfO,6EAuBpB,OAAO,M,KAGT62L,QAAU,SAAC9sL,GACT,EAAK8pL,mBAAmBxzK,OAAOtW,K,aAIpB+oL,G,4ICh1BHjsN,E,wJAAZ,O,IACA,Q,IACA,O,IACA,S,IACA,OACA,Q,IACA,O,IACA,QACA,S,WACA,Q,mDAEO,IAAM4wN,EAAqBA,EAArBA,mBAAqB,CAChCpiF,MAAO,QACPtjD,MAAO,QACP0xD,MAAO,QACPs1E,IAAK,MACLx+L,OAAQ,UAGWy+L,E,WAqBnB,WAAYx4N,EAAGC,EAAG9gB,GAAsC,WAA9Bs5O,EAA8B,uDAAjB,GAAIr1G,EAAa,uDAAJ,IAAI,0BAjBxDA,OAAS,CACPnpF,OAAQ,GACRmmB,UAAW,EACXt/C,OAAQm2N,EAAmB1lI,OAc2B,KAZxDmP,OAAS,CACPvqD,SAAU,UAAaqJ,WAAW4jC,MAClC6rH,SAAS,EACTunB,YAAY,EAEZkC,eAAe,EACfC,kBAAkB,EAClBC,iBAAiB,EACjBnC,kBAAkB,EAClBoC,mBAAmB,GAGmC,KAgDxDvqF,WAAa,WACX,MAAO,CACL1gJ,GAAI,EAAKA,GACToS,EAAG,EAAKA,EACRC,EAAG,EAAKA,EACRmjH,OAAQ,EAAKA,OACb1iB,OAAQ,EAAKA,SAtDuC,KA0DxD3sD,WAAa,SAAC+kL,GACZ,EAAKlrO,GAAKkrO,EAAUlrO,GACpB,EAAKoS,EAAI84N,EAAU94N,EACnB,EAAKC,EAAI64N,EAAU74N,EACnB,EAAKmjH,OAAS01G,EAAU11G,OACxB,EAAK1iB,OAASo4H,EAAUp4H,QA/D8B,KAkExDvwD,cAAgB,WACd,OAAO,IAAAA,eAAc,EAAKsuE,eAAeC,UAAW,EAAKD,eAAeE,UAAW,EAAKF,eAAet/H,SAnEjD,KAsExD0nK,uBAAyB,WACvB,OAAO,IAAAnsF,qBAAoB,EAAK+jD,eAAeC,UAAW,EAAKD,eAAeE,UAAW,EAAKF,eAAet/H,SAvEvD,KA0ExDmH,UAAY,WACV,OAAO,EAAKnH,QA3E0C,KA8ExDyxD,YAAc,WACZ,MAAO,CACL5wC,EAAG,EAAKy+G,eAAeC,UACvBz+G,EAAG,EAAKw+G,eAAeE,YAjF6B,KA0IxDhhE,iBAAmB,WACjB,UAAa6rC,YAAY,EAAKi1B,eAAes6G,OAAO9pB,SACpD,UAAazlH,YAAY,IA5I6B,KA+IxD+uC,aAAe,WACb,EAAK23B,aACD,EAAKzxC,eAAes6G,OAAO9pB,SAC7B,EAAKxwF,eAAes6G,OAAO9pB,QAAQ12E,gBAlJiB,KAsJxD14E,OAAS,SAACtW,GACR,KAAI,YAAa,UAAUxhD,WAAWilD,YAGlC,EAAK0zD,OAAO+1H,kBAAqB,EAAKuC,uBAA0B,EAAKC,yBAAzE,CAIA,IAAIp5G,EAAa,EAAK1vE,gBAKtB,OAHA5G,EAAIyuG,OACJzuG,EAAI+W,YAEI,EAAK8iE,OAAOtiH,QAClB,KAAKm2N,EAAmBpiF,MACtB,IAAIg5C,EAAY,EACZ,EAAKmrC,uBACPnrC,EAAY,EAAKzqE,OAAOnpF,OACxBsP,EAAIwuG,UAAY,EAAAnD,MAAME,aAEtB+4C,EAAY,EAAKzqE,OAAOnpF,OAAS,EACjCsP,EAAIwuG,UAAY,EAAAnD,MAAMrjD,OAGxBhoD,EAAIuuG,IACFj4B,EAAW7/G,EACX6/G,EAAW5/G,EACX4tL,EACA,EACA,EAAI79L,KAAKqnE,IACT,GAGF9tB,EAAIkX,YAAc,UAAa,UAAO72D,aAAa6wH,QAEnDlxE,EAAImX,SACJnX,EAAI88E,OACJ,MAEF,KAAK4wG,EAAmB1lI,MACtBhoD,EAAIuuG,IACFj4B,EAAW7/G,EACX6/G,EAAW5/G,EACX,EAAKmjH,OAAOnpF,OACZ,EACAjqC,KAAKqnE,IACL,GAGF9tB,EAAIkX,YAAc,UAAa,UAAO72D,aAAa6wH,QACnDlxE,EAAIwuG,UAAY,UAChBxuG,EAAImX,SACJnX,EAAI88E,OACJ,MAEF,KAAK4wG,EAAmBh0E,MACtB,IAAI4qC,EAAY,EACZ,EAAKpvE,eAAes6G,OAAO9pB,SAC1B,EAAKxwF,eAAes6G,OAAO9pB,QAAQtiN,MAAM4xJ,UAE5CsvC,EAAY,EAAKzqE,OAAOnpF,OAAS,EACjCsP,EAAIkX,YAAc,EAAAm0F,MAAME,WACxBvrG,EAAIwuG,UAAY,EAAAnD,MAAME,aAEtB+4C,EAAY,EAAKzqE,OAAOnpF,OACxBsP,EAAIkX,YAAc,wBAClBlX,EAAIwuG,UAAY,uBAElBxuG,EAAIuuG,IACFj4B,EAAW7/G,EACX6/G,EAAW5/G,EACX4tL,EACA,EACU,EAAV79L,KAAKqnE,IACL,GAGF9tB,EAAI6W,UAAY,EAChB7W,EAAI88E,OASJ98E,EAAImX,SACJ,MAEF,KAAKu2K,EAAmBsB,IACtB,IACIW,EAAgB,EAAK91G,OAAOnpF,OAChCsP,EAAIgX,OAAOs/D,EAAW7/G,EAAG6/G,EAAW5/G,EAAIi5N,GACxC3vL,EAAIiX,OAAOq/D,EAAW7/G,EAHH,GAGqB6/G,EAAW5/G,EAAIi5N,GACvD,UAAcC,WAAW5vL,EAA0B,EAArB,EAAK65E,OAAOnpF,OAAkC,EAArB,EAAKmpF,OAAOnpF,OAAY4lF,EAAW7/G,EAJvE,GAIwF6/G,EAAW5/G,GACtHspC,EAAIgX,OAAOs/D,EAAW7/G,EALH,GAKqB6/G,EAAW5/G,EAAIi5N,GACvD3vL,EAAIiX,OAAOq/D,EAAW7/G,EAAG6/G,EAAW5/G,EAAIi5N,GAExC3vL,EAAIkX,YAAc,UAAa,UAAO72D,aAAa6wH,QACnDlxE,EAAIwuG,UAAY,UAChBxuG,EAAI6W,UAAY,EAAKgjE,OAAOhjE,UAC5B7W,EAAImX,SAEJ,MAEF,KAAKu2K,EAAmBl9L,OAEtBwP,EAAIuuG,IACFj4B,EAAW7/G,EACX6/G,EAAW5/G,EACX,EAAKmjH,OAAOnpF,OACZ,EACU,EAAVjqC,KAAKqnE,IACL,GAEF9tB,EAAIkX,YAAc,UAAa,UAAO72D,aAAa6wH,QACnDlxE,EAAIwuG,UAAY,UAChBxuG,EAAI6W,UAAY,EAAKgjE,OAAOhjE,UAAY,EACxC7W,EAAImX,SACJnX,EAAI88E,OAGJ98E,EAAI+W,YACJ/W,EAAIuuG,IACFj4B,EAAW7/G,EACX6/G,EAAW5/G,EACX,EAAKmjH,OAAOnpF,OAAS,EACrB,EACU,EAAVjqC,KAAKqnE,IACL,GAGF9tB,EAAIwuG,UAAY,UAAa,UAAOnuJ,aAAa6wH,QACjDlxE,EAAI6W,UAAY,EAAKgjE,OAAOhjE,UAAY,EACxC7W,EAAI88E,OAGJ,UAAU+yG,YAAY,eAAgB7vL,EACpCs2E,EAAW7/G,EAAI,EAAKojH,OAAOnpF,OAAS,EAAI,IACxC4lF,EAAW5/G,EAAI,EAAKmjH,OAAOnpF,OAAS,EAAI,IACxC,IACA,KACA,GACA,GAMNsP,EAAI6tG,YACJ7tG,EAAI0uG,YA5SJryJ,KAAK86G,OAASpmH,OAAO+2B,OAAOzrB,KAAK86G,OAAQ+3H,GACzC7yO,KAAKw9H,OAAS9oI,OAAO+2B,OAAOzrB,KAAKw9H,OAAQA,GACzC,IAAI21G,EAAS,CACX9pB,QAAUrpN,KAAK86G,OAAOuuG,QAClB,IAAI,EAAJ,QAAYjvM,EACZC,EACAra,KAAKw9H,OAAOnpF,OACZr0C,KAAKw9H,OAAOnpF,OACZr0C,KAAK86G,OAAOvqD,SACZvwD,KACAzG,EACAyG,KAAK86G,OAAOg2H,aACZ9wO,KAAK86G,OAAOo2H,gBACZlxO,KAAK86G,OAAOq2H,mBAEZ,MAENnxO,KAAKyzO,gBAAkB,IAAI,EAAJ,QAAmBr5N,EAAGC,EAAG9gB,EAAQ45O,GACxDnzO,KAAKzG,OAASA,EACdyG,KAAKgI,GAAKyY,EAAK4B,KACfriB,KAAKsqK,a,yDAgEKpzK,GACV8I,KAAK64H,eAAe66G,QAAQx8O,EAAMkjB,GAClCpa,KAAK64H,eAAe86G,QAAQz8O,EAAMmjB,K,6BAG7BzC,EAAQ48B,EAAO8lF,GACpBt6H,KAAKyzO,gBAAgBlgM,OAAO37B,EAAQ48B,EAAO8lF,K,mCAI3C,UAAa7gE,SACX,UAAaC,OAAOC,WACpB35D,KAAK2oD,YAAYlxD,KAAKuI,MACtBA,KACAA,KAAK86G,OAAOvqD,UAEd,UAAakJ,SACX,UAAaC,OAAOI,WACpB95D,KAAKmoD,YAAY1wD,KAAKuI,MACtBA,KACAA,KAAK86G,OAAOvqD,UAEd,UAAakJ,SACX,UAAaC,OAAOK,SACpB/5D,KAAKwoD,UAAU/wD,KAAKuI,MACpBA,KACAA,KAAK86G,OAAOvqD,UAEd,UAAakJ,SACX,UAAaC,OAAOM,OACpBh6D,KAAKi6D,OAAOxiE,KAAKuI,MACjBA,KACAA,KAAK86G,OAAOvqD,Y,kJAcdvwD,KAAK+3D,qB,gCAIL/3D,KAAKyX,W,4CA0KL,IAAMm8N,IAAyB5zO,KAAK64H,eAAet/H,OAAO6vN,OACtDppN,KAAK64H,eAAet/H,OAAO6vN,MAAMC,QAAQtiN,MAAM4xJ,SAE7Ck7E,KAAkB7zO,KAAK64H,eAAet/H,SAAUyG,KAAK64H,eAAet/H,OAAOwN,QAC7E/G,KAAK64H,eAAet/H,OAAOwN,MAAM4xJ,SAE/Bm7E,IAA0B9zO,KAAK64H,eAAet/H,OAAO6vN,OACvDppN,KAAK64H,eAAet/H,OAAO6vN,MAAMC,QAAQtiN,MAAMgtO,qBAE7C76E,IAAYl5J,KAAK64H,eAAes6G,OAAO9pB,SACzCrpN,KAAK64H,eAAes6G,OAAO9pB,QAAQtiN,MAAM4xJ,SAG7C,OAAOk7E,GAAmBD,GAA0BE,GAA2B56E,I,8CAI/E,IAAM86E,IAAoBh0O,KAAK64H,eAAet/H,OAAO6vN,OACjDppN,KAAK64H,eAAet/H,OAAO6vN,MAAMC,QAAQtiN,MAAM+/C,UAE7CmtL,IAA4Bj0O,KAAK64H,eAAet/H,OAAO6vN,OACzDppN,KAAK64H,eAAet/H,OAAO6vN,MAAMC,QAAQtiN,MAAMmtO,sBAE7CC,IAAcn0O,KAAK64H,eAAes6G,OAAO9pB,SAC3CrpN,KAAK64H,eAAes6G,OAAO9pB,QAAQtiN,MAAM+/C,UAG7C,OAAOktL,GAAqBC,GAA6BE,I,wBAnTzD,OAAOn0O,KAAKyzO,gBAAgB36G,W,aAOxB5hI,GACJ,OAAO8I,KAAKyzO,gBAAgBC,QAAQx8O,K,wBAJpC,OAAO8I,KAAKyzO,gBAAgB16G,W,aAOxB7hI,GACJ,OAAO8I,KAAKyzO,gBAAgBE,QAAQz8O,K,qCAIpC,OAAO8I,KAAKyzO,iB,aAGKv8O,GACjB8I,KAAKyzO,gBAAkBv8O,M,eAlEN07O,G,4HCnBrB,Q,IAKA,O,IAEA,Q,IACA,OAEA,QAIA,S,IACA,Q,IACA,QACA,Q,IACA,M,IAEA,O,uDAEqBwB,G,0CACZC,4BAA8B,SAAC1wL,EAAKsC,GAA0B,IAAlB8zE,EAAkB,uDAAN,EAC7D9zE,EAAO7nD,SAAQ,SAAC4tD,EAAOp+C,GACrB,IAAMknJ,EAAY7uG,EAAOr4C,EAAQ,GAAKq4C,EAAOr4C,EAAQ,GAAKq4C,EAAO,GAC3D2sB,GAAW,IAAAZ,aAAYhmB,EAAO8oG,GAC9BruG,GAAW,IAAA6qB,kBAAiBtlB,EAAO8oG,GAEzC,GAAIruG,EADU,UAAUwE,WACD8uE,EAAW,CAEhC,IAAMtlI,GAAS,IAAAi6M,mBAAkBjoJ,EAAW,UAAW1E,OAEjDq2E,EAAkB,UAAYC,mBAAmBrsE,EAAO8oG,GACxD41E,EAAQ/mL,EAAIgnL,YAAYl2O,GAC1BouD,GAAW,IAAA0uB,oBACbg7J,EAAQ1pL,EAAU/qC,WAAa,MAAQ,UAAWyuC,eAClD+tL,EAAU,EACVC,EAAU,EACVjtL,EAAMsrB,EAIR,OAAQwlD,GACN,IAAK,aACHm8G,EAAoB,IAAV3mO,GACLi1C,EAAW,UAAWd,MAAQ,UAAWC,cACzCa,EAAW,UAAWd,MAAQ,UAAWC,aAAe,GAC7D,MAEF,IAAK,WACHsyL,EAAoB,IAAV1mO,EAAc88N,EAAM/qO,MAAQ,GAAK+qO,EAAM/qO,MAWrD2nD,EAAIltC,GAAKk6N,EACThtL,EAAIjtC,GAAKk6N,EAET5wL,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChB7oL,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAa6wH,QACrDlxE,EAAI8oL,SAASh4O,EAAOqjB,WAAYwvC,EAAIltC,EAAGktC,EAAIjtC,EAAGqwN,EAAM/qO,MAAO4sO,GAC3D5oL,EAAImX,SACJnX,EAAI6tG,iB,EAKHgjF,iBAAmB,SAAC7wL,EAAKy0I,EAAcq8C,EAAgBC,EAAc96L,GACtE,UAAW/4C,aACbuzO,EAAYO,cAAchxL,EAAK/J,GAEjC,IAAIsM,EAAQtM,EAAM6R,WAEZmkG,EADa,UAAMztJ,WACSwH,cAAcimJ,eAEhDjsG,EAAI+W,YACJ,IAAK,IAAInmE,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC2xD,EAAM3xD,GAAG6jM,aAAeA,EACxBlyI,EAAM3xD,GAAG0lE,OAAOtW,EAAKpvD,EAAI,GACzB2xD,EAAM3xD,GAAG6jM,aAAe,KAI1B,IAAMw8C,EAAkBh7L,EAAMglH,sBAC1Bi2E,SAYJ,SAASC,EAA4BF,GAC/BA,GACFjxL,EAAIkX,YAAc,UAAa,UAAW72D,aAAa8wH,cACvDnxE,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAawrJ,qBAErD7rG,EAAIkX,YAAc,UAAa,UAAW72D,aAAa6wH,QACvDlxE,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAasrJ,qBAczD,OAAQolF,GACN,KAAK,EAAAniM,iBAAiBI,oBACpBkiM,EAAgBj7L,EAAMuiH,eAhC1B,SAAgC04E,EAAeD,GACzCA,GACFjxL,EAAIkX,YAAcg6K,EAAcE,eAChCpxL,EAAIwuG,UAAY0iF,EAAc//G,gBAE9BnxE,EAAIkX,YAAcg6K,EAAcE,eAChCpxL,EAAIwuG,UAAY0iF,EAAchgH,SA4B5BmgH,CAAuBH,EAAeD,GAEtCE,EAA4BF,GAE9B,MACF,KAAK,EAAAriM,iBAAiBG,cACpBoiM,EAA4BF,GAC5B,MACF,KAAK,EAAAriM,iBAAiBK,cAtBxB,SAAoCgiM,GAC9BA,GACFjxL,EAAIkX,YAAc,UAAa,UAAW72D,aAAa+wH,aACvDpxE,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAasrJ,sBAErD3rG,EAAIkX,YAAc,UAAa,UAAW72D,aAAa4nG,OACvDjoD,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAawrJ,oBAiBrDylF,CAA2BL,GAK3BA,IACiB,UAAMzyO,WACOytD,cAAci4C,eACzB,EAAA50D,qBAAqBx7B,QACpCm4I,IAEJjsG,EAAIwuG,UAAY,SAAO79B,MAK3B,OAAQmgH,GACN,KAAK,EAAAliM,iBAAiBE,UACpBkR,EAAI6W,UAAY,EAChB7W,EAAI6tG,YACJ,MACF,KAAK,EAAAj/G,iBAAiBC,QACtB,QACEmR,EAAI88E,OACJ98E,EAAI6W,UAAY,EAChB7W,EAAI6tG,YACJ7tG,EAAImX,W,EAKHo6K,wBAA0B,SAACt7L,GAChC,IAAIg7F,EAAO0rE,IACPxrE,EAAOwrE,IACPzrE,GAAQyrE,IACRvrE,GAAQurE,IAENp6J,EAAQtM,EAAM6R,WANsB,uBAO1C,YAAiBvF,EAAjB,+CAAwB,KAAf6I,EAAe,QAChBgvG,EAAWhvG,EAAK+uG,wBAAwB/uG,EAAKwJ,IAC7CslG,EAAa9uG,EAAK+uG,wBAAwB/uG,EAAK0C,MAErDmjF,EAAOxqI,KAAKwwH,IAAIga,EAAMipB,EAAWzjJ,EAAG2jJ,EAAS3jJ,GAC7C06H,EAAO1qI,KAAKwwH,IAAIka,EAAM+oB,EAAWxjJ,EAAG0jJ,EAAS1jJ,GAC7Cw6H,EAAOzqI,KAAKywH,IAAIga,EAAMgpB,EAAWzjJ,EAAG2jJ,EAAS3jJ,GAC7C26H,EAAO3qI,KAAKywH,IAAIka,EAAM8oB,EAAWxjJ,EAAG0jJ,EAAS1jJ,IAdL,6EAiB1C,MAAO,CACLD,EAAGw6H,EACHv6H,EAAGy6H,EACHn1I,MAAOk1I,EAAOD,EACd/0I,OAAQk1I,EAAOD,I,EAiBZqgG,qBAAuB,SAACxxL,EACAvpC,EACAC,EACA1a,EACAE,GAIsB,IAHtB26D,EAGsB,uDAHX,KACXhmB,EAEsB,uDAFf,IACP4gM,EACsB,uDADb,QACTC,EAAsB,uDAAd,UAI/BC,EAAU,GAEhB3xL,EAAIyuG,OAGJzuG,EAAI+W,YACJ/W,EAAI0oC,KAAKjyE,EAAGC,EAAG1a,EAAOE,GACtB8jD,EAAIwuG,UAAYijF,EAChBzxL,EAAI88E,OACJ98E,EAAI4xL,OAGJ5xL,EAAI+W,YACJ/W,EAAI6W,UAAYA,EAChB7W,EAAIkX,YAAcw6K,EAGlB,IAAK,IAAI9gP,EAAwB,GAAnBovD,EAAImB,OAAOnlD,MAAWpL,EAAIovD,EAAImB,OAAOnlD,MAAOpL,GAAK+gP,EAC7D3xL,EAAIgX,OAAOpmE,GAAIovD,EAAImB,OAAOjlD,QAC1B8jD,EAAIiX,OAAOrmE,EAAI+gP,EAAU9gM,EAA2B,EAApBmP,EAAImB,OAAOjlD,QAE7C8jD,EAAImX,SACJnX,EAAI0uG,W,EAWCmjF,qBAAuB,SAAC7xL,EAAKvpC,EAAGC,EAAG1a,EAAOE,GAC/C,IAAI41O,EAAW9xL,EAAI+xL,qBAAqBt7N,EAAGC,EAAG1a,EAAOE,GACrD41O,EAASE,aAAa,IAAM,WAC5BF,EAASE,aAAa,IAAM,WAC5BF,EAASE,aAAa,GAAK,WAC3BF,EAASE,aAAa,GAAK,WAC3BF,EAASE,aAAa,IAAM,WAC5BF,EAASE,aAAa,IAAM,WAC5BF,EAASE,aAAa,EAAG,WAGzBhyL,EAAIwuG,UAAYsjF,EAChB9xL,EAAI88E,Q,EAGCm1G,sBAAwB,SAACjyL,EAAK/J,GAAuD,2CAAhBxvC,KAAKqnE,GAAW,IACpFokK,EAAOzB,EAAYc,wBAAwBt7L,GAIjD+J,EAAIyuG,OACJ,IAAIlsG,EAAQtM,EAAM6R,WAGlB9H,EAAI+W,YACJ/W,EAAI0oC,KAAKwpJ,EAAKz7N,EAAGy7N,EAAKx7N,EAAGw7N,EAAKl2O,MAAOk2O,EAAKh2O,QAC1C8jD,EAAI6W,UAAY,EAChB7W,EAAImX,SAEJ,IAAK,IAAIvmE,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,KAGlC,IAAMuhP,EAAW5vL,EAAM,GAAG43G,wBAAwB53G,EAAM,GAAGqS,IAE3D67K,EAAYoB,qBAAqB7xL,EAAKkyL,EAAKz7N,EAAGy7N,EAAKx7N,EAAGy7N,EAAS17N,EAAG07N,EAASz7N,GAC3EspC,EAAI6tG,YAEJ7tG,EAAI0uG,W,EAGC0jF,oBAAsB,SAACpyL,EAAK/J,GAAuD,IAAhD4gB,EAAgD,uDAApC,EAC9Cq7K,GADkF,2CAAhBzrO,KAAKqnE,GAChE2iK,EAAYc,wBAAwBt7L,IAG3Co8L,EAAY,UACZC,EAAW,UAuBXl0L,EAAQ,UAAOA,MACfm0L,EAAkB17K,EAAYzY,EAEpCqyL,EAAYe,qBACVxxL,EACAkyL,EAAKz7N,EACLy7N,EAAKx7N,EACLw7N,EAAKl2O,MACLk2O,EAAKh2O,OACLq2O,EACA,IACAF,EACAC,GAGFtyL,EAAI0uG,W,EAIC8jF,mBAAqB,SAACxyL,EACAy0I,EACAx+I,GAU3B,IAHG,IANwBvlC,EAMxB,uDANgC,CACNmmD,UAAW,EACXK,YAAa,UAAa,UAAW72D,aAAa8wH,cAClDshH,WAAY,EACZC,kBAAmB,GAG5CnwL,EAAQtM,EAAM6R,WAETl3D,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC,GAAI2xD,EAAM3xD,GAAG4N,WAAWkpD,WAAY,CAClC1H,EAAIyuG,OACJzuG,EAAI+W,YACJxU,EAAM3xD,GAAG6jM,aAAeA,EACxBz0I,EAAI6W,UAAYnmD,EAAMmmD,UACtB7W,EAAI2yL,YAAe3yL,EAAIkX,YAAcxmD,EAAMwmD,YAC3ClX,EAAIyyL,WAAa/hO,EAAM+hO,WAEvB,IAAI/6G,GAAUA,EAAVA,cAAcn1E,EAAM3xD,GAAGgkE,IACvB6iE,GAAYA,EAAZA,cAAgBl1E,EAAM3xD,GAAGk9D,MACzBp9C,EAAMgiO,kBAAoB,IAC5Bj7G,EAAY,CAAC9zE,KAAK,IAAA40B,mBAAkBh2B,EAAM3xD,GAAGk9D,KAAMvL,EAAM3xD,GAAGgkE,GAAI,IAChE8iE,EAAU,CAAC/zE,KAAK,IAAA40B,mBAAkBh2B,EAAM3xD,GAAGgkE,GAAIrS,EAAM3xD,GAAGk9D,KAAM,KAEhE,IAAMssG,EAAW73G,EAAM3xD,GAAGupK,wBAAwBziC,GAC5CwiC,EAAa33G,EAAM3xD,GAAGupK,wBAAwB1iC,GAEpDz3E,EAAIgX,OAAOojG,EAAS3jJ,EAAG2jJ,EAAS1jJ,GAChCspC,EAAIiX,OAAOijG,EAAWzjJ,EAAGyjJ,EAAWxjJ,GACpC6rC,EAAM3xD,GAAG6jM,aAAe,KAExBz0I,EAAImX,SACJnX,EAAI6tG,YACJ7tG,EAAI0uG,Y,EAKHkkF,kBAAoB,SAAC5yL,EAAKy0I,EAAcx+I,GAC7C,IAAIsM,EAAQtM,EAAM6R,WAClB9H,EAAIyuG,OACJzuG,EAAI+W,YACJ/W,EAAI6W,UAAY,EAChB7W,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAaqrJ,qBACrD,IAAK,IAAI96J,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAAK,CAErC,GADA2xD,EAAM3xD,GAAG6jM,aAAeA,EACd,IAAN7jM,EAAS,CACX,IAAMspK,EAAa33G,EAAM3xD,GAAGupK,wBAAwB53G,EAAM3xD,GAAGk9D,MAC7D9N,EAAIgX,OAAOkjG,EAAWzjJ,EAAGyjJ,EAAWxjJ,GAEtC,IAAM0jJ,EAAW73G,EAAM3xD,GAAGupK,wBAAwB53G,EAAM3xD,GAAGgkE,IAC3D5U,EAAIiX,OAAOmjG,EAAS3jJ,EAAG2jJ,EAAS1jJ,GAEhC6rC,EAAM3xD,GAAG6jM,aAAe,KAItBx+I,EAAMyR,eACW,UAAMlpD,WACOytD,cAAci4C,eACzB,EAAA50D,qBAAqBx7B,SACxCksC,EAAIwuG,UAAY,SAAO79B,MAI3B3wE,EAAI6tG,YACJ7tG,EAAImX,SACJnX,EAAI88E,OACJ98E,EAAI0uG,W,EAGCmkF,uBAAyB,SAAC7yL,EAAKy0I,EAAcx+I,GAGlD,IAFA,IAAIsM,EAAQtM,EAAM6R,WAETl3D,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAAK,CAErC,GADA2xD,EAAM3xD,GAAG6jM,aAAeA,EACpBlyI,EAAM3xD,GAAG4N,WAAW80L,cAAcC,mBAAoB,CACxD,IAAMu/C,GAAqB,IAAA9nC,2BAA0BzoJ,EAAM3xD,IAE3D,GADAovD,EAAIyuG,OACAlsG,EAAM3xD,GAAG82D,aACQ,UAAMlpD,WACOytD,cAAci4C,eACzB,EAAA50D,qBAAqBx7B,SACxCksC,EAAIkX,YAAc,SAAOy5D,KAG7B,UAAeoiH,mBAAmB/yL,EAAK8yL,GACvC9yL,EAAI0uG,UAENnsG,EAAM3xD,GAAG6jM,aAAe,O,EAIrBu+C,gBAAkB,SAAChzL,EAAKy0I,EAAcx+I,GAG3C,IAFA,IAAIsM,EAAQtM,EAAM6R,WAETl3D,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAAK,CACrC2xD,EAAM3xD,GAAG6jM,aAAeA,EACxB,IAAMw+C,EAAY1wL,EAAM3xD,GAAG4N,WAC3B,GAAIy0O,EAAU3/C,eAAiB2/C,EAAU3/C,cAAcE,aAAc,CAEnE,GADAxzI,EAAIyuG,OACAlsG,EAAM3xD,GAAG82D,aACQ,UAAMlpD,WACOytD,cAAci4C,eACzB,EAAA50D,qBAAqBx7B,SACxCksC,EAAIkX,YAAc,SAAOy5D,KAG7B,UAAeuiH,aAAalzL,EAAKuC,EAAM3xD,IACvCovD,EAAI0uG,UAENnsG,EAAM3xD,GAAG6jM,aAAe,O,EAIrB0+C,YAAc,SAACnzL,EAAK/J,GAEzB,IADA,IAAIsM,EAAQtM,EAAM6R,WACTl3D,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC,GAAI2xD,EAAM3xD,GAAGmkM,eAAgB,CAC3B,IAAM9lH,GAAW,IAAAZ,aAAY9rB,EAAM3xD,GAAGk9D,KAAMvL,EAAM3xD,GAAGgkE,IAC/Cw+K,GAAiB,IAAAxsL,eAAcqoB,EAASx4D,EAAGw4D,EAASv4D,EAAGu/B,GAC7D,UAAcy7G,aAAa1xG,EAAKozL,K,EAK/BpC,cAAgB,SAAChxL,EAAK/J,GAE3B,IAAMi9E,EAAqBj9E,EAAMkgG,cAAck9F,wBAC/C,GAAIngH,EACF,IAAK,IAAItiI,KAAKsiI,EACZA,EAAmBtiI,GAAG6J,SAAQ,SAAA64O,GAC5BtzL,EAAI+W,YACJ/W,EAAIuuG,IAAI+kF,EAAS78N,EAAG68N,EAAS58N,EAAG,GAAI,EAAG,EAAIjQ,KAAKqnE,IAChD9tB,EAAImX,SACJnX,EAAI6tG,eAKV7tG,EAAI+W,YACJ,IAAIw8K,GAAK,IAAA3sL,eAAc3Q,EAAM8/G,QAAQt/I,EAAGw/B,EAAM8/G,QAAQr/I,GACtDspC,EAAIuuG,IAAIglF,EAAG98N,EAAG88N,EAAG78N,EAAG,GAAI,EAAG,EAAIjQ,KAAKqnE,IACpC9tB,EAAImX,SACJnX,EAAI6tG,YAGJ,IAAMx2B,EAAcphF,EAAMkgG,cAAcwkB,sBACpCtjC,IACFr3E,EAAI+W,YACJ/W,EAAIkX,YAAc,UAClBq8K,GAAK,IAAA3sL,eAAcywE,EAAY5gH,EAAG4gH,EAAY3gH,GAC9CspC,EAAIuuG,IAAIglF,EAAG98N,EAAG88N,EAAG78N,EAAG,EAAG,EAAG,EAAIjQ,KAAKqnE,IACnC9tB,EAAImX,SACJnX,EAAI6tG,c,aA1dW4iF,G,8ECtBrB,I,IAAA,M,IACA,OACA,S,IACA,O,IACA,QACA,Q,mDAEA,IAAM+C,EAAmB,CACvB1+G,cAAe,WAEb,OADe,UAAUttE,YACXnkD,QAAO,SAAAylD,GAAA,OAAOA,EAAIrhD,OAAS,EAAA6mC,WAAWK,eAEtDqmF,cAAe,WAEb,OADc,UAAMx2H,WACPwH,cAAckuD,mBAE7Bu/K,wDAAyD,WAEvD,OADe,UAAUjsL,YACXnkD,QAAO,SAAAylD,GAAA,OAAOA,EAAIrhD,OAAS,EAAA6mC,WAAWK,YAChD,EAAAkM,4DAA4DrkD,SAASsyD,EAAI2I,aAE/EiiL,eAAgB,WAEd,IADA,IAAIC,EAAgB,UAAMn1O,WAAWwH,cAAckuD,kBAC1CtjE,EAAI+iP,EAAc7iP,OAAS,EAAGF,GAAK,EAAGA,IAC7C+iP,EAAc/iP,GAAGwjE,oBAGrBw/K,kBAAmB,WAEjB,IADA,IAAID,EAAgB,UAAMn1O,WAAWwH,cAAckuD,kBAC1CtjE,EAAI+iP,EAAc7iP,OAAS,EAAGF,GAAK,EAAGA,IAC7C+iP,EAAc/iP,GAAGo+I,gBAGrB6kG,sBAAuB,WACrB,IACIC,EADY,UAAMt1O,WAAWwH,cACHkuD,kBAC1B6wF,EAAa,GAHgB,uBAIjC,YAAwB+uF,EAAxB,+CAAuC,KAA/BC,EAA+B,QACrChvF,EAAW3zJ,KAAK2iP,EAAaz4E,WALE,6EAQjC,OAAOvW,GAGT76F,oBAAqB,WACL,UAAM1rD,WACGwH,cAAckuD,kBACtBpjE,OAAS,GACtB,UAAMwvB,UAAS,IAAAq1C,0BAAyB,MAO5C5J,iBAAkB,SAAUz7D,GAC1B,GAAoB,IAAhBA,EAAKQ,OAAT,CAIA,IAAIkjP,EAAkB,GALU,uBAMhC,YAA4B1jP,EAA5B,+CAAkC,KAA1B2jP,EAA0B,QAC5BlpL,EAAQ,IAAI8B,MAChB9B,EAAM3vD,IAAM64O,EAAiBlpL,MAAM3vD,IAEnC,IAAI84O,EAAiB,UAAUxnL,SAC7B3B,EACAkpL,EAAiBt0O,KAAK3D,MACtBi4O,EAAiBt0O,KAAKzD,OACtB,KACA,KACA,YACA,MACA,cACA+3O,EAAiBtwL,IACjB,KACAswL,EAAiB5vO,GACjB,UAAiB4xD,WAAWokC,WAC5B45I,EAAiBxoL,WACjB,GAGFyoL,EAAe1pL,WAAW,CAACc,kBAAmB2oL,EAAiB3oL,oBAC/D0oL,EAAgB5iP,KAAK8iP,IA5BS,6EA+BhC,UAAM5zN,UAAS,IAAAq1C,0BAAyBq+K,SA7BtCR,EAAiBtpL,uBA+BrBiqL,WAAY,WACV,IAAM3kM,EAAS,UAAUgY,YADJ,uBAErB,YAAkBhY,EAAlB,+CAA0B,KAAjByG,EAAiB,QACpBA,aAAiBA,EAAjBA,SAAgD,cAAfA,EAAMxuC,MACzCwuC,EAAMme,oBAJW,+EAQvBggL,cAAe,WACb,IAAM5kM,EAAS,UAAUgY,YADD,uBAExB,YAAkBhY,EAAlB,+CAA0B,KAAjByG,EAAiB,QACpBA,aAAiBA,EAAjBA,SAAgD,cAAfA,EAAMxuC,MACzCwuC,EAAM+4F,gBAJc,+EAQ1BqlG,cAAe,WACb,IAAMvoL,EAAY,UAAUvH,eAAe4gK,eADnB,uBAExB,YAAoBr5J,EAApB,+CAA+B,SACrBsI,oBAHc,+EAM1BkgL,iBAAkB,WAChB,IAAMxoL,EAAY,UAAUvH,eAAe4gK,eADhB,uBAE3B,YAAoBr5J,EAApB,+CAA+B,SACrBkjF,gBAHiB,+EAM7B6G,qBAAsB,SAAS5hF,GAC7B,IAAIt0D,EAAOs0D,EAAaklG,UACxB,MAAO,CACLloB,KAAO,EACPC,KAAOvxI,EAAK3D,MACZm1I,KAAO,EACPC,KAAOzxI,EAAKzD,U,UAKHs3O,G,gPC/Hf,I,IAAA,O,IACA,Q,IACA,O,IACA,O,IACA,Q,IACA,MACA,Q,IACA,Q,IACA,Q,IACA,O,mDAEiCe,EAApBA,kBAAoB,WAC/B,UAAMj0N,UAAS,IAAAykF,2BAAyB,IAExC,UAAc2tE,oBACd,UAAct+G,mBACd,UAAiBs/K,iBACjB,UAAiB9kG,iBACjB,UAAiBK,iBAEjB,UAAgB3kF,oBAEhB,UAAiBgqL,mBACjB,UAAiBF,gBACjB,UAAiBjkG,yBACjB,UAAiBI,oBAEjB,UAAcv7E,qBAAqBw/K,wBAGPC,EAAjBA,eAAiB,WAA+C,IAA9CC,EAA8C,wDAC3E,UAAMp0N,UAAS,IAAAykF,2BAAyB,IACxC,UAAW9lD,UAAUqC,YAAa,EAClC,UAAiBsyL,oBACjB,UAAiB/jG,2BACjB,UAAiBE,6BACjB,UAAiBhB,oBACjB,UAAiBG,oBAEjB,UAAgB21D,oBAEhB,UAAc7vI,qBAAqB2/K,0BACnC,UAAc3/K,qBAAqB4/K,8BACnC,UAAc5/K,qBAAqB6/K,wBACnC,UAAc7/K,qBAAqB8/K,6BACnC,UAAc9/K,qBAAqB+/K,oBACnC,UAAc//K,qBAAqBggL,0BACnC,UAAc7iE,eAEd,UAAiBgiE,aACjB,UAAiBE,gBACjB,UAAiBjkG,iBACjB,UAAiBF,sBAEbwkG,GACFlgP,OAAOu2F,YAAW,WAChB,UAA8BjmC,4BAC9B,UAA8BwoF,iCAC9B,UAAqB7zF,mBAAmBsL,2BAA0B,KACjE,IAKsCo7I,EAAhCA,8BAAgC,WAC3C,UAAcnrI,qBAAqB2/K,0BACnC,UAAc3/K,qBAAqB6/K,wBACnC,UAAc7/K,qBAAqBw/K,wBAGJ1vB,EAApBA,kBAAoB,WAC/B,UAAWziK,UAAUI,aAAc,EACnC,IAAMs/G,EAAetsK,SAAS02F,eAAe,iBACzC41E,IACFA,EAAarxJ,MAAMwxJ,QAAU,QAG/B,UAAU16G,YAAY/sD,SAAQ,SAACw7C,GACzBhyC,MAAMC,QAAQ+xC,EAAMkhH,mBAAqBlhH,EAAMkhH,iBAAiBrmK,QAClEmlD,EAAMurH,4BAK0CyzE,EAAzCA,uCAAyC,SAACh2L,GAAc,MAClC,UAAiBoyF,yBAAyBpyF,GAAW,GAA/EgyF,EAD4D,EAC5DA,KAAMC,EADsD,EACtDA,KAAMC,EADgD,EAChDA,KAAMC,EAD0C,EAC1CA,KACrB8jG,EAAWzuO,KAAK4pE,IAAI4gE,GAAQxqI,KAAK4pE,IAAI6gE,GAAQzqI,KAAK4pE,IAAI4gE,GAAQxqI,KAAK4pE,IAAI6gE,GACvEikG,EAAW1uO,KAAK4pE,IAAI8gE,GAAQ1qI,KAAK4pE,IAAI+gE,GAAQ3qI,KAAK4pE,IAAI8gE,GAAQ1qI,KAAK4pE,IAAI+gE,GAEvEgkG,EAAaF,EAAW,UAAW92L,MAAQ33C,KAAK0nE,IAAI,UAAW9vB,aAAc,GAAK,IAAM,UAAWD,MAAQ,UAAWC,aACtHg3L,EAAcF,EAAW,UAAW/2L,MAAQ33C,KAAK0nE,IAAI,UAAW9vB,aAAc,GAAK,IAAM,UAAWD,MAAQ,UAAWC,aAQ3H,OALI7pD,OAAOwqD,WAAa,OACtBo2L,GAAc,KACdC,GAAe,MAGV,CAACD,EAAYC,IAGgBz7G,EAAzBA,uBAAyB,SAAC55E,GACrC,IAAMs1L,EAAgBt1L,EAAI4oL,KAAK/nO,MAAM,OACrC,OAAOy0O,EAAgB3wO,OAAO2wO,EAAc,IAAM,O,qJCvGpD,QACA,Q,uDAMqBC,E,YAEnB,WAAYp6J,GAAS,iGACbA,I,uIAMN,IAAMq6J,EAAuBn5O,KAAKU,YAAYA,YAC9Cy4O,EAAqBC,oBACrBD,EAAqBE,aAAar5O,KAAKs5O,e,kCAG7B3kO,IACV,qGAAkBA,GAEd3U,KAAK4jF,2BAA4B,IAAAlvE,oBAAmB1U,QAiBxDA,KAAKu5O,8BACLv5O,KAAK4mF,oB,6CAcL,OAViBpG,EAAbA,+G,2CAcJ,IAAM24J,EAAuBn5O,KAAKU,YAClC,OAAQy4O,EAAqB/vJ,wBAA0B+vJ,EAAqBrpG,YAAc9vI,KAAKs5O,c,4CAI/F,OAAQt5O,KAAKgmF,yB,iCA1DIkzJ,G,spBCoRLM,wB,EAoEAC,4B,EAKAC,qBAAT,SAA+B/6N,EAAgBg7N,GACpD,IAAMC,EAAyBH,EAA0B96N,EAAgBg7N,GACnEh6O,EAAQk6O,EAAsBl7N,EAAehb,UAAWi2O,GACxDz8E,EAAQ28E,EAAsBn7N,EAAehb,UAAWi2O,GACxD/5O,EAASk6O,EAAuBp7N,EAAehb,UAAWi2O,GAEhE,MAAO,CAAEj6O,MAAOA,EAAOE,OAAQA,EAAQs9J,MAAOA,I,EAGhC0C,yCAAT,SAAmDm6E,EAAmCC,GAC3F,IAQMC,GARqB/mO,EAQc8mO,EAAsBnxO,kBAPzDqK,EAAIhZ,SAAS,KACDgZ,EAAIpV,MAAM,KACX,GAAGof,OAEThK,EAAIgK,QAIXyiJ,EAAoBo6E,EAAkCluO,MAAK,SAAA6S,GAAA,OAC7DA,EAAe7V,oBAAsBoxO,KAVb,IAAC/mO,EActBysJ,IACHA,EAAoBo6E,EAAkCluO,MAAK,SAAA6S,GAAA,OACzDA,EAAe7V,kBAAkB3O,SAAS+/O,OAI9C,OAAOt6E,GAlYT,I,IAAA,S,IACA,MACA,U,IACA,QACA,QACA,QACA,UACA,Q,IACA,OACA,Q,mDAE8Bu6E,EAAjBA,gBAAA,gCAAiB,WAAO/iO,GAAP,mGAEP,UAAO24E,UAAU34E,GAFV,cAEtBgjO,EAFsB,QAKtBt1L,EAAS1rD,SAAS8oD,cAAc,WAC/BviD,MAAQ,IACfmlD,EAAOjlD,OAAS,IACV8jD,EAAMmB,EAAOsqC,WAAW,OAGxBt9B,EAAM,IAAItB,OACZzxD,IAAMq7O,EAGVz2L,EAAI2rC,UAAUx9B,EAAK,EAAG,EAAGhN,EAAOnlD,MAAOmlD,EAAOjlD,QAflB,kBAkBrBilD,EAAOirC,aAlBc,mDAAjB,6CAAN,IAAM,EA8NA,EAWA,EAIA,EAxNAsqJ,EAA4BA,EAA5BA,0BAA4B,SAAC12O,EAAW22O,GACnD,GAAI32O,GAAaA,EAAUi2O,wBAA0BU,EAAmB,CACtE,IAAMC,EAAiB52O,EAAUi2O,uBAAuBU,GAGxD,GAAIC,EACF,IAEE,OAAOpmI,KAAKC,MAAMmmI,GAClB,MAAOtiP,GAKP,OAHAD,QAAQ4B,IAAI,sBAAuB3B,EAAM89C,SACzC/9C,QAAQ4B,IAAI,sBAAuB2gP,GACnCviP,QAAQ4B,IAAI,YAAa+J,EAAUmF,mBAC5B,UAGT9Q,QAAQ4B,IAAI,6BAA8B+J,EAAUqE,IAIxD,OAAO,MAGIwyO,EAA2BA,EAA3BA,yBAA2B,SAACZ,GACvC,OAAIA,GAA0BhyO,MAAMC,QAAQ+xO,EAAuBa,QAAUb,EAAuBa,MAAMhmP,OACjGuU,WAAW4wO,EAAuBa,MAAM,IAE1C,MAGIC,EAA2BA,EAA3BA,yBAA2B,SAACd,GACvC,OAAIA,GAA0BhyO,MAAMC,QAAQ+xO,EAAuBe,QAAUf,EAAuBe,MAAMlmP,OACjGuU,WAAW4wO,EAAuBe,MAAM,IAE1C,MAGIC,EAA4BA,EAA5BA,0BAA4B,SAAChB,GACxC,OAAIA,GAA0BhyO,MAAMC,QAAQ+xO,EAAuBiB,SAAWjB,EAAuBiB,OAAOpmP,OACnGuU,WAAW4wO,EAAuBiB,OAAO,IAE3C,MAUIC,GAPkBC,EAAlBA,gBAAkB,SAACnB,GAC9B,OAAIA,GAA0BhyO,MAAMC,QAAQ+xO,EAAuBoB,eAAiBpB,EAAuBoB,aAAavmP,OAC/GmlP,EAAuBoB,aAAa,GAEtC,MAG8BF,EAA1BA,wBAA0B,SAAClB,GACtC,OAAIA,GAA0BhyO,MAAMC,QAAQ+xO,EAAuBqB,WAAarB,EAAuBqB,SAASxmP,OACvGmlP,EAAuBqB,SAAS,GAElC,OAGIC,EAA0BA,EAA1BA,wBAA0B,SAACv3O,GACtC,GAAIA,EAAUwb,YAAa,CAEzB,OAD0By5L,EACF,QADUh5M,SAAS+D,EAAUwb,YAAYzhB,OAAOiG,EAAUwb,YAAYnlB,QAAQ4+M,GAAOA,EAAInkN,OAAS,EAAG,GAAI,IAAxG,IAACmkN,EAG5B,OAAO,MAGIuiC,EAA0BA,EAA1BA,wBAA0B,SAACx3O,GACtC,GAAIA,EAAUwb,YAAa,CAEzB,OAD0By5L,EACF,QADUh5M,SAAS+D,EAAUwb,YAAYzhB,OAAOiG,EAAUwb,YAAYnlB,QAAQ4+M,GAAOA,EAAInkN,OAAS,EAAG,GAAI,IAAxG,IAACmkN,EAG5B,OAAO,MAGIwiC,EAA2BA,EAA3BA,yBAA2B,SAACz3O,GACvC,GAAIA,EAAUwb,YAAa,CAEzB,OAD0By5L,EACF,SADUh5M,SAAS+D,EAAUwb,YAAYzhB,OAAOiG,EAAUwb,YAAYnlB,QAAQ4+M,GAAOA,EAAInkN,OAAS,EAAG,GAAI,IAAxG,IAACmkN,EAG5B,OAAO,MAGIihC,EAAwBA,EAAxBA,sBAAwB,SAACl2O,EAAWi2O,GAC/C,IAAIj6O,EAAQ+6O,EAAyBd,GAIrC,OAHKj6O,IACHA,EAAQw7O,EAAwBx3O,IAE3BhE,GAGIm6O,EAAwBA,EAAxBA,sBAAwB,SAACn2O,EAAWi2O,GAC/C,IAAIz8E,EAAQq9E,EAAyBZ,GAIrC,OAHKz8E,IACHA,EAAQ+9E,EAAwBv3O,IAE3Bw5J,GAGI48E,EAAyBA,EAAzBA,uBAAyB,SAACp2O,EAAWi2O,GAChD,IAAI/5O,EAAS+6O,EAA0BhB,GAIvC,OAHK/5O,IACHA,EAASu7O,EAAyBz3O,IAE7B9D,GASIw7O,GANcC,EAAdA,YAAc,SAACC,GAE1B,OADgBA,EAAMzvO,MAAK,SAAA0vO,GAAA,OAAQA,EAAK/pD,SAAS,YAC/B,MAIW4pD,EAAlBA,gBAAkB,SAACloO,GAC9B,OAAOA,EAAI7W,cAAcqC,QAAQ,UAAW,MAIjC88O,EAAoBA,EAApBA,kBAAoB,SAACtoO,GAEhC,OAAOA,EAAIpV,MAAM,WAAW+J,IAAIuzO,IAIrBK,EAAeA,EAAfA,aAAe,SAACC,EAAYC,GACvC,IAAMC,EAAmBJ,EAAkBE,GAG3C,OAAOC,EAAmB9vO,MAAK,SAAAsL,GAC7B,IAAM0kO,EAAWL,EAAkBrkO,EAAI9a,cAAcyB,MAAM,KAAKw2I,MAAMx2I,MAAM,KAAK,IACjF,OAAO89O,EAAiBh+O,OAAM,SAAA2d,GAAA,OAAQsgO,EAAS3hP,SAASqhB,UAsC/CugO,GAjCsBC,EAAtBA,oBAAsB,SAAC34O,GAElC,IAAKA,IAAYA,EAAQmV,gBAAoD,mBAA3BnV,EAAQmV,iBAAkCnV,EAAQM,UAElG,OADA3L,QAAQ4B,IAAI,yCACL,KAGT,IAAMiiP,EAAmBJ,EAAkBp4O,EAAQmV,kBAGnD,IAAK5Q,MAAMC,QAAQxE,EAAQM,UAAUi4O,oBAEnC,OADA5jP,QAAQ4B,IAAI,yDAA0DyJ,EAAQM,UAAUqE,IACjF,KAGT,IAGMi0O,EAHqB54O,EAAQM,UAAUi4O,mBAAmB50O,QAAO,SAAAoQ,GAAA,OAAOA,EAAIq6K,SAAS,WAG/C3lL,MAAK,SAAAsL,GAC/C,IAAM0kO,EAAWL,EAAkBrkO,EAAI9a,cAAcyB,MAAM,KAAKw2I,MAAMx2I,MAAM,KAAK,IAEjF,OAAO89O,EAAiBh+O,OAAM,SAAA2d,GAAA,OAAQsgO,EAAS3hP,SAASqhB,SAI1D,OADAxjB,QAAQ4B,IAAI,mBAAoBqiP,GAC5BA,GAIG,MAIgCF,EAA5BA,0BAA4B,SAAC3kO,GAGxC,MADgB,eACD7Z,KAAK6Z,KAyCT8kO,GArCcC,EAAdA,YAAc,SAAChpO,GAC1B,MAAyB,MAAlBA,EAAIF,OAAO,IAIOmpO,EAAdA,YAAc,SAACxiM,GAC1B,IAAM1+B,GAAS,IAAAC,oBACTkkJ,EAAuBnkJ,EAAOo2F,eAAe13D,EAAMu4F,wBAAwB,GACjF,GAAIktB,EAAsB,CACxB,IAAIg9E,EAAiBh9E,EAAqB17J,UAAUwa,gBAAgBrS,MAAK,SAAA6S,GAAA,OAAkBA,EAAe3W,KAAO4xC,EAAMwV,aACvH,IAAKitL,EAAgB,CACnB,IAAMC,EAAephO,EAAOo2F,eAAe13D,EAAMwV,WAAW,GACxDktL,IACFD,EAAiBC,EAAa34O,WAGlC,IAAMyT,EAAMoiO,EAAsB6C,EAAgBh9E,GAAsB1gK,QAAQ,YAAa,QAEvFmU,EAAWunO,EAA0BgC,EAAgBjlO,GACrD+sF,EAAW22I,EAAwBhoO,GACnCkjI,EAAcp8F,EAAMs8F,aAAet8F,EAAMs8F,aAAaC,iBAAmBv8F,EAAMq8F,YAErF,MAAoB,SAAb9xC,GAAuB43I,EAA0B3kO,IAAQ4+H,GAAe,KAIvCumG,EAA/BA,8BAAA,gCAA+B,mBAAMC,EAAN,kIACpCC,EAAe,EAAAC,YAAYC,mBAAmBH,GACpDxkP,QAAQ4B,IAAI,wBAAyB6iP,GAEjC,UAAWlgN,OAAOmqB,YAAc,EAAAzI,qBAAqBC,YAJf,gCAKlC0+L,EAAmBH,GALe,6CAOlCP,EAA2BO,GAPO,kDAA/B,4CAW6BP,EAA7BA,4BAAA,gCAA6B,WAAMO,GAAN,uEACxC,UAAMx4N,UAAS,IAAAsgG,oBAAmBk4H,IADM,kDAA7B,8CAIAG,EAAqBA,EAArBA,oBAAA,gCAAqB,WAAMH,GAAN,wFAC1B11O,EAAQ,UAAM5E,YACV4L,UAAU68F,wBAClB7jG,EAAMgH,UAAU68F,uBAAuBiyI,QAGrCC,OAN4B,WAQ9B,UAAM74N,UAAS,IAAA0gG,oBAAmB,OAC5Bo4H,EAAkB,IAAIC,gBAC5B,UAAM/4N,UAAS,IAAA0mF,oBAAmBoyI,IAVJ,SAWX,UAAYE,eAAeR,EAAc,CAAEzqD,OAAQ+qD,EAAgB/qD,SAXxD,OAW9B8qD,EAX8B,yDAaf,eAAX,KAAErmP,MACJ,UAAMwtB,UAAS,IAAA0gG,oBAAA,OAda,QAiBhC3sH,QAAQ4B,IAAI,+BAAgCkjP,GAe5C,UAAM74N,UAAS,IAAAsgG,oBAAmBu4H,EAAaA,EAAWI,MAAQ,OAhClC,4DAArB,6CAmCN,SAAS1D,EAAsB71O,EAAW07J,GAI/C,IAAK17J,IAAc07J,EAEjB,OADArnK,QAAQ4B,IAAI,yCACL,KAGT,IAAKgO,MAAMC,QAAQlE,EAAUi4O,oBAE3B,OADA5jP,QAAQ4B,IAAI,yDAA0D+J,EAAUqE,IACzE,KAGT,IAAMm1O,EAA2B99E,EAAqB7mJ,iBAGhD4kO,GAAa,IAAAC,oBAAmB15O,EAAUi4O,oBAG1C0B,EAAyB5B,EAAar8E,EAAqB17J,UAAUmF,kBAAmBs0O,GAC9F,GAAIE,EACF,OAAOA,EAIT,IAAMrB,EAAmBP,EAAayB,EAA0BC,GAChE,GAAInB,EACF,OAAOA,EAIT,IAAMsB,GAAkB,IAAAC,mBAAkBJ,EAAY/9E,EAAqB17J,UAAUmF,mBACrF,GAAIy0O,EACF,OAAOA,EAIT,IAAME,GAAiC,IAAAD,mBAAkBJ,EAAYD,GACrE,GAAIM,EACF,OAAOA,EAIT,IAAIC,EAAcN,EAAWtxO,MAAK,SAAAsL,GAAA,OAAOA,EAAIjd,SAASgjP,MACtD,GAAIO,EACF,OAAOA,EAIT,IAAMjyI,EAAQ4zD,EAAqBhgF,eACnC,OAAIosB,GAASA,EAAMh3G,OAAS,IAC1BipP,EAAcN,EAAWtxO,MAAK,SAAAsL,GAAA,OAAOA,EAAIjd,SAASsxG,OAEzCiyI,GAKXA,EAAcN,EAAWtxO,MAAK,SAAAsL,GAAA,OAAOA,EAAI9a,cAAcnC,SAAS,eAMzDijP,EAAW,IAAM,MAGnB,SAAS3D,EAA2B96N,EAAgBg7N,GACzD,IAAMviO,EAAMoiO,EAAsB76N,EAAehb,UAAWg2O,GAC5D,OAAOU,EAA0B17N,EAAehb,UAAWyT,K,+cCjW7D,UACA,SACA,UACA,S,mDAEO,IAAM8tD,EAAkBA,EAAlBA,gBAAkB,kBAClBC,EAAyBA,EAAzBA,uBAAyB,yBACzBE,EAAyBA,EAAzBA,uBAAyB,yBACzBC,EAA6BA,EAA7BA,2BAA6B,6BAC7BC,EAAiCA,EAAjCA,+BAAiC,iCACjCG,EAAqCA,EAArCA,mCAAqC,qCAuBrC+qD,GAtB8B9qD,EAA9BA,4BAA8B,8BAEdg4K,EAAhBA,cAAgB,WAC3B,uCAAO,WAAO15N,GAAP,sGAC6B,IAAA25N,4BAD7B,gBACEzjJ,EADF,EACEA,YAAYliG,EADd,EACcA,OAEjBgsB,GAAS,IAAA45N,eAAa,IAAAC,qBAAoB7lP,KAChCkiG,EAAW1lG,QACrBwvB,GAAS,IAAA45N,eAAa,IAAAC,qBAAoB,sBAExC1kP,SAASC,SAASkC,SACpBvD,QAAQ4B,IAAI,aAAcugG,GAEtB4jJ,EAAen2O,MAAMC,QAAQsyF,EAAWA,YAAcA,EAAWA,WAAaA,EAC9E6jJ,EAAiB5kP,SAASC,SAAS2+G,UACrC+lI,EAAajyO,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAO5O,SAASC,SAAS2+G,aAC9D+lI,EAAa,GACjB95N,EAASw/G,EAAoBu6G,IAC7B/5N,EAASwsG,EAAct2B,IAflB,mDAAP,mDAmB2Bs2B,EAAhBA,cAAgB,SAACt2B,GAAD,MAAiB,CAC5C/uF,KAAM85D,EACNrkD,QAAS,CAACs5E,iBAICspC,EAAsBA,EAAtBA,oBAAsB,SAAC7yH,GAClC,OAAO,SAACqT,GAINA,EAAS,CACP7Y,KAAM+5D,EACNtkD,QAAS,CACPjQ,mBAEA5D,WAAY,OAMe42H,EAAtBA,oBAAsB,SAACx5G,GAClC,OAAO,SAACnG,EAAU9hB,GAAa,IAEtBwO,EAAexO,IAAfwO,YAEHmzH,EAAyBnzH,EAAYmzH,uBACrCC,EAAervI,OAAO+2B,OAAO,GAAI9a,EAAYG,sBAC7CH,EAAYmzH,uBAAuBrvI,SACrCC,OAAOmc,KAAKF,EAAYG,sBAAsBsuG,UAAUhhH,SAAQ,SAAA4lI,GAC1DA,GAAqB55G,UAChB25G,EAAaC,MAGxBF,EAAyB,IAE3B,IAAIz5G,EAAmB1Z,EAAY0Z,iBAC/B1Z,EAAYC,mBACdyZ,EAAmB1Z,EAAY0Z,iBAAiBviB,KAAI,SAAAm8H,GAQlD,OANIA,EAAU7oB,eAAiBzqG,EAAYC,iBAAiB5I,IAA+B,IAAzBi8H,EAAUj3H,aAC1Ei3H,EAAUC,gBAAkB95G,EACxBzZ,EAAYmzH,uBAAuBrvI,SACrCwvI,EAAUnzH,qBAAuBpc,OAAO+2B,OAAO,GAAIs4G,KAGhDE,MAIXhgH,EAAS,CACP7Y,KAAMi6D,EACNxkD,QAAS,CACPuJ,mBACAtZ,qBAAsBizH,EACtBD,yBACAz5G,mBAEArd,WAAY,OAMmBo3H,EAA1BA,wBAA0B,SAACtzH,GAA4D,IAAtCuzH,EAAsC,wDAAtBjqC,EAAsB,uDAAT,KACzF,OAAO,SAACn2E,EAAU9hB,GAAa,IACtBwO,EAAexO,IAAfwO,YACDC,EAAmBwpF,GAAczpF,EAAYC,iBAE/CkzH,EAAyBnzH,EAAYmzH,uBAErCC,EAAeM,EACf3vI,OAAO+2B,OAAO,GAAI3a,GAClBpc,OAAO+2B,OAAO,GAAI9a,EAAYG,qBAAsBA,GASxD,IAPKuzH,GAAUvzH,GAAqE,IAA7Cpc,OAAOmc,KAAKC,GAAsBrc,SACvEqvI,GAAyB,IAAAkB,2BACvBjB,EACA,CAACnzH,mBAAkB5D,WAAY,EAAG8D,0BAIlCF,EAAJ,CAGE,IAAMyZ,EAAmBy5G,EAAuBrvI,OAC5Ckc,EAAY0Z,kBACZ,IAAA46G,2BAA0Bt0H,EAAa,EAAGC,EAAiB5I,GAAI+7H,GAEnE9/G,EAAS,CACP7Y,KAAMk6D,EACNzkD,QAAS,CACP7T,WAAY,EACZ8D,qBAAsBizH,EACtB15G,mBACAy5G,iCAON7/G,EAAS,CACP7Y,KAAMk6D,EACNzkD,QAAS,CACP/P,qBAAsBizH,EACtBD,yBAEA92H,WAAY,OASsBk4H,EAA7BA,2BAA6B,SAACp0H,EAAsB9D,EAAYouG,GAAnC,MAAqD,CAC7FhwG,KAAMm6D,EACN1kD,QAAS,CAAC/P,uBAAsB9D,aAAYouG,kBAGT2qB,EAAxBA,sBAAwB,SAAC17G,GAAD,MAAuB,CAC1Djf,KAAMs6D,EACN7kD,QAAS,CAACwJ,uB,ihBC9JZ,SACA,SACA,S,mDAEO,IAAM4zN,EAAuBA,EAAvBA,qBAAuB,uBACvBC,EAAuBA,EAAvBA,qBAAuB,uBACvBC,EAAmCA,EAAnCA,iCAAmC,mCACnCC,EAA6BA,EAA7BA,2BAA6B,6BAC7BC,EAAiCA,EAAjCA,+BAAiC,iCACjCC,EAAmBA,EAAnBA,iBAAmB,mBAgBnBC,GAfqBC,EAArBA,mBAAqB,SAACxW,GAAD,MAAW,CAC3C58N,KAAM6yO,EACNp9N,QAASmnN,IAGuByW,EAArBA,mBAAqB,eAACC,EAAD,uDAAQ,GAAIC,EAAZ,uDAAuB,GAAvB,MAA+B,CAC/DvzO,KAAM8yO,EACNr9N,QAAS,CAAC69N,OAAMC,cAG0BC,EAA/BA,6BAA+B,SAACC,GAAD,MAAuB,CACjEzzO,KAAM+yO,EACNt9N,QAASg+N,IAG6BN,EAA3BA,yBAA2B,SAACO,GACvC,OAAO,SAAC76N,EAAU9hB,GAAa,MACkBA,IAAW48O,iBAAnDC,EADsB,EACtBA,gBAAiBC,EADK,EACLA,oBACpBp+N,EAAU,CACZi+N,6BAEF,GAAIE,EAAiB,CACnB,IAAME,EAA0BC,EAAuC,IAAI38N,KAAKw8N,IAC1EI,EAA0BN,EAA0BhzO,MAAK,SAAAuzO,GAC7D,OAAOA,EAAWC,0BAA4BJ,KAE3CE,EAGOA,EAAwBG,iBAAiBt/O,MAAK,SAAAu/O,GAAA,OAAkBA,EAAeb,WAAaM,OACtGp+N,EAAQo+N,oBAAR,qBAHAp+N,EAAQm+N,gBAAkB,GAC1Bn+N,EAAQo+N,oBAAR,oBAKJh7N,EAAS,CACP7Y,KAAMgzO,EACNv9N,eAUO4+N,GAL8BC,EAA9BA,4BAA8B,SAACC,GAAD,MAA+B,CACxEv0O,KAAMizO,EACNx9N,QAAS,CAAC8+N,8BAGiBF,EAAhBA,cAAgB,SAACG,GAAD,MAAiB,CAC5Cx0O,KAAMkzO,EACNz9N,QAAS,CAAC++N,iBAGNC,EAAyB,SAACvnP,GAAU,IACjCwc,EAA0Bxc,EAA1Bwc,UAAWnE,EAAerY,EAAfqY,YACX5P,EAA0B+T,EAA1B/T,SAAU++O,EAAgBhrO,EAAhBgrO,aAEXC,EAAYpvO,EAAYG,sBAC3BH,EAAYG,qBAAqB,IACjCH,EAAYG,qBAAqB,GAAGG,gBACnCN,EAAYG,qBAAqB,GAAGG,gBAAgBjJ,GACpD,EAEEg4O,GAAc,IAAAC,sBAAqB3nP,GAAO4nP,UAAY,EAAAC,oBAAoBC,UAC5E,EAAAD,oBAAoBC,UACpB,KAEJ,MAAO,CACLC,YAAa,CACX9+M,MAAOxgC,EAASwgC,MAChBS,UAAWjhC,EAASihC,UACpBs+M,oBAAqBv/O,EAASw/O,QAC9B5xE,SAAU5tK,EAAS4tK,SACnBntI,MAAOzgC,EAASygC,MAChBg/M,QAASV,EAAa59M,QAAUnhC,EAASmhC,OACzC,KAAQ49M,EAAa91F,KACrB,UAAa81F,EAAa1iH,UAC1B,MAAS0iH,EAAa/4O,MACtB,WAAc+4O,EAAaW,WAC3B,aAAgBX,EAAaY,cAE/BC,YAAa,CACXZ,YACAC,iBAiEOb,GA5DuByB,EAArBA,mBAAqB,WAChC,uCAAO,WAAO38N,EAAU9hB,GAAjB,sFAEC0+O,EAAmBhB,EAAuB19O,KAF3C,UAK8B,IAAA2+O,mBAAkBD,GALhD,UAKCE,EALD,OAML/oP,QAAQ4B,IAAI,uBAAwBmnP,KAEhCA,GAAwBA,EAAqB9sP,MAAQ8sP,EAAqB9sP,KAAK+sP,sBAR9E,uBAWH/8N,EAASs6N,EAAyBwC,EAAqB9sP,KAAK+sP,qBAAqBC,qBAX9E,mBAYI,GAZJ,iCA6BE,GA7BF,kDAAP,qDAiC4BC,EAAnBA,iBAAmB,WAC9B,uCAAO,WAAOj9N,EAAU9hB,GAAjB,0FAEC7J,EAAQ6J,IACP48O,EAAoBzmP,EAApBymP,kBAEH3qH,EAAWyrH,EAAuBvnP,IAE7B0vO,KAAOmX,EAAuCJ,EAAiBC,iBAGxE5qH,EAASuqH,SAAWI,EAAiBE,oBAVhC,UAa8B,IAAAkC,sBAAqB/sH,GAbnD,cAaCgtH,EAbD,OAcLppP,QAAQ4B,IAAI,uBAAwBwnP,GAEhCA,GAAwBA,EAAqBntP,MAAQmtP,EAAqBntP,KAAK2rP,YACjF37N,EAASw7N,EAAc2B,EAAqBntP,KAAK2rP,aAjB9C,mBAqBE,GArBF,mDAAP,qDAyBoDT,EAAzCA,uCAAyC,SAACkC,GAAsC,IAAxBC,EAAwB,wDAEvFC,EAAM,GAAGF,EAAaG,UACtBC,EAAQ,IAAIJ,EAAaK,WAAa,GACtCzZ,EAAO,GAAGoZ,EAAanZ,cAK3B,OAHAqZ,EAAqB,IAAfA,EAAI9sP,OAAe,IAAM8sP,EAAMA,EACrCE,EAAyB,IAAjBA,EAAMhtP,OAAe,IAAMgtP,EAAQA,EAEvCH,EACKG,EAAQ,IAAMF,EAAM,IAAMtZ,EAG5BA,EAAO,IAAMwZ,EAAQ,IAAMF,IAGMI,EAA7BA,2BAA6B,SAACC,EAAS9C,GAClD,IAAMI,EAA0BC,EAAuCyC,GACjExC,EAA0BN,EAA0BhzO,MAAK,SAAAuzO,GAC7D,OAAOA,EAAWC,0BAA4BJ,KAEhD,OAAKE,IACHpnP,QAAQ4B,IAAI,8DACL,Q,8EClLX,I,EAAA,S,oCACA,QACA,QACA,QAEA,IAAI4kC,EAAU,GACd9pC,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9BtlD,EAAQslD,GAAc,CACpB+9J,MAAO,CACLC,QAAS,IACTC,UAAW,IACXC,SAAU,IACVC,WAAY,IACZC,WAAY,IACZC,oBAAqB,KACrBC,mBAAoB,KACpBC,oBAAqB,KACrBC,mBAAoB,MAKtBC,MAAO,IACPC,QAAS,CACPC,aAAc,IACdC,UAAW,IACXC,cAAe,IACfC,kBAAmB,IACnBC,OAAQ,KACRC,OAAQ,KACRC,OAAQ,MACRC,OAAQ,MAEV/wE,QAAS,CACPgxE,iBAAkB,KAClBC,sBAAuB,MACvBC,oBAAqB,MACrBC,WAAY,KACZC,oBAAqB,MACrBC,aAAc,KACdC,YAAa,KACbC,qBAAsB,OACtBC,cAAe,IACfC,cAAe,KACfC,uBAAwB,MACxBC,eAAgB,KAChBC,wBAAyB,MACzBC,UAAW,KACXC,WAAY,MACZC,aAAc,MACdC,cAAe,MACfC,UAAW,MACXC,kBAAmB,GACnBC,qBAAsB,IAExBC,WAAY,CACVC,UAAW,KACXC,KAAM,KACNC,WAAY,KACZC,MAAO,KACPC,OAAQ,KACRC,aAAc,OAEhBC,gBAAiB,CACfppJ,WAAY,KACZqpJ,YAAa,IACbC,KAAM,KACNC,OAAQ,KACRC,SAAU,MAGZC,aAAc,CACZC,mBAAoB,MACpBjzE,QAAS,KACTz2E,WAAY,KACZspJ,KAAM,KACNC,OAAQ,KACRC,SAAU,MACVP,MAAO,MACPU,aAAc,KACdC,OAAQ,KACRC,OAAQ,SAKd7mN,EAAA,MAAiB6lN,WAAWK,OAAS,MACrClmN,EAAA,mBAA8B6lN,WAAWK,OAAS,MAClDlmN,EAAA,gBAA2B6lN,WAAWK,OAAS,MAC/ClmN,EAAA,6BAAwC6lN,WAAWK,OAAS,MAC5DlmN,EAAA,MAAiB6lN,WAAWM,aAAe,MAC3CnmN,EAAA,mBAA8B6lN,WAAWM,aAAe,MACxDnmN,EAAA,gBAA2B6lN,WAAWM,aAAe,MACrDnmN,EAAA,6BAAwC6lN,WAAWM,aAAe,MAQlEjwP,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAE9B,IADA,IAAIwhK,EAAkB,EAAGC,EAAqB,EACrChxP,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,IAAK,IAAIggF,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAC5B,IAAMixK,EAAoBjxP,EAAI,IAAMggF,EACpC/1C,EAAQslD,GAAYmuF,QAAQkyE,kBAAkBqB,GAAsBjxP,GAAK,EAXnD,MAYS,IAAFA,EAAQggF,EAXd,MAYuB,IAAhB+wK,EAAsB/wK,EACpD/1C,EAAQslD,GAAYmuF,QAAQmyE,qBAAqBoB,GAAsBjxP,GAAK,EAXnD,MAYS,IAAFA,EAAQggF,EAXd,MAY0B,IAAnBgxK,EAAyBhxK,EAExDhgF,EAAI,GACN+wP,IAEE/wP,EAAI,GACNgxP,QAKN,IAAME,EAAqB,SAACr+J,EAAQuwF,GAClC,IAAM+tE,EAAmB,EAAA7rP,kBAAoB,kBAAoB,IAEjE,GAAKutF,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC1D/8J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC/D,MAAO,CACLtrC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MACxL/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QACjE/8J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC/D,MAAO,CACLtrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QACjE/8J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC/D,MAAO,CACLtrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QACjE/8J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC/D,MAAO,CACLtrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QACjE/8J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC/D,MAAO,CACLtrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QACjE/8J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC/D,MAAO,CACLtrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC5O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QACjE/8J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC/D,MAAO,CACLtrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAC9O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QACjE/8J,GAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC/D,MAAO,CACLtrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAC9O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACpEh9J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAClE,MAAO,CACLvrC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MACxL/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACpEh9J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAClE,MAAO,CACLvrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACpEh9J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAClE,MAAO,CACLvrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACpEh9J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAClE,MAAO,CACLvrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACpEh9J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAClE,MAAO,CACLvrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACpEh9J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAClE,MAAO,CACLvrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC5O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACpEh9J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAClE,MAAO,CACLvrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAC9O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAE5B,GAAKt+J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACpEh9J,GAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAClE,MAAO,CACLvrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAC9O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAInC,OAAQt+J,GACN,KAAK5oD,EAAQm5I,GAAe4qE,MAC1B,MAAO,CACL1pC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAAM,CAAC,EAAGA,EAAiB,IAAK,OAC3L/lP,MAAQ+lP,EAAiB,IAAK,KAC9B7lP,OAAS6lP,EAAiB,IAAK,KAInC,KAAKlnN,EAAQm5I,GAAekqE,MAAMG,SAChC,MAAO,CACLnpC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MACxL/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAekqE,MAAMS,mBAChC,MAAO,CACLzpC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,OAE9O,KAAKlnN,EAAQm5I,GAAekqE,MAAME,UAChC,MAAO,CACLlpC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,IAAI,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,IAAI,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,KAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAekqE,MAAMQ,oBAChC,MAAO,CACLxpC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,OAEhP,KAAKlnN,EAAQm5I,GAAekqE,MAAMC,QAChC,MAAO,CACLjpC,aAAc,CAAC,CAAC,EAAE,GAAG,CAAE6sC,EAAiB,IAAK,KAAK,GAAG,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MACxI/lP,MAAQ+lP,EAAiB,IAAK,KAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAekqE,MAAMI,WAChC,MAAO,CACLppC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAekqE,MAAMK,WAChC,MAAO,CACLrpC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MAC1L/lP,MAAQ+lP,EAAiB,IAAK,KAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAekqE,MAAMO,mBAChC,MAAO,CACLvpC,aAAc,CACZ,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KACnD,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KACnD,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KACnD,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,OAEzD,KAAKlnN,EAAQm5I,GAAekqE,MAAMM,oBAChC,MAAO,CACLtpC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,OAIhP,KAAKlnN,EAAQm5I,GAAe1F,QAAQyxE,cAClC,MAAO,CACL7qC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAMA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MAC1L/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQ2xE,eAClC,MAAO,CACL/qC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAAM,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,OAC/O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQqxE,aAClC,MAAO,CACLzqC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MAC1L/lP,MAAQ+lP,EAAiB,IAAK,KAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQwxE,cAClC,MAAO,CACL5qC,aAAc,CACZ,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KACnD,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KACpD,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KACpD,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAErD/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQmxE,WAClC,MAAO,CACLvqC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAMA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MAC1L/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQsxE,YAClC,MAAO,CACL1qC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC5O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQiyE,UAClC,MAAO,CACLrrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAAM,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,OAC/O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQ6xE,UAClC,MAAO,CACLjrC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MACxL/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQ8xE,WAClC,MAAO,CACLlrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC5O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQ+xE,aAClC,MAAO,CACLnrC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MACxL/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe1F,QAAQgyE,cAClC,MAAO,CACLprC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAM,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAC/O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAInC,KAAKlnN,EAAQm5I,GAAe0sE,WAAWG,WACrC,MAAO,CACL3rC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe0sE,WAAWK,OACrC,MAAO,CACL7rC,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAAM,CAAC,EAAGA,EAAiB,IAAK,OACzL/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe0sE,WAAWE,KACrC,MAAO,CACL1rC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC5O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe0sE,WAAWC,UACrC,MAAO,CACLzrC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC5O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAe0sE,WAAWI,MACrC,MAAO,CACL5rC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC5O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAInC,KAAKlnN,EAAQm5I,GAAeitE,gBAAgBppJ,WAC1C,MAAO,CACLq9G,aAAc,CAAC,CAAC,EAAG6sC,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAC,EAAGA,EAAiB,IAAK,MAC1L/lP,MAAQ+lP,EAAiB,IAAK,KAC9B7lP,OAAS6lP,EAAiB,IAAK,IAEnC,KAAKlnN,EAAQm5I,GAAeitE,gBAAgBC,YAC1C,MAAO,CACLhsC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAAM,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,OAC/O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAeitE,gBAAgBE,KAC1C,MAAO,CACLjsC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAC9O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,IAEnC,KAAKlnN,EAAQm5I,GAAeitE,gBAAgBG,OAC1C,MAAO,CACLlsC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAC9O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAeitE,gBAAgBI,SAC1C,MAAO,CACLnsC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC3O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAInC,KAAKlnN,EAAQm5I,GAAestE,aAAahzE,QACzC,KAAKzzI,EAAQm5I,GAAestE,aAAaI,OACvC,MAAO,CACLxsC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAAM,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,OAC9O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAestE,aAAazpJ,WACvC,MAAO,CACLq9G,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAAM,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,OAC7O/lP,MAAQ+lP,EAAiB,IAAK,KAC9B7lP,OAAS6lP,EAAiB,KAAMA,EAAiB,KAAK,KAE1D,KAAKlnN,EAAQm5I,GAAestE,aAAaG,OACvC,MAAO,CACLvsC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,GAAIA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,MAAM,CAAEA,EAAiB,IAAK,GAAIA,EAAiB,IAAK,OAC3O/lP,MAAQ+lP,EAAiB,IAAK,KAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAestE,aAAaH,KACvC,MAAO,CACLjsC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAestE,aAAaF,OACvC,MAAO,CACLlsC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC1O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,KAAKlnN,EAAQm5I,GAAestE,aAAaD,SAMzC,KAAKxmN,EAAQm5I,GAAestE,aAAaR,MACvC,MAAO,CACL5rC,aAAc,CAAC,CAAE6sC,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,KAAMA,EAAiB,IAAK,KAAK,CAAEA,EAAiB,IAAK,IAAKA,EAAiB,IAAK,MAC3O/lP,MAAQ+lP,EAAiB,IAAK,IAC9B7lP,OAAS6lP,EAAiB,IAAK,KAEnC,QACE,OAAO,OAGPC,EAAsB,SAAC7gM,EAAQ+zJ,GACnC,OAAI/zJ,GAAYA,EAAOnlD,QAAUmlD,EAAO8gM,aAAiB9gM,EAAOjlD,SAAWilD,EAAOzC,aAM3Ew2J,EALEA,EAAa/wM,KAAI,SAAAkkD,GAEtB,OADAA,EAAQA,EAAMlkD,KAAI,SAAAgvC,GAAA,OAAO1sC,KAAKC,MAAMysC,EAAIgO,EAAO8gM,YAAY9gM,EAAOnlD,c,UAOzD,CACb6+B,UACAqnN,sBAAuB,SAACluE,EAAe9wF,EAAO/hC,GAG5C,GACG+hC,EAAMO,QAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC9Dt9J,EAAMO,QAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,SAEpEt9J,EAAMO,QAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAC9Dt9J,EAAMO,QAAU5oD,EAAQm5I,GAAe1F,QAAQkyE,kBAAkB,QAErE,MAAO,CACL2B,kBAAmB,cACnB7vP,QAAQ,aAAOuoC,EAAQm5I,GAAe1F,QAAQkyE,mBAAmBt9J,EAAMO,SAEpE,GACJP,EAAMO,QAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACjEv9J,EAAMO,QAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,SAEvEv9J,EAAMO,QAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QACjEv9J,EAAMO,QAAU5oD,EAAQm5I,GAAe1F,QAAQmyE,qBAAqB,QAExE,MAAO,CACL0B,kBAAmB,iBACnB7vP,QAAQ,aAAOuoC,EAAQm5I,GAAe1F,QAAQmyE,sBAAsBv9J,EAAMO,SAG9E,OAAQP,EAAMO,QACZ,KAAK5oD,EAAQm5I,GAAe4qE,MAC1B,MAAO,CACLhpP,OAAQ,QACR4gO,MAAO,SAEX,KAAK37L,EAAQm5I,GAAekqE,MAAMG,SAChC,IAAI+D,EAAqBN,EAAmBjnN,EAAQm5I,GAAekqE,MAAMS,mBAAoB3qE,GAE7F,OADAouE,EAAmBltC,aAAe8sC,EAAoB7gM,EAAQihM,EAAmBltC,eAC7E,IAAAppH,QAAOs2J,EAAmBltC,aAAcz/M,SAAS4sP,iBAC5C,CACLF,kBAAmB,oBAGd,CACLvsP,OAAQ,QACR4gO,MAAO,aAIb,KAAK37L,EAAQm5I,GAAekqE,MAAME,UAChC,IAAIkE,EAAsBR,EAAmBjnN,EAAQm5I,GAAekqE,MAAMQ,oBAAqB1qE,GAE/F,OADAsuE,EAAoBptC,aAAe8sC,EAAoB7gM,EAAQmhM,EAAoBptC,eAC/E,IAAAppH,QAAOw2J,EAAoBptC,aAAcz/M,SAAS4sP,iBAC7C,CACLF,kBAAmB,qBAGd,CACLvsP,OAAQ,QACR4gO,MAAO,cAIb,KAAK37L,EAAQm5I,GAAekqE,MAAMI,WAChC,MAAO,CACL1oP,OAAQ,QACR4gO,MAAO,eAEX,KAAK37L,EAAQm5I,GAAekqE,MAAMK,WAChC,IAAIgE,EAAqBT,EAAmBjnN,EAAQm5I,GAAekqE,MAAMO,mBAAoBzqE,GACzFwuE,EAAsBV,EAAmBjnN,EAAQm5I,GAAekqE,MAAMM,oBAAqBxqE,GAG/F,OAFAuuE,EAAmBrtC,aAAe8sC,EAAoB7gM,EAAQohM,EAAmBrtC,cACjFstC,EAAoBttC,aAAe8sC,EAAoB7gM,EAAQqhM,EAAoBttC,eAC/E,IAAAppH,QAAOy2J,EAAmBrtC,aAAcz/M,SAAS4sP,iBAC5C,CACLF,kBAAmB,2BAEZ,IAAAr2J,QAAO02J,EAAoBttC,aAAcz/M,SAAS4sP,iBACpD,CACLF,kBAAmB,2BAGd,CACLA,kBAAmB,qBAIzB,KAAKtnN,EAAQm5I,GAAekqE,MAAMC,QAChC,MAAO,CACLvoP,OAAQ,QACR4gO,MAAO,WAEX,KAAK37L,EAAQm5I,GAAe1F,QAAQmxE,WACpC,KAAK5kN,EAAQm5I,GAAe1F,QAAQsxE,YAClC,MAAO,CACLhqP,OAAQ,UACR4gO,MAAO,eAEX,KAAK37L,EAAQm5I,GAAe1F,QAAQyxE,cACpC,KAAKllN,EAAQm5I,GAAe1F,QAAQ2xE,eACpC,KAAKplN,EAAQm5I,GAAe1F,QAAQiyE,UAClC,MAAO,CACL3qP,OAAQ,UACR4gO,MAAO,kBAEX,KAAK37L,EAAQm5I,GAAe1F,QAAQqxE,aACpC,KAAK9kN,EAAQm5I,GAAe1F,QAAQwxE,cAClC,MAAO,CACLlqP,OAAQ,UACR4gO,MAAO,iBAEX,KAAK37L,EAAQm5I,GAAe1F,QAAQ6xE,UACpC,KAAKtlN,EAAQm5I,GAAe1F,QAAQ8xE,WAClC,MAAO,CACLxqP,OAAQ,UACR4gO,MAAO,cAEX,KAAK37L,EAAQm5I,GAAe1F,QAAQ+xE,aACpC,KAAKxlN,EAAQm5I,GAAe1F,QAAQgyE,cAClC,MAAO,CACL1qP,OAAQ,UACR4gO,MAAO,iBAEX,KAAK37L,EAAQm5I,GAAe0sE,WAAWI,MACrC,MAAO,CACLlrP,OAAQ,YACR4gO,MAAO,SAEX,KAAK37L,EAAQm5I,GAAe0sE,WAAWK,OACrC,MAAO,CACLnrP,OAAQ,YACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAe0sE,WAAWE,KACrC,MAAO,CACLhrP,OAAQ,YACR4gO,MAAO,QAEX,KAAK37L,EAAQm5I,GAAe0sE,WAAWC,UACrC,MAAO,CACL/qP,OAAQ,YACR4gO,MAAO,aAEX,KAAK37L,EAAQm5I,GAAe0sE,WAAWG,WACrC,MAAO,CACLjrP,OAAQ,YACR4gO,MAAO,cAEX,KAAK37L,EAAQm5I,GAAeitE,gBAAgBwB,KAC1C,MAAO,CACL7sP,OAAQ,aACR4gO,MAAO,QAGX,KAAK37L,EAAQm5I,GAAeitE,gBAAgBE,KAC5C,KAAKtmN,EAAQm5I,GAAeitE,gBAAgBG,OAC5C,KAAKvmN,EAAQm5I,GAAeitE,gBAAgBppJ,WAC5C,KAAKh9D,EAAQm5I,GAAeitE,gBAAgBC,YAC1C,MAAO,CACLiB,kBAAmB,2BAEvB,KAAKtnN,EAAQm5I,GAAeitE,gBAAgBI,SAC1C,MAAO,CACLzrP,OAAQ,aACR4gO,MAAO,YAEX,KAAK37L,EAAQm5I,GAAestE,aAAaG,OACvC,MAAO,CACL7rP,OAAQ,gBACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAestE,aAAahzE,QACvC,MAAO,CACL14K,OAAQ,gBACR4gO,MAAO,WAEX,KAAK37L,EAAQm5I,GAAestE,aAAamB,KACvC,MAAO,CACL7sP,OAAQ,gBACR4gO,MAAO,QAEX,KAAK37L,EAAQm5I,GAAestE,aAAaF,OACzC,KAAKvmN,EAAQm5I,GAAestE,aAAaH,KACzC,KAAKtmN,EAAQm5I,GAAestE,aAAaD,SACzC,KAAKxmN,EAAQm5I,GAAestE,aAAaR,MACzC,KAAKjmN,EAAQm5I,GAAestE,aAAazpJ,WACvC,MAAO,CACLsqJ,kBAAmB,wBAEvB,KAAKtnN,EAAQm5I,GAAestE,aAAaI,OACvC,MAAO,CACL9rP,OAAQ,gBACR4gO,MAAO,UAEX,QACE,MAAO,KAGbsrB,uB,iJCnrBF,SACA,QACA,S,IACA,OACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,QACA,Q,uDAIqBR,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAzhP,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,eAChB,EAAKnY,cAAL,wBACA,EAAKgY,YAAc,mCAGnB,EAAK63M,QAAU,KACf,EAAKpiL,WAAa,KAClB,EAAKs3E,OAAS,KACd,EAAKrxE,KAAO,KACZ,EAAK5G,KAAO,KACZ,EAAK61M,WAAa,KAClB,EAAKphG,kBAAoB,CAAC,gBAAiB,2BAA4B,SAAU,OAAQ,eACvF,cAAe,WAAY,WAAY,gBAhB7B,E,qEAmBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpB8/E,GAA8B,EAC9B7/E,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,gBACL,IAAK,yBACL,IAAK,wBACHy/H,EAAkB,UAClBC,YACA,MACF,IAAK,2BACL,IAAK,2BACHD,EAAkB,aAClBC,YACA,MACF,IAAK,SACCgV,IAAiBvhJ,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,UAAc53F,EAAUmP,SAAV,YAAoCnP,EAAUixB,cACjKjxB,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,SAClBC,aAEF,MACF,IAAK,OACCgV,IAAiBvhJ,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,UAAc53F,EAAUmP,SAAV,YAAoCnP,EAAUixB,cACjKjxB,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,OAClBC,aAEF,MACF,IAAK,eACL,IAAK,OACH6/E,GAA8B,EAC9B9/E,EAAkB,OAClBC,YACA,MACF,IAAK,cACL,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,eACHD,EAAkB,WAClBC,YACA,MACF,IAAK,WACHD,EAAkB,WAClBC,YACA,MACF,IAAK,eACHD,EAAkB,cAClBC,YAGJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,EAAa6qE,K,2CAIlF,OAAO,I,iCAGmB,WAAnBx9C,IAAmB,yDAC1B,OAAOvyK,KAAK+e,aACT/X,QAAO,SAAAiqE,GAIN,MAHoB,yBAAhBA,EAAK3qE,SACP2qE,EAAK1gD,QAAU0gD,EAAK0Q,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC1P,EAAKwP,2BAAyBhsF,QAEpG,EAAKg+K,kBAAkBxhG,EAAMshG,MAErCzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,qFAQjD,OAAOlP,KAAKuzN,SAAWvzN,KAAKuzN,QAAQptM,cAChCnmB,KAAKuzN,QAAQptM,cAAcxiB,UAAUmP,SAArC,QACA,K,qCAIJ,OAAO9S,KAAKsmP,QAAUtmP,KAAKsmP,OAAOngO,cAC9BnmB,KAAKsmP,OAAOngO,cAAcxiB,UAAUmP,SAApC,MACA,K,yCAIA9S,KAAKwwC,MACPxwC,KAAKwwC,KAAK+1M,2B,2CAIO3pO,IACnB,IAAAiyH,iCAAwD,0BAAxBjyH,EAAatW,OAAb,wC,aAvH3B0B,GAAK,e,aADOi9O,G,6FCpBrB,O,OACA,O,IACA,M,IACA,SACA,QACA,QAEA,QACA,Q,IACA,S,mDAGA,IAAMuB,EAAsB,CAAC,WAAY,WAAY,mBAAoB,cAmBnEC,EAAuB,SAACn7I,GAAU,IAE/B0xC,EACY1xC,EADZ0xC,qBAAsBD,EACVzxC,EADUyxC,2BAA4B2pG,EACtCp7I,EADsCo7I,aAAc/lO,EACpD2qF,EADoD3qF,YAAaO,EACjEoqF,EADiEpqF,aAAc60F,EAC/EzK,EAD+EyK,SAChG5vF,EAAiBmlF,EAAjBnlF,cAHoC,GAIV,IAAAg7H,UAAS,MAJC,qBAI/B5nJ,EAJ+B,KAIvB8pF,EAJuB,QAKY,IAAA89D,WAAS,GALrB,qBAK/BwlG,EAL+B,KAKZC,EALY,KAMhC90M,EAAOkrG,EAAqB6pG,cAAc/0M,KAC1C5sC,EAAM83I,EAAqB6pG,cAAc3hP,IAEzC4hP,EAAkB,SAAC3wP,IAClBqwP,EAAoBvmP,MAAK,SAAA8mP,GAAA,OAAO5wP,EAAEugB,OAAOuqI,QAAQ8lG,OAAS/pG,EAAqBgqG,aAClFjqG,EAA2B,CACzBiqG,aAAa,EACbN,aAAc,OAKpB,IAAA/kI,YAAU,WAER,OADAvoH,SAASytD,iBAAiB,QAASigM,GAC5B,WACL1tP,SAAS8pG,oBAAoB,QAAS4jJ,MAGvC,CAAC9pG,KAEJ,IAAAr7B,YAAU,WACR,IAAMzmG,GAAS,IAAAC,oBACfkoE,EAAUnoE,EAAOgb,wBAAwBwwN,MACxC,CAACA,IAEJ,IAAMO,EAAmB,WACvBL,GAAsBD,IAQxB,IALA,IAAAhlI,YAAU,WACRslI,MAEC,CAACn1M,EAAM5sC,EAAKwhP,KAEV1pG,EAAqBgqG,cAAgBztP,EACxC,OAAO,KAGT,IAAMkH,EAAWkgB,EAAc,IACzBumO,EAAWp1M,EAAOnxB,EAAc,IAChCwmO,EAAWjiP,EAAOgc,EAAe,IAAOA,EAAe,IAAMhc,EAM7Dk1E,EAAS35E,EAAW,CACxBqxC,KAAMo1M,EAAW,OAASp1M,EAAO,KACjC5sC,IAAKiiP,EAAW,KAChBt1M,MAAOq1M,EAAW,EAAI,QACpB,CACFvmH,wBAAwBumH,EAAWp1M,EAAO,IAAMA,GAAhD,OAA2Dq1M,EAA3D,OAGIC,EAAiB3mP,EAAW,CAChCqxC,KAAMA,EAAO,KACb5sC,IAAKiiP,EAAW,KAChBzrN,SAAU,QACV2rN,UAAW,IACTH,EAAW,CACbp1M,KAAM,OACND,MAAO,QACL,GAEEy1M,EAA2B,iBAAjBZ,EAGhB,GAFoC,cAAjBA,EAGjB,OAAO,mCAA8BtsK,OAAQA,EACRgtK,eAAgBA,EAChB7tP,OAAQA,EACRw8G,SAAUA,EACV5vF,cAAeA,EACf8gO,iBAAkBA,EAClBN,kBAAmBA,IAG1D,IAAIY,EApGoB,SAACjhP,GACzB,OAAQA,GACN,IAAK,eACH,kCAGF,IAAK,mBACL,IAAK,iBACL,IAAK,WACL,IAAK,YACH,uBACF,QACE,MAA4C,YAArClN,SAASC,SAASoC,eAAlB,iBAAkE,CAAC,IAAI,IAAK,MAwFlE+rP,CAAkBd,GAMvC,OAJAa,EAAiBA,EAAevgP,QAAO,SAAAsgD,GACrC,OAAO/tD,GAAUA,EAAOunF,2BAA2Bx5B,EAAKnhC,MAIxD,+BAAKykE,UAAW,WAAa28J,EAAe9yP,OAAS,EAAI,kBAAoB,KAChD,IAA1B8yP,EAAe9yP,OAAe,kBAAoB,KAAOshH,EAAW,mBAAqB,IACvF1hG,MAAO+lE,GACV,gCAAMwQ,UAAU,oBAAoBv2E,MAAO+yO,IAC3C,+BAAKx8J,UAAU,oBACb,+BAAKA,UAAU,wBACb,8BAAIA,UAAU,kBAAkB08J,EAAU,OAAS,QACnD,+BAAK18J,UAAU,oBACZ28J,EAAelvP,MAAM,EAAG,GAAGyP,KAAI,SAAC2/O,EAAOC,GACtC,OAAO,mCAA4BhsN,SAAU+rN,EACVluP,OAAQA,EACR/B,IAAKkwP,EACLvhO,cAAeA,EACf8gO,iBAAkBA,EAAkBN,kBAAmBA,SAI/FW,GAAYC,EAAe9yP,OAAS,EACnC,+BAAKm2F,UAAU,2BACb,8BAAIA,UAAU,kBAAd,SACA,+BAAKA,UAAU,oBACZ28J,EAAelvP,MAAM,EAAG,GAAGyP,KAAI,SAAC2/O,EAAOC,GACtC,OAAO,mCAA4BhsN,SAAU+rN,EACVluP,OAAQA,EACR/B,IAAKkwP,EACLvhO,cAAeA,EACf8gO,iBAAkBA,EAAkBN,kBAAmBA,SAI9F,QAMZF,EAAqBvkG,UAAY,CAE/B/7H,cAAe,UAAUyzB,MAAV,oBACfm8D,SAAU,UAAUqsC,MAGtB,IAWMkuC,EAAqB,CACzBvzC,yD,WAGa,IAAAjxC,UAfS,SAACxzG,EAAOqvP,GAAa,MACPrvP,EAAMgR,YAAnC4X,EADoC,EACpCA,aAAcP,EADsB,EACtBA,YACrB,MAAO,CACLq8H,qBAAsB1kJ,EAAMu1I,gBAAgBmP,qBAC5C72H,cAAewhO,EAASxhO,eAAiB7tB,EAAMytB,eAAeI,cAC9DugO,aAAcpuP,EAAMu1I,gBAAgBmP,qBAAqB0pG,aACzDxlO,eACAP,iBAQoC2vK,EAAzB,CAA6Cm2D,I,+IClL5D,I,EAAA,QACA,O,oCACA,QACA,QAGO,IAAMmB,EAA4BA,EAA5BA,0BAA4B,SAACvkP,GAAqC,IAA5B8F,EAA4B,uDAAjB,EAAGyE,EAAc,uDAAN,EACvE,IAAKvK,EACH,OAAO,EAFoE,MAItC,UAAMlB,WAAtCwD,EAJsE,EAItEA,gBAAiBoP,EAJqD,EAIrDA,YACjBiB,EAAgBjB,EAAhBiB,aAEH6xO,EAAa,GACX1rC,EAA0BnmM,EAAalK,MAAK,SAAAiK,GAAA,MAA2C,iBAA5BA,EAAYtf,KAAK0mB,UAClF,GAAIg/L,EAAyB,CAC3B,IAAM58B,GAAiB,IAAA5yF,sBAAqBtpF,GAC5C,GAAIk8K,GAAkB33K,MAAMC,QAAQ03K,EAAe48B,EAAwBn0M,MAAQu3K,EAAe48B,EAAwBn0M,IAAIvT,OAAQ,CACpI,IAAMw0I,GAAoB,IAAA18C,qBAAoBgzF,EAAe48B,EAAwBn0M,IAAI,GAAIm0M,GACzFlzE,IACF4+G,EAAa5+G,EAAkB5sC,cAKrC,IAAMz/E,EAAevZ,EAAQ3C,YACvBonP,EAAex/O,OAAOC,UAAUY,GAAYA,EAAW,EAE7D,MAAO,CACL4+O,QAAS1kP,EAAQM,UAAU2+B,IAC3B0lN,UAAW3kP,EAAQk/E,2BACnB0lK,YAAatiP,EAAgBuiP,aAAe,GAC5CC,OAAQ,GACRl9O,SAAU,EACV2C,QACAi6O,aACAO,cAAe/kP,EAAQM,UAAU0kP,sBAAwB,GACzDC,eAAgBjlP,EAAQM,UAAUs8E,yBAA2B,GAC7DsoK,eAAgBllP,EAAQqV,kBAAkB1C,GAC1CwyO,eAAgB,GAChBC,eAAgB,GAChBC,aAAcrlP,EAAQiD,OACtBqiP,eAAgB/rO,EAAahB,QAAUgB,EAAaf,UAAY,GAChE+sO,aAAcvlP,EAAQg8E,aAAarpE,GACnC6yO,YAAa,GACbrmP,QAAQ,IAAA+J,oBAAmBlJ,EAASykP,GACpC3+O,SAAU2+O,IAI6BgB,EAA9BA,4BAA8B,SAACjiP,GAAqB,MAC1B,UAAM1E,WAApCC,EADwD,EACxDA,UAAWuD,EAD6C,EAC7CA,gBACZpD,EAAYsE,GAAoBzE,EAAUG,UAC1CuP,EAAqBnM,EAAgB+B,SAErCqhP,GAAqB,IAAA3vJ,iBAAgB72F,GACrCZ,GAAa,IAAA+E,eAAc,MAAM,EAAOqiP,GAExCvnP,EAAMG,EAAWN,WAAW5M,OAC9BkN,EAAWN,WAAWC,QAAO,SAACC,EAAKC,GAAN,OAAcD,EAAMC,EAAIC,cAAa,GAClEE,EAAWD,cAEf,MAAO,CACL4S,SAAUxC,EAAmBwC,SAC7Bpd,OAAO,IAAAgK,wBAAuBS,GAC9Bye,MAAO2oO,EAAmBjhP,KAAI,SAAC1B,EAAU4iP,GACvC,OAAOpB,EAA0BxhP,EAASC,YAAaD,EAAS+C,SAAU6/O,MAE5ExnP,IAAKA,GAAO,EACZynP,SAAUtnP,EAAWC,mBAAqB,K,+ECrE9C,I,IAAA,MACA,OACA,OACA,Q,IACA,M,IAEA,O,IACA,Q,IAEA,SACA,QACA,Q,IACA,S,mDAEA,IAAMsnP,EAAwB,SAAC59I,GAAU,IAEhCp1D,EACwBo1D,EADxBp1D,MAAOizM,EACiB79I,EADjB69I,SAAUC,EACO99I,EADP89I,WAAYC,EACL/9I,EADK+9I,SAAU5uO,EACf6wF,EADe7wF,KAAMg2K,EACrBnlF,EADqBmlF,QAAS32L,EAC9BwxG,EAD8BxxG,SAAU2G,EACxC6qG,EADwC7qG,SAAUu8D,EAClDsuC,EADkDtuC,kBAAmBjC,EACrEuwC,EADqEvwC,cAClG6vB,EAA6B0gB,EAA7B1gB,UAAW0+J,EAAkBh+I,EAAlBg+I,eAQb,OACE,kCAAQ1+J,UAAW,cAAgBA,GAAa,MAAQu+J,GAAY1oP,EAAW,0BAA4B,KACzG,+BAAKmqF,UAAU,mBACZnqF,EACC,+BAAKmqF,UAAU,UAAUkyF,QAVV,WACrB9/G,EAAkB,IAClBjC,EAAc,MACd01H,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAQZ,mCAAYulJ,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,gCACnC4iF,UAAU,8BACpB,0CAGF,MAEN,+BAAKA,UAAU,yCACb,8BAAIA,UAAU,oBACZ,4CAAkB5iF,GAAIkuC,IADxB,IACkCkzM,GAEjCD,EACC,8BAAIv+J,UAAU,wBACZ,gDAAsB5iF,GAAImhP,EAAUhzO,OAAQmzO,KAE5C,MAELxvP,GAAaA,EAAS+d,WAAa,EAAAtC,OAAOwvF,YACzC,+BAAKna,UAAU,mBACb,mCAAgC4+J,aAAcH,IAC7CA,EAAW,KAAO,yCAEnB,OAKVH,EAAsBhnG,UAAY,CAChChsG,MAAO,UAAU1T,OAAOy2E,WACxBkwI,SAAU,UAAU3mN,OACpBooD,UAAW,UAAUpoD,OACrB4mN,WAAY,UAAUt9C,IACtBu9C,SAAU,UAAUjnG,KACpBknG,eAAgB,UAAU3xP,QAG5B,IAOM24L,EAAqB,CACzBtzH,sCACAjC,+B,WAGa,IAAAgtF,aACb,IAAAwoC,aACE,IAAAzkF,UAdoB,SAACxzG,GAEvB,MAAO,CACLmI,SAFiBnI,EAAMgR,YAAlB7I,YAaoB6vL,EAAzB,CAA6C44D,M,sPC/EjD,IAAY1oO,E,wJAAZ,OAE2CipO,EAA9BA,4BAA8B,SAACC,GAAD,MAA4B,CACrEt+O,KAAMoV,EAAMwqD,+BACZnqD,QAAS,CAAC6oO,2BAGuBC,EAAtBA,oBAAsB,SAACC,GAAD,MAAuB,CACxDx+O,KAAMoV,EAAMyqD,sBACZpqD,QAAS,CAAC+oO,sBAGyBC,EAAxBA,sBAAwB,SAACz+O,GAAD,MAAW,CAC9CA,KAAMoV,EAAM0qD,2BACZrqD,QAAS,CAACzV,UAG4B0+O,EAA3BA,yBAA2B,SAAC1+O,EAAM2+O,EAAKC,GAAZ,MAAiC,CACvE5+O,KAAMoV,EAAM2qD,8BACZtqD,QAAS,CAACzV,OAAM2+O,MAAKC,qBAGkB9xE,EAA5BA,0BAA4B,SAAC+xE,GAAD,MAA4B,CACnE7+O,KAAMoV,EAAM4qD,+BACZvqD,QAASopO,IAG6BC,EAA3BA,yBAA2B,SAAC9+O,EAAMpD,GAAP,MAAe,CACrDoD,KAAMoV,EAAM6qD,8BACZxqD,QAAS,CAACzV,OAAMpD,S,qJC9BlB,I,EAAA,QACA,O,oCACA,QACA,SAE+BmiP,EAAlBA,gBAAkB,SAAC1sE,EAAY2sE,GAA4C,IAAtB73E,IAAsB,yDAClFt0J,EAAiB,UAAM9b,WAAW4jB,eAAe9H,eACrD,GAAKA,EAAL,CAGA,IAAMpC,EAAWoC,EAAe3hB,cAEhC,GAAKmhL,EAGL,GAA4B,IAAxBA,EAAWl6K,UAA0C,WAAxBk6K,EAAW5hK,SAAuB,CACjE,IAAMwuO,EAAW,aAAaxuO,EACzB1jB,OAAO2B,SAASC,KAAKI,SAASkwP,IACjC,EAAAn4N,YAAYn9B,KAAKs1P,OAEd,CACL,IAAM7uO,EAAOiiK,EAAWhhK,SAAS81J,GAAY63E,GAC7C,GAAI5uO,EAAM,CACR,IAAM8uO,EAAc9uO,EAAKA,KAAKK,SAASvf,cAAcqC,QAAQ,IAAI,KAC3D0rP,EAAW,aAAaxuO,EAAS,IAAIyuO,EACtCnyP,OAAO2B,SAASC,KAAKI,SAASkwP,IACjC,EAAAn4N,YAAYn9B,KAAKs1P,OArBlB,IA2BME,EAAwBA,EAAxBA,sBAAwB,WAAyB,IAAxB3iE,EAAwB,uDAAP,GACrD,OAAOA,EAAejpL,QAAQ,KAAK,KAAKA,QAAQ,MAAM,KAAKrC,eAG5BmnN,EAApBA,kBAAoB,SAAC77B,EAAgBwiE,GAAyB,MAE9B,UAAMjoP,WAAWwO,YAArDwZ,EAFkE,EAElEA,eAAgBvZ,EAFkD,EAElDA,iBACvB,GAAIuZ,GACF,IAAAs5J,oBAAmB7yK,OADrB,CAKA,IAAMsK,GAAS,IAAAC,oBACVysK,IACHA,EAAiB,UAAMzlL,WAAWmiL,QAAQvmK,kBAAoB7C,EAAOc,aAAa,GAAGvlB,MAElF2zP,GAAkD,IAAzBA,IAC5BA,EAAuB,UAAMjoP,WAAW4jB,eAAeD,4BAEzD,IAAIxJ,EAAapB,EAAOc,aAAalQ,MAAK,SAAA68K,GAAA,OAASA,EAAMlyL,OAASmxL,KAC7DtrK,IACHA,EAAapB,EAAOc,aAAa,IAEnC,IAAIH,EAAW0uO,EAAsB3iE,GACjC4iE,EAAcluO,EAAWG,SAAS2tO,IAAyB9tO,EAAWG,SAAS,GACnF,IAAK+tO,EAAa,CAEhB,GADAxyP,QAAQ4B,IAAI,2CAA4C0iB,GACpDpB,EAAOc,aAAa,IAAMd,EAAOc,aAAa,GAAGS,SAAShoB,OAE5D,YADA,EAAAy9B,YAAYn9B,KAAK,aAAa8mB,GAG9B,IAAK,IAAItnB,EAAI,EAAGA,EAAI2mB,EAAOc,aAAavnB,OAAQF,IAE9C,GAAI2mB,EAAOc,aAAaznB,IAAM2mB,EAAOc,aAAaznB,GAAGkoB,SAAShoB,OAAQ,CACpEonB,EAAW0uO,EAAsBrvO,EAAOc,aAAaznB,GAAGkC,MACxD+zP,EAActvO,EAAOc,aAAaznB,GAAGkoB,SAAS,GAC9C,OAKR,GAAK+tO,EAAL,CAIA,IACMH,EAAW,aAAaxuO,EAAS,IADnB0uO,EAAsBC,EAAYhvO,KAAKK,UAM3D,OAJK1jB,OAAO2B,SAASC,KAAKI,SAASkwP,IACjC,EAAAn4N,YAAYn9B,KAAKs1P,GAGZG,EATL,EAAAt4N,YAAYn9B,KAAK,iB,kIC1ErB,M,IACA,M,IACA,OACA,O,IAEA,S,IACA,O,uDAEM01P,G,gBAQJ,WAAYn/I,IAAO,gGACXA,IADW,SA4BnBo/I,UAAY,SAAC9rE,GACX,IAAM34H,EAAS,GACf24H,EAAU+rE,eAAevsP,SAAQ,SAAC2oG,GAEhC,OAAQ3tG,SAASC,SAASoC,gBACxB,IAAK,WACL,IAAK,KACH,GAA6B,UAAzBsrG,EAAYlrF,SAAsB,CACpC,IAAM62D,EAAS,EAAKk4K,mCAAmC,UACjDC,EAAS,EAAKD,mCAAmC,UACvD3kM,EAAOlxD,KAAK29E,EAAQm4K,QACf,GAA6B,WAAzB9jJ,EAAYlrF,SAAuB,CAC5C,IAAMqrG,EAAS,EAAK0jI,mCAAmC,UACjDp8I,EAAS,EAAKo8I,mCAAmC,UACvD3kM,EAAOlxD,KAAKmyH,EAAQ1Y,QACf,GAA+B,IAAzBowE,EAAU1/J,YACK,WAAzB6nF,EAAYlrF,UAAkD,YAAzBkrF,EAAYlrF,SAA0B,CAC5E,IAAMmwC,EAAQ,EAAK4+L,mCAAmC7jJ,EAAYlrF,SAAU+iK,IACxE5yH,EAAMla,MAAQka,EAAM9mD,MACtB+gD,EAAOlxD,KAAKi3D,GAGhB,MAEF,IAAK,UACH,IAAM8+L,EAAgB,CACpB,CACExkP,OAAQ,cACRwrC,KAAM,IACN5sC,IAAK,KAEP,CACEoB,OAAQ,SACRwrC,KAAM,IACN5sC,IAAK,KAEP,CACEoB,OAAQ,cACRwrC,KAAM,IACN5sC,IAAK,KAEP,CACEoB,OAAQ,eACRwrC,KAAM,KACN5sC,IAAK,MAGT6hG,EAAYhoF,aAAa3gB,SAAQ,SAAA4gB,GAC/B,IAAM+rO,EAAWD,EAAch/O,MAAK,SAAAk/O,GAClC,OAAOA,EAAa1kP,SAAW0Y,EAAQ1Y,SAAW0Y,EAAQ8jE,YAExDioK,GACF9kM,EAAOlxD,KAAKg2P,MAGhB,MAEF,IAAK,UACL,IAAK,KACH,OAAQhkJ,EAAYlrF,UAClB,IAAK,QACHoqC,EAAOlxD,KACL,EAAKk2P,wBAAwB,aAC7B,EAAKA,wBAAwB,cAC7B,EAAKA,wBAAwB,YAE/B,MAEF,IAAK,aACHhlM,EAAOlxD,KACL,EAAKk2P,wBAAwB,QAC7B,EAAKA,wBAAwB,SAC7B,EAAKA,wBAAwB,UAC7B,EAAKA,wBAAwB,eAE/B,MAEF,IAAK,aACHhlM,EAAOlxD,KACL,EAAKk2P,wBAAwB,eAC7B,EAAKA,wBAAwB,UAE/B,MAEF,IAAK,UACHhlM,EAAOlxD,KACL,EAAKk2P,wBAAwB,eAC7B,EAAKA,wBAAwB,gBAC7B,EAAKA,wBAAwB,mBAE/B,MAEF,IAAK,eACHhlM,EAAOlxD,KACL,EAAKk2P,wBAAwB,2BAC7B,EAAKA,wBAAwB,yBAC7B,EAAKA,wBAAwB,8BASzC,EAAK3tE,SAAS,CACZr3H,SACAilM,kBAAmBtsE,EAAU1/J,cAvId,EA2InBisO,aAAe,WACb,IAAMrmM,GAAS,aAAE1rD,SAAS02F,eAAe,EAAKwb,MAAM1b,WACpD,EAAK0tF,SAAS,CACZtxF,WAAY,CACVrsF,MAAOmlD,EAAOnlD,QACdE,OAAQilD,EAAOjlD,aAhJF,EAqJnB+qP,mCAAqC,SAAC/uO,GAAqC,IAA3B+iK,EAA2B,uDAAf,EAAKtzE,MAC/D,OAAQzvF,GACN,IAAK,SACH,MAAO,CACLi2B,KAAM,IACN5sC,IAAK,KAET,IAAK,SACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,SACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,QACH,MAAO,CACL4sC,KAA+B,IAAzB8sI,EAAU1/J,WAAmB,IAAM,IACzCha,IAAK,KAET,IAAK,SACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,IAAK,UACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,IAAK,SACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,SACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,SACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,QACE,MAAO,CACL4sC,KAAM,EACN5sC,IAAK,KAvMM,EA4MnB+lP,wBAA0B,SAAC3kP,GAAmC,2CAAf,EAAKglG,MAElD,OAAQhlG,GACN,IAAK,YACH,MAAO,CACLwrC,KAAM,IACN5sC,IAAK,KAET,IAAK,aACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,IAAK,UACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,OACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,IAAK,QACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,SACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,aACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,cACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,eACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,IAAK,iBACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,IAAK,0BACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,wBACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,IAAK,uBACH,MAAO,CACL4sC,KAAM,IACN5sC,IAAK,KAET,IAAK,QACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,IAAK,cACH,MAAO,CACL4sC,KAAM,KACN5sC,IAAK,KAET,QACE,MAAO,CACL4sC,KAAM,EACN5sC,IAAK,KA3RX,EAAK6B,MAAQ,CACXk/C,OAAQ,GACRilM,kBAAmB,KACnBl/J,WAAY,CACVrsF,MAAO,EAAK2rG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQ,EAAKyrG,MAAMvjF,iBAAiBloB,SAPvB,E,oFAajBG,KAAK0qP,UAAU1qP,KAAKsrG,OACpBtrG,KAAKmrP,gBACL,aAAEhzP,QAAQwqG,GAAG,SAAU3iG,KAAKmrP,gB,gDAGJvsE,GACpB5+K,KAAK+G,MAAMmkP,oBAAsBtsE,EAAU1/J,YAC7Clf,KAAK0qP,UAAU9rE,K,8CAKjB,aAAEzmL,QAAQ8gO,IAAI,SAAUj5N,KAAKmrP,gB,+BAyQtB,WACDtqB,EAAkB,UAAO//N,yBAC/B,OAAOd,KAAK+G,MAAMilF,WAAWrsF,OAASK,KAAK+G,MAAMilF,WAAWnsF,SAAWghO,EACrE,+BAAKj2I,UAAU,eACZ5qF,KAAK+G,MAAMk/C,OAAOn+C,KAAI,SAACkkD,EAAOp+C,GAC7B,IAAMw9O,EAAkB,CACtBt5M,KAAMka,EAAMla,MAAQ,EAAK/qC,MAAMilF,WAAWrsF,MAAQ,EAAK2rG,MAAMvjF,iBAAiBpoB,OAC9EuF,IAAK8mD,EAAM9mD,KAAO,EAAK6B,MAAMilF,WAAWnsF,OAAS,EAAKyrG,MAAMvjF,iBAAiBloB,SAE/E,OAAO,mCAAWrI,IAAK,YAAYoW,EAAOo+C,MAAOo/L,QAGnD,S,GAtTiB,UAAMv/I,W,EAEtBq2C,UAAY,CACjByoG,eAAgB,UAAUt0O,MAAM4iG,WAChC/5F,WAAY,UAAU05F,OAAOK,WAC7BrpB,SAAU,UAAUptD,OAAOy2E,Y,cA8ThB,IAAAnN,UATS,SAACxzG,GAEvB,MAAO,CACLyvB,iBAFyBzvB,EAAMouB,wBAA1BqB,oBAMkB,GAEZ,CAA6C0iO,I,0JC3U5D,M,IAEA,QACA,QACA,QACA,Q,IACA,QAEA,S,uDAKqBY,E,yOAEnBxzC,WAAa,SAACn/E,EAAQzY,EAAQqrI,EAAuBxzC,EAAa/mL,GAChE4wH,aAAa,EAAK35I,IAClB,EAAKA,GAAK,EACV,IAAIujP,EAAa,KAH4D,EAKrD,EAAKjgJ,MAAtB3rG,EALsE,EAKtEA,MAAOE,EAL+D,EAK/DA,QAIV,EAAKyrG,MAAMk7H,mBAAqB,EAAKglB,uBAA0B,EAAKzkP,MAAM0kP,gBAAgBh3P,SAC5F82P,0BAAiB7yH,KAGnB,IAAMq/E,GAAmB,IAAAmB,qBAAoBj5F,EAAQ,MAAM,GAI3D,GAAI83F,EAAiBtjN,OAAQ,CAC3B,EAAKi3P,UAAUjxL,UAAU,EAAG,EAAG96D,EAAOE,GAEtC64H,EAAOt6H,SAAQ,SAACm6M,GACd,IAAIA,EAAYx5M,IAAI5E,SAAS,gBAAiB29M,EAAY39M,SAASo+M,EAAYx5M,KAA/E,CAGA,IAAM8nF,EAAQkxH,EAAiBjsM,MAAK,SAAA+6E,GAAA,OAASA,EAAMn4B,QAAU6pJ,EAAYx5M,OACrE8nF,GACF,EAAKyI,UAAUzI,EAAO0xH,EAAa,EAAKmzC,UAAW/rP,EAAOE,GAE5D04M,EAAc,UAEhB,aAAc,EAAKozC,UACnB,EAAK/zC,QAAQtoH,UAAU,EAAKq8J,SAAU,EAAG,EAAGhsP,EAAOE,EAAQ,EAAG,EAAGF,EAAOE,GACxE,IAAM+rP,EAAalzH,EAAO5sH,MAAK,SAACysM,GAAD,OAAiBA,EAAYx5M,IAAI5E,SAAS,iBACzE,GAAIyxP,EAAY,CACd,IAAM/kK,EAAQkxH,EAAiBjsM,MAAK,SAAA+6E,GAAA,OAASA,EAAMn4B,QAAUk9L,EAAW7sP,OACpE8nF,GACF,EAAKyI,UAAUzI,EAAO+kK,EAAY,EAAKh0C,QAASj4M,EAAOE,KAK7D64H,EAAOt6H,SAAQ,SAAC06M,GACd,IAAIhB,EAAY39M,SAAS2+M,EAAY/5M,KAArC,CAGA,IAAM8nF,EAAQo5B,EAAOn0G,MAAK,SAAAm0G,GAAA,OAAUA,EAAOvxD,QAAUoqJ,EAAY/5M,OAC7D8nF,KAAWkxH,EAAiBtjN,QAAWoyF,EAAMO,OAAS2wH,EAAiBA,EAAiBtjN,OAAS,GAAG2yF,SACtG,EAAKkI,UAAUzI,EAAOiyH,EAAa,EAAKlB,QAASj4M,EAAOE,GAE1Di5M,EAAc,UAIhB,IAAA1qH,kBAAiB,EAAKzqC,IAAI2rC,UAAU,EAAKsoH,QAAQ9yJ,OAAQ,EAAG,IAExD,EAAKwmD,MAAMk7H,oBACI,UAAK/lO,aAAc,IAAAkuF,mBAClB,IAAAvpF,SAAW,EAAK2B,MAAM8kP,eAAgB,EAAK/mM,QAC3D,EAAKgnM,iBAEP,EAAKxuE,SAAS,CACZguE,2BAEE,EAAKE,uBAA0B,EAAKzkP,MAAM0kP,gBAAgBh3P,QAC5D,EAAKs3P,mBAAmB9rI,EAAQsrI,EAAYzzC,IAI3C3/M,OAAOs0I,mBACN,EAAKnhC,MAAM0gJ,oBACb,EAAK1gJ,MAAM0gJ,qBAAoB,GAE/B,EAAK1gJ,MAAM47G,cAAgB,EAAK57G,MAAM47G,iBAAkB,IAAA50H,kBAOxDvhE,GACFA,K,EAIJk7N,aAAe,WACb,OACE,+BAAKrhK,UAAU,aACb,+BAAKo1D,IAAK,SAACksG,GAAD,OAAQ,EAAKC,UAAYD,GAAIh4C,IAAI,GAAGlsM,GAAI,EAAKsjG,MAAM1b,SAAW,MACnEhF,UAAU,8B,EAKrBwhK,2BAA6B,SAACC,EAAeC,GAC3C,IAAMl5K,EAAKk5K,EAAczlK,MAAM2xH,WAAa8zC,EAAczlK,MAAM2xH,WAAW,GAAK8zC,EAAc3zC,gBAAgBE,aAAa,GAAG,GACxHxlI,EAAKi5K,EAAczlK,MAAM2xH,WAAa8zC,EAAczlK,MAAM2xH,WAAW,GAAK8zC,EAAc3zC,gBAAgBE,aAAa,GAAG,GAC9H,OAAOwzC,EAAcpsP,MAAK,SAAAmoD,GACxB,IAAImkM,EAAe,KACnB,IACEA,EAAeD,EAAcn9J,UAAUK,aAClCpnC,EAAShuC,EAAI,EAAKqoN,aAAgB,EAAK17N,MAAMilF,WAAWrsF,MAAQ,EAAK2rG,MAAM3rG,MAAUyzE,EACrFhrB,EAAS/tC,EAAI,EAAKooN,aAAgB,EAAK17N,MAAMilF,WAAWnsF,OAAS,EAAKyrG,MAAMzrG,OAAWwzE,EAC1F,EACA,EACA,CAACm5K,oBAAoB,IAAOv4P,KAAK,GACnC,MAAOkC,GACP6B,QAAQ4B,IAAI,2BACV0yP,EAAcn9J,UACX/mC,EAAShuC,EAAI,EAAKqoN,aAAgB,EAAK17N,MAAMilF,WAAWrsF,MAAQ,EAAK2rG,MAAM3rG,MAAUyzE,EACrFhrB,EAAS/tC,EAAI,EAAKooN,aAAgB,EAAK17N,MAAMilF,WAAWnsF,OAAS,EAAKyrG,MAAMzrG,OAAWwzE,GAG9F,OAAOk5K,EAAe,Q,EAI1B5vB,gBAAkB,SAACvwI,GAEjB,GAAIj0F,OAAOqmO,UACT,OAAO,EAGT,GAAI,EAAK/pH,YACP,EAAKguH,aAAe,EAAKhuH,UAAUxpD,WACT,IAAtB,EAAKw3K,cACP,OAAO,EATc,IAalBvnN,EAAU,EAAKowF,MAAfpwF,OACD4pC,EAAS,EAAKA,OAChBsD,GAAW,IAAA+jC,aAAYC,EAAKtnC,GAC5B2nM,GAAU,EAQd,GAJI,EAAKh4I,YACP,EAAKguH,aAAe,EAAKhuH,UAAUxpD,YAGjC7C,GAAajwD,OAAOwqD,WAAa,IAAM,CACzC,IAAI25I,EAAOl0I,EAAShuC,EAEpBguC,EAAShuC,EAAIguC,EAAS/tC,EACtB+tC,EAAS/tC,EAAI,EAAKyqC,OAAOzC,aAAei6I,EAI1C,GAAI,EAAKv1L,MAAM0kP,gBAAgBh3P,OAE7B,IADA,IAAIF,EAAI,EACAA,EAAI,EAAKwS,MAAM0kP,gBAAgBh3P,OAAQF,IAAK,CAClD,IAAM+3P,EAAgB,EAAKvlP,MAAM0kP,gBAAgBl3P,GACjD,GAAK6zD,GACAkkM,GACAA,EAAc3zC,kBACb,EAAK+zC,yBAAyBJ,EAAczlK,MAAO3rE,GAEvD,CACA,IAAImxO,EAAgB,CAACjkM,GACrB,GAAIltC,EAAOyxO,wBAA0BzxO,EAAOyxO,uBAAuBxyP,SAASmyP,EAAczlK,MAAMvgF,QAC9F,IAAK,IAAIiuE,EAAI,EAAGA,GAAK,GAAIA,IACvB83K,0BACKA,GADL,CAEE,CAACjyO,EAAGguC,EAAShuC,EAAIm6D,EAAGl6D,EAAG+tC,EAAS/tC,EAAIk6D,GACpC,CAACn6D,EAAGguC,EAAShuC,EAAIm6D,EAAGl6D,EAAG+tC,EAAS/tC,EAAIk6D,GACpC,CAACn6D,EAAGguC,EAAShuC,EAAIm6D,EAAGl6D,EAAG+tC,EAAS/tC,EAAIk6D,GACpC,CAACn6D,EAAGguC,EAAShuC,EAAIm6D,EAAGl6D,EAAG+tC,EAAS/tC,EAAIk6D,GACpC,CAACn6D,EAAGguC,EAAShuC,EAAIm6D,EAAGl6D,EAAG+tC,EAAS/tC,GAChC,CAACD,EAAGguC,EAAShuC,EAAIm6D,EAAGl6D,EAAG+tC,EAAS/tC,GAChC,CAACD,EAAGguC,EAAShuC,EAAGC,EAAG+tC,EAAS/tC,EAAIk6D,GAChC,CAACn6D,EAAGguC,EAAShuC,EAAGC,EAAG+tC,EAAS/tC,EAAIk6D,KAKtC,GAAI,EAAK63K,2BAA2BC,EAAeC,GAAgB,CACjEG,GAAU,EACVrzP,SAASuzN,aAAe2/B,EAAczlK,MACtCztF,SAAS4sP,gBAAkB59L,GACtB,IAAAhjD,SAAW,EAAKwnP,uBAAyBN,EAAczlK,MAAMO,SAEhE,EAAKwlK,qBAAuBN,EAAczlK,MAAMO,OAChD,EAAKylK,iBAAiBP,IAGxB,QAMHG,IACHrzP,SAASuzN,aAAe,KACxB,EAAKmgC,KAAK,EAAK/lP,MAAMk5G,U,EAKzBq6G,yBAA2B,SAAClzI,EAAQ9gF,GAClC,KAAK,IAAAlB,QAAQ,CACX,IAAM2nP,EAAsB,EAAKhmP,MAAM0kP,gBAAgB3/O,MAAK,SAACwgP,GAC3D,OAAIhmP,EACKgmP,EAAczlK,MAAMO,SAAWA,GAAUklK,EAAczlK,MAAMvgF,SAAWA,EAE1EgmP,EAAczlK,MAAMO,SAAWA,KAExC2lK,EAAsB,EAAKF,iBAAiBE,GAAqB,GAAQ,EAAKD,KAAK,EAAK/lP,MAAMk5G,U,EAIlG3wB,UAAY,SAACzI,EAAO0xH,EAAay0C,EAAertP,EAAOE,GACrD,IACE,GAAIgnF,EAAM2xH,WAAY,CACpB,IAAIC,EAAa5xH,EAAM2xH,WAAW,GAAK3xH,EAAM2xH,WAAW,GACpDE,EAAc7xH,EAAM2xH,WAAW,GAAK3xH,EAAM2xH,WAAW,GACzDw0C,EAAc19J,UAAUipH,EAAa,EAAG,EAAGE,EAAYC,EAAa7xH,EAAM2xH,WAAW,GAAI3xH,EAAM2xH,WAAW,GAAIC,EAAYC,QACrH,GAAI7xH,EAAM8xH,gBAAiB,CAChC,IAAMC,EAAM/xH,EAAM8xH,gBAEZs0C,EAASpmK,EAAMqmK,gBAAkB,EAAIt0C,EAAIC,aAAa,GAAG,GACzDs0C,EAAStmK,EAAMqmK,gBAAkB,EAAIt0C,EAAIC,aAAa,GAAG,GAC/Dm0C,EAAc19J,UAAUipH,EAAa00C,EAAQE,EAAQv0C,EAAIj5M,MAAOi5M,EAAI/4M,OAAQ+4M,EAAIC,aAAa,GAAG,GAAID,EAAIC,aAAa,GAAG,GAAID,EAAIj5M,MAAOi5M,EAAI/4M,aAoB3ImtP,EAAc19J,UAAUipH,EAAa,EAAG,EAAG54M,EAAOE,GAEpD,MAAO1J,GACP6B,QAAQ4B,IAAI,iCAAkC2+M,K,EAIlDpwJ,YAAc,SAACy4C,GACT,EAAK6T,WAAa,EAAKA,UAAUtsD,aACnC,EAAKssD,UAAUtsD,YAAYy4C,I,EAI/Bj4C,YAAc,SAACi4C,GACT,EAAK6T,WAAa,EAAKA,UAAU9rD,aACnC,EAAK8rD,UAAU9rD,YAAYi4C,I,EAI/Bp4C,UAAY,SAACo4C,GACP,EAAK6T,WAAa,EAAKA,UAAUjsD,UACnC,EAAKisD,UAAUjsD,UAAUo4C,EAAO,EAAK0K,MAAM8hJ,iBAClC,EAAK9hJ,MAAM8hJ,iBACpB,EAAK9hJ,MAAM8hJ,mB,gGAIN,WACD/4O,EAAQ,GAId,OAHIrU,KAAKsrG,MAAMq1B,YACbtsH,EAAMssH,UAAY3gI,KAAKsrG,MAAMq1B,WAI7B,+BAAK/1C,UAAU,UAIZ5qF,KAAKsrG,MAAMk7H,iBAAmBxmO,KAAKisP,eAAiB,KACrD,kCAAQjsG,IAAK,SAACksG,GAAD,OAAQ,EAAKpnM,OAASonM,GAC3BthK,UAAW,aAAe5qF,KAAKsrG,MAAMk7H,iBAAmB,sBAAwB,IAChFr+K,YAAanoD,KAAKmoD,YAClBQ,YAAa3oD,KAAK2oD,YAClBH,UAAWxoD,KAAKwoD,UAChB6kM,cAAe,KACfrlP,GAAIhI,KAAKsrG,MAAM1b,SACfjwF,MAAOK,KAAKsrG,MAAM3rG,MAClBE,OAAQG,KAAKsrG,MAAMzrG,OAInBytP,cAAa,UAAK7sP,aAAc,IAAAkuF,iBAChCt6E,MAAOA,S,KA3SvB,Q,mBAIqBg3O,G,+ECbrB,I,IAAA,M,IAEA,OACA,O,6DAE8B,SAAC//I,GAAU,IAEhCiiJ,EAAuBjiJ,EAAvBiiJ,oBAEP,OACE,+BAAK3iK,UAAU,aACZ2iK,EAAoBzlP,KAAI,SAAAuvG,GAAA,OACvB,mCAAQzsB,UAAW,gFAAkFysB,EAAOm2I,QACpGC,QAAQ,WACR3qK,SAAUu0B,EAAOv0B,WAAY,EAC7BtrF,IAAK6/G,EAAOg1H,UACZvvD,QAASzlE,EAAOylE,SACtB,4CAAkB90K,GAAIqvG,EAAOg1H,mB,qDCfvC33O,OAAOkC,eAAeZ,EAAS,aAAc,CAC3CkB,OAAO,IAETlB,EAAQm1G,YAAcn1G,EAAQ03P,aAAe13P,EAAQ23P,kBAAoB33P,EAAQ43P,qBAAuB53P,EAAQ63P,WAAa73P,EAAQ83P,oBAAsB93P,EAAQo1G,iBAAcp4C,EAEjL,IAAI+6L,EAAeC,EAAQ,KAEvBC,EAAgBC,EAAuBH,GAIvCI,EAA2BD,EAFDF,EAAQ,OAIlCI,EAAqBJ,EAAQ,KAI7BK,EAAcH,EAFDF,EAAQ,OAIzB,SAASE,EAAuBz3O,GAAO,OAAOA,GAAOA,EAAIpf,WAAaof,EAAM,CAAE+7B,QAAS/7B,GAEvFzgB,EAAQo1G,YAAcgjJ,EAAmBhjJ,YACzCp1G,EAAQ83P,oBAAsBO,EAAY77M,QAC1Cx8C,EAAQ63P,WAAaE,EAAaF,WAClC73P,EAAQ43P,qBAAuBO,EAAyB37M,QACxDx8C,EAAQ23P,kBAAoBS,EAAmBT,kBAC/C33P,EAAQ03P,aAAeU,EAAmBV,aAC1C13P,EAAQm1G,YAAcijJ,EAAmBjjJ,YACzCn1G,EAAQw8C,QAAUy7M,EAAcz7M,S,2QC9BhC,QACA,QASO,IAAM8tE,EAAuBA,EAAvBA,qBAAuB,SAACqwD,EAAc9yJ,GAAgC,IAAnB7Q,EAAmB,uDAAN,EAC3E,IAAK6Q,IAAgBA,EAAYla,UAC/B,OAAO,KAET,IAAM6E,EAAemoK,GAAgBroK,OAAOC,UAAUooK,EAAanoK,cAAgBmoK,EAAanoK,aAAewE,EACzGshP,EAAsB,CAC1BzyO,SAAUgC,EAAYhC,SACtB/S,kBAAmB+U,EAAYla,UAAUmF,kBACzCmO,YAAa4G,EAAYla,UAAUqE,GACnCs6B,IAAKzkB,EAAYla,UAAU2+B,IAC3Bh8B,OAAQuX,EAAYvX,OACpBs4G,oBAAqB/gG,EAAYla,UAAUi7G,oBAC3C9zF,SAAUjN,EAAYkN,UAAUviB,IASlC,OAPIqV,EAAYla,UAAU4qP,kBACxBD,EAAoBE,WAAa3wO,EAAYla,UAAUjB,KACvD4rP,EAAoBG,YAAc5wO,EAAYla,UAAUnB,OAEtDqb,EAAYla,UAAU24K,eACxBgyE,EAAoBhyE,aAAez+J,EAAYla,UAAU24K,cAEpDgyE,GAU4BjjI,EAAxBA,sBAAwB,SAACslD,GACpC,IAAKA,EACH,OAAO,KAET,IAAM+9E,EAAqB,CACzBpoP,OAAQqqK,EAAarqK,OACrB8oD,UAAWuhH,EAAatqK,YAAY1C,UAAUgrP,qBAC9CrsN,IAAKquI,EAAatqK,YAAY1C,UAAU2+B,IACxCn5B,SAAUwnK,EAAaxnK,SACvBylP,oBAAqBj+E,EAAatqK,YAAY1C,UAAUqE,GACxD6mP,gBAAgB,IAAA9iP,gBAAe4kK,EAAatqK,YAAasqK,EAAaxnK,SAAUwnK,EAAavnK,gBAC7F0hB,SAAU6lJ,EAAa7lJ,SACvB7jB,QAAS0pK,EAAa1pK,QACtBG,UAAWupK,EAAavpK,WAS1B,OAPIupK,EAAatqK,YAAY1C,UAAU4qP,kBACrCG,EAAmBF,WAAa79E,EAAatqK,YAAY1C,UAAUjB,KACnEgsP,EAAmBD,YAAc99E,EAAatqK,YAAY1C,UAAUnB,OAElEmuK,EAAatqK,YAAY1C,UAAU24K,eACrCoyE,EAAmBpyE,aAAe3L,EAAatqK,YAAY1C,UAAU24K,cAEhEoyE,GAQ6BI,EAAzBA,uBAAyB,SAACvsP,GACrC,OAAOA,EAAUuF,KAAI,SAAAuI,GACnB,IAAKA,EAAGhK,cAAgBgK,EAAGhK,YAAY1C,UACrC,OAAO,KAET,IAAMyC,EAAW1R,OAAO+2B,OAAO,GAAIpb,EAAI,CACrChK,YAAai6G,EAAqBjwG,EAAIA,EAAGhK,eAQ3C,OANIgK,EAAG2jF,uBACL5tF,EAAS4tF,qBAAuBssB,EAAqBjwG,EAAIA,EAAG2jF,uBAE1D3jF,EAAGqb,iBACLtlB,EAASslB,eAAiBrb,EAAGqb,gBAExBtlB,KACNY,QAAO,SAAAZ,GAAA,QAAcA,MASC2oP,EAAdA,YAAc,SAAC96P,GAC1B,IACE,IAAKmF,SAAS41P,OACZ,OAAO/6P,EAMTA,EAAKg7P,WAAa71P,SAAS41P,OAC3B/6P,EAAKi7P,UALa,SAAAz4P,GAChB,IAAMwN,EAAW7K,SAAS41P,OAAOxqP,MAAM,IAAI6xE,OAAJ,QAAmB5/E,EAAnB,aACvC,OAAOwN,EAAWA,EAAS,GAAK,GAGjBkrP,CAAU,OAC3B,MAAOl3P,GACPD,QAAQ4B,IAAI,sBAAuB3B,GAErC,OAAOhE,GAG2Bm7P,EAAvBA,qBAAuB,SAAC9oP,GACnC,MAAgB,gBAAXA,GAAyC,yBAAXA,EAC1BA,EAEU,EAAA5L,0BAA0BP,SAASf,SAASC,SAASoC,gBAE7B,WAArCrC,SAASC,SAASoC,eACb,cAEF,uBAEF6K,GAG0B0tL,EAAtBA,oBAAsB,SAAC7xF,GAClC,OAAKA,EAGDv6F,MAAMC,QAAQs6F,GACTA,EAELv6F,MAAMC,QAAQs6F,EAASxgB,UACrB/5E,MAAMC,QAAQs6F,EAAShkF,kBAAoBgkF,EAAShkF,gBAAgB1pB,OAKtE,wBAAW0tG,EAAShkF,kBAApB,aAAwCgkF,EAASxgB,WAE5CwgB,EAASxgB,SAEX,GAfE,K,4SC/HX,IAAYnhE,E,wJAAZ,OAE0C0yG,EAA7BA,2BAA6B,SAAC8lF,GAAD,MAA8B,CACtE5tM,KAAMoV,EAAMksD,6BACZ7rD,QAAS,CAACm4L,6BAGiCq2C,EAAhCA,8BAAgC,SAACC,GAAD,MAAiC,CAC5ElkP,KAAMoV,EAAMosD,kCACZ/rD,QAAS,CAACyuO,gCAGsBC,EAArBA,mBAAqB,SAACC,GAAD,MAAsB,CACtDpkP,KAAMoV,EAAMqsD,wBACZhsD,QAAS,CAAC2uO,qBAGsBC,EAArBA,mBAAqB,SAACnqB,GAAD,MAAsB,CACtDl6N,KAAMoV,EAAMssD,sBACZjsD,QAAS,CAACykN,qBAGwCoqB,EAAvCA,qCAAuC,SAACC,GAAD,MAA6B,CAC/EvkP,KAAMoV,EAAMusD,0CACZlsD,QAAS,CAAC8uO,4BAG0BC,EAAzBA,uBAAyB,SAACC,GAAD,MAA0B,CAC9DzkP,KAAMoV,EAAMmsD,0BACZ9rD,QAAS,CAACgvO,yBAG4BC,EAA3BA,yBAA2B,SAACxrB,GAAD,MAA4B,CAClEl5N,KAAMoV,EAAMwsD,6BACZnsD,QAAS,CAACyjN,2BAEsByrB,EAArBA,mBAAqB,SAAC1rB,GAAD,MAAsB,CACtDj5N,KAAMoV,EAAMysD,sBACZpsD,QAAS,CAACwjN,sB,2WCvCZ,O,IAEA,Q,IACA,MACA,QACY7jN,E,wJAAZ,O,IACA,QACA,Q,WACA,OACA,QACA,SAMA,QACA,QACA,S,IACA,OACA,SACA,SACA,S,mDAGgCwvO,EAAnBA,iBAAmB,SAAC/7P,IAC/B,IAAA2yB,cAAa,8BAA+B,gCAC5C,IACOtd,EADO,UAAMnH,WACbmH,YACFo1O,EAAQzqP,EAARyqP,KACDuR,GAAK,EACLvR,EAAO,OACTuR,GAAK,EACLvR,GAAQ,MAEV,IAAMwR,EAAe,CACnBC,kBAAmB,CACjBnoB,KAAM/zO,EAAK+zO,KACX0W,KAASA,EAAO,IAAhB,MACAuR,GAAIA,EACJG,SAAU,GACVC,MAAO,GACPC,gBAAiB,SAEnBr7O,MAAO3L,EAAY2L,MACnBs7O,UAAW,YAGb,UAAQP,iBAAiBE,GACtBr+N,MAAK,SAAAswE,GACJnqG,QAAQ4B,IAAI,kBAAmBuoG,IAC/B,IAAA7P,iBACA,UAAMruE,SAAS,CACb7Y,KAAMoV,EAAMkQ,eACZ7P,QAAS,CAAC2M,MAAM,SA7BjB,IAmQM,EAjOAgjO,EAAuBA,EAAvBA,qBAAuB,SAACh5J,GAMkB,IALlBi5J,EAKkB,wDAJlBhkI,EAIkB,aAHlBD,EAGkB,aAFlBkkI,EAEkB,aADlBt/N,EACkB,aAAlBq8K,EAAkB,aACrDz1M,QAAQ4B,IAAI49F,GAKZ,IAAMzwF,EAAQ,UAAM5E,WAEpB,GAAIq1F,EAAav/F,MAAO,CACtB,UAAUkpC,eAAe,sBACrBp6B,EAAMpB,gBAAgBk6I,UACxB,UAAU/9G,sBAAsB,EAAAtlC,cAAcK,gBAH1B,IAKf5E,EAASu/F,EAATv/F,MAEP,IADA,IAAAq6F,kBACkE,IAA9DkF,EAAav/F,MAAM+B,QAAQ,8BAAsC,CACnE,IAAM+G,EAAW,UAAMoB,WAAW2S,UAAU/T,UAC5C,IAAAivK,qCAAoC/3K,EAAO8I,EAASwgC,YAEpD,IAAAkuF,kBAAiBj4B,EAAav/F,OAQhC,OANIw4P,GACF,UAAMxsO,UAAS,IAAA+E,iBAAgB,CAC7BiB,iBAAiB,EACjBwjL,oBAGG,EAGT,IAAM37L,EAAqB/K,EAAMpB,gBAAgB+B,SAIjD,UAAUy5B,eAAe,sBACzB,UAAUE,UAAUm2D,EAAao7F,eACjC,UAAUhxJ,0BAA0B41D,EAAaj2D,OAC7Cx6B,EAAMpB,gBAAgBk6I,UACxB,UAAU/9G,sBAAsB,EAAAtlC,cAAcI,eAEhD,IAAM+zP,EAAkB,UAAKliF,kBAAkBj3E,GAEzCpiF,GAA0BtD,EAAmBwuC,OAASk3C,EAAapiF,yBAA2BoiF,EAAao5J,yBAoBjH,GAlBA,UAAM3sO,SAAS,CACb7Y,KAAMoV,EAAM0I,kBACZrI,QAAS,CACPoJ,iBAAiB,EACjBD,gBAAgB,EAChB5U,yBACArU,SAAU4vP,EAEV/9D,cAAep7F,EAAao7F,kBAM5Bp7F,EAAau3E,gBAAkBv3E,EAAakzD,kBAC9C,UAAMzmI,UAAS,IAAA6lN,oBAAmB,UAAKh7D,gCAAgCt3E,KAGzE,cACE,uBAAWA,EAAX,CAAyBpiF,uBAAwBA,IAA2BtD,EAAmBwuC,QAG7FxuC,EAAmBwuC,OAASk3C,EAAao5J,yBAC3C,UAAM3sO,SAAS,CACb7Y,KAAMoV,EAAM0I,kBACZrI,QAAS,CAACoJ,iBAAiB,MAG7B,IAAAwtE,WAAU,CACRC,QAAQ,EACR+0B,mBACAD,2BACAE,iBAAkBv0H,OAAO2B,SAASC,KAAKI,SAAS,gBAChD0yH,yBAAyB,EACzBl1B,aAAa,IAEZ9lE,MAAK,SAACswE,GAEL,IADA,aAAE/oG,UAAU8oG,QAAQ,UAAYwzB,mBAC5BvzB,EAAU,CACZ,IAAI0uJ,EAAmB1uJ,EACnB3K,IACFq5J,EAAmBr5J,GAErB,IAAMA,EAA2C,iBAA5B,IAAOq5J,EAAP,0BAAOA,IAAgCA,EAAmB18I,KAAKC,MAAMy8I,GAC1F74P,QAAQ4B,IAAI,sBAAuB49F,GACnC,UAAMvzE,UAAS,IAAAd,UAASq0E,EAAaviF,QAEnCy7O,IACF,IAAAp+J,iBACIxgF,EAAmByvN,4BACrB,UAAMt9M,SAAS,CACb7Y,KAAMoV,EAAMkQ,eACZ7P,QAAS,CAAC2M,MAAM,MAGlB,IAAAgiJ,oBAAmB,gDAGrB,IAAAl9E,kBACA,IAAAmlH,4BACEhrF,IAAqB,EAAAjsE,iBAAiBC,aAClC,0CACA,uCAKFrvB,GAAYtf,EAAmBsf,WACjC,IAAAI,oBAAmB1f,OAIxBugB,OAAM,SAACp6B,GACND,QAAQC,MAAM,mBAAoBA,IAClC,IAAAq6F,oBAIFo+J,IACE5+O,EAAmByvN,4BACrB,UAAMt9M,SAAS,CACb7Y,KAAMoV,EAAMkQ,eACZ7P,QAAS,CAAC2M,MAAM,MAGlB,IAAAgiJ,oBAAmB,+CA+DnBshF,GA1DmBC,EAAZA,UAAY,WAQY,6DAAP,GAAO,IAPTC,6BAOS,aANTN,oBAMS,aALTjkI,wBAKS,MALU,EAAAjsE,iBAAiBI,cAK3B,MAJT4rE,gCAIS,SAHTihF,EAGS,EAHTA,cAGS,IAFTgjD,8BAES,aADTr/N,gBACS,SACnC,GAAI4/N,EAWF,OAVA,UAAM/sO,SAAS,CACb7Y,KAAMoV,EAAM0I,kBACZrI,QAAS,CACPoJ,iBAAiB,UAGrB,IAAAimJ,oBAAmB,EAAAvwH,kBAAkBC,oBAAqB,CACxDqxM,WAAY,EAAAnwM,WAAWC,MACvB0sJ,kBAIJ,IAAM1mM,EAAQ,UAAM5E,WACdpB,EAAWgG,EAAM+N,UAAU/T,SAC3B2oB,EAAuB3iB,EAAM+N,UAAU4U,qBACxC,EAAD,cACF,IAAA9C,gBAEF,IAAI3yB,EAAO,CACTstC,MAAOxgC,EAASwgC,MAChBstI,SAAU9tK,EAAS8tK,SACnB7iD,WAAYtiG,GAAwB3oB,EAASirH,WAAa,EAC1D56C,aAAch4E,SAASC,SAASmC,QAIlC,OAFAvH,GAAO,IAAA86P,aAAY96P,GAEZ,UAAQ88P,UAAU98P,GACtB49B,MAAK,SAACswE,GACL,OAAOquJ,EACLruJ,EAASluG,KACTw8P,EACAhkI,EACAD,EACAkkI,EACAt/N,EACAq8K,MAGHp7K,OAAM,SAACp6B,GACND,QAAQ4B,IAAI,oBAAqB3B,IACjC,IAAAq6F,kBACA,IAAAm9B,kBAAiB,SAAS,IAAIC,MAAMz3H,EAAM89C,SAAW99C,IACjD8O,EAAMpB,gBAAgBk6I,UACxB,UAAU/9G,sBAAsB,EAAAtlC,cAAcK,oBAKnB,SAAC26F,EACAi2G,EACAgjD,GAK2C,IAJ3CS,EAI2C,wDAH3CC,EAG2C,wDAF3CC,EAE2C,uDAFtB,KACrBzhF,EAC2C,uDADf,KAC5B0hF,EAA2C,uDAAT,KAGpE,GAFA,UAAUlwN,eAAe,yBAErBq2D,EAAa85J,cAAgB95J,EAAa+5J,eAG5C,OAFA,UAAMttO,UAAS,IAAAm5L,+BAAA,gBAAiC5lH,EAAa+5J,eAA9C,CAA8DL,cAAaC,oBAAmB31P,OAAQg8F,EAAah8F,gBAClI,IAAA00K,oBAAmB,EAAAvwH,kBAAkBI,0BAA2B,CAACyxM,cAAeH,IAAkC,IAIpH,IAAA5hI,kBAAiBj4B,EAAav/F,MAAO,GAAIm5P,EAAoBD,EAAmB,KAAMxhF,GAElF8gF,GACF,UAAMxsO,UAAS,IAAA+E,iBAAgB,CAC7BiB,iBAAiB,EACjBwjL,qBAMsBgkD,EAAfA,cAAA,gCAAe,kGAaK,GAbL,IACGT,6BADH,aAEGN,oBAFH,aAGGjkI,wBAHH,MAGsB,EAAAjsE,iBAAiBI,cAHvC,MAIG4rE,gCAJH,SAKGihF,EALH,EAKGA,cALH,IAMGgjD,8BANH,aAQGS,mBARH,aASGC,yBATH,aAUGC,0BAVH,MAUwB,KAVxB,MAWGzhF,iCAXH,MAW+B,KAX/B,MAYG0hF,uCAZH,MAYqC,KAZrC,6EAetBL,EAfsB,uBAgBxB,UAAM/sO,SAAS,CACb7Y,KAAMoV,EAAM0I,kBACZrI,QAAS,CACPoJ,iBAAiB,MAGrB,IAAAimJ,oBAAmB,EAAAvwH,kBAAkBC,oBAAqB,CACxDqxM,WAAY,EAAAnwM,WAAWE,SACvBysJ,gBACAhhF,qBAzBsB,mCA8BwB,UAAMtqH,WAAjD2S,EA9BmB,EA8BnBA,UAAWxL,EA9BQ,EA8BRA,YAAa3D,EA9BL,EA8BKA,gBACzB5E,EAAW+T,EAAU/T,SAKtB,EAAD,cACF,IAAA6lB,gBAEE3yB,EAAO,CACTstC,MAAOxgC,EAASwgC,MAChBS,UAAWjhC,EAASihC,UACpBR,UAAWzgC,EAASghC,QAAQqsI,SAA5B,IAAwCrtK,EAASkhC,YACjDyvN,cAAe3wP,EAAS2wP,cACxBC,sBAAuB5wP,EAAS4wP,sBAChC/iF,OAAO,EACP1sI,OAAQnhC,EAASmhC,OACjBmrF,oBAAqBtsH,EAASssH,oBAC9BC,iBAAkBvsH,EAASusH,iBAC3BtB,YAAajrH,EAASirH,WACtB56C,aAAc,UAAO/3E,SAASmC,QAAU,MACxCixH,mBACAD,2BACAmiD,SAAU5tK,EAAS4tK,SACnB5kB,SAAUhpJ,EAASgpJ,SACnBklB,SAAUluK,EAASkuK,SACnBjlB,KAAMjpJ,EAASipJ,KACfjjJ,MAAOhG,EAASgG,MAChBg7B,QAAShhC,EAASghC,QAAQusI,KAC1BsjF,6BAA8B7wP,EAAS6wP,6BACvCC,qBAAsB9wP,EAAS8wP,qBAC/BC,OAAQ/wP,EAAS+wP,OACjB7jI,SAAU3kH,EAAY2kH,SACtB7B,MAAOhzH,SAASgzH,OAAShzH,SAASgzH,MAAMt0G,SAAW1e,SAASgzH,MAAMt0G,WAAa,MAGjF7jB,GAAO,IAAA86P,aAAY96P,GAEfi9P,GACF,CAAC,WAAY,SAAU,WAAY,WAAY,OAAQ,+BAAgC,wBACpF9yP,SAAQ,SAACxG,GACR3D,EAAK2D,GAAYmJ,EAASnJ,MAI5Bm6P,OA3EsB,sBA8EC,UAAQN,aAAax9P,GA9EtB,QA8ExB89P,EA9EwB,0DAgFpB,MAA4B,kBAAlB,KAAMh8M,SAAhB,oBACFg8M,EAAmB,CAAC99P,KAAM,CAACgE,MAAO,mBAjFZ,WAqFrB,EAAD,cACF,IAAAq6F,kBAGEy/J,EAAiB99P,KAAKgE,MAzFA,wBA0FxB64P,EAA2BiB,EAAiB99P,KAAMw5M,EAAegjD,EAAwBS,EAAaC,EAAmBC,EAAoBzhF,EAA2B0hF,GACpK1rP,EAAgBk6I,UAClB,UAAU/9G,sBAAsB,EAAAtlC,cAAcG,mBA5FxB,8BAiG1B,UAAUwkC,eAAe,yBAEzB,UAAUE,UAAU0wN,EAAiB99P,KAAK2+L,eAC1C,UAAUtxJ,kBAAkBywN,EAAiB99P,KAAKstC,MAAOwwN,EAAiB99P,KAAK+tC,UAAW+vN,EAAiB99P,KAAKguC,aAC5Gt8B,EAAgBk6I,UAClB,UAAU/9G,sBAAsB,EAAAtlC,cAAcE,mBAG5Cw0P,EAzGsB,0CA0GjBa,EAAiB99P,MA1GA,WA4GpB6d,EAAqBnM,EAAgB+B,UA5GjB,sCA+GxB,UAAMuc,UAAS,IAAA+E,iBAAgB,CAC7BgB,gBAAgB,EAChB4oK,cAAem/D,EAAiB99P,KAAK2+L,cACrCx9K,wBAAyBtD,EAAmBwuC,SAlHtB,kBAoHjByxM,EAAiB99P,MApHA,eAwH1B,UAAMgwB,UAAS,IAAA+E,kBAAA,cACbiB,gBAAiBnY,EAAmBwuC,MACpC0xM,iBAAkBlgP,EAAmBwuC,MACrCt2B,gBAAgB,EAEhB5U,wBAAyBtD,EAAmBwuC,OACzCyxM,EAAiB99P,KANP,CAOb8M,SAAU,CACRwgC,MAAOwwN,EAAiB99P,KAAKstC,WAI3Bm2D,EAASv/F,OAAO2B,SAASC,KAAKI,SAAS,gBApInB,WAqIM,IAAAs9F,WAAU,CACxCC,SACA80B,2BACAC,mBACAC,iBAAkBh1B,EAClBC,aAAa,IA1IW,WAqIpBs6J,EArIoB,QA6ItBngP,EAAmBwuC,MA7IG,0DAgJ1B,aAAElnD,UAAU8oG,QAAQ,UAAYwzB,mBAC5Bu8H,IACEpB,EAAmBoB,EACnBA,EAAkBh+P,OACpB48P,EAAmBoB,EAAkBh+P,MAEjCujG,EAA2C,iBAA5B,IAAOq5J,EAAP,0BAAOA,IAAgCA,EAAmB18I,KAAKC,MAAMy8I,GAE1F,UAAM5sO,UAAS,IAAAd,UAASq0E,EAAaviF,SAEnCy7O,IACE5+O,EAAmByvN,4BACrB,UAAMt9M,SAAS,CACb7Y,KAAMoV,EAAMkQ,eACZ7P,QAAS,CAAC2M,MAAM,MAGlB,IAAAgiJ,oBAAmB,+CAkCnByiF,EAAkBh6P,OAASg6P,EAAkBh+P,MAAQg+P,EAAkBh+P,KAAKgE,UAC9E,IAAAq6F,kBACA,IAAAm9B,kBAAiBwiI,EAAkBh6P,OAASg6P,EAAkBh+P,KAAKgE,MAAO,GAAIm5P,IArMtD,kBAuMnB,MAvMmB,6DAAf,4CA0MoBc,EAApBA,kBAAoB,WAC/B,IAAMnrP,EAAQ,UAAM5E,WACdo/B,EAAQx6B,EAAM+N,UAAU/T,SAASwgC,MACjC0sF,EAAWlnH,EAAMuC,YAAY2kH,UACnC,IAAArnG,gBACA,UAAQsrO,kBAAkB3wN,EAAO0sF,GAC9Bp8F,MAAK,SAACswE,IACL,IAAA7P,iBACAt6F,QAAQ4B,IAAI,8BAA+BuoG,GACvCA,EAASluG,KAAKgE,OAChB,IAAAw3H,kBAAiBttB,EAASluG,KAAKgE,OACtB,EAAJ,YACL,UAAMgsB,SAAS,CACb7Y,KAAMoV,EAAM0O,mBACZrO,QAAS,CACP0P,SAAS,EACT2lB,MAAO,6CACPH,QAAS,+CAIb,UAAM9xB,SAAS,CACb7Y,KAAMoV,EAAM0O,mBACZrO,QAAS,CACP0P,SAAS,EACTwlB,QAAS,2CACT99C,OAAO,EACPu4B,QAAQ,EACRspB,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,UAAMjsE,SAAS,CACb7Y,KAAMoV,EAAM0O,mBACZrO,QAAS,CACP0P,SAAS,cASxB8B,OAAM,SAACp6B,IACN,IAAAq6F,kBACA,IAAAm9B,kBAAiBx3H,OAIKu2H,EAAfA,aAAe,WAAuB,IAAtB2jI,IAAsB,yDAIjD,OAHIA,IACF,IAAAvrO,gBAEK,UAAQ4nG,eACZ38F,MAAK,SAACswE,GACDgwJ,IACF,IAAA7/J,iBAGF,IAAM8/J,EAAWjwJ,GAAYA,EAASluG,KAArB,wBAAgCkuG,EAASluG,OAAQ,GAElE,OADA,UAAMgwB,UAAS,IAAAk5L,kBAAiBi1C,IACzBA,KAER//N,OAAM,SAACp6B,GAKN,OAJIk6P,IACF,IAAA7/J,iBAEFt6F,QAAQ4B,IAAI,sBAAuB3B,GAC5B,OAKkBo6P,EAAlBA,gBAAkB,SAAC,GAGiC,IAHhCz9D,EAGgC,EAHhCA,WAGgC,IAF/B09D,2BAE+B,SAD/BlB,EAC+B,EAD/BA,mBACAzhF,EAA+B,EAA/BA,0BAEhC,OADA,IAAA/oJ,gBACO,UAAQyrO,gBAAgBz9D,GAC5B/iK,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAACp6B,IACN,IAAAq6F,kBACA,IAAAm9B,kBAAiBx3H,EAAO,GAAIm5P,EAAoBkB,EAAqB,KAAM3iF,OAIjC4iF,EAAnCA,iCAAmC,WAC9C,OAAO,UAAQC,8BACZ3gO,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,MAAQkuG,KAClC9vE,OAAM,SAAAp6B,GAAA,OAASD,QAAQ4B,IAAI,uCAAuC,IAAI81H,MAAMz3H,QAGtCw6P,EAA9BA,4BAA8B,SAACv/D,EAAOw/D,EAAUlxN,GAC3D,OAAO,UAAQmxN,8BAA8Bz/D,EAAOw/D,EAAUlxN,GAC3D3P,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GAAA,OAASD,QAAQ4B,IAAI,uCAAuC,IAAI81H,MAAMz3H,QAGxC26P,EAA5BA,0BAA4B,SAAC1/D,EAAO36H,EAAIntD,GACnD,OAAO,UAAQwnP,0BAA0B1/D,EAAO36H,EAAIntD,GACjDymB,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GAAA,OAASD,QAAQ4B,IAAI,0CAA0C,IAAI81H,MAAMz3H,S,+HC5kBpF,O,IACA,O,IACA,O,IACA,O,IACA,Q,IACA,QACA,QAKA,S,IACA,MACA,SAKA,QACA,QAOA,QACA,SACA,QACA,S,uDAEqB46P,G,kEAEnBr1H,OAAS,CACPs1H,uB,KAEFvrM,MAAQ,CACNwrM,qBAAqB,aAAE,sB,KAEzBz/L,gBAAkB,G,KAElB0/L,aAAe,WACb,EAAKzvJ,OAAS,IAAI,EAAJ,QACd,EAAKA,OAAOE,eAAe,EAAK+5B,OAAOs1H,QACvC,UAAavqM,UAAU,iBAAkB,GAAM,I,KAGjD0qM,eAAiB,WACf,UAAax5L,SACX,UAAaC,OAAOK,SACpB,EAAKvR,UACL,EACA,UAAaoR,WAAWojC,U,KAI5Bk2J,kBAAoB,SAACnnD,GACnB,GAAIA,IAAQA,EAAI7/I,kBAAoB6/I,EAAIrgJ,gBAAiB,EAEvD,IAAAwD,gBAAe68I,EAAK,KAAM,EAAApvJ,0BAA0BhI,QAAS,KAAM,KAAM,GAAI,EAAG,KAAM,MAAM,GAG5F,IAAMo1I,GAAmB,IAAAE,uBACzB,GAAIF,EAAkB,CACpB,IAAMtzL,EAAOszL,EAAiBvxK,kBAC9B,IAAA02C,gBAAe68I,EAAK,KAAM,EAAApvJ,0BAA0BnM,KAAMu5I,EAAiBpmL,UAAUqE,GAAI,KAAMvR,M,KAKrG08P,2BAA6B,SAACpnD,GAC5B,GAAIA,IAAQA,EAAI7/I,kBAAoB6/I,EAAIrgJ,gBAAiB,EAEvD,IAAAwD,gBAAe68I,EAAK,KAAM,EAAApvJ,0BAA0BhI,QAAS,KAAM,KAAM,GAAI,EAAG,KAAM,MAAM,GAG5F,IAAMo1I,GAAmB,IAAAG,qBACzB,GAAIH,EAAkB,CACpB,IAAMtzL,EAAOszL,EAAiBvxK,kBAC9B,IAAA02C,gBAAe68I,EAAK,KAAM,EAAApvJ,0BAA0BnM,KAAMu5I,EAAiBpmL,UAAUqE,GAAI,KAAMvR,M,KAKrG+xD,UAAY,SAACJ,GAEX,IAAI+M,EAAa,UAAU/J,gBAE3B,GAAI+J,GAAcA,EAAW/I,gBAAiB,CAC5C,IAAMi4H,EAAa,UAAMliL,WACnB0lG,EAAew8E,EAAWz0H,cAAci4C,aACxCE,EAAsBs8E,EAAWz0H,cAAcm4C,oBACrD,GAAIF,IAAiB,EAAAp2D,2BAA2BkD,SAAWozD,IAAwB,EAAAxxD,uBAAuBC,cAAe,CACvH,IAAIu1J,EAAM52I,EAAW/I,kBACjB2/I,GAAOA,EAAI7/I,iBAAmBm4H,EAAWz0H,cAAci4C,eAAiB,EAAA50D,qBAAqBx7B,OAC/Fs0L,EAAIpJ,gBACKoJ,GAAOA,EAAI7/I,iBAGpB,EAAKgnM,kBAAkBnnD,EAAK,EAAKxoG,OAAOG,cAK9C,EAAKH,OAAO6vJ,yB,KAGdrmD,WAAa,SAACsmD,GACZ,IAAMhvE,EAAa,UAAMliL,WACzB,UAAM8hB,UAAS,IAAAi4K,mBAAkBm3D,IACjC,UAAMpvO,UAAS,IAAAujF,mBAAkB,EAAA/1D,2BAA2BkD,UAC5D,IAAMkkB,EAAqBwrH,EAAWt2K,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,K,KAG7Dy6L,cAAgB,SAACD,GACf,UAAMpvO,UAAS,IAAAsvO,sBAAqBF,IACpC,UAAMpvO,UAAS,IAAAujF,mBAAkB,EAAA/1D,2BAA2BkD,UAC5D,UAAM1wB,UAAS,IAAAyjF,wBAAsB,IAErC,IACM7uC,EADa,UAAM12D,WACa4L,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,K,KAG7D26L,cAAgB,SAACxgH,GACf,UAAM/uH,UAAS,IAAAwvO,sBAAqBzgH,EAAehrI,M,KAGrDi0L,qBAAuB,SAACltI,GACtB,IACMuE,EADa,UAAMnxD,WACUkxD,iBAAiBC,gBAEpD,OAAO,IAAI,EAAJ,QAAmBvE,EAAMuE,EAAgB7+D,OAAS,EAAG,EAAA8pD,qBAAqB5J,U,KAGnF0jB,QAAU,SAACuyG,EAASxnE,GACdA,GACF,UAAaQ,YAAY3+F,KAAM,UAAay0D,OAAOM,QACnD,EAAK05L,0BAA2B,GAEhC,EAAK37L,oB,KAsBT47L,oBAAsB,WAGpB,IAFA,IAAIrgM,EAAkB,UAAUF,qBAEvB7+D,EAAI,EAAGA,EAAI++D,EAAgB7+D,OAAQF,IAAK,CAC/C,IAAIqgE,EAAWtB,EAAgB/+D,GAAGq/P,cAElCh/L,EAAS9sD,KAAI,SAAC+rP,GACZA,EAAQh0P,OAAgC,WAAvB,UAAO+M,aACpB,IAAAyqE,YAAWw8K,EAAQh0P,SACnB,IAAA22E,YAAWq9K,EAAQh0P,QAEnBg0P,EAAQtmB,YACVsmB,EAAQtmB,UAAUr2O,MAA+B,WAAvB,UAAO0V,aAC7B,IAAAyqE,YAAWw8K,EAAQtmB,UAAUr2O,QAC7B,IAAAs/E,YAAWq9K,EAAQtmB,UAAUr2O,WAIrCo8D,EAAgB/+D,GAAGu/P,iBAAiB58P,MAAQ09D,EAAS,GAAG/0D,OAG1D,OAnB0B,G,KAsB5Bm4E,0BAA4B,SAAC9gF,GAC3B,MAA8B,WAAvB,UAAO0V,aACV,IAAAmrE,yBAAwB7gF,GAAOq7D,YAC/Br7D,G,KAGN68P,eAAiB,WACf,IAAIC,EAAmB,EACjB9tM,EAAQ,UAAUuF,WAFH,uBAGrB,YAAmBvF,EAAnB,+CAA0B,SACfuL,KAAKg0I,wBACZuuD,GAAoB,EAAKC,uBALR,6EASrB,OAAOD,G,KAGTC,mBAAqB,WACnB,MAA8B,aAAvB,UAAOrnP,YACR,KACD,K,KAGPsnP,wBAA0B,WACxB,IAAI1gM,EAAa,GACXtN,EAAQ,UAAUuF,WAFM,uBAG9B,IAH8B,IAG9B,EAH8B,iBAItBi5I,EAJsB,QAIEjzI,KAAKg0I,sBACnC,GAAIf,EAAkB,CACpB,IAAMyvD,EAAkB,EAAKF,qBAEzB1/L,GADa,IAAAD,mBACUxoD,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAK7X,UAAUqE,KAAO08L,KAEnElxI,EAAWz+D,KAAK,CACduR,OAAQ,EAAAu1C,YAAYrL,KACpBplC,KAAM,EAAAywC,YAAYrL,KAClB/5C,KAAM89D,EAAc,UAAU95C,KAAKC,cAAc,CAAC1S,GAAIusD,EAAY/4C,KAAK7X,UAAUmF,oBAAsB,GACvGsmD,UAAWs1I,EACX9vI,SAAU,EACVngE,OAAQ0/P,EACRt2M,KAAMs2M,MAdZ,EAAmBjuM,EAAnB,+CAA0B,IAHI,6EAsB9B,OAAOsN,G,gEAtFP,UAAavK,YAAYjpD,MACzB,UAAa4jG,YAAY5jG,MACzBA,KAAKujG,QAASvjG,KAAKujG,OAAOxrC,mBAC1B,UAAO/R,UAAUE,OAAQ,M,OAGpBg5G,aAAe,WAGpB,IAFA,IAAI5rG,EAAkB,UAAUF,qBAC5BghM,EAAsB,EACjB7/P,EAAI,EAAGA,EAAI++D,EAAgB7+D,OAAQF,IAC1C6/P,GAAuB9gM,EAAgB/+D,GAAK++D,EAAgB/+D,GAAG8/P,0BAA4B,KAG7F,OAAOD,G,aAjIUvB,G,uMC/BrB,IAAYryO,E,wJAAZ,OAEkC8zO,EAArBA,mBAAqB,SAAChhM,GAAD,MAAsB,CACtDloD,KAAMoV,EAAM4nD,qBACZvnD,QAAS,CAACyyC,qBAGqB4oI,EAApBA,kBAAoB,SAACm3D,GAAD,MAAqB,CACpDjoP,KAAMoV,EAAM6nD,oBACZxnD,QAASwyO,IAGyBE,EAAvBA,qBAAuB,SAACF,GAAD,MAAqB,CACvDjoP,KAAMoV,EAAM8nD,uBACZznD,QAASwyO,IAGyBI,EAAvBA,qBAAuB,SAACzrP,GAAD,MAAS,CAC3CoD,KAAMoV,EAAM+nD,uBACZ1nD,QAAS,CAAC7Y,QAG4BgmD,EAA3BA,yBAA2B,iBAAO,CAC7C5iD,KAAMoV,EAAMgoD,4BACZ3nD,QAAS,M,4MCxBX,YAEwC0zO,EAA3BA,yBAA2B,CACtC,EAAAhlN,cAAckB,UACd,EAAAlB,cAAcmB,gBACd,EAAAnB,cAAcoB,eACd,EAAApB,cAAcqB,gBACd,EAAArB,cAAc0B,oBACd,EAAA1B,cAAcyB,oBACd,EAAAzB,cAAc2B,oBAG4C8iB,EAA/CA,6CAA+C,CAC1D,EAAAzkB,cAAckB,UACd,EAAAlB,cAAcmB,gBACd,EAAAnB,cAAcoB,eACd,EAAApB,cAAcqB,iBAG0C4jN,EAA7CA,2CAA6C,CACxD,EAAAjlN,cAAcmB,gBACd,EAAAnB,cAAcoB,iB,+ICrBhB,SACA,QACA,Q,IACA,O,IAEA,M,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBkxM,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAr+O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAKhY,cAAL,iBAGA,EAAK+wP,SAAW,KAChB,EAAKC,UAAY,KACjB,EAAKC,WAAa,KAClB,EAAKC,UAAY,KACjB,EAAKC,WAAa,KAClB,EAAKC,SAAW,KAChB,EAAK/sI,QAAU,KACf,EAAKgtI,cAAgB,KACrB,EAAK/iD,UAAY,KACjB,EAAKgjD,iBAAmB,KAExB,EAAK7zB,iBAAkB,EACvB,EAAKl8E,kBAAoB,CAAC,aAAc,qBAAsB,YAAa,aAAc,cACvF,aAAc,YAAa,UAAW,kBAtB5B,E,qEAyBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACL,IAAK,iBACHy/H,EAAkB,WAClBC,YACA,MACF,IAAK,aACL,IAAK,kBACHD,EAAkB,YAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,aACL,IAAK,kBACHD,EAAkB,YAClBC,YACA,MACF,IAAK,YACL,IAAK,aACHD,EAAkB,WAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,qBACHD,EAAkB,mBAClBC,YACA,MACF,IAAK,iBACHD,EAAkB,gBAClBC,YACA,MACF,IAAK,UACL,IAAK,UACHD,EAAkB,UAClBC,YAGJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,2CAIrE,OAAO,I,iCAGmB,WAAnBqtB,IAAmB,yDAC1B,OAAOvyK,KAAK+e,aACT/X,QAAO,SAAAiqE,GACN,OAAO,EAAKwhG,kBAAkBxhG,EAAMshG,MAErCzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,6FAO1B+lP,GAAmB,IACnChoP,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACPjN,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACpBA,EAAYtmI,SAAW2uP,EAAkB3uP,QAAUsmI,EAAYO,8BACjB,gBAA5CP,EAAYO,6BACdP,EAAYlmD,oBAAqB,EACjCkmD,EAAYrmD,WAAWt5E,IAAoB,GACjC2/H,EAAYsoH,gBACtBtoH,EAAYO,4BAA4BC,0B,yCAO9C,OAAKptI,KAAKgyM,WAGLhyM,KAAKgyM,UAAUlvH,UAAY9iF,KAAKgyM,UAAU7rL,eAAiBnmB,KAAKgyM,UAAU7rL,cAAcrT,SAA7B,eAC3D9S,KAAKgyM,UAAU7rL,cAAcw6D,gCAAgC3gF,KAAKgyM,UAAUvxH,wBACxEzgF,KAAKgyM,UAAU7rL,cAAcrT,SAA7B,cAEA,CAAC,KAAM,KANP,S,aA3GJ9K,GAAK,Q,aADO65O,G,gLChBrB,Q,IACA,OAEA,QACA,QACA,QACA,QAMA,Q,IACA,O,IACA,OACA,QACA,QAEA,Q,IACA,Q,IACA,Q,IACA,QACA,Q,IACA,MACA,Q,IACA,OACA,QAKA,QACA,QACA,SACA,SACA,SACA,S,uDAGqBsT,E,YAEnB,WAAY7pJ,GAAO,gHACXA,IADW,SAqHnB00H,gBAAkB,WAChB,EAAKhd,eAtHY,EAyHnBoyC,gBAAkB,WAChB,IAAMl6O,GAAS,IAAAC,oBACf,GAAI,EAAKmwF,MAAMnlF,eAAiB,EAAKpf,MAAMwwN,gBAAkB,EAAKxwN,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAAQ,CAC1G,GAAI,EAAK93C,MAAM4yN,oBAAqB,CAClC,IAAM07B,EAAiBn6O,EAAOo9E,sBAAsB,EAAKvxF,MAAM4yN,oBAAqB,GAAI,IAAI,GACzF7tN,MAAK,SAAA6T,GACJ,OAAO,EAAK2rF,MAAMnlF,cAAcxiB,UAAUqE,KAAO2X,EAAQnE,KAAK7X,UAAUqE,MAExEqtP,GACF,EAAKnuG,0BAA0BmuG,QAGjC,EAAKnuG,0BAA0B,CAC7B1rI,KAAM,EAAK8vF,MAAMnlF,gBAGrB,EAAKmlF,MAAMipH,iBACF,EAAKxtN,MAAMoxN,cAAgB,EAAAz5K,YAAYI,cAAgB,EAAKw2M,2BAAgE,IAAnC,EAAKA,8BAClG,EAAKhqJ,MAAMx5F,mBAAmBwuC,OAAU,EAAKgrD,MAAMx5F,mBAAmBwuC,OAAS,EAAKgrD,MAAMl2F,yBAC/F,EAAK+mN,yBAAyB,EAAKm5B,2BAErC,EAAKtyC,eA9IY,EAiJnBmf,mBAAqB,WACf,UAAOrhO,0BACT3I,OAAO0uD,iBAAiB,UAAW,EAAK0uM,mBAnJzB,EAuJnBA,iBAAmB,SAAC30J,GACdA,EAAM3sG,MAAQ2sG,EAAM3sG,KAAKysC,SAAW,EAAA0hM,8BAA8BozB,2BACpE,EAAKC,6BAzJU,EA6JnBA,0BAA4B,aA7JT,EA+JnBr9B,0BAA4B,SAACs9B,EAAal+B,GAAiD,IAAlCh8E,EAAkC,uDAAT,KAC1EtgI,GAAS,IAAAC,oBACTm9E,EAAwBp9E,EAAOo9E,wBAC/Bq9J,EAAiBn+B,EACnBl/H,EAAsBxsF,MAAK,SAAAmlE,GAAA,OAAQA,EAAK3uD,OAASk1M,KACjDl/H,EAAsBxsF,MAAK,SAAAmlE,GAAA,OAAQA,EAAK3uD,OAASozO,KAEjDC,IACF,EAAKr4E,SAAS,CACZy6C,qBAAsB49B,EACtBh8B,oBAAqB,OACpB,WAWD,GATIg8B,EAAen6O,KAAKjY,WAAa,EAAAC,aAAa02B,QAChD,EAAK64L,2BAA2B4iC,EAAgB,wBAG9CA,EAAen6O,KAAKirF,aACtBkvJ,EAAen6O,KAAKirF,cAIlB+wH,EAAe,CACjB,IAAMo+B,EAAoB,EAAK7uP,MAAMgxN,qBAAqBv8M,KAAKiB,WAAW3Q,MAAK,SAAAmlE,GAC7E,OAAOA,EAAK3uD,OAASozO,KAEnBE,GACF,EAAKl8B,mBAAmBk8B,EAAmBp6G,OAKjD,EAAKlwC,MAAMnnF,yBAAyBwxO,EAAen6O,KAAKK,WAEtC,UAAhB65O,GACF,aAAE,cAAcloK,QAAQ,CAACy5E,UAAW7tK,SAAS6C,KAAKshL,cAAe,KACxC,YAAhBm4E,GAA6C,WAAhBA,IACtC,aAAE,cAAcloK,QAAQ,CAACy5E,UAAW,GAAI,MApMzB,EAwMnBgW,sBAAwB,SAAChsG,GACvB,EAAKqsG,SAAS,CACZy6C,qBAAsB9mJ,EACtB8nJ,oBAAmC,UAAd9nJ,EAAK3uD,MAAoB2uD,EAAKz1D,KAAK42E,sBACvD,WAID,GAAkB,UAAdnhB,EAAK3uD,MAAkC,WAAd2uD,EAAK3uD,MAAmC,YAAd2uD,EAAK3uD,MAAoC,WAAd2uD,EAAK3uD,MAAmC,WAAd2uD,EAAK3uD,MAC3G2uD,EAAK1tE,WAAa,EAAAC,aAAaC,QAAU,CAC7C,IAAMgZ,GAAW,IAAA0vK,oBAAmB,EAAKplL,MAAMgxN,qBAAqBv8M,MAChEiB,EAAShoB,QACX,EAAKilO,mBAAmBj9M,EAAS,KAGlB,YAAdw0D,EAAK3uD,MAC8B,aAArClpB,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,iBAA2C,WAAdw1E,EAAK3uD,OACxG,EAAKg7J,SAAS,CACZq8C,oBAAqB,OAEvB,EAAK5G,2BAA2B9hJ,EAAM,yBAExC,EAAKspJ,gBAAgBtpJ,MAEvB,EAAKq6B,MAAMnnF,yBAAyB8sD,EAAKz1D,KAAKK,WAhO7B,EAmOnBg/M,sBAAwB,SAAA37M,GACtB,IAAMhE,GAAS,IAAAC,oBAC0B,YAArC/hB,SAASC,SAASoC,gBAAgCyf,EAAOqmE,+BAA+BpnF,SAAS,OAC/F,EAAA89B,oBAAoB/Y,GAAY/kB,SAAS,MAC7C,EAAKo/N,kBAEHr+M,EAAO9P,OAAS8T,GAClB,EAAKu0M,aAAav0M,IA1OH,EA8OnBq6M,gBAAkB,WAChB,EAAKj8C,SAAS,CACZy6C,qBAAsB,KACtB4B,oBAAqB,KACrB11I,WAAY,KAEd,EAAKqnB,MAAMplF,iBAAiB,MACxB,EAAKolF,MAAMiwC,4BACb,EAAKjwC,MAAMiwC,0BAA0B,EAAAx/C,uBAAuB,GAAGC,UAC/D,EAAKsP,MAAMmwC,mCAAmC,KAvP/B,EA2PnBo6G,kBAAoB,SAAC5xK,GACnB,GAAIA,GAAcA,EAAWxvF,OAAS,EAAG,CACvC,EAAK62G,MAAMuvC,sBAAqB,GAChC,IAAMqjC,EAAY,EAAKn3K,MAAM4yN,oBAAsB,EAAK5yN,MAAM4yN,oBAAoBn+M,KAAO,EAAKzU,MAAMgxN,qBAAqBv8M,KACnHwzH,EAAW,EAAC,IAAA8mH,sBAAqB53E,EAAWj6F,IAClD,GAAI,EAAAyY,iBAAiBviG,SAAS+jL,EAAU53K,SAAgD,YAArClN,SAASC,SAASoC,eAA8B,CAEjG,IAAMyf,GAAS,IAAAC,oBACf,EAAAuhF,iBAAiBt+F,SAAQ,SAAA8vN,GACvB,GAAIA,IAAiBhwC,EAAU53K,OAAQ,CACrC,IAAMsW,EAAe1B,EAAOgb,wBAAwBg4L,GAChDtxM,GACFoyH,EAASj6I,KAAKogQ,EAAWz4C,qBAAqB9/L,EAAcqnE,EAAY,UAKhF7tF,QAAQ64I,IAAID,GACTn9G,MAAK,WACJ,EAAKy5E,MAAMuvC,sBAAqB,GAChC,EAAKyiC,SAAS,CACZrjH,QAAQ,IACP,WACD,EAAKqjH,SAAS,CACZrjH,QAAQ,YAnRD,EA0RnB87L,oBAAqB,aAAS,EAAKF,kBAAmB,KA1RnC,EA4RnB94C,yBA5RmB,gCA4RO,WAAOn8G,GAAP,oFAClB3c,EAAa2c,EAAMlqF,OAAOxf,MAChC,EAAKomL,SAAS,CACZr5F,eAHsB,SAKlB,EAAK8xK,mBAAmB9xK,GALN,6CA5RP,+CAoSnBi0I,yBAA2B,SAACZ,GAC1B,IAAMp8M,GAAS,IAAAC,oBACf,KAAK,EAAKmwF,MAAMx5F,mBAAmB8rB,aAAgB,EAAK0tE,MAAMx5F,mBAAmB8rB,aAAe,EAAK0tE,MAAMthF,iBAC5E,gBAAzBstM,EAAS97M,KAAKlV,SAA+C,qBAAlBgxN,EAASh1M,MAAiD,cAAlBg1M,EAASh1M,MAAuB,CACrH,IACM0zO,EADS96O,EAAOsD,MAAMu7E,OACAqtD,uBACtBp7D,GAAa,IAAAD,yBAAwBiqK,EAAa3uG,oBAClD3a,EAAaxxH,EAAOsD,MAAMqjO,MAChC,GAAsB,qBAAlBvqB,EAASh1M,MAA8C,SAAf0pE,GAAyB0gD,EAAWupH,SAASvvK,mBAAoB,CAC3G,IAAM3F,EAAQ2rD,EAAWupH,SAAS9vO,cAAc1G,yBAChD,EAAKy2O,wCAAwCxpH,EAAY,mBAAoB3rD,QACxE,GAAsB,cAAlBu2I,EAASh1M,MAAuC,SAAf0pE,GAAyB0gD,EAAWypH,QAAQzvK,mBAAoB,CAC1G,IAAM3F,EAAQ2rD,EAAWypH,QAAQhwO,cAAc1G,yBAC/C,EAAKy2O,wCAAwCxpH,EAAY,YAAa3rD,MAjT3D,EAuTnBm1K,wCAA0C,SAAC38P,EAAQ+M,EAAQy6E,GACzD,IAAMq1K,EAAa78P,EAAOi3I,kBAAkB1kI,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWA,KACzE+vP,EAAe,WACnB,IAAMC,EAAiB/8P,EAAO48P,QAAQz2O,qBAAqB5T,MAAK,SAAA6T,GAC9D,OAAOA,EAAQnE,KAAKiE,2BAA6BshE,KAE/Cu1K,IACFA,EAAe96O,KAAKirF,aAAY,GAChC,EAAK6E,MAAMipH,cAGf8hC,IACA,EAAKtjC,2BAA2B,CAACv3M,KAAM46O,GAAa,KAAMC,IAnUzC,EAsUnBx9B,YAAc,YACR,IAAA7zN,aAAc7M,OAAOoB,QACvBpB,OAAOoB,OAAO4oC,YAAY,CACxBzB,OAAQ,cACR7f,QAAS,IACR,KAED,EAAKyqF,MAAMsxH,sBAAwB,EAAKtxH,MAAMolD,4BAChD,EAAKplD,MAAMsxH,sBAET,EAAKtxH,MAAMgvC,yBACb,EAAKhvC,MAAMgvC,yBAAwB,GAEjC,EAAKhvC,MAAMyvC,0BACb,EAAKzvC,MAAMyvC,yBAAyB,EAAAt/C,0BAA0BC,UApV/C,EAuWnB66J,WAvWmB,gCAuWP,WAAOtlL,EAAMt8D,GAAb,gGAEJuG,GAAS,IAAAC,oBAEX81D,GAAsB,UAAdA,EAAK3uD,MACf,aAAE,cAAckrE,QAAQ,CAACy5E,UAAW7tK,SAAS6C,KAAKshL,cAAe,KACxDtsG,GAAsB,YAAdA,EAAK3uD,OACtB,aAAE,cAAckrE,QAAQ,CAACy5E,UAAW,GAAI,KAGZ,YAA1B/rJ,EAAOzf,eAVD,iCAWF,IAAA+6P,0CAAyCvlL,EAAKz1D,MAX5C,WAcNN,EAAO4Z,aAAgBm8C,EAAKz1D,KAAKuD,aAd3B,wBAgBF03O,EAhBE,+CAgBa,WAAOpzP,GAAP,kFAEf,IAAAqzP,4BAA2BrzP,GAFZ,iCAGX,IAAAmzP,0CAAyCnzP,GAH9B,WAMnB,IAAAijF,iBAAgBjjF,GAAS,EAAMsR,MAEzB45H,GAAe,IAAAd,iBAAgBx8D,EAAKz1D,QACtB5T,MAAMC,QAAQ0mI,EAAaX,sBAAwBW,EAAaX,oBAAoBn5I,QATrF,iCAUX,IAAA45I,wBAAuBp9D,EAAKz1D,KAAM+yH,GAAc,GAVrC,6CAhBb,+DAyCFkoH,EAAaxlL,EAAKz1D,MAzChB,gDA6CFy1D,EAAKz1D,KAAKirF,YAAY9xF,GA7CpB,QA+CJ,EAAK0+M,WAAWpiJ,EAAKz1D,OAASy1D,EAAKz1D,KAAK9a,YAAYA,YAAYygO,iBAClE,EAAKw1B,cAAc1lL,EAAKz1D,KAAM7G,GAE5B,EAAAgoF,cAAcxiG,SAAS82E,EAAKz1D,KAAKlV,SAAW,EAAA80B,uBAAuBjhC,SAAS82E,EAAKz1D,KAAKlV,SAClFoP,GAAkB,IAAAhB,oBAAmBu8D,EAAKz1D,MAChD,UAAiBgzM,iBAAiBv9I,EAAKz1D,MAAO9F,GAAmBf,KACxD,EAAA+nF,iBAAiBviG,SAAS82E,EAAKz1D,KAAKlV,SAAW,EAAA60B,0BAA0BhhC,SAAS82E,EAAKz1D,KAAKlV,WAC/FoP,GAAkB,IAAAhB,oBAAmBu8D,EAAKz1D,MAChD,UAAoBkzH,oBAAoBz9D,EAAKz1D,MAAO9F,GAAmBf,IAvDjE,QA2DNs8D,EAAKz1D,KAAK9a,WAAauwE,EAAKz1D,KAAK9a,YAAYoiF,WACzC8zK,EAAa3lL,EAAKz1D,KAAK9a,YACvBm2P,GAAe,IAAAniP,oBAAmBu8D,EAAKz1D,KAAM7G,GAC/CmiP,GAA4B,EACN,qBAAtBF,EAAWtwP,QAAiD,IAAhB4U,EAAO9P,OAC/Ci+E,EAAanuE,EAAOsD,MAAMu7E,OAAO1Q,aACrBA,EAAWvG,WAC3Bg0K,GAA4B,IAG5BF,EAAW9zK,UAAag0K,GAA8BD,IACxDD,EAAW9zK,UAAW,EACtB8zK,EAAWhkK,gBACX,UAAM3uE,UAAS,IAAA44H,uCAAqC,IACpD,UAAM54H,UAAS,IAAA44H,uCAAqC,MAGpD5rE,EAAKz1D,KAAK9a,WAAauwE,EAAKz1D,KAAK9a,YAAYA,WAEvB,YADlBnH,EAAS03E,EAAKz1D,KAAK9a,YAAYA,aAC1Bmb,UAAyBtiB,EAAO8vF,WAAWvG,WACpDvpF,EAAO8vF,WAAWvG,UAAW,EAC7BvpF,EAAO8vF,WAAWuJ,kBAGtB,aAAEz6F,QAAQ+pG,QAAQ,UAAYszB,eAC9B,UAAMvxG,UAAS,IAAAgP,sBApFL,8CAvWO,iDA8bnB8jO,0BAA4B,SAAC9lL,EAAM+lL,GAGjC,KADwB,IAAAtiP,oBAAmBu8D,EAAKz1D,MAC1B,CACpB,IAAMu6B,EAAU,CACd/tC,GAAI,mCACJ4U,aAAcq0D,EAAKz1D,KAAK9a,YAAYmb,SAASvf,cAC7CinF,YAAatS,EAAKz1D,KAAKhD,iBACvBw+O,qBAEF,EAAK1rJ,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,UACA+D,QAAS,CAAC,CACRx3B,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,WACLjf,EAAKz1D,KAAKy7O,mBAAmBD,GAC7B/lL,EAAKz1D,KAAKirF,cACV,IAAMkzH,EAAsB,EAAK5yN,MAAM4yN,oBACvC,EAAKr8C,SAAS,CACZq8C,oBAAqB,OACrB,WACA,EAAKr8C,SAAS,CACZq8C,2BAGJjrI,YAAW,YACT,IAAApB,oBAAkB,aAAE,oBAAoB,aAAE,uBACzC,KACH,EAAKge,MAAMt8E,sBAAsB,CAACuB,SAAQ,MAE5C,CACAjO,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAQ,WAlejC,EAyenB2mO,oBAAsB,SAAC19I,EAAWvoC,GAA+B,IAAzBt8D,EAAyB,wDACzDe,GAAkB,IAAAhB,oBAAmBu8D,EAAKz1D,KAAM7G,GACtD,IAAKe,EAAiB,CACpB,IAAMqgC,EAAyB,WAAdyjE,EAA0B,kCAAoC,wCACzE1/D,EAAyB,WAAd0/D,EACb,CAAC,CACDl3F,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAQ,OAG5C,CAAC,CACDjO,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAQ,MAE5C,CACAjO,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,WACL,EAAKqmK,UAAUtlL,EAAMt8D,GACrB,EAAK22F,MAAMt8E,sBAAsB,CAACuB,SAAQ,OAGhD,EAAK+6E,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,UACA+D,cAtgBa,EA2gBnBqhL,yBAA2B,WACzB,IAAMzuF,EAAa,EAAK3lI,MAAMgxN,qBAAqBv8M,KACnDkxH,EAAWy0F,iBAAmBz0F,EAAWy0F,iBACpCz0F,EAAWy0F,iBAAmB,EAAKg2B,mBACtCzqH,EAAW0qH,yBAAyB,EAAKrwP,MAAM4yN,oBAAoBn+M,MAEnEkxH,EAAWy0F,iBACR,EAAKp6N,MAAM4yN,qBACX,EAAK5yN,MAAM4yN,oBAAoBn+M,MAC/B,EAAKzU,MAAM4yN,oBAAoBn+M,KAAK2K,eACpC,EAAKpf,MAAM4yN,oBAAoBn+M,KAAKkrE,oBACvC,EAAKiwK,cAAc,EAAK5vP,MAAM4yN,oBAAoBn+M,KAAK2K,eAAe,GAExE,EAAKmlF,MAAMipH,aAxhBM,EA2hBnBwF,uBAAyB,WACvB,IAAMn9M,EAAe,EAAK7V,MAAM4yN,oBAAoBn+M,MAC/C,EAAK63M,WAAWz2M,IAAiBA,EAAay6O,uBAC9C,EAAKtwP,MAAMgxN,qBAAqBv8M,KAAK87O,sBACxC,EAAKvwP,MAAMgxN,qBAAqBv8M,KAAK87O,qBAAqB16O,GAE5D,EAAKu6O,oBAAqB,GAjiBT,EAoiBnBR,cAAgB,SAAC/6C,EAAoBjnM,GAEnC,IAAMuG,GAAS,IAAAC,oBAETo8O,EADa,EAAKxwP,MAAMgxN,qBAAqBv8M,KACvBuD,aAE5B,GAAyC,aAArC3lB,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,eAAyB,CAChG87P,EAASn5P,SAAQ,SAACwuI,GAChB,GAAI,EAAKymF,WAAWzmF,IAAiBA,EAAYtmI,SAAWs1M,EAAmBt1M,OAAS,CACtF,IACIkxP,EADiB,CAAC,oBAAqB,mBAAoB,aACnBr9P,SAASyyI,EAAYtmI,QAC7DsmI,EAAY6qH,uBACZ7qH,EAAYjrD,SACVkrD,EAAqB+uE,EAAmBj4M,UAAUmF,kBAClDgvF,EAAgB0/J,EAAyB1rP,MAAK,SAACzI,GACnD,IAAMkgF,EAAclgF,EAAQM,UAAUmF,kBACtC,OAAO+jI,IAAuBtpD,KAGhCuU,GAAiBA,EAAcs1C,kBAAkBz4H,OACjB,gBAAvBi4H,EAAYtmI,QAA6BsmI,EAAYlmD,qBAC9DkmD,EAAY9pD,UAAW,MAG3B,IAAMokC,EAAShsG,EAAOsD,MAAP,OACX0oG,EAAOo9B,mBAAqBp9B,EAAOo9B,iBAAiB59D,qBACtDwgC,EAAOo9B,iBAAiBxhE,UAAW,OAES,aAArC1pF,SAASC,SAASoC,gBAC3B87P,EAASn5P,SAAQ,SAACwuI,GAChB,GAAI,EAAKymF,WAAWzmF,IAAiBA,EAAYtmI,SAAWs1M,EAAmBt1M,OAAS,CACtF,IAAMumI,EAAqB+uE,EAAmBj4M,UAAUmF,kBAClDgvF,EAAgB80C,EAAYjrD,SAAS71E,MAAK,SAACzI,GAE/C,OADoBA,EAAQM,UAAUmF,oBACf+jI,KAGzB/0C,GAAiBA,EAAcs1C,kBAAkBz4H,OAKvD,EAAKwiP,oBAAqB,EAC1B,EAAK7rJ,MAAMipH,aA/kBM,EAklBnBmjC,mBAAqB,SAAC77O,GAEpB,OAAQA,GACN,IAAK,SACH,EAAKyvF,MAAMzmF,eAAc,GACzB,MACF,IAAK,SACH,EAAKymF,MAAMtmF,eAAc,KAzlBZ,EAgmBnBo2M,mBAAqB,SAAAhmK,GACnB,UAAUj0B,eAAe,oBAAsBi0B,GAC/C,EAAKsiM,mBAAmB,EAAK3wP,MAAMgxN,qBAAqBv8M,KAAKK,UACzD,EAAKyvF,MAAM1lF,kCACb,EAAK0lF,MAAM1lF,iCAAiC,GAE9C,EAAK7e,MAAMgxN,qBAAqBv8M,KAAK4/M,mBAAmBhmK,EAAS,EAAK8xF,2BACtE,IAAMyyE,EAAsB,EAAK5yN,MAAMgxN,qBAAqBv8M,KAAKm8O,kCACjE,EAAKr6E,SAAS,CACZq8C,sBACAZ,oBAAqBY,EAAoBn+M,KAAK42E,oBAC9C4mI,gCAAgC,EAChC/0I,WAAY,KACZ,WACA,EAAKo0I,sBACL,EAAK0B,yBACL,EAAKhH,2BAA2B4G,EAAqB,0BAGvD,EAAKK,8BAA8BL,GACnC,EAAKruH,MAAMipH,aApnBM,EAunBnByF,8BAAgC,SAACL,GAC/B,IAAMz+M,GAAS,IAAAC,oBACXy8O,EAAmB,EACvB,GAAI,EAAK7wP,MAAMgxN,uBAAyB78M,EAAOc,aAAc,CAC3D,IAAMS,EAAWk9M,EAAoBn+M,KAAK9a,YAAY+b,UAAS,GAC/Dm7O,EAAmBn7O,EAASE,WAAU,SAAAk7O,GACpC,OAAOA,EAAer8O,KAAKlV,SAAWqzN,EAAoBn+M,KAAKlV,UAGnEooF,YAAW,WACT,EAAK4c,MAAM1lF,iCAAiCgyO,KAC3C,IAloBc,EAqoBnBv/B,oBAAsB,SAACy/B,GAKrB,GAJKA,IACHA,EAAoB,EAAK/wP,MAAM4yN,qBAAuB,EAAK5yN,MAAMgxN,sBAAwB,MAGvF+/B,EAAmB,CACrB,IAAMC,EAAiB,EAAKzsJ,MAAMx5F,mBAAmB8rB,eAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,gBAC5I,EAAKo2F,MAAMthF,gBAAkB8tO,EAAkBt8O,KAAKgrE,qBACrD,EAAK8kB,MAAMx5F,mBAAmB8rB,eAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,eAC3H,EAAKo2F,MAAMthF,gBACX8tO,EAAkBt8O,KAAKgrE,sBACtBsxK,EAAkBt8O,KAAKkrE,mBACzBoxK,EAAkBt8O,KAAKgrE,oBACvBsxK,EAAkBt8O,KAAK2K,cAC3B,EAAKmlF,MAAMplF,iBAAiB6xO,KAnpBb,EAupBnB57B,yBAA2B,SAACvuN,EAAOsuN,GACjC,IAAMhhN,GAAS,IAAAC,oBAEf,GADA,UAAUgmB,eAAe,mBAAqBvzB,GAC1CsuN,EAKF,OAJA,EAAKo5B,0BAA4B1nP,OACjC,EAAK09F,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,IAIrB,EAAKqrO,0BAA4B,KACjC,EAAKh4E,SAAS,CACZw7C,oBAAqBlrN,IACpB,WACDzV,OAAOs0I,kBAAmB,GAC1B,IAAA7lH,gBACA,IAAMoxO,EAAgB,EAAK1sJ,MAAMlkF,UAAUxZ,GAC3C5V,QAAQ4B,IAAI,gBAAiBo+P,GAC7B,IAAM9lK,EAAgBh3E,EAAOsD,MAAP,QAItB,IAHoB0zE,GAAiBA,EAAcC,aAC7CD,EAAcC,WAAWC,qBAAyBF,GAAiBA,EAAcK,gBACjFL,EAAcK,cAAcH,sBACsB,YAArCh5F,SAASC,SAASoC,eAA+B,CAClE,IAAMuwJ,EAAc,CAAC,cAAe,kBAI9Bhd,EAHa98C,EAAcnzE,aAAa/X,QAAO,SAAC4lI,GACpD,OAAOof,EAAY7xJ,SAASyyI,EAAYtmI,UAAYsmI,EAAYx6C,uBAEtCtqF,KAAI,SAAC8kI,GAC/B,OAAO,IAAAjb,oBAAmBib,EAAYhxH,QAAUgxH,EAAY/wH,UAAUgW,MAAK,SAAAswE,GAEzE,OADAyqC,EAAYI,iBAAiBplI,MAAMC,QAAQs6F,GAAYA,EAAW,IAC3DA,QAGX/rG,QAAQ64I,IAAID,GACTn9G,MAAK,kBAAM,EAAKomO,oBAAoB/8O,EAAQ88O,WAE/C,IAAApxO,gBACA,EAAKqxO,oBAAoB/8O,EAAQ88O,OA5rBpB,EAisBnBC,oBAAsB,SAAC/8O,EAAQm5E,GAC7Bn5E,EAAOm0H,oBAAoBh7C,GACxBxiE,MAAK,WACJ15B,OAAOs0I,kBAAmB,GAC1B,IAAAn6C,qBArsBa,EAysBnByqF,qBAAuB,WAA2C,IAA1C0wB,EAA0C,uDAA1B,EAAAnuJ,eAAeC,OACrD,EAAK+rD,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBwjL,mBA5sBe,EAgtBnByqD,0BAA4B,SAACnlI,GAAc,MAEsB35H,SAASC,SAAjE8b,EAFkC,EAElCA,qBAAsBH,EAFY,EAEZA,UAAWC,EAFC,EAEDA,MAAOC,EAFN,EAEMA,aAFN,EAG2D,EAAKo2F,MAAlGx5F,EAHkC,EAGlCA,mBAAoBsD,EAHc,EAGdA,uBAAwB+Q,EAHV,EAGUA,cAAenQ,EAHzB,EAGyBA,aAAc/I,EAHvC,EAGuCA,iBAHvC,EAIa,EAAKlG,MAApD0jN,EAJkC,EAIlCA,kBAAmB0tC,EAJe,EAIfA,yBAE1B,IAAKrmP,EAAmB8rB,aAClB9rB,EAAmB8rB,aAAezoB,GAClCrD,EAAmB8rB,aAAexoB,GAClCtD,EAAmB8rB,aAAgB5oB,GAAaC,GAASC,EAC7D,OAAO,EAGT,IACMkjP,EACExiP,EAWR,OACEuQ,GACGA,EAAczlB,YAAY6lF,WAAWt5E,IACrCkZ,EAAcxiB,YACbwiB,EAAcxiB,UAAUgS,WACxBwQ,EAAcy9D,4BACbmvC,GAAa03F,IACd13F,GAAa03F,GAAqB0tC,IAnBlCC,GAAgB,GACdxiP,EAAeuQ,GAAiBA,EAAcxiB,WAAawiB,EAAcxiB,UAAUkS,kBAEvFuiP,EAAgB1jQ,OAAOmc,KAAK+E,GAAc3V,MAAK,SAAC6V,GAC9C,IAAMC,EAAcC,EAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMjO,MAAQ8N,KACvDI,EAAcH,GAAeA,EAAYI,QAAUJ,EAAYI,OAAOrK,MAAK,SAAA5U,GAAA,OAASA,EAAM8Q,KAAO4N,EAAaE,GAAW,MAC/H,OAAOI,GAAeA,EAAYE,mBAG/BgiP,IAvuBQ,EAovBnBn8B,wBAA0B,WAExB,IAAM/gN,GAAS,IAAAC,oBACTrJ,EAAqB,EAAKw5F,MAAMx5F,mBAChCumP,EAAsBvmP,IACzBA,EAAmBy5K,2BACdz5K,EAAmB05K,8BAAgCpyL,SAASC,SAAS2b,WAC7E,OAAOpN,MAAMC,QAAQ,EAAKyjG,MAAMlkF,YAAc,EAAKkkF,MAAMlkF,UAAU3yB,OAC/D,EAAK62G,MAAMlkF,UACVpgB,QAAO,SAAAqtF,GACN,OAAKgkK,GAA6D,aAArCj/P,SAASC,SAASoC,gBACL,OAArCrC,SAASC,SAASoC,eAGhB44F,EAFyB,IAAvBA,EAAOq7H,eAIjB5nN,KAAI,SAACusF,GASJ,OARIA,EAAOikK,eACTjkK,EAAO6nI,gBAAiB,EAExB7nI,EAAO6nI,eAAiB,EAAK5wH,MAAMx5F,mBAAmB8rB,eAC/CxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,gBAC7E,EAAKo2F,MAAMl2F,0BAA4Bi/E,EAAOikK,gBAAkBp9O,EAAOq9O,sBAAsBlkK,IAG9FA,KACN3rF,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEuzN,iBAAmBtzN,EAAEszN,eAAiBvzN,EAAEuzN,eAAiBtzN,EAAEszN,gBAAkB,EAAI,EAAI,KACzG,IA/wBa,EAkxBnBs8B,iBAAmB,WACjB,EAAKl7E,SAAS,CACZ26C,iBAAiB,KApxBF,EA0xBnB5N,kBAAoB,SAACthI,EAAcziF,GACjC,EAAKg3K,SAAS,CACZq+C,gBAAiB,EACjBlR,mBAAmB,EACnB0tC,0BAA0B,EAC1Bl0K,WAAY,KAEd,EAAKw3I,gBAAgB1yI,EAAcziF,IAjyBlB,EAoyBnBqkN,oBAAsB,SAACgR,GACrB,EAAKr+C,SAAS,CACZq+C,kBACA3C,+BAAoD,IAApB2C,IAC/B,WACD,EAAKr+C,SAAS,CACZmtC,mBAAmB,QA1yBN,EA+yBnBguC,mBAAqB,SAAC98B,GACpB,EAAKr+C,SAAS,CACZq+C,qBAjzBe,EAqzBnBF,gBAAkB,SAAC1yI,EAAcziF,GAC/B,IAAMoyP,EAAmB,EAAKl9B,wBAAwBl1N,GACtD,EAAKg3K,UAAL,gBACGo7E,EAAmB,EAAK3xP,MAAM2xP,GAAkB5wP,KAAI,SAAC4iB,GACpD,IAAMiuO,EAAe5vK,EAAaj9E,MAAK,SAAAiwG,GAAA,OAAUA,EAAO2/F,aAAehxL,EAAYgxL,cAOnF,OANIi9C,IACFjuO,EAAY6/L,gBAAkBouC,EAAapuC,gBAC3C7/L,EAAYkuO,kBAAoBD,EAAaC,kBAC7CluO,EAAYmuO,OAASF,EAAaE,OAClCnuO,EAAYvU,OAASwiP,EAAaxiP,QAE7BuU,QAh0BM,EAq0BnBgxM,oBAAsB,SAACm7B,GACrB,EAAKv5E,SAAS,CACZ66E,yBAA0BtB,KAv0BX,EA20BnBiC,mBAAqB,WACnB,EAAKxtJ,MAAMplF,iBAAiB,MAC5B,EAAKo3J,SAAS,CACZ66E,0BAA0B,KA90BX,EAk1BnBr5B,iBAAmB,WACjB,EAAKxhD,SAAS,CACZy7E,mBAAoB,EAAA/9N,oBAAoBlzB,KAAI,SAAC4zM,GAC3C,MAAO,CACLA,aACA6O,gBAAiB,KACjBquC,kBAAmB,GACnBC,OAAuB,aAAfn9C,MAGZs9C,uBAAwB,EAAA/9N,oBAAoBnzB,KAAI,SAAC4zM,GAE/C,MAAO,CACLA,aACA6O,gBAAiB,KACjBquC,kBAAmB,GACnBC,OALoB,CAAC,YAAa,YAAa,cAAe,iBAAkB,gBAK1D1+P,SAASuhN,OAGnC+O,mBAAmB,EACnBkR,gBAAiB,EACjBw8B,0BAA0B,KAv2BX,EA22BnB38B,wBAA0B,SAACl1N,GACzB,OAAQA,GACN,IAAK,iBACH,MAAO,qBACT,IAAK,uBACH,MAAO,yBACT,QACE,MAAO,KAl3BM,EAs3BnB8kN,qBAAuB,SAAC1P,GAA4B,IAAhBjhM,EAAgB,uDAAT,KACzC,OAAQihM,GACN,IAAK,YACH,OAAOjhM,EAAOA,EAAKC,cAAc,CAAC1S,GAAI,eAAiB,aACzD,IAAK,WACH,OAAOyS,EACHA,EAAKC,cAAc,CAAC1S,GAAmD,mBAA/C,EAAKjB,MAAM4yN,oBAAoBn+M,KAAKlV,OAA8B,WAAa,aACxD,mBAA/C,EAAKS,MAAM4yN,oBAAoBn+M,KAAKlV,OAA8B,YAAc,WACtF,IAAK,eACL,IAAK,gBACL,IAAK,YACL,IAAK,YACH,OAAOmU,EAAOA,EAAKC,cAAc,CAAC1S,GAAI,UAAY,QACpD,IAAK,iBACH,OAAOyS,EAAOA,EAAKC,cAAc,CAAC1S,GAAI,YAAc,UACtD,QACE,OAAOyS,EAAOA,EAAKC,cAAc,CAAC1S,GAAI0zM,IAAeA,IAt4BxC,EA04BnBlI,sBAAwB,WACtB,EAAKl2B,SAAS,CACZy7C,qBAAqB,KA54BN,EAg5BnBrO,4BAA8B,SAACsO,GAC7B,EAAK17C,SAAS,CACZ07C,oCAl5Be,EAs5BnBigC,+BAAiC,SAAC9yO,GAAkB,IAE3CrU,EAAsB,EAAKw5F,MAA3Bx5F,mBAGP,GAFkBA,IAAuBA,EAAmBonP,iBAAoBpnP,EAAmBqnP,eAAiB//P,SAASC,SAAS2b,WAEvH,CACb,IAAMokP,EAAuBjzO,EAAcxiB,UAAUkS,eAC/CvP,EAAS,EAAKS,MAAM4yN,oBAAoBn+M,KAAKlV,OAC7CoyP,EAAmB,EAAKl9B,wBAAwBl1N,GAElDyiF,EAAe,EAAKhiF,MAAM2xP,GAAkB5wP,KAAI,SAAC4iB,GACnD,GAAe,mBAAXpkB,EAA6B,CAC/B,IAAMyP,EAAc,EAAKu1F,MAAMt1F,aAAalK,MAAK,SAAAiK,GAC/C,OAAOA,EAAYtf,OAASi0B,EAAYgxL,cAEtCj0H,EAAmB,GACvB,GAAI1xE,GAAeqjP,EAAqBrjP,EAAY/N,IAAK,CACvD,IAAMqxP,EAAwBD,EAAqBrjP,EAAY/N,IAAI,GACnEy/E,EAAmB1xE,GAAeA,EAAYI,OAAOrK,MAAK,SAAA27E,GACxD,OAAOA,EAAiBz/E,KAAOqxP,KAInC,GAA+B,aAA3B3uO,EAAYgxL,WAA2B,CACzC,IAAM49C,EAAkB,EAAKhuJ,MAAMt1F,aAAalK,MAAK,SAAAiK,GAAA,MAA2C,cAA5BA,EAAYtf,KAAK0mB,UACrF,GAAIm8O,EAAiB,CACnB,IAAMC,EAAuBH,EAAqBE,EAAgBtxP,IAC5DwxP,EAAuBF,EAAgBnjP,OAAOrK,MAAK,SAAAo0K,GACvD,OAAOq5E,GAAwBr5E,EAAUl4K,KAAOuxP,EAAqB,MAGvE7uO,EAAYmuO,OAASpxK,GAAoB+xK,IAAyB,EAAAt+N,6BAA6B/gC,SAASq/P,EAAqBtiQ,cAG5H,GAAe,yBAAXoP,EAAmC,CAC5C,IAAMmzP,EAAW/uO,EAAYgxL,WAAWp/M,cAClCo9P,EAAiB,EAAKpuJ,MAAMt1F,aAAalK,MAAK,SAAAiK,GAAA,MAA2C,aAA5BA,EAAYtf,KAAK0mB,UACpF,GAAIzoB,OAAOmc,KAAKuoP,GAAsB3kQ,QAAUilQ,GAAkBN,EAAqBM,EAAe1xP,IAAK,CACzG,IAAM2xP,EAAkBP,EAAqBM,EAAe1xP,IAAI,GAC1D4xP,EAAgBF,EAAevjP,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAO2xP,KAEnEjvO,EAAYmuO,OAAUe,IACK,aAAxBA,EAAc1iQ,OAAqC,kBAAbuiQ,GACX,aAAxBG,EAAc1iQ,OAAgD,SAAxB0iQ,EAAc1iQ,OAAiC,gBAAbuiQ,GAChD,YAAxBG,EAAc1iQ,OAAoC,mBAAbuiQ,GACb,YAAxBG,EAAc1iQ,OAAoC,iBAAbuiQ,GACb,SAAxBG,EAAc1iQ,OAAiC,cAAbuiQ,GACV,SAAxBG,EAAc1iQ,OAAiC,cAAbuiQ,IAI5C,OAAO/uO,KAGT,EAAK4yJ,UAAL,gBACGo7E,EAAmB3vK,MA78BP,EA4+BnB8wK,mBAAqB,SAAC5oL,EAAM2vB,GAC1B,IAAMg2J,EAAa3lL,EAAKz1D,KAAK9a,UAAYuwE,EAAKz1D,KAAK9a,YAAc,KAC3DgV,GAAkB,IAAAhB,oBAAmBu8D,EAAKz1D,MAChD,GAAIo7O,IAAe3lL,EAAKz1D,KAAKooE,2BAA6BluE,GACrD,EAAK41F,MAAMyxC,4BAA8B65G,EAAWkD,yBACpDlD,EAAWkD,wBAAwB7oL,EAAKz1D,OAASolF,EAAO,CAC3D,IAAMm5J,GAAgB,IAAAlgP,kBAAiB+mF,GAUvC,OATA,EAAK0K,MAAMyxC,2BAA2B,CACpCiqG,aAAa,EACbH,cAAe,CACb/0M,KAAMioN,EAAc3/O,EACpBlV,IAAK60P,EAAc1/O,GAErBqsO,aAAcz1K,EAAKz1D,KAAKlV,UAE1B,aAAEnO,QAAQ+pG,QAAQ,UAAYuzB,mBACvB,EAMT,OALW,EAAKnqB,MAAM0xC,sBAAwB,EAAK1xC,MAAM0xC,qBAAqBgqG,aAC5E,EAAK17I,MAAMyxC,2BAA2B,CACpCiqG,aAAa,KAGV,GAhgCP,EAAKjgP,MAAQ,CACXwwN,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYC,KACzBo5K,qBAAsB,KACtB4B,oBAAqB,KACrB11I,WAAY,GACZqU,sBAAuB,GACvB2/H,iBAAiB,EACjBtL,aAAc,GACduO,SAAU,EACV8+B,oBAAqB,CACnB90P,IAAK,EACL4sC,KAAM,GAERmoN,qBAAqB,EACrBpkN,QAAS,GACTijL,oBAAqB,KACrBW,oBAAoB,EACpBs/B,mBAAoB,EAAA/9N,oBAAoBlzB,KAAI,SAAC4zM,GAC3C,MAAO,CACLA,aACA6O,gBAAiB,KACjBquC,kBAAmB,GACnBC,OAAuB,aAAfn9C,MAGZs9C,uBAAwB,EAAA/9N,oBAAoBnzB,KAAI,SAAC4zM,GAE/C,MAAO,CACLA,aACA6O,gBAAiB,KACjBquC,kBAAmB,GACnBC,OALoB,CAAC,YAAa,YAAa,cAAe,iBAAkB,gBAK1D1+P,SAASuhN,OAGnCsd,gCAAgC,EAChCvO,mBAAmB,EACnBkR,gBAAiB,EACjBw8B,0BAA0B,EAC1Bp/B,qBAAqB,GAGvB,EAAKo+B,oBAAqB,EAC1B,EAAKz+B,qBAAsB,EAC3B,EAAK48B,0BAA4B,KA9ChB,E,qFAkDjB,IAAMp6O,GAAS,IAAAC,oBACfnb,KAAKs9K,SAAS,CACZhlF,sBAAuBp9E,EAAOo9E,0BAEhCt4F,KAAKmiO,qBACL/oO,SAAS02F,eAAe9vF,KAAKsrG,MAAM1b,UAAU/oC,iBAAiB,QAAS7mD,KAAKk6P,kBAC5E,aAAE9gQ,UAAUupG,GAAG,UAAY+yB,kBAAmB11H,KAAKo1P,iBAC/Cj9P,OAAOwqD,WAAa,OAQtB,aAAE,eAAe6S,OACjBk5B,YAAW,YACT,aAAE,eAAelhE,SAChB,M,6CAMLp0B,SAAS02F,eAAe9vF,KAAKsrG,MAAM1b,UAAUsT,oBAAoB,QAASljG,KAAKk6P,kBAC/E,aAAE9gQ,UAAU6/N,IAAI,UAAYvjG,kBAAmB11H,KAAKo1P,kBACpD,aAAEh8P,UAAU6/N,IAAI,QAASj5N,KAAK89K,oBAC9B,aAAE1kL,UAAU6/N,IAAI,UAAYnjG,yBAC5B,aAAE18H,UAAU6/N,IAAI,UAAYljG,iCACxB,UAAOj1H,0BACT3I,OAAO+qG,oBAAoB,UAAWljG,KAAKu1P,kBAEzCv1P,KAAKsrG,MAAMgvC,yBACbt6I,KAAKsrG,MAAMgvC,yBAAwB,GAEjCt6I,KAAKsrG,MAAMovC,0BACb16I,KAAKsrG,MAAMovC,yBAAyB,GAAI,M,iDAIjBkkC,GAAW,WACK,IAArCA,EAAUhuB,wBAAuE,IAAtC5wJ,KAAKsrG,MAAMslD,wBACrD5wJ,KAAKsrG,MAAMqlD,2BACX3wJ,KAAKsrG,MAAMmlD,wBACdzwJ,KAAK44N,gBAAe,WAClB,IAAMuhC,GAAc,aAAE,gBACtB,IAAKA,IAAgBA,EAAYruP,KAAK,aAAequP,EAAYruP,KAAK,WAAW8oE,SAC/E,OAAO,EAETulL,EAAY3sK,QAAQ,CAACC,WAAY0sK,EAAYruP,KAAK,WAAW8oE,SAAS9iC,MAAO,KAAK,WAEhF48C,YAAW,WACTA,YAAW,WACT,EAAK+pI,kBACL,EAAKntH,MAAMqlD,0BAA0B,GACrC,EAAKrlD,MAAMmlD,wBAAuB,KACjC,OACF,WAIT,IAAMv1I,GAAS,IAAAC,oBACXnb,KAAK+G,MAAMuxF,uBAA0Bt4F,KAAK+G,MAAMuxF,sBAAsB7jG,QACxEuL,KAAKs9K,SAAS,CAAChlF,sBAAuBp9E,EAAOo9E,4B,uCAuOhCviD,GAAS,WACxB/1C,KAAKsrG,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTt4B,OAAO,EACP89C,UACA+D,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,MACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAQ,W,8DAmnBVspM,EAA2Br+E,GAC7Dx7I,KAAKsrG,MAAMiwC,4BAA8BC,IACT,iBAA9Bq+E,GAC+B,uBAA9BA,GACA75N,KAAKsrG,MAAMkwC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,UACtEh8F,KAAKsrG,MAAMiwC,0BAA0B,EAAAr/C,0BAA0B,GAAGF,UAClEh8F,KAAKsrG,MAAMmwC,mCAAmC,IACP,eAA9Bo+E,GACwB,6BAA9BA,IAED75N,KAAKsrG,MAAMkwC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,UAChEh8F,KAAKsrG,MAAMkwC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,UACnEh8F,KAAKsrG,MAAMkwC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,WAExEh8F,KAAKsrG,MAAMiwC,0BAA0B,EAAAr/C,0BAA0B,GAAGF,UAClEh8F,KAAKsrG,MAAMmwC,mCAAmC,IACP,eAA9Bo+E,GACJ75N,KAAKsrG,MAAMkwC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,WACxEh8F,KAAKsrG,MAAMiwC,0BAA0B,EAAAr/C,0BAA0B,GAAGF,UAClEh8F,KAAKsrG,MAAMmwC,mCAAmC,S,wBAz+BjC05G,G,iJCvCrB,SACA,QACA,S,IACA,O,IAEA,S,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,SACA,Q,uDAEqBvQ,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAphP,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKnY,cAAL,2BACA,EAAKgY,YAAc,gCAGnB,EAAK07B,KAAO,KACZ,EAAKqxE,OAAS,KACd,EAAKt3E,WAAa,KAClB,EAAK27G,YAAc,KACnB,EAAK7H,kBAAoB,CAAC,SAAU,OAAQ,aAAc,eAAgB,UAAW,UAbzE,E,qEAgBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpB8/E,GAA8B,EAC9B7/E,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,OACL,IAAK,gBACH,GAAI00I,GAAevhJ,EAAUmP,UAAYnP,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,QAC9H,MAEFw0H,GAA8B,EAC9B9/E,EAAkB,OAClBC,YACA,MACF,IAAK,SACH,GAAIgV,GAAevhJ,EAAUmP,UAAYnP,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,QAC9H,MAEFw0H,GAA8B,EAC9B9/E,EAAkB,SAClBC,YACA,MACF,IAAK,aACHD,EAAkB,aAClBC,YACA,MACF,IAAK,eACL,IAAK,OACH6/E,GAA8B,EAC9B9/E,EAAkB,cAClBC,YACA,MACF,IAAK,UACL,IAAK,UACHD,EAAkB,UAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YAGJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,EAAa6qE,K,2CAIlF,OAAO,I,+EAOgD,WAAhDx9C,IAAgD,yDAA7BC,EAA6B,wDACvD,OAAOxyK,KAAKwwI,kBACTxpI,QAAO,SAAAiqE,GACN,QAAIuhG,GAAwC,YAAhBvhG,EAAK3qE,QAAwC,WAAhB2qE,EAAK3qE,SAGvD,EAAKmsK,kBAAkBxhG,EAAMshG,MAErCzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,yCAI7ClP,KAAK8sJ,aACP9sJ,KAAK8sJ,YAAYy5F,6B,aAnFdv+O,GAAK,a,aADO48O,G,wXCbrB,UACA,UACA,UACA,UACA,S,mDAEO,IAAMwV,EAAcA,EAAdA,YAAc,cACdC,EAAqBA,EAArBA,mBAAqB,qBACrBC,EAAiBA,EAAjBA,eAAiB,iBACjBC,EAAiCA,EAAjCA,+BAAiC,iCACjCC,EAAgBA,EAAhBA,cAAgB,gBAmBhBC,GAlB8BC,EAA9BA,4BAA8B,8BACjBC,EAAbA,WAAa,SAAC9mD,GAAD,IAAY+mD,EAAZ,8DAAwC,CAChExvP,KAAMgvP,EACNv5O,QAAS,CAACgzL,YAAW+mD,oBAESC,EAAnBA,iBAAmB,eAACC,EAAD,8DAAiC,CAC/D1vP,KAAMivP,EACNx5O,QAAS,CAACi6O,wBAE2BC,EAA1BA,wBAA0B,eAACC,EAAD,uDAAwB,GAAxB,MAAgC,CACrE5vP,KAAMivP,EACNx5O,QAAS,CAACm6O,0BAEgBnd,EAAfA,aAAe,SAACod,GAAD,MAAgB,CAC1C7vP,KAAMkvP,EACNz5O,QAASo6O,IAGgBR,EAAdA,YAAc,SAACS,GAAD,MAAc,CACvC9vP,KAAMovP,EACN35O,QAASq6O,KAOLC,GAJsCC,EAA/BA,6BAA+B,iBAAO,CACjDhwP,KAAMmvP,IAGwB,SAACx5P,EAAUs6P,GACzC,OAAO3mQ,OAAOmc,KAAKwqP,GAAgBp7P,MAAK,SAAAzI,GAAA,OAAO6jQ,EAAe7jQ,KAASuJ,EAASvJ,QAGrD8jQ,EAAhBA,cAAgB,WAA2B,IACtD,EAD4BC,EAA0B,wDACtD,uCAAO,WAAOt3O,EAAU9hB,GAAjB,8FACC7J,EAAQ6J,IACP68O,EAAmB1mP,EAAMymP,iBAAzBC,gBAFF,EAG8B1mP,EAAMwc,UAAlC/T,EAHF,EAGEA,SAAUs6P,EAHZ,EAGYA,eAEZt6P,EAASy6P,WALT,kCAOsB,IAAAC,cAAanjQ,GAPnC,OAOGojQ,EAPH,OAQH1jQ,QAAQ4B,IAAI,aAAc8hQ,GACtBA,GAAcA,EAAWznQ,MAC3BgwB,GAAS,IAAA03O,uBAAsBD,EAAWznQ,KAAKstC,MAAOm6N,EAAWznQ,KAAK2nQ,YAExE33O,GAAS,IAAAjjB,aAAY,cAAc,IAZhC,4BAaMm6P,EAAwBp6P,EAAUs6P,GAbxC,mCAe2B,IAAAQ,YAAWvjQ,GAftC,SAeGwjQ,EAfH,SAgBoBA,EAAgB7nQ,MAAQ6nQ,EAAgB7nQ,KAAKk3J,SAClElnI,GAAS,IAAA03O,uBAAsBrjQ,EAAMwc,UAAU/T,SAASwgC,MAAOu6N,EAAgB7nQ,KAAKi/L,QAjBnF,0BAuByB,IAAA6oE,cAAY,IAAAC,gBAAe75P,IAAYo5P,IAvBhE,YAuBC92B,EAvBD,SAyBoBA,EAAgBxwO,KAzBpC,wBA0BH+D,QAAQC,MAAM,mBAAoBwsO,GA1B/B,+BA+BDua,IAAmBva,EAAgBxwO,KAAKghB,MA/BvC,mCAgCG,IAAAgnP,0BAAwB,IAAAC,wBAAuB5jQ,EAAOmsO,EAAgBxwO,KAAKghB,QAhC9E,QAmCLgP,EAASw2O,EAAY,CAACxlP,MAAOwvN,EAAgBxwO,KAAKghB,SAnC7C,mDAAP,gD,uJC3CF,aAEuCknP,EAA1BA,wBAA0B,CACrClmP,MAAO,QACPjP,OAAQ,SACRi7G,OAAQ,SACRm6I,OAAQ,SACRC,QAAS,UACTC,YAAa,cACbh+N,OAAQ,SACR6sH,QAAS,WAUqBoxG,EAAnBA,iBAAmB,SAAC3rP,EAAkB0zH,EAAaxzH,GAC9D,IAAM2Z,GAAc,IAAAg6G,oBAAmB7zH,EAAkB0zH,EAAaxzH,GAElE0rP,EAAgB,GA0BpB,OAzBA/xO,EAAYrsB,SAAQ,SAAAmkH,GAClB,GAAIA,EAAKp3F,WAAW12B,QAAU8tH,EAAKp3F,WAAW,GAAGsxO,SAAU,CACzD,IAAIC,EAAyBF,EAAc1wP,MAAK,SAAA6wP,GAC9C,OAAOA,EAAeC,eAAiBr6I,EAAKp3F,WAAW,GAAGsxO,YAEvDC,IACHA,EAAyB,CACvBE,aAAcr6I,EAAKp3F,WAAW,GAAGsxO,SACjCI,YAAat6I,EAAKp3F,WAAW,GAAG0xO,YAChCC,aAAc,IAEhBN,EAAcznQ,KAAK2nQ,IAErBA,EAAuBI,aAAa/nQ,KAAK,CACvCgc,UAAWwxG,EAAKxxG,UAChB2Z,YAAa63F,EAAKp3F,WAAW,SAU5BqxO,GAQyBO,EAArBA,mBAAqB,WAAuB,IAAtBH,EAAsB,uDAAP,GAChD,OAAKA,EAGEA,EAAatgQ,cAAcqC,QAAQ,KAAK,KAFtC,K,mJC3DX,M,IACA,Q,IACA,S,IACA,Q,IACA,O,IACA,M,IAEA,Q,IACA,OACA,QACA,UACA,Q,IACA,SACA,Q,IACA,QACA,Q,OACA,UACA,QACA,S,uDAKqBq+P,G,gBAiBnB,WAAY1xJ,IAAO,gGACXA,IADW,SA6FnB2xJ,gBAAkB,WAChB,EAAK3/E,SAAS,CACZr9D,OAAQ,EAAK3U,MAAM2U,SAErB,EAAKurI,uBAAwB,EAC7B,EAAKsB,KAAK,EAAKxhJ,MAAM2U,OAAQ,EAAK3U,MAAMk7H,iBAAmB,EAAK02B,sBAAwB,OAlGvE,EAqGnBC,gBAAkB,YACX,UAAK18P,aAAc,IAAAkuF,kBAAmB,UAAO7tF,0BAA7C,gBAAyF,EAAKwqG,MAAMm7H,eAAiB,EAAKhyH,YAC7H,EAAKA,UAAY,IAAI,EAAJ,QAAc,EAAK3vD,OAAQ,CAACs4M,aAAc,EAAK9xJ,MAAMm7H,gBACtE,aAAEtuO,QAAQwqG,GAAG,UAAY0yB,cAAc,WAErC,EAAK5gB,UAAU33E,YAEjB,aAAE3kC,QAAQwqG,GAAG,UAAY2yB,mBAAmB,WAC1C,EAAK7gB,UAAU/R,aAEjB,aAAEvqG,QAAQwqG,GAAG,UAAY4yB,oBAAoB,WAC3C,EAAK9gB,UAAU4oJ,aAEb,EAAK/xJ,MAAMgyJ,kBACb,EAAKhyJ,MAAMgyJ,qBAnHE,EA6JnBC,wBAA0B,WACxB,IAAMz4M,GAAS,aAAE,EAAKA,QAChBkF,EAAclF,EAAOnlD,QACrBsqD,EAAenF,EAAOjlD,SACtB29P,EAAsB,EAAKz2P,MAAMilF,WAAWrsF,MAAQ,EAAK89P,eAAiBzzM,EAAc,EAAKyzM,cAC7FC,EAAsB,EAAK32P,MAAMilF,WAAWrsF,MAAQ,EAAK89P,eAAiBzzM,EAAc,EAAKyzM,cACnG,EAAKngF,SAAS,CACZtxF,WAAY,CACVrsF,MAAOqqD,EACPnqD,OAAQoqD,EACRwhM,gBAAkB+R,GAAuBE,EAAuB,GAAK,EAAK32P,MAAM0kP,oBAvKnE,EA4KnBhoB,kBAAoB,SAACF,EAAaC,IAC3BrrO,OAAOsmO,kBAAoB,EAAKhqH,YACnC,EAAKA,UAAU33E,QAEf,EAAK23E,UAAUgvH,kBACbF,EAAYjnO,cAAcqC,QAAQ,IAAK,KACvC6kO,EACA,EAAKl4H,MAAMpsF,WACX,EAAKosF,MAAMqyJ,eApLE,EAyLnBjR,yBAA2B,SAAC7lK,GAAU,IAC7B3rE,EAAU,EAAKowF,MAAfpwF,OACP,SAAItT,MAAMC,QAAQqT,EAAO27F,4BAA6B37F,EAAO27F,yBAAyB18G,SAAS0sF,EAAMvgF,cAGjG,IAAAuzF,2BAA0BhT,EAAMvgF,OAAQ4U,EAAQ,EAAKowF,MAAMnzF,kBAGxD+C,EAAO0iP,yBACV/2K,EAAMvgF,QAAU4U,EAAO0iP,yBAAyB39P,MAAK,SAAAqG,GAAA,OAAUA,IAAWugF,EAAMvgF,QAAUugF,EAAMvgF,OAAOtM,QAAQsM,IAAW,OAC1H4U,EAAO2iP,0BACL3iP,EAAO2iP,yBAAyB,EAAKvyJ,MAAMpsF,YAAY/kB,SAAS0sF,EAAMO,WApM3D,EAwMnB2kK,mBAAqB,SAAC9rI,EAAQyY,EAAQo/E,GAEpC,IAAI2zC,EAAkB,EAAK1kP,MAAM0kP,gBAAiBl3P,SAI3C2mB,EAAU,EAAKowF,MAAfpwF,OA2CP,IAzCA+kG,EAAO7hH,SAAQ,SAACyoF,EAAOj5E,GAIrB,IAAMkwP,EAAgB,EAAKpR,yBAAyB7lK,EAAO3rE,GAE3D,IAAK2rE,EAAMqmK,kBAAoB4Q,EAAe,CAE5C,IAAMC,EAAkCtS,EAAgB9uO,WAAU,SAAC2vO,GACjE,OAAOA,EAAgBA,EAAczlK,MAAMO,SAAWP,EAAMO,OAAS,KAGjE42K,EAAmB,WACvB,OAAO,IAAAC,mBAAkBp3K,EAAO6xC,EAAO9qH,GAAQ,EAAK09F,MAAMpsF,WAAY,CACpEvf,MAAO,EAAK2rG,MAAM3rG,MAClBE,OAAQ,EAAKyrG,MAAMzrG,QAClB,EAAKyrG,MAAMnzF,iBAIhB,GAAI4lP,GAAmC,GACrC,GAAIl3K,EAAMn4B,QAAU,EAAK3nD,MAAM0kP,gBAAgBsS,GAAiCl3K,MAAMn4B,OACjFgqE,EAAO9qH,KAAWkqM,EAAY39M,SAASu+H,EAAO9qH,GAAO7O,KAAM,CAC9D,IAAMm/P,EAAgBF,IAClBE,GACFzS,EAAgB91P,OAAOooQ,EAAiC,EAAGG,SAI/D,GAAIxlI,EAAO9qH,KAAWkqM,EAAY39M,SAASu+H,EAAO9qH,GAAO7O,KAAM,CAC7D,IAAMm/P,EAAgBF,IAClBE,GACFzS,EAAgB12P,KAAKmpQ,QAGvBlmQ,QAAQskC,KAAK,+CAAgD1uB,OAMhErZ,EAAI,EAAGA,EAAIk3P,EAAgBh3P,SAAUF,EAAG,EAIV,IAHD0rH,EAAOtjG,WAAU,SAACkqE,GAChD,OAAOA,EAAMO,SAAWqkK,EAAgBl3P,GAAGsyF,MAAMO,YAGjDqkK,EAAgB91P,OAAOpB,EAAG,KACxBA,GAIN,EAAK+oL,SAAS,CACZmuE,iBAAiB,aAAQA,EAAiB,eAAgBvwO,EAAO4Z,YAAc,MAAQ,UAEtF,WACD,EAAK02N,uBAAwB,MAvQd,EA2QnBsB,KAAO,SAAC7sI,EAAQlvF,GAEd,IAAI0oL,EAAM,EACJ/gF,EAAS,GAQf,EAAK1wH,GAAK0mF,YAAW,WACd,EAAK1mF,KAGV25I,aAAa,EAAK35I,IACd,EAAKsjG,MAAM0gJ,oBACR7zP,OAAOs0I,kBACV,EAAKnhC,MAAM0gJ,qBAAoB,GAExB/rI,EAAOxrH,SAChB,EAAK62G,MAAM6yJ,aACP,EAAK7yJ,MAAM6yJ,gBACX,IAAAv3O,cAAa,gCAElB,KAEH,EAAKgxL,QAAQzlD,UAAY,QACzB,EAAKylD,QAAQnlD,SAAS,EAAG,EAAG,EAAKnnD,MAAM3rG,MAAO,EAAK2rG,MAAMzrG,QAKzD,IAAMyrP,EAAwB,EAAKvkP,MAAMq3P,eACnCtmD,EAAc,GAMpB73F,EAAO7hH,SAAQ,SAACyoF,GACd,IAAMw3K,EAAuB/S,EAAsBx/O,MAAK,SAACwyP,GACvD,OAAOz3K,EAAMn4B,QAAU4vM,EAAcv/P,OAEnC2vD,SACAm4B,EAAMqmK,gBACRx+L,EAAQm4B,EAAM03K,cACLF,GAAwB,EAAKt3P,MAAMy3P,kBAC5C9vM,EAAQ2vM,EAAqB3vM,OACxB,IAAAtpD,UACHspD,EAAM3vD,IAAM,OAGd2vD,EAAQ,IAAI8B,OACNohC,YAAc,YACpB05J,EAAsBv2P,KAAK,CACzB25D,QACA3vD,IAAK8nF,EAAMn4B,SAGfA,EAAMiqJ,gBAAkB9xH,EAAM8xH,iBAAmB,KACjDjqJ,EAAMijD,OAAS9qB,EAAM8qB,QAAU,KAC/B+mB,EAAO3jI,KAAK25D,GACZA,EAAMojC,OAAS,aACb2nH,IACYx5F,EAAOxrH,QACjB,EAAKojN,WAAWn/E,EAAQzY,EAAQqrI,EAAuBxzC,EAAa/mL,IAGxE29B,EAAMmjC,QAAU,WAEd75F,QAAQskC,KAAK,sBAAwBoyB,EAAM3vD,KAC3C06M,IACA3B,EAAY/iN,KAAK25D,EAAM3vD,KACnB06M,IAAQx5F,EAAOxrH,QACjB,EAAKojN,WAAWn/E,EAAQzY,EAAQqrI,EAAuBxzC,EAAa/mL,IAGxE,IACE29B,EAAM3vD,IAAM8nF,EAAMn4B,MAClB,MAAOv4D,GACP6B,QAAQ4B,IAAIzD,EAAG,wBAA0B0wF,EAAMn4B,YA5VlC,EAkWnBwqJ,oBAAsB,WAAgC,IAA/Bj5F,EAA+B,uDAAtB,EAAKl5G,MAAMk5G,OAAW,EACvB,EAAK3U,MAA3BpsF,EAD6C,EAC7CA,WAAYhE,EADiC,EACjCA,OACnB,OAAO+kG,EAAOj5G,QAAO,SAAC6/E,GACpB,OAAO3rE,EAAO+rE,SAAS/nE,IAAehE,EAAO+rE,SAAS/nE,GAAYy6L,YAChEjlN,OAAOyhB,OAAO+E,EAAO+rE,SAAS/nE,GAAYy6L,YAAY15M,MAAK,SAAAmnF,GAAA,OAAUA,IAAWP,EAAMO,cAtWzE,EA0WnBywH,WAAa,SAACn/E,EAAQzY,EAAQqrI,EAAuBxzC,EAAa/mL,GAChE4wH,aAAa,EAAK35I,IAClB,EAAKA,GAAK,EAFmE,MAIrD,EAAKsjG,MAAtB3rG,EAJsE,EAItEA,MAAOE,EAJ+D,EAI/DA,OAIRk4M,EAAmB,EAAKmB,oBAAoBj5F,GAElD,GAAI83F,EAAiBtjN,OAAQ,CAC3B,EAAKi3P,UAAUjxL,UAAU,EAAG,EAAG96D,EAAOE,GAEtC,IAAM+rP,EAAalzH,EAAO5sH,MAAK,SAACysM,GAAD,OAAiBA,EAAYx5M,IAAI5E,SAAS,iBACzE,GAAIyxP,EAAY,CACd,IAAM/kK,EAAQkxH,EAAiBjsM,MAAK,SAAA+6E,GAAA,OAASA,EAAMn4B,QAAUk9L,EAAW7sP,OACxE,GAAI8nF,GAA0B,MAAjBA,EAAMO,OAAgB,CACjC,IAAMq3K,EAAkB/lI,EAAO/7G,WAAU,SAAC47L,GAAD,OAAiBA,EAAYx5M,IAAI5E,SAAS,iBACnFu+H,EAAO/iI,OAAO8oQ,EAAkB,EAAG,IAIvC/lI,EAAOt6H,SAAQ,SAACm6M,GACd,IAAIT,EAAY39M,SAASo+M,EAAYx5M,KAArC,CAGA,IAAM8nF,EAAQkxH,EAAiBjsM,MAAK,SAAA+6E,GAAA,OAASA,EAAMn4B,QAAU6pJ,EAAYx5M,OACzE,GAAI8nF,EACF,GAAIA,EAAM8xH,gBAAiB,CACzB,IAAMC,EAAM/xH,EAAM8xH,gBAElB,EAAK+yC,UAAUp8J,UAAUipH,EAAa,EAAG,EAAGK,EAAIj5M,MAAOi5M,EAAI/4M,OAAQ+4M,EAAIC,aAAa,GAAG,GAAID,EAAIC,aAAa,GAAG,GAAID,EAAIj5M,MAAOi5M,EAAI/4M,aAIlI,EAAK6rP,UAAUp8J,UAAUipH,EAAa,EAAG,EAAG54M,EAAOE,GAGvD04M,EAAc,UAEhB,aAAc,EAAKozC,UACnB,EAAK/zC,QAAQtoH,UAAU,EAAKq8J,SAAU,EAAG,EAAGhsP,EAAOE,EAAQ,EAAG,EAAGF,EAAOE,IAG1E64H,EAAOt6H,SAAQ,SAAC06M,GACd,IAAIhB,EAAY39M,SAAS2+M,EAAY/5M,KAArC,CAGA,IAAM8nF,EAAQo5B,EAAOn0G,MAAK,SAAAm0G,GAAA,OAAUA,EAAOvxD,QAAUoqJ,EAAY/5M,OACjE,GAAI8nF,KAAWkxH,EAAiBtjN,QAAWoyF,EAAMO,OAAS2wH,EAAiBA,EAAiBtjN,OAAS,GAAG2yF,QACtG,GAAI0xH,EAAYH,gBAAiB,CAC/B,IAAMC,EAAME,EAAYH,gBAExB,EAAKf,QAAQtoH,UAAUwpH,EAAa,EAAG,EAAGF,EAAIj5M,MAAOi5M,EAAI/4M,OAAQ+4M,EAAIC,aAAa,GAAG,GAAID,EAAIC,aAAa,GAAG,GAAID,EAAIj5M,MAAOi5M,EAAI/4M,aAC3H,GAAIi5M,EAAYnnG,OAAQ,CAI7B,IAAMM,EAAQ,EAAK3G,MAAM3rG,MAAMm5M,EAAYnnG,OAAOM,MAC5CG,EAAQ,EAAK9G,MAAMzrG,OAAOi5M,EAAYnnG,OAAOS,MAUnD,IACE,EAAKwlG,QAAQtoH,UAAUwpH,EAAa,EAAG,EAAGA,EAAYn5M,MAAOm5M,EAAYj5M,OAAQoyG,EAAOG,EAAO0mG,EAAYn5M,MAAOm5M,EAAYj5M,QAC9H,MAAO1J,GACP6B,QAAQ4B,IAAIzD,EAAG,6CAA+C2iN,EAAY/5M,WAG5E,IACE,EAAK64M,QAAQtoH,UAAUwpH,EAAa,EAAG,EAAGn5M,EAAOE,EAAQ,EAAG,EAAGF,EAAOE,GACtE,MAAO1J,GACP6B,QAAQ4B,IAAIzD,EAAG,iCAAmC2iN,EAAY/5M,KAIpE+5M,EAAc,UAIhB,IAAA1qH,kBAAiB,EAAKzqC,IAAI2rC,UAAU,EAAKsoH,QAAQ9yJ,OAAQ,EAAG,IAExD,EAAKwmD,MAAMk7H,oBACI,UAAK/lO,aAAc,IAAAkuF,mBAClB,IAAAvpF,SAAW,EAAK2B,MAAM8kP,eAAgB,EAAK/mM,QAC3D,EAAKgnM,iBAEP,EAAKxuE,SAAS,CACZguE,2BAEE,EAAKE,uBAA0B,EAAKzkP,MAAM0kP,gBAAgBh3P,QAC5D,EAAKs3P,mBAAmB9rI,EAAQyY,EAAQo/E,IAIvC3/M,OAAOs0I,mBACV,EAAKnhC,MAAM47G,cAAgB,EAAK57G,MAAM47G,iBAAkB,IAAA50H,kBAMtDvhE,GACFA,KAvde,EA2dnBk7N,aAAe,WACb,OAAO,+BAAKjsG,IAAK,SAACksG,GAAD,OAAQ,EAAKC,UAAYD,GAAIh4C,IAAI,GAAGlsM,GAAI,EAAKsjG,MAAM1b,SAAW,MACnEhF,UAAU,qBA7dL,EAgenBsyK,sBAAwB,WAItB,GAAI,EAAKwB,gBAAkB,EAAK55M,OAAQ,CACtC,EAAK65M,cAAc9+P,OAAS,EAAKilD,OAAOjlD,OAAS,EACjD,EAAK8+P,cAAch/P,MAAQ,EAAKmlD,OAAOnlD,MAAQ,EAC/C,IAAMi/P,EAAmBxlQ,SAAS02F,eAAe,qBAC7C8uK,GACF,EAAKF,eAAepvK,UAAUsvK,EAAkB,EAAG,EAAG,EAAKD,cAAch/P,MAAO,EAAKg/P,cAAc9+P,QAErG,EAAK6+P,eAAepvK,UAAU,EAAKxqC,OAAQ,EAAG,EAAG,EAAK65M,cAAch/P,MAAO,EAAKg/P,cAAc9+P,QAC9F,EAAKssP,UAAUptP,IAAM,EAAK4/P,cAAc5uK,UAAU,aAAc,MA5ejD,EAgfnB+7J,eAAiB,WACf,EAAKxuE,SAAS,CACZuuE,cAAc,IAGhB,EAAK/mM,OAAO+B,iBAAiB,aAAa,aAAS,EAAK81K,gBAD5B,KACmE,IArf9E,EAwfnBA,gBAAkB,SAACvwI,GAAQ,MAEI,EAAKkf,MAA3BpsF,EAFkB,EAElBA,WAAYhE,EAFM,EAENA,OACb4pC,EAAS,EAAKA,OAChBsD,GAAW,IAAA+jC,aAAYC,EAAKtnC,GAC5B2nM,GAAU,EAUd,IANI,UAAKhsP,aAAc,IAAAkuF,mBAAmB,IAAAvpF,UACpC,EAAKkmG,MAAMm7H,eACb,aAAEtuO,QAAQ+pG,QAAQ,UAAYizB,kBAI9B/sE,GAAajwD,OAAOwqD,WAAa,IAAM,CACzC,IAAI25I,EAAOl0I,EAAShuC,EAEpBguC,EAAShuC,EAAIguC,EAAS/tC,EACtB+tC,EAAS/tC,EAAI,EAAKyqC,OAAOzC,aAAei6I,EAI1C,GAAI,EAAKv1L,MAAM0kP,gBAAgBh3P,OAE7B,IADA,IAAIF,EAAI,EACAA,EAAI,EAAKwS,MAAM0kP,gBAAgBh3P,OAAQF,IAAK,CAClD,IAAM+3P,EAAgB,EAAKvlP,MAAM0kP,gBAAgBl3P,GACjD,GAAK6zD,GACAkkM,GACAA,EAAc3zC,kBACb,EAAK+zC,yBAAyBJ,EAAczlK,MAAO3rE,IAEpDoxO,EAAcn9J,UAAUK,aACtBpnC,EAAShuC,EAAI,EAAKqoN,aAAgB,EAAK17N,MAAMilF,WAAWrsF,MAAQ,EAAK2rG,MAAM3rG,MAAU2sP,EAAc3zC,gBAAgBE,aAAa,GAAG,GACnIzwJ,EAAS/tC,EAAI,EAAKooN,aAAgB,EAAK17N,MAAMilF,WAAWnsF,OAAS,EAAKyrG,MAAMzrG,OAAWysP,EAAc3zC,gBAAgBE,aAAa,GAAG,GACxI,EACA,EACA,CAAC2zC,oBAAoB,IAAOv4P,KAAK,GAAK,IAAK,CAI7C,GAHAw4P,GAAU,EACVrzP,SAASuzN,aAAe2/B,EAAczlK,MACtCztF,SAAS4sP,gBAAkB59L,IACtB,IAAAhjD,SAAW,EAAKwnP,uBAAyBN,EAAczlK,MAAMO,OAAS,CAEzE,IAAMy3K,EAAcvS,EAAczlK,MAAMO,SAAWlsE,EAAO+rE,SAAS/nE,GAAY4/O,eAC3EC,EAAsB,GACtBF,IACFE,EAAsB,EAAKh4P,MAAM0kP,gBAAgB3/O,MAAK,SAAAkzP,GACpD,OAAOA,EAAen4K,MAAMO,SAAWlsE,EAAO+rE,SAAS/nE,GAAY+/O,oBAGvE,EAAKrS,qBAAuBN,EAAczlK,MAAMO,OAChD,EAAKylK,iBAAiBgS,GAAeE,EAAsBA,EAAsBzS,GAGnF,OAKDG,IACHrzP,SAASuzN,aAAe,KACxB,EAAKmgC,KAAK,EAAK/lP,MAAMk5G,UArjBN,EA0jBnBq6G,yBAA2B,SAAClzI,GAC1B,KAAK,IAAAhiF,QAAQ,CACX,IAAM2nP,EAAsB,EAAKhmP,MAAM0kP,gBAAgB3/O,MAAK,SAACwgP,GAC3D,OAAOA,EAAczlK,MAAMO,SAAWA,KAExC2lK,EAAsB,EAAKF,iBAAiBE,GAAuB,EAAKD,KAAK,EAAK/lP,MAAMk5G,UA/jBzE,EAmkBnB4sI,iBAAmB,SAACP,GAAqC,IAAtB4S,EAAsB,wDACnDj/I,GAAS,aAAM,EAAKl5G,MAAMk5G,QAE9B0hC,aAAa,EAAKw9G,SAElB,IAAMC,EAAoBn/I,EAAOtjG,WAAU,SAACkqE,GAC1C,OAAI,EAAKykB,MAAMpwF,QAAU,EAAKowF,MAAMpwF,OAAO4Z,aAAew3N,EAChDzlK,EAAMO,SAAWklK,EAAczlK,MAAMO,QAAYklK,EAAczlK,MAAMvgF,SAAWugF,EAAMvgF,OAEzFugF,EAAMO,SAAWklK,EAAczlK,MAAMO,UAG9C,GAAIg4K,GAAqB,EAAG,CAC1B,IAAMC,GAAiB,IAAAC,oBAAA,EAAyBr/I,EAAQm/I,EAAmB9S,EAAe4S,GAE1F,EAAKpS,KAAKuS,GACV,EAAKF,QAAUzwK,YAAW,WACxB,EAAKk+J,qBAAuB,KACxB,EAAK9nM,QACP,EAAKgoM,KAAK,EAAK/lP,MAAMk5G,UAEtB,OAxlBY,EA4lBnBs/I,UAAY,SAAC3+J,GACX,IAAMm5J,GAAgB,IAAAlgP,kBAAiB+mF,GACjC4+J,EAAQx2P,WAAW+wP,EAAc3/O,GAAGtV,QAAQ,GAC5C26P,EAAQz2P,WAAW+wP,EAAc1/O,GAAGvV,QAAQ,GAClD4pF,YAAW,YACLv2F,OAAO2lO,kBAAqB3lO,OAAOsrO,mBAAsBtrO,OAAOunQ,qBAClE,EAAKtlP,EAAIolP,EACT,EAAKnlP,EAAIolP,EACT,EAAKE,aAAc,EACnB,EAAKC,mBAAoB,EACzB,EAAKC,oBAAqB,EAC1B,EAAKC,kBAAmB,IAAApyK,eAAc,EAAK5oC,SAC3C,aAAE,gBAAgBi7M,KAAK,EAAKD,qBAE7B,MA1mBc,EA6mBnB5sN,KAAO,SAAC0tD,GAEN,GAAI,EAAK++J,aAAexnQ,OAAO2lO,iBAAkB,CAE/C3lO,OAAOsmO,kBAAmB,EAE1B,IAAMs7B,GAAgB,IAAAlgP,kBAAiB+mF,GAGrCxmF,EAAIpR,WAAW+wP,EAAc3/O,GAAGtV,QAAQ,GACxCuV,EAAIrR,WAAW+wP,EAAc1/O,GAAGvV,QAAQ,GACxCk7P,EAAKh3P,YAAYoR,EAAI,EAAKA,GAAGtV,QAAQ,IACrCm7P,EAAKj3P,YAAYqR,EAAI,EAAKA,GAAGvV,QAAQ,IAYvC,GAVK,EAAK+6P,oBAAuB,EAAKD,mBAChCx1P,KAAK4pE,IAAIhrE,WAAWg3P,KAAQ,EAAKE,QAC/Bl3P,WAAWg3P,GAAM,EAAKE,MACxB,EAAKL,oBAAqB,EACjB72P,WAAWg3P,IAAO,EAAKE,QAChC,EAAKN,mBAAoB,KAK1B,EAAKA,mBAAqB,EAAKC,qBAAuBz1P,KAAK4pE,IAAIgsL,GAAM51P,KAAK4pE,IAAIisL,GAAK,CAGtF,IAAME,EAAe/1P,KAAKC,MAAmC,KAA5B,EAAKy1P,iBAAmBE,IAAS,IAG5DI,GAFa,EAAKr5P,MAAMilF,WAAWrsF,MAAQ,IAAM,GAAK,IAEnB,IAAO,EAAKoH,MAAMilF,WAAWrsF,MAMtE,GAAIyK,KAAK4pE,IAAImsL,GAAgBC,GAAsBD,EAAe,EAAG,CACnE,IAAME,EAAc,cAAgBF,EAAe,MACnD,EAAKr7M,OAAOzwC,MAAMy5E,gBAAkBuyK,EACpC,EAAKv7M,OAAOzwC,MAAMisP,aAAeD,EACjC,EAAKv7M,OAAOzwC,MAAMksP,YAAcF,EAChC,EAAKv7M,OAAOzwC,MAAMmsP,WAAaH,EAC/B,EAAKv7M,OAAOzwC,MAAMssH,UAAY0/H,MAvpBnB,EA8pBnBI,QAAU,WAMR,EAAKrmP,EAAI,EACT,EAAKC,EAAI,EACT,EAAKslP,aAAc,EACf,EAAKlrJ,YACP,aAAEt8G,QAAQ+pG,QAAQ,UAAYkzB,qBAAsB,CAAC,EAAK3gB,UAAUxpD,cAGlE,EAAK20M,mBAAqB,EAAKC,sBACjC,EAAKC,kBAAmB,IAAApyK,eAAc,EAAK5oC,QAC3C,EAAK86M,mBAAoB,EACzB,EAAKC,oBAAqB,EAC1B1nQ,OAAOsmO,kBAAmB,EAC1B,EAAKhqH,UAAU/R,WA9qBjB,EAAK59C,OAAS,KACd,EAAK/9C,MAAQ,CACX8kP,cAAc,EACd7/J,WAAY,CACVrsF,MAAO2rG,EAAM3rG,MACbE,OAAQyrG,EAAMzrG,QAEhB6gQ,WAAY,GACZzgJ,OAAQ,GACRwrI,gBAAiB,GAEjB2S,eAAgB,GAChBrmD,iBAAkB,GAClB4oD,iBAAkB,GAClBnC,kBAAkB,GAEpB,EAAKx2P,GAAK,EACV,EAAK27C,IAAM,KACX,EAAKi0J,QAAU,KACf,EAAK+mD,cAAgB,KACrB,EAAKD,eAAiB,KACtB,EAAKS,QAAU,EACf,EAAK18B,aAAe,EACpB,EAAK+oB,uBAAwB,EAC7B,EAAK/2I,UAAY,KACjB,EAAKr6F,EAAI,EACT,EAAKC,EAAI,EACT,EAAK6lP,MAAQ,EACb,EAAKP,aAAc,EACnB,EAAKC,mBAAoB,EACzB,EAAKC,oBAAqB,EAC1B,EAAKC,iBAAmB,EACxB,EAAKrC,cAAgB,IACrB,EAAK7Q,qBAAuB,KAE5B,EAAKjB,SAAW,KAChB,EAAKD,UAAY,KAtCA,E,oFA0CC,aACM1rP,KAAKsrG,MAAtB3rG,EADW,EACXA,MAAOE,EADI,EACJA,OACdG,KAAK2jD,IAAM3jD,KAAK8kD,OAAOsqC,WAAW,MAClC,IAAM74F,EAAI6C,SAAS8oD,cAAc,UACjC3rD,EAAEoJ,MAAQA,EACVpJ,EAAEsJ,OAASA,EACXG,KAAK43M,QAAUrhN,EAAE64F,WAAW,MAC5BpvF,KAAK2+P,cAAgBvlQ,SAAS8oD,cAAc,UAC5CliD,KAAK0+P,eAAiB1+P,KAAK2+P,cAAcvvK,WAAW,MAGpDpvF,KAAK2rP,SAAWvyP,SAAS8oD,cAAc,UACvCliD,KAAK2rP,SAAShsP,MAAQA,EACtBK,KAAK2rP,SAAS9rP,OAASA,EACvBG,KAAK0rP,UAAY1rP,KAAK2rP,SAASv8J,WAAW,MAC1CpvF,KAAK0rP,UAAUpzC,yBAA2B,WAG1C,aAAEngN,QAAQwqG,GAAG,SAAU3iG,KAAKu9P,yBAC5Bv9P,KAAKu9P,2BACL,aAAEplQ,QAAQwqG,GAAG,eAAgB3iG,KAAKm9P,kBAC9BhlQ,OAAOyoQ,cAAP,gBACF5gQ,KAAKm9P,mBAEP,aAAEhlQ,QAAQwqG,GAAG,UAAYizB,6BAA6B,SAACh1B,EAAO7vE,GAC5D,EAAK+7N,KAAK,EAAK/lP,MAAMk5G,OAAQlvF,MAG3B,UAAOjwB,0BACT3I,OAAO0uD,iBAAiB,WAAW,SAAC+5C,IAC9BA,EAAM3sG,MAAS2sG,EAAM3sG,KAAKysC,SAAW,EAAA0hM,8BAA8BjgO,UAClEy+F,EAAM3sG,KAAKysC,SAAW,EAAA0hM,8BAA8BC,YACvD,EAAKyqB,KAAK,EAAK/lP,MAAMk5G,WAIvBjgH,KAAKsrG,MAAM2U,OAAOxrH,QAAUuL,KAAK+G,MAAMy3P,kBACzCx+P,KAAKi9P,oB,8CAKP,aAAE9kQ,QAAQ8gO,IAAI,SAAUj5N,KAAKu9P,0BAC7B,aAAEplQ,QAAQ8gO,IAAI,eAAgBj5N,KAAKm9P,kBACnC,aAAEhlQ,QAAQ8gO,IAAI,UAAY9jG,mBAC1B,aAAEh9H,QAAQ8gO,IAAI,UAAY5jG,eAC1B,aAAEl9H,QAAQ8gO,IAAI,UAAY3jG,oBAC1B,aAAEn9H,QAAQ8gO,IAAI,UAAY1jG,qBAC1B,aAAEp9H,QAAQ8gO,IAAI,UAAYrjG,+B,gDA+BFgpD,GACxB,IAAMiiF,EAAajiF,EAAU3+D,OAAOj5G,QAAO,SAAC6/E,GAC1C,OAAQA,EAAMn4B,MAAMv0D,SAAS,cAEzB2mQ,EAAkB9gQ,KAAK+G,MAAMk5G,OAAOj5G,QAAO,SAAC6/E,GAChD,OAAQA,EAAMn4B,MAAMv0D,SAAS,cAG3B4mQ,EAAqBF,EAAWpsQ,SAAWqsQ,EAAgBrsQ,OAC7DF,EAAI,EAEN,IAAKwsQ,GAAsBF,EAAWpsQ,QAAUqsQ,EAAgBrsQ,OAC9D,KAAQF,EAAIssQ,EAAWpsQ,OAAQF,IAC7B,GAAIssQ,EAAWtsQ,GAAG6yF,SAAW05K,EAAgBvsQ,GAAG6yF,QAAUy5K,EAAWtsQ,GAAGm6D,QAAUoyM,EAAgBvsQ,GAAGm6D,MAAO,CAC1GqyM,GAAqB,EAErB,MAKFniF,EAAU3+D,OAAOxrH,QAAUuL,KAAK+G,MAAMy3P,kBACxCx+P,KAAKs9K,SAAS,CACZr9D,OAAQ2+D,EAAU3+D,SAOlB8gJ,GAAsB/gQ,KAAK+G,MAAMy3P,mBACnCx+P,KAAKwrP,uBAAwB,EAC7BxrP,KAAK8sP,KAAKluE,EAAU3+D,OAAQjgH,KAAKsrG,MAAMk7H,iBAAmBxmO,KAAKk9P,sBAAwB,S,+BA8hBlF,WACP,OACE,+BAAKtyK,UAAU,SAASv2E,MAAO,CAACqnB,SAAU,WAEvC17B,KAAKisP,eACN,kCAAQjsG,IAAK,SAACksG,GAAD,OAAQ,EAAKpnM,OAASonM,GAC3BthK,UAAW,aAAe5qF,KAAKsrG,MAAMk7H,iBAAmB,sBAAwB,IAChFx+N,GAAIhI,KAAKsrG,MAAM1b,SACfjwF,MAAOK,KAAKsrG,MAAM3rG,MAClBE,OAAQG,KAAKsrG,MAAMzrG,OACnBmhQ,aAAchhQ,KAAKu/P,UACnB0B,YAAajhQ,KAAKkzC,KAClBguN,WAAYlhQ,KAAKygQ,QACjBpsP,MAAO,CAACqnB,SAAU,mB,GArtBa,UAAMmwE,W,EAC5Cq2C,UAAY,CACjBjiC,OAAQ,UAAU/G,QAAQ,UAAUvhH,QAAQshH,WAC5C/5F,WAAY,UAAUsjB,OAAOy2E,WAC7Bt5G,MAAO,UAAUi5G,OAAOK,WACxBp5G,OAAQ,UAAU+4G,OAAOK,WACzBrpB,SAAU,UAAUptD,OAAOy2E,WAC3ButH,iBAAkB,UAAUpkF,KAC5BqkF,aAAc,UAAUrkF,KACxB+7G,aAAc,UAAUp/E,KACxBmoC,cAAe,UAAUnoC,KACzBitE,oBAAqB,UAAUjtE,KAC/BquE,gBAAiB,UAAUruE,KAC3Bp+C,UAAW,UAAUn+F,OACrBrqB,eAAgB,UAAUxgB,Q,aAdTqlQ,G,8ECvBrB,IAAMx+N,EAAU,CACdwnE,MAAO,CACL2zG,WAAY,IACZ4oC,MAAO,IACPT,QAAS,IACTqf,OAAQ,IACRC,OAAQ,IACRC,OAAQ,IACRC,mBAAoB,IACpBC,sBAAuB,IACvBzC,eAAgB,IAChBG,gBAAiB,IACjBuC,eAAgB,KAChBC,YAAa,KACbC,WAAY,KACZ3nK,OAAQ,CACNzjE,WAAY,CACVqrO,KAAM,IACNpf,MAAO,KACPqf,YAAa,KACbC,YAAa,KACbC,mBAAoB,KACpBC,yBAA0B,KAC1BC,KAAM,KACNC,MAAO,KACPC,WAAY,KACZC,YAAa,KACbC,WAAY,KACZC,kBAAmB,KACnBC,QAAS,KACTC,WAAY,KACZC,eAAgB,KAChBC,gBAAiB,KACjBC,aAAc,KACdC,SAAU,KACVC,iBAAkB,KAClBC,QAAS,KACTC,0BAA2B,KAC3BC,gCAAiC,KACjCC,UAAW,KACXC,gBAAiB,KACjBC,WAAY,KACZC,iBAAkB,KAClBC,kBAAmB,KACnBC,wBAAyB,KACzBC,QAAS,KACTtpO,MAAO,KACPupO,SAAU,KACVC,eAAgB,KAChBC,YAAa,KACbC,kBAAmB,KACnBC,cAAe,MAEjBC,UAAW,CACTR,kBAAmB,KACnBzB,KAAM,CACJkC,EAAG,KACH9tQ,EAAG,KACHmpD,EAAG,MAELojN,QAAS,KACTgB,QAAS,MAEXQ,SAAU,CACRC,kBAAmB,KACnBC,MAAO,KACPC,eAAgB,KAChBC,UAAW,KACXC,UAAW,OAGfC,QAAS,CACP7tO,aAAc,CACZ8tO,kBAAmB,IACnBC,KAAM,KACNhC,QAAS,MAEXhsO,WAAY,CACV+tO,kBAAmB,KACnBC,KAAM,KACNC,IAAK,KACLC,IAAK,KACLlC,QAAS,OAGbmC,OAAQ,IACR55H,OAAQ,CACN/wG,OAAQ,CACNm4I,QAAS,IACTozE,OAAQ,KACRqf,iBAAkB,KAClBC,WAAY,KACZC,OAAQ,KACR7f,OAAQ,KACRD,KAAM,MAERjrN,SAAU,CACR6qO,iBAAkB,KAClB3f,OAAQ,KACR9yE,QAAS,KACT2yF,OAAQ,QAIdlqK,MAAO,CACLi/G,WAAY,IACZ4oC,MAAO,IACPT,QAAS,IACTqf,OAAQ,IACRC,OAAQ,IACRC,OAAQ,IACRC,mBAAoB,IACpBC,sBAAuB,IACvBzC,eAAgB,IAChBG,gBAAiB,IACjBuC,eAAgB,KAChBC,YAAa,KACbC,WAAY,KACZ3nK,OAAQ,CACNzjE,WAAY,CACVqrO,KAAM,IACNpf,MAAO,KACPqf,YAAa,KACbC,YAAa,KACbC,mBAAoB,KACpBC,yBAA0B,KAC1BC,KAAM,KACNC,MAAO,KACPC,WAAY,KACZC,YAAa,KACbC,WAAY,KACZC,kBAAmB,KACnBC,QAAS,KACTC,WAAY,KACZC,eAAgB,KAChBC,gBAAiB,KACjBC,aAAc,KACdC,SAAU,KACVC,iBAAkB,KAClBC,QAAS,KACTC,0BAA2B,KAC3BC,gCAAiC,KACjCC,UAAW,KACXC,gBAAiB,KACjBC,WAAY,KACZC,iBAAkB,KAClBC,kBAAmB,KACnBC,wBAAyB,KACzBC,QAAS,KACTtpO,MAAO,KACPupO,SAAU,KACVC,eAAgB,KAChBC,YAAa,KACbC,kBAAmB,KACnBC,cAAe,MAEjBC,UAAW,CACTR,kBAAmB,KACnBzB,KAAM,CACJkC,EAAG,KACH9tQ,EAAG,KACHmpD,EAAG,MAELojN,QAAS,KACTgB,QAAS,MAEXQ,SAAU,CACRC,kBAAmB,KACnBC,MAAO,KACPC,eAAgB,KAChBC,UAAW,KACXC,UAAW,OAGfC,QAAS,CACP7tO,aAAc,CACZ8tO,kBAAmB,IACnBC,KAAM,KACNhC,QAAS,MAEXhsO,WAAY,CACV+tO,kBAAmB,KACnBC,KAAM,KACNC,IAAK,KACLC,IAAK,KACLlC,QAAS,OAGbmC,OAAQ,IACR55H,OAAQ,CACN/wG,OAAQ,CACNm4I,QAAS,IACTozE,OAAQ,KACRqf,iBAAkB,KAClBC,WAAY,KACZC,OAAQ,KACR7f,OAAQ,KACRD,KAAM,MAERjrN,SAAU,CACR6qO,iBAAkB,KAClB3f,OAAQ,KACR9yE,QAAS,KACT2yF,OAAQ,S,UAMD,CACbpmO,UACAqnN,sBAAuB,SAACluE,EAAe9wF,GAKrC,OAAQA,EAAMO,QAGZ,KAAK5oD,EAAQm5I,GAAe4qE,MAC1B,MAAO,CACLhpP,OAAQ,QACR4gO,MAAO,SAEX,KAAK37L,EAAQm5I,GAAemqE,QAC1B,MAAO,UACT,KAAKtjN,EAAQm5I,GAAe8sF,OAC1B,MAAO,CACLlrQ,OAAQ,SACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAemnF,eAC1B,MAAO,SAUT,KAAKtgO,EAAQm5I,GAAewpF,OAC1B,MAAO,CACL5nQ,OAAQ,QACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAe0pF,OAC1B,MAAO,CACL9nQ,OAAQ,QACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAWwrO,mBAC5C,MAAO,CACLvoQ,OAAQ,QACR4gO,MAAO,qBAEX,KAAK37L,EAAQm5I,GAAe9sC,OAAO/wG,OAAO8qO,OACxC,MAAO,CACLrrQ,OAAQ,SACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAW8sO,kBAC9C,KAAK5kO,EAAQm5I,GAAe59E,OAAOzjE,WAAWwsO,0BAC9C,KAAKtkO,EAAQm5I,GAAe59E,OAAOzjE,WAAWitO,SAC5C,MAAO,mBACT,KAAK/kO,EAAQm5I,GAAe9sC,OAAO/wG,OAAO4qO,iBAC1C,KAAKlmO,EAAQm5I,GAAe2pF,mBAC5B,KAAK9iO,EAAQm5I,GAAeypF,OAC1B,MAAO,gBACT,KAAK5iO,EAAQm5I,GAAe9sC,OAAOhxG,SAASo4I,QAC5C,KAAKzzI,EAAQm5I,GAAe9sC,OAAO/wG,OAAOurN,OAC1C,KAAK7mN,EAAQm5I,GAAe9sC,OAAO/wG,OAAO6qO,WAC1C,KAAKnmO,EAAQm5I,GAAe9sC,OAAO/wG,OAAOirN,OAC1C,KAAKvmN,EAAQm5I,GAAe9sC,OAAO/wG,OAAOgrN,KAC1C,KAAKtmN,EAAQm5I,GAAe9sC,OAAO/wG,OAAOm4I,QACxC,MAAO,gBAET,KAAKzzI,EAAQm5I,GAAe59E,OAAOzjE,WAAW0sO,UAC5C,MAAO,CACLzpQ,OAAQ,SACR4gO,MAAO,aAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAW4rO,WAC9C,KAAK1jO,EAAQm5I,GAAe59E,OAAOzjE,WAAW6rO,YAC5C,MAAO,CACL5oQ,OAAQ,SACR4gO,MAAO,uBAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAWosO,aAC5C,MAAO,CACLnpQ,OAAQ,qBACR4gO,MAAO,iBAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAW+rO,kBAC5C,MAAO,CACL9oQ,OAAQ,qBACR4gO,MAAO,uBAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAWmsO,gBAC5C,MAAO,CACLlpQ,OAAQ,qBACR4gO,MAAO,qBAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAWqsO,SAC5C,MAAO,CACLppQ,OAAQ,qBACR4gO,MAAO,aAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAWssO,iBAC5C,MAAO,CACLrpQ,OAAQ,qBACR4gO,MAAO,sBAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAWusO,QAC5C,MAAO,CACLtpQ,OAAQ,qBACR4gO,MAAO,YAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOzjE,WAAW0D,MAC9C,KAAKwE,EAAQm5I,GAAe59E,OAAOzjE,WAAWisN,MAC9C,KAAK/jN,EAAQm5I,GAAe59E,OAAOzjE,WAAWksO,eAC9C,KAAKhkO,EAAQm5I,GAAe59E,OAAOzjE,WAAW0rO,KAC9C,KAAKxjO,EAAQm5I,GAAe59E,OAAOzjE,WAAW2rO,MAC9C,KAAKzjO,EAAQm5I,GAAe59E,OAAOzjE,WAAWgsO,QAC9C,KAAK9jO,EAAQm5I,GAAe59E,OAAOzjE,WAAWisO,WAC9C,KAAK/jO,EAAQm5I,GAAe59E,OAAOzjE,WAAWqrO,KAC9C,KAAKnjO,EAAQm5I,GAAe59E,OAAOzjE,WAAWgtO,QAC9C,KAAK9kO,EAAQm5I,GAAe59E,OAAOzjE,WAAW4sO,WAC9C,KAAK1kO,EAAQm5I,GAAe59E,OAAOzjE,WAAW6sO,iBAC9C,KAAK3kO,EAAQm5I,GAAe59E,OAAO6pK,UAAUR,kBAC7C,KAAK5kO,EAAQm5I,GAAe59E,OAAO6pK,UAAUjC,KAAK,GAClD,KAAKnjO,EAAQm5I,GAAe59E,OAAO6pK,UAAUjC,KAAK,GAClD,KAAKnjO,EAAQm5I,GAAe59E,OAAO6pK,UAAUtB,QAC3C,MAAO,gBAET,KAAK9jO,EAAQm5I,GAAeysF,QAAQ9tO,WAAWkuO,IAC/C,KAAKhmO,EAAQm5I,GAAeysF,QAAQ9tO,WAAWiuO,IAC/C,KAAK/lO,EAAQm5I,GAAeysF,QAAQ9tO,WAAWguO,KAC/C,KAAK9lO,EAAQm5I,GAAeysF,QAAQ7tO,aAAa+tO,KACjD,KAAK9lO,EAAQm5I,GAAeysF,QAAQ7tO,aAAa+rO,QACjD,KAAK9jO,EAAQm5I,GAAeysF,QAAQ7tO,aAAa8tO,kBACjD,KAAK7lO,EAAQm5I,GAAeysF,QAAQ9tO,WAAWgsO,QAC/C,KAAK9jO,EAAQm5I,GAAeysF,QAAQ9tO,WAAW+tO,kBAC7C,MAAO,iBAET,KAAK7lO,EAAQm5I,GAAe59E,OAAO+pK,SAASE,MAC5C,KAAKxlO,EAAQm5I,GAAe59E,OAAO+pK,SAASG,eAC5C,KAAKzlO,EAAQm5I,GAAe59E,OAAO+pK,SAASI,UAC5C,KAAK1lO,EAAQm5I,GAAe59E,OAAO+pK,SAASK,UAC5C,KAAK3lO,EAAQm5I,GAAe59E,OAAO+pK,SAASC,kBAC1C,MAAO,eAET,KAAKvlO,EAAQm5I,GAAe59E,OAAOzjE,WAAWmtO,YAC9C,KAAKjlO,EAAQm5I,GAAe59E,OAAOzjE,WAAWqtO,cAC5C,MAAO,mBACT,QACE,MAAO,KAGble,mBAAoB,SAACr+J,EAAQuwF,GAC3B,OAAQvwF,GAEN,KAAK5oD,EAAQm5I,GAAe4qE,MAC1B,MAAO,CACL1pC,aAAc,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,MAAM,CAAC,GAAG,OACnDl5M,MAAO,KACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAemqE,QAC1B,MAAO,CACLjpC,aAAc,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,MAC5Cl5M,MAAO,KACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAe8sF,OAC1B,MAAO,CACL5rD,aAAc,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,MAClDl5M,MAAO,IACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAemnF,eAC5B,KAAKtgO,EAAQm5I,GAAesnF,gBAC1B,MAAO,CACLpmD,aAAc,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,MACtDl5M,MAAO,IACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAe59E,OAAO6pK,UAAUR,kBAC7C,KAAK5kO,EAAQm5I,GAAe59E,OAAO6pK,UAAUjC,KAAK,GAClD,KAAKnjO,EAAQm5I,GAAe59E,OAAO6pK,UAAUjC,KAAK,GAClD,KAAKnjO,EAAQm5I,GAAe59E,OAAO6pK,UAAUtB,QAC7C,KAAK9jO,EAAQm5I,GAAe59E,OAAOzjE,WAAWwrO,mBAC9C,KAAKtjO,EAAQm5I,GAAe59E,OAAOzjE,WAAW8sO,kBAC9C,KAAK5kO,EAAQm5I,GAAe59E,OAAOzjE,WAAWwsO,0BAC9C,KAAKtkO,EAAQm5I,GAAe59E,OAAOzjE,WAAWitO,SAC9C,KAAK/kO,EAAQm5I,GAAe59E,OAAOzjE,WAAW0sO,UAC9C,KAAKxkO,EAAQm5I,GAAe59E,OAAOzjE,WAAW0D,MAC9C,KAAKwE,EAAQm5I,GAAe59E,OAAOzjE,WAAWisN,MAC9C,KAAK/jN,EAAQm5I,GAAe59E,OAAOzjE,WAAWksO,eAC9C,KAAKhkO,EAAQm5I,GAAe59E,OAAOzjE,WAAW0rO,KAC9C,KAAKxjO,EAAQm5I,GAAe59E,OAAOzjE,WAAW2rO,MAC9C,KAAKzjO,EAAQm5I,GAAe59E,OAAOzjE,WAAW4rO,WAC9C,KAAK1jO,EAAQm5I,GAAe59E,OAAOzjE,WAAW6rO,YAC9C,KAAK3jO,EAAQm5I,GAAe59E,OAAOzjE,WAAWgsO,QAC9C,KAAK9jO,EAAQm5I,GAAe59E,OAAOzjE,WAAWisO,WAC9C,KAAK/jO,EAAQm5I,GAAe59E,OAAOzjE,WAAWqrO,KAC9C,KAAKnjO,EAAQm5I,GAAe59E,OAAOzjE,WAAWgtO,QAC9C,KAAK9kO,EAAQm5I,GAAe59E,OAAOzjE,WAAW4sO,WAC9C,KAAK1kO,EAAQm5I,GAAe59E,OAAOzjE,WAAW6sO,iBAC9C,KAAK3kO,EAAQm5I,GAAe59E,OAAOzjE,WAAWmtO,YAC9C,KAAKjlO,EAAQm5I,GAAe59E,OAAOzjE,WAAWqtO,cAC9C,KAAKnlO,EAAQm5I,GAAe59E,OAAOzjE,WAAWqsO,SAC9C,KAAKnkO,EAAQm5I,GAAe59E,OAAOzjE,WAAWmsO,gBAC9C,KAAKjkO,EAAQm5I,GAAe59E,OAAOzjE,WAAW+rO,kBAC9C,KAAK7jO,EAAQm5I,GAAe59E,OAAOzjE,WAAWosO,aAC9C,KAAKlkO,EAAQm5I,GAAe59E,OAAOzjE,WAAWssO,iBAC9C,KAAKpkO,EAAQm5I,GAAe59E,OAAOzjE,WAAWusO,QAC9C,KAAKrkO,EAAQm5I,GAAe59E,OAAO+pK,SAASE,MAC5C,KAAKxlO,EAAQm5I,GAAe59E,OAAO+pK,SAASG,eAC5C,KAAKzlO,EAAQm5I,GAAe59E,OAAO+pK,SAASI,UAC5C,KAAK1lO,EAAQm5I,GAAe59E,OAAO+pK,SAASK,UAC5C,KAAK3lO,EAAQm5I,GAAe59E,OAAO+pK,SAASC,kBAC1C,MAAO,CACLlrD,aAAc,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,OACjDl5M,MAAO,IACPE,OAAQ,MAEZ,KAAK2+B,EAAQm5I,GAAewpF,OAC1B,MAAO,CACLtoD,aAAc,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,OAC3Cl5M,MAAO,IACPE,OAAQ,MAEZ,KAAK2+B,EAAQm5I,GAAe2pF,mBAC1B,MAAO,CACLzoD,aAAc,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,MAChDl5M,MAAO,IACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAe0pF,OAC1B,MAAO,CACLxoD,aAAc,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,OACjDl5M,MAAO,IACPE,OAAQ,MAEZ,KAAK2+B,EAAQm5I,GAAeypF,OAC1B,MAAO,CACLvoD,aAAc,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,MAClDl5M,MAAO,IACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAe9sC,OAAO/wG,OAAO8qO,OACxC,MAAO,CACL/rD,aAAc,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,MAChDl5M,MAAO,IACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAe9sC,OAAO/wG,OAAO4qO,iBACxC,MAAO,CACL7rD,aAAc,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,MAChDl5M,MAAO,IACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAe9sC,OAAO/wG,OAAO6qO,WACxC,MAAO,CACL9rD,aAAc,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,MAChDl5M,MAAO,IACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAe9sC,OAAO/wG,OAAOirN,OAC1C,KAAKvmN,EAAQm5I,GAAe9sC,OAAO/wG,OAAOgrN,KACxC,MAAO,CACLjsC,aAAc,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,MAChDl5M,MAAO,IACPE,OAAQ,KAEZ,KAAK2+B,EAAQm5I,GAAe9sC,OAAOhxG,SAASo4I,QAC5C,KAAKzzI,EAAQm5I,GAAe9sC,OAAO/wG,OAAOurN,OAC1C,KAAK7mN,EAAQm5I,GAAe9sC,OAAO/wG,OAAOm4I,QACxC,MAAO,CACL4mC,aAAc,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,OACjDl5M,MAAO,IACPE,OAAQ,KAGZ,KAAK2+B,EAAQm5I,GAAeysF,QAAQ9tO,WAAWkuO,IAC/C,KAAKhmO,EAAQm5I,GAAeysF,QAAQ9tO,WAAWiuO,IAC/C,KAAK/lO,EAAQm5I,GAAeysF,QAAQ9tO,WAAWguO,KAC/C,KAAK9lO,EAAQm5I,GAAeysF,QAAQ7tO,aAAa+tO,KACjD,KAAK9lO,EAAQm5I,GAAeysF,QAAQ7tO,aAAa+rO,QACjD,KAAK9jO,EAAQm5I,GAAeysF,QAAQ7tO,aAAa8tO,kBACjD,KAAK7lO,EAAQm5I,GAAeysF,QAAQ9tO,WAAWgsO,QAC/C,KAAK9jO,EAAQm5I,GAAeysF,QAAQ9tO,WAAW+tO,kBAC7C,MAAO,CACLxrD,aAAc,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,MAAM,CAAC,IAAI,OACrDl5M,MAAO,IACPE,OAAQ,KAEZ,QACE,OAAO,S,iFCpff,YACA,QAEI2+B,EAAU,GACd9pC,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9BtlD,EAAQslD,GAAc,CACpB61H,WAAY,CACVkrD,aAAc,IACdtiB,MAAO,IACPP,SAAU,IACV8iB,WAAY,IACZ/iB,UAAW,IACXgjB,WAAY,KAEdC,iBAAkB,IAClBC,YAAa,CACXC,WAAY,IACZC,WAAY,KACZ9C,kBAAmB,KACnB+C,mBAAoB,KACpB9C,QAAS,KACTG,gBAAiB,KACjB4C,iBAAkB,KAClB3C,aAAc,KACd4C,cAAe,KACf3C,SAAU,KACV4C,UAAW,KACXC,UAAW,KACX5C,iBAAkB,KAClBC,QAAS,KACT4C,SAAU,KACVC,SAAU,KACVC,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,UAAW,KACXC,WAAY,KACZC,aAAc,KACdC,MAAO,KACPC,UAAW,KACXC,SAAU,MAEZvsK,OAAQ,CACNwsK,UAAW,KACX/D,eAAgB,KAChBD,WAAY,KACZiE,cAAe,KACfC,eAAgB,KAChBtD,iBAAkB,KAElBW,SAAU,CACRC,kBAAmB,KACnBC,MAAO,KACPC,eAAgB,KAChBC,UAAW,KACXC,UAAW,KAEbjB,WAAY,KACZwD,YAAa,MAEf7kB,MAAO,CACLG,SAAU,KACV2kB,cAAe,KACf5kB,UAAW,MAEb0iB,OAAQ,IACRmC,YAAa,KACb/7H,OAAQ,CACNonC,QAAS,IACTozE,OAAQ,KACRsf,WAAY,KACZD,iBAAkB,KAClBE,OAAQ,KACR7f,OAAQ,KACRD,KAAM,MAERtC,QAAS,CACPqkB,YAAa,IACbC,kBAAmB,KACnBC,MAAO,KACPC,aAAc,KACdC,YAAa,KACbC,YAAa,KACbC,UAAW,MAEbC,QAAS,CACPC,eAAgB,IAChBC,YAAa,UAKnB9oO,EAAA,QAAmBqsG,OAAS,CAC1BonC,QAAS,IACTozE,OAAQ,MACRsf,WAAY,MACZD,iBAAkB,MAClBE,OAAQ,MACR7f,OAAQ,MACRD,KAAM,OAERtmN,EAAA,QAAmBgkN,QAAQ0kB,YAAc,KACzC1oO,EAAA,QAAmBimO,OAAS,KAC5BjmO,EAAA,QAAmBgkN,QAAQ2kB,UAAY,KACvC3oO,EAAA,QAAmBgkN,QAAQwkB,aAAe,KAC1CxoO,EAAA,QAAmBgkN,QAAQykB,YAAc,MACzCzoO,EAAA,QAAmBgkN,QAAQskB,kBAAoB,IAC/CtoO,EAAA,QAAmBooO,YAAc,I,UAyUlB,CACbpoO,UACAqnN,sBAAuB,SAACluE,EAAe9wF,GAGrC,OAAQA,EAAMO,QAEZ,KAAK5oD,EAAQm5I,GAAemqE,QAC1B,MAAO,UACT,KAAKtjN,EAAQm5I,GAAe8sF,OAC1B,MAAO,CACLlrQ,OAAQ,SACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAeivF,YAC1B,MAAO,CACLrtQ,OAAQ,SACR4gO,MAAO,gBAUX,KAAK37L,EAAQm5I,GAAewpF,OAC1B,MAAO,CACL5nQ,OAAQ,QACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAe0pF,OAC1B,MAAO,CACL9nQ,OAAQ,QACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAe9sC,OAAO+5H,OACjC,MAAO,CACLrrQ,OAAQ,SACR4gO,MAAO,UAMX,KAAK37L,EAAQm5I,GAAe9sC,OAAO65H,iBACnC,KAAKlmO,EAAQm5I,GAAeypF,OAC1B,MAAO,gBACT,KAAK5iO,EAAQm5I,GAAe9sC,OAAOw6G,OACnC,KAAK7mN,EAAQm5I,GAAe9sC,OAAO85H,WACnC,KAAKnmO,EAAQm5I,GAAe9sC,OAAOk6G,OACnC,KAAKvmN,EAAQm5I,GAAe9sC,OAAOi6G,KACnC,KAAKtmN,EAAQm5I,GAAe9sC,OAAOonC,QACjC,MAAO,gBAET,KAAKzzI,EAAQm5I,GAAe59E,OAAOipK,UACjC,MAAO,CACLzpQ,OAAQ,SACR4gO,MAAO,aAEX,KAAK37L,EAAQm5I,GAAestF,YAAYvC,aACxC,KAAKlkO,EAAQm5I,GAAestF,YAAYK,cACtC,MAAO,CACL/rQ,OAAQ,qBACR4gO,MAAO,iBAEX,KAAK37L,EAAQm5I,GAAestF,YAAY5C,kBACxC,KAAK7jO,EAAQm5I,GAAestF,YAAYG,mBACtC,MAAO,CACL7rQ,OAAQ,qBACR4gO,MAAO,uBAEX,KAAK37L,EAAQm5I,GAAestF,YAAYxC,gBACxC,KAAKjkO,EAAQm5I,GAAestF,YAAYI,iBACtC,MAAO,CACL9rQ,OAAQ,qBACR4gO,MAAO,qBAEX,KAAK37L,EAAQm5I,GAAestF,YAAYtC,SACxC,KAAKnkO,EAAQm5I,GAAestF,YAAYM,UACxC,KAAK/mO,EAAQm5I,GAAestF,YAAYO,UACtC,MAAO,CACLjsQ,OAAQ,qBACR4gO,MAAO,aAEX,KAAK37L,EAAQm5I,GAAestF,YAAYrC,iBACtC,MAAO,CACLrpQ,OAAQ,qBACR4gO,MAAO,sBAEX,KAAK37L,EAAQm5I,GAAestF,YAAYpC,QACxC,KAAKrkO,EAAQm5I,GAAestF,YAAYQ,SACxC,KAAKjnO,EAAQm5I,GAAestF,YAAYS,SACtC,MAAO,CACLnsQ,OAAQ,qBACR4gO,MAAO,YAEX,KAAK37L,EAAQm5I,GAAestF,YAAYU,aACxC,KAAKnnO,EAAQm5I,GAAestF,YAAYW,aACxC,KAAKpnO,EAAQm5I,GAAestF,YAAYY,aACxC,KAAKrnO,EAAQm5I,GAAestF,YAAYa,aACxC,KAAKtnO,EAAQm5I,GAAestF,YAAYc,aACxC,KAAKvnO,EAAQm5I,GAAestF,YAAYe,aACtC,MAAO,CACLzsQ,OAAQ,qBACR4gO,MAAO,gBAEX,KAAK37L,EAAQm5I,GAAestF,YAAYgB,UACtC,MAAO,CACL1sQ,OAAQ,qBACR4gO,MAAO,cAEX,KAAK37L,EAAQm5I,GAAestF,YAAYiB,WACtC,MAAO,CACL3sQ,OAAQ,qBACR4gO,MAAO,eAEX,KAAK37L,EAAQm5I,GAAestF,YAAYkB,aACtC,MAAO,CACL5sQ,OAAQ,qBACR4gO,MAAO,iBAEX,KAAK37L,EAAQm5I,GAAestF,YAAYmB,MACtC,MAAO,CACL7sQ,OAAQ,qBACR4gO,MAAO,SAEX,KAAK37L,EAAQm5I,GAAestF,YAAYoB,UACtC,MAAO,CACL9sQ,OAAQ,qBACR4gO,MAAO,cAEX,KAAK37L,EAAQm5I,GAAestF,YAAYqB,SACtC,MAAO,CACL/sQ,OAAQ,qBACR4gO,MAAO,aAEX,KAAK37L,EAAQm5I,GAAestF,YAAYC,WACtC,MAAO,CACL3rQ,OAAQ,qBACR4gO,MAAO,UAEX,KAAK37L,EAAQm5I,GAAestF,YAAYE,WACtC,MAAO,CACL5rQ,OAAQ,qBACR4gO,MAAO,eAEX,KAAK37L,EAAQm5I,GAAekqE,MAAME,UAClC,KAAKvjN,EAAQm5I,GAAegiC,WAAWooC,UACrC,MAAO,CACLxoP,OAAQ,QACR4gO,MAAO,cAEX,KAAK37L,EAAQm5I,GAAegiC,WAAWqoC,SACvC,KAAKxjN,EAAQm5I,GAAekqE,MAAMG,SAChC,MAAO,CACLzoP,OAAQ,QACR4gO,MAAO,aAEX,KAAK37L,EAAQm5I,GAAegiC,WAAWorD,WACvC,KAAKvmO,EAAQm5I,GAAekqE,MAAMkjB,WAChC,MAAO,CACLxrQ,OAAQ,QACR4gO,MAAO,eAEX,KAAK37L,EAAQm5I,GAAekqE,MAAM8kB,cAChC,MAAO,CACLptQ,OAAQ,QACR4gO,MAAO,kBAEX,KAAK37L,EAAQm5I,GAAe59E,OAAOwoK,WACjC,MAAO,CACLhpQ,OAAQ,SACR4gO,MAAO,eAEX,KAAK37L,EAAQm5I,GAAegiC,WAAW4oC,MACrC,MAAO,CACLhpP,OAAQ,QACR4gO,MAAO,SAEX,KAAK37L,EAAQm5I,GAAe59E,OAAO//D,MACnC,KAAKwE,EAAQm5I,GAAe59E,OAAOwoJ,MACnC,KAAK/jN,EAAQm5I,GAAe59E,OAAOyoK,eACnC,KAAKhkO,EAAQm5I,GAAegiC,WAAWmrD,WACvC,KAAKtmO,EAAQm5I,GAAe59E,OAAO4nK,KACnC,KAAKnjO,EAAQm5I,GAAe59E,OAAOupK,QACnC,KAAK9kO,EAAQm5I,GAAe59E,OAAOmpK,WACnC,KAAK1kO,EAAQm5I,GAAe59E,OAAO2sK,YACnC,KAAKloO,EAAQm5I,GAAe59E,OAAOopK,iBACnC,KAAK3kO,EAAQm5I,GAAe59E,OAAOqpK,kBACnC,KAAK5kO,EAAQm5I,GAAe59E,OAAOuoK,QACnC,KAAK9jO,EAAQm5I,GAAe59E,OAAOysK,cACnC,KAAKhoO,EAAQm5I,GAAe59E,OAAO0sK,eACnC,KAAKjoO,EAAQm5I,GAAeqtF,iBAC1B,MAAO,gBACT,KAAKxmO,EAAQm5I,GAAe59E,OAAO+pK,SAASE,MAC5C,KAAKxlO,EAAQm5I,GAAe59E,OAAO+pK,SAASG,eAC5C,KAAKzlO,EAAQm5I,GAAe59E,OAAO+pK,SAASI,UAC5C,KAAK1lO,EAAQm5I,GAAe59E,OAAO+pK,SAASK,UAC5C,KAAK3lO,EAAQm5I,GAAe59E,OAAO+pK,SAASC,kBAC1C,MAAO,eAET,KAAKvlO,EAAQm5I,GAAe59E,OAAO0pK,YACnC,KAAKjlO,EAAQm5I,GAAe59E,OAAO4pK,cACjC,MAAO,mBACT,KAAKnlO,EAAQm5I,GAAeyvF,QAAQE,YACpC,KAAK9oO,EAAQm5I,GAAeyvF,QAAQC,eAClC,MAAO,iBACT,QACE,MAAO,KAGb5hB,mBA3hByB,SAACr+J,EAAQuwF,GAClC,IACM4vF,GADmB,EAAA1tQ,kBAAoB,OAAS,KAChB,IACtC,OAAQutF,GAON,KAAK5oD,EAAQm5I,GAAe59E,OAAOysK,cACnC,KAAKhoO,EAAQm5I,GAAe59E,OAAO0sK,eACnC,KAAKjoO,EAAQm5I,GAAe59E,OAAOopK,iBACnC,KAAK3kO,EAAQm5I,GAAe59E,OAAOwoK,WACnC,KAAK/jO,EAAQm5I,GAAeqtF,iBAC5B,KAAKxmO,EAAQm5I,GAAestF,YAAY3C,QACxC,KAAK9jO,EAAQm5I,GAAestF,YAAYxC,gBACxC,KAAKjkO,EAAQm5I,GAAestF,YAAYI,iBACxC,KAAK7mO,EAAQm5I,GAAestF,YAAYvC,aACxC,KAAKlkO,EAAQm5I,GAAestF,YAAYK,cACxC,KAAK9mO,EAAQm5I,GAAestF,YAAYtC,SACxC,KAAKnkO,EAAQm5I,GAAestF,YAAYM,UACxC,KAAK/mO,EAAQm5I,GAAestF,YAAYO,UACxC,KAAKhnO,EAAQm5I,GAAestF,YAAYrC,iBACxC,KAAKpkO,EAAQm5I,GAAestF,YAAYpC,QACxC,KAAKrkO,EAAQm5I,GAAestF,YAAYQ,SACxC,KAAKjnO,EAAQm5I,GAAestF,YAAYS,SACxC,KAAKlnO,EAAQm5I,GAAestF,YAAYU,aACxC,KAAKnnO,EAAQm5I,GAAestF,YAAYW,aACxC,KAAKpnO,EAAQm5I,GAAestF,YAAYY,aACxC,KAAKrnO,EAAQm5I,GAAestF,YAAYa,aACxC,KAAKtnO,EAAQm5I,GAAestF,YAAYc,aACxC,KAAKvnO,EAAQm5I,GAAestF,YAAYe,aACxC,KAAKxnO,EAAQm5I,GAAestF,YAAYgB,UACxC,KAAKznO,EAAQm5I,GAAestF,YAAYiB,WACxC,KAAK1nO,EAAQm5I,GAAestF,YAAYmB,MACxC,KAAK5nO,EAAQm5I,GAAestF,YAAYoB,UACxC,KAAK7nO,EAAQm5I,GAAestF,YAAYC,WACxC,KAAK1mO,EAAQm5I,GAAestF,YAAYE,WACtC,OAAQxtF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IAC/H5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAe59E,OAAOmpK,WACnC,KAAK1kO,EAAQm5I,GAAe59E,OAAO2sK,YACjC,OAAQ/uF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,IAAXA,EAAe,GAAG,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACrG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAestF,YAAY5C,kBACxC,KAAK7jO,EAAQm5I,GAAestF,YAAYG,mBACtC,OAAQztF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,GAAXA,GAAe,CAAY,IAAXA,EAA0B,GAAXA,GAAe,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IAC7H5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAe59E,OAAOA,OACnC,KAAKv7D,EAAQm5I,GAAe59E,OAAOyoK,eACjC,OAAQ7qF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IAC/H5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACjI5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAe59E,OAAO+pK,SAASC,kBAC5C,KAAKvlO,EAAQm5I,GAAe59E,OAAO+pK,SAASE,MAC5C,KAAKxlO,EAAQm5I,GAAe59E,OAAO+pK,SAASK,UAC5C,KAAK3lO,EAAQm5I,GAAe59E,OAAO+pK,SAASG,eAC5C,KAAKzlO,EAAQm5I,GAAe59E,OAAO+pK,SAASI,UAC1C,MAAO,CACLrrD,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA2B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IAClI5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAEZ,KAAK/oO,EAAQm5I,GAAe8sF,OAC5B,KAAKjmO,EAAQm5I,GAAeivF,YAC1B,OAAQjvF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IAClI5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IAChI5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAe9sC,OAAOonC,QACjC,MAAO,CACL4mC,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IAClI5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAEZ,KAAK/oO,EAAQm5I,GAAe9sC,OAAO85H,WACjC,MAAO,CACL9rD,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IAClI5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAEZ,KAAK/oO,EAAQm5I,GAAe9sC,OAAOk6G,OACnC,KAAKvmN,EAAQm5I,GAAe9sC,OAAOi6G,KACnC,KAAKtmN,EAAQm5I,GAAe9sC,OAAO65H,iBACjC,OAAQ/sF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACjI5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IAC/H5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAe9sC,OAAO+5H,OACjC,OAAQjtF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,KAAX0uD,EAAgB,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,IACzG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,KAAK,CAAY,IAAXA,EAAe,KAAK,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACzG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KACT,KAAK/oO,EAAQm5I,GAAekqE,MAAMkjB,WAClC,KAAKvmO,EAAQm5I,GAAegiC,WAAWorD,WACrC,OAAQptF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,OAAO,KAET,KAAK,EAAAoB,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,IAAXA,EAAe,GAAG,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACrG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAekqE,MAAME,UAClC,KAAKvjN,EAAQm5I,GAAegiC,WAAWooC,UACrC,OAAQpqE,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IACxG5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,KAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAekqE,MAAMG,SAClC,KAAKxjN,EAAQm5I,GAAegiC,WAAWqoC,SACrC,OAAQrqE,GACN,KAAK,EAAA5/I,mBAAmBpB,QAOxB,KAAK,EAAAoB,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAC,EAAE,GAAG,CAAY,IAAX0uD,EAAe,GAAG,CAAY,IAAXA,EAA0B,KAAXA,GAAiB,CAAC,EAAa,KAAXA,IAC5E5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,KAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAekqE,MAAM8kB,cAChC,OAAQhvF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,IAAXA,EAAe,GAAG,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACrG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KACT,KAAK/oO,EAAQm5I,GAAegiC,WAAW4oC,MACrC,OAAQ5qE,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IAClI5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAC,EAAa,IAAX0uD,GAAgB,CAAY,KAAXA,EAAgB,KAAK,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAC,EAAa,KAAXA,IAC7F5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAegiC,WAAWmrD,WACrC,OAAQntF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KACT,KAAK/oO,EAAQm5I,GAAeyvF,QAAQE,YAClC,MAAO,CACLzuD,aAAc,CAAC,CAAY,IAAX0uD,EAA0B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IAClI5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAEZ,KAAK/oO,EAAQm5I,GAAeyvF,QAAQC,eAClC,MAAO,CACLxuD,aAAc,CAAC,CAAY,KAAX0uD,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAiB,CAAY,KAAXA,EAA2B,IAAXA,IACpI5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAEZ,QACE,OAAO,S,yJCnbb,SACA,QACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEaC,mB,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAhkQ,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,6BACA,EAAKmY,SAAW,qBAChB,EAAKH,YAAc,kCACnB,EAAKqD,aAAe,GAGpB,EAAKwuK,SAAW,KAChB,EAAKE,gBAAkB,KACvB,EAAKg6E,kBAAoB,KACzB,EAAKC,aAAe,KACpB,EAAKC,iBAAmB,KACxB,EAAKn6E,QAAU,KACf,EAAKo6E,UAAY,KACjB,EAAKl6E,MAAQ,KACb,EAAKm6E,WAAa,KAClB,EAAKC,WAAa,KAClB,EAAKC,WAAa,KAClB,EAAKC,aAAe,KACpB,EAAKC,SAAW,KAGhB,EAAKC,YAAc,eAzBP,E,qEA6BTvkQ,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACHy/H,EAAkB,WAClBC,YACA,MACF,IAAK,oBACHD,EAAkB,kBAClBC,YACA,MACF,IAAK,sBACHD,EAAkB,oBAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,WACHD,EAAkB,UAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,eACL,IAAK,qBACHD,EAAkB,cAClBC,YACA,MACF,IAAK,aACL,IAAK,cACL,IAAK,eACHD,EAAkB,YAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,QACL,IAAK,eACL,IAAK,eACHD,EAAkB,QAClBC,YACA,MACF,IAAK,aACL,IAAK,cACHD,EAAkB,aAClBC,YACA,MAEF,IAAK,SACHD,EAAkB,cAClBC,YACA,MAEF,IAAK,YACHD,EAAkB,WAClBC,YAKJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,O,aAlHJqE,GAAK,qB,kFCnBY0uB,EAAbA,WAAa,CACxBC,QAAS,EAETwxO,SAAU,IAGsBpwO,EAArBA,mBAAqB,CAChCC,IAAK,MACLrB,QAAS,UAETwxO,SAAU,YAGuBlwO,EAAtBA,oBAAsB,CACjC,UAEA,YAEyCC,EAA9BA,4BAA8B,CACzC,WAEA,WAGsBC,EAAXA,SAAW,CACtBC,IAAK,OAGmB8G,EAAbA,WAAa,I,wGC5B1B,O,OACA,OACA,O,IACA,M,IAEA,O,IACA,Q,IACA,Q,IAEA,OACA,QACA,QACA,SACA,QACA,Q,OACA,QACA,QACA,Q,mDAEA,IAAMkpO,EAAmB,SAAC98J,GAAU,IAE3BlvC,EAAkFkvC,EAAlFlvC,kBAAmB3hD,EAA+D6wF,EAA/D7wF,KAAM4tP,EAAyD/8J,EAAzD+8J,eAAgB3yP,EAAyC41F,EAAzC51F,gBAAiBynD,EAAwBmuC,EAAxBnuC,qBAF/B,GAGA,IAAAgkF,WAAS,GAHT,qBAG3B0yD,EAH2B,KAGhBtrL,EAHgB,QAIQ,IAAA44H,UAAS,IAJjB,qBAI3B39D,EAJ2B,KAIZ8kL,EAJY,QAKc,IAAAnnH,UAAS,GALvB,qBAK3BonH,EAL2B,KAKTC,EALS,MAOlC,IAAA7mJ,YAAU,WACR,IAAI8mJ,EAAwBrsM,EAAkBz4D,UAAU+kQ,gBAAkB9gQ,MAAMC,QAAQu0D,EAAkBz4D,UAAU6/E,gBAC/GpnB,EAAkBz4D,UAAU6/E,cAAc/uF,OAAU2nE,EAAkBz4D,UAAU6/E,cAAgB,GACrG8kL,GAAkB,CAChBlxP,KAAK,IAAAhU,qBAAoBg5D,IAApB,iDACLusM,SAAS,IAAAvlQ,qBAAoBg5D,EAAmB,EAAAqU,gBAAgBE,UAFlE,qBAIK83L,KAELD,EAAoB,KAEnB,CAACpsM,IAEJ,IAAMwsM,EAAa,SAACC,EAAgBC,GAElC,GADA,UAAU3nO,eAAe0nO,GACrBnzP,EAEF,OADAynD,EAAqB,EAAAzgC,cAAckB,cAC5B,EAELkrO,IAAcP,IAChBhgP,GAAa,GACbigP,EAAoBM,KA0BlBC,EAAevlL,EAAc+kL,GAEnC,OACE,+BAAK39K,UAAW,YACby9K,EAAiB,KAChB,mCAAY9e,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,6BACV9H,SAAUU,EAAc/uF,QAAU,EAClCqoL,QA9BM,WACtB,IAAM+rF,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCmB,8BAChC,EAAAjI,6BAA6B4B,2BAC3BukO,EAAYtlL,EAAc+kL,EAAmB,GAAKA,EAAmB,EAAI/kL,EAAc/uF,OAAS,EACtGm0Q,EAAWC,EAAgBC,KA0BrB,yCAGJ,+BAAKl+K,UAAU,kBACZipH,IAAck1D,EAAe,wCAAqB,KACnD,+BAAKn+K,UAAU,kCACZm+K,EAAe,+BAAKn+K,UAAW,wBAA0BipH,EAAY,iCAAmC,IAEpF90M,IAAKgqQ,EAAa3xP,IAAK+8L,OAAQ,kBAAM5rL,GAAa,IAAQ2rL,IAAI,KAAO,OAG7Fm0D,EAAiB,KAChB,mCAAY9e,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,6BACV9H,SAAUU,EAAc/uF,QAAU,EAClCqoL,QAtCM,WACtB,IAAM+rF,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCoB,+BAChC,EAAAlI,6BAA6B6B,4BAC3BskO,EAAYtlL,EAAc+kL,EAAmB,GAAKA,EAAmB,EAAI,EAC/EK,EAAWC,EAAgBC,KAkCrB,2CAOVV,EAAiBlmH,UAAY,CAC3BmmH,eAAgB,UAAUjmH,KAC1BhlI,WAAY,UAAUw8B,MAAV,oBACZlkC,gBAAiB,UAAU0sI,MAG7B,IAQMkuC,EAAqB,CACzBnzH,6C,WAGa,IAAA4qF,aACb,IAAAj8C,UAbsB,SAACxzG,EAAOqvP,GAAa,IACpCvrL,EAAqB9jE,EAAM0zG,UAA3B5vC,kBACP,MAAO,CACLA,kBAAmBurL,EAASvqO,YAAcg/C,EAC1Cz7C,YAAaroB,EAAMgR,YAAYqX,eASR2vK,EAAzB,CAA6C83E,K,+ICxDhC,WAAwC,IAA9BrhQ,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aACjDqpE,SACAK,SACJ,OAAQ1pE,EAAOt1B,MACb,KAAKoV,EAAMyoD,qBACX,KAAKzoD,EAAM0oD,mBACX,KAAK1oD,EAAM2oD,4BACX,KAAK3oD,EAAMkpD,gCACX,KAAKlpD,EAAMmpD,8BACX,KAAKnpD,EAAMqpD,qBACX,KAAKrpD,EAAMspD,wBACX,KAAKtpD,EAAMopD,sBACX,KAAKppD,EAAMupD,0BACX,KAAKvpD,EAAMwpD,2BACX,KAAKxpD,EAAM0pD,mBACX,KAAK1pD,EAAMmqD,kBACX,KAAKnqD,EAAMoqD,oBACX,KAAKpqD,EAAMomD,oCACX,KAAKpmD,EAAMqmD,yCACX,KAAKrmD,EAAMqqD,qBACX,KAAKrqD,EAAMsqD,mDACX,KAAKtqD,EAAMuqD,0BACX,KAAKvqD,EAAMyoP,0BACT,OAAOv0Q,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMsmD,mCACT,OAAOpyE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B4pD,mDAAgC5pD,EAAM4pD,4BAAtC,CAAkEjwB,EAAO7f,YAE7E,KAAKL,EAAMypD,+BACT,OAAOv1E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BmiQ,8BAAkBniQ,EAAMmiQ,aAAiB,CAACvgK,UAAWjoE,EAAO7f,QAAQ8nF,cAExE,KAAKnoF,EAAM+oD,sBACT,OAAO70E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bw3D,6BAAiBx3D,EAAMw3D,YAAgB79B,EAAO7f,QAAQ09C,eAE1D,KAAK/9C,EAAM4oD,wBACT,OAAO10E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9ByiG,+BAAmBziG,EAAMyiG,cAAkB9oE,EAAO7f,QAAQ2oF,iBAE9D,KAAKhpF,EAAM6oD,oBACT,OAAO30E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B2iG,2BAAe3iG,EAAM2iG,UAAchpE,EAAO7f,QAAQ6oF,aAEtD,KAAKlpF,EAAM8oD,eACT,OAAO50E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B8iG,2BAAe9iG,EAAM8iG,UAAcnpE,EAAO7f,QAAQgpF,aAEtD,KAAKrpF,EAAMgpD,yBACT,OAAO90E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BuiG,+BAAmBviG,EAAMuiG,cAAkB5oE,EAAO7f,QAAQyoF,iBAE9D,KAAK9oF,EAAMipD,+BACT,OAAO/0E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B6iG,qCAAyB7iG,EAAM6iG,oBAAwBlpE,EAAO7f,QAAQ+oF,uBAG1E,KAAKppF,EAAM2pD,wBACTpjE,mBAAYA,EAAZ,CAAmBgjG,kBAAmBrpE,EAAO7f,QAAQkpF,oBACrD,MACF,KAAKvpF,EAAM4pD,uBACT,OAAO11E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BgjG,0CAAuBhjG,EAAMgjG,mBAA7B,CAAgDrpE,EAAO7f,YAE3D,KAAKL,EAAM6pD,mBAST,OARA0/B,EAAoBhjG,EAAMgjG,kBAAkBjiG,KAAI,SAACmpE,GAC/C,OAAIA,EAAKjpE,KAAO04B,EAAO7f,QAAQ7Y,GAAaipE,GAE5C,gBACKA,EACAvwC,EAAO7f,YAGPnsB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAACgjG,kBAAmBA,IACtD,KAAKvpF,EAAM8pD,0BAGT,OAFAy/B,EAAoBhjG,EAAMgjG,kBAAkB/iG,QAAO,SAAC+iP,GAAD,OAASA,EAAI/hP,KAAO04B,EAAO7f,QAAQ7Y,MAE/EtT,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BgjG,kBAAmBA,IAGvB,KAAKvpF,EAAM+pD,sBACTxjE,mBAAYA,EAAZ,CAAmBqjG,iBAAkB1pE,EAAO7f,QAAQupF,mBACpD,MACF,KAAK5pF,EAAMgqD,qBACT,OAAO91E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BqjG,yCAAsBrjG,EAAMqjG,kBAA5B,CAA8C1pE,EAAO7f,YAEzD,KAAKL,EAAMiqD,iBAST,OARA2/B,EAAmBrjG,EAAMqjG,iBAAiBtiG,KAAI,SAACmpE,GAC7C,OAAIA,EAAKjpE,KAAO04B,EAAO7f,QAAQ7Y,GAAaipE,GAE5C,gBACKA,EACAvwC,EAAO7f,YAGPnsB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAACqjG,iBAAkBA,IACrD,KAAK5pF,EAAMkqD,wBAGT,OAFA0/B,EAAmBrjG,EAAMqjG,iBAAiBpjG,QAAO,SAAC+iP,GAAD,OAASA,EAAI/hP,KAAO04B,EAAO7f,QAAQ7Y,MAE7EtT,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BqjG,iBAAkBA,IAEtB,QACE,OAAOrjG,IA/Kb,IAAYyZ,E,wJAAZ,O,mDACgCikK,EAAnBA,iBAAmB,CAC9BtgF,SAAU,WACVygF,UAAW,YACXlrK,MAAO,SAHF,IAMDsvP,EAAe,CACnBvhK,WAAY,GACZE,gBAAgB,EAChBE,aAAc,KACdE,oBAAqB,KACrBE,mBAAoB,KACpBQ,WAAY,KACZF,aAAc,KACdJ,gBAAiB,KACjBE,eAAgB,KAChBQ,gBAAgB,EAChBE,eAAe,EACfE,iBAAiB,EACjBigK,aAAc,CACZvgK,WAAW,GAEbQ,YAAa,GACb5qC,YAAa,CACXzN,UAAU,EACV64J,WAAY,GACZriK,IAAK,GACL/tD,OAAQ,MAEV+vG,cAAe,CACbx4C,UAAU,EACVq4M,UAAW,GACXztO,SAAU,IAEZ8tE,cAAe,CACb14C,UAAU,EACV5a,MAAO,GACP5zB,KAAM,IAERonF,UAAW,CACT54C,UAAU,EACVqnK,aAAa,GAEfvuH,oBAAqB,CACnB94C,UAAU,EACVlX,MAAO,MAETiwD,UAAW,CACT3zD,MAAO,GACP2a,QAAS,GACTC,UAAU,EACVC,gBAAiB,IAAIv/C,SACrB4/C,YAAa,GACbC,eAAgB,IAAI7/C,SACpB8/C,WAAY,IAEdy4C,kBAAmB,GACnBK,iBAAkB,GAClBz5C,2BAA4B,GAC5Bd,uBAAuB,EACvBi7C,gBAAgB,EAChBE,6CAA6C,EAC7Co+J,kBAAmB,GACnBl+J,mBAAoB,EACpBm+J,oBAAqB,K,sKC1BR,WAAuC,IAA9BtiQ,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEhD4oO,SACJ,OAAO5oO,EAAOt1B,MACZ,KAAKoV,EAAMymD,eACX,KAAKzmD,EAAM0mD,sBACX,KAAK1mD,EAAM4mD,mBACX,KAAK5mD,EAAM6mD,oBACX,KAAK7mD,EAAM+mD,0BACX,KAAK/mD,EAAMgnD,2BACX,KAAKhnD,EAAMinD,0BACX,KAAKjnD,EAAMknD,2BACX,KAAKlnD,EAAM8mD,0BACX,KAAK9mD,EAAMmnD,2BACX,KAAKnnD,EAAMunD,mBACX,KAAKvnD,EAAMwnD,oBACX,KAAKxnD,EAAMynD,wCACX,KAAKznD,EAAM0nD,8BACX,KAAK1nD,EAAM2nD,4BACT,OAAOzzE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMonD,6BACT7gE,mBAAYA,EAAZ,CAAmB8wD,kBAAmBn3B,EAAO7f,QAAQg3C,oBACrD,MACF,KAAKr3C,EAAMqnD,4BACT,OAAOnzE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B8wD,0CAAuB9wD,EAAM8wD,mBAA7B,CAAgDn3B,EAAO7f,YAE3D,KAAKL,EAAM2mD,gCACT,OAAKpgE,EAAMwiQ,yBAAyBpvQ,SAASumC,EAAO7f,SAK7C9Z,EAJErS,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BwiQ,iDAA8BxiQ,EAAMwiQ,0BAApC,CAA8D7oO,EAAO7f,YAI3E,KAAKL,EAAMsnD,0BAGT,OAFAwhM,EAAiBviQ,EAAM8wD,kBAAkB7wD,QAAO,SAAC+iP,GAAD,OAASA,EAAI/hP,KAAO04B,EAAO7f,QAAQ7Y,MAE5EtT,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B8wD,kBAAmByxM,IAKzB,OAAOviQ,GApFT,IAAYyZ,E,wJAAZ,OACA,Q,mDAEuCgpP,EAA1BA,wBAA0B,GACPn4H,EAAnBA,iBAAmB,CAC9BC,YAAa,cACbm4H,OAAQ,UAHH,IAKDjqH,GAAY,IAAA1qG,qBAEZk0N,EAAe,CACnBp5G,gBAAgB,EAChBk7C,mBAAmB,EACnB7zB,gCAAgC,EAChCsyF,yBAA0B,GAC1BtlL,WAAY,GACZ6lH,aAAc,EACd4/D,cAAe,GACfpmP,WAAY,EACZgnL,cAAe,KACf59L,gBAAiB8yI,EAAY,EAAI,GACjC7yI,eAAgB6yI,EAAY,EAAI,IAChC4qD,gBAAiB,EACjBvyI,kBAAmB,GACnBozI,aAAc,EACdP,YAAa,CACXtwL,EAAG,EACHC,EAAG,EACH1a,MAAO,EACPE,OAAQ,EACR0zC,OAAQ,EACR++G,OAAQ,EACRC,OAAQ,GAEVy3C,cAAe,GACfoB,wBAAwB,EACxBxhM,sBAAsB,I,gICpCxB,I,EAAA,S,oCAEO,IAAM+/P,EAAgBA,EAAhBA,cAAgB,UAAMpyQ,OAAO,CACxCqyQ,QAASxwQ,SAASC,SAASgC,QAAU,GAErC82L,QAAS,CACP,eAAgB,sBAkBM03E,EAAbA,WAAa,SAACzyP,GACzB,OAAOuyP,EAAc7yQ,IAAIsgB,IAGA0yP,EAAdA,YAAc,SAAC1yP,EAAKnjB,GAAyB,IAAnBk+L,EAAmB,uDAAT,KAC/C,OAAOw3E,EAAcz3E,KAAK96K,EAAKnjB,EAAMk+L,EAAU,CAACA,WAAW,Q,8EC7BjC43E,EAAfA,aAAe,CAC1B/lK,KAAM,IAKNC,OAAQ,oDACRo4J,QAAS,WACT2N,OAAQ,UACR1rO,OAAQ,UACR6sH,QAAS,YAagB8+G,EAAdA,YAAc,CACzBhmK,OAAQ,UACRimK,SAAU,YACVC,QAAS,WACT9N,QAAS,WACTC,YAAa,eACbh+N,OAAQ,UACR6sH,QAAS,YAGgBi/G,EAAdA,aAAyD,IAA3CjyQ,OAAO2B,SAASC,KAAKC,QAAQ,UAAmBZ,SAASC,SAASkC,QAChE8uQ,EAAhBA,eAA4D,IAA5ClyQ,OAAO2B,SAASC,KAAKC,QAAQ,W,8EClCnD,IAAMswQ,EAAiBA,EAAjBA,eAAiB,iBACjBC,EAAoBA,EAApBA,kBAAoB,oBACpBC,EAAkBA,EAAlBA,gBAAkB,kBAClBC,EAA2BA,EAA3BA,yBAA2B,2BAEbzpQ,EAAdA,YAAc,SAACvK,EAAMS,GAAP,MAAkB,CAC3CkU,KAAMk/P,EACNzpP,QAAS,CAACpqB,OAAMS,WAGawzQ,EAAlBA,gBAAkB,SAACj0Q,EAAMS,GAAP,MAAkB,CAC/CkU,KAAMm/P,EACN1pP,QAAS,CAACpqB,OAAMS,WAGWyzQ,EAAhBA,cAAgB,SAACl0Q,GAAD,IAAOi8H,EAAP,uDAAgB,GAAhB,MAAwB,CACnDtnH,KAAMo/P,EACN3pP,QAAS,CAACpqB,OAAMi8H,YAGmBipI,EAAxBA,sBAAwB,SAACiP,EAAqBC,GAAtB,MAAmD,CACtFz/P,KAAMq/P,EACN5pP,QAAS,CAAC+pP,sBAAqBC,6BAGMC,EAA1BA,wBAA0B,SAACtpO,GAKtC,IAAIupO,EAAUvpO,EAAM7iC,QAAQ,MAAO,IAcnC,OAXIosQ,EAAQt2Q,OAAS,IACnBs2Q,MAAcA,GAEZA,EAAQt2Q,OAAS,IACnBs2Q,EAAaA,EAAQ1yQ,MAAM,EAAG,GAA9B,KAAqC0yQ,EAAQ1yQ,MAAM,IAEjD0yQ,EAAQt2Q,OAAS,IACnBs2Q,EAAaA,EAAQ1yQ,MAAM,EAAG,GAA9B,IAAoC0yQ,EAAQ1yQ,MAAM,IAI7C0yQ,EAAQ1yQ,MAAM,EAAG,KAEwB2yQ,EAArCA,mCAAqC,SAACxpO,GACjD,OAAKA,EAGEA,EACJ7iC,QAAQ,KAAK,IACbA,QAAQ,KAAK,IACbA,QAAQ,MAAM,IACdA,QAAQ,MAAM,IANR,K,gJChDX,SACA,QACA,S,IACA,OACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IAEA,S,IACA,S,IACA,S,uDAEqBimP,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAphP,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKnY,cAAL,2BACA,EAAKgY,YAAc,gCAGnB,EAAKy1B,WAAa,KAClB,EAAKs3E,OAAS,KACd,EAAKrxE,KAAO,KAEZ,EAAK5G,KAAO,KACZ,EAAKw4E,QAAU,KACf,EAAK30E,OAAS,KAfF,E,qEAkBT1wC,GAAW,WACVssI,EAAkB,GACpB8/E,GAA8B,EAC9B7/E,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACHy/H,EAAkB,aAClBC,YACA,MACF,IAAK,eACH6/E,GAA8B,EAC9B9/E,EAAkB,OAClBC,YACA,MACF,IAAK,UACHD,EAAkB,UAClBC,YACA,MACF,IAAK,SACHD,EAAkB,SAClBC,YACA,MACF,IAAK,UACEvsI,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWE,cAAiB73F,EAAUmP,SAAV,aACtGnP,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,SAClBC,aAEF,MACF,IAAK,QACEvsI,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWE,cAAiB73F,EAAUmP,SAAV,aACtGnP,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,OAClBC,aAEF,MACF,IAAK,YACEvsI,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWE,cAAiB73F,EAAUmP,SAAV,aACtGnP,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,WAClBC,aAIN,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACnBosN,K,uCAMV,OAAO,IAAI,EAAJ,QAAyB,aAAc/vN,Q,2CAI9C,OAAO,I,+EAOgD,WAAhDuyK,IAAgD,yDAA7BC,EAA6B,wDACvD,OAAOxyK,KAAKwwI,kBACTxpI,QAAO,SAAAiqE,GACN,QAAIuhG,GAAwC,YAAhBvhG,EAAK3qE,QAAwC,WAAhB2qE,EAAK3qE,SAGvD,EAAKmsK,kBAAkBxhG,EAAMshG,MAErCzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,U,aAxG5ClH,GAAK,a,aADO48O,G,8ECfsBqmB,EAA9BA,4BAA8B,CACzCtuO,KAAM,OACNy1H,KAAM,OACNloI,UAAW,YACXghP,OAAQ,SACRC,aAAc,gBAGoB/kC,EAAvBA,qBAAuB,CAClCC,cAAe,WACfE,aAAc,UACdD,eAAgB,YAChB7uI,UAAW,c,8ECZb,I,IAAA,MACA,OACA,O,IACA,MAEA,QAOA,QACA,QACA,S,IACA,SACA,QACA,S,IACA,O,IACA,S,mDAEA,IAAM2zK,EAAmB,SAAC9/J,GAAU,IAE3B3S,EACsC2S,EADtC3S,YAAaxvF,EACyBmiG,EADzBniG,SAAUgP,EACemzF,EADfnzF,eAAgBsC,EACD6wF,EADC7wF,KAAM4wP,EACP//J,EADO+/J,SAAUC,EACjBhgK,EADiBggK,cAAe1gL,EAChC0gB,EADgC1gB,UAAW2gL,EAC3CjgK,EAD2CigK,SAAUC,EACrDlgK,EADqDkgK,iBAChGp2P,EAA2Ck2F,EAA3Cl2F,uBAAwBq2P,EAAmBngK,EAAnBmgK,gBACpB35P,EAAqBqG,EAAezQ,SAE1C,IAAKixF,EACH,OAAO,KAGT,IAAM+yK,EAAW55P,EAAmB+qK,cAAgBznK,EAEhDu2P,GAAmBF,IAAmB,IAAA/2P,oBAAmBikF,IACxDgzK,GAAmBJ,IACtBI,EAAkBD,GAdc,IAgB3Bt/H,GAAa,IAAA7D,mBAAb6D,UAEP,GAAIu/H,EAAiB,CACnB,IAAKv/H,GAAam/H,EAChB,OAAO,KAET,IAAIK,EAAa,mCAAwBjzK,YAAaA,EAAaizK,WAAYF,EAAW,uBAAyB,OASnH,OAAO9gL,EAAY,+BAAKA,UAAWA,GAAYghL,GAAoBA,EAGrE,IAAKx/H,KAAc,IAAAr7B,wBAAuBpY,GAAa,GACrD,OAAO,KAGT,IAAMz9E,GAAS,IAAAC,oBACf,IAAKD,EAAOia,YACV,OAAO,mCAAiB7xB,KAAM,KAEhC,IAAKioQ,IAAarwP,EAAOy+E,wBAAwBhB,EAAYryF,QAAQ,KAAUglQ,EAC7E,OAAO,KAGT,IAAMviQ,IAAgB,IAAAwD,oBAAmBosF,EAAarwF,OAAOC,UAAUY,GAAYA,EAAW,GAE9F,IAAKJ,IAAiB4vF,EAAYh1F,UAAUkoQ,cAC1C,OAAO,KAGT,IAAIlxP,EAAO,GAKX,GAJI0wP,IACF1wP,GAAO,IAAAH,gBAAem+E,EAAal+E,EAAMtC,IAGvCqzP,GAAoBpyQ,SAASC,SAAS2b,WAAa2jF,EAAYh1F,UAAUkoQ,cAAe,CAC1F,IAAMrpQ,GAAQ,IAAAR,cAAa+G,GAC3B,OAAO,mCAAmB4R,KAAMA,EAAMtX,QAASs1F,EAAan2F,MAAOA,EAAOooF,UAAWA,IAGvF,IAAMkhL,EAAYT,EACX1wP,EADW,MACF,IAAAjH,sBAAqB5B,GAAoB,IAAA9P,cAAa+G,GAAe4vF,IACjF,IAAAjlF,sBAAqB5B,GAAoB,IAAA9P,cAAa+G,GAAe4vF,GAEzE,OAAO/N,EAAY,+BAAKA,UAAWA,GAAYkhL,GAAmBA,GAIpEV,EAAiBlpH,UAAY,CAC3BvpD,YAAa,UAAU/+C,MAAV,oBACbyxN,SAAU,UAAUjpH,KACpBj5I,SAAU,UAAUyvG,OACpBhuB,UAAW,UAAUpoD,OACrB+oO,SAAU,UAAUnpH,KACpBqpH,gBAAiB,UAAUrpH,KAC3BopH,iBAAkB,UAAUppH,M,WA2Bf,IAAA2F,aACb,IAAAj8C,UAzBsB,SAACxzG,EAAOqvP,GAAa,IACpCvyO,EAA0B9c,EAAMwc,UAAhCM,uBACA7S,EAAajK,EAAM8J,UAAnBG,UACDwpQ,GAAkB,IAAAz9E,mBAAkB/rL,EAAWolP,EAASltO,MAAM,GAC7DiY,EAAsBp6B,EAAMgsL,QAA5B5xJ,mBASDs5O,EAAmB1zQ,EAAMytB,eAAeimP,iBAE9C,MAAO,CACL7zP,eAAgB7f,EAAMqN,gBACtByP,yBACA22P,kBACAE,yBAA0Bv5O,EAAmBj+B,OAC7Cu3Q,sBAKF,CAAyBZ,K,+EC9H3B,I,IAAA,MACA,O,IACA,MACA,O,mDAEA,IAAMc,EAAqB,SAAC5gK,GAAU,IAE7BjoG,EAA+DioG,EAA/DjoG,QAASoX,EAAsD6wF,EAAtD7wF,KAAMtC,EAAgDmzF,EAAhDnzF,eAAgBg0P,EAAgC7gK,EAAhC6gK,MAAOvhL,EAAyB0gB,EAAzB1gB,UAAWwhL,EAAc9gK,EAAd8gK,WAEpDC,EAAO,GAaX,OAVIA,GAFCl0P,EAAeE,SAAWF,EAAeG,gBAAkBmC,EAAK1C,SAC/C,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,2BAA6B1U,EAAQM,UAAUmF,mBACnF2R,EAAKC,cAAc,CAAC1S,GAAI,2BAA6B3E,EAAQM,UAAUmF,oBACrD,UAAhB2R,EAAKvC,QAAsBuC,EAAK1C,SAAS,0CAA4C1U,EAAQM,UAAUmF,mBACzG2R,EAAKC,cAAc,CAAC1S,GAAI,0CAA6C3E,EAAQM,UAAUmF,oBAEvFzF,EAAQM,UAAUwb,YAGpB9b,EAAQM,UAAUwb,cAOvBitP,GAAcC,EAAK53Q,OAAS23Q,EAC9BC,EAAOA,EAAKptQ,UAAU,EAAGmtQ,GAAc,MAC9BD,GAASE,GAAQA,EAAK53Q,OAAS,MACxC43Q,EAAOA,EAAKptQ,UAAU,EAAG,KAAO,OAG3B,6BAAG2rF,UAAWA,GAAa,mBAAoB0hL,wBAAyB,CAACC,OAAQF,MAT/E,MAYXH,EAAmBhqH,UAAY,CAC7B7+I,QAAS,UAAU1L,OAAOshH,WAC1BruB,UAAW,UAAUpoD,OACrB2pO,MAAO,UAAU/pH,KACjBgqH,WAAY,UAAUxzJ,Q,WAWT,IAAAmvC,aACb,IAAAj8C,UATsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAIC,GAGzB,CAA6CumQ,K,qECjD/Cx3Q,OAAOkC,eAAeZ,EAAS,aAAc,CAC3CkB,OAAO,IAGT,IAAIs1Q,EAAW93Q,OAAO+2B,QAAU,SAAU/U,GAAU,IAAK,IAAIniB,EAAI,EAAGA,EAAIk4Q,UAAUh4Q,OAAQF,IAAK,CAAE,IAAIwsC,EAAS0rO,UAAUl4Q,GAAI,IAAK,IAAIiD,KAAOupC,EAAcrsC,OAAOC,UAAUC,eAAeC,KAAKksC,EAAQvpC,KAAQkf,EAAOlf,GAAOupC,EAAOvpC,IAAY,OAAOkf,GAOvP,SAASg2P,EAAgBj2P,EAAKjf,EAAKN,GAAiK,OAApJM,KAAOif,EAAO/hB,OAAOkC,eAAe6f,EAAKjf,EAAK,CAAEN,MAAOA,EAAOL,YAAY,EAAM81Q,cAAc,EAAMC,UAAU,IAAkBn2P,EAAIjf,GAAON,EAAgBuf,EAL3MzgB,EAAQm1G,YAaR,WACE,IAAI0hK,EAAQJ,UAAUh4Q,OAAS,QAAsBu+D,IAAjBy5M,UAAU,GAAmBA,UAAU,GAAKK,EAEhF,MAAO,CACL1hQ,KAAM2hQ,EACNlsP,QAAS,CACPgsP,MAAOA,KAlBb72Q,EAAQo1G,YAuBR,WACE,IAAIyhK,EAAQJ,UAAUh4Q,OAAS,QAAsBu+D,IAAjBy5M,UAAU,GAAmBA,UAAU,GAAKK,EAEhF,MAAO,CACL1hQ,KAAM4hQ,EACNnsP,QAAS,CACPgsP,MAAOA,KA5Bb72Q,EAAQ03P,aAiCR,WACE,IAAImf,EAAQJ,UAAUh4Q,OAAS,QAAsBu+D,IAAjBy5M,UAAU,GAAmBA,UAAU,GAAKK,EAEhF,MAAO,CACL1hQ,KAAM6hQ,EACNpsP,QAAS,CACPgsP,MAAOA,KAtCb72Q,EAAQ23P,kBA2CR,WACE,IAAI5mP,EAAQ0lQ,UAAUh4Q,OAAS,QAAsBu+D,IAAjBy5M,UAAU,GAAmBA,UAAU,GAAK,GAC5E/rO,EAAS+rO,UAAUh4Q,OAAS,QAAsBu+D,IAAjBy5M,UAAU,GAAmBA,UAAU,GAAK,GAE7ES,EAAOxsO,EAAO7f,SAAW,GACzBssP,EAAaD,EAAKL,MAClBA,OAAuB75M,IAAfm6M,EAA2BL,EAAgBK,EAEvD,OAAQzsO,EAAOt1B,MACb,KAAK2hQ,EACH,OAAOP,EAAS,GAAIzlQ,EAAO2lQ,EAAgB,GAAIG,GAAQ9lQ,EAAM8lQ,IAAU,GAAK,IAC9E,KAAKG,EACH,OAAOR,EAAS,GAAIzlQ,EAAO2lQ,EAAgB,GAAIG,EAAOziQ,KAAKywH,IAAI,GAAI9zH,EAAM8lQ,IAAU,GAAK,KAC1F,KAAKI,EACH,OAAOT,EAAS,GAAIzlQ,EAAO2lQ,EAAgB,GAAIG,EAAO,IACxD,QACE,OAAO9lQ,IAvDb,IAAIgmQ,EAAO/2Q,EAAQ+2Q,KAAO,mBACtBC,EAAOh3Q,EAAQg3Q,KAAO,mBACtBC,EAAQj3Q,EAAQi3Q,MAAQ,oBAExBH,EAAgB92Q,EAAQ82Q,cAAgB,W,2ICnB5C,Q,IAEA,OACA,QACA,S,IAQA,O,IACA,M,IACA,Q,IACA,QACA,Q,IACA,SACA,Q,OACA,SACA,S,mDAI+BjpF,EAAlBA,iBAAA,gCAAkB,6HACvB98K,EAAQ,UAAM5E,WACdonQ,EAA2BxiQ,EAAM4C,cAAc4/P,yBAC/C7f,EAAwB3iP,EAAMqmQ,2BAA2B1jB,sBACzD/5L,EAAa5oD,EAAM4C,cAAckuD,kBACjCjrD,EAAc7F,EAAMgH,UAAUnB,YAC9BygQ,EAAe,UAAUtlN,kBAAoB,UAAUA,kBAAkBmsM,0BAA4B,GACvGoZ,EAAa,UAAUniN,YACxBnkD,QAAO,SAAAylD,GAAS,OAAOA,EAAIwyG,SACzB,EAAAu1F,2CAA2Cr6P,SAASsyD,EAAInmD,WAE1DwB,KAAI,SAAA2kD,GAAA,OAAOA,EAAIwyG,YACf9xG,OAAOkgN,GAEJE,GAAgB,IAAAC,qBAChBn+M,GAAY,IAAAqC,gBAEd+7M,EAAkB,UAAE1iN,MAAM,UAAUjB,aAClC4jN,EAAsB,UAAUzlN,aAAa0lN,2BAE7CC,EAAgBrE,EAAyBpvQ,SAASk1D,IAAcM,GAAcA,EAAWl7D,OAAS,EAAI,UAAUwzD,aAAa4lN,mBAAmB,UAAO1oN,oBAAsB,GAC7K2oN,EAAoBvE,EAAyBpvQ,SAASk1D,GAAa,UAAUpH,aAAa8lN,iBAAiB,UAAO5oN,oBAAsB,GArBjH,UAsBC6oN,EAAetkB,GAtBhB,eAsBvBukB,EAtBuB,OAuBvBC,EAAW,UAAqB5wN,SAAS46E,eAE/C,UAAUnuE,UAA8B,EAApB0jN,EAAgBrzP,EAA4B,EAApBqzP,EAAgBpzP,GAzB/B,kBAoCtB,CACL0/B,SAAU,UAAUqY,cACpB64D,YAAagjJ,EACbL,cAAeA,EACfE,kBAAmBA,EACnBJ,oBAAqBA,EACrBQ,SAAUA,EACVv+M,WAAY,UAAiB6nL,wBAC7B5qO,YAAaA,EACbglD,MAAO,UAAUD,UACjBw8M,MAAO,UAAU58M,iBAAiB,EAAAlV,eAAeC,WACjDlI,QAAS,UAAUmd,iBAAiB,EAAAlV,eAAe7H,OAEnD8iC,YAAai2L,EAAc9zL,UAC3B20L,YAAab,EAAca,YAC3B/mN,OAAQ,UAAU6B,YAClB/L,gBAAiB,UAAqBA,gBAAgB+6E,eACtDzoE,UAAW,UAAUvH,eAAemmN,uBACpCz/M,yBAA0B,UAAc+J,qBAAqB+vF,aAC7D4lH,qBAAqB,IAAAC,4BACrB3qJ,WAAY8lI,GAAwB,IAAA8kB,oCAAoCjB,EAAckB,uBAGtFngN,YAAao7L,GAAwB,IAAAglB,yCAA0CpB,EAC/Et1F,gBAAiB0xE,EACjB15L,aAAa,IAAAy4F,4BACb5tG,aAAc,UAAUmN,uBAAyB,UAAUA,uBAAuB0gG,aAAe,KA9DtE,mDAAlB,4CAAN,IAAM,EAkEP,EAAAslH,GAAA,gCAAiB,WAAOtkB,GAAP,mFACjBA,EADiB,sBAEbilB,EAAYv1Q,SAASg9F,cAAc,mBAFtB,wBAIjB,IAAAxvE,cAAa,0BACb+nP,EAAUzyQ,UAAUC,IAAI,6BALP,mBAOa,aAAYwyQ,GAPzB,UAOT/8J,EAPS,OAQf+8J,EAAUzyQ,UAAU27K,OAAO,8BAC3B,IAAAvlF,kBACIsf,IAAiBA,EAAc7hB,UAVpB,0CAWN6hB,EAAc7hB,UAAU,aAAc,KAXhC,2DAcf,IAAAuC,iBAde,iCAkBd,UAAUrqC,aAAa2mN,qBAAqB,UAAOzpN,qBAlBrC,4DAAjB,8C,8EC1FN,I,IAAA,Q,IACA,Q,6DAEgB,SAAC0pN,GAA8D,IAAjDC,EAAiD,wDAA7BC,EAA6B,wDACzE9oN,EAAS,GACTC,EAAQ,GAFiE,uBAI7E,YAAsB2oN,EAAtB,+CAAmC,KAA1BG,EAA0B,QAC7B9hC,EAAW,IAAI,EAAJ,QAAU8hC,EAAU50P,EAAG40P,EAAU30P,OAAG24C,OAAWA,EAAW+7M,GACrED,GAAcE,aAAqBA,EAArBA,SAChB9hC,EAASh/K,OAAO8gN,EAAU/vG,UAE5Bh5G,EAAOlxD,KAAKm4O,IAT+D,6EAW7E,IAAK,IAAI34O,KAAK0xD,EACRA,GAAQ1xD,EAAI,GACd2xD,EAAMnxD,KAAK,IAAI,EAAJ,QAASkxD,EAAO1xD,GAAI0xD,GAAQ1xD,EAAI,KAE3C2xD,EAAMnxD,KAAK,IAAI,EAAJ,QAASkxD,EAAO1xD,GAAI0xD,EAAO,KAI1C,OAAOC,I,0JCtBT,Q,IAEA,MACY1lC,E,wJAAZ,O,IACA,QACA,QACA,QACA,Q,uDAGqByuP,E,yOAEnBn6O,aAAc,E,EAkDdo6O,yBAA2B,SAAC5oQ,EAAQk/H,EAAmB2pI,GAAmB,IACjEl4P,EAAeuuH,EAAfvuH,YACDmnK,EAAc,EAAK3pJ,aAAY,GACjC26O,EAAe,KACfC,EAAgB,KAwDpB,OAvDAjxF,EAAYhgL,SAAQ,SAAA2oG,GAClB,IAAIqoK,IAGA9oQ,IAAW,EAAAmD,cAAcC,MAC3B0lQ,GAAe,IAAAn0P,sBAAA,GACN8rF,IACTqoK,EAAeroK,EAAYtqF,WAAW3Q,MAAK,SAAA4Q,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWA,MAE5E8oQ,GAAgBA,EAAa5zP,KAAKmmE,YACpC0tL,EAAgBD,EAAa5zP,KAAK81F,eAAer6F,GAAa,KAC1C,CAClB,IAAIgoE,EAAc,GA4BlB,GA3BAvqF,OAAOmc,KAAK,EAAKikG,aAAa12G,SAAQ,SAAC8gB,GAClB,QAAfA,IACF+/D,0BAAkBA,IAAlB,aAAkCmwL,EAAa5zP,KAAKC,aAAayD,WAGrEmwP,EAAgBpwL,EAAYnzE,MAAK,SAACzI,GAAD,OAAaA,EAAQM,UAAUqE,KAAOiP,QAE5B,YAArC7d,SAASC,SAASoC,gBAAqE,YAArCrC,SAASC,SAASoC,iBACrE,EAAKugB,cAAgB,EAAKA,aAAa/b,MAAK,SAAA0oL,GAAA,OAASA,EAAM2mF,6BAC3DH,EAAe16Q,QAGlB,EAAKunB,aAAa5d,SAAQ,SAAAuqL,GACxB,IAAM4mF,EAAiB5mF,EAAMlsK,SAAS3Q,MAAK,SAAA4Q,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWA,KAC9E,GAAIipQ,EAAgB,CAElB,IAAMC,EAAoBL,EAAerjQ,MAAK,SAAAnI,GAAA,OAAaA,EAAUqE,KAAOiP,KACxEu4P,GACFD,EAAe/zP,KAAKwxH,iBAAiB,CAACwiI,GAAoB,GAAG,GAE/DH,EAAgBD,EAAa5zP,KAAKmmE,SAAS71E,MAAK,SAACzI,GAAD,OAAaA,EAAQM,UAAUqE,KAAOiP,UAOvFo4P,GACa,UAAX/oQ,GAAuBk/H,GAAqBA,EAAkBl/H,OAAQ,CACzE,IAAMsW,EAAe,EAAKsZ,wBAAwBsvG,EAAkBl/H,QAChEsW,IACFyyP,EAAgBzyP,EAAa00F,eAAer6F,GAAa,IAI1Do4P,GACHr3Q,QAAQC,MAAM,8BAA+BqO,EAAQ2Q,OAMtDo4P,G,mHAcPz4P,GAMA,IALAgsN,EAKA,wDAJA6sC,EAIA,wDAHAC,IAGA,gEAFA3sC,EAEA,wDADA4sC,EACA,wDACA,GAAI/4P,EAAS,CAEX,IAAM84M,GAAe94M,EAAQ84M,aAC7BggD,EAAqBA,IAAuBhgD,GAA+B,IAAhBA,IAAuBA,KAAiB1vN,KAAKoL,QAGtGpL,KAAKoL,KAAOskN,GAEd1vN,KAAKo0B,MAAQxd,EAAQwd,OAASp0B,KAAKo0B,MAEnCp8B,QAAQ4B,IAAI,cAAegd,GAC3B5e,QAAQ4B,IAAI,oBAAqBmpO,GAEjCnsN,EAAQg5P,eAAiBh5P,EAAQg5P,gBAAkB,GAEnD5vQ,KAAKy0B,cACFr2B,SAAQ,SAAC2oG,GACWA,EAAYypC,kBAClBpyI,SAAQ,SAACse,GACpB,IAAMpW,EAASoW,EAAQpW,OACnBupQ,EAAyB,KAK7B,GAJAnzP,EAAQg9J,wBAAwBz5K,MAAK,SAAAsjF,GAEnC,OADAssL,EAAyBnzP,EAAQ60M,qBAAqBhuI,MAGpD3sE,EAAQhiB,eAAe0R,IAAWupQ,EAAwB,CAI5D,GAHKj5P,EAAQg5P,eAAez1Q,SAASmM,KACnCoW,EAAQomE,UAAW,GAEjB2sL,EAAU,CACZ,IAAM9jI,EAA8B,eAAXrlI,GAA2BsQ,EAAA,gBAChD8F,EAAQo7M,2BAA2BlhN,EAAA,gBAA4BA,EAAA,YAC/D8F,EAAQ60M,qBAAqB36M,EAAQtQ,IACrCqlI,EACFjvH,EAAQyJ,cAAgBwlH,EACfkkI,IACTnzP,EAAQyJ,cAAgB0pP,QAG1BnzP,EAAQyJ,cAAgBzJ,EAAQ40F,eAAe16F,EAAQtQ,IAAS,IAASygG,EAAY+oK,oBAEnFpzP,EAAQ+e,gBAAkB/e,EAAQyJ,eAEpCzxB,OAAOmc,KAAK6L,EAAQ+e,gBAAgBr9B,SAAQ,SAAAs9B,GAC1C,IAAMq0O,EAAiBzpQ,EAAS,IAAMo1B,EAClC9kB,EAAQg5P,eAAez1Q,SAAS41Q,GAClCrzP,EAAQ+e,eAAeC,GAAY,KAC1B9kB,EAAQm5P,GACjBrzP,EAAQ+e,eAAeC,GAAY+zO,EAC/B/yP,EAAQokE,2BAA2BplD,EAAUhf,EAAQyJ,cAAewpP,EAAS,EAAO,MACpFjzP,EAAQ40F,eAAe16F,EAAQm5P,IAAiB,GAC3B,MAAbr0O,GAAqE,MAAjDhf,EAAQyJ,cAAcrT,SAAS8tE,eAA4E,MAAjDlkE,EAAQyJ,cAAcrT,SAAS8tE,eAAsC,MAAbllD,IAClJhf,EAAQ+e,eAAeC,GAAYhf,EAAQokE,2BAA2BplD,EAAUhf,EAAQyJ,cAAewpP,EAAS,EAAO,UAM7HjzP,EAAQgqE,qBAAuBhqE,EAAQyJ,cAOrCvP,EAAQg5P,eAAez1Q,SAASmM,KAClCoW,EAAQomE,UAAW,GAEhBpmE,EAAQyJ,eAEXzJ,EAAQ0pE,cAEL1pE,EAAQomE,UAAYpmE,EAAQ+e,gBAAkB/mC,OAAOyhB,OAAOuG,EAAQ+e,gBAAgB59B,OAAM,SAAAwF,GAAA,OAAYA,MACzGqZ,EAAQ6jE,oBAEN7jE,EAAQyJ,eAAiB48M,IACtBrmN,EAAQyJ,cAAcy9D,2BACzBlnE,EAAQyJ,cAAcxiB,UAAUgS,UAAW,GAEzC+G,EAAQ+e,gBACV/mC,OAAOmc,KAAK6L,EAAQ+e,gBAAgBr9B,SAAQ,SAAAs9B,GACtChf,EAAQ+e,eAAeC,KACzBhf,EAAQ+e,eAAeC,GAAU/3B,UAAUgS,UAAW,MAIxD+G,EAAQupE,oBAAsBvpE,EAAQoqE,oBAAsBpqE,EAAQoqE,mBAAmBryF,QACzFioB,EAAQoqE,mBAAmB1oF,SAAQ,SAAA4xQ,GACjCA,EAAkBrsQ,UAAUgS,UAAW,YAO/C+5P,GACF1vQ,KAAKyzN,aAAazzN,KAAKy0B,eAGrBmuM,GACF5iO,KAAKiwQ,oCAAoCr5P,GAG3C,IAAM6M,EAAczjB,KAAKs4F,wBACtBtxF,QAAO,SAAA+/F,GAAA,OAAeA,EAAYvrF,KAAK20H,mBACvCroI,KAAI,SAACi/F,GAAD,OAAiBA,EAAYvrF,KAAKK,YAEpC7b,KAAKu0B,cACR,UAAMtQ,SAAS,CACb7Y,KAAMoV,EAAMkD,sBACZ7C,QAAS,CAAC4C,iBAId,UAAMQ,SAAS,CACb7Y,KAAMoV,EAAM0S,sBAGVtc,EAAQ5O,IACV,UAAMic,UAAS,IAAAqD,iBAAgB1Q,EAAQ5O,Q,yCAM1BrE,GAgCjB,OA5BKiE,MAAMC,QAAQlE,EAAUmP,SAAS+hB,aAAgBlxB,EAAUmP,SAAS+hB,WAAWpgC,OAIlFkP,EAAUmP,SAAS+hB,WAAalxB,EAAUmP,SAAS+hB,WAAW/sB,KAAI,SAACooQ,GAIjE,MAHsB,iBAAXA,GAAwBA,EAAO/1Q,SAAS,YACjD+1Q,EAAS,SAAWA,GAEfA,KAPTvsQ,EAAUmP,SAAS+hB,WAAa,CAAC,WAUnCngC,OAAOmc,KAAKlN,EAAUmP,UAAU1U,SAAQ,SAAA5G,GAClCoQ,MAAMC,QAAQlE,EAAUmP,SAAStb,KAAkB,eAARA,IAC7CmM,EAAUmP,SAAStb,IAAO,aAAQmM,EAAUmP,SAAStb,IAAO,SAAA6gG,GAC1D,GAAyB,iBAAdA,EAAwB,CACjC,GAAIA,EAAUl+F,SAAS,MACrB,OAAOk+F,EAAUt6F,MAAM,MAClB,GAAIs6F,EAAUl+F,SAAS,KAC5B,OAAOk+F,EAAUt6F,MAAM,KAG3B,OAAOs6F,KAEG,iBAAR7gG,IACFmM,EAAUmP,SAAV,iBAA0CnP,EAAUmP,SAAStb,GAAK,QAIjEmM,M,wBAlSUsrQ,G,kLCVrB,O,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,MACA,QAKA,S,IACA,O,IACA,OACA,SACYzuP,E,wJAAZ,OACA,SACA,QAKA,SACA,QACA,QACA,QACA,QACA,QACA,Q,OAGA,QACA,QAGA,SACA,QAIA,QACA,SACA,QACA,SACA,SAIA,SACA,S,uDAEqB2vP,E,WAWnB,aAAc,wCAVdh7O,aAAc,EAUA,KATdi7O,uBAAyB,GASX,KARdv5J,yBAA2B,GAQb,KAPdliF,cAAgB,GAOF,KADdnW,MAAQ,GACM,KAsJd6xP,oCAAsC,SAACnsL,EAA2BxnE,EAASm5B,EAASouC,GAAyC,IAA7BqzH,EAA6B,uDAAP,GACpH,GAAI56L,EAAQhc,WAA8C,UAAjCgc,EAAQhc,YAAYmb,SAC3C,OAAOqoE,EAET,IAAMosL,EAAkC5zP,EAAQilE,SAAS36E,QAAO,SAAA3D,GAC9D,GAAIA,EAAQwY,UAAYxY,EAAQwY,SAAS1hB,SAAS,cAChD,OAAO,EAET,IAAMo2Q,EAAsBltQ,EAAQoc,yBACpC,OAAOpc,EAAQugF,2BAA4B,IAAAmtB,wBAAuB1tG,GAAS,EAAMi0M,KAC3EpzH,EAA0BjkF,MAAK,SAAAkxC,GACjC,OAAOA,EAAW31B,KAAKiE,2BAA6B8wP,QAItDC,EAA0B9zP,EAAQynE,wBAAwBznE,EAAQ0nE,6BAA6BvuC,EAASy6N,GAAkCrsL,GAK9I,OAJAusL,EAA0B9zP,EAAQ6nE,wBAC9B7nE,EAAQ6nE,wBAAwBisL,GAChCA,EAAwB1oQ,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,MAE7E,wBACKg1E,IADL,aAEKssL,KA5KO,KA4NdnhI,qBA5Nc,gCA4NQ,WAAOz4H,GAAP,UACOgsN,EADP,wDAEO6tC,EAFP,uDAEuB,SAAC75P,GAAD,OAAaA,GAC7BmsN,EAHP,wDAIO9yG,EAJP,yFAMdygJ,GAAmB,IAAA/5P,0BAAyBC,GAAS5P,QAAO,SAAAiQ,GAChE,OAAQ,EAAK0d,cAAc10B,MAAK,SAAAoD,GAAA,OAAWA,EAAQ2E,KAAOiP,SAE1BxiB,OATd,iCAUV,IAAA6sH,eAAcovJ,EAAkB,MAAM,EAAOzgJ,GAVnC,8CAWhB,CAACh8H,KAAM,IAXS,cASdkuG,EATc,OAiBdutH,IADN94M,EAAUA,GAAW,IACQ84M,cAC8B,IAAhBA,IAAuBA,KAAiB,EAAKtkN,OAEtF,EAAKA,KAAOskN,GAEd,EAAKluG,gBAAgBrf,EAASluG,MACD,mBAAlBw8Q,IACT75P,EAAU65P,EAAc75P,IAE1B,EAAKw4H,4BAA4Bx4H,EAASgsN,GAAiC,GAAO,EAAMG,GACpF,EAAKjuM,aAAeiuM,GACtB,EAAK9tM,6BA5Ba,WA8Bd,IAAAq4G,wBAAuB,GA9BT,eA+BpB,aAAEn1I,QAAQ+pG,QAAQ,UAAYuzB,kBA/BV,kBAgCbtzB,GAhCa,8CA5NR,kDAikBdsjC,qBAAuB,SAACxuH,EAAa2F,GAAsC,IAAxBuyP,EAAwB,uDAAP,GAC9DE,EAAgBzyP,EAAa+kE,SAAS71E,MAAK,SAACzI,GAAD,OAAaA,EAAQM,UAAUqE,KAAOiP,KAIrF,IAHKo4P,GAAiBzyP,EAAailE,gBACjCwtL,EAAgBzyP,EAAailE,cAAc/1E,MAAK,SAACzI,GAAD,OAAaA,EAAQM,UAAUqE,KAAOiP,OAEnFo4P,EAAe,CAClB,IAAIpwL,EAAc,GAClBvqF,OAAOmc,KAAK,EAAKikG,aAAa12G,SAAQ,SAAC8gB,GAClB,QAAfA,IACF+/D,0BAAkBA,IAAlB,aAAkCriE,EAAanB,aAAayD,WAGhEmwP,EAAgBpwL,EAAYnzE,MAAK,SAACzI,GAAD,OAAaA,EAAQM,UAAUqE,KAAOiP,QAE5B,YAArC7d,SAASC,SAASoC,gBAAqE,YAArCrC,SAASC,SAASoC,iBACrE,EAAKugB,cAAgB,EAAKA,aAAa/b,MAAK,SAAA0oL,GAAA,OAASA,EAAM2mF,6BAC3DH,EAAe16Q,QAGlB,EAAKunB,aAAa5d,SAAQ,SAAAuqL,GACxB,IAAM4mF,EAAiB5mF,EAAMlsK,SAAS3Q,MAAK,SAAA4Q,GACzC,OAAOA,EAAQlB,KAAKlV,SAAWsW,EAAatW,UAE9C,GAAIipQ,EAAgB,CAElB,IAAMC,EAAoBL,EAAerjQ,MAAK,SAAAnI,GAAA,OAAaA,EAAUqE,KAAOiP,KACxEu4P,GACFD,EAAe/zP,KAAKwxH,iBAAiB,CAACwiI,GAAoB,GAAG,GAE/DH,EAAgBzyP,EAAa+kE,SAAS71E,MAAK,SAACzI,GAC1C,OAAOA,EAAQM,UAAUqE,KAAOiP,SASnCo4P,GACHr3Q,QAAQC,MAAM,8BAA+Bgf,GAGjD,OAAOo4P,GA5mBK,KAsuBdvrC,yBAA2B,SAAC9nN,GAC1B,IAAI20P,EAAuB,GACvBC,EAAkC,GAYhCryP,EAAc,EAAKkW,cAkCzB,OAjCAzY,EACGhV,QAAO,SAAAsV,GACN,OAAOA,EAAWq3G,SAAWr3G,EAAW24E,cAAch1F,MAAK,SAAA2c,GAAA,OAAgBA,EAAa+2G,cAEzFv1H,SAAQ,SAAAke,GACPA,EAAW24E,cACRjuF,QAAO,SAAA4V,GAEN,IADA,IAAMpM,EAAYoM,EAAapM,UAAUlU,cADnB,WAEb/H,GACP,IAEM08E,EAFa1yD,EAAYhqB,GACCkoB,WACN3Q,MAAK,SAAA63M,GAC7B,IAAM/nM,GAAU+nM,EAAYnoM,KAAKI,QAAU+nM,EAAYnoM,KAAKK,UAAUvf,cACtE,OAAOkU,IAAcoL,KAEvB,GAAIq1D,EAMF,OALiB,EAAKqnB,sBAAsBrnB,EAAM,GAAI,IAAI,GAAO,GACnDx8E,QAAWm8Q,EAAgC3wQ,MAAK,SAAAujN,GAAA,OAASA,EAAMhoM,KAAKlV,SAAW2qE,EAAKz1D,KAAKlV,WACrGsqQ,EAAgC77Q,KAAKk8E,GAGvC,IAAO,IAbF18E,EAAI,EAAGA,EAAIgqB,EAAY9pB,OAAQF,IAAK,SAApCA,GAAoC,mEAgB7C,OAAO,KAER6J,SAAQ,SAAAwe,GACHA,EAAa+kE,UAAY/kE,EAAa+kE,SAASltF,SACjDk8Q,0BAA2BA,IAA3B,aAAoD/zP,EAAa+kE,kBAI3E,EAAK6/B,gBAAgBmvJ,EAAsB,MAAM,GAC1CC,G,yEApxBmB,2BAAPtlK,EAAO,qBAAPA,EAAO,gBAC1B,IAAM5uF,EAAU4uF,EAAM,GACtB,GAA0C,YAArClyG,SAASC,SAASoC,gBAAgD,IAAduE,KAAKoL,MAAwC,uBAAxBsR,EAAQlB,KAAKlV,OACzF,OAAO,EAET,IAAKoW,IAAY1c,KAAK80B,aAA8B,IAAd90B,KAAKoL,MAAuC,SAAxBsR,EAAQlB,KAAKlV,QACzC,gBAAxBoW,EAAQlB,KAAKlV,OAGjB,OAAOtG,KAAKs4F,sBAAL,MAAAt4F,KAA8BsrG,GAAO72G,OAAS,EAEvD,IAAMysF,EAAW,EAAAplF,YACb,MACAwvG,EAAM,GAAK,KAAO,MAUtB,OATA,gBACEA,EAAM,GAAK,OAER5uF,EAAQlB,KAAKq1P,iBAChBn0P,EAAQlB,KAAKq1P,eAAiB,IAE3Bn0P,EAAQlB,KAAKq1P,eAAe7wQ,KAAKoL,QACpCsR,EAAQlB,KAAKq1P,eAAe7wQ,KAAKoL,MAAQ,IAEvCsR,EAAQlB,KAAKq1P,eAAe7wQ,KAAKoL,MAAM81E,GAAY,IAGlDxkE,EAAQlB,KAAK42E,qBACZ9pF,OAAOC,UAAUmU,EAAQlB,KAAKq1P,eAAe7wQ,KAAKoL,MAAM81E,KACxDxkE,EAAQlB,KAAKq1P,eAAeC,wBAC5Bp0P,EAAQlB,KAAKogB,6BAAuD,sBAAxBlf,EAAQlB,KAAKlV,UAE7DoW,EAAQlB,KAAKq1P,eAAe7wQ,KAAKoL,MAAM81E,GAAYlhF,KAAKs4F,sBAAL,MAAAt4F,KAA8BsrG,GAAO72G,QAEtFioB,EAAQlB,KAAK42E,sBAAwB11E,EAAQlB,KAAKq1P,eAAeC,uBAEnEp0P,EAAQlB,KAAKq1P,eAAeC,sBAAuB,GAE9Cp0P,EAAQlB,KAAKq1P,eAAe7wQ,KAAKoL,MAAM81E,GAAY,K,8CAuB1D,IAPAg8F,EAOA,uDAPa,KACbrnI,EAMA,uDANU,GACVouC,EAKA,uDALa,GACb7mE,EAIA,uDAJa,KACb05F,EAGA,+DAFA9gG,EAEA,uDAFe,GACfwuE,EACA,uDADa,GAEN8yH,EAA0C9yH,EAA1C8yH,oBAAqB7yH,EAAqBD,EAArBC,kBAE5B,GAAkB,MAAdy4F,EAAoB,CACtB,IAAI6zF,EAAc/wQ,KAAKgxQ,eAIvB,GAHKhxQ,KAAKoL,OACR2lQ,EAAcA,EAAY/pQ,QAAO,SAAA+/F,GAAA,MAAwC,WAAzBA,EAAYlrF,aAErB,OAArCziB,SAASC,SAASoC,gBAAgE,YAArCrC,SAASC,SAASoC,eAA8B,CAE/F,IAAMogC,EAAqB77B,KAAKuhF,+BAC3B1lD,EAAmB1hC,SAAS,OAC/B42Q,EAAcA,EAAY/pQ,QAAO,SAAA+/F,GAAA,MAAwC,iBAAzBA,EAAYlrF,aAGhE,OAAO,aAAQk1P,EAAa,CAAC,cAAcjpQ,KAAI,SAAAi/F,GAAA,OAAeA,EAAY2rH,oBAG5E,IAAMu+C,EAAajxQ,KAAK80B,YAAc1X,GAAc8/J,EAAW1hK,KAAK2K,cAAgB/I,EAE9E8zP,EAASh0F,EAAW1hK,KAAKkE,mBAC7Bm2B,EACAouC,EACAgtL,EACAj7P,EACAwuE,GAGIS,EAAWisL,EACdlqQ,QAAO,SAAA3D,GACN,SAAKA,IAAYA,EAAQmY,WAGpB,EAAKsZ,cAAgBm8O,GAAc5tQ,EAAQmY,KAAKK,WAC/CxY,EAAQmY,KAAKK,SAASgrF,WAAW,gBAAkBxjG,EAAQmY,KAAKK,SAASgrF,WAAW,kBAGnF,IAAAkK,wBAAuB1tG,EAAQmY,KAAMs7F,EAAyBwgG,OAGzE,OAAOxgG,GAA2BryB,EAC9BzkF,KAAKqwQ,oCAAoCprL,EAAUi4F,EAAW1hK,KAAMq6B,EAASouC,EAAYqzH,GACzFryH,EAASj+E,QAAO,SAAAiqE,GAAA,OAASA,EAAKz1D,KAAKooE,2BAA4B,IAAAgW,kBAAiB3oB,EAAKz1D,KAAM,mB,0CAG7E21P,GAClB,IAAMxvL,EAAW3hF,KAAKy0B,aAAY,GAC5B28O,EAAY,GAClB18Q,OAAOmc,KAAKsgQ,GAAUrpQ,KAAI,SAAAtQ,GACxB45Q,EAAU55Q,EAAI8E,eAAiB9E,KAGjCmqF,EAASvjF,SAAQ,SAAA2oG,GACf,GAAIA,EAAYxjG,WAAa,EAAAC,aAAa02B,OAAQ,CAChD,IAAMte,GAAUmrF,EAAYnrF,QAAUmrF,EAAYlrF,UAAUvf,cAC5DyqG,EAAY8Z,OAAUuwJ,EAAUx1P,IAAWu1P,EAASC,EAAUx1P,IAC1Du1P,EAASC,EAAUx1P,IAASilG,OAC5B,KACJ9Z,EAAYrtE,mBAAsB03O,EAAUx1P,IAAWu1P,EAASC,EAAUx1P,IACtEu1P,EAASC,EAAUx1P,IAAS8d,mBAC5B,KACJ,oBACEqtE,EAAY3U,qBAAsB,EAClC2U,EAAYuyE,sBAAuB,QAGrCvyE,EAAYhoF,aAAa3gB,SAAQ,SAACwuI,GAChC,IAAMhxH,GAAUgxH,EAAYhxH,QAAUgxH,EAAY/wH,UAAUvf,cACjC,uBAAvBswI,EAAYtmI,SACdsmI,EAAY/rB,OAAUuwJ,EAAUx1P,IAAWu1P,EAASC,EAAUx1P,IACxDu1P,EAASC,EAAUx1P,IAASilG,OAC5B,MAER+rB,EAAYlzG,mBAAsB03O,EAAUx1P,IAAWu1P,EAASC,EAAUx1P,IACtEu1P,EAASC,EAAUx1P,IAAS8d,mBAC5B,KACCkzG,EAAY/rB,QAAW+rB,EAAYtmI,OAAOnM,SAAS,UACtDnC,QAAQ4B,IAAI,wBAAyBgzI,GAEvC,oBACEA,EAAYx6C,qBAAsB,EAClCw6C,EAAY0sC,sBAAuB,W,mCAoChC+3F,GACX,OAAOrxQ,KAAKy0B,YAAY48O,GAAYrqQ,QAAO,SAAA+/F,GAAA,OAAeA,EAAYopC,qB,sEAGrD/kI,EAAMgpN,G,UAASC,E,uDAAe,KAAMjgM,E,uDAAQp0B,KAAKo0B,M,OAAOu+L,E,aAAUg9C,E,sIAC7E5sC,GAAY,EACZphJ,EAAW3hF,KAAKy0B,aAAY,GAC5B68O,EAAcl9C,GAAWp0N,KAAKoL,KAGpCipN,EAAeA,GAAgBr0N,KAAKuvG,2BAA0B,GAAM,GAAO,KAEvE,IAAA/5E,oBAAmBx1B,QAAU,EAAAy1B,gBAAgBC,IAAM,UAAO50B,4BAC5DuzN,EAAau7C,eAAiB,IAIhC5vQ,KAAKowQ,uBAAuBkB,GAAej9C,EAE3Cr0N,KAAKoL,KAAOA,EACZpL,KAAKo0B,MAAQk9O,IAAgBlmQ,EAAO,IAAMgpB,EAC1CigM,EAAajgM,MAAQp0B,KAAKo0B,MAC1BigM,EAAa3E,YAActkN,EAE3Bu2E,EAASvjF,SAAQ,SAAA2oG,GACfA,EAAY3gB,WAAW,MAGzBpmF,KAAKovI,4BAA4BilF,GAAc,GAAO,GAAM,EAAO0O,EAAW4sC,GAC9E3vQ,KAAKyzN,aAAazzN,KAAKy0B,eAClBk7O,KACH,aAAEx3Q,QAAQ+pG,QAAQ,UAAYszB,eAC9Bx1H,KAAK6yF,sBAEH8/H,GACFA,IAEF36N,QAAQ4B,IAAI,YAAaoG,M,kBAClB5J,QAAQC,W,oIAsCJsrF,GAAU,WACrBA,EAASvjF,SAAQ,SAAA2oG,GACfA,EAAY0sH,aAAa,EAAKroN,MAC9B27F,EAAYhoF,aAAa3gB,SAAQ,SAAAmzQ,GAAA,OAAMA,EAAG99C,aAAa,EAAKroN,c,oCAIhC,IAApBimQ,EAAoB,wDAC9B,OAAOA,GAAa,aAAOrxQ,KAAKwe,QAAS,aAAOxe,KAAKwe,OAAOxX,QAAO,SAAAwU,GACjE,MAAO,CAAC,gBAAiB,UAAW,QAAS,aAAc,eAAe3d,OAAM,SAAA2S,GAAA,OAAagL,EAAKK,WAAarL,U,2CAI9F7M,GAKnB,OAJAA,GAAY,IAAAsZ,wBAAuBtZ,GAC/BiE,MAAMC,QAAQlE,EAAUmP,SAAS+hB,cACnClxB,EAAY3D,KAAKwxQ,mBAAmB7tQ,IAE/BA,I,wCAYP,IAT+G,IAAjG8tQ,EAAiG,uDAApF,GAAIC,EAAgF,uDAA/D,KAA+D,OAAzDC,IAAyD,yDAAvBC,EAAuB,uDAAN,KAInG7+D,GAAkB,IAAA/e,qBAAoBy9E,GAEtCj9O,EAAex0B,KAAKy0B,aAAY,GAClCtW,EAAkB,GAPyF,WAStG5pB,GACP,IAAIoP,EAAYovM,EAAgBx+M,GAChC,IAAKoP,EACH,iBAEF,EAAAy9C,mCAAmChjD,SAAQ,SAAAxG,GACrCgQ,MAAMC,QAAQlE,EAAU/L,KAAc+L,EAAU/L,GAAUnD,QAC5DkP,EAAU/L,GAAUwG,SAAQ,SAAAugB,GACtBR,EAAgBle,MAAK,SAAAsf,GAAA,OAAcA,EAAWvX,KAAO2W,EAAe3W,OAGxEmW,EAAgBppB,KAAK4pB,SAK3B,EAAKqW,cAAcrxB,EAAW6wB,EAAck9O,IAhBrCn9Q,EAAI,EAAGA,EAAIw+M,EAAgBt+M,OAAQF,IAAK,EAAxCA,GAmBT,GAAI4pB,EAAgB1pB,OAClB,IAASF,EAAI,EAAGA,EAAI4pB,EAAgB1pB,OAAQF,IAC1CyL,KAAKg1B,cAAc7W,EAAgB5pB,GAAIigC,GAI3C,GAAyC,WAArCp7B,SAASC,SAASoC,gBAA+Bk2Q,EAA2B,CAC9E,IAAMpsH,EAAoBqsH,GAAoD,WAAlCA,EAAen2Q,gBAA+Bm2Q,EAAeliD,aAAe,GACxH1vN,KAAKi1B,2BAA2BswH,GAGlC,OAAO,I,yCAGU5hJ,GAUjB,OAAOA,I,oCAGKA,EAAW6wB,GAAqC,IAAvBk9O,EAAuB,uDAAN,KACtD,GAAK/tQ,KAAcA,EAAUkuQ,eAAkBz4Q,SAASC,SAAS2b,WAAjE,CAGA,IAAK,IAAIzgB,EAAI,EAAGA,EAAIyL,KAAK20B,cAAclgC,OAAQF,IAC7C,GAAIyL,KAAK20B,cAAcpgC,GAAGyT,KAAOrE,EAAUqE,GAGzC,YADA,IAAA8pQ,uBAAsBnuQ,EAAW3D,KAAK20B,cAAcpgC,GAAIyL,MAI5D2D,EAAY3D,KAAK+xQ,qBAAqBpuQ,GACtC,IAAIquQ,GAAS,EAKb,IAJIN,GAAyD,WAArCt4Q,SAASC,SAASoC,gBAA2D,UAA5Bi2Q,EAAe71P,UAClF61P,EAAe91P,SAAWjY,EAAU6M,WAAakhQ,EAAe71P,WAAalY,EAAU6M,YAC3FwhQ,EAASN,EAAethI,KAAKzsI,KAE1BquQ,EAAQ,CACX,IAAK,IAAIz9Q,EAAI,EAAGA,EAAIigC,EAAa//B,OAAQF,IAAK,CAC5C,IAAMwyG,EAAcvyE,EAAajgC,GAEjC,GADAy9Q,EAASjrK,EAAYqpC,KAAKzsI,GAExB,OAGCquQ,GAAUhyQ,KAAKwe,MAAL,OACbxe,KAAKwe,MAAL,MAAoB4xH,KAAKzsI,GAI7B3D,KAAK20B,cAAc5/B,KAAK4O,M,mDAG2B,IAA1B4hJ,EAA0B,uDAAN,KAE7CvlJ,KAAKy0B,cAAcr2B,SAAQ,SAAA2oG,GACzBA,EAAYkrK,kBAAmBlrK,EAAYkrK,iBAAiB1sH,Q,2CAI3C,WACnBvlJ,KAAKy0B,aAAY,GAAMr2B,SAAQ,SAAA2oG,GAC7BA,EAAY3gB,WAAW,Q,2CAQNnC,GACnB,IAAIhF,EAAc,GAQlB,OAPAj/E,KAAKy0B,cAAcr2B,SAAQ,SAAC2oG,GACXA,EAAYtqF,WAClBre,SAAQ,SAACse,GAChBuiE,0BAAkBA,IAAlB,aAAkCviE,EAAQlB,KAAKmmE,SAAS36E,QAAO,SAAA3D,GAAA,OAAWA,EAAQwY,UAAYxY,EAAQwY,SAASvf,cAAcnC,SAAS8pF,EAAW3nF,0BAI9I2iF,I,uCAQ+B,IAAzBizL,EAAyB,wDAClCjzL,EAAc,GAQlB,OAPAj/E,KAAKy0B,YAAYy9O,GAAiB9zQ,SAAQ,SAAC2oG,GAC1BA,EAAYtqF,WAClBre,SAAQ,SAACse,GAChBuiE,0BAAkBA,IAAlB,aAAkCviE,EAAQlB,KAAKmmE,iBAI5C1C,I,qCASM6xI,GAAmC,IAAzBohD,EAAyB,wDAC5C7uQ,EAAU,KAWd,OAVArD,KAAKy0B,YAAYy9O,GAAiB9zQ,SAAQ,SAAC2oG,GACpC1jG,GACY0jG,EAAYtqF,WAClBre,SAAQ,SAACse,GACXrZ,IACHA,EAAUqZ,EAAQlB,KAAK81F,eAAew/G,GAAU,UAKjDztN,I,sCAWO8uQ,GAAsF,IAA3EhlH,EAA2E,uDAAvD,GAAIilH,EAAmD,wDAA/BC,EAA+B,wDAC9FC,EAAeD,EAAwB,oBAAsB,MACnE,GAAIllH,EAAoB,CACtB,IAAMolH,EAAoBvyQ,KAAKk2B,wBAAwBi3H,GACvD,GAAIolH,EAAmB,CACrB,GAAIA,GAAqBA,EAAkBpsP,eAAiBosP,EAAkBpsP,cAAcxiB,UAAU2uQ,KAAkBH,EACtH,OAAOI,EAAkBpsP,cAK3B,IAHA,IAAMqsP,EAAaD,EAAkB7tL,6BACjC6tL,EAAkB7tL,6BAA6B,CAACD,kBAAmB2tL,IACnEG,EAAkB5wL,SACbptF,EAAI,EAAGA,EAAIi+Q,EAAW/9Q,OAAQF,IACrC,GAAIi+Q,EAAWj+Q,GAAGoP,UAAU2uQ,KAAkBH,EAC5C,OAAOK,EAAWj+Q,IAM1B,IADA,IAAMk+Q,EAAazyQ,KAAKy0B,cACflgC,EAAI,EAAGA,EAAIk+Q,EAAWh+Q,OAAQF,IAErC,IADA,IAAMkoB,EAAWg2P,EAAWl+Q,GAAGkoB,WADW,WAEjChnB,GACP,IAAMmnB,EAAeH,EAAShnB,GAAG+lB,KACjC,GAAIoB,EAAauJ,cAAe,CAC9B,GAAIvJ,EAAauJ,cAAcxiB,UAAU2uQ,KAAkBH,EACzD,SAAOv1P,EAAauJ,eAEtB,IACMusP,EADW/wL,GAAXA,qBAAe/kE,EAAa+kE,WAA5B,aAAyC/kE,EAAailE,gBAC3B76E,QAAO,SAAA3D,GAAA,OAAWA,EAAQM,UAAU2uQ,KAAkBH,KACvF,IAAKO,EAAgBj+Q,OACnB,iBAEF,GAAImoB,EAAauJ,cAAcrT,SAA3B,KAA6C,CAC/C,IAAM6/P,EAAWD,EAAgB5mQ,MAAK,SAAAzI,GACpC,OAAO,aAAQA,EAAQyP,SAAR,KAA0B8J,EAAauJ,cAAcrT,SAA3B,SAE3C,GAAI6/P,EACF,SAAOA,GAGX,SAAOD,EAAgB,IAEvB,IAAK,IAAIn+L,EAAI,EAAGA,EAAI33D,EAAa+kE,SAASltF,OAAQ8/E,IAChD,GAAI33D,EAAa+kE,SAASpN,GAAG5wE,UAAU2uQ,KAAkBH,EACvD,SAAOv1P,EAAa+kE,SAASpN,KAvB5B9+E,EAAI,EAAGA,EAAIgnB,EAAShoB,OAAQgB,IAAK,SAAjCA,GAAiC,yBASpC,SAToC,4EA6B5C,OAAO,O,+CAMgB,IAChB+R,EAAa,UAAMrF,WAAnBqF,UACP,OAAO9S,OAAO+2B,OAAO,GAAIjkB,EAAW,CAACqmB,YAAY,M,yDAGhBjX,GAAS,MACuD,UAAMzU,WAAhGC,EADmC,EACnCA,UAAW0S,EADwB,EACxBA,UAAW/G,EADa,EACbA,UAAW2Y,EADE,EACFA,wBAAyB/V,EADvB,EACuBA,YAAahL,EADpC,EACoCA,gBAE9EiR,EAAQxU,UAAY1N,OAAO+2B,OAAO,GAAIrpB,EAAW,CAC/CwwQ,oBAAqB,GACrBrwQ,WAAW,IAAAusP,wBAAuB1sP,EAAUG,WAC5CswQ,uBAAuB,IAAA/jB,wBAAuB1sP,EAAUywQ,yBAG1D,IAAMv+K,GAAS,IAAAL,WAAUvtE,EAAwBa,aAAcb,EAAwBU,WASvF,OARAxQ,EAAQ9B,UAAYA,EACpB8B,EAAQ5O,GAAK0e,EAAwBa,aACrC3Q,EAAQ09E,OAASA,EACjB19E,EAAQk8P,mBAAmB/kQ,GAAYA,EAAUq2G,kBAAkBuP,QACnE/8G,EAAQrH,wBAA0B5J,EAAgB+B,SAAS6H,wBACvDoB,EAAYwZ,iBACdvT,EAAQyT,kBAAmB,IAAA81F,8BAA6BxvG,EAAY0Z,mBAE/DzT,I,gDAQP,OAAO5W,KAAKmwG,mBAAkB,GAAMnpG,QAAO,SAAAmf,GAAA,OAAiBA,EAAc9f,aAAe8f,EAAc9f,YAAYwH,oB,qDAGtF+I,GAC7B,IAAMm8P,EAAkB/yQ,KAAKgzQ,sBAI7B,OAHID,EAAgBt+Q,SAClBmiB,EAAQg5P,eAAiBmD,GAEpBn8P,I,kDAQoF,IAAnE64P,EAAmE,wDAAjDwD,IAAiD,yDAA3BxuL,EAA2B,wDACvF7tE,EAAU,GACVm7M,EAAiB/xN,KAAKmwG,kBAAkB1rB,GAAmB,GAAO,GAwBtE,OAtBAstI,EAAe3zN,SAAQ,SAAC+nB,GACjBA,EAAc9f,cAGnBuQ,EAAQuP,EAAc7f,QAAUmpQ,EAC5BtpP,EAAc9f,YAAYs8E,yBAC1Bx8D,EAAc9f,YAAY1C,UAAUqE,OAG1C4O,EAAQnb,eAAiBuE,KAAKvE,eAC9Bmb,EAAQlb,YAActC,SAASC,SAASqC,YACxCkb,EAAQjb,eAAiBvC,SAASC,SAASsC,eAE3Cib,EAAU5W,KAAKkzQ,oCAAoCt8P,EAAS64P,EAAUhrL,IACtE7tE,EAAU5W,KAAKmzQ,+BAA+Bv8P,IACtCsvN,eAAiB,EAErB+sC,IACFr8P,EAAQq1G,cAAgBjsH,KAAKozQ,yBAC7Bx8P,EAAU5W,KAAKqzQ,mCAAmCz8P,IAG7CA,I,gDA8D6E,IAA9DrU,EAA8D,uDAAlD,GAAkD,OAA9C4sQ,EAA8C,uDAA7B,GAAImE,EAAyB,wDAI9EC,EAAkB,SAAClwQ,EAASstK,GAC5BttK,GAAWA,EAAQM,WAAagtK,GAAgBA,EAAatqK,aAAesqK,EAAatqK,YAAYzR,eAAe,gBACtHyO,EAAQM,UAAU4qP,iBAAkB,EACpClrP,EAAQM,UAAUjB,KAAOiuK,EAAatqK,YAAYmoP,WAClDnrP,EAAQM,UAAUm1G,eAAiB63D,EAAatqK,YAAYmoP,WAC5DnrP,EAAQM,UAAUnB,MAAQmuK,EAAatqK,YAAYooP,cAIvD,OAAOlsP,EACJuF,KAAI,SAAAuI,GAEH,IAAM6K,EAASo4P,GAAmBjjQ,EAAGvC,oBAAqB,IAAAqN,kBAAiB9K,EAAGvC,oBAAsB,EACpG,GAAIoN,EAAO4Z,YAAa,CACtB,IAAMxuB,GAAS,IAAA8oP,sBAAqB/+O,EAAG/J,QACnCD,EAAc6U,EAAOg0P,yBAAyB7+P,EAAG/J,OAAQ+J,EAAGhK,YAAa8oQ,GAC7EoE,EAAgBltQ,EAAagK,GAC7B,IAAI+a,EAAc12B,OAAO+2B,OAAO,GAAIpb,EAAI,CACtC/J,SACAkC,aAAc6H,EAAG7H,cAAgB,EACjCnC,YAAaA,IAWf,GATIgK,EAAG2jF,uBACL5oE,EAAY4oE,qBAAuB94E,EAAOg0P,yBAAyB7+P,EAAG2jF,qBAAqB1tF,OAAQ+J,EAAG2jF,qBAAsBm7K,IAE1H9+P,EAAGqb,iBACLN,EAAYM,eAAiBrb,EAAGqb,gBAE9BpjB,OAAOC,UAAU6iB,EAAYd,gBAC/Bc,EAAYd,cAAe,IAAA2pJ,oBAAmB7oJ,EAAYtd,mBAAoBsd,EAAYd,eAExFjkB,GAAeA,EAAY1C,UAC7B,OAAOynB,EAIX,IAAMgzJ,EAAcljK,EAAOuZ,aAAY,GACjCxd,EAAc5G,EAAGhK,YAAY4Q,aAAe5G,EAAG6G,YAAc7G,EAAGhK,YAAY1C,UAAY0M,EAAGhK,YAAY1C,UAAUqE,GAAK,MACvHiP,GACHjf,QAAQ4B,IAAI,mBAAoByW,GAElC,IAAMmjQ,EAAYnjQ,EAAGhK,YACrBgK,EAAGhK,YAAcgK,EAAGhK,aAAe,GACnCgK,EAAG/J,QAAS,IAAA8oP,sBAAqB/+O,EAAG/J,QACpC+J,EAAG7H,aAAe6H,EAAG7H,cAAgB,EACrC,IAAI4mQ,EAAe,KAuBnB,OAtBAhxF,EAAYhgL,SAAQ,SAAA2oG,IACdqoK,GAAiBroK,IAKnBqoK,EAFE/+P,EAAG/J,SAAW,EAAAmD,cAAcC,OAC9B0lQ,GAAe,IAAAn0P,sBAAqBC,IACRM,KAAO4zP,EAAa5zP,KAAO4zP,EAGxCroK,EAAYhoF,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAW+J,EAAG/J,YAE5D8oQ,EAAaztL,WAC/BtxE,EAAGhK,YAAc6U,EAAOuqH,qBAAqBxuH,EAAam4P,EAAcD,OAG5EoE,EAAgBljQ,EAAGhK,YAAa,CAACA,YAAamtQ,IAC1ClrQ,OAAOC,UAAU8H,EAAGia,gBACtBja,EAAGia,cAAe,IAAA2pJ,oBAAmB5jK,EAAGvC,mBAAoBuC,EAAGia,eAE5Dja,EAAGhK,aAAgBgK,EAAGhK,YAAY1C,WACrC3L,QAAQC,MAAM,0BAA2BoY,GAEpCA,KAERrJ,QAAO,SAAAqJ,GAAA,OAAMA,EAAGhK,aAAegK,EAAGhK,YAAY1C,e,4CAG7BiT,GACpB,OAAO5W,KAAKy0B,cAAcx0B,MAAK,SAAC8mG,GAC9B,IAAI0sK,GAAyB,EAC7B,GAA6B,IAAzB1sK,EAAYxjG,UAA2C,WAAzBwjG,EAAYlrF,SAAuB,CACnE,IAAMvV,EAASygG,EAAYzgG,OAC3B,GAAIsQ,EAAQhiB,eAAe0R,GAAS,CAClC,IAAMjD,EAAU0jG,EAAYuK,eAAe16F,EAAQtQ,IAC/CjD,IAAYA,EAAQM,UAAUgS,WAEhC89P,GAAyB,QAGxB,CACU1sK,EAAYhoF,aAClB3gB,SAAQ,SAACse,GAChB,IAAMpW,EAASoW,EAAQpW,OACvB,GAAIsQ,EAAQhiB,eAAe0R,GAAS,CAClC,IAAMjD,EAAUqZ,EAAQ40F,eAAe16F,EAAQtQ,IAC3CjD,IAAYA,EAAQM,UAAUgS,WAEhC89P,GAAyB,OAOjC,OAAOA,O,2CA2DU/2P,EAASE,EAAcN,GAA+B,IAAnBo3P,EAAmB,wDAQzE,GAPAh3P,EAAQlB,KAAKosK,eAAiBtrK,EAAW7lB,KACzCimB,EAAQlB,KAAKg+J,oBAAsB58J,EAAa2T,QAChD7T,EAAQlB,KAAKi+J,oBAAsB78J,EAAa+2G,QAChDj3G,EAAQlB,KAAKm4P,YAAc/2P,EAAa+2P,aAAe,EACvDj3P,EAAQlB,KAAKi+J,oBAAsB78J,EAAa+2G,QAChDj3G,EAAQlB,KAAKo4P,SAAWh3P,EAAag3P,SACrCl3P,EAAQm3P,YAAcj3P,EAAai3P,aAC9BH,IACHh3P,EAAQlB,KAAKuB,uBAAyBH,EAAatM,kBACnDoM,EAAQlB,KAAK2D,YAAcvC,EAAauC,YACxCzC,EAAQlB,KAAKwyK,kBAAoBpxK,EAAaoxK,kBAC9CtxK,EAAQlB,KAAKupG,eAAiBnoG,EAAamoG,eAAiB,EAAAqE,wBAA0BxsG,EAAamoG,eAAiB,GAC/G/kH,KAAKvE,iBAAmB,EAAAd,2BAA2BC,SACtD,GAA4B,uBAAxB8hB,EAAQlB,KAAKlV,OAAiC,CAChD,IAAMwtQ,EAAY9zQ,KAAKk2B,wBAAwB,QAC3C49O,IACFA,EAAU/2P,uBAAyBL,EAAQlB,KAAKuB,uBAChD+2P,EAAU30P,YAAczC,EAAQlB,KAAK2D,YACrC20P,EAAU9lF,kBAAoBtxK,EAAQlB,KAAKwyK,kBAC3C8lF,EAAU/uJ,eAAiBroG,EAAQlB,KAAKupG,qBAErC,GAA4B,yBAAxBroG,EAAQlB,KAAKlV,OAAmC,CACzD,IAAMwtQ,EAAY9zQ,KAAKk2B,wBAAwB,UAC3C49O,IACFA,EAAU/2P,uBAAyBL,EAAQlB,KAAKuB,uBAChD+2P,EAAU30P,YAAczC,EAAQlB,KAAK2D,YACrC20P,EAAU9lF,kBAAoBtxK,EAAQlB,KAAKwyK,kBAC3C8lF,EAAU/uJ,eAAiBroG,EAAQlB,KAAKupG,gBAMhD,IAAI8oE,EAAkB,CACpBkmF,aAAcz3P,EAAWtU,GACzB4/K,eAAgBtrK,EAAW7lB,KAC3B+iL,oBAAqB58J,EAAa2T,QAClCkpJ,oBAAqB78J,EAAa+2G,SAG/B+/I,IACH7lF,EAAgB9wK,uBAAyBH,EAAatM,kBACtDu9K,EAAgB1uK,YAAcvC,EAAauC,YAC3C0uK,EAAgBG,kBAAoBpxK,EAAaoxK,kBACjDH,EAAgB9oE,eAAiBnoG,EAAamoG,eAAiB,EAAAqE,wBAA0BxsG,EAAamoG,eAAiB,IAEpHroG,EAAQlB,KAAKqyK,kBAChBnxK,EAAQlB,KAAKqyK,gBAAkB,IAEjCnxK,EAAQlB,KAAKqyK,gBAAgBvxK,EAAW7lB,MAAQo3L,I,8CAQ1B7xK,GAAc,WAC9BuC,EAAcA,GAAdA,qBAAkBve,KAAKy0B,eAAvB,CAAsCz0B,KAAKwe,MAAL,QAExCw1P,GAAyB,IAAA53Q,yBAAwB4D,KAAKvE,gBA+H1D,GA9HAuE,KAAKo2M,iBAAmBp6L,EACrBlU,KAAI,SAAAwU,GA4BH,OA3BI1U,MAAMC,QAAQyU,EAAW24E,iBAC3B34E,EAAW24E,cAAgB34E,EAAW24E,cAAcntF,KAAI,SAAC8U,GAuBvD,OAtBI,EAAKkY,YACPlY,EAAai3P,YAAc,CACzBI,UAAU,EACVC,SAAS,EACTC,WAAW,EACXC,aAAa,GAELx3P,EAAai3P,cACvBj3P,EAAai3P,YAAc,CACzBI,SAAUr3P,EAAay3P,cACvBH,QAASt3P,EAAa03P,cACtBH,WAAW,EACXC,aAAa,IAGbx3P,EAAai3P,YAAYG,IAA2BpsQ,MAAMC,QAAQ+U,EAAa+kE,WAC7E/kE,EAAa+kE,SAASltF,OAAS,GAAKmoB,EAAa+kE,SAASltF,OAAS,KACnEmoB,EAAa+kE,SAAS1hF,MAAK,SAAA0D,GAAA,OAAa,IAAAi2F,kBAAiB,CAACj2F,aAAY,cAAe,GAAIqwQ,QAG7Fp3P,EAAai3P,YAAYG,IAA0B,GAE9Cp3P,MAGJN,KAERtV,QAAO,SAAAsV,GACN,OAAOA,EAAWq3G,SACb/rH,MAAMC,QAAQyU,EAAW24E,gBAAkB34E,EAAW24E,cAAch1F,MAAK,SAAC2c,GAC3E,OAAOA,EAAai3P,aAAej3P,EAAai3P,YAAYG,SAGjEtrQ,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE2N,QAAU1N,EAAE0N,MAAQ3N,EAAE2N,MAAQ1N,EAAE0N,OAAS,EAAI,EAAI,KAClExO,KAAI,SAACwU,GACJ,IAAIG,EAAW,GACfH,EAAW24E,cACRjuF,QAAO,SAAA4V,GAEN,MAA4B,UADHA,EAAapM,UAAUlU,iBAGjDoM,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE2N,QAAU1N,EAAE0N,MAAQ3N,EAAE2N,MAAQ1N,EAAE0N,OAAS,EAAI,EAAI,KAClElY,SAAQ,SAAAwe,GAcP,IAbA,IAAIF,EAAU,KACRu4C,EAAmBr4C,EAAapM,UAAUlU,cAYvC/H,EAAI,EAAGA,EAAIgqB,EAAY9pB,OAAQF,IAAK,CAC3C,IAEM08E,EAFa1yD,EAAYhqB,GACCwqB,aAAajX,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,MACjEpD,MAAK,SAAA63M,GAC7B,GAAyB,eAArB1uJ,GAA0E,YAArC77D,SAASC,SAASoC,eAA8B,CACvF,IAAMmgB,GAAU+nM,EAAYnoM,KAAKI,QAAU,IAAItf,cACzCi4Q,GAAW5wD,EAAYnoM,KAAKK,UAAY,IAAIvf,cAClD,OAAO24D,IAAqBr5C,GAAUq5C,IAAqBs/M,EACtD,GAAyB,WAArBt/M,GAAsE,WAArC77D,SAASC,SAASoC,eAC5D,MAAmC,mBAA5BkoN,EAAYnoM,KAAKlV,OAE1B,IAAMsV,GAAU+nM,EAAYnoM,KAAKI,QAAU+nM,EAAYnoM,KAAKK,UAAUvf,cAQtE,OAAO24D,IAAqBr5C,KAE9B,GAAIq1D,EAAM,CACRv0D,EAAUu0D,EACV,EAAKujM,qBAAqB93P,EAASE,EAAcN,GAAY,GAC7D,OAGCI,IACHA,EAAU,EAAKnB,wBAAwBqB,EAAapM,WACpD,EAAKgkQ,qBAAqB93P,EAASE,EAAcN,GAAY,IAE/DG,EAAS1nB,KAAK2nB,MAGlB,IAAMzX,EAAO,EAEPgrG,EAAkBxzF,EAASzV,QAAO,SAAA0V,GACtC,OAAOA,GAAWA,EAAQlB,KAAKi+J,sBACzB/8J,EAAQlB,KAAKg+J,sBAAyB98J,EAAQlB,KAAKg+J,qBAAuBpgL,SAASC,SAAS2b,YAC7F0H,EAAQm3P,aAAen3P,EAAQm3P,YAAYG,MAGlD,MAAO,CACLhsQ,GAAIsU,EAAWtU,GACfvR,KAAM6lB,EAAW7lB,KACjB6f,MAAOgG,EAAWhG,MAClB20J,WAAY3uJ,EAAW2uJ,WACvBh7D,kBACAwkK,UAAWxkK,EACX,eACE,OAAOjwG,KAAKy0Q,UAAUztQ,QAAO,SAAC0V,GAC5B,IAAM8nE,EAAcrsF,OAAO2B,SAASwb,KAAKnb,SAAS,eAAiB,CAACm9M,oBAAqBh7L,EAAW7lB,MAAQ,GAC5G,OAAOwO,EAAK8xG,kBAAkBr6F,EAAS,GAAI,GAAI,MAAM,EAAM,GAAI8nE,OAGnE,aAAakwL,GACX10Q,KAAKy0Q,UAAYC,OAItB1tQ,QAAO,SAAAsV,GAAA,OAAcA,EAAW2zF,gBAAgBx7G,UAE9CuL,KAAKo2M,iBAAiB3hN,SACzBuL,KAAKo2M,iBAAmB,MAGtBp2M,KAAKo2M,iBAEP,IAAK,IAAI7hN,EAAI,EAAGA,EAAIgqB,EAAY9pB,OAAQF,IAAK,CACxBgqB,EAAYhqB,GACCkoB,WACnBre,SAAQ,SAAAulN,GACnBA,EAAYnoM,KAAKskN,kBAAoB,EAAK1pB,iBAAiBn2M,MAAK,SAAAqc,GAC9D,OAAOA,EAAWG,SAASxc,MAAK,SAAA00Q,GAC9B,OAAOA,EAAyBn5P,KAAKlV,SAAWq9M,EAAYnoM,KAAKlV,gBAQ3E,UAAM2d,UAAS,IAAAwO,uBAAsBzyB,KAAKvE,mB,yCAwCzB6K,GAEjB,IADA,IAAM83K,EAAcp+K,KAAKy0B,aAAY,GAC5BlgC,EAAI,EAAGA,EAAI6pL,EAAY3pL,OAAQF,IAAK,CAC3C,IACM6lN,EADWh8B,EAAY7pL,GAAGkoB,WACD3Q,MAAK,SAAA4Q,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWA,KACvE,GAAI8zM,EACF,OAAOA,EAGX,OAAO,O,iKAOH,EAAAt+M,aAAgB1C,SAASC,SAASu7Q,kB,0CAC7B,G,cAEF3nQ,EAAoB,UAAM9K,WAAW+K,YAArCD,iB,UACc,IAAA48G,oBAAmB,UAAM72D,GAAW,G,OACzD,GADMl6C,E,QACD1f,SAASC,SAAS4b,MACrB,IACE9c,OAAO67G,aAAaC,QAAQj0G,KAAKkiO,gBAAiB/tH,KAAK2W,WAAL,gBAC7ChyG,EAAO7L,GAAkBhZ,KADoB,CAEhD6kB,SACA7L,uBAGF,MAAOb,GAAMpU,QAAQ4B,IAAI,yBAA0BwS,G,uJAIrBwK,GAA8B,IAArBu4P,EAAqB,uDAAJ,GAAI,EACpC,UAAMhtQ,WAAWwD,gBAAtCwyG,EADyD,EACzDA,QAASzwG,EADgD,EAChDA,SACZkP,EAAQxU,WAAawF,MAAMC,QAAQ+O,EAAQxU,UAAUG,aACvDqU,EAAQxU,UAAUG,UAAYvC,KAAK60Q,wBAAwBj+P,EAAQxU,UAAUG,UAAW4sQ,EAAgBznQ,EAASg7K,0BAC7G96K,MAAMC,QAAQ+O,EAAQxU,UAAUywQ,wBAA0Bj8P,EAAQxU,UAAUywQ,sBAAsBp+Q,SACpGmiB,EAAQxU,UAAUywQ,sBAAwB7yQ,KAAK60Q,wBAAwBj+P,EAAQxU,UAAUywQ,sBAAuB1D,EAAgBznQ,EAASg7K,0BACtI17K,QAAO,SAAAqJ,GAAA,OAAMA,EAAGhK,aAAegK,EAAGhK,YAAY1C,WAAa0M,EAAGhK,YAAY1C,UAAU2wM,iBAErF19L,EAAQxU,UAAUG,UAAU9N,QAC9B,UAAMwvB,UAAS,IAAAyJ,aAAY9W,EAAQxU,YAEjCwF,MAAMC,QAAQ+O,EAAQxU,UAAUioB,mBAAqBzT,EAAQxU,UAAUioB,iBAAiB51B,QAC1F,UAAMwvB,UAAS,IAAA+hH,gCAA+BpvH,EAAQxU,UAAUioB,qBAGhEzT,EAAQ9B,WAAe,EAAD,aAAiBqjG,IAAWvhG,EAAQ9B,UAAU/T,SAASwgC,OAC/E,UAAMtd,SAAS,CACb7Y,KAAMoV,EAAM2gD,mBACZtgD,QAASjK,EAAQ9B,YAGjB8B,EAAQq1G,eACV,UAAMhoG,SAAS,CACb7Y,KAAMoV,EAAMwN,cACZnN,QAASjK,EAAQq1G,gBAGjBr1G,EAAQkC,SACV,UAAMmL,UAAS,IAAA6tJ,WAAUl7J,EAAQkC,SACjC,UAAMmL,UAAS,IAAA4tJ,qBAAoBj7J,EAAQ3J,kBAAoB,KAE5D2J,EAAQk8P,mBAAoBl8P,EAAQxU,WAAcwU,EAAQxU,UAAUG,UAAUtC,MAAK,SAAAmG,GAAA,OAAYA,EAAS8yD,WAC3G,UAAMj1C,UAAS,IAAAkgG,yBAAwB,CACrCwP,SAAS,MAGkC,YAAzC,aAAO/8G,EAAQ0zG,wBAAuC51H,OAAOmc,KAAK+F,EAAQ0zG,uBAAuB71H,QAC7D,YAAnC,aAAOmiB,EAAQ4zG,kBAAiC91H,OAAOmc,KAAK+F,EAAQ4zG,iBAAiB/1H,SAC1F,UAAMwvB,UAAS,IAAAwgM,uBACb7tM,EAAQ0zG,sBACR1zG,EAAQ6zG,0BACR7zG,EAAQ8zG,qBACR9zG,EAAQ4zG,kBAGR5zG,EAAQ+zG,kBACV,UAAM1mG,UAAS,IAAAolN,qBAAoBzyN,EAAQ+zG,qB,wCAO7B,WAChB3qH,KAAKm1B,aAAc,EACnBn1B,KAAKoL,KAAOpL,KAAK80Q,YACjB,IAAMnzL,EAAW3hF,KAAKy0B,cAChB4/L,EAAe,UAAMlyN,WACpB8K,EAAoBonN,EAAannN,YAAjCD,iBACP00E,EAASvjF,SAAQ,SAAA2oG,GACXA,EAAYhoF,cAAgBgoF,EAAYhoF,aAAatqB,QACvDsyG,EAAYhoF,aAAa3gB,SAAQ,SAACse,GAChCA,EAAQyJ,cAAgB,KACxBzJ,EAAQgqE,oBAAqB,EAC7BhqE,EAAQ6pE,WAAWt5E,IAAoB,EACvCyP,EAAQomE,SAAWpmE,EAAQqmE,gBACvBn7E,MAAMC,QAAQ6U,EAAQoqE,qBAAuBpqE,EAAQoqE,mBAAmBryF,SAC1EioB,EAAQoqE,mBAAqBpqE,EAAQorE,4BAI3Cif,EAAY5gF,cAAgB,KAC5B4gF,EAAYrgB,oBAAqB,EAC5BqgB,EAAYxgB,aACfwgB,EAAYxgB,WAAa,IAE3BwgB,EAAYxgB,WAAWt5E,IAAoB,EAC3C85F,EAAY3gB,WAAW,MAEzBpmF,KAAKyzN,aAAa9xI,GAClB,IAAMv6D,EAAYitM,EAAa3tM,wBAAwBU,UACjD8pF,EAAmB9pF,GAAaA,EAAUtb,MAAK,SAAAuoF,GAAA,OAAUA,EAAO6c,oBAClEA,GACFlxG,KAAKovI,4BAA4Bl+B,GAEnClxG,KAAKm1B,aAAc,I,gCAQXo7G,GAAwC,WAApBwkI,EAAoB,wDAChD,IAAK/0Q,KAAKm1B,cAAgB4/O,EACxB,MAAO,GAGT,IAAMpzL,EAAW3hF,KAAKgxQ,cAAa,GAC/BhgM,EAAM,GAIV2Q,EAASvjF,SAAQ,SAAA2oG,GACf,IAAMkZ,EAASlZ,EAAY0H,UAAU,EAAM8hC,GAG3CxpC,EAAY4pC,UAAU,EAAK1pD,SAAS,EAAKvF,yBAErCu+B,GAAUA,EAAOxrH,SACnBu8E,EAAMA,EAAI7jB,OAAO8yD,OAIjBjgH,KAAKg1Q,kBACPhkM,EAAMhxE,KAAKg1Q,gBAAgBhkM,IAtBmB,IAyBzCjpD,EAAoB,UAAM5lB,WAAWukB,wBAArCqB,iBAEDktP,EAAQj1Q,KAAK80B,YAAc,OAAS,MAmB1C,OAjBAk8C,GAAM,aAAQA,EAAK,CAAC,UAAW,CAACikM,IAAQntQ,KAAI,SAAA++E,GAE1C,IAAIquL,EAAgB,CAClB9tL,OAAQP,EAAMO,OACd14B,MAAOm4B,EAAMsuL,QAAQtuL,EAAM2xH,YAC3B7mG,OAAQ9qB,EAAM8qB,QAAU,KACxBrrG,OAAQugF,EAAMvgF,QAAU,GACxBs6E,cAAeiG,EAAMjG,eAAiB,GACtC43H,WAAY3xH,EAAM2xH,YAAc,MAElC,GAAI,EAAK1jL,aAAe+xD,EAAMO,OAAS,IAAO,CAC5C,IAAMguL,GAAiB,IAAAnhP,oBAAmB,EAAKx4B,gBAC/Cy5Q,EAAcv8D,gBAAkBy8D,EAAe3vB,mBAAmB5+J,EAAO,EAAKnF,uBAAwB35D,GAExG,OAAOmtP,O,wCASOzwL,GAAqE,IAAlDmrB,EAAkD,wDAAtBC,EAAsB,wDACjFkiH,EAAiB,GACfsjD,EAAqB5wL,MAAwBzkF,KAAKgc,eAAgBhc,KAAKgc,aAAavnB,QAC1FuL,KAAKy0B,YAAY4gP,GAAoBj3Q,SAAQ,SAAC2oG,GAGf,IAAzBA,EAAYxjG,WACTwjG,EAAYjkB,UAAYikB,EAAYrgB,oBAAsBqgB,EAAY5gF,eACzE4rM,EAAeh9N,KAAK,CAClBkpB,eAAgB8oF,EAAYlrF,SAC5BvV,OAAQygG,EAAYzgG,OACpB6C,SAAU,EACV9C,YAAa0gG,EAAY5gF,cACzBvJ,aAAcmqF,IAKpB,IAAIuuK,EAAWvuK,EAAYhoF,aACrBu9F,EAAW,CAAC,iBACb73B,IACH6wL,EAAWA,EAAStuQ,QAAO,SAAAuuQ,GACzB,QAAyC,aAArCn8Q,SAASC,SAASoC,gBAAoD,gBAAnB85Q,EAAQjvQ,SAA4BivQ,EAAQ5zL,SAASltF,UAGpG6nH,EAASniH,SAASo7Q,EAAQjvQ,SAAWivQ,EAAQpvP,eAAiBovP,EAAQpvP,cAActK,WACtF05P,EAAQpvP,cAActK,SAAS1hB,SAAS,kBAGlDm7Q,EAASl3Q,SAAQ,SAACm3Q,GACZ3lK,GAAsB2lK,EAAQ95O,eAChC/mC,OAAOmc,KAAK0kQ,EAAQ95O,gBAAgBr9B,SAAQ,SAAAs9B,IACtC65O,EAAQ95O,eAAeC,IAAam0E,IACtCkiH,EAAeh9N,KAAK,CAClBkpB,eAAgB8oF,EAAYlrF,SAC5BvV,OAAQivQ,EAAQjvQ,OAChB6C,SAAU,EACV9C,YAAakvQ,EAAQ95O,eAAeC,IAAa,KACjD9e,aAAc24P,EACd30L,cAAellD,QAIZ65O,EAAQpvP,gBAAkB0pF,GAAiB0lK,EAAQzyL,UAC5DivI,EAAeh9N,KAAK,CAClBkpB,eAAgB8oF,EAAYlrF,SAC5BvV,OAAQivQ,EAAQjvQ,OAChB6C,SAAU,EACV9C,YAAakvQ,EAAQpvP,eAAiB,KACtCvJ,aAAc24P,UAMtB,IAAMv5P,EAAehc,KAAKgc,aAC1B,IAAKyoE,GAAqBzoE,GAAgBA,EAAavnB,OAAQ,CAC7D,IAAM+gR,EAAiB,GACvBzjD,EAAiBA,EAAe/qN,QAAO,SAAAmf,GACrC,OAAOnK,EAAa/b,MAAK,SAACqc,EAAYm5P,GAIpC,OAHKD,EAAeC,KAClBD,EAAeC,GAAmBn5P,EAAWG,UAExC+4P,EAAeC,GAAiBx1Q,MAAK,SAAAyc,GAC1C,OAAOA,EAAQlB,KAAKlV,SAAW6f,EAAc7f,gBAKrD,OAAOyrN,I,uCAIP,IAAM9yI,EAAcj/E,KAAKmwG,mBAAkB,GACrCulK,EAAiB,CAAC,aAAc,UAAW,QAAS,UAc1D,OAbuBz2L,EACpBj4E,QAAO,SAAAu+E,GACN,OAAOA,EAAcl/E,aAAeqvQ,EAAe73Q,OAAM,SAAA83Q,GAAA,OAAqBpwL,EAActnE,iBAAmB03P,QAEhH7tQ,KAAI,SAAAy9E,GACH,MAAO,CACLn2B,UAAWm2B,EAAcl/E,YAAY1C,UAAUqE,GAC/C4tQ,WAAYrwL,EAActnE,eAC1BzN,UAAW+0E,EAAcl/E,YAAY1C,UAAU6M,UAC/C+yE,YAAagC,EAAcl/E,YAAYmS,uB,kDAenB5B,GAAsG,IAA7Fi/P,EAA6F,wDAAhEpG,EAAgE,+DAA9CC,IAA8C,yDAAnB3sC,EAAmB,wDAChI,GAAInsN,EAAS,CAEX,IAAM84M,GAAe94M,EAAQ84M,aAC7BggD,EAAqBA,IAAuBhgD,GAA+B,IAAhBA,IAAuBA,KAAiB1vN,KAAKoL,QAGtGpL,KAAKoL,KAAOskN,GAId13N,QAAQ4B,IAAI,cAAegd,GAG3BA,EAAQg5P,eAAiBh5P,EAAQg5P,gBAAkB,GAEnD5vQ,KAAKy0B,cACFr2B,SAAQ,SAAC2oG,GACR,GAA6B,IAAzBA,EAAYxjG,SAAgB,CAC9B,IAAM+C,EAASygG,EAAYzgG,OACrBwvQ,EAAyB,EAAK1F,uBAAuB1gD,IACtD,EAAK0gD,uBAAuB1gD,GAAappN,IAC1CsQ,EAAQhiB,eAAe0R,IAAWwvQ,KAChCrG,GACF1oK,EAAY5gF,cAAgB4gF,EAAYwqH,qBAAqB36M,EAAQtQ,KAChEygG,EAAY5gF,eAAiB2vP,IAChC/uK,EAAY5gF,cAAgB4gF,EAAYwqH,qBAAqBukD,KAG/D/uK,EAAY5gF,cAAgB4gF,EAAYuK,eAAe16F,EAAQtQ,KAC1DygG,EAAY+oK,oBAEnB/oK,EAAYrgB,qBAAuBqgB,EAAY5gF,eAI7C4gF,EAAY5gF,eAAiB48M,IAAch8H,EAAY5gF,cAAcy9D,2BACvEmjB,EAAY5gF,cAAcxiB,UAAUgS,UAAW,GAE7CiB,EAAQg5P,eAAez1Q,SAASmM,KAClCygG,EAAYjkB,UAAW,OAEpB,CACcikB,EAAYypC,kBAClBpyI,SAAQ,SAACse,GACpB,IAAMpW,EAASoW,EAAQpW,OACnBupQ,EAAyB,KAK7B,GAJAnzP,EAAQg9J,wBAAwBz5K,MAAK,SAAAsjF,GAEnC,OADAssL,EAAyBnzP,EAAQ60M,qBAAqBhuI,MAGpD3sE,EAAQhiB,eAAe0R,IAAWupQ,EAAwB,CAI5D,GAHKj5P,EAAQg5P,eAAez1Q,SAASmM,KACnCoW,EAAQomE,UAAW,GAEjB2sL,EAAU,CACZ,IAAM9jI,EAAkBjvH,EAAQ60M,qBAAqB36M,EAAQtQ,IACzDqlI,EACFjvH,EAAQyJ,cAAgBwlH,EACfkkI,IACTnzP,EAAQyJ,cAAgB0pP,QAG1BnzP,EAAQyJ,cAAgBzJ,EAAQ40F,eAAe16F,EAAQtQ,KAAYygG,EAAY+oK,oBAE7EpzP,EAAQ+e,gBAAkB/e,EAAQyJ,eAEpCzxB,OAAOmc,KAAK6L,EAAQ+e,gBAAgBr9B,SAAQ,SAAAs9B,GAC1C,IAAMq0O,EAAiBzpQ,EAAS,IAAMo1B,EAClC9kB,EAAQm5P,KACVrzP,EAAQ+e,eAAeC,GAAY+zO,EAC/B/yP,EAAQokE,2BAA2BplD,GACnChf,EAAQ40F,eAAe16F,EAAQm5P,IAAiB,OAI1DrzP,EAAQgqE,qBAAuBhqE,EAAQyJ,cAOrCzJ,EAAQyJ,eAAiB48M,IAAcrmN,EAAQyJ,cAAcy9D,2BAC/DlnE,EAAQyJ,cAAcxiB,UAAUgS,UAAW,EACvC+G,EAAQg9J,yBACVh9J,EAAQg9J,wBAAwB3kL,KAAK2nB,EAAQyJ,cAActK,WAG3DjF,EAAQg5P,eAAez1Q,SAASmM,KAClCoW,EAAQomE,UAAW,UAMzB4sL,GACF1vQ,KAAKyzN,aAAazzN,KAAKy0B,eAGrBohP,GACF71Q,KAAKiwQ,oCAAoCr5P,GAG3C,IAAM6M,EAAczjB,KAAKs4F,wBACtBtxF,QAAO,SAAA+/F,GAAA,OAAeA,EAAYvrF,KAAK20H,mBACvCroI,KAAI,SAACi/F,GAAD,OAAiBA,EAAYvrF,KAAKK,YAEpC7b,KAAKu0B,cACR,UAAMtQ,SAAS,CACb7Y,KAAMoV,EAAMkD,sBACZ7C,QAAS,CAAC4C,oB,+BAUT7M,GAKP,OAJIA,EAAQg5P,iBACVh5P,EAAQg5P,eAAiBh5P,EAAQg5P,eAAe7xQ,MAAM,MAExD/F,QAAQ4B,IAAI,gCAAiCgd,GACtCA,I,0DAU2BA,GAAsD,IAA7C64P,EAA6C,wDAA3BhrL,EAA2B,wDAgCxF,OA/BA7tE,EAAQ84M,YAAc1vN,KAAKoL,KAC3BwL,EAAQwd,MAAQp0B,KAAKo0B,MACjBp0B,KAAK80B,cACPle,EAAQsvN,eAAiB,GAE3BlmO,KAAKy0B,YAAYgwD,GAAmBrmF,SAAQ,SAAC2oG,GACxBA,EAAYypC,kBAClBpyI,SAAQ,SAACse,GAChBA,EAAQ+e,gBACV/mC,OAAOmc,KAAK6L,EAAQ+e,gBAAgBr9B,SAAQ,SAAAs9B,GACtChf,EAAQ+e,eAAeC,KACzB9kB,EAAQ8F,EAAQpW,OAAS,IAAMo1B,GAAY+zO,EACvC/yP,EAAQ+e,eAAeC,GAAUjc,yBACjC/C,EAAQ+e,eAAeC,GAAU/3B,UAAUqE,OAKjD0U,EAAQoqE,oBAAsBpqE,EAAQoqE,mBAAmBryF,QAC3DioB,EAAQoqE,mBAAmB1oF,SAAQ,SAACiF,EAAS0yQ,GAC3Cn/P,EAAQ8F,EAAQpW,OAAS,SAAWyvQ,GAAgBtG,EAChDpsQ,EAAQoc,yBACRpc,EAAQM,UAAUqE,MAGH,eAAnB0U,EAAQpW,QAA2BoW,EAAQ6/L,8BAC7C3lM,EAAA,gBAA6B8F,EAAQ6/L,qCAKpC3lM,I,4CAIP,IAAMm8P,EAAkB,GAyBxB,OAxBA/yQ,KAAKy0B,cAAcr2B,SAAQ,SAAC2oG,GACG,IAAzBA,EAAYxjG,SACVwjG,EAAYjkB,WAC2B,aAArC1pF,SAASC,SAASoC,gBAAiCsrG,EAAYlrF,SACjEk3P,EAAgBh+Q,KAAKgyG,EAAYzgG,SAMrCygG,EAAYhoF,aAAa3gB,SAAQ,SAACse,GAC5BA,EAAQomE,SACViwL,EAAgBh+Q,KAAK2nB,EAAQpW,QACpBoW,EAAQ+e,gBACjB/mC,OAAOmc,KAAK6L,EAAQ+e,gBAAgBr9B,SAAQ,SAAAs9B,GACrChf,EAAQ+e,eAAeC,IAC1Bq3O,EAAgBh+Q,KAAK2nB,EAAQpW,OAAS,IAAMo1B,YAQjDq3O,I,8CAOezsQ,GACtB,IAAKA,EACH,OAAO,KAET,IAAIsW,EAAe,KAenB,OAdA5c,KAAKy0B,aAAY,GAAMr2B,SAAQ,SAAA2oG,GACzBnqF,GAGemqF,EAAYhoF,aAClB3gB,SAAQ,SAACwuI,GAChBhwH,GAGAtW,IAAWsmI,EAAYtmI,SACzBsW,EAAegwH,SAIdhwH,I,iDAOkBpM,GACzB,IAAKA,EACH,OAAO,KAET,IAAMwlQ,GAAoB,IAAAhuD,yBAAwBx3M,GAAa,IAAIlU,cAC/DsgB,EAAe,KAiBnB,OAhBA5c,KAAKy0B,aAAY,GAAMr2B,SAAQ,SAAA2oG,GACzBnqF,GAGJmqF,EAAYhoF,aAAa3gB,SAAQ,SAACwuI,GAChC,IAAMqpI,GAAsB,IAAAjuD,yBAAwBp7E,EAAYhxH,QAAUgxH,EAAY/wH,UAAY,IAAIvf,eAClG05Q,IAAsBC,GACE,WAAtBD,GAA0D,YAAxBC,GACZ,iBAAtBD,GAA+D,uBAAvBppI,EAAYhxH,QAA4D,iBAAzBgxH,EAAY/wH,UAC7E,eAAtBm6P,IAC0B,gBAAvBppI,EAAYhxH,QAAqD,eAAzBgxH,EAAY/wH,UAAuD,cAAzB+wH,EAAY/wH,aAErGe,EAAegwH,SAIdhwH,I,8CAQetW,GAA2B,IAAnB4vQ,EAAmB,wDACjD,QAAK,IAAA1gP,oBAAmBx1B,QAAU,EAAAy1B,gBAAgBC,IAAkB,gBAAXpvB,GAA2C,IAAdtG,KAAKoL,MAA4B,IAAdpL,KAAKoL,QAG1G8qQ,EACKl2Q,KAAKo2M,kBAAoBp2M,KAAKo2M,iBAAiBn2M,MAAK,SAAA0oL,GACzD,OAAOA,EAAM14E,iBAAmB04E,EAAM14E,gBAAgBhwG,MAAK,SAAAujN,GAAA,OAASA,EAAMhoM,MAAQgoM,EAAMhoM,KAAKlV,SAAWA,QAGrGtG,KAAKgc,cAAgBhc,KAAKgc,aAAa/b,MAAK,SAAA0oL,GACjD,OAAOA,EAAMlsK,UAAYksK,EAAMlsK,SAASxc,MAAK,SAAAujN,GAAA,OAASA,EAAMhoM,MAAQgoM,EAAMhoM,KAAKlV,SAAWA,W,iDAUnEA,GAA2D,IAAnD6vQ,EAAmD,uDAA9B,KAAMC,EAAwB,0DAEnB,UAAMj0Q,WAAWwO,YAA3EwZ,EAF6E,EAE7EA,eAAgBvZ,EAF6D,EAE7DA,iBAAkBE,EAF2C,EAE3CA,qBACzC,GAAIqZ,GAAkBvZ,EAAkB,CACtC,IAAM6Z,GAAc,IAAAG,mBAAkBha,EAAkBE,GAAsB,GAC9E,OAAO,IAAAijK,gCAA+BtpJ,EAAankB,GAGrD,IAAI+vQ,EAAkB,KAClBr6P,EAAehc,KAAKgc,aA0BxB,OAzBIA,IACEm6P,GAK0B,KAJ5Bn6P,EAAeA,EAAahV,QAAO,SAAAsV,GACjC,OAAOA,EAAW7lB,KAAK0mB,OAAO7gB,gBAAkB65Q,EAAmBh5P,OAAO7gB,kBAG3D7H,SACfunB,EAAehc,KAAKgc,cAGxBA,EAAa5d,SAAQ,SAAAke,GACnB,IAAK+5P,EAAiB,CACpB,IAAM55P,EAAWH,EAAWG,SACxB29L,UAEFA,EADEg8D,EACc35P,EAAS3Q,MAAK,SAAA4Q,GAAA,OAAWA,EAAQlB,KAAKlV,OAAOnM,SAASmM,MAEtDmW,EAAS3Q,MAAK,SAAA4Q,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWA,QAGjE+vQ,EAAkBj8D,QAKnBi8D,I,mCA7wBP,OAAOr2Q,KAAKo2M,oB,mCA8JKgb,EAASxgI,GAC1B,IAAM56E,EAAe,UAAM7T,WAAW4S,YAAYiB,aAClD,IAAKA,EAAavhB,OAChB,OAAO,KACT,IAAMwhB,GAAQ,aAAKD,EAAc,CAAChO,GAAIopN,IACtC,IAAKn7M,EACH,OAAO,KACT,IAAMqgQ,GAAW,aAAKrgQ,EAAME,OAAQ,CAACnO,GAAI4oF,IACzC,OAAO0lL,EAAWA,EAASp/Q,MAAMimB,OAAS,O,8CAQbi0M,EAASl7M,GACtC,IAAMF,EAAe,UAAM7T,WAAW4S,YAAYiB,aAClD,IAAKA,EAAavhB,OAChB,OAAO,KACT,IAAMwhB,GAAQ,aAAKD,EAAc,CAAChO,GAAIopN,IACtC,IAAKn7M,EACH,OAAO,KACT,IAAMqgQ,GAAW,aAAKrgQ,EAAME,OAAQ,CAACjf,MAAOgf,IAC5C,OAAOogQ,EAAWA,EAAStuQ,GAAK,S,eAjhCfmoQ,G,4GCrDrB,O,IACA,Q,IACA,MACA,Q,IACA,OACA,S,IACA,SACA,QACA,QACA,Q,uDAEMoG,E,WACJ,cAAc,qBACZv2Q,KAAKwqK,aAAL,UACAxqK,KAAK8gJ,WAAa,CAAErqJ,KAAM,oBAC1BuJ,KAAK+G,MAAQ,GACb/G,KAAKw2Q,cAAgB,IAAI,EAAJ,QACrBx2Q,KAAKy2Q,oBAAsB,IAAI,EAAJ,QAC3Bz2Q,KAAKs1K,kBAAoB,GACzBt1K,KAAK02Q,qBAAuB,CAC1BjwN,SAAU,IAGZzmD,KAAKm6D,oB,iEAIL,UAAaV,SAAS,UAAaC,OAAOmlC,YAAa7+F,KAAK22Q,aAAc32Q,KAAM,UAAa45D,WAAWyjC,SACxG,UAAa5jC,SAAS,UAAaC,OAAOslC,KAAMh/F,KAAK42Q,WAAY52Q,KAAM,UAAa45D,WAAWyjC,SAC/F,UAAa5jC,SAAS,UAAaC,OAAOqlC,UAAW/+F,KAAK62Q,WAAY72Q,KAAM,UAAa45D,WAAWyjC,SACpG,UAAa5jC,SAAS,UAAaC,OAAOM,OAAQh6D,KAAKi6D,OAAQj6D,KAAM,UAAa45D,WAAWyjC,W,6BAGxF15C,IACL,IAAAuzH,uCAAsCvzH,K,yCAItC,UAAaigD,YAAY5jG,Q,mCAGdooD,EAAUjyD,GACrB,UAAM8tB,UAAS,IAAAolF,sBAAqB,CAClCv4C,UAAU,EACV5a,MAAO,UAAUz7B,KAAKC,cAAc,CAAE1S,GAAI,sCAC1CmhQ,UAAW,CACT,CACEjzN,MAAO,uBACPnlB,SAAU,IAAIvf,UAEhB,CACE0kC,MAAO,sBACPnlB,SAAU,IAAIvf,UAEhB,CACE0kC,MAAO,sBACPnlB,SAAU,IAAIvf,WAGlBkqB,SAAU,CAAEoW,KAAMsW,EAAShuC,EAAGlV,IAAKkjD,EAAS/tC,MAE9CjhB,SAASytD,iBAAiB,QAAS7mD,KAAKw4P,oB,uCAIzBriQ,GACEA,EAAEugB,OAAOuqI,QAAQ,4BAChB9oJ,OAAOqmO,WACvB,UAAMv6M,UAAS,IAAAolF,sBAAqB,CAClCv4C,UAAU,EACV5a,MAAO,GACPizN,UAAW,GACXztO,SAAU,Q,iCAKL0sB,EAAUjyD,GACnBA,EAAE40F,iBACF,IAAM37B,EAAY+kD,KAAKC,MAAMj+G,EAAE2gR,aAAaC,QAAQ,cAC9CC,EAAkB7iK,KAAKC,MAAMj+G,EAAE2gR,aAAaC,QAAQ,oBACpDzwQ,EAAS6tG,KAAKC,MAAMj+G,EAAE2gR,aAAaC,QAAQ,WAEjD,GAAI,CAAC,EAAAxnO,cAAc0B,oBAAqB,EAAA1B,cAAcyB,oBAAqB,EAAAzB,cAAc2B,mBACvF,EAAA3B,cAAcsB,YAAa,EAAAtB,cAAcuB,eAAgB,EAAAvB,cAAcwB,cACvE52C,SAASmM,GAAS,CAElB,IAGIuwD,EAHE37C,GAAS,IAAAC,oBACT9X,EAAU6X,EAAOo2F,eAAeliD,GAAW,GAC3CuqL,EAAgBz+N,EAAOo2F,eAAe0lK,GAAiB,GAEvDC,GAAkB,IAAApiM,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GACrEw8C,EAAU72D,KAAKw2Q,cAAcngN,SAAShzD,EAASs2O,EAAes9B,GAEhD,UAAUj/M,aAAanB,GAC/BojG,iBAAiB0K,+B,iCAIhBv8G,EAAUjyD,GACnBA,EAAE40F,iBAEmB,UAAUz+B,sB,eAKpB,IAAIiqN,G,oMC3GnB,aAEa18F,qFACAE,2FACAC,uFACA/zD,0EAGmBe,EAAnBA,iBAAmB,CAC9BrwF,iEACAC,kEACAC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,a,qJC1BZ,QACA,Q,IACA,MACA,S,IACA,O,uDAEqBshN,E,YAEnB,WAAYp6J,GAAS,iGACbA,I,mFAGWjpC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,6FAM1E,IAAMiqO,EAAuBn5O,KAAKU,YAAYA,YAC9Cy4O,EAAqBC,oBACrBD,EAAqBE,aAAar5O,KAAKsG,U,kCAG7BqO,GAGV,IAFA,qGAAkBA,IAEd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAIA,IAAMm5O,EAAuBn5O,KAAKU,YAAYA,YACxCw2Q,EAAmB/9B,EAAqBrpG,WAEL33I,OAAO2B,SAASwb,KAAKnb,SAAS,iBACnEg/O,EAAqB/vJ,wBACJ,gBAAhBppF,KAAKsG,QAAiD,gBAArB4wQ,GAAwD,gBAAhBl3Q,KAAKsG,QAAiD,gBAArB4wQ,GAI7G,UAAMjzP,UAAS,IAAAiqI,0BAAwB,KAIzCluJ,KAAKu5O,8BACLv5O,KAAK4mF,qB,6CAKL,MAAO,CAAC,CACN1F,SAAU,aACVI,UAHiBthF,KAAKU,YAAYsmL,iB,gCAO5B9rK,GACR,GAAIlb,KAAKU,YAAYovI,YAAc9vI,KAAKsG,OAIxC,OAAItG,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,IALvB,yG,iCAtDeg+N,G,qJCNrB,Q,IACA,OACA,QACA,QACA,Q,uDAEqBi+B,E,YAEnB,WAAYr4L,IAAS,gGACbA,IADa,OAEnB,EAAKvuD,SAAU,EACf,EAAK48G,4BAA8B,KACnC,EAAK+nH,gBAAiB,EACtB,EAAK/zB,iBAAkB,EACvB,EAAKtzN,gBAAiB,EANH,E,mFASFgoC,EAASouC,GAE1B,OAD0BI,EAApBA,+GAAkDrkF,KAAKy3P,qBAAqB5hN,GAAUouC,GACnEn8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,2CAGvD2mC,GACnB,IAAM2qC,EAAaxgF,KAAKygF,uBAElByD,GAA4BA,EAA5BA,oHAA+DruC,GACrE,+IAA4D2qC,EAAY0D,K,gCAGhEhpE,GAER,IAAM8sE,EAAS9sE,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC7B0kI,EAAa1sI,KAAKU,YAClB8/E,EAAaxgF,KAAKygF,uBAExB,GAAIzgF,KAAKmmB,cAAe,CACtB,GAAInmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,oBACtD,mGAAgB9rE,QACX,GAAI8sE,EAAOovL,aAAc,CAC9B,GAAsB,sBAAlBp3Q,KAAKq3Q,WAAqCrvL,EAAOqB,WAAWljE,cAActK,SAAS1hB,SAAS,YAE9F,YADA,qGAES6F,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACnFxgF,KAAKomF,WAAWlrE,QAERlb,KAAKmmB,cAAcw6D,gCAAgCH,IAC7DxgF,KAAKomF,WAAWlrE,GAElB,GAAsB,sBAAlBlb,KAAKq3Q,SAAkC,CAGzC,GAAyB,SAFJ3qI,EAAW0a,uBACMC,mBAGpC,YADA,qGAGGr/D,EAAOovL,cACVp3Q,KAAK8mG,oBAIX,GAAI9mG,KAAKmmG,cAAe,CACtB,IAAMC,EAAYlrF,EAAOqmE,+BACnB+1L,EAAoBt3Q,KAAKmmG,cAAcxiG,UAAUixB,WAAW30B,MAAK,SAAA6lG,GACrE,OAAOA,EAAQ5qF,SAAW,EAAA6c,mBAAmBC,KAAO8tE,EAAQ5qF,SAAWkrF,KAEpEpmG,KAAKmmG,cAAcxlB,gCAAgC3gF,KAAKu3Q,wBAA2BD,GACtFt3Q,KAAK8mG,oBAGT,mGAAgB5rF,K,iCAGPA,GACT,IAAMkrF,EAAYlrF,EAAOqmE,+BACnByG,EAAS9sE,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IACnC,IAAKggF,EAEH,OADAhwF,QAAQ4B,IAAI,uBACL,KAET,GAAIwsG,IAAc,EAAAruE,mBAAmBiuE,QAC9Bhe,EAAOovL,cAAkC,sBAAlBp3Q,KAAKq3Q,WAC3BrvL,EAAOqB,aAAerB,EAAOqB,WAAWljE,eACxC6hE,EAAOovL,eAAiBpvL,EAAOqB,WAAWljE,cAActK,SAAS1hB,SAAS,aAC9E,OAAO,KAGX,IAAMsuF,EAAmBzoF,KAAKy3P,uBAE9B,KAAK,EAAD,8GAA8BhvK,EAAkB,KAAM,MAAM,GAAO,CACrE,IAAI+uL,EAAgB,GACpB,OAAQpxK,GACN,KAAK,EAAAruE,mBAAmB2iE,MACtB88K,EAAgB,SAChB,MACF,KAAK,EAAAz/O,mBAAmBiuE,MACtBwxK,EAAgB,gCAGpB,IAAM5uL,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAO,IAAA8nF,WAAU9nF,EAAQM,UAAU4M,YAAainQ,MAE5C3uL,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAO,IAAA8nF,WAAU9nF,EAAQM,UAAU4M,YAAa,qBAElDvQ,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,EAC1B7oF,KAAK8mG,sB,gCAIC7f,GAER,IAAMe,EAASf,EAAS8S,OAClB2yC,EAAa1sI,KAAKU,YAExB,GAAIumF,GAA8B,sBAAlBjnF,KAAKq3Q,SAAkC,CAErD,GAAI3qI,EAAWxxH,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAAIovQ,aACrC,OAAO,EACF,GAAIp3Q,KAAKmmB,cAAe,CAC7B,IAAMsxP,EAAoB/qI,EAAW0a,uBAC/BC,GAAmB,IAAAt7D,yBAAwB0rL,EAAkBpwH,oBAC7DjgE,EAA8B,SAArBigE,EACXr/D,EAAO1xD,WAAWt2B,KAAKq3Q,SAAW,YAClCrvL,EAAO1xD,WAAWt2B,KAAKq3Q,UACrBK,EAAoC,SAArBrwH,EACjBr/D,EAAO1xD,WAAWt2B,KAAKq3Q,SAAW,kBAClCrvL,EAAO1xD,WAAWt2B,KAAKq3Q,SAAW,UACtCr3Q,KAAKmmB,cAAc0gE,MAAMO,OAASA,EAC9BpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAErCpnF,KAAKmmG,gBACPnmG,KAAKmmG,cAActf,MAAMO,OAASswL,SAIlCzwL,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASY,EAAO1xD,WAAWt2B,KAAKq3Q,WAEvDpwL,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASY,EAAO1xD,WAAWt2B,KAAKq3Q,WAE5DpwL,GAAYjnF,KAAKmmG,gBACnBnmG,KAAKmmG,cAActf,MAAMO,OAASY,EAAO1xD,WAAWt2B,KAAKq3Q,SAAW,a,wCAKxD1iQ,GACX3U,KAAKU,YAAYw0P,gBACpBl1P,KAAKymG,YAAY9xF,EAAc,e,kCAIvBA,EAAc6kG,GAAW,WAC7BjgH,EAASyG,KAAKU,YAIpB,GAHKnH,EAAOmH,YAAYygO,iBAAiC,cAAd3nH,IACzCjgH,EAAO27P,gBAAiB,GAER,YAAd17I,GAAyC,cAAdA,EAA2B,CACxD,IAAMkzB,EAAa1sI,KAAKU,YAAYA,YAC9Bi3Q,EAAkBjrI,EAAWupH,UAAYvpH,EAAWupH,SAASt0K,SAAS71E,MAAK,SAAAzI,GAC/E,OAAOA,EAAQwY,WAAa,EAAKA,YAE/B87P,GACFA,EAAgBlxK,YAAY9xF,EAAc,YAG9C,qGAAkBA,O,iCAnKDwiQ,G,+ECNrB,YACA,QACA,QAEI34O,EAAU,GACd9pC,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9BtlD,EAAQslD,GAAc,CACpB4kC,mBAAoB,KACpBC,qBAAsB,KACtBpxE,KAAM,KACNhG,WAAY,IACZ82E,OAAQ,KACR72E,KAAM,KACNyG,UAAW,KACXd,MAAO,KACPygO,MAAO,MACPxgO,KAAM,KACNqxE,OAAQ,KACRn3E,yBAA0B,KAC1Bs3E,sBAAuB,IACvBz3E,WAAY,KACZL,eAAgB,KAChBD,YAAa,KACbyD,WAAY,KACZujO,YAAa,KACbj9N,WAAY,KACZ0tE,UAAW,KACXC,WAAY,KACZhzF,cAAe,KACfuiP,cAAe,Q,UAoEJ,CACbt5O,UACAqnN,sBAjC4B,SAACluE,EAAe9wF,GAC5C,IAAM3rE,GAAS,IAAAC,oBACf,OAAQ0rE,EAAMvgF,QACZ,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,eACH,MAAO,CACLw/O,kBAAmB,2BAEvB,IAAK,qBACL,IAAK,uBACL,IAAK,qBACL,IAAK,2BACL,IAAK,yBACH,MAAO,CACLA,kBAAmB,wBAEvB,QACE,IAAMlpO,EAAe1B,EAAOgb,wBAAwB2wD,EAAMvgF,QAC1D,OAAKsW,EAGE,CACLrjB,OAAQqjB,EAAalc,YAAYmb,SACjCs+M,MAAOv9M,EAAaf,UAJb,KAab4pO,mBAnEyB,SAAC5+J,EAAO8wF,EAAe5vJ,GAChD,IACMw/O,GADmB,EAAA1tQ,kBAAoB,OAAS,KAChB,IAC/B83G,EAAU9qB,EAAV8qB,OAEP,IAAKA,EACH,OAAO,KAGT,IAGMomK,EAA+B,IAAfpmK,EAAOM,MAHV,EAIb+lK,EAA+B,IAAfrmK,EAAOO,MAJV,EAKb+lK,EAA+B,IAAftmK,EAAOS,MALV,EAMb8lK,EAA+B,IAAfvmK,EAAOU,MANV,EAOfj/B,EAAKm0L,GAAax/O,EAAiBpoB,MAAQo4Q,EAAgB,KAC3DzkM,EAAKi0L,GAAax/O,EAAiBpoB,MAAQq4Q,EAAgB,KAC3D3kM,EAAKk0L,GAAax/O,EAAiBloB,OAASo4Q,EAAgB,KAC5D1kM,EAAKg0L,GAAax/O,EAAiBloB,OAASq4Q,EAAgB,KAOhE,MAAO,CACLr/D,aAAc,CAAC,CAACzlI,EAAIC,GAAK,CAACC,EAAID,GAAK,CAACC,EAAIC,GAAK,CAACH,EAAIG,IAClD5zE,MAAQ2zE,EAAKF,EACbvzE,OAAQ0zE,EAAKF,M,qJC9DjB,QACA,Q,IACA,MACA,SACA,S,uDAEqB6lK,E,YAEnB,WAAYp6J,GAAS,iGACbA,I,uIAMN,IAAMq6J,EAAuBn5O,KAAKU,YAAYA,YAC9Cy4O,EAAqBC,oBACrBD,EAAqBE,aAAar5O,KAAKsG,U,kCAG7BqO,EAAc6kG,GAA8B,IAAnB2+J,EAAmB,uDAAN,KAGhD,IAFA,qGAAkBxjQ,IAEd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAIA,IAAMm5O,EAAuBn5O,KAAKU,YAAYA,YACxCw2Q,EAAmB/9B,EAAqBrpG,UAExCsoI,GAAmCjgR,OAAO2B,SAASwb,KAAKnb,SAAS,iBACnEg/O,EAAqB/vJ,wBACJ,gBAAhBppF,KAAKsG,QAAiD,gBAArB4wQ,GAAwD,gBAAhBl3Q,KAAKsG,QAAiD,gBAArB4wQ,IAG3GkB,GAAqCD,GAAcA,EAAWE,mBAKlEr4Q,KAAKu5O,8BACLv5O,KAAK4mF,kBALH,UAAM3iE,UAAS,IAAAiqI,0BAAwB,O,6CASzC,IAAI1tE,GAAaA,EAAbA,6GAEEkwD,EADS1wI,KAAKU,YAAYwa,OACJsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAOhC,OANIt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,I,gCAGCtlE,GACR,GAAIlb,KAAKU,YAAYovI,YAAc9vI,KAAKsG,OAIxC,OAAItG,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,IALvB,yG,iCAtDeg+N,G,+ECNrB,aACA,QACA,QAEI16M,EAAU,GACd9pC,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9BtlD,EAAQslD,GAAc,CACpB4kC,mBAAoB,KACpBovJ,cAAe,Q,UA0CJ,CACbt5O,UACAqnN,sBAd4B,SAACh/J,GAC7B,IACMjqE,GADS,IAAAzB,oBACa+a,wBAAwB2wD,EAAMvgF,QAC1D,OAAIsW,EACK,CACLrjB,OAAQqjB,EAAalc,YAAYmb,SACjCs+M,MAAOv9M,EAAaf,UAGjB,IAMP4pO,mBAzCyB,SAAC5+J,EAAO8wF,EAAe5vJ,GAChD,IACMw/O,GADmB,EAAA1tQ,kBAAoB,OAAS,KAChB,IAC/B83G,EAAU9qB,EAAV8qB,OAEP,IAAKA,EACH,OAAO,KAGT,IAEMomK,EAA+B,IAAfpmK,EAAOM,MAFV,EAGb+lK,EAA+B,IAAfrmK,EAAOO,MAHV,EAIb+lK,EAA+B,IAAftmK,EAAOS,MAJV,EAKb8lK,EAA+B,IAAfvmK,EAAOU,MALV,EAMfj/B,EAAKm0L,GAAax/O,EAAiBpoB,MAAQo4Q,EAAgB,KAC3DzkM,EAAKi0L,GAAax/O,EAAiBpoB,MAAQq4Q,EAAgB,KAC3D3kM,EAAKk0L,GAAax/O,EAAiBloB,OAASo4Q,EAAgB,KAC5D1kM,EAAKg0L,GAAax/O,EAAiBloB,OAASq4Q,EAAgB,KAChE,MAAO,CACLr/D,aAAc,CAAC,CAACzlI,EAAIC,GAAK,CAACC,EAAID,GAAK,CAACC,EAAIC,GAAK,CAACH,EAAIG,IAClD5zE,MAAQ2zE,EAAKF,EACbvzE,OAAQ0zE,EAAKF,M,gLC2HF,WAAwC,IAA9BtsE,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAErD,OAAQA,EAAOt1B,MAEb,KAAKoV,EAAM+N,oBAAqB,MACgE+pP,EAAwB53O,EAAO7f,SAAtHnZ,EADuB,EACvBA,SAAU6wQ,EADa,EACbA,gBAAiBC,EADJ,EACIA,iBAAkBC,EADtB,EACsBA,kBAAmBC,EADzC,EACyCA,oBACvEt/Q,SAASC,SAASo4F,eAAiB/pF,EAAS+pF,eACxCr4F,SAASC,SAAS2b,WAAa5b,SAASC,SAASo4F,iBACnDr4F,SAASC,SAASo4F,iBAAmB/pF,EAAS0pB,UAAY1pB,EAASs/H,cAErE,IAAM2xI,EAAgBC,EAAiBlxQ,EAAUX,EAAMW,SAAUg5B,EAAO7f,SAClEg4P,EAAkBD,EAAiBL,EAAiBxxQ,EAAMW,SAAUg5B,EAAO7f,SAC3Ei4P,EAAkBF,EAAiBJ,EAAkBzxQ,EAAMW,SAAUg5B,EAAO7f,SAC5Ek4P,EAAkBH,EAAiBH,EAAmB1xQ,EAAMW,SAAUg5B,EAAO7f,SAC7Em4P,EAAkBJ,EAAiBF,EAAqB3xQ,EAAMW,SAAUg5B,EAAO7f,SAKrF,OAHA7oB,QAAQ4B,IAAI,kBAAmB++Q,GAGxBjkR,OAAO+2B,OAAO,GAAI1kB,GAAlB,cACLkyQ,UAAU,GACPv4O,EAAO7f,QAFL,CAGLmpI,KAAMtpH,EAAO7f,QAAQmpI,KAAOtpH,EAAO7f,QAAQmpI,KAAK7sI,OAAS,IACtD+7P,EAAmB95H,0BAJjB,CAKL13I,SAAUixQ,EACVJ,gBAAiBM,EACjBL,iBAAkBM,EAClBL,kBAAmBM,EACnBL,oBAAqBM,EACrB5lJ,yBAA0B1yF,EAAO7f,QAAQuyG,yBACzC+lJ,UAAWz4O,EAAO7f,QAAQs4P,UAC1BC,oBAAqB14O,EAAO7f,QAAQu4P,oBACpC1wC,gBAAiBhoM,EAAO7f,QAAQ6nN,gBAAkBv0H,KAAKC,MAAM1zE,EAAO7f,QAAQ6nN,iBAAmB,CAC7FC,8BAA+BuwC,EAAmBt6H,qBAAqB,gBAAiB,SACnFs6H,EAAmBr7H,iCAI9B,KAAKr9H,EAAMksD,6BACT,OAAOh4E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMiO,qBACT,OAAO/5B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BU,gBAAiBi5B,EAAO7f,QAAQpZ,iBAAmB,KAEvD,KAAK+Y,EAAM8lD,sBACT,OAAO5xE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BW,SAAUhT,OAAO+2B,OAAO,GAAI1kB,EAAMW,SAAU,CAC1CkF,YAAa8zB,EAAO7f,QAAQjU,cAE9B2rQ,gBAAiB7jR,OAAO+2B,OAAO,GAAI1kB,EAAMW,SAAU,CACjDkF,YAAa8zB,EAAO7f,QAAQjU,gBAIlC,KAAK4T,EAAMmO,2BACT,IAAM0qP,GAA0B,IAAAj9Q,2BAA4B,WACtDk9Q,EAAevyQ,EAAMsyQ,GAE3B,OAAO3kR,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BW,SAAUhT,OAAO+2B,OAAO,GAAI1kB,EAAMW,SAAU4xQ,KAGhD,KAAK94P,EAAMqO,yBACT,OAAOn6B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BkgI,2BAA4BlgI,EAAMkgI,4BAGtC,KAAKzmH,EAAMuO,kCACT,IAAMuqP,EAAe,CAAC/pQ,wBAAyBmxB,EAAO7f,QAAQtR,yBAC9D,OAAO7a,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BW,SAAUhT,OAAO+2B,OAAO,GAAI1kB,EAAMW,SAAU4xQ,KAKlD,OAAOvyQ,GA1OT,I,IAAA,QAEYyZ,E,EAAZ,OACA,QACA,QACA,QACY04P,E,EAAZ,O,4MAGA,IAIMlQ,GAAeA,EAAfA,YACJiQ,UAAU,EACVjgE,wBAAyB,GACzBtxM,SAAU,CACR4M,SAAU,MACVR,aAAc,IACdD,iBAAkB,OAClBjH,YAAa,KACb+Q,sBAAsB,EACtB47P,cAAc,EACdhqQ,yBAAyB,EACzBiqQ,oBAAoB,EACpBtoJ,2BAA2B,GAE7BqnJ,gBAAiB,GACjBC,iBAAkB,GAClB/wQ,gBAAiB,MACdyxQ,EAAmB95H,0BAjBlB,CAkBJlY,mBAAoBt/H,MAAMC,QAAQzO,SAASqgR,2BAA6BrgR,SAASqgR,yBAAyBx5Q,MAAK,SAAAy5Q,GAC7G,OAAsC,MAA/BA,EAAWC,iBAAwD,IAA5BD,EAAWE,gBAE3DxmJ,yBAA0B,GAC1B+lJ,WAAW,EACXC,oBAAqB,EACrB1wC,gBAAiB,KAGbmxC,EAA2B,SAACnyQ,GAWhC,MAVuB,CAAC,QAAS,cAAe,qBAAsB,mBAAoB,cACxF,mBAAoB,0BAA2B,qBAAsB,0BACrE,yBAA0B,mBAAoB,eAAgB,cAAe,UAAW,UAAW,kBACtFtJ,SAAQ,SAAAxG,GACjB8P,GAAYA,EAAS9P,KAAc8P,EAAS9P,EAAW,cAAgBwB,SAASC,SAAS2b,UAC3FtN,EAAS9P,IAAY,EACZ8P,IAAaA,EAAS9P,IAAa8P,EAAS9P,EAAW,cAAgBwB,SAASC,SAAS2b,YAClGtN,EAAS9P,IAAY,MAGlB8P,GAGIoyQ,EAA6BA,EAA7BA,2BAA6B,SAACj5P,GACzC,IAAMiyJ,GAAgB,aAAUjyJ,GAC5B23P,EAAmB1lG,EAAcprK,UAAY,GAC7C6wQ,EAAkBzlG,EAAcprK,UAAY,GAC5C+wQ,EAAoB3lG,EAAcprK,UAAY,GAC9CgxQ,EAAsB5lG,EAAcprK,UAAY,GAiBpD,OAhBI6wQ,EAAgBwB,iBAClBrlR,OAAOmc,KAAK0nQ,EAAgBwB,gBAAgB37Q,SAAQ,SAAC47Q,GAEnD,IADyB,CAAC,mBAAoB,gBACxB/5Q,MAAK,SAAAmrK,GAAA,OAAQ4uG,EAAO7/Q,SAASixK,MAAQ,CACzD,IAAM6uG,EAASD,EAAOj8Q,MAAM,WAAW,UAChCrJ,OAAO+2B,OAAO8sP,EAAgBwB,gBAA9B,gBAAgDE,EAAS1B,EAAgBwB,eAAeC,KAAWA,OAG9GzB,EAAgBwB,eAAe3oP,SAAWmnP,EAAgBwB,eAAe3oP,UAAYmnP,EAAgBwB,eAAeG,gBACpH3B,EAAkB7jR,OAAO+2B,OAAO,GAAIqnJ,EAAcprK,SAAU6wQ,EAAgBwB,iBACrDG,gBAChB3B,EAAgBwB,eACvBxB,EAAkBsB,EAAyBtB,WAE7CC,EAAmBqB,EAAyBrB,IACpBuB,eACjB,CACLryQ,SAAgD,YAArCtO,SAASC,SAASoC,gBAAqE,YAArCrC,SAASC,SAASoC,eAAgC88Q,EAAkBC,EACjID,kBACAC,mBACAC,oBACAC,wBAIEyB,EAAoB,CAAC,UAAW,oBAAqB,iBAAkB,eAAgB,gBAC3F,mBAAoB,iBAAkB,oBAAqB,WAAY,uBAAwB,wBAC/F,cAAe,sBAEJ7B,EAA0BA,EAA1BA,wBAA0B,SAACz3P,GACtC,sBAEE,OAAOi5P,EAA2Bj5P,GAEpC,IAAIu5P,EAAiB,CACnB1yQ,SAAU,GACV6wQ,gBAAiB,GACjBC,iBAAkB,GAClBC,kBAAmB,GACnBC,oBAAqB,IAEvB,IAAK73P,EAAQnZ,SAASmuM,aACpB,OAAOukE,EAET,IAAMtnG,GAAgB,aAAUjyJ,GAChCnsB,OAAOmc,KAAKiiK,EAAcprK,SAASmuM,cAAcz3M,SAAQ,SAAAgyG,GACvDgqK,EAAehqK,EAAU,YAAc17G,OAAO+2B,OAC5C,GACAouP,EAAyB/mG,EAAcprK,SAASmuM,aAAazlG,IAC7D,CACEh/E,SAAU0hJ,EAAcprK,SAASmuM,aAAazlG,GAASh/E,UAAW0hJ,EAAcprK,SAASmuM,aAAazlG,GAAS8pK,kBAE5GE,EAAehqK,EAAU,YAAY8pK,SAC5CC,EAAkB/7Q,SAAQ,SAAAxG,GAExBwiR,EAAehqK,EAAU,YAAYx4G,GAAYk7K,EAAcprK,SAAS9P,SAG5E,IAAMyhR,GAA0B,IAAAj9Q,2BAA4B,WAE5D,OADAg+Q,EAAe1yQ,SAAW0yQ,EAAef,GAClCe,GAGHxB,EAAmB,SAAClxQ,EAAU2yQ,EAAeC,GAE7C,EAAA1+Q,oBAAsBzD,OAAO2B,SAASC,KAAKI,SAAS,eACtDuN,EAAA,yBAAsC,EACtCA,EAAA,aAA0B,GAG5B,IAzHwB6yQ,EAyHlBjiQ,EAAgB4gQ,EAAmBliO,wBACnCl6B,EAAco8P,EAAmBz6H,sBACvC,OAAO/pJ,OAAO+2B,OAAO,GAAI4uP,GAAlB,gBACF3yQ,EADE,CAELk2B,YAAa,EAAAhiC,mBAAqB8L,EAAS8yQ,mBAAqB9yQ,EAASk2B,YACzEhxB,aA9HsB2tQ,EA8HQ7yQ,EAAS+yQ,YA7HvB,WAAVF,GAAsBA,IAAU,EAAAlqO,cAAcC,OAAU,EAAAD,cAAcC,OAAS,EAAAD,cAAcE,UA8HnGz8B,cAAc,IAAAR,iBAAgB5L,EAAS4M,SAAWgmQ,GAAsBA,EAAmB5yQ,SAAY4yQ,EAAmB5yQ,SAAWA,GACrImM,kBAAkB,IAAAJ,qBAAoB/L,EAAS4M,UAC/C7J,uBAAuB,EACvBq3N,eAAexpN,GAAwB5Q,EAASo6N,cAChD44C,oBAAoBpiQ,IAAiBwE,GAAsBpV,EAASgzQ,mBACpE/8P,sBAAsB,EACtB+kK,yBAA0B43F,EAAmBK,wBAA0BxiR,OAAO2B,SAASC,KAAKI,SAAS,cACrGygR,eAAgBlzQ,EAASkzQ,gBAAkB1B,EAAmB76H,mBAAqB66H,EAAmB96H,mBACtG/qD,yBAAwBinL,IAAsBA,EAAmB5yQ,WAAY4yQ,EAAmB5yQ,SAAS2rF,sBACzGwnL,uBAAsBP,IAAsBA,EAAmB5yQ,WAAY4yQ,EAAmB5yQ,SAASmzQ,oBACvGvnL,wBAAuBgnL,IAAsBA,EAAmB5yQ,WAAY4yQ,EAAmB5yQ,SAAS4rF,qBACxGwnL,sBAAqBR,IAAsBA,EAAmB5yQ,WAAY4yQ,EAAmB5yQ,SAASozQ,mBACtGz+M,iBAAgBi+M,IAAsBA,EAAmB5yQ,WAAY4yQ,EAAmB5yQ,SAAS20D,cACjGk9M,gBAAee,IAAsBA,EAAmB5yQ,WAAY4yQ,EAAmB5yQ,SAAS6xQ,aAChG/lQ,0BAAyB8mQ,IAAsBA,EAAmB5yQ,WAAY4yQ,EAAmB5yQ,SAAS8L,uBAC1GgmQ,qBAAoBc,GAAqBA,EAAmBd,mBAC5DtoJ,4BAA2BopJ,GAAqBA,EAAmBppJ,0BACnE3hH,yBAAyB,O,6KCxId,WAAsC,IAA7BxI,EAA6B,uDAArBiiQ,EAActoO,EAAO,aACnD,OAAQA,EAAOt1B,MACb,KAAKoV,EAAMmsD,0BACX,KAAKnsD,EAAMqsD,wBACX,KAAKrsD,EAAMssD,sBACX,KAAKtsD,EAAMwsD,6BACX,KAAKxsD,EAAMysD,sBACX,KAAKzsD,EAAMosD,kCACX,KAAKpsD,EAAMusD,0CACT,OAAOr4E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAGhB,OAAO9Z,GA9BT,IAAYyZ,E,wJAAZ,OAEyCu6P,EAA5BA,0BAA4B,CACvCC,MAAO,QACPn8N,OAAQ,UAFH,IAKDmqN,EAAe,CACnBnZ,qBAAqB,EACrBP,2BAA4B,GAC5BE,gBAAiB,KACjBlqB,gBAAiB,KACjBhB,sBAAuB,KACvBD,gBAAiB,EACjBsrB,wBAAwB,I,kICd1B,MACA,O,IACA,M,IACA,QACA,Q,IACA,OACA,Q,uDAEMsrB,G,gBASJ,WAAY3vK,IAAO,gGACXA,IADW,OAEjB,EAAK4vK,qBAAuB,GAFX,E,oFAKC,MAC4Cl7Q,KAAKsrG,MAA5D5uF,EADW,EACXA,QAASi2M,EADE,EACFA,SAAUwoD,EADR,EACQA,mBAAoBnlQ,EAD5B,EAC4BA,aAC1CmlQ,IAAuBn7Q,KAAKk7Q,qBAAqB/gR,SAASuiB,EAAQlB,KAAKlV,SAAW,EAAAo2F,iBAAiBviG,SAASuiB,EAAQlB,KAAKlV,UACvHoW,EAAQlB,KAAKm+J,kBACjB35K,KAAKk7Q,qBAAqBnmR,KAAK2nB,EAAQlB,KAAKlV,QAC5CtG,KAAKwzN,0BAA0B92M,EAAQlB,KAAMxF,GAC1C6b,MAAK,WACA8gM,GACFA,QAIR3yN,KAAK+yN,2BAA2Br2M,EAAS,GAAIi2M,K,+BAK7C,OADqB3yN,KAAKsrG,MAAnB8vK,WAEE,EAAAt/Q,YACH,wCACA,+BAAK8uF,UAAU,iFAInB,8BAAIA,UAAU,wCACZ,+BAAKA,UAAU,sF,gBArCds3D,UAAY,CACjBxlI,QAAS,UAAU/kB,OAAOshH,WAC1B05G,SAAU,UAAU5zC,KACpBq8F,WAAY,UAAUh5H,KACtB+4H,mBAAoB,UAAU/4H,M,cAgDnB,IAAAt2C,UATS,SAACxzG,GACvB,MAAO,CACLiK,UAAWjK,EAAM8J,UAAUG,UAC3ByT,aAAc1d,EAAMyc,YAAYiB,gBAIT,GAEZ,CAA6CilQ,I,oOC9D5D,OAEO,IAAMI,EAA2BA,EAA3BA,yBAA2B,CACtCv6F,aAAc,GACdw6F,gBAAiB,GACjBC,oBAAoB,EACpBC,mBAAoB,GACpBC,kBAAmB,GACnBC,sBAAuB,IAKnBC,GAAc,IAAA7mG,eAAc,IAEJ8mG,EAAjBA,eAAiB,WAC5B,OAAO,IAAAC,YAAWF,IAGaG,EAApBA,kBAAoB,SAACj7P,GAChC,MAAO,CACLzV,KAVe,sBAWfyV,YAI8Bk7P,EAArBA,mBAAqB,WAA8C,IAA7Ch1Q,EAA6C,uDAArCs0Q,EAA0B36O,EAAW,aAC9E,OAAQA,EAAOt1B,MACb,IAjBe,sBAkBb,uBAAWrE,EAAU25B,EAAO7f,SAC9B,QACE,OAAO9Z,I,UAIE40Q,G,oFCnCf,I,IAAA,MACA,O,IACA,M,IAEA,O,mDAGA,IAAMK,EAAS,SAAC1wK,GAAU,IAEjBtnG,EAA4BsnG,EAA5BtnG,YAAau4F,EAAe+O,EAAf/O,KAAMkP,EAASH,EAATG,MAE1B,OAAQlP,GACN,IAAK,YACH,OACE,+BAAK58F,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,8BACtE,6BAAGL,KAAMh1B,GAAS,UAAaznG,GAAa4nG,QAC1C,gCAAMp1G,EAAE,qcAAqcwR,GAAG,aAIxd,QACE,OAAO,OAIbg0Q,EAAO95H,UAAY,CACjB3lD,KAAM,UAAU/5D,OAAOy2E,WACvBxN,MAAO,UAAUjpE,Q,WAUJ,IAAAspE,UAPS,SAAAxzG,GAEtB,MAAO,CACL0L,YAFoB1L,EAAMgR,YAArBtF,eAMM,CAAyBg4Q,I,iRCnBxBC,yCAAT,WACL,OAAOzN,IAAqC,GAAK0N,IAAkC,GAAKC,IAAqC,G,EAI/G3N,mC,EAgBA0N,gC,EAaAE,+B,EAMAD,mC,EAmBA3O,kBAAT,WACL,IAAI/zL,EAAY,EACVtmC,EAAS,UAAiBi/F,sBAShC,OAPAj/F,EACGzqC,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEX,GAAKY,EAAEZ,MACxB5J,SAAQ,SAASw7C,GAChB6/B,GAAa7/B,EAAMslH,kBAIhB,CACLuvG,uBAA+C,aAAvB,UAAO7hQ,YAA6BxC,KAAKkI,MAAK,IAAAxF,kBAAiB2sE,KAAc,IAAA1sE,SAAQ0sE,GAC7GA,UAAWA,EACX20L,YAAaj7N,EAAO1+C,S,EAIR4nR,aAAT,WACL,IAAIC,EAAY,EAEVriO,EAAQ,UAAUwT,0BAA0B,EAAA9Q,0BAA0BnM,MAH/C,uBAK7B,YAAmByJ,EAAnB,+CAA0B,KAAfzJ,EAAe,QAClB8e,EAAa,UAAU4D,wBAAwB1iB,EAAKwe,cAC1DstN,IAAa,IAAAjoN,eAAc/E,IAPA,6EAUzB,UAAUvH,6BAAV,YACFu0N,GAAa,UAAUv0N,kBAAkBgsM,kBAG3C,MAA8B,aAAvB,UAAOnnP,YAA8BxC,KAAKkI,KAAKgqQ,GAAalyQ,KAAKyC,OAAOyvQ,GAAY,I,EAG7EC,uBAAT,WAKL,IAJA,IAAIC,EAAmB,EAGjBxiO,EAFQ,UAAM73C,WACkB+qD,kBAAkB1Q,eACXx1C,QAAO,SAAAimD,GAAA,OAA2BA,EAAwB7hD,OAAS,EAAAuxC,0BAA0BrI,cACjI//C,EAAI,EAAGA,EAAIylD,EAAavlD,OAAQF,IAAK,CAC5C,IAAMw6D,EAAO,UAAUmE,wBAAwBlZ,EAAazlD,GAAGy6D,cAC3DD,IACFytN,IAAoB,IAAAtoN,mBAAkBnF,EAAKoF,sBAAuBpF,IAYtE,OARgC,UAAiBujF,6BACzBl0I,SAAQ,SAASw7C,GACvC,GAAIA,EAAMslH,aAAc,CACtB,IAAMu9G,EAAY7iO,EAAMslH,eACxBs9G,GAA2C,aAAvB,UAAO5vQ,YAA6BxC,KAAKkI,MAAK,IAAAxF,kBAAiB2vQ,KAAc,IAAA1vQ,SAAQ0vQ,OAI/E,aAAvB,UAAO7vQ,YAA8BxC,KAAKyC,OAAO2vQ,GAAoBpyQ,KAAKyC,OAAO2vQ,GAAmB,I,EAwG7FE,iBAAT,WACL,IACI/sN,EADU,UAAMxtD,WACGwH,cAAckuD,kBACjCq/J,EAAwB,UAAgB5uB,2BAC5C,GAA0B,IAAtB34I,EAAWl7D,QAAiD,IAAjCyiO,EAAsBziO,OACnD,OAAO,EAET,IAAIglF,EAAY,wBAAI9pB,IAAJ,aAAmBunK,IAAuB51N,QAAO,SAACq7Q,EAAe/oO,GAC/E,IAAIgpO,EAAYhpO,EAAUkpH,UAG1B,OAFA6/G,GAAiBC,EAAUj9Q,MAAQi9Q,EAAU/8Q,SAG5C,GAEH,MAA8B,aAAvB,UAAO+M,YAA8BxC,KAAKyC,QAAO,IAAAC,kBAAiB2sE,IAAcrvE,KAAKyC,QAAO,IAAAqoD,OAAMukB,IAAa,I,EAGxG80L,yBAAT,WACL,IACM5+M,EADQ,UAAMxtD,WACKwH,cAAckuD,kBACjCq/J,EAAwB,UAAgB5uB,2BACxCu0E,EAA4BA,GAA5BA,qBAAgCltN,IAAhC,aAA+CunK,IAEjD4lD,EAAqB,GANgB,uBAOzC,IAPyC,IAOzC,EAPyC,iBAOhCllN,EAPgC,QAQnCmlN,EAAoBD,EAAmBhxQ,MAAK,SAAAkxQ,GAAA,OAC9CA,EAAS5tN,YAAcwI,EAAaxI,aAGtC,GAAI2tN,EAEF,OADAA,EAAkB9tN,kBAAoB8tN,EAAkB9tN,mBAAqB2I,EAAa3I,kBAC1F,WAGF,IAAIwqB,EAAYwjM,EAAoBrlN,EAAaxI,UAAWytN,GACxDK,EAAaC,EAAgBvlN,EAAaxI,UAAWytN,GAA2BpoR,OAEpFqoR,EAAmB/nR,KAAK,CACtBiT,GAAI4vD,EAAa5vD,GACjB1B,OAAQ,EAAAmD,cAAcC,MACtB+wJ,iBAAkB7iG,EAAa6iG,iBAC/BrrG,UAAWwI,EAAaxI,UACxB8tN,WAAYA,EACZzjM,UAAWA,EACXwxH,aAAcrzI,EAAaqzI,aAC3Bl6D,qBAAsBn5E,EAAam5E,qBACnC9hF,kBAAmB2I,EAAa3I,qBAtBpC,EAAyB4tN,EAAzB,+CAAoD,IAPX,6EAiCzC,OAAOC,G,EAGOG,sB,EAeAE,kBAhThB,I,IAAA,M,IACA,O,IACA,OACA,QASA,QACA,Q,IACA,Q,IACA,Q,IACA,O,mDAOO,SAAS3O,IACd,IAEI/0L,EAFU,UAAMt3E,WAEEirQ,2BAA2Bx0N,eAAet3C,QAAO,SAAC+kL,EAAK0jE,GAC3E,OAAKA,EAAIt1P,SAAWs1P,EAAIpqP,OAAS+R,MAAMq4O,EAAIt1P,SAAWid,MAAMq4O,EAAIpqP,OACvD0mL,EAGqB,aAAvB,UAAOz5K,YACVy5K,EAAMj8K,KAAKkI,MAAK,IAAAxF,kBAAiBi9O,EAAIt1P,OAASs1P,EAAIpqP,QAClD0mL,GAAM,IAAAt5K,SAAQg9O,EAAIt1P,OAASs1P,EAAIpqP,SAClC,GAEH,OAAOyK,KAAKyC,OAAO4sE,GAAY,GAG1B,SAASyiM,IACd,IACIziM,EADU,UAAMt3E,WACEirQ,2BAA2Bt0N,SAASx3C,QAAO,SAAC+kL,EAAK0jE,GACrE,OAAKA,EAAIt1P,SAAWs1P,EAAIlqP,QAAU6R,MAAMq4O,EAAIt1P,SAAWid,MAAMq4O,EAAIlqP,QACxDwmL,EAGFA,EAAM+1F,EAA6BryB,EAAI94O,gBAAiB84O,EAAIt1P,UAClE,GAEH,MAA8B,aAAvB,UAAOmY,YAA6BxC,KAAKyC,OAAO4sE,GAAarvE,KAAKyC,OAAO4sE,GAAY,GAGvF,SAAS2iM,EAA6BnrQ,EAAiBxc,GAC5D,MAAwD,SAAjDwc,EAAgBtN,UAAUgX,KAAKre,cAClC,EACuB,aAAvB,UAAOsQ,YAA6BxC,KAAKyC,QAAO,IAAA4qE,cAAahjF,IAAW2V,KAAKyC,QAAO,IAAAqoD,OAAMzgE,IAAU,GAGnG,SAAS0nR,IACd,IAAMp1Q,EAAQ,UAAM5E,WAEpB,OAAOi7Q,EAAUr2Q,EAAMqmQ,2BAA2Bv0N,gBAEpD,IAAMukO,EAAY,SAACrzB,GACjB,IAAItwK,EAAYswK,EAAIzoP,QAAO,SAAC+kL,EAAK0jE,GAC/B,OAAKA,EAAIt1P,SAAWs1P,EAAIlqP,QAAU6R,MAAMq4O,EAAIt1P,SAAWid,MAAMq4O,EAAIlqP,QACxDwmL,EAGqB,aAAvB,UAAOz5K,YACVy5K,EAAMj8K,KAAKkI,MAAK,IAAAxF,kBAAiBi9O,EAAIt1P,OAASs1P,EAAIlqP,SAClDwmL,GAAM,IAAAt5K,SAAQg9O,EAAIt1P,OAASs1P,EAAIlqP,UAClC,GAEH,OAAOuK,KAAKyC,OAAO4sE,GAAY,IA6D1B,IAAM4jM,EAA8BA,EAA9BA,4BAA8B,SAAC5oR,EAAQoL,GAClD,MAA8B,aAAvB,UAAO+M,YACVxC,KAAKkI,MAAK,IAAAxF,kBAAiBrY,EAASoL,KACpC,IAAAkN,SAAQtY,EAASoL,IA2DVy9Q,GAxDyCC,EAAzCA,uCAAyC,WACpD,IAAMx2Q,EAAQ,UAAM5E,WAChB63C,EAAe,GAoBnB,OAlBAjzC,EAAMqmQ,2BAA2Bv0N,eAAez6C,SAAQ,SAAC2rP,GACvD,GAAKA,EAAIt1P,QAAWs1P,EAAIlqP,SAAU6R,MAAMq4O,EAAIt1P,UAAWid,MAAMq4O,EAAIlqP,QAAjE,CAGA,IAAIg+C,EAAOw/N,EAA4BtzB,EAAIt1P,OAAQs1P,EAAIlqP,QACnD29Q,EAAapzQ,KAAKkI,MAAK,IAAAmlE,cAAasyK,EAAIt1P,SACxCgpR,GAAI,IAAAvoN,OAAM60L,EAAIt1P,QAClBulD,EAAajlD,KAAK,CAChBiT,GAAI+hP,EAAI/hP,GACR1B,OAAQ,eACR7R,OAAQopD,EACR+lE,WAAY/lE,EACZgW,WAAmC,aAAvB,UAAOjnD,YAA6B4wQ,EAAaC,EAC7DC,YAAa3zB,EAAIt1P,OACjBkpR,YAAa5zB,EAAIlqP,aAIdm6C,GAGsC4jO,EAAlCA,gCAAkC,WAC7C,IAAM72Q,EAAQ,UAAM5E,WAChB07Q,EAAgB,GAuBpB,OArBA92Q,EAAMqmQ,2BAA2Bt0N,SAAS16C,SAAQ,SAAC2rP,GAC5CA,EAAIt1P,QAAWs1P,EAAIlqP,SAAU6R,MAAMq4O,EAAIt1P,UAAWid,MAAMq4O,EAAIlqP,UAG5DkqP,EAAI94O,gBAIT4sQ,EAAc9oR,KAAK,CACjBiT,GAAI+hP,EAAI/hP,GACRonD,UAAW26L,EAAI94O,gBAAgBtN,UAAUqE,GACzC1B,OAAQ,QACR7R,OAAQ2nR,EAA6BryB,EAAI94O,gBAAiB84O,EAAIt1P,QAC9DkmB,KAAMovO,EAAI94O,gBAAgBtN,UAAUgX,KACpC+iQ,YAAa3zB,EAAIt1P,OACjBkpR,YAAa5zB,EAAIlqP,OACjBpJ,KAAMszP,EAAI3+O,KACVwpD,SAAU,IAZV58D,QAAQ4B,IAAI,oDAgBTikR,GAM8BP,EAA1BA,wBAA0B,WAKrC,OAJe,IAAAniQ,oBAGqB8a,2BAFjB,uDACI,eAY4By4O,EAAxCA,sCAAwC,WACnD,IAAM3nQ,EAAQ,UAAM5E,WAChBmsD,EAAc,GAelB,OAbAvnD,EAAMqmQ,2BAA2Bx0N,eAAex6C,SAAQ,SAAC2rP,GAClDA,EAAIt1P,QAAWs1P,EAAIpqP,QAAS+R,MAAMq4O,EAAIt1P,UAAWid,MAAMq4O,EAAIpqP,QAGhE2uD,EAAYv5D,KAAK,CACfiT,GAAI+hP,EAAI/hP,GACR1B,OAAQg3Q,IACRI,YAAa3zB,EAAIt1P,OACjBqpR,WAAY/zB,EAAIpqP,MAChBk+C,KAAMw/N,EAA4BtzB,EAAIt1P,OAAQs1P,EAAIpqP,YAI/C2uD,GA4DF,SAAS2uN,EAAoB7tN,EAAWyI,GAC7C,IAAI4hB,EAAY5hB,EACb7wD,QAAO,SAAA4jM,GAAA,OAAoBA,EAAiBx7I,YAAcA,KAC1D9tD,QAAO,SAACq7Q,EAAe/oO,GACtB,IAAMgpO,EAAYhpO,EAAUkpH,UAK5B,OAFA6/G,IAFqC,aAAvB,UAAO/vQ,YAA8BgwQ,EAAUj9Q,OAAQ,IAAA03E,YAAWulM,EAAUj9Q,SACpD,aAAvB,UAAOiN,YAA8BgwQ,EAAU/8Q,QAAS,IAAAw3E,YAAWulM,EAAU/8Q,WAI3F,GAEL,MAA8B,aAAvB,UAAO+M,YAA8BxC,KAAKyC,QAAO,IAAAC,kBAAiB2sE,IAAcrvE,KAAKyC,QAAO,IAAAE,SAAQ0sE,IAAa,GAGnH,SAAS0jM,EAAgB/tN,EAAWyI,GACzC,OAAOA,EAAkB7wD,QAAO,SAAA4jM,GAAA,OAAoBA,EAAiBx7I,YAAcA,O,6OCzQtE,WAAwC,IAA9BroD,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aACjDq9O,SACFC,SACAC,SACAC,SAEF,OAAQx9O,EAAOt1B,MACb,KAAKoV,EAAMwqD,+BACX,KAAKxqD,EAAMyqD,sBAIX,KAAKzqD,EAAM4qD,+BACT,OAAO12E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM0qD,2BAGT,OADAgzM,GADAD,EAAUl3Q,EAAM25B,EAAO7f,QAAQzV,MAAMrE,EAAM25B,EAAO7f,QAAQzV,MAAM3W,OAAS,IACnDwpR,EAAQj2Q,GAAK,EAC3B04B,EAAO7f,QAAQzV,MACrB,KAAK,EAAAutC,6BAA6BG,SAChCklO,mBAAaG,IAAb,CAA4Cn2Q,GAAIk2Q,EAAY,IAC5D,MACF,QACEF,mBAAaI,EAAb,CAAsCp2Q,GAAIk2Q,EAAY,IAG1D,uBACKn3Q,GADL,gBAEG25B,EAAO7f,QAAQzV,KAFlB,wBAE8BrE,EAAM25B,EAAO7f,QAAQzV,OAFnD,CAE0D4yQ,MAE5D,KAAKx9P,EAAM6qD,8BAGT,OAFA0yM,EAAeh3Q,EAAM25B,EAAO7f,QAAQzV,MAAMpE,QAAO,SAAC+iP,GAAD,OAASA,EAAI/hP,KAAO04B,EAAO7f,QAAQ7Y,MAE7EtT,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACJ25B,EAAO7f,QAAQzV,KAAO2yQ,IAE3B,KAAKv9P,EAAM2qD,8BACT,IAAMkzM,EAAUt3Q,EAAM25B,EAAO7f,QAAQzV,MAAMtD,KAAI,SAACmpE,GAC9C,OAAIA,EAAKjpE,KAAO04B,EAAO7f,QAAQkpO,IAAI/hP,GAE1BtT,OAAO+2B,OAAO,GAAIwlD,GAAlB,gBACFvwC,EAAO7f,QAAQmpO,kBAIf/4K,KAET,OAAOv8E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACJ25B,EAAO7f,QAAQzV,KAAOizQ,IAI3B,QACE,OAAOt3Q,IA9Fb,IAAYyZ,E,wJAAZ,OACA,Q,IACA,O,mDAEO,IAAM49P,EAA0BA,EAA1BA,wBAA0B,CACrCp2Q,GAAI,GACJvT,OAAQ,UAAWyuD,wBACnBrjD,OAAQ,UAAWqjD,wBACnBvjD,MAAO,UAAWujD,wBAClBjyC,gBAAiB,GACjBqtQ,iBAAiB,GAGNC,EAAsBA,EAAtBA,oBAAsB,WACjC,MAAkC,aAA3B,UAAW3xQ,YACd,UAAW03C,mBACX,UAAWC,kBAGJ45N,EAA8BA,EAA9BA,4BAA8B,kBAAMzpR,OAAO+2B,OAAO,GAAI2yP,EAAyB,CAAEv+Q,OAAQ0+Q,OAEzFpmG,EAA2BA,EAA3BA,yBAA2B,WAAM,MAC5C,4BACG,EAAAx/H,6BAA6BC,eAAiB,IAAIhxC,MAAM,GAAG64H,KAAK,MAC9D34H,KAAI,SAAC5Q,EAAO0W,GAAR,uBAAuBwwQ,EAAvB,CAAgDp2Q,GAAI4F,EAAQ,SAFrE,eAGG,EAAA+qC,6BAA6BG,SAAW,IAAIlxC,MAAM,GAAG64H,KAAK,MACxD34H,KAAI,SAAC5Q,EAAO0W,GAAR,uBAAwBuwQ,IAAxB,CAAuDn2Q,GAAI4F,EAAQ,SAJ5E,eAKG,EAAA+qC,6BAA6BE,eAAiB,IAAIjxC,MAAM,GAAG64H,KAAK,MAC9D34H,KAAI,SAAC5Q,EAAO0W,GAAR,uBAAwBwwQ,EAAxB,CAAiDp2Q,GAAI4F,EAAQ,QANtE,GAUIo7P,GAAeA,EAAfA,YACJtf,uBAAuB,EACvBE,iBAAkB,CAChBv9J,KAAM,CAACjyE,EAAE,EAAGC,EAAE,KAEb89J,M,uPCrCL,O,IACA,O,IACA,QACA,Q,IACA,Q,IACA,QACA,UACA,S,mDAEO,IAAMqmG,EAAgBA,EAAhBA,cAAgB,CAC3B3nO,UAAW,YACX4nO,iBAAkB,mBAClBC,iBAAkB,mBAClBC,iBAAkB,mBAElBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,uBAAwB,yBACxBC,sBAAuB,yBAkCZC,GA/BsBC,EAAtBA,oBAAsB,CACjCZ,EAAcC,iBACdD,EAAcE,iBACdF,EAAcG,kBAGmBU,EAAtBA,oBAAsB,CACjCb,EAAcI,iBACdJ,EAAcK,iBACdL,EAAcM,iBACdN,EAAcO,iBACdP,EAAcQ,iBACdR,EAAcS,uBACdT,EAAcU,uBAEqB/9G,EAAxBA,sBAAwB,CACnCq9G,EAAcQ,iBACdR,EAAcG,kBAGoBW,EAAvBA,qBAAuB,CAClCd,EAAcE,iBACdF,EAAcG,iBACdH,EAAcC,iBAEdD,EAAcI,iBACdJ,EAAcK,iBACdL,EAAcO,iBACdP,EAAcQ,kBAGuBG,EAA1BA,wBAA0B,CACrCrtO,KAAM,OACND,MAAO,U,UASP,aAAc,sCAuEdwkB,SAAW,SAAChzD,EAASs2O,GAAmC,IAApBj+M,EAAoB,uDAAT,KACvCswD,GAAa,IAAA0tJ,sBAAqBr2O,EAASs2O,GACjD,OAAIt2O,EAAQiD,SAAW,EAAAqxC,eAAe1G,oBAC7B,EAAKsuO,eACV,EAAKC,YAAa,SAAUn8Q,EAAQiD,OACpC,EAAKm5Q,eAAep8Q,EAASs2O,GAAgB3tJ,EAAYtwD,EAAUr4B,EAASs2O,GAErEt2O,EAAQiD,SAAW,EAAAqxC,eAAe3G,oBACpC,EAAKuuO,eACV,EAAKG,YAAa,SAAUr8Q,EAAQiD,OACpC,EAAKm5Q,eAAep8Q,EAASs2O,GAAgB3tJ,EAAYtwD,EAAUr4B,EAASs2O,GAGvE,EAAK4lC,eACV,EAAKI,YAAa,SAAUt8Q,EAAQiD,OACpC,EAAKm5Q,eAAep8Q,EAASs2O,GAAgB3tJ,EAAYtwD,EAAUr4B,EAASs2O,IAtFpE,KA2Fd4lC,eAAiB,SAACK,EAAYtpN,EAAWhwD,EAAQ86J,EAAap1E,EAAYtwD,EAAUr4B,EAASs2O,GAC3F,IAAMr9J,EAAa,EAAKujM,cAAcz+G,EAAap1E,GAC7Cx1B,GAAcA,EAAdA,YAAgB0/E,cAAc,EAAMmoB,SAAS,GAASryE,EAAtD,CAAkEo1E,gBAClEvqG,EAAU,UAAiBR,SAASimB,EAAYhmB,EAAW56B,EAAUp1B,EAAQ,KAAMkwD,GACnF5c,EAAQ,UAAUoe,aAAanB,GAOrC,OANA,UAAiBo7E,kBAAkBp7E,EAASxzD,EAAQM,UAAUqE,IAC9D,UAAiBkqI,+BAA+Br7E,EAAS8iL,EAAch2O,UAAUqE,IACjF4xC,EAAMmnH,wBAAwBnnH,EAAMknH,mBACpC8+G,EAAW7qR,KAAK8hE,GAChB7+D,QAAQ4B,IAAI,4BAA6ByJ,EAAQM,UAAUmF,mBAC3D9Q,QAAQ4B,IAAI,oBAAoB,IAAA6/O,2BAA0Bp2O,EAASs2O,IAC5D9iL,GAtGK,KAyGd4oN,eAAiB,SAACp8Q,EAASs2O,GACzB,IAAMC,GAAyB,IAAAH,2BAA0Bp2O,EAASs2O,GAC5DmmC,GAAe,IAAA/kC,iBAAgBnB,GACrC,GAAIkmC,EAAc,CAChB,IAAMC,EAAoBD,EAAanhR,QAAQ,MAAO,IACtD,GAAI,EAAKqhR,cAAcD,GACrB,OAAO,EAAKC,cAAcD,GANa,2BAW3C,YAAqBrrR,OAAOmc,KAAK2tQ,GAAjC,+CAAiD,KAAtCtjQ,EAAsC,QAC/C,GAAI,EAAKi4B,OAAOj4B,IAAW7X,EAAQM,WAAa,EAAKwvC,OAAOj4B,GAAQ/gB,SAASkJ,EAAQM,UAAUmF,oBAC5FzF,EAAQmY,MAAQ,EAAK23B,OAAOj4B,GAAQ/gB,SAASkJ,EAAQmY,KAAK7X,UAAUmF,mBACrE,OAAOoS,GAdgC,6EAkB3C,OAAOsjQ,EAAc3nO,WA3HT,KA8HdgpO,cAAgB,SAACz+G,EAAD,GAA2C,IAA3BzhK,EAA2B,EAA3BA,MAAew9J,GAAY,EAApBt9J,OAAoB,EAAZs9J,OAEzC8iH,EAAW9iH,EAAQ/yJ,KAAKynE,KAAK,GACjC,OAAQuvF,GACN,KAAKo9G,EAAcI,iBACjB,OAAO,IAAI,EAAJ,QAAY,EAAKsB,aAAa,CACnC,CAAE9lQ,EAAG,EAAGC,EAAG,GACX,CAAED,EAAGza,EAAO0a,EAAG,GACf,CAAED,EAAGza,EAAO0a,EAAG8iJ,GACf,CAAE/iJ,EAAG+iJ,EAAO9iJ,EAAG8iJ,GACf,CAAE/iJ,EAAG+iJ,EAAO9iJ,EAAG1a,GACf,CAAEya,EAAG,EAAGC,EAAG1a,MACT,GAAM,GACZ,KAAK6+Q,EAAcK,iBACjB,OAAO,IAAI,EAAJ,QAAY,EAAKqB,aAAa,CACnC,CAAE9lQ,EAAG,EAAGC,EAAG,GACX,CAAED,EAAGza,EAAO0a,EAAG,GACf,CAAED,EAAGza,EAAQ,EAAG0a,EAAG8iJ,EAAQ,GAC3B,CAAE/iJ,EAAG,EAAGC,EAAG8iJ,MACT,GAAM,GACZ,KAAKqhH,EAAcM,iBACnB,KAAKN,EAAcS,uBACjB,OAAO,IAAAkB,yBAAwBxgR,EAAOw9J,EAAOx9J,EAAOw/Q,EAAwBttO,OAC9E,KAAK2sO,EAAcU,sBACjB,OAAO,IAAAiB,yBAAwBxgR,EAAOw9J,EAAOx9J,EAAOw/Q,EAAwBrtO,MAC9E,KAAK0sO,EAAcO,iBACjB,OAAO,IAAI,EAAJ,QAAY,EAAKmB,aAAa,CACnC,CAAE9lQ,EAAG,EAAGC,EAAG,GACX,CAAED,EAAGza,EAAO0a,EAAG,GACf,CAAED,EAAGza,EAAO0a,EAAG8iJ,GACf,CAAE/iJ,EAAG+iJ,EAAO9iJ,EAAG1a,GACf,CAAEya,EAAG,EAAGC,EAAG1a,MACT,GAAM,GACZ,KAAK6+Q,EAAcQ,iBACjB,OAAO,IAAI,EAAJ,QAAY,EAAKkB,aAAa,CACnC,CAAE9lQ,EAAGza,EAAQw9J,EAAO9iJ,EAAG,GACvB,CAAED,EAAGza,EAAO0a,EAAG,GACf,CAAED,EAAGza,EAAO0a,EAAG8iJ,GACf,CAAE/iJ,EAAG+iJ,EAAO9iJ,EAAG8iJ,GACf,CAAE/iJ,EAAG+iJ,EAAO9iJ,EAAG1a,GACf,CAAEya,EAAG,EAAGC,EAAG1a,GACX,CAAEya,EAAG,EAAGC,EAAG1a,EAAQw9J,MACjB,GAAM,GAGZ,KAAKqhH,EAAcG,iBACjB,OAAO,IAAI,EAAJ,QAAY,EAAKuB,aAAa,CACnC,CAAE9lQ,EAAG6lQ,EAAU5lQ,EAAG,GAClB,CAAED,EAAGza,EAAO0a,EAAG,GACf,CAAED,EAAGza,EAAO0a,EAAG8iJ,GACf,CAAE/iJ,EAAG+iJ,EAAO9iJ,EAAG1a,GACf,CAAEya,EAAG,EAAGC,EAAG1a,GACX,CAAEya,EAAG,EAAGC,EAAG4lQ,MACT,GAAM,GACZ,KAAKzB,EAAcC,iBACjB,OAAO,IAAI,EAAJ,QAAY,EAAKyB,aAAa,CACnC,CAAE9lQ,EAAG,EAAGC,EAAG,GACX,CAAED,EAAGza,EAAO0a,EAAG,GACf,CAAED,EAAGza,EAAO0a,EAAG1a,EAAQw9J,GACvB,CAAE/iJ,EAAGza,EAAQw9J,EAAO9iJ,EAAG1a,GACvB,CAAEya,EAAG,EAAGC,EAAG1a,MACT,GAAM,GACZ,KAAK6+Q,EAAcE,iBACjB,OAAO,IAAI,EAAJ,QAAY,EAAKwB,aAAa,CACnC,CAAE9lQ,EAAG,EAAGC,EAAG,GACX,CAAED,EAAGza,EAAO0a,EAAG,GACf,CAAED,EAAGza,EAAO0a,EAAG8iJ,GACf,CAAE/iJ,EAAG+iJ,EAAO9iJ,EAAG8iJ,GACf,CAAE/iJ,EAAG+iJ,EAAO9iJ,EAAG1a,GACf,CAAEya,EAAG,EAAGC,EAAG1a,MACT,GAAM,GACZ,QACE,OAAO,IAAI,EAAJ,QAAcA,EAAOw9J,KAtMpB,KA0Md+iH,aAAe,SAACvuK,GAAD,OAAYA,GA1Mb,KA4MdyuK,iBAAmB,WACjB,EAAKZ,YAAc,IA7MP,KAgNdrxN,WAAa,SAACl6D,GAEZA,EAAKmK,SAAQ,SAAAiiR,GACX,IAAMzmO,EAAQ,UAAU6U,YAAY4xN,EAAqBC,iBACzD1mO,EAAMme,mBACN,IAAMhJ,EAAO,UAAU+D,YAAYutN,EAAqBtxN,KAAK/mD,IACvDu4Q,EAAsB,IAAI,EAAJ,QAAwBxxN,EAAMnV,EAAM5xC,IAChE,EAAKw4Q,oBAAoBD,OAvNf,KA2Nd73H,WAAa,WACX,OAAO,EAAK+3H,iBACTz5Q,QAAO,SAAAoxC,GAAA,OAAQ,UAAU4f,aAAa5f,EAAKsoO,mBAAmBp6Q,SAAW,EAAAipC,cAAckB,aACvF3oC,KAAI,SAAAswC,GAAA,MAAS,CACZkoO,gBAAiB,UAAUtoN,aAAa5f,EAAKsoO,mBAAmBzhH,SAChElwG,KAAM3W,EAAK2W,KAAKkwG,cAhOR,KAoOduhH,oBAAsB,SAACD,GACrB,EAAKE,iBAAiB1rR,KAAKwrR,IArOf,KAwOdI,0BAA4B,SAAC5xN,GAC3B,OAAO,EAAK0xN,iBAAiB30Q,MAAK,SAAA80Q,GAAA,OAAmBA,EAAgB7xN,KAAK/mD,KAAO+mD,EAAK/mD,OAzO1E,KA4OdoiK,6BAA+B,SAACr7G,GAC9B,EAAK0xN,iBAAmB,EAAKA,iBAAiBz5Q,QAAO,SAAA4yC,GACnD,OAAIA,EAAMmV,KAAK/mD,KAAO+mD,EAAK/mD,KACzB,UAAU0vD,gBAAgB9d,EAAM8mO,oBACzB,OAhPC,KAsPd9nN,oBAAsB,SAACioN,GACrB,EAAKJ,iBAAmB,EAAKA,iBAAiBz5Q,QAAO,SAAA45Q,GAAA,OAAmBA,EAAgBF,oBAAsBG,EAAc74Q,OAtP5HhI,KAAKw/Q,YAAc,GACnBx/Q,KAAK0/Q,YAAc,GACnB1/Q,KAAK2/Q,YAAc,GACnB3/Q,KAAKygR,iBAAmB,GACxBzgR,KAAKmzC,OAAS,CAMZsrO,iBAAkB,CAChB,aAAc,aAAc,aAC5B,6EACA,6EACA,WAAY,WAAY,YAO1BC,iBAAkB,CAChB,kEACA,6EACA,iEACA,iEACA,mEAOFE,iBAAkB,CAAC,iBAAkB,mDAMrCC,iBAAkB,CAAC,YAMnBC,iBAAkB,CAAC,YACnBG,uBAAwB,CAAC,YAMzBF,iBAAkB,IAEpB/+Q,KAAKggR,cAAgB,CACnBc,aAActC,EAAcI,iBAC5BmC,eAAgBvC,EAAcK,iBAC9BmC,eAAgBxC,EAAcK,iBAC9BoC,kBAAmBzC,EAAcM,iBACjCoC,iBAAkB1C,EAAcO,iBAChCoC,kBAAmB3C,EAAcQ,iBACjCC,uBAAwBT,EAAcS,uBACtCC,sBAAuBV,EAAcU,sBAErCkC,iBAAkB5C,EAAcG,iBAChC0C,kBAAmB7C,EAAcC,iBACjC6C,aAAc9C,EAAcE,oB,sJCrIlC,O,IACA,MACA,QACA,QACA,W,WACA,O,IAEA,O,IACA,S,IACA,O,IACA,O,uDAGqB6C,G,gBAgBnB,WAAYj2K,IAAO,gGACXA,IADW,SAyDnBk2K,qBAAuB,YACrB,aAAE,EAAKC,eAAeC,SAASC,SAAS,EAAK56Q,MAAMg/J,aACnD,aAAE,6BAA6BkzD,IAAI,WACnC,aAAE7/N,UAAU6/N,IAAI,UAAYhjG,iBAAkB,EAAK2rJ,qBACnD,aAAExoR,UAAU6/N,IAAI,UAAY/iG,cAAe,EAAK0rJ,qBAChD,aAAExoR,UAAU6/N,IAAI,QAAS,EAAK4oD,qBA9Db,EAiEnBC,UAAY,WACV,IAAMC,GAAU,aAAE,KAAO,EAAKz2K,MAAM02K,QAAU,EAAK12K,MAAM02K,QAAU,EAAK12K,MAAM32C,WAC5EstN,EAAgB,EAAK32K,MAAM02K,SAAU,aAAE,IAAM,EAAK12K,MAAM02K,SAAWD,EAAQj2Q,KAAK,sCAChFo2Q,EAAcH,EAAQ,GACtBI,GAAS,aAAE,IAAM,EAAKp7Q,MAAMq7Q,YAE9B,MAAO,CACLD,OAAQA,EACR1jM,MAHQ0jM,EAAO,GAIfJ,QAASA,EACTE,aAAcA,EACdC,YAAaA,IA5EE,EAgFnBG,gBAAkB,WAChB,GAAK,EAAKt7Q,MAAMu7Q,IAAhB,CAIA,IAAIC,EAAS,EAAKT,YACbS,GAAWA,EAAOL,kBAAsClvN,IAAvBuvN,EAAOL,cAM7C,aAAEK,EAAOL,aAAajpD,IAAI,SAASt2H,GAAG,QAAS,EAAKn1E,OACpD,aAAE+0P,EAAOL,aAAajpD,IAAI,SAASt2H,GAAG,SAAS,SAAUxsG,GACvDA,EAAE20F,kBACF30F,EAAE40F,qBARF/yF,QAAQ4B,IAAI,oCAvFG,EAmGnB4oR,cAAgB,SAACv9Q,EAAMw9Q,GACrB,GAAIA,EAASC,GAAG,YAAa,CAC3B,IACM9tM,EADS3vE,EAAK1L,SACEq7E,SACtB3vE,EAAK09Q,IAAI,CACPz9Q,IAAK0vE,EAAO1vE,IAAM,GAClB4sC,KAAM8iC,EAAO9iC,KAAO,GACpBpW,SAAU,YA1GG,EA+GnBkmP,mBAAqB,SAACzrR,EAAGlC,GACnB,EAAK8S,MAAM8xP,QAIV5kQ,GAAQA,EAAK4sG,SAAW,EAAK95F,MAAMq7Q,YACtC,EAAK5sN,QArHU,EAyHnBhoC,KAAO,SAACr3B,GACNA,EAAE20F,kBACF30F,EAAE40F,iBACF,IACE0B,EADa,EAAKq1L,YACLG,aAAax1L,OAG5B,aAAErzF,UAAU8oG,QAAQ,UAAY+zB,iBAAkB,CAACp1B,OAAQ,EAAK95F,MAAMq7Q,cACtE,aAAE,uDAAuDQ,UAAU,CAAC9qO,OAAQ,yBAC5E,EAAKwlI,SAAS,CAACpmL,MAAOu1F,EAAKosK,QAAQ,EAAOgqB,eAAgBp2L,EAAIh4F,OAAQquR,aAAcr2L,EAAIh4F,OAAQsuR,mBAAmB,IACnH5qR,OAAOu2F,YAAW,WAChB,EAAK4uF,SAAS,CAACylG,mBAAmB,MACjC,KACA,EAAKz3K,MAAM03K,SACZhrR,QAAQ4B,IAAI,iBACZ,EAAK0xG,MAAM03K,WAxII,EA6InBnB,mBAAqB,SAAC1rR,GACjB,EAAK4Q,MAAMg8Q,oBAGX,aAAE5sR,EAAEugB,QAAQq+F,QAAQ,uBAAuBtgH,QAAU,GACtD,EAAK+gE,QAlJU,EAsJnBA,KAAO,WACL,EAAK8nH,SAAS,CAACu7E,QAAQ,IACvBnqK,YAAW,WACTt1F,SAAS6pR,cAAe,IACvB,IACA,EAAK33K,MAAM2/H,SACZ,EAAK3/H,MAAM2/H,QAAQ,EAAKlkO,MAAM7P,QA5Jf,EA+JnBgsR,YAAc,SAAChsR,GACb,GAAI,EAAKo0G,MAAMujE,SACb,IAAK,IAAIt6K,EAAI,EAAGA,EAAI2C,EAAMzC,OAAS,EAAGF,IACpC2C,EAAQA,EAAM+H,UAAU,EAAG1K,GAAK,IAAM2C,EAAM+H,UAAU1K,EAAI,GAG9D,OAAO2C,GArKU,EAwKnBisR,YAAc,SAAChtR,GACb,EAAKmnL,SAAS,CAACpmL,MAAOf,EAAEugB,OAAOxf,SAzKd,EA4KnBksR,aAAe,SAAC5rR,GAEd,GADA4B,SAAS6pR,cAAe,EACpBzrR,GAAOA,EAAI/C,OAAS,EAAG,CACzB,IAAM8tR,EAAS,EAAKT,YAChBr1L,EAAO,EAAK6e,MAAMugI,SAAW,EAAKvgI,MAAMugI,WAAa,EAAK9kO,MAAM7P,MAClEojE,EAAQmyB,EACR38E,EAAM,GACN2uE,EAAQ8jM,EAAOL,YACfC,EAASI,EAAOJ,OAChBF,EAAeM,EAAON,aACtBoB,EAAY,EAAK/3K,MAAMugI,SAAWp/I,EAAIh4F,OAASgqF,EAAMokM,eACrDS,EAAU,EAAKh4K,MAAMugI,SAAWp/I,EAAIh4F,OAASgqF,EAAMqkM,aASjDO,EAAW52L,EAAIh4F,SACjB6lE,EAAQmyB,EAAIxtF,UAAU,EAAGokR,GACzBvzQ,EAAM28E,EAAIxtF,UAAUqkR,IAEtB,IAAIC,EAAM/rR,EAAI/C,OACd,OAAQ+C,EAAI8E,eACV,IAAK,YACHinR,GAAO,EACHF,EAAW52L,EAAIh4F,QACb4uR,IAAaC,EACfhpN,EAAQA,EAAMr7D,UAAU,EAAGq7D,EAAM7lE,OAAS,IAE1C8uR,EAAM,EACND,EAASD,GAEX52L,EAAMnyB,EAAQxqD,GACL28E,EAAIh4F,OAAS,IACtBg4F,EAAMA,EAAIxtF,UAAU,EAAGwtF,EAAIh4F,OAAS,IAEtC,MACF,IAAK,KACL,IAAK,KACS,OAAR+C,EACF+rR,GAAO,EAEHF,EAAWC,GACbC,EAAM,EACNF,EAAWC,GAEXC,EAAM,EAGV,MACF,IAAK,YACL,IAAK,QACH92L,EAAMnyB,EAAQ,IAAMxqD,EACpB,MACF,IAAK,OACL,IAAK,QACH,EAAKwtK,SAAS,CAACkmG,aAAc,EAAKz8Q,MAAMy8Q,cACxC,MACF,QAME/2L,EAAMnyB,GAFJ9iE,EAHG,EAAKuP,MAAMy8Q,YAGRhsR,EAAIub,cAFJvb,EAAI8E,eAIQwT,EACpBuzQ,EAAW/oN,EAAM7lE,OACjB6uR,EAASD,EAITA,EAAWE,EAAM92L,EAAIh4F,QACvB4uR,EAAW52L,EAAIh4F,OACf6uR,EAAS72L,EAAIh4F,SAEb4uR,GAAYE,EACRD,EAASC,EAAM92L,EAAIh4F,OACrB6uR,EAAS72L,EAAIh4F,OAEb6uR,GAAUC,GAGVF,EAAW,IACbA,EAAW,GAETC,EAASD,IACXC,EAASD,GAGX,EAAK/lG,SAAS,CAACpmL,MAAOu1F,EAAKg3L,QAAQ,IAAQ,WACzChlM,EAAMilM,kBAAkBL,EAAUC,GAC/BnB,EAAO1tR,OAAS,EACjB0tR,EAAO/6G,QAEP66G,EAAa76G,WASjB,EAAKu8G,eAAel3L,KArRL,EAwRnBk3L,eAAiB,SAACzsR,GAChB,UAAUgqC,qBAAqB,6BAE3B,EAAKoqE,MAAMggI,WACT,EAAKhgI,MAAM8/D,KACb,EAAK9/D,MAAMggI,SAAS,EAAKhgI,MAAM8/D,KAAMl0K,GAErC,EAAKo0G,MAAMggI,SAASp0O,KA/RP,EAoSnB0sR,KAAO,WACL,EAAKD,eAAe,EAAK58Q,MAAM7P,OAC/B,EAAKs+D,QAtSY,EAySnBquN,QAAU,WACR,IAAMtB,EAAS,EAAKT,YACpB,EAAKxkG,SAAS,CACZulG,eAAgBN,EAAO9jM,MAAMokM,eAC7BC,aAAcP,EAAO9jM,MAAMqkM,gBA7SZ,EAgbnBgB,iBAAmB,WACjB,MAAwB,UAApB,EAAKx4K,MAAMlgG,KACN,KAIP,+BAAKw/E,UAAU,wBACb,mCAAaA,UAAU,8BAA8Bm5L,SAAS,aACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cACtCo4Q,YAAa,EAAKz8Q,MAAMy8Q,aAFrC,cAGA,mCAAa54L,UAAU,8BAA8Bm5L,SAAS,aACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cACtCo4Q,YAAa,EAAKz8Q,MAAMy8Q,aAFrC,cAGA,mCAAa54L,UAAU,8BAA8Bm5L,SAAS,eACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cAAco4Q,YAAa,EAAKz8Q,MAAMy8Q,aADzF,gBAEA,mCAAa54L,UAAU,8BAA8Bm5L,SAAS,aACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cACtCo4Q,YAAa,EAAKz8Q,MAAMy8Q,aAFrC,YAGA,mCAAa54L,UAAU,8BAA8Bm5L,SAAS,WACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cACtCo4Q,YAAa,EAAKz8Q,MAAMy8Q,aAFrC,YAGA,mCAAa54L,UAAU,8BAA8Bm5L,SAAS,UACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cACtCo4Q,YAAa,EAAKz8Q,MAAMy8Q,aAFrC,WAGA,mCAAa54L,UAAU,8BAA8Bm5L,SAAS,cACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cAAco4Q,YAAa,EAAKz8Q,MAAMy8Q,aADzF,eAEA,mCAAa54L,UAAU,8BAA8Bm5L,SAAS,OACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cACtCo4Q,YAAa,EAAKz8Q,MAAMy8Q,aAFrC,QAGA,mCAAa54L,UAAU,8BAA8Bm5L,SAAS,OACjDX,aAAc,EAAKA,aAAch4Q,KAAK,cACtCo4Q,YAAa,EAAKz8Q,MAAMy8Q,aAFrC,UA7ca,EAodnBQ,sBAAwB,SAACzzP,GAEvB,OAEE,+BAAKq6D,UAAU,0CACVq5L,SAAS,KACT5vQ,MAAOkc,EACPyvH,IAAK,SAACkkI,GAAD,OAAU,EAAKzC,cAAgByC,IACtC,EAAKn9Q,MAAM8xP,OAAS,KACnB,wCACE,+BAAKjuK,UAAU,yBACf,+BAAKA,UAAU,4BAA4BkyF,QAAS,EAAKtnH,OACzD,mCAAapqD,KAAK,YAAY24Q,SAAS,YAAYX,aAAc,EAAKA,eACtE,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,eAC5D,mCAAah4Q,KAAK,mBAAmB24Q,SAAS,IAAIX,aAAc,EAAKA,eACrE,mCAAah4Q,KAAK,UAAU24Q,SAAS,IAAIX,aAAc,EAAKA,kBAzepE,EAAK3B,cAAgB,KACrB,EAAK16Q,MAAQ,CACX7P,MAAO,GACP2hQ,QAAQ,EACRgqB,eAAgB,EAChBC,aAAc,EACd13Q,KAAM,EAAKkgG,MAAMlgG,MAAQ,WACzBg3Q,WAAY,UAAK//P,KACjBmhQ,aAAa,EACblB,IAAKlpR,SAASC,SAASipR,IACvBv8G,WAAY,MAZG,E,oFAgBC,WAClB/lK,KAAKqiR,kBACLriR,KAAKs9K,SAAS,CAACvX,YAAY,aAAE/lK,KAAKyhR,eAAeloR,WAAW,WACvD,EAAK+xG,MAAM64K,WACZ,aAAE,EAAK1C,eAAeC,SAASyC,UAAU,EAAK74K,MAAM64K,WAC9C,EAAK74K,MAAMq2K,WACjB,aAAE,EAAKF,eAAeC,SAASC,SAAS,EAAKr2K,MAAMq2K,aAGvD,IAAMyC,GAAiB,aAAEpkR,KAAKyhR,eACxBgB,EAAW2B,EAAervK,QAAQ,6BACpC0tK,IACFA,EAAS9/K,GAAG,SAAU3iG,KAAKwiR,cAAc/qR,KAAKuI,KAAMokR,EAAgB3B,IACpEziR,KAAKwiR,cAAc4B,EAAgB3B,KAGrC,aAAErpR,UAAUupG,GAAG,UAAYszB,iBAAkBj2H,KAAK4hR,qBAClD,aAAExoR,UAAUupG,GAAG,UAAYuzB,cAAel2H,KAAK4hR,qBAC/C,aAAExoR,UAAUupG,GAAG,QAAS3iG,KAAK6hR,sB,2CAI7B7hR,KAAKqiR,kBACL,IAAME,EAASviR,KAAK8hR,YACpB,IAAK9hR,KAAK+G,MAAM8xP,OAAQ,CACtB,IAAMwqB,EAAWrjR,KAAK+G,MAAM87Q,eAC1BS,EAAStjR,KAAK+G,MAAM+7Q,aAClBP,EAAO9jM,QACT8jM,EAAO9jM,MAAMvnF,MAAQ8I,KAAKkjR,YAAYljR,KAAK+G,MAAM7P,OACjDqrR,EAAOJ,OAAO/6G,QACdm7G,EAAO9jM,MAAMilM,kBAAkBL,EAAUC,O,gDAKrB1kG,GACtBA,EAAU1nL,OAAS0nL,EAAU1nL,QAAU8I,KAAK+G,MAAM7P,OAAS8I,KAAKs9K,SAAS,CACrEpmL,MAAO0nL,EAAU1nL,U,+BA4PhB,WACDq5B,EAAU,CACds1I,QAAS7lK,KAAK+G,MAAM8xP,OAAS,OAAS,QAEtC3zP,IAAKlF,KAAKsrG,MAAMpmG,IAChB4sC,KAAM9xC,KAAKsrG,MAAMx5D,MAEnB,GAAwB,YAApB9xC,KAAKsrG,MAAMlgG,KACb,OAAOpL,KAAKgkR,sBAAsBzzP,GAGpC,IAAM8zP,EAAY,CAChBvyO,MAAO,UAAO3xC,iBAAqC,SAAlBrG,SAAS6hL,MAAmBviL,SAASC,SAASC,UAAY,IAAM,gCAAkC,wCACnIu4C,OAAQ,UAAO1xC,iBAAqC,SAAlBrG,SAAS6hL,MAAmBviL,SAASC,SAASC,UAAY,IAAM,gCAAkC,0CAGhIgrR,EAAiB,uBAA6C,UAApBtkR,KAAKsrG,MAAMlgG,KAAmB,+BAAiC,uBAE/G,OACE,+BAAKw/E,UAAW05L,EAAgBjwQ,MAAOkc,EAASyvH,IAAK,SAACkkI,GAAD,OAAU,EAAKzC,cAAgByC,GAAMpnG,QAAS,SAAC3mL,GAAD,OAAOA,EAAE20F,oBAC1G,+BAAKF,UAAU,mCAAmCkyF,QAAS98K,KAAKw1D,OAChE,+BAAKo1B,UAAU,uBAAf,gBACC5qF,KAAK+G,MAAM8xP,OAAS,KACnB,+BAAKjuK,UAAU,0BACb,+BAAKA,UAAU,uBACb,mCAAax/E,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,YAAYX,aAAcpjR,KAAKojR,eAChF,mCAAah4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,GAAGR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC3DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,SAASm5Q,UAAU,IAAIR,SAAS,IAAIX,aAAcpjR,KAAKojR,aAC5DI,YAAaxjR,KAAK+G,MAAMy8Q,cACrC,mCAAap4Q,KAAK,WAAWm5Q,UAAU,GAAGR,SAAS,QAAQX,aAAcpjR,KAAKojR,aACjEI,YAAaxjR,KAAK+G,MAAMy8Q,YAAagB,KAAK,IACvD,mCAAap5Q,KAAK,WAAWm5Q,UAAU,GAAGR,SAAS,QAAQX,aAAcpjR,KAAKojR,aAAcoB,KAAK,IACjG,mCAAap5Q,KAAK,aAAam5Q,UAAU,GAAGR,SAAS,KAAKr1N,MAAO21N,EAAUvyO,KAC9DsxO,aAAcpjR,KAAKojR,eAChC,mCAAah4Q,KAAK,aAAam5Q,UAAU,GAAGR,SAAS,KAAKr1N,MAAO21N,EAAUxyO,MAC9DuxO,aAAcpjR,KAAKojR,gBAEjCpjR,KAAK8jR,yB,GAzb4B,UAAMj4K,W,EAE3Cq2C,UAAY,CACjBuiI,UAAW,UAAUriI,KACrB4/H,QAAS,UAAUx/O,OAAOy2E,WAC1B4yH,SAAU,UAAU9sD,KACpBusD,SAAU,UAAUvsD,KAAK9lE,WACzBgyH,QAAS,UAAUlsD,KACnBikG,OAAQ,UAAUjkG,KAClB3zK,KAAM,UAAUo3B,OAAOy2E,WACvBkrK,UAAW,UAAU3hP,OACrBm/O,SAAU,UAAUn/O,OACpBt9B,IAAK,UAAUs9B,OACfsP,KAAM,UAAUtP,Q,aAbC++O,G,0GCbrB,O,OACA,OACA,O,IACA,M,IACA,SAEA,Q,WACA,QACA,QACA,QACA,U,IACA,S,IACA,Q,mDAEA,IAAMmD,EAAkB,SAACt2G,EAAUu2G,GACjC,IAAMC,EAAe,IAAMx2G,EAC3B,GAAIw2G,EAAanwR,OAAS,EAAG,CAC3B,IAAMowR,EAAaD,EAAanwR,OAC5BmwR,IAAiBD,EAAWtsR,MAAM,EAAEwsR,KACtCF,EAAaA,EAAWtsR,MAAMwsR,IAIlC,OADAF,EAAaA,EAAW5mR,MAAM,KAAKsV,KAAK,IAAItV,MAAM,KAAKsV,KAAK,KAIxDyxQ,EAAqB,SAACx5K,GAAU,IAE7B1zG,EACwC0zG,EADxC1zG,SAAUmJ,EAC8BuqG,EAD9BvqG,SAAUqoB,EACoBkiF,EADpBliF,eAAgB3O,EACI6wF,EADJ7wF,KAAM8O,EACF+hF,EADE/hF,eAAgBD,EAClBgiF,EADkBhiF,qBAAsBgoH,EACxChmC,EADwCgmC,YAAayzI,EACrDz5K,EADqDy5K,YAClG5rH,EAA6C7tD,EAA7C6tD,SAAU6rH,EAAmC15K,EAAnC05K,gBAAiB7sQ,EAAkBmzF,EAAlBnzF,eAGvB8sQ,GAAW,IAAAhlI,UANmB,GAOX,IAAAkB,UAASpgJ,EAASnJ,IAApCstR,GAP6B,wBAQN,IAAA/jI,WAAS,GARH,qBAQ7BgkI,EAR6B,KAQpBC,EARoB,QASN,IAAAjkI,WAAS,GATH,qBAS7BkkI,EAT6B,KASpBC,EAToB,QAUA,IAAAnkI,WAAS,GAVT,qBAU7BokI,EAV6B,KAUjBC,EAViB,KAW9BplI,GAAY,IAAAF,gBACZulI,EAAc,UAAO7mR,gBAAkB,qBAGvC8mR,EAAkB,SAACC,EAAShB,GAEhC,IAAIiB,GAAe,EACnBN,GAAW,GAEX,IAAM1kL,EAAQA,UAARA,8BACN,KAAIA,GAASA,EAAMilL,eAAiBjlL,EAAMilL,cAAcj7L,UAAUzwF,SAAS,uBAA3E,CAIKgrR,GACHC,GAAW,GAEb,IAAMU,EAAgBpB,EAAgB3jR,EAASghC,QAAQqsI,SAAUu2G,GAC7DmB,IAAkBnB,IACpBA,EAAamB,EACbF,GAAe,GAGjB,IAAMG,EAAaA,IAAIhlR,EAASghC,QAAQqsI,SAAlC,IAA8Cu2G,EAC9CjyJ,EAASw8C,EAAoB62G,EAAYhlR,EAASghC,QAAQusI,KAAKv7J,gBAIjE2/G,EAAOj+H,SAICi+H,EAAOj+H,QAAU80B,EAAe3xB,KAH1C0xB,mBACG1xB,EAAW86H,IAQhB,IAAMszJ,EAAiBtzJ,EAAO96H,GAC1B,UAAK+1K,kBAAkBg3G,EAAY5jR,EAASghC,QAAQusI,KAAKv7J,eACzD4xQ,EACJ3sR,QAAQ4B,IAAI,iCAAkCosR,GAC9C58P,mBACGxxB,EAAWouR,IAEVJ,GAAgBX,GAAYA,EAASzwK,SAAWywK,EAASzwK,QAAQyxK,iBACnEv3L,YAAW,WACTu2L,EAASzwK,QAAQ0xK,QAAQnlR,EAASghC,QAAQusI,MAAM,GAChD22G,EAASzwK,QAAQ2xK,UAAUJ,KAE1B,MAKP,IAAApkK,YAAU,WACR,YACMy+B,KAAe+Y,GACjBusH,GAAgB,EAAM3kR,EAASnJ,IAEvBotR,GACVU,GAAgB,EAAM3kR,EAASnJ,MAGhC,CAACotR,IAEJ,IAAM91G,EAAsB,SAACC,EAAc/B,GACzC,GAAIj1J,EAAeG,cACjB,MAAO,GAET80J,EAASA,GAAU,KACnB,IAAM16C,EAAS,GACf,OAAKy8C,GAIA,UAAKhC,cAAcgC,EAAc/B,IACpC16C,EAAO39H,KAAK,qCAEP29H,IANLA,EAAO39H,KAAK,oCACL29H,IA2GL0zJ,EAAcx+Q,MAAMC,QAAQ0hB,EAAe3xB,KAAc2xB,EAAe3xB,GAAUnD,OAElF4xR,EAAuB,WAC3B,IAAKjtR,SAASC,SAASipR,IACrB,OAAO,KAsBT,OAAO,mCAAkBN,QAAQ,QACRn2C,SAAU,kBAAM9qO,EAASkhC,aACzBqpM,SAtBG,SAACp0O,GAGvBA,GAASA,EAAMiD,SAAS,OAG5BivB,mBACGxxB,EAAWV,IAGV+tR,GAAYA,EAASzwK,SACvBywK,EAASzwK,QAAQ8xK,kBAAkB,CACjC5vQ,OAAQ,CACNmsQ,eAAgB3rR,EAAMzC,OACtBiiB,OAAQuuQ,EAASzwK,QAAQ+xK,IACzBrvR,aAQiB+zO,QAAS,SAACu7C,GACHrB,GACHO,GAAgB,EAAMc,IAG1B10O,KAAK,OACL5sC,IAAI,QACJkG,KAAK,aAG1Bq7Q,EACJ,mCAAcC,eAAgB,EAAA3qR,UAC1B,wFAA0FqqR,EAAc,mBAAqB,IAC7H,4CAEUO,mBAAoB,EAAA5qR,UAAY,iBAAmB,kEACnD0pR,YAAaA,EACbmB,aA/ES,SAACC,EAAeC,GAWvC,IAAIp4G,EAAc,GAWlB,GAVIm4G,IAAkB9lR,EAASkhC,cAC7BysI,EAAYzsI,YAAc4kP,GAExBC,GAAuBA,EAAoBx4G,OAC7CI,EAAY3sI,QAAU+kP,GAEpBpyR,OAAOmc,KAAK69J,GAAaj6K,QAE3B20B,EAAeslJ,IAEZnlJ,EAAe3xB,IAAautR,IAAa2B,GAAuBA,EAAoBx4G,KAAO,CAC9F,IAAMy3G,EAAaA,IAAIe,EAAoB14G,SAArC,IAAiDy4G,EACjDn0J,EAASw8C,EAAoB62G,EAAYe,EAAoBx4G,KAAKv7J,eACnE2/G,EAAOj+H,QACV60B,mBACG1xB,EAAW86H,MAqDJq0J,oBAAoB,IAAAC,yBACpB11I,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,EAAAjM,WAAau1I,EAAcA,EAAc,4BAC9E21I,oBAxIW,SAACt+Q,EAAGC,EAAGrS,EAAG0rC,GAAqC,IAAxBilP,EAAwB,wDAYxE,GAXAjlP,EAAcA,EAAYtjC,QAAQ,mBAAoB,IAWlDuoR,EAAa,CACf,IAAMC,EAAkB,WACtB,IAAItvR,EAAIuB,SAAS02F,eAAe,SAChCj4F,EAAEgrR,eAAiB5gP,EAAYxtC,OAC/BoD,EAAEirR,aAAe7gP,EAAYxtC,QAE/B0D,OAAOu2F,WAAWy4L,EAAiB,IAErC,GAAK5wR,EAAL,CASA,GANKwK,EAASkhC,cAAgBA,GAAiBlhC,EAASghC,QAAQusI,OAAS/3K,EAAE+3K,MAASluB,KAIlFh3H,EAAe,CAAC2Y,QAASxrC,IAEvBgzB,EAAe3xB,IAAautR,IAAYE,IAAYE,EAAY,CAClE,IAAM7yJ,EAASw8C,EAAoBA,IAAI34K,EAAE63K,SAA1B,IAAsCxlK,EAAKrS,EAAE+3K,KAAKv7J,eAC5D2/G,EAAOj+H,SAAU0wR,GACpB77P,mBACG1xB,EAAW86H,IAIlB,IAAK2yJ,IAAYE,EAAY,CAC3B,IAAMO,EAAgBpB,EAAgBnuR,EAAE63K,SAAUxlK,GAClD,GAAIk9Q,IAAkBl9Q,EAAG,CACvBA,EAAIk9Q,EACJ,IAAMC,EAAaA,IAAIxvR,EAAE63K,SAAnB,IAA+BxlK,EACrCq8Q,EAASzwK,QAAQ2xK,UAAUJ,GAE7B38P,mBACGxxB,EAAWgR,IAEd5Q,QAAQ4B,IAAI,uCAAwCgP,EAAGq5B,GAEpDsjP,GACHC,GAAc,KAuFF4B,kBAAmB1B,EACnB2B,mBAtJS,WACvB/B,GAAW,IAsJGgC,kBAAkB,EAClBz/H,UAAW,GACXq9H,aAAcA,EACdqC,eAAgBxmR,EAASghC,QAAQusI,KACjCk5G,QAAQ,QACRlkR,KAAM,EAAAvH,UAAY,GAAK,QACvBikJ,IAAKilI,IAIrB,mBAEI,+BAAKr6L,UAAU,aACZ67L,EACAtuQ,EAAeG,eAAkBysQ,IAAgBqB,EAAe,KAAO,gCAAMx7L,UAAU,uBAAhB,KACxE,mCAAiBhzF,SAAUA,IAC1ByuR,KAML,+BAAKz7L,UAAU,cACb,+BAAKA,UAAW,sFACby6L,EAAU,eAAiB,KAAOe,EAAc,aAAe,KAC/DK,EACD,oCAAUgB,cAAY,OAAO78L,UAAU,gEACrC,kCAAQA,UAAU,0CAChB,oCAAM,4CAAkB5iF,GAAI,4BAA5B,QAILo+Q,EACC,6BAAGx7L,UAAU,6EACX,4CAAkB5iF,GAAIuhB,EAAe3xB,GAAU,MAE/C,KACHyuR,MAKPvB,EAAmB5iI,UAAY,CAC7BtqJ,SAAU,UAAU4qC,OAAOy2E,WAC3B+rK,gBAAiB,UAAU5iI,KAAKnpC,WAChCyuK,OAAQ,UAAUtlI,KAClBulI,kBAAmB,UAAU5oG,KAC7BztC,YAAa,UAAU9uG,OACvBuiP,YAAa,UAAU3iI,KACvB+W,SAAU,UAAU/W,MAGtB,IAUMkuC,EAAqB,CACzBlnK,gCACAE,6C,WAGa,IAAAy+H,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAU,MACEA,EAAMwc,UACzC,MAAO,CACL/T,SAH+B,EAC1BA,SAGLwoB,eAJ+B,EAChBA,eAIfpR,eAAgB7f,EAAMqN,mBAWC2qL,EAAzB,CAA6Cw0F,K,mIClV/C,O,OAEA,SACA,QAOA,S,IAMA,S,uDAEqB8C,E,yOAEnBC,0BAA4B,WAC1B,GAAI,EAAKC,qBACP,OAAO,EAET,IAAMl5F,EAAkB,EAAKtjF,MAAMrgG,SACnC2jL,EAAgBrjE,UAAYqjE,EAAgBrjE,SAC5C,EAAKw8J,eAAen5F,I,EAGtBo5F,oBAAsB,SAACpwR,EAAUV,GAC/B,IAAM03L,EAAkB,EAAKtjF,MAAMrgG,SACnC2jL,EAAgBh3L,GAAYV,EAC5B,EAAK6wR,eAAen5F,I,EAGtBm5F,eAAiB,SAACn5F,GAChB,EAAKtjF,MAAMuoB,oBAAoB,EAAKvoB,MAAM5gG,iBAAiB5C,KAAI,SAAC+C,GAiB9D,OAhBIA,EAAgByL,QAAU,EAAKg1F,MAAMzgG,gBAAgByL,QACvDzL,EAAgBygH,UAAUxjH,KAAI,SAAAmD,GAC5B,OAAI2jL,EAAgBt4K,QAAUrL,EAASqL,MAC9Bs4K,EAEF3jL,KAEL2jL,EAAgBrjE,UAAYqjE,EAAgBx3L,OAAS,EAAAqjL,eAAeE,KAAOiU,EAAgBzT,aAC7FtwK,EAAgBygH,UAAYzgH,EAAgBygH,UAAUxjH,KAAI,SAAAmD,GAIxD,OAHK2jL,EAAgBt4K,QAAUrL,EAASqL,OAAWrL,EAAS7T,OAAS,EAAAqjL,eAAeE,IAAQ1vK,EAASkwK,aACnGlwK,EAASsgH,UAAW,GAEftgH,OAINJ,O,EAIXo9Q,cAAgB,WAA4B,IAA3BC,EAA2B,uDAAT,KAC3BvmR,GAAa,IAAA+E,eAAc,MAAM,GACvC,OAAO,IAAAzF,4BAA2BU,EAAYumR,EAAkB,CAACA,GAAmB,K,EAGtFJ,mBAAqB,WAAuC,IAAtCK,EAAsC,uDAAxB,EAAK78K,MAAMrgG,SAAa,EACV,EAAKqgG,MAA9CzgG,EADmD,EACnDA,gBAAiBG,EADkC,EAClCA,qBAClBC,EAAWk9Q,EACjB,GAAIl9Q,EAASsgH,SACX,OAAO,EAET,IAAMxB,EAAa,EAAKk+J,gBAClBG,EAAiBn9Q,EAASG,OAAS,EAAAC,eAAe7I,MAAQyI,EAASK,OAASy+G,EAAa9+G,EAASK,OAAS,IAC7Gw3E,EAAYinC,EAAaq+J,EAAkB,EAC/C,GAAItlM,GAAY73E,EAAS7T,OAAS,EAAAqjL,eAAeE,GAAI,CACnD,IAAMgU,GAAe,IAAA7jL,cAAY,IAAAC,wBAAuBF,EAAiBG,IACrE2jL,EAAa1uL,MAAK,SAAA2uL,GACpB,OAAQA,EAAgBt4K,QAAUrL,EAASqL,OACrCs4K,EAAgBx3L,OAAS,EAAAqjL,eAAeE,KACzC,IAAAmV,uBAAsBlB,IACrB,EAAKq5F,cAAcr5F,GAAmBw5F,EAAkB,OAG9DtlM,GAAW,GAGf,OAAOA,G,EAGTulM,4BAA8B,WAC5B,IACMn4F,GADa,IAAAzB,kBAAiB,EAAKnjF,MAAM5gG,iBAAkB,EAAK4gG,MAAMzgG,gBAAiB,EAAKygG,MAAMrgG,UAAU,EAAM,EAAKqgG,MAAMtgG,sBACnG,EAAKsgG,MAAMrgG,SAASK,OAAS,IAC7D,OAAO,IAAAtJ,cAAaoI,KAAKyI,MAAmB,IAAbq9K,GAAoB,M,EAGrDo4F,eAAiB,SAACpxR,GAEX,EAAKo0G,MAAMrgG,SAASqwK,eAAiB,EAAApB,oBAAoBK,SAAa,EAAKjvE,MAAMrgG,SAASG,OAAS,EAAAC,eAAemvK,SACrH,EAAKwtG,oBAAoB,OAAQ,EAAA38Q,eAAe7I,OAElD,EAAKwlR,oBAAoB,UAAW9wR,I,EAGtCqxR,oBAAsB,WACpB,OAAQ,EAAKj9K,MAAMrgG,SAASG,OAAS,EAAAC,eAAemvK,QAAW,IAAM,EAAKytG,cAAc,EAAK38K,MAAMrgG,W,EAGrGu9Q,kBAAoB,WAAM,MACe,EAAKl9K,MAArCrgG,EADiB,EACjBA,SAAU6G,EADO,EACPA,mBACjB,OAAO7G,EAASG,OAAS,EAAAC,eAAe7I,MACpC,KAAM,IAAAkR,sBAAqB5B,EAAoB7G,EAASK,QACxD,KAAM,IAAAoI,sBAAqB5B,EAAoB,EAAKu2Q,gC,EAG1DI,cAAgB,WAAM,MACqC,EAAKn9K,MAAvDrgG,EADa,EACbA,SAAU6G,EADG,EACHA,mBAAoBpH,EADjB,EACiBA,iBACrC,IAAKO,EAASK,OACZ,MAAO,IAET,GAAIL,EAASqwK,eAAiB,EAAApB,oBAAoBK,QAAS,CACzD,GAAItvK,EAASG,OAAS,EAAAC,eAAe7I,MACnC,OAAO,IAAAkR,sBAAqB5B,GAAoB,IAAA9P,cAAaiJ,EAASK,SAExE,IAAM3J,GAAa,IAAA+E,iBACbqjH,GAAa,IAAA7oH,wBAAuBS,GACpC+mR,GAAsB,IAAA78J,wBAAuBnhH,EAAkBq/G,GACrE,OAAO,IAAAr2G,sBAAqB5B,EAAoB42Q,GAKlD,MAAO,KAAM,IAAAh1Q,sBAAqB5B,GAAoB,IAAA9P,cAAaiJ,EAASK,U,EAG9Eq9Q,kBAAoB,WAAM,MACW,EAAKr9K,MAAjCrgG,EADiB,EACjBA,SAAUkN,EADO,EACPA,eACXywQ,EAAa39Q,EAASqwK,eAAiB,EAAApB,oBAAoBK,QACjE,OAAOtvK,EAASsgH,UAAYq9J,EAC1B,wCAIE,mCAAWh+L,UAAW,4EACXi+L,aAAa,EACb/yD,SAAU,EAAKwyD,eACfQ,aAAc,EAAKR,eACnBS,SAAU,EAAKR,sBACfS,aAAcJ,EAAazwQ,EAAezQ,SAASoM,aAAe,IAAMqE,EAAezQ,SAASoM,aAChG5c,MAAO,EAAKuxR,mBAKvB,M,mDApIoC,UAAM58K,W,UAA7B+7K,G,uJClBSptQ,EAAjBA,eAAiB,SAACnU,EAAa8R,EAAgB8wQ,EAAc/wQ,EAAQ/O,GAChF,IAAMxF,EAAY0C,EAAY1C,UAC9B,IAAKwU,EAAeE,SAAWF,EAAeG,gBAA6B,UAAXJ,GAAsB+wQ,EAAalxQ,SAAS,qBAAuBpU,EAAUmF,mBAC3I,MAAmF,iBAA9EmgR,EAAalxQ,SAAS,qBAAuBpU,EAAUmF,oBAA6D,SAAnBnF,EAAUgX,KACvG,QAEFsuQ,EAAalxQ,SAAS,qBAAuBpU,EAAUmF,mBAEhE,GAAInF,EAAUgX,KAAM,CAClB,IAAIC,EAAiBjX,EAAUgX,KAAKre,cACpC,MAA0B,SAAnBse,GAAgD,SAAnBA,EACnB,IAAbzR,EACE8/Q,EAAalxQ,SAAS,2CACtBkxQ,EAAalxQ,SAAS,mDACxBpU,EAAUgX,KAEhB,OAAItU,EAAYwH,eACPo7Q,EAAalxQ,SAAS,gDAExBkxQ,EAAalxQ,SAAS,6CAGAmxQ,EAAlBA,gBAAkB,SAAC7iR,EAAa8R,EAAgB8wQ,EAAc/wQ,GACzE,IAAMvU,EAAY0C,EAAY1C,UAC9B,GAAIwU,EAAeE,SAAWF,EAAeG,cAAe,CAC1D,GAAe,UAAXJ,GAAsB+wQ,EAAalxQ,SAAS,iCAAkCpU,EAAUmF,mBAC1F,OAAOmgR,EAAalxQ,SAAS,iCAAkCpU,EAAUmF,mBACpE,GAAe,UAAXoP,GAAsB+wQ,EAAalxQ,SAAS,mCAAoCpU,EAAUmF,mBACnG,OAAOmgR,EAAalxQ,SAAS,mCAAoCpU,EAAUmF,mBAI/E,MAAqC,qCAAhCnF,EAAUmF,kBACTqP,EAAeG,cACP2wQ,EAAalxQ,SAASpU,EAAUmF,mBAA1C,KAAiEzC,EAAYkS,gBAA7E,IAEK0wQ,EAAalxQ,SAASpU,EAAUmF,mBAGpCzC,EAAYmS,eAIVnS,EAAYmS,iBAHVnS,EAAYsS,oBAAsBtS,EAAYiK,mBAAqB,K,yKCxC9E,YACA,QACA,QACA,QAEa64Q,EAA4BA,EAA5BA,0BAA4B,aAOCC,EAA7BA,2BAA6B,SAAChjR,EAAU4P,GAEnD,IAAK5P,IAAaA,EAASC,cAAgBD,EAASE,OAAOnM,SAAS,gBAAiB,IAAA6kJ,YAAahpI,EAAavhB,OAC7G,OAAO,KAGT,IAAM8E,EAAS6M,EAASC,YAAY3F,UAAY0F,EAASC,YAAY3F,YAAc,KACnF,IAAKnH,EACH,OAAO,KAGT,IAAMwc,EAAcC,EAAalK,MAAK,SAAAqjN,GAAA,OAAUA,EAAO14N,OAAS0yR,KAChE,IAAKpzQ,EACH,OAAO,KAST,IANA,IAAMszQ,GAAqB,IAAAjnM,sBAAqBh8E,EAASC,YAAa0P,IAAgB,GAElFuzQ,EAA0B,GAGxB7jM,GADS,IAAAtqE,oBACYm9E,sBAAsB,CAAC98E,KAAMjiB,GAAS,GAAI,IAAI,GAAO,GArBZ,WAsB3DhF,GACP,IAAMoxF,EAAaF,EAAYlxF,GACzBgrL,GAAiB,IAAAn9F,sBAAqBuD,EAAWnqE,KAAMzF,GACzDnO,MAAMC,QAAQ03K,IAChBA,EAAenhL,SAAQ,SAAAwyF,GACrB,IAAKy4L,EAAmBppR,MAAK,SAAAspR,GAAA,OAAqBA,IAAsB34L,KAAgB,CACtF,IAAI44L,EAAmBF,EAAwBx9Q,MAAK,SAAA29Q,GAAA,OAAaA,EAAUzhR,KAAO4oF,KAC9E44L,EACFA,EAAiB7nM,SAAS5sF,KAAK4wF,EAAWnqE,OAE1CguQ,EAAmB,CAACxhR,GAAI4oF,EAAejP,SAAU,CAACgE,EAAWnqE,OAC7D8tQ,EAAwBv0R,KAAKy0R,SAX9Bj1R,EAAI,EAAGA,EAAIkxF,EAAYhxF,OAAQF,IAAK,EAApCA,GAqBT,OAHA+0R,EAA0BA,EAAwB5gR,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEX,GAAKY,EAAEZ,MAC1EhQ,QAAQ4B,IAAI,0BAA2B0vR,GAEhCA,GAa+BI,EAA3BA,yBAA2B,SACtCtjR,EACAujR,EACAC,EACAC,EACA78Q,EACAgJ,GAEA,IAAI3S,EAAU,KACRymR,EAAmB1jR,EAASC,YAAYoZ,yBAE1CqqQ,IAOIA,EAAiB3vR,SAAS,OAC9BkJ,EAAUumR,EAAkBjoM,SAAS71E,MAAK,SAAAsS,GAAA,OAAkBA,EAAeqB,yBAAyBtlB,SAAS,UACpG2vR,EAAiB3vR,SAAS,SACnCkJ,EAAUumR,EAAkBjoM,SAAS71E,MAAK,SAAAsS,GAAA,OAAkBA,EAAeqB,yBAAyBtlB,SAAS,YAG5GkJ,IACHA,EAAUumR,EAAkBjoM,SAAS,IAGvC,IAAMhgF,IAAc,IAAA4K,oBAAmBlJ,EAASwmR,EAA0B,IAEpEE,IAAwB,IAAAx9Q,oBAAmBnG,EAASC,YAAawjR,EAA0B,IAE7FG,GAAgB,IAAAtjR,eAAcsG,GAAY,GAAOnL,cACrDmoR,GAAgB,IAAAhoR,cAAagoR,EAAgBD,EAAuBpoR,GAEpE,IAAMoU,EAAcC,EAAalK,MAAK,SAAAqjN,GAAA,OAAUA,EAAO14N,OAAS0yR,KAC1D1hM,GAAmB,IAAA8E,qBAAoBq9L,EAAkB5hR,GAAI+N,GACnE,OAAK0xE,GAAqBA,EAAiB4U,YAKpC,CACL4tL,gBAHsBxiM,EAAiB4U,YAAY19F,QAAQ,IAAMwqR,EAA2B,IAI5F9lR,UACA2mR,iBAPO,O,+EC1GX,I,IAAA,S,IACA,S,mDAEA,SAASE,EAAYC,EAAIC,GACvB,IAAMC,EAAUF,EAAGG,gBAQnB,OAPAH,EAAGI,YAAYJ,EAAGK,WAAYH,GAC9BF,EAAGM,cAAcN,EAAGK,WAAYL,EAAGO,eAAgBP,EAAGQ,eACtDR,EAAGM,cAAcN,EAAGK,WAAYL,EAAGS,eAAgBT,EAAGQ,eACtDR,EAAGU,WAAWV,EAAGK,WAAY,EAAGL,EAAGW,KAAMX,EAAGW,KAAMX,EAAGY,cAAeX,GACpED,EAAGM,cAAcN,EAAGK,WAAYL,EAAGa,mBAAoBb,EAAGc,QAC1Dd,EAAGM,cAAcN,EAAGK,WAAYL,EAAGe,mBAAoBf,EAAGc,QAC1Dd,EAAGI,YAAYJ,EAAGK,WAAY,MACvBH,EAGT,SAASc,EAAUhB,EAAIiB,GACrB,IAAIC,EAAgBlB,EAAGmB,eAIvBnB,EAAGoB,WAAWpB,EAAGqB,aAAcH,GAC/BlB,EAAGsB,WAAWtB,EAAGqB,aAAc,IAAIE,aAJlB,EAAE,GAAM,EAAK,GAAM,GAAM,EAAK,EAC7C,EAAK,EAAK,GAAM,GAAM,EAAK,IAG8BvB,EAAGwB,aAC9D,IAAIjqE,EAAQyoE,EAAGyB,kBAAkBR,EAAM,UAGvC,OAFAjB,EAAG0B,oBAAoBnqE,EAAO,EAAGyoE,EAAG2B,OAAO,EAAO,EAAG,GACrD3B,EAAG4B,wBAAwBrqE,GACpB,CAACA,EAAO2pE,GAGjB,SAASW,EAAa7B,EAAIxqR,EAAOE,GAC/B,IAAIosR,EAAS9B,EAAG+B,aAAa/B,EAAGgC,eAChChC,EAAGiC,aAAaH,EAAhB,WACA9B,EAAGkC,cAAcJ,GACjB,IAAIK,EAASnC,EAAG+B,aAAa/B,EAAGoC,iBAChCpC,EAAGiC,aAAaE,EAAhB,WACAnC,EAAGkC,cAAcC,GACjB,IAAIlB,EAAOjB,EAAGqC,gBAMd,OALArC,EAAGsC,aAAarB,EAAMa,GACtB9B,EAAGsC,aAAarB,EAAMkB,GACtBnC,EAAGuC,YAAYtB,GACfjB,EAAGwC,WAAWvB,GACdjB,EAAGyC,SAAS,EAAE,EAAGjtR,EAAOE,GACjBurR,EAGT,IAAIyB,EAAczzR,SAAS8oD,cAAc,U,UAEnB,SAAC0vD,GAAwC,IAAzBk7K,EAAyB,wDAEzDC,EAAMD,EAAe1zR,SAAS8oD,cAAc,UAAY2qO,EAE5D,IAAKE,EAAI5C,IAAM2C,EAAc,CAC3BC,EAAIptR,MAAQiyG,EAAcjyG,MAC1BotR,EAAIltR,OAAS+xG,EAAc/xG,OAC3BktR,EAAI5C,GAAK4C,EAAI39L,WAAW,SACxB29L,EAAI3B,KAAOY,EAAae,EAAI5C,GAAIv4K,EAAcjyG,MAAOiyG,EAAc/xG,QACnEsrR,EAAU4B,EAAI5C,GAAI4C,EAAI3B,MACtB,IAAM4B,EAAWD,EAAI5C,GAAG8C,mBAAmBF,EAAI3B,KAAM,YACrD2B,EAAI5C,GAAG+C,UAAUF,EAAU,GAG7B,IAAI7C,EAAK4C,EAAI5C,GACPE,EAAUH,EAAYC,EAAIv4K,GAC5BjuD,EAAMiuD,EAAcxiB,WAAW,MAGnC+6L,EAAGgD,cAAchD,EAAGiD,UACpBjD,EAAGI,YAAYJ,EAAGK,WAAYH,GAC9BF,EAAGkD,WAAW,EAAK,EAAK,EAAK,GAC7BlD,EAAGmD,MAAMnD,EAAGoD,kBACZpD,EAAGqD,WAAWrD,EAAGsD,UAAW,EAAG,GAC/B9pO,EAAI2rC,UAAUy9L,EAAK,EAAG,EAAGA,EAAIptR,MAAOotR,EAAIltR,OAAQ,EAAG,EAAG+xG,EAAcjyG,MAAOiyG,EAAc/xG,U,8GChB3EkrO,sBAAT,YAWkC,QAVDrvM,gBAUC,MAVU,CAAEthB,EAAG,EAAGC,EAAG,GAUrB,MATDwwN,oBASC,MATc,GASd,MARDjwG,WAQC,MARK,EAQL,MAPDC,WAOC,MAPK,IAOL,MANDhlD,mBAMC,MANa,aAMb,MALDigJ,gBAKC,MALU,aAKV,MAJDmV,eAIC,MAJS,aAIT,MAHD1oH,YAGC,MAHM,EAGN,MAFDmrK,yBAEC,MAFmB,GAEnB,MADDC,sBACC,MADgB,IAChB,EACjC7sI,EAAa,CAAErqJ,KAAM,aACvBm3R,GAAW,EAET9iD,EAAe1xO,SAAS8oD,cAAc,OAC5C4oL,EAAalgJ,UAAY,aACzBkgJ,EAAaz2N,MAAMqnB,SAAW,WAC9BovM,EAAaz2N,MAAMy9B,KAAUpW,EAASthB,EAAtC,KACA0wN,EAAaz2N,MAAMnP,IAASw2B,EAASrhB,EAArC,KAGoB,eAAhBw7D,EACFi1J,EAAa5uO,UAAUC,IAAI,yBACF,aAAhB05E,GACTi1J,EAAa5uO,UAAUC,IAAI,uBAI7B,IAAMsiF,EAAQrlF,SAAS8oD,cAAc,SACrCu8B,EAAMrzE,KAAO,OACbqzE,EAAMmM,UAAY,mBAClBnM,EAAMyQ,aAAa,MAAO0rC,EAAI9iH,YAC9B2mE,EAAMyQ,aAAa,MAAO2rC,EAAI/iH,YAC9B2mE,EAAMvnF,MAAQ2zO,EAGd,IAAMgjD,EAAmB,SAACtrK,GACxB,IAAI4sD,GAAe,IAAA3wF,gCAA+BC,EAAMvnF,OACxDi4K,GAAgB5sD,EAChB4sD,EAAe/kK,KAAKywH,IAAID,EAAKxwH,KAAKwwH,IAAIu0C,EAAct0C,IACpDp8C,EAAMvnF,MAAQi4K,EACd2mD,EAAS3mD,GACT1wF,EAAMqvM,cAAc,IAAIC,MAAM,WAE1B,UAAWnhR,cAAgB,EAAAyjC,cAAcE,SAC3CkuC,EAAMvnF,OAAQ,IAAA4hF,kBAAiBq2F,GAAcxwK,QAAQ,IAAM,IAE3D8/E,EAAMvnF,MAAQi4K,GAId6+G,SACAC,SACEC,EAAiB,SAAC3rK,GACtBsrK,EAAiBtrK,GACjB0rK,EAAev/L,YAAW,WACxBs/L,EAAmBpmH,aAAY,kBAAMimH,EAAiBtrK,KAAOmrK,KAC5DC,IAECQ,EAAgB,WACpB9nH,cAAc2nH,GACdrsI,aAAassI,GACbxvM,EAAM2oF,SAIFgnH,EAAkBh1R,SAAS8oD,cAAc,UAC/CksO,EAAgBxjM,UAAY,mBAC5BwjM,EAAgBC,YAAc,IAC9BD,EAAgBE,YAAc,kBAAMJ,EAAe3rK,IACnD6rK,EAAgBG,UAAYJ,EAC5BC,EAAgBI,aAAeL,EAG/B,IAAMM,EAAkBr1R,SAAS8oD,cAAc,UAC/CusO,EAAgB7jM,UAAY,mBAC5B6jM,EAAgBJ,YAAc,IAC9BI,EAAgBH,YAAc,kBAAMJ,GAAgB3rK,IACpDksK,EAAgBF,UAAYJ,EAC5BM,EAAgBD,aAAeL,EAG/BrjD,EAAa3oL,YAAYs8B,GACzBqsJ,EAAa3oL,YAAYisO,GACzBtjD,EAAa3oL,YAAYssO,GAGzBhwM,EAAMiwM,SAAW,SAAC9tL,GAChB,IAAI1pG,GAAQ,IAAAsnF,gCAA+BoiB,EAAMlqF,OAAOxf,OACxDA,EAAQkT,KAAKywH,IAAID,EAAKxwH,KAAKwwH,IAAI1jI,EAAO2jI,IACtCp8C,EAAMvnF,MAAQA,EACd4+N,EAAS5+N,IAIX,IAAMy3R,EAAa,WACbf,IACJA,GAAW,EAEX3iD,IACAH,EAAajzD,SACb,UAAaj0E,YAAYk9C,GACzB1nJ,SAAS8pG,oBAAoB,YAAa2+K,KAG5CpjM,EAAM53B,iBAAiB,WAAW,SAAC+5C,GACf,UAAdA,EAAMppG,MACRinF,EAAM6oF,OACNqnH,QAIJ,IAAM9M,EAAqB,SAACjhL,GACrBkqI,EAAalqF,SAAShgD,EAAMlqF,SAC/Bi4Q,KAaJ,OARA,UAAal1N,SACX,UAAaC,OAAOI,WACpB60N,EACA7tI,EACA,UAAalnF,WAAWojC,SAE1B5jG,SAASytD,iBAAiB,YAAag7N,GAEhC/2C,GA9KT,Y,IACA,O,IACA,OACA,Q,mDAE2B8jD,EAAdA,YAAc,SAACz0M,EAAS00M,EAAMC,EAAMC,GAC/C,OAAO,IAAI34R,SAAQ,SAAAC,GAEjB,IAAM24R,EAAO70M,EAAQ80M,WACfC,EAAO/0M,EAAQg1M,UAGfC,EAAYP,EAAOG,EACnBK,EAAYP,EAAOI,EAGnB9+B,EAAWhmP,KAAKynE,KAAK,SAAAu9M,EAAa,GAAb,SAAiBC,EAAa,IAAKN,EAG9D50M,EAAQ9lE,MAAMqnB,SAAW,WACzBy+C,EAAQ9lE,MAAMy9B,KAAOk9O,EAAO,KAC5B70M,EAAQ9lE,MAAMnP,IAAMgqR,EAAO,KAG3B,IAAMI,EAAYC,YAAYC,MAc9BnhM,uBAbA,SAASb,EAAQiiM,GACf,IAAMC,EAAcD,EAAcH,EAC5BK,EAAWvlR,KAAKwwH,IAAI80J,EAAct/B,EAAU,GAC5Ch2O,EAAI40Q,EAAOI,EAAYO,EACvBt1Q,EAAI60Q,EAAOG,EAAYM,EAC7Bx1M,EAAQ9lE,MAAMy9B,KAAO13B,EAAI,KACzB+/D,EAAQ9lE,MAAMnP,IAAMmV,EAAI,KACpBs1Q,EAAW,EACbthM,sBAAsBb,GAEtBn3F,WAOau5R,EAARA,MAAQ,SAAClxC,GACpB,OAAO,IAAItoP,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAASqoP,Q,2OCnDpD,Y,IACA,O,IACA,QACA,Q,IACA,Q,IACA,O,mDAEkCmxC,EAArBA,mBAAqB,aAICC,EAAtBA,oBAAsB,aAcEC,EAAxBA,sBAAwB,SACnCC,GAQG,IAPH1pR,EAOG,uDAPM,EAAAipC,cAAckB,UACvBw/O,EAMG,wDALH36N,EAKG,uDALe,KAClBy5M,EAIG,wDAHHx4M,EAGG,uDAHU,KACbC,EAEG,uDAFW,GACd05N,EACG,uDADmB,GAElBC,EAAe,IAAI,EAAJ,QAAYH,EAAYC,EAAsBlhB,GAC7DqhB,GAAc,IAAA/yM,0BAAyB8yM,GAO3C,GANIC,EAAc,IAEhBD,EAAe,IAAI,EAAJ,QAAYH,EAAW5wK,UAAW6wK,EAAsBlhB,GACvEqhB,GAAc,IAAA/yM,0BAAyB8yM,IAGrCD,EAAoBG,kBAAoBD,EAAcF,EAAoBG,iBAI5E,OAHAr4R,QAAQ4B,IAAI,6BACZ5B,QAAQ4B,IAAI,eAAgBw2R,GAC5Bp4R,QAAQ4B,IAAI,uBAAwBs2R,EAAoBG,kBACjD,KAET,GAAIH,EAAoBI,kBAAoBF,EAAcF,EAAoBI,iBAI5E,OAHAt4R,QAAQ4B,IAAI,2BACZ5B,QAAQ4B,IAAI,eAAgBw2R,GAC5Bp4R,QAAQ4B,IAAI,qBAAsBs2R,EAAoBI,kBAC/C,KAET,GAAIJ,EAAoBK,oBAAqB,4BAC3C,YAA0BJ,EAA1B,+CAAwC,KAA7BK,EAA6B,QACtC,GAAIA,EAAYnzF,kBAAoB6yF,EAAoBK,oBAItD,OAHAv4R,QAAQ4B,IAAI,2BACZ5B,QAAQ4B,IAAI,wBAAyB42R,EAAYnzF,mBACjDrlM,QAAQ4B,IAAI,wBAAyBs2R,EAAoBK,qBAClD,MANgC,8EAW7C,OAAO,UAAiBl6N,SACtB85N,EAAc,EAAAl+O,WAAWC,QAASojB,EAAiBhvD,EAAQiwD,EAAYC,IAUrCi6N,EAAzBA,uBAAyB,SAACxqO,EAAQyqO,EAAaC,GAC1D,IAAMp7O,EAAO,IAAI,EAAJ,QAAS0Q,EAAQyqO,EAAaC,GAE3C,OADA,UAAqB1zO,MAAM+b,YAAYzjB,GAChCA,GAOgCq7O,EAA5BA,0BAA4B,SAAC3qO,KAQC4qO,EAA9BA,4BAA8B,SAAC5qO,M,+HC/F5C,OACA,Q,uDAEqB6qO,G,2GAwCLC,GACZ,GAAGA,EAAS,CACV,IAAIhyR,EAAMgyR,EAAQ/xR,aAAa,OAC/B,GAAGD,EACD,OAAOA,EAGT,GADAA,EAAMgyR,EAAQ/xR,aAAa,SAEzB,OAAOD,EAAIJ,QAAQ,2DAA4D,IAAIA,QAAQ,QAAS,IAGxG,MAAO,O,OAjDF60O,YAAc,SAACw9C,EAAYrtO,EAAKvpC,EAAGC,EAAG1a,EAAOE,GAA8C,IAAtC+wO,IAAsC,yDAAnBqgD,IAAmB,yDAC5FlvO,EAAQ,UAAOA,MACf0oI,EAAMrxL,SAAS02F,eAAekhM,GAClC,GAAKvmG,EAAL,CAIA,IAAI34H,EAAM,IAAItB,MACZk6H,GAAM,IAAIC,eAAgBC,kBAAkBH,GAC5CI,EAAQC,KAAKJ,GACXh2G,EAAOt6D,EACPu6D,EAAOt6D,EACP62Q,EAAkB,GAEtBp/N,EAAI/yD,IAAM,6BAA+B8rL,EACrComG,IACFtxR,EAAQA,EAAQ,UAAOoiD,MAAQ,UAAOC,aACtCniD,EAASA,EAAS,UAAOkiD,MAAQ,UAAOC,cAEtC4uL,IACFl8J,GAAQ/0E,EAAQ,EAChBg1E,GAAQ90E,EAAS,IAGf,IAAAuF,UACF8rR,EAAkBhgM,WAAK,GAAKwgJ,OAAO5/K,GAAKnzD,QAAQ,+BAAgC,OAE7E,IAAAyG,QAEK8rR,GACRvtO,EAAIwtO,QAAQD,EAAiBx8M,EAAMC,EAAO,EAAG,EAAG,GAFhDhxB,EAAI2rC,UAAUx9B,EAAM4iB,EAAMC,EAAOh1E,EAAQoiD,EAAOliD,EAASkiD,QAxBzD/pD,QAAQC,MAAM,wBAAyB+4R,I,aANxBF,G,yQCHrB,Q,IACA,M,mDAEmDM,EAAtCA,oCAAsC,SAAChpO,EAAUxO,GAAoC,IAA7BsM,EAA6B,uDAArBtM,EAAM6R,WAC3E4lO,GAAkB,IAAAx8M,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GAC/D/Q,EAAc,UAAMnH,WAAWmH,YAC/Bg+C,EAAM1N,EAAMoR,cAEZqwI,EAAkB,CAACjhL,EAAGi3Q,EAAgBj3Q,EAAIktC,EAAIltC,EAAGC,EAAGg3Q,EAAgBh3Q,EAAIitC,EAAIjtC,GAC9Ei3Q,EAAqB,CAACl3Q,GAAI9Q,EAAYqX,YAAatG,EAAGjQ,KAAK2nE,QAAQspH,EAAgBhhL,GAAI,IACvFk3Q,EAAqB,CAACn3Q,EAAG9Q,EAAYqX,YAAatG,EAAGjQ,KAAK2nE,QAAQspH,EAAgBhhL,GAAI,IAPM,EAQjCm3Q,EAC7DtrO,EAAOorO,EAAoBC,EAAoBl2F,GAT+C,qBAQ3Fo2F,EAR2F,KAQ/DC,EAR+D,KAYhG,OAAID,GAA8BC,GAChCD,EAA2Br6J,kBAAoB,CAACh9G,EAAGhQ,KAAK2nE,QAAQ0/M,EAA2Br6J,kBAAkBh9G,GAAI,GAAIC,EAAGjQ,KAAK2nE,QAAQs/M,EAAgBh3Q,EAAIitC,EAAIjtC,GAAI,IACjKq3Q,EAA2Bt6J,kBAAoB,CAACh9G,EAAGhQ,KAAK2nE,QAAQ2/M,EAA2Bt6J,kBAAkBh9G,GAAI,GAAIC,EAAGjQ,KAAK2nE,QAAQs/M,EAAgBh3Q,EAAIitC,EAAIjtC,GAAI,IAE1J,CAACo3Q,EAA4BC,IAG/B,IAGwCC,EAApCA,kCAAoC,SAACvpO,EAAUxO,GAAqC,IAA7BsM,EAA6B,uDAArBtM,EAAM6R,WAC1E4lO,GAAkB,IAAAx8M,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GAC/D/Q,EAAc,UAAMnH,WAAWmH,YAC/Bg+C,EAAM1N,EAAMoR,cAEZqwI,EAAkB,CAACjhL,EAAGi3Q,EAAgBj3Q,EAAIktC,EAAIltC,EAAGC,EAAGg3Q,EAAgBh3Q,EAAIitC,EAAIjtC,GAI9Ei3Q,EAAqB,CAACl3Q,EAAGhQ,KAAK2nE,QAAQs/M,EAAgBj3Q,EAAIktC,EAAIltC,GAAI,GAAIC,GAAI/Q,EAAY4X,cACtFqwQ,EAAqB,CAACn3Q,EAAGhQ,KAAK2nE,QAAQs/M,EAAgBj3Q,EAAIktC,EAAIltC,GAAI,GAAIC,EAAG/Q,EAAY4X,cAVM,EAclCswQ,EAC3DtrO,EAAOorO,EAAoBC,EAAoBl2F,GAf8C,qBAc1Fu2F,EAd0F,KAc/DC,EAd+D,KAkB/F,OAAID,GAA6BC,GAC/BD,EAA0Bx6J,kBAAoB,CAACh9G,EAAGhQ,KAAK2nE,QAAQs/M,EAAgBj3Q,EAAIktC,EAAIltC,GAAI,GAAIC,EAAGjQ,KAAK2nE,QAAQ6/M,EAA0Bx6J,kBAAkB/8G,GAAI,IAC/Jw3Q,EAA0Bz6J,kBAAoB,CAACh9G,EAAGhQ,KAAK2nE,QAAQs/M,EAAgBj3Q,EAAIktC,EAAIltC,GAAI,GAAIC,EAAGjQ,KAAK2nE,QAAQ8/M,EAA0Bz6J,kBAAkB/8G,GAAI,IAIxJ,CAACu3Q,EAA2BC,IAG9B,IAjDF,IA4DML,EAA+BA,EAA/BA,6BAA+B,SAACtrO,EAAO4rO,EAAoBC,EAAoBC,GAC1F,IAAI3zE,EAA6B4zE,EAA8B/rO,EAAO4rO,EAAoBC,GAC1F,GAAI1zE,EAA2B5pN,QAAU,EAAG,CAC1C,IAAIoiI,EAAqBwnF,EAA2Bv2M,KAAI,SAAAoqR,GAAA,OAAgBA,EAAa96J,qBACjF+6J,GAAe,IAAAlgN,iBAAgB+/M,EAAan7J,GAEhDA,EAD8CwnF,EAA2Br3M,QAAO,SAAAkrR,GAAA,OAAgBA,EAAa96J,oBAAsB+6J,KACtErqR,KAAI,SAAAoqR,GAAA,OAAgBA,EAAa96J,qBAE9F,IAAIg7J,GAAe,IAAAngN,iBAAgB+/M,EAAan7J,GAEhD,OAAOwnF,EAA2Br3M,QAAO,SAAAkrR,GACvC,OAAOA,EAAa96J,oBAAsB+6J,GAAgBD,EAAa96J,oBAAsBg7J,KAIjG,OAAO/zE,GAUI4zE,EAAgCA,EAAhCA,8BAAgC,SAAC/rO,EAAO4rO,EAAoBC,GACvE,IAAIl7J,EAAqB,GAezB,OAbA3wE,EAAM9nD,SAAQ,SAAC2wD,GACb,IAAIqoE,GAAoB,IAAA18C,mBACtBtwE,KAAK2nE,QAAQhjB,EAAK0C,KAAKr3C,GAAI,GAAIhQ,KAAK2nE,QAAQhjB,EAAK0C,KAAKp3C,GAAI,GAC1DjQ,KAAK2nE,QAAQhjB,EAAKwJ,GAAGn+C,GAAI,GAAIhQ,KAAK2nE,QAAQhjB,EAAKwJ,GAAGl+C,GAAI,GACtDjQ,KAAK2nE,QAAQ+/M,EAAmB13Q,GAAI,GAAIhQ,KAAK2nE,QAAQ+/M,EAAmBz3Q,GAAI,GAC5EjQ,KAAK2nE,QAAQggN,EAAmB33Q,GAAI,GAAIhQ,KAAK2nE,QAAQggN,EAAmB13Q,GAAI,IAC5E,GAEE+8G,GACFP,EAAmB9hI,KAAK,CAACqiI,oBAAmBroE,YAIzC8nE,GAcgCw7J,EAA5BA,0BAA4B,SAACC,EAASC,EAASC,EAAcC,EAAQC,EAAQC,EAAQC,GAChG,IAAM/+M,EAAK8+M,EAASF,EACd3+M,EAAK8+M,EAASF,EACd/pR,EAAIkrE,EAAKA,EAAKC,EAAKA,EACnBlrE,EAAI,GAAKirE,GAAM4+M,EAASH,GAAWx+M,GAAM4+M,EAASH,IAGlDryB,EAAQt3P,EAAIA,EAAI,EAAID,GAFhB2pR,EAAUA,EAAUC,EAAUA,EAAUE,EAASA,EAASC,EAASA,EACzE,GAAKJ,EAAUG,EAASF,EAAUG,GAAUF,EAAeA,GAG/D,GAAItyB,EAAQ,EACV,OAAO,KACF,GAAc,IAAVA,EAAa,CAEtB,IAAM/oQ,GAAKyR,GAAK,EAAID,GAGpB,MAAO,CAAEyR,EAFaq4Q,EAASt7R,EAAI08E,EAERx5D,EADLq4Q,EAASv7R,EAAI28E,GAInC,IAAM++M,IAAOjqR,EAAIwB,KAAKynE,KAAKquL,KAAW,EAAIv3P,GACpCmqR,IAAOlqR,EAAIwB,KAAKynE,KAAKquL,KAAW,EAAIv3P,GAK1C,MAAO,CAAEyqE,GAJcq/M,EAASI,EAAKh/M,EAIRR,GAHNq/M,EAASG,EAAK/+M,EAGYR,GAF1Bm/M,EAASK,EAAKj/M,EAEgCN,GAD9Cm/M,EAASI,EAAKh/M,K,iHC9IzC,Q,IAIA,O,IACA,O,uDAEqBi/M,G,0CAOZC,8BAAgC,SAAC/sO,EAAQQ,GAC9C,IAAIwsO,EAAe,GACnB,IAAK,IAAMC,KAAcjtO,EACvB,GAAIA,EAAOrxD,eAAes+R,GAAa,CACrC,IAAMngN,EAAM9sB,EAAOxxD,OACb+/G,EAAUvuD,GAAQitO,GAClBC,EAAWltO,IAASitO,EAAangN,EAAM,GAAKA,GAC5CkvF,EAAOh8G,IAASitO,EAAa,GAAKngN,GAElCytI,GAAa,IAAAtkI,mBAAkBs4B,EAAS2+K,EAAU1sO,GAClDg6J,GAAa,IAAAvkI,mBAAkBs4B,EAASytD,EAAMx7G,GAC9C2sO,GAAgB,IAAAphN,aAAYwuI,EAAYC,GAE9CwyE,EAAal+R,KAAK,CAChBs+R,aAAc7+K,EACd4+K,cAAeA,IAKrB,OAAOH,G,EASFpkF,4BAA8B,SAAC5oJ,EAAQQ,EAAUmoJ,GAGtD,OAF4BmkF,EAAeC,8BAA8B/sO,EAAQQ,GAEtDz/C,QAAO,SAAAssR,GAChC,OAAO1kF,EAAc3uM,MAAK,SAAAszR,GACxB,OAAOA,IAAgBD,EAAYD,aAAarrR,U,EAK/C0uO,mBAAqB,SAAC/yL,EAAK8yL,GAEhC9yL,EAAI+W,YACJ/W,EAAIgX,OAAO87K,EAAmB,GAAG28C,cAAch5Q,EAAGq8N,EAAmB,GAAG28C,cAAc/4Q,GAH/B,2BAIvD,YAAgCo8N,EAAhC,+CAAoD,KAAzC+8C,EAAyC,QAClD7vO,EAAI6W,UAAY,EAChB7W,EAAIiX,OAAO44N,EAAkBJ,cAAch5Q,EAAGo5Q,EAAkBJ,cAAc/4Q,IANzB,6EAQvDspC,EAAIiX,OAAO67K,EAAmB,GAAG28C,cAAch5Q,EAAGq8N,EAAmB,GAAG28C,cAAc/4Q,GACtFspC,EAAImX,SACJnX,EAAI6tG,YAVmD,2BAavD,YAAgCilF,EAAhC,+CAAoD,KAAzC+8C,EAAyC,QAClD7vO,EAAI+W,YACJ/W,EAAI6W,UAAY,EAChB7W,EAAIgX,OAAO64N,EAAkBH,aAAaj5Q,EAAGo5Q,EAAkBH,aAAah5Q,GAC5EspC,EAAIiX,OAAO44N,EAAkBJ,cAAch5Q,EAAGo5Q,EAAkBJ,cAAc/4Q,GAC9EspC,EAAI6tG,YACJ7tG,EAAImX,UAnBiD,+E,EAuBlD+7K,aAAe,SAAClzL,EAAKoL,GAE1B,IAAM0kO,EAAiB1kO,EAAK0C,KAAKlH,gBAC3BmpO,EAAe3kO,EAAKwJ,GAAGhO,gBAC7B5G,EAAI+W,YACJ/W,EAAIgX,OAAO84N,EAAer5Q,EAAGq5Q,EAAep5Q,GAC5CspC,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,UAAa,UAAW72D,aAAa8wH,cACvDnxE,EAAIiX,OAAO84N,EAAat5Q,EAAGs5Q,EAAar5Q,GACxCspC,EAAImX,SACJnX,EAAI6tG,a,aA/EauhI,G,iJCPrB,O,IACA,O,IAEA,Q,IACA,OACA,Q,IAOA,Q,IACA,O,IACA,O,IAEA,S,IACA,Q,IACA,Q,IACA,MAEA,Q,IAKA,Q,IACA,QACA,S,uDAEqBY,E,WAuDnB,WAAY5kO,EAAM6kO,EAAcxoR,GAAM,sCAnDtCnG,KAAOjF,KAmD+B,KAlDtCqvD,UAAY,KAkD0B,KAjDtCD,UAAY,KAiD0B,KAhDtChkD,KAAO,KAgD+B,KA/CtCrE,MAAQ,CACNqhD,SAAU,GACVtB,WAAW,EACXC,kBAAmB,KACnBokL,iBAAiB,EACjBC,aAAc,KACdC,mBAAmB,EACnBwoD,YAAa,CACXh2O,KAAK,GACL+0B,SAAU,CAACx4D,EAAG,EAAGC,EAAG,GACpBy5Q,eAAgB,EAChB7tO,OAAQ,CAACmsB,OAAQ,KAAMC,OAAQ,MAC/BwD,YAAa,GAEfjD,SAAU,CACRx4D,EAAG,EACHC,EAAG,GAELxa,OAAQ,IACRk0R,aAAc,GACdxmD,UAAW,EACXymD,gBAAiB,GACjBC,mBAAoB,GAyBgB,KAvBtCz2J,OAAS,CAEP02J,eAAgB,EAChBC,kBAAmB,GACnBC,gBAAiB,GACjBC,YAAa,GACbC,aAAc,GACdC,mBAAoB,GACpBC,kBAAmB,GACnBC,aAAc,GACdC,iBAAkB,GAClBC,gBAAiB,GACjBC,cAAe,UAAa,UAAO5wR,aAAa6wH,QAChDs1G,UAAW,UAAa,UAAOnmO,aAAa6wH,QAC5CggK,gBAAiB,UACjBzqD,WAAY,WACZC,WAAY,IAOwB,KALtCjkC,cAAgB,GAKsB,KAJtC0uF,UAAY,GAI0B,KAHtCC,sBAAwB,GAGc,KAFtCjhC,iBAAmB,GAEmB,KAQtCkhC,iBAAmB,SAAC99R,GAAY,EAAKkvM,cAAgBlvM,GARf,KAStC08P,YAAc,WAAQ,OAAO,EAAKkhC,WATI,KAUtCp0R,UAAY,WAAQ,OAAO,EAAKquD,MAVM,KAWtCkmO,YAAc,SAAC/9R,GAAY,EAAK49R,UAAY59R,GAXN,KAYtCmgE,aAAe,SAACngE,GAAY,EAAKk4D,UAAYl4D,GAZP,KActCg+R,kBAAoB,SAAC9iN,EAAQ88J,EAAMp3G,EAAMq9J,EAAiBC,EAAkBC,EAAeC,EAAgBC,GAEzG,IAAIC,EAAuB,KACvBC,EAAsB,KAC1B,GAAIrjN,EAAO88J,GAAQp3G,EAAOu9J,EAAcnmD,IAGtC,GAFAkmD,EAAmBC,EAAcnmD,GAAQ,EAAK1xG,OAAO02J,eACrDsB,EAAuBH,EACpBE,EAAgB,CACjB,IAAIG,EAAatjN,EAAO88J,GAAQmmD,EAAcnmD,GAAQp3G,EACtD,EAAK69J,WAAWD,EAAYtjN,EAAO88J,GAAQp3G,EAAMu9J,GAAe,GAChE,EAAKO,iBAAiBP,GACtBD,EAAmBC,EAAcnmD,SAE9B,GAAI98J,EAAO88J,GAAQp3G,EAAOw9J,EAAepmD,KAC9CimD,EAAkBG,EAAepmD,GAAQ,EAAK1xG,OAAO02J,eACrDuB,EAAsBH,EACnBC,GAAgB,CACjB,IAAIG,EAAatjN,EAAO88J,GAAQomD,EAAepmD,GAASp3G,EACxD,EAAK69J,WAAWD,EAAYA,EAAYJ,GAAgB,GACxD,EAAKM,iBAAiBN,GACtBH,EAAkBG,EAAepmD,GAarC,OARI98J,EAAO88J,GAAQp3G,GAAQq9J,EACzB/iN,EAAO88J,GAAQimD,EACN/iN,EAAO88J,GAAQp3G,GAAQs9J,EAChChjN,EAAO88J,GAAQkmD,EAEfhjN,EAAO88J,IAASp3G,EAGX,CAAC09J,EAAsBC,IA/CM,KAkDtCI,qBAAuB,SAAC/9J,EAAM9rE,EAAO5D,GAAsC,IAA5B0tO,EAA4B,wDACzE,GAA0B,WAAvB,UAAOlpR,YAA0B,CAClC,IAAIgoE,EAAS,EACb,OAAO,EAAK7lB,KAAKo6G,kBACf,KAAK,EAAAtzF,YAAYE,WACfnB,EAASkhN,EAAkB1tO,EAAShuC,EAAI4xC,EAAMzB,gBAAgBnwC,EAAIguC,EAAS/tC,EAAI2xC,EAAMzB,gBAAgBlwC,EACrG,MACF,KAAK,EAAAw7D,YAAYC,SACflB,EAASkhN,EAAiB1tO,EAAS/tC,EAAI2xC,EAAMzB,gBAAgBlwC,EAAI+tC,EAAShuC,EAAI4xC,EAAMzB,gBAAgBnwC,EACpG,MACF,KAAK,EAAAy7D,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,MACF,KAAK,EAAAJ,YAAYK,UACjB,KAAK,EAAAL,YAAYM,YAGb,EAAKqnD,OAAOm3J,gBAAkB,EAAI//M,GAAUA,EAAS,EAAI,EAAK4oD,OAAOm3J,kBACzE78J,GAAc,UAAO70E,uBAIzB,OAAO60E,GAxE6B,KA2EtCooC,UAAY,WAAQ,OAAO,EAAKkmC,eA3EM,KA4EtC2vF,wBAA0B,WAAQ,OAAO,EAAKhB,uBA5ER,KA6EtCiB,qBAAuB,WAAQ,OAAO,EAAKjvR,MAAM+/C,WA7EX,KA+EtCuR,QAAU,SAACuyG,GACLA,IACF,UAAahnE,YAAY,GACzB,EAAKwiG,cAAchoM,SAAQ,SAAC4tD,GAAD,OAAWA,EAAMqM,aAC5C,EAAKy8N,UAAU12R,SAAQ,SAACy1P,GACtBA,EAAQp/P,OAAO4jE,UACXw7L,EAAQtmB,WACVsmB,EAAQtmB,UAAUl1K,aAGtB,EAAKy7L,iBAAiBz7L,UAElB,EAAKjtD,OAAS,EAAAmzC,qBAAqB5J,QACrC,UAAUoT,kBAAkByrM,cAAc,GACjC,EAAKpoP,OAAS,EAAAmzC,qBAAqB1D,cAC5C,UAAUmN,uBAAuBwrM,cAAc,KA9Ff,KAmGtCx9L,KAAO,WAAuB,IAAtB7H,EAAsB,uDAAT,KACf,EAAKY,KAAKqJ,SACZ,EAAKrJ,KAAKqJ,QAAQC,UAEhBlK,GACF,EAAK8nO,eAAc,GAErB,EAAKC,oBAAoB/nO,GACzB,EAAKgoO,cAAchoO,GACnB,EAAKm8G,aAGL,EAAK87B,cAAchoM,SAAQ,SAAC4tD,EAAOp+C,GACnB,IAAVA,GAAeA,IAAU,EAAKw4L,cAAc3xM,OAAS,EACvD,EAAK2hS,UAAUpqO,EAAO,SAEtB,EAAKoqO,UAAUpqO,EAAO,oBAK1B,aAAE,kBAAkBkL,SAAS,qBAxHO,KA2HtCozG,WAAa,WACX,UAAa7wG,SACX,UAAaC,OAAOM,OACpB,EAAKC,OACL,EACA,UAAaL,WAAW8jC,SAG1B,UAAajkC,SACX,UAAaC,OAAOC,WACpB,EAAKhR,YACL,EACA,UAAaiR,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOI,WACpB,EAAK3R,YACL,EACA,UAAayR,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOK,SACpB,EAAKvR,UACL,EACA,UAAaoR,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOglC,YACpB,EAAKsC,aACL,EACA,UAAapnC,WAAWojC,UAzJU,KA4JtCjlC,iBAAmB,WACjB,UAAa6rC,YAAY,GACzB,EAAKkwJ,iBAAiB/7L,mBAFC,2BAGvB,YAAoB,EAAK+8N,UAAzB,+CAAqC,KAA5BjhC,EAA4B,QACnCA,EAAQp/P,OAAOsjE,mBACX87L,EAAQtmB,WACVsmB,EAAQtmB,UAAUx1K,oBANC,+EA5Ja,KAsKtC46E,aAAe,WACb,EAAK23B,aACL,EAAKwpF,iBAAiBnhH,eAFH,2BAGnB,YAAoB,EAAKmiJ,UAAzB,+CAAqC,KAA5BjhC,EAA4B,QACnCA,EAAQp/P,OAAOk+I,eACXkhH,EAAQtmB,WACVsmB,EAAQtmB,UAAU56F,gBANH,+EAtKiB,KAiLtCgvB,oBAAsB,WACpB,IACE7tG,EAAoC,WAAvB,UAAOlnD,YAA2B,EAAKmiD,KAAK0F,kBAAoB,EAAK1F,KAAKyF,gBAoBzF,OAnBkC,WAAvB,UAAO5nD,YAA2B,EAAK7F,MAAMgtR,aAAe,EAAKhtR,MAAMlH,QAiB5Di0D,GArMc,KA0MtCmrG,OAAS,WACP,MAAO,CACLmnC,cAAgB,EAAKA,cAAct+L,KAAI,SAACkkD,GACtC,OAAOA,EAAMizG,YAEfl4J,MAAO,EAAKA,MACZ+tR,UAAW,EAAKA,UAAUhtR,KAAI,SAAC+rP,GAC7B,OAAOA,EAAQwiC,qBAjNiB,KAsNtCnoO,OAAS,SAACa,EAAMunO,GAAkB,2BAChC,YAA0BA,EAAclwF,cAAxC,+CAAuD,KAA5CI,EAA4C,QAC/C+vF,EAAe,IAAI,EAAJ,QACrBA,EAAaroO,OAAOs4I,GAEpB,EAAKJ,cAAcrxM,KAAKwhS,IALM,6EAOhC,EAAKxvR,MAAQuvR,EAAcvvR,MAC3B,EAAKA,MAAQuvR,EAAcvvR,OA9NS,KAiOtCkvR,cAAgB,WAA2C,IAA1CO,EAA0C,wDACrDC,GAAU,IAAAlkN,qBAAoB,EAAKxjB,KAAK0C,KAAM,EAAK1C,KAAKwJ,GAAI,GAC9Dm+N,GAAU,IAAAnkN,qBAAoB,EAAKxjB,KAAK0C,KAAM,EAAK1C,KAAKwJ,GAAI,IAFL,EAGV,EAAKxJ,KAAKsvI,8BAHA,qBAGpDoB,EAHoD,KAG/BC,EAH+B,KAInD0G,EAAgBA,CACpB,IAAI,EAAJ,QAAU3G,EAAoBrlL,EAAGqlL,EAAoBplL,IADjD,qBAEAm8Q,EAAgC,CAAC,IAAI,EAAJ,QAAUC,EAAQr8Q,EAAGq8Q,EAAQp8Q,GAAI,IAAI,EAAJ,QAAUq8Q,EAAQt8Q,EAAGs8Q,EAAQr8Q,IAAM,IAFrG,CAGJ,IAAI,EAAJ,QAAUqlL,EAAkBtlL,EAAGslL,EAAkBrlL,KAGnD,EAAK26Q,iBAAiB5uF,IA3Oc,KA8OtC8vF,oBAAsB,WAAuB,IAAtB/nO,EAAsB,uDAAT,KAClC,EAAKi4I,cAAchoM,SAAQ,SAAC4tD,EAAOp+C,GACjC,IAAIq0J,EAAOr0J,EAAQ,EAChB,EAAKw4L,cAAcnkC,IACpB,EAAK00H,4BAA4B3qO,EAAO,EAAKo6I,cAAcnkC,GAAO9zG,EAAaA,EAAW2mO,UAAUlnR,GAAS,UAlP7E,KAuPtCuoR,cAAgB,WAAuB,IAAtBhoO,EAAsB,uDAAT,KACtBykB,GAAW,IAAAZ,aAAY,EAAKjjB,KAAK0C,KAAM,EAAK1C,KAAKwJ,IACrDq/D,EAAgB,EAAK7oE,KAAKuuE,mBAC1B+sG,EAAa,EAAK7sG,OAAO6sG,WAEvBusD,EAAgB,EAClBC,GAAiB,EAAKr5J,OAAO82J,aAAejqD,EAC5C71L,GAAQ,IAAA+oC,0BAAyB,EAAKxuB,KAAK0C,KAAM,EAAK1C,KAAKwJ,IAE7D,OAAQq/D,EAAc/hD,aACpB,IAAK,aACgC,SAA/B+hD,EAAcwE,eAChB5nF,GAAS,IACTqiP,EAAgB,EAAKr5J,OAAO82J,aAAejqD,GAgBjD,IAAIysD,EAAY,CAKd18Q,EAAGw4D,EAASx4D,EACZC,EAAGu4D,EAASv4D,EACZmhH,QAASo7J,EACTr7J,QAASs7J,EACThhN,YAAa,EAAK9mB,KAAKguI,qBACvBvoJ,MAAOA,GAELgpF,EAAS,CACX8sG,YAAa,UAAU7vN,KAAKC,cAAc,CAAC1S,GAAI,mCAAqC,MAGlF+uR,EAAe5oO,EACfA,EAAW2mO,UAAU,GACnB3mO,EAAW2mO,UAAU,GAAGj1R,OACxB,KACqB,WAAvB,UAAO+M,YAA2B,EAAK7F,MAAMgtR,aAAe,EAAKhtR,MAAMlH,OAE3E,EAAKi0P,iBAAmB,IAAI,EAAJ,QAAeijC,EAAaD,EAAWt5J,EAAQ,EAAM,EAAKw5J,kCA1S9C,KA6StC38I,mBAAqB,WAAM,MACsB,EAAKtrF,KAAKsvI,8BADhC,qBACpBoB,EADoB,KACCC,EADD,KAGnB9qD,EAAOxqI,KAAKwwH,IAAI6kE,EAAoBrlL,EAAGslL,EAAkBtlL,GACzD06H,EAAO1qI,KAAKwwH,IAAI6kE,EAAoBplL,EAAGqlL,EAAkBrlL,GACzDw6H,EAAOzqI,KAAKywH,IAAI4kE,EAAoBrlL,EAAGslL,EAAkBtlL,GACzD26H,EAAO3qI,KAAKywH,IAAI4kE,EAAoBplL,EAAGqlL,EAAkBrlL,GANtC,uBASzB,YAA2B,EAAK+rL,cAAhC,+CAA+C,KAApCmjB,EAAoC,QAC7CA,EAAanvM,EAAIhQ,KAAKywH,IAAI+Z,EAAMxqI,KAAKwwH,IAAIia,EAAM00E,EAAanvM,IAC5DmvM,EAAalvM,EAAIjQ,KAAKywH,IAAIia,EAAM1qI,KAAKwwH,IAAIma,EAAMw0E,EAAalvM,KAXrC,6EAezB,IAAIs5I,EAAa,EAAKyyC,cAAc,GAClC6wF,EAAW,EAAK7wF,cAAc,EAAKA,cAAc3xM,OAAS,GAE5Dk/J,EAAWv5I,EAAIqlL,EAAoBrlL,EACnCu5I,EAAWt5I,EAAIolL,EAAoBplL,EACnC48Q,EAAS78Q,EAAIslL,EAAkBtlL,EAC/B68Q,EAAS58Q,EAAIqlL,EAAkBrlL,EAE/B,EAAK68Q,uBACL,EAAKC,6BArU+B,KAwUtCR,4BAA8B,SAACvkN,EAAQC,GAAiC,IAAzB+kN,EAAyB,uDAAT,KACzD5iP,GAAQ,IAAA+oC,0BAAyB,EAAKxuB,KAAK0C,KAAM,EAAK1C,KAAKwJ,IACzDqa,GAAW,IAAAZ,aAAYI,EAAQC,GACnCulD,EAAgB,EAAK7oE,KAAKuuE,mBAC1B+sG,EAAa,EAAK7sG,OAAO6sG,WAKzB5jL,GAAW,IAAA6qB,kBAAiBc,EAAQC,GACpCglN,EAAc,EAAKjxF,cAAcpsM,QAAQo4E,GAIvCmpD,GAHY,EAAK6qE,cAAcpsM,QAAQq4E,IAG5B,EAAKmrD,OAAO22J,kBAAoB9pD,GAC7C7uG,EAAU,EAMZ,OAAQ5D,EAAc/hD,aACpB,IAAK,aACgC,SAA/B+hD,EAAcwE,eAChB5nF,GAAS,IACT+mF,EAAU,EAAKiC,OAAO82J,aAAejqD,GA2B3C,IAAI/iL,EAAM,CACRltC,EAAGw4D,EAASx4D,EACZC,EAAGu4D,EAASv4D,EACZmhH,QAASA,EACTD,QAASA,EACT1lD,YAAa,EAAK9mB,KAAKguI,qBACvBvoJ,MAAOA,GAWLgpF,EAAS,CACX7B,UAAU,GAGR27J,EAAa,IAAI,EAAJ,QAAe7wO,EAAUa,EAAKk2E,EAAQ,EAAM,EAAK+5J,iCAC9D13R,EAASu3R,EACTA,EAAcv3R,QAAUu3R,EAAcv3R,OACf,WAAvB,UAAO+M,YAA2B,EAAK7F,MAAMgtR,aAAe,EAAKhtR,MAAMlH,OAKvEg0P,EAAU,IAAI,EAAJ,QAAmByjC,EAAYz3R,EAAQ,MAErD,EAAKi1R,UAAUn/R,OAAO0hS,EAAa,EAAGxjC,IA3ZF,KAoatCjpB,aAAe,WACb,MAA8B,WAAvB,UAAOh+N,aACV,IAAAmrE,yBAAwB,EAAKhpB,KAAKyF,iBAAiBjC,YACnD,EAAKxD,KAAKyF,iBAvasB,KA0atCgjO,qBAAuB,SAACpvO,GACtB,IAAM64F,EAAU,EAAKmlD,cAAc9kM,QAAO,SAACqH,EAAGC,GAC5C,OAAO,EAAK0oE,iBAAiB3oE,EAAGy/C,GAAY,EAAKkpB,iBAAiB1oE,EAAGw/C,GAAYz/C,EAAIC,KAEjF6uR,EAAe,EAAKrxF,cAAcpsM,QAAQinJ,GAC5Cy2I,EAAc,KACdC,GAAS,EACT//J,EAAgB,EAAK7oE,KAAKuuE,mBAE9B,GAAI,EAAK8oE,cAAcqxF,EAAe,GAG/B,GAAI,EAAKrxF,cAAcqxF,EAAe,GAGtC,CACL,IAAI5iI,EAAY,EAAKuxC,cAAcqxF,EAAe,GAC9C3iI,EAAY,EAAKsxC,cAAcqxF,EAAe,GAC9CG,EAAoB32I,EAAQ12F,gBAIhC,OAAQqtE,EAAc/hD,aACpB,IAAK,aACH8hN,EAAwC,SAA/B//J,EAAcwE,aAA0Bh0E,EAAShuC,EAAIw9Q,EAAkBx9Q,EAAIguC,EAAShuC,EAAIw9Q,EAAkBx9Q,EACnH,MAEF,IAAK,WACHu9Q,EAAwC,UAA/B//J,EAAcwE,aAA2Bh0E,EAAS/tC,EAAIu9Q,EAAkBv9Q,EAAI+tC,EAAS/tC,EAAIu9Q,EAAkBv9Q,EAWxHq9Q,EAAcC,EAAS9iI,EAAYC,OA1BnC4iI,EAAc,EAAKtxF,cAAcqxF,EAAe,GAChDE,GAAS,OAJTD,EAAc,EAAKtxF,cAAcqxF,EAAe,GAChDE,GAAS,EA+BX,MAAO,CAAC12I,EAASy2I,EAAaC,IApdM,KAudtCE,sBAAwB,SAAC52I,EAASy2I,EAAaC,GAC7C,IAAM/kN,GAAW,IAAAZ,aAAYivE,EAASy2I,GAChCxqD,EAAW,IAAI,EAAJ,QAAUt6J,EAASx4D,EAAGw4D,EAASv4D,GAChD,EAAK+7Q,UAAUlpD,GACf,IAAMuqD,EAAe,EAAKrxF,cAAcpsM,QAAQinJ,GAIhD,OAFA,EAAKmlD,cAAczwM,OAAOgiS,EAASF,EAAeA,EAAe,EAAG,EAAGvqD,GAEhEA,GA/d6B,KAketC4qD,wBAA0B,SAAC1lN,EAAQC,GACjC,IAAMglN,EAAc,EAAKjxF,cAAcpsM,QAAQo4E,GACzC2lN,EAAc,EAAK3xF,cAAcpsM,QAAQq4E,GAE/C,OAAO,EAAKyiN,UAAUiD,EAAcV,EAAcA,EAAcU,IAte5B,KAyetCC,0BAA4B,SAACnkC,GAC3B,IAAMokC,EAAe,EAAKnD,UAAU96R,QAAQ65P,GAE5C,MAAO,CAAC,EAAKztD,cAAc6xF,GAAe,EAAK7xF,cAAc6xF,EAAe,KA5exC,KA+etCC,+BAAiC,SAACj3I,EAASy2I,EAAaC,GACtD,IAAMF,EAAe,EAAKrxF,cAAcpsM,QAAQinJ,GAC1Ck3I,EAAcR,EAASF,EAAe,EAAGA,EAAe,EAE9D,EAAK3C,UAAUqD,GAAa1jS,OAAO4jE,UAC/B,EAAKy8N,UAAUqD,GAAa5qD,WAC9B,EAAKunD,UAAUqD,GAAa5qD,UAAUl1K,UAExC,EAAKy8N,UAAUn/R,OAAOwiS,EAAa,IAvfC,KA0ftC3uE,YAAc,SAACx9J,GACb,IAAMknO,EAAa,EAAK9sF,cAAcpsM,QAAQgyD,GAG9C,EAAK2qO,4BAA4B,EAAKvwF,cAAc8sF,EAAY,GAAI,EAAK9sF,cAAc8sF,EAAY,IAGnG,EAAK4B,UAAU5B,GAAaz+R,OAAO4jE,UACnC,EAAKy8N,UAAU5B,EAAY,GAAGz+R,OAAO4jE,UACjC,EAAKy8N,UAAU5B,GAAY3lD,WAC7B,EAAKunD,UAAU5B,GAAY3lD,UAAUl1K,UAEnC,EAAKy8N,UAAU5B,EAAa,GAAG3lD,WACjC,EAAKunD,UAAU5B,EAAa,GAAG3lD,UAAUl1K,UAE3C,EAAKy8N,UAAUn/R,OAAOu9R,EAAY,GAClC,EAAK4B,UAAUn/R,OAAOu9R,EAAY,GAGlC,EAAK9sF,cAAczwM,OAAOu9R,EAAY,GAEtClnO,EAAMqM,WA/gB8B,KAkhBtCoxJ,kBAAoB,WAClB,EAAK1iN,MAAMqkO,aAAe,KAC1B,EAAKrkO,MAAM+/C,WAAY,GAphBa,KAwhBtC8uO,iBAAmB,SAAC5pO,GAClB,IAAMknO,EAAa,EAAK9sF,cAAcpsM,QAAQgyD,GAW9C,GAAI,EAAKo6I,cAAc8sF,EAAa,GAAK,CACvC,IAAMh+H,GAAY,IAAAljF,aAAYhmB,EAAO,EAAKo6I,cAAc8sF,EAAa,IACjEkF,GAAU,IAAA9mN,kBAAiBtlB,EAAO,EAAKo6I,cAAc8sF,EAAa,IACtE,EAAK4B,UAAU5B,EAAa,GAAGz+R,OAAO6yD,IAAIltC,EAAI86I,EAAU96I,EACxD,EAAK06Q,UAAU5B,EAAa,GAAGz+R,OAAO6yD,IAAIjtC,EAAI66I,EAAU76I,EACxD,EAAKy6Q,UAAU5B,EAAa,GAAGz+R,OAAOyC,MAAQkhS,EAC1C,EAAKtD,UAAU5B,EAAa,GAAG3lD,YACjC,EAAKunD,UAAU5B,EAAa,GAAG3lD,UAAUjmL,IAAIltC,EAAI86I,EAAU96I,EAC3D,EAAK06Q,UAAU5B,EAAa,GAAG3lD,UAAUjmL,IAAIjtC,EAAI66I,EAAU76I,GAG/D,GAAI,EAAK+rL,cAAc8sF,EAAa,GAAK,CACvC,IAAMtgN,GAAW,IAAAZ,aAAYhmB,EAAO,EAAKo6I,cAAc8sF,EAAa,IAChEz+R,GAAS,IAAA68E,kBAAiBtlB,EAAO,EAAKo6I,cAAc8sF,EAAa,IACrE,EAAK4B,UAAU5B,GAAYz+R,OAAO6yD,IAAIltC,EAAIw4D,EAASx4D,EACnD,EAAK06Q,UAAU5B,GAAYz+R,OAAO6yD,IAAIjtC,EAAIu4D,EAASv4D,EACnD,EAAKy6Q,UAAU5B,GAAYz+R,OAAOyC,MAAQzC,EACtC,EAAKqgS,UAAU5B,GAAY3lD,YAC7B,EAAKunD,UAAU5B,GAAY3lD,UAAUjmL,IAAIltC,EAAIw4D,EAASx4D,EACtD,EAAK06Q,UAAU5B,GAAY3lD,UAAUjmL,IAAIjtC,EAAIu4D,EAASv4D,KAvjBtB,KA4jBtC+7Q,UAAY,SAACpqO,GAAmC,IAA5B9wC,EAA4B,uDAAnB,eAC3B8wC,EAAMgK,KAAK,GACXhK,EAAM9wC,OAASA,GA9jBqB,KAikBtC0vC,UAAY,WACV,OAAO,EAAKmE,KAAKnE,aAlkBmB,KAqkBtC8xI,YAAc,WAA0B,IAAzB7zI,EAAyB,uDAAjB,EAAGC,EAAc,uDAAN,EAAM,uBACtC,YAAyB,EAAKs9I,cAA9B,+CAA8C,KAArCmjB,EAAqC,QAC5CA,EAAanvM,GAAKyuC,EAClB0gK,EAAalvM,GAAKyuC,GAHkB,6EAKtC,EAAKgrM,iBAAiBxsM,IAAIltC,GAAKyuC,EAC/B,EAAKirM,iBAAiBxsM,IAAIjtC,GAAKyuC,EANO,2BAOtC,YAAoB,EAAKgsO,UAAzB,+CAAqC,KAA5BjhC,EAA4B,QACnCA,EAAQp/P,OAAO6yD,IAAIltC,GAAKyuC,EACxBgrM,EAAQp/P,OAAO6yD,IAAIjtC,GAAKyuC,EACpB+qM,EAAQtmB,YACVsmB,EAAQtmB,UAAUjmL,IAAIltC,GAAKyuC,EAC3BgrM,EAAQtmB,UAAUjmL,IAAIjtC,GAAKyuC,IAZO,+EArkBF,KAslBtCmnJ,gBAAkB,WAChB,EAAKooF,qBACL,EAAKC,yBACL,EAAKpB,uBACL,EAAKC,6BA1lB+B,KA6lBtCkB,mBAAqB,WACnB,EAAKjyF,cAAc,GAAGhsL,EAAI,EAAK20C,KAAK0C,KAAKr3C,EACzC,EAAKgsL,cAAc,GAAG/rL,EAAI,EAAK00C,KAAK0C,KAAKp3C,EACzC,EAAK+rL,cAAc,EAAKA,cAAc3xM,OAAS,GAAG2lB,EAAI,EAAK20C,KAAKwJ,GAAGn+C,EACnE,EAAKgsL,cAAc,EAAKA,cAAc3xM,OAAS,GAAG4lB,EAAI,EAAK00C,KAAKwJ,GAAGl+C,GAjmB/B,KAomBtCi+Q,uBAAyB,WACvB,IAAM1lN,GAAW,IAAAZ,aAAY,EAAKjjB,KAAK0C,KAAM,EAAK1C,KAAKwJ,IACvD,EAAKu7L,iBAAiBxsM,IAAIltC,EAAIw4D,EAASx4D,EACvC,EAAK05O,iBAAiBxsM,IAAIjtC,EAAIu4D,EAASv4D,GAvmBH,KA0mBtC68Q,qBAAuB,WACrB,IAAK,IAAIe,KAAgB,EAAKnD,UAC5B,GAAI,EAAKA,UAAUlgS,eAAeqjS,GAAe,CAC/C,IAAMrlN,GAAW,IAAAZ,aAAY,EAAKo0H,eAAe6xF,GAAe,EAAK7xF,eAAe6xF,EAAe,IAC/FxjS,GAAS,IAAA68E,kBAAiB,EAAK80H,eAAe6xF,GAAe,EAAK7xF,eAAe6xF,EAAe,IACpG,EAAKnD,WAAWmD,GAAcxjS,OAAO6yD,IAAIltC,EAAIw4D,EAASx4D,EACtD,EAAK06Q,WAAWmD,GAAcxjS,OAAO6yD,IAAIjtC,EAAIu4D,EAASv4D,EACtD,EAAKy6Q,WAAWmD,GAAcxjS,OAAOyC,MAAQzC,EAC7C,EAAK8jS,iBAAiB9jS,EAAQ,EAAKqgS,UAAUmD,GAAe,KAlnB5B,KAunBtCd,0BAA4B,WAC1B,IAAK,IAAIc,KAAgB,EAAKnD,UAC5B,GAAI,EAAKA,UAAUlgS,eAAeqjS,IAAiB,EAAK7xF,eAAe6xF,EAAe,GAAI,CACxF,IAAMrlN,GAAW,IAAAZ,aAAY,EAAKo0H,eAAe6xF,GAAe,EAAK7xF,eAAe6xF,EAAe,IAC/F,EAAKnD,WAAWmD,GAAc1qD,YAChC,EAAKunD,WAAWmD,GAAc1qD,UAAUjmL,IAAIltC,EAAIw4D,EAASx4D,EACzD,EAAK06Q,WAAWmD,GAAc1qD,UAAUjmL,IAAIjtC,EAAIu4D,EAASv4D,KA7nB3B,KAmoBtCk9Q,gCAAkC,SAACrgS,EAAOshS,GACxCthS,EAAQkT,KAAK2nE,SAAS76E,EAAQ,UAAO8rD,wBAAyB,GAC9D,IAAIqwM,EAAiBmlC,EAAWj/R,OAE5Bk/R,EADkBplC,EAAeO,cACA9nP,MAAK,SAAAigM,GAAA,OAAOA,EAAIt3M,SAAW+jS,KAEhE,EAAKD,iBAAiBrhS,EAAOuhS,EAAgBplC,IAzoBT,KA4oBtCklC,iBAAmB,SAACrhS,EAAO28P,EAASR,GAElCQ,EAAQ6kC,cAAc,EAAK3xR,MAAMktR,oBACjC,EAAK0E,qBAAqBzhS,EAAO28P,GAGjC,UAAgB5wD,2BAA2B,EAAKl0I,MAC5C,EAAK3jD,OAAS,EAAAmzC,qBAAqB5J,QACrC,UAAUoT,kBAAkBurM,cAAcD,GACjC,EAAKjoP,OAAS,EAAAmzC,qBAAqB1D,cAC5C,UAAUmN,uBAAuBsrM,cAAcD,IAtpBb,KA0pBtC2jC,gCAAkC,SAAC9/R,EAAOshS,GACxC,IAAMI,GAAY1hS,EACdm8P,EAAiBmlC,EAAWj/R,OAChC,EAAKs/R,iBAAiBD,EAAUvlC,IA7pBI,KAgqBtCwlC,iBAAmB,SAACD,EAAUvlC,GAC5B,IAAIz+L,EAAWy+L,EAAeO,cACH,WAA3B,UAAWhnP,YACPymP,EAAetsP,MAAMgtR,aAAe6E,EACpCvlC,EAAetsP,MAAMlH,OAAS+4R,EAElCvlC,EAAeS,iBAAiB58P,MAAQ0hS,EACxChkO,EAAS9sD,KAAI,SAAC+rP,GACZA,EAAQh0P,OAAS+4R,KAInB,UAAgB31F,2BAA2B,EAAKl0I,MAC5C,EAAK3jD,OAAS,EAAAmzC,qBAAqB5J,QACrC,UAAUoT,kBAAkBurM,cAAcD,GACjC,EAAKjoP,OAAS,EAAAmzC,qBAAqB1D,cAC5C,UAAUmN,uBAAuBsrM,cAAcD,IAhrBb,KAorBtCylC,mCAAqC,SAAC5hS,EAAOshS,GAC3C,IAAMI,GAAY1hS,EACdm8P,EAAiBmlC,EAAWj/R,OAE5Bk/R,EADkBplC,EAAeO,cACA9nP,MAAK,SAAAigM,GAAA,OAAOA,EAAIwhC,YAAcirD,KAEnE,EAAKO,oBAAoBH,EAAUH,EAAgBplC,GAC/C,EAAKjoP,OAAS,EAAAmzC,qBAAqB5J,QACrC,UAAUoT,kBAAkBurM,cAAcD,GACjC,EAAKjoP,OAAS,EAAAmzC,qBAAqB1D,cAC5C,UAAUmN,uBAAuBsrM,cAAcD,IA9rBb,KAksBtC0lC,oBAAsB,SAACH,EAAUH,EAAgBplC,GACpB,WAA3B,UAAWzmP,YACPymP,EAAetsP,MAAMitR,gBAAkB4E,EACvCvlC,EAAetsP,MAAMwmO,UAAYqrD,EACrCH,EAAelrD,UAAUr2O,MAAQ0hS,EAE7B,EAAKxtR,OAAS,EAAAmzC,qBAAqB5J,QACrC,UAAUoT,kBAAkBurM,cAAcD,GACjC,EAAKjoP,OAAS,EAAAmzC,qBAAqB1D,cAC5C,UAAUmN,uBAAuBsrM,cAAcD,IA3sBb,KA+sBtC2lC,uBAAyB,SAACR,GACxB,IAAIP,EAAe,EAAKnD,UAAUhtR,KAAI,SAAAikM,GAAA,OAAOA,EAAIt3M,UAAQuF,QAAQw+R,GAEjE,OAAO,EAAK1D,UAAUmD,IAltBc,KAqtBtCgB,kCAAoC,SAACplC,GACnC,IAAIokC,EAAe,EAAKnD,UAAU96R,QAAQ65P,GAQ1C,MAAO,CAACqlC,YAPU,EAAKpE,UAAUmD,EAAc,GACG,IAA9C,EAAKnD,UAAUmD,EAAc,GAAI1nO,SACjC,KAKiB4oO,aAJF,EAAKrE,UAAUmD,EAAc,GACE,IAA9C,EAAKnD,UAAUmD,EAAc,GAAI1nO,SACjC,OA5tBgC,KAiuBtC6oO,4BAA8B,SAACvlC,GAC7B,IAAIokC,EAAe,EAAKnD,UAAU96R,QAAQ65P,GAI1C,MAAO,CAACqlC,YAHU,EAAKpE,UAAUmD,EAAc,GAG1BkB,aAFF,EAAKrE,UAAUmD,EAAc,KApuBZ,KAyuBtCoB,6BAA+B,SAACxlC,GAC9B,IAAIokC,EAAe,EAAKnD,UAAU96R,QAAQ65P,GACtCylC,EAAiB,KACjBC,EAAiB,KACrB,GAAG,EAAKzE,UAAUmD,EAAc,GAAK,CACnC,IAAIuB,EAAe,EAAK1E,UAAUz8R,MAAM,EAAG4/R,GAC3CqB,GAAiB,IAAAj/M,eAAcm/M,EAAc,YAE/C,GAAG,EAAK1E,UAAUmD,EAAc,GAAK,CACnC,IAAIwB,EAAe,EAAK3E,UAAUz8R,MAAM4/R,EAAe,GACvDsB,GAAiB,IAAAl/M,eAAco/M,EAAar6K,UAAW,YAGzD,MAAO,CAACk6K,iBAAgBC,mBAtvBY,KAyvBtCG,mBAAqB,SAACtxO,EAAUgqB,GAC9B,IAAIrwB,EAAQ,UAAUkJ,WAClBpC,GAAS,EAAK9hD,MAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACxD+G,GAAS,EAAK/hD,MAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAG5D+G,EAAQ,EAAK+sO,qBAAqB/sO,EAAOspB,EAAQhqB,GAAU,GAC3DS,EAAQ,EAAKgtO,qBAAqBhtO,EAAOupB,EAAQhqB,GAAU,GAE3D,EAAKutO,UAAU9sO,EAAOC,EAAOspB,GAC7B,EAAKwjN,iBAAiBxjN,GAEtB,EAAKrrE,MAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,EAC1C,EAAKtT,MAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAtwBN,KA0wBtCu+Q,qBAAuB,SAACzhS,EAAO28P,GACxB,EAAK8lC,8BAA8BziS,EAAO28P,IACxC,EAAK+lC,oCAAoC1iS,EAAO28P,IACnD,EAAKgmC,iCAAiC3iS,EAAO28P,IA7wBb,KAkxBtCgmC,iCAAmC,SAAC3iS,EAAO28P,GACrC,IACFhrM,EAAQ,EACR+uE,EAAgB,EAAK7oE,KAAKuuE,mBAFxB,EAGiC,EAAK+7J,6BAA6BxlC,GAApEylC,EAHC,EAGDA,eAAgBC,EAHf,EAGeA,eACjBtB,EAAe,EAAKnD,UAAU96R,QAAQ65P,GACtCimC,EAAsB,EAAKhF,UAAU96R,QAAQu/R,GAC7CQ,EAAsB,EAAKjF,UAAU96R,QAAQs/R,GAN3C,EAQ+B,EAAKtB,0BAA0BnkC,GAR9D,qBAQDmmC,EARC,KAQcC,EARd,KASFroN,GAAgB,IAAAN,kBAAiB0oN,EAAeC,IAG9CX,EAAiBA,EAAe/oO,SAAW,EAAIgpO,GAAiBA,EAAehpO,UACjF+oO,EAAiB,MACTA,EAAiBA,EAAe/oO,SAAW,EAAIgpO,GAAiBA,EAAehpO,YACvFgpO,EAAiB,MAGnB,IAAIW,EAAoB,SAACrxO,EAAOC,GAE9B,IADA,IAAIl7C,EAAQqqR,EACN6B,EAAsBlsR,GAAO,OACkB,EAAKoqR,0BAA0B,EAAKlD,UAAUlnR,IADhE,qBACNusR,GADM,WAEjC,EAAKxE,UAAU9sO,EAAOC,EAAOqxO,GAAsB,GACnD,EAAKvE,iBAAiBuE,GACtBvsR,MAMAwsR,EAAoB,SAACvxO,EAAOC,GAE9B,IADA,IAAIl7C,EAAQqqR,EACN8B,EAAsBnsR,GAAO,OACkB,EAAKoqR,0BAA0B,EAAKlD,UAAUlnR,IADhE,qBAC5BysR,EAD4B,UAEjC,EAAK1E,UAAU9sO,EAAOC,EAAOuxO,GAAsB,GACnD,EAAKzE,iBAAiByE,GACtBzsR,MAKJ,OAAO,EAAKmhD,KAAKo6G,kBACf,KAAK,EAAAtzF,YAAYE,WACXujN,GAAkBC,GAEpBa,GADAvxO,EAAuC,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAgB16E,EAAQ06E,GACtD,GAG1BsoN,GADArxO,EAAuC,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,GACtD,IAClB0nN,IAAmBC,EAE3Ba,EADAvxO,EAAuC,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAgB16E,EAAQ06E,IAEvE0nN,GAAkBC,GAE3BW,EADArxO,EAAuC,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,GAIlF,MACF,KAAK,EAAAiE,YAAYC,SACXwjN,GAAkBC,GAEpBa,EAAkBvxO,GADqB,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAiB16E,EAAQ06E,GAChD,GAGjCsoN,EAAkBrxO,GADqB,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,GAC/C,IACzB0nN,IAAmBC,EAE3Ba,EAAkBvxO,EADqB,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAiB16E,EAAQ06E,IAExE0nN,GAAkBC,GAE3BW,EAAkBrxO,EADqB,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,GAGlF,MACF,KAAK,EAAAiE,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,MACF,KAAK,EAAAJ,YAAYK,UACjB,KAAK,EAAAL,YAAYM,aAh2BiB,KAq2BtCyjN,oCAAsC,SAAC1iS,EAAO28P,GAAY,MACtB,EAAKolC,kCAAkCplC,GAApEqlC,EADmD,EACnDA,YAAaC,EADsC,EACtCA,aAElB,IAAID,IAAgBC,EAClB,OAAO,EAGL,IAAArwO,EAAQ,EACVD,EAAQ,EACR+uE,EAAgB,EAAK7oE,KAAKuuE,mBAFxB,EAG+B,EAAK06J,0BAA0BnkC,GAH9D,qBAGDmmC,EAHC,KAGcC,EAHd,KAIFroN,GAAgB,IAAAN,kBAAiB0oN,EAAeC,GAElD,OAAO,EAAKlrO,KAAKo6G,kBACf,KAAK,EAAAtzF,YAAYE,WACZmjN,GAAeC,GAChBtwO,EAAuC,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAgB16E,EAAQ06E,EAChF,EAAK+jN,UAAU9sO,EAAQ,EAAGC,EAAOkxO,GAAe,GAChD,EAAKpE,iBAAiBoE,GAEtBnxO,EAAuC,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,EAChF,EAAK+jN,UAAU9sO,EAAQ,EAAGC,EAAOmxO,GAAe,GAChD,EAAKrE,iBAAiBqE,IAEdf,IAAgBC,GACxBtwO,EAAuC,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAgB16E,EAAQ06E,EAChF,EAAK+jN,UAAU9sO,EAAOC,EAAOkxO,GAAe,GAC5C,EAAKpE,iBAAiBoE,KAEbd,GAAeC,IACxBtwO,EAAuC,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,EAChF,EAAK+jN,UAAU9sO,EAAOC,EAAOmxO,GAAe,GAC5C,EAAKrE,iBAAiBqE,IAGxB,MACF,KAAK,EAAApkN,YAAYC,SACZojN,GAAeC,GAChBrwO,EAAuC,UAA/B8uE,EAAcwE,cAA4BllI,EAAQ06E,EAAe16E,EAAQ06E,EACjF,EAAK+jN,UAAU9sO,EAAQ,EAAGC,EAAOkxO,GAAe,GAChD,EAAKpE,iBAAiBoE,GAEtBlxO,EAAuC,UAA/B8uE,EAAcwE,aAA2BllI,EAAQ06E,GAAiB16E,EAAQ06E,EAClF,EAAK+jN,UAAU9sO,EAAQ,EAAGC,EAAOmxO,GAAe,GAChD,EAAKrE,iBAAiBqE,IAEdf,IAAgBC,GACxBrwO,EAAuC,UAA/B8uE,EAAcwE,cAA4BllI,EAAQ06E,EAAe16E,EAAQ06E,EACjF,EAAK+jN,UAAU9sO,EAAOC,EAAOkxO,GAAe,GAC5C,EAAKpE,iBAAiBoE,KAEbd,GAAeC,IACxBrwO,EAAuC,UAA/B8uE,EAAcwE,aAA2BllI,EAAQ06E,GAAiB16E,EAAQ06E,EAClF,EAAK+jN,UAAU9sO,EAAOC,EAAOmxO,GAAe,GAC5C,EAAKrE,iBAAiBqE,IAExB,MACF,KAAK,EAAApkN,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,MACF,KAAK,EAAAJ,YAAYK,UACjB,KAAK,EAAAL,YAAYM,WAInB,OAAO,GAt6B6B,KAy6BtCwjN,8BAAgC,SAACziS,EAAO28P,GAAY,MAChB,EAAKulC,4BAA4BvlC,GAA9DqlC,EAD6C,EAC7CA,YAAaC,EADgC,EAChCA,aAElB,IAAKD,IAAgBC,EAAc,CAC7B,IAAArwO,EAAQ,EACVD,EAAQ,EACR+uE,EAAgB,EAAK7oE,KAAKuuE,mBAFxB,EAG+B,EAAK06J,0BAA0BnkC,GAH9D,qBAGDmmC,EAHC,KAGcC,EAHd,OAIsC,EAAKlrO,KAAKsvI,8BAJhD,qBAIDH,EAJC,KAIkBD,EAJlB,KAKFrsH,GAAgB,IAAAN,kBAAiB0oN,EAAeC,GAGlD,OAAO,EAAKlrO,KAAKo6G,kBACf,KAAK,EAAAtzF,YAAYE,WACf,IAAImjN,GAAeC,EAAc,CAG/B,GAFAtwO,EAAuC,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAgB16E,EAAQ06E,EAE9C,SAA/BgmD,EAAcwE,aAAyB,CACxC,GAAG49J,EAAc5/Q,EAAIyuC,GAASq1I,EAAkB9jL,GAAK4/Q,EAAc5/Q,IAAM8jL,EAAkB9jL,EACzF,OAAO,EACF,GAAGhQ,KAAKC,MAAM2vR,EAAc5/Q,KAAO8jL,EAAkB9jL,EAE1D,OADA4/Q,EAAc5/Q,EAAI8jL,EAAkB9jL,GAC7B,MAEJ,CACL,GAAG4/Q,EAAc5/Q,EAAIyuC,GAASo1I,EAAiB7jL,GAAK4/Q,EAAc5/Q,IAAM6jL,EAAiB7jL,EACvF,OAAO,EACF,GAAGhQ,KAAKC,MAAM2vR,EAAc5/Q,KAAO6jL,EAAiB7jL,EAEzD,OADA4/Q,EAAc5/Q,EAAI6jL,EAAiB7jL,GAC5B,EAGX,EAAKu7Q,UAAU9sO,EAAOC,EAAOkxO,GAAe,GAC5C,EAAKpE,iBAAiBoE,QAEjB,GAAGd,IAAgBC,EAAc,CAEtC,GADAtwO,EAAuC,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,EAC9C,SAA/BgmD,EAAcwE,aAAyB,CACxC,GAAG69J,EAAc7/Q,EAAIyuC,GAASo1I,EAAiB7jL,EAC7C,OAAO,EACF,GAAGhQ,KAAKC,MAAM4vR,EAAc7/Q,KAAO6jL,EAAiB7jL,EAEzD,OADA6/Q,EAAc7/Q,EAAI6jL,EAAiB7jL,GAC5B,MAEJ,CACL,GAAG6/Q,EAAc7/Q,EAAIyuC,GAASq1I,EAAkB9jL,EAC9C,OAAO,EACF,GAAGhQ,KAAKC,MAAM4vR,EAAc7/Q,KAAO8jL,EAAkB9jL,EAE1D,OADA6/Q,EAAc7/Q,EAAI8jL,EAAkB9jL,GAC7B,EAGX,EAAKu7Q,UAAU9sO,EAAOC,EAAOmxO,GAAe,GAC5C,EAAKrE,iBAAiBqE,GAGxB,MACF,KAAK,EAAApkN,YAAYC,SACf,IAAIojN,GAAeC,EAAc,CAG/B,GAFArwO,EAAuC,UAA/B8uE,EAAcwE,cAA4BllI,EAAQ06E,EAAe16E,EAAQ06E,EAE/C,UAA/BgmD,EAAcwE,aAA0B,CACzC,GAAG49J,EAAc3/Q,EAAIyuC,GAASm1I,EAAiB5jL,EAC7C,OAAO,EACF,GAAGjQ,KAAKC,MAAM2vR,EAAc3/Q,KAAO4jL,EAAiB5jL,EAEzD,OADA2/Q,EAAc3/Q,EAAI4jL,EAAiB5jL,GAC5B,MAEJ,CACL,GAAG2/Q,EAAc3/Q,EAAIyuC,GAASo1I,EAAkB7jL,EAC9C,OAAO,EACF,GAAGjQ,KAAKC,MAAM2vR,EAAc3/Q,KAAO6jL,EAAkB7jL,EAE1D,OADA2/Q,EAAc3/Q,EAAI6jL,EAAkB7jL,GAC7B,EAGX,EAAKs7Q,UAAU9sO,EAAOC,EAAOkxO,GAAe,GAC5C,EAAKpE,iBAAiBoE,QAEjB,GAAGd,IAAgBC,EAAc,CAGtC,GAFArwO,EAAuC,UAA/B8uE,EAAcwE,aAA2BllI,EAAQ06E,GAAiB16E,EAAQ06E,EAEhD,UAA/BgmD,EAAcwE,aAA0B,CACzC,GAAG69J,EAAc5/Q,EAAIyuC,GAASo1I,EAAkB7jL,EAC9C,OAAO,EACF,GAAGjQ,KAAKC,MAAM4vR,EAAc5/Q,KAAO6jL,EAAkB7jL,EAE1D,OADA4/Q,EAAc5/Q,EAAI6jL,EAAkB7jL,GAC7B,MAEJ,CACL,GAAG4/Q,EAAc5/Q,EAAIyuC,GAASm1I,EAAiB5jL,EAC7C,OAAO,EACF,GAAGjQ,KAAKC,MAAM4vR,EAAc5/Q,KAAO4jL,EAAiB5jL,EAEzD,OADA4/Q,EAAc5/Q,EAAI4jL,EAAiB5jL,GAC5B,EAGX,EAAKs7Q,UAAU9sO,EAAOC,EAAOmxO,GAAe,GAC5C,EAAKrE,iBAAiBqE,GAExB,MACF,KAAK,EAAApkN,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,MACF,KAAK,EAAAJ,YAAYK,UACjB,KAAK,EAAAL,YAAYM,YAKrB,OAAO,GAvhC6B,KA6hCtCmkN,sBAAwB,SAACloN,GACvB,IAAIz7E,EAAI,EAAKo4D,KAAKo6G,iBAChBvxC,EAAgB,EAAK7oE,KAAKuuE,mBAC1BsgE,EAAiB,EAAK7uI,KAAKwJ,GAAGslI,gBAAkB,EAAK9uI,KAAKuqB,yBAC1DC,EAAW,EAAKxqB,KAAKruD,YAAY84E,YAAY,EAAKzqB,MAClD+uI,EAAmBvkH,EAAShhB,GAAGslI,gBAAkBtkH,EAASD,yBAC1D6kH,EAAiB,EACjBC,EAAmB,EAEX,EAAKgI,cAAcpsM,QAAQo4E,GAMjCz7E,IAAM,EAAAk/E,YAAYC,UACpBqoH,EAAgD,UAA/BvmE,EAAcwE,cAA4B0hE,GAAoBF,EAC/EQ,EAAkD,UAA/BxmE,EAAcwE,cAA4BwhE,GAAkBE,EAC5D,EAAK/uI,KAAKyuI,mBAAmBnjL,EAAI8jL,EAChC,EAAKpvI,KAAK2uI,oBAAoBrjL,EAAI+jL,EAC/C/jL,GACC1jB,IAAM,EAAAk/E,YAAYE,aAC1BooH,EAAgD,SAA/BvmE,EAAcwE,cAA2BwhE,GAAkBE,EAC5EM,EAAkD,SAA/BxmE,EAAcwE,cAA2B0hE,GAAoBF,EAC7D,EAAK7uI,KAAKwuI,mBAAmBnjL,EAAI+jL,EAChC,EAAKpvI,KAAK0uI,oBAAoBrjL,EAAIgkL,EAC/ChkL,IAvjC2B,KAgkCtCu7Q,UAAY,SAAC9sO,EAAOC,EAAOspB,GAAmC,IAA3BmjN,EAA2B,wDACxD5+R,EAAI,EAAKo4D,KAAKo6G,iBAChBvxC,EAAgB,EAAK7oE,KAAKuuE,mBAI1B41J,EAAa,EAAK9sF,cAAcpsM,QAAQo4E,GAGxCijN,EAAgB,KAChBC,EAAiB,KACjBE,EAAuB,KACvBC,EAAsB,KACtBx3F,EAAmB,KACnBC,EAAoB,KAItB,GAAmB,IAAfg1F,GAAoBA,IAAe,EAAK9sF,cAAc3xM,OAAS,EACjE,MAAO,GAGT,GAAIkC,IAAM,EAAAk/E,YAAYC,SAAU,CAE9BmoH,EAAmBvpM,OAAO+2B,OAAO,GAAI,EAAKsjC,KAAKyuI,mBAAmBl2I,KAClE42I,EAAoBxpM,OAAO+2B,OAAO,GAAI,EAAKsjC,KAAK2uI,oBAAoBp2I,KAEjC,UAA/BswE,EAAcwE,cAKhBi5J,EAAgB,EAAKjvF,cAAc8sF,EAAa,GAAK,EAAK9sF,cAAc8sF,EAAa,GAAKh1F,EAC1Fo3F,EAAiB,EAAKlvF,cAAc8sF,EAAa,GAAK,EAAK9sF,cAAc8sF,EAAa,GAAKj1F,IAM3Fo3F,EAAgB,EAAKjvF,cAAc8sF,EAAa,GAAK,EAAK9sF,cAAc8sF,EAAa,GAAKh1F,EAC1Fo3F,EAAiB,EAAKlvF,cAAc8sF,EAAa,GAAK,EAAK9sF,cAAc8sF,EAAa,GAAKj1F,GAlB/D,MAqBgB,EAAKi3F,kBACjD9iN,EAAQ,IAAKtpB,EACbm1I,EAAiB5jL,EACjB6jL,EAAkB7jL,EAClBg7Q,EACAC,EACAC,GA3B4B,qBAqB7BC,EArB6B,KAqBPC,EArBO,UA6BzB,GAAI9+R,IAAM,EAAAk/E,YAAYE,WAAY,CAEvCkoH,EAAmBvpM,OAAO+2B,OAAO,GAAI,EAAKsjC,KAAKwuI,mBAAmBj2I,KAClE42I,EAAoBxpM,OAAO+2B,OAAO,GAAI,EAAKsjC,KAAK0uI,oBAAoBn2I,KAEjC,SAA/BswE,EAAcwE,cAKhBi5J,EAAgB,EAAKjvF,cAAc8sF,EAAa,GAAK,EAAK9sF,cAAc8sF,EAAa,GAAKh1F,EAC1Fo3F,EAAiB,EAAKlvF,cAAc8sF,EAAa,GAAK,EAAK9sF,cAAc8sF,EAAa,GAAKj1F,IAM3Fo3F,EAAgB,EAAKjvF,cAAc8sF,EAAa,GAAK,EAAK9sF,cAAc8sF,EAAa,GAAKh1F,EAC1Fo3F,EAAiB,EAAKlvF,cAAc8sF,EAAa,GAAK,EAAK9sF,cAAc8sF,EAAa,GAAKj1F,GAlBtD,MAqBO,EAAKi3F,kBACjD9iN,EAAQ,IAAKvpB,EACbo1I,EAAiB7jL,EACjB8jL,EAAkB9jL,EAClBi7Q,EACAC,EACAC,GA3BqC,qBAqBtCC,EArBsC,KAqBhBC,EArBgB,KAqCzC,MAAO,CAACD,EAAsBC,IAxpCM,KA6pCtCx7N,OAAS,SAACtW,IACJ,IAAA5M,qCAAqC,IAAAinC,8BAA6B,KAGtE,EAAKu8M,kBAAkB52O,GACvB,EAAK62O,YAAY72O,GACjB,EAAK82O,aAAa92O,GAElB,EAAK+2O,aAAa/2O,GAClB,EAAKg3O,mBAAmBh3O,KAtqCY,KA2qCtC42O,kBAAoB,SAAC52O,GACnB,IAAIk6G,EAAa,EAAK9uG,KAAK+uG,wBAAwB,EAAKsoC,cAAc,IACpEroC,EAAW,EAAKhvG,KAAK+uG,wBAAwB,EAAKsoC,cAAc,EAAKA,cAAc3xM,OAAS,IAE9FkvD,EAAI+W,YACJ/W,EAAIgX,OAAOkjG,EAAWzjJ,EAAGyjJ,EAAWxjJ,GACpCspC,EAAIiX,OAAOmjG,EAAS3jJ,EAAG2jJ,EAAS1jJ,GAChCspC,EAAI6W,UAAY,EACb,UAAampC,YAAY3pG,QAAQ,WAAa,GAAK,EAAK+0D,KAAK1D,eAAiB,EAAKtkD,MAAMokO,gBAC1FxnL,EAAIkX,YAAc,EAAK2iE,OAAOq3J,gBAE9BlxO,EAAIkX,YAAc,EAAK2iE,OAAOo3J,cAEhCjxO,EAAImX,SACJnX,EAAI6tG,aAzrCgC,KA4rCtCgpI,YAAc,SAAC72O,GACb,IAAMi3O,EAAiB,EAAKx0F,cAAct+L,KAAI,SAACkkD,GAC7C,OAAO,EAAK+C,KAAK+uG,wBAAwB9xG,MAG3CrI,EAAI+W,YACJkgO,EAAex8R,SAAQ,SAAC4tD,EAAOp+C,GAC7B,IAAIq0J,EAAOr0J,EAAQ,EACnB,GAAIgtR,EAAe34H,GAAO,QACqB,IAAApvF,mBAAkB7mB,EAAO4uO,EAAe34H,IAAQ,EAAKzkC,OAAO62J,aADjF,qBACjBwG,EADiB,KACEC,EADF,KAExB,EAAKjnI,UAAWlwG,EACdk3O,EAAkBzgR,EAClBygR,EAAkBxgR,EAClBygR,EAAgB1gR,EAChB0gR,EAAgBzgR,OAKtBspC,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,EAAK2iE,OAAOo3J,cAC9BjxO,EAAImX,SACJnX,EAAI6tG,aAltCgC,KAstCtCkpI,aAAe,SAAC/2O,GAAQ,MACyB,EAAKoL,KAAKsvI,8BADnC,qBACjBoB,EADiB,KACIC,EADJ,KAEpB7hC,GAAa,IAAAtzG,eAAck1I,EAAoBrlL,EAAGqlL,EAAoBplL,EAAG,GACzE0jJ,GAAW,IAAAxzG,eAAcm1I,EAAkBtlL,EAAGslL,EAAkBrlL,EAAG,GAErEspC,EAAI+W,YALkB,OAOuB,IAAAmY,mBAAkBgrF,EAAYE,GAAW,EAAKvgC,OAAO82J,cAP5E,qBAOfuG,EAPe,KAOIC,EAPJ,KAQtB,EAAKC,cAAep3O,EAClBk3O,EAAkBzgR,EAClBygR,EAAkBxgR,EAClBygR,EAAgB1gR,EAChB0gR,EAAgBzgR,GAGlBspC,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,EAAK2iE,OAAOo3J,cAC9BjxO,EAAImX,SACJnX,EAAI6tG,aAxuCgC,KA2uCtCipI,aAAe,SAAC92O,GACd,IAAI0mL,EAAa,EAAK7sG,OAAO6sG,WAC3BkC,EAAOlC,EAAa,MAAQ,EAAK7sG,OAAO4sG,WAE1CzmL,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChB7oL,EAAIwuG,UAAY,EAAK30B,OAAO2sG,UAE5B,IAAMywD,EAAiB,EAAKx0F,cAAct+L,KAAI,SAACkkD,GAC7C,OAAO,EAAK+C,KAAK+uG,wBAAwB9xG,MAG3C4uO,EAAex8R,SAAQ,SAAC4tD,EAAOp+C,GAC7B,IAAIq0J,EAAOr0J,EAAQ,EACnB,GAAIgtR,EAAe34H,GAAO,QACqB,IAAApvF,mBAAkB7mB,EAAO4uO,EAAe34H,IAAQ,EAAKzkC,OAAOi3J,cADjF,qBACjBoG,EADiB,KACEC,EADF,KAEpB3hM,GAAS,IAAA1iB,aAAYwrF,GACrBrvF,GAAW,IAAAZ,aAAY6oN,EAAmBC,GAC1CpwD,EAAQ/mL,EAAIgnL,YAAYxxI,GAC5Bx1C,EAAI8oL,SAAStzI,EAAQvmB,EAASx4D,EAAGw4D,EAASv4D,EAAGqwN,EAAOL,OAIxD1mL,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,EAAK2iE,OAAOo3J,cAC9BjxO,EAAImX,SACJnX,EAAI6tG,aAtwCgC,KAywCtCwpI,gBAAkB,SAACr3O,GACjB,IAAIi0E,EAAgB,EAAK7oE,KAAKuuE,mBAE5BivG,EADa,EAAK/uG,OAAO6sG,WACL,MAAQ,EAAK7sG,OAAO4sG,WACxC6wD,EAAc,EACdC,EAAc,EACdC,EAAe,EACfC,EAAe,EAGfnhK,EAAa,GAIf,OAAQrC,EAAc/hD,aACpB,IAAK,aACHqlN,EAA8C,SAA/BtjK,EAAcwE,aAA0B,EAAKoB,OAAOk3J,iBAAmB,EAAKl3J,OAAOk3J,gBAElF98J,EAAcwE,aAA9B++J,GAAyD,GACzDC,EAA+C,SAA/BxjK,EAAcwE,aAA0B,GAAK,GAE7CxE,EAAcwE,aAA0B,GACT,SAA/BxE,EAAcwE,aAA0B,IAAM,GAE9D,MAEF,IAAK,WACH6+J,EAA8C,UAA/BrjK,EAAcwE,aAA2B,EAAKoB,OAAOk3J,iBAAkB,EAAKl3J,OAAOk3J,gBAElGyG,EAA+C,UAA/BvjK,EAAcwE,aAA2B,GAAK,GAC9CxE,EAAcwE,aAA9Bg/J,GAA0D,GAEX,UAA/BxjK,EAAcwE,aAA2B,IAAM,GAChB,UAA/BxE,EAAcwE,aAA2B,EAAI,EAYjEz4E,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChB7oL,EAAIwuG,UAAY,EAAK30B,OAAO2sG,UAE5B,EAAK/jC,cAAchoM,SAAQ,SAAC4tD,EAAOp+C,GACjC,IAAIq0J,EAAOr0J,EAAQ,EACnB,GAAG,EAAKw4L,cAAcnkC,GAAO,CAC3B,IAAIrvF,GAAW,IAAAZ,aACb,EAAKjjB,KAAK+uG,wBAAwB9xG,GAClC,EAAK+C,KAAK+uG,wBAAwB,EAAKsoC,cAAcnkC,KAGnDo5H,EADU,EAAKvD,wBAAwB9rO,EAAO,EAAKo6I,cAAcnkC,IACxCsrE,UAAUr2O,MAC3BysD,EAAIgnL,YAAY0wD,EAAevjR,YAI3CmiH,EAAW7/G,EAAIw4D,EAASx4D,EAAI6gR,EAC5BhhK,EAAW5/G,EAAIu4D,EAASv4D,EAAI6gR,EAG5Bv3O,EAAIgX,OAAOs/D,EAAW7/G,EAAG6/G,EAAW5/G,GACpCspC,EAAIiX,OAAOq/D,EAAW7/G,EAAI6gR,EAAahhK,EAAW5/G,EAAI6gR,GAGtD,UAAU1nD,YAAY,YAAa7vL,EACjCs2E,EAAW7/G,EAAI+gR,EACflhK,EAAW5/G,EAAI+gR,EACf,EACA,GACA,GACA,OAcNz3O,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,EAAK2iE,OAAOo3J,cAC9BjxO,EAAImX,SACJnX,EAAI6tG,aAv2CgC,KA02CtC8pI,sBAAwB,SAAC33O,GACvB,IAAIi0E,EAAgB,EAAK7oE,KAAKuuE,mBAC5BygC,EAAY,EAAKhvG,KAAK+uG,wBAAwB,EAAK/uG,KAAKwJ,IACxDslG,EAAa,EAAK9uG,KAAK+uG,wBAAwB,EAAK/uG,KAAK0C,MACzD44K,EAAa,EAAK7sG,OAAO6sG,WAAa,EACtCkC,EAAOlC,EAAa,MAAQ,EAAK7sG,OAAO4sG,WAGxC5uG,EAAU,GACVD,EAAU,GACVggK,EAAS,EACTC,EAAS,EACTC,EAAe,EACfC,EAAe,EACfC,SAGEr5Q,GADU,UAAOy/B,OACT,IAAM,EAAK6xO,cAAcv7R,OAAO,IACxCqyO,EAAQ/mL,EAAIgnL,YAAYroN,GAU5B,OALAqhC,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChB7oL,EAAIwuG,UAAY,EAAK30B,OAAO2sG,UAEpBvyG,EAAc/hD,aACpB,IAAK,aAEH2lN,GAAU,EAAKh+J,OAAOg3J,kBAAoB,EACA,SAA/B58J,EAAcwE,cAA2B,EAAKoB,OAAOg3J,kBAAoB,EAAKh3J,OAAOg3J,kBAChGj5J,EAAU,EAGM3D,EAAcwE,aAA9Bq/J,GAAyD,EAAKj+J,OAAO+2J,mBACrEoH,EAA4C,SAA/B/jK,EAAcwE,aAA0ByhC,EAAYE,EAGjE,UAAc69H,mBAAmBj4O,EAAK,CAACvpC,EAAGuhR,EAAUvhR,EAAIqhR,EAAcphR,EAAGshR,EAAUthR,EAAIqhR,GAAgB,GAAI,GAG3G/3O,EAAIyuG,OACJzuG,EAAI0oL,UAAUsvD,EAAUvhR,EAAIqhR,EAAcE,EAAUthR,EAAIqhR,GACxD/3O,EAAIpQ,QAAQnpC,KAAKqnE,GAAK,GACtB9tB,EAAIwuG,UAAY,OAChBxuG,EAAI8oL,SAASnqN,EAAM,EAAI,EAAGooN,EAAOL,GACjC1mL,EAAI0uG,UACJ,MAEF,IAAK,WAEHkpI,GAAU,EAAK/9J,OAAOg3J,kBAAoB,EACA,UAA/B58J,EAAcwE,cAA4B,EAAKoB,OAAO+2J,mBAAoB,EAAK/2J,OAAO+2J,mBACjG/4J,EAAU,EAGM5D,EAAcwE,aAA9Bs/J,GAA0D,EAAKl+J,OAAO+2J,mBACtEoH,EAA4C,UAA/B/jK,EAAcwE,aAA2B2hC,EAAUF,EAGhE,UAAc+9H,mBAAmBj4O,EAC/B,CAACvpC,EAAGuhR,EAAUvhR,EAAIqhR,EAAcphR,EAAGshR,EAAUthR,EAAIqhR,GACjD,GACA,GAIF/3O,EAAIwuG,UAAY,OAEhBxuG,EAAI8oL,SAASnqN,EAAMq5Q,EAAUvhR,EAAIqhR,EAAe,EAAGE,EAAUthR,EAAIqhR,EAAe,EAAGhxD,EAAOL,GAa9F,EAAK0wD,cAAep3O,EAClBg4O,EAAUvhR,EAAIqhR,EAAeF,EAAS//J,EACtCmgK,EAAUthR,EAAIqhR,EAAeF,EAASjgK,EACtCogK,EAAUvhR,EAAIqhR,EAAeF,EAAS//J,EACtCmgK,EAAUthR,EAAIqhR,EAAeF,EAASjgK,GAGxC53E,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,EAAK2iE,OAAOo3J,cAC9BjxO,EAAImX,SACJnX,EAAI6tG,aAx8CgC,KA28CtCmpI,mBAAqB,SAACh3O,GACpB,IAAIi0E,EAAgB,EAAK7oE,KAAKuuE,mBAC5B1qD,GAAW,IAAAZ,aAAY,EAAKjjB,KAAKwJ,GAAI,EAAKxJ,KAAK0C,MAC/C44K,EAAa,EAAK7sG,OAAO6sG,WAAa,EACtCkC,EAAOlC,EAAa,MAAQ,EAAK7sG,OAAO4sG,WACxCqxD,EAAe,EACfC,EAAe,EACfC,EAAY,EAAK5sO,KAAK+uG,wBAAwB,CAC5Cx2G,IAAK,CAACltC,EAAGw4D,EAASx4D,EAAGC,EAAGu4D,EAASv4D,KAMjCiI,GAHU,UAAOy/B,OAGT,IAAM,EAAK6xO,cAAcv7R,OAAO,IACxCqyO,EAAQ/mL,EAAIgnL,YAAYroN,GAO5B,OALAqhC,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChB7oL,EAAIwuG,UAAY,EAAK30B,OAAO2sG,UAEpBvyG,EAAc/hD,aACpB,IAAK,aAEH6lN,EAA+C,SAA/B9jK,EAAcwE,cAA2B,EAAKoB,OAAO+2J,mBAAoB,EAAK/2J,OAAO+2J,mBAGrG,UAAcqH,mBAAmBj4O,EAAK,CAACvpC,EAAGuhR,EAAUvhR,EAAIqhR,EAAcphR,EAAGshR,EAAUthR,EAAIqhR,GAAgB,GAAI,GAG3G/3O,EAAIwuG,UAAY,OAEhBxuG,EAAI8oL,SAASnqN,EAAMq5Q,EAAUvhR,EAAIqhR,EAAe,EAAGE,EAAUthR,EAAIqhR,EAAe,EAAGhxD,EAAOL,GAC1F,MAEF,IAAK,WAEHoxD,EAA+C,UAA/B7jK,EAAcwE,cAA4B,EAAKoB,OAAO+2J,mBAAqB,EAAK/2J,OAAO+2J,mBAAqBlqD,EAG5H,UAAcuxD,mBAAmBj4O,EAAK,CAACvpC,EAAGuhR,EAAUvhR,EAAIqhR,EAAcphR,EAAGshR,EAAUthR,EAAIqhR,GAAgB,GAAI,GAG3G/3O,EAAIyuG,OACJzuG,EAAI0oL,UAAUsvD,EAAUvhR,EAAIqhR,EAAcE,EAAUthR,EAAIqhR,GACxD/3O,EAAIpQ,QAAQnpC,KAAKqnE,GAAK,GACtB9tB,EAAIwuG,UAAY,OAChBxuG,EAAI8oL,SAASnqN,EAAM,EAAI,EAAGooN,EAAOL,GACjC1mL,EAAI0uG,UAYR1uG,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,EAAK2iE,OAAOo3J,cAC9BjxO,EAAImX,SACJnX,EAAI6tG,aA3gDgC,KA8gDtCqC,UAAY,SAACC,EAASC,EAAOC,EAAOC,EAAKC,GACvC,IACErgF,EAAKogF,EAAMF,EACXjgF,EAAKogF,EAAMF,EACXx/G,EAAQpqC,KAAKozE,MAAM1J,EAAID,GAEzBigF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOq5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EAPD,GAOiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAPhD,GAOgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IACzGqiF,EAAQn5F,OAAOs5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EATD,GASiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAThD,GASgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAEzGqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAZD,GAYmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAZlD,GAYoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAC7GqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAdD,GAcmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAdlD,GAcoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,KA7hDzE,KAgiDtCspN,cAAgB,SAACjnI,EAASC,EAAOC,EAAOC,EAAKC,GAC3C,IACErgF,EAAKogF,EAAMF,EACXjgF,EAAKogF,EAAMF,EACXx/G,EAAQpqC,KAAKozE,MAAM1J,EAAID,GAEzBigF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOq5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EAPD,EAOiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAPhD,EAOgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IACzGqiF,EAAQn5F,OAAOs5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EATD,EASiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAThD,EASgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAEzGqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAZD,EAYmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAZlD,EAYoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAC7GqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAdD,EAcmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAdlD,EAcoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,KA/iDzE,KAkjDtC9oB,YAAc,SAACP,EAAUjyD,GAAM,2BAE7B,YAAoB,EAAKiwM,cAAzB,+CAAyC,KAA9Bp6I,EAA8B,QACvC,GAAG,EAAK6vO,iBAAiBzzO,EAAU4D,GAUjC,OATI,EAAKjlD,MAAM+/C,YACb,EAAK4yO,mBAAmBtxO,EAAU4D,GAC9B,EAAK5gD,OAAS,EAAAmzC,qBAAqB5J,QACrC,UAAUoT,kBAAkBurM,cAAc,GACjC,EAAKloP,OAAS,EAAAmzC,qBAAqB1D,cAC5C,UAAUmN,uBAAuBsrM,cAAc,IAI5C,EAAKvsP,MAAM+/C,WAbO,+EAljDO,KAokDtC+0O,iBAAmB,SAACzzO,EAAU4D,GAK5B,OAJA,EAAKjlD,MAAMokO,kBAAoBn/K,EAAMs0G,mBAI9B,EAAKv5J,MAAMokO,iBAAmB,EAAKpkO,MAAM+/C,WAAa,EAAK//C,MAAMqkO,cAAgBp/K,EAAMhkD,KAAO,EAAKjB,MAAMqkO,aAAapjO,IAzkDzF,KA4kDtCwgD,UAAY,SAACJ,EAAUjyD,GAGlB,EAAK4Q,MAAM+/C,YACZ,EAAK//C,MAAM+/C,WAAY,EACvB,EAAK//C,MAAMggD,kBAAoB,OAjlDG,KAqlDtCoB,YAAc,SAACC,EAAUjyD,GAEvB,IAAMkuL,EAAa,UAAMliL,WACnBslG,EAAa48E,EAAWz0H,cAAc63C,WACtCI,EAAew8E,EAAWz0H,cAAci4C,aAE9C,GAAIA,IAAiB,EAAAp2D,2BAA2BjB,MAC3Cq3D,IAAiB,EAAA50D,qBAAqBx7B,YAGpC,IAAI,EAAK1Q,MAAMokO,gBAAiB,CAKrC,IAAK,IAAMn/K,KAJX,EAAKjlD,MAAM+/C,WAAY,EAGvB,EAAK//C,MAAMggD,kBAAoBqB,EACX,EAAKg+I,cACnB,EAAKA,cAAcp6I,GAAOs0G,iBAAiBl4G,KAC7C,EAAKrhD,MAAMqkO,aAAe,EAAKhlC,cAAcp6I,IAIjD,OAAO,EACF,GAAI,EAAK+C,KAAK1D,cAAgBo8C,IAAe,EAAAh2D,2BAA2BkD,QAAU,OAElD,EAAK6iP,qBAAqBpvO,GAFwB,qBAElF64F,EAFkF,KAEzEy2I,EAFyE,KAE5DC,EAF4D,KAGnFzqD,EAAW,EAAK2qD,sBAAsB52I,EAASy2I,EAAaC,GAWhE,OAVIA,GACF,EAAKhB,4BAA4BzpD,EAAUwqD,GAC3C,EAAKf,4BAA4B11I,EAASisF,KAE1C,EAAKypD,4BAA4B11I,EAASisF,GAC1C,EAAKypD,4BAA4BzpD,EAAUwqD,IAE7C,EAAKQ,+BAA+Bj3I,EAASy2I,EAAaC,GAE1D,UAAU5vO,kBAAkBurM,cAAc,IACnC,GAGT,OAAO,GA5nD6B,KA+nDtCtyJ,aAAe,WACb,EAAKj6F,MAAMokO,iBAAkB,EAC7B,EAAKpkO,MAAM+/C,WAAY,EACvB,EAAK//C,MAAMqkO,aAAe,MAjoD1BprO,KAAK+uD,KAAOA,EACZ/uD,KAAK4zR,aAAeA,EACpB5zR,KAAKoL,KAAOA,EACZpL,KAAKgI,IAAK,eACVhI,KAAKqvD,WAAY,IAAAqC,gB,8DAyZF1F,EAAO1E,GACtB,IAAI2yE,EAAajuE,EAAMzB,gBAEvB,OAAOngD,KAAKynE,KAAKznE,KAAK0nE,IAAImoD,EAAW7/G,EAAIktC,EAAIltC,EAAG,GAAKhQ,KAAK0nE,IAAImoD,EAAW5/G,EAAIitC,EAAIjtC,EAAG,Q,eAxdnEs5Q,G,6NC9BrB,I,IAAA,O,IACA,M,IACA,QACA,Q,IACA,QACA,Q,IACA,O,IACA,O,IACA,Q,IACA,Q,mDAEmC38G,EAAtBA,oBAAsB,SAACrzH,GAA8B,IAAzBozH,EAAyB,wDAC5D+kH,EAAY,UAAM35R,WAAWwH,cAC7B8tO,EAAgBqkD,EAAUjkO,kBAC1B9V,EAAQ,UAAUkJ,WAClB8wO,EAAmB,UAAcjyO,YACjC3W,EAAS,UAAUgY,YAGvBhY,EAAO/0C,SAAQ,SAACw7C,GACd,GAAMA,aAAiBA,EAAjBA,SAC4B,IAA7BA,EAAMg9F,uBACL,IAAA7/F,qCAAqC6C,EAAMqV,oBAC5CrV,EAAMtzC,SAAW,EAAAipC,cAAcqB,gBAHpC,CAOA,IAAI0W,EAAM1N,EAAM8kH,qBAEZlkC,EAAU5gF,EAAMy5F,UAAUroF,cAC1BgxO,GAAyB,IAAAzxO,eAAcjD,EAAIltC,EAAGktC,EAAIjtC,EAAzB,WACzB4hR,GAAsB,IAAA1xO,eAAciwE,EAAQpgH,EAAGogH,EAAQngH,EAAjC,WAEtB+9K,EAAe,CACjBh+K,EAAG4hR,EAAuB5hR,EAAI2hR,EAAiB3hR,EAAIupC,EAAImB,OAAOnlD,MAAQ,EACtE0a,EAAG2hR,EAAuB3hR,EAAI0hR,EAAiB1hR,GA2BjD,GAzBAspC,EAAIyuG,QACH2kB,GAAemlH,EAAkBv4O,GAGlCA,EAAI+W,YACA9gB,EAAMtzC,SAAW,EAAAipC,cAAckB,WACjCmJ,EAAMy5F,UAAU8oJ,yBAAyBx4O,EAAKy0I,EAAc,EAAAjgJ,UAAUlY,SACtE0jB,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,mBAElBjhB,EAAMy5F,UAAU8oJ,yBAAyBx4O,EAAKy0I,EAAc,EAAAjgJ,UAAUlY,SAWxE0jB,EAAI6tG,YACJ7tG,EAAImX,SAGAlhB,EAAM44F,oBACR7uF,EAAI0uG,cADN,CAKA,IAAK,IAAI+pI,KADTz4O,EAAI4xL,OACkBkC,EAAe,CACnC,IAAI7/K,EAAe6/K,EAAc2kD,GAC3BC,EAAuBzkO,EAAa5M,cACtCsxO,GAAyB,IAAA/xO,eAAc8xO,EAAqBjiR,EAAGiiR,EAAqBhiR,EAA3D,WACzBkiR,EAAmB3kO,EAAaklG,UAiBpCn5G,EAAI2rC,UACF13B,EAAa7F,WAEbpO,EAAImB,OAAOnlD,MAAQ,GAAK28R,EAAuBliR,EAAI6hR,EAAoB7hR,EAAI4hR,EAAuB5hR,GAAK2hR,EAAiB3hR,EACvHkiR,EAAuBjiR,EAAI4hR,EAAoB5hR,EAAI2hR,EAAuB3hR,EAAK0hR,EAAiB1hR,EACjGkiR,EAAiB58R,MAAQoiD,EACzBw6O,EAAiB18R,OAASkiD,GAG9B4B,EAAI0uG,eAINl/G,EAAO/0C,SAAQ,SAACw7C,GACd,GAAMA,aAAiBA,EAAjBA,SAC4B,IAA7BA,EAAMg9F,uBACL,IAAA7/F,qCAAqC6C,EAAMqV,oBAC5CrV,EAAMtzC,SAAW,EAAAipC,cAAcqB,gBAHpC,CAOA,IAAI0W,EAAM1N,EAAM8kH,qBACZlkC,EAAU5gF,EAAMy5F,UAAUroF,cAC1BgxO,GAAyB,IAAAzxO,eAAcjD,EAAIltC,EAAGktC,EAAIjtC,EAAzB,WACzB4hR,GAAsB,IAAA1xO,eAAciwE,EAAQpgH,EAAGogH,EAAQngH,EAAjC,WAEtB+9K,EACC4jG,EAAuB5hR,EAAI2hR,EAAiB3hR,EAAIupC,EAAImB,OAAOnlD,MAAQ,EADpEy4L,EAEC4jG,EAAuB3hR,EAAI0hR,EAAiB1hR,EAG7CiwC,EAAc1Q,EAAMkQ,YAKpB0yO,EAAoB,CAACpiR,EAAG,EAAGC,EAAG,GA6BlC,GA5BAmiR,EAAkBpiR,EAAIkwC,EAAYlwC,EAAI2nC,EACtCy6O,EAAkBniR,EAAIiwC,EAAYjwC,EAAI0nC,EAQtC4B,EAAIyuG,QACH2kB,GAAemlH,EAAkBv4O,GAClCA,EAAI0oL,UAAUj0C,EAAiBokG,EAAkBpiR,EAAGg+K,EAAiBokG,EAAkBniR,GACvFspC,EAAIpQ,OAAOqG,EAAMg9F,mBAAqBxsI,KAAKqnE,GAAK,KAEhD9tB,EAAI+W,YACA9gB,EAAMtzC,SAAW,EAAAipC,cAAckB,WACjCmJ,EAAMy5F,UAAU8oJ,yBAAyBx4O,EAAK,CAACvpC,GAAIoiR,EAAkBpiR,EAAGC,GAAImiR,EAAkBniR,GAAI,EAAA89B,UAAUC,MAC5GuL,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,mBAIlBjhB,EAAMy5F,UAAU8oJ,yBAAyBx4O,EAAK,CAACvpC,GAAIoiR,EAAkBpiR,EAAGC,GAAImiR,EAAkBniR,GAAI,EAAA89B,UAAUC,MAE9GuL,EAAI6tG,YACJ7tG,EAAImX,SAGAlhB,EAAM44F,oBACR7uF,EAAI0uG,cADN,CAKA,IAAK,IAAI+pI,KADTz4O,EAAI4xL,OACkBkC,EAAe,CACnC,IAAI7/K,EAAe6/K,EAAc2kD,GAC3BC,EAAuBzkO,EAAa5M,cACtCsxO,GAAyB,IAAA/xO,eAAc8xO,EAAqBjiR,EAAGiiR,EAAqBhiR,EAA3D,WACzBkiR,EAAmB3kO,EAAaklG,UAEpCn5G,EAAI2rC,UACF13B,EAAa7F,YACZyqO,EAAkBpiR,GAAKkiR,EAAuBliR,EAAI6hR,EAAoB7hR,IACtEoiR,EAAkBniR,GAAKiiR,EAAuBjiR,EAAI4hR,EAAoB5hR,GACvEkiR,EAAiB58R,MAAQoiD,EACzBw6O,EAAiB18R,OAASkiD,GAO9B4B,EAAI0uG,UACJsiF,EAAchxL,EAAK/J,SAtKhB,IA0KDsiP,EAAoB,SAACv4O,GACzBA,EAAI+W,YACJ/W,EAAI0oC,KAAK1oC,EAAImB,OAAOnlD,MAAQ,EAAG,EAAGgkD,EAAImB,OAAOnlD,MAAOgkD,EAAImB,OAAOjlD,QAC/D8jD,EAAI6tG,YACJ7tG,EAAImX,SACJnX,EAAI4xL,QAQAknD,GAL6BC,EAAtBA,oBAAsB,SAAC/4O,GAClCg5O,EAAkBh5O,GAClB84O,EAAmB94O,IAGM,SAACA,GAC1BA,EAAI+W,YACJ/W,EAAIkX,YAAc,UAClBlX,EAAI6W,UAAY,EAChB7W,EAAIgX,OAAO,UAAci7G,kBAAkBjyH,GAAM,GACjDA,EAAIiX,OAAO,UAAcg7G,kBAAkBjyH,GAAMA,EAAImB,OAAOjlD,QAC5D8jD,EAAImX,WAGA6hO,EAAoB,SAACh5O,GACzBA,EAAIwuG,UAAY,UAChBxuG,EAAI0oC,KAAK,UAAcupF,kBAAkBjyH,GAAM,EAAGA,EAAImB,OAAOnlD,MAAOgkD,EAAImB,OAAOjlD,QAC/E8jD,EAAI88E,QAGAk0G,EAAgB,SAAChxL,EAAK/J,GAC1B,GAAI,UAAO/4C,YAAa,CAEtB8iD,EAAIyuG,OACJzuG,EAAI+W,YACJ,IAAIw8K,GAAK,IAAA3sL,eAAc3Q,EAAM0N,IAAIltC,EAAGw/B,EAAM0N,IAAIjtC,GAC9CspC,EAAIuuG,IAAIglF,EAAG98N,EAAG88N,EAAG78N,EAAG,EAAG,EAAG,EAAIjQ,KAAKqnE,IACnC9tB,EAAImX,SACJnX,EAAI6tG,YAGJ7tG,EAAI+W,YACJ,IAAIpQ,EAAc1Q,EAAMkQ,YAClBxC,GAAM,IAAAiD,eAAcD,EAAYlwC,EAAGkwC,EAAYjwC,OAAzC,GACZspC,EAAIuuG,IAAI5qG,EAAIltC,EAAGktC,EAAIjtC,EAAG,GAAI,EAAG,EAAIjQ,KAAKqnE,IAEtC9tB,EAAImX,SACJnX,EAAI6tG,YACJ7tG,EAAI0uG,YAsBKuqI,GAlBwC1lH,EAAxCA,sCAAwC,SAACvzH,GAAQ,2BAC5D,YAAgC,UAAqBvG,mBAAmB86E,eAAxE,+CAAwF,KAA7E2hB,EAA6E,QAEtF,GADe,UAAqBz8F,mBAAmBw8F,iBAAiBC,GAC7DplJ,OAAS,EAAG,CACrB,IAAM6gL,EAAoB,UAAqBl4H,mBAAmBy/O,qBAAqBhjJ,GACvF+iJ,EAAwBj5O,EAAK2xH,GAC7BwnH,EAAwBn5O,EAAK2xH,KAN2B,+EAkBvBsnH,EAA1BA,wBAA0B,SAACj5O,EAAK2xH,GAC3C,UAAcngB,uBAAuBxxG,EAAK2xH,KAG/BwnH,EAA0BA,EAA1BA,wBAA0B,SAACn5O,EAAK2xH,GAC3C,UAAY++D,4BAA4B1wL,EAAK2xH,K,yIC1P7C,WAAYvmH,EAAM2xN,IAAmB,qBACnC1gR,KAAK+uD,KAAOA,EACZ/uD,KAAK0gR,kBAAoBA,I,8ECN7B,I,IAAA,MACA,SACA,S,IACA,OACA,Q,mDAEA,IAAMqc,EAAuB,CAC3BhvO,mBAAoB,WAClB,UAAM9pC,UAAS,IAAA8pC,wBAEjBC,yBAA0B,WACL,UAAM7rD,WACUkxD,iBAAiBC,gBAChC7+D,QAClB,UAAMwvB,UAAS,IAAA+pC,8BAGnBP,0BAA2B,SAACsB,GAC1B,OAAO,UAAU8C,cAAc9C,IAEjCqqI,6BAA8B,SAACD,GAC7B,UAAMl1K,UAAS,IAAAmpL,gBAAe,EAAA7wJ,cAAcC,eAAgB28I,KAE9D6jG,wBAAyB,SAACh1R,GACxB,IAEMi1R,EAFQ,UAAM96R,WACkB+qD,kBAAkB1Q,eACX1wC,MAAK,SAAA0wC,GAAA,OAAkBA,EAAex0C,KAAOA,KAC1F,GAAIi1R,EACF,OAAO,UAAUnqO,YAAYmqO,EAAajuO,eAG9CmK,uBAAwB,SAACnxD,GACvB,IAAM+mD,EAAOguO,EAAqBC,wBAAwBh1R,GAEtD+mD,GACFA,EAAKuJ,uB,UAKIykO,G,8GCxCf,O,uDAEMG,G,aAQJ,WAAYtjP,IAAO,kCACjB55C,KAAKm9R,QAAUvjP,E,yDAEL+a,GACV30D,KAAKm9R,QAAQ7iI,YAAc3lG,I,6CAENw1G,GACrBnqK,KAAKm9R,QAAQvmJ,mBAAqBuzB,M,kCAbpCizH,qBAAuB,G,KAEvBC,cAAgB,K,KAChBC,mBAAqB,K,KACrBC,oBAAsB,K,KAWtB75H,eAAiB,SAACp8G,GAChB,EAAK+1O,cAAgB/1O,G,KAEvBg3G,oBAAsB,WACpB,OAAO,EAAK++H,e,KAEdrmD,sBAAwB,WAAQ,OAAO,EAAKomD,sB,KAC5CI,uBAAyB,SAACv3O,GAAa,EAAKm3O,qBAAuBn3O,G,KAEnE+nL,oBAAsB,SAACp0L,GAAY,EAAK0jP,mBAAqB1jP,G,KAC7D6jP,oBAAsB,WAAQ,OAAO,EAAKH,oB,KAE1CrvD,qBAAuB,SAACyvD,GAAiB,EAAKH,oBAAsBG,G,KACpE3jJ,qBAAuB,WAAQ,OAAO,EAAKwjJ,qB,KAE3CI,iCAAmC,SAAClpS,GAClC,EAAKmpS,gCAAkCnpS,G,KAGzCy5D,OAAS,SAACj6D,GACR,GAAIA,EAAK26O,kBAAoB36O,EAAK26O,iBAAiB5mO,GAAI,CACrD,IAAM4mO,EAAmB,UAAU52K,aAAa/jE,EAAK26O,iBAAiB5mO,IACtE,EAAKgmO,oBAAoBY,GAG3B,EAAKlrE,eAAezvK,EAAOA,EAAK4pS,iBAAmB,MACnD,EAAKL,uBAAuBvpS,EAAOA,EAAK4iI,mBAAqB,MAC7D,EAAKo3G,qBAAqBh6O,EAAOA,EAAK4lJ,kBAAoB,O,KAE5DolB,OAAS,WACP,IAAM2vE,EAAmB,EAAK6uD,sBAE9B,MAAO,CACLI,iBAAkB,EAAKv/H,sBACvBznC,mBAAoB,EAAKmgH,wBACzBpI,iBAAkBA,EAAmBA,EAAiB5mO,GAAK,KAC3D6xI,kBAAmB,EAAKE,0B,aAKfmjJ,G,wFC1CA,SACbY,EACAnhG,EACApjH,EACAwkN,EACAj1O,EACAsvE,GAEA,IAAI4lK,EAAU,GAAIC,EAAQ,GAAInmK,SAG9B,OAAOM,GACL,KAAK,EAAAviD,YAAYI,UACjB,KAAK,EAAAJ,YAAYK,UACf4hD,GAAQhvE,EACR,MACF,KAAK,EAAA+sB,YAAYM,UACjB,KAAK,EAAAN,YAAYG,UACf8hD,EAAOhvE,EAGXk1O,GAAU,IAAA1rN,uBAAsBwrN,EAAWrsO,KAAM8nB,EAAS9nB,KAAMqmE,GAChEmmK,GAAQ,IAAA3rN,uBAAsBwrN,EAAWvlO,GAAIokI,EAASpkI,GAAIu/D,GAC1D8nE,EAAck+F,EAAYE,EAASC,GACnC,IAAMC,GAAiB,IAAA5sN,kBAAiB0sN,EAASC,GAGjD,GAAIF,IAAqBG,EAAgB,CACvC,OAAO9lK,GACL,KAAK,EAAAviD,YAAYM,UACf,GAAI+nN,EAAiBH,EAAkB,CACrC,IAAM79B,GAAS69B,EAAmBG,GAAkB,EACpDF,EAAU,CAAC5jR,EAAG0jR,EAAWrsO,KAAKr3C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWrsO,KAAKp3C,EAAI6lP,GAChE+9B,EAAQ,CAAC7jR,EAAG0jR,EAAWvlO,GAAGn+C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWvlO,GAAGl+C,EAAI6lP,OACrD,CACL,IAAMA,GAASg+B,EAAiBH,GAAoB,EACpDC,EAAU,CAAC5jR,EAAG0jR,EAAWrsO,KAAKr3C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWrsO,KAAKp3C,EAAI6lP,GAChE+9B,EAAQ,CAAC7jR,EAAG0jR,EAAWvlO,GAAGn+C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWvlO,GAAGl+C,EAAI6lP,GAE5D,MACF,KAAK,EAAArqL,YAAYI,UACf,GAAIioN,EAAiBH,EAAkB,CACrC,IAAM79B,GAAS69B,EAAmBG,GAAkB,EACpDF,EAAU,CAAC5jR,EAAG0jR,EAAWrsO,KAAKr3C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWrsO,KAAKp3C,EAAI6lP,GAChE+9B,EAAQ,CAAC7jR,EAAG0jR,EAAWvlO,GAAGn+C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWvlO,GAAGl+C,EAAI6lP,OACrD,CACL,IAAMA,GAASg+B,EAAiBH,GAAoB,EACpDC,EAAU,CAAC5jR,EAAG0jR,EAAWrsO,KAAKr3C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWrsO,KAAKp3C,EAAI6lP,GAChE+9B,EAAQ,CAAC7jR,EAAG0jR,EAAWvlO,GAAGn+C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWvlO,GAAGl+C,EAAI6lP,GAE5D,MACF,KAAK,EAAArqL,YAAYK,UACf,GAAIgoN,EAAiBH,EAAkB,CACrC,IAAM79B,GAAS69B,EAAmBG,GAAkB,EACpDF,EAAU,CAAC5jR,EAAG0jR,EAAWrsO,KAAKr3C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWrsO,KAAKp3C,EAAI6lP,GAChE+9B,EAAQ,CAAC7jR,EAAG0jR,EAAWvlO,GAAGn+C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWvlO,GAAGl+C,EAAI6lP,OACrD,CACL,IAAMA,GAASg+B,EAAiBH,GAAoB,EACpDC,EAAU,CAAC5jR,EAAG0jR,EAAWrsO,KAAKr3C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWrsO,KAAKp3C,EAAI6lP,GAChE+9B,EAAQ,CAAC7jR,EAAG0jR,EAAWvlO,GAAGn+C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWvlO,GAAGl+C,EAAI6lP,GAE5D,MACF,KAAK,EAAArqL,YAAYG,UACf,GAAIkoN,EAAiBH,EAAkB,CACrC,IAAM79B,GAAS69B,EAAmBG,GAAkB,EACpDF,EAAU,CAAC5jR,EAAG0jR,EAAWrsO,KAAKr3C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWrsO,KAAKp3C,EAAI6lP,GAChE+9B,EAAQ,CAAC7jR,EAAG0jR,EAAWvlO,GAAGn+C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWvlO,GAAGl+C,EAAI6lP,OACrD,CACL,IAAMA,GAASg+B,EAAiBH,GAAoB,EACpDC,EAAU,CAAC5jR,EAAG0jR,EAAWrsO,KAAKr3C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWrsO,KAAKp3C,EAAI6lP,GAChE+9B,EAAQ,CAAC7jR,EAAG0jR,EAAWvlO,GAAGn+C,EAAI8lP,EAAO7lP,EAAGyjR,EAAWvlO,GAAGl+C,EAAI6lP,IAMhEtgE,EAAck+F,EAAYE,EAASC,KA9FvC,YAEMr+F,EAAgB,SAACk+F,EAAYE,EAASC,GAC1CH,EAAWrsO,KAAKr3C,EAAI4jR,EAAQ5jR,EAC5B0jR,EAAWrsO,KAAKp3C,EAAI2jR,EAAQ3jR,EAC5ByjR,EAAWvlO,GAAGn+C,EAAI6jR,EAAM7jR,EACxB0jR,EAAWvlO,GAAGl+C,EAAI4jR,EAAM5jR,I,iLC0DX,SAAS00C,EAAM+oE,EAAM7uB,GAElC,IAAM2uB,EAAgB7oE,EAAKuuE,mBACrB1jF,EAAQmV,EAAKruD,YACb64E,EAAW3/B,EAAM4/B,YAAYzqB,GAC7B4tI,EAAW/iJ,EAAMwvH,YAAYr6G,GACnC,OAAQnV,EAAM0c,WACZ,IAAK,SAC+B,eAA9BshE,EAAc/hD,YACmB,SAA/B+hD,EAAcwE,aAChB+hK,EAAyB5kN,EAAUojH,EAAU7kE,GACL,SAA/BF,EAAcwE,cACvBgiK,EAAyB7kN,EAAUojH,EAAU7kE,GAER,aAA9BF,EAAc/hD,cACY,UAA/B+hD,EAAcwE,aAChBiiK,EAAwB9kN,EAAUojH,EAAU7kE,GACJ,UAA/BF,EAAcwE,cACvBkiK,EAAwB/kN,EAAUojH,EAAU7kE,IAGhD,MACF,IAAK,YACH,IAAM+e,EAAiB9nF,EAAKruD,YAAYm2I,eACxC,GAAkC,eAA9Bjf,EAAc/hD,aAChB,GAAmC,SAA/B+hD,EAAcwE,aACO,MAAnBya,GAA6C,MAAnBA,GAC5Bt9D,EAAS9nB,KAAKr3C,EAAImkR,EAAUhlN,EAAS9nB,KAAKr3C,EAAI09G,GAC9Cv+C,EAAShhB,GAAGn+C,EAAImkR,EAAUhlN,EAAShhB,GAAGn+C,EAAI09G,KAE1C6kE,EAASlrI,KAAKr3C,EAAImkR,EAAU5hG,EAASlrI,KAAKr3C,EAAI09G,GAC9C6kE,EAASpkI,GAAGn+C,EAAImkR,EAAU5hG,EAASpkI,GAAGn+C,EAAI09G,SAEvC,GAAmC,SAA/BF,EAAcwE,aAAyB,CAET,UADbugE,EAASr/D,mBACblB,aACG,KAAnBya,GACFt9D,EAAS9nB,KAAKr3C,EAAImkR,EAAUhlN,EAAS9nB,KAAKr3C,EAAI09G,GAC9Cv+C,EAAShhB,GAAGn+C,EAAImkR,EAAUhlN,EAAShhB,GAAGn+C,EAAI09G,IACd,MAAnB+e,GAA6C,MAAnBA,GACnC8lD,EAASlrI,KAAKr3C,EAAImkR,EAAU5hG,EAASlrI,KAAKr3C,EAAI09G,GAC9C6kE,EAASpkI,GAAGn+C,EAAImkR,EAAU5hG,EAASpkI,GAAGn+C,EAAI09G,IAE1CsmK,EAAyB7kN,EAAUojH,EAAU7kE,IAG/Cv+C,EAAS9nB,KAAKr3C,EAAImkR,EAAUhlN,EAAS9nB,KAAKr3C,EAAI09G,GAC9Cv+C,EAAShhB,GAAGn+C,EAAImkR,EAAUhlN,EAAShhB,GAAGn+C,EAAI09G,UAGzC,GAAkC,aAA9BF,EAAc/hD,YAA4B,CACnD,GAAmC,UAA/B+hD,EAAcwE,aAEuB,SADb7iD,EAAS+jD,mBACblB,cACpBugE,EAASlrI,KAAKp3C,EAAIkkR,EAAU5hG,EAASlrI,KAAKp3C,EAAIy9G,GAC9C6kE,EAASpkI,GAAGl+C,EAAIkkR,EAAU5hG,EAASpkI,GAAGl+C,EAAIy9G,IAEnB,KAAnB+e,GAA4C,MAAnBA,GAC3Bt9D,EAAS9nB,KAAKp3C,EAAIkkR,EAAUhlN,EAAS9nB,KAAKp3C,EAAIy9G,GAC9Cv+C,EAAShhB,GAAGl+C,EAAIkkR,EAAUhlN,EAAShhB,GAAGl+C,EAAIy9G,IACd,MAAnB+e,GACT8lD,EAASlrI,KAAKp3C,EAAIkkR,EAAU5hG,EAASlrI,KAAKp3C,EAAIy9G,GAC9C6kE,EAASpkI,GAAGl+C,EAAIkkR,EAAU5hG,EAASpkI,GAAGl+C,EAAIy9G,IAE1CumK,EAAwB9kN,EAAUojH,EAAU7kE,OAGR,UAA/BF,EAAcwE,eACA,KAAnBya,GAA4C,MAAnBA,GAC3B8lD,EAASlrI,KAAKp3C,EAAIkkR,EAAU5hG,EAASlrI,KAAKp3C,EAAIy9G,GAC9C6kE,EAASpkI,GAAGl+C,EAAIkkR,EAAU5hG,EAASpkI,GAAGl+C,EAAIy9G,KAE1Cv+C,EAAS9nB,KAAKp3C,EAAIkkR,EAAUhlN,EAAS9nB,KAAKp3C,EAAIy9G,GAC9Cv+C,EAAShhB,GAAGl+C,EAAIkkR,EAAUhlN,EAAShhB,GAAGl+C,EAAIy9G,SAGzC,CACL,IAAM0mK,GAAqB,IAAAtiN,mBAAkBntB,EAAK0C,KAAM1C,EAAKwJ,GAAIu/D,EAAO,GAClE2mK,GAAmB,IAAAviN,mBAAkBntB,EAAKwJ,GAAIxJ,EAAK0C,KAAMqmE,EAAO,GACtE/oE,EAAKwJ,GAAGn+C,EAAIqkR,EAAiBrkR,EAC7B20C,EAAKwJ,GAAGl+C,EAAIokR,EAAiBpkR,EAC7B00C,EAAK0C,KAAKr3C,EAAIokR,EAAmBpkR,EACjC20C,EAAK0C,KAAKp3C,EAAImkR,EAAmBnkR,EAEnC,MAEF,IAAK,YACH,IAAMw8H,EAAiB9nF,EAAKruD,YAAYm2I,eAClC6nJ,EAAoBnlN,EAAS+jD,mBAC7BqhK,EAAoBhiG,EAASr/D,mBAWnC,GATAtlI,QAAQ4B,IAAI,mCACZ5B,QAAQ4B,IAAI,OAAQm1D,GACpB/2D,QAAQ4B,IAAI,OAAQk+H,GACpB9/H,QAAQ4B,IAAI,kBAAmBggD,EAAM0c,WACrCt+D,QAAQ4B,IAAI,4BAA6Bg+H,EAAc/hD,aACvD79E,QAAQ4B,IAAI,6BAA8Bg+H,EAAcwE,cACxDpkI,QAAQ4B,IAAI,iCAAkC8kS,EAAkBtiK,cAChEpkI,QAAQ4B,IAAI,iCAAkC+kS,EAAkBviK,cAChEpkI,QAAQ4B,IAAI,iBAAkBi9I,GACI,eAA9Bjf,EAAc/hD,YACmB,SAA/B+hD,EAAcwE,aACuB,UAAnCsiK,EAAkBtiK,aACG,KAAnBya,GACF8lD,EAASlrI,KAAKr3C,EAAImkR,EAAU5hG,EAASlrI,KAAKr3C,EAAI09G,GAC9C6kE,EAASpkI,GAAGn+C,EAAImkR,EAAU5hG,EAASpkI,GAAGn+C,EAAI09G,IACd,MAAnB+e,EACTsnJ,EAAyB5kN,EAAUojH,EAAU7kE,GACjB,MAAnB+e,GACTt9D,EAAS9nB,KAAKr3C,EAAImkR,EAAUhlN,EAAS9nB,KAAKr3C,EAAI09G,GAC9Cv+C,EAAShhB,GAAGn+C,EAAImkR,EAAUhlN,EAAShhB,GAAGn+C,EAAI09G,KAE1CqmK,EAAyB5kN,EAAUojH,EAAU7kE,GAC7CsmK,6BAA4BrvO,EAAKiuI,kBAAjC,QAAmDllE,MAEzB,KAAnB+e,GACT8lD,EAASlrI,KAAKr3C,EAAImkR,EAAU5hG,EAASlrI,KAAKr3C,EAAI09G,GAC9C6kE,EAASpkI,GAAGn+C,EAAImkR,EAAU5hG,EAASpkI,GAAGn+C,EAAI09G,KAE1CqmK,EAAyB5kN,EAAUojH,EAAU7kE,GAC7CsmK,6BAA4BrvO,EAAKiuI,kBAAjC,QAAmDllE,MAEb,SAA/BF,EAAcwE,eACgB,UAAnCsiK,EAAkBtiK,aACG,KAAnBya,GACFt9D,EAAS9nB,KAAKr3C,EAAImkR,EAAUhlN,EAAS9nB,KAAKr3C,EAAI09G,GAC9Cv+C,EAAShhB,GAAGn+C,EAAImkR,EAAUhlN,EAAShhB,GAAGn+C,EAAI09G,IACd,MAAnB+e,GACTunJ,EAAyB7kN,EAAUojH,EAAU7kE,GAC7CqmK,6BAA4BpvO,EAAKiuI,kBAAjC,QAAmDllE,MACvB,MAAnB+e,GACT8lD,EAASlrI,KAAKr3C,EAAImkR,EAAU5hG,EAASlrI,KAAKr3C,EAAI09G,GAC9C6kE,EAASpkI,GAAGn+C,EAAImkR,EAAU5hG,EAASpkI,GAAGn+C,EAAI09G,IAE1CsmK,EAAyB7kN,EAAUojH,EAAU7kE,GAEnB,MAAnB+e,GACT8lD,EAASlrI,KAAKr3C,EAAImkR,EAAU5hG,EAASlrI,KAAKr3C,EAAI09G,GAC9C6kE,EAASpkI,GAAGn+C,EAAImkR,EAAU5hG,EAASpkI,GAAGn+C,EAAI09G,KAE1CsmK,EAAyB7kN,EAAUojH,EAAU7kE,GAC7CqmK,6BAA4BpvO,EAAKiuI,kBAAjC,QAAmDllE,YAGlD,GAAkC,aAA9BF,EAAc/hD,YACY,UAA/B+hD,EAAcwE,aACO,MAAnBya,GACFt9D,EAAS9nB,KAAKp3C,EAAIkkR,EAAUhlN,EAAS9nB,KAAKp3C,EAAIy9G,GAC9Cv+C,EAAShhB,GAAGl+C,EAAIkkR,EAAUhlN,EAAShhB,GAAGl+C,EAAIy9G,IAEH,SAAnC6mK,EAAkBviK,aACG,MAAnBya,GACFwnJ,EAAwB9kN,EAAUojH,EAAU7kE,GAC5CwmK,6BAA2BvvO,EAAKiuI,kBAAhC,QAAkDllE,OAElD6kE,EAASlrI,KAAKp3C,EAAIkkR,EAAU5hG,EAASlrI,KAAKp3C,EAAIy9G,GAC9C6kE,EAASpkI,GAAGl+C,EAAIkkR,EAAU5hG,EAASpkI,GAAGl+C,EAAIy9G,KAG5CumK,EAAwB9kN,EAAUojH,EAAU7kE,GAC5CwmK,6BAA2BvvO,EAAKiuI,kBAAhC,QAAkDllE,MAGd,UAA/BF,EAAcwE,eACgB,SAAnCsiK,EAAkBtiK,aACG,KAAnBya,GACFynJ,EAAwB/kN,EAAUojH,EAAU7kE,GAC5CumK,6BAA2BtvO,EAAKiuI,kBAAhC,QAAkDllE,MACtB,MAAnB+e,GACT8lD,EAASlrI,KAAKp3C,EAAIkkR,EAAU5hG,EAASlrI,KAAKp3C,EAAIy9G,GAC9C6kE,EAASpkI,GAAGl+C,EAAIkkR,EAAU5hG,EAASpkI,GAAGl+C,EAAIy9G,KAE1Cv+C,EAAS9nB,KAAKp3C,EAAIkkR,EAAUhlN,EAAS9nB,KAAKp3C,EAAIy9G,GAC9Cv+C,EAAShhB,GAAGl+C,EAAIkkR,EAAUhlN,EAAShhB,GAAGl+C,EAAIy9G,IAEhB,MAAnB+e,GACT8lD,EAASlrI,KAAKp3C,EAAIkkR,EAAU5hG,EAASlrI,KAAKp3C,EAAIy9G,GAC9C6kE,EAASpkI,GAAGl+C,EAAIkkR,EAAU5hG,EAASpkI,GAAGl+C,EAAIy9G,KAE1CwmK,EAAwB/kN,EAAUojH,EAAU7kE,GAC5CumK,6BAA2BtvO,EAAKiuI,kBAAhC,QAAkDllE,WAGjD,CACL,IAAM0mK,GAAqB,IAAAtiN,mBAAkBntB,EAAK0C,KAAM1C,EAAKwJ,GAAIu/D,EAAO,GAClE2mK,GAAmB,IAAAviN,mBAAkBntB,EAAKwJ,GAAIxJ,EAAK0C,KAAMqmE,EAAO,GACtE/oE,EAAKwJ,GAAGn+C,EAAIqkR,EAAiBrkR,EAC7B20C,EAAKwJ,GAAGl+C,EAAIokR,EAAiBpkR,EAC7B00C,EAAK0C,KAAKr3C,EAAIokR,EAAmBpkR,EACjC20C,EAAK0C,KAAKp3C,EAAImkR,EAAmBnkR,EAEnC,MAEF,QACE,GAAI4uF,EAAiB,CACnB,IAAM21L,EAAehlP,EAAM4/B,YAAYD,GACjCslN,EAAejlP,EAAMwvH,YAAYuzB,GACjCmiG,EAAwBF,EAAathK,mBACrCyhK,EAAwBF,EAAavhK,mBAErCkhK,GAAqB,IAAAtiN,mBAAkBntB,EAAK0C,KAAM1C,EAAKwJ,GAAIu/D,EAAO,GAClE2mK,GAAmB,IAAAviN,mBAAkBntB,EAAKwJ,GAAIxJ,EAAK0C,KAAMqmE,EAAO,GAChE6F,EAAS6gK,EAAmBpkR,EAAI20C,EAAK0C,KAAKr3C,EAC1CwjH,EAAS4gK,EAAmBnkR,EAAI00C,EAAK0C,KAAKp3C,EAGhD00C,EAAKwJ,GAAGn+C,EAAIqkR,EAAiBrkR,EAC7B20C,EAAKwJ,GAAGl+C,EAAIokR,EAAiBpkR,EAC7B00C,EAAK0C,KAAKr3C,EAAIokR,EAAmBpkR,EACjC20C,EAAK0C,KAAKp3C,EAAImkR,EAAmBnkR,EAGjCk/D,EAAS9nB,KAAKr3C,GAAKujH,EACnBpkD,EAAS9nB,KAAKp3C,GAAKujH,EAEuB,eAAtCkhK,EAAsBjpN,cACxB0D,EAAS9nB,KAAKp3C,GAAKujH,GAEqB,aAAtCkhK,EAAsBjpN,cACxB0D,EAAS9nB,KAAKr3C,GAAKujH,GAIrBg/D,EAASpkI,GAAGn+C,GAAKujH,EACjBg/D,EAASpkI,GAAGl+C,GAAKujH,EAEyB,eAAtCmhK,EAAsBlpN,cACxB8mH,EAASpkI,GAAGl+C,GAAKujH,GAEuB,aAAtCmhK,EAAsBlpN,cACxB8mH,EAASpkI,GAAGn+C,GAAKujH,OAGd,CACL,IAAM6gK,GAAqB,IAAAtiN,mBAAkBntB,EAAK0C,KAAM1C,EAAKwJ,GAAIu/D,EAAO,GAClE2mK,GAAmB,IAAAviN,mBAAkBntB,EAAKwJ,GAAIxJ,EAAK0C,KAAMqmE,EAAO,GACtE/oE,EAAKwJ,GAAGn+C,EAAIqkR,EAAiBrkR,EAC7B20C,EAAKwJ,GAAGl+C,EAAIokR,EAAiBpkR,EAC7B00C,EAAK0C,KAAKr3C,EAAIokR,EAAmBpkR,EACjC20C,EAAK0C,KAAKp3C,EAAImkR,EAAmBnkR,KA/SzC,YAEO,IAAMkkR,EAAYA,EAAZA,UAAY,SAACrnS,GAAD,OAAWkT,KAAKC,MAAc,IAARnT,GAAe,KAE9D,SAASinS,EAAyB5kN,EAAUojH,EAAU7kE,GACpDv+C,EAAS9nB,KAAKr3C,EAAImkR,EAAUhlN,EAAS9nB,KAAKr3C,EAAI09G,EAAK,GACnDv+C,EAAShhB,GAAGn+C,EAAImkR,EAAUhlN,EAAShhB,GAAGn+C,EAAI09G,EAAK,GAC/C6kE,EAASlrI,KAAKr3C,EAAImkR,EAAU5hG,EAASlrI,KAAKr3C,EAAI09G,EAAK,GACnD6kE,EAASpkI,GAAGn+C,EAAImkR,EAAU5hG,EAASpkI,GAAGn+C,EAAI09G,EAAK,GAC5Cv+C,EAAS7tB,iBACV6tB,EAAS5tB,eAAe8wI,YAAY3kE,EAAO,EAAG,GAE7C6kE,EAASjxI,iBACVixI,EAAShxI,eAAe8wI,aAAa3kE,EAAO,EAAG,GAE9Cv+C,EAASrtB,iBACVqtB,EAASy5D,eAAe0pD,YAAY5kE,EAAO,EAAG,GAE7C6kE,EAASzwI,iBACVywI,EAAS3pD,eAAe0pD,aAAa5kE,EAAO,EAAG,GAGnD,SAASsmK,EAAyB7kN,EAAUojH,EAAU7kE,GACpDv+C,EAAS9nB,KAAKr3C,EAAImkR,EAAUhlN,EAAS9nB,KAAKr3C,EAAI09G,EAAK,GACnDv+C,EAAShhB,GAAGn+C,EAAImkR,EAAUhlN,EAAShhB,GAAGn+C,EAAI09G,EAAK,GAC/C6kE,EAASlrI,KAAKr3C,EAAImkR,EAAU5hG,EAASlrI,KAAKr3C,EAAI09G,EAAK,GACnD6kE,EAASpkI,GAAGn+C,EAAImkR,EAAU5hG,EAASpkI,GAAGn+C,EAAI09G,EAAK,GAC5Cv+C,EAAS7tB,iBACV6tB,EAAS5tB,eAAe8wI,aAAa3kE,EAAO,EAAG,GAE9C6kE,EAASjxI,iBACVixI,EAAShxI,eAAe8wI,YAAY3kE,EAAO,EAAG,GAE7Cv+C,EAAS7tB,iBACV6tB,EAASy5D,eAAe0pD,aAAa5kE,EAAO,EAAG,GAE9C6kE,EAASjxI,iBACVixI,EAAS3pD,eAAe0pD,YAAY5kE,EAAO,EAAG,GAGlD,SAASumK,EAAwB9kN,EAAUojH,EAAU7kE,GACnDv+C,EAAS9nB,KAAKp3C,EAAIkkR,EAAUhlN,EAAS9nB,KAAKp3C,EAAIy9G,EAAK,GACnDv+C,EAAShhB,GAAGl+C,EAAIkkR,EAAUhlN,EAAShhB,GAAGl+C,EAAIy9G,EAAK,GAC/C6kE,EAASlrI,KAAKp3C,EAAIkkR,EAAU5hG,EAASlrI,KAAKp3C,EAAIy9G,EAAK,GACnD6kE,EAASpkI,GAAGl+C,EAAIkkR,EAAU5hG,EAASpkI,GAAGl+C,EAAIy9G,EAAK,GAC5Cv+C,EAAS7tB,iBACV6tB,EAAS5tB,eAAe8wI,YAAY,EAAG3kE,EAAO,GAE7C6kE,EAASjxI,iBACVixI,EAAShxI,eAAe8wI,YAAY,GAAG3kE,EAAO,GAGlD,SAASwmK,EAAwB/kN,EAAUojH,EAAU7kE,GACnDv+C,EAAS9nB,KAAKp3C,EAAIkkR,EAAUhlN,EAAS9nB,KAAKp3C,EAAIy9G,EAAK,GACnDv+C,EAAShhB,GAAGl+C,EAAIkkR,EAAUhlN,EAAShhB,GAAGl+C,EAAIy9G,EAAK,GAC/C6kE,EAASlrI,KAAKp3C,EAAIkkR,EAAU5hG,EAASlrI,KAAKp3C,EAAIy9G,EAAK,GACnD6kE,EAASpkI,GAAGl+C,EAAIkkR,EAAU5hG,EAASpkI,GAAGl+C,EAAIy9G,EAAK,GAC5Cv+C,EAAS7tB,iBACV6tB,EAAS5tB,eAAe8wI,YAAY,GAAG3kE,EAAO,GAE7C6kE,EAASjxI,iBACVixI,EAAShxI,eAAe8wI,YAAY,EAAE3kE,EAAO,GAwPhBknK,EAApBA,kBAAoB,SAACjwO,GAEhC,OADcA,EAAKruD,YACL41D,WACZ,IAAK,SACL,IAAK,YACL,QAEA,IAAK,aA+CP,MAAO,S,wFCnWM,WAAgE,IAAvD2oO,EAAuD,uDAAtCC,EAAiBC,EAAqB,uDAAH,EACtEl5O,SAYJ,OAXwB,IAApBk5O,IACFA,EAAyC,aAAvB,UAAOvyR,YAA6BwyR,EAAmBC,GAG3Ep5O,EAAS,CACP,IAAI,EAAJ,QAAU,EAAG,EAAG,WAChB,IAAI,EAAJ,QAAUg5O,EAAgB,EAAG,YAC7B,IAAI,EAAJ,QAAUA,EAAgBE,EAAiB,eAC3C,IAAI,EAAJ,QAAU,EAAGA,EAAiB,eAGzB,CACL,IAAI,EAAJ,QAASl5O,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,MAzB/B,I,IAAA,Q,IACA,Q,IACA,O,mDAEA,IAAMi5O,EAAkB,IAClBE,EAAmB,GACnBC,EAA0B,O,2HCNhC,I,EAAA,S,oCACA,SAEA,IAAMC,EAAe,CAAC,2BAA4B,cACvBC,EAAdA,YAAc,SAACj5R,EAAQszC,GAA8B,IAAvBlvB,EAAuB,uDAAT,KACvDkvB,EAAM4hH,UAAUl1J,GAChBszC,EAAMyd,cAAa,IAAAC,mBAAkBhxD,IAChCg5R,EAAanlS,SAASmM,GAGzBszC,EAAMyhH,aAAQroG,GAFdpZ,EAAMyhH,QAAQ/0J,GAIZokB,GACFkvB,EAAM0hH,YAAY,oBAAqB5wI,EAAY1iB,KAI9Bw3R,EAAZA,UAAY,SAACpjG,EAAW91L,EAAQszC,GAC3C,IAAI6lP,EAAiB7lP,EAAM6R,WAAW,GAEH,OAAhCg0O,EAAer/H,aAChBq/H,EAAer/H,aAAas/H,aAAatjG,IAEzCqjG,EAAer/H,aAAe,IAAI,EAAJ,QAC9Bq/H,EAAer/H,aAAapqG,KAAKypO,EAAgBrjG,EAAW91L,KAIvC8qI,EAAZA,UAAY,SAACgrD,EAAW91L,EAAQszC,GAC3C,IAAI+lP,EAAiB/lP,EAAM6R,WAAW,GACtCk0O,EAAexnG,aAAe,IAAI,EAAJ,QAAU,CACtCynG,eAAgB,4BAChBC,SAAS,EACTC,WAAY,KAEdH,EAAexnG,aAAaniI,KAAK2pO,EAAgBvjG,EAAW91L,K,2ICnC9D,I,IAAA,OACA,S,WACA,O,IACA,OACA,Q,mDASO,IAAMy5R,EAAmBA,EAAnBA,iBAAmB,SAACz4O,GAC/B,IAAI04O,EAAa,CACfzvO,SAAU,UAAaqJ,WAAWujC,UAClCksH,SAAS,EACTunB,YAAY,EACZmC,kBAAkB,EAClBC,iBAAiB,EACjBnC,kBAAkB,GAEhBO,EAAc,CAChB/8L,OAAQ,GACRmmB,UAAW,EACXt/C,OAAQ,EAAAm2N,mBAAmBpiF,OAEzBh6E,EAAO,UAAUjqB,cACjBjJ,EAAQ,UAAWA,MACnB6yB,EAAS,CACXx6D,GAAIktC,EAAIltC,EAAI66D,EAAK76D,GAAK2nC,EACtB1nC,GAAIitC,EAAIjtC,EAAI46D,EAAK56D,GAAK0nC,GAGxB,OAAO,IAAI,EAAJ,QAAY6yB,EAAOx6D,EAAGw6D,EAAOv6D,EAA7B,UAA2C2lR,EAAY5uD,IAmBnD6uD,GAhBiBC,EAAjBA,eAAiB,SAACC,EAAe74O,EAAKqpO,GACjD,IAAMzjD,EAAW6yD,EAAiBz4O,GAC5B84O,EAAiBH,EAAgBE,EAAexP,GAChD0P,GAAwB,IAAAxrN,yBAAwBurN,EAAehmR,EAAGgmR,EAAe/lR,GAGvF,OAFA6yN,EAASriL,YAAYw1O,GAEdnzD,GAUsB+yD,EAAlBA,gBAAkB,SAACK,GAAuE,IAA9DC,EAA8D,uDAAlD,GAAIn4O,EAA8C,uDAAnC,UAAa43C,kBACzEwgM,EAAoBF,EAAQ/1O,gBAE9Bk2O,GAAqB,IAAAhjN,qCAAoCr1B,EAAUo4O,GACnE1sO,GAAa,IAAAwd,kBAAiBkvN,EAAmBp4O,GAC/Cs4O,EAAet2R,KAAKC,MAAMo2R,EAAqBF,GAAaA,EAC5D70D,EAAYg1D,EAAet2R,KAAKqnE,GAAM,IAE5C,MAAO,CACLr3D,EAAGomR,EAAkBpmR,EAAI05C,EAAa1pD,KAAKsnE,IAAIg6J,GAC/CrxN,EAAGmmR,EAAkBnmR,EAAIy5C,EAAa1pD,KAAKunE,IAAI+5J,O,sIC/DnD,O,IACA,QAEA,SACA,Q,IAKA,O,IACA,MACA,SACA,Q,IACA,O,IACA,QACA,S,uDAEqBi1D,E,WAqBnB,WAAY5xO,GAAM,sCAjBlB49K,OAAS,CACP7lL,WAAW,EACXuE,YAAY,EACZ40G,sBAAsB,EACtBg2B,UAAU,EACVC,gBAAgB,EAChBC,UAAU,EACVK,OAAQ,KACRM,iBAAkB,KAClB5qI,eAAe,GAQC,KANlB+J,cAAgB,KAME,KALlB+8E,eAAiB,KAKC,KAJlBxV,OAAS,CACPojK,4BAA6B,GAGb,KAalB10O,cAAgB,WACd,OAAO,EAAKnlD,MAAMmlD,eAdF,KAmClBoM,mBAAqB,WACnB,EAAKvxD,MAAMkvL,UAAW,EACtB,EAAKlvL,MAAMmvL,gBAAiB,EAC5B,EAAKnvL,MAAMovL,UAAW,EACtB,EAAKpvL,MAAMyvL,OAAS,KACpB,EAAKzvL,MAAMkvD,cAAgB,KAC3B,UAAMhyC,UAAS,IAAAi/K,0BAAyB,EAAA3mJ,cAAcC,eAAgB,KAzCtD,KA6DlBqwJ,oBAAsB,SAACp5I,EAAUzrD,GAC/B,EAAKjB,MAAMkvL,UAAW,EACtB,EAAKlvL,MAAMmvL,gBAAiB,EAC5B,EAAKnvL,MAAMovL,UAAW,EACtB,EAAKpvL,MAAMyvL,OAASxuL,GAjEJ,KAsElB8kM,0BAA4B,SAAC/V,EAAgB3rL,EAAMgkD,EAAW0nI,GAC/C,SAAT1rL,GACF,EAAKrE,MAAMovL,UAAW,EACtB,EAAKpvL,MAAMmvL,gBAAiB,IAE5B,EAAKnvL,MAAMmvL,gBAAiB,EAC5B,EAAKnvL,MAAMovL,UAAW,GAExB,EAAKpvL,MAAMkvL,UAAW,EACtB,EAAKlvL,MAAMyvL,OAASpnI,EACpB,EAAKroD,MAAM+vL,iBAAmBA,GAhFd,KAoFlBkW,uBAAyB,WACvB,IAAK,IAAM5S,KAAmBrzL,MAAMkwL,cAClC,EAAKlwL,MAAMkwL,cAAcmD,IAAmB,EAE9C,OAAK,EAAKrzL,MAAMmlD,gBACd,EAAKoM,qBAEL,EAAKvxD,MAAMmlD,eAAgB,EACS,OAAhC,UAAUnE,oBACZ,UAAUA,kBAAoB,IAAI,EAAJ,SAEhC,EAAKirF,eAAiB,UAAUjrF,kBAAkBk0I,qBAAqB,GACvE,EAAKjpD,eAAeh9E,QAKf,EAAKg9E,gBApGZhzI,KAAK+uD,KAAOA,EACZ/uD,KAAKgI,GAAK,UAAKqa,K,gEAgBf,OAAOriB,KAAKi2D,gB,yCAIZ,IAAIkkI,GAAqB,EACzB,IAAK,IAAMC,KAAmBp6L,KAAK2sO,OAAO11C,cACpCj3L,KAAK2sO,OAAO11C,cAAcmD,KAC5BD,GAAqB,GAGzB,OAAOn6L,KAAK2sO,OAAO12C,UACdj2L,KAAK2sO,OAAOz2C,gBACZl2L,KAAK2sO,OAAOx2C,UACZn2L,KAAK2sO,OAAOn2C,QACZ2D,I,kCAcL,OAAOn6L,KAAK+uD,KAAKwJ,GAAG/jB,Q,sCAIpB,OAAOx0C,KAAK+uD,KAAKuuB,oBAAmB,IAAAvF,yBAAwB/3E,KAAK+uD,KAAKwJ,GAAG/jB,U,wCAIzE,OAAO,IAAAujC,yBAAwB/3E,KAAK+uD,KAAKwJ,GAAG/jB,OAAO+d,c,kCAInD,OAAOvyD,KAAK+uD,KAAKruD,c,6CA8CI0nD,GACrBpoD,KAAK+G,MAAMskD,YAAa,EACxBrrD,KAAK+G,MAAMk5J,sBAAuB,EAE/BjgK,KAAK+uD,KAAKwJ,GAAG/jB,MAAQ,GAAKx0C,KAAK6gS,iBAAiBz4O,KAEjDpoD,KAAK+G,MAAMskD,YAAa,GAGvBrrD,KAAK+uD,KAAKwJ,GAAG/jB,MAAQ,GAAKx0C,KAAK8gS,sBAAsB14O,KAEtDpoD,KAAK+G,MAAMk5J,sBAAuB,K,+BAKpC,MAAO,CACLj4J,GAAIhI,KAAKgI,GACT2kO,OAAQ,UAAE5hL,MAAM/qD,KAAK2sO,QACrB35F,eAAgBhzI,KAAKgzI,eAAiBhzI,KAAKgzI,eAAeisB,SAAW,Q,6BAIlEhrK,GACL+L,KAAKgI,GAAK/T,EAAK+T,GACfhI,KAAK2sO,OAAS14O,EAAK04O,OACf14O,EAAK++I,iBAE6B,OAAhC,UAAUjrF,oBACZ,UAAUA,kBAAoB,IAAI,EAAJ,SAEhC/nD,KAAKgzI,eAAiB,UAAUjrF,kBAAkBk0I,qBAAqBj8L,MACvEA,KAAKgzI,eAAe9kF,OAAOluD,KAAM/L,EAAK0gD,SACtC30C,KAAK+G,MAAMmlD,eAAgB,EAC3B,UAAMjoC,UAAS,IAAAi4K,mBAAkBl8L,KAAKgzI,oB,uCAIzB5qF,GAEf,IAAI4yI,EAAQh7L,KAAK+gS,2BAIjB,OAHiB,IAAAz8H,aAAY02B,EAAO5yI,KAC/B,IAAAk8G,aAAY,CAAC02B,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAAK5yI,IAEtCpoD,KAAK+G,MAAM+/C,Y,4CAGZsB,GACpB,IAAI4yI,EAAQh7L,KAAKghS,oBAIjB,OAHiB,IAAA18H,aAAY02B,EAAO5yI,KAC/B,IAAAk8G,aAAY,CAAC02B,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAAK5yI,IAEtCpoD,KAAK+G,MAAM+/C,Y,0CAIhC,IAAMuwI,EAAkBr3L,KAAKmiM,iBACvB3kE,EAAkBx9H,KAAK+uD,KAAKmsG,YAGlC,QAAuCloG,IAAnCqkI,EAAgB4pG,eAClB,MAAO,GAGT,IAAIrpG,EAAgBp6D,EAAOm6D,aAAe33L,KAAKw9H,OAAOojK,4BAsBtD,OAnBGvpG,EAAgB4pG,eAAe5mR,EAAIg9K,EAAgB6pG,aAAa7mR,GAAKg9K,EAAgB4pG,eAAe7mR,EAAIi9K,EAAgB6pG,aAAa9mR,GACnIi9K,EAAgB4pG,eAAe5mR,EAAIg9K,EAAgB6pG,aAAa7mR,GAAKg9K,EAAgB4pG,eAAe7mR,EAAIi9K,EAAgB6pG,aAAa9mR,EAE5H,CACV,CAACi9K,EAAgB4pG,eAAe7mR,EAAIw9K,EAAeP,EAAgB4pG,eAAe5mR,EAAIu9K,GACtF,CAACP,EAAgB6pG,aAAa9mR,EAAIw9K,EAAeP,EAAgB6pG,aAAa7mR,EAAIu9K,GAClF,CAACP,EAAgB4pG,eAAe7mR,EAAIw9K,EAAeP,EAAgB4pG,eAAe5mR,EAAIu9K,GACtF,CAACP,EAAgB6pG,aAAa9mR,EAAIw9K,EAAeP,EAAgB6pG,aAAa7mR,EAAIu9K,IAIxE,CACV,CAACP,EAAgB6pG,aAAa9mR,EAAIw9K,EAAeP,EAAgB6pG,aAAa7mR,EAAIu9K,GAClF,CAACP,EAAgB4pG,eAAe7mR,EAAIw9K,EAAeP,EAAgB4pG,eAAe5mR,EAAIu9K,GACtF,CAACP,EAAgB6pG,aAAa9mR,EAAIw9K,EAAeP,EAAgB6pG,aAAa7mR,EAAIu9K,GAClF,CAACP,EAAgB4pG,eAAe7mR,EAAIw9K,EAAeP,EAAgB4pG,eAAe5mR,EAAIu9K,M,iDAQ1F,IAAMP,EAAkBr3L,KAAKmiM,iBACvB3kE,EAAkBx9H,KAAK+uD,KAAKmsG,YAGlC,QAA8BloG,IAA1BqkI,EAAgB+K,MAClB,MAAO,GAGT,IAAIxK,EAAgBp6D,EAAOm6D,aAAe33L,KAAKw9H,OAAOojK,4BAsBtD,OAnBGvpG,EAAgBgL,MAAMhoL,EAAIg9K,EAAgBiL,MAAMjoL,GAAKg9K,EAAgBgL,MAAMjoL,EAAIi9K,EAAgBiL,MAAMloL,GACnGi9K,EAAgBgL,MAAMhoL,EAAIg9K,EAAgBiL,MAAMjoL,GAAKg9K,EAAgBgL,MAAMjoL,EAAIi9K,EAAgBiL,MAAMloL,EAE5F,CACV,CAACi9K,EAAgBgL,MAAMjoL,EAAIw9K,EAAeP,EAAgBgL,MAAMhoL,EAAIu9K,GACpE,CAACP,EAAgBiL,MAAMloL,EAAIw9K,EAAeP,EAAgBiL,MAAMjoL,EAAIu9K,GACpE,CAACP,EAAgBgL,MAAMjoL,EAAIw9K,EAAeP,EAAgBgL,MAAMhoL,EAAIu9K,GACpE,CAACP,EAAgBiL,MAAMloL,EAAIw9K,EAAeP,EAAgBiL,MAAMjoL,EAAIu9K,IAI1D,CACV,CAACP,EAAgBiL,MAAMloL,EAAIw9K,EAAeP,EAAgBiL,MAAMjoL,EAAIu9K,GACpE,CAACP,EAAgBgL,MAAMjoL,EAAIw9K,EAAeP,EAAgBgL,MAAMhoL,EAAIu9K,GACpE,CAACP,EAAgBiL,MAAMloL,EAAIw9K,EAAeP,EAAgBiL,MAAMjoL,EAAIu9K,GACpE,CAACP,EAAgBgL,MAAMjoL,EAAIw9K,EAAeP,EAAgBgL,MAAMhoL,EAAIu9K,M,uCAQxE,IAAMhgE,EAAgB53H,KAAK+uD,KAAKruD,YAAYm3H,kBAAkB73H,KAAK+uD,MACjEgvG,EAAW/9J,KAAK+uD,KAAK+uG,wBAAwB99J,KAAK+uD,KAAKwJ,IACvDslG,EAAa79J,KAAK+uD,KAAK+uG,wBAAwB99J,KAAK+uD,KAAK0C,MACzDkrI,EAAW38L,KAAK+uD,KAAKruD,YAAY0oK,YAAYppK,KAAK+uD,MAClDqwI,EAAmBzC,EAAS7+B,wBAAwB6+B,EAASpkI,IAC7DilE,EAASx9H,KAAK+uD,KAAKmsG,YAEjBm8B,EAAkB,GAEtB,OAAQz/D,EAAc/hD,aACpB,IAAK,aACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACH8mH,EAASiD,qBACoB5sI,IAAzBhzD,KAAK+uD,KAAKixI,iBAAuDhtI,IAA3BhzD,KAAK+uD,KAAKgxI,cAClD//L,KAAK+uD,KAAK6wI,gBAGZ,IAAMwC,EAAQpiM,KAAK+uD,KAAKixI,WAClBuC,GAAQ,IAAArmH,mBAAkBygH,EAASoD,aAAcpD,EAASqD,WAAYxiE,EAAOo6D,eAS7EvjJ,EADmBjqC,KAAKynE,KAAwC,EAAlCznE,KAAK0nE,IAAI9xE,KAAK+uD,KAAKwJ,GAAG/jB,MAAO,IAC/B,UAAWuN,MACvCo/O,GAAqB,IAAAljN,eAAcj+E,KAAK+uD,KAAKruD,YAAam9J,EAAYE,EAAUqhC,GAChFgiG,EAAcD,EAAoB,GAAK,EACvCE,GAAqB,IAAA/uN,uBAAsByrF,EAAUF,EAAYxpH,EAAS,EAAI+sP,GAC9EE,GAAyB,IAAAhvN,uBAAsByrF,EAAUqhC,EAAkB/qJ,EAAS,EAAI+sP,GApB9E,GAqBA,IAAAvuN,mBAAkBgrF,EAAYwjI,GAAoB7jK,EAAOo6D,eAAlEyK,GArBS,wBAsBA,IAAAxvH,mBAAkBusH,EAAkBkiG,EAAwB9jK,EAAOo6D,eAA5E0K,GAtBS,qBAwBVi/F,EAAmBJ,GAAqBnhS,KAAK+uD,KAAKwJ,GAAG/jB,MAAQgpF,EAAOo6D,cACtE,GACC,EACCqpG,GAAiB,IAAA/kN,mBAAkBmmH,EAAOC,EAAOi/F,EAAmB,UAAWx/O,OAC/Em/O,GAAe,IAAAhlN,mBAAkBomH,EAAOD,EAAOk/F,EAAmB,UAAWx/O,OAInFs1I,EAAkB,CAChB+K,MAAO,CACLhoL,EAAGgoL,EAAMhoL,EACTC,EAAG+nL,EAAM/nL,GAEXgoL,MAAO,CACLjoL,EAAGioL,EAAMjoL,EACTC,EAAGgoL,EAAMhoL,GAEXioL,MAAO,CACLloL,EAAGkoL,EAAMloL,EACTC,EAAGioL,EAAMjoL,GAEXkoL,MAAO,CACLnoL,EAAGmoL,EAAMnoL,EACTC,EAAGkoL,EAAMloL,GAEX4mR,eAAgB,CACd7mR,EAAG6mR,EAAe7mR,EAClBC,EAAG4mR,EAAe5mR,GAEpB6mR,aAAc,CACZ9mR,EAAG8mR,EAAa9mR,EAChBC,EAAG6mR,EAAa7mR,IAcxB,OALAg9K,EAAgBgL,MAAM1iM,MAAQ,UAAW+hD,WACzC21I,EAAgBiL,MAAM3iM,MAAQ,UAAW+hD,WACzC21I,EAAgBgL,MAAMxiM,OAAS,UAAW6hD,WAC1C21I,EAAgBiL,MAAMziM,OAAS,UAAW6hD,WAEnC21I,I,4BAlTP,OAAOr3L,KAAK2sO,Q,aAGJz1O,GACR8I,KAAK2sO,OAASz1O,M,eA/BGypS,G,8HCjBrB,O,WACA,MACA,OACA,O,uDAEMa,G,gBAYJ,WAAYl2L,IAAO,gGACXA,IADW,SAWnB+xE,qBAAuB,WACrB,EAAKC,SAAS,CACZM,QAAS,EAAK72K,MAAM62K,SACnB,WACDlvF,YAAW,WACT,EAAK3nF,MAAM62K,OACPzlL,OAAO0uD,iBAAiB,QAAS,EAAKi3H,mBACtC3lL,OAAO+qG,oBAAoB,QAAS,EAAK46E,qBAC5C,OAnBY,EAuBnB2jH,gBAAkB,SAACC,GACjB,EAAKrkH,uBACL,EAAK/xE,MAAMirJ,UAAUmrC,IAzBJ,EA4BnB5jH,kBAAoB,SAAC3nL,GAIf,EAAK4Q,MAAM62K,SAHS,CAAC,oCAAqC,wBAC5D,6BAA8B,kCAAmC,uBACjE,4BAA6B,kCACW39K,MAAK,SAAA8mP,GAAA,OAAO5wP,EAAEugB,OAAOuqI,QAAQ8lG,OACrE,EAAK1pE,wBAjCU,EAqCnBskH,cAAgB,SAACC,GACf,OAAQA,GACN,IAAK,MACL,IAAK,MACL,IAAK,OACL,IAAK,OACH,OAAO,4CAAkB55R,GAAI,uCAAyC45R,IACxE,QACE,OAAOA,IA3CX,EAAK76R,MAAQ,CACX62K,QAAQ,GAHO,E,uFAQjBzlL,OAAO+qG,oBAAoB,QAASljG,KAAK89K,qB,+BAyClC,WAED+jH,EAAgC,IAApB7hS,KAAKsrG,MAAMlgG,KAAa,YAAc,YAAYpL,KAAKsrG,MAAMlgG,KACzEyzK,EAAiB7+K,KAAK+G,MAAM62K,OAC9B,CAAE/9K,OAAQG,KAAKsrG,MAAMyvG,YAAYtmN,QAAUuL,KAAKsrG,MAAM0vG,eAAiB,GAAK,KAC5E,GAEJ,OACE,+BAAKpwH,UAAWi3M,GAAa7hS,KAAK+G,MAAM62K,OAAX,IAAwBikH,EAAxB,WAA8C,IAA3D,IAAqEA,EAArE,mBACb7hS,KAAKsrG,MAAM1gB,WAAa,KACzB,+BAAKA,UAAWi3M,EAAU,UAAW/kH,QAAS98K,KAAKq9K,sBACjD,gCAAMzyF,UAAWi3M,EAAU,iBAAkB7hS,KAAKsrG,MAAM2vG,WACvDj7M,KAAKsrG,MAAMp0G,MACV,gCAAM0zF,UAAWi3M,EAAU,iBAAkB7hS,KAAK2hS,cAAc3hS,KAAKsrG,MAAMp0G,QACzE,MAEN,+BAAK0zF,UAAWi3M,EAAU,eACvB7hS,KAAKsrG,MAAM0vG,eAAiB6mF,EAAU,8BAAgC,IAAKxtR,MAAOwqK,GACnF,8BAAIj0F,UAAWi3M,EAAU,mBACtB7hS,KAAKsrG,MAAMk1C,UAAYxgJ,KAAKsrG,MAAMyvG,YAAYjzM,KAAI,SAAC45R,EAAY9zR,GAC9D,OACE,8BAAIpW,IAAK,kBAAkBoW,EACvBk0R,aAAYl0R,EACZkvK,QAAS,kBAAM,EAAK2kH,gBAAgBC,IACpC92M,UAAWi3M,EAAU,wBACtB,EAAKF,cAAcD,EAAWp/Q,MAAQo/Q,c,kBApFhDx/I,UAAY,CACjB92I,KAAM,UAAUwtG,OAChBmiG,YAAa,UAAU1kM,MAAM4iG,WAC7Bs9I,UAAW,UAAUx3E,KACrBk8B,UAAW,UAAU94D,UAAU,CAAC,UAAUxqJ,OAAQ,UAAU6qC,SAC5DtrC,MAAO,UAAU40M,IACjBkP,eAAgB,UAAU54D,KAC1Bx3D,UAAW,UAAUpoD,Q,cA8FV,IAAAspE,UANS,SAACxzG,GACvB,MAAO,CACLqoB,YAAaroB,EAAMgR,YAAYqX,eAIK,GAAzB,CACZ6gR,I,yJC7GH,Q,IACA,Q,IAEA,QAEA,Q,IACA,Q,IAEA,S,IACA,Q,IACA,O,IACA,SACA,SACA,SACA,U,IACA,S,IACA,QACA,SACA,QACA,S,IACA,SACA,UACA,QACA,U,qDAEa5iP,O,YAmBX,WAAY0sD,IAAO,gGACXA,IADW,SAdnBwpK,YAAc,EAAAp+O,WAAWC,QAcN,EAbnBvrB,KAAO,EAAK0pQ,YAaO,EAZnB1gP,MAAQ,IAYW,EAXnB34B,eAAiB,EAAAd,2BAA2BG,OAWzB,EAVnBonO,gBAAkB,cAUC,EATnBlQ,cAAgB,aASG,EARnBl9G,YAQmB,uBAPnB6tH,YAOmB,eANnB17I,SAAW,UAASzoD,QAMD,EALnBo/N,yBAA2B,CAAC,gBAAiB,gBAAiB,kBAAmB,iBAC/E,kBAAmB,qBAAsB,cAAe,gBAAiB,kBAIxD,EAHnBjR,uBAAyB,CAAC,gBAAiB,cAAe,iBAAkB,kBAAmB,YAC7F,YAAa,aAAc,YAAa,gBAIxC,EAAKnuO,MAAM,UAAWxW,IAAU,IAAI,EAAJ,QAChC,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,EAAAqsH,OAAO7iI,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,EAAAu7E,OAAO/xF,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,EAAAixH,eAAeznI,IAAM,IAAI,EAAJ,eAChC,EAAKwW,MAAM,EAAAgpP,kBAAkBx/P,IAAM,IAAI,EAAJ,kBACnC,EAAKwW,MAAM,EAAAymP,YAAYj9P,IAAS,IAAI,EAAJ,YAChC,EAAKwW,MAAM,EAAA4oP,QAAQp/P,IAAa,IAAI,EAAJ,QAChC,EAAKwW,MAAM,EAAAimP,OAAOz8P,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,UAAMxW,IAAe,IAAI,EAAJ,QAChC,EAAKwW,MAAM,EAAAujR,aAAa/5R,IAAM,IAAI,EAAJ,aAE9B,EAAKwW,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvBtT,OAAOyhB,OAAO,EAAKqI,OAAOpgB,SAAQ,SAAAod,GAAA,OAAQA,EAAKN,OAAL,KAhBzB,E,mFAmBAvX,GA+CjB,OA9CAA,EAAUmP,SAAS+hB,WAAalxB,EAAUmP,SAAS+hB,WAAW/sB,KAAI,SAACooQ,GAYjE,QAXAA,GAAUA,GAAU,IAAIvxQ,QAAQ,QAAS,IAAIA,QAAQ,SAAU,MAChD,KACoB,SAA7BvF,SAASC,SAASmC,OACpB00Q,GAAWA,EAAS,GAAM,GAE1BvsQ,EAAU++E,cAAe,GAGxBwtL,EAAO/1Q,SAAS,YACnB+1Q,EAAS,SAAWA,GAEfA,KAGT,CAAC,cAAc9xQ,SAAQ,SAAA85F,GACjBtwF,MAAMC,QAAQlE,EAAUmP,SAASolF,MAC/Bv0F,EAAUmP,SAASolF,GAAU/9F,SAAS,KACxCwJ,EAAUmP,SAASolF,GAAY,CAAC,EAAA//D,SAASC,KAChCz0B,EAAUmP,SAASolF,GAAU/9F,SAAS,QAC/CwJ,EAAUmP,SAASolF,GAAYv0F,EAAUmP,SAASolF,GAAUpwF,KAAI,SAAAuwF,GAC9D,MAAkB,OAAdA,EACK,KAEFA,UAKXzwF,MAAMC,QAAQlE,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2Bre,SAC1EkP,EAAUmP,SAAS8tE,cAAgBj9E,EAAUmP,SAAV,KAA2B,IAEhEpe,OAAOmc,KAAKlN,EAAUmP,UAAU1U,SAAQ,SAAA5G,GAClCoQ,MAAMC,QAAQlE,EAAUmP,SAAStb,KAAkB,eAARA,IAC7CmM,EAAUmP,SAAStb,GAAOmM,EAAUmP,SAAStb,GAAK66D,SAAQ,SAAAgmC,GACxD,GAAyB,iBAAdA,EAAwB,CACjC,GAAIA,EAAUl+F,SAAS,MACrB,OAAOk+F,EAAUt6F,MAAM,MAClB,GAAIs6F,EAAUl+F,SAAS,KAC5B,OAAOk+F,EAAUt6F,MAAM,KAG3B,OAAOs6F,SAIN10F,I,6CAG8B,IAAlByH,EAAkB,uDAAXpL,KAAKoL,KAC/B,OAAO,2BAAmBA,K,qDAI1B,OAAO,EAAA2sB,mBAAmB/3B,KAAK0hF,0B,8CAGTzsB,GACtB,IAAM+sO,EAAchiS,KAAKwe,MAAM,UAAMxW,IAC/B1B,GAAS,aAAU2uD,GACrB23E,EAAco1J,EAAYjjR,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAMtF,OALKsmI,KACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ2uD,IACzCv0D,UAAY,kBAAMshS,GAC9BA,EAAYjjR,aAAahqB,KAAK63I,IAEzB,IAAI,EAAJ,QAAyBA,EAAY/wH,SAAU+wH,K,0DAGpBh2H,EAAS64P,GAAoC,IAA1BhrL,EAA0B,wDACzEuD,EAAShoF,KAAKwe,MAAM,EAAAu7E,OAAO/xF,IAC3B8mJ,EAAiB9uJ,KAAKwe,MAAM,EAAAixH,eAAeznI,IACjD4O,EAAA,iBAA8BoxE,EAASA,EAAA,iBAA6B,GACpEpxE,EAAA,iBAA8BoxE,EAASA,EAAA,iBAA6B,GACpE,IAAMumB,EAAevuG,KAAKwe,MAAM,EAAAqsH,OAAO7iI,IAKvC,OAJA4O,EAAA,YAAyB23F,EAAeA,EAAA,YAA8B,GACtE33F,EAAQqrR,2BAA6Bj6M,EAAOoB,yBAC5CxyE,EAAQsrR,WAAapzI,EAAehf,UACpCl5H,EAAQurR,uBAAyBn6M,EAAO++D,qBACxC,6HAAiDnwI,EAAS64P,EAAUhrL,K,kDAG1C7tE,EAASgsN,EAAiC6sC,EAC1CC,EAAoB3sC,EAAW4sC,GACzD,IAAM3nL,EAAShoF,KAAKwe,MAAM,EAAAu7E,OAAO/xF,IAC3B8mJ,EAAiB9uJ,KAAKwe,MAAM,EAAAixH,eAAeznI,IAwBjD,OAtBIggF,GAAUpxE,GAAWA,EAAA,mBACnBA,EAAA,mBAAgC,EAAAujB,gBAAgBC,aAAexjB,EAAA,YAAyBA,EAAA,iBAC1FA,EAAA,iBAA8B,EAAAujB,gBAAgBI,gBAEhDytD,EAAO++F,kBAAkBnwK,EAAA,mBAEvBoxE,GAAUpxE,GAAWA,EAAA,kBACvBoxE,EAAOo6M,kBAAkBxrR,EAAA,kBAEN5W,KAAKwe,MAAM,EAAAqsH,OAAO7iI,IACvC,YAA8B4O,EAAA,YAC1BA,EAAA,4BACFk4I,EAAesqF,oBACXxiO,EAAQsrR,aACVpzI,EAAehf,UAAYl5H,EAAQsrR,aAE5BpzI,EAAe1lE,yBACxB0lE,EAAe1lE,wBAAyB,GAEtCxyE,EAAA,yBACFoxE,EAAO++D,oBAAsBnwI,EAAA,yBAE/B,qHAAyCA,EAASgsN,EAAiC6sC,EAAUC,EAAoB3sC,EAAW4sC,O,wKC7KhI,SACA,QACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEanI,mB,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAhkQ,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,6BACA,EAAKmY,SAAW,qBAChB,EAAKH,YAAc,kCACnB,EAAKqD,aAAe,GAGpB,EAAKwuK,SAAW,KAChB,EAAKE,gBAAkB,KACvB,EAAKg6E,kBAAoB,KACzB,EAAKC,aAAe,KACpB,EAAKC,iBAAmB,KACxB,EAAKn6E,QAAU,KACf,EAAKo6E,UAAY,KACjB,EAAKl6E,MAAQ,KACb,EAAK20G,UAAY,KACjB,EAAKC,SAAW,KAChB,EAAKC,YAAc,KACnB,EAAKC,YAAc,KACnB,EAAKv6B,SAAW,KAChB,EAAKhgJ,MAAQ,KACb,EAAKw6K,eAAiB,KACtB,EAAKC,cAAgB,KACrB,EAAKC,eAAiB,KAGtB,EAAKz6B,YAAc,eACnB,EAAKjjH,kBAAoB,CAAC,YAAa,oBAAqB,sBAAuB,gBAAiB,WAClG,YAAa,eAAgB,eAAgB,aAAc,eAAgB,aAAc,QAAS,YAClG,aAAc,aAAc,eAAgB,eAhClC,E,qEAkCTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACHy/H,EAAkB,WAClBC,YACA,MACF,IAAK,oBACHD,EAAkB,kBAClBC,YACA,MACF,IAAK,sBACHD,EAAkB,oBAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,WACHD,EAAkB,UAClBC,YACA,MACF,IAAK,YACHD,EAAkB,WAClBC,YACA,MACF,IAAK,eACHD,EAAkB,cAClBC,YACA,MACF,IAAK,eACHD,EAAkB,cAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,eACL,IAAK,qBACHD,EAAkB,cAClBC,YACA,MACF,IAAK,aACL,IAAK,cACL,IAAK,eACHD,EAAkB,YAClBC,YACA,MACF,IAAK,QACL,IAAK,eACL,IAAK,eACHD,EAAkB,QAClBC,YACA,MACF,IAAK,YACHD,EAAkB,WAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,QACL,IAAK,QACL,IAAK,SACCvsI,EAAUmP,UAAYlL,MAAMC,QAAQlE,EAAUmP,SAAV,gBAAwCnP,EAAUmP,SAAV,cAAoCre,OACnE,cAA3CkP,EAAUmP,SAAV,cAAoC,IACtCm9H,EAAkB,iBAClBC,aACoD,aAA3CvsI,EAAUmP,SAAV,cAAoC,IAAgE,kBAA3CnP,EAAUmP,SAAV,cAAoC,IACtGm9H,EAAkB,gBAClBC,aACoD,cAA3CvsI,EAAUmP,SAAV,cAAoC,IAC7Cm9H,EAAkB,iBAClBC,cAEAD,EAAkB,QAClBC,cAGFD,EAAkB,QAClBC,aAEF,MAEF,IAAK,eACHD,EAAkB,cAClBC,YACA,MACF,IAAK,cACHD,EAAkB,cAClBC,YAIJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,O,aA1IhEl9I,GAAK,qB,yJC1Bd,QACA,QACA,S,uDAEqB46R,E,YAEnB,WAAYt3L,GAAO,iGACXA,I,qEAGH3nG,GAIH,OAHKA,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,CAAC,EAAAqlB,SAASY,yBAE7C,8FAAkBp1B,K,sCAGJ,WACRk/R,EAAa7iS,KAAKU,YACpBmiS,EAAA,cACFA,EAAA,YAA0B//M,SAAW9iF,KAAK8iF,WAAa+/M,EAAA,YAA0BpsI,gBAEnF,CAAC,eAAgB,mBAAmBr4J,SAAQ,SAAA0kS,GACtCD,EAAWC,IAAaD,EAAWC,GAASx8R,SAAW,EAAKA,SAC9Du8R,EAAWC,GAAShgN,SAAW,EAAKA,e,gCAKhC5nE,GACR,GAAoB,mBAAhBlb,KAAKsG,OACP,0GAAuB4U,GAEzB,IAAM6nR,EAAgB/iS,KAAKU,YACtBqiS,GAAkBA,EAAcC,aAAgBD,EAAcC,YAAY78Q,eACzE48Q,EAAcC,YAAY78Q,cAAcrT,SAAxC,UACAiwR,EAAcC,YAAY78Q,cAAcrT,SAAxC,SAA6D3Y,SAAS,EAAAg+B,SAASY,wBAIrF,mGAAgB7d,IAHd,uG,6CAOF,IAAMslE,GAAaA,EAAbA,6GACAuiN,EAAgB/iS,KAAKU,YAO3B,GANA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,WACVI,UAAWyhN,GAAiBA,EAAcC,aAAeD,EAAcC,YAAY78Q,cAC/E48Q,EAAcC,YAAY78Q,cAAcrT,SAAxC,SACA,EAAAqlB,SAASa,2BAEK,mBAAhBh5B,KAAKsG,OAA6B,CACpC,IACMoqI,EADSqyJ,EAAc7nR,OACDsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAC5Bt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAIjB,OAAOxmG,M,iCA3DUoiN,G,qJCJrB,QACA,QACA,Q,uDAEqBK,E,YAEnB,WAAY33L,GAAO,iGACXA,I,uFAIN,IAAMiD,EAAevuG,KAAKU,YACtB8/E,GAAaA,EAAbA,6GACAmlB,EAAa4I,EAAa20L,eAAeljS,MAC7C,GAAoB,kBAAhBA,KAAKsG,OAA4B,CACnC,IAAMwkI,EAAgCv8B,EAAaxvF,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWioG,EAAaS,eAC5G87B,GAAiCA,EAA8BrvG,iBAC9C,OAAfkqE,GAAwB/9F,MAAMC,QAAQ89F,IAAeA,EAAWxrG,SAAS,SACvE2wI,EAA8BrvG,eAA9B,GAAqDqvG,EAA8BrvG,eAA9B,EACvD+kD,EAAWzrF,KAAK,CACdmsF,SAAU,cACVI,UAAW,QAEJwpD,EAA8BrvG,eAA9B,GACT+kD,EAAWzrF,KAAK,CACdmsF,SAAU,cACVI,UAAW,SAMrB,GAAoB,sBAAhBthF,KAAKsG,OAAgC,CACvC,IAAM68R,EAAiB50L,EAAa60L,qCAAqC70L,EAAaS,YAAa,QAC/Fm0L,GAAkBA,EAAehpS,SAAS,MAC5CqmF,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAW6hN,IAWjB,OAPIx9L,IAAe,IAAAnwE,wBAAyB,EAAAC,gBAAgBC,IACnC,sBAAhB11B,KAAKsG,QAAkCioG,EAAaS,cAAgB,EAAAr1E,aAAaiB,gBACxF4lD,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWqkB,IAGRnlB,M,iCA5CUyiN,G,8ECJwB7gE,EAAhCA,8BAAgC,CAC3CjgO,SAAU,WACVkgO,WAAY,aACZ/kD,SAAU,WACVilD,mBAAoB,qBACpBizB,0BAA2B,4BAC3B9wB,kBAAmB,sB,sICNrB,QACA,Q,mDAEA,IAQa,EART7yG,SAQgCikI,EAAvBA,sBAAA,gCAAuB,WAAOl5O,EAAcqnE,GAArB,gBAAiCo/M,EAAjC,uDAAiD,aAAjD,6EAC7Bp/M,IAAernE,GAAgBA,EAAaoyM,mCAC3CpnN,MAAMC,QAAQ+U,EAAaywH,+BAAiCzwH,EAAaywH,6BAA6BlzI,SAAS8pF,IAFnF,0CAIzB,GAJyB,UAMlCo/M,GAAc,GACVxxK,GACFA,EAAgBgrH,QAEdG,kBACFnrH,EAAkB,IAAImrH,iBAElBphO,EAASgB,EAAahB,QAAUgB,EAAaf,SAC7C+1G,EAAW,KACwB,WAArCx4H,SAASC,SAASoC,eAfY,oBAgB1Byf,GAAS,IAAAC,oBACTuxH,EAAaxxH,EAAOsD,MAAP,QACf5B,EAAayqE,sBAAwBqlD,GAAcA,EAAW3tH,aAAa9e,MAAK,SAAA+e,GAAA,OAAWA,EAAQ1Y,SAAWsW,EAAatW,WAlB/F,mCAmBH,IAAAqrH,oBAAmB/1G,EAAS,QAAS,EAAGg2G,EAAU,GAAI3tC,EAAY,KAAM4tC,GAnBrE,QAmBxBkb,EAnBwB,OAoB1BnlI,MAAMC,QAAQklI,IAChBnwH,EAAaowH,iBAAiBD,EAAcnb,GAAU,EAAO,GAAI,MAAM,GAAM,GArBjD,0BAyBX,IAAAD,oBAAmB/1G,EAAQ,EAAGg2G,EAAU,GAAI3tC,EAAY,KAAM4tC,GAzBnD,eAyB5B1vB,EAzB4B,SA2BhCvlF,EAAaowH,iBAAiB7qC,EAAUyvB,GAAU,EAAO,GAAI,MAAM,GAEhEh1G,EAAaywH,+BAChBzwH,EAAaywH,6BAA+B,IAE9CzwH,EAAaywH,6BAA6Bt4I,KAAKkvF,GAC/Co/M,GAAc,GAjCoB,kBAkC3BlhM,EAAWA,EAASluG,KAAO,IAlCA,mDAAvB,gD,sLCXb,SAEA,QACA,QACA,Q,IACA,O,IACA,MACA,QACA,QACA,S,mDAEO,IAAM,EAyBP,EAzBOqvS,EAAiCA,EAAjCA,gCAAA,gCAAiC,WAAO7nS,GAAP,kFACpCA,EADoC,OAErC,WAFqC,sCAGPrF,QAAQ64I,IAAI,EAC3C,IAAAtd,oBAAmB,QAAS,EAAG,IAAM,GAAI,GAAI,GAAI,MAAM,EAAOl2H,IAC9D,IAAAk2H,oBAAmB,aAAc,EAAG,IAAM,GAAI,GAAI,GAAI,MAAM,EAAOl2H,IACnE,IAAAk2H,oBAAmB,QAAS,EAAG,IAAM,GAAI,GAAI,GAAI,MAAM,EAAOl2H,KANxB,cAGlC8nS,EAHkC,0BASjC,aAAQA,IATyB,gCAajC,IAbiC,kDAAjC,6CAiBA19D,EAAsBA,EAAtBA,oBAAsB,SAAC3xD,EAAcsvH,GAAgD,IAA1B/nS,EAA0B,uDAAT,KACjFs3H,EAAanrH,MAAMC,QAAQ27R,IAAyBA,EAAqBvjS,MAAK,SAAA0oL,GAAA,OAASA,EAAM51D,cAE9FmhD,IAAiBA,EAAa5jD,YAAc4jD,EAAa3jD,gBACzD,IAAAC,qBAAoB0jD,GAAc,GAAMz/K,OAAS,EACtD,UAAMwvB,UAAS,IAAAq/G,mBAAkBvQ,EAAWt3H,KAGxCgoS,GAAA,gCAAiB,WAAOhoS,GAAP,uGAEnBtD,OAAOs0I,kBAAmB,GAC1B,IAAA7lH,gBACM1L,GAAS,IAAAC,kBAAiB1f,GAJb,SAKQrF,QAAQ64I,IAAI,EACrC,IAAAnf,2BAA0B,IAAI,EAAMr0H,IACpC,IAAAq3H,iBAAgB53G,EAAOqmE,+BAAgC9lF,KAPtC,cAKby4K,EALa,OASf,UAAOrzK,aACT7I,QAAQ4B,IAAI,oCAAkCs6K,GAV7B,WAYU,IAAAziD,aAAYh2H,GAZtB,eAYbioS,EAZa,OAaf,UAAO7iS,aACT7I,QAAQ4B,IAAI,sCAAoC8pS,GAd/B,UAgBcJ,EAA+B7nS,GAhB7C,WAgBb8nS,EAhBa,OAiBnBroR,EAAOsmG,gBAAgB9sH,OAAO+2B,OAAO,GAAIyoJ,EAAa,GAAI,CACxDvyF,iCAAcuyF,EAAa,GAAGvyF,WAA9B,aAA2C4hN,OAE7CroR,EAAO4qN,oBAAoB49D,EAAezvS,MAI1CinB,EAAO+Z,6BACP/Z,EAAO4qN,oBAAoB49D,EAAezvS,MAC1CinB,EAAOga,qBACHttB,MAAMC,QAAQqsK,EAAa,KAAOA,EAAa,GAAGz/K,QACpDymB,EAAO6qN,wBAAwB7xD,EAAa,IAI9C2xD,EAAoB3xD,EAAa,GAAIA,EAAa,GAAIz4K,IAGvBmM,MAAMC,QAAQqsK,EAAa,GAAG9jD,UAnC1C,sBAoCX+e,EAAa+kC,EAAa,GAAG9jD,SAAStkH,MAAK,SAAAuoF,GAAA,OAAUA,EAAO6c,qBApCjD,yBAsCTw+G,GAAevgF,EAAWugF,cAC2B,IAAhBA,IAAwCx0M,EAAO9P,KAvC3E,UA2CT8P,EAAOm0H,oBACXF,GAAY,GAAO,SAACv4H,GAAD,OAAaA,KAAS,EAAMnb,GA5ClC,eAiDnByf,EAAOia,aAAc,EACrBn9B,QAAQ4B,IAAI,yBAA0BshB,GACtC/iB,OAAOs0I,kBAAmB,EAC1B,UAAMxoH,UAAS,IAAAxC,sBAAqBvG,EAAOzf,iBAC3C,UAAMwoB,UAAS,IAAAgP,sBArDI,mBAuDZ,GAvDY,0CA0DnB,IAAAq/D,iBACAt6F,QAAQ4B,IAAI,QAAZ,MA3DmB,mBA4DZ,GA5DY,4DAAjB,6C,UAgES6pS,G,sHCpGf,I,IAAA,M,IACA,MACA,OACA,O,IAEA,Q,IACA,Q,IACA,Q,IACA,O,IACA,SAEA,QACA,QACA,QACA,QACA,Q,OACA,Q,mDAEO,IAAMxtM,EAAgBA,EAAhBA,cAAgB,CAC3BC,SAAU,WACVU,UAAW,YACXE,QAAS,WAwBL6sM,GArBwB1sM,EAAjBA,eAAiB,SAAC,GAAoB,IAAnBp3F,EAAmB,EAAnBA,OAAQF,EAAW,EAAXA,MAGhC1B,EAAS,CACb4B,OAAQA,EACRF,MAAOA,EACPmyC,KALW35C,OAAOyrS,WAAa,GAAKzrS,OAAO0rS,SAAW1rS,OAAO2rS,YAAc,GAAKnkS,EAAQ,EAMxFuF,IALU/M,OAAO4rS,YAAc,GAAK5rS,OAAO6rS,SAAW7rS,OAAO8rS,WAAa,GAAKpkS,EAAS,EAMxF/F,SAAU,KACVoqS,QAAS,KACTC,OAAQ,KACRC,YAAa,KACbC,QAAS,KACTC,WAAY,MACZC,UAAW,KACXC,aAAc,MACdC,OAAQ,OAEV,OAAO/vS,OAAOmc,KAAK5S,GAAQ6J,KAAI,SAAAtQ,GAAA,OAAOA,EAAM,IAAMyG,EAAOzG,MAAM6b,KAAK,OAGtC,SAACi4F,GAAU,IAElCo5L,EAAyFp5L,EAAzFo5L,YAAa16Q,EAA4EshF,EAA5EthF,eAAgBotE,EAA4DkU,EAA5DlU,cAAej6B,EAA6CmuC,EAA7CnuC,qBAAsB4B,EAAuBusC,EAAvBvsC,oBAmCzE,OACE,mCAAU4lO,eAAe,EAAO38R,GAAG,kBAChCtT,OAAOmc,KAAKolF,GAAenuF,KAAI,SAAA8tF,GAC9B,IAAM2G,EAAsB,YAAd3G,EAA2B,wCAAiB,uCAAU,EAAAgsC,eAAehsC,IACnF,OACE,mCAAUhL,UAAU,2BACVpzF,IAAKo+F,EACLgvM,UAAShvM,EACTknF,QAAS,kBAzCF,SAAClnF,GACxB,OAAQA,GACN,KAAKK,EAAcC,SACjB,UAAU/0D,eAAe,EAAAwB,6BAA6BY,qBACtD,MACF,KAAK0yD,EAAca,QACjB,UAAU31D,eAAe,EAAAwB,6BAA6Ba,oBACtD,MACF,KAAKyyD,EAAcW,UACjB,UAAUz1D,eAAe,EAAAwB,6BAA6Bc,sBAK1D,IAAKzZ,EAQH,OAPkB,IAAAu+G,mBAAXpwB,SAELh7C,EAAqB,EAAAzgC,cAAcO,eACnC8hC,EAAoB62B,IAEpBz4B,EAAqB,EAAAzgC,cAAckB,YAAag4D,IAE3C,EAGT8uM,KAIA,IAAAvtM,mBAAkBvB,EAAWwB,GAYEytM,CAAiBjvM,KACxC,uCAAe2G,GACf,4CAAkBv0F,GAAA,SAAa4tF,WAQ3C+tM,EAAwBzhJ,UAAY,CAClCwiJ,YAAa,UAAU3lH,KAAK9lE,YAG9B,IASMq3E,EAAqB,CACzBnzH,4CACA4B,2C,WAGa,IAAA+sC,UAdS,SAACxzG,GAGvB,MAAO,CACL0xB,eAHuB1xB,EAAMwc,UAAxBkV,eAILotE,cAHiB9+F,EAAMgR,YAAlB03B,YAY+BsvJ,EAAzB,CAA6CqzG,I,yJCtH5D,QACA,SACA,QACA,S,IACA,O,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,QACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqB1xH,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAzuK,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAL,mBACA,EAAKwuK,kBAAoB,MACzB,EAAKx2J,YAAc,6BAGnB,EAAKo8B,OAAS,KACd,EAAK06C,aAAe,KACpB,EAAK4/E,UAAY,KACjB,EAAKjgF,WAAa,KAClB,EAAK4yD,WAAa,KAClB,EAAKC,aAAe,KACpB,EAAKmtB,aAAe,KACpB,EAAKltB,kBAAoB,CAAC,SAAU,gBAAiB,aAAc,iBAAkB,cAAe,gBAClG,cAAe,iBAlBL,E,qEAqBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,SACHy/H,EAAkB,SAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,iBACHD,EAAkB,gBAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,eACHD,EAAkB,cAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YAGJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,2CAIrE,OAAO,I,wCAIP,OAAO,aAAQllJ,KAAK+e,aAAc,mB,iCAGqB,WAAhDwzJ,IAAgD,yDAA7BC,EAA6B,wDACvD,OAAOxyK,KAAKwwI,kBACTxpI,QAAO,SAAAiqE,GAAA,OAAQ,EAAKwhG,kBAAkBxhG,EAAMshG,MAC5CvrK,QAAO,SAAAiqE,GACN,OAAqB,kBAAhBA,EAAK3qE,QAA8C,eAAhB2qE,EAAK3qE,SAA4BksK,GAAuBvhG,EAAKmhB,oBAC5FnhB,EAAKvxD,mBAAmB,GAAI,IAAIjrB,OAElCw8E,KAERnpE,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,wFAQjD,OAAIlP,KAAKmyF,YAAcnyF,KAAKmyF,WAAWhsE,eACjCnmB,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,QACK9S,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,QAA4D,GAMhE,K,6CAiBP,OAAI9S,KAAKuyF,eAAiBvyF,KAAKuyF,cAAcpsE,eACvCnmB,KAAKuyF,cAAcpsE,cAAcxiB,UAAUmP,SAA3C,QACK9S,KAAKuyF,cAAcpsE,cAAcxiB,UAAUmP,SAA3C,QAA+D,GAMnE,K,mDAIP,OAAI9S,KAAKmyF,YAAcnyF,KAAKmyF,WAAWhsE,eACjCnmB,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,UACK9S,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,UAA8D,GAMlE,S,kDAIP,OAAI9S,KAAKmyF,YAAcnyF,KAAKmyF,WAAWhsE,eAAiBnmB,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,cAC/C9S,KAAKmyF,WAAWhsE,cAAcxiB,UAAUmP,SAAxC,cAAkE,GAEpE,K,sDAIP,OAAI9S,KAAKuyF,eAAiBvyF,KAAKuyF,cAAcpsE,eACvCnmB,KAAKuyF,cAAcpsE,cAAcxiB,UAAUmP,SAA3C,UACK9S,KAAKuyF,cAAcpsE,cAAcxiB,UAAUmP,SAA3C,UAAiE,GAMrE,U,8CAIP,IAAA+7H,iCAAA,qB,aA/JK7mI,GAAK,U,aADOiqK,G,yLCjBrB,S,mDAS0C6yH,EAA7BA,2BAA6B,WACxC,uCAAO,WAAO7gR,EAAU9hB,GAAjB,gFAEsBA,IAAWwD,gBAA/Bo/R,iBAFF,kEAM0B,IAAAC,kBAN1B,cAMCC,EAND,OAOLjtS,QAAQ4B,IAAI,mBAAoBqrS,GAP3B,mBAWE,GAXF,kDAAP,qDADK,IAgBM9kD,EAAsBA,EAAtBA,oBAAsB,CACjCC,UAAW,aACX8kD,YAAa,gBAGTC,EAAiB,2cAEallD,EAAvBA,qBAAuB,SAAC3nP,GAAU,IAEtCqY,EAA8CrY,EAA9CqY,YAAaouO,EAAiCzmP,EAAjCymP,iBAAkBqmD,EAAe9sS,EAAf8sS,YAehCC,EAAwBD,EAAYpqC,qBACtCmqC,EAAexmS,QAAQ,eAAgBymS,EAAYpqC,sBACnDmqC,EAEEG,EAAc30R,EAAYC,kBAAyD,IAApCD,EAAYC,iBAAiB5I,GAE5Eu9R,EAAwBxmD,GAAoBA,EAAiBY,yBAEnE,OAAI2lD,EACK,CACL,SAAY,SACZ,MAASC,EAAwB,OAAS,OAC1C,MAASA,EAAwB,8BAAgC,2BACjE,KAAQ,eACR,QAAWplD,EAAoBC,UAC/B,UAAailD,EACb,gBAAmBE,EAAwB,GAAK,QAG7C,CACL,SAAY,SACZ,MAASA,EAAwB,OAAS,OAC1C,MAASA,EAAwB,8BAAgC,2BACjE,KAAQ,eACR,QAAWplD,EAAoB+kD,YAC/B,UAAaG,EACb,gBAAmBE,EAAwB,GAAK,U,oKC9DrC,WAAuC,IAA9Bx+R,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMy9N,qBACT,uBAAWl3O,EAAX,CAAkBi4O,gBAAiBt+M,EAAO7f,QAAS2kR,gBAAiBC,EAAkBxmD,oBAAqBwmD,IAC7G,KAAKjlR,EAAM09N,qBACT,uBAAWn3O,EAAX,CACEy+R,gBAAiB9kQ,EAAO7f,QAAQ69N,KAChCO,oBAAqBv+M,EAAO7f,QAAQ89N,WAExC,KAAKn+N,EAAM29N,iCACT,uBAAWp3O,EAAX,CAAkB83O,iBAAkBn+M,EAAO7f,UAC7C,KAAKL,EAAM49N,2BACX,KAAK59N,EAAM89N,iBACX,KAAK99N,EAAM69N,+BACT,uBAAWt3O,EAAU25B,EAAO7f,SAIhC,OAAO9Z,GAlCT,IAAYyZ,E,wJAAZ,QAEO,IAAMilR,EAAmBA,EAAnBA,iBAAmB,iBAE1Bz8B,EAAe,CACnBhqB,gBAAiB,GACjBwmD,gBAAiBC,EACjBxmD,oBAAqBwmD,EACrB5mD,kBAAkB,EAClBC,0BAA2B,GAC3Bc,WAAY,GACZD,0BAA0B,I,0SCX5B,S,mDAOO,IAAM+lD,EAAoBA,EAApBA,kBAAoB,SAAC/hS,EAAW+mB,GAAgB,IACpD4X,EAA6D3+B,EAA7D2+B,IAAKs8E,EAAwDj7G,EAAxDi7G,oBAAqBtuG,EAAmC3M,EAAnC2M,kBAAmBq1R,EAAgBhiS,EAAhBgiS,aACpD,SAAIj7Q,EAAYixF,cAAejxF,EAAYkxF,oBACjClxF,EAAYkxF,iBAAiB37G,MAAK,SAAA4+G,GACxC,OAAQA,EAAgB/1G,mBAAsB+1G,EAAgB/1G,oBAAsB68R,GAC9E9mL,EAAgBtY,sBAAwBqY,IACvCC,EAAgB/1G,mBAAsB+1G,EAAgBpoH,OAAS6Z,GAChEuuG,EAAgBv8E,KAAOA,GAAQu8E,EAAgBv8E,MAAQA,MAyBtDi4D,GAbsBqrM,EAAtBA,oBAAsB,SAACjkN,EAAUj3D,GAC5C,OAAOi3D,EAAS36E,QAAO,SAAA3D,GAAA,OAAYqiS,EAAkBriS,EAASqnB,OAYhC6vE,EAAnBA,iBAAmB,SAAC3pF,EACAwZ,EACAtZ,GAEwC,IADxC+rG,EACwC,uDADvB,GACjBC,EAAwC,uDAAT,KAC9D,IAAKlsG,GAAoBwZ,EAAmB,EAC1C,MAAO,GAET,IAAM2yF,EAAU,GAAK3yF,EAErB,GAAyB,IAArBA,EACF,OAAOuwF,EAA2BoC,EAASnsG,GAG7C,IAAMqsG,EAAmBnsG,EAAqBsZ,EAAmB,GACjE,IAAK6yF,IAAqBA,EAAiBvyF,YAAa,CACtD,GAAImyF,EAAepoH,QAAUooH,EAAe,GAAG70G,GAAI,CACjD,GAAI80G,EAA+B,CACjC,IAAIK,EAA+B,KAgBnC,GAfIN,EAAeh/G,OAAM,SAAAu/G,GAAA,MAAsB,WAAhBA,EAAG5iB,aAChC9lG,OAAOmc,KAAKisG,GAA+B1+G,SAAQ,SAAA5G,GAC5CA,EAAM9C,OAAOmc,KAAKC,GAAsBrc,SACvCqoH,EAA8BtlH,GAAK8O,QACpCw2G,EAA8BtlH,GAAKkzB,aACtCmyF,EAAez+G,SAAQ,SAAAg/G,GACjBA,EAAGp1G,KAAO80G,EAA8BtlH,GAAKkzB,YAAY1iB,KAC3Dm1G,EAA+BC,SAQrCD,EACF,OAAOxC,EAA2BwC,EAA6Bn1G,GAAI4I,GAGvE,OAAO+pG,EAA2BkC,EAAe,GAAG70G,GAAI4I,GAG1D,MAAO,GAGT,GAAIqsG,GAAoBA,EAAiBvyF,aAAeuyF,EAAiBvyF,YAAY0xF,cAAgBa,EAAiBhsG,gBAAiB,CACrI,IAAMqsG,EAAiCL,EAAiBvyF,YAAY0xF,aAAatwG,MAAK,SAAA8uG,GACpF,OAAQ8qL,EAAkBzoL,EAAiBhsG,gBAAiB2pG,MAE9D,GAAI0C,EACF,OAAO3C,EAA2B2C,EAA+Bt1G,GAAI4I,GAUzE,OAAO+pG,EAA2BsC,EAAiBvyF,YAAY1iB,GAAI4I,KASxD+pG,EAA6BA,EAA7BA,2BAA6B,SAAC55E,EAAQnwB,GACjD,IAAKA,EACH,MAAO,GAET,IAAM0qG,EAAgB1qG,EAAiBm4E,aAAa/hF,QAAO,SAAA4zG,GACzD,OAAOhqG,EAAiB2qG,YAAYt7G,MAAK,SAAAu7G,GAAA,OAAWA,EAAQz6E,SAAWA,GAAUy6E,EAAQ9kG,SAAWkkG,EAAS5yG,IAAM4yG,EAAS+Y,cAM9H,GAH6BrY,EAAc7mH,OAAS,GAAK6mH,EAAcz9G,OAAM,SAAA49G,GAC3E,OAAQA,EAAajhB,WAAa,EAAA2hK,wBAAwBlmP,OAAWwlG,EAAajrG,YAAc8qG,EAAc,GAAG9qG,aAEzF,CAGxB,GAAI8qG,EAAcz9G,OAAM,SAAA6sB,GAAA,OAAeA,EAAYixF,aAAejxF,EAAYkxF,oBAAmB,CAC/F,IAAMA,EAAmBN,EAAch6G,QAAO,SAACmB,EAAOioB,GAMpD,OALAA,EAAYkxF,iBAAiBx9G,SAAQ,SAAA89G,GAC9Bz5G,EAAMxC,MAAK,SAAAk8G,GAAA,OAAYA,EAAQ5V,sBAAwB2V,EAAS3V,wBACnE9jG,EAAM1N,KAAKmnH,MAGRz5G,IACN,IAMH,MAAO,CALU/N,OAAO+2B,OAAO,GAAI6vF,EAAc,GAAI,CACnDc,aAAcd,EACde,iBAAkB,GAClBT,sBAKJ,IAeMS,EAfsBf,EAAch6G,QAAO,SAACmB,EAAOioB,GAavD,OAZAA,EAAY2xF,iBAAiBj+G,SAAQ,SAAAk+G,GAC9BA,IAGmB,iBAApB,IAAOA,EAAP,0BAAOA,IACJ75G,EAAMxC,MAAK,SAAAk8G,GAAA,MAA+B,iBAAnB,IAAOA,EAAP,0BAAOA,KAA0BA,EAAQ5V,sBAAwB+V,EAAS/V,wBACpG9jG,EAAM1N,KAAKunH,GAEH75G,EAAMtI,SAASmiH,IACzB75G,EAAM1N,KAAKunH,OAGR75G,IACN,IAC0CuE,QAAO,SAAAu1G,GAClD,OAAOjB,EAAcz9G,OAAM,SAAA49G,GACzB,MAA2B,iBAAvB,IAAOc,EAAP,0BAAOA,IACFd,EAAaY,iBAAiBp8G,MAAK,SAAAk8G,GAAA,MAA+B,iBAAnB,IAAOA,EAAP,0BAAOA,KAA0BA,EAAQ5V,sBAAwBgW,EAAYhW,uBAE9HkV,EAAaY,iBAAiBliH,SAASoiH,SAOlD,MAAO,CAJU7nH,OAAO+2B,OAAO,GAAI6vF,EAAc,GAAI,CACnDc,aAAcd,EACde,sBAIJ,OAAOf,GAWI1wF,EAAoBA,EAApBA,kBAAoB,SAACha,EAAkBE,EAAsBysG,GAAyD,IAAzCT,EAAyC,uDAAT,KACxH,IAAKlsG,IAAqBA,EAAiBm4E,eAAiBn4E,EAAiB2qG,YAC3E,MAAO,GAUT,IAPA,IAAMiC,EAAiB,GAEnBC,EAAa,CAAC,CAChB1sG,UAAW,EACXoa,WAAYwvF,EAA2B,IAAK/pG,KAGrCrc,EAAI,EAAGA,GAAKipH,EAAgBjpH,IAAK,CACxC,IAAMsoH,EAAiBU,GAAkBE,EAAWlpH,EAAI,GAAKkpH,EAAWlpH,EAAI,GAAG42B,WAAa,GACtFuyF,EAAgBnjB,EAAiB3pF,EAAkBrc,EAAGuc,EAAsB+rG,EAAgBC,GAClG,IAAKY,EAAcjpH,OACjB,MAEFgpH,EAAW1oH,KAAK,CACdgc,UAAWxc,EACX42B,WAAYuyF,IAIhB,OAAOD,GAWIgnB,EAAqBA,EAArBA,mBAAqB,SAAC7zH,EAAkB0zH,EAAasuC,GAGhE,IAAIC,EAAY,GAChBn+K,OAAOmc,KAAK+hK,GAAyBx0K,SAAQ,SAAA5G,IACtCA,GAAO8sI,IACVuuC,EAAUr7K,GAAOo7K,EAAwBp7K,OAI7C,IAAMquS,EAAmCj7Q,EAAkBha,EAAkBiiK,GAAW,EAAMD,GACxFkzH,EAAiBl7Q,EAAkBha,EAAkBgiK,GAAyB,GAE9EkiB,EAAWxwD,EAAc,EAE/B,OACEuhK,EAAiC/wG,IAAagxG,EAAehxG,IAC1D+wG,EAAiC/wG,GAAU3pK,WAAWttB,OAAM,SAAC6sB,EAAaq7Q,GAC3E,OAAOD,EAAehxG,GAAU3pK,WAAW46Q,IAAqBr7Q,EAAY1iB,KAAO89R,EAAehxG,GAAU3pK,WAAW46Q,GAAkB/9R,OACpI4qK,EAAwBkiB,IAAaliB,EAAwBkiB,GAAUpqK,aACzEm7Q,EAAiC/wG,GAAU3pK,WAAWlrB,MAAK,SAAAy8G,GAAA,OAAQk2D,EAAwBkiB,GAAUpqK,YAAY1iB,KAAO00G,EAAK10G,MAE3H89R,EAGFD,GAWgC7gK,EAA5BA,0BAA4B,SAAC4tC,EAAyBE,GAAkB,IAE5EliK,EAAoBkiK,EAApBliK,iBAED0zH,GAAe5vI,OAAOmc,KAAKiiK,EAAchiK,sBAAsB,GAEjEiiK,EAAyB,GACvBvuC,EAAiBC,EAAmB7zH,EAAkB0zH,EAAasuC,GAgBzE,OAdAl+K,OAAOmc,KAAK+hK,GAAyBx0K,SAAQ,SAAA2S,IACvC6hK,EAAwB7hK,KAAc6hK,EAAwB7hK,GAAW2Z,aAAiB85G,EAAezzH,IACvGyzH,EAAezzH,GAAWoa,WAAWlrB,MAAK,SAAAyqB,GAAA,OAAeA,EAAY1iB,KAAO4qK,EAAwB7hK,GAAW2Z,YAAY1iB,OAC/H+qK,EAAuBh+K,KAAK,CAC1Bgc,YACAN,cAAemiK,EAAwB7hK,GAAW2Z,YAAY1iB,QAS7D+qK,GAIgC9tC,EAA5BA,0BAA4B,SAACl+H,EAAOiG,EAAYouG,EAActqG,GACzE,IAAMsvG,EAAe,CACnBpzG,aACAouG,eACA8oB,gBAAiBn9H,EAAMqjB,iBACvBtZ,qBAAsBpc,OAAO+2B,OAAO,GAAI3a,IAEpCggL,EAAgB/pL,EAAMsjB,iBAAiB1N,WAAU,SAAA04K,GACrD,OAAOA,EAAaj6E,eAAiBgF,EAAahF,cAAgBi6E,EAAaroL,aAAeozG,EAAapzG,cAa7G,OAXA8jL,GAAiB,EACb/pL,EAAMsjB,iBAAiB10B,OAAOm7L,EAAe,EAAG1wE,GAChDr5G,EAAMsjB,iBAAiBt1B,KAAKqrH,GAEhCr5G,EAAMsjB,iBAAmBtjB,EAAMsjB,iBAAiBviB,KAAI,SAAAm8H,GAIlD,OAHIA,EAAUj3H,aAAeA,IAC3Bi3H,EAAU/oB,mBAAqB+oB,EAAU7oB,eAAiBA,GAErD6oB,KAGT,wBAAWl9H,EAAMsjB,qB,8ICzSnB,Q,IACA,Q,IACA,QAEA,U,IACA,SACA,SACA,UACA,UACA,UACA,QACA,Q,IACA,SACA,S,IACA,Q,IACA,Q,IACA,QACA,QAGA,Q,IAMA,Q,IACA,S,IACA,Q,IACA,OACA,S,IACA,MACA,Q,qDAEau0B,O,YAeX,WAAY0sD,IAAO,gGACXA,IADW,SAVnBwpK,YAAc,EAAAp+O,WAAWsvE,MAUN,EATnB56F,KAAO,EAAK0pQ,YASO,EARnB5yC,gBAAkB,UAQC,EAPnBlQ,cAAgB,WAOG,EANnBv2N,eAAiB,EAAAd,2BAA2BL,SAMzB,EALnBw6G,YAKmB,uBAJnB6tH,YAImB,eAHnBqjE,iBAGmB,qBAFnB/+M,SAAW,UAAEzoD,QAEM,EA6DnBw2O,gBAAkB,SAAChkM,GAEjB,IAAMi1N,EAAqB,EAAKznR,MAAM,UAAaxW,IAC9Ci+R,EAAmB91J,mBAAoB81J,EAAmB9/Q,eACxD8/Q,EAAmB9/Q,cAAc0gE,OAAUo/M,EAAmB9/Q,cAAc0gE,MAAM9nF,OACnF,EAAKqM,OAAS,EAAAsrB,WAAWsvE,MAC3Bh1B,EAAIj8E,KAAK,IAAI,EAAJ,QAAU,KAAM,UAAEypC,QAAQwnE,MAAMu7J,sBAAhC,qBAA0E,IAC1E,EAAKn2P,OAAS,EAAAsrB,WAAWgkE,OAClC1pB,EAAIj8E,KAAK,IAAI,EAAJ,QAAU,KAAM,UAAEypC,QAAQk8D,MAAM6mK,sBAAhC,qBAA0E,KAKvF,IAAMv5K,EAAS,EAAKxpE,MAAM,EAAAu7E,OAAO/xF,IAIjC,MAH4B,SAAxBggF,EAAOg/F,cAAqD,aAA1Bh/F,EAAOk8D,gBAAkCl8D,EAAOoB,0BAA4B,EAAKh+E,OAAS,EAAAsrB,WAAWsvE,OACzIh1B,EAAIj8E,KAAK,IAAI,EAAJ,QAAU,KAAM,UAAEypC,QAAQwnE,MAAMjM,OAAOzjE,WAAWyrO,yBAAlD,wBAAkG,IAEtG/wL,GA9EU,EAsWnB6sL,yBAA2B,SAAC3+O,GAC1B,MAAO,CACL,EAAK+nE,SAAS/nE,GAAYqiP,sBAC1B,EAAKt6K,SAAS/nE,GAAY+/O,gBAC1B,EAAKh4K,SAAS/nE,GAAYsiP,eAE1B,EAAKv6K,SAAS/nE,GAAY66E,OAAOzjE,WAAW0D,MAG5C,EAAKitD,SAAS/nE,GAAY66E,OAAOzjE,WAAWgtO,QAC5C,EAAKr8K,SAAS/nE,GAAY66E,OAAO6pK,UAAUN,QAC3C,EAAKr8K,SAAS/nE,GAAY66E,OAAOzjE,WAAWyrO,yBAC5C,EAAK96K,SAAS/nE,GAAY66E,OAAOzjE,WAAW+sO,wBAC5C,EAAKp8K,SAAS/nE,GAAY66E,OAAOzjE,WAAWysO,gCAC5C,EAAK97K,SAAS/nE,GAAY66E,OAAOzjE,WAAWsrO,YAC5C,EAAK36K,SAAS/nE,GAAY66E,OAAOzjE,WAAWotO,kBAC5C,EAAKz8K,SAAS/nE,GAAY66E,OAAOzjE,WAAW8rO,WAC5C,EAAKn7K,SAAS/nE,GAAY66E,OAAOzjE,WAAWktO,eAC5C,EAAKv8K,SAAS/nE,GAAY66E,OAAOzjE,WAAW2sO,gBAC5C,EAAKh8K,SAAS/nE,GAAY66E,OAAOzjE,WAAWurO,cAvX9C,EAAKrjP,MAAM,EAAAqsH,OAAO7iI,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,EAAAu7E,OAAO/xF,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,EAAAixH,eAAeznI,IAAM,IAAI,EAAJ,eAChC,EAAKwW,MAAM,EAAAgpP,kBAAkBx/P,IAAM,IAAI,EAAJ,kBACnC,EAAKwW,MAAM,EAAA4oP,QAAQp/P,IAAa,IAAI,EAAJ,QAChC,EAAKwW,MAAM,EAAAimP,OAAOz8P,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,EAAAwjP,KAAKh6P,IAAgB,IAAI,EAAJ,KAChC,EAAKwW,MAAM,UAASxW,IAAY,IAAI,EAAJ,QAChC,EAAKwW,MAAM,EAAAsjO,QAAQ95O,IAAa,IAAI,EAAJ,QAChC,EAAKwW,MAAM,EAAA0nR,OAAOl+R,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,UAAaxW,IAAQ,IAAI,EAAJ,QAChC,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,SAEvB,aAAO,EAAKwW,OAAOpgB,SAAQ,SAAAod,GAAA,OAAQA,EAAKN,OAAL,KAflB,E,kFAkBD,WACVymE,EAAW3hF,KAAKy0B,cACfxnB,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACP00E,EAASvjF,SAAQ,SAAA2oG,GACXA,aAAuBA,EAAvBA,OACFA,EAAYm9C,eAAiB,SACpBn9C,aAAuBA,EAAvBA,iBACTA,EAAY3d,wBAAyB,EACrC2d,EAAY+oC,UAAY,EAAA72G,mBAAmBC,eAE7C6tE,EAAY3gB,WAAW,GACvB2gB,EAAYrgB,oBAAqB,EACjCqgB,EAAYxgB,WAAWt5E,IAAoB,EAIvC85F,EAAYhoF,cAAgBgoF,EAAYhoF,aAAatqB,QACvDsyG,EAAYhoF,aAAa3gB,SAAQ,SAACse,GACT,gBAAnBA,EAAQpW,SACVoW,EAAQgqE,oBAAqB,EAC7BhqE,EAAQ6pE,WAAWt5E,IAAoB,GAEzCyP,EAAQomE,SAAWpmE,EAAQqmE,gBACvBn7E,MAAMC,QAAQ6U,EAAQoqE,qBAAuBpqE,EAAQoqE,mBAAmBryF,SAC1EioB,EAAQoqE,mBAAqBpqE,EAAQorE,yBAEnCprE,aAAmBA,EAAnBA,UACFA,EAAQw4O,gBAAiB,SAKjCl1P,KAAKyzN,aAAa9xI,K,6CAGmB,IAAlBv2E,EAAkB,uDAAXpL,KAAKoL,KAC/B,OAAO,2BAAmBA,K,qDAI1B,OAAO,EAAA2sB,mBAAmB/3B,KAAK0hF,0B,+BA2BxB9qE,GAoBP,GAnBIA,EAAQg5P,iBACVh5P,EAAQg5P,eAAiBh5P,EAAQg5P,eAAe7xQ,MAAM,MAEpD6Y,EAAQurR,yBACVvrR,EAAQurR,uBAA4D,SAAnCvrR,EAAQurR,wBAEvCvrR,EAAQqrR,6BACVrrR,EAAQqrR,2BAAoE,SAAvCrrR,EAAQqrR,4BAE3CrrR,EAAQuvR,oCACVvvR,EAAQuvR,kCAAoC79R,OAAOC,UAAUqO,EAAQuvR,mCACjE,CAACvvR,EAAQuvR,mCACTvvR,EAAQuvR,kCAAkCpoS,MAAM,MAElD6Y,EAAQwvR,6BACVxvR,EAAQwvR,2BAA6B99R,OAAOC,UAAUqO,EAAQwvR,4BAC1D,CAACxvR,EAAQwvR,4BACTxvR,EAAQwvR,2BAA2BroS,MAAM,MAE3C6Y,EAAQyvR,sBACV,OAAQzvR,EAAQyvR,uBACd,KAAK,GACL,IAAK,KACL,IAAK,OACHzvR,EAAQyvR,sBAAwB,OAChC,MACF,KAAK,GACL,IAAK,KACL,IAAK,OACHzvR,EAAQyvR,sBAAwB,OAChC,MACF,IAAK,OACHzvR,EAAQyvR,sBAAwB,OAOtC,OAHIzvR,EAAA,aAA0B5W,KAAKwe,MAAM,EAAAgpP,kBAAkBx/P,MACzDhI,KAAKwe,MAAM,EAAAgpP,kBAAkBx/P,IAAIkgQ,YAActxP,EAAA,aAE1CA,I,kDAYmBA,GAAsG,IAA7Fi/P,EAA6F,wDAAhEpG,EAAgE,+DAA9CC,IAA8C,yDAAnB3sC,EAAmB,wDAChI,GAAInsN,EAAS,CAEX,IAAM84M,GAAe94M,EAAQ84M,aAC7BggD,EAAqBA,IAAuBhgD,GAA+B,IAAhBA,IAAuBA,KAAiB1vN,KAAKoL,QAGtGpL,KAAKoL,KAAOskN,GAGd,IAAMxoG,EAASlnH,KAAKwe,MAAM,EAAAqsH,OAAO7iI,IAC3BggF,EAAShoF,KAAKwe,MAAM,EAAAu7E,OAAO/xF,IAC3B8mJ,EAAiB9uJ,KAAKwe,MAAM,EAAAixH,eAAeznI,IAIjD4O,EAAQg5P,eAAiBh5P,EAAQg5P,gBAAkB,GAInD5vQ,KAAKy0B,cACFr2B,SAAQ,SAAC2oG,GACR,GAA6B,IAAzBA,EAAYxjG,UAA2C,WAAzBwjG,EAAYlrF,SAAuB,CACnE,IAAMvV,EAASygG,EAAYzgG,OACrBwvQ,EAAyB,EAAK1F,uBAAuB1gD,IACtD,EAAK0gD,uBAAuB1gD,GAAappN,IAC1CsQ,EAAQhiB,eAAe0R,IAAWwvQ,KAChCrG,GACF1oK,EAAY5gF,cAAgB4gF,EAAYwqH,qBAAqB36M,EAAQtQ,KAChEygG,EAAY5gF,eAAiB2vP,IAChC/uK,EAAY5gF,cAAgB4gF,EAAYwqH,qBAAqBukD,KAG/D/uK,EAAY5gF,cAAgB4gF,EAAYuK,eAAe16F,EAAQtQ,KAC1DygG,EAAY+oK,oBAEnB/oK,EAAYrgB,qBAAuBqgB,EAAY5gF,eAG7C4gF,EAAY5gF,eAAiB48M,IAAch8H,EAAY5gF,cAAcy9D,2BACvEmjB,EAAY5gF,cAAcxiB,UAAUgS,UAAW,GAEjDoxF,EAAYjkB,SAAWlsE,EAAQg5P,eAAez1Q,SAASmM,OAClD,CACUygG,EAAYhoF,aAClB3gB,SAAQ,SAACse,GAChB,IAAMpW,EAASoW,EAAQpW,OACjBwvQ,EAAyB,EAAK1F,uBAAuB1gD,IACtD,EAAK0gD,uBAAuB1gD,GAAappN,IAC1CsQ,EAAQhiB,eAAe0R,IAAWwvQ,KAChCrG,GACF/yP,EAAQyJ,cAAgBzJ,EAAQ60M,qBAAqB36M,EAAQtQ,KACxDoW,EAAQyJ,eAAiB2vP,IAC5Bp5P,EAAQyJ,cAAgBzJ,EAAQ60M,qBAAqBukD,KAGvDp5P,EAAQyJ,cAAgBzJ,EAAQ40F,eAAe16F,EAAQtQ,KAAYygG,EAAY+oK,oBAEjFpzP,EAAQgqE,qBAAuBhqE,EAAQyJ,cAExB,gBAAX7f,IACFoW,EAAQiqI,0BAA2B,IAGnCjqI,EAAQyJ,eAAiB48M,IAAcrmN,EAAQyJ,cAAcy9D,2BAC/DlnE,EAAQyJ,cAAcxiB,UAAUgS,UAAW,GAEzCotN,IACFrmN,EAAQgqE,oBAAqB,GAE/BhqE,EAAQomE,SAAWlsE,EAAQg5P,eAAez1Q,SAASmM,UAK3D,IAAMggS,EAAgB,SAAC9qR,EAAMtkB,GAAP,OAAiBu4Q,EAAWj0P,EAAKK,WAAa3kB,GAASskB,EAAK7X,UAAUqE,KAAQ9Q,GACpGxC,OAAOmc,KAAK+F,GACTxY,SAAQ,SAACmoS,GACW,gBAAfA,IACFr/K,EAAOg9B,eAAiBttI,EAAQo4F,YAAY/7F,OAAO,GAAGF,cAAgB6D,EAAQo4F,YAAYtxG,OAAO,IAEhF,gBAAf6oS,IACFv+M,EAAOk8D,eAAiBttI,EAAQ4vR,YAAYvzR,OAAO,GAAGF,cAAgB6D,EAAQ4vR,YAAY9oS,OAAO,GACrE,aAAxBkZ,EAAQ4vR,aAA8B5vR,EAAQ6vR,aAAahyS,SAC7DuzF,EAAOqB,WAAWvC,mBAAqBlwE,EAAQ6vR,aAAa3+R,KAAI,SAAA4+R,GAC9D,OAAO1+M,EAAOqB,WAAWxH,cAAc/1E,MAAK,SAAAoD,GAAA,OAAKo3R,EAAcp3R,EAAGw3R,WAIrD,+BAAfH,GACE3vR,EAAQwvR,2BAA2B3xS,QAAUuzF,EAAOq+D,qBACtDr+D,EAAOq+D,mBAAmBv/D,mBAAqBlwE,EAAQwvR,2BACpDt+R,KAAI,SAAC6+R,GACJ,IAAIC,EAAgB5+M,EAAOq+D,mBAAmBxkE,cAAc/1E,MAAK,SAAAoD,GAAA,OAAKo3R,EAAcp3R,EAAGy3R,MACvF,IAAKC,EAAe,CAClB,IAAMC,EAAgB7+M,EAAOq+D,mBAAmB1kE,SAAS71E,MAAK,SAAAoD,GAAA,OAAKo3R,EAAcp3R,EAAG0H,EAAQyjC,yBAC5F,GAAIwsP,EAAe,CACjB,IAAMC,EAAiB9+M,EAAOq+D,mBAAmBv+D,sBAAsB++M,GACnEC,EAAeryS,SACjBmyS,EAAgBE,EAAe,KAIrC,OAAOF,MAII,sCAAfL,GACE3vR,EAAQuvR,kCAAkC1xS,QAAUuzF,EAAOs+D,2BAC7Dt+D,EAAOs+D,yBAAyBx/D,mBAAqBlwE,EAAQuvR,kCAC1Dr+R,KAAI,SAAC6+R,GACJ,OAAO3+M,EAAOs+D,yBAAyBzkE,cAAc/1E,MAAK,SAAAoD,GAAA,OAAKo3R,EAAcp3R,EAAGy3R,UAIrE,2BAAfJ,IACFv+M,EAAO++D,oBAAsBnwI,EAAQ2vR,IAEpB,+BAAfA,IACFz3I,EAAe1lE,uBAAyBxyE,EAAQ2vR,GAC5C3vR,EAAQ2vR,IAAe3vR,EAAQsrR,aACjCpzI,EAAehf,UAAYl5H,EAAQsrR,YAEjCtrR,EAAQ2vR,IAAe3vR,EAAQyvR,wBACjCv3I,EAAe/e,mBAAqBn5H,EAAQyvR,2BAKhD32B,GACF1vQ,KAAKyzN,aAAazzN,KAAKy0B,eAGrBohP,GACF71Q,KAAKiwQ,oCAAoCr5P,M,0DAWXA,GAA2B,WAAlB64P,EAAkB,wDAEvDs3B,EAAU/mS,KAAKwe,MAAM,EAAA4oP,QAAQp/P,IAC7BggF,EAAShoF,KAAKwe,MAAM,EAAAu7E,OAAO/xF,IAC3B8mJ,EAAiB9uJ,KAAKwe,MAAM,EAAAixH,eAAeznI,IA4CjD,GA1CA4O,EAAQ84M,YAAc1vN,KAAKoL,KAE3B1W,OAAOmc,KAAK+F,GAASxY,SAAQ,SAACmoS,GAET,YAAfA,IACF3vR,EAAQowR,cAAe,IAAA7wQ,qBAAoB4wQ,EAAQ7iJ,gBAAgB5nJ,eAElD,gBAAfiqS,IACF3vR,EAAQ4vR,YAAcx+M,EAAOk8D,eAAe5nJ,cAC5Csa,EAAQurR,uBAAyBn6M,EAAO++D,oBACZ,aAAxBnwI,EAAQ4vR,cACV5vR,EAAQ6vR,aAAez+M,EAAOqB,WAAWvC,mBACtC9/E,QAAO,SAAA+/E,GAAA,OAAqBA,KAC5Bj/E,KAAI,SAAAi/E,GACH,OAAO0oL,EAAW1oL,EAAkBlrE,SAAWkrE,EAAkBpjF,UAAUqE,OAGjF4O,EAAQqrR,2BAA6Bj6M,EAAOoB,yBACxCxyE,EAAQqrR,6BACVrrR,EAAQsrR,WAAapzI,EAAehf,UACpCl5H,EAAQyvR,sBAAwBv3I,EAAe/e,qBAGhC,yBAAfw2J,IACF3vR,EAAQwvR,2BAA6Bp+M,EAAOq+D,mBAAmBv/D,mBAC5D9/E,QAAO,SAAA+/E,GAAA,OAAqBA,KAC5Bj/E,KAAI,SAAAi/E,GACH,OAAO0oL,EAAW1oL,EAAkBlrE,SAAWkrE,EAAkBpjF,UAAUqE,OAG9D,gCAAfu+R,IACF3vR,EAAQuvR,kCAAoCn+M,EAAOs+D,yBAAyBx/D,mBACzE9/E,QAAO,SAAA+/E,GAAA,OAAqBA,GAAqBA,EAAkBpjF,aACnEmE,KAAI,SAAAi/E,GACH,OAAO0oL,EAAW1oL,EAAkBlrE,SAAWkrE,EAAkBpjF,UAAUqE,OAG9D,WAAfu+R,IACF3vR,EAAQo4F,YAAc,EAAKxwF,MAAM,EAAAqsH,OAAO7iI,IAAIk8I,eAAe5nJ,kBAI3Dsa,EAAA,YACGA,EAAA,iBAA8BoxE,EAAO8+D,eACrC9+D,EAAO8+D,cAAc3gI,eAAiB6hE,EAAO8+D,cAAc3gI,cAAcxiB,UAAUqE,GAAI,CAC1F,IAAM3E,EAAU2kF,EAAO8+D,cAAc3gI,cACrCvP,EAAA,gBAA6B64P,EAAWpsQ,EAAQwY,SAAWxY,EAAQM,UAAUqE,GAGjF,GAAI4O,EAAA,qBAAkCA,EAAA,eAA4BA,EAAA,mBAA+B,CAC/F,IAAMqwR,EAA0BjnS,KAAKwe,MAAM,EAAAgpP,kBAAkBx/P,IACzDi/R,IACFrwR,EAAQsxP,YAAcloQ,KAAKwe,MAAM,EAAAgpP,kBAAkBx/P,IAAIkgQ,aAG3D,OAAOtxP,I,8CAGeq+C,GACtB,IAAM+sO,EAAchiS,KAAKwe,MAAM,UAAMxW,IAC/B1B,GAAS,aAAU2uD,GACrB23E,EAAco1J,EAAYjjR,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAMtF,OALKsmI,KACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ2uD,IACzCv0D,UAAY,kBAAMshS,GAC9BA,EAAYjjR,aAAahqB,KAAK63I,IAEzB,IAAI,EAAJ,QAAyBA,EAAY/wH,SAAU+wH,O,6ICpZ1D,O,WACA,MACA,OACA,Q,uDAEMs6J,G,oNAMK,WACP,OACE,+BAAKt8M,UAAU,4BACZ5qF,KAAKsrG,MAAM8zH,UAAUjlO,SAAS,GAC7B,kCAAQywF,UAAW,8BAAkE,IAAlC5qF,KAAKsrG,MAAMmvC,mBAA2B,uBAAyB,IAC1GqiC,QAAS,kBAAM,EAAKxxE,MAAMkvC,sBAAsB,KACtD,qCAAO,sCAEP,KACHx6I,KAAKsrG,MAAM8zH,UAAUjlO,SAAS,GAC7B,kCAAQywF,UAAW,8BAAkE,IAAlC5qF,KAAKsrG,MAAMmvC,mBAA2B,uBAAyB,IAC1GqiC,QAAS,kBAAM,EAAKxxE,MAAMkvC,sBAAsB,KACtD,iCAAG,qCAAO,qCAAO,sCACjB,iCAAG,qCAAO,qCAAO,uCAEjB,KACHx6I,KAAKsrG,MAAM8zH,UAAUjlO,SAAS,GAC7B,kCAAQywF,UAAW,8BAAkE,IAAlC5qF,KAAKsrG,MAAMmvC,mBAA2B,uBAAyB,IAC1GqiC,QAAS,kBAAM,EAAKxxE,MAAMkvC,sBAAsB,KACtD,iCAAG,qCAAO,qCAAO,qCAAO,sCACxB,iCAAG,qCAAO,qCAAO,qCAAO,uCAExB,U,kBA1BH0H,UAAY,CACjBk9E,UAAW,UAAUlmH,QAAQ,UAAUN,QAAQK,Y,GAmC7Cq3E,EAAqB,CACzB91C,+C,WAGa,IAAA1uC,UARS,SAACxzG,GAAD,MAAY,CAClCmiJ,mBAAoBniJ,EAAMu1I,gBAAgB4M,sBAOJ61C,EAAzB,CAA6C42G,I,mHC/C5D,O,OACA,O,IACA,M,IACA,OACA,O,IAEA,O,IACA,O,IACA,S,IACA,Q,IACA,Q,IACA,QAEA,QACA,QACA,QACA,QACA,QACA,QACA,QAEA,QACA,Q,OACA,Q,IACA,Q,IACA,O,mDAEA,IAAMC,EAA0B,SAAC77L,GAAU,IAmBnC,EAjBC3S,EACqC2S,EADrC3S,YAAa1lE,EACwBq4E,EADxBr4E,kBAAmBm0Q,EACK97L,EADL87L,OAAQC,EACH/7L,EADG+7L,OAAQnkF,EACX53G,EADW43G,SAAUzoM,EACrB6wF,EADqB7wF,KAAM0iD,EAC3BmuC,EAD2BnuC,qBAAsBO,EACjD4tC,EADiD5tC,kBAC3Fp7C,EAA0CgpF,EAA1ChpF,KAAM2vE,EAAoCqZ,EAApCrZ,mBAAoB8wH,EAAgBz3G,EAAhBy3G,aAEtBxpN,EAASo/F,EAAYj4F,YACrB4mS,GAAkB,IAAA93L,wBAAuB7W,EAAap/F,GACtDmc,GAAkB,IAAAhB,oBAAmBikF,GAErC4uM,GAAiB,IAAAlnJ,cAAY,WAC5B,EAAD,aAGJ,aAAEloJ,QAAQ+pG,QAAQ,UAAYszB,eAC1ButF,GACFA,OAED,CAACA,IAEEykF,GAAA,gCAAoB,oGACpBF,EADoB,0CAEf,GAFe,4CAMhBG,EAAe,UAAUrlQ,mBAAmBu2D,GAClD,UAAUx3D,eAAe,EAAAvlC,mBACrB,EAAA6tC,gCAAgC0B,qBAAuBs8P,EACvD,EAAA9kQ,6BAA6B0C,kBAAoBoiQ,IAGjD/xR,EAZkB,uBAapBynD,EAAqB,EAAAzgC,cAAckB,aAbf,mBAcb,GAda,UAkBlB1iB,GAAS,IAAAC,oBAC0B,WAArC/hB,SAASC,SAASoC,eAnBE,sBAoBdk9F,EAAYryF,OApBE,OAqBf,kBArBe,MAsBf,gBAtBe,QA+Cf,WA/Ce,yEAwBW,gBAAvBqyF,EAAYryF,WACR2sF,EAAsB/3E,EAAOgb,wBAAwB,mBAC/B+8D,EAAoBnQ,WAAYmQ,EAAoB9sE,eACzE8sE,EAAoB9sE,cAAcrT,SAAlC,WAA4DmgF,EAAoB9sE,cAAcrT,SAAlC,UAAwD3Y,SAAS,OAElI,IAAA63F,gBAAeiB,EAAoB9sE,cAAe8rE,IA7BtC,gCAkCZ14F,EAAS2hB,EAAO0zH,mBAA0C,kBAAvBj2C,EAAYryF,OAA6B,cAAgB,mBAC9F,EAAAxK,aAAevC,GAAUo/F,EAAY7lF,SAAZ,eAAyCvZ,EAAOiiB,KAAKigB,eAAek9D,EAAY7lF,SAAS8tE,gBAnCpG,wBAoChBzjB,EAAqB,EAAAzgC,cAAcgB,oBAInCggC,EAAkB,CAChB41C,oBAAqB,CAAC/5G,EAAOiiB,KAAKigB,eAAek9D,EAAY7lF,SAAS8tE,kBAzCxD,mBA2CT,GA3CS,kDAgDlB,CAAC,eAAgB,gBAAgBxiF,SAAQ,SAAAkI,GACvC,IAAM2sF,EAAsB/3E,EAAOgb,wBAAwB5vB,GACvD2sF,IAAwBA,EAAoBnQ,UAAYmQ,EAAoB9sE,gBAC9E,IAAA6rE,gBAAeiB,EAAoB9sE,cAAe8rE,MAnDpC,mFA6DlB,IAAAD,gBAAe2G,EAAa1G,GA7DV,QA8DxBh/D,IACAs0Q,IA/DwB,mDAApB,4CAmFN,OAAIH,EAEA,mCAAY79C,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,sBACnC4iF,UAAWy8M,EAAS,8BAAgC,+CACpDvkN,SAAUwkN,IAAoB/tS,EAAOypF,cACrC85F,QAAS0qH,GACnB,yCAKFtkF,EAEA,mCACE0S,QACE,mCACEhrI,UAAU,kBAQV9H,UAAWvpF,EAAOypF,cAClB6yI,eAAA,EACAH,SAAU4xE,EACVxxE,SAAUwxE,EA5CA,WAClB,IAAMG,EAAe,UAAUrlQ,mBAAmBu2D,GAClD,UAAUx3D,eAAe,EAAAvlC,mBACrB,EAAA6tC,gCAAgC2B,qBAAuBq8P,EACvD,EAAA9kQ,6BAA6B2C,kBAAoBmiQ,GAGjDluS,EAAOupF,WACTvpF,EAAOupF,UAAW,EAClBvpF,EAAOq5F,kBAET,IAAAtM,iBAAgBqS,IAChB,IAAA7F,sBAAqB6F,EAAa,KAAM,MACxC1lE,IACAs0Q,KA8BkDC,EAC1C/7L,MAAM,YAGV9qE,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAIsa,GAAQ,wCAM3C,mCAAQsoE,UAAW,sDACX9H,SAAUwkN,IAAoB/tS,EAAOypF,cACrC0kN,UAAW,wCACX5qH,QAAS0qH,GACf,4CAAkBx/R,GAAG,gCAK3Bm/R,EAAwBjlJ,UAAY,CAClCvpD,YAAa,UAAU/+C,MAAV,oBACbq4C,mBAAoB,UAAU8sF,KAAK9lE,WACnCouL,OAAQ,UAAUjlJ,KAClBglJ,OAAQ,UAAUhlJ,KAClB8gE,SAAU,UAAU9gE,KACpB9/H,KAAM,UAAUkgB,QAGlB,IAUM8tJ,EAAqB,CACzBnzH,4CAEAO,sCACAzqC,uC,WAGa,IAAA80H,aACb,IAAAj8C,UAlBsB,SAACxzG,GAIvB,MAAO,CACL6qN,YAJoB7qN,EAAMouB,wBAArBy8L,YAKL/tM,uBAJ+B9c,EAAMwc,UAAhCM,0BAgBkBk7K,EAAzB,EAA6C,SAAChlF,GAC5C,OACE,wCACG,SAACrZ,GAAD,OAAwB,wBAACk1M,GAAD,gBAA6B77L,EAA7B,CAAoCrZ,mBAAoBA,a,qJC7MzF,O,WACA,MACA,OACA,O,IAEA,O,IAEA,O,IACA,QACA,QACA,QACA,QACA,Q,IAMA,QACA,Q,IACA,QACA,QACA,Q,uDAEM01M,G,sPASJC,2B,gCAA4B,WAAOx8R,EAAMy8R,GAAb,oFAC1B,UAAU1mQ,eAAe,4BAA8B/1B,IACnDy8R,IAAwBA,IAFF,0CAGjB,GAHiB,UAKpBjwE,EAAoB,EAAKkwE,oBACzBnzE,EAAoBiD,EAAkBzxM,cAAgByxM,EAAkBzxM,cAAc67D,yCAA2C,KACnIwvG,EAAiBomC,EAAkBE,2BAA2B1sN,MAE5CupN,GAAsBnjC,EAAexvG,2CAA6C2yI,EAT9E,wBAUxB,IAAA/tM,gBAVwB,UAWlB,UAAW81L,qBAAqBkb,EAAmBjD,GAXjC,SAYxB,IAAAriI,iBACAk/F,EAAiBomC,EAAkBE,2BAA2B1sN,GAbtC,QAgB1BpT,QAAQ4B,IAAI,iBAAkB43L,GAC1BA,IACFA,EAAe/qF,cACf,EAAK6E,MAAMplF,iBAAiBsrK,GAE5B,EAAKwxB,cACD,EAAK13G,MAAM+zH,cACb,EAAK/zH,MAAM+zH,aAAa7tC,GAE1B,EAAKlmF,MAAMr4E,qBAET,EAAKq4E,MAAMy8L,YACb,EAAKz8L,MAAMtvC,qBAAqBw1H,GA5BR,8C,iDAgC5Bs2G,kBAAoB,WAGlB,OAFe,IAAA3sR,oBACYqD,MAAP,MACDO,aAAajT,MAAK,SAAAkT,GAAA,MAA8B,eAAnBA,EAAQ1Y,W,EAG1Ds0M,aAAe,WACb,OAAI,EAAKtvG,MAAM7kF,SACN,4CAAkBze,GACtB,EAAKsjG,MAAM3qF,YAAc,KAAQ,gDAAkD,mDAGlF,EAAK2qF,MAAM3qF,YAAc,KACpB,4CAAkB3Y,GAAG,kDACnB,EAAKsjG,MAAM3qF,YAAc,KAC3B,4CAAkB3Y,GAAG,mDAErB,4CAAkBA,GAAG,mD,EAKlCggS,kBAAoB,WAClB,GAAyC,YAArC5uS,SAASC,SAASoC,eACpB,0BAEF,GAAI,EAAK6vG,MAAMnzF,eAAeM,SAAU,CACtC,IAAMm/M,EAAoB,EAAKkwE,oBAC/B,GAAIlwE,EACF,OAAO,EAAA9xE,yBAAyB9+I,QAAO,SAAAoE,GACrC,QAASwsN,EAAkBE,2BAA2B1sN,EAAM,IAAI,MAItE,mC,EAGF68R,cAAgB,SAAC32B,GACf,OACE,wCACG,SAACu2B,GAAD,OACC,+BAAKj9M,UAAU,uBACf,gCAAMA,UAAU,6BACd,4CAAkB5iF,GAAG,oDAErB,+BAAK4iF,UAAU,4BACZ,EAAKo9M,oBAAoBlgS,KAAI,SAAAkvL,GAC5B,IAAM79B,EAAWm4G,IAAgBt6E,EACjC,OACE,mCAAQpsG,UAAW,oEACduuE,EAAW,8BAAgC,IAExC3hK,IAAKw/L,EAELla,QAAS,kBAAM,EAAK8qH,0BAA0B5wG,EAAgB6wG,KAEnE7wG,Y,gGAYjB,IACMs6E,EADoBtxQ,KAAK8nS,oBACOvrF,8BACtC,OAAIv8M,KAAKsrG,MAAMy8L,WACN/nS,KAAKioS,cAAc32B,GAI1B,mCAAUlmQ,KAAM,EACNlU,MAAOo6Q,EACP/a,UAAWv2P,KAAK4nS,0BAChB7sF,YAAa/6M,KAAKgoS,oBAClBp9M,UAAW,oBACXqwH,UAAWj7M,KAAK46M,qB,kBAvHvB14D,UAAY,CAEjBm9E,aAAc,UAAUtgD,KACxBgpH,WAAY,UAAU3lJ,KACtBj8H,cAAe,UAAUyzB,MAAV,qB,GAuIb02I,EAAqB,CACzB9rK,wDACA0B,oCACAG,wDACA4M,sCACA+oC,6C,WAGa,IAAA8vC,UArBS,SAACxzG,EAAOqvP,GAAa,IACpCvrL,EAAqB9jE,EAAM0zG,UAA3B5vC,kBACDjkD,EAAiB7f,EAAMqN,gBACtBw9M,EAAe7qN,EAAMouB,wBAArBy8L,YACP,MAAO,CACL18L,SAAUnuB,EAAMouB,wBAAwBD,SACxC9F,YAAaroB,EAAMgR,YAAYqX,YAC/By7C,kBAAmBurL,EAASxhO,eAAiBi2C,EAC7CjkD,iBACAgrM,iBAYoC7yB,EAAzB,CAA6Cq3G,I,sKC7K5D,YAEsCO,EAAzBA,uBAAyB,CACpC,CAAC,WAAY,YACb,CAAC,UAAW,WACZ,CAAC,WACD,CAAC,UAAW,WAAY,YACxB,CAAC,UAAW,WACZ,CAAC,WAAY,YACb,CAAC,UAAW,WACZ,CAAC,YAGsCC,EAA5BA,0BAA4B,CACvC,GACA,CAAC,WAAY,YACb,CAAC,WAAY,UAAW,WAAY,YACpC,CAAC,UAAW,WACZ,CAAC,UAAW,WAAY,YACxB,CAAC,WACD,CAAC,WAAY,YACb,CAAC,WAAY,WAAY,aAGUC,EAAxBA,sBAAwB,SAAC9sJ,GAAqF,IAAxDle,EAAwD,uDAA5C,EAAAxhC,+BAA+BC,SAE5G,OAAQy/C,GACN,IAAK,IACH,OAAQle,GACN,KAAK,EAAAxhC,+BAA+BC,SAClC,MAAO,CAAC,0BAA2B,kBAAmB,kBAAmB,mBAC3E,KAAK,EAAAD,+BAA+BE,WAClC,MAAO,CAAC,6BAA8B,oBAAqB,mBAAoB,qBACjF,QACE,MAAO,GAEb,IAAK,IACH,OAAQshC,GACN,KAAK,EAAAxhC,+BAA+BC,SAClC,MAAO,CAAC,mBACV,KAAK,EAAAD,+BAA+BE,WAClC,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,QACE,MAAO,GAEb,IAAK,IACH,OAAQshC,GACN,KAAK,EAAAxhC,+BAA+BC,SAClC,MAAO,CAAC,mBACV,KAAK,EAAAD,+BAA+BE,WAClC,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,QACE,MAAO,GAEb,IAAK,IACH,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,IAAK,IACH,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,IAAK,IACH,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,IAAK,IACH,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,IAAK,IACH,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,IAAK,IACH,OAAQshC,GACN,KAAK,EAAAxhC,+BAA+BC,SAClC,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,KAAK,EAAAD,+BAA+BE,WAClC,MAAO,CAAC,qBACV,QACE,MAAO,GAEb,IAAK,KACH,OAAQshC,GACN,KAAK,EAAAxhC,+BAA+BC,SAClC,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,KAAK,EAAAD,+BAA+BE,WAClC,MAAO,CAAC,qBACV,QACE,MAAO,GAEb,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,oBAAqB,qBAC/B,IAAK,KACH,MAAO,CAAC,oBAAqB,qBAC/B,IAAK,KACH,MAAO,CAAC,oBAAqB,qBAC/B,IAAK,KACH,MAAO,CAAC,oBAAqB,qBAC/B,IAAK,KACH,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,IAAK,KACH,MAAO,CAAC,oBAAqB,oBAAqB,oBAAqB,8BACzE,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,oBAAqB,oBAAqB,8BACpD,IAAK,KACH,MAAO,CAAC,oBAAqB,oBAAqB,8BACpD,IAAK,KACH,MAAO,CAAC,oBAAqB,oBAAqB,8BACpD,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACH,MAAO,CAAC,qBACV,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,QACE,MAAO,M,+IC5Jb,SACA,QACA,S,IACA,OACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBixF,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAvpL,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKnY,cAAL,qBACA,EAAKwuK,kBAAoB,MACzB,EAAKx2J,YAAc,+BAGnB,EAAK2sG,OAAS,KACd,EAAKggL,aAAe,KACpB,EAAK72P,KAAO,KACZ,EAAKyG,UAAY,KACjB,EAAKd,MAAQ,KACb,EAAK5F,WAAa,KAfN,E,qEAkBT5tC,GAAW,WACVssI,EAAkB,GACpB8/E,GAA8B,EAC9B7/E,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,SACHy/H,EAAkB,SAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,OACHD,EAAkB,OAClBC,YACA,MACF,IAAK,aACHD,EAAkB,aAClBC,YACA,MACF,IAAK,YACHD,EAAkB,YAClBC,YACA,MACF,IAAK,SAEEvsI,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWE,cAAiB73F,EAAUmP,SAAV,aACtGnP,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,QAClBC,aAIN,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACnBosN,K,uCAMV,OAAO,IAAI,EAAJ,QAAyB,YAAa/vN,Q,2CAI7C,OAAO,I,6DA3EFgI,GAAK,a,aADO+kL,G,+ICbrB,SACA,QACA,S,IACA,OACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBk4D,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAzhP,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,eAChB,EAAKnY,cAAL,wBACA,EAAKgY,YAAc,mCAGnB,EAAK63M,QAAU,KACf,EAAKpiL,WAAa,KAClB,EAAKm1M,OAAS,KACd,EAAK91M,KAAO,KACZ,EAAKi4E,OAAS,KACd,EAAKrxE,KAAO,KACZ,EAAKD,MAAQ,KACb,EAAKmxP,mBAAqB,KAhBd,E,qEAmBT3kS,GAAW,WACVssI,EAAkB,GACpB8/E,GAA8B,EAC9B7/E,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,gBACHy/H,EAAkB,UAClBC,YACA,MACF,IAAK,2BACHD,EAAkB,aAClBC,YACA,MACF,IAAK,uBACHD,EAAkB,SAClBC,YACA,MACF,IAAK,eACHD,EAAkB,eAClBC,YACA,MACF,IAAK,QACHD,EAAkB,SAClBC,YACA,MACF,IAAK,uBACHD,EAAkB,qBAClBC,YACA,MACF,IAAK,UACEvsI,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,UAAa53F,EAAUmP,SAAV,aAClGnP,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,SAClBC,aAEF,MACF,IAAK,QACEvsI,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,UAAa53F,EAAUmP,SAAV,aAClGnP,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,OAClBC,aAEF,MACF,IAAK,YACEvsI,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,UAAa53F,EAAUmP,SAAV,aAClGnP,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,WAClBC,aAEF,MACF,IAAK,SACEvsI,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,UAAa53F,EAAUmP,SAAV,aAClGnP,EAAUmP,SAAV,YACHi9M,GAA8B,GAEhC9/E,EAAkB,QAClBC,aAEF,MACF,IAAK,eACH6/E,GAA8B,EAC9B9/E,EAAkB,OAClBC,YAGJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACnBosN,K,uCAMV,OAAO,IAAI,EAAJ,QAAyB,gBAAiB/vN,Q,2CAIjD,OAAO,I,iCAGmB,WAAnBuyK,IAAmB,yDAC1B,OAAOvyK,KAAK+e,aACT/X,QAAO,SAAAiqE,GAIN,MAHoB,yBAAhBA,EAAK3qE,SACP2qE,EAAK1gD,QAAU0gD,EAAK0Q,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC1P,EAAKwP,2BAAyBhsF,QAEpG,EAAKg+K,kBAAkBxhG,EAAMshG,MAErCzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,qFAQjD,OAAOlP,KAAKuzN,SAAWvzN,KAAKuzN,QAAQptM,cAChCnmB,KAAKuzN,QAAQptM,cAAcxiB,UAAUmP,SAArC,QACA,K,qCAIJ,OAAO9S,KAAKsmP,QAAUtmP,KAAKsmP,OAAOngO,cAC9BnmB,KAAKsmP,OAAOngO,cAAcxiB,UAAUmP,SAApC,MACA,O,aA1IC9K,GAAK,e,aADOi9O,G,yIClBrB,O,OACA,O,IACA,MACA,O,IAEA,O,IACA,QACA,QACA,QACA,QACA,QACA,S,uDAEMsjD,G,6OAOJjnE,0BAA4B,WACtB,EAAKh2H,MAAMk9L,uBACb,EAAKl9L,MAAMk9L,wBAEb,IAAM12R,EAAqB,EAAKw5F,MAAMx5F,mBACtC,UAAUqvB,eAAe,EAAKsnQ,qBACzB,EAAKn9L,MAAMl2F,uBAOZtD,EAAmByvN,4BACrB,EAAKj2H,MAAM76E,oBAAmB,KAE9B,IAAA7J,cAAa,yBAA0B,4BACvC,IAAA6wE,WAAU,CAACC,QAAQ,EAAM+0B,iBAAkB,EAAAjsE,iBAAiBE,wBACzD7uB,MAAK,YACJ,IAAAygE,kBACA,IAAAk9E,oBAAmB,iDAbvB,UAAgBk+B,kBAAhB,gBACK,EAAKpiG,MADV,CAEEmiG,cAAe,EAAAnuJ,eAAeI,a,EAgBpC+oP,kBAAoB,WAClB,OAAQ,EAAKn9L,MAAM01H,gBACjB,IAAK,eACL,QACE,MAAO,mCACT,IAAK,mBACH,MAAO,iCACT,IAAK,uBACH,MAAO,4C,EAIb0nE,oBAAqB,WACnB,OAAQ,EAAKp9L,MAAM01H,gBACjB,IAAK,eACL,QACE,OACE,kCAAQp2I,UAAU,sCACVkyF,QAAS,EAAKwkD,2BACpB,gCAAM12I,UAAU,iDAAgD,4CAAkB5iF,GAAG,qBAG3F,IAAK,mBACH,OACE,8BAAI4iF,UAAU,kBACZ,kCAAQA,UAAU,sCACVkyF,QAAS,EAAKwkD,2BACpB,gCAAM12I,UAAU,iDAAgD,4CAAkB5iF,GAAG,sBAI7F,IAAK,uBACH,OACE,8BAAI4iF,UAAU,8DACVkyF,QAAS,EAAKwkD,2BAA2B,4CAAkBt5N,GAAG,iC,gGAMxE,OAAOhI,KAAKsrG,MAAMx5F,mBAAmBivN,iBAAmB/gO,KAAK0oS,sBAAwB,S,kBAtEhFxmJ,UAAY,CACjB8+E,eAAgB,UAAUz+E,MAAM,CAAC,eAAgB,mBAAoB,yBAAyBtpC,WAC9FuvL,sBAAuB,UAAUzpH,M,cA6EtB,IAAAjzE,UALS,SAACxzG,GAAD,MAAY,CAClC0xB,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxCtD,mBAAoBxZ,EAAMqN,gBAAgB+B,YAEJ,CACtCshB,kCACAgG,8CACAyB,yCAHa,CAIZ83Q,I,yJClGH,Q,IACA,Q,IACA,Q,IAEA,QAEA,Q,IACA,Q,IAEA,S,IACA,Q,IACA,O,IACA,SACA,SACA,U,IAEA,S,IACA,QACA,SACA,SACA,S,IACA,SACA,UACA,Q,qDAEa3pP,O,YAeX,WAAY0sD,IAAO,gGACXA,IADW,SAVnBwpK,YAAc,EAAAp+O,WAAWC,QAUN,EATnBvrB,KAAO,EAAK0pQ,YASO,EARnB1gP,MAAQ,IAQW,EAPnB34B,eAAiB,EAAAd,2BAA2BE,QAOzB,EANnBqnO,gBAAkB,eAMC,EALnBlQ,cAAgB,EAAAl1N,yBAA2B,WAAa,aAKrC,EAJnBg4G,YAImB,uBAHnB6tH,YAGmB,eAFnB17I,SAAW,UAASzoD,QAED,EAkDnBq/N,yBAA2B,SAAC3+O,GAC1B,OACE,EAAK+nE,SAAS/nE,GAAYy6L,WAAWkrD,cADvC,qBAEKnwQ,OAAOmc,KAAK,EAAKo2E,SAAS/nE,GAAYsjO,SAAS16O,KAAI,SAAAtQ,GAAA,OAAO,EAAKyvF,SAAS/nE,GAAYsjO,QAAQhrP,SAnDjG,EAAKgnB,MAAM,UAAWxW,IAAU,IAAI,EAAJ,QAChC,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,EAAAqsH,OAAO7iI,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,EAAAu7E,OAAO/xF,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,EAAAixH,eAAeznI,IAAM,IAAI,EAAJ,eAChC,EAAKwW,MAAM,EAAAgpP,kBAAkBx/P,IAAM,IAAI,EAAJ,kBACnC,EAAKwW,MAAM,EAAA4oP,QAAQp/P,IAAa,IAAI,EAAJ,QAChC,EAAKwW,MAAM,EAAAimP,OAAOz8P,IAAc,IAAI,EAAJ,OAChC,EAAKwW,MAAM,UAAMxW,IAAe,IAAI,EAAJ,QAGhC,EAAKwW,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,SACvB,aAAO,EAAKwW,OAAOpgB,SAAQ,SAAAod,GAAA,OAAQA,EAAKN,OAAL,KAflB,E,mFAkBAvX,GASjB,OARAA,EAAUmP,SAAS+hB,WAAalxB,EAAUmP,SAAS+hB,WAAW/sB,KAAI,SAACooQ,GAMjE,OALAx7Q,OAAOyhB,OAAP,cAA0BrO,KAAI,SAAA2kF,GAAA,OAAOA,EAAM,MAAIruF,SAAQ,SAAAuqS,GACjDz4B,IAAWy4B,IACbz4B,EAAS,SAAWA,MAGjBA,KAEFvsQ,I,6CAG8B,IAAlByH,EAAkB,uDAAXpL,KAAKoL,KAC/B,OAAO,2BAAmBA,K,qDAI1B,OAAO,EAAA2sB,mBAAmB/3B,KAAK0hF,0B,8CAGTzsB,GACtB,IAAM+sO,EAAchiS,KAAKwe,MAAM,UAAMxW,IAC/B1B,GAAS,aAAU2uD,GACrB23E,EAAco1J,EAAYjjR,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAMtF,OALKsmI,KACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ2uD,IACzCv0D,UAAY,kBAAMshS,GAC9BA,EAAYjjR,aAAahqB,KAAK63I,IAEzB,IAAI,EAAJ,QAAyBA,EAAY/wH,SAAU+wH,O,+MCvF1D,YACA,QACA,QAOa1iI,EAA0BA,EAA1BA,wBAA0B,SAAC9D,GAAwC,IAA9BxO,EAA8B,uDAAnB,eAC3D,MAAiB,iBAAbA,EACKwO,EAASxO,IAAawO,EAASC,YAAY1C,UAAU/L,GAErB,iBAA1BwO,EAASyyG,aACpBzyG,EAASyyG,aAC+C,iBAAhDzyG,EAASC,YAAY1C,UAAUk1G,aACrCzyG,EAASC,YAAY1C,UAAUk1G,aAC/B,GA2EF+vL,GAnEgCC,EAAzBA,uBAAyB,SAACtmS,GAErC,IAAMwmP,GAAqB,IAAA3vJ,iBAAgB72F,GAAW,GAAM,GACtDumS,GAAgB,IAAAtvM,0BAAyBuvJ,GAE3CggD,EAAa,GAsBjB,OArBAD,EAAc1qS,SAAQ,SAAAgI,GACpB,IAAM4iS,EAAuB9+R,EAAwB9D,IAAa,EAC5D6iS,EAAuB/+R,EAAwB9D,EAAU,iBAAmB,OAC5E8iS,EAAuBh/R,EAAwB9D,EAAU,iBAAmB,IAC5E+iS,EAAuBj/R,EAAwB9D,EAAU,iBAAmB,IAC5EgjS,EAAmBL,EAAWj9R,MAAK,SAAAxJ,GACvC,OAAOA,EAASE,QAAUwmS,GAAwB1mS,EAAS7L,OAASwyS,KAElEG,EACFA,EAAiB7mS,UAAUxN,KAAKqR,EAAS4B,IAEzC+gS,EAAWh0S,KAAK,CACdyN,MAAOwmS,EACPvyS,KAAMwyS,EACNvqD,KAAMwqD,EACN/nM,KAAMgoM,EACN5mS,UAAW,CAAC6D,EAAS4B,SAKpB+gS,GAG2BM,EAAvBA,qBAAuB,SAAC9mS,GAAoC,IAAzB+mS,EAAyB,uDAAP,GAChE,OAAO/mS,EAAUuF,KAAI,SAAA1B,GACnB,IAAKA,EAASC,cAAgBD,EAASC,YAAY1C,UACjD,OAAOyC,EAET,IAAMmjS,EAAkBD,EAAgBx9R,MAAK,SAAA09R,GAAA,OAAkBA,EAAevyR,cAAgB7Q,EAASC,YAAY1C,UAAUqE,MAC7H,GAAIuhS,GAAmBA,EAAgBz+I,SAAWy+I,EAAgBz+I,QAAQr2J,OAAQ,CAChF,GAAI2R,EAASgiJ,cAAgBmhJ,EAAgBz+I,QAAQ7qJ,MAAK,SAAAigF,GAAA,OAAUA,EAAOhqC,QAAU9vC,EAASgiJ,gBAC5F,OAAOhiJ,EAET,IAAMqjS,EAAcF,EAAgBz+I,QAAQ,GAC5C,OAAOp2J,OAAO+2B,OAAO,GAAIrlB,EAAU,CACjCyyG,aAAczuG,KAAKyI,MAAyB,IAAnB42R,EAAY/mS,MAAc,IACnD0lJ,aAAcqhJ,EAAYvzP,MAC1BmyG,aAAcohJ,EAAYnnS,SAC1BonS,aAAcD,EAAYtoM,OAEvB,OAAI/6F,EAASgiJ,aACXhiJ,EACEA,EAASC,YAAY1C,UAAUk1G,cAAgBzyG,EAASC,YAAY1C,UAAUykJ,aAChF1zJ,OAAO+2B,OAAO,GAAIrlB,EAAU,CACjCyyG,aAAczyG,EAASC,YAAY1C,UAAUk1G,cAAgB,EAC7DuvC,aAAcl+I,EAAwB9D,EAAU,iBAAmB,OACnEiiJ,aAAcn+I,EAAwB9D,EAAU,iBAAmB,IACnEsjS,aAAcx/R,EAAwB9D,EAAU,iBAAmB,MAG9D1R,OAAO+2B,OAAO,GAAIrlB,EAAU,CACjCyyG,aAAc,EACduvC,aAAc,OACdC,aAAc,IACdqhJ,aAAc,UAMH,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAC1EC,EAAa,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAEtFC,EAAc,SAACn8K,GACnB,OAAIk8K,EAAWxvS,SAASszH,GACf,IACEm7K,EAAWzuS,SAASszH,GACtB,IAEF,KASqCtjH,EAAjCA,+BAAiC,WAA6C,IAA5C0/R,EAA4C,uDAA7B,EAAGtnS,EAA0B,aAAfiK,EAAe,aACrFs9R,EAAoBvnS,EAAUjB,QAAQ,SAACyoS,EAAe3jS,GAIxD,OAHI,EAAAs2F,iBAAiBviG,SAASiM,EAASE,SAAW,EAAA60B,0BAA0BhhC,SAASiM,EAASE,WAC5FyjS,GAAgC3jS,EAAS+C,UAEpC4gS,IACL,GACJ,GAA0B,IAAtBD,EACF,OAAOD,EAET,GAAIC,EAAoB,GACtBD,GAA+B,SAC1B,GAAIC,EAAoB,GAAI,OACLt9R,EAAWw9R,aAAat/I,gBAA7CT,EAD0B,EAC1BA,WAAYljJ,EADc,EACdA,MACb0mH,EAAaw8B,IAAeljJ,GAAS,IAAI1O,MAAM,EAAG,IAAMmU,EAAWsI,UAAU/T,SAASkpJ,aAAez9I,EAAWsI,UAAU/T,SAASgG,OAAS,IAAI1O,MAAM,EAAG,GAC/JwxS,GAAyD,EAA1BD,EAAYn8K,QAE3Co8K,GAAoD,EAApBC,EAAyB,EAE3D,OAAOD,I,oUChIT,IAAYrpR,E,wJAAZ,OAEyCypR,EAA5BA,0BAA4B,SAACC,GAAD,MAA6B,CACpE9+R,KAAMoV,EAAM0sD,6BACZrsD,QAAS,CAACqpR,4BAG6BC,EAA5BA,0BAA4B,SAACC,GAAD,MAA6B,CACpEh/R,KAAMoV,EAAM2sD,6BACZtsD,QAAS,CAACupR,4BAGmCC,EAAlCA,gCAAkC,SAACC,GAAD,MAAoB,CACjEl/R,KAAMoV,EAAM4sD,mCACZvsD,QAAS,CAACypR,mBAGoCC,EAAnCA,iCAAmC,SAACC,GAAD,MAAqB,CACnEp/R,KAAMoV,EAAM6sD,oCACZxsD,QAAS,CAAC2pR,oBAGqCC,EAApCA,kCAAoC,SAACC,GAAD,MAAqC,CACpFt/R,KAAMoV,EAAM8sD,kCACZzsD,QAAS,CAAC6pR,oCAGqCC,EAApCA,kCAAoC,SAACC,GAAD,MAAqC,CACpFx/R,KAAMoV,EAAM+sD,sCACZ1sD,QAAS,CAAC+pR,oCAGyCC,EAAxCA,sCAAwC,SAACl5Q,GAAD,MAA2C,CAC9FvmB,KAAMoV,EAAMgtD,0CACZ3sD,QAAS,CAAC8Q,2C,kGCnCZ,MACA,O,IACA,MACA,O,IAGA,Q,IACA,Q,mDASA,IAAMm5Q,EAAkB,SAACx/L,GAAU,IAE1BrtC,EAAuGqtC,EAAvGrtC,UAAW8sO,EAA4Fz/L,EAA5Fy/L,UAAWzmK,EAAiFh5B,EAAjFg5B,YAAa0mK,EAAoE1/L,EAApE0/L,UAFT,EAE6E1/L,EAAzD2/L,mBAFpB,MAEkC,GAFlC,EAEsCrgN,EAAuC0gB,EAAvC1gB,UAAWsgN,EAA4B5/L,EAA5B4/L,yBAclF,OACE,mCAAQl0M,KAAM/4B,IAAcqmE,EACpB15C,UAAW,wBAA0B05C,EAAc,eAAiB0mK,GAAapgN,EAAY,IAAMA,EAAY,IAC/GugN,SAAUJ,EAAUv2L,QACpBw2L,UAAWA,EACXI,YAAA,EACAC,eAAA,IACL,gBAAGC,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAA+B,UAAdP,EAAwB,eAAiB,iBAEnE,+BAAKpgN,UAAU,sBACb,gCAAMA,UAAW,oDAAsDogN,GAIrE,4CAAkBhjS,GAAIijS,GAAe,kBAAoB3mK,EAAc,WAAYnuH,OAAQ,CACzF+0R,qCAiBhBJ,EAAgB5oJ,UAAY,CAK1B6oJ,UAAW,UAAUpzS,OAAOshH,WAC5BqrB,YAAa,UAAU1rB,OAAOK,WAC9B+xL,UAAW,UAAUxoQ,OACrByoQ,YAAa,UAAUzoQ,OACvB0oQ,yBAA0B,UAAU1oQ,OACpCooD,UAAW,UAAUpoD,QAGvBsoQ,EAAgB7rH,aAAe,CAC7B+rH,UAAW,S,WAiBE,IAAAl/L,UAdS,SAACxzG,GAGvB,MAAO,CACL2lE,UAHkB3lE,EAAM0zG,UAAnB/tC,aAQkB,GAKZ,CAA6C6sO,I,wGClG5D,I,EAAA,O,oCAEO,IAAMU,EAAiBA,EAAjBA,eAAiB,CAC5BjlF,eAAgB,KAChBH,mBAAoB,EACpBI,mBAAoB,EACpBF,kBAAmB,GACnBH,WAAY,EACZ/2F,WAAY,GACZw3F,aAAc,EACdqiB,cAAe,KAEfniB,UAAU,EACV2kF,cAAc,EACdC,oBAAqB,GAGjBC,EAAmB,UAAM72H,cAAc02H,G,UAC9BG,G,0GCDA,WAAwC,IAA9B5kS,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAErD,OAAQA,EAAOt1B,MACb,KAAKoV,EAAMmL,YACT,OAAOigR,EAAuB7kS,EAAO25B,EAAO7f,QAAQte,WACtD,KAAKie,EAAM2L,iBACT,OAAO0/Q,EAA6B9kS,EAAO25B,EAAO7f,QAAQza,UAC5D,KAAKoa,EAAMsN,mBACX,KAAKtN,EAAMwN,cACX,KAAKxN,EAAM2N,sBACT,OAAOz5B,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMiM,sCACT,OAAOq/Q,EAAiC/kS,EAAO25B,EAAO7f,SAG1D,OAAO9Z,G,EAIOsB,0BAAT,SAAmCd,GACxC,IAAI7E,EAAO,EAQX,OAPA,aAAQ6E,GAAU,SAAA0O,GAAA,OAASA,EAAMi2G,YAC9B9tH,SAAQ,SAAAvI,GACHA,EAAE01H,WACJ7oH,GAAQqpS,EAAoBl2S,OAI3B6M,G,EAGOqpS,sBAlDhB,I,IAAA,Q,IACA,Q,IACA,S,IACA,Q,IACA,QAEYvrR,E,wJAAZ,O,mDAGA,IAAMwoP,EAAe,CACnBn7O,YAAY,EACZtmB,SAAU,GACV2mB,qBAAsB,IAGpB89Q,EAAkB,GAmCf,SAASD,EAAoBv/Q,GAClC,OAAOA,EAAoBy/Q,OAASz/Q,EAAoBhqB,MAG1D,SAASspS,EAAiC/kS,EAA1C,GAEE,IAFsE,IAAtBylB,EAAsB,EAAtBA,oBACzCjlB,EAAYR,EAAZQ,SACEhT,EAAI,EAAGA,EAAIgT,EAAS9S,OAAQF,IACnC,IAAK,IAAIkB,EAAI,EAAGA,EAAI8R,EAAShT,GAAG23H,SAASz3H,OAAQgB,IAAK,CACpD,IAAM02H,EAAU5kH,EAAShT,GAAG23H,SAASz2H,GACrC,GAAK02H,EAAQ+/K,uBAAyB1/Q,EAAoB0/Q,sBACpD//K,EAAQggL,4BAA8B3/Q,EAAoB2/Q,0BAE9D,OADAhgL,EAAQZ,UAAYY,EAAQZ,UAC5B,gBAAWxkH,EAAX,CAAkBQ,UAAU,aAAUA,KAK5C,OAAOR,EAGT,SAAS6kS,EAAuB7kS,EAAOxE,GACrC,IAAI6pS,GAAa,EACV7kS,EAAYR,EAAZQ,SAkDP,OAhDAhF,EAAUyE,QAAO,SAAAZ,GAAA,OAAYA,EAAS+C,YAAU/K,SAAQ,SAAAgI,GACtD,IAAMimS,EAAKjmS,EAASC,YAAY1C,UAAUqE,GAEpCikH,EADmBqgL,EAAmBvlS,EAAMmnB,sBACXlnB,QAAO,SAAAulS,GAC5C,OAAOA,GAASA,EAAKL,uBAAyBG,KAGhD,GAAIpgL,EAAcx3H,OAAQ,CACxB,IAAI+3S,GAAY,aAAKjlS,EAAU,CAAC2uC,MAAO9vC,EAAS6X,iBAC3CuuR,IACHA,EAAY,CACVt2P,MAAO9vC,EAAS6X,eAChBiuG,SAAU,GACV/sG,YAAa,uCAAyC/Y,EAAS6X,eAC/D01G,SAAS,GAEXpsH,EAASxS,KAAKy3S,IAGhBvgL,EAAc7tH,SAAQ,SAAAquS,GAKpB,KAJgB,aAAKD,EAAUtgL,SAAU,CAEvCigL,0BAA2BM,EAAaN,4BAE5B,CACZ,IAAM5gL,EAAWkhL,EAAaC,mBAC9BF,EAAUtgL,SAASn3H,KAAK,CACtBm3S,qBAAsB9lS,EAASC,YAAY1C,UAAUqE,GACrDkuC,MAAOu2P,EAAaE,iBACpBV,OAAQQ,EAAaj9J,iBAAmB,EACxChtI,MAAOiqS,EAAajqS,MACpB2c,YAAastR,EAAattR,YAC1BgtR,0BAA2BM,EAAaN,0BACxC5gL,WACAmhL,mBAAoBD,EAAaC,mBACjCl9J,gBAAiBi9J,EAAaj9J,gBAC9Bo9J,aAAcH,EAAaG,aAC3BjyR,KAAM8xR,EAAa9xR,OAEjB4wG,IACFihL,EAAU74K,SAAU,GAEtBy4K,GAAa,UAMdA,GAAaA,EAAbA,cAAiBrlS,EAAjB,CAAwBQ,UAAU,aAAUA,KAAaR,EAGlE,SAAS8kS,EAA6B9kS,EAAOX,GAAU,IAC9CmB,EAAYR,EAAZQ,SACD8kS,EAAKjmS,EAASC,YAAY1C,UAAUqE,GAEpCikH,EADmBqgL,EAAmBvlS,EAAMmnB,sBACXlnB,QAAO,SAAAulS,GAC5C,OAAOA,EAAKL,uBAAyBG,KAsBvC,OApBIpgL,EAAcx3H,QAChBw3H,EAAc7tH,SAAQ,SAAAquS,GACpB,IAAII,GAAe,aAAUtlS,EAAU,CAAC2uC,MAAO9vC,EAAS6X,iBACxD,IAAsB,IAAlB4uR,EAAqB,CACvB,IAAMC,GAAa,aAAUvlS,EAASslS,GAAc3gL,SAAU,CAC5DggL,qBAAsB9lS,EAASC,YAAY1C,UAAUqE,GACrDmkS,0BAA2BM,EAAaN,4BAE1C,IAAoB,IAAhBW,IACFvlS,EAASslS,GAAc3gL,SAASv2H,OAAOm3S,EAAY,IAC9CvlS,EAASslS,GAAc3gL,SAASz3H,QAGnC,OADA8S,EAAS5R,OAAOk3S,EAAc,IAC9B,gBAAW9lS,EAAX,CAAkBQ,UAAU,aAAUA,UAOhD,gBAAWR,EAAX,CAAkBQ,UAAU,aAAUA,KAGxC,SAAS+kS,EAAmBp+Q,GAQ1B,OAPIA,GAAwBA,EAAqBz5B,QAAUu3S,IAAoBA,EAAgBv3S,SAE7Fu3S,GADAA,GAAkB,aAAQ99Q,GAAsB,SAAA35B,GAAA,OAAKA,EAAE03H,kBACrBjlH,QAAO,SAAAzS,GACvC,OAAOA,IAAMA,EAAEm4S,oBAAsBn4S,EAAEw4S,aAAgBx4S,EAAEs9Q,eAAiBz4Q,SAASC,SAAS2b,eAIzFg3R,I,gFCnKmBn5L,EAAfA,aAAe,CAC1BC,aAAc,CACZ4rE,QAAS,MACT3rE,OAAQ,KAEVi6L,qBAAsB,CACpBtuH,QAAS,OAGXuuH,aAAc,CACZvuH,QAAS,O,gHCAGwuH,kB,EA4BAC,cAtChB,QAEA,IAAMC,EAAyD,cAA/Bh0S,SAASU,SAASu8F,UAC7Cj9F,SAASU,SAASu8F,SAASl8F,SAAS,YACpChC,OAAO2B,SAASC,KAAKI,SAAS,aAC9Bf,SAASC,SAASu7Q,kBAEVy4B,EAAYA,EAAZA,UAAYj0S,SAASC,SAASgC,QAAU+xS,EAC/Ch0S,SAASC,SAASgC,OAAS,GAE1B,SAAS6xS,EAAgB/qM,GAC5B,OAAwB,MAApBA,EAASgiM,OACFhiM,EAAS4wF,OACXlhK,MAAK,SAAAkhK,GAGF,OAYhB,SAAuB5wF,GAGnB,KAFmBA,EAASlqG,OAASkqG,EAASguB,cACtChuB,EAASuwB,QAAU9qH,MAAMC,QAAQs6F,EAASuwB,SAAUvwB,EAASuwB,OAAOr/G,KAAK,QAhBrEi6R,CAAcv6G,GAEP38L,QAAQC,QAAQ,CAACk3S,WAAW,OAI1CprM,EAASqrM,GAKPrrM,EAJIA,EAAS4wF,OACXlhK,MAAK,SAAAkhK,GAAA,OAAQ38L,QAAQ68L,OAAOF,EAAOA,EAAKh9I,QAAUosD,EAASsrM,kBAgBjE,SAASN,EAAYhrM,GACxB,OAAKA,EAEDA,EAAS4wF,KACF5wF,EAAS4wF,OACb5wF,EAHI,KAOIrrG,EAANA,IAAM,SAACsgB,GAChB,OAAO6uM,MAAMonF,EAAYj2R,EAAK,CAE1B+6K,QAAS,CACL,OAAU,sBAGbtgK,KAAKq7Q,GACLr7Q,MAAK,SAAAswE,GAAA,OAAYgrM,EAAYhrM,MAC7B9vE,OAAM,SAAAq7Q,GAAA,OAAUt3S,QAAQ68L,OAAOy6G,OAGpBx7G,EAAPA,KAAO,SAAC96K,EAAKnjB,GAAkC,6DAAP,GAAnB+9L,EAA0B,EAA1BA,OAAQ32L,EAAkB,EAAlBA,OAClCsyS,EAAsD,sBAAzCj5S,OAAOC,UAAUmjB,SAASjjB,KAAKZ,GAC5Ck+L,EAAU,CACd,OAAU,oBAMZ,OAJKw7G,IACHx7G,EAAQ,gBAAkB,oBAGrB8zB,MAAM5qN,EAASA,EAAS+b,EAAMi2R,EAAYj2R,EAAK,CACpDw2R,OAAQ,OACR3xS,KAAM0xS,EAAa15S,EAAOkgH,KAAK2W,UAAU72H,GACzCk+L,QAAS,IAAI07G,QAAQ17G,GACrBH,OAAQA,IAEPngK,KAAKq7Q,GACLr7Q,MAAK,SAAAswE,GAAA,OAAYgrM,EAAYhrM,MAC7B9vE,OAAM,SAAAq7Q,GACL,GAAoB,eAAhBA,EAAOj3S,KAGT,OAAOL,QAAQ68L,OAAOy6G,GAFtB11S,QAAQ4B,IAAI,sB,sLC5EpB,QACA,QACA,Q,mDAEO,IAkEM,EAlEAk0S,EAAoBA,EAApBA,kBAAoB,SAACtrQ,GAChC,OAAOA,GAA6B,iBAAXA,EACrBA,EACC7jC,QAAQ,MAAO,KACfA,QAAQ,MAAO,KACfA,QAAQ,MAAO,KACfA,QAAQ,MAAO,KACfA,QAAQ,UAAW,IACpB6jC,GAGuB8xI,EAAhBA,cAAgB,SAACl6E,EAAYi6E,GAA4D,IAA3C05H,EAA2C,wDAAtB35H,EAAsB,aACpGh6E,EAAWqpD,YAAc,GACzB/uJ,OAAOmc,KAAKupF,GAAYh8F,SAAQ,SAAAxG,GACM,iBAAzBwiG,EAAWxiG,KACpBwiG,EAAWxiG,GAAYk2S,EAAkB1zM,EAAWxiG,QAGnDwiG,EAAW3jG,OACd2jG,EAAW3jG,KAAO,UAAY49K,EAAkB,EAAI,IAAMA,EAAkB,EAAI,KAElF,IAAMr5D,GAAiB,IAAA5+G,yBAAwBg4K,GA0C/C,OAzCIh6E,EAAWrR,eACbqR,EAAWrR,aAAeqR,EAAWrR,aAAa/hF,QAAO,SAAA4zG,GACvD,SAAKA,EAAS+Y,SAAY/Y,EAASwoC,mBAAqBhqJ,SAASC,SAAS2b,aAG5C,QAA1BolF,EAAW5Q,aACkB,SAAvBoxB,EAASpqG,YAA0B5I,MAAMC,QAAQ+yG,EAASuoC,wBAC5DvoC,EAASuoC,qBAAqB1uJ,QAAUmmH,EAASuoC,qBAAqBhpJ,SAAS6gH,QAGtFlzG,KAAI,SAAA8yG,GA4BL,OA3BImzL,IAEFnzL,EAASiiJ,YAAcjiJ,EAAS6hJ,SAC5B7hJ,EAAS6hJ,SAASngQ,cAAcqC,QAAQ,KAAK,KAC7C,WAEoB,WAAtBi8G,EAASpgB,UAAyB5yF,MAAMC,QAAQ+yG,EAASooC,eAC3DpoC,EAASooC,YAAcpoC,EAASooC,YAAYh8I,QAAO,SAAAgnS,GAAA,OAAeA,EAAYt4E,YAEhFhhO,OAAOmc,KAAK+pG,GAAUx8G,SAAQ,SAAAxG,GACM,iBAAvBgjH,EAAShjH,KAClBgjH,EAAShjH,GAAYk2S,EAAkBlzL,EAAShjH,QAGpD,CAAC,mBAAoB,oBAAoBwG,SAAQ,SAAAxG,GAC3CgQ,MAAMC,QAAQ+yG,EAAShjH,KAAcgjH,EAAShjH,GAAUnD,SAC1DmmH,EAAShjH,GAAYgjH,EAAShjH,GAAUkQ,KAAI,SAAAw0G,GAO1C,OANIA,GAAiC,iBAApB,IAAOA,EAAP,0BAAOA,KAA0BA,EAASxzG,oBACzDwzG,EAASxzG,kBAAoBwzG,EAASxzG,kBACnCqU,OACA7gB,cACAqC,QAAQ,UAAW,KAEjB29G,SAIN1B,MAGJxgB,GAG4B6zM,EAAxBA,uBAAA,gCAAwB,WAAO5qS,EAASmN,GAAhB,wFAC7B0K,GAAS,IAAAC,sBACTyB,EAAe1B,EAAOo/F,2BAA2B9pG,IAFpB,oBAI3B09R,EAAgB7qS,EAAQyF,mBAC1B8T,EAAauJ,eAAiBvJ,EAAauJ,cAAc24F,mCAAqCovL,EALjE,yCAMxBtxR,EAAauJ,eANW,OAQ3B8+D,EAAW/pE,EAAOo9E,sBAAsB,CAAC98E,KAAMoB,GAAe,KAAM,IAAI,EAAO,OAC5EroB,EAAI,EAToB,YASjBA,EAAI0wF,EAASxwF,QATI,oBAU3BwwF,EAAS1wF,GAAGinB,KAAKsjG,mCAAqCovL,EAV3B,0CAWtBjpN,EAAS1wF,GAAGinB,MAXU,QASIjnB,IATJ,yCAetB,IAAA04J,+BAA8B5pJ,EAAQi/B,KAAOj/B,EAAQyF,kBAAmB8T,EAAeA,EAAatW,OAAS,IAfvF,4FAAxB,gD,8ECxEb,I,IAAA,O,IACA,Q,6DAIe,IAAI,WAEjB,IAAI6nS,EAAQnuS,KAEZA,KAAK1H,MAAQ,CACX66C,OAAQ,GACRi7P,IAAK,GACL1lJ,WAAY,MAGd1oJ,KAAKg2D,KAAO,WAIV79D,OAAOk2S,aAAe,WACpBruS,KAAK1H,MAAM66C,OAAS,GACpBnzC,KAAK1H,MAAMowJ,WAAa,OAU5B1oJ,KAAKsuS,gBAAkB,WACrB,OAAOH,EAAM71S,OAEf0H,KAAKiwD,eAAiB,WACpBk+O,EAAM71S,MAAM66C,OAAS,GACrB,UAAUgY,YAAY/sD,SAAQ,SAAUw7C,IACjCA,EAAMmc,iBAAkC,eAAfnc,EAAMxuC,MAAyBwuC,EAAM6R,WACjE7R,EAAMsM,MAAQ,GACdtM,EAAM6R,WAAWrtD,SAAQ,SAAU2wD,GACjCA,EAAKytI,qBAAuBztI,EAAKkrI,oBACjCrgJ,EAAMsM,MAAMnxD,KAAKg6D,OAGrBnV,EAAM0b,gBAAkB1b,EAAM0N,IAC9B6mP,EAAM71S,MAAM66C,OAAOp+C,KAAK6kD,MAG1Bu0P,EAAM71S,MAAMowJ,WAAavwJ,OAAOuwJ,YAElC1oJ,KAAK+3K,eAAiB,SAASq2H,GAC7BD,EAAM71S,MAAM81S,IAAMA,GAEpBpuS,KAAKuuS,yBAA2B,WAE9B,UAAU5gP,kBACVwgP,EAAM71S,MAAM66C,OAAO/0C,SAAQ,SAAU04D,GAC/BA,EAAS5Q,MACX,UAAUmQ,SAASS,EAAS5Q,MAAO4Q,EAASR,UAAWQ,EAASxB,gBAAiBwB,EAASxwD,OAAQwwD,EAASgtB,YAE3G,UAAUzzB,SACRyG,EAAS7C,aAAavF,MACtBoI,EAAS7C,aAAat0D,MACtBm3D,EAAS7C,aAAap0D,OACtBi3D,EAAS7C,aAAa3E,WACtBwH,EAAS7C,aAAakB,WACtB2B,EAAS7C,aAAa7oD,KACtB0rD,EAAS7C,aAAamB,QACtB0B,EAAS7C,aAAaoB,gBACtByB,EAASxB,oBAIf64O,EAAM71S,MAAM66C,OAAO/0C,SAAQ,SAAU04D,GAC9BA,EAAS5Q,OACZ4Q,EAAS7C,aAAaoB,qBAI1B3gE,OAAO+2B,OAAO0iR,EAAM71S,MAAMowJ,WAAYylJ,EAAM71S,MAAM81S,KAClDI,YAAYL,EAAM71S,MAAMowJ,YAAY,GACpCh6D,YAAW,WACTy/M,EAAM71S,MAAMowJ,WAAavwJ,OAAOuwJ,aAC/B,IAKL1oJ,KAAKyuS,uBAAyB,WAS5B,GANoB,UAAUtjP,YAMZ12D,SAAW05S,EAAM71S,MAAM66C,OAAO1+C,OAC9C,OAAO,EAGT,IAAIi6S,GAAgB,EAsBpB,OApBA,UAAUvjP,YAAY/sD,SAAQ,SAAUw7C,GAEtC,GAAIA,aAAiBA,EAAjBA,QAA4B,CAE9B,IAAI+0P,EAAeR,EAAM71S,MAAM66C,OAAOrnC,MAAK,SAAU8iS,GACnD,OAAOA,EAAmB5mS,KAAO4xC,EAAM5xC,MAGpC2mS,IACHD,GAAgB,GAGlB90P,EAAM6R,WAAWrtD,SAAQ,SAAU2wD,EAAMnhD,GACnC+gS,GAAgBA,EAAazoP,OAASyoP,EAAazoP,MAAMt4C,IAAUumG,KAAK2W,UAAU/7D,EAAKkrI,uBAAyB9lF,KAAK2W,UAAU6jL,EAAazoP,MAAMt4C,GAAO4uL,wBAC3JkyG,GAAgB,UAMjBA,IAAiB,K,yQC0PZG,kBAAT,SACLC,EACAC,EACAt0R,EACAtC,EACA5V,EACA+hH,EACAt3G,EACAvR,EACA4N,GAEA,IAAIy8K,EAjKwB,WAC5B,IAAIkpH,EAAkB,GACtB,IAAK,IAAMC,KAAX,gBACED,EAAgBC,GAAuB,CACrCvyR,QAAS,KACPilE,SAAU,IAIhB,OAAOqtN,EAwJYE,GAEnB,IAAKJ,IAAmBA,EAAexgP,YACrC,OAAOw3H,EAGT,IAAM5qK,GAAS,IAAAC,kBAAiB1f,GAS5B0zS,GAAyB,EACzB9rS,EAAU,KAGRuG,EADQ,UAAMzH,WACewH,cAAcC,qBAEjDlV,OAAOmc,KAAKi1K,GAAc1nL,SAAQ,SAAAkyG,GAChC,IAAM+7C,EAA6B,eAAd/7C,GAA4C,6BAAdA,EAC/C8+L,EAAiB,GAGrB,GAAI9+L,IAAc,EAAA7mG,cAAcC,OAAUE,EAA1C,CAGA,GAAIyiJ,EACF+iJ,EAAiBC,EAAgCP,EAAgB5zR,EAAQo1F,QACpE,GAAIA,IAAc,EAAA7mG,cAAcC,MACrC0lS,EAAiBE,EAA0BR,EAAexgC,0BACrD,GAAIh+J,IAAc,EAAA7mG,cAAcwwC,OAASq2D,IAAc,EAAA7mG,cAAcuwC,aAAc,CACxF,IAAIsc,SACJ,OAAQg6C,GACN,IAAK,QACHh6C,EAAY,OACd,MACA,IAAK,eACHA,EAAY,aACd,MACA,QACEA,EAAYg6C,EAKd8+L,EADEN,EAAe92H,gBACAu3H,EAAkCT,EAAgBx4O,EAAW84O,GAE7DI,EAA4BV,EAAgBx4O,EAAW84O,QAMjE9+L,IAAc,EAAA7mG,cAAcouC,cACrCu3P,EAAiBK,EAAqBX,EAAgBx+L,GAC7CA,IAAc,EAAA7mG,cAAcquC,QAAUg3P,EAAe9+O,aAAe8+O,EAAe9+O,YAAYhT,QACxGoyP,EAAiBM,EAAeZ,EAAe9+O,YAAYhT,QAASszD,GAC3D57G,OAAOyhB,OAAP,2BAAuChc,SAASm2G,GACzD8+L,EAAiBO,EAAwBb,EAAexgP,YAAagiD,GAC5DA,IAAc,EAAA7mG,cAAc4qC,OACrC+6P,EAAiBQ,EAAcd,EAAe3gC,MAAO79J,GAC5CA,IAAc,EAAA7mG,cAAc2qC,QACrCg7P,EAAiBS,EAAef,EAAe16P,QAASk8D,GAC/CA,IAAc,EAAA7mG,cAAcoxC,cAAgBi0P,EAAej0P,cAAgBi0P,EAAej0P,aAAai1P,SAChHV,EAAiBW,EAAoBjB,EAAej0P,aAAai1P,SAAUx/L,GAClEA,IAAc,EAAA7mG,cAAcswC,UAAY+0P,EAAe/0P,WAChEq1P,EAAiBN,EAAe/0P,UAG9Bq1P,GAAkBA,EAAe36S,QACnC26S,EAAehxS,SAAQ,SAAA4xS,GACrB,IAAMpzR,EAAeqzR,EAAuB3/L,EAAW0/L,EAAc1pS,OAAQ0G,GACzEkjS,GAAoB,EACpBx/R,EAAoB,GACxB,GAAIkM,EAAc,CACXkpK,EAAax1E,GAAW5zF,UAC3BopK,EAAax1E,GAAW5zF,QAAUE,GAEpC,IAAMzT,EAAWgnS,EAA0B7/L,EAAW0/L,EAAelB,GAC/D7lS,EAAmBmnS,EAA2B9/L,EAAW0/L,EAAelB,EAAgBvsS,EAAWyK,GALzF,EAO0DqjS,EACxEL,EACAjB,EACAnyR,EACA0zF,EACAtjG,EACAq/I,EACA/nC,EACA/hH,EACA2Y,EACAi0R,GAjBc,qBAOf9rS,EAPe,KAON6sS,EAPM,KAOaf,EAPb,KAOqCz+R,EAPrC,KAoBhB,IAAIqK,EAAsBu1F,IAAc,EAAA7mG,cAAcC,MAAQsmS,EAAc9yB,WAAa,KACrFpiQ,EAA8Bw1F,IAAc,EAAA7mG,cAAcC,MAAQ,EAAAD,cAAcC,MAAQ,KACtF4mS,EAAqBjtS,GAAWuZ,EAAapB,KAAKmmE,SAAS,GAC3D6sG,EAAc8hH,GAAqB,IAAA91R,gBAAe81R,EAAoB71R,EAAMtC,EAAgBhP,GAAY,GACxGwR,EAAO21F,IAAc,EAAA7mG,cAAcC,OAAQ,IAAAkP,aAAYo3R,EAAc9yB,WAAYziQ,GAAQ+zK,EAE/F,UAAiB18C,gBAAgBk+J,EAAchoS,GAAI3E,GACnDyiL,EAAax1E,GAAW3uB,SAAS5sF,KAAK,CACpC+tF,SAAUktN,EAAc/gP,oBAAqB,EAC7C5rD,UACAyX,8BACAxU,OAAQ0pS,EAAc1pS,OACtBqU,OACA+B,QAASE,EAETzT,SAAUA,EACVonS,gBAAiBnmS,KAAKkI,KAAKnJ,GAC3B4R,oBAAqBA,EACrB9R,mBACAunS,gBAAiBrnS,EACjB+vD,OAAQ82O,EAAchoS,GACtBqnD,UAAW2gP,EAAc3gP,UACzB6gP,oBACAx/R,oBACA07L,uBAAuDp5I,IAApCg9O,EAAc5jG,mBAAkC4jG,EAAc5jG,kBACjFr7D,qBAAsBi/J,EAAcj/J,4BAGtC/4I,QAAQ4B,IAAI,4CAA6C02G,EAAW0/L,EAAc1pS,eAMtFsD,GAAwB6mS,EAAwB3qH,KAClDA,EAAe4qH,EAAiB5qH,GAAc,GAC9C9tL,QAAQ4B,IAAI,eAAgByP,GAC5BrR,QAAQ4B,IAAI,+BAAgCue,EAAevS,gBAI7D,OADA5N,QAAQ4B,IAAI,eAAgBksL,GACrBA,GA1gBT,YAOA,QAQA,Q,IACA,M,IACA,O,IACA,OACA,QACA,S,mDASO,IAAMmqH,EAAyBA,EAAzBA,uBAAyB,SAAC3/L,EAAWhqG,GAA8B,IAAtB0G,EAAsB,uDAAT,KAC/DjG,EAAQ,UAAM5E,WACd2W,EAAS/R,EAAMmG,YAAY4L,OAC7BO,SACAuuK,SACJ,GAAmB,OAAf56K,GAAuB8L,EAAO9L,GAAYqM,KAAM,CAClD,IAAMo+J,EAAc3+J,EAAO9L,GAC3BqM,EAAOo+J,EAAYp+J,KACnBuuK,EAAiB9uK,EAAO9L,GAAYqiD,UAAYv2C,EAAO9L,GAAYqiD,UAAYq1H,EAAmB13K,GAEpG,IAAMkO,GAAS,IAAAC,kBAAiB9B,GAChC,IAAK6B,EACH,OAAO,KAGT,IAAI0B,EAAe,KACfsxM,EAAe5nN,EACnB,OAAQgqG,GACN,IAAK,eACH,IAAMmG,EAA2C,cAA9B,IAAAr6G,6BACnBwgB,EAAe1B,EAAO+a,2BAA2B,aAAc2xJ,GAAgB,KAC1DnxE,IACnB75F,EAAe1B,EAAO+a,2BAA2B,EAAAxsB,cAAc2wC,kBAAmBwtI,IAEpFsmC,EAAez3G,EAAa,EAAAhtG,cAAc2wC,kBAAoB,aAC9D,MAEF,IAAK,QACH,IAAMxkB,EAA2B,6BAAd06E,EAA2C,qBAAuB,eAC/Ez6E,EAAgC,uBAAfD,EAAsC,eAAiB,sBAC9EhZ,EAAe1B,EAAO+a,2BAA2BL,EAAYgyJ,MAE3DhrK,EAAe1B,EAAO+a,2BAA2BJ,EAAgB+xJ,IAEnEsmC,EAAet4L,EACf,MAEF,KAAK,EAAAnsB,cAAcC,MACjBkT,GAAe,IAAA3B,wBAaf,MAEF,IAAK,aACL,IAAK,2BACH,IAAM4a,EAA4B,6BAAXvvB,EAAwC,aAAe,4BAC9EsW,EAAe1B,EAAO+a,2BAA2B3vB,EAAQshL,MAEvDhrK,EAAe1B,EAAO+a,2BAA2BJ,EAAgB+xJ,IAEnE,MAEF,IAAK,WACHhrK,EAAe1B,EAAO+a,2BAA2B3vB,EAAQshL,MAEvDhrK,EAAe1B,EAAO+a,2BAA2B,SAAU2xJ,IAE7D,MAEF,QACEhrK,EAAe1B,EAAO+a,2BAA2B3vB,EAAQshL,GAG7D,IAAKhrK,EAAc,CACjB,IAAMu6J,EAAaj8J,EAAOgb,wBAAwBg4L,GAC9C/2C,IACFv6J,EAAe,CAACpB,KAAM27J,IAG1B,OAAOv6J,GAMI8nK,EAAqBA,EAArBA,mBAAqB,SAAC13K,GACjC,IAAMjG,EAAQ,UAAM5E,WACb2W,EAAU/R,EAAMmG,YAAhB4L,OACDX,EAAiBpR,EAAMpB,gBACvBpD,EAAYwE,EAAM3E,UAAUG,UAC5BkY,EAAO,UAAUA,KAEvB,OAAO,IAAA5B,aAAY7L,EAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,IAOnEs4R,EAA0BA,EAA1BA,wBAA0B,SAAC5qH,GACtC,IAAM8qH,EAAkBj8S,OAAOmc,KAAKg1K,GAAa5lL,MAAK,SAAAqwG,GACpD,SAAKu1E,EAAYv1E,KAAeu1E,EAAYv1E,GAAW3uB,WAGhDkkG,EAAYv1E,GAAW3uB,SAAS1hF,MAAK,SAAC8lL,GAC3C,GAAIA,EAAY1iL,SAAY,EAAA0C,iBAAkB,IAAAC,gBAAe+/K,EAAY1iL,QAAQM,WAAa,OAC1C,UAAMxB,WAAjDmH,EADqF,EACrFA,YAAa3D,EADwE,EACxEA,gBAAiBvD,EADuD,EACvDA,UAYrC,SATkB,IAAAO,oBAChBojL,EAAY1iL,QAAQM,UACpBoiL,EAAYyqH,gBACZlnS,EAAYD,aACZ1D,EAAgB4D,eAChB,EACA5D,EAAgB+B,SAChBtF,GAIJ,OAAO,QAGLwuS,EAAsB/qH,EAAYn8K,MAAMi4E,SAASltF,OAAS,EAEhE,OAAOk8S,GAAmBC,GAQfF,EAAmBA,EAAnBA,iBAAmB,SAACG,GAAkC,IAAtBC,EAAsB,wDAC3D/pS,EAAQ,UAAM5E,WACd2P,EAAqB/K,EAAMpB,gBAAgB+B,SAQjD,OANIoK,EAAmB6L,qBACDozR,EAA+BF,GAE/BG,EAA0BH,EAAYC,IAWjDE,EAA4BA,EAA5BA,0BAA4B,SAAClrH,GAAoC,IAAtBgrH,EAAsB,wDACxEG,EAA2BC,EAA4BprH,GAuC3D,OAtCImrH,EAAyBx8S,SAC3Bw8S,EAAyB7yS,SAAQ,SAAA+yS,GAC/BA,EAAarrH,aAAa1nL,SAAQ,SAAA2nL,GACN,UAAM5jL,WAAzBwD,gBACa2S,cACdw4R,IACEK,EAAaC,gBAAmBrrH,EAAY7sH,SAAWi4O,EAAaC,eAAel4O,OACrF6sH,EAAYsrH,UAAY,EAExBtrH,EAAYsrH,UAAY,IAK5BtrH,EAAYhrK,oBAAsBgrK,EAAYyqH,gBAC1CW,EAAaC,gBAAmBrrH,EAAY7sH,SAAWi4O,EAAaC,eAAel4O,QACrF6sH,EAAY58K,SAAWgoS,EAAapH,cAChC+G,IACF/qH,EAAYsrH,UAAY,GAE1BtrH,EAAYurH,kBAAmB,IAG/BvrH,EAAYwqH,gBAAkB,EAC9BxqH,EAAY58K,SAAW,EACvB48K,EAAYwrH,iCAAkC,EAC1CT,IACF/qH,EAAYsrH,UAAY,WAM9BP,IACFhrH,EAAe0rH,EAAiB1rH,KAGpC9tL,QAAQ4B,IAAI,2BAA4Bq3S,GACjCnrH,GAoBIirH,EAAiCA,EAAjCA,+BAAiC,SAACjrH,GAAoC,IAAtBgrH,EAAsB,wDAC7EG,EAA2BC,EAA4BprH,GAW3D,OAVImrH,EAAyBx8S,SAC3Bw8S,EAAyB7yS,SAAQ,SAAA+yS,GAC/BA,EAAeM,EAAiBN,EAAcL,GAC9CY,EAAoCP,MAElCL,IACFhrH,EAAe0rH,EAAiB1rH,KAGpC9tL,QAAQ4B,IAAI,2BAA4Bq3S,GACjCnrH,GAGH0rH,EAAmB,SAAC1rH,GAUxB,OATApxL,OAAOmc,KAAKi1K,GAAc1nL,SAAQ,SAAAkyG,GAC5Bw1E,EAAax1E,IACZw1E,EAAax1E,GAAW3uB,UACV,UAAd2uB,IAEHw1E,EAAax1E,GAAW3uB,SAAWmkG,EAAax1E,GAAW3uB,SAASj5E,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAEyoS,UAAY1oS,EAAE0oS,iBAIhGvrH,GAKHorH,EAA8B,SAACprH,GACnC,IAAImrH,EAA2B,GA8C/B,OA7CAv8S,OAAOmc,KAAKi1K,GAAc1nL,SAAQ,SAAAkyG,GAC5Bw1E,EAAax1E,IACZw1E,EAAax1E,GAAW3uB,UACV,UAAd2uB,GACc,UAAdA,GAEHw1E,EAAax1E,GAAW3uB,SAASvjF,SAAQ,SAAA2nL,GACvC,GAAIA,EAAY1iL,SAAWuE,MAAMC,QAAQk+K,EAAY1iL,QAAQM,UAAUuC,iBAClE6/K,EAAY1iL,QAAQM,UAAUuC,eAAezR,OAAQ,CACxD,IAAMk9S,EAAeV,EAAyBnlS,MAAK,SAAAqlS,GACjD,OAAOA,EAAaS,aAAe7rH,EAAY1iL,QAAQM,UAAUmF,qBAE9D6oS,GAQHA,EAAa7rH,aAAa/wL,KAAKgxL,GAC1BA,EAAYjjG,WACf6uN,EAAa5H,eAAiBhkH,EAAYyqH,gBACrCmB,EAAaP,eAEwB,eAA/BrrH,EAAY1iL,QAAQiD,QACc,eAAvCqrS,EAAaP,eAAe9qS,QAA4BqrS,EAAaP,eAAeZ,gBAAkBzqH,EAAYyqH,mBACpHmB,EAAaP,eAAiBrrH,GAEQ,6BAA/BA,EAAY1iL,QAAQiD,QACe,eAAvCqrS,EAAaP,eAAe9qS,QAAkE,6BAAvCqrS,EAAaP,eAAe9qS,QAC3C,6BAAvCqrS,EAAaP,eAAe9qS,QAAyCqrS,EAAaP,eAAeZ,gBAAkBzqH,EAAYyqH,mBACnImB,EAAaP,eAAiBrrH,GAEiB,eAAvC4rH,EAAaP,eAAe9qS,QAAoE,6BAAvCqrS,EAAaP,eAAe9qS,QAC5FqrS,EAAaP,eAAeZ,gBAAkBzqH,EAAYyqH,kBAC7DmB,EAAaP,eAAiBrrH,GAZ9B4rH,EAAaP,eAAiBrrH,IAXlCkrH,EAAyBl8S,KAAK,CAC5B68S,WAAY7rH,EAAY1iL,QAAQM,UAAUmF,kBAC1CihS,cAAehkH,EAAYjjG,SAAW,EAAIijG,EAAYyqH,gBACtD1qH,aAAc,CAACC,GACfqrH,eAAgBrrH,EAAYjjG,SAAW,KAAOijG,WA4BnDkrH,GAOHS,EAAsC,SAACP,GAC3C,IAAMU,EAAqBV,EAAapH,cAAgBoH,EAAarrH,aAAarxL,OAYlF,OAXA08S,EAAarrH,aAAa1nL,SAAQ,SAAA2nL,GACN,UAAM5jL,WAAzBwD,gBACc2S,gBACnBytK,EAAY9vK,MAAQ,CAClB47R,mBAAoBA,EACpBC,qBAAsBX,EAAarrH,aAAa9+K,QAAO,SAAA++K,GAAA,OAAgBA,EAAYjjG,YAAUruF,OAC7Fs1S,cAAeoH,EAAapH,mBAK3BoH,GASHM,EAAmB,SAACN,EAAcL,GAWtC,OAVAK,EAAarrH,aAAa1nL,SAAQ,SAAA2nL,GAC5B+qH,IACEK,EAAaC,gBAAmBrrH,EAAY7sH,SAAWi4O,EAAaC,eAAel4O,OACrF6sH,EAAYsrH,UAAY,EAExBtrH,EAAYsrH,UAAY,MAKvBF,GA6KT,IAAM7B,EAA4B,SAACyC,GACjC,IAAI3C,EAAiB,GAYrB,OAXA2C,EACG3zS,SAAQ,SAAA4zS,GACP,IAAM7oS,EAAWiB,KAAKkI,KAAK0/R,EAAgBv4N,WAC3C21N,EAAer6S,KAAKL,OAAO+2B,QAAP,gBAAkBumR,GAAkB,CACtD1rS,OAAQ,EAAAmD,cAAcC,MACtBk6G,WAAYz6G,EACZ8hM,aAAc+mG,EAAgB/mG,aAC9Bl6D,qBAAsBihK,EAAgBjhK,2BAIrCq+J,GAUHC,EAAkC,SAACP,EAAgB5zR,EAAQo1F,GAC/D,IAAM+lK,EAAkBn7P,EAAO+a,2BAA2B,cACpDg8Q,EAAoB/2R,EAAO+a,2BAA2B,4BACxDm5Q,EAAiB,GA0BrB,OAzBIN,EAAe92H,gBACjBo3H,EAAiBN,EAAexgP,YAC7BtnD,QAAO,SAAAkrS,GAAA,OAAuBA,EAAoB5rS,SAAWgqG,KAC7DxoG,KAAI,SAAAoqS,GACH,MAAO,CACLlqS,GAAIkqS,EAAoBlqS,GACxB47G,WAAYsuL,EAAoBr0P,KAChCv3C,OAAQ4rS,EAAoB5rS,WAGzBwoS,EAAexgP,aAAewgP,EAAexgP,YAAY75D,SAClE26S,EAAiBN,EAAexgP,YAAYtnD,QAAO,SAAA4yC,GASjD,MARqB,eAAjBA,EAAMtzC,QAA4C,6BAAjBszC,EAAMtzC,SACrC+vQ,IAAoB47B,EACtBr4P,EAAMtzC,OAAS+vQ,EAAgB76P,KAAKlV,OAC3B2rS,IAAsB57B,IAC/Bz8N,EAAMtzC,OAAS2rS,EAAkBz2R,KAAKlV,SAInCszC,EAAM0c,WAAc1c,EAAMtzC,SAAWgqG,IACtC,CAAC,aAAc,EAAA/gE,cAAckB,UAAW,EAAAlB,cAAcqB,iBAAiBz2C,SAASy/C,EAAMxuC,UAIzFgkS,GASHO,EAA0B,SAACwC,EAA2B7hM,GAC1D,OAAO6hM,EACJnrS,QAAO,SAAAkrS,GAAA,OAAuBA,EAAoB5rS,SAAWgqG,KAC7DxoG,KAAI,SAAAoqS,GACH,MAAO,CACLlqS,GAAIkqS,EAAoBlqS,GACxB47G,WAAYsuL,EAAoBtuL,WAChCt9G,OAAQ4rS,EAAoB5rS,OAC5B+oD,UAAW6iP,EAAoB7iP,UAC/BD,UAAW8iP,EAAoB9iP,eAUjCwgP,EAAgB,SAACwC,GACrB,OAAOA,EACJprS,QAAO,SAAAqrS,GAAA,OAA2C,OAA3BA,EAAajjP,aACpCtnD,KAAI,SAAAuqS,GACH,MAAO,CACLrqS,GAAIqqS,EAAarqS,GACjBqnD,UAAWgjP,EAAahjP,UACxB/oD,OAAQ,EAAAmD,cAAc4qC,OACtB+a,UAAWijP,EAAajjP,UACxBjmD,SAAU,OAWZumS,EAAiB,SAAC4C,EAAuBhiM,GAC7C,OAAOgiM,EACJtrS,QAAO,SAAAurS,GAAA,OAA6C,OAA5BA,EAAcnjP,aACtCtnD,KAAI,SAAAuqS,GACH,MAAO,CACLrqS,GAAIqqS,EAAarqS,GACjBqnD,UAAWgjP,EAAahjP,UACxB/oD,OAAQgqG,EACRlhD,UAAWijP,EAAajjP,UACxBjmD,SAAU,OAUZ0mS,EAAiB,SAACuC,GACtB,OAAOA,EACJprS,QAAO,SAAAqrS,GAAA,OAA2C,OAA3BA,EAAajjP,aACpCtnD,KAAI,SAAAuqS,GACH,MAAO,CACLrqS,GAAIqqS,EAAarqS,GACjBqnD,UAAWgjP,EAAahjP,UACxB/oD,OAAQ,EAAAmD,cAAc2qC,QACtBgb,UAAWijP,EAAajjP,UACxBjmD,SAAU,OAUZ4mS,EAAsB,SAACyC,GAC3B,OAAOA,EAEJ1qS,KAAI,SAAA2qS,GACH,MAAO,CACLzqS,GAAIyqS,EAAWzqS,GACf1B,OAAQ,EAAAmD,cAAcoxC,aACtBuU,UAAWqjP,EAAWrjP,UACtBC,UAAWojP,EAAWpjP,UACtBlmD,SAAUspS,EAAWtpS,cAYvBgnS,EAA4B,SAAC7/L,EAAW0/L,EAAelB,GAC3D,IAAI3lS,SACJ,OAAQmnG,GACN,IAAK,QACL,IAAK,eACL,KAAK,EAAA7mG,cAAcouC,cACjB1uC,EAAW2lS,EAAeliS,cAAgB,EAAAyjC,cAAcC,UAChD0/P,EAAcv7S,OAAQqQ,QAAQ,IAAIA,QAAQ,GAC9CkrS,EAAcv7S,OAClB,MACF,KAAK,EAAAgV,cAAc4qC,OACnB,KAAK,EAAA5qC,cAAc2qC,QACnB,KAAK,EAAA3qC,cAAcquC,OACnB,KAAK,EAAAruC,cAAcoxC,aACjB1xC,EAAW6mS,EAAc7mS,SACzB,MACF,IAAK,aACL,IAAK,2BACL,IAAK,QACHA,EAAW6mS,EAAcpsL,WACzB,MACF,QAEIz6G,EADEzU,OAAOmc,KAAP,qBAA+B1W,SAASm2G,GAC/B0/L,EAAcpsL,WAEdosL,EAAc7mS,SAAW6mS,EAAc7mS,SAAW6mS,EAAcpsL,WAIjF,OAAOz6G,GAUHqmS,EAA8B,SAACV,EAAgBx4O,EAAW84O,GAgB9D,OAfAN,EAAexgP,YACZtnD,QAAO,SAAA4yC,GAAA,OAASA,EAAMxuC,OAASkrD,KAC/Bl4D,SAAQ,SAAAoyC,GACP,IAAM/7C,EAAS+7C,EAAK/7C,QAAU+7C,EAAKozE,WACjCwrL,EAAer6S,KAAKL,OAAO+2B,OACzB+kB,EAAM,CACNlqC,OAAQkqC,EAAKlqC,QAAUgwD,EACvB5lD,kBAAmB8/B,EAAK9/B,kBACxBjc,OAAQA,EACR46D,UAAW7e,EAAK6e,UAChBD,UAAW5e,EAAKqmJ,oBAAsBrmJ,EAAKqmJ,oBAAsBrmJ,EAAK4e,UACtEg9I,uBAA8Cp5I,IAA3BxiB,EAAK47J,mBAAkC57J,EAAK47J,wBAIhEgjG,GASHK,EAAuB,SAACX,EAAgBx4O,GAC5C,IAAM84O,EAAiB,GAavB,OAZAN,EAAexgP,YACZtnD,QAAO,SAAA4yC,GAAA,OAASA,EAAMxuC,OAASkrD,KAC/Bl4D,SAAQ,SAAA+zK,GACP,IAAM19K,EAAS09K,EAAa19K,QAAU09K,EAAavuD,WACjDwrL,EAAer6S,KAAKL,OAAO+2B,OACzB0mJ,EAAc,CACd7rK,OAAQ6rK,EAAa7rK,QAAUgwD,EAC/B7hE,OAAQA,EACR46D,UAAW8iH,EAAa9iH,gBAIzB+/O,GAUHG,EAAoC,SAACT,EAAgBx4O,EAAW84O,GACpE,IAAIsD,EAAW,GACf,OAAQp8O,GACN,IAAK,OACHo8O,EAAW5D,EAAe70P,MAC1B,MACF,IAAK,aACHy4P,EAAW5D,EAAe90P,aAgB9B,OAbA04P,EACGt0S,SAAQ,SAAAoyC,GACP,IAAMmiQ,EAAaniQ,EAAK/7C,OAClBk9S,EAAevC,EAAetjS,MAAK,SAAA8mS,GACvC,OAAOA,EAAU18O,oBAAuB08O,EAAUxjP,YAAc5e,EAAK4e,aAEnEuiP,EACFA,EAAal9S,QAAUk+S,EAEvBvD,EAAer6S,KAAKL,OAAO+2B,OAAO+kB,EAAM,CAAC4e,UAAW5e,EAAK4e,UAAW9oD,OAAQkqC,EAAKlqC,OAAQ7R,OAAQk+S,QAIhGvD,GAaHgB,EAA6B,SAAC9/L,EAAW0/L,EAAelB,EAAgBvsS,EAAWyK,GACvF,IAAI6lS,SAEJ,GAAI,EAAA12P,oCAAoCm0D,GAAY,CAClD,IAAMwiM,EAAuBvwS,EAAUuJ,MAAK,SAAA1F,GACxC,OAAQA,EAAS8yD,QAAY9yD,EAASE,SAAW,EAAAmD,cAAcC,OAAWtD,EAASoC,eAAiBwE,KAExG,GAAI8hS,EAAexgC,oBAAoB75Q,OAAS,GAAKq+S,EAC1BhE,EAAexgC,oBAAoBruQ,MAAK,SAAA8yS,GAAA,OAAuBA,EAAmB9jP,uBAEzG4jP,EAAY,QAIPviM,IAAc,EAAA7mG,cAAcC,OACjCsmS,EAAc/kG,eAChB4nG,EAAY7pS,WAAWgnS,EAAc/kG,cAAgBklG,EAA0B7/L,EAAW0/L,EAAelB,IAI7G,OAAO+D,GAsEHxC,EAAqB,SACzBL,EACAjB,EACAnyR,EACA0zF,EACArjG,EACAo/I,EACA/nC,EACA/hH,EACA2Y,EACAi0R,GAEA,IAAIe,GAAoB,EAClB8C,EAA6BjE,EAA4BjjS,MAAK,SAAAgwL,GAClE,OAAOk0G,EAAchoS,IAAO8zL,EAAS5iI,SAAW82O,EAAchoS,IAAQ8zL,EAAStzL,eAAiByE,KAE9F5J,EA3EmC,SAAC2sS,EAAe1/L,EAAW1zF,EAAc1B,GAChF,IAAI7X,EAAU,KACV4vS,EAAW,KACf,OAAQ3iM,GACN,IAAK,QACL,IAAK,eACL,IAAK,aACL,IAAK,2BACL,IAAK,QACL,KAAK,EAAA/gE,cAAcqB,gBACjBqiQ,GAAYjD,EAAc5gP,UAC1B,MACF,QACE6jP,EAAWjD,EAAc5gP,UAAY4gP,EAAc5gP,UAAW,KAElE,GAAI6jP,EAAU,CAEZ,KADA5vS,EAAU6X,EAAOo2F,eAAe2hM,GAAU,KAC1BjD,EAAcv1I,iBAAkB,CAC9C,IAAMy4I,EAAyBh4R,EAAOgb,wBAAwB85Q,EAAcv1I,kBACxEy4I,IACF7vS,EAAU6vS,EAAuB5hM,eAAe0+L,EAAc5gP,WAAW,IAG7E,IAAK/rD,GAAW2sS,EAAc1pS,OAAQ,CACpC,IAAM4sS,EAAyBh4R,EAAOgb,wBAAwB85Q,EAAc1pS,QACxE4sS,IACF7vS,EAAU6vS,EAAuB5hM,eAAe0+L,EAAc5gP,WAAW,KAe/E,OAAO/rD,EAkCO8vS,CAAiCnD,EAAe1/L,EAAW1zF,EAAc1B,GAEvF,GAAI3Y,EAAU9N,SAAW4O,EAAS,CAChC,IAAMsuS,EAAepvS,EAAUuJ,MAAK,SAAA1F,GAClC,OAAQA,EAAS8yD,QAAY9yD,EAAS8yD,SAAW82O,EAAchoS,IAAQ5B,EAASoC,eAAiByE,KAE9D0kS,GAAgB/0R,EAAapB,KAAKlV,SAAWqrS,EAAatrS,YAAYC,SAEzGjD,EAAUsuS,EAAatrS,aAI3B,IAAM+sS,EAA0CJ,GAA8BA,EAA2B1sS,SAAWsW,EAAapB,KAAKlV,QACjIjD,GAAW+vS,IACd/vS,EAAU2vS,EAA2B3vS,SAElCA,IAAYgpJ,GAA8B,iBAAd/7C,IAAiCgU,GAC5DA,EAAgBj+G,YAAYC,SAAWsW,EAAapB,KAAKlV,SAC7DjD,EAAUihH,EAAgBj+G,YACrB8oS,IACHe,GAAoB,GAEtBf,GAAyB,GAG3B,IA9BG,EA8BW,UAAMhtS,WAC6BwO,YAA1CC,EA/BJ,EA+BIA,iBAAkBuZ,EA/BtB,EA+BsBA,eAErBzZ,EAAoBs/R,EAAct/R,kBAEtC,IAAKA,GAAqByZ,GAAkBvZ,EAAkB,CAC5D,IAAMgM,EAAe1B,EAAOgb,wBAAwB85Q,EAAc1pS,QAClE,GAAIsW,EAAc,CAChB,IAAM6N,GAAc,IAAAkuJ,8BAA6B/7J,EAAahB,QAAUgB,EAAaf,UACjF4O,EAAYh2B,SAGdic,EAAoB+Z,EAAY,GAAGU,WAAW,GAAGnjB,KAKvD,IAAM4wK,EAAcloK,GAChB,IAAA8uH,0BAAyB5iH,EAAc,GAAI,GAAIlM,GAC/CwK,EAAOo9E,sBAAsB17E,EAAc,GAAI,IAAI,GAAO,GAI9D,IAAKvZ,GAAWihH,IACE,iBAAdhU,GAAiCgU,EAAgBj+G,YAAYC,OAAOnM,SAAS,eAC3EkyJ,GAAgB/nC,EAAgBj+G,YAAYC,OAAOnM,SAAS,eAC5DkyJ,GAAgB/nC,EAAgBj+G,YAAYC,OAAOnM,SAAS,eAC3DyiB,EAAapB,KAAKlV,SAAWg+G,EAAgBj+G,YAAYC,QAC7D,CACD,IAAMy6E,EAAQujC,EAAgBj+G,YAAYoZ,yBACpCE,EAAUi5J,EAAY9sK,MAAK,SAAA6T,GAC/B,OAAOA,EAAQnE,KAAKiE,2BAA6BshE,KAE/CphE,IACFtc,EAAUsc,EAAQnE,MAQtB,GALKnY,IAAWuZ,EAAapB,KAAK2K,eAAmBzV,IAAqBkoK,EAAY34K,MAAK,SAAA0f,GACzF,OAAOA,EAAQnE,KAAK7X,UAAUmF,oBAAsB8T,EAAapB,KAAK2K,cAAcxiB,UAAUmF,uBAE9FzF,EAAUuZ,EAAapB,KAAK2K,gBAEzB9iB,GAAW2sS,EAAc5gP,UAAW,CAEvC,IACMikP,EADen4R,EAAOo9E,sBAAsB17E,EAAc,GAAI,IAAI,EAAO,MAAO,GAAI,CAAC6nE,mBAAmB,IAC5E34E,MAAK,SAAA48H,GAAA,OAASA,EAAMltH,KAAK7X,UAAUqE,KAAOgoS,EAAc5gP,aACtFikP,IACFhwS,EAAUgwS,EAAa73R,MAO3B,OAJKnY,GAAWu1K,EAAYnkL,SAC1B4O,EAAUu1K,EAAY,GAAGp9J,MAGpB,CAACnY,EAAS6sS,EAAmBf,EAAwBa,EAAct/R,qB,yGCt+B5E,I,EAAA,OACA,O,oCACA,OAEA,IAAM4iS,EAAiB,SAAChoM,GAAU,IAEzBs8E,EAAwCt8E,EAAxCs8E,eAAgBntK,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAE7B,OAAOwsK,EAAkBiD,EAAgBntK,EAAMtC,IAGjDm7R,EAAepxJ,UAAY,CACzB0lC,eAAgB,UAAUplJ,Q,WAWb,IAAAulH,aACb,IAAAj8C,UATsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAIC,GAGzB,CAA6C2tS,IAGxC,IAAM3uH,EAAoBA,EAApBA,kBAAoB,SAACiD,EAAgBntK,EAAMtC,GACtD,IAAKA,EAAeE,SAAWF,EAAeG,gBAAkBmC,EAAK1C,SAAU,CAC7E,GAAoB,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,iCAAmC6vK,GAC9E,OAAOntK,EAAKC,cAAc,CAAC1S,GAAI,iCAAoC4/K,IAC9D,GAAoB,UAAhBntK,EAAKvC,QAAsBuC,EAAK1C,SAAS,mCAAqC6vK,GACvF,OAAOntK,EAAKC,cAAc,CAAC1S,GAAI,mCAAsC4/K,IAIzE,OAAOA,I,sICnCT,IAAYpnK,E,wJAAZ,OAEwC+yR,EAA3BA,yBAA2B,SAAC9gG,GAAD,MAA4B,CAClErnM,KAAMoV,EAAM6iD,4BACZxiD,QAAS,CAAC4xL,2BAGsBvxB,EAArBA,mBAAqB,iBAAO,CACvC91K,KAAMoV,EAAM8iD,wB,iGCTd,O,IAEA,O,IACA,OACA,QAOA,Q,OAEA,S,IACA,Q,IACA,MACA,Q,IAEA,QACA,Q,OACA,QACA,SACA,SAEA,U,6DAwee,IAheE,WAAW,WACtBv8D,EAAQ,CACRysS,gBAAgB,EAChBC,YAAa,GACbznN,WAAY,GACZ0nN,iBAAkB,KAClBC,iBAAiB,EACjBn5O,UAAW,EACXg4F,UAAW,UAAa,UAAWxuJ,aAAa6wH,QAChD++K,aAAc,UAAa,UAAW5vS,aAAa6wH,QACnD32C,cAAe,GACf21N,SAAU,EAAAl6P,eAAeC,MACzBk6P,iBAAiB,EACjBC,oBAAqB,GACrBpjB,gBAAiB,IAGrB3wR,KAAKg0S,wBAA0B,KAC/Bh0S,KAAKs8C,UAAY,EACjBt8C,KAAKw0C,MAAQ,EACbx0C,KAAKmC,SAAW,kBAAM4E,GAEtB,IAAM4hD,EAAc,SAACP,EAAUjyD,GAGzB4Q,EAAM0sS,YAAYh/S,OAAS,IAC7BsS,EAAM4sS,iBAAkB,EAEnB5sS,EAAM2sS,kBACT,EAAKO,yBAEP,EAAKC,iCAAiC9rP,IAGpCrhD,EAAMgtS,oBAAoBt/S,QAAU,IACtCsS,EAAMgtS,oBAAsB,KAI1B7yM,EAAY,SAACC,EAAMhrG,GACvB,GAAIgC,OAAOkwD,iBACT,OAAO,EAGT,IAAI,IAAA8rP,iBAAgBh+S,GAAI,CACtB,IAAMyiS,EAAW7xR,EAAMgtS,oBAAsB59S,EAAEqB,IAO/C,OALiB,OAAbohS,IACF7xR,EAAMgtS,oBAAsBnb,EAC5B7xR,EAAM2sS,iBAAiBx8S,MAAQ0hS,GAEjC5gS,QAAQ4B,IAAI,sBAAuBmN,EAAMgtS,sBAClC,EAGT,OAAI,IAAAK,oBAAmBj+S,KAAM,IAAAk+S,iBAAgBl+S,IAC3C4Q,EAAMgtS,oBAAsBhtS,EAAMgtS,oBAAoB17S,MAAM,GAAI,GAChE0O,EAAM2sS,iBAAiBx8S,MAAQ,UAAW0V,cAAgB,EAAAyjC,cAAcC,QACpE,IAAAkmC,YAAWzvE,EAAMgtS,qBACjBhtS,EAAMgtS,oBACV/7S,QAAQ4B,IAAI,sBAAuBmN,EAAMgtS,sBAClC,IAGL5yM,IAAS,UAAalC,QAAQC,OAASiC,IAAS,UAAalC,QAAQE,cACnEp4F,EAAM0sS,YAAYh/S,OAAS,GAAKsS,EAAMgtS,oBACxC,EAAKO,sCAELvtS,EAAMysS,gBAAiB,EACvB,EAAK9qF,gBAIF,IAGHvgK,EAAc,SAACC,GAYnB,GANArhD,EAAMgtS,oBAAsB,GACT,UAAM5xS,WACOytD,cAAci4C,eAIzB,EAAA5yD,mCAAmCM,KAEtD,OADA,EAAKg/P,SAASnsP,IACP,GAILI,EAAY,SAACJ,KA0BnBpoD,KAAKs0S,mCAAqC,WACxC,IAAMlsP,EAAW,UAAiB+jC,cAC5BqoN,EAAYztS,EAAM0sS,YAAY1sS,EAAM0sS,YAAYh/S,OAAS,GAC3DgyD,GAAW,IAAA+3B,gCAA+Bz3E,EAAMgtS,qBACpDttP,EAAkC,aAAvB,UAAO75C,YAA6B65C,GAAW,IAAA+vB,YAAW/vB,GACrE,IAAIymL,SAEFA,EADEnmO,EAAM+sS,iBAAmB,EAAKW,gBACrB,IAAAvU,gBAAesU,EAAWpsP,EAAUrhD,EAAM4pR,kBAE1C,IAAAoP,kBAAiB33O,GAI9B,IAAMssP,GAAgB,IAAApjO,kBAAiB47J,EAAUsnE,GAC3CG,GAAqB,IAAAz4N,mBAAkBgxJ,EAAUsnE,EAAW/tP,EAAWiuP,GAC7ExnE,EAASriL,YAAY8pP,GACrB,EAAKC,UAAUxsP,EAAU8kL,IAG3BltO,KAAKk0S,iCAAmC,SAAC9rP,GACvC,GAAIrhD,EAAM0sS,YAAYh/S,OAAS,EAAG,CAChC,IAAMogT,GAAc,IAAAhgO,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GAC3Dm6R,EAAYztS,EAAM0sS,YAAY1sS,EAAM0sS,YAAYh/S,OAAS,GACzDgyD,GAAW,IAAA6qB,kBAAiBujO,EAAaL,GACzCnwH,EAAa,UAAMliL,WACnB8mG,EAAkBo7E,EAAWz0H,cAAcq5C,gBAC3CpB,EAAew8E,EAAWz0H,cAAci4C,aAC1Cj1B,SAEJ,GAAIq2B,GAAmBpB,IAAiB,EAAA5yD,mCAAmCM,KAAM,CAC/E,IAAMu/P,GAAiB,IAAA7U,iBAAgBuU,GACjCO,GAAmB,IAAAlgO,yBAAwBigO,EAAe16R,EAAG06R,EAAez6R,GAClFu4D,GAAW,IAAAZ,aAAY+iO,EAAkBP,GACzCztS,EAAM2sS,iBAAiBpsP,IAAIm0E,cAAcJ,QAAU05K,MAC9C,CACL,GAAIhuS,EAAM+sS,gBAAiB,CACzB,IAAMgB,GAAiB,IAAA7U,iBAAgBuU,EAAWztS,EAAM4pR,iBAClDokB,GAAmB,IAAAlgO,yBAAwBigO,EAAe16R,EAAG06R,EAAez6R,GAClFu4D,GAAW,IAAAZ,aAAY+iO,EAAkBP,QAEzC5hO,GAAW,IAAAZ,aAAY6iO,EAAaL,GAGtCztS,EAAM2sS,iBAAiBpsP,IAAIm0E,cAAcJ,SAAU,IAAAxmD,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GAElGtT,EAAM2sS,iBAAiBpsP,IAAIm0E,cAAcL,UAAYo5K,EACrDztS,EAAM2sS,iBAAiBpsP,IAAIltC,EAAIw4D,EAASx4D,EACxCrT,EAAM2sS,iBAAiBpsP,IAAIjtC,EAAIu4D,EAASv4D,EACxCtT,EAAM2sS,iBAAiBx8S,MAAQ,UAAW0V,cAAgB,EAAAyjC,cAAcC,QAAS,IAAA+mC,YAAW5wB,GAAYA,IAO5GzmD,KAAKg2D,KAAO,WACLjvD,EAAMiuS,WACTjuS,EAAMiuS,UAAW,EACjBh1S,KAAKi0S,yBACLj0S,KAAKizP,mBAITjzP,KAAKi0S,uBAAyB,WAC5BltS,EAAM2sS,iBAAmB,IAAI,EAAJ,QACvB,EACA,CAACt5R,EAAG,EAAGC,EAAG,GACV,CAACqhH,yBAAyB,EAAMC,UAAU,GAHnB,UAKvBnqH,YACA,IAIJxR,KAAKizP,eAAiB,WACpB,UAAax5L,SACX,UAAaC,OAAOM,OACpB,EAAKC,OACL,EACA,UAAaL,WAAWikC,OAE1B,UAAapkC,SACX,UAAaC,OAAOI,WACpB3R,EACA,EACA,UAAayR,WAAWmkC,MAE1B,UAAatkC,SACX,UAAaC,OAAOC,WACpBhR,EACA,EACA,UAAaiR,WAAW2jC,OAE1B,UAAa9jC,SACX,UAAaC,OAAOK,SACpBvR,EACA,EACA,UAAaoR,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOolC,QACpBoC,EACA,EACA,UAAatnC,WAAWojC,UAI5Bh9F,KAAKw1D,KAAO,SAASr/D,GACfA,IACFA,EAAE40F,iBACF50F,EAAE20F,oBAIN9qF,KAAK+3D,iBAAmB,WACtB,UAAa9O,YAAY,GACzB,UAAa26C,YAAY,GACzB78F,EAAMiuS,UAAW,GAGnBh1S,KAAKq4D,QAAU,SAACuyG,EAASxnE,GACnBA,GACF,UAAaQ,YAAY,EAAM,UAAalqC,OAAOM,QACnD,EAAK05L,0BAA2B,GAEhC,EAAK37L,mBAEP,EAAKvC,QAaPx1D,KAAKy0S,aAAe,WAClB,OAAO1tS,EAAM0sS,YAAYh/S,QAAU,GAGrCuL,KAAKi1S,2BAA6B,SAACjpP,GACjC,OAAIjlD,EAAM0sS,YAAYh/S,OAAS,IAGd,IAAA68E,kBAAiBtlB,EAAOjlD,EAAM0sS,YAAY1sS,EAAM0sS,YAAYh/S,OAAS,IA9QtD,GAkRlCuL,KAAKk1S,mCAAqC,SAAC9sP,GACzC,IAAM6uN,GAAkB,IAAApiM,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GACrE,OAAO,EAAK46R,2BAA2Bh+B,IAEzCj3Q,KAAKi1S,2BAA6B,SAACjpP,GACjC,OAAIjlD,EAAM0sS,YAAYh/S,OAAS,IAGd,IAAA68E,kBAAiBtlB,EAAOjlD,EAAM0sS,YAAY1sS,EAAM0sS,YAAYh/S,OAAS,IA1RtD,GA+RlCuL,KAAK+oN,SAAW,SAAC+qF,GACf/sS,EAAM+sS,gBAAkBA,GAG1B9zS,KAAKgpN,UAAY,SAAC5gK,GAChB,GAvCOrhD,EAAM0sS,YAAYh/S,OAAS,GAAKsS,EAAM0sS,YAAY,GAAG56K,eAAes6G,OAAO9pB,QAAQh+J,aAwCxF,EAAKq9J,iBADP,CAKA,IAAI18J,SACJ,GAAIjlD,EAAM+sS,iBAAmB,EAAKW,eAAgB,CAChD,IAAMD,EAAYztS,EAAM0sS,YAAY1sS,EAAM0sS,YAAYh/S,OAAS,GAC/Du3D,GAAQ,IAAAk0O,gBAAesU,EAAWpsP,EAAUrhD,EAAM4pR,sBAElD3kO,GAAQ,IAAA+zO,kBAAiB33O,GAG3B,EAAKwsP,UAAUxsP,EAAU4D,KAG3BhsD,KAAKu0S,SAAW,SAACnsP,GAKf,GAJArhD,EAAMyzD,UAAY,GAClBzzD,EAAMyrJ,UAAY,EAAA9mD,OAAO6oB,KACzBxtH,EAAM6sS,aAAe,EAAAloM,OAAOgpB,MAC5B3tH,EAAM8sS,SAAW,EAAAl6P,eAAepE,KArDI,IAA7BxuC,EAAM0sS,YAAYh/S,OAsDO,CAC9B,IAAM0gT,GAAkB,IAAAC,oBAAmBruS,EAAM0sS,YAAY,GAAIrrP,EAAUrhD,EAAM4pR,iBACjF,EAAKikB,UAAUxsP,EAAU+sP,GACzB,EAAKzsF,iBACA,CACL,IAAM2sF,GAAY,IAAAC,cAAaltP,GAC/B,EAAKwsP,UAAUxsP,EAAUitP,KAI7Br1S,KAAK40S,UAAY,SAACxsP,EAAUk4O,IACtBv5R,EAAMysS,gBAAmB,EAAK0B,mCAAmC9sP,KAIjErhD,EAAM0sS,YAAYh/S,OAAS,GAC7B,EAAK8gT,kBAAkBjV,GAEzBv5R,EAAM0sS,YAAY1+S,KAAKurS,GACvBv5R,EAAM2sS,kBAAmB3sS,EAAM2sS,iBAAiBr7O,UAChDtxD,EAAM2sS,iBAAmB,OAG3B1zS,KAAKu1S,kBAAoB,SAACl6K,GAExB,IAAMD,EAAYr0H,EAAM0sS,YAAY1sS,EAAM0sS,YAAYh/S,OAAS,GACzD+jS,GAAa,IAAAr9J,yBAAwBC,EAAWC,EAAnC,UAAuD,EAAKk8J,iCAE/ExwR,EAAMilF,WAAWj3F,KAAKyjS,IAGxBx4R,KAAKu3R,gCAAkC,SAACrgS,EAAOshS,GAC7CthS,EAAQkT,KAAK2nE,SAAS76E,EAAQ,UAAO8rD,wBAAyB,GAC9D,IAAIqwM,EAAiBmlC,EAAWj/R,OAE5Bk/R,EADkBplC,EAAeO,cACA9nP,MAAK,SAAAigM,GAAA,OAAOA,EAAIt3M,SAAW+jS,KAEhE,EAAKD,iBAAiBrhS,EAAOuhS,EAAgBplC,IAG/CrzP,KAAKyqK,WAAa,WAA8B,IAA7B+qI,IAA6B,yDAG9C,GAFAzuS,EAAMysS,gBAAiB,EACvBzsS,EAAMgtS,oBAAsB,GACxByB,EAAmB,4BACrB,YAAyBzuS,EAAM0sS,YAA/B,+CAA4C,KAAjCgC,EAAiC,QAC1CA,EAAWp9O,WAFQ,8EAHuB,2BAQ9C,YAAwBtxD,EAAMilF,WAA9B,+CAA0C,KAA/B0pN,EAA+B,QACxCA,EAAUr9O,WATkC,6EAW1CtxD,EAAM2sS,kBACR3sS,EAAM2sS,iBAAiBr7O,UAGzBtxD,EAAM0sS,YAAc,GACpB1sS,EAAMilF,WAAa,IAGrBhsF,KAAK0oN,WAAa,WAIhB,GAAI3hN,EAAM0sS,YAAYh/S,OAAS,GAAKsS,EAAM8sS,WAAa,EAAAl6P,eAAepE,MAAqC,IAA7BxuC,EAAM0sS,YAAYh/S,OAAc,CAC5G,IAAM61D,EAAc,UAAYG,eAAe1jD,EAAM0sS,aACjDkC,EAAiB,GACrB,OAAQ5uS,EAAM8sS,UACZ,KAAK,EAAAl6P,eAAepE,KAClB,EAAKqgQ,WAAW7uS,EAAM0sS,YAAanpP,GACnC,MACF,KAAK,EAAA3Q,eAAeC,MACd7yC,EAAM+sS,iBACR,EAAK+B,oEAFT,2BAIE,YAAyB9uS,EAAM0sS,YAA/B,+CAA4C,KAAjCgC,EAAiC,QAC1CA,EAAWr7R,GAAKkwC,EAAYlwC,EAC5Bq7R,EAAWp7R,GAAKiwC,EAAYjwC,EAC5Bs7R,EAAe5gT,KAAK0gT,IAPxB,6EAUE,EAAKK,YAAYH,EAAgBrrP,GACjC,UAAMrmC,UAAS,IAAAujF,mBAAkB,KACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,KACnC,UAAOhlD,UAAUsC,eAAiB,GAClC,EAAK6S,mBAIThxD,EAAM2sS,kBAAmB3sS,EAAM2sS,iBAAiBr7O,UAChDtxD,EAAM2sS,iBAAmB,KAG3B,EAAKjpI,aAAa1jK,EAAM8sS,WAAa,EAAAl6P,eAAepE,QAQtDv1C,KAAK61S,kEAAoE,WACvE,GAAI9uS,EAAM0sS,YAAYh/S,QAAU,EAAG,CACjC,IAAMigK,EAAa3tJ,EAAM0sS,YAAY,GAC/B/b,EAAc3wR,EAAM0sS,YAAY,GAChCe,EAAYztS,EAAM0sS,YAAY1sS,EAAM0sS,YAAYh/S,OAAS,GAEzDshT,GAAe,IAAA9V,iBAAgBuU,EAAWztS,EAAM4pR,gBAAiBj8H,EAAWnqG,iBAC5E+zJ,GAAoB,IAAAvjI,+BACxB25E,EAAWnqG,gBACXmtO,EAAYntO,gBACZiqP,EAAUjqP,gBACVwrP,GACA,GACA,GAGF,GAAIz3F,EAAmB,CACrB,IAAM03F,GAA2B,IAAAnhO,yBAAwBypI,EAAkBlkM,EAAGkkM,EAAkBjkM,GAChGtT,EAAM0sS,YAAY,GAAG5oP,YAAYmrP,MAKvCh2S,KAAK81S,YAAc,SAACH,EAAgBrrP,GAAgB,OACrB,IAAAq1E,0BAAtBG,GAD2C,sBAElC,IAAAiwJ,uBACd4lB,EACA71K,GACA,EACAx1E,GACA,EACA,KACF,GACE,CACE+lO,iBAAkB,GAClBC,iBAAkB,IAClBC,oBAAqB,OAM3BvwR,KAAK41S,WAAa,SAACD,EAAgBjlB,IACjC,IAAAD,wBAAuBklB,EAAgBjlB,EAAa3pR,EAAM4pR,kBAG5D3wR,KAAK4qD,UAAY,aAmBjB5qD,KAAKi6D,OAAS,SAACtW,GAAD,OAAS,UAAesW,OAAOtW,EAAK,EAAKxhD,e,+MC5fzD,S,mDAGA,IASa,EAYP,EA4BO,EAYA,EAWA,EAxEPowL,EAFN,OAEgB63E,YACZ,0CACA,uCAEE6rC,EAAe,CACnB,SAAY,SACZ,SAAY,MAGDjR,EAAiBA,EAAjBA,gBAAA,gCAAiB,2GAEG,IAAAl7B,aAAYv3E,EAAU,cAAe0jH,GAFxC,cAEtBhR,EAFsB,SAGJA,EAAiBhxS,MAAQgxS,EAAiBhxS,KAAKA,MAAQgxS,EAAiBhxS,KAAKA,KAAKiiT,WAExG,EAAAvsC,cAAcv5I,SAAS+hE,QAAQD,KAA/B,cAAuD+yG,EAAiBhxS,KAAKA,KAAKiiT,SAClF,EAAAvsC,cAAcv5I,SAAS+hE,QAAQr7L,IAA/B,cAAsDmuS,EAAiBhxS,KAAKA,KAAKiiT,UANvD,kBASrBjR,GATqB,kDAAjB,4CAYPkR,GAAA,gCAAyB,WAAOC,GAAP,sFACzBliI,OADyB,EAGvB1kD,EAHuB,+CAGP,2FACpBx3H,QAAQ4B,IAAI,4CADQ,SAIdorS,IAJc,uBAKPoR,IALO,0FAHO,uEAYNA,IAZM,YAY3BliI,EAZ2B,SAaiB,MAAxBA,EAAaiwH,OAbN,iCAcJ30K,IAdI,OAczB0kD,EAdyB,wCAgBpBA,GAhBoB,qCAkBL,iBAAjB,4CAA8B,KAAM/xE,UAAuC,MAA1B,KAAMA,SAASgiM,OAlB1C,kCAmBJ30K,IAnBI,eAmBzB0kD,EAnByB,yBAoBlBA,GApBkB,eAsB3Bl8K,QAAQ4B,IAAI,iBAAZ,MAtB2B,kBAuBpB,IAAI81H,MAAJ,OAvBoB,4DAAzB,6CA4B8B2mL,EAAvBA,sBAAA,gCAAuB,WAAOhsJ,GAAP,iGAE1BjzI,EAASm7K,EAFiB,iBAEOloC,EACjC+rJ,EAAU,EAAAvsC,WAAWpyQ,UAAX,EAAsB2f,GAHN,SAIL++R,EAAuBC,GAJlB,cAI1BliI,EAJ0B,yBAKzBA,GAAgBA,EAAajgL,MAAQigL,EAAajgL,KAAKqiT,kBAL9B,uCAOhCt+S,QAAQ4B,IAAI,gCAAZ,MAPgC,mBAQzB,GARyB,2DAAvB,6CAYoBknP,EAApBA,mBAAA,gCAAoB,WAAOD,GAAP,+FAEvBzpO,EAASm7K,EAFc,yBAGvB6jH,EAAU,EAAAtsC,YAAYryQ,UAAZ,EAAuB2f,EAAKypO,GAHf,SAIhBs1D,EAAuBC,GAJP,+EAM7Bp+S,QAAQ4B,IAAI,8BAAZ,MAN6B,mBAOtB,GAPsB,2DAApB,6CAWuBunP,EAAvBA,sBAAA,gCAAuB,WAAO/sH,GAAP,+FAE1Bh9G,EAASm7K,EAFiB,4BAG1B6jH,EAAU,EAAAtsC,YAAYryQ,UAAZ,EAAuB2f,EAAKg9G,GAHZ,SAInB+hL,EAAuBC,GAJJ,+EAMhCp+S,QAAQ4B,IAAI,iCAAZ,MANgC,mBAOzB,GAPyB,2DAAvB,8C,oLC3Eb,MACY6mB,E,wJAAZ,O,IAEA,SACA,QACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,QACA,QACA,Q,IACA,Q,IACA,QACA,SACA,QAIA,Q,IACA,O,uDAEqB81R,G,cAEnB,WAAYjrM,IAAO,qBACjBnzG,OAAOq+S,eAAiBr+S,OAAOq+S,gBAAkB,EACjDr+S,OAAO+1M,4BAA6B,EAFnB,2EAGX5iG,IAHW,mB,oFAOjBtrG,KAAKy2S,aAAaz2S,KAAKsrG,OACvB,IAAM4yE,EAAYl+K,KAAKsrG,MAAM4yE,WAAal+K,KAAKsrG,MAAM4yE,UAAU1iK,KAC/D,GAAI0iK,GAAaA,EAAU53K,OAAOnM,SAAS,eAAiB6F,KAAKsrG,MAAMhtF,gBAAgB7pB,SAAWuL,KAAKsrG,MAAMkwC,uBAAwB,CACnI,IAAMk7J,GAAc,IAAA52H,8CAA6C9/K,KAAKsrG,MAAMhtF,gBAAiB4/J,GACzFw4H,GACF12S,KAAKwgL,kCAAkCtC,EAAWw4H,EAAYz2H,8BAA+B,Q,6CAKnGs2E,UAAY,SAACtlL,EAAMv7D,EAAiBkrF,GAClC,IAAM9uF,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,UAChD,EAAK4jG,MAAMthF,gBAAkBlY,EAAmBu6H,oBAAuBl0I,OAAOq+S,gBAAkB1kS,EAAmBujN,gBAAmBl9N,OAAO+1M,2BAChJ,EAAKnxB,qBAAqB,EAAAz9H,eAAeG,YAG3C,EAAK6rD,MAAM2vH,YAAYhqJ,GAAM,EAAOv7D,EAAiBkrF,GACrD,EAAKoiH,gB,KAGP2zF,qBAAuB,SAACC,EAAsBjiP,EAAU6/J,GAAiC,IAAtB/4B,EAAsB,wDACjFvgL,GAAS,IAAAC,oBACT5hB,EAAS2hB,EAAOsD,MAAMm2C,GACtBxuC,EAAgB5sB,GAAUA,EAAOi7N,IAAcj7N,EAAOi7N,GAAWruM,cAIvE,OAHIA,GACFywR,EAAqBzgP,QAAQhwC,EAAc1G,uBAAuBg8K,IAE7Dm7G,G,KAGTC,uBAAyB,SAAC34H,EAAWv8F,EAAUm1N,GAC7C,GAAI,EAAKxrM,MAAMyK,UAAY,EAAKzK,MAAMoS,gBAAiB,IAAAsE,sCAAqC,EAAK1W,MAAMoS,eACrG,MAAO,GAET,IAAMxiG,GAAS,IAAAC,oBACX47R,EAA4B,GAC5BH,EAAuB,GAE3B,GAAI14H,GAAaA,EAAU1iK,MAAQ0iK,EAAU1iK,KAAK3N,eAIhD,OAHA+oS,EAAuB17R,EAAO8sH,0BAA0BlgI,KAAI,SAACqe,GAC3D,OAAOA,EAAc9f,YAAYoZ,4BAE3By+J,EAAU1iK,KAAKlV,QACrB,IAAK,aACH,IAAM42K,EAAagB,EAAU1iK,KAAK9a,YAC5Bg0P,EAAYx3E,GAAcA,EAAWw3E,UACvCA,GAAaA,EAAUvuO,eACzBywR,EAAqBzgP,QAAQu+L,EAAUvuO,cAAc1G,0BAEvDm3R,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAa5uS,GAAI,cACxF4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAgB5uS,GAAI,cAC3F,MAEF,IAAK,aACH4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAM5uS,GAAI,cACjF4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAa5uS,GAAI,cACxF,MAEF,IAAK,2BACH4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAM5uS,GAAI,cACjF4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAgB5uS,GAAI,mBAM1F,GAAIk2K,GAAaA,EAAU1iK,MA7BJ,CAAC,cAAe,iBAAkB,yBA6BCrhB,SAAS+jL,EAAU1iK,KAAKlV,QACvF,OAAQ43K,EAAU1iK,KAAKlV,QACrB,IAAK,cACHswS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAa5uS,GAAI,WACxF4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAQ5uS,GAAI,iBAAiB,GACpG,MAEF,IAAK,iBACH4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAa5uS,GAAI,WACxF4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAQ5uS,GAAI,cAAc,GACjG,MAEF,IAAK,wBACH4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAQ5uS,GAAI,cAAc,GACjG4uS,EAAuB,EAAKD,qBAAqBC,EAAsB,UAAQ5uS,GAAI,iBAAiB,GA+B1G,OAzBI4uS,EAAqBniT,SACvBmiT,GAAuB,IAAAxxS,QACnBwxS,EAAqBt1S,QAAO,SAASqH,EAAEC,GAA+B,OAAzBD,EAAE3O,QAAQ4O,GAAG,GAAED,EAAE5T,KAAK6T,GAAUD,IAAI,IAD9D,wBAEfiuS,EAAqBt1S,QAAO,SAACzJ,EAAEtB,GAAH,OAASsB,EAAE6f,IAAInhB,GAAE,KAAM,IAAIygT,KAAOnmS,UAEjDzS,SAAQ,SAAC64S,GAC5B,IAAIC,EAAav1N,EAAShlE,WAAU,SAAAtZ,GAAA,OAAWA,EAAQmY,MAASnY,EAAQmY,KAAKiE,2BAA6Bw3R,KACtGC,EAAa,IACfA,EAAav1N,EAAShlE,WAAU,SAAAtZ,GAC9B,QAAKA,EAAQmY,OAGiB,eAA1B0iK,EAAU1iK,KAAKlV,OAEVjD,EAAQmY,KAAKK,SAAS1hB,SAAS88S,GAEjC5zS,EAAQmY,KAAKK,WAAao7R,OAGjCC,GAAc,GAAKJ,IAA2BI,GAChDH,EAA0BhiT,KAAKmiT,MAK9BH,G,KAGTI,iBAAmB,SAAChxR,GAClB,IAAMvQ,EAAeuQ,EAAc3K,KAAK7X,WAAawiB,EAAc3K,KAAK7X,UAAUkS,eAClF,QAAID,GACKlhB,OAAOmc,KAAK+E,GAAc3V,MAAK,SAAC6V,GACrC,IAAMC,EAAc,EAAKu1F,MAAMt1F,aAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMjO,MAAQ8N,KAClEI,EAAcH,GAAeA,EAAYI,QAAUJ,EAAYI,OAAOrK,MAAK,SAAA5U,GAAA,OAASA,EAAM8Q,KAAO4N,EAAaE,GAAW,MAC/H,OAAOI,GAAeA,EAAYE,mB,KAMxCghS,mBAAqB,SAAC9rM,GACpB,IAAM6tG,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBAC3Dg+F,EAAoB,KAYxB,OAXI/rM,EAAM4yE,WAAa5yE,EAAM4yE,UAAU1iK,KAAK2K,cAC1CkxR,EAAoB/rM,EAAM3pB,SAAShlE,WAAU,SAACs0D,GAC5C,GAAGA,GAAQA,EAAKz1D,KACd,OAAO8vF,EAAM4yE,UAAU1iK,KAAK87R,gBAAgBn+F,KAAsBloI,EAAKz1D,KAAKxT,QAEvEsjG,EAAM4xE,WAAW1hK,KAAK2K,gBAC/BkxR,EAAoB/rM,EAAM3pB,SAAShlE,WAAU,SAACs0D,GAC5C,GAAGA,GAAQA,EAAKz1D,KACd,OAAO8vF,EAAM4xE,WAAW1hK,KAAK87R,gBAAgBn+F,KAAsBloI,EAAKz1D,KAAKxT,SAG5EqvS,G,KAGT3vK,kBAAoB,SAAC6vK,EAAkBjsM,GAAwD,IAAjDksM,EAAiD,wDAA1B1wK,EAA0B,wDACzF2wK,EAAoBnsM,EAAM3pB,SACxB+1N,EAAuBH,EAAiBzvS,KAAI,SAAA8F,GAAA,OAAS6pS,EAAkB7pS,MAAQwxG,UAC/E+oB,EAAS,EAAK8iD,kBAAkBwsH,EAAmBD,EAAe1wK,GASxE,OARA4wK,EAAqBt5S,SAAQ,SAACu5S,GAC5B,IAAMtvK,EAAeF,EAAOxrH,WAAU,SAAAgD,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAO2vS,EAAiBn8R,KAAK7X,UAAUqE,MAC3GqgI,GAAgB,IAClBF,EAAOxyI,OAAO0yI,EAAc,GAC5BF,EAAOxyI,OAAO,EAAG,EAAGgiT,OAIjBxvK,G,KAGTyvK,4BAA8B,SAACzxR,EAAeolG,GAW5C,MAVoB,CAAC,sBAAuB,gBAAiB,qBAAsB,qBACnEpxH,SAASgsB,EAAc7f,UACR,sBAAzB6f,EAAc7f,OAC0C,wBAAtD6f,EAAczlB,YAAYA,YAAYwnQ,cACxC38I,GAAW,GAEJplG,EAAczlB,YAAYA,YAAYwnQ,cAAgB/hP,EAAc7f,SAC7EilH,GAAW,IAGRA,G,KAGT+a,yBAA2B,SAAC3mH,EAAS/nB,GACnC,MAAiB,SAAbA,EACK+nB,EAAQnE,KAAKhD,iBAEL,oBAAb5gB,EACK+nB,EAAQnE,KAAK1I,SAASlb,IAAa,MAErC+nB,EAAQnE,KAAK5jB,I,KAGtB2uI,4BAA8B,SAACthD,EAAUrtF,EAAU4uI,GAajD,OAVAvhD,EAAWA,EAASv8E,MAAK,SAACC,EAAEC,GAC1B,IAAI69H,EAAQ,EAAKH,yBAAyB39H,EAAG/Q,GACzC8uI,EAAQ,EAAKJ,yBAAyB19H,EAAGhR,GACzC+uI,EAAQ,EAAKL,yBAAyB39H,EAAG69H,GACzCI,EAAQ,EAAKN,yBAAyB19H,EAAG49H,GAC7C,OACKC,EAAQC,EAAS,EAAKD,EAAQC,GAAU,EAAKC,EAAQC,EAAS,EAAKD,EAAQC,GAAU,EAAI,M,KAOlGqkD,kBAAoB,SAACtpG,GAA2D,IAAjD61N,EAAiD,wDAA1B1wK,EAA0B,wDAC9E,GAAI,EAAKx7B,MAAMyK,UAAY,EAAKzK,MAAMoS,gBAAiB,IAAAsE,sCAAqC,EAAK1W,MAAMoS,eACrG,OAAO/7B,EAFqE,IAIvExpE,EAAkB,EAAKmzF,MAAvBnzF,eACDrG,EAAqBqG,EAAezQ,SACtCs3E,EAAcA,GAAdA,qBAAkB2C,EAAS36E,QAAO,SAAA3D,GAAA,OAAWA,GAAWA,EAAQmY,MAAQnY,EAAQmY,KAAK7X,eACrFsN,EAAkB,KAKtB,GAJIumS,KAAmB1wK,GAAkB9nD,EAAY,IAAM,EAAK64N,uBAAuB74N,EAAY,GAAGxjE,KAAMwjE,EAAY,GAAGxjE,KAAK9a,gBAC9HuQ,EAAkB+tE,EAAY,GAC9BA,EAAYrpF,OAAO,EAAG,KAEnBmc,EAAmB8rB,aAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,cAAmB,EAAKo2F,MAAMl2F,uBAiB5I,IAAItD,EAAmBk1H,aAAgB7uH,EAAe8uH,2BAA8B9uH,EAAe+uH,mBAMnG,CACL,IAAMC,EAAiBnoD,EAAY/+E,MAAK,SAAA0f,GAAA,OAAWA,EAAQnE,KAAK1I,SAAb,mBAA4C,kBAAoB,OACnHksE,EAAc,EAAKunD,4BAA4BvnD,EAAamoD,EAAgB,KACvEL,GAAiB9nD,EAAY/+E,MAAK,SAAA0f,GAAA,OAAWA,EAAQnE,KAAK4rH,gCAC7DpoD,EAAc,EAAKunD,4BAA4BvnD,EAAa,2BAT9DA,EAAcA,EAAYl3E,KAAI,SAAA6X,GAE5B,OADAA,EAAQnE,KAAKzS,cAAe,IAAAgD,gBAAe4T,EAAQnE,KAAM,GAClDmE,KAETq/D,EAAc,EAAKunD,4BAA4BvnD,EAAa,eAAgB,YAtB6F,CACzK,IAAMqoD,EAAmBroD,EACtBh4E,QAAO,SAAA2Y,GAAA,QAAY,IAAAjL,oBAAmBiL,EAAQnE,SAC9C1T,KAAI,SAAA6X,GAEH,OADAA,EAAQnE,KAAKzS,cAAe,IAAAgD,gBAAe4T,EAAQnE,KAAM,GAClDmE,KAEL2nH,EAAiBtoD,EACpBh4E,QAAO,SAAA2Y,GAAA,OAAW,IAAAjL,oBAAmBiL,EAAQnE,SAC7C1T,KAAI,SAAA6X,GAEH,OADAA,EAAQnE,KAAKzS,cAAe,IAAAgD,gBAAe4T,EAAQnE,KAAM,GAClDmE,KAEXq/D,EAAcltE,EAAmBk1H,YAAnB,wBACT,EAAKT,4BAA4Bc,EAAkB,eAAgB,UAD1D,aAET,EAAKd,4BAA4Be,EAAgB,eAAgB,UAFxD,wBAGND,IAHM,aAGeC,IAc/B,GAAIR,EAAe,CAEjB,IAAMS,EAAgBvoD,EAAYh4E,QAAO,SAAA2+E,GAAA,OAAeA,EAAWnqE,KAAKooE,4BAClE4jD,EAAmBxoD,EAAYh4E,QAAO,SAAA2+E,GAAA,OAAcA,EAAWnqE,KAAKooE,4BAC1E5E,0BACKuoD,IADL,aAGKC,IAMP,OAHIgwK,GAAiBvmS,GACnB+tE,EAAY7oB,QAAQllD,GAEf+tE,G,KAGT84N,gBAAkB,SAACr3S,GAQjB,IAPA,IAAMqR,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SAC/CyxM,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzD0+F,EAAW,GAEXp2N,EAAW,EAAK56E,MAAMixS,kBAAkBhxS,QAAO,SAAA3D,GAAA,OAAWA,KALlC,WAQrB9O,GACP,IAAM6pB,EAAiBujE,EAASptF,GAC1BwrL,EAAgB,EAAKz0E,MAAM4yE,WAAa,EAAK5yE,MAAM4xE,WAErD/jB,GAAW,GAGbA,EAFIrnJ,EAAmB8rB,eAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,gBAAmB,EAAKo2F,MAAMl2F,wBAC9I+jM,GAAoBp5B,EAAcvkK,KAAKwrE,qBAAuB+4F,EAAcvkK,KAAKkrE,mBAC1EtoE,GAAkB,EAAKktF,MAAMnlF,eAAiB45J,GACpDA,EAAcvkK,KAAK+qE,WAAW,EAAK+kB,MAAMr+F,mBACzC,EAAKq+F,MAAMnlF,cAAcxiB,UAAUqE,KAAOoW,EAAe5C,KAAKxT,KAExDoW,GAAkB,EAAKktF,MAAMnlF,eAAiB,EAAKmlF,MAAMnlF,cAAcxiB,UAAUqE,KAAOoW,EAAe5C,KAAKxT,QAIvHmxJ,EAAW,EAAKy+I,4BAA4B,EAAKtsM,MAAMnlF,cAAegzI,IAGxE,IAAI8+I,GAAc,GACbnmS,EAAmB8rB,aAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,cAAmB,EAAKo2F,MAAMl2F,yBAC9IgJ,IAAkBA,EAAe5C,KAAK7X,UAAUgS,UAC9C,EAAK21F,MAAMnlF,iBAAkB,EAAKmlF,MAAM4yE,WAAe,EAAK5yE,MAAM4yE,UAAU1iK,KAAK+qE,WAAW,EAAK+kB,MAAMr+F,mBAAsB,EAAKq+F,MAAMnlF,cAAcxiB,UAAUgS,YACrKsiS,GAAc,GAGhB,IAAIC,EAA+B,EAC7BC,EAAmB/5R,GAAkBA,EAAe5C,KAAK7X,UAAUqE,GACnE8sM,EAAmB,EAAKxpG,MAAM/oG,UAAUuJ,MAAK,SAAC1F,GAClD,OAAO+xS,KAAsB/xS,EAASC,YAAY1C,WAAayC,EAASC,YAAY1C,UAAUqE,KACxF5B,EAASoC,eAAiB,EAAK8iG,MAAMr+F,oBAEzC6nM,IACFojG,EAA+BpjG,EAAiB3rM,UAGlD4uS,EAAShjT,KACP,mCAAgBqpB,eAAgBA,EAChB3d,SAAUA,EACVjJ,IAAK,iBAAiBjD,EACtB6jT,aAAch6R,GAAkBA,EAAe5C,MAAQ4C,EAAe5C,KAAK3N,eAC3EwqS,gBAAiBj6R,GAAkBA,EAAe5C,MAAQ4C,EAAe5C,KAAK68R,gBAC9El/I,SAAUA,EACV8+I,YAAaA,EACbh9E,YAAa,EAAKs7B,UAClBvsO,eAAgB,EAAKshF,MAAMthF,eAC3B5U,uBAAwB,EAAKk2F,MAAMl2F,uBACnC2nK,qBAAsB,EAAKA,qBAC3B/mK,aAAc,EAAKs1F,MAAMt1F,aACzBsiS,oBAAqB,SAACl6R,GAAD,OAAoB,EAAKk6R,oBAC5Cl6R,EAAgB,wBAAyB,eAE3CjG,eAAgB,EAAKmzF,MAAMnzF,eAC3BogS,gBAAiB93S,GAA+C,IAAlC,EAAK6qG,MAAMmvC,mBACzCy9J,6BAA8BA,EAC9Bp4E,kBAAmB,EAAKx0H,MAAMw0H,sBAtDzCvrO,EAAI,EAAGA,EAAIotF,EAASltF,OAAQF,IAAM,EAAlCA,GA2DT,OAAOwjT,G,KAITS,mBAAqB,kBACnB,+BAAK5tN,UAAU,qBACb,+BAAKA,UAAU,6BACb,+BAAKA,UAAU,6DACb,+BAAKA,UAAU,uCACf,mCAAYA,UAAU,2C,KAO9B6tN,0BAA4B,YAA4C,IAA1C5mM,EAA0C,EAA1CA,YAAapkB,EAA6B,EAA7BA,WAAYirN,EAAiB,EAAjBA,YAQhDA,EAActuS,KAAKkI,KAAKm7E,KAAgBokB,GAAiB6mM,EAActuS,KAAKouE,MAAMiV,KAAgBokB,GACrG,EAAK8mM,uBAAuBlrN,I,KAIhCmrN,yBAA2B,YAA6C,IAA3C9mM,EAA2C,EAA3CA,aAAcyrE,EAA6B,EAA7BA,aAActW,EAAe,EAAfA,UAClDsW,EAAenzK,KAAKkI,KAAK20J,KAAen1D,GAAkByrE,EAAenzK,KAAKouE,MAAMyuF,KAAen1D,GACtG,EAAK6mM,uBAAuB1xI,I,KAIhCuZ,kCAAoC,SAACtC,EAAWuC,GAAuF,IAAzDo4H,EAAyD,uDAAnC,EAAGn4H,EAAgC,uDAAT,KACtH5zF,EAAe4zF,GAAwB,CAC3CjgK,KAAMA,EAAK4B,KACX+9J,UAAWK,EACXE,iBAAkB,EAClB7kJ,KAAM,GAEH4kJ,GACHxC,EAAUiC,kBAAkBprL,KAAK+3F,GAGnC,IAAM8zF,EAAyB,IAE1B,EAAKk4H,0BACR,EAAKx7H,SAAS,CACZy7H,2BAA2B,IAE7B,EAAKD,yBAA0B,GAC/B,IAAAnnL,oBACEusD,EAAUtiK,QAAUsiK,EAAUriK,SAC9BixE,EAAahxD,KACb8kJ,EACAH,GAEC5uJ,MAAK,SAACswE,GACDA,GAAYA,EAAS1tG,SACvBuD,QAAQ4B,IAAI,6BAA8BuoG,GAC1C+7E,EAAUlxC,iBAAiB7qC,EAAUy+E,GAAwB,GAC7D1C,EAAUiC,kBAAoBjC,EAAUiC,kBAAkBr4K,KAAI,SAACw4K,GAS7D,OARIA,EAAsB7/J,OAASqsE,EAAarsE,OAC9C6/J,EAAsBK,kBAAoBx+E,EAAS1tG,OAC/C0tG,EAAS1tG,OAASmsL,EACpBN,EAAsBC,gCAAiC,EAEvDD,EAAsBxkJ,QAGnBwkJ,MAGX,EAAK04H,oBAAoBH,Q,KAKjCG,oBAAsB,SAACH,GAAqD,IAAhCI,IAAgC,yDAC1E,EAAK37H,SAAS,CACZy7H,2BAA2B,IAC1B,WACGE,IACF,EAAKC,aAAeL,EACpB,EAAKvtM,MAAMy0H,gBAEb,EAAK+4E,yBAA0B,M,KAInCH,wB,gCAAyB,WAAOE,GAAP,kBAA4BM,EAA5B,uDAA+C,KAA/C,4EAEiD,EAAK7tM,MAAtE8tM,EAFgB,EAEhBA,kCAAmC1uR,EAFnB,EAEmBA,YAAaq1J,EAFhC,EAEgCA,eAEnDq5H,EAJmB,oBAKjB,EAAKN,0BAA2B/4H,EAAc/+D,kBAL7B,wDAQrB,EAAK83L,yBAA0B,EAC/B,EAAKx7H,SAAS,CACZy7H,2BAA2B,KAE7B,IAAAj4L,0BAAyB,EAAK/5G,MAAMixS,kBAAmBttR,EAAaq1J,GACjEluJ,MAAK,SAAAonR,GAAA,OAAwB,EAAKD,oBAAoBH,EAAqBI,MAbzD,8BAiBjB/7H,EAAai8H,GAAoB,EAAK7tM,MAAM4yE,WAAa,EAAK5yE,MAAM4xE,YAC1D1hK,KAlBO,uDAqBnB,EAAK8vF,MAAMhtF,gBAAgB7pB,OArBR,wBAsBfiiT,GAAc,IAAA52H,8CAA6C,EAAKx0E,MAAMhtF,gBAAiB4+J,EAAW1hK,MAAM,GAC9GxjB,QAAQ4B,IAAI,cAAe88S,GACvBA,GACF,EAAKl2H,kCAAkCtD,EAAW1hK,KAAMk7R,EAAYt2H,UAAWy4H,EAAqBnC,GAzBjF,8BA6BlBx5H,EAAW1hK,KAAKwzM,mCAAsC,EAAK8pF,wBA7BzC,wBA8BrB,EAAKA,yBAA0B,EAC/B,EAAKx7H,SAAS,CACZy7H,2BAA2B,IAhCR,WAmCoB,IAAA1mN,+BAA8B6qF,EAAW1hK,MAnC7D,QAmCf69R,EAnCe,OAoCjB,UAAOx4S,aACT7I,QAAQ4B,IAAI,6BAA8By/S,GAG5C,EAAKL,oBAAoBH,GAxCJ,8C,2DAxaNtC,G,iICtBrB,O,IACA,O,IAEA,OACA,QACA,S,IACA,MACA,SACA,QACA,S,uDAEqB+C,E,yOAGnBhB,oBAAsB,SAACj1S,EAASwlQ,GAA2G,IAA3F17O,EAA2F,uDAAzE,eAAgBosR,EAAyD,uDAA9B,KAAM5oI,EAAwB,uDAAT,KAEhI,UAAUxvI,eAAe0nO,GACzB,IAAM2wC,EAAcn2S,EAAQmY,MAAQnY,EAC9BosG,EAAgB+pM,EAAY94S,YAC5Bud,EAAiBwxF,EAAc/uG,UAAY+uG,EAAc/uG,YAAYmb,SAAW4zF,EAAc5zF,SALqC,EAMlG,UAAM1Z,WAAtCwD,EANkI,EAMlIA,gBAAiBgL,EANiH,EAMjHA,YACjBwpF,EAA8BxpF,EAA9BwpF,WAAYhwE,EAAkBxZ,EAAlBwZ,eAEbimF,EAAUzqG,EAAgB+B,SAASg7K,0BAA4B/R,GAAgBA,EAAa7iK,mBAC9F6iK,EAAa7iK,mBACb1U,SAASC,SAASoC,eAChByf,GAAS,IAAAC,kBAAiBi1F,GAE1BqpM,EAAiB,WACrB,EAAKnuM,MAAMxnF,uBAAsB,EAAM7F,GACvC,EAAKqtF,MAAM9mF,2BAA2Bg1R,GAAa,GAC3B,eAApBrsR,GACF,EAAKm+E,MAAM9kF,8BAA6B,GAE1C,EAAK8kF,MAAMn+E,gBAAgBA,IAG7B,IAAI,IAAA8sF,uBAAsB9f,EAAYhwE,GAAtC,CACE,GAAIwmJ,GAAgBA,EAAarmJ,aAAc,CAC7C,IAAM8vE,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAO2oK,EAAarmJ,gBAC1E,GAAI8vE,EAGF,OAFAq/M,SACA,IAAAh2H,oBAAmBrpF,EAAYu2E,EAAanmJ,eAAgBmmJ,EAAanoK,aAAcmoK,EAAajgK,mBAIxG,IAAM0pF,EAAaD,EAAW,GAC1BC,IACFq/M,KACA,IAAAh2H,oBAAmBrpF,QAZvB,CAiBA,IAAIs/M,EAAc,GAGd9hD,EAAmB,EACvB,GAAInoJ,EAAc/uG,UAChB,GAAIwa,EAAOc,cACNrW,EAAgB+B,SAASiW,sBACzBzC,EAAOc,aAAahV,QAAO,SAAA2hL,GAAA,OAASA,EAAMlsK,SAASxc,MAAK,SAAAyc,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWkzS,EAAYlzS,aAAS7R,OAAS,GACzHk8K,GACAz1J,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAc,IAAAC,4BAA2Bo0J,EAAatqK,YAAaiW,EAAW7lB,MAAM,MAAQ,CACxH,IAAMkjT,EAAYz+R,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAc,IAAAC,4BAA2Bo0J,EAAatqK,YAAaiW,EAAW7lB,MAAM,MAC/HijT,EAAcC,EAAUljT,KACxBmhQ,EAAmB+hD,EAAUl9R,SAASE,WAAU,SAAAD,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWkzS,EAAYlzS,eAC1F,GAAI4U,EAAOc,cAAgB20J,GAAgBA,EAAavnK,gBAC1D8R,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASk6K,EAAavnK,kBAAiB,CAC5FswS,EAAc/oI,EAAavnK,eAC3B,EAAKkiG,MAAM14E,oBAAoB+9I,EAAavnK,gBAC5C,IAAM2U,EAAmB7C,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASk6K,EAAavnK,qBACjGwuP,EAAmB75O,EAAiBtB,SAASE,WAAU,SAAAD,GACrD,OAAQA,EAAQlB,KAAKI,SAAW6zF,EAAc5zF,UAAca,EAAQlB,KAAKK,WAAa4zF,EAAc5zF,cAE5E+7O,EAAmB,IAAM75O,EAAiBuxP,0BAClE,CAAC,aAAc,OAAQ,SAAU,OAAQ,YAAYlxQ,SAAQ,SAAAkI,GACvDmpG,EAAcnpG,OAAOnM,SAASmM,KAChCsxP,EAAmB75O,EAAiBtB,SAASE,WAAU,SAAAD,GAAA,OAAWA,EAAQlB,KAAKlV,OAAOnM,SAASmM,eAIhG,GAAI4U,EAAOc,cAAgByzF,EAAcm4E,eAAgB,CAC9D,EAAKt8E,MAAM14E,oBAAoB68E,EAAcm4E,gBAC7C,IAAM7pK,EAAmB7C,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASg5G,EAAcm4E,qBAClGgwE,EAAmB75O,EAAiBtB,SAASE,WAAU,SAAAD,GACrD,OAAQA,EAAQlB,KAAKI,SAAW6zF,EAAc5zF,UAAca,EAAQlB,KAAKK,WAAa4zF,EAAc5zF,cAE5E+7O,EAAmB,IAAM75O,EAAiBuxP,0BAClE,CAAC,aAAc,OAAQ,SAAU,OAAQ,YAAYlxQ,SAAQ,SAAAkI,GACvDmpG,EAAcnpG,OAAOnM,SAASmM,KAChCsxP,EAAmB75O,EAAiBtB,SAASE,WAAU,SAAAD,GAAA,OAAWA,EAAQlB,KAAKlV,OAAOnM,SAASmM,cAIhG,CACL,IAAMmW,EAAWgzF,EAAc/uG,YAAY+b,UAAS,GAC9Cm9R,EAAoBnqM,EAAc5zF,SAASld,QAAQ,KAAK,KAAKrC,cACnEs7P,EAAmBn7O,EAASE,WAAU,SAAAgnM,GACpC,OAAOA,EAAYnoM,KAAKK,SAASld,QAAQ,KAAK,KAAKrC,gBAAkBs9S,OAKtEhiD,GAAoBA,EAAmB,KAC1CA,EAAmB,GAGrB,EAAKtsJ,MAAM1lF,iCAAiCgyO,GAC5C6hD,IACKthT,OAAO2B,SAASC,KAAKI,SAAS,eAC7B+gB,EAAOc,cAAgB09R,GACzB,IAAAj2F,mBAAkBi2F,EAAa9hD,GACtB18O,EAAOc,cAAgByzF,EAAcm4E,gBAC9C,IAAA67B,mBAAkBh0G,EAAcm4E,eAAgBgwE,IAEhD,IAAAzN,iBAAgB16I,EAAc/uG,UAAY+uG,EAAc/uG,YAAc+uG,EAAemoJ,IAGrF2hD,GACF7qN,YAAW,WACT,IAAMmrN,GAAiB,aAAE,oCACnBC,EAAe1gT,SAASg9F,cAAc,oBACtC2jN,EAAc3gT,SAASg9F,cAAc,qBAAqBmjN,EAAyB,MACzF,GAAIM,GAAkBC,GAAgBC,EAAa,CACjD,IAAM9yI,EAAY6yI,EAAa3qB,UAAY4qB,EAAY5qB,UAEvD0qB,EAAersN,QAAQ,CAACy5E,aAAY,QAErC,K,0EAtHYqyI,G,kICXrB,MACA,O,IACA,MACA,Q,uDAEMU,G,gBAYJ,WAAY1uM,IAAO,gGACXA,IADW,SAwBnB2uM,sBAAwB,WACtB,OAAO,EAAK3uM,MAAM4uM,eAAiB,EAAK5uM,MAAM4uM,cAAc1lM,QACxD,EAAKlJ,MAAM4uM,cAAc1lM,QACzBp7G,SAASg9F,cAAc,EAAKkV,MAAM6uM,qBA3BrB,EA8BnBC,kBAAoB,SAACx5M,GAAU,OACd,IAAA/mF,kBAAiB+mF,GAAzBxmF,EADsB,EACtBA,EAAGC,EADmB,EACnBA,EACVq0E,YAAW,WACT,IAAK,EAAKmkI,WACR,OAAO,EAET,EAAKz4M,EAAIA,EACT,EAAKC,EAAIA,EACT,EAAKggS,aAAc,EACnB,EAAKz6C,mBAAoB,EACzB,EAAKC,oBAAqB,EAC1B,EAAKviF,SAAS,CACZ+8H,aAAa,IAEV,EAAKC,oBACR,EAAKA,kBAAoB,EAAKL,yBAEhC,EAAKM,kBAAoB,EAAKD,kBAAkB7sN,aAC/C,IAhDc,EAmDnB+sN,kBAAoB,SAAC55M,GACnB,GAAI,EAAKy5M,YAAa,QACL,IAAAxgS,kBAAiB+mF,GAAzBxmF,EADa,EACbA,EAAGC,EADU,EACVA,EACJ2lP,EAAKh3P,YAAYoR,EAAI,EAAKA,GAAGtV,QAAQ,IACrCm7P,EAAKj3P,YAAYqR,EAAI,EAAKA,GAAGvV,QAAQ,IAa3C,GAVK,EAAK+6P,oBAAuB,EAAKD,mBAChCx1P,KAAK4pE,IAAIhrE,WAAWg3P,KAAQ,EAAKE,QAC/Bl3P,WAAWg3P,GAAM,EAAKE,MACxB,EAAKL,oBAAqB,EACjB72P,WAAWg3P,IAAO,EAAKE,QAChC,EAAKN,mBAAoB,KAK1B,EAAKA,mBAAqB,EAAKC,qBAAuBz1P,KAAK4pE,IAAIgsL,GAAM51P,KAAK4pE,IAAIisL,GAAK,CAItF,IAAMxyK,EAAa,EAAKmyK,kBACpB,EAAK26C,kBAAoBnwS,KAAK4pE,IAAIgsL,GAClC,EAAKu6C,kBAAoBnwS,KAAK4pE,IAAIgsL,GAEtC,EAAKs6C,kBAAkB7sN,WAAaA,KA5EvB,EAiFnBgtN,gBAAkB,WAChB/rN,YAAW,WACT,IAAK,EAAKmkI,WACR,OAAO,EAET,EAAKz4M,EAAI,EACT,EAAKC,EAAI,EACT,EAAKggS,aAAc,EACnB,EAAKz6C,mBAAoB,EACzB,EAAKC,oBAAqB,EAC1B,EAAKviF,SAAS,CACZ+8H,aAAa,MAEd,IA3FH,EAAKC,kBAAoB,KACzB,EAAKznF,YAAa,EAClB,EAAK0nF,kBAAoB,EACzB,EAAKngS,EAAI,EACT,EAAKC,EAAI,EACT,EAAK6lP,MAAQ,EACb,EAAKm6C,aAAc,EACnB,EAAKz6C,mBAAoB,EACzB,EAAKC,oBAAqB,EAC1B,EAAK94P,MAAQ,CACXszS,aAAa,GAbE,E,oFAkBjBr6S,KAAK6yN,YAAa,EAClB7yN,KAAKs6S,kBAAoBt6S,KAAKi6S,0B,6CAG9Bj6S,KAAK6yN,YAAa,I,+BA8ElB,OAAI7yN,KAAKsrG,MAAM7qG,SACN,+BAAKmqF,UAAW5qF,KAAKsrG,MAAM1gB,WAAY5qF,KAAKsrG,MAAMk1C,UAGzD,+BAEE51D,UAAW5qF,KAAKsrG,MAAM1gB,UAAY,aAAe5qF,KAAK+G,MAAMszS,YAAc,oBAAsB,IAChGlyP,YAAanoD,KAAKo6S,kBAClBzxP,YAAa3oD,KAAKw6S,kBAClBx5M,aAAchhG,KAAKy6S,gBACnBjyP,UAAWxoD,KAAKy6S,iBACfz6S,KAAKsrG,MAAMk1C,c,GA3HO,UAAM30C,W,EAExBq2C,UAAY,CACjBt3D,UAAW,UAAUpoD,OACrB23Q,mBAAoB,UAAU33Q,OAAOy2E,WACrCunC,SAAU,UAAUsrD,IAAI7yF,Y,EAGnBgmE,aAAe,CACpBr0F,UAAW,I,cAiIA,IAAAkhB,UATS,SAACxzG,GACvB,MAAO,CACLwiJ,wBAAyBxiJ,EAAMu1I,gBAAgBiN,wBAC/Cr6I,SAAUnI,EAAMgR,YAAY7I,YAIL,GAEZ,CAA6Cu5S,I,mHC/I5D,O,WACA,MAEA,S,IACA,QACA,QACA,Q,mDAEA,IAAMU,EAAuB,SAACpvM,GAAU,IAE/Bu0H,EAA+Dv0H,EAA/Du0H,QAAS3kN,EAAsDowF,EAAtDpwF,OAAQ2/M,EAA8CvvH,EAA9CuvH,sBAAuBp6N,EAAuB6qG,EAAvB7qG,SAAUk6S,EAAarvM,EAAbqvM,UACnDvvS,EAAO8P,EAAOynN,YAAY9C,GAHM,GAIE,IAAA1+E,UACtCjmI,EAAO8qR,kBAAoB9qR,EAAO8qR,iBAAiBnmE,GAAW3kN,EAAO8qR,iBAAiBnmE,GAAW,IAL7D,qBAI/Bh8N,EAJ+B,KAIjBiwM,EAJiB,KAOhC1zD,GAAY,IAAAF,gBAuBlB,IArBA,IAAAv+B,YAAU,WAEN,IAAM,EADH99G,IACG,gCAAqB,+FACnBywB,EAAapZ,EAAO9P,OAASA,EAAO8P,GAAS,IAAAgZ,kBAAiBhZ,EAAQ2kN,EAAS3kN,EAAOkZ,OACxFlZ,EAAO9P,OAASA,EAFK,uBAGjBipN,EAAen5M,EAAOq0F,2BAA0B,GAAM,GAAO,GAH5C,SAIjBj7E,EAAWggM,aAAalpN,EAAM8P,EAAO9P,KAAMipN,EAAcn5M,EAAOkZ,MAAO,MAAM,GAJ5D,QAMzB,IAAAuuJ,2BAA0BruJ,GACvBzC,MAAK,SAAAswE,GAEAi+C,KACF0zD,EAAgB3xG,MAVG,kDAArB,gDAiBP,IAECw4M,EACF,OAAO,+BAAK57S,IAAK8E,EAAc+mF,UAAU,eAAespH,IAAI,cAG9D,GAAIzzM,EAAU,CACZ,IAEMZ,EAAS,KAD6B,KADnB1H,OAAOwqD,WAAa,EAAI,IACC,KACT,IAEzC,OACE,8BAAIioC,UAAW,0BACZx/E,IAAS8P,EAAO9P,KAAO,kCAAoC,IAC1D0xK,QAAS,kBAAM+9C,EAAsBzvN,KAEvC,+BAAKw/E,UAAU,+BAA+Bv2E,MAAO,CAACumS,UAAW/6S,IAC9DgE,EAAe,+BAAK9E,IAAK8E,EAAcqwM,IAAI,cAAgB,0CAMpE,OACE,8BAAItpH,UAAW,qBAAuBx/E,IAAS8P,EAAO9P,KAAO,UAAY,IACrE02R,aAAY12R,EACZ0xK,QAAS,kBAAM+9C,EAAwBA,EAAsBzvN,GAAQ,MACrEiJ,MAAO,CAACy3E,gBAAiBA,OAAOjoF,EAAxB,MACTA,EAAe,KAAO,0CAK7B62S,EAAqBx4J,UAAY,CAC/B29E,QAAS,UAAUr9L,OAAOy2E,WAC1B/9F,OAAQ,UAAUvjB,OAAOshH,WACzB4hH,sBAAuB,UAAU97C,KACjCt+K,SAAU,UAAU2hJ,KACpBu4J,UAAW,UAAUv4J,M,UAGRs4J,G,oLC7Ef,O,OACA,O,IACA,M,IACA,OACA,UAKA,O,IAEA,O,IACA,O,IACA,QACA,Q,IACA,QACA,Q,IACA,O,uDAEaG,E,EAAAA,a,gBAMX,WAAYvvM,IAAO,gGACXA,IADW,SA2CnBkoI,YAAc,WAGZ,IAAM38I,EAAW,EAAKyU,MAAMnzF,eAAey6L,SACvCj8G,mBAAmBA,EAAnBA,kBACAA,mBAAmB,EAAAX,WAAW58F,SAASC,SAASoC,iBACpD,UAAU0lC,eAAe,0BACzBhpC,OAAO6+F,KAAP,0CAAsDL,mBAAmB,EAAK2U,MAAMtqE,UAApF,UAAuG61D,EAAY,WAlDlG,EAqDnBinF,kBAAoB,SAAC3nL,GACdA,EAAEugB,OAAOuqI,QAAQ,oCAAuC9qJ,EAAEugB,OAAOuqI,QAAQ,WAAc,EAAK65J,sBAC/F,EAAKC,mBAvDU,EA2DnBA,gBAAkB,WAChB,UAAU55Q,eAAe,EAAKp6B,MAAMi0S,gBAAkB,2BAA6B,4BACnF,EAAK19H,SAAS,CACZ09H,iBAAkB,EAAKj0S,MAAMi0S,kBAC5B,WACG,EAAKj0S,MAAMi0S,gBACb5hT,SAASytD,iBAAiB,QAAS,EAAKi3H,mBAExC1kL,SAAS8pG,oBAAoB,QAAS,EAAK46E,uBAnE9B,EAwEnBm9H,iBAAmB,SAAC9kT,GAElB,OADA,UAAUgrC,eAAe,gBAAkBhrC,EAAEugB,OAAOu7C,QAAQipP,SACvD,UAAgBxtG,kBAAhB,gBAAqC,EAAKpiG,UAC7Cn1G,EAAE20F,kBACF30F,EAAE40F,iBACF,EAAK+vN,qBAAuB3kT,EAAEugB,OAAOuqI,QAAQ,EAAK31C,MAAM6vM,WAAa,4BAA8B,iBAAiBlpP,QAAQipP,OACrH,IA9EQ,EAmFnBE,oBAAsB,SAACx6M,GACrB,GAAI,EAAKq6M,iBAAiBr6M,GAAQ,CAIhC,IACMtK,EAAQx8F,SAASy8F,SAAW,KAAOrnF,EAAEmsS,UAAUljT,OAAO2B,SAASu8F,SAASt4F,MAAM,KAAM,GAAGsV,KAAK,KAAO,UACnGqjF,EAAmB,EAAK4U,MAAMtqE,SAASjjC,MAAM,QAenD,OAdI,UAAO8C,cACT7I,QAAQ4B,IAAI,sBAAuB,EAAK0xG,MAAMtqE,UAC9ChpC,QAAQ4B,IAAI,mBAAoB88F,IAElCv+F,OAAO6+F,KAPO,4CAQJV,EAAQI,EAAiB,GAAK,OAASC,mBAAmBD,EAAiB,IACnF,wBACA,yBAOK,IAzGQ,EA6GnB4kN,gBAAkB,WAChB,IAAMz6E,EAAkB,UAAO//N,yBACzB6gO,GAAmBvoO,SAASC,SAASo4F,eAC3C,OACE,8BAAI7G,UAAU,cACZ,8BAAIA,UAAU,oBACZ,6BAAGA,UAAU,mCACVo1D,IAAK,EAAK+3J,SAASx2Q,MACnBg6Q,aAAW,QACXxhT,KAAA,gCAAsCX,SAASC,SAASoC,eAAxD,2BAAiGk7F,mBAAmB,EAAK2U,MAAMtqE,UAC/H87I,QAAS,EAAKm+H,kBACf,gCAAMrwN,UAAU,qBAAhB,WAGJ,8BAAIA,UAAU,oBACZ,kCAAQA,UAAU,sCACVo1D,IAAK,EAAK+3J,SAAS7hN,SACnBqlN,aAAW,WACXz+H,QAAS,EAAKs+H,qBACpB,gCAAMxwN,UAAU,qBAAhB,cAUJ,8BAAIA,UAAU,oBACZ,kCAAQA,UAAU,uCACV2wN,aAAW,YACXv7J,IAAK,EAAK+3J,SAASnhN,UACnBkmF,QAAS,EAAKxxE,MAAMl2F,uBAAyB,EAAKo+N,YAAc,EAAKynE,kBAC3E,gCAAMrwN,UAAU,qBAAhB,eAGJ,8BAAIA,UAAU,oBACZ,8CAAoBxzE,IAAK,EAAKk0F,MAAMtqE,SAAUkV,MAAA,mCAA0C98C,SAASC,SAASoC,eAA5D,KAC5C,kCAAQmvF,UAAU,qCACV2wN,aAAW,UACXv7J,IAAK,EAAK+3J,SAASjhN,QACnBgmF,QAAS,EAAKm+H,kBACpB,gCAAMrwN,UAAU,qBAAhB,cAIL,EAAK0gB,MAAM3qF,aAAe,KAAOkgN,GAC9B,EAAKv1H,MAAMnzF,eAAeiZ,UAAY,EAAKk6E,MAAMu2H,UAAYF,EAAmB,KAClF,8BAAI/2I,UAAU,oBACZ,2CA/JS,EA2KnB4wN,aAAe,WACb,OACE,8BAAI5wN,UAAU,uBACZ,8BAAIA,UAAU,2DAA2D2wN,aAAW,SAClF,6BAAGxhT,KAAA,gCAAsCX,SAASC,SAASoC,eAAxD,2BAAiGk7F,mBAAmB,EAAK2U,MAAMtqE,UAC/H87I,QAAS,EAAKm+H,iBACdj7J,IAAK,EAAK+3J,SAASx2Q,MACnB2U,MAAM,kBAHT,UAKF,8BAAI00C,UAAU,8DACV2wN,aAAW,WACXv7J,IAAK,EAAK+3J,SAAS7hN,SACnB4mF,QAAS,EAAKs+H,qBAHlB,YAMA,8BAAIxwN,UAAU,+DACV2wN,aAAW,YACXv7J,IAAK,EAAK+3J,SAASnhN,UACnBkmF,QAAS,EAAKxxE,MAAMl2F,uBAAyB,EAAKo+N,YAAc,EAAKynE,kBAHzE,aAMA,8CAAoB7jS,IAAK,EAAKk0F,MAAMtqE,SAAUkV,MAAA,mCAA0C98C,SAASC,SAASoC,eAA5D,KAC5C,8BAAImvF,UAAU,6DACV2wN,aAAW,UACXv7J,IAAK,EAAK+3J,SAASjhN,QACnBgmF,QAAS,EAAKm+H,kBAHlB,cA/LN,EAAKl0S,MAAQ,CACXi0S,iBAAiB,GAEnB,EAAKF,qBAAuB,KAC5B,EAAK/C,SAAW,CACdx2Q,MAAO,UAAMk6Q,YACbvlN,SAAU,UAAMulN,YAChB3kN,QAAS,UAAM2kN,YACf7kN,UAAW,UAAM6kN,aAVF,E,oFAcC,YAClB,aAAEriT,UAAUupG,GAAG,UAAY+yB,mBAA3B,6BAA8C,0FACxC,EAAKolL,uBACP9iT,QAAQ4B,IAAI,4BAA6B,EAAKkhT,uBACxCY,EAAc,EAAK3D,SAAS,EAAK+C,wBAErCY,EAAYlnM,QAAQtkB,QAEtB,EAAK4qN,qBAAuB,MAPc,+CAU9C,aAAE3iT,QAAQwqG,GAAG,UAAYgzB,mBAAmB,WACtC,EAAKmlL,uBACP,EAAKA,qBAAuB,W,gDAKRl8H,GACiB,IAArCA,EAAUhuB,wBAAsE,IAAtC5wJ,KAAKsrG,MAAMslD,wBACvD5wJ,KAAK+6S,oB,8CAKP,aAAE3hT,UAAU6/N,IAAI,UAAYvjG,oBAC5B,aAAEv9H,QAAQ8gO,IAAI,UAAYtjG,qB,+BA2K1B,OACE,+BAAK/qC,UAAW,SAAW5qF,KAAK+G,MAAMi0S,gBAAkB,iBAAmB,KACzE,kCAAQpwN,UAAW,oCAChB5qF,KAAK+G,MAAMi0S,gBAAkB,+BAAiC,IAAKl+H,QAAS98K,KAAK+6S,iBAClF,gCAAMnwN,UAAU,qBAAoB,4CAAkB5iF,GAAG,yBAE1DhI,KAAKsrG,MAAM6vM,WAAan7S,KAAKw7S,eAAiBx7S,KAAKs7S,uB,kBA7NnDp5J,UAAY,CACjBi5J,WAAY,UAAU/4J,M,cA0OX,IAAAt2C,UARS,SAACxzG,GAAD,MAAY,CAClC6f,eAAgB7f,EAAMqN,gBACtBgb,YAAaroB,EAAMgR,YAAYqX,YAC/BiwI,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5Cx7I,uBAAwB9c,EAAMwc,UAAUM,uBACxC4U,eAAgB1xB,EAAMwc,UAAUkV,eAChCgX,SAAU1oC,EAAMgR,YAAY03B,YAEU,CACtChY,mCADa,CAEZ6xR,I,8EClQH,I,IAAA,MACA,O,IACA,MACA,S,IACA,Q,mDAEA,IAAMc,EAAkB,SAACrwM,GAAU,IAE1BkyB,EACyClyB,EADzCkyB,OAAQ6yB,EACiC/kD,EADjC+kD,2BAA4BE,EACKjlD,EADLilD,kCAAmCD,EAC9BhlD,EAD8BglD,+BAC5EE,EAA8CllD,EAA9CklD,+BAAgCorJ,EAActwM,EAAdswM,WAE5BC,EAAkB,WACtBD,EAAW1rN,QACPogE,GACFD,GAA2B,GAExBG,GACHD,GAAkC,IAItC,MAAe,eAAX/yB,EAEA,kCAAQ5yC,UAAU,uCAAuCkyF,QAAS++H,GAChE,gCAAMjxN,UAAU,qBAAhB,SAMJ,kCAAQA,UAAU,sDAAsDkyF,QAAS++H,KAIrFF,EAAgBz5J,UAAY,CAC1B1kB,OAAQ,UAAUh7F,QAGpB,IAUM8tJ,EAAqB,CACzBjgC,wDACAE,uE,WAGa,IAAAzkD,UAfS,SAACxzG,GAAU,IAC1BkzG,EAAqBlzG,EAAMgR,YAA3BkiG,kBAD0B,EAEwClzG,EAAMyvO,cAAxEz3E,EAF0B,EAE1BA,+BAAgCE,EAFN,EAEMA,+BACvC,MAAO,CACL9uC,wBAAyBlW,EAAkB/2G,OAC3C67J,iCACAE,oCASoC8/B,EAAzB,EAA6C,aAAmBqrH,K,6FCrD/E,O,OACA,O,IACA,O,6DAEe,SAACG,GAuEd,OAAO,IAAAhwM,UAhBiB,SAACxzG,GAAU,MACPA,EAAMgR,YAAzB2kH,EAD0B,EAC1BA,SAAUh5G,EADgB,EAChBA,MADgB,EAEC3c,EAAMwc,UAAjC89K,EAF0B,EAE1BA,cAAe7xL,EAFW,EAEXA,SAGtB,MAAO,CACLkU,QACAg5G,WACA91G,eALqB7f,EAAMqN,gBAM3BitL,gBACAxkB,SAAUrtK,EAASghC,QAAUhhC,EAASghC,QAAQqsI,SAAW,GACzDnsI,YAAalhC,EAASkhC,aAAelhC,EAASygC,MAC9CD,MAAOxgC,EAASwgC,SAIb,EArEoB,SAAC+pE,GAAU,IAE7B2iB,EAAgF3iB,EAAhF2iB,SAAU91G,EAAsEmzF,EAAtEnzF,eAAgBlD,EAAsDq2F,EAAtDr2F,MAAO29K,EAA+CtnF,EAA/CsnF,cAAexkB,EAAgC9iE,EAAhC8iE,SAAUnsI,EAAsBqpE,EAAtBrpE,YAAaV,EAAS+pE,EAAT/pE,MAoC9E,IAlCA,IAAAogF,YAAU,WACR,GAAKxpG,EAAe4jS,gBAAiB,UAAOl7S,YAA5C,CAGA,IAAIm7S,EAAc5iT,SAAS02F,eAAe,aACrCksN,GAkBHA,EAAY9sN,aAAa,gBAAiB++B,GAC1C+tL,EAAY9sN,aAAa,aAAc91F,SAASC,SAAS4b,OAASA,GAAS,IAC3E+mS,EAAY9sN,aAAa,gBAAiB0jG,GAAiB,IAC3DopH,EAAY9sN,aAAa,mBAAoB3tD,GAAS,IACtDy6Q,EAAY9sN,aAAa,sBAAuBk/E,GAAY,IAC5D4tI,EAAY9sN,aAAa,mBAAoBjtD,GAAe,OAtB5D+5Q,EAAc5iT,SAAS8oD,cAAc,WACzBgtC,aAAa,OAAO,mBAChC8sN,EAAY9sN,aAAa,KAAK,aAC9B8sN,EAAY9sN,aAAa,MAAM,gCAC/B8sN,EAAY9sN,aAAa,QAAQ,IAEjC8sN,EAAY9sN,aAAa,cAAe/2E,EAAe8jS,YAAc,IACrED,EAAY9sN,aAAa,oBAAqB91F,SAASC,SAASmC,QAAU,IAE1EwgT,EAAY9sN,aAAa,gBAAiB++B,GAC1C+tL,EAAY9sN,aAAa,aAAc91F,SAASC,SAAS4b,OAASA,GAAS,IAC3E+mS,EAAY9sN,aAAa,gBAAiB0jG,GAAiB,IAC3DopH,EAAY9sN,aAAa,mBAAoB0jG,GAAiB,IAC9DopH,EAAY9sN,aAAa,sBAAuB0jG,GAAiB,IACjEopH,EAAY9sN,aAAa,mBAAoB0jG,GAAiB,IAC9Dx5L,SAAS6C,KAAKkmD,YAAY65P,OAU3B,CAAC/tL,EAAU91G,EAAgBlD,EAAO29K,KAEnBx5L,SAAS02F,eAAe,aAExC,OAAO,KAGT,IAAM8rN,EAAaxiT,SAASg9F,cAAc,qBAC1C,OAAKwlN,EAKH,wBAACE,GAAD,gBAAsBxwM,EAAtB,CAA6BswM,WAAYA,KAJlC,U,0KClDb,IAAYp7R,E,wJAAZ,OAEiCyjN,EAApBA,kBAAoB,SAACi4E,GAAD,MAAqB,CACpD9wS,KAAMoV,EAAM6vD,qBACZxvD,QAAS,CAACq7R,oBAEqBC,EAApBA,kBAAoB,SAACl9L,GAAD,MAAqB,CACpD7zG,KAAMoV,EAAM8vD,qBACZzvD,QAAS,CAACo+F,oBAE0Bm9L,EAAzBA,uBAAyB,SAACC,GAAD,MAA0B,CAC9DjxS,KAAMoV,EAAM+vD,2BACZ1vD,QAAS,CAACw7R,yBAEqBC,EAApBA,kBAAoB,SAACC,GAAD,MAAqB,CACpDnxS,KAAMoV,EAAMgwD,qBACZ3vD,QAAS,CAAC07R,qB,8EChBiBC,EAAhBA,cAAgB,CAC3BC,eAAgB,iBAChBC,YAAa,cACbC,eAAgB,kBAG6BC,EAAlCA,gCAAkC,CAAC,QAAS,OAERC,EAApCA,kCAAoC,CAAC,QAAS,MAAO,WAAY,U,uJCR9E,I,EAAA,Q,oCAEgCC,EAAnBA,iBAAmB,SAACC,GAC/BA,EAASnxI,MAAK,SAASh+J,EAAOusE,IAC5B,aAAEA,GAASjjB,SAAS,qBACpBw3B,YAAW,YACT,aAAEvU,GAASjjB,SAAS,iCACnB,GAAKtpD,OAIiBovS,EAAhBA,cAAgB,SAACD,GAC5BA,EAASnxI,MAAK,SAASh+J,EAAOusE,IAC5B,aAAEA,GAAShjB,YAAY,qDAIG8lP,EAAjBA,eAAiB,SAACnjQ,GAC7BA,EAAQ17C,SAAQ,SAAC+7E,EAASvsE,GACpBusE,IACFA,EAAQj+E,UAAUC,IAAI,WAAY,YAClCuyF,YAAW,WACTvU,EAAQj+E,UAAUC,IAAI,iCACrB,GAAKyR,QAKasvS,EAAdA,YAAc,SAACpjQ,GAC1BA,EAAQ17C,SAAQ,SAAC+7E,GACXA,GACFA,EAAQj+E,UAAU27K,OAAO,WAAY,WAAY,oC,6NC/BvD,I,EAAA,O,oCAEuCslI,EAA1BA,wBAA0B,CACrC9pD,eAAgB,UAAUh9O,OAGW+mS,EAA1BA,wBAA0B,CACrC3kB,eAAgB,UAAU9gS,QAGa0lT,EAA5BA,0BAA4B,CACvCC,iBAAkB,UAAUjnS,OAGWknS,EAA5BA,0BAA4B,CACvCC,iBAAkB,UAAU7lT,QAGW8lT,EAA5BA,0BAA4B,CACvCz1S,GAAI,UAAUm6I,UAAU,CAAC,UAAUvpC,OAAQ,UAAUp2E,SACrDo4F,IAAK,UAAUhiB,OACfiiB,IAAK,UAAUjiB,OACf7nD,gBAAiB,UAAUguH,KAC3B2+H,iBAAkB,UAAU3+H,KAC5B4+H,iBAAkB,UAAU5+H,KAC5B6+H,oBAAqB,UAAU7+H,KAC/B7nL,MAAO,UAAU0hH,OACjBl9E,SAAU,UAAU/jC,S,4GC3BtB,MACA,OAEA,SACA,SACA,QACA,UACA,QACA,QACA,S,IACA,SACA,QACA,S,IACA,OACA,S,mDAEA,IAyEM24L,EAAqB,CACzButH,2D,WAGa,IAAA/xM,UAlBS,SAACxzG,GAAU,IAC1BiK,EAAajK,EAAM8J,UAAnBG,UAD0B,EAECjK,EAAMouB,wBAAjCa,EAF0B,EAE1BA,aAAcH,EAFY,EAEZA,UAGrB,MAAO,CACL7kB,YACAglB,eACAyC,eALuB1xB,EAAMwc,UAAxBkV,eAML5C,YACAjP,eANqB7f,EAAMqN,mBAcS2qL,EAAzB,EA7Ea,SAAChlF,GAAU,IAK/B,EAHC/oG,EAA6G+oG,EAA7G/oG,UAAWi+I,EAAkGl1C,EAAlGk1C,SAAUj5H,EAAwF+jF,EAAxF/jF,aAAcH,EAA0EkkF,EAA1ElkF,UAAW4C,EAA+DshF,EAA/DthF,eAAgB6zR,EAA+CvyM,EAA/CuyM,4BAA6B1lS,EAAkBmzF,EAAlBnzF,eAC5FggG,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAEvC2lM,GAAA,gCAAkB,WAAOC,GAAP,cAAyB33S,EAAzB,uDAAoC,KAApC,6EAEW,IAAA0iP,+BAA1Bx0O,EAFe,EAEfA,SAAUpd,EAFK,EAELA,MAAOkpB,EAFF,EAEEA,MACxB,UAAUghB,mBAAmB,kBAAmB,CAAC9sB,WAAUpd,QAAOkpB,UAE7D4J,IAAkBmuF,EALD,uBAMpB4lM,IANoB,mBAOb,GAPa,WAShBC,GAAgB,IAAAnqN,sBAAqBztF,EAAW,CAACA,GAAY7D,IAChD9N,SAAU0jH,EAVP,uBAWpB,IAAAsX,kBAAiB,wBAAyB,KAAM,wBAX5B,mBAYb,GAZa,QActB,IAAA7oG,iBACA,IAAA6wE,WAAU,CACRC,QAAQ,EACRC,aAAa,IAEZ9lE,MAAK,SAAC2lE,GAEL,GADAp+F,SAASC,SAAS4b,MAAQuiF,EAAaviF,MACnCkjG,EAAS,CACX,IAAI7jB,GAAS,IAAAL,WAAU1sE,EAAcH,GACjC62R,EAAe,CACjB,UAAa,EAAAhzC,4BAA4B74G,KACzC,OAAU99D,EAAS,GACnB,qBAAwB0pN,GAEvBxmN,EAAaviF,QACdgpS,EAAA,aAA+BzmN,EAAaviF,MAAQ,IAEtD4oS,EAA4BI,GAC5B9lT,OAAOm0H,wBAAyB,GAChC,IAAA4xL,qBAAoBD,QAEpB,IAAAxmG,+BACA,IAAAnlH,oBAGHjgE,OAAM,SAACp6B,IACN,IAAAw3H,kBAAiB,UAAU,IAAIC,MAAMz3H,IAChCkgH,IACH,IAAA7lB,oBA1CgB,mDAAlB,6CA+CN,OACE,wCACG,SAACyrN,GAAD,OAAsBv9J,EAASs9J,EAAgBrmT,UAAhB,EAA2BsmT,W,2GCtEjE,WACA,OACA,QACA,OAEA,QACA,UACA,SACA,SACA,QACA,QACA,QAmEMztH,GAjE6B4tH,EAAtBA,oBAAsB,SAACC,GAElC,OADAnmT,QAAQ4B,IAAI,4CAA6CukT,OACrD,IAAAn5S,cAAc7M,OAAOoB,SAChBpB,OAAOoB,OAAO4oC,YAAYg8Q,EAAiB/kT,SAASglT,WA8DpC,CACzBC,4DACAR,0DACA1gP,8C,WAGa,IAAAozH,aACb,IAAAxoC,aAAW,IAAAj8C,UAhBW,SAACxzG,GAAU,MAC6BA,EAAMgmT,uBAA7DC,EAD0B,EAC1BA,yBAA0BC,EADA,EACAA,0BACjC,MAAO,CACLC,6BAA8BF,EAAA,UAC9BG,iCAAkCF,EAAA,QAClCA,+BAWkCluH,EAAzB,EA7DS,SAAChlF,GAAU,IAExB+yM,EAC6F/yM,EAD7F+yM,6BAA8BI,EAC+DnzM,EAD/DmzM,6BAA8BC,EACiCpzM,EADjCozM,iCACjEb,EAAkGvyM,EAAlGuyM,4BAA6BE,EAAqEzyM,EAArEyyM,iBAAkB5gP,EAAmDmuC,EAAnDnuC,qBAAsBqhP,EAA6BlzM,EAA7BkzM,0BAEjEG,EAAsB,SAAC/9M,GAC3B5oG,QAAQ4B,IAAI,iCAAkCgnG,GAC1CA,GAASA,EAAM3sG,MAAQ2sG,EAAM3sG,KAAKW,eAAe,YACnDypT,EAA6Bz9M,EAAM3sG,OAiCvC,OA7BA,IAAA0tH,YAAU,YACJ,IAAA38G,aAAc7M,OAAOoB,SACnBpB,OAAO0uD,iBACT1uD,OAAO0uD,iBAAiB,UAAW83P,GAAqB,GAC/CxmT,OAAOymT,aAChBzmT,OAAOymT,YAAY,YAAaD,MAInC,KAEH,IAAAh9L,YAAU,WACH88L,IAAiC,EAAAxzC,4BAA4B74G,MACjB,kBAApCssJ,KACX,IAAApsN,iBACAurN,EAA4B,IAC5BQ,EAA6B,IAC7BlmT,OAAOm0H,wBAAyB,EAC5BoyL,EACFvhP,EAAqB,EAAAzgC,cAAcW,YACiB,aAA3CmhR,EAAA,UACTT,GAAiB,IAEjB,IAAAtuL,kBAAiB+uL,EAAA,iBAIpB,CAACC,EAA8BC,IAE3B,W,iGCjET,MACA,OACA,O,IACA,M,IAEA,QACA,QACA,U,mDAEA,IAAMxvI,EAAsB,SAACt3K,EAAUu3K,GACrC,IAAMz8C,EAAS,GAEf,OAAQ96H,GACN,IAAK,YACH,IAAKu3K,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAEmB,IAAxBy8C,EAAa16K,OACfi+H,EAAO39H,KAAK,gCACHo6K,EAAa16K,OAAS,IAC/Bi+H,EAAO39H,KAAK,+BAET,wBAAwBwI,KAAK4xK,IAChCz8C,EAAO39H,KAAK,sCAEd,MAEF,IAAK,QACH,IAAKo6K,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAEJ,4CAA4Cn1H,KAAK4xK,IACpDz8C,EAAO39H,KAAK,mCAEd,MAEF,IAAK,WACH,IAAKo6K,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAET,MAEF,IAAK,SACH,IAAKy8C,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAGT,IADc,6CACHn1H,KAAK4xK,GAEd,OADAz8C,EAAO39H,KAAK,sCACL29H,EAKb,OAAOA,GAGHmsL,EAAgB,SAACvzM,GAAU,IAExB1zG,EAA2G0zG,EAA3G1zG,SAAUmJ,EAAiGuqG,EAAjGvqG,SAAUqoB,EAAuFkiF,EAAvFliF,eAAgB3O,EAAuE6wF,EAAvE7wF,KAAM8O,EAAiE+hF,EAAjE/hF,eAAgBD,EAAiDgiF,EAAjDhiF,qBAAsB07P,EAA2B15K,EAA3B05K,gBAAiB0C,EAAUp8K,EAAVo8K,OAGlGo3B,EAAkB,SAAClnT,EAAUV,GACjCkyB,mBACGxxB,EAAWV,KAIV6nT,EAAgB,SAACnnT,EAAUV,GAC3B6J,EAASnJ,KAAcV,GACzBkyB,mBACGxxB,EAAWV,KAKZyoO,EAAS,SAAC/+H,IACd,IAAAo+M,aAAYp+M,EAAOhpG,EAAUmnT,EAAex1R,EAAgBD,EAAsB4lJ,KAGpF,IAAA+vI,qBAAoBj6B,EAAiBrlD,EAAQ5+N,EAASnJ,IAEtD,IAIMwuR,EAAcx+Q,MAAMC,QAAQ0hB,EAAe3xB,OAAgB2xB,EAAe3xB,GAAUnD,OAGpF2W,EAAoB,UAAbxT,GAAqC,aAAbA,EAA0B,OAASA,EAExE,OACE,+BAAKgzF,UAAU,cACb,mCAAWA,UAAU,aACVx/E,KAAMA,EACNlU,MAAO6J,EAASnJ,GAChBsnT,SARQ,CAAC,YAAa,QAAS,SAAU,eAQhB/kT,SAASvC,GAClC0L,KAAK,QACLq9B,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAI,eAAiBpQ,IAChDk+N,SAjBE,SAACl1H,IAChB,IAAAoqI,eAAcpqI,EAAOhpG,EAAUknT,EAAiBv1R,EAAgBD,EAAsB4lJ,IAiBzEywD,OAAQA,EACR1nO,MAAOmuR,EACP+4B,gBAAiB,CAACz3B,UAClB03B,WACEh5B,EAAc3rQ,EAAKC,cAAc,CAAC1S,GAAKuhB,EAAe3xB,GAAU,KAAM,GAExE61P,QAAQ,eAKzBoxD,EAAc38J,UAAY,CACxBtqJ,SAAU,UAAU4qC,OAAOy2E,WAC3B+rK,gBAAiB,UAAU5iI,KAAKnpC,WAChCyuK,OAAQ,UAAUtlI,MAGpB,IAQMkuC,EAAqB,CACzBlnK,gCACAE,6C,WAGa,IAAAy+H,aACb,IAAAj8C,UAdsB,SAACxzG,GAAU,MACEA,EAAMwc,UACzC,MAAO,CACL/T,SAH+B,EAC1BA,SAGLwoB,eAJ+B,EAChBA,kBAaQ+mK,EAAzB,CAA6CuuH,K,gICvI/C,O,UAE6B,SAACvzM,GAAU,IAE/Bk1C,EAAYl1C,EAAZk1C,SAF+B,GAIQ,IAAAW,WAAS,GAJjB,qBAI/B6jI,EAJ+B,KAIdq6B,EAJc,KAgBtC,OAAO7+J,EAASwkI,GAVe,WAE7B,OADAq6B,GAAmB,GACZ,IAAIjpT,SAAQ,SAACC,GAClBq4F,YAAW,WACT2wN,GAAmB,GACnBhpT,MACC,a,yICdT,O,WACA,MACA,OACA,QACA,QACA,O,IACA,SAEA,QACA,Q,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,OACA,Q,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,Q,uDAGMipT,G,gBAOJ,WAAYh0M,IAAO,gGACXA,IADW,SAOnBs7H,kBAAoB,aAPD,EAWnB7pD,qBAAuB,WAA2C,IAA1C0wB,EAA0C,uDAA1B,EAAAnuJ,eAAeC,OAC/CztC,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SAEjD,EAAK4jG,MAAMthF,eACTlY,EAAmBwuC,MAChB,EAAKgrD,MAAMl2F,uBAMd,EAAKu4L,mBAAmB,oBALxB,EAAKriG,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBwjL,kBAMJ,EAAKE,mBAAmB,oBAG1B,EAAKriG,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBwjL,mBA9Ba,EAmCnBE,mBAAqB,SAACxnL,GACpB,EAAKm3J,UAAL,gBACGn3J,GAAiB,EAAKpf,MAAMof,MArCd,EAyCnBo5R,aAAe,WACb,UAAUp+Q,eAAe,kBACzB,EAAKm8I,SAAS,CAACkiI,eAAgB,EAAKz4S,MAAMy4S,iBA3CzB,EA8CnBC,gBAAkB,WAChB,UAAUt+Q,eAAe,cACI,OAAzBhpC,OAAO2B,SAASwb,MAAkBnd,OAAO2B,SAASC,KAAKI,SAAS,iBAClE,EAAA+3B,YAAYn9B,KAAK,kBAjDF,EAwInB2qT,aAAe,SAACC,GAEd,OADW,aAAOA,GAAK,SAAAjoT,GAAA,OAAKA,EAAEkoT,gBAClB93S,KAAI,SAAApQ,GAAA,OACd,8BAAIkzF,UAAU,kCAAkCpzF,IAAKE,EAAEjB,KAAO,IAAMiB,EAAE0f,IAAM,IAAM1f,EAAEkoT,cAClF,6BAAG7lT,KAAMrC,EAAE0f,IAAKV,OAAO,SAASmpS,IAAI,uBAAuBnoT,EAAEjB,WA1IjE,EAAKsQ,MAAQ,CACXy4S,eAAe,GAHA,E,yEAsDjB,IAAM1tS,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAI/Co4S,GAFqBhuS,EAAmBiuS,kBACxC3mT,SAASC,SAAS2b,WAAalD,EAAmBkuS,oBACRhgT,KAAKsrG,MAAM/jG,SAAS9S,UAC7DuL,KAAKsrG,MAAM4+L,wBAA2BlqS,KAAKsrG,MAAM8+L,wBAA0B,IAC7EpqS,KAAKsrG,MAAM/jG,SAAStH,MAAK,SAACusS,GAAD,OAAeA,EAAUtgL,SAASjsH,MAAK,SAAAksH,GAAA,OAAYA,EAAQugL,yBAEnFuT,EAAajgT,KAAKsrG,MAAMnzF,eAAeulI,QAAU,GAAK,CAC1DxT,SAAU,QACVvqI,MAAO,QAGHugT,EAAuB9mT,SAASC,SAAS8mT,oBAAqD,IAA/BngT,KAAKsrG,MAAM+4H,gBAC1E+7E,EAAWpgT,KAAKsrG,MAAMnzF,eAAe8gQ,UAAYj5Q,KAAKsrG,MAAMnzF,eAAeE,UAAW,IAAArT,YACtFq7S,EAAsD,kBAAjCrgT,KAAKsrG,MAAMxxG,SAAS+d,SAE/C,OACE,+BAAK+yE,UAAU,oBACb,+BAAKA,UAAU,oBACX5qF,KAAKsrG,MAAMg1M,eAuBT,KAtBF,+BAAK11N,UAAU,0BACZ5qF,KAAKsrG,MAAMi1M,gBACV,+BAAK31N,UAAU,wBACb,kCAAQA,UAAU,2CAChB,4CAAkB5iF,GAAG,oBAEvB,kCAAQ4iF,UAAU,yCAChB,4CAAkB5iF,GAAG,mBAGvB,KACJ,wCACA,wCACA,yCAUHhI,KAAKsrG,MAAMnzF,eAAe8gQ,SACzB,+BAAKruL,UAAU,0BACZw1N,EAAW,KAAO,+BAAKrhT,KAAK,IAAAo+I,mBAAkBn9I,KAAKsrG,MAAMnzF,gBAClC9D,MAAO4rS,EACP/rG,IAAI,OAAOp3B,QAAS98K,KAAKy/S,mBAEjD,KACHz/S,KAAKsrG,MAAMnzF,eAAe8gQ,WAAaj5Q,KAAKsrG,MAAMg1M,eACjD,+BAAK11N,UAAU,2BACZ94E,EAAmBgwN,cAAgB,wCAAiB,KACrD,wCACA,wCACC9hO,KAAKsrG,MAAMw1H,WAAa9gO,KAAKsrG,MAAMw1H,UAAUrsO,OAC1C,mCAAeqoL,QAAS98K,KAAKu/S,eAC7BW,EACE,KACA,wCAGLpuS,EAAmBk1H,cAAgBk5K,EAAuB,wCAAwB,KAIlFJ,GAAqBO,IAAuBH,EAAuB,mCAAeM,eAAe,IAAU,KAC3GH,IAAuBH,EAAuB,wCAA8B,MAE7E,MAEN,+BAAKt1N,UAAW,yBAA2B5qF,KAAK+G,MAAMy4S,cAAgB,iCAAmC,IACpGnrS,MAAO,CAACxU,OAASG,KAAK+G,MAAMy4S,cAA8C,GAA9Bx/S,KAAKsrG,MAAMw1H,UAAUrsO,OAAc,IAClF,8BAAIm2F,UAAU,6BACX5qF,KAAK0/S,aAAa1/S,KAAKsrG,MAAMw1H,kB,kBAtIjC5+E,UAAY,CACjBq+J,gBAAiB,UAAUn+J,KAC3Bk+J,eAAgB,UAAUl+J,M,GAqJxBq+J,GAA0B,IAAAlwH,aAAW,SAAAjlF,GAAA,OAAS,wBAACg0M,EAAkBh0M,M,WAkBxD,IAAAQ,UAhBS,SAACxzG,GAAU,IAC1BytB,EAAwCztB,EAAxCytB,eAAgB3jB,EAAwB9J,EAAxB8J,UAAWoF,EAAalP,EAAbkP,UAClC,MAAO,CACLyW,eAAgB8H,EAAe9H,eAC/BwG,qBAAsBsB,EAAetB,qBACrCW,sBAAuBW,EAAeX,sBACtC7iB,UAAWH,EAAUG,UACrBgF,SAAUC,EAAUD,SACpBu5N,UAAWxoO,EAAMu1I,gBAAgBizF,UACjC3oN,eAAgB7f,EAAMqN,gBACtB0+N,gBAAiB/rO,EAAM+sO,iBAAiBhB,gBACxC6lE,uBAAwB5xS,EAAMo5B,wBAAwBw4Q,uBACtDE,uBAAwB9xS,EAAMo5B,wBAAwB04Q,0BAIlB,CACtCphR,kCACAoF,yCAFa,CAGZqyR,I,yGCzMH,O,OACA,OACA,OAEA,QACA,QACA,QACA,SACA,Q,WAEA,QACA,Q,OACA,Q,IACA,MACA,QACA,QACA,Q,IACA,QACA,S,mDAEA,IAAMC,EAAqB,SAACp1M,GAAU,IAE7BlvC,EAGsEkvC,EAHtElvC,kBAAmBpmD,EAGmDs1F,EAHnDt1F,aAAcgmD,EAGqCsvC,EAHrCtvC,qBAAsB2kP,EAGer1M,EAHfq1M,4BAA6B1tR,EAGdq4E,EAHcr4E,kBACzF2tR,EAE2Et1M,EAF3Es1M,4BAA6BC,EAE8Cv1M,EAF9Cu1M,iCAAkCC,EAEYx1M,EAFZw1M,2BAA4BC,EAEhBz1M,EAFgBy1M,4BAC3FC,EAC2E11M,EAD3E01M,kCAAmCjrM,EACwCzK,EADxCyK,SAAU3rF,EAC8BkhF,EAD9BlhF,iBAAkBM,EACY4gF,EADZ5gF,YAAa05G,EACD94B,EADC84B,wBAAyBjsH,EAC1BmzF,EAD0BnzF,eACrGknD,EAA2EisC,EAA3EjsC,sBAAuB4hP,EAAoD31M,EAApD21M,gBAAiB/kP,EAAmCovC,EAAnCpvC,gCALN,GAMY,IAAAilF,UAAS,IANrB,qBAM7B0J,EAN6B,KAMXq2J,EANW,KAQ9BC,EAAsB/kP,KAAsB,IAAAyjB,yBAAwBzjB,GAAqB,GAAKwkP,EAYpG,IAVA,IAAAj/L,YAAU,WACR,IAAIxpG,EAAeM,SAAnB,CAGA,IAAM8oC,GAAe,IAAA0qD,mBAAkB7vC,EAAmBpmD,EAAc,SACxEkrS,EAAoB3/P,GAAgB,OAEnC,CAACo/P,EAA6BQ,EAAqBN,EACpDC,EAA4BE,EAAmCD,EAA6BE,KAEzFp2J,EAAiBp2J,QAAU0jB,EAAeM,SAC7C,OAAO,KAGT,IAAM40F,GAAyB,IAAA/tB,qBAAoBljB,EAAmBpmD,GAoCtE,OACE,+BAAK40E,UAAU,uBACb,gCAAMA,UAAU,6BACd,4CAAkB5iF,GAAG,uBADvB,IAII,gCAAM4iF,UAAU,kCACbyiB,GAA0BA,EAAuBhR,aAAegR,EAAuBn2G,OAAOyH,QAAQ,SAAU,IAAM,OAS7H,wCACG,SAACkpS,GAAD,OACC,wCACG,SAAC51M,GAAD,OACC,8BAAIrH,UAAU,4BACXigE,EAAiB/iJ,KAAI,SAAAo4E,GACpB,IAAMi5E,EAAW9rD,GAA2BntB,EAAOC,WAAWn4E,KAAOqlG,EAAuBrlG,GACtFoyE,GAAS,IAAAo+B,iBAAgBt4B,EAAOC,YACtC,OACE,8BAAIyK,UAAW,sBAAwB1K,EAAOC,WAAWn4E,IAAOmxJ,EAAW,oBAAsB,IAC7F3hK,IAAK0oF,EAAOC,WAAWn4E,GACvB80K,QAAS,kBA7DJ,SAAC58F,EAAQ2nN,EAAsB51M,GAExD,IAAMw1M,EAAe,UAAUrlQ,mBAAmBg6B,GAC5CysM,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCyC,sBAAwBu7P,EACxD,EAAA9kQ,6BAA6B6C,mBAAqBiiQ,EAGtD,GAFA,UAAUtmQ,eAAe0nO,GAErBg/B,IACF,OAAO,EAGL,UAAOhnS,aACT7I,QAAQ4B,IAAI,iBAAkBsmF,EAAO78E,SAGnC0yG,GACFquB,mBACGh6G,EAAmB,CAClBM,cACAzZ,gBAAiBivE,EAAO78E,QACxBiD,OAAQ45E,EAAO78E,QAAQiD,UAK7B01D,EAAqBkkB,EAAO78E,QAAS64D,IACrC,IAAAoqB,iBAAgBpG,EAAO78E,UACvB,IAAAyvF,sBAAqB5S,EAAO78E,SAC5B4uF,EAAmB/R,EAAO78E,SAC1Bg8D,IACApsC,IA8BmCmuR,CAAmBlhO,EAAQ2nN,EAAsB51M,IAChE59E,MAAO+lE,gBAa/BsmO,EAAmBx+J,UAAY,CAC7BnsC,SAAU,UAAUqsC,KACpB13H,YAAa,UAAUkvB,MAAV,wBACbzzB,cAAe,UAAUyzB,MAAV,qBAGjB,IA8BM02I,EAAqB,CACzBt0H,4CACA/oC,sCACAmxG,kDACA/kE,+C,WAGa,IAAAysC,UArCS,SAACxzG,EAAOqvP,GAAa,MACgBrvP,EAAM0zG,UAA1Di1M,EADoC,EACpCA,gBAAiB/kP,EADmB,EACnBA,gCAClBmlP,EAAqB/oT,EAAM0zG,UAAU5vC,kBACpCpmD,EAAgB1d,EAAMyc,YAAtBiB,aACAoU,EAAoB9xB,EAAMqY,YAA1ByZ,iBACDgyC,EAAoBurL,EAASxhO,eAAiBk7R,EAC9ClpS,EAAiB7f,EAAMqN,gBAE7B,MAAO,CACLy2D,oBACAF,kCACAlmD,eACAoU,mBACAu2R,4BAA6BvkP,EAAoBA,EAAkBujB,yBAA2B,KAC9FohO,4BAA6B3kP,GAAkD,gBAA7BA,EAAkB91D,QACjEsB,MAAMC,QAAQu0D,EAAkBz4D,UAAUmP,SAA5B,YACbspD,EAAkBz4D,UAAUmP,SAA5B,WAAmDO,KAAK,KAAO,KACnE2tS,kCAAmC5kP,EAAoBA,EAAkBz4D,UAAUs8E,wBAA0B,KAC7G4gO,iCAAkCzkP,GAAqBx0D,MAAMC,QAAQu0D,EAAkBz4D,UAAUmP,SAA5B,iBACjEspD,EAAkBz4D,UAAUmP,SAA5B,gBAAwDO,KAAK,KAC7D,KACJytS,2BAA4B1kP,GAAqBx0D,MAAMC,QAAQu0D,EAAkBz4D,UAAUmP,SAA5B,WAC3DspD,EAAkBz4D,UAAUmP,SAA5B,UAAkDO,KAAK,KACvD,KACJutS,4BAA6BxkP,EAAoBA,EAAkB1jD,kBAAkB1C,GAAgB,KACrGirS,kBACA9oS,oBAWoCm4K,EAAzB,CAA6CowH,I,wGCpK5D,O,OACA,O,IACA,M,IAEA,SACA,Q,IACA,S,IACA,S,IACA,S,IACA,QACA,QACA,Q,IACA,SACA,Q,IACA,S,IACA,Q,IACA,S,mDAEA,IAAMY,EAAsB,SAACh2M,GAAU,IAE9BlvC,EAC6CkvC,EAD7ClvC,kBAAmB25C,EAC0BzK,EAD1ByK,SAAUrrF,EACgB4gF,EADhB5gF,YAAa05G,EACG94B,EADH84B,wBAAyBh6G,EACtBkhF,EADsBlhF,iBAAkB+tF,EACxC7M,EADwC6M,QAC1Fy/C,EAAkDtsD,EAAlDssD,2BAA4B3lE,EAAsBqZ,EAAtBrZ,mBAE9B,IAAK71B,EACH,OAAO,KAGT,IAAMmlP,EAAoB,SAACC,GACpBzrM,GAAayrM,IAGlBp9K,mBACGh6G,EAAmB,CAClBM,cACAzZ,gBAAiBuwS,EACjBl7S,OAAQk7S,EAAcl7S,OACtB6C,SAAUyuJ,KAGd3lE,MAGF,OACE,wCACE,mCAAyB9rE,cAAei2C,EAAmBqlP,kBAAmBF,IAChD,mBAA7BnlP,EAAkB91D,QAAiC6xG,GAAWpC,EAAwH,KAA5G,mCAAgC5vF,cAAei2C,EAAmBqlP,kBAAmBF,IAChK,mCAAyBp7R,cAAei2C,EAAmB87B,SAAS,kBAAkBupN,kBAAmBF,IACxG7sT,OAAOmc,KAAP,gBAA0B1W,SAASiiE,EAAkB91D,QAAU,mCAAyB6f,cAAei2C,EAAmB87B,SAAS,wBAAwBupN,kBAAmBF,IAAuB,KACxK,gBAA7BnlP,EAAkB91D,QAA8B6xG,GAAWpC,EAAuI,KAA3H,mCAAyB5vF,cAAei2C,EAAmB87B,SAAS,aAAaupN,kBAAmBF,IAC9I,iBAA7BnlP,EAAkB91D,QAA2D,eAA7B81D,EAAkB91D,SAA4ByvG,EACzF,mCAA8B5vF,cAAei2C,IAC7C,KACwB,qBAA7BA,EAAkB91D,OAAgC,mCAA8B6f,cAAei2C,EAAmBqlP,kBAAmBF,IAAuB,KAE/H,eAA7BnlP,EAAkB91D,OAA0B,mCAAkB6f,cAAei2C,EAAmB2rO,YAAY,IAAU,KACzF,eAA7B3rO,EAAkB91D,QAA2ByvG,EACxC,mCAA8B5vF,cAAei2C,EACf61B,mBAAoBA,EACpBwvN,kBAAmBF,IACjD,KACwB,cAA7BnlP,EAAkB91D,OACf,mCAA6B6f,cAAei2C,EACf61B,mBAAoBA,EACpBwvN,kBAAmBF,IAChD,OAKVD,EAAoBp/J,UAAY,CAC9BnsC,SAAU,UAAUqsC,KACpB13H,YAAa,UAAUkvB,MAAV,wBACbzzB,cAAe,UAAUyzB,MAAV,qBAGjB,IAcM02I,EAAqB,CACzBlsD,mD,WAIE,IAAAt4B,UAnBoB,SAACxzG,EAAOqvP,GAAa,IACpCvrL,EAAqB9jE,EAAM0zG,UAA3B5vC,kBACAhyC,EAAoB9xB,EAAMqY,YAA1ByZ,iBACA+tF,EAAW7/G,EAAMqN,gBAAjBwyG,QACAy/C,EAA8Bt/J,EAAMk4L,WAApC54B,2BAEP,MAAO,CACLx7F,kBAAmBurL,EAASxhO,eAAiBi2C,EAC7ChyC,mBACA+tF,UACAy/C,gCASyB04B,EAAzB,EAA6C,SAAChlF,GAC5C,OACI,wCACG,SAACrZ,GAAD,OAAwB,wBAACqvN,GAAD,gBAAyBh2M,EAAzB,CAAgCrZ,mBAAoBA,Y,yOC/FzFv9F,OAAOkC,eAAeZ,EAAS,aAAc,CAC3CkB,OAAO,IAETlB,EAAQw8C,QAAUx8C,EAAQ63P,WAAa73P,EAAQ0rT,+BAAiC1rT,EAAQ2rT,mBAAqB3rT,EAAQ4rT,kBAAoB5rT,EAAQ6rT,aAAe7rT,EAAQ8rT,iBAAc9uP,EAEtL,IAAIw5M,EAAW93Q,OAAO+2B,QAAU,SAAU/U,GAAU,IAAK,IAAIniB,EAAI,EAAGA,EAAIk4Q,UAAUh4Q,OAAQF,IAAK,CAAE,IAAIwsC,EAAS0rO,UAAUl4Q,GAAI,IAAK,IAAIiD,KAAOupC,EAAcrsC,OAAOC,UAAUC,eAAeC,KAAKksC,EAAQvpC,KAAQkf,EAAOlf,GAAOupC,EAAOvpC,IAAY,OAAOkf,GAEnPqrS,EAAe,WAAc,SAASC,EAAiBtrS,EAAQ40F,GAAS,IAAK,IAAI/2G,EAAI,EAAGA,EAAI+2G,EAAM72G,OAAQF,IAAK,CAAE,IAAI0tT,EAAa32M,EAAM/2G,GAAI0tT,EAAWprT,WAAaorT,EAAWprT,aAAc,EAAOorT,EAAWt1C,cAAe,EAAU,UAAWs1C,IAAYA,EAAWr1C,UAAW,GAAMl4Q,OAAOkC,eAAe8f,EAAQurS,EAAWzqT,IAAKyqT,IAAiB,OAAO,SAAUC,EAAaC,EAAYC,GAAiJ,OAA9HD,GAAYH,EAAiBE,EAAYvtT,UAAWwtT,GAAiBC,GAAaJ,EAAiBE,EAAaE,GAAqBF,GAA7gB,GAEfG,EAASr0D,EAAQ,GAEjBs0D,EAUJ,SAAgC7rS,GAAO,OAAOA,GAAOA,EAAIpf,WAAaof,EAAM,CAAE+7B,QAAS/7B,GAVzEy3O,CAAuBm0D,GAEjCE,EAAyBv0D,EAAQ,KAEjCw0D,EAAax0D,EAAQ,GAErBy0D,EAAcz0D,EAAQ,GAEtBI,EAAqBJ,EAAQ,KAIjC,SAAS00D,EAAgBx/N,EAAUg/N,GAAe,KAAMh/N,aAAoBg/N,GAAgB,MAAM,IAAIS,UAAU,qCAEhH,SAASC,EAA2B39S,EAAMpQ,GAAQ,IAAKoQ,EAAQ,MAAM,IAAI49S,eAAe,6DAAgE,OAAOhuT,GAAyB,iBAAhB,IAAOA,EAAP,0BAAOA,KAAqC,mBAATA,EAA8BoQ,EAAPpQ,EAIlO,IAAIitT,EAAc9rT,EAAQ8rT,YAAc,IACpCD,EAAe7rT,EAAQ6rT,aAAe,IACtCD,EAAoB5rT,EAAQ4rT,kBAAoB,EAChDD,EAAqB3rT,EAAQ2rT,mBAAmC,EAAdG,EAClDJ,EAAiC1rT,EAAQ0rT,+BAAiCI,EAAc,EAExF94C,EAAe,CACjBxuF,QAAS,EACT2pH,OAAQ,UAGNt2C,EAAa,SAAUi1D,GAGzB,SAASj1D,IACP,IAAIqf,EAEA61C,EAAOC,EAEXN,EAAgB1iT,KAAM6tP,GAEtB,IAAK,IAAIo1D,EAAOx2C,UAAUh4Q,OAAQyuT,EAAOt7S,MAAMq7S,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC3ED,EAAKC,GAAQ12C,UAAU02C,GAGzB,OAAeJ,EAASC,EAAQJ,EAA2B5iT,MAAOktQ,EAAOrf,EAAWu1D,WAAa1uT,OAAO2uT,eAAex1D,IAAah5P,KAAKO,MAAM83Q,EAAM,CAACltQ,MAAMmtD,OAAO+1P,KAAiBF,EAAMj8S,MAAQylQ,EAAS,GAAIxD,GAAeg6C,EAAMlmR,MAAQ,WAC1OkmR,EAAMM,8BAAgC,KACtCN,EAAM1lI,SAAS0rF,IACdg6C,EAAMO,WAAa,SAAU/oI,EAASgpI,GAKvC,OAAOhpI,EAFwBgpI,EAAmBp5S,KAAKsnE,IAAI8oG,GAAWpwK,KAAKqnE,GAAK,EAAI,OAGnFuxO,EAAMS,iBAAmB,WAC1BT,EAAM1lI,UAAS,SAAUlZ,EAAWs/I,GAClC,IAAIC,EAAcD,EAAMC,YACpBH,EAAmBE,EAAMF,iBACzBhpI,EAAUpW,EAAUoW,QAEpB+oI,EAAaP,EAAMO,WAAW/oI,EAASgpI,GAM3C,OAJID,GAAcI,IAChBnpI,EAAU+oI,GAGL,CAAE/oI,QAASA,OAEXooI,EAA2BI,EAAnCD,GAwHL,OA1KF,SAAmBa,EAAUC,GAAc,GAA0B,mBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIlB,UAAU,qEAAoEkB,EAApE,0BAAoEA,KAAeD,EAASjvT,UAAYD,OAAO6C,OAAOssT,GAAcA,EAAWlvT,UAAW,CAAEwuF,YAAa,CAAEjsF,MAAO0sT,EAAU/sT,YAAY,EAAO+1Q,UAAU,EAAMD,cAAc,KAAek3C,IAAYnvT,OAAOovT,eAAiBpvT,OAAOovT,eAAeF,EAAUC,GAAcD,EAASR,UAAYS,GAc/dE,CAAUl2D,EAAYi1D,GAuCtBf,EAAal0D,EAAY,CAAC,CACxBr2P,IAAK,oBACLN,MAAO,WACqB,aAAtB8I,KAAK+G,MAAMo9R,QACbnkS,KAAKs6D,UAGR,CACD9iE,IAAK,qBACLN,MAAO,SAA4B8sT,EAAW5/I,GACxCA,EAAU+/H,SAAWnkS,KAAK+G,MAAMo9R,SACR,aAAtBnkS,KAAK+G,MAAMo9R,QACbnkS,KAAKs6D,QAGmB,aAAtBt6D,KAAK+G,MAAMo9R,QACbnkS,KAAKikT,UAIV,CACDzsT,IAAK,uBACLN,MAAO,WACLmvK,cAAcrmK,KAAKkkT,oBACnBviK,aAAa3hJ,KAAKsjT,iCAEnB,CACD9rT,IAAK,QACLN,MAAO,WACL8I,KAAKkkT,mBAAqBt8I,YAAY5nK,KAAKyjT,iBAAkBzjT,KAAKsrG,MAAM64M,YACxEnkT,KAAKs9K,SAAS,CAAE6mH,OAAQ,cAEzB,CACD3sS,IAAK,OACLN,MAAO,WACLmvK,cAAcrmK,KAAKkkT,oBACnBlkT,KAAKkkT,mBAAqB,KAE1B,IAAIE,EAA+BpkT,KAAKqkT,WAAarkT,KAAKsrG,MAAMg5M,gBAAkB5C,EAAiC,EAEnH1hT,KAAKsjT,8BAAgC50N,WAAW1uF,KAAK88B,MAAOsnR,GAE5DpkT,KAAKs9K,SAAS,CAAE9C,QAAS,QAE1B,CACDhjL,IAAK,UACLN,MAAO,WACL,OAAO8I,KAAK+G,MAAMyzK,QAAU,GAAKx6K,KAAK+G,MAAMyzK,SAAW,MAExD,CACDhjL,IAAK,aACLN,MAAO,WACL,IAAIqtT,EAA0C,aAAtBvkT,KAAK+G,MAAMo9R,OAAwBud,EAAiCC,EAExFttS,EAAQ,CACV6uH,QAAS,IACTvC,UAAW,UAAY3gI,KAAK+G,MAAMyzK,QAAU,IAAM,IAClD+wH,gBAAiB,OACjBH,WAAY,aAAemZ,EAAoB,YAC/C5kT,MAAO,OACP6kT,WAAY,sBAed,OAZOxkT,KAAKsrG,MAAM1gB,YAChBv2E,EAAMxU,OAAS,MACfwU,EAAMqkG,gBAAkB,MACxBrkG,EAAMqnB,SAAW,YAGf17B,KAAKqkT,UACPhwS,EAAM6uH,QAAU,IAEhB7uH,EAAM6uH,QAAU,IAGXspI,EAAS,GAAIn4P,EAAOrU,KAAKsrG,MAAMj3F,SAEvC,CACD7c,IAAK,SACLN,MAAO,WACL,MAA0B,WAAtB8I,KAAK+G,MAAMo9R,OACNme,EAAQ9vQ,QAAQ0P,cAAc,MAAO,MACnCliD,KAAKsrG,MAAMm5M,gBACbzkT,KAAKsrG,MAAMm5M,gBAAgBr6S,KAAKC,MAAMrK,KAAK+G,MAAMyzK,UAGnD8nI,EAAQ9vQ,QAAQ0P,cACrB,MACA,CAAE0oC,UAAW5qF,KAAKsrG,MAAM1gB,WACxBxgF,KAAKC,MAAMrK,KAAK+G,MAAMyzK,aAGxB,CAAC,CACHhjL,IAAK,cACLN,MAAO,SAAqBo0G,EAAOvkG,GACjC,OAAOukG,EAAMlkD,QAAU,GAAK,CAAC,SAAU,YAAYptD,QAAQ+M,EAAMo9R,SAAW,IAE7E,CACD3sS,IAAK,aACLN,MAAO,SAAoBo0G,EAAOvkG,GAChC,OAAyB,IAAlBukG,EAAMlkD,SAAiB,CAAC,WAAY,WAAWptD,QAAQ+M,EAAMo9R,SAAW,IAEhF,CACD3sS,IAAK,2BACLN,MAAO,SAAkC0nL,EAAWxa,GAClD,OAAIypF,EAAW62D,YAAY9lI,EAAWxa,GAC7B,CAAE+/H,OAAQ,YAGft2C,EAAW82D,WAAW/lI,EAAWxa,GAC5B,CAAE+/H,OAAQ,YAGZ,SAIJt2C,EA7JQ,CA8Jfw0D,EAAOx2M,WAETgiJ,EAAW3rG,UAAY,CACrBt3D,UAAW43N,EAAWhgR,OACtB4kB,QAASo7P,EAAW5pM,OACpB+qM,YAAanB,EAAW5pM,OACxB4qM,iBAAkBhB,EAAW5pM,OAC7B0rM,gBAAiB9B,EAAWpgK,KAC5B+hK,WAAY3B,EAAW5pM,OACvBi0J,MAAO21C,EAAWhgR,OAClBnuB,MAAOmuS,EAAW7qT,OAClB8sT,gBAAiBjC,EAAWzjI,MAE9B8uE,EAAW5uE,aAAe,CACxBr0F,UAAW,GACXxjC,QAAS,EACTu8P,YAAa9B,EACb2B,iBAAkB5B,EAClB0C,iBAAiB,EACjBjwS,MAAO,GACP8vS,WAAYrC,EACZj1C,MAAOze,EAAmB0e,cAC1B23C,gBAAiB,OAUnB,EAAIlC,EAAuBqC,UAAU/2D,GACrC,IAAIg3D,GAAsB,EAAIpC,EAAY32M,UAPpB,SAAyB/kG,EAAO4gP,GACpD,MAAO,CACLvgM,QAASrgD,EAAM+9S,WAAWn9D,EAASklB,OAASze,EAAmB0e,kBAKzC,CAA0Cjf,GAEpE73P,EAAQ63P,WAAaA,EACrB73P,EAAQw8C,QAAUqyQ,G,+IC5OlB,W,OACA,S,IACA,M,IAEA,SACA,S,mDAEO,IAAME,EAAuBA,EAAvBA,qBAAuB,SAAChkT,GACnC,IAAIikT,EAAiB,GASrB,MARA,CAACjkT,EAASipJ,KAAMjpJ,EAASgG,MAAOhG,EAASmhC,QAAQ9jC,SAAQ,SAAA6mT,GACnDA,IACED,IACFA,GAAkB,MAEpBA,GAAkBC,MAGfD,GAGHE,EAAoB,SAAC55M,GAAU,IAC5BlxB,EAAgFkxB,EAAhFlxB,OAAQr5E,EAAwEuqG,EAAxEvqG,SAAUoX,EAA8DmzF,EAA9DnzF,eAAgBw0G,EAA8CrhB,EAA9CqhB,yBAA0B0B,EAAoB/iB,EAApB+iB,iBAC7D82L,EAAex4L,EACjBA,EAAyBS,SACzBrsH,EAASihC,WAAajhC,EAAS4tK,SAAY,IAAM5tK,EAAS4tK,SAAY,IACpEzhD,EAAgBP,EAA2BA,EAAyBprF,MAAQxgC,EAASwgC,OAAS,GAC9F6jR,EAAgBrkT,EAASkhC,YAC3BlhC,EAASghC,UAAYhhC,EAASkhC,YAAY9nC,SAArB,IAAkC4G,EAASghC,QAAQqsI,SAAnD,KAArB,IACMrtK,EAASghC,QAAQqsI,SADvB,IACmCrtK,EAASkhC,YAC1ClhC,EAASkhC,YACX,GACEojR,EAAkBN,EAAqBhkT,GACvCukT,EAA6BvkT,EAASkoP,UAAa,CAAC,WAAY,OAAQ,UAAUhpP,MAAK,SAAAzI,GAC3F,OAAOuJ,EAASkoP,SAASzxP,IAASuJ,EAASvJ,KAASuJ,EAASkoP,SAASzxP,MAEpEkzJ,EAAkB,GAClB46J,IACF56J,EAAkBq6J,EAAqBhkT,EAASkoP,WAElD,IAAMs8D,GAAgBl3L,GAAqBi3L,IAA+BntS,EAAeG,iBACnFH,EAAe8/F,mBACfgxK,GAAe,IAAApN,YAAA,wBAErB,OACE,gCAAMxnQ,MAAO+lE,EAAOorO,MAClB,gCAAMnxS,MAAOkxS,EAAe,CAACnrO,EAAO20G,QAAS30G,EAAOqrO,aAAe,CAACrrO,EAAOsrO,WAAYtrO,EAAOqrO,cAC5F,gCAAMpxS,MAAO+lE,EAAOurO,WAAY18B,EAAalxQ,SAAS,yCACtD,gCAAM1D,MAAO+lE,EAAOwrO,UAAWT,GAC9BpkT,EAASgpJ,SAAW,gCAAM11I,MAAO+lE,EAAOwrO,UAAW7kT,EAASgpJ,UAAmB,KAC/Es7J,EAAkB,gCAAMhxS,MAAO+lE,EAAOwrO,UAAWP,GAA0B,KAC5E,gCAAMhxS,MAAO,CAAC+lE,EAAOwrO,SAAUxrO,EAAOyrO,gBAAiB34L,GACvD,gCAAM74G,MAAO+lE,EAAOwrO,UAAWR,IAEhCG,EACC,gCAAMlxS,MAAO,CAAC+lE,EAAO20G,QAAS30G,EAAO0rO,gBACjC3tS,EAAeG,gBAAkBoyI,IAAmB3pJ,EAASkoP,SAASl/F,SAEpE,KADA,gCAAM11I,MAAO+lE,EAAOurO,WAAY18B,EAAalxQ,SAAS,qCAExDI,EAAeG,eAAiBvX,EAASkoP,SAASl/F,SAChD,gCAAM11I,MAAO+lE,EAAOwrO,UAAW7kT,EAASkoP,SAASl/F,UACjD,MACF5xI,EAAeG,eAAiBoyI,EAC9B,gCAAMr2I,MAAO+lE,EAAOwrO,UAAWl7J,GAC/B,KACHr8B,EACC,gCAAMh6G,MAAQ8D,EAAeG,gBAAkBoyI,IAAmB3pJ,EAASkoP,SAASl/F,SACrC3vE,EAAOurO,UAAlD,CAACvrO,EAAOurO,UAAWvrO,EAAOyrO,gBAC3B58B,EAAalxQ,SAAS,iCAEvB,KACHs2G,EAAmB,gCAAMh6G,MAAO+lE,EAAOwrO,UAAWv3L,EAAiBjB,UAAmB,MAEvF,KACJ,mCAA6Bj1G,eAAgBA,EAAgBotS,eAAgBA,EAAcnrO,OAAQA,MAKzG8qO,EAAkBhjK,UAAY,CAC5BnhJ,SAAU,UAAUpJ,OAAOshH,WAC3B9gG,eAAgB,UAAUxgB,OAAOshH,WACjC0T,yBAA0B,UAAUh1H,OACpCyiF,OAAQ,UAAUziF,OAAOshH,Y,UAGZisM,G,8ECrFf,W,OACA,S,IACA,MAEA,QAOA,SACA,SACA,QACA,S,IACA,SACA,Q,mDAEA,IAAMa,EAA4B,SAACz6M,GAAU,IACpClxB,EAA2FkxB,EAA3FlxB,OAAQh0E,EAAmFklG,EAAnFllG,SAAU+R,EAAyEmzF,EAAzEnzF,eAAgBD,EAAyDozF,EAAzDpzF,OAAQ3V,EAAiD+oG,EAAjD/oG,UAAWoH,EAAsC2hG,EAAtC3hG,cAAe8+N,EAAuBn9H,EAAvBm9H,oBAErE32N,EAAqBqG,EAAezQ,SACpCs+S,GAA0B,IAAA7/S,4BAA2BC,KAAa,IAAAM,iBAAgB+B,mBAElFsoI,EAAuB3qI,EAASE,SAAW,EAAAmD,cAAcC,OAASC,EAAcC,qBAChFq8S,EAAaD,GAAyD,IAA9B5/S,EAAS6C,iBACnD,MACA,IAAAsD,oBAAmBnG,EAASC,YAAaD,EAAS+C,SAAU/C,EAASgD,gBAAgB,EAAMhD,EAAU2qI,EAAsB3qI,EAASoC,cAClIygR,GAAe,IAAApN,YAAA,wBAEfqqC,EAAqB,WACzB,OAAOj9B,EAAalxQ,SAAS,oCAAsC,IAW/DhP,GAAe,IAAAwD,oBAAmBnG,EAASC,YAAa,EAAGD,EAASgD,gBAAgB,EAAO,KAAM2nI,EAAsB3qI,EAASoC,cAChIhG,GARc,IAAAu5K,cAAa5jK,IAIxB,IAAA2jK,sBAAqBmqI,EAAY7/S,EAASC,YAAa8R,EAAgB8wQ,EAAalxQ,UAFlF,KAOLouS,EAAqC,SAApB//S,EAASE,SAAsByC,IAAkBvG,EAClEylJ,EAAkB7hJ,EAAS6hJ,kBAAoB7hJ,EAAS8hJ,qBACxDk+J,EAAchgT,EAAS2U,qBAAgE,iBAAjC3U,EAAS2U,qBAAsC3U,EAAS2U,oBAAsB,EAEpIsrS,EAAiB9jT,EAAYA,EAAUyE,QAAO,SAAA2E,GAClD,OAAOA,EAAM+f,gBAAmB/f,EAAM+f,iBAAmBtlB,EAAS4B,MAC/D,GAML,OAJsBmQ,EAAeuwN,iBAAmBvwN,EAAeuwN,gBAAgBC,+BAClFF,GACAA,EAAoBriO,EAAS4B,IAI9B,gCAAMs+S,MAAM,GACV,gCAAMjyS,MAAO,CAAC+lE,EAAOh0E,SAAUg0E,EAAOmsO,uBAAwBD,MAAM,GAClE,gCAAMjyS,MAAO+lE,EAAOosO,kBAAmBF,MAAM,GAC3C,iCAAOjyS,MAAO+lE,EAAOqsO,uBAAwBH,MAAM,EAAOvlR,OAAQ,CAChE2lR,IAAKj+E,EAAoBriO,EAAS4B,IAAK4lS,OAAQ,MAAOz7G,QAAS,CAAE,gBAAiB,gBAGtF,gCAAM99K,MAAO+lE,EAAOusO,0BAA2BL,MAAM,GACnD,gCAAMjyS,MAAO4zI,EAAkB,CAAC7tE,EAAOwsO,aAAcxsO,EAAOysO,sBAAwB,CAACzsO,EAAOwsO,aAAcxsO,EAAO0sO,mBAC9G,IAAA59B,iBAAgB9iR,EAASC,YAAa8R,EAAgB8wQ,EAAc/wQ,IAEtE9R,EAASC,YAAY1C,UAAU2+B,MAAQxwB,EAAmBi1S,QACzD,gCAAM1yS,MAAO+lE,EAAO4sO,sBACd/9B,EAAalxQ,SAAS,8BAD5B,KAC8D3R,EAASC,YAAY1C,UAAU2+B,KAE3F,KACHl8B,EAASC,YAAY1C,UAAUwb,YAC9B,gCAAM9K,MAAO,CAAC+lE,EAAO6sO,sBAAuB7sO,EAAO8sO,sBAChD9gT,EAASC,YAAY1C,UAAUwb,aAEhC,KACJ,gCAAM9K,MAAO+lE,EAAO+sO,aAAcb,MAAM,GACrCr+J,EACG,KAEA,gCAAM5zI,MAAO+lE,EAAOgtO,cACdlB,IADN,MAC+B,IAAAlkT,cAAaokT,EAAchgT,EAAS2U,oBAAsB3U,EAAS+C,WAGtG,gCAAMkL,MAAO+lE,EAAOitO,kBACjBlB,GAAiBl+J,EACd,MACG,IAAAztI,gBAAepU,EAASC,YAAa8R,EAAgB8wQ,EAAc/wQ,EAAQ9R,EAAS+C,UAF1F,MAEwG,IAAAuK,sBAAqB5B,EAAoB/I,EAAc3C,EAASC,cAE3K,gCAAMgO,MAAO+lE,EAAOktO,eAAgB9kT,IAErC4D,EAAS0kB,SAAW,gCAAMw7R,MAAM,EAAOjyS,MAAO+lE,EAAOmtO,cAAenhT,EAAS0kB,UAAmB,OAGpGu7R,EAAe5xT,OAAS,mCAAmCyjB,OAAQA,EACR3V,UAAWA,EACX6D,SAAUA,EACV+R,eAAgBA,EAChBiiE,OAAQA,IAAY,MAMpF,wCACE,gCAAM/lE,MAAO+lE,EAAOh0E,SAAUkgT,MAAM,GAClC,gCAAMA,MAAM,GACV,gCAAMjyS,MAAO4zI,EAAkB,CAAC7tE,EAAOwsO,aAAcxsO,EAAOysO,sBAAwBzsO,EAAOwsO,eACxF,IAAA19B,iBAAgB9iR,EAASC,YAAa8R,EAAgB8wQ,EAAc/wQ,IAEvE,gCAAM7D,MAAO+lE,EAAO+sO,cACjB/gT,EAASC,YAAY1C,UAAU2+B,MAAQxwB,EAAmBi1S,QACzD,gCAAM1yS,MAAO,CAAC+lE,EAAOgtO,aAAchtO,EAAOotO,kBACpCv+B,EAAalxQ,SAAS,8BAD5B,KAC8D3R,EAASC,YAAY1C,UAAU2+B,KAE3F,KACH2lH,EACG,KAEA,gCAAM5zI,MAAO+lE,EAAOgtO,cACdlB,IADN,MAC+B,IAAAlkT,cAAaokT,EAAchgT,EAAS2U,oBAAsB3U,EAAS+C,WAGtG,gCAAMkL,MAAO+lE,EAAOitO,kBACjBlB,GAAiBl+J,EACd,MACG,IAAAztI,gBAAepU,EAASC,YAAa8R,EAAgB8wQ,EAAc/wQ,EAAQ9R,EAAS+C,UAF1F,MAEwG,IAAAuK,sBAAqB5B,EAAoB/I,EAAc3C,EAASC,cAE3K,gCAAMgO,MAAO+lE,EAAOktO,eAAgB9kT,IAErC4D,EAAS0kB,SAAW,gCAAMzW,MAAO+lE,EAAOmtO,cAAenhT,EAAS0kB,UAAmB,OAGvFu7R,EAAe5xT,OAAS,mCAAmCyjB,OAAQA,EACR3V,UAAWA,EACX6D,SAAUA,EACV+R,eAAgBA,EAChBiiE,OAAQA,IAAY,OAMtF2rO,EAA0B7jK,UAAY,CACpC97I,SAAU,UAAUwzC,MAAV,qBACVzhC,eAAgB,UAAUxgB,OAAOshH,WACjC/gG,OAAQ,UAAUsqB,OAAOy2E,WACzB7+B,OAAQ,UAAUziF,OAAOshH,Y,UAGZ8sM,G,qKCzJf,I,EAAA,O,oCAEoC0B,EAAvBA,qBAAuB,CAClCz/S,GAAI,UAAU4wG,OAAOK,WACrBxiH,KAAM,UAAU+rC,OAChBp3B,KAAM,UAAUo3B,OAChBrsB,OAAQ,UAAUE,MAClBqxS,WAAY,UAAUllR,QAGYmlR,EAAvBA,qBAAuB,CAClC3/S,GAAI,UAAU4wG,OAAOK,WACrBzc,iBAAkB,UAAU2lD,UAAU,CAAC,UAAU3/G,OAAQ,UAAUnsB,QACnEgmF,YAAa,UAAU75D,OACvBmuD,eAAgB,UAAUioB,OAC1Brc,KAAM,UAAU/5D,OAChBpsB,eAAgB,UAAUgsI,KAC1BlrJ,MAAO,UAAUirJ,UAAU,CAAC,UAAU3/G,OAAQ,UAAUo2E,SAASK,YAGrB2uM,EAAjCA,+BAAiC,CAC5C/3R,SAAU,UAAU+oF,OAAOK,WAC3BlsB,cAAe,UAAU6rB,OAAOK,a,sICtBlC,O,IACA,O,IACA,OACA,QACA,S,uDAEqB4uM,E,WAuBnB,WAAYnzO,EACAC,EACAh1E,EACAE,GAOV,IANU0wD,EAMV,uDANqB,UAAaqJ,WAAW2jC,MACnChkG,EAKV,uDALmB,KACTw3O,EAIV,uDAJwB,KACdD,EAGV,uDAHyB,KAGzB,OAFUI,EAEV,uDAF4B,KAClBC,EACV,uDAD8B,MAC9B,0BA/BFpqO,MAAQ,CACN22J,mBAAmB,EACnB52G,WAAW,EACXotL,uBAAuB,EACvBntL,kBAAmB,KACnB4xG,UAAU,EACVo7E,sBAAsB,EACtBn7E,YAAa,MAwBb,KAlBFm6E,kBAAmB,EAkBjB,KAdFjC,aAAe,KAcb,KAbFI,gBAAkB,KAahB,KAZFC,kBAAoB,KAYlB,KAwEFx+F,aAAe,WACb,EAAK23B,cAxELtqK,KAAKuwD,SAAWA,EAChBvwD,KAAKzG,OAASA,EACdyG,KAAK+wO,YAAcA,EACnB/wO,KAAK8wO,aAAeA,EACpB9wO,KAAKkxO,gBAAkBA,EACvBlxO,KAAKmxO,kBAAoBA,EAEzBnxO,KAAKsqK,aACLtqK,KAAK8nT,MAAQpzO,EACb10E,KAAK+nT,MAAQpzO,EACb30E,KAAKgoT,OAASroT,EACdK,KAAKioT,QAAUpoT,E,0DAoCf,UAAa45D,SACX,UAAaC,OAAOC,WACpB35D,KAAK2oD,YAAYlxD,KAAKuI,MACtBA,KACAA,KAAKuwD,UAEP,UAAakJ,SACX,UAAaC,OAAOI,WACpB95D,KAAKmoD,YAAY1wD,KAAKuI,MACtBA,KACAA,KAAKuwD,UAEP,UAAakJ,SACX,UAAaC,OAAOK,SACpB/5D,KAAKwoD,UAAU/wD,KAAKuI,MACpBA,KACAA,KAAKuwD,Y,yCAKP,UAAaqzC,YAAY5jG,Q,kCAOfooD,EAAUjyD,GACpB,GAAIA,EAAEyyD,YAAc5oD,KAAK+G,MAAM+/C,UAG7B,OAFA9mD,KAAKy9J,sBAAqB,GAEnBz9J,KAAKw9J,aAAY,GAY1B,GATIx9J,KAAK+G,MAAM+/C,YACb,UAAayB,UAAU,OAAQvoD,MAAM,GACjCA,KAAK8wO,aACP9wO,KAAK8wO,aAAa1oL,EAAUpoD,MAE5BA,KAAK8lM,aAAa19I,IAIlBpoD,KAAKkoT,gBAAgB9/P,GAIvB,OAHApoD,KAAKw9J,aAAY,GAEjB,UAAaj1G,UAAU,OAAQvoD,MACxBA,KAAK+G,MAAM+/C,UAEpB,QAA2BkM,IAAvBhzD,KAAKzG,OAAO0sD,OACd,IAAK,IAAM+F,KAAShsD,KAAKzG,OAAO0sD,OAC9B,GAAIjmD,KAAKzG,OAAO0sD,OAAOrxD,eAAeo3D,IAChChsD,KAAKzG,OAAO0sD,OAAO+F,GAAO6sE,eAAes6G,OAAO9pB,QAAQtiN,MAAM4xJ,SAGhE,OAFA34J,KAAKmoT,yBAAwB,GAEtBnoT,KAAK+G,MAAMgtO,qBAU1B,OAJA/zO,KAAKw9J,aAAY,GACjBx9J,KAAKmoT,yBAAwB,GAC7B,UAAal/P,YAAYjpD,OAElB,I,gCAGCooD,GACR,UAAai7C,iBAAiBp+F,MAC9BjF,KAAK+G,MAAM+/C,WAAY,EACvB9mD,KAAK+G,MAAMggD,kBAAoB,KAC3B/mD,KAAKkxO,iBACPlxO,KAAKkxO,gBAAgB9oL,EAAUpoD,Q,kCAIvBooD,EAAUjyD,GAEpB,QAAI6J,KAAKqrD,eAELrrD,KAAK+G,MAAM+/C,WAAY,EACvB9mD,KAAK+G,MAAMggD,kBAAoBqB,EAE7BpoD,KAAKmxO,mBACPnxO,KAAKmxO,kBAAkB/oL,EAAUpoD,OAE5B,K,mCAIK,OAA+B,IAAxBA,KAAK+G,MAAM4xJ,W,2CACbzhK,GAA+C,OAAtC8I,KAAK+G,MAAM22J,kBAAoBxmK,EAAcA,I,kCAC/DA,GAAsC,OAA7B8I,KAAK+G,MAAM4xJ,SAAWzhK,EAAcA,I,8CACjCA,GAAkD,OAAzC8I,KAAK+G,MAAMgtO,qBAAuB78O,EAAcA,I,mCAEpEkxD,GACX,IAAIrG,EAAQ,UAAUkJ,WAClBpC,GAAS7oD,KAAK+G,MAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACxD+G,GAAS9oD,KAAK+G,MAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAM5D,GAJA/hD,KAAK+G,MAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,EAC1Cpa,KAAK+G,MAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,EAGtCra,KAAKzG,OAAOuhH,OAAOi4H,kBAWrB,GAAI/yO,KAAK+wO,YAAYpxO,MAAQkpD,GAAS7oD,KAAK+wO,YAAYvzG,OAAOsvG,aAAc,CAC1E9sO,KAAK+wO,YAAYpxO,OAASkpD,EAC1B7oD,KAAK+wO,YAAY3nB,MAAMC,QAAQ1pN,OAASkpD,EACxC7oD,KAAK00E,MAAQ7rB,EAIb7oD,KAAK+wO,YAAY9qL,OAAOmiQ,GAAGvvL,eAAes6G,OAAO9pB,QAAQ30I,MAAQ7rB,EAKjE,IAAIw/P,EAAWjvT,SAASg9F,cAAc,WACtC,GAAIiyN,EAAU,CACZ,IAAI1oT,EAAQ0oT,EAASziE,YACrBjmP,GAAiB,EAARkpD,EACTw/P,EAASh0S,MAAM1U,MAAQA,EAAQ,YAG1BK,KAAKzG,OAAOuhH,OAAOk4H,gBAExBhzO,KAAK+wO,YAAYlxO,QAAUgpD,EAAQC,GAAS,GAAK9oD,KAAK+wO,YAAYvzG,OAAOqvG,eACxE7sO,KAAK+wO,YAAYpxO,OAASkpD,EAAQC,GAAS,GAAK9oD,KAAK+wO,YAAYvzG,OAAOsvG,eAE3E9sO,KAAK+wO,YAAYpxO,QAAUkpD,EAAQC,GAAS,EAC5C9oD,KAAK+wO,YAAYlxO,SAAWgpD,EAAQC,GAAS,EAC7C9oD,KAAK+wO,YAAY3nB,MAAMC,QAAQ1pN,QAAUkpD,EAAQC,GAAS,EAC1D9oD,KAAK+wO,YAAY3nB,MAAMC,QAAQxpN,SAAWgpD,EAAQC,GAAS,EAE3D9oD,KAAK00E,OAAS7rB,EAAQC,GAAS,EAC/B9oD,KAAK20E,OAAS9rB,EAAQC,GAAS,EAI/B9oD,KAAK+wO,YAAY9qL,OAAOg5J,GAAGpmF,eAAes6G,OAAO9pB,QAAQ30I,OAAS7rB,EAAQC,GAAS,IAGrF9oD,KAAK00E,MAAQ7rB,EACb7oD,KAAK20E,MAAQ7rB,K,sCAIAV,GACf,IAAIwsB,EAAS50E,KAAK+wO,aAAe/wO,KAAK+wO,YAAY/lL,cAAiD,IAAlChrD,KAAK+wO,YAAYjpL,aAC9E9nD,KAAK+wO,YAAY/lL,cACjB,CAAC5wC,EAAG,EAAGC,EAAG,GAEVisJ,SAGFA,OADyBtzG,IAAvBhzD,KAAKzG,OAAOikI,QAAsD,WAA9Bx9H,KAAKzG,OAAOikI,OAAOtiH,OAC3C,CACZ,CAAClb,KAAK00E,KAAOE,EAAOx6D,EAAIpa,KAAKzG,OAAOikI,OAAOnpF,OAAS,EAAGr0C,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKzG,OAAOikI,OAAOnpF,OAAS,GAC1G,CAACr0C,KAAK00E,KAAOE,EAAOx6D,EAAIpa,KAAKzG,OAAOikI,OAAOnpF,OAAS,EAAGr0C,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKzG,OAAOikI,OAAOnpF,OAAS,GAC1G,CAACr0C,KAAK00E,KAAOE,EAAOx6D,EAAIpa,KAAKzG,OAAOikI,OAAOnpF,OAAS,EAAGr0C,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKzG,OAAOikI,OAAOnpF,OAAS,GAC1G,CAACr0C,KAAK00E,KAAOE,EAAOx6D,EAAIpa,KAAKzG,OAAOikI,OAAOnpF,OAAS,EAAGr0C,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKzG,OAAOikI,OAAOnpF,OAAS,IAEnGr0C,KAAKzG,OAAOuhH,QAAU96G,KAAKzG,OAAOuhH,OAAOg4H,cACpC,CACZ,CAAC9yO,KAAK00E,KAAOE,EAAOx6D,EAAGpa,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKzG,OAAOikI,OAAOnpF,OAAS,GAC1E,CAACr0C,KAAK00E,KAAO10E,KAAKL,MAAQi1E,EAAOx6D,EAAGpa,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKzG,OAAOikI,OAAOnpF,OAAS,GACvF,CAACr0C,KAAK00E,KAAO10E,KAAKL,MAAQi1E,EAAOx6D,EAAGpa,KAAK20E,KAAO30E,KAAKH,OAAS+0E,EAAOv6D,EAAIra,KAAKzG,OAAOikI,OAAOnpF,OAAS,GACrG,CAACr0C,KAAK00E,KAAOE,EAAOx6D,EAAGpa,KAAK20E,KAAO30E,KAAKH,OAAS+0E,EAAOv6D,EAAIra,KAAKzG,OAAOikI,OAAOnpF,OAAS,IAEjFr0C,KAAKzG,OAAOuhH,QAAU96G,KAAKzG,OAAOuhH,OAAO81H,WACpC,CACZ,CAAC5wO,KAAK00E,KAAOE,EAAOx6D,EAAIpa,KAAKL,MAAQ,EAAGK,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKH,OAAS,GAC7E,CAACG,KAAK00E,KAAOE,EAAOx6D,EAAIpa,KAAKL,MAAQ,EAAGK,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKH,OAAS,GAC7E,CAACG,KAAK00E,KAAOE,EAAOx6D,EAAIpa,KAAKL,MAAQ,EAAGK,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKH,OAAS,GAC7E,CAACG,KAAK00E,KAAOE,EAAOx6D,EAAIpa,KAAKL,MAAQ,EAAGK,KAAK20E,KAAOC,EAAOv6D,EAAIra,KAAKH,OAAS,IAGjE,CACZ,CAACG,KAAK00E,KAAOE,EAAOx6D,EAAGpa,KAAK20E,KAAOC,EAAOv6D,GAC1C,CAACra,KAAK00E,KAAO10E,KAAKL,MAAQi1E,EAAOx6D,EAAGpa,KAAK20E,KAAOC,EAAOv6D,GACvD,CAACra,KAAK00E,KAAO10E,KAAKL,MAAQi1E,EAAOx6D,EAAGpa,KAAK20E,KAAO30E,KAAKH,OAAS+0E,EAAOv6D,GACrE,CAACra,KAAK00E,KAAOE,EAAOx6D,EAAGpa,KAAK20E,KAAO30E,KAAKH,OAAS+0E,EAAOv6D,IAI5D,IAAIiuS,GAAa,IAAAzzO,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GAE9D,OAAO,IAAAiqJ,aAAYgC,EAAagiJ,K,gDAGPlgQ,GACzB,IAAIrG,EAAQ,UAAOA,MACfukH,EAAc,CAChB,CAACtmK,KAAK00E,KAAM10E,KAAK20E,MACjB,CAAC30E,KAAK00E,KAAO10E,KAAKL,MAAQoiD,EAAO/hD,KAAK20E,MACtC,CAAC30E,KAAK00E,KAAO10E,KAAKL,MAAQoiD,EAAO/hD,KAAK20E,KAAO30E,KAAKH,OAASkiD,GAC3D,CAAC/hD,KAAK00E,KAAM10E,KAAK20E,KAAO30E,KAAKH,OAASkiD,IAGxC,OAAO,IAAAuiH,aAAYgC,EAAal+G,K,2BAlPhC,OAAOpoD,KAAK8nT,O,aAGL5wT,GACP8I,KAAK8nT,MAAQ5wT,I,2BAIb,OAAO8I,KAAK+nT,O,aAGL7wT,GACP8I,KAAK+nT,MAAQ7wT,I,4BAIb,OAAO8I,KAAKgoT,Q,aAGJ9wT,GACR8I,KAAKgoT,OAAS9wT,I,6BAId,OAAO8I,KAAKioT,S,aAGH/wT,GACT8I,KAAKioT,QAAU/wT,M,eA7EE2wT,G,iHCNrB,O,IACA,O,IACA,O,gHAGEU,WAAa,K,KACbC,YAAc,G,KAEdv1D,eAAiB,WACf,UAAax5L,SACX,UAAaC,OAAOM,OACpB,EAAKyuP,aACL,EACA,UAAa7uP,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOK,SACpB,EAAKvR,UACL,EACA,UAAaoR,WAAWojC,U,KAI5Bx0C,UAAY,WACV,EAAK4qM,yB,KAGP3vJ,eAAiB,SAACqvJ,GAChB,IAAM41D,EAAoB,EAAKF,YAAY18S,MAAK,SAAA4iD,GAAA,OAASA,EAAMuD,QAAQjqD,KAAO,EAAK2nJ,kBAAkBogF,KAAK,cACtG24E,GACF,EAAKhlN,YAAc,CAAEh1C,MAAOg6P,EAAmB/oT,MAAO+oT,EAAkB/oT,MAAOE,OAAQ6oT,EAAkB7oT,QACzG,UAAa0oD,UAAU,cAAe,GAAM,GAC5C,EAAK0qM,kBAEL,EAAK01D,eAAe71D,I,KAIxB61D,eAAiB,SAAC71D,GACL,EAAKkhD,wBAAhB,IAEE4U,EADS,GAETC,EAFS,GAKPC,EAAS1vT,SAAS8oD,cAAc,OACpC4mQ,EAAOl3N,YAAc,YACrBk3N,EAAO72P,QAAQx7D,KAAO,SAEtB,IAAIsyT,GAAO,aAAED,GACbC,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAsBVkpT,EAAKpmN,GAAG,QAfQ,WACd,IAAiBqmN,SACbJ,EAAWC,GACbG,EAAQH,EAAYD,EACpBA,EAHW,GAIXC,EAJW,GAIUG,IAErBA,EAAQJ,EAAWC,EACnBA,EAPW,GAQXD,EARW,GAQSI,GAEtB,UAAazgQ,UAAU,cAAe,GAAM,GAC5C,EAAKm7C,YAAc,CAAEh1C,MAAOo6P,EAAQnpT,MAAOipT,EAAU/oT,OAAQgpT,GAC7D,EAAK51D,oBAGP81D,EAAKpnC,UAAS,aAAE,SAEhB,UAAO37N,UAAU56C,KAAO,aAExB29S,EAAKh5E,KAAK,MAAO+iB,I,KAKnBM,sBAAwB,WAClB,EAAKM,2BACP,EAAKA,0BAA2B,EAChC,UAAa9vJ,YAAY,EAAM,UAAalqC,OAAOK,UAInD,EAAK0pC,mB,KAITglN,aAAe,SAAS9kQ,GACtB,GAAG3jD,KAAK0jG,YAAYh1C,QAAU,aAAEv2D,QAAQwH,QAAU,IAAM,CACtD,IAAIspT,EAAO,UAAajpN,kBACrBipN,GACDtlQ,EAAI2rC,UAAUtvF,KAAK0jG,YAAYh1C,MAAOu6P,EAAK7uS,EAAI,GAAI6uS,EAAK5uS,EAAI,GAAI,GAAI,M,KAK1Eg+C,QAAU,SAACuyG,EAASxnE,GACdA,GAKF,EAAKrrC,mBACL,EAAK2rC,YAAc,KACnB,EAAKgwJ,0BAA2B,IAEhC,EAAK37L,mBACL,EAAK2rC,YAAc,MAErB,EAAKluC,Q,KAGPA,KAAO,SAASr/D,GACXA,IACDA,EAAE40F,iBACF50F,EAAE20F,oB,KAKN/yB,iBAAmB,WACjB,UAAa9O,YAAY,GACzB,UAAa26C,YAAY,GACzB,UAAO59C,UAAUE,OAAQ,K,8ECpI7B,I,IAAA,O,IACA,Q,IAEA,O,IACA,O,IACA,OACA,Q,IACA,QACA,S,IACA,O,6DAGe,IAAI,WAEjB,IAAIjhD,EAAOjF,KAET+3S,EAAW,CACTmR,WAAW,aAAE,eACb9wP,SAAS,aAAE,mBACX+wP,YAAY,aAAE,0CACdC,cAAc,aAAE,4CAChB3hQ,eAAe,aAAE,mBACjB4hQ,aAAa,aAAE,2CACfC,iBAAiB,aAAE,WACnBC,iBAAiB,aAAE,WACnBC,SAAS,aAAE,mBAKfxpT,KAAKg0S,wBAA0B,KAC/Bh0S,KAAK0jG,YAAc,KACnB1jG,KAAK0zP,0BAA2B,EAGhC1zP,KAAKs8C,UAAY,EACjBt8C,KAAKw0C,MAAQ,EAGbx0C,KAAKypT,oBAAsB,WACzBxkT,EAAK8yD,mBACL,UAAU1jB,OAAOiI,UAAY,EAC7B,UAAUjI,OAAOG,OAAQ,aAAEx0C,MAAM+vO,KAAK,cACtC9qO,EAAKykT,mBAAkB,aAAE1pT,QACzB,aAAE,6BAA6Bm3D,YAAY,6BAC3C,aAAEn3D,MAAMk3D,SAAS,6BAEnBl3D,KAAK2pT,kBAAoB,WACvB3pT,KAAK+3D,mBACL,UAAU1jB,OAAOG,MAAQ,EACzB,UAAUH,OAAOiI,WAAY,aAAEt8C,MAAM+vO,KAAK,YAC1C9qO,EAAKykT,mBAAkB,aAAE1pT,QACzB,aAAE,6BAA6Bm3D,YAAY,6BAC3C,aAAEn3D,MAAMk3D,SAAS,6BAGnBl3D,KAAK0pT,kBAAoB,SAASz4O,GAEhChsE,EAAK4nL,kBACL5nL,EAAK0qJ,kBAAoB1+E,EACzBhsE,EAAKw+F,iBAEDtrG,OAAOwqD,WAAa,KAAQ,UAAOoD,mBAOzC/lD,KAAK+3D,iBAAmB,WACtB,UAAa9O,YAAYhkD,GACzB,UAAa2+F,YAAY3+F,GACzB8yS,EAASmR,UAAU/xP,YAAY,sCAI/B,UAAOnR,UAAUC,QAAS,GAkC5BjmD,KAAK2zP,oBAAsB,WAEzBokD,EAASoR,WAAWv9I,MAAK,WACvB,OAAO,UAAOh/J,aACZ,IAAK,UACH,aAAE5M,MAAM8L,KAAK,yBAAyBi0P,MAAK,IAAA1oL,aAAYr3E,KAAKiyD,QAAQigG,KAAO,UAAOhvG,yBAClF,MACF,IAAK,WACL,SACE,aAAEljD,MAAM8L,KAAK,yBAAyBi0P,MAAM//P,KAAKiyD,QAAQigG,IAAM,UAAOhvG,6BAK5E60P,EAASqR,aAAax9I,MAAK,WACzB,OAAO,UAAOh/J,aACZ,IAAK,UACH,aAAE5M,MAAM8L,KAAK,yBAAyBi0P,MAAK,IAAA1oL,aAAYr3E,KAAKiyD,QAAQzd,OAAS,UAAO0O,yBACpF,MACF,IAAK,WACL,SACE,aAAEljD,MAAM8L,KAAK,yBAAyBi0P,MAAM//P,KAAKiyD,QAAQzd,MAAQ,UAAO0O,6BAI9E60P,EAASyR,QAAQ59I,MAAK,WACpB,OAAO,UAAOh/J,aACZ,IAAK,UACH,aAAE5M,MAAM+/P,MAAK,aAAE//P,MAAM/L,KAAK,WAC1B,MACF,IAAK,WACL,SACE,aAAE+L,MAAM+/P,MAAK,aAAE//P,MAAM/L,KAAK,kBAKlC+L,KAAKyjG,eAAiB,WACpB,IAAIxyB,EAAOhsE,EAAK0qJ,kBAEdi5J,EADS,GAETC,EAFS,GAIPC,EAAS1vT,SAAS8oD,cAAc,OACpC4mQ,EAAOl3N,YAAc,YAErB,IAAIm3N,GAAO,aAAED,GACbC,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAEVkpT,EAAKh5E,KAAK,CACR,UAAW9+J,IAEb83O,EAAKpmN,GAAG,QAAQ,YAMhB,SAAkBmmN,GAChB,IACIE,SACDJ,EAAWC,GACZG,EAAQH,EAAYD,EACpBA,EAJW,GAKXC,EALW,GAKUG,IAErBA,EAAQJ,EAAWC,EACnBA,EARW,GASXD,EATW,GASSI,GAEtB,UAAazgQ,UAAU,cAAetjD,GAAM,GAC5CA,EAAKy+F,YAAc,CAAEh1C,MAAOo6P,EAAQnpT,MAAOipT,EAAU/oT,OAAQgpT,GAC7D5jT,EAAKguP,iBAnBL22D,CAASd,MAEXC,EAAKpnC,UAAS,aAAE,SAChBonC,EAAKh5E,KAAK,MAAV,mBAoBF/vO,KAAK6sL,gBAAkB,WACrB,UAAavkI,aAAY,GACzB,UAAUe,eAAc,GACxB,UAAUG,sBAAqB,GAC/B,UAAUE,sBAAqB,GAC/B,UAAO1D,UAAUE,OAAQ,EACzB,UAAOF,UAAU56C,KAAO,GACxB,UAAO46C,UAAUh+C,GAAK,MAGxBhI,KAAKizP,eAAiB,WACpB,UAAa1qM,UAAU,gBAAiBtjD,GAAM,GAC9C,UAAO+gD,UAAUC,QAAS,EAC1B,UAAawT,SACX,UAAaC,OAAOM,OACpB/0D,EAAKwjT,aACLxjT,EACA,UAAa20D,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOI,WACpB70D,EAAKkjD,YACLljD,EACA,UAAa20D,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOK,SACpB90D,EAAKujD,UACLvjD,EACA,UAAa20D,WAAWojC,UAG5Bh9F,KAAKmoD,YAAc,WACjB,IAAI0hQ,EAAa,UAAU99P,gBAEvB+9P,EAAoB,UAAU79P,uBAGlC,GAAG69P,EAAmB,CACpB,IAAI92K,EAAiB82K,EAAkBppT,YAErCsyI,GAAkBA,EAAejkF,MAAQikF,EAAejkF,KAAKwJ,KACzDy6E,EAAejkF,KAAKwJ,GAAG+nG,oBACxBttB,EAAejkF,KAAK0C,KAAK6uG,sBAE5BupJ,EAAa72K,EAAejkF,KAAKwJ,GAAG+nG,oBAAsBttB,EAAejkF,KAAK0C,KAAK6uG,oBAIvF,GAAIupJ,EACF,OAAO,GAGX7pT,KAAKozP,sBAAwB,WACvBnuP,EAAKyuP,2BACPzuP,EAAKyuP,0BAA2B,EAChC,UAAa9vJ,YAAY3+F,EAAM,UAAay0D,OAAOK,UACnD90D,EAAK4nL,kBACL5nL,EAAKw+F,mBAGTzjG,KAAKwoD,UAAY,SAASJ,GAExBnjD,EAAKmuP,wBAEL,IAAIy2D,EAAa,UAAU99P,gBAC1BoJ,EAAa,UAAU/J,gBACvB2+P,SAUD,GAPI50P,IACF40P,EAAqB50P,EAAW6qG,2BAE9B6pJ,EAAaE,EAAmBh7P,KAAKwJ,IAIrCsxP,IAAeA,EAAWxgJ,gBAAkBwgJ,EAAWhjH,YAAa,CAClE,UAAUxyJ,OAAOiI,WACnButQ,EAAWvtQ,UAAY,UAAUjI,OAAOiI,UACxCutQ,EAAWz6P,UAAY,UAAErE,MAAM,UAAU1W,OAAO+a,WAChDy6P,EAAWr1Q,MAAQ,GAEV,UAAUH,OAAOG,QAC1Bq1Q,EAAWr1Q,MAAQ,UAAUH,OAAOG,MACpCq1Q,EAAWz6P,UAAY,UAAErE,MAAM,UAAU1W,OAAO+a,WAChDy6P,EAAWvtQ,UAAY,GAGzB,UAAiB89F,0BAA0BjlF,GAE3C,UAAiB+9E,+BAA+B/9E,GAEhD,IAAI20P,EAAoB,UAAU79P,uBAOlC,OANI69P,IACFA,EAAkBppT,YAAYi1R,UAAU,EAAG,EAAGm0B,GAC9CA,EAAkBppT,YAAYk1R,iBAAiBk0B,KAI1C,IAUX9pT,KAAKq4D,QAAU,SAASuyG,EAASxnE,GAC3BA,GACF,UAAaQ,YAAY3+F,EAAM,UAAay0D,OAAOM,QACnDh6D,KAAK0zP,0BAA2B,GAEhC1zP,KAAK+3D,mBAEP/3D,KAAKw1D,QAEPx1D,KAAKw1D,KAAO,SAASr/D,GAChBA,IACDA,EAAE40F,iBACF50F,EAAE20F,oBAMN9qF,KAAKg2D,KAAO,YA9OZ,WAEE,IADA,IAAI+pM,EAAO,GACFxrQ,EAAI,EAAGA,GAtDJ,GAsDoBA,IAC9BwrQ,GACG,sDAAuDxrQ,EAAvD,8DACgE,GAAJA,EAD5D,uLAIoCA,EAJpC,qEAK8Dy1T,mBAAmB39E,UAAU,qCAL3F,0BASL0rE,EAASwR,gBAAgBxpD,KAAKA,GAC9Bg4C,EAASoR,YAAa,aAAE,0CAkOxBc,GA/NF,WAEE,IADA,IAAIlqD,EAAO,GACFxrQ,EAAI,EAAGA,GAtEN,GAsEoBA,GAAK,EACjCwrQ,GAAS,wDAAyDxrQ,EAAzD,uEAC6DA,EAD7D,2OAK4EA,EAL5E,wBAQXwjT,EAASuR,gBAAgBvpD,KAAKA,GAC9Bg4C,EAASqR,cAAe,aAAE,4CAoN1Bc,GAEAnS,EAASoR,WAAWj5N,MAAMjrF,EAAK0kT,mBAC/B5R,EAASqR,aAAal5N,MAAMjrF,EAAKwkT,sBAGnCzpT,KAAKyoT,aAAe,SAAS9kQ,GAW3B,GAAG1+C,EAAKy+F,aAAez+F,EAAKy+F,YAAYh1C,QAAU1uD,KAAKs8C,UAAY,GAAKt8C,KAAKw0C,MAAQ,KAAO,aAAEr8C,QAAQwH,QAAU,IAAM,CACpH,IAAIspT,EAAO,UAAajpN,kBACrBipN,GACDtlQ,EAAI2rC,UAAUrqF,EAAKy+F,YAAYh1C,MAAOu6P,EAAK7uS,EAAI,GAAI6uS,EAAK5uS,EAAI,GAAIpV,EAAKy+F,YAAY/jG,MAAOsF,EAAKy+F,YAAY7jG,Y,kHCnUlG,WAA4B,WAAnBmpQ,EAAmB,uDAAJ,GACjC/jQ,EAAOjF,KACT+G,GAAQA,EAARA,WACK,CACDq1L,UAAW,GACXwjG,eAAgB,UAChBuqB,UAAW,EACXjxJ,WAAW,EACXkxJ,yBACAtqB,WAAY,GACZuqB,WAAY,EACZ/jT,YAAQ0sD,EACR6sO,SAAS,EACTjtN,SAAU,CACRx4D,EAAG,EACHC,EAAG,IAGJ2uP,GAELj6M,EAAO,KACPnV,EAAQ,KAEJ0wQ,EAAW,GAEjB,SAASC,EAAQrzT,GAAS63D,EAAO73D,EACjC,SAASqmK,EAASrmK,GAAS0iD,EAAQ1iD,EACnC,SAAS86E,EAAYvgB,EAAM8G,GACzB,MAAO,CACLn+C,EAAGq3C,EAAKr3C,GAAKm+C,EAAGn+C,EAAIq3C,EAAKr3C,GAAG,EAC5BC,EAAGo3C,EAAKp3C,GAAKk+C,EAAGl+C,EAAIo3C,EAAKp3C,GAAG,GAGhC,SAASsuC,EAAYP,EAAUjyD,GAAG,MAECq0O,EAAgBpiL,GAA1C8wG,EAFyB,EAEzBA,UAAWrjF,EAFc,EAEdA,YAClB9uE,EAAMmyJ,UAAYA,EACdnyJ,EAAMmyJ,UACJ,UAAav1D,YAAY3pG,QAAQ,SAAW,IAC9C,UAAasuD,aAAY,GACzB,UAAaC,UAA2B,eAAhBstB,EAAgC,OAAS,gBAAiB5wE,IAGpF,UAAagkD,YAAYhkD,GAG7B,SAASkjD,EAAYC,EAAUjyD,GAC7B,GAAI4Q,EAAMmyJ,UAcR,OAbmB,UAAM/2J,WACOytD,cAAci4C,eAGzB,EAAA50D,qBAAqBx7B,SAExCtf,OAAOkwD,kBAAmB,EAC1B,UAAaC,cACb,UAAaW,YAAYhkD,GAEzB,UAAMgf,UAAS,IAAAmlF,oBAAmB,CAACt4C,UAAU,EAAM64J,WAAY,SAAUriK,IAAKc,EAAU7uD,OAAQqgD,OAG3F,EAGX,SAAS4wL,EAAgBpiL,GACvB,IAAMwvE,EAAgB7oE,EAAKuuE,mBACvBgpC,EAAc,GACdw5H,EAAa,GAkCjB,MAjCkC,eAA9BloK,EAAc/hD,aAChBiqN,EAA4C,SAA/BloK,EAAcwE,cAA2Br1H,EAAM+4R,WAAa/4R,EAAM+4R,WAC/Ex5H,EAAc,CACZ,CAACv/J,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAU,EAAI,GAAIpjT,EAAM6rE,SAASv4D,EAAI,GAAKylR,GACpE,CAAC/4R,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAU,EAAI,GAAIpjT,EAAM6rE,SAASv4D,EAAI,GAAKylR,GACpE,CAAC/4R,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAU,EAAI,GAAIpjT,EAAM6rE,SAASv4D,EAAI,GAAKylR,GACpE,CAAC/4R,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAU,EAAI,GAAIpjT,EAAM6rE,SAASv4D,EAAI,GAAKylR,KAQ/B,aAA9BloK,EAAc/hD,cACY,UAA/B+hD,EAAcwE,aAChBkqC,EAAc,CACZ,CAACv/J,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAU,EAAI,IAC/D,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAU,EAAI,IAC/D,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAU,EAAI,GAC/D,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAU,EAAI,IAEzB,UAA/BvyL,EAAcwE,eACvBkqC,EAAc,CACZ,CAACv/J,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAU,EAAI,IAC/D,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAU,EAAI,IAC/D,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAU,EAAI,GAC/D,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAU,EAAI,MAM9D,CAACjxJ,WAAW,IAAAoL,aAAYgC,EAAal+G,GAAWytB,YAAa+hD,EAAc/hD,aAGpF71E,KAAKmC,SAAW,WAAQ,OAAO4E,GAC/B/G,KAAKk5J,UAAY,WAAQ,OAAOnyJ,EAAMmyJ,WACtCl5J,KAAKq4D,QAAU,SAASuyG,GAClBA,GACF,UAAahnE,YAAY3+F,IAG7BjF,KAAKU,UAAY,WACf,OAAOquD,GAET/uD,KAAK0/R,aAAe,SAACxoS,GACnB6P,EAAMq1L,UAAYllM,GAEpB8I,KAAKw7J,UAAY,SAACtkK,GAChB6P,EAAMT,OAASpP,GAEjB8I,KAAKkuD,OAAS,SAASj6D,GACrB8S,EAAQ9S,EAAK8S,OAEf/G,KAAKi/J,OAAS,WACZ,MAAO,CAAEl4J,OAAO,aAAUA,KAE5B/G,KAAKg2D,KAAO,SAASjH,EAAMzsC,EAAMhc,GAC/BikT,EAAQx7P,GAERwuG,EAASxuG,EAAKruD,aAGdV,KAAKw7J,UAAUl1J,GACftG,KAAK0/R,aAAap9Q,GAClBtiB,KAAKsqK,YAAYvjK,EAAM84R,UAEzB7/R,KAAKsqK,WAAa,WAAqB,IAApBkgJ,IAAoB,yDACrC,UAAa/wP,SACX,UAAaC,OAAOM,OACpB,EAAKC,OACL,EACA,UAAaL,WAAW+jC,aAEtB6sN,IACF,UAAa/wP,SACX,UAAaC,OAAOC,WACpBhR,EACA,EACA,UAAaiR,WAAW+jC,aAE1B,UAAalkC,SACX,UAAaC,OAAOI,WACpB3R,EACA,EACA,UAAayR,WAAW+jC,eAI9B39F,KAAK+3D,iBAAmB,WACtB,UAAa6rC,YAAY,IAE3B5jG,KAAK2yI,aAAe,WAClB,EAAK23B,YAAYvjK,EAAM84R,UAEzB7/R,KAAKi0I,qBAAuB,WAC1B,UAAarwC,YAAY,IAE3B5jG,KAAKm0I,iBAAmB,WACtB,EAAKm2B,YAAYvjK,EAAM84R,UAEzB7/R,KAAKw0D,cAAgB,WACnB,IAAI/N,GAAW,IAAA6qB,kBAAiBviB,EAAK0C,KAAM1C,EAAKwJ,IAChD,OAAO,IAAAwf,yBAAwBtxB,IAEjCzmD,KAAKoF,KAAO,WACV,MAAO,WAAY7H,KAAKpF,OAAOqF,UAAUi0O,aAE3CzxO,KAAK0xO,OAAS,SAAS5/K,GACrB,GAAGA,EAAK,CACN,IAAI/yD,EAAM+yD,EAAI9yD,aAAa,OAC3B,GAAGD,EACD,OAAOA,EAGT,GADAA,EAAM+yD,EAAI9yD,aAAa,SAErB,OAAOD,EAAIJ,QAAQ,2DAA4D,IAAIA,QAAQ,QAAS,IAGxG,MAAO,IAGTqB,KAAKwzO,YAAc,SAAC7vL,EAAKvpC,EAAGC,GAC1B,IAAItT,EAAM84R,QAAV,CAEA,IAAI99O,EAAQ,UAAOA,MACfz+C,EAAgB,EAAhBA,EAA2B,EAC3BoxE,EAAOt6D,EAAI9W,EAAay+C,EACxB4yB,EAAOt6D,EAAI/W,EAAcy+C,EAE7B,GAAIuoQ,EAAA,cAA2B,CAC7B,IAAIx4P,EAAMw4P,EAAA,cACV3mQ,EAAI2rC,UAAUx9B,EAAK4iB,EAAMC,EAAMrxE,EAAay+C,EAAOz+C,EAAcy+C,OAC5D,CACL,IAAI+P,EAAM,IAAItB,MACVi6H,EAAMrxL,SAAS02F,eAAe,mBAElC,GAAI26F,EAAK,CACP,IAAIC,GAAM,IAAIC,eAAgBC,kBAAkBH,GAC5CI,EAAQC,KAAKJ,GAEjB54H,EAAI/yD,IAAM,6BAA+B8rL,EAEzC/4H,EAAIggC,OAAS,WACXw4N,EAAA,cAA4Bx4P,EAC5BnO,EAAI2rC,UAAUx9B,EAAK4iB,EAAMC,EAAMrxE,EAAay+C,EAAOz+C,EAAcy+C,IAGnE+P,EAAI+/B,QAAU,WACZ75F,QAAQwvJ,KAAK,kDAQrBxnJ,KAAKi6D,OAAS,SAAStW,GACrB,IAOE+mL,EAPE3oL,EAAQ,UAAOA,MACjBc,GAAW,IAAAwuB,eACXk7J,EAAQ1pL,EAAU/qC,WAAa,MAAQ,UAAOyuC,eAC9CqxE,EAAgB7oE,EAAKuuE,mBACrB1oD,EAAS7lB,EAAKnE,YACd6/P,EAAU1jT,EAAMq1L,UAChBxpH,EAAWZ,EAAYjjB,EAAK0C,KAAM1C,EAAKwJ,IAEvCunO,EAAa,EAEbjgG,EAAW,EAEbl8I,EAAI+W,YAEJ/W,EAAI4oL,KAAcA,EAClB7B,EAAkB/mL,EAAIgnL,YAAY8/E,GAClC1jT,EAAMojT,UAAY//S,KAAKC,MAAoB,IAAdqgO,EAAM/qO,OAAe,IAClDizE,EAASv4D,EAASu4D,EAASv4D,EAAI0nC,EAAQ6yB,EAAOv6D,EAC9Cu4D,EAASx4D,EAASw4D,EAASx4D,EAAI2nC,EAAQ6yB,EAAOx6D,EAC9CrT,EAAM6rE,SAASx4D,EAAIw4D,EAASx4D,EAC5BrT,EAAM6rE,SAASv4D,EAAIu4D,EAASv4D,EAC5BspC,EAAI6oL,UAAc,SAClB55J,EAASv4D,GAAUwoC,EAAW,EAE9Bc,EAAI+W,YACJ/W,EAAIwuG,UAAYprJ,EAAMmyJ,UAAY,EAAAlK,MAAM16B,IAAMvtH,EAAM64R,eAIpD,OAAQhoK,EAAc/hD,aACpB,IAAK,aACHiqN,EAA4C,SAA/BloK,EAAcwE,cAA2Br1H,EAAM+4R,WAAa/4R,EAAM+4R,WAC/En8O,EAAI8oL,SAASg+E,EAAS73O,EAASx4D,EAAGw4D,EAASv4D,EAAIylR,EAAYp1D,EAAO7nL,GAClE7iD,KAAKwzO,YAAY7vL,EAAIivB,EAASx4D,EAAIswN,EAAM/qO,MAAQ,EAAIoH,EAAMsjT,WAAYz3O,EAASv4D,EAAIylR,GACnF,MAEF,IAAK,WACgC,UAA/BloK,EAAcwE,aAChByjE,EAAYjoE,EAAcyE,cAAcI,WAAcojE,EAAW,EAAIA,EAC7B,UAA/BjoE,EAAcwE,eACvByjE,EAAYjoE,EAAcyE,cAAcC,QAAWujE,EAAW,EAAIA,GAEpEl8I,EAAIyuG,OACJzuG,EAAI0oL,WACFz0G,EAAcwE,aAA2BxpD,EAASx4D,EAnC5C,GAoCyB,UAA/Bw9G,EAAcwE,aAA2BxpD,EAASv4D,EAAI,EAAIu4D,EAASv4D,EAAI,IAEzEspC,EAAIpQ,OAAsC,UAA/BqkF,EAAcwE,aAA2BhyH,KAAKqnE,GAAK,GAAKrnE,KAAKqnE,GAAK,GAChEmmD,EAAcwE,aAA3B0jK,EAAsD/4R,EAAM+4R,WAE5Dn8O,EAAI8oL,SAASg+E,EAAS5qH,EAASigG,EAAaj9O,EAAU6nL,EAAO7nL,GAC7D7iD,KAAKwzO,YAAY7vL,EAAIk8I,EAAW6qC,EAAM/qO,MAAQ,EAAGmgS,EAAaj9O,GAC9D,MAGF,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACHc,EAAIyuG,OACJ,IAAMs4E,EAAQ/mL,EAAIgnL,YAAY8/E,GACxBj2Q,GAAQ,IAAA+oC,0BAAyBxuB,EAAK0C,KAAM1C,EAAKwJ,IAHvC,GAIK,IAAAsa,mBAAkB9jB,EAAK0C,KAAM1C,EAAKwJ,GAAI,GAJ3C,qBAKVqa,EAAWZ,EALD,WAOVp4B,yBACJA,EAAQmV,EAAKruD,aAEf,IAAMgqT,GAAqB,IAAAngQ,eAAcqoB,EAASx4D,EAAGw4D,EAASv4D,EAAGu/B,GACjE+J,EAAIyuG,OACJzuG,EAAI0oL,UACFq+E,EAAmBtwS,EACnBswS,EAAmBrwS,GAErBspC,EAAIpQ,OAAOiB,GAASpqC,KAAKqnE,GAAK,MAE9B9tB,EAAI8oL,SAASg+E,EAAS,EAAG,EAAG//E,EAAO7nL,GACnC7iD,KAAKwzO,YAAY7vL,EAAI,EAAI+mL,EAAM/qO,MAAQ,EAAG,GAQ9CgkD,EAAI0uG,YAzUR,I,IAAA,Q,IAEA,O,IACA,OACA,QAKA,S,IACA,MACA,QACA,S,IACA,QACA,QACA,S,uLCfY5xI,E,wJAAZ,O,IAEA,OACA,Q,IACA,QACA,Q,IACA,Q,IACA,OACA,Q,IAEA,MACA,SACA,SACA,S,IACA,O,uDAEqBuhP,E,WA4BnB,WAAY/7M,EAAQyqO,GAAmC,IAAtBC,EAAsB,uDAAJ,IAAI,0BA3BvD+iB,iBAAmB,KA2BoC,KAzBvD3sS,MAAQ,CACN0sS,YAAa,GACbznN,WAAY,GACZ2nN,iBAAiB,EACjB77G,cAAe,GACftlC,UAAW,EAAA9mD,OAAO6oB,KAClBq/K,aAAc,EAAAloM,OAAOgpB,MACrBx2C,cAAe,GACf21N,SAAU,EAAAl6P,eAAepE,KACzB8V,YAAY,EACZvE,WAAW,EACXC,kBAAmB,KACnB4pO,gBAAiB,IAaoC,KAXvDg6B,UAAY,CACVC,UAAW,KACXC,eAAe,GASsC,KA4KvDC,gCAAkC,SAACnnQ,EAAKqI,GACtC,IAAI0oB,EAAO1oB,EAAM6sE,eAAes6G,OAAO9pB,QAAQ30I,KAC3CC,EAAO3oB,EAAM6sE,eAAes6G,OAAO9pB,QAAQ10I,KAC3CslD,GAAa,IAAA1vE,eAAcmqB,EAAMC,GACrChxB,EAAIgX,OAAOs/D,EAAW7/G,EAAG6/G,EAAW5/G,GAEpC,IAAM4uS,EAAO,UAAajpN,kBAC1Br8C,EAAIiX,OAAOquP,EAAK7uS,EAAG6uS,EAAK5uS,GACxBspC,EAAImX,SACJnX,EAAI6tG,aApLJxxJ,KAAKgI,GAAKyY,EAAK4B,KACfriB,KAAK+G,MAAM0sS,YAAcxtP,EACzBjmD,KAAK+G,MAAM2pR,YAAcA,EACzB1wR,KAAK+G,MAAM4pR,gBAAkBA,EAC7B3wR,KAAKsqK,a,yDAXO,OAAOtqK,KAAK+G,MAAM0sS,c,kCACpBv8S,GAAS8I,KAAK2qT,UAAUE,cAAgB3zT,I,mCACvC80D,GAAShsD,KAAK2qT,UAAUC,UAAY5+P,I,kCACnC,OAAO,UAAUpB,c,yCACV,OAAO,UAAUA,iB,mDAWpC,UAAa6O,SACX,UAAaC,OAAOM,OACpBh6D,KAAKi6D,OAAOxiE,KAAKuI,MACjBA,KACA,UAAa45D,WAAWmkC,MAE1B,UAAatkC,SACX,UAAaC,OAAOI,WACpB95D,KAAKmoD,YAAY1wD,KAAKuI,MACtBA,KACA,UAAa45D,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOC,WACpB35D,KAAK2oD,YAAYlxD,KAAKuI,MACtBA,KACA,UAAa45D,WAAW8jC,W,gCAK1B19F,KAAK+3D,mBACL/3D,KAAK+qT,kB,sCAGS,2BACd,YAA0B/qT,KAAK+G,MAAM0sS,YAArC,+CAAkD,SACpCp7O,WAFA,gF,yCAOd,UAAaurC,YAAY5jG,Q,+BAGlBgsD,GACY,UAAM7pD,WACOytD,cAAci4C,eACzB,EAAA5yD,mCAAmCM,OACtDv1C,KAAKgrT,aAAY,GACjBhrT,KAAKirT,aAAaj/P,M,2CAKpBhsD,KAAKgrT,aAAY,GACjBhrT,KAAKirT,aAAa,Q,+CAIlBjrT,KAAK0zS,iBAAmB,IAAI,EAAJ,QACtB,EACA,CAACt5R,EAAG,EAAGC,EAAG,GACV,CAACqhH,yBAAyB,EAAMC,UAAU,GAHpB,UAKtBnqH,YACA,K,kCAIQ42C,GACV,GAAIpoD,KAAK2qT,UAAUC,WAAa5qT,KAAK2qT,UAAUE,cAG7C,OAFA7qT,KAAKkrT,SAAS9iQ,GACdpoD,KAAKmrT,sBACE,EAELnrT,KAAK+G,MAAMskD,aACM,UAAMlpD,WACVytD,cAAci4C,eAAiB,EAAA50D,qBAAqBx7B,QACjE,UAAqBwlC,MAAMmuQ,gBAAgBprT,S,kCAKrCooD,GACVpoD,KAAK+G,MAAMskD,WAAarrD,KAAKqrT,gBAAgBjjQ,IAAapoD,KAAK+G,MAAM+/C,Y,sCAGvDsB,GACd,IAAK,IAAMkjQ,KAAiBtrT,KAAK+G,MAAM0sS,YAAa,CAClD,IAAM3+I,EAAY90J,KAAK+G,MAAM0sS,aAAa6X,EAAe,GACzD,GAAIx2J,EAAW,CACb,IAAMu+H,EAAerzR,KAAK+G,MAAM0sS,aAAa6X,GACvCC,GAAiB,IAAArwH,uBAAsBm4F,EAAcv+H,EAAW90J,KAAK+G,MAAM+wL,cAA2C,GAA3B93L,KAAK+G,MAAM+wL,eAC5G,IAAI,IAAAv5G,sBAAqBn2B,EAAUmjQ,GACjC,OAAO,GAIb,OAAO,I,+BAGAnjQ,GACP,IAAMojQ,GAAkB,IAAApW,oBAAmBp1S,KAAK2qT,UAAUC,UAAWxiQ,EAAUpoD,KAAK+G,MAAM4pR,iBACtF3wR,KAAK+G,MAAM0sS,YAAYh/S,OAIvBuL,KAAK2qT,UAAUC,UAAU5iT,KAAOhI,KAAK+G,MAAM0sS,YAAY,GAAGzrS,GAC5DhI,KAAK+G,MAAM0sS,YAAYt9O,QAAQq1P,GAE/BxrT,KAAK+G,MAAM0sS,YAAY1+S,KAAKy2T,K,iCAIrB,WACLtlQ,EAAQ,GACND,EAASjmD,KAAKkgK,YACpB,IAAK,IAAMgzH,KAAcjtO,EAAQ,CAC/B,IAAM8sB,EAAM9sB,EAAOxxD,OAIfs6D,EAAO,CACT0C,KAJcxL,GAAQitO,GAKtB36N,GAHWtS,GAAQitO,EAAa,GAAKngN,GAIrCnoB,UAAW,WACT,OAAO,EAAKA,cAGhB1E,EAAMnxD,KAAKg6D,GAGb,OAAO7I,I,8CAIP,IAAIopJ,EAAe,GACbrpJ,EAASjmD,KAAKkgK,YACpB,IAAK,IAAMorJ,KAAiBrlQ,EAAQ,CAClC,IAAM6uG,EAAY7uG,GAAQqlQ,EAAe,GACzC,GAAIx2J,EAAW,CACb,IAAMu+H,EAAeptO,GAAQqlQ,GAC7Bh8G,EAAav6M,KAAb,MAAAu6M,GAAA,cAAqB,IAAAF,uBAAsBikF,EAAcv+H,EAAW90J,KAAK+G,MAAM+wL,cAAgB,MAGnG,OAAOwX,I,6BAGF3rJ,GACLA,EAAIyuG,OACJpyJ,KAAKyrT,YAAY9nQ,GACjBA,EAAI0uG,UAEAryJ,KAAK2qT,UAAUC,WAAa5qT,KAAK2qT,UAAUE,eAC7C,UAAea,2BAA2B/nQ,EAAK3jD,KAAK2qT,UAAUC,WAAW,K,kCAIjEjnQ,GACV,IACMkkD,EADa,UAAM1lG,WACOytD,cAAci4C,aAC9ClkD,EAAI6W,UAAYx6D,KAAK+G,MAAM+wL,cAAgB,EAC3Cn0I,EAAIkX,YAAc76D,KAAK+G,MAAM6sS,aAC7B,UAAe+X,yBAAyBhoQ,EAAK3jD,KAAK+G,OAElD48C,EAAI6W,UAAYx6D,KAAK+G,MAAM+wL,cAC3Bn0I,EAAIkX,YAAc76D,KAAK+G,MAAMskD,YAAcw8C,IAAiB,EAAA50D,qBAAqBx7B,OAC7E,EAAAi0F,OAAO4oB,IACPt0H,KAAK+G,MAAMyrJ,UACf,UAAem5J,yBAAyBhoQ,EAAK3jD,KAAK+G,W,eArMjCi7P,G,iHChBrB,Q,IACA,OACA,Q,IACA,MACA,S,uDAEqB4pD,G,0CAEZC,UAAY,SAACloQ,EAAK58C,GACvB,IAAK,IAAIxS,EAAI,EAAGA,EAAIwS,EAAM0sS,YAAYh/S,OAAQF,IAC5C,QAAiCy+D,IAA7BjsD,EAAM0sS,YAAYl/S,EAAI,GAAkB,CAC1C,IAAImgF,EAAO3tE,EAAM0sS,YAAYl/S,GAAGskI,eAAes6G,OAAO9pB,QAAQ30I,KAC1DC,EAAO5tE,EAAM0sS,YAAYl/S,GAAGskI,eAAes6G,OAAO9pB,QAAQ10I,KAC1DslD,GAAa,IAAA1vE,eAAcmqB,EAAMC,GAErCD,EAAO3tE,EAAM0sS,YAAYl/S,EAAI,GAAGskI,eAAes6G,OAAO9pB,QAAQ30I,KAC9DC,EAAO5tE,EAAM0sS,YAAYl/S,EAAI,GAAGskI,eAAes6G,OAAO9pB,QAAQ10I,KAC9D,IAAIm3O,GAAiB,IAAAvhQ,eAAcmqB,EAAMC,GAG/B,IAANpgF,GACFovD,EAAIgX,OAAOs/D,EAAW7/G,EAAG6/G,EAAW5/G,GAEtCspC,EAAIiX,OAAOkxP,EAAe1xS,EAAG0xS,EAAezxS,K,EAK3C0xS,aAAe,SAACpoQ,EAAK58C,GAC1B,IAAI2tE,EAAO3tE,EAAM0sS,YAAY,GAAG56K,eAAes6G,OAAO9pB,QAAQ30I,KAC1DC,EAAO5tE,EAAM0sS,YAAY,GAAG56K,eAAes6G,OAAO9pB,QAAQ10I,KAC1DslD,GAAa,IAAA1vE,eAAcmqB,EAAMC,GAErChxB,EAAIiX,OAAOq/D,EAAW7/G,EAAG6/G,EAAW5/G,I,EAG/BqxS,2BAA6B,SAAC/nQ,EAAK28O,GAAyC,IAAhC0rB,EAAgC,wDAC3E3nI,EAAa,UAAMliL,WACnB8mG,EAAkBo7E,EAAWz0H,cAAcq5C,gBAC3CpB,EAAew8E,EAAWz0H,cAAci4C,aAEzCmkN,GAAuB/iN,GAAmBpB,IAAiB,EAAA5yD,mCAAmCM,MAC7Fy2Q,GAAuBnkN,IAAiB,EAAAlxD,sBAAsBzC,SAElE03Q,EAAeK,iCAAiCtoQ,EAAK28O,GAErDsrB,EAAeM,+BAA+BvoQ,EAAK28O,I,EAIhD4rB,+BAAiC,SAACvoQ,EAAK28O,GAC5C38O,EAAI+W,YACJ,IAAIga,EAAO4rN,EAAQznK,eAAes6G,OAAO9pB,QAAQ30I,KAC7CC,EAAO2rN,EAAQznK,eAAes6G,OAAO9pB,QAAQ10I,KAC7CslD,GAAa,IAAA1vE,eAAcmqB,EAAMC,GACrChxB,EAAIgX,OAAOs/D,EAAW7/G,EAAG6/G,EAAW5/G,GAEpC,IAAM+tC,EAAW,UAAa43C,kBAC9Br8C,EAAIiX,OAAOxS,EAAShuC,EAAGguC,EAAS/tC,GAChCspC,EAAImX,SACJnX,EAAI6tG,a,EAGCy6J,iCAAmC,SAACtoQ,EAAK28O,GAAmC,IAA1B3P,EAA0B,uDAAR,GACnEolB,GAAe,IAAA9V,iBAAgBK,EAAS3P,GAE9ChtO,EAAI+W,YACJ,IAAIga,EAAO4rN,EAAQznK,eAAes6G,OAAO9pB,QAAQ30I,KAC7CC,EAAO2rN,EAAQznK,eAAes6G,OAAO9pB,QAAQ10I,KAC7CslD,GAAa,IAAA1vE,eAAcmqB,EAAMC,GACrChxB,EAAIgX,OAAOs/D,EAAW7/G,EAAG6/G,EAAW5/G,GAEpCspC,EAAIiX,OAAOm7O,EAAa37R,EAAG27R,EAAa17R,GACxCspC,EAAImX,SACJnX,EAAI6tG,a,EAYCm6J,yBAA2B,SAAChoQ,EAAK58C,GACtC48C,EAAI+W,YACJkxP,EAAeC,UAAUloQ,EAAK58C,GAC9B48C,EAAImX,SAIA/zD,EAAM4sS,iBAAgD,IAA7B5sS,EAAM0sS,YAAYh/S,QAC7Cm3T,EAAeF,2BAA2B/nQ,EAAK58C,EAAM0sS,YAAY1sS,EAAM0sS,YAAYh/S,OAAQ,GAAIsS,EAAM+sS,kB,EAIlG75O,OAAS,SAACtW,EAAK58C,GACpB6kT,EAAeH,YAAY9nQ,EAAK58C,I,EAI3B0kT,YAAc,SAAC9nQ,EAAK58C,GAErBA,EAAM8sS,WAAa,EAAAl6P,eAAepE,OACpCoO,EAAI6W,UAAYzzD,EAAMyzD,UAAY,EAClC7W,EAAIkX,YAAc9zD,EAAM6sS,aACxBgY,EAAeD,yBAAyBhoQ,EAAK58C,IAE/C48C,EAAI6W,UAAYzzD,EAAMyzD,UACtB7W,EAAIkX,YAAc9zD,EAAMyrJ,UACxBo5J,EAAeD,yBAAyBhoQ,EAAK58C,I,aA1G5B6kT,G,yHCNrB,I,IAAA,O,IACA,MACA,S,WACA,O,IACA,OACA,SACA,Q,IACA,O,mDAMO,IAAMtW,EAAeA,EAAfA,aAAe,SAAChuP,GAC3B,IAAI04O,EAAa,CACfzvO,SAAU,UAAaqJ,WAAWujC,UAClCksH,SAAS,EACTunB,YAAY,EACZmC,kBAAkB,EAClBC,iBAAiB,EACjBnC,kBAAkB,EAClBC,aAAc,SAAC1oL,EAAU+jQ,EAActjQ,EAAOC,GAEzB,UAAM3mD,WACQytD,cAAcm5C,eAE7CojN,EAAarmH,aAAa19I,IAG9B8oL,gBAAiB,SAAC9oL,EAAU+jQ,KAM5Bh7E,kBAAmB,SAAC/oL,EAAU+jQ,GAM5B,GAFmB,UAAMhqT,WACQytD,cAAcm5C,cAI7C,OAFa,UAAqB9rD,MAAMmvQ,eAAeD,EAAa5yT,QAC/D8yT,SAASF,EAAa5yT,SACpB,IAIT63O,EAAc,CAChB/8L,OAAQ,GACRmmB,UAAW,EACXt/C,OAAQ,EAAAm2N,mBAAmBpiF,OAGzBh6E,EAAO,UAAUjqB,cACjBjJ,EAAQ,UAAWA,MACnB6yB,EAAS,CACXx6D,GAAIktC,EAAIltC,EAAI66D,EAAK76D,GAAK2nC,EACtB1nC,GAAIitC,EAAIjtC,EAAI46D,EAAK56D,GAAK0nC,GAGxB,OAAO,IAAI,EAAJ,QAAY6yB,EAAOx6D,EAAGw6D,EAAOv6D,EAA7B,UAA2C2lR,EAAY5uD,IAS9BgkE,EAArBA,mBAAqB,SAACkX,EAAmBlkQ,GAAmC,IAAzBuoO,EAAyB,uDAAP,GAC1EtsG,EAAa,UAAMliL,WACnB8mG,EAAkBo7E,EAAWz0H,cAAcq5C,gBAC3CsjN,EAAejX,EAAaltP,GAClC,GAAI6gD,EAAiB,CACnB,IAAMm3L,GAAiB,IAAAH,iBAAgBqsB,EAAmB37B,GACpD0P,GAAwB,IAAAxrN,yBAAwBurN,EAAehmR,EAAGgmR,EAAe/lR,GACvFkyS,EAAa1hQ,YAAYw1O,GAG3B,OAAOksB,I,gGChFT,OACA,S,WACA,OACA,Q,IAMA,O,IACA,Q,IACA,Q,IACA,M,IACA,QACA,Q,IACA,OACA,QAKA,Q,6DASE,WAAY3yQ,GAAO,sCALnB4yQ,wBAA0B,KAKP,KAJnB91C,qBAAuB,CACrBjwN,SAAU,IAGO,KAInByH,OAAS,SAACj6D,KAJS,KAQnBgrK,OAAS,WACP,MAAO,CACLt/J,MAAO,EAAK22I,gBACZz2I,OAAQ,EAAKs2I,iBACbgnB,MAAO,EAAKsvJ,kBAZG,KAgBlBn2K,cAAgB,WACd,OAAO,EAAK6mJ,QAAQ9mJ,UAAS,IAjBb,KAoBnBo2K,cAAgB,WACd,OAAO,EAAKtvB,QAAQjgI,UAAS,IArBZ,KAwBnB/mB,eAAiB,WACf,OAAO,EAAKgnJ,QAAQlnJ,WAAU,IAzBb,KA4BnB2mB,gBAAkB,WAChB,IACM3rJ,EADQ,UAAM9O,WACU+qD,kBAAkBj8C,gBAChD,EAAKu7S,wBAA0Bv7S,EAAkBA,EAAgBuK,KAAK7X,UAAUqE,GAAK,KACrFhQ,QAAQ4B,IAAI,+BAAgC,EAAK4yT,0BAhChC,KAmCnBvyP,OAAS,SAACtW,GAAiE,IAA5Dy0I,EAA4D,uDAA7C,KAAMs0H,EAAuC,uDAA7B,EAAAn6Q,iBAAiBC,QAC7D,IAAI,YAAa,UAAUrwC,WAAWilD,QAAtC,CAEA,IAAMstL,EAAe,EAAKz5E,aAAat3G,GACvC,EAAKgpQ,cAAchpQ,EAAKy0I,EAAcs0H,EAAUh4E,GAChD,EAAKk4E,4BAA4BjpQ,GACjC,UAAY6yL,uBAAuB7yL,EAAKy0I,EAAc,EAAK+kG,SAC3D,UAAYxmD,gBAAgBhzL,EAAKy0I,EAAc,EAAK+kG,SACpD,EAAK0vB,cAAclpQ,GAEuC,OAAtD,EAAKw5O,QAAQrjJ,cAAcC,wBAE7B,EAAK+yK,6BAA6BnpQ,GAEhC,UAAO9iD,cACT,EAAKksT,qBAAqBppQ,EAAKy0I,EAAcs0H,GAC7C,EAAKM,wBAAwBrpQ,EAAKy0I,EAAcs0H,MAnDjC,KAuDnB9vB,wBAA0B,SAACj5O,GACzB,IAAMsC,EAAS,EAAKk3O,QAAQplJ,sBAC5B,UAAcod,uBAAuBxxG,EAAKsC,EAAQ,KAzDjC,KA4DnB8mQ,qBAAuB,SAACppQ,GACtB,GAAI,EAAKw5O,QAAQ5lK,eAAgB,CAC/B5zE,EAAIyuG,OACJzuG,EAAI+W,YACJ/W,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,EAAA6wC,OAAO6oB,KAJM,2BAK/B,YAA4B,EAAK4oK,QAAQ5lK,eAAzC,+CAAyD,KAA9CR,EAA8C,QACvDpzE,EAAIgX,OAAOo8D,EAActlE,KAAKr3C,EAAG28G,EAActlE,KAAKp3C,GACpDspC,EAAIiX,OAAOm8D,EAAcx+D,GAAGn+C,EAAG28G,EAAcx+D,GAAGl+C,IAPnB,6EAS/BspC,EAAImX,SACJnX,EAAI6tG,YACJ7tG,EAAI0uG,YAxEW,KA4EnB26J,wBAA0B,SAACrpQ,GAEzB,IAAI2G,EAAc,EAAK6yO,QAAQrzO,YACzBxC,GAAM,IAAAiD,eAAcD,EAAYlwC,EAAGkwC,EAAYjwC,EAAG,EAAK8iR,SACvD/wD,EAAa,EAAK+wD,QAAQrjJ,cAAcC,uBAAyB,MACjE2wF,EAAQ/mL,EAAIgnL,YAAYyB,GAC9BzoL,EAAI8oL,SAASL,EAAY9kL,EAAIltC,EAAGktC,EAAIjtC,EAAGqwN,EAAO,KAlF7B,KAqFnBoyD,wBAA0B,SAACn5O,GACzB,IAAMsC,EAAS,EAAKk3O,QAAQplJ,sBAC5B,UAAYs8F,4BAA4B1wL,EAAKsC,IAvF5B,KA0FnB6mQ,6BAA+B,SAACnpQ,GAC9BA,EAAIyuG,OACJzuG,EAAI+W,YACJ,EAAKkiO,wBAAwBj5O,GAC7B,EAAKm5O,wBAAwBn5O,GAC7BA,EAAI6tG,YACJ7tG,EAAI0uG,WAhGa,KAmGnBu6J,4BAA8B,SAACjpQ,GAC7B,IAEMwmQ,EAAY,MAFC,EAAK7zK,gBAGlB22K,EAAa,MAFC,EAAK92K,iBAGnBtzF,EAAW,UAAOD,UAAUG,iBAC5BwpL,EAAO1pL,EAAW,MAAQ,UAAOyD,kBACjC4mQ,EAAavpQ,EAAIgnL,YAAYw/E,GAC7BgD,EAAcxpQ,EAAIgnL,YAAYw/E,GARC,EASJ,UAAiB3wK,qBAAqB,EAAK2jJ,SAAQ,GAAM,GAAnFvoJ,EAT8B,EAS9BA,KAAMC,EATwB,EASxBA,KAAYE,GATY,EASlBD,KATkB,EASZC,MAGrBztF,EAAM,CACRltC,EAAGw6H,GAAQC,EAAOD,GAAQ,EAAIs4K,EAAWvtT,MAAQ,EACjD0a,EAAG06H,EAAOlyF,GAWZc,EAAI6oL,UAAY,QAChB7oL,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAa8wH,cAErD,IAAMs4L,EAAa,UAAOxqQ,UAAUG,iBACpCY,EAAI8oL,SAAS09E,EAAW7iQ,EAAIltC,EAAGktC,EAAIjtC,EAAKwoC,EAAW,EAAIqqQ,EAAYE,EAAY7gF,GAC/E5oL,EAAI8oL,SAASwgF,EAAY3lQ,EAAIltC,EAAI,EAAGktC,EAAIjtC,EAAKwoC,EAAW,EAAIsqQ,EAAaC,EAAY7gF,IAjIpE,KAoInBtxE,aAAe,WAEb,OAAI,EAAKkiI,QAAQhjI,YAAYk+B,MAAM+L,qBAC1B,EAAA7xJ,iBAAiBK,aAEjB,EAAAL,iBAAiBG,eAzIT,KA6InBi6Q,cAAgB,SAAChpQ,GAIZ,IAHYy0I,EAGZ,uDAH2B,KACfq8C,EAEZ,uDAF4B,EAAAliM,iBAAiBC,QACjCkiM,EACZ,uDAD2B,EAAAniM,iBAAiBG,cAE/C,UAAY8hM,iBAAiB7wL,EAAKy0I,EAAcq8C,EAAgBC,EAAc,EAAKyoD,SACnF,IAAM94G,EAAa,UAAMliL,WACnB0lG,EAAew8E,EAAWz0H,cAAci4C,aAC9C,GAAIA,IAAiB,EAAA5yD,mCAAmC+H,SACnD6qD,IAAiB,EAAA5yD,mCAAmC7D,QACpDy2D,IAAiB,EAAA5yD,mCAAmC60K,OACpDjiH,IAAiB,EAAAp2D,2BAA2B8C,SAC5CszD,IAAiB,EAAA5yD,mCAAmCS,WACpDmyD,IAAiB,EAAA5yD,mCAAmCd,QACpD0zD,IAAiB,EAAA50D,qBAAqBx7B,OAEzC,UAAY0+N,mBAAmBxyL,EAAKy0I,EAAc,EAAK+kG,cAGlD,GAAIt1L,IAAiB,EAAA5yD,mCAAmCG,OAC1DyyD,IAAiB,EAAA5yD,mCAAmCE,OACpD0yD,IAAiB,EAAA5yD,mCAAmCI,MACpD,UAAUkW,iBACb,CACA,IAAM8hQ,EAAc,UAAU9hQ,iBACxB20E,GAA8B,IAAAZ,4BAA2B,EAAK69J,SAC9Dh9J,GAA6B,IAAAC,2BAA0B,EAAK+8J,SAKlE,GAAKkwB,IAAe,IAAArtL,uBAAsB,UAAUz0E,iBAAkB,EAAK4xO,UACrEt1L,IAAiB,EAAA5yD,mCAAmCG,OAAS+qF,GAC7Dt4B,IAAiB,EAAA5yD,mCAAmCE,OAAS+qF,GAC7Dr4B,IAAiB,EAAA5yD,mCAAmCI,MAAQ6qF,EAChE,CACA,IAAM7rH,EAAQ,CACZmmD,UAAW,EACXK,YAAa,EAAAm0F,MAAM16B,IACnB8hH,WAAY,EACZC,kBAAmB,GAErB,UAAYF,mBAAmBxyL,EAAKy0I,EAAc,EAAK+kG,QAAS9oR,MAvLnD,KA4LnBw4S,cAAgB,SAAClpQ,GACf,UAAYmzL,YAAYnzL,EAAK,EAAKw5O,UA7LjB,KAgMnBmwB,sBAAwB,WACtB,IAAMrnQ,EAAS,EAAKk3O,QAAQplJ,sBAE5B,OAAO,UAAei7I,8BAA8B/sO,EAAQ,EAAKywN,qBAAqBjwN,WAlMtFzmD,KAAKm9R,QAAUvjP,I,6JC/BnB,a,IACA,O,IACA,Q,IACA,O,mDAEoC0rJ,EAAvBA,qBAAuB,SAAC1rJ,GAC/BA,aAAiBA,EAAjBA,UACFA,EAAMilH,mCAAkC,GACxC,UAAiB3rB,+BAA+Bt5F,GAIhDA,EAAMijH,oBAAmB,KAE3B,IAAAptC,kBAAiB,UAAUh1G,KAAKC,cAAc,CAAC1S,GAAI,0CAGSq9L,EAAjDA,+CAAiD,SAACzrJ,GAC7D,SAAIA,aAAiBA,EAAjBA,SACEA,EAAM44F,uBAEF54F,EAAMklH,sC,0JCdhB,aAAc,sCANdyuJ,eAAgB,EAMF,KALdnpH,sBAAuB,EAKT,KAJdopH,OAAQ,EAIM,KAHdC,kBAAoB,IAGN,KAFdC,uBAAyB,KAEX,KAGd7gI,gBAAkB,SAAC31L,IACZ,EAAKq2T,eAAiBr2T,EACzB,EAAKy2T,wBACI,EAAKJ,gBAAkBr2T,GAChC,EAAK02T,uBAEP,EAAKL,cAAgBr2T,EACrBw3F,YAAY,WACVt1F,SAASytD,iBAAiB,QAAS,EAAK+mQ,wBACvC,IACHl/N,YAAY,WACV,EAAKk/N,yBACJ,EAAKF,yBAfI,KAkBdC,sBAAwB,WACtB,EAAKvpH,sBAAuB,EAC5B11G,YAAY,WACV,EAAK01G,sBAAuB,IAC3B,EAAKqpH,mBACR,EAAKD,MAAQ9+N,YAAY,WACvB,EAAKi/N,0BACqB,EAAzB,EAAKF,oBAzBI,KA4BdG,qBAAuB,WACrBjsK,aAAa,EAAK6rK,OAClB,EAAKD,eAAgB,EAErBn0T,SAAS8pG,oBAAoB,QAAS,EAAK0qN,yB,qKCvC/C,I,IAAA,QAEA,Q,IACA,MACA,Q,mDAQ8C/9F,EAAjCA,+BAAiC,SAACxsN,GAC7C,IAAM21M,EAA0B,UAAM72M,WAAWwD,gBAAgBqzM,wBACjE,IAAK31M,IAAYA,EAAQM,YAAcN,EAAQM,UAAUmF,kBACvD,OAAOzF,EAET,IAAM5M,EAAO4M,EAAQM,UAAUmF,kBAAkBxM,cAC3C8zG,GAAU,IAAAh0G,2BAChB,GAAI3F,IAAS25G,EAGX,OAFA/sG,EAAQugF,0BAA2B,EACnCvgF,EAAQM,UAAUgS,UAAW,EACtBtS,EAET,IAAKuE,MAAMC,QAAQmxM,GACjB,OAAO31M,EAET,IAAM41M,EAAeD,EAAwBltM,MAAK,SAAA+hT,GAAA,OAAUA,EAAO1hM,QAAQ7vH,gBAAkB7F,KAQ7F,OAPIwiN,IACF51M,EAAQugF,0BAA2B,EACnCvgF,EAAQM,UAAUgS,UAAW,EACzBsjM,EAAaxgG,YACfp1G,EAAQO,gBAAkBq1M,EAAaxgG,YAGpCp1G,GAS4ByuQ,EAAxBA,sBAAwB,SAACnuQ,EAAWmqT,EAAmB5yS,IAC7D4yS,EAAA,mBAA0ClmT,MAAMC,QAAQlE,EAAA,qBAC3DmqT,EAAA,kBAAyCnqT,EAAA,mBAG3C,EAAAy9C,mCAAmChjD,SAAQ,SAAAxG,GACzC,IAAKk2T,EAAkBl2T,IAAagQ,MAAMC,QAAQlE,EAAU/L,IAAY,CACtEk2T,EAAkBl2T,GAAY+L,EAAU/L,GACxC,IAAM48B,EAAetZ,EAAOuZ,aAAY,GACxC9wB,EAAU/L,GAAUwG,SAAQ,SAAAuF,GAC1BuX,EAAO8Z,cAAcrxB,EAAW6wB,UAIhC5sB,MAAMC,QAAQimT,EAAkB5nT,iBAAoB4nT,EAAkB5nT,eAAezR,SAAmD,IAAzCq5T,EAAkB5nT,eAAe,KAChI0B,MAAMC,QAAQlE,EAAUuC,kBAAmBvC,EAAUuC,eAAezR,SAA2C,IAAjCkP,EAAUuC,eAAe,KAC3G4nT,EAAkB5nT,eAAiBvC,EAAUuC,gBAE/C,EAAAm7C,0BAA0BjjD,SAAQ,SAAC5G,GAC3Bs2T,EAAkBt2T,MAAQ,aAAQs2T,EAAkBt2T,MAAUmM,EAAUnM,KAAS,aAAQmM,EAAUnM,MACvGs2T,EAAkBt2T,GAAOmM,EAAUnM,GACnCmM,EAAUu+E,+BAAgC,EAC1C4rO,EAAkB5rO,+BAAgC,MAGtD,EAAA5gC,uBAAuBljD,SAAQ,SAAC5G,GACxBs2T,EAAkBt2T,MAAQ,aAAQs2T,EAAkBt2T,MAAUmM,EAAUnM,KAAS,aAAQmM,EAAUnM,MACvGs2T,EAAkBt2T,GAAOmM,EAAUnM,OAGnCmM,EAAU24K,eACZwxI,EAAkBxxI,aAAe34K,EAAU24K,aAC3CwxI,EAAkBtrT,MAAQmB,EAAUnB,MACpCsrT,EAAkBprT,KAAOiB,EAAUjB,KACnCorT,EAAkB7iT,SAAWtH,EAAUsH,SACvC6iT,EAAkBj1M,aAAel1G,EAAUk1G,eAKZ05G,EAAtBA,oBAAsB,SAAC5uN,EAAWuX,GACxCtT,MAAMC,QAAQlE,EAAUoqT,oBAAuBpqT,EAAUoqT,kBAAkBt5T,QAGhFkP,EAAUoqT,kBAAkB3vT,SAAQ,SAAA4vT,GAIlC,GAHKrqT,EAAUwa,kBACbxa,EAAUwa,gBAAkB,KAE1Bxa,EAAUwa,gBAAgBle,MAAK,SAAAsf,GAAA,OAAcA,EAAWvX,KAAOgmT,KAAnE,CAIA,IADA,IAAIC,EAAkB,KACb15T,EAAI,EAAGA,EAAI2mB,EAAOyZ,cAAclgC,OAAQF,IAC/C,GAAI2mB,EAAOyZ,cAAcpgC,GAAGyT,KAAOgmT,EAAc,CAC/CC,EAAkB/yS,EAAOyZ,cAAcpgC,GACvC,MAGA05T,EACFtqT,EAAUwa,gBAAgBppB,KAAKk5T,GAE/Bj2T,QAAQ4B,IAAI,uC,8ECzGiBu5G,EAAtBA,oBAAsB,SAAC9vG,GAClC,OAAKA,EAAQyP,SAAR,YAGAzP,EAAQyP,SAAR,mBAC4C,IAA1CzP,EAAQyP,SAAR,WAA+Bre,QAA+D,iBAAtC4O,EAAQyP,SAAR,WAA+B,GACtFzP,EAAQyP,SAAR,WAA+B,GAAG3Y,SAAS,MAC7CkJ,EAAQyP,SAAR,iBAAuCzP,EAAQyP,SAAR,WAA+B,GAAG/U,MAAM,MAAM+J,KAAI,SAAAomT,GAAA,OAASA,KACzF7qT,EAAQyP,SAAR,WAA+B,GAAG3Y,SAAS,OACpDkJ,EAAQyP,SAAR,iBAAuCzP,EAAQyP,SAAR,WAA+B,GAAG/U,MAAM,KAAK+J,KAAI,SAAAomT,GAAA,OAASA,MAGnG7qT,EAAQyP,SAAR,iBAAuCzP,EAAQyP,SAAR,YAGpCzP,EAAQyP,SAAR,kBAbE,O,+ECFX,YACA,QAEI0rB,EAAU,GACd9pC,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9BtlD,EAAQslD,GAAc,CACpB61H,WAAY,CACVmrD,WAAY,MACZC,WAAY,MACZopD,SAAU,MACV5rE,MAAO,MACPsiB,aAAc,OAEhBG,iBAAkB,IAClBkhC,OAAQ,CACNhhC,WAAY,KACZC,WAAY,MAEdF,YAAa,CACX5C,kBAAmB,KACnB+C,mBAAoB,KACpB9C,QAAS,KACTG,gBAAiB,KACjB4C,iBAAkB,KAClB3C,aAAc,KACd4C,cAAe,KACf3C,SAAU,KACV4C,UAAW,KACX3C,iBAAkB,KAClBC,QAAS,KACT4C,SAAU,KACVE,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,aAAc,KACdC,UAAW,KACXG,MAAO,KACPC,UAAW,MAEbtsK,OAAQ,CACNwsK,UAAW,KACXC,cAAe,KACfC,eAAgB,KAChBtD,iBAAkB,KAElBW,SAAU,CACRC,kBAAmB,KACnBC,MAAO,KACPE,UAAW,KACXC,UAAW,MAGftiB,MAAO,CACLG,SAAU,OAEZQ,QAAS,CACPqkB,YAAa,IACbC,kBAAmB,KACnBC,MAAO,KACPC,aAAc,KACdC,YAAa,KACbC,YAAa,KACbC,UAAW,MAEbC,QAAS,CACPC,eAAgB,IAChBC,YAAa,MAEfsQ,MAAO,MACPw2C,eAAgB,KAChBC,YAAa,IACbC,aAAc,KACdzmM,gBAAiB,KACjB1vH,OAAQ,KACRyiC,eAAgB,KAChByW,kBAAmB,IACnBjX,WAAY,KACZC,mBAAoB,KACpBk0R,WAAY,IACZC,UAAW,KACXC,WAAY,KACZC,aAAc,KACdC,SAAU,KACVC,UAAW,KACXtnM,cAAe,KACfltE,kBAAmB,KACnBitE,cAAe,KACfD,cAAe,KACfD,YAAa,KACbM,iBAAkB,KAClBonM,YAAa,KACbC,aAAc,KACdhnM,OAAQ,KACRinM,aAAc,MACdh5R,YAAa,MACbi5R,mBAAoB,IACpBC,eAAgB,MAChBC,gBAAiB,MACjBC,gBAAiB,MACjBjmM,cAAe,MACfkmM,mBAAoB,MACpBC,UAAW,MACXz0Q,WAAY,MACZ0tE,UAAW,MACXC,WAAY,S,UAiID,CACb/pF,UACAinN,mBA9HyB,SAAC5+J,EAAO8wF,EAAe5vJ,GAChD,IACMw/O,GADmB,EAAA1tQ,kBAAoB,OAAS,KAChB,IAEtC,GAAIgtF,EAAM8qB,OAAQ,CAChB,IAEMomK,EAAqC,IAArBlxL,EAAM8qB,OAAOM,MAFhB,EAGb+lK,EAAqC,IAArBnxL,EAAM8qB,OAAOO,MAHhB,EAIb+lK,EAAqC,IAArBpxL,EAAM8qB,OAAOS,MAJhB,EAKb8lK,EAAqC,IAArBrxL,EAAM8qB,OAAOU,MALhB,EAMfj/B,EAAKm0L,GAAax/O,EAAiBpoB,MAAQo4Q,EAAgB,KAC3DzkM,EAAKi0L,GAAax/O,EAAiBpoB,MAAQq4Q,EAAgB,KAC3D3kM,EAAKk0L,GAAax/O,EAAiBloB,OAASo4Q,EAAgB,KAC5D1kM,EAAKg0L,GAAax/O,EAAiBloB,OAASq4Q,EAAgB,KAEhE,MAAO,CACLr/D,aAAc,CAAC,CAACzlI,EAAIC,GAAK,CAACC,EAAID,GAAK,CAACC,EAAIC,GAAK,CAACH,EAAIG,IAClD5zE,MAAQ2zE,EAAKF,EACbvzE,OAAQ0zE,EAAKF,GAOjB,OADiBwT,EAAVO,QAQL,KAAK5oD,EAAQm5I,GAAekqE,MAAMkjB,WAClC,KAAKvmO,EAAQm5I,GAAegiC,WAAWorD,WACrC,OAAQptF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,OAAO,KAET,KAAK,EAAAoB,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,IAAXA,EAAe,GAAG,CAAY,IAAXA,EAA0B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACrG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAekqE,MAAME,UAClC,KAAKvjN,EAAQm5I,GAAegiC,WAAWooC,UACrC,OAAQpqE,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAY,IAAXA,EAA0B,KAAXA,IACxG5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,KAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAekqE,MAAMG,SAClC,KAAKxjN,EAAQm5I,GAAegiC,WAAWqoC,SACrC,OAAQrqE,GACN,KAAK,EAAA5/I,mBAAmBpB,QAOxB,KAAK,EAAAoB,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAC,EAAE,GAAG,CAAY,IAAX0uD,EAAe,GAAG,CAAY,IAAXA,EAA0B,KAAXA,GAAiB,CAAC,EAAa,KAAXA,IAC5E5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,KAAX0nQ,GAId,OAAO,KAET,KAAK/oO,EAAQm5I,GAAegiC,WAAW4oC,MAIjC,MAAO,CACL1pC,aAAc,CAAC,CAAC,EAAa,IAAX0uD,GAAgB,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,KAAXA,EAA2B,KAAXA,GAAiB,CAAC,EAAa,KAAXA,IACxG5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAKhB,KAAK/oO,EAAQm5I,GAAegiC,WAAWmrD,WACrC,OAAQntF,GACN,KAAK,EAAA5/I,mBAAmBpB,QACtB,MAAO,CACLkiL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,KAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAGZ,KAAK,EAAAxvO,mBAAmBjB,QACtB,MAAO,CACL+hL,aAAc,CAAC,CAAY,IAAX0uD,EAAe,GAAG,CAAY,KAAXA,EAAgB,GAAG,CAAY,KAAXA,EAA2B,IAAXA,GAAgB,CAAY,IAAXA,EAA0B,IAAXA,IACvG5nQ,MAAkB,IAAX4nQ,EACP1nQ,OAAmB,IAAX0nQ,GAId,OAAO,KACT,QACE,OAAO,S,4MCtOQ+nD,E,YACnB,WAAYxwO,EAASx4E,EAAQuV,IAAU,gGAC/BijE,IAD+B,OAErC,EAAKx4E,OAASA,EACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAWA,EAJqB,E,qEAQlClY,GACH,sGAAmBA,EAAW,IAAI2rT,GAAqB,EAAOtvT,KAAKsG,OAAQ3C,EAAU6M,c,yCAGpEqlC,EAASouC,GAC1B,OAAOjkF,KAAKuvT,yBAAyB15Q,EAASouC,O,GAflD,M,4BACqBqrO,G,8ICDrB,SACA,QACA,Q,IACA,OACA,QACA,QACA,QACA,Q,qDAEa7qD,Q,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAjhQ,aAAaC,UADpB,OAEZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAK8zS,cAAgB,UACrB,EAAK9rT,cAAL,kBACA,EAAKokH,OAAS,KACd,EAAKm9B,kBAAoB,CAAC,UARd,E,qEAWTthJ,GAA+B,WAApBuhJ,IAAoB,yDAClC,MAA4B,WAAxBvhJ,EAAU6M,YACPxQ,KAAK8nH,SACR9nH,KAAK8nH,OAAS,IAAI2nM,GAAW,GAC7BzvT,KAAK+e,aAAahqB,KAAKiL,KAAK8nH,QAC5B9nH,KAAK8nH,OAAOpnH,UAAY,kBAAM,IAE3BV,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAErB+U,GACFllJ,KAAK8nH,OAAOsoB,KAAKzsI,IAEZ,K,2CAMT,OAAO,I,iCAIP,OAAO3D,KAAK+e,aAAajX,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,wDAIvE,OAAOlP,KAAKyc,WAAW,K,iCAGdvB,GACTlb,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,U,aA5CvClT,GAAK,S,OAgDRynT,E,YAEJ,WAAY3wO,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAK8zS,cAAgB,UACrB,EAAKxsO,eAAgB,EANF,E,oFAuBDmS,GAClB,OAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,KACpC,IAAAqjE,oBAAmB5D,EAAc,EAAG,S,+MCrFjD,Q,mDAE0CuhK,EAA7BA,2BAA6B,SAACrzP,GACzC,QAAKA,IAGqB,qBAAnBA,EAAQiD,QAAoD,gBAAnBjD,EAAQiD,QAA+C,gBAAnBjD,EAAQiD,SAJvF,IAgBM,EATPopT,EAAiF,IAAlCt2T,SAASC,SAASqC,YACnE,CAAC,mBAAoB,uBAAwB,YAAa,aAAc,iBAAkB,kBAC1F,CAAC,cAAe,aAAc,qBAAsB,iBAAkB,aAAc,kBAOhC86P,EAA3CA,0CAAA,gCAA2C,WAAOxtK,GAAP,wFACjDA,EAAetoF,UADkC,oDAIhDivT,EAAuB3mO,EAAetoF,cACxCsoF,EAAel2E,SAAf,YAAyCk2E,EAAel2E,SAAf,WAAsC,IAAM68S,EAAqBxpS,eACzGwpS,EAAqBxpS,cAAcrT,SAAnC,YACC68S,EAAqBxpS,cAAcrT,SAAnC,WAA0D,KAAOk2E,EAAel2E,SAAf,WAAsC,IAPvD,oBAS9C49H,EAAei/K,EAAqBjvT,YACpCwa,EAASw1H,EAAax1H,OAExBmqH,EAAkB,GAChBuqL,EAAmB,CACvB1uO,SAAU,aACVI,UAAW0H,EAAel2E,SAAf,WAAsC,IAEnD48S,EAA6CtxT,SAAQ,SAACkI,GACpD,IAAMsW,EAAe1B,EAAOgb,wBAAwB5vB,GACpD,GAAIsW,GAAgBA,EAAauJ,gBAAkBvJ,EAAauJ,cAAc2+D,wBAAwB8qO,GAAmB,CACvH,IAAM/iL,EAAqBjwH,EAAauJ,cAAc1G,yBAChDowS,EAAgBjzS,EAAa6jE,uBAAuB34E,KAAI,SAAAs5E,GAC5D,MAA2B,eAAvBA,EAAUF,SACL0uO,EAEFxuO,KAEYxkE,EAAa+kE,SAAS71E,MAAK,SAAAzI,GAC9C,OAAQA,EAAQoc,2BAA6BotH,GAAuBxpI,EAAQs9E,gCAAgCkvO,OAG1GjzS,GAAgBA,EAAaywH,8BAAgCzwH,EAAaywH,6BAA6BlzI,SAAS0yI,IAClHxH,EAAgBtwI,KAAK,CACnB63I,YAAahwH,EACbiwH,qBACAI,mBAAmB,SAKvB5H,EAAgB5wI,OAxCgC,mCAyC5C,IAAA63I,gCAA+BjH,GAAiB,GAzCJ,iCA6C/CjvI,QAAQC,WA7CuC,mDAA3C,8C,sIClBb,U,mDAGA,IAAMy5T,E,EAFN,OAEyB,QAAWvzR,OAAOqqB,iBAAmB,yBAA2B,KAEpEmpQ,E,+GACG97T,GAAoB,IAAd62J,EAAc,uDAAJ,GACpC,OAAO,IAAAklK,UAAS,mBAAoB/7T,GAA7B,gBAAuC62J,EAAvC,CAAgDzvJ,OAAQy0T,O,qCAG3C77T,GAAoB,IAAd62J,EAAc,uDAAJ,GACpC,OAAO,IAAAklK,UAAS,8BAA+B/7T,GAAxC,gBAAiD62J,EAAjD,CAA0DzvJ,OAAQy0T,O,wCAGlD77T,GAAoB,IAAd62J,EAAc,uDAAJ,GACvC,OAAO,IAAAklK,UAAS,kCAAmC/7T,GAA5C,gBAAqD62J,EAArD,CAA8DzvJ,OAAQy0T,O,8CAGhD77T,GAAoB,IAAd62J,EAAc,uDAAJ,GAC7C,OAAO,IAAAklK,UAAS,yCAA0C/7T,GAAnD,gBAA4D62J,EAA5D,CAAqEzvJ,OAAQy0T,O,8BAGvE77T,GAAoB,IAAd62J,EAAc,uDAAJ,GAC7B,OAAO,IAAAklK,UAAS,wBAAyB/7T,GAAlC,gBAA2C62J,EAA3C,CAAoDzvJ,OAAQy0T,S,eAlBlDC,G,2HCLrB,O,IACA,S,IACA,S,uDAEqBE,E,WAkBnB,WAAY3H,EAAYh3K,EAAa9T,GAAQ,sCAhB7C0yL,YAAc,GAgB+B,KAf7CC,aAAe,GAe8B,KAd7CC,QAAU,CACRzwT,MAAO,GACPE,OAAQ,GACRsyJ,UAAW,0BAWgC,KAT7Cg3D,IAAM,KASuC,KAR7C7mM,KAAO,KAQsC,KAW7Cy1C,iBAAmB,WACjB,EAAKoxJ,IAAIpxJ,mBACT,EAAKz1C,KAAKy1C,oBAbiC,KAgB7C46E,aAAe,WACb,EAAKw2E,IAAIx2E,eACT,EAAKrwH,KAAKqwH,gBAjBV3yI,KAAKkwT,YAAc5H,EACnBtoT,KAAKmwT,aAAe7+K,GAA4BtxI,KAAKmwT,aACrDnwT,KAAKowT,QAAU5yL,GAAkBx9H,KAAKowT,Q,uDAPtCpwT,KAAKmpN,IAAM,IAAI,EAAJ,QAAQnpN,KAAKkwT,YAAalwT,KAAKowT,SAC1CpwT,KAAKsiB,KAAO,IAAI,EAAJ,QAAUtiB,KAAKmwT,aAAc,cAAe,EAAG,EAAG,IAAK,GAAI,EAAGnwT,KAAKmpN,U,6CAU/EnpN,KAAKqwT,QAAQrwT,KAAKowT,SAClB,UAAUloQ,eAAeooQ,WAAWtwT,Q,+BAcpC,MAAO,CACLsoT,WAAY,CACVluS,EAAGpa,KAAKmpN,IAAIz0I,KACZr6D,EAAGra,KAAKmpN,IAAIx0I,MAEd28D,YAAatxI,KAAKsiB,KAAKiuS,UAAUC,IACjChzL,OAAQx9H,KAAKmpN,IAAI3rF,U,mDA9CFyyL,G,gKC+EN,WAAuC,IAA9BlpT,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMwkD,qBACT,IAAMyrP,EAAW/7T,OAAO+2B,OAAO,GAAI1kB,EAAO,CAACojB,eAAgBuW,EAAO7f,QAAQsJ,iBAO1E,OANIuW,EAAO7f,QAAQplB,iBAAmBsL,EAAMogN,qBAAqBzmL,EAAO7f,QAAQplB,kBAC9Eg1T,EAAStpG,sBAAT,gBACKpgN,EAAMogN,sBADX,gBAEGzmL,EAAO7f,QAAQplB,eAAiBilC,EAAO7f,QAAQsJ,kBAG7CsmS,EAET,KAAKjwS,EAAMykD,qCACX,KAAKzkD,EAAMukD,kBACX,KAAKvkD,EAAM4kD,gCACX,KAAK5kD,EAAMklD,mCACX,KAAKllD,EAAMglD,iCACX,KAAKhlD,EAAMolD,2BACX,KAAKplD,EAAMilD,0BACT,OAAO/wE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM0kD,gBACT,OAAOxwE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BozF,YAAY,qCAAWpzF,EAAMozF,aAAjB,aAAgCz5D,EAAO7f,QAAQs5E,cAAa,SAAAigB,GAAA,OAAWA,EAAQpyG,QAE/F,KAAKwY,EAAM2kD,uBACT,GAAIzkC,EAAO7f,QAAQjQ,iBAAkB,CACnC,IAAM8/S,EAAwB3pT,EAAMsjB,iBAAiBve,MAAK,SAAAm4F,GACxD,OAAOA,EAAOmX,eAAiB16E,EAAO7f,QAAQjQ,iBAAiB5I,IAAOi8F,EAAOj3F,aAAe0zB,EAAO7f,QAAQ7T,cAEzG0jT,GACFhwR,EAAO7f,QAAQ/P,qBAAuBpc,OAAO+2B,OAAO,GAAIilS,EAAsB5/S,sBAC9E4vB,EAAO7f,QAAQuJ,iBAAmB9hB,OAAOC,UAAUmoT,EAAsBxsL,iBACnEwsL,EAAsBxsL,gBACtBxvI,OAAOmc,KAAK6/S,EAAsB5/S,sBAAsBrc,OAC9DisC,EAAO7f,QAAQ8vS,mBAAoB,IACG,IAA5B5pT,EAAMqjB,kBAA4BsW,EAAO7f,QAAQjQ,iBAAiBggT,gBAC5ElwR,EAAO7f,QAAQuJ,iBAAmB,GAEpCsW,EAAO7f,QAAQwJ,iBAAmBtjB,EAAMsjB,iBAAiBviB,KAAI,SAAAm8H,GAI3D,OAHIA,EAAUj3H,aAAe0zB,EAAO7f,QAAQ7T,aAAc,IAAA+sG,wBAAuBkqB,KAC/EA,EAAU/oB,mBAAqB+oB,EAAU7oB,eAAiB16E,EAAO7f,QAAQjQ,iBAAiB5I,IAErFi8H,KAGX,OAAOvvI,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM6kD,uBACT,OAAO3wE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BqjB,iBAAkBsW,EAAO7f,QAAQuJ,iBACjCtZ,qBAAsB4vB,EAAO7f,QAAQ/P,qBACrCgzH,uBAAwBpjG,EAAO7f,QAAQijH,uBACvC6sL,mBAAmB,IAGvB,KAAKnwS,EAAM8kD,2BACT,OAAI5kC,EAAO7f,QAAQwJ,iBACV31B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BsjB,iBAAkBqW,EAAO7f,QAAQwJ,iBACjCvZ,qBAAsB4vB,EAAO7f,QAAQ/P,qBACrCgzH,uBAAwBpjG,EAAO7f,QAAQijH,yBAGpCpvI,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B+J,qBAAsB4vB,EAAO7f,QAAQ/P,qBACrCgzH,uBAAwBpjG,EAAO7f,QAAQijH,yBAG3C,KAAKtjH,EAAMmlD,4BACT,IAAMs7C,GAAwBA,EAAxBA,cACDl6G,EAAMk6G,uBADL,gBAEHvgF,EAAO7f,QAAQrQ,UAAYkwB,EAAO7f,QAAQogG,wBAE7C,OAAOvsH,OAAO+2B,OAAO,GAAI1kB,EAAO,CAACk6G,0BAEnC,KAAKzgG,EAAM+kD,+BAAgC,MACgB7kC,EAAO7f,QAAzD/P,EADkC,EAClCA,qBAAsB9D,EADY,EACZA,WAAYouG,EADA,EACAA,aACnCy1M,EAAoB9pT,EAAMsjB,iBAAiBve,MAAK,SAAAupL,GACpD,OAAOA,EAAaj6E,eAAiBA,GAAgBi6E,EAAaroL,aAAeA,KAE7E8jT,EAAiBD,EAAoBA,EAAkB//S,qBAAuB,GAC9EigT,EAAgBr8T,OAAO+2B,OAAO,GAAIqlS,EAAgBhgT,GAClDuZ,EAAmB46G,EAA0Bl+H,EAAOiG,EAAYouG,EAAc21M,GACpF,OAAOr8T,OAAO+2B,OAAO,GAAI1kB,EAAQ,CAACsjB,qBAEpC,KAAK7J,EAAMy6C,gBACT,IAAKv6B,EAAO7f,QAAQm6C,YAAcj0D,EAAM6J,iBACtC,OAAOlc,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAE6J,iBAAkB,OAK1D,OAAO7J,GApLT,I,IAAA,QAEYyZ,E,wJAAZ,OACA,SACA,Q,mDAEA,IAAMwoP,EAAe,CACnB7+O,gBAAgB,EAChBg9L,qBAAsB,GACtB3jF,aAAc,GAkCdrpC,WAAY,GACZvpF,iBAAkB,KAElBwZ,iBAAkB,EAAAtuB,aAAe,EAAI,EACrCgV,qBAAsB,GACtBuZ,iBAAkB,GAClBs5G,yBAA0B,KAC1B1iB,sBAAuB,GACvB0vM,mBAAmB,EACnB7sL,uBAAwB,GACxBqC,2BAA2B,EAC3BtkB,oBAAqB,IAGVojB,EAA4BA,EAA5BA,0BAA4B,SAACl+H,EAAOiG,EAAYouG,EAActqG,GACzE,IAAMsvG,EAAe,CACnBpzG,aACAouG,eACA8oB,gBAAiBn9H,EAAMqjB,iBACvBo/D,YAAY,IAAAptF,2BACZ0U,qBAAsBpc,OAAO+2B,OAAO,GAAI3a,IAEpCggL,EAAgB/pL,EAAMsjB,iBAAiB1N,WAAU,SAAA04K,GACrD,OAAOA,EAAaj6E,eAAiBgF,EAAahF,cAC5Ci6E,EAAaroL,aAAeozG,EAAapzG,aAAe,IAAA+sG,wBAAuBs7E,MAavF,OAXAvE,GAAiB,EACb/pL,EAAMsjB,iBAAiB10B,OAAOm7L,EAAe,EAAG1wE,GAChDr5G,EAAMsjB,iBAAiBt1B,KAAKqrH,GAEhCr5G,EAAMsjB,iBAAmBtjB,EAAMsjB,iBAAiBviB,KAAI,SAAAm8H,GAIlD,OAHIA,EAAUj3H,aAAeA,IAAc,IAAA+sG,wBAAuBkqB,KAChEA,EAAU/oB,mBAAqB+oB,EAAU7oB,eAAiBA,GAErD6oB,KAGT,wBAAWl9H,EAAMsjB,qB,mIChFnB,YAOai4M,EAAyBA,EAAzBA,uBAAyB,SAACjuI,GAAiE,IAAzD++F,EAAyD,uDAArCh6L,SAASC,SAASoC,eAiBnF,OAhBK44F,EAAOC,SACVD,EAAOC,OAAS,GAES,WAAtB8+F,IACC/+F,EAAO28N,WAAa,EAAAv7R,gBAAgBC,GACtC2+D,EAAOq7H,YAAcr7H,EAAOq7H,YAAc,GACtCr7H,EAAOq7H,YAAc,GACrBr7H,EAAOq7H,YAAc,GACnBr7H,EAAOq7H,YAAc,GACrBr7H,EAAOq7H,YAEbr7H,EAAOq7H,YAAcr7H,EAAOq7H,aAAe,GACvCr7H,EAAOq7H,YAAc,GACrBr7H,EAAOq7H,aAGRr7H,GAGyBg8B,EAArBA,mBAAqB,SAAC4gM,EAAkB79H,GACnD,IAAIhsK,EAAY+sF,KAAKC,MAAM68M,IAAqB,GAC1CC,EAAiB9pS,EAAUvpB,OAAM,SAAAw2F,GAAA,OAAWA,EAAOrsF,MACzD,OAAOof,EAAUtf,KAAI,SAACusF,EAAQ88N,GAO5B,OANID,EACF78N,EAAOrsF,GAAKmpT,EAAc,EAChB7oT,OAAOC,UAAU8rF,EAAOrsF,MAClCqsF,EAAOrsF,GAAKmpT,EAAc,KAE5B98N,EAASiuI,EAAuBjuI,EAAQ++F,Q,uKCpC5C,Q,IACA,QACA,Q,uDAEqB53F,E,YACnB,WAAY1c,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,2CACnB,EAAK7N,gBAAiB,EACtB,EAAKo4E,oBAAqB,EAC1B,EAAKoxK,sBAAuB,EACxBv4K,IACF,EAAKljD,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAdgB,E,qEAoBhCp4B,GACH3D,KAAKoxT,YAAYztT,GACbA,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC9EwJ,EAAUmP,SAAV,UAAkC,CAAC,EAAAqlB,SAASC,MAE1Cz0B,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC3Y,SAAS,OAChFwJ,EAAUmP,SAAV,WAAmC,CAAC,EAAAqlB,SAASC,MAE/C,IAAM6qD,EAAgF,KAAlEt/E,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2B,IAAY,EAAI,EAC9F,sGAAmBnP,EAAW,IAAI63F,GAAW,EAAOvY,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,+CAIvG,IAAMw0B,EAAaz3G,KAAKU,YAAY02C,KAChCi6Q,EAAa,GACjB,GAAI55M,GAAcA,EAAWtxF,cAAe,CAC1C,IAAMmrS,EAAW75M,EAAWtxF,cAAcrT,SAAzB,UACbw+S,GAA0B,MAAbA,IAAsBA,EAASn3T,SAAS,OACvDk3T,EAAA,UAA0BzpT,MAAMC,QAAQypT,GAAYA,EAAS,GAAKA,GAEpE,IAAMC,EAAiB95M,EAAWtxF,cAAcrT,SAAzB,WACnBy+S,GAAsC,MAAnBA,IAA4BA,EAAep3T,SAAS,OACzEk3T,EAAA,WAA2BE,GAG/B,OAAOF,I,6CAIP,IAAM7wO,GAAaA,EAAbA,6GACAgxO,EAAsBxxT,KAAKyxT,yBAUjC,MATA,CAAC,YAAa,cAAcrzT,SAAQ,SAAA8iF,GAC9BswO,EAAoBtwO,IACtBV,EAAWzrF,KAAK,CACdmsF,WACAI,UAAWkwO,EAAoBtwO,QAK9BV,I,sEAGqG,WAAhE3iE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9B6zS,EAAwB1wO,EAAkBh6E,QAAO,SAAAo6E,GACrD,MAA8B,cAAvBA,EAAUF,UAAmD,eAAvBE,EAAUF,YAGnDiyI,EAAmBnzN,KAAKU,YACxB0yN,EAAkBD,EAAiBj4M,OAAOsD,MAAM,UAAUxW,KAGhE8+E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,QAAIA,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di5N,GAAmBA,EAAgBpmC,QAAUomC,EAAgBpmC,MAAMlqG,UAAYswI,EAAgBpmC,MAAM7mK,iBAQtG9iB,EAAQyP,SAAR,OAA6BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAAQkJ,EAAQyP,SAAR,KAAyB3Y,SAAS,MACpG4mF,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgC+wO,GAExF3wO,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,QAK5E5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,wBAvGU0U,G,oKCJrB,QAEA,Q,IACA,M,uDAEqBm2N,E,YAEnB,WAAYrmN,IAAO,gGACXA,IADW,SAmGnBsmN,qBAAuB,SAACvuT,EAASmkF,GAC/B,IAAKnkF,EACH,OAAO,KAEJmkF,IAEHA,EADqB,UAAMrlF,WAAW4S,YAAYiB,aACnBlK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,SAE9E,OAAO4M,EAAQM,UAAUuZ,kBAAkBsqE,EAAgBx/E,KAAO3E,EAAQM,UAAUkS,eAAe2xE,EAAgBx/E,KA3GlG,E,4EAIPrE,GACV,GAAIA,EAAUmP,SAAV,KAA4B,CAC9B,IAAMulF,EAAYzwF,MAAMC,QAAQlE,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,GAAKnP,EAAUmP,SAAV,KAC9F,OAAQulF,GACN,IAAK,gBACH10F,EAAUmP,SAAV,KAA6B,QAC7B,MACF,IAAK,gBACHnP,EAAUmP,SAAV,KAA6B,SAC7B,MACF,IAAK,iBACHnP,EAAUmP,SAAV,KAA6B,YAC7B,MACF,QACEnP,EAAUmP,SAAV,KAA6BulF,EAAUt6F,MAAM,SAAS,O,yCAQ3C83C,EAASouC,GAQ1B,IAPA,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GAEtGlF,GAAc,aAAOh/E,KAAK6xT,qBAAqBxtO,IAAoB,SAAChhF,GACtE,OAAOA,EAAQM,UAAUqE,IAAM3E,EAAQoc,4BALH,WAQ7BlrB,GACP,IAAM6pB,EAAiBimE,EAAkB9vF,GACnCq4G,EAAqBxuF,EAAeqB,yBACrCu/D,EAAY/+E,MAAK,SAAA+tG,GACpB,OAAOA,EAAarqG,UAAUqE,KAAOoW,EAAeza,UAAUqE,IACzDgmG,EAAavuF,2BAA6BmtF,MAE/C5tB,EAAYjqF,KAAKqpB,IAPZ7pB,EAAI,EAAGA,EAAI8vF,EAAkB5vF,OAAQF,IAAK,EAA1CA,GAWT,OAAOyL,KAAKmyN,2BAA2BnzI,K,8CAG6C,IAAhEnhE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,IAAK3nF,KAAKimF,mBACR,MAAO,GAET,IAAIa,EAAqB9mF,KAAK+nF,8CAA8ClqE,EAAa8pE,GACzF,OAAOb,I,mDAIP,OAAI9mF,KAAKmmB,cACP,wBAAWnmB,KAAKygF,wBAAhB,CAAwC,CACtCS,SAAU,OACVI,UAAWthF,KAAKmmB,cAAcrT,SAAnB,QAGR9S,KAAKygF,yB,gCAGJvlE,GACJlb,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBACjFzgF,KAAKkmF,gCACL,mGAAgBhrE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,M,2CAICmpE,GACnB,IAAIytO,EAAsB,GAI1B,GAHI9xT,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcrT,SAAnB,OACxBg/S,EAAsBlqT,MAAMC,QAAQ7H,KAAKmmB,cAAcrT,SAAnB,MAAuC9S,KAAKmmB,cAAcrT,SAAnB,KAAoC,GAAK9S,KAAKmmB,cAAcrT,SAAnB,OAEjHg/S,EAAqB,CACxB,IAAMvyL,EAAmBv/H,KAAKU,YAAY8vC,KACtC+uF,GAAoBA,EAAiBp5G,gBACvC2rS,EAAsBvyL,EAAiBp5G,cAAcxiB,UAAUmF,mBAYnE,OATIgpT,IACFztO,EAAoBA,EAAkBr9E,QAAO,SAAC3D,GAC5C,OAAQA,EAAQugF,0BAA4BvgF,EAAQyP,SAAR,OAC1ClL,MAAMC,QAAQxE,EAAQyP,SAAR,MACVzP,EAAQyP,SAAR,KAAyB3Y,SAAS23T,GAClCzuT,EAAQyP,SAAR,OAA6Bg/S,OAIhCztO,I,+CAcoD,IAAtCoE,EAAsC,uDAAnB,GAAI5sE,EAAe,uDAAJ,GACvD,GAAI7b,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,SAAU,CACrD,IAAIkmI,EAA4BlmI,EAC5B7b,KAAK0iH,yBAAyB7mG,GAC9B7b,KAAKmmB,cAAcw8D,yBACjBovO,EAAsBtpO,EAAiBzhF,QAAO,SAAA3D,GAClD,OAAOA,EAAQs/E,2BAA6Bo/D,KAExCiwK,EAAsBhyT,KAAK6xT,qBAAqBE,GAEtD,GADA/xT,KAAKmmB,cAAgB6rS,EAAoB,IAAMD,EAAoB,IAAM,KACrE/xT,KAAKmmB,cACP,OAAO,EAGX,OAAO,M,iCA9HUwrS,G,qJCLrB,Q,IACA,OACA,Q,IACA,MACA,Q,mDAuBA,IAAMM,EAA2B,CAAC,gBAAiB,gBAAiB,QAAS,gBAAiB,gBAC5F,YAAa,QAKMC,E,YAEnB,WAAY5mN,IAAO,gGACXA,IADW,SAmEnBogC,sBAAwB,WAAoB,IAAnBroI,EAAmB,yDACpC9J,EAAS8J,EAAQ3C,YACjBywC,EAAa53C,EAAOmH,YAAYywC,WAEtC,IAAKA,EACH,MAAO,CAACw6F,gBAAiB,KAAMC,aAAa,GAG9C,GAAIz6F,EAAWhrB,eAAkBgrB,EAAWhrB,cAAcrT,SAAzB,OAA8CzP,EAAQyP,SAAR,KAC7E,MAAO,CAAC64H,gBAAiBx6F,EAAWhrB,cAAeylH,aAAa,GAOlE,IAJA,IAAIumL,EAAiB,GACjBhkN,EAAmB,GACjBikN,EAAwBjhR,EAAWwwC,SACrCgzI,EAAoBxjL,EAAWhrB,cAAgBgrB,EAAWhrB,cAAc67D,yCAA2C,GAC9GztF,EAAI,EAAGA,EAAI69T,EAAsB39T,OAAQF,IAAK,CACrD,IAAM8+M,EAAoB++G,EAAsB79T,GAC5C8+M,EAAkBzvH,0BAGlByvH,EAAkBvgM,SAAlB,OAAuCzP,EAAQyP,SAAR,OACzCq7F,EAAiBp5G,KAAKs+M,GAClBshB,GAAsBA,IAAsBthB,EAAkBrxH,0CAChEmwO,EAAep9T,KAAKs+M,IAI1B,OAAI8+G,EAAe19T,OACV,CAACk3I,gBAAiBwmL,EAAe,GAAIvmL,aAAa,GAEpD,CAACD,gBAAiBx9B,EAAiB,IAAM,KAAMy9B,aAAa,IAlGlD,EAqGnBymL,0BAA4B,SAAChvT,EAASmkF,GACpC,IAAKnkF,EAAQivT,gBAAiB,CAC5B,IAAMC,GAAiB,IAAAzhO,oBAAmBztF,EAAQM,UAAUkS,eAAgBxS,EAAQM,UAAUuZ,mBAC9F7Z,EAAQivT,gBAAkBC,GAAkB/qO,EAAkB+qO,EAAe/qO,EAAgBx/E,IAAM,GAErG,OAAO3E,EAAQivT,iBA1GE,EA6GnBE,4CAA8C,SAACrhR,GAAsC,IAA1Bg9D,EAA0B,uDAAP,GAC5E,IAAKh9D,EAAWhrB,cACd,MAAO,GAET,IAAIwuM,EAAoBxjL,EAAWhrB,cAAc67D,yCACjD,OAAOmsB,EAAiBnnG,QAAO,SAAA3D,GAE7B,OAD2BA,EAAQ2+E,2CACL2yI,MApHf,EAwHnB89F,mBAAqB,WAEnB,OADqB,UAAMtwT,WAAW4S,YAAYiB,aAC9BlK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,SA1HhD,EAuJnB8vP,uBAAyB,WAEvB,IAAMp1M,EAAa,EAAKzwC,YAAYywC,WAE9BgiK,EADe,UAAMhxM,WAAW4S,YAAYiB,aACnBlK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,QACxE08M,GAAahiK,GACfz8C,OAAOmc,KAAK,EAAK4K,cAAcrd,SAAQ,SAAA8gB,GACrC,IAAK,IAAI3qB,EAAI,EAAGA,EAAI,EAAKknB,aAAayD,GAAYzqB,OAAQF,IAAK,CAC7D,IAAM8O,EAAU,EAAKoY,aAAayD,GAAY3qB,GAC1C8O,EAAQM,UAAUkS,eAAes9L,EAAUnrM,KAAK,WAClD,IAAMorM,EAAY/vM,EAAQM,UAAUkS,eAAes9L,EAAUnrM,IAAI,GAC/CmpC,EAAW11B,aAAayD,GAAYjf,MAAK,SAAAozM,GACzD,OAAOA,EAAkB1vM,UAAUkS,eAAes9L,EAAUnrM,KACvDqrM,EAAkB1vM,UAAUkS,eAAes9L,EAAUnrM,IAAI7N,SAASi5M,QAGvE/vM,EAAQugF,0BAA2B,GAPa,QAhKzC,E,qEAIdjgF,GACH,IAAKA,EAAUmP,SAAV,MAA+BlL,MAAMC,QAAQlE,EAAUmP,SAAV,QAAgCnP,EAAUmP,SAAV,KAA2Bre,OAAS,CACpH,IAAM+yF,EAAkBxnF,KAAKyyT,qBACvBC,EAAqB1yT,KAAKqyT,0BAA0B,CAAC1uT,aAAY6jF,GAEvE,GADA7jF,EAAUmP,SAAV,MAA8BnP,EAAUmF,mBAAqB,IAAI/K,MAAM,SAAS,GAC5E6J,MAAMC,QAAQ6qT,IAAuBA,EAAmB,IAAMlrO,GAAmBA,EAAgBrxE,OAAQ,CAC3G,IAAMgK,EAASqnE,EAAgBrxE,OAAOrK,MAAK,SAAA9E,GAAA,OAAUA,EAAOgB,KAAO0qT,EAAmB,MACtF,GAAIvyS,GAAUA,EAAOjpB,MAAO,CAC1B,IAAMy7T,EAAoBxyS,EAAOjpB,MAAM6G,MAAM,SAAS,GAClDk0T,EAAyB93T,SAASw4T,KACpChvT,EAAUmP,SAAV,KAA6B6/S,KAI/Bv5T,SAASC,SAASif,gBAAiB,IAAA0+B,4BACF,sCAA/BrzC,EAAUmP,SAAV,KACFnP,EAAUmP,SAAV,KAA6B,OACW,yBAA/BnP,EAAUmP,SAAV,OACTnP,EAAUmP,SAAV,KAA6B,kBAInC,qGAAkBnP,K,yCAGDkyC,EAASouC,GAAY,WAChCC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GACxGsD,EAAkBxnF,KAAKyyT,qBACvB1rN,EAAc/mG,KAAKU,YACnBywC,EAAa41D,EAAY51D,WAG/B,GAAIq2C,GAAmBr2C,GAAcA,EAAWhrB,cAAe,CAC7D,GAAoB,uBAAhBnmB,KAAKsG,QAA+D,IAA5BygG,EAAY7rF,OAAO9P,KAC7D,MAAO,GAETi5E,EAAoBA,EAAkBv8E,KAAI,SAACzE,GAEzC,OADAA,EAAQugF,0BAA6B,EAAK8nD,sBAAsBroI,GAAUsoI,gBACnEtoI,KAIX,OAAOghF,EAAkBv8E,KAAI,SAAAoH,GAC3B,IAAM0jT,EAAc,IAAI,EAAJ,QAAyB1jT,EAAEq0E,YAAar0E,GAE5D,OADA0jT,EAAYhvO,yBAA2BgvO,EAAYp3S,KAAKooE,yBACjDgvO,O,kCAICj+S,IACV,qGAAkBA,GAClB,IAAM82H,EAAwBzrI,KAAK0rI,wBACnC1zI,QAAQ4B,IAAI,wBAAyB6xI,GACjCA,EAAsBE,iBACxBF,EAAsBE,gBAAgBllC,aAAY,GAEpDzmG,KAAK4mF,mB,6CAgEqC,IAAvBisO,EAAuB,wDACpC1hR,EAAanxC,KAAKU,YAAYywC,WACpC,OAAK0hR,GAAiB1hR,GAAcA,EAAWhrB,eAAiBgrB,EAAWhrB,cAAcrT,SAAzB,KACvD,CAAC,CACNouE,SAAU,OACVI,UAAWnwC,EAAWhrB,cAAcrT,SAAzB,OAGR,K,oDAIP,OAAO,I,gCAGCoI,GAIR,OAHIlb,KAAKmmB,gBAAmBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAClFzgF,KAAKomF,WAAWlrE,IAEX,I,kCAIP,OAAO,M,iCAtJUg3S,G,8ECjCrB,W,OACA,S,IACA,MAEA,SACA,Q,mDAEA,IAEMY,EAA0B,SAACxnN,GAAU,IAClCnzF,EAA6CmzF,EAA7CnzF,eAAgBD,EAA6BozF,EAA7BpzF,OAAQkiE,EAAqBkxB,EAArBlxB,OAAQ24O,EAAaznN,EAAbynN,UACjCjhT,EAAqBqG,EAAezQ,SACpCuhR,GAAe,IAAApN,YAAA,wBAErB,IAAK/pQ,EAAmBkhT,oBAAsBlhT,EAAmBmhT,iBAC/D,OAAO,KAET,GAAIF,GAAajhT,EAAmBkhT,kBAAkBv+T,QAAU,OAC1Ds+T,GAAajhT,EAAmBkhT,kBAAkBv+T,OAAS,KAC/D,OAAO,KAGT,IAeMy+T,EAfuB,WAC3B,GAAK/6S,EAAeE,SAAWF,EAAeG,cAAgB,CAC5D,GAAe,UAAXJ,GAAsB+wQ,EAAalxQ,SAAS,uCAC9C,OAAOkxQ,EAAalxQ,SAAS,uCACxB,GAAe,UAAXG,GAAsB+wQ,EAAalxQ,SAAS,sDACrD,OAAOkxQ,EAAalxQ,SAAS,sDACxB,GAAIkxQ,EAAalxQ,SAAS,6CAC/B,OAAOkxQ,EAAalxQ,SAAS,6CACxB,GAAII,EAAeE,QACxB,6BAGJ,OAAOvG,EAAmBkhT,kBAGFG,GAW1B,OACE,gCAAM9+S,MAAO0+S,EAAY34O,EAAOg5O,aAAe,CAACh5O,EAAOg5O,aAAch5O,EAAOi5O,qBAC1E,iCAAOh/S,MAAO+lE,EAAOk5O,kBAAmBv0T,IA3C1Bw0T,iEA4Cd,gCAAMl/S,MAAO+lE,EAAOo5O,kBAAmBN,KAM7CJ,EAAwB5wK,UAAY,CAClC/pI,eAAgB,UAAUxgB,OAAOshH,WACjC7+B,OAAQ,UAAUziF,OAAOshH,WACzB85M,UAAW,UAAU3wK,M,UAGR0wK,G,8JC/Df,O,WACA,QACA,OACA,O,IAEA,SACA,Q,OACA,SACA,QAOA,Q,mDAGO,IAMD,EANKW,EAAaA,EAAbA,WAAa,GAMlBC,GAJmBC,EAAZA,UAAY,SAACz7S,GACxB,MAAmB,UAAXA,GAAmC,UAAXA,GAAmC,UAAXA,GAGpD,gCAAgB,mBAAOs0J,EAAP,uDAAkB,GAAlB,gGAEe,UAAM11K,IAAN,0CAAoD01K,EAApD,iBAFf,YAEZonJ,EAFY,UAGQA,EAAmB3/T,KAH3B,yCAIT2/T,EAAmB3/T,MAJV,gCAMX,IANW,uCAQlB+D,QAAQ4B,IAAI,yBAAZ,MARkB,kBASX,IATW,2DAAhB,4C,WA8IS,IAAAkyG,UAVS,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtBytH,yBAA0B96H,EAAMqN,gBAAgBytH,yBAChDnF,SAAU31H,EAAMgR,YAAY2kH,YAIL,GAEZ,EAjIY,SAAC3iB,GAAU,IAiD9B,EAhDC2iB,EAAgD3iB,EAAhD2iB,SAAUuyB,EAAsCl1C,EAAtCk1C,SAAUptB,EAA4B9nB,EAA5B8nB,yBADS,GAEI,IAAA+tB,UAAS,MAFb,qBAE7B0yK,EAF6B,KAEfC,EAFe,QAGQ,IAAA3yK,UAASlzB,GAHjB,qBAG7B8lM,EAH6B,KAGbC,EAHa,KAK9BC,GAAe,IAAAl0K,aAAY9xB,GAC3BimM,GAA+B,IAAAn0K,aAAY3sB,GAE3C+gM,EAA0B,SAAChyN,GAE/B,IAAIiyN,EAAQ,GAsBZ,OArBA,UAAKhgN,MAAMjS,EAASluG,KAAM,CACxBqtJ,SAAU,SAAChrE,GAETA,EAAQriF,KAAK,GAAGmK,SAAQ,SAAC8Z,GACR,QAAXA,IACFk8S,EAAMl8S,GAAU,OAGpBo+D,EAAQriF,KAAKmK,SAAQ,SAACi2T,EAAiBC,GACrC,GAAIA,EAAsB,CACxB,IAAM98T,EAAM68T,EAAgB,GAC5BA,EAAgBj2T,SAAQ,SAACm2T,EAAgBC,GACvC,GAAIA,EAAqB,CACvB,IAAMt8S,EAASo+D,EAAQriF,KAAK,GAAGugU,GAC/BJ,EAAMl8S,GAAQ1gB,GAAO+8T,GAAkBF,EAAgB,cAO5DD,GAGHK,EAAsB,SAACC,EAAUC,GACrC,IAAIP,EAAQ,GAUZ,OATA1/T,OAAOmc,KAAK6jT,GACT1tT,QAAO,SAAAxP,GAAA,OAAOA,EAAI2C,SAASw6T,MAC3Bv2T,SAAQ,SAAA5G,GACP9C,OAAOmc,KAAK6jT,EAASl9T,IAAM4G,SAAQ,SAACwzS,GAC9BA,IACFwiB,cAAkB58T,EAAlB,IAAyBo6S,EAAWz0R,QAAYu3S,EAASl9T,GAAKo6S,UAI/DwiB,GAGHQ,GAAA,gCAAiB,8HACM,UAAM99T,IAAI,EAAA8kL,kBAAkB,sCADlC,UACfi5I,EADe,OAEjBT,EAAQD,EAAwBU,GAChCC,EAAmB,GACN,UAAb7mM,EAJiB,wBAKnBmmM,EAAM,UAAN,gBAAqBA,EAAM,UALR,SAMMV,EAAe,SANrB,OAMnBoB,EANmB,oBAQjB,IAAApgR,mBARiB,kCASMg/Q,EAAe,SATrB,eASnBoB,EATmB,iBAUS,UAAMh+T,IAAI,EAAA8kL,kBAAkB,6CAVrC,QAUbm5I,EAVa,OAWbpyS,EAAMwxS,EAAwBY,GACpCX,EAAM,UAAN,gBAAqBA,EAAM,SAAaK,EAAoB9xS,EAAK,QACjEyxS,EAAM,UAAN,gBAAqBA,EAAM,SAAaK,EAAoB9xS,EAAK,QAb9C,6BAcV,IAAAq0B,yBAdU,wBAenBh/C,QAAQ4B,IAAI,0CAA2Cw5H,GACjD4hM,EAAwC,0BAA7B5hM,EAAuD,mBAAqB,cAhB1E,UAiBMsgM,EAAesB,GAjBrB,eAiBnBF,EAjBmB,iBAkBQ,UAAMh+T,IAAI,EAAA8kL,kBAAoB,qCAlBtC,QAkBbq5I,EAlBa,OAmBbtyS,EAAMwxS,EAAwBc,GACpCb,EAAM,UAAN,gBAAqBA,EAAM,SAAaK,EAAoB9xS,EAAK,QApB9C,8BAqBV,IAAAi7H,8BAA8B,IAAAC,+BAA9B,oBArBU,kCAsBM61K,EAAe,SAtBrB,QAsBnBoB,EAtBmB,oCAuBV,IAAA52K,qCAvBU,kCAwBMw1K,EAAe,SAxBrB,QAwBnBoB,EAxBmB,oCAyBV,IAAAhgR,qBAzBU,kCA0BM4+Q,EAAe,WA1BrB,QA0BnBoB,EA1BmB,oCA2BV,IAAAlgR,uBA3BU,kCA4BM8+Q,EAAe,aA5BrB,QA4BnBoB,EA5BmB,oCA6BV,IAAAn2K,oBA7BU,kCA8BM+0K,EAAe,UA9BrB,QA8BnBoB,EA9BmB,gCAgCM,UAAMh+T,IAAI,EAAA8kL,kBAAkB,gDAhClC,QAkCrB,IAASs5I,KAFHC,EAhCe,OAiCfC,EAAYjB,EAAwBgB,GACnBf,EACrBA,EAAMc,IAAN,gBAAwBd,EAAMc,GAAgBE,EAAUF,IAI1D,EA3GOzB,WA2GPA,GAAA,gBAAiBW,EAAMnmM,GAAc6mM,EAAiB7mM,IACtD6lM,EAAgBL,GACZ,UAAO5yT,cACT7I,QAAQ4B,IAAI,kBAAmBw6T,GAC/Bp8T,QAAQ4B,IAAI,sBAAuBw6T,EAAMnmM,KAE3C+lM,EAAkB/lM,GA7CG,mDAAjB,4CA2DN,OAXA,IAAAtM,YAAU,YACHsM,GAAagmM,IAAiBhmM,GAAemF,GAA6B8gM,IAAiC9gM,KAC3Gh6H,SAASC,SAASC,UACnBo7L,SAASC,YAAY,CAACvpL,KAAM,kBAAkBymB,MAAK,SAAAm/C,GAAA,OAAO4jP,EAAe,CAAC3gU,KAAM+8E,OAAO3+C,MAAMr6B,QAAQC,OAErG28T,IAAiBviS,MAAMr6B,QAAQC,UAIlC,CAACg2H,EAAUmF,IAEPygM,EACL,wCAAc37S,OAAQ67S,EACRh8S,SAAU87S,EACVwB,cAAe,EAAA94T,oBAAoB,GACnC63M,QAAS,SAACn8M,GAAD,OAAWD,QAAQskC,KAAKrkC,KAC5CuoJ,GAED,S,4MCtJe80K,E,YACnB,WAAYx2O,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAW,cAJG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAI2xT,O,GAVtC,M,4BAEqBA,G,4ICFrB,S,IACA,OACA,QACA,QAEA,QACA,Q,IACA,Q,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,Q,IACA,S,IACA,M,qDAEatzD,M,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAx+P,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAKhY,cAAL,iBAGA,EAAK4vN,aAAe,KACpB,EAAKiiG,QAAU,KACf,EAAKp/D,QAAU,KACf,EAAKq/D,MAAQ,KACb,EAAKC,MAAQ,KACb,EAAKC,MAAQ,KACb,EAAKz/D,SAAW,KAChB,EAAK90B,iBAAkB,EAhBX,E,qEAmBTx9N,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,eACHy/H,EAAkB,eAClBC,YACA,MACF,IAAK,gBACL,IAAK,OACHD,EAAkB,UAClBC,YACA,MACF,IAAK,gBACL,IAAK,OACHD,EAAkB,UAClBC,YACA,MACF,IAAK,SACHD,EAAkB,QAClBC,YACA,MACF,IAAK,SACHD,EAAkB,QAClBC,YACA,MACF,IAAK,SACHD,EAAkB,QAClBC,YACA,MACF,IAAK,YACHD,EAAkB,WAClBC,YACA,MACF,IAAK,iBAEDvsI,EAAU4M,YAAYpW,SAAS,iCAC5BwJ,EAAU4M,YAAYpW,SAAS,yBAC/BwJ,EAAU4M,YAAYpW,SAAS,yBAC/BwJ,EAAU4M,YAAYpW,SAAS,2BAC/BwJ,EAAU4M,YAAYpW,SAAS,gCAElC81I,EAAkB,UAClBC,aAIN,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAED,aAApBF,IACFjwI,KAAKiwI,GAAiB7kI,KAAO,EAAA2uF,OAAOmsD,KAAKpsH,QAE3C95B,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,gCAKDuX,EAAQq1H,GAChB,IAAIv/D,EAAM,GAUV,OATAhxE,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACxBA,EAAYn+B,UAAUvzF,GACrBq1H,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMz/D,GAC3C47D,EAAYzmH,eAAgBymH,EAAYzmH,cAAc0gE,MAAM4pD,MAAMz/D,GAClE47D,EAAYzmC,eACdymC,EAAYzmC,cAActf,MAAM4pD,MAAMz/D,MAGnCA,EAAIv8E,OAASu8E,EAAM,O,uCAI1B,OAAO,IAAI,EAAJ,QAAyB,QAAShxE,Q,2CAIzC,OAAO,I,iCAKP,IACMmnJ,EAA4D,SADxCnnJ,KAAKonJ,uBACYC,mBAErCr/D,EAAShoF,KAAKkb,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAExC,OAAOhI,KAAK+e,aAAa/X,QAAO,SAAAiqE,GAI9B,OAHIA,EAAKq2E,iBACPr2E,EAAK1gD,QAAU42H,GAEVl2E,EAAK1gD,WACXvpB,QAAO,SAAAiqE,GAAA,OAAQA,GAAQA,EAAK1gD,WAASvpB,QAAO,SAAC4lI,GAC9C,QAAS5kD,EAAOovL,eACbxqI,aAAuBA,EAAvBA,SACKA,aAAuBA,EAAvBA,SAAkC5kD,EAAOqB,aAAerB,EAAOqB,WAAWljE,cAActK,SAAS1hB,SAAS,iBACjH2N,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,iCAGxCgM,GACTlb,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,Q,6FAOrB+5O,GAAmB,IACnChoP,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACPjN,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACpBA,EAAYtmI,SAAW2uP,EAAkB3uP,QAAUsmI,EAAYO,8BACjB,gBAA5CP,EAAYO,6BACdP,EAAYlmD,oBAAqB,EACjCkmD,EAAYrmD,WAAWt5E,IAAoB,EACvC2/H,aAAuBA,EAAvBA,UACFA,EAAYsoH,gBAAiB,IAGzBtoH,aAAuBA,EAAvBA,SAAwCA,EAAYsoH,gBACxDtoH,EAAYO,4BAA4BC,0B,+CAQhD,IAAMsa,EAAY1nJ,KAAKkb,OAAOsD,MAAM,EAAAixH,eAAeznI,IACnD,OAAO0/I,GAAaA,EAAUt+D,yB,6CAI9B,OAAOppF,KAAKopF,yBAA2BppF,KAAKkb,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAMhI,KAAKkb,OAAOsD,MAAM,EAAAu7E,OAAO/xF,Q,aAlKlGA,GAAK,Q,6JCpBd,Q,uDAIqBsnT,E,YACnB,WAAYxwO,EAASx4E,EAAQuV,IAAU,gGAC/BijE,IAD+B,OAErC,EAAKx4E,OAASA,EACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAWA,EAJqB,E,qEAOlClY,GACH,sGAAmBA,EAAW,IAAI2rT,GAAqB,EAAOtvT,KAAKsG,OAAQ3C,EAAU6M,c,yCAEpEqlC,EAASouC,GAC1B,IAAM0xO,GAAcA,EAAdA,0GAAuC9/Q,EAASouC,GACtD,OAAO,aAAO0xO,GAAa,SAACh2S,GAAD,OAAaA,EAAQnE,KAAK7X,UAAUmF,yB,GAfnE,M,4BAEqBwmT,G,yJCJrB,SACA,QACA,Q,IACA,S,IACA,S,IACA,O,IACA,S,IACA,S,IACA,S,IACA,S,qDAEa9nD,mB,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAhkQ,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,6BACA,EAAKmY,SAAW,qBAChB,EAAKH,YAAc,kCACnB,EAAKqD,aAAe,GAGpB,EAAKwuK,SAAW,KAChB,EAAKE,gBAAkB,KACvB,EAAKg6E,kBAAoB,KACzB,EAAKC,aAAe,KACpB,EAAKC,iBAAmB,KACxB,EAAKn6E,QAAU,KAGf,EAAK06E,YAAc,sBAlBP,E,qEAsBTvkQ,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACHy/H,EAAkB,WAClBC,YACA,MACF,IAAK,oBACHD,EAAkB,kBAClBC,YACA,MACF,IAAK,sBACHD,EAAkB,oBAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,qBACHD,EAAkB,mBAClBC,YACA,MACF,IAAK,WACHD,EAAkB,UAClBC,YAIJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,gCAKDuX,EAAQq1H,GAChB,IAAMtwB,EAAS,GAQf,OAPAjgH,KAAKwwI,kBAAkBpyI,SAAQ,SAAAwuI,GAC7BA,EAAYn+B,UAAUvzF,GACrBq1H,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMxwB,GAC3C2sB,EAAYzmH,eAAiBymH,EAAYzmH,cAAc0gE,MAAM4pD,MAAMxwB,MAGlEA,I,iCAIP,OAAOjgH,KAAKwwI,kBAAkB1oI,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,uCAI5E,OAAO,IAAI,EAAJ,QAAyBlP,KAAK6b,SAAU7b,U,aAxF1CgI,GAAK,qB,mICZd,O,WACA,MACA,OACA,O,IAIA,Q,IACA,Q,IACA,S,IACA,S,IAEA,Q,IACA,S,IACA,QACA,Q,IACA,Q,IACA,QACA,Q,IACA,QACA,QACA,Q,uDAEM4tT,G,6OAwBJt2F,sBAAwB,SAACj8N,GACvB,EAAKioG,MAAMipH,YACX,EAAKjpH,MAAMy3G,eACP,EAAKz3G,MAAMgwH,uBACb,EAAKhwH,MAAMgwH,sBAAsBj4N,I,EAIrCwyT,uBAAyB,SAAC98F,GAExB,OADe,IAAA59M,oBACJ2Z,YACF,mCAAyB6jE,YAAa,EAAK2S,MAAMnlF,iBAC9C4yM,GAAuB,EAAKztH,MAAMuyE,eAAiB,EAAKvyE,MAAM+nH,WAAW,EAAK/nH,MAAMuyE,gBACrD,gBAAtC,EAAKvyE,MAAMuyE,cAAchiK,SACrB,mCAAmBgiK,cAAe,EAAKvyE,MAAMuyE,cAC1Bs9C,yBAA0B,EAAK7vH,MAAM6vH,2BAE1D,M,gGAKP,IAAMpC,EAAsB/4N,KAAKsrG,MAAMytH,qBAAuB/4N,KAAKsrG,MAAMwqN,0BACnEC,EAAgB/1T,KAAKsrG,MAAMuyE,eAAiB79K,KAAKsrG,MAAMmyE,WAEvD3rK,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAC/CqrH,EAAYjhH,IACfA,EAAmBonP,iBAAoBpnP,EAAmBqnP,eAAiB//P,SAASC,SAAS2b,WAE5FghT,EAAwBjjM,GAAa/yH,KAAKsrG,MAAMkwC,wBACR,eAAtCx7I,KAAKsrG,MAAMkwC,wBAA4Cu6K,GACxDA,EAAcE,wBAA0BF,EAAcE,yBAEvDljM,GAAagjM,GAAiBA,EAAcG,6BAC3CH,EAAcG,gCACjBF,GAAwB,GAG1B,IAAM3pK,EAAersJ,KAAKsrG,MAAMuyE,gBAC9B,EAAAnhF,iBAAiBviG,SAAS6F,KAAKsrG,MAAMuyE,cAAcv3K,UACT,YAArClN,SAASC,SAASoC,gBAAqE,aAArCrC,SAASC,SAASoC,iBACpE,EAAA0/B,0BAA0BhhC,SAAS6F,KAAKsrG,MAAMuyE,cAAcv3K,SAG7Dm1L,EAAYz7L,KAAKsrG,MAAMuyE,gBAAkB,EAAAlhF,cAAcxiG,SAAS6F,KAAKsrG,MAAMuyE,cAAcv3K,SACpD,YAArClN,SAASC,SAASoC,gBAAgC,EAAA2/B,uBAAuBjhC,SAAS6F,KAAKsrG,MAAMuyE,cAAcv3K,SAE3G4U,GAAS,IAAAC,oBAEf,OACE,+BAAKyvE,UAAW,SAAW5qF,KAAKsrG,MAAMynB,WAAa/yH,KAAKsrG,MAAMqvH,YAAcq7F,EACxE,iBAAmB,KACrB,8BAAIprO,UAAU,eAAemrO,EAAgB,4CAAkB/tT,GAAI+tT,EAAcr6S,cAAiB,MAClG,+BAAKkvE,UAAU,mBACXmuI,GAAuB/4N,KAAKsrG,MAAMuyE,eAAiB79K,KAAKsrG,MAAMuyE,cAAc76F,cAC1E,mCAAgB66F,cAAe79K,KAAKsrG,MAAMuyE,cAAeklC,aAAc/iN,KAAKsrG,MAAMy3G,eAClF,KACH/iN,KAAK61T,uBAAuB98F,IAiB7BA,EAIE,KAHF,+BAAKnuI,UAAU,cACb,mCAA8Bw0I,UAAW,CAAC,EAAE,MAG/Cp/N,KAAKsrG,MAAMynB,YAAc/yH,KAAKsrG,MAAMwqN,0BACnC,mCAAsB1rG,eAAgBpqN,KAAKsrG,MAAMm/G,kBAAoBzqN,KAAKsrG,MAAM8+G,eAAiBpqN,KAAKsrG,MAAMviB,aACtFohI,kBAAmBnqN,KAAKsrG,MAAM6+G,kBAC9BD,qBAAsBlqN,KAAKsrG,MAAM4+G,qBACjCkB,qBAAsBprN,KAAKsrG,MAAM8/G,qBACjCf,kBAAmBrqN,KAAKsrG,MAAM++G,kBAC9BM,oBAAqB3qN,KAAKsrG,MAAMq/G,oBAChCF,kBAAmBzqN,KAAKsrG,MAAMm/G,kBAC9B5sC,cAAe79K,KAAKsrG,MAAMuyE,cAC1B6sC,4BAA6B1qN,KAAKsrG,MAAMo/G,8BAE5D,KACsB,eAAzBqrG,EAAczvT,OAA0B,mCAAmB+4N,aAAcr/N,KAAKs/N,wBAA2B,KACzGjzE,IAAiBnxI,EAAO4Z,YAAc,mCAAqBqmL,gBAAgB,EAChBC,aAAa,EACbv9B,cAAe79K,KAAKsrG,MAAMuyE,gBAAmB,KACxG4d,IAAcvgL,EAAO4Z,YAAc,mCAAkBqmL,gBAAgB,EAChBt9B,cAAe79K,KAAKsrG,MAAMuyE,gBAAmB,KAClGm4I,EACC,mCAAiCv4I,WAAYs4I,IAC3C,KACH/1T,KAAKsrG,MAAMqvH,aAAe5B,EACzB,mCAAiBt7C,WAAYs4I,EAAepjH,gBAAgB,aAC1D,U,kBA5HHzwD,UAAY,CAEjBu7B,WAAY,UAAU9lL,OAAOshH,WAC7B4kE,cAAe,UAAUlmL,OACzBwuB,cAAe,UAAUyzB,MAAV,oBACfuhL,yBAA0B,UAAUp8C,KACpCs0C,WAAY,UAAUt0C,KACtBq8C,mBAAoB,UAAUr8C,KAC9BhsD,UAAW,UAAUqvB,KACrBqoE,kBAAmB,UAAUroE,KAC7BioE,kBAAmB,UAAUtrC,KAC7B4rC,oBAAqB,UAAU5rC,KAC/Bh2F,aAAc,UAAU1yE,MACxBw/B,QAAS,UAAUx/B,MACnB+0M,qBAAsB,UAAUrsC,KAAK9lE,WACrCyxG,4BAA6B,UAAU3rC,KACvCw1C,UAAW,UAAUx1C,KACrBg6C,oBAAqB,UAAU32E,KAC/B0zK,0BAA2B,UAAU1zK,KACrCk5E,sBAAuB,UAAUv8C,M,cAwHtB,IAAAjzE,UATS,SAACxzG,GACvB,MAAO,CACLkjJ,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CrjI,eAAgB7f,EAAMqN,oBAGC,WACzB,MAAO,KAEM,CAA6CiwT,I,2KCpK5D,SACA,SACA,Q,IACA,O,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,M,uDAEqB/zE,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAr+O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKnY,cAAL,iBACA,EAAKgY,YAAc,2BAGnB,EAAK+4O,SAAW,KAChB,EAAKC,UAAY,KACjB,EAAKG,WAAa,KAClB,EAAK9sI,QAAU,KACf,EAAKzzE,WAAa,KAbN,E,qEAgBT3wC,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACHy/H,EAAkB,WAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,aACL,IAAK,aACHD,EAAkB,aAClBC,YACA,MACF,IAAK,UACHD,EAAkB,UAClBC,YAeJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,Q,2CAIzC,OAAO,I,iCAGmB,WAAnBuyK,IAAmB,yDAC1B,OAAOvyK,KAAK+e,aACT/X,QAAO,SAAAiqE,GAIN,MAHoB,gBAAhBA,EAAK3qE,SACP2qE,EAAK1gD,QAAU0gD,EAAKvwE,YAAYwa,OAAOqmE,+BAA+BpnF,SAAS,MAE1E,EAAKs4K,kBAAkBxhG,EAAMshG,MAErCzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,6FAO1B+lP,GAAmB,IACnChoP,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACPjN,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACpBA,EAAYtmI,SAAW2uP,EAAkB3uP,QAAUsmI,EAAYO,8BACjB,gBAA5CP,EAAYO,6BACdP,EAAYlmD,oBAAqB,EACjCkmD,EAAYrmD,WAAWt5E,IAAoB,GACjC2/H,EAAYsoH,gBACtBtoH,EAAYO,4BAA4BC,4B,aAvGzCplI,GAAK,Q,aADO65O,G,yJCZrB,QAEA,Q,IACA,M,IACA,O,uDAEqB8vE,E,YAEnB,WAAYrmN,IAAO,gGACXA,IADW,SAiEnBsmN,qBAAuB,SAACvuT,EAASmkF,GAC/B,IAAKnkF,EACH,OAAO,KAEJmkF,IAEHA,EADqB,UAAMrlF,WAAW4S,YAAYiB,aACnBlK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,SAE9E,OAAO4M,EAAQM,UAAUuZ,kBAAkBsqE,EAAgBx/E,KAAO3E,EAAQM,UAAUkS,eAAe2xE,EAAgBx/E,KAzElG,E,mFAIA6tC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GAEtGlF,EAAch/E,KAAK6xT,qBAAqBxtO,GAgB5C,OAdyBA,EAAkBr9E,QAAO,SAAA3D,GAChD,OAAQ27E,EAAY/+E,MAAK,SAAAm/J,GAAA,OAAcA,EAAWz7J,UAAU2M,oBAAsBjN,EAAQM,UAAU2M,wBAGrFlS,SAAQ,SAAAiF,GACvB,IAAIupG,EAAqBvpG,EAAQ2+E,yCAC7BhD,EAAYnhF,OAAM,SAAAw1M,GAEpB,OADwBA,EAAkBrxH,2CACb4qB,MAE7B5tB,EAAYjqF,KAAKsO,OAId,aAAO27E,GAAa,SAAC37E,GAAD,OAAaA,EAAQM,UAAUqE,MACvDF,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,2CAGjCm1E,GAAmB,WAEhCmD,EADe,UAAMrlF,WAAW4S,YAAYiB,aACblK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,QAClF,GAAI+wF,EAAiB,CACnB,IAAI2uO,EAA0Bn2T,KAAK4xT,qBAAqB5xT,KAAKmmB,cAAeqhE,GAC5E,IAAK2uO,EAAyB,CAC5B,IAAM52L,EAAmBv/H,KAAKU,YAAY8vC,KACtC+uF,GAAoBA,EAAiBp5G,gBACvCgwS,EAA0Bn2T,KAAK4xT,qBAAqBryL,EAAiBp5G,cAAeqhE,IAGxF,IAAK2uO,EACH,IAAK,IAAI5hU,EAAI,EAAGA,EAAI8vF,EAAkB5vF,OAAQF,IAAK,CACjD,IAAM6hU,EAAcp2T,KAAK4xT,qBAAqBvtO,EAAkB9vF,GAAIizF,GACpE,GAAI4uO,EAAa,CACfD,EAA0BC,EAC1B,OAIN,GAAID,EAAyB,CAC3B,IAAME,EAAmBF,EAAwB,GAC3CG,EAAoBH,EAAwB,GAClD9xO,EAAoBA,EAAkBr9E,QAAO,SAAC3D,GAC5C,GAAIA,EAAQugF,yBACV,OAAO,EAET,IAAM2yO,EAAwB,EAAK3E,qBAAqBvuT,EAASmkF,GACjE,OAAO+uO,IAA0BA,EAAsBp8T,SAASk8T,IAC9DC,GAAqBC,EAAsBp8T,SAASm8T,QAK5D,OAAOjyO,I,+CAcoD,IAAtCoE,EAAsC,uDAAnB,GAAI5sE,EAAe,uDAAJ,GACvD,GAAI7b,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,SAAU,CACrD,IAAIkmI,EAA4BlmI,EAC5B7b,KAAK0iH,yBAAyB7mG,GAC9B7b,KAAKmmB,cAAcw8D,yBACjBovO,EAAsBtpO,EAAiBzhF,QAAO,SAAA3D,GAClD,OAAOA,EAAQs/E,2BAA6Bo/D,KAExCiwK,EAAsBhyT,KAAK6xT,qBAAqBE,GAEtD,GADA/xT,KAAKmmB,cAAgB6rS,EAAoB,IAAMD,EAAoB,IAAM,KACrE/xT,KAAKmmB,cACP,OAAO,EAGX,OAAO,I,mCAGI,WACLsiE,EAAmBzoF,KAAKygF,qBAC1BzgF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEiL,UAAUixB,YAAcl8B,EAAEioF,gCAAgC,EAAKF,2BAC3FzgF,KAAK2hF,SAET,IAD6B3hF,KAAKimG,uBAAuBxd,EAAkB,MAChD,CACzB,IAAMj4C,EAAOxwC,KAAKU,YAAY8vC,KAC1BgmR,EAAsB,KACtBhmR,GAAQA,EAAKrqB,gBACfqwS,EAAsBhmR,EAAKk7F,sBAAsBl7F,EAAKrqB,cAAesiE,IAEvEzoF,KAAKmmB,cAAgBqwS,GAAuB/tO,EAAiB,GAE3DzoF,KAAK8nF,wBACP9nF,KAAK8mF,mBAAqB9mF,KAAK8nF,6B,iCA7GhB6pO,G,qJCNrB,Q,IACA,M,IACA,OACA,Q,uDAEqBO,E,YAEnB,WAAY5mN,IAAO,gGACXA,IADW,SA6CnBogC,sBAAwB,WAAwC,IAAvCroI,EAAuC,yDAAvBozT,EAAuB,aACxDl9T,EAAS8J,EAAQ3C,YACjBywC,EAAa53C,EAAOmH,YAAYywC,WAChCq2C,EAAkBnkF,EAAQovT,qBAEhC,GAAIthR,GAAcq2C,EAAiB,CACjC,IAAMkvO,EAAkBrzT,EAAQgvT,0BAA0BhvT,EAASmkF,GACnE,GAAIkvO,EAAiB,CACnB,IAAIvoN,GAAoBsoN,GAAsBtlR,EAAWwwC,UAAU36E,QAAO,SAAC3D,GACzE,OAAQA,EAAQM,UAAUkS,eAAe2xE,EAAgBx/E,KACpD3E,EAAQM,UAAUkS,eAAe2xE,EAAgBx/E,IAAI/H,MAAK,SAAA02T,GAC3D,OAAOD,EAAgBz2T,MAAK,SAAA22T,GAAA,OAAuBA,IAAwBD,SAE5EtzT,EAAQM,UAAUuZ,kBAAkBsqE,EAAgBx/E,KAChD3E,EAAQM,UAAUuZ,kBAAkBsqE,EAAgBx/E,IAAI/H,MAAK,SAAA02T,GAC9D,OAAOD,EAAgBz2T,MAAK,SAAA22T,GAAA,OAAuBA,IAAwBD,WAGnFxoN,EAAmBA,EAAiBnnG,QAAO,SAAA3D,GAAA,OAAYA,EAAQugF,4BAC/D,IAAIuuO,EAAiB9uT,EAAQmvT,4CAA4CrhR,EAAYg9D,GACrF,OAAOgkN,EAAe19T,OAClB09T,EAAe,GACfhkN,EAAiB15G,OACf05G,EAAiB,GACjB,MAGV,OAAO,MAxEU,EA2EnBkkN,0BAA4B,SAAChvT,EAASmkF,GAEpC,OADAA,EAAkBA,GAAmB,EAAKirO,sBACnC,IAAArwO,sBAAqB/+E,EAASmkF,IA7EpB,EAgFnBgrO,4CAA8C,SAACrhR,GAAsC,IAA1Bg9D,EAA0B,uDAAP,GAC5E,IAAKh9D,EAAWhrB,cACd,MAAO,GAET,IAAIwuM,EAAoBxjL,EAAWhrB,cAAc67D,yCACjD,OAAOmsB,EAAiBnnG,QAAO,SAAA3D,GAE7B,OAD2BA,EAAQ2+E,2CACL2yI,MAvFf,EA2FnB89F,mBAAqB,WAEnB,OADqB,UAAMtwT,WAAW4S,YAAYiB,aAC9BlK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,SA7FhD,E,mFAIAo/C,EAASouC,GAAY,WAChCC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACpGsD,EAAkBxnF,KAAKyyT,qBACvBthR,EAAanxC,KAAKU,YAAYywC,WAUpC,GAPIq2C,GAAmBr2C,GAAcA,EAAWhrB,gBAC9Ck+D,EAAoBA,EAAkBv8E,KAAI,SAACzE,GAEzC,OADAA,EAAQugF,0BAA4B,EAAK8nD,sBAAsBroI,GACxDA,MAIPmkF,GAAoC,iBAAhBxnF,KAAKsG,OAA4B,CACvD,IAAMuwT,GAAkB,IAAAnqO,2BAA0B,YAAalF,GAC3DqvO,IACFxyO,EAAoBA,EAAkBr9E,QAAO,SAAA3D,GAC3C,IAAM+yT,GAAc,IAAAh0O,sBAAqB/+E,EAASmkF,GAClD,OAAQ4uO,IAAgBA,EAAYj8T,SAAS08T,EAAgB7uT,QAKnE,OAAOq8E,EAAkBv8E,KAAI,SAAAoH,GAC3B,IAAM0jT,EAAc,IAAI,EAAJ,QAAyB1jT,EAAEq0E,YAAar0E,GAE5D,OADA0jT,EAAYhvO,yBAA2BgvO,EAAYp3S,KAAKooE,yBACjDgvO,O,kCAICj+S,IACV,qGAAkBA,GAClB3U,KAAK82T,mBAAqB92T,KAAK0rI,wBAC/B1zI,QAAQ4B,IAAI,0BAA2BoG,KAAK82T,oBACxC92T,KAAK82T,oBACP92T,KAAK82T,mBAAmBrwN,aAAY,GAEtCzmG,KAAK4mF,mB,6CAuDL,MAAO,K,oDAIP,OAAO,I,kCAIP,OAAO,I,kCAIP,OAAO,M,iCA/GUsrO,G,+JCLrB,O,OACA,O,IACA,Q,IACA,MACA,QACA,QAOA,QACA,SACA,QACA,SACA,QACA,Q,uDAEM6E,G,gBASJ,WAAYzrN,IAAO,gGACXA,IADW,SAuFnB0rN,uBAAyB,SAACvkH,EAAuB18L,GAC/C,EAAKunK,SAAS,CACZu2B,WAAW,EACXpB,wBACA18L,iBA3Fe,EA+FnBkhT,sBAAwB,SAACrhT,GACvB,IAAMgpK,EAAY,EAAKtzE,MACjBqnG,EAAkB,EAAKukH,6BAA6Bt4I,GACpD7oK,EAAc6oK,EAAU5oK,aAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASk8M,KAClEr0L,EAAmBvI,EAAYtf,OAAS,EAAAylG,0BAA0B,GAAGD,iBACvE2iF,EAAUtgK,gBAAkB,GAE5Bm0L,EAAwB,GAC5B,GAAIn0L,EAAgB7pB,OAAQ,CAC1B,IAAM0iU,EAAkB,EAAAj7N,0BAA0B,GAAGD,iBAC/CkQ,EAAmByyE,EAAU5oK,aAAalK,MAAK,SAAAmK,GACnD,OAAOA,EAAMxf,OAAS0gU,KAExB,GAAIhrN,EAAkB,CACpB,IAAMirN,EAAsB94S,EAAgBxS,MAAK,SAAAurT,GAAA,OAAWA,EAAQtqO,gBAAkBof,EAAiBnkG,MACjGsvT,EAAqBF,GAAuBA,EAAoBvnS,SAClEynS,GAA6C,IAAvBA,EACxB1hT,EAAaxX,SAAQ,SAAA8X,GACf0oK,EAAUnB,WAAW97F,SAAS1hF,MAAK,SAAAoD,GACrC,OAAOA,EAAQM,WACVN,EAAQM,UAAUkS,eAAeE,EAAY/N,KAC7C3E,EAAQM,UAAUkS,eAAeE,EAAY/N,IAAI7N,SAAS+b,IAC1D7S,EAAQM,UAAUkS,eAAes2F,EAAiBnkG,KAClD3E,EAAQM,UAAUkS,eAAes2F,EAAiBnkG,IAAI7N,SAASm9T,OAEpE7kH,EAAsB19M,KAAKmhB,MAI/Bu8L,EAAwB78L,OAG1B68L,EAAwB78L,OAG1B68L,EAAwB78L,EAE1B,IAAM2hT,EAAwB,EAAKC,mBAAmB,EAAKlsN,MAAOmnG,GAClE,EAAKn1B,SAAS,CACZm1B,sBAAuB8kH,KAtIR,EA0InBC,mBAAqB,SAAC54I,EAAW6zB,GAC/B,IAAM2mD,EAAuBx6E,EAAUnB,WAAWt3J,cAC9Cy4J,EAAUnB,WAAWt3J,cAAcxiB,UAAUkS,eAC7C,GAEJ,OAAO48L,EAAsB/pM,MAAK,SAACC,EAAEC,GACnC,IAAM6uT,EAAU,EAAKC,oBAAoBt+D,EAAsBzwP,GACzDgvT,EAAU,EAAKD,oBAAoBt+D,EAAsBxwP,GAC/D,OAAO6uT,IAAYE,EAAUF,EAAUE,GAAW,EAAI,EAAI,MAlJ3C,EAsJnBC,4BAA8B,SAACr5M,GAC7B,IAAM/hB,EAAmB+hB,EAAmB/hB,iBAC5C,OAAI50F,MAAMC,QAAQ20F,IAAqBA,EAAiB/nG,OAC/C+nG,EAAiB,GAAG3F,UAEtB,IAAApM,mBAAkB8zB,EAAmBhiB,OA3J3B,EA8JnBm7N,oBAAsB,SAACt+D,EAAsB76I,GAC3C,IAAMi9B,EAAyB,EAAKlwC,MAAMkwC,uBAK1C,GAHEA,IAA2B,EAAAt/C,0BAA0B,GAAGF,UACrDw/C,IAA2B,EAAAt/C,0BAA0B,GAAGF,SAG3D,OAAO,EAET,GAA+B,eAA3Bw/C,GAA2C,EAAKz0I,MAAMgP,aAAe,EAAKhP,MAAMgP,YAAYI,OAAQ,kBAEtG,IADA,IAAM0hT,EAAmB,EAAKvsN,MAAM8vC,wBAA0B,IAAM,EAAK9vC,MAAMgwC,4BADuB,WAE7F/mJ,GACP,IAAMujU,EAAkB,EAAKxsN,MAAMmyE,WAAWs6I,WAAWxjU,GAEzD,GADwBujU,EAAgBnkH,YAAY7nM,MAAK,SAAAksT,GAAA,OAAWA,IAAYH,KAG9E,YADe,EAAK9wT,MAAMgP,YAAYI,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIv1F,QAAU4gU,EAAgBrhU,QACzEuR,KAAOu2G,EAAmBv2G,MALnCzT,EAAI,EAAGA,GAAK,EAAK+2G,MAAMmyE,WAAWs6I,WAAWtjU,OAAS,EAAGF,IAAK,SAA9DA,GAA8D,mEAQvE,SAAOgqH,EAAmBrnH,QAAU,EAAKo0G,MAAMmyE,WAAWw6I,kBAV4C,sEAsBxG,OAAO,EAAKlxT,MAAMgP,aAAeqjP,EAAqB,EAAKryP,MAAMgP,YAAY/N,KACxEoxP,EAAqB,EAAKryP,MAAMgP,YAAY/N,IAAI7N,SAASokH,EAAmBv2G,KA9LhE,EAiMnBkwT,wCAA0C,WACxC,IAAMj7F,EAAc,EAAK3xH,MAAM3qF,YAAc,IAAO,EAAI,EACnD,EAAK2qF,MAAMkwC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,UACnE,EAAKsP,MAAMmvC,qBAAuBwiF,GACrC,EAAK3xH,MAAMkvC,sBAAsByiF,GAEnC,EAAK3xH,MAAMiwC,0BAA0B,OAvMpB,EA0MnB48K,uBAAyB,SAAC55M,GAKxB,OAAQ,EAAKjT,MAAMkwC,wBACjB,IAAK,aACH,IAAMq8K,EAAmB,EAAKvsN,MAAM8vC,wBAA0B,IAAM,EAAK9vC,MAAMgwC,4BAC3E88K,EAAyB,EAAK9sN,MAAMmyE,WAAWs6I,WAAWjsT,MAAK,SAAA2K,GAAA,OAAOA,EAAIhgB,OAAS8nH,EAAmBrnH,SACtGqnH,EAAmBrnH,QAAU,EAAKo0G,MAAMmyE,WAAWw6I,kBAChDG,IACHA,EAAyB,CAAC3hU,KAAM8nH,EAAmBrnH,MAAOy8M,YAAa,IACvE,EAAKroG,MAAMmyE,WAAWs6I,WAAWhjU,KAAKqjU,IAEnCA,EAAuBzkH,YAAYx5M,SAAS09T,KAC/CO,EAAuBzkH,YAAY5+M,KAAK8iU,GACxC,EAAKvsN,MAAMmyE,WAAW32F,mBAAqB,EAAKwkB,MAAMmyE,WAAW31F,wBACjE,EAAKwjB,MAAMipH,cAGb,EAAKjpH,MAAMmyE,WAAWs6I,WAAW35T,SAAQ,SAAAi6T,GACvC,IAAMC,EAAuBD,EAAa1kH,YAAYh3L,WAAU,SAAAq7S,GAAA,OAAWA,IAAYH,KACnFS,GAAwB,IAC1BD,EAAa1kH,YAAYh+M,OAAO2iU,EAAsB,GACtD,EAAKhtN,MAAMmyE,WAAW32F,mBAAqB,EAAKwkB,MAAMmyE,WAAW31F,wBACjE,EAAKwjB,MAAMipH,gBAIjB,EAAKvR,cACL,MAEF,KAAK,EAAA9mH,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAIhC,GAA8B,QAA1BuiB,EAAmBv2G,GAAc,CACnC,IAAMs3G,EAAiB,EAAKhU,MAAMhtF,gBAAgBxS,MAAK,SAAAysT,GACrD,OAAOA,EAAUxrO,gBAAkB,EAAKhmF,MAAMgP,YAAY/N,MAExDs3G,GACF,EAAKhU,MAAMn8E,oBAAmB,IAAAgjL,wBAAA,wBAA2B,EAAK7mG,MAAMhtF,kBAAkB,CACpFuR,SAAUyvF,EAAezvF,SACzBk9D,cAAe,EAAKhmF,MAAMgP,YAAY/N,MAG1C,EAAKkwT,+CACItwT,MAAMC,QAAQ02G,EAAmBn+F,QAAUm+F,EAAmBn+F,MAAM3rB,OAC7E,EAAKwiU,sBAAsB14M,EAAmBn+F,MAAMtY,KAAI,SAAAqY,GAAA,OAAUA,EAAOnY,QAEzE,EAAKsjG,MAAMn8E,oBAAmB,IAAAkjL,yBAAA,wBAA4B,EAAK/mG,MAAMhtF,kBAAkB,CACrFuR,SAAU0uF,EAAmBv2G,GAC7B+kF,cAAe,EAAKhmF,MAAMgP,YAAY/N,MAExC,EAAKkwT,2CAEP,MAEF,QACE,IAAI/pN,EAAmB,EAAK7C,MAAMmyE,WAAW97F,SAAS36E,QAAO,SAAC3D,GAC5D,OAAO,EAAK0D,MAAMgP,aAAe1S,EAAQM,UAAUkS,eAAe,EAAK9O,MAAMgP,YAAY/N,KACpF3E,EAAQM,UAAUkS,eAAe,EAAK9O,MAAMgP,YAAY/N,IAAI7N,SAASokH,EAAmBv2G,OAE/F,GAAqC,gBAAjC,EAAKsjG,MAAMmyE,WAAWn3K,QAA4B,EAAKglG,MAAMmyE,WAAWt3J,cAAcrT,SAApC,OAAwD,CAC5G,IAAM0lT,EAA4B,EAAKltN,MAAMmyE,WAAWt3J,cAActK,SAAS9d,MAAM,OACrFowG,EAAmBA,EAAiBnnG,QAAO,SAAC3D,GAC1C,IAAMo1T,EAAsBp1T,EAAQwY,SAAS9d,MAAM,OACnD,OAAQ06T,EAAoBhkU,OAAS,GAAO+jU,EAA0B/jU,OAAS,GAC1EgkU,EAAoB,KAAOD,EAA0B,UAElB,mBAAjC,EAAKltN,MAAMmyE,WAAWn3K,QAA+B,EAAKglG,MAAMmyE,WAAWt3J,cAAcrT,SAApC,OAC9Dq7F,EAAmBA,EAAiBnnG,QAAO,SAAC3D,GAAD,OAAaA,EAAQyP,SAAR,WACnDzP,EAAQyP,SAAR,UAA8B3Y,SAAS,YACF,eAAjC,EAAKmxG,MAAMmyE,WAAWn3K,QAA4D,6BAAjC,EAAKglG,MAAMmyE,WAAWn3K,SAChF6nG,EAAmB,EAAKuqN,kCAAkCvqN,IAExDA,EAAiB15G,SACnB,EAAK62G,MAAM2vH,YAAY,CAACz/M,KAAK2yF,EAAiB,KAAK,GACnD,EAAK60G,iBAzRM,EAiSnB01G,kCAAoC,WAA2B,IAA1BvqN,EAA0B,uDAAP,GAClDwmH,EAAoB,EAAKrpH,MAAMmyE,WAAWt3J,cAActK,SACtD82L,EAAkB,EAAKukH,6BAA6B,EAAK5rN,OACzDv1F,EAAc,EAAKu1F,MAAMt1F,aAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASk8M,KAMzE,OALI58L,GAAeA,EAAYI,QAAUJ,EAAYI,OAAO1hB,QAC1DshB,EAAYI,OAAO/X,SAAQ,SAACqpF,GAC1BktI,EAAoBA,EAAkB52N,MAAM,IAAI0pF,EAAiBvwF,OAAOmc,KAAK,OAG1E86F,EAAiBnnG,QAAO,SAAA3D,GAC7B,IAAIkgF,EAAclgF,EAAQwY,SAI1B,OAHA9F,EAAYI,OAAO/X,SAAQ,SAACqpF,GAC1BlE,EAAcA,EAAYxlF,MAAM,IAAI0pF,EAAiBvwF,OAAOmc,KAAK,OAE5DkwE,IAAgBoxI,MA/SR,EAmTnBgkG,qBAAuB,SAACziT,EAAamyH,EAAc+wH,GACjD,IAAM76I,EAAqC,QAAhBroG,EAAA,mBAEvB,IAAA+J,kCAAiC,EAAKlZ,MAAMgP,aAAajK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAOkO,KACpF,GAAKqoG,EAAL,CAIA,IAAI9F,EAAY,EAAKm/M,4BAA4Br5M,GAE3CnkC,EAAS,CACbqkC,eAAsD,UAAtC,EAAKnT,MAAMkwC,uBAAqC,QAAU,WAExE/iC,IACFr+B,EAAO0R,gBAAkB,OAAS2sB,EAAY,MAE3CA,GAAa8F,GAA4D,UAAtC,EAAKjT,MAAMkwC,yBACjDphE,EAAOs+B,gBAAkB6F,EAAmBrnH,OAE1B,QAAhBgf,IACFkkE,EAAOqkC,eAAkB,EAAKnT,MAAM3qF,YAAc,IAAO,MAAQ,MACjEy5D,EAAOukC,mBAAqB,kBAE9B,IAAMw6C,EAAW,EAAKu+J,oBAAoBt+D,EAAsB76I,GAEhE,OAAO,EAAKjT,MAAM7qG,SAChB,8BAAImqF,UAAU,kBAAkBpzF,IAAK,oBAAoB6wI,GACvD,+BAAKz9C,UAAW,2BAA6BuuE,EAAW,UAAY,KAAuB,QAAhBjjJ,EAAwB,gCAAkC,IAIhI4mK,QAAS,kBAAM,EAAKq7I,uBAAuB55M,IAC3ClqG,MAAO+lE,GACV,+BAAKwQ,UAAU,gCACb,gCAAMA,UAAU,qCAAqC2zB,EAAmBliB,gBAK9E,+BAAKzR,UAAW,WAAauuE,EAAW,UAAY,KAAuB,QAAhBjjJ,EAAwB,gBAAkB,IAChG1e,IAAK,kBAAkB6wI,EACvBy0C,QAAS,kBAAM,EAAKq7I,uBAAuB55M,IAC3ClqG,MAAO+lE,GACV,+BAAKwQ,UAAW,gBACd,gCAAMA,UAAU,sBAAsB2zB,EAAmBliB,iBA/V9C,EAqWnBu8N,wBAA0B,WAExB,GAAI,EAAK7xT,MAAM8sM,UACb,OAAO,EAAKglH,oBAGd,IAAMz/D,EAAuB,EAAK9tJ,MAAMmyE,WAAWt3J,cAC/C,EAAKmlF,MAAMmyE,WAAWt3J,cAAcxiB,UAAUkS,eAC9C,GAEJ,OAAK,EAAK9O,MAAMgP,aAAgB,EAAKhP,MAAMgP,YAAYI,OAIhD,EAAKpP,MAAM0rM,sBAAsB3qM,KAAI,SAACoO,EAAa4iT,GACxD,OAAO,EAAKH,qBAAqBziT,EAAa4iT,EAAkB1/D,MAJzD,IAhXQ,EAwXnB2/D,kBAAoB,WAQlB,IANA,IAAM3/D,EAAuB,EAAK9tJ,MAAMmyE,WAAWt3J,cAC/C,EAAKmlF,MAAMmyE,WAAWt3J,cAAcxiB,UAAUkS,eAC9C,GAEE4kI,EAAuD,IAAlC,EAAKnvC,MAAMmvC,mBAA2B,EAAI,EAC/Ds9J,EAAW,GACRxjT,EAAI,EAAGA,GAAK6V,KAAKkI,KAAK,EAAKvL,MAAM0rM,sBAAsBh+M,OAAS,EAAIgmJ,GAAqBlmJ,IAAM,CAEtG,IADA,IAAMykU,EAAgB,GACbvjU,EAAI,EAAGA,EAAIglJ,EAAmBhlJ,IAAM,CAC3C,IAAM4yI,EAAe5yI,EAAGlB,EAAEkmJ,EAEpBvkI,EAAc,EAAKnP,MAAM0rM,sBAAsBpqE,GACrD,IAAK,EAAKthI,MAAMgP,cAAgB,EAAKhP,MAAMgP,YAAYI,OACrD,MAEF6iT,EAAcjkU,KAAK,EAAK4jU,qBAAqBziT,EAAamyH,EAAc+wH,IAE1E2+C,EAAShjT,KACP,8BAAI61F,UAAU,sBAAsBpzF,IAAK,sBAAsBjD,GAC5DykU,IAKP,OAAOjhB,GAhZP,EAAKhxS,MAAQ,CACX0rM,sBAAuB,GACvBoB,WAAW,EACX99L,YAAa,IALE,E,oFAUjB/V,KAAK0yM,0BAA0B1yM,KAAKsrG,S,gDAGZszE,IACnBA,EAAUnB,YAAcz9K,KAAKsrG,MAAMmyE,YAAcmB,EAAUnB,WAAW5hK,WAAa7b,KAAKsrG,MAAMmyE,WAAW5hK,UACxG+iK,EAAUpjC,yBAA2Bx7I,KAAKsrG,MAAMkwC,yBACpDx7I,KAAK0yM,0BAA0B9zB,GAEjC5+K,KAAKi5T,aAAar6I,K,6CAIlB5+K,KAAKk4T,4C,mCAGMt5I,GACNA,EAAUpjC,yBAA2Bx7I,KAAKsrG,MAAMkwC,wBAC/CojC,EAAUpjC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,UACnE4iF,EAAUtgK,gBAAgB7pB,QAE7BuL,KAAKsrG,MAAMn8E,mBAAmB,M,mDAILyvJ,GAC3B,IAAI/2E,EAAe,KACnB,OAAQ+2E,EAAUnB,WAAWn3K,QAC3B,IAAK,cACL,IAAK,iBACHuhG,EAAe,EAAA9L,uBAAuBjwF,MAAK,SAAAurG,GAAA,OAAUA,EAAOrb,WAAa4iF,EAAUpjC,0BACnF,MACF,IAAK,aACL,IAAK,2BACH3zC,EAAe,EAAA3L,0BAA0BpwF,MAAK,SAAAurG,GAAA,OAAUA,EAAOrb,WAAa4iF,EAAUpjC,0BAK1F,OAAO3zC,EAAeA,EAAa5L,iBAAmB,K,kDAGN,WAAxB2iF,EAAwB,uDAAZ5+K,KAAKsrG,MACnCqnG,EAAkB3yM,KAAKk3T,6BAA6Bt4I,GACpD7oK,EAAc6oK,EAAU5oK,aAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASk8M,KACxE,GAAI58L,EAAa,CACf,IAAMuI,EAAmBvI,EAAYtf,OAAS,EAAAylG,0BAA0B,GAAGD,iBACvE2iF,EAAUtgK,gBAAkB,GAC1Bm0L,EAAwB,UAAgBgB,yBAC5C70B,EAAU5oK,aAAc28L,EAAiB/zB,EAAUnB,WAAYz9K,KAAKsrG,MAAMnzF,eAAgBmG,GAGtFi5S,EAAwBv3T,KAAKw3T,mBAAmB54I,EAAW6zB,GAC3DymH,EACJt6I,EAAUpjC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,UAC/D4iF,EAAUpjC,yBAA2B,EAAAt/C,0BAA0B,GAAGF,SAEnEk9N,EACEl5T,KAAKsrG,MAAMmnG,sBAAsB18L,EAAY/N,IAC/ChI,KAAKg3T,uBAAL,CAA6B,OAA7B,qBAAuCh3T,KAAKsrG,MAAMmnG,sBAAsB18L,EAAY/N,MAAM+N,IAE1F/V,KAAKs9K,SAAS,CACZu2B,WAAW,KAEb,IAAA7hF,wBAAuB4sD,EAAUnB,WAAW7hK,QAAUgjK,EAAUnB,WAAW5hK,SAAU9F,EAAY/N,IAC9F6pB,MAAK,SAACswE,GACL,EAAKmJ,MAAMioM,0BAAX,gBACGx9R,EAAY/N,GAAKm6F,EAASluG,OAE7B,EAAK+iU,uBAAL,CAA6B,OAA7B,qBAAuC70N,EAASluG,OAAO8hB,OAI7D/V,KAAKg3T,uBAAuBO,EAAuBxhT,M,0CAoUvD,OAAO,+BAAK60E,UAAU,mF,+BAItB,OAAO5qF,KAAKsrG,MAAM7qG,SAAWT,KAAK44T,0BAChC,8BAAIhuO,UAAW,oCAAqC5qF,KAAKsrG,MAAMmvC,oBAC5Dz6I,KAAK+G,MAAM8sM,UAAY7zM,KAAK64T,oBAAsB74T,KAAK+4T,yB,kBAnavD72K,UAAY,CACjBzhJ,SAAU,UAAU2hJ,KACpBq7B,WAAY,UAAU9lL,OAAOshH,WAC7BgiH,YAAa,UAAUl8C,KAAK9lE,WAC5Bs7G,UAAW,UAAUx1C,KAAK9lE,Y,cAobf,IAAAnN,UAfS,SAACxzG,GACvB,MAAO,CACL0d,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtB61I,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CJ,wBAAyB9iJ,EAAMu1I,gBAAgBuN,wBAC/CE,4BAA6BhjJ,EAAMu1I,gBAAgByN,4BACnD69K,iBAAkB7gU,EAAMu1I,gBAAgBsrL,iBACxC1+K,mBAAoBniJ,EAAMu1I,gBAAgB4M,mBAC1Cn8H,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCm0L,sBAAuBn6M,EAAMyc,YAAY09L,sBACzC9xL,YAAaroB,EAAMgR,YAAYqX,eAIK,CACtCo7H,0CACA5sH,wCACAosH,sDACAE,wEACAjB,8CACA+4J,qDANa,CAOZwjB,I,yICpdH,O,OACA,O,IACA,M,IACA,OACA,O,IAEA,Q,IACA,Q,IACA,S,IACA,Q,IACA,Q,IACA,OACA,QACA,Q,uDAEMqC,G,gBA4BJ,WAAY9tN,IAAO,gGACXA,IADW,SAwHnBk2K,qBAAuB,WACrB,EAAKl2K,MAAMmwH,gBAAgB,EAAK10N,MAAMqjN,eAAgB,EAAK9+G,MAAMuyE,cAAcv3K,SAC/E,aAAElN,UAAU6/N,IAAI,UAAYvjG,kBAAmB,EAAK0/H,kBA1HnC,EAmInBikE,iBAAmB,WAAoE,IAAnEjvG,EAAmE,uDAAlD,EAAKrjN,MAAMqjN,eAAgBh7G,EAAuB,wDACrF,EAAKkuE,SAAS,CACZg8I,OAAQlqN,EACRg7G,eAAgBA,EAAetiN,KAAI,SAACy6G,EAAMxxG,GAExC,OADAwxG,EAAKpsG,OAAS,EAAKojT,cAAch3M,EAAMxxG,GAChCwxG,OAER,WACGnT,GACF,EAAKkuE,SAAS,CACZg8I,QAAQ,QA7IG,EAmJnBE,oBAAsB,WACpB,IAAM/7I,EAAa,EAAKnyE,MAAMuyE,cAC9B,MAA0B,yBAAtBJ,EAAWn3K,OACNm3K,EAAWn5F,+CAA+Cm5F,EAAWh9F,wBAEvE,EAAK6qB,MAAM3pB,SAAS36E,QAAO,SAAA3D,GAChC,OAAQA,EAAQM,UAAU4M,YAAYpW,SAAS,eAzJhC,EA6JnBs/T,iCAAmC,SAACl7M,EAAoB3tB,EAAe8oO,GAA2D,IAAnDjxO,EAAmD,uDAAhC,EAAK1hF,MAAM0hF,iBACrG32E,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SACrD+gF,EAAmBA,EAAiBzhF,QAAO,SAAA3D,GACzC,OAAQA,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjD,IAAI08P,GAAe,EAUnB,OATI/kP,EAAmB8rB,aAAgB,EAAK0tE,MAAMl2F,wBAA4Bhc,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,eACpJqpG,EAAmBnoG,gBAAmBqyE,EAAiBxoF,MAAK,SAAAoD,GAE5D,IAAMs2T,EAAet2T,EAAQM,UAAUkS,eAAe6jT,GACtD,OAAOC,GAAgBA,EAAax/T,SAASy2F,IAAkBvtF,EAAQM,UAAUgS,cAEnFkhP,GAAe,GAGZA,GA5KU,EA+KnBzB,gBAAkB,WAChB,IAAM9wH,EAAc,EAAKv9H,MAAMqjN,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQ,EAAK9xP,MAAMojN,mBACtF,GAAI7lF,EAAYimF,gBAAiB,CAC/B,IAAMv5M,EAAgBszH,EAAYnuH,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIv2E,cAAgBouH,EAAYimF,mBACjFv5M,GACF,EAAKA,EAAc4oT,mBAAqB,cAAgB,uBACtD,CACE5xT,GAAGs8H,EAAYimF,gBACfrzN,MAAOotI,EAAYs0H,kBACnBv8J,YAAaioC,EAAYs0H,oBAE3B,EACAt0H,EAAYo3E,cA3LD,EAiMnBm+G,qBAAuB,WACrB,IAAM/nT,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SAC/Cm2K,EAAgB,EAAKvyE,MAAMuyE,cACjC,OAAS/rK,EAAmB8rB,aACtBigJ,EAAc13J,gBAAkB03J,EAAc13J,cAActK,SAAS1hB,SAAS,sBAC7E0jL,EAAct3F,WAAW,EAAK+kB,MAAMr+F,mBAAqB4wK,EAAcn3F,oBAtM7D,EAyMnBozO,mBAAqB,SAACnnH,GACpB,IAAIkmD,GAAS,EAEb,GADAlmD,EAAmBA,EAAgBx1L,OAAO7gB,cACtC,EAAKu9T,wBAA0B,EAAKvuN,MAAMuyE,cAAc13J,cAAe,CAEzE,IAAMizO,EAAuB,EAAK9tJ,MAAMuyE,cAAc13J,cAAcxiB,UAAUkS,eAE9E,GAAwC,yBAApC,EAAKy1F,MAAMuyE,cAAcv3K,OAAmC,CAC9D,IAAMozP,EAAiB,EAAKpuJ,MAAMt1F,aAAalK,MAAK,SAAAiK,GAAA,MAA2C,aAA5BA,EAAYtf,KAAK0mB,UACpF,GAAIu8O,GAAkBN,EAAqBM,EAAe1xP,IAAK,CAC7D,IAAM2xP,EAAkBP,EAAqBM,EAAe1xP,IAAI,GAC1D4xP,EAAgBF,EAAevjP,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAO2xP,KAC/DC,IACyB,aAAxBA,EAAc1iQ,OAA4C,kBAApBy7M,GACX,aAAxBinD,EAAc1iQ,OAAgD,SAAxB0iQ,EAAc1iQ,OAAwC,gBAApBy7M,GAChD,YAAxBinD,EAAc1iQ,OAA2C,mBAApBy7M,GACb,YAAxBinD,EAAc1iQ,OAA2C,iBAApBy7M,GACb,SAAxBinD,EAAc1iQ,OAAwC,cAApBy7M,GACV,SAAxBinD,EAAc1iQ,OAA4C,2BAAxB0iQ,EAAc1iQ,OAA0D,cAApBy7M,KAE5FkmD,GAAS,SAGR,GAAwC,mBAApC,EAAKvtJ,MAAMuyE,cAAcv3K,OAA6B,CAC/D,IAAMgzP,EAAkB,EAAKhuJ,MAAMt1F,aAAalK,MAAK,SAAAiK,GAAA,MAA2C,cAA5BA,EAAYtf,KAAK0mB,UACrF,GAAIm8O,GAAmBF,EAAqBE,EAAgBtxP,IAAK,CAC/D,IAAM+xT,EAAmB3gE,EAAqBE,EAAgBtxP,IAAI,GAC5DgyT,EAAiB1gE,EAAgBnjP,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAO+xT,KACjEC,IACE,EAAA9+R,6BAA6B/gC,SAAS6/T,EAAe9iU,QAA8B,aAApBy7M,IAEnEkmD,GAAS,UAIV,GAAwC,yBAApC,EAAKvtJ,MAAMuyE,cAAcv3K,OAAmC,CAErEuyP,EADsB,CAAC,YAAa,YAAa,cAAe,iBAAkB,gBAC3D1+P,SAASw4M,OACa,mBAApC,EAAKrnG,MAAMuyE,cAAcv3K,SAClCuyP,EAA6B,aAApBlmD,GAEX,OAAOkmD,GAlPU,EAqPnBohE,cAAgB,WAEd,IAAMnoT,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SAE/C48H,EAAc,EAAKv9H,MAAMqjN,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQ,EAAK9xP,MAAMojN,mBACtF,GAAI7lF,GAAeA,EAAYimF,iBAAmBz4M,EAAmB8rB,cAAgB,EAAK0tE,MAAMl2F,uBAAwB,CACtH,IAGMmpG,EAHe,EAAKjT,MAAMt1F,aAAalK,MAAK,SAACiK,GACjD,OAAOA,EAAY/N,KAAOs8H,EAAYt8H,MAEAmO,OAAOrK,MAAK,SAAAouT,GAClD,OAAOA,EAAkBlyT,KAAOs8H,EAAYimF,mBAExC9hI,EAAmB,EAAK1hF,MAAM0hF,iBAAiBzhF,QAAO,SAAA3D,GAC1D,OAAQA,EAAQM,UAAU4M,YAAYpW,SAAS,iBAG7C08P,GAAe,GACft4I,EAAmBnoG,gBAAmBqyE,EAAiBxoF,MAAK,SAAAoD,GAE5D,IAAMs2T,EAAet2T,EAAQM,UAAUkS,eAAeyuH,EAAYt8H,IAClE,OAAO2xT,GAAgBA,EAAax/T,SAASmqI,EAAYimF,kBAAoBlnN,EAAQM,UAAUgS,cAEjGkhP,GAAe,GAGjB,EAAKvrJ,MAAMowH,oBAAoBm7B,KA9QhB,EAmRnBsjE,uBAAyB,WACvB,IAAMC,EAAuB,GAS7B,OALA,EAAKrzT,MAAMqjN,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQz6P,SAAQ,SAACi8T,GAC1DA,EAAc9vG,kBAChB6vG,EAAqBC,EAAcryT,IAAMqyT,EAAc9vG,oBAGpD6vG,GA7RU,EAgSnBlwG,qBAAuB,SAACC,GACtB,IAAMC,EAAkBD,GAAsB,EAAKpjN,MAAMqjN,eAAe,GAAGG,gBAEvE,EAAKxjN,MAAMqjN,eAAetiN,KAAI,SAACuyT,EAAezsT,GAE9C,OADAysT,EAAclkT,OAAS,EAAKojT,cAAcc,EAAezsT,GAClDysT,KAHP,EAAKtzT,MAAMuzT,aAKf,EAAKh9I,SAAS,CACZ6sC,kBAAmBC,EAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQ1uC,GAAqBA,EAAoB,EACxGowG,kBAAkB,EAClBnwG,mBACC,WACD,EAAK6vG,mBAEP,EAAK3uN,MAAMyxG,wBAAwB,CAACrmM,OAAQ,CAACxf,MAAO,OA9SnC,EAiTnBqiU,cAAgB,SAACh3M,EAAMxxG,GACrB,IAAMqpT,EAAuB,EAAKD,uBAAuBppT,GAEzD,OAAO,EAAKhK,MAAMuzT,aAAavpT,GAAWoF,OAAOrO,KAAI,SAAC0yT,GACpD,IAAIC,EAAmB/lU,OAAO+2B,OAAO,GAAI2uS,GAqBzC,OAZAK,EAAiBl4M,EAAKv6G,KAAOwyT,EAAkBtkT,YAE/CskT,EAAkBZ,mBAAqB,EAAK7yT,MAAM0hF,iBAAiBxoF,MAAK,SAAAoD,GACtE,IAAMk8K,EAAiBl8K,EAAQM,UAAUkS,eACzC,SAAI0pK,IAAkB7qL,OAAOmc,KAAK4pT,GAAkB58T,OAAM,SAACiY,GACvD,OAAOypK,EAAezpK,IAAcypK,EAAezpK,GAAW3b,SAASsgU,EAAiB3kT,WAOvF0kT,MA1UQ,EA8UnBE,eAAiB,SAACn4M,EAAMrsG,GACtB,IAAMH,EAAc,EAAKu1F,MAAMt1F,aAAalK,MAAK,SAAAiK,GAC/C,OAAOA,EAAY/N,KAAO,EAAKjB,MAAMqjN,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQt2I,GAAMv6G,MAKzF,OAHyB+N,GAAeA,EAAYI,OAAOrK,MAAK,SAAA27E,GAC9D,OAAOA,EAAiBz/E,MAAQkO,EAAYlO,OAnV7B,EAwVnBizN,YAAc,SAAC/kN,EAAa2gP,EAAc8jE,GAA8C,IAAvBvrN,EAAuB,wDAEhFt9F,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SACrD,IAAK,EAAK4jG,MAAMthF,gBAAkBlY,EAAmBu6H,oBAC9Cl0I,OAAOq+S,gBAAkB1kS,EAAmBujN,gBAAkBl9N,OAAO+1M,2BAC1E,EAAKnxB,qBAAqB,EAAAz9H,eAAeG,eAF3C,CAMA,IAAIm7Q,GAAkB,EACkB,mBAApC,EAAKtvN,MAAMuyE,cAAcv3K,QAA0D,SAA1Bq0T,GAAsC9jE,IACjG+jE,GAAkB,GAIpB,IAAMxwG,EAAiB,EAAKrjN,MAAMqjN,eAAetiN,KAAI,SAACuyT,GACpD,GAAIA,EAAc3+G,aAAei/G,EAAuB,CACtDN,EAAc9vG,gBAAkBr0M,EAAYlO,GAC5C,IAAMy/E,EAAmB,EAAKizO,eAAe,EAAK3zT,MAAMojN,kBAAmBj0M,GAC3EmkT,EAAczhE,kBAAoBnxK,EAAmBA,EAAiB4U,YAAc,GACpFg+N,EAAc7vG,qBAAuBqsC,EAQvC,OALAwjE,EAAgB,EAAKQ,qBAAqBR,EAAeM,EAAuBzkT,EAAak5F,GAAcwrN,MAS7G,GAAwC,mBAApC,EAAKtvN,MAAMuyE,cAAcv3K,QAA+B8oG,GAAwC,cAA1BurN,EAAuC,CAE/G,IAAMG,EAAW,EAAK/zT,MAAMqjN,eAAet+M,MAAK,SAAAy2G,GAAA,MAA4B,SAApBA,EAAKm5F,cACvDq/G,EAAgB,EAAKh0T,MAAMqjN,eAAet+M,MAAK,SAAAy2G,GAAA,OAAQA,EAAKm5F,aAAei/G,KAE7EK,EAAyB,EAAKj0T,MAAM0hF,iBAAiB38E,MAAK,SAAAzI,GAC5D,IAAM43T,EAAiB53T,EAAQM,UAAUkS,eAAeklT,EAAc/yT,KACjE3E,EAAQM,UAAUkS,eAAeklT,EAAc/yT,IAAI,KAAOkO,EAAYlO,GACrEkzT,EAAYJ,EAASvwG,iBAAmBlnN,EAAQM,UAAUkS,eAAeilT,EAAS9yT,KACnF3E,EAAQM,UAAUkS,eAAeilT,EAAS9yT,IAAI,KAAO8yT,EAASvwG,gBACnE,OAAO0wG,GAAkBC,KAU3B,GARKF,IACHA,EAAyB,EAAKj0T,MAAM0hF,iBAAiB38E,MAAK,SAAAzI,GAGxD,OAFuBA,EAAQM,UAAUkS,eAAeklT,EAAc/yT,KACjE3E,EAAQM,UAAUkS,eAAeklT,EAAc/yT,IAAI,KAAOkO,EAAYlO,OAK3EgzT,EAAwB,CAC1B,IAAMG,EAAYH,EAAuBr3T,UAAUkS,eAAeilT,EAAS9yT,IAAI,GAC/E,GAAImzT,GAAaL,EAASvwG,kBAAoB4wG,EAAW,CACvDL,EAASvwG,gBAAkB4wG,EAC3B,IAAMplT,EAAc,EAAKu1F,MAAMt1F,aAAalK,MAAK,SAAAiK,GAAA,OAAeA,EAAY/N,KAAO8yT,EAAS9yT,MACtFy/E,EAAmB1xE,GAAeA,EAAYI,OAAOrK,MAAK,SAAA27E,GAC9D,OAAOA,EAAiBz/E,KAAOmzT,KAEjCL,EAASliE,kBAAoBnxK,EAAmBA,EAAiB4U,YAAc,GAC/Ey+N,EAAStwG,qBAAuBswG,EAAS3kT,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIv2E,cAAgBilT,EAAUtkE,uBAGzF,GAAwC,yBAApC,EAAKvrJ,MAAMuyE,cAAcv3K,SAAsCuwP,GAC1C,kBAA1B8jE,EAA2C,CAC7C,IAAMS,EAAc,EAAKr0T,MAAMqjN,eAAet+M,MAAK,SAAAy2G,GAAA,MAA4B,gBAApBA,EAAKm5F,cAChE,IAAK0/G,EAAY7wG,gBAAiB,CAChC,IAAM8wG,EAAe,EAAK/vN,MAAMt1F,aAAalK,MAAK,SAAAiK,GAAA,OAAeA,EAAY/N,KAAOozT,EAAYpzT,MAC1FszT,EAAwBD,EAAallT,OAAOrK,MAAK,SAAAy2G,GAAA,MAAuB,WAAfA,EAAKrrH,SACpE,GAAIokU,EAAuB,CACzBF,EAAY7wG,gBAAkB+wG,EAAsBtzT,GACpDozT,EAAYxiE,kBAAoB0iE,EAAsBj/N,YACtD,IAAMk/N,EAAqBH,EAAYjlT,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIv2E,cAAgBolT,EAAsBtzT,MACpGozT,EAAY5wG,uBAAuB+wG,GAAqBA,EAAmB1kE,eAKnF,EAAKv5E,SAAS,CACZ8sC,mBACC,WACD,EAAKoxG,gCAAgC3kE,EAAcznJ,QA1apC,EA8anByrN,qBAAuB,SAACR,EAAeM,EAAuBzkT,EAAa0kT,GACzE,IAAM3wC,EAAkB/zQ,EAAYhf,MAAMoF,cACpCm9P,EAAW4gE,EAAc3+G,WAAWp/M,cAC1C,GAAqC,IAAjC,EAAKyK,MAAMojN,mBAA+D,yBAApC,EAAK7+G,MAAMuyE,cAAcv3K,OACjE+zT,EAAcxhE,OACS,aAApBoxB,GAA+C,kBAAbxwB,GACX,aAApBwwB,GAAsD,SAApBA,GAA2C,gBAAbxwB,GAC5C,YAApBwwB,GAA8C,mBAAbxwB,GACb,YAApBwwB,GAA8C,iBAAbxwB,GACb,SAApBwwB,GAAkD,2BAApBA,GAA6D,cAAbxwB,GAC1D,SAApBwwB,GAA2C,cAAbxwB,OAC/B,GAAwC,mBAApC,EAAKnuJ,MAAMuyE,cAAcv3K,OAClC,GAA8B,cAA1Bq0T,EAAuC,CACzC,IAAMc,GAAoB,EAAAvgS,6BAA6B/gC,SAAS+b,EAAYhf,OAC5EmjU,EAAcxhE,OAAU4iE,GAAiC,aAAbhiE,EAE5C,IAAMiiE,EAAmB,EAAK30T,MAAMqjN,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQh7P,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,mBAEjF,aAAbkvC,GAAwC,UAAbA,IAA0BmhE,GAAoBc,IAC5ErB,EAAc9vG,gBAAkB,KAChC8vG,EAAczhE,kBAAoB,GAClCyhE,EAAc7vG,sBAAuB,QAG9BowG,GAA6C,SAA1BD,GAAiD,SAAblhE,IAChE4gE,EAAc9vG,gBAAkB,KAChC8vG,EAAczhE,kBAAoB,GAClCyhE,EAAc7vG,sBAAuB,GAGzC,OAAO6vG,GA5cU,EA+cnBsB,wBAA0B,WACxB,OAAO,EAAK50T,MAAM0hF,iBAAiBzhF,QAAO,SAAA3D,GAAA,OAAWA,EAAQM,UAAU4M,YAAYpW,SAAS,yBAhd3E,EAmdnBqhU,gCAAkC,SAAC3kE,EAAcznJ,GAC/C,EAAK9D,MAAMowH,oBAAoBm7B,GAE/B,IAAMujE,EAAuB,EAAKD,yBAG5ByB,EAAsBlnU,OAAOmc,KAAKupT,GAClCsB,EAAmB,EAAK30T,MAAMqjN,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQh7P,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,mBAG7FsxG,GAFmBH,EAAmB,EAAK30T,MAAM0hF,iBAAmB,EAAKkzO,2BAE7B30T,QAAO,SAAA3D,GACvD,IAAMk8K,EAAiBl8K,EAAQM,UAAUkS,eACnCimT,EAAqBpnU,OAAOmc,KAAK0uK,GAEvC,OAAIm8I,IACEhnU,OAAOmc,KAAKupT,GAAsBv8T,OAAM,SAACiY,GACzC,OAAOypK,EAAezpK,IAAcypK,EAAezpK,GAAW3b,SAASigU,EAAqBtkT,SAO3FgmT,EAAmBrnU,SAAWmnU,EAAoBnnU,SAAWC,OAAOmc,KAAKupT,GAAsBv8T,OAAM,SAACiY,GACvG,OAAOypK,EAAezpK,IAAcypK,EAAezpK,GAAW,KAAOskT,EAAqBtkT,UAQ9Fu7F,EAAe,KACfzpG,MAAMC,QAAQg0T,IAA6BA,EAAyBpnU,SAC9B,mBAApC,EAAK62G,MAAMuyE,cAAcv3K,QAA+Bu1T,EAAyBpnU,OAAS,IAC5F48G,EAAewqN,EAAyB/vT,MAAK,SAAAzI,GAAA,OAAWA,EAAQyP,SAAR,iBAErDu+F,IACHA,EAAewqN,EAAyB,KAGxCxqN,IAAiBwlJ,GACnB,EAAKvrJ,MAAM47C,0BAA0B,CAAC1rI,KAAK61F,IAAe,GAE5D,EAAKgoN,iBAAiB,EAAKtyT,MAAMqjN,eAAgBh7G,IA/fhC,EAkgBnB2sN,oBAAsB,SAAC7lT,EAAa2gP,EAAc8jE,GAChD,GAAI9jE,EACF,EAAK57B,YAAY/kN,EAAa2gP,EAAc8jE,OAD9C,CAKA,IAAMqB,EAAkD,mBAApC,EAAK1wN,MAAMuyE,cAAcv3K,SACb,cAA1Bq0T,GAAmE,SAA1BA,GAEzC5kR,EAAU,CACd/tC,GAAIg0T,EAAc,mDAAsD,uCACxEC,mBAAoB/lT,EAAYmmF,YAChCq/G,WAAY,EAAK30M,MAAMqjN,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQ,EAAK9xP,MAAMojN,mBAAmBzO,YAE7F5hK,EAAU,CAAC,CACfx3B,KAAM05S,EAAc,sBAAwB,sBAC5CvwN,MAAO,OACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAQ,OAG1CyrS,GACFliR,EAAQ/kD,KAAK,CACXutB,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,WACL,EAAK+qI,YAAY/kN,EAAa2gP,EAAc8jE,GAAuB,GACnE,EAAKrvN,MAAMt8E,sBAAsB,CAACuB,SAAQ,OAIhD,EAAK+6E,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,UACA+D,cApiBe,EAwiBnBijI,qBAAuB,WAA2C,IAA1C0wB,EAA0C,uDAA1B,EAAAnuJ,eAAeC,OACrD,UAAgBmuJ,kBAAhB,gBAAqC,EAAKpiG,MAA1C,CAAiDmiG,oBAziBhC,EA4iBnB4c,kBAAoB,WACd,EAAK/+G,MAAM7qG,SACb,EAAK6qG,MAAM++G,kBACT,EAAKtjN,MAAMqjN,eACX,EAAK9+G,MAAMuyE,cAAcv3K,SAG3B,EAAKg3K,SAAS,CACZ4/C,SAAS,EACTlS,eAAe,IAEjBt8H,YAAW,WACT,EAAK4c,MAAM++G,kBACT,EAAKtjN,MAAMqjN,eACX,EAAK9+G,MAAMuyE,cAAcv3K,UAE1B,OA1jBLnO,OAAOq+S,eAAiBr+S,OAAOq+S,gBAAkB,EACjDr+S,OAAO+1M,4BAA6B,EACpC,EAAKnnM,MAAQ,CACXqjN,eAAgB,GAChBkwG,aAAc,GACdnwG,kBAAmB,EACnBowG,kBAAkB,EAClBr9F,SAAS,EACTlS,eAAe,EACfviI,iBAAkB,GAClB6wO,QAAQ,GAZO,E,oFAgBC,WACdlvG,EAAiB,GAEf3hI,EAAmBzoF,KAAKw5T,sBACxB0C,EAAiBl8T,KAAK65T,uBAE5BpxO,EAAiBrqF,SAAQ,SAACiF,GACxB,EAAKioG,MAAMviB,aAAa3qF,SAAQ,SAACssB,GAE/B,IAAM1jB,EAAS,EAAKskG,MAAMt1F,aAAalK,MAAK,SAAAiK,GAAA,OAAeA,EAAYtf,KAAK0mB,SAAWuN,EAAYgxL,cACnG,GAAI10M,EAAQ,CACV,IAAM6oB,EAAW7oB,EAAOgB,GAEpBm0T,EAAgB/xG,EAAet+M,MAAK,SAAAy2G,GAAA,OAAQA,EAAKm5F,aAAehxL,EAAYgxL,cAC3EygH,IACHA,EAAgB,CACdzgH,WAAYhxL,EAAYgxL,WACxBvlM,OAAQuU,EAAYvU,QAAU,GAC9BnO,GAAI6nB,EACJ06L,gBAAiB7/L,EAAY6/L,gBAC7BquC,kBAAmBluO,EAAYkuO,kBAC/BC,OAAQ,EAAKihE,mBAAmB9yT,EAAOvQ,MACvC2lU,WAAW,GAEbhyG,EAAer1N,KAAKonU,IAGtB,IAAME,EAAUh5T,EAAQM,UAAUkS,eAAega,GAC7CwsS,IACGF,EAAcC,YACjBD,EAAcC,WAAY,GAE5BC,EAAQj+T,SAAQ,SAAA8X,GAEd,IADyBimT,EAAchmT,OAAOrK,MAAK,SAAA0uT,GAAA,OAAsBA,EAAkBtkT,cAAiBA,KACrF,CACrB,IAAIomT,GAAY,EAChB,GAAiC,cAA7BH,EAAczgH,YAA2D,aAA7BygH,EAAczgH,WAA2B,CACvF,IAAMv7L,EAASnZ,EAAOmP,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAOkO,KAChDiK,IACmB,eAAjBA,EAAOjpB,OAA4C,SAAjBipB,EAAOjpB,OAAoB,EAAKo0G,MAAMnzF,eAAey6L,YACzF0pH,GAAY,GAIbA,GACHH,EAAchmT,OAAOphB,KAAK,CACxB6kU,oBAAoB,EACpB1jT,4BAYhB,IAAMo0M,GAFNF,EAAiBA,EAAepjN,QAAO,SAAAm1T,GAAA,OAAiBA,EAAcC,cAE7Bv+T,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,mBAC5D,GAAI2xG,GAAkBl8T,KAAKsrG,MAAMuyE,cAAc13J,cAAe,CAE5D,IAAMizO,EAAuBp5P,KAAKsrG,MAAMuyE,cAAc13J,cAAcxiB,UAAUkS,eAC9Eu0M,EAAiBA,EAAetiN,KAAI,SAAAy6G,GAClC,IAAMxsG,EAAc,EAAKu1F,MAAMt1F,aAAalK,MAAK,SAAAiK,GAC/C,OAAOA,EAAY/N,KAAOu6G,EAAKv6G,MAE7By/E,EAAmB,GACvB,GAAI2xK,EAAqB72I,EAAKv6G,IAAK,CACjC,IAAMqxP,EAAwBD,EAAqB72I,EAAKv6G,IAAI,GAC5Dy/E,EAAmB1xE,GAAeA,EAAYI,OAAOrK,MAAK,SAAA27E,GACxD,OAAOA,EAAiBz/E,KAAOqxP,KAQnC,OALI5xK,IACF86B,EAAKq2I,kBAAoBnxK,EAAiB4U,YAC1CkmB,EAAKgoG,gBAAkB9iI,EAAiBz/E,IAE1Cu6G,EAAKioG,qBAAuB,EAAKivG,iCAAiChyO,EAAkBA,EAAiBz/E,GAAIu6G,EAAKv6G,GAAIygF,GAC3G85B,KAIXviH,KAAKs9K,SAAS,CACZ70F,mBACA6xO,aAAclwG,EAAetiN,KAAI,SAAAa,GAAA,OAAKjU,OAAO+2B,OAAO,GAAI9iB,MACxDyhN,eAAgBA,EAAetiN,KAAI,SAAAc,GAAA,OAAKlU,OAAO+2B,OAAO,GAAI7iB,MAE1DuhN,kBAAmBnqN,KAAKsrG,MAAMqwH,iBAAmBvR,EAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQpkQ,OAAS,EAAIuL,KAAKsrG,MAAMqwH,gBAAkB,EACvI3Q,cAAeV,IACd,WACG,EAAKuvG,wBACP,EAAKR,iBAAiBjvG,GAExB,EAAK6vG,gBACLvrO,YAAW,WACT,EAAK4uF,SAAS,CACZ4/C,SAAS,MAEV,OAEL,aAAE9jO,UAAUupG,GAAG,UAAY+yB,kBAAmB11H,KAAKo1P,mB,gDAQ3Bx2E,GACpBA,EAAUf,eAAiB79K,KAAKsrG,MAAMuyE,eAAkBe,EAAUf,cAAcv3K,SAAWtG,KAAKsrG,MAAMuyE,cAAcv3K,QACtHtG,KAAK4mO,sB,+BAicA,WAGDxc,EAAiBpqN,KAAK+G,MAAMqjN,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAChEvuC,EAAoBF,EAAevsN,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,mBACtDgyG,EAA+D,yBAApCv8T,KAAKsrG,MAAMuyE,cAAcv3K,OACpD41T,EAAiBl8T,KAAK65T,uBAE5B,OAAO75T,KAAKsrG,MAAM7qG,SAChBT,KAAK+G,MAAMwzT,iBACT,+BAAK3vO,UAAU,eACb,8BAAIA,UAAU,aACXw/H,EAAetiN,KAAI,SAACixK,EAAY4iD,GAC/B,IAAMllO,EAAOsiL,EAAW2iC,WAAW/8M,QAAQ,KAAK,IAAIrC,cACpD,OACE,8BAAIsuF,UAAW,oCAAsCn0F,EACjDqmL,QAAS,kBAAM,EAAKotC,qBAAqByR,IACzCnkO,IAAK,kBAAkBmkO,GACxB5iD,EAAW2iC,iBAOtB,+BAAK9wH,UAAU,eACb,+BAAKA,UAAW,+BACb2xO,IAA6Bv8T,KAAKsrG,MAAM0tH,+BAAiC,yBAA2B,KACrG,+BAAKpuI,UAAU,kBACb,mCAA8Bw0I,UAAW,CAAC,EAAE,KAC5C,+BAAKx0I,UAAU,2BACb,kCAAQA,UAAU,wBACVkyF,QAAS98K,KAAKqqN,mBACpB,4CAAkBriN,GAAG,mCAI3B,+BAAK4iF,UAAU,sBACZw/H,EAAe31N,SAAWuL,KAAK+G,MAAMuyT,OACpC,mCAAmBh1L,YAAa8lF,EAAepqN,KAAK+G,MAAMojN,mBACvC8Q,YAAaj7N,KAAKi7N,YAClB8gG,oBAAqB/7T,KAAK+7T,oBAC1Bh/I,qBAAsB/8K,KAAK+8K,qBAC3BqtC,eAAgBA,EAChBD,kBAAmBnqN,KAAK+G,MAAMojN,kBAC9B/0M,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCusE,SAAU3hF,KAAK+G,MAAM0hF,iBACrBhoF,SAAUT,KAAKsrG,MAAM7qG,SACrBo9K,cAAe79K,KAAKsrG,MAAMuyE,cAC1Bm7C,+BAAgCh5N,KAAKsrG,MAAM0tH,+BAC3CtO,4BAA6B1qN,KAAKsrG,MAAMo/G,4BACxCL,kBAAmBrqN,KAAKqqN,kBACxBH,qBAAsBlqN,KAAKkqN,qBAC3Bl0M,aAAchW,KAAKsrG,MAAMt1F,aACzBiuE,WAAYjkF,KAAKsrG,MAAMrnB,aAExC,+BAAK2G,UAAU,oFAGpB2xO,GAA6Bv8T,KAAKsrG,MAAM0tH,+BACzC,mCACE5O,eAAgBA,EAChBD,kBAAmBnqN,KAAK+G,MAAMojN,kBAC9BD,qBAAsBlqN,KAAKkqN,qBAC3BG,kBAAmBrqN,KAAKqqN,kBACxB5pN,SAAUT,KAAKsrG,MAAM7qG,SACrB2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCq1M,mBAAmB,EACnBH,kBAAmBA,GAAqB4xG,EACxClxG,cAAehrN,KAAK+G,MAAMikN,cAC1BI,qBAAsBprN,KAAKsrG,MAAM8/G,qBACjCV,4BAA6B1qN,KAAKsrG,MAAMo/G,8BAExC,MAIR,+BAAK9/H,UAAU,mCACb,mCAAW6yF,WAAYz9K,KAAKsrG,MAAMmyE,WACvBI,cAAe79K,KAAKsrG,MAAMuyE,cAC1Bs9C,yBAA0Bn7N,KAAKsrG,MAAM6vH,yBACrC9H,WAAYrzN,KAAKsrG,MAAM+nH,WACvB+H,mBAAoBp7N,KAAKsrG,MAAM8vH,mBAC/BroG,WAAW,EACX03F,mBAAmB,EACnBL,eAAgBA,EAChBD,kBAAmBnqN,KAAK+G,MAAMojN,kBAC9BD,qBAAsBlqN,KAAKkqN,qBAC3BG,kBAAmBrqN,KAAKqqN,kBACxBe,qBAAsBprN,KAAKsrG,MAAM8/G,qBACjC0qG,0BAA2ByG,IAA6Bv8T,KAAKsrG,MAAM0tH,+BACnE2B,YAAY,EACZjQ,4BAA6B1qN,KAAKsrG,MAAMo/G,8BAElDN,EAAe31N,SAAWuL,KAAK+G,MAAMuyT,OACpC,mCAAmBh1L,YAAa8lF,EAAepqN,KAAK+G,MAAMojN,mBACvC8Q,YAAaj7N,KAAKi7N,YAClB8gG,oBAAqB/7T,KAAK+7T,oBAC1Bh/I,qBAAsB/8K,KAAK+8K,qBAC3BqtC,eAAgBA,EAChBD,kBAAmBnqN,KAAK+G,MAAMojN,kBAC9B/0M,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCusE,SAAU3hF,KAAK+G,MAAM0hF,iBACrBhoF,SAAUT,KAAKsrG,MAAM7qG,SACrBo9K,cAAe79K,KAAKsrG,MAAMuyE,cAC1Bm7C,+BAAgCh5N,KAAKsrG,MAAM0tH,+BAC3CtO,4BAA6B1qN,KAAKsrG,MAAMo/G,4BACxCL,kBAAmBrqN,KAAKqqN,kBACxBH,qBAAsBlqN,KAAKkqN,qBAC3BjmI,WAAYjkF,KAAKsrG,MAAMrnB,WACvBjuE,aAAchW,KAAKsrG,MAAMt1F,eAC1C,+BAAK40E,UAAU,iFAClB2xO,IAA6Bv8T,KAAKsrG,MAAM0tH,+BAAiC,KACxE,+BAAKpuI,UAAW,eAAiB5qF,KAAK+G,MAAMm2N,QAAU,wBAA0B,KAC9E,+BAAKtyI,UAAU,cACjB,gCAAMA,UAAU,qBACbw/H,EAAepqN,KAAK+G,MAAMojN,mBAA1B,YACenqN,KAAKsrG,MAAM8/G,qBAAqBhB,EAAepqN,KAAK+G,MAAMojN,mBAAmBzO,WAAY17M,KAAKsrG,MAAM7wF,MADnH,cACyK,yBAApCza,KAAKsrG,MAAMuyE,cAAcv3K,OAAoC,OAAS,UAD3M,IAEG,MAEF,kCAAQskF,UAAU,8BACVkyF,QAAS98K,KAAKqqN,mBADtB,gBAGF,mCACED,eAAgBA,EAChBD,kBAAmBnqN,KAAK+G,MAAMojN,kBAC9BD,qBAAsBlqN,KAAKkqN,qBAC3BG,kBAAmBrqN,KAAKqqN,kBACxB5pN,SAAUT,KAAKsrG,MAAM7qG,SACrB2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCq1M,mBAAmB,EACnBW,qBAAsBprN,KAAKsrG,MAAM8/G,qBACjCvtC,cAAe79K,KAAKsrG,MAAMuyE,cAC1BysC,kBAAmBA,GAAqB4xG,EACxCxxG,4BAA6B1qN,KAAKsrG,MAAMo/G,oC,kBAhuB7CxoE,UAAY,CACjBvgE,SAAU,UAAUtrE,MAAM4iG,WAC1BoxG,kBAAmB,UAAUtrC,KAAK9lE,WAClCiuC,0BAA2B,UAAU63B,KAAK9lE,WAC1Cx4G,SAAU,UAAU2hJ,KAAKnpC,WACzBlwB,aAAc,UAAU1yE,MAAM4iG,WAC9BwiH,gBAAiB,UAAU18C,KAAK9lE,WAChCjqF,sBAAuB,UAAU+vJ,KAAK9lE,WACtCyiH,oBAAqB,UAAU38C,KAC/B3pK,uBAAwB,UAAUgtI,KAClCp4H,eAAgB,UAAUo4H,KAC1Bp5H,gBAAiB,UAAU+1J,KAC3B96F,WAAY,UAAUzhD,OAEtBi7I,WAAY,UAAU9lL,OACtBkmL,cAAe,UAAUlmL,OACzBwjO,yBAA0B,UAAUp8C,KACpCs0C,WAAY,UAAUt0C,KACtBq8C,mBAAoB,UAAUr8C,KAC9BqsC,qBAAsB,UAAUrsC,KAChCi6C,+BAAgC,UAAU52E,KAC1CsoE,4BAA6B,UAAU3rC,KACvCg+B,wBAAyB,UAAUh+B,M,cA8tBxB,IAAAh3B,aACb,IAAAj8C,UAZsB,SAACxzG,GAAD,MAAY,CAClCsnO,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtBqkB,eAAgB1xB,EAAMwc,UAAUkV,eAChCywH,mBAAoBniJ,EAAMu1I,gBAAgB4M,mBAC1CxtI,iBAAkB3U,EAAM4U,YAAYD,qBAGX,iBAAO,KAGhC,CAA6CmsT,K,yICtwB/C,O,WACA,MACA,O,IAEA,QACA,QACA,SACA,QACA,SACA,QACA,Q,IACA,OAEA,QACA,S,uDAEMoD,G,6OAaJz1T,MAAQ,CACN01T,mBAAoB,I,EAUtB31E,gBAAkB,SAAC3wP,GACZA,EAAEugB,OAAOuqI,QAAQ,yBAChB9qJ,EAAEugB,OAAOuqI,QAAQ,iCACjB9qJ,EAAEugB,OAAOuqI,QAAQ,wBAA2B9qJ,EAAEugB,OAAOuqI,QAAQ,YACjE,EAAK31C,MAAMktJ,oB,EAUfkkE,8BAAgC,WAC9B,IAAMxhT,GAAS,IAAAC,oBACT6sE,EAAS9sE,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IAE7Bk7R,EADShoR,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IACLk7R,iBACxBp0I,EAAiB5zI,EAAOsD,MAAM,EAAAixH,eAAeznI,IAG7CqhF,EADiBrB,EAAOvrE,WACI3Q,MAAK,SAACwrN,GACtC,MAAgC,gBAAzBA,EAAS97M,KAAKlV,UAEjBq2T,EAAoB30O,EAAOg/F,aAC7By1I,EAAqB,GAEzB,GAAI3tK,EAAe1lE,uBAAwB,CACzC,IACMf,EADyBymE,EAAeryI,WACG3Q,MAAK,SAACwrN,GACrD,MAAgC,uBAAzBA,EAAS97M,KAAKlV,UAEvBwoJ,EAAezmE,kBAAkB1G,SAASvjF,SAAQ,SAACoqF,GACjDi0O,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAI48D,EAAmB,CAC3D2vI,cAAe,QACfO,YAAa/vI,EAAyB3sE,SACtC+gT,cAAe,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAI8mJ,EAAezmE,kBAAkB3sE,cACnFmhT,YAAar0O,EAAyB3sE,SACtCy8M,cAAc,EACdh2M,KAAMkmE,EAAyB3sE,SAAS1hB,SAAS,QAAU,YAAc,8BAGpEkvF,GAAcA,EAAW7tE,KAAKmmE,SAASltF,QAChD40F,EAAW7tE,KAAKmmE,SAASvjF,SAAQ,SAAC6oJ,GAChC,GAAIA,EAAkBprI,SAAS1hB,SAASwiU,KAEb,SAAnBz5B,GAA6C,IAAhBhoR,EAAO9P,OAAc67I,EAAkBprI,SAAS1hB,SAAS,SAAU,CACpG,IAAM2iU,EAAS71K,EAAkBprI,SAAS1hB,SAAS,QACnDsiU,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAI49D,EAAY,CACpD2uI,cAAe,QACfO,YAAatxE,EAAkBprI,SAC/B+gT,cAAe,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAI80T,EAC5C,sCACA,+CAEND,YAAa51K,EAAkBprI,SAC/By8M,cAAc,EACdh2M,KAAMw6S,EAAS,YAAc,0BAOvC,IAAMC,EAAmBN,EAAmB9/S,WAAU,SAAAs0D,GACpD,OAAO69E,EAAe1lE,uBAClBnY,EAAKsnJ,cAAgBzpE,EAAezmE,kBAAkBliE,cAActK,SACpEo1D,EAAKsnJ,cAAgBlvI,EAAW7tE,KAAK2K,cAActK,YAGrDkhT,EAAmB,IACrBN,GAAqB,IAAAzuO,SAAQyuO,EAAoBM,EAAkB,IAGrE,EAAKz/I,SAAS,CACZm/I,wB,EAIJO,gBAAkB,WAChB,IAAM9hT,GAAS,IAAAC,oBACXshT,EAAqB,GAENvhT,EAAOsD,MAAM,EAAAwjP,KAAKh6P,IACRyU,WAAWzV,QAAO,SAACswN,GAC9C,MAAiC,WAAzBA,EAAS97M,KAAKlV,QAAkD,gBAAzBgxN,EAAS97M,KAAKlV,UAErDlI,SAAQ,SAAC6+T,GACjBR,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAIwxS,EAAU,CAClDjlG,cAAe,QACfO,YAAa0kG,EAASzhT,KAAKK,SAC3BghT,YAAaI,EAASzhT,KAAKK,SAC3ByG,KAAM26S,EAAS36S,KACfs6S,cAAe,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAIi1T,EAASzhT,KAAKE,oBAIpE,IAAMwrG,EAAShsG,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAC7Bs8I,EAAmBp9B,EAAOzqG,WAAW3Q,MAAK,SAACwrN,GAC/C,MAAgC,sBAAzBA,EAAS97M,KAAKlV,UAEnBg+I,GACFm4K,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAI64H,EAAkB,CAC1D0zE,cAAe,SACfO,YAAaj0E,EAAiB9oI,KAAKK,SACnCghT,YAAav4K,EAAiB9oI,KAAKK,SACnCyG,KAAMgiI,EAAiBhiI,KACvBs6S,cAAe,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAIs8I,EAAiB9oI,KAAKE,iBAI5E,IAAIwhT,EAAe,EAAK5xN,MAAMqhH,aAAavlI,OAErC+1O,EAAcV,EAAmB3wT,MAAK,SAAAmlE,GAC1C,OAAOA,EAAKz1D,KAAK2K,eAAiB8qD,EAAKz1D,KAAK2K,cAAc0gE,OAAS5V,EAAKz1D,KAAK2K,cAAc0gE,MAAMO,SAAW81O,KAE9G,GAAIC,GAAeA,EAAY3hT,MAAoC,sBAA5B2hT,EAAY3hT,KAAKlV,OAAgC,CACtF,IAAM82T,EAAel2M,EAAOzqG,WAAW3Q,MAAK,SAACwrN,GAC3C,MAAgC,kBAAzBA,EAAS97M,KAAKlV,UAEnB82T,GACFX,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAI2xS,EAAc,CACtDplG,cAAe,SACfO,YAAa6kG,EAAa5hT,KAAKK,SAC/BghT,YAAaO,EAAa5hT,KAAKK,SAC/ByG,KAAM86S,EAAa96S,KACnBs6S,cAAe,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAIo1T,EAAa5hT,KAAKE,iBAK1E,IAAMqhT,EAAmBN,EAAmB9/S,WAAU,SAAAs0D,GACpD,OAAOA,EAAKz1D,KAAK2K,eAAiB8qD,EAAKz1D,KAAK2K,cAAc0gE,OAAS5V,EAAKz1D,KAAK2K,cAAc0gE,MAAMO,SAAW81O,KAG1GH,EAAmB,IACrBN,GAAqB,IAAAzuO,SAAQyuO,EAAoBM,EAAkB,IAGrE,EAAKz/I,SAAS,CACZm/I,wB,EAwDJY,iBAAmB,SAACC,GAClB,IAAMpiT,GAAS,IAAAC,oBACXoiT,EAAgBD,EAAc9hT,KAAKiB,WAEvC,IAAoC,WAA/B,EAAK6uF,MAAM2sH,iBAA+D,qBAA/B,EAAK3sH,MAAM2sH,kBAAkE,uBAAvBqlG,EAAch7S,KAA+B,CACjJi7S,EAAgBA,EAAcv2T,QAAO,SAAAw2T,GACnC,OAAO,EAAKlyN,MAAM2uJ,oBACdujE,EAAWhiT,KAAK8rI,gBAA6C,cAA3Bk2K,EAAWhiT,KAAKlV,QACjDk3T,EAAWhiT,KAAK8rI,kBAEvB,IAAM+lC,EAAoBnyK,EAAOsD,MAAM,EAAAgpP,kBAAkBx/P,IACrDqlL,GAAqBA,EAAkBl9C,kBAAoB,EAAK7kC,MAAM2uJ,sBACxEsjE,EAAgBA,EAAcv2T,QAAO,SAAAw2T,GAAA,MAAyC,gCAA3BA,EAAWhiT,KAAKlV,WACrDvR,KAAK,CACjButB,KAAM,cACN9G,KAAM,GACNiiT,QAAQ,EACRb,cAAe,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAI,sCAGtDu1T,EAAgBA,EAAcv2T,QAAO,SAAAw2T,GAAA,MAAyC,gBAA3BA,EAAWhiT,KAAKlV,UAC/D4U,EAAOsD,MAAM,EAAAixH,eAAeznI,MAAQ,EAAKsjG,MAAM2uJ,qBACjDsjE,EAAcxoU,KAAK,CACjButB,KAAM,mBACN9G,KAAM,GACNiiT,QAAQ,EACRb,cAAe,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAI,sDAiBxD,MAZmC,WAA/B,EAAKsjG,MAAM2sH,kBACbslG,EAAgBA,EAAcv2T,QAAO,SAAAw2T,GAAA,MAAyC,cAA3BA,EAAWhiT,KAAKlV,WAElC,qBAA/B,EAAKglG,MAAM2sH,kBACbslG,EAAgB,EAAKG,qCAAqCH,EAAeD,EAAc9hT,KAAKs0H,YAE3D,WAA/B,EAAKxkC,MAAM2sH,kBACbslG,EAAgBA,EAAcv2T,QAAO,SAAC22T,GACpC,MAAoC,kBAA7BA,EAAaniT,KAAKlV,QAA2D,sBAA7Bq3T,EAAaniT,KAAKlV,WAItEi3T,G,EAGTG,qCAAuC,SAACH,EAAeK,GACrD,OAAOL,EAAcv2T,QAAO,SAAC22T,GAC3B,IAAIE,GAAe,EAYnB,OAXAnpU,OAAOmc,KAAP,sBAAgCzS,SAAQ,SAAC5G,GACnCmmU,EAAaniT,KAAKlV,SAAW,EAAA2yB,mBAAmBzhC,IAAQmmU,EAAaniT,KAAKlV,SAAWs3T,GACpFD,EAAaniT,KAAKlV,SAAW,EAAA2yB,mBAAmBE,iBAChDwkS,EAAaniT,KAAKlV,SAAW,EAAA2yB,mBAAmBC,gBAEnD2kS,GAAe,MAGO,uBAAtBF,EAAar7S,OACfu7S,GAAe,GAEVA,M,EAIXC,kBAAoB,SAACxmG,GACnB,IAAMp8M,GAAS,IAAAC,oBAEf,GAAsB,gBAAlBm8M,EAASh1M,KAAwB,CACnC,IAAMg7S,EAAgB,EAAKhyN,MAAMhT,sBAAsBxsF,MAAK,SAAA6T,GAC1D,MAAwB,uBAAjBA,EAAQ2C,QASjB,OAPA,EAAKg7J,SAAS,CACZm/I,mBAAoB,EAAKY,iBAAiBC,GACvCx1T,KAAI,SAAAuvG,GAEH,OADAA,EAAO2gH,cAAgB,qBAChB3gH,QAGN,EAGT,IAEMrvB,EAFiB9sE,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IAAIyU,WAEjB3Q,MAAK,SAACwrN,GAClC,MAAgC,gBAAzBA,EAAS97M,KAAKlV,UAEvB0hF,EAAOuwI,YAAc,SACrBvwI,EAAOgwI,cAAgB,SACvBhwI,EAAO40O,cAAgB,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAI,+BAE1D,IACM+1T,EADiB7iT,EAAOsD,MAAM,EAAAixH,eAAeznI,IACLyU,WAExCuhT,EAAqBD,EAAuB/2T,QAAO,SAAAswN,GAAA,OAAYA,EAAS97M,KAAK89N,eACnF0kF,EAAmB5/T,SAAQ,SAAAk5N,GAAA,OAAYA,EAASU,cAAgB,sBAEhE,IAAM3vI,EAAoB01O,EAAuBjyT,MAAK,SAACwrN,GACrD,MAAgC,uBAAzBA,EAAS97M,KAAKlV,UAEvB+hF,EAAkBkwI,YAAc,mBAChClwI,EAAkB2vI,cAAgB,mBAClC3vI,EAAkBu0O,cAAgB,EAAKtxN,MAAM7wF,KAAKC,cAAc,CAAC1S,GAAI,yCAErE,EAAKs1K,SAAS,CACZm/I,oBACEz0O,EACAK,GAFF,qBAGK21O,O,EAKTC,uBAAyB,SAAC3mG,GACxB,IAAMp8M,GAAS,IAAAC,oBACT+iT,EAAkC,eAAlB5mG,EAASh1M,KAAwB,aAAeg1M,EAASh1M,KACzEg7S,EAAgBhmG,EAASU,eAAiB,EAAK1sH,MAAM2sH,gBAErD/4M,EAAahE,EAAOwmE,uBAK1B,GAAIw8O,GAAiBZ,EAAe,CAElC,IAAIa,EAAgB,GAEpB,GAAsB,WAAlBb,EAA4B,CAC9B,IAAMt1O,EAAS9sE,EAAOsD,MAAMu7E,OAC5B,GAAI/R,EAAOk8D,iBAAmB,EAAAhvB,YAAYr7F,SACxC,OAAQqkS,GACN,IAAK,UACHC,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAe15D,UAAUs6D,GAC/D,MACF,QACEC,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAe15D,UAAUjC,KAAK,QAIxE,OAAQu8D,GACN,IAAK,eACHC,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOzjE,WAAW0rO,KACxD,MACF,IAAK,cAEDm8D,EADEn2O,EAAOiS,YAAcjS,EAAOiS,WAAWtY,SAASltF,OAClC,UAAE+pC,QAAQtf,GAAYo+S,GAAehnS,WAAW4sO,WAEhD,UAAE1kO,QAAQtf,GAAYo+S,GAAehnS,WAAW0D,MAElE,MACF,IAAK,cACHmkS,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAehnS,WAAW4sO,WAChE,MACF,IAAK,SACHi7D,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAehnS,WAAW6sO,iBAChE,MACF,IAAK,aACL,IAAK,cACHg7D,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAehnS,WAAWksO,eAChE,MACF,IAAK,sBACH27D,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAehnS,WAAW4rO,WAChE,MACF,IAAK,kBACHi8D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCoX,WAAWqtO,cAC3D,MACF,IAAK,gBACHw6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCoX,WAAWmtO,YAC3D,MACF,IAAK,QACH06D,EAAgBn2O,EAAO++D,oBACnB,UAAEvoH,QAAQtf,GAAYo+S,GAAehnS,WAAW4nS,GAChD,UAAE1/R,QAAQtf,GAAYo+S,GAAehnS,WAAWksO,eACpD,MACF,QACE27D,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAehnS,WAAW4nS,SAIjE,GAAsB,qBAAlBZ,EACT,OAAQY,GACN,IAAK,cACHC,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOzjE,WAAW4sO,WACxD,MACF,IAAK,eACHi7D,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOzjE,WAAW0rO,KACxD,MACF,IAAK,sBACHm8D,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOzjE,WAAW4rO,WACxD,MACF,IAAK,UACHi8D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCoX,WAAWgsO,QAC3D,MACF,IAAK,SACH67D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCoX,WAAW6sO,iBAC3D,MACF,IAAK,qBACHg7D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCoX,WAAW4sO,WAC3D,MACF,IAAK,aACHi7D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASK,UACzD,MACF,IAAK,YACHg6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASE,MACzD,MACF,IAAK,cACHm6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASI,UACzD,MACF,IAAK,kBACHi6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASG,eACzD,MACF,IAAK,kBACHk6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCoX,WAAWqtO,cAC3D,MACF,IAAK,gBACHw6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCoX,WAAWmtO,YAC3D,MACF,QACE06D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASo6D,EAAcv/T,QAAQ,KAAM,UAGpF,GAAsB,WAAlB2+T,EACT,GAAIpiT,EAAOsD,MAAMqsH,OAAOqZ,iBAAmB,EAAAtqH,YAAYC,SACrD,OAAQqkS,GACN,IAAK,SACHC,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAOhxG,SAASo4I,QACtD,MACF,IAAK,cACHksJ,EAAgB,UAAE3/R,QAAQtf,GAAYoiP,mBACtC,MACF,QACE68D,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAO/wG,OAAOokS,QAIxD,OAAQA,GACN,IAAK,cACHC,EAAgB,UAAE3/R,QAAQtf,GAAYoiP,mBACtC,MACF,IAAK,aACH68D,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAO/wG,OAAO4qO,iBACpD,MACF,QACEy5D,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAO/wG,OAAOokS,QAIrD,GAAsB,YAAlBZ,EAGLa,EAFAjjT,EAAOsD,MAAM4oP,QAAQljH,iBAAmB,EAAA7tH,YAAYE,aAChC,YAAlB2nS,EACc,UAAE1/R,QAAQtf,GAAYklP,QAAQ7tO,aAAa+tO,KAE3C,UAAE9lO,QAAQtf,GAAYklP,QAAQ7tO,aAAa2nS,GAGvC,QAAlBA,EACc,UAAE1/R,QAAQtf,GAAYklP,QAAQ9tO,WAAWkuO,IAEzC,UAAEhmO,QAAQtf,GAAYklP,QAAQ9tO,WAAW4nS,QAGxD,GAAsB,UAAlBZ,EACT,OAAQY,GACN,IAAK,YACHC,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOzjE,WAAWitO,SACxD,MACF,IAAK,mBACH,IACMkU,EADav8P,EAAOsD,MAAM8+S,GACKl2K,uBAErC+2K,EAAqC,UADZ,IAAApyO,yBAAwB0rL,EAAkBpwH,oBAE/D,UAAE7oH,QAAQtf,GAAY66E,OAAOzjE,WAAWwsO,0BACxC,UAAEtkO,QAAQtf,GAAY66E,OAAOzjE,WAAW8sO,kBAC5C,MAEF,QACE+6D,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAO/wG,OAAOokS,GAK1D,EAAK5yN,MAAMgvH,yBAAyB6jG,K,2GAnetCn+T,KAAKo+T,wBACDp+T,KAAKsrG,MAAMktJ,kBACbp/P,SAASytD,iBAAiB,QAAS7mD,KAAK8mP,mB,6CAatC9mP,KAAKsrG,MAAMktJ,kBACbp/P,SAAS8pG,oBAAoB,QAASljG,KAAK8mP,mB,8CAuIvB,WAEhB5rO,GAAS,IAAAC,oBAEf,GAAmC,0BAA/Bnb,KAAKsrG,MAAM2sH,gBAGR,GAAmC,kBAA/Bj4N,KAAKsrG,MAAM2sH,gBAAf,CAKP,IAAMqlG,EAAgBt9T,KAAKsrG,MAAMhT,sBAAsBxsF,MAAK,SAAA6T,GAC1D,OAAOA,EAAQ2C,OAAS,EAAKgpF,MAAM2sH,mBAGjCl5M,EAAeu+S,EAAc9hT,KAAKuD,aACH,qBAA/B/e,KAAKsrG,MAAM2sH,kBACbl5M,0BAAmBu+S,EAAc9hT,KAAKuD,eAAtC,aAAuDu+S,EAAc9hT,KAAK6iT,2BAG5E,IAAMlB,EAAcn9T,KAAKsrG,MAAMqhH,aAAavlI,SAAW,UAAE5oD,QAAQtjB,EAAOwmE,wBAAwBqY,OAAO6pK,UAAUjC,KAAK,GAClH5iP,EAAa,GACbA,EAAajT,MAAK,SAACmlE,GACnB,IAAIisP,EAAe,EAAK5xN,MAAMqhH,aAAavlI,OAS3C,OARI,EAAKkkB,MAAMqhH,aAAavlI,SAAW,UAAE5oD,QAAQtjB,EAAOwmE,wBAAwBqY,OAAOzjE,WAAW2rO,QAChGi7D,EAAe,UAAE1+R,QAAQtjB,EAAOwmE,wBAAwBqY,OAAOzjE,WAAW0rO,MAG1E,EAAK12J,MAAMqhH,aAAavlI,SAAW,UAAE5oD,QAAQtjB,EAAOwmE,wBAAwBqY,OAAOzjE,WAAW6rO,cAE9F+6D,EAAe,UAAE1+R,QAAQtjB,EAAOwmE,wBAAwBqY,OAAOzjE,WAAW4rO,YAErEjxL,EAAK9qD,eAAiB8qD,EAAK9qD,cAAc0gE,MAAMO,SAAW81O,KAGjEK,EAAgBv9T,KAAKq9T,iBAAiBC,GAMpCP,EAAmBQ,EAAc5gT,WAAU,SAAAs0D,GAAA,OAAQA,EAAK3uD,OAAS66S,EAAYthT,YAC/EkhT,EAAmB,IACrBQ,GAAgB,IAAAvvO,SAAQuvO,EAAeR,EAAkB,IAG3D/8T,KAAKs9K,SAAS,CACZm/I,mBAAoBc,SAxCpBv9T,KAAKg9T,uBAHLh9T,KAAK08T,kC,+BA4UA,WAEH4B,EAAoBt+T,KAAKsrG,MAAM0uJ,qBAAuB,GAK1D,OAJ6C,IAAzCh6P,KAAK+G,MAAM01T,mBAAmBhoU,SAChC6pU,EAAoB5pU,OAAO+2B,OAAO,GAAI6yS,EAAmB,CAACp0L,SAAS,WAInE,+BAAKt/C,UAAU,cAAcv2E,MAAOiqT,GAClC,+BAAK1zO,UAAU,uBACZ5qF,KAAK+G,MAAM01T,mBAAmB30T,KAAI,SAACwvN,GAClC,OAAOA,EACL,kCAAQ9/N,IAAK8/N,EAASiB,aAAejB,EAASh1M,KACtCw6J,QAASw6C,EAASmmG,OACd,kBAAM,EAAKK,kBAAkBxmG,IAC7B,WACF,UAAUn2L,eAAe,gBAAkBm2L,EAASh1M,MACpD,EAAKgpF,MAAM+rH,uBAAuBC,IAEpCx4C,cAAa,EAAKxzE,MAAM2sH,gBACxBsmG,YAAa,EAAKjzN,MAAMgvH,yBAA2B,kBAAM,EAAK2jG,uBAAuB3mG,IAAY,aACjG1sI,UAAW,6DACT0sI,EAASulG,aAAevlG,EAASh1M,MAAMhmB,cAAcqC,QAAQ,KAAK,MACvD,qBAAlB24N,EAASh1M,KACR,+BAAKsoE,UAAU,sBACb,+BAAKA,UAAU,gCACf,+BAAKA,UAAU,yBAEf,KACJ,gCAAMA,UAAU,oCACb0sI,EAASslG,eAAiBtlG,EAASiB,cACnCjB,EAAS97M,MAAQ87M,EAAS97M,KAAKE,YAAc,4CAAkB1T,GAAIsvN,EAAS97M,KAAKE,cAAiB47M,EAASh1M,QAG9G,c,kBA1hBP4/H,UAAY,CACjB5pD,sBAAuB,UAAUjiF,MACjC4hN,gBAAiB,UAAUz1L,OAC3BmqL,aAAc,UAAUh1N,OACxB0/N,uBAAwB,UAAUt4C,KAClCi7E,oBAAqB,UAAUriQ,OAC/BsiQ,oBAAqB,UAAU73G,KAC/Bk4E,yBAA0B,UAAUv7C,KACpCy5E,iBAAkB,UAAUz5E,M,cA0hBjB,IAAAh3B,YAAWy0K,I,gJCpjB1B,O,WACA,MACA,O,IACA,OACA,O,IAEA,O,uDAEagC,E,EAAAA,U,gBAMX,WAAYlzN,IAAO,gGACXA,IADW,SAWnBm2L,gBAAkB,aAXC,EAenBg9B,WAAa,WACX,EAAKphJ,wBAhBY,EAmBnBA,qBAAuB,WACrB,UAAUl8I,eAAe,wBAAyB,EAAKp6B,MAAM62K,QAC7D,EAAKN,SAAS,CACZM,QAAS,EAAK72K,MAAM62K,SACnB,WACD,EAAK72K,MAAM62K,QACP,aAAExkL,UAAUupG,GAAG,QAAS,EAAK+7N,mBAC7B,aAAEtlU,UAAU6/N,IAAI,QAAS,EAAKylG,sBA1BnB,EA8BnBA,iBAAmB,SAACvoU,GAClB,IAAMgjO,EAAWhjO,EAAEugB,OAAOuqI,QAAQ,+BAC5B09K,EAAkBxoU,EAAEugB,OAAOuqI,QAAQ,YACpCk4E,GAAawlG,GAChB,EAAKthJ,wBAhCP,EAAKt2K,MAAQ,CACX62K,QAAQ,GAHO,E,wFAQjB,aAAExkL,UAAU6/N,IAAI,QAASj5N,KAAK0+T,oB,+BAoC9B,OACE,+BAAK9zO,UAAU,oBACZ5qF,KAAKsrG,MAAM3qF,aAAe,IACzB,kCAAQiqE,UAAU,kCAAkCkyF,QAAS98K,KAAKq9K,sBAChE,gCAAMzyF,UAAU,qBAAoB,4CAAkB5iF,GAAG,sBAG3D,kCAAQ4iF,UAAU,4DACVkyF,QAAS98K,KAAKq9K,sBACpB,gCAAMzyF,UAAU,kCAAiC,4CAAkB5iF,GAAG,qBAG1E,+BAAK4iF,UAAW,6BAA+B5qF,KAAK+G,MAAM62K,OAAS,qCAAuC,KACxG,+BAAKhzF,UAAU,qCACb,kCAAQA,UAAU,UAAUkyF,QAAS98K,KAAKy+T,YAAY,4CAAkBz2T,GAAG,mBAE7E,+BAAK4iF,UAAU,mCACb,8BAAIA,UAAU,mCACX5qF,KAAKsrG,MAAMw1H,UAAUh5N,KAAI,SAACg5N,EAAWlzN,GACpC,OACE,8BAAIg9E,UAAW,uCACXpzF,IAAK,YAAYoW,GACnB,6BAAGg9E,UAAU,6CACV7wF,KAAM+mO,EAAU1pN,IAChBV,OAAO,SACPmpS,IAAI,uBACJ/+E,EAAUrqO,kB,kBA1ExByrJ,UAAY,CACjB4+E,UAAW,UAAUzqN,O,cA6FV,IAAAy1F,UAPS,SAACxzG,GACvB,MAAO,CACLwoO,UAAWxoO,EAAMu1I,gBAAgBizF,UACjCngN,YAAaroB,EAAMgR,YAAYqX,eAIK,GAAzB,CACZ69S,I,qKCzGH,O,OACA,O,IACA,OACA,O,IAEA,O,IACA,O,IACA,QACA,QACA,QACA,QACA,QACA,QACA,S,uDAEaI,E,EAAAA,W,yOAEXC,QAAS,E,EAETC,gBAAkB,WACX,UAAgBpxH,kBAAhB,gBACA,EAAKpiG,MADL,CAEH0iG,qBAAqB,EACrBP,cAAe,EAAAnuJ,eAAeG,aAGpB,EAAKo/Q,SACf,UAAU19R,eAAe,eACzB,EAAK49R,mBAHL,UAAU59R,eAAe,2B,EAkB7B49R,gBAAkB,YAChB,aAAE3lU,UAAU8oG,QAAQ,UAAY0zB,6BAA6B,WACtD,EAAKipM,SACR,EAAKA,QAAS,GACd,IAAAj4S,cAAa,2BACb,IAAA6wE,YAAU,GACP5lE,MAAK,SAACswE,GACL,GAAIA,EAAU,CACZ,IAAI0uJ,EAAmB1uJ,EACnBA,EAASluG,OACX48P,EAAmB1uJ,EAASluG,MAE9B,IAAMujG,EAA2C,iBAA5B,IAAOq5J,EAAP,0BAAOA,IAAgCA,EAAmB18I,KAAKC,MAAMy8I,GAC1F74P,QAAQ4B,IAAI,iCAAkC49F,IAC9C,IAAAlF,kBAEF,IAAAmlH,8BACA,EAAKonH,QAAS,KAGfxsS,OAAM,SAACp6B,GACND,QAAQ4B,IAAI,8BAA+B3B,IAC3C,IAAAq6F,iBACA,EAAKusO,QAAS,U,gGAMf,WACP,OACE,kCAAQj0O,UAAU,kCACVkyF,QAAS,kBAAM,EAAKgiJ,oBAC1B,yCACA,gCAAMl0O,UAAU,qBAAoB,4CAAkB5iF,GAAG,qB,2BAWlD,IAAA8jG,UALS,SAACxzG,GAAD,MAAY,CAClC0xB,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxC+C,eAAgB7f,EAAMqN,mBAEgB,CACtCqjB,kCACAgG,+CAFa,CAGZ4vS,I,mMCzFkBI,E,yOAEnB73F,4BAA8B,SAACD,GAA2C,IAAjC+3F,EAAiC,uDAAjB,aACjDC,EAAmB9lU,SAASg9F,cAAc8wI,GAChD,GAAIg4F,EAAkB,CACpB,IAAM7yO,EAAO6yO,EAAiB5yO,wBAC9B,EAAKgxF,UAAL,gBACG2hJ,EAAgB,CACfntR,KAAMu6C,EAAKv6C,KACX5sC,IAAKmnF,EAAKnnF,S,mDAXpB,K,qBAEqB85T,G,yJCFrB,Q,IACA,Q,IACA,Q,IAEA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,S,IACA,SAEA,QACA,S,IACA,Q,IACA,MACYx+S,E,wJAAZ,O,IACA,S,IACA,Q,IACA,O,IACA,QAGA,Q,qDAEao+B,O,YAeX,WAAY0sD,IAAO,gGACXA,IADW,SAVnBwpK,YAAc,EAAAp+O,WAAW2kE,8BAUN,EATnBjwF,KAAO,EAAK0pQ,YASO,EARnBr5Q,eAAiB,EAAAd,2BAA2BJ,QAQzB,EAPnB2nO,gBAAkB,UAOC,EANnBlQ,cAAgB,UAMG,EALnBl9G,YAKmB,uBAJnB6tH,YAImB,eAHnBqjE,iBAGmB,qBAFnB/+M,SAAW,UAAEzoD,QAEM,EAcnBw2O,gBAAkB,SAAChkM,GAEjB,IAAMi1N,EAAqB,EAAKznR,MAAM,UAAQxW,IAQ9C,OAPKi+R,EAAmB91J,iBAAoB81J,EAAmBk5B,cAAiBl5B,EAAmBk5B,aAAah5S,gBAC1G,EAAKo7D,+BAA+BpnF,SAAS,KAC/C62E,EAAIj8E,KAAK,IAAI,EAAJ,QAAU,KAAM,UAAEypC,QAAQ08D,OAAOsnJ,QAAQC,aAAzC,qBAA0E,IAC1E,EAAKr3O,OAAS,EAAAsrB,WAAWgkE,OAClC1pB,EAAIj8E,KAAK,IAAI,EAAJ,QAAU,KAAM,UAAEypC,QAAQk8D,MAAM8nJ,QAAQC,aAAxC,qBAAyE,KAG/EzxK,GAxBU,EAqgBnB6sL,yBAA2B,SAAC3+O,GAC1B,MAAO,CACL,EAAK+nE,SAAS/nE,GAAYsjO,QAAQE,UAClC,EAAKz7J,SAAS/nE,GAAYsjO,QAAQI,kBAClC,EAAK37J,SAAS/nE,GAAYsjO,QAAQG,cAClC,EAAK17J,SAAS/nE,GAAYsjO,QAAQC,aAClC,EAAKx7J,SAAS/nE,GAAYsjO,QAAQK,OAClC,EAAK57J,SAAS/nE,GAAYsjO,QAAQM,OAClC,EAAK77J,SAAS/nE,GAAYsjO,QAAQO,OAClC,EAAK97J,SAAS/nE,GAAYsjO,QAAQQ,OAClC,EAAK/7J,SAAS/nE,GAAY+yJ,QAAQgxE,iBAClC,EAAKh8J,SAAS/nE,GAAY+yJ,QAAQixE,sBAClC,EAAKj8J,SAAS/nE,GAAY+yJ,QAAQkxE,oBAClC,EAAKl8J,SAAS/nE,GAAY+lO,aAAaC,mBACvC,EAAKj+J,SAAS/nE,GAAY+lO,aAAaE,aACvC,EAAKl+J,SAAS/nE,GAAYmlO,WAAWM,aACrC,EAAK19J,SAAS/nE,GAAY+yJ,QAAQoxE,oBAClC,EAAKp8J,SAAS/nE,GAAY+yJ,QAAQuxE,qBAClC,EAAKv8J,SAAS/nE,GAAY+yJ,QAAQ0xE,uBAClC,EAAK18J,SAAS/nE,GAAY+yJ,QAAQ4xE,0BAthBpC,EAAKrlO,MAAM,UAAUxW,IAAM,IAAI,EAAJ,QAC3B,EAAKwW,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAaxW,IAAM,IAAI,EAAJ,QAC9B,EAAKwW,MAAM,UAAgBxW,IAAM,IAAI,EAAJ,QACjC,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,UAASxW,IAAM,IAAI,EAAJ,QAC1B,EAAKwW,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,SAEvB,aAAO,EAAKwW,OAAOpgB,SAAQ,SAAAod,GAAA,OAAQA,EAAKN,OAAL,KAXlB,E,uFA2BoB,IAAlB9P,EAAkB,uDAAXpL,KAAKoL,KAC/B,OAAO,2BAAmBA,K,qDAI1B,OAAO,EAAA2sB,mBAAmB/3B,KAAK0hF,0B,kDA4GL9qE,GAAsG,IAA7Fi/P,EAA6F,wDAAhEpG,EAAgE,+DAA9CC,IAA8C,yDAAnB3sC,EAAmB,wDAChI,GAAInsN,EAAS,CAEX,IAAMs7E,EAAgBlyF,KAAKwe,MAAM,UAAQxW,IACnCo3T,EAAwBp/T,KAAKwe,MAAM,UAAgBxW,IAEnD0nN,GAAe94M,EAAQ84M,aAC7BggD,EAAqBA,IAAuBhgD,GAA+B,IAAhBA,IAAuBA,KAAiB1vN,KAAKoL,QAGtGpL,KAAKoL,KAAOskN,GAId94M,EAAQg5P,eAAiBh5P,EAAQg5P,gBAAkB,GAEnD5vQ,KAAKy0B,cACFr2B,SAAQ,SAAC2oG,GACR,GAA6B,IAAzBA,EAAYxjG,SAAgB,CAC9B,IAAM+C,EAASygG,EAAYzgG,OACrBwvQ,EAAyB,EAAK1F,uBAAuB1gD,IACtD,EAAK0gD,uBAAuB1gD,GAAappN,IAC1CsQ,EAAQhiB,eAAe0R,IAAWwvQ,KAChCrG,GACF1oK,EAAY5gF,cAAgB4gF,EAAYwqH,qBAAqB36M,EAAQtQ,KAChEygG,EAAY5gF,eAAiB2vP,IAChC/uK,EAAY5gF,cAAgB4gF,EAAYwqH,qBAAqBukD,KAG/D/uK,EAAY5gF,cAAgB4gF,EAAYuK,eAAe16F,EAAQtQ,KAC1DygG,EAAY+oK,oBAEnB/oK,EAAYrgB,qBAAuBqgB,EAAY5gF,eAI7C4gF,EAAY5gF,eAAiB48M,IAAch8H,EAAY5gF,cAAcy9D,2BACvEmjB,EAAY5gF,cAAcxiB,UAAUgS,UAAW,GAE7CiB,EAAQg5P,eAAez1Q,SAASmM,KAClCygG,EAAYjkB,UAAW,OAEpB,CACcikB,EAAYypC,kBAClBpyI,SAAQ,SAACse,GACpB,IAAMpW,EAASoW,EAAQpW,OACnBupQ,EAAyB,KAK7B,GAJAnzP,EAAQg9J,wBAAwBz5K,MAAK,SAAAsjF,GAEnC,OADAssL,EAAyBnzP,EAAQ60M,qBAAqBhuI,MAGpD3sE,EAAQhiB,eAAe0R,IAAWupQ,EAAwB,CAC5D,GAAIJ,EAAU,CACZ,IAAM9jI,EAA8B,eAAXrlI,GAA2BsQ,EAAA,gBAChD8F,EAAQo7M,2BAA2BlhN,EAAA,gBAA4BA,EAAA,YAC/D8F,EAAQ60M,qBAAqB36M,EAAQtQ,IACrCqlI,EACFjvH,EAAQyJ,cAAgBwlH,EACfkkI,IACTnzP,EAAQyJ,cAAgB0pP,QAG1BnzP,EAAQyJ,cAAgBzJ,EAAQ40F,eAAe16F,EAAQtQ,KAAYygG,EAAY+oK,oBAEjFpzP,EAAQgqE,qBAAuBhqE,EAAQyJ,cAOrCzJ,EAAQyJ,eAAiB48M,IAAcrmN,EAAQyJ,cAAcy9D,2BAC/DlnE,EAAQyJ,cAAcxiB,UAAUgS,UAAW,GAEzCiB,EAAQg5P,eAAez1Q,SAASmM,KAClCoW,EAAQomE,UAAW,UAM7B,IAAMwjN,EAAgB,SAAC9qR,EAAMtkB,GAAP,OAAiBu4Q,EAAWj0P,EAAKK,WAAa3kB,GAASskB,EAAK7X,UAAUqE,KAAQ9Q,GACpGxC,OAAOmc,KAAK+F,GACTxY,SAAQ,SAACmoS,GACR,IAAIjgS,SAAQ/M,SAAQ8lU,SACpB,OAAO94B,GACL,IAAK,oBACHjgS,EAAS,oBACT/M,EAAS24F,EACTmtO,EAAc,aACd,MACF,IAAK,uBACH/4T,EAAS,uBACT/M,EAAS24F,EACTmtO,EAAc,gBACd,MACF,IAAK,gBACH/4T,EAAS,sBACT/M,EAAS24F,EACTmtO,EAAc,eACd,MACF,IAAK,mBACH/4T,EAAS,mBACT/M,EAAS6lU,EACTC,EAAc,aAKlB,GAAI9lU,GAAUqd,EAAQtQ,IAAWsQ,EAAQtQ,GAAQ7R,QAAU8E,EAAO8lU,GAAc,CAC9E,IAAMzyL,EAAcrzI,EAAO8lU,GAMrBC,EAAgB1oT,EAAQtQ,GAC3BwB,KAAI,SAACsnD,GAIJ,OAHsBw9E,EAAY+mE,YAAb,wBACb/mE,EAAY/qD,gBADC,aACiB+qD,EAAY+mE,cAC9C/mE,EAAY/qD,eACI/1E,MAAK,SAAAoD,GAAA,OAAKo3R,EAAcp3R,EAAGkgD,SAEhDpoD,QAAO,SAACu4T,GACP,OAAOA,GAAgBA,EAAa5+O,gCAAgCisD,EAAYnsD,2BAEhF6+O,EAAc7qU,SAChBm4I,EAAY9lD,mBAAqBw4O,GAEhB,sBAAf/4B,GAAsC3vR,EAAA,mBACxCg2H,EAAY4yL,aAAe53T,MAAMC,QAAQ+O,EAAA,mBACrCA,EAAA,kBACAu9F,KAAKC,MAAMlxG,mBAAmB0T,EAAA,oBAC9BA,EAAA,cACFg2H,EAAYmrL,WAAanwT,MAAMC,QAAQ+O,EAAA,aACnCA,EAAA,YACAu9F,KAAKC,MAAMlxG,mBAAmB0T,EAAA,eAEpCg2H,EAAY9lD,mBAAqB8lD,EAAY9kD,yBACrB,yBAAfy+M,GAAyC3vR,EAAA,uBAClDg2H,EAAY4yL,aAAe53T,MAAMC,QAAQ+O,EAAA,sBACrCA,EAAA,qBACAu9F,KAAKC,MAAMlxG,mBAAmB0T,EAAA,uBAClCg2H,EAAY9lD,mBAAqB8lD,EAAY9kD,6BAKjD4nL,GACF1vQ,KAAKyzN,aAAazzN,KAAKy0B,eAGrBohP,GACF71Q,KAAKiwQ,oCAAoCr5P,EAASi/P,GAGpD,IAAMpyP,EAAczjB,KAAKs4F,wBACtBtxF,QAAO,SAAA+/F,GAAA,OAAeA,EAAYvrF,KAAK20H,mBACvCroI,KAAI,SAACi/F,GAAD,OAAiBA,EAAYvrF,KAAKK,YAEpC7b,KAAKu0B,cACR,UAAMtQ,SAAS,CACb7Y,KAAMoV,EAAMkD,sBACZ7C,QAAS,CAAC4C,oB,+BAWT7M,GAoCP,OAnCIA,EAAQg5P,iBACVh5P,EAAQg5P,eAAiBh5P,EAAQg5P,eAAe7xQ,MAAM,MAEpD6Y,EAAQ6oT,oBACV7oT,EAAQ6oT,kBAAoBn3T,OAAOC,UAAUqO,EAAQ6oT,mBACjD,CAAC7oT,EAAQ6oT,mBACT7oT,EAAQ6oT,kBAAkB1hU,MAAM,MAGlC6Y,EAAQ8oT,uBACV9oT,EAAQ8oT,qBAAuBp3T,OAAOC,UAAUqO,EAAQ8oT,sBACpD,CAAC9oT,EAAQ8oT,sBACT9oT,EAAQ8oT,qBAAqB3hU,MAAM,MAGrC6Y,EAAQ+oT,sBACV/oT,EAAQ+oT,oBAAsBr3T,OAAOC,UAAUqO,EAAQ+oT,qBACnD,CAAC/oT,EAAQ+oT,qBACT/oT,EAAQ+oT,oBAAoB5hU,MAAM,MAEpC6Y,EAAQgpT,mBACVhpT,EAAQgpT,iBAAmBt3T,OAAOC,UAAUqO,EAAQgpT,kBAChD,CAAChpT,EAAQgpT,kBACThpT,EAAQgpT,iBAAiB7hU,MAAM,MAEjC6Y,EAAQipT,oBACVjpT,EAAQipT,kBAAoB1rN,KAAKC,MAAMlxG,mBAAmB0T,EAAQipT,qBAEhEjpT,EAAQkpT,cACVlpT,EAAQkpT,YAAc3rN,KAAKC,MAAMlxG,mBAAmB0T,EAAQkpT,eAE1DlpT,EAAQmpT,uBACVnpT,EAAQmpT,qBAAuB5rN,KAAKC,MAAMlxG,mBAAmB0T,EAAQmpT,wBAEvE/nU,QAAQ4B,IAAI,gCAAiCgd,GACtCA,I,0DAS2BA,GAA2B,IAAlB64P,EAAkB,wDACvDv9K,EAAgBlyF,KAAKwe,MAAM,UAAQxW,IACnCo3T,EAAwBp/T,KAAKwe,MAAM,UAAgBxW,IACnD0mG,EAAc1uG,KAAKwe,MAAM,UAAMxW,IA0ErC,OAxEA4O,EAAQ84M,YAAc1vN,KAAKoL,KAC3B1W,OAAOmc,KAAK+F,GAASxY,SAAQ,SAACmoS,GAE5B,OAAOA,GACL,IAAK,cAMH,IAAKr0M,EAAcC,aAAeD,EAAcC,WAAWrL,mBACzD,MAEFlwE,EAAA,kBAA+Bs7E,EAAcC,WAAWrL,mBACrD9/E,QAAO,SAAA+/E,GAAA,OAAqBA,KAC5Bj/E,KAAI,SAAAi/E,GACH,OAAO0oL,EAAW1oL,EAAkBlrE,SAAWkrE,EAAkBpjF,UAAUqE,MAE3EkqF,EAAcC,WAAWxQ,SAAS1hF,MAAK,SAAAoD,GAAA,OAAWA,EAAQyP,SAAR,YACpD8D,EAAA,kBAA+B+/E,mBAAmBwd,KAAK2W,UAAU54B,EAAcC,WAAWqtO,eAC1F5oT,EAAA,YAAyB+/E,mBAAmBwd,KAAK2W,UAAU54B,EAAcC,WAAW4lO,cAEtF,MACF,IAAK,iBACH,IAAK7lO,EAAcK,gBAAkBL,EAAcK,cAAczL,mBAC/D,MAOFlwE,EAAA,qBAAkCs7E,EAAcK,cAAczL,mBAC3D9/E,QAAO,SAAA+/E,GAAA,OAAqBA,KAC5Bj/E,KAAI,SAAAi/E,GACH,OAAO0oL,EAAW1oL,EAAkBlrE,SAAWkrE,EAAkBpjF,UAAUqE,MAE3EkqF,EAAcK,cAAc5Q,SAAS1hF,MAAK,SAAAoD,GAAA,OAAWA,EAAQyP,SAAR,YACvD8D,EAAA,qBAAkC+/E,mBAAmBwd,KAAK2W,UAAU54B,EAAcK,cAAcitO,gBAElG,MACF,IAAK,gBACH,IAAKttO,EAAcigF,eAAiBjgF,EAAcigF,aAAarrF,mBAC7D,MAEFlwE,EAAA,oBAAiCs7E,EAAcigF,aAAarrF,mBACzD9/E,QAAO,SAAA+/E,GAAA,OAAqBA,KAC5Bj/E,KAAI,SAAAi/E,GACH,OAAO0oL,EAAW1oL,EAAkBlrE,SAAWkrE,EAAkBpjF,UAAUqE,MAE/E,MACF,IAAK,aACH,IAAKo3T,EAAsBjuR,aAAeiuR,EAAsBjuR,WAAW21C,mBACzE,MAEFlwE,EAAA,iBAA8BwoT,EAAsBjuR,WAAW21C,mBAC5D9/E,QAAO,SAAA+/E,GAAA,OAAqBA,KAC5Bj/E,KAAI,SAAAi/E,GACH,OAAO0oL,EAAW1oL,EAAkBlrE,SAAWkrE,EAAkBpjF,UAAUqE,MAE/E,MACF,IAAK,aACH,IAAK0mG,EAAYp6D,WACf,MAEF19B,EAAA,gBAA6B83F,EAAYp6D,WAAWioK,kCAOnD3lM,I,8CAGeq+C,GACtB,IAAM+sO,EAAchiS,KAAKwe,MAAM,UAAMxW,IAC/B1B,GAAS,aAAU2uD,GACrB23E,EAAco1J,EAAYjjR,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAMtF,OALKsmI,KACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ2uD,IACzCv0D,UAAY,kBAAMshS,GAC9BA,EAAYjjR,aAAahqB,KAAK63I,IAEzB,IAAI,EAAJ,QAAyBA,EAAY/wH,SAAU+wH,K,wCA4DtCozL,EAAanoE,EAAgBvxP,GAC7C,IAAM25T,EAAaD,EAAYl0T,MAAK,SAAAo0T,GAAA,OAASA,EAAM1kT,KAAKlV,SAAWA,KACnE,OAAK25T,GACIpoE,I,mCA5DQ,WAEjB,IAAMjwP,MAAMC,QAAQ7H,KAAKo2M,oBAAqBp2M,KAAKo2M,iBAAiB3hN,OAClE,OAAOuL,KAAKo2M,iBAKd,IADkCp2M,KAAKuhF,+BACRpnF,SAAS,KAAM,CAC5C,IAAMg5N,EAAmBnzN,KAAKwe,MAAM,UAAgBxW,IAC9Cm4T,EAAqBhtG,GAAoBA,EAAiB12M,WAChE,OAAOzc,KAAKo2M,iBAAiBtuM,KAAI,SAAAwU,GAC/B,IAAIgzP,GAA2B,EACzB8wD,EAAkB9jT,EAAWm4P,UAChC3sQ,KAAI,SAAA4U,GACH,GAAIyjT,EACF,OAAQzjT,EAAQlB,KAAKlV,QACnB,IAAK,2BAEH,OADAgpQ,GAA2B,EACpB,EAAK+wD,kBAAkBF,EAAoBzjT,EAAS,cAC7D,IAAK,qBAEH,OADA4yP,GAA2B,EACpB,EAAK+wD,kBAAkBF,EAAoBzjT,EAAS,QAC7D,IAAK,uBAEH,OADA4yP,GAA2B,EACpB,EAAK+wD,kBAAkBF,EAAoBzjT,EAAS,UAC7D,IAAK,qBAEH,OADA4yP,GAA2B,EACpB,EAAK+wD,kBAAkBF,EAAoBzjT,EAAS,gBAC7D,IAAK,yBAEH,OADA4yP,GAA2B,EACpB,EAAK+wD,kBAAkBF,EAAoBzjT,EAAS,YAC7D,QACE,OAAOA,EAGb,OAAOA,KAER1V,QAAO,SAAC0V,GACP,OAAOA,GAAW,EAAK47E,sBAAsB57E,EAAS,GAAI,IAAI,GAAO,GAAMjoB,UAM/E,OAJI66Q,IACFhzP,EAAWG,SAAW2jT,EACtB9jT,EAAWgzP,0BAA2B,GAEjChzP,KAGX,OAAOtc,KAAKo2M,iBAAiBtuM,KAAI,SAACwU,GAKhC,OAJIA,EAAWgzP,2BACbhzP,EAAWG,SAAX,wBAA0BH,EAAW2zF,kBACrC3zF,EAAWgzP,0BAA2B,GAEjChzP,S,wKCliBb,Q,uDAIqBgzS,E,YACnB,WAAYxwO,EAASx4E,EAAQuV,IAAU,gGAC/BijE,IAD+B,OAErC,EAAKx4E,OAASA,EACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAWA,EAJqB,E,qEAQlClY,GACH,sGAAmBA,EAAW,IAAI2rT,GAAqB,EAAOtvT,KAAKsG,OAAQ3C,EAAU6M,c,yCAGpEqlC,EAASouC,GAC1B,IAAM0xO,GAAcA,EAAdA,0GAAuC9/Q,EAASouC,GACtD,OAAO,aAAO0xO,GAAa,SAACh2S,GAAD,OAAaA,EAAQnE,KAAK7X,UAAUmF,yB,GAjBnE,M,4BAEqBwmT,G,yICJrB,O,WACA,MACA,OACA,O,IAEA,QACA,Q,IACA,OACA,QAEA,Q,uDAEMgR,G,6OAYJv5T,MAAQ,CACN01T,mBAAoB,I,EAUtB31E,gBAAkB,SAAC3wP,GACZA,EAAEugB,OAAOuqI,QAAQ,yBAChB9qJ,EAAEugB,OAAOuqI,QAAQ,iCACjB9qJ,EAAEugB,OAAOuqI,QAAQ,wBAA2B9qJ,EAAEugB,OAAOuqI,QAAQ,YACjE,EAAK31C,MAAMktJ,oB,EA6Df6kE,iBAAmB,SAACC,GAClB,IAAIC,EAAgBD,EAAc9hT,KAAKiB,WACnC8jT,EAAmB,GACvB,OAAQ,EAAKj1N,MAAM2sH,iBACjB,IAAK,gBACHsoG,EAAmB,CAAC,qBAAsB,uBAAwB,2BAChE,yBAA0B,sBAAuB,sBACnD,MACF,IAAK,aACHA,EAAmB,CAAC,aAAc,SAAU,OAAQ,gBACpD,MACF,IAAK,QACHA,EAAmB,CAAC,aAAc,cAKtC,OAAOhD,EAAcv2T,QAAO,SAAAw2T,GAAA,OAAc+C,EAAiBpmU,SAASqjU,EAAWhiT,KAAKlV,Y,EAGtFk6T,qBAAuB,WACrB,OAAO,EAAA/jO,iBAAiB30F,KAAI,SAAA6vN,GAC1B,IAAMtgH,EAAS,CACb/0F,KAAMq1M,GAER,OAAQA,GACN,IAAK,MACHtgH,EAAOkhH,YAAc,gDACrB,MACF,IAAK,MACHlhH,EAAOkhH,YAAc,gDACrB,MACF,IAAK,OACHlhH,EAAOkhH,YAAc,iDAGzB,OAAOlhH,M,EAIXopN,qBAAuB,WACrB,IAIMhkT,GAJS,IAAAtB,oBACcm9E,wBAAwBxsF,MAAK,SAAA6T,GACxD,MAAwB,UAAjBA,EAAQ2C,QAEc9G,KAAKiB,WAEhCggT,EAAqB,GACnBiE,EAAoB,EAAKF,uBACzB9rE,EAAYj4O,EAAS3Q,MAAK,SAAA0xT,GAAA,MAAyC,eAA3BA,EAAWhiT,KAAKlV,UACxDmuP,EAAWh4O,EAAS3Q,MAAK,SAAA0xT,GAAA,MAAyC,cAA3BA,EAAWhiT,KAAKlV,UAO7D,OANIouP,IACFA,EAAU18B,cAAgB,SAExBy8B,IACFA,EAASz8B,cAAgB,SAEnB,EAAK1sH,MAAM2sH,iBACjB,IAAK,oBACHwkG,EAAqB/nE,EAAYA,CAACA,GAAb,qBAA2BgsE,IAAqBA,EACrE,MAEF,IAAK,mBACHjE,EAAqBhoE,EAAWA,CAACA,GAAZ,qBAAyBisE,IAAqBA,EACnE,MAEF,IAAK,yBACHjE,0BAAyBiE,GAAzB,CAA4CjsE,IAC5C,MAEF,IAAK,0BACHgoE,0BAAyBiE,GAAzB,CAA4ChsE,IAC5C,MAEF,IAAK,oBACH+nE,EAAqBiE,EAIzB,EAAKpjJ,SAAS,CACZm/I,wB,EAIJwB,uBAAyB,a,2GA3JvBj+T,KAAKo+T,wBACDp+T,KAAKsrG,MAAMktJ,kBACbp/P,SAASytD,iBAAiB,QAAS7mD,KAAK8mP,mB,6CAatC9mP,KAAKsrG,MAAMktJ,kBACbp/P,SAAS8pG,oBAAoB,QAASljG,KAAK8mP,mB,8CAIvB,WAChB5rO,GAAS,IAAAC,oBACT88M,EAAkBj4N,KAAKsrG,MAAM2sH,gBACnC,GAAwB,sBAApBA,GACqB,2BAApBA,GACoB,4BAApBA,GACoB,sBAApBA,GACoB,qBAApBA,EAJL,CASA,IAAMqlG,EAAgBpiT,EAAOo9E,wBAAwBxsF,MAAK,SAAA6T,GACxD,OAAOA,EAAQ2C,OAAS21M,KAKpBklG,EAFaG,EAAc9hT,KAAKuD,aAELjT,MAAK,SAACmlE,GACrC,IAAIisP,EAAe,EAAK5xN,MAAMqhH,aAAavlI,OACrCu5O,EAAoBzlT,EAAOwmE,uBACjC,OAAIw7O,IAAiB,UAAE1+R,QAAQmiS,GAAmB/7E,gBAAgBC,YACzC,eAAhB5zK,EAAK3qE,OAEP2qE,EAAK9qD,eAAiB8qD,EAAK9qD,cAAc0gE,MAAMO,SAAW81O,KAG/DK,EAAgBv9T,KAAKq9T,iBAAiBC,GAMpCP,EAAmBQ,EAAc5gT,WAAU,SAAAs0D,GAAA,OAAQA,EAAK3uD,OAAS66S,EAAYthT,YAC/EkhT,EAAmB,IACrBQ,GAAgB,IAAAvvO,SAAQuvO,EAAeR,EAAkB,IAG3DQ,EAAgBA,EAAcz1T,KAAI,SAAAmpE,GAKhC,MAJkB,sBAAdA,EAAK3uD,OAEP2uD,EAAK4rP,YAAc,cAEd5rP,KAGTjxE,KAAKs9K,SAAS,CACZm/I,mBAAoBc,SAvCpBv9T,KAAKygU,yB,+BAmIA,WAEHnC,EAAoBt+T,KAAKsrG,MAAM0uJ,qBAAuB,GAK1D,OAJIh6P,KAAK+G,MAAM01T,mBAAmBhoU,QAAU,IAC1C6pU,EAAoB5pU,OAAO+2B,OAAO,GAAI6yS,EAAmB,CAACp0L,SAAS,WAInE,+BAAKt/C,UAAU,cAAcv2E,MAAOiqT,GAClC,+BAAK1zO,UAAU,uBACZ5qF,KAAK+G,MAAM01T,mBAAmB30T,KAAI,SAACwvN,GAClC,OAAKA,EAIH,kCAAQ9/N,IAAK8/N,EAASh1M,KACdw6J,QAAS,WACP,UAAU37I,eAAe,gBAAkBm2L,EAASh1M,MACpD,EAAKgpF,MAAM+rH,uBAAuBC,IAEpCx4C,cAAa,EAAKxzE,MAAM2sH,gBACxBsmG,YAAa,EAAKjzN,MAAMgvH,yBAA2B,kBAAM,EAAK2jG,uBAAuB3mG,IAAY,aACjG1sI,UAAW,6DACT0sI,EAASulG,aAAevlG,EAASh1M,MAAMhmB,cAAcqC,QAAQ,KAAK,MAC1E,gCAAMisF,UAAU,oCACd,4CAAkB5iF,GAAIsvN,EAASiB,aAAejB,EAAS97M,KAAKE,gBAbzD,c,kBA1LZwmI,UAAY,CACjB+1E,gBAAiB,UAAUz1L,OAAOy2E,WAClC0zG,aAAc,UAAUh1N,OACxB0/N,uBAAwB,UAAUt4C,KAClCi7E,oBAAqB,UAAUriQ,OAC/BsiQ,oBAAqB,UAAU73G,KAC/Bk4E,yBAA0B,UAAUv7C,KACpCy5E,iBAAkB,UAAUz5E,M,cAiNjB,IAAAjzE,UANS,WACtB,MAAO,KAGkB,GAEZ,CAA6Cw0N,I,yICtO5D,O,WACA,MACA,O,IAEA,OACA,SACA,Q,IACA,QACA,QAQA,Q,uDAEMM,G,6OAWJ75T,MAAQ,CACN01T,mBAAoB,I,EAYtB31E,gBAAkB,SAAC3wP,GACZA,EAAEugB,OAAOuqI,QAAQ,yBAChB9qJ,EAAEugB,OAAOuqI,QAAQ,iCACjB9qJ,EAAEugB,OAAOuqI,QAAQ,uBACjB9qJ,EAAEugB,OAAOuqI,QAAQ,YACrB,EAAK31C,MAAMktJ,oB,EAUfqoE,YAAc,WACZ,IACM3uO,GADS,IAAA/2E,oBACcqD,MAAM,UAAQxW,IAC3C,GAAqD,gBAAjD,EAAKsjG,MAAM2sH,gBAAgB6tB,kBAAqC,CAClE,IACMg7E,GADiB,EAAKx1N,MAAM2sH,gBAAgBhiO,OAAO8H,MAAM,KAC3B,GAAK,EACzCm0F,EAAcC,WAAWqtO,aAAasB,GAAgC,IAAhBA,GAAqC,IAAhBA,EACvE,CAAC,YACD,CAAC,WACL5uO,EAAcC,WAAWrL,mBAAqBoL,EAAcC,WAAWrK,wBACvE,EAAKwjB,MAAMihC,oBACN,GAAqD,mBAAjD,EAAKjhC,MAAM2sH,gBAAgB6tB,kBAAwC,CAC5E,IACMg7E,GADiB,EAAKx1N,MAAM2sH,gBAAgBhiO,OAAO8H,MAAM,KAC3B,GAAK,EACzCm0F,EAAcK,cAAcitO,aAAasB,GAAe,CAAC,WACzD5uO,EAAcK,cAAczL,mBAAqBoL,EAAcK,cAAczK,wBAC7E,EAAKwjB,MAAMihC,eAEb,EAAKjhC,MAAMktJ,oB,EAGbuoE,iBAAmB,SAAC/kO,GAClB,IAAM9gF,GAAS,IAAAC,oBACfnjB,QAAQ4B,IAAI,WAAYoiG,GACxBhkG,QAAQ4B,IAAI,6BAA8B,EAAK0xG,MAAM2sH,iBACrD,IAAMtkB,EAAc33G,EAASj+F,MAAM,KAC7Bm0F,EAAgBh3E,EAAOsD,MAAM,UAAQxW,IACvCsiP,EAAc,GAMlB,GALqD,gBAAjD,EAAKh/I,MAAM2sH,gBAAgB6tB,kBAC7BwE,EAAc,aAC4C,mBAAjD,EAAKh/I,MAAM2sH,gBAAgB6tB,oBACpCwE,EAAc,iBAEqC,gBAAjD,EAAKh/I,MAAM2sH,gBAAgB6tB,mBACuB,mBAAjD,EAAKx6I,MAAM2sH,gBAAgB6tB,kBAAwC,CACtE,IAAMk7E,EAAiB,EAAK11N,MAAM2sH,gBAAgBhiO,OAAO8H,MAAM,KAC/Dm0F,EAAco4J,GAAaytE,WAAW35T,SAAQ,SAAAi6T,GACfA,EAAa1kH,YAAYh3L,WAAU,SAAAq7S,GAC9D,OAAOA,IAAY,EAAK1sN,MAAM2sH,gBAAgBhiO,WAEpB,GAE1B09M,EAAYv1M,SAAQ,SAAC6iU,GACnB5I,EAAa1kH,YAAY5+M,KAAKisU,EAAe,GAAK,IAAMC,EAAWljU,MAAM,KAAK,UAIpF,IAAMmjU,EAAmBhvO,EAAco4J,GAAak1E,cAAcwB,EAAe,GAAK,GAEhFG,EAAWD,EAAiBvkT,WAAU,SAAAskT,GAE1C,OAAOA,EAAWljU,MAAM,KAAK,KAAO,EAAKutG,MAAMgwC,+BAEjD4lL,EAAiBvrU,OAAOwrU,EAAS,GAEjCxtH,EAAYv1M,SAAQ,SAAC6iU,GACnBC,EAAiBnsU,KAAKksU,MAExB/uO,EAAco4J,GAAaxjK,mBAAqBoL,EAAco4J,GAAaxiK,wBAC3E,EAAKwjB,MAAMihC,eACXrxH,EAAO23E,uB,EAKXuuO,gBAAkB,WAEhB,OAD8B,IAAAh5B,uBAAsB,EAAK98L,MAAMgwC,4BAA6B,EAAKhwC,MAAM4vC,4BAC1EpzI,KAAI,SAAAk0F,GAC/B,MAAO,CACL15E,KAAM,GACN05E,WACA8gF,QAAS,WACP,EAAKikJ,iBAAiB/kO,GACtB,EAAKsP,MAAMktJ,yB,EAKnB6oE,eAAiB,WACf,MAAO,CACL/+S,KAAM,eACN05E,SAAU,QACV8gF,QAAS,EAAK+jJ,c,EAGlBS,cAAgB,WACd,MAAO,CACLh/S,KAAM,cACN05E,SAAU,cACV8gF,QAAS,kBAAM,EAAKxxE,MAAMyvC,yBAAyB,EAAAt/C,0BAA0BC,Y,EAGjF6lO,mBAAqB,SAACprU,GACpB,IAGMumB,GAHS,IAAAvB,oBACcqD,MAAM,UAAQxW,IACZyU,WACN3Q,MAAK,SAAAwrN,GAAA,OAAYA,EAAS97M,KAAKlV,SAAW,EAAKglG,MAAM2sH,gBAAgB6tB,qBAC9F,EAAKx6I,MAAM+rH,uBAAuB36M,GAClC,EAAK4uF,MAAMiwC,0BAA0BplJ,EAAEugB,OAAOu7C,QAAQjqD,IACtD,EAAKsjG,MAAMmwC,mCAAmCtlJ,EAAEugB,OAAOu7C,QAAQrkD,OAC/D,EAAK09F,MAAMktJ,oB,EAEbgpE,+BAAiC,WAC/B,IAAMC,EAA8B,EAAA1lO,uBACjC/0F,QAAO,SAAAikN,GAAA,OAAgBA,EAAajvH,WAAa,EAAAD,uBAAuB,GAAGC,YAC3El0F,KAAI,SAACmjN,GAEJ,OADAA,EAAanuC,QAAU,EAAKykJ,mBACrBt2G,KAELy2G,GAA8B,IAAAt5B,uBAAsB,EAAK98L,MAAMgwC,6BAQrE,OAPIomL,GAA+BA,EAA4BjtU,QAC7DgtU,EAA4B1sU,KAAK,CAC/ButB,KAAM,cACN05E,SAAU,cACV8gF,QAAS,kBAAM,EAAKxxE,MAAMyvC,yBAAyB,EAAAt/C,0BAA0BE,iBAG1E8lO,G,EAETE,sBAAwB,WACtB,OAAQ,EAAKr2N,MAAM0vC,uBACjB,KAAK,EAAAv/C,0BAA0BC,QAC7B,MAAmD,MAA3C,EAAK4P,MAAMgwC,4BACf,EAAKkmL,iCADF,wBAEC,EAAKA,kCAFN,CAEwC,EAAKH,mBACtD,KAAK,EAAA5lO,0BAA0BE,aAC/B,QACE,IAAMimO,EAAe,EAAKR,kBAC1B,OAAOQ,EAAantU,OAAb,wBACCmtU,GADD,CACe,EAAKN,gBAAiB,EAAKD,mBAD1C,wBAEC,EAAKG,kCAFN,CAEwC,EAAKH,qB,2GAzJpDrhU,KAAKsrG,MAAMktJ,kBACbp/P,SAASytD,iBAAiB,QAAS7mD,KAAK8mP,iBAE1C,IAAMk6E,EAAiBhhU,KAAKsrG,MAAM2sH,gBAAgBhiO,OAAO8H,MAAM,KAC/DiC,KAAKsrG,MAAM6vC,2BAA2B6lL,EAAe,IACrDhhU,KAAKsrG,MAAM+vC,+BAA+B2lL,EAAe,M,6CAarDhhU,KAAKsrG,MAAMktJ,kBACbp/P,SAAS8pG,oBAAoB,QAASljG,KAAK8mP,mB,+BA2ItC,WAEHw3E,EAAqBt+T,KAAKsrG,MAAM3qF,YAAc,KAAO3gB,KAAKsrG,MAAM0uJ,oBAChEh6P,KAAKsrG,MAAM0uJ,oBACX,GACyC,IAAzCh6P,KAAK+G,MAAM01T,mBAAmBhoU,SAChC6pU,EAAoB5pU,OAAO+2B,OAAO,GAAI6yS,EAAmB,CAACp0L,SAAS,WAErE,IACM23L,EAAqB7hU,KAAKsrG,MAAM0vC,wBAA0B,EAAAv/C,0BAA0BE,cADnD,CAAC,IAAK,IAAK,IAAK,IAAK,MAExBxhG,SAAS6F,KAAKsrG,MAAMgwC,6BAExD,OACE,+BAAK1wD,UAAU,cAAcv2E,MAAOiqT,GACjCuD,EACC,+BAAKj3O,UAAW,qBACbl2F,OAAOmc,KAAP,kCAA4C/I,KAAI,SAACs1H,GAAD,OAC/C,kCAAQxyC,UAAW,gCAChB,EAAK0gB,MAAM4vC,6BAA+B9d,EAAY,oBAAsB,IACvE0/C,QAAS,kBAAM,EAAKxxE,MAAM2vC,8BAA8B7d,IACxD5lI,IAAK,YAAY4lI,GACtBA,OAIL,KACJ,+BAAKxyC,UAAW,uBACdi3O,EAAoB,4CAA8C,KACjE7hU,KAAK2hU,wBAAwB75T,KAAI,SAACg6T,EAAeC,GAChD,OACE,kCAAQvqU,IAAKsqU,EAAc9lO,SACnB4oM,UAASk9B,EAAc9lO,SACvB8lM,aAAYigC,EACZjlJ,QAAS,SAAC3mL,GACR,UAAUgrC,eAAe,gBAAkB2gS,EAAc9lO,UACzD8lO,EAAchlJ,QAAQ3mL,IAExBy0F,UAAW,4DAA4Dk3O,EAAc9lO,UAC3F,gCAAMpR,UAAU,oCAAoCk3O,EAAcx/S,gB,kBAlNzE4/H,UAAY,CACjB3V,aAAc,UAAUwyC,KACxBk5C,gBAAiB,UAAUtgO,OAC3Bg1N,aAAc,UAAUh1N,OACxB0/N,uBAAwB,UAAUt4C,KAClCi7E,oBAAqB,UAAUriQ,OAC/B6gQ,iBAAkB,UAAUz5E,M,GA6N1BuR,EAAqB,CACzBv1C,oDACAE,8DACAE,wDACAE,gEACAE,sDACAE,yE,WAGa,IAAA3vC,UAhBS,SAACxzG,GAAD,MAAY,CAClC0iJ,sBAAuB1iJ,EAAMu1I,gBAAgBmN,sBAC7CE,2BAA4B5iJ,EAAMu1I,gBAAgBqN,2BAClDI,4BAA6BhjJ,EAAMu1I,gBAAgByN,4BACnD36H,YAAaroB,EAAMgR,YAAYqX,eAYO2vK,EAAzB,CAA6CswI,I,8IChQ5D,Q,IACA,Q,IAEA,Q,IAEA,SAEA,Q,IACA,Q,IACA,S,IACA,Q,IACA,O,IACA,S,IACA,Q,IACA,Q,IACA,Q,IACA,S,IACA,S,IACA,QACA,Q,qDAEahiR,O,YAgBX,WAAY0sD,IAAO,gGACXA,IADW,SAXnBwpK,YAAc,EAAAp+O,WAAWC,QAWN,EAVnBvrB,KAAO,EAAK0pQ,YAUO,EATnB1gP,MAAQ,IASW,EARnB34B,eAAiB,EAAAd,2BAA2BC,QAQzB,EAPnBsnO,gBAAkB,eAOC,EANnBlQ,cAAgB,YAMG,EALnBl9G,YAKmB,uBAJnB6tH,YAImB,eAHnB17I,SAAW,UAASzoD,QAGD,EAFnBo/N,yBAA2B,CAAC,SAAU,gBAAiB,gBAAiB,cAItE,EAAKp/O,MAAM,UAAWxW,IAAM,IAAI,EAAJ,QAC5B,EAAKwW,MAAM,UAAaxW,IAAM,IAAI,EAAJ,QAC9B,EAAKwW,MAAM,UAAgBxW,IAAM,IAAI,EAAJ,QACjC,EAAKwW,MAAM,UAAUxW,IAAM,IAAI,EAAJ,QAC3B,EAAKwW,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvBtT,OAAOyhB,OAAO,EAAKqI,OAAOpgB,SAAQ,SAAAod,GAAA,OAAQA,EAAKN,OAAL,KAXzB,E,uFAcoB,IAAlB9P,EAAkB,uDAAXpL,KAAKoL,KAC/B,OAAO,2BAAmBA,K,qDAI1B,OAAO,EAAA2sB,mBAAmB/3B,KAAK0hF,0B,8CAGTzsB,GACtB,IAAM+sO,EAAchiS,KAAKwe,MAAM,UAAMxW,IAC/B1B,GAAS,aAAU2uD,GACrB23E,EAAco1J,EAAYjjR,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAMtF,OALKsmI,KACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ2uD,IACzCv0D,UAAY,kBAAMshS,GAC9BA,EAAYjjR,aAAahqB,KAAK63I,IAEzB,IAAI,EAAJ,QAAyBA,EAAY/wH,SAAU+wH,O,2NClErC0iL,E,YACnB,WAAYxwO,EAASx4E,EAAQuV,IAAU,gGAC/BijE,IAD+B,OAErC,EAAKx4E,OAASA,EACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAWA,EAJqB,E,qEAQlClY,GACH,sGAAmBA,EAAW,IAAI2rT,GAAqB,EAAOtvT,KAAKsG,OAAQ3C,EAAU6M,c,yCAGpEqlC,EAASouC,GAC1B,OAAOjkF,KAAKuvT,yBAAyB15Q,EAASouC,O,GAhBlD,M,4BAEqBqrO,G,yICFrB,O,WACA,MACA,OACA,OAEA,Q,IACA,OACA,QACA,Q,IACA,QACA,Q,uDAEMgR,G,6OAYJv5T,MAAQ,CACN01T,mBAAoB,I,EAUtB31E,gBAAkB,SAAC3wP,GACZA,EAAEugB,OAAOuqI,QAAQ,yBAChB9qJ,EAAEugB,OAAOuqI,QAAQ,iCACjB9qJ,EAAEugB,OAAOuqI,QAAQ,wBAA2B9qJ,EAAEugB,OAAOuqI,QAAQ,YACjE,EAAK31C,MAAMktJ,oB,EAwDf6kE,iBAAmB,SAACC,GAClB,IAAIC,EAAgBD,EAAc9hT,KAAKiB,WACnC8jT,EAAmB,GACvB,OAAQ,EAAKj1N,MAAM2sH,iBACjB,KAAK,UAAajwN,GAChBu4T,EAAmB,CAAC,qBAAsB,uBAAwB,2BAChE,yBAA0B,sBAAuB,sBACnD,MACF,IAAK,aACHA,EAAmB,CAAC,aAAc,SAAU,OAAQ,gBACpD,MACF,IAAK,QACHA,EAAmB,CAAC,aAAc,cAKtC,OAAOhD,EAAcv2T,QAAO,SAAAw2T,GAC1B,GAA0C,YAArCpkU,SAASC,SAASoC,gBAA6D,uBAA3B+hU,EAAWhiT,KAAKlV,QAEnD,KADL,IAAA6U,oBACJ/P,KACT,OAAO,EAGX,GAA0C,YAArChS,SAASC,SAASoC,gBAA6D,2BAA3B+hU,EAAWhiT,KAAKlV,QAEnD,KADL,IAAA6U,oBACJ/P,KACT,OAAO,EAIX,OAAOm1T,EAAiBpmU,SAASqjU,EAAWhiT,KAAKlV,Y,EAIrDk6T,qBAAuB,WACrB,OAAO,EAAA/jO,iBAAiB30F,KAAI,SAAA6vN,GAC1B,IAAMtgH,EAAS,CACb/0F,KAAMq1M,GAER,OAAQA,GACN,IAAK,MACHtgH,EAAOkhH,YAAc,gDACrB,MACF,IAAK,MACHlhH,EAAOkhH,YAAc,gDACrB,MACF,IAAK,OACHlhH,EAAOkhH,YAAc,iDAGzB,OAAOlhH,M,EAIXopN,qBAAuB,WACrB,IAIMhkT,GAJS,IAAAtB,oBACcm9E,wBAAwBxsF,MAAK,SAAA6T,GACxD,MAAwB,UAAjBA,EAAQ2C,QAEc9G,KAAKiB,WAEhCggT,EAAqB,GACnBiE,EAAoB,EAAKF,uBACzB9rE,EAAYj4O,EAAS3Q,MAAK,SAAA0xT,GAAA,MAAyC,eAA3BA,EAAWhiT,KAAKlV,UACxDmuP,EAAWh4O,EAAS3Q,MAAK,SAAA0xT,GAAA,MAAyC,cAA3BA,EAAWhiT,KAAKlV,UAO7D,OANIouP,IACFA,EAAU18B,cAAgB,SAExBy8B,IACFA,EAASz8B,cAAgB,SAEnB,EAAK1sH,MAAM2sH,iBACjB,IAAK,oBACHwkG,EAAqB/nE,EAAYA,CAACA,GAAb,qBAA2BgsE,IAAqBA,EACrE,MAEF,IAAK,mBACHjE,EAAqBhoE,EAAWA,CAACA,GAAZ,qBAAyBisE,IAAqBA,EACnE,MAEF,IAAK,yBACHjE,0BAAyBiE,GAAzB,CAA4CjsE,IAC5C,MAEF,IAAK,0BACHgoE,0BAAyBiE,GAAzB,CAA4ChsE,IAC5C,MAEF,IAAK,oBACH+nE,EAAqBiE,EAIzB,EAAKpjJ,SAAS,CACZm/I,wB,EAIJwB,uBAAyB,a,2GArKvBj+T,KAAKo+T,wBACDp+T,KAAKsrG,MAAMktJ,kBACbp/P,SAASytD,iBAAiB,QAAS7mD,KAAK8mP,mB,6CAatC9mP,KAAKsrG,MAAMktJ,kBACbp/P,SAAS8pG,oBAAoB,QAASljG,KAAK8mP,mB,8CAIvB,WAChB5rO,GAAS,IAAAC,oBACT88M,EAAkBj4N,KAAKsrG,MAAM2sH,gBACnC,GAAwB,sBAApBA,GACqB,2BAApBA,GACoB,4BAApBA,GACoB,sBAApBA,GACoB,qBAApBA,EAJL,CASA,IAAMqlG,EAAgBpiT,EAAOo9E,wBAAwBxsF,MAAK,SAAA6T,GACxD,OAAOA,EAAQ2C,OAAS21M,KAKpBklG,EAFaG,EAAc9hT,KAAKuD,aAELjT,MAAK,SAACmlE,GACrC,OAAOA,EAAK9qD,eAAkB8qD,EAAK3qE,SAAW,EAAKglG,MAAMqhH,aAAarmN,UAGpEi3T,EAAgBv9T,KAAKq9T,iBAAiBC,GAMpCP,EAAmBQ,EAAc5gT,WAAU,SAAAs0D,GAAA,OAAQA,EAAK3uD,OAAS66S,EAAYthT,YAC/EkhT,EAAmB,IACrBQ,GAAgB,IAAAvvO,SAAQuvO,EAAeR,EAAkB,IAG3DQ,EAAgBA,EAAcz1T,KAAI,SAAAmpE,GAKhC,OAJIA,EAAK3uD,OAAS,UAAata,KAE7BipE,EAAK4rP,YAAc,cAEd5rP,KAGTjxE,KAAKs9K,SAAS,CACZm/I,mBAAoBc,SAlCpBv9T,KAAKygU,yB,+BA6IA,WAEHnC,EAAoBt+T,KAAKsrG,MAAM0uJ,qBAAuB,GACtDh6P,KAAK+G,MAAM01T,mBAAmBhoU,QAAU,IAC1C6pU,EAAoB5pU,OAAO+2B,OAAO,GAAI6yS,EAAmB,CAACp0L,SAAS,WAJ9D,MAOwBlqI,KAAKsrG,MAA7B7wF,EAPA,EAOAA,KAAMtC,EAPN,EAOMA,eAEb,OACE,+BAAKyyE,UAAU,cAAcv2E,MAAOiqT,GAClC,+BAAK1zO,UAAU,uBACZ5qF,KAAK+G,MAAM01T,mBAAmB30T,KAAI,SAACwvN,GAClC,OAAKA,EAIH,kCAAQ9/N,IAAK8/N,EAASh1M,KACdw6J,QAAS,WACP,UAAU37I,eAAe,gBAAkBm2L,EAASh1M,MACpD,EAAKgpF,MAAM+rH,uBAAuBC,IAEpCx4C,cAAa,EAAKxzE,MAAM2sH,gBACxBsmG,YAAa,EAAKjzN,MAAMgvH,yBAA2B,kBAAM,EAAK2jG,uBAAuB3mG,IAAY,aACjG1sI,UAAW,6DACT0sI,EAASulG,aAAevlG,EAASh1M,MAAMhmB,cAAcqC,QAAQ,KAAK,MAC1E,gCAAMisF,UAAU,oCACb0sI,EAASiB,YACN,4CAAkBvwN,GAAIsvN,EAASiB,aAAejB,EAAS97M,KAAKE,eAC5D,IAAAI,qBAAoBw7M,EAAS97M,KAAMf,EAAMtC,KAf1C,c,kBAtMZ+pI,UAAY,CACjB+1E,gBAAiB,UAAUz1L,OAAOy2E,WAClC0zG,aAAc,UAAUh1N,OACxB0/N,uBAAwB,UAAUt4C,KAClCi7E,oBAAqB,UAAUriQ,OAC/BsiQ,oBAAqB,UAAU73G,KAC/Bk4E,yBAA0B,UAAUv7C,KACpCy5E,iBAAkB,UAAUz5E,M,cAiOjB,IAAAh3B,aACb,IAAAj8C,UATsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAIC,GAGzB,CAA6C26T,K,4MCrP1BhR,E,YACnB,WAAYxwO,EAASx4E,EAAQuV,IAAU,gGAC/BijE,IAD+B,OAErC,EAAKx4E,OAASA,EACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAWA,EAJqB,E,qEAQlClY,GACH,sGAAmBA,EAAW,IAAI2rT,GAAqB,EAAOtvT,KAAKsG,OAAQ3C,EAAU6M,c,yCAGpEqlC,EAASouC,GAC1B,OAAOjkF,KAAKuvT,yBAAyB15Q,EAASouC,O,GAhBlD,M,4BAEqBqrO,G,+ICFrB,SACA,QACA,Q,IACA,O,IAEA,M,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBztE,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAr+O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAKhY,cAAL,iBAGA,EAAK+wP,SAAW,KAChB,EAAKC,UAAY,KACjB,EAAKC,WAAa,KAClB,EAAKE,WAAa,KAClB,EAAK9sI,QAAU,KACf,EAAKgtI,cAAgB,KAErB,EAAK5zB,iBAAkB,EAhBX,E,qEAmBTx9N,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACHy/H,EAAkB,WAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,iBACHD,EAAkB,gBAClBC,YAGJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,2CAMT,OAAO,I,iCAGmB,WAAnB4uK,IAAmB,yDAC1B,OAAOvyK,KAAK+e,aACT/X,QAAO,SAAAiqE,GAIN,MAHoB,gBAAhBA,EAAK3qE,SACP2qE,EAAK1gD,QAAU0gD,EAAKvwE,YAAYwa,OAAOqmE,+BAA+BpnF,SAAS,MAE1E,EAAKs4K,kBAAkBxhG,EAAMshG,MAErCzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,6FAO1B+lP,GAAmB,IACnChoP,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACPjN,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACpBA,EAAYtmI,SAAW2uP,EAAkB3uP,QAAUsmI,EAAYO,8BACjB,gBAA5CP,EAAYO,6BACdP,EAAYlmD,oBAAqB,EACjCkmD,EAAYrmD,WAAWt5E,IAAoB,GACjC2/H,EAAYsoH,gBACtBtoH,EAAYO,4BAA4BC,4B,aArFzCplI,GAAK,Q,aADO65O,G,0JCXrB,O,WACA,M,IAEA,QACA,SACA,SACA,S,IACA,QACA,QACA,Q,IACA,OAEA,QACA,S,uDAEqB26E,G,6OAanBz1T,MAAQ,CACN01T,mBAAoB,I,EAUtB31E,gBAAkB,SAAC3wP,GACZA,EAAEugB,OAAOuqI,QAAQ,yBAChB9qJ,EAAEugB,OAAOuqI,QAAQ,iCACjB9qJ,EAAEugB,OAAOuqI,QAAQ,wBAA2B9qJ,EAAEugB,OAAOuqI,QAAQ,YACjE,EAAK31C,MAAMktJ,oB,EAUfwpE,8BAAgC,WAC9B,IAAMh6O,EAAS,EAAKjhF,MAAMuxF,sBAAsBxsF,MAAK,SAAAm2T,GAAA,MAA4B,WAAjBA,EAAQ3/S,QAClEq6S,EAAoB30O,EAAOxsE,KAAKwrK,aAChC39F,EAAarB,GAAUA,EAAOxsE,KAAK6tE,WACzC,OAAQA,GAAcA,EAAW1H,SAASltF,OAAU40F,EAAW1H,SAAS36E,QAAO,SAACigJ,GAC9E,OAAOA,EAAkBprI,SAAS1hB,SAASwiU,MACxC,CAAC,I,EAGRD,8BAAgC,WAC9B,IAAMxhT,GAAS,IAAAC,oBACT6sE,EAAS9sE,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IAE7Bk7R,EADShoR,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IACLk7R,iBACxBp0I,EAAiB5zI,EAAOsD,MAAM,EAAAixH,eAAeznI,IAG7CqhF,EADiBrB,EAAOvrE,WACI3Q,MAAK,SAACwrN,GACtC,MAAgC,gBAAzBA,EAAS97M,KAAKlV,UAEjBq2T,EAAoB30O,EAAOg/F,aAC7By1I,EAAqB,GAEzB,GAAI3tK,EAAe1lE,uBAAwB,CACzC,IACMf,EADyBymE,EAAeryI,WACG3Q,MAAK,SAACwrN,GACrD,MAAgC,uBAAzBA,EAAS97M,KAAKlV,UAEvBwoJ,EAAezmE,kBAAkB1G,SAASvjF,SAAQ,SAACoqF,GACjDi0O,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAI48D,EAAmB,CAC3D2vI,cAAe,QACfO,YAAa/vI,EAAyB3sE,SACtCghT,YAAar0O,EAAyB3sE,SACtCy8M,cAAc,EACdh2M,KAAMkmE,EAAyB3sE,SAAS1hB,SAAS,QAAU,YAAc,8BAGpEkvF,GAAcA,EAAW7tE,KAAKmmE,SAASltF,QAChD40F,EAAW7tE,KAAKmmE,SAASvjF,SAAQ,SAAC6oJ,GAC5BA,EAAkBprI,SAAS1hB,SAASwiU,KAEb,SAAnBz5B,GAA6C,IAAhBhoR,EAAO9P,MAAc67I,EAAkBprI,SAAS1hB,SAAS,SAC1FsiU,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAI49D,EAAY,CACpD2uI,cAAe,QACfO,YAAatxE,EAAkBprI,SAC/BghT,YAAa51K,EAAkBprI,SAC/By8M,cAAc,EACdh2M,KAAM2kI,EAAkBprI,SAAS1hB,SAAS,QAAU,YAAc,0BAO5E,IAAM4iU,EAAmBN,EAAmB9/S,WAAU,SAAAs0D,GACpD,OAAO69E,EAAe1lE,uBAClBnY,EAAKsnJ,cAAgBzpE,EAAezmE,kBAAkBliE,cAActK,SACpEo1D,EAAKsnJ,cAAgBlvI,EAAW7tE,KAAK2K,cAActK,YAGrDkhT,EAAmB,IACrBN,GAAqB,IAAAzuO,SAAQyuO,EAAoBM,EAAkB,IAGrE,EAAKz/I,SAAS,CACZm/I,wB,EAIJO,gBAAkB,WAChB,IAAM9hT,GAAS,IAAAC,oBACXshT,EAAqB,GAENvhT,EAAOsD,MAAM,UAAMxW,IACTyU,WAAWzV,QAAO,SAACswN,GAAD,MAAuC,eAAzBA,EAAS97M,KAAKlV,UACjElI,SAAQ,SAAC6+T,GACjBR,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAIwxS,EAAU,CAClDjlG,cAAe,QACfO,YAAa0kG,EAASzhT,KAAKK,SAC3BghT,YAAaI,EAASzhT,KAAKK,SAC3ByG,KAAM26S,EAAS36S,WAInB,IAAM4kG,EAAShsG,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAC7Bs8I,EAAmBp9B,EAAOzqG,WAAW3Q,MAAK,SAACwrN,GAC/C,MAAgC,sBAAzBA,EAAS97M,KAAKlV,UAEnBg+I,GACFm4K,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAI64H,EAAkB,CAC1D0zE,cAAe,SACfO,YAAaj0E,EAAiB9oI,KAAKK,SACnCghT,YAAav4K,EAAiB9oI,KAAKK,SACnCyG,KAAMgiI,EAAiBhiI,QAI3B,IAAI46S,EAAe,EAAK5xN,MAAMqhH,aAAavlI,OAErC+1O,EAAcV,EAAmB3wT,MAAK,SAAAmlE,GAC1C,OAAOA,EAAKz1D,KAAK2K,eAAiB8qD,EAAKz1D,KAAK2K,cAAc0gE,OAAS5V,EAAKz1D,KAAK2K,cAAc0gE,MAAMO,SAAW81O,KAE9G,GAAIC,GAAeA,EAAY3hT,MAAoC,sBAA5B2hT,EAAY3hT,KAAKlV,OAAgC,CACtF,IAAM82T,EAAel2M,EAAOzqG,WAAW3Q,MAAK,SAACwrN,GAC3C,MAAgC,kBAAzBA,EAAS97M,KAAKlV,UAEnB82T,GACFX,EAAmB1nU,KAAKL,OAAO+2B,OAAO,GAAI2xS,EAAc,CACtDplG,cAAe,SACfO,YAAa6kG,EAAa5hT,KAAKK,SAC/BghT,YAAaO,EAAa5hT,KAAKK,SAC/ByG,KAAM86S,EAAa96S,QAKzB,IAAMy6S,EAAmBN,EAAmB9/S,WAAU,SAAAs0D,GACpD,OAAOA,EAAKz1D,KAAK2K,eAAiB8qD,EAAKz1D,KAAK2K,cAAc0gE,OAAS5V,EAAKz1D,KAAK2K,cAAc0gE,MAAMO,SAAW81O,KAG1GH,EAAmB,IACrBN,GAAqB,IAAAzuO,SAAQyuO,EAAoBM,EAAkB,IAGrE,EAAKz/I,SAAS,CACZm/I,wB,EAyDJY,iBAAmB,SAACC,GAClB,IAAMpiT,GAAS,IAAAC,oBACXoiT,EAAgBD,EAAc9hT,KAAKiB,WAAWzV,QAAO,SAAA0V,GAAA,OAAWxB,EAAOo9E,sBAAsB57E,GAASjoB,UAE1G,IAAoC,WAA/B,EAAK62G,MAAM2sH,iBAA+D,qBAA/B,EAAK3sH,MAAM2sH,kBAAkE,uBAAvBqlG,EAAch7S,KAA+B,CACjJi7S,EAAgBA,EAAcv2T,QAAO,SAAAw2T,GACnC,OAAO,EAAKlyN,MAAM2uJ,oBACdujE,EAAWhiT,KAAK8rI,gBAA6C,cAA3Bk2K,EAAWhiT,KAAKlV,QACjDk3T,EAAWhiT,KAAK8rI,kBAEvB,IAAM+lC,EAAoBnyK,EAAOsD,MAAM,EAAAgpP,kBAAkBx/P,IACrDqlL,GAAqBA,EAAkBl9C,kBAAoB,EAAK7kC,MAAM2uJ,qBACrE5sE,EAAkB5wK,WAAWxc,MAAK,SAAAyc,GAAA,OAAWxB,EAAOo9E,sBAAsB57E,GAASjoB,YACtF8oU,EAAgBA,EAAcv2T,QAAO,SAAAw2T,GAAA,MAAyC,uBAA3BA,EAAWhiT,KAAKlV,WACrDvR,KAAK,CACjButB,KAAM,cACN9G,KAAM,GACNiiT,QAAQ,IAGZF,EAAgBA,EAAcv2T,QAAO,SAAAw2T,GAAA,MAAyC,gBAA3BA,EAAWhiT,KAAKlV,UAC/D4U,EAAOsD,MAAM,EAAAixH,eAAeznI,MAAQ,EAAKsjG,MAAM2uJ,qBACjDsjE,EAAcxoU,KAAK,CACjButB,KAAM,mBACN9G,KAAM,GACNiiT,QAAQ,IAiBd,MAZmC,WAA/B,EAAKnyN,MAAM2sH,kBACbslG,EAAgBA,EAAcv2T,QAAO,SAAAw2T,GAAA,MAAyC,cAA3BA,EAAWhiT,KAAKlV,WAElC,qBAA/B,EAAKglG,MAAM2sH,kBACbslG,EAAgB,EAAKG,qCAAqCH,EAAeD,EAAc9hT,KAAKs0H,YAE3D,WAA/B,EAAKxkC,MAAM2sH,kBACbslG,EAAgBA,EAAcv2T,QAAO,SAAC22T,GACpC,MAAoC,kBAA7BA,EAAaniT,KAAKlV,QAA2D,sBAA7Bq3T,EAAaniT,KAAKlV,WAItEi3T,G,EAGTG,qCAAuC,SAACH,EAAeK,GACrD,OAAOL,EAAcv2T,QAAO,SAAC22T,GAC3B,IAAIE,GAAe,EAYnB,OAXAnpU,OAAOmc,KAAP,sBAAgCzS,SAAQ,SAAC5G,GACnCmmU,EAAaniT,KAAKlV,SAAW,EAAA2yB,mBAAmBzhC,IAAQmmU,EAAaniT,KAAKlV,SAAWs3T,GACpFD,EAAaniT,KAAKlV,SAAW,EAAA2yB,mBAAmBE,iBAChDwkS,EAAaniT,KAAKlV,SAAW,EAAA2yB,mBAAmBC,gBAEnD2kS,GAAe,MAGO,uBAAtBF,EAAar7S,OACfu7S,GAAe,GAEVA,M,EAIXC,kBAAoB,SAACxmG,GACnB,IAAMp8M,GAAS,IAAAC,oBAEf,GAAsB,gBAAlBm8M,EAASh1M,KAAwB,CACnC,IAAMg7S,EAAgB,EAAKhyN,MAAMhT,sBAAsBxsF,MAAK,SAAA6T,GAC1D,MAAwB,uBAAjBA,EAAQ2C,QASjB,OAPA,EAAKg7J,SAAS,CACZm/I,mBAAoB,EAAKY,iBAAiBC,GACvCx1T,KAAI,SAAAuvG,GAEH,OADAA,EAAO2gH,cAAgB,qBAChB3gH,QAGN,EAGT,IAEMrvB,EAFiB9sE,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IAAIyU,WAEjB3Q,MAAK,SAACwrN,GAClC,MAAgC,gBAAzBA,EAAS97M,KAAKlV,UAEvB0hF,EAAOuwI,YAAc,SACrBvwI,EAAOgwI,cAAgB,SAEvB,IACM+lG,EADiB7iT,EAAOsD,MAAM,EAAAixH,eAAeznI,IACLyU,WAExCuhT,EAAqBD,EAAuB/2T,QAAO,SAAAswN,GAAA,OAAYA,EAAS97M,KAAK89N,eACnF0kF,EAAmB5/T,SAAQ,SAAAk5N,GAAA,OAAYA,EAASU,cAAgB,sBAEhE,IAAM3vI,EAAoB01O,EAAuBjyT,MAAK,SAACwrN,GACrD,MAAgC,uBAAzBA,EAAS97M,KAAKlV,UAEvB+hF,EAAkBkwI,YAAc,mBAChClwI,EAAkB2vI,cAAgB,mBAElC,EAAK16C,SAAS,CACZm/I,oBACEz0O,EACAK,GAFF,qBAGK21O,O,EAKTC,uBAAyB,SAAC3mG,GACxB,IAAMp8M,GAAS,IAAAC,oBACT+iT,EAAkC,eAAlB5mG,EAASh1M,KAAwB,aAAeg1M,EAASh1M,KACzEg7S,EAAgBhmG,EAASU,eAAiB,EAAK1sH,MAAM2sH,gBAErD/4M,EAAahE,EAAOwmE,uBAK1B,GAAIw8O,GAAiBZ,EAAe,CAElC,IAAIa,EAAgB,GAEpB,GAAsB,WAAlBb,EAA4B,CAC9B,IAAMt1O,EAAS9sE,EAAOsD,MAAMu7E,OAC5B,OAAQmkO,GACN,IAAK,eACHC,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOioK,KAC7C,MACF,IAAK,cAEDm8D,EADEn2O,EAAOiS,YAAcjS,EAAOiS,WAAWtY,SAASltF,OAClC,UAAE+pC,QAAQtf,GAAYo+S,GAAep6D,WAErC,UAAE1kO,QAAQtf,GAAYo+S,GAAetjS,MAEvD,MACF,IAAK,cACHmkS,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAep6D,WACrD,MACF,IAAK,SACHi7D,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAen6D,iBACrD,MACF,IAAK,aACL,IAAK,cACHg7D,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAe96D,eACrD,MACF,IAAK,sBACH27D,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAep7D,WACrD,MACF,IAAK,kBACHi8D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCykP,cAChD,MACF,IAAK,gBACHw6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCukP,YAChD,MACF,IAAK,QACH06D,EAAgBn2O,EAAO++D,oBACnB,UAAEvoH,QAAQtf,GAAYo+S,GAAeY,GACrC,UAAE1/R,QAAQtf,GAAYo+S,GAAe96D,eACzC,MACF,QACE27D,EAAgB,UAAE3/R,QAAQtf,GAAYo+S,GAAeY,SAGpD,GAAsB,qBAAlBZ,EACT,OAAQY,GACN,IAAK,cACHC,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOmpK,WAC7C,MACF,IAAK,eACHi7D,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOioK,KAC7C,MACF,IAAK,sBACHm8D,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOmoK,WAC7C,MACF,IAAK,UACHi8D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCojP,QAChD,MACF,IAAK,SACH67D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCikP,iBAChD,MACF,IAAK,qBACHg7D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCgkP,WAChD,MACF,IAAK,aACHi7D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASK,UACzD,MACF,IAAK,YACHg6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASE,MACzD,MACF,IAAK,cACHm6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASI,UACzD,MACF,IAAK,kBACHi6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASG,eACzD,MACF,IAAK,kBACHk6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCykP,cAChD,MACF,IAAK,gBACHw6D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgCukP,YAChD,MACF,QACE06D,EAAgB,UAAE3/R,QAAQtf,GAAV,OAAgC4kP,SAASo6D,EAAcv/T,QAAQ,KAAM,UAGpF,GAAsB,WAAlB2+T,EACT,GAAIpiT,EAAOsD,MAAMqsH,OAAOqZ,iBAAmB,EAAAtqH,YAAYC,SACrD,OAAQqkS,GACN,IAAK,SACHC,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAOhxG,SAASo4I,QACtD,MACF,IAAK,cACHksJ,EAAgB,UAAE3/R,QAAQtf,GAAYoiP,mBACtC,MACF,QACE68D,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAOqzL,QAIjD,OAAQA,GACN,IAAK,cACHC,EAAgB,UAAE3/R,QAAQtf,GAAYoiP,mBACtC,MACF,IAAK,aACH68D,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAO65H,iBAC7C,MACF,QACEy5D,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAOqzL,QAI9C,GAAsB,YAAlBZ,EAEPa,EADoB,YAAlBD,EACc,UAAE1/R,QAAQtf,GAAYkoP,QAAQE,YACnB,YAAlB42D,EACO,UAAE1/R,QAAQtf,GAAYkoP,QAAQC,eAE9B,UAAE7oO,QAAQtf,GAAYkoP,QAAQ82D,QAE3C,GAAsB,UAAlBZ,EACT,OAAQY,GACN,IAAK,YACHC,EAAgB,UAAE3/R,QAAQtf,GAAY66E,OAAOwpK,SAC7C,MACF,IAAK,mBACH,IACMkU,EADav8P,EAAOsD,MAAM8+S,GACKl2K,uBAErC+2K,EAAqC,UADZ,IAAApyO,yBAAwB0rL,EAAkBpwH,oBAE/D,UAAE7oH,QAAQtf,GAAY66E,OAAO+oK,0BAC7B,UAAEtkO,QAAQtf,GAAY66E,OAAOqpK,kBACjC,MAEF,QACE+6D,EAAgB,UAAE3/R,QAAQtf,GAAY2rH,OAAOqzL,GAKnD,EAAK5yN,MAAMgvH,yBAAyB6jG,K,2GA9ctCn+T,KAAKo+T,wBACDp+T,KAAKsrG,MAAMktJ,kBACbp/P,SAASytD,iBAAiB,QAAS7mD,KAAK8mP,mB,6CAatC9mP,KAAKsrG,MAAMktJ,kBACbp/P,SAAS8pG,oBAAoB,QAASljG,KAAK8mP,mB,8CAqIvB,WAEhB5rO,GAAS,IAAAC,oBAEf,GAAmC,0BAA/Bnb,KAAKsrG,MAAM2sH,gBAGR,GAAmC,kBAA/Bj4N,KAAKsrG,MAAM2sH,gBAAf,CAKP,IAAMqlG,EAAgBt9T,KAAKsrG,MAAMhT,sBAAsBxsF,MAAK,SAAA6T,GAC1D,OAAOA,EAAQ2C,OAAS,EAAKgpF,MAAM2sH,mBAGjCl5M,EAAeu+S,EAAc9hT,KAAKuD,aACH,qBAA/B/e,KAAKsrG,MAAM2sH,kBACbl5M,0BAAmBu+S,EAAc9hT,KAAKuD,eAAtC,aAAuDu+S,EAAc9hT,KAAK6iT,2BAG5E,IAAInB,EAAel9T,KAAKsrG,MAAMqhH,aAAavlI,OACvCpnF,KAAKsrG,MAAMqhH,aAAavlI,SAAW,UAAE5oD,QAAQtjB,EAAOwmE,wBAAwBqY,OAAOkoK,QACrFi7D,EAAe,UAAE1+R,QAAQtjB,EAAOwmE,wBAAwBqY,OAAOioK,MAG/DhiQ,KAAKsrG,MAAMqhH,aAAavlI,SAAW,UAAE5oD,QAAQtjB,EAAOwmE,wBAAwBqY,OAAOooK,cAEnF+6D,EAAe,UAAE1+R,QAAQtjB,EAAOwmE,wBAAwBqY,OAAOmoK,YAEjE,IAAMi7D,EAAcp+S,EAAajT,MAAK,SAACmlE,GACrC,OAAQA,EAAK9qD,eAAiB8qD,EAAK9qD,cAAc0gE,MAAMO,SAAW81O,GAC5DjsP,EAAKx1C,gBAAkB/mC,OAAOmc,KAAKogE,EAAKx1C,gBAAgBx7B,MAAK,SAAAzI,GAC/D,OAAOy5E,EAAKx1C,eAAejkC,IAAQy5E,EAAKx1C,eAAejkC,GAAKqvF,OAAU5V,EAAKx1C,eAAejkC,GAAKqvF,MAAMO,SAAW81O,QAIlHK,EAAgBv9T,KAAKq9T,iBAAiBC,GAMpCP,EAAmBQ,EAAc5gT,WAAU,SAAAs0D,GAAA,OAAQA,EAAK3uD,OAAS66S,EAAYthT,YAC/EkhT,EAAmB,IACrBQ,GAAgB,IAAAvvO,SAAQuvO,EAAeR,EAAkB,IAG3D/8T,KAAKs9K,SAAS,CACZm/I,mBAAoBc,SAzCpBv9T,KAAKg9T,uBAHLh9T,KAAK08T,kC,+BAyTA,WAEH4B,EAAoBt+T,KAAKsrG,MAAM0uJ,qBAAuB,GAK1D,OAJ6C,IAAzCh6P,KAAK+G,MAAM01T,mBAAmBhoU,SAChC6pU,EAAoB5pU,OAAO+2B,OAAO,GAAI6yS,EAAmB,CAACp0L,SAAS,WAInE,+BAAKt/C,UAAU,cAAcv2E,MAAOiqT,GAClC,+BAAK1zO,UAAU,uBACZ5qF,KAAK+G,MAAM01T,mBAAmB30T,KAAI,SAACwvN,GAClC,OAAOA,EACL,kCAAQ9/N,IAAK8/N,EAASiB,aAAejB,EAASh1M,KACtCw6J,QAASw6C,EAASmmG,OACd,kBAAM,EAAKK,kBAAkBxmG,IAC7B,WACF,UAAUn2L,eAAe,gBAAkBm2L,EAASh1M,MACpD,EAAKgpF,MAAM+rH,uBAAuBC,IAEpCx4C,cAAa,EAAKxzE,MAAM2sH,gBACxBsmG,YAAa,EAAKjzN,MAAMgvH,yBAA2B,kBAAM,EAAK2jG,uBAAuB3mG,IAAY,aACjG1sI,UAAW,6DACT0sI,EAASulG,aAAevlG,EAASh1M,MAAMhmB,cAAcqC,QAAQ,KAAK,MACvD,qBAAlB24N,EAASh1M,KACR,+BAAKsoE,UAAU,sBACb,+BAAKA,UAAU,gCACf,+BAAKA,UAAU,yBAEf,KACJ,gCAAMA,UAAU,oCAAoC0sI,EAASiB,aAAejB,EAASh1M,OAErF,c,kBAlgBP4/H,UAAY,CACjB5pD,sBAAuB,UAAUjiF,MACjC4hN,gBAAiB,UAAUz1L,OAC3BmqL,aAAc,UAAUh1N,OACxB0/N,uBAAwB,UAAUt4C,KAClCi7E,oBAAqB,UAAUriQ,OAC/BsiQ,oBAAqB,UAAU73G,KAC/Bk4E,yBAA0B,UAAUv7C,KACpCy5E,iBAAkB,UAAUz5E,M,aAVXy9I,G,wGCfrB,O,OACA,O,IACA,M,IAEA,Q,IACA,Q,IACA,QAEA,QACA,QAEA,Q,IACA,S,mDAGA,IAiCM0F,EAAiB,SAAC52N,GAAU,IAEzB/sC,EAA+F+sC,EAA/F/sC,YAAaD,EAAkFgtC,EAAlFhtC,mBAAoB79D,EAA8D6qG,EAA9D7qG,SAAU42N,EAAoD/rH,EAApD+rH,uBAAwBiD,EAA4BhvH,EAA5BgvH,yBACnE5pH,EAAoBnyC,EAApBmyC,OAAQh1E,EAAY6iC,EAAZ7iC,SAHiB,GAIJ,IAAAylH,UAAS,CAACrvG,KAAM,EAAG5sC,IAAK,EAAG2sC,MAAO,IAJ9B,qBAIzBuoC,EAJyB,KAIjB+nP,EAJiB,QAKF,IAAAhhL,UAAS,IALP,qBAKzBrnG,EALyB,KAKhBsoR,EALgB,KAM1Br3B,GAAY,IAAA9qJ,QAAO,MAEnBykJ,EAAc,SAAC9jM,GACfxnG,SAASuzN,cAAgB/rH,EAAMlqF,OAAOuqI,QAAQ,eAAiB,EAAA9hH,iBAAiBhlC,SAASf,SAASuzN,aAAarmN,SAGnHg4D,EAAmB,CACjBoyC,QAAQ,EACR9vB,cAAe,OAInB,IAAA+gC,YAAU,WACR,IAAKpjD,EAAYmyC,OACf,OAAO,KAETyxN,EAvD2B,SAAC5jQ,EAAa7iC,EAAUj7B,GAAa,IAC3D6F,EAAyBi4D,EAAzBj4D,OAAQs6E,EAAiBriB,EAAjBqiB,cACR41B,GAAe,IAAAH,2BAA0B/vG,EAAQs6E,GAAjD41B,YAEH1kE,EAAOrxC,EAAW,MAAQi7B,EAASthB,EAAI,GACvClV,EAAMzE,EAAW,MAAQi7B,EAASrhB,EAAI,GACtCw3B,EAAQ,OAENwwR,EAAkB7rN,EAAY/hH,OAAS,EAAI,IAAM,IAEnD6tU,EAAmB,IAUvB,GATI9rN,EAAY/hH,OAAS,EACvB6tU,EAAmB,IACV9rN,EAAY/hH,QAAU,IAC/B6tU,EAAmB,MAEhB7hU,GAAaqxC,EAAO35C,OAAOwqD,WAAa0/Q,IAC3CvwR,EAAO,OACPD,EAAQ,IAELpxC,GAAayE,EAAM/M,OAAO+xD,YAAco4Q,EAAmB,CAC9D,IAAIC,EAAiB,GACjB/rN,EAAY/hH,OAAS,EACvB8tU,EAAiB,IACR/rN,EAAY/hH,QAAU,IAC/B8tU,EAAiB,KAEnBr9T,GAAYq9T,EAGd,MAAO,CAACzwR,OAAM5sC,MAAK2sC,SAyBP2wR,CAAuBjkQ,EAAa7iC,EAAUj7B,IAJ1C,IAKP+1G,GAAe,IAAAH,2BAA0B93C,EAAYj4D,OAAQi4D,EAAYqiB,eAAzE41B,YACP4rN,EAAW5rN,KACV,CAACj4C,EAAa7iC,EAAUj7B,IAI3B,IAAIgiU,EAAgBroP,EAKpB,OAJItgC,EAAQrlD,QAAU,IACpBguU,EAAgB/tU,OAAO+2B,OAAO,GAAI2uD,EAAQ,CAAC8vD,SAAU,WAIrD,+BAAK71H,MAAOouT,EAAe73O,UAAU,aAAao1D,IAAK+qJ,GACrD,mCAAQ/zM,KAAM0Z,EACN9lB,UAAWnqF,EAAW,oBAAsB,oBAC5C0qS,SAAUJ,EAAUv2L,QACpBw2L,UAAW,eACXI,YAAA,EACAC,eAAgB5qS,EAChBiiU,UAAW,CAAC,CACVjsU,KAAM,kBACNk9H,SAAS,EACTm3B,QAAS,CACP63K,SAAS,EACTC,aAAa,EACbC,QAAQ,EACRC,aAAc,WACdC,QAAS,OAGlB,gBAAGz3B,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB,cAE1B,+BAAK3gN,UAAU,IACb,mCAAmBo4O,YAAat+B,GAC9B,+BAAK95M,UAAU,IACb,mCAAuB9wC,QAASA,EACTsoR,WAAYA,EACZ9nG,yBAA0BA,EAC1BjD,uBAAwBA,aAWjE6qG,EAAehgL,UAAY,CACzBm1E,uBAAwB,UAAUt4C,KAClCu7C,yBAA0B,UAAUv7C,MAGtC,IASMuR,EAAqB,CACzBhyH,yC,WAGa,IAAAwtC,UAbS,SAACxzG,GAGvB,MAAO,CACLimE,YAHoBjmE,EAAM0zG,UAArBztC,YAIL99D,SAHiBnI,EAAMgR,YAAlB7I,YAW+B6vL,EAAzB,CAA6C4xI,I,8IC7I5D,Q,IACA,Q,IAEA,QACA,S,IACA,Q,IACA,S,IACA,Q,IACA,O,IACA,S,IACA,S,IACA,SACA,Q,IACA,S,IACA,SACA,Q,qDAEatjR,O,YAiBX,WAAY0sD,IAAO,gGACXA,IADW,SAZnBwpK,aAAc,IAAAhgO,qBAAsB,EAAApe,WAAWC,QAAU,EAAAD,WAAWyxO,SAYjD,EAXnB/8P,KAAO,EAAK0pQ,YAWO,EAVnB1gP,MAAQ,IAUW,EATnB34B,eAAiB,EAAAd,2BAA2BH,UASzB,EARnB0nO,gBAAkB,iBAQC,EAPnBlQ,cAAgB,YAOG,EANnBl9G,YAMmB,uBALnB6tH,YAKmB,eAJnBqjE,iBAAmB,GAIA,EAHnB/+M,SAAW,UAASzoD,QAGD,EAFnBo/N,yBAA2B,CAAC,SAAU,gBAAiB,cAIrD,EAAKp/O,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAWxW,IAAM,IAAI,EAAJ,QAC5B,EAAKwW,MAAM,UAAgBxW,IAAM,IAAI,EAAJ,QACjC,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvBtT,OAAOyhB,OAAO,EAAKqI,OAAOpgB,SAAQ,SAAAod,GAAA,OAAQA,EAAKN,OAAL,KARzB,E,uFAWoB,IAAlB9P,EAAkB,uDAAXpL,KAAKoL,KAC/B,OAAO,2BAAmBA,K,qDAI1B,OAAO,EAAA2sB,mBAAmB/3B,KAAK0hF,0B,8CAGTzsB,GACtB,IAAM+sO,EAAchiS,KAAKwe,MAAM,UAAMxW,IAC/B1B,GAAS,aAAU2uD,GACrB23E,EAAco1J,EAAYjjR,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAMtF,OALKsmI,KACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ2uD,IACzCv0D,UAAY,kBAAMshS,GAC9BA,EAAYjjR,aAAahqB,KAAK63I,IAEzB,IAAI,EAAJ,QAAyBA,EAAY/wH,SAAU+wH,O,2NC5DrC0iL,E,YACnB,WAAYxwO,EAASx4E,EAAQuV,IAAU,gGAC/BijE,IAD+B,OAErC,EAAKx4E,OAASA,EACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAWA,EAJqB,E,qEAQlClY,GACH,sGAAmBA,EAAW,IAAI2rT,GAAqB,EAAOtvT,KAAKsG,OAAQ3C,EAAU6M,c,yCAGpEqlC,EAASouC,GAC1B,OAAOjkF,KAAKuvT,yBAAyB15Q,EAASouC,O,GAhBlD,O,4BAEqBqrO,G,yICFrB,O,WACA,MACA,OACA,OAEA,Q,IACA,OACA,QACA,Q,uDAEMgR,G,6OAYJv5T,MAAQ,CACN01T,mBAAoB,I,EAUtB31E,gBAAkB,SAAC3wP,GACZA,EAAEugB,OAAOuqI,QAAQ,yBAChB9qJ,EAAEugB,OAAOuqI,QAAQ,iCACjB9qJ,EAAEugB,OAAOuqI,QAAQ,wBAA2B9qJ,EAAEugB,OAAOuqI,QAAQ,YACjE,EAAK31C,MAAMktJ,oB,EAwDf6kE,iBAAmB,SAACC,GAClB,IAAIC,EAAgBD,EAAc9hT,KAAKiB,WACnC8jT,EAAmB,GACvB,OAAQ,EAAKj1N,MAAM2sH,iBACjB,IAAK,gBACHsoG,EAAmB,CAAC,qBAAsB,uBAAwB,2BAChE,yBAA0B,sBAAuB,sBACnD,MACF,IAAK,aACHA,EAAmB,CAAC,aAAc,SAAU,OAAQ,gBACpD,MACF,IAAK,QACHA,EAAmB,CAAC,aAAc,cAKtC,OAAOhD,EAAcv2T,QAAO,SAAAw2T,GAAA,OAAc+C,EAAiBpmU,SAASqjU,EAAWhiT,KAAKlV,Y,EAGtFk6T,qBAAuB,WACrB,OAAO,EAAA/jO,iBAAiB30F,KAAI,SAAA6vN,GAC1B,IAAMtgH,EAAS,CACb/0F,KAAMq1M,GAER,OAAQA,GACN,IAAK,MACHtgH,EAAOkhH,YAAc,gDACrB,MACF,IAAK,MACHlhH,EAAOkhH,YAAc,gDACrB,MACF,IAAK,OACHlhH,EAAOkhH,YAAc,iDAGzB,OAAOlhH,M,EAIXopN,qBAAuB,WACrB,IAIMhkT,GAJS,IAAAtB,oBACcm9E,wBAAwBxsF,MAAK,SAAA6T,GACxD,MAAwB,UAAjBA,EAAQ2C,QAEc9G,KAAKiB,WAEhCggT,EAAqB,GACnBiE,EAAoB,EAAKF,uBACzB9rE,EAAYj4O,EAAS3Q,MAAK,SAAA0xT,GAAA,MAAyC,eAA3BA,EAAWhiT,KAAKlV,UACxDmuP,EAAWh4O,EAAS3Q,MAAK,SAAA0xT,GAAA,MAAyC,cAA3BA,EAAWhiT,KAAKlV,UAO7D,OANIouP,IACFA,EAAU18B,cAAgB,SAExBy8B,IACFA,EAASz8B,cAAgB,SAEnB,EAAK1sH,MAAM2sH,iBACjB,IAAK,oBACHwkG,EAAqB/nE,EAAYA,CAACA,GAAb,qBAA2BgsE,IAAqBA,EACrE,MAEF,IAAK,mBACHjE,EAAqBhoE,EAAWA,CAACA,GAAZ,qBAAyBisE,IAAqBA,EACnE,MAEF,IAAK,yBACHjE,0BAAyBiE,GAAzB,CAA4CjsE,IAC5C,MAEF,IAAK,0BACHgoE,0BAAyBiE,GAAzB,CAA4ChsE,IAC5C,MAEF,IAAK,oBACH+nE,EAAqBiE,EAIzB,EAAKpjJ,SAAS,CACZm/I,wB,EAIJwB,uBAAyB,a,2GAtJvBj+T,KAAKo+T,wBACDp+T,KAAKsrG,MAAMktJ,kBACbp/P,SAASytD,iBAAiB,QAAS7mD,KAAK8mP,mB,6CAatC9mP,KAAKsrG,MAAMktJ,kBACbp/P,SAAS8pG,oBAAoB,QAASljG,KAAK8mP,mB,8CAIvB,WAChB5rO,GAAS,IAAAC,oBACT88M,EAAkBj4N,KAAKsrG,MAAM2sH,gBACnC,GAAwB,sBAApBA,GACqB,2BAApBA,GACoB,4BAApBA,GACoB,sBAApBA,GACoB,qBAApBA,EAJL,CASA,IAAMqlG,EAAgBpiT,EAAOo9E,wBAAwBxsF,MAAK,SAAA6T,GACxD,OAAOA,EAAQ2C,OAAS21M,KAKpBklG,EAFaG,EAAc9hT,KAAKuD,aAELjT,MAAK,SAACmlE,GACrC,OAAOA,EAAK9qD,eAAkB8qD,EAAK3qE,SAAW,EAAKglG,MAAMqhH,aAAarmN,UAGpEi3T,EAAgBv9T,KAAKq9T,iBAAiBC,GAMpCP,EAAmBQ,EAAc5gT,WAAU,SAAAs0D,GAAA,OAAQA,EAAK3uD,OAAS66S,EAAYthT,YAC/EkhT,EAAmB,IACrBQ,GAAgB,IAAAvvO,SAAQuvO,EAAeR,EAAkB,IAG3DQ,EAAgBA,EAAcz1T,KAAI,SAAAmpE,GAKhC,MAJkB,sBAAdA,EAAK3uD,OAEP2uD,EAAK4rP,YAAc,cAEd5rP,KAGTjxE,KAAKs9K,SAAS,CACZm/I,mBAAoBc,SAlCpBv9T,KAAKygU,yB,+BA8HA,WAEHnC,EAAoBt+T,KAAKsrG,MAAM0uJ,qBAAuB,GAK1D,OAJIh6P,KAAK+G,MAAM01T,mBAAmBhoU,QAAU,IAC1C6pU,EAAoB5pU,OAAO+2B,OAAO,GAAI6yS,EAAmB,CAACp0L,SAAS,WAInE,+BAAKt/C,UAAU,cAAcv2E,MAAOiqT,GAClC,+BAAK1zO,UAAU,uBACZ5qF,KAAK+G,MAAM01T,mBAAmB30T,KAAI,SAACwvN,GAClC,OAAKA,EAIH,kCAAQ9/N,IAAK8/N,EAASh1M,KACdw6J,QAAS,WACP,UAAU37I,eAAe,gBAAkBm2L,EAASh1M,MACpD,EAAKgpF,MAAM+rH,uBAAuBC,IAEpCx4C,cAAa,EAAKxzE,MAAM2sH,gBACxBsmG,YAAa,EAAKjzN,MAAMgvH,yBAA2B,kBAAM,EAAK2jG,uBAAuB3mG,IAAY,aACjG1sI,UAAW,6DACT0sI,EAASulG,aAAevlG,EAASh1M,MAAMhmB,cAAcqC,QAAQ,KAAK,MAC1E,gCAAMisF,UAAU,oCACd,4CAAkB5iF,GAAIsvN,EAASiB,aAAejB,EAAS97M,KAAKE,gBAbzD,c,kBArLZwmI,UAAY,CACjB+1E,gBAAiB,UAAUz1L,OAAOy2E,WAClC0zG,aAAc,UAAUh1N,OACxB0/N,uBAAwB,UAAUt4C,KAClCi7E,oBAAqB,UAAUriQ,OAC/BsiQ,oBAAqB,UAAU73G,KAC/Bk4E,yBAA0B,UAAUv7C,KACpCy5E,iBAAkB,UAAUz5E,M,cA4MjB,IAAAjzE,UANS,WACtB,MAAO,KAGkB,GAEZ,CAA6Cw0N,I,4MC7NvChR,E,YACnB,WAAYxwO,EAASx4E,EAAQuV,IAAU,gGAC/BijE,IAD+B,OAErC,EAAKx4E,OAASA,EACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAWA,EAJqB,E,qEAQlClY,GACH,sGAAmBA,EAAW,IAAI2rT,GAAqB,EAAOtvT,KAAKsG,OAAQ3C,EAAU6M,c,yCAGpEqlC,EAASouC,GAC1B,OAAOjkF,KAAKuvT,yBAAyB15Q,EAASouC,O,GAhBlD,M,4BAEqBqrO,G,0MCwPN,WAAuC,IAA9BvoT,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMmL,YACT,IAAMs3S,EAAkBviS,EAAO7f,QAAQte,UACnC2gU,EAAiBn8T,EAAMxE,UAC3B,gBACE2gU,EAAiBA,EAAep7T,KAAI,SAAAq7T,GAClC,IAAMC,EAAoBH,EAAgBtmT,WAAU,SAAAyO,GAClD,OAAOA,EAAY/kB,aAAe88T,EAAc98T,cAC7C+kB,EAAY/kB,YAAY1C,UAAU2+B,KAAO6gS,EAAc98T,YAAY1C,UAAU2+B,IACzElX,EAAY/kB,YAAY1C,UAAU2+B,MAAQ6gS,EAAc98T,YAAY1C,UAAU2+B,IAC9ElX,EAAY/kB,YAAY1C,UAAUmF,mBAChCq6T,EAAc98T,YAAY1C,UAAUmF,mBACnCsiB,EAAY/kB,YAAY1C,UAAUmF,oBAAsBq6T,EAAc98T,YAAY1C,UAAUmF,sBAWxG,OATIs6T,GAAqB,IACnBD,EAAcl8T,UAAYg8T,EAAgBG,GAAmBn8T,SAC/Dk8T,EAAch6T,SAAW85T,EAAgBG,GAAmBj6T,UAAY,EACxEg6T,EAAcl8T,QAAUg8T,EAAgBG,GAAmBn8T,SAE3Dk8T,EAAch6T,UAAY85T,EAAgBG,GAAmBj6T,UAAY,EAE3E85T,EAAgBttU,OAAOytU,EAAmB,IAErCD,MAGX,IAAIt4S,EAAeA,GAAfA,qBAAmBq4S,IAAnB,aAAsCD,IAE1C,GAAIl8T,EAAM8rQ,sBAAsBp+Q,OAAQ,CACtC,IAAM+T,EAAey6T,EAAgBxuU,OACjCwuU,EAAgB,GAAGz6T,aACnBqiB,EAAap2B,OACXo2B,EAAa,GAAGriB,aAChB,EACNqiB,EAAew4S,EAA0Cx4S,EAAc9jB,EAAM8rQ,sBAAuBrqQ,EAAck4B,EAAO7f,QAAQwJ,kBAInI,OAFAQ,EAAey4S,EAAyB5iS,EAAO7f,QAAQlb,gBAAiBklB,GAEjEn2B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BxE,UAAWsoB,IAGf,KAAKrK,EAAM6N,mBACT,OAAO35B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BA,MAAO,UAGX,KAAKyZ,EAAMqL,4BACT,OAAOn3B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B8rQ,8CAA2B9rQ,EAAM8rQ,sBAAsB7rQ,QAAO,SAACqkB,GAC7D,OAAQA,EAAYhlB,YAAY1C,UAAUqE,KAAO04B,EAAO7f,QAAQza,SAASC,YAAY1C,UAAUqE,OADjG,CAII04B,EAAO7f,QAAQza,aAGvB,KAAKoa,EAAM+M,uBAET,OAAO74B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B6rQ,oBAAsB7rQ,EAAM6rQ,oBAAoB/0Q,OAAM,SAAA0lU,GAAA,OAAWA,EAAQ5/T,UAAUqE,KAAO04B,EAAO7f,QAAQxd,QAAQM,UAAUqE,MAAtG,wBACbjB,EAAM6rQ,qBADO,CACclyO,EAAO7f,QAAQxd,UAD7B,wBAEb0D,EAAM6rQ,wBAGlB,KAAKpyP,EAAMyL,qBAET,IAAIpB,0BAAmB9jB,EAAMxE,UAAUuF,KAAI,SAAC1B,GAC1C,GAAIA,EAAS4B,KAAO04B,EAAO7f,QAAQza,SAAS4B,GAC1C5B,EAAS+C,SAAWu3B,EAAO7f,QAAQ1X,SAC/Bu3B,EAAO7f,QAAQmL,oBAAsB1jB,OAAOC,UAAUnC,EAAS2U,uBACjE3U,EAAS2U,oBAAsB,WAE5B,GAAI3U,EAASslB,gBAAmBtlB,EAASslB,iBAAmBgV,EAAO7f,QAAQza,SAAS4B,GAAK,CAC9F,IAAMmB,EAAWu3B,EAAO7f,QAAQza,SAASC,YAAY1C,UAAU6nB,0BAC3DkV,EAAO7f,QAAQza,SAASC,YAAY1C,UAAU6nB,yBAAyBplB,EAASC,YAAY1C,UAAUqE,KACtG,EACJ5B,EAAS+C,SAAWA,EAAWu3B,EAAO7f,QAAQ1X,SAEhD,OAAO/C,OAOT,OALIW,EAAM8rQ,sBAAsBp+Q,SAC9Bo2B,EAAew4S,EAA0Cx4S,EAAc9jB,EAAM8rQ,sBAAuBnyO,EAAO7f,QAAQza,SAASoC,aAAck4B,EAAO7f,QAAQwJ,mBAE3JQ,EAAey4S,EAAyB5iS,EAAO7f,QAAQlb,gBAAiBklB,GAEjEn2B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BxE,UAAWsoB,IAIf,KAAKrK,EAAM8L,oBAET,IAAIzB,0BAAmB9jB,EAAMxE,UAAUuF,KAAI,SAAC1B,GAC1C,OAAQA,EAAS4B,KAAO04B,EAAO7f,QAAQza,SAAS4B,GAAM04B,EAAO7f,QAAQza,SAAWA,OAKlF,OAHKs6B,EAAO7f,QAAQwL,iBAClBxB,EAAey4S,EAAyB5iS,EAAO7f,QAAQlb,gBAAiBklB,IAEnEn2B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BxE,UAAWsoB,IAIf,KAAKrK,EAAM2L,iBAGT,IAAMq3S,EAAwBz8T,EAAMxE,UAAUoa,WAAU,SAACvW,GAAD,OAAcA,EAAS4B,KAAO04B,EAAO7f,QAAQza,SAAS4B,MAC1Gw7T,GAAyB,GAC3Bz8T,EAAMxE,UAAU5M,OAAO6tU,EAAuB,GAEhD,IAAI34S,0BAAmB9jB,EAAMxE,YAU7B,GATIwE,EAAM8rQ,sBAAsBp+Q,SAC9Bo2B,EAAew4S,EAA0Cx4S,EAAc9jB,EAAM8rQ,sBAAuBnyO,EAAO7f,QAAQza,SAASoC,aAAck4B,EAAO7f,QAAQwJ,mBAE3JQ,EAAey4S,EAAyB5iS,EAAO7f,QAAQlb,gBAAiBklB,GACpE44S,EAA+B18T,EAAMxE,aACvCsoB,EAAe64S,EAAuB74S,IAIpC6V,EAAO7f,QAAQza,UAAYs6B,EAAO7f,QAAQza,SAASE,SAAW,EAAAmD,cAAcC,MAAO,CACrF,IAAMi6T,EAA0B94S,EAAa5qB,MAAK,SAAAmrB,GAAA,OAAeA,EAAY9kB,SAAW,EAAAmD,cAAcC,SACjGi6T,IACH94S,EAAe+4S,EAA6B/4S,IAQhD,OAJAA,EAAeA,EAAa7jB,QAAO,SAACZ,GAClC,OAAQA,EAASslB,gBAAkBb,EAAa5qB,MAAK,SAAA4jU,GAAA,OAAMA,EAAG77T,KAAO5B,EAASslB,qBAGzEh3B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BxE,UAAWsoB,IAIf,KAAKrK,EAAMuM,mBACT,OAAOr4B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B8lB,iBAAkB6T,EAAO7f,QAAQgM,iBACjCC,sBAAuB4T,EAAO7f,QAAQiM,sBAAsBhlB,KAAI,SAACg8T,GAC/D,IAAMC,EAAwBh9T,EAAMxE,UAAUoa,WAAU,SAAAvW,GACtD,OAAOA,EAASC,YAAY1C,UAAUqE,KAAO87T,EAAqBz9T,YAAY1C,UAAUqE,MAK1F,OAHI+7T,GAAyB,IAC3BD,EAAqB36T,SAAWpC,EAAMxE,UAAUwhU,GAAuB56T,UAElE26T,KACN98T,QAAO,SAAAiqE,GACR,QAAyB,gBAAhBA,EAAK3qE,QACPo6B,EAAO7f,QAAQiM,sBAAsB7sB,MAAK,SAAAgxE,GAAA,MAAwB,yBAAhBA,EAAK3qE,gBAKpE,KAAKka,EAAM0M,kBACX,KAAK1M,EAAM6M,eACX,KAAK7M,EAAMmhD,0BACX,KAAKnhD,EAAMohD,0BACX,KAAKphD,EAAMqhD,uCACX,KAAKrhD,EAAMuhD,oCACX,KAAKvhD,EAAMwhD,2BACX,KAAKxhD,EAAMyhD,4BACX,KAAKzhD,EAAM4hD,sBACX,KAAK5hD,EAAM6hD,aACX,KAAK7hD,EAAMiiD,kBACX,KAAKjiD,EAAM8hD,qBACX,KAAK9hD,EAAMgiD,kBACT,OAAO9tE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMmN,aACL+S,EAAO7f,QAAQze,WAAas+B,EAAO7f,QAAQze,UAAUG,YACvDm+B,EAAO7f,QAAQze,UAAUG,UAAY+gU,EAAyB5iS,EAAO7f,QAAQlb,gBAAiB+6B,EAAO7f,QAAQze,UAAUG,YAGzH,IAAIswQ,EAAwBnyO,EAAO7f,QAAQze,WAAas+B,EAAO7f,QAAQze,UAAUywQ,sBAC7EnyO,EAAO7f,QAAQze,UAAUywQ,sBACzB,GAQJ,OAPKA,GAAyBA,EAAsBp+Q,QAAWsS,EAAM8rQ,sBAAsBp+Q,UACzFisC,EAAO7f,QAAQze,UAAUywQ,sBAAzB,wBAAqDA,IAArD,aAA+E9rQ,EAAM8rQ,sBAAsB7rQ,QAAO,SAACqkB,GACjH,OAAQwnP,EAAsB5yQ,MAAK,SAAA+jU,GAAA,OAASA,EAAM39T,YAAY1C,UAAUqE,KAAOqjB,EAAYhlB,YAAY1C,UAAUqE,WAGnH04B,EAAO7f,QAAQze,UAAUG,UAAY8gU,EAA0C3iS,EAAO7f,QAAQze,UAAUG,UAAWm+B,EAAO7f,QAAQze,UAAUywQ,sBAAuB,EAAGnyO,EAAO7f,QAAQwJ,mBAEhL31B,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,QAAQze,UADb,CAEL6hU,sBAAsB,EACtB5zJ,2BAA2B,KAG/B,KAAK7vJ,EAAMmM,WACT,uBAAW5lB,EAAX,CAAkBxE,UAAW,KAC/B,KAAKie,EAAMiN,oBACT,uBAAW1mB,EAAX,CAAkBk9T,qBAAsBvjS,EAAO7f,QAAQ2M,OACzD,KAAKhN,EAAM0Q,aACT,uBAAWnqB,EAAX,CAAkBm9T,eAAgBxjS,EAAO7f,QAAQ2M,KAAM22S,gBAAiBzjS,EAAO7f,QAAQkQ,WACzF,KAAKvQ,EAAM2hD,oCACT,IAAMiiQ,EAA0BA,GAA1BA,qBAA8Br9T,EAAMq9T,0BAY1C,OAXA1jS,EAAO7f,QAAQte,UAAUnE,SAAQ,SAAAgI,GAC/B,IAAM01L,EAAWsoI,EAAwBt4T,MAAK,SAAAH,GAAA,OAASA,EAAM3D,KAAO5B,EAAS4B,MACzE8zL,EACFA,EAAS3yL,UAAY/C,EAAS+C,SAE9Bi7T,EAAwBrvU,KAAK,CAC3BiT,GAAI5B,EAAS4B,GACbmB,SAAU/C,EAAS+C,eAIzB,gBAAWpC,EAAX,CAAkBq9T,4BAEpB,KAAK5jT,EAAMy6C,gBACX,KAAKz6C,EAAM08C,qBACT,OAAOn2D,EAAMoqK,qBAAN,gBAAgCpqK,EAAhC,CAAuCoqK,oBAAqB,OAAQpqK,EAC7E,KAAKyZ,EAAMm8C,yBACT,OAAQ51D,EAAMoqK,qBAAwBzwI,EAAO7f,QAAQ67C,oBAAuBh8B,EAAO7f,QAAQpgB,SAC/CsG,GADrC,gBACCA,EADD,CACQoqK,oBAAqB,OACtC,KAAK3wJ,EAAM27C,wBACT,OAAQp1D,EAAMoqK,sBAAwBzwI,EAAO7f,QAAQu7C,mBAA9C,gBAAuEr1D,EAAvE,CAA8EoqK,oBAAqB,OAAQpqK,EACpH,KAAKyZ,EAAM0D,wBAET,OAAQnd,EAAMoqK,sBAAwBzwI,EAAO7f,QAAQkD,iBAA9C,gBAAqEhd,EAArE,CAA4EoqK,oBAAqB,OAAQpqK,EAClH,KAAKyZ,EAAMwF,2CAET,OAAOjf,EAAMoqK,sBAAwBzwI,EAAO7f,QAAQoF,YAA7C,gBAA8Dlf,EAA9D,CAAqEoqK,oBAAqB,OAAQpqK,EAC3G,KAAKyZ,EAAM6kD,uBACX,KAAK7kD,EAAM8kD,2BACT,IAAImrP,EAAW1pT,EACf,GAAIA,EAAM8rQ,sBAAsBp+Q,OAAQ,CACtC,IAAIo2B,EAAe9jB,EAAMxE,UACzBsoB,EAAew4S,EAA0Cx4S,EAAc9jB,EAAM8rQ,sBAAuBnyO,EAAO7f,QAAQ7T,WAAY0zB,EAAO7f,QAAQwJ,kBAC9IomS,mBAAe1pT,EAAf,CAAsBxE,UAAWsoB,IAKnC,OAHK6V,EAAOt1B,OAASoV,EAAM6kD,wBAA2Bt+D,EAAMoqK,sBAC1Ds/I,mBAAe1pT,EAAf,CAAsBoqK,oBAAqB,QAEtCs/I,EAET,KAAKjwS,EAAM+hD,eAKT,OAJKx7D,EAAMs9T,mBACTt9T,EAAMs9T,kBAAmB,GAE3Bt9T,EAAMY,SAAW+4B,EAAO7f,QAAQmxJ,UACzBjrK,EAIX,OAAOA,GArfT,I,IAAA,OAEYyZ,E,wJAAZ,O,IACA,QACA,QACA,SACA,QACA,QACA,SACA,Q,mDAEA,IAAMwoP,EAAe,CACnBzmQ,UAAW,GACXswQ,sBAAuB,GACvBhmP,kBAAkB,EAClBC,sBAAuB,GACvBG,mBAAmB,EACnBG,aAAc,GACdwlP,oBAAqB,GACrBqxD,sBAAsB,EACtB5zJ,2BAA2B,EAC3B6zJ,gBAAgB,EAChBC,gBAAiB,KACjBp9T,MAAO,SACPwpK,kBAAkB,EAClBE,4BAA4B,EAC5BQ,4BAA6B,EAC7BE,oBAAqB,KACrBE,qBAAsB,GACtB+yJ,wBAAyB,GACzBz8T,QAAS,EACT8pK,gBAAgB,EAChB4yJ,kBAAkB,EAClBniU,aAAc,GACdyP,YAAa,IAGmB2yT,EAArBA,mBAAqB,CAAC,CACjC7tU,KAAM,MACN8tU,UAAW,wBACV,CACD9tU,KAAM,SACN8tU,UAAW,2EACV,CACD9tU,KAAM,KACN8tU,UAAW,qbAEyBC,EAAzBA,uBAAyB,CAAC,MAAO,SAAU,MAExD,SAASnB,EAA0C9gU,EAAWswQ,GAA2D,IAApCrqQ,EAAoC,uDAArB,EAAG6hB,EAAkB,aAiBvH,OAhBA9nB,EAAYA,EAAUyE,QAAO,SAAAZ,GAC3B,OAAQysQ,EAAsB5yQ,MAAK,SAAAwkU,GACjC,OAAQr+T,EAASC,YAAY1C,UAAUqE,KAAOy8T,EAAqBp+T,YAAY1C,UAAUqE,IACnF5B,EAASoC,eAAiBA,QAGpCqqQ,EAAsBz0Q,SAAQ,SAACqmU,GAAyB,OACvB,aAA8BA,EAAqBp+T,YAAa9D,EAAWiG,EAAc6hB,GAAjHlhB,EAD+C,EAC/CA,SAD+C,EACrC+rM,aAEf3yM,0BAAgBA,GAAhB,CAA2B7N,OAAO+2B,OAAO,GAAIg5S,EAAsB,CACjEt7T,WACAX,eACAR,GAAI,UAAKqa,aAIR9f,EAGT,SAASqhU,EAA6BrhU,GAOpC,OANAA,EAAYA,EAAUuF,KAAI,SAAC1B,GAIzB,OAHkC,IAA9BA,EAAS6C,mBACX7C,EAAS6C,iBAAmB,MAEvB7C,KAKX,IA0DMk9T,EAA2B,SAAC39T,EAAiBpD,GAWjD,OAjBmC,SAACoD,GACpC,OAAOA,GAAmBA,EAAgB+B,SAASs/H,cAC7CrhI,EAAgBshI,4BAA8BthI,EAAgBuhI,oBAC1B,YAArC9tI,SAASC,SAASoC,gBAAqE,YAArCrC,SAASC,SAASoC,eAIrEipU,CAA6B/+T,KAI3BA,EAAgB0S,QAClB9V,EAhEgC,SAACA,EAAWuP,GAEhD,IAAM6yT,GADNpiU,EAAYA,EAAUyE,QAAO,SAAA2E,GAAA,OAAUA,EAAMs8I,oBACXjhJ,QAAO,SAAA2E,GAAA,OAAS,EAAA+wF,iBAAiBviG,SAASwR,EAAMrF,WAKlF,GAAIq+T,EAAgBlwU,OAAQ,CAC1B,IAAMs1S,EAAgB46B,EAAgBrjU,QAAQ,SAACsjU,EAAaj5T,GAAd,OAAwBi5T,EAAcj5T,EAAMxC,WAAW,GACrG,GAAI4gS,GALe,GAMjBxnS,EAAUxN,MAAK,IAAA27K,0BAAyBi0J,EAAgB,IAAI,SACvD,GAAK56B,GAAkB86B,IAAuB96B,GAAkB+6B,GAAqB,CAC1F,IAAIC,EAA0BJ,EAAgB,GAC9CA,EAAgBvmU,SAAQ,SAAAuN,GACtB,IAAIq5T,GAAyB,IAAA33T,yBAAwB03T,EAAwB1+T,YAAayL,GAAsBizT,EAAwB57T,UACrH,IAAAkE,yBAAwB1B,EAAMtF,YAAayL,GAAsBnG,EAAMxC,SACvE67T,IACjBD,EAA0Bp5T,MAG9BpJ,EAAUxN,MAAK,IAAA27K,0BAAyBq0J,GAAyB,EAf9C,GAesEh7B,KAI7F,OAAOxnS,EAwCS0iU,CAA8B1iU,EAAWoD,EAAgB+B,UAC5D/B,EAAgB2S,eAAwD,UAAtC3S,EAAgB+B,SAASumH,WACpE1rH,EAvC+B,SAACA,GAGpC,IAAMoiU,GADNpiU,EAAYA,EAAUyE,QAAO,SAAA2E,GAAA,OAAUA,EAAMs8I,oBACXjhJ,QAAO,SAAA2E,GAAA,OAAS,EAAA+wF,iBAAiBviG,SAASwR,EAAMrF,WAC9E4+T,EAAoB,GACxBP,EAAgBvmU,SAAQ,SAAAuN,GACjBu5T,EAAkB/qU,SAASwR,EAAMtF,YAAY1C,UAAUmF,oBAC1Do8T,EAAkBnwU,KAAK4W,EAAMtF,YAAY1C,UAAUmF,sBAevD,OAVIo8T,EAAkBzwU,QACpBywU,EAAkB9mU,SAAQ,SAAA+mU,GACxB,IAAMC,EAAgBT,EAAgB39T,QAAO,SAAA2E,GAAA,OAASA,EAAMtF,YAAY1C,UAAUmF,oBAAsBq8T,KAClGp7B,EAAgBq7B,EAAc9jU,QAAQ,SAACsjU,EAAaj5T,GAAd,OAAwBi5T,EAAcj5T,EAAMxC,WAAW,GAC/F4gS,EANkB,IAOpBxnS,EAAUxN,MAAK,IAAA27K,0BAAyB00J,EAAc,IAAI,EAPtC,GAOiEr7B,OAKpFxnS,EAiBS8iU,CAA6B9iU,KAGtCA,GAQIkhU,EAAiCA,EAAjCA,+BAAiC,SAAClhU,GAC7C,OAAOA,EAAUtC,MAAK,SAAAmG,GACpB,OAAOA,EAASC,aAAe,EAAAN,iBAAkB,IAAAC,gBAAeI,EAASC,YAAY1C,eASnF+/T,EAAyB,SAACnhU,GAAc,2BAC5C,IAD4C,IAC5C,EAD4C,iBACjC6D,EADiC,QAE1C,GAAI,EAAAL,iBAAkB,IAAAC,gBAAeI,EAASC,YAAY1C,WACxD,iBAEF,IAAM2hU,EAAkB/iU,EAAUyE,QAAO,SAAC2E,GACxC,IAAM45T,EAAoB55T,EAAMtF,YAAYmS,mBAAqBpS,EAASC,YAAYmS,iBAChF84R,EAAmB3lS,EAAM2lS,iBACzBC,EAAkC5lS,EAAM4lS,gCAC9C,OAAOg0B,IAAsBj0B,GAAoBC,OAE9B+zB,EAAgBx5T,MAAK,SAAA1F,GAAA,OAAYA,EAASkrS,qBACxClrS,EAASmrS,kCAC9BnrS,EAASkrS,kBAAmB,GAE1BlrS,EAASkrS,mBACXlrS,EAAS+C,SAAWm8T,EAAgBhkU,QAAO,SAAC+kL,EAAK16K,GAC/C,YAAqCqnD,IAA9BrnD,EAAMoP,oBACTpP,EAAMoP,oBAAsBsrK,EAC5B16K,EAAMxC,SAAWk9K,IACpB,KAnBP,EAAuB9jL,EAAvB,+CAAkC,IADU,6EAuB5C,OAAOA,I,+IC9LT,O,WACA,M,IACA,OACYke,E,wJAAZ,O,uDAEqB+kT,G,gBAsBnB,WAAYl6N,IAAO,gGACXA,IADW,SAoBnB10C,UAAY,WAIV,MAAO,CAACgkE,SAH4B5nE,IAAxB,EAAKs4C,MAAMm6N,SAAyB,EAAKn6N,MAAMm6N,SAAW,EAGzD5qM,SAFuB7nE,IAAxB,EAAKs4C,MAAMy9K,SAAyB,EAAKz9K,MAAMy9K,SAAW,QAtBrD,EA2BnB28C,gBAAkB,SAAC9kO,GACjB,GAAgB,MAAZA,EAAMppG,MAAc,EAAK8zG,MAAMq6N,cAEjC,OADA/kO,EAAM7V,kBACC,GA9BQ,EAkCnB66O,kBAAoB,SAAChlO,EAAOyW,GAC1B,IAAIngH,EAAQ,IAAMmgH,EAAS,EAAKtwG,MAAM7P,MAAQ0pG,GAASA,EAAMlqF,OAAOxf,OACpE,GAAIA,EAAMiD,SAAS,KAAM,CACvB,IAAK,EAAKmxG,MAAMq6N,cACd,OAAO,EAELzuU,EAAM6G,MAAM,KAAK,GAAGtJ,OAAS,IAC/ByC,GAASA,EAAM+H,UAAU,EAAG/H,EAAMzC,OAAS,IAG/CyC,GAASA,EACT,UAAUgqC,qBAAqB,iBAAkBhqC,GAXZ,MAYlB,EAAK0/D,YAAjBgkE,EAZ8B,EAY9BA,IAAKC,EAZyB,EAYzBA,IACR3jI,GAAS0jI,GAAO1jI,GAAS2jI,IAC3B3jI,EAAkB,IAAVA,EAAc,GAAKA,EAC3B,EAAKomL,SAAS,CAACpmL,UACf,EAAKo0G,MAAM63K,YAAYjsR,KAlDR,EAsDnBwuR,gBAAkB,SAACvvR,GACjB,IAAMe,GAASf,EAAEugB,OAAOxf,MADA,EAEL,EAAK0/D,YAAjBgkE,EAFiB,EAEjBA,IAAKC,EAFY,EAEZA,IACR3jI,GAAS0jI,GACX,EAAK0iD,SAAS,CAACpmL,UACf,EAAKo0G,MAAM63K,YAAYjsR,KAEvB,EAAKomL,SAAS,CAACpmL,MAAO,IACtB,EAAKo0G,MAAM63K,YAAY,IAErBjsR,EAAQ2jI,IACV,EAAKyiD,SAAS,CAACpmL,MAAO2jI,IACtB,EAAKvvB,MAAM63K,YAAYtoJ,KAlER,EAsEnBgrM,SAAW,WAET,GAAI,EAAKv6N,MAAM/lF,yBACb,MAAO,cAHM,MAMI,EAAKqxC,YAAjBgkE,EANQ,EAMRA,IAAKC,EANG,EAMHA,IACZ,OAAQ,EAAK9zH,MAAM7P,MAAQ0jI,GAAO,EAAK7zH,MAAM7P,OAAS2jI,EAAO,QAAU,QA3EvE,EAAK9zH,MAAQ,CACX7P,MAAOo0G,EAAMkkC,iBAAmBlkC,EAAMp0G,MACtC8qR,QAASvhQ,EAAK4B,MAJC,E,uIAYOu8J,GACpBA,EAAU1nL,QAAU8I,KAAK+G,MAAM7P,OACjC8I,KAAKs9K,SAAS,CACZpmL,MAAO0nL,EAAU1nL,U,+BAiEd,aACyB8I,KAAKsrG,MAA9BshM,EADA,EACAA,aAAck5B,EADd,EACcA,QACfr6N,EAAQzrG,KAAK6lU,WACnB,OACE,+BAAKj7O,UAAW,eAAiB6gB,EAAQ,iBAAmBA,EAAQ,IAAM,iBAAmBzrG,KAAKsrG,MAAMhoG,MACrGtD,KAAKsrG,MAAMp1D,MAAQ,gCAAM00C,UAAU,sBAAsB5qF,KAAKsrG,MAAMp1D,OAAgB,KACpFl2C,KAAKsrG,MAAM3qE,MAAQ,iCAAOolS,QAAS/lU,KAAK+G,MAAMi7Q,QAASp3L,UAAU,sBAAsB5qF,KAAKsrG,MAAM3qE,OAAiB,KACpH,+BAAKiqD,UAAW,qBACbgiN,EAAe,+BAAiC,KAChDk5B,EAAU,8BAAgC,KAC1Cl5B,EACG,KACC,kCAAQhiN,UAAU,+CACVkyF,QAAS,kBAAM,EAAK8oJ,mBAAmB,GAAG,KADlD,KAGL,iCAAOx6T,KAAK,SACLw/E,UAAU,oBACV1zF,MAAO8I,KAAK+G,MAAM7P,MAClB4+N,SAAU91N,KAAK4lU,kBACf1kO,UAAWlhG,KAAK0lU,gBAChB/lG,OAAQ3/N,KAAK0lR,gBACb19Q,GAAIhI,KAAK+G,MAAMi7Q,QACfgkD,SAAUp5B,IAChBA,EACG,KACC,kCAAQhiN,UAAU,8CACVkyF,QAAS,kBAAM,EAAK8oJ,kBAAkB,GAAI,KADlD,W,kBA7HN1jL,UAAY,CACjBhrJ,MAAO,UAAUirJ,UAAU,CAAC,UAAUvpC,OAAQ,UAAUp2E,SACxD0T,MAAO,UAAU1T,OACjB7B,MAAO,UAAU6B,OACjBl/B,KAAM,UAAUk/B,OAChB2gP,YAAa,UAAUpkG,KAAK9lE,WAC5BwsN,SAAU,UAAU7sN,OACpBmwK,SAAU,UAAUnwK,OACpB42B,gBAAiB,UAAU52B,OAC3Bg0L,aAAc,UAAUxqJ,KACxB78H,yBAA0B,UAAU68H,KACpC0jL,QAAS,UAAU1jL,KACnBujL,cAAe,UAAUvjL,M,EAGpB68B,aAAe,CACpB2tH,cAAc,EACdrnR,0BAA0B,G,aAnBTigT,G,iRCLrB,Q,IACA,M,IACA,OACA,SACA,SACA,QACA,SACA,S,IACA,QACA,Q,mDAEsCS,EAAzBA,wBAAA,gCAAyB,WAAOC,EAAwBr9D,GAA/B,qGAC9Bq9D,IAD8B,UAE9BxzM,EAAS,UAAMvwH,WAAW2S,UAAUyU,gBACtC70B,OAAOmc,KAAK6hH,GAAQj+H,SAAUC,OAAOmc,KAAK6hH,GAC3C1rH,QAAO,SAAAxP,GAAA,MAAe,UAARA,GAA2B,aAARA,KACjCyI,MAAK,SAAAzI,GAAA,OAAOk7H,EAAOl7H,IAAQk7H,EAAOl7H,GAAK/C,UALN,0CAM3B,GAN2B,cAQpC,IAAAmyB,gBACA,UAAUua,eAAe0nO,GATW,GAUV,IAAA/f,+BAAnBx0O,EAV6B,EAU7BA,SAAUpd,EAVmB,EAUnBA,MACjB,UAAUkqC,mBAAmB,gBAAiB,CAAC9sB,WAAUpd,UAXrB,WAaR,IAAA65P,aAbQ,eAa9Bo1E,EAb8B,QAcpC,IAAA7zO,iBAdoC,kBAe7B6zO,GAf6B,mDAAzB,+CAkBuBC,EAAvBA,sBAAA,gCAAuB,iGAClC,IAAAx/S,gBADkC,UAEP,IAAA6wE,WAAU,CAACC,QAAQ,EAAMC,aAAa,IAF/B,cAE5B0uO,EAF4B,WAIhC,IAAA5uH,8BACAr+M,SAASC,SAAS4b,MAAQoxT,EAAapxT,QAEzC,IAAAq9E,iBAPkC,kBAQ3B+zO,GAR2B,kDAAvB,4CAW4BC,EAA5BA,2BAAA,gCAA4B,WAAOJ,EAAwBr9D,EAAgBxX,GAA/C,yGACjC60E,IADiC,YAEnB,UAAM/jU,WAAnB2S,EAFgC,EAEhCA,UACD49G,EAAS59G,EAAUyU,gBACrB70B,OAAOmc,KAAK6hH,GAAQj+H,SAAUC,OAAOmc,KAAK6hH,GAC3C1rH,QAAO,SAAAxP,GAAA,MAAe,aAARA,KACdyI,MAAK,SAAAzI,GAAA,OAAOk7H,EAAOl7H,IAAQk7H,EAAOl7H,GAAK/C,UANH,0CAO9B,GAP8B,cASnCqgB,EAAU/T,UACZ,UAAMkjB,UAAS,IAAA6lN,oBAAmB,CAChCp/E,gBAAiB,CACfX,SAAUj1I,EAAU/T,SAASgpJ,SAC7BklB,SAAUn6J,EAAU/T,SAASkuK,SAC7B7hD,SAAUt4G,EAAU/T,SAASihC,UAAY,IAAMltB,EAAU/T,SAAS4tK,SAClE3kB,KAAMl1I,EAAU/T,SAASipJ,KACzBjjJ,MAAO+N,EAAU/T,SAASgG,MAC1Bm7B,OAAQptB,EAAU/T,SAASmhC,YAIjC,IAAAtb,gBACA,UAAUua,eAAe0nO,GAtBc,GAuBb,IAAA/f,+BAAnBx0O,EAvBgC,EAuBhCA,SAAUpd,EAvBsB,EAuBtBA,MACjB,UAAUkqC,mBAAmB,gBAAiB,CAAC9sB,WAAUpd,UAxBlB,WA0BN,IAAAu6P,cAAa,CAACJ,oCA1BR,eA0BjCk1E,EA1BiC,OA2BvCvuU,QAAQ4B,IAAI,0BAA2B2sU,IACvC,IAAAj0O,iBA5BuC,kBA6BhCi0O,GA7BgC,mDAA5B,iDAgC4BC,EAA5BA,2BAAA,gCAA4B,WAAON,EAAwBr9D,GAA/B,+FACjCq9D,IADiC,UAEjCO,EAAY,UAAMtkU,aAGjBonB,EAAkBk9S,EAAU3xT,UAA5ByU,gBAEYgY,QAAShY,EAAegY,MAAM9sC,OAPV,0CAQ9B,GAR8B,cAWvC,UAAU0sC,eAAe0nO,GAXc,UAYjC,IAAA3W,qBAZiC,kDAA5B,+CA7DN,IAAM,EAkBA,EAWA,EAgCA,EA8CA,EA9BAw0E,EAAoCA,EAApCA,kCAAoC,SAACh4J,EAAai4J,GAAqC,IAAnBxyH,EAAmB,wDASlG,GARIA,IACEwyH,EAAiBplS,QACnBmtI,EAAYntI,MAAQolS,EAAiBplS,OAEnColS,EAAiBv5M,WACnBshD,EAAY1sI,UAAY2kS,EAAiBv5M,WAGzCu5M,EAAiBnlS,MAAO,CAC1B,IAAMssI,EAAa64J,EAAiB5kS,SAAW4kS,EAAiB19E,SAAW09E,EAAiB19E,SAASlnN,QAAU,GADrF,EAEK,UAAK8rI,qBAAqB84J,EAAiBnlS,MAAOssI,GAA1E7rI,EAFmB,EAEnBA,YAAaF,EAFM,EAENA,QACpB2sI,EAAYzsI,YAAcA,EAC1BysI,EAAYltI,MAAQS,EAChBF,IACF2sI,EAAY3sI,QAAUA,GAY1B,OATI4kS,EAAiBpmF,SACnB,CAAC,WAAY,WAAY,SAAU,OAAQ,YAAYniP,SAAQ,SAAA5G,GACzDmvU,EAAiBpmF,QAAQ/oP,KAE3Bk3K,EADyB,aAARl3K,EAAsB,QAAUA,GAC1BmvU,EAAiBpmF,QAAQ/oP,OAItDk3K,EAAYu6E,SAAW09E,EAAiB19E,SACjCv6E,GAG0Bk4J,EAAtBA,qBAAA,gCAAsB,WAAOxvT,GAAP,sFAC5BA,GAAQA,EAAIE,aADgB,oDAI3B9b,EAAS4b,EAAIE,aAAaxgB,IAAI,KAJH,iEASzB89L,GAAep5L,EAAOuC,MAAM,KAAK,GATR,UAUA,IAAAs0P,iBAAgB,CAC7Cz9D,eAX6B,UAUzB+xI,EAVyB,0DAgBzBj4J,EAAcg4J,EAAkC,GAAIC,GAAkB,GAC5E,UAAM1iT,UAAS,IAAAmF,gBAAeslJ,IAC9B,UAAMzqJ,UAAS,IAAA+E,iBAAgB,CAC7BgB,gBAAgB,EAChB5U,wBAAwB,KApBK,kDAuB/Bpd,QAAQ4B,IAAI,2BAA4B4B,GAvBT,4DAAtB,8C,yGCtHb,O,WACA,M,IAGA,O,IACA,SAEA,QACA,O,mDAEA,IAAMqrU,EAAe,SAACv7N,GAAU,IAEvByvG,EACwCzvG,EADxCyvG,YAAa+rH,EAC2Bx7N,EAD3Bw7N,aAAcC,EACaz7N,EADby7N,gBAAiBC,EACJ17N,EADI07N,YAAaC,EACjB37N,EADiB27N,SAAU53J,EAC3B/jE,EAD2B+jE,aAAc63J,EACzC57N,EADyC47N,mBAAoBh4J,EAC7D5jE,EAD6D4jE,oBAC1G81G,EAA6C15K,EAA7C05K,gBAAiBptR,EAA4B0zG,EAA5B1zG,SAAU0L,EAAkBgoG,EAAlBhoG,KAAM6jU,EAAY77N,EAAZ67N,SAHL,GAIF,IAAAhmL,WAAS,GAJP,qBAIvBzwC,EAJuB,KAIf02N,EAJe,KAKxBC,GAAgB,IAAApnL,QAAO,OAE7B,IAAAS,iBAAgB2mL,GAAe,WAC7BD,GAAU,MAGZ,IAMME,EAAgB,WACpB,GAAIj4J,GAAgBH,GAAuBg4J,EAAoB,CAC7D,IAAMx0M,EAASw8C,EAAoBt3K,EAAUkvU,EAAa5vU,OAC1DgwU,mBACGtvU,EAAW86H,OAKlB,IAAA/Q,YAAU,WACHqjK,GACHsiD,MAGD,CAACtiD,IAEJ,IAAMuiD,EAAmBjkU,GAAQ,GAC3B82E,EAAS,CACbv6E,OAAQ6wG,EACJu2N,GAAalsH,EAAYtmN,OAASwyU,EAC/BA,EAAWM,EAAoB,KAC/BxsH,EAAYtmN,OAAS8yU,EAAoB,KAC5C,GAGAnhD,EAAc/2G,GAAgBznK,MAAMC,QAAQwnK,EAAaz3K,OAAgBy3K,EAAaz3K,GAAUnD,OAEtG,OACE,+BAAKm2F,UAAW,gBAAkB0gB,EAAM1gB,WAAa,KAChD8lB,EAAS,uBAAyB,KAClCptG,EAAO,iBAAmBA,EAAO,KACjC8iR,EAAc,sBAAwB,IAAKpmI,IAAKqnL,GAClDF,EACC,+BAAKv8O,UAAU,wEACb,gCAAMA,UAAU,+BACbk8O,GAAgBA,EAAaU,QAAU,gCAAM58O,UAAU,+BAA+Bk8O,EAAaU,SAAkB,KACrHR,EAAc,gCAAMp8O,UAAU,4BAA4Bo8O,GAAsB,KAChFF,EAAeA,EAAaxkT,KAAO,MAIxC,mCAAQsoE,UAAU,uEACV68O,QAAS,wCACT3qJ,QAAS,kBAAMsqJ,GAAW12N,KAClC,gCAAM9lB,UAAU,+BACbk8O,GAAgBA,EAAaU,QAAU,gCAAM58O,UAAU,+BAA+Bk8O,EAAaU,SAAkB,KACrHR,EAAc,gCAAMp8O,UAAU,4BAA4Bo8O,GAAsB,KAChFF,EAAeA,EAAaxkT,KAAO,MAIvC6kT,EAAW,KACV,+BAAKv8O,UAAU,uBAAuBv2E,MAAO+lE,GAC3C,8BAAIwQ,UAAW,8BAAgCq8O,EAAW,sCAAwC,KAC/FlsH,EAAYjzM,KAAI,SAAC45R,EAAYgmC,GAC5B,IAAMC,EAAajmC,EAAWxqS,QAAU4vU,EAAa5vU,MACrD,OACE,8BAAI0zF,UAAU,kCACVpzF,IAAKkqS,EAAWp/Q,KAAOolT,GACzB,mCAAQ98O,UAAU,gFACVkyF,QAAS,kBAlEH,SAAC4kH,EAAYgmC,GACzCX,EAAgBrlC,EAAYgmC,GAC5BN,GAAU,GACVE,IA+DqCM,CAAsBlmC,EAAYgmC,KACzD,gCAAM98O,UAAW,+BAAiC+8O,EAAa,uCAAyC,KACrGjmC,GAAcA,EAAW8lC,QACxB,wCACG9lC,EAAW8lC,QAAU,IACtB,sCAAS9lC,EAAW/gQ,QAEpB,KACH+gQ,EAAaA,EAAWp/Q,KAAO,YAS7C8jQ,EACC,+BAAKx7L,UAAU,8FACb,4CAAkB5iF,GAAIqnK,EAAaz3K,GAAU,MAE7C,KAKVivU,EAAa3kL,UAAY,CACvB64D,YAAa,UAAU7hG,QAAQ,UAAUt/D,MAAM,CAC7Ct3B,KAAM,UAAUkgB,OAAOy2E,WACvB/hH,MAAO,UAAU40M,IAAI7yF,WACrBuuN,QAAS,UAAUhlS,UACjBy2E,WACJ8tN,gBAAiB,UAAUhoJ,KAAK9lE,WAChC6tN,aAAc,UAAUnvU,OACxBqvU,YAAa,UAAUxkS,OACvBooD,UAAW,UAAUpoD,OACrBykS,SAAU,UAAUruN,OACpBt1G,KAAM,UAAUs1G,OAChBuuN,SAAU,UAAU/kL,KAEpBxqJ,SAAU,UAAU4qC,OACpBwiP,gBAAiB,UAAU5iI,KAC3BitB,aAAc,UAAU13K,OACxBuvU,mBAAoB,UAAUnoJ,KAC9B7P,oBAAqB,UAAU6P,M,UAGlB8nJ,G,8ECtIf,I,IAAA,MACA,O,IACA,MACA,OAEA,Q,mDAEA,IAAMgB,EAAiB,SAACv8N,GAAU,IAEzB3S,EAA2C2S,EAA3C3S,YAAa7mF,EAA8Bw5F,EAA9Bx5F,mBAAoBu1R,EAAU/7L,EAAV+7L,OAExC,OAAK1uM,EAAYh1F,UAAU2+B,KAAOxwB,EAAmBi1S,QAC5C,KAGL1f,EAEA,gCAAMz8M,UAAU,sCACd,gCAAMA,UAAU,kBAAiB,4CAAkB5iF,GAAG,qBAAtD,KAAmF2wF,EAAYh1F,UAAU2+B,KAM7G,gCAAMsoD,UAAU,YACd,4CAAkB5iF,GAAG,qBADvB,IAC6C2wF,EAAYh1F,UAAU2+B,MAKvEulS,EAAe3lL,UAAY,CACzBvpD,YAAa,UAAU/+C,MAAV,oBACbytP,OAAQ,UAAUjlJ,M,WAUL,IAAAt2C,UAPS,SAACxzG,GAEvB,MAAO,CACLwZ,mBAFiBxZ,EAAMqN,gBAAlB+B,YAMM,CAAyBmgU,I,wGC1CxC,OAEA,SACA,SACA,QACA,UACA,QACA,SACA,QACA,QAGA,QACA,QACA,QACA,SACA,SACA,S,IACA,OACA,SACA,S,mDAEA,IAmJMv3I,EAAqB,CACzButH,0DACAjmN,sCACAz6B,4CACAk7F,qC,WAGa,IAAAvsD,UA9BS,SAACxzG,GAAU,IAC1BiK,EAAajK,EAAM8J,UAAnBG,UAD0B,EAECjK,EAAMouB,wBAAjCa,EAF0B,EAE1BA,aAAcH,EAFY,EAEZA,UACdnS,EAAS3c,EAAMgR,YAAf2L,MAH0B,EAIgB3c,EAAMwc,UAKvD,MAAO,CACLvS,YACAglB,eACAH,YACAnS,QACAG,uBAd+B,EAI1BA,uBAWL4U,eAf+B,EAIFA,eAa7B/c,iBAZyB3U,EAAM4U,YAA1BD,iBAaLqrJ,cAZsBhgK,EAAMk4L,WAAvBl4B,cAaLngJ,eAZqB7f,EAAMqN,mBAuBS2qL,EAAzB,EA1JkB,SAAChlF,GAAU,IAcpC,EAZC/oG,EAEa+oG,EAFb/oG,UAAW0S,EAEEq2F,EAFFr2F,MAAOurI,EAELl1C,EAFKk1C,SAAUj5H,EAEf+jF,EAFe/jF,aAAcH,EAE7BkkF,EAF6BlkF,UAAWy2R,EAExCvyM,EAFwCuyM,4BAA6BzoS,EAErEk2F,EAFqEl2F,uBACvFnI,EACkBq+F,EADlBr+F,iBAAkB2qF,EACA0T,EADA1T,kBAAmBz6B,EACnBmuC,EADmBnuC,qBAAsBm7F,EACzChtD,EADyCgtD,cAAeD,EACxD/sD,EADwD+sD,iBAAkBruI,EAC1EshF,EAD0EthF,eAC5F7R,EAAkBmzF,EAAlBnzF,eACIrG,EAAqBqG,EAAezQ,SAEpCywG,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAEvC2vN,GAAmB3vN,IAAYrmG,EAAmBsf,SACxD,OAAI02S,GAAmBA,EAAnBA,mBACK,KA8GFtnL,GA3GD,gCAAuB,2BAAOunL,EAAP,uDAAqB,KAArB,0EAKtB5vN,GAAYrmG,EAAmBsf,SALT,mBAMpBhc,EANoB,uBAOvB+nD,EAAqB,EAAAzgC,cAAckB,aAPZ,8BAarB9rB,EAAmBsf,WAAnB,qBAbqB,0CAchB,GAdgB,cAgBzB+rC,EAAqB,EAAAzgC,cAAcK,aAhBV,mBAiBlB,IAAA06D,WAAU,CACfC,QAAQ,EACRC,aAAa,IAEZ9lE,MAAK,SAAC2lE,GACLp+F,SAASC,SAAS4b,MAAQuiF,EAAaviF,MACnCuiF,EAAaX,UACfe,EAAkBJ,EAAaX,UAEjC15B,EAAqB,KACrB,IAAAs6I,4BACE3lM,EAAmBsf,SAAW,wCAA0C,0CAG3EiB,OAAM,SAACp6B,IACN,IAAAw3H,kBAAiB,UAAU,IAAIC,MAAMz3H,IACrCklE,EAAqB,QAjCA,UAqCrBx7D,GAAa,IAAA+E,eAAc,MAAM,EAAOnE,GAE9C,UAAU6+B,mBAAmB,cAAe,CAC1C9sB,SAAUxC,EAAmBwC,SAC7Bpd,OAAO,IAAAgK,wBAAuBS,GAC9Bye,MAAO7d,EAAUuF,KAAI,SAAC1B,EAAU4iP,GAC9B,OAAO,IAAApB,2BAA0BxhP,EAASC,YAAaD,EAAS+C,SAAU6/O,QAI9E7rL,EAAqB,EAAAzgC,cAAcK,aAE/BirS,EAAY,GAEXh+S,GAAmB,EAAD,mBAnDI,mCAoDG,IAAA6/F,sBApDH,eAoDnBC,EApDmB,kBAqDP,IAAAm/B,yBAAwB,CACxCC,YAAap/B,EAAc78G,GAAkBk9G,UAtDtB,QAqDzB69M,EArDyB,kBA6DvB1zO,GAAS,IAAAL,WAAU1sE,EAAcH,GAEjCgtG,EAAW,CACb,UAAa,EAAA62I,4BAA4B/gP,UACzC,UAAa89S,GAAwB,mBACrC,OAAU1zO,EAAS,GACnB,SAAY1sF,MAAMC,QAAQkgU,IACtB,IAAAl0O,sBAAqBk0O,GAAc,IACnC,IAAAl0O,sBAAqBtxF,GAAW,GACpC,YAAe,IAAM,EAAD,oBAGnB0S,IACDm/G,EAAA,aAA2Bn/G,EAAQ,KAGhC,IAAAjQ,aACHhN,QAAQ4B,IAAI,uCAAwCw6H,GAGtDypL,EAA4BzpL,IACxBpqG,EAlFuB,kBAmFzB,IAAAytE,WAAU,CACRC,QAAQ,IAEP7lE,MAAK,SAAC2lE,GACLp+F,SAASC,SAAS4b,MAAQuiF,EAAaviF,MACpCuiF,EAAaviF,QACdm/G,EAAA,aAA2B58B,EAAaviF,MAAQ,IAElDm/G,EAAA,UAAwB58B,EAAaX,UAAYmxO,GAAa,mBAC1DxwO,EAAaX,UACfe,EAAkBJ,EAAaX,UAEjC1+F,OAAOm0H,wBAAyB,GAChC,IAAA4xL,qBAAoB9pL,MAhGC,0CAmGE,IAAAm1B,yBAAwB,GAAI+O,GAnG9B,QAmGzBlkC,EAAA,OAnGyB,OAoGzB,sBACEikC,EAAiBjkC,EAAA,SAEnB,IAAA8pL,qBAAoB9pL,GAvGK,mDAAvB,iD,yGCpCR,O,OACA,O,IACA,MACA,QACA,O,IAEA,Q,IACA,O,IAEA,OACA,Q,IACA,Q,IACA,QAEA,QAQA,Q,OACA,Q,IACA,SACA,Q,IACA,QACA,QACA,QAEA,QACA,QAMA,Q,WACA,Q,IACA,S,IACA,QACA,Q,IAMA,SACA,SACA,S,IACA,SACA,S,mDAIA,IAAM6zM,EAAkB,SAAC38N,GAAU,IAyC3B,EAvCCj3F,EAOHi3F,EAPGj3F,MAAOskF,EAOV2S,EAPU3S,YAAax9B,EAOvBmwC,EAPuBnwC,aAAcK,EAOrC8vC,EAPqC9vC,aAAcY,EAOnDkvC,EAPmDlvC,kBAAmBJ,EAOtEsvC,EAPsEtvC,qBAAsBy0H,EAO5FnlF,EAP4FmlF,QAAS/0J,EAOrG4vE,EAPqG5vE,SACvG9e,EAME0uF,EANF1uF,aAAcqW,EAMZq4E,EANYr4E,kBAAmBypC,EAM/B4uC,EAN+B5uC,mBAAoBj8D,EAMnD6qG,EANmD7qG,SAAU2U,EAM7Dk2F,EAN6Dl2F,uBAAwB+tM,EAMrF73G,EANqF63G,YACvFj5L,EAKEohF,EALFphF,UAAWnM,EAKTutF,EALSvtF,iBAAkBkK,EAK3BqjF,EAL2BrjF,eAAgBC,EAK3CojF,EAL2CpjF,YAAa+8D,EAKxDqmB,EALwDrmB,SAAUgN,EAKlEqZ,EALkErZ,mBACpE/yB,EAIEosC,EAJFpsC,yBAA0BC,EAIxBmsC,EAJwBnsC,sBAAuBq2J,GAI/ClqH,EAJ+CkqH,SAAU0yG,GAIzD58N,EAJyD48N,sBAAuBloQ,GAIhFsrC,EAJgFtrC,wBAClFT,GAGE+rC,EAHF/rC,0BAA2BpnD,GAGzBmzF,EAHyBnzF,eAAgBqnD,GAGzC8rC,EAHyC9rC,uBAAwBM,GAGjEwrC,EAHiExrC,mBAAoBG,GAGrFqrC,EAHqFrrC,qBAEvFkoQ,GACE78N,EADF68N,uBAGIC,IAAiB,IAAAnoL,UAEjBooL,IAAmB,IAAAvmL,UAAQ,WAC/B,OAAO,IAAAroD,qBAAmB,EAAMd,EAAYryF,OAAQqyF,EAAan5B,MAChE,CAACm5B,EAAan5B,KAEX1tD,GAAqBqG,GAAezQ,SAGpCikQ,IAAkB,IAAA7pH,UAAQ,kBAAM,IAAAptI,oBAAmBikF,KAAc,CAACA,EAAavjF,IAC/Eg3H,GAAYt6H,GAAmBk1H,cAAgB7uH,GAAe8uH,4BAC9D0kI,KAAoBxzP,GAAe+uH,qBAAuBmhM,GAC1D3yT,GAAkBi2P,GAGlBzgN,IAAYytC,GAAej9D,GAAc9e,GAAgBA,EAAakmE,SACtEwuL,GAAc97C,IAAYh6J,EAY1B8sQ,IAAiB,IAAAxmL,UAAQ,kBAAM,IAAAvU,mBAAkB50C,KAAc,CAACA,IAEhE89J,IAAA,gCAAe,WAAOzpC,EAAaz4G,GAApB,gBAAiCnF,EAAjC,kIACbl0F,GAAS,IAAAC,oBACT5hB,EAASyzN,EAAYtsN,YAC3B,UAAU0gC,mBAAmB,cAAe,CAC1CsnN,aAAc17B,EAAY1mN,OAC1BqiP,eAAgBpvP,EAAOqiB,QAAUriB,EAAOsiB,UAAY,GACpDuE,MAAO,EAAC,IAAAwnO,2BAA0B56B,EAAa,MAG5C5wJ,IACH7iE,EAAO67F,oBAAsB43H,GAEzBu7G,EAAiBtjP,EAAWA,EAAStoE,WAAU,SAAAgD,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAO2wF,EAAYh1F,UAAUqE,MAAM,KACrH,EAAD,oBAAyBvH,IAAYiV,IACvCsmD,EAAqBgxJ,EAAau7G,IAE/BrtT,EAAO4Z,aAA0C,YAA1B5Z,EAAOzf,kBAAkC,IAAAi7P,4BAA2B1pC,GAhB7E,iCAiBX,IAAAwpC,0CAAyCxpC,GAjB9B,WAqBfs7G,GArBe,uBAsBX/5L,GAAe,IAAAd,iBAAgB90C,KAGjB/wF,MAAMC,QAAQ0mI,EAAaX,sBAAwBW,EAAaX,oBAAoBn5I,QAzBvF,mCA0BT,IAAA45I,wBAAuB2+E,EAAaz+E,GAAc,GA1BzC,SAgCnB,IAAAjoD,iBAAgB0mI,GAAa,EAAM59G,IACnC,IAAAtc,sBAAqBk6H,EAAa9iM,EAAWnM,GAMzCk0E,GACFA,EAAmB+6H,GAEjBvsN,GACE,EAAA7E,oBAAsB8Z,KASxB+6K,EAAQ17L,MAAK,IAAA2/F,eAAcs4H,GAAa,IAG1Cv8B,EAAQ17L,MAAK,IAAA2/F,eAAcs4H,IAAetwJ,IAM5CzpC,IACIshF,GAAeA,EAAYC,SAAWD,EAAYC,QAAQC,YAAc,EAAAn1E,gBAAgBnlC,SAAS6yN,EAAY1mN,UAC5G,IAAA4lN,kBAAiBc,EAAY1mN,OAAQ7F,IAA8B,IAAhBynB,IAChD0tF,GAAe,IAAAE,kBAAiBk3G,KAAgB,IAAAh3G,iBAAgBp5F,GAAgBowM,EAAYtsN,YAAassN,EAAaz4G,EAAYC,QAAQ1vD,SAC1I9S,EAAS4jE,GAAgBlhH,OAAOmc,KAAK+kG,GAAcnhH,QACrD,IAAAi9G,gBAAekE,EAAcrB,EAAYC,QAAQ1vD,OAAQrkD,GACzD,QAEF8zG,EAAYC,QAAQC,UAAUC,aAAa1iE,EAAQ,GAAG,EAAO92B,EAAOy+E,wBAAwBqzH,EAAY1mN,SACxG2hB,EAAessF,EAAYC,QAAQC,UAAUq2C,QAAQiiE,iBAGpD5tJ,GACHD,GAAyB,GAEtBe,GAAqBuoQ,WAAYF,IAAmB5yT,IAAoBijF,EAAY/U,2BACpFwkP,KAAkBA,GAAe5zN,SAAYr8F,GAAeM,UAA6B,IAAhB64P,IAC5EtxM,GAAwB,CACtBzvC,SAAS,EAGTooE,cACAzzF,IAAKkjU,GAAe5zN,QAAQloB,wBAAwBpnF,IACpD4sC,KAAMs2R,GAAe5zN,QAAQloB,wBAAwBx6C,KACrDjyC,OAAQwU,EAAMxU,SArFC,mDAAf,uBAAAzK,MAAA,kBAmKA+jK,IAAW,IAAArX,UAAQ,WACvB,OAAO,IAAAjpD,oBAAmBF,EAAav8B,EAAmBM,EAAoB9/C,KAE7E,CAAC+7E,EAAav8B,EAAmBM,EAAoB9/C,EAAcumM,IAQhEslH,GAAetvK,IAAYmvK,KAAmB5yT,GAC9CgzT,GAAgC,IAAhBp3D,GAChBq3D,GAA0Bh9D,IAAmB+8D,GAEnD,OACE,kCAAmBE,SAAnB,MACG,SAACr0N,GAAD,OACC,wCACG,SAACszL,GAAD,OACC,8BAAIj9M,UAAW,+BAAiC0mL,IAC3Cn2M,EAAe,wBAA0B,KACzCgtQ,GAAyB,kCAAoC,KAC7DzyT,GAAkB,sBAAwB,0BAC1CyjJ,GAAW,sBAAwB,IACpC9kJ,MAAOA,EACP2rI,IAAKooL,GACLtrJ,QAAS,SAACl8E,GAAD,OAlGE,SAACA,EAAO2T,EAAaszL,GAC5C,KAAIjnM,EAAMlqF,OAAOuqI,QAAQ,uBAAyBrgD,EAAMlqF,OAAOuqI,QAAQ,qBAAuBnhF,GAAmBvvC,SAAjH,CAGI,UAAO1vB,aAAe83F,GACxB3gG,QAAQ4B,IAAI,cAAe++F,EAAaA,EAAY7lF,UAElDqoD,IACF/hE,SAASg9F,cAAc,OAAO/hF,MAAM+2R,WAAa,OACjD18M,YAAW,WACTt1F,SAASg9F,cAAc,OAAO/hF,MAAM+2R,WAAa,kBAChD,MAEL,IAAIp+E,EAAcr0H,EAelB,GAdIztC,MACGytC,GAAej9D,IAClBsxL,EAAcpwM,EAAakkE,2BAA2BplD,MAEpD9e,EAAa6e,eAAeC,GAAYsxL,GAGxCA,IACFpwM,EAAauJ,cAAgB6mM,EAC7B9iM,EAAU,EAAC,IAAAtM,mBAAkBovM,EAAa,EAAGjvM,MAE/C/lB,QAAQ4B,IAAI,2BAA4BozN,EAAapwM,KAGlDowM,GAAe66E,IAClB,OAAO,EAGT,IAAMJ,EAAe,UAAUrlQ,mBAAmB4qL,GAC5C67C,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgC4C,oBAAsBo7P,EACtDygC,GACE,EAAAvlS,6BAA6BgD,kCAAoC8hQ,EACjE,EAAA9kQ,6BAA6BiD,iBAAmB6hQ,EAGtD,GAFA,UAAUtmQ,eAAe0nO,GAErBnzP,GAAiB,CACnB,IAAK,EAAD,mBAAqB,CACvB,IAAM6yT,EAAiBtjP,EAAWA,EAAStoE,WAAU,SAAAgD,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAO2wF,EAAYh1F,UAAUqE,MAAM,KAC1Hg0D,EAAqBgxJ,EAAau7G,GAClC93I,EAAQ17L,MAAK,IAAA2/F,eAAcs4H,GAAa,IAE1C,OAAO,EAGT,IAAM67G,GAAqB,IAAAr9L,4BAA2BwhF,GACtD,GAAI67G,EAAmBp0U,OAQrB,OAPA,UAAU0sC,eAAe,EAAAwB,6BAA6ByG,4BACtDm2B,GAA0B,CACxBhvC,SAAS,EACTs4S,qBACA7/O,eAAgBgkI,EAChBwkC,cAAeiF,GAAah/P,UAAb,EAAwBu1N,EAAaz4G,GAAa,MAE5D,EAUTkiJ,GAAazpC,EAAaz4G,IA8BMu0N,CAAiBloO,EAAO2T,EAAaszL,KAC1D38O,GACC,+BAAK0/B,UAAU,sDACb,mCAAYA,UAAU,kEACpB,0CAIJ,+BAAKA,UAAW,yBAA2B+N,EAAY9qF,eAAiB,+BAAiC,KACtGpN,IAAa,EAAD,mBACTw/D,GAAqB1vC,QAAU,KAAO,mCAAmCooE,YAAaA,EAAawgE,SAAUA,KAC7G,mCAA0BxgE,YAAaA,EAAaztC,QAASA,KACjE,mCAAkB7nD,QAASs1F,EACTl4F,SAAUA,EACVi8D,mBAAoBA,EACpBzlD,YAAa0hF,EAAYh1F,UAAUqE,KACpDygU,GAAe,mCAAyB9vO,YAAaA,EACb88H,oBAAqB0yG,GACrB3yG,SAAU87C,GACVlmQ,KAAK,UAAY,MAG7D8/C,GACC,+BAAK0/B,UAAU,kDACb,4CAAkB5iF,GAAG,mCAGvB,+BAAK4iF,UAAW,uBAA0BwhD,IAAcu/H,GAAqD,GAAnC,mCACvE+8D,IAAkC,IAAhBp3D,IAAsB3F,GAAmB,KAC1D,gCAAM/gL,UAAU,4BACd,mCAAavnF,QAASs1F,EAAavgF,mBAAmB,KAIzDuzP,GAAkB,mCAAuBvgQ,KAAMu9T,GAA0B,QAAU,KAChFD,GACE,KACA,mCAAqB/vO,YAAaA,IACtCx9B,GAAiBwtQ,GAOf,KANF,+BAAK/9O,UAAU,6BACXzvB,GAAiBwtQ,IAA4BN,IAAqB18D,GAEhE,KADF,mCAAkBF,iBAAiB,EAAM9yK,YAAaA,EAAa/N,UAAU,mCAE9E89O,KAAiBhzT,GAAkB,mCAAarS,QAASs1F,EAAavgF,mBAAmB,IAAU,eAmB1H6vT,EAAgB/lL,UAAY,CAC1BvpD,YAAa,UAAU/+C,MAAV,oBACbsuR,sBAAuB,UAAU9lL,KACjC/tI,MAAO,UAAU1c,OACjBilB,aAAc,UAAUjlB,OACxB+jC,SAAU,UAAU8G,OACpByiD,SAAU,UAAU5uE,MACpB47E,mBAAoB,UAAU8sF,KAC9By2C,SAAU,UAAUrzE,UAAU,CAAC,UAAU3/G,OAAQ,UAAUo2E,SAC3DuvN,uBAAwB,UAAU/lL,MAGpC,IAiCMkuC,EAAqB,CACzBt0H,4CACA/oC,sCACAwpC,8CACAvyC,sBACAjC,gCACAi3C,oDACAK,sDACApC,4CACA6C,mD,WAKa,IAAAuwH,aACb,IAAAzkF,UAhDsB,SAACxzG,GAAU,MAGaA,EAAM0zG,UAF7C7wC,EAD0B,EAC1BA,aAAcK,EADY,EACZA,aAAckB,EADF,EACEA,mBAAoBN,EADtB,EACsBA,kBAAmB+C,EADzC,EACyCA,sBAAuBK,EADhE,EACgEA,uBAE/FM,EAH+B,EAG/BA,mBAAoBG,EAHW,EAGXA,qBACfx/D,EAAYnI,EAAMgR,YAAlB7I,SAJ0B,EAKEnI,EAAMouB,wBAAlCwB,EAL0B,EAK1BA,YAAai7L,EALa,EAKbA,YAOpB,MAAO,CACL/mJ,oBACAjB,eACAK,eACAkB,qBACAj8D,WACAsd,iBAZyBzlB,EAAMgsL,QAA1BvmK,iBAcLohD,wBACAj3C,cAGA/P,eAfqB7f,EAAMqN,gBAgB3ByP,uBAf+B9c,EAAMwc,UAAhCM,uBAgBLoqD,yBACA2jJ,cACArjJ,qBACAG,0BAmBuBqwH,EAAzB,CAA6C23I,K,oLCxZ/C,M,IACA,QACA,QACA,QACA,QACA,QACA,S,IACA,O,uDAEqBc,E,kPAEnBC,uBAAyB,WACvB,IAEMj3G,GAFS,IAAA52M,oBAEeg1F,oBAC3BnpG,QAAO,SAAA3D,GACN,IAAKA,EAAQgD,cAAgBhD,EAAQgD,YAAY1C,WAC3CN,EAAQgD,YAAYwV,UAAYxY,EAAQgD,YAAYwV,SAAS1hB,SAAS,eAAqC,gBAAnBkJ,EAAQiD,OACpG,OAAO,EAET,GAAIjD,EAAQiD,OAAOnM,SAAS,cAAgBkJ,EAAQgD,YAAY3F,WAEtB,SADnB2C,EAAQgD,YAAY3F,YAAYA,YAAYwa,OAAOsD,MAAMu7E,OAC7DstD,mBACf,OAAO,EAGX,IAAMj4F,EAAY/rD,EAAQgD,YAAY1C,UAAUqE,GAChD,OAAQ3E,EAAQiD,OAAOnM,SAAS,uBAAyB,EAAKmxG,MAAM/oG,UAAU1E,OAAM,SAACuI,GACnF,OAAOA,EAASC,YAAY1C,UAAUqE,KAAOonD,QAG7CwjN,EAAuBhrQ,MAAMC,QAAQ,EAAKyjG,MAAMsnK,sBAAwB,EAAKtnK,MAAMsnK,oBAAoBn+Q,OACzG,EAAK62G,MAAMsnK,oBACV5rQ,QAAO,SAAAiiU,GACN,IAAMC,EAAeD,EAAWtlU,UAAUqE,GAC1C,OAAO+pN,EAAel0N,OAAM,SAAAuI,GAAA,OAAYA,EAASC,YAAY1C,UAAUqE,KAAOkhU,MACzE,EAAK59N,MAAM/oG,UAAU1E,OAAM,SAACuI,GAAD,OAAcA,EAASC,YAAY1C,UAAUqE,KAAOkhU,QAErFphU,KAAI,SAAAmhU,GACH,MAAO,CACLhrT,eAAgBgrT,EAAWvoU,YAAYA,YAAYmb,SACnDvV,OAAQ2iU,EAAW3iU,OACnB6C,SAAU,EACV9C,YAAa4iU,MAGjB,GACJ,8BAAWl3G,IAAX,aAA8B6gD,K,EAGhCu2D,eAAiB,WACf,IAAuC,IAAnC/vU,SAASC,SAAS6b,aAAwB,CAC5C,IAAIk0T,EAAW,GACXtsJ,EAAU,aACRhrK,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SACrD,GAAIoK,EAAmBsf,SAAU,CAC/B,GAAItf,EAAmBnK,UAAY,EAAK2jG,MAAMl2F,uBAC5C,MAAO,CACLg0T,SAAU,2CACVtsJ,QAAS,kBAAM,EAAKusJ,eAAe,eAGvCvsJ,EAAU,EAAKusJ,eACfD,EAAYt3T,EAAmBggB,gBAAkBhgB,EAAmBuf,mBAAqBj4B,SAASC,SAASiwU,oBACvG,yCACCx3T,EAAmBy3T,mBAEjBz3T,EAAmBwuC,MAIlB,EAAKgrD,MAAMthF,gBAAkB5wB,SAASC,SAAS2b,UAC7C,oCACA,yCALF,EAAKs2F,MAAMl2F,wBAA0Bhc,SAASC,SAAS2b,UACrD,oCACA,yCAJJ,yCAQGlD,EAAmBy3T,oBAC5BH,EAAW,wCACXtsJ,EAAU,EAAK0sJ,kBAEfJ,EAAW,uCACXtsJ,EAAU,EAAK2sJ,sBAKjB,OAHI,EAAKn+N,MAAMnzF,eAAeynI,qBAC5BwpL,EAAW,kBAEN,CACLA,WACAtsJ,WAGJ,OAAO,M,EAGTusJ,gB,gCAAiB,WAAOK,GAAP,iFAEXtwU,SAASC,SAAS2b,YAAa,EAAKs2F,MAAM2iG,4BAA+B,EAAK3iG,MAAMwlB,UAFzE,uBAGb,EAAKxlB,MAAM2iG,4BAA2B,EAAMy7H,GAH/B,6BAOT53T,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SACrD,UAAUy5B,eAAe,2BACpB,UAAgBusK,kBAAhB,gBAAqC,EAAKpiG,MAA1C,CAAiDl6E,UAAU,KATjD,kDAYf,IAAAxK,cAAa,2BAEb,IAAA6wE,WAAU,CACRC,QAAQ,EACRm1B,yBAAyB,IAExBh7F,MAAK,SAACswE,GACDA,IAQF,IAAA7P,kBAEF,IAAAmlH,+BACA,IAAAjmL,oBAAmB1f,MAClBugB,OAAM,SAACp6B,GACVD,QAAQ4B,IAAI,mBAAoB3B,IAChC,IAAAq6F,oBAjCa,6C,gGAnFuB,UAAMuZ,W,UAA3Bk9N,G,qNCTrB,aAkDaY,GAhD8BC,EAA9BA,4BAA8B,SACzCp/M,EACAyE,EACA92G,GAGG,IAFHwyG,EAEG,uDAFgB,GACnBk/M,EACG,aAEH,GAAI1xT,GAAkBA,EAAeuwN,iBAAmBvwN,EAAeuwN,gBAAgBohG,gBAClFD,EAAiBE,uBAAyBF,EAAiBjjH,eAAiBj8F,EAC/E,MAAO,CAAE7uF,KAAM+tS,EAAiBjjH,aAAczC,WAAY,GAE5D,IAAI6lH,EAAkB,CAAEluS,MAAO,EAAGqoL,YAAa,GACzCmC,GAAoB,IAAApB,sBAAqBj2F,GAP5C,uBAQH,IARG,IAQH,EARG,iBAQQ98F,EARR,QASIowP,EAAqBpwP,EAArBowP,OAAQ58D,EAAaxzL,EAAbwzL,UACRn7F,EAAgBr4F,EAASnqB,MAC5BwiH,EAAgBr4F,EAASnqB,IAAM,IAKjC,IAHA,IAAMiiU,EAAe1nD,EAAOv7Q,QAAO,SAAAg0L,GACjC,OAAOA,EAAMkvI,YAAclvI,EAAM/hF,YAAc+hF,EAAMrpF,QAAUqpF,EAAMrpF,OAAOl9G,SAAWumM,EAAMmvI,cAd9F,WAgBQ51U,IACuB,IAA1By1U,EAAgBluS,MAClBmuS,EAAa7rU,SAAQ,SAAA48L,IACW,IAA1BgvI,EAAgBluS,MACGk/J,EAAMrpF,OAAOjpG,MAAK,SAACC,EAAGC,GAIzC,OAFaD,EAAEyhU,SAASvqU,OAAS8I,EAAEkuC,UAAUwzR,IAChCzhU,EAAEwhU,SAASvqU,OAAS+I,EAAEiuC,UAAUwzR,IACxB,GAAK,KAEfjsU,SAAQ,SAAAsjN,IACW,IAA1BsoH,EAAgBluS,MAAgBvnC,IAAMmtN,EAAM5lL,MACzC0uF,EAAgBr4F,EAASnqB,IAAI05M,EAAM5lL,OAClC0uF,EAAgBr4F,EAASnqB,IAAI05M,EAAM5lL,MAAM4lL,EAAM4oH,mBAC/C9/M,EAAgBr4F,EAASnqB,IAAI05M,EAAM5lL,MAAM4lL,EAAM4oH,kBAAkBpzU,QACvE8yU,EAAkB,CAAEluS,KAAM6pL,EAAYjE,EAAM5lL,KAAO,EAAGqoL,WAAYzC,EAAM4oH,0BAf3E/1U,EAAI,EAAGA,GAAK49B,EAASszL,WAAYlxN,IAAK,EAAtCA,IARX,EAAuB+xN,EAAvB,+CAA0C,IARvC,6EAuCH,OAAO0jH,GAGoBL,EAAhBA,cAAgB,SAACzlH,EAAWC,EAAYoC,EAAgB/7F,GACnE,OAAIA,EAAgB+7F,EAAev+M,KAC9BwiH,EAAgB+7F,EAAev+M,IAAIk8M,IACnC15F,EAAgB+7F,EAAev+M,IAAIk8M,GAAWC,GAC1C35F,EAAgB+7F,EAAev+M,IAAIk8M,GAAWC,GAAYjtN,MAE5D,KA4CIqzU,GAzCiBC,EAAjBA,eAAiB,SAACC,EAAgB/+B,GAC7C,IAAIg/B,EAAe,GAenB,OAdAD,EAAersU,SAAQ,SAAA48L,GAChBA,EAAMkvI,YAGXlvI,EAAMrpF,OAAOvzG,SAAQ,SAACsjN,GAAU,IACtB4oH,EAAiC5oH,EAAjC4oH,iBAAkBrxN,EAAeyoG,EAAfzoG,WACtB+hF,EAAM2vI,aACWL,IAAqB5+B,IACrBzyL,GACjByxN,EAAa31U,KAAK,CAAE48G,OAAQi5N,YAAaC,IAAKP,WAK/CI,GAGqCI,EAAjCA,+BAAiC,SAACC,EAAWvgN,EAAiByE,GACzE,IAAI+7M,EAAiB,GACf1kH,GAAoB,IAAApB,sBAAqBj2F,GACzCg8M,EAA+BV,EAA4BQ,GAH0B,uBAI3F,IAJ2F,IAI3F,EAJ2F,iBAIhF54S,EAJgF,QAK1EA,EAAVowP,OACEnkR,SAAQ,SAAA48L,IACTgwI,GAAmBhwI,EAAMkvI,YAAelvI,EAAMkwI,aAGlDlwI,EAAMrpF,OAAOvzG,SAAQ,SAACsjN,IAChBspH,GAAmBtpH,EAAMqpH,WACvBR,EAA4B7oH,EAAMqpH,aAAeE,IAGvDD,EAAiBrB,EAAcjoH,EAAM5lL,KAAM4lL,EAAM4oH,iBAAkBn4S,EAAUq4F,WAXnF,EAAuB87F,EAAvB,+CAA0C,IAJiD,6EAmB3F,OAAO0kH,GAGkCT,EAA9BA,4BAA8B,WAAoB,IAAnBQ,EAAmB,uDAAP,GACtD,OAAKA,GAAkC,iBAAdA,EAGlBA,EAAUpsU,QAAQ,IAAK,IAFrB,M,wGCtGX,I,IAAA,MACA,O,IACA,MACA,S,IAEA,Q,IACA,SACA,Q,IACA,S,mDAGO,IAAMwsU,EAAmBA,EAAnBA,iBAAmB,SAAC3vQ,GAC/B,OAAwB,IAAjBA,EACH,IACiB,IAAjBA,EACE,IACiB,IAAjBA,EACE,IACA,KAGJ4vQ,EAAsB,SAAC9/N,GAAU,IAE9B6vM,EAC8C7vM,EAD9C6vM,WAAYkwB,EACkC//N,EADlC+/N,cAAe7vQ,EACmB8vC,EADnB9vC,aAAc/6D,EACK6qG,EADL7qG,SAAUwxF,EACLqZ,EADKrZ,mBAAoB8jB,EACzBzK,EADyByK,SAAUrrF,EACnC4gF,EADmC5gF,YAAa4gT,EAChDhgO,EADgDggO,gBACnG/2N,EAAmDjJ,EAAnDiJ,YAAaszL,EAAsCv8L,EAAtCu8L,qBAAsB0jC,EAAgBjgO,EAAhBigO,aAErC,IAAKF,GAAiB35T,MAAM25T,GAC1B,OAAO,KAGT,IAAM1rU,EAAQo2G,EAAW,IAAM,IAIzBy1N,EAA+B,IAAjBhwQ,EAChB,EACiB,IAAjBA,EAAqB,EAAI,EAGvBiwQ,EAAe,CACnB9rU,QACA6rU,cACAE,YAXmC,IAAjBlwQ,EAChB77D,EAAQ,EACS,IAAjB67D,EAAqB77D,EAAQ,EAAIA,EAUnCgsU,SANevhU,KAAKkI,MAAMi5T,GAAgBpwB,EAAW1mT,QAAU+2U,GAO/D3rU,OAAQY,EAAW4qU,EAAgB,GAAKA,EAAgB,IACxDO,UAAWT,EAAiB3vQ,GAC5BqwQ,iBAAkB,EAClBC,0BAA0B,EAC1BC,qBAAqB,GA8BvB,OACE,gCAEEnhP,UAAW,oBAAuB6gP,EAAaE,SAAWF,EAAaG,UAAaH,EAAa5rU,OAC7F,iCACA,qCACJF,MAAO8rU,EAAa9rU,MACpBE,OAAQ4rU,EAAa5rU,OACrBgsU,iBAAkBJ,EAAaI,iBAC/BF,SAAUF,EAAaE,SACvBH,YAAaC,EAAaD,YAC1BE,YAAaD,EAAaC,YAC1BE,UAAWH,EAAaG,UACxB5rJ,SAAUsrJ,EACVU,aAzCiB,SAAC,GAAwC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MACjD,GAAIk3T,EACF,OAAO,mCAAgCl3T,MAAOA,EAAO7c,IAAKA,IAE5D,IAAMmoB,EAAUw7R,EAAYswB,EAAaD,YAAcU,EAAYD,GACnE,OAAKtsT,EAGDo2F,EACK,mCAA8Bpd,YAAah5E,EAAQnE,KACrBkP,YAAaA,EACb6pF,YAAaA,EACbszL,qBAAsBA,EACtB51M,mBAAoBA,EACpB59E,MAAOA,EACP7c,IAAKA,EACLytF,SAAUk2N,IAE1C,mCAAiB9mS,MAAOA,EACPskF,YAAah5E,EAAQnE,KACrBhkB,IAAKA,EACLytF,SAAUk2N,EACVlpN,mBAAoBA,IAhBnC,MAoCPk6O,eAjBmB,kBAAM,+BAAKvhP,UAAW,YAAhB,yBAsB/BwgP,EAAoBlpL,UAAY,CAC9B3tC,YAAa,UAAU58G,OACvBkwS,qBAAsB,UAAU9oH,KAChC9sF,mBAAoB,UAAU8sF,KAC9Bo8H,WAAY,UAAU9kS,MACtBg1T,cAAe,UAAUzyN,OACzBp9C,aAAc,UAAUo9C,OAAOK,WAC/Bx4G,SAAU,UAAU2hJ,KACpBkpL,gBAAiB,UAAUvsJ,KAC3BhpE,SAAU,UAAUqsC,KACpB13H,YAAa,UAAUkvB,MAAV,wBACb2xR,aAAc,UAAU3yN,Q,WAGX,IAAAmvC,YAAWqjL,I,8EChH1B,I,IAAA,MACA,OACA,O,IACA,M,IAEA,Q,IACA,O,IACA,S,IACA,QAEA,SACA,QACA,Q,OACA,QACA,QACA,Q,mDAEA,IAAMgB,EAAuB,SAAC9gO,GAAU,IAC/B7wF,EACkC6wF,EADlC7wF,KAAMha,EAC4B6qG,EAD5B7qG,SAAUqiF,EACkBwoB,EADlBxoB,SAAU80E,EACQtsD,EADRssD,2BAA4BD,EACpBrsD,EADoBqsD,8BAA+Bv7F,EACnDkvC,EADmDlvC,kBAAmB/4D,EACtEioG,EADsEjoG,QAC7GgpU,EAAuC/gO,EAAvC+gO,UAAWt2N,EAA4BzK,EAA5ByK,SAAU59F,EAAkBmzF,EAAlBnzF,eAEjBm0T,EAAMv2N,EAAW,EAAI,EAErB4vN,EAAgB5vN,EAEhBw2N,EAAiB,SAACC,GACtB70K,EAA8B60K,IAG1BlmD,EAAoB,SAACnwR,GAAuB,IAApBs2U,EAAoB,uDAAP,GACrCv1U,EAAQ,GAAKf,EAAEugB,OAAOxf,MAE1B,GAAIA,EAAMiD,SAAS,KAAM,CACvB,IAAKwrU,EACH,OAAO,EAELzuU,EAAM6G,MAAM,KAAK,GAAGtJ,OAAS,IAC/ByC,GAASA,EAAM+H,UAAU,EAAG/H,EAAMzC,OAAS,IAI/C,IAAMgzS,EAAe,UAAUrlQ,mBAAmB/+B,GAAW+4D,GACvDswQ,EAAkBD,EAAaA,EAAa,IAAMv1U,EAAQ,SAAWA,EAC3E,UAAUiqC,eAAkB,EAAAsI,gCAAgCyB,6BAA+Bu8P,EAA3F,IAA2GilC,IAE3Gx1U,GAASA,IAEIo1U,EACXp1U,EAAQo1U,EACCp1U,EA7BD,QA8BRA,EA9BQ,OAiCVq1U,EAAer1U,IAUVihH,GAAW,IAAAowB,mBAAXpwB,QAEP,OACE,+BAAKvtB,UAAU,cACb,+BAAKA,UAAW,mBAAqB9H,EAAW,2BAA6B,KACvE,EAAD,mBAAwC,GAAlB,kBACxBupP,EAAY,KACX,+BAAKzhP,UAAU,wBACZutB,EACG,4CAAkBnwG,GAAIvH,IAAa,EAAD,mBAAsB,6BAA+B,4BACvF,IAAA+Z,gBAAenX,GAAW+4D,EAAmB3hD,EAAMtC,EAAgBy/I,IAG3E,+BAAKhtE,UAAU,6BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iCACnC80K,QAAS,WACPwpG,EAAkB,CAAC5vQ,OAAQ,CAACxf,MAAO0gK,EAA6B,IAAK,UAEvE90E,SAAUA,EACV8H,UAAW,qCACRnqF,IAAa,EAAD,mBAAsB,mCAAqC,sBACpF,yCAEF,mCAAWmqF,UAAW,wBACXjqD,MAAM,GAENmiD,SAAUA,EACVx/E,KAAK,QACL8H,KAAK,SACLlU,MAAO0gK,EACP+0K,QAAQ,yBACRzrO,UAtCK,SAACN,GACvB,GAAgB,MAAZA,EAAMppG,MAAcmuU,EAEtB,OADA/kO,EAAM7V,kBACC,GAoCQ+qI,SAAUwwD,IACrB,mCAAY/8B,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iCACnC80K,QAAS,WACPwpG,EAAkB,CAAC5vQ,OAAQ,CAACxf,MAAO0gK,EAA6B,IAAK,SAEvE90E,SAAUA,EACV8H,UAAW,qCACRnqF,IAAa,EAAD,mBAAsB,mCAAqC,sBACpF,6CAQZ2rU,EAAqBlqL,UAAY,CAC/Bp/D,SAAU,UAAUs/D,KACpBiqL,UAAW,UAAUjqL,KACrBrsC,SAAU,UAAUqsC,KACpB/+I,QAAS,UAAUu2C,MAAV,qBAGX,IAcM02I,EAAqB,CACzB34B,+D,WAGa,IAAA5P,aACb,IAAAj8C,UAnBsB,SAACxzG,GAMvB,MAAO,CACLmI,SANiBnI,EAAMgR,YAAlB7I,SAOLm3J,2BANmCt/J,EAAMk4L,WAApC54B,2BAOLx7F,kBAN0B9jE,EAAM0zG,UAA3B5vC,kBAOLjkD,eANqB7f,EAAMqN,mBAeJ2qL,EAAzB,CAA6C87I,K,8ECzI/C,I,IAAA,MACA,OACA,O,IAEA,O,IACA,QAEA,QACA,QACA,Q,OACA,QACA,Q,mDAEA,IAsDM97I,EAAqB,CACzB7zH,8CACAG,8CACAO,6C,WAGa,IAAA2uC,UAjBS,SAACxzG,GAAU,MACSA,EAAM0zG,UAAzCnvC,EAD0B,EAC1BA,eAAgBC,EADU,EACVA,gBADU,EAEexkE,EAAM0zG,UACtD,MAAO,CACLnvC,iBACAC,kBACAJ,mBAN+B,EAE1BA,mBAKLN,kBAP+B,EAENA,qBAeWk0H,EAAzB,EA5DoB,SAAChlF,GAAU,IAErC51F,EACmB41F,EADnB51F,gBAAiBknD,EACE0uC,EADF1uC,sBAAuBC,EACrByuC,EADqBzuC,eAAgBC,EACrCwuC,EADqCxuC,gBAAiBJ,EACtD4uC,EADsD5uC,mBAAoBN,EAC1EkvC,EAD0ElvC,kBAClGe,EAAwBmuC,EAAxBnuC,qBAyBF,OACE,gCAAMytB,UAAU,0BACd,mCAAQA,UAAW,wDACd,EAAAhvF,mBAAqB,6BAA+B,IACjD0H,KAAK,QACLw/E,WAAW,IAAAoR,4BAA2B93B,GAAmB3nE,OACzDizS,UAAW,mCAAU7kP,SAAS,UAC9Bi6H,QA9BU,WAYpB,GAXA,qBACE,UAAU37I,eAAe07B,EACrB,EAAApzB,gCAAgCsB,4BAChC,EAAAtB,gCAAgCqB,4BAGpC,UAAU3J,eAAe07B,EACrB,EAAAl6B,6BAA6BiC,yBAC7B,EAAAjC,6BAA6BgC,yBAG/BjvB,EAEF,OADAynD,EAAqB,EAAAzgC,cAAckB,cAC5B,EAET,IAAMgvS,EAAe/vQ,GAAmBC,IAAoB,EAAAzgC,qBAAqBC,KAC7E,GACAogC,IAAuB,EAAD,mBAAsB,SAAW,OAE3DE,EAAsBgwQ,EAAc,EAAAvwS,qBAAqBC,QAWrD,4CAAkBt0B,GAAI60D,GAAmBC,IAAoB,EAAAzgC,qBAAqBC,KAC9E,8BAAgC,sC,8EClD5C,I,IAAA,MACA,O,IACA,M,IAEA,O,IACA,Q,mDAEA,IAAMuwS,EAAsB,SAACvhO,GAAU,IAC9BqzN,EAAmBrzN,EAAnBqzN,gBACP,OACE,mCAAQ/zO,UAAU,6DACV88M,UAAW,wCACX5qH,QAAS6hJ,GACf,4CAAkB32T,GAAG,mBAK3B6kU,EAAoB3qL,UAAY,CAC9By8K,gBAAiB,UAAU5/I,KAAK9lE,Y,UAGnB4zN,G,0JCtBf,O,OACA,O,IACA,QAEA,QACA,QAKA,Q,IAMA,QACA,S,IACA,S,IACA,S,IAEA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QACA,QACA,S,IACA,QACA,Q,mDAEO,IAAM3xT,EAASA,EAATA,OAAS,IAAI,EAAJ,OAEhB4xT,G,gBAIJ,WAAYxhO,IAAO,gGACXA,IADW,OAEjB,EAAKpwF,OAASA,EAFG,E,oFAKC,WAClB,GAAIlb,KAAKsrG,MAAME,kBAAkBrxG,SAAS6F,KAAKkb,OAAOzf,gBAEpD,OADAuE,KAAK+sU,kBACE,GAET,IAAAnmT,gBACAxwB,QAAQ64I,IAAI,EACV,IAAAnf,8BACA,IAAAgD,iBAAgB9yH,KAAKkb,OAAOqmE,kCAC3B1vD,MAAK,SAAAm7S,GACN52U,QAAQ64I,IAAI,CACV74I,QAAQC,QAAQ22U,EAAa,KAC7B,IAAAv7M,eACAr7H,QAAQC,QAAQ22U,EAAa,MAE9Bn7S,MAAK,SAACwhK,GACL,IAAMnf,EAAemf,EAAY,GAC3BsyC,EAAmBtyC,EAAY,GAAGp/L,KAClC+nB,EAAeq3K,EAAY,GAGjC,OAFA,EAAKn4K,OAAOsmG,gBAAgB0yD,GAC5B,EAAKh5J,OAAO4qN,oBAAoBH,GACzB,EAAKsnG,kBAAkB/4J,EAAcyxD,EAAkB3pN,GAAc,+BAE7E6V,KAAK,EAAKuxM,eACVvxM,KAAK,EAAKqxM,UACVrxM,KAAK,EAAKmyM,kBAGbhkO,KAAK+sU,kBACL,IAAAj5M,0B,+BAGO,WAEP,IAAK,EAAD,UACF,OAAO,KAGT,IAAMqlF,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzDvnM,EAAqB9R,KAAKsrG,MAAMx5F,mBAChCmuG,EAASjgH,KAAKkb,OAAOo+L,UAAUH,GAC/Bj6L,EAAalf,KAAKkb,OAAOwmE,uBACzBjhF,EAAWT,KAAKsrG,MAAM3qF,YAAc,IACpC2qK,EACkC,aAArClyL,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,gBAClEqW,IAAuBA,EAAmBy5K,2BACxCz5K,EAAmB05K,8BAAgCpyL,SAASC,SAAS2b,WAEvEk4T,EAAeltU,KAAKylO,uBAAyBn6C,EAEnD,OACE,+BAAK1gG,UAAW,QACb5qF,KAAKsrG,MAAMivC,wBAA0B,oBAAsB,KAC3Dv6I,KAAKsrG,MAAMqvC,2BAA6B,UAAY36I,KAAKsrG,MAAMqvC,2BAA6B,KAC5F36I,KAAKsrG,MAAMsvC,0BAA4B,UAAY56I,KAAKsrG,MAAMsvC,0BAA4B,KAE3F,+BAAKhwD,UAAU,WACZ5qF,KAAKsrG,MAAM7kF,UAAYzmB,KAAKsrG,MAAM3kF,UACjC,wCACE,mCAAmBs5F,OAAQA,EACRrwB,SAAU5vF,KAAK+G,MAAM6oF,SACrBowD,IAAK,SAACkkI,GAAD,OAAU,EAAK3vK,YAAc2vK,GAClChlQ,WAAYA,EACZhE,OAAQlb,KAAKkb,OACbvb,MAAOK,KAAKsrG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQG,KAAKsrG,MAAMvjF,iBAAiBloB,OACpC2mO,iBAAkBxmO,KAAKsrG,MAAMk7H,iBAC7BC,aAAczmO,KAAKsrG,MAAMm7H,eAE5C,yCAEA,KACJ,mCAAa5E,SAAU7hO,KAAK6hO,SACf7yM,sBAAuBhvB,KAAKgvB,sBAC5B6vM,gBAAiB7+N,KAAK6+N,gBACtBjvI,SAAU5vF,KAAK+G,MAAM6oF,YAEhC5vF,KAAK+G,MAAM48N,kBAAoB3jO,KAAKsrG,MAAM1b,SAC1C,mCAAY+6J,eAAgB3qP,KAAKkb,OAAOuZ,cAC5BvV,WAAYlf,KAAKkb,OAAO9P,KACxBwkF,SAAU5vF,KAAK+G,MAAM6oF,WAC/B,MAEJ5vF,KAAKkb,OAAOia,aAAen1B,KAAKsrG,MAAM3kF,UACtClmB,EACI,mCAAkB8zN,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BoE,eAAgB1+N,KAAK0+N,eACrBG,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpBsD,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCwnN,oBAAqB58N,KAAK48N,sBAG5C,mCAAmB58E,IAAK,SAACkkI,GAAD,OAAU,EAAKjhD,OAASihD,GAC7B3vD,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BtxM,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpB8qN,oBAAqB58N,KAAK48N,sBAG/C,KAEH58N,KAAKsrG,MAAM/pF,eAAiB,mCAAYxa,MAAO/G,KAAK+G,MAAMkoB,kBAAqB,KAC/Ei+S,EAAe,mCAAoBzsU,SAAUA,IAAc,U,gBA5H3D8P,YAAc,sB,cAiKR,IAAAu7F,UAhCS,SAACxzG,GAAU,MACwBA,EAAMgR,YAAxDiY,EAD0B,EAC1BA,eAAgBZ,EADU,EACVA,YAAa6qF,EADH,EACGA,kBADH,EAEwDlzG,EAAMouB,wBAAxFD,EAF0B,EAE1BA,SAAUE,EAFgB,EAEhBA,UAAWipE,EAFK,EAELA,SAAUhoE,EAFL,EAEKA,iBAAkBG,EAFvB,EAEuBA,iBAAkBo7L,EAFzC,EAEyCA,YAFzC,EAGmE7qN,EAAMu1I,gBAAnGizF,EAH0B,EAG1BA,UAAWvmF,EAHe,EAGfA,wBAAyBI,EAHV,EAGUA,2BAA4BC,EAHtC,EAGsCA,0BAHtC,EAIgBtiJ,EAAMwc,UAAhDM,EAJ0B,EAI1BA,uBAAwB4U,EAJE,EAIFA,eAJE,EAKgC1xB,EAAMyvO,cAAhEr3E,EAL0B,EAK1BA,2BAA4BI,EALF,EAKEA,2BALF,EAMiCx4J,EAAM+sO,iBAAjEf,EAN0B,EAM1BA,sBAAuBgB,EANG,EAMHA,gBAAiBjB,EANd,EAMcA,gBAC/C,MAAO,CACL59M,WACAE,YACAm6M,YACA1rN,yBACA4U,iBACArJ,cACAivE,WACA99E,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C6yI,0BACAI,6BACAC,4BACAhzH,mBACA8oI,6BACAI,6BACAwzE,wBACAgB,kBACAjB,kBACA9iN,iBACAwG,mBACAyjF,oBACA23G,iBAIoC,CACtCh2L,kCACA3G,4DACArC,oDACAX,wCACAwF,kCACAvB,0BACA4H,0BACA7K,wDACAwK,8CACAvN,4CACAgvI,iDAXa,CAYZq8K,I,+ECjNH,I,IAAA,MACA,S,IACA,M,IAEA,S,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,SACA,SACA,S,IACA,Q,IACA,S,mDAKA,IAAMK,EAAgB,SAAC7hO,GAAU,IACxBnzF,EAEmCmzF,EAFnCnzF,eAAgBpX,EAEmBuqG,EAFnBvqG,SAAU+X,EAESwyF,EAFTxyF,OAAQvW,EAEC+oG,EAFD/oG,UAAWqI,EAEV0gG,EAFU1gG,oBAAqBqK,EAE/Bq2F,EAF+Br2F,MAAO03G,EAEtCrhB,EAFsCqhB,yBAC9E0B,EACwC/iB,EADxC+iB,iBAAkBn2G,EACsBozF,EADtBpzF,OAAQlC,EACcs1F,EADdt1F,aAAchS,EACAsnG,EADAtnG,YAAamkO,EACb78H,EADa68H,UAAWx3N,EACxB26F,EADwB36F,YAAahH,EACrC2hG,EADqC3hG,cAAe8+N,EACpDn9H,EADoDm9H,oBAC5F/+G,EAAwCpe,EAAxCoe,WAAY1nB,EAA4BsJ,EAA5BtJ,SAAUumI,EAAkBj9H,EAAlBi9H,eAElBnuJ,GAAS,aAAep2E,GAE9B,OACE,oCAAUg+F,SAAUA,GAClB,+CAAsBorO,SAAtB,CAA+Bl2U,MAAO,CAAC6gB,SAAUA,EAAVA,aACrC,gCAAM1D,MAAO8D,EAAe8/F,mBAAqB79B,EAAOizP,OAASjzP,EAAOt+C,KAClEwxS,aAAW,OACXhqU,KAAK,MACT,mCAAqB6U,eAAgBA,EAAgBlD,MAAOA,EAAOmlE,OAAQA,EAAQ+tJ,UAAWA,IAC9F,mCAAmBpnO,SAAUA,EACVoX,eAAgBA,EAChBw0G,yBAA0BA,EAC1B0B,iBAAkBA,EAClBj0C,OAAQA,IAC1BjiE,EAAe8/F,mBAAqB,mCAA4B79B,OAAQA,IAAY,KACrF,mCAAmBthE,OAAQA,EACR2vN,oBAAqBA,EACrBlmO,UAAWA,EACX2V,OAAQA,EACRC,eAAgBA,EAChBnC,aAAcA,EACdrF,YAAaA,EACbhH,cAAeA,EACfywE,OAAQA,IAC1BxvE,EAAoBF,iBAAiBjW,OACpC,mCAA4BmW,oBAAqBA,EACrBkH,mBAAoBqG,EAAezQ,SACnC0yE,OAAQA,IAClC,KACJ,mCAAoBxvE,oBAAqBA,EACrBuN,eAAgBA,EAChBD,OAAQA,EACR3V,UAAWA,EACX63E,OAAQA,IAC5B,mCAAyB24O,WAAW,EACX34O,OAAQA,EACRliE,OAAQA,EACRC,eAAgBA,IACzC,mCAAwBiiE,OAAQA,EACRr5E,SAAUA,EACVmX,OAAQA,EACRC,eAAgBA,EAChBw0G,yBAA0BA,EAC1B47G,eAAgBA,EAChB59G,iBAAkBjB,EAAWiB,mBACrD,gCAAMt2G,MAAO+lE,EAAOmzP,WAAYtzQ,OAAQ,qBAAGszQ,WAAH,QAAepnH,YAEpDqnH,OAAA,QAObL,EAAcjrL,UAAY,CACxBppI,OAAQ,UAAUzC,MAAM4iG,WACxB12G,UAAW,UAAU8T,MAAM4iG,WAC3BruG,oBAAqB,UAAUjT,OAAOshH,WACtCl4G,SAAU,UAAUpJ,OAAOshH,WAC3B9gG,eAAgB,UAAUxgB,OAAOshH,WACjChkG,MAAO,UAAU2jG,OACjB+T,yBAA0B,UAAUh1H,OACpC02H,iBAAkB,UAAU12H,OAC5BugB,OAAQ,UAAUsqB,OAAOy2E,WACzBj1G,YAAa,UAAUw+B,OACvB2lM,UAAW,UAAU3lM,OACrB7xB,YAAa,UAAUhZ,OAAOshH,WAC9BsvH,eAAgB,UAAUnmF,KAC1B14B,WAAY,UAAU/xH,Q,UAGTw1U,G,qHC/Ff,I,IAAA,M,IACA,Q,mDAE2CM,EAA9BA,4BAA8B,SAACC,EAAqB9wT,EAAcra,EAAW0K,EAAkBke,GAC1G,OAAOA,EAAWlrB,MAAK,SAAA0tU,GACrB,OAAQD,GAAuBA,EAAoBhjT,aAAgBijT,EAAU3lU,KAAO0lU,EAAoBhjT,YAAY1iB,IAChH4U,GAAgBra,EAAUtC,MAAK,SAAAmG,GAC/B,OAAOunU,EAAU3lU,KAAO5B,EAASsK,mBAC3BtK,EAASE,SAAWsW,EAAatW,QACjCF,EAASoC,eAAiByE,IAC1B7G,EAASC,YAAY1C,UAAU4C,qB,UAKR,WACnC,OACE,+BAAKqkF,UAAU,0EACb,mCAAQ2R,KAAK,YAAYkP,MAAM,a,gMClBrC,QAEA,SACA,Q,IACA,MACA,SACA,Q,IACA,O,mDAEqCwsE,EAAxBA,sBAAwB,SAAChkL,GACpC+D,QAAQ4B,IAAI,yBAA0B3F,GACtC,IAAIg2P,EAAwB2jF,EAAY35U,GACxC,UAAMgwB,UAAS,IAAAi0J,2BAA0B+xE,KAHpC,IAMD2jF,EAAc,SAAC35U,GAAS,MAC5B,4BACG,EAAA0kD,6BAA6BC,eAAkBi1R,EAAsB55U,EAAKq6D,eAD7E,eAEG,EAAA3V,6BAA6BE,eAAkBi1R,EAAsB75U,EAAK+lD,gBAF7E,eAGG,EAAArB,6BAA6BG,SAAYi1R,EAAgB95U,EAAKgmD,QAHjE,GAOI4zR,EAAwB,SAACG,GAC7B,IAAIC,EAAe,GASnB,OARAD,EAAgB5vU,SAAQ,SAAC8vU,EAAgBtgU,GACvC,IAAIm8O,EAAM,UAAEh/L,MAAF,2BACVg/L,EAAI/hP,GAAKkmU,EAAelmU,GAAKkmU,EAAelmU,GAAK4F,EACjDm8O,EAAIt1P,OAASy5U,EAAexwD,YAC5B3zB,EAAIpqP,MAAQuuU,EAAepwD,WAC3BmwD,EAAal5U,KAAKg1P,MAGbkkF,GAGHH,EAAwB,SAACK,GAC7B,IAAIF,EAAe,GASnB,OARAE,EAAiB/vU,SAAQ,SAACgwU,EAAgBxgU,GACxC,IAAIm8O,EAAM,UAAEh/L,MAAF,2BACVg/L,EAAI/hP,GAAKomU,EAAepmU,GAAKomU,EAAepmU,GAAK4F,EACjDm8O,EAAIt1P,OAAS25U,EAAe1wD,YAC5B3zB,EAAIlqP,OAASuuU,EAAezwD,YAC5BswD,EAAal5U,KAAKg1P,MAGbkkF,GAGHF,EAAkB,SAACM,GACvB,IAAIJ,EAAe,GAYnB,OAXAI,EAAUjwU,SAAQ,SAACkwU,EAAU1gU,GAC3B,IACM+R,GADW,IAAA20C,mBACQxoD,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAK7X,UAAUqE,KAAOsmU,EAASl/Q,aACtE26L,EAAM,UAAEh/L,MAAF,2BACVg/L,EAAI/hP,GAAKsmU,EAAStmU,GAAKsmU,EAAStmU,GAAK4F,EACrCm8O,EAAIt1P,OAAS65U,EAAS5wD,YACtB3zB,EAAIlqP,OAASyuU,EAAS3wD,YACtB5zB,EAAI94O,gBAAkB0O,EAAQnE,KAC9ByyT,EAAal5U,KAAKg1P,MAGbkkF,GAG0BM,EAAtBA,oBAAsB,WACjC,IAAK,IAAMC,KAAX,+BACE,UAAMvqT,UAAS,IAAAi0J,4BAAA,gBAA4Bs2J,EAA2B,OAInCC,EAA1BA,wBAA0B,WAErC,OADe,UAAUtjR,YACXkH,SAAQ,SAAA5F,GACpB,GAAIA,EAAI0vG,YAAa,CACnB,IAAM/B,EAAW3tG,EAAI0vG,cACrB,OAAO/B,GAAsB,GAE/B,MAAO,OAIkBs0K,EAAhBA,cAAgB,SAACrrU,GAK5B,OAJkBA,EAAQM,UAAUi4O,mBAAmB9zO,KAAI,SAAA/I,GAEzD,OADAA,EAAMA,EAAIJ,QAAQ,oCAAqC,mCAGxCmN,MAAK,SAAAsL,GAAA,OAAOA,EAAIjd,SAAS,a,sGCvF5C,I,IAAA,MACA,U,IACA,OACA,Q,mDAE8B29K,EAAjBA,eAAiB,SAAC5gL,GAC7B,UAAW0V,YAAc1V,EACzB,UAAM+sB,UAAS,IAAAigG,oBAAmBhtH,KAClC,IAAAy8P,yB,8ECRF,I,IAAA,O,IACA,O,IACA,O,IACA,O,IACA,QACA,Q,IACA,Q,6DAyIe,IAvIO,WAAY,WAChC3zP,KAAKssN,cAAgB,SAACvmC,GACpB,IAAInsI,EAAQ,UAAiBoe,aAAa+tH,EAAY7sH,QACtD,GAAItf,GAAwB,SAAfA,EAAMp+B,KAAnB,CACE,IAAMuzC,EAAO,UAAU+D,YAAYlZ,EAAMoV,cACzC,EAAK2/Q,WAAW5/Q,QAKZnV,wBAIN,EAAKi9H,YAAYj9H,IAGnB55C,KAAK2uU,WAAa,SAAC5/Q,GACjB,IACI6/Q,EADQ7/Q,EAAKruD,YACIsqD,cACfjJ,EAAQ,UAAOA,MACf+C,EAAS,UAAU4F,YACnBmkR,GAAW,aAAE,iBACbC,EAAaD,EAAS,GAAKA,EAAS,GAAGjpF,YAAc,EAErDhzK,GAAW,IAAAZ,aAAYjjB,EAAK0C,KAAM1C,EAAKwJ,IAEzCw2Q,EAAkB,CACpB30T,GAAIw0T,EAASx0T,EAAIw4D,EAASx4D,GAAK2nC,GAAS+C,EAAOnlD,MAAQmvU,GAAc,EACrEz0T,GAAIu0T,EAASv0T,EAAIu4D,EAASv4D,GAAK0nC,EAAQ+C,EAAOjlD,OAAS,GAGzDkvD,EAAKspI,MAAMxL,iBAAgB,GAC3B,EAAKmiJ,OAAOD,IAGd/uU,KAAK62K,YAAc,SAACj9H,GAAgC,IAAzBq1R,EAAyB,wDAC9CL,EAAWh1R,EAAMoR,cACjBkkR,EAAc,UAAiBt4Q,UAAUhd,EAAM6R,YAC7C1J,EAAQ,UAAOA,MACf+C,EAAS,UAAU4F,YACnBmkR,GAAW,aAAE,iBACbC,EAAaD,EAAS,GAAKA,EAAS,GAAGjpF,YAAc,EAEvDmpF,EAAkB,CACpB30T,EAAGw0T,EAASx0T,EAAI2nC,GAAS+C,EAAOnlD,MAAQmvU,GAAc,EAAII,EAAYvvU,MAAQ,EAAIoiD,EAClF1nC,EAAGu0T,EAASv0T,EAAI0nC,EAAQ+C,EAAOjlD,OAAS,EAAIqvU,EAAYrvU,OAAS,EAAIkiD,GAEnEktR,IACFF,EAAgB30T,EAAI20T,EAAgB30T,EAAI0qC,EAAOnlD,MAAQ,GAGzD,EAAKqvU,OAAOD,GACZn1R,EAAMugH,YAAYk+B,MAAMxL,iBAAgB,IAG1C7sL,KAAK42K,gBAAkB,SAACh9H,GAAgC,IAAzBq1R,EAAyB,wDAClDL,EAAWh1R,EAAMoR,cACjBuzG,EAAe,UAAUvzG,cACzBkkR,EAAc,UAAiBt4Q,UAAUhd,EAAM6R,YAC7C1J,EAAQ,UAAOA,MACf+C,EAAS,UAAU4F,YACnBmkR,GAAW,aAAE,iBACbC,EAAaD,EAAS,GAAKA,EAAS,GAAGjpF,YAAc,EAEvDmpF,EAAkB,CACpB30T,EAAGw0T,EAASx0T,EAAI2nC,GAAS+C,EAAOnlD,MAAQmvU,GAAc,EAAII,EAAYvvU,MAAQ,EAAIoiD,EAAQw8G,EAAankJ,EACvGC,EAAGu0T,EAASv0T,EAAI0nC,EAAQ+C,EAAOjlD,OAAS,EAAIqvU,EAAYrvU,OAAS,EAAIkiD,EAAQw8G,EAAalkJ,GAExF40T,IACFF,EAAgB30T,EAAI20T,EAAgB30T,EAAI0qC,EAAOnlD,MAAQ,GAGzD,EAAKwvU,aAAaJ,IAGpB/uU,KAAKgvU,OAAS,SAACD,GACb,IAAIxwK,EAAe,UAAUvzG,cACzBokR,EAAiBL,EAAgB30T,GAAKmkJ,EAAankJ,EACnDi1T,EAAiBN,EAAgB10T,GAAKkkJ,EAAalkJ,EAuBnDi1T,EAAoB1nK,aArBC,WACnBx9J,KAAKkI,KAAKisJ,EAAankJ,KAAOhQ,KAAKkI,KAAKy8T,EAAgB30T,IACvDhQ,KAAKkI,KAAMisJ,EAAalkJ,KAAOjQ,KAAKkI,KAAKy8T,EAAgB10T,IAE5DgsJ,cAAcipK,GAGhB,IAAIC,EAAanlU,KAAK4pE,KAAK5pE,KAAK4pE,IAAI+6P,EAAgB30T,GAAKhQ,KAAK4pE,IAAIuqF,EAAankJ,IAAM20T,EAAgB30T,EAAI,UAAOgrC,WAC5GoqR,EAAaplU,KAAK4pE,KAAK5pE,KAAK4pE,IAAI+6P,EAAgB10T,GAAKjQ,KAAK4pE,IAAIuqF,EAAalkJ,IAAM00T,EAAgB10T,EAAI,UAAO+qC,WAEhHm5G,EAAe,CACbnkJ,EAAGg1T,EACC7wK,EAAankJ,GAAK20T,EAAgB30T,EAAI20T,EAAgB30T,EAAImkJ,EAAankJ,EAAIm1T,EAC3EhxK,EAAankJ,GAAK20T,EAAgB30T,EAAI20T,EAAgB30T,EAAImkJ,EAAankJ,EAAIm1T,EAC/El1T,EAAGg1T,EACC9wK,EAAalkJ,GAAK00T,EAAgB10T,EAAI00T,EAAgB10T,EAAIkkJ,EAAalkJ,EAAIm1T,EAC3EjxK,EAAalkJ,GAAK00T,EAAgB10T,EAAI00T,EAAgB10T,EAAIkkJ,EAAalkJ,EAAIm1T,GAGjF,UAAU3kR,YAAY0zG,KAEgC,IAG1Dv+J,KAAKmvU,aAAe,SAACJ,GACnB,IAAIxwK,EAAe,UAAckX,SAC7B25J,EAAiBL,EAAgB30T,GAAKmkJ,EAAankJ,EACnDi1T,EAAiBN,EAAgB10T,GAAKkkJ,EAAalkJ,EAuBnDi1T,EAAoB1nK,aArBC,WACnBx9J,KAAKkI,KAAKisJ,EAAankJ,KAAOhQ,KAAKkI,KAAKy8T,EAAgB30T,IACvDhQ,KAAKkI,KAAMisJ,EAAalkJ,KAAOjQ,KAAKkI,KAAKy8T,EAAgB10T,IAE5DgsJ,cAAcipK,GAGhB,IAAIC,EAAanlU,KAAK4pE,KAAK5pE,KAAK4pE,IAAI+6P,EAAgB30T,GAAKhQ,KAAK4pE,IAAIuqF,EAAankJ,IAAM20T,EAAgB30T,EAAI,UAAOgrC,WAC5GoqR,EAAaplU,KAAK4pE,KAAK5pE,KAAK4pE,IAAI+6P,EAAgB10T,GAAKjQ,KAAK4pE,IAAIuqF,EAAalkJ,IAAM00T,EAAgB10T,EAAI,UAAO+qC,WAEhHm5G,EAAe,CACbnkJ,EAAGg1T,EACC7wK,EAAankJ,GAAK20T,EAAgB30T,EAAI20T,EAAgB30T,EAAImkJ,EAAankJ,EAAIm1T,EAC3EhxK,EAAankJ,GAAK20T,EAAgB30T,EAAI20T,EAAgB30T,EAAImkJ,EAAankJ,EAAIm1T,EAC/El1T,EAAGg1T,EACC9wK,EAAalkJ,GAAK00T,EAAgB10T,EAAI00T,EAAgB10T,EAAIkkJ,EAAalkJ,EAAIm1T,EAC3EjxK,EAAalkJ,GAAK00T,EAAgB10T,EAAI00T,EAAgB10T,EAAIkkJ,EAAalkJ,EAAIm1T,GAGjF,UAAczmR,OAAOw1G,KAEiC,M,+HC3I5D,O,IACA,O,IACA,O,IACA,Q,IACA,QACA,QAKA,S,IACA,MACA,QACA,QAMA,QACA,SACA,QACA,SACA,S,uDAGqBkxK,G,kEAEnBjyM,OAAS,CACPs1H,uB,KAEFx/L,gBAAkB,G,KAElB0/L,aAAe,WACb,EAAKzvJ,OAAS,IAAI,EAAJ,QACd,EAAKA,OAAOE,eAAe,EAAK+5B,OAAOs1H,QACvC,UAAavqM,UAAU,iBAAkB,GAAM,I,KAGjD0qM,eAAiB,WACf,UAAax5L,SACX,UAAaC,OAAOK,SACpB,EAAKvR,UACL,EACA,UAAaoR,WAAWojC,U,KAI5Bx0C,UAAY,SAACJ,GAEX,IAAI+M,EAAa,UAAU/J,gBAE3B,GAAI+J,GAAcA,EAAW/I,gBAAiB,CAC5C,IAAMi4H,EAAa,UAAMliL,WAEzB,GADqBkiL,EAAWz0H,cAAci4C,eACzB,EAAAtxD,uBAAuBvB,iBAC1C,OAGF,IAAI+2J,EAAM52I,EAAW/I,kBACjB2/I,GAAOA,EAAI1V,sBAAwBhS,EAAWz0H,cAAci4C,eAAiB,EAAA50D,qBAAqBx7B,OACpGs0L,EAAIpJ,gBACIoJ,GAAOA,EAAI1V,sBAEV0V,IAAQA,EAAI1V,uBAAyB0V,EAAIrgJ,iBAAmB,EAAK63C,OAAOG,cACjF,IAAAx0C,gBAAe68I,EAAK,KAAM,EAAApvJ,0BAA0B9B,aAAc,KAAM,KAAK,GAAI,EAAG,KAAM,MAAM,GASpG,EAAK0oD,OAAO6vJ,yB,KAGdrmD,WAAa,SAACsmD,GACZ,IAAMhvE,EAAa,UAAMliL,WACzB,UAAM8hB,UAAS,IAAA+0C,aAAY,EAAAzc,cAAcG,qBAAsB22M,IAC/D,UAAMpvO,UAAS,IAAAujF,mBAAkB,EAAAjxD,uBAAuBvB,mBACxD,IAAM6jB,EAAqBwrH,EAAWt2K,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,K,KAG7Dy6L,cAAgB,SAACD,GACf,UAAMpvO,UAAS,IAAAmpL,gBAAe,EAAA7wJ,cAAcG,qBAAsB22M,IAClE,UAAMpvO,UAAS,IAAAujF,mBAAkB,EAAAjxD,uBAAuBvB,mBACxD,UAAM/wB,UAAS,IAAAyjF,wBAAsB,IAErC,IACM7uC,EADa,UAAM12D,WACa4L,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,K,KAG7D26L,cAAgB,SAACxgH,GACf,UAAM/uH,UAAS,IAAAopL,gBAAe,EAAA9wJ,cAAcG,qBAAsBs2F,EAAehrI,M,KAGnFm0L,0BAA4B,SAACptI,GAC3B,IACMrS,EADa,UAAMv6C,WACe+qD,kBAAkBxQ,qBACpDk/I,EAAsB,IAAI,EAAJ,QAAmB7sI,EAAMrS,EAAqBjoD,OAAS,EAAG,EAAA8pD,qBAAqB1D,cACrGx3C,GAAU,IAAA41K,0BAKhB,OAJI51K,GACFu4L,EAAoBvkI,aAAah0D,EAAQmY,KAAK7X,UAAUqE,IAGnD4zL,G,KAGTvjI,QAAU,SAACuyG,EAASxnE,GACdA,GACF,UAAaQ,YAAY3+F,KAAM,UAAay0D,OAAOM,QACnD,EAAK05L,0BAA2B,GAEhC,EAAK37L,oB,KAsBT47L,oBAAsB,WAGpB,IAFA,IAAIrgM,EAAkB,UAAUF,qBAEvB7+D,EAAI,EAAGA,EAAI++D,EAAgB7+D,OAAQF,IAAK,CAC/C,IAAIqgE,EAAWtB,EAAgB/+D,GAAGq/P,cAElCh/L,EAAS9sD,KAAI,SAAC+rP,GACZA,EAAQh0P,OAAgC,WAAvB,UAAO+M,aACpB,IAAAyqE,YAAWw8K,EAAQh0P,SACnB,IAAA22E,YAAWq9K,EAAQh0P,QACnBg0P,EAAQtmB,YACVsmB,EAAQtmB,UAAUr2O,MAA+B,WAAvB,UAAO0V,aAC7B,IAAAyqE,YAAWw8K,EAAQtmB,UAAUr2O,QAC7B,IAAAs/E,YAAWq9K,EAAQtmB,UAAUr2O,WAIrCo8D,EAAgB/+D,GAAGu/P,iBAAiB58P,MAAQ09D,EAAS,GAAG/0D,OAG1D,OAlB0B,G,KAqB5Bm4E,0BAA4B,SAAC9gF,GAC3B,MAA8B,WAAvB,UAAO0V,aACV,IAAAmrE,yBAAwB7gF,GAAOq7D,YAC/Br7D,G,KAGN68P,eAAiB,WACf,IAAIC,EAAmB,EACjB9tM,EAAQ,UAAUuF,WAFH,uBAGrB,YAAmBvF,EAAnB,+CAA0B,SACfuL,KAAKg0I,wBACZuuD,GAAoB,EAAKC,uBALR,6EASrB,OAAOD,G,KAGTC,mBAAqB,WACnB,MAA8B,aAAvB,UAAOrnP,YACR,KACD,K,KAGPsnP,wBAA0B,WACxB,IAAI1gM,EAAa,GACXtN,EAAQ,UAAUuF,WAFM,uBAG9B,IAH8B,IAG9B,EAH8B,iBAItBi5I,EAJsB,QAIEjzI,KAAKg0I,sBACnC,GAAIf,EAAkB,CACpB,IAAMyvD,EAAkB,EAAKF,qBAEzB1/L,GADa,IAAAD,mBACUxoD,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAK7X,UAAUqE,KAAO08L,KAEnElxI,EAAWz+D,KAAK,CACduR,OAAQ,EAAAu1C,YAAYrL,KACpBplC,KAAM,EAAAywC,YAAYrL,KAClB/5C,KAAM,UAAUgkB,KAAKC,cAAc,CAAC1S,GAAIusD,EAAY/4C,KAAK7X,UAAUmF,oBACnEsmD,UAAWs1I,EACX9vI,SAAU,EACVngE,OAAQ0/P,EACRt2M,KAAMs2M,MAdZ,EAAmBjuM,EAAnB,+CAA0B,IAHI,6EAsB9B,OAAOsN,G,KAGTk1F,WAAa,WAKX,MAAO,CAAConJ,SAJW,UAAM3tS,WACe+qD,kBAAkBxQ,qBAGnB50C,KAAI,SAACinL,GAAD,MAAc,CACrD/mL,GAAI+mL,EAAQ/mL,GACZqnD,UAAW0/H,EAAQ1/H,UACnBD,UAAW2/H,EAAQ3/H,UACnBjmD,SAAqC,aAA3B,UAAWyD,YACjBxC,KAAKyC,QAAO,IAAAC,kBAAiBiiL,EAAQslE,4BAA6B,IAClE,IAAAtnP,SAAQgiL,EAAQslE,iC,gEAnGxB,UAAaprM,YAAYjpD,MACzB,UAAa4jG,YAAY5jG,MACzBA,KAAKujG,QAASvjG,KAAKujG,OAAOxrC,mBAC1B,UAAO/R,UAAUE,OAAQ,M,OAGpBg5G,aAAe,WAGpB,IAFA,IAAI5rG,EAAkB,UAAUF,qBAC5BghM,EAAsB,EACjB7/P,EAAI,EAAGA,EAAI++D,EAAgB7+D,OAAQF,IAC1C6/P,GAAuB9gM,EAAgB/+D,GAAK++D,EAAgB/+D,GAAG8/P,0BAA4B,KAG7F,OAAOD,G,aA7GUq7E,G,4NC1BrB,YACA,SAEMC,EAA6B,CAAC,gBAAiB,eAAgB,YAAa,YAAa,aAC7F,eAAgB,iBAAkB,kBAAmB,kBAAmB,eAAgB,cAAe,gBACvG,SAAU,sBAAuB,mBAAoB,kBAQ1CC,EAA8BA,EAA9BA,4BAA8B,SAAC55T,GAA6B,IAAhBzP,EAAgB,uDAAP,GAChE,OAAQyP,EAAYtf,MAClB,IAAK,WACH,GAAIi5U,EAA2Bv1U,SAASmM,GACtC,MAAO,QAET,MAEF,IAAK,UACH,MAAO,MAET,IAAK,0BACH,OAAQA,GACN,IAAK,gBACL,IAAK,kBACH,MAAO,eAMf,OAAQyP,EAAYtf,MAAQ,IAAIkI,QAAQ,MAAO,MASpCixU,EAA0BA,EAA1BA,wBAA0B,SAAC75T,EAAazP,GACnD,QAASyP,EAAYtf,MAAQ,IAAI0mB,QAC/B,IAAK,gBACL,IAAK,uBACL,IAAK,4BACL,IAAK,4BACL,IAAK,uBACL,IAAK,iBACL,IAAK,+BACL,IAAK,aACL,IAAK,6BACL,IAAK,4BACL,IAAK,qBACL,IAAK,sBACL,IAAK,SACL,IAAK,6BACL,IAAK,iBACL,IAAK,kCACL,IAAK,iBACL,IAAK,mBACL,IAAK,oBACL,IAAK,iBACL,IAAK,0BACL,IAAK,gBACL,IAAK,kCACL,IAAK,+BACH,OAAO,EACT,IAAK,QACH,OAAOuyT,EAA2Bv1U,SAASmM,GAE7C,IAAK,QACH,OAAQA,GACN,IAAK,iBACL,IAAK,eACL,IAAK,iBACL,IAAK,cACL,IAAK,gBACL,IAAK,sBACL,IAAK,mBACH,OAAO,EACT,QACE,OAAO,EAGb,IAAK,aACH,OAAQA,GACN,IAAK,eACL,IAAK,cACL,IAAK,gBACH,OAAO,EACT,QACE,OAAO,EAGb,IAAK,OACL,IAAK,eACH,OAAQA,GACN,IAAK,iBACH,OAAO,EACT,QACE,OAAO,EAGb,IAAK,0BACH,OAAQA,GACN,IAAK,gBACL,IAAK,kBACH,OAAO,EACT,QACE,OAAO,EAGb,QACE,OAAO,IAS0BupU,EAA1BA,wBAA0B,SAAC35T,GAEtC,OAA2B,QAAnBA,EAAYlO,IAAsC,mBAAtBkO,EAAYhf,OACvB,QAAnBgf,EAAYlO,IAAsC,WAAtBkO,EAAYhf,OACrB,QAAnBgf,EAAYlO,IAAsC,eAAtBkO,EAAYhf,OACrB,QAAnBgf,EAAYlO,IAAsC,YAAtBkO,EAAYhf,OACrB,QAAnBgf,EAAYlO,IAAsC,cAAtBkO,EAAYhf,OACrB,QAAnBgf,EAAYlO,IAAsC,cAAtBkO,EAAYhf,OACrB,OAAnBgf,EAAYlO,IAAqC,aAAtBkO,EAAYhf,OAUPkqL,EAA3BA,yBAA2B,SAACprK,EAAc1P,EAAQgY,GAC7D,OAAOtI,EACJhP,QAAO,SAAA+O,GAAA,OAAgB65T,EAAwB75T,EAAazP,MAC5DwB,KAAI,SAAAiO,GACH,IAAM+5T,GAAwB,IAAAjvJ,0BAAyB9qK,EAAauI,GAC9Dq0L,EAAkBg9H,EAA4B55T,EAAazP,GAEjE,OADAyP,EAAYI,OAASJ,EAAYI,OAAOzN,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEX,GAAKY,EAAEZ,MACzDtT,OAAO+2B,OAAO,GAAI1V,EAAa,CAAC48L,kBAAiBm9H,6BAEzDpnU,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEX,GAAKY,EAAEZ,OASU+nU,EAA1BA,wBAA0B,SAAC75T,GACtC,OAAQA,EAAYhf,OAKlB,IAAK,QACL,IAAK,QACH,MAAO,QACT,IAAK,6BACH,MAAO,YACT,IAAK,+BACH,MAAO,cACT,IAAK,8BACH,MAAO,aACT,IAAK,0BACH,MAAO,SACT,QACE,OAAO,IAAAgc,wBAAuBgD,EAAYmmF,aAAenmF,EAAYhf,OAAS,IAC3EyH,QAAQ,MAAO,Q,8PCpLxB,Q,IACA,M,IACA,O,IACA,QACA,Q,IACA,QACA,S,IAOA,O,IACA,OACA,Q,mDAEO,IAAMqxU,EAA4BA,EAA5BA,0BAA4B,GAC5BC,EAA4BA,EAA5BA,0BAA4B,GAE5BvzF,E,EAAAA,a,yHAEyC,IAA1BF,EAA0B,wDAC5C0zF,EAAmBxzF,EAAYyzF,2BAC/BC,EAAsBC,EAAoBC,6BAC1CC,EAAgBC,EAAcC,uBAC9B3zF,EAAa,CACjB,WAAcN,EACd,kCAAiB0zF,IAAjB,aAAsCE,IAAtC,aAA8DG,KAwBhE,OAAOzzF,I,iDAIP,IAAM5hO,GAAS,IAAAC,oBAGf,OAFe,UAAUgwC,YAEXrjD,KAAI,SAAC8xC,GACjB,GAAIA,aAAiBA,EAAjBA,QAA4B,CAC9B,IAAIohF,EAAcphF,EAAMkgG,cAAcwkB,sBAClCoyK,EAAgB11M,GAA4BphF,EAAMoR,cAEhDq0G,EAAuBnkJ,EAAOo2F,eAAe13D,EAAMu4F,wBAAwB,GACjF,GAAIktB,EAAsB,CACxB,IAAIg9E,EAAiBh9E,EAAqBM,4BAA4B7zJ,MAAK,SAAA6S,GAAA,OAAkBA,EAAe3W,KAAO4xC,EAAMwV,aACzH,IAAKitL,EAAgB,CACnB,IAAMC,EAAephO,EAAOo2F,eAAe13D,EAAMwV,WAAW,GACxDktL,IACFD,EAAiBC,EAAa34O,WAGlC,OAAO+4O,EAAYi0F,yBAAyB/2R,EAAO82R,EAAer0F,EAAgBh9E,GAElFrnK,QAAQ4B,IAAI,iFAAkFggD,EAAMu4F,wBAEtG,GAAIv4F,aAAiBA,EAAjBA,QAA+B,CACnC,IAAIohF,EAAcphF,EAAMkgG,cAAcwkB,sBAChCoyK,EAAgB11M,GAA4BphF,EAAMoR,cAClDsxL,EAAephO,EAAOo2F,eAAe13D,EAAMwV,WAEjD,GAAIktL,EACF,OAAOI,EAAYk0F,uBAAuBh3R,EAAO82R,EAAep0F,GAGpE,OAAO,QACNt1O,QAAO,SAAA81O,GACR,OAAsB,OAAfA,O,mDAYyB4zF,EAAet6L,EAAYy6L,EAAYh6L,GAEzE,IAAMi6L,EAAW1mU,KAAKqnE,GAAK,KAAQolE,EAAiB,IAG9Cic,EAAU49K,EAAct2T,EAAIg8H,EAAa,EACzC26L,EAAUL,EAAcr2T,EAAIw2T,EAAa,EAGzCG,EAAW56L,EAAa,EAAKhsI,KAAKsnE,IAAIo/P,GACtCG,EAAWJ,EAAa,EAAKzmU,KAAKunE,IAAIm/P,GAGtCI,EAAcL,EAAazmU,KAAKunE,IAAIm/P,GAG1C,MAAO,CACL12T,EAAG04I,EAAUk+K,EACb32T,EAAGq2T,EAAcr2T,EACjB82T,EAAGJ,EAAUE,EAAUC,O,OAapBE,qBAAuB,SAACv6L,EAAgBn7G,EAAU/7B,EAAOE,GAE9D,IAAIwxU,GAAax6L,EAAiBzsI,KAAKqnE,GAAK,IAGxC6/P,EAAQ51S,EAASthB,EACjBm3T,EAAQ71S,EAASrhB,EAWjBsjH,EAJkB2zM,EAAQ3xU,EAAQ,GAJV2xU,EAAQ3xU,EAAQ,EAAIyK,KAAKsnE,IAAI2/P,GAAYxxU,EAAS,EAAIuK,KAAKunE,IAAI0/P,IASvFzzM,EAJkB2zM,EAAQ1xU,EAAS,GAJX0xU,EAAQ5xU,EAAQ,EAAIyK,KAAKunE,IAAI0/P,GAAYxxU,EAAS,EAAIuK,KAAKsnE,IAAI2/P,IAU3F,MAAO,CACLj3T,EAAGy8H,EAAiB,EAChBn7G,EAASthB,EAAIujH,EACbjiG,EAASthB,EACbC,EAAGw8H,EAAiB,EAChBn7G,EAASrhB,EAAIujH,EACbliG,EAASrhB,I,EAIVs2T,yBAA2B,SAAC/2R,EAAO82R,EAAer0F,EAAgBh9E,GAKvE,IAAKg9E,IAAmBA,EAAeT,mBACrC,OAAO,KAGT,IAAMxlG,EAAax8F,EAAMs8F,aAAet8F,EAAMs8F,aAAaI,gBAAkB18F,EAAMy8F,WAE7Em7L,EAA0C,IAA5B53R,EAAM6R,WAAWh3D,OAAemlD,EAAMkjH,UAAUn9J,MAAQi6C,EAAMy8F,WAC5EL,EAAcp8F,EAAMs8F,aAAet8F,EAAMs8F,aAAaC,iBAAmBv8F,EAAMq8F,YAC/E46L,EAAaj3R,EAAMs8F,aAAet8F,EAAMs8F,aAAau2K,gBAAkB7yQ,EAAMsjH,WAC7Eu0K,EAA0C,IAA5B73R,EAAM6R,WAAWh3D,OAAemlD,EAAMkjH,UAAUj9J,OAAS+5C,EAAMq8F,YAG7Ey7L,EAAyB93R,EAAMsnH,4BAC/B9pJ,GAAM,IAAAoiO,uBAAsB6C,EAAgBh9E,GAAsB1gK,QAAQ,YAAa,QACvFgzU,GAAe,IAAAn4F,uBAAsBn6E,EAAqB17J,UAAW07J,GACrE1qF,EAAOi9P,EAAeC,eAAej4R,EAAOyiM,EAAgBjlO,EAAK4+H,GACjEorB,EAAcxnH,EAAM4c,YAAY4qG,YAChC0wK,EAAY,CAAE13T,EAAGs3T,EAAuBt3T,EAAGC,EAAGs6D,EAAMw8P,EAAGO,EAAuBr3T,GAC9E2iC,EAAU40R,EAAeG,WAAWn4R,EAAOk4R,EAAWl4R,EAAMi9F,eAAgB26L,EAAaC,EAAaz7L,GAS5G,MAAO,CACL,OAAUp8F,EAAMymF,aAAezmF,EAAMymF,aAAezmF,EAAMtzC,OAC1D,UAAaszC,EAAM4c,YAAYsjG,SAC/B,EAAKg4K,EAAU13T,EACf,EAAK03T,EAAUz3T,EACf,EAAKy3T,EAAUX,EACf,SAAYv3R,EAAMi9F,eAClB,IAAOz/H,EACP,aAAgBu6T,EAGhB,aAAgBH,EAChB,aAAgBC,EAChB,cAAiBz7L,EACjB,MAASI,EACT,OAAUJ,EACV,MAAS66L,EACT,eAAkBj3R,EAAMknH,kBACxB,gBAAmBlnH,EAAMonH,0BACzB,UAAaq7E,EAAer0O,GAC5B,gBAAmBq3J,EAAqB17J,UAAUqE,GAClD,YAAeo5J,EACf,QAAWpkH,I,EAQR4zR,uBAAyB,SAACh3R,EAAO82R,EAAep0F,GACrD,IAAKA,IAAiBA,EAAa34O,YAAc24O,EAAa34O,UAAUi4O,mBACtE,OAAO,KAIT,IAAMxlG,GAAcx8F,EAAMy8F,WACpBL,GAAep8F,EAAM61L,eACrBohG,GAAcj3R,EAAMq8F,YACpB+7L,EAA0Bp4R,EAAMi9F,eAAiB,GAEnDo7L,EAAoBv1F,EAAYw1F,6BAA6BxB,EAAet6L,EAAYy6L,EAAYj3R,EAAMi9F,gBACxGz/H,GAAM,IAAAkkO,aAAYgB,EAAa34O,UAAUi4O,oBAGzCl1C,EAAO41C,EAAah2O,SAAW,EAAAqvC,gBAAgBnE,KAAOw+R,EAA4BC,EAA4B,EAOpH,MAAO,CACL,OALa3zF,EAAah2O,SAAW,EAAAipC,cAAcgC,WAAa,EAAAhC,cAAcyB,oBAAqBsrM,EAAah2O,OAMhH,EAAK2rU,EAAkB73T,EACvB,EAAKssL,EACL,EAAKurI,EAAkBd,EACvB,SAAYa,EACZ,IAAO56T,EACP,MAASg/H,EACT,OAAUJ,EACV,MAAS66L,I,GAKFR,E,EAAAA,qB,iIAGT,IAAMD,EAAsB,GACtB+B,EAA6B,CAAC,EAAA5iS,cAAcyB,oBAAqB,EAAAzB,cAAcgC,YAyB/E6gS,EAlBuB,WAC3B,IAAIA,EAAa,8GACXrrU,EAAQ,UAAM5E,WACpB,GAAI4E,EAAMgH,UAAU28F,mBAAoB,CACtC,IACM2oG,GADS,IAAAl4L,oBACkBm2F,eAAevqG,EAAMgH,UAAU28F,oBAAoB,GACpF,GAAI2oG,EACF,GAAIA,EAAkB1vM,UAAUi4O,mBAAoB,CAClD,IAAMy2F,GAAmB,IAAAr2F,qBAAoB3oC,GAC7C++H,EAAaC,GAAsCh/H,EAAkB1vM,UAAUi4O,mBAAmB,QAElGw2F,GAAa,IAAAhvU,qBAAoBiwM,GAIvC,OAAO++H,EAGUE,GACbl1R,EAAqB,UAAqBA,mBAAmB86E,eAG7Dq6M,EAAc,SAACp/R,GACnB,IAAIwlN,EAAe,GACf65E,EAAa,KAFa,uBAI9B,YAAoBr/R,EAApB,+CAA4B,KAAjByG,EAAiB,QACpBo8F,EAAcp8F,EAAMs8F,cAAgBt8F,EAAMs8F,aAAaC,eACzDv8F,EAAMs8F,aAAaC,iBACnB65L,EACEyC,EAAe74R,EAAMwb,UAAY,EAAA7lB,cAAcgC,WAChC4gS,EAA2Bh4U,SAASy/C,EAAMtzC,SAC7D6rU,EAA2Bh4U,SAASy/C,EAAMymF,eAC1C8xM,EAA2Bh4U,SAASy/C,EAAMwb,UAWxC4gF,IAAgBw8L,GAAeC,GAC7B95E,EAAalkQ,OAAS,IACxB47U,EAAoBqC,0BAA0B/5E,EAAcy5E,EAAYhC,EAAqBoC,GAC7F75E,EAAe,IAInB65E,EAAax8L,EACb2iH,EAAa5jQ,KAAK6kD,KAhBZ++M,EAAalkQ,OAAS,IACxB47U,EAAoBqC,0BAA0B/5E,EAAcy5E,EAAYhC,EAAqBoC,GAC7F75E,EAAe,IAEjB65E,EAAa,OAlBa,6EAiC1B75E,EAAalkQ,OAAS,GACxB47U,EAAoBqC,0BAA0B/5E,EAAcy5E,EAAYhC,EAAqBoC,IAjE/D,uBAsElC,YAAgCp1R,EAAhC,+CAAoD,KAAzCy8F,EAAyC,QAC9C1mG,EAAS,UAAqBiK,mBAAmBw8F,iBAAiBC,GAStE1mG,EAAOzqC,MAAK,SAACC,EAAGC,GACd,IAAM+pU,EAAOhqU,EAAEqiD,cACT4nR,EAAOhqU,EAAEoiD,cAGf,OAAI5gD,KAAK4pE,IAAI2+P,EAAKv4T,EAAIw4T,EAAKx4T,IAFT,GAGTu4T,EAAKt4T,EAAIu4T,EAAKv4T,EAGhBs4T,EAAKv4T,EAAIw4T,EAAKx4T,KAGnB+4B,EAAO1+C,OAAS,GAClB89U,EAAYp/R,IA7FkB,6EAkGlC,IACM0/R,EADS,UAAU1nR,YACSnkD,QAAO,SAAAylD,GAAA,OACvC0lR,EAA2Bh4U,SAASsyD,EAAInmD,SACrC6rU,EAA2Bh4U,SAASsyD,EAAI4zE,eACxC8xM,EAA2Bh4U,SAASsyD,EAAI2I,YAtGX,uBAyGlC,YAAgCy9Q,EAAhC,+CAAoD,KAAzCC,EAAyC,QAClD,GAA+D,OAA3DA,EAAkBh5L,cAAcC,uBAAiC,CACnE,IAAMg5L,EAA0BD,EAAkB58L,cAAgB48L,EAAkB58L,aAAaC,eAC7F28L,EAAkB58L,aAAaC,iBAC/B65L,EAEJK,EAAoBqC,0BAClB,CAACI,GACDV,EACAhC,EACA2C,KAnH4B,6EAwHlC,OAAO3C,M,OAGFsC,0BAA4B,SAACl6L,EAAe45L,EAAYhC,EAAqBp6L,GAClF,IAAMs/B,EAAoB,UAAiBh+B,iCAAiCkB,GACtED,EAAgB,UAAiBP,kCAAkCQ,GAAe,GAClFw6L,EAAW,UAAiB16L,6BAA6BC,EAAeC,GAE9E,GAAI88B,EAAkB7gL,OAAS,EAAG,CAChC,IAAMkL,EAAQ21K,EAAkB,GAAGl7J,EAAIk7J,EAAkB,GAAGl7J,EACtDva,EAASy1K,EAAkB,GAAGj7J,EAAIi7J,EAAkB,GAAGj7J,EAC7D+1T,EAAoBr7U,KAAK,CACvB,OAAU,aACV,EAAKwjJ,EAAc,GAAGn+H,EACtB,EAAK47H,EACL,EAAKuC,EAAc,GAAGl+H,EACtB,MAAS1a,EACT,OAAUE,EACV,SAAY,gFACZ,YAAeuyU,EACf,eAAkB75L,EAClB,SAAYy6L,SAGdh7U,QAAQC,MAAM,2B,GAKPu4U,E,EAAAA,c,uHAGT,OADc,UAAqBvzR,MAAMi7E,eAC5BpwH,KAAI,SAAAytC,GACf,MAAO,CACL,OAAU,OACV,YAAe,8GACf,OAAU,IACV,eAAkBA,EAAK2qH,YAAYp4J,KAAI,SAAAkkD,GAAA,OAASA,EAAMhB,yB,KAMjD4mR,E,EAAAA,e,yHAC+D,IAA5CtrU,EAA4C,uDAAnC,EAAAipC,cAAc0B,oBAC7CkC,EAAS,UAAUgY,YACzB,OAAsB,IAAlBhY,EAAO1+C,OACF,EAGF0+C,EAAO7xC,QAAO,SAACC,EAAKizG,GACzB,IAAIy+N,EAAqB,EAUzB,OARIz+N,EAAQluG,SAAWA,IACjBkuG,aAAmBA,EAAnBA,QACFy+N,EAAqBz+N,EAAQ0hC,aAAaC,iBACjC3hC,aAAmBA,EAAnBA,UACTy+N,EAAqBz+N,EAAQi7H,iBAI7BwjG,EAAqB1xU,EAChB0xU,EAGF1xU,IACN,K,qCAGiBq4C,EAAOyiM,EAAgBjlO,EAAK4+H,GAChD,IAAIrhE,EAAO,EACL7hE,GAAW,IAAAunO,2BAA0BgC,EAAgBjlO,GACrD+sF,GAAW,IAAA22I,yBAAwBhoO,GAEzC,GAAI8mC,EAAMtzC,SAAW,EAAAipC,cAAc0B,qBAAuB2I,EAAMymF,eAAiB,EAAA9wF,cAAc0B,oBAAqB,CAMlH,GAJA0jC,EAAOq7P,EAA4BC,EAGA,SAAb9rO,IAAuB,IAAA43I,2BAA0B3kO,IAAQ4+H,GAAei6L,EAC3E,CACjB,IAAMrhG,EAAmBh1L,EAAMkgG,cAAc2jJ,sBAGzCy1C,SAGFA,EADEtkG,KAAqB,IAAAwN,aAAYxN,IAAqBA,EAAiBtoO,SAAW,EAAAipC,cAAc0B,oBAChEjoC,WAAW4lO,EAAiB14F,aAAaC,kBAEzCntI,WAAW4oU,EAAeuB,uBAAuB,EAAA5jS,cAAc0B,sBAEnG0jC,EAAOq7P,EAA4BC,EAA4BiD,EAAkCl9L,EASnG,IAAMo9L,EAAiCpqU,WAAW4oU,EAAeuB,uBAAuB,EAAA5jS,cAAc2B,qBAClGkiS,IACFz+P,EAAOy+P,EAAiCp9L,GAG5C,OAAOrhE,I,iCAGS/6B,GAAO,2BACvB,YAAmBA,EAAM6R,WAAzB,+CAAqC,KAA1BsD,EAA0B,QAEnC,GADiBA,EAAKuqI,cAIpB,MAAO,CACL,CACE+5I,YAJgBtkR,EAAKyqI,iBAKrBlzL,OAAQszC,EAAMtzC,UATC,kF,sFC1eXgtU,WAAT,SAAoB9nP,EAAIC,GAC7B,IAAI8nP,EAAS/nP,EACTgoP,EAAU/nP,EACVD,EAAG/2F,OAASg3F,EAAGh3F,SACjB8+U,EAAS9nP,EACT+nP,EAAUhoP,GAEZ,IAAMioP,EAAeF,EAAO9+U,OAC5B,GAAqB,IAAjBg/U,EACF,OAAO,EAET,OAAQA,EA8BV,SAAsBjoP,EAAIC,GACxBD,EAAKA,EAAGlvF,cACRmvF,EAAKA,EAAGnvF,cAGR,IADA,IAAMo3U,EAAQ,GACLn/U,EAAI,EAAGA,GAAKi3F,EAAG/2F,OAAQF,IAAK,CAEnC,IADA,IAAIo/U,EAAYp/U,EACPkB,EAAI,EAAGA,GAAKg2F,EAAGh3F,OAAQgB,IAC9B,GAAU,IAANlB,EAASm/U,EAAMj+U,GAAKA,OAEtB,GAAIA,EAAI,EAAG,CACT,IAAImjS,EAAW86C,EAAMj+U,EAAI,GACrB+1F,EAAGv4E,OAAO1e,EAAI,KAAOk3F,EAAGx4E,OAAOxd,EAAI,KAAImjS,EAAWxuR,KAAKwwH,IAAIxwH,KAAKwwH,IAAIg+J,EAAU+6C,GAAYD,EAAMj+U,IAAM,GAC1Gi+U,EAAMj+U,EAAI,GAAKk+U,EACfA,EAAY/6C,EAIdrkS,EAAI,IAAGm/U,EAAMjoP,EAAGh3F,QAAUk/U,GAEhC,OAAOD,EAAMjoP,EAAGh3F,QAlDOm/U,CAAaL,EAAQC,IAAYxqU,WAAWyqU,I,EAMrDj2F,kBAAT,SAA2Bq2F,EAAel4F,GAC/C,IAAIm4F,EAAoB,EACpBC,EAAqB,KAmBzB,OAjBAF,EAAcz1U,SAAQ,SAAAgZ,GACpB,IAAMy9E,EAAUz9E,EAAI9a,cAAcyB,MAAM,KAAKw2I,MAAMx2I,MAAM,KAAK,GACxDi2U,EAAcr4F,EAAWr/O,cAAcyB,MAAM,KAC7Ck2U,EAAWp/O,EAAQ92F,MAAM,KAAKsV,KAAK,KAAKtV,MAAM,KAEhDm2U,EAAaF,EAAY1yU,QAAO,SAACuoK,EAAOz2J,GAC1C,OAAOy2J,GAASoqK,EAAS95U,SAASiZ,GAAQ,EAAI,KAC7C,GAIC8gU,EAAaJ,IACfC,EAAqB38T,EACrB08T,EAAoBI,MAIjBH,G,EAsCO12F,mBAAT,SAA4B82F,GAEjC,IAAMC,EAAgB,GAgBtB,OAdAD,EAAK/1U,SAAQ,SAAAgZ,GAEX,IAAMi9T,EAAej9T,EAAI5S,MAAM,2BAEzBq8H,EAAUwzM,GAAgBA,EAAa,GAAKz0U,SAASy0U,EAAa,GAAI,IAAM,EAGlFD,EAAcr/U,KAAK,CAAE8rI,UAASzpH,WAIhCg9T,EAAc1rU,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAEi4H,QAAUl4H,EAAEk4H,WAGpCuzM,EAActsU,KAAI,SAAAmpE,GAAA,OAAQA,EAAK75D,QA9BHk9T,EAAxBA,sBAAwB,SAACxlC,GACpC,OAAIA,IAAqD,IAAnCA,EAAe92H,gBACU,IAAtC82H,EAAexgP,YAAY75D,UACzBq6S,IAAqD,IAAnCA,EAAe92H,mBACG,IAAtC82H,EAAexgP,YAAY75D,QACU,IAAvCq6S,EAAe90P,aAAavlD,QACI,IAAhCq6S,EAAe70P,MAAMxlD,U,+KCtE9B,O,OACA,O,IACA,M,IACA,QACA,O,IAEA,S,IACA,OACA,Q,IAOA,S,IACA,Q,mDAEA,IAMa09M,EAAyBA,EAAzBA,uBAAyB,SAAC97L,EAAD,GAAsC,IAA7BwZ,EAA6B,EAA7BA,SAAUk9D,EAAmB,EAAnBA,cACnDn/E,GAAQ,aAAUyI,EAAO,CAACwZ,aAM9B,OALIjiB,GAAS,EACXyI,EAAM1gB,OAAOiY,EAAO,GAEpByI,EAAMthB,KAAK,CAAC86B,WAAUk9D,kBAEjB12E,GAOHk+T,G,gBAQJ,WAAYjpO,IAAO,gGACXA,IADW,SAuCnBkpO,iBAAmB,SAACxtU,GAAD,OAA0E,KAA9D,aAAU,EAAKskG,MAAMhtF,gBAAiB,CAACuR,SAAS7oB,KAvC5D,EAwCnBytU,iBAAmB,SAACztU,GAAD,OApDEqP,EAoDwB,EAAKi1F,MAAM37E,gBApD5Bz4B,EAoD6C8P,EAnDjEqP,EAAMrc,QAAQ9C,IAAU,EADZ,IAACmf,EAAOnf,GAYT,EA0CnBw9U,mBAAqB,SAAC1tU,GAAD,OAAY,UAAUm6B,eAAe,iBAAmBn6B,IAAW,EAAKskG,MAAM57E,oBAtE3ErZ,EAsE+G8/F,GAAjBA,qBAAqB,EAAK7K,MAAM37E,kBAtEvHz4B,EAsEyI8P,GArEpK4G,EAAQyI,EAAMrc,QAAQ9C,KAChB,EAAKmf,EAAM1gB,OAAOiY,EAAO,GAAKyI,EAAMthB,KAAKmC,GAC5Cmf,IAHgB,IAACA,EAAOnf,EAC3B0W,GA2Be,EA2CnB+mU,mBAAqB,SAAC9kT,EAAUk9D,GAAX,OAA6B,UAAU5rD,eAAe,mBAAqBtR,IAAc,EAAKy7E,MAAMn8E,mBAAmBgjL,EAAuBA,GAAvBA,qBAA2B,EAAK7mG,MAAMhtF,kBAChL,CAACuR,WAAUk9D,oBA5CM,EA8CnB6nP,iBAAmB,SAACl5H,GAClB,UAAUv6K,eAAe,qBAAuBu6K,GAC5C,EAAKpwG,MAAM0xG,gBAAkBtB,EAC/B,EAAKpwG,MAAMtnF,aAAY,IAEvB,EAAKsnF,MAAMp7E,iBAAiBwrL,GAC5B,EAAKhJ,0BAA0B,EAAKpnG,MAAOowG,KApD5B,EAwDnBm5H,YAAc,WACZ,EAAKvpO,MAAMn8E,mBAAmB,IAC9B,EAAKm8E,MAAM57E,mBAAmB,IAC9B,EAAK47E,MAAMyxG,wBAAwB,CAACrmM,OAAQ,CAACxf,MAAO,OA3DnC,EA4GnB49U,kBAAoB,WAClB,IAAMr3J,EAAa,EAAKnyE,MAAM4yE,UAAU1iK,KACxC,OAAQ,EAAK8vF,MAAM0xG,eACjB,IAAK,SACH,IAKM+3H,EALoB,EAAKzpO,MAAM+zE,gBAAgBr4K,QAAO,SAAA+O,GAC1D,OAAQ,CAAC,YAAa,QAAS,SAAS5b,SAAS4b,EAAYtf,OAASsf,EAAYI,OAAOlW,MAAK,SAAAiW,GAC5F,OAAOunK,EAAW9D,gBAAgBx/K,SAAS+b,EAAYlO,UAGNF,KAAI,SAAAwnB,GACvD,MAAO,CACLtnB,GAAIsnB,EAAGtnB,GACPq0F,YAAa/sE,EAAG74B,KAChB2pB,MAAOkP,EAAGnZ,OAAOnP,QAAO,SAAAkP,GAAA,OAAeunK,EAAW9D,gBAAgBx/K,SAAS+b,EAAYlO,WAG3F,OAAO,EAAKgtU,qBAAqBD,GAA4B,GAE/D,IAAK,YACH,IAAMh/T,EAAc,EAAKu1F,MAAM+zE,gBAAgBvzK,MAAK,SAAAmK,GAAA,MAAwB,cAAfA,EAAMxf,QACnE,GAAI,EAAKw+U,yCAAyCl/T,GAAathB,OAC7D,OAAO,EAAKugV,qBAAqBj/T,EAAYI,QAAQ,EAAOJ,EAAY/N,IAE1E,MAEF,IAAK,QACH,IAAM+N,EAAc,EAAKu1F,MAAM+zE,gBAAgBvzK,MAAK,SAAAmK,GAAA,MAAwB,UAAfA,EAAMxf,QACnE,GAAI,EAAKw+U,yCAAyCl/T,GAAathB,OAC7D,OAAO,EAAKygV,YAAYn/T,GAE1B,MAEF,IAAK,QACH,IAAMA,EAAc,EAAKu1F,MAAM+zE,gBAAgBvzK,MAAK,SAAAmK,GAAA,MAAwB,UAAfA,EAAMxf,QACnE,GAAI,EAAKw+U,yCAAyCl/T,GAAathB,OAC7D,OAAO,EAAK0gV,YAAYp/T,GAK9B,OAAO,MApJU,EAuJnBk/T,yCAA2C,SAACl/T,GAC1C,IAAKA,IAAgBA,EAAYI,OAC/B,MAAO,GAET,IAAMsnK,EAAa,EAAKnyE,MAAM4yE,UAAU1iK,KACxC,OAAOzF,EAAYI,OAAOnP,QAAO,SAAAkP,GAC/B,OAAOunK,EAAW9D,gBAAgBx/K,SAAS+b,EAAYlO,QA7JxC,EAwKnBgtU,qBAAuB,SAACI,GAA6C,IAAjCC,EAAiC,wDAAZjkH,EAAY,aAE7Dj5M,EAAiB,EAAKmzF,MAAMnzF,eAC9Bm9T,EAAgBF,EACjBpuU,QAAO,SAAAtO,GAAA,QAAOyf,IAAgC,SAAZzf,EAAExB,OAAoBihB,EAAey6L,UACtD,2BAAZl6M,EAAExB,QAAuCihB,EAAey6L,cAE7D9qM,KAAI,SAAApP,GACH,IAOI0nB,GAPmC,SAAlB1nB,EAAE2jG,YACnB3jG,EAAE0nB,MAAM1X,MAAK,SAACC,EAAGC,GACjB,IAAMm4E,GAASp4E,EAAEzR,MAAM6G,MAAM,KAAK,GAAGA,MAAM,MAAM,GAC3Cw3U,GAAS3sU,EAAE1R,MAAM6G,MAAM,KAAK,GAAGA,MAAM,MAAM,GACjD,OAAOgjF,IAAUw0P,EAAQx0P,EAAQw0P,GAAS,EAAI,EAAI,KAElD78U,EAAE0nB,OACkBtY,KAAI,SAAAvT,GAC1B,OACE,8BAAIq2F,UAAW,gCAAiCpzF,IAAKjD,EAAEyT,IACrD,mCACEsa,KAAM,EAAKgpF,MAAM7wF,KAAKC,cAAc,CAAC1S,IAAKzT,EAAE8nG,aAAe,IAAIl/E,SAC/Du4M,QAAS,EAAK8+G,iBAAiBjgV,EAAEyT,IACjCwtU,UAAW,kBAAM,EAAKb,mBAAmBpgV,EAAEyT,GAAIopN,GAAW14N,EAAEsP,WAKpE,OACE,8BAAI4iF,UAAU,oBAAoBpzF,IAAKkB,EAAEsP,IACvC,mCACEsa,KAAM,EAAKgpF,MAAM7wF,KAAKC,cAAc,CAAC1S,IAAKtP,EAAE2jG,aAAe,IAAIl/E,SAC/Du4M,QAAS,EAAK8+G,iBAAiB97U,EAAEsP,IACjCm/T,SAAUkO,EACVG,UAAW,kBAAM,EAAKb,mBAAmBj8U,EAAEsP,GAAIopN,GAAW14N,EAAEsP,OAE5DtP,EAAE0nB,OAAS1nB,EAAE0nB,MAAM3rB,OAAS,EAC1B,gCAAMm2F,UAAW,4BAA8B,EAAK6pP,iBAAiB/7U,EAAEsP,IAAM,sCAAwC,IAC/G80K,QAAS,kBAAM,EAAK43J,mBAAmBh8U,EAAEsP,OAC/C,KACJ,8BAAI4iF,UAAW,kCAAoC,EAAK6pP,iBAAiB/7U,EAAEsP,IAAM,2CAA6C,KAC3HoY,OAMX,OACE,+BAAKwqE,UAAU,wBACb,8BAAIA,UAAU,qDACX0qP,KAxNU,EA8NnBJ,YAAc,SAACO,GACb,OACE,+BAAK7qP,UAAU,uBACb,8BAAIA,UAAU,oDACX,EAAKqqP,yCAAyCQ,GAAkB3tU,KAAI,SAAApP,GAAA,OACnE,8BAAIlB,IAAKkB,EAAEsP,GACP4iF,UAAW,8CACR,EAAK4pP,iBAAiB97U,EAAEsP,IAAM,sCAAwC,IACzEqM,MAAO,CAACy3E,gBAAiBA,8CAA8CpzF,EAAE6jG,KAAjE,KACRugF,QAAS,kBAAM,EAAK63J,mBAAmBj8U,EAAEsP,GAAIytU,EAAiBztU,MAC/DtP,EAAE6jG,KAAO,KAAO7jG,EAAE2jG,mBAxOZ,EAgPnB84O,YAAc,SAAChpO,GACb,OACE,+BAAKvhB,UAAU,uBACb,8BAAIA,UAAU,oDACX,EAAKqqP,yCAAyC9oO,GAAkBrkG,KAAI,SAAApP,GAAA,OACnE,8BAAIkyF,UAAU,6CAA6CpzF,IAAKkB,EAAEsP,IAChE,mCACE0tN,QAAS,EAAK8+G,iBAAiB97U,EAAEsP,IACjCwtU,UAAW,kBAAM,EAAKb,mBAAmBj8U,EAAEsP,GAAImkG,EAAiBnkG,KAChEsa,KAAM5pB,EAAE2jG,cACV,gCAAMzR,UAAU,mCAAmCv2E,MAAO,CAACqkG,gBAAiBhgH,EAAExB,gBAxPxF,EAAK6P,MAAQ,CACX8sM,WAAW,EACX6hI,cAAe,CAAC,SAAU,YAAa,QAAS,UAElD,EAAK7iH,YAAa,EAND,E,oFAUjB7yN,KAAK6yN,YAAa,EAClB7yN,KAAK0yM,8B,6CAIL1yM,KAAK6yN,YAAa,I,kDAGQ,WACpBp1C,EAAaz9K,KAAKsrG,MAAM4yE,WAAal+K,KAAKsrG,MAAM4yE,UAAU1iK,KAC5DiiK,EAAW9D,gBACb35K,KAAKs9K,SAAS,CACZu2B,WAAW,KAGb7zM,KAAKs9K,SAAS,CACZu2B,WAAW,IAEb7zM,KAAKwzN,0BAA0B/1C,EAAYz9K,KAAKsrG,MAAM+zE,iBACnDxtJ,MAAK,WACA,EAAKghM,YACP,EAAKv1C,SAAS,CACZu2B,WAAW,U,+BA8Bd,WACDp2B,EAAaz9K,KAAKsrG,MAAM4yE,UAAU1iK,KACxC,OACE,wCACE,+BAAKovE,UAAU,kBACZ5qF,KAAK+G,MAAM2uU,cAAc5tU,KAAI,SAAC4zM,GAC7B,IAAM3lM,EAAc,EAAKu1F,MAAM+zE,gBAAgBvzK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASilN,KACtEi6H,EAA6B,WAAfj6H,EAA2B,WAAaA,EACtDk6H,EAAuBl6H,EAAWp/M,cACpCu5U,GAAgB,EAYpB,OAVEA,EADiB,WAAfn6H,EACc9zM,MAAMC,QAAQ41K,EAAW9D,kBAAoB,EAAKruE,MAAM+zE,gBAAgBp/K,MAAK,SAAA8V,GAC3F,OAAQ,CAAC,YAAa,QAAS,SAAS5b,SAAS4b,EAAYtf,OAASsf,EAAYI,OAAOlW,MAAK,SAAAiW,GAC5F,OAAOunK,EAAW9D,gBAAgBx/K,SAAS+b,EAAYlO,UAI3C+N,GAAgBnO,MAAMC,QAAQ41K,EAAW9D,kBAAoB5jK,EAAYI,OAAOlW,MAAK,SAAAiW,GACnG,OAAOunK,EAAW9D,gBAAgBx/K,SAAS+b,EAAYlO,OAIzD,+BAAKxQ,IAAKkkN,EACL5+B,QAAS,kBAAM,EAAK83J,iBAAiBl5H,IACrC9wH,UAAW,4CAA4CgrP,GACpD,EAAKtqO,MAAM0xG,gBAAkBtB,EAAa,6DAA6Dk6H,EAAuB,KAC7HC,EAAmD,GAAnC,mCACvB,4CAAkB7tU,GAAI2tU,QAI5B,mCAAe54H,wBAAyB/8M,KAAKsrG,MAAMyxG,wBAAyB94H,WAAYjkF,KAAKsrG,MAAMrnB,aACnG,+BAAK2G,UAAU,iDAAiDkyF,QAAS98K,KAAK60U,aAC5E,gCAAMjqP,UAAU,oCACd,4CAAkB5iF,GAAG,6BAI1BhI,KAAK+G,MAAM8sM,YAAcp2B,EAAW9D,gBACjC,+BAAK/uF,UAAU,iFACf,+BAAKA,UAAU,gBAAgB5qF,KAAK80U,0B,gBA7GvC5yL,UAAY,CACjBl6I,GAAI,UAAUw6B,OAAOy2E,WACrBh1B,WAAY,UAAUzhD,OAAOy2E,WAC7B8jG,wBAAyB,UAAUh+B,KAAK9lE,WACxCilE,UAAW,UAAUvmL,Q,GAgRnB24L,EAAqB,CACzBnhK,wCACAO,wCACA1L,0BACAkM,qC,WAEa,IAAA63H,aACb,IAAAj8C,UAjBsB,SAACxzG,GACvB,MAAO,CACLgmB,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCqR,gBAAiBr3B,EAAMyc,YAAY4a,gBACnCqtL,cAAe1kN,EAAMyc,YAAYioM,cACjC7kM,eAAgB7f,EAAMqN,gBACtB05K,gBAAiB/mL,EAAMyc,YAAYiB,gBAWZs6K,EAAzB,CAA6CikJ,K,8EClU/C,I,IAAA,M,IACA,OACA,O,IACA,M,IAEA,O,IACA,O,mDAEA,IAAMuB,EAAW,SAACxqO,GAAU,IACnBoqH,EAA6DpqH,EAA7DoqH,QAASpzM,EAAoDgpF,EAApDhpF,KAAMkzT,EAA8ClqO,EAA9CkqO,UAAW1yP,EAAmCwoB,EAAnCxoB,SAAUqkP,EAAyB77N,EAAzB67N,SAAUnjU,EAAesnG,EAAftnG,YACrD,OACE,+BAAK4mF,WAAW,aAAW,wCAAyC,CAAC,4BAA6B9H,IAC7Fg6F,QAAS,kBAAOh6F,IAAaqkP,GAAY,UAAUhmS,eAAe,cAAgB7e,EAAMozM,IAAY8/G,GAAW9/G,KAClH,+BAAK9qI,WAAW,aAAW,wBAAyB,CAAC,kCAAmC9H,KACrFqkP,EAAW,KACV,+BAAKv8O,UAAU,+BAA+B/qF,OAAO,KAAKF,MAAM,MAC9D,kCAAQuhI,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,KAAK+jE,OAAQ,UAAa92D,GAAa6wH,QAAS2L,YAAY,IAAIC,KAAK,aAGlGi1F,EACC,+BAAK9qI,UAAU,uCACb,+BAAKA,UAAU,kCAErB,+BAAKA,UAAU,yBAAyBtoE,KAK9CwzT,EAASvlU,YAAc,WAEvBulU,EAAS5zL,UAAY,CACnBwzE,QAAS,UAAUtzE,KACnBt/D,SAAU,UAAUs/D,KACpB+kL,SAAU,UAAU/kL,KACpB9/H,KAAM,UAAUwpL,IAChB0pI,UAAW,UAAUz2J,M,WAWR,IAAAjzE,UARS,SAACxzG,GACvB,MAAO,CACL0L,YAAa1L,EAAMgR,YAAYtF,eAIR,GAEZ,CAA6C8xU,I,iJC9C5D,O,OACA,OACA,QACA,QAIA,Q,IAOA,QACA,S,IACA,Q,IACA,Q,IACA,S,IACA,S,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QACA,S,IACA,QACA,Q,mDAEO,IAAM56T,EAASA,EAATA,OAAS,IAAI,EAAJ,OAEhB66T,G,gBAIJ,WAAYzqO,IAAO,gGACXA,IADW,OAEjB,EAAKpwF,OAASA,EAFG,E,oFAKC,WAClB,GAAIlb,KAAKsrG,MAAME,kBAAkBrxG,SAAS6F,KAAKkb,OAAOzf,gBAEpD,OADAuE,KAAK+sU,kBACE,GAET,IAAAnmT,gBACAxwB,QAAQ64I,IAAI,EACV,IAAAnf,8BACA,IAAAgD,iBAAgB9yH,KAAKkb,OAAOqmE,kCAC3B1vD,MAAK,SAAAm7S,GACN52U,QAAQ64I,IAAI,CACV74I,QAAQC,QAAQ22U,EAAa,KAC7B,IAAAv7M,gBACA,IAAAE,oBAAmB,aAAc,EAAG,MACpC,IAAAA,oBAAmB,gBAAiB,EAAG,MACvC,IAAAA,oBAAmB,cAAe,EAAG,MACrC,IAAAA,oBAAmB,iBAAkB,EAAG,MACxC,IAAAA,oBAAmB,aAAc,EAAG,MACpC,IAAAA,oBAAmB,gBAAiB,EAAG,KACvCv7H,QAAQC,QAAQ22U,EAAa,MAE9Bn7S,MAAK,SAACwhK,GACL,IAAMnf,EAAemf,EAAY,GAC3B2iJ,EAAmB3iJ,EAAY,GAAGp/L,KAClC+nB,EAAeq3K,EAAY,GAGjC,EAAKn4K,OAAOsmG,gBAAgB0yD,GAC5B,EAAKh5J,OAAO4qN,oBAAoBkwG,GAGhC,IAAM7iH,EAAmB,EAAKj4M,OAAOsD,MAAM,UAAgBxW,IACvDmrN,GAAoBA,EAAiBhiL,YAAckiJ,EAAY,IACjE8/B,EAAiBhiL,WAAW67F,iBAAiBqmD,EAAY,GAAI,KAAK,GAIpE,IAAMnhG,EAAgB,EAAKh3E,OAAOsD,MAAM,UAAQxW,IAwBhD,OAvBIkqF,GAAiBA,EAAcigF,cAAgBkhB,EAAY,IAC7DnhG,EAAcigF,aAAanlC,iBAAiBqmD,EAAY,GAAI,KAAK,GAI/DnhG,GAAiBA,EAAcC,YAAckhG,EAAY,IAC3DnhG,EAAcC,WAAW66C,iBAAiBqmD,EAAY,GAAI,KAAK,GAI7DnhG,GAAiBA,EAAcK,eAAiB8gG,EAAY,IAC9DnhG,EAAcK,cAAcy6C,iBAAiBqmD,EAAY,GAAI,KAAK,GAIhEnhG,GAAiBA,EAAckgF,WAAaihB,EAAY,IAC1DnhG,EAAckgF,UAAUplC,iBAAiBqmD,EAAY,GAAI,KAAK,GAI5DnhG,GAAiBA,EAAcM,cAAgB6gG,EAAY,IAC7DnhG,EAAcM,aAAaw6C,iBAAiBqmD,EAAY,GAAI,KAAK,GAE5D,EAAK45I,kBAAkB/4J,EAAc8hK,EAAkBh6T,MAE/D6V,KAAK,EAAKuxM,eACVvxM,KAAK,EAAKqxM,UACVrxM,KAAK,EAAKmyM,kBAGbhkO,KAAK+sU,kBACL,IAAAj5M,0B,+BAGO,WAEP,IAAK,EAAD,UACF,OAAO,KAGT,IAAMqlF,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzDvnM,EAAqB9R,KAAKsrG,MAAMx5F,mBAChCmuG,EAASjgH,KAAKkb,OAAOo+L,UAAUH,GAC/Bj6L,EAAalf,KAAKkb,OAAOwmE,uBACzBjhF,EAAWT,KAAKsrG,MAAM3qF,YAAc,IACpCusT,EAAeltU,KAAKylO,sBAE1B,OACE,+BAAK76I,UAAW,QACb5qF,KAAKsrG,MAAMivC,wBAA0B,oBAAsB,KAC3Dv6I,KAAKsrG,MAAMqvC,2BAA6B,UAAY36I,KAAKsrG,MAAMqvC,2BAA6B,KAC5F36I,KAAKsrG,MAAMsvC,0BAA4B,UAAY56I,KAAKsrG,MAAMsvC,0BAA4B,KAE3F,+BAAKhwD,UAAU,WACX5qF,KAAKsrG,MAAM7kF,UAAYzmB,KAAKsrG,MAAM3kF,UAClC,wCACE,mCAAmBs5F,OAAQA,EACRrwB,SAAU5vF,KAAK+G,MAAM6oF,SACrBowD,IAAK,SAACkkI,GAAD,OAAU,EAAK3vK,YAAc2vK,GAClChlQ,WAAYA,EACZhE,OAAQlb,KAAKkb,OACbvb,MAAOK,KAAKsrG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQG,KAAKsrG,MAAMvjF,iBAAiBloB,OACpC2mO,iBAAkBxmO,KAAKsrG,MAAMk7H,iBAC7BC,aAAczmO,KAAKsrG,MAAMm7H,eAE5C,yCAEA,KACJ,mCAAa5E,SAAU7hO,KAAK6hO,SACf7yM,sBAAuBhvB,KAAKgvB,sBAC5B6vM,gBAAiB7+N,KAAK6+N,gBACtBjvI,SAAU5vF,KAAK+G,MAAM6oF,YAEhC5vF,KAAK+G,MAAM48N,kBAAoB3jO,KAAKsrG,MAAM1b,SAC1C,mCAAY+6J,eAAgB3qP,KAAKkb,OAAOuZ,cAC5BvV,WAAYlf,KAAKkb,OAAO9P,KACxBwkF,SAAU5vF,KAAK+G,MAAM6oF,WAC/B,MAEJ5vF,KAAKkb,OAAOia,aAAen1B,KAAKsrG,MAAM3kF,UACtClmB,EACE,mCAAkB8zN,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BoE,eAAgB1+N,KAAK0+N,eACrBG,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpBsD,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCwnN,oBAAqB58N,KAAK48N,sBAG5C,mCAAmB58E,IAAK,SAACkkI,GAAD,OAAU,EAAKjhD,OAASihD,GAC7B3vD,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BtxM,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpB8qN,oBAAqB58N,KAAK48N,sBAG7C,KACH58N,KAAKsrG,MAAM/pF,eAAiB,mCAAYxa,MAAO/G,KAAK+G,MAAMkoB,kBAAqB,KAC/Ei+S,EAAe,mCAAoBzsU,SAAUA,IAAc,U,gBA9J3D8P,YAAc,qB,cAoMR,IAAAu7F,UAhCS,SAACxzG,GAAU,MACwBA,EAAMgR,YAAxDiY,EAD0B,EAC1BA,eAAgBZ,EADU,EACVA,YAAa6qF,EADH,EACGA,kBADH,EAEwDlzG,EAAMouB,wBAAxFD,EAF0B,EAE1BA,SAAUE,EAFgB,EAEhBA,UAAWipE,EAFK,EAELA,SAAUhoE,EAFL,EAEKA,iBAAkBG,EAFvB,EAEuBA,iBAAkBo7L,EAFzC,EAEyCA,YAFzC,EAGmE7qN,EAAMu1I,gBAAnGizF,EAH0B,EAG1BA,UAAWvmF,EAHe,EAGfA,wBAAyBI,EAHV,EAGUA,2BAA4BC,EAHtC,EAGsCA,0BAHtC,EAIgBtiJ,EAAMwc,UAAhDM,EAJ0B,EAI1BA,uBAAwB4U,EAJE,EAIFA,eAJE,EAKgC1xB,EAAMyvO,cAAhEr3E,EAL0B,EAK1BA,2BAA4BI,EALF,EAKEA,2BALF,EAMiCx4J,EAAM+sO,iBAAjEf,EAN0B,EAM1BA,sBAAuBgB,EANG,EAMHA,gBAAiBjB,EANd,EAMcA,gBAC/C,MAAO,CACL59M,WACAE,YACAm6M,YACA1rN,yBACA4U,iBACArJ,cACAivE,WACA99E,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C6yI,0BACAI,6BACAC,4BACAhzH,mBACA8oI,6BACAI,6BACAwzE,wBACAgB,kBACAjB,kBACA9iN,iBACAwG,mBACAyjF,oBACA23G,iBAIoC,CACtCh2L,kCACA3G,4DACArC,oDACAX,wCACAwF,kCACAvB,0BACA4H,0BACA7K,wDACAwK,8CACAyhI,gDACAhvI,6CAXa,CAYZs0T,I,8IClPH,O,OACA,O,IACA,QAEA,QACA,QAIA,Q,IAKA,QACA,S,IACA,S,IACA,S,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QACA,S,IACA,QACA,QACA,Q,mDAEO,IAAM76T,EAASA,EAATA,OAAS,IAAI,EAAJ,OAEhB+6T,G,gBAIJ,WAAY3qO,IAAO,gGACXA,IADW,OAEjB,EAAKpwF,OAASA,EAFG,E,oFAKC,WAElB,GADAljB,QAAQ4B,IAAI,kBACRoG,KAAKsrG,MAAME,kBAAkBrxG,SAAS6F,KAAKkb,OAAOzf,gBAEpD,OADAuE,KAAK+sU,kBACE,GAET,IAAAnmT,gBACAxwB,QAAQ64I,IAAI,EACV,IAAAnf,6BACA9vH,KAAK6iO,0BACJhxM,MAAK,SAAAm7S,GACN52U,QAAQ64I,IAAI,CACV74I,QAAQC,QAAQ22U,EAAa,KAC7B,IAAAv7M,eACAr7H,QAAQC,QAAQ22U,EAAa,MAE9Bn7S,MAAK,SAACwhK,GACL,IAAMnf,EAAemf,EAAY,GAC3B2iJ,EAAmB3iJ,EAAY,GAAGp/L,KAClC+nB,EAAeq3K,EAAY,GAIjC,OAFA,EAAKn4K,OAAOsmG,gBAAgB0yD,GAC5B,EAAKh5J,OAAO4qN,oBAAoBkwG,GACzB,EAAK/I,kBAAkB/4J,EAAc8hK,EAAkBh6T,GAAc,+BAE7E6V,KAAK,EAAKuxM,eACVvxM,KAAK,EAAKqxM,UACVrxM,KAAK,EAAKmyM,kBAGbhkO,KAAK+sU,mB,+BAIE,WAEP,IAAK,EAAD,UACF,OAAO,KAGT,IAAM5zH,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzDvnM,EAAqB9R,KAAKsrG,MAAMx5F,mBAChCmuG,EAASjgH,KAAKkb,OAAOo+L,UAAUH,GAC/Bj6L,EAAalf,KAAKkb,OAAOwmE,uBACzBi8K,EAAc39P,KAAKkb,OAAOkZ,MAC1B3zB,EAAWT,KAAKsrG,MAAM3qF,YAAc,IACpCusT,EAAeltU,KAAKylO,sBAE1B,OACE,+BAAK76I,UAAW,uBACb5qF,KAAKsrG,MAAMivC,wBAA0B,oBAAsB,KAC3Dv6I,KAAKsrG,MAAMqvC,2BAA6B,UAAY36I,KAAKsrG,MAAMqvC,2BAA6B,KAC5F36I,KAAKsrG,MAAMsvC,0BAA4B,UAAY56I,KAAKsrG,MAAMsvC,0BAA4B,KAE3F,+BAAKhwD,UAAU,WACX5qF,KAAKsrG,MAAM7kF,UAAYzmB,KAAKsrG,MAAM3kF,UAClC,wCACE,mCAAsBs5F,OAAQA,EACRrwB,SAAU5vF,KAAK+G,MAAM6oF,SACrBowD,IAAK,SAACkkI,GAAD,OAAU,EAAK3vK,YAAc2vK,GAClChlQ,WAAYA,EACZhE,OAAQlb,KAAKkb,OACbyiP,YAAaA,EACbh+P,MAAOK,KAAKsrG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQG,KAAKsrG,MAAMvjF,iBAAiBloB,OACpC2mO,iBAAkBxmO,KAAKsrG,MAAMk7H,iBAC7BC,aAAczmO,KAAKsrG,MAAMm7H,eAE/C,yCAEA,KACJ,mCAAa5E,SAAU7hO,KAAK6hO,SACf7yM,sBAAuBhvB,KAAKgvB,sBAC5B6vM,gBAAiB7+N,KAAK6+N,gBACtBjvI,SAAU5vF,KAAK+G,MAAM6oF,YAEhC5vF,KAAK+G,MAAM48N,kBAAoB3jO,KAAKsrG,MAAM1b,SAC1C,mCAAY+6J,eAAgB3qP,KAAKkb,OAAOuZ,cAC5BvV,WAAYlf,KAAKkb,OAAO9P,KACxBwkF,SAAU5vF,KAAK+G,MAAM6oF,WAC/B,MAEJ5vF,KAAKkb,OAAOia,aAAen1B,KAAKsrG,MAAM3kF,UACtClmB,EACE,mCAAkB8zN,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BoE,eAAgB1+N,KAAK0+N,eACrBG,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpBsD,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCwnN,oBAAqB58N,KAAK48N,sBAG5C,mCAAmB58E,IAAK,SAACkkI,GAAD,OAAU,EAAKjhD,OAASihD,GAC7B3vD,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BtxM,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpB8qN,oBAAqB58N,KAAK48N,sBAG7C,KACH58N,KAAKsrG,MAAM/pF,eAAiB,mCAAYxa,MAAO/G,KAAK+G,MAAMkoB,kBAAqB,KAC/Ei+S,EAAe,mCAAoBzsU,SAAUA,IAAc,U,gBA1H3D8P,YAAc,oB,cAkKR,IAAAu7F,UAlCS,SAACxzG,GAAU,MACwBA,EAAMgR,YAAxDiY,EAD0B,EAC1BA,eAAgBZ,EADU,EACVA,YAAa6qF,EADH,EACGA,kBADH,EAEwDlzG,EAAMouB,wBAAxFD,EAF0B,EAE1BA,SAAUE,EAFgB,EAEhBA,UAAWipE,EAFK,EAELA,SAAUhoE,EAFL,EAEKA,iBAAkBG,EAFvB,EAEuBA,iBAAkBo7L,EAFzC,EAEyCA,YAFzC,EAGmE7qN,EAAMu1I,gBAAnGizF,EAH0B,EAG1BA,UAAWvmF,EAHe,EAGfA,wBAAyBI,EAHV,EAGUA,2BAA4BC,EAHtC,EAGsCA,0BAHtC,EAIgBtiJ,EAAMwc,UAAhDM,EAJ0B,EAI1BA,uBAAwB4U,EAJE,EAIFA,eAJE,EAKgC1xB,EAAMyvO,cAAhEr3E,EAL0B,EAK1BA,2BAA4BI,EALF,EAKEA,2BALF,EAMiCx4J,EAAM+sO,iBAAjEf,EAN0B,EAM1BA,sBAAuBgB,EANG,EAMHA,gBAAiBjB,EANd,EAMcA,gBACxC9xM,EAAyBj6B,EAAMgsL,QAA/B/xJ,sBACP,MAAO,CACL9L,WACAE,YACAm6M,YACA1rN,yBACA4U,iBACArJ,cACAivE,WACA99E,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C6yI,0BACAI,6BACAC,4BACAhzH,mBACA8oI,6BACAI,6BACAwzE,wBACAgB,kBACAjB,kBACA9iN,iBACAwG,mBACAyjF,oBACAj5E,wBACA4wL,iBAIoC,CACtCh2L,kCACA3G,4DACArC,oDACAX,wCACAwF,kCACAvB,0BACA4H,0BACA7K,wDACAwK,8CACAyhI,gDACAhvI,6CAXa,CAYZw0T,I,8IC/MH,O,OACA,O,IACA,QAEA,QACA,QAIA,Q,IAMA,QACA,S,IACA,S,IACA,S,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QACA,S,IACA,QACA,QACA,Q,mDAEO,IAAM/6T,EAASA,EAATA,OAAS,IAAI,EAAJ,OAEhBg7T,G,gBAIJ,WAAY5qO,IAAO,gGACXA,IADW,OAEjB,EAAKpwF,OAASA,EAFG,E,oFAKC,WAClB,GAAIlb,KAAKsrG,MAAME,kBAAkBrxG,SAAS6F,KAAKkb,OAAOzf,gBAEpD,OADAuE,KAAK+sU,kBACE,GAET,IAAAnmT,gBACAxwB,QAAQ64I,IAAI,EACV,IAAAnf,8BACA,IAAAgD,iBAAgB9yH,KAAKkb,OAAOqmE,kCAC3B1vD,MAAK,SAAAm7S,GACN52U,QAAQ64I,IAAI,CACV74I,QAAQC,QAAQ22U,EAAa,KAC7B,IAAAv7M,eACAr7H,QAAQC,QAAQ22U,EAAa,MAE5Bn7S,MAAK,SAACwhK,GACL,IAAMnf,EAAemf,EAAY,GAC3BsyC,EAAmBtyC,EAAY,GAAGp/L,KAClC+nB,EAAeq3K,EAAY,GAGjC,OAFA,EAAKn4K,OAAOsmG,gBAAgB0yD,GAC5B,EAAKh5J,OAAO4qN,oBAAoBH,GACzB,EAAKsnG,kBAAkB/4J,EAAcyxD,EAAkB3pN,GAAc,+BAE7E6V,KAAK,EAAKuxM,eACVvxM,KAAK,EAAKqxM,UACVrxM,KAAK,EAAKmyM,kBAGfhkO,KAAK+sU,kBACL,IAAAj5M,0B,+BAGO,WAEP,IAAK,EAAD,UACF,OAAO,KAGT,IAAMqlF,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzDvnM,EAAqB9R,KAAKsrG,MAAMx5F,mBAChCmuG,EAASjgH,KAAKkb,OAAOo+L,UAAUH,GAC/Bj6L,EAAalf,KAAKkb,OAAOwmE,uBACzBjhF,EAAWT,KAAKsrG,MAAM3qF,YAAc,IACpCusT,EAAeltU,KAAKylO,sBAE1B,OACE,+BAAK76I,UAAW,uBACb5qF,KAAKsrG,MAAMivC,wBAA0B,oBAAsB,KAC3Dv6I,KAAKsrG,MAAMqvC,2BAA6B,UAAY36I,KAAKsrG,MAAMqvC,2BAA6B,KAC5F36I,KAAKsrG,MAAMsvC,0BAA4B,UAAY56I,KAAKsrG,MAAMsvC,0BAA4B,KAE3F,+BAAKhwD,UAAU,WACZ5qF,KAAKsrG,MAAM7kF,UAAYzmB,KAAKsrG,MAAM3kF,UACjC,wCACE,mCAAmBs5F,OAAQA,EACRrwB,SAAU5vF,KAAK+G,MAAM6oF,SACrBowD,IAAK,SAACkkI,GAAD,OAAU,EAAK3vK,YAAc2vK,GAClChlQ,WAAYA,EACZhE,OAAQlb,KAAKkb,OACbvb,MAAOK,KAAKsrG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQG,KAAKsrG,MAAMvjF,iBAAiBloB,OACpC2mO,iBAAkBxmO,KAAKsrG,MAAMk7H,iBAC7BC,aAAczmO,KAAKsrG,MAAMm7H,eAE5C,yCAEA,KACJ,mCAAa5E,SAAU7hO,KAAK6hO,SACf7yM,sBAAuBhvB,KAAKgvB,sBAC5B6vM,gBAAiB7+N,KAAK6+N,gBACtBjvI,SAAU5vF,KAAK+G,MAAM6oF,YAEhC5vF,KAAK+G,MAAM48N,kBAAoB3jO,KAAKsrG,MAAM1b,SAC1C,mCAAY+6J,eAAgB3qP,KAAKkb,OAAOuZ,cAC5BvV,WAAYlf,KAAKkb,OAAO9P,KACxBwkF,SAAU5vF,KAAK+G,MAAM6oF,WAC/B,MAEJ5vF,KAAKkb,OAAOia,aAAen1B,KAAKsrG,MAAM3kF,UACtClmB,EACE,mCAAkB8zN,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BoE,eAAgB1+N,KAAK0+N,eACrBG,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpBsD,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCwnN,oBAAqB58N,KAAK48N,sBAG5C,mCAAmB58E,IAAK,SAACkkI,GAAD,OAAU,EAAKjhD,OAASihD,GAC7B3vD,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BtxM,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpB8qN,oBAAqB58N,KAAK48N,sBAG7C,KACH58N,KAAKsrG,MAAM/pF,eAAiB,mCAAYxa,MAAO/G,KAAK+G,MAAMkoB,kBAAqB,KAC/Ei+S,EAAe,mCAAoBzsU,SAAUA,IAAc,U,gBAtH3D8P,YAAc,oB,cA4JR,IAAAu7F,UAhCS,SAACxzG,GAAU,MACwBA,EAAMgR,YAAxDiY,EAD0B,EAC1BA,eAAgBZ,EADU,EACVA,YAAa6qF,EADH,EACGA,kBADH,EAEwDlzG,EAAMouB,wBAAxFD,EAF0B,EAE1BA,SAAUE,EAFgB,EAEhBA,UAAWipE,EAFK,EAELA,SAAUhoE,EAFL,EAEKA,iBAAkBG,EAFvB,EAEuBA,iBAAkBo7L,EAFzC,EAEyCA,YAFzC,EAGmE7qN,EAAMu1I,gBAAnGizF,EAH0B,EAG1BA,UAAWvmF,EAHe,EAGfA,wBAAyBI,EAHV,EAGUA,2BAA4BC,EAHtC,EAGsCA,0BAHtC,EAIgBtiJ,EAAMwc,UAAhDM,EAJ0B,EAI1BA,uBAAwB4U,EAJE,EAIFA,eAJE,EAKgC1xB,EAAMyvO,cAAhEr3E,EAL0B,EAK1BA,2BAA4BI,EALF,EAKEA,2BALF,EAMiCx4J,EAAM+sO,iBAAjEf,EAN0B,EAM1BA,sBAAuBgB,EANG,EAMHA,gBAAiBjB,EANd,EAMcA,gBAC/C,MAAO,CACL59M,WACAE,YACAm6M,YACA1rN,yBACA4U,iBACArJ,cACAivE,WACA99E,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C6yI,0BACAI,6BACAC,4BACAhzH,mBACA8oI,6BACAI,6BACAwzE,wBACAgB,kBACAjB,kBACA9iN,iBACAwG,mBACAyjF,oBACA23G,iBAIoC,CACtCh2L,kCACA3G,4DACArC,oDACAX,wCACAwF,kCACAvB,0BACA4H,0BACA7K,wDACAwK,8CACAyhI,gDACAhvI,6CAXa,CAYZy0T,I,yJC1MH,O,OACA,O,IACA,QAEA,QACA,QAKA,QACA,S,IAEA,QACA,QACA,QACA,QACA,QACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,S,IACA,S,IACA,Q,IACA,QACA,SACA,S,mDAEO,IAAMh7T,EAASA,EAATA,OAAS,IAAI,EAAJ,OAEhBi7T,G,gBAIJ,WAAY7qO,IAAO,gGACXA,IADW,OAEjB,EAAKpwF,OAASA,EAFG,E,oFAKC,WAClB,GAAIlb,KAAKsrG,MAAME,kBAAkBrxG,SAAS6F,KAAKkb,OAAOzf,gBAEpD,OADAuE,KAAK+sU,kBACE,EAEJ,EAAD,WACF/sU,KAAKsrG,MAAM9kF,8BAA6B,IAE1C,IAAAI,gBACAxwB,QAAQ64I,IAAI,EACV,IAAAnf,8BACA,IAAAwzK,gCAA+B,UAC/BtjS,KAAK6iO,0BACJhxM,MAAK,SAAAm7S,GACN,IAAI14I,EAAY,CACdl+L,QAAQC,QAAQ22U,EAAa,IAC7B52U,QAAQC,QAAQ22U,EAAa,IAC7B52U,QAAQC,QAAQ22U,EAAa,KAC7B,IAAAv7M,gBAEIn6G,EAAe,IAAIC,gBACtBpf,OAAO2B,SAASgJ,OAAQnE,QAAQ,QAAS,KACtCxG,OAAO2B,SAASwb,KAAM3W,QAAQ,UAAW,KAC1C,IAGD2Y,GAAgBA,EAAaxgB,IAAI,WACnCw9L,EAAUv/L,MAAK,IAAAg0J,mBAAkBzxI,IAE/BA,IAAiBA,EAAaxgB,IAAI,WAAawgB,EAAaxgB,IAAI,YAClEw9L,EAAUv/L,MAAK,IAAAu0J,iBAAgBhyI,EAAaxgB,IAAI,WAAawgB,EAAaxgB,IAAI,YAEhFV,QAAQ64I,IAAIqlD,GACTziK,MAAK,SAACwhK,GACL,IAAMnf,EAAemf,EAAY,GAC3B+iJ,EAA8BxuU,MAAMC,QAAQwrL,EAAY,IAAMA,EAAY,GAAK,GAC/Er3K,EAAeq3K,EAAY,GAC3BsyC,EAAmBtyC,EAAY,GAC/BgjJ,EAAmBhjJ,EAAY,GAC/BuyC,EAAgBzxH,KAAKC,MAAM98F,GAAgBA,EAAaxgB,IAAI,UAAYu8L,EAAY,IAAM,KAAOA,EAAY,IAAM,MACzH,EAAKn4K,OAAOsmG,gBAAgB9sH,OAAO+2B,OAAO,GAAIyoJ,EAAc,CAC1DvyF,iCAAcuyF,EAAavyF,WAA3B,aAAwCy0P,OAG1C,IAAIpsT,GAAiB,EACrB,GAAIqsT,GAAoBA,EAAiB90S,MAAO,CAC9CvX,GAAiB,EACjB,EAAKw6M,iBAAmBprO,SAASC,SAAS4b,MAC1Cjd,QAAQ4B,IAAI,mBAAoBy8U,GAChC,IAAM1lF,EAAkB,UAAKliF,kBAAkB4nK,IAC/C,IAAAtiO,qBAAoB,EAAAl2E,mBAAmBC,cAAc,GAErD,EAAKwtE,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBD,gBAAgB,EAChB5U,uBAAwBihU,EAAiBjhU,yBAA2BihU,EAAiBzlF,yBACrF7vP,SAAU4vP,EAEV/9D,cAAeyjJ,EAAiBzjJ,gBAKpC,OAAO,EAAKq6I,kBACV/4J,EACAyxD,EAAmBA,EAAiB1xO,KAAO,GAC3C+nB,GACA,2BACAgO,EACA47M,MAGH/zM,KAAK,EAAKuxM,eACVvxM,KAAK,EAAKqxM,UACVrxM,KAAK,EAAKmyM,kBAGfhkO,KAAK+sU,mB,+BAGE,WACP,IAAK,EAAD,UACF,OAAO,KAGT,IAAM5zH,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzDvnM,EAAqB9R,KAAKsrG,MAAMx5F,mBAChCmuG,EAASjgH,KAAKkb,OAAOo+L,UAAUH,GAC/Bj6L,EAAalf,KAAKkb,OAAOwmE,uBACzBi8K,EAAc39P,KAAKkb,OAAOkZ,MAC1B3zB,EAAWT,KAAKsrG,MAAM3qF,YAAc,IACpCusT,EAAeltU,KAAKylO,sBAE1B,OACE,+BAAK76I,UAAW,sBACX5qF,KAAKsrG,MAAMivC,wBAA0B,oBAAsB,KAC3Dv6I,KAAKsrG,MAAMqvC,2BAA6B,UAAY36I,KAAKsrG,MAAMqvC,2BAA6B,KAC5F36I,KAAKsrG,MAAMsvC,0BAA4B,UAAY56I,KAAKsrG,MAAMsvC,0BAA4B,KAE7F,+BAAKhwD,UAAU,WACZ5qF,KAAKsrG,MAAM7kF,UAAYzmB,KAAKsrG,MAAM3kF,UACjC,wCACE,mCAAsBs5F,OAAQA,EACRrwB,SAAU5vF,KAAK+G,MAAM6oF,SACrBowD,IAAK,SAACkkI,GAAD,OAAU,EAAK3vK,YAAc2vK,GAClChlQ,WAAYA,EACZhE,OAAQlb,KAAKkb,OACbyiP,YAAaA,EACbh+P,MAAOK,KAAKsrG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQG,KAAKsrG,MAAMvjF,iBAAiBloB,OACpC2mO,iBAAkBxmO,KAAKsrG,MAAMk7H,iBAC7BC,aAAczmO,KAAKsrG,MAAMm7H,eAE/C,yCAEA,KACJ,mCAAa5E,SAAU7hO,KAAK6hO,SACf7yM,sBAAuBhvB,KAAKgvB,sBAC5B6vM,gBAAiB7+N,KAAK6+N,gBACtBjvI,SAAU5vF,KAAK+G,MAAM6oF,YAGlC5vF,KAAKkb,OAAOia,aAAen1B,KAAKsrG,MAAM3kF,UACtClmB,EACE,mCAAkB8zN,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BoE,eAAgB1+N,KAAK0+N,eACrBG,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpBsD,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCwnN,oBAAqB58N,KAAK48N,sBAG5C,mCAAmB58E,IAAK,SAACkkI,GAAD,OAAU,EAAKjhD,OAASihD,GAC7B3vD,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BtxM,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpB8qN,oBAAqB58N,KAAK48N,sBAG7C,KACH58N,KAAKsrG,MAAM/pF,eAAiB,mCAAYxa,MAAO/G,KAAK+G,MAAMkoB,kBAAqB,KAC/Ei+S,EAAe,mCAAoBzsU,SAAUA,IAAc,U,gBAlK3D8P,YAAc,mB,GA8NjB+/K,EAAqB,CACzBnjK,kCACA3G,4DACArC,oDACAX,wCACAwF,kCACAvB,0BACA4H,0BACA7K,wDACAwK,8CACAvN,4CACAyI,sBACAizC,4CACA7pC,4CACAL,sCACAw9H,iD,WAGa,IAAA3kD,UAxES,SAACxzG,GAAU,MACwBA,EAAMgR,YAAxDqX,EAD0B,EAC1BA,YAAaY,EADa,EACbA,eAAgBiqF,EADH,EACGA,kBAC7B5b,EAAYt3F,EAAMouB,wBAAlBkpE,SAF0B,EAGgBt3F,EAAMwc,UAAhDM,EAH0B,EAG1BA,uBAAwB4U,EAHE,EAGFA,eACxBzC,EAAgBjvB,EAAMouB,wBAAtBa,aAEP,IAAK,EAAD,UACF,MAAO,CACLnS,yBACA4U,iBACArJ,cACAivE,WACAroE,eACAzV,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CqW,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChCytF,qBAf6B,MAmB8ClzG,EAAMouB,wBAA9ED,EAnB0B,EAmB1BA,SAAUE,EAnBgB,EAmBhBA,UAAWiB,EAnBK,EAmBLA,iBAAkBG,EAnBb,EAmBaA,iBAAkBo7L,EAnB/B,EAmB+BA,YAnB/B,EAoBmE7qN,EAAMu1I,gBAAnGizF,EApB0B,EAoB1BA,UAAWvmF,EApBe,EAoBfA,wBAAyBI,EApBV,EAoBUA,2BAA4BC,EApBtC,EAoBsCA,0BApBtC,EAqBgCtiJ,EAAMyvO,cAAhEr3E,EArB0B,EAqB1BA,2BAA4BI,EArBF,EAqBEA,2BArBF,EAsBiCx4J,EAAM+sO,iBAAjEf,EAtB0B,EAsB1BA,sBAAuBgB,EAtBG,EAsBHA,gBAAiBjB,EAtBd,EAsBcA,gBACxC9xM,EAAyBj6B,EAAMgsL,QAA/B/xJ,sBAEP,MAAO,CACLnd,yBACA4U,iBACArJ,cACAivE,WACAroE,eACAzV,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CqW,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAEhC0I,WACAE,YACAm6M,YACAvmF,0BACAI,6BACAC,4BACAhzH,mBACA8oI,6BACAI,6BACAwzE,wBACAgB,kBACAjB,kBACA9iN,iBACAwG,mBACAyjF,oBACAj5E,wBACA4wL,iBAsBoC7yB,EAAzB,CAA6C6lJ,I,8IClR5D,O,OACA,OACA,QACA,QAIA,Q,IAMA,QACA,S,IACA,S,IACA,S,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QACA,S,IACA,QACA,Q,mDAEO,IAAMj7T,EAASA,EAATA,OAAS,IAAI,EAAJ,OAEhBo7T,G,gBAIJ,WAAYhrO,IAAO,gGACXA,IADW,OAEjB,EAAKpwF,OAASA,EAFG,E,oFAKC,WAClB,GAAIlb,KAAKsrG,MAAME,kBAAkBrxG,SAAS6F,KAAKkb,OAAOzf,gBAEpD,OADAuE,KAAK+sU,kBACE,GAET,IAAAnmT,gBACAxwB,QAAQ64I,IAAI,EACV,IAAAnf,8BACA,IAAAgD,iBAAgB9yH,KAAKkb,OAAOqmE,kCAC3B1vD,MAAK,SAAAm7S,GACN52U,QAAQ64I,IAAI,CACV74I,QAAQC,QAAQ22U,EAAa,KAC7B,IAAAv7M,eACAr7H,QAAQC,QAAQ22U,EAAa,MAE5Bn7S,MAAK,SAACwhK,GACL,IAAMnf,EAAemf,EAAY,GAC3B2iJ,EAAmB3iJ,EAAY,GAAGp/L,KAClC+nB,EAAeq3K,EAAY,GAIjC,OAFA,EAAKn4K,OAAOsmG,gBAAgB0yD,GAC5B,EAAKh5J,OAAO4qN,oBAAoBkwG,GACzB,EAAK/I,kBAAkB/4J,EAAc8hK,EAAkBh6T,MAE/D6V,KAAK,EAAKuxM,eACVvxM,KAAK,EAAKqxM,UACVrxM,KAAK,EAAKmyM,kBAGfhkO,KAAK+sU,kBACL,IAAAj5M,sBAAqB,Q,+BAGd,WAEP,IAAK,EAAD,UACF,OAAO,KAGT,IAAMqlF,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzDvnM,EAAqB9R,KAAKsrG,MAAMx5F,mBAChCmuG,EAASjgH,KAAKkb,OAAOo+L,UAAUH,GAC/Bj6L,EAAalf,KAAKkb,OAAOwmE,uBACzBjhF,EAAWT,KAAKsrG,MAAM3qF,YAAc,IACpCusT,EAAeltU,KAAKylO,sBAE1B,OACE,+BAAK76I,UAAW,QACX5qF,KAAKsrG,MAAMivC,wBAA0B,oBAAsB,KAC3Dv6I,KAAKsrG,MAAMqvC,2BAA6B,UAAY36I,KAAKsrG,MAAMqvC,2BAA6B,KAC5F36I,KAAKsrG,MAAMsvC,0BAA4B,UAAY56I,KAAKsrG,MAAMsvC,0BAA4B,KAE7F,+BAAKhwD,UAAU,WACZ5qF,KAAKsrG,MAAM7kF,UAAYzmB,KAAKsrG,MAAM3kF,UACjC,wCACE,mCAAsBs5F,OAAQA,EACRrwB,SAAU5vF,KAAK+G,MAAM6oF,SACrBowD,IAAK,SAACkkI,GAAD,OAAU,EAAK3vK,YAAc2vK,GAClChlQ,WAAYA,EACZhE,OAAQlb,KAAKkb,OACbvb,MAAOK,KAAKsrG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQG,KAAKsrG,MAAMvjF,iBAAiBloB,OACpC2mO,iBAAkBxmO,KAAKsrG,MAAMk7H,iBAC7BC,aAAczmO,KAAKsrG,MAAMm7H,eAE/C,yCAEA,KACJ,mCAAa5E,SAAU7hO,KAAK6hO,SACf7yM,sBAAuBhvB,KAAKgvB,sBAC5B6vM,gBAAiB7+N,KAAK6+N,gBACtBjvI,SAAU5vF,KAAK+G,MAAM6oF,YAEhC5vF,KAAK+G,MAAM48N,kBAAoB3jO,KAAKsrG,MAAM1b,SAC1C,mCAAY+6J,eAAgB3qP,KAAKkb,OAAOuZ,cAC5BvV,WAAYlf,KAAKkb,OAAO9P,KACxBwkF,SAAU5vF,KAAK+G,MAAM6oF,WAC/B,MAEJ5vF,KAAKkb,OAAOia,aAAen1B,KAAKsrG,MAAM3kF,UACtClmB,EACE,mCAAkB8zN,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BoE,eAAgB1+N,KAAK0+N,eACrBG,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpBsD,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCwnN,oBAAqB58N,KAAK48N,sBAG5C,mCAAmB58E,IAAK,SAACkkI,GAAD,OAAU,EAAKjhD,OAASihD,GAC7B3vD,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BtxM,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpB8qN,oBAAqB58N,KAAK48N,sBAG7C,KACH58N,KAAKsrG,MAAM/pF,eAAiB,mCAAYxa,MAAO/G,KAAK+G,MAAMkoB,kBAAqB,KAC/Ei+S,EAAe,mCAAoBzsU,SAAUA,IAAc,U,gBAvH3D8P,YAAc,sB,cA6JR,IAAAu7F,UAhCS,SAACxzG,GAAU,MACwBA,EAAMgR,YAAxDiY,EAD0B,EAC1BA,eAAgBZ,EADU,EACVA,YAAa6qF,EADH,EACGA,kBADH,EAEwDlzG,EAAMouB,wBAAxFD,EAF0B,EAE1BA,SAAUE,EAFgB,EAEhBA,UAAWipE,EAFK,EAELA,SAAUhoE,EAFL,EAEKA,iBAAkBG,EAFvB,EAEuBA,iBAAkBo7L,EAFzC,EAEyCA,YAFzC,EAGmE7qN,EAAMu1I,gBAAnGizF,EAH0B,EAG1BA,UAAWvmF,EAHe,EAGfA,wBAAyBI,EAHV,EAGUA,2BAA4BC,EAHtC,EAGsCA,0BAHtC,EAIgBtiJ,EAAMwc,UAAhDM,EAJ0B,EAI1BA,uBAAwB4U,EAJE,EAIFA,eAJE,EAKgC1xB,EAAMyvO,cAAhEr3E,EAL0B,EAK1BA,2BAA4BI,EALF,EAKEA,2BALF,EAMiCx4J,EAAM+sO,iBAAjEf,EAN0B,EAM1BA,sBAAuBgB,EANG,EAMHA,gBAAiBjB,EANd,EAMcA,gBAC/C,MAAO,CACL59M,WACAE,YACAm6M,YACA1rN,yBACA4U,iBACArJ,cACAivE,WACA99E,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C6yI,0BACAI,6BACAC,4BACAhzH,mBACA8oI,6BACAI,6BACAwzE,wBACAgB,kBACAjB,kBACA9iN,iBACAwG,mBACAyjF,oBACA23G,iBAIoC,CACtCh2L,kCACA3G,4DACArC,oDACAX,wCACAwF,kCACAvB,0BACA4H,0BACA7K,wDACAwK,8CACAyhI,gDACAhvI,6CAXa,CAYZ60T,I,mKCxMH,Q,IACA,Q,IAEA,QACA,S,IACA,S,IACA,S,IACA,Q,IACA,O,IACA,S,IACA,S,IACA,SACA,Q,IACA,S,IACA,S,IACA,S,uDAEaC,E,EAAAA,kB,YAiBX,WAAYjrO,IAAO,gGACXA,IADW,SAZnBwpK,YAAc,EAAAp+O,WAAWumL,SAYN,EAXnB7xM,KAAO,EAAK0pQ,YAWO,EAVnB1gP,MAAQ,IAUW,EATnB34B,eAAiB,EAAAd,2BAA2BF,YASzB,EARnBynO,gBAAkB,mBAQC,EAPnBlQ,cAAgB,cAOG,EANnBl9G,YAMmB,uBALnB6tH,YAKmB,eAJnBqjE,iBAAmB,GAIA,EAHnB/+M,SAAW,UAASzoD,QAGD,EAFnBo/N,yBAA2B,CAAC,SAAU,gBAAiB,gBAAiB,cAItE,EAAKp/O,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAWxW,IAAM,IAAI,EAAJ,QAC5B,EAAKwW,MAAM,UAAQxW,IAAM,IAAI,EAAJ,QACzB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvB,EAAKwW,MAAM,UAAYxW,IAAM,IAAI,EAAJ,QAC7B,EAAKwW,MAAM,UAAMxW,IAAM,IAAI,EAAJ,QACvBtT,OAAOyhB,OAAO,EAAKqI,OAAOpgB,SAAQ,SAAAod,GAAA,OAAQA,EAAKN,OAAL,KATzB,E,uFAYoB,IAAlB9P,EAAkB,uDAAXpL,KAAKoL,KAC/B,OAAO,2BAAmBA,K,qDAI1B,OAAO,EAAA2sB,mBAAmB/3B,KAAK0hF,0B,8CAGTzsB,GACtB,IAAM+sO,EAAchiS,KAAKwe,MAAM,UAAMxW,IAC/B1B,GAAS,aAAU2uD,GACrB23E,EAAco1J,EAAYjjR,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAMtF,OALKsmI,KACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ2uD,IACzCv0D,UAAY,kBAAMshS,GAC9BA,EAAYjjR,aAAahqB,KAAK63I,IAEzB,IAAI,EAAJ,QAAyBA,EAAY/wH,SAAU+wH,K,0DAGpBh2H,EAAS64P,GAAoC,IAA1BhrL,EAA0B,wDACzE8uI,EAAUvzN,KAAKwe,MAAM,UAAQxW,IAInC,OAHIurN,GAAWA,EAAQijH,WACrB5/T,EAAQ6/T,aAAeljH,EAAQijH,SAASC,eAE1C,6HAAiD7/T,EAAS64P,EAAUhrL,K,oDAGhC,UAC9B8uI,EAAUvzN,KAAKwe,MAAM,UAAQxW,IADC,mBAAPsjG,EAAO,qBAAPA,EAAO,gBAKpC,OAHIioH,GAAWA,EAAQijH,UAAYlrO,EAAMmrO,eACvCljH,EAAQijH,SAASC,aAAenrO,EAAMmrO,eAExC,0IAA4CnrO,Q,wBAKjC,IAAIirO,G,mICpFnB,O,OACA,OAEA,QACA,SACA,Q,uDAEqBG,E,yOAEnBC,wBAA0B,SAACj6T,EAASk5P,GAClC,IAAM16P,GAAS,IAAAC,oBACXy8O,EAAmB,EAEA,YAAnBl7O,EAAQpW,QAEVoW,EAAQhc,YAAY06N,mBAAmB,EAAA/kM,YAAYE,cAErD,IAAM+zN,EAAc5tO,EAAQb,SAASld,QAAQ,KAAK,KAAKrC,cACvD,GAAI4e,EAAOc,aAET47O,EADmB18O,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASm/Q,KAChDn5P,SAASE,WAAU,SAAAgnM,GAC/C,OAAOA,EAAYnoM,KAAKlV,SAAWoW,EAAQpW,UAE7C,EAAKglG,MAAM14E,oBAAoBgjP,QAC1B,GAAIl5P,EAAQhc,UAAW,CAE5Bk3P,EADiBl7O,EAAQhc,YAAY+b,UAAS,GAClBE,WAAU,SAAAgnM,GACpC,OAAOA,EAAYnoM,KAAKK,SAASld,QAAQ,KAAK,KAAKrC,gBAAkBguP,KAGzE,EAAKh/I,MAAM1lF,iCAAiCgyO,GAC5C,IAAMg/E,EAAqC,UAArBl6T,EAAQb,UAA2C,iBAAnBa,EAAQpW,QACpC,WAArBoW,EAAQb,UACc,YAArBa,EAAQb,WAC4B,aAArCziB,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,iBAChD,WAArBihB,EAAQb,SACb,EAAKyvF,MAAMxnF,uBAAsB,EAAM8yT,EAAel6T,EAAQb,SAAWa,EAAQhc,YAAYmb,UAC7F,EAAKyvF,MAAMn+E,gBAAgB,gBACvBjS,EAAOc,cACT,IAAAynM,mBAAkBmyD,EAAYhe,IAE9B,IAAAzN,iBAAgBztO,EAAQhc,UAAYgc,EAAQhc,YAAcgc,EAASk7O,GAAkB,I,EAIzFi/E,wBAA0B,WACxB,IAAM37T,GAAS,IAAAC,oBAEb27T,EAAc,GACdC,EAAwB,GACxBC,EAAa,GAEf,OAAI97T,EAAOc,aAEFd,EAAOc,aAAalU,KAAI,SAACwU,GAC9B,MAAO,CACL45B,MAAO55B,EAAW7lB,KAElB2pB,MAAO9D,EAAWG,cAKxBvB,EAAOuZ,cAAcr2B,SAAQ,SAAC2oG,GAE5B,IAAItqF,EAAWsqF,EAAYtqF,WAC3B,GAAIsqF,EACF,GAA6B,WAAzBA,EAAYlrF,SACdY,EAASre,SAAQ,SAACse,GACY,gBAAxBA,EAAQlB,KAAKlV,QACfwwU,EAAY/hV,KAAK2nB,WAGhB,GAA6B,WAAzBqqF,EAAYlrF,SACrBY,EAASre,SAAQ,SAACse,GAChBq6T,EAAsBhiV,KAAK2nB,WAExB,GAA6B,qBAAzBqqF,EAAYlrF,SAAiC,CACtD,IAAMygG,EAAW,CAAC,qBAAsB,uBAAwB,8BAA+B,iBAAkB,cAAe,sBAChI7/F,EAASre,SAAQ,SAACse,GACX4/F,EAASniH,SAASuiB,EAAQlB,KAAKlV,SAClCywU,EAAsBhiV,KAAK2nB,UAGG,YAAzBqqF,EAAYlrF,UAEjBkrF,EAAYi8L,aACd+zC,EAAsBhiV,KAAK,CACzButB,KAAMykF,EAAYi8L,YAAYnnR,SAC9BL,KAAMurF,EAAYi8L,cAGlBj8L,EAAYkwO,gBACdF,EAAsBhiV,KAAK,CACzButB,KAAMykF,EAAYkwO,eAAep7T,SACjCL,KAAMurF,EAAYkwO,kBAItBx6T,EAASre,SAAQ,SAACse,GACVA,EAAQlB,KAAKlV,OAAOnM,SAAS,SAAmC,WAAxBuiB,EAAQlB,KAAKlV,QAC9B,mBAAxBoW,EAAQlB,KAAKlV,QAAgCoW,EAAQlB,KAAK07T,uBAC7DF,EAAWjiV,KAAK2nB,SAOnB,CACL,CACEw5B,MAAO,4CAAkBluC,GAAG,uCAC5BoY,MAAO02T,GAET,CACE5gS,MAAO,4CAAkBluC,GAAG,gDAC5BoY,MAAO22T,GAET,CACE7gS,MAAO,4CAAkBluC,GAAG,mDAC5BoY,MAAO42T,M,EAMbG,uBAAyB,WACvB,IAAMj8T,GAAS,IAAAC,oBACf,OAAID,EAAOc,aAEFd,EAAOc,aAAalU,KAAI,SAACwU,GAC9B,MAAO,CACL45B,MAAO55B,EAAW7lB,KAElB2pB,MAAO9D,EAAWG,aAIFvB,EAAOuZ,cACR3sB,KAAI,SAACi/F,GACtB,MAAO,CACL7wD,MAAO6wD,EAAYlrF,SACnBuE,MAAO2mF,EAAYtqF,UAAS,Q,EAMpC26T,YAAc,WACZ,OAAQh+U,SAASC,SAASoC,gBACxB,IAAK,UACL,IAAK,KACL,IAAK,WACL,IAAK,UACL,QACE,OAAO,EAAK07U,yBACd,IAAK,WACL,IAAK,KACL,IAAK,UACL,IAAK,SACH,OAAO,EAAKN,4B,0EAzJCH,G,mHCPrB,OAEA,S,IACA,OACA,QAMA,SACA,QACA,QACA,QAMA,SACA,SACA,SACA,U,IACA,QACA,S,mDAEA,IA0SMpmJ,EAAqB,CACzBxe,sBACAnuD,8BACAmqC,oDACA3pC,kDACA3/F,wDACA2I,kCACApB,gDACA5G,0DACA++F,wCACAulI,0DACAplI,yC,WAIa,IAAAvY,UA7BS,SAACxzG,GAAD,MAAY,CAClCsU,YAAatU,EAAMyV,UAAUnB,YAC7BkM,OAAQxgB,EAAM4U,YAAY4L,OAC1BiF,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChCsqF,eAAgB/vG,EAAMs3D,cAAcy4C,eACpC9lG,UAAWjK,EAAM8J,UAAUG,UAC3BkiB,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CxX,iBAAkB3U,EAAM4U,YAAYD,iBACpCoqU,YAAa/+U,EAAMyV,UAAUq2G,kBAAkBkzN,QAC/CxsI,kBAAmBxyM,EAAMqR,cAAcmhM,kBACvCgoE,iBAAkBx6Q,EAAMyV,UAAUq2G,kBAAkBuP,QACpDvmG,aAAc90B,EAAM8J,UAAUgrB,gBAkBQkjK,EAAzB,EAzTQ,SAAChlF,GAAU,IAK1B,EAJCr+F,EAAoBq+F,EAApBr+F,iBACAuzI,EAAYl1C,EAAZk1C,SACA+2L,GAAiB,IAAAC,oBAAjBD,cAEDE,GAAA,gCAAwB,iGAC5BnsO,EAAM6Y,wBAAwB,CAC5BzT,QAAQ,EACRo+L,eAAgB,OAGlB,UAA8BrmP,4BAC9B,UAA8BwoF,iCAPF,UASH,IAAA4yC,mBATG,cASxBC,EATwB,QAU5B,IAAA11H,uBAV4B,UAWtB,IAAAk3H,qBAAoBxB,GAXE,OAY5B0qH,EAAY1qH,GAAc,GAZE,mDAAxB,4CAeA0qH,EAAc,SAACv6S,GAA6B,IAAvByjV,EAAuB,wDAChD,GAAIzjV,EAAM,CACR,UAAUitC,qBAAqB,iCAE/B,IAAM4tQ,EAAiBp6S,OAAO+2B,OAAO,GAAIx3B,EAAM,CAC7Cg3H,YAAa,GACb2iJ,cAAe,GACfE,kBAAkB,GAClBJ,oBAAqB,GACrBQ,SAAU,KAEZl2Q,QAAQ4B,IAAI,kBAAmBk1S,GAC/B,IAAI6oC,GAAyB,EASzBA,IAA2BrsO,EAAMwnK,kBACnC8kE,EAAiB3jV,GACjB4jV,EAAkB5jV,GAClB6jV,EAAwB7jV,GACxB8jV,EAAuB9jV,GACvByjV,GAAa,GAEbpsO,EAAM6Y,wBAAwB,CAC5BzT,QAAQ,EACRo+L,mBAaJxjM,EAAMqY,cAAc1vH,EAAK2vH,YAEzBtY,EAAMwiD,yBAAyB,CAC7B7zG,MAAOhmD,EAAKgmD,OAAShmD,EAAKgmD,MAAMxlD,OAAS,EAAIR,EAAKgmD,MAAQ,GAC1DD,aAAc/lD,EAAK+lD,cAAgB/lD,EAAK+lD,aAAavlD,OAAS,EAAIR,EAAK+lD,aAAe,KAIrF09R,GACHH,IAGFS,KAeIJ,EAAmB,SAAC3jV,GACxB,IAAMo6U,EAAYp6U,EAAKgmD,MACjBg+R,EAAiB,GACvB5J,EAAUjwU,SAAQ,SAACoyC,GACjB,IAAMmiQ,EAAa1+S,EAAK2Y,cAAgB,EAAAyjC,cAAcC,OAASE,EAAK/7C,OAAS2V,KAAKkI,KAAKk+B,EAAK/7C,QACtFyjV,GAAU1nS,EAAKxoC,GACrBiwU,EAAeC,GAAUD,EAAeC,GAAUD,EAAeC,GAAUvlC,EAAaA,KAE1Fj+S,OAAOmc,KAAKonU,GAAgB75U,SAAQ,SAAA85U,GAC9BjkV,EAAK2Y,cAAgB,EAAAyjC,cAAcC,SACrC2nS,EAAeC,IAAYD,EAAeC,GAASpzU,QAAQ,IAE7D,CAAC,qBAAsB,gBAAgB1G,SAAQ,SAAAkI,GAC7C6xU,EAAmB7xU,EAAQ2xU,EAAeC,IAAUA,UAKpDL,EAAoB,SAAC5jV,GACzB,IAAMmkV,EAAc,wBAAInkV,EAAKk6Q,QAAT,aAAmBl6Q,EAAKokV,SAAQ5jV,OAKhD2jV,GACFD,EAAmB,SAAUC,IAI3BN,EAA0B,SAAC7jV,GAC/B,IAAMk6U,EAAmBl6U,EAAK+lD,aAC1B7wC,EAAW,EAIf,GAHAglU,EAAiB/vU,SAAQ,SAAAk2C,GACvBnrC,GAAYmrC,EAAW7/C,UAErB0U,EAAU,CACZ,IAAMyqD,EAAmB3/D,EAAK2Y,cAAgB,EAAAyjC,cAAcC,OAASnnC,EAAWiB,KAAKkI,KAAKnJ,GAC1FgvU,EAAmB,aAAcvkR,KAI/BmkR,EAAyB,SAAC9jV,GAC9B,IAAMinB,GAAS,IAAAC,oBACf,GAAIlnB,EAAK+jL,iBAAmB/jL,EAAK2vH,WAC/Bu0N,EAAmB,aAAclkV,EAAK2vH,YACtCu0N,EAAmB,2BAA4BlkV,EAAK2vH,gBAC/C,CACL,IAAI00N,EAAuB,EACvBC,EAAmC,EAQvC,GAPAtkV,EAAKq6D,YAAYlwD,SAAQ,SAAAw7C,GACnBA,EAAMgqE,aACU,eAAjBhqE,EAAMtzC,OACHgyU,GAAwB1+R,EAAMgqE,WAC9B20N,GAAoC3+R,EAAMgqE,eAG9C1oG,EAAOc,aAAc,CACvB,IAAMw8T,EAAoBC,EAA8B,cAClDC,EAAgCD,EAA8B,4BAChED,GAAqBE,GACvBP,EAAmB,aAAcG,GACjCH,EAAmB,2BAA4BI,IACtCC,IAAsBE,EAC/BP,EAAmB,aAAclkV,EAAK2vH,aAC5B40N,GAAqBE,GAC/BP,EAAmB,2BAA4BlkV,EAAK2vH,iBAGtDu0N,EAAmB,aAAcG,GACjCH,EAAmB,2BAA4BI,KAK/CE,EAAgC,SAACnyU,GACrC,IAAI+vQ,GAAkB,EAStB,OARe,IAAAl7P,oBACRa,aAAa5d,SAAQ,SAAAke,GACTA,EAAWG,SACG3Q,MAAK,SAAA4Q,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWA,OAErE+vQ,GAAkB,MAGfA,GAGH8hE,EAAqB,SAAC7xU,EAAQ6C,GAAiC,IAAvB8N,EAAuB,uDAAT,KAEpDiE,GAAS,IAAAC,oBAET/U,EAAWklG,EAAM/oG,UAAUuJ,MAAK,SAAA1F,GACpC,OAAQ6Q,EACJ7Q,EAASC,YAAY1C,UAAUqE,KAAOiP,EACtC7Q,EAASE,SAAWA,IAAWF,EAASoC,eAAiByE,KAE3D7G,GACFklG,EAAMv/E,uBAAuB3lB,EAAU+C,GAGzC,IAAMgd,EAAgBmlF,EAAM7mF,qBACtBk0T,EAAuB1hU,EACzBkP,GAAiBA,EAAcxiB,UAAUqE,KAAOiP,EAChDkP,GAAiBA,EAAc7f,SAAWA,EAC1CqyU,GACFrtO,EAAMnmF,4BAA4Bhc,GAGhC+R,EAAOc,aACTd,EAAOc,aAAa5d,SAAQ,SAAAke,GAC1Bs8T,EAA4Bt8T,EAAWG,SAAUnW,EAAQ6C,EAAU8N,MAGrEiE,EAAOuZ,cAAcr2B,SAAQ,SAAA8+K,GAC3B07J,EAA4B17J,EAAWzgK,WAAYnW,EAAQ6C,EAAU8N,OAKrE4hU,EAAgC,SAAC5hU,EAAamjM,EAAejxM,GACjE,GAAI8N,EAAa,CACf,IACM6gF,EADWsiH,EAAc5+L,KAAKkE,qBACL5T,MAAK,SAAA6T,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAOiP,KACzE6gF,IACGA,EAAct8E,KAAKs9T,eACtBhhP,EAAct8E,KAAKs9T,aAAe,IAEpChhP,EAAct8E,KAAKs9T,aAAa7rU,GAAoB9D,QAKjDixM,EAAc5+L,KAAKs9T,eACtB1+H,EAAc5+L,KAAKs9T,aAAe,IAEpC1+H,EAAc5+L,KAAKs9T,aAAa7rU,GAAoB9D,GAIlDyvU,EAA8B,SAACn8T,EAAUnW,EAAQ6C,EAAU8N,GAC/D,IAAMmjM,EAAgB39L,EAAS3Q,MAAK,SAAA4Q,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWA,KACnE8zM,KACGA,EAAc5+L,KAAK42E,qBAAuBgoH,EAAc5+L,KAAKlV,OAAOnM,SAAS,QAG9E0+U,EAA8B5hU,EAAamjM,EAAejxM,KA0C5D6uU,EAAkB,WACA,EAAAxoS,0BAA0BQ,aAGlD,OAAOwwG,EAASi3L,EAAT,uB,+SCnTT,I,IAAA,O,IACA,O,IACA,O,IACA,Q,IACA,Q,IACA,S,mDAE2BlvH,EAAdA,YAAc,WACzB,UAAajgK,aAAY,GACzB,UAAaW,YAAYhkD,MACzB,UAAUokD,eAAc,GACxB,UAAUG,sBAAqB,IAGAuvR,EAApBA,kBAAoB,WAC/B,UAAazwR,aAAY,GACzB,UAAaW,YAAYjpD,MACzB,UAAUqpD,eAAc,GACxB,UAAUO,uBAAsB,GAChC8kC,YAAW,WACT,UAAU9kC,uBAAsB,KAC/B,MAG4BovR,EAApBA,kBAAoB,aAUAC,EAApBA,kBAAoB,WAG/B,UAAa3wR,aAAY,GACzB,UAAO1F,UAAUsC,eAAiB,eAGLg0R,EAAlBA,gBAAkB,WAC7B,UAAa5wR,aAAY,GACzB,UAAO1F,UAAUsC,eAAiB,OAClC,UAAS8Q,QAGyBmjR,EAAvBA,qBAAuB,WAClC,UAAa7wR,aAAY,GACzB,UAAaC,UAAU,YAAavoD,MAAM,GAC1C,UAAO4iD,UAAUsC,eAAiB,aAGJk0R,EAAnBA,iBAAmB,WAC9B,UAAa9wR,aAAY,GACzB,UAAaW,YAAYhkD,MACzB,UAAO+gD,UAAUI,aAAc,EAC/B,UAAU+E,YAAY/sD,SAAQ,SAACw7C,GAC7B,GAAIhyC,MAAMC,QAAQ+xC,EAAMkhH,mBAAqBlhH,EAAMkhH,iBAAiBrmK,OAAQ,CAE1E,GAAImlD,EAAM8R,gBAAiB,OAE3B9R,EAAMgtH,2BAKmByyK,EAAlBA,gBAAkB,aAGCC,EAAnBA,iBAAmB,WAC9B,UAAahxR,aAAY,GACzB,UAAaW,YAAYhkD,OAIOs0U,EAArBA,mBAAqB,WAChC,UAAajxR,aAAY,GACzB,UAAaW,YAAYhkD,MAKW,OAAhC,UAAU8iD,oBACZ,UAAUA,kBAAoB,IAAI,EAAJ,SAEhC,UAAUA,kBAAkBirM,eAC5B,UAAUjrM,kBAAkBkrM,iBAE5B,UAAUvpM,sBAAqB,GAC/B,UAAUE,uBAAsB,GAGhC8kC,YAAW,WACT,UAAU9kC,uBAAsB,KAC/B,MAIkC4vR,EAA1BA,wBAA0B,WACrC,UAAalxR,aAAY,GACzB,UAAaW,cAK4B,OAArC,UAAUjB,yBACZ,UAAUA,uBAAyB,IAAI,EAAJ,SAErC,UAAUA,uBAAuBgrM,eACjC,UAAUhrM,uBAAuBirM,iBAEjC,UAAUvpM,sBAAqB,GAC/B,UAAUE,uBAAsB,GAGhC8kC,YAAW,WACT,UAAU9kC,uBAAsB,KAC/B,O,8ECtHL,W,OACA,O,IACA,MACA,O,IAEA,Q,IACA,O,IACA,S,IAEA,SACA,QAIA,QAKA,QACA,QACA,SACA,QACA,Q,mDAEA,IAAM6vR,EAAqB,SAACnuO,GAAU,IAC5B23C,EAAwB33C,EAAxB23C,YAAa38I,EAAWglG,EAAXhlG,OAEbmU,EAC6F6wF,EAD7F7wF,KAAMmtF,EACuF0D,EADvF1D,oBAAqBJ,EACkE8D,EADlE9D,kBAAmBS,EAC+CqD,EAD/CrD,mBAAoBD,EAC2BsD,EAD3BtD,0BACxEvrC,EAAmG6uC,EAAnG7uC,sBAAuBz4C,EAA4EsnF,EAA5EtnF,YAAa01T,EAA+DpuO,EAA/DouO,gBAAiBviL,EAA8C7rD,EAA9C6rD,0BAA2Bh/I,EAAmBmzF,EAAnBnzF,eAuB9E88C,EAAmB,GACvB,GAAI3uD,EAAQ,CACV,IACMsW,GADS,IAAAzB,oBACa+a,wBAAwB5vB,GACpD2uD,GAAmB,IAAAn5C,qBAAoBc,EAAcnC,EAAMtC,GAG7D,OACE,wCACE,+BAAKyyE,UAAU,uBACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,+BACnC80K,QA3BQ,SAAC3mL,GAErB8xG,IAAuB,EAAAryD,kCAAkCC,SAC3DmyD,EAA0B,MAC1BmvD,EAA0B,IAC1BnzI,GAAY,KAEZy4C,EAAsBn2D,GACtB0d,GAAa01T,GACb1xO,EAA0B,EAAApyD,kCAAkCC,WAmB9C+0C,UAAU,mFACpB,yCAEF,+BAAKA,UAAU,6BACXq4D,GAA4BhuF,GAEhC,wCACE,wCACA,mCAAYs0L,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAU,+CACVkyF,QA3CA,WAClBt1E,EAAkB,EAAA/1D,2BAA2ByB,MAC7C00D,EAAoB,EAAAn2D,2BAA2ByB,QA0CvC,6CAcZumS,EAAmBE,WAAa,CAC9BC,eAAgB,UAAUp3S,OAC1Bl8B,OAAQ,UAAUk8B,QAGpB,IAMM8tJ,EAAqB,CACzB1oF,0CACAJ,sCACAQ,sDACAvrC,8CACAz4C,0BACAmzI,uD,WAGa,IAAApP,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAD,MAAY,CAClC2vG,mBAAoB3vG,EAAMs3D,cAAcq4C,mBACxCyxO,gBAAiBphV,EAAMyc,YAAYiP,YACnC7L,eAAgB7f,EAAMqN,mBAaG2qL,EAAzB,CAA6CmpJ,K,mJC9G/C,M,IACA,M,mDAEA,IACMI,EAAM,oBAESC,G,6OAEnBC,aAAe,UAAMt+B,Y,EAErB10S,MAAQ,CACN7P,MAAO,EAAKo0G,MAAMp0G,MAClB8iV,SAAS,EACTnxD,aAAa,G,EAcf/yD,SAAW,SAACl1H,GACV,IAAI1pG,EAAQ0pG,EAAMlqF,OAAOxf,MAEzB,IAAKA,EAAMsN,MAAMq1U,IAAQ,EAAKvuO,MAAMu9K,YAClC,OAAO,EAEL,EAAKv9K,MAAMu9K,aAAe,EAAKv9K,MAAMy9K,UAAa,EAAKkxD,gBAAgB/iV,IAAU,EAAKo0G,MAAMy9K,WAC9F7xR,EAAQ,EAAKo0G,MAAMy9K,UAErB,EAAKzrG,SAAS,CACZpmL,UAEE,EAAKo0G,MAAMw9K,cACb,EAAKx9K,MAAMw9K,aAAa5xR,I,EAI5ByoO,OAAS,SAAC/+H,GACR,IAAI1pG,EAAQ0pG,EAAMlqF,OAAOxf,MACzB,EAAKgjV,cAAchjV,GACf,EAAKo0G,MAAMq0H,QACb,EAAKr0H,MAAMq0H,U,EAIfs6G,gBAAkB,SAAC/iV,GACjB,OAAK,EAAKo0G,MAAMu9K,aAGW,IAAvB3xR,EAAM8C,QAAQ,OAChB9C,IAAU,IAAIA,IAEZA,EAAM4gB,WAAW9d,QAAQ,OAAU9C,EAAM4gB,WAAWrjB,OAAS,IAC/DyC,EAAQA,EAAM+H,UAAU,EAAG/H,EAAMzC,OAAS,IAExC,EAAK62G,MAAMy9K,WAAc7xR,EAAQ,EAAKo0G,MAAMy9K,WAC9C7xR,EAAQ,EAAKo0G,MAAMy9K,WAEb7xR,GAAS,GAXRA,G,EAcXgjV,cAAgB,SAAChjV,GACfA,EAAQ,EAAK+iV,gBAAgB/iV,GAC7B,EAAKomL,SAAS,CACZ08J,SAAS,IACR,WACD,EAAK1uO,MAAMwqH,SAAS5+N,O,EAIxBwoO,QAAU,WACR,IAAIxoO,EAAQ,EAAKo0G,MAAMu9K,aAAe,EAAKv9K,MAAM09K,aAC7C,EAAK19K,MAAMp0G,MAAMyH,QAAQ,EAAK2sG,MAAM09K,aAAa,IAAIrqR,QAAQ,IAAI,IAAIA,QAAQ,IAAI,IACjF,EAAK2sG,MAAMp0G,MACfA,EAAmB,aAAVA,EAAuB,GAAKA,EACrC,EAAKomL,SAAS,CACZ08J,SAAS,EACT9iV,W,EAIJijV,cAAgB,SAAAhkV,GArFA,KAsFVA,EAAE8oG,SAEJ9oG,EAAEugB,OAAO4wJ,Q,gGAKX,OAAO,iCAAO18E,UAAW5qF,KAAKsrG,MAAM1gB,WAAa,4BAA8B5qF,KAAK+G,MAAMizU,QAAU,qBAAuB,IAC7GI,aAAcp6U,KAAKsrG,MAAM8uO,aACzBtkH,SAAU91N,KAAK81N,SACf6J,OAAQ3/N,KAAK2/N,OACbD,QAAS1/N,KAAK0/N,QACdx+H,UAAWlhG,KAAKm6U,cAChBnyU,GAAIhI,KAAKsrG,MAAMtjG,IAAM,KACrBg4I,IAAKhgJ,KAAK+5U,aACV7iV,MAAO8I,KAAK+G,MAAMizU,QAAUh6U,KAAK+G,MAAM7P,MAAQ8I,KAAKsrG,MAAMp0G,Y,GAlGrC,UAAM20G,W,EAUpCq2C,UAAY,CACjB4zE,SAAU,UAAU/2C,KAAK9lE,WACzB6vK,aAAc,UAAU/pG,KACxB4gD,OAAQ,UAAU5gD,KAClBn0F,UAAW,UAAUpoD,OACrBqmP,YAAa,UAAUzmI,KACvBp6I,GAAI,UAAUw6B,OACd43S,aAAc,UAAU53S,OACxBumP,SAAU,UAAUnwK,Q,aAlBHkhO,G,qJCNrB,IAAYt5T,E,wJAAZ,OAE2Cq9R,EAA9BA,4BAA8B,SAACU,GAAD,MAA+B,CACxEnzS,KAAMoV,EAAMmuD,+BACZ9tD,QAAS,CAAC09R,8BAGgCF,EAA/BA,6BAA+B,SAACG,GAAD,MAAgC,CAC1EpzS,KAAMoV,EAAMouD,gCACZ/tD,QAAS,CAAC29R,gC,6FCTZ,O,OACA,O,IACA,MACA,O,IAEA,O,IACA,S,IAEA,Q,IACA,O,IACA,Q,IACA,S,IACA,SACA,Q,IACA,SACA,QACA,Q,IACA,S,IACA,S,IACA,SACA,Q,IACA,Q,mDAEA,IAAM67B,EAAsB,SAAC/uO,GAAU,IAE9B7wF,EAC6D6wF,EAD7D7wF,KAAMrU,EACuDklG,EADvDllG,SAAU+C,EAC6CmiG,EAD7CniG,SAAU5G,EACmC+oG,EADnC/oG,UAAW+oQ,EACwBhgK,EADxBggK,cAAe4+B,EACS5+L,EADT4+L,uBAAwBI,EACfh/L,EADeg/L,cAAe85B,EAC9B94N,EAD8B84N,wBAChG3jU,EAAkE6qG,EAAlE7qG,SAAU65U,EAAwDhvO,EAAxDgvO,aAAcllU,EAA0Ck2F,EAA1Cl2F,uBAAwB+C,EAAkBmzF,EAAlBnzF,eAE5CrG,EAAqBqG,EAAezQ,SACnCrB,EAAeD,EAAfC,YAN8B,GAOO,IAAA86I,WAAS,GAPhB,qBAO9Bo5L,EAP8B,KAOdC,EAPc,KAS/BC,EACJ,gCAAM7vP,UAAU,2BACd,4CAAkB5iF,GAAG,6BAInB0yU,EACJ,mCAAYnxF,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAW,8BAAgC2vP,EAAiB,sBAAwB,IACpFz9J,QAAS,kBAAM09J,GAAmBD,KAC5C,yCAIEp8T,GAAkB,IAAA7W,oBAAmBjB,GACrCs0U,GAAW,IAAA/mP,iBAAgBvtF,EAAa9D,GACxCq4U,GAAU,IAAAlnP,iBAAgBttF,GAC1By0U,EAAiBF,GAAmC,mBAAvBt0U,EAAYC,QAA+B6X,EAAgB1pB,OAAS,EAEjGk3Q,GAAkB,IAAAj3P,oBAAmBrO,IAAiByL,EAAmB+qK,cAAgBznK,EAE/F,OACE,8BAAIw1E,UAAW,cACV+vP,EAAW,uBAAyB,KACpChvE,EAAkB,sBAAwB,KAC1Cu+B,EAAyB,YAAc,KACvCA,EAAyBI,EAAcnwS,SAASiM,EAAS4B,IAAM,wBAA0B,qBAAuB,MAC/G,EAAD,oBAAuBo8T,EAAwBjqU,SAASiM,EAAS4B,IAAM,uBAAyB,KAC/F4yU,EAAoC,GAA1B,0BACXx0U,EAASgB,UAAY,uBAAyB,KACjD,+BAAKwjF,UAAU,oBACZ0vP,EAAe,KAAO,mCAA6Bl0U,SAAUA,IAC9D,+BAAKwkF,UAAU,yBACb,mCAAkBvnF,QAASgD,KAE7B,+BAAKukF,UAAW,uBAAyB0vP,EAAe,iCAAmC,KACzF,gCAAM1vP,UAAU,4BACd,mCAAavnF,QAASgD,EAAa+R,mBAAmB,IADxD,IACiEuiU,EAC7D,4CAAkB3yU,GAAG,yBAAyBmO,OAAQ,CAACiK,MAAOjC,EAAgB1pB,UAAa,MAE/F,6BAAGm2F,UAAW,wEACT0vP,EAAe,6CAA+C,KAChE,EAAAn/U,iBACG,mCAAakI,QAASgD,IACtBA,EAAY3F,WAAY,IAAAob,qBAAoBzV,EAAY3F,YAAa+Z,EAAMtC,GAAkB,MAEjGmiU,EASE,KARF,6BAAG1vP,UAAU,6BACX,mCAAgB+N,YAAatyF,EAAaghS,QAAQ,KAQrDizC,EAAe,mCAA6Bl0U,SAAUA,IAAc,MAErE3F,GAAY65U,IAAkBxoU,EAAmBk1H,YAAc,KAC/D,+BAAKp8C,UAAU,wBACZiwP,EAAiB,KAChBD,EAAU,mCAAqBx0U,SAAUA,EAAUu0U,SAAUA,IAAcF,GAIhFE,EACC,+BAAK/vP,UAAU,sBACZ8vP,GAED,KACHG,EAAiB,KAChB,+BAAKjwP,UAAU,qBACb,mCAAkB+N,YAAatyF,EACb8C,SAAUA,EACVoiQ,UAAU,EACVD,cAAeA,KAGnC7qQ,GAAY65U,IAAkBxoU,EAAmBk1H,YAAc,KAC7D,EAAAprI,mBACE,mCAAsBwK,SAAUA,EAAUgB,UAAWhB,EAASgB,YAC9D,mCAA4BhB,SAAUA,KAE7Cu0U,GAAYJ,EAAiB,mCAAwBn0U,SAAUA,IAAc,OAKpFi0U,EAAoBn4L,UAAY,CAC9B97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,WAC7CqhO,aAAc,UAAUl4L,M,WA6BX,IAAA2F,aACb,IAAAj8C,UA3BsB,SAACxzG,EAAOqvP,GAAa,MACNrvP,EAAM0zG,UAApC7wC,EADoC,EACpCA,aAAcK,EADsB,EACtBA,aADsB,EAEEljE,EAAM8J,UAA5CG,EAFoC,EAEpCA,UAAW6hU,EAFyB,EAEzBA,wBAFyB,EAGK9rU,EAAMo5B,wBAA/Cw4Q,EAHoC,EAGpCA,uBAAwBI,EAHY,EAGZA,cACxB7pS,EAAYnI,EAAMgR,YAAlB7I,SACA2U,EAA0B9c,EAAMwc,UAAhCM,uBACD+C,EAAiB7f,EAAMqN,gBAE7B,MAAO,CACLw1D,eACAK,eACAryD,SAAUw+O,EAASvhP,SAAS+C,SAC5B5G,YACA2nS,yBACAI,gBACA85B,0BACA3jU,WACA0X,iBACA/C,4BAIuB,GAKzB,CAA6CilU,K,qICxJ/C,O,OACA,Q,IACA,OACA,O,uDAEMS,E,gNAEF,OACE,kCAAQlwP,WAAW,4BAAY,2CAA4C5qF,KAAKsrG,MAAM1gB,WAAY5qF,KAAKsrG,MAAM1gB,UAAY5qF,KAAKsrG,MAAM1gB,YAC5HkyF,QAAS,kBAAM,EAAA5qJ,YAAYn9B,KAAK,kBACtC,gCAAM61F,UAAU,0BAAyB,4CAAkB5iF,GAAG,0B,8BAMvD8yU,G,6IChBf,MACA,O,IACA,M,IACA,OACA,OAEA,Q,IAGA,OACA,Q,uDAGMC,G,gBAOJ,WAAYzvO,IAAO,gGACXA,IADW,SAanBm2L,gBAAkB,SAACu5C,GACjB,UAAU75S,eAAe,oBACzB,IAAMjmB,GAAS,IAAAC,oBACf,GAAkB,sBAAf6/T,EACD,EAAK19J,SAAS,CAAC29J,YAAY,SAG3B,IADA,aAAE7hV,UAAU6/N,IAAI,QAAS,EAAKylG,kBAC1BxjT,EAAOc,aAAc,CACvB,IAAMM,EAAapB,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASukV,KAC9E,EAAKrE,wBAAwBr6T,EAAWG,SAAS,GAAGjB,KAAMw/T,QAE1D,EAAKrE,wBAAwBz7T,EAAOsD,MAAMw8T,GAAYv+T,UAAS,GAAO,GAAGjB,KAAMw/T,IAxBlE,EA6BnBvc,WAAa,WACR,EAAK13T,MAAMk0U,WACZ,EAAK39J,SAAS,CAAC29J,YAAY,IAE3B,EAAK59J,wBAjCU,EAqCnBA,qBAAuB,WACrB,UAAUl8I,eAAe,uBAAyB,EAAKp6B,MAAM62K,OAAS,OAAQ,SAC9E,EAAKN,SAAS,CACZM,QAAS,EAAK72K,MAAM62K,OACpBq9J,YAAY,IACX,WACD,EAAKl0U,MAAM62K,QACP,aAAExkL,UAAUupG,GAAG,QAAS,EAAK+7N,mBAC7B,aAAEtlU,UAAU6/N,IAAI,QAAS,EAAKylG,sBA7CnB,EAiDnBA,iBAAmB,SAACvoU,GAClB,IAAMgjO,EAAWhjO,EAAEugB,OAAOuqI,QAAQ,sBAC5B09K,EAAkBxoU,EAAEugB,OAAOuqI,QAAQ,YACpCk4E,GAAawlG,GAChB,EAAKthJ,wBArDU,EAyDnB69J,aAAe,WACb,IAAMhgU,GAAS,IAAAC,oBACf,IAAKD,EACH,MAAO,GAET,GAAI,EAAKowF,MAAMw1H,WAAa,EAAKx1H,MAAMw1H,UAAUrsO,OAAS,GAAK0D,OAAO2B,SAASC,KAAKI,SAAS,aAC3F,MAAO,CAAC,qBAEV,IAAI24C,EAAQ53B,EAAOc,aACfd,EAAOc,aAAalU,KAAI,SAAAwU,GAAA,OAAcA,EAAW7lB,QAD1C,wBAEH,EAAK60G,MAAM7nF,cAMnB,OALI,EAAK6nF,MAAMw1H,WAAa,EAAKx1H,MAAMw1H,UAAUrsO,OAAS,GACxDq+C,EAAKqjB,QACH,qBAGGrjB,GAvEP,EAAK/rC,MAAQ,CACX62K,QAAQ,EACRR,kBAAkB,EAClB69J,YAAY,GALG,E,wFAUjB,aAAE7hV,UAAU6/N,IAAI,QAASj5N,KAAK0+T,oB,+BAkEvB,WAEDv1D,EAAYnpQ,KAAKk7U,eAEvB,OAAO/xE,EAAU10Q,OACf,+BAAKm2F,UAAU,WACZ5qF,KAAKsrG,MAAM6vO,YACV,kCAAQvwP,UAAW5qF,KAAKsrG,MAAM8vO,sBAAwB,2CAC9Ct+J,QAAS98K,KAAKq9K,sBACpB,gCAAMzyF,UAAU,0BAAyB,4CAAkB5iF,GAAG,sBAGhE,kCAAQ4iF,UAAU,iBAAiBkyF,QAAS98K,KAAKq9K,sBAC/C,gCAAMzyF,UAAU,qDAChB,gCAAMA,UAAU,sDAChB,gCAAMA,UAAU,sDAGpB,+BAAKA,UAAW,oBAAsB5qF,KAAK+G,MAAM62K,OAAS,4BAA8B,KACtF,+BAAKhzF,UAAU,4BACb,kCAAQA,UAAU,UAAUkyF,QAAS98K,KAAKy+T,YACxC,4CAAkBz2T,GAAG,4BAGxBhI,KAAKsrG,MAAMw1H,WAAa9gO,KAAKsrG,MAAMw1H,UAAUrsO,OAAS,EACvD,+BAAKm2F,UAAW,8BAAgC5qF,KAAK+G,MAAMk0U,WAAa,sCAAwC,KAC9G,8BAAIrwP,UAAU,0BACX5qF,KAAKsrG,MAAMw1H,UAAUh5N,KAAI,SAACg5N,EAAWlzN,GACpC,OACE,8BAAIg9E,UAAW,8BACXpzF,IAAK,YAAYoW,EAAOk0R,aAAYl0R,GACpC,6BAAG7T,KAAM+mO,EAAU1pN,IAAKV,OAAO,SAASmpS,IAAI,uBAAuB/+E,EAAUrqO,YAMvF,KACF,+BAAKm0F,UAAW,0BAA4B5qF,KAAK+G,MAAMk0U,WAAa,sCAAwC,KAC1G,8BAAIrwP,UAAU,0BACXu+K,EAAUrhQ,KAAI,SAACkzU,EAAYptU,GAC1B,OACE,8BAAIg9E,UAAW,4DAA4DowP,EAAW1+U,cAAcqC,QAAQ,MAAO,KAC/GnH,IAAK,MAAMoW,EAAOk0R,aAAYl0R,EAAOkvK,QAAS,kBAAM,EAAK2kH,gBAAgBu5C,KAC1EA,UAQb,S,KAzIR,S,WAIS94L,UAAY,CACjBi5L,YAAa,UAAU/4L,KACvBg5L,qBAAsB,UAAU54S,Q,cA8IrB,IAAAspE,UAPS,SAACxzG,GACvB,MAAO,CACLmrB,YAAanrB,EAAMgrN,WAAW7/L,YAC9Bq9M,UAAWxoO,EAAMu1I,gBAAgBizF,aAIG,CACtCh9M,8CACAqJ,kCACAyF,0CACAhN,qEAJa,CAKZm1T,I,gFCpKH,I,IAAA,M,IACA,MACA,OACA,OAEA,QACA,QACA,S,IACA,S,mDAEA,IAAMM,EAAmB,SAAC/vO,GAAU,MAc9BA,EAXFgwO,wBAHgC,SAIhC72T,EAUE6mF,EAVF7mF,qBAJgC,EAc9B6mF,EATFiwO,oBALgC,SAMhCpjU,EAQEmzF,EARFnzF,eACA/C,EAOEk2F,EAPFl2F,uBACAqF,EAME6wF,EANF7wF,KACA+gU,EAKElwO,EALFkwO,UACAxvU,EAIEs/F,EAJFt/F,kBACAmlK,EAGE7lE,EAHF6lE,oBACApzJ,EAEEutF,EAFFvtF,iBACAquH,EACE9gC,EADF8gC,UAEIt6H,EAAqBqG,EAAezQ,SAE1C,GAAI4zU,GAAoBxpU,EAAmBuD,0BAA4BD,EACrE,OAAO,KAGT,UAA0B,IAAdg3H,GAA+BA,GAAehzI,SAASC,SAAS2b,WAAayP,GAAwBA,EAAqB9gB,WACjI8gB,EAAqB9gB,UAAUkoQ,eAClC,OAAO,KAGTpnP,EAAuB6mF,EAAMjoG,SAAWohB,EAExC,IAAItb,EAAW,EACXmyU,IACFnyU,EAAYmiG,EAAMmwO,iBAA8C,IAA1BnwO,EAAMmwO,gBACxCnwO,EAAMmwO,gBACNnwO,EAAMlmF,uBAAyB,GAErC,IAAM5iB,GAAQ,IAAA+J,oBAAmBkY,EAAsBtb,EAAU4U,EAAkB/R,EAAmBmlK,GAChGuqK,EAAiBA,EAAjBA,iBACAC,EAAWvxU,KAAKyI,MAA2C,KAApCrQ,EAAQA,EAAMk5U,EAAe,MAAc,IAExE,GAAIJ,EACF,OACE,+BAAK1wP,UAAU,yBACb,+BAAKA,UAAU,8BACZ,IAAAkxF,sBAAqBt5K,EAAOiiB,EAAsBtM,EAAgBsC,EAAK1C,YAOhF,IAAM4C,GAAO,IAAAH,gBAAeiK,EAAsBhK,EAAMtC,EAAgBhP,GAwBxE,OACE,+BAAKyhF,UAAU,uBACZ2wP,GAAgB/4U,EAAQ,gCAAMooF,UAAU,4BAA2B,IAAAl3E,sBAAqB5B,EAAoB6pU,EAAUl3T,IAAgC,MArBpJ+2T,GAAapiV,SAASC,SAAS2b,WAAayP,GAAwBA,EAAqB9gB,WACzF8gB,EAAqB9gB,UAAUkoQ,cAC3B,mCAAmBlxP,KAAMA,EAAMtX,QAASohB,EAAsBjiB,MAAOA,EAAO4pI,UAAWA,IAI9F,+BAAKxhD,UAAU,wCACb,gCAAMA,UAAU,2BACZpoF,EAEEg5U,GACE,IAAA9nU,sBAAqB5B,EAAoBtP,EAAOiiB,IAC7C,IAAA/Q,sBAAqB5B,EAAoBtP,EAAOiiB,GAFrD,KAE+E9J,EAF/E,KADA,IAAAmhK,sBAAqBt5K,EAAOiiB,EAAsBtM,EAAgBsC,EAAK1C,WAK5EvV,GAASg5U,EAAY,gCAAM5wP,UAAU,sBAAhB,IAAuCjwE,EAAvC,KAAuD,MAS9E4gU,GAAgB/4U,EACf,gCAAMooF,UAAU,4BACVnwE,EAAKC,cAAc,CAAC1S,GAAI,gDAD9B,KACiF,IAAA0L,sBAAqB5B,EAAoB1H,KAAKyI,MAA2B,KAApB8oU,EAAWn5U,IAAgB,IAAKiiB,GADtK,KACgMi3T,EADhM,MAGE,OAoBVL,EAAiBn5L,UAAY,CAC3B7+I,QAAS,UAAU1L,OACnB2jV,iBAAkB,UAAUl5L,KAC5Bq5L,gBAAiB,UAAU7iO,OAC3Bt1G,KAAM,UAAUk/B,OAChBg5S,UAAW,UAAUp5L,KACrBp2I,kBAAmB,UAAUo2I,KAC7BhW,UAAW,UAAUgW,KACrB+uB,oBAAqB,UAAUv3H,MAAV,sB,WAGR,IAAAmuG,aACb,IAAAj8C,UA3BsB,SAACxzG,GACvB,MAAO,CACLmsB,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CunP,iBAAkB1zQ,EAAMytB,eAAeimP,iBACvC7zP,eAAgB7f,EAAMqN,gBACtByP,uBAAwB9c,EAAMwc,UAAUM,uBACxCgQ,sBAAuB9sB,EAAMytB,eAAeX,sBAC5CrH,iBAAkBzlB,EAAMgsL,QAAQvmK,oBAIT,GAgBzB,CAA6Cs9T,K,8EC3HdO,EAApBA,kBAAoB,SAACtwO,GAAU,IAEnC7qG,EAA4C6qG,EAA5C7qG,SAAU6jB,EAAkCgnF,EAAlChnF,oBAAqBu3T,EAAavwO,EAAbuwO,UAItC,GAAIp7U,IAAao7U,IAAcA,EAAUrnO,QACvC,OAAO,EAET,IAAIsnO,EAAkB,KACtB,OAAOx3T,GACL,KAAK,EACHw3T,EAAkB,KAClB,MACF,KAAK,EACHA,EAAkB,GAClB,MACF,KAAK,EACHA,EAAkB,GAKtB,OAAO1xU,KAAKC,MAAMwxU,EAAUrnO,QAAQ3C,YAAYiqO,EAAgB,MAIjBC,EAApCA,kCAAoC,SAAC9qU,GAChD,IAA0C,YAArC7X,SAASC,SAASoC,gBAAqE,WAArCrC,SAASC,SAASoC,iBACpEwV,EAAgBvQ,UAAW,CAC9B,IAAMs7U,EAAW/qU,EAAgBvQ,YAC7Bs7U,GAAYA,EAASj3P,kBAAoBi3P,EAAS71T,eAChD61T,EAAS71T,cAAcxiB,UAAUqE,KAAOiJ,EAAgBtN,UAAUqE,IACnEg0U,EAAS71T,cAAcw8D,wBAA0B1xE,EAAgB0xE,wBAChEq5P,EAAS71T,cAAcw8D,2BAA6B1xE,EAAgB0xE,2BACxE1xE,EAAkB+qU,EAAS71T,eAG/B,OAAOlV,I,8HCtCT,O,WACA,MACA,OACA,OAEA,QAKA,Q,IACA,OACA,Q,IACA,Q,IACA,O,IACA,SACA,S,IACA,OACA,QACA,U,uDAIMgrU,G,6OAuBJC,gBAAkB,WAChB,IAAMjrU,GAAkB,IAAA8qU,mCAAkC,EAAKzwO,MAAMltF,eAAe5C,MACpF,EAAK8vF,MAAM9mF,2BAA2BvT,GACtC,EAAKq6F,MAAMn+E,gBAAgB,c,gGAGpB,aAG8BntB,KAAKsrG,MADnCltF,EAFA,EAEAA,eAAgBjG,EAFhB,EAEgBA,eAAgB/C,EAFhC,EAEgCA,uBAAwBglE,EAFxD,EAEwDA,OAAQmtI,EAFhE,EAEgEA,oBAAqBxpM,EAFrF,EAEqFA,iBAAkBtD,EAFvG,EAEuGA,KAC5GwzG,EAHK,EAGLA,SAAUlY,EAHL,EAGKA,SAAUrrF,EAHf,EAGeA,YAChB6gG,EAAWvrH,KAAKsrG,MAAMusM,uBAAuBz5R,EAAe5C,MAC5D1J,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAC/CgO,GAAkB,IAAAhB,oBAAmB0J,EAAe5C,MAEpD2gU,EAAsCpmO,GAAYrrF,GAAeA,EAAY24H,gBAE7Eu5B,EAAkB9qK,EAAmB+qK,cAAgBnnK,EACrD0mU,GAA8B1mU,GAAoBknK,IAAoBxnK,KACtE+mU,EAEA/vM,EAAYt6H,EAAmBk1H,cAAgB7uH,EAAe8uH,4BAA8BvxH,IAAoByC,EAAe+uH,mBAE/Hm1M,EAA2B9wN,GAAYz5G,EAAmBk1H,cAAgBtxH,IAAoB0mU,IAA+B70H,IAC7H40H,EAEAG,GAAqBH,EAErB35U,GAAQ,IAAA+J,oBAAmB6R,EAAe5C,KAAM,EAAGuC,GAEzD,OACE,+BAAK6sE,UAAW,WAAa2gC,EAAW,qBAAuB,KAC5DntG,EAAe5C,KAAK3N,eAAiB,kBAAoB,IACvDwG,MAAO+lE,EACP0iG,QAAS,SAACl8E,GAAD,OAAW,EAAK0K,MAAMixO,mBAAmBn+T,EAAgBwiF,IAClEysJ,cAAeivF,EAAoBt8U,KAAKk8U,gBAAkB,MAC7D,mCAAkB74U,QAAS+a,EAAe5C,KAAMvE,YAAamH,EAAe5C,KAAK7X,UAAUqE,KAC1FoW,EAAe5C,KAAKmqF,WACnB,gCAAM/a,UAAU,gBAAgBxsE,EAAe5C,KAAKmqF,WAApD,KAA0E,KAE5E,mCAAuBwyM,iBAAkB/5R,EAAe5C,KAAK7X,UAAUqE,KACtEujH,EACC,+BAAK3gC,UAAU,mBACZyxP,EACC,kCAAQzxP,UAAU,sBACVkyF,QAAS98K,KAAKk8U,iBACpB,4CAAkBl0U,GAAG,mCAFvB,IAE0D,gCAAM4iF,UAAU,gCACrEzyE,EAAeE,SAAwB,UAAb41G,EAAuB,KAAO,4CAAkBjmH,GAAG,qCAGhF,KAIHo0U,EACC,kCAAQxxP,UAAW,wDAA0DgyF,EAAkB,wBAA0B,IACjHE,QAAS,kBAAK,UAAU37I,gBAAgBy7I,EAAkB,qBAAuB,mBAAqBx+J,EAAe5C,KAAKK,WACrH,EAAKyvF,MAAMyxE,qBACZH,EAAkB,EAAAt9H,eAAeE,SAAW,EAAAF,eAAeC,SAC1Dv3C,GAAG,kCACb40K,EACC,wCACE,oCAAM,4CAAkB50K,GAAG,mCAD7B,IACsE,oCAAM,4CAAkBA,GAAG,oCAE/F,4CAAkBA,GAAG,sCAEzB,KACHs0U,EAAoB,gCAAM1xP,UAAU,eAAekyF,QAAS98K,KAAKk8U,kBAAqB,MAEvF,KAIJ,+BAAKtxP,UAAW,gBACbl1E,EAAkB,wBAA0B,6BAC5C0I,EAAe5C,KAAKooE,0BAA8BzrE,EAAeG,gBAAiB,UAAOzX,YAAoD,GAArC,qCACxGurI,EACC,gCAAMxhD,UAAU,wBACb,IAAAkxF,sBAAqBt5K,EAAO4b,EAAe5C,KAAMrD,EAAgBsC,EAAK1C,WAEvE,KACHrC,EAAkB,KAAO,gCAAMk1E,UAAU,sBAAqB,mCAAavnF,QAAS+a,EAAe5C,c,kBArGrG0mI,UAAY,CACjB9jI,eAAgB,UAAUzmB,OAAOshH,WACjCsjO,mBAAoB,UAAUx9J,KAAK9lE,WACnC4+L,uBAAwB,UAAU94H,KAAK9lE,WACvC7+B,OAAQ,UAAUziF,OAAOshH,WACzB8jE,qBAAsB,UAAUgC,KAAK9lE,WACrClD,SAAU,UAAUqsC,KACpB13H,YAAa,UAAUkvB,MAAV,yB,GAiHX02I,EAAqB,CACzB9rK,wDACA2I,mC,WAGa,IAAA46H,aACb,IAAAj8C,UAlBsB,SAACxzG,GAAU,IAC1B21H,EAAY31H,EAAMgR,YAAlB2kH,SACP,MAAO,CACL74G,uBAAwB9c,EAAMwc,UAAUM,uBACxC+C,eAAgB7f,EAAMqN,gBACtBqQ,aAAc1d,EAAMyc,YAAYiB,aAChCuxM,oBAAqBjvN,EAAMgvN,qBAAqBC,oBAChDxpM,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChCkwG,cAUuBqiE,EAAzB,CAA6C2rJ,K,iHCvJ/C,I,EAAA,O,oCAEyCO,EAA5BA,0BAA4B,CACvCC,gBAAiB,UAAU7jO,OAC3B1iG,YAAa,UAAUve,OAAOshH,WAC9ByjO,aAAc,UAAU9jO,OACxB+jO,YAAa,UAAU/jO,OACvBgkO,eAAgB,UAAUhkO,OAC1BxtG,KAAM,UAAUo3B,S,8ECRlB,W,OACA,O,IACA,MACA,QACA,UACA,SACA,Q,mDAEA,IAAMq6S,EAAuB,SAACvxO,GAAU,IAE/B47G,EAC4E57G,EAD5E47G,cAAei3C,EAC6D7yJ,EAD7D6yJ,aAAc/zI,EAC+C9e,EAD/C8e,kBAAmBjyG,EAC4BmzF,EAD5BnzF,eAAgB4F,EACYutF,EADZvtF,iBAAkB++T,EACNxxO,EADMwxO,qBACvFh3T,EAAiFwlF,EAAjFxlF,2BAA4B7Y,EAAqDq+F,EAArDr+F,iBAAkB1K,EAAmC+oG,EAAnC/oG,UAAW6/K,EAAwB92E,EAAxB82E,qBAsC3D,OApCA,IAAAzgE,YAAU,WAER,IAAKxpG,EAAezQ,SAASiW,uBAAyBI,IAAqB5lB,OAAO2B,SAASC,KAAKI,SAAS,aACvG,OAAO,KAGT,IAAM+gB,GAAS,IAAAC,oBACf,IAAKD,EAAOc,aACV,OAAO,KAET,IAAMzC,EAAkBwE,EAAiBZ,OAAO7gB,cAC1CygV,EAAe7hU,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASsnB,KAEzEi7L,EAA2B7gM,EAA3B6gM,wBAEHz/L,KAAoB,IAAAnd,2BAA0BE,gBAC7CygV,IACAA,EAAatgU,SAASqJ,IAC4C,SAAlEi3T,EAAatgU,SAASqJ,GAA4BtK,KAAKlV,QACrD6R,EAAezQ,SAASg7K,0BAA6Bs2B,EAAwB/4M,MAAK,SAAAg5M,GAAA,OAAgBA,GAAgBA,EAAa9sF,QAAQ7vH,gBAAkBid,KAGrJ6wG,GACT0yN,EAAqB,IAFrBA,GAAqB,IAAAh6J,4BAA2B/kK,EAAkB5F,EAAezQ,aAKlF,CAACqW,KAEJ,IAAA4jG,YAAU,WACJygE,GAGJ06J,GAAqB,IAAAh6J,4BAA2B,GAAI71K,MAEnD,CAACA,EAAkB1K,EAAW6/K,IAE5Bh4D,EAKH,+BAAKx/B,UAAU,gCACb,+BAAKupH,OAAQ,kBAAM+S,EAAgBA,IAAkB,MAChD81H,YAAa,kBAAM7+E,EAAeA,IAAiB,MACnDjqD,IAAI,GACJn1M,IAAKqrH,KARL,MAaXyyN,EAAqB36L,UAAY,CAC/Bi8G,aAAc,UAAUp/E,KACxBmoC,cAAe,UAAUnoC,MAG3B,IAoBMuR,EAAqB,CACzBwsJ,6C,WAGa,IAAAhxO,UAxBS,SAACxzG,GASvB,MAAO,CACL8xH,kBAT0B9xH,EAAMouB,wBAA3B0jG,kBAULjyG,eATqB7f,EAAMqN,gBAU3BoY,iBATyBzlB,EAAMgsL,QAA1BvmK,iBAUL+H,2BATmCxtB,EAAMytB,eAApCD,2BAUL7Y,iBATyB3U,EAAM4U,YAA1BD,iBAUL1K,UATkBjK,EAAM8J,UAAnBG,UAUL6/K,qBAT6B9pL,EAAMgR,YAA9B84K,wBAiB+BkO,EAAzB,CAA6CusJ,I,4GC5F5D,MACA,OACA,OACA,QACA,Q,IACA,S,8DAgDe,IAAA/wO,UAVS,SAACxzG,GAAU,MACKA,EAAMgR,YAE5C,MAAO,CACLq4K,kBAJ+B,EAC1BA,kBAILlhL,SAL+B,EACPA,SAKxB8mN,oBAJ4BjvN,EAAMgvN,qBAA7BC,uBAQM,EA9CW,SAACj8G,GAKzB,GAF4BA,EAArBq2E,kBAGL,OAAO,KAGT,IAAM,EAAAs7J,GAAA,gCAAuB,2FAC3B,IAAAr2T,gBAD2B,UAErB,IAAAktG,uBAAqB,GAFA,QAG3B,IAAAxhC,iBAH2B,kDAAvB,4CAMN,OAEE,+BAAK1H,UAAU,iBACb,+BAAKA,UAAU,uBACb,yCAEF,+BAAKA,UAAU,wBACb,4CAAkB5iF,GAAG,6BAEvB,+BAAK4iF,UAAU,uBACb,4CAAkB5iF,GAAG,4BAEvB,+BAAK4iF,UAAU,yBACb,kCAAQA,UAAU,+BAA+BkyF,QAAS,kBAAMmgK,MAC9D,4CAAkBj1U,GAAG,oC,gFCpC/B,I,EAAA,O,8CAEe,CACb,cACE,gCAAMA,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,uWAAuWmqI,UAAU,yBAE9Z,gBACE,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,uWAAuWmqI,UAAU,yBAE9Z,aACE,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,6eAA6emqI,UAAU,iCAiBpiB,eACE,wCACE,oCACE,oCAAU34H,GAAG,aACX,gCAAMA,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,QAAQE,OAAO,SAAS4gI,KAAK,WAG5F,6BAAGz4H,GAAG,aAAay5H,YAAU,aAAad,UAAU,gBAAgBu8M,SAAS,mBAC3E,gCAAMl1U,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,sgBAInD,YACE,6BAAGwR,GAAG,aAAay5H,YAAU,aAAad,UAAU,mCAClD,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,gFAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,6FAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,gGAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sGAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,kPAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,uGAG/C,WACE,6BAAGwR,GAAG,aAAay5H,YAAU,aAAad,UAAU,+BAClD,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,8GAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,+FAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,iGAG/C,mBACE,6BAAGwR,GAAG,aAAay5H,YAAU,aAAad,UAAU,8BAClD,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,uEAAuEmqI,UAAU,+BAC5H,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sGAAsGmqI,UAAU,6BAC3J,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,0FAA0FmqI,UAAU,+BAC/I,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,8FAA8FmqI,UAAU,uBACnJ,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,8FAA8FmqI,UAAU,6BACnJ,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,0FAA0FmqI,UAAU,8BAC/I,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,wFAAwFmqI,UAAU,8BAC7I,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,oPAAoPmqI,UAAU,8BACzS,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,wFAAwFmqI,UAAU,+BAGjJ,YACE,6BAAG34H,GAAG,oBAAoB24H,UAAU,8BAClC,6BAAG34H,GAAG,aAAay5H,YAAU,cAC3B,gCAAMz5H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,4NAA4NmqI,UAAU,0BACnR,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,wLAAwLmqI,UAAU,gCAC/O,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,4LAA4LmqI,UAAU,gCACnP,6BAAG34H,GAAG,iBAAiBy5H,YAAU,iBAAiBd,UAAU,0BAA0BF,KAAK,OAAO3lE,OAAO,OAAO0lE,YAAY,KAC1H,gCAAM7gI,MAAM,IAAIE,OAAO,IAAIuhI,GAAG,MAAMtmE,OAAO,SAC3C,gCAAM1gD,EAAE,MAAMC,EAAE,MAAM1a,MAAM,IAAI8gI,KAAK,YAK7C,YACE,6BAAGz4H,GAAG,oBAAoB24H,UAAU,cAClC,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,QAAQE,OAAO,QAAQuhI,GAAG,IAAIT,UAAU,wBACnG,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,4IAA4ImqI,UAAU,6BACnM,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,QAAQE,OAAO,QAAQuhI,GAAG,IAAIT,UAAU,4BACnG,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,0IAA0ImqI,UAAU,wBACjM,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,6IAA6ImqI,UAAU,6BACpM,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,QAAQE,OAAO,QAAQuhI,GAAG,IAAIT,UAAU,4BACnG,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,4IAA4ImqI,UAAU,6BAGvM,iBACE,wCACE,oCACE,oCAAU34H,GAAG,aACX,gCAAMA,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,KAAKE,OAAO,KAAK8gI,UAAU,2BAA2BF,KAAK,WAG1H,6BAAGz4H,GAAG,aAAay5H,YAAU,aAAad,UAAU,eAClD,6BAAG34H,GAAG,aAAay5H,YAAU,aAAay7M,SAAS,mBACjD,gCAAMl1U,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,+DAA+DmqI,UAAU,+BACtH,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,oNAAoNmqI,UAAU,4BAC3Q,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,0QAA0QmqI,UAAU,wBACjU,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,8DAA8DmqI,UAAU,kCAK7H,gBACE,6BAAG34H,GAAG,sBAAsB24H,UAAU,kCACpC,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,iDAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kDAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,sKAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,2BAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,uEAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,yBAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,mDAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,mDAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,mDAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,gDAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kDAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,wFAGjD,gBACE,6BAAGmqI,UAAU,iCACX,gCAAMnqI,EAAE,qOACR,gCAAMA,EAAE,+NAGZ,OACE,6BAAGmqI,UAAU,8BACX,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,iRAAiRmqI,UAAU,8BACtU,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,yHAAyHmqI,UAAU,sBAC9K,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,qFAAqFmqI,UAAU,gCAG9I,YACE,6BAAG34H,GAAG,YAAYy5H,YAAU,YAAYd,UAAU,iCAChD,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sJAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,kDAAkDmqI,UAAU,kCAG3G,qBACE,6BAAGA,UAAU,kCACX,gCAAMnqI,EAAE,oQACR,gCAAMA,EAAE,kHACR,gCAAMA,EAAE,2LAGZ,kBACE,6BAAGwR,GAAG,YAAYy5H,YAAU,YAAYd,UAAU,kBAChD,gCAAM34H,GAAG,eAAey5H,YAAU,eAAe9hI,MAAM,KAAKE,OAAO,IAAI8gI,UAAU,mBACjF,gCAAM34H,GAAG,eAAey5H,YAAU,eAAe9hI,MAAM,KAAKE,OAAO,IAAI8gI,UAAU,oBAGrF,oBACE,6BAAG34H,GAAG,aAAay5H,YAAU,aAAad,UAAU,mCAClD,gCAAM34H,GAAG,2BAA2By5H,YAAU,2BAA2BjrI,EAAE,yVAG/E,eACE,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWd,UAAU,kCAAkCnqI,EAAE,oYAEzF,eACE,6BAAGwR,GAAG,6BAA6B24H,UAAU,gCAC3C,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kXAGjD,YACE,6BAAGwR,GAAG,aAAay5H,YAAU,aAAad,UAAU,mCAClD,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,IAAIE,OAAO,KAAK8gI,UAAU,+BACrF,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,IAAIE,OAAO,KAAK8gI,UAAU,+BACrF,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,+BAA+BmqI,UAAU,+BACtF,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,+BAA+BmqI,UAAU,gCAG1F,cACE,gCAAM34H,GAAG,gBAAgBy5H,YAAU,gBAAgBd,UAAU,2BAA2BnqI,EAAE,2PAE5F,iBACE,6BAAGwR,GAAG,aAAay5H,YAAU,aAAad,UAAU,oCAClD,gCAAM34H,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,6CAA6CmqI,UAAU,8BAChG,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,IAAIE,OAAO,KAAK8gI,UAAU,uBACrF,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,IAAIE,OAAO,KAAK8gI,UAAU,uBACrF,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,KAAKE,OAAO,IAAI8gI,UAAU,uBACrF,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,KAAKE,OAAO,IAAI8gI,UAAU,wBAGzF,aACE,gCAAM34H,GAAG,oBAAoB24H,UAAU,sBAAsBnqI,EAAE,waAEjE,UACE,wCACE,oCACE,oCAAUwR,GAAG,kBACX,gCAAMA,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,SAASE,OAAO,SAAS4gI,KAAK,WAG7F,6BAAGz4H,GAAG,aAAay5H,YAAU,aAAad,UAAU,+BAClD,6BAAG34H,GAAG,aAAay5H,YAAU,aAAad,UAAU,iBAAiBu8M,SAAS,wBAC5E,gCAAMl1U,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,srBAKrD,aACE,wCACE,oCACE,oCAAUwR,GAAG,qBACX,gCAAMA,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,SAASE,OAAO,SAAS4gI,KAAK,WAG7F,6BAAGz4H,GAAG,aAAay5H,YAAU,aAAad,UAAU,8BAClD,6BAAG34H,GAAG,aAAay5H,YAAU,aAAad,UAAU,iBAAiBu8M,SAAS,2BAC5E,gCAAMl1U,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,gLAKrD,aACE,wCACE,oCACE,oCAAUwR,GAAG,qBACX,gCAAMA,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,SAASE,OAAO,SAAS4gI,KAAK,WAG7F,6BAAGz4H,GAAG,aAAay5H,YAAU,aAAad,UAAU,4BAA4Bu8M,SAAS,2BACvF,gCAAMl1U,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,yDAAyDmqI,UAAU,2BAChH,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,wiBAInD,UACE,wCACE,oCACE,oCAAUwR,GAAG,kBACX,gCAAMA,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,SAASE,OAAO,SAAS4gI,KAAK,WAG7F,6BAAGz4H,GAAG,aAAay5H,YAAU,aAAad,UAAU,6BAClD,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,QAAQE,OAAO,WAC1E,6BAAGmI,GAAG,aAAay5H,YAAU,aAAad,UAAU,kBAClD,6BAAG34H,GAAG,aAAay5H,YAAU,aAAay7M,SAAS,wBACjD,gCAAMl1U,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,0MAA0MmqI,UAAU,2BAM3Q,UACE,wCACE,oCACE,oCAAU34H,GAAG,kBACX,gCAAMA,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,SAASE,OAAO,SAAS4gI,KAAK,WAG7F,6BAAGz4H,GAAG,aAAay5H,YAAU,aAAad,UAAU,gCAClD,6BAAG34H,GAAG,aAAay5H,YAAU,aAAad,UAAU,iBAAiBu8M,SAAS,wBAC5E,gCAAMl1U,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,wFAAwFmqI,UAAU,0BAC/I,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,mEAAmEmqI,UAAU,mBAC1H,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,8FAA8FmqI,UAAU,4BACrJ,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,sEAAsEmqI,UAAU,wBAC7H,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,SAASE,OAAO,QAAQ8gI,UAAU,6BAKrG,WACE,wCACE,oCACE,oCAAU34H,GAAG,mBACX,gCAAMA,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,QAAQE,OAAO,SAAS4gI,KAAK,WAG5F,6BAAGz4H,GAAG,aAAay5H,YAAU,aAAad,UAAU,6BAClD,6BAAG34H,GAAG,aAAay5H,YAAU,aAAad,UAAU,iBAAiBu8M,SAAS,yBAC5E,gCAAMl1U,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,2fAA2fmqI,UAAU,sBAK1jB,aACE,gCAAMA,UAAU,iCAAiCnqI,EAAE,owBAErD,SACE,6BAAGmqI,UAAU,+CACX,gCAAMnqI,EAAE,mSACR,gCAAMA,EAAE,sbACR,gCAAMA,EAAE,4RAGZ,aACE,6BAAGmqI,UAAU,6BACX,gCAAMvmH,EAAE,KAAKC,EAAE,KAAK1a,MAAM,IAAIE,OAAO,OACrC,gCAAMrJ,EAAE,gDACR,gCAAM4jB,EAAE,KAAKC,EAAE,KAAK1a,MAAM,KAAKE,OAAO,MACtC,gCAAMrJ,EAAE,gVACR,gCAAMA,EAAE,gDACR,gCAAMA,EAAE,6FACR,gCAAMA,EAAE,oDACR,gCAAM4jB,EAAE,KAAKC,EAAE,KAAK1a,MAAM,IAAIE,OAAO,OACrC,gCAAMrJ,EAAE,oDACR,gCAAMA,EAAE,kDACR,gCAAMA,EAAE,8CACR,gCAAMA,EAAE,+CAIZ,OACE,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWd,UAAU,mCAAmCnqI,EAAE,yXAE1F,WACE,6BAAGwR,GAAG,oBAAoB24H,UAAU,mCAClC,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,0CAA0CmqI,UAAU,gCACjG,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,0IAA0ImqI,UAAU,yBACjM,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kDAAkDmqI,UAAU,iCACzG,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,qDAAqDmqI,UAAU,gCAC5G,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,+CAA+CmqI,UAAU,2BAG1G,KACE,6BAAG34H,GAAG,YAAYy5H,YAAU,YAAYd,UAAU,iCAChD,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sJAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,kDAAkDmqI,UAAU,kCAG3G,YACE,6BAAG34H,GAAG,uBAAuB24H,UAAU,iCACrC,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sRAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,+NAA+NmqI,UAAU,wBACpR,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,uBAAuBmqI,UAAU,gCAGlF,eACE,6BAAG34H,GAAG,uBAAuB24H,UAAU,mCACrC,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sRAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,+NAA+NmqI,UAAU,wBACpR,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,kJAAkJmqI,UAAU,gCAG3M,KACE,6BAAG34H,GAAG,aAAay5H,YAAU,aAAad,UAAU,+BAClD,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,KAAKE,OAAO,IAAI8gI,UAAU,2BACrF,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,4CAA4CmqI,UAAU,4BACjG,gCAAM34H,GAAG,iBAAiBy5H,YAAU,iBAAiB9hI,MAAM,KAAKE,OAAO,IAAI8gI,UAAU,4BACrF,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,gUAAgUmqI,UAAU,gCACrX,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,gUAAgUmqI,UAAU,gCACrX,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,gUAAgUmqI,UAAU,iCAGzX,WACE,6BAAGA,UAAU,+BACX,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,+FAA+FmqI,UAAU,qBAAqBD,SAAS,YAClL,gCAAM14H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,mFAAmFmqI,UAAU,yBAAyBD,SAAS,YAC1K,gCAAM14H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,qHAAqHmqI,UAAU,mBAAmBD,SAAS,aAG1M,cACE,gCAAM14H,GAAG,WAAWy5H,YAAU,WAAWd,UAAU,oCAAoCnqI,EAAE,4GAE3F,MACE,6BAAGwR,GAAG,qBAAqB24H,UAAU,8BACnC,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,qdAG/C,KACE,6BAAGwR,GAAG,qBAAqB24H,UAAU,8BACnC,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,qdAG/C,OACE,6BAAGwR,GAAG,sBAAsB24H,UAAU,qCACpC,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,ocAAocmqI,UAAU,iCAC3f,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,6IAA6ImqI,UAAU,+BACpM,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,yaAAyamqI,UAAU,oBAGpe,OACE,gCAAM34H,GAAG,UAAUy5H,YAAU,UAAUd,UAAU,iCAAiCnqI,EAAE,2gBAEtF,MACE,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUd,UAAU,iCAAiCnqI,EAAE,09CAEtF,uBACE,gCAAMwR,GAAG,UAAUy5H,YAAU,UAAUd,UAAU,iCAAiCnqI,EAAE,09CAEtF,yBACE,gCAAMwR,GAAG,qBAAqB24H,UAAU,kCAAkCnqI,EAAE,qdAE9E,qBACE,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWd,UAAU,mCAAmCnqI,EAAE,yXAE1F,mBACE,6BAAGwR,GAAG,YAAYy5H,YAAU,YAAYd,UAAU,iCAChD,gCAAM34H,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,sJAC3C,gCAAMwR,GAAG,WAAWy5H,YAAU,WAAWjrI,EAAE,kDAAkDmqI,UAAU,kCAG3G,MACE,6BAAGA,UAAU,kCACX,gCAAMnqI,EAAE,sDACR,gCAAMA,EAAE,gEACR,gCAAMA,EAAE,iDACR,gCAAMA,EAAE,yDACR,gCAAMA,EAAE,gEACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,kDACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,0CACR,gCAAMA,EAAE,0CACR,gCAAMA,EAAE,0CAGZ,eACE,6BAAGmqI,UAAU,kCACX,gCAAMnqI,EAAE,sDACR,gCAAMA,EAAE,gEACR,gCAAMA,EAAE,iDACR,gCAAMA,EAAE,yDACR,gCAAMA,EAAE,gEACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,kDACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,0CACR,gCAAMA,EAAE,0CACR,gCAAMA,EAAE,0CAGZ,cACE,6BAAGmqI,UAAU,kCACX,gCAAMnqI,EAAE,sDACR,gCAAMA,EAAE,gEACR,gCAAMA,EAAE,iDACR,gCAAMA,EAAE,yDACR,gCAAMA,EAAE,gEACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,kDACR,gCAAMA,EAAE,wDACR,gCAAMA,EAAE,0CACR,gCAAMA,EAAE,0CACR,gCAAMA,EAAE,0CAGZ,aACE,6BAAGmqI,UAAU,mCACX,gCAAMnqI,EAAE,+CACR,gCAAMA,EAAE,4DACR,gCAAMA,EAAE,iDACR,gCAAMA,EAAE,0DAGZ,mBACE,6BAAGmqI,UAAU,mCACX,gCAAMnqI,EAAE,+CACR,gCAAMA,EAAE,4DACR,gCAAMA,EAAE,iDACR,gCAAMA,EAAE,0DAGZ,kBACE,6BAAGmqI,UAAU,+BACX,mCAAS16E,OAAO,2DAChB,mCAASA,OAAO,2DAChB,mCAASA,OAAO,8DAGpB,WACE,gCAAM06E,UAAU,gBAAgBnqI,EAAE,olC,8ECzdtC,I,IAAA,MACA,O,IACA,MAEA,QACA,Q,IACA,Q,mDAEA,IAAM2mV,EAAuB,SAAC7xO,GAAU,IAE/B3S,EAAmC2S,EAAnC3S,YAAa7mF,EAAsBw5F,EAAtBx5F,mBAEpB,OAAIA,EAAmBrC,gBAAkE,iBAAxCkpF,EAAYh1F,UAAUm1G,gBACjEngB,EAAYh1F,UAAUm1G,iBAAmBngB,EAAYh1F,UAAUjB,KAEjE,+BAAKkoF,UAAU,kBACb,kCAAQA,UAAU,uBAEf,IAAAl3E,sBAAqB5B,GAAoB,IAAA9P,cAAa22F,EAAYh1F,UAAUjB,MAAOi2F,IAEtF,gCAAM/N,UAAU,sBACd,mCAAkB+N,YAAaA,EAAa6yK,kBAAkB,MAM/D,mCAAkB7yK,YAAaA,EAAa6yK,kBAAkB,EAAM5gL,UAAU,4BAGvFuyP,EAAqBj7L,UAAY,CAC/BvpD,YAAa,UAAU/+C,MAAV,qB,WAUA,IAAAkyD,UAPS,SAACxzG,GAEvB,MAAO,CACLwZ,mBAFiBxZ,EAAMqN,gBAAlB+B,YAMM,CAAyBy1U,I,8ECzCxC,I,IAAA,MACA,OACA,OACA,Q,IACA,M,IAEA,O,IACA,OAEA,Q,OACA,QACA,QACA,QACA,QACA,QACA,Q,mDAEA,IAAMC,EAAyB,SAAC9xO,GAAU,IAEjC+xO,EAC6D/xO,EAD7D+xO,cAAep+N,EAC8C3T,EAD9C2T,eAAgB9xF,EAC8Bm+E,EAD9Bn+E,gBAAiBk3F,EACa/Y,EADb+Y,mBAAoBz5B,EACP0gB,EADO1gB,UAAWw8M,EAClB97L,EADkB87L,OAAQ3sR,EAC1B6wF,EAD0B7wF,KAC5F3I,EAAkEw5F,EAAlEx5F,mBAAoBmxG,EAA8C3X,EAA9C2X,oBAAqBC,EAAyB5X,EAAzB4X,sBAE3C,GAAIm6N,KACG,IAAArgU,6BAA4BqgU,EAAevrU,MAAwB,IAAA0L,oCAAmC6/T,EAAevrU,GACxH,OAAO,KAIX,IAAMwrU,EAAwB,WAC5B,UAAUn8S,eAAe89E,EACrB,EAAAx1E,gCAAgC6F,eAChC,EAAA7F,gCAAgCqC,oBAChCuxS,IACFh5N,EAAmB,CAACh+G,YAAag3U,IACjClwT,EAAgBkwT,IASdA,IAAiB,IAAA7/T,oCAAmC6/T,EAAevrU,IACrEoxG,EAAsB,EAAAtlE,WAAWE,UAEnCmlE,GAAoB,IAGtB,OAAImkL,EAEA,mCAAY79C,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,uCACpC4iF,UAAW,gDAAkDA,GAAa,IAC1EkyF,QAASwgK,GACnB,+CAMJ,mCAAQ1yP,UAAW,wGACdA,GAAa,IACV88M,UAAW,8CACX5qH,QAASwgK,GACf,4CAAkBt1U,GAAG,yCAK3Bo1U,EAAuBl7L,UAAY,CACjCm7L,cAAe,UAAUzjS,MAAV,oBACfgxC,UAAW,UAAUpoD,OACrB4kQ,OAAQ,UAAUhlJ,MAGpB,IASMkuC,EAAqB,CACzBnjK,kCACAk3F,wCACAnB,8CACAD,2C,WAGa,IAAAstE,aACb,IAAAxoC,aACE,IAAAj8C,UAlBoB,SAACxzG,GAGvB,MAAO,CACL2mH,eAHuB3mH,EAAMilV,UAAxBt+N,eAILntG,mBAHiBxZ,EAAMqN,gBAAlB+B,YAgBoB4oL,EAAzB,CAA6C8sJ,M,8EC7FjD,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,Q,mDAGA,IAAMI,EAAsB,SAAClyO,GAAU,IAC9BxoB,EAAkCwoB,EAAlCxoB,SAAUroE,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eACvB,OAAK2qE,EAKH,+BAAK8H,UAAU,cACZzyE,EAAe8/F,mBAAqB,KACnC,mCAAYsxI,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,gDACpB,yCAGJ,gCAAMA,UAAU,oBACd,4CAAkB5iF,GAAG,4BAZlB,MAkBXw1U,EAAoBt7L,UAAY,CAC9Bp/D,SAAU,UAAUs/D,M,WAaP,IAAA2F,aACb,IAAAj8C,UAXsB,SAACxzG,GAEvB,MAAO,CACL6f,eAFqB7f,EAAMqN,mBAMJ,GAIzB,CAA6C63U,K,8EC7C/C,I,IAAA,MACA,OACA,O,IAGA,O,IAEA,OACA,QACA,Q,OACA,QACA,QACA,Q,mDAGA,IAqDMltJ,EAAqB,CACzBnzH,6C,WAGa,IAAA2uC,UAZS,SAACxzG,GAGvB,MAAO,CACL8jE,kBAH0B9jE,EAAM0zG,UAA3B5vC,qBAW+Bk0H,EAAzB,EAzDiB,SAAChlF,GAAU,IAElClvC,EAA2CkvC,EAA3ClvC,kBAAmBe,EAAwBmuC,EAAxBnuC,qBAE1B,IAAKf,EACH,OAAO,KAQT,OACE,+BAAKwuB,UAAW,gBAAkB,EAAAhvF,mBAAqB,GAAK,uBAAwBkhL,QAN5D,WACxB,UAAU37I,eAAe,EAAAsI,gCAAgCmC,2BACzDuxB,EAAqB,EAAAzgC,cAAckB,eAKjC,+BAAKgtD,UAAU,sBACb,mCAAS/nC,SAAU,WACjB,yCAAe+nC,UAAU,sBAG7B,+BAAKA,UAAU,yBACb,8BAAIA,UAAU,yCACZ,mCAAavnF,QAAS+4D,EAAmBhkD,mBAAmB,KAY9D,+BAAKwyE,UAAU,2EACb,mCAAavnF,QAAS+4D,EAAmByrF,UAAW,MAEtD,6BAAGj9D,UAAU,8BACX,4CAAkB5iF,GAAG,uC,sJCrD/B,IAAYwY,E,wJAAZ,OAEoCi9T,EAAvBA,qBAAuB,eAACC,EAAD,8DAA2B,CAC7DtyU,KAAMoV,EAAMovD,wBACZ/uD,QAAS,CAAC68T,kBAGsBC,EAArBA,mBAAqB,eAACC,EAAD,8DAAyB,CACzDxyU,KAAMoV,EAAMmvD,sBACZ9uD,QAAS,CAAC+8T,gBAGsBC,EAArBA,mBAAqB,eAAC9kK,EAAD,8DAAyB,CACzD3tK,KAAMoV,EAAMqvD,sBACZhvD,QAAS,CAACk4J,iB,8HCdZ,O,OACA,O,IACA,MACA,OAEA,Q,IACA,O,IACA,QACA,Q,IACA,SACA,QACA,QACA,QACA,SACA,S,IACA,Q,IACA,Q,IACA,Q,IACA,SACA,QAMA,QACA,SACA,Q,IACA,SAEA,S,IAIA,S,IACA,OACA,SACA,Q,mDAGA,IAAM+kK,EAAmB,SAACxyO,GAAU,IAsB5B,EApBClvC,EAI8DkvC,EAJ9DlvC,kBAAmBZ,EAI2C8vC,EAJ3C9vC,aAAckB,EAI6B4uC,EAJ7B5uC,mBAAoB2uQ,EAIS//N,EAJT+/N,cAAe5qU,EAIN6qG,EAJM7qG,SAAUuV,EAIhBs1F,EAJgBt1F,aAAcyE,EAI9B6wF,EAJ8B7wF,KACjGtC,EAGmEmzF,EAHnEnzF,eAAgBi/I,EAGmD9rD,EAHnD8rD,uBAAwB94I,EAG2BgtF,EAH3BhtF,gBAAiB44I,EAGU5rD,EAHV4rD,8BAA+B+pJ,EAGrB31M,EAHqB21M,gBACxFhqJ,EAEmE3rD,EAFnE2rD,sCAAuC/6F,EAE4BovC,EAF5BpvC,gCAAiC6hR,EAELzyO,EAFKyyO,uBAAwBj+Q,EAE7BwrC,EAF6BxrC,mBAChGD,EACmEyrC,EADnEzrC,sBAAuB+hH,EAC4Ct2E,EAD5Cs2E,sBAAuBrjH,EACqB+sC,EADrB/sC,YAAa3tD,EACQ06F,EADR16F,iBAAkBkqI,EACVxvC,EADUwvC,wBAC7ED,EAAmEvvC,EAAnEuvC,qBAAsBzlI,EAA6Ck2F,EAA7Cl2F,uBAAwBgoD,EAAqBkuC,EAArBluC,kBANd,IAQQ,IAAA+jF,UAAS,IARjB,uBAQ3B68L,GAR2B,MAQZC,GARY,UASkB,IAAA98L,UAAS,MAT3B,uBAS3B+8L,GAT2B,MASPC,GATO,UAUwB,IAAAh9L,UAAS,MAVjC,uBAU3Bi9L,GAV2B,MAUJC,GAVI,UAYkB,IAAAl9L,WAAS,GAZ3B,uBAY3Bm9L,GAZ2B,MAYPC,GAZO,MAc5Bn+L,IAAY,IAAAF,gBACZs+L,IAAqB,IAAAz+L,aAAYrjF,GAEjCxhD,IAAS,IAAAC,oBACTyB,GAAew/C,EAAoBA,EAAkB17D,YAAcwa,GAAOgb,wBAAwBwmC,GAIlG+hR,IAAA,gCAAsB,gHACtB/hR,IAAsB0jF,KADA,oBAEpBhjI,EAAag/C,GACbx/C,IAAiBA,GAAaw1E,qBAAwBx1E,GAAaokG,kBAH/C,uBAItBu9N,IAAsB,IACtB,IAAA5rP,6BAA4B/1E,IALN,+BAQpBhV,MAAMC,QAAQyW,IAAoBA,EAAgB7pB,QAAUmoB,KAAiBA,GAAaokG,kBARtE,sBAShB01L,GAAc,IAAA52H,8CAA6CxhK,EAAiB1B,KAT5D,wBAWpBi+H,GAAqB,GAXD,WAYd,IAAA2lC,mCAAkC5jK,GAAc85R,EAAYz2H,+BAZ9C,WAaf7/B,KAbe,mDAgBpBvF,GAAqB,GAhBD,SAmBnBz9H,GAAcR,IAAgBnc,IAAa,EAAD,qBAC7C2c,EAAaR,GAAauJ,eAExBs/D,OAtBoB,EAuBpByxE,GACFzxE,GAAc,IAAAyoG,qCAAoCh3B,GAA+BpvJ,KAAI,SAACzE,GAAD,MAAc,CAACmY,KAAMnY,MAC1G46U,GAAiB,CAAC,CAChB7yU,KAAM,EAAA40B,2BAA2BC,QACjCglD,SAAUQ,MAEH7oE,KACH6iH,EAAey+M,IAAsBA,GAAmB53U,SAAWo2D,EAAqBwhR,GAAqB,KAC7Gx+M,EAAkBw+M,IAAsBA,GAAmB53U,SAAWo2D,EAAqB0hR,GAAwB,KACzH34P,EAAcvqE,GAAOo9E,sBACnB,CAAC98E,KAAMoB,IACP0B,EACA84I,EACAh6I,EACA,MACApH,EACA,CAACypH,eAAcC,oBAGW,gBAAxB9iH,GAAatW,QAA4Bi4D,EAAYmgR,gBACrB,yBAA9BngR,EAAYmgR,cACdj5P,EAAcA,EAAYz+E,QAAO,SAAA2Y,GAC/B,OAAOA,EAAQnE,KAAK1I,SAAb,WAAsC6M,EAAQnE,KAAK1I,SAAb,UAAmC3Y,SAAS,SAEpD,gBAA9BokE,EAAYmgR,gBACrBj5P,EAAcA,EAAYz+E,QAAO,SAAA2Y,GAC/B,OAAQA,EAAQnE,KAAK1I,SAAb,YAAuC6M,EAAQnE,KAAK1I,SAAb,UAAmC3Y,SAAS,WAKjGsrF,GAAc,IAAA6iD,yCAAwC7iD,EAAazvE,GAGnEyvE,GAAc,IAAAiiD,mBAAkBjiD,EAAarpB,EAAmBM,EAAoB9/C,IAE/EhM,IAAoB8rD,GAClB8hR,IAAuBA,KAAuB9hR,IAAuB4hR,KACtEA,IACFC,IAAsB,GAExB,UAAUn9S,mBAAmB,iBAAkB,CAC7CsnN,aAAc9rO,GAAatW,OAC3BqiP,eAAgB/rO,GAAahB,QAAUgB,GAAaf,UAAY,GAChEuE,MAAOqlE,EAAY39E,KAAI,SAAC6X,EAASg/T,GAAV,OAA2B,IAAA/2F,2BAA0BjoO,EAAQnE,KAAM,EAAGmjU,SAIlD,iBAApCziR,IACH0iR,EAAwBn5P,EAAY9oE,WAAU,SAAAgD,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAOo0D,EAAkBz4D,UAAUqE,QAC5F,GAAK42U,IAA0B1iR,IAAiC,EACN,CAACupB,EAAYvpB,GAAkCupB,EAAYm5P,IAA/In5P,EAAYm5P,GAD8E,KACtDn5P,EAAYvpB,GAD0C,MAKzF2iR,GAAc,IAAA11M,yBAAwB1jD,EAAarpB,IAErDjkD,EAAezQ,SAASk2B,aAAgBkiC,EAAmB0oQ,UAAapzT,GACtE,EAAD,qBAAuBwH,GAAaw1E,qBAAyB3xF,GAAY27D,GACxExrD,GAAsBwsD,GAAsBA,IAAsB,EAAA1gC,cAAcE,QAChFkiT,OADyF,EACvEC,OADuE,EAElE,IAAvBF,EAAYpqV,SACdqqV,EAAmBD,EAAY,GAAG55P,SAAStoE,WAAU,SAAAgD,GAAA,OAAW,IAAAjL,oBAAmBiL,EAAQnE,SAC3FujU,EAAqBF,EAAY,GAAG55P,SAAStoE,WAAU,SAAAgD,GAAA,QAAY,IAAAjL,oBAAmBiL,EAAQnE,UAEhGqkD,EAAsB,CACpBtvC,SAAS,EACTyuT,SAAiC,IAAvBH,EAAYpqV,OACtBqqV,mBACAC,wBAIJd,GAAiBY,IAhGK,mDAAtB,4CAqJN,IA/BA,IAAAl9N,YAAU,WAER,OADA88N,KACO,WACL,GAAIvnL,GAAiC96F,EAAmB,CACtD,IAAI6iR,GAAc,IAAA/wJ,qCAAoCh3B,GACtD+nL,EAAYlqV,KAAKmiK,GACZ+nL,EAAYnzU,MAAK,SAAA6T,GAAA,OAAWA,EAAQhc,UAAUqE,KAAOo0D,EAAkBz4D,UAAUqE,OACpFivJ,EAAsC,WAEhCC,IAAkC96F,GAC1C66F,EAAsC,SAIzC,CAACv6F,EAAoB06F,EAAwB94I,EAAiB44I,EAC/DD,EAAuCgqJ,EAAiB7jP,KAE1D,IAAAukD,YAAU,WACJjlD,IACFyhR,GAAsB/hR,GAClBA,GAAqBA,EAAkB17D,WACzC29U,GAAyBjiR,EAAkB17D,YAAY+/E,sBAAqB,OAI/E,CAAC/jB,IAMA9rD,EACF,OAAO,KAGT,GAAI,EAAAhV,qBAAuBwgE,EACzB,OACE,+BAAKwuB,UAAU,cACb,yCAKN,GAAIhuE,KAAiBA,GAAaw1E,oBAChC,OAAO,mCAAyBx1E,aAAcA,GAAcyuT,cAAeA,IAG7E,IAAIp2Q,GAAmB,GACvB,uBACEA,IAAmB,IAAAn5C,qBAAoBc,GAAcnC,EAAMtC,IAG7D,IAAMuhF,GAAmBh9B,IAAuBxhD,GAAOy+E,wBAAwBj9B,GAAoB,GAG7FwiR,GAAoBlB,GAAclyU,MAAK,SAAAqzU,GAAA,OAAeA,EAAY/zU,OAAS,EAAA40B,2BAA2BE,aACtGk/S,GAAqBpB,GAAclyU,MAAK,SAAAqzU,GAAA,OAAeA,EAAY/zU,OAAS,EAAA40B,2BAA2BC,WACvGo/S,GAAyBrB,GAAch3U,QAAO,SAAAm4U,GAAA,OAAeA,EAAY/zU,OAAS,EAAA40B,2BAA2BG,mBAEnH,IAAKi/S,GACH,OAAO,KAGT,IAAM,GAAA9T,IAAA,iCAAkB,WAAOgU,GAAP,0EACjB1iU,KAAgBglK,EAAsBznL,SAASf,SAASC,SAASoC,gBADhD,qDAIlBmhB,GAAaoyM,oCAAsC,IAAApjC,0BAAyB0zJ,GAJ1D,wDAOtBzkM,GAAqB,GAPC,UAQhB,IAAAxoD,+BAA8Bz1E,IARd,uBAShB6hU,KATgB,wBAUhB,IAAIroV,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAV3B,QAWtBwkJ,GAAqB,GAXC,mDAAlB,8CAcA0kM,GAAuB,SAAC3+O,GAC5B0qO,GAAgB1qO,EAAMlqF,SAGxB,wBAAwB,CACtB,IAAIq0M,GAAcq0H,GAAmBn6P,SACjCi6P,IAAqBA,GAAkBj6P,WACzC8lI,2BAAkBm0H,GAAkBj6P,WAApC,aAAiDm6P,GAAmBn6P,YAElEo6P,IAA0BA,GAAuB5qV,QACnD4qV,GAAuBjhV,SAAQ,SAAA+gV,GAC7Bp0H,2BAAkBA,KAAlB,aAAkCo0H,EAAYl6P,cAP5B,QAUW,IAAAsjD,mBAA1BpwB,GAVe,GAUfA,QAASqwB,GAVM,GAUNA,cAIhB,OAHKrwB,IAAWqwB,KACduiF,IAAc,IAAAlkF,mBAAkBkkF,KAGhC,wCACGtqN,EAAW,KACV,wCACE,+BAAKmqF,UAAU,4DACb,gCAAMA,UAAU,8BAA8B31B,GAA9C,KAAkEmqR,GAAmBn6P,SAASxwF,OAA9F,KAOC2nE,GAAqBA,EAAkB17D,YAAYsiF,eAAiB0W,GACnE,+BAAK9O,UAAU,+BACb,mCAAyB+N,YAAav8B,EAAmB8mJ,UAAU,EAAM5gM,KAAK,gCAE9E,OAIV,+BAAKsoE,UAAWnqF,EAAW,wBAA0B,oCACnD,+BAAKmqF,UAAW,iCAAmCpvB,GACjD,mCAAsB2/O,WAAYpwF,GAAaugH,gBAAiBA,OAGnExwL,EAA0B,wCAAsB,MAKvD,OACE,wCACG,SAAC7oD,GAEA,OAAK3zE,EAAgB7pB,QAAWyqV,IAAsBG,GAAuB5qV,SAAU2qV,GAkBrF,wCACE,+BAAKx0P,UAAW,mCAAsCkwD,EAAmD,GAAzB,wBAC3EklC,SAAUu/J,IACZL,IAAqB5gU,EAAgB7pB,OACpC,wCACE,8BAAIm2F,UAAU,yCACZ,4CAAkB5iF,GAAG,sCAEtBsW,EAAgB7pB,QAAYyqV,IAAsBA,GAAkBj6P,SAASxwF,OAO1E,KANF,wCACE,+BAAKm2F,UAAU,+CACb,4CAAkB5iF,GAAG,yCAEvB,yCAGHk3U,GACC,+BAAKt0P,UAAU,mCACZs0P,GAAkBj6P,SAASn9E,KAAI,SAAA6X,GAC9B,OAAO,mCAAiBg5E,YAAah5E,EAAQnE,KACrBhkB,IAAKmoB,EAAQnE,KAAK7X,UAAUqE,GAC5Bi9E,SAAUi6P,GAAkBj6P,SAC5BuwI,SAAS,IACT0yG,uBAAuB,EACvBj2O,mBAAoBA,QAG9C,MAEJ,KACHmtP,GAAmBn6P,SAASxwF,OAC3B,wCACE,8BAAIm2F,UAAU,0BACXw0P,GAAmB11M,cAAgB21M,GAAuB5qV,OAAS,4CAAkBuT,GAAG,6BAA+B,KACvHo3U,GAAmB11M,cAAgB21M,GAAuB5qV,OAAS,IAAM,KAC1E,4CAAkBuT,GAAIo3U,GAAmB11M,cAAgB21M,GAAuB5qV,OAAS2qV,GAAmB11M,aAAe,yBAE7H,+BAAK9+C,UAAW,kCAAoCmzP,EAAyBviR,EAAe,MACzF4jR,GAAmBn6P,SAASn9E,KAAI,SAAA6X,GAC/B,OAAO,mCAAiBg5E,YAAah5E,EAAQnE,KACrBhkB,IAAKmoB,EAAQnE,KAAK7X,UAAUqE,GAC5Bi9E,SAAUm6P,GAAmBn6P,SAC7BuwI,SAAUuoH,EAAyBviR,EAAe,IAClDy2B,mBAAoBA,SAIhD,KACHotP,GAAuB5qV,OAAS4qV,GAAuBv3U,KAAI,SAACq3U,GAC3D,OACE,oCAAU3nV,IAAK2nV,EAAYt1M,qBACzB,8BAAIj/C,UAAU,0BACZ,4CAAkB5iF,GAAIm3U,EAAYz1M,cAAgB,yBAEpD,+BAAK9+C,UAAW,kCAAoCmzP,EAAyBviR,EAAe,MACzF2jR,EAAYl6P,SAASn9E,KAAI,SAAA6X,GACxB,OAAO,mCAAiBg5E,YAAah5E,EAAQnE,KACrBhkB,IAAKmoB,EAAQnE,KAAK7X,UAAUqE,GAC5Bi9E,SAAUk6P,EAAYl6P,SACtBuwI,SAAUuoH,EAAyBviR,EAAe,IAClDy2B,mBAAoBA,YAKjD,MAEN6oD,EAA0B,wCAAsB,MAlFjD,wCACE,+BAAKlwD,UAAU,oCACb,mCAAqBygP,cAAeA,EACflwB,WAAYikC,GAAmBn6P,SAC/BxkF,SAAUA,EACV6qU,gBAAiBA,GACjBr5O,mBAAoBA,EACpBz2B,aAAcA,KAEpCs/E,EAA0B,wCAAsB,UAiF/DgjM,EAAiB57L,UAAY,CAC3BmpL,cAAe,UAAUzyN,QAG3B,IAqCM03E,EAAqB,CACzBr5B,8EACAp3F,8CACAg7E,6C,WAGa,IAAAkN,aACb,IAAAj8C,UA5CsB,SAACxzG,GAAU,MAEwCA,EAAM0zG,UADxE5vC,EAD0B,EAC1BA,kBAAmBZ,EADO,EACPA,aAAckB,EADP,EACOA,mBAAoBR,EAD3B,EAC2BA,gCAAiC6hR,EAD5D,EAC4DA,uBAC3F98B,EAF+B,EAE/BA,gBAAiBnhP,EAFc,EAEdA,mBAAoBvB,EAFN,EAEMA,YAAanB,EAFnB,EAEmBA,kBAFnB,EAG4B9kE,EAAMgR,YAA5DkiG,EAH0B,EAG1BA,kBAAmB/qG,EAHO,EAGPA,SAAUmhL,EAHH,EAGGA,sBAC9Bt7K,EAAS81D,EAAoBA,EAAkB17D,YAAY4F,OAAS,GAJzC,EAKOhO,EAAMyc,YAAvCuJ,EAL0B,EAK1BA,gBAAiBtI,EALS,EAKTA,aALS,EAM+B1d,EAAMk4L,WAA/Dp5B,EAN0B,EAM1BA,uBAAwBF,EANE,EAMFA,8BACxBtmJ,EAAoBtY,EAAMqY,YAA1BC,iBACAkqI,EAA2BxiJ,EAAMu1I,gBAAjCiN,wBACA1lI,EAA0B9c,EAAMwc,UAAhCM,uBAGP,MAAO,CACL3U,WACA27D,oBACAZ,eACAkB,qBACAqhR,yBACAr8N,wBAAyBlW,EAAkB/2G,OAC3C6R,SACA6R,eAAgB7f,EAAMqN,gBACtBqQ,eACAohJ,yBACA94I,kBACA44I,gCACAh7F,kCACA+kP,kBACAnhP,qBACA8hH,wBACArjH,cACA3tD,mBACAkqI,0BACA1lI,yBACAgoD,uBAWuBkzH,EAAzB,CAA6CwtJ,K,8EClc/C,W,OACA,OACA,O,IAEA,O,IACA,SACA,Q,IACA,Q,IACA,QAEA,Q,IACA,QACA,Q,mDAGA,IAAM0B,EAA0B,SAACl0O,GAAU,IAElClvC,EACuCkvC,EADvClvC,kBAAmB3hD,EACoB6wF,EADpB7wF,KAAM4kD,EACcisC,EADdjsC,sBAAuBM,EACT2rC,EADS3rC,iBAAkBD,EAC3B4rC,EAD2B5rC,oBAAqBj/D,EAChD6qG,EADgD7qG,SAC5Fi8D,EAA4C4uC,EAA5C5uC,mBAAoBurB,EAAwBqjB,EAAxBrjB,qBAChB8iN,GAAY,IAAA9qJ,QAAO,MAWzB,IARA,IAAAt+B,YAAU,WACR,KAAOlhH,GAAY27D,GAAuB37D,GAAYi8D,KAAyBiD,EAAkB,CAC/F,IAAMzkD,GAAS,IAAAC,oBACfukD,EAAoBxkD,EAAOq0F,2BAA0B,GAAO,GAAO,OAGpE,CAACnzC,EAAmBM,KAElBj8D,IAAa27D,EAChB,OAAO,KAGT,GAAI37D,IAAai8D,EACf,OAAO,KAGT,IAAMxhD,GAAS,IAAAC,oBACTyB,EAAew/C,EAAoBA,EAAkB17D,YAAcwa,EAAOgb,wBAAwBwmC,GAExG,IAAK9/C,EACH,OAAO,KAGT,IAAM6iU,EAAoB,SAACC,EAAoBztP,GAC7C,IAAKtyB,EACH,OAAO,GAEM,IAAAxkD,oBACRi0H,4BAA4BzvE,GAC9Bl/D,IACHi/U,EAAmB9iU,EAAatW,QAChCo5D,EAAoB,OAEtBL,IACA4yB,EAAmBr1E,EAAaw/C,mBAAmB,IAG/C0mB,GAAYnjB,IACZA,EAAiB/iD,EAAatW,SAC9B2hF,GAAyBtoB,EAAiB/iD,EAAatW,UAAY2hF,EAAqBtkF,UAAUqE,GAExG,OACE,kCAAmB4gU,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,wCACG,SAACztP,GAEA,4BACSxxF,EACL,mCAAY8oP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC86E,SAAUA,EACV8H,UAAW,sFACXkyF,QAAS,kBAAM2iK,EAAkBC,EAAoBztP,KAC/D,yCAGF,+BAAKrH,UAAU,cACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnCg4I,IAAK+qJ,EACLjoN,SAAUA,EACV8H,UAAU,gDAGVkyF,QAAS,kBAAM2iK,EAAkBC,EAAoBztP,KAC/D,yCAEF,gCAAMrH,UAAU,sBAMpB,wCACE,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnCg4I,IAAK+qJ,EACLjoN,SAAUA,EACV8H,UAAU,gDAGVkyF,QAAS,kBAAM2iK,EAAkBC,EAAoBztP,KAC/D,oDAmBtButP,EAAwBt9L,UAAY,GAIpC,IAoBMouC,EAAqB,CACzBjxH,8CACAK,2C,WAGa,IAAAqoF,aACb,IAAAj8C,UA1BsB,SAACxzG,GAAU,MACiCA,EAAM0zG,UAAjE5vC,EAD0B,EAC1BA,kBAAmBuD,EADO,EACPA,iBAAkBjD,EADX,EACWA,mBACrCj8D,EAAYnI,EAAMgR,YAAlB7I,SAEHwnF,EAAuB7rB,EAC3B,GAAI37D,GAAYi8D,EAAoB,CAClC,IACM9/C,GADS,IAAAzB,oBACa+a,wBAAwBwmC,GACpDurB,EAAuBrrE,EAAeA,EAAauJ,cAAgB,KAGrE,MAAO,CACLu2C,qBACAN,oBACAuD,mBACAl/D,WACAwnF,0BAUuBqoG,EAAzB,CAA6CkvJ,K,wGCzJ/C,O,OACA,OACA,O,IAEA,O,IACA,Q,IACA,O,IACA,QAEA,QAKA,Q,IACA,S,IACA,SACA,Q,IACA,S,IACA,S,IACA,Q,mDAEA,IAAMG,EAA2B,SAACr0O,GAAU,IAEnC16F,EAEyB06F,EAFzB16F,iBAAkBwZ,EAEOkhF,EAFPlhF,iBAAkBw5G,EAEXt4B,EAFWs4B,oBAAqB9yH,EAEhCw6F,EAFgCx6F,qBAAsBszH,EAEtD94B,EAFsD84B,wBACpF3jI,EAC8B6qG,EAD9B7qG,SAAUga,EACoB6wF,EADpB7wF,KAAMzE,EACcs1F,EADdt1F,aAAc2tH,EACAr4B,EADAq4B,yBAA0BD,EAC1Bp4B,EAD0Bo4B,4BACxDk0B,EAA8BtsD,EAA9BssD,2BAEF,IAAKhnJ,EACH,OAAO,KAGT,IAAM8sG,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GACrE4Z,EAAcgzF,EAAc,GAE5BkiO,EAAc,WAMlBx7M,mBACGh6G,EAAmB,CAClBM,iBAGJk5G,EAAoBx5G,EAAmB,IAQnCy1T,EAAgB,WAKpBj8M,EAAoBx5G,EAAmB,IAGnC01T,EAAY,WACXhvU,EAAqBsZ,IAGxB,sBACEg6G,mBACGh6G,GADH,gBAEQtZ,EAAqBsZ,IAAqB,GAFlD,CAGIjhB,SAAUyuJ,MAIhBh0B,EAAoBx5G,EAAmB,IAVvCw1T,KAuBEG,EAAc31T,GAAoB,GAA8B,IAAzBszF,EAAcjpH,QAAgBi2B,EAAY+1F,YACjFu/N,EAAkB51T,GAAoB,IAAMszF,EAAcjpH,OAE5DwrV,GAAgBnvU,EAAqBsZ,GACrC61T,GAAyC,IAAzBviO,EAAcjpH,QAAyC,UAAzBi2B,EAAY8vE,WAE5DylP,KADiB,IAAAjhO,0BAAyBluG,EAAsBsZ,EAAkBxZ,EAAkB8Z,EAAa,KAAM1U,GAC7FvhB,QAG5B,OAAIgM,EAEF,sBAE4B,IAAtB2pB,EAEA,mCAAQwgE,UAAW,8GACXkyF,QAAS,kBAAMl5C,EAAoB,KACzC,4CAAkB57H,GAAG,sBAAsBmO,OAAQ,CAACynU,WAAYhtU,EAAiBna,SAKnFupV,EACK,wCAIP,wCACGA,GAAmBtiO,EAAcjpH,OAAS,EAAI,KAC7C,wCACE,wCACA,yCAGJ,mCAAQm2F,UAAW,oFACX88M,UAAW,wCACX5qH,QAASn5C,EA7CL,WAClBD,GAA4B,IA4CoCm8M,GACxD,4CAAkB73U,GAAI27H,EAA2B,eAAiB,sBAEnEA,EAA2B,KAC1B,wCACGo8M,EACC,mCAAQn1P,UAAW,oGACXkyF,QAAS8iK,GACf,4CAAkB53U,GAAG,kBAErB,KACJ,mCAAQ4iF,UAAW,qFACbq1P,EAA8C,GAA/B,8BACbn9P,SAAUm9P,EACVxY,QAAS,wCACT3qJ,QAASgjK,GACf,4CAAkB93U,GAAG,oBAS/B,+BAAK4iF,UAAU,sBACXxgE,GAAoB,GAAKszF,EAAcjpH,OACvC,wCACE,+BAAKm2F,UAAU,6BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAW,6BACXkyF,QAAS+iK,GACnB,yCAEF,gCAAMj1P,UAAU,mBAAmBkyF,QAAS+iK,GAC1C,4CAAkB73U,GAAG,uBAGxB+3U,EACC,+BAAKn1P,UAAU,6BACb,gCAAMA,UAAU,YAAYkyF,QAAS8iK,GACnC,4CAAkB53U,GAAG,mBAGvB,KACJ,+BAAK4iF,UAAU,6BACb,gCAAMA,UAAW,kCAAoCq1P,EAAe,4CAA8C,IAC5GnjK,QAASgjK,GACb,4CAAkB93U,GAAG,kBAEvB,mCAAYuhP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iBACnC4iF,UAAU,6BACV9H,SAAUm9P,EACVnjK,QAASgjK,GACnB,2CAIJ,MAMR,wCACE,+BAAKl1P,UAAWo1P,GAAmBA,EAAnBA,mBAAwC,GAAK,wBACnC,IAAtB51T,EACA,mCAAQwgE,UAAW,qCACXkyF,QAAS,kBAAMl5C,EAAoB,KACzC,4CAAkB57H,GAAG,sBAAsBmO,OAAQ,CAACynU,WAAYhtU,EAAiBna,SAEjF,KACF2zB,GAAoB,GAAKszF,EAAcjpH,OACvC,wCACE,mCAAQm2F,UAAW,+DACXkyF,QAAS+iK,GACf,4CAAkB73U,GAAG,sBAEvB,mCAAQ4iF,UAAW,+DACX9H,SAAUm9P,EACVnjK,QAASgjK,GACf,4CAAkB93U,GAAG,mBAGvB,KACHg4U,wBACC,wCACE,KACHA,IAAoB,EAAD,mBAClB,mCAAQp1P,UAAW,qCAAsCkyF,QAnK9C,WACjB14C,EAAwB,IAAI,GAC5BR,EAAoB,KAkKZ,4CAAkB57H,GAAG,uCAAuCmO,OAAQ,CAACynU,WAAYhtU,EAAiBna,SAElG,MAEN,+BAAKm0F,UAAW,oBAAsBo1P,EAAkB,EAAApkV,mBAAqB,6BAA+B,eAAiB,KAC1HmkV,EACC,gCAAMn1P,UAAU,YAAYkyF,QAAS8iK,GACnC,4CAAkB53U,GAAG,iBACrB,yCAEA,KACHg4U,wBAAwC,wCAAiC,QAkC5E1vJ,EAAqB,CACzB1sD,0CACAQ,kDACAV,2D,WAGa,IAAAqkB,aACb,IAAAj8C,UA7BsB,SAACxzG,GAAU,MAE4DA,EAAMqY,YAA5FC,EAF0B,EAE1BA,iBAAkBwZ,EAFQ,EAERA,iBAAkBtZ,EAFV,EAEUA,qBAAsB6yH,EAFhC,EAEgCA,yBAMjE,MAAO,CAGL/yH,mBACAwZ,mBACAtZ,uBACArQ,SAXiBnI,EAAMgR,YAAlB7I,SAYLuV,aAXqB1d,EAAMyc,YAAtBiB,aAYL2tH,2BAEAi0B,2BAZmCt/J,EAAMk4L,WAApC54B,8BAuBkB04B,EAAzB,EAA6C,SAAChlF,GAC5C,OACE,wCACG,SAACrZ,GAAD,OAAwB,wBAAC0tP,GAAD,gBAA8Br0O,EAA9B,CAAqCrZ,mBAAoBA,a,sJC5Q1F,aACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,mDAGwBiuP,EAAXA,UAAW,IAAAC,iBAAgB,CACtC74H,+BACAkhB,2BACA9hN,kCACAtkB,oBACAunH,+BACAy2N,wBACAz6U,0BACAoP,sBACAsrU,gCACA7vJ,qBACA8vJ,uBACAhiC,iCACAj5E,2BACA79N,oBACAukG,sBACA+4M,+BACA94M,oBACA/8E,0BACA4+G,0BACAm8J,uBACAp/R,8BACA8+G,qBACA46D,kBACAp3K,sBACA6Y,yBACAzc,sBACAi0U,oBACAnwE,qCACAx9M,wBACAyD,2BACAnG,4BACAvjD,wBACAoE,oBACAwyU,4BACAj9H,qBACAykB,wBACAr2M,kCACA5c,oBACAnE,yB,4IC1Ea,WAAuC,IAA9B5J,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAM+C,SAET,OAAIxc,EAAM6c,YACDlvB,OAAO+2B,OAAO,GAAI1kB,GAGvB25B,EAAO7f,QAAQyC,WAAavc,EAAM0c,YAAYhvB,OAAS,EAClDC,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Buc,WAAYod,EAAO7f,QAAQyC,WAAa,IAGnC5uB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Buc,WAAYod,EAAO7f,QAAQyC,YAAc,EAAI,EAAIod,EAAO7f,QAAQyC,aAItE,KAAK9C,EAAMqD,mBACX,KAAKrD,EAAMkD,sBACT,OAAOhvB,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAKhB,OAAO9Z,GApCT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnBplP,aAAc,EACdN,WAAY,EACZG,YAAa,K,qHC4BA,WAAuC,IAA9B1c,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAM0D,wBACX,KAAK1D,EAAM+D,0BACX,KAAK/D,EAAMkE,sBACX,KAAKlE,EAAMuE,gBACX,KAAKvE,EAAM6E,+BACX,KAAK7E,EAAMgF,mCACX,KAAKhF,EAAMmF,sCACX,KAAKnF,EAAM4D,4BACX,KAAK5D,EAAM0E,gBACX,KAAK1E,EAAMwF,2CACX,KAAKxF,EAAM4/C,0BACX,KAAK5/C,EAAM+F,8BACX,KAAK/F,EAAM6/C,uBACX,KAAK7/C,EAAM8/C,+BACX,KAAK9/C,EAAMggD,mCACX,KAAKhgD,EAAMigD,2BACX,KAAKjgD,EAAMkgD,mCACX,KAAKlgD,EAAMmgD,cACX,KAAKngD,EAAMogD,gCACT,OAAOlsE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM2/C,mBACT,OAAOzrE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B8Y,sCAAmB6gB,EAAO7f,QAAQhB,kBAEtC,KAAKW,EAAM+/C,6BACTx5D,mBAAYA,EAAZ,CAAmBgnJ,SAAUr5J,OAAO+2B,OAAO,GAAI1kB,EAAMgnJ,SAAUrtH,EAAO7f,QAAQktI,YAC9E,MACF,KAAKvtI,EAAM4F,mBACT,OAAO1xB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bof,cAAeua,EAAO7f,QAAQsF,eAAiB,KAC/Cq6T,qBAAsBz5U,EAAMy5U,qBAEhC,KAAKhgU,EAAMoE,0BACT,OAAOlwB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BilQ,mBAAoBjlQ,EAAMilQ,mBAKhC,OAAOjlQ,GA9ET,IAAYyZ,E,wJAAZ,O,mDAEA,IAAMwoP,EAAe,CACnBjlP,iBAAiB,EACjB9F,eAAgB,GAChB6H,2BAA4B,EAC5BxB,oBAAqB,EACrBc,sBAAuB,EACvBG,0BAA0B,EAC1BG,4BAA6B,GAC7BjB,qBAAsB,KACtBK,oBAAoB,EACpBG,oBAAoB,EACpBkB,cAAe,KACfq6T,mBAAoB,EACpB3gU,cAAe,GACf2tI,oBAAqB,GACrBlnI,sBAAsB,EACtBonI,gBAAgB,EAChBC,0BAA0B,EAC1BE,wBAAyB,EACzBE,SAAU,CACR9zG,MAAO,GACPD,aAAc,IAEhBi0G,cAAe,EACfE,uBAAuB,EACvBE,0BAA0B,EAC1BE,SAAU,GACVE,qBAAsB,GACtBu9G,iBAAkB,I,sHCqDL,WAAwC,IAA9BjlQ,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAErD,OAAQA,EAAOt1B,MACb,KAAKoV,EAAMI,iBACL,EAAA9kB,aAAe4kC,EAAO7f,QAAQF,aAAe,MAAyC,WAAjCvnB,SAAS6C,KAAKoY,MAAMosU,WACtE,EAAAjhT,kBAAkBv/B,MAAK,SAAAygV,GAAA,OAASvoV,OAAO2B,SAASC,KAAKI,SAAS,IAAMumV,QACzEtnV,SAAS6C,KAAKoY,MAAMosU,SAAW,IAEjC,IAAMhgV,EAAWigC,EAAO7f,QAAQF,cAAgB,EAAA/kB,oBAAA,kBAAwC,KAAO,KACzF+kV,EAAUlgV,GAAY,UAAKA,aAAc,IAAAkuF,iBAE/C,OADAgyP,EAAUvnV,SAAS6C,KAAKC,UAAUC,IAAI,aAAe/C,SAAS6C,KAAKC,UAAU27K,OAAO,aAC7EnjL,OAAO+2B,OAAO,GAAI1kB,GAAlB,cACLtG,WACAkgV,WACGjgT,EAAO7f,UAGd,KAAKL,EAAMW,kBACX,KAAKX,EAAMgB,oBACX,KAAKhB,EAAMqgD,aACX,KAAKrgD,EAAMshD,yBACX,KAAKthD,EAAMsgD,iBACX,KAAKtgD,EAAMugD,uBACX,KAAKvgD,EAAMwgD,4BACX,KAAKxgD,EAAM0hD,qBACX,KAAK1hD,EAAMmiD,kBACX,KAAKniD,EAAMoiD,uBACX,KAAKpiD,EAAMqiD,yCACX,KAAKriD,EAAMsiD,6BACT,OAAOpuE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMa,kBACT,OAAO3sB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BsC,aAAc3U,OAAO+2B,OAAO,GAAI1kB,EAAMsC,aAAcq3B,EAAO7f,QAAQxX,gBAEvE,KAAKmX,EAAMkiD,wBACT,OAAI37D,EAAM66K,sBAAsBznL,SAASumC,EAAO7f,QAAQ+gK,uBAC/C76K,EAEFrS,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B66K,8CAA2B76K,EAAM66K,uBAAjC,CAAwDlhJ,EAAO7f,QAAQ+gK,0BAE3E,KAAKphK,EAAMQ,sBACT,OAAOtsB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B65U,kBAAkB,qCAAS75U,EAAM65U,kBAAf,CAAiClgT,EAAO7f,QAAQE,qBAEtE,KAAKP,EAAM4C,WACT,IAAM4d,GAAW,IAAA7pB,aAAYupB,EAAO7f,QAAQ5L,OAE5C,OADA9c,OAAO6oC,SAAWA,GAClB,gBACKj6B,EADL,CAEEi6B,WACA/rB,MAAOyrB,EAAO7f,QAAQ5L,QAG1B,KAAKuL,EAAM0I,kBACT,OAAO23T,EAAsB95U,EAAO25B,EAAO7f,SAC7C,KAAKL,EAAMoC,qBACX,KAAKpC,EAAM0C,0BACT,OAAOxuB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bmb,kCAAewe,EAAO7f,YAE1B,KAAKL,EAAMmB,uBACT,OAAOjtB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BykG,0CAAuBzkG,EAAMykG,mBAA7B,CAAgD9qE,EAAO7f,QAAQa,wBAEnE,KAAKlB,EAAMsB,0BACT,OAAOptB,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACFA,EADE,CACK8a,qBAAqBA,EAArBA,cAAyB9a,EAAM8a,oBAAwB6e,EAAO7f,YAE5E,KAAKL,EAAMwS,gBACT,OAAOt+B,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACFA,EADE,CACKgsB,YAAYA,EAAZA,cAAgBhsB,EAAMgsB,WAAe2N,EAAO7f,YAE1D,KAAKL,EAAM+N,oBAAqB,OACX,IAAA+pP,yBAAwB53O,EAAO7f,SAA3CnZ,EADuB,EACvBA,SACDumH,EAAWvmH,EAASumH,SAC1B,OAAOv5H,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACFA,EADE,CACKknH,SAAU6yN,IAAgB7yN,GAAY,EAAA1xH,oBAAoBpC,SAAS8zH,GAAYA,EAAWlnH,EAAMknH,aAKhH,OAAOlnH,GAvKT,I,IAAA,QAEYyZ,E,wJAAZ,OACA,QACA,Q,IACA,OACA,SAGA,QACA,QAOA,Q,IACA,Q,mDAEA,IAAMsgU,IAAe,IAAAxmU,aAAY,aAAe,IAAI3b,QAAQ,IAAK,IAC3DoiV,IAAY,IAAAzmU,aAAY,UAAY,IAAI3b,QAAQ,IAAK,IAmBrDqF,EAAc+8U,GAAY,UAAaA,GAAYA,GAhBnD,IAAA/pS,yBACK,QACE,IAAA4mG,8BAA8B,IAAAC,8BAChC,MACE,IAAA/oG,qBACF,WACE,IAAA4pG,oBACF,SACE,EAAA9iJ,oBAAsBzD,OAAO2B,SAASC,KAAKI,SAAS,eACtD,QACE,EAAA0B,iBAAmB1D,OAAO2B,SAASC,KAAKI,SAAS,YACnD,OAEFzF,OAAOmc,KAAP,WAA0B,GAK7Bm4P,EAAe,CACnBg4E,OAAQ,CACNr/P,SAAU,IAEZs/P,aAAc,GACdC,gBAAiB,GACjBC,4BAA6B,GAC7BxgU,YAAaxoB,OAAOwqD,YAAc,EAClCzhC,aAAc/oB,OAAO+xD,aAAe,EACpCzpD,UAAU,EACVwU,MAAO,EACP5L,aAAc,GACd6Y,UAAW,GACXspF,kBAAmB,GACnBjqF,gBAAgB,EAChBM,oBAAqB,CACnB2L,MAAM,EACN+uE,KAAM,YACNrmD,MAAO,GACPH,QAAS,IAEXhjB,WAAY,CACVquT,mBAAmB,EACnBC,oBAAoB,GAEtBrgT,SAAU,GACV4/S,iBAAkB,GAClB3yN,SAAU6yN,GAAe,EAAAvkV,oBAAoBpC,SAAS2mV,GAAeA,EAAc,QACnF7zN,oBAAoB,EACpB00D,mBAAmB,EACnB39K,cACA8xF,eAAgB,GAChB8rF,sBAAuB,GACvBH,sBAAuB,GACvBK,cAAc,EACdE,mBAA6C,WAAzB7pL,OAAO2B,SAASwb,MAAqBnd,OAAO2B,SAASwb,KAAK41E,WAAW,YACzFg3F,sBAAuB,KACvBE,sBAAsB,EACtBk/J,aAAcnpV,OAAO2B,SAASwb,MA2FhC,SAASurU,EAAsB95U,EAA/B,GAAwD,IAAjBijB,EAAiB,EAAjBA,eACrC,YAA8B,IAAnBA,GAAmCA,EAIvCjjB,GAHL,gBAAWA,EAAX,CAAkBkO,MAAO,M,qMC5Kd,SAAShhB,EAAM0L,EAAOE,EAAQ0hV,EAAQjnR,GAmBnD,IAAIknR,EAAoB,CAAC,EAAG,EAAG,EAAG,GAAG,EAAG,GAAG,EAAG,EAAE,EAAG,EAAE,EAAE,GAAG,EAAG,GAAG,EAAEC,KAChEC,EAAoB,CAAC,GAAG,EAAG,EAAG,EAAG,GAAG,EAAG,EAAG,EAAE,GAAG,EAAE,EAAE,EAAG,GAAG,EAAG,EAAED,KA0BhE,SAASE,EAAKvnU,EAAEC,GAEd,OADQpmB,EAAiB,GAAXomB,EAAE1a,EAAMya,GAAK,GAClB,GAGX,IAAIvkB,EAAIykE,GA7BR,SAA8BqnR,GAM5B,IALA,IAAIvnU,EAAI,EACNC,EAAI,IAIO,CACX,GAAIsnU,EAAKvnU,EAAEC,GACT,MAAO,CAACD,EAAEC,GAEZ,GAAKD,IAAMza,GAAW0a,IAAMxa,EAE1B,OADA7H,QAAQC,MAAM,2CAA6CspV,IACpD,EAEC,IAANnnU,GACFA,EAAIC,EAAI,EACRA,EAAI,IAEJD,GAAQ,EACRC,GAAQ,IAUGunU,CAAqBD,GACtC,IAAK9rV,EACH,MAAO,GAET,IACEU,EAAI,GACJ6jB,EAAIvkB,EAAE,GACNwkB,EAAIxkB,EAAE,GACNg+E,EAAK,EACLC,EAAK,EACL+tQ,EAAMJ,IACNK,EAAML,IACNltV,EAAI,EAEN,GAEEA,EAAI,EACAotV,EAAKvnU,EAAE,EAAGC,EAAE,KAAI9lB,GAAK,GACrBotV,EAAKvnU,EAAKC,EAAE,KAAI9lB,GAAK,GACrBotV,EAAKvnU,EAAE,EAAGC,KAAM9lB,GAAK,GACrBotV,EAAKvnU,EAAKC,KAAM9lB,GAAK,GAGf,IAANA,GACFs/E,GAAc,IAATiuQ,GAAc,EAAI,EACvBhuQ,EAAK,GACU,IAANv/E,GACTs/E,EAAK,EACLC,EAAa,IAAR+tQ,GAAa,EAAI,IAEtBhuQ,EAAK2tQ,EAAkBjtV,GACvBu/E,EAAK4tQ,EAAkBntV,IAIrBs/E,GAAMguQ,GAAO/tQ,GAAMguQ,IACrBvrV,EAAExB,KAAK,CAACqlB,EAAGC,IACXwnU,EAAMhuQ,EACNiuQ,EAAMhuQ,GAGR15D,GAAKy5D,EACLx5D,GAAKy5D,QACEj+E,EAAE,IAAMukB,GAAKvkB,EAAE,IAAMwkB,GAE9B,OAAO9jB,I,oPC/FT7B,OAAOkC,eAAeZ,EAAS,aAAc,CAC3CkB,OAAO,IAGT,IAAI6qV,EAwBK,SAAUC,EAAKztV,GACpB,GAAIqT,MAAMC,QAAQm6U,GAChB,OAAOA,EACF,GAAI7pV,OAAOnB,OAAOirV,YAAYvtV,OAAOstV,GAC1C,OA3BJ,SAAuBA,EAAKztV,GAC1B,IAAI2tV,EAAO,GACPC,GAAK,EACLC,GAAK,EACLC,OAAKrvR,EACT,IACE,IAAK,IAAwCsvR,EAApCC,EAAKP,EAAI7pV,OAAOnB,OAAOirV,cAAmBE,GAAMG,EAAKC,EAAGtgL,QAAQ2hH,QACvEs+D,EAAKntV,KAAKutV,EAAGprV,QACT3C,GAAK2tV,EAAKztV,SAAWF,GAFqD4tV,GAAK,IAIrF,MAAOpqV,GACPqqV,GAAK,EACLC,EAAKtqV,EAPP,QASE,KACOoqV,GAAMI,EAAA,QAAcA,EAAA,SAD3B,QAGE,GAAIH,EAAI,MAAMC,GAGlB,OAAOH,EAOEM,CAAcR,EAAKztV,GAE1B,MAAM,IAAIouT,UAAU,yDAK1B3sT,EAAQw8C,QAMR,WACE,IAAIv0C,EAASwuQ,UAAUh4Q,OAAS,QAAsBu+D,IAAjBy5M,UAAU,GAAmBA,UAAU,GAAK,GAE7Eg2E,EAAsBxkV,EAAOwkV,qBAAuBC,EACpD71E,EAAQ5uQ,EAAO4uQ,OAASze,EAAmB0e,cAE/C,OAAO,SAAUI,GACf,IAAIjpP,EAAWipP,EAAKjpP,SACpB,OAAO,SAAUg+I,GACf,OAAO,SAAUvhI,GACf,GAAIA,EAAOt1B,KAAM,CACf,IAAIu3U,EAAuBZ,EAAeU,EAAqB,GAC3DG,EAAUD,EAAqB,GAC/BE,EAAYF,EAAqB,GACjCG,EAAWH,EAAqB,GAEhCI,EAAY,IAAI1sQ,OAAOusQ,EAAU,IAAK,KACtCI,EAAc,IAAI3sQ,OAAOwsQ,EAAY,IAAK,KAC1CI,EAAa,IAAI5sQ,OAAOysQ,EAAW,IAAK,KAExCI,EAAcxiT,EAAOyiT,MAAQziT,EAAOyiT,KAAKt2E,OAASnsO,EAAOmsO,OAASA,EAElEnsO,EAAOt1B,KAAK5G,MAAMu+U,GACpB9+T,GAAS,EAAImqO,EAAmBjjJ,aAAa+3O,KACpCxiT,EAAOt1B,KAAK5G,MAAMw+U,IAAgBtiT,EAAOt1B,KAAK5G,MAAMy+U,KAC7Dh/T,GAAS,EAAImqO,EAAmBhjJ,aAAa83O,IAIjD,OAAOjhL,EAAKvhI,OAjCpB,IAAI0tN,EAAqBJ,EAAQ,KAE7B00F,EAAsB,CAAC,UAAW,YAAa,a,6BC3CnDhuV,OAAOkC,eAAeZ,EAAS,aAAc,CAC3CkB,OAAO,IAGT,IAAIurT,EAAcz0D,EAAQ,GAEtBD,EAAeC,EAAQ,KAEvBI,EAAqBJ,EAAQ,KAQjCh4P,EAAQw8C,SAAU,EAAIiwQ,EAAY32M,UANH,SAAkC/kG,EAAO4gP,GACtE,MAAO,CACLvgM,QAASrgD,EAAMjQ,IAAI,cAAc6wP,EAASklB,OAASze,EAAmB0e,kBAIxD,CAAmD/e,EAAaF,a,oPCiBnE,SAAwB7pP,GAErC,IAAM0nG,EAAS,CACbujD,MAAO,UACP36B,IAAK,UACLC,KAAM,UACNC,MAAO,UACPC,MAAO,UACPE,MAAO,UACPhpB,MAAO,WAGT,OAAQ3nG,GACN,IAAK,KACL,QACE0nG,EAAO2xD,MAAQ,EAAAvhK,YAAc,UAAY,UACzC4vG,EAAOyjD,KAAO,EAAArzJ,YAAc,UAAY,UACxC4vG,EAAO03O,UAAY,UACnB13O,EAAOzrE,QAAU,EAAAnkC,YAAc,SAAW,OAC1C4vG,EAAO23O,KAAO,EAAAvnV,YAAc,YAAc,WAC1C4vG,EAAOujD,MAAQ,UACf,MAEF,IAAK,OACHvjD,EAAO2xD,MAAQ,UACf3xD,EAAOyjD,KAAO,UACdzjD,EAAO03O,UAAY,UACnB13O,EAAOzrE,QAAU,sBACjByrE,EAAO23O,KAAO,iBACd33O,EAAOujD,MAAQ,UACf,MAEF,IAAK,UACHvjD,EAAO2xD,MAAQ,UACf3xD,EAAOyjD,KAAO,UACdzjD,EAAO03O,UAAY,UACnB13O,EAAOzrE,QAAU,OACjByrE,EAAO23O,KAAO,WACd33O,EAAOujD,MAAQ,UACf,MAEF,IAAK,KACHvjD,EAAO2xD,MAAQ,UACf3xD,EAAOyjD,KAAO,UACdzjD,EAAO03O,UAAY,UACnB13O,EAAOzrE,QAAU,OACjByrE,EAAO23O,KAAO,WACd33O,EAAOujD,MAAQ,UAKnB,OAAOq0L,EAAU53O,IAvFnB,aACA,SACA,Q,IACA,S,IACA,S,mDAEA,IACE,EAAA63O,KAAK5jT,SAAS,CACZ6jT,OAAQ,OACRzkV,mDAEF,EAAAwkV,KAAK5jT,SAAS,CACZ6jT,OAAQ,WACRzkV,gDAEF,EAAAwkV,KAAK5jT,SAAS,CACZ6jT,OAAQ,sBACRzkV,mEAEF,EAAAwkV,KAAK5jT,SAAS,CACZ6jT,OAAQ,iBACRzkV,8DAEF,EAAAwkV,KAAK5jT,SAAS,CACZ6jT,OAAQ,SACRzkV,4DAEF,EAAAwkV,KAAK5jT,SAAS,CACZ6jT,OAAQ,YACRzkV,2DAEF,MAAO9G,GACPD,QAAQ4B,IAAI,0BAA2B3B,GA2DzC,IAAMqrV,EAAY,SAAC53O,GAAD,OAAY,EAAA+3O,WAAWlsV,QAAX,2BAE5BukC,KAAM,CACJ4nT,WAAY,GACZC,cAAe,GACfC,kBAAmB,GACnBx5G,WAAY1+H,EAAOzrE,QACnBwrE,MAAOC,EAAO6oB,KACd1xE,SAAU,IAEZwqR,OAAQ,CACNqW,WAAY,IACZC,cAAe,GACfC,kBAAmB,GACnBx5G,WAAY1+H,EAAOzrE,QACnBwrE,MAAOC,EAAO6oB,KACd1xE,SAAU,IAEZwgS,KAAM,CACJj5G,WAAY1+H,EAAO23O,MAErBp0L,MAAO,CACLxjD,MAAOC,EAAOujD,OAEhB16B,KAAM,CACJ9oB,MAAOC,EAAO6oB,MAEhBM,QAAS,CACPppB,MAAOC,EAAOyjD,MAEhBvjD,OAAQ,CACNH,MAAOC,EAAO2xD,OAEhBwmL,OAAQ,CAIN3rI,UAAW,GACX0iG,UAAW,GACXkpC,aAAc,GACdj+K,QAAS,OACTk+K,cAAe,MACfC,WAAY,aACZC,eAAgB,iBAElBC,WAAY,GAGZC,WAAY,CACVt+K,QAAS,OACTm+K,WAAY,SACZC,eAAgB,SAChB58F,UAAW,EACX+8F,KAAM,GAERC,aAAc,CACZh9F,WAAY,GACZi9F,YAAa,GACbC,aAAc,IAEhBC,gBAAiB,CACft6M,SAAU,OACVguE,UAAW,OACXusI,UAAW,SACXC,UAAY,WAEdC,WAAY,CACVhlV,MAAO,OACPokV,cAAe,MACfE,eAAgB,YAElBW,eAAgB,CACdx6G,WAAY1+H,EAAO23O,MAErBwB,UAAW,CACTnpT,SAAU,WACVoW,KAAM,EACND,MAAO,EACP3sC,IAAK,EACLw+U,WAAY,GACZE,kBAAmB,GACnB/jV,OAAQ,IAERgmK,QAAS,OACTk+K,cAAe,MACfE,eAAgB,iBAElBa,kBAAmB,CACjBnlV,MAAO,MACPykV,KAAM,UACNvhS,SAAU,GACV4oD,MAAOC,EAAO+oB,OAEhBswN,iBAAkB,CAChBplV,MAAO,MACPykV,KAAM,WAERY,gBAAiB,CACfV,YAAa,GAIf9+B,KAAM,CACJ7lT,MAAO,OACPkmK,QAAS,OACTk+K,cAAe,MACfE,eAAgB,iBAElBl1J,QAAS,CACPpvL,MAAO,MACPykV,KAAM,WAER1+B,WAAY,CACV/lT,MAAO,MACPykV,KAAM,WAER3+B,YAAa,CACX8+B,aAAc,IAEhBz+B,cAAe,CACbw+B,YAAa,GACbC,aAAc,IAEhBU,aAAc,CACZX,YAAa,IAEf3+B,UAAW,CACTv7E,WAAY1+H,EAAO23O,KACnB6B,kBAAmB,EACnBC,kBAAmBz5O,EAAO8oB,MAC1BmvN,cAAe,EACfG,aAAc,GAEhBl+B,SAAU,CACRk+B,aAAc,GAEhBj+B,cAAe,CACbx+D,UAAW,IAEbhuO,KAAM,CACJ+rU,gBAAiB15O,EAAOipB,MACxB0wN,gBAAiB,EACjBC,gBAAiB,QACjBj+F,UAAW,GACX89F,kBAAmBz5O,EAAOipB,MAC1BuwN,kBAAmB,GAErBK,UAAW,CACT95O,MAAOC,EAAO8oB,MACduuM,QAAS,EACTrqN,gBAAiBhN,EAAOipB,MACxB9xE,SAAU,GACV2iS,cAAe,YACfp7G,WAAY1+H,EAAO23O,MAErBoC,SAAU,CACRnB,YAAa,IAEfoB,aAAc,CACZj6O,MAAOC,EAAOyjD,KACd+1L,kBAAmB,EACnBC,kBAAmBz5O,EAAOyjD,KAC1B4zK,QAAS,EACT4iB,YAAa,EACb7B,aAAc,GACdz8F,UAAW,GACXu+F,YAAa,IAEfx/U,SAAU,CACR8+U,kBAAmB,EACnBC,kBAAmBz5O,EAAOipB,MAC1BgvN,cAAe,EACfG,aAAc,GAEhBv9B,sBAAuB,CACrBw9B,cAAe,MACfJ,cAAe,GAEjBh9B,0BAA2B,CACzBy9B,KAAM,EACN3D,SAAU,UAEZj6B,kBAAmB,CACjBq/B,YAAa,EACbC,YAAap6O,EAAOipB,MACpBoxN,aAAc,EACdhjB,QAAS,EACT4iB,YAAa,EACbhmV,MAAO,GACPE,OAAQ,GACRmmV,UAAW,IAEbv/B,uBAAwB,CACtB9mT,MAAO,GACPE,OAAQ,GACRmmV,UAAW,GACXtB,UAAW,WAEb19B,qBAAsB,CACpBo9B,KAAM,EACN34O,MAAOC,EAAO6oB,KACd1xE,SAAU,EACVihS,aAAc,IAEhB58B,oBAAqB,CACnB7/D,UAAW,EACXy8F,aAAc,GAEhBl9B,aAAc,CACZx8E,WAAY1+H,EAAO23O,KACnB53O,MAAOC,EAAO6oB,MAEhBuyL,gBAAiB,CACfjkQ,SAAU,IAEZgkQ,qBAAsB,CACpBx/D,UAAW,IAEb8/D,aAAc,CACZ48B,cAAe,MACfE,eAAgB,eAChBQ,UAAW,UACX9kV,MAAO,OACP8rG,MAAOC,EAAO6oB,KACd8yH,UAAW,GAEb+/D,aAAc,CACZ6+B,SAAU,EACVC,WAAY,EACZF,UAAW,GACXrmV,MAAO,GACP8rG,MAAOC,EAAO6oB,KACd1xE,SAAU,GAEZokQ,sBAAuB,CACrBg/B,SAAU,EACVC,WAAY,EACZz6O,MAAOC,EAAO6oB,KACd1xE,SAAU,GAEZ2kQ,gBAAiB,CACfw+B,UAAW,GACXrmV,MAAO,IAET0nT,iBAAkB,GAClBC,cAAe,CACb2+B,SAAU,EACVC,WAAY,EACZF,UAAW,IACXrmV,MAAO,IACPskV,eAAgB,WAChBQ,UAAW,WACXj4G,UAAW,QACXpC,WAAY1+H,EAAO23O,MAErB97B,aAAc,CACZlgE,UAAW,EACXy8F,aAAc,EACd/gB,QAAS,EACT+iB,YAAap6O,EAAOipB,MACpBwxN,YAAa,QACbN,YAAa,EACbE,aAAc,EACdt6O,MAAOC,EAAOyjD,MAEhBi3L,gBAAiB,CACfzmV,MAAO,OACP0nP,UAAW,IAIbg/F,qBAAsB,CACpBtjB,QAAS,EACTt3N,MAAOC,EAAOC,MACd+M,gBAAiBhN,EAAO03O,UACxBvgS,SAAU,GACVihS,aAAc,IAEhBwC,4BAA6B,CAC3BxC,aAAc,GAEhByC,gBAAiB,CACfzC,aAAc,IAEhB0C,4BAA6B,CAC3BZ,WAAY,IAEda,uBAAwB,CACtB9mV,MAAO,OACPokV,cAAe,MACfE,eAAgB,iBAElByC,2BAA4B,CAC1B/mV,MAAO,MACPykV,KAAM,WAERuC,oBAAqB,CACnB5C,cAAe,MACfE,eAAgB,gBAChBQ,UAAW,UACX9kV,MAAO,OACPulV,kBAAmB,EACnB0B,kBAAmB,SACnBzB,kBAAmBz5O,EAAOipB,MAC1BgvN,cAAe,EACfG,aAAc,GAGhB+C,4BAA6B,CAC3B3B,kBAAmB,GAErB4B,yBAA0B,GAE1BC,wBAAyB,CACvBt7O,MAAOC,EAAOyjD,KACdtsG,SAAU,IAEZmkS,yBAA0B,CACxBxB,cAAe,YACfp7G,WAAY1+H,EAAO23O,KACnB53O,MAAOC,EAAO8oB,MACd3xE,SAAU,GAEZokS,yBAA0B,CACxBpkS,SAAU,GACV4oD,MAAOC,EAAOyjD,MAEhB+3L,2BAA4B,CAC1BrkS,SAAU,EACV4oD,MAAOC,EAAO6oB,MAEhB4yN,UAAW,CACTC,eAAgB,GAChB56G,UAAW,SAEb66G,gBAAiB,CACfhgG,UAAW,EACXy8F,aAAc,GACdt3G,UAAW,SAEb86G,cAAe,CACbl9G,WAAY1+H,EAAO23O,MAErBkE,gBAAiB,CACf1kS,SAAU,GACV4oD,MAAOC,EAAOyjD,MAEhBq4L,OAAQ,CACNngG,UAAW,GACX08F,cAAe,MACfE,eAAgB,eAChBQ,UAAW,UACX9kV,MAAO,QAET8nV,WAAY,CACVxB,SAAU,EACVC,WAAY,EACZ15G,UAAW,UAEb4mF,aAAc,CACZ2P,QAAS,GACT+iB,YAAap6O,EAAO4oB,IACpB6xN,YAAa,QACbN,YAAa,EACbE,aAAc,GAEhB1yB,mBAAoB,CAClBhsE,UAAW,IAEbisE,kBAAmB,CACjB3zT,MAAO,GACPE,OAAQ,GACRwnP,WAAY,EACZy8F,aAAc,GACd4D,iBAAkB,QAEpBl0B,iBAAkB,CAChB/nN,MAAOC,EAAO4oB,IACd30H,MAAO,SAET8C,MAAO,CACLujV,UAAW,IACXx5G,UAAW,SAEbm7G,kBAAmB,CACjBn7G,UAAW,SAEbo7G,aAAc,CACZvgG,UAAW,GACX7a,UAAW,SAEbq7G,iBAAkB,CAChBz9G,WAAY1+H,EAAO23O,MAErByE,mBAAoB,CAClBjlS,SAAU,GACV4oD,MAAOC,EAAOyjD,MAEhB44L,kBAAmB,CACjB1gG,UAAW,GACX7a,UAAW,SAEbw7G,wBAAyB,CACvBnlS,SAAU,GACV4oD,MAAOC,EAAO2xD,OAEhBkwK,WAAY,CACV7xS,SAAU,WACVmnB,SAAU,GACVolS,OAAQ,GACRn2S,KAAM,EACND,MAAO,EACP26L,UAAW,SACX/gI,MAAOC,EAAO6oB,MAEhB2zN,UAAW,CACTvoV,MAAO,OACPkmK,QAAS,OACTk+K,cAAe,MACfE,eAAgB,gBAChBD,WAAY,WACZ38F,UAAW,GACXxnP,OAAQ,IAEVsoV,cAAe,CACbxoV,MAAO,OACPyoV,eAAgB,EAChBC,eAAgB38O,EAAOipB,MACvB2zN,eAAgB,QAChB97G,UAAW,UAEbw+F,eAAgB,CACdx+F,UAAW,SACXs3G,aAAc,GAEhByE,eAAgB,CACdr+M,SAAU,OACVvqI,MAAO,OACP+nV,iBAAkB,QAEpB78U,gBAAiB,CACfw8O,UAAW,GACXu+F,WAAY,KA1bc,c,wFC3Ff,CACb4C,SAAU,CACR7oV,MAAO,QAETykV,KAAM,CACJv+K,QAAS,QAEX4iL,QAAS,CACP1E,cAAe,OAEjB2E,WAAY,CACV3E,cAAe,UAEjB4E,WAAY,CACV3E,WAAY,UAEd4E,SAAU,CACRvhG,UAAW,GAEbwhG,SAAU,CACRxhG,UAAW,GAEbyhG,UAAW,CACTzhG,UAAW,IAEb0hG,UAAW,CACT1hG,UAAW,IAEb2hG,UAAW,CACT3hG,UAAW,IAEb4hG,UAAW,CACT5hG,UAAW,IAEb6hG,UAAW,CACT7hG,UAAW,IAEb8hG,SAAU,CACRrF,aAAc,GAEhBsF,SAAU,CACRtF,aAAc,GAEhBuF,UAAW,CACTvF,aAAc,IAEhBwF,UAAW,CACTxF,aAAc,IAEhByF,UAAW,CACTzF,aAAc,IAEhB0F,UAAW,CACT1F,aAAc,IAEhB2F,UAAW,CACT3F,aAAc,IAEhB4F,UAAW,CACT9D,WAAY,IAEd+D,UAAW,CACT/D,WAAY,IAEdgE,UAAW,CACTjE,YAAa,IAEfkE,UAAW,CACTlE,YAAa,M,wFCpEF,CACbmE,gBAAiB,CACfpxO,gBAAiB,UACjBqqN,QAAS,EACT17E,UAAW,EACXy8F,aAAc,GAEhBiG,gBAAiB,CACfzF,YAAa,IAEf0F,YAAa,CACX/D,SAAU,EACVJ,YAAa,EACbC,YAAa,UACbK,YAAa,QACbJ,aAAc,EACdhjB,QAAS,GAEXknB,kBAAmB,CACjBpnS,SAAU,IAEZqnS,gBAAiB,CACfrnS,SAAU,M,8ECtBd,W,OACA,S,IACA,MAEA,S,mDAEA,IAAMsnS,EAAsB,SAAC7+O,GAAU,IAC9BlxB,EAA4CkxB,EAA5ClxB,OAAQnlE,EAAoCq2F,EAApCr2F,MAAOkD,EAA6BmzF,EAA7BnzF,eAAgBgwN,EAAa78H,EAAb68H,UAEhCH,EAAO,IAAIxlN,KACXymQ,GAAe,IAAApN,YAAA,wBAEfuuE,EAAWjiH,EACf,gCAAM9zN,MAAO8D,EAAe8/F,mBAAqB,CAAC79B,EAAO+pQ,WAAY/pQ,EAAOiqQ,cAAgBjqQ,EAAO+pQ,YACjG,iCAAO9vU,MAAO+lE,EAAOoqQ,gBAAiBzjT,OAAQ,CAAE2lR,IAAKv+E,EAAWylE,OAAQ,MAAOz7G,QAAS,CAAE,gBAAiB,gBAE3G,KAEEk4J,EACJ,gCAAMh2U,MAAO+lE,EAAO8pQ,YACjB9qV,SAASC,SAAS4b,OAASA,EAC1B,gCAAMZ,MAAO+lE,EAAOuqQ,YAClB,gCAAMtwU,MAAO+lE,EAAOwqQ,gBAAiB37D,EAAalxQ,SAAS,+BAC3D,gCAAM1D,MAAO+lE,EAAO4qQ,iBAAkB5rV,SAASC,SAAS4b,OAASA,IAEjE,KACJ,gCAAMZ,MAAO+lE,EAAOuqQ,YAClB,gCAAMtwU,MAAO+lE,EAAOwqQ,gBAAiB37D,EAAalxQ,SAAS,wBAC3D,gCAAM1D,MAAO+lE,EAAO4qQ,iBAAkBh9G,EAAKsiH,qBAAqB3rV,QAAQ,OAAQ,OAElF,gCAAM0V,MAAO+lE,EAAOuqQ,YAClB,gCAAMtwU,MAAO+lE,EAAOwqQ,gBAAiB37D,EAAalxQ,SAAS,wBAC3D,gCAAM1D,MAAO+lE,EAAO4qQ,iBAAkBh9G,EAAKuiH,wBAKjD,OAAIpyU,EAAe8/F,mBAEf,gCAAM5jG,MAAO+lE,EAAOyqQ,UAAWrX,OAAO,GACpC,gCAAMn5T,MAAO+lE,EAAO0qQ,mBAClB,gCAAMzwU,MAAO+lE,EAAOwqQ,gBAApB,wBAEDwF,EACD,gCAAM/1U,MAAO+lE,EAAO2qQ,kBAAmBsF,IAM3C,gCAAMh2U,MAAO+lE,EAAOypQ,QAClB,gCAAMxvU,MAAO+lE,EAAO0qQ,oBACnBsF,EACD,gCAAM/1U,MAAO+lE,EAAO2qQ,kBAAmBsF,KAK7CF,EAAoBjoM,UAAY,CAC9B/pI,eAAgB,UAAUxgB,OAC1Bsd,MAAO,UAAU2jG,OACjBx+B,OAAQ,UAAUziF,OAAOshH,WACzBkvH,UAAW,UAAU3lM,Q,UAGR2nT,G,8ECjEf,W,OACA,S,IACA,MAEA,UACA,S,mDAGA,IAAMK,EAA8B,SAACl/O,GAAU,IACtClxB,EAAwCkxB,EAAxClxB,OAAQjiE,EAAgCmzF,EAAhCnzF,eAAgBotS,EAAgBj6M,EAAhBi6M,aAEzBklC,EAAc7iV,MAAMC,QAAQsQ,EAAeuyU,YAAcvyU,EAAeuyU,UAAU5+U,MAAK,SAAA6+U,GAC3F,OAAOA,EAAIC,cAAgB,EAAAC,gBAAgBC,YAGvC9gM,EAAOygM,GAAeA,EAAYzgM,KAAOygM,EAAYzgM,KAAO7xI,EAAe6xI,MAAQ,GACnFu2F,EAAUkqG,GAAeA,EAAY1gM,SAAW0gM,EAAY1gM,SAAW5xI,EAAe4xI,UAAY5xI,EAAe82J,UAAY,GAC7H/sI,EAASuoT,GAAeA,EAAYvoT,OAASuoT,EAAYvoT,OAAS/pB,EAAe+pB,QAAU,GAC3F6oT,EAAWN,GAAeA,EAAYM,SAAWN,EAAYM,SAAW5yU,EAAe4yU,UAAY,GACrG/lC,EAAiB,GACrB,CAACh7J,EAAM+gM,EAAU7oT,GAAQ9jC,SAAQ,SAAA6mT,GAC3BA,IACED,IACFA,GAAkB,MAEpBA,GAAkBC,MAGtB,IAAM+lC,EAAe7yU,EAAe6yU,cAAgB,GAC9CC,EAASD,EAAa7wV,SAAS,KAAO6wV,EAAajtV,MAAM,KAAO,GAChEkrR,GAAe,IAAApN,YAAA,wBAErB,OACE,gCAAMxnQ,MAAOkxS,EAAe,CAACnrO,EAAO20G,QAAS30G,EAAO6qQ,cAAgB,CAAC7qQ,EAAOsrO,WAAYtrO,EAAO6qQ,eAC7F,gCAAM5wU,MAAO+lE,EAAOurO,WAAY18B,EAAalxQ,SAAS,2CACtD,gCAAM1D,MAAO+lE,EAAOwrO,UAAWztS,EAAe+vO,aAC7C3H,EAAU,gCAAMlsO,MAAO+lE,EAAOwrO,UAAWrlE,GAAkB,KAC3DykE,EAAiB,gCAAM3wS,MAAO+lE,EAAOwrO,UAAWZ,GAAyB,KACzE7sS,EAAeG,cAAgB,KAC9B,wCACG2yU,EAASA,EAAOnjV,KAAI,SAACy5B,EAAO2pT,GAC3B,OACE,gCAAM1zV,IAAK0zV,EAAY72U,MAAO62U,EAAa9wQ,EAAOwrO,SAAW,CAACxrO,EAAOwrO,SAAUxrO,EAAOyrO,gBACnFtkR,MAGF,gCAAMltB,MAAO,CAAC+lE,EAAOwrO,SAAUxrO,EAAOyrO,gBAAiBmlC,GAC5D,gCAAM32U,MAAO+lE,EAAOwrO,UAAWztS,EAAeqpB,OAAS,OAOjEgpT,EAA4BtoM,UAAY,CACtC/pI,eAAgB,UAAUxgB,OAAOshH,WACjCssM,aAAc,UAAUnjK,KACxBhoE,OAAQ,UAAUziF,OAAOshH,Y,UAGZuxO,G,8EC5DgBK,EAAlBA,gBAAkB,CAC7BM,QAAS,UACTL,SAAU,a,6FCFZ,O,OACA,S,IACA,MAEA,QACA,Q,IACA,QACA,S,IACA,SACA,QACA,QACA,SACA,QAIA,Q,IACA,SACA,SACA,S,mDAKA,IAAMM,EAAoB,SAAC9/O,GAAU,IAC9BlxB,EACoBkxB,EADpBlxB,OAAQthE,EACYwyF,EADZxyF,OAAQvW,EACI+oG,EADJ/oG,UAAW4V,EACPmzF,EADOnzF,eAAgBD,EACvBozF,EADuBpzF,OAAQlC,EAC/Bs1F,EAD+Bt1F,aAAcrF,EAC7C26F,EAD6C36F,YAAahH,EAC1D2hG,EAD0D3hG,cACjF8+N,EAAuBn9H,EAAvBm9H,oBACI32N,EAAqBqG,EAAezQ,SAEpCuhR,GAAe,IAAApN,YAAA,wBAErB,gBACEt5Q,GAAY,IAAA62F,iBAAgB72F,GAAW,GAAM,IAG/C,IAAM8oV,EAAe,SAACzuU,GACpB,IAAMC,EAAiBD,EAAaf,SAASvf,cAC7C,GAAI6b,EAAeE,SAAWF,EAAeG,cAAe,CAC1D,GAAe,UAAXJ,GAAsB+wQ,EAAalxQ,SAAS,iCAAkC8E,GAChF,OAAOosQ,EAAalxQ,SAAS,iCAAkC8E,GAC1D,GAAe,UAAX3E,GAAsB+wQ,EAAalxQ,SAAS,mCAAoC8E,GACzF,OAAOosQ,EAAalxQ,SAAS,mCAAoC8E,GAGrE,OAAOD,EAAaG,wBAA0BH,EAAaf,UAGvDuwH,GAAY,IAAA2vC,cAAa5jK,GAAgB,GAE/C,OAAOW,EAAOhR,KAAI,SAAC4R,EAAO1M,GAExB,IAAMkO,GAAS,IAAAC,kBAAiBrJ,EAAmB4wK,0BAA4BhpK,EAAML,KAAOK,EAAML,KAAOjgB,SAASC,SAASoC,gBACrH20G,GAAU,IAAAh0G,yBAAwB0V,EAAmB4wK,0BAA4BhpK,EAAML,KAAOK,EAAML,KAAOjgB,SAASC,SAASoC,gBAI7HuuR,GAFkB,IAAAtjR,eAAcsG,GAAY,GAEZnL,cAChCypV,GAAa,IAAAtpV,cAAagoR,GAE5BuhE,EAAoB,GAClB7jI,EAAiBnlN,EAAUyE,QAAO,SAACZ,GAAD,OAAcA,EAASC,aAAgBD,EAASoC,eAAiBwE,KAElGmtF,EAAgDxpF,EAAhDwpF,WAAYhwE,EAAoCxZ,EAApCwZ,eAAgBE,EAAoB1Z,EAApB0Z,iBAC7BmhU,GAAkB,IAAAvxO,uBAAsB9f,EAAYhwE,GAEpDshU,GAA2B,IAAA5iV,+BAA8BiJ,EAAoB41M,GAEnF,OACE,gCAAMrzM,MAAO+lE,EAAO/gE,KAAM7hB,IAAKwV,GAC7B,gCAAMqH,MAAO+lE,EAAOmrQ,WACjBt8D,EAAalxQ,SAAS,6BADzB,KACwD,IAAAc,aAAY7L,EAAYzK,EAAWuW,EAAQmwQ,EAAalxQ,SAAUG,EAAQC,IAElI,gCAAM9D,MAAO+lE,EAAOqrQ,UACjB+F,EAAkBrxP,EAAWryF,KAAI,SAAAsyF,GAChC,IAAMy2N,EAAoBxmS,EAAiBve,MAAK,SAAAupL,GAC9C,OAAOA,EAAaj6E,eAAiBhhB,EAAWpyF,IAAMqtL,EAAaroL,aAAeA,IAC7E,IAAA+sG,wBAAuBs7E,EAAcjlF,MAE5C,OAAKygN,GAAsBA,EAAkB//S,qBAGtCpc,OAAOmc,KAAKggT,EAAkB//S,sBAAsBhJ,KAAI,SAAAtQ,GAC7D,IAAMkzB,EAAcmmS,EAAkB//S,qBAAqBtZ,GAAKkzB,YAChE,GAAIA,GAAeA,EAAY8vE,WAAa,EAAAkhB,mBAAmBuG,SAAWv3F,EAAYo4H,qBACpF,OAAO,mCAA6B1oE,OAAQA,EACR5iF,IAAKA,EACL2gB,eAAgBA,EAChBswN,oBAAqBA,EACrB/9M,YAAaA,IAEnD,IAAIghU,EAAmBnpV,EAAUyE,QAAO,SAAAZ,GACtC,OAAIA,EAASslB,iBAGNtlB,EAASC,aAAgBD,EAASoC,eAAiBwE,IACpD0d,GAAetkB,EAASsK,kBACvBga,EAAY1iB,KAAO5B,EAASsK,mBAC5BlZ,IAAQ4O,EAASokB,kBAClB+gU,EAAkBpxV,SAASiM,EAAS4B,QAE5C,GAAI0jV,EAAiBj3V,OAAQ,CAC3B82V,0BAAwBA,IAAxB,aAA8CG,EAAiB5jV,KAAI,SAAA6D,GAAA,OAASA,EAAM3D,QAClF,IAAM2jV,EAAiBD,EAAiB1kV,QAAO,SAAAZ,GAAA,MAAgC,UAApBA,EAASE,UAC9DsW,GAAe,IAAA69E,gCAA+B/vE,GAC9CkhU,EACJ,gCAAMp0V,IAAKA,EAAK8uT,MAAM,GACpB,gCAAMjyS,MAAO+lE,EAAOsrQ,cACjB9oU,GAAeyuU,EAAazuU,KAAmD,IAAA+1J,oBAAmBjoJ,IAEpGghU,EAAiB5jV,KAAI,SAAC1B,EAAU4iP,GAC/B,MAAwB,UAApB5iP,EAASE,OACJ,KAEF,mCAA2B9O,IAAKwxP,EACL9wO,OAAQA,EACRC,eAAgBA,EAChB/R,SAAUA,EACV7D,UAAWA,EACXoH,cAAeA,EACf8+N,oBAAqBA,EACrBruJ,OAAQA,QAIhD,OAAOuxQ,EAAel3V,OACpB,oCAAU+C,IAAKA,EAAM,SAClBo0V,EACD,gCAAMtlC,MAAM,GACV,gCAAMjyS,MAAO+lE,EAAOsrQ,cACjBz8D,EAAalxQ,SAAS,kCAExB4zU,EAAe7jV,KAAI,SAAC1B,EAAU4iP,GAC7B,OAAO,mCAA2BxxP,IAAKwxP,EACL9wO,OAAQA,EACRC,eAAgBA,EAChB/R,SAAUA,EACV7D,UAAWA,EACXoH,cAAeA,EACf8+N,oBAAqBA,EACrBruJ,OAAQA,SAI9CwxQ,MAhEC,QA2EN,KACJ1wU,EAAOc,eAAiBwvU,EACvBtwU,EAAOc,aAAalU,KAAI,SAAAwU,GACtB,OAAOA,EAAWG,SAAS3U,KAAI,SAAC4U,EAASmvU,GACvC,IAAIH,EAAmBhkI,EAAe1gN,QAAO,SAAAZ,GAC3C,OAAIA,EAASslB,kBAGLhP,EAAQlB,KAAKlV,SAAWF,EAASE,QAAWF,EAAS4tF,sBAAwBt3E,EAAQlB,KAAKlV,SAAWF,EAAS4tF,qBAAqB1tF,UACrIilV,EAAkBpxV,SAASiM,EAAS4B,QAE5C,OAAK0jV,EAAiBj3V,QAGtB82V,0BAAwBA,IAAxB,aAA8CG,EAAiB5jV,KAAI,SAAA6D,GAAA,OAASA,EAAM3D,QAEhF,gCAAMxQ,IAAKq0V,EAAcvlC,MAAM,GAC7B,gCAAMjyS,MAAO+lE,EAAOsrQ,cAAe2F,EAAa3uU,EAAQlB,OACvDkwU,EAAiB5jV,KAAI,SAAC1B,EAAU4iP,GAC/B,OAAO,mCAA2BxxP,IAAKwxP,EACL9wO,OAAQA,EACRC,eAAgBA,EAChB/R,SAAUA,EACV7D,UAAWA,EACXoH,cAAeA,EACf8+N,oBAAqBA,EACrBruJ,OAAQA,SAdvC,WAoBX,KACHstI,EAAe5/M,KAAI,SAAC1B,GACnB,OAAKmlV,EAAkBpxV,SAASiM,EAAS4B,KAAQ5B,EAASslB,eAoBnD,MAnBL6/T,EAAkBx2V,KAAKqR,EAAS4B,IAE9B,gCAAMxQ,IAAK4O,EAAS4B,IAClB,gCAAMqM,MAAO+lE,EAAOsrQ,cACjBt/U,EAAS0U,4BACNmuQ,EAAalxQ,SAAS,2BAA8B3R,EAAS0U,6BAC7D1U,EAASC,YAAY1C,UAAUkrN,iBAAmBzoN,EAAS6X,iBACzD7X,EAASC,aAAeD,EAASC,YAAY3F,UAAY2qV,EAAajlV,EAASC,YAAY3F,aAAe,OAElH,mCAA2BwX,OAAQA,EACRC,eAAgBA,EAChB/R,SAAUA,EACV7D,UAAWA,EACXoH,cAAeA,EACf8+N,oBAAqBA,EACrBruJ,OAAQA,UAO5CgyD,EACC,wCACE,gCAAM/3H,MAAO+lE,EAAO+sQ,WAClB,gCAAM9yU,MAAO+lE,EAAOktQ,eAAgBr+D,EAAalxQ,SAAS,qCAA1D,MACA,gCAAM1D,MAAO+lE,EAAOmtQ,kBACjB,IAAA7zU,sBAAqB5B,EAAoBw5U,KAG7CG,EAAyBh3V,OAASg3V,EAAyB3jV,KAAI,SAAAgkV,GAC9D,IAAMC,GAAe,IAAArlV,eAAcsG,GAAY,EAAO8+U,EAAWvpV,WACjE,OACE,gCAAM8R,MAAO+lE,EAAOitQ,gBAAiB7vV,IAAKs0V,EAAWx3U,SAAWtH,GAC9D,gCAAMqH,MAAO+lE,EAAOktQ,eAAgBr+D,EAAalxQ,SAAS,qCAA1D,MACA,gCAAM1D,MAAO+lE,EAAOmtQ,kBACjB,IAAAj0U,iBAAgBw4U,EAAWx3U,SAAUxC,IAAsB,IAAA9P,cAAa+pV,EAAalqV,eAAe,QAIxG,KACL,mCAAsBqW,OAAQA,EACR3V,UAAWA,EACXyK,WAAYA,EACZmL,eAAgBA,EAChBnC,aAAcA,EACdokE,OAAQA,KAE9B,UAMZgxQ,EAAkBlpM,UAAY,CAC5BppI,OAAQ,UAAUzC,MAAM4iG,WACxB12G,UAAW,UAAU8T,MAAM4iG,WAC3B9gG,eAAgB,UAAUxgB,OAAOshH,WACjC/gG,OAAQ,UAAUsqB,OAAOy2E,WACzBjjG,aAAc,UAAUK,MACxB+jE,OAAQ,UAAUziF,OAAOshH,Y,UAGZmyO,G,8EC5Pf,W,OACA,S,IACA,MAEA,SACA,Q,IACA,QACA,Q,mDAGA,IAAMY,EAAoC,SAAC1gP,GAAU,IAC5ClxB,EAAuDkxB,EAAvDlxB,OAAQh0E,EAA+CklG,EAA/CllG,SAAU+R,EAAqCmzF,EAArCnzF,eAAgBD,EAAqBozF,EAArBpzF,OAAQ3V,EAAa+oG,EAAb/oG,UAG3C8jT,EAAiB9jT,EAAYA,EAAUyE,QAAO,SAAA2E,GAClD,OAAOA,EAAM+f,gBAAmB/f,EAAM+f,iBAAmBtlB,EAAS4B,MAC/D,GAECihR,GAAe,IAAApN,YAAA,wBAErB,OAAI1jQ,EAAe8/F,qBAAuB,EAAD,YAGhC,KAIP,gCAAM5jG,MAAO+lE,EAAOmsQ,gBAAiBjgC,MAAM,GACzC,gCAAMjyS,MAAO,CAAC+lE,EAAOisQ,qBAAsBjsQ,EAAOksQ,8BAC/Cr9D,EAAalxQ,SAAS,8BAEzB,gCAAM1D,MAAO+lE,EAAOosQ,6BACjBngC,EAAev+S,KAAI,SAAAmkV,GAClB,OAAO,mCAA2B/zU,OAAQA,EACR1gB,IAAKy0V,EAAejkV,GACpBmQ,eAAgBA,EAChB/R,SAAU6lV,EACV1pV,UAAWA,EACX63E,OAAQA,UAOpD4xQ,EAAkC9pM,UAAY,CAC5C97I,SAAU,UAAUwzC,MAAV,qBACVzhC,eAAgB,UAAUxgB,OAAOshH,WACjC/gG,OAAQ,UAAUsqB,OAAOy2E,WACzB7+B,OAAQ,UAAUziF,OAAOshH,Y,UAGZ+yO,G,wFCpDA,CACb,uCACA,qCACA,qCACA,kCACA,uCACA,oCACA,wCACA,uCACA,kCACA,sCACA,qCACA,wCACA,qCACA,sCACA,yCACA,6CACA,oCACA,uCACA,mCACA,wCACA,oCACA,wCACA,qCACA,qCACA,qCACA,mCACA,kCACA,oCACA,kCACA,oCACA,qCACA,0CACA,kCACA,iCACA,iCACA,oCACA,2CACA,yCACA,sCACA,6B,8ECxCF,W,WACA,MACA,S,IAEA,SACA,SACA,S,mDAEA,IAAME,EAAuB,SAAC5gP,GAAU,IAE/BlxB,EAAuEkxB,EAAvElxB,OAAQ73E,EAA+D+oG,EAA/D/oG,UAAW4V,EAAoDmzF,EAApDnzF,eAAgBnC,EAAoCs1F,EAApCt1F,aAAckC,EAAsBozF,EAAtBpzF,OAAQlL,EAAcs+F,EAAdt+F,WAE1Di8Q,GAAe,IAAApN,YAAA,wBAEfswE,EAAc7jV,OAAOC,UAAUyE,GAE/B28Q,EAAmBwiE,EACrB5pV,EAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAMnD,eAAiBwE,GAAcrB,EAAMrF,OAAOnM,SAAS,iBACrFoI,EAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAMrF,OAAOnM,SAAS,iBAE9CiM,EAAWujR,EAAiB,GAElC,IAAKvjR,EACH,OAAO,KAGT,IAAMkjR,GAA0B,IAAAF,4BAA2BhjR,EAAU4P,GACrE,IAAKszQ,IAA4BA,EAAwB70R,OACvD,OAAO,KAGT,IAAMo1R,EAA2BF,EAAiBroR,QAAQ,SAACsjU,EAAaj5T,GAAd,OAAwBi5T,EAAcj5T,EAAMxC,WAAW,GAEjH,OACE,gCAAMkL,MAAO+lE,EAAOgsQ,gBAAiB9/B,MAAM,GACzC,gCAAMjyS,MAAO83U,EAAc,CAAC/xQ,EAAOisQ,qBAAsBjsQ,EAAOosQ,6BAA+BpsQ,EAAOisQ,sBACnGp9D,EAAalxQ,SAAS,kBAEzB,gCAAM1D,MAAO+lE,EAAOqsQ,wBAClB,gCAAMpyU,MAAO+lE,EAAOssQ,6BACpB,gCAAMryU,MAAO+lE,EAAOssQ,4BAClB,gCAAMryU,MAAO,CAAC+lE,EAAOusQ,oBAAqBvsQ,EAAOysQ,6BAA8BvgC,MAAM,GACnF,gCAAMjyS,MAAO+lE,EAAO0sQ,0BAClB,gCAAMzyU,MAAO+lE,EAAO4sQ,0BAA2B/9D,EAAalxQ,SAAS,wBAEvE,gCAAM1D,MAAO+lE,EAAO0sQ,0BAClB,gCAAMzyU,MAAO+lE,EAAO4sQ,0BAA2B/9D,EAAalxQ,SAAS,mCAGxDuxQ,EAAwBxhR,KAAI,SAAC8hR,EAAmBwiE,GAC/D,OAAO,mCAA8B50V,IAAKoyR,EAAkB5hR,GACvBmQ,eAAgBA,EAChB/R,SAAUA,EACVujR,iBAAkBA,EAClBE,yBAA0BA,EAC1B3xQ,OAAQA,EACRlC,aAAcA,EACdhJ,WAAYA,EACZq/U,SAAUD,IAA2B9iE,EAAwB70R,OAAS,EACtEm1R,kBAAmBA,EACnBxvM,OAAQA,WAQzD8xQ,EAAqBhqM,UAAY,CAC/Bl1I,WAAY,UAAU4rG,OACtBr2G,UAAW,UAAU8T,MAAM4iG,WAC3BjjG,aAAc,UAAUK,MACxB8B,eAAgB,UAAUxgB,OAAOshH,WACjC/gG,OAAQ,UAAUsqB,OAAOy2E,WACzB7+B,OAAQ,UAAUziF,OAAOshH,Y,UAGZizO,G,8EC7Ef,W,WACA,MACA,SAEA,QACA,QACA,SACA,SACA,SACA,Q,mDAEA,IAAMI,EAA+B,SAAChhP,GAAU,IAEvClxB,EACuBkxB,EADvBlxB,OAAQh0E,EACeklG,EADfllG,SAAUujR,EACKr+K,EADLq+K,iBAAkBxxQ,EACbmzF,EADanzF,eAAgBD,EAC7BozF,EAD6BpzF,OAAQ0xQ,EACrCt+K,EADqCs+K,kBAAmB5zQ,EACxDs1F,EADwDt1F,aAAchJ,EACtEs+F,EADsEt+F,WAAYq/U,EAClF/gP,EADkF+gP,SAC9GxiE,EAA4Bv+K,EAA5Bu+K,yBACI/3Q,EAAqBqG,EAAezQ,SACpCuhR,GAAe,IAAApN,YAAA,wBALyB,GAOI,IAAA6N,0BAChDtjR,EACAujR,EACAC,EACAC,EACA78Q,EACAgJ,GANKi0Q,EAPuC,EAOvCA,gBAAiB5mR,EAPsB,EAOtBA,QAAS2mR,EAPa,EAObA,cASjC,OACE,gCAAM31Q,MAAOg4U,EAAW,CAACjyQ,EAAOusQ,oBAAqBvsQ,EAAOysQ,6BAA+BzsQ,EAAOusQ,oBAAqBrgC,MAAM,GAC3H,gCAAMjyS,MAAO+lE,EAAO0sQ,0BAClB,gCAAMzyU,MAAO+lE,EAAO2sQ,yBACjB98D,GAEH,gCAAM51Q,MAAO+lE,EAAO8sQ,4BACjBj+D,EAAalxQ,SAAS,2BADzB,KACsD,IAAAmxQ,iBAAgB7lR,EAAS8U,EAAgB8wQ,EAAc/wQ,KAG/G,gCAAM7D,MAAO+lE,EAAO0sQ,0BAClB,gCAAMzyU,MAAO+lE,EAAO6sQ,2BAA2B,IAAAvzU,sBAAqB5B,EAAoBk4Q,EAAe3mR,OAM/GipV,EAA6BpqM,UAAY,CACvCl1I,WAAY,UAAU4rG,OAAOK,WAC7B7yG,SAAU,UAAUwzC,MAAV,qBACV+vO,iBAAkB,UAAUzwK,QAAQ,UAAUt/D,MAAV,sBACpCgwO,kBAAmB,UAAUhwO,MAAV,8BACnBzhC,eAAgB,UAAUxgB,OAAOshH,WACjC/gG,OAAQ,UAAUsqB,OAAOy2E,WACzBjjG,aAAc,UAAUK,MAAM4iG,WAC9BozO,SAAU,UAAUjqM,KAAKnpC,WACzB7+B,OAAQ,UAAUziF,OAAOshH,WACzB4wK,yBAA0B,UAAUjxK,OAAOK,Y,UAI9BqzO,G,mFC1DoBr+J,EAAtBA,oBAAsB,SAACz9K,GAGlC,OAFAA,GAAaA,GAAa,IAAIlU,eAG5B,IAAK,WACH,MAAO,+CACT,IAAK,OACH,MAAO,2CACT,IAAK,eACL,IAAK,OACH,MAAO,kDACT,IAAK,UACH,MAAO,8CACT,IAAK,UACL,IAAK,SACH,MAAO,6CACT,IAAK,QACL,IAAK,OACH,MAAO,2CACT,IAAK,sBACL,IAAK,qBACH,MAAO,wDACT,IAAK,uBACL,IAAK,sBACH,MAAO,yDACT,IAAK,SACH,MAAO,6CACT,IAAK,WACH,MAAO,+CACT,IAAK,aACH,MAAO,iDACT,IAAK,SACH,MAAO,6CACT,IAAK,eACH,MAAO,6CACT,IAAK,cACH,MAAO,iDACT,IAAK,eACH,MAAO,kDACT,IAAK,WACH,MAAO,+CACT,IAAK,iBACH,MAAO,oDACT,IAAK,iBACH,MAAO,oDACT,IAAK,WACH,MAAO,+CACT,IAAK,8BACH,MAAO,+DACT,IAAK,WACH,MAAO,8CACT,IAAK,gBACH,MAAO,mDACT,IAAK,0BACH,MAAO,2DACT,IAAK,OACH,MAAO,2CACT,IAAK,eACH,MAAO,kDACT,IAAK,YACH,MAAO,+CACT,IAAK,aACH,MAAO,gDACT,IAAK,kBACH,MAAO,qDACT,QACE,MAAO,iD,4KClEb,Q,IACA,MACA,S,mDAEA,IAIMqtQ,EAAgB,UAAMpyQ,OAAO,CAGjC46L,QAPc,CACd,eAAgB,sBASlBw3E,EAAc4iF,aAAapqP,SAASqqP,KAAI,SAACrqP,GAKvC,OAJsB,UAAMhgG,WAArBmH,YACUq4K,mBACf,UAAM19J,UAAS,IAAAy9J,uBAAqB,IAE/Bv/E,KACN,SAAClqG,GAKF,OAHIA,GAASA,EAAMw0V,QAAqC,kBAA3Bx0V,EAAMw0V,SAAS12S,SAC1C,UAAM9xB,UAAS,IAAAy9J,uBAAqB,IAE/BtrL,QAAQ68L,OAAOh7L,M,UAGT0xQ,EAGR,IAcM,EASA,EAvBA+iF,EAAmBA,EAAnBA,iBAAmB,SAAAvqP,GAE9B,OAAIA,GAAYA,EAASluG,MAAQkuG,EAASluG,KAAKy+H,OACtCh+H,OAAOmc,KAAKsxF,EAASluG,KAAKy+H,QAC9B5qH,KAAI,SAAAysE,GAAA,OAAQA,EAAR,MAAe4tB,EAASluG,KAAKy+H,OAAOn+C,MACxClhE,KAAK,UAEN8uF,GAAYA,EAASlqG,MAChBkqG,EAASlqG,MAGX,MAGa00V,EAATA,QAAA,gCAAS,WAAMv1U,GAAN,sGAEKuyP,EAAc7yQ,IAAIsgB,GAFvB,cAEZ+qF,EAFY,yBAGX,CAACluG,MAAMA,EAANA,cAAUkuG,EAASluG,MAAOgE,MAAOy0V,EAAiBvqP,KAHxC,yDAKX,CAAClqG,MAAOy0V,EAAiBA,EAAjBA,MALG,2DAAT,6CASUE,EAAVA,SAAA,gCAAU,WAAOx1U,EAAKnjB,GAAZ,oFACrB+D,QAAQ4B,IAAI,cAAewd,GAC3Bpf,QAAQ4B,IAAI,eAAgB3F,GAFP,kBAII01Q,EAAcz3E,KAAK96K,EAAKnjB,GAJ5B,cAIbkuG,EAJa,OAKnBnqG,QAAQ4B,IAAI,YAAauoG,GALN,kBAMZ,CAACluG,MAAMA,EAANA,cAAUkuG,EAASluG,MAAOgE,MAAOy0V,EAAiBvqP,KANvC,yCAQnBnqG,QAAQ4B,IAAI,kBAAZ,MARmB,kBASZ,CAAC3B,MAAOy0V,EAAiBA,EAAjBA,MATI,4DAAV,gD,gDCtDb,OAAe,iuB,6BCAf,OAAe,mmD,+FCAf,I,EAAA,Q,oCAEA,IAAMG,EAAoB,CACxB/nS,OAAQ,KACRgoS,cAAe,KACftkI,mBAAoB,KACpBukI,kBAAkB,EAElB/2R,KANwB,SAMnBlR,GACH9kD,KAAK8kD,OAASA,EACd9kD,KAAKipD,YAAY,OAGnBV,UAXwB,SAWdg7C,EAAQD,GAA2B,IAApBE,EAAoB,wDAG3C,GAFAxjG,KAAK+sV,iBAAmBvpP,GAAcxjG,KAAK+sV,kBAEX,OAA5B/sV,KAAKwoN,oBAA+BxoN,KAAKwoN,qBAAuBllH,IAC9DtjG,KAAK8sV,gBAAkBvpP,EAAQ,CACjC,IAAMypP,EAAS,UACTx/F,EAAUxtP,KAAK8kD,OAAO8lC,UAAU7sF,MAAM,KAAKiJ,QAAO,SAAAzQ,GAAA,OAAkC,IAA7BA,EAAE2I,YAAY8tV,EAAQ,MACnFhtV,KAAK8kD,OAAO8lC,UAAY4iK,EAAQn6O,KAAK,KAAK8J,QAC1C,aAAEnd,KAAK8kD,QAAQoS,SAAf,UAAkCqsC,IAClC,aAAEvjG,KAAK8kD,QAAQ69N,IAAI,CAAEp/K,OAAQ,OAC7BvjG,KAAKwoN,mBAAqBllH,EAC1BtjG,KAAK8sV,cAAgBvpP,IAK3BE,eA3BwB,SA2BTC,EAAaJ,GAA2B,IAApBE,EAAoB,wDACrDxjG,KAAKuoD,UAAU,QAAS+6C,EAAOE,IAC/B,aAAExjG,KAAK8kD,QAAQ69N,IAAI,CAAEp/K,OAAQA,OAAOG,EAAf,2BAGvBz6C,YAhCwB,SAgCZq6C,GACNtjG,KAAKwoN,qBAAuBllH,IAC9BtjG,KAAKwoN,mBAAqB,KAC1BxoN,KAAKuoD,UAAU,OAAQ,MACvBvoD,KAAKqjG,iBAAiBC,KAI1BK,UAxCwB,WA2CtB,OADgB3jG,KAAK8kD,OAAO8lC,UAAU7sF,MAAM,KAAKiJ,QAAO,SAAAzQ,GAAA,OAAkC,IAA7BA,EAAE2I,YADhD,UACoE,MACpE4I,KAAI,SAAAvR,GAAA,OAAKA,EAAEoI,QAFX,UAE2B,QAG5C2pD,YA9CwB,WA8CsC,IAAlD66C,EAAkD,wDAAhCC,EAAgC,wDACxDD,GAAYnjG,KAAKwoN,oBACfxoN,KAAKwoN,mBAAmBnwJ,SAC1Br4D,KAAKwoN,mBAAmBnwJ,SAAQ,EAAM+qC,GAIrCpjG,KAAK+sV,mBAAoB5pP,GAC5BnjG,KAAKipD,YAAYjpD,KAAKwoN,qBAI1BnlH,iBA1DwB,SA0DPC,GACXtjG,KAAKwoN,qBAAuBllH,IAC9BtjG,KAAK+sV,kBAAmB,K,UAKfF,G,8FC7DA,WAAW,WACpB5nV,EAAOjF,KACTgsD,EAAQ,KAEV,SAASihS,EAAS/1V,GAAS80D,EAAQ90D,EAEnC8I,KAAKq4D,QAAU,SAASuyG,GAClBA,GACF,UAAahnE,YAAY3+F,IAI7BjF,KAAKg2D,KAAO,SAAShK,GACnBihS,EAASjhS,GACThsD,KAAKsqK,cAEPtqK,KAAKsqK,WAAa,WAChB,UAAa7wG,SACX,UAAaC,OAAOM,OACpB/0D,EAAKg1D,OACLh1D,EACA,UAAa20D,WAAWyjC,UAG5Br9F,KAAKi0I,qBAAuB,WAC1B,UAAarwC,YAAY,IAE3B5jG,KAAKm0I,iBAAmB,WACtB,EAAKm2B,cAEPtqK,KAAKi6D,OAAS,SAACtW,GACb,MAAI,IAAA5M,sCAAqC,IAAAinC,8BAA6BhyB,MAIlEA,EAAM1P,UAAY,GAAK0P,EAAMxX,MAAQ,GAAG,CAC1C,IAAMua,EAAO/C,EAAMtrD,YACjBk5C,EAAcmV,EAAKruD,YAGnB64E,EAAY3/B,EAAM4/B,YAAYzqB,GAC9BqxI,EAAgB7mH,EAASukF,wBAAwBvkF,EAAS9nB,MAC1DssG,EAAchvG,EAAK+uG,wBAAwB/uG,EAAKwJ,IAChDslG,EAAc9uG,EAAK+uG,wBAAwB/uG,EAAK0C,MAChD2oE,GAAU,IAAAn8C,eAAcrkC,EAAOwmJ,EAAcviC,EAAYE,GAEvDl7G,GAAW,IAAAwuB,eACbk7J,GAA+B,aAAvB,UAAO3/N,YAA6Bi2C,EAAWA,EAAW,GAAG/qC,WAAa,MAAQ,UAAOyuC,eACjGlS,EAAS2X,EAAM1P,WAAa0P,EAAMxX,MAIlC04S,GADclhS,EAAM/P,OAAS+P,EAAM/P,OAASm+E,GAExCpuE,EAAM1P,WAAa0P,EAAM1P,UAAY,GAAK0P,EAAMxX,MAChDwX,EAAM1P,UAA+B,EAAlB0P,EAAM1P,WAAiB0P,EAAMxX,MACpD24S,EAAenhS,EAAM1P,UAAY,IAAM,GACvC8wS,EAAiC,WAAvB,UAAOxgV,YACbugV,EAAe,IAAIE,UAAS,IAAAh2Q,YAAWhjC,IAAW,KAClD84S,EAAe,IAAIE,SAASh5S,GAAU,IAC1Ci5S,EAAQ3pS,EAAIgnL,YAAYyiH,GACxBG,EAAOD,EAAM3tV,MACbi1E,EAAS5oB,EAAMzB,gBACfoxO,EAAY,CACVvhR,EAAGw6D,EAAOx6D,EAAIw6D,EAAOj1E,MACrB0a,EAAGu6D,EAAOv6D,EAAKu6D,EAAO/0E,OAAS,GAYnC,OAVA8jD,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChBmvD,EAAUthR,GAAKwoC,EAAW,EAG1Bc,EAAI+W,YACJ/W,EAAIwuG,UAAY,UAGRnmG,EAAMi4G,gBACZ,IAAK,UACHtgH,EAAI8oL,SACF2gH,EACAzxD,EAAUvhR,EAAIw6D,EAAOj1E,MAAQ4tV,EAC7B5xD,EAAUthR,GAAKwoC,EAAWqqS,GAAgB,UAAOnrS,MAAQ,UAAOC,aAAcsrS,EAAOzqS,GAEvF,MACF,IAAK,WACHc,EAAI8oL,SACF2gH,EACAzxD,EAAUvhR,EAAI8yU,EAAe,UAAOnrS,MAAQ,UAAOC,aACnD25O,EAAUthR,GAAKwoC,EAAWqqS,GAAgB,UAAOnrS,MAAQ,UAAOC,aAAcsrS,EAAOzqS,GAEvF,MACF,IAAK,cACHc,EAAI8oL,SACF2gH,EACAzxD,EAAUvhR,GAAKyoC,EAAWqqS,GAAgB,UAAOnrS,MAAQ,UAAOC,aAChE25O,EAAUthR,GAAKwoC,EAAWqqS,GAAgB,UAAOnrS,MAAQ,UAAOC,aAAcsrS,EAAOzqS,GAEvF,MACF,IAAK,aACHc,EAAI8oL,SACF2gH,EACAzxD,EAAUvhR,GAAK,GAAK8yU,GAAgB,UAAOnrS,MAAQ,UAAOC,aAC1D25O,EAAUthR,GAAKwoC,EAAWqqS,GAAgB,UAAOnrS,MAAQ,UAAOC,aAChEsrS,EAAOzqS,GAET,MACF,QACEc,EAAI8oL,SACF2gH,EACAzxD,EAAUvhR,EACVuhR,EAAUthR,EAAKwoC,EAAW,EAAiB,EAAXA,EAAeyqS,EAAOzqS,OApHlE,I,IAAA,O,IACA,OACA,QAEA,Q,0MCJA,S,IACA,SACA,Q,qDAEa2qS,kB,YAGX,WAAYliP,IAAO,gGACXA,IADW,OAEjB,EAAK8iG,aAAe,EAAAtxJ,oBAAoBC,QAFvB,E,iFAKF7lD,GACf8I,KAAKipN,cAAgB/xN,I,mCAGVk7E,EAAQC,EAAQ/qB,GACtBtnD,KAAKytV,2BACRztV,KAAKg5D,YAAY,IAAI,EAAJ,QAAW,CAACoZ,EAAQC,GAAS/qB,M,gDAShD,OADkBtnD,KAAKk4H,eACNj4H,MAAK,SAAAmxC,GAAA,OAAWA,EAAOs8S,sB,2KC3BhCjtU,E,wJAAZ,O,IAEA,OACA,Q,IACA,O,IAEA,M,IACA,OACA,QAOA,S,IAKA,OACA,S,IACA,O,IACA,Q,uDAEqBktU,E,WAWnB,WAAY1nS,EAAQyqO,GAAa,sCATjC3pR,MAAQ,CACN2pR,YAAa,CAACt2Q,EAAG,EAAGC,EAAG,GACvBohH,cAAe,GACfmyN,WAAW,EACXviS,YAAY,EACZvE,WAAW,EACXC,kBAAmB,MAGY,KAmEjC8mS,4BAA8B,WAAM,MACT,EAAKC,sBADI,qBAC3B9yQ,EAD2B,KACnBC,EADmB,KAE5BrhC,EAAQ,EAAK7yC,MAAM00H,cAAc,GAAG/6H,YAAYA,YAGhDqtV,GAAmB,IAAA74Q,yBAAwB8F,EAAO5gE,EAAG4gE,EAAO3gE,EAAGu/B,GAC/Do0S,GAAmB,IAAA94Q,yBAAwB+F,EAAO7gE,EAAG6gE,EAAO5gE,EAAGu/B,GAG/DukC,EAAc,CAClB,EAAKp3E,MAAM00H,cAAc,GACzBsyN,EACAC,EACA,EAAKjnV,MAAM00H,cAAc,IAGrBwyN,GAAe,IAAA9rI,kBAAiBhkI,GAChC+vQ,GAAsB,IAAA7rI,+BAA8BlkI,EAAa8vQ,GACjEE,GAAe,IAAA7rI,qBAAoB4rI,GACzC,GAAKC,EAAL,CAKA,IAAMzd,EAAgB92R,EAAMoR,cACtBojS,EAAmB,CACvBh0U,EAAG6zU,EAAa7zU,EAAIs2T,EAAct2T,EAClCC,EAAG4zU,EAAa5zU,EAAIq2T,EAAcr2T,GAG9Bm8C,GAAcA,EAAdA,cACD5c,EAAM4c,YADL,CAEJsjG,UAAU,EACVuE,SAAS,IAGLgwL,GAAgB,IAAAt+D,uBAAsBo+D,EAAc,EAAA5+S,cAAc6B,QACtE,EACAg9S,GACA,EACA,KACA53R,GAGE83R,EAAc,UAAiBt2R,aAAaq2R,GAChDC,EAAYl/R,UAAYxV,EAAMwV,UAC9Bk/R,EAAYn8M,uBAAyBv4F,EAAMu4F,uBAC3Cm8M,EAAYjuN,aAAezmF,EAAMtzC,OACjCgoV,EAAY/qQ,YAAc3pC,EAAM2pC,YAChC+qQ,EAAYl0L,SAAWxgH,EAAMwgH,SACzBxgH,EAAMs8F,eACRo4M,EAAYp4M,aAAe,IAAI,EAAJ,QAAiBo4M,SA/B5Ct2V,QAAQwvJ,KAAK,oDAtFfxnJ,KAAKgI,GAAKyY,EAAK4B,KACfriB,KAAK+G,MAAM00H,cAAgBx1E,EAC3BjmD,KAAK+G,MAAM2pR,YAAcA,EACzB1wR,KAAKsqK,a,4DAGU,OAAOtqK,KAAK+G,MAAM6mV,Y,iCACxB12V,GAAS8I,KAAK+G,MAAM6mV,UAAY12V,I,mCAGzC,UAAauiE,SACX,UAAaC,OAAOM,OACpBh6D,KAAKi6D,OAAOxiE,KAAKuI,MACjBA,KACA,UAAa45D,WAAWmkC,MAE1B,UAAatkC,SACX,UAAaC,OAAOI,WACpB95D,KAAKmoD,YAAY1wD,KAAKuI,MACtBA,KACA,UAAa45D,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOC,WACpB35D,KAAK2oD,YAAYlxD,KAAKuI,MACtBA,KACA,UAAa45D,WAAW8jC,W,gCAK1B19F,KAAK+3D,mBACL/3D,KAAK+qT,kB,sCAGS,2BACd,YAA0B/qT,KAAK+G,MAAM00H,cAArC,+CAAoD,SACtCpjE,WAFA,gF,yCAOd,UAAaurC,YAAY5jG,Q,kCAGfooD,GAEV,GAAIpoD,KAAK+G,MAAMskD,YACM,UAAMlpD,WACVytD,cAAci4C,eAAiB,EAAA50D,qBAAqBx7B,OAEjE,OADA,UAAqB25B,OAAOg6Q,gBAAgBprT,OACrC,EAIX,OAAKA,KAAK+G,MAAM6mV,YACd5tV,KAAK6tV,8BACL7tV,KAAKuuV,YAAW,GAChB,UAAqBn9S,OAAOg6Q,gBAAgBprT,MAC5C,UAAqBoxC,OAAO83K,kBAAiB,IACtC,K,kCA6DC9gK,M,6BAKLzE,GACD3jD,KAAK+G,MAAM6mV,WAGb5tV,KAAKwuV,mBAAmB7qS,K,4CAK1B,IAAM8qS,EAAgBzuV,KAAK+G,MAAM00H,cAAc,GACzCizN,EAAgB1uV,KAAK+G,MAAM00H,cAAc,GAC3CuzE,GAAc,IAAAzkJ,eAAckkS,EAAcr0U,EAAGq0U,EAAcp0U,EAAGo0U,EAAc/tV,YAAYA,aACxFuuM,GAAc,IAAA1kJ,eAAcmkS,EAAct0U,EAAGs0U,EAAcr0U,EAAGo0U,EAAc/tV,YAAYA,aACxF0nD,EAAW,UAAiB43C,kBAC1B2uP,GAA6B,IAAAx7Q,4BACjC/qB,EAAShuC,EACTguC,EAAS/tC,EACT20L,EAAY50L,EACZ40L,EAAY30L,EACZ40L,EAAY70L,EACZ60L,EAAY50L,GAERu0U,GAAyB,IAAAruI,+CAA8CvR,EAAaC,EAAa7mJ,GACjGymS,GAAiB,IAAAh8Q,mBACrBm8H,EACAC,EACA2/I,EAAyB,GACpBD,EACDA,GAUN,OAAOE,I,yCAGUlrS,GAAK,MACG3jD,KAAK8tV,sBADR,qBACf9yQ,EADe,KACPC,EADO,KAEtBt3B,EAAI6W,UAAYx6D,KAAK+G,MAAMyzD,UAC3B7W,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAa6wH,QACrDlxE,EAAIkX,YAAc76D,KAAK+G,MAAMyrJ,UAE7B,IAAMi8L,EAAgBzuV,KAAK+G,MAAM00H,cAAc,GACzCizN,EAAgB1uV,KAAK+G,MAAM00H,cAAc,GAC3CuzE,GAAc,IAAAzkJ,eAAckkS,EAAcr0U,EAAGq0U,EAAcp0U,EAAGo0U,EAAc/tV,YAAYA,aACxFuuM,GAAc,IAAA1kJ,eAAcmkS,EAAct0U,EAAGs0U,EAAcr0U,EAAGo0U,EAAc/tV,YAAYA,aAC5FijD,EAAI+W,YACJ/W,EAAIgX,OAAOq0I,EAAY50L,EAAG40L,EAAY30L,GACtCspC,EAAIiX,OAAOq0I,EAAY70L,EAAG60L,EAAY50L,GACtCspC,EAAIiX,OAAOogB,EAAO5gE,EAAG4gE,EAAO3gE,GAC5BspC,EAAIiX,OAAOqgB,EAAO7gE,EAAG6gE,EAAO5gE,GAC5BspC,EAAI88E,OACJ98E,EAAI6tG,YACJ7tG,EAAImX,a,eApMa6yR,G,+HCzBrB,O,IACA,O,uDAEsBmB,G,aAQpB,WAAY10U,EAAGC,EAAG9gB,EAAQ45O,IAAQ,kCAChCnzO,KAAK+uV,GAAK30U,EACVpa,KAAKgvV,GAAK30U,EACVra,KAAKtG,QAAUH,EACfyG,KAAKivV,QAAU97G,E,uDAoCf,OAAOnzO,KAAKmzO,OAAO9pB,QAAUrpN,KAAKmzO,OAAO9pB,QAAQ30I,KAAO10E,KAAKoa,I,gCAI7D,OAAOpa,KAAKmzO,OAAO9pB,QAAUrpN,KAAKmzO,OAAO9pB,QAAQ10I,KAAO30E,KAAKqa,I,8BAGvDnjB,GACN,OAAO8I,KAAKmzO,OAAO9pB,QAAUrpN,KAAKmzO,OAAO9pB,QAAQ30I,KAAOx9E,EAAQ8I,KAAKoa,EAAIljB,I,8BAGnEA,GACN,OAAO8I,KAAKmzO,OAAO9pB,QAAUrpN,KAAKmzO,OAAO9pB,QAAQ10I,KAAQz9E,EAAQ8I,KAAKqa,EAAInjB,I,wBA5C1E,OAAO8I,KAAKmzO,OAAO9pB,QAAUrpN,KAAKmzO,OAAO9pB,QAAQ30I,KAAO10E,KAAK+uV,I,aAGzD73V,GACJ8I,KAAKmzO,OAAO9pB,QAAUrpN,KAAKmzO,OAAO9pB,QAAQ30I,KAAOx9E,EAAQ8I,KAAK+uV,GAAK73V,I,wBAInE,OAAO8I,KAAKmzO,OAAO9pB,QAAUrpN,KAAKmzO,OAAO9pB,QAAQ30I,KAAO10E,KAAKgvV,I,aAGzD93V,GACJ8I,KAAKmzO,OAAO9pB,QAAUrpN,KAAKmzO,OAAO9pB,QAAQ10I,KAAOz9E,EAAQ8I,KAAKgvV,GAAK93V,I,6BAInE,OAAO8I,KAAKtG,S,aAGHxC,GACT8I,KAAKtG,QAAUxC,I,6BAIf,OAAO8I,KAAKivV,S,aAGH/3V,GACT8I,KAAKivV,QAAU/3V,M,kCAxCjB+3V,QAAU,CACR5lI,QAAS,M,KA0DX91K,OAAS,SAAC37B,EAAQ48B,EAAO8lF,GACvB,IAAItsH,EAAM,CAACoM,EAAG,EAAGC,EAAG,GAChB62I,EAAS,EAAKp4B,UAAYlhH,EAAOwC,EAAjC82I,EAAuC,EAAKn4B,UAAYnhH,EAAOyC,EAEnErM,EAAIoM,EAAI82I,EAAO9mJ,KAAKsnE,IAAIl9B,GAAS08G,EAAO9mJ,KAAKunE,IAAIn9B,GACjDxmC,EAAIqM,EAAI62I,EAAO9mJ,KAAKunE,IAAIn9B,GAAS08G,EAAO9mJ,KAAKsnE,IAAIl9B,GAK/C,EAAKk/L,QAAQtpO,KAAK2nE,QAAQ/jE,EAAIoM,GAAI,GAAKhQ,KAAK2nE,QAAQn6D,EAAOwC,GAAI,IAC/D,EAAKu5N,QAAQvpO,KAAK2nE,QAAQ/jE,EAAIqM,GAAI,GAAKjQ,KAAK2nE,QAAQn6D,EAAOyC,GAAI,K,KAOnEkwC,cAAgB,WACd,IAAI7I,EAAa,UAAWA,WAC1B1P,EAAS0P,EAAa,EACtBK,EAAQ,UAAUkJ,WAClB2pB,EAASr7E,OAAOqxD,YAElB,MAAO,CACLxwC,EAAI,EAAKA,EAAI2nC,EAAS/P,EAAS4iC,EAAOx6D,EACtCC,EAAI,EAAKA,EAAI0nC,EAAS/P,EAAS4iC,EAAOv6D,EACtC1a,MAAO+hD,I,KAIXklJ,cAAgB,WACd,IAAI3sE,EAAa,EAAK1vE,gBAEtB,MAAO,CACLnwC,EAAG6/G,EAAW7/G,EAAI6/G,EAAWt6H,MAAQ,EACrC0a,EAAG4/G,EAAW5/G,EAAI4/G,EAAWt6H,MAAQ,K,aAnGrBmvV,G,gGCHtB,S,IACA,O,IACA,OACA,Q,IACA,Q,IACA,S,6DAGE,WAAYl3R,GAAc,sCAM1BS,QAAU,aANgB,KAU1B62R,cAAgB,SAACh4V,GACf,EAAKi4V,8BAA8BC,WAAal4V,GAXxB,KAc1B+iE,OAAS,SAACtW,GACR,IAAI,YAAa,UAAUxhD,WAAWilD,QAAtC,CAKA,GAJI,EAAKwQ,aAAa89E,kBACpB,EAAK99E,aAAaw9E,eAAen7E,OAAOtW,GAGtC,EAAKiU,aAAatI,gBAEf,CACL,EAAK+/R,UAAUp1R,OAAOtW,GAGtB,IAAMyrS,EAAa,EAAKx3R,aAAa46K,gBACjC,EAAK56K,aAAa26K,0CAA4C68G,GAChE,EAAKx3R,aAAao6K,gCAClB,EAAKk9G,cAAcE,GACnB,EAAKD,8BAA8Bl1R,OAAOtW,IAE1C,EAAKiU,aAAau6K,8BAWtB,OANI,UAAWtxO,aACb,EAAK+2D,aAAanM,WAAWrtD,SAAQ,SAAC04H,GACpC,IAAIE,GAAgC,IAAAzsE,eAAcusE,EAAgBrlE,KAAKr3C,EAAG08G,EAAgBrlE,KAAKp3C,EAAG,EAAKu9C,cACvG,UAAcqpI,aAAajqE,EAA+B,GAAI,EAAG,cAG9D,KA1CPh3H,KAAK43D,aAAeA,EACpB53D,KAAKmvV,8BAAgC,IAAI,EAAJ,QAAkCv3R,GACvE53D,KAAKqvV,UAAY,IAAI,EAAJ,QAAcz3R,K,qHCXnC,MACA,Q,IAOA,QACA,SACA,Q,IACA,OACA,Q,uDAEM03R,E,WACJ,WAAY13R,GAAc,sCAY1Bs3R,cAAgB,SAACh4V,GACf,EAAKk4V,WAAal4V,GAbM,KAqC1B+iE,OAAS,SAACtW,GACR,EAAK4rS,mBACL,IAAMC,EAAwB,EAAK53R,aAAay3K,oBAC1C/nL,EAAM,EAAK8nS,WAAWpkS,cACtBykS,EAAwB,CAACr1U,EAAGo1U,EAAsBp1U,EAAIktC,EAAIltC,EAAGC,EAAGm1U,EAAsBn1U,EAAIitC,EAAIjtC,GAC9Fq1U,EAAkB,EAAK93R,aAAa5M,cACpC2kS,EAAkB,CAACv1U,EAAGs1U,EAAgBt1U,EAAIktC,EAAIltC,EAAGC,EAAGq1U,EAAgBr1U,EAAIitC,EAAIjtC,GAElFspC,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,EAAA6wC,OAAO4oB,IAGzB,IAAMs7N,EAAkB,EAAKC,mBAAmB,EAAKC,yBAA0B,EAAKC,wBAC9EC,EAAkB,EAAKC,mBAAmB,EAAKC,kBAAmB,EAAKC,iBAC7E,EAAKC,mBAAmBzsS,EAAKqsS,EAAiBJ,EAAiBD,GAG/D,EAAKU,wBAAwB1sS,EAAK8rS,IAtDV,KAyD1BI,mBAAqB,SAACv+D,EAAoBC,GACxC,IAAMrrO,EAAQ,EAAK0R,aAAanM,WAEhC,OAAO,IAAAwmO,+BACL/rO,EAAOorO,EAAoBC,IA7DL,KAiE1B0+D,mBAAqB,SAAC3+D,EAAoBC,GACxC,OAAO,IAAAU,+BACL,EAAKm9D,WAAW3jS,UAAS,GAAO6lO,EAAoBC,IAnE9B,KAuE1B6+D,mBAAqB,SAACzsS,EAAKqsS,EAAiBJ,EAAiBD,GAC3D,GAAKK,EAAgBv7V,OAArB,CAGA,IAAMm6U,EAAW,EAAKwgB,WAAWpkS,cAC3BslS,EAAyBN,EAAgBloV,KAAI,SAAAyoV,GACjD,OAAOA,EAAen5N,qBAGlBo5N,EAAyBZ,EAAgB9nV,KAAI,SAAA2oV,GACjD,MAAO,CACLr2U,EAAGq2U,EAAer5N,kBAAkBh9G,EAAIu1U,EAAgBv1U,EACxDC,EAAGo2U,EAAer5N,kBAAkB/8G,EAAIs1U,EAAgBt1U,EACxDq2U,UAAWD,EAAe1hS,SAIxB4hS,GAAoB,IAAAp7Q,uBAAsB+6Q,EAAwBE,GAjBO,uBAmB/E,YAAwCG,EAAkBC,UAA1D,+CAAqE,gCAAlDC,GAAkD,WACnE,GAAIA,EAAiBp+Q,QAAUo+Q,EAAiBn+Q,OAAQ,CACtD,IAAMo+Q,GAAkB,IAAAvmS,eAAcsmS,EAAiBp+Q,OAAOr4D,EAAGy2U,EAAiBp+Q,OAAOp4D,EAAG,EAAK+0U,YAC3F2B,GAAgB,IAAAxmS,eAAcsmS,EAAiBn+Q,OAAOt4D,EAAGy2U,EAAiBn+Q,OAAOr4D,EAAG,EAAK+0U,YAE/FzrS,EAAI+W,YACJ/W,EAAIgX,OAAOm2R,EAAgB12U,EAAG02U,EAAgBz2U,GAC9CspC,EAAIiX,OAAOm2R,EAAc32U,EAAG22U,EAAc12U,GAE1CspC,EAAI6tG,YACJ7tG,EAAImX,SAKJ,IAAMrmE,EAAS,UAAWmY,cAAgB,EAAAyjC,cAAcC,QACpD,IAAA+mC,YAAWw5Q,EAAiBpqS,UAAU,GAAO,GAC7CoqS,EAAiBpqS,SAMfuqS,EAAmB,CACvB52U,EAAGy2U,EAAiBp+Q,OAAOr4D,EAAIw0T,EAASx0T,EACxCC,EAAGw2U,EAAiBp+Q,OAAOp4D,EAAIu0T,EAASv0T,GAEpC42U,EAAiB,CACrB72U,EAAGy2U,EAAiBn+Q,OAAOt4D,EAAIw0T,EAASx0T,EACxCC,EAAGw2U,EAAiBn+Q,OAAOr4D,EAAIu0T,EAASv0T,GAI1Cw2U,EAAiBn+Q,OAAOg+Q,UAAUz+G,uBAAuBlpL,OAAO,CAAC3uC,EAAG,EAAGC,EAAG,IAC1Ew2U,EAAiBn+Q,OAAOg+Q,UAAUz+G,uBAAuB3G,SAAS72O,GAGd,IAAhDo8V,EAAiBn+Q,OAAOg+Q,UAAUhqL,UACnCmqL,EAAiBn+Q,OAAOg+Q,UAAUz+G,uBAAuBzG,iBAAiBylH,EAAgBD,GAE3FH,EAAiBn+Q,OAAOg+Q,UAAUz+G,uBAAuBzG,iBAAiBwlH,EAAkBC,KA3DnB,gFAvEvD,KAwI1BZ,wBAA0B,SAAC1sS,EAAK8rS,GAC9B,IAAIyB,GAAkC,IAAA3mS,eAAcklS,EAAsBr1U,EAAGq1U,EAAsBp1U,EAAG,EAAK+0U,YADnD,GAEO,IAAA59D,8BAC7D,EAAK49D,WAAW3jS,UAAS,GAAO,EAAK0lS,oBAAqB,EAAKC,kBAAmB3B,GAH5B,qBAEnDh+D,EAFmD,KAEvBC,EAFuB,QAOyB,IAAAF,8BAC/E,EAAK55N,aAAanM,UAAS,GAAO,EAAK4lS,2BAA4B,EAAKC,yBAA0B,EAAK15R,aAAay3K,qBAR9D,qBAOnDkiH,EAPmD,KAOdC,EAPc,KAWxD,GAAI//D,GAA8BC,EAA4B,CAC5D,IAAI+/D,EAAsBhgE,EAA2Br6J,kBACjDs6N,EAAsBhgE,EAA2Bt6J,kBACjDu6N,GAAgC,IAAApnS,eAAcknS,EAAoBr3U,EAAGq3U,EAAoBp3U,EAAG,EAAK+0U,YACjGwC,GAAgC,IAAArnS,eAAcmnS,EAAoBt3U,EAAGs3U,EAAoBr3U,EAAG,EAAK+0U,YAErGzrS,EAAI+W,YACJ,UAAcm5F,UAAUlwG,EACtBguS,EAA8Bv3U,EAC9Bu3U,EAA8Bt3U,EAAI,EAAKylR,WACvCoxD,EAAgC92U,EAChC82U,EAAgC72U,EAAI,EAAKylR,YAG3C,UAAcjsI,UAAUlwG,EACtButS,EAAgC92U,EAChC82U,EAAgC72U,EAAI,EAAKylR,WACzC8xD,EAA8Bx3U,EAC9Bw3U,EAA8Bv3U,EAAI,EAAKylR,YAEzCn8O,EAAI6tG,YACJ7tG,EAAImX,SAGJ,IAAI+2R,GAAuB,IAAAvgR,kBAAiBmgR,EAAqBhC,GACjEoC,EAAuB,UAAWjlV,cAAgB,EAAAyjC,cAAcC,QAC5D,IAAA+mC,YAAWw6Q,GAAsB,GAAO,GACxCA,EAEJ,IAAMjjB,EAAW,EAAKwgB,WAAWpkS,cAC3BimS,EAAiB,CACrB72U,EAAGq3U,EAAoBr3U,EAAIw0T,EAASx0T,EACpCC,EAAGo3U,EAAoBp3U,EAAIu0T,EAASv0T,GAEhC22U,EAAmB,CACvB52U,EAAGq1U,EAAsBr1U,EAAIw0T,EAASx0T,EACtCC,EAAGo1U,EAAsBp1U,EAAIu0T,EAASv0T,GAEpCk3U,IACFA,EAAoCxiS,KAAKkjL,uBAAuBlpL,OAAO,CAAC3uC,EAAG,EAAGC,EAAG,IACjFk3U,EAAoCxiS,KAAKkjL,uBAAuB3G,SAASumH,GACzEN,EAAoCxiS,KAAKkjL,uBAAuBzG,iBAAiBwlH,EAAkBC,IA2BrG,IAAIa,GAAuB,IAAAxgR,kBAAiBogR,EAAqBjC,GACjEqC,EAAuB,UAAWllV,cAAgB,EAAAyjC,cAAcC,QAC5D,IAAA+mC,YAAWy6Q,GAAsB,GAAO,GACxCA,EAEJ,IAAMC,EAA6B,CACjC33U,EAAGs3U,EAAoBt3U,EAAIw0T,EAASx0T,EACpCC,EAAGq3U,EAAoBr3U,EAAIu0T,EAASv0T,GAEhC23U,EAA+B,CACnC53U,EAAGq1U,EAAsBr1U,EAAIw0T,EAASx0T,EACtCC,EAAGo1U,EAAsBp1U,EAAIu0T,EAASv0T,GAEpCk3U,IACFC,EAAoCziS,KAAKkjL,uBAAuBlpL,OAAO,CAAC3uC,EAAG,EAAGC,EAAG,IACjFm3U,EAAoCziS,KAAKkjL,uBAAuB3G,SAASwmH,GACzEN,EAAoCziS,KAAKkjL,uBAAuBzG,iBAAiBwmH,EAA8BD,MAtOnH/xV,KAAK43D,aAAeA,EACpB53D,KAAKovV,WAAa,KAClBpvV,KAAK8/R,WAAa,EAElB,IAAMx2R,EAAc,UAAMnH,WAAWmH,YACrCtJ,KAAKkwV,kBAAoB,CAAE91U,GAAI9Q,EAAYqX,YAAatG,EAAG,GAC3Dra,KAAKmwV,gBAAkB,CAAE/1U,EAAG9Q,EAAYqX,YAAatG,EAAG,GACxDra,KAAKmxV,oBAAsB,CAAE/2U,EAAG,EAAGC,GAAI/Q,EAAY4X,cACnDlhB,KAAKoxV,kBAAoB,CAAEh3U,EAAG,EAAGC,EAAG/Q,EAAY4X,c,gEAQhD,IAAM5X,EAAc,UAAMnH,WAAWmH,YAC/B2oV,EAAcjyV,KAAK43D,aAAa9N,YAChCtV,EAAQx0C,KAAK43D,aAAai/E,eAC1B64M,EAAkB1vV,KAAK43D,aAAay3K,oBACpC/nL,EAAMtnD,KAAKovV,WAAWpkS,cACtB2kS,EAAkB,CAACv1U,EAAGs1U,EAAgBt1U,EAAIktC,EAAIltC,EAAGC,EAAGq1U,EAAgBr1U,EAAIitC,EAAIjtC,GAIlFra,KAAKkwV,mBAAoB,IAAA1+Q,aAAY,CAAEp3D,GAAI9Q,EAAYqX,YAAatG,EAAGs1U,EAAgBt1U,GAAKs1U,GAAkBn7S,GAC9Gx0C,KAAKmwV,iBAAkB,IAAA3+Q,aAAa,CAAEp3D,EAAG9Q,EAAYqX,YAAatG,EAAGs1U,EAAgBt1U,GAAKs1U,GAAkBn7S,GAC5Gx0C,KAAK8vV,0BAA2B,IAAAt+Q,aAAa,CAAEp3D,GAAI9Q,EAAYqX,YAAatG,EAAG43U,EAAY53U,GAAK43U,GAAcz9S,GAC9Gx0C,KAAK+vV,wBAAyB,IAAAv+Q,aAAY,CAAEp3D,EAAG9Q,EAAYqX,YAAatG,EAAG43U,EAAY53U,GAAK43U,GAAcz9S,GAE1Gx0C,KAAKmxV,qBAAsB,IAAA3/Q,aAAa,CAAEp3D,EAAGu1U,EAAgBv1U,EAAGC,GAAI/Q,EAAY4X,cAAgByuU,GAAkBn7S,GAClHx0C,KAAKoxV,mBAAoB,IAAA5/Q,aAAY,CAAEp3D,EAAGu1U,EAAgBv1U,EAAGC,EAAG/Q,EAAY4X,cAAgByuU,GAAkBn7S,GAC9Gx0C,KAAKqxV,4BAA6B,IAAA7/Q,aAAa,CAAEp3D,EAAG63U,EAAY73U,EAAGC,GAAI/Q,EAAY4X,cAAgB+wU,GAAcz9S,GACjHx0C,KAAKsxV,0BAA2B,IAAA9/Q,aAAY,CAAEp3D,EAAI63U,EAAY73U,EAAGC,EAAG/Q,EAAY4X,cAAgB+wU,GAAcz9S,O,eAmNnG86S,G,gGCpQf,O,IACA,QACA,Q,IACA,Q,6DAGE,WAAY13R,GAAc,sCAI1BqC,OAAS,SAACtW,GACR,IAAIutO,EAAkB,GAChBnvO,EAAQ,UAAWA,MAErB,EAAK6V,aAAaxyD,QAAU,EAAKwyD,aAAa+5K,MAAM,EAAK/5K,aAAalJ,SACxEwiO,EAAkBhgM,KAAK,EAAKt5B,aAAa85K,OAAO,EAAK95K,aAAalJ,OAAO/vD,QAAQ,+BAAgC,MAKnHglD,EAAIyuG,OACJ,IAAIy/E,EAAW,EAAKj6K,aAAa43K,cACjC7rL,EAAI0oL,UAAUwF,EAASz3N,EAAGy3N,EAASx3N,GACnCspC,EAAIpQ,QAAQ,EAAKqkB,aAAai/E,eAAiBzsI,KAAKqnE,GAAK,KACzD,IAAIygR,EAAY,CACd93U,EAAG,EAAKw9C,aAAat0D,KAAK3D,OAAS,EAAIoiD,EACvC1nC,EAAG,EAAKu9C,aAAat0D,KAAKzD,QAAU,EAAIkiD,GAK1C,GAFA,EAAKowS,eAAexuS,EAAKuuS,GAEpB,EAAKt6R,aAAaxyD,OAYZ8rR,GACTvtO,EAAIwtO,QAAQD,EAAiBghE,EAAU93U,EAAG83U,EAAU73U,EAAG,EAAKu9C,aAAat0D,KAAK3D,MAAQoiD,EAAO,EAAK6V,aAAat0D,KAAKzD,OAASkiD,QAZ7H,GAAI,EAAK6V,aAAaxC,UAAY,EAAAzf,gBAAgByB,KAChD,UAAcA,KAAKuM,EAAKuuS,EAAU93U,EAAG83U,EAAU73U,EAAG,EAAKu9C,aAAat0D,KAAK3D,MAAQoiD,EAAO,EAAK6V,aAAat0D,KAAKzD,OAASkiD,QACnH,GAAI,EAAK6V,aAAaxC,UAAY,EAAAzf,gBAAgB0B,WACvD,UAAcA,WAAWsM,EAAKuuS,EAAU93U,EAAG83U,EAAU73U,EAAG,EAAKu9C,aAAat0D,KAAK3D,MAAQoiD,EAAO,EAAK6V,aAAat0D,KAAKzD,OAASkiD,OACzH,CACL,IAAMqwS,EAAgB,CAACzyV,MAAO,EAAKi4D,aAAat0D,KAAK3D,MAAQoiD,EAAOliD,OAAQ,EAAK+3D,aAAat0D,KAAKzD,OAASkiD,GACtGz+C,EAAO,EAAK+uV,iBAClB,UAAYl9G,qBAAqBxxL,EAAKuuS,EAAU93U,EAAG83U,EAAU73U,EAAG+3U,EAAczyV,MAAOyyV,EAAcvyV,QACnG,UAAcyyV,WAAW3uS,EAAKuuS,EAAWE,EAAczyV,MAAOyyV,EAAcvyV,QAC5E8jD,EAAI2rC,UAAU,EAAK13B,aAAalJ,MAAOwjS,EAAU93U,EAAG83U,EAAU73U,EAAG/W,EAAK3D,MAAO2D,EAAKzD,QAKtF8jD,EAAI0uG,UAGA,UAAWxxJ,aA3CS,KAiE1BwxV,eAAiB,WACf,IAAME,EAAc,EAAK36R,aAAa01K,YAAY3tO,MAAQ,EAAKi4D,aAAa01K,YAAYztO,OAClFkiD,EAAQ,UAAWA,MACrBivL,SAAUC,SAWd,OAVI,EAAKr5K,aAAat0D,KAAK3D,MAAQ,EAAKi4D,aAAat0D,KAAKzD,OAAS0yV,EAGjEvhH,GADAC,EAAY,EAAKr5K,aAAat0D,KAAKzD,QACZ0yV,EAIvBthH,GADAD,EAAW,EAAKp5K,aAAat0D,KAAK3D,OACX4yV,EAGlB,CAAC5yV,MAAOqxO,EAAWjvL,EAAOliD,OAAQoxO,EAAYlvL,IA/E7B,KAkF1BowS,eAAiB,SAACxuS,EAAKuuS,GACrB,IAAInwS,EAAQ,UAAWA,MAEnB,EAAK6V,aAAavM,eAAiB,EAAKuM,aAAay6K,sBACvD1uL,EAAI+W,YACJ/W,EAAI0oC,KAAK6lQ,EAAU93U,EAAG83U,EAAU73U,EAAG,EAAKu9C,aAAat0D,KAAK3D,MAAQoiD,EAAO,EAAK6V,aAAat0D,KAAKzD,OAASkiD,GACzG4B,EAAIkX,YAAc,EAAKjD,aAAa41K,WACpC7pL,EAAI6W,UAAY,EAChB7W,EAAImX,SACJnX,EAAI6tG,cA3FkB,KA+F1BghM,iBAAmB,aA9FjBxyV,KAAK43D,aAAeA,I,uHCPxB,Q,uDAEqB66R,E,WAQnB,WAAYh+V,EAAQoL,EAAQ0tO,GAAW,sCANvCmlH,QAAU,GAM6B,KAJvCnlH,UAAY,GAI2B,KAgBvCmrD,YAAc,SAACnoO,GACb,EAAKA,SAAWA,GAjBqB,KAoBvC8lO,cAAgB,iBAAO,CACrBx2R,OAAQ,EAAKA,OACb0tO,UAAW,EAAKA,UAAY,EAAKA,UAAUr2O,MAAQ,EAAKq2O,UACxD94O,OAAQ,EAAKA,OAAOyC,QAtBpB8I,KAAKgI,IAAK,UACVhI,KAAK0yV,QAAUj+V,EACfuL,KAAKH,OAASA,EACdG,KAAKutO,UAAYA,EACjBvtO,KAAKuwD,SAAW,E,kDAGP97D,GACTuL,KAAK0yV,QAAUj+V,G,eAIf,OAAOuL,KAAK0yV,Y,eArBKD,G,sHCFrB,OACA,U,IACA,OACA,Q,IACA,Q,IACA,Q,IACA,OACA,QAKA,S,IACA,OACA,S,IAEA,Q,gHAGEhyE,iBAAmB,G,KAEnBloC,4BAA8B,WAChB,UAAU9sL,WAChBrtD,SAAQ,SAAC2wD,GACb,IAAK,EAAKimP,SAASjmP,GAAO,CACxB,IAAIu5P,SAAYz5C,SACV8jF,EAAc5jS,EAAKruD,YACnBkyV,EAAyB,UAAqBnlS,0BAA0BsB,GACxE6qB,GAAkB,IAAAC,oBAAmB+4Q,EAAyBA,EAAuBxjS,UAAY,MAGvG,GAAIL,EAAK0pI,mBAAoB,QACC,IAAAo6J,oBAAmB9jS,GAAOA,EAAKoF,uBADhC,qBAC1Bm0P,EAD0B,KACdz5C,EADc,UAItB,IAAK9/M,EAAK6pI,mBAAqB7pI,EAAKwnI,mBACtCo8J,EAAYrsV,SAAW,EAAAipC,cAAcoB,eACxC,CAEA,GAAIoe,EAAK5sD,WAAWm1L,gCAClB,OAEF,IAAMu8D,EAAU,UAAqBj3M,UAAUk2S,eAAeH,EAAY53L,4BAC1E,IAAK84F,EAEH,OARF,OAU4B,IAAAg/F,oBAAmB9jS,EAAM8kM,EAAQtmB,WAV7D,qBAUC+6E,EAVD,KAUaz5C,EAVb,UAYK,GAAI9/M,EAAK6pI,oBAAsB7pI,EAAK7C,iBAAmB0tB,EAAkB,GAAK,QACvD,IAAAi5Q,oBAAmB9jS,EAAM6qB,GAD8B,qBAClF0uO,EADkF,KACtEz5C,EADsE,SAI9E,KAAI9/M,EAAK8pI,+BAAiC,IAAAxO,sBAAqBt7H,EAAK+pI,sBAGzE,OAHgG,OACpE,IAAA+5J,oBAAmB9jS,EAAM,UAAW7K,yBADgC,qBAC/FokQ,EAD+F,KACnFz5C,EADmF,KAOlG,IAAIh4M,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAYw4M,GAAc,SAAUy5C,EAAY,EAAA/4Q,cAAcmB,iBAChGkJ,EAAQ,UAAUoe,aAAanB,GAGrCjd,EAAM+iH,oBAAmB,GACzB/iH,EAAMoiH,wBACJjtG,EAAKruD,YAAY8sD,qBAAuBuB,EAAKruD,YAAY8sD,qBAAuBuB,EAAKruD,YAAYsH,IAEnG4xC,EAAMmiH,4BACJhtG,EAAKruD,YAAY+5J,iBAAmB1rG,EAAKruD,YAAY+5J,iBAAmB1rG,EAAKruD,YAAY4F,QAG3F,IAAI8oD,SAGFA,EAFEL,EAAK0pI,qBACPrpI,EAAYL,EAAK+qI,2BAGL/qI,EAAKruD,YAAY0uD,UAE/BxV,EAAMyd,aAAajI,GACnBxV,EAAMsiH,YAAYntG,EAAKruD,YAAY05J,UAEnC,EAAKomH,oBAAoB,IAAI,EAAJ,QAAwBzxN,EAAM8H,S,KAK7D6hL,kBAAoB,WACN,UAAUjtL,WAChBrtD,SAAQ,SAAC2wD,GACb,GAAIA,EAAKrD,kBAAoB,EAAKspP,SAASjmP,GAAO,CAChD,IAAI8/M,GAAc,IAAAkkF,sBAAqBhkS,GACnCikS,EAAajkS,EAAKruD,YAAYsqD,cAC9B6L,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAYw4M,GAAc,SAAUmkF,EAAY,EAAAzjT,cAAcmB,iBAChGkJ,EAAQ,UAAUoe,aAAanB,GACrCjd,EAAM+iH,oBAAmB,GACzB/iH,EAAMyd,aAAatI,EAAKruD,YAAY0uD,WACpCxV,EAAMoiH,wBAAwBjtG,EAAKruD,YAAYsH,IAC/C4xC,EAAMmiH,4BAA4BhtG,EAAKruD,YAAY4F,QACnDszC,EAAMsiH,YAAYntG,EAAKruD,YAAY05J,UAEnC,EAAKomH,oBAAoB,IAAI,EAAJ,QAAwBzxN,EAAM8H,S,KAK7D2hL,sBAAwB,WACV,UAAU/sL,WAChBrtD,SAAQ,SAAC2wD,GACb,GAAIA,EAAK7C,kBAAoB,EAAK8oP,SAASjmP,GAAO,CAChD,IAAMq3I,EAAgBr3I,EAAKikF,eAAektB,YAC1CkmC,EAAchoM,SAAQ,SAAC4tD,EAAOp+C,GAC5B,IAAIq0J,EAAOr0J,EAAQ,EACnB,GAAIw4L,EAAcnkC,GAAO,CACvB,IAEI80H,EAFUhoO,EAAKikF,eAAe8kJ,wBAAwB9rO,EAAOo6I,EAAcnkC,IAErDpiK,OAAS,UAAWmjD,uBAC9C,GAAI+zO,EAAc,KAAO,QACS,IAAAk8D,sBAAqBlkS,EAAKruD,YAAasrD,EAAOo6I,EAAcnkC,GAAO80H,GAD5E,qBAClBi8D,EADkB,KACNnkF,EADM,KAGnBh4M,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAYw4M,GAAc,SAAUmkF,EAAY,EAAAzjT,cAAcmB,iBAChGkJ,EAAQ,UAAUoe,aAAanB,GACrCjd,EAAM+iH,oBAAmB,GACzB/iH,EAAMyd,aAAatI,EAAKruD,YAAY0uD,WACpCxV,EAAMoiH,wBAAwBjtG,EAAKruD,YAAYsH,IAC/C4xC,EAAMmiH,4BAA4BhtG,EAAKruD,YAAY4F,QACnDszC,EAAMsiH,YAAYntG,EAAKruD,YAAY05J,UAEnC,EAAKomH,oBAAoB,IAAI,EAAJ,QAAwBzxN,EAAM8H,c,KAQnE4hL,2BAA6B,WACf,UAAUhtL,WAChBrtD,SAAQ,SAAC2wD,GACb,GAAIA,EAAKsnI,uBAAyB,EAAK2+G,SAASjmP,GAAO,CACrD,IAAMmkS,EAAqBnkS,EAAK6sI,oBAAoB17B,YACpDgzL,EAAmB90V,SAAQ,SAAC4tD,EAAOp+C,GACjC,IAAIq0J,EAAOr0J,EAAQ,EACnB,GAAIslV,EAAmBjxL,GAAO,CAC5B,IAEI80H,EAFUhoO,EAAK6sI,oBAAoBk8F,wBAAwB9rO,EAAOknS,EAAmBjxL,IAE/DpiK,OAHE,GAII,IAAAozV,sBAAqBlkS,EAAKruD,YAAasrD,EAAOknS,EAAmBjxL,GAAO80H,GAJ5E,qBAIvBi8D,EAJuB,KAIXnkF,EAJW,KAMxBh4M,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAYw4M,GAAc,SAAUmkF,EAAY,EAAAzjT,cAAcmB,iBAChGkJ,EAAQ,UAAUoe,aAAanB,GACrCjd,EAAM+iH,oBAAmB,GACzB/iH,EAAMyd,aAAatI,EAAKruD,YAAY0uD,WACpCxV,EAAMoiH,wBAAwBjtG,EAAKruD,YAAYsH,IAC/C4xC,EAAMmiH,4BAA4BhtG,EAAKruD,YAAY4F,QACnDszC,EAAMsiH,YAAYntG,EAAKruD,YAAY05J,UAEnC,EAAKomH,oBAAoB,IAAI,EAAJ,QAAwBzxN,EAAM8H,a,KAOjEyhL,wBAA0B,WACZ,UAAU7sL,WAChBrtD,SAAQ,SAAC2wD,IACRA,EAAKyzG,4BAA6BzzG,EAAK0zG,gCACtC,EAAKuyI,SAASjmP,IAEQA,EAAK2zG,iBAAiBkxF,cAE9Bx1P,SAAQ,SAACy1P,GAAY,MAClB,EAAKs/F,mBAAmBpkS,EAAM8kM,GADZ,qBAC9BpiM,EAD8B,KACxB8G,EADwB,KAErC,GAAI9G,GAAQ8G,EAAI,CACd,IAAM14D,EAAiC,aAAvB,UAAO+M,YAA6BinP,EAAQh0P,QAAS,IAAA22E,YAAWq9K,EAAQh0P,QAD1E,GAEkB,IAAAozV,sBAAqBlkS,EAAKruD,YAAa+wD,EAAM8G,EAAI14D,GAFnE,qBAETmzV,EAFS,KAEGnkF,EAFH,KAIVh4M,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAYw4M,EAAYzvJ,WAAY,SAAU4zO,EAAY,EAAAzjT,cAAcoB,gBAC1GiJ,EAAQ,UAAUoe,aAAanB,GACrCjd,EAAM+iH,oBAAmB,GACzB/iH,EAAMyd,aAAatI,EAAKruD,YAAY0uD,WACpCxV,EAAMsiH,YAAYntG,EAAKruD,YAAY05J,UACnCxgH,EAAMoiH,wBAAwBjtG,EAAKruD,YAAYsH,IAC/C4xC,EAAMmiH,4BAA4BhtG,EAAKruD,YAAY4F,QACnDszC,EAAMqiH,8BAA8B43F,EAAQ7rP,IAE5C,EAAKorV,gCAAgCv8R,EAASg9L,GAE9C,EAAK2sB,oBAAoB,IAAI,EAAJ,QAAwBzxN,EAAM8H,Y,KAQjEu8R,gCAAkC,SAACv8R,EAASg9L,GAAY,MAChDw/F,GAAc,IAAAppK,uBAEdqpK,EAAkBA,EAAlBA,qBACAC,wBACHD,EAAgB91S,cAAgB,CAAC,KAD9B,eAEH81S,EAAgB12S,UAAY,CAAC,EAAG,EAAG,KAFhC,eAGH02S,EAAgB71S,eAAiB,CAAC,KAH/B,eAIH61S,EAAgBz4S,aAAe,CAAC,IAJ7B,GAMF04S,EAAW1/F,EAAQp9P,QACjB48V,GACF,IAAA1jJ,mBAAkB94I,EAASw8R,EAAaE,EAAW1/F,EAAQp9P,OAAO,IAElE,IAAAo5M,oBAAmBh5I,EAAS08R,EAAW1/F,EAAQp9P,QAI/Co9P,EAAQp9P,OAAS68V,EAAgB12S,YACnC,IAAAkzJ,eAAcj5I,EAAS,CAAC,EAAG,EAAG,GAAI,CAAEygI,iCAAiC,K,KAIzE67J,mBAAqB,SAACpkS,EAAM8kM,GAC1B,IAAMr8P,EAAMq8P,EAAQr8P,IACd/C,EAAgC,aAAvB,UAAOmY,YAA6BinP,EAAQp/P,QAAS,IAAA+hF,YAAWq9K,EAAQp/P,QACvF,GAAIo/P,EAAQlkJ,WACV,MAAO,CAAC,KAAM,MAEhB,OAAQn4G,GACN,KAAK,EAAA+lD,qBAAqBC,cAExB,MAAO,EADa,IAAA0+B,mBAAkBntB,EAAKwJ,GAAIxJ,EAAK0C,MAAOh9D,GACtCs6D,EAAKwJ,IAE5B,KAAK,EAAAhb,qBAAqBX,UACxB,IAAM+1B,EAAqC,GAAjBkhL,EAAQh0P,OAAa,UAAWmjD,uBADvB,GAED,IAAA6vB,mBAAkB9jB,EAAK0C,KAAM1C,EAAKwJ,GAAIoa,GAFrC,qBAGnC,MAAO,CAH4B,WAKrC,KAAK,EAAAp1B,qBAAqBE,eACxB,IAAMi6O,GAAc,IAAAx7M,mBAAkBntB,EAAK0C,KAAM1C,EAAKwJ,IAAK9jE,GAC3D,MAAO,CAACs6D,EAAK0C,KAAMimO,GAErB,KAAK,EAAAn6O,qBAAqB1C,aACxB,IAAM8hJ,EAAW5tI,EAAKruD,YAAY0oK,YAAYr6G,GAGxCykS,IAAuB,IAAA35Q,sBAJS,GAKJ,IAAAhH,mBAAkB8pH,EAASlrI,KAAMkrI,EAASpkI,GAAIi7R,GAL1C,qBAK/B9+L,EAL+B,KAMtC,MAAO,CAN+B,KAMjBA,GAEvB,KAAK,EAAAn3G,qBAAqBG,mBAAoB,OACV,IAAAm1B,mBAAkB9jB,EAAK0C,KAAM1C,EAAKwJ,IAAKs7L,EAAQh0P,QADrC,qBAE5C,MAAO,CAFqC,WAI9C,QACE,MAAO,CAAC,KAAM,Q,KAIpBm1S,SAAW,SAACjmP,GACV,OAAO,EAAK0xN,iBAAiBxgR,MAAM,SAAAwzV,GACjC,OAAOA,EAAoB1kS,KAAK/mD,KAAO+mD,EAAK/mD,O,KAIhD0rV,yBAA2B,SAAC95S,GAC1B,OAAO,EAAK6mO,iBAAiBz5Q,QAAQ,SAAAysV,GACnC,OAAOA,EAAoB1kS,KAAKruD,YAAYsH,KAAO4xC,EAAM5xC,O,KAI7D+xL,6BAA+B,SAAChrI,EAAMK,GACpC,IAAMwxN,EAAkB,EAAKD,0BAA0B5xN,GACnD6xN,GACsB,UAAU5oN,aAAa4oN,EAAgBF,mBAC/CrpN,aAAajI,I,KAIjCi5I,kBAAoB,WAClB,EAAKo4E,iBAAmB,I,KAG1BtyN,WAAa,SAACl6D,GAAS,2BACrB,YAAiCA,EAAjC,+CAAuC,KAA9BosR,EAA8B,QACjCzmO,EAAQ,UAAU6U,YAAY4xN,EAAqBC,iBACvD1mO,EAAMme,mBACN,IAAIhJ,EAAO,UAAU+D,YAAYutN,EAAqBtxN,KAAK/mD,IACvDu4Q,EAAsB,IAAI,EAAJ,QAAwBxxN,EAAMnV,EAAM5xC,IAC9D,EAAKw4Q,oBAAoBD,IANN,+E,KAUvB73H,WAAa,WACX,OAAO,EAAK+3H,iBACTz5Q,QAAQ,SAAAysV,GAEP,OADsB,UAAUz7R,aAAay7R,EAAoB/yE,mBAC1Cp6Q,SAAW,EAAAipC,cAAckB,aAEjD3oC,KAAK,SAAA2rV,GAGN,MAAO,CACLnzE,gBAHoB,UAAUtoN,aAAay7R,EAAoB/yE,mBAG9BzhH,SACjClwG,KAAM0kS,EAAoB1kS,KAAKkwG,c,KAKrCuhH,oBAAsB,SAACizE,GACrB,EAAKhzE,iBAAiB1rR,KAAK0+V,I,KAG7B9yE,0BAA4B,SAAC5xN,GAC3B,OAAO,EAAK0xN,iBAAiB30Q,MAAK,SAAA80Q,GAAA,OAAmBA,EAAgB7xN,KAAK/mD,KAAO+mD,EAAK/mD,O,KAGxFoiK,6BAA+B,SAACr7G,GAC9B,IAAK,IAAIx6D,EAAI,EAAKksR,iBAAiBhsR,OAAS,EAAGF,GAAK,EAAGA,IACrD,GAAI,EAAKksR,iBAAiBlsR,GAAGw6D,KAAK/mD,KAAO+mD,EAAK/mD,GAAI,CAChD,IAAM4xC,EAAQ,UAAUoe,aAAa,EAAKyoN,iBAAiBlsR,GAAGmsR,mBAC9D,EAAKntI,2CAA2C35F,GAChD,UAAU8d,gBAAgB,EAAK+oN,iBAAiBlsR,GAAGmsR,qB,KAKzDizE,2BAA6B,SAACjzE,GAC5B,OAAO,EAAKD,iBAAiB30Q,MAAK,SAAA8nV,GAChC,OAAOA,EAAiBlzE,oBAAsBA,M,KAOlDvoC,qBAAuB,WACrB,EAAKsoC,iBAAiBriR,SAAQ,SAAAq1V,GAC5B,IAAInzE,EAAkB,UAAUtoN,aAAay7R,EAAoB/yE,mBAC7DJ,EACFA,EAAgBvoN,mBAEhB//D,QAAQC,MAAM,oDAAqDw7V,EAAoB/yE,uB,KAK7FntI,2CAA6C,SAAC35F,GAC5C,IAAMsM,EAAQtM,EAAM6R,WADkC,uBAEtD,YAAmBvF,EAAnB,+CAA0B,KAAf6I,EAAe,QACxB,EAAKq7G,6BAA6Br7G,IAHkB,+E,KAOxD4pL,wBAA0B,WACxB,EAAK8nC,iBAAiBriR,SAAQ,SAAAq1V,GAC5B,IAAInzE,EAAkB,UAAUtoN,aAAay7R,EAAoB/yE,mBAC7DJ,EAAgBtzN,UAAmD,IAAvCszN,EAAgB9rI,YAAY//I,QAC1D6rR,EAAgB3tI,mB,KAKtB/5E,oBAAsB,SAACioN,GACrB,EAAKJ,iBAAmB,EAAKA,iBAAiBz5Q,QAAO,SAAA45Q,GAAA,OAAmBA,EAAgBF,oBAAsBG,EAAc74Q,S,uKC1WhI,Q,IACA,O,mDAEkC6qV,EAArBA,mBAAqB,SAAC9jS,GAAyB,IAAnBw+K,EAAmB,wDAAN,EACpDA,EAAmC,aAAvB,UAAO3gO,YAA6B2gO,GAAY,IAAA/2J,YAAW+2J,GACvE,IAAM3zL,EAAQmV,EAAKruD,YACfy9E,EAAc,GACZ0wQ,GAAiB,IAAAh8Q,mBAAkB9jB,EAAK0C,KAAM1C,EAAKwJ,IAAKg1K,GAK9D,OAJApvJ,EAAYppF,KAAZ,MAAAopF,GAAA,aAAoB0wQ,IACpB1wQ,EAAYppF,KAAKg6D,EAAK0C,MACtB0sB,EAAYppF,KAAKg6D,EAAKwJ,IAEf,CAAC3e,EAAM0N,IAAK62B,IAGe80Q,EAAvBA,qBAAuB,SAAC15V,EAAQk4D,EAAM8G,GAAuB,IAAnBg1K,EAAmB,wDAAN,EAC5D3zL,EAAQrgD,EACV4kF,EAAc,GACZ0wQ,GAAiB,IAAAh8Q,mBAAkBphB,EAAM8G,GAAKg1K,GAKpD,OAJApvJ,EAAYppF,KAAZ,MAAAopF,GAAA,aAAoB0wQ,IACpB1wQ,EAAYppF,KAAK08D,GACjB0sB,EAAYppF,KAAKwjE,GAEV,CAAC3e,EAAM0N,IAAK62B,IAGe40Q,EAAvBA,qBAAuB,SAAChkS,GACnC,OAAOA,EAAKpD,eAAeonS,yB,8EC3B7B,I,IAAA,O,IACA,O,IACA,O,IACA,MACA,QACA,QACA,S,IACA,OACA,SACA,Q,6DAyIe,IAlIM,WAAW,WAC9B/yV,KAAK0jG,YAAc,KACnB1jG,KAAKwoT,YAAc,KACnBxoT,KAAK8xD,IAAM,KACX9xD,KAAK0zP,0BAA2B,EAEhC1zP,KAAK6sL,gBAAkB,SAACgnK,GACtB,UAAavrS,aAAY,GACzB,UAAUe,eAAc,GACxB,UAAUG,sBAAqB,GAC/B,UAAOxD,UAAUC,QAAS,EAC1B,UAAOD,UAAUE,OAAQ,EACzB,UAAOF,UAAU56C,KAAO,EAAAuxC,0BAA0BpI,QAE7Cs/S,IACH,UAAO7tS,UAAUG,UAAW,GAE9BuoC,YAAW,WACT,UAAO1oC,UAAUG,UAAW,IAC3B,MAGLnmD,KAAKyjG,eAAiB,WACpB,IACEmlN,EADW,GAEXC,EAFW,GAITC,EAAS1vT,SAAS8oD,cAAc,OACpC4mQ,EAAOl3N,YAAc,YAErB,IAAIm3N,GAAO,aAAED,GACbC,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAmBVkpT,EAAKpmN,GAAG,QAhBU,WAChB,IACIqmN,SACAJ,EAAWC,GACbG,EAAQH,EAAYD,EACpBA,EAJW,GAKXC,EALW,GAKUG,IAErBA,EAAQJ,EAAWC,EACnBA,EARW,GASXD,EATW,GASSI,GAEtB,UAAazgQ,UAAU,cAAe,GAAM,GAC5C,EAAKm7C,YAAc,CAAEh1C,MAAOo6P,EAAQnpT,MAAOipT,EAAU/oT,OAAQgpT,GAC7D,EAAK51D,oBAGP81D,EAAKpnC,UAAS,aAAE,SAChBonC,EAAKh5E,KAAK,MAAV,gBAEA,EAAKj+K,IAAMi3P,GAGb/oT,KAAKizP,eAAiB,WACpB,UAAa1qM,UAAU,gBAAiB,GAAM,GAC9C,UAAakR,SACX,UAAaC,OAAOM,OACpB,EAAKyuP,aACL,EACA,UAAa7uP,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOK,SACpB,EAAKvR,UACL,EACA,UAAaoR,WAAWojC,UAI5Bh9F,KAAK+3D,iBAAmB,WACtB,UAAa9O,YAAY,GACzB,UAAa26C,YAAY,GACzB,UAAO59C,UAAUE,OAAQ,GAE3BlmD,KAAKq4D,QAAU,SAACuyG,EAASxnE,GACnBA,GACF,UAAaQ,YAAY,EAAM,UAAalqC,OAAOM,QACnD,EAAK05L,0BAA2B,GAEhC,EAAK37L,oBAIT/3D,KAAKwoD,UAAY,SAACJ,GAEhB,IAAIiE,EAAc,UAAUF,iBACxB2nS,EAAoB,UAAUlnS,uBAClC,GAAIP,EAAa,CACf,IAAMtlD,EAAQ,UAAM5E,WACd02D,EAAqB9xD,EAAMgH,UAAU8qD,mBAErCw+C,EADYtwG,EAAM6oD,cAAcuzD,YACT,EAAAvlE,WAAWE,SAAW,EAAA7I,mCAAmCS,UAAY,EAAAjE,2BAA2B8C,QACvHtjC,EAAkBlK,EAAMmmD,kBAAkBj8C,gBAC1C8iV,EAAwB9iV,EAAgBuH,iBAE1C6zC,GAAeynS,GACjB,IAAA5kS,gBAAe7C,EAAaynS,EAAmB,EAAAn3S,0BAA0BpI,QAAStjC,EAAgBtN,UAAUqE,GAAIiJ,EAAgB3K,OAAQytV,GAExI,UAAM9vU,UAAS,IAAAujF,mBAAkB6P,IAGnC,UAAMpzF,UAAS,IAAA60C,wBAAuBD,EAAqB,IAE7D,EAAKu6L,yBAEPpzP,KAAKozP,sBAAwB,WACvBpzP,KAAK0zP,2BACP1zP,KAAK0zP,0BAA2B,EAChC,UAAa9vJ,YAAY5jG,KAAM,UAAa05D,OAAOK,UACnD/5D,KAAK6sL,iBAAgB,GACrB7sL,KAAKyjG,mBAGTzjG,KAAKyoT,aAAe,SAAC9kQ,GACnB,GAAI,EAAK+/C,YAAYh1C,QAAU,aAAEv2D,QAAQwH,QAAU,IAAM,CACvD,IAAIspT,EAAO,UAAajpN,kBACpBipN,GACFtlQ,EAAI2rC,UAAU,EAAKoU,YAAYh1C,MAAOu6P,EAAK7uS,EAAI,GAAI6uS,EAAK5uS,EAAI,GAAI,EAAKqpF,YAAY/jG,MAAO,EAAK+jG,YAAY7jG,Y,2GC5IjH,I,IAAA,M,IACA,OACA,S,IACA,Q,mDAEmC8zP,EAAtBA,oBAAsB,WAGjC,OAFA,UAAOA,sBAEA,UAAW/mP,aAChB,IAAK,SACH,UAAMqX,UAAS,IAAAsmL,mBAAkB,UAAWnyJ,KAAKsM,mBACjD,UAAMzgC,UAAS,IAAAumL,oBAAmB,UAAWpyJ,KAAKuM,oBAClD,MACF,IAAK,WACL,QACE,UAAM1gC,UAAS,IAAAsmL,mBAAkB,UAAWnyJ,KAAKwM,qBACjD,UAAM3gC,UAAS,IAAAumL,oBAAmB,UAAWpyJ,KAAKyM,yB,oGChBxD,O,IACA,QACA,S,IACA,O,IAEA,Q,uDAEMmvS,G,EAsBJ,WAAYhjE,EAAY52Q,EAAGC,EAAG1a,EAAOE,EAAQ+wO,EAAYqgD,EAASgjE,IAAsB,kCACtFj0V,KAAKgxR,WAAaA,EAClBhxR,KAAK2jD,IAAM,UAAiBy8C,SAC5BpgG,KAAKoa,EAAIA,EACTpa,KAAKqa,EAAIA,EACTra,KAAKL,MAAQA,EACbK,KAAKH,OAASA,EACdG,KAAK4wO,WAAaA,EAClB5wO,KAAKixR,QAAUA,EACfjxR,KAAKi0V,qBAAuBA,GAA8C,c,6BAxB5ErjH,YAAa,E,KACbqgD,SAAU,E,KACVgjE,qBAAuB,a,KAyBvB/6L,UAAY,SAAC9wG,GACX,OAAO,IAAAk8G,aAAY,EAAK4vL,gBAAiB9rS,I,KAG3C8rS,cAAgB,WACd,IAAMv0V,EAAQ,EAAKA,MAAQ,UAAOqiD,aAC5BniD,EAAS,EAAKA,OAAS,UAAOmiD,aAEpC,OAAI,EAAK4uL,WACA,CACL,CAAC,EAAKx2N,EAAIza,EAAQ,EAAG,EAAK0a,EAAIxa,EAAS,GACvC,CAAC,EAAKua,EAAIza,EAAQ,EAAG,EAAK0a,EAAIxa,EAAS,GACvC,CAAC,EAAKua,EAAIza,EAAQ,EAAG,EAAK0a,EAAIxa,EAAS,GACvC,CAAC,EAAKua,EAAIza,EAAQ,EAAG,EAAK0a,EAAIxa,EAAS,IAGlC,CACL,CAAC,EAAKua,EAAG,EAAKC,GACd,CAAC,EAAKD,EAAIza,EAAO,EAAK0a,GACtB,CAAC,EAAKD,EAAIza,EAAO,EAAK0a,EAAIxa,GAC1B,CAAC,EAAKua,EAAG,EAAKC,EAAIxa,K,KAKxBo6D,OAAS,WACP,EAAKg6R,uBACL,UAAUzgH,YAAY,EAAKw9C,WACzB,EAAKrtO,IACL,EAAKvpC,EACL,EAAKC,EACL,EAAK1a,MACL,EAAKE,OACL,EAAK+wO,WACL,EAAKqgD,SAEH,UAAWpwR,aACb,UAAc8zJ,mBAAmB,EAAKu/L,mB,aAK7BF,G,kICnFHvzU,E,wJAAZ,O,IACA,O,IACA,O,uDAEqB0zU,E,WAenB,WAAY56V,GAA8C,IAAtCwN,EAAsC,uDAA9B,GAA8B,OAA1B+zG,EAA0B,uDAAjB,GAAI0iB,EAAa,uDAAJ,IAAI,0BAZ1D42N,gBAAkB,GAYwC,KAX1DrtV,MAAQ,CACNimD,UAAU,GAU8C,KAR1D8tD,OAAS,CACPvqD,SAAU,UAAaqJ,WAAW8jC,SAOsB,KAL1D8/B,OAAS,CACPhjE,UAAW,EACXK,YAAa,yBAG2C,KAS1Dn6D,UAAY,WACV,OAAO,EAAKnH,QAV4C,KAa1D8pF,UAAY,SAACnsF,GACX,EAAKqC,OAASrC,GAd0C,KAiB1D8zD,YAAc,WACZ,OAAO,EAAKzxD,OAAOyxD,eAlBqC,KAqB1DgL,KAAO,WACL,EAAKs0G,cAtBmD,KAmF1DvyG,iBAAmB,WACjB,UAAa6rC,YAAY,IApF+B,KAuF1D+uC,aAAe,WACb,EAAK23B,cAxFmD,KA0I1DrwG,OAAS,SAACtW,GACR,IAAI,YAAa,UAAUxhD,WAAWilD,QAAtC,CACA,IAAIitS,SAGJ,GAAI,EAAKD,gBAAgB3/V,OAAS,EAChC4/V,EAAe,EAAKC,mBAAmB,EAAKF,gBAAiB,QACxD,CACL,IAAMG,EAAe,EAAKh7V,OAAOw+I,sBACjCs8M,EAAe,EAAKC,mBAAmBC,EAAc,IAiBvD5wS,EAAIyuG,OACJzuG,EAAI+W,YACJ/W,EAAI6wS,YAAY,CAAC,EAAG,IACpBH,EAAaj2V,SAAQ,SAACvG,EAAGtD,GACb,IAANA,EAASovD,EAAIgX,OAAO9iE,EAAEuiB,EAAGviB,EAAEwiB,GAC1BspC,EAAIiX,OAAO/iE,EAAEuiB,EAAGviB,EAAEwiB,MAEzBspC,EAAIkX,YAAc,EAAK2iE,OAAO3iE,YAC9BlX,EAAI6W,UAAY,EAChB7W,EAAI6tG,YACJ7tG,EAAImX,SACJnX,EAAI0uG,YA/KoD,KAqN1DoiM,sBAAwB,SAACxuS,EAAQyuS,GAC/B,IAAIL,EAAe,GAEnBpuS,GAAUA,EAAOA,EAAOxxD,OAAO,IAA/B,qBAAsCwxD,GAAtC,CAA8CA,EAAO,GAAIA,EAAO,KAEhE,IAAK,IAAI1xD,EAAI,EAAGA,EAAI0xD,EAAOxxD,OAAO,EAAGF,IAAK,CACxC,IAAIgmF,EAAOt0B,EAAO1xD,EAAE,GAChBimF,EAAOv0B,EAAO1xD,GACd0tK,EAAOh8G,EAAO1xD,EAAE,GAEhBogW,EAAO,CAACv6U,EAAGogE,EAAKpgE,EAAImgE,EAAKngE,EAAGC,EAAGmgE,EAAKngE,EAAIkgE,EAAKlgE,GAC7Cu6U,EAAO,CAACx6U,EAAG6nJ,EAAK7nJ,EAAIogE,EAAKpgE,EAAGC,EAAG4nJ,EAAK5nJ,EAAImgE,EAAKngE,GAE7Cw6U,EAAQ,CAACz6U,EAAGu6U,EAAKt6U,EAAGA,GAAIs6U,EAAKv6U,GAC7B06U,EAAQ,CAAC16U,EAAGw6U,EAAKv6U,EAAGA,GAAIu6U,EAAKx6U,GAI7B26U,SAEFA,EAHeF,EAAMz6U,EAAI06U,EAAM16U,EAAIy6U,EAAMx6U,EAAIy6U,EAAMz6U,EAEpC,EACC,IAAN9lB,EAAUsgW,EAAQC,EAElB,CAAC16U,GAAIy6U,EAAMz6U,EAAI06U,EAAM16U,GAAK,EAAGC,GAAIw6U,EAAMx6U,EAAIy6U,EAAMz6U,GAAK,GAGlE,IAAI5lB,EAAS2V,KAAKynE,KAAKkjR,EAAQ36U,EAAI26U,EAAQ36U,EAAI26U,EAAQ16U,EAAI06U,EAAQ16U,GAC/D26U,EAAW,CAAC56U,EAAG26U,EAAQ36U,EAAI3lB,EAAQ4lB,EAAG06U,EAAQ16U,EAAI5lB,GAEtD4/V,EAAat/V,KAAK,CAChBqlB,EAAGogE,EAAKpgE,EAAI46U,EAAS56U,EAAIs6U,EACzBr6U,EAAGmgE,EAAKngE,EAAI26U,EAAS36U,EAAIq6U,IAG7B,OAAOL,GArPPr0V,KAAK+G,MAAQrS,OAAO+2B,OAAOzrB,KAAK+G,MAAOA,GACvC/G,KAAK86G,OAASpmH,OAAO+2B,OAAOzrB,KAAK86G,OAAQA,GACzC96G,KAAKw9H,OAAS9oI,OAAO+2B,OAAOzrB,KAAKw9H,OAAQA,GACzCx9H,KAAKzG,OAASA,EACdyG,KAAKgI,GAAKyY,EAAK4B,KACfriB,KAAKsqK,a,0DAoBL,UAAa7wG,SACX,UAAaC,OAAOC,WACpB35D,KAAK2oD,YAAYlxD,KAAKuI,MACtBA,KACAA,KAAK86G,OAAOvqD,UAEd,UAAakJ,SACX,UAAaC,OAAOI,WACpB95D,KAAKmoD,YAAY1wD,KAAKuI,MACtBA,KACAA,KAAK86G,OAAOvqD,UAEd,UAAakJ,SACX,UAAaC,OAAOK,SACpB/5D,KAAKwoD,UAAU/wD,KAAKuI,MACpBA,KACAA,KAAK86G,OAAOvqD,UAEd,UAAakJ,SACX,UAAaC,OAAOM,OACpBh6D,KAAKi6D,OAAOxiE,KAAKuI,MACjBA,KACAA,KAAK86G,OAAOvqD,Y,kJAcdvwD,KAAK+3D,qB,gCAIL/3D,KAAKyX,W,6BAIAzX,KAAK+G,MAAMimD,WACdhtD,KAAK+3D,mBACL/3D,KAAK+G,MAAMimD,UAAW,K,gCAKpBhtD,KAAK+G,MAAMimD,WACbhtD,KAAK2yI,eACL3yI,KAAK+G,MAAMimD,UAAW,K,6CAYH8J,EAAU/lC,GAAkC,WAAxBq/N,EAAwB,uDAAb,IACpD,GAAKt5L,GAKL,GAAIA,EAAS9uD,KAAOhI,KAAKzG,OAAOyO,GAAhC,CAIA,IAAMitV,EAAsBj1V,KAAKs0V,mBAAmBt0V,KAAKzG,OAAOw+I,sBAAuB,IACjFm9M,EAAiBl1V,KAAKs0V,mBAAmBx9R,EAASihF,sBAAuB,IAGzEu3I,GAAY,IAAI9sQ,MAAO2yU,UAEvB3nQ,EAAU,SAAVA,IAKJ,IAJA,IAAM4nQ,GAAU,IAAI5yU,MAAO2yU,UAAY7lE,EACjCn4R,EAAIiT,KAAKwwH,IAAIw6N,EAAUhlG,EAAU,GAEnCilG,EAAoB,GACf9gW,EAAI,EAAGA,EAAI6V,KAAKywH,IAAIo6N,EAAoBxgW,OAAQygW,EAAezgW,QAASF,IAAK,CAEpF,IAAM+gW,EAAWJ,EAAe3gW,EAAI2gW,EAAezgW,QAE7C8gW,EAAgBN,EAAoB1gW,EAAI0gW,EAAoBxgW,QAElE4gW,EAAkBtgW,KAAK,CACrBqlB,EAAGm7U,EAAcn7U,EAAIjjB,GAAKm+V,EAASl7U,EAAIm7U,EAAcn7U,GACrDC,EAAGk7U,EAAcl7U,EAAIljB,GAAKm+V,EAASj7U,EAAIk7U,EAAcl7U,KAIzD,EAAK+5U,gBAAkBiB,EAEnBl+V,EAAI,EACNk3F,sBAAsBb,IAEtB,EAAK4mQ,gBAAkB,GACvB,EAAK/wQ,UAAUvsB,GACf/lC,MAIJy8D,UA1CEx1F,QAAQC,MAAM,wB,yCAqFCguD,EAAQ2uB,GAGzB,IAFA,IAAI4gR,EAAgB,GAEXjhW,EAAI,EAAGA,EAAI0xD,EAAOxxD,OAAQF,IAAK,CACtC,IAAIyqI,EAAI/4E,EAAO1xD,GACX0qI,EAAIh5E,GAAQ1xD,EAAI,GAAK0xD,EAAOxxD,QAG5Bo/E,EAAKorD,EAAE7kH,EAAI4kH,EAAE5kH,EAKbq7U,EAJKx2N,EAAE5kH,EAAI2kH,EAAE3kH,EAKbq7U,GAAM7hR,EAGNp/E,EAAS2V,KAAKynE,KAAK4jR,EAAKA,EAAKC,EAAKA,GACtCD,GAAMhhW,EACNihW,GAAMjhW,EAGN+gW,EAAczgW,KAAK,CACjBqlB,EAAG4kH,EAAE5kH,EAAIq7U,EAAK7gR,EACdv6D,EAAG2kH,EAAE3kH,EAAIq7U,EAAK9gR,IAEhB4gR,EAAczgW,KAAK,CACjBqlB,EAAG6kH,EAAE7kH,EAAIq7U,EAAK7gR,EACdv6D,EAAG4kH,EAAE5kH,EAAIq7U,EAAK9gR,IAIlB,OAAO4gR,M,eAjOUrB,G,wFCJN,WACb,IAAMwB,EAAY,GAElB,MAAO,CACLhzP,GADK,SACFizP,EAAW7kU,GACP4kU,EAAUC,KACbD,EAAUC,GAAa,IAEzBD,EAAUC,GAAW7gW,KAAKg8B,IAE5BkoM,IAPK,SAOD28H,EAAW7kU,GACb,GAAK4kU,EAAUC,GAAf,CACA,IAAMhoV,EAAQ+nV,EAAUC,GAAW57V,QAAQ+2B,IAC5B,IAAXnjB,GACF+nV,EAAUC,GAAWjgW,OAAOiY,EAAO,KAGvC66L,KAdK,SAcAmtJ,EAAW3hW,GACT0hW,EAAUC,IACfD,EAAUC,GAAWx3V,SAAQ,SAAA2yB,GAAA,OAAYA,EAAS98B,U,mICnBxD,I,IAAA,S,IACA,OACA,S,0DAS0Cq+O,EAA7BA,2BAA6B,SAACrsL,EAAQ1sD,GAGjD,IAFA,IAAI2sD,EAAQ,GAEH3xD,EAAI,EAAGA,EAAI0xD,EAAOxxD,OAAQF,IAAK,CACtC,IAAMw7M,EAAY,IAAI,EAAJ,QAChB9pJ,EAAO1xD,GACP0xD,GAAQ1xD,EAAI,GAAK0xD,EAAOxxD,QACxB8E,EACAhF,GAKF2xD,EAAMnxD,KAAKg7M,GAGb,OAAO7pJ,GAUoB6rL,EAAhBA,cAAgB,SAAC33N,EAAGC,EAAG9gB,GAClC,IAAIymS,EAAa,CACfzvO,SAAU,UAAaqJ,WAAWujC,UAClCksH,SAAS,EACTunB,YAAY,EACZmC,kBAAkB,EAClBC,iBAAiB,EACjBnC,kBAAkB,GAEhBO,EAAc,CAChB/8L,OAAQ,EACRmmB,UAAW,EACXt/C,OAAQ,EAAAm2N,mBAAmBpiF,OAG7B,OAAO,IAAI,EAAJ,QAAY70I,EAAGC,EAAG9gB,EAAQymS,EAAY5uD,K,wHCpD/C,S,IACA,QACA,Q,IACA,O,IACA,OAEA,QACA,Q,IACA,Q,IACA,OACA,Q,uDAEMykH,G,cACJ,WAAYpkS,EAAM8G,EAAIh/D,EAAQmtK,IAAW,gGACjCj1G,EAAM8G,EAAIh/D,IADuB,UAGvC,EAAKq+D,aAAer+D,EACpB,EAAKmtK,UAAYA,EACjB,IAAMlpC,EAAS,CAAC2sG,UAAW,EAAAz+H,OAAO4oB,IAAKoJ,eAAgB,UAAiB9jE,WAAW0jC,YAC/Ek+B,EAAU,EACVD,EAAU,EACd,OAAQmrC,GACN,KAAK,EACHlrC,EAAU,EACVD,EAAU,GACV,MACF,KAAK,EACHC,EAAU,EACVD,GAAW,GACX,MACF,KAAK,EAIL,KAAK,EACHC,EAAU,EACVD,EAAU,GAvByB,OA4BvC,EAAK02G,uBAAyB,IAAI,EAAJ,QAAe,EAAG,CAACz2G,QAASA,EAASD,WAAUiC,EAA/C,UAAkE,EAAKs4N,sBAAsB,GA5BpF,E,oEA+BzCz9R,QAAU,SAACuyG,GACJA,IACH,UAAahnE,YAAY,GACzB,EAAKnyC,KAAK4G,QAAQuyG,GAClB,EAAKmrL,eAAe19R,UACpB,EAAK45K,uBAAuB55K,Y,KAIhCN,iBAAmB,SAAC6yG,GACbA,IACH,UAAahnE,YAAY,GACzB,EAAK52C,UAAW,EAChB,EAAKyE,KAAKsG,mBACV,EAAKg+R,eAAeh+R,mBACpB,EAAKk6K,uBAAuBl6K,qB,KAIhC46E,aAAe,WACT,EAAK3lF,WACP,EAAKs9G,aACL,EAAKt9G,UAAW,EAEhB,EAAKyE,KAAKkhF,eACV,EAAKojN,eAAepjN,eAEhB,EAAK/6E,aAAa26K,0CACD,EAAK36K,aAAa46K,iBAEnC,EAAKP,uBAAuBt/F,iB,KAMpCmjN,qBAAuB,SAACrpQ,EAAK+rM,EAAYw9D,GACvC,IAAIl+N,EAAOk+N,EAAYvpQ,EACvBqrC,EAAO,UAAWlrH,cAAgB,EAAAyjC,cAAcC,QAC5C,IAAAkmC,YAAWshD,GACXA,EAEJ,IAAMm+N,EAAiB,EAAKr+R,aAAai/E,eAAiBzsI,KAAKqnE,GAAK,IAG9DksD,EAAS7F,EAAO1tH,KAAKsnE,IAAIukR,GACzBr4N,EAAS9F,EAAO1tH,KAAKunE,IAAIskR,GAEzBr+R,EAAe,EAAKnG,KAAKl4D,OAE3B28V,EAAW,EACXC,EAAW,EACf,OAHkB,EAAKzvL,WAIrB,KAAK,EACHwvL,GAAYt4N,EACZu4N,GAAYx4N,EACZ,MACF,KAAK,EACHu4N,GAAYv4N,EACZw4N,GAAYv4N,EACZ,MACF,KAAK,EACHs4N,GAAYt4N,EACZu4N,GAAYx4N,EACZ,MACF,KAAK,EACHu4N,GAAYv4N,EACZw4N,GAAYv4N,EAIhB,IAAM+vD,EAAc,CAACvzK,EAAGw9C,EAAatQ,IAAIltC,EAAI87U,EAAU77U,EAAGu9C,EAAatQ,IAAIjtC,EAAI87U,GAC/Ev+R,EAAa/M,YAAY8iI,GACzB/1H,EAAakiF,cAAc4pB,eAAeiqB,I,KAQ5C+N,SAAW,SAAC7yI,EAAOC,GACjB,IAAMstS,EAAc,EAAK78V,OAAOujK,UAC5Bu5L,EAAgBD,EAAYz2V,MAC5B22V,EAAiBF,EAAYv2V,OAE3BlJ,GAAI,IAAA0hI,oBAAmB,EAAK5mE,KAAM,EAAK8G,IACvCq/D,GAAgB,IAAA0F,kBAAiB,EAAK7rE,KAAM,EAAK8G,IAEvD,GAAI5hE,IAAM,EAAAk/E,YAAYC,UACpB,GAAI8hD,IAAkB,EAAAxB,WAAWI,MAAO,CAEtC,IAAI+/N,EAAoBF,EAAgBxtS,EACpC,UAAWpE,uBAAyB8xS,GACpC,UAAW/xS,uBAAyB+xS,IAEtCF,EAAgBE,EAChB,EAAK9kS,KAAKr3C,GAAKyuC,EACf,EAAK0P,GAAGn+C,GAAKyuC,QAEV,GAAI+uE,IAAkB,EAAAxB,WAAWG,MAAO,CAC7C,IAAIggO,EAAoBF,EAAgBxtS,EACxC,GAAI,UAAWpE,uBAAyB8xS,GACnC,UAAW/xS,uBAAyB+xS,EACvC,CACAF,EAAgBE,EAChB,EAAKh9V,OAAOsxD,YAAY,CAACzwC,EAAG,EAAK7gB,OAAO+tD,IAAIltC,EAAIyuC,EAAOxuC,EAAG,EAAK9gB,OAAO+tD,IAAIjtC,IAC1E,EAAK9gB,OAAOu0O,mBAIZ,IAAM0oH,EAAe,EAAKC,kBAC1BD,EAAa/kS,KAAKr3C,GAAKyuC,EACvB2tS,EAAaj+R,GAAGn+C,GAAKyuC,SAQpB,GAAIlyD,IAAM,EAAAk/E,YAAYE,YAC3B,GAAI6hD,IAAkB,EAAAxB,WAAWE,KAAM,CACrC,IAAIigO,EAAoBD,EAAiBxtS,EACrC,UAAWrE,uBAAyB8xS,GACnC,UAAW/xS,uBAAyB+xS,IAEvCD,EAAiBC,EACjB,EAAK9kS,KAAKp3C,GAAKyuC,EACf,EAAKyP,GAAGl+C,GAAKyuC,QAEV,GAAI8uE,IAAkB,EAAAxB,WAAWC,KAAM,CAC5C,IAAIkgO,EAAoBD,EAAiBxtS,EACzC,GAAI,UAAWrE,uBAAyB8xS,GACnC,UAAW/xS,uBAAyB+xS,EACvC,CACAD,EAAiBC,EACjB,EAAKh9V,OAAOsxD,YAAY,CAACzwC,EAAG,EAAK7gB,OAAO+tD,IAAIltC,EAAGC,EAAG,EAAK9gB,OAAO+tD,IAAIjtC,EAAIyuC,IACtE,EAAKvvD,OAAOu0O,mBAIZ,IAAM0oH,EAAe,EAAKC,kBAC1BD,EAAa/kS,KAAKp3C,GAAKyuC,EACvB0tS,EAAaj+R,GAAGl+C,GAAKyuC,QAGpB,CACL,IAAM6zI,EAAW,EAAKpjM,OAAO6vK,YAAY,GACnC7vF,EAAW,EAAKhgF,OAAOigF,YAAY,IACzC,aAAiB,EAAMmjH,EAAUpjH,EAAU,EAAKxyE,MAAMqwL,kBAAmBtuI,EAAOnyD,GAKlF,EAAK4C,OAAO20O,oBACZ,EAAKwoH,gBAAgBL,EAAeC,I,KAEtC1rH,aAAe,kBAAM,UAAWnmL,uBAAyB,UAAWzB,yB,aAGvD6yS,G,sGC7MHp1U,E,wJAAZ,O,IAEA,O,IACA,O,IACA,OACA,QACA,QAOA,SACA,S,IACA,Q,IACA,Q,IACA,O,IACA,MACA,Q,IACA,Q,uDAEMk2U,E,WAOJ,WAAYllS,EAAM8G,EAAIh/D,GAAQ,sCAmB9BmvJ,WAAa,WACX,MAAO,CACL1gJ,GAAI,EAAKA,GACTypD,KAAM,EAAKA,KAAKi3F,aAChBnwF,GAAI,EAAKA,GAAGmwF,eAvBc,KA2B9Bv6F,WAAa,SAACgiL,GACZ,EAAKnoO,GAAKmoO,EAASnoO,GACnB,EAAKypD,KAAKtD,WAAWgiL,EAAS1+K,MAC9B,EAAK8G,GAAGpK,WAAWgiL,EAAS53K,KA9BA,KAiC9BlN,WAAa,WACX,OAAO,EAAKtkD,MAAMskD,YAlCU,KAqC9B3qD,UAAY,WACV,OAAO,EAAKnH,QAtCgB,KAyC9B+wK,WAAa,WACX,UAAa7wG,SACX,UAAaC,OAAOC,WACpB,EAAKhR,YACL,EACA,UAAaiR,WAAW0jC,YAE1B,UAAa7jC,SACX,UAAaC,OAAOI,WACpB,EAAK3R,YACL,EACA,UAAayR,WAAW0jC,YAE1B,UAAa7jC,SACX,UAAaC,OAAOK,SACpB,EAAKvR,UACL,EACA,UAAaoR,WAAW0jC,YAE1B,UAAa7jC,SACX,UAAaC,OAAOglC,YACpB,EAAKsC,aACL,EACA,UAAapnC,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOglC,YACpB,EAAKsC,aACL,EACA,UAAapnC,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOM,OACpB,EAAKC,OACL,EACA,UAAaL,WAAW0jC,aA5EE,KAgF9Bs5P,eAAiB,WACf,EAAKb,gBAAiB,IAAAt4N,sCAAqC,EAAKhsE,KAAM,EAAK8G,GAAI,EAAM,EAAKs+R,8BAA8B,IAjF5F,KAoF9Bx+R,QAAU,SAACuyG,GACJA,IACH,UAAahnE,YAAY,GACzB,EAAKnyC,KAAK4G,QAAQuyG,GAClB,EAAKmrL,eAAe19R,YAxFM,KA4F9BN,iBAAmB,WACjB,UAAa6rC,YAAY,GACzB,EAAK52C,UAAW,EAChB,EAAKyE,KAAKsG,mBACV,EAAKg+R,eAAeh+R,oBAhGQ,KAmG9B46E,aAAe,WACT,EAAK3lF,WACP,EAAKs9G,aACL,EAAKt9G,UAAW,EAEhB,EAAKyE,KAAKkhF,eACV,EAAKojN,eAAepjN,iBAzGM,KAuI9BmkN,kBAAoB,SAAC1uS,GACnB,IAAM2uS,GAAmB,IAAA77J,uBAAsB,EAAKzpI,KAClD,EAAK8G,GACL,EAAKilE,OAAOw5N,iBAGd,OAAO,IAAAz4Q,sBAAqBn2B,EAAU2uS,IA7IV,KAgJ9BpuS,YAAc,SAACP,EAAUjyD,GAMvB,IAAM8gW,EAAkB,EAAKH,kBAAkB1uS,GAG/C,GAFA,EAAKrhD,MAAMskD,WAAa4rS,EAEpB,EAAKlwV,MAAM+/C,WAAcmwS,EAAiB,CAC5C,GAAI,UAAU1tS,kBAAoB,EAAKkI,KAAK43G,iBAAmB,EAAK9wG,GAAG8wG,eAAgB,CAMrF,OALI,EAAKtiK,MAAM+/C,WACb,EAAKowS,kBAAkB9uS,GAEzB,UAAai7C,iBAAiB,EAAK9pG,QACnC,UAAa+uD,eACN,IAAA+vE,oBAAmB,EAAK5mE,KAAM,EAAK8G,KACxC,KAAK,EAAAsd,YAAYE,WACf,UAAaxtB,UAAU,WAAY,GACnC,MACF,KAAK,EAAAstB,YAAYC,SACf,UAAavtB,UAAU,WAAY,GACnC,MACF,KAAK,EAAAstB,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,UAAa1tB,UAAU,YAAa,GACpC,MACF,KAAK,EAAAstB,YAAYK,UACjB,KAAK,EAAAL,YAAYM,UACf,UAAa5tB,UAAU,YAAa,GAGxC,OAAO,EAAKxhD,MAAM+/C,UAGpB,GAAI,UAAWd,UAAUE,OAAS,EAAKn/C,MAAMskD,WAG3C,OAFA,UAAag4C,iBAAiB,EAAK9pG,QACnC,UAAa+uD,eACN,EASX,OAJI,UAAU8C,kBAAoB,EAAK7xD,SACrC,EAAKwN,MAAMskD,YAAa,GAE1B,UAAapC,YAAY,IAClB,GA/LqB,KAkM9B4tS,6BAA+B,SAACj+D,GAE9B,IACM9gK,GAFN8gK,GAAsB,UAAW51O,yBACT,IAAAsuB,kBAAiB,EAAK7f,KAAM,EAAK8G,KAEzD,aAAW,EAAMu/D,GAAM,GAGvB,IAAMs+N,EAAc,EAAK78V,OAAOujK,UAC5Bu5L,EAAgBD,EAAYz2V,MAC5B22V,EAAiBF,EAAYv2V,OAC3BlJ,GAAI,IAAA0hI,oBAAmB,EAAK5mE,KAAM,EAAK8G,IACvCq/D,GAAgB,IAAA0F,kBAAiB,EAAK7rE,KAAM,EAAK8G,IAEvD,GAAI5hE,IAAM,EAAAk/E,YAAYC,SAAU,CAC9B,EAAKv8E,OAAOsxD,YAAY,CAACzwC,EAAG,EAAK7gB,OAAO+tD,IAAIltC,EAAGC,EAAG,EAAK9gB,OAAO+tD,IAAIjtC,EAAIy9G,EAAO,KACzEF,IAAkB,EAAAxB,WAAWI,OAEtBoB,IAAkB,EAAAxB,WAAWG,SADtC+/N,EAAiB19D,GAInB,EAAKnnO,KAAKp3C,GAAKy9G,EAAO,EACtB,EAAKv/D,GAAGl+C,GAAKy9G,EAAO,EAEpB,IAAM0+N,EAAe,EAAKC,kBAC1BD,EAAa/kS,KAAKp3C,GAAKy9G,EAAO,EAC9B0+N,EAAaj+R,GAAGl+C,GAAKy9G,EAAO,OACvB,GAAInhI,IAAM,EAAAk/E,YAAYE,WAAY,CACvC,EAAKx8E,OAAOsxD,YAAY,CAACzwC,EAAG,EAAK7gB,OAAO+tD,IAAIltC,EAAI09G,EAAO,EAAGz9G,EAAG,EAAK9gB,OAAO+tD,IAAIjtC,KACzEu9G,IAAkB,EAAAxB,WAAWE,MAEtBsB,IAAkB,EAAAxB,WAAWC,QADtCggO,EAAgBz9D,GAKlB,EAAKnnO,KAAKr3C,GAAK09G,EAAO,EACtB,EAAKv/D,GAAGn+C,GAAK09G,EAAO,EAEpB,IAAM0+N,EAAe,EAAKC,kBAC1BD,EAAa/kS,KAAKr3C,GAAK09G,EAAO,EAC9B0+N,EAAaj+R,GAAGn+C,GAAK09G,EAAO,EAS9B,EAAKv+H,OAAO20O,oBACZ,EAAK30O,OAAOu0O,mBACZ,EAAK4oH,gBAAgBL,EAAeC,IApPR,KAuP9BY,kBAAoB,SAAC9uS,GAMnB,IAAMrG,EAAQ,UAAUkJ,WAClBpC,GAAS,EAAK9hD,MAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACxD+G,GAAS,EAAK/hD,MAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EACxDprD,GAAI,IAAA0hI,oBAAmB,EAAK5mE,KAAM,EAAK8G,IACzC5hE,IAAM,EAAAk/E,YAAYC,SACpB,EAAK/uE,MAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,EACjCzjB,IAAM,EAAAk/E,YAAYE,WAC3B,EAAKhvE,MAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,EAE1C,EAAKtT,MAAMggD,kBAAoBqB,EAOjC,EAAKszI,SAAS7yI,EAAOC,IA7QO,KAgR9B4yI,SAAW,SAAC7yI,EAAOC,GACjB,IAAMstS,EAAc,EAAK78V,OAAOujK,UAC5Bu5L,EAAgBD,EAAYz2V,MAC5B22V,EAAiBF,EAAYv2V,OAE3BlJ,GAAI,IAAA0hI,oBAAmB,EAAK5mE,KAAM,EAAK8G,IACvCq/D,GAAgB,IAAA0F,kBAAiB,EAAK7rE,KAAM,EAAK8G,IAEvD,GAAI5hE,IAAM,EAAAk/E,YAAYC,UACpB,GAAI8hD,IAAkB,EAAAxB,WAAWI,MAC/B6/N,GAAiBxtS,EACjB,EAAK4I,KAAKr3C,GAAKyuC,EACf,EAAK0P,GAAGn+C,GAAKyuC,OACR,GAAI+uE,IAAkB,EAAAxB,WAAWG,MAAO,CAC7C8/N,GAAiBxtS,EACjB,EAAKtvD,OAAOsxD,YAAY,CAACzwC,EAAG,EAAK7gB,OAAO+tD,IAAIltC,EAAIyuC,EAAOxuC,EAAG,EAAK9gB,OAAO+tD,IAAIjtC,IAC1E,EAAK9gB,OAAOu0O,mBAIZ,IAAM0oH,EAAe,EAAKC,kBAC1BD,EAAa/kS,KAAKr3C,GAAKyuC,EACvB2tS,EAAaj+R,GAAGn+C,GAAKyuC,QAElB,GAAIlyD,IAAM,EAAAk/E,YAAYE,YAC3B,GAAI6hD,IAAkB,EAAAxB,WAAWE,KAC/BggO,GAAkBxtS,EAClB,EAAK2I,KAAKp3C,GAAKyuC,EACf,EAAKyP,GAAGl+C,GAAKyuC,OACR,GAAI8uE,IAAkB,EAAAxB,WAAWC,KAAM,CAC5CigO,GAAkBxtS,EAClB,EAAKvvD,OAAOsxD,YAAY,CAACzwC,EAAG,EAAK7gB,OAAO+tD,IAAIltC,EAAGC,EAAG,EAAK9gB,OAAO+tD,IAAIjtC,EAAIyuC,IACtE,EAAKvvD,OAAOu0O,mBAIZ,IAAM0oH,EAAe,EAAKC,kBAC1BD,EAAa/kS,KAAKp3C,GAAKyuC,EACvB0tS,EAAaj+R,GAAGl+C,GAAKyuC,OAElB,CACL,IAAM6zI,EAAW,EAAKpjM,OAAO6vK,YAAY,GACnC7vF,EAAW,EAAKhgF,OAAOigF,YAAY,IACzC,aAAiB,EAAMmjH,EAAUpjH,EAAU,EAAKxyE,MAAMqwL,kBAAmBtuI,EAAOnyD,GAKlF,EAAK4C,OAAO20O,oBACZ,EAAKwoH,gBAAgBL,EAAeC,IAjUR,KAoU9BI,gBAAkB,SAACL,EAAeC,GAChC,IAAMa,EAAa,EAAK59V,OAAO4I,WAC3Bm0V,GAAkBa,EAAWtqH,eAAiBwpH,GAAiBc,EAAWrqH,cAC5E,EAAKvzO,OAAO+1O,QAAQ,CAClB3vO,OAAQ02V,EACRx2V,QAASy2V,IAIb,UAAUz9R,sBA7UkB,KAgV9Bs1K,iBAAmB,WACjB,IAAMv7J,GAAW,IAAAZ,aAAY,EAAKvgB,KAAM,EAAK8G,IACvC9R,GAAW,IAAA6qB,kBAAiB,EAAK7f,KAAM,EAAK8G,IAClD,EAAKw9R,eAAezuS,IAAIltC,EAAIw4D,EAASx4D,EACrC,EAAK27U,eAAezuS,IAAIjtC,EAAIu4D,EAASv4D,EACrC,EAAK07U,eAAe7+V,MAAQuvD,GArVA,KAwV9B62E,iBAAmB,WACjB,IAAM/jD,EAAW,EAAKhgF,OAAOigF,YAAY,GACnCmjH,EAAW,EAAKpjM,OAAO6vK,YAAY,GAEzC,OAAO,IAAAxtC,mBAAkB,EAAKnqE,KAAM,EAAK8G,GAAIokI,EAASpkI,GAAIghB,EAAS9nB,OA5VvC,KA+V9BwI,OAAS,SAACtW,GACR,EAAKwuS,eAAexuS,IAhWQ,KAmW9BwuS,eAAiB,SAACxuS,GAChB,IACMkkD,EADa,UAAM1lG,WACOytD,cAAci4C,aAC9C,GAAI,EAAK9gG,MAAMskD,YAAcw8C,IAAiB,EAAAp2D,2BAA2B0C,OAAQ,CAC/E,IAAIijT,GAAiB,IAAA7sS,eAAc,EAAKkH,KAAKr3C,EAAG,EAAKq3C,KAAKp3C,EAAG,EAAK9gB,QAC9D89V,GAAe,IAAA9sS,eAAc,EAAKgO,GAAGn+C,EAAG,EAAKm+C,GAAGl+C,EAAG,EAAK9gB,QAK5DoqD,EAAI+W,YACJ/W,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,UAAa,UAAW72D,aAAa6wH,QACvDlxE,EAAIgX,OAAOy8R,EAAeh9U,EAAGg9U,EAAe/8U,GAC5CspC,EAAIiX,OAAOy8R,EAAaj9U,EAAGi9U,EAAah9U,GAExCspC,EAAImX,SACJnX,EAAI6tG,cApXsB,KAwX9BilM,gBAAkB,WAChB,IAAMvwS,EAAQ,EAAK3sD,OAAOkyD,WACpBi7G,EAAYxgH,EAAMlsD,QAAQ,GAGhC,OAAOksD,GAFoBwgH,EAAY,GAAK,IA3XhB,KAgY9B97G,UAAY,WACV,IAAI7I,EAAQ,UAAWA,MACnBw8G,EAAe,UAAU3zG,YAC7B,GAAI,EAAKrxD,OAAQ,CACf,IAAIilK,EAAO,EAAKjlK,OAAOyxD,cAIvB,OAHI,UAAWpI,UAAUqC,aACvBu5G,EAAO,EAAKjlK,OAAOklK,sBAEd,CACLrkJ,EAAGmkJ,EAAankJ,EAAKokJ,EAAKpkJ,EAAI2nC,EAC9B1nC,EAAGkkJ,EAAalkJ,EAAKmkJ,EAAKnkJ,EAAI0nC,GAGhC,MAAO,CAAC3nC,EAAG,EAAGC,EAAG,IA7YS,KAiZ9Bi+C,mBAAqB,WACnB,OAAO,GAlZqB,KAqZ9B5M,cAAgB,WACd,OAAO,GAtZqB,KAyZ9BQ,cAAgB,WACd,OAAO,GAzZPlsD,KAAKgI,GAAKyY,EAAK4B,KACfriB,KAAKyxD,KAAOA,EACZzxD,KAAKu4D,GAAKA,EACVv4D,KAAKzG,OAASA,EACdyG,KAAKw9H,OAAS,CACZs6D,cAAe,EACfk/J,gBAAiB,IAEnBh3V,KAAK+G,MAAQ,CACXskD,YAAY,EACZvE,WAAW,EACXC,kBAAmB,KACnBqwI,kBAAmB,MAErBp3L,KAAK42V,iBACL52V,KAAKsqK,a,4DA8FLtqK,KAAK+G,MAAMskD,YAAa,EACxBrrD,KAAK+G,MAAM+/C,WAAY,I,gCAGfsB,EAAUjyD,GAGd6J,KAAK+G,MAAM+/C,YACb9mD,KAAK+G,MAAM+/C,WAAY,EACvB9mD,KAAK+G,MAAMggD,kBAAoB,Q,kCAKvBqB,EAAUjyD,GAEpB,QAAI6J,KAAK+G,MAAMskD,aACbrrD,KAAK+G,MAAM+/C,WAAY,EACvB9mD,KAAK+G,MAAMqwL,mBAAoB,IAAA9lH,kBAAiBtxE,KAAKyxD,KAAMzxD,KAAKu4D,IAChEv4D,KAAK+G,MAAMggD,kBAAoBqB,GACxB,O,eA4REuuS,G,iJC3bf,Q,IACA,O,IACA,O,IACA,Q,IACA,M,IACA,O,IACA,OACA,S,OACA,QACA,QACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,uDAEqBW,G,aAKnB,WAAY19S,IAAO,kCACjB55C,KAAKm9R,QAAUvjP,EAEf55C,KAAKu3V,yBACD39S,aAAiBA,EAAjBA,SACF55C,KAAKw3V,kB,8DAKP,OAAOx3V,KAAKm9R,QAAQxjI,oB,wCAIpB,OAAO35J,KAAKy3V,iB,0CAIZ,GAAIz3V,KAAKm9R,mBAAL,UAAmC,CACrC,IAAMj3O,EAAQlmD,KAAKm9R,QAAQ1xO,WADU,uBAErC,YAAmBvF,EAAnB,+CAA0B,SACnBuL,KAAK64G,cAHyB,iF,wCASvC,IAAMpkH,EAAQlmD,KAAKm9R,QAAQ1xO,WADX,uBAEhB,YAAmBvF,EAAnB,+CAA0B,SACnBuL,KAAKsG,oBAHI,kF,kCA7BlB0/R,eAAiB,G,KACjBC,mBAAqB,K,KAmCrBH,uBAAyB,WACvB,IAD6B,EAEzB,EAAKp6D,mBAAL,UACa,UAAiB3jJ,qBAAqB,EAAK2jJ,SAAS,GAAM,GAE1D,UAAiB3jJ,qBAAqB,EAAK2jJ,SAAS,GAAM,GAEpEvoJ,EAPsB,EAOtBA,KAAMC,EAPgB,EAOhBA,KAAMC,EAPU,EAOVA,KAAMC,EAPI,EAOJA,KACzB/8I,QAAQ4B,IAAI,yBAA0Bg7I,EAAMC,EAAMC,EAAMC,GAExD,IAAI47F,EAAc,CAChBpgL,SAAU,UAAaqJ,WAAWujC,UAClCksH,SAAS,EACTunB,YAAY,EAIZC,kBAAkB,EAGlBC,aAAc,SAAC1oL,EAAU+jQ,GAEvB,IAAM7xL,EAAa,UAAMn4H,WAAWwH,cAAcimJ,eAC5Ch2G,EAAQuyQ,EAAap7E,YACrBzmL,EAAc1Q,EAAMkQ,YACpB6tS,GAAqB,IAAAptS,eAAcD,EAAYlwC,EAAGkwC,EAAYjwC,EAAGu/B,GACjEg+S,GAAsB,IAAArtS,eAAc4hQ,EAAaz3O,KAAMy3O,EAAax3O,KAAM/6B,GAC1Ei+S,EAAsB,CAACz9U,EAAGu9U,EAAmBv9U,EAAGC,EAAGs9U,EAAmBt9U,EAAI,IAC5EomR,GAAqB,IAAA1hK,wBAAuB32E,EAAUuvS,EAAoBE,GAC1EhhN,SAGJ,GAFaA,EAAbvc,EAA8B1gF,EAAMg9F,mBAAsCh9F,EAAMi9F,eAE3Ej9F,EAAMw7F,eAAX,CAKKx7F,EAAMw7F,eAAesiN,qBACxB99S,EAAMw7F,eAAesiN,oBAAqB,IAAA34N,wBAAuB64N,EAAqBD,EAAoBE,GAC1Gj+S,EAAMw7F,eAAesiN,mBAAqBtvS,EAAShuC,EAAIu9U,EAAmBv9U,EAAI,IAAMw/B,EAAMw7F,eAAesiN,mBAAqB99S,EAAMw7F,eAAesiN,oBAKrJ,IAAMI,EAAqB1vS,EAAShuC,EAAIu9U,EAAmBv9U,EAAI,IAAMqmR,EAAqBA,EACpFs3D,EAAwCn+S,EAAMw7F,eAAesiN,mBAAqBI,EAAqBjhN,EAIvGmhN,GAHuB5tV,KAAKC,MAAM0tV,GAGuB,IAAM,KAAO,IAE5E,GAAIC,EAAgC,CAClC,EAAK76D,QAAQ5pP,OAAOykT,EAAgCp+S,EAAM68F,UAAUC,KAAMpc,EAAY,EAAK29N,kBAO3F39N,EACI1gF,EAAMg9F,oBAAsBh9F,EAAMg9F,mBAAqB,IAAM,KAAO,IACpEh9F,EAAMi9F,gBAAkBj9F,EAAMi9F,eAAiB,IAAM,KAAO,IAGhE,IACML,EADQ,UAAMr0I,WACKytD,cAAcm6C,kBAAkBj+F,MAAK,SAAA0qI,GAAA,OAAcA,EAAWxuI,KAAO,QAAU4xC,EAAM5xC,MACxGkwV,EAAsB59N,EAAa1gF,EAAMg9F,mBAAqBh9F,EAAMi9F,eAC1E,UAAM5yH,UAAS,IAAAgmF,mBAAA,gBACVusC,EADU,CAEbt/I,MAAOghW,SAoBbhnH,gBAAiB,SAAC9oL,EAAU+jQ,GACZA,EAAap7E,YACrB37F,eAAesiN,mBAAqB,OAG1CtmH,EAAc,CAChB/8L,OAAQ,EACRmmB,UAAW,EACXt/C,OAAQ,EAAAm2N,mBAAmBh0E,OAE7B,EAAKo6L,eAAiB,CACpB,IAAI,EAAJ,QAAY7iN,EAAME,EAAM,EAAKqoJ,QAASxsD,EAAaS,GACnD,IAAI,EAAJ,QAAYv8F,EAAMC,EAAM,EAAKqoJ,QAASxsD,EAAaS,GACnD,IAAI,EAAJ,QAAYv8F,EAAME,EAAM,EAAKooJ,QAASxsD,EAAaS,GACnD,IAAI,EAAJ,QAAYx8F,EAAMG,EAAM,EAAKooJ,QAASxsD,EAAaS,K,KAIvD/4K,QAAU,WAAM,2BACd,YAA0B,EAAKo/R,eAA/B,+CAA+C,SACjCp/R,WAFA,+E,KAMhB2xG,2BAA6B,SAACL,EAAan1H,EAAO8lF,GAChD,GAAI,EAAK6iK,QAAS,4BAChB,YAA0B,EAAKg7D,kBAA/B,+CAAkD,SACpC5kT,OAAOo2H,EAAan1H,EAAO8lF,IAFzB,gF,KAOpB89N,0BAA4B,WAC1B,IAAIC,EAAyB,GADG,uBAEhC,YAA2B,EAAKZ,eAAhC,+CAAgD,KAArCpkE,EAAqC,QAC9CglE,EAAuBtjW,MACrB,IAAAw1D,eAAe8oO,EAAax6J,eAAeC,UAAWu6J,EAAax6J,eAAeE,UAAW,EAAKokK,WAJtE,6EAQhC,OAAOk7D,G,KAGTp+R,OAAS,SAACtW,GAA4C,IAAvC+oQ,EAAuC,uDAA7B,EAAAn6Q,iBAAiBC,QAExC,EAAK25L,kBAAkBxoL,EAAK,EAAKw5O,SACjC,EAAKm7D,kBAAkB30S,EAAK,EAAKw5O,SAC7B,EAAKA,mBAAL,WACF,EAAKsuB,YAAY9nQ,EAAK+oQ,I,KAI1BjB,YAAc,SAAC9nQ,GAA4C,IAAvC+oQ,EAAuC,uDAA7B,EAAAn6Q,iBAAiBC,QAC7C,IAAI,YAAa,UAAUrwC,WAAWilD,QAAtC,CACA,IAAMkzE,EAAa,UAAUA,aACzBp0E,EAAQ,EAAKi3O,QAAQ1xO,WAEzB9H,EAAI+W,YACJ,IAAK,IAAInmE,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC2xD,EAAM3xD,GAAG0lE,OAAOtW,EAAKpvD,EAAI,GAQ3B,OANI,EAAK4oS,QAAQ9xO,cAAgB,UAAUD,kBAAoB,EAAK+xO,QAClEx5O,EAAIkX,YAAc,UAAa,UAAW72D,aAAa+wH,aAEvDpxE,EAAIkX,YAAc,UAAa,UAAW72D,aAAa4nG,OAEzDjoD,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAaurJ,gBAC7Cm9J,GACN,KAAK,EAAAn6Q,iBAAiBE,UACpBkR,EAAI6W,UAAY,EAChB7W,EAAI88E,OACJ98E,EAAI6tG,YACJ,MACF,KAAK,EAAAj/G,iBAAiBC,QACtB,QACEmR,EAAIwuG,UAAY73B,EAAa,UAAa,UAAWt2H,aAAaurJ,gBAAkB,EAAK4tI,QAAQliI,eACjGt3G,EAAI6W,UAAY,EAChB7W,EAAI88E,OACJ98E,EAAI6tG,YACJ7tG,EAAImX,SAIR,GAAI,EAAKqiO,QAAQ9xO,cAAgB,UAAUC,wBAA0B,EAAK6xO,QACpD,UAAMh7R,WAAWytD,gB,KAKzCu8K,kBAAoB,SAACxoL,GACnBA,EAAI+W,YACJ/W,EAAI6W,UAAY,EAEhB,IAAIy/D,GAAa,IAAA1vE,eACf,EAAKktS,eAAe,GAAG5+N,eAAeC,UACtC,EAAK2+N,eAAe,GAAG5+N,eAAeE,UACtC,EAAKokK,SAEPx5O,EAAIgX,OAAOs/D,EAAW7/G,EAAG6/G,EAAW5/G,GATT,2BAW3B,YAA0B,EAAKo9U,eAA/B,+CAA+C,KAApCc,EAAoC,QAC7Ct+N,GAAa,IAAA1vE,eACXguS,EAAY1/N,eAAeC,UAC3By/N,EAAY1/N,eAAeE,UAC3B,EAAKokK,SAEPx5O,EAAIiX,OAAOq/D,EAAW7/G,EAAG6/G,EAAW5/G,IAjBX,6EAoB3BspC,EAAIkX,YAAc,UAAa,UAAW72D,aAAa4nG,OACvDjoD,EAAI6tG,YACJ7tG,EAAImX,U,KAGNw9R,kBAAoB,SAAC30S,GACnB,IAAIovB,EAAM,EAAK0kR,eAAehjW,OACxB4jW,EAAyB,EAAKD,4BACpC,IAAK,IAAMxqV,KAASyqV,EAElB,GAAIA,EAAuBzjW,eAAegZ,GAAQ,CAChD,IAAI4mG,EAAU6jP,GAAwBzqV,GAClCulR,EAAWklE,IAAyBzqV,EAAQmlE,EAAM,GAAKA,GACvDkvF,EAAOo2L,IAAyBzqV,EAAQ,GAAKmlE,GAEjDpvB,EAAIyuG,OACJzuG,EAAI+W,YAYJ,IAAMjJ,GAAO,IAAAyqB,mBAAkBs4B,EAAS2+K,EAAU,IAC5C56N,GAAK,IAAA2jB,mBAAkBs4B,EAASytD,EAAM,IAnBI,GAoBlB,IAAApvF,mBAAkBphB,EAAM+iD,EAAQ,IApBd,qBAoB/B0gD,GApB+B,WAsBhD,UAAcf,iBAAiBxwG,EAC7B8N,EAAKr3C,EAAGq3C,EAAKp3C,EACbk+C,EAAGn+C,EAAGm+C,EAAGl+C,EACT66I,EAAU96I,EAAG86I,EAAU76I,EACvB,IAMFspC,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,wBAClBlX,EAAIwuG,UAAY,wBAChBxuG,EAAImX,SACJnX,EAAI6tG,YACJ7tG,EAAI0uG,a,aA3RSilM,G,0JCLnB,WAAYtvV,EAAI4yH,EAAKC,EAAK9pE,EAAiB2sP,EAAkBC,EAAkBC,EAAqB1mT,EAAOwkC,IAAU,qBACnH17B,KAAKgI,GAAKA,EACVhI,KAAK46H,IAAMA,EACX56H,KAAK66H,IAAMA,EACX76H,KAAK+wD,gBAAkBA,EACvB/wD,KAAK09S,iBAAmBA,EACxB19S,KAAK29S,iBAAmBA,EACxB39S,KAAK49S,oBAAsBA,EAC3B59S,KAAK9I,MAAQA,EACb8I,KAAK07B,SAAWA,I,qJCpBpB,SACA,Q,IACA,M,IACA,OACA,U,qDAEa88T,kB,YAEX,WAAYltP,IAAO,gGACXA,IADW,OAEjB,EAAK8iG,aAAe,EAAAtxJ,oBAAoBE,QAFvB,E,kFAMjB,IACMuwJ,EADa,UAAMprM,WACU+qD,kBAAkBqgJ,gBAC/Cp6J,EAAS,UAAUgY,YAHT,uBAIhB,YAAoBhY,EAApB,+CAA4B,KAAjByG,EAAiB,QACtB2zJ,EAAgBpzM,SAASy/C,EAAMtzC,SACjCtG,KAAKy4V,oBAAoB7+S,IANb,gF,0CAWEA,GAClB,IACM3oC,EADa,UAAM9O,WACU+qD,kBAAkBj8C,gBAC/Ci1C,EAAQtM,EAAM6R,WACpB,IAAK,IAAMi7G,KAAaxgH,EACtB,GAAmB,IAAdwgH,GACCxgH,EAAMtxD,eAAe8xK,GAAY,CACnCxgH,EAAMwgH,GAAW6yB,YAAYtoL,EAAgBuK,KAAK7X,UAAUqE,IAC5D,IAAMqrU,EAAcrzU,KAAK04V,aAAaznV,EAAgBuK,KAAK7X,UAAUi4O,mBAAoB,KACzF11L,EAAMwgH,GAAW+yB,eAAe45I,GAChCrzU,KAAKg5D,YAAY,IAAI,EAAJ,iBAAqB9S,EAAMwgH,GAAW1+J,GAAIiJ,EAAgBuK,KAAK7X,UAAUqE,Q,mCAcrFmsU,EAAMwkB,GACjB,IAAKxkB,EACH,OAAO,KAGT,IAAMykB,EAAYzkB,EAAKntU,QAAO,SAAAoQ,GAAA,OAAOA,EAAIq6K,SAAS,WAElD,IAAKmnK,EAAUnkW,OACb,OAAO,KAIT,GAAIkkW,EAAQ,CACV,IAAME,EAAkBD,EAAU9sV,MAAK,SAAAsL,GAAA,OAAOA,EAAIq6K,SAAJ,IAAiBknK,EAAjB,WAC9C,GAAIE,EACF,OAAOA,EAIX,OAAOD,EAAU,K,sCAIjB,OAAO54V,KAAKi/J,a,uLCvEJx+I,E,wJAAZ,OACA,S,EAEaq4U,iBAMX,WAAYC,EAAQC,GAA4C,IAAlC3pS,EAAkC,uDAAtB,KAAMrnD,EAAgB,uDAAXyY,EAAK4B,MAAM,qBAC9DriB,KAAKgI,GAAKA,EACVhI,KAAK+4V,OAASA,EACd/4V,KAAKovD,UAAY4pS,EACjBh5V,KAAKqvD,UAAYA,IAAwB,IAAAqC,kB,mJCb7C,SACA,Q,IACA,O,qDAGaunS,gB,YAEX,WAAY3tP,IAAO,gGACXA,IADW,OAEjB,EAAK8iG,aAAe,EAAAtxJ,oBAAoBG,MAFvB,E,+EAKJi8S,GACb,OAAO,UAAUj8S,MAAMnxC,MAAK,SAAAypC,GAAQ,2BAClC,YAAwBA,EAAK2qH,YAA7B,+CAA0C,CACxC,GADwC,QAC1Bl4J,KAAOkxV,EAAYlxV,GAC/B,OAAOutC,GAHuB,qF,uLCb5B90B,E,wJAAZ,OACA,SACA,QACA,UACA,S,qDAEa04U,sB,YAkEX,WAAY7tP,IAAO,gGACXA,IADW,SAhEnB8tP,iBAAmB,CACjB,CACEpxV,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,yBACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,yBACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,yBACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,4BACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,4BACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,2BACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,4BACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,4BACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,0BACTkgH,eAAgB,UAChBjgH,cAAe,2BACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,0BACTkgH,eAAgB,UAChBjgH,cAAe,2BACf,CACA9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,2BACTkgH,eAAgB,UAChBjgH,cAAe,4BACd,CACD9sH,GAAIyY,EAAK4B,KACTwyG,QAAS,0BACTkgH,eAAgB,UAChBjgH,cAAe,2BAMjB,EAAKs5E,aAAe,EAAAtxJ,oBAAoBI,YAFvB,E,yFAKMkS,GACvB,OAAOpvD,KAAKk4H,eAAepsH,MAAK,SAAAqhM,GAAA,OAAYA,EAAS/9I,YAAcA,O,4DAG/BA,GACpC,IAAIgrG,EAAWp6J,KAAKq5V,yBAAyBjqS,GAC7C,OAAKgrG,GACIp6J,KAAKs5V,iBAAiBlqS,K,0CAM/B,MAAO,CACLr4D,EAAGqT,KAAKouE,MAAsB,IAAhBpuE,KAAKkhF,UACnBiuQ,EAAGnvV,KAAKouE,MAAsB,IAAhBpuE,KAAKkhF,UACnB1iF,EAAGwB,KAAKouE,MAAsB,IAAhBpuE,KAAKkhF,a,qCAIc,IAAxBv0F,EAAwB,EAAxBA,EAAGwiW,EAAqB,EAArBA,EAAG3wV,EAAkB,EAAlBA,EAAIg6M,EAAc,uDAAL,GAC9B,MAAO,CACL7rN,EAAGqT,KAAKouE,MAAMzhF,EAAI6rN,GAClB22I,EAAGnvV,KAAKouE,MAAM+gR,EAAI32I,GAClBh6M,EAAGwB,KAAKouE,MAAM5vE,EAAIg6M,M,uCAILxzJ,GAAW,WACtBgrG,EAAWp6J,KAAKo5V,iBAAiBttV,MAAK,SAAA4L,GAAA,OAAQ,EAAK8hV,gBAAgB9hV,EAAI1P,OAC3E,GAAKoyJ,EAWHp6J,KAAKo5V,iBAAmBp5V,KAAKo5V,iBAAiBpyV,QAAO,SAAA0Q,GAAA,OAAOA,EAAI1P,KAAOoyJ,EAASpyJ,UAXnE,CACb,IAAMyxV,EAAYz5V,KAAK05V,oBACjBlsH,EAAaisH,EAEnBr/L,EAAW,CACTpyJ,GAAIyY,EAAK4B,KACTwyG,gBAAiB4kO,EAAU1iW,EAA3B,KAAiC0iW,EAAUF,EAA3C,KAAiDE,EAAU7wV,EAA3D,UACAmsO,sBAAuB0kH,EAAU1iW,EAAjC,KAAuC0iW,EAAUF,EAAjD,KAAuDE,EAAU7wV,EAAjE,IACAksH,qBAAsB04G,EAAWz2O,EAAjC,KAAuCy2O,EAAW+rH,EAAlD,KAAwD/rH,EAAW5kO,EAAnE,WAMJ,IAAM26E,GAAc,IAAAk4E,oBAAmBrsG,GAEjCuqS,EAAkB,IAAI,EAAJ,gBACtBv/L,EAASpyJ,GACTonD,EACAm0B,EACA62E,EAASvlC,QACTulC,EAAS26E,eACT36E,EAAStlC,eAKX,OAFA90H,KAAKg5D,YAAY2gS,GAEVA,M,wLCtIEC,gBAOX,WAAY5xV,EAAIonD,EAAWm0B,EAAasxC,EAASkgH,EAAgBjgH,IAAe,qBAC9E90H,KAAKgI,GAAKA,EACVhI,KAAKovD,UAAYA,EACjBpvD,KAAKujF,YAAcA,EACnBvjF,KAAK60H,QAAUA,EACf70H,KAAK+0O,eAAiBA,EACtB/0O,KAAK80H,cAAgBA,I,6ICbzB,SACA,Q,IAMA,M,IACA,SACA,S,IACA,OACA,U,qDAEa+kO,oB,YAEX,WAAYvuP,IAAO,gGACXA,IADW,SAMnB+wF,uBAAyB,SAACttI,GAA+B,IAAzB8sI,EAAyB,uDAAT,KACxCxX,EAAa,UAAMliL,WACnBs6C,EAAwB4nI,EAAWn3H,kBAAkBzQ,sBACrDimH,EAAmB,IAAI,EAAJ,QAAqB3zG,EAAMtS,EAAsBhoD,OAAS,EAAGonM,GAKtF,OAHA,EAAK7iI,YAAY0pG,GACjB,EAAKo3L,oBAAoBp3L,GAElBA,GAdU,EAiBnBshC,gCAAkC,SAACj1I,GAA+B,IAAzB8sI,EAAyB,uDAAT,KACjDxX,EAAa,UAAMliL,WACnBs6C,EAAwB4nI,EAAWn3H,kBAAkBzQ,sBAErDm3O,EAAen3O,EAAsBhoD,OAAS,EAC9CiuK,EAAmB,IAAI,EAAJ,QAAqB3zG,EAAM6kO,EAAc/3F,EAAe,EAAAv9I,uBAAuBZ,oBAKxG,OAHA,EAAKsb,YAAY0pG,GACjB,EAAKo3L,oBAAoBp3L,GAElBA,GA3BU,EA8BnBxqC,aAAe,WACb,OAAO,UAAU,EAAKk2E,eA/BL,EAkCnBzrC,oBAAsB,SAAC36J,GACrB,OAAO,UAAU,EAAKomM,cAActiM,MAAK,SAAAiuV,GAAA,OAAoBA,EAAiBhrS,KAAK/mD,KAAOA,MAnCzE,EAsCnB8qV,eAAiB,SAAC9qV,GAAO,2BACvB,YAAsB,EAAKkwH,eAA3B,+CAA2C,KAAhC9/D,EAAgC,+BACzC,YAAsBA,EAAQw7L,cAA9B,+CAA6C,KAAlCC,EAAkC,QAC3C,GAAIA,EAAQ7rP,KAAOA,EACjB,OAAO6rP,GAH8B,+EADpB,+EAtCN,EAgDnB7jD,sBAAwB,SAACjhJ,GACvB,GAAIA,EAAKyzG,2BAA6BzzG,EAAK0zG,+BAAgC,CACzE,IAAMC,EAAmB,EAAKC,oBAAoB5zG,EAAK/mD,IADkB,uBAEzE,YAAsC06J,EAAiBkxF,cAAvD,+CAAsE,KAA3DomG,EAA2D,QAIpE,GAHIA,EAAwBvjW,OAAS,EAAA8mD,qBAAqBX,YACxDo9S,EAAwBvlW,OAASs6D,EAAKyF,iBAEpCwlS,EAAwBvjW,OAAS,EAAA8mD,qBAAqB1C,aAAc,CACtE,IAAM8hJ,EAAW5tI,EAAKruD,YAAY0oK,YAAYr6G,GAC9CirS,EAAwBvlW,OAASkoM,EAASnoI,kBAR2B,6EAWzE,EAAKylS,8BAA8Bv3L,EAAiBha,gBA5DrC,EAgEnBuxM,8BAAgC,SAACC,GAC/B,UAAMj2U,UAAS,IAAAmpL,gBAAe,EAAA7wJ,cAAcE,sBAAuBy9S,KAjElD,EAoEnBJ,oBAAsB,SAACp3L,GACrB,UAAMz+I,UAAS,IAAA+0C,aAAY,EAAAzc,cAAcE,sBAAuBimH,EAAiBha,gBArEhE,EAwEnBrwF,QAAU,SAACqqG,GACT,UAAMz+I,UAAS,IAAAopL,gBAAe,EAAA9wJ,cAAcE,sBAAuBimH,EAAiB16J,KACpF,EAAKojT,gBAAgB1oJ,IAxErB,EAAK0rC,aAAe,EAAAtxJ,oBAAoBF,UACxC,EAAKu9S,kBAAoB,IAAI,EAAJ,8BAHR,E,4KCfrB,O,IACA,O,IACA,SACA,Q,IACA,OACA,S,uDAEqBC,G,EAWnB,WAAYrrS,EAAM6kO,EAAczlO,GAAqD,IAAzC/iD,EAAyC,uDAAlC,EAAAkzC,uBAAuB1B,UAKxE,IALmF,kCACnF58C,KAAK+uD,KAAOA,EACZ/uD,KAAK4zR,aAAeA,EACpB5zR,KAAKgI,IAAK,eACVhI,KAAKoL,KAAOA,EACR+iD,EACFnuD,KAAKmuD,WAAWA,QAEhB,OAAQ/iD,GACN,KAAK,EAAAkzC,uBAAuBZ,mBAC1B19C,KAAKq6V,mCACL,MACF,KAAK,EAAA/7S,uBAAuB1B,UAC5B,QACE58C,KAAKs6V,4B,6BApBbvzV,MAAQ,G,KAERy2H,OAAS,G,KAET5oE,SAAW,G,KAsBXg/L,YAAc,WAAQ,OAAO,EAAKh/L,U,KAClC2lS,mBAAqB,WAAQ,OAAO,EAAK3lS,SAAS5tD,QAAO,SAAA6sP,GAAA,OAAYA,EAAQlkJ,e,KAC7EjvG,UAAY,WAAQ,OAAO,EAAKquD,M,KAChCkmO,YAAc,SAAC/9R,GAAY,EAAK09D,SAAW19D,G,KAC3CsjW,WAAa,SAAC3mG,GAAc,EAAKj/L,SAAS7/D,KAAK8+P,I,KAE/Cx7L,QAAU,SAACuyG,GACJA,IACH,UAAahnE,YAAY,GACzB,EAAKhvC,SAASx2D,SAAQ,SAACy1P,GACrBA,EAAQx7L,e,KAKdiyG,WAAa,a,KAGbvyG,iBAAmB,WACjB,UAAa6rC,YAAY,I,KAG3B+uC,aAAe,WACb,EAAK23B,c,KAGPrL,OAAS,WACP,OAAO,EAAKvW,c,KAGdA,WAAa,WACX,MAAO,CACL1gJ,GAAI,EAAKA,GACT+wV,OAAQ,EAAKhqS,KAAK/mD,GAClBjB,MAAO,EAAKA,MACZqE,KAAM,EAAKA,KACXwpD,SAAU,EAAKA,SAAS9sD,KAAI,SAAC+rP,GAC3B,OAAOA,EAAQnrG,kB,KAKrBv6F,WAAa,SAACA,GACZ,EAAKpnD,MAAQonD,EAAWpnD,MADG,2BAE3B,YAA0BonD,EAAWyG,SAArC,+CAA+C,KAApC6lS,EAAoC,QAC7C,EAAKD,WAAW,IAAI,EAAJ,QACdC,EAAYjjW,IACZijW,EAAYhkW,KACZgkW,EAAYhmW,OACZgmW,EAAY56V,OACZ46V,EAAYltH,UACZ,EACAktH,EAAY9qP,cAVW,+E,KAe7B2qP,wBAA0B,WACxB,IAAM39J,EAAW,EAAK5tI,KAAKruD,YAAY0oK,YAAY,EAAKr6G,MAClDw+K,EAAmC,aAAvB,UAAO3gO,YAA6B,IAAM,GACtD/M,EAAgC,aAAvB,UAAO+M,YAA6B,GAAK,IAClD8tV,EAAyC,aAAvB,UAAO9tV,YAA6B,EAAKmiD,KAAKyF,gBAAkB,EAAKzF,KAAK0F,kBAC5FkmS,EAA4C,aAAvB,UAAO/tV,YAA6B+vL,EAASnoI,gBAAkBmoI,EAASloI,kBAG7FmjE,EAAgB,EAAK7oE,KAAKguI,qBAC1B69J,GAA4B,IAAAjqJ,qBAAoB/4E,GAChDijO,EAAoD,aAAvB,UAAOjuV,YAA6B,EAAI,GACrEkuV,EAAqD,aAAvB,UAAOluV,YAA6B,GAAK,IACvEmuV,EAAsBH,EAA4BC,EAA6BC,EAC/EE,EAAuBJ,EAA4BE,EAA8BD,EAEjFjmS,EAAW,CACf,IAAI,EAAJ,QAAqB,EAAArX,qBAAqBX,UAAW,EAAAe,sBAAsBf,UAAW89S,EAAiB76V,EAAQ0tO,EAAW,GAC1H,IAAI,EAAJ,QAAqB,EAAAhwL,qBAAqBC,cAAe,EAAAG,sBAAsBH,cAAeu9S,EAAqBl7V,EAAQ0tO,EAAW,GAAM,GAC5I,IAAI,EAAJ,QAAqB,EAAAhwL,qBAAqBE,eAAgB,EAAAE,sBAAsBF,eAAeu9S,EAAsBn7V,EAAQ0tO,EAAY,GAAM,GAC/I,IAAI,EAAJ,QAAqB,EAAAhwL,qBAAqB1C,aAAc,EAAA8C,sBAAsB9C,aAAc8/S,EAAoB96V,EAAQ0tO,EAAY,GAAM,IAE5I,EAAK0nD,YAAYrgO,I,KAGnBylS,iCAAmC,WACjC,IAAMzlS,EAAW,CACf,IAAI,EAAJ,QAAqB,EAAArX,qBAAqBG,mBAAoB,EAAAC,sBAAsBD,mBAAoB,EAAKqR,KAAKyF,gBAAiB,GAAI,IAAK,GAAM,IAEpJ,EAAKygO,YAAYrgO,I,KAGnBguG,QAAU,WACR,OAAO,EAAKhuG,SAAStzD,QAAO,SAAC+kL,EAAKwtE,GAAN,OAAkBxtE,EAAMwtE,EAAQjxF,YAAW,K,aAxHtDw3L,G,gJCPrB,QACA,Q,UAyBE,WAAY5iW,EAAKf,EAAMhC,EAAQoL,EAAQ0tO,EAAW0tH,GAAmC,WAApBtrP,EAAoB,mFAdrFurP,cAAgB,GAcqE,KATrFC,4BAA8B,CAC5B,EAAA59S,qBAAqB1C,aACrB,EAAA0C,qBAAqBG,oBAO8D,KALrF09S,gBAAkB,CAChB,EAAA79S,qBAAqB1C,aACrB,EAAA0C,qBAAqBX,WAG8D,KAWrF8rG,WAAa,iBAAO,CAClB1gJ,GAAI,EAAKA,GACTqzV,UAAW,EAAK36V,YAAYsH,GAC5BxQ,IAAK,EAAKA,IACVf,KAAM,EAAKA,KACXoJ,OAAQ,EAAKA,OACb0tO,UAAW,EAAKA,UAChB94O,OAAQ,EAAKA,OACbk7G,WAAY,EAAKA,aAnBkE,KAsBrF2rP,cAAgB,SAACpkW,GACf,EAAKy4G,WAAaz4G,GAvBiE,KA0BrFwJ,UAAY,WACV,OAAO,EAAKu6V,eA3BuE,KA8BrFr4L,QAAU,WACR,GAAI,EAAKjzD,WACP,OAAO,EAGT,IAAI9xD,EAAO,EAcX,OAXI,EAAKrmD,MAAQ,EAAA+lD,qBAAqBE,eACpCI,GAAQ,EAAKh+C,OAAS,EAAK0tO,UAClB,EAAK/1O,MAAQ,EAAA+lD,qBAAqBX,UAC3CiB,GAAS,EAAKh+C,OAAS,EAAK0tO,UAAa,EAChC,EAAK/1O,MAAQ,EAAA+lD,qBAAqBC,gBAC3CK,GAAQ,EAAKh+C,OAAS,EAAK0tO,WAI7B1vL,GAAQ,EAAKh+C,OAAS,EAAKpL,QA/CwD,KAoDrF4jE,QAAU,aAnDRr4D,KAAKgI,IAAK,UACVhI,KAAKxI,IAAMA,EACXwI,KAAKvJ,KAAOA,EACZuJ,KAAKvL,OAASA,EACduL,KAAKH,OAASA,EACdG,KAAKutO,UAAYA,EACjBvtO,KAAKi7V,cAAgBA,EACrBj7V,KAAK2vG,WAAaA,I,gIClCtB,Q,IACA,Q,IACA,QACA,S,qDAEa4rP,2BAEX,WAAYC,GAAkB,sCAI9BxrJ,sBAAwB,SAACjhJ,GACvB,GAAKA,EAAKyzG,2BAA8BzzG,EAAK0zG,+BAA7C,CAGA,IAAMC,EAAmB,EAAK84L,iBAAiB74L,oBAAoB5zG,EAAK/mD,IAJxC,uBAKhC,YAAsC06J,EAAiBkxF,cAAvD,+CAAsE,KAA3DomG,EAA2D,QAChEA,EAAwBvjW,OAAS,EAAA8mD,qBAAqBX,WACrDo9S,EAAwBvjW,OAAS,EAAA8mD,qBAAqB1C,eAEzDm/S,EAAwBvlW,OAASs6D,EAAKyF,kBATV,6EAYhC,EAAKgnS,iBAAiBvB,8BAA8Bv3L,EAAiBha,gBAhBzC,KAmB9B+yM,oBAAsB,SAACC,EAAW9iE,GAChC,IAAM/kC,EAAU,EAAK2nG,iBAAiB1I,eAAe4I,GAC/Ch5L,EAAmBmxF,EAAQnzP,YACjCmzP,EAAQp/P,QAAUmkS,EAElB,EAAK4iE,iBAAiBvB,8BAA8Bv3L,EAAiBha,cACrE,EAAKizM,gBAAgBj5L,EAAiB16J,KAzBV,KA4B9B4zV,oBAAsB,SAACF,EAAW9iE,GAChC,IAAMijE,EAAiB,EAAKL,iBAAiB1I,eAAe4I,GACtDh5L,EAAmBm5L,EAAen7V,YAExC,GAAIm7V,EAAeX,cAAc/gW,SAAS0hW,EAAeplW,MAAO,4BAC9D,YAAsCisK,EAAiBkxF,cAAvD,+CAAsE,KAA3DomG,EAA2D,QAChEA,EAAwBkB,cAAc/gW,SAAS6/V,EAAwBvjW,QACzEujW,EAAwBn6V,QAAU+4R,IAHwB,mFAO9DijE,EAAeh8V,QAAU+4R,EAG3B,EAAK4iE,iBAAiBvB,8BAA8Bv3L,EAAiBha,cACrE,EAAKizM,gBAAgBj5L,EAAiB16J,KA3CV,KA8C9B8zV,uBAAyB,SAACJ,EAAW9iE,GACnC,IAAM/kC,EAAU,EAAK2nG,iBAAiB1I,eAAe4I,GAC/Ch5L,EAAmBmxF,EAAQnzP,YACjCmzP,EAAQtmB,WAAaqrD,EAErB,EAAK4iE,iBAAiBvB,8BAA8Bv3L,EAAiBha,cACrE,EAAKizM,gBAAgBj5L,EAAiB16J,KApDV,KAuD9B+zV,wBAA0B,SAACL,EAAW9iE,GACpC,IAAM4kB,EAAmB,EAAKg+C,iBAAiB1I,eAAe4I,GACxDh5L,EAAmB86I,EAAiB98S,YAC1C88S,EAAiB89C,cAAc1iE,GAE/B,EAAK4iE,iBAAiBvB,8BAA8Bv3L,EAAiBha,cACrE,EAAKizM,gBAAgBj5L,EAAiB16J,KA7DV,KAgE9B2zV,gBAAkB,SAACN,GAEjB,IAAMjjS,EAAU,EAAKojS,iBAAiBhC,gBAAgB6B,GACtD,UAAc1iS,qBAAqByxG,6BAA6BhyG,EAAQrJ,OAGxE,IAAA+0I,iCAGA,UAAUjrI,sBAxEV74D,KAAKw7V,iBAAmBA,I,mJCR5B,SACA,Q,qDAEaQ,0B,YAEX,WAAY1wP,IAAO,gGACXA,IADW,OAEjB,EAAK8iG,aAAe,EAAAtxJ,oBAAoBG,MAFvB,E,uOCLrB,O,IACA,OACA,QACA,S,IACA,O,IACA,O,IACA,M,IACA,Q,IACA,Q,qDAGag/S,6B,YAGX,WAAY3wP,IAAO,gGACXA,IADW,SAKnB4wP,8BAAgC,WAC9B,IAAM9+S,EAAqB,EAAK86E,eAC1BikO,EAAY/+S,EAAmB3oD,OAAS,EAC1C2oD,EAAmBA,EAAmB3oD,OAAS,GAAK,EACpD,EAGJ,OAFA,EAAKukE,YAAYmjS,GAEVA,GAZU,EAenBttH,0BAA4B,SAACutH,EAAcxtH,GACzC,IAAM/0F,EAAoBuiN,EAAatiN,cAAcC,uBAC/CsiN,EAAwBztH,EAAiB90F,cAAcC,uBAC7D,GAA8B,OAA1BsiN,EACFD,EAAatiN,cAAcm0F,qBAAqBouH,QAC3C,GAA0B,OAAtBxiN,EACT+0F,EAAiB90F,cAAcm0F,qBAAqBp0F,OAC/C,CACL,IAAMyiN,EAAc,EAAKJ,gCACzBE,EAAatiN,cAAcm0F,qBAAqBquH,GAChD1tH,EAAiB90F,cAAcm0F,qBAAqBquH,KAzBrC,EAkCnBz/D,qBAAuB,SAAChjJ,GACtB,IAAM1mG,EAAS,EAAKymG,iBAAiBC,GACrC,GAAI1mG,EAAO1+C,OAAS,EAAG,CACrB,IAAI+iJ,EAAe,GACnBrkG,EAAO/0C,SAAQ,SAAAquD,GACb+qF,EAAaziJ,KAAb,MAAAyiJ,GAAA,aAAqB/qF,EAAIsrF,2BAE3B,IAAIL,EAAe,UAAiBC,gBAAgBH,GAAc,GAIlE,MAAO,CACL,CAACp9H,EAAGs9H,EAAa9C,KAAMv6H,EAAGq9H,EAAa5C,MACvC,CAAC16H,EAAGs9H,EAAa7C,KAAMx6H,EAAGq9H,EAAa5C,MACvC,CAAC16H,EAAGs9H,EAAa7C,KAAMx6H,EAAGq9H,EAAa3C,MACvC,CAAC36H,EAAGs9H,EAAa9C,KAAMv6H,EAAGq9H,EAAa3C,OAG3C,MAAO,IApDU,EAuDnB6E,iBAAmB,SAACC,GAElB,OADe,UAAU1uF,WAAU,GACrBnkD,QAAO,SAAAylD,GACnB,SAAUA,EAAIqtF,eAAkBrtF,EAAIqtF,cAAcC,yBAA2BF,OACvEptF,EAAI4mF,YAAa5mF,EAAI4mF,UAAUyG,eAAkBrtF,EAAI4mF,UAAUyG,cAAcC,yBAA2BF,OA3D/F,EAgEnBnxF,0BAA4B,WAAqC,IAApC6zS,EAAoC,wDAEzDppT,EAAS,UAAUgY,WAAU,GAChCnkD,QAAO,SAAAylD,GAAA,OAAOA,aAAeA,EAAfA,SAA+BA,aAAeA,EAAfA,WAC7C/jD,MAAK,SAACC,EAAGC,GACV,IAAI4zV,EAAO7zV,EAAEqiD,cACTyxS,EAAO7zV,EAAEoiD,cACb,OAAOwxS,EAAKpiV,EAAIqiV,EAAKriV,GAAKoiV,EAAKniV,EAAIoiV,EAAKpiV,KAKpCqiV,EAAgB,IAAIC,IAE1B,EAAKC,2BAd0D,2BAgB/D,YAAoBzpT,EAApB,+CAA4B,KAAjByG,EAAiB,SACrBA,aAAiBA,EAAjBA,SAA8BA,aAAiBA,EAAjBA,WAAmC8iT,EAAcG,IAAIjjT,IACtF,EAAKkjT,gCAAgCljT,EAAO8iT,EAAeH,IAlBA,+EAhE9C,EA0FnBK,yBAA2B,WACzB,IAAMhtM,EAAiB,UAAMztJ,WAAWwH,cAAcimJ,eAChDz8G,EAAS,UAAUgY,WAAU,GAFJ,uBAI/B,YAAoBhY,EAApB,+CAA4B,KAAjByG,EAAiB,QAC1B,GAAIA,aAAiBA,EAAjBA,QAA4B,CAC9B,IAAMkgG,EAAgB8V,EAAiBh2G,EAAMy5F,UAAUyG,cAAgBlgG,EAAMkgG,cAC7E,EAAKypB,uBAAuBzpB,QACnBlgG,aAAiBA,EAAjBA,SACT,EAAK2pH,uBAAuB3pH,EAAMkgG,gBATP,+EA1Fd,EAyGnBypB,uBAAyB,SAACzpB,GACxBA,EAAck0F,oBAAoB,MAClCl0F,EAAcm0F,qBAAqB,OA3GlB,EA+GnB6uH,gCAAkC,SAACljT,EAAO8iT,EAAeH,GACvDG,EAAcvgW,IAAIy9C,GAClB,IAAMmjT,EAAkB,EAAKv5L,wBAAwB5pH,EAAO2iT,GAFuB,uBAmBnF,YAA6BQ,EAA7B,+CAA8C,KAAnCC,EAAmC,QACvCN,EAAcG,IAAIG,IACrB,EAAKF,gCAAgCE,EAAgBN,IArB0B,+EA/GlE,EA+InBl5L,wBAA0B,SAAC5pH,EAAO2iT,GAChC,IAGIU,EAHArtM,EAAiB,UAAMztJ,WAAWwH,cAAcimJ,eAChD4+E,EAA4B,GAC5BE,EAA4B,GAE5B50F,SACAxyF,SAEA1N,aAAiBA,EAAjBA,SACFkgG,EAAgB8V,EAAiBh2G,EAAMy5F,UAAUyG,cAAgBlgG,EAAMkgG,cACvExyF,EAAMsoG,EAAiBh2G,EAAM8/G,QAAU9/G,EAAM0N,KACpC1N,aAAiBA,EAAjBA,UACTkgG,EAAgBlgG,EAAMkgG,cACtBxyF,EAAM1N,EAAM0N,KAGVi1S,GACFziN,EAAc4pB,eAAe,MAK/B,IAAIw5L,EAAmB,UAAYC,oBAAoBvjT,GACnDw0L,EAAoB,UAAYC,qBAAqBz0L,GACrD00L,EAAoB,UAAYC,qBAAqB30L,GAKnDwjT,EAA2B,UAAYC,qCAAqCjvH,EAAmBx0L,EAAMtzC,QAElE,KADzCkoO,EAA4B,UAAYC,yBAAyB2uH,IACnC3oW,SAC5B+5O,EAA4B,UAAYC,yBAAyBL,IAGnEM,EAA4B,UAAYD,yBAAyBH,GACjE2uH,EAA2B,UAAYxuH,yBAAyByuH,GApCJ,MAwCf,UAAYpiO,oCAAoCmiO,EAA0B31S,GAxC3D,qBAwCvDg2S,EAxCuD,UAyCxDA,GACEf,GACFziN,EAAc4pB,eAAe45L,GA3C2B,MAkDd,UAAYxiO,oCAAoC0zG,EAA2BlnL,GAlD7D,qBAkDvDqnL,EAlDuD,KAkDlCC,EAlDkC,KAmD5D,GAAID,EAAqB,CACnB4tH,GACFziN,EAAc4pB,eAAeirE,GAE3B/+E,GACEg/E,EAAiBv7F,WAAau7F,EAAiBv7F,UAAUyG,eAC3D80F,EAAiBv7F,UAAUyG,cAAck0F,oBAAoBp0L,EAAMy5F,WAEjEz5F,EAAMy5F,WAAaz5F,EAAMy5F,UAAUyG,eACrClgG,EAAMy5F,UAAUyG,cAAck0F,oBAAoBY,KAGpDA,EAAiB90F,cAAck0F,oBAAoBp0L,GACnDA,EAAMkgG,cAAck0F,oBAAoBY,IAI1C,IAAMwtH,EAAexsM,GAAkBh2G,EAAMy5F,UAAYz5F,EAAMy5F,UAAYz5F,EACrE2jT,EAAkB7oW,OAAOmc,KAAKu9N,GAlBb,uBAmBvB,YAAsBmvH,EAAtB,+CAAuC,KAA5B1mS,EAA4B,QAC/B2mS,EAAmC,UAAUxlS,aAAap4D,SAASi3D,IACnEw8E,EAAYmqN,EAAiCnqN,UACnDu7F,EAAmBh/E,GAAkBvc,EAAYA,EAAYmqN,EAC7D,UAAqBpgT,mBAAmByxL,0BAA0ButH,EAAcxtH,IAvB3D,8EAnDmC,MA+Ed,UAAY9zG,oCAAoC4zG,EAA2BpnL,GA/E7D,qBA+EvDwnL,EA/EuD,UAyF5D,OATIA,GACEytH,GACFziN,EAAc4pB,eAAeorE,GAOjC,wBACKN,EAA0B1mO,KAAI,SAAA21V,GAAA,OAAmBA,EAAgB7jT,WADtE,aAEK80L,EAA0B5mO,KAAI,SAAA21V,GAAA,OAAmBA,EAAgB7jT,YAxOtE,EAAKw0J,aAAe,EAAAtxJ,oBAAoBM,mBAFvB,E,yMCdrB,SACA,Q,qDAEasgT,yB,YAEX,WAAYpyP,IAAO,gGACXA,IADW,SAKnBy5D,oBAAsB,SAACnrH,GACrB,EAAKof,YAAYpf,IANA,EASnBkrH,yBAA2B,SAAClrH,GAC1B,EAAKy0J,eAAez0J,IAVH,EAanB+jT,eAAiB,WACf,EAAKC,sBAdY,EAiBnB/4L,gBAAkB,SAACjrH,GACjB,OAAO,EAAKs+E,eAAe/9H,SAASy/C,IAlBnB,EAqBnBqgB,OAAS,SAACtW,KAnBR,EAAKyqJ,aAAe,EAAAtxJ,oBAAoBO,eAFvB,E,mMCLrB,SACA,Q,qDAEawgT,mB,YAEX,WAAYvyP,IAAO,gGACXA,IADW,OAEjB,EAAK8iG,aAAe,EAAAtxJ,oBAAoBQ,SAFvB,E,uMCLrB,QACA,Q,UAUE,WAAYyR,GAAM,sCAFlBggJ,gBAAkB,EAEA,KAOlBlI,UAAY,SAACmtD,GACX,MAAO,CACL,EAAK8pG,gBAAgB9pG,GACrB,EAAK+pG,uBAAuB/pG,GAC5B,EAAKgqG,aAAahqG,GAClB,EAAKiqG,+BAA+BjqG,GACpC,EAAKkqG,yBAAyBlqG,IAE7Bn2P,OAAM,SAAAsgW,GAAA,OAASA,MAfF,KAkBlBF,+BAAiC,SAACjqG,GAkBhC,MAAO,EAjB8B,IAAA7gL,4BACnC,EAAKoG,SAAS9nB,KAAKr3C,EACnB,EAAKm/D,SAAS9nB,KAAKp3C,EACnB,EAAK00C,KAAK0C,KAAKr3C,EACf,EAAK20C,KAAK0C,KAAKp3C,EACf,EAAK00C,KAAKwJ,GAAGn+C,EACb,EAAK20C,KAAKwJ,GAAGl+C,IAEsB,IAAA84D,4BACnC,EAAKpkB,KAAKwJ,GAAGn+C,EACb,EAAK20C,KAAKwJ,GAAGl+C,EACb,EAAKk/D,SAAS9nB,KAAKr3C,EACnB,EAAKm/D,SAAS9nB,KAAKp3C,EACnB,EAAKk/D,SAAShhB,GAAGn+C,EACjB,EAAKm/D,SAAShhB,GAAGl+C,IAGiDxc,OAAM,SAACi2D,GACzE,OAAOkgM,EAAmB,EAAKjlD,iBAAmBj7I,MArCpC,KAyClBgqS,gBAAkB,SAAC9pG,GACjB,MAAO,CAAC,EAAKjlM,KAAKyF,gBAAiB,EAAK+kB,SAAS/kB,iBAAiB32D,OAAM,SAACi2D,GACvE,OAAOkgM,GAAoBlgM,MA3Cb,KA+ClBiqS,uBAAyB,SAAC/pG,GAIxB,SAAI,EAAKr3D,SAASlrI,KAAKnV,UAAY,GAAK,EAAKqgJ,SAASlrI,KAAKjd,MAAQ,MAC3C,EAAKmoJ,SAASlrI,KAAKosI,gBAAkB,EAAKlB,SAASlrI,KAAKq3G,cAClCkrF,GACpB,EAAKjlM,KAAKyF,qBAIhC,EAAK+kB,SAAS9nB,KAAKnV,UAAY,GAAK,EAAKi9B,SAAS9nB,KAAKjd,MAAQ,MAC3C,EAAK+kC,SAAS9nB,KAAKosI,gBAAkB,EAAKtkH,SAAS9nB,KAAKq3G,cAClCkrF,GACpB,EAAKz6K,SAAS/kB,kBA7DxB,KAqElBwpS,aAAe,SAAChqG,GACd,GAAG,EAAKjlM,KAAKrD,iBAGX,GAAGsoM,GAFyB,EAAKjlM,KAAKpD,eAAeyyS,0BAERC,UAAUvqE,eACrD,OAAO,OAEJ,GAAG,EAAKv6M,SAAS7tB,gBAAgB,CAGtC,GAAGsoM,GAFyB,EAAKz6K,SAAS5tB,eAAeyyS,0BAEZC,UAAUvqE,eACrD,OAAO,EAIX,OAAO,GApFS,KAuFlBoqE,yBAA2B,SAAC7pT,GAC1B,IAAMG,GAAQ,IAAAuqF,wBACZ,EAAKxlD,SAAS9nB,KAAM,EAAK1C,KAAK0C,KAAM,EAAK1C,KAAKwJ,IAI1C+lS,EAAoBjqT,EAASjqC,KAAKyzE,IAAKrpC,EAAQ,GAAMpqC,KAAKqnE,GAAK,MAE/D8sR,EAAiB,EAAKhlR,SAAS/kB,gBAC/BV,EAAa,EAAK/E,KAAKyF,gBAE7B,OAAO+pS,GAAkBD,GAAqBxqS,GAAcwqS,GAjG5Dt+V,KAAK+uD,KAAOA,EACZ/uD,KAAK45C,MAAQmV,EAAKruD,YAClBV,KAAK28L,SAAW38L,KAAK45C,MAAMwvH,YAAYr6G,GACvC/uD,KAAKu5E,SAAWv5E,KAAK45C,MAAM4/B,YAAYzqB,K,uGCiB5B,WAAW,WACpB9pD,EAAOjF,KACT+G,EAAQ,CACNmyJ,WAAW,EACXslM,sBAAsB,EACtBC,aAAc,UACdt0C,UAAW,EACX/zH,aAAa,EACbxjH,SAAU,CACRx4D,EAAG,EACHC,EAAG,EACHmhH,QAAS,EACTD,QAAS,GAEXmjO,iBAAkB,GAClBC,gBAAiB,GACjBC,SAAU,IAEZ7vS,EAAO,KACP8vS,EAAW,OACXjqE,EAAgB,UAAa,UAAO5wR,aAAa6wH,QAOnD,SAAS01L,EAAQrzT,GAAS63D,EAAO73D,EANjC8I,KAAKgI,IAAK,eACVhI,KAAKg1S,UAAW,EAChBh1S,KAAKw9H,OAAS,CACZshO,kBAAmB,IAIrB9+V,KAAK++V,QAAU,WAAQ,OAAOhwS,GA4E9B,SAASpG,EAAYP,EAAUjyD,GAAG,MApEV,SAACiyD,GACvB,IAAMwvE,EAAgB7oE,EAAKuuE,mBACrBgpC,EAAc,EAAK04L,iBAEzB,MAAO,CAAC9lM,WAAW,IAAAoL,aAAYgC,EAAal+G,GAAWytB,YAAa+hD,EAAc/hD,aAkEjD20J,CAAgBpiL,GAA1C8wG,EAFyB,EAEzBA,UAAWrjF,EAFc,EAEdA,YAClB9uE,EAAMmyJ,UAAYA,EACdnyJ,EAAMmyJ,WACR,UAAa5wG,cACb,UAAaC,UAA2B,eAAhBstB,EAAgC,OAAS,gBAAiB5wE,IAElF,UAAagkD,YAAYhkD,GArE7BjF,KAAKg/V,eAAiB,WACpB,IAAMpnO,EAAgB7oE,EAAKuuE,mBACvBgpC,EAAc,GAElB,OAAQ1uC,EAAc/hD,aACpB,IAAK,WACgC,UAA/B+hD,EAAcwE,aAChBkqC,EAAc,CACZ,CAACv/J,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAY,EAAI,IACjE,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAY,EAAI,IACjE,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAY,EAAI,GACjE,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAY,EAAI,IAE3B,UAA/BvyL,EAAcwE,eACvBkqC,EAAc,CACZ,CAACv/J,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAY,EAAI,IACjE,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAY,EAAI,IACjE,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAY,EAAI,GACjE,CAACpjT,EAAM6rE,SAASx4D,EAAI,GAAIrT,EAAM6rE,SAASv4D,EAAItT,EAAMojT,UAAY,EAAI,KAGrE,MACF,IAAK,aACH7jJ,EAAc,CACZ,CAACv/J,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAY,EAAI,GAAIpjT,EAAM6rE,SAASv4D,EAAI,IACjE,CAACtT,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAY,EAAI,GAAIpjT,EAAM6rE,SAASv4D,EAAI,IACjE,CAACtT,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAY,EAAI,GAAIpjT,EAAM6rE,SAASv4D,EAAI,IACjE,CAACtT,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAY,EAAI,GAAIpjT,EAAM6rE,SAASv4D,EAAI,KAEnE,MAEF,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,QACE,IAAIm6B,GAAQ,IAAA+oC,0BAAyBxuB,EAAK0C,KAAM1C,EAAKwJ,IACjDqwG,EAAiB,CAACxuJ,EAAGrT,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAY,EAAI,GAAI9vS,EAAGtT,EAAM6rE,SAASv4D,EAAI,IACxF4kV,GAAgB,IAAAztR,aAAYo3F,EAAgB7hK,EAAM6rE,SAAUp+B,GAC5Dq0H,EAAiB,CAACzuJ,EAAGrT,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAY,EAAI,GAAI9vS,EAAGtT,EAAM6rE,SAASv4D,EAAI,IACxF6kV,GAAgB,IAAA1tR,aAAYq3F,EAAgB9hK,EAAM6rE,SAAUp+B,GAC5D2qT,EAAiB,CAAC/kV,EAAGrT,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAY,EAAI,GAAI9vS,EAAGtT,EAAM6rE,SAASv4D,EAAI,IACxF+kV,GAAgB,IAAA5tR,aAAY2tR,EAAgBp4V,EAAM6rE,SAAUp+B,GAC5D6qT,EAAiB,CAACjlV,EAAGrT,EAAM6rE,SAASx4D,EAAIrT,EAAMojT,UAAY,EAAI,GAAI9vS,EAAGtT,EAAM6rE,SAASv4D,EAAI,IACxFilV,GAAgB,IAAA9tR,aAAY6tR,EAAgBt4V,EAAM6rE,SAAUp+B,GAChE8xH,EAAc,CACZ,CAAC24L,EAAc7kV,EAAG6kV,EAAc5kV,GAChC,CAAC6kV,EAAc9kV,EAAG8kV,EAAc7kV,GAChC,CAAC+kV,EAAchlV,EAAGglV,EAAc/kV,GAChC,CAACilV,EAAcllV,EAAGklV,EAAcjlV,IAStC,OAAOisJ,GAeT,IAAMn+G,EAAc,WAClB,GAAIphD,EAAMmyJ,YAAc9/J,SAASg9F,cAAc,eAAgB,CAC7Dj+F,OAAOkwD,kBAAmB,EAC1B,UAAaC,cACbvhD,EAAMy3V,sBAAuB,EAE7B,IAAM32M,EAAYz9I,KAAKC,OAAM,IAAA20R,mBAAkBjwO,GAAQ,UAAO/L,wBAC1D6nL,SACA,UAAWj+N,cAAgB,EAAAyjC,cAAcE,UAC3Cs6L,EAAezgO,KAAK2nE,QAAQ9sE,EAAKs6V,sBAAwB,UAAOv8S,wBAAyB,GACzF6nL,GAAe,IAAA/xJ,kBAAiB+xJ,GAAclsO,QAAQ,IAAM,KACnD,UAAWiO,cAAgB,EAAAyjC,cAAcC,SAClDu6L,EAAezgO,KAAK2nE,QAAQ9sE,EAAKs6V,sBAAwB,UAAOv8S,yBAOlE,IAAMsE,EAAM,CAAEltC,EAAGrT,EAAM6rE,SAASx4D,EAAGC,EAAGtT,EAAM6rE,SAASv4D,GAE/CywN,GAAe,IAAAC,uBAAsB,CACzCrvM,SAAU4rB,EACVujL,aAAcA,EAAa/yN,WAC3B8iH,IAAK,EACLC,IAAKgtB,EACLhyE,YAAa,aACbigJ,SAAU,SAAC5+N,GACL,UAAW0V,cAAgB,EAAAyjC,cAAcC,SAC3Cp5C,GAAQ,IAAAs/E,YAAWt/E,IAmB7B,SAAyBsjE,GACvB,IAAM/T,GAAW,IAAA6qB,kBAAiBviB,EAAK0C,KAAM1C,EAAKwJ,IAC5Cu/D,EAAOt9D,EAAY/T,EACnB+4S,EAAcp1V,KAAK2nE,QAAQ+lD,GAAO,GAGlC7uB,EADa,UAAM9mG,WACUytD,cAAcq5C,iBACjD,aAAWl6C,EAAMywS,EAAav2P,IAC9B,IAAA2zF,4BAA2B7tI,IAC3B,IAAA8tI,qBAAoB9tI,IACpB,IAAA+tI,0BAAyB/tI,GAEzB,IACM8J,EADQ,UAAM12D,WACa4L,UAAU8qD,mBAC3C,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,IA/BrDo3I,CAAgB/4M,EAAQ+N,EAAKw6V,8BAE/Bx0H,QAAS,WACP9yO,OAAOkwD,kBAAmB,EAC1BthD,EAAMy3V,sBAAuB,GAE/Bj8O,KAAM,IAGRnpH,SAASg9F,cAAc,mBAAmBj0C,YAAY2oL,GAGxCA,EAAa10I,cAAc,qBACnCgxE,UAoBV,SAASs4L,EAAY/7S,EAAKk7S,GACxB,MAAqB,SAAbA,EACJ93V,EAAMmyJ,UAAYnyJ,EAAM03V,aAAe96S,EAAIwuG,UAC3CprJ,EAAMmyJ,UAAYnyJ,EAAM03V,aAAe,UAAa,UAAOz6V,aAAa6wH,QAE9E70H,KAAKq4D,QAAU,SAACuyG,GACTA,IACH,UAAahnE,YAAY3+F,GACzB,EAAK+vS,UAAW,IAGpBh1S,KAAKkuD,OAAS,SAACj6D,GACb8S,EAAQ9S,EAAK8S,MACb,EAAKiB,GAAK/T,EAAK+T,IAEjBhI,KAAKi/J,OAAS,WACZ,MAAO,CAAEj3J,GAAI,EAAKA,GAAIjB,OAAO,aAAUA,KAEzC/G,KAAKg2D,KAAO,SAASjH,GACnBw7P,EAAQx7P,GACR/uD,KAAKsqK,cAEPtqK,KAAKsqK,WAAa,WAChB,EAAK0qI,UAAW,EAChB,UAAav7O,SACX,UAAaC,OAAOC,WACpBhR,EACA,EACA,UAAaiR,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOI,WACpB3R,EACA,EACA,UAAayR,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOM,OACpB,EAAKC,OACL,EACA,UAAaL,WAAWyjC,UAG5Br9F,KAAK+3D,iBAAmB,WACtB,UAAa6rC,YAAY,GACzB,EAAKoxM,UAAW,GAElBh1S,KAAK2yI,aAAe,WACb,EAAKqiK,UACR,EAAK1qI,cAGTtqK,KAAKgjM,eAAiB,WACpBj8L,EAAM23V,iBAAmB,GACzBG,EAAW,OACXjqE,EAAgB,UAAa,UAAO5wR,aAAa6wH,SAEnD70H,KAAKojM,eAAiB,SAAC3vI,GACrB1sD,EAAM23V,iBAAmBjrS,EACzBorS,EAAW,OACXjqE,EAAgB,UAAa,UAAO5wR,aAAa4nG,QAEnD5rG,KAAKq5L,qBAAuB,SAACtC,EAAgB3rL,GAE3CrE,EAAM23V,iBAAmB3vS,EAAKoF,sBAAwB,UAAWjR,wBAAyB,IAAM,UAAUzoC,KAAKC,cAAc,CAAC1S,GAAI,uCAClI62V,EAAWzzV,EACXwpR,EAA0B,SAATxpR,EAAmB,UAAY,UAAa,UAAOpH,aAAa6wH,SAEnF70H,KAAKu8L,oBAAsB,SAAC9lM,EAAM2U,GAChCrE,EAAM23V,iBAAmBjoW,EACzBooW,EAAWzzV,EACXwpR,EAA0B,SAATxpR,EAAmB,UAAY,UAAa,UAAOpH,aAAa6wH,SAEnF70H,KAAK2/V,YAAc,WACjB,OAAO54V,EAAM6rE,UAEf5yE,KAAKyiM,kBAAoB,SAAUjnE,EAASD,GAC1Cx0H,EAAM6rE,SAAS4oD,QAAUA,EACzBz0H,EAAM6rE,SAAS2oD,QAAUA,GAE3Bv7H,KAAKw0D,cAAgB,WACnB,IAAI/N,GAAW,IAAA6qB,kBAAiBviB,EAAK0C,KAAM1C,EAAKwJ,IAEhD,OAAO,IAAAwf,yBAAwBtxB,IAEjCzmD,KAAK4/V,kBAAoB,WACvB,IAAIn5S,EAAWzmD,KAAKu/V,sBAEpB,MAA8B,WAAvB,UAAO3yV,aAA2B,IAAAqsE,uBAAsBxyB,IAAY,IAAAqyB,kBAAiBryB,IAE9FzmD,KAAKu/V,oBAAsB,WACzB,OAAO,IAAAjuR,kBAAiBviB,EAAK0C,KAAM1C,EAAKwJ,IAAMv4D,KAAKy/V,6BAErDz/V,KAAK6/V,4BAA8B,WACjC,IAAMC,GAAiB,IAAAxuR,kBAAiBviB,EAAK+uG,wBAAwB/uG,EAAK0C,MAAO1C,EAAK+uG,wBAAwB/uG,EAAKwJ,KAC7GxW,EAAQ,UAAOA,MACjBg+S,EAAyB//V,KAAKy/V,4BAA8B19S,EAOhE,OANIg+S,EAAyB,EAC3BA,GAA0B//V,KAAKw9H,OAAOshO,kBAC7BiB,EAAyB,IAClCA,GAA0B//V,KAAKw9H,OAAOshO,mBAGjCgB,EAAiBC,GAE1B//V,KAAKy/V,0BAA4B,WAC/B,IAAIO,EAAqB,EACnBzmR,EAAWxqB,EAAKruD,YAAY84E,YAAYzqB,GAS9C,OARIA,EAAKwJ,GAAG/jB,MAAQ,GAAKua,EAAKwJ,GAAGjc,UAAY,KAC3C0jT,IAAsB,IAAA9tR,oCAAmCnjB,EAAKwJ,GAAG/jB,OAASua,EAAKwJ,GAAGjc,aAGhFi9B,EAAShhB,GAAG/jB,MAAQ,GAAK+kC,EAAShhB,GAAGjc,UAAY,KACnD0jT,IAAsB,IAAA9tR,oCAAmCqH,EAAShhB,GAAG/jB,OAAS+kC,EAAShhB,GAAGjc,aAGpF0jT,GAGVhgW,KAAKi6D,OAAS,SAAStW,GACrB,IAAI58C,EAAMy3V,qBAAV,CAIA,IAnRmB/sS,EAAM8G,EAmRrBxW,EAAQ,UAAOA,MACjBc,GAAW,IAAAwuB,eACXk7J,EAAQ1pL,EAAU/qC,WAAa,MAAQ,UAAOyuC,eAC9CqxE,EAAgB7oE,EAAKuuE,mBACrB1oD,EAAS7lB,EAAKnE,YACdnE,EAAWzmD,KAAK6/V,8BAChBzS,EAAUptV,KAAK4/V,oBACfhtR,GA1RiBnhB,EA0RM1C,EAAK0C,KA1RL8G,EA0RWxJ,EAAKwJ,GAzRlC,CACLn+C,EAAGq3C,EAAKr3C,GAAKm+C,EAAGn+C,EAAIq3C,EAAKr3C,GAAG,EAC5BC,EAAGo3C,EAAKp3C,GAAKk+C,EAAGl+C,EAAIo3C,EAAKp3C,GAAG,IAwR5B4lV,EAAmBlxS,EAAKo6G,iBACxB+2L,SACA5S,SACA6S,SACA3kO,EAAU,EACVD,EAAU,EACVpiD,EAAkB,EAClBinR,GAAiB,IAAA71S,eAAcwE,EAAK0C,KAAKr3C,EAAG20C,EAAK0C,KAAKp3C,EAAG00C,GAG3DhoD,EAAM43V,gBAAkBzvV,EAAE67C,MAAMhkD,EAAM23V,kBACtC,IAAMnlW,EAASw1D,EAAKruD,YAEpBijD,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EAEX+gH,EAAY3pS,EAAIgnL,YAAYyiH,GAC5B+S,EAAYx8S,EAAIgnL,YAAY5jO,EAAM43V,iBAClCuB,EAAYv8S,EAAIgnL,YAAY,KAC5B5jO,EAAMojT,UAAY//S,KAAKC,MAAoB,IAAdijV,EAAM3tV,OAAe,IAElD,IAAI0gW,EAAc,EAElB,IAAK,IAAI9rW,KAAKqjI,EAAcyE,cAC1BgkO,GAAezoO,EAAcyE,cAAc9nI,GAG7C,GAAI4rW,EAAUxgW,MAAQgkD,EAAIgnL,YAAYyiH,GAASztV,MAAQ8mD,EAQrD,GAPA5D,EAAW,GACXc,EAAI4oL,KAAO,QAAU,UAAOhmL,eAC5B+mS,EAAY3pS,EAAIgnL,YAAYyiH,GAC5B+S,EAAYx8S,EAAIgnL,YAAY5jO,EAAM43V,iBAClCuB,EAAYv8S,EAAIgnL,YAAY,KAGxBlkL,EAAW,GAAK,UAAO1E,MAAsB,GAAds+S,EACjCt5V,EAAM43V,gBAAmB,GACzBwB,EAAYx8S,EAAIgnL,YAAY5jO,EAAM43V,sBAElC,GAAI53V,EAAM23V,kBAAqByB,EAAUxgW,MAAQgkD,EAAIgnL,YAAYyiH,GAASztV,MAAQ8mD,EAAyB,GAAd45S,EAC3F,KAAOF,EAAUxgW,OAAUwgW,EAAUxgW,MAAQgkD,EAAIgnL,YAAYyiH,GAASztV,MAAQ8mD,EAAyB,GAAd45S,GACvFt5V,EAAM43V,gBAAkB53V,EAAM43V,gBAAgBtmW,MAAM,GAAI,GACxD8nW,EAAYx8S,EAAIgnL,YAAY5jO,EAAM43V,iBAM1CxlR,GAAmBpqB,EAAKuqB,yBAA2B,EAAIv3B,EAEvDo3B,GADW5/E,EAAOigF,YAAYzqB,GACFuqB,yBAA2B,EAAIv3B,EAE3D6wB,EAASv4D,EAAIu4D,EAASv4D,EAAI0nC,EAAQ6yB,EAAOv6D,EACzCu4D,EAASx4D,EAAIw4D,EAASx4D,EAAI2nC,EAAQ6yB,EAAOx6D,EACzCupC,EAAI6oL,UAAY,SAIhB7oL,EAAI+W,YACJ/W,EAAIwuG,UAAYprJ,EAAMmyJ,UAClBnyJ,EAAM03V,aACQ,SAAbI,EAAuB,UAAY,UAAa,UAAO76V,aAAa6wH,QAEzE,IAAIyqE,EAAa,EACfO,EAAW,EAEb,OAAQjoE,EAAc/hD,aACpB,IAAK,aACgC,SAA/B+hD,EAAcwE,cAChBxpD,EAASx4D,GAAK++D,EACdmmH,EAAc1nE,EAAcyE,cAAcE,SAAY+iE,EAAa,EAAIA,EACvEO,EAAYjoE,EAAcyE,cAAcG,UAAaqjE,EAAW,EAAIA,GAC5B,SAA/BjoE,EAAcwE,eACvBxpD,EAASx4D,GAAK++D,EACdmmH,EAAc1nE,EAAcyE,cAAcG,UAAa8iE,EAAa,EAAIA,EACxEO,EAAYjoE,EAAcyE,cAAcE,SAAYsjE,EAAW,EAAIA,GAErEtkE,GAA0C,SAA/B3D,EAAcwE,aAA0B,IAAM,IAAOr1H,EAAM6rE,SAAS2oD,QAAWx5E,EACtFh7C,EAAM43V,iBACRh7S,EAAIwuG,UAAYyiI,EAChBjxO,EAAI8oL,SAAS1lO,EAAM43V,gBAAiB/rR,EAASx4D,EAAIkzU,EAAM3tV,MAAQ,EAAI2/L,EAAaO,EAAUjtH,EAASv4D,EAAIkhH,EAAS4kO,EAAWt9S,GAC3Hc,EAAIwuG,UAAYutM,EAAY/7S,EAAKk7S,GACjC93V,EAAM6rE,SAASx4D,EAAIw4D,EAASx4D,EAAI+lV,EAAUxgW,MAAQ,EAAIugW,EAAMvgW,MAAQ2/L,EAAaO,EACjF94L,EAAM6rE,SAASv4D,EAAIu4D,EAASv4D,EAAIkhH,IAEhCx0H,EAAM6rE,SAASx4D,EAAIw4D,EAASx4D,EAAIklL,EAAaO,EAC7C94L,EAAM6rE,SAASv4D,EAAIu4D,EAASv4D,EAAIkhH,GAElC53E,EAAI8oL,SAAS2gH,EAASrmV,EAAM6rE,SAASx4D,EAAGrT,EAAM6rE,SAASv4D,EAAGizU,EAAOzqS,GACjE,MAEF,IAAK,WACgC,UAA/B+0E,EAAcwE,cAChBkjE,EAAc1nE,EAAcyE,cAAcC,QAAWgjE,EAAa,EAAIA,EACtEO,EAAYjoE,EAAcyE,cAAcI,WAAcojE,EAAW,EAAIA,EACrEjtH,EAASv4D,GAAK8+D,GAC0B,UAA/By+C,EAAcwE,eACvByjE,EAAYjoE,EAAcyE,cAAcC,QAAWujE,EAAW,EAAIA,EAClEP,EAAc1nE,EAAcyE,cAAcI,WAAc6iE,EAAa,EAAIA,EACzE1sH,EAASv4D,GAAK8+D,GAEhBqiD,GAAWz0H,EAAM6rE,SAAS4oD,QAAUz5E,EACpCh7C,EAAM6rE,SAASx4D,EAAIw4D,EAASx4D,EAAIohH,EAChCz0H,EAAM6rE,SAASv4D,EAAIu4D,EAASv4D,EAAIkhH,EACG,UAA/B3D,EAAcwE,aACZxpD,EAASv4D,EAAI8lV,EAAUxgW,MAAQ,EAAIugW,EAAMvgW,MACzCizE,EAASv4D,EAAI8lV,EAAUxgW,MAAQ,EAAIugW,EAAMvgW,MAC3CizE,EAASv4D,EACbspC,EAAIyuG,OACJzuG,EAAI0oL,WACFz0G,EAAcwE,aAA2BxpD,EAASx4D,EAAIohH,GACvB,UAA/B5D,EAAcwE,aAA2BxpD,EAASv4D,EAAI,EAAIu4D,EAASv4D,EAAI,IAEzEspC,EAAIpQ,OAAsC,UAA/BqkF,EAAcwE,aAA2BhyH,KAAKqnE,GAAK,GAAKrnE,KAAKqnE,GAAK,GACzE1qE,EAAM43V,iBACRh7S,EAAIwuG,UAAYyiI,EAChBjxO,EAAI8oL,SAAS1lO,EAAM43V,gBAAiB,EAAIrR,EAAM3tV,MAAQ,EAAI2/L,EAAaO,GAAWh9I,EAAUs9S,EAAWt9S,GACvGc,EAAIwuG,UAAYutM,EAAY/7S,EAAKk7S,GACjCl7S,EAAI8oL,SAAS2gH,EAAS,EAAI+S,EAAUxgW,MAAQ,EAAIugW,EAAMvgW,MAAQ2/L,EAAaO,GAAWh9I,EAAW04E,EAAS+xN,EAAOzqS,IAEjHc,EAAI8oL,SAAS2gH,EAAS,EAAI9tJ,EAAaO,GAAWh9I,EAAUyqS,EAAOzqS,GAErE,MAEF,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACHc,EAAIyuG,OACArrJ,EAAM43V,kBACRvR,EAAUrmV,EAAM43V,gBAAkB,IAAMvR,GAH1B,OAMS,IAAAv6Q,mBAAkButR,EAAgBxtR,GAAW,IAA/DK,GANS,qBAOhBlsE,EAAM6rE,SAASx4D,EAAI64D,EAAe74D,EAClCrT,EAAM6rE,SAASv4D,EAAI44D,EAAe54D,EAClCra,KAAKosO,WAAWzoL,EAAKypS,EAASrmV,EAAM6rE,SAAU/vB,EAAUo9S,GAO5Dt8S,EAAI0uG,UAEA,UAAOxxJ,aACTb,KAAKsgW,kBAAkB38S,KAI3B3jD,KAAKsgW,kBAAoB,SAAC38S,GAExB,IAAM48S,EAAc,EAAKvB,iBACzBr7S,EAAI+W,YACJ/W,EAAIgX,OAAO4lS,EAAY,GAAG,GAAIA,EAAY,GAAG,IAC7C58S,EAAIiX,OAAO2lS,EAAY,GAAG,GAAIA,EAAY,GAAG,IAC7C58S,EAAIiX,OAAO2lS,EAAY,GAAG,GAAIA,EAAY,GAAG,IAC7C58S,EAAIiX,OAAO2lS,EAAY,GAAG,GAAIA,EAAY,GAAG,IAC7C58S,EAAIiX,OAAO2lS,EAAY,GAAG,GAAIA,EAAY,GAAG,IAC7C58S,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,qBAClBlX,EAAImX,SACJnX,EAAI6tG,aAGNxxJ,KAAKwgW,uBAAyB,SAAC78S,EAAK2D,EAAKpwD,EAAOmzO,EAAY41H,GAC1D,IAAMv1H,EAAQ/mL,EAAIgnL,YAAYzzO,GAC1BwkC,EAAW,CACbthB,EAAGktC,EAAIltC,EACPC,EAAGitC,EAAIjtC,GAGT,OAAQ4lV,GACN,KAAK,EAAApqR,YAAYE,WAGjB,KAAK,EAAAF,YAAYC,SACf,MAEF,KAAK,EAAAD,YAAYG,UAOjB,KAAK,EAAAH,YAAYK,UACfx6C,EAAW,CACTthB,EAAGktC,EAAIltC,EAAIswN,EAAM/qO,MACjB0a,EAAGitC,EAAIjtC,EAAI,EAAKmjH,OAAOshO,mBAEzB,MAEF,KAAK,EAAAjpR,YAAYM,UAIjB,KAAK,EAAAN,YAAYI,WAOnB,OAAOv6C,GAGT17B,KAAKmsO,kBAAoB,SAACxoL,EAAKzsD,EAAOmzO,EAAY/iL,EAAK24S,GACrDt8S,EAAI+W,YACJ,IAAMgwK,EAAQ/mL,EAAIgnL,YAAYzzO,GAC9BysD,EAAIkX,YAAc,UAAa,UAAW72D,aAAa6wH,QACvDlxE,EAAI6W,UAAY,EAChB7W,EAAIwuG,UAAY,EAAAnD,MAAMrjD,MAEtB,IAAMn3D,GAAQ,IAAA+oC,0BAAyBxuB,EAAK0C,KAAM1C,EAAKwJ,IACnD78B,EAAW,EAAK8kU,uBAAuB78S,EAAK2D,EAAKpwD,EAAOmzO,EAAY41H,GAExEt8S,EAAIyuG,OACJzuG,EAAI0oL,UACF3wM,EAASthB,EACTshB,EAASrhB,GAEXspC,EAAIpQ,OAAOiB,GAASpqC,KAAKqnE,GAAK,MAC9B,UAAc66J,YAAY3oL,EACxB,EACA,EACc,IAAd+mL,EAAM/qO,MAAc,UAAWoiD,MAAQ,UAAWC,aAClDqoL,EAAa,EACb,GACA,GACA,GAEF1mL,EAAI0uG,UACJ1uG,EAAI6tG,aAGNxxJ,KAAKosO,WAAa,SAACzoL,EAAKzsD,EAAOowD,EAAK+iL,EAAY41H,GAC9C,IACE1zH,EAAOlC,EAAa,MAAQ,UAAO9jL,eACnCmkL,EAAQ/mL,EAAIgnL,YAAYzzO,GAI1BysD,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChB7oL,EAAIwuG,UAAYutM,EAAY/7S,EAAKk7S,GAEjC,IAAIrqT,GAAQ,IAAA+oC,0BAAyBxuB,EAAK0C,KAAM1C,EAAKwJ,KAE6B,IAA9E,CAAC,EAAAsd,YAAYG,UAAW,EAAAH,YAAYM,WAAWn8E,QAAQimW,KACzDzrT,GAAS,KAEXmP,EAAIyuG,OAEJzuG,EAAI0oL,UACF/kL,EAAIltC,EACJktC,EAAIjtC,GAENspC,EAAIpQ,OAAOiB,GAASpqC,KAAKqnE,GAAK,MAE9B9tB,EAAI8oL,SAASv1O,EAAO,EAAI,EAAGwzO,EAAOL,GAClC1mL,EAAI0uG,UACJ1uG,EAAI6tG,cA/lBR,I,IAAA,Q,IACA,O,IAEA,OACA,SACA,S,WACA,OACA,QAcA,S,WACA,MACA,Q,IAEA,O,IACA,QACA,S,IACA,OACA,SACA,Q,6ICCgB,WAAW,WACrBvsJ,EAAOjF,KACT+G,EAAQ,CACNqhD,SAAU,GACVtB,WAAW,EACXC,kBAAmB,KACnB6E,gBAAgB,EAChBu/K,iBAAiB,EACjBC,aAAc,KACdC,mBAAmB,EACnBwoD,YAAa,CACXh2O,KAAK,GACL+0B,SAAU,CAACx4D,EAAG,EAAGC,EAAG,GACpBy5Q,eAAgB,EAChB7tO,OAAQ,CAACmsB,OAAQ,KAAMC,OAAQ,MAC/BwD,YAAa,GAEfjD,SAAU,CACRx4D,EAAG,EACHC,EAAG,IAGPpc,EAAS,CACPqvO,YAAa,GACbmzH,eAAgB,EAChBrsE,gBAAiB,GACjBC,YAAa,GACbM,gBAAiB,IACjBC,cAAe,UAAa,UAAO5wR,aAAa6wH,SAElDsiB,EAAgB,CACd/kE,OAAQ,KACRC,OAAQ,KACR2I,OAAQ,KACRC,OAAQ,KACRo8D,UAAW,MAEbqpN,EAAwB,CACtBC,YAAc,CACZ9iT,KAAK,GACL+0B,SAAU,CAACx4D,EAAG,EAAGC,EAAG,GACpBy5Q,eAAgB,EAChB7tO,OAAQ,CAACmsB,OAAQ,KAAMC,OAAQ,MAC/BwD,YAAa,GAEf+qR,SAAW,CACT/iT,KAAK,GACL+0B,SAAU,CAACx4D,EAAG,EAAGC,EAAG,GACpBy5Q,eAAgB,EAChB7tO,OAAQ,CAACmsB,OAAQ,KAAMC,OAAQ,MAC/BwD,YAAa,GAEfgrR,SAAW,CACThjT,KAAK,GACL+0B,SAAU,CAACx4D,EAAG,EAAGC,EAAG,GACpBy5Q,eAAgB,EAChB7tO,OAAQ,CAACmsB,OAAQ,KAAMC,OAAQ,MAC/BwD,YAAa,GAEfwoR,UAAY,CACVxgT,KAAK,GACL+0B,SAAU,CAACx4D,EAAG,EAAGC,EAAG,GACpBy5Q,eAAgB,EAChB7tO,OAAQ,CAACmsB,OAAQ,KAAMC,OAAQ,MAC/BwD,YAAa,IAIjB9mB,EAAO,KACP+xS,EAAe,KAMjB,SAASv2C,EAAQrzT,GAAS63D,EAAO73D,EAIjC,SAAS++R,IACP,IACE7jN,EACAC,EACA2I,EACAC,EACAo8D,EACA+8I,EANExhN,GAAW,IAAAZ,aAAYjjB,EAAK0C,KAAM1C,EAAKwJ,IAOzCwoS,GAAa,EAETnpO,EAAgB7oE,EAAKuuE,mBAE3B,OAAQ1F,EAAc/hD,aACpB,IAAK,aAEHu+M,GADA2sE,EAA4C,SAA/BnpO,EAAcwE,cACIn+H,EAAOm2R,iBAAmBn2R,EAAOm2R,gBAChEhiN,EAAS,IAAI,EAAJ,QAAUQ,EAASx4D,EAAInc,EAAOqvO,YAAc,EAAG16J,EAASv4D,OAAG24C,OAAWA,GAAW,GAC1Fqf,EAAS,IAAI,EAAJ,QAAUO,EAASx4D,EAAInc,EAAOqvO,YAAc,EAAG16J,EAASv4D,OAAG24C,OAAWA,GAAW,GAC1FgoB,EAAS,IAAI,EAAJ,QAAUpI,EAASx4D,EAAInc,EAAOqvO,YAAc,EAAG16J,EAASv4D,OAAG24C,OAAWA,GAAW,GAC1FioB,EAAS,IAAI,EAAJ,QAAUrI,EAASx4D,EAAInc,EAAOqvO,YAAc,EAAG16J,EAASv4D,OAAG24C,OAAWA,GAAW,GAC1FqkF,EAAY,IAAI,EAAJ,QAAUzkE,EAASx4D,EAAGw4D,EAASv4D,EAAI+5Q,OAAiBphO,OAAWA,GAAW,GAEtF,MAEF,IAAK,WAEHohO,GADA2sE,EAA4C,UAA/BnpO,EAAcwE,eACKn+H,EAAOm2R,gBAAkBn2R,EAAOm2R,gBAChEhiN,EAAS,IAAI,EAAJ,QAAUQ,EAASx4D,EAAGw4D,EAASv4D,EAAIpc,EAAOqvO,YAAc,OAAGt6K,OAAWA,GAAW,GAC1Fqf,EAAS,IAAI,EAAJ,QAAUO,EAASx4D,EAAGw4D,EAASv4D,EAAIpc,EAAOqvO,YAAc,OAAGt6K,OAAWA,GAAW,GAC1FgoB,EAAS,IAAI,EAAJ,QAAUpI,EAASx4D,EAAGw4D,EAASv4D,EAAIpc,EAAOqvO,YAAc,OAAGt6K,OAAWA,GAAW,GAC1FioB,EAAS,IAAI,EAAJ,QAAUrI,EAASx4D,EAAGw4D,EAASv4D,EAAIpc,EAAOqvO,YAAc,OAAGt6K,OAAWA,GAAW,GAC1FqkF,EAAY,IAAI,EAAJ,QAAUzkE,EAASx4D,EAAIg6Q,EAAiBxhN,EAASv4D,OAAG24C,OAAWA,GAAW,GACtF,MAEF,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YAEHof,EAAS,IAAI,EAAJ,QAAUQ,EAASx4D,EAAGw4D,EAASv4D,EAAI88H,EAAcm2F,YAAc,OAAGt6K,OAAWA,GAAW,GACjGioB,EAAS,IAAI,EAAJ,QAAUrI,EAASx4D,EAAGw4D,EAASv4D,EAAI88H,EAAcm2F,YAAc,OAAGt6K,OAAWA,GAAW,GACjGqkF,EAAY,IAAI,EAAJ,QAAUzkE,EAASx4D,EAAGw4D,EAASv4D,OAAG24C,OAAWA,GAAW,GA5CvCmkF,EAoDf,CAChB/kE,OAAQ2uR,EAAa9lR,EAAS7I,EAC9BC,OAAQ0uR,EAAa/lR,EAAS3I,EAC9B2I,OAAQ+lR,EAAa1uR,EAAS2I,EAC9BC,OAAQ8lR,EAAa3uR,EAAS6I,EAC9Bo8D,UAAWA,GAIf,SAAS69I,EAAkB9iN,EAAQC,EAAQ68J,EAAMp3G,EAAMkpO,EAAcC,EAAeC,GAE9E9uR,EAAO88J,GAAQgyH,EAAUhyH,GAC3B+xH,EAAgBC,EAAUhyH,GAAQjxO,EAAOwiW,eAEzCO,EAAeE,EAAUhyH,GAAQjxO,EAAOwiW,eAGtCruR,EAAO88J,GAAQp3G,GAAQkpO,EACzB5uR,EAAO88J,GAAQ78J,EAAO68J,GAAQ8xH,EACrB5uR,EAAO88J,GAAQp3G,GAAQmpO,EAChC7uR,EAAO88J,GAAQ78J,EAAO68J,GAAQ+xH,GAE9B7uR,EAAO88J,IAASp3G,EAChBzlD,EAAO68J,IAASp3G,GA0BpB,SAASqpO,EAAY/uR,EAAQC,EAAQ68J,EAAMp3G,GAkBzC,GAhBA1lD,EAAO88J,IAASp3G,EAChBzlD,EAAO68J,IAASp3G,EACC/oE,EAAKruD,YAAY+qD,WAAWxrD,MAAK,SAAAmhW,GAEhD,OAAIA,IAAeryS,IAGZ,IAAAgsB,+BACL,CAAE3gE,EAAGgnV,EAAW3vS,KAAKr3C,EAAGC,EAAG+mV,EAAW3vS,KAAKp3C,GAC3C,CAAED,EAAGgnV,EAAW7oS,GAAGn+C,EAAGC,EAAG+mV,EAAW7oS,GAAGl+C,GACvC,CAAED,EAAG+8H,EAAc/kE,OAAOh4D,EAAGC,EAAG88H,EAAc/kE,OAAO/3D,GACrD,CAAED,EAAG+8H,EAAc9kE,OAAOj4D,EAAGC,EAAG88H,EAAc9kE,OAAOh4D,OAWvD+3D,EAAO88J,IAASp3G,EAChBzlD,EAAO68J,IAASp3G,MAPD,CACf,IAAIupO,EAAiBtyS,EAAKqJ,QAAQunS,cAClCxoN,EAAcE,UAAU63F,IAASp3G,EACjC/oE,EAAKqJ,QAAQqqI,kBAAkB4+J,EAAe7lO,QAAW1D,EAAMupO,EAAe9lO,QAAUzD,IAQ5F,SAAS+9J,EAAqB/9J,EAAM9rE,EAAO5D,GAAmC,IAAzB0tO,EAAyB,wDAC5E,GAAiC,WAA7B,UAAalpR,YAA0B,CACzC,IAAIgoE,EAAS,EACb,OAAO7lB,EAAKo6G,kBACV,KAAK,EAAAtzF,YAAYE,WACfnB,EAASkhN,EAAkB1tO,EAAShuC,EAAI4xC,EAAMzB,gBAAgBnwC,EAAIguC,EAAS/tC,EAAI2xC,EAAMzB,gBAAgBlwC,EACrG,MACF,KAAK,EAAAw7D,YAAYC,SACflB,EAASkhN,EAAiB1tO,EAAS/tC,EAAI2xC,EAAMzB,gBAAgBlwC,EAAI+tC,EAAShuC,EAAI4xC,EAAMzB,gBAAgBnwC,EACpG,MACF,KAAK,EAAAy7D,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,MACF,KAAK,EAAAJ,YAAYK,UACjB,KAAK,EAAAL,YAAYM,YAIdl4E,EAAO02R,gBAAkB//M,GAAUA,EAAS32E,EAAO02R,kBACtD78J,GAAc,UAAa70E,uBAI/B,OAAO60E,EA9JT93H,KAAKgI,IAAK,UACVhI,KAAKovD,UAAY,KAkKjBpvD,KAAKU,UAAY,WAAQ,OAAOquD,GAChC/uD,KAAKy5I,eAAiB,WACpB,IAAMlgJ,EAAS,EAAKmH,YACpB,OAAInH,GAAUA,EAAOmH,UACZnH,EAAOmH,YAET,MAETV,KAAKo3I,iBAAmB,WAAa,OAAOD,GAC5Cn3I,KAAKygK,gBAAkB,WACrB,OAAIqgM,GAGG,EAAKQ,sBAEdthW,KAAKshW,mBAAqB,WACxB,IAAMr7S,EAAS,EAAKmxF,mBASpB,OARA0pN,EAAe,CACb,IAAI,EAAJ,QAAc/xS,EAAK0C,KAAMxL,EAAOmsB,OAAQrjB,EAAKruD,aAC7C,IAAI,EAAJ,QAAculD,EAAOmsB,OAAQnsB,EAAOosB,OAAQtjB,EAAKruD,aACjD,IAAI,EAAJ,QAAculD,EAAOosB,OAAQpsB,EAAO+0B,OAAQjsB,EAAKruD,aACjD,IAAI,EAAJ,QAAculD,EAAO+0B,OAAQ/0B,EAAOg1B,OAAQlsB,EAAKruD,aACjD,IAAI,EAAJ,QAAculD,EAAOg1B,OAAQlsB,EAAKwJ,GAAIxJ,EAAKruD,eAK/CV,KAAK+yV,qBAAuB,WAC1B,IAAIwO,EAAqB,GACzB,IAAK,IAAMt3L,KAAoB9yB,EACJ,cAArB8yB,GACFs3L,EAAmBxsW,KAAKoiJ,EAAc8yB,IAG1C,OAAOs3L,GAETvhW,KAAKo+V,wBAA0B,WAAa,OAAOsC,GAEnD1gW,KAAKq4D,QAAU,SAASuyG,GACjBA,GACH,UAAahnE,YAAY3+F,GAE3B,IACM4zD,EADa,UAAM12D,WACa4L,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,KAG7D74D,KAAKg2D,KAAO,SAACjH,GAAgD,IAA1CyyS,EAA0C,uDAA3B,KAAMpyS,EAAqB,uDAAT,KAMlD,GALAm7P,EAAQx7P,GACHyyS,GACHvrE,IAEF,EAAK7mO,UAAYA,GACZA,EAAW,CACd,IAAMqyS,GAAiB,IAAAt3K,qBACjBu3K,EAAiB95V,MAAMC,QAAQ45V,IAChCA,EAAehtW,QACfgtW,EAAe,GAAGjmV,MAClBimV,EAAe,GAAGjmV,KAAK7X,UAE5B,EAAKyrD,UAAYsyS,EAAiBD,EAAe,GAAGjmV,KAAK7X,UAAUqE,GAAK,KAqB1E,GAnBA,EAAKsiK,aAGLnzB,EAAc/kE,OAAOpc,KAAK/wD,GAC1BkyI,EAAc/kE,OAAOl3D,OAAS,eAE9Bi8H,EAAc9kE,OAAOrc,KAAK/wD,GAC1BkyI,EAAc9kE,OAAOn3D,OAAS,QAE9Bi8H,EAAcn8D,OAAOhlB,KAAK/wD,GAC1BkyI,EAAcn8D,OAAO9/D,OAAS,QAE9Bi8H,EAAcl8D,OAAOjlB,KAAK/wD,GAC1BkyI,EAAcl8D,OAAO//D,OAAS,eAE9Bi8H,EAAcE,UAAUrhF,KAAK/wD,GAC7BkyI,EAAcE,UAAUn8H,OAAS,gBAG5BsmV,EAAc,CACjB,IAAIhmO,EAAU,EACVD,EAAU,EACV3D,EAAgB7oE,EAAKuuE,mBACzB,OAAQ1F,EAAc/hD,aACpB,IAAK,aACH0lD,EAA0C,SAA/B3D,EAAcwE,aAA0Bn+H,EAAOm2R,gBAAkB,GAA+B,GAAzBn2R,EAAOm2R,gBACzF,MAEF,IAAK,WACH54J,EAA0C,UAA/B5D,EAAcwE,aAA2Bn+H,EAAOm2R,gBAAkB,GAA+B,GAAzBn2R,EAAOm2R,gBAW9FrlO,EAAKqJ,QAAQqqI,kBAAkBjnE,EAASD,IAI1C,aAAE,kBAAkBrkE,SAAS,qBAG/Bl3D,KAAKsqK,WAAa,WAChB,UAAa7wG,SACX,UAAaC,OAAOM,OACpB/0D,EAAKg1D,OACLh1D,EACA,UAAa20D,WAAW8jC,SAG1B,UAAajkC,SACX,UAAaC,OAAOC,WACpBhR,EACA1jD,EACA,UAAa20D,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOI,WACpB3R,EACAljD,EACA,UAAa20D,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOK,SACpBvR,EACAvjD,EACA,UAAa20D,WAAW8jC,SAE1B,UAAajkC,SACX,UAAaC,OAAOglC,YACpBsC,EACA/7F,EACA,UAAa20D,WAAWojC,UAG5Bh9F,KAAK+3D,iBAAmB,WACtB,UAAiB6rC,YAAY,GAC7B,EAAK52C,UAAW,EAChB,IAAK,IAAIz4D,EAAI,EAAGA,EAAI4iJ,EAAc1iJ,OAAQF,IACxC4iJ,EAAc5iJ,GAAGwjE,oBAGrB/3D,KAAK2yI,aAAe,WAClB,EAAK23B,aACL,EAAKt9G,UAAW,EAChB,IAAK,IAAIz4D,EAAI,EAAGA,EAAI4iJ,EAAc1iJ,OAAQF,IACxC4iJ,EAAc5iJ,GAAGo+I,gBAGrB3yI,KAAKi/J,OAAS,WACZ,MAAO,CACL9nB,cAAgB,CACd/kE,OAAQ+kE,EAAc/kE,OAAO6sF,SAC7B5sF,OAAQ8kE,EAAc9kE,OAAO4sF,SAC7BjkF,OAAQm8D,EAAcn8D,OAAOikF,SAC7BhkF,OAAQk8D,EAAcl8D,OAAOgkF,SAC7B5nB,UAAWF,EAAcE,UAAU4nB,UAErC7mG,QAAS,CACPk8F,SAAUvlG,EAAKqJ,QAAQunS,cACvB33V,GAAIhI,KAAKgI,MAIfhI,KAAKkuD,OAAS,SAACa,EAAM4yS,GACnB,IAAK,IAAIC,KAAgBD,EAAYxqN,cACnCA,EAAcyqN,GAAgB,IAAI,EAAJ,QAC9BzqN,EAAcyqN,GAAc1zS,OAAOyzS,EAAYxqN,cAAcyqN,IAE/D,EAAK5rS,KAAKjH,EAAM4yS,EAAYxqN,cAAewqN,EAAYvpS,QAAQpwD,KAEjEhI,KAAK4qD,UAAY,WACf,OAAOmE,EAAKnE,aAEd5qD,KAAK6hW,iBAAmB,WACtB,IAAIC,GAAkB,IAAAxwR,kBAAiB6lE,EAAc/kE,OAAQ+kE,EAAc9kE,QAE3E,OAAO,IAAA0F,yBAAwB+pR,IAEjC9hW,KAAKs9L,sBAAwB,WAC3B,IAAIwkK,GAAkB,IAAAxwR,kBAAiB6lE,EAAc/kE,OAAQ+kE,EAAc9kE,QAE3E,OAAO,IAAA0F,yBAA0C,EAAlB+pR,IAEjC9hW,KAAKsyD,oBAAsB,WACzB,GAA8B,OAA1B,EAAK4tI,iBACP,MAAO,CACL1tI,OAAQ,EACRD,YAAa,GAIjB,IAAIwvS,EAAmBhzS,EAAKyF,gBAC1BwtS,EAAejzS,EAAK0F,kBAEpBwtS,EAAgB,EAAKJ,mBAIvB,MAAO,CACLrvS,OAASuvS,EAJahzS,EAAKuuB,mBAAmB2kR,GAK9C1vS,YAAcyvS,EAJIC,EAAc1vS,cAQpCvyD,KAAK4rD,eAAiB,WAAQ,OAAO7kD,EAAM6kD,gBAE3C5rD,KAAKy8L,YAAc,WAA+B,IAAtB5zI,EAAsB,uDAAd,EAAGC,EAAW,uDAAH,EAC7C,IAAK,IAAI84S,KAAgBzqN,EACvBA,EAAcyqN,GAAcxnV,GAAKyuC,EACjCsuF,EAAcyqN,GAAcvnV,GAAKyuC,GAIrC9oD,KAAKk3V,kBAAoB,SAAS9uS,GAChC,IAAIrG,EAAQ,UAAUkJ,WAClBpC,GAAS9hD,EAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACnD+G,GAAS/hD,EAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAEvD+G,EAAQ+sO,EAAqB/sO,EAAOquF,EAAcE,UAAWjvF,GAC7DS,EAAQgtO,EAAqBhtO,EAAOsuF,EAAcE,UAAWjvF,GAE7DpoD,KAAK07L,SAAS7yI,EAAOC,GAErB/hD,EAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,EACrCtT,EAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAGvCpa,KAAK8rD,qBAAuB,WAAQ,OAAO/kD,EAAM+/C,WACjD9mD,KAAK07L,SAAW,SAAS7yI,EAAOC,GAC1B,UAAU+mG,kBAAmB,IAAAw1C,gDAA+CrlM,KAAKy5I,oBACnF,IAAA6rD,sBAAqBtlM,KAAKy5I,kBAG5B,IAAI9iJ,EAAIo4D,EAAKo6G,iBAETxyK,IAAM,EAAAk/E,YAAYC,SACpBqrR,EAAYhqN,EAAc9kE,OAAQ8kE,EAAcn8D,OAAQ,IAAKnyB,GAGpDlyD,IAAM,EAAAk/E,YAAYE,YAS3BorR,EAAYhqN,EAAc9kE,OAAQ8kE,EAAcn8D,OAAQ,IAAKlyB,GAQ/D,IACM+P,EADQ,UAAM12D,WACa4L,UAAU8qD,mBAE3C,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,KAG7D74D,KAAK05R,mBAAqB,SAAStxO,EAAUgqB,EAAQC,EAAQ6uR,GAC3D,IAAIn/S,EAAQ,UAAUkJ,WAClBpC,GAAS9hD,EAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAAK2nC,EACnD+G,GAAS/hD,EAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,GAAK0nC,EAEvD+G,EAAQ+sO,EAAqB/sO,EAAOspB,EAAQhqB,GAAU,GACtDS,EAAQgtO,EAAqBhtO,EAAOupB,EAAQhqB,GAAU,GAEtDpoD,KAAK21R,UAAU9sO,EAAOC,EAAOspB,EAAQC,EAAQ6uR,GAE7Cn6V,EAAMggD,kBAAkB1sC,EAAI+tC,EAAS/tC,EACrCtT,EAAMggD,kBAAkB3sC,EAAIguC,EAAShuC,GAGvCpa,KAAKkiW,kBAAoB,SAAShrW,EAAO28R,GACvC,IAAI/qO,EAAQ,EACVD,EAAQ,EACR+oB,GAAgB,IAAAN,kBAAiBuiN,EAAY5tO,OAAOmsB,OAAQyhN,EAAY5tO,OAAOosB,QAC/EulD,EAAgB7oE,EAAKuuE,mBAEvB,OAAOvuE,EAAKo6G,kBACV,KAAK,EAAAtzF,YAAYE,WAEf,OAAQ89M,EAAYr4Q,MAClB,IAAK,cACHqtC,EAAuC,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAgB16E,EAAQ06E,EAChF5xE,KAAK21R,UAAU9sO,EAAOC,EAAOquF,EAAc/kE,OAAQ+kE,EAAc9kE,OAAQ8kE,EAAcl8D,QACvF,MACF,IAAK,YACHpyB,EAAuC,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAgB16E,EAAQ06E,EACjF5xE,KAAK21R,UAAU9sO,EAAOC,EAAOquF,EAAcn8D,OAAQm8D,EAAcl8D,OAAQk8D,EAAc/kE,QACvF,MACF,IAAK,WACHvpB,EAAuC,SAA/B+uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,EAChF5xE,KAAK21R,UAAU9sO,EAAQ,EAAGC,EAAOquF,EAAc/kE,OAAQ+kE,EAAc9kE,OAAQ8kE,EAAcl8D,QAE3FpyB,EAAuC,SAA/B+uE,EAAcwE,aAA0BllI,EAAQ06E,GAAgB16E,EAAQ06E,EAChF5xE,KAAK21R,UAAU9sO,EAAQ,EAAGC,EAAOquF,EAAcn8D,OAAQm8D,EAAcl8D,OAAQk8D,EAAc/kE,QAE3F,MACF,IAAK,WACHR,EAA0C,OAA1B5xE,KAAKkgM,kBAA6BtuH,EAAgBA,EAClE9oB,EAAuC,SAA/B8uE,EAAcwE,cAA2BllI,EAAQ06E,EAAe16E,EAAQ06E,EAChF5xE,KAAK07L,SAAS7yI,EAAOC,GAGzB,MACF,KAAK,EAAA+sB,YAAYC,SACf,OAAQ+9M,EAAYr4Q,MAClB,IAAK,cACHstC,EAAuC,UAA/B8uE,EAAcwE,cAA4BllI,EAAQ06E,EAAe16E,EAAQ06E,EACjF5xE,KAAK21R,UAAU9sO,EAAOC,EAAOquF,EAAc/kE,OAAQ+kE,EAAc9kE,OAAQ8kE,EAAcl8D,QACvF,MACF,IAAK,YACHnyB,EAAuC,UAA/B8uE,EAAcwE,aAA2BllI,EAAQ06E,GAAiB16E,EAAQ06E,EAClF5xE,KAAK21R,UAAU9sO,EAAOC,EAAOquF,EAAcn8D,OAAQm8D,EAAcl8D,OAAQk8D,EAAc/kE,QACvF,MACF,IAAK,WACHtpB,EAAuC,UAA/B8uE,EAAcwE,cAA4BllI,EAAQ06E,EAAe16E,EAAQ06E,EACjF5xE,KAAK21R,UAAU9sO,EAAOC,EAAQ,EAAGquF,EAAcn8D,OAAQm8D,EAAcl8D,OAAQk8D,EAAc/kE,QAE3FtpB,EAAuC,UAA/B8uE,EAAcwE,aAA2BllI,EAAQ06E,GAAiB16E,EAAQ06E,EAClF5xE,KAAK21R,UAAU9sO,EAAOC,EAAQ,EAAGquF,EAAc/kE,OAAQ+kE,EAAc9kE,OAAQ8kE,EAAcl8D,QAC3F,MACF,IAAK,WACHrJ,EAA0C,OAA1B5xE,KAAKkgM,kBAA6BtuH,EAAgBA,EAClE/oB,EAAuC,UAA/B+uE,EAAcwE,cAA4BllI,EAAQ06E,EAAe16E,EAAQ06E,EACjF5xE,KAAK07L,SAAS7yI,EAAOC,GAGzB,MACF,KAAK,EAAA+sB,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,MACF,KAAK,EAAAJ,YAAYK,UACjB,KAAK,EAAAL,YAAYM,aAKrBn2E,KAAK21R,UAAY,SAAS9sO,EAAOC,EAAOspB,EAAQC,EAAQ6uR,GAClD,UAAUrxM,kBAAmB,IAAAw1C,gDAA+CrlM,KAAKy5I,oBACnF,IAAA6rD,sBAAqBtlM,KAAKy5I,kBAE5B,IAAI9iJ,EAAIo4D,EAAKo6G,iBACXv2F,SACAwhN,SACAx8J,EAAgB7oE,EAAKuuE,mBACrBsgE,EAAiB7uI,EAAKwJ,GAAGslI,gBAAkB9uI,EAAKuqB,yBAChDC,EAAWxqB,EAAKruD,YAAY84E,YAAYzqB,GACxC+uI,EAAmBvkH,EAAShhB,GAAGslI,gBAAkBtkH,EAASD,yBAC1D6kH,EAAiB,EACjBC,EAAmB,EAEjBznM,IAAM,EAAAk/E,YAAYC,UACpBlD,GAAW,IAAAZ,aAAYmlE,EAAc9kE,OAAQ8kE,EAAcn8D,QAC3Do5M,EAAiD,UAA/Bx8J,EAAcwE,cAA4Bn+H,EAAOm2R,iBAAmBn2R,EAAOm2R,gBAC7Fj9I,EAAcE,UAAUj9H,EAAIw4D,EAASx4D,EAAIg6Q,EACzCj9I,EAAcE,UAAUh9H,EAAIu4D,EAASv4D,EACrC8jL,EAAgD,UAA/BvmE,EAAcwE,cAA4B0hE,GAAoBF,EAC/EQ,EAAkD,UAA/BxmE,EAAcwE,cAA4BwhE,GAAkBE,EAG/Eo3F,EACE9iN,EAAQC,EAAQ,IAAKvpB,EACrBiG,EAAKyuI,mBAAmBnjL,EAAI8jL,EAC5BpvI,EAAK2uI,oBAAoBrjL,EAAI+jL,EAC7B8iK,IAEOvqW,IAAM,EAAAk/E,YAAYE,aAC3BnD,GAAW,IAAAZ,aAAYmlE,EAAc9kE,OAAQ8kE,EAAcn8D,QAC3Do5M,EAAiD,SAA/Bx8J,EAAcwE,cAA2Bn+H,EAAOm2R,iBAAmBn2R,EAAOm2R,gBAC5Fj9I,EAAcE,UAAUj9H,EAAIw4D,EAASx4D,EACrC+8H,EAAcE,UAAUh9H,EAAIu4D,EAASv4D,EAAI+5Q,EACzCj2F,EAAgD,SAA/BvmE,EAAcwE,cAA2BwhE,GAAkBE,EAC5EM,EAAkD,SAA/BxmE,EAAcwE,cAA2B0hE,GAAoBF,EAGhFs3F,EACE9iN,EAAQC,EAAQ,IAAKxpB,EACrBkG,EAAKwuI,mBAAmBnjL,EAAI+jL,EAC5BpvI,EAAK0uI,oBAAoBrjL,EAAIgkL,EAC7B8iK,KAkBNlhW,KAAKkgM,eAAiB,WAA4E,IAA3EztH,EAA2E,uDAAlE1jB,EAAK0C,KAAMihB,EAAuD,uDAA9C3jB,EAAKwJ,GAAI8+E,EAAqC,uDAAzBF,EAAc9kE,OAE/E8vR,EAAW,CAAE/nV,EAAGs4D,EAAOt4D,EAAIq4D,EAAOr4D,EAAGC,EAAGq4D,EAAOr4D,EAAIo4D,EAAOp4D,GAC1D+nV,EAAc,CAAEhoV,EAAGi9H,EAAUj9H,EAAIq4D,EAAOr4D,EAAGC,EAAGg9H,EAAUh9H,EAAIo4D,EAAOp4D,GAGnEgoV,GAAa,IAAAvkJ,gBAAeqkJ,EAAUC,GAG5C,OAAIC,EAAa,EAER,KAGA,OAIXriW,KAAKsiW,gBAAkB,SAAC3+S,GACtB,IAAIyuB,EAASrjB,EAAK+uG,wBAAwB3mB,EAAc/kE,QACtDC,EAAStjB,EAAK+uG,wBAAwB3mB,EAAc9kE,QACpD2I,EAASjsB,EAAK+uG,wBAAwB3mB,EAAcn8D,QACpDC,EAASlsB,EAAK+uG,wBAAwB3mB,EAAcl8D,QAItDt3B,EAAIyuG,OACJzuG,EAAI+W,YACJ/W,EAAIgX,OAAOyX,EAAOh4D,EAAGg4D,EAAO/3D,GAC5BspC,EAAIiX,OAAOyX,EAAOj4D,EAAGi4D,EAAOh4D,GAC5BspC,EAAIiX,OAAOogB,EAAO5gE,EAAG4gE,EAAO3gE,GAC5BspC,EAAIiX,OAAOqgB,EAAO7gE,EAAG6gE,EAAO5gE,GAC5BspC,EAAI6tG,YACJ7tG,EAAIwuG,UAlmBc,sBAmmBlBxuG,EAAImX,SACJnX,EAAI88E,OACJ98E,EAAI0uG,WAGNryJ,KAAKi6D,OAAS,SAAStW,IACjB,IAAA5M,qCAAqC,IAAAinC,8BAA6BjvB,MASxE,SAA2BpL,GACzB,IAAIk6G,EAAa9uG,EAAK+uG,wBAAwB3mB,EAAc9kE,QAC1D0rF,EAAWhvG,EAAK+uG,wBAAwB3mB,EAAcn8D,QAExDr3B,EAAI+W,YACJ/W,EAAIgX,OAAOkjG,EAAWzjJ,EAAGyjJ,EAAWxjJ,GACpCspC,EAAIiX,OAAOmjG,EAAS3jJ,EAAG2jJ,EAAS1jJ,GAChCspC,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc58D,EAAO22R,cACzBjxO,EAAImX,SACJnX,EAAI6tG,YAhBJ+oI,CAAkB52O,GAClB62O,EAAY72O,GACZ4+S,EAAmB5+S,KAiBrB,IAAM62O,EAAc,SAAC72O,GACnB,IAIEi0E,EAAgB7oE,EAAKuuE,mBACrBygC,EAAYhvG,EAAK+uG,wBAAwB/uG,EAAKwJ,IAC9CslG,EAAa9uG,EAAK+uG,wBAAwB/uG,EAAK0C,MAC/C2gB,EAASrjB,EAAK+uG,wBAAwB3mB,EAAc/kE,QACpD6I,EAASlsB,EAAK+uG,wBAAwB3mB,EAAcl8D,QACpDq5J,EAAU,EACVC,EAAU,EACV/4G,EAAU,EACVD,EAAU,EACVinO,EAAiB,EACjBC,EAAiB,EACjB1gT,EAAQ,UAAaA,MACrB2gT,GAAkB,IAAApxR,kBAAiB6lE,EAAcn8D,OAAQm8D,EAAcl8D,QAEzE,OAAQ28C,EAAc/hD,aACpB,IAAK,aACH0+J,EAA0C,SAA/B38G,EAAcwE,aAA0Bn+H,EAAOo2R,aAAep2R,EAAOo2R,YAChFouE,EAAiD,SAA/B7qO,EAAcwE,aAA0BsmO,EAAkB3gT,GAAU2gT,EAAkB3gT,EAElC,OAAlE,EAAKm+I,eAAenxI,EAAK0C,KAAM1C,EAAKwJ,GAAI4+E,EAAc9kE,UACxDowR,GAAkBA,GAEpBjnO,EAA0C,SAA/B5D,EAAcwE,cAA4BZ,EAAUA,EAC/DD,EAAU,EACV,MAEF,IAAK,WACH+4G,EAA0C,UAA/B18G,EAAcwE,aAA2Bn+H,EAAOo2R,aAAcp2R,EAAOo2R,YAChFmuE,EAAiD,UAA/B5qO,EAAcwE,aAA2BsmO,EAAkB3gT,GAAS2gT,EAAkB3gT,EAElC,OAAlE,EAAKm+I,eAAenxI,EAAK0C,KAAM1C,EAAKwJ,GAAI4+E,EAAc9kE,UACxDmwR,GAAkBA,GAEpBjnO,EAA0C,UAA/B3D,EAAcwE,aAA4Bb,GAAWA,EAChEC,EAAU,EAYd73E,EAAI+W,YACJm5F,EAAUlwG,EAAKk6G,EAAWzjJ,EAAIk6N,EAASz2E,EAAWxjJ,EAAIk6N,EAASniK,EAAOh4D,EAAIk6N,EAASliK,EAAO/3D,EAAIk6N,GAC9F1gF,EAAWlwG,EACTyuB,EAAOh4D,EAAIk6N,EAAU94G,EAAUgnO,EAC/BpwR,EAAO/3D,EAAIk6N,EAAUh5G,EAAUknO,EAC/BxnR,EAAO7gE,EAAIk6N,EAAU94G,EAAUgnO,EAC/BvnR,EAAO5gE,EAAIk6N,EAAUh5G,EAAUknO,GAEjC5uM,EAAUlwG,EAAKs3B,EAAO7gE,EAAIk6N,EAASr5J,EAAO5gE,EAAIk6N,EAASx2E,EAAS3jJ,EAAIk6N,EAASv2E,EAAS1jJ,EAAIk6N,GAC1F5wL,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc58D,EAAO22R,cACzBjxO,EAAImX,SACJnX,EAAI6tG,aAGA+wM,EAAqB,SAAC5+S,GAC1B,IAAI5B,EAAQ,UAAaA,MACvBc,GAAW,IAAA0uB,oBACXg7J,EAAQ1pL,EAAU/qC,WAAa,MAAQ,UAAOyuC,eAC9CqxE,EAAgB7oE,EAAKuuE,mBACrBs3J,EAAgB32R,EAAO22R,cACvBp5J,EAAU,EACVD,EAAU,EAmBZ,OAjBA53E,EAAI+W,YACJ/W,EAAI4oL,KAAOA,EACX5oL,EAAI6oL,UAAY,SAChB7oL,EAAIwuG,UAAYyiI,EAcRh9J,EAAc/hD,aACpB,IAAK,aAEH2lD,EAA0C,SAA/B5D,EAAcwE,cAA2B,GAAK,GACzDb,EAA0C,SAA/B3D,EAAcwE,aAA0B,IAAM,GACzDumO,EAAqBxrN,EAAcn8D,OAAQm8D,EAAcl8D,OAAQugD,EAASD,EAAS14E,EAAUc,EAAK+8S,EAAsBG,SAAU,YAGlI,IAAI6B,GAAkB,IAAApxR,kBAAiB6lE,EAAcn8D,OAAQm8D,EAAcl8D,QAEL,OAAlE,EAAKilH,eAAenxI,EAAK0C,KAAM1C,EAAKwJ,GAAI4+E,EAAc9kE,UACxDqwR,GAAmBA,GAErBlnO,EAA0C,SAA/B5D,EAAcwE,cAA2B,GAAK,GACzDb,EAA0C,SAA/B3D,EAAcwE,aAA0B,GAAMsmO,EAAkB3gT,GAAU,GAAO2gT,EAAkB3gT,EAC9G4gT,EAAqBxrN,EAAc/kE,OAAQ+kE,EAAcl8D,OAAQugD,EAASD,EAAS14E,EAAUc,EAAK+8S,EAAsBE,SAAU,YAGlIplO,EAA0C,SAA/B5D,EAAcwE,aAA0B,IAAM,GACzDb,EAA0C,SAA/B3D,EAAcwE,aAA0B,IAAM,GACzDumO,EAAqB5zS,EAAK0C,KAAM0lF,EAAc/kE,OAAQopD,EAASD,EAAS14E,EAAUc,EAAK+8S,EAAsBC,YAAa,eAG1HnlO,EAA0C,SAA/B5D,EAAcwE,cAA2B,GAAK,GACzDb,EAA0C,SAA/B3D,EAAcwE,aAA0B,IAAM,GACzDumO,EAAqBxrN,EAAcl8D,OAAQlsB,EAAKwJ,GAAIijE,EAASD,EAAS14E,EAAUc,EAAK+8S,EAAsBrC,UAAW,aAGtH,MAEF,IAAK,WAEH9iO,EAA0C,UAA/B3D,EAAcwE,aAA2B,IAAM,GAC1DZ,EAA0C,UAA/B5D,EAAcwE,aAA2B,IAAM,GAE1DumO,EAAqBxrN,EAAcn8D,OAAQm8D,EAAcl8D,OAAQugD,EAASD,EAAS14E,EAAUc,EAAK+8S,EAAsBG,SAAU,YAElIrlO,EAA0C,UAA/B5D,EAAcwE,aAA2B,IAAM,GAC1Db,EAA0C,UAA/B3D,EAAcwE,cAA4B,GAAK,GAG1DwmO,EAAkBj/S,EAAKoL,EAAK0C,KAAM0lF,EAAc/kE,OAAQvvB,EAAU24E,EAASD,EAASmlO,EAAsBC,YAAa,eAEvHplO,EAA0C,UAA/B3D,EAAcwE,aAA2B,IAAM,GAE1DwmO,EAAkBj/S,EAAKwzF,EAAcl8D,OAAQlsB,EAAKwJ,GAAI1V,EAAU24E,EAASD,EAASmlO,EAAsBrC,UAAW,aAGnH,IAAIqE,GAAkB,IAAApxR,kBAAiB6lE,EAAcn8D,OAAQm8D,EAAcl8D,QAEL,OAAlE,EAAKilH,eAAenxI,EAAK0C,KAAM1C,EAAKwJ,GAAI4+E,EAAc9kE,UACxDqwR,GAAmBA,GAErBlnO,EAA0C,UAA/B5D,EAAcwE,aAA2B,GAAMsmO,EAAkB3gT,GAAU,GAAM2gT,EAAkB3gT,EAC9Gw5E,EAAU,EACVqnO,EAAkBj/S,EAAKwzF,EAAc/kE,OAAQ+kE,EAAcl8D,OAAQp4B,EAAU24E,EAASD,EAASmlO,EAAsBE,SAAU,cAuBrI,SAAS+B,EAAqBvwR,EAAQC,EAAQmpD,EAASD,EAAS14E,EAAUc,EAAKk/S,EAAsBrnV,GACnG,IAAIumC,EAAQ,UAAaA,MACvB6wB,GAAW,IAAAZ,aAAYI,EAAQC,GAC/BuC,EAAS7lB,EAAKnE,YACdkpO,GAAiB,IAAAxiN,kBAAiBc,EAAQC,GAC1C+5J,EAA0C,WAA7B,UAAax/N,aAA2B,IAAAqsE,uBAAsB66M,EAAeh8Q,aAAc,IAAAghE,kBAAiBg7M,EAAeh8Q,YACxI4yN,EAAQ/mL,EAAIgnL,YAAYyB,GAE1Bx5J,EAASx4D,EAAIw4D,EAASx4D,EAAI2nC,EAAQ6yB,EAAOx6D,EACzCw4D,EAASv4D,EAAIu4D,EAASv4D,EAAI0nC,EAAQ6yB,EAAOv6D,EAAIwoC,EAAW,EACxDc,EAAI8oL,SAASL,EAAYx5J,EAASx4D,EAAIohH,EAAS5oD,EAASv4D,EAAIkhH,EAASmvG,EAAO7nL,GAE5EggT,EAAqBhlT,KAAO4sL,EAAkB73J,EAASx4D,EAAIohH,EAAS5oD,EAASv4D,EAAIkhH,EAASmvG,EAAO,EAAA70J,YAAYE,YAC7G8sR,EAAqBjwR,SAAW,CAACx4D,EAAGw4D,EAASx4D,EAAIohH,EAASnhH,EAAGu4D,EAASv4D,EAAIkhH,GAC1EsnO,EAAqB/uE,eAAiBA,EACtC+uE,EAAqB58S,OAAS,CAAEmsB,OAAQA,EAAQC,OAAQA,GACxDwwR,EAAqBrnV,KAAOA,EAC5BqnV,EAAqBhtR,YAAc,EAAAA,YAAYE,WAGjD,SAAS6sR,EAAkBj/S,EAAKyuB,EAAQC,EAAQxvB,EAAU24E,EAASD,EAASsnO,EAAsBrnV,GAChG,IAAIumC,EAAQ,UAAaA,MACvB6wB,GAAW,IAAAZ,aAAYI,EAAQC,GAC/BuC,EAAS7lB,EAAKnE,YACdkpO,GAAiB,IAAAxiN,kBAAiBc,EAAQC,GAC1CywR,EAA4C,WAA7B,UAAal2V,aAA2B,IAAAqsE,uBAAsB66M,EAAeh8Q,aAAc,IAAAghE,kBAAiBg7M,EAAeh8Q,YAC1I4yN,EAAQ/mL,EAAIgnL,YAAYm4H,GACxBlrO,EAAgB7oE,EAAKuuE,mBAEvB1qD,EAASx4D,EAAIw4D,EAASx4D,EAAI2nC,EAAQ6yB,EAAOx6D,EACzCw4D,EAASv4D,EAAIu4D,EAASv4D,EAAI0nC,EAAQ6yB,EAAOv6D,EAAIwoC,EAAW,EAExDc,EAAIyuG,OACJzuG,EAAI0oL,WACFz0G,EAAcwE,aAA2BxpD,EAASx4D,EAAIohH,IACtD5D,EAAcwE,aAA2BxpD,EAASv4D,EAAIkhH,IAExD53E,EAAIpQ,OAAsC,UAA/BqkF,EAAcwE,aAA2BhyH,KAAKqnE,GAAK,GAAKrnE,KAAKqnE,GAAK,GAC7E9tB,EAAI8oL,SAASq2H,EAAc,EAAG,EAAGn/S,EAAIgnL,YAAYm4H,GAAejgT,GAChEc,EAAI0uG,UAEJwwM,EAAqBhlT,KAAO4sL,EAAkB73J,EAASx4D,EAAIohH,EAAS5oD,EAASv4D,EAAIkhH,EAASmvG,EAAO,EAAA70J,YAAYC,UAC7G+sR,EAAqBjwR,SAAW,CAACx4D,EAAGw4D,EAASx4D,EAAIohH,EAASnhH,EAAGu4D,EAASv4D,EAAIkhH,GAC1EsnO,EAAqB/uE,eAAiBA,EACtC+uE,EAAqB58S,OAAS,CAAEmsB,OAAQA,EAAQC,OAAQA,GACxDwwR,EAAqBrnV,KAAOA,EAC5BqnV,EAAqBhtR,YAAc,EAAAA,YAAYC,SAGjD,SAAS+9E,EAAUC,EAASC,EAAOC,EAAOC,EAAKC,GAC7C,IACIrgF,EAAKogF,EAAMF,EACXjgF,EAAKogF,EAAMF,EACXx/G,EAAQpqC,KAAKozE,MAAM1J,EAAID,GAE3BigF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOq5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EAPD,GAOiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAPhD,GAOgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IACzGqiF,EAAQn5F,OAAOs5F,EAAKC,GACpBJ,EAAQl5F,OAAOq5F,EATD,GASiB7pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIyiF,EAThD,GASgE9pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAEzGqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAZD,GAYmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAZlD,GAYoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAC7GqiF,EAAQn5F,OAAOo5F,EAAOC,GACtBF,EAAQl5F,OAAOm5F,EAdD,GAcmB3pJ,KAAKsnE,IAAIl9B,EAAQpqC,KAAKqnE,GAAK,GAAIuiF,EAdlD,GAcoE5pJ,KAAKunE,IAAIn9B,EAAQpqC,KAAKqnE,GAAK,IAG/G,SAAS9oB,EAAYP,EAAUjyD,GAK7B,IAAK,IAAMyB,KAHXmP,EAAMskO,mBAAoB,EAC1BtkO,EAAM6kD,gBAAiB,EAEA80S,EACrB,GAAIl2H,EAAgBk2H,EAAsB9oW,GAAUimD,KAAMuK,GAAW,CACnErhD,EAAMskO,mBAAoB,EAC1BtkO,EAAM8sR,YAAc6sE,EAAsB9oW,GAC1C,MAQJ,GA4EF,SAAyBwwD,GACvB,IAAIgqB,EAASrjB,EAAK+uG,wBAAwB3mB,EAAc/kE,QACtDC,EAAStjB,EAAK+uG,wBAAwB3mB,EAAc9kE,QACpD2I,EAASjsB,EAAK+uG,wBAAwB3mB,EAAcn8D,QACpDC,EAASlsB,EAAK+uG,wBAAwB3mB,EAAcl8D,QAElD8nR,EAAY,CACd,CAAC3wR,EAAOh4D,EAAGg4D,EAAO/3D,GAClB,CAACg4D,EAAOj4D,EAAGi4D,EAAOh4D,GAClB,CAAC2gE,EAAO5gE,EAAG4gE,EAAO3gE,GAClB,CAAC4gE,EAAO7gE,EAAG6gE,EAAO5gE,IAGpB,OAAO,IAAAiqJ,aAAYy+L,EAAW36S,GA7F1B46S,CAAgB56S,KAClBrhD,EAAM6kD,gBAAiB,GAGrBiwO,EAAiBzzO,EAAU+uF,EAAcE,WAAY,CASvD,OALItwI,EAAM+/C,WACR7hD,EAAKiyV,kBAAkB9uS,GAEzB,UAAai7C,iBAAiB9pG,QAC9B,UAAa+uD,aAAY,GAAM,GACxByG,EAAKo6G,kBACV,KAAK,EAAAtzF,YAAYE,WACf,UAAaxtB,UAAU,WAAYtjD,GACnC,MACF,KAAK,EAAA4wE,YAAYC,SACf,UAAavtB,UAAU,WAAYtjD,GACnC,MACF,KAAK,EAAA4wE,YAAYG,UACjB,KAAK,EAAAH,YAAYI,UACf,UAAa1tB,UAAU,YAAatjD,GACpC,MACF,KAAK,EAAA4wE,YAAYK,UACjB,KAAK,EAAAL,YAAYM,UACf,UAAa5tB,UAAU,YAAatjD,GAIxC,OAAO8B,EAAM+/C,UASR,OAAI+0O,EAAiBzzO,EAAU+uF,EAAc/kE,SAG9CrrE,EAAM+/C,WACR7hD,EAAKy0R,mBAAmBtxO,EAAU+uF,EAAc/kE,OAAQ+kE,EAAc9kE,OAAQ8kE,EAAcl8D,QAEvFl0E,EAAM+/C,WAEJ+0O,EAAiBzzO,EAAU+uF,EAAcl8D,SAC9Cl0E,EAAM+/C,WACR7hD,EAAKy0R,mBAAmBtxO,EAAU+uF,EAAcl8D,OAAQk8D,EAAcn8D,OAAQm8D,EAAc/kE,QAEvFrrE,EAAM+/C,WAEJ//C,EAAMskO,mBACf,UAAa/iL,mBACb,UAAaC,UAAWxhD,EAAM8sR,YAAYh+M,cAAgB,EAAAA,YAAYE,WAAc,OAAS,gBAAiB9wE,KAG9G,UAAagkD,YAAYhkD,IAClB,GASX,SAAS42R,EAAiBzzO,EAAU4D,GAKlC,OAJAjlD,EAAMokO,kBAAoBn/K,EAAMs0G,mBAIzBv5J,EAAMokO,iBAAmBpkO,EAAM+/C,WAAa//C,EAAMqkO,cAAgBp/K,EAAMhkD,KAAOjB,EAAMqkO,aAAapjO,GAG3G,SAASwiO,EAAgBu4H,EAAW36S,GAClC,OAAO,IAAAk8G,aAAYy+L,EAAW36S,GAmBhC,SAASqiL,EAAkBrwN,EAAGC,EAAGizU,EAAO2V,GACtC,IAAMrrO,EAAgB7oE,EAAKuuE,mBACvBgpC,EAAc,GA4BlB,OA3BI28L,IAAoB,EAAAptR,YAAYE,WAClCuwF,EAAc,CACZ,CAAClsJ,EAAIhQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,GAAI0a,EAAI,IAC9C,CAACD,EAAIhQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,GAAI0a,EAAI,IAC9C,CAACD,EAAIhQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,GAAI0a,EAAI,IAC9C,CAACD,EAAIhQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,GAAI0a,EAAI,KAEvC4oV,IAAoB,EAAAptR,YAAYC,WACN,UAA/B8hD,EAAcwE,aAChBkqC,EAAc,CACZ,CAAClsJ,EAAI,GAAIC,EAAIjQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,IAC9C,CAACya,EAAI,EAAGC,EAAIjQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,IAC7C,CAACya,EAAI,EAAGC,EAAIjQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,GAC7C,CAACya,EAAI,GAAIC,EAAIjQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,IAER,UAA/Bi4H,EAAcwE,eACvBkqC,EAAc,CACZ,CAAClsJ,EAAI,GAAIC,EAAIjQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,IAC9C,CAACya,EAAI,EAAGC,EAAIjQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,IAC7C,CAACya,EAAI,EAAGC,EAAIjQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,GAC7C,CAACya,EAAI,GAAIC,EAAIjQ,KAAKyC,OAAOygV,EAAM3tV,OAAQ,GAAG,EAAI,MAO7C2mK,EAGT,SAAS99G,EAAUJ,EAAUjyD,GAGvB4Q,EAAM+/C,YACR//C,EAAM+/C,WAAY,EAClB//C,EAAMggD,kBAAoB,MAI9B,SAASoB,EAAYC,EAAUjyD,GAE7B,GAAI4Q,EAAMokO,gBAAiB,CAGzB,IAAK,IAAMn/K,KAFXjlD,EAAM+/C,WAAY,EAClB//C,EAAMggD,kBAAoBqB,EACN+uF,EACdA,EAAcnrF,GAAOs0G,iBAAiBl4G,KACxCrhD,EAAMqkO,aAAej0F,EAAcnrF,IAGvC,OAAO,EAGT,GAAIjlD,EAAMskO,oBAAsBjyO,SAASg9F,cAAc,eAAgB,CACrEj+F,OAAOkwD,kBAAmB,EAC1B,UAAaC,cAEb,IAAMu/F,EAAYz9I,KAAKC,OAAM,IAAA20R,mBAAkBjwO,GAAQ,UAAa/L,wBAC9DH,GAAW,IAAAwuB,eAGXo0P,GAFS12Q,EAAKruD,YACI0oK,YAAYr6G,GACTsuI,kBACrB6lK,EAAgB,CAAE9oV,EAAGrT,EAAM8sR,YAAYjhN,SAASx4D,EAAGC,EAAGtT,EAAM8sR,YAAYjhN,SAASv4D,GAGnF8oV,EAAa,aACjB,GAAIp8V,EAAM8sR,YAAYh+M,cAAgB,EAAAA,YAAYE,WAChDotR,EAAa,kBACR,GAAIp8V,EAAM8sR,YAAYh+M,cAAgB,EAAAA,YAAYC,SAAU,CAE9B,UADb/mB,EAAKuuE,mBACTlB,cAChB+mO,EAAa,0CACbD,EAAc9oV,GAAKyoC,IAEnBsgT,EAAa,kCACbD,EAAc9oV,GAAKyoC,GAIvB,IAAM8hO,EAAuC,OAA1B1/Q,EAAKi7L,kBACnB91L,KAAKC,MAAMtD,EAAM8sR,YAAYC,eAAiB,UAAa9wO,wBAC5D54C,KAAKC,MAAMtD,EAAM8sR,YAAYC,eAAiB,UAAa9wO,wBAEzD6wO,EAAc9sR,EAAM8sR,YAEpB/oD,GAAe,IAAAC,uBAAsB,CACzCrvM,SAAUwnU,EACVr4H,aAAc85C,EAAW7sQ,WACzB8iH,IAAK6qM,EACL5qM,IAAKgtB,EACLhyE,YAAastR,EAAWhpW,SAAS,YAAc,WAAa,aAC5D27N,SAAU,SAAC5+N,GACL,UAAW0V,cAAgB,EAAAyjC,cAAcC,SAC3Cp5C,GAAQ,IAAAs/E,YAAWt/E,IAErB,IAAIksW,EAAch5V,KAAK2nE,QAAQ76E,EAAQ,UAAa8rD,wBAAyB,GAC7E/9C,EAAKi9V,kBAAkBkB,EAAavvE,IAEtC5oD,QAAS,WACP9yO,OAAOkwD,kBAAmB,EAC1B,UAAau7C,YAAY,CAAEntG,KAAM,eAEnC8rH,KAAM,IASR,OALAnpH,SAASg9F,cAAc,mBAAmBj0C,YAAY2oL,GAExCA,EAAa10I,cAAc,qBACnCgxE,SAEC,EAGT,OAAO,EAGT,SAASpmE,IACPj6F,EAAMokO,iBAAkB,EACxBpkO,EAAM+/C,WAAY,EAClB//C,EAAMqkO,aAAe,KACrBrkO,EAAMskO,mBAAoB,EAC1BtkO,EAAM8sR,YAAc,KAvrCxB,YACA,Q,IASA,Q,IACA,QACA,S,IACA,Q,IACA,O,IAEA,OACA,S,IACA,O,IACA,O,IACA,MACA,QAEA,Q,IACA,QACA,SACA,SACA,SACA,S,gLC5BA,OACA,S,OACA,Q,uDAEqBwvE,E,6HAEjB,OAAQ,UAAOr9S,UAAU56C,MACvB,IAAK,OACL,QACE,OAAO,UAAa,UAAOpH,aAAawrJ,mBAC1C,IAAK,aACH,OAAO,UAAa,UAAOxrJ,aAAa8wH,cAC1C,IAAK,OACH,MAAO,qB,4CAIgB1pH,GAC3B,OAAQA,GACN,IAAK,OACH,OAAO,UAAa,UAAOpH,aAAa4nG,OAC1C,IAAK,aACH,OAAO,UAAa,UAAO5nG,aAAa6wH,QAC1C,IAAK,OACH,MAAO,UACT,KAAK,EAAAl4E,0BAA0BpI,QAC7B,OAAO,EAAAy6G,MAAM16B,IACf,QACE,OAAO,UAAa,UAAOtwH,aAAawrJ,wB,eAxB3B6zM,G,6JCJfC,E,WACJ,cAAc,qBACZtjW,KAAKwgJ,SAAW,G,iDAGd+iN,GACFvjW,KAAKwgJ,SAASzrJ,KAAKwuW,K,gCAInBvjW,KAAKwgJ,SAASpiJ,SAAQ,SAAA+7N,GAAA,OAASA,EAAMqpI,iB,eAI1BF,G,8JCdf,I,EAAA,QACA,S,oCAEwBx6L,EAAXA,SAAW,SAAClL,EAAiB6lM,GACxC,OAAQ7lM,GAAsD,UAAnCA,EAAgBvE,eACtCoqM,EAAa,IAAOA,EAAa,GAAKA,EACtCA,EAAa,GAAMA,EAAaA,EAAa,IAGdz6L,EAAzBA,uBAAyB,SAACpL,EAAiB6lM,EAAYrgM,EAAYJ,EAAWC,GAAmB,MAGxGrF,EAAgB3E,kBADlB8O,EAF0G,EAE1GA,WAAYC,EAF8F,EAE9FA,YAAaC,EAFiF,EAEjFA,WAAYC,EAFqE,EAErEA,YAAuDK,GAFc,EAExDJ,SAFwD,EAE9CC,SAF8C,EAEpCC,UAFoC,EAEzBC,UAFyB,EAEdC,WAI1FQ,GANwG,EAEH7F,YAFG,EAEUC,iBAIlH4F,GACAh6G,SACAqtE,SAGJ,GAFAmsC,EAAYn+J,KAAKC,MAAMk+J,GAEnB3K,GAAiD,cAA9BA,EAAgBtnG,WAA6BsnG,GAAiD,cAA9BA,EAAgBtnG,UACrG,GAAGmtS,EAAa,GACd16L,EAAsB,CACpB3uJ,EAAG4tJ,EACH3tJ,EAAG6tJ,QAGL,GAAGtK,GAAsD,UAAnCA,EAAgBvE,eAIpC,OAFAj9B,GADArtE,EAAOk0G,EAAeviK,aACF48H,mBAAmBlB,aAE/BrtE,EAAKo6G,kBACX,KAAK,EAAAtzF,YAAYE,WACM,SAAjBqmD,IAA2B2sC,EAAsB,CAAE3uJ,EAAG2tJ,EAAaQ,EAAWluJ,EAAG4tJ,IAChE,SAAjB7rC,IAA2B2sC,EAAsB,CAAE3uJ,EAAG2tJ,EAAaQ,EAAWluJ,EAAG4tJ,IACrF,MAEF,KAAK,EAAApyF,YAAYC,SACM,UAAjBsmD,IAA4B2sC,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,EAAaM,IAClE,UAAjBnsC,IAA4B2sC,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,EAAaM,SAU3F,OAFAnsC,GADArtE,EAAOi0G,EAAUtiK,aACG48H,mBAAmBlB,aAE/BrtE,EAAKo6G,kBACX,KAAK,EAAAtzF,YAAYE,WACM,SAAjBqmD,IAA2B2sC,EAAsB,CAAE3uJ,EAAG2tJ,EAAaQ,EAAWluJ,EAAG4tJ,IAChE,SAAjB7rC,IAA2B2sC,EAAsB,CAAE3uJ,EAAG2tJ,EAAaQ,EAAWluJ,EAAG4tJ,IACrF,MAEF,KAAK,EAAApyF,YAAYC,SACM,UAAjBsmD,IAA4B2sC,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,EAAaM,IAClE,UAAjBnsC,IAA4B2sC,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,EAAaM,IAUjG,QAA4Bv1G,IAAxB+1G,EAAmC,CACrC,IAAI26L,EAAoB,IAAI,EAAJ,QAAU30S,EAAK0C,KAAKr3C,EAAG20C,EAAK0C,KAAKp3C,GACrDspV,EAAkB,IAAI,EAAJ,QAAU50S,EAAKwJ,GAAGn+C,EAAG20C,EAAKwJ,GAAGl+C,GACnDqpV,EAAkB1tS,KAAKotG,GACvBsgM,EAAkBxoV,OAAS,eAE3ByoV,EAAgB3tS,KAAKotG,GACrBugM,EAAgBzoV,OAAS,eAEzB6tJ,EAAsB66L,EAAmChmM,EAAiB6lM,EAAYrgM,GAGxF,OAAO2F,GA5EF,IA+EM66L,EAAqCA,EAArCA,mCAAqC,SAAChmM,EAAiB6lM,EAAYrgM,GAAe,MAGzFxF,EAAgB3E,kBADlB8O,EAF2F,EAE3FA,WAAYC,EAF+E,EAE/EA,YAAaC,EAFkE,EAElEA,WAAYC,EAFsD,EAEtDA,YAAuDK,GAFD,EAEzCJ,SAFyC,EAE/BC,SAF+B,EAErBC,UAFqB,EAEVC,UAFU,EAECC,WAI1FQ,GANyF,EAEY7F,YAFZ,EAEyBC,iBAIlH4F,GACJ,GAAInL,GAAiD,cAA9BA,EAAgBtnG,UACrCyyG,EAAsB,CACpB3uJ,EAAGqpV,EAAa,GAAKz7L,EAAepK,GAAsD,UAAnCA,EAAgBvE,eAA8B0O,EAAaQ,EAAYR,EAAaQ,EAC3IluJ,EAAGopV,EAAa,GAAKv7L,EAAcD,QAEhC,GAAIrK,GAAiD,cAA9BA,EAAgBtnG,UAC5C,GAAGmtS,EAAa,GACd16L,EAAsB,CACpB3uJ,EAAG4tJ,EACH3tJ,EAAG6tJ,QAGL,GAAGtK,GAAsD,UAAnCA,EAAgBvE,eACpC,OAAQ+J,EAAW+F,kBACjB,KAAK,EAAAtzF,YAAYE,WACjB,KAAK,EAAAF,YAAYC,SAAaizF,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,GAAc,MACtF,KAAK,EAAApyF,YAAYI,UAAa8yF,EAAsB,CAAE3uJ,EAAG2tJ,EAAaQ,EAAWluJ,EAAG4tJ,GAAa,MACjG,KAAK,EAAApyF,YAAYK,UAAa6yF,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,EAAaM,GAAa,MAClG,KAAK,EAAA1yF,YAAYM,UAAa4yF,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,EAAaM,GAAY,MACjG,KAAK,EAAA1yF,YAAYG,UAAa+yF,EAAsB,CAAE3uJ,EAAG2tJ,EAAaQ,EAAWluJ,EAAG4tJ,QAKtF,OAAQ7E,EAAW+F,kBACjB,KAAK,EAAAtzF,YAAYE,WACjB,KAAK,EAAAF,YAAYC,SAAYizF,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,GAAc,MACrF,KAAK,EAAApyF,YAAYI,UAAa8yF,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,EAAaM,GAAY,MACjG,KAAK,EAAA1yF,YAAYK,UAAa6yF,EAAsB,CAAE3uJ,EAAG2tJ,EAAaQ,EAAWluJ,EAAG4tJ,GAAa,MACjG,KAAK,EAAApyF,YAAYM,UAAa4yF,EAAsB,CAAE3uJ,EAAG2tJ,EAAaQ,EAAWluJ,EAAG4tJ,GAAa,MACjG,KAAK,EAAApyF,YAAYG,UAAa+yF,EAAsB,CAAE3uJ,EAAG2tJ,EAAY1tJ,EAAG4tJ,EAAaM,GAQ7F,OAAOQ,I,0GC/HT,O,IACA,Q,IACA,O,IACA,M,IACA,SACA,Q,IACA,Q,IACA,S,IACA,Q,IACA,OACA,Q,IACA,Q,uDAEM86L,E,WAQJ,WAAYjqT,GAAO,sCALnBwjP,qBAAuB,GAKJ,KAHnBC,cAAgB,KAGG,KAFnBvjJ,cAAgB,IAAI,EAAJ,QAAkB95I,MAEf,KAcnBolK,qBAAuB,SAACh9G,GACtB,EAAK07S,WAAW1+L,qBAAqBh9G,GACrC,UAAqBhL,mBAAmBsL,2BAA0B,IAhBjD,KAkBnB28G,uBAAyB,SAACj9G,GACxB,EAAK07S,WAAWz+L,uBAAuBj9G,GACvC,UAAqBhL,mBAAmBsL,2BAA0B,IApBjD,KAsBnBg7G,eAAiB,SAACp8G,GAEhB,EAAKwyF,cAAc4pB,eAAep8G,IAxBjB,KA0BnBg3G,oBAAsB,WAEpB,OAAO,EAAKxkB,cAAcwkB,uBA5BT,KA8BnBtzG,YAAc,WACZ,IAAIgwE,EAAc,EAAKsjC,sBAEvB,OAAItjC,GAIG,EAAKmiK,QAAQzjI,SArCH,KAuCnB8jI,uBAAyB,SAACv3O,GACxB,EAAKm3O,qBAAuBn3O,GAxCX,KA0CnB03O,iCAAmC,SAAClpS,GAClC,EAAKmpS,gCAAkCnpS,GA3CtB,KA6CnBklJ,gBAAkB,WAChB,IAAK,IAAIplJ,EAAI,EAAK4oS,QAAQ3oJ,YAAY//I,OAAS,EAAGF,GAAK,EAAGA,IAAK,CAC7D,IAAIk4D,EAAM,UAAUuL,aAAa,EAAKmlO,QAAQ3oJ,YAAYjgJ,IACtDk4D,EAAI+nF,aACN/nF,EAAI4mF,UAAUsG,kBAEhB,UAAUniF,YAAY/K,GAExB,EAAK0wO,QAAQ3oJ,YAAY7+I,OAAO,EAAG,EAAKwnS,QAAQ3oJ,YAAY//I,SArD3C,KAuDnBy5D,OAAS,SAACj6D,GACR,EAAK6lJ,cAAc4pB,eAAezvK,EAAOA,EAAK4pS,iBAAmB,OAxDhD,KA0DnB5+H,OAAS,WACP,MAAO,CACL4+H,iBAAkB,EAAKv/H,wBA5DR,KAgEnBrkG,OAAS,SAACtW,GAIL,IAHKy0I,EAGL,uDAHoB,KACfq8C,EAEL,uDAFqB,EAAAliM,iBAAiBC,QACjCkiM,EACL,uDADoB,EAAAniM,iBAAiBI,mBAExC,IAAI,YAAa,UAAUxwC,WAAWilD,QAAtC,CACI,EAAK+1O,QAAQ72R,SAAW,EAAAipC,cAAcqB,gBACxC,UAAYmlM,oBAAoBpyL,EAAK,EAAKw5O,QAAS,GAEnD,UAAY3oD,iBAAiB7wL,EAAKy0I,EAAcq8C,EAAgBC,EAAc,EAAKyoD,SAErF,IAAM94G,EAAa,UAAMliL,WACrB80K,EAAiCoN,EAAW16K,cAAcstK,+BAC1DA,GACF,EAAK2lH,wBAAwBj5O,GAE/B,EAAKogT,uBAAuBpgT,GAC5B,EAAKqgT,oBAAoBrgT,KAjFR,KAoFnBogT,uBAAyB,SAACpgT,GACxB,GAAI,EAAKw5O,QAAQ9xO,cAAgB,UAAUC,wBAA0B,EAAK6xO,QAAU,CAClF,IAAIvtO,EAAgB,UAAMztD,WAAWytD,cACjCA,EAAci4C,eAAiB,EAAAh0D,0BAA0BE,gBAC3D,EAAK+vT,WAAWG,eAAeC,+BAA+BvgT,GACrDiM,EAAci4C,eAAiB,EAAAh0D,0BAA0BC,mBAClE,EAAKgwT,WAAWG,eAAeE,iCAAiCxgT,KA1FnD,KA+FnBqgT,oBAAsB,SAACrgT,GACrB,IAD6B,uBAE7B,YAA2B,EAAKw5O,QAAQ9iI,cAAxC,+CAAuD,KAA5Cm9B,EAA4C,QAC/C4sK,GAAsB,IAAA75S,eAAcitI,EAAap9K,EAAGo9K,EAAan9K,EAAG,EAAK8iR,SAC/E,UAAcl8F,aAAamjK,EAAqB,EAAG,EAHjC,qBAIlB,UAAcnjK,aAAamjK,EAAqB,EAAG,EAJjC,YADS,6EAO7B,GAA0C,IAAtC,EAAKjnE,QAAQ9iI,cAAc5lK,OAAc,CAC3C,IAAMk/J,EAAa,EAAKwpI,QAAQ9iI,cAAc,GACxC48H,EAAW,EAAKkG,QAAQ9iI,cAAc,GACtCgqM,GAAoB,IAAA95S,eAAcopG,EAAWv5I,EAAGu5I,EAAWt5I,EAAG,EAAK8iR,SACnEmnE,GAAkB,IAAA/5S,eAAc0sO,EAAS78Q,EAAG68Q,EAAS58Q,EAAG,EAAK8iR,SACnEx5O,EAAIgX,OAAO0pS,EAAkBjqV,EAAGiqV,EAAkBhqV,GAClDspC,EAAIiX,OAAO0pS,EAAgBlqV,EAAGkqV,EAAgBjqV,GAC9CspC,EAAIkX,YAbc,UAclBlX,EAAImX,WA9GW,KAkHnBqhO,yBAA2B,SAACx4O,GAAuC,IAAlCy0I,EAAkC,uDAAnB,KAAMqC,EAAa,aACjE,IAAI,YAAa,UAAUt4L,WAAWilD,QAAtC,CACA,IAAIlB,EAAQ,EAAKi3O,QAAQ1xO,WACzB9H,EAAI6W,UAAY,EAChB7W,EAAIkX,YAAc,UAAa,UAAW72D,aAAa4nG,OACvD,IAAK,IAAIr3G,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC2xD,EAAM3xD,GAAG6jM,aAAeA,EACxBlyI,EAAM3xD,GAAG0lE,OAAOtW,EAAKpvD,EAAI,EAAGkmM,GAC5Bv0I,EAAM3xD,GAAG6jM,aAAe,OA1HT,KA8HnBwkG,wBAA0B,SAACj5O,GACzB,IAAMk2F,EAAoB,EAAKC,cAAcC,uBAE7C,GAA0B,OAAtBF,GACoB,UAAqBz8F,mBAAmBw8F,iBAAiBC,GAC7DplJ,OAAS,EACzB,OAIJ,EAAK8vW,oBAAoBtqS,OAAOtW,IAvIhC3jD,KAAKm9R,QAAUvjP,EACf55C,KAAK8jW,WAAa,IAAI,EAAJ,QAAalqT,GAC/B55C,KAAKukW,oBAAsB,IAAI,EAAJ,QAA2B3qT,G,wDAE7C0N,GACTtnD,KAAKm9R,QAAQzjI,QAAUpyG,I,kCAEbqN,GACV30D,KAAKm9R,QAAQ7iI,YAAc3lG,I,6CAENw1G,GACrBnqK,KAAKm9R,QAAQvmJ,mBAAqBuzB,M,eAgIvB05L,G,sHCjKf,QAEA,Q,IAGA,OACA,Q,IACA,Q,IACA,O,IACA,S,IACA,Q,IACA,QACA,SACA,S,6DAME,WAAYW,GAAQ,sCAKpB55H,aAAe,WAEb,OAAO,IAPW,KAUpBvlE,uBAAyB,SAACj9G,GAOxB,IAAIq8S,EAAwB,EAAKR,eAAeQ,sBAC5CjmK,GAAUA,EAAVA,cAAcp2I,GAClB,GAAIq8S,GAAyBA,EAAsBpqV,EAAG,CAClD,IAAI68N,GAAK,IAAA3sL,eAAck6S,EAAsBrqV,EAAGqqV,EAAsBpqV,EAAG,EAAK8iR,SAC9E3+F,EAAQnkL,EAAI68N,EAAG78N,EAEnB,IAAM6rC,EAAQ,EAAKi3O,QAAQ1xO,WAC3BzzD,QAAQ4B,IAAI,cAAessD,EAAMp+C,KAAI,SAACinD,GAAW,MAAO,CAAC30C,EAAG20C,EAAK0C,KAAKr3C,EAAGC,EAAG00C,EAAK0C,KAAKp3C,OAEtF,IAAMqqV,EAA0B,EAAKvnE,QAAQz8H,0BAhBR,GAiBwB,IAAA0wH,qCAAoC5yF,EAAS,EAAK2+F,QAASunE,GAjBnF,qBAiBhC9yE,EAjBgC,KAiBLC,EAjBK,KAkBrC,GAAID,GAA6BC,EAA2B,CAC1D,IAAI8yE,EAAmB,EAAKC,WAAWF,EAAyB9yE,EAA2BC,EAA2B,YACtH75R,QAAQ4B,IAAI,qBAAsBg4R,GAClC55R,QAAQ4B,IAAI,qBAAsBi4R,GAElC75R,QAAQ4B,IAAI,0BAA2B8qW,EAAwB58V,KAAI,SAACinD,GAAW,MAAO,CAAC30C,EAAG20C,EAAK0C,KAAKr3C,EAAGC,EAAG00C,EAAK0C,KAAKp3C,OACpHriB,QAAQ4B,IAAI,eAAgB+qW,EAAiB,GAAG78V,KAAI,SAAAkkD,GAAW,MAAO,CAAC5xC,EAAG4xC,EAAM5xC,EAAGC,EAAG2xC,EAAM3xC,OAC5FriB,QAAQ4B,IAAI,eAAgB+qW,EAAiB,GAAG78V,KAAI,SAAAkkD,GAAW,MAAO,CAAC5xC,EAAG4xC,EAAM5xC,EAAGC,EAAG2xC,EAAM3xC,OAC5F,EAAKwqV,6CAA6CF,GAElD,EAAKxnE,QAAQplO,mBAEb,UAAU+3F,eAAe,EAAKqtI,cAE9BnlS,QAAQ4B,IAAI,oEA1CI,KA8CpBirW,6CAA+C,SAACF,GAC9C,IAAIG,EAAoB,EAAK3nE,QAAQrzO,YAD8B,uBAGnE,YAAuB66S,EAAvB,+CAAyC,KAAhCI,EAAgC,QACnCC,EAAoB,CAAC,EAAAz1T,cAAcmB,gBAAiB,EAAAnB,cAAcoB,gBAAgBx2C,SAAS,EAAKgjS,QAAQ72R,QACxGA,EAAS,EAAAipC,cAAckB,UAC3Bs0T,EAAa,EAAKE,kBAAkBF,GACpC,IAAIxoM,GAAe,IAAAwzH,uBAAsBg1E,EAAYz+V,GAAQ,GACzDk2J,EAAa,UAAiBxkG,aAAaukG,GAC/CC,EAAWptG,UAAY,EAAK+tO,QAAQ/tO,UACpCotG,EAAWj5E,YAAc,EAAK45M,QAAQ55M,YACtCi5E,EAAWpC,SAAW,EAAK+iI,QAAQ/iI,SACnCoC,EAAWvoB,uBACX,IAAIixN,EAAiB,CAAC9qV,EAAG,EAAGC,EAAG,GAE/B,GAAI2qV,EAAmB,CAErB,IAAIG,EAA4B,UAAcxsS,qBAAqBg7R,2BAA2B,EAAKx2D,QAAQn1R,IACvGo9V,EAAyB,IAAI,EAAJ,QAAwBD,EAA0Bp2S,KAAMwtG,GACrF,UAAc5jG,qBAAqB6nN,oBAAoB4kF,GAIzD,GADA5oM,EAAWnpB,UAAUgyN,WAAW3wW,OAAO+2B,OAAO,GAAI,EAAK0xQ,QAAQzjI,UACvB,IAApC,EAAKyjI,QAAQvmJ,mBAA0B,CAGzC,IAAI0uN,EAAsC,UAAY76S,eAAe+xG,EAAW/wG,WAAW3jD,KAAI,SAAAinD,GAAA,OAAQA,EAAK0C,SACxG8zS,EAA0B,IAAM,EAAKpoE,QAAQvmJ,mBAEjD4lB,EAAWjpH,OAAOgyT,EAAyB,EAAA3zT,uBAAuBE,MAAM,EAAMgzT,GAE9EtoM,EAAWjpH,OAAO,IAAK,EAAA3B,uBAAuBE,MAAM,EAAOgzT,GAE3DtoM,EAAW0N,mBAAmB,GAC9B1N,EAAWnpB,UAAUC,uBAAuB,GAG5CkpB,EAAWjpH,OAAO,EAAK4pP,QAAQvmJ,mBAAoB,EAAAhlG,uBAAuBE,MAAM,GAChF,IAAI0zT,EAAqC,UAAY/6S,eAAe+xG,EAAW/wG,WAAW3jD,KAAI,SAAAinD,GAAA,OAAQA,EAAK0C,SAC3G,EAAK0rO,QAAQxgI,oBAAmB,GAChC3kK,QAAQ4B,IAAI,gBAAiB4iK,EAAW/wG,WAAW3jD,KAAI,SAACinD,GAAW,MAAO,CAAC30C,EAAG20C,EAAK0C,KAAKr3C,EAAGC,EAAG00C,EAAK0C,KAAKp3C,OAExG6qV,EAAiB,CACf9qV,EAAGkrV,EAAoClrV,EAAIorV,EAAmCprV,EAC9EC,EAAGirV,EAAoCjrV,EAAImrV,EAAmCnrV,GAGlF,IAAIorV,EAA4B,EAAKtoE,QAAQ/+H,0BACzCsnM,EAAuBD,GAAwD,EAAKtoE,QAAQx+H,kBAChGnC,EAAW9C,QAAU,CACnBt/I,EAAGsrV,EAAqBtrV,EAAI8qV,EAAe9qV,EAC3CC,EAAGqrV,EAAqBrrV,EAAI6qV,EAAe7qV,GAG7CmiJ,EAAWnpB,UAAUsyN,YAAY,EAAKxoE,QAAQn1R,IAC9Cw0J,EAAW3xG,YAAYn2D,OAAO+2B,OAAO,GAAI,EAAK0xQ,QAAQz+H,uBAEtD,EAAKy+H,QAAQp+H,gBAAgBvC,EAAWx0J,KAzDyB,+EA9CjD,KA2GpBo9J,qBAAuB,SAACh9G,GAOtB,IAAIq8S,EAAwB,EAAKR,eAAeQ,sBAC5CjmK,GAAUA,EAAVA,cAAcp2I,GAClB,GAAIq8S,GAAyBA,EAAsBrqV,EAAG,CACpD,IAAI88N,GAAK,IAAA3sL,eAAck6S,EAAsBrqV,EAAGqqV,EAAsBpqV,EAAG,EAAK8iR,SAC9E3+F,EAAQpkL,EAAI88N,EAAG98N,EAEjB,IAAMsqV,EAA0B,EAAKvnE,QAAQz8H,0BAbV,GAc0B,IAAAixH,mCAAkCnzF,EAAS,EAAK2+F,QAASunE,GAdnF,qBAc9B9yE,EAd8B,KAcHC,EAdG,KAgBnC,GAAID,GAA6BC,EAA2B,CAC1D,IAAI8yE,EAAmB,EAAKC,WAAWF,EAAyB9yE,EAA2BC,EAA2B,cAMtH,EAAKgzE,6CAA6CF,GAElD,EAAKxnE,QAAQplO,mBAEb,UAAU+3F,eAAe,EAAKqtI,cAE9BnlS,QAAQ4B,IAAI,kEAxII,KA4IpBqrW,kBAAoB,SAACF,GACnB,OAAOA,EAAWj9V,KAAI,SAAC89V,GAGrB,OAFAA,EAAUxrV,EAAIhQ,KAAK2nE,QAAQ6zR,EAAUxrV,GAAI,GACzCwrV,EAAUvrV,EAAIjQ,KAAK2nE,QAAQ6zR,EAAUvrV,GAAI,GAClCurV,MAhJS,KA0JpBhB,WAAa,SAAC1+S,EAAO0rO,EAA2BC,EAA2Bg0E,GACzE,IAAIC,EAAe,GACfC,EAAe,GACfC,EAAqB,EACrBxxD,SACA1iB,EAAqBF,EAA0Bx6J,kBAC/C26J,EAAqBF,EAA0Bz6J,kBAoEnD,SAAS6uO,EAAkC3/L,GACzC,OAAOA,EAAYt/J,QAAO,SAACglD,EAAOp+C,EAAOyI,GACvC,IAAIkkE,EAAOlkE,EAAMzI,EAAQ,GACrBq0J,EAAO5rJ,EAAMzI,EAAQ,GACpB2sE,IACHA,EAAOlkE,EAAMA,EAAM5hB,OAAS,IAEzBwtK,IACHA,EAAO5rJ,EAAM,IAEf,IAAM6vV,EAAU,UAAEA,QAAQ,CAAC9rV,EAAG4xC,EAAM5xC,EAAGC,EAAG2xC,EAAM3xC,GAAI,CAACD,EAAGmgE,EAAKngE,EAAGC,EAAGkgE,EAAKlgE,IAClE8rV,EAAkBn6S,EAAM5xC,IAAMmgE,EAAKngE,GAAK4xC,EAAM5xC,IAAM6nJ,EAAK7nJ,GAAK4xC,EAAM3xC,IAAMkgE,EAAKlgE,GAAK2xC,EAAM3xC,IAAM4nJ,EAAK5nJ,EAC3G,OAAQ6rV,IAAYC,KAIxB,OAlFAjgT,EAAM9nD,SAAQ,SAAC2wD,GACb,IAAIqoE,EAAoB,KAqBxB,GANKroE,IAAS6iO,EAA0B7iO,MAAQA,IAAS8iO,EAA0B9iO,OACjFqoE,EAAoBroE,IAAS6iO,EAA0B7iO,KACnD6iO,EAA0Bx6J,kBAC1By6J,EAA0Bz6J,mBAG5BA,EAAmB,CACrB,IAAIgvO,EAAMh8V,KAAK2nE,QAAQqlD,EAAkBh9G,GAAI,KAAOhQ,KAAK2nE,QAAQ+/M,EAAmB13Q,GAAI,IACnFhQ,KAAK2nE,QAAQqlD,EAAkB/8G,GAAI,KAAOjQ,KAAK2nE,QAAQ+/M,EAAmBz3Q,GAAI,GAC/Ey3Q,EAAqBC,EACG,IAAxBg0E,EAAatxW,QACfsxW,EAAahxW,KAAKg6D,EAAK0C,MAEzB,IAAMkrI,EAAW5tI,EAAKruD,YAAY0oK,YAAYr6G,OAAMiE,GAAW,GACnC,IAAxB8yS,EAAarxW,QACXkoM,EAAS30L,KAAO4pR,EAA0B7iO,KAAK/mD,IAAM20L,EAAS30L,KAAO6pR,EAA0B9iO,KAAK/mD,IAExG89V,EAAa/wW,KAAKg6D,EAAKwJ,IAEzButS,EAAa/wW,KAAKqxW,GAClBL,EAAahxW,KAAKqxW,QAEdJ,EAAqB,GAAM,KAC7BxxD,EAAYsxD,EAAaA,EAAarxW,OAAS,KAC5B+/S,EAAUxsS,IAAMwsS,EAAUxsS,KAAO+mD,EAAK0C,KAAKzpD,IAC5D89V,EAAa/wW,KAAKg6D,EAAK0C,MAErBq0S,EAAa,KAAO/2S,EAAKwJ,IAC3ButS,EAAa/wW,KAAKg6D,EAAKwJ,KAGvBytS,EAAqB,GAAM,KAC7BxxD,EAAYuxD,EAAaA,EAAatxW,OAAS,KAC5B+/S,EAAUxsS,IAAMwsS,EAAUxsS,KAAO+mD,EAAK0C,KAAKzpD,IAC5D+9V,EAAahxW,KAAKg6D,EAAK0C,MAErBs0S,EAAa,KAAOh3S,EAAKwJ,IAC3BwtS,EAAahxW,KAAKg6D,EAAKwJ,KAKzB6+D,IACF4uO,GAAsB,MAuBnB,CAACC,EAAkCH,GAAeG,EAAkCF,KAnP3F/lW,KAAKm9R,QAAUqnE,EACfxkW,KAAKikW,eAAiB,IAAI,EAAJ,QAAmBjkW,Q,sHCrB7C,M,IACA,OACA,Q,IAMA,Q,IACA,O,IACA,Q,IACA,OACA,S,IAIA,O,IACA,Q,6DAUE,WAAYqmW,GAAU,sCANtBC,eAAiB,IAAI,EAAJ,QAAe,EAAG,GAAI,GAAtB,UAAqC90V,YAAY,GAM5C,KALtB+0V,eAAiB,IAAI,EAAJ,QAAe,EAAG,GAAI,GAAtB,UAAqC/0V,YAAY,GAK5C,KAHtBizV,sBAAwB,GAGF,KAFtB+B,sBAAwB,GAEF,KAItBrC,iCAAmC,SAACxgT,GAClC,IAAMr6C,EAAc,UAAMnH,WAAWmH,YAC/B8+C,EAAW,UAAiB+jC,cAC5BklM,GAAkB,IAAAx8M,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GAC/DitC,EAAM,EAAK++S,SAASlpE,QAAQnyO,cAC5BqwI,EAAkB,CAACjhL,EAAGi3Q,EAAgBj3Q,EAAIktC,EAAIltC,EAAGC,EAAGg3Q,EAAgBh3Q,EAAIitC,EAAIjtC,GAClF,EAAKoqV,sBAAwB,KAC7B,EAAK+B,sBAAwB,KAG7B,IAAIl1E,EAAqB,CAACl3Q,GAAI9Q,EAAYqX,YAAatG,EAAGghL,EAAgBhhL,GACtEk3Q,EAAqB,CAACn3Q,EAAG9Q,EAAYqX,YAAatG,EAAGghL,EAAgBhhL,GACrEosV,EAAmB,UAAYC,oBAAoBt+S,GACnDu+S,EAA+B,UAAYC,gCAAgCH,GAC3EE,EAA6BlyW,OAAS,IAGxC,EAAKgvK,oCAAoCkjM,EAA8Br1E,EAAoBC,GAC3FD,EAAqB,EAAKmzE,sBAC1BlzE,EAAqB,EAAKi1E,uBAE5B,EAAKK,qBAAqBljT,EAAK2tO,EAAoBC,GAGnD,IAAIu1E,EAAuB,CAAC1sV,EAAGihL,EAAgBjhL,EAAIC,GAAI/Q,EAAY4X,cAC/D6lV,EAAuB,CAAC3sV,EAAGihL,EAAgBjhL,EAAGC,EAAG/Q,EAAY4X,cAC7DylV,EAA6BlyW,OAAS,IACxC4mM,EAAgBhhL,EAAI,EAAKoqV,sBAAsBpqV,GAEjD,EAAK2sV,oBAAoBrjT,EAAKmjT,EAAsBC,EAAsB3+S,EAAUizI,IAjChE,KAoCtB6oK,+BAAiC,SAACvgT,GAChC,IAAMr6C,EAAc,UAAMnH,WAAWmH,YAC/B8+C,EAAW,UAAiB+jC,cAC5BklM,GAAkB,IAAAx8M,yBAAwBzsB,EAAShuC,EAAGguC,EAAS/tC,GAC/DitC,EAAM,EAAK++S,SAASlpE,QAAQnyO,cAC5BqwI,EAAkB,CAACjhL,EAAGi3Q,EAAgBj3Q,EAAIktC,EAAIltC,EAAGC,EAAGg3Q,EAAgBh3Q,EAAIitC,EAAIjtC,GAClF,EAAKoqV,sBAAwB,KAC7B,EAAK+B,sBAAwB,KAG7B,IAAIl1E,EAAqB,CAACl3Q,EAAGihL,EAAgBjhL,EAAGC,GAAI/Q,EAAY4X,cAC5DqwQ,EAAqB,CAACn3Q,EAAGihL,EAAgBjhL,EAAGC,EAAG/Q,EAAY4X,cAC3DulV,EAAmB,UAAYC,oBAAoBt+S,GACnDu+S,EAA+B,UAAYC,gCAAgCH,GAC3EE,EAA6BlyW,OAAS,IAGxC,EAAKgvK,oCAAoCkjM,EAA8Br1E,EAAoBC,GAC3FD,EAAqB,EAAKmzE,sBAC1BlzE,EAAqB,EAAKi1E,uBAE5B,EAAKK,qBAAqBljT,EAAK2tO,EAAoBC,GAGnD,IAAIu1E,EAAuB,CAAC1sV,GAAI9Q,EAAYqX,YAActG,EAAGghL,EAAgBhhL,GACzE0sV,EAAuB,CAAC3sV,EAAG9Q,EAAYqX,YAAatG,EAAGghL,EAAgBhhL,GACvEssV,EAA6BlyW,OAAS,IACxC4mM,EAAgBjhL,EAAI,EAAKqqV,sBAAsBrqV,GAEjD,EAAK4sV,oBAAoBrjT,EAAKmjT,EAAsBC,EAAsB3+S,EAAUizI,IAjEhE,KAoEtB53B,oCAAsC,SAAC1oC,EAAmBu2J,EAAoBC,GAC5E,GAAIx2J,EAAkBtmI,OAAS,EAAG,CAChC,IAAIstD,EAAQ,UAAWA,MACnB0iT,GAAwBA,EAAxBA,cAA4BnzE,GAC5Bk1E,GAAwBA,EAAxBA,cAA4Bj1E,GAChCx2J,EAAkB38H,SAAQ,SAAC88H,GACzB,OAAQA,EAAKrlD,aACX,IAAK,aACH4uR,EAAsBpqV,GAAK6gH,EAAKpD,KAAO/1E,EACvCykT,EAAsBnsV,GAAK6gH,EAAKpD,KAAO/1E,EACvC,MACF,IAAK,WACH0iT,EAAsBrqV,GAAK8gH,EAAKpD,KAAO/1E,EACvCykT,EAAsBpsV,GAAK8gH,EAAKpD,KAAO/1E,EAG3C,EAAK0iT,sBAAwBA,EAC7B,EAAK+B,sBAAwBA,OArFb,KA0FtBK,qBAAuB,SAACljT,EAAK2tO,EAAoBC,GAAuB,OACjC,IAAAU,+BACnC,EAAKo0E,SAASlpE,QAAQ1xO,WAAY6lO,EAAoBC,GAFc,qBACjE01E,EADiE,KAClDC,EADkD,KAMtE,GAFAvjT,EAAIkX,YAAc,UAAa,UAAW72D,aAAa6wH,QAEnDoyO,GAAiBC,EAAe,CAClC,IAAIC,EAAsBF,EAAc7vO,kBACpCgwO,EAAsBF,EAAc9vO,kBACpCiwO,GAAgC,IAAA98S,eAAc48S,EAAoB/sV,EAAG+sV,EAAoB9sV,EAAG,EAAKgsV,SAASlpE,SAC1GmqE,GAAgC,IAAA/8S,eAAc68S,EAAoBhtV,EAAGgtV,EAAoB/sV,EAAG,EAAKgsV,SAASlpE,SAC9Gx5O,EAAI+W,YACJ/W,EAAI6wS,YAAY,CAAC,GAAI,KACrB7wS,EAAIgX,OAAO0sS,EAA8BjtV,EAAIitV,EAA8BhtV,GAC3EspC,EAAIiX,OAAO0sS,EAA8BltV,EAAGktV,EAA8BjtV,GAC1EspC,EAAI6tG,YACJ7tG,EAAImX,SACJnX,EAAI6wS,YAAY,CAAC,MA3GC,KA+GtBwS,oBAAsB,SAACrjT,EAAKmjT,EAAsBC,EAAsB3+S,EAAUizI,GAChF,IAAIksK,GAA4B,IAAAh9S,eAAc8wI,EAAgBjhL,EAAGihL,EAAgBhhL,EAAG,EAAKgsV,SAASlpE,SADE,GAErC,IAAA3L,8BAC7D,EAAK60E,SAASlpE,QAAQ1xO,WAAYq7S,EAAsBC,EAAsB1rK,GAHoB,qBAE/Fo2F,EAF+F,KAEnEC,EAFmE,KAMpG,GAAID,GAA8BC,EAA4B,CAC5D,IAAI+/D,EAAsBhgE,EAA2Br6J,kBACjDs6N,EAAsBhgE,EAA2Bt6J,kBACjDu6N,GAAgC,IAAApnS,eAAcknS,EAAoBr3U,EAAGq3U,EAAoBp3U,EAAG,EAAKgsV,SAASlpE,SAC1Gy0D,GAAgC,IAAArnS,eAAcmnS,EAAoBt3U,EAAGs3U,EAAoBr3U,EAAG,EAAKgsV,SAASlpE,SAC9Gx5O,EAAI+W,YACJ,UAAcm5F,UAAUlwG,EACtBguS,EAA8Bv3U,EAC9Bu3U,EAA8Bt3U,EAC9BktV,EAA0BntV,EAC1BmtV,EAA0BltV,GAE5B,IAAImtV,GAAuB,IAAAx1R,aAAYu1R,EAA2B5V,GAC9DE,GAAuB,IAAAvgR,kBAAiBmgR,EAAqBp2J,GACjE,UAAcxnC,UAAUlwG,EACtB4jT,EAA0BntV,EAC1BmtV,EAA0BltV,EAC1Bu3U,EAA8Bx3U,EAC9Bw3U,EAA8Bv3U,GAEhC,IAAIotV,GAAuB,IAAAz1R,aAAYu1R,EAA2B3V,GAC9DE,GAAuB,IAAAxgR,kBAAiBogR,EAAqBr2J,GACjE13I,EAAI6tG,YACJ7tG,EAAImX,SAEJ,EAAKynS,mBAAmB5+S,EAAK6jT,EAAsB3V,EAAsB4V,EAAsB3V,KA9I7E,KAkJtByQ,mBAAqB,SAAC5+S,EAAK6jT,EAAsB3V,EAAsB4V,EAAsB3V,GAC3F,IAAI4V,GAAkB,IAAA7yR,yBAAwB2yR,EAAqBptV,EAAGotV,EAAqBntV,GACvFstV,GAAkB,IAAA9yR,yBAAwB4yR,EAAqBrtV,EAAGqtV,EAAqBptV,GAE3F,EAAKisV,eAAeh/S,IAAIltC,EAAIstV,EAAgBttV,EAC5C,EAAKksV,eAAeh/S,IAAIjtC,EAAIqtV,EAAgBrtV,EAC5C,EAAKisV,eAAepvW,MAAQkT,KAAKC,MAAM,UAAO24C,uBAAyB6uS,GAEvE,EAAK0U,eAAej/S,IAAIltC,EAAIutV,EAAgBvtV,EAC5C,EAAKmsV,eAAej/S,IAAIjtC,EAAIstV,EAAgBttV,EAC5C,EAAKksV,eAAervW,MAAQkT,KAAKC,MAAM,UAAO24C,uBAAyB8uS,GAEvE,EAAKwU,eAAersS,OAAOtW,GAC3B,EAAK4iT,eAAetsS,OAAOtW,IA9J3B3jD,KAAKqmW,SAAWA,I,gGC5BpB,O,IACA,Q,IACA,Q,6DAKE,WAAYzsT,GAAO,sCAInBsU,OAAS,SAACj6D,KAJS,KAQnBgmE,OAAS,SAACtW,GACJ,WAAa,UAAUxhD,WAAWilD,SAEjC,EAAK+1O,QAAQrjJ,cAAcwkB,uBAA0B,EAAK6+H,QAAQrjJ,cAAc2jJ,uBACnF,EAAKqvB,6BAA6BnpQ,IAZnB,KAgBnBi5O,wBAA0B,SAACj5O,GACzB,IAAMsC,EAAS,EAAKk3O,QAAQplJ,sBAC5B,UAAcod,uBAAuBxxG,EAAKsC,EAAQ,KAlBjC,KAqBnB62O,wBAA0B,SAACn5O,GACzB,IAAMsC,EAAS,EAAKk3O,QAAQplJ,sBAC5B,UAAYs8F,4BAA4B1wL,EAAKsC,IAvB5B,KA0BnB6mQ,6BAA+B,SAACnpQ,GAC9BA,EAAIyuG,OACJzuG,EAAI+W,YACJ,EAAKkiO,wBAAwBj5O,GAC7B,EAAKm5O,wBAAwBn5O,GAC7BA,EAAI6tG,YACJ7tG,EAAI0uG,WA/BJryJ,KAAKm9R,QAAUvjP,I,6GCRnB,Q,IACA,O,IACA,O,IACA,Q,IACA,M,6DAKE,WAAYA,GAAO,sCAInBqgB,OAAS,SAACtW,GAA4C,IAAvC+oQ,EAAuC,uDAA7B,EAAAn6Q,iBAAiBC,QACxC,IAAI,YAAa,UAAUrwC,WAAWilD,QAAtC,CACA,IAAIlB,EAAQ,EAAKi3O,QAAQ1xO,WAEzB9H,EAAI+W,YACJ,IAAK,IAAInmE,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC2xD,EAAM3xD,GAAG0lE,OAAOtW,EAAKpvD,EAAI,GAQ3B,OANI,EAAK4oS,QAAQ9xO,cAAgB,UAAUD,kBAAoB,EAAK+xO,QAClEx5O,EAAIkX,YAAc,UAAa,UAAW72D,aAAa+wH,aAEvDpxE,EAAIkX,YAAc,UAAa,UAAW72D,aAAa4nG,OAEzDjoD,EAAIwuG,UAAY,UAAa,UAAWnuJ,aAAaurJ,gBAC7Cm9J,GACN,KAAK,EAAAn6Q,iBAAiBE,UACpBkR,EAAI6W,UAAY,EAChB7W,EAAI6tG,YACJ,MACF,KAAK,EAAAj/G,iBAAiBC,QACtB,QAEEmR,EAAI6W,UAAY,EAChB7W,EAAI6tG,YACJ7tG,EAAImX,SAIR,GAAI,EAAKqiO,QAAQ9xO,cAAgB,UAAUC,wBAA0B,EAAK6xO,QACpD,UAAMh7R,WAAWytD,gBAhCvC5vD,KAAKm9R,QAAUvjP,I,gGCVnB,O,IACA,Q,IACA,Q,IACA,Q,IACA,O,6DAKE,WAAYA,GAAO,sCAInBsU,OAAS,SAACj6D,KAJS,KAQnBgrK,OAAS,WACP,MAAO,IATU,KAanBhlG,OAAS,SAACtW,GAA6B,IAAxBy0I,EAAwB,uDAAT,KACxB,WAAa,UAAUj2L,WAAWilD,UAEtC,EAAKulQ,cAAchpQ,EAAKy0I,GACnB,EAAK+kG,QAAQrjJ,cAAcwkB,uBAA0B,EAAK6+H,QAAQrjJ,cAAc2jJ,uBAEnF,EAAKqvB,6BAA6BnpQ,KAnBnB,KAuBnBgpQ,cAAgB,SAAChpQ,GAEZ,IADYy0I,EACZ,uDAD2B,KAE9B,UAAYm+C,kBAAkB5yL,EAAKy0I,EAAc,EAAK+kG,UA1BrC,KA6BnB2vB,6BAA+B,SAACnpQ,GAC9BA,EAAIyuG,OACJzuG,EAAI+W,YACJ/W,EAAIkX,YAAc,UAAa,UAAW72D,aAAa8wH,cACvD,EAAK8nK,wBAAwBj5O,GAC7B,EAAKm5O,wBAAwBn5O,GAC7BA,EAAI6tG,YACJ7tG,EAAI0uG,WApCa,KAuCnBuqI,wBAA0B,SAACj5O,GACzB,IAAMsC,EAAS,EAAKk3O,QAAQplJ,sBAE5B,UAAcod,uBAAuBxxG,EAAKsC,EAAQ,KA1CjC,KA6CnB62O,wBAA0B,SAACn5O,GACzB,IAAMsC,EAAS,EAAKk3O,QAAQplJ,sBAC5B,UAAYs8F,4BAA4B1wL,EAAKsC,IA9C7CjmD,KAAKm9R,QAAUvjP,I,iHCVnB,Q,IACA,Q,IACA,Q,6DAME,WAAYA,GAAO,sCAFnBk9K,uBAAyB,GAEN,KAInBL,0BAA4B,SAACnpK,GAC3B,EAAKwpK,uBAAyBxpK,GALb,KAQnBqpK,uBAAyB,SAAC3uN,GACnB,EAAK8uN,uBAAuB38N,SAAS6N,IACxC,EAAK8uN,uBAAuB/hO,KAAKiT,IAVlB,KAcnB4/V,0BAA4B,SAAC5/V,GACvB,EAAK8uN,uBAAuB38N,SAAS6N,KACvC,EAAK8uN,uBAAyB,EAAKA,uBAAuB9vN,QAAO,SAAA6gW,GAAA,OAAgB7/V,IAAO6/V,OAhBzE,KAoBnBnjM,mCAAqC,WACnC,GAAI,UAAUpqC,aAAc,CAC1B,IAAM48F,EAAwB,UAAgB5uB,2BAC9C,GAAI4uB,EAAsBziO,OAAQ,CAOhC,UAA8Bg0D,4BAC9B,UAA8BwoF,iCAQ9B,UAA8BgmF,gCAAgCC,GANxC,WACpB,EAAKimE,QAAQjjI,YAAY4tM,uBACzB,EAAK3qE,QAAQpgI,iBACb,UAA8Bt0G,kCAnCpCzoD,KAAKm9R,QAAUvjP,I,iHCTnB,Q,6DAUE,WAAYA,GAAO,sCANnBmuT,OAAS,CACPzgT,IAAK,CAACltC,EAAG,EAAGC,EAAG,GACfq/I,QAAS,CAACt/I,EAAG,EAAGC,EAAG,GACnB2gH,YAAa,CAAC5gH,EAAG,EAAGC,EAAG,IAGN,KAInB2qJ,sBAAwB,WACtB,EAAK+iM,OAAS,CACZzgT,IAAK,UAAEyD,MAAM,EAAKoyO,QAAQ71O,KAC1BoyG,QAAS,UAAE3uG,MAAM,EAAKoyO,QAAQzjI,SAC9BsuM,qBAAsB,UAAEj9S,MAAM,EAAKoyO,QAAQ9pJ,UAAUirB,uBACrD2pM,iBAAkB,UAAEl9S,MAAM,EAAKoyO,QAAQrjJ,cAAcwkB,yBATtC,KAanBwpM,qBAAuB,WACrB,EAAK3qE,QAAQ71O,IAAM,UAAEyD,MAAM,EAAKg9S,OAAOzgT,KACvC,EAAK61O,QAAQzjI,QAAU,UAAE3uG,MAAM,EAAKg9S,OAAOruM,SAC3C,EAAKyjI,QAAQ9pJ,UAAUqwB,eAAgB,UAAE34G,MAAM,EAAKg9S,OAAOC,uBAC3D,EAAK7qE,QAAQrjJ,cAAc4pB,eAAgB,UAAE34G,MAAM,EAAKg9S,OAAOE,oBAhB/DjoW,KAAKm9R,QAAUvjP,I,2HCXnB,OACA,QACA,Q,IACA,Q,IACA,O,IACA,Q,IAEA,O,IACA,Q,uDAEqBsuT,E,WAGnB,WAAYtuT,GAAO,sCAiCnB+6L,cAAgB,SAAChxL,GACf,GAAI,UAAO9iD,YAAa,CAEtB8iD,EAAIyuG,OACJzuG,EAAI+W,YACJ,IAAIw8K,GAAK,IAAA3sL,eAAc,EAAK4yO,QAAQ71O,IAAIltC,EAAG,EAAK+iR,QAAQ71O,IAAIjtC,GAC5DspC,EAAIuuG,IAAIglF,EAAG98N,EAAG88N,EAAG78N,EAAG,EAAG,EAAG,EAAIjQ,KAAKqnE,IACnC9tB,EAAImX,SACJnX,EAAI6tG,YAEJ7tG,EAAI+W,YACJ,IAAIpQ,EAAc,EAAK6yO,QAAQrzO,YACzBxC,GAAM,IAAAiD,eAAcD,EAAYlwC,EAAGkwC,EAAYjwC,EAAG,EAAK8iR,SAQ7D,GAPAx5O,EAAIuuG,IAAI5qG,EAAIltC,EAAGktC,EAAIjtC,EAAG,GAAI,EAAG,EAAIjQ,KAAKqnE,IAEtC9tB,EAAImX,SACJnX,EAAI6tG,YACJ7tG,EAAI0uG,UAGA,EAAK8qI,QAAQpjJ,qBAAsB,CACrC,IAAMqyF,EAAa,EAAK+wD,QAAQpjJ,uBAAyB,SACnD2wF,EAAQ/mL,EAAIgnL,YAAYyB,GAC9BzoL,EAAI8oL,SAASL,EAAY9kL,EAAIltC,EAAGktC,EAAIjtC,EAAGqwN,EAAO,OAxDjC,KAqEnBy9H,mBAAqB,SAACxkT,GAGpB,IAAMuC,EAAQ,EAAKi3O,QAAQ1xO,WACrB28S,EAAc,EAAKjrE,QAAQjiI,YAC3B25E,EAAgB,EAAKsoD,QAAQhiI,cAEnCx3G,EAAIyuG,OACJzuG,EAAI+W,YACJ,IAAK,IAAInmE,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC2xD,EAAM3xD,GAAG0lE,OAAOtW,EAAKpvD,EAAI,GAW3B,GATI,EAAK4oS,QAAQ9xO,cAAgB,UAAUD,kBAAoB,EAAK+xO,QAClEx5O,EAAIkX,YAAcg6K,EAAgBA,EAAcE,eAAiB,UAAa,UAAW/wO,aAAa8wH,cAEtGnxE,EAAIkX,YAAcg6K,EAAgBA,EAAcE,eAAiB,UAAa,UAAW/wO,aAAa6wH,QAExGlxE,EAAI6W,UAAY,EAChB7W,EAAI6tG,YACJ7tG,EAAImX,SAEA,EAAKqiO,QAAQv+H,uBACZ,UAAUxzG,kBACT,UAAWpF,UAAUI,cACpB,UAAiBu9C,YAAY3pG,QAAQ,SAAW,GAChD,UAAiB2pG,YAAY3pG,QAAQ,gBAAkB,GACvD,UAAiB2pG,YAAY3pG,QAAQ,WAAa,GAGvD,GAAI,UAAiB2pG,YAAY3pG,QAAQ,WAAa,IAChD,UAAUkuD,eAAe8hK,gBACzB,EAAKmzE,QAAQh9H,gBACjB,CACA,IAAMkoM,EAAY,EAAKlrE,QAAQ/wO,kBAC7By9P,EAAa,EAAK1sB,QAAQ98H,uBAI1B18G,EAAIwuG,UADFk2M,GAAax+C,EACCh1E,EAAgBA,EAAc//G,cAAgBszO,EAAY5uM,UAE1D4uM,EAAY7uM,wBAG9B51G,EAAIwuG,UAAY0iF,EAAgBA,EAAc//G,cAAgBszO,EAAY9uM,qBAGxE,EAAK++B,MAAM+L,qBACbzgJ,EAAIwuG,UAAY0iF,EAAgBA,EAAc//G,cAAgBszO,EAAY5uM,UAE1E71G,EAAIwuG,UAAY0iF,EAAgBA,EAAchgH,QAAUuzO,EAAY5uM,UAGxE71G,EAAI88E,OACJ98E,EAAI0uG,UAEJ,IAAK,IAAI99J,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAChC2xD,EAAM3xD,GAAG0vM,gBAAgBtgJ,GAa3B,GATAuC,EAAM9nD,SAAQ,SAAC2wD,GACTA,EAAKrD,iBACH,UAAiBi4C,YAAY3pG,QAAQ,WAAa,GAAK+0D,EAAKpD,eAAeC,mBAAqB,UAAU1D,eAAe8hK,eAC3Hj7J,EAAKpD,eAAe22S,gBAAgB3+S,MAMtC,UAAWqC,UAAUI,cAElB,EAAK+2O,QAAQzxO,kBAAoB,EAAKyxO,QAAQzxO,kBAAoB,EAAKyxO,QAAQziI,eAAiD,IAAhC,EAAKyiI,QAAQtmJ,eAAsB,4BAEtI,IAFsI,IAEtI,EAFsI,iBAE3H+mB,EAF2H,QAGpI,GAAI,EAAKu/H,QAAQt2H,8BAA8BjJ,GAC7C,kBAEEA,EAAgBzE,UAAYyE,EAAgB1E,YAC9C,EAAKikI,QAAQpyH,sBAAsBnN,EAAiBj6G,GAElDi6G,EAAgBxE,YAClB,EAAK+jI,QAAQpyH,sBAAsBnN,EAAiBj6G,GACpD+qC,YAAW,WACTkvE,EAAgBxE,WAAY,IAC3B,OAXP,EAA8B,EAAK+jI,QAAQriI,iBAA3C,+CAA6D,IAFyE,8EA2BtI,UAAWl4G,UAAUoC,QACvBrB,EAAI+W,YASJ/W,EAAI6W,UAAY,EAChB7W,EAAI6tG,YACJ7tG,EAAIkX,YAAc,UAClBlX,EAAImX,WAnLN96D,KAAKm9R,QAAUvjP,EACf55C,KAAKq4L,MAAQ,IAAI,EAAJ,Q,oDAGR10I,GAEL,KAAI,WAAa,UAAUxhD,WAAWilD,UAGlC,IAAArQ,qCAAqC,IAAAinC,8BAA6Bh+E,OAAtE,CAIA,IAAM4vJ,EAAiB,UAAUt1B,aAC3BguO,EAAatoW,KAAKm9R,QAAQh7R,WAGhC,OAFAnC,KAAK20O,cAAchxL,GAEfisG,EACK5vJ,KAAKm9R,QAAQ9pJ,UAAUp5E,OAAOtW,GAC5B2kT,EAAWzvM,gBACb74J,KAAKm9R,QAAQpjI,cAAc9/F,OAAOtW,GAChC2kT,EAAWxvM,YACb94J,KAAKm9R,QAAQ/nJ,eAAen7E,OAAOtW,QACJqP,IAA7BhzD,KAAKm9R,QAAQ3mO,aAA6Bx2D,KAAKm9R,QAAQ3mO,YAAY0/E,eAAiBl2I,KAAKm9R,QAAQ3mO,YAAYsjG,SAC/G95J,KAAKm9R,QAAQjnJ,aAAaj8E,OAAOtW,QACFqP,IAA7BhzD,KAAKm9R,QAAQ3mO,aAA6Bx2D,KAAKm9R,QAAQ3mO,YAAYsjG,UAAY95J,KAAKm9R,QAAQtjI,YAC9F75J,KAAKm9R,QAAQtjI,YAAY5/F,OAAOtW,QAGzC3jD,KAAKmoW,mBAAmBxkT,Q,eAjCPukT,G,yHCVrB,Q,qDAEaj4I,U,WAOT,WAAYl6K,IAAS,0BANrBA,QAAU,GAON/1C,KAAK+1C,QAAUA,E,iEAGGA,GACpB/9C,QAAQC,MAAM89C,GAAW,sB,8CAGImtC,GAC7BlrF,QAAQC,MAAR,kCAA+C,IAAA2yF,WAAU1H,Q,2JClB/D,QACA,QACA,Q,uDAEqBqlR,E,YAEnB,WAAYzpR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,2CACnB,EAAKE,OAAS,gBACd,EAAK2U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GATiB,E,gFAcnBx7B,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,6CAIxC,IAAMtC,GAAaA,EAAbA,6GACA+tB,EAAevuG,KAAKU,YAY1B,OAXA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWitB,EAAa20L,eAAeljS,QAEzCwgF,EAAWzrF,KAAK,CACdmsF,SAAU,eACVI,UAAWitB,EAAa61C,eAAiB71C,EAAa61C,cAAcj+H,eAC/DooF,EAAa61C,cAAcj+H,cAAcrT,SAAzC,aACDy7F,EAAa61C,cAAcj+H,cAAcrT,SAAzC,aACA,eAEC0tE,M,iCAjCU+nR,G,yJCJrB,QACA,Q,IACA,MACA,SACA,QACA,QACA,Q,uDAEqBE,E,YACnB,WAAY3pR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,iBAChB,EAAKH,YAAc,4CACnB,EAAKE,OAAS,UACd,EAAK4zS,cAAgB,eACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACrB,EAAK0lR,cAAe,EAChB5pR,IACF,IAAAtjD,uBAAA,GAXiB,E,qEAehB73B,GAkBH,MAjB4B,YAAxBA,EAAU6M,YACZ7M,EAAU6M,UAAY,UAEnB7M,EAAUmP,SAAV,kBACHnP,EAAUmP,SAAV,gBAAwC,CAAC,EAAAqlB,SAASE,KAE/C10B,EAAUmP,SAAV,OACHnP,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,WAErC1wB,MAAMC,QAAQlE,EAAUmP,SAAV,aAAqCnP,EAAUmP,SAAV,WAAiC,IACtFnP,EAAUmP,SAAV,aAAqCnP,EAAUmP,SAAV,WAAiC,GAC5B,KAAtCnP,EAAUmP,SAAV,cACFnP,EAAUmP,SAAV,YAAoC,KAE7BnP,EAAUmP,SAAV,YACT9a,QAAQ4B,IAAI,uDAA0D+J,EAAUmP,SAAV,aAExE,8FAAkBnP,K,sCAGJ,WACR4qG,EAAevuG,KAAKU,aACtB,IAAA80B,oBAAmB+4E,EAAarzF,UAAY,EAAAua,gBAAgBC,KAC9D11B,KAAK2oW,uBACL,CAAC,aAAc,aAAc,gBAAgBvqW,SAAQ,SAAA3H,GAC/C83G,GAAgBA,EAAa93G,KAC/B83G,EAAa93G,GAAMqsF,SAAW,EAAKA,WAAayrB,EAAa93G,GAAMggK,mBAGnEz2J,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcrT,SAAnB,iBAAkD9S,KAAKmmB,cAAcrT,SAAnB,gBAA+C3Y,SAAS,EAAAg+B,SAASE,KAC3I,CAAC,OAAQ,aAAc,cAAe,UAAUj6B,SAAQ,SAAA3H,GAClD83G,GAAgBA,EAAa93G,KAC/B83G,EAAa93G,GAAMqsF,SAAW,EAAKA,WAAayrB,EAAa93G,GAAMggK,sB,kCAOjE9hJ,GAAiC,IAAnBi0V,IAAmB,yDACrCr6P,EAAevuG,KAAKU,YAAYA,YACtC6tG,EAAaS,YAAc,EAAAr1E,aAAaiB,gBACxC,qGAAkBjmB,GACdi0V,IACF,IAAAt9N,0BAAyBtrI,MAE3BuuG,EAAas6P,sB,2CAYb,IAAMt6P,EAAevuG,KAAKU,YAC1B,OAAQ,IAAA80B,oBAAmB+4E,EAAarzF,UAAY,EAAAua,gBAAgBC,IAAQ64E,EAAaS,cAAgB,EAAAr1E,aAAaiB,iB,+CAG/F8gL,EAAYxlM,GAKnC,IAEMk7M,EAFe,UAAMjvN,WAAW4S,YAAYiB,aACvBlK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASilN,KAClC1zM,GAChB4oF,EAAgB,EAAAhyC,OAAOkqT,wBAAwB13I,EAASl7M,GACxDuyE,EAAmBzoF,KAAK2hF,SAAS36E,QACrC,SAAA3D,GAAA,OAAWA,EAAQM,WAAaN,EAAQM,UAAUkS,eAAeu7M,IAAY/tN,EAAQM,UAAUkS,eAAeu7M,GAASj3N,SAASy2F,MAElI,KAAK,EAAD,8GAA8BnI,EAAkB,KAAM,SAAU,CAClEzoF,KAAKmmB,cAAgBsiE,EAAiB,GACtC,IAAMsgR,EAA+BtgR,EAAiBzhF,QAAO,SAAA3D,GAC3D,OAAOA,EAAQM,UAAU4M,YAAYpW,SAAS,eAAiBkJ,EAAQM,UAAU4M,YAAYpW,SAAS,YAExG6F,KAAKgnF,mBAAqB+hR,EAA6B,M,0CAQvC5zQ,GAClB,QAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,IAAMy/D,EAAavU,gBAAkB,EAAAtlD,eAAe,KAG1Ft7B,KAAKU,YAAYsuG,cAAgB,EAAAr1E,aAAaiB,mB,iCA5GpC6tU,G,gKCRrB,QACA,SACA,Q,IACA,Q,uDAEqBO,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAxlW,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WAER2C,GAAS,aAAU3C,EAAU6M,WAC/Bo8H,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAO/E,OANKsmI,IACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ3C,EAAU6M,WAC/DxQ,KAAK+e,aAAahqB,KAAK63I,IAEzBA,EAAYlsI,UAAY,kBAAM,GAC9BksI,EAAYwD,KAAKzsI,IACV,I,2CAIP,OAAO,I,6DAvBFqE,GAAK,Q,aADOghW,G,+ICLrB,SACA,Q,IACA,S,uDAEqBrvJ,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAn2M,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKs0H,iBAAkB,EACvB,EAAK8U,kBAAoB,CAAC,cANd,E,qEASTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACH,QAAQ,GACN,KAAO00I,GAAgBvhJ,EAAU4M,aAAe5M,EAAU4M,YAAYpW,SAAS,mBAC7E81I,EAAkB,eAClBC,aAOR,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,2CAIrE,OAAO,I,6DA7BFl9I,GAAK,a,aADO2xM,G,qJCJrB,QACA,SACA,Q,uDAEqBkrD,E,YACnB,WAAY/lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKotV,oBAAsB,CAAC,GAJT,E,uFAQnB,IAAM/tV,EAASlb,KAAKU,YAAYwa,OAC5BslE,GAAaA,EAAbA,6GAEEkwD,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IAiBzC,OAPI0oI,GAAgBA,EAAas2C,eAAiB,EAAD,0BAC/CxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAIrBxmG,I,gCAGCyG,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS0yH,WAAWkrD,kB,iCAlCvCA,G,wLCFAqkG,E,YACnB,WAAYpqR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKgzO,YAAc,gBACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,YAChB,EAAKH,YAAc,qDACnB,EAAKE,OAAS,gBACd,EAAK/N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EATV,E,8BAHvB,Q,mBAEqBgyB,G,+ICFrB,QACA,Q,uDAEqBjlG,E,YACnB,WAAYnlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKgzO,YAAc,kBACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,kBAChB,EAAKH,YAAc,uDACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKl0P,cAAL,mBACIlE,IACF,EAAKiG,kBAAmB,GAXP,E,mFAeFlvC,EAASouC,GAC1B,OAAOjkF,KAAKmpW,4BAA4BtzT,EAASouC,O,wBAjBhCggL,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAYplL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKgzO,YAAc,cACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,cAChB,EAAKH,YAAc,mDACnB,EAAK7N,gBAAiB,EAClBixE,IACF,EAAKiG,kBAAmB,GATP,E,qEAahBphF,GAOH,OANAA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GAC/FnP,EAAUmP,SAAV,qBAA6CnP,EAAUmP,SAAV,oBAA0C,GACzFnP,EAAUmP,SAAV,qBAA4C,IAAAwvE,kBAAiB3+E,EAAUmP,SAAV,oBAA0C,IAEvGnP,EAAUmP,SAAV,qBAA4C,IAAAwvE,kBAAiB3+E,EAAUmF,oBAEzE,+FAAmBnF,EAAW,IAAIugQ,K,yCAGjBruN,EAASouC,GAC1B,OAAOjkF,KAAKmpW,4BAA4BtzT,EAASouC,O,wBAzBhCigL,G,wLCDAC,E,YACnB,WAAYrlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKgzO,YAAc,aACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,aAChB,EAAKH,YAAc,kDACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EARV,E,8BAHvB,Q,mBAEqB/yE,G,4MCAAJ,E,YACnB,WAAYjlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAKH,YAAc,0DACnB,EAAK6U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKzrL,iBAAkB,EARJ,E,+EAmBnB,sGACA,IAAM0tF,EAAuBn5O,KAAKU,YAAYA,YAC9Cy4O,EAAqBC,oBACrBD,EAAqBiwH,cAAcppW,KAAK+vI,mBAAoB/vI,KAAKgwI,iBACjEhwI,KAAK4mF,mB,0CA1BT,M,4BAEqBm9K,G,4MCAAslG,E,YACnB,WAAYvqR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,sBACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAW,sBAChB,EAAKH,YAAc,2DACnB,EAAK49N,YAAc,cACnB,EAAKt2J,eAAgB,EAPF,E,uFAWnB,IAAIxC,GAAaA,EAAbA,6GACEyyI,EAAoBjzN,KAAKU,YAQ/B,OAPIuyN,EAAkBrjF,WAAaqjF,EAAkBrjF,UAAUzpH,gBACzD8sM,EAAkBrjF,UAAU9sD,UAChCtC,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAW2xI,EAAkBrjF,UAAUzpH,cAAcrT,SAA1C,sBAGR0tE,M,KAvBX,Q,mBAEqB6oR,G,yJCFrB,QACA,SACA,QACA,Q,uDAEqBC,E,YACnB,WAAYxqR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,0BACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAW,0BAChB,EAAKD,OAAS,0BACd,EAAKF,YAAc,+DACnB,EAAK49N,YAAc,kBACnB,EAAKt2J,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GAViB,E,qEAchB73B,GAQH,QAPKA,EAAUmP,SAAV,MAA+BlL,MAAMC,QAAQlE,EAAUmP,SAAV,OAAiE,MAAlCnP,EAAUmP,SAAV,KAA2B,MAC1GnP,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,WAEzC30B,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GAC/FlL,MAAMC,QAAQlE,EAAUmP,SAAV,aAAqCnP,EAAUmP,SAAV,WAAiC3Y,SAAS,OAC/FwJ,EAAUmP,SAAV,WAAmC,CAAC,EAAAqlB,SAASC,OAE/C,8FAAkBz0B,K,oCAIlB,IACM+sI,EADuB1wI,KAAKU,YAAYA,YACJwa,OAAOsD,MAA5B,OACrBkyH,EAAaq2C,kBAAkB,EAAA5sJ,gBAAgBI,iBAC3C,IAAA/E,wBAAyB,EAAAC,gBAAgBC,IACvC9tB,MAAMC,QAAQ7H,KAAK8S,SAAL,YAA+B9S,KAAK8S,SAAL,UAA2B3Y,SAAS,OAC9Eu2I,EAAaylB,mBAAqB,EAAAh8H,gBAAgBC,YAAcs2G,EAAaqc,YAAcrc,EAAaqc,UAAUjqE,UACjH4tD,EAAaylB,mBAAqB,EAAAh8H,gBAAgBE,oBAAsBq2G,EAAa6kB,mBAAqB7kB,EAAa6kB,iBAAiBzyE,WAG9I9iF,KAAKu5O,+BAGT,wG,oDAIA,IAAM7oG,EAAe1wI,KAAKU,YAAYA,YAClCgwI,EAAaqc,YACfrc,EAAaqc,UAAUjqE,UAAW,GAEhC4tD,EAAaxE,aACfwE,EAAaxE,WAAWppD,UAAW,GAEjC4tD,EAAa6kB,mBACf7kB,EAAa6kB,iBAAiBzyE,UAAW,K,2CAK3C,IAAMq2J,EAAuBn5O,KAAKU,YAC5BgwI,EAAeyoG,EAAqBj+N,OAAOsD,MAA5B,OACrB,SAAK26N,EAAqB/vJ,wBAA6D,gBAAnC+vJ,EAAqBrpG,aAGlEY,EAAaylB,mBAAqB,EAAAh8H,gBAAgBI,gBAAkBv6B,KAAKmmB,iB,6CAIhF,IAAIq6D,GAAaA,EAAbA,6GAgBEkwD,EADS1wI,KAAKU,YAAYwa,OACJsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAOhC,OANIt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,M,wBAzFU8oR,G,qJCLrB,QACA,QACA,SACA,QACA,Q,uDAIqB9iG,E,YACnB,WAAY1nL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,4CACnB,EAAKE,OAAS,iBACd,EAAK2tV,cAAgB,EACrB,EAAKvmR,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GATiB,E,qEAahB73B,GAqBH,QApBKA,EAAUmP,SAAV,MAA+BlL,MAAMC,QAAQlE,EAAUmP,SAAV,OAAiE,MAAlCnP,EAAUmP,SAAV,KAA2B,MAC1GnP,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,WAEzC30B,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GAC/FnP,EAAU++E,eASP96E,MAAMC,QAAQlE,EAAUmP,SAAV,YACjB9a,QAAQ4B,IAAI,gEAAiE+J,GAE3EiE,MAAMC,QAAQlE,EAAUmP,SAAV,aAAqCnP,EAAUmP,SAAV,WAAiC3Y,SAAS,OAC/FwJ,EAAUmP,SAAV,WAAmC,CAAC,EAAAqlB,SAASC,QAGjD,8FAAkBz0B,K,oCAIlB,IAAM+sI,EAAe1wI,KAAKU,YAAYA,YACtCgwI,EAAaq2C,kBAAkB,EAAA5sJ,gBAAgBI,iBAC3C,IAAA/E,wBAAyB,EAAAC,gBAAgBC,IACvC9tB,MAAMC,QAAQ7H,KAAK8S,SAAL,YAA+B9S,KAAK8S,SAAL,UAA2B3Y,SAAS,OAC9Eu2I,EAAaylB,mBAAqB,EAAAh8H,gBAAgBC,YAAcs2G,EAAaqc,YAAcrc,EAAaqc,UAAUjqE,UACjH4tD,EAAaylB,mBAAqB,EAAAh8H,gBAAgBE,oBAAsBq2G,EAAa6kB,mBAAqB7kB,EAAa6kB,iBAAiBzyE,WAG9I9iF,KAAKu5O,+BAGT,wG,2CAIA,IAAM7oG,EAAe1wI,KAAKU,YACpBy4O,EAAuBzoG,EAAax1H,OAAOsD,MAAM,oBACvD,SAAI26N,IAAwBA,EAAqB/vJ,wBACT,gBAAnC+vJ,EAAqBrpG,WAAgC,EAAD,mBAGlDY,EAAaylB,mBAAqB,EAAAh8H,gBAAgBI,gBAAkBv6B,KAAKmmB,gB,oDAIhF,IAAMuqH,EAAe1wI,KAAKU,YAAYA,YAClCgwI,EAAaqc,YACfrc,EAAaqc,UAAUjqE,UAAW,GAEhC4tD,EAAaxE,aACfwE,EAAaxE,WAAWppD,UAAW,GAEjC4tD,EAAa6kB,mBACf7kB,EAAa6kB,iBAAiBzyE,UAAW,K,6CAK3C,IAAM4tD,EAAe1wI,KAAKU,YAC1B,IAAI,IAAA80B,oBAAmBk7G,EAAax1H,UAAY,EAAAua,gBAAgBC,GAAI,CAClE,IAAMu9L,EAAoBviF,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IAE/Dw4E,GAAaA,EAAbA,6GACEwmG,EAAat2C,EAAas2C,aAYhC,OAXIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGfxmG,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAY2xI,GAAqBviF,EAAatnD,0BACzC6pI,EAAkBnjF,YAAc,EAAA72G,mBAAmBE,gBAAmB,IAAM,MAE5EqnD,EAET,0H,iCAhGiBgmL,G,qJCRrB,Q,IACA,Q,uDAEqBgjG,E,YACnB,WAAY1qR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAK6tV,cAAgB,GACrB,EAAKvmR,eAAgB,EANF,E,8EAUnB,IAAM0pD,EAAa1sI,KAAKU,YAAYA,YAAYwa,OAAOsD,MAAM,UAAMxW,IAC/D0kI,GAAcA,EAAWslE,YAC3BtlE,EAAWslE,UAAUlvH,UAAW,IAElC,wG,gCAGQ5nE,GACR,IAAMwxH,EAAaxxH,EAAOsD,MAAM,UAAMxW,IACtC,KAAI0kI,GAAcA,EAAWslE,WAAatlE,EAAWslE,UAAU7rL,gBAAkBumH,EAAWslE,UAAUlvH,SAItG,0GAAuB5nE,IAHrB,yG,iCArBesuV,G,yJCHrB,QACA,Q,uDAEqBxnH,E,YACnB,WAAYljK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKD,OAAS,YACd,EAAKF,YAAc,sCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EACtB,EAAKo4E,oBAAqB,EAC1B,EAAKoB,qBAAuB,iBACxBvI,IACF,IAAAnjD,uBAAA,GAbiC,E,qEAiBhCh4B,GACH,IAAMs/E,EAAat/E,EAAU6M,YAAcxQ,KAAK4b,OAAS,EAAI,EAC7D,sGAAmBjY,EAAW,IAAIq+O,GAAS,EAAO/+J,IAChD,EAAqB,IAAfA,EAAmB,WAAa,qB,wBArBvB++J,G,yJCHrB,QACA,Q,uDAEqBD,E,YACnB,WAAYjjK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKD,OAAS,aACd,EAAKF,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EACtB,EAAKo4E,oBAAqB,EAC1B,EAAKoB,qBAAuB,kBACxBvI,IACF,IAAAnjD,uBAAA,GAbiC,E,qEAiBhCh4B,GACH,IAAMs/E,EAAat/E,EAAU6M,YAAcxQ,KAAK4b,OAAS,EAAI,EAC7D,sGAAmBjY,EAAW,IAAIo+O,GAAU,EAAO9+J,IACjD,EAAqB,IAAfA,EAAmB,WAAa,qB,wBArBvB8+J,G,+ICHrB,QACA,Q,uDAEqBgjB,E,YACnB,WAAYjmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,wCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAClBixE,IACF,IAAAnjD,uBAAA,GATiB,E,0EAaXsrD,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS0yH,WAAWorD,WAC/B/kQ,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,Q,wBAlBrB29K,G,qICHrB,QACA,Q,uDAEqBopD,E,YACnB,WAAYrvO,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,sCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAClBixE,IACF,IAAAnjD,uBAAA,GATiB,E,iDADFwyR,G,wLCDArsE,E,YACnB,WAAYhjK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,yCACnB,EAAK7N,gBAAiB,EALH,E,8BAHvB,Q,mBAEqBi0O,G,yJCFrB,QACA,Q,uDAEqB2nH,E,YACnB,WAAY3qR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKD,OAAS,aACd,EAAKF,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EACtB,EAAKo4E,oBAAqB,EAC1B,EAAKoB,qBAAuB,kBACxBvI,IACF,IAAAnjD,uBAAA,GAbiC,E,qEAiBhCh4B,GACH,IAAMs/E,EAAat/E,EAAU6M,YAAcxQ,KAAK4b,OAAS,EAAI,EAC7D,sGAAmBjY,EAAW,IAAI8lW,GAAU,EAAOxmR,IACjD,EAAqB,IAAfA,EAAmB,WAAa,qB,wBArBvBwmR,G,yJCHrB,QACA,SACA,Q,uDAEqBC,E,YACnB,WAAY5qR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAGlBixE,IACF,IAAAnjD,uBAAA,GAZiC,E,8EAiBnC,IAAM+0G,EAAe1wI,KAAKU,YAAYA,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAClE0oI,GAAgBA,EAAa4kB,eAC/B5kB,EAAa4kB,aAAaxyE,UAAW,IAEvC,0G,wBAtBiB4mR,G,qICJrB,QACA,Q,uDAEqBC,E,YACnB,WAAY7qR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAKH,YAAc,+CACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAGlBixE,IACF,IAAAnjD,uBAAA,GAZiC,E,iDADlBguU,G,wLCDAhjG,E,YACnB,WAAY7nL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,iBAChB,EAAKH,YAAc,qCACnB,EAAK7N,gBAAiB,EALH,E,8BAHvB,Q,mBAEqB84P,G,wLCAAijG,E,YACnB,WAAY9qR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,0CACnB,EAAK6tV,cAAgB,GACrB,EAAKvmR,eAAgB,EANF,E,4BAHvB,M,4BAEqB4mR,G,qJCFrB,QACA,QAEA,QACA,SACA,Q,uDASqBC,E,YAEnB,WAAY/qR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK8zS,cAAgB,uBACrB,EAAKvsO,WAAaA,EAClB,EAAK6D,mBAAqB,GAC1B,EAAK9D,eAAgB,EACrB,EAAK0D,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKgjR,cAAgB,EACrB,EAAK99M,iBAAkB,EAdY,E,qEAiBhC9nJ,GACH,IAAMmmW,GAAmBA,EAAnBA,6FAA+BnmW,EAAW,IAAIkmW,GACpD,GAAIC,EAAkB,CACpB,IAAMvmR,EAAcumR,EAAiBnmW,UAAUmF,kBAC/CghW,EAAiBvmR,YAAcA,EAC/BumR,EAAiBriN,eAAiB,SAClCqiN,EAAiBziN,iBAAmBrnJ,KAAK+pW,qBAAqBxmR,GAC9DumR,EAAiBh3V,SAAW9S,KAAKgqW,mBAAmBzmR,EAAaumR,EAAiBziN,kBAClFyiN,EAAiBvhR,aAAehF,EAAYjnF,cAAcqC,QAAQ,MAAO,KACzEmrW,EAAiBlmR,0BAA2B,EACvCkmR,EAAiBnmW,UAAUE,eAC9BimW,EAAiBlmW,gBAAkB5D,KAAKiqW,cAAc1mR,IAG1D,OAAOumR,I,6CAG0D,IAA9CvmR,EAA8C,uDAAhCvjF,KAAKmmB,cAAco9D,YACpD,QAAQ,GACN,KAAKA,EAAYppF,SAAS,QACxB,MAAO,OACT,KAAKopF,EAAYppF,SAAS,QACxB,MAAO,OACT,KAAKopF,EAAYppF,SAAS,QAC1B,QACE,MAAO,U,2CAIsE,IAAhEopF,EAAgE,uDAAlDvjF,KAAKmmB,cAAco9D,YAAa8jE,EAAkB,aAC3EoxK,EAAsBl1O,EAAYxlF,MAAM,MAAM,GACpD,MAAO,CACL,WAAc06T,EAAoBhkU,OAAS,EAAI,CAACgkU,EAAoB/6T,OAAO+6T,EAAoBhkU,OAAS,IAAM,CAAC,MAC/G,eAAuC,SAArB4yJ,EAA8B,CAAC,QAAU,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,W,sCAI5C,IAA9C9jE,EAA8C,uDAAhCvjF,KAAKmmB,cAAco9D,YAC7C,QAAQ,GACN,KAAKA,EAAYppF,SAAS,QACxB,OAAOopF,EAAYppF,SAAS,QAArB,8CACT,KAAKopF,EAAYppF,SAAS,QACxB,OAAOopF,EAAYppF,SAAS,QAArB,8CACT,KAAKopF,EAAYppF,SAAS,QAC1B,QACE,OAAOopF,EAAYppF,SAAS,QAArB,iD,oCAKX,IAAMZ,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,sGACAnH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAO8vF,WAAWljE,cAAgBnmB,KAEpCA,KAAKU,YAAYimJ,0BAA2B,EAC5C,IAAM3+D,EAAShoF,KAAKU,YAAYwa,OAASlb,KAAKU,YAAcV,KAAKU,YAAYA,YACzEsnF,EAAOoB,yBACSpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,GAErCppF,KAAK4mF,mB,sCAGS,WACR8pD,EAAe1wI,KAAKU,aAC1BgwI,EAAa3xH,aAAa3gB,SAAQ,SAAC4gB,GACjCA,EAAQ8jE,SAAW,EAAKA,SACpB9jE,EAAQ8nE,oBAAsB9nE,EAAQ8nE,mBAAmBryF,QAC3DuqB,EAAQ8nE,mBAAmB1oF,SAAQ,SAAC2oF,GAC9BA,IACFA,EAAkBjE,SAAW,EAAKA,gBAKtC4tD,EAAax1H,QAAUw1H,EAAatnD,0BACpBsnD,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IACjDohF,wBAAyB,GAErCppF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,YAEjB4tD,EAAax1H,OAAOsD,MAAMqjO,MAClCsU,QAAQrzK,SAAW9iF,KAAK8iF,SAGnC,IAAMigN,EAAgBryJ,EAAax1H,OAAOsD,MAAM4oP,QAE5C12H,EAAax1H,OAAO9P,OAAS,EAAAsrB,WAAWgkE,QAAU16F,KAAK8iF,UAAYigN,IACjEA,EAAcC,cAChBD,EAAcC,YAAYlgN,UAAW,GAEnCigN,EAAcC,cAChBD,EAAcmnE,YAAYpnR,UAAW,EACrCigN,EAAcmnE,YAAYt3Q,oB,wCAKd/8C,GAChB,IAAM36B,EAASlb,KAAKU,YAAYwa,OAC1BgpE,EAA4BruC,GAAUA,EAAVA,oHAA6CA,GAAW71C,KAAK2hF,SACzFuhN,EAAiBhoR,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,eAAeljS,MAC9D,OAAOkkF,EAA0Bl9E,QAAO,SAAC3D,GACvC,MAAuB,SAAnB6/R,GAA6C,IAAhBhoR,EAAO9P,OACF,SAA7B/H,EAAQgkJ,kBAA4D,SAA7BhkJ,EAAQgkJ,uB,6CAO1D,MAAO,K,8CAGe,WAChBvgE,EAAsB9mF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAc88D,WAAcjjF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC5G,OAAOA,EAAQwY,WAAa,EAAKsK,cAActK,YAC5C,GAIL,OAHAirE,EAAmB1oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAE7BgE,I,mCAGI,WACLqjR,EAAoBnqW,KAAKmqW,oBACzBjvV,EAASlb,KAAKU,YAAYwa,OAC5B0tE,EAAmBuhR,EAAkBr+V,MAAK,SAACzI,GAC7C,MAA4B,uBAArBA,EAAQwY,YAGM,SADAX,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,eAAeljS,OACb,IAAhBkb,EAAO9P,MAAcpL,KAAKmmB,gBACzDyiE,EAAmBuhR,EAAkBr+V,MAAK,SAACzI,GACzC,OAAO,EAAK8iB,cAActK,SAAS1hB,SAAS,QACxCkJ,EAAQwY,SAAS1hB,SAAS,QAC1BkJ,EAAQwY,SAAS1hB,SAAS,YAGlC6F,KAAKmmB,cAAgByiE,GAAoBuhR,EAAkB,GAC3DnqW,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,gCAGvB5sE,GACJlb,KAAKU,YAAY0oF,0BACnB,sGAGF,mGAAgBluE,K,wEAKLgE,GACQ,IAAfA,GAAoBlf,KAAK8iF,WAC3B9iF,KAAK8iF,UAAW,EAChB9iF,KAAK4yF,qB,iCAlLUi3Q,G,qJCdrB,Q,IACA,QACA,QACA,Q,uDAEqB/kG,E,YAEnB,WAAYhmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK8zS,cAAgB,wBACrB,EAAK3hT,gBAAiB,EACtB,EAAK66V,cAAe,EACpB,EAAKa,cAAgB,EACjBzqR,IACF,IAAAnjD,uBAAA,GAViB,E,uFAenB,IAAM6kD,GAAaA,EAAbA,6GACAkwD,EAAe1wI,KAAKU,YACpBsmL,EAAat2C,EAAeA,EAAas2C,aAAe,KAC1DA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IASf,IAAMt6C,EAAagE,EAAax1H,OAAOsD,MAAM,UAAMxW,IAOnD,OANI,IAAAwtB,oBAAmBk7G,EAAax1H,UAAY,EAAAua,gBAAgBC,IAAMg3G,GAAcA,EAAWslE,WAC7FxxH,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWorD,EAAWulE,qBAGnBzxH,M,iCAvCUskL,G,qJCLrB,QACA,Q,uDAEqBE,E,YAEnB,WAAYlmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,sBAChB,EAAKH,YAAc,gDACnB,EAAKE,OAAS,qBACd,EAAK4zS,cAAgB,wBACrB,EAAK3hT,gBAAiB,EACtB,EAAK66V,cAAe,EACpB,EAAKa,cAAgB,EATF,E,4EAYT50V,GACV,IAAMpb,EAASyG,KAAKU,aACpB,qGAAkBiU,GAClB,IAAMqzE,EAASzuF,EAAOmH,YAClBsnF,EAAO6mE,kBAAoB7mE,EAAO6mE,iBAAiB7rE,gBACjDgF,EAAO6mE,iBAAiBnoE,sBAAuB,IAAAhyE,oBAAmB1U,QACtEgoF,EAAO6mE,iBAAiB/rE,UAAW,EACnCkF,EAAO6mE,iBAAiBj8D,iBAE1B5yF,KAAK4mF,mB,6CAIL,IAAIpG,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,gCAGCyG,GACR,IAAMG,EAASH,EAAS+9K,iBACpB/9K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,O,iCAvCnB49K,G,qJCHrB,QACA,QAEA,SACA,SACA,QACA,QACA,QACA,Q,uDAEqB9B,E,YACnB,WAAYpkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK6U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAKm1E,eAAgB,EACrB,EAAKumR,cAAgB,EAGjBzqR,IACF,EAAKwJ,2BAA6B,GAClC,EAAKvD,kBAAmB,EACxBrwF,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKwE,2BAA2BxE,GAAc,OAGlD,EAAKqE,oBAAsB,GAlBR,E,qEAqBhBxkF,GAMH,OALKA,EAAUmP,SAAV,OACHnP,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,WAEzC30B,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GACnGnP,EAAUs8E,wBAA0B,gBACpC,8FAAkBt8E,K,2CAGS,6BAAP2nG,EAAO,qBAAPA,EAAO,gBAC3B,mBACStrG,KAAKmpW,4BAAL,MAAAnpW,KAAoCsrG,IAE7C,iIAAmCA,M,sCAInC,IAAMolC,EAAe1wI,KAAKU,YACpBkmJ,EAAmBlW,EAAakW,iBAClCA,GAAoBA,IACtBA,EAAiB9jE,SAAW9iF,KAAK8iF,WAAa8jE,EAAiB6P,gBAEjE,IAAMvtE,EAAYwnD,EAAax1H,OAAOsD,MAAM,EAAAgpP,kBAAkBx/P,KACzDhI,KAAK8iF,UAAYoG,GAAaA,EAAUm5M,YAAcn5M,EAAUm5M,UAAUv/M,UAC1EoG,EAAUm5M,YACbn5M,EAAUm5M,UAAUv/M,UAAW,K,oCAMjC,IADA,uGACK9iF,KAAK4jF,4BAA6B,IAAAlvE,oBAAmB1U,MAAO,CAW/D,IAAMgoF,EAAShoF,KAAKU,YAAYA,YAC1B0pW,EAAqBpqW,KAAK8S,SAAL,UACtBk1E,EAAOoB,2BACVpB,EAAO++D,oBAAsBqjN,GAAsBA,EAAmBjwW,SAAS,cAEjF,IAAM+uF,EAAYlB,EAAO9sE,OAAOsD,MAAM,EAAAgpP,kBAAkBx/P,IAIxD,GAHIkhF,GAAaA,EAAUm5M,YAAcn5M,EAAUm5M,UAAUv/M,WAC3DoG,EAAUm5M,UAAUv/M,UAAW,IAE7B9iF,KAAK2gF,gCAAgC3gF,KAAKU,YAAY+/E,wBAAyB,CACjF,IAAM8mE,EAAmBvnJ,KAAK8S,SAAL,WACnBu3V,EAAmBrqW,KAAKU,YAAYA,YAAY2oF,WACtD,GAAIk+D,EAAkB,CACpB,IAAM+iN,EAAqBD,EAAiB1oR,SAAS36E,QAAO,SAAAigJ,GAC1D,IAAMsjN,EAAoBtjN,EAAkBn0I,SAAlB,WAC1B,OAAOy0I,EAAiBtnJ,MAAK,SAAA25K,GAC3B,OAAO2wL,EAAkBtqW,MAAK,SAAAuqW,GAAA,OAAc5wL,IAAc4wL,WAG9D,GAAIF,EAAmB71W,QAAU61W,EAAmBzsW,OAAM,SAAA4sW,GAAA,OAAUA,EAAO5uV,WAAawuV,EAAiBlkV,cAActK,YAAW,CAChI,IAAI6uV,EAAkBJ,EAAmBx+V,MAAK,SAAA2+V,GAC5C,OAAOA,EAAOpjN,mBAAqBgjN,EAAiBlkV,cAAckhI,qBAC9DijN,EAAmB,GACzBD,EAAiB1jN,0BAA2B,EAC5C0jN,EAAiBlkV,cAAgBukV,IAIvC1qW,KAAK4mF,oB,6CAgBP,IAAM8pD,EAAe1wI,KAAKU,YACpBiqW,EAAcj6N,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IACzDw4E,GAAaA,EAAbA,6GACEwmG,EAAat2C,EAAas2C,aAoChC,OAnCIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IASXt2C,EAAatnD,yBACXuhR,GAAeA,EAAY76N,YAAc,EAAA72G,mBAAmBE,gBAC1DwxU,EAAYh7N,gBAAkBg7N,EAAYh7N,eAAexpH,eACxDwkV,EAAYh7N,eAAexpH,cAAcrT,UACzC63V,EAAYh7N,eAAexpH,cAAcrT,SAAzC,iBACH0tE,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWqpR,EAAYh7N,eAAexpH,cAAcrT,SAAzC,kBAIf0tE,EAAWzrF,KAAK,CACdmsF,SAAU,wBACVI,UAAW,aAGNovD,GAAgBA,EAAa+V,gBACnC/V,EAAa+V,eAAetgI,eAAiBuqH,EAAa+V,eAAetgI,cAAcrT,SAA1C,iBAChD0tE,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWovD,EAAa+V,eAAetgI,cAAcrT,SAA1C,kBAGR0tE,I,0CAGW2U,GAClB,OAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,KACpC,IAAAqjE,oBAAmB5D,EAAc,EAAG,OAAQ,IAAA4D,oBAAmB5D,EAAc,EAAG,S,iCAxJxE+tK,G,qJCVrB,SACA,Q,uDAGqBT,E,YACnB,WAAY3jL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,oBACd,EAAKuV,SAAW,oBAChB,EAAKH,YAAc,oDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GATiC,E,0EAa3BtgB,GAER,IAAMw1H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC1D,IAAI0oI,IAAgBA,EAAatnD,yBAKjC,OAAIppF,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAKnFzgF,KAAKomF,cAHH,mGAAuBlrE,IANvB,yG,KApBN,Q,mBAEqBunP,G,qJCJrB,SACA,SACA,Q,uDAGqBE,E,YACnB,WAAY7jL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,4CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GATiC,E,qEAahC73B,GACHA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,EAAAqlB,SAASG,SAC5G,IAAM2qD,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAIg/P,GAAS,EAAO1/K,IAChD,EAAqB,IAAfA,EAAmB,WAAa,mB,uCAInCjjF,KAAK8iF,UAAY9iF,KAAKmmB,eACzBnmB,KAAKmmB,cAAcsgF,gB,wCAIL9kB,GAChB,OAAOA,EAAS36E,QAAO,SAAA3D,GAAA,OAAkC,IAAvBA,EAAQ4/E,gB,gCAGlC/nE,GAER,IAAMw1H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IACpDirN,EAAoB/3M,EAAOsD,MAAM,EAAAixH,eAAeznI,IAEtD,KAAI0oI,GAAgBuiF,GAAqBviF,EAAatnD,0BAA4D,gBAAhC6pI,EAAkBnjF,WAApG,CAKA,IAAMtvD,EAAaxgF,KAAKygF,uBACxB,OAAKzgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACxExgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,oBAIhFhnF,KAAKomF,cAHH,mGAAuBlrE,IAPvB,yG,KAvCN,Q,mBAEqBynP,G,qJCLrB,Q,uDAGqBD,E,YACnB,WAAY5jL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,gDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GATiC,E,kFAanBmmD,GAChB,OAAOA,EAAS36E,QAAO,SAAA3D,GAAA,OAAkC,IAAvBA,EAAQ4/E,gB,oCAIhBjjF,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,gCAGQ4U,GAGR,GAD0Blb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,OAK3C,OAAItG,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAKnFzgF,KAAKomF,cAHH,mGAAuBlrE,IANvB,yG,KA9BN,Q,mBAEqBwnP,G,qJCHrB,Q,uDAGqBL,E,YACnB,WAAYvjL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,sBACd,EAAKuV,SAAW,sBAChB,EAAKH,YAAc,sDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GATiC,E,8EAcTx7B,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,gCAGQ4U,GAGR,GAD0Blb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,OAK3C,OAAItG,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAKnFzgF,KAAKomF,cAHH,mGAAuBlrE,IANvB,yG,KA1BN,Q,mBAEqBmnP,G,gKCHrB,Q,IACA,QACA,S,uDAEqBQ,E,YACnB,WAAY/jL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAQtB,EARsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,WACd,EAAKuV,SAAW,WAChB,EAAKH,YAAc,2CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAH,eAAe,GAAK,OADvB,eAEG,EAAAA,eAAe,GAAK,OAFvB,eAGG,EAAAA,eAAe,GAAK,MAHvB,IATiC,S,qEAiBhC33B,GACHA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,EAAAqlB,SAASG,SAC5G,IAAM2qD,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAIk/P,GAAQ,EAAO5/K,IAC/C,EAAqB,IAAfA,EAAmB,WAAa,mB,uCAInCjjF,KAAK8iF,UAAY9iF,KAAKmmB,eACzBnmB,KAAKmmB,cAAcsgF,gB,wCAIL9kB,GAChB,OAAOA,EAAS36E,QAAO,SAAA3D,GAAA,OAAkC,IAAvBA,EAAQ4/E,gB,qCAI1C,sGACA,IAAM1pF,EAASyG,KAAKU,YAID,OAHOnH,EAAOmH,YACMwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC3Bg/K,cACLztL,EAAO4sB,gBAChC5sB,EAAOkiC,eAAeliC,EAAO4sB,cAAcrT,SAArB,eAAkDvZ,EAAO4sB,iB,0CAK/DykV,GAAiB,WAC9BA,GAGLl2W,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAAs9B,GACf,MAApBkvU,EACe,MAAblvU,IACF,EAAKD,eAAeC,GAAY,MAEZ,MAAbA,IACT,EAAKD,eAAeC,GAAY,W,4CAKhBA,GACpB,IAAMr4B,EAAUrD,KAAKy7B,eAAeC,GACpC,GAAKr4B,EAAL,CAGA,IAAMwnW,EAAexnW,EAAQM,UAAUmF,kBAAkB/K,MAAM,KACzDuF,EAAOunW,EAAaA,EAAap2W,OAAS,GAAKo2W,EAAaA,EAAap2W,OAAS,GAAGkK,QAAQ,KAAM,IAAM,GACzGgvL,EAAcjyJ,IAAa,EAAAJ,eAAe,GAAK,EAAAA,eAAe,GAAK,EAAAA,eAAe,GACxF,GAAKh4B,GAAStD,KAAKy7B,eAAekyJ,GAAlC,CAGA,GAAI3tL,KAAKy7B,eAAekyJ,GAAc,CACpC,IAAMm9K,EAAgB9qW,KAAKy7B,eAAekyJ,GAAahqL,UAAUmF,kBAAkB/K,MAAM,KACnFgtW,EAAQD,EAAcA,EAAcr2W,OAAS,GAAKq2W,EAAcA,EAAcr2W,OAAS,GAAGkK,QAAQ,KAAM,IAAM,GACpH,IAAK2E,GAAoB,KAAVynW,GAA0B,KAATznW,EAC9B,OAGJtD,KAAKy7B,eAAekyJ,GAAe,S,8CAGbvwK,GAEtB,MAAkC,OADbpd,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IACzCg/K,eAGjB,iHAAqC5pK,O,wBAxFpBylP,G,qJCJrB,Q,uDAGqBmoG,E,YACnB,WAAYlsR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,+CACnB,EAAKE,OAAS,qBACd,EAAK2U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,IACF,EAAKrjD,eAAiB,GACtB,EAAAJ,yBAAyBj9B,SAAQ,SAAAkpD,GAC/B,EAAK7rB,eAAe6rB,GAAO,SAZI,E,qEAiBhC3jD,GACHA,EAAUmP,SAAV,cAAuCnP,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KACjEnP,EAAUmP,SAAV,KAA2B,GAAKnP,EAAUmP,SAAV,KAA2B,GAC3D,GACJ,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAuoB,yBAAyB,GAAK,EAAI,EAC7F,sGAAmB13B,EAAW,IAAIqnW,GAAY,EAAO/nR,IACnD,EAAqB,IAAfA,EAAmB,WAAa,mB,oCAIdjjF,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,gCAGQ4U,GAEkBlb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,QAKvCtG,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAIjFzgF,KAAKomF,cAFL,mGAAgBlrE,KANhB,uG,gDAoCF,OAAO,M,KA3EX,Q,mBAEqB8vV,G,4MCAA/kG,E,YACnB,WAAYnnL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,6CACnB,EAAKE,OAAsC,SAA7BxiB,SAASC,SAASmC,OAAoB,eAAiB,cACrE,EAAK+0B,SAAU,EACf,EAAKyyD,eAAgB,EAPF,E,qEAUhBr/E,GACH,OAAiC,SAA7BvK,SAASC,SAASmC,QAA6C,gBAAxBmI,EAAU6M,aAGrD,+FAAmB7M,EAAW,IAAIsiQ,K,yCAiBjBjP,GACjB,GAA0B,eAAtBA,EAAoC,CACtC,IAAMi0G,EAAkBjrW,KAAKU,YACHuqW,EAAgBvqW,YACxBwa,OAAOsD,MAAM0nR,OAAOp+B,WAAWhlL,UAAW,EAC5DmoR,EAAgBnoR,UAAW,EAC3B9iF,KAAKymG,iB,sCAKP,IACMykQ,EADoBlrW,KAAKU,YACQwa,OAAOsD,MAAM0nR,OAChDglE,GAAgBA,EAAapjG,aAAeojG,EAAapjG,WAAWhlL,WACtEooR,EAAapjG,WAAWhlL,UAAW,O,KAjDzC,Q,mBAGqBmjL,G,yJCHrB,QACA,QACA,S,uDAEqBG,E,YACnB,WAAYtnL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,eACd,EAAKuV,SAAW,QAChB,EAAKD,OAAS,QACd,EAAKF,YAAc,+CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACrB,EAAKiG,qBAAuB,CAAC,cACzBnK,IACF,IAAAtjD,uBAAA,GAXiC,E,qEAehC73B,GACHA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GACnG,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAIyiQ,GAAM,EAAOnjL,IAC7C,EAAqB,IAAfA,EAAmB,WAAa,mB,gCAGhC/nE,GACR,IAAMw1H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC1D,IAAI0oI,IAAgBA,EAAatnD,yBAKjC,0GAAuBluE,IAJrB,yG,wBA1BekrP,G,yJCJrB,QACA,S,uDAGqBC,E,YACnB,WAAYvnL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,6CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,8EASa,IAAtBruE,EAAsB,wDAC1Bpb,EAASyG,KAAKU,YACdgwI,EAAen3I,EAAOmH,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IACxD0oI,GAAgBA,EAAaz2C,aAAey2C,EAAaz2C,WAAWnX,WACtE4tD,EAAaz2C,WAAWnX,UAAW,IAErC,qGAAkBnuE,K,sCA4BlB,IAAM+7H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,KACrDhI,KAAK8iF,UAAY4tD,GAAgBA,EAAaz2C,aAAey2C,EAAaz2C,WAAWnX,WACxF4tD,EAAaz2C,WAAWnX,UAAW,O,wBA9CpBujL,G,wLCFA8kG,E,YACnB,WAAYrsR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,+CACnB,EAAKsnE,eAAgB,EALF,E,4BAHvB,M,4BAEqBmoR,G,2ICFrB,QACA,SACA,QACA,QACA,Q,uDAEqBvkG,E,YACnB,WAAY9nL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,+CACnB,EAAKsnE,eAAgB,EALF,E,gFASnB,IAAMooR,EAAeprW,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAimP,OAAOz8P,IACtDojW,GAAgBA,EAAatjP,QAAUsjP,EAAatjP,OAAOhlC,WAC7DsoR,EAAatjP,OAAOhlC,SAAW9iF,KAAK8iF,WAAasoR,EAAatjP,OAAO2uC,kB,0CAIrDthE,GAClB,OAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,KAGtC,IAAAqjE,oBAAmB5D,EAAc,EAAG,S,iCApB1ByxK,G,2ICNrB,QACA,QACA,QACA,Q,uDAEqBykG,E,YACnB,WAAYvsR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,4CACnB,EAAKsnE,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiC,E,oFAYjB25D,GAClB,OAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,KAGtC,IAAAqjE,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,Q,iCAjB9C+vU,G,iICLrB,QACA,Q,uDAEqB/kG,E,YACnB,WAAYxnL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,4CACnB,EAAKsnE,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiC,E,0DADlB8qO,G,gKCHrB,QACA,QACA,QACA,Q,uDAEqBglG,E,YACnB,WAAYxsR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAOtB,EAPsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,6CACnB,EAAKsnE,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAH,eAAe,GAAK,OADvB,eAEG,EAAAA,eAAe,GAAK,MAFvB,IARiC,S,qEAehC33B,GAEH,OADAA,EAAUs8E,wBAA0B,eACpC,8FAAkBt8E,K,0CAGAwxF,GAClB,OAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,IACpC,IAAAqjE,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,KAE1D,IAAAy9D,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,MAC1D,IAAAy9D,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,Q,iCA1B5CgwU,G,2ICLrB,QACA,QACA,Q,uDAEqBC,E,YACnB,WAAYzsR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,0CACnB,EAAK6tV,cAAgB,GACjBzqR,IACF,IAAAtjD,uBAAA,GARiC,E,sFAanC,gC,iCAdiB+vU,G,wLCFAC,E,YACnB,WAAY1sR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,6CACnB,EAAKsnE,eAAgB,EALF,E,4BAHvB,M,4BAEqBwoR,G,wLCAAC,E,YACnB,WAAY3sR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,8CACnB,EAAKsnE,eAAgB,EACrB,EAAKn1E,gBAAiB,EANH,E,4BAHvB,M,4BAEqB49V,G,wLCAA1kG,E,YACnB,WAAYjoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,QACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,wCAJA,E,4BAHvB,M,4BAEqBqrP,G,qJCFrB,QACA,Q,uDAEqB2kG,E,YACnB,WAAY5sR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,mBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,wCACfojE,IACF,IAAAtjD,uBAAA,GANiB,E,uFAWnB,IAAMglD,GAAaA,EAAbA,6GACAmrR,EAAY3rW,KAAKU,YAAYirW,UAOnC,OANIA,GAAaA,EAAUlwU,gBAAkBkwU,EAAUxlV,eACrDq6D,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWqqR,EAAUxlV,cAAcq8D,mBAGhChC,M,iCApBUkrR,G,qJCHrB,QACA,Q,uDAEqBE,E,YACnB,WAAY9sR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,wCACfojE,IACF,IAAAtjD,uBAAA,GANiB,E,uFAWnB,IAAMglD,GAAaA,EAAbA,6GACAynL,EAAWjoQ,KAAKU,YAAYunQ,SAOlC,OANIA,GAAYA,EAASxsO,gBAAkBwsO,EAAS9hP,eAClDq6D,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAW2mL,EAAS9hP,cAAcq8D,mBAG/BhC,M,iCApBUorR,G,qJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAY/sR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,mBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,wCACfojE,IACF,IAAAtjD,uBAAA,GANiB,E,uFAWnB,IAAMglD,GAAaA,EAAbA,6GACA8hN,EAAWtiS,KAAKU,YAAY4hS,SAOlC,OANIA,GAAYA,EAAS7mQ,gBAAkB6mQ,EAASn8Q,eAClDq6D,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWghN,EAASn8Q,cAAcq8D,mBAG/BhC,M,iCApBUqrR,G,qJCHrB,QACA,SACA,QACA,Q,mDAEA,IAAMC,EAAgB,CAAC,kBAAmB,kBAAmB,iBAAkB,iBAAkB,gBAAiB,kBAE7FtpG,E,YACnB,WAAY1jL,IAAS,gGACbA,IADa,SAkErB0G,sBAAwB,SAACP,GAAgC,IAAtB7nE,EAAsB,uDAAT,KAC1C2uV,EAAgB,GACdC,EAAU5uV,GAAcA,EAAWtK,UAAYsK,EAAWtK,SAAX,oBAA6CsK,EAAWtK,SAAX,oBAA6C,MACzIm5V,EAAehnR,EAASj+E,QAAO,SAAA2Y,GACnC,SAAKA,EAAQnE,KAAK1I,SAAb,qBAAiD6M,EAAQnE,KAAK1I,SAAb,sBAAiDk5V,KACrGD,EAAch3W,KAAK4qB,IACZ,MAgBX,OAZAssV,EAAa7tW,SAAQ,SAAAuhB,GACdosV,EAAc9rW,MAAK,SAAAisW,GACtB,0BACSA,EAAgB1wV,KAAK1I,SAArB,gCACL6M,EAAQnE,KAAK1I,SAAb,iCAA4Do5V,EAAgB1wV,KAAK1I,SAArB,+BAEzDo5V,EAAgB1wV,KAAK1I,SAArB,iBAAoD6M,EAAQnE,KAAK1I,SAAb,iBACzD6M,EAAQnE,KAAK1I,SAAb,gBAAyC,KAAOo5V,EAAgB1wV,KAAK1I,SAArB,gBAAiD,OAEnGi5V,EAAch3W,KAAK4qB,MAGhBosV,GAtFP,EAAKzlW,OAAS,mBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,8CACnB,EAAK6U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAK07V,cAAgB,EACrB,EAAKvmR,eAAgB,EACjBlE,IACF,EAAKiG,kBAAmB,GAVP,E,qEAchBphF,GAiBH,OAZI,EAAAxI,kBAAoByM,MAAMC,QAAQlE,EAAUmP,SAAV,kBAA0Cg5V,EAAc7rW,MAAK,SAAAqiC,GAAA,OAAO3+B,EAAUmF,oBAAuBw5B,OACzI3+B,EAAUmP,SAAV,gBAAwC,CAAC,OAE3CnP,EAAUmP,SAAV,qBAA6CnP,EAAUmF,mBAAqB,IAAI3O,SAAS,OACrF,OACCwJ,EAAUmF,mBAAqB,IAAI3O,SAAS,OAAS,MAAQ,GAClEwJ,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,MAAgE,MAAlCnP,EAAUmP,SAAV,KAA2B,GAC3FnP,EAAUmP,SAAV,KAA2B,GACoB,QAA9CnP,EAAUmP,SAAV,oBAAuD,IAAM,EAAAwoB,eAAe,GACjF33B,EAAUmP,SAAV,gCAAwDnP,EAAUmF,mBAAqB,IACpFnK,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,KAEvC,+FAAmBgF,EAAW,IAAI6+P,K,sCAIlC,IAAMx6K,EAAShoF,KAAKU,YACpBsnF,EAAO++D,qBAAuB/mJ,KAAK8iF,SAC/BkF,EAAOiS,aACTjS,EAAOiS,WAAWnX,SAAW9iF,KAAK8iF,SAClCkF,EAAOiS,WAAWrH,mB,oDAKpB,IACM5K,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,2CAKrC,OAAOppF,KAAKU,YAAY0oF,2B,kCAGdz0E,IACV,qGAAkBA,GAClB3U,KAAKu5O,gC,gCAyDGr+N,GACR,IAAMw1H,EAAe1wI,KAAKU,YAC1B,IAAIgwI,EAAatnD,2BAA4BsnD,EAAaqW,oBAI1D,0GAAuB7rI,IAHrB,uG,4CAkBF,OADelb,KAAKU,YACL0oF,6B,iCA1IEo5K,G,4MCLAW,E,YACnB,WAAYrkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,gDACnB,EAAKE,OAAS,qBACd,EAAK2U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAK07V,cAAgB,EACjBzqR,IACF,EAAKwJ,2BAA6B,CAChC3xD,QAAS,KAXM,E,qEAgBhBhzB,GACH,IAAMm0C,EAAS93C,KAAKojF,MAAMz/E,EAAW,IAAIw/P,GACrCrrN,GACFqrN,EAAiBgpG,sBAAsBr0T,K,sCAgBzC,IAAMmiD,EAAaj6F,KAAKU,YAAYu5F,WAChCA,IACFA,EAAWnX,SAAW9iF,KAAK8iF,WAAamX,EAAWw8D,kB,qCAKrD,wG,gCAgBQv7I,GAER,IAAMw1H,EAAe1wI,KAAKU,YAE1B,GAAKgwI,EAAaz2C,YAAey2C,EAAaz2C,WAAW9zE,iBACtDuqH,EAAaz2C,WAAW9zE,cAAcrT,WAAY49H,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,cACsB,SAAtE49H,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,aAA+D,IAKpE,OAAI9S,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,mCAkGS,WACL8sE,EAAShoF,KAAKU,YACdunF,EAAuBjoF,KAAKmmB,cAC5BsiE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,4BACrF,EAAD,8GAA8BgI,IAChCzoF,KAAKosW,oCAAoCpkR,EAAQS,EAAkB,aAErEzoF,KAAKqsW,0BAA0BrkR,EAAQC,K,gCAG/BhB,GACR,IAAMG,EAASH,EAAS8S,OAAOopK,iBAC3Bl8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,M,6CA5JdtvC,GAC3B,IAAMw0T,EAAax0T,EAAOhlC,SAAP,cACbk0K,EAAalvI,EAAOhlC,SAAP,WACdw5V,IACHx0T,EAAOhlC,SAAP,cAAmC,CAAC,SAEjCk0K,IACHlvI,EAAOhlC,SAAP,WAAgC,CAAC,a,GAjCvC,M,4BAEqBqwP,G,qJCFrB,QACA,Q,uDAEqBM,E,YACnB,WAAY3kL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKghJ,gBAAiB,EACtB,EAAK/2H,SAAU,EACf,EAAK1U,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKqyB,cAAgB,GATF,E,0EAYXtiR,GACR,IAAMG,EAASH,EAAS8S,OAAO0pK,YAC3Bx8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,K,gCAIjClsE,GAGR,GAAwC,SADnBlb,KAAKU,YAAY0mJ,uBACrBC,mBAAjB,CAKA,IAAM7mE,EAAaxgF,KAAKygF,uBAElB2lB,EAAYlrF,EAAOqmE,+BAIzB,OAH0BvhF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcxiB,WAAa3D,KAAKmmB,cAAcyO,YAAc50B,KAAKmmB,cAAcxiB,UAAUixB,WAAW30B,MAAK,SAAA6lG,GAC5J,OAAOA,EAAQ5qF,SAAW,EAAA6c,mBAAmBC,KAAO8tE,EAAQ5qF,SAAWkrF,OAE/CpmG,KAAKmmB,cAAcw6D,gCAAgCH,IACrExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI5DhnF,KAAKomF,cAHH,mGAAuBlrE,IAZvB,uG,mCAyCS,WACLutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,GAAI,IAAI,GAAO,CACjE,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aACpBlN,EAAQM,UAAU4M,YAAYs2F,WAAW,kEAE1Che,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,qBAEnF7mG,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,U,iCA/EjC46K,G,4MCDAE,E,YACnB,WAAY7kL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKghJ,gBAAiB,EACtB,EAAK/2H,SAAU,EACf,EAAK1U,SAAW,kBAChB,EAAKH,YAAc,6CACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKqyB,cAAgB,GATF,E,uFAanB,IAAM/oR,GAAaA,EAAbA,6GACAkwD,EAAe1wI,KAAKU,YAe1B,OAdIgwI,GAAgBA,EAAaz2C,YAAcy2C,EAAaz2C,WAAW9zE,gBACjEuqH,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,iBACF0tE,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWovD,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,kBAGX49H,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,YACF0tE,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,cAIV0tE,M,GAhCX,M,4BAEqBmjL,G,qJCFrB,QACA,QACA,SACA,Q,IACA,MACA,Q,uDAEqB4oG,E,YACnB,WAAYztR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKoV,YAAc,0CACnB,EAAKG,SAAW,QAChB,EAAK2zS,cAAgB,kBACrB,EAAK5zS,OAAS,eACd,EAAK/N,gBAAiB,EACtB,EAAKqnP,gBAAiB,EACtB,EAAKq0G,cAAgB,EATF,E,8FAanB,IACMvhR,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,kCAI3Bz0E,GAEV,IADA,qGAAkBA,IACd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAGA,IACMgoF,EADShoF,KAAKU,YACEA,YACtB,GAAMsnF,EAAO++D,sBAAuB/+D,EAAOoB,0BAA8BjxF,OAAO2B,SAASwb,KAAKnb,SAAS,cAAvG,CAKA6F,KAAKu5O,8BAELv5O,KAAKU,YAAYw0P,gBAAiB,EAClC,IAAMvtI,EAAY3/B,EAAO2/B,UACzB,GAAIA,IAAcA,EAAUutI,eAAgB,CAC1C,IAAMs3G,EAA6B7kP,EAAUjoG,qBACvC+sV,EAAmBzsW,KAAKyf,yBACxBitV,EAAgBF,EAA2B1gW,MAAK,SAAAolJ,GAAA,OAAMA,EAAG11I,KAAKiE,2BAA6BgtV,KAC7FC,KACF,2FAAkB73W,KAAK63W,EAAclxV,MACrCmsG,EAAUutI,gBAAiB,SAd7B,UAAMjxO,UAAS,IAAAk5C,sBAAqB,EAAAzgC,cAAciB,wB,gCAmB5CziB,GAER,IAAIlb,KAAKU,YAAY0oF,yBAArB,CAKA,GAAIppF,KAAKU,YAAYylJ,iBAAmB,EAAApsH,eAAeE,KAAM,CAC3D,IAAM0yU,EAAmB3sW,KAAKU,YAAYu5F,WAC1C,GAAI0yQ,GAAoBA,EAAiBxmV,cAAe,CACtD,IAAMymV,EAA4BD,EAAiBxmV,cAAcrT,SAA/B,UAClC,IAAK85V,GAA8BA,IAA8BA,EAA0BzyW,SAAS,aAElG,YADA,sGAMN,IAAMqmF,EAAaxgF,KAAKygF,uBACxB,OAAIzgF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACtExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG5DhnF,KAAKomF,cAFH,mGAAuBlrE,IAlBvB,uG,6CAyBF,IAAIslE,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,M,iCApFU+rR,G,qJCPrB,QACA,QACA,SACA,SACA,Q,IACA,MACA,Q,uDAEqBvpG,E,YACnB,WAAYlkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,uCACnB,EAAK8zS,cAAgB,YACrB,EAAK5zS,OAAS,YACd,EAAK/N,gBAAiB,EACtB,EAAKqnP,gBAAiB,EACtB,EAAKq0G,cAAgB,EATF,E,8FAanB,IACMvhR,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,kCAI3Bz0E,GAEV,IADA,qGAAkBA,IACd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAGA,IACMgoF,EADShoF,KAAKU,YACEA,YACtB,GAAMsnF,EAAO++D,sBAAuB/+D,EAAOoB,0BAA8BjxF,OAAO2B,SAASwb,KAAKnb,SAAS,cAAvG,CAKA6F,KAAKu5O,8BAELv5O,KAAKU,YAAYw0P,gBAAiB,EAClC,IAAM3uG,EAAcv+D,EAAOu+D,YAC3B,GAAIA,IAAgBA,EAAY2uG,eAAgB,CAC9C,IAAM23G,EAA+BtmN,EAAY7mI,qBAC3CotV,EAAuB9sW,KAAKyf,yBAC5BstV,EAAkBF,EAA6B/gW,MAAK,SAAAkhW,GACxD,OAAOA,EAAaxxV,KAAKiE,2BAA6BqtV,KAEpDC,KACF,2FAAkBl4W,KAAKk4W,EAAgBvxV,MACvC+qI,EAAY2uG,gBAAiB,SAhB/B,UAAMjxO,UAAS,IAAAk5C,sBAAqB,EAAAzgC,cAAciB,wB,gCAqB5CziB,GAER,IAAIlb,KAAKU,YAAY0oF,0BAA6BppF,KAAKU,YAAYqmJ,oBAAnE,CAKA,GAAI/mJ,KAAKU,YAAYylJ,iBAAmB,EAAApsH,eAAeE,KAAM,CAC3D,IAAM0yU,EAAmB3sW,KAAKU,YAAYu5F,WAC1C,GAAI0yQ,GAAoBA,EAAiBxmV,cAAe,CACtD,IAAMymV,EAA4BD,EAAiBxmV,cAAcrT,SAA/B,UAClC,IAAK85V,GAA8BA,IAA8BA,EAA0BzyW,SAAS,aAElG,YADA,sGAKN,IAAMqmF,EAAaxgF,KAAKygF,uBACxB,OAAIzgF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACtExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG5DhnF,KAAKomF,cAFH,mGAAuBlrE,IAjBvB,uG,6CA4CF,IAAIslE,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,gCAGCyG,GACR,GAAIjnF,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,OAAQ,CAC3D,IAAMstD,EAASH,EAAS8S,OAAOipK,UAC3B/7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAnH1B47K,G,4MCNApB,E,YACnB,WAAY9iL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,0CACnB,EAAK8zS,cAAgB,eACrB,EAAKj/R,SAAU,EACf,EAAKg5U,cAAgB,GAPF,E,0EAUXruV,GACR,IAAMw1H,EAAe1wI,KAAKU,YAC1B,GAAKgwI,EAAaqW,sBAAuBrW,EAAatnD,yBAItD,OAAIppF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,IALvB,uG,6CAYF,IAAMw1H,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GAKJ,OAJAA,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,mCAGI,WACLiI,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1FzgF,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqByB,EAAiB,K,gCAGnCxB,GACR,IAAMG,EAASH,EAAS8S,OAAO6nK,YAC3B36K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,GAjD7C,M,4BAEqBw6K,G,qJCFrB,Q,IACA,Q,IACA,MACA,Q,uDAEqBW,E,YACnB,WAAYzjL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK6tV,cAAgB,EACrB,EAAKvmR,eAAgB,EAEjBlE,IACF,EAAKwJ,2BAA6B,CAChC3xD,QAAS,GACTG,QAAS,KAEX,IAAA0E,uBAAA,IAbiB,E,qFAiBQ,6BAAP8vE,EAAO,qBAAPA,EAAO,gBAC3B,mBACStrG,KAAKmpW,4BAAL,MAAAnpW,KAAoCsrG,IAE7C,iIAAmCA,M,2BAGhC3nG,GAIH,QAHKA,EAAUmP,SAAV,MAA+BlL,MAAMC,QAAQlE,EAAUmP,SAAV,OAAiE,MAAlCnP,EAAUmP,SAAV,KAA2B,MAC1GnP,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,YAEzC,8FAAkB30B,K,oCAIlB3D,KAAKitW,kBACL,wG,oDAIA,IAAMv8N,EAAe1wI,KAAKU,YAAYA,YAClCgwI,EAAagW,gBACfhW,EAAagW,cAAc5jE,UAAW,K,sCAKxC,IAAMiqE,EAAY/sJ,KAAKU,YAAYqsJ,UAC/BA,IACFA,EAAUjqE,SAAW9iF,KAAK8iF,WAAaiqE,EAAU0J,kB,2CAMnD,OADqBz2J,KAAKU,YACNy1J,mBAAqB,EAAAh8H,gBAAgBC,YAAcp6B,KAAKmmB,gB,gCAGpEjL,GAAQ,WACVw1H,EAAe1wI,KAAKU,YAC1B,IAAIV,KAAKgmF,qBAgBT,OAZI0qD,EAAaqc,WAAarc,EAAaqc,UAAUtxH,gBAAkBz7B,KAAKy7B,gBAAkBz7B,KAAKmmB,eACjGzxB,OAAOmc,KAAK6/H,EAAaqc,UAAUtxH,gBAAgBr9B,SAAQ,SAAAs9B,GACzD,IAAK,EAAKD,eAAeC,IAAag1G,EAAaqc,UAAUtxH,eAAeC,GAC1E,EAAKD,eAAeC,GAAY,EAAKolD,2BAA2BplD,QAC3D,GAAI,EAAKD,eAAeC,KAAcg1G,EAAaqc,UAAUtxH,eAAeC,GAAW,KACrF9qB,EAAoB,UAAMzO,WAAWwO,YAArCC,iBACFA,GAAqBA,EAAiBk4E,YACzC,EAAKrtD,eAAeC,GAAY,WAKxC,mGAAuBxgB,IAfrB,uG,6CAmBF,IAAMslE,GAAaA,EAAbA,6GACAkwD,EAAe1wI,KAAKU,YACpBsmL,EAAat2C,EAAas2C,aAmBhC,OAlBIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGXt2C,EAAaqc,WAAarc,EAAaqc,UAAU5mI,eAAiBuqH,EAAaqc,UAAU5mI,cAAcrT,SAArC,WACpE0tE,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAWovD,EAAaqc,UAAU5mI,cAAcrT,SAArC,UAA2D,KAGtE49H,EAAaqc,WAAarc,EAAaqc,UAAU5mI,eAAiBuqH,EAAaqc,UAAU5mI,cAAcrT,SAArC,eACpE0tE,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWovD,EAAaqc,UAAU5mI,cAAcrT,SAArC,cAA+D,KAGvE0tE,I,4CAIP,OAAOxgF,KAAKU,YAAYy1J,mBAAqB,EAAAh8H,gBAAgBC,e,wBAvG5CmoO,G,yJCLrB,QACA,Q,IACA,MACA,Q,uDAEqB2qG,E,YACnB,WAAYpuR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,6CACnB,EAAKsnE,eAAgB,EACrB,EAAKumR,cAAgB,EAEjBzqR,IACF,IAAAtjD,uBAAA,GATiB,E,qFAaQ,6BAAP8vE,EAAO,qBAAPA,EAAO,gBAC3B,mBACStrG,KAAKmpW,4BAAL,MAAAnpW,KAAoCsrG,IAE7C,iIAAmCA,M,2BAGhC3nG,GAIH,QAHKA,EAAUmP,SAAV,MAA+BlL,MAAMC,QAAQlE,EAAUmP,SAAV,OAAiE,MAAlCnP,EAAUmP,SAAV,KAA2B,MAC1GnP,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,YAEzC,8FAAkB30B,K,oCAIlB3D,KAAKitW,kBACL,wG,gDAGwB7tM,GAAY,WACpC,GAAIA,EAAWtsJ,SAAX,eAAwCssJ,EAAWtsJ,SAAX,UAAkC,CAC5E,IAAI0tE,EAAa,GACb4+E,EAAWtsJ,SAAX,eACF0tE,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAW89E,EAAWtsJ,SAAX,gBAGXssJ,EAAWtsJ,SAAX,WACF0tE,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW89E,EAAWtsJ,SAAX,YAGfpe,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAAs9B,GAClCA,IAAa0jI,EAAWtsJ,SAAS8tE,eAAkB,EAAKnlD,eAAeC,KACtE,EAAKD,eAAeC,GAAUilD,gCAAgCH,KAClE,EAAK/kD,eAAeC,GAAY,Y,oDAOtC,IAAMg1G,EAAe1wI,KAAKU,YAAYA,YAClCgwI,EAAagW,gBACfhW,EAAagW,cAAc5jE,UAAW,K,sCAKxC,IAAMopD,EAAalsI,KAAKU,YAAYwrI,WAChCA,IACFA,EAAWppD,SAAW9iF,KAAK8iF,WAAaopD,EAAWuqB,kB,2CAMrD,OADqBz2J,KAAKU,YACNy1J,mBAAqB,EAAAh8H,gBAAgBC,YAAcp6B,KAAKmmB,gB,gCAGpEjL,GAAQ,WACVw1H,EAAe1wI,KAAKU,YAC1B,IAAIV,KAAKgmF,qBAgBT,OAZI0qD,EAAaxE,YAAcwE,EAAaxE,WAAWzwG,gBAAkBz7B,KAAKy7B,gBAAkBz7B,KAAKmmB,eACnGzxB,OAAOmc,KAAK6/H,EAAaxE,WAAWzwG,gBAAgBr9B,SAAQ,SAAAs9B,GAC1D,IAAK,EAAKD,eAAeC,IAAag1G,EAAaxE,WAAWzwG,eAAeC,GAC3E,EAAKD,eAAeC,GAAY,EAAKolD,2BAA2BplD,QAC3D,GAAI,EAAKD,eAAeC,KAAcg1G,EAAaxE,WAAWzwG,eAAeC,GAAW,KACtF9qB,EAAoB,UAAMzO,WAAWwO,YAArCC,iBACFA,GAAqBA,EAAiBk4E,YACzC,EAAKrtD,eAAeC,GAAY,WAKxC,mGAAuBxgB,IAfrB,uG,4CAmBF,OAAOlb,KAAKU,YAAYy1J,mBAAqB,EAAAh8H,gBAAgBC,e,wBAlG5C8yU,G,qJCLrB,QACA,Q,uDAEqBC,E,YACnB,WAAYruR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAKH,YAAc,gDACnB,EAAKsnE,eAAgB,EACrB,EAAKumR,cAAgB,GANF,E,8EAUnB,IAAM74N,EAAe1wI,KAAKU,YAAYA,YACtCgwI,EAAaq2C,kBAAkB,EAAA5sJ,gBAAgBE,oBAC3Cq2G,EAAagW,eAAiBhW,EAAagW,cAAcvgI,eAAiBuqH,EAAagW,cAAcvgI,cAAcrT,SAAzC,YACxE49H,EAAagW,cAAcvgI,cAAcrT,SAAzC,UAA+D3Y,SAAS,OAASu2I,EAAagW,cAAc5jE,UAGhH9iF,KAAKu5O,+BAEP,wG,oDAIA,IAAM7oG,EAAe1wI,KAAKU,YAAYA,YAClCgwI,EAAagW,gBACfhW,EAAagW,cAAc5jE,UAAW,K,2CAMxC,OADqB9iF,KAAKU,YACNy1J,mBAAqB,EAAAh8H,gBAAgBE,oBAAsBr6B,KAAKmmB,gB,6CAIpF,IAAMq6D,GAAaA,EAAbA,6GAEAwmG,EADehnL,KAAKU,YACMsmL,aAahC,OAZIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IASRxmG,I,4CAIP,OAAOxgF,KAAKU,YAAYy1J,mBAAqB,EAAAh8H,gBAAgBE,uB,iCAtD5C8yU,G,qJCHrB,SACA,S,uDAGqBC,E,YACnB,WAAYtuR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,uCACnB,EAAKsnE,eAAgB,EALF,E,qFASnB,IAAM0tD,EAAe1wI,KAAKU,YACpBuyN,EAAoBviF,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IACnE,OAAK0oI,EAAatnD,0BAA4D,oBAAhC6pI,EAAkBnjF,cAG5DY,EAAagW,eAAiBhW,EAAagW,cAAcvgI,eAAiBuqH,EAAagW,cAAcvgI,cAAcrT,SAAzC,WACzE49H,EAAagW,cAAcvgI,cAAcrT,SAAzC,UAA+D3Y,SAAS,Q,6CAO7E,IAAMu2I,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GACEwmG,EAAat2C,EAAas2C,aAOhC,OANIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,I,4CAIP,IAAMtlE,EAASlb,KAAKU,YAAYwa,OAC1Bw1H,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IACnCirN,EAAoB/3M,EAAOsD,MAAM,EAAAixH,eAAeznI,IACtD,OAAO0oI,EAAatnD,0BAA4D,oBAAhC6pI,EAAkBnjF,c,GAzCtE,M,4BAEqBs9N,G,qJCJrB,Q,uDAGqBC,E,YACnB,WAAYvuR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKuV,SAAW,kBAChB,EAAKH,YAAc,6CACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GAIH,OAHKiE,MAAMC,QAAQlE,EAAUmP,SAAV,aACjBnP,EAAUmP,SAAV,UAAkC,CAAC,OAErC,+FAAmBnP,EAAW,IAAI0pW,K,oCAIlC,IAAM38N,EAAe1wI,KAAKU,YAAYA,YACtCgwI,EAAaq2C,kBAAkB,EAAA5sJ,gBAAgBC,YAC/Cs2G,EAAa0xJ,kBAAkB,EAAA3nQ,gBAAgBC,kBAC/C,wG,2CAIA,IAAMg2G,EAAe1wI,KAAKU,YAC1B,OAAOgwI,EAAaylB,mBAAqB,EAAAh8H,gBAAgBC,YAAcs2G,EAAa0lB,mBAAqB,EAAA37H,gBAAgBC,kB,6CAIzH,IAAMg2G,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GAQJ,OANIkwD,EAAagW,eAAiBhW,EAAagW,cAAcvgI,eAAiBuqH,EAAagW,cAAcvgI,cAAcrT,SAAzC,WAC5E0tE,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAWovD,EAAagW,cAAcvgI,cAAcrT,SAAzC,YAGR0tE,I,4CAIP,OAAOxgF,KAAKU,YAAYy1J,mBAAqB,EAAAh8H,gBAAgBE,uB,KA5CjE,Q,mBAEqBgzU,G,4MCDAC,E,YACnB,WAAYxuR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAKsnE,eAAgB,EACrB,EAAKn1E,gBAAiB,EANH,E,uFAUnB,IAAM6iI,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GACEwmG,EAAat2C,EAAas2C,aAOhC,OANIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,M,GAtBX,M,4BAEqB8sR,G,yJCFrB,QACA,Q,uDAEqBC,E,YACnB,WAAYzuR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,wCACnB,EAAKsnE,eAAgB,EACjBlE,IACF,EAAKrjD,eAAiB,GACtB,EAAAJ,yBAAyBj9B,SAAQ,SAAAkpD,GAC/B,EAAK7rB,eAAe6rB,GAAO,SATZ,E,qEAchB3jD,GACHA,EAAUmP,SAAV,cAAuCnP,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,cACjEnP,EAAUmP,SAAV,KAA2B,GAAKnP,EAAUmP,SAAV,cAAoC,GACpE,EAAAuoB,yBAAyB,GAC7B,IAAM4nD,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAuoB,yBAAyB,GAAK,EAAI,EAC7F,sGAAmB13B,EAAW,IAAI3D,KAAKmjF,aAAY,EAAOF,IACxD,EAAqB,IAAfA,EAAmB,WAAa,mB,oCAIxCjjF,KAAKitW,kBACL,wG,gCAGQ/xV,GAMR,0GAAuBA,O,wBAnCNqyV,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAY1uR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAKsnE,eAAgB,EACrB,EAAKF,UAAW,EACZhE,IACF,IAAAtjD,uBAAA,GARiB,E,8EAanBx7B,KAAKitW,kBACL,wG,2CAKA,OADqBjtW,KAAKU,YACNy1J,mBAAqB,EAAAh8H,gBAAgBC,e,wBApBxCozU,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAY3uR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAKH,YAAc,gDACnB,EAAKsnE,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GAPiB,E,8EAYnB,IAAMk1G,EAAe1wI,KAAKU,YAAYA,YACtCgwI,EAAa0xJ,kBAAkB,EAAAjoQ,gBAAgBC,YAC/Cs2G,EAAa0xJ,kBAAkB,EAAA3nQ,gBAAgBE,qBAC/C,wG,2CAIA,IAAM+1G,EAAe1wI,KAAKU,YAC1B,OAAOgwI,EAAaylB,mBAAqB,EAAAh8H,gBAAgBC,YAAcs2G,EAAa0lB,mBAAqB,EAAA37H,gBAAgBE,uB,wBArBxG8yU,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAY5uR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,mBACd,EAAKuV,SAAW,mBAChB,EAAKH,YAAc,8CACnB,EAAKsnE,eAAgB,EACrB,EAAK7D,8BAAgC,gBACjCL,IACF,IAAAtjD,uBAAA,GARiB,E,8EAanB,IAAMk1G,EAAe1wI,KAAKU,YAAYA,YACtCgwI,EAAaq2C,kBAAkB,EAAA5sJ,gBAAgBC,YAC/Cs2G,EAAa0xJ,kBAAkB,EAAA3nQ,gBAAgBE,qBAC/C,wG,2CAIA,IAAM+1G,EAAe1wI,KAAKU,YAC1B,OAAOgwI,EAAaylB,mBAAqB,EAAAh8H,gBAAgBC,YAAcs2G,EAAa0lB,mBAAqB,EAAA37H,gBAAgBE,qB,6CAIzH,IAAM+1G,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GAUJ,OARIkwD,EAAaklB,kBAAoBllB,EAAaklB,iBAAiBzvI,eACjEq6D,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWovD,EAAaklB,iBAAiBzvI,cAAcrT,SAA5C,cACP49H,EAAaklB,iBAAiBzvI,cAAcrT,SAA5C,cACA,CAAC,OAGF0tE,M,wBArCUktR,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAY7uR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAKsnE,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GAPiB,E,8EAYnB,IAAMk1G,EAAe1wI,KAAKU,YAAYA,YACtCgwI,EAAaq2C,kBAAkB,EAAA5sJ,gBAAgBC,YAC/Cs2G,EAAa0xJ,kBAAkB,EAAA3nQ,gBAAgBE,qBAC/C,wG,2CAIA,IAAM+1G,EAAe1wI,KAAKU,YAC1B,OAAOgwI,EAAaylB,mBAAqB,EAAAh8H,gBAAgBC,YAAcs2G,EAAa0lB,mBAAqB,EAAA37H,gBAAgBE,qB,6CAIzH,IAAM+1G,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GASJ,OARIkwD,EAAaklB,kBAAoBllB,EAAaklB,iBAAiBzvI,eACjEq6D,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWovD,EAAaklB,iBAAiBzvI,cAAcrT,SAA5C,cACP49H,EAAaklB,iBAAiBzvI,cAAcrT,SAA5C,cACA,CAAC,OAGF0tE,M,wBAnCUmtR,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAY9uR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAKsnE,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GAPiB,E,8EAYEx7B,KAAKU,YAAYA,YACzBqmL,kBAAkB,EAAA5sJ,gBAAgBK,gBAC/C,wG,2CAKA,OADqBx6B,KAAKU,YACNy1J,mBAAqB,EAAAh8H,gBAAgBK,eAAiBx6B,KAAKmmB,kB,wBApB9DynV,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAY/uR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKuV,SAAW,kBAChB,EAAKH,YAAc,6CACnB,EAAKsnE,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GAPiB,E,8EAYEx7B,KAAKU,YAAYA,YACzBqmL,kBAAkB,EAAA5sJ,gBAAgBG,kBAC/C,wG,2CAKA,OADqBt6B,KAAKU,YACNy1J,mBAAqB,EAAAh8H,gBAAgBG,iBAAmBt6B,KAAKmmB,kB,wBApBhE0nV,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAYhvR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,wCACnB,EAAKsnE,eAAgB,EACrB,EAAKiG,qBAAuB,CAAC,gBACzBnK,IACF,IAAAtjD,uBAAA,GARiB,E,8EAanBx7B,KAAKitW,kBACL,wG,2CAKA,OADqBjtW,KAAKU,YACNy1J,mBAAqB,EAAAh8H,gBAAgBC,e,wBApBxC0zU,G,yJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAYjvR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,wCACnB,EAAKsnE,eAAgB,EACrB,EAAK7D,8BAAgC,gBACjCL,IACF,IAAAtjD,uBAAA,GARiB,E,8EAYnBx7B,KAAKitW,kBACL,wG,2CAKA,OADqBjtW,KAAKU,YACNy1J,mBAAqB,EAAAh8H,gBAAgBC,a,6CAIzD,IAAMs2G,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GAmBJ,OAlBIkwD,EAAa0lB,mBAAqB,EAAA37H,gBAAgBC,gBAChDg2G,EAAa8kB,eAAiB9kB,EAAa8kB,cAAcrvI,eAAiBuqH,EAAa8kB,cAAcrvI,cAAcrT,SAAzC,eAC5E0tE,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAW,CAAC,OAGPovD,EAAa0lB,mBAAqB,EAAA37H,gBAAgBE,oBACvD+1G,EAAaklB,kBAAoBllB,EAAaklB,iBAAiBzvI,eACjEq6D,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWovD,EAAaklB,iBAAiBzvI,cAAcrT,SAA5C,cACP49H,EAAaklB,iBAAiBzvI,cAAcrT,SAA5C,cACA,CAAC,OAKJ0tE,M,wBA3CUutR,G,oJCHrB,SACA,QACA,Q,IACA,S,IACA,S,qDAEahsE,c,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAv+R,aAAaC,UADpB,OAEZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,SAChB,EAAK2zS,cAAgB,UACrB,EAAK9zS,YAAc,6BACnB,EAAKhY,cAAL,kBACA,EAAKmkQ,WAAa,KAClB,EAAK5iH,kBAAoB,CAAC,aAAc,UAR5B,E,qEAWTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACL,IAAK,cACHy/H,EAAkB,aAClBC,YACA,MAEF,IAAK,SACHD,EAAkB,aAClBC,YAIJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,2CAIrE,OAAO,I,wDAIP,OAAOllJ,KAAKyc,WAAW,K,iCAGdvB,GACTlb,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,U,aAzCvClT,GAAK,S,yJCPd,QACA,SAEA,SACA,Q,uDAEqBm9P,E,YACnB,WAAYrmL,IAAS,gGACbA,IADa,SAsCrBkvR,uBAAyB,WACvB,IAEM3gL,EAFa,EAAK3sL,YACQA,YACOwa,OAAOsD,MAAM,EAAAgpP,kBAAkBx/P,IAClEqlL,IACEA,EAAkBu6E,YACpBv6E,EAAkBu6E,UAAU9kL,UAAW,GAErCuqG,EAAkB4gL,aACpB,EAAA5yU,yBAAyBj9B,SAAQ,SAAAkpD,GAC3B+lI,EAAkB4gL,YAAYxyU,eAAe6rB,KAASA,EAAIntD,SAAS,OACrEkzL,EAAkB4gL,YAAYxyU,eAAe6rB,GAAO,WA/C5D,EAAKhhD,OAAS,cACd,EAAKsV,OAASzjB,OAAO2B,SAASC,KAAKI,SAAS,cAAgB,cAAgB,aAC5E,EAAK0hB,SAAW,cAChB,EAAKH,YAAc,kCACnB,EAAKsnE,eAAgB,EANF,E,qFAkCnBhjF,KAAKU,YAAYoiF,UAAW,EAC5B9iF,KAAKymG,gB,6CA4BL,IAAIjmB,GAAaA,EAAbA,6GAGEkwD,EAFe1wI,KAAKU,YACEwa,OACAsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAahC,OAZIt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IASRxmG,I,gCAGCyG,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASi/M,OAAO/gC,gB,iCAtFnCA,G,qJCNrB,QACA,S,uDAEqBD,E,YAEnB,WAAYpmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKsnE,eAAgB,EALF,E,uFASnB,IAAIxC,GAAaA,EAAbA,6GAEEkwD,EADS1wI,KAAKU,YAAYwa,OACJsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAOhC,OANIt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,M,iCArBU0kL,G,yJCHrB,SACA,QACA,SAEA,QACA,S,IACA,QACA,QACA,Q,uDAEqB3iB,G,gBAGnB,cAAc,iGACN,GAAM,EAAO,EAAA/+O,aAAaC,UADpB,OAEZ,EAAK6C,OAAS,eACd,EAAK/C,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAKhY,cAAL,iBACA,EAAKuhJ,kBAAoB,CAAC,SAPd,E,qEAUTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,OACL,IAAK,QACHy/H,EAAkB,YAClBC,EAAmBg+N,EAGvB,OAAOluW,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,O,aAtBhEl9I,GAAK,Q,aADOu6O,E,IA4Bf2rH,E,YACJ,WAAYpvR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAK7N,gBAAiB,EALH,E,uFASnB,IAAI2yE,GAAaA,EAAbA,6GACEtlE,EAASlb,KAAKU,YAAYwa,OAC1Bw1H,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAeA,EAAas2C,aAAe,KAC1DA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGf,IAAMt6C,EAAaxxH,EAAOsD,MAAM,UAAMxW,IAOtC,OANK,IAAAwtB,oBAAmBta,KAAY,EAAAua,gBAAgBC,IAAOg3G,GAAcA,EAAWslE,WAClFxxH,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWorD,EAAWulE,qBAGnBzxH,I,gCAGCyG,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS0yH,WAAW4oC,MAC/BviP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,Q,uKCxE1C,SACA,QACA,Q,IAEA,S,IACA,S,IACA,SACA,Q,mDAEA,IAAM+mR,EAAuB,SAAC31Q,EAAc41Q,GAC1C,OAAO51Q,EAAa1lF,SAAb,eAA0C0lF,EAAa1T,wBAAwB,gBAAiBspR,EAAiBt7V,SAAjB,gBAGnGu7V,EAAwB,SAACC,EAA0B3qW,GACvD,OAAK2qW,IAGD3qW,EAAUmF,oBAAsBwlW,EAAyBC,aAGzD5qW,EAAUmP,SAAV,gBACElL,MAAMC,QAAQlE,EAAUmP,SAAV,YACTnP,EAAUmP,SAAV,WAAiC7S,MAAK,SAAA6jF,GAC3C,OAAOwqR,EAAyB7yV,cAAgB7T,MAAMC,QAAQymW,EAAyB7yV,aAAaqoE,KAC/FwqR,EAAyB7yV,aAAaqoE,GAAY7jF,MAAK,SAAAoD,GAAA,OAAW8qW,EAAqB9qW,EAASM,SAGhG2qW,EAAyBruW,MAAK,SAAAoD,GAAA,OAAW8qW,EAAqB9qW,EAASM,SAM/D6+O,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAh/O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAL,iBAGA,EAAK8qW,YAAc,KACnB,EAAKC,OAAS,KACd,EAAKC,iBAAmB,KACxB,EAAKC,KAAO,KACZ,EAAKC,QAAU,KAZH,E,qEAeTjrW,GAAW,WAEZssI,EAAkB,GAClB4+N,EAAa,EACb3+N,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,QACL,IAAK,SACH,IAAK,IAAIjc,EAAI,EAAGA,GAAKA,EAALA,WAAiBA,IAAK,CACpC,IAAM+5W,EAA2BtuW,KAAK,QAAUzL,GAChD,GAAI85W,EAAsBC,EAA0B3qW,GAAY,CAC9DssI,EAAkB,QAAU17I,EAC5Bs6W,EAAat6W,EACb,OAGJ,MAEF,IAAK,aACH07I,EAAkB,aAClBC,YACA,MAEF,IAAK,qBACHD,EAAkB,mBAClBC,YAIJ,QAAID,IACGjwI,KAAKiwI,KACoB,UAAxBtsI,EAAU6M,WAAiD,WAAxB7M,EAAU6M,WAC/CxQ,KAAKiwI,GAAmB,IAAI,EAAJ,SAAU,EAAM4+N,GACxC7uW,KAAKiwI,GAAiBs+N,UAAY5qW,EAAUmF,mBAE5C9I,KAAKiwI,GAAmB,IAAIC,GAAiB,GAE/ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,2CAMT,OAAO,I,6DAlEFqE,GAAK,U,aADOw6O,G,qJCjCrB,Q,IACA,QACA,Q,uDAEqBssH,E,YACnB,WAAYhwR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKoqE,oBAAqB,EAJP,E,qEAOhBtiF,GAIH,OAHKA,EAAUmP,SAAV,MAA8BnP,EAAUmF,kBAAkB3O,SAAS,eACtEwJ,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,YAEzC,8FAAkB30B,K,qDAIlB3D,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,8CAGT,WAChB5sE,EAASlb,KAAKU,YAAYwa,OAC1B62M,EAAiB72M,EAAOi1F,mBAAkB,GAAM,GAClDhC,EAAmB,GACjB4gQ,EAAoB/uW,KAAKygF,uBACzBuuR,EAAahvW,KAAK2hF,SAAS36E,QAAO,SAAAioW,GAAA,OAAcA,EAAWtuR,gCAAgCouR,MAwBjG,OAvBAh9I,EAAe3zN,SAAQ,SAAAgI,GAChBA,EAASC,cAAeD,EAASwW,aAAakmE,UAAa18E,EAASC,YAAYyM,SAArB,iBAC1D1M,EAASE,SAAW,EAAKA,QAG/B0oW,EAAW5wW,SAAQ,SAAA6wW,GACjB,GAAIA,EAAWn8V,SAAX,iBAA0Cm8V,EAAWn8V,SAAX,gBAAuC3Y,SAAS,aAAc,CAC1G,IAAM63M,EAAY92L,EAAOsD,MAAMqjO,MAAM7vC,UACjCA,IAAcA,EAAUlvH,UAAYkvH,EAAU7rL,eAAiB6rL,EAAU7rL,cAAc0gE,MAAM9nF,MAC3FovG,EAAiBluG,MAAK,SAAAivW,GAAA,OAAuBA,EAAoBp8V,SAApB,iBAC5Co8V,EAAoBp8V,SAApB,gBAAgD3Y,SAAS,iBAC9Dg0G,EAAiBp5G,KAAKk6W,QAEf,aAAQA,EAAWn8V,SAAX,gBAAwC1M,EAASC,YAAYyM,SAArB,mBACtD,aAAQm8V,EAAWn8V,SAAX,KAA6B1M,EAASC,YAAYyM,SAArB,QACpCq7F,EAAiBluG,MAAK,SAAAivW,GACxB,OAAO,aAAQD,EAAWn8V,SAAX,gBAAwCo8V,EAAoBp8V,SAApB,mBAClD,aAAQm8V,EAAWn8V,SAAX,KAA6Bo8V,EAAoBp8V,SAApB,UAE5Cq7F,EAAiBp5G,KAAKk6W,SAIrB9gQ,M,iCAhDU2gQ,G,4MCFAK,E,YACnB,WAAYrwR,EAAS+vR,IAAY,gGACzB/vR,IADyB,OAE/B,EAAK+vR,WAAaA,EAClB,EAAKvoW,OAAS,SAAWuoW,EACzB,EAAKhzV,SAAW,SAAWgzV,EAJI,E,qEAO5BlrW,GAIH,OAHIA,EAAUmP,UAAYnP,EAAUmP,SAAV,aACxB9S,KAAKovW,oBAAqB,IAE5B,+FAAmBzrW,EAAW,IAAIwrW,GAAM,EAAOnvW,KAAK6uW,e,6CAIpD,IAAMruR,GAAaA,EAAbA,6GACN,GAAIxgF,KAAKovW,mBAAoB,CAC3B,IAAM1+N,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAxB,OACrBgiE,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAG5B,OAAOxmG,M,GA1BX,M,4BAEqB2uR,G,qJCFrB,S,IACA,Q,uDAGqBE,E,YACnB,WAAYvwR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,qBAHG,E,qEAMhBlY,GAEH,OADAA,EAAUmP,SAAV,iBAAyCnP,EAAUmP,SAAV,qBACzC,+FAAmBnP,EAAW,IAAI0rW,K,gCAG1Bn0V,GACR,IAAMw1H,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IACpC0oI,GAAiBA,EAAake,YAAele,EAAake,WAAWzoI,gBAAiBuqH,EAAake,WAAW9rE,UAInH,mGAAgB5nE,IAHd,uG,6CAOF,IAAMslE,GAAaA,EAAbA,6GACAtlE,EAASlb,KAAKU,YAAYwa,OAC1Bw1H,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IACnC0kI,EAAaxxH,EAAOsD,MAAM,UAAMxW,IAEhCg/K,EAAat2C,EAAeA,EAAas2C,aAAe,KAmB9D,OAlBIA,GACFxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGXt6C,GAAcA,EAAWslE,WAC3BxxH,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWorD,EAAWulE,qBAGtBvhE,GAAgBA,EAAake,YAAcle,EAAake,WAAWzoI,eACrEq6D,EAAWzrF,KAAK,CACdmsF,SAAU,mBACVI,UAAWovD,EAAake,WAAWzoI,cAAcxiB,UAAUmF,oBAGxD03E,M,GAhDX,M,4BAEqB6uR,G,+ICJrB,SACA,QAEA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEajoG,S,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAA5jQ,aAAaC,UADpB,OAEZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKH,YAAc,8BACnB,EAAKhY,cAAL,mBACA,EAAKs/R,YAAc,KACnB,EAAKi0C,eAAiB,KACtB,EAAKq4B,aAAe,KACpB,EAAKC,gBAAkB,KACvB,EAAKC,cAAgB,KACrB,EAAKzwV,aAAe,GACpB,EAAKkmI,kBAAoB,CAAC,UAAW,kBAAmB,gBAAiB,mBAAoB,kBAZjF,E,qEAgBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,UACHy/H,EAAkB,cAClBC,YACA,MACF,IAAK,kBACHD,EAAkB,iBAClBC,YACA,MACF,IAAK,gBACL,IAAK,eACHD,EAAkB,eAClBC,YACA,MACF,IAAK,mBACL,IAAK,kBACHD,EAAkB,kBAClBC,YACA,MACF,IAAK,iBACHD,EAAkB,gBAClBC,YAGJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,uDA7ChEl9I,GAAK,U,yJCZd,QACA,Q,uDAEqBs/P,E,YACnB,WAAYxoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,sCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GAIH,OAHKA,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,CAAC,EAAAqlB,SAASa,4BAE7C,8FAAkBr1B,K,sCAGJ,WACRk/R,EAAa7iS,KAAKU,YACxB,CAAC,iBAAkB,eAAgB,mBAAmBtC,SAAQ,SAAA0kS,GACxDD,EAAWC,KACbD,EAAWC,GAAShgN,SAAW,EAAKA,iB,iCApBvBwkL,G,qJCHrB,QACA,QACA,Q,uDAEqBD,E,YACnB,WAAYvoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,8CACnB,EAAKE,OAAS,kBACd,EAAKonE,eAAgB,EANF,E,gFAUnB,IAAMggN,EAAchjS,KAAKU,YAAYsiS,YACjCA,IACFA,EAAYlgN,SAAW9iF,KAAK8iF,WAAakgN,EAAYvsI,kB,6CAKvD,IAAI,IAAAjhI,wBAAyB,EAAAC,gBAAgBC,GAAI,CAC/C,IAAMqtQ,EAAgB/iS,KAAKU,YACvB8/E,GAAaA,EAAbA,6GAOJ,OANIuiN,EAAcC,aAAeD,EAAcC,YAAY78Q,eAAiB48Q,EAAcC,YAAY78Q,cAAcrT,SAAxC,WAC1E0tE,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAWyhN,EAAcC,YAAY78Q,cAAcrT,SAAxC,YAGR0tE,EAET,0H,iCA7BiB6mL,G,wLCFAooG,E,YAEnB,WAAY3wR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKsV,OAAS,eACd,EAAKC,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAKsnE,eAAgB,EACrB,EAAKn1E,gBAAiB,EAPH,E,8BAJvB,Q,mBAEqB4hW,G,wLCAAC,E,YAEnB,WAAY5wR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,mBACd,EAAKsV,OAAS,kBACd,EAAKC,SAAW,mBAChB,EAAKH,YAAc,8CACnB,EAAKsnE,eAAgB,EACrB,EAAKn1E,gBAAiB,EAPH,E,8BAJvB,Q,mBAEqB6hW,G,yJCFrB,QACA,Q,uDAEqBC,E,YACnB,WAAY7wR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,iBAChB,EAAKH,YAAc,iDACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GAIH,OAHKA,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,CAAC,EAAAqlB,SAASa,4BAE7C,8FAAkBr1B,O,wBAbDgsW,G,mJCHrB,SACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEa1qG,a,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAzhQ,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKC,cAAL,6BACA,EAAKmY,SAAW,cAChB,EAAKH,YAAc,mCACnB,EAAKqD,aAAe,GAGpB,EAAK6wV,MAAQ,KACb,EAAKC,MAAQ,KACb,EAAKlB,KAAO,KACZ,EAAKmB,OAAS,KACd,EAAKC,OAAS,KACd,EAAKC,MAAQ,KACb,EAAKC,MAAQ,KAGb,EAAKhrN,kBAAoB,CAAC,QAAS,QAAS,OAAQ,SAAU,SAAU,QAAS,SAnBrE,E,qEAqBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,QACHy/H,EAAkB,QAClBC,YACA,MAEF,IAAK,QACHD,EAAkB,QAClBC,YACA,MAEF,IAAK,OACL,IAAK,QACHD,EAAkB,OAClBC,YACA,MAEF,IAAK,SACL,IAAK,UACHD,EAAkB,SAClBC,YACA,MAEF,IAAK,SACHD,EAAkB,SAClBC,YACA,MAEF,IAAK,QACHD,EAAkB,QAClBC,YACA,MAEF,IAAK,QACHD,EAAkB,QAClBC,YAIJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,O,aAjEhEl9I,GAAK,c,4LCXOkoW,E,YAEnB,WAAYpxR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,QACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,mCACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBktR,G,wLCAAC,E,YAEnB,WAAYrxR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,QACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,mCACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBmtR,G,wLCAAC,E,YAEnB,WAAYtxR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,oCACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBotR,G,wLCAAC,E,YAEnB,WAAYvxR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,OACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,kCACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBqtR,G,wLCAAC,E,YAEnB,WAAYxxR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBstR,G,wLCAAC,E,YAEnB,WAAYzxR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,QACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqButR,G,wLCAAC,E,YAEnB,WAAY1xR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,QACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBwtR,G,qJCFrB,QACA,Q,IACA,QACA,Q,uDAEqBC,E,YACnB,WAAY3xR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,oBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,+CACnB,EAAK8zS,cAAgB,cACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKjsB,gBAAiB,EACtB,EAAKm1E,eAAgB,EACjBlE,KACF,IAAAtjD,uBAAA,GACA,EAAKI,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAfA,E,qEAqBhBp4B,GAOH,OANKA,EAAUmP,SAAV,kBACHnP,EAAUmP,SAAV,gBAAwC,CAAC,EAAAqlB,SAASE,KAE/C10B,EAAUmP,SAAV,OACHnP,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,YAEzC,8FAAkB30B,K,sFAQlB,IAAM4qG,EAAevuG,KAAKU,YACtB8/E,GAAaA,EAAbA,6GACJ,IAAI,IAAAhrD,oBAAmB+4E,EAAarzF,UAAY,EAAAua,gBAAgBC,GAAI,CAClE,IAAMg7U,EAAqBniQ,EAAa60L,qCAAqC,eACvEutE,EAAwBpiQ,EAAaqiQ,4BAA4B,eACvE,GAAKF,GAAsBA,EAAmBv2W,SAAS,EAAAg+B,SAASE,KAAQs4U,EAAuB,CAC7F,IAAMrvR,GAAaovR,EAAmBv2W,SAAS,EAAAg+B,SAASE,KAAOs4U,EAAwBA,EAAwBD,EAC/GlwR,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,cAEI15E,MAAMC,QAAQy5E,IAAcA,EAAU,KAAO,EAAAnpD,SAASE,KAC1DmoD,EAAaA,EAAWx5E,QAAO,SAAAo6E,GAAA,MAAoC,eAAvBA,EAAUF,aAG1D,IAAMiiN,EAAiB50L,EAAa60L,qCAAqC70L,EAAaS,YAAa,QAC/Fm0L,GAAkBA,EAAehpS,SAAS,MAC5CqmF,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAW6hN,IAIjB,OAAO3iN,M,wBA5DUiwR,G,2ICLrB,Q,IACA,QACA,Q,uDAEqB/rG,E,YAEnB,WAAY5lL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,oBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,+CACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACrB,EAAKn1E,gBAAiB,EAClBixE,KACF,IAAAtjD,uBAAA,GACA,EAAKI,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAfgB,E,qFAsBnC,IAAMwyE,EAAevuG,KAAKU,YAC1B,OAAQ6tG,EAAa61C,gBACf71C,EAAa61C,cAAcj+H,eAC5BooF,EAAaS,cAAgB,EAAAr1E,aAAaiB,iBACzC2zE,EAAa61C,cAAcj+H,cAAcrT,SAAzC,gBAAqE3Y,SAAS,EAAAg+B,SAASE,Q,wBA5B5EqsO,G,qJCJrB,Q,IACA,QACA,Q,uDAEqBE,E,YACnB,WAAY9lL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,2CACnB,EAAK8zS,cAAgB,UACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMtqH,SAAU,EAAAgxG,OAAOsZ,MAAMrqH,QACpD,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GAViC,E,qEAahC73B,GAOH,OANIiE,MAAMC,QAAQlE,EAAUmP,SAAV,aAA6E,MAAxCnP,EAAUmP,SAAV,WAAiC,KACtFnP,EAAUmP,SAAV,WAAmC,CAAC,EAAAqlB,SAASC,MAE3CxwB,MAAMC,QAAQlE,EAAUmP,SAAV,cAA+E,OAAzCnP,EAAUmP,SAAV,YAAkC,KACxFnP,EAAUmP,SAAV,YAAoC,CAAC,EAAAqlB,SAASC,OAEhD,8FAAkBz0B,O,wBArBDihQ,G,qJCJrB,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,Q,uDAEqB9f,E,YACnB,WAAYhmK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,cACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,yCACnB,EAAK8zS,cAAgB,QACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAEzBglD,IACF,IAAAtjD,uBAAA,GAViC,E,qEAchC73B,GACEA,EAAUmP,SAAV,YACHnP,EAAUmP,SAAV,UAAkC,CAAC,EAAAqlB,SAASM,QAEzC90B,EAAUmP,SAAV,kBAAyCnP,EAAUmP,SAAV,aAE5CnP,EAAUmP,SAAV,gBAAwC,CAAC,EAAAqlB,SAASE,IAClD10B,EAAUmP,SAAV,iBAAyC,EAAA6mB,aAAaiB,gBAEpDj3B,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC3Y,SAAS,OAChFwJ,EAAUmP,SAAV,WAAmC,CAAC,IAAK,IAAK,IAAK,MAOjDlL,MAAMC,QAAQlE,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,UAAgC,KACpFnP,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC,GAAK,GAGtElL,MAAMC,QAAQlE,EAAUmP,SAAV,aAAqCnP,EAAUmP,SAAV,WAAiC,KACtFnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC,GAAK,GAE5EnP,EAAUmP,SAAV,cAAuCnP,EAAUmP,SAAV,KAEnCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GAD7D,EAAAwoB,eAAe,GAEnB,IAAM2nD,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAImhP,GAAK,EAAO7hK,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,yCAIhFptC,EAASouC,EAAY7mE,EAAYpH,GAAgC,WAAlBwuE,EAAkB,uDAAJ,GACvE45P,EAA4C55P,EAA5C45P,sBAAuB35P,EAAqBD,EAArBC,kBAC9B,IAAI,IAAAjvD,wBAAyB,EAAAC,gBAAgBC,KAAO,EAAD,UAAY,CAC7D,IAAMja,EAAezb,KAAK0kF,6BAA6BD,GACjDP,EAA4BlkF,KAAKmkF,wBAAwBnkF,KAAKokF,6BAA6BvuC,EAASp6B,GAAewoE,GACrHI,EAAoBrkF,KAAKskF,+CAA+C85P,GAAyBp+U,KAAKygF,sBAAqB,GAAOyD,GACtIA,EAA0B9lF,SAAQ,SAAAiF,KAC3BA,EAAQyP,SAAR,mBAAyCzP,EAAQyP,SAAR,iBAAqCre,QAC9E4vF,EAAkBxmF,OAAM,SAAAgzW,GAAA,OAAgBA,EAAaltW,UAAUqE,KAAO3E,EAAQM,UAAUqE,QAC3Fq8E,EAAkBtvF,KAAKsO,MAG3B,IAAIytW,EAAe,GACnB,GAAI9wW,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcrT,SAAS8tE,eAAiBh5E,MAAMC,QAAQ7H,KAAKmmB,cAAcrT,SAASi+V,WAAY,4BAC3H,IAD2H,IAC3H,EAD2H,iBAClHxlO,EADkH,QAEnHylO,EAAuBF,EAAan0V,WAAU,SAAAtZ,GAClD,OAAOA,EAAQM,UAAUmF,oBAAsByiI,EAAY5nI,UAAUmF,qBAEnEkoW,GAAwB,EACtBzlO,EAAYz4H,SAAS8tE,eAAkB,EAAKz6D,cAAcrT,SAAS8tE,gBAAkB2qD,EAAYz4H,SAAS8tE,eACzG2qD,EAAYz4H,SAASi+V,WAAc,EAAK5qV,cAAcrT,SAASi+V,UAAU,KAAOxlO,EAAYz4H,SAASi+V,UAAU,IAClHD,EAAan7W,OAAOq7W,EAAsB,EAAGzlO,GAG/CulO,EAAa/7W,KAAKw2I,IAVtB,EAAwBlnD,EAAxB,+CAA2C,IADgF,mFAe3HysR,EAAezsR,EAEjB,OAAOrkF,KAAKglF,2BAA2BnvC,EAASz4B,EAAYpH,EAAc86V,GAE5E,mHAAgCj7T,EAASouC,EAAY7mE,EAAYpH,EAAcwuE,K,iDAG/B,IAAzBysR,EAAyB,wDAC1C1iQ,EAAevuG,KAAKU,YAAYA,YAChCwwW,EAAkC3iQ,EAAaqiQ,4BAA4BriQ,EAAaS,aACxFmiQ,EAAmC5iQ,EAAa60L,qCAAqC70L,EAAaS,aAClGoiQ,GAAU,IAAA9uR,kBAAiBtiF,KAAK2D,UAAUmF,mBAE1CuoW,EAAiCrxW,KAAK8S,SAAL,mBAAsCo+V,IAAoClxW,KAAK8S,SAAL,gBAAiC3Y,SAAS+2W,IACrJI,EAA6BH,IAAqCA,EAAiCh3W,SAASi3W,GAClH,GAAIC,GAAkCC,EAA4B,CAChE,IAAM1kO,EAAcr+B,EAAaxvF,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWioG,EAAaS,eAC9F,GAAI49B,EACF,OAAO,IAAA1D,2BAA0BlpI,KAAM4sI,EAAaqkO,GAGxD,OAAO,O,oCAG8C,IAA3C7hQ,EAA2C,wDAAvBmiQ,EAAuB,wDAC/CjiQ,GAAa,IAAA95E,wBAAyB,EAAAC,gBAAgBC,GACtDhgB,GAAkB,IAAAhB,oBAAmB1U,KAAMovG,GACjD,GAAIE,IAAe55F,EAAiB,CAClC,IAAM64F,EAAevuG,KAAKU,YAAYA,YAOtC,GANKV,KAAK8S,SAAL,kBAAsC9S,KAAK8S,SAAL,iBAAkCre,OAGjEuL,KAAK8S,SAAL,iBAAkC3Y,SAASo0G,EAAaS,eAClET,EAAaS,YAAchvG,KAAK8S,SAAL,iBAAkC,IAH7Dy7F,EAAaS,YAAc,KAKzBuiQ,EACF,OAEF,IAAMzvR,EAAe9hF,KAAKwxW,2BAC1Bx5W,QAAQ4B,IAAI,eAAgBkoF,GAExBA,IACF,IAAAwE,iBAAgBxE,GAAc,EAAOstB,GAAY,GAmBrD,IADA,qGAAkBA,GACdE,IAAe55F,EAAiB,CAClC,IAAM64F,EAAevuG,KAAKU,YAAYA,YACtC6tG,EAAas6P,uB,yCAIE7xG,GACS,WAAtBA,GAGFh3P,KAAKU,YAAYA,YAAY0jJ,cAAcqtN,yBAAyB,OAAQzxW,KAAK8S,SAAL,WAA8B9S,KAAK8S,SAAL,WAA4B,GAAK,Q,+CAItH4oM,EAAYxlM,GACnC,IACMuyE,GADoBpE,EAApBA,sIAAyErkF,KAAKygF,wBACzCz5E,QAAO,SAAC3D,GACjD,OAAOA,EAAQyP,SAAS4oM,IAAer4M,EAAQyP,SAAS4oM,GAAYvhN,SAAS+b,MAE/E,KAAK,EAAD,8GAA8BuyE,GAAmB,CACnDzoF,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GAAA,OAAYA,EAAQM,UAAU4M,YAAYpW,SAAS,kBAAkBsuF,EAAiB,GACjI,IAAMsgR,EAA+BtgR,EAAiBzhF,QAAO,SAAA3D,GAC3D,OAAOA,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEhD6F,KAAKgnF,mBAAqB+hR,EAA6B,M,iDAKzD,IAAMvpP,EAAex/G,KAAKU,YAAY+nH,OAClC4oM,EAAa,GACjB,GAAI7xM,GAAgBA,EAAar5F,cAAe,CAC9C,IAAMurV,EAAiBlyP,EAAar5F,cAAcxiB,UAAUs8E,0BAA4B,EAAA9nD,SAASS,YAC9F4mF,EAAar5F,cAAcxiB,UAAUs8E,0BAA4B,EAAA9nD,SAASW,kBACzE,EAAAX,SAASU,cACT,EAAAV,SAASC,IACTs5U,IACFrgD,EAAA,WAA2BqgD,GAG/B,OAAOrgD,I,6CAImC,IAAvBwB,EAAuB,wDACpCryO,GAAaA,EAAbA,6GAQA+tB,EAAevuG,KAAKU,YAC1B,IAAI,IAAA80B,oBAAmB+4E,EAAarzF,UAAY,EAAAua,gBAAgBC,IAC1D64E,EAAaS,cAAgB6jN,EAAe,CAC9CryO,EAAWzrF,KAAK,CACdmsF,SAAU,mBACVI,UAAWitB,EAAaS,cAE1B,IAAM2iQ,EAAuBpjQ,EAAaqiQ,4BAA4BriQ,EAAaS,aAC7E4iQ,EAAyBrjQ,EAAa60L,qCAAqC70L,EAAaS,aACxFm0L,EAAiB50L,EAAa60L,qCAAqC70L,EAAaS,YAAa,QAC/F2iQ,GACFnxR,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWswR,EAAuBz3W,SAAS,EAAAg+B,SAASE,IAAM,EAAAF,SAASE,GAAKs5U,IAGxEC,GACFpxR,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWswR,IAGXzuE,GAAkBA,EAAehpS,SAAS,OAASo0G,EAAaW,kBAClE1uB,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAW6hN,IAKnB,OAAO3iN,I,mDAGoD,IAAlC3iE,EAAkC,uDAApB7d,KAAKmmB,cACxC66D,GAAoBA,EAApBA,6GASJ,MARA,CAAC,YAAa,cAAc5iF,SAAQ,SAAC8iF,GAC/BrjE,EAAY/K,SAASouE,IACvBF,EAAkBjsF,KAAK,CACrBmsF,WACAI,UAAWzjE,EAAY/K,SAASouE,QAI/BF,I,0CAGWmU,GAClB,OAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,IACtB11B,KAAKU,YACLsuG,aAEhB,IAAAjW,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,MAC1D,IAAAy9D,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,Q,iCAjP5CwpN,G,qJCVrB,QACA,QACA,QACA,QACA,Q,IACA,MACA,Q,uDAEqB+sH,E,YACnB,WAAY/yR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,SAuHrC+sD,gCAAkC,SAACimO,GAAsB,MAMnD,EAAKC,mBAJPC,EAFqD,EAErDA,sBACAC,EAHqD,EAGrDA,sBACAC,EAJqD,EAIrDA,mBACAC,EALqD,EAKrDA,eAMIC,EAAkBD,EAAe19W,OACnC09W,EACAD,EAAmBz9W,OACjBy9W,EACAD,EAAsBx9W,OACpBw9W,EACAD,EACJK,EAAiB,KACrB,GAAIP,EAAmB,CACrB,IACMvjQ,EADe,EAAK7tG,YACQA,YAC5BksI,EAAcr+B,EAAaxvF,aAAajT,MAAK,SAAAkT,GAAA,OAAWA,EAAQ1Y,SAAWioG,EAAaS,eAC1F49B,GAAeA,EAAYzmH,eAAiB2rV,EAAkBh/V,SAAlB,kBAC9Cu/V,EAAiBD,EAAgBtmW,MAAK,SAAA6T,GACpC,OAAOA,EAAQnE,KAAK1I,SAAb,gBAAyC3Y,UAAS,IAAAmoF,kBAAiBsqD,EAAYzmH,cAAcxiB,UAAUmF,wBAG7GupW,IACHA,EAAiBD,EAAgBtmW,MAAK,SAAA6T,GAAA,OAAWA,EAAQnE,KAAK6jE,iBAAmByyR,EAAkBzyR,mBAOvG,OAJKgzR,IACHA,EAAiBD,EAAgB,IAEnCp6W,QAAQ4B,IAAI,iBAAkBy4W,GACvBA,EAAiBA,EAAe72V,KAAO,MAzJ9C,EAAKynE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAK2zS,cAAgB,UACrB,EAAK9zS,YAAc,2CACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKstG,4BAA6B,EAE9BtoD,IACF,IAAAtjD,uBAAA,GAXiC,E,qEAehC73B,GACH,GAAIA,EAAUkS,gBAAkBjO,MAAMC,QAAQlE,EAAUkS,eAAe,KAAQ,CAC7E,IAAMy8V,EAAkB3uW,EAAUkS,eAAe,IAAM8G,WAAU,SAAAi0E,GAAA,OAAmC,QAAlBA,KAC9E0hR,GAAmB,IAErB3uW,EAAUkS,eAAe,IAAM1b,SAAS,MACpCwJ,EAAUkS,eAAe,IAAMlgB,OAAO28W,EAAiB,GACvD3uW,EAAUkS,eAAe,IAAMlgB,OAAO28W,EAAiB,EAAG,OAG7D3uW,EAAUmP,SAAV,YACHnP,EAAUmP,SAAV,UAAkC,CAAC,EAAAqlB,SAASM,QAKzC90B,EAAUmP,SAAV,WAaMnP,EAAUmP,SAAV,WAAiC3Y,SAAS,OACnDwJ,EAAUmP,SAAV,WAAmC,CAAC,IAAK,IAAK,IAAK,MAb/CnP,EAAU2M,kBAAkBnW,SAAS,UACvCwJ,EAAUmP,SAAV,WAAmC,CAAC,KAC3BnP,EAAU2M,kBAAkBnW,SAAS,eAC9CwJ,EAAUmP,SAAV,WAAmC,CAAC,KAC3BnP,EAAU2M,kBAAkBnW,SAAS,aAC9CwJ,EAAUmP,SAAV,WAAmC,CAAC,KAEpC9a,QAAQ4B,IAAI,uCAAwC+J,EAAU2M,mBAQ9D1I,MAAMC,QAAQlE,EAAUmP,SAAV,SAAiCnP,EAAUmP,SAAV,OAA6B,KAC9EnP,EAAUmP,SAAV,QAAgCnP,EAAUmP,SAAV,OAA6B,IAE3DnP,EAAU++E,eAEP/+E,EAAUmP,SAAV,aACClL,MAAMC,QAAQlE,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,UAAgC,GACzC,MAAvCnP,EAAUmP,SAAV,UAAgC,GAClCnP,EAAUmP,SAAV,WAAmC,CAAC,KACY,MAAvCnP,EAAUmP,SAAV,UAAgC,KACzCnP,EAAUmP,SAAV,WAAmC,CAAC,MAGtCnP,EAAUmP,SAAV,WAAmC,CAAC,MAIpCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAg+B,SAASO,QACpD,CAAC,KAAM,IAAK,IAAK,IAAK,KAAKt6B,SAAQ,SAAAi6F,GAC5B10F,EAAUmP,SAAV,UAAgC3Y,SAASk+F,IAC5C10F,EAAUmP,SAAV,UAAgC/d,KAAKsjG,MAIvC10F,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAg+B,SAASQ,cAAgBh1B,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAg+B,SAASO,QACtH/0B,EAAUmP,SAAV,UAAgC/d,KAAK,EAAAojC,SAASO,QAMlD/0B,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GACnG,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAIkuW,GAAa,EAAO5uR,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,yCAGxF,WACXu8B,EAAex/G,KAAKU,YACpB6tG,EAAeiR,EAAa9+G,YAC5B+2G,EAAalJ,EAAan3D,KAG1B46T,EAFSzjQ,EAAarzF,OACOo9E,sBAAsB,CAAC98E,KAAMi8F,IACdzwG,QAAO,SAAA2Y,GACvD,OAAO6/F,EAAa53B,2BAA2B,GAAM/pF,OAAM,SAAAujF,GAAA,OAAazhE,EAAQnE,KAAKspE,wBAAwB1D,EAAUF,SAAUE,EAAUE,iBAEvI2wR,EAAwBD,EAAsBhrW,QAAO,SAAA2Y,GACzD,OAAK4uF,EAAaS,YAGXrvF,EAAQnE,KAAKspE,wBAAwB,mBAAoBypB,EAAaS,aAFpErvF,EAAQnE,KAAK1I,SAAb,WAAsC6M,EAAQnE,KAAK1I,SAAb,UAAmC3Y,SAAS,SAItF6b,EAAgB,UAAM7T,WAAW4S,YAAjCiB,aACDu8V,EAAqBhkQ,EAAan3D,MAAQm3D,EAAan3D,KAAKjxB,cAC9DooF,EAAan3D,KAAKjxB,cAAczN,kBAAkB1C,GAClD,GACEw8V,EAA4BjkQ,EAAan3D,MAAQm3D,EAAan3D,KAAKjxB,cACrEooF,EAAan3D,KAAKjxB,cAAco8D,2BAChC,GACE2vR,EAAsBK,EAA6CN,EAAsBjrW,QAAO,SAAA2Y,GACpG,OAAOA,EAAQnE,KAAK9C,kBAAkB1C,KAAkBu8V,KADTN,EAG3CE,EAAkBK,EAAiDN,EAAmBlrW,QAAO,SAAA2Y,GACjG,OAAOA,EAAQnE,KAAK+mE,6BAA+BiwR,KADDN,EAGpD,MAAO,CACLF,wBACAC,wBACAC,qBACAC,oB,oCA2C8B,IAAtBx9V,EAAsB,wDAC1B6qG,EAAex/G,KAAKU,YACpB6tG,EAAeiR,EAAa9+G,YAC5B+2G,EAAalJ,EAAan3D,KAEhC,IAAKqgE,EAAWtxF,gBAAkBsxF,EAAWtxF,cAAcw6D,gCAAgC6+B,EAAa53B,2BAA2B5nF,OAAQ,CACzI,IAAMqyW,EAAiBryW,KAAK6rI,gCAAgCp0B,EAAWtxF,eACnEksV,IACFr6W,QAAQ4B,IAAI,sBAAuBy4W,IACnC,IAAA/rR,iBAAgB+rR,GAAgB,EAAO19V,GAAc,KAIzD,qGAAkBA,K,+CAIlB,IAAM8iG,EAAaz3G,KAAKU,YAAY02C,KAChCi6Q,EAAa,GACjB,GAAI55M,GAAcA,EAAWtxF,cAAe,CAC1C,IAAMmrS,EAAW75M,EAAWtxF,cAAcrT,SAAzB,UACbw+S,IACFD,EAAA,UAA0BzpT,MAAMC,QAAQypT,GAAYA,EAAS,GAAKA,GAMpE,IAAMmhD,EAAiBh7P,EAAWtxF,cAAcrT,SAAzB,YACnB2/V,IAAoB,IAAAj9U,wBAAyB,EAAAC,gBAAgBE,OAAS88U,EAAet4W,SAAS,OAChGk3T,EAAA,WAA2BohD,GAG/B,OAAOphD,I,6CAGmC,IAAvBwB,EAAuB,wDAMpCryO,GAAaA,EAAbA,6GACAgxO,EAAsBxxT,KAAKyxT,yBACjC,CAAC,YAAa,cAAcrzT,SAAQ,SAAA8iF,GAClC,KAAM2xO,IAAmB,IAAAr9R,wBAAyB,EAAAC,gBAAgBE,OAAuB,cAAburD,IAA8BswO,EAAoBtwO,MAC1G,eAAbA,GAA6BswO,EAAoBtwO,GAAU/mF,SAAS,MAAQq3T,EAAA,WAAoCA,EAAA,UAAiCr3T,SAAS,MAAO,CACtK,GAAiB,cAAb+mF,GAA+D,MAAlCswO,EAAoBtwO,GACnD,OAEFV,EAAWzrF,KAAK,CACdmsF,WACAI,UAAWkwO,EAAoBtwO,SAUrC,IAAMqtB,EAAevuG,KAAKU,YACpByiS,EAAiB50L,EAAa60L,qCAAqC70L,EAAaS,YAAa,QAcnG,GAbIm0L,GAAkBA,EAAehpS,SAAS,OAASo0G,EAAaW,kBAClE1uB,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAW6hN,IAUX50L,EAAan3D,MAAQm3D,EAAan3D,KAAKjxB,cAAe,CACxD,IAAMusV,EAAWnkQ,EAAan3D,KAAKjxB,cAAcrT,SAAhC,SACb4/V,GACFlyR,EAAWzrF,KAAK,CACdmsF,SAAU,WACVI,UAAWitB,EAAan3D,KAAKjxB,cAAcrT,SAAhC,WAGf,IAAM6/V,EAAapkQ,EAAan3D,KAAKjxB,cAAcrT,SAAhC,WACnB,GAAI6/V,IACFnyR,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWitB,EAAan3D,KAAKjxB,cAAcrT,SAAhC,aAERlL,MAAMC,QAAQ8qW,IAAiC,MAAlBA,EAAW,IAA8B,MAAfA,GAAoB,CAC9E,IAAMC,EAAarkQ,EAAan3D,KAAKjxB,cAAcrT,SAAhC,WACf8/V,GACFpyR,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWitB,EAAan3D,KAAKjxB,cAAcrT,SAAhC,cAOrB,OAAO0tE,I,mDAGoD,IAAlC3iE,EAAkC,uDAApB7d,KAAKmmB,cACxC66D,EAAoBhhF,KAAKygF,uBAgB7B,OAfAO,EAAoBA,EAAkBl5E,KAAI,SAAAs5E,GACxC,MAA4B,cAAvBA,EAAUF,UAAmD,eAAvBE,EAAUF,WAA8BrjE,EAAY/K,SAASsuE,EAAUF,UAM3GE,EALE,CACLF,SAAUE,EAAUF,SACpBI,UAAWzjE,EAAY/K,SAASsuE,EAAUF,cAK5CrjE,EAAY/K,SAAZ,YACFkuE,EAAkBjsF,KAAK,CACrBmsF,SAAU,aACVI,UAAWzjE,EAAY/K,SAAZ,aAGRkuE,I,6CAGc,WACrB,OAAOhhF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEosF,wBAAwB,aAAc,EAAKpkF,YAAYwiS,eAAe,S,yCAGxFlsC,GACS,SAAtBA,EACFh3P,KAAKU,YAAYA,YAAY02C,KAAKq6T,yBAAyB,YAAa,EAAAt5U,SAASM,OAEjFz4B,KAAKU,YAAYA,YAAY0jJ,cAAcqtN,yBAAyB,OAAQzxW,KAAK8S,SAAL,WAA8B9S,KAAK8S,SAAL,WAA4B,GAAK,Q,0CAI3HqiF,GAClB,OAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,IACpC,IAAAqjE,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,KAE1D,IAAAy9D,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,MAC1D,IAAAy9D,oBAAmB5D,EAAc,EAAG,IAAK,EAAA75D,eAAe,Q,iCA9S5Cu2U,G,qJCRrB,QACA,QACA,Q,uDAEqBgB,E,YAEnB,WAAY/zR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,0CACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAEzBglD,IACF,IAAAtjD,uBAAA,GARiB,E,gFAanBx7B,KAAK2oW,yB,2CAmBL,IAAMp6P,EAAevuG,KAAKU,YAC1B,SAAQ6tG,EAAaS,cAAgB,EAAAr1E,aAAaiB,gBAAoB2zE,EAAa61C,eAAkB71C,EAAa61C,cAAcj+H,iBAC5HooF,EAAaS,cAAgB,EAAAr1E,aAAamB,kBAAsByzE,EAAak2C,iBAAoBl2C,EAAak2C,gBAAgBt+H,iBAC9HooF,EAAaS,cAAgB,EAAAr1E,aAAakB,gBAAoB0zE,EAAau2C,eAAkBv2C,EAAau2C,cAAc3+H,kB,6CAkB5H,IAAMq6D,GAAaA,EAAbA,6GACA+tB,EAAevuG,KAAKU,YACpByiS,EAAiB50L,EAAa60L,qCAAqC70L,EAAaS,YAAa,QAQnG,OAPIm0L,GAAkBA,EAAehpS,SAAS,MAC5CqmF,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAW6hN,IAIR3iN,I,0CAGW2U,GAClB,IAAMoZ,EAAevuG,KAAKU,YAC1B,OAAO6tG,EAAaS,aAAgBT,EAAaS,cAAgB,EAAAr1E,aAAaiB,gBAAoBu6D,EAAavU,gBAAkB,EAAAtlD,eAAe,O,iCAtE/Hu3U,G,qJCJrB,QACA,QACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYh0R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,mBACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,8CACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiB,E,gFAanBx7B,KAAK2oW,uBACL,IAAMp6P,EAAevuG,KAAKU,YACtB6tG,GAAgBA,EAAaq2C,aAC/Br2C,EAAaq2C,WAAW9hE,SAAW9iF,KAAK8iF,WAAayrB,EAAaq2C,WAAW6R,kB,kCAIrE9hJ,GACV,IAAM45F,EAAevuG,KAAKU,YAAYA,YACtC6tG,EAAaS,YAAc,EAAAr1E,aAAamB,kBACxC,qGAAkBnmB,IAClB,IAAA22H,0BAAyBtrI,MACzBuuG,EAAas6P,sB,2CAKb,OADqB7oW,KAAKU,YACNsuG,cAAgB,EAAAr1E,aAAamB,oBAAsB96B,KAAKmmB,gB,0CAe1DgvE,GAClB,OAAOn1F,KAAKU,YAAYsuG,cAAgB,EAAAr1E,aAAamB,kBAAqBq6D,EAAavU,gBAAkB,EAAAtlD,eAAe,O,iCAhDvGw3U,G,qJCLrB,QACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYj0R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACrB,EAAKn1E,gBAAiB,EAPH,E,qFAWnB,IAAM0gG,EAAevuG,KAAKU,YAC1B,OAAQ6tG,EAAa61C,gBACf71C,EAAa61C,cAAcj+H,eAC5BooF,EAAaS,cAAgB,EAAAr1E,aAAaiB,gBACzC2zE,EAAa61C,cAAc3oH,gBAAkB8yE,EAAa61C,cAAc3oH,eAA3B,GAC7Cz7B,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,0B,6CAIrF,IAAMD,GAAaA,EAAbA,6GACAmxR,EAAuB3xW,KAAKU,YAAYkwW,4BAA4B,kBAO1E,OANIe,GACFnxR,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWqwR,IAGRnxR,I,4CAIP,OAAOxgF,KAAKU,YAAYsuG,cAAgB,EAAAr1E,aAAaiB,mB,iCAlCpCm4U,G,qJCJrB,QACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYl0R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,gDACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiB,E,gFAanBx7B,KAAK2oW,yB,kCAGKh0V,GACV,IAAM45F,EAAevuG,KAAKU,YAAYA,YACtC6tG,EAAaS,YAAc,EAAAr1E,aAAaiB,gBACxC,qGAAkBjmB,GAClB45F,EAAas6P,sB,2CAIb,IAAMt6P,EAAevuG,KAAKU,YAC1B,OAAQ6tG,EAAa61C,gBAAkB71C,EAAa61C,cAAcj+H,eAAiBooF,EAAaS,cAAgB,EAAAr1E,aAAaiB,iB,6CAI7H,IAAM4lD,GAAaA,EAAbA,6GACAmxR,EAAuB3xW,KAAKU,YAAYkwW,4BAA4B,EAAAj3U,aAAaiB,gBAOvF,OANI+2U,GACFnxR,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWqwR,IAGRnxR,I,4CAIP,OAAOxgF,KAAKU,YAAYsuG,cAAgB,EAAAr1E,aAAaiB,mB,iCA3CpCo4U,G,qJCJrB,QACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYn0R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,sBACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,iDACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiB,E,gFAanBx7B,KAAK2oW,yB,kCAGKh0V,GACV,IAAM45F,EAAevuG,KAAKU,YAAYA,YACtC6tG,EAAaS,YAAc,EAAAr1E,aAAamB,kBACxC,qGAAkBnmB,GAClB45F,EAAas6P,sB,2CAIb,IAAMt6P,EAAevuG,KAAKU,YAC1B,OAAQ6tG,EAAak2C,kBAAoBl2C,EAAak2C,gBAAgBt+H,eAAiBooF,EAAaS,cAAgB,EAAAr1E,aAAamB,mB,6CAIjI,IAAM0lD,GAAaA,EAAbA,6GACAkwR,EAAqB1wW,KAAKU,YAAYkwW,4BAA4B,oBAOxE,OANIF,GACFlwR,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWovR,IAGRlwR,I,4CAIP,OAAOxgF,KAAKU,YAAYsuG,cAAgB,EAAAr1E,aAAamB,qB,iCA3CpCm4U,G,qJCJrB,QACA,QACA,QACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYp0R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiB,E,gFAanBx7B,KAAK2oW,yB,2CAIL,IAAMp6P,EAAevuG,KAAKU,YAC1B,OAAQ6tG,EAAa61C,gBAAkB71C,EAAa61C,cAAcj+H,eAAiBooF,EAAaS,cAAgB,EAAAr1E,aAAaiB,iB,6CAI7H,IAAM4lD,GAAaA,EAAbA,6GACA+tB,EAAevuG,KAAKU,YACpBixW,EAAuBpjQ,EAAaqiQ,4BAA4B,kBAClEe,GACFnxR,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAWqwR,IAGf,IAAMxuE,EAAiB50L,EAAa60L,qCAAqC,iBAAkB,QAO3F,OANID,GAAkBA,EAAehpS,SAAS,MAC5CqmF,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAW6hN,IAGR3iN,I,0CAGW2U,GAClB,OAAI,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,GACpCy/D,EAAavU,gBAAkB,EAAAtlD,eAAe,KAAM,IAAAy9D,oBAAmB5D,EAAc,EAAG,KAE1Fn1F,KAAKU,YAAYsuG,cAAgB,EAAAr1E,aAAaiB,mB,iCA/CpCs4U,G,qJCNrB,QACA,QACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYr0R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,4CACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiB,E,gFAanBx7B,KAAK2oW,yB,kCAGKh0V,GACV,IAAM45F,EAAevuG,KAAKU,YAAYA,YACtC6tG,EAAaS,YAAc,EAAAr1E,aAAakB,gBACxC,qGAAkBlmB,IAClB,IAAA22H,0BAAyBtrI,MACzBuuG,EAAas6P,sB,2CAKb,OADqB7oW,KAAKU,YACNsuG,cAAgB,EAAAr1E,aAAakB,kBAAoB76B,KAAKmmB,gB,0CAexDgvE,GAClB,OAAOn1F,KAAKU,YAAYsuG,cAAgB,EAAAr1E,aAAakB,gBAAmBs6D,EAAavU,gBAAkB,EAAAtlD,eAAe,O,iCA5CrG63U,G,qJCLrB,QACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYt0R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiB,E,gFAanBx7B,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,6CAIxC,IAAMtC,GAAaA,EAAbA,6GACA+tB,EAAevuG,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWitB,EAAa20L,eAAeljS,QAElCwgF,M,iCAzBU4yR,G,qJCJrB,QACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYv0R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACjBlE,IACF,IAAAtjD,uBAAA,GARiB,E,gFAanBx7B,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,6CAIxC,IAAMtC,GAAaA,EAAbA,6GACA+tB,EAAevuG,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWitB,EAAa20L,eAAeljS,QAElCwgF,M,iCAzBU6yR,G,2ICJrB,OACA,SACA,Q,IACA,OACA,QACA,S,IACA,O,IACA,Q,uDAEqBC,G,aAGnB,WAAY15T,IAAO,kCACjB55C,KAAKm9R,QAAUvjP,E,kEAmFIyS,EAAaknT,GAChC,IAAMC,EAAgC,UAAiBl8N,iCAAiC,CAACi8N,IAInFE,GAAuB,IAAAn2O,kBAAiBjxE,EAAYoF,KAAMpF,EAAYkM,IAExE61R,EAAmB,KACjBslB,EAAqCrnT,EAAYoF,KAAKwvG,yBAmB5D,OAlBI,IAAAyvC,qBAAoB+iK,GAElBD,EAA8B,GAAGp5V,IAAMs5V,EAAmCt5V,EAC5Eg0U,EAAmBolB,EAA8B,GAExCA,EAA8B,GAAGp5V,IAAMs5V,EAAmCt5V,IACnFg0U,EAAmBolB,EAA8B,KAE1C,IAAA/iK,uBAAsBgjK,KAE3BD,EAA8B,GAAGn5V,IAAMq5V,EAAmCr5V,EAC5E+zU,EAAmBolB,EAA8B,GAExCA,EAA8B,GAAGn5V,IAAMq5V,EAAmCr5V,IACnF+zU,EAAmBolB,EAA8B,KAI9CplB,I,0DAM2B/hS,GAClC,IAAIxD,EAAQ,EACRC,EAAQ,EACNm0G,EAA6B,UAAiB3lB,iCAAiC,CAACt3I,KAAKm9R,UACrFs2E,GAAuB,IAAAn2O,kBAAiBjxE,EAAYoF,KAAMpF,EAAYkM,IAO5E,OANI,IAAAm4I,qBAAoB+iK,GACtB5qT,GAAQ,IAAAyoB,kBAAiB2rF,EAA2B,GAAIA,EAA2B,KAC1E,IAAAwzC,uBAAsBgjK,KAC/B3qT,GAAQ,IAAAwoB,kBAAiB2rF,EAA2B,GAAIA,EAA2B,KAG9E,CAACp0G,EAAOC,K,4CAMK6qT,EAAe9qT,EAAOC,GAC1C6qT,EAAcv1W,SAAQ,SAAAw7C,GACpB,IAAMg6T,EAAkBh6T,EAAMoR,cACxB6oT,EAAc,CAACz5V,EAAGw5V,EAAgBx5V,EAAIyuC,EAAOxuC,EAAGu5V,EAAgBv5V,EAAIyuC,GAC1ElP,EAAMiR,YAAYgpT,GAClBj6T,EAAMkgG,cAAc4pB,eAAemwM,Q,mDAOVlmL,EAAathI,GAExCrsD,KAAKm9R,QAAQtyO,YAAY8iI,GACzB3tL,KAAKm9R,QAAQrjJ,cAAc4pB,eAAeiqB,GAG1C,IAAM8lL,GAAuB,IAAAn2O,kBAAiBjxE,EAAYoF,KAAMpF,EAAYkM,IAEtEu7S,GAAe,IAAArjK,uBAAsBgjK,GACrCM,GAAa,IAAArjK,qBAAoB+iK,GAIvC,GAAoC,MAHfpnT,EAAY3rD,YAGhBm2I,gBAA0Bi9N,EAAc,CACvD,IAEIE,EAFe,KACYh0W,KAAKm9R,QAAQtmJ,eAAiB,IAAO,KAAO,IAE3E72I,KAAKm9R,QAAQ5pP,OAAOygU,EAAiBh0W,KAAKm9R,QAAQ1mJ,UAAUC,MAAM,QAQ3B,IAAhC12I,KAAKm9R,QAAQtmJ,gBAAwBi9N,EAC5C9zW,KAAKm9R,QAAQ5pP,OAAO,GAAIvzC,KAAKm9R,QAAQ1mJ,UAAUC,MAAM,GAGd,KAAhC12I,KAAKm9R,QAAQtmJ,gBAAyBk9N,GAC7C/zW,KAAKm9R,QAAQ5pP,QAAQ,GAAIvzC,KAAKm9R,QAAQ1mJ,UAAUC,MAAM,GAIxD,IAAI,IAAA+5D,uBAAsBgjK,GAAuB,CAE/C,IAAM/hS,EAAMtnE,KAAKsnE,IAAI1xE,KAAKm9R,QAAQtmJ,eAAiBzsI,KAAKqnE,GAAK,KACvDE,EAAMvnE,KAAKunE,IAAI3xE,KAAKm9R,QAAQtmJ,eAAiBzsI,KAAKqnE,GAAK,KACvDwiS,EAAgBj0W,KAAKm9R,QAAQ9mJ,WAC7B69N,EAAiBl0W,KAAKm9R,QAAQlnJ,YAO9Bk+N,EAJUxmL,EAAYvzK,EAAI65V,EAAgB,GAIlBA,EAAgB,EAAIviS,EAAMwiS,EAAiB,EAAIviS,GACvEyiS,EAJUzmL,EAAYtzK,EAAI65V,EAAiB,GAInBD,EAAgB,EAAItiS,EAAMuiS,EAAiB,EAAIxiS,GAG7E1xE,KAAKm9R,QAAQtyO,YAAY,CACvBzwC,EAAG+5V,EACH95V,EAAG+5V,IAELp0W,KAAKm9R,QAAQrjJ,cAAc4pB,eAAe,CACxCtpJ,EAAG+5V,EACH95V,EAAG+5V,O,8CAWejhU,EAAQkhU,GAC9B,IAAMC,EAAe,GAWrB,OATAnhU,EAAO/0C,SAAQ,SAAAw7C,GACb,IACM26T,EADyB,UAAiBj9N,iCAAiC,CAAC19F,IACjC,GAE7C26T,EAAkBn6V,GAAKi6V,EAAkBj6V,GAAKm6V,EAAkBl6V,GAAKg6V,EAAkBh6V,GACzFi6V,EAAav/W,KAAK6kD,MAIf06T,M,kCA7NT3vM,0BAA4B,WAE1B,IAAMj4G,EAAe,UAAUJ,gBAAgB,CAAC,EAAK6wO,QAAQn1R,KAE7D,GAAI0kD,EAAaj4D,OAAS,EAAG,CAE3B,IAAM43D,EAAc,EAAKF,eAAeO,GAClC8nT,EAAenoT,EAAY3rD,YAEjC,IAAI,IAAAs/H,uBAAsB,EAAKm9J,QAASq3E,GAAe,CACrD,IAAM7mL,EAAc,EAAK8mL,qBAAqBpoT,EAAamoT,GAE3D,GAAI7mL,EAAa,CAEf,EAAK+mL,6BAA6B/mL,EAAathI,GAG/C,UAAqBjP,mBAAmByxL,0BAA0B,EAAKsuD,QAASq3E,GAGhF,IAAMb,EAAgB,EAAKgB,iBAAiBH,EAAc7mL,GAR3C,EAYQ,EAAKinL,oCAAoCvoT,GAZjD,qBAYRxD,EAZQ,KAYDC,EAZC,KAmBf,OANA,EAAK+rT,sBAAsBlB,EAAe9qT,EAAOC,GAEjD,EAAKq0O,QAAQ1yH,aACb,UAA8BhiH,4BAC9B,UAAqBrL,mBAAmBsL,2BAA0B,GAClE,UAAU4D,mBACH,M,KAUfH,eAAiB,SAACO,GAChB,IAAMooT,EAAqBpoT,EAAa5kD,KAAI,SAAAinD,GAAA,OAAQA,EAAKruD,eACnDq0W,GAAuB,IAAAt1J,0BAAyBq1J,EAAmBhtW,KAAI,SAAA8xC,GAAA,OAASA,EAAMoR,kBACtFuoT,EAAeuB,EAAmBhpW,MAAK,SAAA8tC,GAC3C,OAAOA,EAAMoR,gBAAkB+pT,GAC1Bn7T,EAAM5xC,KAAO,EAAKm1R,QAAQn1R,MAGjC,OAAO0kD,EAAa5gD,MAAK,SAAAijD,GAAA,OAAQA,EAAKruD,YAAYsH,KAAOurW,EAAavrW,O,KAQxE2sW,iBAAmB,SAACH,EAAcxoT,GAChC,IAAM6tF,EAAoB26N,EAAa16N,cAAcC,uBACrD,GAAIF,QAA+D,CACjE,IAAMrB,EAAgB,UAAqBp7F,mBAAmBw8F,iBAAiBC,GAC/E,GAAIrB,EAAe,CACjB,IAAMw8N,EAAkCx8N,EAAcxxI,QAAO,SAAA4yC,GAAA,OAC3DA,EAAM5xC,KAAO,EAAKm1R,QAAQn1R,KACtBwsW,EAAaluW,SAAWszC,EAAMtzC,QAC7BkuW,EAAaluW,SAAWszC,EAAMymF,cAC7Bm0O,EAAan0O,cAAgBm0O,EAAan0O,eAAiBzmF,EAAMtzC,WAGzE,OAAO,EAAK2uW,wBAAwBD,EAAiChpT,GAErE,OAAO,EAAKipT,wBAAwBT,EAAcxoT,GAGtD,MAAO,K,aAjFUsnT,G,+GCTrB,I,EAAA,S,oCACA,SAEuCnzF,EAA1BA,wBAA0B,SAACxgR,EAAOE,EAAQw0C,EAAQ+oF,GAC3D,IAAMn3E,EAAS,GAQf,GAJAA,EAAOlxD,KAAK,CAAEqlB,EAAG,EAAGC,EAAG,IACvB4rC,EAAOlxD,KAAK,CAAEqlB,EAAGza,EAAO0a,EAAG,IAGvB+iH,IAAc,EAAA+hJ,wBAAwBrtO,KACxC,IAAK,IAAIv9C,EARG,GAQQA,GAAK,EAAGA,IAAK,CAC/B,IAAMigD,EAASpqC,KAAKqnE,GAAK,GAAMl9E,EATrB,IAUJ6lB,EAAIza,EAAQ00C,EAASjqC,KAAKsnE,IAAIl9B,GAC9Bn6B,EAAIxa,EAASw0C,EAASA,EAASjqC,KAAKunE,IAAIn9B,GAC9CyR,EAAOlxD,KAAK,CAACqlB,IAAGC,MAIpB,GAAI+iH,IAAc,EAAA+hJ,wBAAwBttO,MACxC,IAAK,IAAIt9C,EAAI,EAAGA,GAjBJ,GAiBgBA,IAAK,CAC/B,IAAMigD,EAASpqC,KAAKqnE,GAAK,GAAMl9E,EAlBrB,IAmBJ6lB,EAAIza,EAAQ00C,EAASA,EAASjqC,KAAKsnE,IAAIl9B,GACvCn6B,EAAIxa,EAASw0C,EAASA,EAASjqC,KAAKunE,IAAIn9B,GAC9CyR,EAAOlxD,KAAK,CAAEqlB,IAAGC,MAOrB,OAAO,IAAI,EAAJ,QAAY4rC,GAAQ,GAAM,K,4LC9BrBivT,WAAT,WAAsB,IACtBv3N,EAAavkJ,SAASC,SAAtBskJ,UACAtiJ,EAAUjC,SAASC,SAAnBgC,OAIL,OAHAA,EAASA,GAAU,qBACnBsiJ,EAAYA,EAAYA,EAAY,IAAM,GAEhB,SAAlB7jJ,SAAS6hL,MAAmBviL,SAASC,SAASC,UAA/C,GAA+DqkJ,EAAYtiJ,EAAW,IAT/F,a,mDAYO,IAAM,EAAW20T,EAAXA,UAAA,gCAAW,WAAO54S,EAAKnjB,GAAZ,IAAkB62J,EAAlB,uDAA4B,GAA5B,iGACf,IAAAonC,MAAK96K,EAAKnjB,EAAM62J,IADD,kDAAX,+CA8B4BqqN,EAA5BA,0BAA4B,SAAC/9V,EAAK5f,GAAuC,IAAlC49W,EAAkC,wDACpF,oCAAO,uGACCxsN,EAAa,IAAIo0F,gBACjBhrD,EAASppC,EAAWopC,OAE1B15L,MAAM2rB,SAAS,CAAE7Y,KAAM,kBAAmByV,QAAS,CAAErpB,MAAKoxJ,gBAJrD,kBAOoBq9D,MAAM7uM,EAAK,CAAE46K,WAPjC,WAOG7vF,EAPH,QAQWqrM,GARX,sBASK,IAAI99K,MAAM,gCATf,wBAYgBvtB,EAAS4wF,OAZzB,eAYG9+L,EAZH,OAaHqE,MAAM2rB,SAAS,CAAE7Y,KAAM,kBAAmByV,QAAS,CAAErpB,MAAKvD,KAAMmhX,EAAwBnhX,EAAO,QAb5F,kBAeIA,GAfJ,kCAiBgB,eAAf,KAAMwC,KACRuB,QAAQ4B,IAAI,iBAAkBpC,GAE9Bc,MAAM2rB,SAAS,CAAE7Y,KAAM,kBAAmByV,QAAS,CAAErpB,MAAKS,MAAO,KAAM89C,WApBtE,6DA0BkBs/T,EAAdA,YAAc,SAAC79W,GAC1B,OAAO,WACL,IACMoxJ,EADQtwJ,MAAM6J,WACK4L,UAAUunW,SAAS99W,GAExCoxJ,IACFA,EAAWi0F,QACXvkP,MAAM2rB,SAAS,CAAE7Y,KAAM,oBAAqByV,QAAS,CAAErpB,SACvDc,MAAM2rB,SAAS,CAAE7Y,KAAM,oBAAqByV,QAAS,CAAErpB,a,sIC7E7D,O,IACA,O,IACA,OACA,Q,IACA,Q,IACA,QACA,S,WACA,Q,uDAEqB+9W,E,WAwBnB,WAAYjuT,EAAKk2E,GAAQ,sCAtBzBA,OAAS,CACP20B,UAAW,UACX2yC,gBAAiB,qBACjBjqI,YAAa,UAAa,UAAO72D,aAAa6wH,QAC9Cr6D,UAAW,EACXurR,aAAc,GACdzvG,YAAa,UACbF,WAAY,GACZvJ,cAAe,EACfC,aAAc,GACdntO,MAAO,GACPE,OAAQ,IAWe,KATzBi7G,OAAS,CACPg4H,eAAe,GAQQ,KANzB7sL,OAAS,GAMgB,KALzBu6F,SAAW,GAKc,KAJzBg1N,OAAS,CACPnsJ,QAAS,MAGc,KA6BzBtxJ,iBAAmB,WAKjB,IAAK,IAAM/L,KAJX,UAAa43C,YAAY,GACrB,EAAKwlH,MAAMC,SACb,EAAKD,MAAMC,QAAQtxJ,mBAED,EAAK9R,OACnB,EAAKA,OAAOrxD,eAAeo3D,IAC7B,EAAK/F,OAAO+F,GAAO+L,mBAGvB,EAAK/K,UAAW,GAvCO,KA0CzB2lF,aAAe,WAKb,IAAK,IAAM3mF,KAJX,EAAKs+G,aACD,EAAK8+C,MAAMC,SACb,EAAKD,MAAMC,QAAQ12E,eAED,EAAK1sF,OACnB,EAAKA,OAAOrxD,eAAeo3D,IAC7B,EAAK/F,OAAO+F,GAAO2mF,eAGvB,EAAK3lF,UAAW,GApDO,KAsJzBpC,UAAY,WAGV,OAAO,IAAAL,eAFIvqD,KAEe00E,KAFf10E,KAE0B20E,OAzJd,KA4JzB3pB,YAAc,WAGZ,MAAO,CAAC5wC,EAFGpa,KAEK00E,KAAMr6D,EAFXra,KAEmB20E,OA/JP,KAkKzBpqB,cAAgB,SAASmqB,EAAMC,GAC7B,IACG3iC,EADc,UAAO0P,WACC,EAErBK,EAAQ,UAAUkJ,WACpB2pB,EAAS,UAAUhqB,YAErB,MAAO,CACLxwC,EAAIs6D,EAAO3yB,EAAS6yB,EAAOx6D,EAAK43B,EAChC33B,EAAIs6D,EAAO5yB,EAAS6yB,EAAOv6D,EAAK23B,IA3KX,KA+KzBwW,UAAY,WACN,UAAam7C,YAAY3pG,QAAQ,WAAa,GAAK,EAAKovN,MAAMC,QAAQtiN,MAAM4xJ,UAC9E,EAAKlhJ,UAjLgB,KAqLzBwiD,OAAS,SAACtW,GACR,IAAIs2E,GAAa,IAAA1vE,eAAc,EAAKmqB,KAAM,EAAKC,MAC3C5yB,EAAQ,UAAOA,MACfpiD,EAAQ,EAAKypN,MAAMC,QAAQ1pN,MAAQoiD,EACnCliD,EAAS,EAAKupN,MAAMC,QAAQxpN,OAASkiD,EACrC1N,EAAS,EAAKmpF,OAAOuoN,aACrBtlN,EAAO,EAAKjD,OAAO20B,UAEvBxuG,EAAIyuG,OACJzuG,EAAI+W,YACJ/W,EAAIwuG,UAAY,EAAK30B,OAAO20B,UAC5BxuG,EAAIkX,YAAc,EAAK2iE,OAAO3iE,YAC9BlX,EAAI6W,UAAY,EAAKgjE,OAAOhjE,UAIzB,UAAampC,YAAY3pG,QAAQ,WAAa,GAAK,EAAKovN,MAAMC,QAAQtiN,MAAM4xJ,WAC7Eh1G,EAAIwuG,UAAY,EAAK30B,OAAOsnE,iBAK9B,UAAcwnC,YAAY3oL,EAAKs2E,EAAW7/G,EAAG6/G,EAAW5/G,EAAG1a,EAAOE,EAAQw0C,EAAQosF,GAAM,GAExF98E,EAAImX,SACJnX,EAAI88E,OACJ98E,EAAI6tG,YACJ7tG,EAAI0uG,WA/MJryJ,KAAKw9H,OAAS9oI,OAAO+2B,OAAOzrB,KAAKw9H,OAAQA,GAEzCx9H,KAAKopN,MAAMC,QAAU,IAAI,EAAJ,QAAY/hK,EAAIltC,EAAGktC,EAAIjtC,EAAGra,KAAKw9H,OAAO79H,MAAOK,KAAKw9H,OAAO39H,OAAQ,UAAa+5D,WAAW8jC,QAAS19F,MACvHA,KAAKy1W,aACLz1W,KAAKsqK,a,0DAIL,UAAa7wG,SACX,UAAaC,OAAOM,OACpBh6D,KAAKi6D,OAAOxiE,KAAKuI,MACjBA,KACA,UAAa45D,WAAWwjC,KAG1B,UAAa3jC,SACX,UAAaC,OAAOK,SACpB/5D,KAAKwoD,UAAU/wD,KAAKuI,MACpBA,KACA,UAAa45D,WAAW8jC,W,+BAK1B19F,KAAK01W,eACL,UAAUxtT,eAAeytT,UAAU31W,Q,qCA8BnC,UAAaipD,YAAYjpD,MACzB,UAAa4jG,YAAY5jG,MACzB,UAAa4jG,YAAY5jG,KAAKopN,MAAMC,SAHvB,2BAKb,YAAiBrpN,KAAKwgJ,SAAtB,+CAAgC,SACxB/oI,UANK,6EASb,IAAK,IAAMu0C,KAAShsD,KAAKimD,OACnBjmD,KAAKimD,OAAOrxD,eAAeo3D,IAC7BhsD,KAAKimD,OAAO+F,GAAOv0C,W,mCA8CvB,IAAIu0C,SAMA4pT,EAAe,CAKjB,CAAC5tW,GAAI,KAAMoS,EAAGpa,KAAKw9H,OAAO79H,MAAO0a,EAAGra,KAAKw9H,OAAO39H,OAAS,EAAGizO,eAAe,EAAMC,kBAAkB,EAAMC,iBAAiB,EAAO3+L,OAAQ,GAAIn5B,OAAQ,EAAAm2N,mBAAmBsB,KAGxK,CAAC3qO,GAAI,KAAMoS,EAAGpa,KAAKw9H,OAAO79H,MAAO0a,EAAGra,KAAKw9H,OAAO39H,OAAQizO,eAAe,EAAMC,kBAAkB,EAAOC,iBAAiB,EAAM3+L,OAAQ,GAAIn5B,OAAQ,EAAAm2N,mBAAmBl9L,SAf3J,uBAiBX,YAA6ByhU,EAAahlB,UAA1C,+CAAqD,gCAAxCjgH,GAAwC,WAE/CqvD,EAAa,CACfzvO,SAAU,UAAaqJ,WAAWujC,UAClCksH,SAAS,EACTypB,cAAenC,EAAYmC,cAC3BC,iBAAkBpC,EAAYoC,iBAC9BC,gBAAiBrC,EAAYqC,gBAC7BnC,kBAAkB,GAEhBO,EAAc,CAChB/8L,OAAQs8L,EAAYt8L,OACpBmmB,UAAW,EACXt/C,OAAQy1N,EAAYz1N,SAEtB8wC,EAAQ,IAAI,EAAJ,QAAY2kL,EAAYv2N,EAAGu2N,EAAYt2N,EAAGra,KAAMggS,EAAY5uD,IAC9D2B,kBAAmB,EAEzB/yO,KAAKimD,OAAO0qL,EAAY3oO,IAAMgkD,GAnCrB,gF,4BAvCX,OAAOhsD,KAAKw9H,OAAO79H,O,aAGXzI,GACR8I,KAAKw9H,OAAO79H,MAAQzI,I,6BAIpB,OAAO8I,KAAKw9H,OAAO39H,Q,aAGV3I,GACT8I,KAAKw9H,OAAO39H,OAAS3I,I,4BAIrB,OAAO8I,KAAKw1W,Q,aAGJt+W,GACR8I,KAAKw1W,OAASt+W,I,2BAId,OAAO8I,KAAKopN,MAAMC,QAAQ30I,M,aAOnBx9E,GACP8I,KAAKopN,MAAMC,QAAQ30I,KAAOx9E,I,2BAJ1B,OAAO8I,KAAKopN,MAAMC,QAAQ10I,M,aAOnBz9E,GACP8I,KAAKopN,MAAMC,QAAQ10I,KAAOz9E,M,eApITq+W,G,2HCTrB,O,IACA,O,IACA,O,IACA,SACA,Q,IACA,OACA,Q,IACA,M,uDAEqBM,E,WAenB,WAAYrlD,EAAKjkF,EAAM73J,EAAMC,EAAMh1E,EAAOE,EAAQ20C,GAA2B,WAApBj7C,EAAoB,4FAZ7Eu8W,YAAc,EAY+D,KAX7EC,SAAW,GAWkE,KAV7EC,QAAU,GAUmE,KAT7E7jN,UAAY,UASiE,KAR7E8jN,cAAgB,UAQ6D,KAP7EC,qBAAuB,2BAOsD,KAN7E9oD,WAAa,IAMgE,KAL7E97K,YAAc,wBAK+D,KAJ7EvqI,MAAQ,CACN6kG,QAAQ,GAGmE,KAqE7E7zC,iBAAmB,WACjB,UAAa6rC,YAAY,GACzB,EAAK52C,UAAW,GAvE2D,KA0E7E2lF,aAAe,WACb,EAAK23B,aACL,EAAKt9G,UAAW,GA3EL,KAARwjQ,IACDA,EAAMxwT,KAAKsxI,aAEbtxI,KAAKuwT,UAAY,IAAI,EAAJ,QAAcC,EAAKjkF,EAAM73J,EAAMC,EAAMh1E,EAAOE,EAAQ20C,EAAOj7C,GAC5EyG,KAAKsqK,aACF/wK,EAAOinJ,UACRjnJ,EAAOinJ,SAASzrJ,KAAKiL,M,0DA+BvB,UAAay5D,SACX,UAAaC,OAAOM,OACpBh6D,KAAKi6D,OAAOxiE,KAAKuI,MACjBA,KACA,UAAa45D,WAAWwjC,KAG1B,UAAa3jC,SACX,UAAaC,OAAOklC,SACpB5+F,KAAKohG,WAAW3pG,KAAKuI,MACrBA,KACA,UAAa45D,WAAW2jC,S,+BAa1Bv9F,KAAK01W,iB,qCAIL,UAAa9xQ,YAAY5jG,Q,iCAczB,IAAI+hD,EAAQ,UAAOA,MACfo0T,EAAcn2W,KAAKuwT,UAAUh3T,OAAOoG,MAAQoiD,EAEhD,OAAOo0T,GAA2Bn2W,KAAKuwT,UAAU5wT,MAAQoiD,I,kCAIzD,IAAIA,EAAQ,UAAOA,MACfq0T,EAAep2W,KAAKuwT,UAAUh3T,OAAOsG,OAASkiD,EAElD,OAAOq0T,GAA8Bp2W,KAAKuwT,UAAU1wT,OAASkiD,I,gCAI7D,OAAO/hD,KAAKuwT,UAAUh3T,OAAOm7E,KAAO10E,KAAKuwT,UAAUh3T,OAAOm7E,KAAO10E,KAAKuwT,UAAU77O,O,gCAIhF,OAAO10E,KAAKuwT,UAAUh3T,OAAOo7E,KAAO30E,KAAKuwT,UAAUh3T,OAAOo7E,KAAO30E,KAAKuwT,UAAU57O,O,iCAGvEvsB,GAET,IAAInjD,EAAOjF,KACP+G,EAAQ/G,KAAKuwT,UAAUh3T,OACvByG,KAAKuwT,UAAUh3T,OAAO6vN,MAAMC,QAAQtiN,MACpC/G,KAAKuwT,UAAUxpT,MAEnB,GAAIA,EAAM4xJ,WAAav/J,SAASg9F,cAAc,WAAY,CACxDj+F,OAAOkwD,kBAAmB,EAC1B,UAAaC,cACb,IACM+/P,EAAWroT,KAAKq2W,iBAEtBj9W,SAASg9F,cAAc,mBAAmBj0C,YAAYkmQ,GAEtDA,EAASjhJ,QACTihJ,EAAShhJ,UAAY,SAASlxK,GANZ,KAOZA,EAAE8oG,SACJ9oG,EAAEugB,OAAO4wJ,QAIb,IAAMA,EAAO,SAAUnxK,GAChBA,EAAEugB,OAAOuqI,QAAQ,YACpBonK,EAAS/gJ,QAoCb,OAhCA+gJ,EAASlhJ,QAAW,WAClBnnK,KAAKqU,MAAMxU,OAAS,MACpBG,KAAKqU,MAAMxU,OAAUG,KAAKu9K,aAAc,MAG1C8qI,EAAS9gJ,OAAS,WAChBpvK,OAAOkwD,kBAAmB,EAC1BpjD,EAAKsrT,UAAUC,IAAMnI,EAASnxT,MAEP,KAAnBmxT,EAASnxT,QACX+N,EAAKsrT,UAAUC,IAAMvrT,EAAKqsI,aAE5BrsI,EAAKktJ,UAAYltJ,EAAKgxW,cACtB5tD,EAAStiJ,WAAWzjH,YAAY+lQ,GAChCjvT,SAAS8pG,oBAAoB,QAASokE,GACtC,UAAMrjJ,UAAS,IAAA4mF,oBAAkB,KAGnC7qG,KAAKmyJ,UAAYnyJ,KAAKk2W,sBAEtB,aAAE7tD,GAAU1lN,GAAG,sBAAsB,WACnC19F,EAAKsrT,UAAUC,KAAM,aAAExwT,MAAMysF,SAE/B47N,EAAS35B,SAAW,SAAU9tL,GAE5B37F,EAAKsrT,UAAUC,IAAMnI,EAASnxT,OAC9BO,KAAK,CAAEo8R,YAAa9sR,EAAM8sR,cAE5BnlM,YAAW,WACTt1F,SAASytD,iBAAiB,QAASygH,KAClC,KACH,UAAMrjJ,UAAS,IAAA4mF,oBAAkB,KAC1B,K,+BAIFlnD,EAAKrhC,EAAMlI,EAAGC,EAAG6vH,EAAUrnF,EAAUyzT,GAC5C,IAAInpH,EAAS9yO,EACT+yS,EAAavqQ,EAAW7iD,KAAKotT,WAEjCzpQ,EAAI4oL,KAAO1pL,EAAW,MAAQyzT,EAG9B,IAAIpwT,EAAQlmD,KAAKu2W,UAAU5yT,EAAKrhC,EAAM4nH,EAAU,GAPM,uBAUtD,YAAiBhkF,EAAjB,+CAAwB,KAAf6I,EAAe,QACtBpL,EAAI6yT,SAASznT,EAAM30C,EAAGC,GACtBA,GAAK+yS,GAZ+C,6EAetD,IAAIrrQ,EAAQ,UAAUkJ,WAGtBjrD,KAAKuwT,UAAUh3T,OAAO6vN,MAAMC,QAAQxpN,QAAUwa,EAAI8yO,GAAUprM,GAASqrQ,EAA4B,EAAfptT,KAAKy2W,SAAe10T,EAGtG/hD,KAAKuwT,UAAUh3T,OAAO0sD,OAAOg5J,GAAGpmF,eAAes6G,OAAO9pB,QAAQ10I,KAAO30E,KAAKuwT,UAAUh3T,OAAO6vN,MAAMC,QAAQxpN,OAAS,EAClHG,KAAKuwT,UAAUh3T,OAAO0sD,OAAOmiQ,GAAGvvL,eAAes6G,OAAO9pB,QAAQ10I,KAAO30E,KAAKuwT,UAAUh3T,OAAO6vN,MAAMC,QAAQxpN,S,6BAUpG8jD,GAGL,IAAI0mL,EAAarqO,KAAKqqO,WAClBpwG,GAAa,IAAA1vE,eAAcvqD,KAAKuwT,UAAU77O,KAAM10E,KAAKuwT,UAAU57O,KAAM30E,KAAKuwT,UAAUh3T,QAKpFoG,EAAQK,KAAKq2I,WAGjB1yF,EAAIyuG,OACJzuG,EAAI4oL,KAAOlC,EAAa,MAAQrqO,KAAKuwT,UAAUhkF,KAC/C5oL,EAAI6oL,UAAY,OAChB7oL,EAAI+yT,aAAe,MACnB/yT,EAAIwuG,UAAYnyJ,KAAKmyJ,UAarBnyJ,KAAKysO,SACH9oL,EACA3jD,KAAKuwT,UAAUC,IACfv2L,EAAW7/G,EAAIpa,KAAKg2W,QACpB/7O,EAAW5/G,EAAIra,KAAKy2W,QACpB92W,EAAQK,KAAKg2W,QACbh2W,KAAKqqO,WACLrqO,KAAKuwT,UAAUhkF,MAGjB5oL,EAAI0uG,Y,uCAIJ,IAAIg2J,EAAWjvT,SAAS8oD,cAAc,YAClC+3E,GAAa,IAAA1vE,eAAcvqD,KAAKuwT,UAAU77O,KAAM10E,KAAKuwT,UAAU57O,KAAM30E,KAAKuwT,UAAUh3T,QACpFwoD,EAAQ,UAAUkJ,WAiBtB,OAfAo9P,EAASz9N,UAAY,SACrBy9N,EAASh0S,MAAMy9B,KAAOmoF,EAAW7/G,EAAIpa,KAAKg2W,QAAU,KACpD3tD,EAASh0S,MAAMnP,IAAM+0H,EAAW5/G,EAAIra,KAAKy2W,QAAU,KACnDpuD,EAASh0S,MAAM1U,MAAQK,KAAKq2I,WAAar2I,KAAKg2W,QAAU,KAExD3tD,EAASh0S,MAAMxU,OAASG,KAAKuwT,UAAUh3T,OAAO6vN,MAAMC,QAAQxpN,OAASkiD,EAAQ,KAC7EsmQ,EAASh0S,MAAMwuC,SAAW7iD,KAAKqqO,WAAa,KAC5Cg+E,EAASh0S,MAAM+4S,WAAaptT,KAAKqqO,WAAarqO,KAAKotT,WAAa,GAAM,KACtE/E,EAASh0S,MAAM+1N,WAAapqO,KAAKuwT,UAAUhkF,KAC3C87E,EAASh0S,MAAMo3F,MAAQzrG,KAAKmyJ,UACxBnyJ,KAAKuwT,UAAUC,MAAQxwT,KAAKsxI,YAC9B+2K,EAASnxT,MAAQ,GAEjBmxT,EAASnxT,MAAQ8I,KAAKuwT,UAAUC,IAE3BnI,I,gCAWC1kQ,EAAKg7I,EAAUz0D,EAAUysO,GACjC,IAAIpiX,EAAI,EACJ2xD,EAAQ,GACR0wT,EAAc,GAIZC,EAAQl4K,EAAS5gM,MAAM,KAPY,uBAUzC,YAAiB84W,EAAjB,+CAAwB,KAAfzjW,EAAe,QAClBurL,EAAWi4K,EAAcxjW,EAAO,IAIpC,GAHgBuwC,EAAIgnL,YAAYhsC,GAAUh/L,MAG1BuqI,EAAU,CAExB,GAAIvmF,EAAIgnL,YAAYv3N,GAAMzT,MAAQuqI,EAChC,KAAOvmF,EAAIgnL,YAAYv3N,GAAMzT,MAAQuqI,GAAY31I,EAAI6e,EAAK3e,QAAQ,CAChE,GAAIkvD,EAAIgnL,YAAYv3N,EAAK/a,MAAM,EAAG9D,EAAIoiX,GAf7B,OAeiDh3W,OAASuqI,EAEjE,OADAhkF,EAAMnxD,KAAKqe,EAAK/a,MAAM,EAAG9D,GAhBlB,OAiBA2xD,EAET3xD,IAIJ2xD,EAAMnxD,KAAK6hX,EAAYz5V,QACvBy5V,EAAcxjW,EAAO,SAErBwjW,EAAcj4K,GA9BuB,6EAuCzC,OAJIi4K,EAAYniX,OAAS,GACvByxD,EAAMnxD,KAAK6hX,EAAYz5V,QAGlB+oC,I,gCAzSP,OAAOlmD,KAAK82W,Y,aAGA5/W,GACZ8I,KAAK82W,WAAa5/W,I,iCAIlB,OAAO8I,KAAK81W,YAAc,UAAO/zT,MAAQ,UAAOC,aAAgBhiD,KAAKi2I,YAAc,G,aAGtE/+I,GACb8I,KAAK81W,YAAc5+W,I,8BAMnB,OAAO8I,KAAK+1W,U,aAGF7+W,GACV8I,KAAK+1W,SAAW7+W,M,eAjDC2+W,G,8KCTAkB,E,WAUnB,WAAYvmD,EAAKjkF,EAAM73J,EAAMC,EAAMh1E,EAAOE,EAAQ20C,EAAOj7C,IAAQ,qBAC/DyG,KAAKg3W,KAAOxmD,EACZxwT,KAAKi3W,MAAQ1qI,EACbvsO,KAAK8nT,MAAQpzO,EACb10E,KAAK+nT,MAAQpzO,EACb30E,KAAKgoT,OAASroT,EACdK,KAAKioT,QAAUpoT,EACfG,KAAKk3W,OAAS1iU,EACdx0C,KAAKtG,QAAUH,E,iDAIf,OAAOyG,KAAKg3W,M,aAGN9/W,GACN8I,KAAKg3W,KAAO9/W,I,2BAIZ,OAAO8I,KAAKi3W,O,aAGL//W,GACP8I,KAAKi3W,MAAQ//W,I,2BAIb,OAAO8I,KAAK8nT,O,aAGL5wT,GACP8I,KAAK8nT,MAAQ5wT,I,2BAIb,OAAO8I,KAAK+nT,O,aAGL7wT,GACP8I,KAAK+nT,MAAQ7wT,I,4BAIb,OAAO8I,KAAKgoT,Q,aAGJ9wT,GACR8I,KAAKgoT,OAAS9wT,I,6BAId,OAAO8I,KAAKioT,S,aAGH/wT,GACT8I,KAAKioT,QAAU/wT,I,4BAIf,OAAO8I,KAAKk3W,Q,aAGJhgX,GACR8I,KAAKk3W,OAAShgX,I,6BAId,OAAO8I,KAAKtG,S,aAGHxC,GACT8I,KAAKtG,QAAUxC,M,eAlFE6/W,G,8ECGa3iE,EAArBA,mBAAqB,SAACj+S,GACjC,OAAqB,IAAdA,EAAE8oG,SAMoBo1M,EAAlBA,gBAAkB,SAACl+S,GAC9B,OAAqB,KAAdA,EAAE8oG,SAMoBk1M,EAAlBA,gBAAkB,SAACh+S,GAC9B,OAAOghX,EAAahhX,IAAMihX,EAAWjhX,IAAMkhX,EAAYlhX,IAAMmhX,EAAQnhX,IAAMohX,EAAQphX,IAAgB,MAAVA,EAAEqB,KAAyB,MAAVrB,EAAEqB,KAfvG,IAqBM2/W,EAAeA,EAAfA,aAAe,SAAChhX,GAC3B,OAAQA,EAAE8oG,SAAW,IAAM9oG,EAAE8oG,SAAW,IAAQ9oG,EAAE8oG,SAAW,IAAM9oG,EAAE8oG,SAAW,KAOrEm4Q,EAAaA,EAAbA,WAAa,SAACjhX,GACzB,OAAqB,MAAdA,EAAE8oG,SAOEo4Q,EAAcA,EAAdA,YAAc,SAAClhX,GAC1B,OAAqB,MAAdA,EAAE8oG,SAOEq4Q,EAAUA,EAAVA,QAAU,SAACnhX,GACtB,OAAqB,KAAdA,EAAE8oG,SAOEs4Q,EAAUA,EAAVA,QAAU,SAACphX,GACtB,OAAqB,MAAdA,EAAE8oG,U,8ECzDX,I,IAAA,O,IACA,OACA,S,IACA,MACA,SACA,QACA,SACA,S,6DA8De,IA5DG,WAAY,WAC5Bj/F,KAAK4pN,WAAa,SAAChwK,GACjB,IAAI8W,EAAY9W,EAAMqlH,SAEhBu4M,EADe,UAAUtuT,YACF,EACvBuuT,EAAuB79T,EAAMoR,cAE7B8L,EAAW,UAAUrI,YAAYiC,GACvCoG,EAASjM,YAAY,CACnBzwC,EAAGq9V,EAAqBr9V,EAAI,GAC5BC,EAAGo9V,EAAqBp9V,EAAI,KAE9By8C,EAASu8E,UAAUgqJ,cAAgB,KACnCvmO,EAAS09E,YAAc,GACvB19E,EAASykG,MAAMi8M,GACf,UAAUruT,UAAUquT,GACpB,EAAKE,gBAAgB5gT,GACjBA,EAASxwD,SAAW,EAAAipC,cAAcqB,kBACpCkmB,EAASd,KAAK,CACZ57C,EAAGq9V,EAAqBr9V,EAAI,GAC5BC,EAAGo9V,EAAqBp9V,EAAI,MAE9B,IAAA+2H,WAAU,cAAe,EAAAC,iBAAiBC,YAAax6E,KAG3D92D,KAAK03W,gBAAkB,SAAC99T,GACtB,IAAMsM,EAAQtM,EAAM6R,WADY,uBAEhC,YAAmBvF,EAAnB,+CAA0B,KAAf6I,EAAe,QACxB,EAAK4oT,eAAe5oT,IAHU,+EAMlC/uD,KAAK23W,eAAiB,SAAC5oT,GACrB,IAAMF,EAAmB,UAAUgD,cAAc9C,GACjDA,EAAK/mD,IAAK,eACV+mD,EAAK0C,KAAKzpD,IAAK,eACX6mD,IACFE,EAAKE,kBAAoBJ,EAAiBI,mBAC1C,IAAAC,gBAAeH,EAAM,KAAMF,EAAiBzjD,KAAMyjD,EAAiBO,UAAW,KAAMP,EAAiBp4D,KAAMo4D,EAAiBhvD,QAAQ,kBAIxIG,KAAK6pN,kBAAoB,SAACjwK,GACxB,IAAIsW,EAAYtW,EAAMqlH,SAEhBu4M,EADe,UAAUtuT,YACF,EACvB0uT,EAA8Bh+T,EAAMoR,cACpC4M,EAAe,UAAUrI,YAAYW,GAC3C0H,EAAa/M,YAAY,CACvBzwC,EAAGw9V,EAA4Bx9V,EAAI,GACnCC,EAAGu9V,EAA4Bv9V,EAAI,KAErCu9C,EAAa2jG,MAAMi8M,GACnB,UAAUruT,UAAUquT,GAEhB5/S,EAAaxsD,OAAS,EAAAuoC,oBAAoBC,WAC5C,UAAM3vB,UAAS,IAAA0mL,yBAAwB/yI,O,8EChE7C,I,IAAA,O,IACA,O,IACA,O,6DAEe,IAAI,WACjB,IAAI3yD,EAAOjF,KAkFX,SAAS63W,EAAQvwT,GACf,IAAIhlC,EAAOlY,KAAKC,MAAOi9C,EAAO,UAAOvF,MAAQ,UAAOiB,wBAKpD,MAJ0B,WAAvB,UAAOp2C,cACR0V,EAAgC,IAAzBlY,KAAKC,MAAMiY,EAAO,MAGpBA,EAAKxK,WArFd9X,KAAKg2D,KAAO,WACV,UAAayD,SACX,UAAaC,OAAOM,OACpB/0D,EAAKg1D,OACLh1D,EACA,UAAa20D,WAAWyjC,QAAU,IAGtCr9F,KAAKi6D,OAAS,SAAStW,GAcrB,IAbA,IAAIpvD,SAAG+tB,SAAM3iB,SAAOm4W,SAClBhzT,EAAS,UAAU4F,YACnBV,EAAclF,EAAOnlD,MACrBsqD,EAAenF,EAAOjlD,OACtBkiD,EAAQ,UAAOA,MACfwB,EAAW,UAAOX,UAAUW,SAAWxB,EACvCg2T,EAAgBx0T,EAAW,EAC3By0T,EAAYD,EAAe,EAC3BzwT,EAAM,UAAU0D,cAChBsP,EAAQ,CACNlgD,EAAIktC,EAAIltC,EAAImpC,GAAa,EACzBlpC,EAAIitC,EAAIjtC,EAAIkpC,GAAa,GAEvB+W,EAAMjgD,EAAI29V,GAAa19S,EAAMjgD,EAAI,GACrCigD,EAAMjgD,GAAKkpC,EAEb,KAAM+W,EAAMlgD,EAAI49V,GAAa19S,EAAMlgD,EAAI,GACrCkgD,EAAMlgD,GAAKmpC,EAQb,IALAI,EAAI8W,UAAU,EAAG,EAAGzQ,EAAaguT,GACjCr0T,EAAI8W,UAAU,EAAG,EAAGu9S,EAAW/tT,GAE/BtG,EAAI4oL,KAAOwrI,EAAajgW,WAAa,gBACrC6rC,EAAIwuG,UAnCa,UAoCb59J,EAAI+lE,EAAMlgD,EAAG7lB,EAAIy1D,EAAaz1D,GAAGgvD,EACnCjhC,EAAOu1V,EAAQvwT,EAAIltC,EAAI7lB,GAEvBujX,EAAU,CACR19V,EAAG7lB,GAFLoL,EAAQgkD,EAAIgnL,YAAYroN,GAAM3iB,OAEZ,EAChB0a,EAAG09V,EACHp4W,MAAOA,EACPE,OAAQk4W,EACRz1V,KAAMA,GAERqhC,EAAI6yT,SAASsB,EAAQx1V,KAAMw1V,EAAQ19V,EAAG09V,EAAQz9V,GAGhD,IAAI9lB,EAAI+lE,EAAMjgD,EAAG9lB,EAAI01D,EAAc11D,GAAGgvD,EACpCjhC,EAAOlY,KAAKC,OAAOi9C,EAAIjtC,EAAI9lB,GAAKwtD,GAAOjqC,WAEvCggW,EAAU,CACR19V,EAAG29V,EACH19V,EAAG9lB,EACHoL,MAJFA,EAAQgkD,EAAIgnL,YAAYroN,GAAM3iB,MAK5BE,OAAQk4W,EACRz1V,KAAMA,GAERqhC,EAAIyuG,OACJzuG,EAAI0oL,UAAUyrI,EAAQ19V,EAAG09V,EAAQz9V,GACjCspC,EAAIpQ,QAAQnpC,KAAKqnE,GAAG,GACpB9tB,EAAI6oL,UAAY,SAChB7oL,EAAI6yT,SAASsB,EAAQx1V,KAAM,EAAG,GAC9BqhC,EAAI0uG,UAGN1uG,EAAI+W,YACJ/W,EAAI6W,UAAY,EAChB7W,EAAIkX,YArEa,UAsEjBlX,EAAIgX,OAAO,EAAEq9S,GACbr0T,EAAIiX,OAAO5Q,EAAaguT,GACxBr0T,EAAImX,SAEJnX,EAAI+W,YACJ/W,EAAI6W,UAAY,EAChB7W,EAAIgX,OAAOq9S,EAAW,GACtBr0T,EAAIiX,OAAOo9S,EAAW/tT,GACtBtG,EAAImX,Y,qHCpFR,OACA,S,IACA,M,IACA,QACA,S,IACA,QACA,S,IACA,O,IACA,Q,IACA,O,IACA,OACA,Q,uDAEqBm9S,G,EAInB,WAAYr1T,IAAW,kCACrB5iD,KAAK4iD,UAAYA,G,6BAHnBs1T,qBAAuB,E,KAMvBtpG,qBAAuB,WACF,UAAUt0I,gBAG3B,IAAA49G,qBACA,UAAMj0N,UAAS,IAAA2lL,eAAa,KAI9B,IAAMlyD,EAAe,UAAiBJ,iCAAiC,EAAK10F,UAAUuI,aAEtF,GAAIusF,EAAajjJ,OAAS,EAAG,CAC3B,IAAMmgJ,EAAO8C,EAAa,GAAGt9H,EACvB06H,EAAO4C,EAAa,GAAGr9H,EACvBw6H,EAAO6C,EAAa,GAAGt9H,EACvB26H,EAAO2C,EAAa,GAAGr9H,EAGvBs5I,EAAa,CACjBv5I,EAAGw6H,EAAO,UAAOzvF,mBAFJ,IAGb9qC,EAAGy6H,EAAO,UAAO3vF,mBAHJ,KAKTgzT,GAAiBtjO,EAAOD,GAAQ,UAAOzvF,mBAAqByvB,IAC5DwjS,GAAkBrjO,EAAOD,GAAQ,UAAO3vF,mBAAqByvB,IAmBnE,OAjBoB,EAAKyjS,gBACvB,UAAOlzT,mBACP,EACA,EACAgzT,EACAC,EACAzkN,EACA,EAAK2kN,0BAaT,MAAO,I,KAGTzqG,mBAAqB,WACnB,IACI0qG,GAA4B,EADb,UAAUj+O,gBAG3B,IAAA89G,kBACA,UAAMn0N,UAAS,IAAA2lL,eAAa,IAC5B2uK,GAA4B,GAI9B,IAAMC,EAA0B,EAAK51T,UAAUkK,oCAAoC9lD,QAAO,SAAAylD,GACxF,OAAOA,EAAInmD,SAAW,EAAAipC,cAAcqB,iBAC/B6b,EAAIrhD,OAAS,EAAAuoC,oBAAoBC,aAIlC6kU,EAAsB,UAAiBnhO,iCAAiCkhO,GAAyB,GAEvG,GAAIC,EAAoBhkX,OAAS,EAAG,CAClC,IAAMmgJ,EAAO6jO,EAAoB,GAAGr+V,EAC9B06H,EAAO2jO,EAAoB,GAAGp+V,EAC9Bw6H,EAAO4jO,EAAoB,GAAGr+V,EAC9B26H,EAAO0jO,EAAoB,GAAGp+V,EAE9BkkJ,EAAe,UAAUvzG,cAI3B2oG,EAAa,CACfv5I,EAAIw6H,EAAQ,UAAOzvF,mBAJN,IAIoCo5G,EAAankJ,EAC9DC,EAAIy6H,EAAQ,UAAO3vF,mBALN,IAKoCo5G,EAAalkJ,GAI1D89V,GAAiBtjO,EAAOD,GAAQ,UAAOzvF,mBAAqByvB,IAC5DwjS,GAAkBrjO,EAAOD,GAAQ,UAAO3vF,mBAAqByvB,IAGnE++E,EAAa,CACXv5I,EAAGu5I,EAAWv5I,EAAI+9V,EAAgB,EAClC99V,EAAGs5I,EAAWt5I,GAGhB,IAAMq+V,EAAc,EAAKL,gBACvB,UAAOlzT,mBACP,EACA,EACAgzT,EACAC,EACAzkN,EACA,EAAKglN,kBAQP,OALIJ,KACF,IAAArgI,qBACA,UAAMj0N,UAAS,IAAA2lL,eAAa,KAGvB8uK,EAGT,MAAO,I,KAGT3qG,iBAAmB,WACjB,IACIwqG,GAA4B,EADb,UAAUj+O,gBAG3B,IAAA89G,kBACA,UAAMn0N,UAAS,IAAA2lL,eAAa,IAC5B2uK,GAA4B,GAE9B,UAAcliM,oBAEd,IAAM3+B,EAAe,UAAiBJ,iCAAiC,EAAK10F,UAAUuI,aAEtF,GAAIusF,EAAajjJ,OAAS,EAAG,CAC3B,IAAMmgJ,EAAO8C,EAAa,GAAGt9H,EACvB06H,EAAO4C,EAAa,GAAGr9H,EACvBw6H,EAAO6C,EAAa,GAAGt9H,EACvB26H,EAAO2C,EAAa,GAAGr9H,EAGvBs5I,EAAa,CACjBv5I,EAAIw6H,EAAQ,UAAOzvF,mBAFN,IAGb9qC,EAAIy6H,EAAQ,UAAO3vF,mBAHN,KAKTgzT,GAAiBtjO,EAAOD,GAAQ,UAAOzvF,mBAAqByvB,IAC5DwjS,GAAkBrjO,EAAOD,GAAQ,UAAO3vF,mBAAqByvB,IAE7D8jS,EAAc,EAAKL,gBACvB,UAAOlzT,mBACP,EACA,EACAgzT,EACAC,EACAzkN,EACA,EAAK2kN,0BAWP,OARIC,KACF,IAAArgI,qBACA,UAAMj0N,UAAS,IAAA2lL,eAAa,KAMvB8uK,EAGT,MAAO,I,KAOT/qG,yBAA2B,WACzB,IAAMirG,EAAkB,UAAiBxhI,0DACnCyhI,EAAyB,IAAIlc,IAEnC,OAAOic,EAAgBt3W,QAAO,SAAChM,EAAQwjX,GACrC,IAAM1pB,EAAa0pB,EAAetmI,gBAClC,GAAI48G,EAAY,CAEd,GAAIypB,EAAuBhc,IAAIzN,EAAWpnV,IACxC,OAAO1S,EAGTujX,EAAuB18W,IAAIizV,EAAWpnV,IAEtC,IAAM+wW,EAAqB3pB,EAAWpkS,cAClCwsF,EAAe43M,EAAWlvL,YAC1BxoB,EAAe,UAAiBC,gBAAgBH,GAAc,GAG5Dmc,EAAa,CACjBv5I,GAAI2+V,EAAmB3+V,EAAIs9H,EAAa9C,MAAQ,UAAOzvF,mBAF1C,IAGb9qC,GAAI0+V,EAAmB1+V,EAAIq9H,EAAa5C,MAAQ,UAAO3vF,mBAH1C,KAKTgzT,GAAiBzgO,EAAa7C,KAAO6C,EAAa9C,MAAQ,UAAOzvF,mBAAqByvB,IACtFwjS,GAAkB1gO,EAAa3C,KAAO2C,EAAa5C,MAAQ,UAAO3vF,mBAAqByvB,IAEvFq2C,EAAc,EAAK+iJ,eAAe,UAAO7oN,mBAC7CwuG,EACAwkN,EACAC,GAEF9iX,EAAOP,KAAKk2H,GAEd,OAAO31H,IACN,K,KAGL04Q,eAAiB,WAA+E,IAA9EgrG,EAA8E,uDAAnE,UAAO7zT,mBAAoBwuG,EAAwC,aAA5BolF,EAA4B,aAAhBC,EAAgB,aACxF1+G,EAAa,UAAUA,aAM7B,OALIA,KACF,IAAA49G,qBACA,UAAMj0N,UAAS,IAAA2lL,eAAa,KAGvB,EAAKyuK,gBACVW,EACA,EACA,EACAjgI,EACAC,EACArlF,EACA,EAAK2kN,2B,KAITD,gBAAkB,SAACW,EAAUC,EAAgBC,EAAgBf,EAAeC,EAAgB1nF,EAAayoF,GAIvG,IAAMC,EAAY,EAAKx2T,UAAU8H,YAC3B4xI,EAAO,CACXv6I,MAAO,UAAOA,MACdpiD,MAAOy5W,EAAUz5W,MACjBE,OAAQu5W,EAAUv5W,QAEpBs5W,EAAeC,EAAWJ,EAAUb,EAAeC,EAAgB1nF,GAGnE,IAAM2oF,EAAoBjgX,SAAS8oD,cAAc,UAC3Co3T,EAAUD,EAAkBjqR,WAAW,MA2B7C,OA1BAiqR,EAAkB15W,MAAQy5W,EAAUz5W,MACpC05W,EAAkBx5W,OAASu5W,EAAUv5W,OAGrCy5W,EAAQnnN,UAAY,UACpBmnN,EAAQ7mN,SAAS,EAAE,EAAG4mN,EAAkB15W,MAAO05W,EAAkBx5W,QAG7Ds4W,EAAgBiB,EAAUz5W,QAAOw4W,EAAgBiB,EAAUz5W,OAC3Dy4W,EAAiBgB,EAAUv5W,SAAQu4W,EAAiBgB,EAAUv5W,QAElEy5W,EAAQhqR,UACN8pR,EACAH,EACAC,EACAf,EACAC,EACA,EACA,EACAgB,EAAUz5W,MACVy5W,EAAUv5W,QAIZs5W,EAAeC,EAAW98K,EAAKv6I,MAAQu6I,EAAK38L,MAAO28L,EAAKz8L,OAAQ6wR,GAEzD2oF,EAAkBtpR,a,KAG3Bw8C,aAAe,SAAC6sO,EAAWr3T,EAAOpiD,EAAOE,EAAQ6wR,GAC/C0oF,EAAUz5W,MAAQA,EAClBy5W,EAAUv5W,OAASA,EACnB,UAAOkiD,MAAQA,EACf,EAAKa,UAAUmH,UAAU2mO,EAAY/wR,MAAO+wR,EAAY7wR,QACxD,UAAiBqiG,QAAQ,UAAiBxoC,OAAOM,QACjD,UAAiBkoC,QAAQ,UAAiBxoC,OAAOM,S,KAGnDs+S,yBAA2B,SAACc,EAAWr3T,EAAOpiD,EAAOE,EAAQ8zJ,GAC3DylN,EAAUz5W,MAAQA,EAClBy5W,EAAUv5W,OAASA,EACnB,UAAOkiD,MAAQA,EACf,EAAKa,UAAUiI,YAAY8oG,GAE3B,UAAiBzxD,QAAQ,UAAiBxoC,OAAOM,QACjD,UAAiBkoC,QAAQ,UAAiBxoC,OAAOM,S,KAGnD2+S,iBAAmB,SAACS,EAAWr3T,EAAOpiD,EAAOE,EAAQ6wR,GACnD0oF,EAAUz5W,MAAQA,EAClBy5W,EAAUv5W,OAASA,EACnB,UAAOkiD,MAAQA,EAGf,UAAcgH,OAAO2nO,IACrB,IAAA15G,qBAAoB,UAAiB52E,UAAU,K,aA3S9B63Q,G,oHCbrB,I,EAAA,O,oCACA,QACA,QACA,QACA,SAO4CvhT,EAA/BA,6BAA+B,SAACpwD,GAAW,MACK,UAAMnE,WAA1DwD,EAD+C,EAC/CA,gBAAiB2+K,EAD8B,EAC9BA,QAASv2K,EADqB,EACrBA,UAAW4C,EADU,EACVA,YACtCuK,GAAS,IAAAC,oBACTgP,EAAiBxZ,EAAYwZ,eAEnC,GAAI,EAAAoqO,yBAAyBp6P,SAASmM,GACpC,OAAOA,EAGT,IAAI,EAAAxK,cAAgBof,EAAOc,cAAqD,cAArC5iB,SAASC,SAASoC,iBAEvDsS,EAAUu2G,iBAAmBv2G,EAAUu2G,gBAAgBj+G,cACrD3R,OAAOmc,KAAP,qBAA+B1W,SAAS4T,EAAUu2G,gBAAgBj+G,YAAYC,UAC9E5R,OAAOmc,KAAP,eAAyB1W,SAAS4T,EAAUu2G,gBAAgBj+G,YAAYC,SACzE5R,OAAOmc,KAAP,2BAAqC1W,SAAS4T,EAAUu2G,gBAAgBj+G,YAAYC,QAEvF,OAAOyH,EAAUu2G,gBAAgBj+G,YAAYC,OAIjD,GAAI6jB,EACF,OAAIpc,EAAUu2G,iBAAmBv2G,EAAUu2G,gBAAgBj+G,aACtD3R,OAAOmc,KAAP,qBAA+B1W,SAAS4T,EAAUu2G,gBAAgBj+G,YAAYC,QAE1EyH,EAAUu2G,gBAAgBj+G,YAAYC,OAExCA,EAGT,IAAMX,EAAgB+B,SAASiW,uBAAyBzC,EAAOc,eAAiBsoK,EAAQvmK,iBACtF,OAAOzX,EAGT,IAAMizW,EAAkBr+V,EAAOc,aAAalQ,MAAK,SAAA68K,GAAA,OAASA,EAAMlyL,OAAS6tL,EAAQvmK,oBACjF,IAAKw7V,IAAoBA,EAAgB98V,SACvC,OAAOnW,EAIT,GAAIyH,EAAUu2G,iBAAmBv2G,EAAUu2G,gBAAgBj+G,aACtDkzW,EAAgB98V,SAASxc,MAAK,SAAAyc,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWyH,EAAUu2G,gBAAgBj+G,YAAYC,YACtG5R,OAAOmc,KAAP,qBAA+B1W,SAAS4T,EAAUu2G,gBAAgBj+G,YAAYC,UAC9E5R,OAAOmc,KAAP,eAAyB1W,SAAS4T,EAAUu2G,gBAAgBj+G,YAAYC,SACzE5R,OAAOmc,KAAP,2BAAqC1W,SAAS4T,EAAUu2G,gBAAgBj+G,YAAYC,QAEvF,OAAOyH,EAAUu2G,gBAAgBj+G,YAAYC,OAK/C,GADgC,eAAXA,GAAsC,6BAAXA,EAC9B,CAChB,IAAMs5H,EAAoB25O,EAAgB98V,SAAS3Q,MAAK,SAAA4Q,GACtD,OAAOA,EAAQlB,KAAKlV,OAAOnM,SAASmM,MAGtC,GAAIs5H,EACF,OAAOA,EAAkBpkH,KAAKlV,OAQlC,GAHuBizW,EAAgB98V,SAASxc,MAAK,SAAAyc,GACnD,OAAOA,EAAQlB,KAAKlV,SAAWA,KAG/B,OAAOA,EAIT,IAAK,IAAI/R,EAAI,EAAGA,EAAIglX,EAAgB98V,SAAShoB,OAAQF,IACnD,GAAI,EAAA6nD,wBAAwBm9T,EAAgB98V,SAASloB,GAAGinB,KAAKlV,QAC3D,OAAOizW,EAAgB98V,SAASloB,GAAGinB,KAAKlV,OAK5C,OAAOA,I,4FCvFT,Q,IACA,QACA,Q,qGAQEkzW,2BAA6B,SAACvlX,GAC5BA,EAAKwlX,UAAUr7W,SAAQ,SAACs7W,GACtB,GAAI,CAAC,EAAAnqU,cAAcyB,oBAAqB,EAAAzB,cAAc0B,qBAAqB92C,SAASu/W,EAAYpzW,QAAS,CACvG,IAAM4U,GAAS,IAAAC,oBACT9X,EAAU6X,EAAOo2F,eAAeooQ,EAAYtqT,WAAW,GACvDuqL,EAAgBz+N,EAAOo2F,eAAeooQ,EAAY1iG,iBAClDt7O,EAAW,CAACthB,EAAGs/V,EAAYt/V,EAAGC,EAAGq/V,EAAYvoC,GACnD,UAAiB36D,cAAcngN,SAAShzD,EAASs2O,EAAej+M,U,0GChBxE,Q,IACA,O,uDAEMi+U,E,WACJ,aAAc,sCAIdtrG,qBAAuB,WACrB,OAAO,EAAK5+M,UAAU3nD,KAAI,SAAAqhN,GAAA,OAAOA,EAAIlqD,aALzB,KAQdzvG,qBAAuB,SAACoqT,GACtB,QAAmB5mT,IAAf4mT,EACF,MAAO,GAET,IAAK,IAAIrlX,EAAI,EAAGA,EAAIqlX,EAAWnlX,OAAQF,IAAK,CAC5B,IAAI,EAAJ,QAAYqlX,EAAWrlX,GAAG+zT,WAAYsxD,EAAWrlX,GAAG+8I,YAAasoO,EAAWrlX,GAAGipI,QACrFxnE,OAGV,OAAO,EAAKvG,WAjBA,KAoBdq5J,aAAe,WACb,OAAO,EAAKr5J,WArBA,KAwBdoqT,kBAAoB,aAxBN,KA4BdvpD,WAAa,SAACnnG,GAGZ,OAFA,EAAK15J,UAAU16D,KAAKo0N,GAEb,EAAK15J,WA/BA,KAkCdkmT,UAAY,SAACxsJ,GACX,IACMv7M,EADM,EAAK6hD,UAAU3nD,KAAK,SAAAgyW,GAAA,OAAWA,EAAQ3wJ,OAC/BnvN,QAAQmvN,GAK5B,OAJIv7M,GAAS,GACX,EAAK6hD,UAAU95D,OAAOiY,EAAO,GAGxB,EAAK6hD,WAzCA,KA4Cd7B,mBAAqB,WACnB,IAAK,IAAIr5D,EAAI,EAAKk7D,UAAUh7D,OAAS,EAAGF,GAAK,EAAGA,IAC9C,EAAKk7D,UAAUl7D,GAAG40N,IAAI1xM,SAKxB,OAFA,EAAKg4C,UAAY,GAEV,EAAKA,WAlDZzvD,KAAKyvD,UAAY,G,2DAsDjB,IAAMsqT,EAAQ,UAAU7xT,eAAe4gK,eAEvC,GAAIixJ,EAAMtlX,OAAS,EAAG,4BACpB,YAAoBslX,EAApB,+CAA2B,CACzB,GADyB,QACb5wJ,IAAIC,MAAMC,QAAQtiN,MAAM4xJ,SAClC,OAAO,GAHS,8EAQtB,OAAO,I,yCAIP,IAAMohN,EAAQ,UAAU7xT,eAAe4gK,eAEvC,GAAIixJ,EAAMtlX,OAAS,EAAG,4BACpB,YAAoBslX,EAApB,+CAA2B,KAAlBD,EAAkB,QACzB,GAAIA,EAAQ3wJ,IAAIC,MAAMC,QAAQtiN,MAAM4xJ,SAClC,OAAOmhN,GAHS,8EAQtB,OAAO,M,eAKIH,G,gICzFf,S,qDAEaK,iB,WACX,WAAYhyW,EAAI1B,EAAQ8oD,GAAyB,IAAdjmD,EAAc,uDAAH,GAAG,qBAC/CnJ,KAAKgI,GAAKA,EACVhI,KAAKqvD,WAAY,IAAAqC,gBACjB1xD,KAAKsG,OAASA,EACdtG,KAAKovD,UAAYA,EACjBpvD,KAAKmJ,SAAWA,E,4DAGH00C,GACb79C,KAAK69C,KAAOA,M,mHCZhB,I,EAAA,S,oCAEoCszE,EAAvBA,qBAAuB,WAAwB,IAAvB/pB,EAAuB,uDAAP,GAC7C6yQ,EAAW7yQ,EAAct/F,KAAI,SAAAnE,GAAA,OAAaA,EAAUqE,MAC1D,OAAO,UAAQmpH,qBAAqB8oP,GACjCpoV,MAAK,SAAAswE,GAAA,OAAYA,EAASluG,QAC1Bo+B,OAAM,SAAAp6B,GACLD,QAAQ4B,IAAI,qCAAqC,IAAI81H,MAAMz3H,S,0LCPjE,S,IACA,O,mDAEO,IAAMiiX,EAAyBA,EAAzBA,uBAAyB,CACpCC,YAAa,cACbz3W,KAAM,OACN03W,mBAAoB,qBACpBvhQ,aAAc,eACd5tG,SAAU,YAGNovW,EAAsB,CAC1BC,OAAQ,OACRC,KAAM,QACNC,SAAU,kBA8BNC,GAtBmCppP,EAA5BA,0BAA4B,SAAC0hF,EAAiB3hF,GAIzD,OAHI,UAAOvwH,aACT7I,QAAQ4B,IAAI,iBAAkBw3H,GAE3BxpH,MAAMC,QAAQkrM,IAA+C,iBAA1B,IAAO3hF,EAAP,0BAAOA,KAAoD,OAAnBA,GAC1E18H,OAAOmc,KAAKugH,GAAgB38H,QAGlCC,OAAOmc,KAAKugH,GAAgBhzH,SAAQ,SAAAs8W,GAClC,IAAMzjW,GAAeyjW,EACjB/2W,EAAYovM,EAAgBjnM,MAAK,SAAAzI,GAAA,OAAWA,EAAQ2E,KAAOiP,KAC3DtT,IAAcA,EAAU24K,eAK1B34K,EAAYg3W,EAA4BvpP,EAAespP,GAAoB/2W,OAGxEovM,GAbEA,GAgBgC,SAAC6nK,EAAgBxlK,GAAkC,IAAnBylK,EAAmB,wDACtFzvW,EAAOyvW,EAASD,EAAe10N,KAAO00N,EAAexvW,KACrD0vW,EAAYD,EAASD,EAAeG,UAAYH,EAAeE,UAC/D5jX,EAAQ2jX,EAASD,EAAeI,MAAQJ,EAAe1jX,MAEvDisR,EAA6B,aAAd23F,GAChB5jX,GACD,IAAAi5L,gBAAeilB,GAAgBl+M,GAC/B0hS,EAAqB,YAATxtR,GAA+B,WAATA,GACjCgqM,EAAgB+tE,GAChB/tE,EAAgB+tE,EACrB,OAAOyV,EAAW,EAAI,GAAMA,EAAS9zR,QAAQ,KASlCm2W,EAAiCA,EAAjCA,+BAAiC,SAACC,EAAYv3W,GAAc,MAEzBu3W,EAAWC,eAAlD34W,EAFgE,EAEhEA,MAAOE,EAFyD,EAEzDA,KAAMm2G,EAFmD,EAEnDA,aAAc5tG,EAFqC,EAErCA,SAClC,OAAQiwW,EAAWjhK,SACjB,KAAKigK,EAAuBC,YAC1Bx2W,EAAUnB,MAAQi4W,EAAmCS,EAAY14W,GACjE,MAEF,KAAK03W,EAAuBx3W,KAC1BiB,EAAUjB,KAAO+3W,EAAmCS,EAAYx4W,GAChE,MAEF,KAAKw3W,EAAuBE,mBAC1Bz2W,EAAUjB,KAAO+3W,EAAmCS,EAAYx4W,GAChEiB,EAAUnB,MAAQi4W,EAAmCS,EAAY14W,GACjE,MAEF,KAAK03W,EAAuBrhQ,aAC1Bl1G,EAAUk1G,aAAe4hQ,EAAmCS,EAAYriQ,GACxE,MAEF,KAAKqhQ,EAAuBjvW,SAC1BtH,EAAUm1G,eAAiB2hQ,EAAmCS,EAAYjwW,GAO9E,OAAOtH,GAQHg3W,EAA8B,WAAkC,IAAjCr+L,EAAiC,uDAAlB,GAAI34K,EAAc,aACpE,IAAKA,IAAc24K,EACjB,OAAO34K,EAGT,IAAMy3W,EAAejnQ,KAAKC,MAAMkoE,GAwBhC,OAtBI10K,MAAMC,QAAQuzW,GAChBA,EAAah9W,SAAQ,SAAAw8W,GAEnBj3W,EAAYs3W,EAA+BL,EAAgBj3W,MAG5B,iBAAxB,IAAOy3W,EAAP,0BAAOA,KAA+C,OAAjBA,GAO9C1mX,OAAOmc,KAAKuqW,GAAch9W,SAAQ,SAAA5G,GAC3B4jX,EAAa5jX,GAAKwjX,OAAUX,EAAoB7iX,KAGrDmM,EAAU02W,EAAoB7iX,IAAQijX,EAAmCW,EAAa5jX,GAAMmM,EAAU02W,EAAoB7iX,KAAO,OAGrImM,EAAU24K,aAAeA,EAElB34K,I,gFC5HOgsL,IAAT,SAAaJ,EAAMC,EAAMC,GAAsB,IAAlB4rL,EAAkB,uDAAb,EAAGjwW,EAAU,uDAAH,EACjD,GAAa,IAATmkL,EACF,QAASE,EAAK4rL,GAAM7rL,EAGtB,IAAM8rL,EAAOlxW,KAAK0nE,IAAI,EAAIy9G,EAAMC,GAC5B+rL,EAAOhsL,GAAQE,EAAK6rL,EAAOD,IAAQC,EAAO,GAGjC,IAATlwW,IACFmwW,GAAQ,EAAIhsL,GAGd,OAAQgsL,I,8LCnBV,Q,IACA,Q,uDAEqBl2H,E,YACnB,WAAYvmK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,oCACnB,EAAKuqE,oBAAqB,EAC1B,EAAKsjR,cAAgB,EAPc,E,qEAUhC5lW,GACH,IAAMs/E,EAAgF,KAAlEt/E,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2B,IAAY,EAAI,EAC9F,sGAAmBnP,EAAW,IAAI0hP,GAAO,EAAOpiK,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,sEAGS,WAAhEplE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,KAS7D8+E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,GAAIA,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,QAC3Di5N,IAAoBA,EAAgB/qG,SAAW+qG,EAAgB/qG,OAAOliG,eAAiBitM,EAAgB/qG,OAAOvlC,UACnH,OAAO,EAET,GAAIz/E,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KAAM,CACtE,GAAI+3F,GAAiBA,EAAcK,eAAiBL,EAAcK,cAAczL,mBAAoB,CAClG,IAAM00R,EAAQtpR,EAAcK,cAAczL,mBAAmBh7E,MAAK,SAAAyzT,GAAA,OAAgBA,EAAazsT,SAAb,KAA8B3Y,SAAS,QACzH,GAAIqhX,EACF,OAAOz6R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAChDK,GADgD,CAEnD,CAACE,SAAU,YAAaI,UAAWk6R,EAAM1oW,SAAN,cAIzC,OAAO,EAET,GAAIzP,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di5N,GAAmBA,EAAgB7hL,aAAe6hL,EAAgB7hL,WAAWuxC,UAAYswI,EAAgB7hL,WAAWprB,cACvH,OAAO,EAET,GAAI9iB,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di5N,GAAmBA,EAAgBpmC,QAAUomC,EAAgBpmC,MAAMlqG,UAAYswI,EAAgBpmC,MAAM7mK,cACxG,OAAO,EAET,GAAI9iB,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di5N,GAAmBA,EAAgB5hL,OAAS4hL,EAAgB5hL,KAAKsxC,UAAYswI,EAAgB5hL,KAAKrrB,cACrG,OAAO,EAET,GAAI9iB,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KAAM,CACtE,IAAKi5N,IAAoBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOvlC,WAAaswI,EAAgB/qG,OAAOliG,cAC5G,OAAO,EAET,IAAMs1V,EAAmBroJ,EAAgB/qG,OAAOqzP,oCAChD,OAAO36R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAA4CK,IAA5C,aAAkEy6R,KAEzH,OAAO16R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,OAK5E5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCAhFUu+J,G,4MCDAb,E,YACnB,WAAY1lK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,0CACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAI6gP,O,GAZtC,M,4BAEqBA,G,qJCFrB,Q,mDAEA,IAAMm3H,EAAsB,CAAC,QAAS,UAEjBj3H,E,YACnB,WAAY5lK,IAAS,gGACbA,IADa,SAYrB48R,kCAAoC,WAClC,IAAIE,EAAwB,GAC5B,OAAK,EAAKz1V,eAAkB,EAAKA,cAAcrT,UAG/C6oW,EAAoBv9W,SAAQ,SAAA85F,GACtB,EAAK/xE,cAAcrT,SAASolF,IAC9B0jR,EAAsB7mX,KAAK,CACzBmsF,SAAUgX,EACV5W,UAAW15E,MAAMC,QAAQ,EAAKse,cAAcrT,SAASolF,IACjD,EAAK/xE,cAAcrT,SAASolF,GAAU,GACtC,EAAK/xE,cAAcrT,SAASolF,QAI/B0jR,GAZEA,GAbT,EAAKt1W,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,sCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAI+gP,O,iCAVjBA,G,qJCJrB,Q,IACA,MACA,Q,uDAEqBH,E,YACnB,WAAYzlK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,OACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,oCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAI4gP,K,oCAGc,IAAtC5vO,EAAsC,wDAAhB6kG,EAAgB,uDAAJ,GACrC/gG,EAAY,UAAMtW,WAAWwD,gBAA7B8S,SACP,GAAIA,EAAU,CACZ,IAAM/C,GAAkB,IAAAhB,oBAAmB1U,KAAM2U,GACjD,GAAIA,IAAiBe,EAAiB,CACpC,IAAM09M,EAAkBpzN,KAAKU,YAAYA,YACL,IAAhC0yN,EAAgBl4M,OAAO9P,OACrBgoN,EAAgBj8K,QAAUi8K,EAAgBj8K,MAAM2rC,WAClDswI,EAAgBj8K,MAAM2rC,UAAW,GAE/BswI,EAAgB57K,UAAY47K,EAAgB57K,SAASsrC,WACvDswI,EAAgB57K,SAASsrC,UAAW,KAK5C,4GAAyBnuE,EAAc6kG,K,sCAMvC,IAAM45G,EAAkBpzN,KAAKU,YACvBssL,EAAQomC,EAAgBpmC,MAC1BA,IAAUhtL,KAAK8iF,UAAYkqG,EAAMlqG,WACnCkqG,EAAMlqG,UAAW,GAEkB,IAAhCswI,EAAgBl4M,OAAO9P,MAAgBpL,KAAK8iF,WAAYswI,EAAgBn7K,WACvEm7K,EAAgBn7K,UAAU6qC,WAC9BswI,EAAgBn7K,UAAU6qC,UAAW,O,iCA1CtByhK,G,qJCJrB,Q,IACA,MACA,Q,uDAEqBD,E,YACnB,WAAYxlK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,yCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAI2gP,K,oCAGc,IAAtC3vO,EAAsC,wDAAhB6kG,EAAgB,uDAAJ,GACrC/gG,EAAY,UAAMtW,WAAWwD,gBAA7B8S,SACP,GAAIA,EAAU,CACZ,IAAM/C,GAAkB,IAAAhB,oBAAmB1U,KAAM2U,GACjD,GAAIA,IAAiBe,EAAiB,CACpC,IAAM09M,EAAkBpzN,KAAKU,YAAYA,YACL,IAAhC0yN,EAAgBl4M,OAAO9P,OACrBgoN,EAAgB57K,WAAa47K,EAAgB57K,SAASsrC,WACxDswI,EAAgB57K,SAASsrC,UAAW,GAElCswI,EAAgB77K,OAAS67K,EAAgB77K,KAAKurC,WAChDswI,EAAgB77K,KAAKurC,UAAW,GAE9BswI,EAAgBj8K,OAASi8K,EAAgBj8K,MAAM2rC,WACjDswI,EAAgBj8K,MAAM2rC,UAAW,KAKzC,4GAAyBnuE,EAAc6kG,K,sCAIvC,IAAM45G,EAAkBpzN,KAAKU,YACQ,IAAhC0yN,EAAgBl4M,OAAO9P,MAAgBpL,KAAK8iF,WAAYswI,EAAgB5hL,MACvE4hL,EAAgB5hL,KAAKsxC,WACzBswI,EAAgB5hL,KAAKsxC,UAAW,O,iCAvCjBwhK,G,qJCJrB,Q,IACA,MACA,Q,uDAEqBG,E,YACnB,WAAY3lK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,QACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,qCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAI8gP,K,oCAOc,IAAtC9vO,EAAsC,wDAAhB6kG,EAAgB,uDAAJ,GACrC/gG,EAAY,UAAMtW,WAAWwD,gBAA7B8S,SACD26M,EAAkBpzN,KAAKU,YAAYA,YACnCgV,GAAkB,IAAAhB,oBAAmB1U,KAAM2U,GAiBjD,GAfI8D,KACE9D,GAAiBe,GACiB,IAAhC09M,EAAgBl4M,OAAO9P,OACrBgoN,EAAgB5hL,OAAS4hL,EAAgB5hL,KAAKsxC,WAChDswI,EAAgB5hL,KAAKsxC,UAAW,GAE9BswI,EAAgB77K,OAAS67K,EAAgB77K,KAAKurC,WAChDswI,EAAgB77K,KAAKurC,UAAW,GAE9BswI,EAAgBn7K,WAAam7K,EAAgBn7K,UAAU6qC,WACzDswI,EAAgBn7K,UAAU6qC,UAAW,KAKzCnuE,IAAiBe,EAAiB,CACpC,IAAMmmW,EAAmBzoJ,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,MACnBk+N,EAAWhxO,KAAK8S,SAAL,MACjB,GAAIk+N,KAAc6qI,GAAqB7qI,EAAS,KAAO6qI,EAAiB,IAAM,CAC5E,IAAMC,EAAsB1oJ,EAAgB5hL,KAAK9xB,qBAC3Cq8V,EAAYD,EAAoB90W,QAAO,SAAA2Y,GAC3C,QAAKA,EAAQnE,KAAK1I,SAAb,QAGe,OAAhBk+N,EAAS,GACJrxN,EAAQnE,KAAK1I,SAAb,MAA+B,KAAOk+N,EAAS,IAA4C,OAAtCrxN,EAAQnE,KAAK1I,SAAb,MAA+B,GAEtF6M,EAAQnE,KAAK1I,SAAb,MAA+B,KAAOk+N,EAAS,OAExDh5O,QAAQ4B,IAAI,WAAYo3O,EAAS,IACjCh5O,QAAQ4B,IAAI,YAAamiX,GACrBA,EAAUtnX,SACZ2+N,EAAgB5hL,KAAKrrB,cAAgB41V,EAAU,GAAGvgW,MAGlD43M,GAAmBA,EAAgBpmC,QAAUomC,EAAgBpmC,MAAMlqG,WACrEswI,EAAgBpmC,MAAMlqG,UAAW,GAGrC,4GAAyBnuE,EAAc6kG,K,sCAIvC,IAAM45G,EAAkBpzN,KAAKU,YACQ,IAAhC0yN,EAAgBl4M,OAAO9P,MAAgBpL,KAAK8iF,WAAYswI,EAAgB57K,UACvE47K,EAAgB57K,SAASsrC,WAC7BswI,EAAgB57K,SAASsrC,UAAW,GAElCswI,EAAgB5hL,OAClB4hL,EAAgB5hL,KAAKsxC,SAAW9iF,KAAK8iF,UAElC9iF,KAAK8iF,WAAYswI,EAAgBpmC,OAAUomC,EAAgBpmC,MAAMlqG,WACpEswI,EAAgBpmC,MAAMlqG,UAAW,O,iCA1ElB2hK,G,qJCJrB,Q,IACA,MACA,Q,uDAEqBu3H,E,YACnB,WAAYl9R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,OACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,oCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAIq4W,K,oCAGc,IAAtCrnW,EAAsC,wDAAhB6kG,EAAgB,uDAAJ,GACrC/gG,EAAY,UAAMtW,WAAWwD,gBAA7B8S,SACP,GAAIA,EAAU,CACZ,IAAM/C,GAAkB,IAAAhB,oBAAmB1U,KAAM2U,GACjD,GAAIA,IAAiBe,EAAiB,CACpC,IAAM09M,EAAkBpzN,KAAKU,YAAYA,YACL,IAAhC0yN,EAAgBl4M,OAAO9P,OACrBgoN,EAAgB57K,UAAY47K,EAAgB57K,SAASsrC,WACvDswI,EAAgB57K,SAASsrC,UAAW,GAElCswI,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKsxC,WAC/CswI,EAAgB5hL,KAAKsxC,UAAW,GAE9BswI,EAAgBj8K,QAAUi8K,EAAgBj8K,MAAM2rC,WAClDswI,EAAgBj8K,MAAM2rC,UAAW,GAE/BswI,EAAgBn7K,YAAcm7K,EAAgBn7K,UAAU6qC,WAC1DswI,EAAgBn7K,UAAU6qC,UAAW,KAK7C,4GAAyBnuE,EAAc6kG,K,2CAIvC,IAAM45G,EAAkBpzN,KAAKU,YAE7B,OAAwC,IAAhC0yN,EAAgBl4M,OAAO9P,MAAegoN,GAAmBA,EAAgBpmC,OAASomC,EAAgBpmC,MAAM7mK,eAC3GitM,EAAgBpmC,MAAM7mK,iBAAmBitM,EAAgBpmC,MAAM7mK,cAAcrT,SAAS,eACjB,MAAlEsgN,EAAgBpmC,MAAM7mK,cAAcrT,SAAS,cAAc,M,6CAInE,IAAM0tE,GAAaA,EAAbA,6GAON,OANIxgF,KAAKgmF,sBACPxF,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW,MAGRd,M,iCAtDUw7R,G,qJCJrB,QACA,Q,uDAEqBC,E,YACnB,WAAYn9R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,QACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,qCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAIs4W,K,kCAGxBtnW,GAA8B,IAAhB6kG,EAAgB,uDAAJ,GAC9B45G,EAAkBpzN,KAAKU,YAAYA,YACnCgV,GAAkB,IAAAhB,oBAAmB1U,KAAM2U,GACjD,GAAIA,IAAiBe,EAAiB,CACpC,GAAI09M,GAAmBA,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKrrB,cAAe,CACjF,IAAM01V,EAAmBzoJ,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,MACnBk+N,EAAWhxO,KAAK8S,SAAL,MACjB,GAAIk+N,KAAc6qI,GAAqB7qI,EAAS,KAAO6qI,EAAiB,IAAM,CAC5E,IAAMC,EAAsB1oJ,EAAgB5hL,KAAK9xB,qBAC3Cq8V,EAAYD,EAAoB90W,QAAO,SAAA2Y,GAC3C,QAAKA,EAAQnE,KAAK1I,SAAb,QAGe,OAAhBk+N,EAAS,GACJrxN,EAAQnE,KAAK1I,SAAb,MAA+B,KAAOk+N,EAAS,IAA4C,OAAtCrxN,EAAQnE,KAAK1I,SAAb,MAA+B,GAEtF6M,EAAQnE,KAAK1I,SAAb,MAA+B,KAAOk+N,EAAS,OAExDh5O,QAAQ4B,IAAI,WAAYo3O,EAAS,IACjCh5O,QAAQ4B,IAAI,YAAamiX,GACrBA,EAAUtnX,SACZ2+N,EAAgB5hL,KAAKrrB,cAAgB41V,EAAU,GAAGvgW,OAIpD43M,GAAmBA,EAAgBj8K,OAASi8K,EAAgBj8K,MAAMhxB,gBAAkBitM,EAAgBj8K,MAAM2rC,WAC5GswI,EAAgBj8K,MAAM2rC,UAAW,IAGrC,qGAAkBnuE,EAAc6kG,K,2CAIhC,IAAM45G,EAAkBpzN,KAAKU,YACvBw7W,EAAY9oJ,GAAmBA,EAAgBj8K,OAASi8K,EAAgBj8K,MAAMhxB,gBAC9EitM,EAAgBj8K,MAAM2rC,SAI5B,OAHIo5R,IAAcl8W,KAAK8iF,WACrB9iF,KAAK8iF,UAAW,GAEXo5R,I,sCAIP,IAAM9oJ,EAAkBpzN,KAAKU,YACzB0yN,EAAgB5hL,OAClB4hL,EAAgB5hL,KAAKsxC,SAAW9iF,KAAK8iF,UAElC9iF,KAAK8iF,WAAYswI,EAAgBj8K,OAAUi8K,EAAgBj8K,MAAM2rC,WACpEswI,EAAgBj8K,MAAM2rC,UAAW,O,iCA7DlBm5R,G,gKCHrB,QACA,Q,uDAEqBE,E,YACnB,WAAYr9R,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,SAgErCs9R,sCAAwC,WAItC,OAHgD,MAA5C,EAAKC,sCACP,EAAKA,oCAAsC,EAAK58V,yBAAyB1hB,MAAM,SAAS,IAEnF,EAAKs+W,qCAlEZ,EAAKp5R,WAAaA,EAClB,EAAK38E,OAAS,mBACd,EAAKuV,SAAW,mBAChB,EAAKD,OAAS,mBACd,EAAK2U,SAAU,EACf,EAAK7U,YAAc,gDACnB,EAAKuqE,oBAAqB,EAC1B,EAAKoxK,sBAAuB,EAC5B,EAAKr0K,eAAgB,EAVc,E,qEAahCr/E,GAIH,GAHIA,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC3Y,SAAS,aAChFwJ,EAAUmP,SAAV,KAA6B,CAAC,MAEhC,qBAAwB,CACtB,IAAMmwE,EAAat/E,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,GAAK,EACjF,sGAAmBnP,EAAW,IAAIw4W,GAAgB,EAAOl5R,IAAa,EAAqB,IAAfA,EAAmB,WAAa,iBAE9G,IAAMA,EAAat/E,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,IAChF,sGAAmBnP,EAAW,IAAIw4W,GAAgB,EAAOl5R,IAAa,EAAqB,MAAfA,EAAqB,WAAa,mB,gCAGtG/nE,GAER,GAAoB,IAAhBA,EAAO9P,KAAY,CACrB,IAAMi9G,EAASroH,KAAKU,YAAY2nH,OAEhC,GAAOA,IAAUA,EAAOvlC,UAAaulC,EAAOliG,eAAkBkiG,EAAOliG,cAAc0gE,OAAUwhC,EAAOliG,cAAc0gE,MAAM9nF,IAEtH,YADA,qGAKJ,0GAAuBmc,K,8CAG6D,IAAhE2C,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAC1EpuF,EAASyG,KAAKU,YAEpB,OAAKnH,EAAO8uH,SAAU9uH,EAAO8uH,OAAOvlC,UAAavpF,EAAO8uH,OAAOliG,eAAkB5sB,EAAO8uH,OAAOliG,cAAc0gE,OAAUttF,EAAO8uH,OAAOliG,cAAc0gE,MAAM9nF,IAGlJ,GAFEiB,KAAK+nF,8CAA8ClqE,EAAa8pE,GAAyB,K,6CAMlG,IAAMnH,GAAaA,EAAbA,6GACA4yI,EAAkBpzN,KAAKU,YAC7B,GAAI0yN,GAAmBA,EAAgB/qG,SAAW+qG,EAAgB/qG,OAAOvlC,UAAYswI,EAAgB/qG,OAAOliG,cAAe,CACzH,IAAMs1V,EAAmBroJ,EAAgB/qG,OAAOqzP,oCAOhD,OANKD,EAAiBx7W,MAAK,SAAAmhF,GAAA,MAAoC,UAAvBA,EAAUF,aAChDV,EAAWzrF,KAAK,CACdmsF,SAAU,QACVI,UAAW,OAGf,wBAAWd,IAAX,aAA0Bi7R,IAE5B,OAAOj7R,I,sEAUqG,WAAhE3iE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAevV,OAAOC,UAAUsV,EAAYolE,YAAa,CAC3D,IAAI8D,SACEhG,EAAQljE,EAAYu+V,wCAEtBp7R,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,IAIpCipE,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAAD,OAAa09E,IAAU19E,EAAQ+4W,4CAGvD3nX,UACrBsyF,EAAoBD,EAAmBh7E,MAAK,SAACzI,GAC3C,OAAOA,EAAQs9E,gCAAgCK,SAG/C+F,EAAoBD,EAAmB,MAG3CA,EAAqBC,EAAoB,CAACA,GAAqB,IAC5C3oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCApGUq1R,G,uNCDAG,E,YACnB,WAAYx9R,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,SA2DrCs9R,sCAAwC,WAItC,OAHgD,MAA5C,EAAKC,sCACP,EAAKA,oCAAsC,EAAK58V,yBAAyB1hB,MAAM,SAAS,IAEnF,EAAKs+W,qCA7DZ,EAAKp5R,WAAaA,EAClB,EAAK38E,OAAS,0BACd,EAAKuV,SAAW,0BAChB,EAAK0U,SAAU,EACf,EAAK7U,YAAc,uDACnB,EAAKuqE,oBAAqB,EAC1B,EAAKoxK,sBAAuB,EAC5B,EAAKr0K,eAAgB,EATc,E,qEAYhCr/E,GACCA,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC3Y,SAAS,aAChFwJ,EAAUmP,SAAV,KAA6B,CAAC,MAEhC,IAAMmwE,EAAat/E,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,IAChF,sGAAmBnP,EAAW,IAAI24W,GAAsB,EAAOr5R,IAAa,EAAqB,MAAfA,EAAqB,WAAa,mB,6CAIpH,IAAMzC,GAAaA,EAAbA,6GACA4yI,EAAkBpzN,KAAKU,YAC7B,GAAI0yN,GAAmBA,EAAgB/qG,SAAW+qG,EAAgB/qG,OAAOvlC,UAAYswI,EAAgB/qG,OAAOliG,cAAe,CACzH,IAAMs1V,EAAmBroJ,EAAgB/qG,OAAOqzP,oCAOhD,OANKD,EAAiBx7W,MAAK,SAAAmhF,GAAA,MAAoC,UAAvBA,EAAUF,aAChDV,EAAWzrF,KAAK,CACdmsF,SAAU,QACVI,UAAW,OAGf,wBAAWd,IAAX,aAA0Bi7R,IAE5B,OAAOj7R,I,gCAGCtlE,GAER,GAAoB,IAAhBA,EAAO9P,KAAY,CACrB,IAAMi9G,EAASroH,KAAKU,YAAY2nH,OAEhC,GAAOA,IAAUA,EAAOvlC,UAAaulC,EAAOliG,eAAkBkiG,EAAOliG,cAAc0gE,OAAUwhC,EAAOliG,cAAc0gE,MAAM9nF,IAEtH,YADA,qGAKJ,0GAAuBmc,K,8CAG6D,IAAhE2C,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAC1EpuF,EAASyG,KAAKU,YAEpB,OAAKnH,EAAO8uH,SAAU9uH,EAAO8uH,OAAOvlC,UAAavpF,EAAO8uH,OAAOliG,eAAkB5sB,EAAO8uH,OAAOliG,cAAc0gE,OAAUttF,EAAO8uH,OAAOliG,cAAc0gE,MAAM9nF,IAGlJ,GAFEiB,KAAK+nF,8CAA8ClqE,EAAa8pE,GAAyB,K,sEAYU,WAAhE9pE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAevV,OAAOC,UAAUsV,EAAYolE,YAAa,CAC3D,IAAI8D,SACEhG,EAAQljE,EAAYu+V,wCAEtBp7R,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,IAIpCipE,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAAD,OAAa09E,IAAU19E,EAAQ+4W,4CAGvD3nX,UACrBsyF,EAAoBD,EAAmBh7E,MAAK,SAACzI,GAC3C,OAAOA,EAAQs9E,gCAAgCK,SAG/C+F,EAAoBD,EAAmB,MAG3CA,EAAqBC,EAAoB,CAACA,GAAqB,IAC5C3oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,GAjGX,M,4BAEqBw1R,G,qJCFrB,Q,IACA,MACA,Q,uDAEqBt3H,E,YACnB,WAAYlmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,WACd,EAAKuV,SAAW,WAChB,EAAKH,YAAc,0DACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAIqhP,K,oCAGc,IAAtCrwO,EAAsC,wDAAhB6kG,EAAgB,uDAAJ,GACrC/gG,EAAY,UAAMtW,WAAWwD,gBAA7B8S,SACP,GAAIA,EAAU,CACZ,IAAM/C,GAAkB,IAAAhB,oBAAmB1U,KAAM2U,GACjD,GAAIA,IAAiBe,EAAiB,CACpC,IAAM09M,EAAkBpzN,KAAKU,YAAYA,YACL,IAAhC0yN,EAAgBl4M,OAAO9P,OACrBgoN,EAAgBn7K,YAAcm7K,EAAgBn7K,UAAU6qC,WAC1DswI,EAAgBn7K,UAAU6qC,UAAW,GAEnCswI,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKsxC,WAC/CswI,EAAgB5hL,KAAKsxC,UAAW,KAKxC,4GAAyBnuE,EAAc6kG,K,sCAIvC,IAAM45G,EAAkBpzN,KAAKU,YASQ,IAAhC0yN,EAAgBl4M,OAAO9P,MAAgBpL,KAAK8iF,WAAYswI,EAAgBj8K,OACvEi8K,EAAgBj8K,MAAM2rC,WAC1BswI,EAAgBj8K,MAAM2rC,UAAW,O,iCA5ClBkiK,G,gKCJrB,Q,IACA,QACA,Q,uDAEqB5B,E,YACnB,WAAYtkK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAKsnE,eAAgB,EACrB,EAAKiD,oBAAqB,EAC1B,EAAKsjR,cAAgB,EACrB,EAAKlyG,sBAAuB,EACxBv4K,IACF,EAAKljD,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAfgB,E,qEAqBhCp4B,GACH,IAAMs/E,EAAgF,KAAlEt/E,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2B,IAAY,EAAI,EAC9F,sGAAmBnP,EAAW,IAAIy/O,GAAW,EAAOngK,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,sCAGzF,WACdjjF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMsvF,EAAYpyK,KAAKU,YAAY0xK,UAC/BA,IACFA,EAAUtvF,SAAW9iF,KAAK8iF,UAE5B,IAAMqvF,EAAenyK,KAAKU,YAAYyxK,aAClCA,IACFA,EAAarvF,SAAW9iF,KAAK8iF,Y,6CAK/B,IAAMtC,GAAaA,EAAbA,6GACN,wBACE,OAAOA,EAET,IAAM0R,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IACvDu0W,EAAgBnpJ,GAAmBA,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKrrB,gBAAkBitM,EAAgB5hL,KAAKsxC,SACvH05R,EAAqBppJ,GAAmBA,EAAgBn7K,WAAam7K,EAAgBn7K,UAAU9xB,gBAAkBitM,EAAgBn7K,UAAU6qC,SAWjJ,OAVAtC,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAWi7R,GAAiD,IAA9BrqR,EAAch3E,OAAO9P,MAAeoxW,EAAsB,IAAM,MAE5FD,GAAiBnpJ,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,OACnB0tE,EAAWzrF,KAAK,CACdmsF,SAAU,QACVI,UAAW8xI,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,QAGR0tE,I,mDAIP,OAAOxgF,KAAKygF,uBAAuBz5E,QAAO,SAAAqqT,GACxC,MAA+B,SAAxBA,EAAWnwO,UAA+C,UAAxBmwO,EAAWnwO,c,sEAIsD,WAAhErjE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,KAM7D8+E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,wBAAwB,CACtB,GAAIA,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,QAC3Di5N,IAAoBA,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKsxC,WAAaswI,EAAgB5hL,KAAKrrB,eACxG,OAAO46D,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,GAE/F,GAAkC,IAA9BkR,EAAch3E,OAAO9P,MAAc/H,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAChGi5N,GAAmBA,EAAgB/qG,SAAW+qG,EAAgB/qG,OAAOvlC,WAAaswI,EAAgB/qG,OAAOliG,eAC5G,OAAO46D,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,GAE/F,GAAI39E,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KAAM,CACtE,IAAKi5N,IAAoBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOvlC,WAAaswI,EAAgB/qG,OAAOliG,cAC5G,OAAO,EAET,IAAMs1V,EAAmBroJ,EAAgB/qG,OAAOqzP,oCAChD,OAAO36R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAA4CK,IAA5C,aAAkEy6R,UAEpH,CACL,GAAIp4W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KAAM,CACtE,IAAMsiX,EAAkBrpJ,GAAmBA,EAAgB/qG,SAAW+qG,EAAgB/qG,OAAOvlC,UACxFswI,EAAgB/qG,OAAOliG,cACtBs1V,EAAmBroJ,GAAmBA,EAAgB/qG,OACxD+qG,EAAgB/qG,OAAOqzP,oCACvB,GACJ,OAAO36R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAChDK,GADgD,CAC7B,CACpBE,SAAU,SACVI,UAAWm7R,EAAkB,IAAM,OAHc,aAI7ChB,KAEH,GAAIp4W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACvE,SAAKi5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,iBAGjG46D,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,IAGjG,OAAO,MAKU5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCAnIUs8J,G,gKCJrB,Q,IACA,QACA,Q,IACA,Q,uDAEqBs5H,E,YACnB,WAAY59R,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,0CACnB,EAAKsnE,eAAgB,EACrB,EAAKiD,oBAAqB,EAC1B,EAAKsjR,cAAgB,EACrB,EAAKlyG,sBAAuB,EACxBv4K,IACF,EAAKljD,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAfgB,E,qEAqBhCp4B,GACH,IAAMs/E,EAAgF,KAAlEt/E,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2B,IAAY,EAAI,EAC9F,sGAAmBnP,EAAW,IAAI+4W,GAAY,EAAOz5R,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,sCAG1F,WACdjjF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,c,6CAKpC,IAAMtC,GAAaA,EAAbA,6GACN,wBACE,OAAOA,EAET,IACM2yI,EADgBnzN,KAAKU,YACYwa,OAAOsD,MAAM,UAAgBxW,IASpE,OAPsBmrN,GAAoBA,EAAiB/7K,MAAQ+7K,EAAiB/7K,KAAKjxB,gBAAkBgtM,EAAiB/7K,KAAK0rC,UAE/HtC,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW6xI,EAAiB/7K,KAAKjxB,cAAcrT,SAApC,YAGR0tE,I,mDAIP,OAAOxgF,KAAKygF,uBAAuBz5E,QAAO,SAAAqqT,GACxC,MAA+B,cAAxBA,EAAWnwO,c,sEAIwF,WAAhErjE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrByyN,EAAmBjhI,EAAch3E,OAAOsD,MAAM,UAAgBxW,IAC9DorN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IACvDovC,EAAO+7K,EAAiB/7K,KAQxBulU,EAAsBA,GAAtBA,qBAA0B37R,GAA1B,CAA6C,CACjDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgBpmC,OAASomC,EAAgBpmC,MAAM7mK,eAC1EitM,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACCsgN,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACA,QAEA8pW,EAA2BA,GAA3BA,qBAA+B57R,GAA/B,CAAkD,CACtDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB7hL,YAAc6hL,EAAgB7hL,WAAWprB,eACpFitM,EAAgB7hL,WAAWprB,cAAcrT,SAAzC,MACCsgN,EAAgB7hL,WAAWprB,cAAcrT,SAAzC,MACA,QAEA+pW,EAAuBA,GAAvBA,qBAA2B77R,GAA3B,CAA8C,CAClDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOliG,eAC5EitM,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACCsgN,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACA,SAENg0E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,yBAwBE,OAAI09E,IAAU19E,EAAQoc,2BAGlBpc,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCi8R,GAE7Cv5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCg8R,GAE7Ct5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCk8R,KAE7Cx5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,QAC3Di5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,iBAInG9iB,EAAQs9E,gCAAgCK,IAxC/C,GAAI39E,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di9C,IAASA,EAAK0rC,UAAY1rC,EAAKjxB,cAClC,OAAO46D,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAChDK,GADgD,CAEnD,CAACE,SAAU,YAAaI,UAAWlqC,EAAKjxB,cAAcrT,SAAnB,cAGvC,GAAIzP,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di5N,GAAmBA,EAAgB7hL,aAAe6hL,EAAgB7hL,WAAWuxC,UAAYswI,EAAgB7hL,WAAWprB,cACvH,OAAO,EAET,GAAI9iB,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di5N,GAAmBA,EAAgBpmC,QAAUomC,EAAgBpmC,MAAMlqG,UAAYswI,EAAgBpmC,MAAM7mK,cACxG,OAAO,EAET,GAAI9iB,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KAAM,CACtE,IAAKi5N,IAAoBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOvlC,WAAaswI,EAAgB/qG,OAAOliG,cAC5G,OAAO,EAET,IAAMs1V,EAAmBroJ,EAAgB/qG,OAAOqzP,oCAChD,OAAO36R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAA4CK,IAA5C,aAAkEy6R,KAuB3H,OAAO16R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,OAK5E5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCAxJU41R,G,qJCLrB,QACA,Q,uDAEqB53H,E,YACnB,WAAYhmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,OACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,qCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,QAAIA,EAAUmP,UAAYnP,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,WAGjH,+FAAmB53F,EAAW,IAAImhP,K,sCAIlC,IAAMg4H,EAAgB98W,KAAKU,YAAY+nH,OACnCq0P,IACFA,EAAch6R,SAAW9iF,KAAK8iF,c,iCAnBfgiK,G,qJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAYjmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,uCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,GAAIA,EAAUmP,UAAYnP,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,QAC/G,OAAO,EAET,IAAMwhR,EAAgBp5W,EAAUmP,SAAV,UAQtB,OAPIiqW,GAAiBA,EAAc5iX,SAAS,MAC1C,EAAAg+B,SAASytH,WAAWxnJ,SAAQ,SAAAi6F,GACrB0kR,EAAc5iX,SAASk+F,IAC1B0kR,EAAchoX,KAAKsjG,OAIzB,+FAAmB10F,EAAW,IAAIohP,K,+CAIlC,IAAMttI,EAAaz3G,KAAKU,YAAY02C,KAChCi6Q,EAAa,GACjB,GAAI55M,GAAcA,EAAWtxF,cAAe,CAC1C,IAAMmrS,EAAW75M,EAAWtxF,cAAcrT,SAAzB,UACbw+S,GAA0B,MAAbA,IAAsBA,EAASn3T,SAAS,OACvDk3T,EAAA,UAA0BzpT,MAAMC,QAAQypT,GAAYA,EAAS,GAAKA,GAEpE,IAAMmhD,EAAiBh7P,EAAWtxF,cAAcrT,SAAzB,WACnB2/V,GAAsC,MAAnBA,IAA4BA,EAAet4W,SAAS,OACzEk3T,EAAA,WAA2BohD,GAG/B,OAAOphD,I,6CAIP,IAAM7wO,GAAaA,EAAbA,6GACAgxO,EAAsBxxT,KAAKyxT,yBAUjC,MATA,CAAC,YAAa,cAAcrzT,SAAQ,SAAA8iF,GAC9BswO,EAAoBtwO,IACtBV,EAAWzrF,KAAK,CACdmsF,WACAI,UAAWkwO,EAAoBtwO,QAK9BV,I,sCAIP,IAAMs8R,EAAgB98W,KAAKU,YAAY02C,KACnC0lU,IACFA,EAAch6R,SAAW9iF,KAAK8iF,c,iCA1DfiiK,G,wLCDAi4H,E,YACnB,WAAYl+R,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,6CAEnB,EAAK28R,gBAAkB,OACvB,EAAK9+L,uBAAwB,EARM,E,8BAHvC,Q,mBAEqByjQ,G,4MCAAC,E,YACnB,WAAYn+R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,UACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,wCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GACH,sGAAmBA,EAAW,IAAIs5W,O,GAZtC,M,4BAEqBA,G,4MCAAC,E,YACnB,WAAYp+R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,uCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GACH,sGAAmBA,EAAW,IAAIu5W,O,GAZtC,M,4BAEqBA,G,yJCFrB,QAEA,Q,IACA,MACA,S,IACA,Q,uDAGqB55H,E,YACnB,WAAYxkK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKmnE,eAAgB,EACrB,EAAKumR,cAAgB,EACrB,EAAK7tV,YAAc,2CACnB,EAAKuqE,oBAAqB,EARS,E,qEAWhCtiF,GACH,IAAMs/E,EAA+E,OAAjEt/E,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,IAAc,EAAI,EAC/F,sGAAmBnP,EAAW,IAAI2/O,GAAa,EAAOrgK,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,0CAGvFgC,GAElB,IAAMiN,EAAgBlyF,KAAKU,YAC3B,IAAKwxF,EAAcC,aAAeD,EAAcC,WAAWhsE,cACzD,OAAO8+D,EAGT,IAAMjvE,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5Cm2F,EAAmBn2F,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,UAAfA,EAAMxf,QAC1D,IAAK01G,EACH,OAAOlnB,EAGT,IAAMk4R,GAAyB,IAAA79R,qBAAoB4S,EAAcC,WAAWhsE,cAAenQ,EAAcm2F,GACzG,OAAKgxQ,EAILl4R,GAAW,aAAQA,GAAU,SAACtlE,GAC5B,IAAM+sF,GAAmB,IAAAptB,qBAAoB3/D,EAAQnE,KAAMxF,EAAcm2F,GACzE,QAAKO,GAGEA,EAAiB1kG,KAAOm1W,EAAuBn1W,KACrD,CAAC,SATKi9E,I,sCAaK,WACdjlF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMqP,EAAanyF,KAAKU,YAAYyxF,WACpC,GAAIA,GAAcA,EAAWrP,WAAa9iF,KAAK8iF,SAAU,CACvDqP,EAAWrP,SAAW9iF,KAAK8iF,SAC3BqP,EAAWrL,mBAAmB1oF,SAAQ,SAAC2oF,GACrCA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMsvF,EAAYpyK,KAAKU,YAAY0xK,UAC/BA,IACFA,EAAUtvF,SAAW9iF,KAAK8iF,a,kCAKpBnuE,GACV,IAAMpb,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,GAClBpb,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAO44K,aAAahsJ,cAAgBnmB,KAEtCA,KAAK4mF,mB,wCAGWw2R,GAChB,OAAOA,EAAgBp2W,QAAO,SAAAq2W,GAAA,OAAgD,IAA9BA,EAAep6R,gB,gCAGvD/nE,GACR,IAAMi3E,EAAanyF,KAAKU,YAAYyxF,YAChCA,IAAeA,EAAWrP,UAAaqP,EAAWsnF,qBAItD,mGAAgBv+J,IAHd,uG,6CAOF,IAAIslE,GAAaA,EAAbA,6GACE0R,EAAgBlyF,KAAKU,YAQ3B,OAPIwxF,EAAcC,YAAcD,EAAcC,WAAWhsE,eACpD+rE,EAAcC,WAAWhsE,cAAcrT,SAAvC,iBACH0tE,EAAWzrF,KAAK,CACdmsF,SAAU,kBACVI,UAAW4Q,EAAcC,WAAWhsE,cAAcrT,SAAvC,kBAGR0tE,I,sEAGqG,WAAhE3iE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,KAE7D8+E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,SAAIA,EAAQyP,SAAR,OAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,WAC3Di5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,iBAGjG46D,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,SAO9E5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCA/HUw8J,G,gKCRrB,Q,IACA,Q,IACA,QACA,Q,uDAEqBI,E,YACnB,WAAY5kK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,iBACd,EAAKuV,SAAW,iBAChB,EAAKH,YAAc,4CACnB,EAAKuqE,oBAAqB,EAC1B,EAAKsjR,cAAgB,EACrB,EAAKlyG,sBAAuB,EACxBv4K,IACF,EAAKljD,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAdgB,E,qEAoBhCp4B,GACH,IAAMs/E,EAAgF,KAAlEt/E,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2B,IAAY,EAAI,EAkB9F,OAjBIlL,MAAMC,QAAQlE,EAAUmP,SAAV,YAA2E,MAAvCnP,EAAUmP,SAAV,UAAgC,KAC/EnP,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,UAAgC/d,KAAK,MAElC4O,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,UAAgC/d,KAAK,OAGrC4O,EAAUmP,SAAV,aACEnP,EAAUmP,SAAV,WAAiC3Y,SAAS,YAAcwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,QAGtGwJ,EAAUmP,SAAV,UAAkC,EAAAqlB,SAASC,KAExCz0B,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,EAAAqlB,SAASE,KAE5C,+FAAmB10B,EAAW,IAAI+/O,GAAc,EAAOzgK,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,sCAG5F,WACdjjF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMswI,EAAkBpzN,KAAKU,YAAYwa,OAAOsD,MAAM,UAAUxW,IAC5DorN,GAAmBA,EAAgB57K,WACrC47K,EAAgB57K,SAASsrC,SAAW9iF,KAAK8iF,Y,kCAIjCnuE,GAA8B,IAAhB6kG,EAAgB,uDAAJ,GAC9BjgH,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,EAAc6kG,GAChCjgH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAOg5F,cAAcpsE,cAAgBnmB,KAEvCA,KAAK4mF,mB,6CAIL,IAAMpG,GAAaA,EAAbA,6GACN,wBACE,OAAOA,EAET,IACM2yI,EADgBnzN,KAAKU,YACYwa,OAAOsD,MAAM,UAAgBxW,IASpE,OAPAw4E,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW6xI,GAAoBA,EAAiB/7K,MAAQ+7K,EAAiB/7K,KAAKjxB,gBAC1EgtM,EAAiB/7K,KAAK0rC,UAAYqwI,EAAiB/7K,KAAKqiI,oBACxD05C,EAAiB/7K,KAAKjxB,cAAcrT,SAApC,UACA,CAAC,OAEA0tE,I,mDAIP,OAAOxgF,KAAKygF,uBAAuBz5E,QAAO,SAAAqqT,GACxC,MAA+B,cAAxBA,EAAWnwO,c,sEAIwF,WAAhErjE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrByyN,EAAmBjhI,EAAch3E,OAAOsD,MAAM,UAAgBxW,IAC9DorN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IACvDovC,EAAO+7K,EAAiB/7K,KAQ1BulU,EAAsBA,GAAtBA,qBAA0B37R,IACxBs8R,EAAgBlqJ,GAAmBA,EAAgBj8K,QAAUi8K,EAAgBj8K,MAAM2rC,UAAYswI,EAAgBj8K,MAAMhxB,cACvHitM,GAAmD,IAAhCA,EAAgBl4M,OAAO9P,MAC5CuxW,EAAoB5nX,KAAK,CACvBmsF,SAAU,WACVI,UAAWg8R,EAAgB,EAAAnlV,SAASE,GAAK,OAG7CskV,EAAoB5nX,KAAK,CACvBmsF,SAAU,QACVI,UAAWg8R,EACPlqJ,EAAgBj8K,MAAMhxB,cAAcrT,SAApC,OAAyD,KACzDsgN,GACCA,EAAgBpmC,OAChBomC,EAAgBpmC,MAAM7mK,eACtBitM,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACCsgN,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACA,OAGR,IAAM8pW,EAA2BA,GAA3BA,qBAA+B57R,GAA/B,CAAkD,CACtDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB7hL,YAAc6hL,EAAgB7hL,WAAWprB,eACpFitM,EAAgB7hL,WAAWprB,cAAcrT,SAAzC,MACCsgN,EAAgB7hL,WAAWprB,cAAcrT,SAAzC,MACA,QAEA+pW,EAAuBA,GAAvBA,qBAA2B77R,GAA3B,CAA8C,CAClDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOliG,eAC5EitM,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACCsgN,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACA,SAENg0E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,yBAwBE,OAAI09E,IAAU19E,EAAQoc,2BAGlBpc,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCi8R,GAE7Cv5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCg8R,GAE7Ct5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCk8R,KAE7Cx5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,QAC3Di5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,iBAInG9iB,EAAQs9E,gCAAgCK,IAxC/C,GAAI39E,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di9C,IAASA,EAAK0rC,UAAY1rC,EAAKjxB,cAClC,OAAO46D,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAChDK,GADgD,CAEnD,CAACE,SAAU,YAAaI,UAAWlqC,EAAKjxB,cAAcrT,SAAnB,cAGvC,GAAIzP,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di5N,GAAmBA,EAAgB7hL,aAAe6hL,EAAgB7hL,WAAWuxC,UAAYswI,EAAgB7hL,WAAWprB,cACvH,OAAO,EAET,GAAI9iB,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC7Di5N,GAAmBA,EAAgBpmC,QAAUomC,EAAgBpmC,MAAMlqG,UAAYswI,EAAgBpmC,MAAM7mK,cACxG,OAAO,EAET,GAAI9iB,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KAAM,CACtE,IAAKi5N,IAAoBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOvlC,WAAaswI,EAAgB/qG,OAAOliG,cAC5G,OAAO,EAET,IAAMs1V,EAAmBroJ,EAAgB/qG,OAAOqzP,oCAChD,OAAO36R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAA4CK,IAA5C,aAAkEy6R,KAuB3H,OAAO16R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,OAK5E5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCApMU48J,G,gKCLrB,Q,IACA,Q,IACA,QACA,Q,uDAEqBM,E,YAEnB,WAAYllK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAKsnE,eAAgB,EACrB,EAAKumR,cAAgB,EACrB,EAAKtjR,oBAAqB,EARS,E,qEAWhCtiF,GACCiE,MAAMC,QAAQlE,EAAUmP,SAAV,YAA2E,MAAvCnP,EAAUmP,SAAV,UAAgC,KAC/EnP,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,UAAgC/d,KAAK,MAElC4O,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,UAAgC/d,KAAK,OAGrC4O,EAAUmP,SAAV,aACEnP,EAAUmP,SAAV,WAAiC3Y,SAAS,YAAcwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,QAOtGwJ,EAAUmP,SAAV,UAAkC,EAAAqlB,SAASC,KAExCz0B,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,EAAAqlB,SAASE,IAE5C,IAAM4qD,EAA+E,OAAjEt/E,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,IAAc,EAAI,EAC/F,sGAAmBnP,EAAW,IAAIqgP,GAAa,EAAO/gK,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,kCAG/FtuE,GAA8B,IAAhB6kG,EAAgB,uDAAJ,GAC9BjgH,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,EAAc6kG,GAChCjgH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAOi5F,aAAarsE,cAAgBnmB,KAEtCA,KAAK4mF,mB,6CAIL,IAAMpG,GAAaA,EAAbA,6GAEA2yI,EADgBnzN,KAAKU,YACYwa,OAAOsD,MAAM,UAAgBxW,IASpE,OAPAw4E,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW6xI,GAAoBA,EAAiB/7K,MAAQ+7K,EAAiB/7K,KAAKjxB,gBAC1EgtM,EAAiB/7K,KAAK0rC,UAAYqwI,EAAiB/7K,KAAKqiI,oBACxD05C,EAAiB/7K,KAAKjxB,cAAcrT,SAApC,UACA,CAAC,OAEA0tE,I,mDAIP,OAAOxgF,KAAKygF,uBAAuBz5E,QAAO,SAAAqqT,GACxC,MAA+B,cAAxBA,EAAWnwO,c,sEAIwF,WAAhErjE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IAQzD20W,EAAsBA,GAAtBA,qBAA0B37R,IACxBs8R,EAAgBlqJ,GAAmBA,EAAgBj8K,QAAUi8K,EAAgBj8K,MAAM2rC,UAAYswI,EAAgBj8K,MAAMhxB,cACvHitM,GAAmD,IAAhCA,EAAgBl4M,OAAO9P,MAC5CuxW,EAAoB5nX,KAAK,CACvBmsF,SAAU,WACVI,UAAWg8R,EAAgB,EAAAnlV,SAASE,GAAK,OAG7CskV,EAAoB5nX,KAAK,CACvBmsF,SAAU,QACVI,UAAWg8R,EACPlqJ,EAAgBj8K,MAAMhxB,cAAcrT,SAApC,OAAyD,KACzDsgN,GACCA,EAAgBpmC,OAChBomC,EAAgBpmC,MAAM7mK,eACtBitM,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACCsgN,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACA,OAER,IAAM8pW,EAA2BA,GAA3BA,qBAA+B57R,GAA/B,CAAkD,CACtDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB7hL,YAAc6hL,EAAgB7hL,WAAWprB,eACpFitM,EAAgB7hL,WAAWprB,cAAcrT,SAAzC,MACCsgN,EAAgB7hL,WAAWprB,cAAcrT,SAAzC,MACA,QAEA+pW,EAAuBA,GAAvBA,qBAA2B77R,GAA3B,CAA8C,CAClDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOliG,eAC5EitM,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACCsgN,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACA,SAENg0E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,OAAI09E,IAAU19E,EAAQoc,2BAGlBpc,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCi8R,GAE7Cv5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCg8R,GAE7Ct5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCk8R,KAE7Cx5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,QAC3Di5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,iBAInG9iB,EAAQs9E,gCAAgCK,QAK9B5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCArJUk9J,G,gKCLrB,Q,IACA,Q,uDAEqBF,E,YAEnB,WAAYhlK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKmnE,eAAgB,EACrB,EAAKumR,cAAgB,EACrB,EAAK7tV,YAAc,wCACnB,EAAKuqE,oBAAqB,EARS,E,qEAWhCtiF,GACH,IAAMs/E,EAA+E,OAAjEt/E,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,IAAc,EAAI,EAC/F,sGAAmBnP,EAAW,IAAImgP,GAAU,EAAO7gK,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,6CAItG,IAAMzC,GAAaA,EAAbA,6GACA0R,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IACvDu0W,EAAgBnpJ,GAAmBA,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKrrB,gBAAkBitM,EAAgB5hL,KAAKsxC,SACvH05R,EAAqBppJ,GAAmBA,EAAgBn7K,WAAam7K,EAAgBn7K,UAAU9xB,gBAAkBitM,EAAgBn7K,UAAU6qC,SAWjJ,OAVAtC,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAWi7R,GAAiD,IAA9BrqR,EAAch3E,OAAO9P,MAAeoxW,EAAsB,IAAM,MAE5FD,GAAiBnpJ,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,OACnB0tE,EAAWzrF,KAAK,CACdmsF,SAAU,QACVI,UAAW8xI,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,QAGR0tE,I,mDAIP,OAAOxgF,KAAKygF,uBAAuBz5E,QAAO,SAAAqqT,GACxC,MAA+B,SAAxBA,EAAWnwO,UAA+C,UAAxBmwO,EAAWnwO,c,sEAIsD,WAAhErjE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,KAK7D8+E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,GAAIA,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KAAM,CACtE,IAAMsiX,EAAkBrpJ,GAAmBA,EAAgB/qG,SAAW+qG,EAAgB/qG,OAAOvlC,UACxFswI,EAAgB/qG,OAAOliG,cACtBs1V,EAAmBroJ,GAAmBA,EAAgB/qG,OACxD+qG,EAAgB/qG,OAAOqzP,oCACvB,GACJ,OAAO36R,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAR,wBAChDK,GADgD,CAC7B,CACpBE,SAAU,SACVI,UAAWm7R,EAAkB,IAAM,OAHc,aAI7ChB,KAEH,SAAIp4W,EAAQyP,SAAR,OAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,WAClEi5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,iBAGjG46D,IAAU19E,EAAQoc,0BAA4Bpc,EAAQs9E,gCAAgCK,SAO9E5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCAtFUg9J,G,gKCHrB,Q,IACA,QACA,Q,IACA,Q,uDAEqBsvH,E,YAEnB,WAAYt0R,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKmnE,eAAgB,EACrB,EAAKumR,cAAgB,EACrB,EAAK7tV,YAAc,yCACnB,EAAKuqE,oBAAqB,EARS,E,qEA0BhCtiF,GACoE,OAAjEA,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,KAAgBnP,EAAUmP,SAAV,WAC1EnP,EAAUmP,SAAV,UAAgC3Y,SAAS,UAC5CwJ,EAAUmP,SAAV,KAA6B,CAAC,KAE8C,OAAjEnP,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,KAAgBnP,EAAUmP,SAAV,WACjFnP,EAAUmP,SAAV,UAAgC3Y,SAAS,YAC5CwJ,EAAUmP,SAAV,KAA6B,CAAC,MAG5BlL,MAAMC,QAAQlE,EAAUmP,SAAV,YAA2E,MAAvCnP,EAAUmP,SAAV,UAAgC,KAC/EnP,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,UAAgC/d,KAAK,MAElC4O,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,UAAgC/d,KAAK,OAGrC4O,EAAUmP,SAAV,aACEnP,EAAUmP,SAAV,WAAiC3Y,SAAS,YAAcwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,QACtGwJ,EAAUmP,SAAV,UAAkC,EAAAqlB,SAASC,KAEzCz0B,EAAUmP,SAAV,aACEnP,EAAUmP,SAAV,WAAiC3Y,SAAS,YAAcwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,QACjGwJ,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,EAAAqlB,SAASE,KAG9C,IAAM4qD,EAA+E,OAAjEt/E,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,IAAc,EAAI,EAC/F,sGAAmBnP,EAAW,IAAIyvW,GAAW,EAAOnwR,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,6CAIvG,IAAMzC,GAAaA,EAAbA,6GACA0R,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IACvDu0W,EAAgBnpJ,GAAmBA,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKrrB,gBAAkBitM,EAAgB5hL,KAAKsxC,SACvH05R,EAAqBppJ,GAAmBA,EAAgBn7K,WAAam7K,EAAgBn7K,UAAU9xB,gBAAkBitM,EAAgBn7K,UAAU6qC,SAWjJ,OAVAtC,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAWi7R,GAAiD,IAA9BrqR,EAAch3E,OAAO9P,MAAeoxW,EAAsB,IAAM,MAE5FD,GAAiBnpJ,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,OACnB0tE,EAAWzrF,KAAK,CACdmsF,SAAU,QACVI,UAAW8xI,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,QAGR0tE,I,mDAIP,OAAOxgF,KAAKygF,uBAAuBz5E,QAAO,SAAAqqT,GACxC,MAA+B,SAAxBA,EAAWnwO,UAA+C,UAAxBmwO,EAAWnwO,c,sEAIsD,WAAhErjE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IACvDmrN,EAAmBjhI,EAAch3E,OAAOsD,MAAM,UAAWxW,IAQ3D20W,EAAsBA,GAAtBA,qBAA0B37R,IAC9B,GAAIoyI,GAAmD,IAAhCA,EAAgBl4M,OAAO9P,KAAY,CACxD,IAAMkyW,EAAgBlqJ,GAAmBA,EAAgBj8K,QAAUi8K,EAAgBj8K,MAAM2rC,UAAYswI,EAAgBj8K,MAAMhxB,cAC3Hw2V,EAAoB5nX,KAAK,CACvBmsF,SAAU,WACVI,UAAWg8R,EAAgB,EAAAnlV,SAASE,GAAK,OAEvCilV,GAAiBlqJ,EAAgBj8K,MAAMhxB,cAAcrT,SAApC,OACnB6pW,EAAoB5nX,KAAK,CACvBmsF,SAAU,QACVI,UAAW8xI,EAAgBj8K,MAAMhxB,cAAcrT,SAApC,aAIf6pW,EAAoB5nX,KAAK,CACvBmsF,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgBpmC,OAASomC,EAAgBpmC,MAAM7mK,eAC1EitM,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACCsgN,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACA,OAGR,IAAM+pW,EAAuBA,GAAvBA,qBAA2B77R,GAA3B,CAA8C,CAClDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOliG,eAC5EitM,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACCsgN,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACA,SAENg0E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,GAAI09E,IAAU19E,EAAQoc,yBACpB,OAAO,EAET,GAAIpc,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KAAM,CACtE,IAAMsiX,EAAkBrpJ,GAAmBA,EAAgB/qG,SAAW+qG,EAAgB/qG,OAAOvlC,UACxFswI,EAAgB/qG,OAAOliG,cACtBs1V,EAAmBroJ,GAAmBA,EAAgB/qG,OACxD+qG,EAAgB/qG,OAAOqzP,oCACvB,GACJ,OAAOr4W,EAAQs9E,gCAAR,wBACFK,GADE,CACiB,CACpBE,SAAU,SACVI,UAAWm7R,EAAkB,IAAM,OAHhC,aAIChB,KAEH,OAAIp4W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,QAClEi5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,gBAGjG9iB,EAAQs9E,gCAAgCK,GAE7C39E,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCk8R,KAE7Cx5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,QAC3Di5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,kBAItG9iB,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,MAC5Dg5N,GAAoBA,EAAiB/7K,MAAQ+7K,EAAiB/7K,KAAKjxB,gBAAkBgtM,EAAiB/7K,KAAK0rC,SACtGz/E,EAAQs9E,gCAAR,wBACFK,GADE,CACiB,CACpBE,SAAU,YACVI,UAAW6xI,EAAiB/7K,KAAKjxB,cAAcrT,SAApC,cAIfzP,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCg8R,GAE1Ct5W,EAAQs9E,gCAAgCK,QAK9B5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCAxLUssR,G,gKCLrB,Q,IACA,Q,IACA,QACA,Q,uDAEqBC,E,YAEnB,WAAYv0R,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAKsnE,eAAgB,EACrB,EAAKumR,cAAgB,EACrB,EAAKtjR,oBAAqB,EARS,E,qEAWhCtiF,GACCiE,MAAMC,QAAQlE,EAAUmP,SAAV,YAA2E,MAAvCnP,EAAUmP,SAAV,UAAgC,KAC/EnP,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,UAAgC/d,KAAK,MAElC4O,EAAUmP,SAAV,UAAgC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,UAAgC/d,KAAK,OAGrC4O,EAAUmP,SAAV,aACEnP,EAAUmP,SAAV,WAAiC3Y,SAAS,YAAcwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,QAOtGwJ,EAAUmP,SAAV,UAAkC,EAAAqlB,SAASC,KAEzCz0B,EAAUmP,SAAV,aACEnP,EAAUmP,SAAV,WAAiC3Y,SAAS,YAAcwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,QACjGwJ,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,EAAAqlB,SAASE,KAG9C,IAAM4qD,EAA+E,OAAjEt/E,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KAA2B,IAAc,EAAI,EAC/F,sGAAmBnP,EAAW,IAAI0vW,GAAa,EAAOpwR,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,kCAG/FtuE,GAA8B,IAAhB6kG,EAAgB,uDAAJ,GAC9BjgH,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,EAAc6kG,GAChCjgH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAOi5F,aAAarsE,cAAgBnmB,KAEtCA,KAAK4mF,mB,6CAIL,IAAMpG,GAAaA,EAAbA,6GAEA2yI,EADgBnzN,KAAKU,YACYwa,OAAOsD,MAAM,UAAgBxW,IASpE,OAPsBmrN,GAAoBA,EAAiB/7K,MAAQ+7K,EAAiB/7K,KAAKjxB,gBAAkBgtM,EAAiB/7K,KAAK0rC,UAE/HtC,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW6xI,EAAiB/7K,KAAKjxB,cAAcrT,SAApC,YAGR0tE,I,mDAIP,OAAOxgF,KAAKygF,uBAAuBz5E,QAAO,SAAAqqT,GACxC,MAA+B,cAAxBA,EAAWnwO,c,sEAIwF,WAAhErjE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GACpGb,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAY4B,yBAEtBuhE,EAAoB2G,EAAwBlzF,OAC5CkzF,EACA3nF,KAAK4nF,2BAA2B/pE,GAE9Bq0E,EAAgBlyF,KAAKU,YACrB0yN,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IAQzD20W,EAAsBA,GAAtBA,qBAA0B37R,IAC9B,GAAIoyI,GAAmD,IAAhCA,EAAgBl4M,OAAO9P,KAAY,CACxD,IAAMkyW,EAAgBlqJ,GAAmBA,EAAgBj8K,QAAUi8K,EAAgBj8K,MAAM2rC,UAAYswI,EAAgBj8K,MAAMhxB,cAC3Hw2V,EAAoB5nX,KAAK,CACvBmsF,SAAU,WACVI,UAAWg8R,EAAgB,EAAAnlV,SAASE,GAAK,OAEvCilV,GAAiBlqJ,EAAgBj8K,MAAMhxB,cAAcrT,SAApC,OACnB6pW,EAAoB5nX,KAAK,CACvBmsF,SAAU,QACVI,UAAW8xI,EAAgBj8K,MAAMhxB,cAAcrT,SAApC,aAIf6pW,EAAoB5nX,KAAK,CACvBmsF,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgBpmC,OAASomC,EAAgBpmC,MAAM7mK,eAC1EitM,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACCsgN,EAAgBpmC,MAAM7mK,cAAcrT,SAApC,MACA,OAGR,IAAM8pW,EAA2BA,GAA3BA,qBAA+B57R,GAA/B,CAAkD,CACtDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB7hL,YAAc6hL,EAAgB7hL,WAAWprB,eACpFitM,EAAgB7hL,WAAWprB,cAAcrT,SAAzC,MACCsgN,EAAgB7hL,WAAWprB,cAAcrT,SAAzC,MACA,QAEA+pW,EAAuBA,GAAvBA,qBAA2B77R,GAA3B,CAA8C,CAClDE,SAAU,QACVI,UAAW8xI,GAAmBA,EAAgB/qG,QAAU+qG,EAAgB/qG,OAAOliG,eAC5EitM,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACCsgN,EAAgB/qG,OAAOliG,cAAcrT,SAArC,MACA,SAENg0E,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,OAAI09E,IAAU19E,EAAQoc,2BAGlBpc,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCi8R,GAE7Cv5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCg8R,GAE7Ct5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,KACzDkJ,EAAQs9E,gCAAgCk8R,KAE7Cx5W,EAAQyP,SAAR,MAA4BzP,EAAQyP,SAAR,KAAyB3Y,SAAS,QAC3Di5N,IAAoBA,EAAgB77K,MAAQ67K,EAAgB77K,KAAKurC,WAAaswI,EAAgB77K,KAAKpxB,iBAInG9iB,EAAQs9E,gCAAgCK,QAK9B5iF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,M,iCA3JUusR,G,8ECLrB,W,OACA,S,IACA,MAEA,QACA,S,mDAEA,IAAMkK,EAA8B,SAACjyQ,GAAU,IAEtClxB,EAAmGkxB,EAAnGlxB,OAAQ1vD,EAA2F4gF,EAA3F5gF,YAAazZ,EAA8Eq6F,EAA9Er6F,gBAAiBkH,EAA6DmzF,EAA7DnzF,eAAgB8wQ,EAA6C39K,EAA7C29K,aAAc/wQ,EAA+BozF,EAA/BpzF,OAAQuwN,EAAuBn9H,EAAvBm9H,oBAE7E+0I,EACJ,gCAAMl3D,MAAM,GACV,gCAAMjyS,MAAO+lE,EAAOwsO,cACjB31S,GACG,IAAAi4Q,iBAAgBj4Q,EAAiBkH,EAAgB8wQ,EAAc/wQ,GAC/DwS,EAAYi2F,kBAAoBj2F,EAAYwrB,OAASxrB,EAAYla,WAEvE,gCAAM6D,MAAO+lE,EAAO+sO,cAClB,gCAAM9yS,MAAO+lE,EAAO6sO,uBACjBv8R,EAAYg4H,wBAA0B,MAMzC+6N,EAAgBtlW,EAAeuwN,iBAAmBvwN,EAAeuwN,gBAAgBC,+BAClFF,GACAA,EAAoB/9M,EAAY1iB,IAErC,OACE,gCAAMs+S,MAAOm3D,GACX,gCAAMppW,MAAO+lE,EAAOsrQ,cACjBh7T,EAAYwrB,OAASxrB,EAAYla,WAEpC,gCAAM6D,MAAOopW,EAAgB,CAACrjS,EAAOh0E,SAAUg0E,EAAOmsO,uBAAyBnsO,EAAOh0E,SAAUkgT,MAAM,GACnGm3D,EACC,wCACE,gCAAMppW,MAAO+lE,EAAOosO,kBAAmBF,MAAM,GAC3C,iCAAOjyS,MAAO+lE,EAAOqsO,uBAAwBH,MAAM,EAAOvlR,OAAQ,CAChE2lR,IAAKj+E,EAAoB/9M,EAAY1iB,IAAK4lS,OAAQ,MAAOz7G,QAAS,CAAE,gBAAiB,gBAGzF,gCAAM99K,MAAO+lE,EAAOusO,0BAA2BL,MAAM,GAClDk3D,IAGHA,KAMZD,EAA4Br7N,UAAY,CACtCx3H,YAAa,UAAUkvB,MAAV,wBAEbwgC,OAAQ,UAAUziF,OAAOshH,Y,UAGZskQ,G,8EC3Df,W,OACA,S,IACA,MAEA,QAOA,SACA,SAMA,S,IACA,QACA,SACA,SACA,Q,mDAEA,IAAMG,EAAqB,SAACpyQ,GAAU,IAC7BlxB,EAAkEkxB,EAAlElxB,OAAQxvE,EAA0D0gG,EAA1D1gG,oBAAqBuN,EAAqCmzF,EAArCnzF,eAAgBD,EAAqBozF,EAArBpzF,OAAQ3V,EAAa+oG,EAAb/oG,UACrDmI,EAA0CE,EAA1CF,iBAAkBM,EAAwBJ,EAAxBI,qBACnB8G,EAAqBqG,EAAezQ,SACpCuhR,GAAe,IAAApN,YAAA,wBAErB,GAAI1jQ,EAAeknI,iBACjB,OAAO,KAGT,IAAI2qI,GAAgB,IAAAtjR,eAAc,MAAM,GAAO7E,cACzCF,GAAa,IAAA+E,iBACfqjH,GAAa,IAAA7oH,wBAAuBS,GAEpCg8W,EAAWh8W,EAAWN,WAAW5M,OACjCkN,EAAWN,WACX,CAAC,CAAC5K,KAAM,GAAIgL,YAAaE,EAAWD,gBAClCk8W,EAAYD,EAAS19W,MAAK,SAAAuB,GAAA,OAAOA,EAAIC,YAAc,KAEnDo8W,EAAe,SAACr7W,GAAD,OAAW,IAAAR,cAAaoI,KAAKyI,MAAc,IAARrQ,GAAe,MAQnEs7W,EAAuB,EAiB3B,GAhBIpzW,EAAiBjW,QACnBiW,EAAiBtM,SAAQ,SAAAyM,IACF,IAAAC,cAAY,IAAAC,wBAAuBF,EAAiBG,IAC5D5M,SAAQ,SAAA6M,GACnB,IAAI,IAAAC,yBAAwBD,GAAW,CACrC,IAAMm9Q,EAAkBn9Q,EAASG,OAAS,EAAAC,eAAe7I,MACrDyI,EAASK,OAbe,SAACZ,EAAkBG,EAAiBI,GACtE,IACMilL,GADe,IAAAzB,kBAAiB/jL,EAAkBG,EAAiBI,GAAU,EAAMD,GACvDC,EAASK,OAAS,IACpD,OAAOuyW,EAAa3tL,GAWVm4F,CAA4B39Q,EAAkBG,EAAiBI,GACnE6yW,IAAgD11F,WAMtC,IAAArsG,cAAa5jK,GAAgB,GAG7C,OACE,gCAAM9D,MAAO+lE,EAAOotQ,OAAQlhC,MAAM,GAChC,mCAAyByM,WAAW,EACX34O,OAAQA,EACRliE,OAAQA,EACRC,eAAgBA,KAK/C,IAAMszU,GAA2B,IAAA5iV,+BAA8BiJ,EAAoBvP,GAEnF,OACE,gCAAM8R,MAAO+lE,EAAOotQ,OAAQlhC,MAAM,GAChC,gCAAMjyS,MAAO+lE,EAAOqtQ,YAClB,mCAAyB10B,WAAW,EACX34O,OAAQA,EACRliE,OAAQA,EACRC,eAAgBA,KAE3C,gCAAM9D,MAAO+lE,EAAO33E,OACjBgpV,EAAyBh3V,OAASg3V,EAAyB3jV,KAAI,SAACgkV,EAAYiyB,GAC3E,IAAIC,GAAmB,IAAAt3W,eAAc,MAAM,EAAOolV,EAAWvpV,WAAWV,cAExE,OADAm8W,GAAmB,IAAAh8W,cAAag8W,GAAkB,GAEhD,gCAAM3pW,MAAO0pW,EAAkB3jS,EAAOwtQ,aAAextQ,EAAOutQ,kBAAmBnwV,IAAKs0V,EAAWx3U,UAC7F,gCAAMD,MAAO+lE,EAAOytQ,kBAAmB5+D,EAAalxQ,SAAS,0BAA7D,KACA,gCAAM1D,MAAO+lE,EAAO0tQ,qBACjB,IAAAx0U,iBAAgBw4U,EAAWx3U,SAAUxC,GAAsBksW,OAI/D,KACL,gCAAM3pW,MAAOo3U,EAAyBh3V,OAAS2lF,EAAOwtQ,aAAextQ,EAAOutQ,mBAC1E,gCAAMtzU,MAAO+lE,EAAOytQ,kBAAmB5+D,EAAalxQ,SAAS,0BAA7D,KACA,gCAAM1D,MAAO+lE,EAAO0tQ,qBAAqB,IAAAp0U,sBAAqB5B,EAAoBk4Q,EAAe,MAAM,GAAO,KAE/G8zF,EACC,gCAAMzpW,MAAO+lE,EAAOwtQ,cAClB,gCAAMvzU,MAAO+lE,EAAOytQ,kBAAmB5+D,EAAalxQ,SAAS,2BAA7D,KACA,gCAAM1D,MAAO+lE,EAAO0tQ,oBAApB,KAA0C,IAAAp0U,sBAAqB5B,EAAoB+rW,EAAaC,GAAuB,MAAM,GAAO,KAEpI,KACHF,EAAYD,EAAS71W,KAAI,SAACm2W,EAAWC,GACpC,IAAMC,EAAWF,EAAUx8W,YACrB28W,EAAUH,EAAU91W,UAAY81W,EAAU91W,SAAS+P,GACrD+lW,EAAU91W,SAAS+P,GACnB+lW,EAAUl3W,OAASkiR,EAAalxQ,SAAS,qBAC7C,OACE,gCAAM1D,MAAO+lE,EAAOwtQ,aAAcpwV,IAAK0mX,GACrC,gCAAM7pW,MAAO+lE,EAAOytQ,kBAAmBu2B,GACvC,gCAAM/pW,MAAO+lE,EAAO0tQ,qBAAqB,IAAAp0U,sBAAqB5B,EAAoBqsW,EAAU,MAAM,GAAO,QAG1G,KACJx8W,EAAWI,kBACV,gCAAMsS,MAAO+lE,EAAOwtQ,cAClB,gCAAMvzU,MAAO+lE,EAAOytQ,kBAAmB5+D,EAAalxQ,SAAS,oCAC7D,gCAAM1D,MAAO+lE,EAAO0tQ,qBAAqB,IAAAp0U,sBAAqB5B,EAAoBnQ,EAAWI,kBAAmB,MAAM,GAAO,KAE7H,KACH+P,EAAmB7H,aAAnB,mBACC,gCAAMoK,MAAO+lE,EAAOwtQ,cAClB,gCAAMvzU,MAAO+lE,EAAOytQ,kBAAmB5+D,EAAalxQ,SAAS,wCAC7D,gCAAM1D,MAAO+lE,EAAO0tQ,qBAAqB,IAAAp0U,sBAAqB5B,EAAoBnQ,EAAWC,kBAAmB,MAAM,GAAO,KAE7H,KACFkQ,EAAmByoK,SAAWzoK,EAAmB2f,gBAAkB,IAAAu+J,oBAAmBtlL,GACtF,gCAAM2J,MAAO+lE,EAAOwtQ,cAClB,gCAAMvzU,MAAO+lE,EAAOytQ,kBAAmB5+D,EAAalxQ,SAAS,8BAA7D,KACA,gCAAM1D,MAAO+lE,EAAO0tQ,qBACjB,IAAAp0U,sBAAqB5B,GAAoB,IAAAs+K,kBAAiB1lL,EAAkBq/G,EAAY5xG,GAAiB,MAAM,GAAO,KAGzH,KACHszU,EAAyBh3V,OAASg3V,EAAyB3jV,KAAI,SAAAgkV,GAC9D,IAAMC,GAAe,IAAArlV,eAAc,MAAM,EAAMolV,EAAWvpV,WACpDE,GAAQ,IAAAT,eAAa,IAAAd,wBAAuB6qV,IAAe,GACjE,OACE,gCAAM13U,MAAO+lE,EAAOwtQ,aAAcpwV,IAAKs0V,EAAWx3U,UAChD,gCAAMD,MAAO+lE,EAAOytQ,kBAAmB5+D,EAAalxQ,SAAS,uBAA7D,KACA,gCAAM1D,MAAO+lE,EAAO4tQ,0BAA0B,IAAA10U,iBAAgBw4U,EAAWx3U,SAAUxC,GAAsBrP,OAG1G,KACL,gCAAM4R,MAAO+lE,EAAOwtQ,cAClB,gCAAMvzU,MAAO+lE,EAAOytQ,kBAAmB5+D,EAAalxQ,SAAS,uBAA7D,KACA,gCAAM1D,MAAO+lE,EAAO4tQ,0BAA0B,IAAAt0U,sBAAqB5B,EAAoBi4G,EAAY,MAAM,GAAO,QAO1H2zP,EAAmBx7N,UAAY,CAC7Bt3I,oBAAqB,UAAUjT,OAAOshH,WACtC9gG,eAAgB,UAAUxgB,OAAOshH,WACjC7+B,OAAQ,UAAUziF,OAAOshH,WACzB12G,UAAW,UAAU8T,MAAM4iG,Y,UAGdykQ,G,8EC1Kf,W,OACA,S,IACA,MAEA,S,mDAEA,IAAMW,EAAyB,SAAC/yQ,GAAU,IACjClxB,EAAwGkxB,EAAxGlxB,OAAQmuJ,EAAgGj9H,EAAhGi9H,eAAgB59G,EAAgFrf,EAAhFqf,iBAAkB5pH,EAA8DuqG,EAA9DvqG,SAAU4rH,EAAoDrhB,EAApDqhB,yBAA0Bz0G,EAA0BozF,EAA1BpzF,OAAQC,EAAkBmzF,EAAlBnzF,eACtFuwN,EAAmBvwN,EAAnBuwN,gBACDugD,GAAe,IAAApN,YAAA,wBAEfspC,EAAex4L,EACjBA,EAAyBS,SACzBrsH,EAASihC,WAAajhC,EAAS4tK,SAAY,IAAM5tK,EAAS4tK,SAAY,IAEpE2vM,GAAiB,IAAI97V,MAAO+7V,eAAermW,EAC/C,CAAC+vN,KAAM,UAAWwZ,MAAO,UAAWF,IAAK,UAAWi9H,KAAM,UAAWC,OAAQ,YAC5E9/W,QAAQ,KAAM,IAEjB,OACE,gCAAM0V,MAAO+lE,EAAO8tQ,UAAW5hC,MAAM,GACnC,gCAAMjyS,MAAO,CAAC+lE,EAAO20G,QAAS30G,EAAOqrO,cACnC,gCAAMpxS,MAAO,CAAC+lE,EAAO4wP,eAAgB5wP,EAAO60E,QACzCy5E,GAAmBA,EAAgBg2I,qBAAuB,KAAOv5D,GAEpE,gCAAM9wS,MAAO+lE,EAAO+tQ,eAAgBl/D,EAAalxQ,SAAS,4BAE5D,gCAAM1D,MAAO,CAAC+lE,EAAO20G,QAAS30G,EAAO0rO,gBACnC,gCAAMzxS,MAAO,CAAC+lE,EAAO4wP,eAAgB5wP,EAAO60E,QACzCy5E,GAAmBA,EAAgBg2I,qBAAuB,KAAOJ,GAEpE,gCAAMjqW,MAAO+lE,EAAO+tQ,eAAgBl/D,EAAalxQ,SAAS,4BAE5D,gCAAM1D,MAAO,CAAC+lE,EAAO20G,QAAS30G,EAAO6qQ,cAAe05B,aAAa,IAC9Dh0P,GAAqB49G,GACjBpwN,EAAeuwN,iBAAmBvwN,EAAeuwN,gBAAgBk2I,mBAElE,KADA,iCAAOvqW,MAAO+lE,EAAOmuQ,eAAgBxpV,IAAK4rH,IAE9C,gCAAMt2G,MAAO+lE,EAAO+tQ,eAAgBl/D,EAAalxQ,SAAS,mCAMlEsmW,EAAuBn8N,UAAY,CACjC9nE,OAAQ,UAAUziF,OAAOshH,WACzB/gG,OAAQ,UAAUsqB,OAAOy2E,WACzBl4G,SAAU,UAAUpJ,OAAOshH,WAC3B0T,yBAA0B,UAAUh1H,OACpC4wO,eAAgB,UAAUnmF,KAC1Bz3B,iBAAkB,UAAUnoF,Q,UAGf67U,G,8ECrDf,I,IAAA,MACA,S,IACA,M,IAEA,SACA,SAKA,QACA,S,mDAGA,IAAMQ,EAA6B,SAACvzQ,GAAU,IACrClxB,EAAmDkxB,EAAnDlxB,OAAQxvE,EAA2C0gG,EAA3C1gG,oBAAqBkH,EAAsBw5F,EAAtBx5F,mBAC7BpH,EAA0CE,EAA1CF,iBAAkBM,EAAwBJ,EAAxBI,qBAEnBrJ,GAAa,IAAA+E,iBACbqjH,GAAa,IAAA7oH,wBAAuBS,GAE1C,OACE,gCAAM0S,MAAO+lE,EAAOkxC,WACjB5gH,EAAiB5C,KAAI,SAAC+C,EAAiBi0W,GACtC,GAAIj0W,EAAgBO,OAAS,EAAAyvK,uBAAuBP,QAClD,OAAO,KAET,IAAMqU,GAAe,IAAA5jL,wBAAuBF,EAAiBG,GACvD+zW,GAAmB,IAAAj0W,aAAY6jL,EAAa3nL,QAAO,SAAAiE,GACvD,OAAO,IAAAC,yBAAwBD,KAAa,IAAA2oH,oBAAmB3oH,OAEjE,OAAK8zW,EAAiBtqX,OAIpB,gCAAM4f,MAAO+lE,EAAOvvE,gBAAiBy7S,MAAM,EAAO9uT,IAAKsnX,GACrD,gCAAMzqW,MAAO+lE,EAAOsrQ,cAAe76U,EAAgBpU,MAClDsoX,EAAiBj3W,KAAI,SAACmD,EAAU+zW,GAC/B,OAAO,mCAAuB/zW,SAAUA,EACVzT,IAAKwnX,EACLj1P,WAAYA,EACZn/G,oBAAqBA,EACrBC,gBAAiBA,EACjBiH,mBAAoBA,EACpBsoE,OAAQA,QAZnC,UAqBjBykS,EAA2B38N,UAAY,CACrCt3I,oBAAqB,UAAUjT,OAAOshH,WACtCnnG,mBAAoB,UAAUna,OAAOshH,WACrC7+B,OAAQ,UAAUziF,OAAOshH,Y,UAGZ4lQ,G,8EC3Df,W,OACA,S,IACA,MAEA,SACA,QACA,S,IACA,SACA,S,mDAEA,IAAMI,EAAwB,SAAC3zQ,GAAU,IAChClxB,EAA0FkxB,EAA1FlxB,OAAQnvE,EAAkFqgG,EAAlFrgG,SAAUL,EAAwE0gG,EAAxE1gG,oBAAqBC,EAAmDygG,EAAnDzgG,gBAAiBiH,EAAkCw5F,EAAlCx5F,mBAAoBi4G,EAAcze,EAAdye,WAC5Er/G,EAA0CE,EAA1CF,iBAAkBM,EAAwBJ,EAAxBI,qBAEnBi+Q,GAAe,IAAApN,YAAA,wBAQrB,GAAI5wQ,EAASqwK,eAAiB,EAAApB,oBAAoBK,QAChD,OACE,gCAAMlmK,MAAO,CAAC+lE,EAAO+sO,aAAc/sO,EAAO0vQ,iBAAkBxjC,MAAM,GAChE,gCAAMjyS,MAAO+lE,EAAOwsO,cAAe37S,EAASxU,MAC5C,gCAAM4d,MAAO+lE,EAAOktO,gBACjB,IAAA5zS,sBAAqB5B,GAAoB,IAAA+5G,wBAAuBnhH,EAAkBq/G,MAM3F,GAAI9+G,EAASqwK,eAAiB,EAAApB,oBAAoBI,QAChD,OAAO,kCAAkChvE,GAG3C,IAnBQ4kF,EAmBFk4F,EAAiBn9Q,EAASG,OAAS,EAAAC,eAAe7I,MACpD,KAAM,IAAAkR,sBAAqB5B,GAAoB,IAAA9P,cAAaiJ,EAASK,SACrE,KAAM,IAAAoI,sBAAqB5B,GArBvBo+K,GADa,IAAAzB,kBAAiB/jL,EAAkBG,EAAiBI,GAAU,EAAMD,GACvDC,EAASK,OAAS,KAC3C,IAAAtJ,cAAaoI,KAAKyI,MAAmB,IAAbq9K,GAAoB,OAsB/CzU,EAAiBxwK,EAASwwK,eAAiBtnE,KAAKC,MAAMnpG,EAASwwK,gBAAkB,KAEvF,OACE,gCAAMpnK,MAAO+lE,EAAOh0E,SAAUkgT,MAAM,GAClC,gCAAMjyS,MAAO+lE,EAAO+sO,cAClB,gCAAM9yS,MAAO,CAAC+lE,EAAOgqQ,KAAMhqQ,EAAOquQ,QAASruQ,EAAOuuQ,aAChD,gCAAMt0U,MAAO+lE,EAAOwsO,cAAe37S,EAASxU,MAC3CglL,GAAkBA,EAAesU,eAChC,wCACE,gCAAM17K,MAAO,CAAC+lE,EAAOuvQ,UAAWvvQ,EAAO8sQ,6BAA8Bj+D,EAAalxQ,SAAS,+BAA3F,MACA,gCAAM1D,MAAO+lE,EAAOwsO,cAAenrI,EAAesU,iBAElD,MAEN,gCAAM17K,MAAO+lE,EAAOktO,eAAgBl/B,MAM5C62F,EAAsB/8N,UAAY,CAChCj3I,SAAU,UAAUtT,OAAOshH,WAC3BruG,oBAAqB,UAAUjT,OAAOshH,WACtCpuG,gBAAiB,UAAUlT,OAAOshH,WAClCnnG,mBAAoB,UAAUna,OAAOshH,WACrC7+B,OAAQ,UAAUziF,OAAOshH,WACzB8Q,WAAY,UAAUnR,Q,UAGTqmQ,G,8ECtEf,W,OACA,S,IACA,MAEA,SACA,SACA,S,mDAEA,IAAMC,EAA+B,SAAC5zQ,GAAU,IACvClxB,EAAyEkxB,EAAzElxB,OAAQnvE,EAAiEqgG,EAAjErgG,SAAUL,EAAuD0gG,EAAvD1gG,oBAAqBkH,EAAkCw5F,EAAlCx5F,mBAAoBi4G,EAAcze,EAAdye,WAC3Dr/G,EAA4DE,EAA5DF,iBAAkBqwK,EAA0CnwK,EAA1CmwK,kBAAmByyC,EAAuB5iN,EAAvB4iN,oBAEtCy7D,GAAe,IAAApN,YAAA,wBAEfsjG,EAAiBz0W,EAAiBoB,MAAK,SAAAkjL,GAAA,OAAOA,EAAI5jL,OAAS,EAAAyvK,uBAAuBP,WACxF,IAAK6kM,EACH,OAAO,KAGT,IAAIC,EAAmD,iBAA5Bn0W,EAASswK,eAChCpnE,KAAKC,MAAMnpG,EAASswK,gBACpB,GAEJ,OACE,gCAAMlnK,MAAO+lE,EAAOh0E,SAAUkgT,MAAM,GAClC,gCAAMjyS,MAAO+lE,EAAOwuQ,UAClB,oCACE,gCAAMv0U,MAAO,CAAC+lE,EAAOm6C,KAAMn6C,EAAOipQ,OAC/Bp6D,EAAalxQ,SAAS,yCAG3B,gCAAM1D,MAAO,CAAC+lE,EAAOgqQ,KAAMhqQ,EAAOquQ,QAASruQ,EAAOuuQ,aAChD,gCAAMt0U,MAAO+lE,EAAOm6C,MACjB00J,EAAalxQ,SAAS,2CAEzB,gCAAM1D,MAAO,CAAC+lE,EAAOm6C,KAAMn6C,EAAOipQ,KAAMjpQ,EAAO2vQ,kBAC5Cn/U,EAAoBmwK,kBAAoB,OAI/C,gCAAM1mK,MAAO,CAAC+lE,EAAOgqQ,KAAMhqQ,EAAOouQ,SAAUpuQ,EAAOquQ,QAASruQ,EAAOwuQ,SAAUxuQ,EAAO+uQ,WACjFz0V,OAAOmc,KAAP,0BAAoC/I,KAAI,SAAClQ,EAAUynX,GAClD,IAAMC,EAA+B,IAAlBD,EACf,CAACjlS,EAAO4vQ,YAAa5vQ,EAAOsvQ,UAAWtvQ,EAAOwvQ,WAC9CxvQ,EAAO4vQ,YACLu1B,EAAmBJ,EAAe7zP,UAAUx/G,MAAK,SAAA4nH,GAAA,OAAOA,EAAI0nD,OAASgkM,EAAcC,MACzF,OACE,gCAAMhrW,MAAOirW,EAAY9nX,IAAKI,GAC5B,oCACG2nX,EACGA,EAAiBvkM,cAAgB,IAAMiuG,EAAalxQ,SAAS,iCAC7D,MAEN,gCAAM1D,MAAO,CAAC+lE,EAAOgqQ,KAAMhqQ,EAAOouQ,SAAUpuQ,EAAOuuQ,WAAYvuQ,EAAOyuQ,SAAUzuQ,EAAOkvQ,YACrF,gCAAMj1U,MAAO,CAAC+lE,EAAOwxB,OAAQxxB,EAAO8vQ,kBACjC18H,GAAsB,IAAAr+B,oBACrB,CAACzkL,mBAAkBqwK,oBAAmBjpK,sBACtCytW,EAAmBA,EAAiBvkM,cAAgB,EACpDjxD,GACE,cAWtBm1P,EAA6Bh9N,UAAY,CACvCj3I,SAAU,UAAUtT,OAAOshH,WAC3BruG,oBAAqB,UAAUjT,OAAOshH,WACtCpuG,gBAAiB,UAAUlT,OAAOshH,WAClCnnG,mBAAoB,UAAUna,OAAOshH,WACrC7+B,OAAQ,UAAUziF,OAAOshH,Y,UAGZimQ,G,8EC9Ef,I,EAAA,O,oCACA,S,UAEmC,SAAC5zQ,GAAU,IACrClxB,EAAUkxB,EAAVlxB,OACP,OACE,gCAAM/lE,MAAO,CAAC+lE,EAAO6uQ,UAAW7uQ,EAAOorO,OACrC,kW,0ICPN,SACA,S,mDAEO,IAAM,EAA2B5nE,EAA3BA,0BAAA,gCAA2B,6GAEX,IAAAisB,YAAA,0BAAqCzwQ,SAASC,SAASmC,OAAvD,aAFW,YAEhC04K,EAFgC,UAMlBA,EAAajgL,KANK,uBAO9BkmG,EAAaga,KAAKC,MAAM8/D,EAAajgL,MACxC+S,QAAO,SAAAozF,GAAA,OAAcA,EAAWu5B,WAChC7rH,KAAI,SAACsyF,EAAYi6E,GAGhB,OAFAj6E,GAAa,IAAAk6E,eAAcl6E,EAAYi6E,GAAgB,MAVvB,kBAe7B,CAACl6E,aAAYliG,MAAOi8K,EAAajgL,KAAKgE,QAfT,gCAiB/B,CAACkiG,WAAY,GAAIliG,MAAOi8K,EAAaj8K,QAjBN,kDAA3B,6C,wJCHb,SACA,SAIA,SAOA,IAAMqoH,EAAuB,SAACziG,GAC5B,OAAKA,EAGE,CACLhC,SAAUgC,EAAYvN,mBAAqBuN,EAAYtN,YACvDzH,kBAAmB+U,EAAY/U,kBAC/BmO,YAAa4G,EAAY7V,GACzBs6B,IAAKzkB,EAAYykB,IACjBh8B,OAAQuX,EAAYvX,OACpBkK,UAAWqN,EAAYrN,UACvBouG,oBAAqB/gG,EAAY+gG,qBAT1B,MAqDL4gQ,EAAgB,SAAClnX,GAAU,IAnCK+xB,EAoC7B1Z,EAA0BrY,EAA1BqY,YAAamE,EAAaxc,EAAbwc,UACpB,MAAO,CAAC,CACNq1G,QAAS,GACTxoC,SAAU,GACVkV,SAAU,KACV60B,iBAAkB,EAClB3pH,kBAAmB,EACnBghL,iBAAiB,EACjBC,iBAAiB,EACjB9jK,WAAY,EACZ0jK,aAAc,GACdn3D,aAAc,EACd/pH,cAAe,EACfL,WAAY,GACZguD,UAAW,GACXh2C,KAAM,WACN6xG,gBAAiB,KACjBH,cAAe,KACfX,kBAAmB,GACnBn2H,KAAMkgH,KAAK2W,UAAU,CACnB9iH,GAAI,EACJssF,OAAQ,EACRo7H,YAAa,EACbttN,UAAW,GACXzG,eAAgB,WAChBD,YAAa,EACboZ,UAAWpgB,OAAO+2B,OAAO,GAAI3W,EAAW,CACtC/T,SAAUrM,OAAO+2B,OAAO,GAAI3W,EAAU/T,SAAU,CAC9CygC,OAAO,IAAAwpO,oCAAmCl2P,EAAU/T,SAASygC,WAGjEnX,kBAnEgCA,EAmEe1Z,EAAY0Z,iBAlEhCA,EAAiBviB,KAAI,SAAAs4G,GAClD,IAAIC,EAAY,GA4BhB,OA3BA3rH,OAAOmc,KAAKuvG,EAAatvG,sBAAsB1S,SAAQ,SAAA2S,GACrDsvG,EAAUtvG,GAAarc,OAAO+2B,OAAO,GAAI20F,EAAatvG,qBAAqBC,IACvEqvG,EAAatvG,qBAAqBC,GAAW2Z,cAC/C21F,EAAUtvG,GAAW2Z,YAAch2B,OAAO+2B,OACxC,GACA20F,EAAatvG,qBAAqBC,GAAW2Z,YAC7C,CAAC2xF,iBAAkB,GAAIT,iBAAkB,KAEvCyE,EAAUtvG,GAAW2Z,YAAY0xF,eACnCiE,EAAUtvG,GAAW2Z,YAAY0xF,aAAeiE,EAAUtvG,GAAW2Z,YAAY0xF,aAAat0G,KAAI,SAAA8yG,GAChG,MAAO,CAAC5yG,GAAI4yG,EAAS5yG,GAAIwI,UAAWoqG,EAASpqG,gBAI/C4vG,EAAatvG,qBAAqBC,GAAWE,kBAC/CovG,EAAUtvG,GAAWE,gBAAkBqvG,EACrCF,EAAatvG,qBAAqBC,GAAWE,gBAC7CmvG,EAAapzG,aAGbozG,EAAatvG,qBAAqBC,GAAW0uW,mBAC/Cp/P,EAAUtvG,GAAW0uW,iBAAmBr/P,EAAatvG,qBAAqBC,GAAW0uW,iBAAiB33W,KAAI,SAAAzE,GAAA,OAAWi9G,EACnHj9G,EACA+8G,EAAapzG,mBAIZtY,OAAO+2B,OAAO,GAAI20F,EAAc,CAACtvG,qBAAsBuvG,aA0CpC27I,EAAjBA,eAAiB,SAAC1jQ,GAAiC,IAA1BijQ,EAA0B,wDACvD6pC,EAA4C9sS,EAA5C8sS,YAAatwR,EAA+Bxc,EAA/Bwc,UAAWiqO,EAAoBzmP,EAApBymP,iBAExBa,EAA+Eb,EAA/Ea,WAAYZ,EAAmED,EAAnEC,gBAAiBC,EAAkDF,EAAlDE,oBAAqBH,EAA6BC,EAA7BD,0BAEnD4gI,GAAoB,IAAAz/H,sBAAqB3nP,GAC/C,GAAI0mP,EAAiB,CACnB,IAAM4C,EAAU,IAAIp/N,KAAKw8N,GAEzB,GADA0gI,EAAkBC,sBAAuB,IAAAxgI,wCAAuCyC,GAAS,GACrF3C,EAAqB,CACvB,IAAMG,GAA0B,IAAAuC,4BAA2BC,EAAS9C,GACpE,GAAIM,EAAyB,CAC3B,IAAMI,EAAiBJ,EAAwBG,iBAAiBzzO,MAAK,SAAA0zO,GAAA,OAAkBA,EAAeb,WAAaM,KAC/GO,GAAkBA,EAAeogI,gBACnCF,EAAkBG,qBAA2D,MAApCrgI,EAAeogI,cAAc,GAClEpgI,EAAeogI,cAAc3gX,UAAU,GACvCugP,EAAeogI,iBAM3B,IAAME,GAAYA,EAAZA,YACJlgI,aACAmgI,mBAAoBjrW,EAAU/T,SAASg/W,oBACpCL,EAHC,CAIJnkH,kBAGIykH,EAAU5mX,SAAS02F,eAAe,YACpCkwR,GAAWA,EAAQx/N,UACrB,GAAGnoJ,MAAMxD,KAAKmrX,EAAQx/N,UAAUpiJ,SAAQ,SAAAqgF,GAClCA,EAAMhoF,MAAQgoF,EAAMvnF,QACtB4oX,EAAUrhS,EAAMhoF,MAAQgoF,EAAMvnF,UAKpC,IAAM+oX,EAA2B,CAE/BhrW,MAAO7b,SAASC,SAAS4b,OAASmwR,EAAYnwR,MAC9C62G,QAAQ,EACR16C,aAAch4E,SAASC,SAASmC,OAChCuwH,MAAO,GACP7pG,UAAW,GACX8pG,WAAY,EACZhrF,SAAU,GACVt2B,iBAAkB,GAClBuhH,cAAe,GACfG,MAAOhzH,SAASgzH,OAAShzH,SAASgzH,MAAMt0G,SAAW1e,SAASgzH,MAAMt0G,WAAa,KAC/ErV,MAAO,CACLgpH,aAAc,EACdC,iBAAkB,EAClB3pH,kBAAmB,EACnBL,cAAe,EACfL,WAAY,GACZsqH,eAAgB,GAElB3B,QAASw1P,EAAclnX,GAEvBk0H,0BAA0B,EAC1B90B,QAAQ,EACRg1B,kBAAkB,EAClBM,mBAAmB,EACnBE,cAAep4G,EAAU/T,SAASwgC,OAASzsB,EAAUumP,eAAe95N,OAAS,GAC7E4rF,YAAa,GACbG,iBAAkB,GAClBC,iBAAmBp1H,OAAOg1H,YAAch1H,OAAOg1H,YAAYK,OAAWpjH,KAAKouE,MAAgB,IAAVpuE,KAAKqnE,IAAc,EACpGg8C,WAAY34G,EAAU/T,SAASmhC,OAE/BwrF,YAAat0H,SAASC,SAAS4b,OAASmwR,EAAYnwR,OACpDlO,MAAO,QACP4mH,SAAU,KACVjyH,YAAatC,SAASC,SAASqC,YAC/BD,eAAgB,WAChBE,eAAgB,WAChB8wH,iBAAkB,wBAClBn4G,SAAU,MACVs5G,sBAAuB,EACvBC,kBAAmB,EACnBC,cAAe10H,SAASC,SAAS2b,UACjC+4G,eAAgB30H,SAASC,SAAS20H,uBAAwB,EAC1DC,SAAU,QACV2xH,aACAkgI,aAEF9nX,QAAQ4B,IAAI,WAAYqmX,GACxB,IAAMnzP,EAAW,IAAIC,SAErB,OADAD,EAASsB,OAAO,OAAQja,KAAK2W,UAAUm1P,IAChCnzP,I,uJCjMT,S,mDAEO,IAAM,EAMA,EANcivI,EAAdA,aAAA,gCAAc,WAAO3nI,GAAP,8FACE,IAAA01I,aAAA,wBAAqC11I,GADvC,cACnB8/C,EADmB,OAEzBl8K,QAAQ4B,IAAI,0BAA2Bs6K,GAFd,kBAGlBA,GAHkB,kDAAd,6CAM0B+nF,EAA1BA,yBAAA,gCAA0B,WAAO7nI,GAAP,8FACV,IAAA01I,aAAA,uBAAoC11I,GAD1B,cAC/B8/C,EAD+B,OAErCl8K,QAAQ4B,IAAI,yBAA0Bs6K,GAFD,kBAG9BA,GAH8B,kDAA1B,8C,8GCRb,aAEsCgoF,EAAzBA,uBAAyB,SAAC5jQ,EAAO2c,GAAU,MACqC3c,EAAMymP,iBAA1FC,EAD+C,EAC/CA,gBAAiBwmD,EAD8B,EAC9BA,gBAAiBvmD,EADa,EACbA,oBAAqBH,EADR,EACQA,0BACvDimD,EAAoBzsS,EAAMqN,gBAA1Bo/R,iBAEHm7E,EAAa16E,EAEjB,GAAIxmD,GAAmB+lD,GAAoB9lD,EAAqB,CAC9D,IAAM2C,EAAU,IAAIp/N,KAAKw8N,GACnBI,GAA0B,IAAAuC,4BAA2BC,EAAS9C,GACpE,GAAIM,EAAyB,CAC3B,IAAMI,EAAiBJ,EAAwBG,iBAAiBzzO,MAAK,SAAA0zO,GAAA,OAAkBA,EAAeb,WAAaM,KAC/GO,GAAkBA,EAAeogI,gBACnCM,EAAa1gI,EAAeogI,gBAKlC,IAAMO,EAAeD,EAAWniX,MAAM,OAChCkyP,EAAKkwH,EAAa,IAAMA,EAAa,GAAG7jX,cAAcnC,SAAS,MAEjE6tO,EAAO,GAAGgX,EAAgBwC,UAC1BC,EAAQ,IAAIzC,EAAgB0C,WAAa,GACzCzZ,EAAO,GAAG+W,EAAgB9W,cAE9BF,EAAuB,IAAhBA,EAAKvzO,OAAe,IAAMuzO,EAAOA,EAGxC,IAAMkoB,EAAe,CACnBC,kBAAmB,CAEjBnoB,MALJyZ,EAAyB,IAAjBA,EAAMhtP,OAAe,IAAMgtP,EAAQA,GAKvC,IAAkBzZ,EAAlB,IAA0BC,EAC1ByW,MAAoC,IAA3ByhI,EAAa,GAAG1rX,OAAe,IAAM0rX,EAAa,GAAKA,EAAa,IAA7E,MACAlwH,GAAIA,EACJG,SAAU,GACVC,MAAO,GACPC,gBAAiB,SAEnBr7O,QACAs7O,UAAW,YAIb,OADAv4P,QAAQ4B,IAAI,eAAgBs2P,GACrBA,I,iHC5CT,aAGMkwH,GAAY,EAFlB,QAEkBC,YAEZC,EAA8B,SAAChoX,GAAU,MAEZA,EAAMwc,UAAhC/T,EAFsC,EAEtCA,SAAU++O,EAF4B,EAE5BA,aACVv+M,EAA6ExgC,EAA7EwgC,MAAOS,EAAsEjhC,EAAtEihC,UAAW2sI,EAA2D5tK,EAA3D4tK,SAAUntI,EAAiDzgC,EAAjDygC,MAAOwoH,EAA0CjpJ,EAA1CipJ,KAAMjjJ,EAAoChG,EAApCgG,MAAOg7B,EAA6BhhC,EAA7BghC,QAASG,EAAoBnhC,EAApBmhC,OAAQ+sI,EAAYluK,EAAZkuK,SACjEyxE,EAA4BZ,EAA5BY,aAEP,MAAO,CACLn/M,QACAS,YACA2sI,WACAntI,QACAuoH,UAAW22F,EAAeA,EAAe,IAAM,IAPdZ,EAAdW,WAQnBxxE,WACAjlB,OACAjjJ,QACAg7B,UACA+vN,OAAQ,GACRJ,eAAe,EACfC,uBAAuB,EACvB/iF,OAAO,EACP1sI,SACAorF,iBAAmBn1H,OAAOg1H,YAAch1H,OAAOg1H,YAAY5rF,MAAQ,GACnE8rF,oBAAsBl1H,OAAOg1H,YAAch1H,OAAOg1H,YAAY12H,KAAO,GACrEu1H,WAAY7zH,OAAOg1H,YACfh1H,OAAOg1H,YAAYK,OAAWpjH,KAAKouE,MAAgB,IAAVpuE,KAAKqnE,IAC7C2uS,GAAaA,EAAUvoX,GAAMuoX,EAAUvoX,EAAEkG,MAAM,KAAK,GAAK,GAC9DqzE,aAAch4E,SAASC,SAASmC,QAAU,MAC1CixH,iBAAkB,wBAClBD,0BAA0B,EAC1BolI,6BAA8B,GAC9BC,qBAAsB,GACtB5jI,SAAU,QACV7B,MAAOhzH,SAASgzH,OAAShzH,SAASgzH,MAAMt0G,SAAW1e,SAASgzH,MAAMt0G,WAAa,OAIvD2jP,EAAfA,aAAe,SAACnjQ,GAC3B,OAAO,IAAAwxQ,aAAY,6BAA8Bw2G,EAA4BhoX,KAGrDujQ,EAAbA,WAAa,SAACvjQ,GAAU,IAE7B65L,EAAU,CACd,eAAgB,mBAChB,cAAiB,UAHe75L,EAAMwc,UAAjC+1P,yBAKP,OAAO,IAAAf,aAAY,gCAAiCw2G,EAA4BhoX,GAAQ65L,K,gFCnD1EkuL,SAAT,WAAsC,IAApBx9W,EAAoB,uDAAN,KACrCA,EAAcA,GAAe1K,OAAO2B,SAASgJ,OAG7C,IAFA,IAAMC,EAAQ,GACRC,GAA4B,MAAnBH,EAAY,GAAaA,EAAYnF,OAAO,GAAKmF,GAAa9E,MAAM,KAC1ExJ,EAAI,EAAGA,EAAIyO,EAAMvO,OAAQF,IAAK,CACrC,IAAI0O,EAAOD,EAAMzO,GAAGwJ,MAAM,KAC1BgF,EAAMG,mBAAmBD,EAAK,IAAI3G,eAAiB4G,mBAAmBD,EAAK,IAAM,IAEnF,OAAOF,I,8ECR0B+6O,EAAtBA,oBAAsB,SAACx7N,EAAMw3B,GACxC,MAAO,CACLvpB,SAAS,EACT2lB,MAAO,QACP5zB,OACAw3B,QAASA,GAAW,CAAC,CACnBx3B,KAAM,a,iICNZ,YACA,QAGiC27O,EAApBA,kBAAoB,SAACp3K,EAAOn4B,GAAgF,IAAzExvC,EAAyE,uDAA5D,QAAS6I,EAAmD,uDAAhC,KAAM5P,EAA0B,uDAAT,KAExGi9P,GAAiB,IAAAnhP,sBAGjBssV,EAAqB,CAAC,SAAU,UAAW,YAAa,eAAetgX,MAAK,SAAAmwG,GAAA,OAAWh3G,SAASC,SAASoC,iBAAmB20G,KAE5HowQ,EACmC,YAArCpnX,SAASC,SAASoC,gBAAiC/G,OAAOyhB,OAAOi/P,EAAe52O,QAAQtf,GAAYy6L,YAAYx/M,SAAS0sF,EAAMO,SAC7Hm5R,GAAsB15R,EAAMO,QAAU,IAGxCuxH,EAAkBy8D,EAAe3vB,mBAAmB86H,EAAqB15R,EAAQA,EAAMO,OAAQloE,EAAY6I,GAE1G4wL,IACH3gN,QAAQ4B,IAAI,6BAA8BitF,GAE1C8xH,EAAkB,CAChBE,aAAc,CAAC,CAAC,EAAG,GAAI,CAAC9wL,EAAiBpoB,MAAO,GAAI,CAACooB,EAAiBpoB,MAAOooB,EAAiBloB,QAAS,CAAC,EAAGkoB,EAAiBloB,SAC5HF,MAAOooB,EAAiBpoB,MACxBE,OAAQkoB,EAAiBloB,SAK7B,IAAMF,EAAQknF,EAAM2xH,WAAa3xH,EAAM2xH,WAAW,GAAK3xH,EAAM2xH,WAAW,GAAKG,EAAgBh5M,MACvFE,EAASgnF,EAAM2xH,WAAa3xH,EAAM2xH,WAAW,GAAK3xH,EAAM2xH,WAAW,GAAKG,EAAgB94M,OAGxFovF,EAAa71F,SAAS8oD,cAAc,UAC1C+sC,EAAWC,aAAa,QAAYvvF,EAApC,MACAsvF,EAAWC,aAAa,SAAarvF,EAArC,MACA,IAAMsvF,EAAYF,EAAWG,WAAW,KAAM,CAAEo9J,oBAAoB,IAIlEr9J,EAAUE,YAAcl3E,GAAkBA,EAAe8/F,mBAAqB,IAAO,GAIvF9oB,EAAU10B,UAAU,EAAG,EAAGw0B,EAAWtvF,MAAOsvF,EAAWpvF,QACvD,IAAMuzE,EAAKyT,EAAM2xH,WAAa,EAAIG,EAAgBE,aAAa,GAAG,GAC5DxlI,EAAKwT,EAAM2xH,WAAa,EAAIG,EAAgBE,aAAa,GAAG,GAClE1pH,EAAUG,UAAU5gC,EAAO0kB,EAAIC,EAAI1zE,EAAOE,EAAQ,EAAG,EAAGF,EAAOE,GAG/D,IAAIqwD,EAAY,KAChB,IACEA,EAAYi/B,EAAUK,aAAa,EAAG,EAAG7vF,EAAOE,GAChD,MAAO5H,GAEP,OADAD,QAAQ4B,IAAI,gCAAiCitF,EAAOn4B,EAAOxvC,EAAY6I,EAAkB9vB,GAClF,KAcT,IAVA,IAAM6P,EAAMooD,EAAUj8D,KAElB8C,SAAGwiW,SAAG3wV,SAAGD,SAEP83W,EAAc,CAClB1pX,EAAG,EAAA+E,YAAc,EAAI,GACrBy9V,EAAG,GACH3wV,EAAG,EAAA9M,YAAc,EAAI,IAGdjE,EAAI,EAAGk7E,EAAM7iB,EAAUj8D,KAAKQ,OAAQoD,EAAIk7E,EAAKl7E,GAAK,EAEzDd,EAAI+Q,EAAIjQ,GACR0hW,EAAIzxV,EAAIjQ,EAAI,GACZ+Q,EAAId,EAAIjQ,EAAI,GAGF,KAFV8Q,EAAIb,EAAIjQ,EAAI,KAEId,EAAI,GAAO6R,EAAI,GAAO2wV,EAAI,GACpCphV,GAAkBA,EAAe8/F,oBACnClhH,EAAI,IACJwiW,EAAI,EACJ3wV,EAAI,KAEJ7R,GAAQ0pX,EAAY1pX,EACpBwiW,GAAQknB,EAAYlnB,EACpB3wV,GAAQ63W,EAAY73W,GAElB2wV,EAAI,MACNA,EAAI,KAENzxV,EAAIjQ,GAAKd,EACT+Q,EAAIjQ,EAAI,GAAK0hW,EACbzxV,EAAIjQ,EAAI,GAAK+Q,EACbd,EAAIjQ,EAAI,GAAK8Q,GACJ63W,IACT14W,EAAIjQ,GAAK,EACTiQ,EAAIjQ,EAAI,GAAK,EACbiQ,EAAIjQ,EAAI,GAAK,EACbiQ,EAAIjQ,EAAI,GAAK,GAKjBs3F,EAAU10B,UAAU,EAAG,EAAG96D,EAAOE,GACjCsvF,EAAUuxR,aAAaxwT,EAAW,EAAG,GAErC,IAAM07L,EAAa38J,EAAWc,YACxBwuK,EAAgB,IAAI/tM,MAC1B+tM,EAAc3sK,YAAc,YAC5B2sK,EAAc5lD,gBAAkB9xH,EAAM8xH,iBAAmB,KACzD4lD,EAAc5sJ,OAAS9qB,EAAM8qB,QAAU,KACvC,IACE4sJ,EAAcx/P,IAAM6sP,EACpB,MAAOz1P,GACP6B,QAAQ4B,IAAIzD,EAAG,iCAAmCy1P,GAEpD,MAAO,CACL/kK,QACAsI,YACAwpH,kBACAizC,aACA2S,kBAIgCoiH,EAAvBA,qBAAuB,SAAC95R,EAAOn4B,GAAwC,IAAjC/uD,EAAiC,uDAAzB,KAAME,EAAmB,uDAAV,KASlEovF,EAAa71F,SAAS8oD,cAAc,UAC1C+sC,EAAWC,aAAa,SAAarvF,EAArC,MACAovF,EAAWC,aAAa,QAAYvvF,EAApC,MACA,IAAMwvF,EAAYF,EAAWG,WAAW,KAAM,CAAEo9J,oBAAoB,IAQpE,GALAr9J,EAAUE,YAAc,GAGxBF,EAAU10B,UAAU,EAAG,EAAGw0B,EAAWtvF,MAAOsvF,EAAWpvF,SAEjD6uD,EAAM4yF,UAAoC,IAAxB5yF,EAAMkyT,cAC5B,MAAO,CACL/5R,QACAsI,YACAy8J,WAAY,IAIhBz8J,EAAUG,UAAU5gC,EAAO,EAAG,GAS9B,IANA,IAAMwB,EAAYi/B,EAAUK,aAAa,EAAG,EAAG7vF,EAAOE,GAGhDiI,EAAMooD,EAAUj8D,KAElB8C,SAAGwiW,SAAG3wV,SAAGD,SACJ9Q,EAAI,EAAGk7E,EAAM7iB,EAAUj8D,KAAKQ,OAAQoD,EAAIk7E,EAAKl7E,GAAK,EAEzDd,EAAI+Q,EAAIjQ,GACR0hW,EAAIzxV,EAAIjQ,EAAI,GACZ+Q,EAAId,EAAIjQ,EAAI,GAGF,KAFV8Q,EAAIb,EAAIjQ,EAAI,MAGVd,GAAQ,GACR6R,GAAQ,IACR2wV,GAAQ,IACA,MACNA,EAAI,KAENzxV,EAAIjQ,GAAKd,EACT+Q,EAAIjQ,EAAI,GAAK0hW,EACbzxV,EAAIjQ,EAAI,GAAK+Q,EACbd,EAAIjQ,EAAI,GAAK8Q,GAWjB,OANAwmF,EAAU10B,UAAU,EAAG,EAAGw0B,EAAWtvF,MAAOsvF,EAAWpvF,QACvDsvF,EAAUuxR,aAAaxwT,EAAW,EAAG,GAK9B,CACL22B,QACAsI,YACAy8J,WAAY38J,EAAWc,e,8ECtK3B,I,IAAA,S,IACA,OACA,SACA,Q,IACA,MACA,Q,mDAG4B,mBAAjBr7F,OAAO+2B,QAEhB/2B,OAAOkC,eAAelC,OAAQ,SAAU,CACtCwC,MAAO,SAAgBwf,GACrB,GAAc,MAAVA,EACF,MAAM,IAAIisS,UAAU,8CAKtB,IAFA,IAAIpqP,EAAK7jE,OAAOgiB,GAEP9I,EAAQ,EAAGA,EAAQ6+P,UAAUh4Q,OAAQmZ,IAAS,CACrD,IAAIizW,EAAap0G,UAAU7+P,GAE3B,GAAkB,MAAdizW,EACF,IAAK,IAAIC,KAAWD,EAEdnsX,OAAOC,UAAUC,eAAeC,KAAKgsX,EAAYC,KACnDvoT,EAAGuoT,GAAWD,EAAWC,IAKjC,OAAOvoT,GAETq0M,UAAU,EACVD,cAAc,IAIO,mBAAd/kQ,MAAM6pD,OACf7pD,MAAM6pD,KAAO,SAAU95D,GACrB,MAAO,GAAGU,MAAMxD,KAAK8C,KAKzB,IAOIopX,EAAe,SAAS70H,EAAIz1P,GAC9B,IAAImqG,EAAQxnG,SAAS4nX,YAAY,cACjCpgR,EAAMqgR,UAAUxqX,GAAM,GAAM,GAC5By1P,EAAG4hC,cAAcltL,IAGbsgR,EAAgB,SAACtoF,GACrB,OAAOlnR,MAAMknR,GAAY,EAAIA,GAwtC3BuoF,EArtCkB,WAUpB,IAAIA,EAAY,SAAUj1H,EAAIphG,GAC1B9qJ,KAAKksP,GAAKA,EACVlsP,KAAKohX,OAAShoX,SAASg9F,cAAc,gBACrCp2F,KAAKqsN,WAAa,EAClBrsN,KAAKqhX,UAAY,EACjBrhX,KAAK40E,OAAS,CACZx6D,EAAG,EACHC,EAAG,GAELra,KAAKooD,SAAW,CACdhuC,EAAG,EACHC,EAAG,GAELra,KAAKshX,QAAU,KACfthX,KAAKuhX,mBAAoB,EACzBvhX,KAAK8mD,WAAY,EACjB9mD,KAAKwhX,QAAU,KACfxhX,KAAKwhX,QAAU,KACfxhX,KAAK8qJ,QAAUp2J,OAAO+2B,OAAO,GAAIzrB,KAAKowH,SAAU06B,GAChD9qJ,KAAKyhX,cACLzhX,KAAK0hX,aACD1hX,KAAK8qJ,QAAQsyG,cACfp9P,KAAK2hX,SAGP3hX,KAAK0iG,UAGP2jF,EAAM,SAAU19K,EAAGC,GACjB,OAAOD,EAAIC,GAEbg5W,EAAY,SAAU1qX,EAAO2qX,GAC3B,OAAO3qX,EAAQ2qX,EAAW,KAAQ3qX,EAAQ2qX,EAAW,KAEvDC,EAAc,KAEhBX,EAAUxsX,UAAY,CAEpBy7H,SAAU,CACR28F,cAAe,KACfg1J,cAAe,IACfx9D,kBAAmB,IACnBllT,QAAS,KACT2iX,QAAS,EACTC,cAAc,EACdC,OAAO,EACPC,sBAAuB,EACvBC,mBAAoB,eACpBC,iBAAkB,aAClBC,mBAAoB,eACpBC,iBAAkB,aAClBC,mBAAoB,eACpBplH,cAAc,GAQhBqlH,gBAAiB,SAAU7hR,GAAwB,IAAjBngG,IAAiB,yDACjDsgX,EAAa/gX,KAAKksP,GAAIlsP,KAAK8qJ,QAAQw3N,oBACnCtiX,KAAK0iX,gBACL1iX,KAAK2iX,kBAAmB,EACxB3iX,KAAK4iX,gBAAiB,EACtBniX,EAAWT,KAAK62Q,WAAWj2K,GAAS5gG,KAAK6iX,WAAWjiR,IAOtDi2K,WAAY,SAAUj2K,GACpB,GAAI5gG,KAAKqsN,WAAa,EAAK,CACzB,IAAI5rH,EAAQzgG,KAAK8iX,WAAWliR,GAAO,GACnC5gG,KAAK+iX,KAAKtiR,EAAOzgG,KAAK2iX,kBACtB3iX,KAAK40E,OAAS50E,KAAKgjX,eAAehjX,KAAK40E,QACvC50E,KAAK2iX,iBAAmBliR,IAO5BoiR,WAAY,SAAUjiR,GACpB,IAAIx4C,EAAWpoD,KAAK8iX,WAAW,CAC7B9oW,QAAS,CAAC,CACRsmF,MAAOM,EAAMN,MACbC,MAAOK,EAAML,UAEd,GAEHvgG,KAAK+iX,KAAK36T,EAAUpoD,KAAK2iX,kBACzB3iX,KAAK40E,OAAS50E,KAAKgjX,eAAehjX,KAAK40E,QACvC50E,KAAK2iX,iBAAmBv6T,GAG1B66T,cAAe,WACblC,EAAa/gX,KAAKksP,GAAIlsP,KAAK8qJ,QAAQy3N,kBACnCviX,KAAK8P,OAOPozW,gBAAiB,WACfnC,EAAa/gX,KAAKksP,GAAIlsP,KAAK8qJ,QAAQs3N,oBACnCpiX,KAAK0iX,gBACL1iX,KAAKqhX,UAAY,EACjBrhX,KAAKmjX,QAAU,EACfnjX,KAAKojX,gBAAiB,EACtBpjX,KAAK4iX,gBAAiB,GAOxBS,WAAY,SAAUziR,EAAOo4Q,GAE3B,IAAIsK,EAActjX,KAAKujX,eAAevjX,KAAK8iX,WAAWliR,IACpD7+C,EAAQi3T,EAAWh5W,KAAKqhX,UAC1BrhX,KAAKqhX,UAAYrI,EAGjBh5W,KAAKmjX,SAAW,EACZnjX,KAAKmjX,QAAU,IAEjBnjX,KAAK+hD,MAAMA,EAAOuhU,GAClBtjX,KAAK+iX,KAAKO,EAAatjX,KAAKojX,iBAE9BpjX,KAAKojX,eAAiBE,GAGxBE,cAAe,WACbzC,EAAa/gX,KAAKksP,GAAIlsP,KAAK8qJ,QAAQu3N,kBACnC,IAAMoB,EAAa7B,EAAU5hX,KAAKqsN,WAAY,GAC9C,UAAMpoM,UAAS,IAAAgE,gBAAew7V,EAAa,EAAIzjX,KAAKqsN,aACpDrsN,KAAK8P,OAOP4zW,gBAAiB,SAAU9iR,GAEzB,IAAI5uD,EAAShyC,KAAK8iX,WAAWliR,GAAO,GAClCyrH,EAAarsN,KAAKqsN,WAAa,EAAI,EAAIrsN,KAAK8qJ,QAAQiiE,cACpD42J,EAAkB3jX,KAAKqsN,WACvBu3J,EAAkB,SAAUj0F,GAC1B3vR,KAAK6jX,QAAQF,EAAkBh0F,GAAYtjE,EAAas3J,GAAkB3xU,IACzEv6C,KAAKuI,MAENA,KAAK4iX,iBAGLe,EAAkBt3J,IACpBr6K,EAAShyC,KAAK8jX,wBAGhB9jX,KAAKwtF,QAAQxtF,KAAK8qJ,QAAQy5J,kBAAmBq/D,EAAgB5jX,KAAK+jX,OAClEhD,EAAa/gX,KAAKksP,GAAIlsP,KAAK8qJ,QAAQ03N,sBAUrC9tQ,aAAc,SAAU1iE,EAAQq6K,GAA2D,WAA/C23J,EAA+C,wDAA1BC,IAA0B,yDAMnF1kX,GAAWyyC,GAAyB,IAAfq6K,EACrB63J,EAAkB3kX,GAAWS,KAAK40E,OAAOx6D,EAAI,EAE9CiyM,IACHA,EAAarsN,KAAKqsN,WAAa,EAAIrsN,KAAKqsN,WAAarsN,KAAK8qJ,QAAQiiE,eAG/D/6K,IACHA,EAAS,CACP53B,EAAGpa,KAAKksP,GAAGr6I,YAAc,EACzBx3F,EAAGra,KAAKksP,GAAGp6I,aAAe,IAS9B,IAAMqyQ,EAAgB,EAAAvoX,oBAAsBooX,GAAgBhkX,KAAKqsN,aAAersN,KAAK8qJ,QAAQzrJ,QACvFskX,EAAkB3jX,KAAKqsN,WACvB+3J,EAAc,CAClBhqW,EAAuB,IAApBpa,KAAKqsN,WAAmB,EAAIrsN,KAAK40E,OAAOx6D,EAC3CC,EAAuB,IAApBra,KAAKqsN,WAAmB,EAAIrsN,KAAK40E,OAAOv6D,GAEvCgqW,EAAe,CACnBjqW,EAAG8mW,GAAe70J,EAAa,GAAKr6K,EAAO53B,GAC3CC,EAAG6mW,GAAe70J,EAAa,GAAKr6K,EAAO33B,IAK7C,IAAIra,KAAK4iX,eAAT,CAOA,GAJIe,EAAkBt3J,IACpBr6K,EAAShyC,KAAK8jX,wBAGZK,EAAe,CAEjB,IAAMP,EAAiBO,EAClB,SAAUx0F,GACX3vR,KAAK40E,OAAOx6D,EAAI8mW,EAAckD,EAAYhqW,EAAIu1Q,GAAY00F,EAAajqW,EAAIgqW,EAAYhqW,IACvFpa,KAAK40E,OAAOv6D,EAAI6mW,EAAckD,EAAY/pW,EAAIs1Q,GAAY00F,EAAahqW,EAAI+pW,EAAY/pW,IACvFra,KAAK2hX,UACJlqX,KAAKuI,MACL,SAAU2vR,GAEX3vR,KAAK6jX,QAAQF,EAAkBh0F,GAAYtjE,EAAas3J,GAAkB3xU,GAAQ,IACjFv6C,KAAKuI,MAEVA,KAAKwtF,QAAQxtF,KAAK8qJ,QAAQy5J,kBAAmBq/D,EAAgB5jX,KAAK+jX,OAAO,WACvEhD,EAAa,EAAK70H,GAAI,EAAKphG,QAAQu3N,kBAE/B6B,GACF,EAAKI,cAActyU,EAAQq6K,GAE7B,EAAKq2J,gBACL,EAAK5yW,MAIL,EAAK8kE,OAASyvS,UAShBrkX,KAAK2hX,OAAO0C,GACRH,GACFlkX,KAAKskX,cAActyU,EAAQq6K,GAE7BrsN,KAAK6jX,QAAQx3J,EAAYr6K,GAAQ,GACjChyC,KAAK40E,OAAS50E,KAAKgjX,eAAeqB,GAClCrkX,KAAK0iX,gBACL1iX,KAAK4iX,gBAAiB,EACtB5iX,KAAK40E,OAAS50E,KAAKgjX,eAAeqB,GAClCrkX,KAAK8P,MACLixW,EAAa/gX,KAAKksP,GAAIlsP,KAAK8qJ,QAAQu3N,kBAGhC6B,GACHlkX,KAAKskX,cAActyU,EAAQq6K,EAAY43J,KAQ3CM,sBAAuB,WAAiC,IAAvBC,EAAuB,wDAItDxkX,KAAKykX,sBAAsB,KAAMD,GACjCxkX,KAAKuhX,mBAAoB,GAyB3B+C,cAAe,SAAUtyU,EAAQq6K,EAAY43J,GAE3C,GAAmB,IAAf53J,GAAoBrsN,KAAKuhX,kBAC3BvhX,KAAKukX,6BAGP,wBACEvkX,KAAK0kX,mBAAmB1yU,EAAQq6K,EAAY43J,QAG9C,GAAIjyU,GAAUA,EAAOghE,UACnB,GAAIhhE,EAAOvxC,eASJ,IAAKuxC,EAAO53B,EAAG,CACpB,IAAM42T,EAAuB,IAAbh/R,EAAO53B,EAAU,IAAM,EACjCuqW,EAAW3yU,EAAO6/D,YAAc7/D,EAAOghE,SAAW,IAGlDqtJ,EAAgB,cAAkB2wE,GAFzB2zC,EAAW,IAAM,EAAI,IAAMA,IAEpB,UACtB3kX,KAAKykX,sBAAsBpkH,GAC3BrgQ,KAAKuhX,mBAAoB,QAIlBvvU,IAAWA,EAAOvxC,UAAYuxC,EAAO53B,GAAKpa,KAAKuhX,mBACxDvhX,KAAKukX,yBAUTG,mBAAoB,SAAU1yU,EAAQq6K,EAAY43J,GAChD,GAAIjyU,GAAUA,EAAOghE,SAAU,CAC7B,IAAMjsG,EAAQ,UAAM5E,WAChByiX,EAAY5yU,EAAOvxC,SAAW,EAAAoyG,aAAaC,aAAaC,OAAS,EAAAF,aAAao6L,aAAavuH,QAM/F,IALK33K,EAAMypL,WAAWx5B,wBAAyBjwJ,EAAMilG,UAAUtvC,oBAAwB1qB,EAAOvxC,WAC5FmkX,EAAYX,EAAoBW,EAAY,EAAA/xQ,aAAam6L,qBAAqBtuH,QAAU,EAAA7rE,aAAam6L,qBAAqBtuH,SAIxH1sI,EAAOghE,SAAW,IAAO76G,OAAOwqD,YAAc,KAAO,CAEvD,IAAI0pL,EAAY,EACZr6L,EAAOghE,SAAW,GACpBq5H,EAAYu4I,GAEZv4I,EAA8B,IAAlBr6L,EAAOghE,SACfhhE,EAAOghE,SAAW,GACpBq5H,GAAwB,GACfr6L,EAAOghE,SAAW,GAC3Bq5H,GAAwB,GACfr6L,EAAOghE,SAAW,KAC3Bq5H,GAAwB,IAEtBA,EAAYu4I,IACdv4I,EAAYu4I,IAGhB5kX,KAAKykX,sBAAsB,eAAiBp4I,EAAY,OAAO,GAC/DrsO,KAAKuhX,mBAAoB,OAChBvhX,KAAKuhX,uBAGPvvU,IAAWA,EAAOvxC,UAAYuxC,EAAO53B,GAAKpa,KAAKuhX,mBACxDvhX,KAAKukX,uBAAsB,IAS/BE,sBAAuB,SAAUpkH,GAAoC,WAAvBmkH,EAAuB,wDAG/DnkH,IAIGrgQ,KAAKuhX,oBACRvhX,KAAKuhX,mBAAoB,IAG7B5/N,aAAa3hJ,KAAK6kX,qBACdL,IACFxkX,KAAK8kX,UAAUzwW,MAAM+2R,WAAa,iBAEpCprS,KAAK8kX,UAAUzwW,MAAMy5E,gBAAkBuyK,EACvCrgQ,KAAK8kX,UAAUzwW,MAAMisP,aAAeD,EACpCrgQ,KAAK8kX,UAAUzwW,MAAMksP,YAAcF,EACnCrgQ,KAAK8kX,UAAUzwW,MAAMmsP,WAAaH,EAClCrgQ,KAAK8kX,UAAUzwW,MAAMssH,UAAY0/H,EAC7BmkH,IACFxkX,KAAK6kX,oBAAsBn2R,YAAW,WACpC,EAAKo2R,UAAUzwW,MAAM+2R,WAAa,SACjC,OASP43E,eAAgB,SAAUpuS,GACxB,IAAIigE,GAAQ70I,KAAKqsN,WAAa,GAAKrsN,KAAK+kX,gBACtChwO,GAAQ/0I,KAAKqsN,WAAa,GAAKrsN,KAAKglX,gBACpCC,EAAa76W,KAAKywH,IAAIga,EAAM,GAC5BqwO,EAAa96W,KAAKywH,IAAIka,EAAM,GAC5BowO,EAAa/6W,KAAKwwH,IAAIia,EAAM,GAC5BuwO,EAAah7W,KAAKwwH,IAAIma,EAAM,GAE9B,MAAO,CACL36H,EAAG8mW,EAAc92W,KAAKwwH,IAAIxwH,KAAKywH,IAAIjmD,EAAOx6D,EAAG+qW,GAAaF,IAC1D5qW,EAAG6mW,EAAc92W,KAAKwwH,IAAIxwH,KAAKywH,IAAIjmD,EAAOv6D,EAAG+qW,GAAaF,MAU9DrB,QAAS,SAAUx3J,EAAYr6K,GAAoC,IAA5BqzU,IAA4B,yDACjErlX,KAAK+hD,MAAMsqK,EAAarsN,KAAKqsN,WAAYr6K,GACrCqzU,GAAsC,IAAfh5J,GACzBrsN,KAAKskX,cAAc,KAAMj4J,IAS7BtqK,MAAO,SAAUA,EAAO/P,GACtB+P,EAAQ/hD,KAAKslX,gBAAgBvjU,GAC7B/hD,KAAKulX,UAAU,CACbnrW,EAAG8mW,GAAen/T,EAAQ,IAAM/P,EAAO53B,EAAIpa,KAAK40E,OAAOx6D,IACvDC,EAAG6mW,GAAen/T,EAAQ,IAAM/P,EAAO33B,EAAIra,KAAK40E,OAAOv6D,OAS3DirW,gBAAiB,SAAUvjU,GACzB,IAAIyjU,EAAqBxlX,KAAKqsN,WAG9B,OAFArsN,KAAKqsN,YAActqK,EACnB/hD,KAAKqsN,WAAajiN,KAAKC,MAAwF,IAAlFD,KAAKwwH,IAAI56H,KAAK8qJ,QAAQzrJ,QAAS+K,KAAKywH,IAAI76H,KAAKqsN,WAAYrsN,KAAK8qJ,QAAQk3N,WAAoB,IAChHhiX,KAAKqsN,WAAam5J,GAQ3BzC,KAAM,SAAU/wU,EAAQyzU,GAClBA,IACCzlX,KAAK8qJ,QAAQm3N,aAEX73W,KAAK4pE,IAAIhiC,EAAO53B,EAAIqrW,EAAWrrW,GAAKhQ,KAAK4pE,IAAIhiC,EAAO33B,EAAIorW,EAAWprW,GACpEra,KAAKulX,UAAU,CACbnrW,IAAK43B,EAAO53B,EAAIqrW,EAAWrrW,GAC3BC,EAAG,IAILra,KAAKulX,UAAU,CACblrW,IAAK23B,EAAO33B,EAAIorW,EAAWprW,GAC3BD,EAAG,IAKPpa,KAAKulX,UAAU,CACblrW,IAAK23B,EAAO33B,EAAIorW,EAAWprW,GAC3BD,IAAK43B,EAAO53B,EAAIqrW,EAAWrrW,OAWnCmpW,eAAgB,SAAUvpW,GACxB,OAAOha,KAAK0lX,aAAa1rW,IAM3B0rW,aAAc,SAAUC,GACtB,MAAO,CACLvrW,EAAGurW,EAAQ79W,KAAI,SAAU0+Q,GAAK,OAAOA,EAAEpsQ,KAAM9Y,OAAO+kL,GAAOs/L,EAAQlxX,OACnE4lB,EAAGsrW,EAAQ79W,KAAI,SAAU0+Q,GAAK,OAAOA,EAAEnsQ,KAAM/Y,OAAO+kL,GAAOs/L,EAAQlxX,SASvE8wX,UAAW,SAAU3wS,GACnB50E,KAAK40E,OAAS,CACZx6D,EAAG8mW,EAAclhX,KAAK40E,OAAOx6D,EAAIw6D,EAAOx6D,GACxCC,EAAG6mW,EAAclhX,KAAK40E,OAAOv6D,EAAIu6D,EAAOv6D,KAI5CurW,SAAU,WACJ5lX,KAAKqsN,WAAarsN,KAAK8qJ,QAAQi3N,cACjC/hX,KAAK6lX,mBACI7lX,KAAK8lX,eAAe9lX,KAAK40E,SAClC50E,KAAK+lX,2BASTD,eAAgB,SAAUlxS,GACxB,IAAIoxS,EAAkBhmX,KAAKgjX,eAAepuS,GAC1C,OAAOoxS,EAAgB5rW,IAAMw6D,EAAOx6D,GAClC4rW,EAAgB3rW,IAAMu6D,EAAOv6D,GAMjC0rW,wBAAyB,WACvB,IAAI1B,EAAerkX,KAAKgjX,eAAehjX,KAAK40E,QAC1CwvS,EACKpkX,KAAK40E,OAAOx6D,EADjBgqW,EAEKpkX,KAAK40E,OAAOv6D,EAEjBupW,EAAkB,SAAUj0F,GAC1B3vR,KAAK40E,OAAOx6D,EAAI8mW,EAAckD,EAAgBz0F,GAAY00F,EAAajqW,EAAIgqW,IAC3EpkX,KAAK40E,OAAOv6D,EAAI6mW,EAAckD,EAAgBz0F,GAAY00F,EAAahqW,EAAI+pW,IAC3EpkX,KAAK2hX,UACJlqX,KAAKuI,MAEVA,KAAKwtF,QACHxtF,KAAK8qJ,QAAQy5J,kBACbq/D,EACA5jX,KAAK+jX,QAQT8B,iBAAkB,WAChB,IAAIlC,EAAkB3jX,KAAKqsN,WAEzBr6K,EAAShyC,KAAK8jX,uBACdF,EAAkB,SAAUj0F,GAC1B3vR,KAAK6jX,QAAQF,EAAkBh0F,GAHpB,EAG6Cg0F,GAAkB3xU,IACzEv6C,KAAKuI,MAEVA,KAAKwtF,QACHxtF,KAAK8qJ,QAAQy5J,kBACbq/D,EACA5jX,KAAK+jX,QAOTkC,kBAAmB,WACjBjmX,KAAKkmX,cAAclmX,KAAK+kX,gBAAkB/kX,KAAK26E,mBAOjDwrS,qBAAsB,WACpB,OAAOnmX,KAAK8kX,UAAUl/H,YAAc5lP,KAAKksP,GAAGtG,aAO9CjrK,eAAgB,WACd,OAAO36E,KAAKksP,GAAGtG,YAAc5lP,KAAKksP,GAAG7pM,cAQvCyhU,qBAAsB,WAIpB,IAAIrvX,EAASuL,KAAK8kX,UAAUl/H,YAAc5lP,KAAKqsN,WAC7C4iE,EAAcjvR,KAAK40E,OAAOx6D,EAC1BgsW,EAAc3xX,EAASw6R,EAAajvR,KAAK8kX,UAAUl/H,YACnDygI,EAAmBp3F,EAAam3F,EAChCtzN,EAAUuzN,EAAmBrmX,KAAK8kX,UAAUl/H,aAAeygI,EAAmB,GAG9ExmX,EAASG,KAAK8kX,UAAUziU,aAAeriD,KAAKqsN,WAC5C8iE,EAAanvR,KAAK40E,OAAOv6D,EACzBisW,EAAezmX,EAASsvR,EAAYnvR,KAAK8kX,UAAUziU,aACnDkkU,EAAoBp3F,EAAYm3F,EAChCvzN,EAAUwzN,EAAoBvmX,KAAK8kX,UAAUziU,cAAgBkkU,EAAoB,GAMnF,OAHoB,IAAhBH,IAAqBtzN,EAAU9yJ,KAAK8kX,UAAUl/H,aAC7B,IAAjB0gI,IAAsBvzN,EAAU/yJ,KAAK8kX,UAAUziU,cAE5C,CACLjoC,EAAG04I,EACHz4I,EAAG04I,IAIPyzN,QAAS,WACP,OAAQ5E,EAAU5hX,KAAKqsN,WAAY,IAQrCy2J,WAAY,SAAUliR,GACpB,IAAIvU,EAAOrsF,KAAK8kX,UAAUx4R,wBACtBm6R,EAASp6R,EAAKnnF,IAAM9L,SAAS6C,KAAKgrK,UAClCy/M,EAAUr6R,EAAKv6C,KAAO14C,SAAS6C,KAAKwxF,WAExC,OAAO7lF,MAAMjT,UAAU0D,MAAMxD,KAAK+rG,EAAM5mF,SAASlS,KAAI,SAAU24F,GAC7D,MAAO,CACLrmF,EAAGqmF,EAAMH,MAAQomR,EACjBrsW,EAAGomF,EAAMF,MAAQkmR,OA6BvBj5R,QAAS,SAAU4iK,EAAUu2H,EAASC,EAAQ71V,GAE5C,IAAIupC,EAAQi1N,YAAYC,MACxBxvR,KAAK6mX,aAAc,EACnB,IAAM14E,EAAQnuS,KAEdquF,uBAAsB,SAASy4R,EAAWpoI,GAExC,GAAKyvD,EAAM04E,YAAX,CACA,IAAIE,GAAgBroI,EAAOpkL,GAAS81L,EAChC22H,EAAe,IAAGA,EAAe,GAKrCJ,EAFeI,GAGf54E,EAAMwzE,SAEFoF,EAAe,EACjB14R,sBAAsBy4R,IAEtBH,EAAQ,GACJ51V,GACFA,IAEFo9Q,EAAMwzE,SACNxzE,EAAMu0E,gBACNv0E,EAAMwzE,eAiCZe,cAAe,WACb1iX,KAAK6mX,aAAc,GAQrB9C,MAAO,SAAUlsX,GACf,OAAQuS,KAAKsnE,IAAI75E,EAAIuS,KAAKqnE,IAAM,EAAK,IAGvCszS,cAAe,WACb,OAAO/kX,KAAK8kX,UAAUl/H,aAGxBo/H,cAAe,WACb,OAAOhlX,KAAK8kX,UAAUziU,cAGxB6jU,cAAe,SAAU7rW,GACvB,OAAOra,KAAK8kX,UAAUzwW,MAAMxU,OAASwa,EAAI,MAM3ConW,YAAa,WAzyBE,IAAStuW,EAEtBg7E,EAwyBAnuF,KAAK8kX,WA1yBiB3xW,EA0yBQ,4CAxyB9Bg7E,EAAM/0F,SAAS4tX,eAAeC,mBAAmB,KACjDhrX,KAAKirX,UAAY/zW,EACdvL,MAAM6pD,KAAK08B,EAAIlyF,KAAKukJ,UAAU,IAuyBjCxgJ,KAAKshX,QAAUloX,SAASohO,uBAAuB,mBAAmB,GAClEx6N,KAAKksP,GAAGnmF,WAAWohN,aAAannX,KAAK8kX,UAAW9kX,KAAKksP,IACrDlsP,KAAK8kX,UAAU3iU,YAAYniD,KAAKksP,IAEhClsP,KAAK8kX,UAAUzwW,MAAMosU,SAAW,SAChCzgV,KAAK8kX,UAAUzwW,MAAMqnB,SAAW,WAEhC17B,KAAKksP,GAAG73O,MAAM+yW,sBAAwB,QACtCpnX,KAAKksP,GAAG73O,MAAMgzW,mBAAqB,QACnCrnX,KAAKksP,GAAG73O,MAAMizW,kBAAoB,QAClCtnX,KAAKksP,GAAG73O,MAAMkzW,iBAAmB,QACjCvnX,KAAKksP,GAAG73O,MAAMk3R,gBAAkB,SAKlCz7R,IAAK,WACH9P,KAAK4iX,gBAAiB,EACtB5iX,KAAK4lX,WAEL5lX,KAAK2hX,UAMPD,WAAY,WACV,IAAIz8W,EAAOjF,KACXwnX,EAAexnX,KAAK8kX,UAAW9kX,KAAMA,KAAKohX,QAE1CjpX,OAAO0uD,iBAAiB,SAAU7mD,KAAKynX,YAAYhwX,KAAKuI,OACxD4H,MAAM6pD,KAAKzxD,KAAKksP,GAAGtmF,iBAAiB,QAAQxnK,SAAQ,SAASspX,GAC3DA,EAAM7gU,iBAAiB,OAAQ5hD,EAAK08W,OAAOlqX,KAAKwN,OAGzB,QAArBjF,KAAKksP,GAAGy7H,UACV3nX,KAAKksP,GAAGrlM,iBAAiB,OAAQ7mD,KAAK2hX,OAAOlqX,KAAKuI,QAItDynX,YAAa,WACLtvX,OAAOsmO,kBAAoBtmO,OAAO2lO,kBAEtC99N,KAAK2hX,UAITiG,mBAAoB,WAA+F,IAArFvD,EAAqF,uDAAtErkX,KAAK40E,OAAQizS,EAAyD,uDAAtC7nX,KAAKqsN,WAAYy7J,EAAqB,wDAI7Gz7J,EAAarsN,KAAKmmX,uBAAyB0B,EAC7C72C,GAAWqzC,EAAajqW,EAAIiyM,EAC5B07J,GAAW1D,EAAahqW,EAAIgyM,EAC1By7J,IACF92C,GAAoB,KAEtB,IAAIg3C,EAAcF,EACZ,gBAAkB92C,EAAU,EAAI,EAAIA,GAAW,MAAQ+2C,EAAvD,mBAA2F17J,EAAa,KAAOA,EAAa,MAC5H,WAAaA,EAAa,KAAOA,EAAjC,mBAAwE2kH,EAAU,EAAI,EAAIA,GAAW,MAAQ+2C,EAAU,UAC3H1nH,EAAcynH,EACV,cAAgB92C,EAAU,EAAI,EAAIA,GAAW,MAAQ+2C,EAArD,aAAmF17J,EAAa,KAAOA,EAAa,IACpH,SAAWA,EAAa,KAAQA,EAAhC,gBAAsE2kH,EAAU,EAAI,EAAIA,GAAW,MAAQ+2C,EAAa,MAE9H,MAAO,CAAC17J,aAAY2kH,UAAS+2C,UAAS1nH,cAAa2nH,gBAGrDC,mBAAoB,SAAU5nH,GAA+B,IAAlB2nH,EAAkB,uDAAJ,GACvDhoX,KAAKksP,GAAG73O,MAAMy5E,gBAAkBk6R,GAAe3nH,EAC/CrgQ,KAAKksP,GAAG73O,MAAMisP,aAAeD,EAC7BrgQ,KAAKksP,GAAG73O,MAAMksP,YAAcF,EAC5BrgQ,KAAKksP,GAAG73O,MAAMmsP,WAAaH,EAC3BrgQ,KAAKksP,GAAG73O,MAAMssH,UAAYqnP,GAAe3nH,GAM3CshH,OAAQ,WAAsC,IAA5B0C,EAA4B,uDAAbrkX,KAAK40E,OAChC50E,KAAKkoX,cAAgB/vX,OAAOsmO,mBAGhCz+N,KAAKkoX,cAAe,EAKpB/vX,OAAOu2F,WAAY,WACjB1uF,KAAKkoX,cAAe,EACpBloX,KAAKimX,oBAGL,IAAMxlX,EAAsC,SAA3BT,KAAKksP,GAAGj6L,QAAQ8gD,OALJ,EAQzB/yG,KAAK4nX,mBAAmBvD,EAAcrkX,KAAKqsN,YAAY,GADtD2kH,EAPwB,EAOxBA,QAAS3wE,EAPe,EAOfA,YAAa2nH,EAPE,EAOFA,YAGvBG,EAAe,WACbnoX,KAAK+qD,QACP/qD,KAAK+qD,MAAMg7G,WAAWzjH,YAAYtiD,KAAK+qD,cAChC/qD,KAAK+qD,QAEbtzD,KAAKuI,MAEFooX,EAAsBp3C,EAAU,IACtC,GAAIo3C,EAAsB,IAAMtG,IAAgB,EAAD,mBAAqB,CAClE,IACM78K,EAAamjL,EAAsB,GAAKA,GADvB3nX,EAAW,EAAI,KAC+C2nX,EACrFpoX,KAAKykX,sBAAsB,cAAex/K,EAAY,QAOnDjlM,KAAK8qJ,QAAQo3N,OAASliX,KAAK4iX,gBAAkB5iX,KAAK6mX,aACrD7mX,KAAKqoX,MAAO,EACZF,IACAnoX,KAAKioX,mBAAmB5nH,EAAa2nH,KAKjChoX,KAAKqoX,OACProX,KAAK+qD,MAAQ/qD,KAAKksP,GAAGjmF,WAAU,GAC/BjmK,KAAK+qD,MAAM12C,MAAMi0W,cAAgB,OACjCtoX,KAAK8kX,UAAU3iU,YAAYniD,KAAK+qD,OAChC5yD,OAAOu2F,WAAWy5R,EAAa,MAGjCnoX,KAAKioX,mBAAmB5nH,GAExBrgQ,KAAKqoX,MAAO,IAEb5wX,KAAKuI,MAAO,KAMjB0iG,OAAQ,WACN1iG,KAAK2zH,SAAU,GAMjB0pI,QAAS,WACPr9P,KAAK2zH,SAAU,GAMjB1oE,SAAU,WACR,OAAOjrD,KAAKqsN,YAGdvvL,MAAO,WAGL98B,KAAKqsN,WAAa,EAClBrsN,KAAK40E,OAAS,CACZx6D,EAAG,EACHC,EAAG,IAOPopN,kBAAmB,SAAUF,EAAaC,EAAkBtkN,GAAY,WAGtEyiI,aAAa3hJ,KAAKwhX,SACdh+I,GACFrrO,OAAOsrO,mBAAoB,EAC3BzjO,KAAKksP,GAAG73O,MAAM+2R,WAAa,gBAC3BprS,KAAKksP,GAAG73O,MAAMk0W,iBAAmB,gBACjCvoX,KAAKksP,GAAG73O,MAAMm0W,cAAgB,gBAC9BxoX,KAAKwhX,QAAU9yR,YAAW,WACS,kBAA7B,EAAKw9J,GAAG73O,MAAM+2R,aAChB,EAAKl/C,GAAG73O,MAAM+2R,WAAa,OAC3B,EAAKl/C,GAAG73O,MAAMk0W,iBAAmB,OACjC,EAAKr8H,GAAG73O,MAAMm0W,cAAgB,QAEhCrwX,OAAOsrO,mBAAoB,IAC1B,OAEHtrO,OAAOunQ,oBAAqB,EAC5B1/P,KAAKksP,GAAG73O,MAAM+2R,WAAa,4CAC3BprS,KAAKksP,GAAG73O,MAAMk0W,iBAAmB,4CACjCvoX,KAAKksP,GAAG73O,MAAMm0W,cAAgB,4CAC9BxoX,KAAKwhX,QAAU9yR,YAAW,WACS,8CAA7B,EAAKw9J,GAAG73O,MAAM+2R,aAChB,EAAKl/C,GAAG73O,MAAM+2R,WAAa,OAC3B,EAAKl/C,GAAG73O,MAAMk0W,iBAAmB,OACjC,EAAKr8H,GAAG73O,MAAMm0W,cAAgB,QAEhCrwX,OAAOunQ,oBAAqB,IAC3B,OAGL,IAKMW,EAAgB,0BAHV,aAAY98B,EAAavjO,KAAK+kX,gBAAiB7lW,GAGrC,QAEtBlf,KAAKioX,mBAAmB5nH,IAG1Bl4M,YAAa,SAAUy4C,GAEjB5gG,KAAKqsN,WAAa,IACpBrsN,KAAKyoX,WAAY,EACjBzoX,KAAK8mD,UAAY,CAAC85C,EAAMN,MAAOM,EAAML,OAErCpoG,OAAOqmO,WAAY,IAGvB71K,YAAa,SAAUi4C,GACjB5gG,KAAK8mD,YACH9mD,KAAKyoX,WACPzoX,KAAKyiX,gBAAgB7hR,GAAO,GAC5BmgR,EAAa5oX,OAAQ,UAAYy9H,6BACjCz9H,OAAOqmO,WAAY,EACnBx+N,KAAKksP,GAAGhwP,UAAUC,IAAI,QACtBykG,EAAM9V,kBACN8V,EAAM7V,mBAEN/qF,KAAK6iX,WAAWjiR,GAChB5gG,KAAK2hX,UAEP3hX,KAAKyoX,WAAY,IAGrBjgU,UAAW,SAAUo4C,EAAOwsJ,GAG1B,GAAIptP,KAAK8mD,UAAW,CAClB,IAAMkxE,EAAQ5tH,KAAK4pE,IAAI4sB,EAAMN,MAAQtgG,KAAK8mD,UAAU,IAC9CmxE,EAAQ7tH,KAAK4pE,IAAI4sB,EAAML,MAAQvgG,KAAK8mD,UAAU,IAEpD9mD,KAAK8mD,UAAY,KACjB3uD,OAAOqmO,WAAY,EACnBx+N,KAAKksP,GAAGhwP,UAAU27K,OAAO,QACrB73K,KAAK4iX,iBACP5iX,KAAK4iX,gBAAiB,GAGpB5qP,EAAQh4H,KAAK8qJ,QAAQq3N,uBAAyBlqP,EAAQj4H,KAAK8qJ,QAAQq3N,sBACrE/0H,EAAgBxsJ,GAIhB5gG,KAAKijX,qBAEE71H,GACTA,EAAgBxsJ,KAMtB,IAAI4mR,EAAiB,SAAUt7H,EAAIx1O,GACjC,IAAIgyW,EAAU,EAEZC,EAAe,KAEfC,EAAiB,SAAUC,EAAgBjoR,GACzC,GAAIkhR,IAAgB+G,EAAgB,CAElC,GAAI/G,IAAgB+G,EAClB,OAAQ/G,GACN,IAAK,OACHprW,EAAO8sW,cAAc5iR,GACrB,MACF,IAAK,OACHlqF,EAAOusW,cAAcriR,GAK3B,OAAQioR,GACN,IAAK,OACHnyW,EAAOwsW,gBAAgBtiR,GACvB,MACF,IAAK,OACHlqF,EAAO+rW,gBAAgB7hR,IAI7BkhR,EAAc+G,GAGhBC,EAAoB,SAAUloR,GACZ,IAAZ8nR,EACFE,EAAe,QACM,IAAZF,GAAiBhyW,EAAO8vW,UACjCoC,EAAe,OAAQhoR,GAEvBgoR,EAAe,KAAMhoR,IAIzBmoR,EAAgB,SAAU/uW,GACxB,OAAOpS,MAAM6pD,KAAKz3C,GAASlS,KAAI,SAAU24F,GACvC,MAAO,CACLrmF,EAAGqmF,EAAMH,MACTjmF,EAAGomF,EAAMF,WAKfyoR,EAAc,SAAUrgX,EAAGC,GACzB,IAAIwR,EAAGC,EAGP,OAFAD,EAAIzR,EAAEyR,EAAIxR,EAAEwR,EACZC,EAAI1R,EAAE0R,EAAIzR,EAAEyR,EACLjQ,KAAKynE,KAAKz3D,EAAIA,EAAIC,EAAIA,IAS/B4uW,EAAc,SAAUroR,GACtBA,EAAM9V,kBACN8V,EAAM7V,kBA4BR09R,GAAY,EAEdv8H,EAAGrlM,iBAAiB,cAAc,SAAU+5C,GAC1C,IAEKlqF,EAAOi9G,UACR80P,GAAY,EACZC,EAAU9nR,EAAM5mF,QAAQvlB,QAO1B0D,OAAOqmO,WAAY,EACnB,MAAOroO,QAMX+1P,EAAGrlM,iBAAiB,aAAa,SAAU+5C,GACzC,IACE,GAAGlqF,EAAOi9G,QAAS,CACjB,GAAI80P,EACFK,EAAkBloR,GACdkhR,GACFmH,EAAYroR,GAEd+nR,EAAeI,EAAcnoR,EAAM5mF,aAC9B,CACL,OAAQ8nW,GACN,IAAK,OACHprW,EAAO2sW,WAAWziR,EArEX,SAAU+nR,EAAcO,GACvC,IAAIC,EAAgBH,EAAYL,EAAa,GAAIA,EAAa,IAE9D,OADgBK,EAAYE,EAAW,GAAIA,EAAW,IACjCC,EAkEYC,CAAeT,EAAcI,EAAcnoR,EAAM5mF,WAC1E,MACF,IAAK,OACHtD,EAAOmgQ,WAAWj2K,GAGlBkhR,IACFmH,EAAYroR,GACZlqF,EAAOirW,UAIX8G,GAAY,EAGdtwX,OAAOqmO,WAAY,EACnB,MAAOroO,GAEPugB,EAAOomB,QACPpmB,EAAOmvW,uBAIX35H,EAAGrlM,iBAAiB,YAAY,SAAU+5C,GACxC,IAEEzoG,OAAOqmO,WAAY,EACnB9nN,EAAOgsW,iBACFd,EAAUlrW,EAAO21M,WAAY,IAAMy1J,IAEtCprW,EAAOusW,gBACPvsW,EAAOomB,QACPpmB,EAAOmvW,oBAELnvW,EAAOi9G,UAET+0P,EAAU9nR,EAAM5mF,QAAQvlB,OACxBq0X,EAAkBloR,IAEpB,MAAOzqG,GAEPugB,EAAOomB,QACPpmB,EAAOmvW,wBAMb,OAAO1E,EAGOkI,G,UAEDlI,G,wFC3yCA,SAAU59I,EAAa+lJ,EAAYpqW,EAAYy+O,GAI5D,OAAOvkQ,SAASC,SAASoC,gBACvB,IAAK,WACL,IAAK,KACH,OAAQ8nO,GACN,IAAK,SACL,IAAK,gBACL,IAAK,qBACL,IAAK,uBACL,IAAK,sBACL,IAAK,iBACL,IAAK,qBACL,IAAK,qBACL,IAAK,eACL,IAAK,aACL,IAAK,mBACL,IAAK,qBACL,IAAK,4BACL,IAAK,gBACL,IAAK,oBACL,IAAK,8BACL,IAAK,6BACL,IAAK,sCACL,IAAK,+BACL,IAAK,0BACL,IAAK,6BACL,IAAK,8BACL,IAAK,mCACL,IAAK,+BACL,IAAK,2BACL,IAAK,+BACL,IAAK,+BACL,IAAK,iCACL,IAAK,wCACL,IAAK,gCACL,IAAK,uCACL,IAAK,iCACL,IAAK,mCACL,IAAK,mBACL,IAAK,qBACL,IAAK,+BACL,IAAK,uCACL,IAAK,mCACL,IAAK,yCACL,IAAK,wCACL,IAAK,8BACH,OAAO+lJ,EAAa,IAAM,OAAS,OACrC,IAAK,mBACL,IAAK,uBACL,IAAK,yBACL,IAAK,YACL,IAAK,iBACH,MAAmB,UAAfpqW,EACKoqW,EAAa,IAAM,OAAS,OAE5BA,EAAa,IAAM,OAAS,OAEvC,IAAK,SACL,IAAK,SACL,IAAK,cACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,UACL,IAAK,kBACL,IAAK,kBACL,IAAK,eACL,IAAK,cACL,IAAK,cAOH,OANInxX,OAAOwqD,WAAa,KACtBxqD,OAAOoxX,SAAS,CACdrkX,IAAK/M,OAAO+xD,YACZs/T,SAAU,WAGPF,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,gBACH,OAAOA,EAAa,IAAM,OAAS,SACrC,IAAK,mBACL,IAAK,wBACH,MAAmB,UAAfpqW,EACKoqW,EAAa,IAAM,OAAS,OAE5BA,EAAa,IAAM,OAAS,OAEvC,IAAK,oBACL,IAAK,yBACH,MAAmB,UAAfpqW,EACKoqW,EAAa,IAAM,OAAS,OAE5BA,EAAa,IAAM,OAAS,OAEvC,IAAK,QACH,OAAOA,EAAa,IAAM,OAAS,OACrC,QACE,MAAO,IAEb,IAAK,UACL,IAAK,SACH,OAAQ/lJ,GACN,IAAK,SACL,IAAK,cACL,IAAK,gBACL,IAAK,qBACL,IAAK,uBACL,IAAK,sBACL,IAAK,iBACL,IAAK,qBACL,IAAK,qBACL,IAAK,eACL,IAAK,aACL,IAAK,mBACL,IAAK,qBACL,IAAK,4BACL,IAAK,gBACL,IAAK,oBACL,IAAK,8BACL,IAAK,6BACL,IAAK,sCACL,IAAK,+BACL,IAAK,0BACL,IAAK,6BACL,IAAK,8BACL,IAAK,mCACL,IAAK,+BACL,IAAK,2BACL,IAAK,+BACL,IAAK,+BACL,IAAK,iCACL,IAAK,wCACL,IAAK,gCACL,IAAK,uCACL,IAAK,iCACL,IAAK,mCACL,IAAK,mBACL,IAAK,qBACL,IAAK,+BACL,IAAK,uCACL,IAAK,mCACL,IAAK,yCACL,IAAK,wCACL,IAAK,8BACL,IAAK,mBACL,IAAK,uBACL,IAAK,yBACL,IAAK,YACL,IAAK,iBACH,MAAmB,YAAfrkN,EACKoqW,EAAa,IAAM,OAAS,OAE5B,IAEX,IAAK,SACL,IAAK,SACL,IAAK,cACL,IAAK,aACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,UACL,IAAK,kBACL,IAAK,kBACL,IAAK,eACL,IAAK,cACL,IAAK,cAOH,OANInxX,OAAOwqD,WAAa,KACtBxqD,OAAOoxX,SAAS,CACdrkX,IAAK/M,OAAO+xD,YACZs/T,SAAU,WAGPF,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,gBACH,OAAQpqW,GACN,IAAK,UACH,OAAOoqW,EAAa,IAAM,OAAS,SAIvC,MAEF,IAAK,mBACL,IAAK,wBACH,MAAmB,UAAfpqW,EACKoqW,EAAa,IAAM,OAAS,OAE5BA,EAAa,IAAM,OAAS,OAEvC,IAAK,oBACL,IAAK,yBACH,MAAmB,UAAfpqW,EACKoqW,EAAa,IAAM,OAAS,OAE5BA,EAAa,IAAM,OAAS,OAEvC,IAAK,QACH,OAAOA,EAAa,IAAM,OAAS,OACrC,QACE,MAAO,IAEX,MAAO,IAET,IAAK,UACL,IAAK,KACH,OAAQ/lJ,GAEN,IAAK,OACL,IAAK,YACL,IAAK,QACL,IAAK,iBACL,IAAK,kBACL,IAAK,sBACH,OAAO+lJ,EAAa,IAAM,OAAS,OACrC,IAAK,aACL,IAAK,uBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,mBACH,OAAQpqW,GACN,IAAK,QACL,IAAK,qBACL,IAAK,kBACL,IAAK,+BACH,OAAOoqW,EAAa,IAAM,OAAS,OACrC,QACE,MAAO,IAGb,IAAK,UACL,IAAK,cACL,IAAK,sBACL,IAAK,SACL,IAAK,qBACL,IAAK,wBACL,IAAK,gBACL,IAAK,wBACL,IAAK,iBACL,IAAK,yBAWH,OAVIlwX,SAASuzN,cACPvzN,SAASuzN,aAAavlI,SAAW,UAAc5oD,QAAQtf,GAAY+yJ,QAAQiyE,WAC5E/rP,OAAOwqD,WAAa,KACvBxqD,OAAOoxX,SAAS,CACdrkX,IAAK/M,OAAO+xD,YACZs/T,SAAU,WAGC,UAAMrnX,WAAW0rI,gBAAgBuN,yBAG9C,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAAO,IACT,IAAK,IACH,OAAOkuO,EAAa,IAAM,OAAS,OACrC,IAAK,IACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,IACH,OAAOA,EAAa,IAAM,OAAS,OACrC,KAAK,KACL,QACE,OAAOA,EAAa,IAAM,OAAS,OAIzC,IAAK,gBACL,IAAK,2BACL,IAAK,qBACL,IAAK,wBACL,IAAK,qBACL,IAAK,uBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,uBACH,OAAOA,EAAa,IAAM,MAAQ,MACpC,IAAK,uBACH,OAAOA,EAAa,IAAM,OAAS,OAErC,IAAK,wBACL,IAAK,0BACL,IAAK,kBACL,IAAK,oBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,aACH,GAAIlwX,SAASuzN,aACX,OAAQvzN,SAASuzN,aAAavlI,QAC5B,KAAK,UAAc5oD,QAAQtf,GAAY+lO,aAAazpJ,WAClD,OAAO8tR,EAAa,IAAM,OAAS,OACrC,KAAK,UAAc9qV,QAAQtf,GAAY0lO,gBAAgBC,YACrD,OAAOykI,EAAa,IAAM,OAAS,OACrC,KAAK,UAAc9qV,QAAQtf,GAAY0lO,gBAAgBppJ,WACrD,OAAO8tR,EAAa,IAAM,OAAS,OACrC,QACE,MAAO,IAGb,MAAO,IACT,IAAK,SACH,OAAIlwX,SAASuzN,cAAgBvzN,SAASuzN,aAAavlI,SAAW,UAAc5oD,QAAQtf,GAAY+lO,aAAaF,OACpGukI,EAAa,IAAM,OAAS,OAE5BA,EAAa,IAAM,OAAS,OAEvC,IAAK,OACH,OAAIlwX,SAASuzN,cAAgBvzN,SAASuzN,aAAavlI,SAAW,UAAc5oD,QAAQtf,GAAY+lO,aAAaH,KACpGwkI,EAAa,IAAM,OAAS,OAE5BA,EAAa,IAAM,OAAS,OAGvC,IAAK,aACL,IAAK,mBACL,IAAK,UACL,IAAK,gBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,aACL,IAAK,mBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,QACE,MAAO,IAEb,IAAK,UACH,OAAOpqW,GACL,IAAK,UACH,OAAQy+O,GACN,IAAK,IACH,OAAQp6B,GAEN,IAAK,gBACL,IAAK,2BACL,IAAK,kCACL,IAAK,yBACL,IAAK,qBACL,IAAK,wBACL,IAAK,qBACL,IAAK,uBACL,IAAK,eACL,IAAK,0BACL,IAAK,iCACL,IAAK,wBACL,IAAK,oBACL,IAAK,uBACL,IAAK,oBACL,IAAK,sBACH,OAAO+lJ,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,sBACL,IAAK,sBACL,IAAK,2BACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,oBACL,IAAK,OACL,IAAK,kBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,mBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,oBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,mBACH,MAAO,OACT,QACE,MAAO,IAGb,IAAK,IACH,OAAQ/lJ,GAEN,IAAK,gBACL,IAAK,2BACL,IAAK,kCACL,IAAK,yBACL,IAAK,qBACL,IAAK,wBACL,IAAK,qBACL,IAAK,uBACL,IAAK,eACL,IAAK,0BACL,IAAK,iCACL,IAAK,wBACL,IAAK,oBACL,IAAK,uBACL,IAAK,oBACL,IAAK,sBACH,OAAO+lJ,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,sBACL,IAAK,sBACL,IAAK,2BACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,oBACL,IAAK,OACL,IAAK,kBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,oBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,mBACL,IAAK,mBACH,MAAO,OACT,QACE,MAAO,IAGb,IAAK,IACH,OAAQ/lJ,GAEN,IAAK,gBACL,IAAK,2BACL,IAAK,kCACL,IAAK,yBACL,IAAK,qBACL,IAAK,wBACL,IAAK,qBACL,IAAK,uBACL,IAAK,eACL,IAAK,0BACL,IAAK,iCACL,IAAK,wBACL,IAAK,oBACL,IAAK,uBACL,IAAK,oBACL,IAAK,sBACL,IAAK,kBACL,IAAK,mBACL,IAAK,sBACL,IAAK,mBACH,OAAO+lJ,EAAa,IAAM,OAAS,OACrC,IAAK,wBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,SACL,IAAK,oBACL,IAAK,OACL,IAAK,kBACL,IAAK,mBACL,IAAK,0BACL,IAAK,wBACH,MAAO,OACT,QACE,MAAO,IAGb,QACE,MAAO,IAGb,IAAK,UACH,OAAQ/lJ,GAEN,IAAK,SACL,IAAK,oBACL,IAAK,OACL,IAAK,kBACL,IAAK,0BACL,IAAK,mBACL,IAAK,wBACL,IAAK,mBACH,OAAO+lJ,EAAa,IAAM,OAAS,OACrC,IAAK,kBACL,IAAK,mBACL,IAAK,kBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,oBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,mBACL,IAAK,oBACL,IAAK,8BACH,MAAO,OACT,QACE,MAAO,IAGb,IAAK,UACH,OAAQ/lJ,GAEN,IAAK,SACL,IAAK,oBACL,IAAK,OACL,IAAK,kBACL,IAAK,0BACL,IAAK,mBACL,IAAK,wBACL,IAAK,mBACH,OAAO+lJ,EAAa,IAAM,OAAS,OACrC,IAAK,kBACL,IAAK,mBACL,IAAK,kBACH,OAAOA,EAAa,IAAM,OAAS,OACrC,IAAK,gBACL,IAAK,2BACL,IAAK,kCACL,IAAK,yBACL,IAAK,qBACL,IAAK,wBACL,IAAK,qBACL,IAAK,uBACL,IAAK,eACL,IAAK,0BACL,IAAK,iCACL,IAAK,wBACL,IAAK,oBACL,IAAK,uBACL,IAAK,oBACL,IAAK,sBACH,MAAO,OACT,QACE,MAAO,IAGb,QACE,MAAO,IAEb,QACE,MAAO,MArgBb,I,IAAA,Q,IACA,M,sLCDA,I,EAAA,S,oCAEA,QACA,QAEO,IAAMG,EAAuBA,EAAvBA,qBAAuB,SAACn9H,EAAe8S,EAAmBn/I,GACrE,MAAO,CACL74B,OAAQ64B,EAAOm/I,GAAmBh4K,OAClCoxH,WAAYv4F,EAAOm/I,GAAmB5mD,WACtC7mG,OAAQsO,EAAOm/I,GAAmBztJ,OAClCjjD,MAAO49L,EAAcV,WACrBjzC,gBAAiB2zC,EAAc3zC,gBAC/BryM,OAAQgmP,EAAczlK,MAAMvgF,QAAU,GACtC4mP,iBAAiB,EACjBqR,cAAejS,EAAciS,gBAICe,EAArBA,mBAAqB,SAACoqH,EAAsBzpQ,EAAQm/I,EAAmB9S,EAAe4S,GAOjG,OALAj/I,EAAOtqH,OAAOypQ,EAAoB,EAAG,EAAGqqH,EAAqBn9H,EAAe8S,EAAmBn/I,IAKvF7mH,SAASC,SAASoC,gBACxB,IAAK,WACL,IAAK,KACH,IAAMkuX,EAAoBD,EAAqBp+Q,MAAMpwF,OAAO+rE,SAASyiS,EAAqBp+Q,MAAMpsF,YAAY66E,OAAO6pK,UAAUjC,KACvHioH,EAAgBF,EAAqBp+Q,MAAMpwF,OAAO+rE,SAASyiS,EAAqBp+Q,MAAMpsF,YAAY66E,OAAOzjE,WAC/G,GAAIg2N,EAAczlK,MAAMO,SAAWuiS,EAAkB,IAAQr9H,EAAczlK,MAAMO,SAAWuiS,EAAkB,GAAM,CAElH,IAAME,EAAkBv9H,EAAczlK,MAAMO,SAAWuiS,EAAkB,GAAO,IAAM,IAEhFG,EAAiBJ,EAAqB3iX,MAAM0kP,gBAAgB3/O,MAAK,SAACi+W,GACtE,OAAOA,EAAmBljS,MAAMO,SAAWuiS,EAAkBE,MAEzDzqH,EAAoBn/I,EAAOtjG,WAAU,SAACkqE,GAC1C,OAAOA,EAAMO,SAAW0iS,EAAejjS,MAAMO,UAG/C64B,EAAOtqH,OAAOypQ,EAAoB,EAAG,EAAG,CACtCh4K,OAAQuiS,EAAkBE,GAC1Bn7T,MAAOo7T,EAAel+H,WACtBjzC,gBAAiBmxK,EAAenxK,gBAChCu0C,iBAAiB,EACjBqR,cAAeurH,EAAevrH,gBAGlC,GAAIjS,EAAczlK,MAAMO,SAAWwiS,EAAc5nH,MAAQ1V,EAAczlK,MAAMO,SAAWwiS,EAAc3nH,OACjG3V,EAAczlK,MAAMO,SAAWwiS,EAAc1nH,YAAc5V,EAAczlK,MAAMO,SAAWwiS,EAAcznH,YAAa,CACxH,IAAI6nH,EAAgB,EAChB19H,EAAczlK,MAAMO,SAAWwiS,EAAc5nH,MAAQ1V,EAAczlK,MAAMO,SAAWwiS,EAAc3nH,QACpG+nH,EAAgB19H,EAAczlK,MAAMO,SAAWwiS,EAAc5nH,KAAO4nH,EAAc3nH,MAAQ2nH,EAAc5nH,MAEtG1V,EAAczlK,MAAMO,SAAWwiS,EAAc1nH,YAAc5V,EAAczlK,MAAMO,SAAWwiS,EAAcznH,cAC1G6nH,EAAgB19H,EAAczlK,MAAMO,SAAWwiS,EAAc1nH,WAAa0nH,EAAcznH,YAAcynH,EAAc1nH,YAEtH,IAAM4nH,EAAiBJ,EAAqB3iX,MAAM0kP,gBAAgB3/O,MAAK,SAACi+W,GACtE,OAAOA,EAAmBljS,MAAMO,SAAW4iS,KAE7C,GAAIF,EAAgB,CAClB,IAAM1qH,EAAoBn/I,EAAOtjG,WAAU,SAACkqE,GAC1C,OAAOA,EAAMO,SAAW0iS,EAAejjS,MAAMO,UAE/C64B,EAAOtqH,OAAOypQ,EAAoB,EAAG,EAAG,CACtCh4K,OAAQ4iS,EACRt7T,MAAOo7T,EAAel+H,WACtBjzC,gBAAiBmxK,EAAenxK,gBAChCu0C,iBAAiB,EACjBqR,cAAeurH,EAAevrH,iBAIpC,MAEF,IAAK,UA2CH,MAEF,IAAK,UACH,IAAM0rH,EAAiBP,EAAqBp+Q,MAAMpwF,OAAO+rE,SAASyiS,EAAqBp+Q,MAAMpsF,YAAY+yJ,QACnGi4M,EAAyBR,EAAqBp+Q,MAAMpwF,OAAO+rE,SAASyiS,EAAqBp+Q,MAAMpsF,YAAY0lO,gBAC7GulI,EAAgB,EAChBC,EAAiB,EACrB,OAAO99H,EAAczlK,MAAMO,QACzB,KAAK6iS,EAAA,WACHE,EAAgBF,EAAA,YAChB,MACF,KAAKA,EAAA,YACHE,EAAgBF,EAAA,WAChB,MACF,KAAKA,EAAA,cACHE,EAAgBF,EAAA,eAChBG,EAAiBH,EAAA,UACjB,MACF,KAAKA,EAAA,eACHE,EAAgBF,EAAA,cAChBG,EAAiBH,EAAA,UACjB,MACF,KAAKA,EAAA,UACHE,EAAgBF,EAAA,cAChBG,EAAiBH,EAAA,eACjB,MACF,KAAKA,EAAA,aACHE,EAAgBF,EAAA,cAChB,MACF,KAAKA,EAAA,cACHE,EAAgBF,EAAA,aAChB,MACF,KAAKC,EAAA,WACHC,EAAgBD,EAAA,YAChB,MACF,KAAKA,EAAA,YACHC,EAAgBD,EAAA,WAChB,MACF,KAAKD,EAAA,UACHE,EAAgBF,EAAA,WAChB,MACF,KAAKA,EAAA,WACHE,EAAgBF,EAAA,UAChB,MACF,KAAKA,EAAA,aACHE,EAAgBF,EAAA,cAChB,MACF,KAAKA,EAAA,cACHE,EAAgBF,EAAA,aAGpB,GAAIE,EAAe,CACjB,IAAML,EAAiBJ,EAAqB3iX,MAAM0kP,gBAAgB3/O,MAAK,SAACi+W,GACtE,OAAOA,EAAmBljS,MAAMO,SAAW+iS,KAEvCE,EAAqBpqQ,EAAOtjG,WAAU,SAACkqE,GAC3C,OAAOA,EAAMO,SAAW+iS,KAEtBL,GAAkBO,GACpBpqQ,EAAOtqH,OAAO00X,EAAqB,EAAG,EAAG,CACvCjjS,OAAQ+iS,EACRz7T,MAAOo7T,EAAel+H,WACtBjzC,gBAAiBmxK,EAAenxK,gBAChCu0C,iBAAiB,EACjBqR,cAAeurH,EAAevrH,gBAIpC,GAAI6rH,EAAgB,CAClB,IAAME,EAAiBZ,EAAqB3iX,MAAM0kP,gBAAgB3/O,MAAK,SAACi+W,GACtE,OAAOA,EAAmBljS,MAAMO,SAAWgjS,KAEvCG,EAAqBtqQ,EAAOtjG,WAAU,SAACkqE,GAC3C,OAAOA,EAAMO,SAAWgjS,KAEtBE,GAAkBC,GACpBtqQ,EAAOtqH,OAAO40X,EAAqB,EAAG,EAAG,CACvCnjS,OAAQgjS,EACR17T,MAAO47T,EAAe1+H,WACtBjzC,gBAAiB2xK,EAAe3xK,gBAChCu0C,iBAAiB,EACjBqR,cAAe+rH,EAAe/rH,gBAIpC,MAEF,IAAK,WAEH,IAAM0rH,EAAiBP,EAAqBp+Q,MAAMpwF,OAAO+rE,SAASyiS,EAAqBp+Q,MAAMpsF,YAAY+yJ,QACnGi4M,EAAyBR,EAAqBp+Q,MAAMpwF,OAAO+rE,SAASyiS,EAAqBp+Q,MAAMpsF,YAAY0lO,gBAC7GulI,EAAgB,EAChBC,EAAiB,EACrB,OAAO99H,EAAczlK,MAAMO,QACzB,KAAK6iS,EAAA,WACHE,EAAgBF,EAAA,YAChB,MACF,KAAKA,EAAA,YACHE,EAAgBF,EAAA,WAChB,MACF,KAAKA,EAAA,cACHE,EAAgBF,EAAA,eAChBG,EAAiBH,EAAA,UACjB,MACF,KAAKA,EAAA,eACHE,EAAgBF,EAAA,cAChBG,EAAiBH,EAAA,UACjB,MACF,KAAKA,EAAA,UACHE,EAAgBF,EAAA,cAChBG,EAAiBH,EAAA,eACjB,MACF,KAAKA,EAAA,aACHE,EAAgBF,EAAA,cAChB,MACF,KAAKA,EAAA,cACHE,EAAgBF,EAAA,aAChB,MACF,KAAKC,EAAA,WACHC,EAAgBD,EAAA,YAChB,MACF,KAAKA,EAAA,YACHC,EAAgBD,EAAA,WAChB,MACF,KAAKD,EAAA,UACHE,EAAgBF,EAAA,WAChB,MACF,KAAKA,EAAA,WACHE,EAAgBF,EAAA,UAChB,MACF,KAAKA,EAAA,aACHE,EAAgBF,EAAA,cAChB,MACF,KAAKA,EAAA,cACHE,EAAgBF,EAAA,aAGpB,GAAIE,EAAe,CACjB,IAAML,EAAiBJ,EAAqB3iX,MAAM0kP,gBAAgB3/O,MAAK,SAACi+W,GACtE,OAAOA,EAAmBljS,MAAMO,SAAW+iS,KAEvCE,EAAqBpqQ,EAAOtjG,WAAU,SAACkqE,GAC3C,OAAOA,EAAMO,SAAW+iS,KAEtBL,GAAkBO,GACpBpqQ,EAAOtqH,OAAO00X,EAAqB,EAAG,EAAG,CACvCjjS,OAAQ+iS,EACRz7T,MAAOo7T,EAAel+H,WACtBjzC,gBAAiBmxK,EAAenxK,gBAChCu0C,iBAAiB,EACjBqR,cAAeurH,EAAevrH,gBAIpC,GAAI6rH,EAAgB,CAClB,IAAME,EAAiBZ,EAAqB3iX,MAAM0kP,gBAAgB3/O,MAAK,SAACi+W,GACtE,OAAOA,EAAmBljS,MAAMO,SAAWgjS,KAEvCG,EAAqBtqQ,EAAOtjG,WAAU,SAACkqE,GAC3C,OAAOA,EAAMO,SAAWgjS,KAEtBE,GAAkBC,GACpBtqQ,EAAOtqH,OAAO40X,EAAqB,EAAG,EAAG,CACvCnjS,OAAQgjS,EACR17T,MAAO47T,EAAe1+H,WACtBjzC,gBAAiB2xK,EAAe3xK,gBAChCu0C,iBAAiB,EACjBqR,cAAe+rH,EAAe/rH,gBAIpC,MAEF,IAAK,UACL,IAAK,SACL,IAAK,cACL,IAAK,cACL,IAAK,cACL,IAAK,cACH,IAAIisH,GAAc,EAClB,GAAyC,YAArCpxX,SAASC,SAASoC,eAA8B,CAGlD+uX,EAFkB,CAAC,aAAc,cAAe,iBAAkB,SAAU,gBAC1E,aAAc,gBAAiB,cAAe,iBACxBrwX,SAASmyP,EAAczlK,MAAMvgF,aAChD,GAAyC,WAArClN,SAASC,SAASoC,eAC3B+uX,GAAc,IAAAh1V,wBAAyB,EAAAC,gBAAgBC,IAAM42N,EAAczlK,MAAMvgF,OAAOnM,SAAS,eAC5F,CAELqwX,EADkB,CAAC,YAAa,iBAAkB,gBAC1BrwX,SAASmyP,EAAczlK,MAAMvgF,QAEvD,IAAKkkX,IAAgBtrH,EACnB,MAgBF,OAdAwqH,EAAqB3iX,MAAM0kP,gBAAgBrtP,SAAQ,SAAAqsX,GAC7CA,EAAS5jS,MAAMvgF,SAAWgmP,EAAczlK,MAAMvgF,QAAWmkX,EAAS5jS,MAAMO,SAAWklK,EAAczlK,MAAMO,QACzG64B,EAAOlrH,KAAK,CACVqyF,OAAQqjS,EAAS5jS,MAAMO,OACvBoxH,WAAYiyK,EAAS5jS,MAAM2xH,WAC3B9pJ,MAAO+7T,EAAS7+H,WAChBjzC,gBAAiB8xK,EAAS9xK,gBAC1BhnG,OAAQ84Q,EAAS5jS,MAAM8qB,QAAU,KACjCrrG,OAAQmkX,EAAS5jS,MAAMvgF,QAAU,GACjC4mP,iBAAiB,EACjBqR,cAAeksH,EAASlsH,oBAIvB,aAAQt+I,EAAQ,CAAC,UAAW,CAAC,SAMxC,OAAOA,I,+IC5UT,S,IACA,OACA,QACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,qDAEamnJ,S,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAA5jQ,aAAaC,UADpB,OAEZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKH,YAAc,8BACnB,EAAKhY,cAAL,mBACA,EAAKwgJ,eAAiB,EAAA7tH,YAAYE,aAClC,EAAKysQ,YAAc,KACnB,EAAK0nF,UAAY,KACjB,EAAKC,WAAa,KAClB,EAAKzgB,YAAc,KACnB,EAAKjzB,eAAiB,KACtB,EAAK2zC,WAAa,KAClB,EAAK7rW,aAAe,GACpB,EAAK8rW,aAAe,EAAAx0V,YAAYE,aAdpB,E,qEAiBT5yB,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,UACHy/H,EAAkB,cAClBC,YACA,MACF,IAAK,UACHD,EAAkB,iBAClBC,YACA,MACF,IAAK,cACHD,EAAkB,cAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,aAClBC,YACA,MACF,IAAK,aACHD,EAAkB,aAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YAGJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,mCAKEub,GACPA,IAAe,EAAAwX,WAAWgkE,MAGvB16F,KAAKkb,OAAOsD,MAAMu7E,OAAO1Q,WAAWvG,WACnC9iF,KAAKgjS,cACPhjS,KAAKgjS,YAAYlgN,UAAW,GAE1B9iF,KAAKkqW,cACPlqW,KAAKkqW,YAAYpnR,UAAW,EAC5B9iF,KAAKkqW,YAAYt3Q,mBAIjB5yF,KAAKgjS,cACPhjS,KAAKgjS,YAAYlgN,UAAW,GAE1B9iF,KAAKkqW,cACPlqW,KAAKkqW,YAAYpnR,UAAW,EAC5B9iF,KAAKkqW,YAAYt3Q,oB,gCAKb13E,EAAQq1H,GAChB,IAAMtwB,EAAS,GAQf,OAPAjgH,KAAKwwI,kBAAkBpyI,SAAQ,SAAAwuI,GAC7BA,EAAYn+B,UAAUvzF,GACrBq1H,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMxwB,GAC3C2sB,EAAYzmH,eAAiBymH,EAAYzmH,cAAc0gE,MAAM4pD,MAAMxwB,MAGlEA,I,uCAIP,OAAO,IAAI,EAAJ,QAAyB,UAAWjgH,Q,iCAI3C,OAAQA,KAAKgjS,aAAehjS,KAAKkqW,aAC5BlqW,KAAKgjS,YAAYrhN,SAAS1hF,MAAK,SAAAoD,GAAA,OAAWA,EAAQwY,WAAaxY,EAAQwY,SAAS1hB,SAAS,kBACzF6F,KAAKkqW,YAAYvoR,SAAS1hF,MAAK,SAAAoD,GAAA,OAAWA,EAAQwY,WAAaxY,EAAQwY,SAAS1hB,SAAS,iBAC1F,CACF,EAAAk8B,YAAYC,WACZ,EAAAD,YAAYE,cACV,K,sCAGU6+B,GACd,OAAO,IAAAj/B,qBAAoBi/B,K,2CAI3B,OAAO,I,wCAGS,WAChB,OAAOp1D,KAAK+e,aAAa/X,QAAO,SAAAiqE,GAAA,OAAQA,EAAK1gD,QAAQp2B,SAAS,EAAK0wX,iBAChEniX,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEkT,WAAajT,EAAEiT,SAAWlT,EAAEkT,SAAWjT,EAAEiT,UAAY,EAAI,EAAI,O,iCAIjF,OAAO7b,KAAKwwI,kBAAkB1oI,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,iCAGnEgM,GACTlb,KAAKwwI,kBAAkBpyI,SAAQ,SAAAwuI,GAAA,OAAeA,EAAYxmD,WAAWlrE,Q,uFAKpDk6C,GACjBp1D,KAAK6qX,aAAez1T,EACpBp1D,KAAKkkJ,eAAiB9uF,EACtBp1D,KAAKi3U,eAAen0P,SAAY9iF,KAAKkkJ,iBAAkB,EAAA7tH,YAAYC,WAC/Dt2B,KAAKkqW,YAAYpnR,SACjB9iF,KAAKgjS,YAAYlgN,W,wDAKrB,OAAO9iF,KAAKyc,WAAW,K,sCAIvB,OAAOzc,KAAKkkJ,iB,uCAIZ,OAAIlkJ,KAAKkkJ,iBAAmB,EAAA7tH,YAAYE,cAAgBv2B,KAAKgjS,aAAehjS,KAAKgjS,YAAY78Q,cACpFnmB,KAAKgjS,YAAY78Q,cAAcrT,SAA/B,QAEF,CAAC,W,aA7JH9K,GAAK,U,yJCdd,QACA,QACA,Q,IACA,O,uDAEqBs/P,E,YACnB,WAAYxoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,UACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,sCACnB,EAAK8zS,cAAgB,WACrB,EAAKj/R,QAAU,CAAC,EAAA8F,YAAYE,cAC5B,EAAKysD,eAAgB,EAPF,E,qEAUhBr/E,GAEH,IAAMN,EAAUrD,KAAKojF,MAAMz/E,EAAW,IAAI2jQ,GACtCjkQ,GACFikQ,EAAY6kG,sBAAsB9oW,K,sCAcpC,IAAM4zU,EAAiBj3U,KAAKU,YAAYu2U,eACpCA,IACFA,EAAen0P,SAAW9iF,KAAK8iF,UAEjC,IAAMigN,EAAgB/iS,KAAKU,YAC3B,GAAIqiS,EAAc7nR,OAAO9P,OAAS,EAAAsrB,WAAWgkE,QAAU16F,KAAK8iF,SAAU,CACpE,IAAMuG,EAAa05M,EAAc7nR,OAAOsD,MAAMu7E,OAAO1Q,WACjDA,IACFA,EAAWvG,UAAW,EACtBuG,EAAWuJ,iBAEb,IAAM80D,EAAYq7I,EAAc7nR,OAAOsD,MAAM,EAAAixH,eAAeznI,IACxD0/I,IACFA,EAAUt+D,wBAAyB,M,oCAMvC,IAAM0hS,EAAgB9qX,KAAKU,YAAYA,YACvCoqX,EAAcD,aAAe,EAAAx0V,YAAYE,aACzCu0V,EAAc5mO,eAAiB,EAAA7tH,YAAYE,cAC3C,wG,yCAGiBsf,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GACR,OAAIlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,K,6CAQzB,IAAM4zI,EAAiB9uJ,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAixH,eAAeznI,IAIpE,MAAO,CAAC,CACNk5E,SAAU,gBACVI,UAL0BwtE,EAAe1lE,wBAA0B0lE,EAAehf,YAAc,EAAA72G,mBAAmBG,YACjH,CAAC,OACD,CAAC,MAAO,iB,iCAOHle,GAAQ,WACXutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,+BAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,GAAsB,Q,gCAI1C5B,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASm9K,QAAQ7tO,aAAa+tO,MAE/Dr9K,GAAYjnF,KAAKgnF,qBAClBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASm9K,QAAQ7tO,aAAa+tO,S,6CAjF5CjhQ,GACtBA,EAAQyP,SAAR,UACHzP,EAAQyP,SAAR,QAA8B,CAAC,QAE5BzP,EAAQyP,SAAR,gBACHzP,EAAQyP,SAAR,cAAoC,CAAC,Y,iCAxBtBw0P,G,6MCHA4hG,E,YACnB,WAAYpqR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKgzO,YAAc,gBACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,YAChB,EAAKH,YAAc,qDACnB,EAAKE,OAAS,gBACd,EAAK/N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EATV,E,qEAYhBvzU,GACH,sGAAmBA,EAAW,IAAIulW,K,gCAG1BjiR,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASE,MACpC/8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KAzB7C,Q,mBAEqB8hR,G,4MCAAjlG,E,YACnB,WAAYnlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKgzO,YAAc,kBACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,kBAChB,EAAKH,YAAc,uDACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EARV,E,qEAWhBvzU,GACH,sGAAmBA,EAAW,IAAIsgQ,K,gCAG1Bh9K,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASG,eACpCh9K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KAxB7C,Q,mBAEqB68K,G,4MCAAC,E,YACnB,WAAYplL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKgzO,YAAc,cACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,cAChB,EAAKH,YAAc,mDACnB,EAAK7N,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIugQ,K,gCAG1Bj9K,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASI,UACpCj9K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,K,2CAItBvrE,GACnB,IAAKA,EACH,OAAO,KAIT,IAFA,IAAIkvW,EAAgB,KACdC,EAAyB,CAAC,OAAQ,OAAQ,OACvCz2X,EAAI,EAAGA,EAAIy2X,EAAuBv2X,OAAQF,IACjD,GAAIsnB,EAAS1hB,SAAS6wX,EAAuBz2X,IAAK,CAChDw2X,EAAgBC,EAAuBz2X,GACvC,MAUJ,OAPIw2X,IACFlvW,EAAWA,EAAS9d,MAAMgtX,GAAe13W,KAAK,KAGZ,OADpCwI,EAAWA,EAASvf,eACPuf,EAASpnB,OAAO,KAC3BonB,EAAWA,EAASxjB,MAAM,EAAGwjB,EAASpnB,OAAO,IAExCuL,KAAK2hF,SAAS71E,MAAK,SAAAzI,GACxB,IAAKA,EAAQwY,SACX,OAAO,EAET,IAAIovW,EAAkB5nX,EAAQwY,SAQ9B,OAPIkvW,IACFE,EAAkBA,EAAgBltX,MAAMgtX,GAAe13W,KAAK,KAGZ,OADlD43W,EAAkBA,EAAgB3uX,eACd2uX,EAAgBx2X,OAAO,KACzCw2X,EAAkBA,EAAgB5yX,MAAM,EAAG4yX,EAAgBx2X,OAAO,IAE7DonB,IAAaovW,S,KA1D1B,Q,mBAEqB/mH,G,4MCAAC,E,YACnB,WAAYrlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKgzO,YAAc,aACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,aAChB,EAAKH,YAAc,kDACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EARV,E,qEAWhBvzU,GACH,sGAAmBA,EAAW,IAAIwgQ,K,gCAG1Bl9K,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASK,UACpCl9K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KAxB7C,Q,mBAEqB+8K,G,4MCAAJ,E,YACnB,WAAYjlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAKH,YAAc,0DACnB,EAAK6U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKzrL,iBAAkB,EARJ,E,qEAWhB9nJ,GACH,sGAAmBA,EAAW,IAAIogQ,K,qCAWlC,sGACA,IAAM5qB,EAAuBn5O,KAAKU,YAAYA,YAC9Cy4O,EAAqBC,oBACrBD,EAAqBiwH,cAAcppW,KAAK+vI,mBAAoB/vI,KAAKgwI,iBACjEhwI,KAAK4mF,mB,gCAGGK,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASC,kBACpC98K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,GAvC7C,M,4BAEqB28K,G,qJCFrB,QACA,Q,uDAEqBmnH,E,YACnB,WAAYpsS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKiqB,QAAU,CAAC,EAAA8F,YAAYC,YAC5B,EAAKza,SAAW,OAChB,EAAKH,YAAc,2CACnB,EAAKE,OAAS,cACd,EAAK4zS,cAAgB,WACrB,EAAKxsO,eAAgB,EACrB,EAAKn1E,gBAAiB,EATH,E,qEAYhBlK,GACH,sGAAmBA,EAAW,IAAIunX,K,sCAGpB,WACRnoF,EAAgB/iS,KAAKU,YAC3B,CAACqiS,EAAc4nF,WAAY5nF,EAAc6nF,WAAY7nF,EAAck0C,gBAAgB74U,SAAQ,SAAAse,GACrFA,IACFA,EAAQomE,SAAW,EAAKA,aAGxBigN,EAAc7nR,OAAO9P,OAAS,EAAAsrB,WAAWgkE,OAAU16F,KAAK8iF,WAC1DigN,EAAc7nR,OAAOsD,MAAMu7E,OAAO1Q,WAAWvG,UAAW,EACxDigN,EAAc7nR,OAAOsD,MAAMu7E,OAAO1Q,WAAWuJ,mB,iCAItC13E,GACT,IAAMutE,EAAmBzoF,KAAK2hF,SAC9B,KAAK,EAAD,8GAA8B8G,GAAmB,CACnD,IAAM0iS,EAAmBnrX,KAAKU,YAAYwa,OAAOsD,MAAMqjO,MAAM2zE,MAAMrvS,eAC9DnmB,KAAKU,YAAYwa,OAAOsD,MAAMqjO,MAAM2zE,MAAMrvS,cAActK,SACvD+sE,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAASgxX,GAAoB,oCAE/FtiS,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,Q,oCAK9E,IAAM6nR,EAAgB/iS,KAAKU,YAAYA,YACvCqiS,EAAc8nF,aAAe,EAAAx0V,YAAYC,WACzCysQ,EAAc7+I,eAAiB,EAAA7tH,YAAYC,YAC3C,wG,gCAGQ2wD,GACJA,GAAYjnF,KAAKU,YAAY8+N,kBAAoB,EAAAnpM,YAAYC,aAC3Dt2B,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASm9K,QAAQ9tO,WAAWguO,MAE5DtkQ,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASm9K,QAAQ9tO,WAAWguO,W,iCA3DtD4mH,G,qJCHrB,QACA,Q,IACA,M,IACA,OACA,Q,uDAEqB7jH,E,YACnB,WAAYvoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKoV,YAAc,8CACnB,EAAK6U,QAAU,CAAC,EAAA8F,YAAYC,WAAY,EAAAD,YAAYE,cACpD,EAAK1a,SAAW,UAChB,EAAK2zS,cAAgB,mBACrB,EAAKxsO,eAAgB,EAPF,E,qEAUhBr/E,GACH,IAAMN,EAAUrD,KAAKojF,MAAMz/E,EAAW,IAAI0jQ,GACtChkQ,GACFgkQ,EAAe8kG,sBAAsB9oW,K,sCASvC,IAAM2/R,EAAchjS,KAAKU,YAAYsiS,YACjCA,GAAeA,EAAYlgN,WAAa9iF,KAAK8iF,WAC/CkgN,EAAYlgN,UAAW,GAEzB,IAAMigN,EAAgB/iS,KAAKU,YAC3B,GAAIqiS,EAAc7nR,OAAO9P,OAAS,EAAAsrB,WAAWgkE,QAAU16F,KAAK8iF,SAAU,CACpE,IAAMuG,EAAa05M,EAAc7nR,OAAOsD,MAAMu7E,OAAO1Q,WACjDA,IACFA,EAAWvG,UAAW,EACtBuG,EAAWuJ,iBAEb,IAAM80D,EAAYq7I,EAAc7nR,OAAOsD,MAAM,EAAAixH,eAAeznI,IACxD0/I,IACFA,EAAUt+D,wBAAyB,M,gCAK/BnC,GACR,IAAIu4I,EAAgB,GACpB,OAAQx/N,KAAKU,YAAY8+N,iBACvB,KAAK,EAAAnpM,YAAYC,WACfkpM,EAAgB,aAChB,MACF,KAAK,EAAAnpM,YAAYE,aACfipM,EAAgB,eAGpB,IAAI4rJ,GAAa,EACjB,GAAInkS,GAAYjnF,KAAKmmB,cAAe,CAClC,IACMklW,EADe,UAAMlpX,WAAW4S,YAAYiB,aACdlK,MAAK,SAAAiK,GAAA,MAAoC,cAArBA,EAAYtf,QACpE,GAAI40X,EAAgB,CAClB,IAAMC,EAAwBtrX,KAAKmmB,cAAcxiB,UAAUkS,eAAew1W,EAAerjX,IACzF,GAAIsjX,GAAyBA,EAAsB72X,OAAQ,CACzD,IAAM06K,EAAek8M,EAAel1W,OAAOrK,MAAK,SAAAoK,GAAA,OAAeA,EAAYlO,KAAOsjX,EAAsB,MACpGn8M,GAAuC,eAAvBA,EAAaj4K,QAC/Bk0X,GAAa,IAKfprX,KAAKmmB,cAAc0gE,MAAMO,OAD7BgkS,EACsCnkS,EAASm9K,QAAQ5kC,GAAe6kC,kBAChCp9K,EAASm9K,QAAQ5kC,GAAe8iC,QAEpEr7K,GAAYjnF,KAAKgnF,qBAEfhnF,KAAKgnF,mBAAmBH,MAAMO,OADlCgkS,EAC2CnkS,EAASm9K,QAAQ5kC,GAAe6kC,kBAChCp9K,EAASm9K,QAAQ5kC,GAAe8iC,W,yCAI5DzsN,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GACR,OAAIlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,K,6CAQzB,MAAO,CAAC,CACNgmE,SAAU,UACVI,UAAWthF,KAAKU,YAAY6qX,qB,iCAIrBrwW,GAAQ,WACXutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,oCAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,GAAsB,S,6CA1FvBxlF,GAC3BA,EAAQyP,SAAR,QAA8B,CAAC,W,iCAnBdu0P,G,qJCNrB,QACA,Q,uDAEqBmkH,E,YACnB,WAAY1sS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKoV,YAAc,0CACnB,EAAK6U,QAAU,CAAC,EAAA8F,YAAYC,YAC5B,EAAKza,SAAW,MAChB,EAAKD,OAAS,aACd,EAAK/N,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAI6nX,K,sCAI9BxrX,KAAK8iF,SACP9iF,KAAKU,YAAYwpW,YAAYpnR,UAAW,EAExC9iF,KAAKU,YAAYwpW,YAAYpnR,UAAW,I,oCAK1C,IAAMigN,EAAgB/iS,KAAKU,YAAYA,YACvCqiS,EAAc8nF,aAAe,EAAAx0V,YAAYC,WACzCysQ,EAAc7+I,eAAiB,EAAA7tH,YAAYC,YAC3C,wG,gCAGQ2wD,GAQJA,GAAYjnF,KAAKU,YAAY8+N,kBAAoB,EAAAnpM,YAAYC,aAC3Dt2B,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASm9K,QAAQ9tO,WAAWkuO,KAE5DxkQ,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASm9K,QAAQ9tO,WAAWkuO,Q,iCAK9DtpP,GACT,IAAMutE,EAAmBzoF,KAAK2hF,SAC9B,KAAK,EAAD,8GAA8B8G,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,oCAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,U,iCA1D7DswW,G,qJCHrB,QACA,Q,uDAEqBC,E,YACnB,WAAY3sS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKoV,YAAc,0CACnB,EAAKG,SAAW,MAChB,EAAK0U,QAAU,CAAC,EAAA8F,YAAYC,YALT,E,qEAQhB3yB,GACH,sGAAmBA,EAAW,IAAI8nX,K,gCAG1BxkS,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASm9K,QAAQ9tO,WAAWiuO,KAE5Dt9K,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASm9K,QAAQ9tO,WAAWiuO,S,iCAlBpDknH,G,4MCDAC,E,YACnB,WAAY5sS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKoV,YAAc,iDACnB,EAAKG,SAAW,aAChB,EAAK0U,QAAU,GALI,E,qEAShB5sB,GACH,sGAAmBA,EAAW,IAAI+nX,K,gCAG1BzkS,GAMJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASy6K,gB,GAvBjD,M,4BAEqBgqH,G,yJCFrB,S,IACA,OACA,QACA,QAEA,Q,uDAEqBnpI,G,gBAGnB,cAAc,iGACN,GAAM,EAAO,EAAA/+O,aAAaC,UADpB,OAEZ,EAAK6C,OAAS,iBACd,EAAK/C,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAK2zS,cAAgB,WACrB,EAAK9zS,YAAc,4BACnB,EAAKhY,cAAL,iBAPY,E,qEAUTC,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,QACHy/H,EAAkB,YAClBC,EAAmBg+N,EAGvB,QAAIj+N,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,Q,gCAGjCkb,EAAQq1H,GAChB,IAAMtwB,EAAS,GAQf,OAPAjgH,KAAKwwI,kBAAkBpyI,SAAQ,SAAAwuI,GAC7BA,EAAYn+B,UAAUvzF,GACrBq1H,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMxwB,GAC3C2sB,EAAYzmH,eAAiBymH,EAAYzmH,cAAc0gE,MAAM4pD,MAAMxwB,MAGlEA,M,aAnDFj4G,GAAK,Q,aADOu6O,E,IAwDf2rH,E,YAEJ,WAAYpvR,IAAS,gGACbA,IADa,OAEnB,EAAKjxE,gBAAiB,EACtB,EAAKvH,OAAS,iBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,4BALA,E,qEAQhB/X,GACH,sGAAmBA,EAAW,IAAIuqW,K,gCAG1BjnR,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASs7J,W,oOC7E5BopI,E,YAEnB,WAAY7sS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,oCACnB,EAAK8zS,cAAgB,oBACrB,EAAKj/R,SAAU,EACf,EAAKyyD,eAAgB,EAPF,E,qEAUhBr/E,GACH,sGAAmBA,EAAW,IAAIgoX,K,iCAGzBzwW,GACT,IAAM0wW,EAA4B5rX,KAAK2hF,SAAS36E,QAAO,SAAA3D,GACrD,OAAOA,EAAQyP,SAAR,QAA8BzP,EAAQyP,SAAR,OAA2B3Y,SAAS,eAErEyuF,EAAmB5oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC3C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,4CAW3E0uF,EAAqB7oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC7C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,oBAIjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAW0wW,EAA0B,GAC/F5rX,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,O,gCAmBpE+rE,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAOhxG,SAASo4I,QACvDjyK,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAOhxG,SAASo4I,c,GA/DxE,M,4BAEqB05M,G,qJCFrB,QACA,S,IACA,O,uDAEqBpjB,E,YAEnB,WAAYzpR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,2CACnB,EAAKE,OAAS,gBACd,EAAK2U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EAPF,E,qEAUhBr/E,GACH,sGAAmBA,EAAW,IAAI4kW,K,sCAIlCvoW,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,yCAGvBjtC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,6CAK1E,MAAO,CAAC,CACNgyE,SAAU,aACVI,UAHqBthF,KAAKU,YAAYwiS,qB,6CAOnB,WACrB,OAAOljS,KAAK2hF,UAAY3hF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEosF,wBAAwB,aAAc,EAAKpkF,YAAYwiS,sBAAsB,K,iCAGxHhoR,GACT,IAAMutE,EAAmBzoF,KAAKy3P,uBAC9B,KAAK,EAAD,8GAA8BhvK,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,cAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,GAAsB,Q,gCAI1C3tE,GAER,IAAM2wW,EAAiB7rX,KAAKU,YAAYguJ,aACxC,GAAIm9N,GAAkBA,EAAe1lW,cAAe,CAClD,IAAM2lW,EAAcD,EAAe1lW,cAAcrT,SAA7B,aACdi5W,EAA4BF,EAAe1lW,cAActK,SAAS1hB,SAAS,uBAE7E0xX,EAAe1lW,cAActK,SAAS1hB,SAAS,+BAC3C2xX,GAAcA,EAAW3xX,SAAS,SAE1C,GAAI2xX,GAAcA,EAAW3xX,SAAS,SAAW4xX,EAE/C,YADA,qGAKJ,OAAI/rX,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,K,gCAMjB+rE,GACR,GAAIA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,OAAQ,CACvE,IAAMstD,EAASH,EAAS4jD,OAAO/wG,OAAOurN,OAClCrlP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAnF1BmhR,G,qJCJrB,QACA,S,IACA,MACA,S,uDAEqByjB,E,YACnB,WAAYltS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,4CACnB,EAAKE,OAAS,SACd,EAAK4zS,cAAgB,eACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACrB,EAAK0lR,cAAe,EATD,E,qEAYhB/kW,GACH,sGAAmBA,EAAW,IAAIqoX,K,sCAQlChsX,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,+CAGjB44H,EAAYxlM,GAKnC,IAEMk7M,EAFe,UAAMjvN,WAAW4S,YAAYiB,aACvBlK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASilN,KAClC1zM,GAChB4oF,EAAgB,EAAAhyC,OAAOkqT,wBAAwB13I,EAASl7M,GACxDuyE,EAAmBzoF,KAAK2hF,SAAS36E,QACrC,SAAA3D,GAAA,OAAWA,EAAQM,WAAaN,EAAQM,UAAUkS,eAAeu7M,IAAY/tN,EAAQM,UAAUkS,eAAeu7M,GAASj3N,SAASy2F,MAElI,KAAK,EAAD,8GAA8BnI,EAAkB,KAAM,SAAU,CAClEzoF,KAAKmmB,cAAgBsiE,EAAiB,GACtC,IAAMsgR,EAA+BtgR,EAAiBzhF,QAAO,SAAA3D,GAC3D,OAAOA,EAAQM,UAAU4M,YAAYpW,SAAS,eAAiBkJ,EAAQM,UAAU4M,YAAYpW,SAAS,YAExG6F,KAAKgnF,mBAAqB+hR,EAA6B,M,iCAQhD7tV,IACT,oGAAiBA,GACjB,IAAM0tE,EAAmB5oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC3C,OAA+B,KAAvBA,EAAQsiG,cAElB3lG,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,GAC1Dlb,KAAKgnF,mBAAqBhnF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC5C,OAA+B,KAAvBA,EAAQsiG,YACXtiG,EAAQM,UAAU4M,aAClBlN,EAAQM,UAAU4M,YAAYpW,SAAS,eACvCkJ,EAAQM,UAAU4M,YAAYpW,SAAS,aACxC,O,gCAGE8sF,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAOm4I,SAExDhrF,GAAYjnF,KAAKgnF,qBAClBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAOm4I,a,iCArE/C+5M,G,qJCLrB,QACA,S,IACA,O,IACA,Q,uDAEqBvb,E,YACnB,WAAY3xR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,oBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,+CACnB,EAAK8zS,cAAgB,cACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKjsB,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAI8sW,K,sCAIlCzwW,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,yCAGvBjtC,EAASouC,GAAY,WAGlCgoS,GAF8B/nS,EAA5BA,sOAA6FruC,GAAUouC,GAExDj9E,QAAO,SAAA3D,GAC1D,OAAOA,EAAQyhF,wBAAwB,iBAAkB,EAAKpkF,YAAYwiS,qBAE5E,OAAO,aAAO+oF,GAAsB,SAAC5oX,GAAD,OAAaA,EAAQM,UAAUqE,MAChEF,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,iCAG3CgM,GACT,IAAMgoR,EAAiBljS,KAAKU,YAAYwiS,iBAClCz6M,EAAmBzoF,KAAK2hF,UAAY3hF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEosF,wBAAwB,iBAAkBo+M,OAAoB,GACpI,KAAK,EAAD,8GAA8Bz6M,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,cAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,Q,gCAItEA,GACR,IAAMgoR,EAAiBljS,KAAKU,YAAYwiS,iBACxC,OAAIljS,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAc2+D,wBAAwB,iBAAkBo+M,IAClFljS,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,K,gCAQjB+rE,GACJA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,SAC3D95B,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAO6qO,YAExD3kQ,KAAKgnF,qBACNhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAO6qO,iB,iCA9DjD8rG,G,2ICLrB,QACA,S,uDAEqByb,E,YACnB,WAAYptS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,2BACd,EAAKuV,SAAW,mBAChB,EAAK0U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMtqH,SAAU,EAAAgxG,OAAOsZ,MAAMrqH,QAJjC,E,4EAQnB9hC,QAAQ4B,IAAI,c,iCATKsyX,G,qJCHrB,QACA,S,uDAEqBxnH,E,YAEnB,WAAY5lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,oBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,+CACnB,EAAKE,OAAS,aACd,EAAK2U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACrB,EAAKn1E,gBAAiB,EARH,E,qEAWhBlK,GACH,sGAAmBA,EAAW,IAAI+gQ,K,yCAGjB7uN,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAC7G,6HAA0C,iBAAkBjkF,KAAKU,YAAYwiS,iBAAkBh/M,K,iCAGtFhpE,GACT,IAAMgoR,EAAiBljS,KAAKU,YAAYwiS,iBAClCz6M,EAAmBzoF,KAAK2hF,UAAY3hF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEosF,wBAAwB,iBAAkBo+M,OAAoB,GACpI,KAAK,EAAD,8GAA8Bz6M,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,cAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,Q,gCAItEA,GACR,IAAMgoR,EAAiBljS,KAAKU,YAAYwiS,iBACxC,OAAIljS,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAc2+D,wBAAwB,iBAAkBo+M,IAClFljS,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,K,gCAOjB+rE,GACR,GAAIA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,OAAQ,CACvE,IAAMstD,EAASH,EAAS4jD,OAAO/wG,OAAO4qO,iBAClC1kQ,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAvD1Bs9K,G,qJCHrB,QACA,SACA,Q,IACA,M,uDAEqBE,E,YACnB,WAAY9lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,2CACnB,EAAK8zS,cAAgB,UACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMtqH,SAAU,EAAAgxG,OAAOsZ,MAAMrqH,QACpD,EAAKkpD,eAAgB,EAPF,E,qEAUhBr/E,GACH,sGAAmBA,EAAW,IAAIihQ,K,yCAGjB/uN,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGgB,GAAWA,EAAXA,oHAA8C,WAAYjlF,KAAKU,YAAYwiS,iBAAkBh/M,GAE3FqqB,EAAevuG,KAAKU,YACpB0kJ,EAAc72C,EAAa21C,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,OAC7Dy0E,EAAamgD,aACbngD,EAAa81C,eAEjB,GAAIe,GAAcA,EAAWj/H,eAAiBi/H,EAAWj/H,cAAcxiB,WAAayhJ,EAAWj/H,cAAcxiB,UAAUkS,eAAgB,CACrI,IAAMs2W,EAAgB,EAAAjxV,6BAA6Bj7B,MAAK,SAAAy7M,GACtD,IAAM7/L,EAAWupI,EAAWj/H,cAActK,SAC1C,OAAOA,EAAS1hB,SAASuhN,KAAgB7/L,EAAS1hB,SAAS,SAEvD6b,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5Co2W,EAAcp2W,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,UAAfA,EAAMxf,QAC/C4wG,EAAuB+9C,EAAWj/H,cAAcxiB,UAAUkS,eAC1Dw2W,EAAer2W,EAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,QAAU01X,EAAgB,WAAa,gBAEzFC,GAAeC,IACjBpnS,EAAWA,EAASn9E,KAAI,SAAAmpE,GAEtB,OADAA,EAAKq7S,sBAAwB,EAAAztS,iBAAiB0tS,kBAAkBt7S,EAAKz1D,KAAM6rF,EAAsB+kR,EAAaC,GACvGp7S,KACNvoE,MAAK,SAAC8jX,EAAOC,GACd,OAAQD,EAAMF,sBAAwBG,EAAMH,sBACxC,EACEG,EAAMH,sBAAwBE,EAAMF,uBACnC,EACD,MAMZ,OAAOrnS,I,iCAGE/pE,GACT,IAAMgoR,EAAiBljS,KAAKU,YAAYwiS,iBAClCz6M,EAAmBzoF,KAAK2hF,UAAY3hF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEosF,wBAAwB,WAAYo+M,OAAoB,GAE1HzsS,EAAO,KAQX,GAPIuJ,KAAKmmB,gBACP1vB,EAAOuJ,KAAKmmB,cAActK,UAExBplB,IACFA,EAAOA,EAAKsH,MAAM,WAAW,GAAGA,MAAM,WAAW,GAAGA,MAAM,MAAM,GAAGA,MAAM,MAAM,KAG5EiC,KAAK0sX,gCAAgCjkS,KAAsBzoF,KAAKimG,uBAAuBxd,EAAkBhyF,GAAQ,MAAO,CAC3H,IAAMmyF,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,kBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAK2sX,sBAAsBlkS,EAAkBvtE,M,sDAIjButE,EAAkBvtE,GAChD,IAAMqzF,EAAevuG,KAAKU,YACpB0kJ,EAAc72C,EAAa21C,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,OAC7Dy0E,EAAamgD,aACbngD,EAAa81C,eACjB,GAAIe,GAAcA,EAAWj/H,gBAAkBi/H,EAAWj/H,cAActK,SAAS1hB,SAAS,sBACrFirJ,EAAWj/H,cAAcxiB,WAAayhJ,EAAWj/H,cAAcxiB,UAAUkS,eAAgB,CAC5F,IAAM+2W,EAAgBxnO,EAAWj/H,cAAcxiB,UAAUkS,eACnDG,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5C0jP,EAAiB1jP,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,aAAfA,EAAMxf,QAClD21X,EAAcp2W,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,UAAfA,EAAMxf,QAE/Co2X,EAAwBpkS,EAAiB38E,MAAK,SAACzI,GACnD,OAAOA,EAAQM,WAAa+1P,GAAkB0yH,GACzC/oX,EAAQM,UAAUkS,eAAe6jP,EAAe1xP,KAChD4kX,EAAclzH,EAAe1xP,KAC7B4kX,EAAcR,EAAYpkX,KAC1B3E,EAAQM,UAAUkS,eAAe6jP,EAAe1xP,IAAI7N,SAASyyX,EAAclzH,EAAe1xP,IAAI,KAC9F3E,EAAQM,UAAUkS,eAAeu2W,EAAYpkX,KAC7C3E,EAAQM,UAAUkS,eAAeu2W,EAAYpkX,IAAI7N,SAASyyX,EAAcR,EAAYpkX,IAAI,OAE/F,GAAI6kX,EAGF,OAFA7sX,KAAKmmB,cAAgB0mW,EACrB7sX,KAAK2sX,sBAAsBlkS,EAAkBvtE,IACtC,EAGX,OAAO,I,6CAGcutE,EAAkB5sE,EAAU6qF,GACjD,GAAI1mG,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,SAAU,CACrD,IAAMgvV,GAAgBhvV,GAAY7b,KAAKmmB,cAActK,UAAU9d,MAAM,OAAO,GAY5E,GAXAiC,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GACzC,IAAMypX,EAAsBzpX,EAAQwY,SAAS9d,MAAM,OAAO,GAC1D,OAAO8sW,IAAiBiiB,KAG1B9sX,KAAKgnF,mBAAqByB,EAAiB38E,MAAK,SAACzI,GAC/C,OAAOqjG,EACHrjG,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,gBACzExjG,EAAQM,UAAU4M,YAAYpW,SAASusG,GACxCrjG,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,kBAE5E7mG,KAAKmmB,cACP,OAAO,EAGX,OAAO,I,4CAGasiE,EAAkBvtE,GACtC,IAAM2tE,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,O,gCAGpEA,GACR,IAAMgoR,EAAiBljS,KAAKU,YAAYwiS,iBACxC,OAAIljS,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAc2+D,wBAAwB,WAAYo+M,IAC5EljS,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,WAAWlrE,IAFd,mGAAuBA,K,gCAMjB+rE,GAEJA,GAAYjnF,KAAKmmB,gBAEnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAO8qO,QAExD39K,GAAYjnF,KAAKgnF,qBAClBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAO8qO,Y,iCApJ/CA,G,yJCLrB,QAEA,Q,IACA,OACA,S,IACA,O,uDAEqB9f,E,YACnB,WAAYhmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,yCACnB,EAAK8zS,cAAgB,QACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QACzB,UAAOj5B,cACT,EAAKmiF,eAAgB,GARJ,E,qEAYhBr/E,GACH,sGAAmBA,EAAW,IAAImhP,K,yCAQjBjvM,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,sCAI1ElP,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,6CAKxC,MAAO,CAAC,CACN5B,SAAU,aACVI,UAHqBthF,KAAKU,YAAYwiS,qB,gCAOhChoR,GACR,OAAIlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC3EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG5DhnF,KAAKomF,cAFH,mGAAuBlrE,K,yCAMR87O,GACS,WAAtBA,GAGFh3P,KAAKU,YAAYA,YAAYguJ,aAAa+iN,yBAAyB,OAAQzxW,KAAK8S,SAAL,WAA8B9S,KAAK8S,SAAL,WAA4B,GAAK,Q,6CAIvH,WACrB,OAAO,aAAO9S,KAAK2hF,UAAU,SAAAjpF,GAAA,OAAKA,EAAEosF,wBAAwB,aAAc,EAAKpkF,YAAYwiS,uB,+CAGpExnF,EAAYxlM,GACnC,IACMuyE,GADoBpE,EAApBA,sIAAyErkF,KAAKygF,wBACzCz5E,QAAO,SAAC3D,GACjD,OAAOA,EAAQyP,SAAS4oM,IAAer4M,EAAQyP,SAAS4oM,GAAYvhN,SAAS+b,MAE/E,KAAK,EAAD,8GAA8BuyE,GAAmB,CACnDzoF,KAAKmmB,cAAgBsiE,EAAiB,GACtC,IAAMsgR,EAA+BtgR,EAAiBzhF,QAAO,SAAA3D,GAC3D,OAAOA,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEhD6F,KAAKgnF,mBAAqB+hR,EAA6B,M,mCAKzD,IAAMtgR,EAAmBzoF,KAAKy3P,uBAC1BhhQ,EAAO,KACPuJ,KAAKmmB,gBACP1vB,EAAOuJ,KAAKmmB,cAActK,WAEvB,EAAD,8GAA8B4sE,EAAkBhyF,EAAOA,EAAKwI,UAAU,EAAGxI,EAAKhC,OAAS,GAAK,QAC9FuL,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqByB,EAAiB38E,MAAK,SAACzI,GAC/C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,oB,gCAK3E8sF,GACJA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,SAC5D95B,KAAKmmB,gBACNnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAOgrN,MAExD9kP,KAAKgnF,qBACNhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAOgrN,W,iCA/FjDA,G,0JCPrB,QAEA,Q,IACA,O,IACA,OACA,S,uDAEqB+sH,E,YACnB,WAAY/yR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,2CACnB,EAAK8zS,cAAgB,UACrB,EAAKpoL,4BAA6B,EAClC,EAAK72G,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QACzB,UAAOj5B,cACT,EAAKmiF,eAAgB,GATJ,E,qEAahBr/E,GACH,IAAMopX,EAAsB/sX,KAAKojF,MAAMz/E,EAAW,IAAIkuW,GAClDkb,GACFlb,EAAa1F,sBAAsB4gB,K,sCAgBrC/sX,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,2CAIxC,IAAM20B,EAAaz3G,KAAKU,YAAY02C,KACpC,GAAIqgE,GAAcA,EAAWtxF,cAAe,CAC1C,IAAMmrS,EAAW75M,EAAWtxF,cAAcrT,SAAzB,SACjB,GAAIw+S,EACF,OAAO1pT,MAAMC,QAAQypT,GAAYA,EAAS,GAAKA,EAC1C,GAAI75M,EAAWtxF,cAActK,SAAS1hB,SAAS,eACpD,MAAO,QAGX,OAAO,O,yCAGU07C,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACvGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACtG8oS,EAAWhtX,KAAKitX,qBACtB,OAAID,GACF,kIAAsD,WAAYA,EAAU3oS,GAEvEA,EAAkBv8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,2CAGvDg+W,GACnB,IACM1sS,EAAa,CAAC,CAClBU,SAAU,aACVI,UAHqBthF,KAAKU,YAAYwiS,mBAWxC,OANIgqF,GACF1sS,EAAWzrF,KAAK,CACdmsF,SAAU,WACVI,UAAWthF,KAAKitX,uBAGbzsS,I,gCAGCtlE,GACR,OAAIlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,sBAAqB,KAChGzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG5DhnF,KAAKomF,cAFH,mGAAuBlrE,K,6CAMJ,WACrB,OAAO,aAAOlb,KAAK2hF,UAAU,SAAAjpF,GAAA,OAAKA,EAAEosF,wBAAwB,aAAc,EAAKpkF,YAAYwiS,uB,yCAG1ElsC,GACS,SAAtBA,EACFh3P,KAAKU,YAAYA,YAAY02C,KAAKq6T,yBAAyB,WAAY,SAEvEzxW,KAAKU,YAAYA,YAAYguJ,aAAa+iN,yBAAyB,OAAQzxW,KAAK8S,SAAL,WAA8B9S,KAAK8S,SAAL,WAA4B,GAAK,Q,iCAInIoI,GAAQ,WACXutE,EAAmBzoF,KAAK2hF,UAAY3hF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,sBAAqB,QAAW,GACvIhqF,EAAO,KAIX,GAHIuJ,KAAKmmB,gBACP1vB,EAAOuJ,KAAKmmB,cAActK,YAEvB,EAAD,8GAA8B4sE,EAAkBhyF,EAAOA,EAAKwI,UAAU,EAAGxI,EAAKhC,OAAS,GAAK,MAAO,CACrG,IAAMm0F,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,mBAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,GAAsB,Q,gCAI1C5B,GACJA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,SAC3D95B,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAOirN,QAExD/kP,KAAKgnF,qBACNhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAO/wG,OAAOirN,Y,6CAlGvCgoI,GAC3B,IAAMzgB,EAAaygB,EAAoBj6W,SAApB,SACbxP,EAAOypX,EAAoBj6W,SAApB,KACTw5V,GAAcA,EAAWnyW,SAAS,WAAamyW,EAAWnyW,SAAS,UACrEmyW,EAAWv3W,KAAK,SAEduO,IAASgpW,IACXygB,EAAoBj6W,SAApB,SAA2CxP,EAAKnJ,SAAS,QAAU,CAAC,QAAS,SAAW,Q,iCA5BzE03W,G,4JCPrB,QAEA,SACA,QACA,QACA,QACA,Q,IACA,OACA,Q,qDAEa3rE,Q,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAA1iS,aAAa02B,SADpB,OAEZ,EAAK5zB,OAAS,SACd,EAAK/C,SAAW,EAAAC,aAAa02B,OAC7B,EAAKre,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAK8zS,cAAgB,mBACrB,EAAK5zS,OAAS,kBACd,EAAKlY,cAAL,kBARY,E,qEAWTC,GAAW,WACRwpX,EAA2C,oBAAxBxpX,EAAU6M,UAC7B48W,EAAmC,WAAxBzpX,EAAU6M,UAE3B,IAAK28W,IAAqBC,EACxB,OAAO,EAET,IAAM5xW,EAAO,IAAI0pP,EAajB,OAZA1pP,EAAK9a,UAAY,kBAAM,GAElBV,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAGrBg9O,EACF3xW,EAAK40H,KAAKzsI,IAEV3D,KAAKqtX,cAAgB7xW,EACrBxb,KAAKqtX,cAAc1pX,UAAYA,IAE1B,I,gCAGCuX,EAAQq1H,GAChB,GAAIr1H,EAAO9P,OAAS,EAAAsrB,WAAWgkE,MAC7B,OAAO,KAET,IAAK16F,KAAKmmB,cACR,OAAO,KAET,IAAM6qD,EAAM,GAERq1B,GAAY,aAAKrmG,KAAKmmB,cAAcxiB,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKmmB,cAAcogF,sBAAuBrrF,OAAQA,EAAOqmE,iCAelI,GAdK8kB,IACHA,GAAa,aAAKrmG,KAAKmmB,cAAcxiB,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKmmB,cAAcogF,yBAGvFvmG,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,sBACtDqf,GAAY,aAAKrmG,KAAKgnF,mBAAmBrjF,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKumG,oBAAoBvmG,KAAKgnF,oBAAqB9rE,OAAQA,EAAOqmE,oCAE1I8kB,GAAa,aAAKrmG,KAAKgnF,mBAAmBrjF,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKumG,oBAAoBvmG,KAAKgnF,wBAI7GhnF,KAAKmmB,cAAc0gE,MAAM2f,cAAcH,GAGnCrmG,KAAKgnF,mBAAoB,CAC3B,IAAIqf,GAAY,aAAKrmG,KAAKgnF,mBAAmBrjF,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKumG,oBAAoBvmG,KAAKgnF,oBAAqB9rE,OAAQA,EAAOqmE,iCAC3I8kB,IACHA,GAAa,aAAKrmG,KAAKgnF,mBAAmBrjF,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKumG,oBAAoBvmG,KAAKgnF,uBAE3GhnF,KAAKgnF,mBAAmBH,MAAM2f,cAAcH,GAG1CrmG,KAAKqtX,eAAiBrtX,KAAKqtX,cAAc1pX,UAAUixB,aAErDyxE,EADkBrmG,KAAKqtX,cAAc1pX,UACfixB,WAAW,GACjC50B,KAAKqtX,cAAcxmS,MAAM2f,cAAcH,GACvCrmG,KAAKqtX,cAAcxmS,MAAM4pD,MAAMz/D,IAOjC,OAJCu/D,IAAuBvwI,KAAK0mF,oBAAsB1mF,KAAKgnF,mBACpDhnF,KAAKgnF,mBAAmBH,MAAM4pD,MAAMz/D,GACpChxE,KAAKmmB,cAAc0gE,MAAM4pD,MAAMz/D,GAE5BA,I,mCAIP,IAAM4X,EAAmB5oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC3C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,0BAE3E0uF,EAAqB7oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC7C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,GAAoB5oF,KAAK2hF,SAAS,GACvD3hF,KAAKgnF,mBAAqB6B,GAAsB7oF,KAAK2hF,SAAS,K,uCAI9D,OAAO,IAAI,EAAJ,QAAyB3hF,KAAK6b,SAAU7b,Q,gCAGvCinF,GAKLA,KACD,IAAAgF,IAAGjsF,KAAKqtX,eAAe,SAAAn+W,GAAA,OAAKA,EAAE23E,MAAMO,OAASH,EAAS63K,mBACtD,IAAA7yK,IAAGjsF,KAAKmmB,eAAe,SAAAjX,GAAA,OAAKA,EAAE23E,MAAMO,OAASH,EAASg4K,mBACnDj/P,KAAKgnF,qBACNhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASg4K,oB,iCAMpD,MAAO,CAAC,CACN38O,KAAMtiB,KAAK6b,SACXL,KAAMxb,W,aAlHHgI,GAAK,S,OAwHRk9P,E,YACJ,WAAYpmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,6BAJA,E,qEAOhB/X,IACH,qFAAY9O,KAAKmL,KAAKU,YAAaiD,EAAW3D,MAAM,O,qLC5IxD,QAEA,SACA,QACA,Q,IACA,OACA,Q,qDAEa8hP,S,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAt+O,aAAa02B,SADpB,OAEZ,EAAK5zB,OAAS,UACd,EAAK/C,SAAW,EAAAC,aAAa02B,OAC7B,EAAKre,SAAW,UAChB,EAAKH,YAAc,8BACnB,EAAK8zS,cAAgB,WACrB,EAAK9rT,cAAL,mBACA,EAAK4pX,aAAe,KARR,E,qEAWT3pX,GAAW,WACV6X,EAAO,KACX,OAAQ7X,EAAU6M,WAChB,IAAK,UACHgL,EAAO,IAAI+xW,EACX,MACF,IAAK,iBACEvtX,KAAKstX,eACRttX,KAAKstX,aAAe,IAAIE,GAAa,GACrCxtX,KAAK+e,aAAahqB,KAAKiL,KAAKstX,eAE9B9xW,EAAOxb,KAAKstX,aAGhB,QAAI9xW,IACFA,EAAK9a,UAAY,kBAAM,GAClBV,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzB30H,EAAK40H,KAAKzsI,IACH,K,gCAKDuX,EAAQq1H,GAChB,IAAMtwB,EAAS,GAkBf,OAhBIswB,IAAuBvwI,KAAK0mF,oBAAsB1mF,KAAKgnF,oBACzDhnF,KAAKgnF,mBAAmBH,MAAM9nF,IAA9B,qBACAiB,KAAKgnF,mBAAmBH,MAAM+qH,QAAS,EACvC5xM,KAAKgnF,mBAAmBH,MAAM4pD,MAAMxwB,IAC3BjgH,KAAKmmB,gBACdnmB,KAAKmmB,cAAcsoF,UAAUvzF,GAC7Blb,KAAKmmB,cAAc0gE,MAAM4pD,MAAMxwB,IAGjCjgH,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACxBA,EAAYn+B,UAAUvzF,GAClB0xH,GAAeA,EAAYzmH,eAC7BymH,EAAYzmH,cAAc0gE,MAAM4pD,MAAMxwB,MAInCA,I,iCAGE/kG,GACTlb,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,MAC5C,IAAM0tE,EAAmB5oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC3C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,eAE3E0uF,EAAqB7oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC7C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,GAAoB5oF,KAAK2hF,SAAS,GACvD3hF,KAAKgnF,mBAAqB6B,GAAsB7oF,KAAK2hF,SAAS,K,uCAI9D,OAAO,IAAI,EAAJ,QAAyB3hF,KAAK6b,SAAU7b,Q,8EAKvCinF,GACLA,IACDjnF,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEyhI,UAAU1pD,MAC3CjnF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcwqH,UAAU1pD,GAChDjnF,KAAKgnF,qBACNhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS66J,Y,iCAMpD,MAAO,CAAC,CACNx/N,KAAMtiB,KAAK6b,SACXL,KAAMxb,W,aA3FHgI,GAAK,U,OAgGRulX,E,YACJ,WAAYzuS,IAAS,gGACbA,IADa,OAGnB,EAAKjjE,SAAW,UAChB,EAAKhO,gBAAiB,EAJH,E,qEAOhBlK,IACH,qFAAY9O,KAAKmL,KAAKU,YAAaiD,EAAW3D,MAAM,K,gCAG5Ckb,GAER,IAAImrF,GAAY,aAAKrmG,KAAK2D,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKumG,oBAAoBvmG,MAAOkb,OAAQA,EAAOqmE,iCACrG8kB,IACHA,GAAa,aAAKrmG,KAAK2D,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKumG,oBAAoBvmG,SAEnFA,KAAK6mF,MAAM2f,cAAcH,K,iCAGhBnrF,GACTlb,KAAKmmB,eAAgB,oGAAiBjL,IAAWlb,KAAK2hF,SAAS,K,gCAGvDsF,GACLA,IACDjnF,KAAK6mF,MAAMO,OAASH,EAAS66J,a,uBAI7B0rI,E,YACJ,WAAY1uS,IAAS,gGACbA,IADa,OAEnB,EAAKjjE,SAAW,gBAFG,E,qEAKhBlY,GACH,sGAAmBA,EAAW,IAAI6pX,K,gCAG1BvmS,GACJA,GAAYjnF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAc0gE,QACvD7mF,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu6K,oB,gLCpJjD,SACA,QACA,Q,IACA,OACA,QACA,S,qDAEaiD,Q,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAjhQ,aAAaC,UADpB,OAEZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAK8zS,cAAgB,UACrB,EAAK9rT,cAAL,kBACA,EAAKokH,OAAS,KAPF,E,0EAUJ5sG,EAAQq1H,GAChB,IAAMtwB,EAAS,GAQf,OAPAjgH,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACxBA,EAAYn+B,UAAUvzF,GACrBq1H,IAAuB3D,EAAYlmD,oBAAsBkmD,EAAY5lD,mBAClE4lD,EAAY5lD,mBAAmBH,MAAM4pD,MAAMxwB,GAC3C2sB,EAAYzmH,eAAgBymH,EAAYzmH,cAAc0gE,MAAM4pD,MAAMxwB,MAGjEA,I,2BAGJt8G,GAAW,WACd,MAA4B,WAAxBA,EAAU6M,YACPxQ,KAAK8nH,SACR9nH,KAAK8nH,OAAS,IAAI2nM,GAAW,GAC7BzvT,KAAK+e,aAAahqB,KAAKiL,KAAK8nH,QAC5B9nH,KAAK8nH,OAAOpnH,UAAY,kBAAM,IAE3BV,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAK8nH,OAAOsoB,KAAKzsI,IACV,K,2CAMT,OAAO,I,iCAIP,OAAO3D,KAAK+e,aAAajX,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,wDAIvE,OAAOlP,KAAKyc,WAAW,K,uCAIvB,OAAO,IAAI,EAAJ,QAAyB,SAAUzc,Q,iCAGjCkb,GACTlb,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,U,aAzDvClT,GAAK,S,OA6DRynT,E,YAEJ,WAAY3wO,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAK8zS,cAAgB,UACrB,EAAKxsO,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAI8rT,K,gCAG1Bv0S,GAER,IAAMyqF,EAAazqF,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBAG3C,GAAmB,SAAfv9L,GAAwC,SAAfA,EAM7B,0GAAuBzqF,IAJrB,uG,iCAOOA,GACT,IAAM0tE,EAAmB5oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC3C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,uBAE3E0uF,EAAqB7oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC7C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWlb,KAAK2hF,SAAS,GACnF3hF,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,O,gCAGpE+rE,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASw9K,QAEzCx9K,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASw9K,Y,6KClHtD,QACA,Q,IACA,OACA,QACA,Q,IACA,MACA,SACA,Q,uDAEqB+B,E,YACnB,WAAY1nL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,4CACnB,EAAK8zS,cAAgB,kBACrB,EAAK5zS,OAAS,iBACd,EAAK2tV,cAAgB,EACjBzqR,IACF,EAAKwJ,2BAA6B,CAChCmlS,GAAI,GACJC,GAAI,KAXW,E,qEAgBhB/pX,GACH,sGAAmBA,EAAW,IAAI6iQ,K,gCAG1BtrP,GAER,IAAM4zI,EAAiB9uJ,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAixH,eAAeznI,IAEpE,KAAIhI,KAAKU,YAAY0oF,0BAA4B0lE,GAAkBA,EAAelf,WAC7Ekf,EAAehf,YAAcgf,EAAelf,UAAU0pG,aAI3D,OAAIt5O,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,IALvB,uG,yCAWe26B,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,oDAI1E,IACM84E,EADShoF,KAAKU,YACEA,YACtB,GAAIsnF,EAAO9sE,QAAU8sE,EAAOoB,0BACvBpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAI8nI,YAAc,EAAA72G,mBAAmBG,YAAa,CACxF,IAAMsuH,EAAY1/D,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IACrD0/I,EAAUt+D,wBAAyB,EACnCs+D,EAAU5X,UAAY,EAAA72G,mBAAmBC,iB,kCAIjCvkB,GAEV,IADA,qGAAkBA,IACd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAIA,IACMgoF,EADsBhoF,KAAKU,YACEA,aAC/BsnF,EAAOoB,0BAA4BpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAI8nI,YAAc,EAAA72G,mBAAmBG,aACzGjhC,OAAO2B,SAASwb,KAAKnb,SAAS,cAKpC6F,KAAKu5O,8BAJH,UAAMt1N,UAAS,IAAAiqI,0BAAwB,O,6CAQzC,IAAMxd,EAAe1wI,KAAKU,YACpBitX,EAAqBj9O,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GACxFg/K,EAAat2C,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,aACjE,MAAO,CAAC,CACN9lG,SAAU,SACVI,UAAWovD,EAAatnD,0BACpBsnD,EAAax1H,OAAOsD,MAAMmvW,GAAoB79O,YAAc,EAAA72G,mBAAmBG,YAC/E,CAAC,OACDs3G,EAAa0mI,aAAe,WAAa,UAC5C,CACDl2L,SAAU,aACVI,UAAW0lG,M,mCAIF,WACLh/F,EAAShoF,KAAKU,YACdunF,EAAuBjoF,KAAKmmB,cAC5BsiE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,4BACrF,EAAD,8GAA8BgI,IAChCzoF,KAAKosW,oCAAoCpkR,EAAQS,EAAkB,aAErEzoF,KAAKqsW,0BAA0BrkR,EAAQC,K,gCAG/BhB,GACR,IAAMguC,EAAaj1H,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,QAAU95B,KAAKU,YAAY0oF,yBAC3F,aACA,YACAnC,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS8S,OAAOk7B,GAAYqtI,SAE7Dr7K,GAAYjnF,KAAKgnF,qBAClBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS8S,OAAOk7B,GAAYqtI,a,iCA1GpDkE,G,qJCTrB,QACA,QACA,Q,uDAEqBojG,E,YACnB,WAAY9qR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKoV,YAAc,0CACnB,EAAKG,SAAW,QAChB,EAAK0U,SAAU,EACf,EAAKg5U,cAAgB,GANF,E,qEAShB5lW,GACH,sGAAmBA,EAAW,IAAIimW,K,gCAO1B1uV,GAAQ,WAEhB,IAAIlb,KAAKU,YAAY0oF,yBAYrB,OAPIppF,KAAKU,YAAYylJ,iBAAmB,EAAApsH,eAAeE,OACrDj6B,KAAK8iF,UAAW,GAElB9iF,KAAKmmB,cAAgBnmB,KAAK2hF,SAAS71E,MAAK,SAACzI,GACvC,IAAMuqX,EAA0B,EAAKltX,YAAY2oF,WAAWljE,cAC5D,OAAOynW,GAA2BvqX,EAAQwY,WAAa+xW,EAAwB/xW,aAEjF,mGAAuBX,IAXrB,uG,gCAcM+rE,GACJA,GAAYjnF,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,QAAU95B,KAAKmmB,gBAC9EnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS8S,OAAOzjE,WAAW0D,W,iCArC9C4vU,G,yJCJrB,OAEA,QACA,SAEA,QACA,QACA,QACA,Q,uDASqBC,E,YAEnB,WAAY/qR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK8zS,cAAgB,uBACrB,EAAKvsO,WAAaA,EAClB,EAAK6D,mBAAqB,GAC1B,EAAK9D,eAAgB,EACrB,EAAK0D,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKgjR,cAAgB,EACrB,EAAK99M,iBAAkB,EAdY,E,qEAiBhC9nJ,GAEH,GADcA,EAAUmP,SAAV,MACH,CACT,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGAAmBnP,EAAW,IAAIkmW,GAAW,EAAO5mR,IAAa,EAAqB,IAAfA,EAAmB,WAAa,iBAEvG,IAAM6mR,GAAmBA,EAAnBA,6FAA+BnmW,EAAW,IAAIkmW,GACpD,GAAIC,EAAkB,CACpB,IAAMvmR,EAAcumR,EAAiBnmW,UAAUmF,kBAC/CghW,EAAiBvmR,YAAcA,EAC/BumR,EAAiBriN,eAAiB,SAClCqiN,EAAiB1+V,KAAO,EAAA6pH,WAAWn7F,OACnCgwU,EAAiBziN,iBAAmBrnJ,KAAK+pW,qBAAqBxmR,GAC9DumR,EAAiBh3V,SAAW9S,KAAKgqW,mBAAmBzmR,EAAaumR,EAAiBziN,kBAClFyiN,EAAiBvhR,aAAehF,EAAYjnF,cAAcqC,QAAQ,MAAO,KACzEmrW,EAAiBlmR,0BAA2B,EACvCkmR,EAAiBnmW,UAAUE,eAC9BimW,EAAiBlmW,gBAAkB5D,KAAKiqW,cAAc1mR,IAG1D,OAAOumR,I,6CAIwD,IAA9CvmR,EAA8C,uDAAhCvjF,KAAKmmB,cAAco9D,YACpD,QAAQ,GACN,KAAKA,EAAYppF,SAAS,QACxB,MAAO,OACT,KAAKopF,EAAYppF,SAAS,QACxB,MAAO,OACT,KAAKopF,EAAYppF,SAAS,QAC1B,QACE,MAAO,U,2CAIsE,IAAhEopF,EAAgE,uDAAlDvjF,KAAKmmB,cAAco9D,YAAa8jE,EAAkB,aAC3EoxK,EAAsBl1O,EAAYxlF,MAAM,KAC9C,MAAO,CACL,WAAcwlF,EAAYppF,SAAS,UAAY,CAACs+T,EAAoB,IAAM,CAAC,QAC3E,eAAuC,SAArBpxK,EAA8B,CAAC,QAAU,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,W,sCAI5C,IAA9C9jE,EAA8C,uDAAhCvjF,KAAKmmB,cAAco9D,YAC7C,QAAQ,GACN,KAAKA,EAAYppF,SAAS,QACxB,OAAOopF,EAAYppF,SAAS,QAArB,8CACT,KAAKopF,EAAYppF,SAAS,QACxB,OAAOopF,EAAYppF,SAAS,QAArB,8CACT,KAAKopF,EAAYppF,SAAS,QAC1B,QACE,OAAOopF,EAAYppF,SAAS,QAArB,iD,oCAKX,IAAMZ,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,sGACAnH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAO8vF,WAAWljE,cAAgBnmB,KAEpCA,KAAKU,YAAYimJ,0BAA2B,EAC5C,IAAM3+D,EAAShoF,KAAKU,YAAYwa,OAASlb,KAAKU,YAAcV,KAAKU,YAAYA,YACzEsnF,EAAOoB,yBACSpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,GAErCppF,KAAK4mF,mB,sCAGS,WACR8pD,EAAe1wI,KAAKU,aAC1BgwI,EAAa3xH,aAAa3gB,SAAQ,SAAC4gB,GACjCA,EAAQ8jE,SAAW,EAAKA,SACpB9jE,EAAQ8nE,oBAAsB9nE,EAAQ8nE,mBAAmBryF,QAC3DuqB,EAAQ8nE,mBAAmB1oF,SAAQ,SAAC2oF,GAC9BA,IACFA,EAAkBjE,SAAW,EAAKA,gBAKtC4tD,EAAax1H,QAAUw1H,EAAatnD,0BACpBsnD,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IACjDohF,wBAAyB,GAErCppF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,YAEjB4tD,EAAax1H,OAAOsD,MAAMqjO,MAClCsU,QAAQrzK,SAAW9iF,KAAK8iF,SAGnC,IAAMigN,EAAgBryJ,EAAax1H,OAAOsD,MAAM4oP,QAE5C12H,EAAax1H,OAAO9P,OAAS,EAAAsrB,WAAWgkE,QAAU16F,KAAK8iF,UAAYigN,IACjEA,EAAcC,cAChBD,EAAcC,YAAYlgN,UAAW,GAEnCigN,EAAcC,cAChBD,EAAcmnE,YAAYpnR,UAAW,EACrCigN,EAAcmnE,YAAYt3Q,oB,wCAKd/8C,GAAS,WACnB36B,EAASlb,KAAKU,YAAYwa,OAC1BgpE,EAA4BruC,GAAUA,EAAVA,oHAA6CA,GAAW71C,KAAK2hF,SACzFuhN,EAAiBhoR,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBAC/C,OAAOh/M,EAA0Bl9E,QAAO,SAAC3D,GACvC,OAAI,EAAK3C,YAAYwjJ,iBAAmB,EAAAnqD,OAAOmsD,KAAKpsH,OACxB,SAAnBopQ,GAA6C,IAAhBhoR,EAAO9P,KACV,SAA7B/H,EAAQgkJ,kBAA4D,SAA7BhkJ,EAAQgkJ,iBAC/ChkJ,EAAQokJ,iBAAmB,EAAA1tD,OAAOmsD,KAAKpsH,OAEnCz2B,EAAQokJ,iBAAmB,EAAA1tD,OAAOmsD,KAAKpsH,QAAkC,IAAvBz2B,EAAQ4/E,gB,yCAKrDptC,EAASouC,GAE1B,OADkCC,EAA5BA,+GAA0DlkF,KAAKmqW,kBAAkBt0T,GAAUouC,GAChEn8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,8CAG5D,WAChB43E,EAAsB9mF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAc88D,WAAcjjF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC5G,OAAOA,EAAQwY,WAAa,EAAKsK,cAActK,YAC5C,GAIL,OAHAirE,EAAmB1oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAE7BgE,I,mCAGI,WACLqjR,EAAoBnqW,KAAKmqW,oBACzBjvV,EAASlb,KAAKU,YAAYwa,OAC5B0tE,EAAmBuhR,EAAkBr+V,MAAK,SAACzI,GAC7C,MAA4B,uBAArBA,EAAQwY,YAGM,SADAX,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,kBACE,IAAhBhoR,EAAO9P,MAAcpL,KAAKmmB,gBACzDyiE,EAAmBuhR,EAAkBr+V,MAAK,SAACzI,GACzC,OAAO,EAAK8iB,cAActK,SAAS1hB,SAAS,QACxCkJ,EAAQwY,SAAS1hB,SAAS,QAC1BkJ,EAAQwY,SAAS1hB,SAAS,YAGlC6F,KAAKmmB,cAAgByiE,GAAoBuhR,EAAkB,GAC3DnqW,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,gCAGvB5sE,GAER,GAAIlb,KAAKU,YAAY0oF,0BACnB,0GAIF,GAAIppF,KAAKU,YAAYwjJ,iBAAmB,EAAAnqD,OAAOmsD,KAAKpsH,QAAU95B,KAAKmmB,cAAe,CAChFnmB,KAAKmmB,cAAc0gE,MAAM9nF,IAAM,GAC/B,IAAMmkS,EAAiBhoR,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBACzC77I,EAAmBrnJ,KAAKU,YAAY2mJ,mBACnB,SAAnB67I,GAA6C,IAAhBhoR,EAAO9P,MAAoC,SAArBi8I,EAErDrnJ,KAAKomF,aACuB,SAAnB88M,GAA6C,IAAhBhoR,EAAO9P,MAAepL,KAAK2mJ,0BACxC,SAArBU,GACJrnJ,KAAKomF,kBAGP,mGAAgBlrE,K,gCAIV+rE,GACR,IAAMguC,EAAcj1H,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,OAAU,aAAe,YAC1FmtD,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS8S,OAAOk7B,GAAY0sI,KAAK3hQ,KAAKmmB,cAAc88D,aAEpFjjF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBF,MAAMO,OAASH,EAAS8S,OAAOk7B,GAAY0sI,KAAK56K,EAAkB9D,iB,mCAK7E/jE,GACQ,IAAfA,GAAoBlf,KAAK8iF,WAC3B9iF,KAAK8iF,UAAW,EAChB9iF,KAAK4yF,qB,iCAtNUi3Q,G,yJCjBrB,QACA,Q,IACA,OAEA,QACA,QACA,Q,uDAEqBgkB,E,YAEnB,WAAY/uS,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKx4E,OAAS,uBACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,kDACnB,EAAK8zS,cAAgB,wBACrB,EAAK5zS,OAAS,cACd,EAAK/N,gBAAiB,EACtB,EAAK66V,cAAe,EACpB,EAAKzlR,WAAaA,EAClB,EAAK6D,mBAAqB,GAC1B,EAAKqgB,WAAa,gBAClB,EAAKoiQ,cAAgB,EAZc,E,qEAehC5lW,GAEH,GADcA,EAAUmP,UAAYnP,EAAUmP,SAAV,MACzB,CACT,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGAAmBnP,EAAW,IAAIkqX,GAAmB,EAAO5qS,IAC1D,EAAqB,IAAfA,EAAmB,WAAa,iBAExC,sGAAmBt/E,EAAW,IAAIkqX,K,kCAI1Bl5W,GACV,IAAMpb,EAASyG,KAAKU,aACpB,qGAAkBiU,GAClBpb,EAAOutF,mBAAqBvtF,EAAOuuF,wBACnC,IAAME,EAASzuF,EAAOmH,YAClBsnF,EAAOs+D,0BAA4Bt+D,EAAOs+D,yBAAyBtjE,gBACjEgF,EAAOs+D,yBAAyB5/D,sBAAuB,IAAAhyE,oBAAmB1U,QAC9EgoF,EAAOs+D,yBAAyBxjE,UAAW,EAC3CkF,EAAOs+D,yBAAyB1zD,iBAElC5yF,KAAK4mF,mB,yCAGY/wC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,+GAA0DlkF,KAAKmqW,mBAAL,sGAAAnqW,MAAA,KAAAA,KAA0D61C,IAAWouC,GAErI,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,wCAG1D4+W,GAChB,OAAOA,EAAa9mX,QAAO,SAAAsnI,GAAA,OAA0C,IAA3BA,EAAYrrD,gB,gCAG9C/nE,GACJlb,KAAKmmG,gBAAkBnmG,KAAKmmG,cAAcxlB,gCAAgC3gF,KAAKygF,yBACjFzgF,KAAK8mG,mBAEH9mG,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC3EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAC1DhnF,KAAK8mF,mBAAqB9mF,KAAK8nF,yBAC/B,mGAAgB5sE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,M,mCAIP,WACLutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAE1F,IAD6B4wI,EAAvBA,8GAAoD5oI,EAAkB,KAAM,MAAM,GAatFzoF,KAAK8mF,mBAAqB9mF,KAAK8nF,4BAZN,CACzB,IAAMc,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,kBAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,kBAGnF7mG,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAK8mF,mBAAqB9mF,KAAK8nF,wBAC/B9nF,KAAKgnF,mBAAqB6B,GAAsB,KAIlD7oF,KAAK8mG,qB,6CAIL,IAAM4pC,EAAe1wI,KAAKU,YACpBitX,EAAqBj9O,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GAE9F,MAAO,CAAC,CACNk5E,SAAU,aACVI,UAHiBovD,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,iB,gCAOzD//F,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAW0rO,KACpC+rH,EAAU9mS,EAAS8S,OAAOzjE,WAAW2rO,MACrC+rH,EAAU/mS,EAAS8S,OAAOzjE,WAAW8rO,WACvCn7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAErCH,GAAYjnF,KAAK8mF,mBAAmBryF,QACtCuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC3BA,GAAqBA,EAAkBF,QACzCE,EAAkBF,MAAMO,OAAS2mS,MAIpC9mS,GAAYjnF,KAAKmmG,gBAClBnmG,KAAKmmG,cAActf,MAAMO,OAAS4mS,K,8CAIkB,IAAlCnwW,EAAkC,uDAApB7d,KAAKmmB,cACvC,IAAKtI,EACH,MAAO,GAET,IAAMmpK,EAAanpK,EAAY/K,SAAZ,WACbiuE,EAAQljE,EAAY4B,yBAAyB1hB,MAAM,SAAS,GAAGA,MAAM,SAAS,GAC9EgpF,EAAoBlpE,GAAeA,EAAYolE,YAAc+jG,EAAahnL,KAAK6hF,cAAc/1E,MAAK,SAACzI,GACvG,IAAM4qX,EAAc5qX,EAAQyP,SAAR,WACdyiU,EAAQlyU,EAAQoc,yBAAyB1hB,MAAM,SAAS,GAAGA,MAAM,SAAS,GAChF,OAAOkwX,IAAe,aAAQjnM,EAAYinM,KAAiB5qX,EAAQwY,WAAagC,EAAYhC,UAAYklE,IAAUw0P,MAC/G,KACL,OAAIxuP,GACFA,EAAkBjE,SAAW9iF,KAAK8iF,SAC3B,CAACiE,IAEH,O,iCApIU8mS,G,yJCRrB,QACA,Q,IACA,OAEA,QACA,Q,uDAEqBK,E,YAEnB,WAAYpvS,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKx4E,OAAS,8BACd,EAAKuV,SAAW,sBAChB,EAAKH,YAAc,yDACnB,EAAKE,OAAS,qBAEd,EAAK/N,gBAAiB,EACtB,EAAKo1E,WAAaA,EAClB,EAAK6D,mBAAqB,GAC1B,EAAK9D,eAAgB,EACrB,EAAKumR,cAAgB,EAXc,E,qEAchC5lW,GAEH,GADcA,EAAUmP,UAAYnP,EAAUmP,SAAV,MACzB,CACT,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGACEnP,EACA,IAAIuqX,GAAyB,EAAOjrS,IACpC,EACe,IAAfA,EAAmB,WAAa,iBAGlC,sGAAmBt/E,EAAW,IAAIuqX,K,sCAItB,WACdluX,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,c,kCAI1BnuE,GACV,IAAMpb,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,GAClBpb,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAO+sJ,yBAAyBngI,cAAgBnmB,KAElDA,KAAK4mF,mB,yCAGY/wC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,+GAA0DlkF,KAAKmqW,mBAAL,sGAAAnqW,MAAA,KAAAA,KAA0D61C,IAAWouC,GAErI,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,wCAG1D4+W,GAChB,OAAOA,EAAa9mX,QAAO,SAAAsnI,GAAA,OAA0C,IAA3BA,EAAYrrD,gB,gCAG9C/nE,GACJlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC3EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAC1DhnF,KAAK8mF,mBAAqB9mF,KAAK8nF,yBAC/B,mGAAgB5sE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,M,mCAIP,WACLutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAE1F,IAD6B4wI,EAAvBA,8GAAoD5oI,EAAkB,KAAM,MAAM,GAYtFzoF,KAAK8mF,mBAAqB9mF,KAAK8nF,4BAXN,CACzB,IAAMc,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,kBAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,KAChD7oF,KAAK8mF,mBAAqB9mF,KAAK8nF,wBAIjC9nF,KAAK8mG,qB,6CAIL,IAAM4pC,EAAe1wI,KAAKU,YACpBitX,EAAqBj9O,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GAE9F,MAAO,CAAC,CACNk5E,SAAU,aACVI,UAHiBovD,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,iB,gCAOzD//F,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAW4rO,WACpC6rH,EAAU9mS,EAAS8S,OAAOzjE,WAAW6rO,YAEvCl7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAErCH,GAAYjnF,KAAK8mF,mBAAmBryF,QACtCuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC3BA,GAAqBA,EAAkBF,QACzCE,EAAkBF,MAAMO,OAAS2mS,Q,8CAOvC,IAAM5nW,EAAgBnmB,KAAK0mF,mBAAqB1mF,KAAKmmB,cAAgBnmB,KAAKgnF,mBAC1E,GAAI7gE,EAAe,CACjB,IAAM6gK,EAAa7gK,EAAcrT,SAAd,WACbiuE,EAAQ56D,EAAc1G,yBAAyB1hB,MAAM,SAAS,GAAGA,MAAM,SAAS,GAChFgpF,EAAoB5gE,EAAc88D,YAAc+jG,EAAahnL,KAAK6hF,cAAc/1E,MAAK,SAACzI,GAC1F,IAAM4qX,EAAc5qX,EAAQyP,SAAR,WACdyiU,EAAQlyU,EAAQoc,yBAAyB1hB,MAAM,SAAS,GAAGA,MAAM,SAAS,GAChF,OAAOkwX,IAAe,aAAQjnM,EAAYinM,KAAiB5qX,EAAQwY,WAAasK,EAActK,UAAYklE,IAAUw0P,MACjH,GACL,GAAIxuP,EAEF,OADAA,EAAkBjE,SAAW9iF,KAAK8iF,SAC3B,CAACiE,GAGZ,MAAO,O,iCApIUmnS,G,qJCPrB,Q,IACA,OAEA,QACA,SACA,QACA,QACA,Q,uDAEqBhrH,E,YACnB,WAAYpkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK6U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAKm1E,eAAgB,EACrB,EAAKumR,cAAgB,EAGjBzqR,IACF,EAAKwJ,2BAA6B,CAChCmlS,GAAI,GACJC,GAAI,KAGR,EAAKvlS,oBAAsB,GAjBR,E,qEAoBhBxkF,GACH,IAAMwqX,EAAcnuX,KAAKojF,MAAMz/E,EAAW,IAAIu/P,GAC1CirH,GACFjrH,EAAWipG,sBAAsBgiB,K,sCAWnC,IAAMvnO,EAAmB5mJ,KAAKU,YAAYkmJ,iBACtCA,IACFA,EAAiB9jE,SAAW9iF,KAAK8iF,Y,oCAMnC,IADA,uGACK9iF,KAAK4jF,4BAA6B,IAAAlvE,oBAAmB1U,MAAO,CAW/D,IAAMgoF,EAAShoF,KAAKU,YAAYA,YAC1B0pW,EAAqBpqW,KAAK8S,SAAL,UAI3B,GAHKk1E,EAAOoB,2BACVpB,EAAO++D,oBAAsBqjN,GAAsBA,EAAmBjwW,SAAS,eAE7E6F,KAAK2gF,gCAAgC3gF,KAAKU,YAAY+/E,wBAAyB,CACjF,IAAM8mE,EAAmBvnJ,KAAK8S,SAAL,WACnBu3V,EAAmBrqW,KAAKU,YAAYA,YAAY2oF,WACtD,GAAIk+D,EAAkB,CACpB,IAAM+iN,EAAqBD,EAAiB1oR,SAAS36E,QAAO,SAAAigJ,GAC1D,IAAMsjN,EAAoBtjN,EAAkBn0I,SAAlB,WAC1B,OAAOy0I,EAAiBtnJ,MAAK,SAAA25K,GAC3B,OAAO2wL,EAAkBtqW,MAAK,SAAAuqW,GAAA,OAAc5wL,IAAc4wL,WAG9D,GAAIF,EAAmB71W,QAAU61W,EAAmBzsW,OAAM,SAAA4sW,GAAA,OAAUA,EAAO5uV,WAAawuV,EAAiBlkV,cAActK,YAAW,CAChI,IAAI6uV,EAAkBJ,EAAmBx+V,MAAK,SAAA2+V,GAC5C,OAAOA,EAAOpjN,mBAAqBgjN,EAAiBlkV,cAAckhI,qBAC9DijN,EAAmB,GACzBD,EAAiB1jN,0BAA2B,EAC5C0jN,EAAiBlkV,cAAgBukV,IAIvC1qW,KAAK4mF,oB,yCAIU/wC,EAASouC,GAC1B,IAAM+D,EAAShoF,KAAKU,YACdwjF,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,qBAAqBuH,EAAO++D,qBAAsB7iE,GAC7Gp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GACR,IAAM8sE,EAAShoF,KAAKU,YACdquW,EAAoB/uW,KAAKygF,qBAAqBuH,EAAO++D,qBAE3D,OAAI/mJ,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKmmB,cAAcw6D,gCAAgCouR,IAC3H/uW,KAAKouX,uBAAuBrf,IAC5B,mGAAuB7zV,KAGzBlb,KAAKomF,aACLpmF,KAAKouX,uBAAuBrf,IAC5B,mGAAuB7zV,M,6CAGF6zV,GACrB,GAAI/uW,KAAKmmB,gBAAkBnmB,KAAK0mF,mBAAoB,CAClD,IAAM2nS,EAAkCruX,KAAKmmB,cAAcrT,SAAnB,UACpCu7W,IACFtf,EAAkBh6W,KAAK,CACrBmsF,SAAU,YACVI,UAAW+sS,MAERruX,KAAKgnF,oBAAsBhnF,KAAKgnF,mBAAmBpD,0BAClD5jF,KAAKgnF,qBAAuBhnF,KAAKgnF,mBAAmBrG,gCAAgCouR,KACxF/uW,KAAKsuX,yBAAyBvf,O,+CAMbl/C,GAEvB,IACMhnO,GADmB7oF,KAAK2hF,SAAW3hF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgCkvO,MAAkB,IAC3E/jT,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,kBAEnF7mG,KAAKgnF,mBAAqB6B,GAAsB,O,2CAG7Bk+D,GACnB,IAAM7rI,EAASlb,KAAKU,YAAYwa,OAC1B+3M,EAAoB/3M,EAAOsD,MAAM,EAAAixH,eAAeznI,IAChD0oI,EAAe1wI,KAAKU,YAEtB2mJ,EAAmB4rE,EAAkB7pI,uBACrC6pI,EAAkB5rE,mBAClB3W,EAAa2W,mBAEjBA,GAAmB,IAAAt7D,yBAAwBs7D,GAIpB,SAFRnsI,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IACPk7R,kBACqB,IAAhBhoR,EAAO9P,MAAoC,SAArBi8I,GAAoD,SAArBA,IACpFA,EAAmB,QAGrB,IAAI2/B,EAAaisC,EAAkB7pI,uBAC/B6pI,EAAkBjsC,aAClBt2C,EAAas2C,aAEbunM,EAAkB,OAClBt7J,EAAkB7pI,yBAChB6pI,EAAkBnjF,YAAc,EAAA72G,mBAAmBC,cACrDq1V,EAAkB,eACTt7J,EAAkBnjF,YAAc,EAAA72G,mBAAmBE,gBAC5Do1V,EAAkB,iBACTt7J,EAAkBnjF,YAAc,EAAA72G,mBAAmBG,YAC5Dm1V,EAAkB,YACTt7J,EAAkBnjF,YAAc,EAAA72G,mBAAmBI,aAC5Dk1V,EAAkB,cAGtB,IAAM/tS,EAAa,CAAC,CAClBU,SAAU,aACVI,UAAW0lG,GACX,CACA9lG,SAAU,OACVI,UAAW+lE,GACX,CACAnmE,SAAU,gBACVI,UAAWitS,IAEb,IAAKt7J,EAAkB7pI,uBACrB,GAAI29D,EACFvmE,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW,CAAC,oBAET,GAAIovD,EAAa+V,gBAAkB/V,EAAa+V,eAAetgI,cAAe,CACnF,IAAIikV,EAAqB15N,EAAa+V,eAAetgI,cAAcrT,SAA1C,UAErBs3V,GACF5pR,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW8oR,IAKnB,OAAO5pR,I,mCAIP,IAAMwH,EAAShoF,KAAKU,YACdunF,EAAuBjoF,KAAKmmB,cAC5B4oV,EAAoB/uW,KAAKygF,qBAAqBuH,EAAO++D,qBACrDt+D,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAMA,EAAEkrF,0BAA4BlrF,EAAEioF,gCAAgCouR,MAC/G/uW,KAAKimG,uBAAuBxd,IAC/BzoF,KAAKosW,oCAAoCpkR,EAAQS,EAAkB,GAAI,eAEzEzoF,KAAKqsW,0BAA0BrkR,EAAQC,K,6CAKlBQ,GACrB,GAAIzoF,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,SAAU,CACrD,IAAM2yW,EAAaxuX,KAAKmmB,cAActK,SAASld,QAAQ,MAAO,IAAIA,QAAQ,MAAO,IAUjF,GATAqB,KAAKmmB,eAAiBqoW,EAAWr0X,SAAS,eAAiBsuF,EAAiB38E,MAAK,SAAAzI,GAC/E,GAAIA,EAAQwY,SAEV,OADcxY,EAAQwY,SAASld,QAAQ,MAAO,IAAIA,QAAQ,MAAO,IACpDxE,SAASq0X,MAG1BxuX,KAAKgnF,mBAAqByB,EAAiB38E,MAAK,SAACzI,GAC/C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,kBAE/E7mG,KAAKmmB,cACP,OAAO,EAGX,OAAO,I,gCAGC8gE,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAW4sO,WACtCj8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,M,6CAzMd+mS,GACtBA,EAAYr7W,SAAZ,gBACHq7W,EAAYr7W,SAAZ,cAAwC,CAAC,a,iCA9B1BowP,G,gKCTrB,QACA,Q,IACA,O,IACA,MACA,QACA,QACA,S,uDAEqBV,E,YACnB,WAAY1jL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,mBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,8CACnB,EAAK6U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAK07V,cAAgB,EAPF,E,qEAUhB5lW,GACH,sGAAmBA,EAAW,IAAI6+P,K,oDAIlC,IACMx6K,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,kCAI3Bz0E,GACV,IACMqzE,EADuBhoF,KAAKU,YACEA,YAGpC,IAFA,qGAAkBiU,IAEd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAIxD,IAAKgoF,EAAO++D,sBAAuB/+D,EAAOoB,0BAA8BjxF,OAAO2B,SAASwb,KAAKnb,SAAS,eAOtG,GAFA6F,KAAKu5O,+BAEAv5O,KAAK2gF,gCAAgC3gF,KAAKU,YAAY+/E,wBAAyB,CAClF,IAAM8mE,EAAmBvnJ,KAAK8S,SAAL,WACnB27W,EAAkBzuX,KAAK8S,SAAL,UAExB,GAAIy0I,GAAoBknO,EAAiB,CACvC,IAAM9hB,EAAmB3kR,EAAOiS,WAC1By0R,EAAsB/hB,EAAiBhrR,SAAS36E,QAAO,SAAA2nX,GAC3D,IAAMpkB,EAAoBokB,EAAkB77W,SAAlB,WACpB87W,EAAmBD,EAAkB77W,SAAlB,UACrB+7W,EAAmBtkB,GAAqBhjN,EAAiBtnJ,MAAK,SAAA25K,GAChE,OAAO2wL,EAAkBtqW,MAAK,SAAAuqW,GAAA,OAAc5wL,IAAc4wL,QAExDskB,EAAkBF,GAAoBH,EAAgBxuX,MAAK,SAAA8uX,GAC7D,OAAOH,EAAiB3uX,MAAK,SAAA+uX,GAAA,OAAiBD,IAAiBC,QAEjE,OAAOH,GAAoBC,KAE7B,GAAIJ,GAAuBA,EAAoBj6X,OAAQ,CACrD,IAAM4yJ,GAAmB,IAAAt7D,yBAAwB4gR,EAAiBjsW,YAAY2oF,WAAWljE,cAAckhI,kBACjG4nO,EAAmBP,EAAoB1nX,QAAO,SAACkoX,GACnD,IAAMC,EAAYD,EAAmBp8W,SAAnB,MAAuCo8W,EAAmBp8W,SAAS,QACrF,OAAOq8W,GAAaA,EAAUlvX,MAAK,SAAAwsF,GAAA,OAAOA,IAAQ46D,QAGpDslN,EAAiBxmV,cAAgB8oW,EAAiBx6X,OAASw6X,EAAiB,GAAKP,EAAoB,GACrG/hB,EAAiB3lR,oBAAsBioS,EAAiBx6X,OAASw6X,EAAmBP,GAAqB5iX,MAAK,SAACzI,GAC7G,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,kBAIrF,IAAMkwW,EAAmBrqW,KAAKU,YAAYA,YAAY2oF,WACtD,GAAIk+D,EAAkB,CACpB,IAAM+iN,EAAqBD,EAAiB1oR,SAAS36E,QAAO,SAAAigJ,GAC1D,IAAMsjN,EAAoBtjN,EAAkBn0I,SAAlB,WAC1B,OAAOy3V,GAAqBhjN,EAAiBtnJ,MAAK,SAAA25K,GAChD,OAAO2wL,EAAkBtqW,MAAK,SAAAuqW,GAAA,OAAc5wL,IAAc4wL,WAG9D,GAAIF,EAAmB71W,QAAU61W,EAAmBzsW,OAAM,SAAA4sW,GAAA,OAAUA,EAAO5uV,WAAawuV,EAAiBlkV,cAActK,YAAW,CAChI,IAAI6uV,EAAkBJ,EAAmBx+V,MAAK,SAAA2+V,GAC5C,OAAOA,EAAOpjN,mBAAqBgjN,EAAiBlkV,cAAckhI,qBAC9DijN,EAAmB,GACzBD,EAAiB1jN,0BAA2B,EAC5C0jN,EAAiBlkV,cAAgBukV,GAGrC1qW,KAAK4mF,uBApDL,UAAM3iE,UAAS,IAAAiqI,0BAAwB,M,yCAwDxBr4G,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GACvFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMw1H,EAAe1wI,KAAKU,YAE1B,IAAIgwI,EAAatnD,2BAA4BsnD,EAAaqW,oBAK1D,OAAI/mJ,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcy9D,0BACzC5jF,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAI7DzgF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,2CAaiBk0W,GACnB,IAAM1+O,EAAe1wI,KAAKU,YACpBsmL,EAAat2C,EAAas2C,aAC5BqoM,EAAiB,GACfp1R,EAAay2C,EAAaz2C,WAC1Bq1R,EAA0Br1R,EAAcA,EAAW9zE,eAAiB8zE,EAAWjT,mBAAsB,KAC3G,IAAKooS,GAA2BE,EAAyB,CACvD,IAAMb,EAAkBa,EAAwBx8W,SAAxB,UACpB27W,IACFY,EAAiBZ,GAMrB,IAAMjuS,EAAa,CAAC,CAClBU,SAAU,aACVI,UAAW0lG,IAQb,OANKooM,GAA2BC,GAC9B7uS,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW+tS,IAGR7uS,I,mCAGI,WACLiI,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAMA,EAAEkrF,0BAA4BlrF,EAAEioF,gCAAgC,EAAKF,2BACrH8uS,EAA2BvvX,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcrT,SAAnB,UAAtB,wBACtB9S,KAAKmmB,cAAcrT,SAAnB,YACL,KACA08W,EAAkB,KAItB,GAHIxvX,KAAKmmB,gBACPqpW,EAAkB96X,OAAO+2B,OAAO,GAAKzrB,KAAKmmB,kBAEvC,EAAD,8GAA8BsiE,GAAmB,CACnD,IAAIsvK,EAAe,KACnB,GAAIw3H,EAA0B,CAE5B,IAAIE,EAAyB,KACvBz5W,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5C05W,EAAa15W,EAAavhB,QAAUuhB,EAAalK,MAAK,SAAAiK,GAAA,MAAoC,UAArBA,EAAYtf,QACvFg5X,EAAyBD,EAAgB7rX,UAAUkS,gBAC9C25W,EAAgB7rX,UAAUkS,eAAe65W,EAAW1nX,IAEzD,IAAM2nX,EAAelnS,EAAiBzhF,QAAO,SAAC3D,GAC5C,OAAOA,EAAQyP,SAAR,WAAiCzP,EAAQyP,SAAR,UAA8B7S,MAAK,SAACo4F,GAC1E,OAAOk3R,EAAyBp1X,SAASk+F,SAY7C,KATA0/J,EAAe03H,EACXE,EAAa7jX,MAAK,SAAA8jX,GAClB,OAAOA,EAAgBjsX,UAAUkS,gBAC5B+5W,EAAgBjsX,UAAUkS,eAAe65W,EAAW1nX,KACpD4nX,EAAgBjsX,UAAUkS,eAAe65W,EAAW1nX,IAAI/H,MAAK,SAAA4vX,GAC9D,OAAOJ,EAAuBxvX,MAAK,SAAA6vX,GAAA,OAAOA,IAAQD,WAGtDF,EAAa,IACE,CACjB,IAAII,EAAgB,GAqBpB,GApBIR,EAAyBp1X,SAAS,iBACpC41X,gHAA0CtnS,EAAkB,YAAa,YAChE8mS,EAAyBp1X,SAAS,YAC3C41X,gHAA0CtnS,EAAkB,YAAa,iBAChE8mS,EAAyBp1X,SAAS,WAC3C41X,gHAA0CtnS,EAAkB,YAAa,aACtDh0F,SACjBs7X,gHAA0CtnS,EAAkB,YAAa,oBAElE8mS,EAAyBp1X,SAAS,aAC3C41X,gHAA0CtnS,EAAkB,YAAa,WACtDh0F,SACjBs7X,gHAA0CtnS,EAAkB,YAAa,oBAElE8mS,EAAyBp1X,SAAS,sBAC3C41X,gHAA0CtnS,EAAkB,YAAa,WACtDh0F,SACjBs7X,gHAA0CtnS,EAAkB,YAAa,cAGzEsnS,EAAct7X,QAAU+6X,GAEtBE,GAAcF,EAAgB7rX,UAAUkS,eAAgB,CAC1D,IAAM45W,EAAyBD,EAAgB7rX,UAAUkS,eAAe65W,EAAW1nX,IAC/EynX,IACF13H,EAAeg4H,EAAcjkX,MAAK,SAAA8jX,GAChC,OAAOA,EAAgBjsX,UAAUkS,gBAC5B+5W,EAAgBjsX,UAAUkS,eAAe65W,EAAW1nX,KACpD4nX,EAAgBjsX,UAAUkS,eAAe65W,EAAW1nX,IAAI/H,MAAK,SAAA4vX,GAC9D,OAAOJ,EAAuBxvX,MAAK,SAAA6vX,GAAA,OAAOA,IAAQD,aAOzD93H,GAAgBg4H,EAAct7X,SACjCsjQ,EAAeg4H,EAAc,KAInC,IAAMlnS,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAO,IAAA2nF,YAAW3nF,EAAQM,UAAU4M,YAAa,+BAEnDvQ,KAAKmmB,cAAgB4xO,GAAgBtvK,EAAiB,GACtDzoF,KAAKgnF,mBAAqB6B,GAAsB,Q,gCAI1C5B,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWksO,eACtCv7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,iCAzOxBo7K,G,qJCRrB,Q,IACA,OACA,QACA,QACA,QACA,S,uDAEqBW,E,YACnB,WAAYrkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,gDACnB,EAAKE,OAAS,qBACd,EAAK2U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAK07V,cAAgB,EACjBzqR,IACF,EAAKwJ,2BAA6B,CAChCmlS,GAAI,GACJC,GAAI,KAZW,E,qEAiBhB/pX,GACH,IAAMm0C,EAAS93C,KAAKojF,MAAMz/E,EAAW,IAAIw/P,GACrCrrN,GACFqrN,EAAiBgpG,sBAAsBr0T,K,sCAgBzC,IAAMmiD,EAAaj6F,KAAKU,YAAYu5F,WAChCA,IACFA,EAAWnX,SAAW9iF,KAAK8iF,Y,qCAK7B,wG,yCAgBiBjtC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMw1H,EAAe1wI,KAAKU,YAE1B,GAAKgwI,EAAaz2C,YAAey2C,EAAaz2C,WAAW9zE,iBACtDuqH,EAAaz2C,WAAW9zE,cAAcrT,WAAY49H,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,cACsB,SAAtE49H,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,aAA+D,IAKpE,OAAI9S,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,6CAcF,IAAMA,EAASlb,KAAKU,YAAYwa,OAC1B+3M,EAAoB/3M,EAAOsD,MAAM,EAAAixH,eAAeznI,IAChD0oI,EAAe1wI,KAAKU,YACpB0lG,EAAYlrF,EAAOqmE,+BAErBylG,EAAaisC,EAAkB7pI,uBAC/B6pI,EAAkBjsC,aAClBt2C,EAAas2C,aAEbunM,EAAkB,OAClBt7J,EAAkB7pI,yBAChB6pI,EAAkBnjF,YAAc,EAAA72G,mBAAmBC,cACrDq1V,EAAkB,eACTt7J,EAAkBnjF,YAAc,EAAA72G,mBAAmBE,gBAC5Do1V,EAAkB,iBACTt7J,EAAkBnjF,YAAc,EAAA72G,mBAAmBG,YAC5Dm1V,EAAkB,YACTt7J,EAAkBnjF,YAAc,EAAA72G,mBAAmBI,aAC5Dk1V,EAAkB,cAItB,IAAM/tS,EAAa,CAAC,CAClBU,SAAU,aACVI,UAAW0lG,GACX,CACA9lG,SAAU,gBACVI,UAAWitS,IAGb,GAAInoR,IAAc,EAAAruE,mBAAmBiuE,MAAO,CAC1C,IAAIqhD,EAAmB4rE,EAAkB7pI,uBACrC6pI,EAAkB5rE,mBAClB3W,EAAa2W,mBAEjBA,GAAmB,IAAAt7D,yBAAwBs7D,GAIpB,SAFRnsI,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IACPk7R,kBACqB,IAAhBhoR,EAAO9P,MAAoC,SAArBi8I,GAAoD,SAArBA,IACpFA,EAAmB,QAGrB7mE,EAAWzrF,KAAK,CACdmsF,SAAU,OACVI,UAAW+lE,IAIf,GAAI3W,EAAaz2C,YAAcy2C,EAAaz2C,WAAW9zE,cAAe,CACpE,IAAM6pW,EAAgBt/O,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,WAChBm9W,EAAkBv/O,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,aAEpBk9W,GACFxvS,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0uS,IAGXC,GACFzvS,EAAWzrF,KAAK,CACdmsF,SAAU,eACVI,UAAW2uS,IAmBjB,OAdKv/O,EAAatnD,2BACZsnD,EAAaqW,oBACfvmE,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW,cAEJovD,EAAa+V,gBAAkB/V,EAAa+V,eAAetgI,eACpEq6D,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAWovD,EAAa+V,eAAetgI,cAAcrT,SAA1C,aAKV0tE,I,mCAGI,WACLwH,EAAShoF,KAAKU,YACdunF,EAAuBjoF,KAAKmmB,cAC5BsiE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,4BACrF,EAAD,8GAA8BgI,IAChCzoF,KAAKosW,oCAAoCpkR,EAAQS,EAAkB,aAErEzoF,KAAKqsW,0BAA0BrkR,EAAQC,K,gCAG/BhB,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAW6sO,iBACtCl8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,M,6CAlKdtvC,GAC3B,IAAMw0T,EAAax0T,EAAOhlC,SAAP,cACbk0K,EAAalvI,EAAOhlC,SAAP,WACdw5V,IACHx0T,EAAOhlC,SAAP,cAAmC,CAAC,SAEjCk0K,IACHlvI,EAAOhlC,SAAP,WAAgC,CAAC,a,iCAhClBqwP,G,yJCPrB,OACA,QACA,QACA,QACA,Q,uDAEqBM,E,YACnB,WAAY3kL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKghJ,gBAAiB,EACtB,EAAK/2H,SAAU,EACf,EAAK1U,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAK/vO,WAAa,gBAClB,EAAKoiQ,cAAgB,GAVF,E,qEAahB5lW,GACH,sGAAmBA,EAAW,IAAI8/P,K,yEAO1Bx8K,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWmtO,YACpCsqH,EAAU9mS,EAAS8S,OAAOzjE,WAAWotO,kBACvCz8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAErCH,GAAYjnF,KAAKmmG,gBACnBnmG,KAAKmmG,cAActf,MAAMO,OAAS2mS,K,yCAInBl4U,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAGR,GAAwC,SADnBlb,KAAKU,YAAY0mJ,uBACrBC,mBAAjB,CAKA,IAAM7mE,EAAaxgF,KAAKygF,yBACnBzgF,KAAKmmG,eAAkBnmG,KAAKmmG,gBAAkBnmG,KAAKmmG,cAAcxlB,gCAAgCH,KACpGxgF,KAAK8mG,mBAGP,IAAMV,EAAYlrF,EAAOqmE,+BAIzB,OAH0BvhF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcxiB,WAAa3D,KAAKmmB,cAAcyO,YAAc50B,KAAKmmB,cAAcxiB,UAAUixB,WAAW30B,MAAK,SAAA6lG,GAC5J,OAAOA,EAAQ5qF,SAAW,EAAA6c,mBAAmBC,KAAO8tE,EAAQ5qF,SAAWkrF,OAE/CpmG,KAAKmmB,cAAcw6D,gCAAgCH,IACrExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI5DhnF,KAAKomF,cAHH,mGAAuBlrE,IAfvB,uG,6CAuBF,IAAM3hB,EAASyG,KAAKU,YACdwa,EAAS3hB,EAAO2hB,OAEtB,OADkBA,EAAOqmE,iCACP,EAAAxpD,mBAAmB2iE,MAM5B,CAAC,CACNxZ,SAAU,SACVI,UAAW,UACV,CACDJ,SAAU,OACVI,WAVmB/nF,EAAO6vF,yBACxBluE,EAAOsD,MAAM,EAAAixH,eAAeznI,IAC5BkT,EAAOsD,MAAM,EAAAu7E,OAAO/xF,KACQg/K,eAW3B,K,mCAGI,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,GAAI,IAAI,GAAO,CACjE,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aACpBlN,EAAQM,UAAU4M,YAAYs2F,WAAW,kEAE1Che,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,qBAEnF7mG,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,KAChD7oF,KAAK8mG,wB,iCAtGU28J,G,yJCNrB,OACA,QACA,QACA,Q,uDAEqBE,E,YACnB,WAAY7kL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKghJ,gBAAiB,EACtB,EAAK/2H,SAAU,EACf,EAAK1U,SAAW,kBAChB,EAAKH,YAAc,6CACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKqyB,cAAgB,GATF,E,qEAYhB5lW,GACH,sGAAmBA,EAAW,IAAIggQ,K,yEAO1B18K,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWqtO,cACtC18K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,K,yCAIxBvxC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAGR,GAAwC,SADnBlb,KAAKU,YAAY0mJ,uBACrBC,mBAAjB,CAKA,IAAMjhD,EAAYlrF,EAAOqmE,+BAKzB,OAJ0BvhF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcxiB,UAAUixB,WAAW30B,MAAK,SAAA6lG,GAC3F,OAAOA,EAAQ5qF,SAAW,EAAA6c,mBAAmBC,KAAO8tE,EAAQ5qF,SAAWkrF,OAG/CpmG,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC1EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI5DhnF,KAAKomF,cAHH,mGAAuBlrE,IAXvB,uG,6CAmBF,IAAMw1H,EAAe1wI,KAAKU,YAI1B,GAHegwI,EAAax1H,OACHqmE,iCAEP,EAAAxpD,mBAAmB2iE,MAAO,CAC1C,IAAMu4H,EAAoBjzN,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAixH,eAAeznI,IAIvE,MAAO,CAAC,CACNk5E,SAAU,OACVI,UALe2xI,EAAkB7pI,uBAC/B6pI,EAAkBjsC,aAClBt2C,EAAas2C,eAOnB,MAAO,K,mCAGI,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,yBAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,U,iCAxFjC86K,G,yJCLrB,OACA,QACA,QACA,QACA,QACA,Q,IACA,MACA,S,uDAEqB4oG,E,YACnB,WAAYztR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,0CACnB,EAAK8zS,cAAgB,kBACrB,EAAK5zS,OAAS,cACd,EAAK/N,gBAAiB,EACtB,EAAKqnP,gBAAiB,EACtB,EAAK/tJ,WAAa,QAClB,EAAKoiQ,cAAgB,EAVF,E,qEAahB5lW,GACH,sGAAmBA,EAAW,IAAI4oW,K,oDAIlC,IACMvkR,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,kCAI3Bz0E,GAEV,IADA,qGAAkBA,IACd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAGA,IACMgoF,EADShoF,KAAKU,YACEA,YACtB,GAAMsnF,EAAO++D,sBAAuB/+D,EAAOoB,0BAA8BjxF,OAAO2B,SAASwb,KAAKnb,SAAS,cAAvG,CAKA6F,KAAKu5O,8BAELv5O,KAAKU,YAAYw0P,gBAAiB,EAClC,IAAMvtI,EAAY3/B,EAAO2/B,UACzB,GAAIA,IAAcA,EAAUutI,eAAgB,CAC1C,IAAMs3G,EAA6B7kP,EAAUjoG,qBACvC+sV,EAAmBzsW,KAAKyf,yBACxBitV,EAAgBF,EAA2B1gW,MAAK,SAAAolJ,GAAA,OAAMA,EAAG11I,KAAKiE,2BAA6BgtV,KAC7FC,KACF,2FAAkB73W,KAAK63W,EAAclxV,MACrCmsG,EAAUutI,gBAAiB,SAd7B,UAAMjxO,UAAS,IAAAiqI,0BAAwB,O,yCAmBxBr4G,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAIlb,KAAKU,YAAY0oF,yBAArB,CAKA,GAAIppF,KAAKU,YAAYylJ,iBAAmB,EAAApsH,eAAeE,KAAM,CAC3D,IAAM0yU,EAAmB3sW,KAAKU,YAAYu5F,WAC1C,GAAI0yQ,GAAoBA,EAAiBxmV,cAAe,CACtD,IAAMymV,EAA4BD,EAAiBxmV,cAAcrT,SAA/B,UAClC,IAAK85V,GAA8BA,IAA8BA,EAA0BzyW,SAAS,aAElG,YADA,sGAMN,IAAMqmF,EAAaxgF,KAAKygF,uBAIxB,QAHKzgF,KAAKmmG,eAAkBnmG,KAAKmmG,gBAAkBnmG,KAAKmmG,cAAcxlB,gCAAgCH,KACpGxgF,KAAK8mG,mBAEH9mG,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACtExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAC1D,mGAAuB9rE,IAEzBlb,KAAKomF,cACL,mGAAuBlrE,KAxBrB,uG,6CA4BF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYsmL,iB,mCAInB,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,oCAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,KAChD7oF,KAAK8mG,sB,gCAIC7f,GACR,GAAIjnF,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,OAAQ,CAC3D,IAAMstD,EAASH,EAAS8S,OAAOzjE,WAAWisN,MACpCwrI,EAAU9mS,EAAS8S,OAAOzjE,WAAWurO,YACvC56K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAEtCH,GAAYjnF,KAAKmmG,gBAClBnmG,KAAKmmG,cAActf,MAAMO,OAAS2mS,Q,iCA5HrBxhB,G,yJCTrB,OACA,QACA,QACA,QACA,QACA,SACA,QACA,Q,IACA,MACA,S,uDAEqBvpG,E,YACnB,WAAYlkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,uCACnB,EAAK8zS,cAAgB,YACrB,EAAK5zS,OAAS,YACd,EAAK/N,gBAAiB,EACtB,EAAKqnP,gBAAiB,EACtB,EAAK/tJ,WAAa,MAClB,EAAKoiQ,cAAgB,EAVF,E,8FAcnB,IACMvhR,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,kCAI3Bz0E,GAEV,IADA,qGAAkBA,IACd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAGA,IACMgoF,EADShoF,KAAKU,YACEA,YACtB,GAAMsnF,EAAO++D,sBAAuB/+D,EAAOoB,0BAA8BjxF,OAAO2B,SAASwb,KAAKnb,SAAS,cAAvG,CAKA6F,KAAKu5O,8BAELv5O,KAAKU,YAAYw0P,gBAAiB,EAClC,IAAM3uG,EAAcv+D,EAAOu+D,YAC3B,GAAIA,IAAgBA,EAAY2uG,eAAgB,CAC9C,IAAM23G,EAA+BtmN,EAAY7mI,qBAC3CotV,EAAuB9sW,KAAKyf,yBAC5BstV,EAAkBF,EAA6B/gW,MAAK,SAAAkhW,GACxD,OAAOA,EAAaxxV,KAAKiE,2BAA6BqtV,KAEpDC,KACF,2FAAkBl4W,KAAKk4W,EAAgBvxV,MACvC+qI,EAAY2uG,gBAAiB,SAhB/B,UAAMjxO,UAAS,IAAAiqI,0BAAwB,O,2BAqBtCvqJ,GAaH,OAZIA,EAAUmP,WACTlL,MAAMC,QAAQlE,EAAUmP,SAAS,SAC9BnP,EAAUmP,SAAS,QAAQ3Y,SAAS,UAAYwJ,EAAUmP,SAAS,QAAQ3Y,SAAS,QACtFwJ,EAAUmP,SAAS,QAAQ/d,KAAK,QACvB4O,EAAUmP,SAAS,QAAQ3Y,SAAS,UAAYwJ,EAAUmP,SAAS,QAAQ3Y,SAAS,SAC7FwJ,EAAUmP,SAAS,QAAQ/d,KAAK,SAExB4O,EAAUmP,SAAS,SAAWlL,MAAMC,QAAQlE,EAAUmP,SAAV,aAA6E,SAAxCnP,EAAUmP,SAAV,WAAiC,IACzHlL,MAAMC,QAAQlE,EAAUixB,aAAejxB,EAAUixB,WAAW,IAAyC,OAAnCjxB,EAAUixB,WAAW,GAAG1Z,SAC7FvX,EAAUmP,SAAS,QAAU,CAAC,OAAQ,WAG1C,+FAAmBnP,EAAW,IAAIq/P,K,yCAGjBntN,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAIlb,KAAKU,YAAY0oF,0BAA6BppF,KAAKU,YAAYqmJ,oBAAnE,CAKA,GAAI/mJ,KAAKU,YAAYylJ,iBAAmB,EAAApsH,eAAeE,KAAM,CAC3D,IAAM0yU,EAAmB3sW,KAAKU,YAAYu5F,WAC1C,GAAI0yQ,GAAoBA,EAAiBxmV,cAAe,CACtD,IAAMymV,EAA4BD,EAAiBxmV,cAAcrT,SAA/B,UAClC,IAAK85V,GAA8BA,IAA8BA,EAA0BzyW,SAAS,aAElG,YADA,sGAKN,IAAMqmF,EAAaxgF,KAAKygF,uBAIxB,QAHKzgF,KAAKmmG,eAAkBnmG,KAAKmmG,gBAAkBnmG,KAAKmmG,cAAcxlB,gCAAgCH,KACpGxgF,KAAK8mG,mBAEH9mG,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACtExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAC1D,mGAAuB9rE,IAEzBlb,KAAKomF,cACL,mGAAuBlrE,KAvBrB,uG,6CA2BF,IAAMA,EAASlb,KAAKU,YAAYwa,OAC1B8rK,EAAahnL,KAAKU,YAAYsmL,aAChC3/B,GAAmB,IAAAt7D,yBAAwB/rF,KAAKU,YAAY2mJ,oBAQhE,MAJuB,SAFRnsI,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IACPk7R,kBACqB,IAAhBhoR,EAAO9P,MAAoC,SAArBi8I,GAAoD,SAArBA,IACpFA,EAAmB,QAGd,CAAC,CACNnmE,SAAU,aACVI,UAAW0lG,GACV,CACD9lG,SAAU,OACVI,UAAW+lE,M,mCAIF,WACL5+D,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,oCAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,KAChD7oF,KAAK8mG,sB,gCAIC7f,GACR,GAAIjnF,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,OAAQ,CAC3D,IAAMstD,EAASH,EAAS8S,OAAOzjE,WAAW0sO,UACpC+qH,EAAU9mS,EAAS8S,OAAOzjE,WAAW2sO,gBACvCh8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAEtCH,GAAYjnF,KAAKmmG,gBAClBnmG,KAAKmmG,cAActf,MAAMO,OAAS2mS,Q,iCAtJrB/qH,G,4MCTApB,E,YACnB,WAAY9iL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,0CACnB,EAAK8zS,cAAgB,eACrB,EAAKj/R,SAAU,EACf,EAAKg5U,cAAgB,GAPF,E,qEAUhB5lW,GACH,sGAAmBA,EAAW,IAAIi+P,K,gCAG1B1mP,GACR,IAAMw1H,EAAe1wI,KAAKU,YAC1B,GAAKgwI,EAAaqW,sBAAuBrW,EAAatnD,yBAItD,OAAIppF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,IALvB,uG,6CAaF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAHiBthF,KAAKU,YAAYsmL,iB,mCAOzB,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1FzgF,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqByB,EAAiB,K,gCAGnCxB,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWsrO,YACtC36K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,GAnD7C,M,4BAEqBw6K,G,qJCFrB,QACA,Q,IACA,OACA,Q,uDAEqBW,E,YACnB,WAAYzjL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKoV,YAAc,yCACnB,EAAKG,SAAW,cAChB,EAAK0tV,cAAgB,EACrB,EAAKvmR,eAAgB,EACjBlE,IACF,EAAKwJ,2BAA6B,CAChCmlS,GAAI,GACJC,GAAI,KAVW,E,qEAehB/pX,GACH,sGAAmBA,EAAW,IAAI4+P,K,gCAG1BrnP,GAER,IAAM4zI,EAAiB9uJ,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAixH,eAAeznI,IAEpE,KAAIhI,KAAKU,YAAY0oF,0BAA4B0lE,GAAkBA,EAAelf,WAC7Ekf,EAAehf,YAAcgf,EAAelf,UAAU0pG,aAI3D,OAAIt5O,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,IALvB,uG,yCAWe26B,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,6CAI1E,IAAMwhI,EAAe1wI,KAAKU,YACpBitX,EAAqBj9O,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GACxFg/K,EAAat2C,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,aACjE,MAAO,CAAC,CACN9lG,SAAU,SACVI,UAAWovD,EAAatnD,yBACpB,CAAC,OACDsnD,EAAa0mI,aAAe,WAAa,UAC5C,CACDl2L,SAAU,aACVI,UAAW0lG,M,mCAIF,WACLh/F,EAAShoF,KAAKU,YACdunF,EAAuBjoF,KAAKmmB,cAC5BsiE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,4BACrF,EAAD,8GAA8BgI,IAChCzoF,KAAKosW,oCAAoCpkR,EAAQS,EAAkB,aAErEzoF,KAAKqsW,0BAA0BrkR,EAAQC,K,gCAG/BhB,GACR,IAAMguC,EAAaj1H,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,QAAU95B,KAAKU,YAAY0oF,yBAC3F,aACA,YACAnC,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS8S,OAAOk7B,GAAYstI,YAE7Dt7K,GAAYjnF,KAAKgnF,qBAClBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS8S,OAAOk7B,GAAYstI,gB,iCA5EpDA,G,6JCLrB,QAEA,SACA,QACA,Q,uDAEqB9f,G,gBAGnB,cAAc,iGACN,GAAM,EAAO,EAAAj/O,aAAa02B,SADpB,OAEZ,EAAK5zB,OAAS,gBACd,EAAK/C,SAAW,EAAAC,aAAa02B,OAC7B,EAAKre,SAAW,gBAJJ,E,qEAOTlY,GAAW,WACV6X,EAAO,KACX,OAAQ7X,EAAU6M,WAChB,IAAK,gBACHgL,EAAO,IAAI00W,EAGf,QAAI10W,IACFA,EAAK9a,UAAY,kBAAM,GAClBV,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzB30H,EAAK40H,KAAKzsI,IACH,K,gCAKDuX,GACR,IAAM+kG,EAAS,GAKf,OAJIjgH,KAAKmmB,gBACPnmB,KAAKmmB,cAAcsoF,UAAUvzF,GAC7Blb,KAAKmmB,cAAc0gE,MAAM4pD,MAAMxwB,IAE1BA,I,mCAIPjgH,KAAKmmB,cAAgBnmB,KAAK2hF,SAAS,K,gCAG3BsF,GACJA,GAAYjnF,KAAKmmB,eACnBnmB,KAAKmmB,cAAcwqH,UAAU1pD,O,aA1C1Bj/E,GAAK,gB,aADOy6O,E,IAiDfytI,E,YACJ,WAAYpxS,IAAS,gGACbA,IADa,OAGnB,EAAKjjE,SAAW,qBAHG,E,qEAMhBlY,IACH,qFAAY9O,KAAKmL,KAAKU,YAAaiD,EAAW3D,MAAM,K,gCAG5Ckb,GAER,IAAImrF,GAAY,aAAKrmG,KAAK2D,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKumG,oBAAoBvmG,MAAOkb,OAAQA,EAAOqmE,iCACrG8kB,IACHA,GAAa,aAAKrmG,KAAK2D,UAAUixB,WAAY,CAAC0xE,SAAUtmG,KAAKumG,oBAAoBvmG,SAEnFA,KAAK6mF,MAAM2f,cAAcH,K,mCAIzBrmG,KAAKmmB,cAAgBnmB,KAAK2hF,SAAS,K,gCAG3BsF,GACLA,IACDjnF,KAAK6mF,MAAMO,OAASH,EAASs6K,2B,iLCjFnC,OACA,QACA,QACA,QACA,Q,uDAEqBgC,E,YACnB,WAAYzkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKghJ,gBAAiB,EACtB,EAAK/2H,SAAU,EACf,EAAK1U,SAAW,YAChB,EAAKH,YAAc,sCACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAK/vO,WAAa,YAClB,EAAKgmC,4BAA8B,KAVhB,E,qEAahBxpI,GACH,sGAAmBA,EAAW,IAAI4/P,K,2EAOxB5uP,EAAc6kG,GAAW,YACnC,qGAAkB7kG,GAElB,IAAM+3H,EAAa1sI,KAAKU,YAAYA,YAKpC,GAHegsI,EAAWxxH,OACDqmE,iCAEP,EAAAxpD,mBAAmBiuE,OACjB,YAAdwT,GAAyC,cAAdA,EAA2B,CACxD,IAAM88I,EAAiB5pH,EAAWypH,SAAWzpH,EAAWypH,QAAQx0K,SAAS71E,MAAK,SAAAzI,GAC5E,OAAOA,EAAQwY,WAAa,EAAKA,YAE/By6O,GACFA,EAAe7vJ,YAAY9xF,EAAc,WAK/C3U,KAAK4mF,mB,gCAGGK,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWitO,SACpCwqH,EAAU9mS,EAAS8S,OAAOzjE,WAAWktO,eACvCv8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAErCH,GAAYjnF,KAAKmmG,gBACnBnmG,KAAKmmG,cAActf,MAAMO,OAAS2mS,K,2CAIjBl4U,GACnB,IAAMquC,GAA4BA,EAA5BA,oHAA+DruC,GACrE,+IAA4D71C,KAAKygF,uBAAwByD,K,yCAGxEruC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GACR,IAAM8sE,EAAShoF,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAEpD,GAAwC,SADnBggF,EAAOo/D,uBACXC,qBAAmCr/D,EAAOoB,2BACpDpB,EAAOqB,WAAWvG,UAUzB,QALK9iF,KAAKmmG,eACJnmG,KAAKmmG,gBAAkBnmG,KAAKmmG,cAAcxlB,gCAAgC3gF,KAAKygF,0BACnFzgF,KAAK8mG,mBAGH9mG,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC3EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI5DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IAXvB,uG,6CAmBF,IAAM3hB,EAASyG,KAAKU,YACdwa,EAAS3hB,EAAO2hB,OAEtB,OADkBA,EAAOqmE,iCACP,EAAAxpD,mBAAmB2iE,MAM5B,CAAC,CACNxZ,SAAU,SACVI,UAAW,UACV,CACDJ,SAAU,OACVI,WAVmB/nF,EAAO6vF,yBACxBluE,EAAOsD,MAAM,EAAAixH,eAAeznI,IAC5BkT,EAAOsD,MAAM,EAAAu7E,OAAO/xF,KACQg/K,eAW3B,K,iCAGE9rK,GAAQ,WACjB,GAAKA,EAAL,CAGA,IAAMkrF,EAAYlrF,EAAOqmE,+BACnBkH,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,KAAM,MAAM,GAAO,CACrE,IAAI+uL,EAAgB,GACpB,OAAQpxK,GACN,KAAK,EAAAruE,mBAAmB2iE,MACtB88K,EAAgB,yBAChB,MACF,KAAK,EAAAz/O,mBAAmBiuE,MACtBwxK,EAAgB,0DAChB,MACF,QACEx/Q,QAAQC,MAAM,gCAAiCmuG,GAGnD,IAAMxd,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aACvBlN,EAAQM,UAAU4M,YAAYs2F,WAAW2wK,MAEvC3uL,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,kBAEnF7mG,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,KAChD7oF,KAAK8mG,uB,2EA9IUy8J,G,4MCJA4sH,E,YACnB,WAAYrxS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAK6mI,4BAA8B,KACnC,EAAKtxH,SAAW,SAChB,EAAKH,YAAc,mCACnB,EAAKylN,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIwsX,K,gCAG1BlpS,GACLA,GAAYjnF,KAAKmmB,gBAClBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASk6K,OACvCnhQ,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASk6K,a,GArBxD,M,4BAEqBgvH,G,4MCAAC,E,YACnB,WAAYtxS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAK6mI,4BAA8B,KACnC,EAAKtxH,SAAW,SAChB,EAAKH,YAAc,mCACnB,EAAKylN,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIysX,K,gCAG1BnpS,GACLA,GAAYjnF,KAAKmmB,gBAClBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASm6K,OACvCphQ,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASm6K,a,GArBxD,M,4BAEqBgvH,G,4MCAAC,E,YACnB,WAAYvxS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAK6mI,4BAA8B,KACnC,EAAKtxH,SAAW,SAChB,EAAKH,YAAc,mCACnB,EAAKylN,iBAAkB,EACvB,EAAKtzN,gBAAiB,EACtB,EAAK2hT,cAAgB,QARF,E,qEAWhB7rT,GACH,GAAIA,EAAU4M,YAAYpW,SAAS,cAAe,CAChD,IAAMisG,EAAYpmG,KAAKU,YAAYwa,OAAOqmE,+BAI1C,GAHA59E,EAAUixB,WAAajxB,EAAUixB,YAAcjxB,EAAUixB,WAAW5tB,QAAO,SAAA8+F,GACzE,MAA2B,QAAnBA,EAAQ5qF,QAAsB4qF,EAAQ5qF,SAAWkrF,MAEtDziG,EAAUixB,aAAejxB,EAAUixB,WAAWngC,OACjD,OAAO,EAGX,sGAAmBkP,EAAW,IAAI0sX,K,gCAG1BppS,GACLA,GAAYjnF,KAAKmmB,gBAClBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASo6K,OACvCrhQ,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASo6K,a,GA/BxD,M,4BAEqBgvH,G,qJCFrB,QACA,QACA,QACA,QACA,S,uDAGqBC,E,YAEnB,WAAYxxS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,oBACd,EAAKuV,SAAW,oBAChB,EAAKH,YAAc,8CACnB,EAAK27P,SAAW,qBAChB,EAAKlwK,WAAa,SAClB,EAAKvrF,OAAS,OAPK,E,qEAUhBjY,GACH,sGAAmBA,EAAW,IAAI2sX,K,4CAIlC,OAAOtwX,KAAKygF,yB,0CAIZ,IACM2lB,EADSpmG,KAAKkb,OACKqmE,+BACnBkH,EAAmBzoF,KAAKy3P,uBAE1B+f,EAAgB,GACpB,OAAQpxK,GACN,KAAK,EAAAruE,mBAAmB2iE,MACtB88K,EAAgB,SAChB,MACF,KAAK,EAAAz/O,mBAAmBiuE,MACtBwxK,EAAgB,gCAMpB,OAHyB/uL,EAAiB38E,MAAK,SAACzI,GAC9C,OAAO,IAAA8nF,WAAU9nF,EAAQM,UAAU4M,YAAainQ,OAEvB/uL,EAAiB,K,6CAK5C,IAAMikD,EAAa1sI,KAAKU,YAClBwa,EAASwxH,EAAWxxH,OACpBkrF,EAAYlrF,EAAOqmE,+BAEnBosS,EAAqBjhP,EAAWtjD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GAGtFw4E,EAAa,CAAC,CAClBU,SAAU,aACVI,UAJiBorD,EAAWxxH,OAAOsD,MAAMmvW,GAAoB3mM,eAO/D,GAAI5gF,IAAc,EAAAruE,mBAAmB2iE,MAAO,CAC1C,IAAIwoM,EAAiBhoR,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBAC7C1iN,EAAWzrF,KAAK,CACdmsF,SAAU,iBACVI,UAAW4hN,IAIf,OAAO1iN,M,KAhEX,Q,mBAEqB8vS,G,qJCPrB,QACA,QACA,SACA,QACA,Q,uDAGqBC,E,YAEnB,WAAYzxS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,mBACd,EAAKuV,SAAW,mBAChB,EAAKH,YAAc,6CACnB,EAAK27P,SAAW,oBAChB,EAAKlwK,WAAa,eAClB,EAAKqpR,oBAAsB,OAC3B,EAAK50W,OAAS,OARK,E,qEAWhBjY,GACH,sGAAmBA,EAAW,IAAI4sX,K,6CAIlC,IAAMh3X,EAASyG,KAAKU,YACdwa,EAAS3hB,EAAO2hB,OAChBkrF,EAAYlrF,EAAOqmE,+BAEnBy0K,EAAez8P,EAAO6vF,yBACxBluE,EAAOsD,MAAM,EAAAixH,eAAeznI,IAC5BkT,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IAElBg/K,EAAagvE,EAAahvE,aAC1B3/B,EAAmB2uG,EAAa3uG,mBAEhCopO,EAA8B,SAAfzpM,GAAwC,SAAfA,EAAyB,SAAWA,EAC9Ek8G,EAAiBhoR,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBAI7C,OAFAA,EAAqC,SAAnBA,GAAkD,SAArB77I,EAA+B,OAAS67I,EAEnF98L,IAAc,EAAAruE,mBAAmB2iE,MAE5B,CAAC,CACNxZ,SAAU,SACVI,UAAW0lG,GACV,CACD9lG,SAAU,QACVI,UANoC,SAArB+lE,EAA+B,QAAU,SAUrD,CAAC,CACNnmE,SAAU,SACVI,UAAWmvS,GACV,CACDvvS,SAAU,iBACVI,UAAW4hN,M,4CAMb,IAAMhoR,EAASlb,KAAKU,YAAYwa,OAC1BslE,EAAaxgF,KAAKygF,uBAClBwyI,EAAoB/3M,EAAOsD,MAAM,EAAAixH,eAAeznI,IAChD0oI,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IACnCo+F,EAAYlrF,EAAOqmE,+BAErB8lE,EAAmB4rE,EAAkB7pI,uBACrC6pI,EAAkB5rE,mBAClB3W,EAAa2W,mBAIjB,GAFAA,GAAmB,IAAAt7D,yBAAwBs7D,IAEtC4rE,EAAkB7pI,wBAA+C,SAArBi+D,EAC/C,GAAI3W,EAAaqW,oBACfvmE,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW,CAAC,oBAET,GAAIovD,EAAa+V,gBAAkB/V,EAAa+V,eAAetgI,eAAiBigF,IAAc,EAAAruE,mBAAmB2iE,MAAO,CAC7H,IAAI0vQ,EAAqB15N,EAAa+V,eAAetgI,cAAcrT,SAA1C,UAEzB0tE,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW8oR,IAKjB,OAAO5pR,I,yCAIP,IAAMumB,EAAc/mG,KAAKU,YAErBwjF,EAA4B,GAChC,GAAI6iB,EAAYC,SAAWD,EAAYC,QAAQrlB,UAAYolB,EAAYC,QAAQrlB,SAASltF,OAAQ,CAC9F,IACM2xG,EADSW,EAAY7rF,OACFqmE,+BACnB4lB,EAAcf,IAAc,EAAAruE,mBAAmB2iE,MAAS16F,KAAKwwX,oBAAsBxwX,KAAKmnG,WAOxFF,EALmBF,EAAYC,QAAQrlB,SAAS36E,QAAO,SAACkgG,GAC5D,OAAOt/F,MAAMC,QAAQq/F,EAAOvjG,UAAUixB,aAAesyE,EAAOvjG,UAAUixB,WAAW30B,MAAK,SAAA6lG,GACpF,OAAOA,EAAQ5qF,SAAW,EAAA6c,mBAAmBC,KAAO8tE,EAAQ5qF,SAAWkrF,QAG/Bp/F,QAAO,SAAAm/F,GACjD,OAAOA,EAActqF,UAAYsrF,GAAchB,EAActqF,WAAasrF,KAE5EjjB,EAA4BlkF,KAAKskF,+CAA+CtkF,KAAKygF,uBAAwBwmB,GAE/GjnG,KAAKmmG,cAAgBjiB,EAA0BzvF,OAASyvF,EAA0B,GAAK,S,KA5G3F,Q,mBAEqBqsS,G,qJCPrB,QACA,S,uDAEqBG,E,YACnB,WAAY5xS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,wCACnB,EAAKE,OAAS,eACd,EAAKuxH,4BAA8B,KACnC,EAAK+nH,gBAAiB,EACtB,EAAK3kO,SAAU,EACf,EAAKyyD,eAAgB,EACrB,EAAKm+I,iBAAkB,EACvB,EAAKtzN,gBAAiB,EACtB,EAAKi1E,UAAW,EAZG,E,qEAehBn/E,GACH,sGAAmBA,EAAW,IAAI+sX,K,yCAGjB76U,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAC7G,6HAA0C,iBAAkBjkF,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBAAkBh/M,K,oCAIvH,IACMqqB,EADavuG,KAAKU,YAAYA,YACJwa,OAAOsD,MAAM,EAAAqsH,OAAO7iI,IAChDumG,EAAa+1C,kBAAoB/1C,EAAa+1C,iBAAiBthE,gBAAkBurB,EAAa+1C,iBAAiB59D,qBACjH6nB,EAAa+1C,iBAAiBxhE,UAAW,IAE3C,wG,iCAmDS5nE,GACT,IAAMgoR,EAAiBljS,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBAC1Dz6M,EAAmBzoF,KAAK2hF,UAAY3hF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEosF,wBAAwB,iBAAkBo+M,OAAoB,GACpI,KAAK,EAAD,8GAA8Bz6M,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,kBAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAWutE,EAAiB,GACtFzoF,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,Q,gCAItEA,GACR,IAAMgoR,EAAiBljS,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBAChE,OAAIljS,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAc2+D,wBAAwB,iBAAkBo+M,IAClFljS,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,K,gCAOjB+rE,GACJA,GAAYjnF,KAAKmmB,gBAEnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASq6K,oBAEzCr6K,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASq6K,wB,iCAlHjCovH,G,mJCHrB,QAEA,SACA,Q,IACA,O,IACA,Q,uDAEqB1nB,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAxlW,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WAER2C,GAAS,aAAU3C,EAAU6M,WAC/Bo8H,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAO/E,OANKsmI,IACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ3C,EAAU6M,WAC/DxQ,KAAK+e,aAAahqB,KAAK63I,IAEzBA,EAAYlsI,UAAY,kBAAM,GAC9BksI,EAAYwD,KAAKzsI,IACV,I,uCAIP,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,Q,2CAIzC,OAAO,I,6DA3BFgI,GAAK,Q,aADOghW,G,qJCPrB,Q,IACA,OACA,QACA,Q,uDAEqBvmG,E,YACnB,WAAY3jL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,oBACd,EAAKuV,SAAW,oBAChB,EAAKH,YAAc,oDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAI8+P,K,yCASjB5sN,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMw1H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC1D,IAAI0oI,IAAgBA,EAAatnD,yBAAjC,CAKA,IAAM5I,EAAaxgF,KAAKygF,uBACxB,OAAKzgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACxExgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,oBAIhFhnF,KAAKomF,cAHH,mGAAuBlrE,IAPvB,uG,6CAeF,IACMw1H,EADY1wI,KAAKU,YACQwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC7C2lX,EAAqBj9O,GAAgBA,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GAE9G,MAAO,CAAC,CACNk5E,SAAU,aACVI,UAHiBovD,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,iB,mCAOtD,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,GAAI,IAAI,GAAO,CACjE,IAAMI,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,qBAEnF7mG,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqB6B,GAAsB,Q,gCAI1C5B,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWmsO,gBACtCx7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,iCAxExBq7K,G,qJCLrB,Q,IACA,OACA,QACA,Q,uDAEqBE,E,YACnB,WAAY7jL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,4CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAIg/P,K,gCAG1B17K,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWqsO,SACtC17K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,K,yCAIxBvxC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMw1H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IACpDirN,EAAoB/3M,EAAOsD,MAAM,EAAAixH,eAAeznI,IAEtD,KAAI0oI,GAAgBuiF,GAAqBviF,EAAatnD,0BAA4D,gBAAhC6pI,EAAkBnjF,WAApG,CAKA,IAAMtvD,EAAaxgF,KAAKygF,uBACxB,OAAKzgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACxExgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,oBAIhFhnF,KAAKomF,cAHH,mGAAuBlrE,IAPvB,uG,6CAeF,IACMw1H,EADY1wI,KAAKU,YACQwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC7C2lX,EAAqBj9O,GAAgBA,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GACxGg/K,EAAat2C,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,aACjE,MAAO,CAAC,CACN9lG,SAAU,SACVI,UAAWovD,EAAatnD,yBACpB,CAAC,OACDsnD,EAAa0mI,aAAe,WAAa,UAC5C,CACDl2L,SAAU,aACVI,UAAW0lG,M,mCAIF,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,GAAI,IAAI,GAAO,CACjE,IAAMI,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,qBAEnF7mG,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqB6B,GAAsB,U,iCAzEjC85K,G,qJCLrB,Q,IACA,OACA,QACA,Q,uDAEqBC,E,YACnB,WAAY9jL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAKH,YAAc,qDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAIi/P,K,oCAIR5iQ,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,yCAGiBuvC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAGR,GAD0Blb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,OAA3C,CAKA,IAAMk6E,EAAaxgF,KAAKygF,uBACxB,OAAKzgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACxExgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,oBAIhFhnF,KAAKomF,cAHH,mGAAuBlrE,IAPvB,uG,6CAeF,IACMw1H,EADY1wI,KAAKU,YACQwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC7C2lX,EAAqBj9O,GAAgBA,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GAE9G,MAAO,CAAC,CACNk5E,SAAU,aACVI,UAHiBovD,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,iB,mCAOtD,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,GAAI,IAAI,GAAO,CACjE,IAAMI,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,qBAEnF7mG,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqB6B,GAAsB,Q,gCAI1C5B,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWssO,iBACtC37K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,iCAxExBw7K,G,qJCLrB,Q,IACA,OACA,QACA,Q,uDAEqBF,E,YACnB,WAAY5jL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKoV,YAAc,gDACnB,EAAKG,SAAW,gBAChB,EAAK0U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAI++P,K,oCAIR1iQ,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,yCAGiBuvC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAGR,GAD0Blb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,OAA3C,CAKA,IAAMk6E,EAAaxgF,KAAKygF,uBACxB,OAAKzgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACxExgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,oBAIhFhnF,KAAKomF,cAHH,mGAAuBlrE,IAPvB,uG,6CAeF,IACMw1H,EADY1wI,KAAKU,YACQwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC7C2lX,EAAqBj9O,GAAgBA,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GAE9G,MAAO,CAAC,CACNk5E,SAAU,aACVI,UAHiBovD,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,iB,mCAOtD,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,GAAI,IAAI,GAAO,CACjE,IAAMI,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,qBAEnF7mG,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqB6B,GAAsB,Q,gCAI1C5B,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWosO,aACtCz7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,iCAxExBs7K,G,qJCLrB,Q,IACA,OACA,QACA,Q,uDAEqBL,E,YACnB,WAAYvjL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,sBACd,EAAKuV,SAAW,sBAChB,EAAKH,YAAc,sDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAI0+P,K,oCAIRriQ,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,gCAGQ2gF,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAW+rO,kBACtCp7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,K,yCAIxBvxC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACnFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAGR,GAD0Blb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,OAA3C,CAKA,IAAMk6E,EAAaxgF,KAAKygF,uBACxB,OAAKzgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACxExgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,oBAIhFhnF,KAAKomF,cAHH,mGAAuBlrE,IAPvB,uG,6CAeF,IACMw1H,EADY1wI,KAAKU,YACQwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC7C2lX,EAAqBj9O,GAAgBA,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GAE9G,MAAO,CAAC,CACNk5E,SAAU,aACVI,UAHiBovD,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,iB,mCAOtD,WACLv+F,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,GAAI,IAAI,GAAO,CACjE,IAAMI,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,qBAEnF7mG,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqB6B,GAAsB,U,iCAxEjCw5K,G,yJCLrB,QAEA,Q,IACA,OACA,QACA,Q,uDAEqBQ,E,YACnB,WAAY/jL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,WACd,EAAKuV,SAAW,WAChB,EAAKH,YAAc,2CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAIk/P,K,yCAGjBhtN,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACvGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GAC5G,OAAO,aAAOG,GAAmB,SAAChhF,GAAD,OAAaA,EAAQM,UAAUqE,MAC7DF,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,6CAgBpD,IACMwhI,EADY1wI,KAAKU,YACQwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC7C2lX,EAAqBj9O,GAAgBA,EAAatnD,yBAA2B,EAAAqmD,eAAeznI,GAAK,EAAA+xF,OAAO/xF,GAE9G,MAAO,CAAC,CACNk5E,SAAU,aACVI,UAHiBovD,EAAax1H,OAAOsD,MAAMmvW,GAAoB3mM,iB,gCAOzD//F,GACR,IAAMG,EAASH,EAAS8S,OAAOzjE,WAAWusO,QACtC57K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,iCAlDxBy7K,G,8HCPrB,MACA,O,IACA,O,IACA,OAEA,Q,IAKA,Q,IACA,QACA,S,IACA,QACA,Q,IACA,Q,IACA,QACA,QAKA,QACA,S,uDAEM8tH,E,yOAEJz2H,gBAAkB,SAACt5J,GACjB,IAAM1lF,GAAS,IAAAC,oBAIf,GAFA,EAAKmwF,MAAMqxH,gBAAgB/7H,GAEvBxnG,SAASuzN,aAAc,CAEzB,IAAMztM,EAAahE,EAAOwmE,uBAEpBg0K,EAAc,UAAE7P,sBAAsB3mO,EAAY9lB,SAASuzN,cAIjE,GAAI+oC,EAAa,CACf,KAAqB,kBAAhBA,GACgB,kBAAhBA,GACgB,mBAAhBA,GACgB,iBAAhBA,GACgB,qBAAhBA,GACgB,kBAAhBA,GACgB,qBAAhBA,GACC,EAAK3uP,MAAMwwN,gBACf,CACA,GAAI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,SAEX,CACL,IAAIsL,EAAkB,GAClB24J,GAAgB,EACpB,OAAQl7H,GACN,IAAK,gBACL,IAAK,eACL,IAAK,mBAIHz9B,EAHoB,EAAKlxN,MAAMuxF,sBAAsBxsF,MAAK,SAAA6T,GACxD,MAAwB,WAAjBA,EAAQ2C,QAEa9G,KAAK4tE,yBAA2B,mBAAqB,SAC/D,qBAAhBssK,IACFk7H,GAAgB,GAElB,MAEF,IAAK,gBACH34J,EAAkB,SAClB,MACF,IAAK,iBACHA,EAAkB,UAClB,MACF,IAAK,mBACHA,EAAkB,wBAClB,MACF,IAAK,gBACHA,EAAkB,gBAGtB,EAAK44J,gBAAgB54J,EAAiB24J,EAAehwR,GAEvD,OAAO,EAC6B,IAA3B,EAAK75F,MAAMoxN,aACpB,EAAK76C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAK0L,sBACL,EAAK5wH,aACL/Y,YAAW,YACT,aAAEt1F,UAAUupG,GAAG,QAAS,EAAKm7E,qBAC5B,MAIP43E,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,QAC9D,EAAK6+N,0BAA0Bs9B,M,EAQzCssE,8BAAgC,WAC9B,IAAMh6O,EAAS,EAAKjhF,MAAMuxF,sBAAsBxsF,MAAK,SAAAm2T,GAAA,MAA4B,WAAjBA,EAAQ3/S,QAClEq6S,EAAoB30O,EAAOxsE,KAAKwrK,aAChC39F,EAAarB,GAAUA,EAAOxsE,KAAK6tE,WACzC,OAAQA,GAAcA,EAAW1H,SAASltF,OAAU40F,EAAW1H,SAAS36E,QAAO,SAACigJ,GAC9E,OAAOA,EAAkBprI,SAAS1hB,SAASwiU,MACxC,CAAC,I,EAGRk0D,gBAAkB,SAAC54J,EAAiB24J,EAAehwR,GACjD,IAAM08N,EAAgB,EAAKv2T,MAAMuxF,sBAAsBxsF,MAAK,SAAA6T,GAC1D,OAAOA,EAAQ2C,OAAS21M,KAEtBwkG,EAAqB,GAEvBA,EADsB,0BAApBxkG,EACmB,EAAK+pG,gCACG,kBAApB/pG,EACY,CAAC,EAAG,EAAG,GAEPqlG,EAAc9hT,KAAKiB,WAElB,WAApBw7M,GAAoD,qBAApBA,IAClCwkG,EAAqBA,EAAmBz1T,QAAO,SAAAw2T,GAC7C,OAAOozD,EAAgBpzD,EAAWhiT,KAAK8rI,gBAA6C,cAA3Bk2K,EAAWhiT,KAAKlV,QAA0Bk3T,EAAWhiT,KAAK8rI,mBAG/F,WAApB2wE,IACFwkG,EAAqBA,EAAmBz1T,QAAO,SAAAw2T,GAC7C,MAAkC,kBAA3BA,EAAWhiT,KAAKlV,QAAyD,sBAA3Bk3T,EAAWhiT,KAAKlV,WAIzE,IAAM7F,GAAW,aAAEtI,QAAQwH,QAAU,IAEjCmyC,EAAOrxC,EAAW,MAAQmgG,EAAM7mF,QAAU,GAC1C7U,EAAMzE,EAAW,MAAQmgG,EAAMzmF,QAAU,GACzC03B,EAAQ,OAENwwR,EAAkB5F,EAAmBhoU,OAAS,EAAI,IAAM,IAE1D6tU,EAAmB,IAUvB,GATI7F,EAAmBhoU,OAAS,EAC9B6tU,EAAmB,IACV7F,EAAmBhoU,OAAS,IACrC6tU,EAAmB,MAEhB7hU,GAAaqxC,EAAO35C,OAAOwqD,WAAa0/Q,IAC3CvwR,EAAO,OACPD,EAAQ,IAELpxC,GAAayE,EAAM/M,OAAO+xD,YAAco4Q,EAAmB,CAC9D,IAAIC,EAAiB,GACjB9F,EAAmBhoU,OAAS,EAC9B8tU,EAAiB,IACR9F,EAAmBhoU,OAAS,IACrC8tU,EAAiB,KAEnBr9T,GAAYq9T,EAEd,EAAKjlJ,SAAS,CACZ28E,oBAAqB22H,EACrB34J,kBACAtL,aAAcvzN,SAASuzN,aACvBqtC,oBAAqB,CACnBloN,OACAD,QACA3sC,U,EAKNgiJ,0BAA4B,SAACj2E,GAAgD,IAA1Ct8D,EAA0C,wDAApBe,EAAoB,aACrEwF,GAAS,IAAAC,oBACf,EAAKu/M,0BAA0BzpJ,GAE/B,IAAM6/S,EAAmB,CAAC,cAAe,qBAAsB,kBAY/D,GAXIA,EAAiB32X,SAAS82E,EAAKz1D,KAAKlV,SACtC,EAAKkzN,gBAEH,EAAKzyN,MAAMgxN,sBAAiE,qBAAzC,EAAKhxN,MAAMgxN,qBAAqBz1M,MAClE2uD,EAAKz1D,KAAK89N,aAAgB,EAAKvyO,MAAMgxN,qBAAqBv8M,KAAKs0H,YAAc7+D,EAAKz1D,KAAK89N,aAC1F,EAAK9f,gBAMHvoJ,EAAKzvB,kBAAmB,CAC1B,IAAMw1M,EAAyC,kBAArB/lL,EAAKz1D,KAAKlV,OAA6B,OAAS,SAC1E,EAAKywP,0BAA0B9lL,EAAM+lL,QAChC,GAAyB,gBAArB/lL,EAAKz1D,KAAKlV,QAA4B,EAAKS,MAAMgxN,qBAAqBv8M,KAAKitG,QACjF,EAAK1hH,MAAMgxN,qBAAqBv8M,KAAKitG,OAAO/hC,oBAC5C,EAAK3/E,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAe,CAE9D,IAAM4qW,EAAyB9/S,EAAKz1D,KAAK1I,SAAV,SAA+B,GAE1D,EAAK/L,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAc2+D,wBAAwB,WAAYisS,GAChG,EAAKx6H,UAAUtlL,EAAMt8D,GAErB,EAAKoiP,0BAA0B9lL,EAAM,eAElC,GAAyB,WAArBA,EAAKz1D,KAAKlV,OAAqB,CACxC,IAAM4gH,EAAShsG,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAC7Bk7R,EAAiBh8K,EAAOg8K,iBACP,SAAnBA,GAAgD,SAAnBA,EAC/B,EAAKhsC,oBAAoB,SAAUjmL,EAAMt8D,GAEzC,EAAK4hP,UAAUtlL,EAAMt8D,OAEO,mBAArBs8D,EAAKz1D,KAAKlV,QAcnB,EAAKiwP,UAAUtlL,EAAMt8D,GACjB,EAAK22F,MAAMx5F,qBACT,EAAKw5F,MAAMx5F,mBAAmBonP,iBAAoB,EAAK5tJ,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,aAElHU,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,QAGf,yBAArBy1D,EAAKz1D,KAAKlV,QACdoP,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,MAE3C,EAAK+6O,UAAUtlL,EAAMt8D,IAErB,EAAK4hP,UAAUtlL,EAAMt8D,GAGnB,EAAK5N,MAAMgxN,sBACb,EAAKzsH,MAAMipH,a,gGAIN,WACDr5M,GAAS,IAAAC,oBACTrJ,EAAqB9R,KAAKsrG,MAAMx5F,mBAChC2rK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KACvF4iK,EAAcljK,EAAOo9E,wBAEvBy6B,GAAY,EACZhqC,EAAe,GACnB,GAAIj3E,IACEA,EAAmBonP,iBAAoBpnP,EAAmBqnP,eAAiB//P,SAASC,SAAS2b,YAC9FhV,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAUg/H,GAAiBA,EAAc6qL,cAAgB7qL,EAAczrF,oBAAqB,CACtI,GAA6B,yBAAzByrF,EAAcv3K,OAAmC,CACnD,IAAM+9E,EAAoBw5F,EAAcn+J,qBAClCsxW,EAAyBhxX,KAAKsrG,MAAMt1F,aAAalK,MAAK,SAAAmK,GAAA,MAA+B,gBAAtBA,EAAMxf,KAAK0mB,UAC1E8zW,EAA4BjxX,KAAKsrG,MAAMt1F,aAAalK,MAAK,SAAAmK,GAAA,MAA+B,mBAAtBA,EAAMxf,KAAK0mB,UAC7E+zW,EAASF,GAA0BA,EAAuBhpX,GAC1DmpX,EAAQF,GAA6BA,EAA0BjpX,GACrE+qH,EAAY1uC,EAAkBpkF,MAAK,SAAA0f,GACjC,OAAQuxW,IAAWvxW,EAAQnE,KAAK7X,UAAUkS,eAAeq7W,IAAWvxW,EAAQnE,KAAK7X,UAAUuZ,kBAAkBg0W,KACvGC,IAAUxxW,EAAQnE,KAAK7X,UAAUkS,eAAes7W,IAAUxxW,EAAQnE,KAAK7X,UAAUuZ,kBAAkBi0W,YAG3Gp+P,GAAY,EAEdhqC,EAAe/oF,KAAK+G,MAAM/G,KAAKw7N,wBAAwB39C,EAAcv3K,SAEvE,IAAM8qX,EAAiBpxX,KAAKk4P,0BAA0BnlI,GAEhD4nG,EAAcl9C,GAAoC,UAAtBA,EAAWn3K,QAAsBm3K,EAAWrrF,qBACxEyrF,IAAkB79K,KAAKqzN,WAAWx1C,IAA2C,gBAAzBA,EAAcv3K,QACxC,gCAAzBu3K,EAAcv3K,SAA6Cu3K,EAAczrF,oBAM1EkqI,EAJsBxqN,IACzBA,EAAmBy5K,2BACdz5K,EAAmB05K,8BAAgCpyL,SAASC,SAAS2b,WAGzE,CAAC,EAAA0pC,YAAYG,OAAQ,EAAAH,YAAYE,OAAQ,EAAAF,YAAYI,aACrD,CAAC,EAAAJ,YAAYG,OAAQ,EAAAH,YAAYI,aAErC,OACE,+BAAK8rC,WAAW,aAAW,cAAe,CAAC,yBAA0B5qF,KAAK+G,MAAMwwN,kBAC9E,+BACE3sI,WAAW,aAAW,MAAO,CAAC,cAAe5qF,KAAK+G,MAAMwwN,gBAAiB,QAAUv3N,KAAK+G,MAAMoxN,cAC9F,+BAAKvtI,UAAU,cAAco1D,IAAK,SAACkkI,GAAD,OAAU,EAAK1nD,WAAa0nD,IAC5D,+BAAKt5L,UAAU,wBACb,+BAAKA,UAAU,6BACZ5qF,KAAK6wD,QAAQkiE,EAAWhqC,EAAc4xI,EAAYl9C,EAAYI,IAEjE,kCAAQjzF,UAAU,6BAA6BkyF,QAAS98K,KAAKy4N,mBAE9Dz4N,KAAKq8N,sBAAsBC,GAC3BvpG,EAAY,KACX,+BAAKnoC,UAAU,sBAAsBymS,eAAgBrxX,KAAKy6N,yBACxD,mCAAkBr8C,YAAaA,EACbM,SAAS,EACThuE,OAAQ1wG,KAAK+G,MAAMwwN,eACnB95C,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,0BAW/Cj9K,KAAK+G,MAAMkxN,gBACR,mCAAaA,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBr0H,sBAAuBt4F,KAAK+G,MAAMuxF,sBAClC2hK,oBAAqBj6P,KAAK+G,MAAMkzP,oBAChCD,oBAAqBh6P,KAAK+G,MAAMizP,oBAChC3iC,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,iBACvBl+B,yBAA0Bt6N,KAAKsrG,MAAMgvH,2BAElD,MAEL82J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,U,cAsBNuT,EAAqB,CACzB91C,8CACA31H,8BACAV,oDACAu2H,oDACAJ,kDACA10H,oEACAi1H,4CACA8V,sDACAF,iD,WAGa,IAAA3kD,UA5BS,SAACxzG,GAAU,MACgBA,EAAMwc,UAAhDM,EAD0B,EAC1BA,uBAAwB4U,EADE,EACFA,eADE,EAE4B1xB,EAAMyvO,cAA5Dn3E,EAF0B,EAE1BA,uBAAwBF,EAFE,EAEFA,2BAE/B,MAAO,CACLkvE,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzChS,yBACA4U,iBACA0mI,6BACAE,yBACA3jJ,iBAAkB3U,EAAM4U,YAAYD,oBAgBAqjL,EAAzB,CAA6CqgM,I,8HCzX5D,O,OACA,O,IACA,MACA,OAEA,Q,IACA,O,IAEA,QACYz+K,E,wJAAZ,O,IACA,QACA,QACA,S,IACA,O,IACA,O,uDAEMo/K,G,6OAoBJtuJ,cAAgB,WACd,EAAKhgB,e,EAUPuuK,kBAAoB,WAAM,MACuF,EAAKjmR,MAA7G9vF,EADiB,EACjBA,KAAMmiK,EADW,EACXA,eAAgBm+C,EADL,EACKA,eAAgBC,EADrB,EACqBA,0BAA2BvgF,EADhD,EACgDA,uBAAwBx3I,EADxE,EACwEA,YAChG,GAAIwX,EAAKjY,WAAa,EAAAC,aAAa02B,OACjC,OAAO,+BAAK0wD,UAAU,gBAAgBv2E,MAAO,CAACy3E,gBAAiBA,QAAO,IAAA/nF,uBAAsByX,EAAK9X,cAAeM,GAAlE,OACzC,GAAI+3N,GAAuE,gBAA1CA,EAA0BvgN,KAAKlV,QACvC,eAA3Bk1I,EACH,OAAO,+BAAK5wD,UAAU,4CAExB,IAAMnuE,GAAW,IAAA0vK,oBAAmB3wK,GACpC,OACE,8BAAIovE,UAAW,kBAAqBpvE,EAAK+jN,WAAW9qO,OAAmC,GAA1B,0BAC1DgoB,EAAS3U,KAAI,SAAC0pX,EAAKC,GAIlB,OACE,8BAAI7mS,UAAW,wBACZmxI,GAA8BA,EAA0Bz5M,OAASkvW,EAAIlvW,KAAQ,gCAAkC,KAC/G,UAAOzhB,aAAe2wX,EAAIh2W,KAAKsnE,SAAW,kCAAoC,KAC9E,UAAOjiF,aAAe2wX,EAAIh2W,KAAKwnE,cAAgB,uCAAyC,IAEvFu7O,YAAa,kBAAMziG,EAAe01J,IAClCh6X,IAAKg6X,EAAIlvW,KACTw/Q,aAAY2vF,EACZC,YAAWF,EAAIlvW,KACfw6J,QAAS,kBAAMa,EAAe6zM,MAC/B,IAAA11W,qBAAoB01W,EAAIh2W,KAAM,EAAK8vF,MAAM7wF,KAAM,EAAK6wF,MAAMnzF,sB,iHA3C7CymK,GACpBA,EAAU66C,oBACZz5N,KAAKgjN,gB,2CASP,aAAE7qN,QAAQwqG,GAAG,UAAY8yB,iBAAkBz1H,KAAKgjO,iB,8CAGhD,aAAE7qO,QAAQ8gO,IAAI,UAAYxjG,iBAAkBz1H,KAAKgjO,iB,+BAqC1C,aAE0DhjO,KAAKsrG,MAA/DswH,EAFA,EAEAA,YAAa33I,EAFb,EAEaA,WAAY84H,EAFzB,EAEyBA,wBAAyBtiM,EAFlD,EAEkDA,KAEzD,OACE,+BAAKmwE,UAAU,iCACb,+BAAKA,UAAU,aACb,+BAAKA,UAAU,iBACb,+BAAKA,UAAU,uBACb,iCAAOA,UAAW,gBACf5qF,KAAKsrG,MAAMrnB,WAAa,yBAA2B,KACnDA,GAAcA,EAAWxvF,OAAS,GAAK,4BAA8B,IAEjEyC,MAAO+sF,EACP6xI,SAAU/Y,EACVzrE,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,iCACrCA,GAAG,gBACTi8E,EAAa,kCAAQ2G,UAAW,wBACXkyF,QAAS,kBAAMigC,EAAwB,CAACrmM,OAAO,CAACxf,MAAO,SAAW,KACxF,mCAAkB8qR,QAAQ,cAAc12C,SAAU,SAACk7C,GAAD,OAAO,EAAKl7K,MAAMyxG,wBAAwB,CAACrmM,OAAQ,CAACxf,MAAOsvR,MAAMp7Q,KAAK,OAAOlG,IAAI,OAAO4sC,KAAK,UAEjJ,+BAAK84C,UAAU,uBACb,kCAAQA,UAAU,8BAA8BkyF,QAAS,kBAAM,EAAKxxE,MAAMt7E,wBACxE,4CAAkBhoB,GAAG,6BACpBhI,KAAKsrG,MAAMhtF,gBAAgB7pB,OAC1B,gCAAMm2F,UAAU,iCAAiC5qF,KAAKsrG,MAAMhtF,gBAAgB7pB,QAAiB,QAKrG,+BAAKm2F,UAAU,kBACb,gCAAMA,UAAU,yBAAyBkyF,QAAS8+C,GAChD,4CAAkB5zN,GAAG,+BAGxBhI,KAAKuxX,qBAER,mCACEvpX,GAAG,UACHi8E,WAAYjkF,KAAKsrG,MAAMrnB,WACvB84H,wBAAyB/8M,KAAKsrG,MAAMyxG,wBACpC7+B,UAAWl+K,KAAKsrG,MAAMywH,0BACtB7+C,WAAYl9K,KAAKsrG,MAAM9vF,Y,kBAzGxB0mI,UAAY,CACjB1mI,KAAM,UAAU7jB,OAChBikO,YAAa,UAAU78C,KAAK9lE,WAC5B4iH,eAAgB,UAAU98C,KAAK9lE,WAC/B8jG,wBAAyB,UAAUh+B,KAAK9lE,WACxCh1B,WAAY,UAAUzhD,OACtBm7I,eAAgB,UAAUoB,KAAK9lE,WAC/B6iH,eAAgB,UAAU/8C,KAAK9lE,WAC/B8iH,0BAA2B,UAAUpkO,OACrC8hO,mBAAoB,UAAUr3E,M,cAuHnB,IAAA2F,aACb,IAAAj8C,UAjBsB,SAACxzG,GAAU,IAC1B2oT,EAAmB3oT,EAAM0zG,UAAzBi1M,gBACP,MAAO,CACLzlK,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9Cl9H,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCta,YAAa1L,EAAMgR,YAAYtF,YAC/BmU,eAAgB7f,EAAMqN,gBACtBs7S,sBAGuB,SAACh9R,GAC1B,MAAO,CACL+L,oBAAqB,kBAAM/L,EAASiuL,EAAQliL,oBAAoB,gBAKlE,CAA6CshW,K,8HCnJ/C,O,OACA,O,IACA,M,IACA,OACA,O,IAEA,QACA,Q,IACA,O,uDAEMK,G,gBAMJ,WAAYrmR,IAAO,gGACXA,IADW,SAOnBsmR,mBAAqB,WACnB,UAAUzwV,eAAe,kBAAoB,EAAKp6B,MAAM8qX,cAAgB,OAAS,SACjF,EAAKv0M,SAAS,CAACu0M,eAAgB,EAAK9qX,MAAM8qX,gBAAgB,kBAAM,EAAK9qX,MAAM8qX,gBAAiB,aAAE,EAAKC,iBAAiB1qN,YATnG,EAYnB2qN,uBAAyB,WACnB,EAAKzmR,MAAM3qF,YAAc,MAAO,IAAAxc,qBAClChM,OAAOoxX,SAAS,EAAG,GACnB76R,YAAW,WACTv2F,OAAOoxX,SAAS,EAAG,KAClB,GACH76R,YAAW,WACTv2F,OAAOoxX,SAAS,EAAG,KAClB,OAlBL,EAAKxiX,MAAQ,CACX8qX,eAAe,GAHA,E,yEAwBV,WACAp3W,EAAQza,KAAKsrG,MAAb7wF,KACP,OACE,+BAAKmwE,UAAW,kDACXkyF,QAAS,kBAAM,EAAK80M,uBACvB,4CAAkB5pX,GAAI,sCACtB,+BACE4iF,UAAW,wBAA0B5qF,KAAK+G,MAAM8qX,cAAgB,iCAAkC,IAClG/0M,QAAS,SAAC3mL,GAAD,OAAOA,EAAE20F,oBAClB,iCAAO1/E,KAAK,OAAO40I,IAAK,SAACkkI,GAAD,OAAU,EAAK4tG,gBAAkB5tG,GAClDt5L,UAAU,8BACV0mD,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,sCACrC9Q,MAAO8I,KAAKsrG,MAAMrnB,WAClBy7I,QAAS1/N,KAAK+xX,uBACdj8J,SAAU91N,KAAKsrG,MAAMyxG,wBACrBjgC,QAAS,SAAC3mL,GAAD,OAAOA,EAAE20F,mBAClB9iF,GAAG,kBAEV,mCAAkBg6Q,QAAQ,gBACR12C,SAAU,SAACk7C,GAAD,OAAO,EAAKl7K,MAAMyxG,wBAAwB,CAACrmM,OAAQ,CAACxf,MAAOsvR,MACrEp7Q,KAAK,OACL+4Q,UAAU,qBACVj/Q,IAAI,OACJ4sC,KAAK,e,sBApDxBowG,UAAY,CACjBj+D,WAAY,UAAUzhD,OAAOy2E,WAC7B8jG,wBAAyB,UAAUh+B,KAAK9lE,Y,cAmE7B,IAAA8uC,aACb,IAAAj8C,UAVsB,SAACxzG,GACvB,MAAO,CACLqoB,YAAaroB,EAAMgR,YAAYqX,eAIR,GAIzB,CAA6CgxW,K,wJCjF/C,M,IACA,S,IACA,O,uDAEqBK,E,yOACnBvrR,YAAc,SAACtwG,GACbA,EAAE20F,kBACF30F,EAAE40F,iBACF,IAAIvzF,EAAM,EAAK8zG,MAAMy4K,UAChB,EAAKz4K,MAAMk5K,KAAO,EAAKl5K,MAAMk4K,aAAe,EAAKl4K,MAAMi5K,YAC1D/sR,EAAM,EAAK8zG,MAAMi5K,WAEnB,UAAUpjP,eAAe,oBAEzB,EAAKmqE,MAAM83K,aAAa5rR,I,gGAIxB,IAAIm8H,GAAU,EACV3zH,KAAKsrG,MAAMk4K,cACRxjR,KAAKsrG,MAAMi5K,YACd5wJ,GAAU,IAId,IAAIn8H,EAAMwI,KAAKsrG,MAAMy4K,SACrB,OAAQvsR,GACN,IAAK,YACL,IAAK,KACL,IAAK,KACHA,EAAM,GACN,MACF,QACMwI,KAAKsrG,MAAMk4K,cACTxjR,KAAKsrG,MAAMi5K,UACb/sR,EAAMwI,KAAKsrG,MAAMi5K,UACRvkR,KAAKsrG,MAAMlgG,OAAS,UAAQ+4I,MAAM8tO,cAC3Cz6X,EAAMA,EAAIub,gBAMlB,IAAI63E,EAAY,UAAQA,UAAU5qF,KAAKsrG,MAAMlgG,MAa7C,OAZIpL,KAAKsrG,MAAMlgG,OAAS,UAAQ+4I,MAAM+tO,SAC/Bv+P,EAEM3zH,KAAKsrG,MAAMk4K,cACpB54L,GAAa,0BAFbA,GAAa,iCAKa,cAAxB5qF,KAAKsrG,MAAMy4K,WACbn5L,GAAa,4BAIT5qF,KAAKsrG,MAAMlgG,MACjB,KAAK,UAAQ+4I,MAAMguO,QACnB,KAAK,UAAQhuO,MAAMiuO,iBAInB,KAAK,UAAQjuO,MAAM8tO,YACjB,OAAQ,+BAAKrnS,UAAWA,EAAWkyF,QAAS98K,KAAKymG,aAAcjvG,GACjE,QACE,IAAIs6D,EAAM,KAIV,OAHI9xD,KAAKsrG,MAAM58C,QACboD,EAAO,+BAAKoiJ,IAAI,GAAGn1M,IAAKiB,KAAKsrG,MAAM58C,SAE7B,+BAAKk8B,UAAWA,EAAWkyF,QAAS98K,KAAKymG,aAAa,kCAAKzmG,KAAKsrG,MAAMi5K,WAAe,kCAAK/sR,GAAUs6D,Q,GAjE3E,UAAMugU,e,UAA1BL,G,wFCJN,CACb7tO,MAAO,CACL+tO,OAAQ,SACRC,QAAS,UACTC,iBAAkB,mBAClBE,UAAW,YACXC,SAAU,WACVC,SAAU,WACVC,WAAY,aACZR,YAAa,eAMfrnS,UAAW,SAAUx/E,GACnB,OAAQA,GACN,KAAKpL,KAAKmkJ,MAAMguO,QACd,MAAO,iBACT,KAAKnyX,KAAKmkJ,MAAMiuO,iBACd,MAAO,0BACT,KAAKpyX,KAAKmkJ,MAAMmuO,UACd,MAAO,yDACT,KAAKtyX,KAAKmkJ,MAAM+tO,OACd,MAAO,gBACT,KAAKlyX,KAAKmkJ,MAAMouO,SACd,MAAO,0CACT,KAAKvyX,KAAKmkJ,MAAMquO,SACd,MAAO,0CACT,KAAKxyX,KAAKmkJ,MAAMsuO,WACd,MAAO,gDACT,KAAKzyX,KAAKmkJ,MAAM8tO,YACd,MAAO,kC,8HChCf,O,OACA,O,IACA,MACA,O,IAEA,OACA,Q,IACA,Q,IACA,S,IACA,O,IACA,Q,KACA,QACA,M,EACA,SACA,Q,IACA,OACA,Q,uDAEMS,G,gBA4BJ,WAAYpnR,IAAO,gGACXA,IADW,SAyBnBy3G,aAAe,WACb,EAAKzlC,SAAS,CACZq1M,YAAY,IACX,WACD,EAAKr1M,SAAS,CACZq1M,YAAY,QA9BC,EAmCnBC,gBAAkB,WAChB,IAAM11M,EAAa,EAAK5xE,MAAM4xE,WAC9B,OAAKA,EAcE,EAAK21M,iBAZR,8BAAIjoS,UAAW,oCAAqC,EAAK0gB,MAAMmvC,oBAC5DyiC,EAAa,yBAA2B,KAAO,EAAK5xE,MAAMs0H,eAAiB,oCAAsC,KACjH,EAAKkzJ,gBAzCK,EAsDnBA,YAAc,WACZ,IAAM53W,GAAS,IAAAC,oBADG,EAE6C,EAAKmwF,MAA7DrnB,EAFW,EAEXA,WAAYi5F,EAFD,EAECA,WAAY5+J,EAFb,EAEaA,gBAAiBta,EAF9B,EAE8BA,YAahD,OAZckX,EAAOo9E,sBAAsB4kF,EAAY5+J,EAAiB2lE,GACrEj9E,QAAO,SAAAiqE,GACN,GAAI,UAAO5zE,0BACT,OAAO,EAET,GAAI4zE,EAAKz1D,KAAKjY,WAAa,EAAAC,aAAa02B,OACtC,OAAOhf,EAAOo9E,sBAAsBrnB,GAAMx8E,OAE1C,IAAMgoB,EAAWw0D,EAAKz1D,KAAKiB,WAC3B,OAAOA,EAAShoB,QAAUgoB,EAASxc,MAAK,SAAAyc,GAAA,OAAWxB,EAAO67F,kBAAkBr6F,SAGrE5U,KAAI,SAAAmpE,GACf,IAAM58D,EAAQ,CACZy3E,wBAAwB,IAAA/nF,uBAAsBktE,EAAKz1D,KAAK9X,cAAeM,GAAvE,KAKF,OAHIitE,EAAKz1D,KAAK02J,oBACZ79J,EAAMoqG,eAAiBxtC,EAAKz1D,KAAK02J,mBAGjC,8BAAItnF,UAAU,wBAAwBpzF,IAAKy5E,EAAK3uD,KAAMw6J,QAAS,WAC7D,UAAU37I,eAAe,gBACzB,UAAUA,eAAe,gBAAkB8vC,EAAKz1D,KAAKK,UACrD,EAAKyvF,MAAM2vH,YAAYhqJ,KAEvB,+BAAK2Z,UAAW,WAAYv2E,MAAOA,GACjC,gCAAMu2E,UAAU,iBAAgB,4CAAkB5iF,GAAIipE,EAAKz1D,KAAKE,qBAnFvD,EA0FnBskN,gBAAkB,WAChB,EAAKhd,eA3FY,EA8FnBvuL,YAAc,SAACvZ,GAAW,MACqC,EAAKowF,MAA3D4xE,EADiB,EACjBA,WAAYgB,EADK,EACLA,UAAWj6F,EADN,EACMA,WAAY3lE,EADlB,EACkBA,gBACpCyhK,EAAiB7C,EAAW1hK,KAAKjY,WAAa,EAAAC,aAAa02B,OAAUgjJ,EAAagB,EACxF,OAAK6B,EAGE7kK,EAAOo9E,sBAAsBynF,EAAezhK,EAAiB2lE,GAF3D,IAlGQ,EAuGnB4uS,eAAiB,WACf,IAAM33W,GAAS,IAAAC,oBACTsiK,EAAa,EAAKnyE,MAAM4xE,WAAa,EAAK5xE,MAAM4xE,WAAW1hK,KAAO,KAClEqiK,EAAgB,EAAKvyE,MAAM4yE,UAAY,EAAK5yE,MAAM4yE,UAAU1iK,KAAO,KACnEu3W,EAAcl1M,GAAiBJ,EAC/BrrF,EAAsB2gS,GAAeA,EAAY3gS,uBAC/C2gS,EAAYn3V,8BAAgCm3V,EAAYn3V,4BAA4B1gB,EAAOqmE,gCAAgCzlD,MAEjI,OAAO,mCAAW6lD,SAAU,EAAKltD,YAAYvZ,GAC7BgiK,WAAY,EAAK5xE,MAAM4xE,WACvB+9C,YAAa,EAAK3vH,MAAM2vH,YACxB/8C,UAAW,EAAK5yE,MAAM4yE,UACtBm9C,SAAU,EAAK/vH,MAAM+vH,SACrBryM,gBAAiB,EAAKsiF,MAAMtiF,gBAC5B7C,cAAe,EAAKmlF,MAAMnlF,cAC1B89D,WAAY,EAAKqnB,MAAMrnB,WACvBH,WAAY5oE,EAAOwmE,uBACnBo+I,mBAAmB5kN,EAAOc,cAAe6hK,GAAiBA,EAAciiD,kBACxE1tI,oBAAqBA,EACrB2tI,aAAc,EAAKC,mBAxHrC,EAAKj5N,MAAQ,CACX4rX,YAAY,GAHG,E,0FAOO/zM,GAAW,WACnC,GAAIA,EAAUtgK,gBAAgB7pB,OAAQ,CACpC,IAAIurO,GAAkB,EAClBphD,EAAUtgK,gBAAgB7pB,SAAWuL,KAAKsrG,MAAMhtF,gBAAgB7pB,SAClEurO,EAAkBphD,EAAUtgK,gBAAgBre,MAAK,SAAC+G,EAAQ4G,GACxD,OAAO5G,EAAO6oB,WAAa,EAAKy7E,MAAMhtF,gBAAgB1Q,GAAOiiB,UACxD7oB,EAAO+lF,gBAAkB,EAAKue,MAAMhtF,gBAAgB1Q,GAAOm/E,kBAGhEizI,GACFhgO,KAAK+iN,eAGL/iN,KAAKsrG,MAAMwvC,0BAA4B8jC,EAAU9jC,yBACnD96I,KAAK+iN,iB,+BA2GP,IAAMtlC,EAAgBz9K,KAAKsrG,MAAM4xE,WAAal9K,KAAKsrG,MAAM4xE,WAAW1hK,KAAO,KACrEqiK,EAAgB79K,KAAKsrG,MAAM4yE,UAAYl+K,KAAKsrG,MAAM4yE,UAAU1iK,KAAO,KACnEu6S,EAAgBl4I,GAAiBJ,EAEjC0hD,GAA4BthD,GAAiBJ,IAAe,UAAgBg2B,yBAChFzzM,KAAKsrG,MAAMt1F,aAAc,WAAY6nK,GAAiBJ,EAAYz9K,KAAKsrG,MAAMnzF,gBAC7E1jB,OAAS,EAYPu+X,GALgB,EAYpB,OACE,+BAAKpoS,UAAU,mCACZ6yF,EACG,mCAAWA,WAAYA,EACZI,cAAeA,EACf13J,cAAenmB,KAAKsrG,MAAMnlF,cAC1Bg1M,yBAA0Bn7N,KAAKsrG,MAAM6vH,yBACrC9H,WAAYrzN,KAAKsrG,MAAM+nH,WACvB+H,mBAAoBp7N,KAAKsrG,MAAM8vH,mBAC/BroG,UAAW/yH,KAAKsrG,MAAMynB,UACtB03F,kBAAmBzqN,KAAKsrG,MAAMm/G,kBAC9B1hI,aAAc/oF,KAAKsrG,MAAMviB,aACzB4hI,oBAAqB3qN,KAAKsrG,MAAMq/G,oBAChCN,kBAAmBrqN,KAAKsrG,MAAM++G,kBAC9Be,qBAAsBprN,KAAKsrG,MAAM8/G,qBACjC2N,oBAAqB/4N,KAAKsrG,MAAMqvH,YAChC36N,KAAKsrG,MAAMytH,qBAAuBoG,EAClCxE,WAAY36N,KAAKsrG,MAAMqvH,WACvBjQ,4BAA6B1qN,KAAKsrG,MAAMo/G,4BACxC6J,UAAWv0N,KAAKsrG,MAAMipH,UACtBxR,aAAc/iN,KAAK+iN,aACnBuY,sBAAuBt7N,KAAKsrG,MAAMgwH,wBAE7C,KACHt7N,KAAKsrG,MAAMqvH,YAAc36N,KAAKsrG,MAAMytH,qBAAuBoG,EAC1D,mCAAiB3rB,sBAAuBxzM,KAAKsrG,MAAMkoG,sBAClCb,gBAAgB,WAChBl1B,WAAYs4I,EACZt1T,UAAU,IAWzBT,KAAK+G,MAAM4rX,WACP,+BAAK/nS,UAAU,iFACf5qF,KAAK4yX,kBASZI,EACC,mCAAwBv1M,WAAYs4I,IAClC,U,kBAvOH7zK,UAAY,CACjBg7B,WAAY,UAAU8B,WAAV,WACZd,UAAW,UAAUc,WAAV,WACXk8C,SAAU,UAAUtiH,OACpB30B,WAAY,UAAUzhD,OACtBy4L,YAAa,UAAUl8C,KAAK9lE,WAC5BkiH,yBAA0B,UAAUp8C,KACpCs0C,WAAY,UAAUt0C,KACtBq8C,mBAAoB,UAAUr8C,KAC9Bs8C,SAAU,UAAUj5E,KACpBp5H,gBAAiB,UAAU+1J,KAC3B54J,cAAe,UAAUxuB,OACzBoxF,aAAc,UAAU1yE,MACxB08G,UAAW,UAAUqvB,KACrBqoE,kBAAmB,UAAUroE,KAC7BuoE,oBAAqB,UAAU5rC,KAC/BsrC,kBAAmB,UAAUtrC,KAC7BqsC,qBAAsB,UAAUrsC,KAAK9lE,WACrC0hH,WAAY,UAAUv4E,KACtBoxD,sBAAuB,UAAUz0B,KACjCg6C,oBAAqB,UAAU32E,KAC/BsoE,4BAA6B,UAAU3rC,KACvCw1C,UAAW,UAAUx1C,KACrBu8C,sBAAuB,UAAUv8C,M,cAuOtB,IAAAjzE,UAjBS,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtBqQ,aAAc1d,EAAMyc,YAAYiB,aAChC4pN,eAAgBtnO,EAAMyc,YAAYiP,YAClC1F,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCm8H,mBAAoBniJ,EAAMu1I,gBAAgB4M,mBAC1Ce,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3DhB,wBAAyBxiJ,EAAMu1I,gBAAgBiN,wBAC/C92I,YAAa1L,EAAMgR,YAAYtF,gBAGR,WACzB,MAAO,KAGM,CAA6C0uX,I,uJClR5D,O,WACA,MACA,O,IAEA,O,uDAEqBO,G,6OAOnB/xJ,cAAgB,WACd,UAAU//L,eAAe,qBACzB,EAAKmqE,MAAM6vH,2BACXzsI,YAAW,WACT,EAAKs0H,gBACJ,I,gGAIH,OACE,kCAAQp4H,UAAU,sBAAsBkyF,QAAS98K,KAAKkhO,eACpD,gCAAMt2I,UAAW,eAAiB5qF,KAAKsrG,MAAMuyE,cAAcn9K,YAAYygO,gBAAkB,wBAA0B,MACnH,gCAAMv2I,UAAU,sBACd,4CAAkB5iF,GAAG,qC,kBAlBtBk6I,UAAY,CACjB27B,cAAe,UAAUlmL,OAAOshH,WAChCkiH,yBAA0B,UAAUp8C,KAAK9lE,Y,aAJxBg6Q,G,8HCNrB,O,OACA,OACA,O,IACA,M,uDAEMC,G,6OAcJhpK,qBAAuB,SAACp1B,GACtB,OAAQA,GACN,IAAK,OACHA,EAA4C,IAAjC,EAAKxpF,MAAM6+G,kBAA0B,EAAI,EAAK7+G,MAAM6+G,kBAAoB,EACnF,MACF,IAAK,OACC,EAAK7+G,MAAM6+G,oBAAuB,EAAK7+G,MAAM8+G,eAAe31N,OAAS,EACvE,EAAK62G,MAAM++G,kBAAkB,EAAKtjN,MAAMqjN,eAAgB,EAAK9+G,MAAM6+G,mBAEnEr1B,EAAW,EAAKxpF,MAAM6+G,kBAAoB,EAMhD,IAAM7lF,EAAc,EAAKh5B,MAAM8+G,eAAet1B,EAAW,GACnDhjL,EAAqB,EAAKw5F,MAAMx5F,mBAChCw4M,EAAoB,EAAKh/G,MAAM8+G,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAAQh7P,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,mBAC/Fz1B,EAAW,EAAKxpF,MAAM6+G,mBAAsB7lF,IAAgBgmF,KAC1DhmF,EAAYimF,iBAAoBz4M,EAAmB8rB,aAAe0mG,EAAYkmF,uBAAyB,EAAKl/G,MAAMl2F,0BAGrH,EAAKk2F,MAAMm/G,mBACb,EAAKn/G,MAAM4+G,qBAAqBp1B,GACf,IAAbA,GACF,EAAKxpF,MAAMo/G,6BAA4B,IAGzC,EAAKp/G,MAAMq/G,oBAAoB71B,K,gGAI1B,WACDhjL,EAAqB9R,KAAKsrG,MAAMx5F,mBAChCs4M,EAAiBpqN,KAAKsrG,MAAM8+G,eAAepjN,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAChEvuC,EAAoBF,EAAevsN,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,mBAEtD1sC,EAAgB79K,KAAKsrG,MAAMuyE,cAC3Bq+I,GAAmBpqT,EAAmB8rB,aACtCigJ,EAAc13J,gBAAkB03J,EAAc13J,cAActK,SAAS1hB,SAAS,sBAC7E0jL,EAAct3F,WAAWvmF,KAAKsrG,MAAMr+F,mBAAqB4wK,EAAcn3F,mBAE9E,OACE,+BAAKkE,UAAU,gBACb,8BAAIA,UAAU,qBACZ,8BAAIA,UAAW,4DACX5qF,KAAKsrG,MAAMm/G,kBAA2D,GAAvC,sCAC/B3tC,QAAS,kBAAM,EAAKxxE,MAAM++G,kBAAkBD,EAAgB,EAAK9+G,MAAM6+G,qBAEzE,gCAAMv/H,UAAU,kCACd,4CAAkB5iF,GAAG,kCAGxBoiN,EAAetiN,KAAI,SAACmjN,EAAcr9M,GACjC,IAAMs9M,EAAWd,EAAex8M,EAAQ,GAClCk1E,EAAW,EAAKwoB,MAAMm/G,kBACvB78M,IAAU08M,KAAuBY,EAASX,iBACvCz4M,EAAmB8rB,aAAestL,EAASV,uBAAyB,EAAKl/G,MAAMl2F,wBAClFxH,IAAUsuT,IAAmB9xG,EAAex8M,EAAQ,GAAG28M,gBAC5D,OACE,8BAAI3/H,UAAW,wDAA0DqgI,EAAavP,WAAW/8M,QAAQ,KAAK,IAAIrC,eAC/GsR,IAAU,EAAK09F,MAAM6+G,kBAAoB,qCAAuC,KAChFrnI,EAAW,uCAAyC,IACnDtrF,IAAK,eAAeoW,EAAOkvK,QAAS,kBAAM,EAAKotC,qBAAqBt8M,KACtE,gCAAMg9E,UAAU,mCAChB,gCAAMA,UAAU,kCACb,EAAK0gB,MAAM8/G,qBAAqBH,EAAavP,WAAY,EAAKpwG,MAAM7wF,iB,kBA9E9EynI,UAAY,CACjBkoE,eAAgB,UAAU/zM,MAC1B8zM,kBAAmB,UAAUvxG,OAC7BsxG,qBAAsB,UAAUnrC,KAChCsrC,kBAAmB,UAAUtrC,KAC7B4rC,oBAAqB,UAAU5rC,KAC/B2rC,4BAA6B,UAAU3rC,KACvCqsC,qBAAsB,UAAUrsC,KAAK9lE,WACrCwxG,kBAAmB,UAAUroE,KAC7By7B,cAAe,UAAUlmL,Q,cAwFd,IAAAowJ,aACb,IAAAj8C,UATsB,SAACxzG,GAAD,MAAY,CAClC0d,aAAc1d,EAAMyc,YAAYiB,aAChClE,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CuF,iBAAkB3U,EAAM4U,YAAYD,qBAGX,iBAAO,KAGhC,CAA6CimX,K,8HCzG/C,O,OACA,OACA,O,IACA,MAEA,QAKA,QACA,Q,uDAEMC,G,6OAMJC,wBAA0B,SAACp3R,EAAUq3R,GACnC,EAAK/nR,MAAMiwC,0BAA0Bv/C,GACrC,EAAKsP,MAAMmwC,mCAAmC43O,GAC1Cr3R,IAAa,EAAAE,0BAA0B,GAAGF,SAC5C,EAAKsP,MAAMkvC,sBAAsB,GACU,IAAlC,EAAKlvC,MAAMmvC,oBACpB,EAAKnvC,MAAMkvC,sBAAsB,GAE/Bx+C,IAAa,EAAAE,0BAA0B,GAAGF,UAC5C,EAAKsP,MAAMn8E,mBAAmB,K,EAIlCvE,kBAAoB,WAClB,IAAIkyM,EAAgB,GACpB,OAAQ,EAAKxxH,MAAMmyE,WAAWn3K,QAC5B,IAAK,cACL,IAAK,iBACHw2N,EAAgB,EAAA/gI,uBAAuB/0F,QAAO,SAAAikN,GAAA,MAA0C,eAA1BA,EAAajvH,YAC3E,MACF,IAAK,aACL,IAAK,eACL,IAAK,aACH8gI,8BACA,MACF,IAAK,2BACL,IAAK,qBACHA,EAAgB,EAAA5gI,0BAA0B7jG,MAAM,EAAG,GAKvD,OAAOykO,EAAch1N,KAAI,SAACmjN,EAAcooK,GAEtC,OADApoK,EAAanuC,QAAU,kBAAM,EAAKs2M,wBAAwBnoK,EAAajvH,SAAUq3R,IAC1EpoK,M,gGAIF,WACDqoK,EAA0B,CAAC,aAAc,2BAA4B,eAAgB,qBAAsB,cAC7GC,GAAa,EAKjB,MAJqC,eAAjCvzX,KAAKsrG,MAAMmyE,WAAWn3K,QAA2BtG,KAAKsrG,MAAM3qF,YAAc,OAC5E4yW,GAAa,GAIb,+BAAK3oS,UAAU,gBACb,8BAAIA,UAAU,qBACX5qF,KAAK4qB,oBAAoB9iB,KAAI,SAACmjN,EAAcr9M,GAC3C,IACM2vN,EAAa+1J,EAAwBn5X,SAAS,EAAKmxG,MAAMmyE,WAAWn3K,SAC7C,iBAA1B2kN,EAAajvH,SAA8B,SAAWivH,EAAajvH,SACtE,OACE,8BAAIpR,UAAW,wDAA0D2yI,GACtE3vN,IAAU,EAAK09F,MAAMowC,gCAAkC,qCAAuC,KAC7F63O,EAAqD,GAAxC,uCAEb/7X,IAAK,eAAeoW,EAAOkvK,QAA+BmuC,EAAanuC,SACvEygD,IAAe,EAAAxhI,uBAAuB,GAAGC,UAAau3R,EACtD,gCAAM3oS,UAAU,mCACd,KACJ,gCAAMA,UAAU,kCACd,4CAAkB5iF,GAAIijN,EAAa9uH,YAAc8uH,EAAa3oM,kB,kBAlEvE4/H,UAAY,CACjBu7B,WAAY,UAAU9lL,OAAOshH,Y,GAsF3Bq3E,EAAqB,CACzB/0C,sDACAE,wEACAjB,8CACArrH,yC,WAGa,IAAA28E,UAjBS,SAACxzG,GAAD,MAAY,CAElCqoB,YAAaroB,EAAMgR,YAAYqX,YAC/B66H,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CE,gCAAiCpjJ,EAAMu1I,gBAAgB6N,gCACvDN,wBAAyB9iJ,EAAMu1I,gBAAgBuN,wBAC/CE,4BAA6BhjJ,EAAMu1I,gBAAgByN,4BACnDb,mBAAoBniJ,EAAMu1I,gBAAgB4M,sBAUJ61C,EAAzB,CAA6C6iM,I,wGC7G5D,O,OACA,O,IACA,MACA,O,IAEA,Q,IACA,Q,IACA,Q,IACA,QAEA,QACA,QACA,Q,mDAGA,IAAIK,EAAY,KAEVC,EAA+B,SAACnoR,GAAU,IAEvCqqH,EACUrqH,EADVqqH,sBAAuBj6M,EACb4vF,EADa5vF,YAAag6M,EAC1BpqH,EAD0BoqH,QAASF,EACnClqH,EADmCkqH,SAAU94J,EAC7C4uC,EAD6C5uC,mBAAoB+4J,EACjEnqH,EADiEmqH,oBAAqBh1N,EACtF6qG,EADsF7qG,SACrGk4F,EAAe2S,EAAf3S,YAH4C,GAKR,IAAAwoD,WAAS,GALD,qBAKvCuyO,EALuC,KAK1BC,EAL0B,KAMxC5oF,GAAY,IAAA9qJ,QAAO,MACnBG,GAAY,IAAAF,iBAElB,IAAAv+B,YAAU,WACR,OAAO,kBAAMggC,aAAa6xO,MACzB,KAEH,IAAA7xQ,YAAU,WACJ8zG,IACF+9J,EAAY9kS,YAAW,WACjB0xD,KACFuzO,GAAe,KAEhB,MAGJ,CAACvzO,EAAWq1E,IAEf,IAWMu1E,EAAyB,IAAbx1E,GAAkBC,EAChCh1N,GAAYA,EAAZA,mBAAiC,OAAS,QAC1C,SAEEmzX,EAAsB,WAC1B,IAAKn+J,EACH,OAAO/5M,EAET,OAAQi9E,EAAcA,EAAYryF,OAASo2D,GACzC,IAAK,aACL,IAAK,2BACL,IAAK,oBACH,MAAO,uCACT,IAAK,aACL,IAAK,oBACH,MAAO,uCACT,IAAK,cACL,IAAK,iBACL,IAAK,wBACL,IAAK,mBACH,MAAO,oCACT,IAAK,OACL,IAAK,eACL,IAAK,qBACH,MAAO,iCACT,QACE,MAAO,8BAIb,OACE,+BAAKkuB,UAAU,gCAAgCo1D,IAAK+qJ,GAClD,mCACEpqQ,MAAO,KACPi1L,QACE,mCACEF,QAASA,EACT9qI,UAAW,yCACXirI,eAAA,EACAC,SAlDU,WAClB69J,GAAe,GACfhyO,aAAa6xO,GACb79J,IACA69J,EAAY9kS,YAAW,WACjB0xD,KACFuzO,GAAe,KAEhB,MA2CKloR,MAAM,cAIZ,mCAAQzU,KAAM08R,EACN9oS,UAAW,kDAAoDogN,GAC1Dv1E,EAAsB,oCAAsC,IACjE01E,SAAUJ,EAAUv2L,QACpBw2L,UAAWA,EACXI,YAAA,EACAC,cAAe51E,IACpB,gBAAG61E,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAA+B,WAAdP,EAAyB,cAAgB,kBAEnE,+BAAKpgN,UAAU,sBACb,gCAAMA,UAAW,mFAAqFogN,GACpG,4CAAkBhjS,GAAI4rX,MACtB,gCAAMhpS,UAAU,UAAhB,KAA2B,4CAAkB5iF,GAAI0tN,EAAU,iBAAmB,6BAU9F+9J,EAA6BvxO,UAAY,CACvCxmI,YAAa,UAAU8mB,OACvBkzL,QAAS,UAAUtzE,KAAKnpC,WACxB08G,sBAAuB,UAAU52C,KAAK9lE,WACtCu8G,SAAU,UAAU58G,OACpB68G,oBAAqB,UAAUrzE,KAC/BzpD,YAAa,UAAU/+C,MAAV,qB,WAab,IAAAkyD,UAVsB,SAACxzG,GAGvB,MAAO,CACLokE,mBAH2BpkE,EAAM0zG,UAA5BtvC,mBAILj8D,SAHiBnI,EAAMgR,YAAlB7I,YAQP,CAAyBgzX,I,kKC5I3B,O,OACA,OACA,S,IACA,M,IACA,O,IAEA,Q,IACA,OACA,QACA,SACA,Q,IAKA,Q,IACA,QACA,S,uDAEMI,G,gBAgBJ,WAAYvoR,IAAO,gGACXA,IADW,iBAEjB,EAAKvkG,MAAQ,CACXoyM,mBAAkB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACxD2+F,kBAAmB,GACnB26E,YAAY,EACZmB,cAAe,GACfn2J,eAAgB,GAChBo7E,2BAA2B,GARZ,E,oFAajB/4S,KAAKy2S,aAAaz2S,KAAKsrG,OACvB,IAAM4yE,EAAYl+K,KAAKsrG,MAAM4yE,WAAal+K,KAAKsrG,MAAM4yE,UAAU1iK,KAC/D,GAAI0iK,GAAaA,EAAU53K,OAAOnM,SAAS,eAAiB6F,KAAKsrG,MAAMhtF,gBAAgB7pB,SAAWuL,KAAKsrG,MAAMkwC,uBAAwB,CACnI,IAAMk7J,GAAc,IAAA52H,8CAA6C9/K,KAAKsrG,MAAMhtF,gBAAiB4/J,GACzFw4H,GACF12S,KAAKwgL,kCAAkCtC,EAAWw4H,EAAYz2H,8BAA+B,M,gDAKzErB,GAAW,WA2BnC,IAzBGA,EAAUV,WAAcU,EAAUV,UAAU57J,OAAStiB,KAAK+G,MAAM+sX,eAC3Dl1M,EAAUy8C,WAAar7N,KAAKsrG,MAAM+vH,WACjCz8C,EAAUV,WAAaU,EAAU1B,YAAe0B,EAAU1B,WAAW56J,OAAStiB,KAAK+G,MAAM42N,gBAC1F39N,KAAKsrG,MAAMhtF,gBAAgB7pB,SAAWmqL,EAAUtgK,gBAAgB7pB,QAChEuL,KAAKsrG,MAAMrnB,aAAe26F,EAAU36F,YACpC26F,EAAUxsF,sBAAwBpyF,KAAKsrG,MAAMlZ,qBAC7CwsF,EAAUn4J,WAAazmB,KAAKsrG,MAAM7kF,UAClCzmB,KAAKsrG,MAAM3pB,SAASltF,QAAUmqL,EAAUj9F,SAASltF,QAAUmqL,EAAUj9F,SAAS,IAAM3hF,KAAKsrG,MAAM3pB,SAAS,IAC3Gi9F,EAAUj9F,SAAS,GAAGnmE,KAAK9a,WAAaV,KAAKsrG,MAAM3pB,SAAS,GAAGnmE,KAAK9a,WACpEk+K,EAAUj9F,SAAS,GAAGnmE,KAAK9a,YAAYmb,WAAa7b,KAAKsrG,MAAM3pB,SAAS,GAAGnmE,KAAK9a,YAAYmb,WAE/F7b,KAAKs9K,SAAS,CACZq1M,YAAY,IACX,WACD,EAAKl8E,aAAa73H,OAGjBA,EAAUghD,gBAAkB5/N,KAAKsrG,MAAMs0H,gBAC1ClxI,YAAW,WACT,EAAKs0H,gBACJ,KAEDhjN,KAAKk5S,cAAgBt6H,EAAUj9F,SAASltF,SAAWuL,KAAKsrG,MAAM3pB,SAASltF,QACzEuL,KAAKy2S,aAAa73H,GAEhBA,EAAUV,WAAaU,EAAUtgK,gBAAgB7pB,OAAQ,CAC3D,IAAMiiT,GAAc,IAAA52H,8CAA6ClB,EAAUtgK,gBAAiBsgK,EAAUV,UAAU1iK,MAC5Gk7R,IACF12S,KAAKs9K,SAAS,CACZy7H,2BAA2B,IAE7B/4S,KAAKwgL,kCAAkC5B,EAAUV,UAAU1iK,KAAMk7R,EAAYz2H,8BAA+B,O,+BA6IhH,IAAMxC,EAAgBz9K,KAAKsrG,MAAM4xE,WAAal9K,KAAKsrG,MAAM4xE,WAAW1hK,KAAO,KACrEqiK,EAAgB79K,KAAKsrG,MAAM4yE,UAAYl+K,KAAKsrG,MAAM4yE,UAAU1iK,KAAO,KAEzE,OACE,+BAAKovE,UAAW,oCAAqC5qF,KAAKsrG,MAAMmvC,oBAC7Dz6I,KAAKsrG,MAAM4xE,WAAa,yBAA2B,KAAOl9K,KAAKsrG,MAAMs0H,eAAiB,oCAAsC,KAC5H5/N,KAAK+G,MAAM4rX,WACR,wCACA3yX,KAAKsrG,MAAMlZ,oBAET,wCACGpyF,KAAK+G,MAAMgyS,2BAA6B/4S,KAAKsrG,MAAMwvC,wBAA0B96I,KAAKw4S,qBAAuB,KACzGx4S,KAAK+zX,yBAGR/zX,KAAK64T,kBAAkBh7I,GAAiBJ,Q,gBAlO7Cv7B,UAAY,CACjBvgE,SAAU,UAAUu3B,QAAQ,UAAU8lE,WAAV,YAC5B9B,WAAY,UAAU8B,WAAV,WACZd,UAAW,UAAUc,WAAV,WACXi8C,YAAa,UAAUl8C,KACvBs8C,SAAU,UAAUj5E,KACpB09E,kBAAmB,UAAU19E,KAC7Bp5H,gBAAiB,UAAU+1J,KAC3B54J,cAAe,UAAUxuB,OACzBssF,WAAY,UAAUzhD,OACtBshD,WAAY,UAAUthD,OACtBu9L,aAAc,UAAUhhD,M,6BAgE1B03H,aAAe,SAACnrM,GACd,IAAMwrM,EAAyB,EAAKM,mBAAmB9rM,GACjDyrM,EAA4B,EAAKF,uBAAuBvrM,EAAM4yE,UAAW5yE,EAAM3pB,SAAUm1N,GAEzFU,GAAiBV,GAAqD,IAA3BA,IAAiCA,GAA0B,EACtGS,EAAmBC,EAAgBA,CAACV,GAAjB,qBAA4CC,IAA5C,wBAA6EA,IAItG,EAAKz5H,SAAS,CACZw2M,cAAexoR,EAAM4yE,UAAY5yE,EAAM4yE,UAAU57J,KAAO,GACxDq7M,eAAgBryH,EAAM4xE,WAAa5xE,EAAM4xE,WAAW56J,KAAO,GAC3D01R,kBAAmB,EAAKtwK,kBAAkB6vK,EAAkBjsM,EAAOksM,KAClE,YACD,EAAKl6H,SAAS,CACZq1M,YAAY,IAEV,EAAKz5E,iBACW,aAAE,4CACVzrN,WAAW,EAAKyrN,cAC1B,EAAKA,cAAe,O,KAK1Bn8H,qBAAuB,WAA2C,IAA1C0wB,EAA0C,uDAA1B,EAAAnuJ,eAAeC,OAC/CztC,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SAEjD,EAAK4jG,MAAMthF,eACTlY,EAAmBwuC,MAChB,EAAKgrD,MAAMl2F,uBAMd,EAAKu4L,mBAAmB,oBALxB,EAAKriG,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBwjL,kBAMJ,EAAKE,mBAAmB,qBAG1B,EAAKriG,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBwjL,kBAEEA,IAAkB,EAAAnuJ,eAAeE,WACnCrnD,OAAO+1M,4BAA6B,K,KAK1CP,mBAAqB,SAACxnL,GACpB,EAAKm3J,UAAL,gBACGn3J,GAAiB,EAAKpf,MAAMof,M,KAIjC4tW,sBAAwB,WAEtB,IAAMh8E,EAAW,EAAKD,kBAChBk8E,EAAW56X,SAASg9F,cAAc,oBAClCqkD,EAAuD,IAAlC,EAAKnvC,MAAMmvC,mBAA2B,EAAI,EAC/Dw5O,EAAe7pX,KAAKkI,KAAKylS,EAAStjT,OAASgmJ,GAE3ChlI,EAAO,CAAC,IAad,OAZ2B,IAAvBglI,GACFhlI,EAAK1gB,KAAK,IACVgjT,EAAS35S,SAAQ,SAAC+7E,EAASvsE,GAEzB6H,EADgB7H,EAAQ6sI,GAAuB,EAAK,EAAI,GACzC1lJ,KAAK,UAAMm/X,aAAa/5S,QAGzC49N,EAAS35S,SAAQ,SAAC+7E,GAAD,OAAa1kE,EAAK,GAAG1gB,KAAK,UAAMm/X,aAAa/5S,OAKzD65S,EACL,wCACE,mCAAc75E,mBAAoB,4CAChC,gCAAMwxB,SAAUl2T,EAAKhhB,OACf+2U,YAAayoD,EACbt0X,MAAOq0X,EAASniR,YAAc,EAC9BhyG,OAAQm0X,EAASliR,aACjBkuE,SAAU,EAAKy4H,0BACfizB,YAAqC,IAAvBjxL,EAA4B,IAAM,IAChDmxL,UAAmC,IAAvBnxL,EAA4B,IAAM,IAC9CuxL,aAAc,YAAyC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAC1C,OAAO,+BAAK7c,IAAKA,EAAK6c,MAAOA,GAC1BoB,EAAKy2T,GAAUD,SAM5B,M,KAGNpT,kBAAoB,SAACp7I,GACnB,IAAKA,EAAW58D,OACd,OAAO,+BAAKj2B,UAAU,iFAGxB,IAAMi2B,GAAS,IAAAsqE,sBAAqB1N,EAAY,EAAKnyE,MAAMxnB,YAE3D,IAAK+8B,EACH,OAAO,+BAAKj2B,UAAU,iFAMxB,IAHA,IAAM6vD,EAAuD,IAAlC,EAAKnvC,MAAMmvC,mBAA2B,EAAI,EAE/Ds9J,EAAW,GACRxjT,EAAI,EAAGA,EAAI6V,KAAKkI,KAAKuuG,EAAS45B,GAAqBlmJ,IAAM,CAEhE,IADA,IAAMykU,EAAgB,GACbvjU,EAAI,EAAGA,EAAIglJ,EAAmBhlJ,IAAM,CAC3C,IAAM4yI,EAAe5yI,EAAGlB,EAAEkmJ,EACtBpS,EAAexnB,GACjBm4M,EAAcjkU,KACZ,+BAAK61F,UAAU,UAAUpzF,IAAK,kBAAkB6wI,GAC9C,+BAAKz9C,UAAU,mFAKvBmtN,EAAShjT,KACP,8BAAI61F,UAAU,sBAAsBv2E,MAAO,CAAC8/W,cAAe,OAAQ38X,IAAK,sBAAsBjD,GAC3FykU,IAKP,OAAOjhB,I,GA6CLznH,EAAqB,CACzB1qK,oEACA9B,8CACAU,wDACA2I,kCACAyF,0CACApM,6DAGI4tW,GAAY,IAAAtoR,UA5BM,SAACxzG,GAAU,MACgBA,EAAMwc,UACvD,MAAO,CACLM,uBAH+B,EAC1BA,uBAGL4U,eAJ+B,EACFA,eAI7BvD,SAAUnuB,EAAMouB,wBAAwBD,SACxCm5M,eAAgBtnO,EAAMyc,YAAYiP,YAClC1F,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCtI,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtBpD,UAAWjK,EAAM8J,UAAUG,UAC3Bk4I,mBAAoBniJ,EAAMu1I,gBAAgB4M,mBAC1Ce,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CV,wBAAyBxiJ,EAAMu1I,gBAAgBiN,wBAC/C7tI,iBAAkB3U,EAAM4U,YAAYD,iBACpC0T,YAAaroB,EAAMgR,YAAYqX,eAaQ2vK,EAAzB,CAA6CujM,G,UAGhDO,G,2HC7Rf,I,IAAA,MACA,O,IACA,OAEA,Q,IACA,OACA,QACA,Q,IACA,OACA,SACA,S,mDAEA,IAAM1hK,EAAiB,SAACpnH,GAEtB,IAAKA,EAAMltF,eACT,OAAOktF,EAAM7qG,SACT,8BAAImqF,UAAU,mBAAkB,+BAAKA,UAAU,6BAC/C,+BAAKA,UAAU,yBAAyBpzF,IAAK,UAAY8zG,EAAMy+I,IAAMz+I,EAAM+oR,SALjD,IAQxBl8W,EAAyEmzF,EAAzEnzF,eAAgB/C,EAAyDk2F,EAAzDl2F,uBAAwB8iS,EAAiC5sM,EAAjC4sM,6BAE1C95R,EAAiBktF,EAAMltF,eAAe5C,KAExC4+D,EAAS,GACb,GAAIh8D,EAAeza,UAAUE,aAAc,CACzC,IAAMP,EAAOgoG,EAAM7qG,SACf,EAAAgwE,gBAAgBC,MAChB46B,EAAMitM,eAAiB,KAAO,EAAA9nO,gBAAgBE,OAClDyJ,EAAO0R,gBAAP,SAAiC,IAAAhoF,oBAAmBsa,EAAeza,UAAUE,aAAcP,GAA3F,UACSgoG,EAAMltF,gBAAkBA,EAAexa,kBAChDw2E,EAAO0R,gBAAP,QAAiC1tE,EAAexa,gBAAhD,MAGF,IAAM0wX,GAAwB,IAAA16R,kBAAiBx7E,EAAgB,eAEzDtM,EAAqBqG,EAAezQ,SACpCi6N,GAAmBvoO,SAASC,SAASo4F,eAEvC26C,GAAY,GACZt6H,EAAmBk1H,aAAgB7uH,EAAe8uH,2BAA8B9uH,EAAe+uH,qBAC5FotP,IAEOxiX,EAAmB8rB,aAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,cAAmBkJ,EAAeza,UAAUgS,UAClK21F,EAAMl2F,0BAIVg3H,GAAY,GANZA,GAAY,GAUhB,IAAM12H,GAAkB,IAAAhB,oBAAmB0J,GAErCw+J,EAAkB9qK,EAAmB+qK,cAAgBnnK,EACrD0mU,EAA6B1mU,GAAoBknK,IAAoBxnK,EAErEinU,EAA2B/wO,EAAM6tD,UAAYwoE,GAAmB7vN,EAAmBk1H,aAAestP,IACnGxiX,EAAmB8rB,cAAgBxf,EAAeza,UAAUgS,UAAY21F,EAAMl2F,2BAC1EtD,EAAmB8rB,eAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,iBACpHo2F,EAAMw0H,oBAAsBs8G,EAE3B55U,GAAQ,IAAA+J,oBAAmB6R,EAAgB,GAEjD,OAAOktF,EAAM7qG,SACX,8BAAImqF,UAAU,mBACZ,+BAAKA,UAAW,2BACb0gB,EAAM6tD,SAAW,UAAY,KAC7B7tD,EAAMltF,eAAeojC,kBAAoB,qCAAuC,KAChF8pD,EAAM8sM,aAAe,kCAAoC,KACzD9sM,EAAM+sM,gBAAN,6BAAqD/sM,EAAM+sM,gBAAoB,IAC7EhkS,MAAO+lE,EAAQ5iF,IAAK4mB,EAAepW,KACnC80K,QAAS,SAACl8E,GAAD,OAAW,UAAUz/D,eAAe,mBAAqB/iB,EAAevC,WAC5EyvF,EAAM2vH,YAAY3vH,EAAMltF,eAAgB1I,EAAiBkrF,KAChExiF,EAAewlE,yBACd,gCAAMgH,UAAU,yBAAwB,4CAAkB5iF,GAAG,6BAC3D,KACHkwS,EAA+B,EAC9B,gCAAMttN,UAAU,iCAAiCstN,GAAuC,KAE1F,+BAAKttN,UAAW,gCAAkC0gB,EAAM2sM,cAAgBviS,EAAkB,2BAA6B,KACpH02H,EACC,gCAAMxhD,UAAU,uCACb,IAAAkxF,sBAAqBt5K,EAAO4b,EAAgBjG,EAAgBmzF,EAAM7wF,KAAK1C,WAExE,KACHrC,EACG,gCAAMk1E,UAAU,kFAChB,gCAAMA,UAAU,qCAAoC,mCAAavnF,QAAS+a,OAGjFktF,EAAM6tD,WAAa/6I,EAAeza,UAAU4C,cAC3C,+BAAKqkF,UAAU,2BACZyxP,EACC,kCAAQzxP,UAAU,8BAA8BkyF,QAAS,WACvD,UAAU37I,eAAe,oBAAsB/iB,EAAevC,WAC3DyvF,EAAMgtM,oBAAoBhtM,EAAMltF,kBAEnC,gCAAMwsE,UAAU,oCAAmC,4CAAkB5iF,GAAG,wBAExE,KACHo0U,EACC,kCAAQxxP,WAAW,aAAW,+DAAgE,CAAC,uBAAwBgyF,IAC/GE,QAAS,kBAAMxxE,EAAMyxE,qBACnBH,EAAkB,EAAAt9H,eAAeE,SAAW,EAAAF,eAAeC,SAE7Dv3C,GAAG,kCACT,4CAAkBA,GAAI40K,EAAkB,4BAA8B,0BAEtE,KACH+kD,GAAmBr2H,EAAMw0H,oBAAsBu8G,IAA6BD,GAA8Bk4C,EACzG,gCAAM1pS,UAAU,eAAekyF,QAAS,WACtC,UAAU37I,eAAe,sCACzB,UAAUA,eAAe,qCAAuC/iB,EAAevC,WAC/EyvF,EAAMgtM,oBAAoBhtM,EAAMltF,mBAEhC,MAEJ,MAGN,+BAAKwsE,UAAW,WAAa0gB,EAAM6tD,SAAW,UAAY,KACvD7tD,EAAMltF,eAAeojC,kBAAoB,qBAAuB,KAChE8pD,EAAM8sM,aAAe,kBAAoB,KACzC9sM,EAAM+sM,gBAAN,aAAqC/sM,EAAM+sM,gBAAoB,IAC7DhkS,MAAO+lE,EAAQ5iF,IAAK4mB,EAAepW,KACnC80K,QAAS,SAACl8E,GAAD,OAAW,UAAUz/D,eAAe,oBACxC,UAAUA,eAAe,mBAAqB/iB,EAAevC,WAC7DyvF,EAAM2vH,YAAY3vH,EAAMltF,eAAgB1I,EAAiBkrF,KAEhExiF,EAAeunF,WACd,gCAAM/a,UAAU,gBAAgBxsE,EAAeunF,WAA/C,KAAqE,KAEtEuyM,EAA+B,EAC9B,gCAAMttN,UAAU,iCAAiCstN,GAAuC,KAEzF5sM,EAAM6tD,WAAa/6I,EAAeza,UAAU4C,cAC3C,+BAAKqkF,UAAU,mBACZyxP,EACC,kCAAQzxP,UAAU,sBACVkyF,QAAS,kBAAM,UAAU37I,eAAe,gCACtC,UAAUA,eAAe,+BAAiC/iB,EAAevC,WACtEyvF,EAAMgtM,oBAAoBhtM,EAAMltF,kBAC3C,4CAAkBpW,GAAG,uBAJvB,IAI8C,gCAAM4iF,UAAU,gCAC3DzyE,EAAeE,QAAU,KAAO,4CAAkBrQ,GAAG,yBAGtD,KACHo0U,EACC,kCAAQxxP,WAAW,aAAW,uDAAwD,CAAC,uBAAwBgyF,IACvGE,QAAS,kBAAM,UAAU37I,eAAe,sCAAwCmqE,EAAMyxE,qBACpFH,EAAkB,EAAAt9H,eAAeE,SAAW,EAAAF,eAAeC,SAE7Dv3C,GAAG,qBACT,4CAAkBA,GAAI40K,EAAkB,sBAAwB,0BAEhE,KACH+kD,GAAmBr2H,EAAMw0H,mBAAqBw0J,EAC7C,gCAAM1pS,UAAU,eAAekyF,QAAS,WACtC,UAAU37I,eAAe,sCACzB,UAAUA,eAAe,qCAAuC/iB,EAAevC,WAC/EyvF,EAAMgtM,oBAAoBhtM,EAAMltF,mBAEhC,MAEJ,KACHA,EAAewlE,yBACd,gCAAMgH,UAAU,yBAAwB,4CAAkB5iF,GAAG,6BAC3D,KACJ,+BAAK4iF,UAAW,gBAAkBl1E,EAAkB,wBAA0B,4BAC3E41F,EAAM2sM,cAAgBviS,EAAkB,2BAA6B,KACrE02H,EACC,gCAAMxhD,UAAU,wBACb,IAAAkxF,sBAAqBt5K,EAAO4b,EAAgBjG,EAAgBmzF,EAAM7wF,KAAK1C,WAExE,KACFrC,EAAwG,KAAtF,gCAAMk1E,UAAU,sBAAqB,mCAAavnF,QAAS+a,QAMvFs0M,EAAeniN,YAAc,iB,WACd,IAAAw3I,YAAW2qE,I,4MCrLLovB,E,YACnB,WAAYhjK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,yCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GACH,sGAAmBA,EAAW,IAAIm+O,K,gCAG1B76J,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS46J,MAAMC,QAC1B9hP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GAtB/C,M,4BAEqB06J,G,4MCAAE,E,YACnB,WAAYljK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,qCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIq+O,K,gCAG1B/6J,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS46J,MAAMG,SAC1BhiP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GAxB/C,M,4BAEqB46J,G,4MCAAD,E,YACnB,WAAYjjK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,sCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIo+O,K,gCAG1B96J,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS46J,MAAME,UAC1B/hP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GAxB/C,M,4BAEqB26J,G,4MCAAE,E,YACnB,WAAYnjK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIs+O,K,mCAIlC,IAAKjiP,KAAKimG,uBAAuBjmG,KAAK2hF,UAAW,CAC/C,IAAM8yK,EAAWz0P,KAAKU,YAAY+zP,SAC9B8/H,EAAqB,KACzB,GAAI9/H,GAAYA,EAAStuO,eAAiBsuO,EAAStuO,cAActK,SAAU,CACzE,IAAM24W,EAAe//H,EAAStuO,cAAc1G,yBAC5C80W,EAAqBv0X,KAAK2hF,SAAS71E,MAAK,SAAAypC,GAAA,OAAQA,EAAK91B,2BAA6B+0W,KAEpFx0X,KAAKmmB,cAAgBouW,GAAsBv0X,KAAK2hF,SAAS,M,gCAInDsF,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS46J,MAAMI,WAC1BjiP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GApC/C,M,4BAEqB66J,G,+KCDrB,QAEA,QACA,Q,IACA,O,IACA,QACA,Q,IACA,Q,uDAGqBC,E,YACnB,WAAYpjK,GAAS,8GACbA,IADa,SA2HrB21S,kBAAoB,SAACpxX,GAInB,OAAOuE,MAAMC,QAAQxE,EAAQyP,SAAR,iBAAiF,SAA1CzP,EAAQyP,SAAR,eAAmC,IA/H5E,EAgMrB4hX,kBAhMqB,gCAgMF,qBAAOC,EAAP,uDAAoB,GAApB,8EACjBx8X,OAAOs0I,kBAAmB,GAC1B,IAAA7lH,gBACMguW,EAAeD,GAAc,EAAKxuW,cAAc67D,yCAHrC,SAIX,UAAW06H,qBAAX,EAAsCk4K,GAJ3B,cAKX98R,EAAgB,EAAK+8R,sBAAsBD,GAAc,MAE7D,EAAKzuW,cAAgB2xE,GAEvB3/F,OAAOs0I,kBAAmB,GAC1B,IAAAn6C,iBAViB,mBAYV,GAZU,8CAhME,4CAEnB,EAAKhsF,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,sCACnB,EAAK7N,gBAAiB,EACtB,EAAKm1E,eAAgB,EACrB,EAAKm3H,yBAA0B,EAC3Br7H,IACF,EAAKljD,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAbA,E,qEAmBhBp4B,GAgBH,OAfIiE,MAAMC,QAAQlE,EAAUmP,SAAV,gBACbnP,EAAUmP,SAAV,cAAoC3Y,SAAS,OAC5CwJ,EAAUmP,SAAV,cAAoC3Y,SAAS,MACjDwJ,EAAUmP,SAAV,cAAoC/d,KAAK,MAY3C,+FAAmB4O,EAAW,IAAIu+O,K,yCAGjBrsM,EAASouC,GAAY,WAChCC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GAC9G,GAAIlkF,KAAKmmB,gBAGPk+D,EAAoBA,EAAkBr9E,QAAO,SAAA3D,GAC3C,SAAIuE,MAAMC,QAAQ,EAAKse,cAAcrT,SAAnB,kBAAkDlL,MAAMC,QAAQxE,EAAQyP,SAAR,kBACzEzP,EAAQyP,SAAR,eAAmC3Y,SAAS,EAAKgsB,cAAcrT,SAAnB,eAA8C,OAWjG9S,KAAKy0X,kBAAkBz0X,KAAKmmB,gBAAgB,CAC9C,IAAM+rE,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtD8sX,EAAwB5iS,GAAiBA,EAAcC,YAAcD,EAAcC,WAAWhsE,eAC/F+rE,EAAcC,WAAWhsE,cAAcrT,UAAYo/E,EAAcC,WAAWhsE,cAAcrT,SAAvC,cACpDgiX,IACFzwS,EAAoBA,EAAkBr9E,QAAO,SAAA3D,GAAA,OAAWA,EAAQyP,UAAYzP,EAAQyP,SAAR,eACvEzP,EAAQyP,SAAR,cAAkC3Y,SAAS26X,EAAsB,QAK5E,OAAO,aAAO90X,KAAK+0X,kBAAkB1wS,IAAoB,SAAChhF,GAAD,OAAaA,EAAQM,UAAUqE,MACrFF,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,wCAGpCm1E,GAChB,OAAOA,EAAkBr9E,QAAO,SAAA3D,GAC9B,IAAMktQ,EAAsBltQ,EAAQoc,yBACpC,QAASpc,EAAQugF,0BAA4BS,EAAkBpkF,MAAK,SAAAkxC,GAClE,OAAOA,EAAW1xB,2BAA6B8wP,W,iDAK1BykH,GAA8B,WAAlBzxS,EAAkB,uDAAJ,GAE7C4qB,EAAmBnuG,KAAK2hF,SAAS36E,QAAO,SAAA3D,GAC5C,GAAIuE,MAAMC,QAAQxE,EAAQyP,SAAR,iBAAuCzP,EAAQyP,SAAR,eAAmC3Y,SAAS66X,GACnG,OAAO,KAOPC,EAAkB1xS,GACjB0xS,GAAmBj1X,KAAKmmB,gBAI3B8uW,EAAkBj1X,KAAKmmB,cAAc67D,0CAGvC,IAAM4uI,EAAcziH,EAAiBnnG,QAAO,SAAA3D,GAI1C,OAAOA,EAAQ2+E,2CAA6CizS,KAE9D,GAAIrkK,EAAYn8N,OAAS,EAAG,CAC1B,IAAMqgY,EAAwB90X,KAAKk1X,qCAC7BC,EAAkBvkK,EAAY9kN,MAAK,SAAAzI,GACvC,GAAI,EAAKoxX,kBAAkBpxX,GACzB,OAAOA,EAAQs9E,gCAAgC,CAC7C,CACEO,SAAU,gBACVI,UAAWwzS,QAKnB,OAAOK,GAAmBvkK,EAAY,GAExC,OAAOA,EAAY,IAAMziH,EAAiB,K,oDAW1C,OAAInuG,KAAKmmB,eAAiBve,MAAMC,QAAQ7H,KAAKmmB,cAAcrT,SAAnB,gBAC/B9S,KAAKmmB,cAAcrT,SAAnB,eAA8C,GAEhD,S,gCAOCoI,GACR,OAAIlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,K,mCAOd,WACLutE,EAAmBzoF,KAAKygF,qBAC1BzgF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BACjEzgF,KAAK2hF,SACoB3hF,KAAKimG,uBAAuBxd,EAAkB,OAC7CtwF,OAAOs0I,mBACnCzsI,KAAKmmB,cAAgBsiE,EAAiB,IAEpCzoF,KAAK8nF,wBACP9nF,KAAK8mF,mBAAqB9mF,KAAK8nF,2B,+CAI0B,IAAtCW,EAAsC,uDAAnB,GAAI5sE,EAAe,uDAAJ,GACvD,SAAI7b,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,WAC3C7b,KAAKmmB,cAAgBnmB,KAAK60X,sBACxBh5W,GAAY7b,KAAKmmB,cAAc67D,0CAC9BnmE,EACD4sE,GAEEzoF,KAAKmmB,kB,4CAOSyuW,GAAsC,IAAxBQ,IAAwB,yDACrDA,IACHR,EAAe50X,KAAK0iH,yBAAyBkyQ,GAC7CA,EAAe50X,KAAK4iH,gCAAgCgyQ,IAEtD,IAAMjvS,EAAa3lF,KAAK0f,qBAAqB5T,MAAK,SAACzI,GACjD,GAAIA,EAAQmY,MAAQnY,EAAQmY,KAAKK,SAE/B,OADiCxY,EAAQmY,KAAKwmE,2CACR4yS,KAG1C,OAAOjvS,GAAcA,EAAWnqE,O,2DAmBhC,IAAM02E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IAC5D,OAAOkqF,GAAiBA,EAAcC,YAAcD,EAAcC,WAAWhsE,eACxE+rE,EAAcC,WAAWhsE,cAAcrT,UAAYo/E,EAAcC,WAAWhsE,cAAcrT,SAAvC,gB,6CAKxD,IAAM0tE,EAAa,CAAC,CAClBU,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,iCAG/BuzS,EAAwB90X,KAAKk1X,qCAUnC,OARIJ,GAAyB90X,KAAKmmB,eAC5BnmB,KAAKy0X,kBAAkBz0X,KAAKmmB,gBAC9Bq6D,EAAWzrF,KAAK,CACdmsF,SAAU,gBACVI,UAAWwzS,IAIVt0S,I,uDAGwB3kE,GAI/B,OAHA,EAAA4gF,iBAAiBr+F,SAAQ,SAAAkpF,GACvBzrE,EAAWA,EAASld,QAAQ,IAAI2oF,EAAM,OAEjCzrE,I,gCAGCorE,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS46J,MAAMK,WAC1BliP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,M,oDAM3C,OAAO,M,iCA9PU86J,G,qJCXrB,Q,IACA,OACA,S,uDAEqBwB,E,YACnB,WAAY5kK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,iBACd,EAAKuV,SAAW,iBAChB,EAAK0tV,cAAgB,EACrB,EAAK7tV,YAAc,4CACfojE,IACF,EAAK0gP,aAAL,4BACA,EAAKvH,iBAAmB,OACxB,EAAKF,WAAa,IAVe,E,qEAchCp0T,GACH,IAAM6a,EAAQ7a,EAAUmP,UAAYnP,EAAUmP,SAAV,MAC9B7c,EAAS0N,EAAUmP,UAAYnP,EAAUmP,SAAV,OACrC,GAAI7c,GAAwB,MAAdA,EAAO,GACnB,sGAAmB0N,EAAW,IAAI+/O,GAAc,EAAO,OAAM,EAAM,eAC9D,GAAIllO,EAAO,CAChB7a,EAAU4M,YAAc5M,EAAU4M,YAAY5R,QAAQ,YAAa,MAAMA,QAAQ,SAAU,IAC3F,IAAMskF,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGAAmBnP,EAAW,IAAI+/O,GAAc,EAAOzgK,IACrD,EAAqB,IAAfA,EAAmB,WAAa,iBAE1C,sGAAmBt/E,EAAW,IAAI+/O,K,yCAGjB7tM,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GAS1G,OARAG,EAAoBA,EAAkBr9E,QAAO,SAAC3D,GAC5C,OAAIA,EAAQyP,SAAR,QACwC,MAAlCzP,EAAQyP,SAAR,OAA2B,IAA8C,MAAhCzP,EAAQyP,SAAR,KAAyB,IACrEzP,EAAQyP,SAAR,WAAiCzP,EAAQyP,SAAR,UAA8B3Y,SAAS,aAKxD2N,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,sCAG5D,WACdlP,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,c,kCAI1BnuE,GAA8B,IAAhB6kG,EAAgB,uDAAJ,GAC9BjgH,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,EAAc6kG,GAChCjgH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAOg5F,cAAcpsE,cAAgBnmB,KAEvCA,KAAK4mF,mB,wCAGWw2R,GAChB,OAAOA,EAAgBp2W,QAAO,SAAAq2W,GAAA,OAAgD,IAA9BA,EAAep6R,gB,6CAI/D,MAAO,CAAC,CACN/B,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7BrmE,GACJlb,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBACjFzgF,KAAKkmF,gCACL,mGAAgBhrE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,M,mDAIyC,IAAlC2C,EAAkC,uDAApB7d,KAAKmmB,cACtC66D,EAAoBhhF,KAAKygF,uBACzB40S,EAAgBx3W,EAAY/K,SAAZ,UAAoC+K,EAAY/K,SAAZ,UAAkC,GAAK,KAC3FkwG,EAAgBnlG,EAAY/K,SAAZ,cAAwC+K,EAAY/K,SAAZ,cAAsC,GAAK,KACnGwiX,EAAUz3W,EAAY/K,SAAZ,QAAkC+K,EAAY/K,SAAZ,QAAgC,GAAK,KAmBvF,OAlBIuiX,GACFr0S,EAAkBjsF,KAAK,CACrBmsF,SAAU,YACVI,UAAW+zS,IAGXryQ,GACFhiC,EAAkBjsF,KAAK,CACrBmsF,SAAU,gBACVI,UAAW0hC,IAGXsyQ,GACFt0S,EAAkBjsF,KAAK,CACrBmsF,SAAU,UACVI,UAAWg0S,IAGRt0S,I,gCAGCiG,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASgrF,QAAQyxE,cAC1BqqI,EAAU9mS,EAASgrF,QAAQ2xE,eAC3BoqI,EAAU/mS,EAASgrF,QAAQiyE,UAC3BqxI,EAAYtuS,EAASgrF,QAAQ0xE,uBAE/B3jP,KAAKmmB,gBACHnmB,KAAKmmB,cAAcrT,SAAnB,QAAsF,MAA7C9S,KAAKmmB,cAAcrT,SAAnB,OAAsC,GACjF9S,KAAKmmB,cAAc0gE,MAAMO,OAASmuS,EAElCv1X,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAGlCpnF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,EAAmByuS,GAClD,GAAIzuS,GAAqBA,EAAkBF,MACzC,GAAIE,EAAkBj0E,SAAlB,SAAyCi0E,EAAkBj0E,SAAlB,KAAoC,CAC/E,IAAM7c,EAAS8wF,EAAkBj0E,SAAlB,OAAqC,GAC9CmuT,EAAal6O,EAAkBj0E,SAAlB,WAAyC,GAC5Di0E,EAAkBF,MAAMO,OAASH,EAASgrF,QAAQmyE,qBAAqBnuP,EAAO,IAAIgrU,QAElFl6O,EAAkBF,MAAMO,OAAoC,IAA3BouS,EAA+BzH,EAAUC,Q,8CA6BA,WAAhEnwW,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAC5Eb,EAAqB9mF,KAAK+nF,8CAA8ClqE,EAAa8pE,GACzF,GAAI9pE,GAAeA,EAAY/K,SAAZ,OAAgC,CAMjD,IALA,IAAMywE,EAAc1lE,EAAYglE,uBAC1BsnR,EAAoBnqW,KAAK2zM,YAAY3sM,QAAO,SAACoX,GAEjD,OAAOmlE,IAAgBnlE,EAAeykE,0BAJS,WAMxCtuF,GAEP,IADA,IAAMkhY,EAA4BlhY,EAAI,EAPS,WAQtCggF,GACP,IACMmhT,EADa,EAAKl2D,aAAai2D,GAA2BlhT,GAC1Bx2E,MAAM,KACtC43X,EAAqBxrB,EAAkBr+V,MAAK,SAACzI,GACjD,OAAOA,EAAQyP,SAAR,iBAAuCzP,EAAQyP,SAAR,mBACxCzP,EAAQyP,SAAR,OAA2B,KAAOve,GACnC8O,EAAQyP,SAAR,gBAAoC,KAAO4iX,EAAmB,IAC9DryX,EAAQyP,SAAR,iBAAqC,KAAO4iX,EAAmB,IAC/DryX,EAAQyP,SAAR,WAA+B,KAAO4iX,EAAmB,MAE5DC,GACF7uS,EAAmB/xF,KAAK4gY,IAXnBphT,EAAI,EAAGA,GAAK,EAAKirP,aAAai2D,GAA2BhhY,OAAS,EAAG8/E,IAAM,EAA3EA,IAFFhgF,EAAI,EAAGA,GAAKyL,KAAKw/T,aAAa/qU,OAAQF,IAAM,EAA5CA,GAoBTuyF,EAAmB1oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAGtC,OAAOgE,I,+CAIP,OAAO9mF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcrT,SAAnB,QACqB,MAA7C9S,KAAKmmB,cAAcrT,SAAnB,OAAsC,O,iCAnM1B4wO,G,iMCJrB,Q,IACA,OACA,S,IACA,M,uDAEqBN,E,YACnB,WAAYtkK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAKsnE,eAAgB,EACrB,EAAKumR,cAAgB,EACjBzqR,IACF,EAAK0gP,aAAL,yBACA,EAAKvH,iBAAmB,OACxB,EAAKF,WAAa,CAAC,CACjBthU,KAAM,UACNk9M,YAAa,CAAC,MAAO,MAAO,MAAO,MAAM,MAAO,UAbjB,E,2EAkBhChwM,GACH,IAAM6a,EAAQ7a,EAAUmP,UAAYnP,EAAUmP,SAAV,MAC9B7c,EAAS0N,EAAUmP,UAAYnP,EAAUmP,SAAV,OACrC,GAAI7c,GAAwB,MAAdA,EAAO,GACnB,sGAAmB0N,EAAW,IAAIy/O,GAAW,EAAO,OAAM,EAAM,eAC3D,GAAI5kO,EAAO,CAChB7a,EAAU4M,YAAc5M,EAAU4M,YAAY5R,QAAQ,YAAa,MAAMA,QAAQ,SAAU,IAC3F,IAAMskF,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGAAmBnP,EAAW,IAAIy/O,GAAW,EAAOngK,IAClD,EAAqB,IAAfA,EAAmB,WAAa,iBAE1C,sGAAmBt/E,EAAW,IAAIy/O,K,yCAGjBvtM,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACpG0xS,EAA0B51X,KAAKU,YAAYm1X,6BAC3CC,EAAkB,CACtB,0CACA,0CACA,2CACA,+CACA,+CACA,iDAmBF,OAjBAzxS,EAAoBA,EACjBr9E,QAAO,SAAC3D,GACP,OAAOA,EAAQyP,SAAR,WAAiCzP,EAAQyP,SAAR,UAA8B3Y,SAASy7X,MAEhF5uX,QAAO,SAAC3D,GACP,OAAIA,EAAQyP,SAAR,QACwC,MAAlCzP,EAAQyP,SAAR,OAA2B,IAA8C,MAAhCzP,EAAQyP,SAAR,KAAyB,MAI7E9L,QAAO,SAAC3D,GACP,QAAIA,EAAQwY,SAAS1hB,SAAS,6BAA+B27X,EAAgB37X,SAASkJ,EAAQwY,eAMzE/T,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,qCAItElP,KAAK8iF,WACP9iF,KAAK8iF,UAAW,EAChB9iF,KAAK4yF,mB,sCAIO,WACd5yF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMsvF,EAAYpyK,KAAKU,YAAY0xK,UAC/BA,IACFA,EAAUtvF,SAAW9iF,KAAK8iF,UAE5B,IAAMqvF,EAAenyK,KAAKU,YAAYyxK,aAClCA,IACFA,EAAarvF,SAAW9iF,KAAK8iF,Y,qEAIfnuE,G,kBAAc6kG,E,uDAAY,G,0EACpCjgH,EAASyG,KAAKU,YACdwa,EAAS3hB,EAAOmH,YAAYwa,OAC5Bo5B,EAAap5B,EAAOsD,MAAP,OAAyBtD,EAAOsD,MAAP,MAAsB81B,cAC5DyhV,EAA0BzhV,EAAaA,EAAWnuB,cAAgB,OAEzCmuB,EAAWmgV,kBAAkBsB,IAA4B/1X,KAAK8S,SAAL,e,oBAChF8hX,EAAemB,EAAwB/zS,yCACvCxB,EAAa,CAAC,CAClBU,SAAU,gBACVI,UAAWthF,KAAK8S,SAAL,gBAERijX,EAAwBp1S,gCAAgCH,G,qBACrDw1S,EAAgB1hV,EAAWugV,sBAAsBD,KAChCoB,EAAcr1S,gCAAgCH,G,kCAC7DlsC,EAAWogV,iBAAiBE,G,SAKxC,qGAAkBjgX,EAAc6kG,GAChCjgH,EAAOutF,mBAAqBvtF,EAAOuuF,wBAEnC9nF,KAAK4mF,iB,uIAGWw2R,GAChB,OAAOA,EAAgBp2W,QAAO,SAAAq2W,GAAA,OAAgD,IAA9BA,EAAep6R,gB,6CAK/D,MAAO,CAAC,CACN/B,SAAU,aACVI,UAHoBthF,KAAKU,YAGAwa,OAAOqmE,mC,gCAO1B0F,GAAU,WAClB,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASgrF,QAAQmxE,WAC1B2qI,EAAU9mS,EAASgrF,QAAQsxE,YAC3BgyI,EAAYtuS,EAASgrF,QAAQoxE,oBAC7B4yI,EAAahvS,EAASgrF,QAAQuxE,qBAChCxjP,KAAKmmB,gBACHnmB,KAAKmmB,cAAcrT,SAAnB,QAAsF,MAA7C9S,KAAKmmB,cAAcrT,SAAnB,OAAsC,GACjF9S,KAAKmmB,cAAc0gE,MAAMO,OAASmuS,EAElCv1X,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAGlCpnF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/B,GAAIA,GAAqBA,EAAkBF,MACzC,GAAIE,EAAkBj0E,SAAlB,SAAyCi0E,EAAkBj0E,SAAlB,KAAoC,CAC/E,IAAM7c,EAAS8wF,EAAkBj0E,SAAlB,OAAqC,GAC9CmuT,EAAal6O,EAAkBj0E,SAAlB,WAAyC,GAC5Di0E,EAAkBF,MAAMO,OAASH,EAASgrF,QAAQkyE,kBAAkBluP,EAAO,IAAIgrU,QACtE,EAAK96S,cAAcrT,SAAnB,QAAsF,MAA7C,EAAKqT,cAAcrT,SAAnB,OAAsC,GACxFi0E,EAAkBF,MAAMO,OAAS6uS,EAEjClvS,EAAkBF,MAAMO,OAAS2mS,Q,uCAoB5B1qX,GAAyC,WAAhCpN,EAAgC,uDAAvB,IAAKgrU,EAAkB,uDAAL,IAE7Ci1D,EAAwB7yX,EAAQM,UAAUkS,eAChD,IAAKqgX,EACH,OAAO,EAGT,IAAMlgX,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5CD,EAAcC,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,eAAfA,EAAMxf,QACrD,IAAKsf,EACH,OAAO,EAGT,IAAM8hT,EAAmB5hU,EAAS,IAAMgrU,EAExC,IAAIjhU,KAAK+3T,WAAWtjU,OAYb,CACL,IAAM0rB,EAASpK,EAAYI,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIv1F,QAAU,EAAK+gU,oBACjE,OAAO93S,GAAU+1W,EAAsBngX,EAAY/N,KAAOkuX,EAAsBngX,EAAY/N,IAAI7N,SAASgmB,EAAOnY,IAbhH,IAD0B,eACjBzT,GACP,IAAMujU,EAAkB,EAAKC,WAAWxjU,GAClC4rB,EAASpK,EAAYI,OAAOrK,MAAK,SAAA2gF,GACrC,OAAQqrO,EAAgBnkH,YAAYx5M,SAAS09T,GACzCprO,EAAIv1F,QAAU4gU,EAAgBrhU,KAC9Bg2F,EAAIv1F,QAAU,EAAK+gU,oBAIzB,SAAO93S,GAAU+1W,EAAsBngX,EAAY/N,KAAOkuX,EAAsBngX,EAAY/N,IAAI7N,SAASgmB,EAAOnY,MATzGzT,EAAI,EAAGA,GAAKyL,KAAK+3T,WAAWtjU,OAAS,EAAGF,IAAK,SAA7CA,GAA6C,sE,gCAiBhD2mB,GACJlb,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBACjFzgF,KAAKkmF,gCACL,mGAAgBhrE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,M,mDAIyC,IAAlC2C,EAAkC,uDAApB7d,KAAKmmB,cACtC66D,EAAoBhhF,KAAKygF,uBACzB40S,EAAgBx3W,EAAY/K,SAAZ,UAAoC+K,EAAY/K,SAAZ,UAAkC,GAAK,KAC3FkwG,EAAgBnlG,EAAY/K,SAAZ,cAAwC+K,EAAY/K,SAAZ,cAAsC,GAAK,KACnGwiX,EAAUz3W,EAAY/K,SAAZ,QAAkC+K,EAAY/K,SAAZ,QAAgC,GAAK,KAmBvF,OAlBIuiX,GACFr0S,EAAkBjsF,KAAK,CACrBmsF,SAAU,YACVI,UAAW+zS,IAGXryQ,GACFhiC,EAAkBjsF,KAAK,CACrBmsF,SAAU,gBACVI,UAAW0hC,IAGXsyQ,GACFt0S,EAAkBjsF,KAAK,CACrBmsF,SAAU,UACVI,UAAWg0S,IAGRt0S,I,8CAG6E,WAAhEnjE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAC5Eb,EAAqB9mF,KAAK+nF,8CAA8ClqE,EAAa8pE,GAWzF,OAVI9pE,GAAeA,EAAY/K,SAAZ,SACjBg0E,0BAAyBA,IAAzB,aAAgD9mF,KAAKm2X,2BAA2Bt4W,KAC5EA,EAAY/K,SAAZ,WAAqC+K,EAAY/K,SAAZ,UAAkC3Y,SAAS,UAClF2sF,EAAqBA,EAAmB9/E,QAAO,SAAAovX,GAAA,OAASA,EAAMtjX,SAAN,SAClDsjX,EAAMtjX,SAAN,OAAyB3Y,SAAS,SAE1C2sF,EAAmB1oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,aAG/BgE,I,mDAUP,IAP2D,WAAlCjpE,EAAkC,uDAApB7d,KAAKmmB,cACxC2gE,EAAqB,GACnBvD,EAAc1lE,EAAYglE,uBAC1BsnR,EAAoBnqW,KAAK2zM,YAAY3sM,QAAO,SAACoX,GAEjD,OAAOmlE,IAAgBnlE,EAAeykE,0BALmB,WAOlDtuF,GAEP,IADA,IAAMkhY,EAA4BlhY,EAAI,EARmB,WAShDggF,GACP,IACMmhT,EADa,EAAKl2D,aAAai2D,GAA2BlhT,GAC1Bx2E,MAAM,KACtC43X,EAAqBxrB,EAAkBr+V,MAAK,SAACzI,GACjD,OAAQA,EAAQyP,SAAR,OAA2B,KAAOve,GACrC8O,EAAQyP,SAAR,gBAAoC,KAAO4iX,EAAmB,IAC9DryX,EAAQyP,SAAR,iBAAqC,KAAO4iX,EAAmB,IAC/DryX,EAAQyP,SAAR,WAA+B,KAAO4iX,EAAmB,IACzD,EAAKW,iBAAiBhzX,EAASA,EAAQyP,SAAR,OAA2B,GAAI4iX,EAAmB,OAEpFC,GACF7uS,EAAmB/xF,KAAK4gY,IAXnBphT,EAAI,EAAGA,GAAK,EAAKirP,aAAai2D,GAA2BhhY,OAAS,EAAG8/E,IAAM,EAA3EA,IAFFhgF,EAAI,EAAGA,GAAKyL,KAAKw/T,aAAa/qU,OAAQF,IAAM,EAA5CA,GAoBT,OAAOuyF,I,sDAGuBwvS,GAC9B,IACMvgX,EADe,UAAM5T,WAAW4S,YAAYiB,aACjBlK,MAAK,SAAAmK,GAAA,MAAwB,eAAfA,EAAMxf,QACrD,MAAO,CACLsf,cACAoK,OAAQpK,GAAeA,EAAYI,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIv1F,QAAUo/X,Q,yDAatE,IAT2E,WAA5Cr1D,EAA4C,uDAA/B,MAAOq1D,EAAwB,uDAAR,OAC7D/yS,EAAcvjF,KAAKmmB,cAAc08D,uBACjCsnR,EAAoBnqW,KAAK2zM,YAAY3sM,QAAO,SAACoX,GAEjD,OAAOmlE,IAAgBnlE,EAAeykE,0BAElC6yS,EAAqBz0D,EAAWljU,MAAM,KACtC+uF,EAAe9sF,KAAKu2X,gCAAgCD,GAPiB,WASlE/hY,GAEP,IADA,IAAMkhY,EAA4BlhY,EAAI,EAC7BggF,EAAI,EAAGA,GAAK,EAAKirP,aAAai2D,GAA2BhhY,OAAS,EAAG8/E,IAAM,CAClF,IAAMohT,EAAqBxrB,EAAkBr+V,MAAK,SAACzI,GAEjD,QAAKA,EAAQM,UAAUkS,eAAei3E,EAAa/2E,YAAY/N,OAKvD3E,EAAQyP,SAAR,OAA2B,KAAOve,GACrC8O,EAAQyP,SAAR,gBAAoC,KAAO4iX,EAAmB,IAC9DryX,EAAQyP,SAAR,iBAAqC,KAAO4iX,EAAmB,IAC/DryX,EAAQyP,SAAR,WAA+B,KAAO4iX,EAAmB,IACzD5oS,EAAa/2E,aAAe+2E,EAAa3sE,QAC5C9c,EAAQM,UAAUkS,eAAei3E,EAAa/2E,YAAY/N,IAAI7N,SAAS2yF,EAAa3sE,OAAOnY,QAE/F,GAAI2tX,EACF,SAAOA,KAlBJphY,EAAI,EAAGA,GAAKyL,KAAKw/T,aAAa/qU,OAAQF,IAAM,SAA5CA,GAA4C,sE,+CAyBrD,OAAOyL,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcrT,SAAnB,QACqB,MAA7C9S,KAAKmmB,cAAcrT,SAAnB,OAAsC,O,iCAxU1BswO,G,qJCLrB,Q,IACA,O,IACA,Q,IACA,Q,IACA,M,uDAEqBE,E,YACnB,WAAYxkK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKmnE,eAAgB,EACrB,EAAKumR,cAAgB,EACrB,EAAK3tV,OAAS,gBACd,EAAKF,YAAc,2CARgB,E,qEAWhC/X,GAQH,GAPKA,EAAUmP,SAAV,gBACHnP,EAAUmP,SAAV,cAAsC,CAAC,QAEpCnP,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,CAAC,QAEtBnP,EAAUmP,UAAYnP,EAAUmP,SAAV,MACzB,CACT,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGAAmBnP,EAAW,IAAI2/O,GAAa,EAAOrgK,IACpD,EAAqB,IAAfA,EAAmB,WAAa,iBAExC,sGAAmBt/E,EAAW,IAAI2/O,K,sCAItB,WACdtjP,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMqP,EAAanyF,KAAKU,YAAYyxF,WACpC,GAAIA,GAAcA,EAAWrP,WAAa9iF,KAAK8iF,SAAU,CACvDqP,EAAWrP,SAAW9iF,KAAK8iF,SAC3BqP,EAAWrL,mBAAmB1oF,SAAQ,SAAC2oF,GACrCA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMsvF,EAAYpyK,KAAKU,YAAY0xK,UAC/BA,IACFA,EAAUtvF,SAAW9iF,KAAK8iF,a,kCAKpBnuE,GACV,IAAMpb,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,GAClBpb,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAO44K,aAAahsJ,cAAgBnmB,KAEtCA,KAAK4mF,mB,wCAGWw2R,GAChB,OAAOA,EAAgBp2W,QAAO,SAAAq2W,GAAA,OAAgD,IAA9BA,EAAep6R,gB,yCAG9CptC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GAE1G,OADAG,EAAoBrkF,KAAKw2X,uCAAuCnyS,IACvCv8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,6DAGrCu5E,GAAkB,WAEjD0J,EADgBnyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IAC3BmqF,WAEjC,GAAIA,GAAcA,EAAWhsE,eAAiBgsE,EAAWhsE,cAAcxiB,WAAawuF,EAAWhsE,cAAcxiB,UAAUkS,eAAgB,CACrI,IAAM4gX,EAA0BtkS,EAAWhsE,cAAcxiB,UAAUkS,eAC7DG,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5C0gX,EAAiB1gX,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,aAAfA,EAAMxf,QAClDkgY,EAAmB3gX,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,eAAfA,EAAMxf,QAE1D,OAAOgyF,EAAiBzhF,QAAO,SAACoX,GAC9B,OAAOs4W,GAAkBC,GAAoB,EAAKC,yBAAyBx4W,EAAgBq4W,EAAyB,CAClHC,EAAgBC,OAItB,OAAOluS,I,gCAGCvtE,GAER,IAAMi3E,EAAanyF,KAAKU,YAAYyxF,YAChCA,IAAeA,EAAWrP,UAAaqP,EAAWsnF,oBAKlDz5K,KAAKmmB,eAAiBnmB,KAAK62X,+BACzB72X,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC5DzgF,KAAKkmF,gCACL,mGAAgBhrE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,KAVhB,uG,oDAeF,IACMi3E,EADgBnyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IAC3BmqF,WAEjC,GAAIA,GAAcA,EAAWhsE,eAAiBgsE,EAAWhsE,cAAcxiB,WAAawuF,EAAWhsE,cAAcxiB,UAAUkS,eAAgB,CACrI,IAAM4gX,EAA0BtkS,EAAWhsE,cAAcxiB,UAAUkS,eAC7DG,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5C0gX,EAAiB1gX,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,aAAfA,EAAMxf,QAClDkgY,EAAmB3gX,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,eAAfA,EAAMxf,QAC1D,OAAOigY,GAAkBC,GAAoB32X,KAAK42X,yBAAyB52X,KAAKmmB,cAAeswW,EAAyB,CACtHC,EAAgBC,KACZ32X,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,wBAEhE,OAAOzgF,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,0B,mCAGpD,WACLgI,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BACpFq2S,EAAsC92X,KAAKw2X,uCAAuC/tS,GACxFzoF,KAAKmmB,cAAgB2wW,EAAoC,IAAM,KAC/D92X,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,6CAI/B,IAAMoK,EAAgBlyF,KAAKU,YACvBsiH,EAAgB,CAAC,OAMrB,OALI9wB,EAAcC,YAAcD,EAAcC,WAAWhsE,eACnD+rE,EAAcC,WAAWhsE,cAAcrT,SAAvC,gBACFkwG,EAAgB9wB,EAAcC,WAAWhsE,cAAcrT,SAAvC,cAAiE,IAG9E,CAAC,CACNouE,SAAU,gBACVI,UAAW0hC,GACV,CACD9hC,SAAU,YACVI,UAAW4Q,EAAc2jS,8BACxB,CACD30S,SAAU,aACVI,UAAW4Q,EAAch3E,OAAOqmE,mC,mDAKlC,IAAIw1S,EAAW,CAAC,OACV7kS,EAAgBlyF,KAAKU,YACrBs2X,EAAwD,SAA/C9kS,EAAc2jS,6BACvBoB,EAA6D,cAA/C/kS,EAAc2jS,6BAC5BziK,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IACzDgvX,GAAU5jK,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKrrB,eACtDitM,EAAgB5hL,KAAKrrB,cAAcrT,UAAYsgN,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,WAClDikX,EAAW3jK,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,SAAwD,IAErE,IAAM0tE,EAAaxgF,KAAKygF,uBAKxB,OAJAD,EAAWzrF,KAAK,CACdmsF,SAAU,WACVI,UAAW21S,EAAc,OAASF,IAE7Bv2S,I,8CAG6E,IAAhE3iE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,OAAO3nF,KAAK+nF,8CAA8ClqE,EAAa8pE,K,gCAG/DV,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASgrF,QAAQqxE,aAC1ByqI,EAAU9mS,EAASgrF,QAAQwxE,cAC7BzjP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAErCpnF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC5BA,GAAqBA,EAAkBF,QAAOE,EAAkBF,MAAMO,OAAS2mS,W,iCAtLvEzqI,G,4MCJAoB,E,YACnB,WAAY5lK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,sCAJA,E,qEAOhB/X,GACH,sGAAmBA,EAAW,IAAI+gP,K,gCAG1BxpO,GACR,OAAIlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,K,6CAQzB,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASo9J,WAAWK,OAC/B1kP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GAtC/C,M,4BAEqBs9J,G,4MCAAC,E,YACnB,WAAY7lK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAK0U,SAAU,EAJI,E,qEAOhB5sB,GACH,sGAAmBA,EAAW,IAAIghP,K,gCAG1BzpO,GAER,IAAMmtG,EAASroH,KAAKU,YAAY2nH,OAChC,IAAIA,IAAUA,EAAOvlC,SAKrB,OAAI9iF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,mCAaS,WACLutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1FzgF,KAAKmmB,cAAgBsiE,EAAiB,K,6CAItC,MAAO,CAAC,CACNvH,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASo9J,WAAWM,kB,GA7C5D,M,4BAEqBA,G,oKCFrB,QAEA,Q,IACA,O,IACA,Q,IACA,MACA,QACA,Q,uDAEqBJ,E,YACnB,WAAYzlK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,OACd,EAAKuV,SAAW,OAChB,EAAKmnE,eAAgB,EACrB,EAAKtnE,YAAc,oCALA,E,qEAQhB/X,GAQH,OAPAA,EAAUmP,SAASi6K,UAAY,CAAC,QAC3BppL,EAAUmP,SAAV,gBACHnP,EAAUmP,SAAV,cAAsC,CAAC,EAAAqlB,SAASC,MAE7Cz0B,EAAUmP,SAAV,UACHnP,EAAUmP,SAAV,QAAgC,CAAC,EAAAqlB,SAASC,OAE5C,+FAAmBz0B,EAAW,IAAI4gP,K,kCAGxB5vO,GAEV,IADA,qGAAkBA,IACb3U,KAAK4jF,4BAA6B,IAAAlvE,oBAAmB1U,KAAM2U,GAAe,CAC7E,IAEMu9E,EAFSlyF,KAAKU,YACWA,YACOwa,OAAOsD,MAAM,UAAQxW,IAC3D,GAAIkqF,GAAiBA,EAAcC,YAAcD,EAAcC,WAAWhsE,eACtB,SAA/C+rE,EAAc2jS,6BAAyC,CAC1D,IAAMqB,EAAuBhlS,EAAcC,WAAW1R,uBACtDy2S,EAAqBniY,KAAK,CACxBmsF,SAAU,YACVI,UAAW,SAEb,IAAM61S,GAAmBA,EAAnBA,sIACJD,EACAhlS,EAAcC,WAAWxQ,UAE3B,GAAIw1S,EAAiB1iY,OAAQ,CAC3B,IAAM0gH,EAAcjjB,EAAcC,WAAWhsE,cAActK,SAAS9d,MAAM,cAAc,IAChEo5X,EAAiBrrX,MAAK,SAAAynN,GAC5C,OAAOA,EAAQ13M,SAAS9d,MAAM,SAAS,KAAOo3G,MAE5BgiR,EAAiB,IAAI1wR,YAAY9xF,IAGzD3U,KAAK4mF,oB,yCAIU/wC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GAK9G,OAJAG,0BACKrkF,KAAKw2X,uCAAuCnyS,KADjD,aAEKrkF,KAAKo3X,+BAA+B/yS,MAElC,aAAOA,GAAmB,SAAChhF,GAAD,OAAaA,EAAQM,UAAUqE,MAC7DF,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAG5CgM,GAAQ,WACVg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACxDkqF,GAAgE,cAA/CA,EAAc2jS,8BACjC,sGAIE71X,KAAKmmB,gBACLnmB,KAAK62X,+BAAiC72X,KAAKo3X,iCACxCn3X,MAAK,SAAAoD,GAAA,OAAWA,EAAQM,UAAUqE,KAAO,EAAKme,cAAcxiB,UAAUqE,OACrEhI,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFL,mGAAgBlrE,M,oDAQlB,IACMi3E,EADgBnyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IAC3BmqF,WAEjC,GAAIA,GAAcA,EAAWhsE,eAAiBgsE,EAAWhsE,cAAcxiB,WAAawuF,EAAWhsE,cAAcxiB,UAAUkS,eAAgB,CACrI,IAAM4gX,EAA0BtkS,EAAWhsE,cAAcxiB,UAAUkS,eAC7DG,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5C0gX,EAAiB1gX,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,aAAfA,EAAMxf,QAClDkgY,EAAmB3gX,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,eAAfA,EAAMxf,QAC1D,OAAOigY,GAAkBC,GAAoB32X,KAAK42X,yBAAyB52X,KAAKmmB,cAAeswW,EAAyB,CACtHC,EAAgBC,IAGpB,OAAO32X,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,0B,mCAGpD,WACLgI,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BACpFq2S,EAAsC92X,KAAKw2X,uCAAuC/tS,GAClF4uS,EAA8Br3X,KAAKo3X,+BAA+B3uS,GACpEquS,EAAoCriY,OACtCuL,KAAKmmB,cAAgB2wW,EAAoC,GAIvD92X,KAAKmmB,cAAgBkxW,EAA4B,IAAM5uS,EAAiB,IAAM,O,uDAKnB,IAAlCA,EAAkC,uDAAfzoF,KAAK2hF,SACrD,OAAO8G,EAAiBzhF,QAAO,SAAC3D,GAC9B,OAAOA,EAAQM,UAAUmP,SAAlB,cAA4C3Y,SAAS,EAAAg+B,SAASC,MAChE/0B,EAAQM,UAAUmP,SAAlB,QAAsC3Y,SAAS,EAAAg+B,SAASC,U,6DAI1BqwD,GAAkB,WAEjD0J,EADgBnyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IAC3BmqF,WAEjC,GAAIA,GAAcA,EAAWhsE,eAAiBgsE,EAAWhsE,cAAcxiB,WAAawuF,EAAWhsE,cAAcxiB,UAAUkS,eAAgB,CACrI,IAAM4gX,EAA0BtkS,EAAWhsE,cAAcxiB,UAAUkS,eAC7DG,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5C0gX,EAAiB1gX,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,aAAfA,EAAMxf,QAClDkgY,EAAmB3gX,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,eAAfA,EAAMxf,QAE1D,OAAOgyF,EAAiBzhF,QAAO,SAACoX,GAC9B,OAAOs4W,GAAkBC,GAAoB,EAAKC,yBAAyBx4W,EAAgBq4W,EAAyB,CAClHC,EAAgBC,OAItB,OAAOluS,I,2CAGY6uS,GACnB,IAAMplS,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtDw4E,EAAa,CAAC,CAClBU,SAAU,UACVI,UAAW4Q,EAAcqlS,qBACzB,CACAr2S,SAAU,gBACVI,UAAW4Q,EAAcslS,8BAQ3B,OANKF,GACH92S,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW4Q,EAAc2jS,+BAGtBr1S,I,gCAGCyG,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASo9J,WAAWE,KAC/BvkP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCA/J1Bm9J,G,4MCPAC,E,YACnB,WAAY1lK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,0CAJA,E,qEAOhB/X,GACH,sGAAmBA,EAAW,IAAI6gP,K,gCAG1Bv9J,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASo9J,WAAWG,WAC/BxkP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GArB/C,M,4BAEqBo9J,G,qJCFrB,Q,IACA,O,IACA,Q,uDAEqBF,E,YACnB,WAAYxlK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,yCAJA,E,qEAOhB/X,GAEH,OADAA,EAAUmP,SAASi6K,UAAY,CAAC,cAChC,+FAAmBppL,EAAW,IAAI2gP,K,kCAGxB3vO,GAAc,WAClBpb,EAASyG,KAAKU,aACpB,qGAAkBiU,GAElB,IACMu9E,EADkB34F,EAAOmH,YACOwa,OAAOsD,MAAM,UAAQxW,IAC3D,GAAIkqF,GAAiBA,EAAcC,YAAcD,EAAcC,WAAWhsE,eACtB,cAA/C+rE,EAAc2jS,6BAA8C,CAC/D,IAAMqB,EAAuBhlS,EAAcC,WAAW1R,uBACtDy2S,EAAqBniY,KAAK,CACxBmsF,SAAU,YACVI,UAAW,cAEb,IAAM61S,GAAmBA,EAAnBA,sIACJD,EACAhlS,EAAcC,WAAWxQ,UAE3B,GAAIw1S,EAAiB1iY,OAAQ,CAC3B,IAAM0gH,EAAcjjB,EAAcC,WAAWhsE,cAAc1G,0BACnC03W,EAAiBrrX,MAAK,SAAAynN,GAC5C,OAAOA,EAAQ9zM,2BAA6B01F,MAE1BgiR,EAAiB,IAAI1wR,YAAY9xF,IAIzD,GAAIu9E,GAAiBA,EAAcC,YAAcD,EAAcC,WAAWrP,WAAa9iF,KAAK8iF,SAAU,CACpGoP,EAAcC,WAAWrP,SAAW9iF,KAAK8iF,SACzCoP,EAAcC,WAAWrL,mBAAmB1oF,SAAQ,SAAC2oF,GACnDA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMsvF,EAAYlgF,EAAckgF,UAC5BA,IACFA,EAAUtvF,SAAW9iF,KAAK8iF,UAI9B9iF,KAAK4mF,mB,yCAGY/wC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GACvFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtDmqF,EAAaD,GAAiBA,EAAcC,YAC9CA,IAAeA,EAAWrP,UAAaqP,EAAWsnF,qBAKlDz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAGxDhnF,KAAKomF,cAFL,mGAAgBlrE,KANhB,uG,2CAaiBu8W,GACnB,OAAOA,EACH,GACA,CAAC,CACDv2S,SAAU,YACVI,UAAWthF,KAAKU,YAAYwa,OAAOsD,MAAxB,QAAyCq3W,iC,gCAIhD5uS,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASo9J,WAAWC,UAC/BtkP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCA7F1Bk9J,G,qJCJrB,QACA,Q,IACA,Q,uDAEqBG,E,YACnB,WAAY3lK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,QACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,qCAJA,E,qEAOhB/X,GACH,QAAIA,EAAUmP,UAAYnP,EAAUmP,SAAV,YACpBnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWE,eAG1D,+FAAmB73F,EAAW,IAAI8gP,K,gCAG1BvpO,GAER,IAAMg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACxDkqF,GAAiBA,EAAcK,eAAiBL,EAAcK,cAAcpsE,eAC3E+rE,EAAcK,cAAcpsE,cAAcrT,SAA1C,WACAo/E,EAAcK,cAAcpsE,cAAcrT,SAA1C,UAAgE3Y,SAAS,SAC5E,sGAIE6F,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAGxDhnF,KAAKomF,cAFL,mGAAgBlrE,M,6CAQlB,MAAO,K,gCAGC+rE,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASo9J,WAAWI,MAC/BzkP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCA9C1Bq9J,G,qJCJrB,Q,IACA,O,IACA,Q,uDAEqBX,E,YAEnB,WAAYhlK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKmnE,eAAgB,EACrB,EAAKumR,cAAgB,EACrB,EAAK7tV,YAAc,wCAPgB,E,qEAUhC/X,GAWH,GAVKA,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,CAAC,QAE/BnP,EAAUmP,SAAV,gBACHnP,EAAUmP,SAAV,cAAsC,CAAC,QAEpCnP,EAAUmP,SAAV,UACHnP,EAAUmP,SAAV,QAAgC,CAAC,QAErBnP,EAAUmP,UAAYnP,EAAUmP,SAAV,MACzB,CACT,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGAAmBnP,EAAW,IAAImgP,GAAU,EAAO7gK,IACjD,EAAqB,IAAfA,EAAmB,WAAa,iBAExC,sGAAmBt/E,EAAW,IAAImgP,K,sCAItB,WACR3xJ,EAAanyF,KAAKU,YAAYyxF,WACpC,GAAIA,GAAcA,EAAWrP,WAAa9iF,KAAK8iF,SAAU,CACvDqP,EAAWrP,SAAW9iF,KAAK8iF,SAC3BqP,EAAWrL,mBAAmB1oF,SAAQ,SAAC2oF,GACrCA,EAAkBjE,SAAW,EAAKA,YAEpC,IAAMqvF,EAAenyK,KAAKU,YAAYyxK,aAClCA,IACFA,EAAarvF,SAAW9iF,KAAK8iF,a,yCAKhBjtC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GACxGiO,EAAanyF,KAAKU,YAAYyxF,WACpC,OAAIA,GAAcA,EAAWhsE,eAAiBgsE,EAAWhsE,cAActK,SAAS1hB,SAAS,2BAChF,GAEFkqF,EAAkBv8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMi3E,EAAanyF,KAAKU,YAAYyxF,WAChCA,IAAeA,EAAWrP,WAAaqP,EAAWsnF,sBAChDtnF,GAAcA,EAAWhsE,eAAiBgsE,EAAWhsE,cAActK,SAAS1hB,SAAS,4BACzF,qGAGE6F,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBACjFzgF,KAAKkmF,gCACL,mGAAgBhrE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,M,6CAMlB,IAAMg3E,EAAgBlyF,KAAKU,YACvBsiH,EAAgB,CAAC,OACjBsyQ,EAAU,CAAC,OAUf,OATIpjS,EAAcC,YAAcD,EAAcC,WAAWhsE,gBACnD+rE,EAAcC,WAAWhsE,cAAcrT,SAAvC,gBACFkwG,EAAgB9wB,EAAcC,WAAWhsE,cAAcrT,SAAvC,cAAiE,IAE/Eo/E,EAAcC,WAAWhsE,cAAcrT,SAAvC,UACFwiX,EAAUpjS,EAAcC,WAAWhsE,cAAcrT,SAAvC,QAA2D,KAIlE,CAAC,CACNouE,SAAU,YACVI,UAAW4Q,EAAc2jS,8BACxB,CACD30S,SAAU,aACVI,UAAW4Q,EAAch3E,OAAOqmE,gCAChC,CACAL,SAAU,gBACVI,UAAW0hC,GACX,CACA9hC,SAAU,UACVI,UAAWg0S,M,mDAKb,IAAIyB,EAAW,CAAC,OACV7kS,EAAgBlyF,KAAKU,YACrBs2X,EAAwD,SAA/C9kS,EAAc2jS,6BACvBziK,EAAkBlhI,EAAch3E,OAAOsD,MAAM,UAAUxW,IACzDgvX,GAAU5jK,EAAgB5hL,MAAQ4hL,EAAgB5hL,KAAKrrB,eACtDitM,EAAgB5hL,KAAKrrB,cAAcrT,UAAYsgN,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,WAClDikX,EAAW3jK,EAAgB5hL,KAAKrrB,cAAcrT,SAAnC,SAAwD,IAErE,IAAM0tE,EAAaxgF,KAAKygF,uBAKxB,OAJAD,EAAWzrF,KAAK,CACdmsF,SAAU,WACVI,UAAWy1S,IAENv2S,I,mCAGI,WACLiI,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC7DzgF,KAAKimG,uBAAuBxd,EAAkB,QAEzEzoF,KAAKmmB,cAAgBsiE,EAAiB,IAExCzoF,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,8CAGqD,IAAhEjqE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,OAAO3nF,KAAK+nF,8CAA8ClqE,EAAa8pE,K,gCAG/DV,GACR,GAAIA,EAAU,CACZ,IAAMG,EAASH,EAASgrF,QAAQ6xE,UAC1BiqI,EAAU9mS,EAASgrF,QAAQ8xE,WAC7B/jP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC3BA,GAAqBA,EAAkBF,QACzCE,EAAkBF,MAAMO,OAAS2mS,W,iCA9IxBjqI,G,qJCJrB,Q,IACA,O,uDAEqBE,E,YAEnB,WAAYllK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAKsnE,eAAgB,EACrB,EAAKumR,cAAgB,EAPc,E,qEAUhC5lW,GAWH,GAVKA,EAAUmP,SAAV,gBACHnP,EAAUmP,SAAV,cAAsC,CAAC,QAEpCnP,EAAUmP,SAAV,UACHnP,EAAUmP,SAAV,QAAgC,CAAC,QAE9BnP,EAAUmP,SAAV,YACHnP,EAAUmP,SAAV,UAAkC,CAAC,QAEvBnP,EAAUmP,UAAYnP,EAAUmP,SAAV,MACzB,CACT,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGAAmBnP,EAAW,IAAIqgP,GAAa,EAAO/gK,IACpD,EAAqB,IAAfA,EAAmB,WAAa,iBAExC,sGAAmBt/E,EAAW,IAAIqgP,K,yCAInBnuM,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GACvFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMq3E,EAAgBvyF,KAAKU,YAAY6xF,eACnCA,IAAkBA,EAAczP,UAAayP,EAAcknF,oBAK3Dz5K,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBACjFzgF,KAAKkmF,gCACL,mGAAgBhrE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,KAThB,uG,6CAcF,IAAMg3E,EAAgBlyF,KAAKU,YACvBsiH,EAAgB,CAAC,OACjBsyQ,EAAU,CAAC,OASf,OARIpjS,EAAcK,eAAiBL,EAAcK,cAAcpsE,gBACzD+rE,EAAcK,cAAcpsE,cAAcrT,SAA1C,gBACFkwG,EAAgB9wB,EAAcK,cAAcpsE,cAAcrT,SAA1C,cAAoE,IAElFo/E,EAAcK,cAAcpsE,cAAcrT,SAA1C,UACFwiX,EAAUpjS,EAAcK,cAAcpsE,cAAcrT,SAA1C,QAA8D,KAGrE,CAAC,CACNouE,SAAU,YACVI,UAAW4Q,EAAcwlS,iCACxB,CACDx2S,SAAU,aACVI,UAAW4Q,EAAch3E,OAAOqmE,gCAChC,CACAL,SAAU,gBACVI,UAAW0hC,GACX,CACA9hC,SAAU,UACVI,UAAWg0S,M,mCAIF,WACL7sS,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC7DzgF,KAAKimG,uBAAuBxd,EAAkB,QAEzEzoF,KAAKmmB,cAAgBsiE,EAAiB,IAExCzoF,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,mDAI/B,OAAO9nF,KAAKygF,yB,8CAGwE,IAAhE5iE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,OAAO3nF,KAAK+nF,8CAA8ClqE,EAAa8pE,K,gCAG/DV,GACR,GAAIA,EAAU,CACZ,IAAMG,EAASH,EAASgrF,QAAQ+xE,aAC1B+pI,EAAU9mS,EAASgrF,QAAQgyE,cAC7BjkP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC3BA,GAAqBA,EAAkBF,QACzCE,EAAkBF,MAAMO,OAAS2mS,W,iCA7GxB/pI,G,4MCDAf,E,YACnB,WAAYnkK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAK0U,SAAU,EACf,EAAKg5U,cAAgB,EANc,E,qEAShC5lW,GAEH,GADcA,EAAUmP,UAAYnP,EAAUmP,SAAV,MACzB,CACT,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,sGAAmBnP,EAAW,IAAIs/O,GAAiB,EAAOhgK,IACxD,EAAqB,IAAfA,EAAmB,WAAa,iBAExC,sGAAmBt/E,EAAW,IAAIs/O,K,gCAI5B/nO,GAER,IAAMi3E,EAAanyF,KAAKU,YAAYyxF,WACpC,IAAIA,IAAeA,EAAWrP,UAAaqP,EAAWsnF,oBAKtD,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBACxDhnF,KAAK8mF,mBAAqB9mF,KAAK8nF,yBAC/B,mGAAuB5sE,KAGzBlb,KAAKomF,WAAWlrE,IAChB,mGAAuBA,KAXrB,uG,8CAcoD,WAAlC2C,EAAkC,uDAApB7d,KAAKmmB,cACjC2gE,EAAqBjpE,GAAeA,EAAYolE,WAAajjF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAK5F,OAJcwa,EAAYhC,SAAS9d,MAAM,SAAS,KAEpCsF,EAAQwY,SAAS9d,MAAM,UAAUsV,KAAK,OAGjD,GAIL,OAHAyzE,EAAmB1oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAE7BgE,I,6CAIP,IAAMoL,EAAgBlyF,KAAKU,YAC3B,MAAO,CAAC,CACNwgF,SAAU,YACVI,UAAW4Q,EAAc2jS,8BACxB,CACD30S,SAAU,gBACVI,UAAW4Q,EAAcslS,6BACxB,CACDt2S,SAAU,aACVI,UAAW4Q,EAAch3E,OAAOqmE,gCAC/B,CACDL,SAAU,eACVI,UAAW4Q,GAAiBA,EAAcigF,cAC1CjgF,EAAcigF,aAAahsJ,gBAAkB+rE,EAAcigF,aAAarvF,SAAW,KAAO,U,gCAIpFmE,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASgrF,QAAQgxE,kBAEjDjjP,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBF,MAAMO,OAASH,EAASgrF,QAAQixE,6B,GA/E1D,M,4BAEqBD,G,4MCAAE,E,YACnB,WAAYrkK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,wBACd,EAAKuV,SAAW,wBAChB,EAAK0U,SAAU,EACf,EAAKg5U,cAAgB,EALF,E,qEAQhB5lW,GACH,sGAAmBA,EAAW,IAAIw/O,K,gCAG1BjoO,GAER,IAAMq3E,EAAgBvyF,KAAKU,YAAY6xF,cACvC,IAAIA,IAAkBA,EAAczP,UAAayP,EAAcknF,oBAK/D,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,mCAaS,WACLutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1FzgF,KAAKmmB,cAAgBsiE,EAAiB,K,6CAItC,MAAO,CAAC,CACNvH,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASgrF,QAAQkxE,yB,GA9CzD,M,4BAEqBA,G,yJCFrB,M,IACA,QACA,Q,uDAGqB3nJ,E,YACnB,WAAY1c,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,2CACnB,EAAK7N,gBAAiB,EACtB,EAAKssM,yBAA0B,EAC3Br7H,IACF,EAAKljD,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAbgB,E,qEAmBhCp4B,GAEH,GADcA,EAAUmP,UAAYnP,EAAUmP,SAAV,MACzB,CACT,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAI/C,OAHmB,IAAfmwE,IACFt/E,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,KAE9J,+FAAmBwJ,EAAW,IAAI63F,GAAW,EAAOvY,IAClD,EAAqB,IAAfA,EAAmB,WAAa,iBAExC,sGAAmBt/E,EAAW,IAAI63F,K,sCAItB,WACdx7F,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,c,kCAI1BnuE,GAA8B,IAAhB6kG,EAAgB,uDAAJ,GAC9BjgH,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,EAAc6kG,GAChCjgH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAO43C,WAAWhrB,cAAgBnmB,KAEpCA,KAAK4mF,mB,wCAGWw2R,GAChB,OAAOA,EAAgBp2W,QAAO,SAAAq2W,GAAA,OAAgD,IAA9BA,EAAep6R,gB,gCAGvD/nE,GAER,IAAMg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtDuqF,EAAgBL,GAAiBA,EAAcK,cACrD,IAAIA,IAAkBA,EAAczP,UAAayP,EAAcknF,oBAK/D,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBACxDhnF,KAAK8mF,mBAAqB9mF,KAAK8nF,yBAC/B,mGAAuB5sE,KAGzBlb,KAAKomF,cACL,mGAAuBlrE,KAXrB,uG,6CAeF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS29J,gBAAgBppJ,WACpCx7F,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAErCpnF,KAAK8mF,mBAAmBryF,QAC1BuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/B,GAAGA,GAAqBA,EAAkBF,OAASE,EAAkBpjF,UAAUmP,SAA5B,KAA8C,CAC/F,IAAMmwE,GAAc8D,EAAkBpjF,UAAUmP,SAA5B,KAA6C,GACjEi0E,EAAkBF,MAAMO,OAASH,EAAS29J,gBAAgB,aAAa3hK,U,8CAOzB,WAAlCplE,EAAkC,uDAApB7d,KAAKmmB,cACnC2gE,EAAqB,GACzB,GAAIjpE,GAAeA,EAAYolE,WAAY,CACzC,IAAMlC,EAAQljE,EAAYmkE,yCACpBxB,EAAaxgF,KAAKygF,uBACxBqG,EAAqB9mF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC9C,IAAMkyU,EAAQlyU,EAAQ2+E,yCACtB,OAAQjB,IAAUw0P,GAAUlyU,EAAQs9E,gCAAgCH,MAEtE,IAAMxqE,EAAe,UAAM7T,WAAW4S,YAAYiB,aAC5CwxE,EAAkBxxE,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,SAAfA,EAAMxf,MAAkC,iBAAfwf,EAAMxf,QAC5EkhY,EAAqB95W,EAAYla,UAAUkS,eACjD,GAAI2xE,GAAmBmwS,GAAsBA,EAAmBnwS,EAAgBx/E,IAAK,CACnF,IAAM4vX,EAAoBpwS,EAAgBx/E,GACpC6vX,EAAwB/wS,EAAmBh7E,MAAK,SAAAi7E,GACpD,OAAO,EAAK+wS,6BAA6B/wS,EAAmB4wS,EAAmBC,GAAoBA,MAErG9wS,EAAqB+wS,EAAwB,CAACA,GAAyB,IAQ3E,OALA/wS,EAAmB1oF,SAAQ,SAAC2oF,GACvBA,IACDA,EAAkBjE,SAAW,EAAKA,aAG/BgE,I,mDAGoBixS,EAAqB1hE,EAAkBuhE,GAClE,IAAMI,EAA4BD,GAAuBA,EAAoBp0X,WACxEo0X,EAAoBp0X,UAAUkS,gBAC9BkiX,EAAoBp0X,UAAUkS,eAAe+hX,GAClD,OAAOI,GAA6BA,EAA0B/3X,MAAK,SAAA2wF,GAAA,OAAiBA,IAAkBylO,EAAiB,Q,oDAKvH,OADer2T,KAAKU,YACN8vC,O,+CAId,OAAO,M,KAhJX,Q,mBAEqBgrD,G,qJCLrB,QACA,Q,IACA,Q,uDAEqBupJ,E,YACnB,WAAYjmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,uCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,QAAIA,EAAUmP,UAAYnP,EAAUmP,SAAV,YACpBnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWE,eAG1D,+FAAmB73F,EAAW,IAAIohP,K,sCAIlC,IAAMkzI,EAAcj4X,KAAKU,YAAY02C,KACjC6gV,IACFA,EAAYn1S,SAAW9iF,KAAK8iF,Y,gCAItB5nE,GAER,IAAMg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtDuqF,EAAgBL,GAAiBA,EAAcK,cACrD,IAAIA,IAAkBA,EAAczP,UAAayP,EAAcknF,oBAK/D,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,6CAcF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS29J,gBAAgBG,OACpC/kP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAxD1B29J,G,qJCJrB,QACA,Q,IACA,Q,uDAEqBD,E,YACnB,WAAYhmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,OACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,qCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,QAAIA,EAAUmP,UAAYnP,EAAUmP,SAAV,YACpBnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWE,eAG1D,+FAAmB73F,EAAW,IAAImhP,K,sCAIlC,IAAMg4H,EAAgB98W,KAAKU,YAAY+nH,OACnCq0P,IACFA,EAAch6R,SAAW9iF,KAAK8iF,Y,gCAIxB5nE,GAER,IAAMg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtDuqF,EAAgBL,GAAiBA,EAAcK,cACrD,IAAIA,IAAkBA,EAAczP,UAAayP,EAAcknF,oBAK/D,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,6CAcF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS29J,gBAAgBE,KACpC9kP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAxD1B09J,G,qJCJrB,QACA,Q,IACA,Q,uDAEqBE,E,YACnB,WAAYlmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,WACd,EAAKuV,SAAW,WAChB,EAAKH,YAAc,yCAJA,E,qEAOhB/X,GACH,QAAIA,EAAUmP,UAAYnP,EAAUmP,SAAV,YACpBnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWE,eAG1D,+FAAmB73F,EAAW,IAAIqhP,K,gCAG1B9pO,GAER,IAAMg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtDuqF,EAAgBL,GAAiBA,EAAcK,cACrD,IAAIA,IAAkBA,EAAczP,UAAayP,EAAcknF,oBAK/D,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,6CAcF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS29J,gBAAgBI,SACpChlP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,Q,iCA7CrB49J,G,4MCFAi4H,E,YACnB,WAAYn+R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,UACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,wCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GACH,sGAAmBA,EAAW,IAAIs5W,K,0CAZtC,M,4BAEqBA,G,4MCAAD,E,YACnB,WAAYl+R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,6CAEnB,EAAK28R,gBAAkB,OANJ,E,qEAShB10S,GACH,sGAAmBA,EAAW,IAAIq5W,O,KAbtC,Q,mBAEqBA,G,4MCAAE,E,YACnB,WAAYp+R,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,uCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GACH,sGAAmBA,EAAW,IAAIu5W,K,0CAZtC,M,4BAEqBA,G,4MCAAjrM,E,YACnB,WAAYnzF,IAAS,gGACbA,IADa,OAEnB,EAAKljE,OAAS,gBACd,EAAKtV,OAAS,wBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,yDACnB,EAAKsnE,eAAgB,EANF,E,qEAShBr/E,GAEH,OADAA,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,IAC5J,+FAAmBwJ,EAAW,IAAIsuK,K,qCAIPjyK,KAAKU,YAAYwa,OAAOqmE,+BAC5BpnF,SAAS,MAAQ6F,KAAK8iF,WAC3C9iF,KAAK8iF,UAAW,EAChB9iF,KAAK4yF,mB,sCAIO,WACa5yF,KAAKU,YACbqe,aAAa3gB,SAAQ,SAAA4gB,GACtCA,EAAQ8jE,SAAW,EAAKA,c,mCAIf,WAEX,IAAK9iF,KAAKimG,uBAAuBjmG,KAAK2hF,UAAW,CAC/C,IAAMzmE,EAASlb,KAAKU,YAAYwa,OAChC,GAAIA,EAAOk1P,uBAAuBl1P,EAAO9P,OAAS8P,EAAOk1P,uBAAuBl1P,EAAO9P,MAAMpL,KAAKsG,QAChGtG,KAAKmmB,cAAgBnmB,KAAKuxN,qBAAqBr2M,EAAOk1P,uBAAuBl1P,EAAO9P,MAAMpL,KAAKsG,aAC1F,CACL,IAAM4xX,EAAoBxjY,OAAOmc,KAAKqK,EAAOk1P,wBAAwBtkQ,MAAK,SAAAoT,GACxE,OAAOhE,EAAOk1P,uBAAuBlxP,IAAehE,EAAOk1P,uBAAuBlxP,GAAY,EAAK5Y,WAEjG4xX,IACFl4X,KAAKmmB,cAAgBnmB,KAAKuxN,qBAAqBr2M,EAAOk1P,uBAAuB8nH,GAAmBl4X,KAAKsG,UAGpGtG,KAAKmmB,gBACRnmB,KAAKmmB,cAAgBnmB,KAAK2hF,SAAS,O,gCAK/BsF,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASg+J,aAAahzE,QACjCjyK,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GA3D/C,M,4BAEqB6qF,G,4MCAAz2E,E,YACnB,WAAY1c,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,2BACd,EAAKsV,OAAS,2BACd,EAAKC,SAAW,oBAChB,EAAK2zS,cAAgB,2BACrB,EAAK9zS,YAAc,4DACnB,EAAK7N,gBAAiB,EACtB,EAAKssM,yBAA0B,EARZ,E,gFAYnB,IAAM+Y,EAAqBlzN,KAAKU,aAC3BV,KAAK8iF,UAAYowI,EAAmBK,QAAQzwI,WAC/CowI,EAAmBK,QAAQzwI,UAAW,EACtCowI,EAAmBK,QAAQ3gI,mB,2BAI1BjvF,GAEH,OADAA,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,IAC5J,+FAAmBwJ,EAAW,IAAI63F,K,gCAG1BtgF,GAER,IAAMq4M,EAAUvzN,KAAKU,YAAY6yN,QACjC,IAAIA,IAAYA,EAAQzwI,UAAaywI,EAAQ95C,oBAK7C,0GAAuBv+J,IAJrB,uG,mCAQF,IAAMA,EAASlb,KAAKU,WAAaV,KAAKU,YAAYwa,OAClD,GAAIA,GAAUA,EAAOqmE,6BAA8B,CACjD,IAAM42S,EAA4Bj9W,EAAOqmE,+BACzC,GAAI42S,IAA8BA,EAA0Bh+X,SAAS,KACnE,OAAO,KAGX,8G,6CAIA,MAAO,CAAC,CACN+mF,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASg+J,aAAazpJ,WACjCx7F,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,M,oDAO3C,OADepnF,KAAKU,YACN8vC,O,+CAId,OAAO,M,KA1EX,Q,mBAEqBgrD,G,4MCAA4pJ,E,YACnB,WAAYtmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,uBACd,EAAKuV,SAAW,SAChB,EAAKD,OAAS,QACd,EAAKF,YAAc,wDACnB,EAAKsnE,eAAgB,EANF,E,qEAShBr/E,GAEH,OADAA,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,IAC5J,+FAAmBwJ,EAAW,IAAIyhP,K,gCAG1BlqO,GAER,IAAMq4M,EAAUvzN,KAAKU,YAAY6yN,QACjC,IAAIA,IAAYA,EAAQzwI,UAAaywI,EAAQ95C,oBAK7C,0GAAuBv+J,IAJrB,uG,sCAQF,IAAMg4M,EAAqBlzN,KAAKU,aAC3BV,KAAK8iF,UAAYowI,EAAmBK,QAAQzwI,WAC/CowI,EAAmBK,QAAQzwI,UAAW,EACtCowI,EAAmBK,QAAQ3gI,mB,gCAIrB3L,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASg+J,aAAaG,OACjCplP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GA3C/C,M,4BAEqBg+J,G,qJCFrB,QACA,Q,IACA,O,uDAEqBL,E,YACnB,WAAYjmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,uBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,wDACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GAEH,OADAA,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,KACxJwJ,EAAUmP,UAAYnP,EAAUmP,SAAV,YACpBnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,WAG1D,+FAAmB53F,EAAW,IAAIohP,K,sCAIlC,IAAM7xB,EAAqBlzN,KAAKU,aAC3BV,KAAK8iF,UAAYowI,EAAmBK,SAAWL,EAAmBK,QAAQzwI,WAC7EowI,EAAmBK,QAAQzwI,UAAW,EACtCowI,EAAmBK,QAAQ3gI,iBAE7B,IAAMqlS,EAAc/kK,EAAmB97K,KACnC6gV,IACFA,EAAYn1S,SAAW9iF,KAAK8iF,UAE9B,IAAMtrC,EAAW07K,EAAmB17K,UAChCA,GAAax3C,KAAK8iF,UAAatrC,EAASsrC,WAC1CtrC,EAASsrC,UAAW,GAEtB,IAAM3rC,EAAQ+7K,EAAmB/7K,OAC7BA,GAAUn3C,KAAK8iF,UAAa3rC,EAAM2rC,WACpC3rC,EAAM2rC,UAAW,K,yCAIFjtC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GACvFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMq4M,EAAUvzN,KAAKU,YAAY6yN,SAC7BA,IAAYA,EAAQzwI,UAAaywI,EAAQ95C,qBAKzCz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAGxDhnF,KAAKomF,cAFL,mGAAgBlrE,KANhB,uG,6CAcF,IAAMk8B,EAAOp3C,KAAKU,YAAY02C,KAC9B,OAAIA,GAAQA,EAAKjxB,cACR,CAAC,CACN+6D,SAAU,kBACVI,UAAWlqC,EAAKjxB,cAAcrT,SAAnB,iBAAkD,UAG1D,K,+CAGoD,IAAtC21E,EAAsC,uDAAnB,GAAI5sE,EAAe,uDAAJ,GACvD,GAAI7b,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,SAAU,CACrD,IAAM+4W,GAAgB/4W,GAAY7b,KAAKmmB,cAActK,UAAU9d,MAAM,MAAM,GAS3E,GARAiC,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GACzC,QAAIA,EAAQwY,UACkBxY,EAAQwY,SAAS9d,MAAM,MAAM,KAC1B62X,KAK/B50X,KAAKmmB,cACP,OAAO,EAGX,OAAO,I,gCAGC8gE,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASg+J,aAAaF,OACjC/kP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAjG1B29J,G,qJCJrB,QACA,Q,uDAEqBD,E,YACnB,WAAYhmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,sDACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GAEH,OADAA,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,KACxJwJ,EAAUmP,UAAYnP,EAAUmP,SAAV,YACpBnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,WAG1D,+FAAmB53F,EAAW,IAAImhP,K,sCAIlC,IAAM5xB,EAAqBlzN,KAAKU,aAC3BV,KAAK8iF,UAAYowI,EAAmBK,SAAWL,EAAmBK,QAAQzwI,WAC7EowI,EAAmBK,QAAQzwI,UAAW,EACtCowI,EAAmBK,QAAQ3gI,iBAE7B,IAAMkqR,EAAgB5pJ,EAAmBzqG,OACrCq0P,IACFA,EAAch6R,SAAW9iF,KAAK8iF,UAEhC,IAAMtrC,EAAW07K,EAAmB17K,UAChCA,GAAax3C,KAAK8iF,UAAatrC,EAASsrC,WAC1CtrC,EAASsrC,UAAW,GAEtB,IAAM3rC,EAAQ+7K,EAAmB/7K,OAC7BA,GAAUn3C,KAAK8iF,UAAa3rC,EAAM2rC,WACpC3rC,EAAM2rC,UAAW,K,gCAIX5nE,GAER,IAAMq4M,EAAUvzN,KAAKU,YAAY6yN,QACjC,IAAIA,IAAYA,EAAQzwI,UAAaywI,EAAQ95C,oBAK7C,0GAAuBv+J,IAJrB,uG,gCAOM+rE,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASg+J,aAAaH,KACjC9kP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAxD1B09J,G,qJCHrB,Q,IACA,O,uDAEqBO,E,YACnB,WAAYvmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,uBACd,EAAKsV,OAAS,uBACd,EAAKC,SAAW,SAChB,EAAKH,YAAc,wDACnB,EAAKsnE,eAAgB,EANF,E,qEAShBr/E,GAEH,OADAA,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,IAC5J,+FAAmBwJ,EAAW,IAAI0hP,K,sCAIlC,IAAMnyB,EAAqBlzN,KAAKU,aAC3BV,KAAK8iF,UAAYowI,EAAmBK,QAAQzwI,WAC/CowI,EAAmBK,QAAQzwI,UAAW,EACtCowI,EAAmBK,QAAQ3gI,mB,yCAIZ/8C,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GAE7G,OAD0BI,EAApBA,sIAAyErkF,KAAKygF,sBAAqB,GAAOyD,GACvFp8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAMq4M,EAAUvzN,KAAKU,YAAY6yN,SAC7BA,IAAYA,EAAQzwI,UAAaywI,EAAQ95C,qBAKzCz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAGxDhnF,KAAKomF,cAFL,mGAAgBlrE,KANhB,uG,6CAeF,MAAO,CAAC,CACNgmE,SAAU,UACVI,UAHkBthF,KAAKU,YAAY03X,qB,gCAO7BnxS,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASg+J,aAAaI,OACjCrlP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCA7D1Bi+J,G,4MCDAH,E,YACnB,WAAYpmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,uBACd,EAAKuV,SAAW,uBAChB,EAAK0U,SAAU,EAJI,E,qEAOhB5sB,GAEH,OADAA,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,IAC5J,+FAAmBwJ,EAAW,IAAIuhP,K,gCAG1BhqO,GAER,IAAMq4M,EAAUvzN,KAAKU,YAAY6yN,QACjC,IAAIA,IAAYA,EAAQzwI,UAAaywI,EAAQ95C,oBAK7C,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,6CAeF,MAAO,CAAC,CACNgmE,SAAU,UACVI,UAHkBthF,KAAKU,YAAY03X,kBAIlC,CACDl3S,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASg+J,aAAaC,wB,GA7C9D,M,4BAEqBA,G,qJCFrB,QACA,Q,uDAEqBF,E,YACnB,WAAYlmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,yBACd,EAAKuV,SAAW,WAChB,EAAKH,YAAc,0DACnB,EAAKsnE,eAAgB,EACrB,EAAKD,iBAAkB,EACvB,EAAKD,UAAW,EAPG,E,qEAUhBn/E,GACH,QAAIA,EAAUmP,UAAYnP,EAAUmP,SAAV,YACpBnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,WAG1D53F,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,IAC5J,+FAAmBwJ,EAAW,IAAIqhP,M,sCAIlC,IAAM9xB,EAAqBlzN,KAAKU,YAC1B6yN,EAAUL,EAAmBK,QAEnC,GAAKA,EAAQ95C,oBAAb,EAKKz5K,KAAK8iF,UAAYywI,EAAQzwI,WAC5BywI,EAAQzwI,UAAW,EACnBywI,EAAQ3gI,iBAEV,IAAMx7C,EAAO87K,EAAmB97K,KAC1BD,EAAQ+7K,EAAmB/7K,OAC7BC,GAASp3C,KAAK8iF,UAAa1rC,EAAK0rC,WAClC1rC,EAAK0rC,UAAW,EAChB1rC,EAAKw7C,kBAEHz7C,GAAUn3C,KAAK8iF,UAAa3rC,EAAM2rC,WACpC3rC,EAAM2rC,UAAW,QAfjB,uG,gCAmBM5nE,GAER,IAAMg4M,EAAqBlzN,KAAKU,YAC1B02C,EAAO87K,EAAmB97K,KAC1BD,EAAQ+7K,EAAmB/7K,MAC5BC,IAASA,EAAK0rC,UAAc1rC,IAASD,EAAM2rC,UAC9C,sGAIE9iF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAGxDhnF,KAAKomF,cAFL,mGAAgBlrE,M,6CAQlB,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASg+J,aAAaD,SACjChlP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,Q,iCA1ErB49J,G,qJCHrB,QACA,Q,uDAEqBP,E,YACnB,WAAY3lK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,sBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,uDACnB,EAAKsnE,eAAgB,EACrB,EAAKD,iBAAkB,EACvB,EAAKD,UAAW,EAPG,E,qEAUhBn/E,GACH,QAAKA,EAAUmP,UAAYnP,EAAUmP,SAAV,YACrBnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,UAAa53F,EAAUmP,SAAV,aAGvEnP,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,IAC5J,+FAAmBwJ,EAAW,IAAI8gP,M,sCAIlC,IAAMvxB,EAAqBlzN,KAAKU,YAC1B02C,EAAO87K,EAAmB97K,KAC1BI,EAAW07K,EAAmB17K,UAChCJ,GAASp3C,KAAK8iF,UAAa1rC,EAAK0rC,WAClC1rC,EAAK0rC,UAAW,EAChB1rC,EAAKw7C,kBAEHp7C,GAAax3C,KAAK8iF,UAAatrC,EAASsrC,WAC1CtrC,EAASsrC,UAAW,K,gCAId5nE,GACR,IAAMg4M,EAAqBlzN,KAAKU,YAC1B6yN,EAAUL,EAAmBK,QAEnC,GAAKA,EAAQ95C,oBAAb,EAKKz5K,KAAK8iF,UAAYywI,EAAQzwI,WAC5BywI,EAAQzwI,UAAW,EACnBywI,EAAQ3gI,iBAEV,IAAMx7C,EAAO87K,EAAmB97K,KAC1BI,EAAW07K,EAAmB17K,SAC/BJ,IAASA,EAAK0rC,UAActrC,IAAaA,EAASsrC,UACrD,sGAIE9iF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAGxDhnF,KAAKomF,cAFL,mGAAgBlrE,SAjBhB,uG,6CAyBF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAASg+J,aAAaR,MACjCzkP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,Q,iCAzErBq9J,G,4MCDA2B,E,YACnB,WAAYtnK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,OAChB,EAAKD,OAAS,eACd,EAAKF,YAAc,sDAEnB,EAAK28R,gBAAkB,OAPJ,E,qEAUhB10S,GACH,sGAAmBA,EAAW,IAAIyiP,O,KAdtC,Q,mBAEqBA,G,4MCAAjB,E,YACnB,WAAYrmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,8BACd,EAAKuV,SAAW,8BAChB,EAAK0U,SAAU,EAJI,E,qEAOhB5sB,GAEH,OADAA,EAAUmP,SAAV,WAAoCnP,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC9L,QAAO,SAAA68E,GAAA,OAAcA,EAAW1pF,SAAS,SAAU,IAC5J,+FAAmBwJ,EAAW,IAAIwhP,K,gCAG1BjqO,GAER,IAAMorO,EAAStmP,KAAKU,YAAY4lP,OAChC,GAAKA,IAAWA,EAAOxjK,UAAawjK,EAAO7sE,oBAK3C,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,6CAeF,MAAO,CAAC,CACNgmE,SAAU,QACVI,UAHiBthF,KAAKU,YAAY23X,gBAIjC,CACDn3S,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASg+J,aAAaE,kB,GA7C9D,M,4BAEqBA,G,8HCFrB,O,WACA,MACA,O,IACA,S,IACA,SACA,Q,uDAEMmzI,G,gBAmBJ,WAAYhtR,IAAO,gGACXA,IADW,SAwDnBitR,yBAA2B,SAAC5/H,EAAc/nK,GACxC,OAAO+nK,EAAaxiP,OAAOrK,MAAK,SAAAouT,GAC9B,OAAOA,EAAkBlyT,KAAO4oF,MA1DjB,EA8DnB6oO,iCAAmC,SAACl7M,EAAoB91B,EAAkBmI,EAAe9+E,GAA+C,IAA3B8sK,EAA2B,uDAAf,EAAKtzE,MAAU,EAEvElyG,SAASC,SAAjE2b,EAF+H,EAE/HA,UAAWC,EAFoH,EAEpHA,MAAOC,EAF6G,EAE7GA,aAAcC,EAF+F,EAE/FA,qBAEvC,SAAKrD,EAAmB8rB,aAClB9rB,EAAmB8rB,aAAezoB,GAClCrD,EAAmB8rB,aAAeghJ,EAAUxpK,wBAC5CtD,EAAmB8rB,aAAgB5oB,GAAaC,GAASC,KAIxDqpG,EAAmBnoG,iBAAmBqyE,EAAiBxoF,MAAK,SAAAoD,GAEjE,IAAMs2T,EAAet2T,EAAQM,UAAUkS,eAAe+oK,EAAUt6C,YAAYt8H,IAC5E,OAAO2xT,GAAgBA,EAAax/T,SAASy2F,IAAkBvtF,EAAQM,UAAUgS,cA5ElE,EAgFnBiiT,4BAA8B,SAACr5M,GAC7B,IAAM/hB,EAAmB+hB,EAAmB/hB,iBAC5C,GAAI50F,MAAMC,QAAQ20F,IAAqBA,EAAiB/nG,OAAQ,CAE9D,GAAwC,mBAApC,EAAK62G,MAAMuyE,cAAcv3K,QAAqE,UAAtC,EAAKglG,MAAMg5B,YAAYo3E,WAAwB,CACzG,IAAMg+C,EAAiB,EAAKpuJ,MAAM8+G,eAAet+M,MAAK,SAAAy2G,GAAA,MAA4B,aAApBA,EAAKm5F,cACnE,GAAIg+C,GAAkBA,EAAenvC,gBAAiB,CACpD,IAAMiuK,EAAch8R,EAAiB1wF,MAAK,SAAA4iD,GAAA,OAASA,EAAM+pU,eAAet+X,SAASu/P,EAAenvC,oBAChG,OAAIiuK,GAAeA,EAAY3hS,SACtB2hS,EAAY3hS,SAEd2F,EAAiB,GAAG3F,UAG/B,OAAO2F,EAAiB,GAAG3F,SAE7B,OAAO,IAAApM,mBAAkB8zB,EAAmBhiB,OAhG3B,EAmGnBm8R,yBAA2B,SAACn6Q,EAAoBo6I,EAAc6hE,EAAmB/xO,EAAkB32E,EAAoBta,GAMrH,IAAM4iF,EAAS,CACb0R,gBAAiB,OAAS,EAAK8rO,4BAA4Br5M,GAAsB,KAE7Eo6Q,EAAe,EAAKrtR,MAAMg5B,YAAYo3E,WAAW/8M,QAAQ,KAAK,IAE9Di6X,EADsB,CAAC,WAAY,QAAS,cAAe,iBAAkB,gBACnCz+X,SAASw+X,GAcnDx/N,EAAW56C,GAAuB,EAAKjT,MAAMg5B,YAAYimF,kBAAoBhsG,EAAmBv2G,GAGhG6uP,EAAe,EAAK4iE,iCAAiCl7M,EAAoB91B,EAAkB+xO,EAAkBtkT,YAAapE,GAG5HmmS,GAAc,EAClB,GAAKnmS,EAAmB8rB,eAAiBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,gBAAmB,EAAKo2F,MAAMl2F,yBAC7IyhP,EACJ,GAAK,EAAKvrJ,MAAMg5B,YAAYimF,gBAErB,CACL,IAAMsuK,EAAsB,EAAKN,yBAAyB5/H,EAAc,EAAKrtJ,MAAMg5B,YAAYimF,iBAClE,EAAKkvG,iCAAiCo/D,EAAqBpwS,EAAkB,EAAK6iB,MAAMg5B,YAAYimF,gBAAiBz4M,KAEhJmmS,GAAc,QALhBA,GAAc,EAWlB,IAAIn1N,EAA6C,IAAjC,EAAKwoB,MAAM6+G,oBAAoCqwG,EAAkBZ,mBAE3Eh9I,EAAkB9qK,EAAmB+qK,YAE3C,OACE,mCAAuBt+D,mBAAoBA,EACpB+lB,YAAa,EAAKh5B,MAAMg5B,YACxB22F,YAAa,EAAK3vH,MAAM2vH,YACxB8gG,oBAAqB,EAAKzwN,MAAMywN,oBAChC5iK,SAAUA,EACV09F,aAAcA,EACdohD,YAAaA,EACbr7H,gBAAiBA,EACjB5yJ,eAAgB,EAAKshF,MAAMthF,eAC3BogM,eAAgB,EAAK9+G,MAAM8+G,eAC3BD,kBAAmB,EAAK7+G,MAAM6+G,kBAC9BrnI,SAAUA,EACVi6F,qBAAsB,EAAKzxE,MAAMyxE,qBACjCt8K,SAAU,EAAK6qG,MAAM7qG,SACrBjJ,IAAKA,EACL4iF,OAAQA,EACRw+S,oBAAqBA,KAtK7B,EA4KnBE,gBAAkB,SAACngI,EAAclwK,EAAkBtyE,EAAQrE,GAKzD,IAJA,IAAM2oI,EAAuD,IAAlC,EAAKnvC,MAAMmvC,mBAA2B,EAAI,EAE/Ds9J,EAAW,GAERxjT,EAAI,EAAGA,EAAI6V,KAAKkI,KAAK6D,EAAO1hB,OAASgmJ,GAAqBlmJ,IAAM,CAEvE,IADA,IAAMykU,EAAgB,GACbvjU,EAAI,EAAGA,EAAIglJ,EAAmBhlJ,IAAM,CAE3C,IACM+kU,EAAoBrkT,EADL1gB,EAAGlB,EAAEkmJ,GAG1B,GAAK+/K,EAIE,CACL,IAAMj8M,EAAqB,EAAKg6Q,yBAAyB5/H,EAAc6hE,EAAkBtkT,aACzF8iT,EAAcjkU,KAAK,EAAK2jY,yBACpBn6Q,EACAo6I,EACA6hE,EACA/xO,EACA32E,EACA,OAAOrc,EAAElB,SAXbykU,EAAcjkU,KACZ,+BAAK61F,UAAU,yBAAyBpzF,IAAK,OAAO/B,EAAElB,KAe5DwjT,EAAShjT,KACP,8BAAI61F,UAAU,sBAAsBpzF,IAAK,sBAAsBjD,GAC5DykU,IAKP,OAAOjhB,GA9MP,EAAKhxS,MAAQ,CACXgyX,cAAe,IAHA,E,oFAQlB/4X,KAAKg5X,qB,gDAGoBp6M,GACpBA,EAAUt6C,aAAetkI,KAAKsrG,MAAMg5B,aAAgBs6C,EAAUt6C,YAAYt8H,KAAOhI,KAAKsrG,MAAMg5B,YAAYt8H,IAC1GhI,KAAKg5X,iBAAiBp6M,K,yCAIe,WAAxBA,EAAwB,uDAAZ5+K,KAAKsrG,MAC1BqtJ,EAAe/5E,EAAU5oK,aAAalK,MAAK,SAACiK,GAChD,OAAOA,EAAY/N,KAAO42K,EAAUt6C,YAAYt8H,MAE5C8J,EAAqB9R,KAAKsrG,MAAMx5F,mBAChC22E,EAAmBm2F,EAAUj9F,SAAS36E,QAAO,SAAA3D,GACjD,OAAQA,EAAQM,UAAU4M,YAAYpW,SAAS,iBAE3C8+X,EAAar6M,EAAUt6C,YAAYimF,gBACnCwuK,EAAgBn6M,EAAUt6C,YAAYnuH,OACzCrO,KAAI,SAAC0yT,GACJ,IAAMj8M,EAAqB,EAAKg6Q,yBAAyB5/H,EAAc6hE,EAAkBtkT,aACnF2gP,EAAe,EAAK4iE,iCAAiCl7M,EAAoB91B,EAAkB+xO,EAAkBtkT,YAAapE,EAAoB8sK,GAGpJ,OAFA47I,EAAkB3jE,aAAeA,EAE1B2jE,KAER9xT,MAAK,SAACC,EAAEC,GACP,IAAMswX,EAAYD,IAAetwX,EAAEuN,YAC7BijX,EAAYF,IAAerwX,EAAEsN,YACnC,OAAIgjX,EAAYC,EACP,EACEA,EAAYD,GACZ,EAELvwX,EAAEixT,mBAAqBhxT,EAAEgxT,mBACpB,EACEhxT,EAAEgxT,mBAAqBjxT,EAAEixT,oBACzB,EAEDjxT,EAAEkuP,aAAejuP,EAAEiuP,aAAgB,EAAMjuP,EAAEiuP,aAAeluP,EAAEkuP,cAAiB,EAAI,KAIjG72P,KAAKs9K,SAAS,CACZy7M,oB,+BA+JK,WAEDpgI,EAAe34P,KAAKsrG,MAAMt1F,aAAalK,MAAK,SAACiK,GACjD,OAAOA,EAAY/N,KAAO,EAAKsjG,MAAMg5B,YAAYt8H,MAE7CygF,EAAmBzoF,KAAKsrG,MAAM3pB,SAAS36E,QAAO,SAAA3D,GAClD,OAAQA,EAAQM,UAAU4M,YAAYpW,SAAS,iBAE3C2X,EAAqB9R,KAAKsrG,MAAMx5F,mBAGtC,GADqE,yBAApC9R,KAAKsrG,MAAMuyE,cAAcv3K,SACzBtG,KAAKsrG,MAAM0tH,+BAC1C,OACE,mCACE10F,YAAatkI,KAAKsrG,MAAMg5B,YACxBomF,4BAA6B1qN,KAAKsrG,MAAMo/G,4BACxCuQ,YAAaj7N,KAAKsrG,MAAM2vH,YACxBs9J,yBAA0Bv4X,KAAKu4X,yBAC/BluK,kBAAmBrqN,KAAKsrG,MAAM++G,kBAC9BH,qBAAsBlqN,KAAKsrG,MAAM4+G,qBACjCyuC,aAAcA,EACdl4P,SAAUT,KAAKsrG,MAAM7qG,WAK3B,IAAM0V,EAASnW,KAAKsrG,MAAMrnB,WACtBjkF,KAAK+G,MAAMgyX,cAAc/xX,QAAO,SAACmoK,GACjC,IAAM5wD,EAAqB,EAAKg6Q,yBAAyB5/H,EAAcxpF,EAAaj5J,aACpF,OAAOqoG,GAAsBA,EAAmBliB,YAAY//F,cAAcnC,SAAS,EAAKmxG,MAAMrnB,WAAW3nF,kBAEzG0D,KAAK+G,MAAMgyX,cAEf,OAAO/4X,KAAKsrG,MAAM7qG,SAChB,+BAAKmqF,UAAU,sBACb,8BAAIA,UAAW,wBAAwB5qF,KAAKsrG,MAAMmvC,oBAC/CtkI,EAAOrO,KAAI,SAAC0yT,EAAmB1B,GAC9B,IAAMv6M,EAAqB,EAAKg6Q,yBAAyB5/H,EAAc6hE,EAAkBtkT,aACzF,OAAO,EAAKwiX,yBACVn6Q,EACAo6I,EACA6hE,EACA/xO,EACA32E,EACA,OAAOgnT,QAMf,8BAAIluO,UAAW,oCAAqC5qF,KAAKsrG,MAAMmvC,oBAC5Dz6I,KAAK84X,gBAAgBngI,EAAclwK,EAAkBtyE,EAAQrE,Q,kBAvR7DowI,UAAY,CACjB5d,YAAa,UAAU3sI,OAAOshH,WAC9B4kE,cAAe,UAAUlmL,OAAOshH,WAChCjjG,aAAc,UAAUK,MAAM4iG,WAC9Bt3B,SAAU,UAAUtrE,MACpB4kN,YAAa,UAAUl8C,KAAK9lE,WAC5B8iN,oBAAqB,UAAUh9I,KAAK9lE,WACpCmxG,eAAgB,UAAU/zM,MAC1B8zM,kBAAmB,UAAUvxG,OAC7BxjG,uBAAwB,UAAUgtI,KAClC3hJ,SAAU,UAAU2hJ,KACpB26B,qBAAsB,UAAUgC,KAChCmrC,qBAAsB,UAAUnrC,KAChCi6C,+BAAgC,UAAU52E,KAC1Cn+D,WAAY,UAAUzhD,Q,cAuRX,IAAAspE,UARS,SAACxzG,GAAD,MAAY,CAClCwZ,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CsiB,eAAgB1xB,EAAMwc,UAAUkV,eAChCywH,mBAAoBniJ,EAAMu1I,gBAAgB4M,uBAGjB,iBAAO,KAEnB,CAA6C69O,I,8EC9S5D,I,IAAA,MACA,O,IAGA,OACA,Q,mDAEA,IAAMc,EAAwB,SAAC9tR,GAC7B,OAAOA,EAAM7qG,SACX,8BAAImqF,UAAU,mBACZ,+BAAKA,UAAW,2BACb0gB,EAAM6tD,SAAW,UAAY,KAE7B7tD,EAAMstR,oBAAsB,kCAAoC,KAChEttR,EAAMxoB,SAAW,0CAA4C,IAC3Dg6F,QAAS,kBAAOxxE,EAAMxoB,WAAawoB,EAAMurJ,aACrCvrJ,EAAMywN,oBAAoBzwN,EAAMiT,mBAAoBjT,EAAMurJ,aAAcvrJ,EAAMg5B,YAAYo3E,YAC1FpwG,EAAM2vH,YAAY3vH,EAAMiT,mBAAoBjT,EAAMurJ,aAAcvrJ,EAAMg5B,YAAYo3E,aACtFrnM,MAAOi3F,EAAMlxB,QAChB,+BAAKwQ,UAAW,gCAAkC0gB,EAAM2sM,YAAc,2BAA6B,KAChG3sM,EAAMurJ,aACH,gCAAMjsK,UAAU,kFAChB,gCAAMA,UAAU,qCAAqC0gB,EAAMiT,mBAAmBliB,eAGrFiP,EAAM6tD,WAAa7tD,EAAMurJ,eAAkBvrJ,EAAMthF,gBAAkBshF,EAAMsxE,iBACxE,+BAAKhyF,UAAU,2BACb,kCAAQA,UAAU,+DACVkyF,QAAS,kBACP,UAAU37I,eAAe,qBAAuBmqE,EAAMiT,mBAAmBliB,cACtEiP,EAAMyxE,qBACPzxE,EAAMsxE,gBAAkB,EAAAt9H,eAAeE,SAAW,EAAAF,eAAeC,UAE3E,4CAAkBv3C,GAAIsjG,EAAMsxE,gBACxB,0CACA,4CAGN,MAGN,+BAAKhyF,UAAW,WAAa0gB,EAAM6tD,SAAW,UAAY,KACvD7tD,EAAMstR,oBAAsB,mBAAqBttR,EAAMg5B,YAAYo3E,WAAW/8M,QAAQ,KAAK,IAAIrC,cAAgB,KAC/GgvG,EAAMxoB,SAAW,0CAA4C,IAC3DzuE,MAAOi3F,EAAMlxB,OACb0iG,QAAS,kBAAOxxE,EAAMxoB,WAAawoB,EAAMurJ,aACrCvrJ,EAAMywN,oBAAoBzwN,EAAMiT,mBAAoBjT,EAAMurJ,aAAcvrJ,EAAMg5B,YAAYo3E,YAC1FpwG,EAAM2vH,YAAY3vH,EAAMiT,mBAAoBjT,EAAMurJ,aAAcvrJ,EAAMg5B,YAAYo3E,cACxFpwG,EAAM6tD,WAAa7tD,EAAMurJ,eAAkBvrJ,EAAMthF,gBAAkBshF,EAAMsxE,iBACxE,+BAAKhyF,UAAU,mBACb,kCAAQA,UAAW,wDAChB0gB,EAAMsxE,gBAAkB,wBAA0B,IAC7CE,QAAS,kBACP,UAAU37I,gBAAgBmqE,EAAMsxE,gBAAkB,yBAA2B,sBAAwBtxE,EAAMiT,mBAAmBliB,cAC3HiP,EAAMyxE,qBACPzxE,EAAMsxE,gBAAkB,EAAAt9H,eAAeE,SAAW,EAAAF,eAAeC,UAE3E,4CAAkBv3C,GAAIsjG,EAAMsxE,gBACxB,0CACA,4CAGN,KACJ,+BAAKhyF,UAAW,gBAAkB0gB,EAAMurJ,aAAe,wBAA0B,4BAC9EvrJ,EAAM2sM,YAAc,2BAA6B,KACjD3sM,EAAMurJ,aAAe,KACpB,gCAAMjsK,UAAU,sBAAsB0gB,EAAMiT,mBAAmBliB,gBAOzE+8R,EAAsB7oX,YAAc,wB,UAErB6oX,G,+IC3Ef,O,WACA,MACA,O,IAEA,S,uDAEqBC,G,6OAgBnBC,eAAiB,SAACC,GAChB,EAAKjuR,MAAMo/G,6BAA4B,GACvC,EAAKp/G,MAAM2vH,YAAYs+J,GAAoB,EAAO,EAAKjuR,MAAMg5B,YAAYo3E,YACzE,EAAKpwG,MAAM4+G,qBAAqB,I,EAGlCsvK,YAAc,WACZ9qS,YAAW,WACT,EAAK4c,MAAMo/G,6BAA4B,KACtC,KACH,EAAKp/G,MAAM++G,qB,2GAbXrqN,KAAKsrG,MAAM4+G,qBAAqB,K,+BAgBzB,WACP,OACE,+BAAKt/H,UAAW5qF,KAAKsrG,MAAM7qG,SAAW,cAAgB,iBACpD,8BAAImqF,UAAW,aAAe5qF,KAAKsrG,MAAM7qG,SAAW,yCAA2C,KAC7F,8BAAImqF,UAAW,uCACXkyF,QAAS98K,KAAKw5X,aAChB,4CAAkBxxX,GAAG,8BAEtBhI,KAAKsrG,MAAMg5B,YAAYnuH,OAAOrO,KAAI,SAAC0yT,EAAmB5sT,GACrD,IAAM2wG,EAAqB,EAAKjT,MAAMitR,yBAAyB,EAAKjtR,MAAMqtJ,aAAc6hE,EAAkBtkT,aAC1G,OACE,mCACE1e,IAAK,6BAA6BoW,EAClC2wG,mBAAoBA,EACpB+6Q,eAAgB,EAAKA,0B,kBAzC5Bp3O,UAAY,CACjBwoE,4BAA6B,UAAU3rC,KAAK9lE,WAC5Cs/Q,yBAA0B,UAAUx5M,KAAK9lE,WACzCgiH,YAAa,UAAUl8C,KAAK9lE,WAC5BoxG,kBAAmB,UAAUtrC,KAAK9lE,WAClCixG,qBAAsB,UAAUnrC,KAAK9lE,WACrCqrB,YAAa,UAAU3sI,OAAOshH,WAC9Bx4G,SAAU,UAAU2hJ,M,aATHi3O,G,8ECNrB,I,EAAA,O,oCAEA,IAAMI,EAA6B,SAACnuR,GAClC,OACE,8BAAI1gB,UAAW,oCACb0gB,EAAMiT,mBAAmBliB,YAAY19F,QAAQ,KAAK,IAAIrC,cACpDwgL,QAAS,kBAAMxxE,EAAMguR,eAAehuR,EAAMiT,sBAC5C,oCAAOjT,EAAMiT,mBAAmBliB,eAKtCo9R,EAA2BlpX,YAAc,6B,UAE1BkpX,G,6FCdf,O,OACA,OAEA,Q,IACA,SACA,S,8DA8Be,IAAA3tR,UANS,WACtB,MAAO,KAGkB,GAEZ,EA5Ba,WAE1B,IAAM5wF,GAAS,IAAAC,oBAFiB,GAGM,IAAAgmI,UAASjmI,EAAOkZ,OAHtB,qBAGzBslW,EAHyB,KAGZC,EAHY,KAK1BjuM,GAAsB,IAAAD,0BAG5B,OACE,+BAAK7gG,UAAU,UACb,8BAAIA,UAAU,eACX8gG,EAAoB5jL,KAAI,SAAAktG,GACvB,OAAO,mCAAyBA,UAAWA,EACXx9G,IAAKw9G,EACLmkD,SAAUugO,IAAgB1kR,EAC1B2kR,eAAgBA,a,mHCtB1D,O,OACA,O,IACA,O,IACA,MAEA,Q,IACA,Q,IACA,OACA,QACA,SACA,Q,mDAEA,IAAMC,EAA0B,SAACtuR,GAAU,IAElC0J,EAAuC1J,EAAvC0J,UAAWmkD,EAA4B7tD,EAA5B6tD,SAAUwgO,EAAkBruR,EAAlBquR,eAFa,GAID,IAAAx4O,YAJC,qBAIlCt9I,EAJkC,KAIpBiwM,EAJoB,KAKnC54L,GAAS,IAAAC,oBACTilI,GAAY,IAAAF,iBAElB,IAAAv+B,YAAU,WAEN,IAAM,EADH99G,IACG,gCAAqB,+FACnBywB,EAAapZ,EAAOkZ,QAAU4gF,EAAY95F,GAAS,IAAAgZ,oBACpDilI,EAFoB,gCAGjB7kI,EAAWggM,aAAap5M,EAAO9P,KAAM,KAAM,KAAM4pG,EAAW,MAAM,GAHjD,wBAMG,IAAA2tE,2BAA0BruJ,GAN7B,OAMnBulW,EANmB,OAOrBz5O,KAAey5O,GACjB/lL,EAAgB+lL,GARO,kDAArB,gDAcP,IAEH,IAAM,EAAAC,GAAA,gCAAiB,uFAChB3gO,EADgB,uBAEnB,IAAAvyI,gBACA+yW,EAAe3kR,GAHI,SAIb95F,EAAOo5M,aAAap5M,EAAO9P,KAAM,KAAM,KAAM4pG,GAJhC,QAKnB,aAAE78G,QAAQ+pG,QAAQ,UAAYuzB,mBAC9B,IAAAnjC,iBANmB,kDAAjB,4CAUN,OACE,8BAAI1H,UAAW,qBAAuBuuE,EAAW,UAAY,IACzD2oI,aAAY9sL,EACZ8nE,QAAS,kBAAMg9M,EAAe9kR,IAC9B3gG,MAAO,CAACy3E,gBAAiBA,OAAOjoF,EAAxB,MACTA,EAAe,KAAO,0CAK7B+1X,EAAwB13O,UAAY,CAClCltC,UAAW,UAAUxyE,OAAOy2E,Y,WASf,IAAAnN,UANS,WACtB,MAAO,KAGkB,GAEZ,CAA6C8tR,I,6FCpE5D,O,OACA,O,IACA,MAEA,QACA,S,IACA,Q,mDAEA,IAAMG,EAAkC,SAACzuR,GAAU,IAE1CuvH,EAAkDvvH,EAAlDuvH,sBAAuBtgF,EAA2BjvC,EAA3BivC,wBAFmB,GAIT,IAAA4G,UAAS5G,GAJA,qBAI1Cy/O,EAJ0C,KAI5BC,EAJ4B,KAK3CC,GAAa,IAAAj6O,UAYnB,IAVA,IAAAt+B,YAAU,WAIR,OAHAu4Q,EAAW1lR,QAAU9lB,YAAW,WAC9BurS,GAAgB,KACfD,EAAe,IAAM,KACjB,WACLr4O,aAAau4O,EAAW1lR,YAGzB,KAEEwlR,EACH,OAAO,KAGT,IAAM9+W,GAAS,IAAAC,oBACT25F,GAAc,IAAAs2E,uBACpB,OACE,+BAAKxgG,UAAU,UACb,8BAAIA,UAAU,eACXkqB,EAAYhtG,KAAI,SAAAtQ,GACf,OAAO,mCAAsB0jB,OAAQA,EACR1jB,IAAKA,EACLqoO,QAASroO,EACTqjO,sBAAuBA,UAO9Dk/J,EAAgC73O,UAAY,CAC1C24E,sBAAuB,UAAU97C,M,WAUpB,IAAAjzE,UAPS,SAACxzG,GAEvB,MAAO,CACLiiJ,wBAFgCjiJ,EAAMu1I,gBAAjC0M,2BAMM,CAAyBw/O,I,8HCxDxC,MACA,OACA,O,IAEA,QAEA,QAMA,QACA,S,IACA,Q,IAEA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,QACA,QACA,Q,uDAEMI,E,yOAEJjgI,gBAAkB,SAACt5J,GACjB,IAAM1lF,GAAS,IAAAC,oBAOf,GAJKhjB,OAAOqmO,WAAc,EAAKz3N,MAAMwwN,gBAAmB,EAAKxwN,MAAMkxN,iBACjE,EAAK3sH,MAAMqxH,gBAAgB/7H,GAGzBxnG,SAASuzN,eAAiBx0N,OAAOqmO,UAAW,CAE9C,IAAMt/M,EAAahE,EAAOwmE,uBAEpBg0K,EAAc,UAAE7P,sBAAsB3mO,EAAY9lB,SAASuzN,cAC7DikK,GAAgB,EAEpB,GAAIl7H,EAAa,CACf,KAAqB,kBAAhBA,GAAmD,kBAAhBA,GAAmD,mBAAhBA,GACtD,iBAAhBA,GAAkD,qBAAhBA,GAAsD,qBAAhBA,GACxD,kBAAhBA,GAAqC,EAAK3uP,MAAMwwN,gBAAgB,CACnE,GAAI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KAEhBvzN,SAAS8pG,oBAAoB,QAAS,EAAK66H,2BACtC,CACL,IAAI9F,EAAkB,GACtB,OAAQy9B,GACN,IAAK,gBACL,IAAK,eACL,IAAK,mBACH,IAAM0kI,EAAc,EAAKrzX,MAAMuxF,sBAAsBxsF,MAAK,SAAA6T,GACxD,MAAwB,WAAjBA,EAAQ2C,QAEjB21M,EAAkBmiK,EAAY5+W,KAAK4tE,yBAA2B,mBAAqB,SAC/D,qBAAhBssK,IACFk7H,GAAgB,GAElB,MAEF,IAAK,gBACH34J,EAAkB,SAClB,MACF,IAAK,iBACHA,EAAkB,UAClB,MACF,IAAK,mBACHA,EAAkB,wBAClB,MACF,IAAK,gBACHA,EAAkB,gBAGtB,EAAK36C,SAAS,CACZ26C,kBACAgiC,oBAAqB22H,EACrBjkK,aAAcvzN,SAASuzN,eACtB,WACGsL,GACFvpI,YAAW,WACTt1F,SAASytD,iBAAiB,QAAS,EAAKk3K,yBACvC,MAIT,OAAO,EAC6B,IAA3B,EAAKh3N,MAAMoxN,cACfhgO,OAAOsmO,kBACV,EAAKnzH,MAAMozH,gBAAgBg3B,EAAYv7B,OAASu7B,EAAYn8P,QAAUm8P,GAAap5P,cAAcqC,QAAQ,KAAM,MAEjH,EAAKk/N,kBAGP63B,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,OAAQq3X,GACtE,EAAKx4J,0BAA0Bs9B,M,EAQzCxuG,0BAA4B,SAACj2E,GAAgD,IAA1Ct8D,EAA0C,wDAApBe,EAAoB,aACrEwF,GAAS,IAAAC,oBAEf,GAAI81D,EAAKzvB,kBAAmB,CAC1B,IAAMw1M,EAAyC,kBAArB/lL,EAAKz1D,KAAKlV,OAA6B,OAAS,SAC1E,EAAKywP,0BAA0B9lL,EAAM+lL,QAChC,GAAyB,gBAArB/lL,EAAKz1D,KAAKlV,QAA4B,EAAKS,MAAMgxN,qBAAqBv8M,KAAKitG,OAAO/hC,oBACxF,EAAK3/E,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAe,CAC9D,IAAM4qW,EAAyB9/S,EAAKz1D,KAAK1I,SAAV,SAA+B,GAC1D,EAAK/L,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAc2+D,wBAAwB,WAAYisS,GAChG,EAAKx6H,UAAUtlL,EAAMt8D,GAErB,EAAKoiP,0BAA0B9lL,EAAM,eAElC,GAAyB,WAArBA,EAAKz1D,KAAKlV,OAAqB,CACxC,IAAM4gH,EAAShsG,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAC7Bk7R,EAAiBh8K,EAAOg8K,iBACP,SAAnBA,GAAgD,SAAnBA,EAC/B,EAAKhsC,oBAAoB,SAAUjmL,EAAMt8D,GAEzC,EAAK4hP,UAAUtlL,EAAMt8D,OAEO,mBAArBs8D,EAAKz1D,KAAKlV,QAcnB,EAAKiwP,UAAUtlL,EAAMt8D,GACjB,EAAK22F,MAAMx5F,qBACT,EAAKw5F,MAAMx5F,mBAAmBonP,iBAAoB,EAAK5tJ,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,aAElHU,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,QAGf,yBAArBy1D,EAAKz1D,KAAKlV,QACdoP,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,MAE3C,EAAK+6O,UAAUtlL,EAAMt8D,IAErB,EAAK4hP,UAAUtlL,EAAMt8D,GAGvB,EAAK22F,MAAMplF,iBAAiB+qD,EAAKz1D,MAEjC,IAAM+nN,EAAc,EAAKx8N,MAAM4yN,oBAC3B,EAAK5yN,MAAMgxN,qBAAqBz1M,KAAO,IAAM,EAAKvb,MAAM4yN,oBAAoBr3M,KAC5E,EAAKvb,MAAMgxN,qBAAqBz1M,KAE/BnqB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe6E,EAAYjnO,cAAcqC,QAAQ,KAAM,MAGhE,EAAKoI,MAAMgxN,sBACb,EAAKzsH,MAAMipH,a,EAIfmF,mBAAqB,SAAAo+B,GACnB,IAAMl+B,EAAck+B,EAAkBt8O,KACtCo+M,EAAYl5N,YAAYg5N,mBAAmBE,GAC3C,EAAKt8C,SAAS,CACZq8C,oBAAqBm+B,EACrB/+B,oBAAqBa,EAAYxnI,oBACjC4mI,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAK+5I,qBACL,EAAKjE,yBACL,EAAKhH,2BAA2B+kC,EAAmB,0BAGrD,EAAK99B,8BAA8B89B,IAE9Bl+B,EAAYl5N,aAAoD,UAArCk5N,EAAYl5N,YAAYmb,UAC1B,gBAAzB+9M,EAAY/9M,WAA+B1jB,OAAOsmO,mBACrD,EAAKnzH,MAAMozH,eAAeo5B,EAAkBx1O,KAAKhmB,cAAcqC,QAAQ,KAAM,MAE/E,EAAK05N,oBAAoBy/B,I,gGAIzB,IAAM58O,GAAS,IAAAC,oBACTsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KACvF4iK,EAAcljK,EAAOo9E,wBACrBlG,GAAuByrF,GAAiBJ,KAAgBI,GAAiBJ,GAAYrrF,oBAOvF2gC,GAAY,EACZhqC,EAAe,GACf/oF,KAAKsrG,MAAMx5F,qBACT9R,KAAKsrG,MAAMx5F,mBAAmBonP,iBAAoBl5P,KAAKsrG,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,YACpHhV,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAUg/H,GAAiBA,EAAc6qL,cAAgB7qL,EAAczrF,sBACjH2gC,GAAY,EACZhqC,EAAe/oF,KAAK+G,MAAM/G,KAAKw7N,wBAAwBx7N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,UAG7F,IAAMq7E,EAAW3hF,KAAKy0B,YAAYvZ,GAE5Bk2W,EAAiBpxX,KAAKk4P,0BAA0BnlI,GAIhD4nG,EAAcl9C,GAAoC,UAAtBA,EAAWn3K,QAAsBm3K,EAAWrrF,qBACxEyrF,IAAkB79K,KAAKqzN,WAAWx1C,IAA2C,gBAAzBA,EAAcv3K,QACxC,gCAAzBu3K,EAAcv3K,SAA6Cu3K,EAAczrF,oBAE1E+sI,GAA4BthD,GAAiBJ,IAAe,UAAgBg2B,yBAChFzzM,KAAKsrG,MAAMt1F,aAAc,WAAY6nK,GAAiBJ,EAAYz9K,KAAKsrG,MAAMnzF,gBAC7E1jB,OAEIynU,GAAmBl8T,KAAKsrG,MAAMx5F,mBAAmB8rB,aACjDigJ,GAAiBA,EAAc13J,eAAiB03J,EAAct3F,WAAWvmF,KAAKsrG,MAAMr+F,mBAAqB4wK,EAAcn3F,mBAE7H,OACE,+BAAKkE,UAAW,gBACb5qF,KAAK+G,MAAMwwN,gBAAkBv3N,KAAK+G,MAAMkxN,gBAAkB,2BAA6B,KACxF,+BAAKrtI,UAAW,QAAU5qF,KAAK+G,MAAMwwN,eAAiB,gBAAkB,KAEtE,+BAAK3sI,UAAW,cAAgB5qF,KAAK+G,MAAMk4N,mBAAqB,oCAAsC,KACpG,+BAAKr0I,UAAU,eACb,+BACEA,UAAW,qBAAuB5qF,KAAK+G,MAAM4yN,oBAAsB,kCAAoC,KACtG35N,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKwnE,cACrE,mCAAgBviF,UAAU,EAAMo9K,cAAe79K,KAAK+G,MAAM4yN,oBAAoBn+M,OAC5E,KACHqiK,GAAiB79K,KAAKqzN,WAAWx1C,IAA6C,gBAA3BA,EAAchiK,SAC9D,mCACAk8M,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjCoD,yBAA0Bn7N,KAAKm7N,2BAC/B,MAEN,mCAAyBhD,YAAan4N,KAAK+G,MAAMoxN,YACxBl0I,WAAYjkF,KAAK+G,MAAMk9E,WACvB2L,SAAU5vF,KAAKsrG,MAAM1b,SACrBmoI,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjChb,wBAAyB/8M,KAAK+8M,wBAC9B/tL,sBAAuBhvB,KAAKsrG,MAAMt8E,sBAClC6vM,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5B21M,wBAAyB3+N,KAAK2+N,2BAExDhE,GAAc36N,KAAK+G,MAAMgyN,qBAAuBoG,GAC7Cn/N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OACzC,mCAAiB20J,sBAAuBxzM,KAAKwzM,sBAC5Bb,gBAAgB,WAChBl1B,WAAYI,GAAiBJ,EAC7Bh9K,UAAU,IAG3BT,KAAK+G,MAAM0jN,mBACT13F,GAAa/yH,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAC1Exb,KAAKu7N,sBAEPv7N,KAAKk/N,YAAYv9I,EAAUoxC,EAAW4nG,EAAYl9C,EAAYI,EAAeshD,EAA0B/sI,IAE5G2gC,GAAc/yH,KAAK+G,MAAM0jN,mBAAsBkQ,GAC5C36N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAevC,KAdF,mCACEurK,eAAgBrhI,EAAa/hF,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAClD1uC,kBAAmBnqN,KAAK+G,MAAM40N,gBAC9BzR,qBAAsBlqN,KAAKy4P,mBAC3BpuC,kBAAmBrqN,KAAKqqN,kBACxBe,qBAAsBprN,KAAKorN,qBAC3B3qN,UAAU,EACV2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnC21M,aAAa,EACbN,kBAAmBzqN,KAAK+G,MAAM0jN,kBAC9BE,oBAAqB3qN,KAAK2qN,oBAC1BD,4BAA6B1qN,KAAK0qN,4BAClCJ,kBAAmBvhI,EAAalrF,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,oBAAoB2xG,IAG1EvhG,IAAe36N,KAAK+G,MAAMgyN,qBAAuBoG,EAChD,mCAAiB1hD,WAAYI,GAAiBJ,EAAYk1B,gBAAgB,WAAWlyM,UAAU,IAC7F,KACHT,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAU7+C,KAAK+G,MAAMgxN,wBACxDhlG,GAAc4nG,GAAcwE,GAC/B,mCAAkB/gD,YAAaA,EACbX,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,wBACxC,OAGPj9K,KAAK+G,MAAMkxN,gBACR,mCAAaA,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBr0H,sBAAuBt4F,KAAK+G,MAAMuxF,sBAClC2hK,oBAAqBj6P,KAAK+G,MAAMkzP,oBAChC5iC,uBAAwBr3N,KAAKq3N,yBAE1C,KACH+5J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,KACJ,mCACE/0K,GAAG,mBACHi8E,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9B7+B,UAAWl+K,KAAK+G,MAAM4yN,2B,cAiB1BrpC,EAAqB,CACzB91C,8CACA31H,8BACAV,oDACAyB,oEACAi1H,6C,WAGa,IAAAkN,aACb,IAAAj8C,UApBsB,SAACxzG,GAAD,MAAY,CAClC6f,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCshN,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzC6C,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCxG,YAAanrB,EAAMgrN,WAAW7/L,YAC9BxW,iBAAkB3U,EAAM4U,YAAYD,oBAYXqjL,EAAzB,CAA6C6pM,K,sJCvW/C,O,OACA,O,IACA,MACA,S,IAEA,Q,IACA,O,IACA,QACA,QACA,Q,IACA,QACA,SACA,QAIA,S,uDAEME,G,gBAkBJ,WAAY/uR,IAAO,gGACXA,IADW,iBAEjB,EAAKvkG,MAAQ,CACXoyM,mBAAkB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACxDihL,aAAa,EACbtiF,kBAAmB,IAGrB,EAAK87E,cAAgB,GACrB,EAAKn2J,eAAiB,GATL,E,oFAcjB39N,KAAKy2S,aAAaz2S,KAAKsrG,S,gDAGCszE,GAAW,aAEhCA,EAAUV,WAAcU,EAAUV,UAAU57J,OAAStiB,KAAK8zX,eACrDl1M,EAAU27M,iBAAmBv6X,KAAKsrG,MAAMivR,iBACvC37M,EAAUV,WAAaU,EAAU1B,YAAe0B,EAAU1B,WAAW56J,OAAStiB,KAAK29N,gBACpF39N,KAAKsrG,MAAMhtF,gBAAgB7pB,SAAWmqL,EAAUtgK,gBAAgB7pB,QAChEuL,KAAKsrG,MAAMrnB,aAAe26F,EAAU36F,YACpC26F,EAAUxsF,sBAAwBpyF,KAAKsrG,MAAMlZ,qBAC7CwsF,EAAUn4J,WAAazmB,KAAKsrG,MAAM7kF,UAClCzmB,KAAKsrG,MAAM3pB,SAASltF,SAAWmqL,EAAUj9F,SAASltF,QAClDuL,KAAKsrG,MAAM3pB,SAASltF,QAAUmqL,EAAUj9F,SAASltF,QAAUmqL,EAAUj9F,SAAS,IAAM3hF,KAAKsrG,MAAM3pB,SAAS,IAC5Gi9F,EAAUj9F,SAAS,GAAGnmE,KAAK9a,YAAYmb,WAAa7b,KAAKsrG,MAAM3pB,SAAS,GAAGnmE,KAAK9a,YAAYmb,WAO9F7b,KAAKy2S,aAAa73H,IAGfA,EAAUxpK,wBAA0BpV,KAAKsrG,MAAMl2F,2BACvBwpK,EAAUzmK,eAAezQ,SAC7Bk2B,aAChBxkC,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,cACjFw5E,YAAW,WACT,EAAK+nN,aAAa73H,KAClB,IAIF5+K,KAAKk5S,cAAgBt6H,EAAUj9F,SAASltF,SAAWuL,KAAKsrG,MAAM3pB,SAASltF,SACzEuL,KAAKy2S,aAAa73H,GAClB5+K,KAAKk5S,cAAe,GAGtB,IAAMh7H,EAAYU,EAAUV,WAAaU,EAAUV,UAAU1iK,KAC7D,GAAI0iK,GAAaU,EAAUtgK,gBAAgB7pB,OAAQ,CACjD,IAAMiiT,GAAc,IAAA52H,8CAA6ClB,EAAUtgK,gBAAiB4/J,GACxFw4H,GACF12S,KAAKwgL,kCAAkC5B,EAAUV,UAAU1iK,KAAMk7R,EAAYz2H,8BAA+B,M,6CAOhHjgL,KAAK6yN,YAAa,I,+BAyGlB,IAAMp1C,EAAgBz9K,KAAKsrG,MAAM4xE,WAAal9K,KAAKsrG,MAAM4xE,WAAW1hK,KAAO,KACrEqiK,EAAgB79K,KAAKsrG,MAAM4yE,UAAYl+K,KAAKsrG,MAAM4yE,UAAU1iK,KAAO,KACnEu6S,EAAgBl4I,GAAiBJ,EAEjC3rK,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAI/CsuT,EAHYlkT,IACfA,EAAmBonP,iBAAoBpnP,EAAmBqnP,eAAiB//P,SAASC,SAAS2b,YAErDhV,KAAKsrG,MAAMkwC,wBAA0Bu6K,GAC3E/1T,KAAKsrG,MAAMkwC,yBAA2B,EAAAz/C,uBAAuB,GAAGC,UAChE+5N,EAAcE,wBAA0BF,EAAcE,yBAG3D,OACE,8BAAIrrO,UAAW,wBAAwB5qF,KAAKsrG,MAAMmvC,oBAI/Cz6I,KAAKsrG,MAAMlZ,oBACR4jO,EACE,mCACAv4I,WAAYI,GAAiBJ,EAC7Bh9K,UAAU,EACVw6N,YAAaj7N,KAAKsrG,MAAM2vH,YACxB1G,UAAWv0N,KAAKsrG,MAAMipH,YAGtB,wCACGv0N,KAAK+G,MAAMgyS,2BAA6B/4S,KAAKsrG,MAAMwvC,wBAA0B96I,KAAKw4S,qBAAuB,KACzGx4S,KAAK+zX,yBAGV/zX,KAAK64T,kBAAkB9C,Q,gBAzN1B7zK,UAAY,CACjBvgE,SAAU,UAAUu3B,QAAQ,UAAU8lE,WAAV,YAC5B9B,WAAY,UAAU8B,WAAV,WACZd,UAAW,UAAUc,WAAV,WACXh2J,gBAAiB,UAAU+1J,KAC3Bk8C,YAAa,UAAUl8C,KACvB/0J,eAAgB,UAAUo4H,KAC1Bm4O,eAAgB,UAAUn4O,KAC1BhtI,uBAAwB,UAAUgtI,KAClCj8H,cAAe,UAAUxuB,OACzBssF,WAAY,UAAUzhD,OACtB4vD,oBAAqB,UAAUgwD,KAC/B09E,kBAAmB,UAAU19E,KAC7Bt+D,WAAY,UAAUthD,Q,6BAsExBi0Q,aAAe,SAACnrM,GACd,IAAMwrM,EAAyB,EAAKM,mBAAmB9rM,GACjDyrM,EAA4B,EAAKF,uBAAuBvrM,EAAM4yE,UAAW5yE,EAAM3pB,SAAUm1N,GAEzFU,GAAiBV,GAAqD,IAA3BA,IAAiCA,GAA0B,EACtGS,EAAmBC,EAAgBA,CAACV,GAAjB,qBAA4CC,IAA5C,wBAA6EA,IAEtG,EAAK+8E,cAAgBxoR,EAAM4yE,UAAY5yE,EAAM4yE,UAAU57J,KAAO,GAC9D,EAAKq7M,eAAiBryH,EAAM4xE,WAAa5xE,EAAM4xE,WAAW56J,KAAO,GACjE,EAAKg7J,SAAS,CACZ06H,kBAAmB,EAAKtwK,kBAAkB6vK,EAAkBjsM,EAAOksM,M,KAYvEz6H,qBAAuB,WAA2C,IAA1C0wB,EAA0C,uDAA1B,EAAAnuJ,eAAeC,OACrD,UAAgBmuJ,kBAAhB,gBAAqC,EAAKpiG,MAA1C,CAAiDmiG,oB,KAGnDorH,kBAAoB,SAACp7I,GACnB,IAAKA,EAAW58D,OACd,OAAO,+BAAKj2B,UAAU,iFAGxB,IAAMi2B,GAAS,IAAAsqE,sBAAqB1N,EAAY,EAAKnyE,MAAMxnB,YAG3D,IAAK+8B,EACH,OAAO,+BAAKj2B,UAAU,iFAIxB,IADA,IAAMmtN,EAAW,GACRxjT,EAAI,EAAGA,EAAIssH,EAAQtsH,IAC1BwjT,EAAShjT,KACP,8BAAI61F,UAAU,kBAAkBpzF,IAAK,kBAAkBjD,GACrD,+BAAKq2F,UAAU,2BACb,+BAAKA,UAAU,oFAMvB,OAAOmtN,G,KAGTg8E,sBAAwB,WAEtB,IAAMh8E,EAAW,EAAKD,iBAAgB,GAEhCriS,EAAO,CAAC,IACVw2T,EAAc,EAClBl0B,EAAS35S,SAAQ,SAAC+7E,EAASvsE,GACrBA,EAAQ,EAAK09F,MAAMmvC,oBAAuB,GAAgB,IAAV7sI,IAClD6H,EAAK1gB,KAAK,IACVk3U,KAEFx2T,EAAKw2T,GAAal3U,KAAK,UAAMm/X,aAAa/5S,OAI5C,IAAM65S,EAAW56X,SAASg9F,cAAc,uBAClCokS,EAAWphY,SAASg9F,cAAc,cACxC,OAAOokS,EACL,gCAAM7uD,SAAUl2T,EAAKhhB,OACf+2U,YAAa,EAAKlgO,MAAMmvC,mBACxB96I,MAAO66X,EAAS3oR,YAChBhyG,OAAQm0X,EAASliR,aACjB45N,YAAa8uD,EAAS3oR,YAAc,EAAKvG,MAAMmvC,mBAC/CulC,SAAU,EAAK44H,yBACfgzB,UAA6C,IAAlC,EAAKtgO,MAAMmvC,mBACjBtiJ,OAAOwqD,WAAa,IAAM,GAAK,IAC/BxqD,OAAOwqD,WAAa,IAAM,IAAM,IAErCqpR,aAAc,YAAyC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAa1C,OAAO,+BAAK7c,IAAKA,EAAK6c,MAAOA,GAC1BoB,EAAKy2T,GAAUD,OAIxB,O,GAsDF37I,EAAqB,CACzB1qK,oEACA9B,8CACAU,wDACA2I,kCACAyF,0CACApM,6DAGIi0W,GAA0B,IAAA3uR,UApBR,SAACxzG,GAAD,MAAY,CAClCmuB,SAAUnuB,EAAMouB,wBAAwBD,SACxCnI,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCtI,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtB61I,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9Cf,mBAAoBniJ,EAAMu1I,gBAAgB4M,mBAC1Cl4I,UAAWjK,EAAM8J,UAAUG,UAC3Bu4I,wBAAyBxiJ,EAAMu1I,gBAAgBiN,wBAC/C7tI,iBAAkB3U,EAAM4U,YAAYD,oBAWmBqjL,EAAzB,CAA6C+pM,G,UAG9DI,G,8HC3Qf,O,WACA,MACA,OACA,OAEA,Q,IACA,OACA,Q,uDAEMC,G,6OAMJC,gBAAkB,SAACh9J,GACjB,UAAUx8L,eAAe,2BACzB,UAAUA,eAAe,2BAA6Bw8L,GACtD,EAAKryH,MAAM2vH,YAAY0C,I,gGAGhB,WAEDv/C,GADS,IAAAjjK,oBACYm9E,wBAFpB,EAIwBt4F,KAAKsrG,MAA7B7wF,EAJA,EAIAA,KAAMtC,EAJN,EAIMA,eAEb,OACE,8BAAIyyE,UAAW,0BACZwzF,EAAYt2K,KAAI,SAACo1K,EAAY09M,GAC5B,IAAMvmX,EAAQ,CACZy3E,uBAAwBoxF,EAAW1hK,KAAK9X,cAAxC,KAUF,OARIw5K,EAAW1hK,KAAK02J,oBAClB79J,EAAMoqG,eAAiBr0G,KAAKC,MAAM6yK,EAAW1hK,KAAK02J,kBAAkBn0K,MAAM,KAAK,GAAG,KAAK,IACvFsW,EAAMsqG,mBAAqB,mBAEzBu+D,EAAW1hK,KAAK9X,cAAcvJ,SAAS,eACtC+iL,EAAW1hK,KAAK9X,cAAcvJ,SAAS,aAC1Cka,EAAMoqG,eAAiB,OAGvB,8BAAI7zB,UAAU,0CACVpzF,IAAK,iBAAiBojY,EACtB99M,QAAS,kBAAM,EAAK69M,gBAAgBz9M,EAAW56J,QACjD,+BAAKsoE,UAAU,0BAA0Bv2E,MAAOA,GAC9C,+BAAKu2E,UAAW,gCACd,gCAAMA,UAAU,sCACb,IAAA9uE,qBAAoBohK,EAAW1hK,KAAMf,EAAMtC,e,kBArCvD+pI,UAAY,CACjB+4E,YAAa,UAAUl8C,KAAK9lE,Y,cAsDjB,IAAA8uC,aACb,IAAAj8C,UAPsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAKC,GAAzB,CAA6B+0X,K,qNCnE/B,O,OACA,O,IACA,OACA,O,IAEA,O,IACA,O,IACA,QACA,QACA,QACA,QACA,QACA,S,uDAEaG,E,EAAAA,Y,yOAEX/7D,gBAAkB,WAChB,IACMliJ,EADqB,EAAKtxE,MAAMnzF,eAAezQ,SACVm1K,YACtC,UAAgB6wB,kBAAhB,gBACA,EAAKpiG,MADL,CAEH0iG,qBAAqB,EACrBP,cAAe,EAAAnuJ,eAAeE,aAI9B,UAAUre,eAAey7I,EAAkB,mBAAqB,gBAChE,EAAKmiJ,mBAHL,UAAU59R,eAAey7I,EAAkB,8BAAgC,4B,EAO/EmiJ,gBAAkB,YAChB,IAAAn4S,cAAa,2BACb,aAAExtB,UAAU8oG,QAAQ,UAAY0zB,6BAA6B,YAC3D,IAAAn+B,WAAU,CAACC,QAAQ,EAAM80B,0BAA0B,EAAOC,iBAAkB,EAAAjsE,iBAAiBC,eAC1F5uB,MAAK,SAACswE,GACL,GAAIA,EAAU,CACZ,IAAI0uJ,EAAmB1uJ,EACnBA,EAASluG,OACX48P,EAAmB1uJ,EAASluG,MAE9B,IAAMujG,EAA2C,iBAA5B,IAAOq5J,EAAP,0BAAOA,IAAgCA,EAAmB18I,KAAKC,MAAMy8I,GAC1F74P,QAAQ4B,IAAI,sBAAuB49F,IACnC,IAAAlF,kBAEF,IAAAmlH,4BAA2B,8CAE1BplL,OAAM,SAACp6B,GACVD,QAAQ4B,IAAI,mBAAoB3B,IAChC,IAAAq6F,wB,gGAMJ,OACE,kCAAQ1H,UAAU,sCACVkyF,QAAS98K,KAAK8+T,iBACpB,gCAAMl0O,UAAU,iDAAgD,4CAAkB5iF,GAAG,yB,2BAW9E,IAAA8jG,UALS,SAACxzG,GAAD,MAAY,CAClC0xB,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxC+C,eAAgB7f,EAAMqN,mBAEgB,CACtCqjB,mCADa,CAEZ6xW,I,oJCvEH,O,OACA,O,IACA,M,IACA,OACA,O,IAEA,O,IACA,OACA,Q,IAGA,QACA,QACA,S,uDAEaC,E,EAAAA,c,gBAaX,WAAYxvR,IAAO,gGACXA,IADW,SAOnBwyE,kBAAoB,SAAC3nL,GACdA,EAAEugB,OAAOuqI,QAAQ,kCAAqC9qJ,EAAEugB,OAAOuqI,QAAQ,SAC1E,EAAK85O,oBATU,EAanBA,iBAAmB,WACb,EAAKh0X,MAAMi0X,iBAGb,UAAU75V,eAAe,6BAFzB,UAAUA,eAAe,6BAI3B,EAAKm8I,SAAS,CACZ09M,kBAAmB,EAAKj0X,MAAMi0X,mBAC7B,WACG,EAAKj0X,MAAMi0X,iBACb5hY,SAASytD,iBAAiB,QAAS,EAAKi3H,mBAExC1kL,SAAS8pG,oBAAoB,QAAS,EAAK46E,uBAzB9B,EA8BnBm9M,wBAA0B,SAACC,EAAgB/iK,GACzC,UAAUh3L,eAAe+5V,IACzB,aAAE9hY,UAAU8oG,QAAQ,UAAY4zB,yBAChC,aAAE18H,UAAU8oG,QAAQ,UAAY6zB,gCAAiC,CAACoiG,IAClE,EAAK4iK,oBAlCY,EAqCnBI,uBAAyB,WACvB,UAAUh6V,eAAe,+BACzB,EAAK45V,mBACL,EAAKzvR,MAAMg1H,0BAtCX,EAAKv5N,MAAQ,CACXi0X,kBAAkB,GAHH,E,0FANOp8M,GACiB,IAArCA,EAAUhuB,wBAAsE,IAAtC5wJ,KAAKsrG,MAAMslD,wBACvD5wJ,KAAK+6X,wB,+CA+CA,WAEDjpX,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAC/C4jL,GAAmB,IAAAD,qBAAoBv5K,GAE7C,OACE,+BAAK84E,UAAW,OAAS5qF,KAAK+G,MAAMi0X,iBAAmB,eAAiB,KACtE,kCAAQpwS,UAAW,qCAChB5qF,KAAK+G,MAAMi0X,iBAAmB,gCAAkC,IAAKl+M,QAAS98K,KAAK+6X,kBACpF,gCAAMnwS,UAAU,qBAAoB,4CAAkB5iF,GAAG,8BAE3D,8BAAI4iF,UAAU,YACZ,8BAAIA,UAAU,kBACZ,kCAAQA,UAAU,qCACVkyF,QAAS,kBAAM,EAAKm+M,wBAAwB,iCAAiC,EAAAv8U,YAAYG,UAC/F,gCAAM+rC,UAAU,qBAAoB,4CAAkB5iF,GAAG,qCAG7D,8BAAI4iF,UAAU,kBACZ,kCAAQA,UAAU,kCACVkyF,QAAS,kBAAM,EAAKm+M,wBAAwB,6BAA6B,EAAAv8U,YAAYI,eAC3F,gCAAM8rC,UAAU,qBAAoB,4CAAkB5iF,GAAG,kCAG5DsjL,EACC,8BAAI1gG,UAAU,kBACZ,kCAAQA,UAAU,oCACVkyF,QAAS,kBAAM,EAAKm+M,wBAAwB,+BAA+B,EAAAv8U,YAAYE,UAC7F,gCAAMgsC,UAAU,qBAAoB,4CAAkB5iF,GAAG,mCAG3D,KACJ,8BAAI4iF,UAAU,kBACZ,kCAAQA,UAAU,mCACVkyF,QAAS98K,KAAKm7X,wBACpB,gCAAMvwS,UAAU,qBAAoB,4CAAkB5iF,GAAG,kCAG7D,mCAAgBwgS,sBAAuBxoS,KAAK+6X,iBAAkB/5J,eAAgB,2B,kBA5F/E9+E,UAAY,CACjB0/E,aAAc,UAAUx/E,KAAKnpC,WAC7BqnH,uBAAwB,UAAUvhD,KAAK9lE,Y,cA6G5B,IAAAnN,UAPS,SAACxzG,GAAD,MAAY,CAClC0xB,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxC+C,eAAgB7f,EAAMqN,gBACtBirJ,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5ClvC,wBAAyBppH,EAAMgR,YAAYkiG,kBAAkB/2G,UAEvB,CACtCu0B,kCACAgG,+CAFa,CAGZ8rW,I,8HCnIH,MACA,OACA,O,IAEA,QACA,SACA,Q,uDAEMM,E,yOAQJC,YAAc,YACZ,aAAiB,cACjB,EAAK/vR,MAAM9kF,8BAA6B,GACnC,EAAK8kF,MAAM8kD,2BACd,EAAK9kD,MAAMykD,uBAAsB,I,iHAVX6uB,GACiB,IAArCA,EAAUhuB,wBAAiC5wJ,KAAKsrG,MAAMslD,wBACxD5wJ,KAAKq7X,gB,+BAaP,OACE,kCAAQzwS,UAAU,2CAA2CkyF,QAAS98K,KAAKq7X,aACzE,gCAAMzwS,UAAU,qBAAoB,4CAAkB5iF,GAAG,sB,GAnBpC,UAAM6jG,W,WAgCpB,IAAAC,UAPS,SAACxzG,GACvB,MAAO,CACLs4J,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5CR,0BAA2B93J,EAAMyvO,cAAc33E,6BAIX,CACtC5pI,4DACAupI,+CAFa,CAGZqrO,I,gFC3Ca35J,YAAT,SAAqBxtO,GAG1B,IADA,IAAIqnY,EAAU,GACL/mY,EAAI,EAAGA,EAAIN,EAAKQ,SAAUF,EAIjC+mY,EAAQvmY,KAAKd,EAAKM,GAAG8e,KAAK,MAOFw9C,EAJPyqU,EAAQjoX,KAAK,QAKxB1K,EAAIvP,SAAS8oD,cAAc,KAE3Bq5U,EAAa,CACjBC,SAAU,QACVpwX,KAAM,4BAEJ5N,UAAUi+X,WACZj+X,UAAUi+X,WAAW,IAAIlqS,KAAK,CAAC1gC,GAAU0qU,GAN1B,gBAONlkX,KAAO,aAAc1O,GAC9BA,EAAE5O,KAAOsd,IAAI24E,gBAAgB,IAAIuB,KAAK,CAAC1gC,GAAU0qU,IACjD5yX,EAAEumF,aAAa,WATA,gBAUf91F,SAAS6C,KAAKkmD,YAAYx5C,GAC1BA,EAAEunF,QACF92F,SAAS6C,KAAKqmD,YAAY35C,IAE1B7O,SAASC,KAAO,iCAAmC48F,mBAAmB9lC,GAhBzD,IAASA,EAClBloD,EAEA4yX,I,8ECjBV,I,EAAA,O,oCAEA,IAAMG,EAAY,SAACpwR,GAAD,OAChB,+BAAK1gB,UAAU,QAAQv2E,MAAO,CAAEy9B,KAAMw5D,EAAMt/C,MAAMla,KAAO,KAAM5sC,IAAKomG,EAAMt/C,MAAM9mD,IAAM,OACpF,qCACA,qCACA,uCAIJw2X,EAAUnrX,YAAc,Y,UACTmrX,G,8ECXf,I,IAAA,MACA,O,IAEA,O,8DAuBe,IAAA5vR,UAPS,SAAAxzG,GAEtB,MAAO,CACL0L,YAFoB1L,EAAMgR,YAArBtF,eAMM,EApBa,SAACsnG,GAAU,IAE9BtnG,EAAesnG,EAAftnG,YAEP,OACE,+BAAKrE,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,8BACtE,6BAAG94H,GAAG,eAAe8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAMn1B,EAAMG,OAAS,UAAaznG,GAAa6wH,QAAS6L,SAAS,WAClH,gCAAM14H,GAAG,aAAa04H,SAAS,UAAUlqI,EAAE,stB,kLCbnD,Q,IAEA,O,IACA,MACA,SACA,QACA,QACA,SAEA,QACA,QAMA,S,IACA,QACA,SACA,S,IACA,OACA,QACA,S,IACA,QACA,SACA,SACA,SACA,S,mDAOA,IAgEM,EAwEO,EAxIPmlY,EAAqB,WAAgC,IAA/BC,EAA+B,uDAAf,GAAI1gX,EAAW,aACnD65F,EAAU75F,EAAOuZ,aAAY,GACnCmnW,EAAcx9X,SAAQ,SAACy9X,GACrB9mR,EAAQ32G,SAAQ,SAAA7E,GACGA,EAAOkjB,WACfre,SAAQ,SAAAse,GACfhoB,OAAOmc,KAAK6L,EAAQlB,KAAKC,cAAcrd,SAAQ,SAAA0lF,GAC7C,IAAMopD,EAAexwH,EAAQlB,KAAKC,aAAaqoE,GAAYh4E,MAAK,SAAAzI,GAC9D,OAAOA,EAAQM,UAAUqE,KAAO6zX,EAAa7zX,MAE3CklI,IACFA,EAAaniH,UAAU8wW,EAAarzX,cAAgBqzX,EAAa/wW,uBAiBvEgxW,EAAyB,SAAC9xQ,EAASrkH,EAAiB2D,GAExD,OADAtR,QAAQ4B,IAAI,oCAAqC0P,EAAYm4K,uBACtD97K,EAAgB+B,SAASg7K,0BAC3B14D,EAAQ/pH,MAAK,SAAAoZ,GACd,OAAOA,EAAKplB,MAAQolB,EAAKplB,KAAKwH,gBAAmB4d,EAAKplB,KAAKwH,iBAAmB6N,EAAYm4K,0BAUnF0kD,EAAoBA,EAApBA,kBAAoB,SAAC9C,EAAazsN,GAE7C,GAAIysN,IAAgBzsN,EAAS,CAC3B,IAAIhP,MAAMC,QAAQw7N,EAAYr5G,WAAYq5G,EAAYr5G,QAAQv1H,OAM5D,OAAO,EALP,IAAMu1H,EAAUq5G,EAAYr5G,QAAQhjH,QAAO,SAAAkjH,GAAA,OAAUA,GAAUA,EAAOj2H,QAC/C,IAAnB+1H,EAAQv1H,SACVmiB,EAAUozG,EAAQ,GAAG/1H,MAO3B,OAAO2iB,GAA4C,IAAhCliB,OAAOmc,KAAK+F,GAASniB,QAAiBmiB,EAAQ9B,WAS7DinX,GAAA,gCAAyC,WAAO/xQ,EAAS/8G,GAAhB,uGACzC+uX,EAAmB,GAEjBC,EAAuB,GAC7BjyQ,EAAQ5rH,SAAQ,SAAC8rH,EAAQgyQ,GAClBD,EAAqB/xQ,EAAOj2H,KAAKwH,kBACpCwgY,EAAqB/xQ,EAAOj2H,KAAKwH,gBAAkB,CACjD0gY,mBAAoB,GACpBP,cAAe,KAGnB,IAAMQ,EAAgBH,EAAqB/xQ,EAAOj2H,KAAKwH,gBACvDyuH,EAAOvoC,SAASvjF,SAAQ,SAACiF,GACnBA,EAAQ6oS,uBACLkwF,EAAcD,mBAAmBhiY,SAASkJ,EAAQ6oS,uBACrDkwF,EAAcD,mBAAmBpnY,KAAKsO,EAAQ6oS,sBAE5C7oS,EAAQynB,UACVsxW,EAAcR,cAAc7mY,KAAK,CAC/BiT,GAAI3E,EAAQ6oS,qBACZphR,SAAUznB,EAAQynB,SAClBtiB,aAAc0zX,QAKtBE,EAAcD,oBAAqB,qCAC9BC,EAAcD,qBADgB,cAE9B,IAAAxlX,0BAAyBuzG,EAAOj2H,YA5BM,8BA+BhBS,OAAOmc,KAAKorX,GA/BI,yEA+BlCxgY,EA/BkC,QAgCrC2gY,EAAgBH,EAAqBxgY,GACrC4gY,GAAY,IAAAlhX,kBAAiB1f,GAjCQ,WAkCb,IAAA6lH,eAAc86Q,EAAcD,mBAAoB,MAAM,EAAO1gY,GAlChD,YAkCrCiqI,EAlCqC,SAmCpBA,EAAgBzxI,OAE/BqoY,EAActyQ,EAAQ/8G,GAAoB+8G,EAAQ/8G,GAAkBhZ,KAAO,KACjFooY,EAAU76Q,gBAAgBkkB,EAAgBzxI,KAAM,MAAM,EAAMqoY,GACxD7gY,IAAmBrC,SAASC,SAASoC,iBACvCugY,EAAmBt2P,EAAgBzxI,OAGvC0nY,EAAmBS,EAAcR,cAAeS,GAG5C5gY,IAAmBrC,SAASC,SAASoC,eA9CE,kCA+Cd,UAAQq0H,0BAA0B,GAAIr0H,GA/CxB,QA+CnCy4K,EA/CmC,OAgDzCl8K,QAAQ4B,IAAI,gCAAiCs6K,GACzCA,GAAgBA,EAAajgL,MAAQigL,EAAajgL,KAAKoV,cACzD,UAAM4a,UAAS,IAAA7C,iBAAgB8yJ,EAAajgL,KAAKoV,eAE/C6qK,GAAgBA,EAAajgL,OAASigL,EAAajgL,KAAKq8H,YAAc4jD,EAAajgL,KAAKs8H,gBACpFp2B,GAAa,IAAAq2B,qBAAoB0jD,EAAajgL,MAAM,EAAOwH,GACjE,UAAMwoB,UAAS,IAAAwsG,eAAct2B,KAtDU,iSA2DtC6hS,GA3DsC,8EAAzC,+CA8DAO,EAAqB,SAAC/kS,EAAcvqF,GAAoC,IAAlBrV,EAAkB,uDAAP,GACrE,OAAK4/F,EAAawyB,SAAYpiH,MAAMC,QAAQ2vF,EAAawyB,UAAaxyB,EAAawyB,QAAQv1H,SAGpF+iG,EAAawyB,QAAQ,GAAG/1H,KAAK2D,IACpC4/F,EAAawyB,QAAQ/8G,IAAqBuqF,EAAawyB,QAAQ/8G,GAAkBhZ,MAC7EujG,EAAawyB,QAAQ/8G,GAAkBhZ,KAAK2D,GAJvC,MAQuB0rO,EAArBA,oBAAA,gCAAqB,WAAO9rI,GAAP,8EAAqBglS,GAArB,oIACO,UAAMr6X,WAAtCwD,EADyB,EACzBA,gBAAiB2D,EADQ,EACRA,YAClB4R,GAAS,IAAAC,oBACX,UAAOta,aACT7I,QAAQ4B,IAAR,YAAwBR,SAASC,SAAS4b,MAA1C,IAAoDuiF,GAElDvqF,EAAmB,GACnBrF,MAAMC,QAAQ2vF,EAAawyB,WAAYxyB,EAAawyB,QAAQv1H,OAPhC,oBAQ9B+iG,EAAawyB,QAAUxyB,EAAawyB,QAAQhjH,QAAO,SAAAkjH,GAAA,OAAUA,GAAUA,EAAOj2H,UACxEwoY,EAAcjlS,EAAawyB,QAAQ,IATX,oBAW5B/8G,EAAmBwvX,EAAYxoY,KAAKgZ,kBAAoB,EACpDyvX,EAAwB,IACxBZ,EAAuBtkS,EAAawyB,QAASrkH,EAAiB2D,GAbtC,kCAcIyyX,EAAuCvkS,EAAawyB,QAAS/8G,GAdjE,QAc1ByvX,EAd0B,sCAgBtBd,EAAgB,GAChBO,EAAqB,GACzB3kS,EAAawyB,QAAQ5rH,SAAQ,SAACu+X,EAAKC,GAC7Bh1X,MAAMC,QAAQ80X,EAAIh7S,WAAag7S,EAAIh7S,SAASltF,QAC9CkoY,EAAIh7S,SAASvjF,SAAQ,SAACiF,GAChBA,EAAQ6oS,uBACViwF,EAAmBpnY,KAAKsO,EAAQ6oS,sBAC5B7oS,EAAQynB,UACV8wW,EAAc7mY,KAAK,CACjBiT,GAAI3E,EAAQ6oS,qBACZphR,SAAUznB,EAAQynB,SAClBtiB,aAAco0X,WAO1BplS,EAAawyB,QAAQ5rH,SAAQ,SAACu+X,GAC5BR,GAAqB,qCAChBA,IADgB,cAEhB,IAAAxlX,0BAAyBgmX,EAAI1oY,YArCV,WAwCI,IAAAqtH,eAAc66Q,GAxClB,SAwCpBz2P,EAxCoB,SAyCHA,EAAgBzxI,OACrCyoY,EAAwBh3P,EAAgBzxI,KAElCqoY,EAAc9kS,EAAawyB,QAAQ/8G,GAAoBuqF,EAAawyB,QAAQ/8G,GAAkBhZ,KAAO,KAC3GinB,EAAOsmG,gBAAgBkkB,EAAgBzxI,KAAM,MAAM,EAAMqoY,IAE3DX,EAAmBC,EAAe1gX,GA/CR,aAmDtB2hX,EAAkBN,EAAmB/kS,EAAcvqF,EAAkB,qBAnD/C,kCAqDpB,UAAMgX,UAAS,IAAA+hH,gCAAA,wBAAmC62P,MArD9B,eAsDnBJ,EAAYxoY,KAAKo2B,iBACpBmtE,EAAawyB,QAAQ/8G,IAAqBuqF,EAAawyB,QAAQ/8G,GAAkBhZ,MAAQujG,EAAawyB,QAAQ/8G,GAAkBhZ,KAAKo2B,yBAChImtE,EAAawyB,QAAQ/8G,GAAkBhZ,KAAKo2B,iBAxD3B,QA4DxBmtE,EAAawyB,QAAQ/8G,IAAqBuqF,EAAawyB,QAAQ/8G,GAAkBhZ,OAC7E6oY,GAAsBN,IAAuBE,EAC7CJ,EAAc9kS,EAAawyB,QAAQ/8G,GAAkBhZ,KACvDkyO,EAAkB,KAAMm2J,GACtBQ,GACF5hX,EAAO+0P,oCAAoCqsH,GAG7CphX,EAAOk0H,4BACL53C,EAAawyB,QAAQ/8G,GAAkBhZ,KACvC6oY,GACA,GACA,GACA,GACA,IAIFL,EAAY5lS,UACd,UAAM5yE,UAAS,IAAA2zE,mBAAkB6kS,EAAY5lS,WAE3C4lS,EAAYxoY,KAAK+T,IACnB,UAAMic,UAAS,IAAAqP,sBAAqBmpW,EAAYxoY,KAAK+T,KAlF3B,QAsF1Bm7K,EAAY,GAtFc,+BAuFM3rF,EAAawyB,QAAQ4mO,UAvF3B,iGAuFlBsrC,EAvFkB,KAuFLhyQ,EAvFK,KAyFtB9Z,GAAU,IAAAh7E,8BAA6B80F,EAAOj2H,KAAMi2H,GAE1DA,EAAO7wG,KAAO+2F,EAEV1hD,EAAQ,GACwB,IAAhC8oC,EAAawyB,QAAQv1H,QAAiBynY,IAAgBjvX,EA9F9B,mCA+FZ,IAAA01K,2BAA0BznK,EAAQ,KAAM,IAAK,GA/FjC,QA+F1BwzC,EA/F0B,sCAiGtBp6B,IAAa,IAAAJ,mBAAiB,IAAA/Y,kBAAiBi1F,IAC/Cx5F,GAAUszG,EAAOj2H,KACe,IAAhCujG,EAAawyB,QAAQv1H,QAAgBC,OAAOmc,KAAK+F,IAASniB,QAAU,IACtEmiB,GAAUsE,EAAOq0F,2BAA0B,GAAO,GAAO,IApGjC,UAuGpBj7E,GAAW+6G,oBAAoBz4H,IAAS,EAAO,MAAM,GAvGjC,0BAyGZ,IAAA+rK,2BAA0BruJ,GAAY,KAAM,IAAK,GAzGrC,QAyG1Bo6B,EAzG0B,iCA6GJ,IAAA2zH,cAAa65M,EAAa,MAAM,EAAO,GAAIxtU,GA7GvC,SA6GxBu7D,GA7GwB,QA+GhBkB,QAAUjB,EAAOliH,GAC7BiiH,GAAYh2H,MAAO,IAAAuiB,yBAAwB0zG,EAAOj2H,KAAM,CAAC,gBAAiB,YAAa,YAAa,qBACpGg2H,GAAY/qG,WAAagrG,EAAOj2H,KAAKy7N,YACrCzlG,GAAY5wG,KAAO6wG,EAAO7wG,KAC1B4wG,GAAYe,aAAed,EAAOc,aAClCf,GAAYE,QAAUz7D,EACtBy0H,EAAUpuL,KAAKk1H,IArHa,0QAwH1Bk5D,EAAU1uL,SACZ,UAAMwvB,UAAS,IAAA6tJ,WAAA,UAAcqR,KACzBA,EAAUl2K,IACZ,UAAMgX,UAAS,IAAA4tJ,qBAAoB5kK,KA3HT,YA+H5BrF,MAAMC,QAAQ2vF,EAAa9sF,oBAAqB8sF,EAAa9sF,iBAAiBjW,QAAW+nY,GA/H7D,mCAgIxB,IAAAhpQ,gBAhIwB,QAiI1BupQ,GAAsB,UAAM56X,WAAWyI,oBAAoBF,kBAGzDkgH,GAAsB2xQ,EAAmB/kS,EAAcvqF,EAAkB,yBAEzErF,MAAMC,QAAQ+iH,GAAoB5/G,uBAAyB4/G,GAAoB5/G,qBAAqBvW,QACtG,UAAMwvB,UAAS,IAAAkpM,yBAAwBviG,GAAoB5/G,uBAEzD4/G,GAAoBmwD,mBACtB,UAAM92J,UAAS,IAAAmpM,sBAAqBxiG,GAAoBmwD,oBAEtDnwD,GAAoBylE,oBACtB0sM,GAAsBA,GAAoBj1X,KAAI,SAAC+C,GAmB7C,OAlBAA,EAAgBygH,UAAYzgH,EAAgBygH,UAAUxjH,KAAI,SAAAmD,GACxD,IAAM+xX,EAAoBpyQ,GAAoBylE,kBAAkBvkL,MAAK,SAAA4nH,GACnE,OAAQzoH,EAASmwK,OAAS1nD,EAAI0nD,MAAUnwK,EAASjD,KAAO0rH,EAAI1rH,IAAO6C,EAAgB7C,KAAO0rH,EAAIu7D,cAchG,OAZI+tM,IACF/xX,EAASsgH,UAAW,EAChBtgH,EAASiwK,UACXjwK,EAASxU,KAAOumY,EAAkBvmY,KAClCwU,EAASK,OAAS0xX,EAAkB1xX,QAC3B0xX,EAAkB1hN,eAAiB,EAAApB,oBAAoBK,SAChEtvK,EAASK,OAAS0xX,EAAkB1xX,OACpCL,EAASG,KAAO4xX,EAAkB5xX,MACzB4xX,EAAkB1hN,eAAiB,EAAApB,oBAAoBI,UAChErvK,EAASswK,eAAiByhN,EAAkBzhN,iBAGzCtwK,KAEFJ,OAIX2sF,EAAa9sF,iBAAiBtM,SAAQ,SAAC6+X,GACrC,IAAIC,GAAuB,EAC3BH,GAAsBA,GAAoBj1X,KAAI,SAAC+C,GA0B7C,OAzBIoyX,EAAwBj1X,KAAO6C,EAAgB7C,IAAMi1X,EAAwBxmY,OAASoU,EAAgBpU,OACxGwmY,EAAwB3xQ,UAAUltH,SAAQ,SAAAmhX,GACxC,IAAI4d,GAAgB,EACpBtyX,EAAgBygH,UAAUxjH,KAAI,SAAAmD,GAW5B,OAVIs0W,EAAiBv3W,KAAOiD,EAASjD,IAChC,CAAC,OAAQ,UAAUnK,OAAM,SAAAjG,GAAA,OAAY2nX,EAAiB3nX,KAAcqT,EAASrT,OAC7E,CAAC,WAAY,OAAQ,QAAS,QAAQiG,OAAM,SAAAjG,GAAA,OAAY2nX,EAAiB3nX,KAAcqT,EAASrT,SACnGqT,EAASsgH,UAAW,EACpB4xQ,GAAgB,EACZlyX,EAASiwK,WACXjwK,EAASxU,KAAO8oX,EAAiB9oX,KACjCwU,EAASK,OAASi0W,EAAiBj0W,SAGhCL,KAEJkyX,IACHnlY,QAAQ4B,IAAI,6CACZ2lX,EAAiBv3W,GAAK,UAAKqiK,aAAa,EAAG,YAC3Ck1M,EAAiB/zP,YAAa,EAC9B3gH,EAAgBygH,UAAUv2H,KAAKwqX,OAGnC2d,GAAuB,GAElBryX,KAEJqyX,IACHD,EAAwB3xQ,UAAUltH,SAAQ,SAAAg/X,GACxCA,EAAK5xQ,YAAa,KAEpBuxQ,GAAoBhoY,KAAKkoY,OAI/B,UAAMh5W,UAAS,IAAA4vG,qBAAoBkpQ,KA1ML,QA4M5BvlS,EAAarwF,MAAQqwF,EAAarwF,KAAKgP,SAAWqmX,KAC9Ca,GAAe7lS,EAAawyB,SAC/BxyB,EAAawyB,QAAQ/8G,IACrBuqF,EAAawyB,QAAQ/8G,GAAkBhZ,MACvCujG,EAAawyB,QAAQ/8G,GAAkBhZ,KAAK6gB,WAC5C0iF,EAAawyB,QAAQ/8G,GAAkBhZ,KAAK6gB,UAAU/T,UACtDy2F,EAAawyB,QAAQ/8G,GAAkBhZ,KAAK6gB,UAAU/T,SAASkoP,UAC/DzxJ,EAAawyB,QAAQ/8G,GAAkBhZ,KAAK6gB,UAAU/T,SAASkoP,SAASlnN,QACvEy1D,EAAawyB,QAAQ/8G,GAAkBhZ,KAAK6gB,UAAU/T,SAASkoP,SAASlnN,QACxEy1D,EAAarwF,KAAKujJ,gBAAkBlzD,EAAarwF,KAAKujJ,gBAAgB3oH,QAAU,GAC9E2sI,GAAc,UAAKD,kBAAkBj3E,EAAarwF,KAAMk2X,IAC1D,UAAOx8X,aACT7I,QAAQ4B,IAAI,4BAA6B80K,IAE3C,UAAMzqJ,UAAS,IAAAmF,gBAAeslJ,KAC9B,UAAMzqJ,UAAS,IAAA2F,8BAA4B,IACvC4tE,EAAarwF,KAAKyrL,gBACpB,UAAUvxJ,UAAUm2D,EAAarwF,KAAKyrL,eACtC,UAAM3uK,UAAS,IAAA+E,iBAAgB,CAC7B4pK,cAAep7F,EAAarwF,KAAKyrL,mBAInCp7F,EAAarwF,OAASqwF,EAAarwF,KAAK4nK,gBAAkBv3E,EAAarwF,KAAKujJ,kBAC9E,UAAMzmI,UAAS,IAAA6lN,oBAAmB,UAAKh7D,gCAAgCt3E,EAAarwF,QAElFqwF,EAAa8lS,YACTjqQ,IAAe,IAAAC,aAAY97B,EAAa8lS,aAE5C,UAAMr5W,UAAS,IAAAsvG,gBAAeF,KAzOF,+EAArB,8C,6JC1Kb,QAEA,S,IACA,OACA,QACA,SAEA,Q,uDAEqBkvH,G,gBAGnB,cAAc,iGACN,GAAM,EAAO,EAAA/+O,aAAaC,UADpB,OAEZ,EAAK6C,OAAS,gBACd,EAAK/C,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAK2zS,cAAgB,WACrB,EAAK9zS,YAAc,mCACnB,EAAKhY,cAAL,iBAPY,E,qEAUTC,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,QACHy/H,EAAkB,YAClBC,EAAmBg+N,EAGvB,QAAIj+N,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,U,aAvCpCgI,GAAK,Q,aADOu6O,E,IA4Cf2rH,E,YAEJ,WAAYpvR,IAAS,gGACbA,IADa,OAEnB,EAAKjxE,gBAAiB,EACtB,EAAKvH,OAAS,gBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,mCALA,E,qEAQhB/X,GACH,sGAAmBA,EAAW,IAAIuqW,K,yCAGjBr4T,EAASouC,GAC1B,IAAM0xO,EAAc31T,KAAKmkF,wBAAwBnkF,KAAKokF,6BAA6BvuC,GAAUouC,GAC1Fn8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,MACpD,OAAO,aAAOymT,GAAa,SAACh2S,GAAD,OAAaA,EAAQnE,KAAK7X,UAAUmF,uB,gCAGvDm+E,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASs7J,W,uKC3EjD,SACA,SACA,Q,IACA,O,IAEA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBC,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAh/O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAL,iBAGA,EAAK65X,UAAY,KACjB,EAAKC,kBAAoB,KACzB,EAAKC,cAAgB,KACrB,EAAKt+D,aAAe,KACpB,EAAKsvC,OAAS,KACd,EAAKivB,OAAS,KACd,EAAKC,OAAS,KAdF,E,qEAiBTh6X,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACHy/H,EAAkB,YAClBC,YACA,MAKF,IAAK,iBACHD,EAAkB,gBAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YACA,MACF,IAAK,QACCvsI,EAAU4M,YAAYpW,SAAS,UACjC81I,EAAkB,SAClBC,aACSvsI,EAAU4M,YAAYpW,SAAS,WACxC81I,EAAkB,SAClBC,cAEAD,EAAkB,SAClBC,aAIN,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,UAAW3D,Q,2CAI3C,OAAO,I,6DAvEFgI,GAAK,U,aADOw6O,G,4MCXAE,E,YACnB,WAAY5jK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAI++O,K,gCAG1BxnO,GACR,OAAIlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,K,6CAQzB,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQE,e,GAhCzD,M,4BAEqBA,G,4MCAAC,E,YACnB,WAAY7jK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,iBAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIg/O,K,gCAG1B17J,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQG,mB,GAfzD,M,4BAEqBA,G,4MCAAF,E,YACnB,WAAY3jK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAI8+O,K,gCAG1BvnO,GACR,OAAIlb,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,K,6CAQzB,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQC,kB,GAhCzD,M,4BAEqBA,G,qJCFrB,Q,IACA,Q,uDAEqBI,E,YACnB,WAAY/jK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,UACd,EAAKuV,SAAW,SAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIk/O,K,gCAG1B3nO,GAER,IAAMg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtDuqF,EAAgBL,GAAiBA,EAAcK,cACrD,IAAIA,IAAkBA,EAAczP,UAAayP,EAAcknF,oBAK/D,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,6CAcF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQK,Y,iCAtCpCA,G,qJCHrB,Q,IACA,Q,IACA,Q,uDAEqBC,E,YACnB,WAAYhkK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,UACd,EAAKuV,SAAW,SAHG,E,qEAMhBlY,GAIH,OAHKA,EAAUmP,SAAV,OACHnP,EAAUmP,SAAV,KAA6B,CAAC,SAEhC,+FAAmBnP,EAAW,IAAIm/O,K,gCAG1B5nO,GAER,IAAMg3E,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IACtDuqF,EAAgBL,GAAiBA,EAAcK,cACrD,IAAIA,IAAkBA,EAAczP,UAAayP,EAAcknF,oBAK/D,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,6CAcF,IAAM0iX,EAAkB59X,KAAKU,YAAYwa,OAAOsD,MAAM,UAAgBxW,IACtE,MAAO,CAAC,CACNk5E,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,gCACnC,CACAL,SAAU,OACVI,UAAYs8S,GAAmBA,EAAgBxmV,MAAQwmV,EAAgBxmV,KAAK0rC,SAAY,OAAS,U,gCAI3FmE,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQM,Y,iCA7CpCA,G,qJCJrB,Q,IACA,Q,uDAEqBC,E,YACnB,WAAYjkK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,UACd,EAAKuV,SAAW,SAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIo/O,K,gCAG1B7nO,GACR,IACMq4M,EADqBvzN,KAAKU,YAAYwa,OAAOsD,MAAM,UAAaxW,IACnCurN,QAEnC,IAAIA,IAAYA,EAAQzwI,UAAaywI,EAAQ95C,oBAK7C,OAAIz5K,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,WAAWlrE,IAHd,mGAAuBA,IANvB,uG,6CAcF,MAAO,CAAC,CACNgmE,SAAU,aACVI,UAAWthF,KAAKU,YAAYwa,OAAOqmE,mC,gCAI7B0F,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQO,Y,iCAtCpCA,G,mJCHrB,QACA,SACA,Q,IACA,O,IACA,Q,mDAEA,IAAM86I,EAAwB,CAAC,eAAgB,SAAU,OAAQ,WAAY,SAExD70B,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAxlW,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WAEd,GAAIk6X,EAAsB1jY,SAASwJ,EAAU6M,WAC3C,OAAO,EAET,IAAMlK,GAAS,aAAU3C,EAAU6M,WAC/Bo8H,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAO/E,OANKsmI,IACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ3C,EAAU6M,WAC/DxQ,KAAK+e,aAAahqB,KAAK63I,IAEzBA,EAAYlsI,UAAY,kBAAM,GAC9BksI,EAAYwD,KAAKzsI,IACV,I,uCAIP,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,Q,2CAIzC,OAAO,I,6DA9BFgI,GAAK,Q,aADOghW,G,8HCRrB,MACA,O,IACA,O,IACA,OAEA,QAMA,Q,IACA,Q,IACA,QACA,Q,IAEA,QACA,Q,IACA,Q,IACA,Q,IACA,QACA,QACA,S,uDAEM2nB,E,yOAmEJz2H,gBAAkB,SAACt5J,GACjB,IAAM1lF,GAAS,IAAAC,oBAIf,GAFA,EAAKmwF,MAAMqxH,gBAAgB/7H,GAEvBxnG,SAASuzN,aAAc,CAEzB,IAAMztM,EAAahE,EAAOwmE,uBAEpBg0K,EAAc,UAAE7P,sBAAsB3mO,EAAY9lB,SAASuzN,cAIjE,GAAI+oC,EAAa,CACf,GAAIA,EAAY5P,oBAAsB,EAAK/+O,MAAMwwN,eAS/C,OARI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KAGhB,EAAKkkK,gBAAgBn7H,EAAa90J,IAE7B,EAC6B,IAA3B,EAAK75F,MAAMoxN,aACpB,EAAK76C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAK0L,sBACL,EAAK5wH,aACL/Y,YAAW,YACT,aAAEt1F,UAAUupG,GAAG,QAAS,EAAKm7E,qBAC5B,MAIP43E,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,QAC9D,EAAK6+N,0BAA0Bs9B,M,EAQzCm7H,gBAAkB,SAAC54J,EAAiBr3H,GAClC,IAAI67N,EAAqB,GAgBzB,OAf0C,gBAAtCxkG,EAAgB6tB,oBAOlB22E,EAAqB,CAAC,EAAG,EAAG,EAAG,EAAG,IAQ5BxkG,EAAgB6tB,mBACtB,IAAK,0BACH7tB,EAAkB,aAClB,MACF,IAAK,oBACHA,EAAkB,oBAClB,MACF,IAAK,mBACHA,EAAkB,mBAClB,MACF,IAAK,yBAEHA,EAAkB,yBAClB,MAEF,IAAK,0BAEHA,EAAkB,0BAClB,MAEF,IAAK,oBAEHA,EAAkB,oBAClB,MAEF,IAAK,uBACHA,EAAkB,gBAKtB,IAAMx3N,GAAW,aAAEtI,QAAQwH,QAAU,IAEjCmyC,EAAOrxC,EAAW,MAAQmgG,EAAM7mF,QAAU,GAC1C7U,EAAMzE,EAAW,MAAQmgG,EAAMzmF,QAAU,GACzC03B,EAAQ,OAENwwR,EAAkB5F,EAAmBhoU,OAAS,EAAI,IAAM,IAE1D6tU,EAAmB,IAUvB,GATI7F,EAAmBhoU,OAAS,EAC9B6tU,EAAmB,IACV7F,EAAmBhoU,OAAS,IACrC6tU,EAAmB,MAEhB7hU,GAAaqxC,EAAO35C,OAAOwqD,WAAa0/Q,IAC3CvwR,EAAO,OACPD,EAAQ,IAELpxC,GAAayE,EAAM/M,OAAO+xD,YAAco4Q,EAAmB,CAC9D,IAAIC,EAAiB,GACjB9F,EAAmBhoU,OAAS,EAC9B8tU,EAAiB,IACR9F,EAAmBhoU,OAAS,IACrC8tU,EAAiB,KAEnBr9T,GAAYq9T,EAEd,EAAKjlJ,SAAS,CACZ26C,kBACAtL,aAAcvzN,SAASuzN,aACvBqtC,oBAAqB,CACnBloN,OACAD,QACA3sC,U,EAKNgiJ,0BAA4B,SAACj2E,GAA+B,IAAzBt8D,EAAyB,wDAC1D,EAAK+lN,0BAA0BzpJ,GAE/B,EAAKslL,UAAUtlL,EAAMt8D,GAErB,IAAMm8W,EAAmB,CAAC,wBAAyB,eAC/CA,EAAiB32X,SAAS82E,EAAKz1D,KAAKlV,SACtC,EAAKkzN,gBAGH,EAAKzyN,MAAMgxN,sBACb,EAAKzsH,MAAMipH,a,iHAnNW31C,GACxB,GAAIA,EAAUpjC,yBAA2Bx7I,KAAKsrG,MAAMkwC,wBAC/C,EAAAt/C,0BAA0Bj8F,MAAK,SAAAggO,GAAA,OAAOA,EAAIjkI,WAAa4iF,EAAUpjC,0BACpE,GAAIx7I,KAAK+G,MAAMgxN,sBAA0E,eAAlD/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,SAA2B,CACrG,IAAMY,EAAWzc,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKiB,WAClDC,EAAU,KACd,OAAQkiK,EAAUpjC,wBAChB,KAAK,EAAAt/C,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAChCt/E,EAAUD,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,eAAtBA,EAAMhoM,KAAKlV,UAC5C,MACF,KAAK,EAAA41F,0BAA0B,GAAGF,SAChCt/E,EAAUD,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,iBAAtBA,EAAMhoM,KAAKlV,UAC5C,MACF,KAAK,EAAA41F,0BAA0B,GAAGF,WAC3Bh8F,KAAK+G,MAAM4yN,qBACV35N,KAAK+G,MAAM4yN,qBAAsE,eAA/C35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAC1EtG,KAAKo4N,0BAA0B,aAAc,QAASx5C,EAAUpjC,wBAIlE9+H,KAAa1c,KAAK+G,MAAM4yN,qBACtB35N,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAAWoW,EAAQlB,KAAKlV,SAClGtG,KAAK05N,mBAAmBh9M,EAASkiK,EAAUpjC,6BAExC,GAAIx7I,KAAK+G,MAAMgxN,sBAA0E,UAAlD/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,SACjF,OAAQ+iK,EAAUpjC,wBAChB,KAAK,EAAAt/C,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,WAC3Bh8F,KAAK+G,MAAM4yN,qBACV35N,KAAK+G,MAAM4yN,qBAAsE,eAA/C35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAC1EtG,KAAKo4N,0BAA0B,aAAc,aAAcx5C,EAAUpjC,wBAEvE,MACF,KAAK,EAAAt/C,0BAA0B,GAAGF,WAC3Bh8F,KAAK+G,MAAM4yN,qBACV35N,KAAK+G,MAAM4yN,qBAAsE,iBAA/C35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAC1EtG,KAAKo4N,0BAA0B,eAAgB,aAAcx5C,EAAUpjC,6BAIxE,GAAIx7I,KAAK+G,MAAMgxN,sBAA0E,iBAAlD/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,SAA6B,CAC9G,IAAMY,EAAWzc,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKiB,WAClDC,EAAU,KACd,OAAQkiK,EAAUpjC,wBAChB,KAAK,EAAAt/C,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAChCt/E,EAAUD,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,6BAAtBA,EAAMhoM,KAAKlV,UAC5C,MACF,KAAK,EAAA41F,0BAA0B,GAAGF,SAChCt/E,EAAUD,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,uBAAtBA,EAAMhoM,KAAKlV,UAG5CoW,KAAa1c,KAAK+G,MAAM4yN,qBACtB35N,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAAWoW,EAAQlB,KAAKlV,SAClGtG,KAAK05N,mBAAmBh9M,EAASkiK,EAAUpjC,wBAIjDx7I,KAAK08N,2BAA2B99C,K,+BAyJzB,WACD1jK,GAAS,IAAAC,oBAETsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KAEvF4iK,EAAcljK,EAAOo9E,wBAIvB06R,EAA6Bn1M,GAC5B79K,KAAKsrG,MAAMkwC,yBAA2B,EAAAz/C,uBAAuB,GAAGC,UAC1B,eAAtCh8F,KAAKsrG,MAAMkwC,wBACXqiC,EAAco4I,wBAA0Bp4I,EAAco4I,yBAEvDp4I,GAAiBA,EAAcq4I,6BAC9Br4I,EAAcq4I,gCACjB88D,GAA8BhzX,KAAKsrG,MAAMwwC,qCAG3C,IAAMs1O,EAAiBpxX,KAAKk4P,2BAZV,GAeZ57B,EAAsB,CAAC,EAAA59K,YAAYG,OAAQ,EAAAH,YAAYE,OAAQ,EAAAF,YAAYI,aAEjF,OACE,+BAAK8rC,WAAW,aAAW,cAAe,CAAC,yBAA0B5qF,KAAK+G,MAAMwwN,kBAC9E,+BACE3sI,WAAW,aAAW,MAAO,CAAC,cAAe5qF,KAAK+G,MAAMwwN,gBAAiB,QAAUv3N,KAAK+G,MAAMoxN,cAC9F,+BAAKvtI,UAAU,cAAco1D,IAAK,SAACkkI,GAAD,OAAU,EAAK1nD,WAAa0nD,IAC5D,+BAAKt5L,UAAU,wBACb,+BAAKA,UAAU,6BACZ5qF,KAAK6wD,SAxBA,EAAsB,IAcrB,EAU4C4sH,EAAYI,IAEjE,kCAAQjzF,UAAU,6BAA6BkyF,QAAS98K,KAAKy4N,mBAE9Dz4N,KAAKq8N,sBAAsBC,GAC3B02J,EAA6B,KAC5B,+BAAKpoS,UAAU,sBAAsBymS,eAAgBrxX,KAAKy6N,yBACxD,mCAAkBr8C,YAAaA,EACbM,SAAS,EACThuE,OAAQ1wG,KAAK+G,MAAMwwN,eACnB95C,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,0BAW/Cj9K,KAAK+G,MAAMkxN,iBAAmBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACtD,mCAAoBs2I,aAAcvsI,KAAKsrG,MAAMipH,UACzB0D,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBqtC,oBAAqBh6P,KAAK+G,MAAMizP,oBAChC3iC,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,mBAE3C,KACHx4P,KAAK+G,MAAMkxN,kBAAoBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACvD,mCAAmBgiO,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBqtC,oBAAqBh6P,KAAK+G,MAAMizP,oBAChC3iC,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,iBACvBl+B,yBAA0Bt6N,KAAKsrG,MAAMgvH,2BAExD,MAEL82J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,U,cAoBNuT,EAAqB,CACzB91C,8CACAF,kDACAI,oDACAK,oDACAQ,sDACAE,wEACAt3H,oDACAyB,oEACA+qI,sDACAF,gDACA5V,6C,WAGa,IAAA/uC,UA3BS,SAACxzG,GAAD,MAAY,CAClCsnO,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzC4C,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxComI,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D8U,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5CF,2BAA4Bp4J,EAAMyvO,cAAcr3E,2BAChDzjJ,iBAAkB3U,EAAM4U,YAAYD,oBAiBEqjL,EAAzB,CAA6CqgM,I,8HChW5D,MACA,OACA,O,IAEA,QAEA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,QAEA,QACA,Q,IAOA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,QACA,QAEA,Q,IACA,Q,IACA,Q,IACA,Q,uDAEMwJ,E,yOAmEJjgI,gBAAkB,SAACt5J,GACjB,IAAM1lF,GAAS,IAAAC,oBAGT2pC,EAAS1rD,SAAS02F,eAAe,EAAKwb,MAAM1b,UAMlD,GAJKz3F,OAAOqmO,WAAc,EAAKz3N,MAAMwwN,gBAAmB,EAAKxwN,MAAMkxN,iBACjE,EAAK3sH,MAAMqxH,gBAAgB/7H,GAGzBxnG,SAASuzN,eAAiBx0N,OAAOqmO,UAAW,CAE9C,IAAMt/M,EAAahE,EAAOwmE,uBAEtBg0K,EAAc,UAAE7P,sBAAsB3mO,EAAY9lB,SAASuzN,aAAc7nK,GAC7E,GAAI4wM,EAAa,CACf,GAAIA,EAAY5P,oBAAsB,EAAK/+O,MAAMwwN,eAAgB,CAC/D,GAAI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KAEhBvzN,SAAS8pG,oBAAoB,QAAS,EAAK66H,2BACtC,CACL,IAAI9F,EAAkB,GAEhB6lK,EAAsB,WAC1B,IACMlmK,EADc18M,EAAOsD,MAAP,MACkB/B,WAAW3Q,MAAK,SAAA4Q,GAAA,MAAmC,eAAxBA,EAAQlB,KAAKlV,UAC9E,EAAKysN,2BAA2B6E,IAGlC,OAAQ89B,EAAY5P,mBAClB,IAAK,0BACH7tB,EAAkB,aAClB,MACF,IAAK,oBACHA,EAAkB,oBAClB,MACF,IAAK,mBACHA,EAAkB,mBAClB,MACF,IAAK,yBACH6lK,IACA7lK,EAAkB,yBAClB,MAEF,IAAK,0BACH6lK,IACA7lK,EAAkB,0BAClB,MAEF,IAAK,oBACH6lK,IACA7lK,EAAkB,oBAClB,MAEF,IAAK,uBACHA,EAAkB,gBAKtB,EAAK36C,SAAS,CACZ26C,gBAAiBA,GAAmBy9B,EACpC/oC,aAAcvzN,SAASuzN,eACtB,WACGsL,GACFvpI,YAAW,WACTt1F,SAASytD,iBAAiB,QAAS,EAAKk3K,yBACvC,MAIT,OAAO,EAC6B,IAA3B,EAAKh3N,MAAMoxN,cACfhgO,OAAOsmO,kBACV,EAAKnzH,MAAMozH,gBAAgBg3B,EAAYv7B,OAASu7B,EAAYn8P,QAAUm8P,GAAap5P,cAAcqC,QAAQ,KAAM,MAEjH,EAAKk/N,kBAGP63B,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,QAAQ,GACtE,EAAK6+N,0BAA0Bs9B,M,EAQzCxuG,0BAA4B,SAACj2E,GAA+B,IAAzBt8D,EAAyB,yDAE7B,SAAzBxc,OAAO2B,SAAS6hL,MAAmBviL,SAASC,SAASC,YACvDtB,QAAQ4B,IAAI,OAAQq3E,GAEtB,EAAKslL,UAAUtlL,EAAMt8D,GAErB,EAAK22F,MAAMplF,iBAAiB+qD,EAAKz1D,MAEjC,IAAM+nN,EAAc,EAAKx8N,MAAM4yN,oBAC3B,EAAK5yN,MAAMgxN,qBAAqBz1M,KAAO,IAAM,EAAKvb,MAAM4yN,oBAAoBr3M,KAC5E,EAAKvb,MAAMgxN,qBAAqBz1M,KAE/BnqB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe6E,EAAYjnO,cAAcqC,QAAQ,KAAM,MAGhE,EAAKoI,MAAMgxN,sBACb,EAAKzsH,MAAMipH,YAEY,gBAArBtjJ,EAAKz1D,KAAKlV,QAA6B2qE,EAAKz1D,KAAK1I,SAAV,QACzC,EAAKw4F,MAAM6vC,2BAA2B,O,EAI1Cu+E,mBAAqB,SAACo+B,GAAqD,IAAlCt8G,EAAkC,uDAAT,KAC1Do+E,EAAck+B,EAAkBt8O,KAChCq+M,EAA4BD,EAAYtzN,OAe9C,GAdAszN,EAAYl5N,YAAYg5N,mBAAmBE,GAC3C,EAAKt8C,SAAS,CACZq8C,oBAAqBm+B,EACrB/+B,oBAAqBa,EAAYxnI,oBACjC4mI,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAK+5I,qBACL,EAAKjE,yBACL,EAAKhH,2BAA2B+kC,EAAmB,0BAGrD,EAAK99B,8BAA8B89B,IAE9B3/P,OAAOsmO,iBAAkB,CAC5B,IAAM8E,EAAc,EAAKx8N,MAAMgxN,qBAAqBz1M,KAAO,IAAMw1O,EAAkBx1O,KAChFhmB,cAAcqC,QAAQ,KAAM,KAC/B,EAAK2sG,MAAMozH,eAAe6E,GAE5B,EAAKlL,oBAAoBy/B,GAEzB,EAAK79B,wCAAwCJ,EAA2Br+E,I,EAI1E8jF,sBAAwB,WACtB,EAAKh0H,MAAMipH,YACX,EAAKkJ,qB,iHApNmB7+C,GACxB,GAAIA,EAAUpjC,yBAA2Bx7I,KAAKsrG,MAAMkwC,wBAC/C,EAAAt/C,0BAA0Bj8F,MAAK,SAAAggO,GAAA,OAAOA,EAAIjkI,WAAa4iF,EAAUpjC,0BACpE,GAAIx7I,KAAK+G,MAAMgxN,sBAA0E,eAAlD/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,SAA2B,CACrG,IAAMY,EAAWzc,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKiB,WAClDC,EAAU,KACd,OAAQkiK,EAAUpjC,wBAChB,KAAK,EAAAt/C,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAChCt/E,EAAUD,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,eAAtBA,EAAMhoM,KAAKlV,UAC5C,MACF,KAAK,EAAA41F,0BAA0B,GAAGF,SAChCt/E,EAAUD,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,iBAAtBA,EAAMhoM,KAAKlV,UAC5C,MACF,KAAK,EAAA41F,0BAA0B,GAAGF,WAC3Bh8F,KAAK+G,MAAM4yN,qBACV35N,KAAK+G,MAAM4yN,qBAAsE,eAA/C35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAC1EtG,KAAKo4N,0BAA0B,aAAc,QAASx5C,EAAUpjC,wBAIlE9+H,KAAa1c,KAAK+G,MAAM4yN,qBACtB35N,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAAWoW,EAAQlB,KAAKlV,SAClGtG,KAAK05N,mBAAmBh9M,EAASkiK,EAAUpjC,6BAExC,GAAIx7I,KAAK+G,MAAMgxN,sBAA0E,UAAlD/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,SACjF,OAAQ+iK,EAAUpjC,wBAChB,KAAK,EAAAt/C,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,WAC3Bh8F,KAAK+G,MAAM4yN,qBACV35N,KAAK+G,MAAM4yN,qBAAsE,eAA/C35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAC1EtG,KAAKo4N,0BAA0B,aAAc,aAAcx5C,EAAUpjC,wBAEvE,MACF,KAAK,EAAAt/C,0BAA0B,GAAGF,WAC3Bh8F,KAAK+G,MAAM4yN,qBACV35N,KAAK+G,MAAM4yN,qBAAsE,iBAA/C35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAC1EtG,KAAKo4N,0BAA0B,eAAgB,aAAcx5C,EAAUpjC,6BAIxE,GAAIx7I,KAAK+G,MAAMgxN,sBAA0E,iBAAlD/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKK,SAA6B,CAC9G,IAAMY,EAAWzc,KAAK+G,MAAMgxN,qBAAqBv8M,KAAKiB,WAClDC,EAAU,KACd,OAAQkiK,EAAUpjC,wBAChB,KAAK,EAAAt/C,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAClC,KAAK,EAAAE,0BAA0B,GAAGF,SAChCt/E,EAAUD,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,6BAAtBA,EAAMhoM,KAAKlV,UAC5C,MACF,KAAK,EAAA41F,0BAA0B,GAAGF,SAChCt/E,EAAUD,EAAS3Q,MAAK,SAAA03M,GAAA,MAA+B,uBAAtBA,EAAMhoM,KAAKlV,UAG5CoW,KAAa1c,KAAK+G,MAAM4yN,qBACtB35N,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,SAAWoW,EAAQlB,KAAKlV,SAClGtG,KAAK05N,mBAAmBh9M,EAASkiK,EAAUpjC,wBAIjDx7I,KAAK08N,2BAA2B99C,K,+BA0JhC,IAAM1jK,GAAS,IAAAC,oBACTsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KACvFu6S,EAAgBl4I,GAAiBJ,EACjCW,EAAcljK,EAAOo9E,wBACrBlG,EAAsB2jO,GAAiBA,EAAc3jO,oBAOvD2gC,GAAY,EACZhqC,EAAe,GACf/oF,KAAKsrG,MAAMx5F,qBACT9R,KAAKsrG,MAAMx5F,mBAAmBonP,iBAAoBl5P,KAAKsrG,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,YACpHhV,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAUg/H,GAAiBA,EAAc6qL,cAAgB7qL,EAAczrF,sBACjH2gC,GAAY,EACZhqC,EAAe/oF,KAAK+G,MAAM/G,KAAKw7N,wBAAwBx7N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,UAG7F,IAAMq7E,EAAW3hF,KAAKy0B,YAAYvZ,GAE5Bk2W,EAAiBpxX,KAAKk4P,0BAA0BnlI,GAEhD4nG,EAAcl9C,GAAoC,kBAAtBA,EAAWn3K,QAA8Bm3K,EAAWrrF,qBAChFyrF,IAAkB79K,KAAKqzN,WAAWx1C,IAA2C,gBAAzBA,EAAcv3K,QACxC,gCAAzBu3K,EAAcv3K,SAA6Cu3K,EAAczrF,oBAE1E+sI,EAA2B42F,GAAiB,UAAgBtiH,yBAChEzzM,KAAKsrG,MAAMt1F,aAAc,WAAY+/S,EAAe/1T,KAAKsrG,MAAMnzF,gBAC/D1jB,OAEIynU,GAAmBl8T,KAAKsrG,MAAMx5F,mBAAmB8rB,aACjDigJ,GAAiBA,EAAc13J,eAAiB03J,EAAct3F,WAAWvmF,KAAKsrG,MAAMr+F,mBAAqB4wK,EAAcn3F,mBASzHssS,GAA6B,EAMjC,IAAMv3L,EAAY5d,GAAiB,EAAAlhF,cAAcxiG,SAAS0jL,EAAcv3K,QAClE+lJ,EAAewxB,GAAiB,EAAAnhF,iBAAiBviG,SAAS0jL,EAAcv3K,QAE9E,OACE,+BAAKskF,UAAW,gBACb5qF,KAAK+G,MAAMwwN,gBAAkBv3N,KAAK+G,MAAMkxN,gBAAkB,2BAA6B,KACxF,+BAAKrtI,UAAW,QAAU5qF,KAAK+G,MAAMwwN,eAAiB,gBAAkB,KAEtE,+BAAK3sI,UAAW,cAAgB5qF,KAAK+G,MAAMk4N,mBAAqB,oCAAsC,KACpG,+BAAKr0I,UAAU,eACb,+BACEA,UAAW,qBACR5qF,KAAK+G,MAAM4yN,oBAAsB,kCAAoC,KACrEl+B,EAAY,oCAAsC,KAClDpvC,EAAe,uCAAyC,KAC1DrsJ,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKwnE,cACrE,mCAAgBviF,UAAU,EAAMo9K,cAAe79K,KAAK+G,MAAM4yN,oBAAoBn+M,OAC5E,KACHqiK,GAAiB4d,EACdvgL,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAc13J,gBACpD,mCAAkB1lB,UAAU,EAAMo9K,cAAeA,IACnD,KACHA,GAAiBxxB,EACdnxI,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAc13J,gBACpD,mCAAqB1lB,UAAU,EAAMo9K,cAAeA,IACtD,KACHA,GAAiB79K,KAAKqzN,WAAWx1C,IAA6C,gBAA3BA,EAAchiK,SAC9D,mCACAk8M,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjCoD,yBAA0Bn7N,KAAKm7N,2BAC/B,MAEN,mCAAyBhD,YAAan4N,KAAK+G,MAAMoxN,YACxBl0I,WAAYjkF,KAAK+G,MAAMk9E,WACvB2L,SAAU5vF,KAAKsrG,MAAM1b,SACrBmoI,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjChb,wBAAyB/8M,KAAK+8M,wBAC9B/tL,sBAAuBhvB,KAAKsrG,MAAMt8E,sBAClC6vM,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5B21M,wBAAyB3+N,KAAK2+N,2BAExDhE,GAAc36N,KAAK+G,MAAMgyN,qBAAuBoG,GAC7Cn/N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OACzC,mCAAiB20J,sBAAuBxzM,KAAKwzM,sBAC5Bb,gBAAgB,WAChBl1B,WAAYs4I,EACZt1T,UAAU,IAG3BT,KAAK+G,MAAM0jN,mBACT13F,GAAa/yH,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAC1Exb,KAAKu7N,sBAEPv7N,KAAKk/N,YAAYv9I,EAAmCqxS,EAA4Br4J,EAAYl9C,EAAYI,EAAeshD,EAA0B/sI,IAEtJ2gC,GAAc/yH,KAAK+G,MAAM0jN,mBAAsBkQ,GAC5C36N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAevC,KAdF,mCACEurK,eAAgBrhI,EAAa/hF,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAClD1uC,kBAAmBnqN,KAAK+G,MAAM40N,gBAC9BzR,qBAAsBlqN,KAAKy4P,mBAC3BpuC,kBAAmBrqN,KAAKqqN,kBACxBe,qBAAsBprN,KAAKorN,qBAC3B3qN,UAAU,EACV2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnC21M,aAAa,EACbN,kBAAmBzqN,KAAK+G,MAAM0jN,kBAC9BE,oBAAqB3qN,KAAK2qN,oBAC1BD,4BAA6B1qN,KAAK0qN,4BAClCJ,kBAAmBvhI,EAAalrF,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,oBAAoB2xG,IAGjD82D,EACxB,mCACEv1M,WAAYs4I,EACZt1T,UAAU,IAEV,KACHk6N,IAAe36N,KAAK+G,MAAMgyN,qBAAuBoG,EAChD,mCAAiB1hD,WAAYs4I,EAAepjH,gBAAgB,WAAWlyM,UAAU,IAC/E,KACHT,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAU7+C,KAAK+G,MAAMgxN,wBACxDhlG,GAAsCigQ,GAA+Br4J,GAAcwE,GACtF,mCAAkB/gD,YAAaA,EACbX,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,wBACxC,OAGPj9K,KAAK+G,MAAMkxN,iBAAmBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACtD,mCAAoBs2I,aAAcvsI,KAAKsrG,MAAMipH,UACzB0D,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBqtC,oBAAqBh6P,KAAK+G,MAAMizP,oBAChC3iC,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,mBAE3C,KACHx4P,KAAK+G,MAAMkxN,kBAAoBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACvD,mCAAmBgiO,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzB0K,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,iBACvBl+B,yBAA0Bt6N,KAAKsrG,MAAMgvH,2BAExD,KACH82J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,KACJ,mCACE/0K,GAAG,mBACHi8E,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9B7+B,UAAWl+K,KAAK+G,MAAM4yN,2B,cAmB1BrpC,EAAqB,CACzB91C,8CACAO,oDACA52H,oDACAyB,oEACA21H,sDACAE,wEACAN,wDACAN,6C,WAGa,IAAAkN,aACb,IAAAj8C,UAzBsB,SAACxzG,GAAD,MAAY,CAClC6f,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCshN,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzC6C,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCuxH,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D49D,cAAephN,EAAMyV,UAAU2rM,cAC/BzsM,iBAAkB3U,EAAM4U,YAAYD,oBAeXqjL,EAAzB,CAA6C6pM,K,+ICxc/C,SACA,QACA,Q,IAEA,S,IACA,SACA,Q,uDAEqB33I,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAh/O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAL,iBAGA,EAAK+qW,OAAS,KARF,E,qEAWT9qW,GAAW,WAEZssI,EAAkB,GAClB4+N,EAAa,EACb3+N,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,QACL,IAAK,SACH,IAAK,IAAIjc,EAAI,EAAGA,GAAKA,EAALA,WAAiBA,IAAK,CAEpC,IADiCyL,KAAK,QAAUzL,IAE3CoP,EAAUmF,oBAAsB9I,KAAK,QAAUzL,GAAGg6W,WACjD5qW,EAAUmP,SAAV,eAAuC9S,KAAK,QAAUzL,GAAGotF,SAAS1hF,MAAK,SAAAoD,GACzE,OAAOA,EAAQyP,SAAR,eAAqCzP,EAAQyhF,wBAAwB,gBAAiBnhF,EAAUmP,SAAV,kBAC1F,CACLm9H,EAAkB,QAAU17I,EAC5Bs6W,EAAat6W,EACb,OAGJ,MAEF,IAAK,aACH07I,EAAkB,aAClBC,YAIJ,QAAID,IACGjwI,KAAKiwI,KACoB,UAAxBtsI,EAAU6M,WAAiD,WAAxB7M,EAAU6M,WAC/CxQ,KAAKiwI,GAAmB,IAAI,EAAJ,SAAU,EAAM4+N,EAAYlrW,GACpD3D,KAAKiwI,GAAiBs+N,UAAY5qW,EAAUmF,mBAE5C9I,KAAKiwI,GAAmB,IAAIC,GAAiB,GAE/ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,2CAMT,OAAO,M,aA7DFqE,GAAK,U,aADOw6O,G,qJCRrB,Q,IACA,Q,uDAEqBssH,E,YACnB,WAAYhwR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKoqE,oBAAqB,EAJP,E,qEAOhBtiF,GACH,sGAAmBA,EAAW,IAAImrW,K,qDAIlC9uW,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,8CAGT,WAEhBiqI,EADS/xN,KAAKU,YAAYwa,OACFi1F,mBAAkB,GAAM,GAgBtD,OAdyBnwG,KAAK2hF,SAAS36E,QAAO,SAAA3D,GAC5C,QAAKA,EAAQs9E,gCAAgC,EAAKF,0BAG3Cp9E,EAAQyP,SAAR,iBAAuCi/M,EAAe9xN,MAAK,SAAAmG,GAChE,OAAIA,EAASE,SAAW,EAAKA,UAGrBF,EAASwW,aAAakmE,UAAY18E,EAASC,YAAYyM,SAArB,kBACrC,aAAQzP,EAAQyP,SAAR,gBAAqC1M,EAASC,YAAYyM,SAArB,mBAC7C,aAAQzP,EAAQyP,SAAR,KAA0B1M,EAASC,YAAYyM,SAArB,gB,gCAOnCm0E,GAAU,WAMdjnF,KAAKimF,oBAAsBjmF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QAChFuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBF,MAAMO,OANV,SAAC/jF,GAA2B,IAAlBiD,EAAkB,uDAAT,KACnC,OAAOjD,EAAQyP,SAAR,SAA8D,IAA/BzP,EAAQyP,SAAR,SAAsCm0E,EAAS3gF,GAAU,EAAKA,QAKjE4gF,CAAUH,EAAmB,EAAKM,sBAAwB,S,iCA7C9EynR,G,qJCHrB,Q,IACA,Q,uDAEqBK,E,YACnB,WAAYrwR,EAAS+vR,EAAYlrW,IAAW,gGACpCm7E,IADoC,OAE1C,EAAK+vR,WAAaA,EAClB,EAAKvoW,OAAS,SAAWuoW,EACzB,EAAKhzV,SAAW,SAAWgzV,EACvBlrW,GAAaA,EAAUmP,UAAYnP,EAAUmP,SAAV,UACrC,EAAKirX,qBAAsB,GANa,E,qEAUvCp6X,GACH,sGAAmBA,EAAW,IAAIwrW,GAAM,EAAOnvW,KAAK6uW,e,6CAIpD,IAAMruR,GAAaA,EAAbA,6GACN,GAAIxgF,KAAK+9X,oBAAqB,CAC5B,IAAM7qK,EAAqBlzN,KAAKU,YAAYwa,OAAOsD,MAAM,UAAaxW,IAClEkrN,GAAsBA,EAAmBK,UACvCL,EAAmBK,QAAQzwI,SAC7BtC,EAAWzrF,KAAK,CACdmsF,SAAU,UACVI,UAAW,SAEJ4xI,EAAmBK,QAAQptM,eAAiB+sM,EAAmBK,QAAQptM,cAAcrT,SAAzC,SACrD0tE,EAAWzrF,KAAK,CACdmsF,SAAU,UACVI,UAAW4xI,EAAmBK,QAAQptM,cAAcrT,SAAzC,QAA6D,MAMhF,OAAO0tE,M,iCAlCU2uR,G,kMCDAl9L,E,YACnB,WAAYnzF,IAAS,gGACbA,IADa,OAEnB,EAAKljE,OAAS,wBACd,EAAKtV,OAAS,wBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,yDACnB,EAAKsnE,eAAgB,EACrB,EAAKq0K,sBAAuB,EAPT,E,gFAUL,WACRnkC,EAAqBlzN,KAAKU,YAChCwyN,EAAmBn0M,aAAa3gB,SAAQ,SAAAwe,GACtCA,EAAakmE,SAAW,EAAKA,YAE/B,IAAMmzK,EAAW/iC,EAAmBh4M,QAAUg4M,EAAmBh4M,OAAOsD,OAAS00M,EAAmBh4M,OAAOsD,MAAMqjO,MAC7G3uB,EAAmBh4M,OAAOsD,MAAMqjO,MAAMoU,SACtC,KACAA,IACFA,EAASnzK,SAAW9iF,KAAK8iF,c,GAtB/B,M,4BAEqBmvF,G,qJCFrB,QACA,Q,uDAEqB8yE,E,YACnB,WAAYjmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,uBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,wDACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GAEH,QAAIA,EAAUixB,YAAcjxB,EAAUmP,YAAcnP,EAAUmP,SAAV,YAC9CnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,YAG1D,+FAAmB53F,EAAW,IAAIohP,K,sCAIlC,IAAM7xB,EAAqBlzN,KAAKU,YAC1Bu3X,EAAc/kK,EAAmB97K,KACnC6gV,IACFA,EAAYn1S,SAAW9iF,KAAK8iF,UAE9B,IAAMtrC,EAAW07K,EAAmB17K,UAChCA,GAAax3C,KAAK8iF,UAAatrC,EAASsrC,WAC1CtrC,EAASsrC,UAAW,GAEtB,IAAM3rC,EAAQ+7K,EAAmB/7K,OAC7BA,GAAUn3C,KAAK8iF,UAAa3rC,EAAM2rC,WACpC3rC,EAAM2rC,UAAW,K,+CAewC,IAAtC2F,EAAsC,uDAAnB,GAAI5sE,EAAe,uDAAJ,GACvD,GAAI7b,KAAKmmB,eAAiBnmB,KAAKmmB,cAActK,SAAU,CACrD,IAAM+4W,GAAgB/4W,GAAY7b,KAAKmmB,cAActK,UAAU9d,MAAM,MAAM,GAS3E,GARAiC,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GACzC,QAAIA,EAAQwY,UACkBxY,EAAQwY,SAAS9d,MAAM,MAAM,KAC1B62X,KAK/B50X,KAAKmmB,cACP,OAAO,EAGX,OAAO,M,iCA5DU4+N,G,qJCHrB,QACA,Q,uDAEqBD,E,YACnB,WAAYhmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,sDACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GAEH,QAAIA,EAAUixB,YAAcjxB,EAAUmP,YAAcnP,EAAUmP,SAAV,YAC9CnP,EAAUmP,SAAV,UAAgC3Y,SAAS,EAAAmhG,WAAWC,YAG1D,+FAAmB53F,EAAW,IAAImhP,K,sCAIlC,IAAM5xB,EAAqBlzN,KAAKU,YAC1Bo8W,EAAgB5pJ,EAAmBzqG,OACrCq0P,IACFA,EAAch6R,SAAW9iF,KAAK8iF,UAEhC,IAAMtrC,EAAW07K,EAAmB17K,UAChCA,GAAax3C,KAAK8iF,UAAatrC,EAASsrC,WAC1CtrC,EAASsrC,UAAW,GAEtB,IAAM3rC,EAAQ+7K,EAAmB/7K,OAC7BA,GAAUn3C,KAAK8iF,UAAa3rC,EAAM2rC,WACpC3rC,EAAM2rC,UAAW,O,iCA9BFgiK,G,wLCDAsB,E,YACnB,WAAYtnK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,OAChB,EAAKD,OAAS,eAEd,EAAKy8R,gBAAkB,OACvB,EAAK38R,YAAc,sDACnB,EAAK69F,uBAAwB,EARV,E,8BAHvB,Q,mBAEqB6sI,G,yJCFrB,QACA,Q,uDAEqB5qJ,E,YACnB,WAAY1c,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,2BACd,EAAKsV,OAAS,2BACd,EAAKC,SAAW,oBAChB,EAAK2zS,cAAgB,2BACrB,EAAK9zS,YAAc,4DACnB,EAAK7N,gBAAiB,EACtB,EAAKssM,yBAA0B,EAC/B,EAAKl0H,oBAAqB,EAC1B,EAAKoxK,sBAAuB,EACxBv4K,IACF,EAAKljD,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAjBgB,E,gFAwBnC,IAAMm3L,EAAqBlzN,KAAKU,aAC3BV,KAAK8iF,UAAYowI,EAAmBK,QAAQzwI,WAC/CowI,EAAmBK,QAAQzwI,UAAW,EACtCowI,EAAmBK,QAAQ3gI,mB,2BAI1BjvF,GAOH,GANA3D,KAAKoxT,YAAYztT,GACbA,EAAUmP,SAAV,YAAoCnP,EAAUmP,SAAV,WAAiC3Y,SAAS,OAC3EwJ,EAAUmP,SAAV,YACHnP,EAAUmP,SAAV,UAAkC,CAAC,OAGnCnP,EAAUmP,SAAV,KAA4B,CAC9B,IAAMmwE,EAAgF,KAAlEt/E,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2B,IAAY,EAAI,EAC9F,sGAAmBnP,EAAW,IAAI63F,GAAW,EAAOvY,IAAa,EAAqB,IAAfA,EAAmB,WAAa,iBAEzG,sGAAmBt/E,EAAW,IAAI63F,K,gCAG1BtgF,GAER,IAAMq4M,EAAUvzN,KAAKU,YAAY6yN,QACjC,IAAIA,IAAYA,EAAQzwI,UAAaywI,EAAQ95C,oBAK7C,0GAAuBv+J,IAJrB,uG,6CAQF,IAAMslE,GAAaA,EAAbA,6GACA0yI,EAAqBlzN,KAAKU,YAWhC,OAVuC,IAAnCwyN,EAAmBh4M,OAAO9P,MACxB8nN,EAAmB97K,MAAQ87K,EAAmB97K,KAAKjxB,eACrDq6D,EAAWzrF,KAAK,CACdmsF,SAAU,YACVI,UAAW4xI,EAAmB97K,KAAKjxB,cAAcrT,UAAYlL,MAAMC,QAAQqrN,EAAmB97K,KAAKjxB,cAAcrT,SAAtC,YACtEogN,EAAmB97K,KAAKjxB,cAAcrT,SAAtC,UAA4D3Y,SAAS,MAAQ,KAAO,MAKxFqmF,I,oDAKP,OADexgF,KAAKU,YACN8vC,O,+CAId,OAAO,M,wBA/EUgrD,G,4MCDAwiS,E,YACnB,WAAYl/S,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,sDACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAIq6X,K,sCAIlC,IAAM9qK,EAAqBlzN,KAAKU,YAChC,IAAKV,KAAK8iF,UAAYowI,EAAmBK,QACvCL,EAAmBK,QAAQzwI,UAAW,EACtCowI,EAAmBK,QAAQ3gI,oBACtB,CACL,IAAMp7C,EAAW07K,EAAmB17K,SAChCA,IAAax3C,KAAK8iF,UAAYtrC,EAASsrC,WACzCtrC,EAASsrC,UAAW,Q,GAvB5B,M,4BAEqBk7S,G,4MCAAh5I,E,YACnB,WAAYlmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,yBACd,EAAKuV,SAAW,WAChB,EAAKD,OAAS,eACd,EAAKF,YAAc,0DACnB,EAAKsnE,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAIqhP,K,sCAIlC,IAAM9xB,EAAqBlzN,KAAKU,YAChC,IAAKV,KAAK8iF,UAAYowI,EAAmBK,QACvCL,EAAmBK,QAAQzwI,UAAW,EACtCowI,EAAmBK,QAAQ3gI,oBACtB,CACL,IAAMyzJ,EAAanzB,EAAmBmzB,WAClCA,IACFA,EAAWvjK,SAAW9iF,KAAK8iF,e,GAxBnC,M,4BAEqBkiK,G,4MCAAi5I,E,YACnB,WAAYn/S,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,yBACd,EAAKuV,SAAW,WAChB,EAAKH,YAAc,0DACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAIs6X,O,GAZtC,M,4BAEqBA,G,4MCAAC,E,YACnB,WAAYp/S,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,6BACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,8DACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAIu6X,O,GAZtC,M,4BAEqBA,G,mJCFrB,QACA,SACA,Q,IACA,Q,mDAEA,IAAML,EAAwB,CAAC,eAAgB,SAAU,QAEpC70B,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAxlW,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WAEd,GAAIk6X,EAAsB1jY,SAASwJ,EAAU6M,WAC3C,OAAO,EAET,IAAMlK,GAAS,aAAU3C,EAAU6M,WAC/Bo8H,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAO/E,OANKsmI,IACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ3C,EAAU6M,WAC/DxQ,KAAK+e,aAAahqB,KAAK63I,IAEzBA,EAAYlsI,UAAY,kBAAM,GAC9BksI,EAAYwD,KAAKzsI,IACV,I,2CAIP,OAAO,I,6DA1BFqE,GAAK,Q,aADOghW,G,+ICPrB,SACA,Q,IACA,S,uDAEqBrvJ,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAn2M,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKs0H,iBAAkB,EACvB,EAAK8U,kBAAoB,CAAC,MANd,E,qEASTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,KACHy/H,EAAkB,eAClBC,YAKJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,2CAIrE,OAAO,I,6DAzBFl9I,GAAK,a,aADO2xM,G,4MCFAkrD,E,YACnB,WAAY/lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIkhQ,O,GAVtC,M,4BAEqBA,G,yJCFrB,SACA,QACA,SAEA,Q,IACA,QACA,Q,uDAEqBtiB,G,gBAGnB,cAAc,iGACN,GAAM,EAAO,EAAA/+O,aAAaC,UADpB,OAEZ,EAAK6C,OAAS,eACd,EAAK/C,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKH,YAAc,mCACnB,EAAKhY,cAAL,iBACA,EAAKuhJ,kBAAoB,CAAC,SAPd,E,qEAUTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,OACL,IAAK,QACHy/H,EAAkB,YAClBC,EAAmBg+N,EAGvB,OAAOluW,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,O,aAtBhEl9I,GAAK,Q,aADOu6O,E,IA4Bf2rH,E,YACJ,WAAYpvR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,mCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GAKH,OAJKA,EAAUmP,SAAV,UAEHnP,EAAUmP,SAAV,QAAgC,EAAAqlB,SAAS0tH,kBAE3C,+FAAmBliJ,EAAW,IAAIuqW,K,6CAIlC,IAAM1tR,GAAaA,EAAbA,6GACAtlE,EAASlb,KAAKU,YAAYwa,OAC1Bg4M,EAAqBh4M,EAAOsD,MAAM,UAAaxW,IAoBrD,OAnBIkrN,GAAsBA,EAAmBK,SAA4B,IAAhBr4M,EAAO9P,OAC1D8nN,EAAmBK,QAAQzwI,SAC7BtC,EAAWzrF,KAAK,CACdmsF,SAAU,UACVI,UAAW,SAEJ4xI,EAAmBK,QAAQptM,eAAiB+sM,EAAmBK,QAAQptM,cAAcrT,SAAzC,QACrD0tE,EAAWzrF,KAAK,CACdmsF,SAAU,UACVI,UAAW4xI,EAAmBK,QAAQptM,cAAcrT,SAAzC,QAA6D,KAG1E0tE,EAAWzrF,KAAK,CACdmsF,SAAU,UACVI,UAAW,EAAAnpD,SAAS0tH,mBAKnBrlE,M,uKC5EX,SACA,SACA,Q,IACA,O,IAEA,M,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBqhK,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAr+O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKnY,cAAL,iBACA,EAAKgY,YAAc,2BAGnB,EAAK+4O,SAAW,KAChB,EAAKC,UAAY,KACjB,EAAKC,WAAa,KAClB,EAAKC,UAAY,KACjB,EAAK7sI,QAAU,KACf,EAAKzzE,WAAa,KAClB,EAAK09J,UAAY,KACjB,EAAK/sD,kBAAoB,CAAC,aAAc,YAAa,aAAc,cAAe,aAAc,YAC9F,cAjBU,E,qEAoBTthJ,GAA+B,IAApBuhJ,IAAoB,yDAC9BjV,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACL,IAAK,aACHy/H,EAAkB,aAClBC,YACA,MACF,IAAK,YACHD,EAAkB,WAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,YACHD,EAAkB,WAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YAeJ,OAAOlwI,KAAKktL,WAAWj9C,EAAiBC,EAAkBvsI,EAAWuhJ,K,2CAIrE,OAAO,I,iCAGmB,WAAnBqtB,IAAmB,yDAC1B,OAAOvyK,KAAK+e,aACT/X,QAAO,SAAAiqE,GAAA,OAAQ,EAAKwhG,kBAAkBxhG,EAAMshG,MAC5CzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,6FAO1B+lP,GAAmB,IACnChoP,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACPjN,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACpBA,EAAYtmI,SAAW2uP,EAAkB3uP,QAAUsmI,EAAYO,8BACjB,gBAA5CP,EAAYO,6BACdP,EAAYlmD,oBAAqB,EACjCkmD,EAAYrmD,WAAWt5E,IAAoB,GACjC2/H,EAAYsoH,gBACtBtoH,EAAYO,4BAA4BC,4B,aA5FzCplI,GAAK,Q,aADO65O,G,qJCdrB,Q,IACA,QACA,QACA,Q,uDAEqBK,E,YACnB,WAAYpjK,IAAS,gGACbA,IADa,SAoGrB21S,kBAAoB,SAACpxX,GACnB,MAAkD,SAA3C,EAAKo5M,yBAAyBp5M,IArGlB,EAwGrBo5M,yBAA2B,SAACp5M,GAC1B,OAAOA,GAAWuE,MAAMC,QAAQxE,EAAQyP,SAAR,gBAAsCzP,EAAQyP,SAAR,eAAmC,GAAK,MAvG9G,EAAKxM,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,sCACnB,EAAK7N,gBAAiB,EACtB,EAAKwpP,sBAAuB,EACxBv4K,IACF,EAAKljD,4BAA8B,GACnC,EAAA3D,oBAAoB75B,SAAQ,SAAAy9B,GAC1B,EAAKD,4BAA4BC,GAAsB,CACrDC,KAAM,EACNC,aAAa,OAZA,E,qEAkBhBp4B,GACH,sGAAmBA,EAAW,IAAIu+O,K,wCAGlB5+J,EAAa7sF,GAC7B,OAAO6sF,EAAY3mE,WAAU,SAAAtZ,GAAA,OAAWA,EAAQoc,2BAA6BhpB,O,4CAGzDo/C,EAASouC,GAC7B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGkmR,GAAoBA,EAApBA,sIAAyEnqW,KAAKygF,sBAAqB,GAAOyD,GAC1GG,EAAoB,GAClB85S,EAAan+X,KAAKy8M,yBAAyBz8M,KAAKmmB,eAClD2uW,EAAwB,KAC5B,GAAI90X,KAAKmmB,eAAiBnmB,KAAKy0X,kBAAkBz0X,KAAKmmB,eAAgB,CACpE,IAAM+rE,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IAC5D8sX,EAAwB5iS,GAAiBA,EAAcC,YAAcD,EAAcC,WAAWhsE,eACzF+rE,EAAcC,WAAWhsE,cAAcrT,UAAYo/E,EAAcC,WAAWhsE,cAAcrT,SAAvC,cATjB,2BAWzC,YAAoBq3V,EAApB,+CAAuC,KAA9B9mW,EAA8B,QAC/B8xG,EAAc9xG,EAAQoc,yBAC5B,IAAIpc,EAAQugF,yBAAZ,CAGA,IAAMw6S,EAA2Bp+X,KAAKq+X,kBAAkBh6S,EAAmB8wB,GACrEmpR,GAAeH,GAAen+X,KAAKy8M,yBAAyBp5M,KAAa86X,EACzEI,GAAoBzJ,GAA0BzxX,EAAQyP,UAAYzP,EAAQyP,SAAR,eACnEzP,EAAQyP,SAAR,cAAkC3Y,SAAS26X,EAAsB,IAEtE,cACMsJ,GAA4B,EAC1BE,GAAeC,GACjBl6S,EAAkB1uF,OAAOyoY,EAA0B,EAAG/6X,GAGxDghF,EAAkBtvF,KAAKsO,IAEe,IAA9B+6X,GAAoCE,GAAeC,GAC7Dl6S,EAAkBtvF,KAAKsO,KA9Bc,6EAiCzC,OAAOghF,I,yCAGUxuC,EAASouC,GAC1B,IAAMI,EAAoBrkF,KAAKw+X,sBAAsB3oV,EAASouC,GAC9D,OAAOjkF,KAAKukF,wBAAwBF,K,iDAGX2wS,GAAoD,WAAxCzxS,EAAwC,uDAA1B,GAAIk7S,EAAsB,wDACvEj+S,EAAaxgF,KAAKygF,uBACpB4D,GAAoBA,EAApBA,sIAAyE7D,GACvE2tB,EAAmB9pB,EAAkBr9E,QAAO,SAAA3D,GAAA,OAAW,EAAKo5M,yBAAyBp5M,KAAa2xX,KAEpGC,EAAkB1xS,GACjB0xS,GAAmBj1X,KAAKmmB,gBAC3B8uW,EAAkBj1X,KAAKmmB,cAAc1G,0BAGvC,IAAMmxM,EAAcziH,EAAiBnnG,QAAO,SAAA3D,GAC1C,OAAOA,EAAQoc,2BAA6Bw1W,KAE9C,GAAIrkK,EAAYn8N,OAAS,EAAG,CAC1B,IAAMqgY,EAAwB90X,KAAKk1X,qCAC7BC,EAAkBvkK,EAAY9kN,MAAK,SAAAzI,GACvC,GAAI,EAAKoxX,kBAAkBpxX,GACzB,OAAOA,EAAQs9E,gCAAgC,CAC7C,CACEO,SAAU,gBACVI,UAAWwzS,QAKnB,OAAOK,GAAmBvkK,EAAY,GAExC,OAAI6tK,EACK7tK,EAAY,GAEdA,EAAY,IAAMziH,EAAiB,K,oDAY1C,OAAOnuG,KAAKy8M,yBAAyBz8M,KAAKmmB,iB,2DAkB1C,IAAM+rE,EAAgBlyF,KAAKU,YAAYwa,OAAOsD,MAAM,UAAQxW,IAC5D,OAAOkqF,GAAiBA,EAAcC,YAAcD,EAAcC,WAAWhsE,eACxE+rE,EAAcC,WAAWhsE,cAAcrT,UAAYo/E,EAAcC,WAAWhsE,cAAcrT,SAAvC,kB,iCAlIvCovO,G,4MCHAF,E,YACnB,WAAYljK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,qCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIq+O,O,GAdtC,M,4BAEqBA,G,4MCAAD,E,YACnB,WAAYjjK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,sCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIo+O,O,GAdtC,M,4BAEqBA,G,4MCAAgjB,E,YACnB,WAAYjmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,wCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIohQ,O,GAdtC,M,4BAEqBA,G,4MCAA0kG,E,YACnB,WAAY3qR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAI8lW,O,GAdtC,M,4BAEqBA,G,kMCAAlmG,E,YACnB,WAAYzkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKiqB,SAAU,EACf,EAAK1U,SAAW,YAChB,EAAKH,YAAc,sCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EARH,E,qEAWhBlK,GACH,GAAIA,EAAUmP,SAAV,KAA4B,CAC9B,IAAMmwE,GAAct/E,EAAUmP,SAAV,KAA2B,GAC/C,OAAO9S,KAAKojF,MAAMz/E,EAAW,IAAI3D,KAAKmjF,aAAY,EAAOF,IAAa,EAAqB,IAAfA,EAAmB,WAAa,iBAE9G,OAAOjjF,KAAKojF,MAAMz/E,EAAW,IAAI3D,KAAKmjF,iB,GAnB1C,M,4BAEqBogL,G,4MCAAmmG,E,YACnB,WAAY5qR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAI+lW,O,GAdtC,M,4BAEqBA,G,8HCFrB,MACA,O,IACA,O,IACA,OAEA,QAMA,Q,IACA,Q,IACA,QACA,Q,IAEA,QACA,Q,IACA,Q,IAEA,QACA,S,IACA,Q,uDAEMinB,E,yOAEJz2H,gBAAkB,SAACt5J,GACjB,IAAM1lF,GAAS,IAAAC,oBAIf,GAFA,EAAKmwF,MAAMqxH,gBAAgB/7H,GAEvBxnG,SAASuzN,aAAc,CAEzB,IAAMztM,EAAahE,EAAOwmE,uBAEpBg0K,EAAc,UAAE7P,sBAAsB3mO,EAAY9lB,SAASuzN,cAIjE,GAAI+oC,EAAa,CACf,GAAIA,EAAY5P,oBAAsB,EAAK/+O,MAAMwwN,eAS/C,OARI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KAGhB,EAAKkkK,gBAAgBn7H,EAAa90J,IAE7B,EAC6B,IAA3B,EAAK75F,MAAMoxN,aACpB,EAAK76C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAK0L,sBACL,EAAK5wH,aACL/Y,YAAW,YACT,aAAEt1F,UAAUupG,GAAG,QAAS,EAAKm7E,qBAC5B,MAIP43E,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,QAC9D,EAAK6+N,0BAA0Bs9B,M,EAQzCm7H,gBAAkB,SAAC54J,EAAiBr3H,GAClC,IAAI67N,EAAqB,GAgBzB,OAf0C,gBAAtCxkG,EAAgB6tB,oBAOlB22E,EAAqB,CAAC,EAAG,EAAG,EAAG,EAAG,IAQ5BxkG,EAAgB6tB,mBACtB,IAAK,0BACH7tB,EAAkB,aAClB,MACF,IAAK,oBACHA,EAAkB,oBAClB,MACF,IAAK,mBACHA,EAAkB,mBAClB,MACF,IAAK,yBAEHA,EAAkB,yBAClB,MAEF,IAAK,0BAEHA,EAAkB,0BAClB,MAEF,IAAK,oBAEHA,EAAkB,oBAClB,MAEF,IAAK,uBACHA,EAAkB,UAAajwN,GAKnC,IAAMvH,GAAW,aAAEtI,QAAQwH,QAAU,IAEjCmyC,EAAOrxC,EAAW,MAAQmgG,EAAM7mF,QAAU,GAC1C7U,EAAMzE,EAAW,MAAQmgG,EAAMzmF,QAAU,GACzC03B,EAAQ,OAENwwR,EAAkB5F,EAAmBhoU,OAAS,EAAI,IAAM,IAE1D6tU,EAAmB,IAUvB,GATI7F,EAAmBhoU,OAAS,EAC9B6tU,EAAmB,IACV7F,EAAmBhoU,OAAS,IACrC6tU,EAAmB,MAEhB7hU,GAAaqxC,EAAO35C,OAAOwqD,WAAa0/Q,IAC3CvwR,EAAO,OACPD,EAAQ,IAELpxC,GAAayE,EAAM/M,OAAO+xD,YAAco4Q,EAAmB,CAC9D,IAAIC,EAAiB,GACjB9F,EAAmBhoU,OAAS,EAC9B8tU,EAAiB,IACR9F,EAAmBhoU,OAAS,IACrC8tU,EAAiB,KAEnBr9T,GAAYq9T,EAEd,EAAKjlJ,SAAS,CACZ26C,kBACAtL,aAAcvzN,SAASuzN,aACvBqtC,oBAAqB,CACnBloN,OACAD,QACA3sC,U,EAKNgiJ,0BAA4B,SAACj2E,GAA+B,IAAzBt8D,EAAyB,wDAC1D,EAAK+lN,0BAA0BzpJ,GAC/B,EAAKslL,UAAUtlL,EAAMt8D,GAErB,IAAMm8W,EAAmB,CAAC,wBAAyB,eAC/CA,EAAiB32X,SAAS82E,EAAKz1D,KAAKlV,SACtC,EAAKkzN,gBAGH,EAAKzyN,MAAMgxN,sBACb,EAAKzsH,MAAMipH,a,gGAIN,WACDr5M,GAAS,IAAAC,oBAETsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KAEvF4iK,EAAcljK,EAAOo9E,wBAIvB06R,GAA6B,EAE7Bn1M,GAAiBA,EAAcq4I,6BAC9Br4I,EAAcq4I,gCACjB88D,GAA8BhzX,KAAKsrG,MAAMwwC,qCAG3C,IAAMs1O,EAAiBpxX,KAAKk4P,2BATV,GAYZ57B,EAAsB,CAAC,EAAA59K,YAAYG,OAAQ,EAAAH,YAAYE,OAAQ,EAAAF,YAAY3pB,UAAW,EAAA2pB,YAAYI,aAExG,OACE,+BAAK8rC,WAAW,aAAW,cAAe,CAAC,yBAA0B5qF,KAAK+G,MAAMwwN,kBAC9E,+BACE3sI,WAAW,aAAW,MAAO,CAAC,cAAe5qF,KAAK+G,MAAMwwN,gBAAiB,QAAUv3N,KAAK+G,MAAMoxN,cAC9F,+BAAKvtI,UAAU,cAAco1D,IAAK,SAACkkI,GAAD,OAAU,EAAK1nD,WAAa0nD,IAC5D,+BAAKt5L,UAAU,wBACb,+BAAKA,UAAU,6BACZ5qF,KAAK6wD,SArBA,EAAsB,IAWrB,EAU4C4sH,EAAYI,IAEjE,kCAAQjzF,UAAU,6BAA6BkyF,QAAS98K,KAAKy4N,mBAE9Dz4N,KAAKq8N,sBAAsBC,GAC3B02J,EAA6B,KAC5B,+BAAKpoS,UAAU,sBAAsBymS,eAAgBrxX,KAAKy6N,yBACxD,mCAAkBr8C,YAAaA,EACbM,SAAS,EACThuE,OAAQ1wG,KAAK+G,MAAMwwN,eACnB95C,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,0BAW/Cj9K,KAAK+G,MAAMkxN,kBAAoBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACvD,mCAAmBgiO,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBqtC,oBAAqBh6P,KAAK+G,MAAMizP,oBAChC3iC,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,iBACvBl+B,yBAA0Bt6N,KAAKsrG,MAAMgvH,2BAExD,MAEL82J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,U,cAqBNuT,EAAqB,CACzB91C,8CACAF,kDACAI,oDACAK,oDACAQ,sDACAE,wEACAt3H,oDACAyB,oEACA+qI,sDACAF,gDACA5V,6C,WAGa,IAAA/uC,UA5BS,SAACxzG,GAAD,MAAY,CAClCsnO,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzC4C,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxComI,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D8U,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5CF,2BAA4Bp4J,EAAMyvO,cAAcr3E,2BAChDzjJ,iBAAkB3U,EAAM4U,YAAYD,iBACpCkL,eAAgB7f,EAAMqN,mBAiBgB2qL,EAAzB,CAA6CqgM,I,8HCnR5D,MACA,OACA,O,IAEA,QAEA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,QAEA,QACA,Q,IAOA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QAEA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,uDAEMwJ,E,yOAMJjgI,gBAAkB,SAACt5J,GACjB,IAAM1lF,GAAS,IAAAC,oBAGT2pC,EAAS1rD,SAAS02F,eAAe,EAAKwb,MAAM1b,UAMlD,GAJKz3F,OAAOqmO,WAAc,EAAKz3N,MAAMwwN,gBAAmB,EAAKxwN,MAAMkxN,iBACjE,EAAK3sH,MAAMqxH,gBAAgB/7H,GAGzBxnG,SAASuzN,eAAiBx0N,OAAOqmO,UAAW,CAE9C,IAAMt/M,EAAahE,EAAOwmE,uBAEtBg0K,EAAc,UAAE7P,sBAAsB3mO,EAAY9lB,SAASuzN,aAAc7nK,GAC7E,GAAI4wM,EAAa,CACf,GAAIA,EAAY5P,oBAAsB,EAAK/+O,MAAMwwN,eAAgB,CAC/D,GAAI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KAEhBvzN,SAAS8pG,oBAAoB,QAAS,EAAK66H,2BACtC,CACL,IAAI9F,EAAkB,GAEhB6lK,EAAsB,WAC1B,IACMlmK,EADc18M,EAAOsD,MAAP,MACkB/B,WAAW3Q,MAAK,SAAA4Q,GAAA,MAAmC,eAAxBA,EAAQlB,KAAKlV,UAC9E,EAAKysN,2BAA2B6E,IAGlC,OAAQ89B,EAAY5P,mBAClB,IAAK,0BACH7tB,EAAkB,aAClB,MACF,IAAK,oBACHA,EAAkB,oBAClB,MACF,IAAK,mBACHA,EAAkB,mBAClB,MACF,IAAK,yBACH6lK,IACA7lK,EAAkB,yBAClB,MAEF,IAAK,0BACH6lK,IACA7lK,EAAkB,0BAClB,MAEF,IAAK,oBACH6lK,IACA7lK,EAAkB,oBAClB,MAEF,IAAK,uBACHA,EAAkB,UAAajwN,GAKnC,EAAKs1K,SAAS,CACZ26C,gBAAiBA,GAAmBy9B,EACpC/oC,aAAcvzN,SAASuzN,eACtB,WACGsL,GACFvpI,YAAW,WACTt1F,SAASytD,iBAAiB,QAAS,EAAKk3K,yBACvC,MAIT,OAAO,EAC6B,IAA3B,EAAKh3N,MAAMoxN,cACfhgO,OAAOsmO,kBACV,EAAKnzH,MAAMozH,gBAAgBg3B,EAAYv7B,OAASu7B,EAAYn8P,QAAUm8P,GAAap5P,cAAcqC,QAAQ,KAAM,MAEjH,EAAKk/N,kBAGP63B,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,QAAQ,GACtE,EAAK6+N,0BAA0Bs9B,M,EAQzCxuG,0BAA4B,SAACj2E,GAA+B,IAAzBt8D,EAAyB,yDAE7B,SAAzBxc,OAAO2B,SAAS6hL,MAAmBviL,SAASC,SAASC,YACvDtB,QAAQ4B,IAAI,OAAQq3E,GAEtB,EAAKslL,UAAUtlL,EAAMt8D,GAErB,EAAK22F,MAAMplF,iBAAiB+qD,EAAKz1D,MAEjC,IAAM+nN,EAAc,EAAKx8N,MAAM4yN,oBAC3B,EAAK5yN,MAAMgxN,qBAAqBz1M,KAAO,IAAM,EAAKvb,MAAM4yN,oBAAoBr3M,KAC5E,EAAKvb,MAAMgxN,qBAAqBz1M,KAE/BnqB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe6E,EAAYjnO,cAAcqC,QAAQ,KAAM,MAGhE,EAAKoI,MAAMgxN,sBACb,EAAKzsH,MAAMipH,YAEY,gBAArBtjJ,EAAKz1D,KAAKlV,QAA6B2qE,EAAKz1D,KAAK1I,SAAV,QACzC,EAAKw4F,MAAM6vC,2BAA2B,O,EAI1Cu+E,mBAAqB,SAACo+B,GAAqD,IAAlCt8G,EAAkC,uDAAT,KAC1Do+E,EAAck+B,EAAkBt8O,KAChCq+M,EAA4BD,EAAYtzN,OAe9C,GAdAszN,EAAYl5N,YAAYg5N,mBAAmBE,GAC3C,EAAKt8C,SAAS,CACZq8C,oBAAqBm+B,EACrB/+B,oBAAqBa,EAAYxnI,oBACjC4mI,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAK+5I,qBACL,EAAKjE,yBACL,EAAKhH,2BAA2B+kC,EAAmB,0BAGrD,EAAK99B,8BAA8B89B,IAE9B3/P,OAAOsmO,iBAAkB,CAC5B,IAAM8E,EAAc,EAAKx8N,MAAMgxN,qBAAqBz1M,KAAO,IAAMw1O,EAAkBx1O,KAChFhmB,cAAcqC,QAAQ,KAAM,KAC/B,EAAK2sG,MAAMozH,eAAe6E,GAE5B,EAAKlL,oBAAoBy/B,GAEzB,EAAK79B,wCAAwCJ,EAA2Br+E,I,EAI1E8jF,sBAAwB,WACtB,EAAKh0H,MAAMipH,YACX,EAAKkJ,qB,iHAvJmB7+C,GACxB5+K,KAAK08N,2BAA2B99C,K,+BAyJzB,IACAzmK,EAAkBnY,KAAKsrG,MAAvBnzF,eACD+C,GAAS,IAAAC,oBACTsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KACvFu6S,EAAgBl4I,GAAiBJ,EACjCW,EAAcljK,EAAOo9E,wBACrBlG,EAAsB2jO,GAAiBA,EAAc3jO,oBAOvD2gC,GAAY,EACZhqC,EAAe,GACf/oF,KAAKsrG,MAAMx5F,qBACT9R,KAAKsrG,MAAMx5F,mBAAmBonP,iBAAoBl5P,KAAKsrG,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,YACpHhV,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAUg/H,GAAiBA,EAAc6qL,cAAgB7qL,EAAczrF,sBACjH2gC,GAAY,EACZhqC,EAAe/oF,KAAK+G,MAAM/G,KAAKw7N,wBAAwBx7N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,UAG7F,IAAMq7E,EAAW3hF,KAAKy0B,YAAYvZ,GAE5Bk2W,EAAiBpxX,KAAKk4P,0BAA0BnlI,GAEhD4nG,EAAcl9C,GAAoC,kBAAtBA,EAAWn3K,QAA8Bm3K,EAAWrrF,qBAChFyrF,IAAkB79K,KAAKqzN,WAAWx1C,IAA2C,gBAAzBA,EAAcv3K,QACxC,gCAAzBu3K,EAAcv3K,SAA6Cu3K,EAAczrF,oBAE1E+sI,EAA2B42F,GAAiB,UAAgBtiH,yBAChEzzM,KAAKsrG,MAAMt1F,aAAc,WAAY+/S,EAAe59S,GACpD1jB,OAEIynU,GAAmBl8T,KAAKsrG,MAAMx5F,mBAAmB8rB,aACjDigJ,GAAiBA,EAAc13J,eAAiB03J,EAAct3F,WAAWvmF,KAAKsrG,MAAMr+F,mBAAqB4wK,EAAcn3F,mBASzHssS,GAA6B,EAMjC,IACMv3L,EAAY5d,GADM,CAAC,cAAe,iBAAkB,yBACP1jL,SAAS0jL,EAAcv3K,QAEpE+lJ,EAAewxB,GADK,CAAC,aAAc,aAAc,4BACC1jL,SAAS0jL,EAAcv3K,QAE/E,OACE,+BAAKskF,UAAW,gBACb5qF,KAAK+G,MAAMwwN,gBAAkBv3N,KAAK+G,MAAMkxN,gBAAkB,2BAA6B,KACxF,+BAAKrtI,UAAW,QAAU5qF,KAAK+G,MAAMwwN,eAAiB,gBAAkB,KAEtE,+BAAK3sI,UAAW,cAAgB5qF,KAAK+G,MAAMk4N,mBAAqB,oCAAsC,KACpG,+BAAKr0I,UAAU,eACb,+BACEA,UAAW,qBACR5qF,KAAK+G,MAAM4yN,oBAAsB,kCAAoC,KACrEl+B,EAAY,oCAAsC,KAClDpvC,EAAe,uCAAyC,KAC1DrsJ,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKwnE,cACrE,mCAAgB07S,YAAa1+X,KAAK+G,MAAM23X,YACxBj+X,UAAU,EACVo9K,cAAe79K,KAAK+G,MAAM4yN,oBAAoBn+M,KAC9CmjX,uBAAwB3+X,KAAK2+X,yBAC3C,KACH9gN,GAAiB4d,IAActjL,EAAeM,SAC3CyC,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAc13J,gBACpD,mCAAkB1lB,UAAU,EAAMo9K,cAAeA,IACnD,KACHA,GAAiBxxB,IAAiBl0I,EAAeM,SAC9CyC,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAc13J,gBACpD,mCAAqB1lB,UAAU,EAAMo9K,cAAeA,IACtD,KACHA,GAAiB79K,KAAKqzN,WAAWx1C,IAA6C,gBAA3BA,EAAchiK,WAC9D1D,EAAeM,SACf,mCACAs/M,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjCoD,yBAA0Bn7N,KAAKm7N,2BAC/B,MAEN,mCAAyBhD,YAAan4N,KAAK+G,MAAMoxN,YACxBl0I,WAAYjkF,KAAK+G,MAAMk9E,WACvB2L,SAAU5vF,KAAKsrG,MAAM1b,SACrBmoI,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjChb,wBAAyB/8M,KAAK+8M,wBAC9B/tL,sBAAuBhvB,KAAKsrG,MAAMt8E,sBAClC6vM,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5B21M,wBAAyB3+N,KAAK2+N,2BAExDhE,GAAc36N,KAAK+G,MAAMgyN,qBAAuBoG,GAC7Cn/N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OACzC,mCAAiB20J,sBAAuBxzM,KAAKwzM,sBAC5Bb,gBAAgB,WAChBl1B,WAAYs4I,EACZt1T,UAAU,IAG3BT,KAAK+G,MAAM0jN,mBACT13F,GAAa/yH,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAC1Exb,KAAKu7N,sBAEPv7N,KAAKk/N,YAAYv9I,EAAmCqxS,EAA4Br4J,EAAYl9C,EAAYI,EAAeshD,EAA0B/sI,IAEtJ2gC,GAAc/yH,KAAK+G,MAAM0jN,mBAAsBkQ,GAC5C36N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAevC,KAdF,mCACEurK,eAAgBrhI,EAAa/hF,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAClD1uC,kBAAmBnqN,KAAK+G,MAAM40N,gBAC9BzR,qBAAsBlqN,KAAKy4P,mBAC3BpuC,kBAAmBrqN,KAAKqqN,kBACxBe,qBAAsBprN,KAAKorN,qBAC3B3qN,UAAU,EACV2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnC21M,aAAa,EACbN,kBAAmBzqN,KAAK+G,MAAM0jN,kBAC9BE,oBAAqB3qN,KAAK2qN,oBAC1BD,4BAA6B1qN,KAAK0qN,4BAClCJ,kBAAmBvhI,EAAalrF,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,oBAAoB2xG,IAGjD82D,EACxB,mCACEv1M,WAAYs4I,EACZt1T,UAAU,IAEV,KACHk6N,IAAe36N,KAAK+G,MAAMgyN,qBAAuBoG,EAChD,mCAAiB1hD,WAAYs4I,EAAepjH,gBAAgB,WAAWlyM,UAAU,IAC/E,KACHT,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAU7+C,KAAK+G,MAAMgxN,wBACxDhlG,GAAsCigQ,GAA+Br4J,GAAcwE,GACtF,mCAAkB/gD,YAAaA,EACbX,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,wBACxC,OAGPj9K,KAAK+G,MAAMkxN,kBAAoBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACvD,mCAAmBgiO,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzB0K,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,iBACvBl+B,yBAA0Bt6N,KAAKsrG,MAAMgvH,2BAExD,KACH82J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,KACJ,mCACE/0K,GAAG,mBACHi8E,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9B7+B,UAAWl+K,KAAK+G,MAAM4yN,2B,cAmB1BrpC,EAAqB,CACzB91C,8CACAO,oDACA52H,oDACAyB,oEACA21H,sDACAE,wEACAN,wDACAN,6C,WAGa,IAAAkN,aACb,IAAAj8C,UAzBsB,SAACxzG,GAAD,MAAY,CAClC6f,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCshN,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzC6C,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCuxH,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D49D,cAAephN,EAAMyV,UAAU2rM,cAC/BzsM,iBAAkB3U,EAAM4U,YAAYD,oBAeXqjL,EAAzB,CAA6C6pM,K,mJCxY/C,QACA,SACA,Q,IACA,Q,uDAEqBnxB,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAxlW,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WAER2C,GAAS,aAAU3C,EAAU6M,WAC/Bo8H,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAO/E,OANKsmI,IACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ3C,EAAU6M,WAC/DxQ,KAAK+e,aAAahqB,KAAK63I,IAEzBA,EAAYlsI,UAAY,kBAAM,GAC9BksI,EAAYwD,KAAKzsI,IACV,I,2CAIP,OAAO,I,6DAvBFqE,GAAK,Q,aADOghW,G,+ICLrB,SACA,Q,IACA,S,uDAEqBrvJ,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAn2M,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACH,QAAQ,GACN,KAAK7M,EAAU4M,YAAYpW,SAAS,OAClC81I,EAAkB,eAClBC,aAOR,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,2CAMT,OAAO,I,6DAxCFqE,GAAK,a,aADO2xM,G,qJCJrB,QACA,SACA,SACA,Q,uDAEqBkrD,E,YACnB,WAAY/lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKotV,oBAAsB,CAAC,GAJT,E,qEAOhBtlW,GACH,sGAAmBA,EAAW,IAAIkhQ,K,6CAIlC,IAAM3pP,EAASlb,KAAKU,YAAYwa,OAC5BslE,GAAaA,EAAbA,6GACEymN,EAA0B/rR,EAAOsD,MAAM,EAAAgpP,kBAAkBx/P,IACzD0oI,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IAEnC6/P,EAAao/B,EAAwBp/B,WAe3C,OAdIA,GAAc7nQ,KAAKipW,oBAAoB9uW,SAAS+gB,EAAO9P,OAA2C,IAAlChS,SAASC,SAASqC,aACpF8kF,EAAWzrF,KAAK,CACdmsF,SAAU,SACVI,UAAYumL,GAAcA,EAAW1hP,eAAiB0hP,EAAW/kL,SAAY,MAAQ,OAIrF4tD,GAAgBA,EAAas2C,eAAiB,EAAD,0BAC/CxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAIrBxmG,I,gCAGCyG,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS0yH,WAAWkrD,kB,iCAtCvCA,G,gKCLrB,SACA,Q,uDAGqBpC,E,YACnB,WAAY3jL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAQtB,EARsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,oBACd,EAAKuV,SAAW,oBAChB,EAAKH,YAAc,oDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAH,eAAe,GAAK,OADvB,eAEG,EAAAA,eAAe,GAAK,MAFvB,IATiC,S,qEAgBhC33B,GACHA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GACnG,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAI8+P,GAAgB,EAAOx/K,IACvD,EAAqB,IAAfA,EAAmB,WAAa,mB,sCAG1B,WACdvuF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAAs9B,GACnC,EAAKD,eAAeC,IAAa,EAAKD,eAAeC,GAAU5oB,SAA9B,eACnC,EAAK8rX,kCAAkC,EAAKnjW,eAAeC,GAAU5oB,SAA9B,oB,oCAM5B9S,KAAKU,YAGbk+X,kCAAkC5+X,KAAK8S,SAAL,gBACzC,wG,gCAGQoI,GAER,IAAMw1H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC1D,IAAI0oI,IAAgBA,EAAatnD,yBAKjC,OAAIppF,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAKnFzgF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,gCAaM+rE,GAAU,WACdA,GACFvyF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GACzC,EAAKh+E,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAMO,OAASH,EAASg+K,YAAYxC,gBAA2B,GAAThpJ,U,KA/DzF,Q,mBAEqBgpJ,G,4MCFAymG,E,YACnB,WAAYpqR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKgzO,YAAc,gBACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,YAChB,EAAKH,YAAc,qDACnB,EAAKE,OAAS,gBACd,EAAK/N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EATV,E,qEAYhBvzU,GACH,sGAAmBA,EAAW,IAAIulW,K,gCAG1BjiR,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASE,MACpC/8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KAzB7C,Q,mBAEqB8hR,G,4MCAAjlG,E,YACnB,WAAYnlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKgzO,YAAc,kBACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,kBAChB,EAAKH,YAAc,uDACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EACzBp4P,IACF,EAAKiG,kBAAmB,GAVP,E,qEAchBphF,GAEH,OADAA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,IACnG,+FAAmBnP,EAAW,IAAIsgQ,K,yCAGjBpuN,EAASouC,GAC1B,OAAOjkF,KAAKmpW,4BAA4BtzT,EAASouC,K,gCAGzCgD,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASG,eACpCh9K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,O,KA7BxC,Q,mBAEqB68K,G,4MCAAC,E,YACnB,WAAYplL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKgzO,YAAc,cACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,cAChB,EAAKH,YAAc,mDACnB,EAAK7N,gBAAiB,EAClBixE,IACF,EAAKiG,kBAAmB,GATP,E,qEAahBphF,GAEH,OADAA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,IACnG,+FAAmBnP,EAAW,IAAIugQ,K,yCAGjBruN,EAASouC,GAC1B,OAAOjkF,KAAKmpW,4BAA4BtzT,EAASouC,K,gCAGzCgD,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASI,UACpCj9K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KA/B7C,Q,mBAEqB88K,G,4MCAAC,E,YACnB,WAAYrlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKgzO,YAAc,aACnB,EAAK/oN,SAAU,EACf,EAAK1U,SAAW,aAChB,EAAKH,YAAc,kDACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EARV,E,qEAWhBvzU,GACH,sGAAmBA,EAAW,IAAIwgQ,K,gCAG1Bl9K,GACR,IAAMG,EAASH,EAAS8S,OAAO+pK,SAASK,UACpCl9K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KAxB7C,Q,mBAEqB+8K,G,4MCAAJ,E,YACnB,WAAYjlL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAKH,YAAc,0DACnB,EAAK6U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKzrL,iBAAkB,EARJ,E,qEAWhB9nJ,GACH,sGAAmBA,EAAW,IAAIogQ,K,qCAWlC,sGACA,IAAM5qB,EAAuBn5O,KAAKU,YAAYA,YAC9Cy4O,EAAqBC,oBACrBD,EAAqBiwH,cAAcppW,KAAK+vI,mBAAoB/vI,KAAKgwI,iBACjEhwI,KAAK4mF,mB,0CA9BT,M,4BAEqBm9K,G,gKCFrB,QACA,SACA,Q,IACA,MACA,SACA,Q,IACA,O,uDAEqByC,E,YACnB,WAAY1nL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAUtB,EAVsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,iBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,4CACnB,EAAK8zS,cAAgB,kBACrB,EAAK5zS,OAAS,iBACd,EAAK2tV,cAAgB,EACrB,EAAKvmR,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAO,cAAc,GAAK,OADtB,eAEG,EAAAA,cAAc,GAAK,OAFtB,eAGG,EAAAA,cAAc,GAAK,MAHtB,IAXiC,S,qEAuBhCr4B,GACH,GAAqB,WAAjBA,EAAUqE,IAAoC,WAAjBrE,EAAUqE,GACzC,OAAO,EAETrE,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GACnG,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAkpB,cAAc,GAAK,EAAI,EAClF,sGAAmBr4B,EAAW,IAAI6iQ,GAAc,EAAOvjL,IACrD,EAAqB,IAAfA,EAAmB,WAAa,mB,yCAGvBptC,EAASouC,GAC1B,IAAMC,GAA4BA,EAA5BA,sOAA6FruC,GAAUouC,GACzGI,GAAoBA,EAApBA,sIAAyErkF,KAAKygF,uBAAwByD,GACpG26S,GAA6BA,EAA7BA,sOAA8FhpV,EAAS71C,KAAK6hF,eAAgBoC,GAOlI,OANyB66S,EAArBA,sIAA0E9+X,KAAKygF,uBAAwBo+S,GACxFzgY,SAAQ,SAAA2gY,GACrB16S,EAAkBxmF,OAAM,SAAAwF,GAAA,OAAWA,EAAQM,UAAUmF,oBAAsBi2X,EAASp7X,UAAUmF,sBAChGu7E,EAAkBtvF,KAAKgqY,MAGpB16S,EAAkBv8E,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAEq0E,YAAar0E,Q,gCAGlEgM,GAER,IAAM4zI,EAAiB9uJ,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAixH,eAAeznI,IAEpE,KAAIhI,KAAKU,YAAY0oF,0BAA4B0lE,GAAkBA,EAAelf,WAC7Ekf,EAAehf,YAAcgf,EAAelf,UAAU0pG,aAI3D,OAAIt5O,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,IALvB,uG,oDAYF,IACM8sE,EADShoF,KAAKU,YACEA,YACtB,GAAIsnF,EAAO9sE,QAAU8sE,EAAOoB,0BACvBpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAI8nI,YAAc,EAAA72G,mBAAmBG,YAAa,CACxF,IAAMsuH,EAAY1/D,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IACrD0/I,EAAUt+D,wBAAyB,EACnCs+D,EAAU5X,UAAY,EAAA72G,mBAAmBC,iB,kCAIjCvkB,GAEV,IADA,qGAAkBA,IACd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAIA,IACMgoF,EADsBhoF,KAAKU,YACEA,aAC/BsnF,EAAOoB,0BAA4BpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAI8nI,YAAc,EAAA72G,mBAAmBG,aACzGjhC,OAAO2B,SAASwb,KAAKnb,SAAS,cAKpC6F,KAAKu5O,8BAJH,UAAMt1N,UAAS,IAAAiqI,0BAAwB,O,6CAQzC,IAAI1tE,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAS1B,OARA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,SACVI,UAAWovD,EAAatnD,yBAA2B,MAAQ,WAE7D5I,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,gCAGCyG,GAAU,WACdA,GACFvyF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GACzC,EAAKh+E,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAMO,OAASH,EAAS8S,OAAOysK,cAAyB,GAAT/sJ,U,iCA9G7D+sJ,G,qJCRrB,QACA,QACA,S,uDAEqBojG,E,YACnB,WAAY9qR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,0CACnB,EAAK6U,SAAU,EACf,EAAKg5U,cAAgB,GANF,E,qEAShB5lW,GACH,sGAAmBA,EAAW,IAAIimW,K,gCAG1B1uV,GAAQ,WAEhB,IAAIlb,KAAKU,YAAY0oF,yBAYrB,OAPIppF,KAAKU,YAAYylJ,iBAAmB,EAAApsH,eAAeE,OACrDj6B,KAAK8iF,UAAW,GAElB9iF,KAAKmmB,cAAgBnmB,KAAK2hF,SAAS71E,MAAK,SAACzI,GACvC,IAAMuqX,EAA0B,EAAKltX,YAAY2oF,WAAWljE,cAC5D,OAAOynW,GAA2BvqX,EAAQwY,WAAa+xW,EAAwB/xW,aAEjF,mGAAuBX,IAXrB,uG,gCAcM+rE,GACJA,GAAYjnF,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,QAAU95B,KAAKmmB,gBAC9EnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS8S,OAAO//D,W,iCAjCnC4vU,G,qJCJrB,QACA,SAEA,QACA,SACA,Q,uDASqBC,E,YAEnB,WAAY/qR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK8zS,cAAgB,uBACrB,EAAKvsO,WAAaA,EAClB,EAAK6D,mBAAqB,GAC1B,EAAK9D,eAAgB,EACrB,EAAK0D,oBAAqB,EAC1B,EAAKH,WAAa,CAChB,GAAK,GAEP,EAAKgjR,cAAgB,EACrB,EAAK99M,iBAAkB,EAdY,E,qEAiBhC9nJ,GACH,IAAMmmW,GAAmBA,EAAnBA,6FAA+BnmW,EAAW,IAAIkmW,GACpD,GAAIC,EAAkB,CACpB,IAAMvmR,EAAcumR,EAAiBnmW,UAAUmF,kBAC/CghW,EAAiBvmR,YAAcA,EAC/BumR,EAAiBriN,eAAiB,SAClCqiN,EAAiBziN,iBAAmBrnJ,KAAK+pW,qBAAqBxmR,GAC9DumR,EAAiBh3V,SAAW9S,KAAKgqW,mBAAmBzmR,EAAaumR,EAAiBziN,kBAClFyiN,EAAiBvhR,aAAehF,EAAYjnF,cAAcqC,QAAQ,MAAO,KACzEmrW,EAAiBlmR,0BAA2B,EACvCkmR,EAAiBnmW,UAAUE,eAC9BimW,EAAiBlmW,gBAAkB5D,KAAKiqW,cAAc1mR,IAG1D,OAAOumR,I,6CAG0D,IAA9CvmR,EAA8C,uDAAhCvjF,KAAKmmB,cAAco9D,YACpD,QAAQ,GACN,KAAKA,EAAYppF,SAAS,QACxB,MAAO,OACT,KAAKopF,EAAYppF,SAAS,QACxB,MAAO,OACT,KAAKopF,EAAYppF,SAAS,QAC1B,QACE,MAAO,U,2CAIsE,IAAhEopF,EAAgE,uDAAlDvjF,KAAKmmB,cAAco9D,YAAa8jE,EAAkB,aAC3EoxK,EAAsBl1O,EAAYxlF,MAAM,MAAM,GACpD,MAAO,CACL,WAAc06T,EAAoBhkU,OAAS,EAAI,CAACgkU,EAAoB/6T,OAAO+6T,EAAoBhkU,OAAS,IAAM,CAAC,MAC/G,eAAuC,SAArB4yJ,EAA8B,CAAC,QAAU,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,W,sCAI5C,IAA9C9jE,EAA8C,uDAAhCvjF,KAAKmmB,cAAco9D,YAC7C,QAAQ,GACN,KAAKA,EAAYppF,SAAS,QACxB,OAAOopF,EAAYppF,SAAS,QAArB,8CACT,KAAKopF,EAAYppF,SAAS,QACxB,OAAOopF,EAAYppF,SAAS,QAArB,8CACT,KAAKopF,EAAYppF,SAAS,QAC1B,QACE,OAAOopF,EAAYppF,SAAS,QAArB,iD,oCAKX,IAAMZ,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,sGACAnH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAO8vF,WAAWljE,cAAgBnmB,KAEpCA,KAAKU,YAAYimJ,0BAA2B,EAC5C,IAAM3+D,EAAShoF,KAAKU,YAAYwa,OAASlb,KAAKU,YAAcV,KAAKU,YAAYA,YACzEsnF,EAAOoB,yBACSpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,GAErCppF,KAAK4mF,mB,sCAGS,WACR8pD,EAAe1wI,KAAKU,aAC1BgwI,EAAa3xH,aAAa3gB,SAAQ,SAAC4gB,GACjCA,EAAQ8jE,SAAW,EAAKA,SACpB9jE,EAAQ8nE,oBAAsB9nE,EAAQ8nE,mBAAmBryF,QAC3DuqB,EAAQ8nE,mBAAmB1oF,SAAQ,SAAC2oF,GAC9BA,IACFA,EAAkBjE,SAAW,EAAKA,gBAKtC4tD,EAAax1H,QAAUw1H,EAAatnD,0BACpBsnD,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IACjDohF,wBAAyB,GAErCppF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,YAEjB4tD,EAAax1H,OAAOsD,MAAMqjO,MAClCsU,QAAQrzK,SAAW9iF,KAAK8iF,SAGnC,IAAMigN,EAAgBryJ,EAAax1H,OAAOsD,MAAM4oP,QAE5C12H,EAAax1H,OAAO9P,OAAS,EAAAsrB,WAAWgkE,QAAU16F,KAAK8iF,UAAYigN,IACjEA,EAAcC,cAChBD,EAAcC,YAAYlgN,UAAW,GAEnCigN,EAAcC,cAChBD,EAAcmnE,YAAYpnR,UAAW,EACrCigN,EAAcmnE,YAAYt3Q,oB,wCAKd/8C,GAChB,IAAM36B,EAASlb,KAAKU,YAAYwa,OAC1BgpE,EAA4BruC,GAAUA,EAAVA,oHAA6CA,GAAW71C,KAAK2hF,SACzFuhN,EAAiBhoR,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,iBAC/C,OAAOh/M,EAA0Bl9E,QAAO,SAAC3D,GACvC,MAAuB,SAAnB6/R,GAA6C,IAAhBhoR,EAAO9P,OACF,SAA7B/H,EAAQgkJ,kBAA4D,SAA7BhkJ,EAAQgkJ,uB,6CAO1D,MAAO,K,8CAGe,WAChBvgE,EAAsB9mF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAc88D,WAAcjjF,KAAK6hF,cAAc76E,QAAO,SAAC3D,GAC5G,OAAOA,EAAQwY,WAAa,EAAKsK,cAActK,YAC5C,GAIL,OAHAirE,EAAmB1oF,SAAQ,SAAC2oF,GAC1BA,EAAkBjE,SAAW,EAAKA,YAE7BgE,I,mCAGI,WACLqjR,EAAoBnqW,KAAKmqW,oBACzBjvV,EAASlb,KAAKU,YAAYwa,OAC5B0tE,EAAmBuhR,EAAkBr+V,MAAK,SAACzI,GAC7C,MAA4B,uBAArBA,EAAQwY,YAGM,SADAX,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIk7R,kBACE,IAAhBhoR,EAAO9P,MAAcpL,KAAKmmB,gBACzDyiE,EAAmBuhR,EAAkBr+V,MAAK,SAACzI,GACzC,OAAO,EAAK8iB,cAActK,SAAS1hB,SAAS,QACxCkJ,EAAQwY,SAAS1hB,SAAS,QAC1BkJ,EAAQwY,SAAS1hB,SAAS,YAGlC6F,KAAKmmB,cAAgByiE,GAAoBuhR,EAAkB,GAC3DnqW,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,gCAGvB5sE,GACJlb,KAAKU,YAAY0oF,0BACnB,sGAGF,mGAAgBluE,K,wEAKLgE,GACQ,IAAfA,GAAoBlf,KAAK8iF,WAC3B9iF,KAAK8iF,UAAW,EAChB9iF,KAAK4yF,qB,iCAlLUi3Q,G,4MCZA8hB,E,YAEnB,WAAY7sS,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,oCACnB,EAAK8zS,cAAgB,oBACrB,EAAKj/R,SAAU,EACf,EAAKyyD,eAAgB,EAPF,E,qEAUhBr/E,GACH,sGAAmBA,EAAW,IAAIgoX,K,iCAGzBzwW,GACT,IAAM0wW,EAA4B5rX,KAAK2hF,SAAS36E,QAAO,SAAA3D,GACrD,OAAOA,EAAQyP,SAAR,QAA8BzP,EAAQyP,SAAR,OAA2B3Y,SAAS,eAErEyuF,EAAmB5oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC3C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,4CAW3E0uF,EAAqB7oF,KAAK2hF,SAAS71E,MAAK,SAACzI,GAC7C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,oBAIjF6F,KAAKmmB,cAAgByiE,IAAoBA,EAApBA,kGAAqC1tE,IAAW0wW,EAA0B,GAC/F5rX,KAAKgnF,mBAAqB6B,IAAsBA,EAAtBA,kGAAuC3tE,IAAW,O,gCAmBpE+rE,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAOhxG,SAASo4I,QACvDjyK,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAOhxG,SAASo4I,c,GA/DxE,M,4BAEqB05M,G,qJCFrB,QACA,S,uDAEqBpjB,E,YAEnB,WAAYzpR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,2CACnB,EAAKE,OAAS,gBACd,EAAK2U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EAPF,E,qEAUhBr/E,GACH,sGAAmBA,EAAW,IAAI4kW,K,sCAIlCvoW,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,6CAIxC,IAAMtC,GAAaA,EAAbA,6GACA+tB,EAAevuG,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWitB,EAAa+2C,sBAEnB9kE,I,6CAGc,WACrB,OAAOxgF,KAAK2hF,UAAY3hF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEosF,wBAAwB,aAAc,EAAKpkF,YAAYwiS,sBAAsB,K,gCAGzHhoR,GAER,IAAM2wW,EAAiB7rX,KAAKU,YAAY0jJ,cACxC,GAAIynO,GAAkBA,EAAe1lW,cAAe,CAClD,IAAM2lW,EAAcD,EAAe1lW,cAAcrT,SAA7B,aACdi5W,EAA4BF,EAAe1lW,cAActK,SAAS1hB,SAAS,uBAE7E0xX,EAAe1lW,cAActK,SAAS1hB,SAAS,+BAC3C2xX,GAAcA,EAAW3xX,SAAS,SAE1C,GAAI2xX,GAAcA,EAAW3xX,SAAS,SAAW4xX,EAE/C,YADA,qGAKJ,OAAI/rX,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,K,gCAMjB+rE,GACR,GAAIA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,OAAQ,CACvE,IAAMstD,EAASH,EAAS4jD,OAAOw6G,OAC3BrlP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAjE1BmhR,G,qJCHrB,QACA,S,IACA,MACA,S,uDAEqBE,E,YACnB,WAAY3pR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,4CACnB,EAAKE,OAAS,SACd,EAAK4zS,cAAgB,eACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACrB,EAAK0lR,cAAe,EATD,E,qEAYhB/kW,GACH,sGAAmBA,EAAW,IAAI8kW,K,sCAQlCzoW,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,+CAGjB44H,EAAYxlM,GAKnC,IAEMk7M,EAFe,UAAMjvN,WAAW4S,YAAYiB,aACvBlK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASilN,KAClC1zM,GAChB4oF,EAAgB,EAAAhyC,OAAOkqT,wBAAwB13I,EAASl7M,GACxDuyE,EAAmBzoF,KAAK2hF,SAAS36E,QACrC,SAAA3D,GAAA,OAAWA,EAAQM,WAAaN,EAAQM,UAAUkS,eAAeu7M,IAAY/tN,EAAQM,UAAUkS,eAAeu7M,GAASj3N,SAASy2F,MAElI,KAAK,EAAD,8GAA8BnI,EAAkB,KAAM,SAAU,CAClEzoF,KAAKmmB,cAAgBsiE,EAAiB,GACtC,IAAMsgR,EAA+BtgR,EAAiBzhF,QAAO,SAAA3D,GAC3D,OAAOA,EAAQM,UAAU4M,YAAYpW,SAAS,eAAiBkJ,EAAQM,UAAU4M,YAAYpW,SAAS,YAExG6F,KAAKgnF,mBAAqB+hR,EAA6B,M,gCAQjD9hR,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAOonC,SAEhDhrF,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAOonC,a,iCAvDxCw2L,G,qJCLrB,QACA,S,uDAIqBgI,E,YACnB,WAAY3xR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,oBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,+CACnB,EAAK8zS,cAAgB,cACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKjsB,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAI8sW,K,sCAIlCzwW,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,6CAIxC,IAAMtC,GAAaA,EAAbA,6GACA+tB,EAAevuG,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWitB,EAAa+2C,sBAEnB9kE,I,gCAGCyG,GACJA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,SAC3D95B,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAO85H,YAEjD3kQ,KAAKgnF,qBACNhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAO85H,iB,iCAnC1C8rG,G,qJCLrB,QACA,S,uDAEqB/rG,E,YAEnB,WAAY5lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,oBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,+CACnB,EAAKE,OAAS,aACd,EAAK2U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKkpD,eAAgB,EACrB,EAAKn1E,gBAAiB,EARH,E,qEAWhBlK,GACH,sGAAmBA,EAAW,IAAI+gQ,K,6CAIlC,IAAMlkL,GAAaA,EAAbA,6GACA+tB,EAAevuG,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWitB,EAAa+2C,sBAEnB9kE,I,gCAGCyG,GACR,GAAIA,EAAU,CACZ,IAAMG,EAASH,EAAS4jD,OAAO65H,iBAC3B1kQ,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,Q,iCA/BrBs9K,G,qJCHrB,QACA,S,uDAEqBE,E,YACnB,WAAY9lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,2CACnB,EAAK8zS,cAAgB,UACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMtqH,SAAU,EAAAgxG,OAAOsZ,MAAMrqH,QACpD,EAAKkpD,eAAgB,EAPF,E,qEAUhBr/E,GACH,sGAAmBA,EAAW,IAAIihQ,K,gCAG1B39K,GAEJA,GAAYjnF,KAAKmmB,gBAEnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAO+5H,Y,iCAnBnCA,G,qJCHrB,Q,IACA,OACA,SACA,Q,uDAEqB9f,E,YACnB,WAAYhmK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,yCACnB,EAAK8zS,cAAgB,QACrB,EAAKj/R,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QACzB,UAAOj5B,cACT,EAAKmiF,eAAgB,GARJ,E,qEAYhBr/E,GAIH,OAHKA,EAAUmP,SAAV,WACHnP,EAAUmP,SAAV,SAAiC,CAAC,EAAAqlB,SAASM,SAE7C,+FAAmB90B,EAAW,IAAImhP,K,sCASlC9kP,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,yCAWvBk0K,GACS,WAAtBA,GAGFh3P,KAAKU,YAAYA,YAAY0jJ,cAAcqtN,yBAAyB,OAAQzxW,KAAK8S,SAAL,WAA8B9S,KAAK8S,SAAL,WAA4B,GAAK,Q,+CAItH4oM,EAAYxlM,GACnC,IACMuyE,GADoBpE,EAApBA,sIAAyErkF,KAAKygF,wBACzCz5E,QAAO,SAAC3D,GACjD,OAAOA,EAAQyP,SAAS4oM,IAAer4M,EAAQyP,SAAS4oM,GAAYvhN,SAAS+b,MAE/E,KAAK,EAAD,8GAA8BuyE,GAAmB,CACnDzoF,KAAKmmB,cAAgBsiE,EAAiB38E,MAAK,SAAAzI,GAAA,OAAYA,EAAQM,UAAU4M,YAAYpW,SAAS,kBAAkBsuF,EAAiB,GACjI,IAAMsgR,EAA+BtgR,EAAiBzhF,QAAO,SAAA3D,GAC3D,OAAOA,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEhD6F,KAAKgnF,mBAAqB+hR,EAA6B,M,gCAIjD9hR,GACJA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,SAC5D95B,KAAKmmB,gBACNnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAOi6G,MAEjD9kP,KAAKgnF,qBACNhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAAS4jD,OAAOi6G,W,iCAjE1CA,G,yJCLrB,QAEA,Q,IACA,OACA,SACA,Q,uDAEqB+sH,E,YACnB,WAAY/yR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,SAChB,EAAK2zS,cAAgB,UACrB,EAAK9zS,YAAc,2CACnB,EAAK6U,QAAU,CAAC,EAAAs6G,OAAOsZ,MAAMrqH,QAC7B,EAAKstG,4BAA6B,EAC9B,UAAOvmI,cACT,EAAKmiF,eAAgB,GATJ,E,qEAahBr/E,GAMH,OALKA,EAAUmP,SAAV,SAEKnP,EAAUmP,SAAV,SAA+B3Y,SAAS,EAAAg+B,SAASO,SAAW/0B,EAAUmP,SAAV,SAA+B3Y,SAAS,EAAAg+B,SAASM,QACrH90B,EAAUmP,SAAV,SAA+B/d,KAAK,EAAAojC,SAASM,OAF7C90B,EAAUmP,SAAV,SAAiC,CAAC,EAAAqlB,SAASM,OAItCz4B,KAAKojF,MAAMz/E,EAAW,IAAIkuW,K,sCAIjC7xW,KAAKU,YAAY8nW,kBAAkBxoW,KAAK8iF,Y,2CAIxC,IAAM20B,EAAaz3G,KAAKU,YAAY02C,KACpC,GAAIqgE,GAAcA,EAAWtxF,cAAe,CAC1C,IAAMmrS,EAAW75M,EAAWtxF,cAAcrT,SAAzB,SACjB,GAAIw+S,EACF,OAAO1pT,MAAMC,QAAQypT,GAAYA,EAAS,GAAKA,EAC1C,GAAI75M,EAAWtxF,cAActK,SAAS1hB,SAAS,eACpD,MAAO,QAGX,OAAO,O,6CAGiC,IAArB+yX,IAAqB,yDAMlC1sS,GAAaA,EAAbA,6GACF0sS,GAAgBltX,KAAKitX,sBACvBzsS,EAAWzrF,KAAK,CACdmsF,SAAU,WACVI,UAAWthF,KAAKitX,uBAGpB,IAAM1+Q,EAAevuG,KAAKU,YACpBs+X,EAAiBzwR,EAAa+2C,oBAChC05O,GACFx+S,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW09S,GAAkBA,EAAe,IAA6B,OAAtBA,EAAe,GAAe,KAAOA,IAG5F,IAAMtsB,EAAWnkQ,EAAan3D,MAAQm3D,EAAan3D,KAAKjxB,eAAiBooF,EAAan3D,KAAKjxB,cAAcrT,SAAhC,SAQzE,OAPI4/V,GACFlyR,EAAWzrF,KAAK,CACdmsF,SAAU,WACVI,UAAWitB,EAAan3D,KAAKjxB,cAAcrT,SAAhC,WAIR0tE,I,gCAGCtlE,GACR,OAAIlb,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,sBAAqB,KAGxGzgF,KAAKomF,cAFH,mGAAuBlrE,K,6CAMJ,WACrB,OAAO,aAAOlb,KAAK2hF,UAAU,SAAAjpF,GAAA,OAAKA,EAAEosF,wBAAwB,aAAc,EAAKpkF,YAAYwiS,uB,yCAG1ElsC,GACS,SAAtBA,EACFh3P,KAAKU,YAAYA,YAAY02C,KAAKq6T,yBAAyB,WAAY,SAEvEzxW,KAAKU,YAAYA,YAAY0jJ,cAAcqtN,yBAAyB,OAAQzxW,KAAK8S,SAAL,WAA8B9S,KAAK8S,SAAL,WAA4B,GAAK,Q,gCAIrIm0E,GACJA,GAAYjnF,KAAKU,YAAYwjJ,iBAAmB,EAAArZ,OAAOsZ,MAAMrqH,QAC3D95B,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS4jD,OAAOk6G,Y,iCA/FrC8sH,G,qJCPrB,QACA,QACA,SACA,Q,uDAEqB/sG,E,YAEnB,WAAYhmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,uBACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,kDACnB,EAAK8zS,cAAgB,wBACrB,EAAK5zS,OAAS,cACd,EAAK/N,gBAAiB,EACtB,EAAK66V,cAAe,EACpB,EAAKa,cAAgB,EATF,E,qEAYhB5lW,GAIH,OAHKA,EAAUmP,SAAV,SACHnP,EAAUmP,SAAV,OAA+B,CAAC,YAElC,+FAAmBnP,EAAW,IAAImhQ,K,kCAGxBnwP,GACV,IAAMpb,EAASyG,KAAKU,aACpB,qGAAkBiU,GAClB,IAAMqzE,EAASzuF,EAAOmH,YAClBsnF,EAAOs+D,0BAA4Bt+D,EAAOs+D,yBAAyBtjE,gBACjEgF,EAAOs+D,yBAAyB5/D,sBAAuB,IAAAhyE,oBAAmB1U,QAC9EgoF,EAAOs+D,yBAAyBxjE,UAAW,EAC3CkF,EAAOs+D,yBAAyB1zD,iBAElC5yF,KAAK4mF,mB,wCAGWknS,GAChB,OAAOA,EAAa9mX,QAAO,SAAAsnI,GAAA,OAA0C,IAA3BA,EAAYrrD,gB,6CAItD,IAAIzC,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAC1B8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAE1B,IAAMoG,EAAkB18C,EAAatnD,0BAA4BsnD,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,KACtG0oI,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IAAI8nI,YAAc,EAAA72G,mBAAmBG,YAC9E,MACA,SAKJ,OAJAonD,EAAWzrF,KAAK,CACdmsF,SAAU,SACVI,UAAW8rG,IAEN5sG,I,gCAGCyG,GACR,IAAMG,EAASH,EAAS0yH,WAAWmrD,WAC/B79K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,O,iCA1DnB09K,G,qJCLrB,QACA,Q,uDAEqBE,E,YAEnB,WAAYlmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,sBAChB,EAAKH,YAAc,yDACnB,EAAKE,OAAS,qBACd,EAAK4zS,cAAgB,wBACrB,EAAK3hT,gBAAiB,EACtB,EAAK66V,cAAe,EACpB,EAAKa,cAAgB,EATF,E,qEAYhB5lW,GACH,sGAAmBA,EAAW,IAAIqhQ,K,kCAGxBrwP,GACV,IAAMpb,EAASyG,KAAKU,aACpB,qGAAkBiU,GAClB,IAAMqzE,EAASzuF,EAAOmH,YAClBsnF,EAAO6mE,kBAAoB7mE,EAAO6mE,iBAAiB7rE,gBACjDgF,EAAO6mE,iBAAiBnoE,sBAAuB,IAAAhyE,oBAAmB1U,QACtEgoF,EAAO6mE,iBAAiB/rE,UAAW,EACnCkF,EAAO6mE,iBAAiBj8D,iBAE1B5yF,KAAK4mF,mB,6CAIL,IAAIpG,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,gCAGCyG,GACR,IAAMG,EAASH,EAAS+9K,iBACpB/9K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,O,iCA3CnB49K,G,qJCHrB,QACA,QACA,QACA,SACA,QACA,S,uDAEqB9B,E,YACnB,WAAYpkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK6U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAKm1E,eAAgB,EACrB,EAAKumR,cAAgB,EAGjBzqR,IACF,EAAKwJ,2BAA6B,GAClC,EAAKvD,kBAAmB,EACxBrwF,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9B,EAAKwE,2BAA2BxE,GAAc,OAGlD,EAAKqE,oBAAsB,GAlBR,E,qEAqBhBxkF,GAEH,OADAA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,IACnG,+FAAmBnP,EAAW,IAAIu/P,K,yCAGjBrtN,EAASouC,GAC1B,OAAOjkF,KAAKmpW,4BAA4BtzT,EAASouC,K,sCAIjD,IAAMysD,EAAe1wI,KAAKU,YACpBkmJ,EAAmBlW,EAAakW,iBAClCA,IACFA,EAAiB9jE,SAAW9iF,KAAK8iF,UAEnC,IAAMoG,EAAYwnD,EAAax1H,OAAOsD,MAAM,EAAAgpP,kBAAkBx/P,KACzDhI,KAAK8iF,UAAYoG,GAAaA,EAAUm5M,YAAcn5M,EAAUm5M,UAAUv/M,WAC7EoG,EAAUm5M,UAAUv/M,UAAW,K,oCAMjC,IADA,uGACK9iF,KAAK4jF,4BAA6B,IAAAlvE,oBAAmB1U,MAAO,CAW/D,IAAMgoF,EAAShoF,KAAKU,YAAYA,YAC1B0pW,EAAqBpqW,KAAK8S,SAAL,UACtBk1E,EAAOoB,2BACVpB,EAAO++D,oBAAsBqjN,GAAsBA,EAAmBjwW,SAAS,cAEjF,IAAM+uF,EAAYlB,EAAO9sE,OAAOsD,MAAM,EAAAgpP,kBAAkBx/P,IAIxD,GAHIkhF,GAAaA,EAAUm5M,YAAcn5M,EAAUm5M,UAAUv/M,WAC3DoG,EAAUm5M,UAAUv/M,UAAW,IAE7B9iF,KAAK2gF,gCAAgC3gF,KAAKU,YAAY+/E,wBAAyB,CACjF,IAAM8mE,EAAmBvnJ,KAAK8S,SAAL,WACnBu3V,EAAmBrqW,KAAKU,YAAYA,YAAY2oF,WACtD,GAAIk+D,EAAkB,CACpB,IAAM+iN,EAAqBD,EAAiB1oR,SAAS36E,QAAO,SAAAigJ,GAC1D,IAAMsjN,EAAoBtjN,EAAkBn0I,SAAlB,WAC1B,OAAOy0I,EAAiBtnJ,MAAK,SAAA25K,GAC3B,OAAO2wL,EAAkBtqW,MAAK,SAAAuqW,GAAA,OAAc5wL,IAAc4wL,WAG9D,GAAIF,EAAmB71W,QAAU61W,EAAmBzsW,OAAM,SAAA4sW,GAAA,OAAUA,EAAO5uV,WAAawuV,EAAiBlkV,cAActK,YAAW,CAChI,IAAI6uV,EAAkBJ,EAAmBx+V,MAAK,SAAA2+V,GAC5C,OAAOA,EAAOpjN,mBAAqBgjN,EAAiBlkV,cAAckhI,qBAC9DijN,EAAmB,GACzBD,EAAiB1jN,0BAA2B,EAC5C0jN,EAAiBlkV,cAAgBukV,IAIvC1qW,KAAK4mF,oB,gCAIC1rE,GACR,IAAMw1H,EAAe1wI,KAAKU,YACpBiqW,EAAcj6N,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC7D,IAAI0oI,EAAatnD,0BAA4BuhR,EAAY76N,YAAc,EAAA72G,mBAAmBG,YAI1F,0GAAuBle,IAHrB,uG,6CAOF,IAAMw1H,EAAe1wI,KAAKU,YACpBiqW,EAAcj6N,EAAax1H,OAAOsD,MAAM,EAAAixH,eAAeznI,IACvDohF,EAAyBsnD,EAAatnD,yBACxC5I,GAAaA,EAAbA,6GAWJ,OAVAA,EAAWzrF,KAAK,CACdmsF,SAAU,EAAApkF,yBAA2B,OAAS,SAC9CwkF,UAAW8H,EACPuhR,EAAY76N,YAAc,EAAA72G,mBAAmBG,YAAc,YAAc,MACzE,QAENonD,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,gCAGCyG,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS8S,OAAOmpK,gB,iCAtHnCA,G,qJCPrB,QACA,S,uDAEqBV,E,YACnB,WAAY1jL,IAAS,gGACbA,IADa,SA+DrBgC,2BAA6B,WAAoD,IAAnDplD,EAAmD,uDAAxC,GAAIte,EAAoC,uDAAvB,EAAK+I,cAC7D,GAAI/I,EAAY,CACd,IAAI4jE,EAAoB,EAAKP,uBAO7B,OANIrjE,EAAWtK,SAAX,SACFkuE,EAAkBjsF,KAAK,CACrBmsF,SAAU,UACVI,UAAWlkE,EAAWtK,SAAX,UAGR,EAAK6uE,SAAS71E,MAAK,SAACzI,GACzB,OAAOA,EAAQs9E,gCAAgCK,IAAsB39E,EAAQyP,SAAR,gBAAsC4oB,KAG/G,OAAO,MA1EP,EAAKp1B,OAAS,mBACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,8CACnB,EAAKE,OAAS,cACd,EAAK2U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAK07V,cAAgB,EACjBzqR,IACF,EAAKiG,kBAAmB,GAVP,E,qEAchBphF,GAEH,OADAA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,IACnG,+FAAmBnP,EAAW,IAAI6+P,K,oDAIlC,IACMx6K,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,kCAI3Bz0E,IACV,qGAAkBA,GAClB3U,KAAKu5O,gC,yCAGY1jM,EAASouC,GAC1B,OAAOjkF,KAAKmpW,4BAA4BtzT,EAASouC,K,gCAGzC/oE,GAER,IAAMw1H,EAAe1wI,KAAKU,YAE1B,IAAIgwI,EAAatnD,2BAA4BsnD,EAAaqW,oBAK1D,OAAI/mJ,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcy9D,0BACzC5jF,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAI7DzgF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,gCAaM+rE,GACR,IAAMG,EAASH,EAAS8S,OAAOyoK,eAC3Bv7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,K,6CAqBpC,IAAI5G,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,M,iCAvFUgiL,G,4MCDAW,E,YACnB,WAAYrkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,gDACnB,EAAKE,OAAS,qBACd,EAAK2U,SAAU,EACf,EAAK1iB,gBAAiB,EACtB,EAAK07V,cAAgB,EACjBzqR,IACF,EAAKwJ,2BAA6B,CAChC3xD,QAAS,KAXM,E,qEAgBhBhzB,GACH,IAAMm0C,EAAS93C,KAAKojF,MAAMz/E,EAAW,IAAIw/P,GACrCrrN,GACFqrN,EAAiBgpG,sBAAsBr0T,K,sCAgBzC,IAAMmiD,EAAaj6F,KAAKU,YAAYu5F,WAChCA,IACFA,EAAWnX,SAAW9iF,KAAK8iF,Y,qCAK7B,wG,gCAgBQ5nE,GAER,IAAMw1H,EAAe1wI,KAAKU,YAE1B,GAAKgwI,EAAaz2C,YAAey2C,EAAaz2C,WAAW9zE,iBACtDuqH,EAAaz2C,WAAW9zE,cAAcrT,WAAY49H,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,cACsB,SAAtE49H,EAAaz2C,WAAW9zE,cAAcrT,SAAtC,aAA+D,IAKpE,OAAI9S,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI1DhnF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,mCAkGS,WACL8sE,EAAShoF,KAAKU,YACdunF,EAAuBjoF,KAAKmmB,cAC5BsiE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,4BACrF,EAAD,8GAA8BgI,IAChCzoF,KAAKosW,oCAAoCpkR,EAAQS,EAAkB,aAErEzoF,KAAKqsW,0BAA0BrkR,EAAQC,K,gCAG/BhB,GACR,IAAMG,EAASH,EAAS8S,OAAOopK,iBAC3Bl8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,M,6CA5JdtvC,GAC3B,IAAMw0T,EAAax0T,EAAOhlC,SAAP,cACbk0K,EAAalvI,EAAOhlC,SAAP,WACdw5V,IACHx0T,EAAOhlC,SAAP,cAAmC,CAAC,SAEjCk0K,IACHlvI,EAAOhlC,SAAP,WAAgC,CAAC,a,GAjCvC,M,4BAEqBqwP,G,qJCFrB,QACA,Q,uDAEqBM,E,YACnB,WAAY3kL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKghJ,gBAAiB,EACtB,EAAK/2H,SAAU,EACf,EAAK1U,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKqyB,cAAgB,GATF,E,qEAYhB5lW,GACH,sGAAmBA,EAAW,IAAI8/P,K,gCAG1Bx8K,GACR,IAAMG,EAASH,EAAS8S,OAAO0pK,YAC3Bx8K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,K,gCAIjClsE,GAGR,GAAwC,SADnBlb,KAAKU,YAAY0mJ,uBACrBC,mBAAjB,CAKA,IAAM7mE,EAAaxgF,KAAKygF,uBAElB2lB,EAAYlrF,EAAOqmE,+BAIzB,OAH0BvhF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcxiB,WAAa3D,KAAKmmB,cAAcyO,YAAc50B,KAAKmmB,cAAcxiB,UAAUixB,WAAW30B,MAAK,SAAA6lG,GAC5J,OAAOA,EAAQ5qF,SAAW,EAAA6c,mBAAmBC,KAAO8tE,EAAQ5qF,SAAWkrF,OAE/CpmG,KAAKmmB,cAAcw6D,gCAAgCH,IACrExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI5DhnF,KAAKomF,cAHH,mGAAuBlrE,IAZvB,uG,mCAyCS,WACLutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,EAAkB,GAAI,IAAI,GAAO,CACjE,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aACpBlN,EAAQM,UAAU4M,YAAYs2F,WAAW,kEAE1Che,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYs2F,WAAW,qBAEnF7mG,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,U,iCAnFjC46K,G,qJCHrB,QACA,Q,uDAEqBE,E,YACnB,WAAY7kL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKghJ,gBAAiB,EACtB,EAAK/2H,SAAU,EACf,EAAK1U,SAAW,kBAChB,EAAKH,YAAc,6CACnB,EAAK7N,gBAAiB,EACtB,EAAKqpU,uBAAwB,EAC7B,EAAKqyB,cAAgB,GATF,E,qEAYhB5lW,GACH,sGAAmBA,EAAW,IAAIggQ,K,gCAG1B18K,GACR,IAAMG,EAASH,EAAS8S,OAAO4pK,cAC3B18K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,K,gCAIjClsE,GAGR,GAAwC,SADnBlb,KAAKU,YAAY0mJ,uBACrBC,mBAAjB,CAKA,IAAMjhD,EAAYlrF,EAAOqmE,+BAKzB,OAJ0BvhF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcxiB,UAAUixB,WAAW30B,MAAK,SAAA6lG,GAC3F,OAAOA,EAAQ5qF,SAAW,EAAA6c,mBAAmBC,KAAO8tE,EAAQ5qF,SAAWkrF,OAG/CpmG,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC1EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAI5DhnF,KAAKomF,cAHH,mGAAuBlrE,IAXvB,uG,mCAqCS,WACLutE,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,yBAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,U,iCA9EjC86K,G,qJCHrB,QACA,QACA,SACA,SACA,Q,IACA,MACA,S,uDAEqB4oG,E,YACnB,WAAYztR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKoV,YAAc,0CACnB,EAAKG,SAAW,QAChB,EAAK2zS,cAAgB,kBACrB,EAAK5zS,OAAS,cACd,EAAK/N,gBAAiB,EACtB,EAAKqnP,gBAAiB,EACtB,EAAKq0G,cAAgB,EATF,E,qEAYhB5lW,GACH,sGAAmBA,EAAW,IAAI4oW,K,oDAIlC,IACMvkR,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,kCAI3Bz0E,GAEV,IADA,qGAAkBA,IACd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAGA,IACMgoF,EADShoF,KAAKU,YACEA,YACtB,GAAMsnF,EAAO++D,sBAAuB/+D,EAAOoB,0BAA8BjxF,OAAO2B,SAASwb,KAAKnb,SAAS,cAAvG,CAKA6F,KAAKu5O,8BAELv5O,KAAKU,YAAYw0P,gBAAiB,EAClC,IAAMvtI,EAAY3/B,EAAO2/B,UACzB,GAAIA,IAAcA,EAAUutI,eAAgB,CAC1C,IAAMs3G,EAA6B7kP,EAAUjoG,qBACvC+sV,EAAmBzsW,KAAKyf,yBACxBitV,EAAgBF,EAA2B1gW,MAAK,SAAAolJ,GAAA,OAAMA,EAAG11I,KAAKiE,2BAA6BgtV,KAC7FC,KACF,2FAAkB73W,KAAK63W,EAAclxV,MACrCmsG,EAAUutI,gBAAiB,SAd7B,UAAMjxO,UAAS,IAAAiqI,0BAAwB,O,gCAmBjChzI,GAER,IAAIlb,KAAKU,YAAY0oF,yBAArB,CAKA,GAAIppF,KAAKU,YAAYylJ,iBAAmB,EAAApsH,eAAeE,KAAM,CAC3D,IAAM0yU,EAAmB3sW,KAAKU,YAAYu5F,WAC1C,GAAI0yQ,GAAoBA,EAAiBxmV,cAAe,CACtD,IAAMymV,EAA4BD,EAAiBxmV,cAAcrT,SAA/B,UAClC,IAAK85V,GAA8BA,IAA8BA,EAA0BzyW,SAAS,aAElG,YADA,sGAMN,IAAMqmF,EAAaxgF,KAAKygF,uBACxB,OAAIzgF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACtExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG5DhnF,KAAKomF,cAFH,mGAAuBlrE,IAlBvB,uG,6CAyBF,IAAIslE,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,mCAGI,WACLiI,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1F,KAAK,EAAD,8GAA8BgI,GAAmB,CACnD,IAAMG,EAAmBH,EAAiB38E,MAAK,SAACzI,GAC9C,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,oCAE3E0uF,EAAqBJ,EAAiB38E,MAAK,SAACzI,GAChD,OAAOA,EAAQM,UAAU4M,aAAelN,EAAQM,UAAU4M,YAAYpW,SAAS,iBAEjF6F,KAAKmmB,cAAgByiE,GAAoBH,EAAiB,GAC1DzoF,KAAKgnF,mBAAqB6B,GAAsB,Q,gCAI1C5B,GACR,GAAIjnF,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,OAAQ,CAC3D,IAAMstD,EAASH,EAAS8S,OAAOwoJ,MAC3Bt7J,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAhH1BmlR,G,qJCRrB,QACA,QACA,SACA,SACA,Q,IACA,MACA,S,uDAEqBvpG,E,YACnB,WAAYlkL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,uCACnB,EAAK8zS,cAAgB,YACrB,EAAK5zS,OAAS,YACd,EAAK/N,gBAAiB,EACtB,EAAKqnP,gBAAiB,EACtB,EAAKq0G,cAAgB,EATF,E,8FAanB,IACMvhR,EADShoF,KAAKU,YACEA,aACtBsnF,EAAO++D,qBAAsB,EACzB/+D,EAAO9sE,QAAU8sE,EAAOoB,4BACRpB,EAAO9sE,OAAOsD,MAAM,EAAAixH,eAAeznI,IAC3CohF,wBAAyB,K,kCAI3Bz0E,GAEV,IADA,qGAAkBA,IACd3U,KAAK4jF,4BAA4B,IAAAlvE,oBAAmB1U,MAAxD,CAGA,IACMgoF,EADShoF,KAAKU,YACEA,YACtB,GAAMsnF,EAAO++D,sBAAuB/+D,EAAOoB,0BAA8BjxF,OAAO2B,SAASwb,KAAKnb,SAAS,cAAvG,CAKA6F,KAAKu5O,8BAELv5O,KAAKU,YAAYw0P,gBAAiB,EAClC,IAAM3uG,EAAcv+D,EAAOu+D,YAC3B,GAAIA,IAAgBA,EAAY2uG,eAAgB,CAC9C,IAAM23G,EAA+BtmN,EAAY7mI,qBAC3CotV,EAAuB9sW,KAAKyf,yBAC5BstV,EAAkBF,EAA6B/gW,MAAK,SAAAkhW,GACxD,OAAOA,EAAaxxV,KAAKiE,2BAA6BqtV,KAEpDC,KACF,2FAAkBl4W,KAAKk4W,EAAgBvxV,MACvC+qI,EAAY2uG,gBAAiB,SAhB/B,UAAMjxO,UAAS,IAAAiqI,0BAAwB,O,2BAqBtCvqJ,GACH,sGAAmBA,EAAW,IAAIq/P,K,gCAG1B9nP,GAER,IAAIlb,KAAKU,YAAY0oF,0BAA6BppF,KAAKU,YAAYqmJ,oBAAnE,CAKA,GAAI/mJ,KAAKU,YAAYylJ,iBAAmB,EAAApsH,eAAeE,KAAM,CAC3D,IAAM0yU,EAAmB3sW,KAAKU,YAAYu5F,WAC1C,GAAI0yQ,GAAoBA,EAAiBxmV,cAAe,CACtD,IAAMymV,EAA4BD,EAAiBxmV,cAAcrT,SAA/B,UAClC,IAAK85V,GAA8BA,IAA8BA,EAA0BzyW,SAAS,aAElG,YADA,sGAKN,IAAMqmF,EAAaxgF,KAAKygF,uBACxB,OAAIzgF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACtExgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG5DhnF,KAAKomF,cAFH,mGAAuBlrE,IAjBvB,uG,6CA4CF,IAAIslE,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAK1B,OAJA8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,gCAGCyG,GACR,GAAIjnF,KAAKU,YAAY8+N,kBAAoB,EAAAzlI,OAAOmsD,KAAKpsH,OAAQ,CAC3D,IAAMstD,EAASH,EAAS8S,OAAOipK,UAC3B/7K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAvH1B47K,G,4MCNApB,E,YACnB,WAAY9iL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,0CACnB,EAAK8zS,cAAgB,eACrB,EAAKj/R,SAAU,EACf,EAAKg5U,cAAgB,GAPF,E,qEAUhB5lW,GACH,sGAAmBA,EAAW,IAAIi+P,K,gCAG1B1mP,GACR,IAAMw1H,EAAe1wI,KAAKU,YAC1B,GAAKgwI,EAAaqW,sBAAuBrW,EAAatnD,yBAItD,OAAIppF,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,IALvB,uG,6CAYF,IAAMw1H,EAAe1wI,KAAKU,YACtB8/E,GAAaA,EAAbA,6GAKJ,OAJAA,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAEnBxmG,I,mCAGI,WACLiI,EAAmBzoF,KAAK2hF,SAAS36E,QAAO,SAAAtO,GAAA,OAAKA,EAAEioF,gCAAgC,EAAKF,2BAC1FzgF,KAAKmmB,cAAgBsiE,EAAiB,GACtCzoF,KAAKgnF,mBAAqByB,EAAiB,K,gCAGnCxB,GACR,IAAMG,EAASH,EAAS8S,OAAO6nK,YAC3B36K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,GArD7C,M,4BAEqBw6K,G,qJCFrB,QACA,SACA,Q,uDAEqBW,E,YACnB,WAAYzjL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAK6tV,cAAgB,EACrB,EAAKvmR,eAAgB,EACjBlE,IACF,EAAKwJ,2BAA6B,CAChC3xD,QAAS,GACTG,QAAS,KAVM,E,qEAehBnzB,GACH,sGAAmBA,EAAW,IAAI4+P,K,gCAG1BrnP,GAER,IAAM4zI,EAAiB9uJ,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAixH,eAAeznI,IAEpE,KAAIhI,KAAKU,YAAY0oF,0BAA4B0lE,GAAkBA,EAAelf,WAC7Ekf,EAAehf,YAAcgf,EAAelf,UAAU0pG,aAI3D,OAAIt5O,KAAKmmB,gBAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAC7EzgF,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,qBAG1DhnF,KAAKomF,cAFH,mGAAuBlrE,IALvB,uG,6CA2BF,IAAIslE,GAAaA,EAAbA,6GACEkwD,EAAe1wI,KAAKU,YAO1B,OANK,EAAD,0BACF8/E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAWovD,EAAas2C,eAGrBxmG,I,gCAGCyG,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS8S,OAAOwoK,gB,iCAlEnCA,G,gKCJrB,SACA,SACA,Q,uDAGqBI,E,YACnB,WAAY7jL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAQtB,EARsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,4CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAO,cAAc,GAAK,OADtB,eAEG,EAAAA,cAAc,GAAK,OAFtB,eAGG,EAAAA,cAAc,GAAK,MAHtB,IATiC,S,qEAiBhCr4B,GACHA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,EAAAqlB,SAASG,SACxG1wB,MAAMC,QAAQlE,EAAUmP,SAAV,cACZnP,EAAUmP,SAAV,WAAiC3Y,SAAS,OACzCwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,SAC1CwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,OAC1CwJ,EAAUmP,SAAV,WAAiC3Y,SAAS,WAE/CwJ,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,UACvC30B,EAAUmP,SAAV,cAAsC,EAAAqlB,SAASG,UAEjD,IAAM2qD,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAkpB,cAAc,GAAK,EAAI,EAClF,sGAAmBr4B,EAAW,IAAIg/P,GAAS,EAAO1/K,IAChD,EAAqB,IAAfA,EAAmB,WAAa,mB,uCAInCjjF,KAAK8iF,UAAY9iF,KAAKmmB,eACzBnmB,KAAKmmB,cAAcsgF,gB,wCAIL9kB,GAChB,OAAOA,EAAS36E,QAAO,SAAA3D,GAAA,OAAkC,IAAvBA,EAAQ4/E,gB,qCAI1C,sGACA,IAAM1pF,EAASyG,KAAKU,YAGdsmL,EAFoBztL,EAAOmH,YACMwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC3Bg/K,aACZ,OAAfA,GAAsC,OAAfA,IAAwBztL,EAAO4sB,gBACzD5sB,EAAOkiC,eAAeliC,EAAO4sB,cAAcrT,SAArB,eAAkDvZ,EAAO4sB,iB,gCAIzEjL,GAER,IAAMw1H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IACpDirN,EAAoB/3M,EAAOsD,MAAM,EAAAixH,eAAeznI,IAEtD,KAAI0oI,GAAgBuiF,GAAqBviF,EAAatnD,0BAA4D,gBAAhC6pI,EAAkBnjF,WAApG,CAKA,IAAMtvD,EAAaxgF,KAAKygF,uBACxB,OAAKzgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcw6D,gCAAgCH,IACxExgF,KAAKmmB,eAAiBnmB,KAAKmmB,cAAcy9D,0BAA4B5jF,KAAKgnF,oBAIhFhnF,KAAKomF,cAHH,mGAAuBlrE,IAPvB,uG,gCAcM+rE,GAAU,WACdA,GACFvyF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GACzC,EAAKh+E,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAMO,OAASH,EAASg+K,YAAYtC,SAAoB,GAATlpJ,U,KAjFlF,Q,mBAEqBkpJ,G,gKCLrB,Q,uDAGqBD,E,YACnB,WAAY5jL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAQtB,EARsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,gDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAH,eAAe,GAAK,OADvB,eAEG,EAAAA,eAAe,GAAK,MAFvB,IATiC,S,qEAgBhC33B,GACHA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GACnG,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAI++P,GAAa,EAAOz/K,IACpD,EAAqB,IAAfA,EAAmB,WAAa,mB,wCAGxBtB,GAChB,OAAOA,EAAS36E,QAAO,SAAA3D,GAAA,OAAkC,IAAvBA,EAAQ4/E,gB,oCAIhBjjF,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,gCAGQ4U,GAGR,GAD0Blb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,OAK3C,OAAItG,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAKnFzgF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,gCAaM+rE,GAAU,WACdA,GACFvyF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GACzC,EAAKh+E,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAMO,OAASH,EAASg+K,YAAYvC,aAAwB,GAATjpJ,U,KAzDtF,Q,mBAEqBipJ,G,gKCHrB,Q,uDAGqBL,E,YACnB,WAAYvjL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAQtB,EARsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,sBACd,EAAKuV,SAAW,sBAChB,EAAKH,YAAc,sDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAH,eAAe,GAAK,OADvB,eAEG,EAAAA,eAAe,GAAK,MAFvB,IATiC,S,qEAgBhC33B,GACHA,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GACnG,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAI0+P,GAAkB,EAAOp/K,IACzD,EAAqB,IAAfA,EAAmB,WAAa,mB,oCAIdjjF,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,gCAGQ4U,GAGR,GAD0Blb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,OAK3C,OAAItG,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAKnFzgF,KAAKomF,cAHH,mGAAuBlrE,IANvB,uG,gCAaM+rE,GAAU,WACdA,GACFvyF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GACzC,EAAKh+E,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAMO,OAASH,EAASg+K,YAAY5C,kBAA6B,GAAT5oJ,U,KArD3F,Q,mBAEqB4oJ,G,gKCHrB,Q,uDAIqBQ,E,YACnB,WAAY/jL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAQtB,EARsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,WACd,EAAKuV,SAAW,WAChB,EAAKH,YAAc,2CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAO,cAAc,GAAK,OADtB,eAEG,EAAAA,cAAc,GAAK,OAFtB,eAGG,EAAAA,cAAc,GAAK,MAHtB,IATiC,S,qEAiBhCr4B,GACEA,EAAUmP,SAAV,SACHnP,EAAUmP,SAAV,OAA+B,CAAC,WAElCnP,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,EAAAqlB,SAASG,SAC5G,IAAM2qD,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAkpB,cAAc,GAAK,EAAI,EAClF,sGAAmBr4B,EAAW,IAAIk/P,GAAQ,EAAO5/K,IAC/C,EAAqB,IAAfA,EAAmB,WAAa,mB,uCAInCjjF,KAAK8iF,UAAY9iF,KAAKmmB,eACzBnmB,KAAKmmB,cAAcsgF,gB,wCAIL9kB,GAChB,OAAOA,EAAS36E,QAAO,SAAA3D,GAAA,OAAkC,IAAvBA,EAAQ4/E,gB,kCAGhCtuE,IACV,qGAAkBA,K,4CAWE+mB,GACpB,IAAMr4B,EAAUrD,KAAKy7B,eAAeC,GACpC,GAAKr4B,EAAL,CAGA,IAAMwnW,EAAexnW,EAAQM,UAAUmF,kBAAkB/K,MAAM,KACzDuF,EAAOunW,EAAaA,EAAap2W,OAAS,GAAKo2W,EAAaA,EAAap2W,OAAS,GAAGkK,QAAQ,KAAM,IAAM,GACzGgvL,EAAcjyJ,IAAa,EAAAJ,eAAe,GAAK,EAAAA,eAAe,GAAK,EAAAA,eAAe,GACxF,GAAKh4B,GAAStD,KAAKy7B,eAAekyJ,GAAlC,CAGA,GAAI3tL,KAAKy7B,eAAekyJ,GAAc,CACpC,IAAMm9K,EAAgB9qW,KAAKy7B,eAAekyJ,GAAahqL,UAAUmF,kBAAkB/K,MAAM,KACnFgtW,EAAQD,EAAcA,EAAcr2W,OAAS,GAAKq2W,EAAcA,EAAcr2W,OAAS,GAAGkK,QAAQ,KAAM,IAAM,GACpH,IAAK2E,GAAoB,KAAVynW,GAA0B,KAATznW,EAC9B,OAGJtD,KAAKy7B,eAAekyJ,GAAe,S,gCAG3B1mG,GAAU,WACdA,GACFvyF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GACzC,EAAKh+E,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAMO,OAASH,EAASg+K,YAAYpC,QAAmB,GAATppJ,U,KA9EjF,Q,mBAGqBopJ,G,qJCJrB,Q,uDAGqBmoG,E,YACnB,WAAYlsR,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,+CACnB,EAAKE,OAAS,qBACd,EAAK2U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,IACF,EAAKrjD,eAAiB,GACtB,EAAAJ,yBAAyBj9B,SAAQ,SAAAkpD,GAC/B,EAAK7rB,eAAe6rB,GAAO,SAZI,E,qEAiBhC3jD,GACHA,EAAUmP,SAAV,cAAuCnP,EAAUmP,SAAV,MAA8BnP,EAAUmP,SAAV,KACjEnP,EAAUmP,SAAV,KAA2B,GAAKnP,EAAUmP,SAAV,KAA2B,GAC3D,GACJ,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAuoB,yBAAyB,GAAK,EAAI,EAC7F,sGAAmB13B,EAAW,IAAIqnW,GAAY,EAAO/nR,IACnD,EAAqB,IAAfA,EAAmB,WAAa,mB,oCAIdjjF,KAAKU,YAAYA,YACzBwnQ,YAAcloQ,KAAKsG,QACrC,wG,gCAGQ4U,GAEkBlb,KAAKU,YACTwnQ,cAAgBloQ,KAAKsG,QAKvCtG,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBAIjFzgF,KAAKomF,cAFL,mGAAgBlrE,KANhB,uG,gCAyBM+rE,GAAU,WACdA,GACFvyF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GACzC,EAAKh+E,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAMO,OAASH,EAASg+K,YAAYU,aAAwB,GAATlsJ,Q,gDAOlF,OAAO,M,KA3EX,Q,mBAEqBuxP,G,4MCAA/kG,E,YACnB,WAAYnnL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,6CACnB,EAAKE,OAAsC,SAA7BxiB,SAASC,SAASmC,OAAoB,eAAiB,cACrE,EAAK+0B,SAAU,EACf,EAAKyyD,eAAgB,EAPF,E,8EAWnB,IACMqqG,EADSrtL,KAAKU,YACaA,YAC7B2sL,GAAqBA,EAAkB06E,aAAe16E,EAAkB06E,WAAWjlL,WACrFuqG,EAAkB06E,WAAWjlL,UAAW,IAE1C,wG,2BAGGn/E,GACH,OAAiC,SAA7BvK,SAASC,SAASmC,QAA6C,gBAAxBmI,EAAU6M,aAGrD,+FAAmB7M,EAAW,IAAIsiQ,K,yCAiBjBjP,GACjB,GAA0B,eAAtBA,EAAoC,CACtC,IAAMi0G,EAAkBjrW,KAAKU,YACHuqW,EAAgBvqW,YACxBwa,OAAOsD,MAAM0nR,OAAOp+B,WAAWhlL,UAAW,EAC5DmoR,EAAgBnoR,UAAW,EAC3B9iF,KAAKymG,iB,sCAKP,IACMykQ,EADoBlrW,KAAKU,YACQwa,OAAOsD,MAAM0nR,OAChDglE,GAAgBA,EAAapjG,aAAeojG,EAAapjG,WAAWhlL,WACtEooR,EAAapjG,WAAWhlL,UAAW,K,gCAI7BmE,GACR,IAAMG,EAASH,EAASg+K,YAAYgB,UAChCh/K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KApE7C,Q,mBAGqB6+K,G,oKCHrB,QACA,QACA,SACA,S,uDAEqBG,E,YACnB,WAAYtnL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,yBAStB,EATsB,uEAC7BnE,KACN,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,eACd,EAAKuV,SAAW,QAChB,EAAKD,OAAS,eACd,EAAKF,YAAc,+CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EACjBlE,KACF,EAAKrjD,gBAAL,qBACG,EAAAH,eAAe,GAAK,OADvB,eAEG,EAAAA,eAAe,GAAK,MAFvB,IAViC,S,qEAiBhC33B,GACH,GAA4B,iBAAxBA,EAAU6M,UACZ,OAAO,EAET7M,EAAUmP,SAAV,cAAsCnP,EAAUmP,SAAV,KAA6BnP,EAAUmP,SAAV,KAA2B,GAAK,GACnG,IAAMmwE,EAAat/E,EAAUmP,SAAV,gBAAwC,EAAAwoB,eAAe,GAAK,EAAI,EACnF,sGAAmB33B,EAAW,IAAIyiQ,GAAM,EAAOnjL,IAC7C,EAAqB,IAAfA,EAAmB,WAAa,mB,sCAG1B,WACdvuF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAAs9B,GACnC,EAAKD,eAAeC,IAAa,EAAKD,eAAeC,GAAU5oB,SAA9B,eACnC,EAAK8rX,kCAAkC,EAAKnjW,eAAeC,GAAU5oB,SAA9B,oB,qCAM3C,sGACA,IAAMvZ,EAASyG,KAAKU,YACduyN,EAAoB15N,EAAOmH,YAAYwa,OAAOsD,MAAM,EAAAixH,eAAeznI,IACrEirN,EAAkB7pI,yBACpB6pI,EAAkB7pI,wBAAyB,GAE7C7vF,EAAOqlY,kCAAkC5+X,KAAK8S,SAAL,iB,gCAGjCoI,GACR,IAAMw1H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAC1D,IAAI0oI,IAAgBA,EAAatnD,yBAKjC,0GAAuBluE,IAJrB,uG,gCAOM+rE,GAAU,WACdA,GACFvyF,OAAOmc,KAAK7Q,KAAKy7B,gBAAgBr9B,SAAQ,SAAC5G,EAAKiiH,GACzC,EAAKh+E,eAAejkC,KACtB,EAAKikC,eAAejkC,GAAKqvF,MAAMO,OAASH,EAASg+K,YAAYmB,MAAiB,GAAT3sJ,U,wBA5D1D2sJ,G,yJCLrB,QACA,S,uDAGqBC,E,YACnB,WAAYvnL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,6CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAI0iQ,K,oCAGF,IAAtB1xP,EAAsB,wDAC1Bpb,EAASyG,KAAKU,YACdgwI,EAAen3I,EAAOmH,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IACxD0oI,GAAgBA,EAAaz2C,aAAey2C,EAAaz2C,WAAWnX,WACtE4tD,EAAaz2C,WAAWnX,UAAW,IAErC,qGAAkBnuE,K,sCA4BlB,IAAM+7H,EAAe1wI,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,KACrDhI,KAAK8iF,UAAY4tD,GAAgBA,EAAaz2C,aAAey2C,EAAaz2C,WAAWnX,WACxF4tD,EAAaz2C,WAAWnX,UAAW,K,gCAI7BmE,GACR,IAAMG,EAASH,EAASg+K,YAAYoB,UAChCp/K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,O,wBAzDnBi/K,G,qJCJrB,QACA,S,uDAEqBnB,E,YAEnB,WAAYpmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAIuhQ,K,6CAIlC,IAAI1kL,GAAaA,EAAbA,6GAEEkwD,EADS1wI,KAAKU,YAAYwa,OACJsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAOhC,OANIt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,I,gCAGCyG,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASg+K,YAAYC,gB,iCA9BxCA,G,qJCHrB,QACA,SAEA,SACA,Q,uDAEqBC,E,YACnB,WAAYrmL,IAAS,gGACbA,IADa,SA0CrBkvR,uBAAyB,WACvB,IAEM3gL,EAFa,EAAK3sL,YACQA,YACOwa,OAAOsD,MAAM,EAAAgpP,kBAAkBx/P,IAClEqlL,IACEA,EAAkBu6E,YACpBv6E,EAAkBu6E,UAAU9kL,UAAW,GAErCuqG,EAAkB4gL,aACpB,EAAA5yU,yBAAyBj9B,SAAQ,SAAAkpD,GAC3B+lI,EAAkB4gL,YAAYxyU,eAAe6rB,KAASA,EAAIntD,SAAS,OACrEkzL,EAAkB4gL,YAAYxyU,eAAe6rB,GAAO,WAnD5D,EAAKhhD,OAAS,cACd,EAAKsV,OAAS,aACd,EAAKC,SAAW,cAChB,EAAKH,YAAc,kCACnB,EAAKsnE,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAIwhQ,K,2CA4BlCnlQ,KAAKU,YAAYoiF,UAAW,EAC5B9iF,KAAKymG,gB,6CA4BL,IAAIjmB,GAAaA,EAAbA,6GAGEkwD,EAFe1wI,KAAKU,YACEwa,OACAsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAahC,OAZIt2C,GAAgBs2C,GAClBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IASRxmG,I,gCAGCyG,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASg+K,YAAYE,gB,iCA1FxCA,G,4MCJAe,E,YACnB,WAAYpnL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,8CACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAIuiQ,K,oCAIlC,IACM74E,EADSrtL,KAAKU,YACaA,YAC7B2sL,GAAqBA,EAAkBu6E,YAAcv6E,EAAkBu6E,UAAU9kL,WACnFuqG,EAAkBu6E,UAAU9kL,UAAW,IAEzC,wG,gCAGQmE,GACR,IAAMG,EAASH,EAASg+K,YAAYiB,WAChCj/K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KA/B7C,Q,mBAEqB8+K,G,kMCAAI,E,YACnB,WAAYxnL,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,4CACnB,EAAKsnE,eAAgB,EANc,E,0EAY3BiE,GACR,IAAMG,EAASH,EAASg+K,YAAYqB,SAChCr/K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,O,GAlBxC,M,4BAEqBk/K,G,4MCAAH,E,YACnB,WAAYrnL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,gDACnB,EAAK6U,SAAU,EACf,EAAKyyD,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAIwiQ,K,gCAG1Bl/K,GACR,IAAMG,EAASH,EAASg+K,YAAYkB,aAChCl/K,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCH,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,O,KAtB7C,Q,mBAEqB++K,G,wJCFrB,SACA,QACA,Q,IACA,OACA,QACA,SACA,Q,qDAEa1B,Q,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAAjhQ,aAAaC,UADpB,OAEZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAK8zS,cAAgB,UACrB,EAAK9rT,cAAL,kBACA,EAAKokH,OAAS,KACd,EAAKy6K,YAAc,KACnB,EAAKxjR,aAAe,GATR,E,qEAaTpb,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,SACHy/H,EAAkB,SAClBC,EAAmBu/K,EACnB,MAEF,IAAK,eACHx/K,EAAkB,cAClBC,EAAmB02H,EAIvB,QAAI32H,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,2CAMT,OAAO,I,iCAIP,OAAO3D,KAAK+e,aAAajX,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,wDAIvE,OAAOlP,KAAKyc,WAAW,K,iCAGdvB,GACTlb,KAAK+e,aAAa3gB,SAAQ,SAAA8Q,GAAA,OAAKA,EAAEk3E,WAAWlrE,U,aA5DvClT,GAAK,S,OAgERynT,E,YAEJ,WAAY3wO,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAK8zS,cAAgB,UACrB,EAAKxsO,eAAgB,EANF,E,uFAUnB,IAAIxC,GAAaA,EAAbA,6GAEEkwD,EADS1wI,KAAKU,YAAYwa,OACJsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAOhC,OANIt2C,GAAgBs2C,IAAe,EAAD,0BAChCxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,I,gCAGCyG,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASw9K,QAEzCx9K,GAAYjnF,KAAKgnF,qBACnBhnF,KAAKgnF,mBAAmBH,MAAMO,OAASH,EAASw9K,Y,uBAMhDmC,E,YAEJ,WAAY9nL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,+CACnB,EAAKsnE,eAAgB,EALF,E,0EAQXiE,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAAS2/K,iB,iLCzHjD,SACA,QACA,SAEA,QACA,S,uDAEqBrkB,G,gBAGnB,cAAc,iGACN,GAAM,EAAO,EAAA/+O,aAAaC,UADpB,OAEZ,EAAK6C,OAAS,iBACd,EAAK/C,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAKhY,cAAL,iBANY,E,qEASTC,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,QACHy/H,EAAkB,YAClBC,EAAmBg+N,EAGvB,QAAIj+N,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,O,aAhCJqE,GAAK,Q,aADOu6O,E,IAwCf2rH,E,YACJ,WAAYpvR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,4BACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GACH,sGAAmBA,EAAW,IAAIuqW,K,6CAIlC,IAAI1tR,GAAaA,EAAbA,6GACEtlE,EAASlb,KAAKU,YAAYwa,OAC1Bw1H,EAAex1H,EAAOsD,MAAM,EAAAu7E,OAAO/xF,IACnCg/K,EAAat2C,EAAas2C,aAOhC,OANIt2C,GAAgBs2C,GAA8B,IAAhB9rK,EAAO9P,MACvCo1E,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0lG,IAGRxmG,I,gCAGCyG,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS0yH,WAAW4oC,MAC/BviP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,Q,6KC9E1C,QACA,QACA,S,uDAEqB46J,E,YACnB,WAAYljK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,sCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EACtB,EAAKoxX,aAAe,CAAC,EAAAvoW,WAAWI,SATG,E,qEAYhCnzB,GACH,IAAMu7X,EAAmBl/X,KAAKi/X,aAAan3X,KAAI,SAAAq3X,GAAA,MAAM,SAASA,KAI9D,IAHuBx7X,EAAUmP,SAAV,YAAoCosX,EAAiBj/X,MAAK,SAAAif,GAC/E,OAAOvb,EAAUmP,SAAV,WAAiC3Y,SAAS+kB,MAEhC,CACjB,IACM+jE,EADQt/E,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,WACtB,EAAI,EAC/B,sGAAmBnP,EAAW,IAAIq+O,GAAS,EAAO/+J,IAChD,EAAqB,IAAfA,EAAmB,WAAa,iBAE1C,sGAAmBt/E,EAAW,IAAIq+O,GAAS,EAAO,GAAG,EAAM,e,wCAG3CrgK,GAChB,OAAOA,EAAS36E,QAAO,SAAA3D,GAAA,OAAkC,IAAvBA,EAAQ4/E,gB,gCAGlC/nE,GACJlb,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBACjFzgF,KAAKkmF,gCACL,mGAAgBhrE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,M,8CAIkE,IAAhE2C,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,OAAO3nF,KAAK+nF,8CAA8ClqE,EAAa8pE,K,6CAIvE,IAAMnH,GAAaA,EAAbA,6GACAwH,EAAShoF,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAOpD,OANIggF,GAAUA,EAAOg/F,cACnBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0G,EAAOg/F,eAGfxmG,I,gCAGCyG,GACR,IAAM/rE,EAASlb,KAAKU,YAAYwa,OAC1BkkX,EAAgBp/X,KAAKi/X,aAAa9kY,SAAS+gB,EAAO9P,MACxD,GAAI67E,EAAU,CACZ,IAAMG,EAASg4S,EAAgBn4S,EAAS46J,MAAMG,SAAW/6J,EAAS0yH,WAAWqoC,SACvE+rI,EAAU9mS,EAAS0yH,WAAWqoC,SAChChiP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC3BA,GAAqBA,EAAkBF,QACzCE,EAAkBF,MAAMO,OAAS2mS,W,iCArExB/rI,G,qJCJrB,QACA,SACA,QACA,SACA,Q,uDAEqBD,E,YACnB,WAAYjjK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EACtB,EAAKoxX,aAAe,CAAC,EAAAvoW,WAAWC,SATG,E,qEAYhChzB,GACH,IAAMu7X,EAAmBl/X,KAAKi/X,aAAan3X,KAAI,SAAAq3X,GAAA,MAAM,SAASA,KAI9D,IAHuBx7X,EAAUmP,SAAV,YAAoCosX,EAAiBj/X,MAAK,SAAAif,GAC/E,OAAOvb,EAAUmP,SAAV,WAAiC3Y,SAAS+kB,MAEhC,CACjB,IACM+jE,EADQt/E,EAAUmP,SAAV,WAAmCnP,EAAUmP,SAAV,WACtB,EAAI,EAC/B,sGAAmBnP,EAAW,IAAIo+O,GAAU,EAAO9+J,IACjD,EAAqB,IAAfA,EAAmB,WAAa,iBAE1C,sGAAmBt/E,EAAW,IAAIo+O,GAAU,EAAO,GAAG,EAAM,e,wCAG5Cq7H,GAChB,OAAOA,EAAgBp2W,QAAO,SAAAq2W,GAAA,OAAgD,IAA9BA,EAAep6R,gB,gCAGvD/nE,GACJlb,KAAKmmB,eAAkBnmB,KAAKmmB,cAAcw6D,gCAAgC3gF,KAAKygF,yBACjFzgF,KAAKkmF,gCACL,mGAAgBhrE,KAEhBlb,KAAKomF,cACL,mGAAgBlrE,M,6CAKlB,IAAMslE,GAAaA,EAAbA,6GAEAtlE,EADclb,KAAKU,YACEwa,OACrBszF,EAAStzF,EAAOsD,MAAM,EAAAqsH,OAAO7iI,KAAOkT,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAAIwmG,OAC9DxuG,KAAKi/X,aAAa9kY,SAAS+gB,EAAO9P,OAASojG,GAAUA,EAAOroF,eAAiBqoF,EAAOroF,cAAcxiB,UAAUmP,SAA/B,YAC/E0tE,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW,EAAAxkF,yBACP0xG,EAAOroF,cAAcxiB,UAAUmP,SAA/B,WAAsD,GACO,OAA7D07F,EAAOroF,cAAcxiB,UAAUmP,SAA/B,WAAsD,GAAc,KAAO07F,EAAOroF,cAAcxiB,UAAUmP,SAA/B,WAAsD,KAGzI,IAAMk1E,EAAShoF,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAOpD,OANIggF,GAAUA,EAAOg/F,cACnBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0G,EAAOg/F,eAGfxmG,I,8CAG6E,IAAhE3iE,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,OAAO3nF,KAAK+nF,8CAA8ClqE,EAAa8pE,K,gCAG/DV,GACR,IAAM/rE,EAASlb,KAAKU,YAAYwa,OAC1BkkX,EAAgBp/X,KAAKi/X,aAAa9kY,SAAS+gB,EAAO9P,MACxD,GAAI67E,EAAU,CACZ,IAAMG,EAASg4S,EAAgBn4S,EAAS46J,MAAME,UAAY96J,EAAS0yH,WAAWooC,UACxEgsI,EAAU9mS,EAAS0yH,WAAWooC,UAChC/hP,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,GAErCpnF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QACrDuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC3BA,GAAqBA,EAAkBF,QACzCE,EAAkBF,MAAMO,OAAS2mS,W,iCAnFxBhsI,G,qJCNrB,QACA,S,uDAEqBgjB,E,YACnB,WAAYjmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,wCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIohQ,K,6CAIlC,IAAMvkL,GAAaA,EAAbA,6GACAwH,EAAShoF,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAOpD,OANIggF,GAAUA,EAAOg/F,cACnBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0G,EAAOg/F,eAGfxmG,I,gCAGCyG,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS0yH,WAAWorD,WAC/B/kQ,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,iCAlC1B29K,G,qJCHrB,S,uDAGqB4B,E,YACnB,WAAY7nL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,iBACd,EAAKuV,SAAW,iBAChB,EAAKH,YAAc,qCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GAIH,OAHIA,EAAUmP,UAAYnP,EAAUmP,SAAV,SACxBnP,EAAUmP,SAAV,OAA+B,OAEjC,+FAAmBnP,EAAW,IAAIgjQ,K,6CAIlC,IAAMnmL,GAAaA,EAAbA,6GACAwH,EAAShoF,KAAKU,YAAYwa,OAAOsD,MAAM,EAAAu7E,OAAO/xF,IAOpD,OANIggF,GAAUA,EAAOg/F,cACnBxmG,EAAWzrF,KAAK,CACdmsF,SAAU,aACVI,UAAW0G,EAAOg/F,eAGfxmG,I,gCAGCyG,GACR,GAAGA,EAAU,CACX,IAAMG,EAASH,EAAS46J,MAAM8kB,cAC1B3mQ,KAAKmmB,gBACPnmB,KAAKmmB,cAAc0gE,MAAMO,OAASA,GAEhCpnF,KAAKgnF,qBACPhnF,KAAKgnF,mBAAmBH,MAAMO,OAASA,Q,GArC/C,M,4BAEqBu/K,G,+ICHrB,SACA,QACA,Q,IAIA,S,IACA,S,IACA,S,IAEA,S,IACA,S,uDAEqBnkB,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAh/O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAL,iBAIA,EAAKukH,MAAQ,KACb,EAAKo3Q,aAAe,KAVR,E,qEAaT17X,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,aACHy/H,EAAkB,aAClBC,YACA,MAEF,IAAK,SAWGvsI,EAAU4M,YAAYpW,SAAS,kBACnC81I,EAAkB,eAClBC,aACSvsI,EAAU4M,YAAYpW,SAAS,iBACxC81I,EAAkB,cAClBC,aACSvsI,EAAU4M,YAAYpW,SAAS,SACxC81I,EAAkB,eAClBC,aACSvsI,EAAU4M,YAAYpW,SAAS,YACxC81I,EAAkB,cAClBC,aAKN,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,2CAMT,OAAO,I,6DAlEFqE,GAAK,U,aADOw6O,G,4MCXAwkB,E,YACnB,WAAYloL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIqjQ,K,gCAG1B//K,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQwkB,kB,GAfzD,M,4BAEqBA,G,qJCFrB,QACA,Q,uDAEqBE,E,YACnB,WAAYpoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eACZijE,IACF,EAAKwgT,cAAgB,CAAC,EAAA5oW,WAAWI,UALhB,E,qEAShBnzB,GACH,sGAAmBA,EAAW,IAAIujQ,K,gCAG1BhsP,GACHlb,KAAKs/X,cAAcnlY,SAAS+gB,EAAO9P,OAIxC,mGAAgB8P,IAHd,uG,gCAMM+rE,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQ0kB,iB,iCAxBpCA,G,4MCDAC,E,YACnB,WAAYroL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIwjQ,K,gCAG1BlgL,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQ2kB,e,GAfzD,M,4BAEqBA,G,4MCAAF,E,YACnB,WAAYnoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,eAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIsjQ,K,gCAG1BhgL,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQykB,iB,GAfzD,M,4BAEqBA,G,qJCFrB,Q,IACA,QACA,Q,uDAEqB6nG,E,YACnB,WAAYhwR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKoqE,oBAAqB,EAJP,E,qEAOhBtiF,GAIH,OAHKA,EAAUmP,SAAV,MAA8BnP,EAAUmF,kBAAkB3O,SAAS,eACtEwJ,EAAUmP,SAAV,KAA6B,CAAC,EAAAqlB,SAASG,YAEzC,8FAAkB30B,K,qDAIlB3D,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,gCAGvBb,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASu7J,QAAQukB,OAErD,IAAI5/K,EAAW,EACXnnF,KAAKimF,oBAAsBjmF,KAAK8mF,oBAAsB9mF,KAAK8mF,mBAAmBryF,QAChFuL,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBF,MAAMO,OAASH,EAASu7J,QAAQukB,MAAQ5/K,EAC1DA,GAAsB,U,8CAMJ,WAEhB4qI,EADS/xN,KAAKU,YAAYwa,OACFi1F,mBAAkB,GAAM,GAClDhC,EAAmB,GACjB4gQ,EAAoB/uW,KAAKygF,uBACzBuuR,EAAahvW,KAAK2hF,SAAS36E,QAAO,SAAAioW,GAAA,OAAcA,EAAWtuR,gCAAgCouR,MAkBjG,OAhBAh9I,EAAe3zN,SAAQ,SAAAgI,GAChBA,EAASC,cAAeD,EAASwW,aAAakmE,UAAa18E,EAASC,YAAYyM,SAArB,iBAC1D1M,EAASE,SAAW,EAAKA,QAG/B0oW,EAAW5wW,SAAQ,SAAA6wW,IACb,aAAQA,EAAWn8V,SAAX,gBAAwC1M,EAASC,YAAYyM,SAArB,mBAC/C,aAAQm8V,EAAWn8V,SAAX,KAA6B1M,EAASC,YAAYyM,SAArB,QACpCq7F,EAAiBluG,MAAK,SAAAivW,GACxB,OAAO,aAAQD,EAAWn8V,SAAX,gBAAwCo8V,EAAoBp8V,SAApB,mBAClD,aAAQm8V,EAAWn8V,SAAX,KAA6Bo8V,EAAoBp8V,SAApB,UAE5Cq7F,EAAiBp5G,KAAKk6W,SAIrB9gQ,M,iCAxDU2gQ,G,+ICJrB,SACA,QAEA,Q,IAEA,S,IACA,S,qDAEa1nG,S,gBAGX,cAAc,iGACN,GAAM,EAAO,EAAA5jQ,aAAaC,UADpB,OAEZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKH,YAAc,8BACnB,EAAKhY,cAAL,mBACA,EAAKs/R,YAAc,KACnB,EAAKi0C,eAAiB,KACtB,EAAKl4T,aAAe,GARR,E,qEAWTpb,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,UACHy/H,EAAkB,cAClBC,YACA,MACF,IAAK,kBACHD,EAAkB,iBAClBC,YAGJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uDApCJqE,GAAK,U,gNCPOs/P,E,YACnB,WAAYxoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,eACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,sCACnB,EAAKsnE,eAAgB,EALF,E,qEAQhBr/E,GACH,sGAAmBA,EAAW,IAAI2jQ,K,sCAIlC,IAAM2vE,EAAiBj3U,KAAKU,YAAYu2U,eACpCA,IACFA,EAAen0P,SAAW9iF,KAAK8iF,Y,gCAIzBmE,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASmgL,QAAQE,iB,GAxBzD,M,4BAEqBA,G,4MCAAD,E,YACnB,WAAYvoL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,kBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,8CACnB,EAAKE,OAAS,kBACd,EAAKonE,eAAgB,EANF,E,qEAShBr/E,GACH,sGAAmBA,EAAW,IAAI0jQ,K,gCAG1BpgL,GACJA,GAAYjnF,KAAKmmB,gBACnBnmB,KAAKmmB,cAAc0gE,MAAMO,OAASH,EAASmgL,QAAQC,oB,GAlBzD,M,4BAEqBA,G,8HCFrB,MACA,O,IACA,O,IACA,OAEA,QAUA,Q,IACA,Q,IACA,QACA,Q,IAEA,QACA,Q,IACA,Q,IAEA,QACA,SACA,S,IACA,Q,uDAEMspH,E,yOAEJz2H,gBAAkB,SAACt5J,GACjB,IAAM1lF,GAAS,IAAAC,oBAIf,GAFA,EAAKmwF,MAAMqxH,gBAAgB/7H,GAEvBxnG,SAASuzN,aAAc,CAEzB,IAAMztM,EAAahE,EAAOwmE,uBAEpBg0K,EAAc,UAAE7P,sBAAsB3mO,EAAY9lB,SAASuzN,cAIjE,GAAI+oC,EAAa,CACf,KAAqB,kBAAhBA,GACgB,kBAAhBA,GACgB,mBAAhBA,GACgB,iBAAhBA,GACgB,qBAAhBA,GACgB,kBAAhBA,GACgB,qBAAhBA,GACC,EAAK3uP,MAAMwwN,gBACf,CACA,GAAI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,SAEX,CACL,IAAIsL,EAAkB,GAClB24J,GAAgB,EACpB,OAAQl7H,GACN,IAAK,gBACL,IAAK,eACL,IAAK,mBAIHz9B,EAHoB,EAAKlxN,MAAMuxF,sBAAsBxsF,MAAK,SAAA6T,GACxD,MAAwB,WAAjBA,EAAQ2C,QAEa9G,KAAK4tE,yBAA2B,mBAAqB,SAC/D,qBAAhBssK,IACFk7H,GAAgB,GAElB,MAEF,IAAK,gBACH34J,EAAkB,SAClB,MACF,IAAK,iBACHA,EAAkB,UAClB,MACF,IAAK,mBACHA,EAAkB,wBAClB,MACF,IAAK,gBACHA,EAAkB,gBAGtB,EAAK44J,gBAAgB54J,EAAiB24J,EAAehwR,GAEvD,OAAO,EAC6B,IAA3B,EAAK75F,MAAMoxN,aACpB,EAAK76C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAK0L,sBACL,EAAK5wH,aACL/Y,YAAW,YACT,aAAEt1F,UAAUupG,GAAG,QAAS,EAAKm7E,qBAC5B,MAIP43E,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,QAC9D,EAAK6+N,0BAA0Bs9B,M,EAQzCm7H,gBAAkB,SAAC54J,EAAiB24J,EAAehwR,GACjD,IAAM08N,EAAgB,EAAKv2T,MAAMuxF,sBAAsBxsF,MAAK,SAAA6T,GAC1D,OAAOA,EAAQ2C,OAAS21M,KAEtBwkG,EAAqB,GAEvBA,EADsB,0BAApBxkG,EACmB,EAAK+pG,gCACG,kBAApB/pG,EACY,CAAC,EAAG,EAAG,GAEPqlG,EAAc9hT,KAAKiB,WAElB,WAApBw7M,GAAoD,qBAApBA,IAClCwkG,EAAqBA,EAAmBz1T,QAAO,SAAAw2T,GAC7C,OAAOozD,EAAgBpzD,EAAWhiT,KAAK8rI,gBAA6C,cAA3Bk2K,EAAWhiT,KAAKlV,QAA0Bk3T,EAAWhiT,KAAK8rI,mBAG/F,WAApB2wE,IACFwkG,EAAqBA,EAAmBz1T,QAAO,SAAAw2T,GAC7C,MAAkC,kBAA3BA,EAAWhiT,KAAKlV,QAAyD,sBAA3Bk3T,EAAWhiT,KAAKlV,WAIzE,IAAM7F,GAAW,aAAEtI,QAAQwH,QAAU,IAEjCmyC,EAAOrxC,EAAW,MAAQmgG,EAAM7mF,QAAU,GAC1C7U,EAAMzE,EAAW,MAAQmgG,EAAMzmF,QAAU,GACzC03B,EAAQ,OAENwwR,EAAkB5F,EAAmBhoU,OAAS,EAAI,IAAM,IAE1D6tU,EAAmB,IAUvB,GATI7F,EAAmBhoU,OAAS,EAC9B6tU,EAAmB,IACV7F,EAAmBhoU,OAAS,IACrC6tU,EAAmB,MAEhB7hU,GAAaqxC,EAAO35C,OAAOwqD,WAAa0/Q,IAC3CvwR,EAAO,OACPD,EAAQ,IAELpxC,GAAayE,EAAM/M,OAAO+xD,YAAco4Q,EAAmB,CAC9D,IAAIC,EAAiB,GACjB9F,EAAmBhoU,OAAS,EAC9B8tU,EAAiB,IACR9F,EAAmBhoU,OAAS,IACrC8tU,EAAiB,KAEnBr9T,GAAYq9T,EAEd,EAAKjlJ,SAAS,CACZ28E,oBAAqB22H,EACrB34J,kBACAtL,aAAcvzN,SAASuzN,aACvBqtC,oBAAqB,CACnBloN,OACAD,QACA3sC,U,EAKNgiJ,0BAA4B,SAACj2E,GAAuD,IAAjDt8D,EAAiD,wDAA3Be,EAA2B,aAAVkrF,EAAU,aAElF,GAAI,EAAK75F,MAAM4yN,qBACV,EAAK5yN,MAAM4yN,oBAAoBn+M,KAAK2K,eACpCve,MAAMC,QAAQ,EAAKd,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,UACd,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,IACtElL,MAAMC,QAAQopE,EAAKz1D,KAAK1I,SAAV,UACb,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,KAAOm+D,EAAKz1D,KAAK1I,SAAV,QAA8B,GAE/G,OADA,EAAK+mP,mBAAmB5oL,EAAM2vB,IACvB,EAGT,IAAM1lF,GAAS,IAAAC,oBACf,EAAKu/M,0BAA0BzpJ,GAE/B,IAAMsuT,EAAoB,EAAK1lI,mBAAmB5oL,EAAM2vB,GACxD,IAAI2+R,EAAJ,CAIA,IAAMzO,EAAmB,CAAC,cAAe,qBAAsB,kBAY/D,GAXIA,EAAiB32X,SAAS82E,EAAKz1D,KAAKlV,SACtC,EAAKkzN,gBAEH,EAAKzyN,MAAMgxN,sBAAiE,qBAAzC,EAAKhxN,MAAMgxN,qBAAqBz1M,MAClE2uD,EAAKz1D,KAAK89N,aAAgB,EAAKvyO,MAAMgxN,qBAAqBv8M,KAAKs0H,YAAc7+D,EAAKz1D,KAAK89N,aAC1F,EAAK9f,gBAMHvoJ,EAAKzvB,kBAAmB,CAC1B,IAAIw1M,EAAoB,GACxB,OAAQ/lL,EAAKz1D,KAAKlV,QAChB,IAAK,gBACH0wP,EAAoB,OACpB,MACF,IAAK,OACHA,EAAoB,SACpB,MACF,IAAK,aACHA,EAAoB,aACpB,MACF,IAAK,cACHA,EAA+C,eAA3B/lL,EAAKzvB,kBAAqC,aAAe,eAKjF,EAAKu1M,0BAA0B9lL,EAAM+lL,QAChC,GAAyB,gBAArB/lL,EAAKz1D,KAAKlV,QAA4B,EAAKS,MAAMgxN,qBAAqBv8M,KAAKitG,QACjF,EAAK1hH,MAAMgxN,qBAAqBv8M,KAAKitG,OAAO/hC,oBAC5C,EAAK3/E,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAe,CAE9D,IAAM4qW,EAAyB9/S,EAAKz1D,KAAK1I,SAAV,SAA+B,GAE1D,EAAK/L,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAc2+D,wBAAwB,WAAYisS,GAChG,EAAKx6H,UAAUtlL,EAAMt8D,GAErB,EAAKoiP,0BAA0B9lL,EAAM,eAElC,GAAyB,WAArBA,EAAKz1D,KAAKlV,OAAqB,CACxC,IAAM4gH,EAAShsG,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAC7Bk7R,EAAiBh8K,EAAOg8K,iBACP,SAAnBA,GAAgD,SAAnBA,EAC/B,EAAKhsC,oBAAoB,SAAUjmL,EAAMt8D,GAEzC,EAAK4hP,UAAUtlL,EAAMt8D,OAEO,mBAArBs8D,EAAKz1D,KAAKlV,QAcnB,EAAKiwP,UAAUtlL,EAAMt8D,GACjB,EAAK22F,MAAMx5F,qBACT,EAAKw5F,MAAMx5F,mBAAmBonP,iBAAoB,EAAK5tJ,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,aAElHU,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,QAGf,yBAArBy1D,EAAKz1D,KAAKlV,QACdoP,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,MAE3C,EAAK+6O,UAAUtlL,EAAMt8D,IAErB,EAAK4hP,UAAUtlL,EAAMt8D,GAGnB,EAAK5N,MAAMgxN,sBACb,EAAKzsH,MAAMipH,c,gGAIN,WACDr5M,GAAS,IAAAC,oBAETsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KAEvF4iK,EAAcljK,EAAOo9E,wBAIvB06R,GAA6B,EAE7Bn1M,GAAiBA,EAAcq4I,6BAC9Br4I,EAAcq4I,gCACjB88D,GAA8BhzX,KAAKsrG,MAAMwwC,qCAG3C,IAAMs1O,EAAiBpxX,KAAKk4P,2BATV,GAYZ57B,EAAsB,CAAC,EAAA59K,YAAYG,OAAQ,EAAAH,YAAYE,OAAQ,EAAAF,YAAYI,aAKjF,OAJI3mD,OAAO2B,SAASC,KAAKI,SAAS,qCAAoE,SAA7Bf,SAASC,SAASmC,SACzF8gO,EAAoBvnO,KAAK,EAAA2pD,YAAY3pB,WAIrC,+BAAK61D,WAAW,aAAW,cAAe,CAAC,yBAA0B5qF,KAAK+G,MAAMwwN,kBAC9E,+BACE3sI,WAAW,aAAW,MAAO,CAAC,cAAe5qF,KAAK+G,MAAMwwN,gBAAiB,QAAUv3N,KAAK+G,MAAMoxN,cAC9F,+BAAKvtI,UAAU,cAAco1D,IAAK,SAACkkI,GAAD,OAAU,EAAK1nD,WAAa0nD,IAC5D,+BAAKt5L,UAAU,wBACb,+BAAKA,UAAU,6BACZ5qF,KAAK6wD,SAxBA,EAAsB,IAWrB,EAa4C4sH,EAAYI,IAEjE,kCAAQjzF,UAAU,6BAA6BkyF,QAAS98K,KAAKy4N,mBAE9Dz4N,KAAKq8N,sBAAsBC,GAC3B02J,EAA6B,KAC5B,+BAAKpoS,UAAU,sBAAsBymS,eAAgBrxX,KAAKy6N,yBACxD,mCAAkBr8C,YAAaA,EACbM,SAAS,EACThuE,OAAQ1wG,KAAK+G,MAAMwwN,eACnB95C,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,0BAW/Cj9K,KAAK+G,MAAMkxN,kBAAoBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACvD,mCAAagiO,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBr0H,sBAAuBt4F,KAAK+G,MAAMuxF,sBAClC2hK,oBAAqBj6P,KAAK+G,MAAMkzP,oBAChCD,oBAAqBh6P,KAAK+G,MAAMizP,oBAChC3iC,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,iBACvBl+B,yBAA0Bt6N,KAAKsrG,MAAMgvH,2BAElD,MAELt6N,KAAKsrG,MAAM7kF,SAAW,mCAAsBN,cAAenmB,KAAKsrG,MAAMnlF,gBAAmB,KACzFirW,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,U,cAsBNuT,EAAqB,CACzB91C,8CACAF,kDACAI,oDACAK,oDACAQ,sDACAE,wEACAt3H,oDACAyB,oEACA+qI,sDACAF,gDACA5V,4CACAkC,yD,WAGa,IAAAjxC,UA9BS,SAACxzG,GAAD,MAAY,CAClCsnO,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzCX,SAAUnuB,EAAMouB,wBAAwBD,SACxCuD,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxComI,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D8U,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5CF,2BAA4Bp4J,EAAMyvO,cAAcr3E,2BAChDzjJ,iBAAkB3U,EAAM4U,YAAYD,iBACpC+vI,qBAAsB1kJ,EAAMu1I,gBAAgBmP,wBAkBNszC,EAAzB,CAA6CqgM,I,6FCxY5D,O,WACA,OACA,O,IACA,MACA,OAEA,Q,IACA,OACA,QACA,QACA,Q,mDAEA,IAuBM6O,EAA6B,SAACl0R,GAAU,IAErC5vE,EACY4vE,EADZ5vE,SAAUniC,EACE+xG,EADF/xG,OAAQotP,EACNr7I,EADMq7I,kBAAmBM,EACzB37I,EADyB27I,iBAAkBj4N,EAC3Cs8E,EAD2Ct8E,sBAAuBvU,EAClE6wF,EADkE7wF,KAAMwY,EACxEq4E,EADwEr4E,kBACzF9M,EAAiBmlF,EAAjBnlF,cAH0C,GAId,IAAAg7H,WAAS,GAJK,qBAIrCu0E,EAJqC,KAI5B+pK,EAJ4B,KAKtCC,EA5BgB,SAAChkW,GACvB,OAAQA,GACN,KAAK,EAAAL,yBAAyB,GAC9B,KAAK,EAAAA,yBAAyB,GAC5B,MAAO,4BACT,KAAK,EAAAA,yBAAyB,GAC9B,KAAK,EAAAA,yBAAyB,GAC5B,MAAO,+BACT,KAAK,EAAAA,yBAAyB,GAC9B,KAAK,EAAAA,yBAAyB,GAC5B,MAAO,+BACT,KAAK,EAAAC,eAAe,GACpB,KAAK,EAAAU,cAAc,GACjB,MAAO,6BACT,KAAK,EAAAV,eAAe,GACpB,KAAK,EAAAU,cAAc,GACjB,MAAO,8BACT,KAAK,EAAAA,cAAc,GACjB,MAAO,+BAEX,MAAO,GAQc2jW,CAAgBjkW,IAarC,IAAAimF,YAAU,WAXY,IACd9gC,EACA++S,EADA/+S,EAA0BtnF,EAAOunF,2BAA2BplD,EAAUvV,GACtEy5W,EAAYrmY,EAAOwrF,kBACpBxrF,EAAOupF,UAAavpF,EAAO4sB,eAAkB5sB,EAAO4sB,cAAcxiB,UAAUmP,SAA/B,gBAA6D4oB,GAC1GmlD,GAA4BA,EAAwBphE,2BAA6BlmB,EAAO4sB,cAAc1G,0BACtGlmB,EAAOupF,UAAYvpF,EAAOkiC,kBAAoBliC,EAAOkiC,eAAeC,IAAamlD,GAChFA,EAAwBphE,2BAA6BlmB,EAAOkiC,eAAeC,GAAUjc,yBAE3FggX,EAAWG,KAMV,CAACj5I,EAAmBjrN,EAAUvV,IAEjC,IAAM05W,EAAc,SAACj/R,GAAwC,IAAjCk/R,EAAiC,wDAC3D,GAAIvmY,EAAO0vF,uBAAyB62S,EAAsB,CACxD,IAAM72S,EAAuB1vF,EAAO4vF,yBAAyBztD,EAAUvV,GACvE,GAAI8iE,EAAqBx0F,OAEvB,YADAsrY,EAAqB92S,GAIrB1vF,EAAOupF,WACTvpF,EAAOupF,UAAW,EAClBvpF,EAAOq5F,gBACFr5F,EAAOwrF,kBACVrwF,OAAOmc,KAAKtX,EAAOkiC,gBAAgBr9B,SAAQ,SAAA5G,GACrCA,IAAQkkC,IACVniC,EAAOkiC,eAAejkC,GAAO,UAKrC,IAAMqpF,EAA0BtnF,EAAOunF,2BAA2BplD,EAAUvV,GACxE5sB,EAAOwrF,iBACTlE,EAAwB4lB,aAAY,IAEhCltG,EAAOutL,qBAAuBjmG,IAA4B60I,GACtC,eAAlBn8N,EAAO+M,QACT/M,EAAOymY,0BAA0Bn/S,GAEnCA,EAAwB4lB,aAAY,KACT,mBAAlBltG,EAAO+M,QAA+Bu6E,IAA4B60I,GAAWn8N,EAAOmH,YAAYqmL,mBAG9E,4BAAlBxtL,EAAO+M,SADhBu6E,EAAwB4lB,aAAY,GAItCltG,EAAOkiC,eAAeC,GAAYg6L,EAAU,KAAO70I,EAC/CtnF,EAAOutL,sBACa,gBAAlBvtL,EAAO+M,OACT/M,EAAO0mY,eAAevkW,EAAU,cACL,eAAlBniC,EAAO+M,OAChB/M,EAAO0mY,eAAevkW,EAAU,eACL,qBAAlBniC,EAAO+M,QAChB/M,EAAO0mY,eAAevkW,EAAU,sBAChCniC,EAAO0mY,eAAevkW,EAAU,eAChCniC,EAAO0mY,eAAevkW,EAAU,eACL,gBAAlBniC,EAAO+M,QAChB/M,EAAO0mY,eAAevkW,EAAU,sBAChCniC,EAAO0mY,eAAevkW,EAAU,oBAChCniC,EAAO0mY,eAAevkW,EAAU,eACL,uBAAlBniC,EAAO+M,QAChB/M,EAAO0mY,eAAevkW,EAAU,oBAChCniC,EAAO0mY,eAAevkW,EAAU,eAChCniC,EAAO0mY,eAAevkW,EAAU,eACL,eAAlBniC,EAAO+M,SAChB/M,EAAO0mY,eAAevkW,EAAU,oBAChCniC,EAAO0mY,eAAevkW,EAAU,eAChCniC,EAAO0mY,eAAevkW,EAAU,yBAMtC,IAAMwkW,EAA4B,CAAC,eAAgB,qBAC/CA,EAA0B/lY,SAASZ,EAAO+M,SAC5C/M,EAAOqlY,kCAAkCljW,GAKrB,aAAlBniC,EAAO+M,QAAyB/M,EAAO4mY,qBACzC5mY,EAAO4mY,oBAAoBzkW,GAE7BurN,KACA,aAAE9uP,QAAQ+pG,QAAQ,UAAYuzB,kBAC9BxiG,KAGEmtW,GAAmB,EAOvB,GAAsB,gBAAlB7mY,EAAO+M,OAA0B,CACnC,IAAMymJ,EAAYxzJ,EAAOmH,YAAYqsJ,UACjCA,IAAcA,EAAUjqE,UAAYiqE,EAAUtxH,iBAAmBsxH,EAAUjsE,2BAA2BplD,KAExG0kW,GAAmB,GAIvB,IAAML,EAAuB,SAAC92S,GAC5B,IAAMlzC,EAAU,CACd/tC,GAAI,mCACJ4U,aAAuC,iBAAzBuJ,EAAc7f,OAA4B,OAAS6f,EAAczlB,YAAYmb,SAC3F0nE,YAAap9D,EAAc3N,iBAC3Bw+O,kBAAmB/tK,EAAqB,GAAGvoF,YAAYmb,UAEzDmT,EAAsB,CACpBuB,SAAS,EACTwlB,UACA+D,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACLlhE,EAAsB,CAACuB,SAAQ,MAEhC,CACDjO,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,WACL32F,EAAO8mY,yBAAyB3kW,EAAUvV,GAC1C05W,EAAY,IAAI,GAChB7wW,EAAsB,CAACuB,SAAQ,UA0CvC,OACE,kCAAQq6D,UAAU,sBAAsBkyF,QAASsjN,EArCrB,WAC5B,GAAsB,iBAAlB7mY,EAAO+M,OAA2B,CACpC,IAAMu6E,EAA0BtnF,EAAOunF,2BAA2BplD,EAAUvV,GAG5E,KADwB,IAAAzR,oBAAmBmsE,GACrB,CACpB,IAAM9qC,EAAU,CACd/tC,GAAI,mCACJ4U,aAAcikE,EAAwBngF,YAAYmb,SAClD0nE,YAAa9oE,EAAKC,cAAc,CAAC1S,GAAI03X,IAAiB,IAAM7+S,EAAwBroE,iBACpFw+O,kBAAmB,cAErBhoO,EAAsB,CACpBuB,SAAS,EACTwlB,UACA+D,QAAS,CAAC,CACRx3B,KAAM,uBACNmpF,MAAO,QACPvb,MAAO,WACgB32F,EAAOmH,YAAYwa,OAAOsD,MAAM0nR,OACxCp+B,WAAWhlL,UAAW,EACnC+8S,IACA7wW,EAAsB,CAACuB,SAAQ,MAEjC,CACAjO,KAAM,sBACNmpF,MAAO,OACPvb,MAAO,WACLlhE,EAAsB,CAACuB,SAAQ,YASmDsvW,GAC1F,gCAAMj1S,UAAW,kCACd8qI,EAAU,wBAA0B,KAAO0qK,EAAmB,yBAA2B,MAC5F,gCAAMx1S,UAAW,wCAA0Cw1S,EAAmB,gCAAkC,KAC9G,4CAAkBp4X,GAAI03X,OAM9BF,EAA2Bt9O,UAAY,CACrCxmH,SAAU,UAAU8G,OAAOy2E,WAC3B1/G,OAAQ,UAAU5B,OAAOshH,WACzB0tI,kBAAmB,UAAUvkG,KAAKnpC,WAClCguI,iBAAkB,UAAUloE,KAAK9lE,WACjC9yF,cAAe,UAAUyzB,MAAV,qBAGjB,IAMM02I,EAAqB,CACzBthK,8CACAiE,uC,WAGa,IAAA80H,aACb,IAAAj8C,UAZsB,SAACxzG,GACvB,MAAO,CACL0kJ,qBAAsB1kJ,EAAMu1I,gBAAgBmP,wBAUrBszC,EAAzB,CAA6CkvM,K,8ECpP/C,I,IAAA,M,IACA,OACA,O,IACA,MACA,O,IAEA,OACA,QACA,QACA,S,mDAEA,IAAMc,EAA+B,SAACh1R,GAAU,IAEvC/xG,EAAgG+xG,EAAhG/xG,OAAQ0tP,EAAwF37I,EAAxF27I,iBAAkBh0N,EAAsEq4E,EAAtEr4E,kBAAmBmnD,EAAmDkxB,EAAnDlxB,OAAQgtK,EAA2C97I,EAA3C87I,eAAgBrxI,EAA2BzK,EAA3ByK,SAAU5vF,EAAiBmlF,EAAjBnlF,cAIhFo6W,EAAyBhnY,EAAO4sB,eAAiBA,GACjDA,EAAc1G,2BAA6BlmB,EAAO4sB,cAAc1G,yBAEhEogX,EAAc,SAACnkW,GAIfniC,EAAOupF,WACTvpF,EAAOupF,UAAW,EAClBvpF,EAAOq5F,kBAEJ2tS,GAA0Bp6W,GAC7BA,EAAcsgF,cAEhBltG,EAAOk9U,aAAe/6S,EACtBniC,EAAOutF,mBAAqBvtF,EAAOuuF,wBACnCm/J,KACA,aAAE9uP,QAAQ+pG,QAAQ,UAAYuzB,kBAC9BxiG,KAGIutW,EAAoB,SAAC9kW,GACzB,IACMg6L,EAAU6qK,GAA2BhnY,EAAOk9U,eAAiB/6S,EACnE,OACE,kCAAQkvD,UAAW,uBACdlvD,IAAa,EAAAwhL,oBAAoB,IAAMxhL,IAAa,EAAAwhL,oBAAoB,GAAK,wBAA0B,IACpG1lN,IAAKkkC,EACLohJ,QAAS,kBAAM+iN,EAAYnkW,KACjC,gCAAMkvD,UAAW,kCACZ8qI,EAAU,wBAA0B,MACvC,gCAAM9qI,UAAW,wCACjB,4CAAkB5iF,GAAI,mCAAqC0zB,OAMnE,OACE,+BAAKkvD,UAAW,0BAA4BmrB,EAAW,mBAAqB,IACvE1hG,MAAO+lE,GACV,gCAAMwQ,UAAU,oBAAoBv2E,MAAO+yO,IAC3C,+BAAKx8J,UAAU,oBACb,+BAAKA,UAAU,wBACb,8BAAIA,UAAU,kBAAd,QACA,+BAAKA,UAAU,oBACZ,EAAAsyH,oBAAoB7kN,MAAM,EAAG,GAAGyP,KAAI,SAAC4zB,GAAD,OAAc8kW,EAAkB9kW,QAGzE,+BAAKkvD,UAAU,2BACb,+BAAKA,UAAU,oBACZ,EAAAsyH,oBAAoB7kN,MAAM,EAAG,GAAGyP,KAAI,SAAC4zB,GAAD,OAAc8kW,EAAkB9kW,WAQjF4kW,EAA6Bp+O,UAAY,CACvC9nE,OAAQ,UAAUziF,OAClByvP,eAAgB,UAAUzvP,OAC1B4B,OAAQ,UAAU5B,OAAOshH,WACzBlD,SAAU,UAAUqsC,KACpBukG,kBAAmB,UAAUvkG,KAAKnpC,WAClCguI,iBAAkB,UAAUloE,KAAK9lE,WACjC9yF,cAAe,UAAUyzB,MAAV,qBAGjB,IAMM02I,EAAqB,CACzBr9J,uC,WAEa,IAAA80H,aACb,IAAAj8C,UAVsB,SAACxzG,GACvB,MAAO,CACL0kJ,qBAAsB1kJ,EAAMu1I,gBAAgBmP,wBAQrBszC,EAAzB,CAA6CgwM,K,8HChG/C,MACA,OACA,O,IAEA,QAEA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,QAEA,QACA,Q,IAOA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QAEA,QACA,Q,IACA,QACA,S,IACA,Q,IACA,Q,uDAEMnG,E,yOAMJjgI,gBAAkB,SAACt5J,GACjB,IAAM1lF,GAAS,IAAAC,oBAOf,GAJKhjB,OAAOqmO,WAAc,EAAKz3N,MAAMwwN,gBAAmB,EAAKxwN,MAAMkxN,iBACjE,EAAK3sH,MAAMqxH,gBAAgB/7H,GAGzBxnG,SAASuzN,eAAiBx0N,OAAOqmO,UAAW,CAE9C,IAAMt/M,EAAahE,EAAOwmE,uBAEpBg0K,EAAc,UAAE7P,sBAAsB3mO,EAAY9lB,SAASuzN,cAC7DikK,GAAgB,EAEpB,GAAIl7H,EAAa,CACf,KAAqB,kBAAhBA,GAAmD,kBAAhBA,GAAmD,mBAAhBA,GACtD,iBAAhBA,GAAkD,qBAAhBA,GAAsD,qBAAhBA,GACxD,kBAAhBA,GAAqC,EAAK3uP,MAAMwwN,gBAAgB,CACnE,GAAI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KAEhBvzN,SAAS8pG,oBAAoB,QAAS,EAAK66H,2BACtC,CACL,IAAI9F,EAAkB,GACtB,OAAQy9B,GACN,IAAK,gBACL,IAAK,eACL,IAAK,mBACH,IAAM0kI,EAAc,EAAKrzX,MAAMuxF,sBAAsBxsF,MAAK,SAAA6T,GACxD,MAAwB,WAAjBA,EAAQ2C,QAEjB21M,EAAkBmiK,EAAY5+W,KAAK4tE,yBAA2B,mBAAqB,SAC/D,qBAAhBssK,IACFk7H,GAAgB,GAElB,MAEF,IAAK,gBACH34J,EAAkB,SAClB,MACF,IAAK,iBACHA,EAAkB,UAClB,MACF,IAAK,mBACHA,EAAkB,wBAClB,MACF,IAAK,gBACHA,EAAkB,gBAGtB,EAAK36C,SAAS,CACZ26C,kBACAgiC,oBAAqB22H,EACrBjkK,aAAcvzN,SAASuzN,eACtB,WACGsL,GACFvpI,YAAW,WACTt1F,SAASytD,iBAAiB,QAAS,EAAKk3K,yBACvC,MAIT,OAAO,EAC6B,IAA3B,EAAKh3N,MAAMoxN,cACfhgO,OAAOsmO,kBACV,EAAKnzH,MAAMozH,gBAAgBg3B,EAAYv7B,OAASu7B,EAAYn8P,QAAUm8P,GAAap5P,cAAcqC,QAAQ,KAAM,MAEjH,EAAKk/N,kBAGP63B,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,OAAQq3X,GACtE,EAAKx4J,0BAA0Bs9B,M,EAQzCxuG,0BAA4B,SAACj2E,GAAuD,IAAjDt8D,EAAiD,wDAA3Be,EAA2B,aAAVkrF,EAAU,aAC5E1lF,GAAS,IAAAC,oBAGf,GAAI,EAAKpU,MAAM4yN,qBACV,EAAK5yN,MAAM4yN,oBAAoBn+M,KAAK2K,eACpCve,MAAMC,QAAQ,EAAKd,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,UACd,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,IACtElL,MAAMC,QAAQopE,EAAKz1D,KAAK1I,SAAV,UACb,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,KAAOm+D,EAAKz1D,KAAK1I,SAAV,QAA8B,GAE/G,OADA,EAAK+mP,mBAAmB5oL,EAAM2vB,IACvB,EAGT,IAAM2+R,EAAoB,EAAK1lI,mBAAmB5oL,EAAM2vB,GACxD,GAAI2+R,EACF,EAAKj0R,MAAMplF,iBAAiB+qD,EAAKz1D,UADnC,CAKA,GAAIy1D,EAAKzvB,kBAAmB,CAC1B,IAAIw1M,EAAoB,GACxB,OAAQ/lL,EAAKz1D,KAAKlV,QAChB,IAAK,gBACH0wP,EAAoB,OACpB,MACF,IAAK,OACHA,EAAoB,SACpB,MACF,IAAK,aACHA,EAAoB,aACpB,MACF,IAAK,cACHA,EAA+C,eAA3B/lL,EAAKzvB,kBAAqC,aAAe,eAKjF,EAAKu1M,0BAA0B9lL,EAAM+lL,QAChC,GAAyB,gBAArB/lL,EAAKz1D,KAAKlV,QAA4B,EAAKS,MAAMgxN,qBAAqBv8M,KAAKitG,OAAO/hC,oBACxF,EAAK3/E,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAe,CAC9D,IAAM4qW,EAAyB9/S,EAAKz1D,KAAK1I,SAAV,SAA+B,GAC1D,EAAK/L,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAc2+D,wBAAwB,WAAYisS,GAChG,EAAKx6H,UAAUtlL,EAAMt8D,GAErB,EAAKoiP,0BAA0B9lL,EAAM,eAElC,GAAyB,WAArBA,EAAKz1D,KAAKlV,OAAqB,CACxC,IAAM4gH,EAAShsG,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAC7Bk7R,EAAiBh8K,EAAOg8K,iBACP,SAAnBA,GAAgD,SAAnBA,EAC/B,EAAKhsC,oBAAoB,SAAUjmL,EAAMt8D,GAEzC,EAAK4hP,UAAUtlL,EAAMt8D,OAEO,mBAArBs8D,EAAKz1D,KAAKlV,QAcnB,EAAKiwP,UAAUtlL,EAAMt8D,GACjB,EAAK22F,MAAMx5F,qBACT,EAAKw5F,MAAMx5F,mBAAmBonP,iBAAoB,EAAK5tJ,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,aAElHU,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,QAGf,yBAArBy1D,EAAKz1D,KAAKlV,QACdoP,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,MAE3C,EAAK+6O,UAAUtlL,EAAMt8D,IAErB,EAAK4hP,UAAUtlL,EAAMt8D,GAGvB,EAAK22F,MAAMplF,iBAAiB+qD,EAAKz1D,MAEjC,IAAM+nN,EAAc,EAAKx8N,MAAM4yN,oBAC3B,EAAK5yN,MAAMgxN,qBAAqBz1M,KAAO,IAAM,EAAKvb,MAAM4yN,oBAAoBr3M,KAC5E,EAAKvb,MAAMgxN,qBAAqBz1M,KAE/BnqB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe6E,EAAYjnO,cAAcqC,QAAQ,KAAM,MAGhE,EAAKoI,MAAMgxN,sBACb,EAAKzsH,MAAMipH,c,EAIfmF,mBAAqB,SAAAo+B,GACnB,IAAMl+B,EAAck+B,EAAkBt8O,KACtCo+M,EAAYl5N,YAAYg5N,mBAAmBE,GAC3C,EAAKt8C,SAAS,CACZq8C,oBAAqBm+B,EACrB/+B,oBAAqBa,EAAYxnI,oBACjC4mI,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAK+5I,qBACL,EAAKjE,yBACL,EAAKhH,2BAA2B+kC,EAAmB,0BAGrD,EAAK99B,8BAA8B89B,IAE9Bl+B,EAAYl5N,aAAoD,UAArCk5N,EAAYl5N,YAAYmb,UAC1B,gBAAzB+9M,EAAY/9M,WAA+B1jB,OAAOsmO,mBACrD,EAAKnzH,MAAMozH,eAAeo5B,EAAkBx1O,KAAKhmB,cAAcqC,QAAQ,KAAM,MAE/E,EAAK05N,oBAAoBy/B,I,iHAhNDl5E,GACxB5+K,KAAK08N,2BAA2B99C,K,+BAmNhC,IAAM1jK,GAAS,IAAAC,oBACTsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KACvFu6S,EAAgBl4I,GAAiBJ,EACjCW,EAAcljK,EAAOo9E,wBACrBlG,EAAsB2jO,GAAiBA,EAAc3jO,oBAOvD2gC,GAAY,EACZhqC,EAAe,GACf/oF,KAAKsrG,MAAMx5F,qBACT9R,KAAKsrG,MAAMx5F,mBAAmBonP,iBAAoBl5P,KAAKsrG,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,YACpHhV,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAUg/H,GAAiBA,EAAc6qL,cAAgB7qL,EAAczrF,sBACjH2gC,GAAY,EACZhqC,EAAe/oF,KAAK+G,MAAM/G,KAAKw7N,wBAAwBx7N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,UAG7F,IAAMq7E,EAAW3hF,KAAKy0B,YAAYvZ,GAE5Bk2W,EAAiBpxX,KAAKk4P,0BAA0BnlI,GAEhD4nG,EAAcl9C,GAAoC,kBAAtBA,EAAWn3K,QAA8Bm3K,EAAWrrF,qBAChFyrF,IAAkB79K,KAAKqzN,WAAWx1C,IAA2C,gBAAzBA,EAAcv3K,QACxC,uBAAzBu3K,EAAcv3K,SAAoCu3K,EAAczrF,oBAEjE+sI,EAA2B42F,GAAiB,UAAgBtiH,yBAChEzzM,KAAKsrG,MAAMt1F,aAAc,WAAY+/S,EAAe/1T,KAAKsrG,MAAMnzF,gBAC/D1jB,OAEIynU,GAAmBl8T,KAAKsrG,MAAMx5F,mBAAmB8rB,aACjDigJ,GAAiBA,EAAc13J,eAAiB03J,EAAct3F,WAAWvmF,KAAKsrG,MAAMr+F,mBAAqB4wK,EAAcn3F,mBASzHssS,GAA6B,EAMjC,IAAM3mO,EAAewxB,GAAiB,EAAA1iJ,0BAA0BhhC,SAAS0jL,EAAcv3K,QAGvF,OACE,+BAAKskF,UAAW,gBACb5qF,KAAK+G,MAAMwwN,gBAAkBv3N,KAAK+G,MAAMkxN,gBAAkB,2BAA6B,KACxF,+BAAKrtI,UAAW,QAAU5qF,KAAK+G,MAAMwwN,eAAiB,gBAAkB,KAEtE,+BAAK3sI,UAAW,cAAgB5qF,KAAK+G,MAAMk4N,mBAAqB,oCAAsC,KACpG,+BAAKr0I,UAAU,eACb,+BACEA,UAAW,qBACR5qF,KAAK+G,MAAM4yN,oBAAsB,kCAAoC,KACrEttE,EAAe,uCAAyC,KAC1DrsJ,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKwnE,cACrE,mCAAgB07S,YAAa1+X,KAAK+G,MAAM23X,YACxBj+X,UAAU,EACVo9K,cAAe79K,KAAK+G,MAAM4yN,oBAAoBn+M,KAC9CmjX,uBAAwB3+X,KAAK2+X,yBAC3C,KACH9gN,GAAiBxxB,EACdnxI,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAc13J,gBACpD,mCAAqB1lB,UAAU,EAAMo9K,cAAeA,IACtD,KACHA,GAAiB79K,KAAKqzN,WAAWx1C,IAA6C,gBAA3BA,EAAchiK,SAC9D,mCACAk8M,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjCoD,yBAA0Bn7N,KAAKm7N,2BAC/B,MAEN,mCAAyBhD,YAAan4N,KAAK+G,MAAMoxN,YACxBl0I,WAAYjkF,KAAK+G,MAAMk9E,WACvB2L,SAAU5vF,KAAKsrG,MAAM1b,SACrBmoI,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjChb,wBAAyB/8M,KAAK+8M,wBAC9B/tL,sBAAuBhvB,KAAKsrG,MAAMt8E,sBAClC6vM,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5B21M,wBAAyB3+N,KAAK2+N,2BAExDhE,GAAc36N,KAAK+G,MAAMgyN,qBAAuBoG,GAC7Cn/N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OACzC,mCAAiB20J,sBAAuBxzM,KAAKwzM,sBAC5Bb,gBAAgB,WAChBl1B,WAAYs4I,EACZt1T,UAAU,IAG3BT,KAAK+G,MAAM0jN,mBACT13F,GAAa/yH,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAC1Exb,KAAKu7N,sBAEPv7N,KAAKk/N,YAAYv9I,EAAmCqxS,EAA4Br4J,EAAYl9C,EAAYI,EAAeshD,EAA0B/sI,IAEtJ2gC,GAAc/yH,KAAK+G,MAAM0jN,mBAAsBkQ,GAC5C36N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAevC,KAdF,mCACEurK,eAAgBrhI,EAAa/hF,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAClD1uC,kBAAmBnqN,KAAK+G,MAAM40N,gBAC9BzR,qBAAsBlqN,KAAKy4P,mBAC3BpuC,kBAAmBrqN,KAAKqqN,kBACxBe,qBAAsBprN,KAAKorN,qBAC3B3qN,UAAU,EACV2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnC21M,aAAa,EACbN,kBAAmBzqN,KAAK+G,MAAM0jN,kBAC9BE,oBAAqB3qN,KAAK2qN,oBAC1BD,4BAA6B1qN,KAAK0qN,4BAClCJ,kBAAmBvhI,EAAalrF,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,oBAAoB2xG,IAGjD82D,EACxB,mCACEv1M,WAAYs4I,EACZt1T,UAAU,IAEV,KACHk6N,IAAe36N,KAAK+G,MAAMgyN,qBAAuBoG,EAChD,mCAAiB1hD,WAAYs4I,EAAepjH,gBAAgB,WAAWlyM,UAAU,IAC/E,KACHT,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAU7+C,KAAK+G,MAAMgxN,wBACxDhlG,GAAsCigQ,GAA+Br4J,GAAcwE,GACtF,mCAAkB/gD,YAAaA,EACbX,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,wBACxC,OAGPj9K,KAAK+G,MAAMkxN,kBAAoBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACvD,mCAAagiO,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBr0H,sBAAuBt4F,KAAK+G,MAAMuxF,sBAClC2hK,oBAAqBj6P,KAAK+G,MAAMkzP,oBAChC5iC,uBAAwBr3N,KAAKq3N,yBAE1C,KACH+5J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,KACJ,mCACE/0K,GAAG,mBACHi8E,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9B7+B,UAAWl+K,KAAK+G,MAAM4yN,sBACvB35N,KAAKsrG,MAAM7kF,SAAW,mCAAsBN,cAAenmB,KAAKsrG,MAAMnlF,gBAAmB,U,cAsB5FmqK,EAAqB,CACzB91C,8CACAO,oDACA52H,oDACAyB,oEACA21H,sDACAE,wEACAN,wDACAN,4CACAkC,yD,WAGa,IAAAgL,aACb,IAAAj8C,UA7BsB,SAACxzG,GAAD,MAAY,CAClC6f,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCshN,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzCX,SAAUnuB,EAAMouB,wBAAwBD,SACxCwD,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCuxH,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D49D,cAAephN,EAAMyV,UAAU2rM,cAC/Bt9D,mBAAoB9jJ,EAAMu1I,gBAAgBuO,mBAC1CnvI,iBAAkB3U,EAAM4U,YAAYD,iBACpC+vI,qBAAsB1kJ,EAAMu1I,gBAAgBmP,wBAgBnBszC,EAAzB,CAA6C6pM,K,8HC7b/C,MACA,OACA,O,IACA,O,IAEA,QAEA,Q,IAEA,Q,IACA,Q,IACA,QAEA,QACA,Q,IAOA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QAEA,QACA,Q,IACA,QACA,Q,IACA,Q,IACA,QACA,QACA,Q,uDAEMA,E,yOAMJsG,oBAAsB,SAAC9zK,EAAc/rH,GACnC,GAAI,EAAK0K,MAAM/sC,YAAYmyC,OAIzB,OAHA,EAAKpF,MAAMhtC,mBAAmB,CAC5BoyC,QAAQ,KAEH,EAET,IAAKi8G,GAAgB,EAAK5lN,MAAMwwN,eAC9B,OAAO,EARoC,IAWtC/gH,GAAe,IAAAH,2BAA0Bs2G,EAAarmN,OAAQqmN,EAAa/rI,eAA3E41B,YACP,OAAKA,EAAY/hH,OAAS,KAAQk4N,EAAarmN,QAAkC,gBAAxBqmN,EAAarmN,SACpE,EAAKglG,MAAMhtC,mBAAmB,CAC5BoyC,QAAQ,EACRpqG,OAAQqmN,EAAarmN,OACrBs6E,cAAe+rI,EAAa/rI,cAC5BllD,SAAU,CACRthB,EAAGwmF,EAAM7mF,QACTM,EAAGumF,EAAMzmF,YAGN,KACyB,IAAvBq8F,EAAY/hH,SAAgB+hH,EAAY,GAAGr8G,SAAS,a,EAUjEk9N,uBAAyB,SAAC7lC,EAAgBlrL,GACxC,IAAM4U,GAAS,IAAAC,oBACXq8M,EAAgB,GAAIC,EAAgB,GAClC76M,EAAe1B,EAAOgb,wBAAwB5vB,GAChDsW,IACF66M,EAAgB76M,EAAaf,SAC7B27M,EAAgB56M,EAAalc,YAAYmb,UAKtC47M,GAQL,EAAKn6C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAKllH,aACL,EAAK2wH,0BAA0BX,EAAeD,IAC9C,aAAEp+N,UAAUupG,GAAG,QAAS,EAAKm7E,mBAC7B,EAAKu6C,sBACD7mC,IAAmBkmC,cACrBlmC,EAAe/qF,kB,EAKrByzJ,gBAAkB,SAACt5J,GAOjB,GAJKzoG,OAAOqmO,WAAc,EAAKz3N,MAAMwwN,gBAAmB,EAAKjsH,MAAM/sC,YAAYmyC,QAC7E,EAAKpF,MAAMqxH,gBAAgB/7H,GAGzBxnG,SAASuzN,eAAiBx0N,OAAOqmO,UAAW,CAG9C,GAAI,EAAKiiK,oBAAoBrnY,SAASuzN,aAAc/rH,GAClD,OAAO,EAGT,IAAM8/R,EAAgBtnY,SAASuzN,aAAarmN,OAE5C,GAAIo6X,EAAe,CACc,IAA3B,EAAK35X,MAAMoxN,aACb,EAAK0F,iBAEP,IACMjhN,GADS,IAAAzB,oBACa+a,wBAAwBwqW,GAChD9jX,IACF,EAAKw7M,0BAA0Bx7M,EAAaf,SAAUe,EAAalc,YAAYmb,UAC1E1jB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe9hN,EAAaf,SAASvf,cAAcqC,QAAQ,KAAM,U,EAOtFuoJ,0BAA4B,SAACj2E,GAAuD,IAAjDt8D,EAAiD,wDAA3Be,EAA2B,aAAVkrF,EAAU,aAC5E1lF,GAAS,IAAAC,oBAGf,GAAI,EAAKpU,MAAM4yN,qBACV,EAAK5yN,MAAM4yN,oBAAoBn+M,KAAK2K,eACpCve,MAAMC,QAAQ,EAAKd,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,UACd,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,IACtElL,MAAMC,QAAQopE,EAAKz1D,KAAK1I,SAAV,UACb,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,KAAOm+D,EAAKz1D,KAAK1I,SAAV,QAA8B,GAE/G,OADA,EAAK+mP,mBAAmB5oL,EAAM2vB,IACvB,EAGT,IAAM2+R,EAAoB,EAAK1lI,mBAAmB5oL,EAAM2vB,GACxD,GAAI2+R,EACF,EAAKj0R,MAAMplF,iBAAiB+qD,EAAKz1D,UADnC,CAKA,GAAIy1D,EAAKzvB,kBAAmB,CAC1B,IAAIw1M,EAAoB,GACxB,OAAQ/lL,EAAKz1D,KAAKlV,QAChB,IAAK,gBACH0wP,EAAoB,OACpB,MACF,IAAK,OACHA,EAAoB,SACpB,MACF,IAAK,aACHA,EAAoB,aACpB,MACF,IAAK,cACHA,EAA+C,eAA3B/lL,EAAKzvB,kBAAqC,aAAe,eAKjF,EAAKu1M,0BAA0B9lL,EAAM+lL,QAChC,GAAyB,gBAArB/lL,EAAKz1D,KAAKlV,QAA4B,EAAKS,MAAMgxN,qBAAqBv8M,KAAKitG,OAAO/hC,oBACxF,EAAK3/E,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAe,CAC9D,IAAM4qW,EAAyB9/S,EAAKz1D,KAAK1I,SAAV,SAAiCm+D,EAAKz1D,KAAK1I,SAAV,SAA+B,GAAK,KAChGi+W,IAA2B,EAAKhqX,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAc2+D,wBAAwB,WAAYisS,GAC3H,EAAKh6H,0BAA0B9lL,EAAM,UAErC,EAAKslL,UAAUtlL,EAAMt8D,QAElB,GAAyB,WAArBs8D,EAAKz1D,KAAKlV,OAAqB,CACxC,IAAM4gH,EAAShsG,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAC7Bk7R,EAAiBh8K,EAAOg8K,eAAejyN,EAAKz1D,MAC3B,SAAnB0nR,GAAgD,SAAnBA,EAC/B,EAAKhsC,oBAAoB,SAAUjmL,EAAMt8D,GAEzC,EAAK4hP,UAAUtlL,EAAMt8D,OAEO,mBAArBs8D,EAAKz1D,KAAKlV,QAcnB,EAAKiwP,UAAUtlL,EAAMt8D,GACjB,EAAK22F,MAAMx5F,qBACT,EAAKw5F,MAAMx5F,mBAAmBonP,iBAAoB,EAAK5tJ,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,aAElHU,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,QAGf,yBAArBy1D,EAAKz1D,KAAKlV,QACdoP,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,MAE3C,EAAK+6O,UAAUtlL,EAAMt8D,IAErB,EAAK4hP,UAAUtlL,EAAMt8D,GAGvB,EAAK22F,MAAMplF,iBAAiB+qD,EAAKz1D,MAEjC,IAAM+nN,EAAc,EAAKx8N,MAAM4yN,oBAC3B,EAAK5yN,MAAMgxN,qBAAqBz1M,KAAO,IAAM,EAAKvb,MAAM4yN,oBAAoBr3M,KAC5E,EAAKvb,MAAMgxN,qBAAqBz1M,KAE/BnqB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe6E,EAAYjnO,cAAcqC,QAAQ,KAAM,MAGhE,EAAKoI,MAAMgxN,sBACb,EAAKzsH,MAAMipH,c,EAIfmF,mBAAqB,SAAAo+B,GACnB,IAAMl+B,EAAck+B,EAAkBt8O,KACtCo+M,EAAYl5N,YAAYg5N,mBAAmBE,GAC3C,EAAKt8C,SAAS,CACZq8C,oBAAqBm+B,EACrB/+B,oBAAqBa,EAAYxnI,oBACjC4mI,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAK+5I,qBACL,EAAKjE,yBACL,EAAKhH,2BAA2B+kC,EAAmB,0BAGrD,EAAK99B,8BAA8B89B,IAE9Bl+B,EAAYl5N,aAAoD,UAArCk5N,EAAYl5N,YAAYmb,UAC1B,gBAAzB+9M,EAAY/9M,WAA+B1jB,OAAOsmO,mBACrD,EAAKnzH,MAAMozH,eAAeo5B,EAAkBx1O,KAAKhmB,cAAcqC,QAAQ,KAAM,MAE/E,EAAK05N,oBAAoBy/B,I,iHAjODl5E,GACxB5+K,KAAK08N,2BAA2B99C,K,+BAoOhC,IAAM1jK,GAAS,IAAAC,oBACTsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KACvFu6S,EAAgBl4I,GAAiBJ,EACjCW,EAAcljK,EAAOo9E,wBACrBlG,EAAsB2jO,GAAiBA,EAAc3jO,oBAOvD2gC,GAAY,EACZhqC,EAAe,GACf/oF,KAAKsrG,MAAMx5F,qBACT9R,KAAKsrG,MAAMx5F,mBAAmBonP,iBAAoBl5P,KAAKsrG,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,YACpHhV,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAUg/H,GAAiBA,EAAc6qL,cAAgB7qL,EAAczrF,sBACjH2gC,GAAY,EACZhqC,EAAe/oF,KAAK+G,MAAM/G,KAAKw7N,wBAAwBx7N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,UAG7F,IAAMq7E,EAAW3hF,KAAKy0B,YAAYvZ,GAE5Bk2W,EAAiBpxX,KAAKk4P,0BAA0BnlI,GAEhD4nG,EAAcl9C,GAAoC,kBAAtBA,EAAWn3K,QAA8Bm3K,EAAWrrF,qBAChFyrF,IAAkB79K,KAAKqzN,WAAWx1C,IAA2C,gBAAzBA,EAAcv3K,QACxC,uBAAzBu3K,EAAcv3K,SAAoCu3K,EAAczrF,oBAEjE+sI,EAA2B42F,GAAiB,UAAgBtiH,yBAChEzzM,KAAKsrG,MAAMt1F,aAAc,WAAY+/S,EAAe/1T,KAAKsrG,MAAMnzF,gBAC/D1jB,OAEIynU,GAAmBl8T,KAAKsrG,MAAMx5F,mBAAmB8rB,aACjDigJ,GAAiBA,EAAc13J,eAAiB03J,EAAct3F,WAAWvmF,KAAKsrG,MAAMr+F,mBAAqB4wK,EAAcn3F,mBASzHssS,GAA6B,EAMjC,IAAM3mO,EAAewxB,GAAiB,EAAA1iJ,0BAA0BhhC,SAAS0jL,EAAcv3K,QAGvF,OACE,+BAAKskF,UAAW,gBACb5qF,KAAK+G,MAAMwwN,gBAAkBv3N,KAAK+G,MAAMkxN,gBAAkB,2BAA6B,KACxF,+BAAKrtI,UAAW,QAAU5qF,KAAK+G,MAAMwwN,eAAiB,gBAAkB,KAEtE,+BAAK3sI,UAAW,cAAgB5qF,KAAK+G,MAAMk4N,mBAAqB,oCAAsC,KACpG,+BAAKr0I,UAAU,eACb,+BACEA,UAAW,qBACR5qF,KAAK+G,MAAM4yN,oBAAsB,kCAAoC,KACrEttE,EAAe,uCAAyC,KAC1DrsJ,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKwnE,cACrE,mCAAgB07S,YAAa1+X,KAAK+G,MAAM23X,YACxBj+X,UAAU,EACVo9K,cAAe79K,KAAK+G,MAAM4yN,oBAAoBn+M,KAC9CmjX,uBAAwB3+X,KAAK2+X,yBAC3C,KACH9gN,GAAiBxxB,EACdnxI,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAc13J,gBACpD,mCAAqB1lB,UAAU,EAAMo9K,cAAeA,IACtD,KACHA,GAAiB79K,KAAKqzN,WAAWx1C,IAA6C,gBAA3BA,EAAchiK,SAC9D,mCACAk8M,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjCoD,yBAA0Bn7N,KAAKm7N,2BAC/B,MAEN,mCAAyBhD,YAAan4N,KAAK+G,MAAMoxN,YACxBl0I,WAAYjkF,KAAK+G,MAAMk9E,WACvB2L,SAAU5vF,KAAKsrG,MAAM1b,SACrBmoI,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjChb,wBAAyB/8M,KAAK+8M,wBAC9B/tL,sBAAuBhvB,KAAKsrG,MAAMt8E,sBAClC6vM,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5B21M,wBAAyB3+N,KAAK2+N,2BAExDhE,GAAc36N,KAAK+G,MAAMgyN,qBAAuBoG,GAC7Cn/N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OACzC,mCAAiB20J,sBAAuBxzM,KAAKwzM,sBAC5Bb,gBAAgB,WAChBl1B,WAAYs4I,EACZt1T,UAAU,IAG3BT,KAAK+G,MAAM0jN,mBACT13F,GAAa/yH,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAC1Exb,KAAKu7N,sBAEPv7N,KAAKk/N,YAAYv9I,EAAmCqxS,EAA4Br4J,EAAYl9C,EAAYI,EAAeshD,EAA0B/sI,IAEtJ2gC,GAAc/yH,KAAK+G,MAAM0jN,mBAAsBkQ,GAC5C36N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAevC,KAdF,mCACEurK,eAAgBrhI,EAAa/hF,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAClD1uC,kBAAmBnqN,KAAK+G,MAAM40N,gBAC9BzR,qBAAsBlqN,KAAKy4P,mBAC3BpuC,kBAAmBrqN,KAAKqqN,kBACxBe,qBAAsBprN,KAAKorN,qBAC3B3qN,UAAU,EACV2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnC21M,aAAa,EACbN,kBAAmBzqN,KAAK+G,MAAM0jN,kBAC9BE,oBAAqB3qN,KAAK2qN,oBAC1BD,4BAA6B1qN,KAAK0qN,4BAClCJ,kBAAmBvhI,EAAalrF,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,oBAAoB2xG,IAGjD82D,EACxB,mCACEv1M,WAAYs4I,EACZt1T,UAAU,IAEV,KACHk6N,IAAe36N,KAAK+G,MAAMgyN,qBAAuBoG,EAChD,mCAAiB1hD,WAAYs4I,EAAepjH,gBAAgB,WAAWlyM,UAAU,IAC/E,KACHT,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAU7+C,KAAK+G,MAAMgxN,wBACxDhlG,GAAsCigQ,GAA+Br4J,GAAcwE,GACtF,mCAAkB/gD,YAAaA,EACbX,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,wBACxC,OAGR,mCAAgBo6C,uBAAwBr3N,KAAKq3N,yBAC5C+5J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,KACJ,mCACE/0K,GAAG,mBACHi8E,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9B7+B,UAAWl+K,KAAK+G,MAAM4yN,sBACvB35N,KAAKsrG,MAAM7kF,SAAW,mCAAsBN,cAAenmB,KAAKsrG,MAAMnlF,gBAAmB,U,cA0B5FmqK,EAAqB,CACzB91C,8CACAO,oDACA52H,oDACAyB,oEACA21H,sDACAE,wEACAN,wDACAN,4CACAkC,wDACAz+E,yC,WAGa,IAAAypF,aACb,IAAAj8C,UAlCsB,SAACxzG,GAAU,IAC1BimE,EAAejmE,EAAM0zG,UAArBztC,YACP,MAAO,CACLpmD,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCshN,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzCX,SAAUnuB,EAAMouB,wBAAwBD,SACxCwD,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCuxH,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D49D,cAAephN,EAAMyV,UAAU2rM,cAC/Bt9D,mBAAoB9jJ,EAAMu1I,gBAAgBuO,mBAC1CnvI,iBAAkB3U,EAAM4U,YAAYD,iBACpC+vI,qBAAsB1kJ,EAAMu1I,gBAAgBmP,qBAC5Cz+E,iBAkBuB+xH,EAAzB,CAA6C6pM,K,mHC9c/C,O,OACA,OACA,O,IACA,MACA,QAIA,QAEA,QAOA,QAGA,QACA,QACA,QACA,Q,IACA,Q,mDAGA,IAAMwG,EAAoC,CAAC,mBAAoB,iBAAkB,aAAc,eAEzFC,EAAwB,SAACt1R,GAAU,IAejC,EAbC/sC,EACuB+sC,EADvB/sC,YAAaD,EACUgtC,EADVhtC,mBAAoBxkB,EACVwxD,EADUxxD,QAASsoR,EACnB92N,EADmB82N,WAAY/qG,EAC/B/rH,EAD+B+rH,uBAAwBpqN,EACvDq+F,EADuDr+F,iBACnFqtN,EAA4BhvH,EAA5BgvH,yBAEKh0N,EAAyBi4D,EAAzBj4D,OAAQs6E,EAAiBriB,EAAjBqiB,cACTmqN,GAAY,IAAA9qJ,QAAO,MANc,GAOe,IAAAkB,WAAS,GAPxB,qBAOhC0/O,EAPgC,KAOXC,EAPW,KAQjC5lX,GAAS,IAAAC,oBAERo7F,GAAc,IAAAF,2BAA0B/vG,EAAQs6E,GAAhD21B,WAEDU,EAD2C,cAA9B,IAAA76G,4BACY,EAAAsiC,4BAA4BvkC,SAASmM,GAG9Dy6X,GAAA,gCAAqB,WAAOtpK,GAAP,0GAGlBnxN,EAA0CmxN,EAA1CnxN,OAAQyvG,EAAkC0hH,EAAlC1hH,SAAUiC,EAAwBy/G,EAAxBz/G,SAAUT,EAAckgH,EAAdlgH,aAE7BN,GAAY,EAAA17E,yBAAyBphC,SAASmM,IAAYixG,IAAgBspR,EALvD,oBAMvBC,GAAuB,IACnB7pR,EAPmB,uBAQf+pR,EAAazqR,EAAWvvG,QAAO,SAAAqwG,GAAA,OAAU,EAAA97E,yBAAyBphC,SAASk9G,EAAO/wG,YACzE7R,QAAUusY,EAAWvsY,OAAS,GATxB,uBAUnB2tU,EAAW4+D,GAVQ,mBAWZ,GAXY,kCAaD,gBAAX16X,EAbY,2BAcC,IAAA+vG,2BAA0B,WAAYz1B,GAArD41B,EAdc,EAcdA,YACP4rN,EAAW5rN,GAfU,mBAgBd,GAhBc,2CAsBzBl4C,EAAmB,CACjBoyC,QAAQ,EACR9vB,cAAe,GACf89P,cAAep4U,IAGb26X,EAAa36X,EACb0iF,EAAiB,MAEjBiuB,IAAa,IAAAzhF,oBAAmBta,KAAY,EAAAua,gBAAgBC,IAAmB,yBAAXpvB,GAAgD,gBAAXA,IAC3G26X,EAAa,eACPxpR,EAAav8F,EAAOgb,wBAAwB+qW,MAE1Ch8S,EAAW/pE,EAAOo9E,sBAAsB,CAAC98E,KAAMi8F,GAAa,KAAM,KAAMA,EAAWtxF,eAC1E,yBAAX7f,GACIooJ,EAAezpE,EAASn5E,MAAK,SAAA6T,GACjC,OAAOA,EAAQnE,KAAK1I,SAAb,WAAsC6M,EAAQnE,KAAK1I,SAAb,UAAmC3Y,SAAS,YAGzF6uF,EAAiB0lE,EAAalzI,MAGbi8F,EAAWtxF,eAAiBsxF,EAAWtxF,cAAcrT,SAAzB,WAAkD2kG,EAAWtxF,cAAcrT,SAAzB,UAA+C3Y,SAAS,QAEjJ+mY,EAAcj8S,EAASn5E,MAAK,SAAA6T,GAChC,OAAQA,EAAQnE,KAAK1I,SAAb,YAAuC6M,EAAQnE,KAAK1I,SAAb,UAAmC3Y,SAAS,YAG3F6uF,EAAiBk4S,EAAY1lX,SAOnCu6F,EAzDqB,wBA0DvB,aAAiB,cAAc,EAAO,KAAM,GAC1C,CAACqF,aAAcpD,EAAUhrG,WAAYC,IA3DhB,mBA4DhB,GA5DgB,aA+DnB2P,EAAe1B,EAAOgb,wBAAwB+qW,KAC/BrkX,EAAaw1E,sBAAuBuuS,EAAkCxmY,SAAS8mY,GAhE3E,wBAiEvB,IAAAr6W,gBAjEuB,WAkEjB,IAAA+rE,6BAA4B/1E,GAlEX,SAmEvB,IAAA01E,iBAnEuB,QAuEzB+kI,EAAuBruI,EAAgBi4S,GAvEd,mDAArB,6CAmFF3iE,EAAuC,KAAnBxkR,EAAQrlD,OAAgB,CAACy1I,SAAS,SAAW,KAIrE,OAFAlyI,QAAQ4B,IAAI,UAAWkgD,GAGrB,+BAAKzlC,MAAOiqT,GACV,+BAAK1zO,UAAU,uBACZ9wC,EAAQhyC,KAAI,SAAAuvG,GACX,IAAM8pR,EAAiBlqR,GAAY,EAAA17E,yBAAyBphC,SAASk9G,EAAO/wG,QAC5E,OACE,kCAAQ9O,IAAK6/G,EAAO/wG,OACZ05I,IAAKmhP,EAAiBp2F,EAAY,KAClCwzB,YAAa,kBArBX,SAAClnN,GACnB,GAAIijH,EAA0B,CAC5B,IAAM19M,EAAe1B,EAAOgb,wBAAwBmhF,EAAO/wG,QACvDsW,GAAgBA,EAAauJ,eAAiBvJ,EAAauJ,cAAc0gE,OAC3EyzI,EAAyB19M,EAAauJ,cAAc0gE,MAAMO,OAAQiwB,EAAO/wG,SAiB1Ci4T,CAAYlnN,IAC/BylE,QAAS,kBAAMikN,EAAmB1pR,IAClCzsB,UAAW,6DACNysB,EAAO/wG,SAAW+wG,EAAO/wG,OAAOnM,SAAS,UAAY,SAAWk9G,EAAO/wG,UAC/D,qBAAlB+wG,EAAO/wG,OACN,+BAAKskF,UAAU,sBACb,+BAAKA,UAAU,gCACf,+BAAKA,UAAU,yBAEf,KACJ,gCAAMA,UAAU,oCACd,4CAAkB5iF,GAAIqvG,EAAO37F,sBAU7CklX,EAAsB1+O,UAAY,CAChCm1E,uBAAwB,UAAUt4C,KAClCqjJ,WAAY,UAAUrjJ,MAGxB,IAgBMuR,EAAqB,CACzBhyH,yC,WAGa,IAAAypF,aACb,IAAAwoC,aACE,IAAAzkF,UAtBoB,SAACxzG,GAOvB,MAAO,CACLimE,YAPoBjmE,EAAM0zG,UAArBztC,YAQL99D,SAPiBnI,EAAMgR,YAAlB7I,SAQL05F,WAPmB7hG,EAAMqY,YAApBwpF,WAQLhiF,eAPqB7f,EAAMqN,gBAQ3BsH,iBAPyB3U,EAAM4U,YAA1BD,oBAiBoBqjL,EAAzB,CAA6CswM,M,0HC3LjD,O,OACA,O,IACA,O,IACA,OAEA,QAUA,Q,IAKA,QACA,Q,IAEA,QACA,Q,IACA,Q,IACA,QACA,SACA,Q,IACA,QACA,QACA,Q,IACA,Q,uDAEMjQ,E,yOAEJz2H,gBAAkB,SAACt5J,GAIjB,GAFA,EAAK0K,MAAMqxH,gBAAgB/7H,GAEvBxnG,SAASuzN,aAAc,CAEzB,GAAI,EAAK8zK,oBAAoBrnY,SAASuzN,aAAc/rH,GAClD,OAAO,EAGT,IAAM8/R,EAAgBtnY,SAASuzN,aAAarmN,OAE5C,GAAIo6X,EAAe,CACc,IAA3B,EAAK35X,MAAMoxN,aACb,EAAK76C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzB8tK,aAAc,KACb,WACD,EAAK0L,sBACL,EAAK5wH,aACL/Y,YAAW,YACT,aAAEt1F,UAAUupG,GAAG,QAAS,EAAKm7E,qBAC5B,MAIP,IACMlhK,GADS,IAAAzB,oBACa+a,wBAAwBwqW,GAChD9jX,GACF,EAAKw7M,0BAA0Bx7M,EAAaf,SAAUe,EAAalc,YAAYmb,a,EAOvF4kX,oBAAsB,SAAC9zK,EAAc/rH,GACnC,GAAI,EAAK0K,MAAM/sC,YAAYmyC,OAIzB,OAHA,EAAKpF,MAAMhtC,mBAAmB,CAC5BoyC,QAAQ,KAEH,EAET,IAAKi8G,EACH,OAAO,EARoC,IAWtCn2G,GAAe,IAAAH,2BAA0Bs2G,EAAarmN,OAAQqmN,EAAa/rI,eAA3E41B,YACP,OAAKA,EAAY/hH,OAAS,KAAQk4N,EAAarmN,QAAkC,gBAAxBqmN,EAAarmN,SACpE,EAAKglG,MAAMhtC,mBAAmB,CAC5BoyC,QAAQ,EACRpqG,OAAQqmN,EAAarmN,OACrBs6E,cAAe+rI,EAAa/rI,cAC5BllD,SAAU,CACRthB,EAAGwmF,EAAM7mF,QACTM,EAAGumF,EAAMzmF,YAGN,KACyB,IAAvBq8F,EAAY/hH,SAAgB+hH,EAAY,GAAGT,aACpD,aAAiB,cAAc,EAAO,KAAM,GAC1C,CAACqF,aAAc5E,EAAYwB,SAAUhrG,WAAY,EAAKs+F,MAAMr+F,oBACvD,I,EAKXoqN,uBAAyB,SAAC7lC,EAAgBlrL,GACxC,IAAM4U,GAAS,IAAAC,oBACXq8M,EAAgB,GAAIC,EAAgB,GAClC76M,EAAe1B,EAAOgb,wBAAwB5vB,GAChDsW,IACF66M,EAAgB76M,EAAaf,SAC7B27M,EAAgB56M,EAAalc,YAAYmb,UAItC47M,GAQL,EAAKn6C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAKllH,aACL,EAAK2wH,0BAA0BX,EAAeD,IAC9C,aAAEp+N,UAAUupG,GAAG,QAAS,EAAKm7E,mBAC7B,EAAKu6C,sBACD7mC,IAAmBkmC,cACrBlmC,EAAe/qF,kB,EAKrBygD,0BAA4B,SAACj2E,GAAuD,IAAjDt8D,EAAiD,wDAA3Be,EAA2B,aAAVkrF,EAAU,aAElF,GAAI,EAAK75F,MAAM4yN,qBACV,EAAK5yN,MAAM4yN,oBAAoBn+M,KAAK2K,eACpCve,MAAMC,QAAQ,EAAKd,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,UACd,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,IACtElL,MAAMC,QAAQopE,EAAKz1D,KAAK1I,SAAV,UACb,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,KAAOm+D,EAAKz1D,KAAK1I,SAAV,QAA8B,GAE/G,OADA,EAAK+mP,mBAAmB5oL,EAAM2vB,IACvB,EAGT,IAAM1lF,GAAS,IAAAC,oBACf,EAAKu/M,0BAA0BzpJ,GAE/B,IAAMsuT,EAAoB,EAAK1lI,mBAAmB5oL,EAAM2vB,GACxD,IAAI2+R,EAAJ,CAIA,IAAMzO,EAAmB,CAAC,cAAe,qBAAsB,iBAAkB,oBAWjF,IAVIA,EAAiB32X,SAAS82E,EAAKz1D,KAAKlV,SAE7B,EAAKS,MAAMgxN,sBAAiE,qBAAzC,EAAKhxN,MAAMgxN,qBAAqBz1M,MACzE2uD,EAAKz1D,KAAK89N,aAAgB,EAAKvyO,MAAMgxN,qBAAqBv8M,KAAKs0H,YAAc7+D,EAAKz1D,KAAK89N,cAF1F,EAAK9f,gBASHvoJ,EAAKzvB,kBAAmB,CAC1B,IAAIw1M,EAAoB,GACxB,OAAQ/lL,EAAKz1D,KAAKlV,QAChB,IAAK,gBACH0wP,EAAoB,OACpB,MACF,IAAK,OACHA,EAAoB,SACpB,MACF,IAAK,aACHA,EAAoB,aACpB,MACF,IAAK,cACHA,EAA+C,eAA3B/lL,EAAKzvB,kBAAqC,aAAe,eAKjF,EAAKu1M,0BAA0B9lL,EAAM+lL,QAYhC,GAAyB,WAArB/lL,EAAKz1D,KAAKlV,OAAqB,CACxC,IAAM4gH,EAAShsG,EAAOsD,MAAM,EAAAqsH,OAAO7iI,IAC7Bk7R,EAAiBh8K,EAAOg8K,eAAejyN,EAAKz1D,MAC3B,SAAnB0nR,GAAgD,SAAnBA,EAC/B,EAAKhsC,oBAAoB,SAAUjmL,EAAMt8D,GAEzC,EAAK4hP,UAAUtlL,EAAMt8D,OAEO,mBAArBs8D,EAAKz1D,KAAKlV,QAcnB,EAAKiwP,UAAUtlL,EAAMt8D,GACjB,EAAK22F,MAAMx5F,qBACT,EAAKw5F,MAAMx5F,mBAAmBonP,iBAAoB,EAAK5tJ,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,aAElHU,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,QAGf,yBAArBy1D,EAAKz1D,KAAKlV,QACdoP,GAAoBu7D,EAAKz1D,KAAKK,SAAS1hB,SAAS,eACnD,EAAK8+P,+BAA+BhoL,EAAKz1D,MAE3C,EAAK+6O,UAAUtlL,EAAMt8D,IAErB,EAAK4hP,UAAUtlL,EAAMt8D,GAGnB,EAAK5N,MAAMgxN,sBACb,EAAKzsH,MAAMr4E,sB,gGAKN,WACD/X,GAAS,IAAAC,oBAETsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KAEvF4iK,EAAcljK,EAAOo9E,wBAIvB06R,GAA6B,EAE7Bn1M,GAAiBA,EAAcq4I,6BAC9Br4I,EAAcq4I,gCACjB88D,GAA8BhzX,KAAKsrG,MAAMwwC,qCAG3C,IAAMs1O,EAAiBpxX,KAAKk4P,2BATV,GAYZ57B,EAAsB,CAAC,EAAA59K,YAAYG,OAAQ,EAAAH,YAAYE,OAAQ,EAAAF,YAAYI,YAAa,EAAAJ,YAAY3pB,WAE1G,OACE,wCACE,+BAAK61D,WAAW,aAAW,cAAe,CAAC,yBAA0B5qF,KAAK+G,MAAMwwN,kBAC9E,+BACE3sI,WAAW,aAAW,MAAO,CAAC,cAAe5qF,KAAK+G,MAAMwwN,gBAAiB,QAAUv3N,KAAK+G,MAAMoxN,cAC9F,+BAAKvtI,UAAU,cAAco1D,IAAK,SAACkkI,GAAD,OAAU,EAAK1nD,WAAa0nD,IAC5D,+BAAKt5L,UAAU,wBACb,+BAAKA,UAAU,6BACZ5qF,KAAK6wD,SAtBF,EAAsB,IAWrB,EAW8C4sH,EAAYI,IAEjE,kCAAQjzF,UAAU,6BAA6BkyF,QAAS98K,KAAKy4N,mBAE9Dz4N,KAAKq8N,sBAAsBC,GAC3B02J,EAA6B,KAC5B,+BAAKpoS,UAAU,sBAAsBymS,eAAgBrxX,KAAKy6N,yBACxD,mCAAkBr8C,YAAaA,EACbM,SAAS,EACThuE,OAAQ1wG,KAAK+G,MAAMwwN,eACnB95C,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,2BAYjDj9K,KAAKsrG,MAAM7kF,SAAW,mCAAsBN,cAAenmB,KAAKsrG,MAAMnlF,gBAAmB,KACzFirW,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,MAEN,mCAAgBs6C,uBAAwBr3N,KAAKq3N,uBAC7BiD,yBAA0Bt6N,KAAKsrG,MAAMgvH,gC,cA4BvDhqC,EAAqB,CACzB91C,8CACAF,kDACAI,oDACAK,oDACAQ,sDACAE,wEACAt3H,oDACAyB,oEACA+qI,sDACAF,gDACA5V,4CACAkC,wDACA9pH,sCACAqrC,yC,WAGa,IAAAwtC,UAtCS,SAACxzG,GAAU,IAC1BimE,EAAejmE,EAAM0zG,UAArBztC,YAEP,MAAO,CACLqhK,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzCX,SAAUnuB,EAAMouB,wBAAwBD,SACxCuD,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxComI,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D8U,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5CF,2BAA4Bp4J,EAAMyvO,cAAcr3E,2BAChDzjJ,iBAAkB3U,EAAM4U,YAAYD,iBACpC+vI,qBAAsB1kJ,EAAMu1I,gBAAgBmP,qBAC5Cz+E,cACApmD,eAAgB7f,EAAMqN,mBAqBc2qL,EAAzB,CAA6CqgM,I,mJC9V5D,QACA,SACA,Q,IACA,O,IACA,Q,uDAEqB3nB,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAxlW,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WAER2C,GAAS,aAAU3C,EAAU6M,WAC/Bo8H,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAO/E,OANKsmI,IACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ3C,EAAU6M,WAC/DxQ,KAAK+e,aAAahqB,KAAK63I,IAEzBA,EAAYlsI,UAAY,kBAAM,GAC9BksI,EAAYwD,KAAKzsI,IACV,I,uCAIP,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,Q,2CAIzC,OAAO,I,6DA3BFgI,GAAK,Q,aADOghW,G,+ICNrB,SACA,Q,IACA,O,IACA,S,uDAEqBrvJ,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAn2M,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,KACHy/H,EAAkB,eAClBC,YAKJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,aAAc3D,Q,2CAI9C,OAAO,I,6DAxCFgI,GAAK,a,aADO2xM,G,4MCHAkrD,E,YACnB,WAAY/lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIkhQ,O,GAVtC,O,4BAEqBA,G,yJCFrB,SACA,QACA,SAEA,S,IACA,O,uDAEqBtiB,G,gBAGnB,cAAc,iGACN,GAAM,EAAO,EAAA/+O,aAAaC,UADpB,OAEZ,EAAK6C,OAAS,eACd,EAAK/C,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKH,YAAc,mCACnB,EAAKhY,cAAL,iBANY,E,qEASTC,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,OACL,IAAK,QACHy/H,EAAkB,YAClBC,EAAmBg+N,EAGvB,QAAIj+N,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,U,aAvCpCgI,GAAK,Q,aADOu6O,E,IA6Cf2rH,E,YACJ,WAAYpvR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,mCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GACH,sGAAmBA,EAAW,IAAIuqW,O,uKC9DtC,SACA,Q,IACA,O,IAEA,M,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBrsH,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAr+O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKnY,cAAgB,GACrB,EAAKgY,YAAc,2BAGnB,EAAK+4O,SAAW,KAChB,EAAKC,UAAY,KACjB,EAAKC,WAAa,KAClB,EAAKC,UAAY,KACjB,EAAK7sI,QAAU,KACf,EAAKzzE,WAAa,KAdN,E,qEAiBT3wC,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACHy/H,EAAkB,WAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,UACHD,EAAkB,UAClBC,YAeJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,Q,2CAIzC,OAAO,I,iCAGmB,WAAnBuyK,IAAmB,yDAC1B,OAAOvyK,KAAK+e,aACT/X,QAAO,SAAAiqE,GAAA,OAAQ,EAAKwhG,kBAAkBxhG,EAAMshG,MAC5CzqK,KAAI,SAAAoH,GAAA,OAAK,IAAI,EAAJ,QAAyBA,EAAE2M,SAAU3M,Q,6FAO1B+lP,GAAmB,IACnChoP,EAAoB,UAAM9K,WAAW+K,YAArCD,iBACPjN,KAAK+e,aAAa3gB,SAAQ,SAAAwuI,GACpBA,EAAYtmI,SAAW2uP,EAAkB3uP,QAAUsmI,EAAYO,8BACjB,gBAA5CP,EAAYO,6BACdP,EAAYlmD,oBAAqB,EACjCkmD,EAAYrmD,WAAWt5E,IAAoB,GACjC2/H,EAAYsoH,gBACtBtoH,EAAYO,4BAA4BC,4B,aAlGzCplI,GAAK,Q,aADO65O,G,4MCTAG,E,YACnB,WAAYljK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,qCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIq+O,O,GAdtC,O,4BAEqBA,G,4MCAAD,E,YACnB,WAAYjjK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,sCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIo+O,O,GAdtC,O,4BAEqBA,G,4MCAAgjB,E,YACnB,WAAYjmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,wCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIohQ,O,GAdtC,O,4BAEqBA,G,4MCAA0kG,E,YACnB,WAAY3qR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAI8lW,O,GAdtC,O,4BAEqBA,G,wLCAA3nH,E,YACnB,WAAYhjK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,yCACnB,EAAK7N,gBAAiB,EALH,E,4BAHvB,O,4BAEqBi0O,G,+ICFrB,SACA,Q,IACA,O,IACA,S,IACA,S,uDAEqBs/I,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAA59X,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,YAChB,EAAKH,YAAc,iCACnB,EAAKy0H,iBAAkB,EANX,E,qEASTxsI,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACL,IAAK,YACHy/H,EAAkB,YAClBC,YACA,MACF,IAAK,YACHD,EAAkB,YAClBC,YAMJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,YAAa3D,Q,2CAI7C,OAAO,I,6DA/CFgI,GAAK,Y,aADOo5X,G,4MCJA5mY,E,YACnB,WAAYskF,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,iCAJA,E,qEAOhB/X,GACH,sGAAmBA,EAAW,IAAInJ,O,GAXtC,O,4BAEqBA,G,wLCAA6mY,E,YACnB,WAAYviT,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKoV,YAAc,YACnB,EAAKA,YAAc,iCAEnB,EAAKG,SAAW,YAChB,EAAKoqE,oBAAqB,EAC1B,EAAKjD,eAAgB,EARF,E,4BAHvB,O,4BAEqBq+S,G,+ICFrB,SACA,QACA,Q,IAEA,S,IACA,SACA,S,mDAEA,IAAMlzB,EAAuB,SAAC31Q,EAAc41Q,GAC1C,OAAO51Q,EAAa1lF,SAAb,eAA0C0lF,EAAa1T,wBAAwB,gBAAiBspR,EAAiBt7V,SAAjB,gBAGnGu7V,EAAwB,SAACC,EAA0B3qW,GACvD,OAAK2qW,IAGD3qW,EAAUmF,oBAAsBwlW,EAAyBC,aAGzD5qW,EAAUmP,SAAV,gBACElL,MAAMC,QAAQlE,EAAUmP,SAAV,YACTnP,EAAUmP,SAAV,WAAiC7S,MAAK,SAAA6jF,GAC3C,OAAOwqR,EAAyB7yV,cAAgB7T,MAAMC,QAAQymW,EAAyB7yV,aAAaqoE,KAC/FwqR,EAAyB7yV,aAAaqoE,GAAY7jF,MAAK,SAAAoD,GAAA,OAAW8qW,EAAqB9qW,EAASM,SAGhG2qW,EAAyBruW,MAAK,SAAAoD,GAAA,OAAW8qW,EAAqB9qW,EAASM,SAM/D6+O,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAh/O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAL,iBAGA,EAAK+qW,OAAS,KARF,E,qEAWT9qW,GAAW,WAEZssI,EAAkB,GAClB4+N,EAAa,EACb3+N,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,QACL,IAAK,SACH,IAAK,IAAIjc,EAAI,EAAGA,GAAKA,EAALA,WAAiBA,IAAK,CACpC,IAAM+5W,EAA2BtuW,KAAK,QAAUzL,GAChD,GAAI85W,EAAsBC,EAA0B3qW,GAAY,CAC9DssI,EAAkB,QAAU17I,EAC5Bs6W,EAAat6W,EACb,OAGJ,MAEF,IAAK,aACH07I,EAAkB,aAClBC,YAIJ,QAAID,IACGjwI,KAAKiwI,KACoB,UAAxBtsI,EAAU6M,WAAiD,WAAxB7M,EAAU6M,WAC/CxQ,KAAKiwI,GAAmB,IAAI,EAAJ,SAAU,EAAM4+N,GACxC7uW,KAAKiwI,GAAiBs+N,UAAY5qW,EAAUmF,mBAE5C9I,KAAKiwI,GAAmB,IAAIC,GAAiB,GAE/ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,2CAMT,OAAO,I,6DAzDFqE,GAAK,U,aADOw6O,G,2IChCrB,S,IACA,Q,uDAEqBssH,E,YACnB,WAAYhwR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKoqE,oBAAqB,EAJP,E,+FAQnBjmF,KAAK8mF,mBAAqB9mF,KAAK8nF,0B,8CAGT,WAEhBiqI,EADS/xN,KAAKU,YAAYwa,OACFi1F,mBAAkB,GAAM,GAClDhC,EAAmB,GACjB4gQ,EAAoB/uW,KAAKygF,uBACzBuuR,EAAahvW,KAAK2hF,SAAS36E,QAAO,SAAAioW,GAAA,OAAcA,EAAWtuR,gCAAgCouR,MAiBjG,OAhBAh9I,EAAe3zN,SAAQ,SAAAgI,GAChBA,EAASC,cAAeD,EAASwW,aAAakmE,UAAa18E,EAASC,YAAYyM,SAArB,iBAC1D1M,EAASE,SAAW,EAAKA,QAG/B0oW,EAAW5wW,SAAQ,SAAA6wW,IACb,aAAQA,EAAWn8V,SAAX,gBAAwC1M,EAASC,YAAYyM,SAArB,mBAC/C,aAAQm8V,EAAWn8V,SAAX,KAA6B1M,EAASC,YAAYyM,SAArB,QACpCq7F,EAAiBluG,MAAK,SAAAivW,GACxB,OAAO,aAAQD,EAAWn8V,SAAX,gBAAwCo8V,EAAoBp8V,SAApB,mBAClD,aAAQm8V,EAAWn8V,SAAX,KAA6Bo8V,EAAoBp8V,SAApB,UAE5Cq7F,EAAiBp5G,KAAKk6W,SAIrB9gQ,M,iCAlCU2gQ,G,4MCFAK,E,YACnB,WAAYrwR,EAAS+vR,IAAY,gGACzB/vR,IADyB,OAE/B,EAAK+vR,WAAaA,EAClB,EAAKvoW,OAAS,SAAWuoW,EACzB,EAAKhzV,SAAW,SAAWgzV,EAJI,E,qEAM5BlrW,GACH,sGAAmBA,EAAW,IAAIwrW,GAAM,EAAOnvW,KAAK6uW,iB,GATxD,O,4BACqBM,G,8HCDrB,MACA,O,IACA,O,IACA,OAEA,QAMA,Q,IACA,Q,IACA,QACA,Q,IAEA,QACA,Q,IACA,Q,IAEA,QACA,S,uDAEMwhB,E,yOAEJz2H,gBAAkB,SAACt5J,GAKjB,GAFA,EAAK0K,MAAMqxH,gBAAgB/7H,GAEvBxnG,SAASuzN,aAAc,CAEzB,IAAM+oC,EAAc,UAAE7P,sBAAsBzsP,SAASuzN,cAIrD,GAAI+oC,EAAa,CACf,GAAIA,EAAY5P,oBAAsB,EAAK/+O,MAAMwwN,eAS/C,OARI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KAGhB,EAAKkkK,gBAAgBn7H,EAAa90J,IAE7B,EAC6B,IAA3B,EAAK75F,MAAMoxN,aACpB,EAAK76C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAK0L,sBACL,EAAK5wH,aACL/Y,YAAW,YACT,aAAEt1F,UAAUupG,GAAG,QAAS,EAAKm7E,qBAC5B,MAIP43E,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,QAC9D,EAAK6+N,0BAA0Bs9B,M,EAQzCm7H,gBAAkB,SAAC54J,EAAiBr3H,GAClC,IAAI67N,EAAqB,GAgBzB,OAf0C,gBAAtCxkG,EAAgB6tB,oBAOlB22E,EAAqB,CAAC,EAAG,EAAG,EAAG,EAAG,IAQ5BxkG,EAAgB6tB,mBACtB,IAAK,0BACH7tB,EAAkB,aAClB,MACF,IAAK,oBACHA,EAAkB,oBAClB,MACF,IAAK,mBACHA,EAAkB,mBAClB,MACF,IAAK,yBAEHA,EAAkB,yBAClB,MAEF,IAAK,0BAEHA,EAAkB,0BAClB,MAEF,IAAK,oBAEHA,EAAkB,oBAClB,MAEF,IAAK,uBACHA,EAAkB,gBAKtB,IAAMx3N,GAAW,aAAEtI,QAAQwH,QAAU,IAEjCmyC,EAAOrxC,EAAW,MAAQmgG,EAAM7mF,QAAU,GAC1C7U,EAAMzE,EAAW,MAAQmgG,EAAMzmF,QAAU,GACzC03B,EAAQ,OAENwwR,EAAkB5F,EAAmBhoU,OAAS,EAAI,IAAM,IAE1D6tU,EAAmB,IAUvB,GATI7F,EAAmBhoU,OAAS,EAC9B6tU,EAAmB,IACV7F,EAAmBhoU,OAAS,IACrC6tU,EAAmB,MAEhB7hU,GAAaqxC,EAAO35C,OAAOwqD,WAAa0/Q,IAC3CvwR,EAAO,OACPD,EAAQ,IAELpxC,GAAayE,EAAM/M,OAAO+xD,YAAco4Q,EAAmB,CAC9D,IAAIC,EAAiB,GACjB9F,EAAmBhoU,OAAS,EAC9B8tU,EAAiB,IACR9F,EAAmBhoU,OAAS,IACrC8tU,EAAiB,KAEnBr9T,GAAYq9T,EAEd,EAAKjlJ,SAAS,CACZ26C,kBACAtL,aAAcvzN,SAASuzN,aACvBqtC,oBAAqB,CACnBloN,OACAD,QACA3sC,U,EAKNgiJ,0BAA4B,SAACj2E,GAA+B,IAAzBt8D,EAAyB,wDAC1D,EAAK+lN,0BAA0BzpJ,GAC/B,EAAKslL,UAAUtlL,EAAMt8D,GAErB,IAAMm8W,EAAmB,CAAC,wBAAyB,eAC/CA,EAAiB32X,SAAS82E,EAAKz1D,KAAKlV,SACtC,EAAKkzN,gBAGH,EAAKzyN,MAAMgxN,sBACb,EAAKzsH,MAAMipH,a,gGAIN,WACDr5M,GAAS,IAAAC,oBAETsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KAEvF4iK,EAAcljK,EAAOo9E,wBAIvB06R,GAA6B,EAE7Bn1M,GAAiBA,EAAcq4I,6BAC9Br4I,EAAcq4I,gCACjB88D,GAA8BhzX,KAAKsrG,MAAMwwC,qCAG3C,IAAMs1O,EAAiBpxX,KAAKk4P,2BATV,GAYZ57B,EAAsB,CAAC,EAAA59K,YAAYG,OAAQ,EAAAH,YAAYE,OAAQ,EAAAF,YAAYI,aAEjF,OACE,+BAAK8rC,WAAW,aAAW,cAAe,CAAC,yBAA0B5qF,KAAK+G,MAAMwwN,kBAC9E,+BACE3sI,WAAW,aAAW,MAAO,CAAC,cAAe5qF,KAAK+G,MAAMwwN,gBAAiB,QAAUv3N,KAAK+G,MAAMoxN,cAC9F,+BAAKvtI,UAAU,cAAco1D,IAAK,SAACkkI,GAAD,OAAU,EAAK1nD,WAAa0nD,IAC5D,+BAAKt5L,UAAU,wBACb,+BAAKA,UAAU,6BACZ5qF,KAAK6wD,SArBA,EAAsB,IAWrB,EAU4C4sH,EAAYI,IAEjE,kCAAQjzF,UAAU,6BAA6BkyF,QAAS98K,KAAKy4N,mBAE9Dz4N,KAAKq8N,sBAAsBC,GAC3B02J,EAA6B,KAC5B,+BAAKpoS,UAAU,sBAAsBymS,eAAgBrxX,KAAKy6N,yBACxD,mCAAkBr8C,YAAaA,EACbM,SAAS,EACThuE,OAAQ1wG,KAAK+G,MAAMwwN,eACnB95C,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,0BAW/Cj9K,KAAK+G,MAAMkxN,kBAAoBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACvD,mCAAmBgiO,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzBqtC,oBAAqBh6P,KAAK+G,MAAMizP,oBAChC3iC,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,iBACvBl+B,yBAA0Bt6N,KAAKsrG,MAAMgvH,2BAExD,MAEL82J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,U,cAoBNuT,EAAqB,CACzB91C,8CACAF,kDACAI,oDACAK,oDACAQ,sDACAE,wEACAt3H,oDACAyB,oEACA+qI,sDACAF,gDACA5V,6C,WAGa,IAAA/uC,UA3BS,SAACxzG,GAAD,MAAY,CAClCsnO,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzC4C,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxComI,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D8U,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5CF,2BAA4Bp4J,EAAMyvO,cAAcr3E,2BAChDzjJ,iBAAkB3U,EAAM4U,YAAYD,oBAiBEqjL,EAAzB,CAA6CqgM,I,8HC/Q5D,MACA,OACA,O,IAEA,QAEA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,QAEA,QACA,Q,IAOA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QAEA,Q,uDAEMwJ,E,yOAMJjgI,gBAAkB,SAACt5J,GAOjB,GAJKzoG,OAAOqmO,WAAc,EAAKz3N,MAAMwwN,gBAAmB,EAAKxwN,MAAMkxN,iBACjE,EAAK3sH,MAAMqxH,gBAAgB/7H,GAGzBxnG,SAASuzN,eAAiBx0N,OAAOqmO,UAAW,CAE9C,IAAMk3B,EAAc,UAAE7P,sBAAsBzsP,SAASuzN,cACrD,GAAI+oC,EAAa,CACf,GAAIA,EAAY5P,oBAAsB,EAAK/+O,MAAMwwN,eAAgB,CAC/D,GAAI,EAAKxwN,MAAMkxN,gBACb,EAAK36C,SAAS,CACZ26C,iBAAiB,EACjBtL,aAAc,KAEhBvzN,SAAS8pG,oBAAoB,QAAS,EAAK66H,2BACtC,CACL,IAAI9F,EAAkB,GAEhB6lK,EAAsB,WAC1B,IAEMlmK,GAFS,IAAAz8M,oBACYqD,MAAP,MACkB/B,WAAW3Q,MAAK,SAAA4Q,GAAA,MAAmC,eAAxBA,EAAQlB,KAAKlV,UAC9E,EAAKysN,2BAA2B6E,IAGlC,OAAQ89B,EAAY5P,mBAClB,IAAK,0BACH7tB,EAAkB,aAClB,MACF,IAAK,oBACHA,EAAkB,oBAClB,MACF,IAAK,mBACHA,EAAkB,mBAClB,MACF,IAAK,yBACH6lK,IACA7lK,EAAkB,yBAClB,MAEF,IAAK,0BACH6lK,IACA7lK,EAAkB,0BAClB,MAEF,IAAK,oBACH6lK,IACA7lK,EAAkB,oBAClB,MAEF,IAAK,uBACHA,EAAkB,gBAKtB,EAAK36C,SAAS,CACZ26C,gBAAiBA,GAAmBy9B,EACpC/oC,aAAcvzN,SAASuzN,eACtB,WACGsL,GACFvpI,YAAW,WACTt1F,SAASytD,iBAAiB,QAAS,EAAKk3K,yBACvC,MAIT,OAAO,EAC6B,IAA3B,EAAKh3N,MAAMoxN,cACfhgO,OAAOsmO,kBACV,EAAKnzH,MAAMozH,gBAAgBg3B,EAAYv7B,OAASu7B,EAAYn8P,QAAUm8P,GAAap5P,cAAcqC,QAAQ,KAAM,MAEjH,EAAKk/N,kBAGP63B,EAAYv7B,MACR,EAAK/B,0BAA0Bs9B,EAAYv7B,MAAOu7B,EAAYn8P,QAAQ,GACtE,EAAK6+N,0BAA0Bs9B,M,EAQzCxuG,0BAA4B,SAACj2E,GAA+B,IAAzBt8D,EAAyB,yDAE7B,SAAzBxc,OAAO2B,SAAS6hL,MAAmBviL,SAASC,SAASC,YACvDtB,QAAQ4B,IAAI,OAAQq3E,GAEtB,EAAKslL,UAAUtlL,EAAMt8D,GAErB,EAAK22F,MAAMplF,iBAAiB+qD,EAAKz1D,MAEjC,IAAM+nN,EAAc,EAAKx8N,MAAM4yN,oBAC3B,EAAK5yN,MAAMgxN,qBAAqBz1M,KAAO,IAAM,EAAKvb,MAAM4yN,oBAAoBr3M,KAC5E,EAAKvb,MAAMgxN,qBAAqBz1M,KAE/BnqB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe6E,EAAYjnO,cAAcqC,QAAQ,KAAM,MAGhE,EAAKoI,MAAMgxN,sBACb,EAAKzsH,MAAMipH,YAEY,gBAArBtjJ,EAAKz1D,KAAKlV,QAA6B2qE,EAAKz1D,KAAK1I,SAAV,QACzC,EAAKw4F,MAAM6vC,2BAA2B,O,EAI1Cu+E,mBAAqB,SAACo+B,GAAqD,IAAlCt8G,EAAkC,uDAAT,KAC1Do+E,EAAck+B,EAAkBt8O,KAChCq+M,EAA4BD,EAAYtzN,OAe9C,GAdAszN,EAAYl5N,YAAYg5N,mBAAmBE,GAC3C,EAAKt8C,SAAS,CACZq8C,oBAAqBm+B,EACrB/+B,oBAAqBa,EAAYxnI,oBACjC4mI,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAK+5I,qBACL,EAAKjE,yBACL,EAAKhH,2BAA2B+kC,EAAmB,0BAGrD,EAAK99B,8BAA8B89B,IAE9B3/P,OAAOsmO,iBAAkB,CAC5B,IAAM8E,EAAc,EAAKx8N,MAAMgxN,qBAAqBz1M,KAAO,IAAMw1O,EAAkBx1O,KAChFhmB,cAAcqC,QAAQ,KAAM,KAC/B,EAAK2sG,MAAMozH,eAAe6E,GAE5B,EAAKlL,oBAAoBy/B,GAEzB,EAAK79B,wCAAwCJ,EAA2Br+E,I,EAI1E8jF,sBAAwB,WACtB,EAAKh0H,MAAMipH,YACX,EAAKkJ,qB,iHAnJmB7+C,GACxB5+K,KAAK08N,2BAA2B99C,K,+BAsJhC,IAAM1jK,GAAS,IAAAC,oBACTsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KACvFu6S,EAAgBl4I,GAAiBJ,EACjCW,EAAcljK,EAAOo9E,wBACrBlG,EAAsB2jO,GAAiBA,EAAc3jO,oBAOvD2gC,GAAY,EACZhqC,EAAe,GACf/oF,KAAKsrG,MAAMx5F,qBACT9R,KAAKsrG,MAAMx5F,mBAAmBonP,iBAAoBl5P,KAAKsrG,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,YACpHhV,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAUg/H,GAAiBA,EAAc6qL,cAAgB7qL,EAAczrF,sBACjH2gC,GAAY,EACZhqC,EAAe/oF,KAAK+G,MAAM/G,KAAKw7N,wBAAwBx7N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,UAG7F,IAAMq7E,EAAW3hF,KAAKy0B,YAAYvZ,GAE5Bk2W,EAAiBpxX,KAAKk4P,0BAA0BnlI,GAEhD4nG,EAAcl9C,GAAoC,kBAAtBA,EAAWn3K,QAA8Bm3K,EAAWrrF,qBAChFyrF,IAAkB79K,KAAKqzN,WAAWx1C,IAA2C,gBAAzBA,EAAcv3K,QACxC,gCAAzBu3K,EAAcv3K,SAA6Cu3K,EAAczrF,oBAE1E+sI,EAA2B42F,GAAiB,UAAgBtiH,yBAChEzzM,KAAKsrG,MAAMt1F,aAAc,WAAY+/S,EAAe/1T,KAAKsrG,MAAMnzF,gBAC/D1jB,OAEIynU,GAAmBl8T,KAAKsrG,MAAMx5F,mBAAmB8rB,aACjDigJ,GAAiBA,EAAc13J,eAAiB03J,EAAct3F,WAAWvmF,KAAKsrG,MAAMr+F,mBAAqB4wK,EAAcn3F,mBASzHssS,GAA6B,EAMjC,IACMv3L,EAAY5d,GADM,CAAC,cAAe,iBAAkB,yBACP1jL,SAAS0jL,EAAcv3K,QAEpE+lJ,EAAewxB,GADK,CAAC,aAAc,aAAc,4BACC1jL,SAAS0jL,EAAcv3K,QAE/E,OACE,+BAAKskF,UAAW,gBACb5qF,KAAK+G,MAAMwwN,gBAAkBv3N,KAAK+G,MAAMkxN,gBAAkB,2BAA6B,KACxF,+BAAKrtI,UAAW,QAAU5qF,KAAK+G,MAAMwwN,eAAiB,gBAAkB,KAEtE,+BAAK3sI,UAAW,cAAgB5qF,KAAK+G,MAAMk4N,mBAAqB,oCAAsC,KACpG,+BAAKr0I,UAAU,eACb,+BACEA,UAAW,qBACR5qF,KAAK+G,MAAM4yN,oBAAsB,kCAAoC,KACrEl+B,EAAY,oCAAsC,KAClDpvC,EAAe,uCAAyC,KAC1DrsJ,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKwnE,cACrE,mCAAgB07S,YAAa1+X,KAAK+G,MAAM23X,YACxBj+X,UAAU,EACVo9K,cAAe79K,KAAK+G,MAAM4yN,oBAAoBn+M,KAC9CmjX,uBAAwB3+X,KAAK2+X,yBAC3C,KACH9gN,GAAiB79K,KAAKqzN,WAAWx1C,IAA6C,gBAA3BA,EAAchiK,SAC9D,mCACAk8M,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjCoD,yBAA0Bn7N,KAAKm7N,2BAC/B,MAEN,mCAAyBhD,YAAan4N,KAAK+G,MAAMoxN,YACxBl0I,WAAYjkF,KAAK+G,MAAMk9E,WACvB2L,SAAU5vF,KAAKsrG,MAAM1b,SACrBmoI,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjChb,wBAAyB/8M,KAAK+8M,wBAC9B/tL,sBAAuBhvB,KAAKsrG,MAAMt8E,sBAClC6vM,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5B21M,wBAAyB3+N,KAAK2+N,2BAExDhE,GAAc36N,KAAK+G,MAAMgyN,qBAAuBoG,GAC7Cn/N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OACzC,mCAAiB20J,sBAAuBxzM,KAAKwzM,sBAC5Bb,gBAAgB,WAChBl1B,WAAYs4I,EACZt1T,UAAU,IAG3BT,KAAK+G,MAAM0jN,mBACT13F,GAAa/yH,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAC1Exb,KAAKu7N,sBAEPv7N,KAAKk/N,YAAYv9I,EAAmCqxS,EAA4Br4J,EAAYl9C,EAAYI,EAAeshD,EAA0B/sI,IAEtJ2gC,GAAc/yH,KAAK+G,MAAM0jN,mBAAsBkQ,GAC5C36N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAevC,KAdF,mCACEurK,eAAgBrhI,EAAa/hF,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAClD1uC,kBAAmBnqN,KAAK+G,MAAM40N,gBAC9BzR,qBAAsBlqN,KAAKy4P,mBAC3BpuC,kBAAmBrqN,KAAKqqN,kBACxBe,qBAAsBprN,KAAKorN,qBAC3B3qN,UAAU,EACV2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnC21M,aAAa,EACbN,kBAAmBzqN,KAAK+G,MAAM0jN,kBAC9BE,oBAAqB3qN,KAAK2qN,oBAC1BD,4BAA6B1qN,KAAK0qN,4BAClCJ,kBAAmBvhI,EAAalrF,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,oBAAoB2xG,IAGjD82D,EACxB,mCACEv1M,WAAYs4I,EACZt1T,UAAU,IAEV,KACHk6N,IAAe36N,KAAK+G,MAAMgyN,qBAAuBoG,EAChD,mCAAiB1hD,WAAYs4I,EAAepjH,gBAAgB,WAAWlyM,UAAU,IAC/E,KACHT,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAU7+C,KAAK+G,MAAMgxN,wBACxDhlG,GAAsCigQ,GAA+Br4J,GAAcwE,GACtF,mCAAkB/gD,YAAaA,EACbX,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,wBACxC,OAGPj9K,KAAK+G,MAAMkxN,kBAAoBj4N,KAAK+G,MAAMkxN,gBAAgBhiO,OACvD,mCAAmBgiO,gBAAiBj4N,KAAK+G,MAAMkxN,gBAC5BtL,aAAc3sN,KAAK+G,MAAM4lN,aACzB0K,uBAAwBr3N,KAAKq3N,uBAC7BmhC,iBAAkBx4P,KAAKw4P,iBACvBl+B,yBAA0Bt6N,KAAKsrG,MAAMgvH,2BAExD,KACH82J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,KACJ,mCACE/0K,GAAG,mBACHi8E,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9B7+B,UAAWl+K,KAAK+G,MAAM4yN,2B,cAmB1BrpC,EAAqB,CACzB91C,8CACAO,oDACA52H,oDACAyB,oEACA21H,sDACAE,wEACAN,wDACAN,6C,WAGa,IAAAkN,aACb,IAAAj8C,UAzBsB,SAACxzG,GAAD,MAAY,CAClC6f,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCshN,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzC6C,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCuxH,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D49D,cAAephN,EAAMyV,UAAU2rM,cAC/BzsM,iBAAkB3U,EAAM4U,YAAYD,oBAeXqjL,EAAzB,CAA6C6pM,K,8ECpX/C,aACA,QACA,QAEI37V,EAAU,GACd9pC,OAAOmc,KAAP,cAAwBzS,SAAQ,SAAA0lF,GAC9BtlD,EAAQslD,GAAc,CACpB4kC,mBAAoB,KACpBQ,cAAe,MACf3zF,cAAe,MAEf65R,mBAAoB,MACpBC,UAAW,MACXz0Q,WAAY,MACZ0tE,UAAW,MACXC,WAAY,KACZuvJ,cAAe,Q,UA0CJ,CACbt5O,UACAqnN,sBAd4B,SAACh/J,GAC7B,IACMjqE,GADS,IAAAzB,oBACa+a,wBAAwB2wD,EAAMvgF,QAC1D,OAAIsW,EACK,CACLrjB,OAAQqjB,EAAalc,YAAYmb,SACjCs+M,MAAOv9M,EAAaf,UAGjB,IAMP4pO,mBAzCyB,SAAC5+J,EAAO8wF,EAAe5vJ,GAChD,IACMw/O,GADmB,EAAA1tQ,kBAAoB,OAAS,KAChB,IAC/B83G,EAAU9qB,EAAV8qB,OAEP,IAAKA,EACH,OAAO,KAGT,IAEMomK,EAA+B,IAAfpmK,EAAOM,MAFV,EAGb+lK,EAA+B,IAAfrmK,EAAOO,MAHV,EAIb+lK,EAA+B,IAAftmK,EAAOS,MAJV,EAKb8lK,EAA+B,IAAfvmK,EAAOU,MALV,EAMfj/B,EAAKm0L,GAAax/O,EAAiBpoB,MAAQo4Q,EAAgB,KAC3DzkM,EAAKi0L,GAAax/O,EAAiBpoB,MAAQq4Q,EAAgB,KAC3D3kM,EAAKk0L,GAAax/O,EAAiBloB,OAASo4Q,EAAgB,KAC5D1kM,EAAKg0L,GAAax/O,EAAiBloB,OAASq4Q,EAAgB,KAChE,MAAO,CACLr/D,aAAc,CAAC,CAACzlI,EAAIC,GAAK,CAACC,EAAID,GAAK,CAACC,EAAIC,GAAK,CAACH,EAAIG,IAClD5zE,MAAQ2zE,EAAKF,EACbvzE,OAAQ0zE,EAAKF,M,mJC1CjB,QACA,SACA,Q,IACA,O,IACA,Q,uDAEqB21R,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAxlW,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WAER2C,GAAS,aAAU3C,EAAU6M,WAC/Bo8H,EAAc5sI,KAAK+e,aAAajT,MAAK,SAAA8gI,GAAA,OAAeA,EAAYtmI,SAAWA,KAO/E,OANKsmI,IACHA,EAAc,IAAI,EAAJ,SAAyB,EAAMtmI,EAAQ3C,EAAU6M,WAC/DxQ,KAAK+e,aAAahqB,KAAK63I,IAEzBA,EAAYlsI,UAAY,kBAAM,GAC9BksI,EAAYwD,KAAKzsI,IACV,I,uCAIP,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,Q,2CAIzC,OAAO,I,6DA3BFgI,GAAK,Q,aADOghW,G,+ICNrB,SACA,Q,IACA,O,IACA,S,uDAEqBrvJ,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAn2M,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,aAChB,EAAKs0H,iBAAkB,EALX,E,qEAQTxsI,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,KACHy/H,EAAkB,eAClBC,YAKJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GAC7ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,aAAc3D,Q,2CAI9C,OAAO,I,6DAxCFgI,GAAK,a,aADO2xM,G,4MCHAkrD,E,YACnB,WAAY/lL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAHG,E,qEAMhBlY,GACH,sGAAmBA,EAAW,IAAIkhQ,O,GAVtC,M,4BAEqBA,G,yJCFrB,SACA,QACA,SAEA,Q,IACA,O,uDAEqBtiB,G,gBAGnB,cAAc,iGACN,GAAM,EAAO,EAAA/+O,aAAaC,UADpB,OAEZ,EAAK6C,OAAS,eACd,EAAK/C,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKH,YAAc,mCACnB,EAAKhY,cAAL,iBANY,E,qEASTC,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,OACL,IAAK,QACHy/H,EAAkB,YAClBC,EAAmBg+N,EAGvB,QAAIj+N,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,U,aAvCpCgI,GAAK,Q,aADOu6O,E,IA6Cf2rH,E,YACJ,WAAYpvR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,QAChB,EAAKH,YAAc,mCACnB,EAAK7N,gBAAiB,EALH,E,qEAQhBlK,GACH,sGAAmBA,EAAW,IAAIuqW,O,uKC9DtC,SACA,Q,IACA,O,IAEA,S,IACA,S,IACA,S,IACA,S,uDAEqBrsH,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAr+O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,QAChB,EAAKnY,cAAgB,GACrB,EAAKgY,YAAc,2BAGnB,EAAK+4O,SAAW,KAChB,EAAKC,UAAY,KACjB,EAAKC,WAAa,KAClB,EAAKC,UAAY,KACjB,EAAK7sI,QAAU,KACf,EAAKzzE,WAAa,KAdN,E,qEAiBT3wC,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,YACHy/H,EAAkB,WAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YAeJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,QAAS3D,U,aArEpCgI,GAAK,Q,aADO65O,G,4MCPAG,E,YACnB,WAAYljK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,YACd,EAAKuV,SAAW,YAChB,EAAKH,YAAc,qCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIq+O,O,GAdtC,M,4BAEqBA,G,4MCAAD,E,YACnB,WAAYjjK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,sCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIo+O,O,GAdtC,M,4BAEqBA,G,4MCAAgjB,E,YACnB,WAAYjmL,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,wCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAIohQ,O,GAdtC,M,4BAEqBA,G,4MCAA0kG,E,YACnB,WAAY3qR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,uCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EAPH,E,qEAUhBlK,GACH,sGAAmBA,EAAW,IAAI8lW,O,GAdtC,M,4BAEqBA,G,+ICFrB,SACA,QACA,Q,IAEA,SACA,S,IACA,S,mDAEA,IAAM0E,EAAuB,SAAC31Q,EAAc41Q,GAC1C,OAAO51Q,EAAa1lF,SAAb,eAA0C0lF,EAAa1T,wBAAwB,gBAAiBspR,EAAiBt7V,SAAjB,gBAGnGu7V,EAAwB,SAACC,EAA0B3qW,GACvD,OAAK2qW,IAGD3qW,EAAUmF,oBAAsBwlW,EAAyBC,aAGzD5qW,EAAUmP,SAAV,gBACElL,MAAMC,QAAQlE,EAAUmP,SAAV,YACTnP,EAAUmP,SAAV,WAAiC7S,MAAK,SAAA6jF,GAC3C,OAAOwqR,EAAyB7yV,cAAgB7T,MAAMC,QAAQymW,EAAyB7yV,aAAaqoE,KAC/FwqR,EAAyB7yV,aAAaqoE,GAAY7jF,MAAK,SAAAoD,GAAA,OAAW8qW,EAAqB9qW,EAASM,SAGhG2qW,EAAyBruW,MAAK,SAAAoD,GAAA,OAAW8qW,EAAqB9qW,EAASM,SAM/D6+O,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAh/O,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAL,iBAGA,EAAK+qW,OAAS,KACd,EAAKsB,OAAS,KATF,E,qEAYTpsW,GAAW,WAEZssI,EAAkB,GAClB4+N,EAAa,EACb3+N,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,QACL,IAAK,SACH,IAAK,IAAIjc,EAAI,EAAGA,GAAKA,EAALA,WAAiBA,IAAK,CACpC,IAAM+5W,EAA2BtuW,KAAK,QAAUzL,GAChD,GAAI85W,EAAsBC,EAA0B3qW,GAAY,CAC9DssI,EAAkB,QAAU17I,EAC5Bs6W,EAAat6W,EACb,OAGJ,MAOF,IAAK,SACH07I,EAAkB,SAClBC,YAIJ,QAAID,IACGjwI,KAAKiwI,KACoB,UAAxBtsI,EAAU6M,WAAiD,WAAxB7M,EAAU6M,WAC/CxQ,KAAKiwI,GAAmB,IAAI,EAAJ,SAAU,EAAM4+N,GACxC7uW,KAAKiwI,GAAiBs+N,UAAY5qW,EAAUmF,mBAE5C9I,KAAKiwI,GAAmB,IAAIC,GAAiB,GAE/ClwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,2CAMT,OAAO,I,6DA/DFqE,GAAK,U,aADOw6O,G,4MC/BA2sH,E,YACnB,WAAYrwR,EAAS+vR,IAAY,gGACzB/vR,IADyB,OAE/B,EAAK+vR,WAAaA,EAClB,EAAKvoW,OAAS,SAAWuoW,EACzB,EAAKhzV,SAAW,SAAWgzV,EAJI,E,qEAM5BlrW,GACH,sGAAmBA,EAAW,IAAIwrW,GAAM,EAAOnvW,KAAK6uW,iB,GATxD,M,4BACqBM,G,wLCCAmB,E,YAEnB,WAAYxxR,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,SACd,EAAKuV,SAAW,SAChB,EAAKH,YAAc,6BACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBstR,G,+ICFrB,SACA,Q,IACA,O,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEqBr+L,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAzuK,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,UAChB,EAAKnY,cAAgB,GACrB,EAAKgY,YAAc,6BAGnB,EAAK4lX,QAAU,KACf,EAAKC,WAAa,KAClB,EAAKC,KAAO,KACZ,EAAKhrD,SAAW,KAChB,EAAKirD,YAAc,KACnB,EAAKC,WAAa,KAClB,EAAKC,eAAiB,KACtB,EAAK18O,kBAAoB,CAAC,aAAc,gBAAiB,aAAc,iBAAkB,cACvF,qBAAsB,eAAgB,mBAAoB,eAjBhD,E,qEAoBTthJ,GAAW,WACVssI,EAAkB,GACpBC,EAAmB,KACrB,OAAQvsI,EAAU6M,WAChB,IAAK,UACL,IAAK,aACHy/H,EAAkB,aAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,qBACHD,EAAkB,mBAClBC,YACA,MACF,IAAK,UACHD,EAAkB,eAClBC,YACA,MACF,IAAK,OACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,qBACHD,EAAkB,OAClBC,YACA,MACF,IAAK,WACL,IAAK,YACHD,EAAkB,WAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,gBAClBC,YACA,MACF,IAAK,iBACHD,EAAkB,gBAClBC,YACA,MACF,IAAK,cACHD,EAAkB,aAClBC,YACA,MACF,IAAK,eACHD,EAAkB,cAClBC,YACA,MACF,IAAK,cACL,IAAK,sBACHD,EAAkB,aAClBC,YACA,MACF,IAAK,mBACHD,EAAkB,iBAClBC,YACA,MACF,IAAK,aACHD,EAAkB,YAClBC,YACA,MACF,IAAK,gBACHD,EAAkB,eAClBC,YAGJ,QAAID,IACGjwI,KAAKiwI,KACRjwI,KAAKiwI,GAAmB,IAAIC,GAAiB,GACrB,YAApBD,GACFjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAG3BjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,UAAW3D,U,aA3GtCgI,GAAK,U,aADOiqK,G,wLCjBA2vN,E,YAEnB,WAAY9iT,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,oCACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqB4+S,G,wLCAApmS,E,YAEnB,WAAY1c,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,2CACnB,EAAK7N,gBAAiB,EACtB,EAAKm1E,eAAgB,EANF,E,4BAJvB,M,4BAEqBwY,G,wLCAAqmS,E,YAEnB,WAAY/iT,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,OACd,EAAKuV,SAAW,OAChB,EAAKH,YAAc,8BACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqB6+S,G,wLCAAC,E,YAEnB,WAAYhjT,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,UAChB,EAAKH,YAAc,6BACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqB8+S,G,qJCFrB,QACA,S,uDAEqBC,E,YACnB,WAAYjjT,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,YACd,EAAKuV,SAAW,WAChB,EAAKH,YAAc,qCACnB,EAAKyxH,4BAA8B,KACnC,EAAKg0F,iBAAkB,EACvB,EAAKtzN,gBAAiB,EACtB,EAAK4oU,aAAe,EAAAv5H,oBAAoB,GACxC,EAAKj3H,oBAAqB,EAVS,E,qEAahCtiF,GACEA,EAAUmP,SAAV,OACHnP,EAAUmP,SAAV,KAA6B,CAAC,MAE3BnP,EAAUmP,SAAV,SACHnP,EAAUmP,SAAV,OAA+B,CAAC,MAElC,IAAMkvX,EAAmD,MAAlCr+X,EAAUmP,SAAV,KAA2B,IAAoD,MAApCnP,EAAUmP,SAAV,OAA6B,GAC/F,sGAAmBnP,EAAW,IAAIo+X,GAAS,EAAOA,IAChD,EAAMC,EAAgB,WAAa,mB,8CAG+C,WAAhEnkX,EAAgE,uDAAlD7d,KAAKmmB,cAAewhE,EAA8B,uDAAJ,GAChF,IAAK9pE,EACH,MAAO,GAET,IAAMkxV,EAAoBpnR,GAA2B3nF,KAAKygF,uBACpDM,EAAQljE,EAAY4B,yBACpBjB,EAAQxe,KAAK6hF,cAAc76E,QAAO,SAAAioW,GACtC,IAAKA,EAAWtuR,gCAAgCouR,IAAuBhuR,IAAUkuR,EAAWxvV,yBAC1F,OAAO,EAET,OAAQ,EAAKg3T,cACX,KAAK,EAAAv5H,oBAAoB,GACvB,OAAQ+xJ,EAAWnqR,wBAAwB,OAAQ,MAAQmqR,EAAWnqR,wBAAwB,SAAU,MAClGmqR,EAAWnqR,wBAAwB,OAAQ,MAAQmqR,EAAWnqR,wBAAwB,SAAU,KACxG,KAAK,EAAAo4H,oBAAoB,GACvB,OAAO,EACT,KAAK,EAAAA,oBAAoB,GACvB,OAAQ+xJ,EAAWnqR,wBAAwB,OAAQ,MAAQmqR,EAAWnqR,wBAAwB,SAAU,MAClGmqR,EAAWnqR,wBAAwB,OAAQ,MAAQmqR,EAAWnqR,wBAAwB,SAAU,KACxG,KAAK,EAAAo4H,oBAAoB,GACvB,OAAO,MAIb,OADAllN,QAAQ4B,IAAI,QAASmnF,EAAOviE,GACrBA,I,gDAIP,OAAO,M,iCAtDUujX,G,wLCDAE,E,YAEnB,WAAYnjT,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,sCACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBi/S,G,4MCAAv+I,E,YACnB,WAAY5kK,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,iBACd,EAAKuV,SAAW,iBAChB,EAAKH,YAAc,4CACnB,EAAKuqE,oBAAqB,EAC1B,EAAKsjR,cAAgB,EACrB,EAAKlyG,sBAAuB,EAC5B,EAAKr0K,eAAgB,EATc,E,qEAYhCr/E,GACH,IAAMs/E,EAAgF,KAAlEt/E,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2B,IAAY,EAAI,EAC9F,sGAAmBnP,EAAW,IAAI+/O,GAAc,EAAOzgK,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,sCAG5F,WACRiP,EAAgBlyF,KAAKU,YACvBwxF,EAAcqvS,aAChBrvS,EAAcqvS,WAAWz+S,SAAW9iF,KAAK8iF,UAEvCoP,EAAc/gD,aAChB+gD,EAAc/gD,WAAW2xC,SAAW9iF,KAAK8iF,UAEvCoP,EAAcM,eAChBN,EAAcM,aAAa1P,SAAW9iF,KAAK8iF,UAE7C9iF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,c,kCAI1BnuE,GAA8B,IAAhB6kG,EAAgB,uDAAJ,GAC9BjgH,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,EAAc6kG,GAChCjgH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAOg5F,cAAcpsE,cAAgBnmB,KAEvCA,KAAK4mF,qB,GA5CT,M,4BAEqB88J,G,kMCAAN,E,YACnB,WAAYtkK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAKuqE,oBAAqB,EAC1B,EAAKsjR,cAAgB,EACrB,EAAKlyG,sBAAuB,EAC5B,EAAKr0K,eAAgB,EARF,E,gFAYnB,IAAMkP,EAAgBlyF,KAAKU,YACvBwxF,EAAckgF,YAChBlgF,EAAckgF,UAAUtvF,SAAW9iF,KAAK8iF,c,GAjB9C,M,4BAEqBsgK,G,4MCAAs5H,E,YACnB,WAAY59R,GAAyB,IAAhBmE,EAAgB,uDAAH,GAAG,gGAC7BnE,IAD6B,OAEnC,EAAKmE,WAAaA,EAClB,EAAK38E,OAAS,eACd,EAAKuV,SAAW,eAChB,EAAKH,YAAc,0CACnB,EAAKuqE,oBAAqB,EAC1B,EAAKjD,eAAgB,EAPc,E,qEAUhCr/E,GACH,IAAMs/E,EAAgF,KAAlEt/E,EAAUmP,SAAV,OAA+BnP,EAAUmP,SAAV,KAA2B,IAAY,EAAI,EAC9F,sGAAmBnP,EAAW,IAAI+4W,GAAY,EAAOz5R,IAAa,EAAqB,IAAfA,EAAmB,WAAa,mB,kCAG9FtuE,GAA8B,IAAhB6kG,EAAgB,uDAAJ,GAC9BjgH,EAASyG,KAAKU,YAChBnH,EAAOmH,WAAanH,EAAOmH,cAC7B,qGAAkBiU,EAAc6kG,GAChCjgH,EAAOutF,mBAAqBvtF,EAAOuuF,yBAEnCvuF,EAAOg5F,cAAcpsE,cAAgBnmB,KAEvCA,KAAK4mF,mB,sCAGS,WACRsL,EAAgBlyF,KAAKU,YACvBwxF,EAAcyvS,iBAChBzvS,EAAcyvS,eAAe7+S,SAAW9iF,KAAK8iF,UAE3CoP,EAAcwvS,aAChBxvS,EAAcwvS,WAAW5+S,SAAW9iF,KAAK8iF,UAE3C9iF,KAAK8mF,mBAAmB1oF,SAAQ,SAAC2oF,GAC/BA,EAAkBjE,SAAW,EAAKA,gB,GAtCxC,M,4BAEqB45R,G,wLCAAwlB,E,YACnB,WAAYpjT,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,cACd,EAAKuV,SAAW,cAChB,EAAKH,YAAc,yCACnB,EAAKuqE,oBAAqB,EAC1B,EAAKjD,eAAgB,EANF,E,4BAHvB,M,4BAEqBk/S,G,wLCAAC,E,YACnB,WAAYrjT,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,mBACd,EAAKuV,SAAW,mBAChB,EAAKH,YAAc,8CACnB,EAAKuqE,oBAAqB,EAC1B,EAAKjD,eAAgB,EANF,E,4BAHvB,M,4BAEqBm/S,G,wLCAAr+I,E,YACnB,WAAYhlK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,aACd,EAAKuV,SAAW,aAChB,EAAKH,YAAc,wCACnB,EAAKuqE,oBAAqB,EAC1B,EAAKjD,eAAgB,EANF,E,4BAHvB,M,4BAEqB8gK,G,wLCAAE,E,YACnB,WAAYllK,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,gBACd,EAAKuV,SAAW,gBAChB,EAAKH,YAAc,2CACnB,EAAKuqE,oBAAqB,EAC1B,EAAKjD,eAAgB,EANF,E,4BAHvB,M,4BAEqBghK,G,wLCAAo+I,E,YAEnB,WAAYtjT,IAAS,gGACbA,IADa,OAEnB,EAAKx4E,OAAS,qBACd,EAAKuV,SAAW,qBAChB,EAAKH,YAAc,gDACnB,EAAKsnE,eAAgB,EALF,E,4BAJvB,M,4BAEqBo/S,G,+ICFrB,SACA,Q,IAEA,SACA,S,IACA,O,mDAEA,IAAMj0B,EAAuB,SAAC31Q,EAAc41Q,GAC1C,OAAO51Q,EAAa1lF,SAAb,iBAA4C0lF,EAAa1T,wBAAwB,kBAAmBspR,EAAiBt7V,SAAjB,kBAGvGu7V,EAAwB,SAACC,EAA0B3qW,GACvD,OAAK2qW,IAGD3qW,EAAUmF,oBAAsBwlW,EAAyBC,aAGzD5qW,EAAUmP,SAAV,gBACElL,MAAMC,QAAQlE,EAAUmP,SAAV,YACTnP,EAAUmP,SAAV,WAAiC7S,MAAK,SAAA6jF,GAC3C,OAAOwqR,EAAyB7yV,cAAgB7T,MAAMC,QAAQymW,EAAyB7yV,aAAaqoE,KAC/FwqR,EAAyB7yV,aAAaqoE,GAAY7jF,MAAK,SAAAoD,GAAA,OAAW8qW,EAAqB9qW,EAASM,SAGhG2qW,EAAyBruW,MAAK,SAAAoD,GAAA,OAAW8qW,EAAqB9qW,EAASM,SAM/DshQ,G,gBAEnB,cAAc,iGACN,GAAM,EAAO,EAAAzhQ,aAAaC,UADpB,OAGZ,EAAKF,SAAW,EAAAC,aAAaC,QAC7B,EAAKoY,SAAW,cAChB,EAAKnY,cAAgB,GACrB,EAAKgY,YAAc,mCAGnB,EAAK2mX,YAAc,KATP,E,qEAYT1+X,GAAW,WAEZssI,EAAkB,GAClB4+N,EAAa,EAEf,OAAQlrW,EAAU6M,WAChB,IAAK,aACH,IAAK,IAAIjc,EAAI,EAAGA,GAAKA,EAALA,WAAiBA,IAAK,CACpC,IAAM+5W,EAA2BtuW,KAAK,aAAezL,GACrD,GAAI85W,EAAsBC,EAA0B3qW,GAAY,CAC9DssI,EAAkB,aAAe17I,EACjCs6W,EAAat6W,EACb,QAMR,QAAI07I,IACGjwI,KAAKiwI,KACoB,eAAxBtsI,EAAU6M,WACZxQ,KAAKiwI,GAAmB,IAAI,EAAJ,SAAe,EAAM4+N,GAC7C7uW,KAAKiwI,GAAiBs+N,UAAY5qW,EAAUmF,mBAE5C9I,KAAKiwI,GAAmB,IApBT,MAoB8B,GAE/CjwI,KAAK+e,aAAahqB,KAAKiL,KAAKiwI,KAEzBjwI,KAAKmwI,kBACRnwI,KAAKmwI,iBAAkB,GAEzBnwI,KAAKiwI,GAAiBvvI,UAAY,kBAAM,GACxCV,KAAKiwI,GAAiBG,KAAKzsI,IACpB,K,uCAMT,OAAO,IAAI,EAAJ,QAAyB,cAAe3D,U,aApD1CgI,GAAK,c,aADOi9P,G,4MC7BA6pG,E,YAEnB,WAAYhwR,EAAS+vR,IAAY,gGACzB/vR,IADyB,OAE/B,EAAK+vR,WAAaA,EAClB,EAAKvoW,OAAS,cAAgBuoW,EAC9B,EAAKhzV,SAAW,cAAgBgzV,EAChC,EAAKnzV,YAAc,mCACnB,EAAKsnE,eAAgB,EANU,E,qEAQ5Br/E,GACH,sGAAmBA,EAAW,IAAImrW,GAAW,EAAO9uW,KAAK6uW,e,gCAGjD3zV,GAAQ,WACV62M,EAAiB72M,EAAOi1F,mBAAkB,GAAM,GACtD,OAAInwG,KAAKmmB,eACJnmB,KAAKmmB,cAAcrT,SAAnB,kBACCi/M,EAAe9xN,MAAK,SAAAmG,GAAA,OAAYA,EAASC,YAAYyM,SAArB,iBACjC1M,EAASC,YAAYyM,SAArB,gBAAiD,KAAO,EAAKqT,cAAcrT,SAAnB,gBAA+C,MACnG9S,KAAKqmF,cAEd,mGAAuBnrE,O,GAxB3B,M,4BAEqB4zV,G,6HCuBN,WAAuC,IAA9B/nW,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMqG,gCAYT,OAXI6Z,EAAO7f,QAAQ4F,SACjBioE,YAAW,WACTt1F,SAAS6C,KAAKC,UAAUC,IAAI,aAC5B,aAAEhE,QAAQ+pG,QAAQ,YACjB,GAEHxT,YAAW,WACTt1F,SAAS6C,KAAKC,UAAU27K,OAAO,cAC9B,GAGEnjL,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B0f,SAAUia,EAAO7f,QAAQ4F,SACzBE,WAAW,IAEf,KAAKnG,EAAMkH,iBACT,uBAAW3gB,EAAX,CAAkB6oF,SAAUlvD,EAAO7f,QAAQ7Y,KAC7C,KAAKwY,EAAM0G,gBACX,KAAK1G,EAAMqH,0BACX,KAAKrH,EAAMuG,gCACX,KAAKvG,EAAMygD,wBACX,KAAKzgD,EAAM6S,+BACX,KAAK7S,EAAMgT,wBACX,KAAKhT,EAAM2H,iBACX,KAAK3H,EAAM8H,mBACT,OAAO5zB,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM6G,eACT,OAAO3yB,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,QADL,CAELyhX,sBAAuB5tY,OAAO+2B,OAAO,GAAI1kB,EAAMu7X,uBAAxB,gBACpB5hW,EAAO7f,QAAQplB,gBAAkBrC,SAASC,SAASoC,eAAiBilC,EAAO7f,QAAQuG,eAG1F,KAAK5G,EAAMmO,2BACT,OAAOj6B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BqgB,UAAWrgB,EAAMu7X,sBAAsBlpY,SAASC,SAASoC,iBAAmB,KAEhF,KAAK+kB,EAAMgH,kBACT,IAAMa,EAAgBthB,EAAMshB,cAAcluB,SAASumC,EAAO7f,QAAQ0G,cAC9DxgB,EAAMshB,cADY,wBAEdthB,EAAMshB,eAFQ,CAEOqY,EAAO7f,QAAQ0G,eAC5C,OAAO7yB,OAAO+2B,OAAO,GAAI1kB,GAAlB,cACLshB,iBACGqY,EAAO7f,UAGd,KAAKL,EAAM0S,oBACT,OAAOx+B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bo8M,YAAap8M,EAAMo8M,YAAc,IAErC,KAAK3iM,EAAMwH,sBAET,IAAMD,EAAmB2Y,EAAO7f,QAAQkH,iBACpCrzB,OAAO+2B,OAAO,GAAIiV,EAAO7f,QAAQkH,kBACA,YAAjC3uB,SAASC,SAASmxF,WAChB,EAAA3wF,kBAAoB,EAAAw2F,aAAaG,cAAgB,EAAAH,aAAaE,QAC9D,EAAA12F,kBAAoB,EAAAw2F,aAAazf,MAAQ,EAAAyf,aAAaC,OAC5D,GAAIvoE,GAAoBA,EAAiBpoB,MACvC,OAAQooB,EAAiBpoB,OACvB,KAAK,EAAA0wF,aAAazf,MAAMjxE,MACxB,KAAK,EAAA0wF,aAAaG,cAAc7wF,MAC9BvG,SAAS6C,KAAKC,UAAUC,IAAI,iBAC5B,MAEF,KAAK,EAAAk0F,aAAaE,QAAQ5wF,MACxBvG,SAAS6C,KAAKC,UAAUC,IAAI,eAOlC,OAAOzH,OAAO+2B,OAAO,GAAI1kB,EAAO,CAACghB,qBAGrC,OAAOhhB,GA3GT,I,IAAA,OACYyZ,E,wJAAZ,OACA,QACA,Q,mDAEA,IAAMwoP,EAAe,CACnBviP,uBACAE,WAAW,EACXipE,SAAU,GACV3oE,WAAY,GACZG,UAAW,GACXk7W,sBAAuB,GACvB/6W,aAAc,EACdc,cAAe,GACf+K,uBAAwB,KACxBG,kBAAmB,KACnB3L,kBAAkB,EAClBG,iBAAkB,EAAAsoE,aAAaC,OAC/B85B,kBAAmBjyH,OAAO2B,SAASC,KAAKI,SAAS,uBAC7C,iGACA,GACJgpN,YAAa,EACbj7L,YAAa,I,0ICAA,WAAuC,IAA9BnhB,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aACpD,OAAOA,EAAOt1B,MACZ,KAAKoV,EAAMoI,cACT,OAAOl0B,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMuI,iBACT,OAAOr0B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B+hB,6BAAiB/hB,EAAM+hB,YAAgB4X,EAAO7f,WAKpD,OAAO9Z,GAnCT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnBxgP,cAAc,EACdE,YAAa,sBACbD,WAAY,qBACZE,kBAAkB,EAClBG,YAAa,CACXyH,SAAS,EACTjN,WAAY,EACZi/W,YAAa,CACX,CAAChmS,KAAM,YAAaj6E,KAAM,aAC1B,CAACi6E,KAAM,QAASj6E,KAAM,SACtB,CAACi6E,KAAM,SAAUj6E,KAAM,UACvB,CAACi6E,KAAM,UAAWj6E,KAAM,WACxB,CAACi6E,KAAM,WAAYj6E,KAAM,YACzB,CAACi6E,KAAM,WAAYj6E,KAAM,YACzB,CAACi6E,KAAM,UAAWj6E,KAAM,e,8ICiIf,WAAwC,IAA9Bvb,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aACrD,OAAQA,EAAOt1B,MACb,KAAKoV,EAAM0I,kBAET,OADA,UAAUuX,UAAU,aAAcC,EAAO7f,QAAQoJ,gBAAkB,SAAW,WAC9E,iBACK,aAAMljB,EAAO25B,EAAO7f,SADzB,CAEE4sL,cAAe/sK,EAAO7f,QAAQ4sL,eAAiB,EAAAnuJ,eAAeC,OAC9DyuJ,oBAAqBttK,EAAO7f,QAAQmtL,sBAAuB,EAC3D58K,cAA8C,IAA7BsP,EAAO7f,QAAQuQ,SAA4BrqB,EAAMqqB,SAAWsP,EAAO7f,QAAQuQ,WAEhG,KAAK5Q,EAAMmJ,yBACX,KAAKnJ,EAAMsQ,qBACX,KAAKtQ,EAAM8gD,uBACX,KAAK9gD,EAAM6gD,6BACX,KAAK7gD,EAAMghD,gBACT,uBAAWz6D,EAAU25B,EAAO7f,SAC9B,KAAKL,EAAM4gD,4BACT,uBAAWr6D,EAAX,CAAkBs2M,2BAA2BA,EAA3BA,cAA+Bt2M,EAAMs2M,0BAA8B38K,EAAO7f,QAAQw8L,6BACtG,KAAK78L,EAAM6I,iBAAkB,IACtBtoB,EAAYgG,EAAZhG,SAEL,OADAA,mBAAeA,EAAa2/B,EAAO7f,QAAQ9f,WAC3C,gBAAWgG,EAAX,CAAkBhG,aAEpB,KAAKyf,EAAMgJ,wBAAyB,IAC7BD,EAAkBxiB,EAAlBwiB,eAEL,OADAA,mBAAqBA,EAAmBmX,EAAO7f,QAAQ0I,iBACvD,gBAAWxiB,EAAX,CAAkBwiB,mBAEpB,KAAK/I,EAAM+gD,gBAAiB,IACrBo8I,EAAa52M,EAAb42M,UAEL,OADAA,mBAAgBA,EAAcj9K,EAAO7f,QAAQ88L,YAC7C,gBAAW52M,EAAX,CAAkB42M,cAEpB,KAAKn9L,EAAM0gD,mBAET,OAAOxsE,OAAO+2B,OAAO,GAAI1kB,EAAO25B,EAAO7f,QAAS,CAACytG,uBAAuB,IAC1E,KAAK9tG,EAAMsJ,gCACT,uBAAW/iB,EAAX,CAAkBqO,uBAAwBsrB,EAAO7f,QAAQzL,yBAC3D,KAAKoL,EAAM2gD,mBAYT,OAXIzgC,EAAO7f,QAAQ9f,WACZ2/B,EAAO7f,QAAQ9f,SAASghC,SAAYrB,EAAO7f,QAAQ9f,SAASghC,QAAQqsI,WACvE1tI,EAAO7f,QAAQ9f,SAASghC,QAAUh7B,EAAMhG,SAASghC,SAET,QAAtCrB,EAAO7f,QAAQ9f,SAASihC,YAC1BtB,EAAO7f,QAAQ9f,SAASihC,UAAY,IAEG,QAArCtB,EAAO7f,QAAQ9f,SAAS4tK,WAC1BjuI,EAAO7f,QAAQ9f,SAAS4tK,SAAW,MAGvC,gBACK5nK,EACA25B,EAAO7f,QAFZ,CAGEoJ,iBAAiB,EACjBu4W,oBAAoB,EACpB5xW,oBAAoB,EACpB5G,gBAAgB,IAEpB,KAAKxJ,EAAMkQ,eAIT,OAHAgQ,EAAO7f,QAAQ2M,KACXp0B,SAAS6C,KAAKC,UAAUC,IAAI,iBAC5B/C,SAAS6C,KAAKC,UAAU27K,OAAO,kBACnC,gBAAW9wK,EAAX,CAAkB07X,oBAAqB/hW,EAAO7f,QAAQ2M,OACxD,KAAKhN,EAAM+N,oBACT,IAAMxtB,mBAAegG,EAAMhG,UADG,GAEX,IAAAu3Q,yBAAwB53O,EAAO7f,SAA3CnZ,EAFuB,EAEvBA,SAKP,OAJA3G,EAASghC,QAAU2gW,EAAkBh7X,IACjC,IAAAsvC,0BAAiD,QAAtBtvC,EAAS4M,WACtCvT,EAAS6wP,6BAA+B,EAAAgrD,gCAAgC,KAE1E,gBAAW71S,EAAX,CAAkBhG,aAGtB,OAAOgG,GA3NT,I,IAAA,SACYyZ,E,wJAAZ,O,IACA,OACA,QACA,QACA,SAGA,S,IACA,OACA,Q,mDAEA,IAAMqgN,EAAkB,UAAO//N,yBACzBs/W,GAAY,IAAAx9W,cAEL+/X,EAAYA,EAAZA,UAAY,CACvB,IAAO,CACLlsY,KAAM,iBACN63K,KAAM,KACNF,SAAU,KACV79G,SAAU,EACVqyU,UAAW,MAEb,IAAO,CACLA,UAAW,KACXx0N,SAAU,IACVE,KAAM,KACN73K,KAAM,gBACN85D,SAAU,GAEZ,IAAO,CACLqyU,UAAW,KACXx0N,SAAU,IACVE,KAAM,KACN73K,KAAM,SACN85D,SAAU,GAEZ,IAAO,CACLqyU,UAAW,KACXx0N,SAAU,KACVE,KAAM,KACN73K,KAAM,YACN85D,SAAU,GAEZ,IAAO,CACLqyU,UAAW,KACXx0N,SAAU,MACVE,KAAM,KACN73K,KAAM,SACN85D,SAAU,GAEZ,IAAO,CACLqyU,UAAW,KACXx0N,SAAU,KACVE,KAAM,KACN73K,KAAM,QACN85D,SAAU,GAEZ,IAAO,CACL95D,KAAM,kBACN63K,KAAM,KACNF,SAAU,KACV79G,SAAU,EACVqyU,UAAW,OAIFF,EAAoBA,EAApBA,kBAAoB,SAAC5wX,GAChC,GAAoC,QAAhCA,EAAmBwC,WAAsB,IAAA4pI,qCAC3C,OAAOykP,EAAUE,IACjB,GAAoC,QAAhC/wX,EAAmBwC,SACvB,OAAOquX,EAAUG,IACZ,IAAI,IAAApuV,mBACT,OAAOiuV,EAAUI,IAOnB,IAAMzuX,EAA2C,QAAhCxC,EAAmBwC,SAAqB,MAAQxC,EAAmBwC,SACpF,OAAOquX,EAAUruX,IAAaquX,EAAUK,KAGpCh6H,EAAe,CACnB/+O,iBAAiB,EACjBwjL,cAAe,EAAAnuJ,eAAeC,OAC9ByuJ,qBAAqB,EACrBhkL,eAAgB62M,EAChB4hK,qBAAqB,EACrBrxW,UAAU,EACVrwB,SAAU,CACRygC,MAAO,GACPD,MAAO,GACPstI,SAAU,GACV7sI,UAAW,GACXC,YAAa,GACbC,OAAQ,GACRorF,iBAAmBn1H,OAAOg1H,YAAch1H,OAAOg1H,YAAY5rF,MAAQ,GACnE8rF,oBAAsBl1H,OAAOg1H,YAAch1H,OAAOg1H,YAAY12H,KAAO,GACrEm4K,OAAO,EACPx9F,aAAch4E,SAASC,SAASmC,QAAU,MAC1CwwH,WAAY7zH,OAAOg1H,YACfh1H,OAAOg1H,YAAYK,OAAWpjH,KAAKouE,MAAgB,IAAVpuE,KAAKqnE,IAC7C2uS,GAAaA,EAAUvoX,GAAMuoX,EAAUvoX,EAAEkG,MAAM,KAAK,GAAK,GAC9D4wK,SAAU,GACVmjF,OAAQ,GACR/nG,SAAU,GACVklB,SAAU,GACVjlB,KAAM,GACNjjJ,MAAO,GACP6qP,6BAA8B,GAC9BC,qBAAsB,GACtB9vN,QAAS4gW,EAAUK,IACnBj4C,SAAU,GACV9hG,SAAU,GACVyI,eAAe,EACfC,uBAAuB,GAEzB7gI,UAAasvP,GAAaA,EAAU6iB,UAAa7iB,EAAU6iB,UAAY,KACvE15W,eAAgB,GAChBG,sBAAsB,EACtB6kG,cAAe,GACfD,uBAAuB,EACvBl5G,uBAAwByrN,EAExBjwM,oBAAoB,EACpBC,iBAAkB,EAAA8uB,kBAAkBC,oBACpCwwH,gBAAiB,GACjB8yN,mBAAmB,EACnB7lL,0BAA2B,CAEzB7hN,OAAQ,GACR01P,aAAa,EACbC,mBAAmB,EACnBgyI,iBAAiB,GAEnB1lL,iBAAkB,EAAAt9J,iBAAiBxgB,SACnC49K,sBAAuB,EACvBI,UAAW,CACTylL,cAAc,EACdC,WAAY,IAEdxlL,OAAO,I,sJCjIM,WAAuC,IAA9B92M,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAM0O,mBACT,OAAOx6B,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAKhB,OAAO9Z,GAzBT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnBz4O,SAAS,EACTwlB,QAAS,GACT99C,MAAO,GACPi+C,MAAO,GACP1lB,QAAQ,EACRu/I,WAAW,EACXj2H,QAAS,GACTo2C,MAAO,O,kHCmBM,WAAuC,IAA9BnpF,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAChD+vR,GAAWA,EAAXA,cAAe1pT,GACnB,OAAO25B,EAAOt1B,MACZ,KAAKoV,EAAMiP,aACTghS,EAASz6S,aAAestX,GAAiB,aAAU5iW,EAAO7f,UAC5D,MACA,KAAKL,EAAM4O,qBACTqhS,EAASnyS,gBAAT,wBAA+BoiB,EAAO7f,UACxC,MACA,KAAKL,EAAMoP,qBACT6gS,EAAS9gS,gBAAT,wBAA+B+Q,EAAO7f,UACtC,MACF,KAAKL,EAAMsP,aACT2gS,EAASzsS,YAAc0c,EAAO7f,QAAQ2M,KACtCijS,EAAS5gS,SAAW6Q,EAAO7f,QAAQgP,SACnC4gS,EAASzzG,cAAgB,SACzB,MACF,KAAKx8L,EAAMyP,4BACLwgS,EAASzsS,cACXysS,EAASzsS,aAAc,EACvBysS,EAAS5gS,SAAW6Q,EAAO7f,QAC3B4vS,EAASzzG,cAAgB,UAE3B,MACF,KAAKx8L,EAAM2P,mBACTsgS,EAASzzG,cAAgBt8K,EAAO7f,QAChC,MACF,KAAKL,EAAM6iD,4BACT,OAAO3uE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B0rM,sBAAuB/9M,OAAO+2B,OAAO,GAAI1kB,EAAM0rM,sBAAuB/xK,EAAO7f,QAAQ4xL,yBAEzF,KAAKjyL,EAAM8iD,qBACT,OAAO5uE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bw8X,aAAcx8X,EAAMw8X,aAAe,IAEvC,KAAK/iX,EAAM+iD,gCACT,OAAO7uE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMy6C,gBACT,IAAKv6B,EAAO7f,QAAQm6C,WAClB,OAAOtmE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAEuX,gBAAiB,KAErD,MACF,KAAKkC,EAAMm8C,yBACT,IAAKj8B,EAAO7f,QAAQ67C,mBAClB,OAAOhoE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAEuX,gBAAiB,KAErD,MACF,KAAKkC,EAAM8vD,qBACT,IAAK5vC,EAAO7f,QAAQo+F,eAClB,OAAOvqH,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAEuX,gBAAiB,KAErD,MACF,KAAKkC,EAAM6kD,uBACT,GAAIt+D,EAAMuX,gBAAgB7pB,OACxB,OAAOC,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAEuX,gBAAiB,KAIzD,OAAOmyS,GAzFT,IAAYjwS,E,wJAAZ,O,IACA,Q,IACA,Q,mDAEA,IAAMwoP,EAAe,CACnBhzP,aAAc,GACdsI,gBAAiB,GACjBqR,gBAAiB,GACjB3L,aAAa,EACbg5L,cAAe,GACfntL,SAAU,GACV4iL,sBAAuB,GACvB8wL,aAAc,GAGhB,SAASD,EAAiBttX,GAWxB,OAVAA,EAAa5X,SAAQ,SAAAkxB,GACnB,IADyB,eACjB/6B,GACN,IAAI2C,EAAQo4B,EAAGnZ,OAAO5hB,GACtB,GAAG2C,EAAMolG,UAAW,CAClB,IAAI/iG,GAAS,aAAK+1B,EAAGnZ,QAAQ,SAAAqwQ,GAAA,OAAKA,EAAEx+Q,IAAM9Q,EAAMolG,aAChD/iG,EAAO6mB,MAAQ7mB,EAAO6mB,OAAS,GAC/B7mB,EAAO6mB,MAAMrrB,KAAKu6B,EAAGnZ,OAAOxgB,OAAOpB,EAAG,GAAG,MALrCA,EAAI+6B,EAAGnZ,OAAO1hB,OAAS,EAAGF,GAAI,EAAGA,IAAK,EAAtCA,MASHyhB,I,+HCwCM,WAAuC,IAA9BjP,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAChD+vR,GAAWA,EAAXA,cAAe1pT,GACnB,OAAO25B,EAAOt1B,MACZ,KAAKoV,EAAM6P,gBACTogS,EAAS3vF,UAAT,wBAAyBpgM,EAAO7f,UAClC,MACA,KAAKL,EAAMijD,4BACT,GAAkD,UAA9C/iC,EAAO7f,QAAQ85H,4BACgC,YAA9Cj6G,EAAO7f,QAAQ85H,2BAClB,OAAQj6G,EAAO7f,QAAQ+5H,2BACrB,IAAK,UACL,IAAK,aACL,IAAK,cACL,IAAK,YACL,IAAK,gBACL,IAAK,eACH,aAAE,cAAcptD,QAAQ,CAACy5E,UAAW,GAAI,KAI9C,OAAOvyK,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMgjD,0BACX,KAAKhjD,EAAMujD,yBACX,KAAKvjD,EAAMmjD,6BACX,KAAKnjD,EAAMsjD,kCACX,KAAKtjD,EAAMojD,+BACX,KAAKpjD,EAAMqjD,oCACX,KAAKrjD,EAAMkkD,6BACX,KAAKlkD,EAAMmkD,wCACX,KAAKnkD,EAAMokD,wCACX,KAAKpkD,EAAMqkD,2CACX,KAAKrkD,EAAM8jD,uBACX,KAAK9jD,EAAM+jD,mCACX,KAAK/jD,EAAM4jD,oBACT,OAAO1vE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMskD,sBACT,OAAOpwE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BoyT,iBAAkBzkU,OAAO+2B,OAAO,GAAI1kB,EAAMoyT,iBAAkBz4R,EAAO7f,QAAQm7H,oBAE/E,KAAKx7H,EAAMwjD,sBACT,OAAOtvE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B+mI,wCAAqBptG,EAAO7f,QAAQitH,oBAExC,KAAKttH,EAAM6jD,mBACT,OAAO3vE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BinI,qCAAkBttG,EAAO7f,QAAQmtH,iBAErC,KAAKxtH,EAAMyjD,+BACT,OAAOvvE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BknI,gDAA6BvtG,EAAO7f,QAAQotH,4BAEhD,KAAKztH,EAAM0jD,yBACT,OAAIxjC,EAAO7f,QAAQw7H,cACV3nJ,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BgnI,gDAA6BrtG,EAAO7f,QAAQu7H,uBAGzC1nJ,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bq1I,mBAAoB1nJ,OAAO+2B,OAAO,GAAI1kB,EAAMq1I,mBAAoB17G,EAAO7f,QAAQu7H,sBAEnF,KAAK57H,EAAM2jD,kCACT,OAAIzjC,EAAO7f,QAAQw7H,cACV3nJ,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BmnI,wDAAqCxtG,EAAO7f,QAAQ07H,+BAGjD7nJ,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bw1I,2BAA4B7nJ,OAAO+2B,OAAO,GAAI1kB,EAAMw1I,2BAA4B77G,EAAO7f,QAAQ07H,8BAEnG,KAAK/7H,EAAMgkD,+BACT,OAAO9vE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bi2I,qBAAsBtoJ,OAAO+2B,OAAO,GAAI1kB,EAAMi2I,qBAAsBt8G,EAAO7f,QAAQm8H,wBAEvF,KAAKx8H,EAAMikD,+BACT,OAAO/vE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC5BgnI,wBAA0BrtG,EAAO7f,QAAQ2tH,wBAAwBlgF,YAAmBvnD,EAAMgnI,wBAAX,GAC/ED,gBAAkBptG,EAAO7f,QAAQ2tH,wBAAwB1wF,SAAgB/2C,EAAM+mI,gBAAX,GACpEU,wBAAyB95I,OAAO+2B,OAAO,GAAI1kB,EAAMynI,wBAAyB9tG,EAAO7f,QAAQ2tH,2BAGjG,OAAOiiL,GAtJT,I,IAAA,OACYjwS,E,wJAAZ,OACA,QAQA,Q,mDAMA,IAAMgjX,EAAyBpqY,SAASC,SAASqC,aAAe,EAE1DstQ,EAAe,CACnBloC,UAAW,GACXvmF,yBAAyB,EACzBE,mBAAoB,EACpBE,2BAA4B,GAC5BC,0BAA2B,GAC3BE,yBAAyB,EACzBE,sBAAuB,EAAAv/C,0BAA0BC,QACjDw/C,2BAA4B,EAAAt/C,+BAA+BC,SAC3Du/C,wBAAyB,KACzBE,4BAA6B,KAE7BE,uBAAwB,EAAAz/C,uBAAuB,GAAGC,SAClD0/C,gCAAiC,EACjCE,kCAAkC,EAClCE,qCAAqC,EACrCq9K,uCACG,EAAAj9N,0BAA0B,GAAGF,SAAW,QAD3C,eAEG,EAAAE,0BAA0B,GAAGF,SAAW,OAF3C,GAIAgyC,0BACAF,gCACAG,wBAAyBu1P,EAAyB,GAAK,CAAC,iBAAkB,iBAC1Ez1P,2CACAG,4DACAC,gDACAC,yDACAgO,mBAAoB,CAClB,WAAc,CAAC,2BAA4B,cAC3C,yBAA4B,CAAC,aAAc,cAC3C,WAAc,CAAC,2BAA4B,eAE7CG,2BAA4B,CAC1B,kBAAqB,CAAC,qBACtB,kBAAqB,CAAC,sBAExB/N,wBAAyB,CACvBlgF,aAAa,EACbxQ,UAAU,GAEZg/F,gCAAgC,EAChCE,qBAAsB,CACpBgqG,aAAa,EACbH,cAAe,GACfH,aAAc,M,0IC9BH,WAAuC,IAA9B3/O,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMqlD,sBACX,KAAKrlD,EAAMslD,yBACX,KAAKtlD,EAAMulD,mBACX,KAAKvlD,EAAMwlD,UACX,KAAKxlD,EAAMylD,YACX,KAAKzlD,EAAM0lD,yBACX,KAAK1lD,EAAM2lD,qBACX,KAAK3lD,EAAM6lD,uBACX,KAAK7lD,EAAM8lD,sBACX,KAAK9lD,EAAMgmD,sBACX,KAAKhmD,EAAMimD,iBACX,KAAKjmD,EAAMkmD,yBACX,KAAKlmD,EAAMmmD,sBACX,KAAKnmD,EAAMumD,wBACX,KAAKvmD,EAAMwmD,qBACT,OAAOtyE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM4lD,2BACT,OAAO1xE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B+8G,wBAAyBpjF,EAAO7f,QAAQijG,wBACxCC,cAAerjF,EAAO7f,QAAQkjG,eAAiBh9G,EAAMg9G,cACrDC,kBAAmBtjF,EAAO7f,QAAQmjG,oBAEtC,KAAKxjG,EAAM+lD,2BACTx/D,mBAAYA,EAAZ,CAAmBq9G,kBAAmB1vH,OAAO+2B,OAAO,GAAI1kB,EAAMq9G,kBAAmB1jF,EAAO7f,QAAQujG,qBAIpG,OAAOr9G,GAjET,IAAYyZ,E,wJAAZ,OACA,QAEA,IAAMwoP,EAAe,CACnBr+O,wBAAwB,EACxBw4F,UAAW,KACXG,aAAc,EAAAjrE,eAAeC,SAC7BkrE,YAAY,EACZE,eAAgB,KAChBE,WAAY,EACZE,yBAAyB,EACzBC,cAAe,GACfO,gBAAiB,KACjBN,mBAAmB,EACnB/zE,oBAAoB,EACpBm0E,kBAAmB,CACjBuP,SAAS,EACTjjB,QAAQ,EACR4mO,SAAS,EACTxoC,eAAgB,KAChBC,4BAA6B,IAE/BniS,YAAa,EAAA4sC,kBAAkBC,SAC/Bof,oBAAoB,EAEpB+xC,uBAAwB,KACxBF,mBAAoB,KACpB8Z,YAAa,KACbE,kBAAmB,KACnBE,gBAAiB,O,0ICtBJ,WAAsD,IAA5C79G,EAA4C,uDAApCiiQ,EAAoC,yDAAJ,GAAjB59P,EAAqB,EAArBA,KAAMyV,EAAe,EAAfA,QACpD,OAAIzV,IAASA,EAATA,eACF,gBAAWrE,EAAX,CAAkBymB,KAAM3M,EAAQ2M,KAAMuD,SAAUlQ,EAAQkQ,WAEnDhqB,GAXT,YAEA,IAAMiiQ,EAAe,CACnBx7O,MAAM,EACNuD,SAAU,O,kHCIG,WAAwC,IAA9BhqB,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAErD,OAAQA,EAAOt1B,MAEb,KAAKoV,EAAMmS,yBACT,OAAOj+B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B2rB,2CAAwB3rB,EAAM2rB,oBAA9B,CAAkDgO,EAAO7f,QAAQ6R,uBAErE,KAAKlS,EAAMgS,4BACT,OAAO99B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BwrB,8CAA2BxrB,EAAMwrB,uBAAjC,CAAwDmO,EAAO7f,QAAQ0R,0BAE3E,KAAK/R,EAAMqS,uBACT,OAAOn+B,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAIhB,OAAO9Z,GA1BT,IAAYyZ,E,wJAAZ,O,mDAEA,IAAMwoP,EAAe,CACnBt2O,mBAAoB,GACpBH,sBAAuB,GACvBxU,iBAAkB,K,uGCYL,WAAuC,IAA9BhX,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMkrD,wBACX,KAAKlrD,EAAMmrD,4BACX,KAAKnrD,EAAMorD,gCACX,KAAKprD,EAAMqrD,8BACX,KAAKrrD,EAAMsrD,sCACX,KAAKtrD,EAAMurD,yBACX,KAAKvrD,EAAMwrD,6BACX,KAAKxrD,EAAMyrD,iCACT,OAAOv3E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM+N,oBACT,GAAImS,EAAO7f,SAAW6f,EAAO7f,QAAQnZ,SAAU,QAC1B,IAAA4wQ,yBAAwB53O,EAAO7f,SAA3CnZ,EADsC,EACtCA,SACP,IAAKA,EAAS+oJ,uBACZ,OAAO/7J,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BqpJ,2BAA2B,EAC3BU,4BAA4B,IAIlC,OAAOp8J,OAAO+2B,OAAO,GAAI1kB,GAK7B,OAAOA,GA/CT,IAAYyZ,E,wJAAZ,O,IACA,OACA,S,mDAEA,IAAMijX,EAAiB,UAAO3iY,yBAExBkoQ,EAAe,CACnBh5G,2BAA2B,EAC3BE,sBAAuB,EACvBE,0BAA2BqzO,EAC3B/yO,4BAA4B,EAC5BE,uBAAwB,EACxBE,2BAA4B2yO,EAC5BnzO,gCAAgC,EAChCE,gCAAgC,I,kHCgCnB,WAAsC,IAA7BzpJ,EAA6B,uDAArBiiQ,EAActoO,EAAO,aACnD,OAAQA,EAAOt1B,MACb,6BACE,OAAOs4X,EAAM38X,EAAO25B,EAAO7f,SAC7B,iCACE,uBAAW9Z,EAAX,CAAkBw7G,KAAM7hF,EAAO7f,QAAQ0hG,OACzC,uCACA,wCACA,yBACA,uCACA,6CACE,uBAAWx7G,EAAU25B,EAAO7f,SAC9B,2CACE,OAAK9Z,EAAM69M,mBAAqBlwN,OAAOmc,KAAK9J,EAAMwjH,wBAAwB91H,QAAU2E,SAASC,SAAS4b,QAChGvgB,OAAOmc,KAAK9J,EAAMyjH,iBAAiB/1H,QAAUisC,EAAO7f,QAAQouG,eAC7DvuF,EAAO7f,QAAQouG,cAAcx6H,QAG5BsS,EAAM0jH,2BACR/1H,OAAOmc,KAAK9J,EAAMwjH,wBAAwBnsH,SAAQ,SAAAulY,GAEhD58X,EAAMwjH,uBAAuBo5Q,EAAU58X,EAAM0jH,2BAA6B1jH,EAAMwjH,uBAAuBo5Q,UAChG58X,EAAMwjH,uBAAuBo5Q,OAGxC,gBAAW58X,EAAU25B,EAAO7f,QAA5B,CAAqC+jM,mBAAmB,EAAMp6F,iBAAiBA,EAAjBA,cACzD9pF,EAAO7f,QAAQouG,cAAc,GAAGjnH,GAAKjB,EAAMwjH,wBAC3CA,uBAAwB,OAE/B,gBAAWxjH,EAAU25B,EAAO7f,QAA5B,CAAqC+jM,mBAAmB,IAC1D,2CACE,uBAAW79M,EAAX,CAAkB68X,sBAAuBljW,EAAO7f,QAAQ2M,KAAMq2W,gBAAiBnjW,EAAO7f,QAAQsvJ,MAChG,mBACA,wBACA,2BACA,4BACA,qCACA,kCACA,6BACA,2CACE,OAAIzvI,EAAOt1B,OAAP,eAA+Bs1B,EAAO7f,QAAQte,UAAU1E,OAAM,SAAA8N,GAChE,OAAOA,EAAMtF,aAAesF,EAAMtF,YAAY1C,UAAU4C,kBAIrDQ,EAAM2jH,qBAFF3jH,GAGP,gBAAWA,EAAX,CAAkB2jH,sBAAsB,EAAMu5F,WAAY,UAAK5hM,OAGnE,qCACE,GAAI/Z,OAAOC,UAAUm4B,EAAO7f,QAAQijX,uBAC/Bx7X,OAAOC,UAAUxB,EAAM0jH,4BACtB/pF,EAAO7f,QAAQijX,uBAAyB/8X,EAAM0jH,2BAC9C/1H,OAAOmc,KAAK9J,EAAMwjH,wBAAwB91H,OAAS,CAEvDuD,QAAQ4B,IAAI,mEAAoEmN,EAAM0jH,0BAA2B/pF,EAAO7f,QAAQijX,sBAChI,IAAIjxN,EAAY,GAOhB,OANAn+K,OAAOmc,KAAK9J,EAAMwjH,wBAAwBnsH,SAAQ,SAAAulY,GAEhD,IACMj9K,EADuBi9K,EAAU58X,EAAM0jH,0BACN/pF,EAAO7f,QAAQijX,qBACtDjxN,EAAU6zC,GAAW3/M,EAAMwjH,uBAAuBo5Q,OAEpD,gBAAW58X,EACN25B,EAAO7f,QADZ,CAEE6pG,sBAAsB,EACtBH,uBAAwBsoD,EACxBpoD,0BAA2B/pF,EAAO7f,QAAQijX,uBAG9C,uBACK/8X,EACA25B,EAAO7f,QAFZ,CAGE6pG,sBAAsB,EACtBD,0BAA2B/pF,EAAO7f,QAAQijX,uBAGhD,OAAO/8X,GA3HT,I,IAAA,OAEA,Q,mDAqBA,IAAMiiQ,EAAe,CACnBhnO,UAAW,GACX2sI,SAAU,GACVpsD,KAAM,EACN5Z,WAAW,EACX53E,SAAU,KACVs+F,kBAAmB,KACnB00Q,eAAgB,KAChBH,uBAAuB,EACvBC,gBAAiB,KACjBC,qBAAsB,KACtBr5Q,0BAA2B,KAC3BF,uBAAwB,GACxBolD,0BAA2B,KAC3B60C,aAAc,KACdw/K,iBAAiB,EACjBt5Q,sBAAsB,EACtBu5F,WAAY,UAAK5hM,KACjB4sG,cAAe,GACf21F,mBAAmB,EACnBp6F,gBAAiB,IAoFnB,SAASk5Q,EAAM38X,EAAf,GAAwC,IAAjBymB,EAAiB,EAAjBA,KAAMuD,EAAW,EAAXA,SAC3B,OAAKvD,GAIL,gBAAWzmB,EAAX,CAAkB4hG,WAAW,EAAM53E,cAHjC,gBAAWhqB,EAAX,CAAkB4hG,WAAW,EAAO4Z,KAAM,EAAGvgF,UAAW,GAAI2sI,SAAU,O,0ICrH3D,WAAuC,IAA9B5nK,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMuiD,8BACX,KAAKviD,EAAMyiD,2BACX,KAAKziD,EAAM0iD,uBACX,KAAK1iD,EAAM2iD,sCACX,KAAK3iD,EAAM4iD,mCACT,OAAO1uE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMwiD,sBACT,OAAOtuE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,QADL,CAELojX,mBAAmB,KAIzB,OAAOl9X,GA/BT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnB97C,sBAAsB,EACtB+2K,mBAAmB,EACnBv5X,iBAAkB,GAClBM,qBAAsB,GACtB+vK,kBAAmB,GACnBuyC,+BAA+B,EAC/BE,qBAAqB,I,uGCMR,WAAuC,IAA9BzmN,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAM0sD,6BACX,KAAK1sD,EAAM2sD,6BACX,KAAK3sD,EAAM4sD,mCACX,KAAK5sD,EAAM6sD,oCACX,KAAK7sD,EAAM8sD,kCACX,KAAK9sD,EAAM+sD,sCACX,KAAK/sD,EAAMgtD,0CACT,OAAO94E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM88C,wBACT,GAAK58B,EAAO7f,QAAQu8C,oBAAsB,EAAA1gC,cAAckB,aAAgB72B,EAAMmjS,wBAA4D,IAAjCnjS,EAAMqjS,uBAA+B,CAC5I,IAAM3+F,EAAiBryM,SAASg9F,cAAc,wBAI9C,OAHIq1G,IACF,aAAEA,GAAgBC,OAAO,KAEpBh3M,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BqjS,uBAAwB,KAKhC,OAAOrjS,GAzCT,I,IAAA,OAEYyZ,E,wJAAZ,OACA,Q,mDAEA,IAAMwoP,EAAe,CACnBkhC,wBAAwB,EACxBE,uBAAwB,EACxBE,cAAe,GACfE,eAAgB,GAChBE,gCAAgC,EAChC/4Q,sCAAsC,EACtCi5Q,+BAAgC,I,kHCHnB,WAAuC,IAA9B7jS,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAChDopF,SACJ,OAAOppF,EAAOt1B,MACZ,KAAKoV,EAAMitD,cACX,KAAKjtD,EAAMktD,WACX,KAAKltD,EAAMotD,uBACT,OAAOl5E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMmtD,aAGT,OAFAm8C,0BAAoB/iH,EAAM+R,UACZgxG,EAAcntG,WAAU,SAAAs0D,GAAA,OAAQA,IAASvwC,EAAO7f,QAAQnH,UAAUgnB,EAAO7f,QAAQ67J,aACxFhoL,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAC+R,OAAQgxG,IAG7C,OAAO/iH,GAxBT,IAAYyZ,E,wJAAZ,O,mDAEA,IAAMwoP,EAAe,CACnBlwP,OAAQ,CACN,IAEF7L,iBAAkB,I,0ICEL,WAAuC,IAA9BlG,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMqtD,6BACX,KAAKrtD,EAAMstD,iCACT,OAAOp5E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAIhB,OAAO9Z,GAnBT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnBzhD,qBAAqB,EACrBt6M,iBAAkB,EAClBi3X,0BAA2B,O,0ICSd,WAAuC,IAA9Bn9X,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMutD,+BACX,KAAKvtD,EAAMwtD,mCACX,KAAKxtD,EAAMytD,gCACX,KAAKztD,EAAM0tD,gCACX,KAAK1tD,EAAM2tD,oCACX,KAAK3tD,EAAM4tD,4BACX,KAAK5tD,EAAM6tD,8BACT,OAAO35E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAIhB,OAAO9Z,GA9BT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnB39C,sBAAsB,EACtBG,2BAA4B,GAC5B5+F,yBAA0B,KAC1BD,yBAA0B,KAC1Bi/F,4BAA6B,GAC7BE,sBAAsB,EACtBkZ,4BAA6B,GAC7BE,4BAA6B,GAC7B5Z,4BAA6B,Q,0ICJhB,WAAwC,IAA9BvkN,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAErD,OAAQA,EAAOt1B,MAEb,KAAKoV,EAAM8tD,gBACX,KAAK9tD,EAAM+tD,sBACT,OAAO75E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAIhB,OAAO9Z,GAlBT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnB55I,WAAY,GACZzE,iBAAkB,K,6HCQL,WAA4C,IAAnC5jH,EAAmC,wEAAvBiiQ,GAAetoO,EAAQ,aACrDyjW,SACAC,SACA3zE,SACJ,OAAO/vR,EAAOt1B,MACZ,KAAKoV,EAAMuoD,qBACX,KAAKvoD,EAAMwoD,sBACT,OAAOt0E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMioD,cACT1hE,mBAAYA,GAAZ,gBAAoB25B,EAAO7f,QAAQorL,aAAevrK,EAAO7f,QAAQqsL,YACjE,MACF,KAAK1sL,EAAMkoD,aAOT,OANA+nP,mBACG/vR,EAAO7f,QAAQorL,aADlB,wBACqCllM,EAAM25B,EAAO7f,QAAQorL,eAD1D,CACyEvrK,EAAO7f,QAAQssL,YAEnFpmM,EAAMq9X,cAAcjqY,SAASumC,EAAO7f,QAAQorL,gBAC/CwkH,EAAS2zE,cAAT,wBAA6Br9X,EAAMq9X,eAAnC,CAAkD1jW,EAAO7f,QAAQorL,gBAE5Dv3M,OAAO+2B,OAAO,GAAI1kB,EAAO0pT,GAClC,KAAKjwS,EAAMmoD,gBAUT,OATAw7T,EAAmBp9X,EAAM25B,EAAO7f,QAAQorL,cAAcnkM,KAAI,SAACmpE,GACzD,OAAIA,EAAKjpE,KAAO04B,EAAO7f,QAAQssL,SAASnlM,GAAaipE,GAErD,gBACKA,EACAvwC,EAAO7f,QAAQssL,aAIfz4M,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBAA2B25B,EAAO7f,QAAQorL,aAAek4L,IAElE,KAAK3jX,EAAMooD,gBAGT,OAFAu7T,EAAmBp9X,EAAM25B,EAAO7f,QAAQorL,cAAcjlM,QAAO,SAAC+iP,GAAD,OAASA,EAAI/hP,KAAO04B,EAAO7f,QAAQ7Y,MAEzFtT,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBAA2B25B,EAAO7f,QAAQorL,aAAek4L,IAClE,KAAK3jX,EAAMqoD,4BAGT,OAFAs7T,EAAmBp9X,EAAM25B,EAAO7f,QAAQorL,cAAcjlM,QAAO,SAAC+iP,GAAD,OAASA,EAAI/6L,eAAiBtuB,EAAO7f,QAAQyuC,WAAWtnD,MAE9GtT,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBAA2B25B,EAAO7f,QAAQorL,aAAek4L,IAClE,KAAK3jX,EAAMsoD,qBACTs7T,EAAgB,GADlB,2BAEE,YAA2Br9X,EAAMq9X,cAAjC,+CAAgD,KAArCn4L,EAAqC,QAC9Cm4L,EAAcn4L,GAAgB,IAHlC,6EAKE,OAAOv3M,OAAO+2B,OAAO,GAAI1kB,EAAOq9X,GAGpC,OAAOr9X,GA7DT,IAAYyZ,E,wJAAZ,O,mDAEA,IAAMwoP,EAAe,CACnBxsN,eAAgB,GAChBC,sBAAuB,GACvBC,qBAAsB,GAEtBzrC,gBAAiB,KACjBs8L,gBAAiB,GACjB62L,cAAe,K,kHCHF,WAAuC,IAA9Br9X,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAChD2jW,SACJ,OAAO3jW,EAAOt1B,MACZ,KAAKoV,EAAMymD,eACT,OAAOvyE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM4nD,qBACTrhE,mBAAYA,EAAZ,CAAmBusD,gBAAiB5yB,EAAO7f,QAAQyyC,kBACnD,MACF,KAAK9yC,EAAM6nD,oBACT,OAAO3zE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BusD,wCAAqBvsD,EAAMusD,iBAA3B,CAA4C5yB,EAAO7f,YAEvD,KAAKL,EAAM8nD,uBAUT,OATA+7T,EAA0Bt9X,EAAMusD,gBAAgBxrD,KAAI,SAACmpE,GACnD,OAAIA,EAAKjpE,KAAO04B,EAAO7f,QAAQ7Y,GAAaipE,GAE5C,gBACKA,EACAvwC,EAAO7f,YAIPnsB,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAEusD,gBAAiB+wU,IAErD,KAAK7jX,EAAM+nD,uBACT,OAAqC,IAAjCxhE,EAAMusD,gBAAgB7+D,OACjBsS,GAGTs9X,EAA0Bt9X,EAAMusD,gBAAgBtsD,QAAO,SAAC+iP,GAAD,OAASA,EAAI/hP,KAAO04B,EAAO7f,QAAQ7Y,MAEnFtT,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAEusD,gBAAiB+wU,KACrD,KAAK7jX,EAAMgoD,4BACT,OAAO9zE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAAEusD,gBAAiB,KAGvD,OAAOvsD,GA5CT,IAAYyZ,E,wJAAZ,O,mDAEA,IAAMwoP,EAAe,CACnB11M,gBAAiB,K,kHC2GJ,WAAuC,IAA9BvsD,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAChD+vR,GAAWA,EAAXA,cAAe1pT,GACnB,OAAO25B,EAAOt1B,MACZ,KAAKoV,EAAMy6C,gBAMT,OALKv6B,EAAO7f,QAAQm6C,WAETt6B,EAAO7f,QAAQpgB,WACxBrH,SAAS6C,KAAKoY,MAAMosU,SAAW,UAF/B//S,EAAO7f,QAAUyjX,EAAoBv9X,EAAO25B,EAAO7f,SAI9CnsB,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM27C,wBAmBT,OAlBKz7B,EAAO7f,QAAQu7C,oBACdr1D,EAAM81D,iBACRn8B,EAAO7f,QAAQg8C,eAAiB,IAE9B91D,EAAM44D,mBAAqBj/B,EAAO7f,QAAQpgB,WAC5CigC,EAAO7f,QAAQ8+C,iBAAmB,OAGjC,EAAD,qBACFj/B,EAAO7f,QAAQ67C,mBAAqBh8B,EAAO7f,QAAQu7C,kBAAoB17B,EAAO7f,QAAQu7C,kBAAkB91D,OAAS,IAE/GS,EAAMi0D,YAAcj0D,EAAMo0D,eAC5Bz6B,EAAO7f,QAAQs6C,cAAe,GAE5Bp0D,EAAMi0D,YAAcj0D,EAAMo0D,eAC5Bz6B,EAAO7f,QAAQs6C,cAAe,GAEhCz6B,EAAO7f,QAAQ2+C,uBAAyB9qE,OAAO+2B,OAAO,GAAI84W,GACnD7vY,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMm8C,yBAeT,OAdI51D,EAAM81D,iBACRn8B,EAAO7f,QAAQg8C,eAAiB,KAE7Bn8B,EAAO7f,QAAQ67C,oBAAsB31D,EAAM44D,mBAC9Cj/B,EAAO7f,QAAQ8+C,iBAAmB,OAEhC54D,EAAMw3D,YAAYmgR,eACfh+S,EAAO7f,QAAQ67C,oBAA6D,gBAAtCh8B,EAAO7f,QAAQ67C,qBAC1D31D,EAAMw3D,YAAYmgR,cAAgB,IAEhCh+S,EAAO7f,QAAQ67C,oBAAuBh8B,EAAO7f,QAAQ67C,mBAAmBviE,SAAS,WACnF,aAAE,cAAcqzF,QAAQ,CAACy5E,UAAW7tK,SAAS6C,KAAKshL,cAAe,KAEnE78I,EAAO7f,QAAQ2+C,uBAAyB9qE,OAAO+2B,OAAO,GAAI84W,GACnD7vY,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMguD,kBACX,KAAKhuD,EAAM86C,qBACX,KAAK96C,EAAMo7C,0BACX,KAAKp7C,EAAMu7C,yBACX,KAAKv7C,EAAMu8C,0BACX,KAAKv8C,EAAM08C,qBACX,KAAK18C,EAAM88C,wBACX,KAAK98C,EAAM09C,oBACX,KAAK19C,EAAM69C,sBACX,KAAK79C,EAAMm+C,wBACX,KAAKn+C,EAAMs+C,0BACX,KAAKt+C,EAAMy+C,uBACX,KAAKz+C,EAAM4+C,6BACX,KAAK5+C,EAAMo/C,uBACT,OAAOlrE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMi7C,mBACT,OAAO/mE,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,QADL,CACck9T,wBAAwB,KAE/C,KAAKv9T,EAAMi9C,6BACT,OAAO/oE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9By2D,sBAAuB9oE,OAAO+2B,OAAO,GAAI1kB,EAAMy2D,sBAAuB98B,EAAO7f,QAAQ28C,yBAEzF,KAAKh9C,EAAMo9C,qBACT,OAAOlpE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B42D,eAAgBjpE,OAAO+2B,OAAO,GAAI1kB,EAAM42D,eAAgBj9B,EAAO7f,QAAQ88C,kBAE3E,KAAKn9C,EAAMu9C,sBACT,OAAOrpE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B+2D,gBAAiBppE,OAAO+2B,OAAO,GAAI1kB,EAAM+2D,gBAAiBp9B,EAAO7f,QAAQi9C,mBAE7E,KAAKt9C,EAAMg+C,sBACT,OAAO9pE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bw3D,YAAa7pE,OAAO+2B,OAAO,GAAI1kB,EAAMw3D,YAAa79B,EAAO7f,QAAQ09C,eAErE,KAAK/9C,EAAMi/C,6BACT,OAAO/qE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9By4D,uBAAwB9qE,OAAO+2B,OAAO,GAAI1kB,EAAMy4D,uBAAwB9+B,EAAO7f,QAAQ2+C,0BAE3F,KAAKh/C,EAAMu/C,uBACT,OAAOrrE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B+4D,mBAAoBprE,OAAO+2B,OAAO,GAAI1kB,EAAM+4D,mBAAoBp/B,EAAO7f,QAAQi/C,sBAEnF,KAAKt/C,EAAM0/C,4BACT,OAAOxrE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bk5D,qBAAsBvrE,OAAO+2B,OAAO,GAAI1kB,EAAMk5D,qBAAsBv/B,EAAO7f,QAAQo/C,wBAEvF,KAAKz/C,EAAM8+C,6BACT,OAAO5qE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bk6S,gBAAiBl6S,EAAMk6S,gBAAkB,IAE7C,KAAKzgS,EAAMg8C,uCACT,OAAO9nE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9By9X,4BAA6Bz9X,EAAMy9X,4BAA8B,IAErE,KAAKhkX,EAAM2kD,uBACT,IAAKp+D,EAAMi0D,YAAct6B,EAAO7f,QAAQjQ,iBACtC,OAAOlc,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bi0D,YAAY,IAGhB,MACF,KAAKx6C,EAAM6kD,uBACT,OAAO3wE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B81D,gBAAgB,EAChBX,gCAAiC,OAKvC,OAAOu0P,GA1OT,I,IAAA,OAEYjwS,E,wJAAZ,OACA,QACA,QACA,Q,mDAEA,IAAM+jX,EAA6B,CACjCh0W,SAAS,EACTs4S,mBAAoB,GACpB7/O,eAAgB,KAChBwoK,cAAe,MAwBXwX,EAAe,CACnBhuM,YAAY,EACZG,cAAc,EACdE,eAAgB,GAChBG,aAAc,EACduiR,wBAAwB,EAExBjiR,oBAAoB,EACpBM,kBAAmB,KACnBooU,4BAA6B,EAC7B9nU,mBAAoB,GACpBG,eAAgB,GAChBC,gBAAiB,EAAAzgC,qBAAqBC,KACtC2gC,eAAgB,GAChBG,kBAAmB,GACnBC,kBAAmB,GACnBG,sBAAuB,CACrBk8I,cAAe,EACf+qL,SAAU,EACVC,cAAe,IAEjB/mU,eAAgB,CACd21C,oBAAqB,GACrBqxR,OAAQ,IAKV1mU,UAAW,EACXG,aAAa,EACbG,YAAa,CACXmyC,QAAQ,EACRpqG,OAAQ,GACRs6E,cAAe,GACfllD,SAAU,CAACthB,EAAG,EAAGC,EAAG,GACpBqkU,cAAe,IAEjBhgR,kBAAkB,IAAAigF,oBAAA,4CAA4C,GAC9D9/E,oBAAoB,EACpBG,iBAAkB,GAClBG,uBAAuB,EACvBjD,gCAAiC,KACjC+kP,gBAAiB,EACjB2jF,kBAAmB,EACnBplU,uBAAwB9qE,OAAO+2B,OAAO,GAAI84W,GAC1C5kU,iBAAkB,KAClBG,mBAAoBprE,OAAO+2B,OAAO,GAnEA,CAClC8E,SAAS,EACTgyF,KAAM,EACNsiR,kBAAmB,KACnBr8D,UAAU,EACVwW,UAAU,EACVF,iBAAkB,KAClBC,mBAAoB,OA6DpB9+Q,qBAAsBvrE,OAAO+2B,OAAO,GA1DA,CACpC8E,SAAS,EACTooE,YAAa,KACb6vO,UAAU,EACVwW,UAAU,EACVltS,KAAM,EACN5sC,IAAK,EACLrF,OAAQ,KAsDJykY,EAAsB,SAACv9X,EAAO8Z,GAsBlC,OArBI9Z,EAAMo0D,eACRt6C,EAAQs6C,cAAe,GAKrBp0D,EAAM81D,iBACRh8C,EAAQg8C,eAAiB,IAEvB91D,EAAM83D,qBACRh+C,EAAQg+C,oBAAqB,GAE3B93D,EAAMw3D,YAAYmgR,gBACpB33U,EAAMw3D,YAAYmgR,cAAgB,IAKC,WAAjCtlV,SAAS6C,KAAKoY,MAAMosU,WACtBrnV,SAAS6C,KAAKoY,MAAMosU,SAAW,IAE1B5/T,I,0ICtFM,WAAsC,IAA7B9Z,EAA6B,uDAArBiiQ,EAActoO,EAAO,aACnD,OAAQA,EAAOt1B,MACb,KAAKoV,EAAMquD,yBACX,KAAKruD,EAAMsuD,0BACX,KAAKtuD,EAAMuuD,kCACX,KAAKvuD,EAAMwuD,4CACX,KAAKxuD,EAAMyuD,8BACX,KAAKzuD,EAAM0uD,+BACX,KAAK1uD,EAAM2uD,8BACX,KAAK3uD,EAAM4uD,yCACX,KAAK5uD,EAAM6uD,kCACX,KAAK7uD,EAAM8uD,+BACX,KAAK9uD,EAAMgvD,oCACX,KAAKhvD,EAAMivD,sCACX,KAAKjvD,EAAM+uD,oCACX,KAAK/uD,EAAMkvD,2BACT,OAAOh7E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAM27C,wBACT,OAAOznE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B+9X,kBAAmBpkW,EAAO7f,QAAQu7C,mBAAqBr1D,EAAM+9X,kBAC7DttO,kBAAmB92H,EAAO7f,QAAQu7C,kBAAoB,GAAKr1D,EAAMywJ,kBACjEI,4BAA4B,IAAA71C,iCAAgCrhF,EAAO7f,QAAQu7C,qBAG/E,KAAK57C,EAAMm8C,yBACT,OAAOjoE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BuwJ,mBAAoB52H,EAAO7f,QAAQ67C,oBAAsB31D,EAAMuwJ,mBAC/DV,iBAAgBl2H,EAAO7f,QAAQ67C,oBAAsB31D,EAAM6vJ,gBAAwB7vJ,EAAM6vJ,cACzFQ,wBAAyB12H,EAAO7f,QAAQ67C,oBAAsB31D,EAAMqwJ,uBAAyB,GAAKrwJ,EAAMqwJ,yBAG5G,KAAK52I,EAAMy6C,gBACT,OAAOvmE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B+9X,mBAAqBpkW,EAAO7f,QAAQm6C,YAAcj0D,EAAM+9X,kBAAqB,KAAO/9X,EAAM+9X,kBAC1FxtO,oBAAsB52H,EAAO7f,QAAQm6C,YAAcj0D,EAAMuwJ,mBAAsB,KAAOvwJ,EAAMuwJ,mBAC5FE,kBAAmB,GACnBR,uBAAuB,EACvBE,8BAA+B,KAC/BU,2BAA6Bl3H,EAAO7f,QAAQm6C,WAAiBj0D,EAAM6wJ,2BAAV,EACzDR,uBAAwB,KAG5B,KAAK52I,EAAM08C,qBACT,OAAOxoE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BixJ,4BAA8Bt3H,EAAO7f,QAAQo8C,gBAAkBl2D,EAAMixJ,4BAA+B,KAAOjxJ,EAAMixJ,8BAGrH,KAAKx3I,EAAM2kD,uBACT,OAAOzwE,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BywJ,kBAAmB,GACnBJ,uBAAwB,KAG5B,KAAK52I,EAAM6kD,uBACT,GAAIt+D,EAAMqwJ,uBACR,OAAO1iK,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BqwJ,uBAAwB,KAKhC,OAAOrwJ,GApFT,IAAYyZ,E,wJAAZ,OACA,QAEA,IAAMwoP,EAAe,CACnBpyG,eAAe,EACfE,eAAgB,KAChBE,uBAAuB,EACvBE,8BAA+B,KAC/BE,uBAAwB,GACxB0tO,kBAAmB,KACnBxtO,mBAAoB,KACpBE,kBAAmB,GACnBE,2BAA2B,EAC3BE,2BAA4B,EAC5BE,yBAAyB,EACzBE,4BAA6B,KAC7BE,6BAA6B,EAC7BE,+BAA+B,EAC/BE,cAAe,K,0ICXF,WAAuC,IAA9BvxJ,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAChD+vR,GAAWA,EAAXA,cAAe1pT,GACnB,OAAO25B,EAAOt1B,MACZ,KAAKoV,EAAMmuD,+BACT,OAAOj6E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bw3S,0CAA8B79Q,EAAO7f,QAAQ09R,4BAEjD,KAAK/9R,EAAMouD,gCACT,OAAOl6E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9By3S,2CAA+B99Q,EAAO7f,QAAQ29R,6BAGpD,OAAOiS,GAnBT,IAAYjwS,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnBu1C,yBAA0B,GAC1BC,0BAA2B,K,0ICId,WAAsC,IAA7Bz3S,EAA6B,uDAArBiiQ,EAActoO,EAAO,aACnD,OAAQA,EAAOt1B,MACb,KAAKoV,EAAMmvD,sBACX,KAAKnvD,EAAMovD,wBACX,KAAKpvD,EAAMqvD,sBACT,OAAOn7E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAGhB,OAAO9Z,GAjBT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnB00E,cAAc,EACdE,WAAY,GACZ7kK,YAAa,I,kHCiCA,WAAsC,IAA7BhyK,EAA6B,uDAArBiiQ,EAActoO,EAAO,aACnD,OAAQA,EAAOt1B,MACb,KAAKoV,EAAMsvD,iBACT,OAAOp7E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACJ25B,EAAO7f,QAAQpqB,KAAOiqC,EAAO7f,QAAQ3pB,QAE1C,KAAKspB,EAAM0vD,kBACT,OAAOx7E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B2jJ,iCACK3jJ,EAAM2jJ,iBADX,gBACiChqH,EAAO7f,QAAQpqB,KAAOiqC,EAAO7f,QAAQ3pB,UAG1E,KAAKspB,EAAM2vD,iBACT,OAAOz7E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9BgoK,gCACKhoK,EAAMgoK,gBADX,gBACgCruI,EAAO7f,QAAQpqB,KAAOiqC,EAAO7f,QAAQ3pB,UAGzE,KAAKspB,EAAMuvD,cACT,OAAOr7E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bg+X,0BACKh+X,EAAMg+X,UADX,gBAC0BrkW,EAAO7f,QAAQpqB,KAAOiqC,EAAO7f,QAAQ3pB,UAGnE,KAAKspB,EAAMwvD,gBACT,OAAOt7E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B0iO,4BAAgB1iO,EAAM0iO,WAAe/oM,EAAO7f,QAAQ4oN,cAExD,KAAKjpN,EAAMyvD,oBACT,OAAOv7E,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B4iO,gCAAoB5iO,EAAM4iO,eAAmBjpM,EAAO7f,QAAQ8oN,kBAEhE,KAAKnpN,EAAM4vD,qBACT,OAAO17E,OAAO+2B,OAAO,GAAI1kB,EAAOrS,OAAO+2B,OAAO,GAAIiV,EAAO7f,UAE7D,OAAO9Z,GAzET,IAAYyZ,E,wJAAZ,O,mDAEA,IAAMwoP,EAAe,CACnB+7H,SAAU,CACRC,WAAY,GACZC,SAAU,GACVC,SAAU,GACVC,QAAS,GACTC,IAAK,GACLrjW,QAAS,OAIX0nM,WAAY,GACZE,eAAgB,GAChB07J,6BAA8B,EAC9BC,4BAA6B,EAC7B56O,gBAAiB,CACft9B,SAAU,GACV28B,SAAU,GACVklB,SAAU,GACVjlB,KAAM,GACNjjJ,MAAO,GACPkjJ,WAAY,GACZ/nH,OAAQ,IAEV6sI,eAAgB,CACd3hD,SAAU,GACV28B,SAAU,GACVklB,SAAU,GACVjlB,KAAM,GACNjjJ,MAAO,GACPkjJ,WAAY,GACZ/nH,OAAQ,IAEV8sI,uBAAuB,I,0IC7BV,WAAuC,IAA9BjoK,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAMmT,mBACT,IAAM4xW,EAAYx+X,EAAM8sB,cAAc9sB,EAAM8sB,cAAcp/B,OAAS,GAQnE,OAPI8wY,EACEpxR,KAAK2W,UAAUy6Q,KAAepxR,KAAK2W,UAAUpqF,EAAO7f,QAAQ6S,cAC9D3sB,EAAM8sB,cAAc9+B,KAAK2rC,EAAO7f,QAAQ6S,aAG1C3sB,EAAM8sB,cAAc9+B,KAAK2rC,EAAO7f,QAAQ6S,aAEnCh/B,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9B8sB,cAAe9sB,EAAM8sB,gBAGzB,KAAKrT,EAAMsT,mBACT,OAAOp/B,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAIhB,OAAO9Z,GA7BT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnBn1O,cAAe,K,0ICwBF,WAAwC,IAA9B9sB,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAErD,OAAQA,EAAOt1B,MAEb,KAAKoV,EAAM6vD,qBACX,KAAK7vD,EAAM8vD,qBACX,KAAK9vD,EAAM+vD,2BACX,KAAK/vD,EAAMgwD,qBAGT,OAAO97E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAEd,KAAKL,EAAMm8C,yBACT,IAAK51D,EAAMk4G,gBAAkBv+E,EAAO7f,QAAQ67C,mBAAoB,CAC9D,IAAM2/O,EAAsBmpF,EAAuB9kW,EAAO7f,QAAQ67C,mBAAoB,KAAM31D,EAAMs1S,qBAClG,GAAIA,IAAwBt1S,EAAMs1S,oBAChC,OAAO3nT,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bs1S,wBAIN,OAAOt1S,EAET,KAAKyZ,EAAM27C,wBACT,IAAKp1D,EAAMk4G,gBAAkBv+E,EAAO7f,QAAQu7C,kBAAmB,CAC7D,IAAMigP,EAAsBmpF,EAAuB9kW,EAAO7f,QAAQu7C,kBAAkB91D,OAAQo6B,EAAO7f,QAAQu7C,kBAAmBr1D,EAAMs1S,qBACpI,GAAIA,IAAwBt1S,EAAMs1S,oBAChC,OAAO3nT,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Bs1S,yBASV,OAAOt1S,GAjET,IAAYyZ,E,wJAAZ,OACA,QACA,QAEA,IAAMwoP,EAAe,CACnBkzC,gBAAgB,EAChBj9L,gBAAgB,EAChBo9L,oBAAqB,EAAA9mS,OAAOyvF,KAC5Bu3M,gBAAgB,GAKZipF,EAAyB,SAACl/X,GAAiD,IAAzCm/X,EAAyC,uDAA3B,KAAMC,EAAqB,uDAAP,GAClExqX,GAAS,IAAAC,oBACf,OAAKD,EAAOy+E,wBAAwBrzF,GAAQ,GAGxCm/X,EACQ,EAAAlwX,OAAOyvF,KAAjB,IAAyB1+F,EAAzB,KAAmCm/X,EAAY9hY,UAAU2+B,KAAOmjW,EAAY9hY,UAAUmF,mBAEpF48X,GAAeA,EAAYvrY,SAASmM,EAAS,KACxCo/X,EAEC,EAAAnwX,OAAOyvF,KAAjB,IAAyB1+F,EARhB,EAAAiP,OAAOyvF,O,0ICTH,WAAuC,IAA9Bj+F,EAA8B,uDAAtBiiQ,EAActoO,EAAQ,aAEpD,OAAOA,EAAOt1B,MAEZ,KAAKoV,EAAM8qD,uBACT,OAAIvkE,EAAM6c,YACDlvB,OAAO+2B,OAAO,GAAI1kB,GAGpBrS,OAAO+2B,OAAO,GAAI1kB,EAAO,CAC9Buc,WAAYod,EAAO7f,QAAQyC,YAAc,EAAI,EAAIod,EAAO7f,QAAQyC,aAGpE,KAAK9C,EAAM+qD,4BACT,OAAO72E,OAAO+2B,OAAO,GAAI1kB,GAAlB,gBACF25B,EAAO7f,UAKhB,OAAO9Z,GA3BT,IAAYyZ,E,wJAAZ,OAEA,IAAMwoP,EAAe,CACnBplP,aAAc,EACdN,WAAY,I,gFCJd,I,IAAA,MACA,OACA,O,IACA,M,mDAEA,IAAMqiX,EAAkB,SAACr6R,GAAU,IAE1B1zG,EAA4B0zG,EAA5B1zG,SAAU2xB,EAAkB+hF,EAAlB/hF,eAGjB,OADoB3hB,MAAMC,QAAQ0hB,EAAe3xB,KAAc2xB,EAAe3xB,GAAUnD,OAMtF,+BAAKm2F,UAAU,qBACZrhE,EAAe3xB,GAAUkQ,KAAI,SAAC7P,GAC7B,OACE,gCAAM2yF,UAAU,0BAA0BpzF,IAAKS,GAC7C,4CAAkB+P,GAAI/P,SARvB,MAgBX0tY,EAAgBzjP,UAAY,CAC1BtqJ,SAAU,UAAU4qC,OAAOy2E,Y,WAYd,IAAA8uC,aACb,IAAAj8C,UAVsB,SAACxzG,GAAU,MACEA,EAAMwc,UACzC,MAAO,CACL/T,SAH+B,EAC1BA,SAGLwoB,eAJ+B,EAChBA,kBASjB,CAAyBo8W,K,mHCzC3B,O,OACA,O,IACA,Q,IACA,O,IAEA,QACA,SACA,Q,8DAoDe,IAAA75R,UAPS,SAACxzG,GAEvB,MAAO,CACL6f,eAFqB7f,EAAMqN,mBAMhB,EAvCY,SAAC2lG,GAAU,IAE7BnzF,EAAkBmzF,EAAlBnzF,eAF6B,GAGV,IAAAgpI,UAAS,MAHC,qBAG7B/gG,EAH6B,KAGtBwlV,EAHsB,KAK9BC,EAhBoB,SAAC1tX,GAC3B,OAAIA,EAAey6L,SACV,mBACEz6L,EAAeE,QACjB,kBACEF,EAAe0nI,SACjB,mBAEF,eAQkBimP,CAAoB3tX,GAwB7C,OAtBA,IAAAwpG,YAAU,WACR,IAAM,mCAAW,0GACa,UAAM7qH,IAAI,EAAA8kL,kBAAoB,iBAAmBiqN,GAD9D,QACTE,EADS,SAEMA,EAAc9xY,MACjC2xY,EAASG,EAAc9xY,MAHV,kDAAX,8CAQNkE,OAAO6tY,aAAe,SAACC,GACrB,IAAMpsF,GAAiB,aAAE,EAAA/9S,YAAc,uBAAyB,qBAC1Di+S,EAAc3gT,SAASg9F,cAAT,gBAAuC6vS,EAAvC,KAEdh/N,EAAY8yI,EAAcA,EAAY5qB,UAAY,GAAK,EACzDloH,GACF4yI,EAAersN,QAAQ,CAACy5E,aAAY,QAKvC,IAEI7mH,EAAQ,+BAAKksN,wBAAyB,CAAEC,OAAQnsN,KAAc,4C,wGCjDvE,aACA,QACA,S,IACA,O,IACA,QACA,QACA,QACA,QACA,SACA,QACA,QACA,SACA,Q,IACA,M,mDAEgCo3R,EAAnBA,iBAAmB,WAAM,IAC7Bj/J,GAAyB,IAAAkd,4BAAzBld,sBACDkY,GAAU,IAAAiF,cAETtoK,EADO,UAAMjrB,WACSC,UAAtBgrB,aAED84W,EAAe,SAAC94W,EAAckrJ,IAClC,IAAAF,eAAchrJ,EAAckrJ,EAA8BC,GACjC,UAAMp2K,WAAWwO,YAAnCwZ,iBAGLhyB,OAAOu2F,YAAW,WAChB,UAAMzqE,UAAS,IAAAwzI,+BAA6B,MAC3C,KACHg5B,EAAQ17L,MAAK,IAAA2/F,eAActnE,IAC3BqjK,EAAQ17L,KAAR,WAsCJ,MAAO,CAACwiV,cAlCc,WAAyC,IAAxCj/J,IAAwC,0DAM7D,IAAAlqH,uBACA,UAAUjtB,eAAe,cACzB,UAAMld,UAAS,IAAAogG,oBAAmB,OAElC,IAAM8hR,EAAY,WAChB,IAAI,aAAS/4W,IAAiBA,EAAa9mB,QAAU8mB,EAAa9mB,SAAW,EAAAmD,cAAcC,MACzF,cACEw8X,EAAa94W,EAAckrJ,IAE3B,IAAAF,eAAc,YAAaE,EAA8BC,OAGtD,CACL,IAAMF,EAAiBjrJ,GAAiC,SAAjBA,EAA0BA,EAAe,aAChF,IAAAgrJ,eAAcC,EAAgBC,EAA8BC,GAE9D,UAAMt0J,UAAS,IAAAkJ,iBAAgB,WAG7B,IAAA5nB,aACFmpF,YAAW,WACTy3S,MACC,GAEHA,Q,6HChEN,IAAY9jP,E,wJAAZ,MAEiC+jP,EAApBA,kBAAoB,CAC/Bp+X,GAAIq6I,EAAUzpC,OACdwU,SAAUi1B,EAAU7/G,OACpBjB,MAAO8gH,EAAU7/G,QAGc6jW,EAApBA,kBAAoB,CAC/Br+X,GAAIq6I,EAAUzpC,OACdwU,SAAUi1B,EAAU7/G,S,sGCVtB,I,EAAA,O,oCAEO,IAAMgpQ,EAAiBA,EAAjBA,eAAiB,CAC5BxmB,iBAAiB,EACjBshH,cAAe,GACfhgL,kBAAmB,I,UAGN,UAAMxxC,cAAc02H,I,qGCRnC,I,IAAA,MACA,O,IACA,M,IACA,Q,mDAEO,IAAM+6F,EAAgBA,EAAhBA,cAAgB,SAACC,EAAYv5X,GAAqC,IAAnB1K,EAAmB,uDAAP,GAC/DmkF,EAA+E8/S,EAA/E9/S,mBAAoBvgE,EAA2DqgX,EAA3DrgX,cAAewgE,EAA4C6/S,EAA5C7/S,6BAA8BJ,EAAcigT,EAAdjgT,WAClEt1E,EAAkBkV,GAAiBwgE,EACzC,OAAOpkF,EAAUtC,MAAK,SAAAmG,GACpB,OAAQA,EAASE,SAAWkgY,EAAWlgY,QAAYF,EAASoC,eAAiByE,IAAsB7G,EAASC,YAAY1C,UAAU4C,kBAC7HmgF,GAAsBH,EAAWt5E,IAAqBgE,IAAoBA,EAAgB4K,SAAS1hB,SAAS,eAG/GssY,EAAuB,SAACn7R,GAAU,IAE/B5kB,EAAoH4kB,EAApH5kB,mBAAoBvgE,EAAgGmlF,EAAhGnlF,cAAewgE,EAAiF2kB,EAAjF3kB,6BAA8BJ,EAAmD+kB,EAAnD/kB,WAAYt5E,EAAuCq+F,EAAvCr+F,iBAAkB3G,EAAqBglG,EAArBhlG,OAAQ/D,EAAa+oG,EAAb/oG,UAQ9G,OANiBgkY,EACf,CAAC7/S,qBAAoBvgE,gBAAewgE,+BAA8BJ,aAAYjgF,UAC9E2G,EACA1K,GAQA,+BAAKqoF,UAAU,0EACb,mCAAQ2R,KAAK,YAAYkP,MAAM,WAL1B,MAUXg7R,EAAqBvkP,UAAY,CAC/BtV,YAAa,UAAUj1I,OAAOshH,Y,WAiBjB,IAAAnN,UAdS,SAACxzG,EAAOqvP,GAC9B,MAAO,CACL16O,iBAAkB3U,EAAM4U,YAAYD,iBACpCkZ,cAAewhO,EAAS/6G,YAAYzmH,cACpCwgE,6BAA8BghK,EAAS/6G,YAAYjmD,6BACnDJ,WAAYohK,EAAS/6G,YAAYrmD,WACjCG,mBAAoBihK,EAAS/6G,YAAYlmD,mBACzCpgF,OAAQqhP,EAAS/6G,YAAYtmI,OAC7B/D,UAAWjK,EAAM8J,UAAUG,UAC3B4V,eAAgB7f,EAAMqN,mBAGC,GAEZ,CAA6C8gY,I,4ICpD5D,O,OACA,OACA,O,IAEA,O,IACA,OACA,QACA,Q,IACA,O,IACA,OACA,QAMA,QACA,QACA,SACA,Q,mDAEO,IAAMC,EAA6BA,EAA7BA,2BAA6B,SAACp7R,GAAU,IAG7C,EAcA,EAhBE6Y,EAAqF7Y,EAArF6Y,wBAAyB1jH,EAA4D6qG,EAA5D7qG,SAAU4iH,EAAkD/X,EAAlD+X,gBAAiBx6F,EAAiCyiF,EAAjCziF,eAAgBy6F,EAAiBhY,EAAjBgY,aAEtEqjR,GAAA,gCAAoB,2FACxBxiR,EAAwB,CACtBzT,QAAQ,EACRo+L,eAAgB,OAEdxrL,IAAiB,EAAAjrE,eAAeE,YAClC1vB,EAAe,CAACvF,WAAY,EAAGiN,SAAS,EAAMi4S,UAAU,IAE1DnlN,EAAgB,EAAAhrE,eAAeE,YARP,UASlB,IAAAgkM,gCAA+B1qN,MAAK,SAAA96B,OATlB,kDAApB,4CAcA6vY,GAAA,gCAAgB,2FACpBziR,EAAwB,CACtBzT,QAAQ,EACRo+L,eAAgB,OAEdxrL,IAAiB,EAAAjrE,eAAeI,kBAClC5vB,EAAe,CAACvF,WAAY,EAAGiN,SAAS,EAAMi4S,UAAU,IAE1DnlN,EAAgB,EAAAhrE,eAAeI,kBARX,UASd,IAAA8jM,gCAA+B1qN,MAAK,SAAA96B,OATtB,kDAAhB,4CAcA8vY,EAAiBpmY,EAAW,mCAAqC,6BACjEqmY,EAAcrmY,EAAW,oCAAsC,8BAErE,OACE,wCACE,mCAAQmqF,UAAW,wCACX88M,UAEE,uCACE,sCAAYj8L,MAAQ,UAAa,UAAOznG,aAAa6wH,WAGzDioD,QAAS,kBAAM6pN,EAAkB,EAAAtqW,qBAAqBE,UAC1D,4CAAkBv0B,GAAI6+X,KAE1B,mCAAQj8S,UAAW,wCACX9H,UAAU,EACV4kN,UACE,uCACE,kDAAwBj8L,MAAQ,UAAa,UAAOznG,aAAa6wH,WAGrEioD,QAAS,kBAAM8pN,EAAc,EAAAvqW,qBAAqBG,OAClD,4CAAkBx0B,GAAI8+X,OAe9Bx2M,EAAqB,CACzB/rE,wCACA9a,oCACA0a,kDACAQ,wCACAha,wCACA0Y,kCACAx6F,iC,WAGa,IAAAk/H,aACb,IAAAj8C,UApBsB,SAACxzG,GAEvB,MAAO,CACLmI,SAFiBnI,EAAMgR,YAAlB7I,SAGLmqG,uBAAwBtyG,EAAMyV,UAAU68F,uBACxC4Z,YAAalsH,EAAMyV,UAAUy2G,YAC7BlB,aAAchrH,EAAMyV,UAAUu1G,gBAcPgtE,EAAzB,CAA6Co2M,K,qKCrG/C,O,OACA,OACA,SACA,Q,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,O,IACA,O,IACA,OACA,Q,IACA,MACA,QACA,Q,mDAEO,IAAMK,EAAeA,EAAfA,aAAe,SAACjjT,GAC3B,UAAUn2B,kBACV,UAAarF,aAAY,GACzBnwD,OAAO6uY,cAAgBljT,EAHmB,OAIS,IAAA67C,0BAJT,qBAInCG,EAJmC,KAIfC,EAJe,KAM1C,OAAQj8C,GACN,IAAK,IACL,IAAK,KACH,UAAUztB,SAAS,IAAI,EAAJ,QAAiB,SAAU,KAAMypE,EAAoBh8C,GACxE,MACF,IAAK,KACL,IAAK,MACH,UAAUztB,SAAS,IAAI,EAAJ,QAAoB,UAAO4wU,WAAY,SAAU,KAAMnnQ,EAAoBh8C,GAC9F,MACF,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,OACH,UAAUztB,SAAS,IAAI,EAAJ,QAAsB,UAAO4wU,WAAY,YAAa,KAAMnnQ,EAAoBh8C,GACnG,MACF,IAAK,IACL,IAAK,KACH,UAAUztB,SAAS,IAAI,EAAJ,QAAc,UAAO4wU,WAAY,YAAa,KAAMnnQ,EAAoBh8C,GAC3F,MACF,IAAK,KACL,IAAK,MACH,UAAUztB,SAAS,IAAI,EAAJ,QAAc,UAAO4wU,WAAY,YAAa,KAAMnnQ,EAAoBh8C,GAK3FA,EAAW3pF,SAAS,MACtB,UAAUk8D,SAAS,IAAI,EAAJ,QAAW,UAAO4wU,WAAW,GAAO,SAAU,KAAMlnQ,EAAsBj8C,GAS3F3rF,OAAO+xD,YAAc,KAAO/xD,OAAOwqD,WAKvC,IACMkW,EADQ,UAAM12D,WACa4L,UAAU8qD,mBAE3C,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,KAGhDquU,EAAiBA,EAAjBA,eAAiB,SAAC38M,GAC7B,IAAMxjL,EAAQ,UAAM5E,WACdgnG,EAAcpiG,EAAM6oD,cAAcu5C,YAClChB,EAAkBphG,EAAM6oD,cAAcu4C,gBACtCg/R,EAAqBA,GAArBA,qBAAyBh+R,IACzBi+R,EAAkBD,EAAmBxqX,WAAU,SAAAknE,GAAA,OAAcA,EAAWwjT,YAAcl/R,KACxFi/R,GAAmB,GACrBD,EAAmBC,GAAiBtjT,WAAaymG,GACjD,IAAArhF,oBAAmBi+R,KAEnB,IAAAj+R,oBAAA,wBAAuBC,GAAvB,CAAoC,CAACk+R,UAAWl/R,EAAiBrkB,WAAYymG,OAgF3E+F,EAAqB,CACzBzsE,kDACA3a,yC,WAIa,IAAA4C,UAlBS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClCQ,eAAgB/vG,EAAMs3D,cAAcy4C,eACpCc,YAAa7wG,EAAMs3D,cAAcu5C,YACjCprF,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChCjF,OAAQxgB,EAAM4U,YAAY4L,OAC1BqvF,gBAAiB7vG,EAAMs3D,cAAcu4C,mBAUDmoF,EAAzB,EAlFQ,SAAChlF,GAAU,IAEzB7D,EAA8E6D,EAA9E7D,WAAYI,EAAkEyD,EAAlEzD,aAAcsB,EAAoDmC,EAApDnC,YAAahB,EAAuCmD,EAAvCnD,gBAAiBe,EAAsBoC,EAAtBpC,mBACzDo+R,EAAWz/R,GAA+B,YAAfJ,EAC3B8/R,GAAa,IAAAtnP,QAAO,KAE1B,IAAAt+B,YAAU,WACR,IAAM7nE,EAAUplD,OAAOyhB,OAAOoxX,EAAW/yR,SACtC8yR,GACD,IAAArqF,gBAAenjQ,IAEf,IAAAojQ,aAAYpjQ,KAGb,CAACwtV,IAEJ,IAAM,EAAA59E,GAAA,gCAAoB,WAAO9oN,EAAO2pF,GAAd,6EACxBvyL,QAAQ4B,IAAI,WAAY2wL,GACxB3pF,EAAM7V,iBACN6V,EAAM9V,kBACA08S,EAAe,UAAUr8U,YAAY12D,OACnB00G,EAAYlpG,MAAK,SAAA4jF,GAAA,OAAcA,EAAWwjT,YAAcl/R,MAEzDq/R,GACrB33V,EAA0B06I,GAAU,GACpC28M,EAAe38M,KAEfw8M,EAAax8M,GACbrhF,0BAAuBC,GAAvB,CAAoC,CAACk+R,UAAWl/R,EAAiBrkB,WAAYymG,OAZvD,kDAApB,+CAiBA16I,EAA4B,SAACi0C,GAA0C,IAA9BkgC,EAA8B,wDAC3E1Y,EAAMuY,yBAAwB,EAAM//B,EAAYkgC,IAUlD,OACE,+BAAKp5B,UAAW,gBAAkB6c,GAAcI,GAAiC,YAAjBA,EAA6B,YAAc,IAAK4/R,YAAU,WACxH,+BAAK78S,UAAU,eAEX,EAAA3zC,wBAAwBnvC,KAAI,SAACmpE,EAAMrjE,GAAP,OAC1B,kCAAQg9E,UAAU,mCACVpzF,IAAKoW,EACLoyI,IAAK,SAAAksG,GAAA,OAAMq7I,EAAW/yR,QAAQ5mG,GAASs+O,GACvCw7I,cAAaz2T,EACb6rG,QAAS,SAAC3mL,GAAD,OAAOuzT,EAAkBvzT,EAAG86E,e,mHC1IzD,OACA,QACA,Q,6DAEyB,SAACw7G,GAAgF,IAAvExoG,EAAuE,uDAA1D,GAAI0jT,EAAsD,2DAChE,IAAAxmP,UAAS,IADuD,qBACjGymP,EADiG,KACnFC,EADmF,QAEtE,IAAA1mP,WAAS,GAF6D,qBAEjG0yD,EAFiG,KAEtFi0L,EAFsF,KAIlG5sX,GAAS,IAAA4mI,UAAQ,kBAAM,IAAA3mI,sBAAoB,IAkDjD,OAhDA,IAAAwmG,YAAU,WACR,IAAM,mCAAe,0GACnBmmR,GAAa,GACPC,EAAkB,GAFL,8BAIEt7M,EAJF,qEAIRnmL,EAJQ,QAKXsW,EAAe1B,EAAOgb,wBAAwB5vB,GAChD2+E,EAAW,IAEXroE,EARa,oBAUVA,EAAaw1E,qBAAwBx1E,EAAaokG,kBAVxC,mCAWP,IAAAruB,6BAA4B/1E,GAXrB,QAcfqoE,EAAW/pE,EAAOo9E,sBAChB,CAAE98E,KAAMoB,GACR,GACAqnE,EACA,KACA,MACA,GACA,CAAEw7C,aAAc,KAAMC,gBAAiB,OAGrCioQ,IACF1iT,EAAWA,EAASj+E,QAAO,SAAA3D,GACzB,OAAOA,EAAQmY,MACVnY,EAAQmY,KAAK7X,WACbiE,MAAMC,QAAQxE,EAAQmY,KAAK7X,UAAUi4O,qBACrCv4O,EAAQmY,KAAK7X,UAAUi4O,mBAAmBnnP,OAAS,MA7B7C,QAkCjBszY,EAAgBzhY,GAAU,CACxB0hY,KAAM/iT,EACNroE,aAAcA,GApCC,wQAwCnBirX,EAAgBE,GAChBD,GAAa,GAzCM,8EAAf,gDA6CL,CAACr7M,EAASxoG,EAAY/oE,EAAQysX,IAE1B,CAAEC,eAAc/zL,e,8EC1DzB,I,IAAA,MACA,OACA,O,IAEA,O,IACA,S,IACA,S,IACA,SAEA,QACA,Q,0DAEA,IA4CMvjB,EAAqB,CACzB/0H,mC,WAGa,IAAAwsF,aACb,IAAAj8C,UAfsB,SAACxzG,GAAU,MACIA,EAAM0zG,UAE3C,MAAO,CACL7wC,aAJ+B,EAC1BA,aAILK,aAL+B,EACZA,aAKnB/6D,SAJiBnI,EAAMgR,YAAlB7I,YAakB6vL,EAAzB,EAjD2B,SAAChlF,GAAU,IAE/B7wF,EAA+D6wF,EAA/D7wF,KAAM0gD,EAAyDmwC,EAAzDnwC,aAAcK,EAA2C8vC,EAA3C9vC,aAAcD,EAA6B+vC,EAA7B/vC,gBAAiB96D,EAAY6qG,EAAZ7qG,SAsB1D,OACE,mCAAY8oP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC86E,SAAU3nB,EACVyvB,UAAW,8BAAgCnqF,EAAW,GAAK,qBAC3Dq8K,QAxBU,WACtB,IAAMmrN,EAA+B,IAAjBzsU,EAAqB,EAAIA,EAAe,EAC5D,UAAUr6B,eAAe,EAAAwB,6BAA6BoB,uBAAyBkkW,GAC/E1sU,EAAgB0sU,KAGE,WAClB,OAAQzsU,GACN,KAAK,EACL,QACE,OAAO,mCAAUnnD,MAAO,CAAEwuC,SAAU,MACtC,KAAK,EACH,OAAO,mCAAgBxuC,MAAO,CAAEssH,UAAW,mBAC7C,KAAK,EACH,OAAO,wCACT,KAAK,EACH,OAAO,yCASRunQ,S,8FCzCP,O,OACA,OACA,SACA,QACA,W,IACA,M,IACA,QAEA,QACA,Q,IACA,S,IACA,S,IACA,SACA,QAIA,SACA,Q,mDAEA,IAAMC,EAA6B,SAAC78R,GAAU,IACpCpqF,EACwEoqF,EADxEpqF,aAAczgB,EAC0D6qG,EAD1D7qG,SAAU0lB,EACgDmlF,EADhDnlF,cAAeymK,EACiCthF,EADjCshF,kBAAmBtmL,EACcglG,EADdhlG,OAAQ8hY,EACM98R,EADN88R,kBAAmB/pX,EACbitF,EADajtF,iBAC3F6sF,EAA8EI,EAA9EJ,mBAAoB1vC,EAA0D8vC,EAA1D9vC,aAAcl9C,EAA4CgtF,EAA5ChtF,gBAAiB84I,EAA2B9rD,EAA3B8rD,uBAFT,EAGE,UAAMjW,SAAS,GAHjB,qBAGrCknP,EAHqC,KAGpBC,EAHoB,KAItCC,GAAe,IAAAtoP,QAAO,MAJgB,GAKE,IAAAkB,UAAS,GALX,qBAKrCqnP,EALqC,KAKpBC,EALoB,QAMd,IAAAtnP,WAAS,GANK,qBAMrC/5F,EANqC,KAM5BuzM,EAN4B,QAOF,IAAAx5G,UAAS,MAPP,qBAOrCw4F,EAPqC,KAOtB+uJ,EAPsB,QAQlB,IAAAvnP,UAAS,KARS,qBAQrCxhJ,EARqC,KAQ9BgpY,EAR8B,MAU5C,IAAAhnR,YAAU,WACRgnR,EAASloY,EAAW,IAAM,OACzB,CAACA,KAEJ,IAAAkhH,YAAU,WACR,IAAMwpI,EAAe,WACfo9I,EAAa/zR,SACfi0R,EAAmBF,EAAa/zR,QAAQ1C,eAItC82R,EAAsB,WAC1B,IAAMC,EAAiB,IAAIC,eAAe39I,GACpC49I,EAAmBR,EAAa/zR,QAOtC,OALIu0R,IACFN,EAAmBM,EAAiBj3R,cACpC+2R,EAAeG,QAAQD,IAGlB,WACDA,GACFF,EAAeI,UAAUF,KAMzBvV,EAAY9kS,YAAW,WAC3Bk6S,MACC,GAEH,OAAO,WACLjnP,aAAa6xO,GACboV,OAED,CAACL,KAEJ,IAAA5mR,YAAU,WACJ4mR,EAAa/zR,SACfi0R,EAAmBF,EAAa/zR,QAAQ1C,gBAEzC,CAAC5wF,IAEJ,IAAMhG,GAAS,IAAA4mI,UAAQ,kBAAM,IAAA3mI,sBAAoB,IAC3CyB,GAAe,IAAAklI,UAAQ,kBAAM5mI,EAAOgb,wBAAwB5vB,KAAS,CAAC4U,EAAQ5U,IAqCpF,IAnCA,IAAAq7G,YAAU,WACJ/kG,GACF+9O,GAAY/9O,EAAaw1E,qBACpBx1E,EAAaw1E,sBAChB,IAAAxrE,iBAGF+zO,GAAW,KAEZ,CAAC/9O,KAEJ,IAAA+kG,YAAU,WACR,GAAK/kG,EAAL,CAKA,IAAI+8N,SAEJ,GAAI/8N,EAAauJ,cACfwzN,EAAgB/8N,EAAauJ,mBACxB,IAAKvJ,EAAaw1E,oBAEvB,YADAs2S,EAAiB,MAId9rX,EAAauJ,gBAEhBwzN,EAAgB/8N,EAAauJ,cAAgBvJ,EAAauJ,cAAgBvJ,EAAa+pE,8BAGzF+hT,EAAiB/uJ,QAlBf+uJ,EAAiB,QAoBlB,CAAC9rX,EAAc1B,EAAQiL,EAAe7f,EAAQ8gD,EAAS8jD,KAErDtuF,EACH,OAAO,mCAAoBsE,aAAcA,EAAczgB,SAAUA,IAGnE,GAAI2mD,EACF,OACE,mCAAqBlmC,aAAcA,EAAczgB,SAAUA,EAAUic,QAASE,EAAc+1M,SAAU,WAChG/1M,EAAaw1E,sBACfuoK,GAAW,IACX,IAAAroK,qBAMR,IAAKqnJ,EAGH,OAFA3hP,QAAQ4B,IAAI,6CAA8C0M,GAC1DtO,QAAQ4B,IAAI,gBAAiB+/O,GACtB,KAGT,IAAMx7N,EAAkBw7N,EAAch6E,4BAEtC,IAAK/3J,MAAMC,QAAQsW,KAAqBA,EAAgB1pB,OAGtD,OAFAuD,QAAQ4B,IAAI,8BAA+BukB,GAC3CnmB,QAAQ4B,IAAI,gBAAiB+/O,GACtB,KAIT,IASMuvJ,EAAkD9xO,EAPnDz4J,QAAQ,YAAa,aACrBA,QAAQ,YAAa,YACrBA,QAAQ,YAAa,YACrBA,QAAQ,UAAW,UACnBA,QAAQ,UAAW,SACnBA,QAAQ,UAAW,SAjIoB,GAsII,IAAAuf,8BAC9CC,EACAw7N,EACAuvJ,EACA5qX,GAJKI,EAtIqC,EAsIrCA,gBAAiBD,EAtIoB,EAsIpBA,qBAMpBC,EAAgBjqB,QAClBuD,QAAQ4B,IAAI,yBAA0B8kB,GAGxC,IAAIyqX,GAAmB,IAAA9pX,4BAA2BZ,GAClD0qX,GAAmB,aAAOA,GAAkB,SAAC9lY,GAAD,OAAaA,EAAQM,UAAUqE,MAC3E,IAAIohY,EAAe,GAEnBD,EAAmBA,EAAiBniY,QAAO,SAAA3D,GACzC,GAAKA,EAAQM,UAAUi4O,mBAQrB,OAAOv4O,GANHgb,GAAoBhb,EAAQmV,iBAAiBlc,cAAcnC,SAASkkB,EAAiB/hB,iBACnF+hB,IAEJ+qX,EAAar0Y,KAAKsO,EAAQM,UAAUmF,sBActCsgY,EAAa30Y,OAAS,GACxBuD,QAAQ4B,IAAR,2CAAuDwvY,EAAa/1X,KAAK,OAGvE+0X,IACFe,GAAmB,IAAAl+M,mBAAkBk+M,IAIvC,IAAI39D,UACAI,UAEJ,OAAQpwQ,GACN,KAAK,EACHgwQ,GAAc,EACdI,GAAY,IACZ,MACF,KAAK,EACHJ,GAAc,EACdI,GAAY,IACZ,MACF,KAAK,EACHJ,GAAc,EACdI,GAAY,IACZ,MACF,KAAK,EACHJ,GAAc,EACdI,GAAY,IACZ,MACF,QACEJ,GAAc,EACdI,GAAY,IAGhB,IAAMF,GAActhU,KAAKouE,MAAM74E,EAAQ6rU,IAAe,EAAIA,GACpDG,GAAWvhU,KAAKkI,KAAK62X,EAAiB10Y,OAAS+2U,IAErD,OACE,+BAAK5gP,UAAU,uBAAuBo1D,IAAKuoP,GAEvC,gCACE5oY,MAAOA,EACPE,OAAQ2oY,EACRh9D,YAAaA,GACbE,YAAaA,GACbC,SAAUA,GACVC,UAAWA,GACXI,aAAc,YAA2C,IAAxCC,EAAwC,EAAxCA,YAAaz0U,EAA2B,EAA3BA,IAAK00U,EAAsB,EAAtBA,SAAU73T,EAAY,EAAZA,MACrCzG,EAAQs+T,EAAWV,GAAcS,EACvC,OAAIr+T,GAASu7X,EAAiB10Y,OAAe,KAE3C,mCACE+C,IAAKA,EACL6c,MAAOA,EACP/N,OAAQA,EACRjD,QAAS8lY,EAAiBv7X,GAC1B+rO,cAAeA,EACf0uJ,gBAAiBA,EACjBC,mBAAoBA,EACpB17M,kBAAmBA,SAUnCu7M,EAA2BjmP,UAAY,CACrC/7H,cAAe,UAAUyzB,MAAV,oBACftzC,OAAQ,UAAUk8B,OAClB4lW,kBAAmB,UAAUhmP,KAC7BwqC,kBAAmB,UAAU7N,M,WA+BhB,IAAAh3B,aACb,IAAAj8C,UA5BsB,SAACxzG,GAAU,MACUA,EAAMs3D,cAAzC63C,EADyB,EACzBA,WAAYyD,EADa,EACbA,mBACZM,EAAsBlzG,EAAMgR,YAA5BkiG,kBAFyB,EAGElzG,EAAMgR,YAAjC4X,EAHyB,EAGzBA,aAAczgB,EAHW,EAGXA,SACdwM,EAAqB3U,EAAM4U,YAA3BD,iBACAq3G,EAAoBhsH,EAAMyV,UAA1Bu2G,gBACA9oD,EAAiBljE,EAAM0zG,UAAvBxwC,aACD47F,EAA0B9+J,EAAMk4L,WAAhCp5B,uBACA94I,EAAmBhmB,EAAMyc,YAAzBuJ,gBAEP,MAAO,CACLmpF,aACAvmF,eACAzgB,WACAwM,mBACAy0G,wBAAyBlW,EAAkB/2G,OAC3C0jB,eAAgB7f,EAAMqN,gBACtB2+G,kBACApZ,qBACAksD,yBACA94I,kBACAk9C,kBAIuB,GAGzB,CAA6C2sU,K,+ECrS/C,I,IAAA,MACA,O,IACA,M,mDAEA,IAAMkB,EAAiC,SAAC/9R,GAAU,IAEzCj3F,EAAoCi3F,EAApCj3F,MAAOi9P,EAA6BhmK,EAA7BgmK,YAAan2M,EAAgBmwC,EAAhBnwC,aAE3B,OACE,8BAAIyvB,UAAW,+BAAiC0mL,GAC3Cn2M,EAAe,wBAA0B,IAC1C9mD,MAAOA,GACT,+BAAKu2E,UAAU,yBACb,+BAAKA,UAAU,mBAEjB,+BAAKA,UAAU,uBACb,+BAAKA,UAAU,sCACE,IAAhB0mL,EACC,+BAAK1mL,UAAU,mCACb,+BAAKA,UAAU,mBAEf,QAMZy+S,EAA+BnnP,UAAY,CACzC7tI,MAAO,UAAU1c,OACjB69N,SAAU,UAAUrzE,UAAU,CAAC,UAAU3/G,OAAQ,UAAUo2E,U,WAe9C,IAAA9M,UAZS,SAACxzG,EAAOqvP,GAAa,MACNrvP,EAAM0zG,UAApC7wC,EADoC,EACpCA,aAAcK,EADsB,EACtBA,aACd/6D,EAAYnI,EAAMgR,YAAlB7I,SAGP,MAAO,CACL06D,eACAm2M,YAJiB3pB,EAAZnyB,UAIoBh6J,EACzB/6D,cAIW,CAAyB4oY,I,8EC5CxC,I,IAAA,MACA,OACA,O,IACA,M,IAEA,OAEA,QACA,QACA,QACA,QACA,QACA,Q,mDAEA,IAAMC,EAAyB,SAACh+R,GAAU,IAEjC3S,EAAiD2S,EAAjD3S,YAAaizK,EAAoCtgK,EAApCsgK,WAAYzuM,EAAwBmuC,EAAxBnuC,qBAE3BivE,GAAa,IAAA7D,mBAAb6D,UACDA,GAAazzC,IAEfyzC,GADe,IAAAjxH,oBACIw+E,wBAAwBhB,EAAYryF,SAQzD,OACE,gCAAMskF,UAAW,sBAAwBwhD,EAAY,kCAAoC,IAAK0wC,QANnE,WAC3B9kL,QAAQ4B,IAAI,cAAe++F,GAC3Bx7B,EAAqB,EAAAzgC,cAAckB,eAKjC,mCAASgtD,UAAU,4BACjB,oDAEF,gCAAMA,UAAU,4BACd,4CAAkB5iF,GAAI4jQ,IAAex/H,EAAY,4BAA8B,6BAOvFk9P,EAAuBpnP,UAAY,CACjCvpD,YAAa,UAAU/+C,MAAV,oBACbgyN,WAAY,UAAUppO,QAGxB,IAMM8tJ,EAAqB,CACzBnzH,6C,WAGa,IAAA4qF,aACb,IAAAj8C,UAXsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBASC2qL,EAAzB,CAA6Cg5M,K,8EC1D/C,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,QAEA,Q,IACA,S,IACA,S,IACA,SACA,Q,OACA,Q,mDAGA,IAAMC,EAAc,SAACj+R,GAAU,IACrBk+R,EACsCl+R,EADtCk+R,cAAe5yO,EACuBtrD,EADvBsrD,cAAen8I,EACQ6wF,EADR7wF,KAAMuJ,EACEsnF,EADFtnF,YAAa04C,EACX4uC,EADW5uC,mBAAoBj8D,EAC/B6qG,EAD+B7qG,SAAU27D,EACzCkvC,EADyClvC,kBACrF99C,EAA4CgtF,EAA5ChtF,gBAAiB84I,EAA2B9rD,EAA3B8rD,uBACXqyO,EAA+En+R,EAA/Em+R,sBAAuBC,EAAwDp+R,EAAxDo+R,yBAA0B1hS,EAA8BsD,EAA9BtD,0BAUzD,OAAKtrC,EAOH,+BAAKkuB,UAAW,mCAAqCgsE,GAAkBn2J,GAAY27D,EAAqB,wBAA0B,IAC7H/nD,MAAOm1X,GAAiB,IAC3B,+BAAK5+S,UAAU,iCACb,+BAAKA,UAAU,+BACb,8BAAIA,UAAU,sBAAqB,4CAAkB5iF,GAAI,wBACzD,mCAAYuhP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAU,6BACVkyF,QAtBK,WACvB,UAAU37I,eAAe,EAAAwB,6BAA6BkD,0BACtD7hB,GAAa4yI,GACT8yO,GACF1hS,EAA0B,QAmBpB,0CAGJ,+BAAKpd,UAAU,kBACb,4CAAkB5iF,GAAG,2BAEvB,wCACA,mCAAiB4iF,UAAU,aAAa6+S,sBAAuBA,IAC9DnrX,EAAgB7pB,QAAU2iK,EAAyB,wCAAsB,OAtBvE,MA4BXmyO,EAAYrnP,UAAY,CACtBsnP,cAAe,UAAU7xY,OACzB8xY,sBAAuB,UAAUrnP,KACjCsnP,yBAA0B,UAAUtnP,MAGtC,IAgBMkuC,EAAqB,CACzBtsK,0BACAmL,wCACA64E,uD,WAGa,IAAA+/C,aACb,IAAAj8C,UAvBsB,SAACxzG,GAAU,MACeA,EAAM0zG,UAA/CtvC,EAD0B,EAC1BA,mBAAoBN,EADM,EACNA,kBADM,EAEM9jE,EAAMyc,YAI7C,MAAO,CACL6hJ,cAP+B,EAE1B5yI,YAML1F,gBAR+B,EAEbA,gBAOlBo+C,qBACAN,oBACA37D,SARiBnI,EAAMgR,YAAlB7I,SASL22J,uBAR+B9+J,EAAMk4L,WAAhCp5B,0BAmBkBk5B,EAAzB,CAA6Ci5M,K,gFCvF/C,I,IAAA,MACA,OACA,O,IACA,MACA,QAEA,QACA,Q,OACA,QACA,QACA,QACA,SACA,QACA,Q,mDAGA,IAAMI,EAAkB,SAACr+R,GAAU,IAE1B5vE,EAA2G4vE,EAA3G5vE,SAAUkuW,EAAiGt+R,EAAjGs+R,SAAU3sU,EAAuFquC,EAAvFruC,eAAgBx8D,EAAuE6qG,EAAvE7qG,SAAU0X,EAA6DmzF,EAA7DnzF,eAAgBqlM,EAA6ClyG,EAA7CkyG,oBAAqBrgJ,EAAwBmuC,EAAxBnuC,qBACpFrjE,GAAW,IAAA+vY,eAEXC,EAAW,SAACC,GAChB,IAAMx3M,EAAUp6K,EAAe8/F,mBAC3B,sCACA9/G,OAAO2B,UAAY3B,OAAO2B,SAASkwY,iBAAmB7xY,OAAO2B,SAASkwY,gBAAgB,GACpF7xY,OAAO2B,SAASkwY,gBAAgB,GAChC,mBAON,OALA,UAAU7oW,eAAe87B,IAAmB,EAAA1nD,OAAOE,KAC/C,EAAAktB,6BAA6BgF,oBAAsBoiW,EACnD,EAAApnW,6BAA6B+E,sBAAwBqiW,GAGjDA,GACN,IAAK,QACH,IAAME,EAAU9xX,EAAe8/F,mBAC3Bs6E,EAAU,iCACVA,EAAU,cACd,OAAOp6L,OAAO6+F,KAAKizS,EAAS,UAE9B,IAAK,UACH,IAAMA,EAAU9xX,EAAe8/F,mBAC3Bs6E,EAAU,0BACVA,EAAU,kBACd,OAAOp6L,OAAO6+F,KAAKizS,EAAS,UAM9B,IAAK,YACHzsL,EAAoB,EAAAr9J,iBAAiBC,OACrC+c,EAAqB,EAAAzgC,cAAckB,YAAa,aAChD,MAEF,QACE,SAIAu6E,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAE7C,OACE,+BAAKvtB,UAAW,eAAiB,EAAAhvF,oBAAmC,SAAb8/B,EAAsB,qBAAuB,yBACjF,SAAbA,IAAwB,EAAD,oBAAwBkuW,EAAW,uBAAyB,KACpF9vY,GAAYA,EAAS+d,SAAS1d,SAAS,EAAAob,OAAO0uF,SAAWxjG,EAAW,uBAAyB,KAChG,8BAAImqF,UAAU,sBACXutB,EAAU,CAAC,QAAS,WAAWrwG,KAAI,SAAAiiY,GAClC,OACE,8BAAIn/S,UAAU,0BAA0BpzF,IAAKuyY,GAC3C,gCAAMn/S,UAAU,YAAYkyF,QAAS,kBAAMgtN,EAASC,KAClD,4CAAkB/hY,GAAI,gBAAkB+hY,SAK9C,8BAAIn/S,UAAU,2BACZ,gCAAMA,UAAU,YAAYkyF,QAAS,kBAAMgtN,EAAS,eAClD,4CAAkB9hY,GAAG,kCASnC2hY,EAAgBznP,UAAY,CAC1BxmH,SAAU,UAAU8G,OACpBonW,SAAU,UAAUxnP,MAGtB,IAWMkuC,EAAqB,CACzBktB,0CACArgJ,6C,WAGa,IAAA2uC,UAhBS,SAACxzG,GAIvB,MAAO,CACL2kE,eAJuB3kE,EAAM0zG,UAAxB/uC,eAKLx8D,SAJiBnI,EAAMgR,YAAlB7I,SAKL0X,eAJqB7f,EAAMqN,mBAaS2qL,EAAzB,CAA6Cq5M,I,wGC5G5D,OAEA,SACA,SACA,QACA,QACA,QACA,Q,8DAoEe,IAAA79R,UAfS,SAACxzG,GAAU,IAC1B0mE,EAAoB1mE,EAAM0zG,UAA1BhtC,iBACAs5F,EAAiBhgK,EAAMk4L,WAAvBl4B,cAF0B,EAGChgK,EAAMouB,wBAExC,MAAO,CACLs4C,mBACAz3C,aAP+B,EAG1BA,aAKLH,UAR+B,EAGZA,UAMnBkxI,mBAIuB,GAEZ,EAlEc,SAAChtD,GAAU,IAIhC,EAFCk1C,EAAsEl1C,EAAtEk1C,SAAUxhF,EAA4DssC,EAA5DtsC,iBAAkBz3C,EAA0C+jF,EAA1C/jF,aAAcH,EAA4BkkF,EAA5BlkF,UAAWkxI,EAAiBhtD,EAAjBgtD,cA8C5D,OAAO9X,GA5CD,gCAAmB,iCAAO0pP,EAAP,sIACvB,IAAAtjX,gBACM1L,GAAS,IAAAC,oBAFQ,SAGjBD,EAAO23E,qBAHU,wBAKJ,IAAA02D,yBAAwBvqF,GAAoB,EAAAonK,qBAAqB3uI,UAAW6gE,GALxE,OAKnB6xO,EALmB,OAMnBz9K,EAAUv0N,OAAO2B,SAASC,KAE1BmwY,IACI5yX,EAAe,IAAIC,gBACtBpf,OAAO2B,SAASgJ,OAAQnE,QAAQ,QAAS,KACtCxG,OAAO2B,SAASwb,KAAM3W,QAAQ,UAAW,KAC1C,IAEL,EAAAkqJ,wBAAwBzqJ,SAAQ,SAAAoZ,GAAA,OAASF,EAAaG,OAAOD,MAEzD4yX,EAAoB9yX,EAAaQ,WAEC,OADlCH,EAAWxf,OAAO2B,SAAS8d,OAASzf,OAAO2B,SAAS+d,UAC3CF,EAASljB,OAAS,IAC7BkjB,EAAStf,MAAM,GAAI,GAEjB+xY,GAAqBA,EAAkB31Y,QAAmC,MAAzB21Y,EAAkB,KACrEA,EAAoB,IAAMA,GAE5B19K,EAAU/0M,EAAWyyX,EAAoBjyY,OAAO2B,SAASwb,MAItDo3M,EAAQvyN,SAAS,WACdkwY,EAAc,IAAIhzX,IAAIq1M,GACtBp4H,GAAS,IAAAL,WAAU1sE,EAAcH,GACvCijX,EAAY/0X,KAAZ,UAA6Bg/E,EAC7Bo4H,EAAU29K,EAAYtwY,MAGxB/B,QAAQ4B,IAAI,cAAe8yN,IAE3B,IAAAwxF,qBAAoB,CAClB,UAAa,EAAAjzC,4BAA4BC,OACzC,UAAax+C,EACb,OAAUy9K,IAxCW,mDAAnB,iD,8ECbR,W,OACA,O,IACA,MACA,OACA,QAEA,Q,IAIA,S,IACA,S,IAEA,S,IACA,S,IACA,SACA,QACA,QACA,Q,IACA,S,IACA,S,IACA,QACA,Q,mDAEA,IAAMG,EAAc,SAACh/R,GAAU,IAEtBi/R,EACiGj/R,EADjGi/R,gBAAiBh2R,EACgFjJ,EADhFiJ,YAAan3C,EACmEkuC,EADnEluC,kBAAmBH,EACgDquC,EADhDruC,eAAgBx8D,EACgC6qG,EADhC7qG,SAAUw9D,EACsBqtC,EADtBrtC,UAAWjD,EACWswC,EADXtwC,WAAYD,EACDuwC,EADCvwC,cACvG9yC,EAAsGqjF,EAAtGrjF,eAAgB+zC,EAAsFsvC,EAAtFtvC,qBAAsBS,EAAgE6uC,EAAhE7uC,sBAAuBl1C,EAAyC+jF,EAAzC/jF,aAAcm6F,EAA2BpW,EAA3BoW,wBAEvE8oR,EAAmB,CAAC,EAAAvsW,iBAAiBG,cAAe,EAAAH,iBAAiBE,gBAAiB,EAAAF,iBAAiBI,aAEvGosW,EAAc,CAAC,EAAA/tW,cAAcY,aAAc,EAAAZ,cAAca,WAAY,EAAAb,cAAcc,YAAa,EAAAd,cAAce,iBAC9GitW,EAAqBjqY,GAAYgqY,EAAYxqY,MAAK,SAAA0qY,GAAA,OAAaA,IAAcvtU,MAEnF,IAAAukD,YAAU,WAEJ1kD,IACF,IAAAq3C,eAAcC,EAAatsF,KAG5B,CAACg1C,EAAgBG,IAEpB,IAAMwtU,EAAuB,WACvB5vU,IACFD,EAAc,MACd0B,EAAsB,IACtBT,EAAqB,QAGvB,IAAAs4C,eAAcC,EAAatsF,IAGvB4iX,GAAwB,IAAAhpP,0BAAyBt6H,EAAc9mB,EAAUihH,GAE/E,OACE,iCAAO92B,UAAW,gBACf8/S,GAAsBF,EAAiBrwY,SAAS8jE,GAAa,4CAA8C,KAC5G,8BAAI2sB,UAAU,sBAIZ,mCAAuB2/S,gBAAiBA,EACjBK,qBAAsBA,EACtB9nT,SAAU4nT,IACjC,wCACG,SAACz4S,GAAD,OAAwB,mCAAyBs4S,gBAAiBA,EACjBM,sBAAuBA,EACvB54S,mBAAoBA,EACpB24S,qBAAsBA,EACtB9nT,SAAU4nT,OAE9D,mCAA0BH,gBAAiBA,EACjBznT,SAAU4nT,IACpC,mCAAyBH,gBAAiBA,EACjBM,sBAAuBA,EACvBD,qBAAsBA,EACtB9nT,SAAU4nT,IACnC,mCAAuBH,gBAAiBA,EACjBK,qBAAsBA,EACtB9nT,SAAU4nT,IACjC,mCAA4BH,gBAAiBA,EACjBK,qBAAsBA,EACtB9nT,SAAU4nT,IACtC,mCAAuBH,gBAAiBA,EACjBK,qBAAsBA,EACtB9nT,SAAU4nT,OAMzCJ,EAAYpoP,UAAY,CACtBqoP,gBAAiB,UAAUxrN,KAC3BxqE,YAAa,UAAU58G,QAGzB,IAiBM24L,EAAqB,CACzBv1H,8BACAc,8CACA5zC,gCACA+zC,4CACAS,+C,WAGa,IAAA8zH,aACb,IAAAxoC,aAAW,IAAAj8C,UA1BW,SAACxzG,GAAU,MACkCA,EAAM0zG,UAAlEhxC,EAD0B,EAC1BA,WAAYoC,EADc,EACdA,kBAAmBH,EADL,EACKA,eAAgBgB,EADrB,EACqBA,UADrB,EAEkB3lE,EAAMgR,YAAlDtF,EAF0B,EAE1BA,YAAavD,EAFa,EAEbA,SAAU+qG,EAFG,EAEHA,kBAG9B,MAAO,CACLxwC,aACAh3D,cACAo5D,oBACA38D,WACAw9D,YACAhB,iBACA11C,aATqBjvB,EAAMouB,wBAAtBa,aAULm6F,wBAAyBlW,EAAkB/2G,UAaT67L,EAAzB,CAA6Cg6M,M,6LC1H1D,OAE2BtrF,EAAdA,YAAc,SAACp+M,EAAOhpG,EAAUkzY,EAAez7N,EAAc63J,EAAoBh4J,GAC5F,IAAMh4K,GAAS0pG,GAASA,EAAMlqF,QAAUkqF,EAAMlqF,OAAOxf,MAAQ0pG,EAAMlqF,OAAOxf,MAAQ,IAAIimB,OAEtF,GADA2tX,EAAclzY,EAAUV,GACpBgwU,GAAsBh4J,EAAqB,CAC7C,IAAMx8C,EAASw8C,EAAoBt3K,EAAUV,IACzCw7H,EAAOj+H,SAICi+H,EAAOj+H,QAAU46K,GAAgBA,EAAaz3K,KAHxDsvU,mBACGtvU,EAAW86H,MAUSs4G,EAAhBA,cAAgB,SAACpqI,EAAOhpG,EAAUkzY,EAAez7N,EAAc63J,EAAoBh4J,GAC9F,IAAMh4K,EAAQ0pG,EAAMlqF,OAAOxf,MAE3B,GADA4zY,EAAclzY,EAAUV,GACpBm4K,GAAgBA,EAAaz3K,IAAas3K,EAAqB,CACjE,IAAMx8C,EAASw8C,EAAoBt3K,EAAUV,IACxCw7H,EAAOj+H,QAAUyyU,GACpBA,mBACGtvU,EAAW86H,MAMeusL,EAAtBA,oBAAsB,SAACj6B,EAAiBrlD,EAAQglD,IAC3D,IAAAhjK,YAAU,WACHqjK,GACHrlD,EAAO,CACLjpN,OAAQ,CACNxf,MAAOytR,OAKZ,CAACK,M,4IC1CN,O,OACA,OACA,OACA,Q,IACA,Q,IACA,M,IAEA,S,IACA,Q,IACA,QAEA,SACA,QACA,QACA,Q,OACA,QACA,QACA,S,IAKA,OACA,Q,mDAE+B+lH,EAAlBA,iBAAA,gCAAkB,WAAO3H,EAAcv6H,EAAgB9nQ,EAAUipB,EAAgB5e,EAAMsyM,GAArE,iFACzB0lL,EADyB,0CAEpB,GAFoB,cAI7B1lL,EAAa,CACX0lL,cAAc,IAEhB,UAAUjiW,eAAe0nO,GAPI,UAQJ,IAAAtW,oCARI,YAQvB8wI,EARuB,UASXr5W,EATW,wBAU3B0zL,EAAa,CACX2lL,eAXyB,WAarB,IAAAzwI,2BAA0BywI,EAA1B,IAA0CtiY,EAASghC,QAAQqsI,SAA3D,IAAuErtK,EAASkhC,YAAe72B,GAb1E,QAe7BsyM,EAAa,CACX0lL,cAAc,IAhBa,mDAAlB,uDAAN,IAAM,EAoBP4H,EAAiB,SAAC1/R,GAAU,IA0B1B,EAxBCmlF,EACiEnlF,EADjEmlF,QAASh2K,EACwD6wF,EADxD7wF,KAAMmP,EACkD0hF,EADlD1hF,4BAA6B7oB,EACqBuqG,EADrBvqG,SAAUqU,EACWk2F,EADXl2F,uBAAwBgoD,EACbkuC,EADaluC,kBACnFogJ,EAAsElyG,EAAtEkyG,oBAAqBG,EAAiDryG,EAAjDqyG,UAAWD,EAAsCpyG,EAAtCoyG,aAAc9R,EAAwBtgG,EAAxBsgG,WAAY9xM,EAAYwxG,EAAZxxG,SACrDupY,EAA4B1lL,EAA5B0lL,WAAYD,EAAgBzlL,EAAhBylL,aAJa,GAMA,IAAAjiP,UAAS,IANT,qBAMzBuxG,EANyB,KAMfu4I,EANe,QAOM,IAAA9pP,UAAS,IAPf,qBAOzB+pP,EAPyB,KAOZC,EAPY,QAQE,IAAAhqP,WAAS,GARX,qBAQzBiqP,EARyB,KAQdC,EARc,KA0B1BC,GAAA,gCAAY,WAAOC,GAAP,sFAChB7tL,EAAa,CACX0lL,cAAc,IAFA,UAIQ,IAAA3wI,6BAA4B4wI,EAAYkI,EAAaxqY,EAASkhC,aAJtE,OAIVpY,EAJU,OAKhB7xB,QAAQ4B,IAAI,YAAaiwB,GACzB6zL,EAAa,CACX0lL,cAAc,IAEhB,UAAU3iW,UAAU,oBAAqB5W,EAAY,UAAY,WAC7DA,GACFD,GAA4B,GACtB4hX,EAAkB1xY,EAAS+d,SACjC44K,EAAQ17L,KAAKy2Y,EAAkB,4BAC/B98S,YAAW,WACLtxB,IAAsB,EAAA1gC,cAAckB,aAAeguK,GACrDnb,EAAQ17L,KAAKy2Y,GACb5/L,KAEAnb,EAAQ17L,KAAK,EAAAwgB,OAAO+uF,aAErB,MAEH6mS,EAAe1wX,EAAKC,cAAc,CAAC1S,GAAI,sCAvBzB,kDAAZ,6CA6CN,OACE,+BAAK4iF,UAAU,mBACb,+BAAKA,UAAU,yBACb,+BAAKA,UAAU,cACb,mCAAWA,UAAU,aACVx/E,KAAM,OACNlU,MAAOw7P,EACPwsD,UAAU,EACV57S,KAAK,QACLq9B,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAI,sBAC/B8tN,SA5BO,SAAC3/N,GACzB,IAAMo1Y,GAAc,aAAKp1Y,EAAEugB,OAAOxf,OAAOyH,QAAQ,UAAW,IAC5DssY,EAAYM,GAEe,IAAvBA,EAAY92Y,QACVy2Y,GACFC,IAEFG,EAAUC,IACDA,EAAY92Y,OAAS,EAC9B02Y,EAAe1wX,EAAKC,cAAc,CAAC1S,GAAI,gCAC9BojY,GAAaG,EAAY92Y,OAAS,EAC3C02Y,EAAe1wX,EAAKC,cAAc,CAAC1S,GAAI,gCAC9BkjY,GACTC,EAAe,KAeAxrK,OAAQ,kBAAM0rK,GAAa,IAC3BpzY,QAASizY,EACT9rF,WAAY8rF,EACZz9I,QAAQ,eAGvB,+BAAK7iK,UAAU,UAAUkyF,QAAS1nK,EAAyB,KA9EhC,WAC7B,GAAIguX,EACF,OAAO,EAET,GAAIhmU,IAAsB,EAAA1gC,cAAckB,YAAa,CACnD,IAAMirO,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCsF,iCAChC,EAAApM,6BAA6BiE,qCAGjC,OAFA,UAAUzF,eAAe0nO,GACzBrrD,EAAoB,EAAAr9J,iBAAiBG,QAC9B,EAET,UAAUnf,eAAe,EAAAsI,gCAAgC8E,sBACzDkiJ,EAAQ17L,KAAK,EAAAwgB,OAAOsvF,aAkEfzvF,EACC,wCACE,wCADF,IACe,4CAAkBpN,GAAG,gDAElCo7X,EAAe,mCAAiB9/X,KAAM,KACxC,wCACE,gCAAMsnF,UAAU,iBAAgB,yCADlC,IACsD,4CAAkB5iF,GAAG,4CAQrFgjY,EAAe9oP,UAAY,CACzB0pD,WAAY,UAAU7sB,MAGxB,IAaMuR,EAAqB,CACzBlnK,gCACAQ,0DACA8zL,4BACAF,2C,WAGa,IAAAz1D,aACb,IAAAwoC,aACE,IAAAzkF,UAtBoB,SAACxzG,GAAU,MACqCA,EAAMwc,UAArE/T,EAD0B,EAC1BA,SAAUqU,EADgB,EAChBA,uBAAwB4U,EADR,EACQA,eAAgB2zL,EADxB,EACwBA,UAGzD,MAAO,CACLvgJ,kBAH0B9kE,EAAM0zG,UAA3B5uC,kBAILr8D,WACAqU,yBACA4U,iBACA2zL,eAayBrtB,EAAzB,CAA6C06M,M,8HC9KjD,O,OACA,O,IACA,MACA,Q,IACA,O,IAEA,Q,IAEA,OACA,Q,IACA,QACA,Q,OACA,QACA,QACA,QACA,QAEA,QACA,Q,WACA,QACA,QACA,Q,IACA,SACA,Q,IAKA,QACA,Q,IAMA,SACA,SACA,SACA,Q,mDAEA,IAAMS,EAA+B,SAACngS,GAAU,IAaxC,EAXC5gF,EAIqB4gF,EAJrB5gF,YAAaiuE,EAIQ2S,EAJR3S,YAAan9B,EAIL8vC,EAJK9vC,aAAc5+C,EAInB0uF,EAJmB1uF,aAAcqW,EAIjCq4E,EAJiCr4E,kBAAmB5e,EAIpDi3F,EAJoDj3F,MAAO2nD,EAI3DsvC,EAJ2DtvC,qBAAsBipB,EAIjFqmB,EAJiFrmB,SAC3GxkF,EAG0B6qG,EAH1B7qG,SAAUypB,EAGgBohF,EAHhBphF,UAAWnM,EAGKutF,EAHLvtF,iBAAkBkK,EAGbqjF,EAHarjF,eAAgBnX,EAG7Bw6F,EAH6Bx6F,qBAAsBsZ,EAGnDkhF,EAHmDlhF,iBAAkBg6G,EAGrE94B,EAHqE84B,wBAC/F7vB,EAE0BjJ,EAF1BiJ,YAAaszL,EAEav8L,EAFbu8L,qBAAsB51M,EAETqZ,EAFSrZ,mBAAoB1yB,EAE7B+rC,EAF6B/rC,0BAA2B44C,EAExD7M,EAFwD6M,QAASy/C,EAEjEtsD,EAFiEssD,2BAC3F33F,EAC0BqrC,EAD1BrrC,qBAAsBD,EACIsrC,EADJtrC,wBAAyB5qD,EACrBk2F,EADqBl2F,uBAAwB0qD,EAC7CwrC,EAD6CxrC,mBAAoBrnD,EACjE6yF,EADiE7yF,SAAUyP,GAC3EojF,EAD2EpjF,YACrGigT,GAA0B78N,EAA1B68N,uBAEIC,IAAiB,IAAAnoL,UAGjBvqI,IAAkB,IAAAosI,UAAQ,kBAAM,IAAAptI,oBAAmBikF,KAAc,CAACA,EAAavjF,IAE/Es2X,IAAA,gCAAuB,WAAO1+K,GAAP,gGAC3B5oF,mBACGh6G,EAAmB,CAClBM,cACAzZ,gBAAiB0nF,EACjBryF,OAAQqyF,EAAYryF,OACpBu9I,cAAmC,IAApB5+D,EAASxwF,OACxB0U,SAAUyuJ,KAIR18I,GAAS,IAAAC,qBACX6xM,EAZuB,oBAcnBzzN,EAASqjB,GAAgBowM,EAAYtsN,YAC3C,UAAU0gC,mBAAmB,cAAe,CAC1CsnN,aAAc17B,EAAY1mN,OAC1BqiP,eAAgBpvP,EAAOqiB,QAAUriB,EAAOsiB,UAAY,GACpDuE,MAAO,EAAC,IAAAwnO,2BAA0B56B,EAAa,MAG3Cy6E,EAAe,UAAUrlQ,mBAAmB4qL,GAC5C67C,EAAiB,EAAAlmO,6BAA6BqG,sBAAwBy+P,EAC5E,UAAUtmQ,eAAe0nO,GAEnB0/D,EAAiBtjP,EAAWA,EAAStoE,WAAU,SAAAgD,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAO2wF,EAAYh1F,UAAUqE,MAAM,KAC1Hg0D,EAAqBgxJ,EAAau7G,IAE9BD,GA5BqB,uBA6BjB/5L,GAAe,IAAAd,iBAAgB90C,KACjB/wF,MAAMC,QAAQ0mI,EAAaX,sBAAwBW,EAAaX,oBAAoBn5I,QA9BjF,mCA+Bf,IAAA45I,wBAAuB2+E,EAAaz+E,GAAc,GA/BnC,YAkCzB,IAAAjoD,iBAAgB0mI,IAChB,IAAAl6H,sBAAqBk6H,EAAa9iM,EAAWnM,IAOzC2M,EAAYq4H,kBA1CS,mDA6CzB9vH,IACIshF,GAAeA,EAAYC,SAAWD,EAAYC,QAAQC,YAAc,EAAAn1E,gBAAgBnlC,SAAS6yN,EAAY1mN,UAC5G,IAAA4lN,kBAAiBc,EAAY1mN,OAAQ7F,GACpCusN,EAAYrsI,gCAAgCpnF,EAAOknF,0BAC/Cm1B,GAAe,IAAAE,kBAAiBk3G,GAAa,KAAS,IAAAh3G,iBAAgBz8G,EAAQyzN,EAAaz4G,EAAYC,QAAQ1vD,QADvC,GAE7D,IAAAsnK,qBACf,IAAA16G,gBAAekE,EAAcrB,EAAYC,QAAQ1vD,OAAQrkD,GACzD,KAAMusN,EAAaz4G,EAAa9zG,IAF3BuxC,EAFuE,EAEvEA,UAKLuiE,EAAYC,QAAQC,UAAUC,aAAa1iE,EAAQ,GAAG,EAAO92B,EAAOy+E,wBAAwBqzH,EAAY1mN,SACxG2hB,EAAessF,EAAYC,QAAQC,UAAUq2C,QAAQiiE,iBAGhC,IAAhB7kM,MACT,IAAAosF,eAAcC,EAAatsF,IACvB,IAAAkkM,uBAAsBa,EAAY1mN,UACpC,aAAE,cAAcknF,QAAQ,CAACy5E,UAAW7tK,SAAS6C,KAAKshL,cAAe,MAGhEt9G,EAAqBuoQ,WAAYF,IAAmB5yT,IAAoBijF,EAAY/U,2BACpFwkP,KAAkBA,GAAe5zN,SAAY/7F,IAC3B,IAAAg1H,iBAAgB90C,IAEnC34B,EAAwB,CACtBzvC,SAAS,EAGTooE,cACAzzF,IAAKkjU,GAAe5zN,QAAQloB,wBAAwBpnF,IACpD4sC,KAAMs2R,GAAe5zN,QAAQloB,wBAAwBx6C,KACrDjyC,OAAQwU,EAAMxU,OACdF,MAAO0U,EAAM1U,QA7EM,QAoF3BsyF,EAAmB+6H,GApFQ,mDAAvB,qBAAA53N,MAAA,kBAqHF+jK,IAAW,EACf,GAAIroJ,EAAqBsZ,IAAqBtZ,EAAqBsZ,GAAkBnZ,gBAAiB,CACpG,IAAM06X,IAAc,IAAA/yS,iCAAgC9nF,EAAqBsZ,GAAkBnZ,iBAC3FkoJ,GAAWxgE,EAAYh1F,UAAUgoY,MAAiB76X,EAAqBsZ,GAAkBnZ,gBAAgBtN,UAAUgoY,IAErH,IAAMC,GAAa,EAAAhwY,mBAAqB,GAAK,IAEvC0sU,IAAiB,IAAA/6L,mBAAkB50C,GACnC8vO,GAAetvK,IAAYmvK,GAEjC,OACE,8BAAI19O,UAAW,+BAAiCpvB,GAC3C2sQ,GAAyB,kCAAoC,KAC7DzyT,GAAkB,sBAAwB,0BAC1CyjJ,GAAW,sBAAwB,IACpC9kJ,MAAOyrD,EAAmBvvC,UAAY9vB,GAA/B,gBAA8C4T,EAA9C,CAAqD1U,MAAO0U,EAAM1U,MAAQ,IAAK0U,EACtF2rI,IAAKooL,GACLtrJ,QA9CmB,SAACl8E,GACxB,KAAIA,EAAMlqF,OAAOuqI,QAAQ,uBAAyBrgD,EAAMlqF,OAAOuqI,QAAQ,qBAAuBnhF,EAAmBvvC,SAAW43S,IAA5H,CAGI,UAAOtnU,aAAe83F,GACxB3gG,QAAQ4B,IAAI,cAAe++F,EAAaA,EAAY7lF,UAEtD,IAAIk6M,EAAcr0H,EAClB,GAAIkvM,IACF,OAAO,EAGT,IAAMghC,EAAqB1wN,EAAU,IAAK,IAAAqzB,4BAA2BwhF,GACrE,GAAI67G,EAAmBp0U,OAQrB,OAPA,UAAU0sC,eAAe,EAAAwB,6BAA6ByG,4BACtDm2B,EAA0B,CACxBhvC,SAAS,EACTs4S,qBACA7/O,eAAgBgkI,EAChBwkC,cAAek6I,GAAqBj0Y,UAArB,EAAgCu1N,MAE1C,EAGT0+K,GAAqB1+K,MAuBnB,+BAAKpiI,UAAU,yBACZuuE,GAAY,EAAAv9J,oBAAsB6E,EACjC,mCAAmCk4F,YAAaA,EAAaod,UAAU,EAAMojD,UAAU,IAEvF,+BAAKvuE,UAAU,yBACb,mCAAW/nC,SAAS,WAEpB,KACJ,mCAAkBx/C,QAASs1F,EAAa1hF,YAAa0hF,EAAYh1F,UAAUqE,KAC1EygU,GAAe,mCAAyB9vO,YAAaA,EACb88H,oBAAqB0yG,GACrB3yG,SAAUh6J,EACVpwD,KAAK,UAAY,MAE5D,+BAAKw/E,UAAU,uBACb,gCAAMA,UAAU,4BACd,mCAAavnF,QAASs1F,EAAavgF,mBAAmB,KAEtDsS,EAAYq4H,oBAAsB,EAAD,qBAAyB,EAAD,iBAAoB,KAC7E,6BAAGn4D,UAAU,mCACX,mCAAavnF,QAASs1F,EAAakvD,UAAW+jP,MAGlD,+BAAKhhT,UAAU,6BACb,mCAAkB+N,YAAaA,EAAa/N,UAAU,qCAEvDlgE,EAAYq4H,mBAAsBpqD,EAAYh1F,UAAUipS,cAAiB,EAAD,mBAIrE,KAHF,+BAAKhiN,UAAU,6BACb,mCAAsC+N,YAAaA,QAQ/D8yS,EAA6BvpP,UAAY,CACvCvpD,YAAa,UAAU/+C,MAAV,oBACbh9B,aAAc,UAAUjlB,OACxB69N,SAAU,UAAUrzE,UAAU,CAAC,UAAU3/G,OAAQ,UAAUo2E,SAC3DluF,YAAa,UAAUkvB,MAAV,wBACbvlC,MAAO,UAAU1c,OACjB48G,YAAa,UAAU58G,OAAOshH,WAC9B4uL,qBAAsB,UAAU9oH,KAChC9sF,mBAAoB,UAAU8sF,KAC9B95F,SAAU,UAAU5uE,MACpB8xT,uBAAwB,UAAU/lL,MAGpC,IA8BMkuC,EAAqB,CACzBr9J,sCACA/I,sBACAjC,gCACAm8G,kDACApoE,4CACAuD,sDACAS,mD,WAGa,IAAAuwH,aACb,IAAAzkF,UAzCsB,SAACxzG,GAAU,MACgCA,EAAM0zG,UAAhExwC,EAD0B,EAC1BA,aAAcyE,EADY,EACZA,qBAAsBH,EADV,EACUA,mBACpCr/D,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGcnI,EAAMouB,wBAA9Ca,EAH0B,EAG1BA,aAAcH,EAHY,EAGZA,UAAWc,EAHC,EAGDA,YACzBnK,EAAoBzlB,EAAMgsL,QAA1BvmK,iBAJ0B,EAKgBzlB,EAAMqY,YAAhDG,EAL0B,EAK1BA,qBAAsBsZ,EALI,EAKJA,iBACtB0jH,EAAmBx1I,EAAMu1I,gBAAzBC,gBAN0B,EAOLx1I,EAAMqN,gBAA3BwyG,EAP0B,EAO1BA,QAAS1/F,EAPiB,EAOjBA,SAIhB,MAAO,CACL+iD,eACA/6D,WACA8mB,eACAH,YACArJ,mBACAmK,cACApX,uBACAsZ,mBACA0jH,kBACA31B,UACAy/C,2BAdmCt/J,EAAMk4L,WAApC54B,2BAeL33F,uBACA7qD,uBAf+B9c,EAAMwc,UAAhCM,uBAgBL0qD,qBACArnD,cAeuB63K,EAAzB,CAA6Cm7M,K,+ECtR/C,I,IAAA,MACA,O,IACA,MACA,OACA,QACA,Q,IAIA,OACA,Q,mDAGA,IAAMI,EAAqB,SAACvgS,GAAU,IAE7B1gB,EACiD0gB,EADjD1gB,UAAWroF,EACsC+oG,EADtC/oG,UAAW4qB,EAC2Bm+E,EAD3Bn+E,gBAAiB1I,EACU6mF,EADV7mF,qBAAsBD,EACZ8mF,EADY9mF,2BAA4BV,EACxCwnF,EADwCxnF,sBAC9FC,EAAsDunF,EAAtDvnF,gBAAiB9F,EAAqCqtF,EAArCrtF,eAAgBwyK,EAAqBnlF,EAArBmlF,QAAS32L,EAAYwxG,EAAZxxG,SAqB5C,OACE,kCAAQ8wF,UAAW,4CAA8CA,GAAa,IAAKkyF,QApB3D,WACxB,UAAU37I,eAAe,uBAErBpd,GACFD,GAAsB,EAAO7F,GAC7BkP,EAAgB,aACZ1I,GACFD,EAA2B,QAEpB1qB,GAAaA,EAAS+d,WAAa,EAAAtC,OAAOyuF,MAAQlqG,EAAS+d,WAAa,EAAAtC,OAAOgwF,aACxFp4E,EAAgB,EAAA5X,OAAOgwF,aAGpBptG,OAAO2B,SAASC,KAAKI,SAAS,iBACjCs2L,EAAQ17L,KAAK,EAAAwgB,OAAOkwF,gBAOpB,gCAAM7a,UAAU,0BAAyB,4CAAkB5iF,GAAG,uBAC7DzF,EAAU9N,OAAS,gCAAMm2F,UAAU,iCAAiCroF,EAAU9N,QAAiB,OAMtGo3Y,EAAmB3pP,UAAY,CAC7B5/H,KAAM,UAAU6/H,UAAU,CAAC,UAAU3/G,OAAQ,UAAU7qC,SACvDizF,UAAW,UAAUpoD,QAGvB,IAYM8tJ,EAAqB,CACzBnjK,kCACA3I,wDACAV,+C,WAGa,IAAAysK,aACb,IAAAzkF,UAnBsB,SAACxzG,GAAU,IAC1BiK,EAAajK,EAAM8J,UAAnBG,UAD0B,EAE+BjK,EAAMytB,eAEtE,MAAO,CACLxjB,YACAkiB,qBAN+B,EAE1BA,qBAKLV,gBAP+B,EAEJA,gBAM3B9F,eAR+B,EAEaA,kBAiBrBqyK,EAAzB,CAA6Cu7M,K,6FCtE/C,O,OACA,OACA,OACA,SACA,Q,OACA,Q,mDAEA,IA8FMv7M,EAAqB,CACzBjP,2B,WAGa,IAAAt5B,aACb,IAAAj8C,UAZsB,SAACxzG,GACvB,MAAO,CACL21H,SAAU31H,EAAMgR,YAAY2kH,SAC5Bn8G,mBAAoBxZ,EAAMqN,gBAAgB+B,YASnB4oL,EAAzB,EAnGuB,SAAChlF,GAAU,IAE3B2iB,EAAmD3iB,EAAnD2iB,SAAUozD,EAAyC/1E,EAAzC+1E,YAAa5mK,EAA4B6wF,EAA5B7wF,KAAM3I,EAAsBw5F,EAAtBx5F,mBAFF,GAGY,IAAAqvI,WAAS,GAHrB,qBAG3B2qP,EAH2B,KAGVC,EAHU,KAWlC,IANA,IAAApqR,YAAU,WACR,OAAO,WACLxpH,OAAO+qG,oBAAoB,QAAS46E,MAErC,KAEEhsK,EAAmB4oQ,qBAAwB,UAAO75Q,cAAgBzH,SAASC,SAAS2b,UACvF,OAAO,KAGT,IAAMg3X,EAAiB/9Q,EAEjB6vD,EAAoB,SAAC3nL,GACD,CAAC,YAAa,kBACjB8J,MAAK,SAAA8mP,GAAA,OAAO5wP,EAAEugB,OAAOuqI,QAAQ8lG,OAChDglJ,GAAmB,IAIjBriF,EAAoB,WACxB,IAAMuiF,GAAcH,EACpBC,EAAmBE,GACnBv9S,YAAW,WACTu9S,EACI9zY,OAAO0uD,iBAAiB,QAASi3H,GACjC3lL,OAAO+qG,oBAAoB,QAAS46E,KACvC,IA+BC1jG,EAAS,CACbv6E,OAAQisY,EAA+C,GAA7B,EAAAvvY,oBAAoB9H,OAAc,GAG9D,OACE,+BAAKm2F,UAAU,YACb,kCAAQA,UAAW,+CAAiDkhT,EAAkB,4BAA8B,IAC5GhvN,QAAS4sI,GACf,gCAAM9+N,UAAU,0BAAyB,4CAAkB5iF,GAAG,4BAEhE,+BAAK4iF,UAAW,qBAAuBkhT,EAAkB,8BAAgC,IAAKz3X,MAAO+lE,GACnG,+BAAKwQ,UAAU,2BACZ,EAAAruF,oBAAoBuL,KAAI,SAACoQ,EAAQg0X,GAAT,OACvB,8BAAIthT,UAAW,gCAAkCohT,IAAmB9zX,EAAS,wCAA0C,IACnH1gB,IAAK00Y,EACLpvN,QAAS,kBA3CG,SAAC5kK,GACzBmpK,EAAYnpK,IACR,IAAAlT,aAAc7M,OAAOoB,QACvBpB,OAAOoB,OAAO4oC,YAAY,CACxBzB,OAAQ,EAAAlkC,cAAcC,kBACtBokB,QAAS,CAAEotG,SAAU/1G,IACpB,KAELwxS,IAmC2ByiF,CAAkBj0X,KAhCvB,SAACA,GACvB,OAAQA,GACN,IAAK,QACH,OAAOuC,EAAKC,cAAc,CAAC1S,GAAI,6BACjC,IAAK,QACH,OAAOyS,EAAKC,cAAc,CAAC1S,GAAI,gCACjC,IAAK,QACH,OAAOyS,EAAKC,cAAc,CAAC1S,GAAI,4BACjC,IAAK,QACH,OAAOyS,EAAKC,cAAc,CAAC1S,GAAI,4BACjC,IAAK,QACH,OAAOyS,EAAKC,cAAc,CAAC1S,GAAI,6BACjC,QACE,OAAOkQ,GAoBAk0X,CAAgBl0X,e,gJCpF/B,IAAYsI,E,wJAAZ,OAEyC6rX,EAA5BA,0BAA4B,SAAC9kL,GAAD,MAA0B,CACjEn8M,KAAMoV,EAAMqtD,6BACZhtD,QAAS,CAAC0mM,yBAGgC+kL,EAA/BA,6BAA+B,SAACpI,GAAD,MAAgC,CAC1E94X,KAAMoV,EAAMstD,iCACZjtD,QAAS,CAACqjX,gC,iICVZ,O,OACA,OACA,OAEA,Q,IAEA,S,IACA,O,uDAEMqI,E,YAEJ,WAAYjhS,IAAO,gGACXA,IADW,SA2BnBkhS,sBAAwB,WACtB,EAAKlhS,MAAM19E,kBAAiB,IA1B5B,EAAK7mB,MAAQ,CACX0lY,SAAS,GAHM,E,uIAWO7tN,GAAW,WACnC,UAAUz9I,eAAe,wBACpBy9I,EAAU/wJ,YAAc7tB,KAAKsrG,MAAMz9E,YACtC7tB,KAAKs9K,SAAS,CACZmvN,SAAS,IACR,WACD/9S,YAAW,WACT,EAAK4uF,SAAS,CACZmvN,SAAS,MAEV,U,+BAYP,OACE,+BAAK7hT,UAAW,QAAU5qF,KAAKsrG,MAAMz9E,WAAa,gBAAkB,KAAO7tB,KAAK+G,MAAM0lY,QAAU,iBAAmB,KACjH,+BAAK7hT,UAAU,eACb,8BAAIA,UAAU,sBAAqB,4CAAkB5iF,GAAG,yBACxD,6BAAG4iF,UAAU,4BAA2B,4CAAkB5iF,GAAG,gCAE/D,kCAAQ4iF,UAAU,sCAAsCkyF,QAAS98K,KAAKwsY,wBACtE,+BAAK5hT,UAAU,gBACb,8C,2BAcK,IAAAkhB,UAPS,SAACxzG,GACvB,MAAO,CACLu1B,WAAYv1B,EAAMkP,UAAUqmB,WAC5BrmB,UAAWlP,EAAMkP,UAAUA,aAIS,CACtComB,qCADa,CAEZ2+W,I,mICpEH,M,IACA,MACA,OACA,OAEA,Q,IACA,O,uDAEMG,G,6OAMJC,qBAAuB,WACrB,UAAUxrW,eAAe,6BACzB,EAAKmqE,MAAMvhF,iB,gGAIX,OAAO/pB,KAAKsrG,MAAM67N,SAChB,gCAAMv8O,UAAU,sBAAsBkyF,QAAS98K,KAAK2sY,sBAClD,4CAAkB3kY,GAAG,8CAGvB,kCAAQ4iF,UAAU,6BAA6BkyF,QAAS98K,KAAK2sY,sBAC3D,gCAAM/hT,UAAU,oCACd,4CAAkB5iF,GAAG,8CAEvB,gCAAM4iF,UAAU,uCACd,4CAAkB5iF,GAAG,sD,GAtBM,UAAM6jG,W,EAElCq2C,UAAY,CACjBilL,SAAU,UAAU/kL,M,cA+BT,IAAAt2C,UALS,WACtB,MAAO,KAI+B,CACtC/hF,+BADa,CAEZ2iX,I,8EC5CH,W,OACA,OACA,O,IACA,M,IAEA,Q,mDAEA,IAAME,EAAyB,SAACthS,GAAU,IAEjCnzF,EAA8DmzF,EAA9DnzF,eAAgBsC,EAA8C6wF,EAA9C7wF,KAAMgK,EAAwC6mF,EAAxC7mF,qBAAsBphB,EAAkBioG,EAAlBjoG,QAAS8oQ,EAAS7gK,EAAT6gK,MACtDhmP,EAAgB9iB,GAAWohB,EAE7BooX,EAAO,GACPz4S,EAAiBjuE,EAAcxiB,UAAUywF,eAY7C,OAXKj8E,EAAeE,SAAWF,EAAeG,gBAAkBmC,EAAK1C,WAC/C,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,8BAAgCoO,EAAcxiB,UAAUmF,mBACnGsrF,EAAiB35E,EAAKC,cAAc,CAAC1S,GAAI,8BAAgCme,EAAcxiB,UAAUmF,oBACxE,UAAhB2R,EAAKvC,QAAsBuC,EAAK1C,SAAS,oCAAsCoO,EAAcxiB,UAAUmF,qBAChHsrF,EAAiB35E,EAAKC,cAAc,CAAC1S,GAAI,oCAAsCme,EAAcxiB,UAAUmF,uBAGtGqjQ,GAAS/3K,GAAkBA,EAAe3/F,OAAS,IACtDo4Y,EAAOz4S,EAAer2F,MAAM,MAAMiJ,QAAO,SAAAtP,GAAA,OAAKA,MAI9C,wCACE,mCAAoBkzF,UAAU,4BAA4BvnF,QAAS8iB,EAAegmP,MAAOA,IACxF0gI,EAAKp4Y,OACJ,8BAAIm2F,UAAU,sBACXiiT,EAAK/kY,KAAI,SAAC+kY,EAAMj/X,GACf,OAAO,8BAAIg9E,UAAU,0BAA0BpzF,IAAK,OAASoW,GAAQi/X,OAGvE,OAKVD,EAAuB1qP,UAAY,CACjC7+I,QAAS,UAAU1L,OACnBw0Q,MAAO,UAAU/pH,M,WAYJ,IAAA2F,aACb,IAAAj8C,UAVsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtB8e,qBAAsBnsB,EAAMytB,eAAetB,wBAIpB,GAGzB,CAA6CmoX,K,uHCtD/C,M,IACA,MACA,O,IAEA,QACA,QACA,QACA,Q,IACA,SACA,S,mDAEA,IAAME,EAA+B,SAACxhS,GAAU,IAYxC,EAVC5gF,EACiB4gF,EADjB5gF,YAAaN,EACIkhF,EADJlhF,iBAAkBg6G,EACd94B,EADc84B,wBAAyBtzH,EACvCw6F,EADuCx6F,qBAAsBspE,EAC7DkxB,EAD6DlxB,OAAQ2yT,EACrEzhS,EADqEyhS,UAC3FxwD,EAAsBjxO,EAAtBixO,mBAEI3/T,GAAe,IAAA69E,gCAA+B/vE,GAI9CyuI,EAAWroJ,EAAqBsZ,IAAqBtZ,EAAqBsZ,GAAkBM,aAC7F5Z,EAAqBsZ,GAAkBM,YAAY1iB,KAAO0iB,EAAY1iB,GAErEglY,GAAA,gCAAkB,WAAOnlG,GAAP,iFAGlBA,IAHkB,0CAIb,GAJa,UAuBtBzjK,mBACGh6G,EAAmB,CAClBM,cACApkB,OAAQsW,EAAeA,EAAatW,OAAS,MAGjDtO,QAAQ4B,IAAI,yBAA0B8wB,KAClCA,EAAYuiX,cAAgBviX,EAAYuiX,aAAat5Q,SAAWjpG,EAAYuiX,aAAa5pY,SACxFqnB,EAAYuiX,aAAaz8X,WAAa+rU,GA/BrB,kCAgCO,IAAAtuC,uBAAsBvjR,EAAYuiX,aAAa5pY,QAASqnB,EAAYuiX,aAAaz8X,WAhCxF,OAgCd08H,EAhCc,OAiCpBl1I,QAAQ4B,IAAI,4BAA6BszI,GACrCA,GACFqvM,EAAmB,CAAC/gU,KAAM0xH,GAAe,KAAMxiH,EAAYuiX,cAnCzC,mDAAlB,6CAwCN,OACE,wCACG,SAACplG,GAAD,OAA0BklG,EACzB,+BAAKniT,UAAU,SAASkyF,QAAS,kBAAMkwN,EAAgBnlG,KACrD,+BAAKj9M,UAAW,qBAAuBuuE,EAAW,+BAAkC,KACjFzuI,EAAYq6F,eACX,+BAAKn6B,UAAU,qBACb,+BAAKA,UAAW,2BAA4B7rF,IAAK2rB,EAAYq6F,eAAgBmvF,IAAI,MAEjF,MAEN,+BAAKtpH,UAAU,mBACb,8BAAIA,UAAU,uBAAuBlgE,EAAYi2F,kBAAoBj2F,EAAYwrB,OAASxrB,EAAYla,WACtG,+BAAKo6E,UAAU,6BAA6BlgE,EAAYg4H,wBACvDvqJ,OAAO2B,SAASC,KAAKI,SAAS,gBAAqC,OAAnBuwB,EAAY1iB,GAC3D,+BAAK4iF,UAAU,6BACb,yCAEA,OAIR,+BAAKA,UAAW,WAAauuE,EAAW,qBAAuB,IAC1D9kJ,MAAO+lE,EACP0iG,QAAS,kBAAMkwN,EAAgBnlG,KAClC,+BAAKj9M,UAAU,qBACZlgE,EAAYq6F,eACT,+BAAKn6B,UAAW,2BACX7rF,IAAK2rB,EAAYq6F,eACjBmvF,IAAI,KACT,MAEN,+BAAKtpH,UAAW,gBAMd,gCAAMA,UAAU,sBACblgE,EAAYi2F,kBAAoBj2F,EAAYwrB,OAASxrB,EAAYla,iBAShFs8X,EAA6B5qP,UAAY,CACvCx3H,YAAa,UAAUkvB,MAAV,wBACbmzV,UAAW,UAAU3qP,KACrBm6L,mBAAoB,UAAUx9J,MAGhC,IASMuR,EAAqB,CACzBlsD,mD,WAGa,IAAAt4B,UAbS,SAACxzG,GAAU,MACkCA,EAAMqY,YACzE,MAAO,CACLC,iBAH+B,EAC1BA,iBAGLwZ,iBAJ+B,EACRA,iBAIvBtZ,qBAL+B,EACUA,wBAYLw/K,EAAzB,CAA6Cw8M,I,8EClI5D,I,IAAA,M,IACA,MACA,OAEA,QACA,S,mDAEA,IAAMI,EAAsB,SAAC5hS,GAE3B,IAAM6hS,EAAe,WAEnB,IAAK7hS,EAAMnlF,cACT,OAAO,KAGT,IAAIpnB,EAAM,GAkBV,OAfEA,EADEusG,EAAMnlF,cAAcxiB,UAAUE,cAC1B,IAAAC,oBACJwnG,EAAMnlF,cAAcxiB,UAAUE,aAC9BynG,EAAM7qG,SAAW,EAAAgwE,gBAAgBC,MAAQ,EAAAD,gBAAgBE,QAElD26B,EAAMltF,gBAAkBktF,EAAMnlF,cAAcviB,gBAC/C0nG,EAAMnlF,cAAcviB,gBAE1B7E,iDASA,+BAAK6rF,UAAU,8BAA8Bv2E,MAlBlC,IAmBT,+BAAKtV,IAAKA,EAAKm1M,IAAI,8BAA8BtpH,UAAW,yCAKlE,OAAI0gB,EAAM8hS,0BAEN,+BAAKxiT,UAAU,iEACZuiT,IACD,gCAAMviT,UAAU,2BACd,4CAAkB5iF,GAAG,oDAEvB,6BAAG4iF,UAAU,0BACX,4CAAkB5iF,GAAG,qDAMFsjG,EAAMnlF,cAAcxiB,UAAUixB,aAAe02E,EAAMnlF,cAAcxiB,UAAUixB,WAAWngC,OAU/G,+BAAKm2F,UAAU,qBACZuiT,IACD,gCAAMviT,UAAU,2BACd,4CAAkB5iF,GAAG,iDAEvB,6BAAG4iF,UAAU,0BACX,4CAAkB5iF,GAAG,iDAbzB,+BAAK4iF,UAAU,qBACb,gCAAMA,UAAU,2BAA2BkyF,QAASxxE,EAAM+hS,SAC1D,gCAAMziT,UAAU,uDACd,4CAAkB5iF,GAAG,sDAgB7BklY,EAAoB38X,YAAc,sBAClC28X,EAAoBhrP,UAAY,CAC9BmrP,OAAQ,UAAUtuN,KAClB54J,cAAe,UAAUxuB,OACzBy1Y,0BAA2B,UAAUhrP,M,UAExB8qP,G,2KClFf,I,EAAA,SACA,QACA,O,oCACA,QAUmCI,EAAtBA,oBAAsB,SAAClnY,EAAUuZ,EAAS3S,GAAmC,IAAvBugY,EAAuB,0DACnD,UAAMprY,WAApCwD,EADiF,EACjFA,gBAAiBvD,EADgE,EAChEA,UACxB,SAAIuD,EAAgB+B,SAASiW,sBACH,SAApBvX,EAASE,SAAqBF,EAASC,cAAgBknY,GAAe5tX,EAAQnE,KAAK7X,UAAUqE,KAAO5B,EAASC,YAAY1C,UAAUqE,KAClI5F,EAAUG,UAAUtC,MAAK,SAAA0L,GAAA,MAA0B,SAAjBA,EAAMrF,QAAqBqF,EAAMnD,eAAiBwE,SACvF,IAAAkjK,oBAAmB,EAAAvwH,kBAAkBK,qBAAsB,CACzD55C,WACAuZ,UACA4tX,gBAEK,IAUgCC,EAAhCA,8BAAgC,SAACxgY,GAAe,IAErDygY,EADc,UAAMtrY,WAAnBC,UAC6BG,UAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAMnD,eAAiBwE,KACjFygY,EAAkBh5Y,QACpBg5Y,EAAkBrvY,SAAQ,SAAAuN,GACxB,UAAMsY,UAAS,IAAAiI,gBAAevgB,QAaS+hY,EAAhCA,8BAAgC,SAAC1gY,EAAYouG,EAAc29D,EAAYy4E,GAAkB,IAE9Fi8I,EADc,UAAMtrY,WAAnBC,UAC6BG,UAAUyE,QAAO,SAAA2E,GACnD,OAAOA,EAAMnD,eAAiBwE,GAAcrB,EAAM2e,eAAiB8wF,GAAgBzvG,EAAM6e,eAAiBuuJ,KAE5G,GAAI00N,EAAkBh5Y,OAAQ,CAC5BuD,QAAQ4B,IAAI,oBAAqB6zY,GAUjC,OAHA,IAAAv9N,oBAAmB,EAAAvwH,kBAAkBM,oCAAqC,CACxEuxM,cAPoB,WACpBi8I,EAAkBrvY,SAAQ,SAAAuN,GACxB,UAAMsY,UAAS,IAAAiI,gBAAevgB,OAEhC6lP,KAG6B/5P,UAAd,MAEV,EAET,OAAO,I,iFCrET,I,IAAA,MACA,OACA,O,IAEA,O,IACA,Q,8DA2Be,IAAAswJ,aACb,IAAAj8C,UARsB,SAACxzG,GAEvB,MAAO,CACL6f,eAFqB7f,EAAMqN,mBAO7B,EAzBkC,SAAC2lG,GAAU,IACtC7wF,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAEb,OACE,+BAAKyyE,UAAU,cACZzyE,EAAe8/F,mBAAqB,KACnC,mCAAYsxI,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,gDACpB,yCAGJ,gCAAMA,UAAU,oBACd,4CAAkB5iF,GAAG,8C,8ECpB7B,I,IAAA,MACA,O,IAEA,S,IACA,O,IACA,QACA,QACA,Q,IACA,S,IACA,S,IACA,Q,8DA4Ce,IAAA8jG,UAVS,SAACxzG,GAIvB,MAAO,CACL8jE,kBAJ0B9jE,EAAM0zG,UAA3B5vC,kBAKLhnD,uBAJ+B9c,EAAMwc,UAAhCM,0BAQM,EA1Ce,SAACk2F,GAAU,IAEhClvC,EAAqBkvC,EAArBlvC,kBAEP,IAAKA,EACH,OAAO,KAGT,IAAM1mD,GAAkB,IAAAhB,oBAAmB0nD,GAE3C,OACE,+BAAKwuB,UAAU,mBACb,+BAAKA,UAAU,6BACb,mCAAkBvnF,QAAS+4D,EACTnlD,YAAamlD,EAAkBz4D,UAAUqE,MAE7D,+BAAK4iF,UAAU,wBACb,+BAAKA,UAAU,YACb,8BAAIA,UAAU,kBAAiB,mCAAavnF,QAAS+4D,EAAmBhkD,mBAAmB,MAE7F,6BAAGwyE,UAAU,6BACX,mCAAgB+N,YAAav8B,KAE9B,qBAAiF,KAA3D,mCAAuBu8B,YAAav8B,KAE7D,+BAAKwuB,UAAU,yBACZl1E,EAAkB,mCAAkBk1E,UAAU,0CAA4C,8C,8ECtCnG,I,IAAA,MACA,O,IACA,MACA,OAEA,QACA,Q,mDAEA,IAAM+iT,EAAwB,SAACriS,GAAU,IAEhC3S,EAAe2S,EAAf3S,YAEP,OAAI,IAAAtxF,WAAUsxF,GACL,KAIP,gCAAM/N,UAAU,0BACd,4CAAkB5iF,GAAG,8BAK3B2lY,EAAsBzrP,UAAY,CAChCvpD,YAAa,UAAU/+C,MAAV,qB,WAUA,IAAAkyD,UAPS,SAACxzG,GAEvB,MAAO,CACLksY,4BAFoClsY,EAAM0zG,UAArCw4R,+BAMM,CAAyBmJ,I,8EClCxC,W,OACA,O,IACA,MACA,OACA,Q,IACA,Q,IAEA,QAEA,QACA,QACA,QAEA,U,IACA,SACA,Q,IACA,SACA,Q,IACA,O,mDAEA,IAAMC,EAAsB,SAACtiS,GAAU,IAE9B7wF,EACuB6wF,EADvB7wF,KAAMtC,EACiBmzF,EADjBnzF,eAAgB01X,EACCviS,EADDuiS,YAAaC,EACZxiS,EADYwiS,gBAAiBh0Y,EAC7BwxG,EAD6BxxG,SAAU4nH,EACvCpW,EADuCoW,wBACnEuqJ,EAA4B3gK,EAA5B2gK,yBAEI8hI,EAAaj0Y,EAAS+d,SAAS1d,SAAS,EAAAob,OAAOyvF,MAEjD/P,GAAgB,IAAA6sD,UAAQ,WAC1B,OAAO,IAAA5sD,cAAY,GAAO,GAAM,EAAO64S,GAAY,KAElD,CAACrsR,EAAyBuqJ,EAA0B8hI,IAKvD,KAHA94S,GAAgB,aAAQA,EAAc,CADT,SAAC+4S,GAAD,OAAe,IAAAlyX,qBAAoBkyX,EAAUpxX,aAAcnC,EAAMtC,KAChC,CAAC,SAI7D,OAAO,KAGT,IAAM81X,EAAc,CAAC,eAAgB,YAAa,YAAa,cACzDC,EAAaj5S,EAAcjuF,QAAO,SAAAmuF,GAAA,OAAgB84S,EAAY9zY,SAASg7F,EAAa7uF,WAQ1F,OAPI4nY,EAAWz5Y,QAAX,uBACFwgG,EAAgB44S,EAAcK,EAAaj5S,EAAcjuF,QAAO,SAAAmuF,GAAA,OAAiB84S,EAAY9zY,SAASg7F,EAAa7uF,WAC9GunY,GACH54S,EAAclgG,KAAK,CAACuR,OAAQ,yBAK9B,+BAAKskF,UAAU,0BACXqhL,EACA,uCACGh3K,EAAcntF,KAAI,SAAAkmY,GACjB,OAAO,mCAAex2Y,IAAKw2Y,EAAU1nY,OAAQ6uF,aAAc64S,OAE5DF,EAAkB,wCAAwB,MALlB,0CAanCF,EAAoB1rP,UAAY,CAC9B2rP,YAAa,UAAUzrP,KACvB0rP,gBAAiB,UAAU1rP,MAG7B,IAWMkuC,EAAqB,CACzB7zH,8CACAO,sCACA2gR,yC,WAGa,IAAAptJ,aACb,IAAAxoC,aACE,IAAAj8C,UAnBoB,SAACxzG,GAAU,IAC1BkzG,EAAqBlzG,EAAMgR,YAA3BkiG,kBACA94E,EAAsBp6B,EAAMgsL,QAA5B5xJ,mBAEP,MAAO,CACLva,eAAgB7f,EAAMqN,gBACtB+7G,wBAAyBlW,EAAkB/2G,OAC3Cw3Q,yBAA0Bv5O,EAAmBj+B,UAYpB67L,EAAzB,CAA6Cs9M,M,8ECvFjD,I,IAAA,MACA,OACA,S,IACA,M,IAEA,QACA,S,IACA,SACA,Q,IACA,S,mDAGA,IAAMO,EAAuB,SAAC7iS,GAAU,IAE/B9vC,EACkE8vC,EADlE9vC,aAAct6C,EACoDoqF,EADpDpqF,aAAci6R,EACsC7vM,EADtC6vM,WAAY16S,EAC0B6qG,EAD1B7qG,SAAU6qU,EACgBhgO,EADhBggO,gBAAiBv1N,EACDzK,EADCyK,SAAUrrF,EACX4gF,EADW5gF,YAAa9Z,EACxB06F,EADwB16F,iBAC/F2jG,EAAuEjJ,EAAvEiJ,YAAaszL,EAA0Dv8L,EAA1Du8L,qBAAsB51M,EAAoCqZ,EAApCrZ,mBAAoBs5O,EAAgBjgO,EAAhBigO,aAEnD5rU,EAAQc,EAAW,EAAAoyG,aAAaC,aAAaC,OAAS,EAAAF,aAAaC,aAAa4rE,QAClF7+K,EAASY,EAAWygB,GAAgBtQ,EAAmB,GAAK,IAAMsQ,EAAe,IACjFqqT,IACF1rU,EAASY,EAAWZ,EAAS,GAAKA,EAAS,IAG7C,IACM2rU,EAA+B,IAAjBhwQ,EAAqB,EAAI,EAGvCiwQ,EAAe,CACnB9rU,QACA6rU,cACAE,YAPmC,IAAjBlwQ,EAAqB77D,EAAQ,EAAIA,EAQnDgsU,SANevhU,KAAKkI,MAAMi5T,GAAgBpwB,EAAW1mT,QAAU+2U,GAO/D3rU,SACA+rU,UAA4B,IAAjBpwQ,EACP,IACA,IACJqwQ,iBAAkB,EAClBC,0BAA0B,EAC1BC,qBAAqB,GA0BvB,OACE,gCAEEpsU,MAAO8rU,EAAa9rU,MACpBE,OAAQ4rU,EAAa5rU,OACrBmgL,SAAUsrJ,EACVO,iBAAkBJ,EAAaI,iBAC/BF,SAAUF,EAAaE,SACvBH,YAAaC,EAAaD,YAC1BE,YAAaD,EAAaC,YAC1BE,UAAWH,EAAaG,UACxBI,aAlCiB,SAAC,GAAwC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MACjD,GAAIk3T,EACF,OAAO,mCAAgCl3T,MAAOA,EAAO7c,IAAKA,IAE5D,IAAMmoB,EAAUw7R,EAAYswB,EAAaD,YAAcU,EAAYD,GACnE,OAAKtsT,EAGDo2F,EACK,mCAA8Bpd,YAAah5E,EAAQnE,KACrBkP,YAAaA,EACb6pF,YAAaA,EACbszL,qBAAsBA,EACtB51M,mBAAoBA,EACpB59E,MAAOA,EACP7c,IAAKA,EACLytF,SAAUk2N,IAE1C,mCAAiB9mS,MAAOA,EAAOskF,YAAah5E,EAAQnE,KAAMhkB,IAAKA,EAAKytF,SAAUk2N,IAZ5E,MA6BPgxB,eAdmB,kBAAM,+BAAKvhP,UAAW,YAAhB,yBAmB/BujT,EAAqBjsP,UAAY,CAC/B3tC,YAAa,UAAU58G,OACvBkwS,qBAAsB,UAAU9oH,KAChC9sF,mBAAoB,UAAU8sF,KAC9Bo8H,WAAY,UAAU9kS,MACtBg1T,cAAe,UAAUzyN,OACzBn4G,SAAU,UAAU2hJ,KACpBkpL,gBAAiB,UAAUvsJ,KAC3BhpE,SAAU,UAAUqsC,KACpB13H,YAAa,UAAUkvB,MAAV,wBACb2xR,aAAc,UAAU3yN,Q,WAeX,IAAA9M,UAZS,SAACxzG,GAAU,IAC1BkjE,EAAgBljE,EAAM0zG,UAAtBxwC,aAD0B,EAEAljE,EAAMgR,YAEvC,MAAO,CACLkyD,eACAt6C,aAN+B,EAE1BA,aAKLzgB,SAP+B,EAEZA,SAMnBmQ,iBALyBtY,EAAMqY,YAA1BC,oBASM,CAAyBu9X,I,8EC1GxC,I,IAAA,M,IAEA,Q,IACA,OACA,Q,6DAGyB,SAAC7iS,GAAU,MACTA,EAAlB1gB,iBAD2B,MACf,GADe,EAGlC,OACE,mCAAaA,UAAW,uCAAyCA,IAC9D,kBACC,mCAAiB6gB,MAAO,EAAAC,OAAOC,a,8ECbvC,W,OACA,OACA,O,IAEA,O,IACA,QAEA,QACA,Q,IACA,S,IACA,SACA,Q,IACA,S,IACA,SACA,Q,0DAEA,IAiFM2kF,EAAqB,CACzB1zH,+C,WAGa,IAAAmrF,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAU,MAC4BA,EAAM0zG,UAEnE,MAAO,CACL5vC,kBAJ+B,EAC1BA,kBAILS,eAL+B,EACPA,eAKxBC,gBAN+B,EACSA,gBAMxCr8D,SALiBnI,EAAMgR,YAAlB7I,YAckB6vL,EAAzB,EAtFsB,SAAChlF,GAAU,IAE1B7wF,EAA6F6wF,EAA7F7wF,KAAM2hD,EAAuFkvC,EAAvFlvC,kBAAmBS,EAAoEyuC,EAApEzuC,eAAgBC,EAAoDwuC,EAApDxuC,gBAAiBF,EAAmC0uC,EAAnC1uC,sBAAuBn8D,EAAY6qG,EAAZ7qG,SAElFk+T,EAAkB,WACtB,UAAUx9R,eAAe,EAAAvlC,mBACrB,EAAA6tC,gCAAgC8B,qCAChC,EAAA5I,6BAA6BkC,mCAEjC+3B,EAAsB,GAAI,EAAAvgC,qBAAqBE,SAkD3CwW,GAAc,EAAD,oBAAuBtyC,EACtC,kCAAqCo8D,EAA2C,GAA1B,yBACtD,oBAAsBA,EAAiB,+CAAiDC,EAAkB,IAE9G,OACE,+BAAK8tB,UAAW73C,GApDE,WAElB,IAAKqpB,EACH,OAAO,KAET,OAAQU,GACN,KAAK,EAAAzgC,qBAAqBC,KAC1B,QACE,OAAO,wCACT,KAAK,EAAAD,qBAAqBE,OAC1B,KAAK,EAAAF,qBAAqBG,IACxB,OAAKqgC,EAIH,+BAAK+tB,UAAU,WACZnqF,IAAa,EAAD,mBAAsB,KACjC,mCAAY8oP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,4CACVkyF,QAAS6hJ,GACnB,yCAGH7hQ,IAAoB,EAAAzgC,qBAAqBE,OAAS,wCAAuB,wCACzE97B,EAAW,KACV,wCACE,6BAAGmqF,UAAU,oBACX,4CAAkB5iF,GAAI80D,IAAoB,EAAAzgC,qBAAqBE,OAAS,4BAA8B,gCAEvGugC,IAAoB,EAAAzgC,qBAAqBE,OACxC,6BAAGquD,UAAU,uBACX,4CAAkB5iF,GAAI,kCAEtB,KACJ,yCAGHvH,GAAaq8D,IAAoB,EAAAzgC,qBAAqBE,OACrD,6BAAGquD,UAAU,uBACX,4CAAkB5iF,GAAI,kCAEtB,MA7BC,MAyCVomY,S,iGCjFP,MACA,OACA,OAEA,QAOA,Q,8DAkDe,IAAAtiS,UAZS,SAACxzG,GAKvB,MAAO,CACLwY,qBAL6BxY,EAAMqY,YAA9BG,qBAMLgB,mBALiBxZ,EAAMqN,gBAAlB+B,SAMLqW,iBALyBzlB,EAAMgsL,QAA1BvmK,oBASM,EAhDqB,SAACutF,GAAU,IAEtCx6F,EAA8Dw6F,EAA9Dx6F,qBAAsBgB,EAAwCw5F,EAAxCx5F,mBAAoBiM,EAAoButF,EAApBvtF,iBAEjD,IAAKjM,EAAmBk1H,YACtB,OAAO,KAGT,IAAMngI,EAAoBnS,OAAOmc,KAAKC,GAAuBxP,QAAO,SAACmB,EAAO8/G,GAC1E,IAAMvxG,EAAgBF,EAAqByxG,GAC3C,IAAKvxG,IAAkBA,EAAcC,gBACnC,OAAOxO,EAET,IAAM4rY,EAAkBr9X,EAAcC,gBAAgBvQ,YAAY+6B,eAC5DtyB,EAAWklY,EACb35Y,OAAOmc,KAAKw9X,GAAiBrnY,QAAO,SAAAsgD,GAAA,OAAO+mV,EAAgB/mV,MAAM7yD,OACjE,EACJ,8BAAWgO,GAAX,EAAkB,IAAAmb,mBAAkB5M,EAAcC,gBAAiB9H,EAAU4U,OAC5E,IACH/lB,QAAQ4B,IAAI,mBAAoBiN,GAEhC,IAAMlF,GAAa,IAAA+E,eAAc,MAAM,EAAOG,GAAkB,GAC1DkjH,GAAa,IAAA7oH,wBAAuBS,GAE1C,OACE,+BAAKipF,UAAU,2BACZ,EAAAhvF,mBACC,gCAAMgvF,UAAU,iCACd,4CAAkB5iF,GAAG,wBADvB,KAGE,MACH,IAAA0L,sBAAqB5B,GAAoB,IAAA9P,cAAa+nH,GAAa,MAAM,Q,8EC5CtDukR,EAAbA,WAAa,SAACl3X,EAAK2Z,GAAsB,IAAZ/oB,EAAY,uDAAP,GACzCumY,EAASn1Y,SAAS8oD,cAAc,UACpCqsV,EAAOnjY,KAAO,kBAEVmjY,EAAOC,WACTD,EAAOE,mBAAqB,WACA,WAAtBF,EAAOC,YAAiD,aAAtBD,EAAOC,aAC3CD,EAAOE,mBAAqB,KACxB19W,GACFA,MAIGA,IACTw9W,EAAOz8S,OAAS/gE,GAGlBw9W,EAAOxvY,IAAMqY,EACbm3X,EAAOvmY,GAAKA,EACZ5O,SAAS0F,qBAAqB,QAAQ,GAAGqjD,YAAYosV,K,8ECnBvD,W,OACA,OACA,OACA,Q,IACA,MAEA,Q,IACA,S,mDAEA,IAAMG,EAAmB,SAACpjS,GAAU,IAE3Br+F,EACqCq+F,EADrCr+F,iBAAkBvC,EACmB4gG,EADnB5gG,iBAAkBoH,EACCw5F,EADDx5F,mBAAoBsD,EACnBk2F,EADmBl2F,uBAAwB64G,EAC3C3iB,EAD2C2iB,SAAUxzG,EACrD6wF,EADqD7wF,KAAMk0X,EAC3DrjS,EAD2DqjS,QACrGzkG,EAA0C5+L,EAA1C4+L,uBAAwBM,EAAkBl/L,EAAlBk/L,eAHQ,EAKOpxS,SAASC,SAA3C2b,EAL2B,EAK3BA,UAAWC,EALgB,EAKhBA,MAAOC,EALS,EAKTA,aACnBvT,GAAa,IAAA+E,iBACfqjH,GAAa,IAAA7oH,wBAAuBS,EAAY+I,GAC9C69H,GAAmBz2H,EAAmBy3T,oBAAsBz3T,EAAmBuD,4BAC9EL,GAAaC,GAASC,KAAkBE,EAE3CuoW,EAAWh8W,EAAWN,WAAW5M,OACjCkN,EAAWN,WACX,CAAC,CAACI,YAAaE,EAAWD,gBAC1BktY,EAAYjtY,EAAWI,kBAMrB67W,GAAa+wB,EACbE,EAAgBD,KAAe1kG,GAA0BM,EAAerwS,SAAS,QACjF20Y,GAAaH,KAAazkG,GAA0BM,EAAerwS,SAAS,UAE9E6vR,EAAgB,EAEZxnG,GAAkB,IAAA97K,eAAcuG,GAEtC+8Q,EAAgBxnG,EAAgB3gL,cAChC87W,EAAWn7L,EAAgBnhL,WAAW5M,OAClC+tL,EAAgBnhL,WAChB,CAAC,CAACI,YAAa+gL,EAAgB9gL,gBACnCktY,EAAYpsN,EAAgBzgL,kBAE9BioR,EAAgBA,EAAcllR,QAAQ,GACtCilH,EAAaA,EAAWjlH,QAAQ,GAEhC,IAmBMiqY,EAAc,kBAClB,gCAAMnkT,UAAU,sBAAsBkyF,QAAS,cAC7C,4CAAkB90K,GAAG,sCAIzB,OACE,wCACE,+BAAK4iF,UAAU,mBACb,gCAAMA,UAAU,yBACd,4CAAkB5iF,GAAG,sCAEvB,+BAAK4iF,UAAU,yBACZ29C,EAAkB,wBAACwmQ,EAAD,OAAkB,IAAAr7X,sBAAqB5B,EAAoBk4Q,KAGjF4zF,EAAYD,EAAS71W,KAAI,SAACm2W,EAAWC,GACpC,OApCe,SAAC31O,EAAiB01O,EAAWC,GAEhD,IAAMC,EAAWF,EAAUx8W,YAAYqD,QAAQ,GAIzCs5W,EAAUH,EAAU91W,UAAY81W,EAAU91W,SAAS8lH,GACrDgwP,EAAU91W,SAAS8lH,GACnBgwP,EAAUl3W,OAAS0T,EAAKC,cAAc,CAAC1S,GAAI,0BAC/C,OACE,+BAAK4iF,UAAU,kBAAkBpzF,IAAK0mX,GACpC,gCAAMtzR,UAAU,yBAAyBwzR,GACzC,+BAAKxzR,UAAU,yBACZ29C,EAAkB,wBAACwmQ,EAAD,OAAkB,IAAAr7X,sBAAqB5B,EAAoBqsW,KAuBzE6wB,CAAazmQ,EAAiB01O,EAAWC,MAC7C,KACJ2wB,EACC,+BAAKjkT,UAAU,mBACb,gCAAMA,UAAU,yBACbnwE,EAAKC,cAAc,CAAC1S,GAAI,gCACrBugI,IAAqBqmQ,EAAY,EAC/Bn0X,EAAKC,cAAc,CAAC1S,GAAI,kCACxB,KAER,+BAAK4iF,UAAU,yBACZ29C,EAAkB,wBAACwmQ,EAAD,OAAkB,IAAAr7X,sBAAqB5B,EAAoB88X,EAAU9pY,QAAQ,MAGlG,KAWH6pY,EAAU,KAAO,mCAAyB/sY,kBAAmBD,EAAWC,kBAC9B2mI,gBAAiBA,IAC3DumQ,EACC,+BAAKlkT,UAAU,mBACb,gCAAMA,UAAU,yBACd,4CAAkB5iF,GAAG,6BAEvB,+BAAK4iF,UAAU,yBACZ29C,EAAkB,wBAACwmQ,EAAD,OAAkB,IAAAr7X,sBAAqB5B,EAAoBi4G,EAAY,MAAM,KAGlG,OAKV2kR,EAAiBxsP,UAAY,CAC3BysP,QAAS,UAAUvsP,M,WA8BN,IAAA2F,aACb,IAAAwoC,aAAW,IAAAzkF,UA5BW,SAACxzG,GAAU,IAC1BoP,EAAYpP,EAAMqN,gBAAlB+B,SACAgD,EAAoBpS,EAAMsS,oBAA1BF,iBAF0B,EAGwBpS,EAAM8J,UAAxDG,EAH0B,EAG1BA,UAAWkuK,EAHe,EAGfA,2BAA4B9oK,EAHb,EAGaA,QACvCyN,EAA0B9c,EAAMwc,UAAhCM,uBACA64G,EAAY31H,EAAMgR,YAAlB2kH,SAL0B,EAME31H,EAAM4U,YAAlC4L,EAN0B,EAM1BA,OAAQ7L,EANkB,EAMlBA,iBANkB,EAOgB3U,EAAMo5B,wBAEvD,MAAO,CACL5f,mBAAoBpK,EACpBgD,mBACAnI,YACAkuK,6BACAr7J,yBACA64G,WACAn1G,SACA7L,mBACAi9R,uBAlB+B,EAO1BA,uBAYLM,eAnB+B,EAOFA,eAa7B7iS,aAKuB,GAGd,CAA6C+mY,M,8EC3J1D,I,EAAA,OACA,OACA,QACA,O,oCAEA,QAKA,QACA,QAEA,IAAMO,EAAa,SAAC3jS,GAAU,IAErBnR,EAC4EmR,EAD5EnR,WAAYrgG,EACgEwxG,EADhExxG,SAAU2pI,EACsDn4B,EADtDm4B,oBAAqB7yH,EACiC06F,EADjC16F,iBAAkBgzH,EACet4B,EADfs4B,oBAAqBQ,EACN94B,EADM84B,wBACvFoc,EAAiFl1C,EAAjFk1C,SAAUhhF,EAAuE8rC,EAAvE9rC,uBAAwBD,EAA+C+rC,EAA/C/rC,0BAA2Bn1C,EAAoBkhF,EAApBlhF,iBAEzD8kX,GAAqB,IAAA7uP,cAAY,WACrC9gF,EAA0B,CACxBhvC,SAAS,EACTs4S,mBAAoB,GACpB7/O,eAAgB,KAChBwoK,cAAe,SAEhB,CAACjyL,IA6BJ,OA3BA,IAAAoiD,YAAU,WAER,GADA3pH,QAAQ4B,IAAI,mBAAoBgX,IAC3BA,EAAkB,CACrB,IAAMwpF,GAAa,IAAA8f,qBAAoB/f,EAAYrgG,GACnD9B,QAAQ4B,IAAI,aAAcwgG,GACtBA,GACFqpC,EAAoBrpC,GAGxB,OAAO,WACLqpC,EAAoB,MACpBG,GAAqB,GACrBQ,EAAwB,IAAI,GACxB5kE,GAA0BA,EAAuBjvC,SACnD2+W,OAIH,CAAC/0S,KAEJ,IAAAwnB,YAAU,WACJniD,GAA0BA,EAAuBjvC,SACnD2+W,MAGD,CAAC9kX,EAAkBxZ,IAEjBA,EAIE4vI,EAHE,MAMXyuP,EAAW/sP,UAAY,CACrB1B,SAAU,UAAU2B,UAAU,CAAC,UAAU48B,KAAM,UAAUmlG,OAAOjrK,YAGlE,IAYMq3E,EAAqB,CACzB7sD,0CACAG,0CACAQ,kDACA7kE,uD,WAGa,IAAAgxH,aACb,IAAAzkF,UApBsB,SAACxzG,GAAU,MACwBA,EAAMqY,YAG/D,MAAO,CACLwpF,WAL+B,EAC1BA,WAKLvpF,iBAN+B,EACdA,iBAMjBwZ,iBAP+B,EACIA,iBAOnCo1C,uBAN+BlnE,EAAM0zG,UAAhCxsC,0BAkBkB8wH,EAAzB,CAA6C2+M,K,8ECrF/C,I,EAAA,O,oCACA,OACA,OAEA,Q,WAkCe,IAAAnjS,UATS,SAACxzG,GAAU,MACkCA,EAAMqY,YACzE,MAAO,CACLC,iBAH+B,EAC1BA,iBAGLwZ,iBAJ+B,EACRA,iBAIvBtZ,qBAL+B,EACUA,wBAQ9B,EA/BgB,SAACw6F,GAAU,IAEjC16F,EAA4D06F,EAA5D16F,iBAAkBwZ,EAA0CkhF,EAA1ClhF,iBAAkBtZ,EAAwBw6F,EAAxBx6F,qBAErC4sG,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAE3E,OAA0B,IAAtBsZ,EAEKxZ,EAAiBna,KAEtB2zB,GAAoB,GAA8B,IAAzBszF,EAAcjpH,OAClCipH,EAAc,GAAGxnE,MAEtB9rB,GAAoB,IAAMszF,EAAcjpH,OACnC,4CAAkBuT,GAAG,yBAAyBmO,OAAQ,CAACynU,WAAYhtU,EAAiBna,QAEpE,IAArB2zB,GAA0BszF,EAAcjpH,OAAS,GAAKmc,EAAiB8yI,WAClE9yI,EAAiB8yI,WAEnB,S,8EC1BT,I,EAAA,O,oCACA,OACA,OAEA,Q,WAiCe,IAAA53C,UATS,SAACxzG,GAAU,MACkCA,EAAMqY,YACzE,MAAO,CACLC,iBAH+B,EAC1BA,iBAGLwZ,iBAJ+B,EACRA,iBAIvBtZ,qBAL+B,EACUA,wBAQ9B,EA9BsB,SAACw6F,GAAU,IAEvC16F,EAA4D06F,EAA5D16F,iBAAkBwZ,EAA0CkhF,EAA1ClhF,iBAAkBtZ,EAAwBw6F,EAAxBx6F,qBAErC4sG,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAE3E,OAA0B,IAAtBsZ,EACKxZ,EAAiBuO,YAEtBiL,GAAoB,GAA8B,IAAzBszF,EAAcjpH,OAClCipH,EAAc,GAAGv+F,YAEtBiL,GAAoB,IAAMszF,EAAcjpH,OACnC,4CAAkBuT,GAAG,+BAA+BmO,OAAQ,CAACynU,WAAYhtU,EAAiBna,QAE1E,IAArB2zB,GAA0BszF,EAAcjpH,OAAS,GAAKmc,EAAiB+yI,iBAClE/yI,EAAiB+yI,iBAEnB,S,8ECzBT,W,OACA,OACA,OACA,Q,IACA,SACA,QACA,QACA,Q,IAEA,S,8DAsHe,IAAA4sC,aACb,IAAAxoC,aACE,IAAAj8C,UAzBoB,SAACxzG,GAAU,MAC8CA,EAAMqY,YAA9EwpF,EAD0B,EAC1BA,WAAY/vE,EADc,EACdA,iBAAkBtZ,EADJ,EACIA,qBAAsBF,EAD1B,EAC0BA,iBAM3D,MAAO,CACLupF,aACA/vE,mBACAtZ,uBACArQ,SATiBnI,EAAMgR,YAAlB7I,SAULmQ,mBACAquG,eAVuB3mH,EAAMilV,UAAxBt+N,eAWLz/C,uBAV+BlnE,EAAM0zG,UAAhCxsC,uBAWLo3F,cAVsBt+J,EAAMk4L,WAAvB55B,iBAckB,GAMvB,EAtH2B,SAACtrD,GAAU,IAEjCnR,EACoDmR,EADpDnR,WAAYrgG,EACwCwxG,EADxCxxG,SAAUswB,EAC8BkhF,EAD9BlhF,iBAAkBtZ,EACYw6F,EADZx6F,qBAAsBrQ,EACV6qG,EADU7qG,SAAU4qU,EACpB//N,EADoB+/N,cAAez6T,EACnC06F,EADmC16F,iBAC5FquG,EAAyD3T,EAAzD2T,eAAgBz/C,EAAyC8rC,EAAzC9rC,uBAAwBo3F,EAAiBtrD,EAAjBsrD,cAI1C,KAFoB33C,GAAkBruG,GAAsB9W,GAAYA,EAAS+d,UAAY/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAO0uF,SAG7H,OAAO,KAGT,IAAM7J,EAAaxpF,IAAoB,IAAAspG,qBAAoB/f,EAAYrgG,GACvE,IAAKsgG,EACH,OAAO,KAGT,IAAM3vE,GAAc,IAAAG,mBAAkBwvE,EAAYtpF,GAG5C4sG,GAAgB,IAAAnjB,kBAAiBH,EAAYhwE,EAAkBtZ,GAC/DkvU,EAAkB51T,GAAoB,IAAMszF,EAAcjpH,OAE1D06Y,EACJ,wCACG1kX,EAAY3iB,KAAI,SAACixK,EAAY4iD,GAC5B,IAAMj+G,GAAgB,IAAAnjB,kBAAiBH,EAAYuhI,EAAiB7qN,GAEpE,wBAAwB,CACtB,IAAIiiC,EAAa,wCACX3oB,IAAqBuxM,GAAqBqkH,EAA8C,GAA5B,4BAC7D/gO,EAAiB,uBAAyB,IAQ/C,OAPIx+G,GACE2pB,IAAqBuxM,IACvB5oL,GAAc3oB,EAAmBuxM,IAAoBqkH,EACjD,0BACA,4BAIN,mCAASp1P,UAAW73C,EAAYv7C,IAAKmkO,GACnC,wCACA,+BAAK/wI,UAAW,cAAiB8yB,EAAcjpH,OAAS,EAAK,GAAK,gDAC/DipH,EAAcjpH,OAAS,mCAAmBskL,WAAYA,EAAYsyJ,cAAeA,IAAmB,OAM7G,GAAI5qU,EAAU,CACZ,IAAIsyC,EAAa,qDAMjB,OALI3oB,IAAqBuxM,IACvB5oL,GAAc3oB,EAAmBuxM,IAAoBqkH,EACjD,6CACA,+CAGJ,+BAAKp1P,UAAW73C,EAAYv7C,IAAKmkO,GAC9Bj+G,EAAcjpH,OAAS,mCAAmBskL,WAAYA,EACZsyJ,cAAeA,IAAmB,MAInF,IAAIt4R,EAAa,oEAMjB,OALI3oB,IAAqBuxM,IACvB5oL,GAAc3oB,EAAmBuxM,IAAoBqkH,EACjD,mDACA,8CAGJ,mCAASxoV,IAAKmkO,EAAiB/wI,UAAW73C,GACxC,+BAAK63C,UAAW,cAAgB8yB,EAAcjpH,OAAS,EAAI,GAAK,2BAC3DmiK,GAAiBp3F,EAAuBjvC,QAAU,0BAA4B,KAChFmtF,EAAcjpH,OAAS,mCAAmBskL,WAAYA,EAAYsyJ,cAAeA,IAAmB,WAQjH,OAAI,EAAAzvU,oBAAsB6E,EAEtB,+BAAKmqF,UAAW,2BACTh6E,IAA0C,IAAtBwZ,GAA2B41T,EAAmB,2BAA6B,KACnGmvD,GAKAA,Q,8ECpGT,W,OACA,OACA,O,IACA,M,IAEA,O,IACA,QAEA,Q,IACA,S,IACA,SACA,Q,IACA,O,mDAEA,IAAMC,EAA2B,SAAC9jS,GAAU,IACnC9rC,EAAyD8rC,EAAzD9rC,uBAAwBgqU,EAAiCl+R,EAAjCk+R,cAAe/uX,EAAkB6wF,EAAlB7wF,KAAMha,EAAY6qG,EAAZ7qG,SAE9C4uY,GAA2B,IAAApvP,UAiBjC,OAbA,IAAAt+B,YAAU,WACJniD,EAAuBjvC,SACzBm+D,YAAW,WACT,GAAI2gT,GAA4BA,EAAyB76R,QAAS,CAChE,IAAM16D,GAAU,aAAEu1V,EAAyB76R,SAAS1oG,KAAK,wBACrDguC,GAAWA,EAAQ,IAAMA,EAAQ,GAAGq1O,YACtC,aAAEkgH,EAAyB76R,SAAShnB,QAAQ,CAACy5E,UAAWntH,EAAQ,GAAGq1O,WAAY,SAGlF,OAEJ,CAAC3vN,IAGF,+BAAKorB,UAAW,EAAAhvF,mBACZ,aACA,kCAAqC4jE,EAAuBjvC,QAAoC,GAA1B,yBACrEyvH,IAAKqvP,EACLh7X,MAAOm1X,GAAiB,IAC3B,+BAAK5+S,UAAW,iCACX,EAAAhvF,qBAAuB6E,EAAW,mCAAqC,KAC1E,+BAAKmqF,UAAU,4BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,gDACpB,yCAEF,8BAAIA,UAAU,oCACZ,4CAAkB5iF,GAAG,uCAGzB,6BAAG4iF,UAAW,kBAAoB,EAAAhvF,oBAAsB6E,EAAW,6BAA+B,KAChG,4CAAkBuH,GAAG,yCAEvB,wCACA,2CAMRonY,EAAyBltP,UAAY,CACnCsnP,cAAe,UAAU7xY,QAG3B,IAUM24L,EAAqB,CACzB/wH,uD,WAGa,IAAAwoF,aACb,IAAAj8C,UAfsB,SAACxzG,GAAU,MACmBA,EAAM0zG,UAAnDxsC,EAD0B,EAC1BA,uBAEP,MAAO,CACLpD,kBAJ+B,EACFA,kBAI7BoD,yBACA/+D,SAJiBnI,EAAMgR,YAAlB7I,YAakB6vL,EAAzB,CAA6C8+M,K,+EChF/C,I,IAAA,MACA,OACA,QACA,O,IAEA,O,IACA,QAEA,QACA,QACA,Q,OACA,QACA,Q,IACA,Q,mDAEA,IA6BM9+M,EAAqB,CACzBv1H,8BACA9yC,iC,WAGa,IAAAsoK,aACb,IAAAxoC,aACE,IAAAj8C,UAZoB,WACtB,MAAO,KAWoBwkF,EAAzB,EApC8B,SAAChlF,GAAU,IAEpC7wF,EAAgD6wF,EAAhD7wF,KAAMg2K,EAA0CnlF,EAA1CmlF,QAAS11H,EAAiCuwC,EAAjCvwC,cAAe9yC,EAAkBqjF,EAAlBrjF,eASrC,OACE,kCAAmB2gT,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAYg1I,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAU,8CACVkyF,QAAS,kBAZF,SAACvoE,GACxB,UAAUpzE,eAAe,EAAAwB,6BAA6BkB,qBACtDk3B,GAAc,IACd,IAAAu5C,eAAcC,EAAatsF,GAC3BwoK,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,MAQWsrS,CAAiB/6R,KAC1C,kD,wGChCV,IAAM94B,EAAKj+E,UAAUC,WAAaD,UAAU4G,QAAUjM,OAAOo3Y,MAClCC,EAAdA,YAAc/zT,EAAGzhF,QAAQ,cAAgB,EAC5By1Y,EAAbA,WAAch0T,EAAGzhF,QAAQ,SAAW,GAAOyhF,EAAGzhF,QAAQ,SAAW,G,2ICF9E,O,OACA,O,IACA,M,IAEA,Q,IACA,Q,IACA,QAEA,Q,IAEA,S,mDAGO,IAAMq8G,EAA4BA,EAA5BA,0BAA4B,WAKvC,MAJqB,CACnBE,WAAY,GACZC,YAAa,KAsCX0rN,EAAiB,SAAC52N,GAAU,IAEzB/sC,EAA+F+sC,EAA/F/sC,YAAaD,EAAkFgtC,EAAlFhtC,mBAAoB79D,EAA8D6qG,EAA9D7qG,SAAU42N,EAAoD/rH,EAApD+rH,uBAAwBiD,EAA4BhvH,EAA5BgvH,yBACnE5pH,EAAoBnyC,EAApBmyC,OAAQh1E,EAAY6iC,EAAZ7iC,SAHiB,GAIJ,IAAAylH,UAAS,CAACrvG,KAAM,EAAG5sC,IAAK,EAAG2sC,MAAO,IAJ9B,qBAIzBuoC,EAJyB,KAIjB+nP,EAJiB,QAKF,IAAAhhL,UAAS,IALP,qBAKzBrnG,EALyB,KAKhBsoR,EALgB,KAM1Br3B,GAAY,IAAA9qJ,QAAO,MAEnBykJ,EAAc,SAAC9jM,GACfxnG,SAASuzN,cAAgB/rH,EAAMlqF,OAAOuqI,QAAQ,eAAiB9hH,iBAAiBhlC,SAASf,SAASuzN,aAAarmN,SAGnHg4D,EAAmB,CACjBoyC,QAAQ,EACR9vB,cAAe,OAInB,IAAA+gC,YAAU,WACR,IAAKpjD,EAAYmyC,OACf,OAAO,KAETyxN,EAvD2B,SAAC5jQ,EAAa7iC,EAAUj7B,GAAa,IAC3D6F,EAAyBi4D,EAAzBj4D,OAAQs6E,EAAiBriB,EAAjBqiB,cACR41B,EAAeH,EAA0B/vG,EAAQs6E,GAAjD41B,YAEH1kE,EAAOrxC,EAAW,MAAQi7B,EAASthB,EAAI,GACvClV,EAAMzE,EAAW,MAAQi7B,EAASrhB,EAAI,GACtCw3B,EAAQ,OAENwwR,EAAkB7rN,EAAY/hH,OAAS,EAAI,IAAM,IAEnD6tU,EAAmB,IAUvB,GATI9rN,EAAY/hH,OAAS,EACvB6tU,EAAmB,IACV9rN,EAAY/hH,QAAU,IAC/B6tU,EAAmB,MAEhB7hU,GAAaqxC,EAAO35C,OAAOwqD,WAAa0/Q,IAC3CvwR,EAAO,OACPD,EAAQ,IAELpxC,GAAayE,EAAM/M,OAAO+xD,YAAco4Q,EAAmB,CAC9D,IAAIC,EAAiB,GACjB/rN,EAAY/hH,OAAS,EACvB8tU,EAAiB,IACR/rN,EAAY/hH,QAAU,IAC/B8tU,EAAiB,KAEnBr9T,GAAYq9T,EAGd,MAAO,CAACzwR,OAAM5sC,MAAK2sC,SAyBP2wR,CAAuBjkQ,EAAa7iC,EAAUj7B,IAJ1C,IAKP+1G,EAAeH,EAA0B93C,EAAYj4D,OAAQi4D,EAAYqiB,eAAzE41B,YACP4rN,EAAW5rN,KACV,CAACj4C,EAAa7iC,EAAUj7B,IAI3B,IAAIgiU,EAAgBroP,EAKpB,OAJItgC,EAAQrlD,QAAU,IACpBguU,EAAgB/tU,OAAO+2B,OAAO,GAAI2uD,EAAQ,CAAC8vD,SAAU,WAIrD,+BAAK71H,MAAOouT,EAAe73O,UAAU,aAAao1D,IAAK+qJ,GACrD,mCAAQ/zM,KAAM0Z,EACN9lB,UAAWnqF,EAAW,oBAAsB,oBAC5C0qS,SAAUJ,EAAUv2L,QACpBw2L,UAAW,eACXI,YAAA,EACAC,eAAgB5qS,EAChBiiU,UAAW,CAAC,CACVjsU,KAAM,kBACNk9H,SAAS,EACTm3B,QAAS,CACP63K,SAAS,EACTC,aAAa,EACbC,QAAQ,EACRC,aAAc,WACdC,QAAS,OAGlB,gBAAGz3B,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB,cAE1B,+BAAK3gN,UAAU,IACb,mCAAmBo4O,YAAat+B,GAC9B,+BAAK95M,UAAU,IACb,mCAAuB9wC,QAASA,EACTsoR,WAAYA,EACZ9nG,yBAA0BA,EAC1BjD,uBAAwBA,aAWjE6qG,EAAehgL,UAAY,CACzBm1E,uBAAwB,UAAUt4C,KAClCu7C,yBAA0B,UAAUv7C,MAGtC,IASMuR,EAAqB,CACzBhyH,yC,WAGa,IAAAwtC,UAbS,SAACxzG,GAGvB,MAAO,CACLimE,YAHoBjmE,EAAM0zG,UAArBztC,YAIL99D,SAHiBnI,EAAMgR,YAAlB7I,YAW+B6vL,EAAzB,CAA6C4xI,I,4ICnJ5D,I,IAAA,O,IACA,OACA,QACA,QACA,SACA,S,mDAEO,IAAMwtE,EAAwBA,EAAxBA,sBAAwB,WACnC,GAAIv3Y,OAAOw3Y,kBAAkC,oBAAPC,GAAoB,CACxD,UAAUzuW,eAAe,yBACzB,IAAItgB,EAAU,CAACgvX,QAASz2Y,SAASC,SAAS4b,OAC1Cjd,QAAQ4B,IAAI,uCAAwCinB,GACpD,IAAIivX,EAAe,CAACr5Y,KAAM,+BAAgCoqB,WAC1D,IACE1oB,OAAO43Y,KAAKjrV,OAAOmgL,OAAO+qK,QAAQJ,GAAG3qK,OAAQ6qK,GAC7C,MAAM35Y,GACN6B,QAAQ4B,IAAI,0CAEc,oBAAjBq2Y,aACTA,YAAY9tW,YAAY2tW,QAG1B,UAAU3uW,eAAe,qBACzB,UAAO5nC,QAAU,UAAOA,OAAOI,eAAiB,UAAOJ,OAAOI,iBAC9D,IAAA24F,kBACA,IAAAmlH,+BAIwCy4L,EAA/BA,6BAA+B,WAE1C,IAAK92Y,SAASC,SAAS4b,MAErB,OADA,IAAAw6G,kBAAiB,yDACV,GAGT,IAAA7oG,cAAa,2BACb,IAAA6wE,WAAU,CAACC,QAAQ,IAChB7lE,KAAK69W,GACLr9W,MAAMq9W,K,8ECvCSS,EAAPA,KAAO,CAClBzwW,MAAO,EACPC,SAAU,EACV7C,MAAO,EACPsjB,MAAO,I,mKCJT,M,IACA,Q,IACA,MACA,O,IACA,QACA,OAEA,QACA,Y,IACA,Q,IACA,O,IACA,QACA,Q,IACA,M,IACA,QACA,Q,mDAGA,IAAMgwV,EACe,EADfA,EAEgB,EAFhBA,EAGS,EAHTA,EAIK,EAJLA,EAKM,EAqBNC,GAhB+BrpH,EAAxBA,sBAAwB,WAAM,IAClCrhR,EAAmB,UAAMxD,WAAzBwD,gBACP,GAAIA,EAAgB2S,gBAAwD,QAAtC3S,EAAgB+B,SAAS4M,UAA4D,QAAtC3O,EAAgB+B,SAAS4M,UAC5G,MAAO,CAAC,KAAM,KAAM,KAAM,MAE5B,GAAI3O,EAAgBwyG,QAClB,MAAO,CAAC,KAAM,KAAM,MAEtB,OAAOxyG,EAAgB+B,SAAS4M,UAC9B,IAAK,MACH,OAAO3O,EAAgB0S,QAAU,CAAC,MAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,MACrE,QACE,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,Q,gBAWpC,WAAYizF,IAAO,gGACXA,IADW,SAenBjoF,QAAU,SAACk/F,GACT,EAAK+6D,SAAS,CAAC/6D,UAhBE,EAoCnB+tR,iBAAmB,WACjB,IAAIz/U,EAAU,CACZ3a,MAAO,eACP2a,QAAS,KACT22R,OAAQ,MAEV,OAAQ,EAAKzgV,MAAMw7G,MACjB,KAAK6tR,EACHv/U,EAAU,EAAK0/U,8BACf,MACF,KAAKH,EACHv/U,EAAU,EAAK2/U,+BACf,MACF,KAAKJ,EACHv/U,EAAU,EAAK4/U,wBAGnB,OAAO5/U,GArDU,EAwDnB+hM,0BAA4B,SAAC1/D,EAAO36H,EAAIntD,EAAM2qC,GAO5C,OANIA,KACF,IAAAnvB,cAAa,KAAMmvB,GACnB24C,YAAW,YACT,IAAA4D,mBACC,MAEE,UAAQsgK,0BAA0B1/D,EAAO36H,EAAIntD,IA/DnC,EAkEnBslY,gBAAkB,WAChB,UAAUvvW,eAAe,cACzB,UAAQqxN,8BACP3gO,MAAK,SAAC16B,GACL,IAAI+7L,EAAQ/7L,EAAElD,KAAOkD,EAAElD,KAAOkD,EAC9B,EAAKmmL,SAAS,CAAC4V,UACf,EAAK0/D,0BAA0B1/D,EAA/B,KAA0C,EAAK5nF,MAAMvpE,QAAQqsI,SAAW,EAAK9iE,MAAMrpE,aAAe,EAAG,wCACpG5P,OAAM,kBAAM,EAAKi5E,MAAM2/H,SAAQ,EAAO,EAAK3/H,MAAMrpE,iBAzEnC,EA4EnB0uW,kBAAoB,WAClB,UAAUxvW,eAAe,gBACzB,UAAQqxN,8BACP3gO,MAAK,SAAC16B,GACL,IAAI+7L,EAAQ/7L,EAAElD,KAAOkD,EAAElD,KAAOkD,EAC9B,EAAKmmL,SAAS,CAAC4V,UACf,EAAK0/D,0BAA0B1/D,EAA/B,KAA0C,EAAK5nF,MAAMvpE,QAAQqsI,SAAW,EAAK9iE,MAAMrpE,aAAe,EAAG,yCACpG5P,OAAM,kBAAM,EAAKi5E,MAAM2/H,SAAQ,EAAO,EAAK3/H,MAAMrpE,iBAnFnC,EAsFnB2uW,4BAA8B,SAACz6Y,GAC7B,IAAMu8P,GAAW,aAAKv8P,EAAEugB,OAAOxf,OAAOyH,QAAQ,UAAW,IACzD,EAAK2+K,SAAS,CAACo1E,aACS,IAApBA,EAASj+P,QACX,EAAK6oL,SAAS,CAACuzN,YAAY,IAAO,WAChC,UAAQl+I,8BAA8B,EAAK5rP,MAAMmsL,MAAOw/D,EAAU,EAAKpnJ,MAAMrpE,aAC1EpQ,MAAK,SAACs5H,GACDA,EAAQl3J,MACV,EAAK68Y,+BACL,UAAUrwW,UAAU,oBAAqB,WACzC,EAAKpd,QAAQ+sX,GACbj4Y,OAAOu2F,YAAW,kBAAM,EAAK4c,MAAM2/H,SAAQ,EAAO,EAAK3/H,MAAMrpE,eAAc,OAE3E,UAAUxB,UAAU,oBAAqB,WACzC,EAAK68I,SAAS,CAACyzN,OAAO,EAAOF,YAAY,WApGlC,EA0GnBC,6BAA+B,WAC7B,UAAU3vW,eAAe,wBA3GR,EA8GnB6vW,wBAA0B,WAAM,IAE1B1iO,EADc,EAAKhjE,MAAhBvpE,QACYusI,MAAQ,KACvB,UAAKnB,cAAc,EAAK7hE,MAAMrpE,YAAaqsI,EAAKv7J,gBAClD,EAAK+9X,+BACL,EAAKztX,QAAQ+sX,GACb,EAAK9yN,SAAS,CAACo1E,SAAU,KACzB,EAAKu+I,eACL,EAAKP,mBAEL,EAAKpzN,SAAS,CAAC4zN,kBAAkB,KAxHlB,EA4HnBC,iBAAmB,WACjB,EAAK7lS,MAAMliF,eAAe,CACxB6Y,YAAa,EAAKl7B,MAAMqqY,eACxBrvW,QAAS,EAAKh7B,MAAM+mK,cA/HL,EAmInB0P,gBAAkB,WAChB,EAAK2zN,mBACL,EAAK9tX,QAAQ+sX,IArII,EAwInBG,4BAA8B,WAAM,IAC3B91X,EAAQ,EAAK6wF,MAAb7wF,KACA9U,EAAmB,UAAMxD,WAAzBwD,gBACP,MAAO,CACLuwC,MAAOz7B,EAAKC,cAAc,CAAC1S,GAAI,gBAC/B6oD,QACE,+BAAK+5B,UAAU,uCACb,iCAAOx/E,KAAK,OACLlU,MAAO,EAAK6P,MAAM2rP,SAClB9nK,UAAW,+CAAqE,IAArB,EAAK7jF,MAAMgqY,MAAkB,qDAAuD,IAC/Iz/P,YAAY,oBACZwkF,SAAU,EAAK86K,4BACf5oY,GAAG,WACV,mCAAkBg6Q,QAAQ,SAAS12C,SAAU,SAACk7C,GAAD,OAAO,EAAKoqH,4BAA4B,CAACl6X,OAAQ,CAACxf,MAAOsvR,MAAMp7Q,KAAK,YAC/G,EAAKrE,MAAMgqY,MAET,KADA,+BAAKnmT,UAAU,+CAA8C,4CAAkB5iF,GAAG,uBAErF,EAAKjB,MAAM8pY,WACR,+BAAK9xY,IAAI,qEAAqEm1M,IAAI,gBAC7EtpH,UAAU,gDACf,KACJ,+BAAKA,UAAU,wDACb,4CAAkB5iF,GAAG,kBACrB,gCAAM4iF,UAAU,6CAAhB,QAAkE,EAAK0gB,MAAMvpE,QAAQqsI,SAArF,IAAiG,EAAK9iE,MAAMrpE,cAG9G,+BAAK2oD,UAAU,0CAA0CkyF,QAAS,kBAAM,EAAKz5J,QAAQ+sX,KACnF,4CAAkBpoY,GAAG,6BAEvB,+BAAK4iF,UAAU,+CACb,+BAAKA,UAAU,qDACVkyF,QAAS,kBAAM,EAAK4zN,oBAAmB,4CAAkB1oY,GAAG,sBACjE,+BAAK4iF,UAAU,qDACVkyF,QAAS,kBAAM,EAAK6zN,sBAAqB,4CAAkB3oY,GAAG,wBAEpErC,EAAgB0S,QAAU,KACzB,+BAAKuyE,UAAU,gGACb,4CAAkB5iF,GAAG,2BAK7Bw/U,OACE,+BAAK58P,UAAU,gFACb,+BAAKA,UAAU,2CACVkyF,QAAS,kBAAM,EAAKz5J,QAAQ+sX,KAA2B,4CAAkBpoY,GAAG,iCArLtE,EA2LnBwoY,6BAA+B,WAE7B,MAAO,CACLt6V,MAFa,EAAKo1D,MAAb7wF,KAEOC,cAAc,CAAC1S,GAAI,6BAC/B6oD,QACE,+BAAK+5B,UAAU,uCACb,+BAAKA,UAAU,4FACb,4CAAkB5iF,GAAG,mCAI3Bw/U,OACE,+BAAK58P,UAAU,sCACb,+BAAKA,UAAU,8CACb,+BAAKA,UAAU,0DACVkyF,QAAS,kBAAM,EAAKz5J,QAAQ+sX,KAC/B,4CAAkBpoY,GAAG,wBA3Md,EAmNnByoY,sBAAwB,WAEtB,MAAO,CACLv6V,MAFa,EAAKo1D,MAAb7wF,KAEOC,cAAc,CAAC1S,GAAI,4BAC/B6oD,QACE,+BAAK+5B,UAAU,uCACb,+BAAKA,UAAU,kDACb,4CAAkB5iF,GAAG,+BAEvB,+BAAK4iF,UAAU,4CACb,mCAAoBhzF,SAAS,cACTuhK,UAAU,EACV6rH,iBAAiB,EACjBD,aAAa,EACbzzI,YAAY,uCAEjC,EAAKvqI,MAAMmqY,iBACV,+BAAKtmT,UAAU,6CACb,4CAAkB5iF,GAAG,qCAErB,MAGRw/U,OACE,+BAAK58P,UAAU,sCACb,+BAAKA,UAAU,8CACb,+BAAKA,UAAU,yDACVkyF,QAAS,EAAKU,iBACjB,4CAAkBx1K,GAAG,sBAEvB,+BAAK4iF,UAAU,0DACVkyF,QAAS,EAAKk0N,yBACjB,4CAAkBhpY,GAAG,4BAnPd,EA2PnBsnY,iBAAmB,WACjB,EAAK6B,mBACL,EAAK7lS,MAAM2/H,SAAQ,IA7PF,EAgQnBomK,UAAY,WACV,GAAI,EAAKtqY,MAAMw7G,KAAO6tR,EAAe,CACnC,IAAIv/U,EAAU,EAAKy/U,mBACbgB,GAAc,IAAAntY,oBAAqB,EAAKmnG,MAAM3qF,YAAc,IAAM,CAAC9gB,OAAQ,EAAKyrG,MAAMpqF,aAAe,IAAM,GACjH,OACE,+BAAK0pE,UAAW,0EAA4E,EAAK7jF,MAAMw7G,KAAMluG,MAAOi9X,GAClH,+BAAK1mT,UAAU,sCACb,+BAAKA,UAAU,qCAAqC/5B,EAAQ3a,OAC5D,+BAAK00C,UAAU,yCAAyCkyF,QAAS,EAAKwyN,kBACpE,gCAAM1kT,UAAU,gBAAhB,OAGH/5B,EAAQA,QACRA,EAAQ22R,QAIb,OACE,+BAAK58P,UAAU,sCACb,+BAAKA,UAAU,qCACb,+BAAKA,UAAU,6CACb,4CAAkB5iF,GAAG,sBADvB,IAC6C,gCAC3C4iF,UAAU,4CACV,4CAAkB5iF,GAAI,EAAKjB,MAAMw7G,OAAS6tR,EAAgB,gBAAkB,wBArRtF,EAAKrpY,MAAQ,CACXw7G,KAAM6tR,EACN19I,SAAU,GACVm+I,YAAY,EACZE,OAAO,EACPG,kBAAkB,EAClBE,eAAgB,GAChBtjO,WAAY,IAGd,EAAK4iO,kBAZY,E,oFAoBjB1wY,KAAKixY,iB,qCAGQ,MACkBjxY,KAAKsrG,MAA7BrpE,EADM,EACNA,YAAaF,EADP,EACOA,QACpB/hC,KAAKs9K,SAAS,CAAC8zN,eAAgBnvW,EAAa6rI,WAAY/rI,M,+BAIxD,OACE,+BAAK6oD,UAAU,+BACZ5qF,KAAKqxY,iB,GAtCmB,UAAMxlS,W,EAC9Bq2C,UAAY,CACjBjgH,YAAa,UAAUO,OAAOy2E,WAE9BgyH,QAAS,UAAUlsD,KAAK9lE,Y,GA4StBq3E,EAAqB,CACzBlnK,iC,WAGa,IAAA2+H,aACb,IAAAj8C,UAbsB,SAACxzG,GAAU,MACFA,EAAMwc,UAAU/T,SAC/C,MAAO,CACLkhC,YAH+B,EAC1BA,YAGLF,QAJ+B,EACbA,WAYKuuJ,EAAzB,CAA6C+/M,K,0HCjW/C,O,OACA,OACA,OAEA,QAIA,SAIA,QACA,QACA,S,IACA,O,IACA,S,IACA,O,IACA,QACA,SACA,SACA,QACA,SACA,Q,uDAEMkB,E,YAEJ,WAAYjmS,IAAO,gGACXA,IADW,SAWnBkmS,YAAc,SAACC,EAAS9lM,EAAa+lM,GAEnC/lM,EAAY,EAAKC,YACjBxyM,SAAS6C,KAAKC,UAAU27K,OAAO,qBAHsB,MAIT,EAAKvsE,MAA1Cz6E,EAJ8C,EAI9CA,iBAAkBu/I,EAJ4B,EAI5BA,gBACzB,OAAQv/I,GACN,KAAK,EAAA8uB,kBAAkBC,oBACrB,IAAM3rD,EAAO,CACXu4H,yBAA0BilR,EAC1BhkM,cAAer9B,EAAgBq9B,cAC/BgjD,wBAAwB,EACxBhkI,iBAAkB,EAAAjsE,iBAAiBK,qBAKrC,OAHA4wV,EACI,UAAUtwW,eAAe,2BACzB,UAAUA,eAAe,0BACrBivI,EAAgB6gF,YACtB,KAAK,EAAAnwM,WAAWC,OACd,IAAAgwM,WAAU98P,GACV,MACF,KAAK,EAAA6sD,WAAWE,UACd,IAAAywM,cAAax9P,GAGjB,MAEF,KAAK,EAAA0rD,kBAAkBE,iBACjB4xV,IACF,EAAKnmS,MAAMmY,WAAW,EAAAxiE,gBAAgBC,OACtCwwV,GAAc,GACd,UAAU/jV,kBACV,UAAUzF,eAAe0F,qBACzB,UAAUC,sBACV6gC,YAAW,WACT,EAAK4c,MAAMmY,WAAW,QACrB,IAEL,MAEF,KAAK,EAAA9jE,kBAAkBG,mBACjB2xV,IACF,EAAKnmS,MAAMmY,WAAW,EAAAxiE,gBAAgBE,YACtCutC,YAAW,WACT,EAAK4c,MAAMmY,WAAW,QACrB,IAEL,MAEF,KAAK,EAAA9jE,kBAAkBI,0BACrB,GAAI0xV,EAAS,KACJp0L,EAA6B,EAAK/xG,MAAlC+xG,0BACP,UAAUl8K,eAAe,yCACrBhpC,OAAO2B,SAASwb,KAAKnb,SAAS,EAAAob,OAAO4c,WAEnC,EAAKm5E,MAAMqkE,2BACb,EAAKrkE,MAAMwkE,6BAA6B,MAGxCutC,EAA0B6zC,aAC5B,EAAK5lJ,MAAMogH,4BAA4B,CACrC1jN,GAAIq1M,EAA0B7hN,OAC9B+lC,MAAO87K,EAA0B97K,MACjC6rF,SAAUiwF,EAA0BlnM,OAAO6rB,WAAaq7K,EAA0BlnM,OAAOw4J,SAAW,IAAM0uC,EAA0BlnM,OAAOw4J,SAAW,MAExJ,EAAKrjE,MAAM8xG,6BAA6B,CAAC+lL,iBAAiB,OAE1D,IAAAv8W,iBACA,IAAA4pO,sBAAqBnzC,GAA2B,IAGhDjtC,EAAgBohF,eAClBphF,EAAgBohF,gBAElB,MAEF,KAAK,EAAA7xM,kBAAkBK,qBACjByxV,IACF,IAAAvhO,oBAAmB,EAAG,CAACyhO,aAAa,IAAO,GAE7C,MAMF,QACMF,EACErhO,EAAgBohF,eAClBphF,EAAgBohF,gBAETphF,EAAgBwhO,iBACzBxhO,EAAgBwhO,mBAElB,IAAA1hO,oBAAmB,EAAG,IAAI,KAxGb,EA8GnB2hO,kBAAoB,WAAM,MAC0B,EAAKvmS,MAAhD7wF,EADiB,EACjBA,KAAMoW,EADW,EACXA,iBAAkBu/I,EADP,EACOA,gBAC/B,OAAQv/I,GACN,KAAK,EAAA8uB,kBAAkBC,oBACrB,OAAOnlC,EAAKC,cAAc,CAAC1S,GAAI,qCACjC,KAAK,EAAA23C,kBAAkBE,iBACrB,OAAOplC,EAAKC,cAAc,CAAC1S,GAAI,kCACjC,KAAK,EAAA23C,kBAAkBG,mBACrB,OAAOrlC,EAAKC,cAAc,CAAC1S,GAAI,oCACjC,KAAK,EAAA23C,kBAAkBK,qBACrB,OAAOvlC,EAAKC,cAAc,CAAC1S,GAAIooK,EAAgBm9N,WAAa,gCAAkC,iCAChG,KAAK,EAAA5tV,kBAAkBM,oCACrB,OAAOxlC,EAAKC,cAAc,CAAC1S,GAAI,uCACjC,KAAK,EAAA23C,kBAAkBO,yCACrB,OAAOzlC,EAAKC,cAAc,CAAC1S,GAAI,0DACjC,KAAK,EAAA23C,kBAAkBI,0BAA2B,IACzCs9J,EAA6B,EAAK/xG,MAAlC+xG,0BACP,OACE,wCACE,iCAAG,4CAAkBr1M,GAAG,6CACxB,iCAAG,4CAAkBA,GAAG,6CACvBq1M,EAA0BlnM,OACzB,+BAAKy0E,UAAU,4BACb,iCAAIyyH,EAA0BlnM,OAAO6rB,WAAaq7K,EAA0BlnM,OAAOw4J,SAAW,IAAM0uC,EAA0BlnM,OAAOw4J,SAAW,KAChJ,iCAAI0uC,EAA0B97K,QAE9B,MAIV,QACE,MAAO,uBA7IM,EAiJnBqqK,WAAa,WACX,EAAKtgG,MAAM36E,oBAAmB,IAhJ9B,EAAK5pB,MAAQ,GAFI,E,0FAKO63K,GACpBA,EAAU/xJ,mBAAqB7sB,KAAKsrG,MAAMz+E,kBAC5CzzB,SAAS6C,KAAKC,UAAUC,IAAI,uB,+BA8IvB,aACwC6D,KAAKsrG,MAA7C16E,EADA,EACAA,mBAAoBC,EADpB,EACoBA,iBAC3B,OAAKD,EAIH,mCAAag6D,UAAU,qBACpB,SAAC+gH,GAAD,OACC,+BAAK/gH,UAAW,gCAAkC/5D,GAKhD,+BAAK+5D,UAAU,sBACZ,EAAKinT,qBAER,+BAAKjnT,UAAU,yBACb,kCAAQA,UAAU,8BAA8BkyF,QAAS,kBAAM,EAAK00N,aAAY,EAAO7lM,KACrF,4CAAkB3jM,GAAI6oB,IAAqB,EAAA8uB,kBAAkBI,0BACzD,4BAA8B,2BAEpC,mCAAmBurD,MAAO,EAAKA,QAC5B,SAAComS,GAAD,OACC,kCAAQ9mT,UAAU,+BAA+BkyF,QAAS,kBAAM,EAAK00N,aAAY,EAAM7lM,EAAa+lM,KAClG,4CAAkB1pY,GAAG,oCArB5B,S,gBA8CPsoL,EAAqB,CACzB3/J,wCACAxN,oBACAsgG,wBACAioG,0DACAtO,4DACAwG,0CACA9zC,6D,WAGa,IAAA/nB,aACb,IAAAj8C,UAvBsB,SAACxzG,GAAU,MAC0DA,EAAMwc,UAEjG,MAAO,CACL8b,mBAJ+B,EAC1BA,mBAILC,iBAL+B,EACNA,iBAKzBu/I,gBAN+B,EACYA,gBAM3CitC,0BAP+B,EAC6BA,0BAQ5D1tC,0BAPkCr3K,EAAMqxH,qBAAnCgmD,6BAqBkB2gB,EAAzB,CAA6CihN,K,8EC5O/C,WAEA,QACA,QACA,QACA,SACA,UAeMjhN,EAAqB,CACzB9rK,wDACA2I,kCACAwD,wCACA0zF,wCACAozC,6D,WAGa,IAAA84B,aACb,IAAAzkF,UAfsB,SAACxzG,GAAD,MAAY,CAClC80B,aAAc90B,EAAM8J,UAAUgrB,aAC9B7F,aAAcjvB,EAAMouB,wBAAwBa,aAC5CH,UAAW9uB,EAAMouB,wBAAwBU,aAYhBkpK,EAAzB,EAtBwB,SAAChlF,GAIzB,OAAOk1C,EAHYl1C,EAAZk1C,WACiB,IAAAg3L,oBAAjBD,oB,0HCVT,O,OACA,OACA,OAEA,UACA,S,IACA,SACA,Q,uDAsBMu6D,E,yOAEJC,QAAU,WACR,OAAI,EAAKzmS,MAAMnzF,eAAe8/F,mBAC5B,uBAEF,a,EAGF+5R,QAAU,WACR,QAAQ,GACN,KAAK,EAAK1mS,MAAMnzF,eAAey6L,SAC7B,0DACF,KAAK,EAAKtnG,MAAMnzF,eAAeolI,OAC7B,uDACF,KAAK,EAAKjyC,MAAMnzF,eAAeklI,YAC7B,6DACF,KAAK,EAAK/xC,MAAMnzF,eAAeE,QAC7B,+DACF,KAAK,EAAKizF,MAAMnzF,eAAeG,cAC7B,yDACF,QAEE,uE,gGAIG,MAEuEtY,KAAKsrG,MAAMnzF,eAAlFy6L,EAFA,EAEAA,SAAUv6L,EAFV,EAEUA,QAASklI,EAFnB,EAEmBA,OAAQF,EAF3B,EAE2BA,YAAaplC,EAFxC,EAEwCA,mBAAoBE,EAF5D,EAE4DA,QAEnE,OAAO,EAAAs3R,YAAA,cACH,KACA,+BAAK7kT,UAAU,2BACb,+BAAKA,UAAW,gCAAkCvyE,EAAU,uCAAyC,KAChG8/F,EAAUF,EAAqB,oCAAsC,uCAAyC,KAChHE,EAAUn4G,KAAK+xY,UAAY,+BAAK79L,IAAI,GAAGn1M,IAAKiB,KAAKgyY,aAEpD,mCAAwBp/L,SAAUA,EAAUv6L,QAASA,EAASklI,OAAQA,EAAQF,YAAaA,IAC3F,6BAAGzyD,UAAW,gCACXgoH,EAAW,wCAA0C,KACrDr1D,EAAS,sCAAwC,KACjDF,EAAc,4CAA8C,KAC5DhlI,EAAU,uCAAyC,KACpD,4CAAkBrQ,GAAG,2B,2BAUlB,IAAA8jG,UAHS,SAACxzG,GAAD,MAAY,CAClC6f,eAAgB7f,EAAMqN,mBAET,CAAyBmsY,I,8ECnFxC,I,EAAA,O,oCACA,OACA,OAIA,IAgCMxhN,EAAqB,CACzBi7B,8BAnCF,OAmCEA,+B,WAGa,IAAAxjE,aACb,IAAAj8C,UAXsB,SAACxzG,GACvB,MAAO,CACLkzN,2BAA4BlzN,EAAMkwO,iBAAiBhd,8BAS5Bl7B,EAAzB,EArC6B,SAAChlF,GAAU,IAEjCigH,EAAmEjgH,EAAnEigH,8BAA+BC,EAAoClgH,EAApCkgH,2BAA4B/wM,EAAQ6wF,EAAR7wF,KAE5DsiM,EAA0B,SAACn8G,GAC/B2qH,EAA8B3qH,EAAMlqF,OAAOxf,QAGvC+sF,EAAaunI,EAEnB,OACE,+BAAK5gI,UAAU,cACb,iCAAOx/E,KAAK,OAAOw/E,UAAW,yBAC3B3G,EAAa,yBAA2B,KACxCA,GAAcA,EAAWxvF,OAAS,GAAK,4BAA8B,IACjEyC,MAAO+sF,EACP6xI,SAAU/Y,EACVzrE,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,mCAE5C,gCAAM4iF,UAAU,gBACf3G,EAAa,kCAAQ2G,UAAW,wBACXkyF,QAAS,kBAAMigC,EAAwB,CAACrmM,OAAO,CAACxf,MAAO,SAAW,W,6FC3B9F,O,OACA,O,IACA,MACA,SAEA,UACA,Q,IACA,Q,mDAGA,IAAM+6Y,EAA6B,SAAC3mS,GAAU,IAErC6vM,EACkB7vM,EADlB6vM,WAAY+2F,EACM5mS,EADN4mS,aAAcC,EACR7mS,EADQ6mS,aAAcC,EACtB9mS,EADsB8mS,gBAAiBl8V,EACvCo1D,EADuCp1D,MAAOm8V,EAC9C/mS,EAD8C+mS,kBAAmBliR,EACjE7kB,EADiE6kB,aACxFmiR,EAAuBhnS,EAAvBgnS,oBAH0C,GAIF,IAAAnxP,UAAS,GAJP,qBAIrCoxP,EAJqC,KAItBC,EAJsB,KAKtCC,GAAa,IAAA1yP,aAAYoyP,IAE/B,IAAAxwR,YAAU,WACR,GAAIwwR,IAAiBM,EAAY,CAC/B,IAAIC,EAAav3F,EAAWx+R,WAAU,SAAAs0D,GAAA,OAAQA,EAAKjpE,KAAOmqY,EAAanqY,MACnE0qY,GAAc,GAChBF,EAAiBE,EAAa,MAIjC,CAACP,IAEJ,IAOM1mE,EAAe,CACnB9rU,MARgB0yY,GAAqBA,EAAkB1yY,MACrD2yY,EACED,EAAkB1yY,MAAQ,GACzB0yY,EAAkB1yY,MAAQ,EAAK,GAClC,IAKFE,OAJiBwyY,GAAqBA,EAAkBxyY,OAASwyY,EAAkBxyY,OAAS,GAAK,IAKjG+rU,UAAW,GACXC,iBAAkB,EAClBF,SAAUxwB,EAAW1mT,OACrBq3U,0BAA0B,EAC1BC,qBAAqB,GAuBvB,OACE,+BAAKnhP,UAAU,qBACb,+BAAKA,UAAU,aACb,gCAAMA,UAAU,mBAAkB,4CAAkB5iF,GAAIkuC,KACvDi6E,EAAe,gCAAMvlC,UAAU,oBAAmB,4CAAkB5iF,GAAImoH,KAAyB,MAEpG,gCAEEvlC,UAAW,WACXjrF,MAAO8rU,EAAa9rU,MACpBE,OAAQ4rU,EAAa5rU,OACrBgsU,iBAAkBJ,EAAaI,iBAC/BF,SAAUF,EAAaE,SACvBC,UAAWH,EAAaG,UACxB+mE,YAlCc,SAAC,GAAwB,IAAvB/kY,EAAuB,EAAvBA,MAAOpW,EAAgB,EAAhBA,IAAK6c,EAAW,EAAXA,MAC1Bu+X,EAAWz3F,EAAWvtS,GAC5B,OACE,8BAAIg9E,UAAU,iBAAiBv2E,MAAOA,EAAO7c,IAAKA,GAChD,+BAAKozF,UAAW,kCACbunT,GAAiBS,EAAS5qY,KAAOmqY,EAAanqY,GAAM,4BAA8B,IAC/E80K,QAAS,kBAAMo1N,EAAaU,KAChC,+BAAKhoT,UAAU,oBACb,mCAAQ2R,KAAK,gBAGjB,gCAAM3R,UAAU,qBAAqBkyF,QAAS,kBAAMo1N,EAAaU,KAC9DA,EAASxlR,SADZ,IACuBwlR,EAASrxW,MAAQ,gCAAMqpD,UAAU,aAAhB,IAA8BgoT,EAASrxW,MAAvC,KAAwD,QAuBhG4qS,eAjBiB,kBAAM,+BAAKvhP,UAAW,YAAY,4CAAkB5iF,GAAIoqY,MAkBzEG,cAAeA,GAAiB,MAMxCN,EAA2B/vP,UAAY,CACrCi5J,WAAY,UAAU9kS,MAAM4iG,WAC5Bi5R,aAAc,UAAUnzN,KAAK9lE,WAC7Bk5R,aAAc,UAAUhwP,UAAU,CAChC,UAAUvoG,MAAV,qBACA,UAAUA,MAAV,uBAEF1D,MAAO,UAAU1T,OAAOy2E,WACxBkX,aAAc,UAAU3tF,OACxB4vW,gBAAiB,UAAU5vW,OAAOy2E,WAClCo5R,kBAAmB,UAAUz4V,MAAM,CACjCj6C,MAAO,UAAUi5G,OACjB/4G,OAAQ,UAAU+4G,U,WAIP,IAAAmvC,YAAWkqP,I,8ECtG1B,W,OACA,O,IACA,S,IACA,O,mDAGA,IA+CM3hN,EAAqB,CACzBnsE,wBAlDF,MAkDEA,yB,WAGa,IAAArY,UAZS,SAACxzG,GAAU,MACYA,EAAMyV,UACnD,MAAO,CACLq2G,kBAH+B,EAC1BA,kBAGLE,gBAJ+B,EACPA,mBAWYgsE,EAAzB,EAnDkB,SAAChlF,GAAU,IAClC8Y,EAA+C9Y,EAA/C8Y,kBAAmBD,EAA4B7Y,EAA5B6Y,wBACrBrzD,EAAWszD,EAAkB1T,OAC7BmiS,GAAa,IAAA5yP,QAAO,MA4B1B,OA1BA,IAAAt+B,YAAU,WACR,IAAMiqF,EAAa,WACjBznF,EAAwB,CAAEzT,QAAQ,EAAOo+L,eAAgB,QAGrDgkG,EAAqB,SAAClyS,GACtBiyS,EAAWr+R,UAAYq+R,EAAWr+R,QAAQosC,SAAShgD,EAAMlqF,SAC3Dk1L,KAcJ,OAVI96I,IACF13D,SAASytD,iBAAiB,YAAaisV,GACvC,UAAar5U,SACX,UAAaC,OAAOI,WACpB8xI,EACA,CAAEn1M,KAAM,gBACR,UAAamjE,WAAWojC,UAIrB,WACL5jG,SAAS8pG,oBAAoB,YAAa4vS,MAE3C,CAACD,EAAY/hV,EAAUqzD,IAGxB,+BAAKv5B,UAAW,qCAAuC95B,EAAW,uBAAyB,IACtFkvF,IAAK6yP,GACR,6C,8ECxCN,I,IAAA,MACA,O,IACA,M,IAEA,S,IACA,Q,IACA,OAEA,QACA,QACA,QACA,Q,mDAGA,IAAME,EAAqC,SAACznS,GAAU,IAE7C5gF,EAA0F4gF,EAA1F5gF,YAAagjT,EAA6EpiO,EAA7EoiO,oBAAqBruJ,EAAwD/zE,EAAxD+zE,gBAAiB5+K,EAAuC6qG,EAAvC7qG,SAAUuD,EAA6BsnG,EAA7BtnG,YAAa4Y,EAAgB0uF,EAAhB1uF,aAE7E0iG,EAAiBouN,EAAsBA,EAAoBpuN,eAAiB,KAYhF,GAAI50F,GAAe40F,GAA2C,WAAzB50F,EAAY8vE,SAAuB,CACtE,GAAI/5F,EACF,OACE,+BAAKmqF,UAAU,oCACb,mCAAYA,UAAW,mCACrB,0CAKR,IAAM70E,EAAcspK,EAAgBvzK,MAAK,SAAAmK,GAAA,OAASA,EAAMjO,KAAOs3G,EAAe3uB,kBACvEvW,GAAU,IAAAkkC,kCAAiCgB,EAAgBvpG,GAAe,IAA1EqkE,OACP,OAAO,+BAAKwQ,UAAU,oCAAmC,+BAAKA,UAAU,qBAAqBv2E,MAAO+lE,KAC/F,OAAI1vD,EAEP,+BAAKkgE,UAAU,mCAAmCv2E,MAChDqW,IAAgBA,EAAYm4H,iBAAmBn4H,EAAY83H,gBACrD,IAAA19B,2BAA0B,CAACC,gBAAgB,IAAAF,wBAAuBn6F,EAAYm4H,iBAAmBn4H,EAAY83H,gBAAiBx+I,GAC9H4Y,GAAe,IAAAkoG,2BAA0BloG,EAAc5Y,GAAe,OAOhF,+BAAK4mF,UAAU,oCACZnqF,EACG,mCAAYmqF,UAAW,mCAAmC,yCAC1D,+BAAKA,UAAU,uCAMzBmoT,EAAmC7wP,UAAY,CAC7Cx3H,YAAa,UAAUkvB,MAAV,wBACbh9B,aAAc,UAAUg9B,MAAV,yBACd8zR,oBAAqB,UAAU9zR,MAAV,iC,WAaR,IAAAkyD,UAVS,SAACxzG,GAIvB,MAAO,CACL+mL,gBAJqB/mL,EAAMyc,YAAtBiB,aAKLhS,YAJoB1L,EAAMgR,YAArBtF,eAQM,CAAyB+uY,I,+EChFxC,I,IAAA,MACA,OACA,OAEA,UAEA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QAGA,I,IAAA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IAEA,SACA,Q,IAMA,S,IACA,S,IACA,S,IACA,S,IACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,oDA9CA,IAAAnuF,YAkDA,IA8GMt0H,EAAqB,CACzBhoF,0CACAJ,gDACAE,8CACAM,qD,WAGa,IAAAq/C,aACb,IAAAj8C,UA/BsB,SAACxzG,GAAU,IAC1B8rH,EAAqB9rH,EAAMyV,UAA3Bq2G,kBAEP,MAAO,CACLtrG,OAAQxgB,EAAM4U,YAAY4L,OAC1BX,eAAgB7f,EAAMqN,gBACtB0xU,YAAajzN,EAAkBkzN,QAC/BztO,UAAWvxG,EAAMs3D,cAAci6C,UAC/BhC,aAAcvvG,EAAMs3D,cAAci4C,aAClCyB,cAAehxG,EAAMs3D,cAAc05C,cACnC7oG,SAAUnI,EAAMgR,YAAY7I,SAC5B8B,UAAWjK,EAAM8J,UAAUG,UAC3Boe,YAAaroB,EAAMgR,YAAYqX,YAC/B6qF,kBAAmBlzG,EAAMgR,YAAYkiG,kBACrCokD,eAAgBt3J,EAAMqR,cAAcimJ,eACpC99I,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CuF,iBAAkB3U,EAAM4U,YAAYD,iBACpC88F,kBAAmBzxG,EAAMs3D,cAAcm6C,kBACvCK,iBAAkB9xG,EAAMs3D,cAAcw6C,iBACtCz/E,uBAAwBryB,EAAMyV,UAAU4c,0BAYjB2lK,EAAzB,EAtH4B,SAAChlF,GAAU,IAChCE,EAAqBF,EAArBE,kBACAjpG,EAE4G+oG,EAF5G/oG,UAAWsnG,EAEiGyB,EAFjGzB,UAAW/3F,EAEsFw5F,EAFtFx5F,mBAC3Bo2F,EACiHoD,EADjHpD,uBAAwBE,EACyFkD,EADzFlD,sBAAuBE,EACkEgD,EADlEhD,oBAAqBr7F,EAC6Cq+F,EAD7Cr+F,iBACpEy7F,EAAiH4C,EAAjH5C,yBAA0BY,EAAuFgC,EAAvFhC,cAAgBxwF,EAAuEwyF,EAAvExyF,OAAQixF,EAA+DuB,EAA/DvB,kBAAmBK,EAA4CkB,EAA5ClB,iBAAkBz/E,EAA0B2gF,EAA1B3gF,uBAezF,OAbA,gBACA,gBACA,gBACA,aAAwB6gF,EAAmB15F,EAAoB42F,EAA0B5vF,EAAQwvF,EAC/FJ,EAAwBE,EAAuB7lG,EAAW0K,EAAkB0d,IAI9E,gBAEA,gBACA,eAGE,+BAAKigE,UAAU,QACb,+BAAKA,UAAU,sBACb,+BAAKA,UAAU,2BACb,wCACA,wCAEA,0CAGJ,wCACA,+BAAKA,UAAU,iBAEX4gB,EAAkB/2G,OAAS,wCAA+B,KAG1D+2G,EAAkB/2G,OAAS,wCAAwB,KAGnD+2G,EAAkB/2G,OAAS,wCAAe,KAE5C,wCACA,wCACA,kCAAqBo1G,GACrB,kCAAuBP,GACvB,wCACA,wCAEEx3F,EAAmB6L,qBAAuB,wCAA4C,wCAGtFosF,EAAkBjiG,KAAI,SAACmiG,EAAkBr8F,GACvC,OACE,mCACEpW,IAAKoW,EACL5F,GAAIiiG,EAAiBjiG,GACrB01S,iBAAkBzzM,EAAiByzM,iBACnCC,iBAAkB1zM,EAAiB0zM,iBACnCC,oBAAqB3zM,EAAiB2zM,oBACtCliR,SAAUuuE,EAAiBvuE,SAC3BxkC,MAAO+yG,EAAiB/yG,MACxB65D,gBAAiBk5C,EAAiBl5C,qBAMxCq5C,EAAiBtiG,KAAI,SAACwiG,EAAiB18F,GACrC,OACE,mCACEpW,IAAKoW,EACL5F,GAAIsiG,EAAgBtiG,GACpBsa,KAAMgoF,EAAgBhoF,KACtBoZ,SAAU4uE,EAAgB5uE,cAKlC,yCAGF,+BAAKkvD,UAAU,kBACb,+C,+ECxIR,I,IAAA,MACA,OACA,OACA,SACA,QACA,SACA,Q,IAMA,S,mDAEA,IA4BM0lG,EAAqB,CACzBxe,sBACAnuD,8BACAmqC,oDACA3pC,kDACA3/F,wDACA2I,kCACApB,gDACA5G,0DACA++F,yC,WAIa,IAAApY,UA1BS,SAACxzG,GAAD,MAAY,CAClCsU,YAAatU,EAAMyV,UAAUnB,YAC7B88O,sBAAuBpxP,EAAM80Q,2BAA2B1jB,sBACxD5wO,OAAQxgB,EAAM4U,YAAY4L,OAC1BvW,UAAWjK,EAAM8J,UAAUG,UAC3BkiB,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CxX,iBAAkB3U,EAAM4U,YAAYD,iBACpCoqU,YAAa/+U,EAAMyV,UAAUq2G,kBAAkBkzN,QAC/CxsI,kBAAmBxyM,EAAMqR,cAAcmhM,kBACvCgoE,iBAAkBx6Q,EAAMyV,UAAUq2G,kBAAkBuP,QACpDvmG,aAAc90B,EAAM8J,UAAUgrB,gBAgBQkjK,EAAzB,EAzCoB,SAAChlF,GAElC,OACE,mCAAgBA,MAAOA,IACpB,SAACmsO,GAAD,OACC,kCAAQ7yC,UAAQ,mBAAmBh6M,UAAU,kDAAkDkyF,QAAS,kBAAM26J,MAC5G,gCAAM7sP,UAAU,SAAS8mS,YAAU,gCACjC,4CAAkB1pX,GAAI,0C,8ECrBlC,I,IAAA,MACA,OACA,OACA,Q,IACA,S,mDAEA,IAoBMsoL,EAAqB,CACzB3/J,wCACAnM,wDACA2I,mC,WAIa,IAAA2+E,UAZS,SAACxzG,GAAD,MAAY,CAClC80B,aAAc90B,EAAM8J,UAAUgrB,aAC9Bs8N,sBAAuBpxP,EAAM80Q,2BAA2B1jB,yBAUlBp5D,EAAzB,EA3BgB,SAAChlF,GAE9B,OACE,mCAAsBA,MAAOA,IAC1B,SAAC0nS,GAAD,OACC,kCAAQpuG,UAAQ,cACRh6M,UAAU,4CACVkyF,QAAS,kBAAMk2N,MACrB,4CAAkBhrY,GAAI,qC,8ECdhC,I,EAAA,OACA,SACA,QACA,QACA,QACA,QAEA,S,oCACA,UACA,SACA,SACA,SAEA,IA8BMsoL,EAAqB,CACzB3/J,wCACAnM,wDACA2I,kCACAk3F,wCACAulF,6B,WAGa,IAAArZ,aACb,IAAAzkF,UAhBsB,SAACxzG,GAAD,MAAY,CAClC80B,aAAc90B,EAAM8J,UAAUgrB,aAC9Bs8N,sBAAuBpxP,EAAM80Q,2BAA2B1jB,sBACxDniO,aAAcjvB,EAAMouB,wBAAwBa,aAC5CH,UAAW9uB,EAAMouB,wBAAwBU,aAYhBkpK,EAAzB,EAvC2B,SAAChlF,GAAU,IAC/Bo+I,EAA2Dp+I,EAA3Do+I,sBAAuB/4N,EAAoC26E,EAApC36E,mBAAoBi5K,EAAgBt+F,EAAhBs+F,aAC3CppD,EAAYl1C,EAAZk1C,SACA+2L,GAAiB,IAAAC,oBAAjBD,cAaD3nS,EAAqB,WACzBjf,GAAmB,EAAM,EAAAgvB,kBAAkBE,mBAG7C,OAAO2gG,GAfmB,WACpBkpG,GACF,IAAAuyB,4CAA6CrsO,IAAuB2nS,GAAc,IAElF3tI,GAAa,IACb,IAAAsuC,sBACA,IAAA9pL,uBACA,UAAiBqgP,yBAA2B7+P,IAAuB2nS,GAAc,Y,8ECzBvF,I,IAAA,MACA,OACA,QACA,Q,IACA,MACA,O,mDAEA,IAAM07D,EAAkB,SAAC3nS,GAAU,IAC1Bp1D,EAA4Bo1D,EAA5Bp1D,MAAO2a,EAAqBy6C,EAArBz6C,QAASC,EAAYw6C,EAAZx6C,SAChBC,EAA4Du6C,EAA5Dv6C,gBAAiBK,EAA2Ck6C,EAA3Cl6C,YAAaC,EAA8Bi6C,EAA9Bj6C,eAAgBC,EAAcg6C,EAAdh6C,WAErD,OACE,+BAAKs5B,UAAW,iCAAmC95B,EAAW,GAAK,WACjE,+BAAK85B,UAAU,uBACb,+BAAKA,UAAU,8BACb,+BAAKA,UAAU,sEACZ10C,GAEH,kCAAQ00C,UAAU,sCACVkyF,QAAS,kBAAMzrH,QAGzB,+BAAKu5B,UAAU,4BACZ/5B,GAEH,+BAAK+5B,UAAU,kDAEXt5B,EACE,kCAAQs5B,UAAU,gCACVkyF,QAAS,kBAAMzrH,MACrB,gCAAMu5B,UAAU,0BACbt5B,IAGH,KAGJF,EACE,kCAAQw5B,UAAU,iCACTkyF,QAAS,kBAAM/rH,MACtB,gCAAM65B,UAAU,0BACbx5B,IAGH,SAQhB6hV,EAAgB/wP,UAAY,CAC1BhsG,MAAO,UAAUisG,UAAU,CACzB,UAAU3/G,OACV,UAAU7qC,OACV,UAAUqnL,WAAV,sBAEFnuH,QAAS,UAAUsxF,UAAU,CAC3B,UAAU3/G,OACV,UAAU7qC,OACV,UAAUqnL,WAAV,sBAEFluH,SAAU,UAAUsxF,KACpBrxF,gBAAiB,UAAUguH,KAC3B3tH,YAAa,UAAU+wF,UAAU,CAC/B,UAAU3/G,OACV,UAAU7qC,OACV,UAAUqnL,WAAV,sBAEF3tH,eAAgB,UAAU0tH,KAC1BztH,WAAY,UAAU6wF,UAAU,CAC9B,UAAU3/G,OACV,UAAU7qC,OACV,UAAUqnL,WAAV,uBAIJ,IAKMsR,EAAqB,CACzB1oF,0CACAsc,yC,WAGa,IAAApY,UAVS,SAACxzG,GAAD,MAAY,CAClCuvG,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAQS0jL,EAAzB,CAA6C2iN,I,8ECxF5D,I,IAAA,Q,IACA,Q,6DAEe,SAAC3vY,GAA2B,IAArB4vY,EAAqB,wDACrCjtV,EAASitV,EAAW,CACtB,IAAI,EAAJ,QAAU,EAAG,GAAI,WACjB,IAAI,EAAJ,QAAU,GAAI,GAAI,YAClB,IAAI,EAAJ,QAAU,GAAI,GAAI,eAClB,IAAI,EAAJ,QAAU,EAAG,GAAI,eACf,CACF,IAAI,EAAJ,QAAU,EAAG,EAAG,WAChB,IAAI,EAAJ,QAAU,GAAI,EAAG,YACjB,IAAI,EAAJ,QAAU,GAAI,GAAI,eAClB,IAAI,EAAJ,QAAU,EAAG,GAAI,eAGnB,MAAO,CACL,IAAI,EAAJ,QAASjtV,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,O,8ECpB/B,I,IAAA,Q,IACA,Q,IACA,O,6DAEkB,WAChB,IAAIA,SA8BJ,OA5BEA,EADwB,WAAvB,UAAOr5C,YACC,CACP,IAAI,EAAJ,SAAW,OAAQ,GAAI,WACvB,IAAI,EAAJ,QAAU,KAAM,GAAI,YACpB,IAAI,EAAJ,QAAU,IAAK,MAAO,eACtB,IAAI,EAAJ,QAAU,GAAI,MAAO,eAAe,GACpC,IAAI,EAAJ,QAAU,GAAI,IAAK,eACnB,IAAI,EAAJ,SAAW,MAAO,IAAK,eAGhB,CACP,IAAI,EAAJ,SAAW,IAAK,GAAI,WACpB,IAAI,EAAJ,QAAU,KAAM,GAAI,YACpB,IAAI,EAAJ,QAAU,IAAK,GAAI,eACnB,IAAI,EAAJ,QAAU,GAAI,GAAI,eAAe,GACjC,IAAI,EAAJ,QAAU,GAAI,IAAK,eACnB,IAAI,EAAJ,SAAW,GAAI,IAAK,eAIZ,CACV,IAAI,EAAJ,QAASq5C,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,O,8EChC/B,I,IAAA,Q,IACA,Q,IACA,O,6DAEkB,WAChB,IAAIA,SAoCJ,OAlCEA,EADwB,WAAvB,UAAOr5C,YACC,CACP,IAAI,EAAJ,QAAU,GAAI,GAAI,WAClB,IAAI,EAAJ,QAAU,KAAM,GAAI,YACpB,IAAI,EAAJ,QAAU,IAAK,GAAI,eACnB,IAAI,EAAJ,QAAU,OAAQ,GAAI,cACtB,IAAI,EAAJ,QAAU,OAAQ,KAAM,cAAc,GACtC,IAAI,EAAJ,QAAU,MAAO,KAAM,eAAe,GACtC,IAAI,EAAJ,QAAU,MAAO,GAAI,eACrB,IAAI,EAAJ,QAAU,EAAG,GAAI,eAGV,CACP,IAAI,EAAJ,QAAU,GAAI,GAAI,WAClB,IAAI,EAAJ,QAAU,KAAM,GAAI,YACpB,IAAI,EAAJ,QAAU,IAAK,GAAI,eACnB,IAAI,EAAJ,QAAU,IAAK,GAAI,cACnB,IAAI,EAAJ,QAAU,IAAK,EAAG,cAAc,GAChC,IAAI,EAAJ,QAAU,GAAI,EAAG,eAAe,GAChC,IAAI,EAAJ,QAAU,GAAI,GAAI,eAClB,IAAI,EAAJ,QAAU,EAAG,GAAI,eAIT,CACV,IAAI,EAAJ,QAASq5C,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,O,8ECtC/B,W,OACA,OACA,OACA,S,IACA,M,mDAEA,IAAMktV,EAA0B,SAAC7nS,GAAU,IAClClzC,EACakzC,EADblzC,QAASuxL,EACIr+I,EADJq+I,oBAAqBC,EACjBt+I,EADiBs+I,iBAAkBF,EACnCp+I,EADmCo+I,sBAAuBD,EAC1Dn+I,EAD0Dm+I,4BAA6BhpP,EACvF6qG,EADuF7qG,SACzG2yY,EAAkB9nS,EAAlB8nS,gBAOF,IAAAzxR,YAAU,WACR,IAAKvpD,EAAS,CACZ,IACMi0B,EADOjzF,SAAS02F,eAAe,mBACnBxD,wBAClBq9J,EAAoB,CAACt9J,YAEtB,CAACj0B,EAASg7U,EAAgBzpJ,IAE7B,IAAM0pJ,EAAa,CACjBvhW,KAAMsmB,EAAUwxL,EAAiBv9J,KAAKv6C,KAAO,IAM/C,OAJArxC,EACI4yY,EAAWprD,OAAS7vR,EAAU,OAAS,GACvCi7U,EAAWnuY,IAAMkzD,EAAUwxL,EAAiBv9J,KAAKnnF,IAAM,GAGzD,+BAAK0lF,UAAU,iBACV5iF,GAAIowD,EAAU,0BAA4B,kBAC1C/jD,MAAOg/X,GAEV,gCAAMzoT,UAAU,6DACd,4CAAkB5iF,GAAG,qCAEvB,kCAAQ4iF,UAAW,4BAA8B8+J,EAAwB,qBAAuB,IACxF5sE,QA7Bc,WAExB2sE,GAA6BC,KA4BzB,gCAAM9+J,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,wBAM/EmrY,EAAwBjxP,UAAY,CAClC9pF,QAAS,UAAUgqF,KACnBgxP,eAAgB,UAAU/8X,OAG5B,IAMMi6K,EAAqB,CACzBm5D,0DACAE,2C,WAGa,IAAA79I,UAXS,SAACxzG,GAAD,MAAY,CAClCoxP,sBAAuBpxP,EAAM80Q,2BAA2B1jB,sBACxDE,iBAAkBtxP,EAAM80Q,2BAA2BxjB,iBACnDnpP,SAAUnI,EAAMgR,YAAY7I,YAQU6vL,EAAzB,CAA6C6iN,I,8EC/D5D,I,IAAA,MACA,U,IACA,Q,6DAEqB,WAoBnB,OACE,kCAAQvoT,UAAU,gBAAgBkyF,QApBhB,WAClB,IAAMw2N,EAAW,IAAI,EAAJ,aACX5jP,EAAS,UAAUA,OAErBA,GAAUA,EAAOt7H,MACnBk/W,EAASl/R,MAAMs7C,EAAOt7H,OAAO,SAACm/W,GAC5B,IAAM1jT,EAAO,IAAI0B,KAAK,CAAC4iB,KAAK2W,UAAUyoR,IAAQ,CAACnoY,KAAM,eAC/CowO,EAAOpiP,SAAS8oD,cAAc,KACpCs5L,EAAKnnO,MAAMwxJ,QAAU,OACrBzsK,SAAS6C,KAAKkmD,YAAYq5L,GAC1BA,EAAKzhP,KAAOsd,IAAI24E,gBAAgBH,GAChC2rJ,EAAKvrJ,SAAW,aAChBurJ,EAAKtrJ,WAGPl4F,QAAQC,MAAM,2CAKhB,kB,8EC1BJ,W,OACA,OACA,Q,IACA,S,IACA,S,IACA,S,IACA,MACA,QAEA,QACA,QAKA,Q,IACA,M,IACA,O,mDAEA,IAAMu7Y,EAAkB,SAACloS,GAAU,IAC1BsZ,EACqBtZ,EADrBsZ,gBAAiBJ,EACIlZ,EADJkZ,YAAazpD,EACTuwC,EADSvwC,cACnC6vC,EAA0BU,EAA1BV,uBAqCF,OAlCA,IAAA+W,YAAU,WACH,EAAD,WACF5mD,GAAc,KAEf,CAACA,KAEJ,IAAA4mD,YAAU,WACR,OAAO,WACD/W,GACFA,EAAuBiyI,QAEzB,UAAM54N,UAAS,IAAA4E,gBAAe,CAACvF,WAAY,EAAGiN,SAAS,EAAOi4S,UAAU,QAGzE,IAqBD,+BAAK59O,UAAU,mBACZ,UAAWruD,OAAOoqB,qBACf,wCAEA,wCACG69D,IAAgBI,EAAkB,wCAAyB,KAC3DA,GAAmB,mCAAa6uR,kBAAkB,OAS/DD,EAAgBtxP,UAAY,CAC1Bs6F,iBAAkB,UAAUp6F,MAG9B,IAOMkuC,EAAqB,CACzB7mF,oCACAhtC,8CACA8nD,wCACAI,wCACAha,wCACA5vC,+B,WAIa,IAAA+wC,UAjBS,SAACxzG,GAAD,MAAY,CAClCksH,YAAalsH,EAAMyV,UAAUy2G,YAC7BI,gBAAiBtsH,EAAMyV,UAAU62G,gBACjCha,uBAAwBtyG,EAAMyV,UAAU68F,uBACxCxuC,kBAAmB9jE,EAAM0zG,UAAU5vC,qBAaGk0H,EAAzB,CAA6CkjN,I,gFC/F5D,W,OACA,O,IACA,MAEA,Q,IACA,S,IACA,O,mDAEA,IAAME,EAAc,SAACpoS,GAAU,IAEtBxiF,EAAiDwiF,EAAjDxiF,YAAaD,EAAoCyiF,EAApCziF,eAAgB4qX,EAAoBnoS,EAApBmoS,iBAmBpC,OAjBA,IAAA9xR,YAAU,WAER,OADA94F,EAAe,CAAC2/S,UAAU,EAAOllT,WAAY,EAAGiN,SAAS,IAClD,WACL1H,EAAe,CAAC2/S,UAAU,EAAMllT,WAAY,OAG7C,IAWEwF,EAAYyH,QAIbzH,EAAY0/S,SACP,wCAIP,+BAAK59O,UAAU,yBACb,mCAAkB6oT,iBAAkBA,KAT/B,MAcXC,EAAYxxP,UAAY,CACtBuxP,iBAAkB,UAAUrxP,MAG9B,IAOMkuC,EAAqB,CACzBznK,iC,WAGa,IAAAijF,UAXS,SAACxzG,GAEvB,MAAO,CACLwwB,YAFoBxwB,EAAMyzG,YAArBjjF,eAU+BwnK,EAAzB,CAA6CojN,I,6FC3D5D,O,OACA,OACA,QACA,S,IAGA,S,IACA,MACA,Q,IACA,SACA,U,IACA,S,mDAEA,IAiFMpjN,EAAqB,CACzB7mF,qC,WAIa,IAAAqC,UAbS,SAACxzG,GAAD,MAAY,CAClCoxG,UAAWpxG,EAAMs3D,cAAc85C,UAC/B8a,YAAalsH,EAAMyV,UAAUy2G,YAC7BI,gBAAiBtsH,EAAMyV,UAAU62G,gBACjCnkH,SAAUnI,EAAMgR,YAAY7I,SAC5BmqG,uBAAwBtyG,EAAMyV,UAAU68F,0BAQF0lF,EAAzB,EAtFK,SAAChlF,GAAU,IACtBkZ,EAAwDlZ,EAAxDkZ,YAAaI,EAA2CtZ,EAA3CsZ,gBAAiBha,EAA0BU,EAA1BV,uBAC9BnqG,EAAY6qG,EAAZ7qG,SAFsB,GAGC,IAAA0gJ,UAAS,MAHV,qBAGtBwyP,EAHsB,KAGbC,EAHa,KAqB7B,IAVA,IAAAjyR,YAAU,WACR,OAAO,WACD/W,GACFA,EAAuBiyI,QAEzB,UAAM54N,UAAS,IAAA4E,gBAAe,CAACvF,WAAY,EAAGiN,SAAS,EAAOi4S,UAAU,QAGzE,KAEE/nU,GAAY+jH,EAAa,CAC5B,IAUMqvR,EAVqB,WACzB,IACMrvY,EAAQggH,EAAYhgH,MADZ,wBAGd,GAAIA,GAASA,EAAM/P,OAAS,EAAG,CAC7B,IAAMq/Y,EAAkBtvY,EAAM,GAC9B,OAAOrM,OAAO2B,SAAS8d,OAAhBzf,+BAA+D27Y,EAExE,MAAO,GAEeC,IACxB,IAAA55J,gBAAe05J,GAAiBhiX,MAAK,SAACmiX,GACpCJ,EAAWI,MAcf,OACE,+BAAKppT,UAAU,gBACb,+BAAKA,UAAU,kBACZ45B,EACC/jH,EAdY,WAClB,QAAQ,IAAAwzY,kBACN,KAAK,EAAAC,YAAYC,QACf,OAAO,mCAAqB/8X,IAAKotG,IACnC,KAAK,EAAA0vR,YAAYE,IACjB,KAAK,EAAAF,YAAYG,QACf,OAAO,mCAAUj9X,IAAKotG,KASlB8vR,GAEA,mCACE,+BAAKv1Y,IAAK40Y,EAASz/L,IAAI,aAGzBtvF,GAGF,mCAAa6uR,kBAAkB,U,8EC3EzC,W,OACA,OACA,OACA,QACA,Q,IACA,S,IACA,M,IACA,O,IACA,O,mDAEA,IAAMc,EAAW,SAACjpS,GAAU,IACnBl0F,EAA0Bk0F,EAA1Bl0F,IAAKstG,EAAqBpZ,EAArBoZ,mBAEZ,IAAA/C,YAAU,WAMR,cAAcvqG,KAGb,IA2BH,OACE,mCAAQwzE,UAAU,iBACNkyF,QAVE,WACd,IAVgBkpC,EAUVzxN,EAlBU,WAChB,IAAMgC,EAAI6C,SAAS8oD,cAAc,UAC3B3tD,EAAI,IAAIi8D,MAGd,OAFAj8D,EAAEwK,IAAMxI,EAAEw5F,YAEHx7F,EAaGigZ,GACJ7rY,GAXUq9M,EAWGthG,EAVnB1sH,QAAQ4B,IAAI,UAAWosN,GAChBtxN,OAAO+2B,OAAOryB,SAAS8oD,cAAc,KAAM,CAChD+tC,SAAU,aACV4vN,IAAK,KACL9lT,KAAMisN,KAORr9M,EAAEw5C,YAAY5tD,GAEdoU,EAAEunF,UAMA,uCACE,wDAEF,mCACE,8CADF,YAGA,mCACE,2DAMRqkT,EAASryP,UAAY,CACnB9qI,IAAK,UAAUorB,Q,WAaF,IAAA+tJ,aACb,IAAAxoC,aACE,IAAAj8C,UAZoB,SAACxzG,GACvB,MAAO,CACLkzG,kBAAmBlzG,EAAMgR,YAAYkiG,kBACrCkZ,kBAAmBpsH,EAAMyV,UAAU22G,qBAIZ,GAKvB,CAA6C6vR,M,8ECjFpBN,EAAhBA,cAAgB,WAC3B,IAAMx2Y,EAAYD,UAAUC,WAAaD,UAAU4G,QAAUjM,OAAOo3Y,MAGpE,MAAI,mBAAmBhyY,KAAKE,KAAetF,OAAOwM,SACzCuvY,EAAYE,IAIjB,WAAW72Y,KAAKE,GACXy2Y,EAAYC,QAGdD,EAAYG,SAbd,IAgBMH,EAAcA,EAAdA,YAAc,CACzBE,IAAK,MACLD,QAAS,UACTE,QAAS,Y,8ECnBX,I,IAAA,MAEA,OACA,OACA,QACA,Q,IACA,M,IACA,O,IACA,O,IACA,S,mDAEA,IAAMI,EAAsB,SAACnpS,GAAU,IAC7Bl0F,EAAQk0F,EAARl0F,IASR,OACE,mCACE,mCAAwBk0F,OAAA,EAAMl0F,IAAKA,IACnC,mCAAQwzE,UAAU,iBAAiBkyF,QAVpB,WACjB,IAAM43N,EAAct7Y,SAASg9F,cAAc,aACvCs+S,GACFA,EAAYC,eAQV,uCACE,wDAEF,mCACE,8CADF,YAGA,mCACE,4DAOVF,EAAoBvyP,UAAY,CAC9B9qI,IAAK,UAAUorB,Q,WAYF,IAAA+tJ,aACb,IAAAxoC,aACE,IAAAj8C,UAXoB,SAACxzG,GACvB,MAAO,CACLkzG,kBAAmBlzG,EAAMgR,YAAYkiG,kBACrCkZ,kBAAmBpsH,EAAMyV,UAAU22G,qBAIZ,GAIvB,CAA6C+vR,M,8ECtDjD,I,EAAA,O,oCACA,OAGA,IAoBMnkN,EAAqB,CACzB/mF,qBAvBF,MAuBEA,sB,WAIa,IAAAuC,UATS,SAACxzG,GAAD,MAAY,CAClC8wQ,kBAAmB9wQ,EAAMs3D,cAAcw5M,qBAQD94E,EAAzB,EAzBe,SAAChlF,GAAU,IAChCtjG,EAAgCsjG,EAAhCtjG,GAAIsa,EAA4BgpF,EAA5BhpF,KAAMoZ,EAAsB4vE,EAAtB5vE,SAAUsxB,EAAYs+C,EAAZt+C,SAE3B,OACE,+BAAKhlD,GAAIA,EACJ4iF,UAAW,qBAAwB59B,EAAW,2BAA6B,IAC3E34C,MAAO,CAACnP,IAAKw2B,EAASx2B,IAAK4sC,KAAMpW,EAASoW,OAE7C,+BAAK84C,UAAU,4BACf,+BAAKA,UAAU,yBACVtoE,Q,+ECdX,I,IAAA,MACA,OACA,Q,IACA,S,IACA,S,8DAmBe,IAAAwpF,UANS,iBAAO,KAGJ,GAGZ,EAjBS,SAACR,GAGvB,OAF0BA,EAAnBspS,iBAGL,KAAK,EAAA/6V,kBAAkBpkC,KACrB,OAAO,kCAAqB61F,GAC9B,KAAK,EAAAzxD,kBAAkBC,QACrB,OAAO,kCAAwBwxD,Q,8ECbrC,I,EAAA,O,oCACA,OACA,OAEA,SACA,QAIA,SACA,SACA,SAEA,IAoCMglF,EAAqB,CACzBsZ,4BACAhiG,0CACAJ,sCACAqjG,gDACAE,yD,WAGa,IAAAj/F,UAfS,SAACxzG,GAAD,MAAY,CAClCs3J,eAAgBt3J,EAAMqR,cAAcimJ,eACpCk7C,kBAAmBxyM,EAAMqR,cAAcmhM,kBACvC4+C,sBAAuBpxP,EAAM80Q,2BAA2B1jB,sBACxDE,iBAAkBtxP,EAAM80Q,2BAA2BxjB,oBAWbt5D,EAAzB,EA5CU,SAAChlF,GAAU,IAC3BskD,EACiDtkD,EADjDskD,eAAgBk7C,EACiCx/F,EADjCw/F,kBAAmBlB,EACct+F,EADds+F,aAAchiG,EACA0D,EADA1D,oBAAqBJ,EACrB8D,EADqB9D,kBAC3EqjG,EAAsDv/F,EAAtDu/F,uBAAwBE,EAA8Bz/F,EAA9By/F,2BAY1B,OACE,+BAAKngH,UAAU,kBACb,gCAAMA,UAAU,6DACd,4CAAkB5iF,GAAG,mCAEvB,kCAAQ4iF,UAAW,4BAA8BglE,EAAiB,qBAAuB,IACjFktB,QAhBc,YACxB,IAAA1uH,uBACCwhG,GAAwC,IAAAsoF,sBAAvB,IAAAE,iBAAe,IAChCttC,GAAqBD,GAAuB,GAC7CE,GAA2B,IAAAr5I,iBAC3Bk4I,GAAch6C,GACdhoD,EAAoB,IACpBJ,EAAkB,MAUd,gCAAM5c,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,2B,8ECpC/E,I,IAAA,O,IACA,O,IACA,O,IACA,M,IACA,OACA,SACA,QACA,QACA,SACA,Q,6DA6Me,IA3MU,WAAW,WAC9B/C,EAAOjF,KACXA,KAAK60Y,kBAAoB,CACvBvxY,KAAM,EACN7M,KAAM,IAERuJ,KAAK0jG,YAAc,KACnB1jG,KAAKwoT,YAAc,KACnBxoT,KAAK8xD,IAAM,KACX9xD,KAAK0zP,0BAA2B,EAEhC1zP,KAAK80Y,qBAAuB,SAAUD,GACpC70Y,KAAK60Y,kBAAoBA,GAE3B70Y,KAAK6sL,gBAAkB,SAAUgnK,GAC/B,UAAavrS,aAAY,GACzB,UAAUe,eAAc,GACxB,UAAUG,sBAAqB,GAC/B,UAAOxD,UAAUC,QAAS,EAC1B,UAAOD,UAAUE,OAAQ,EAEpB2tS,IACH,UAAO7tS,UAAUG,UAAW,GAE9BuoC,YAAW,WACT,UAAO1oC,UAAUG,UAAW,IAC3B,MAGLnmD,KAAKyjG,eAAiB,WACpB,IACEmlN,EADW,GAEXC,EAFW,GAITC,EAAS1vT,SAAS8oD,cAAc,OACpC4mQ,EAAOl3N,YAAc,YAErB,IAAIm3N,GAAO,aAAED,GACbC,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAGVkpT,EAAKh5E,KAAK,CACR,UAAW9qO,EAAK4vY,kBAAkBvxY,KAClC,YAAa2B,EAAK4vY,kBAAkBp+Y,OAmBtCsyT,EAAKpmN,GAAG,QAhBR,WACE,IACIqmN,SACDJ,EAAWC,GACZG,EAAQH,EAAYD,EACpBA,EAJW,GAKXC,EALW,GAKUG,IAErBA,EAAQJ,EAAWC,EACnBA,EARW,GASXD,EATW,GASSI,GAEtB,UAAazgQ,UAAU,cAAetjD,GAAM,GAC5CA,EAAKy+F,YAAc,CAAEh1C,MAAOo6P,EAAQnpT,MAAOipT,EAAU/oT,OAAQgpT,GAC7D5jT,EAAKguP,oBAGP81D,EAAKpnC,UAAS,aAAE,SAEoB,SAAhC18Q,EAAK4vY,kBAAkBvxY,MACzB,UAAO0iD,UAAU56C,KAAO,OACxB29S,EAAKh5E,KAAK,MAAV,mBAEA,UAAO/pL,UAAU56C,KAAO,aACxB29S,EAAKh5E,KAAK,MAAV,iBAGF/vO,KAAK8xD,IAAMi3P,EACX,UAAO/iQ,UAAUh+C,GAAK/C,EAAK4vY,kBAAkBvxY,MAG/CtD,KAAKizP,eAAiB,WACpB,UAAa1qM,UAAU,gBAAiBtjD,GAAM,GAC9C,UAAaw0D,SACX,UAAaC,OAAOM,OACpB,EAAKyuP,aACL,EACA,UAAa7uP,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOK,SACpB,EAAKvR,UACL,EACA,UAAaoR,WAAWojC,UAG5Bh9F,KAAK+3D,iBAAmB,WACtB,UAAa9O,YAAY,GACzB,UAAa26C,YAAY,GACzB,UAAO59C,UAAUE,OAAQ,GAI3BlmD,KAAKq4D,QAAU,SAASuyG,EAASxnE,GAC3BA,GACF,UAAaQ,YAAY3+F,EAAM,UAAay0D,OAAOM,QACnDh6D,KAAK0zP,0BAA2B,GAEhC1zP,KAAK+3D,oBAKT/3D,KAAKwoD,UAAY,SAASJ,GAExB,IAAI+M,EAAa,UAAU/J,gBAC3B,GAAI+J,GAAcA,EAAW/I,gBAAiB,CAC5C,IAAMi4H,EAAa,UAAMliL,WAEzB,GADqBkiL,EAAWz0H,cAAci4C,eACzB,EAAAp2D,2BAA2B6C,WAC9C,OAGF,IAAM03J,EAAY72I,EAAWtI,+BACvBk/I,EAAM52I,EAAW/I,kBACvB,GAAI2/I,GAAOC,EAAW,CACpB,IAAIC,EAAgD,SAAhChnM,EAAK4vY,kBAAkBvxY,KAAmB,OAAS,aAGnEyoM,GAAOA,EAAI7/I,gBACb6/I,EAAIpJ,gBACKoJ,IAAQA,EAAIvpC,2BAA6BupC,EAAItpC,iCACtDspC,EAAIzzI,sBAIN,IAAApJ,gBAAe68I,EAAKC,EAAWC,EAAc,KAAM,KAAMjsM,KAAK60Y,kBAAkBp+Y,KAAMuJ,KAAK60Y,kBAAkBvxY,WA8B7G,UAAM2gB,UAAS,IAAAujF,mBAAkB,eAKnC,IAAM3uC,EAAqBwrH,EAAWt2K,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,IAE7D74D,KAAKozP,yBAEPpzP,KAAKozP,sBAAwB,WACvBnuP,EAAKyuP,2BACPzuP,EAAKyuP,0BAA2B,EAChC,UAAa9vJ,YAAY3+F,EAAM,UAAay0D,OAAOK,UACnD90D,EAAK4nL,iBAAgB,GACrB5nL,EAAKw+F,mBAGTzjG,KAAKyoT,aAAe,SAAS9kQ,GAW3B,GAAG1+C,EAAKy+F,YAAYh1C,QAAU,aAAEv2D,QAAQwH,QAAU,IAAM,CACtD,IAAIspT,EAAO,UAAajpN,kBACrBipN,GACDtlQ,EAAI2rC,UAAUrqF,EAAKy+F,YAAYh1C,MAAOu6P,EAAK7uS,EAAI,GAAI6uS,EAAK5uS,EAAI,GAAIpV,EAAKy+F,YAAY/jG,MAAOsF,EAAKy+F,YAAY7jG,Y,0GChNjH,I,IAAA,SAEA,S,IACA,M,IACA,MACA,O,mDAEO,IAAMk1Y,EAAqBA,EAArBA,mBAAqB,SAACzpS,GAAU,IACpC7qG,EAA0B6qG,EAA1B7qG,SAAUygB,EAAgBoqF,EAAhBpqF,aAGXvhB,EAAQc,EAAW,IAAM,IAGzBZ,EAASY,EAAWygB,EAAe,GAAKA,EAAe,GAGvDuqT,EAAe,CACnB9rU,QACA6rU,YANkB,EAOlBE,YARkB/rU,EASlBgsU,SANevhU,KAAKouE,MAAM34E,EALV,KAYhBA,SACA+rU,UAbgB,IAchBC,iBAAkB,EAClBC,0BAA0B,EAC1BC,qBAAqB,GAYvB,OACE,gCAEEpsU,MAAO8rU,EAAa9rU,MACpBE,OAAQ4rU,EAAa5rU,OAErBgsU,iBAAkBJ,EAAaI,iBAC/BF,SAAUF,EAAaE,SACvBH,YAAaC,EAAaD,YAC1BE,YAAaD,EAAaC,YAC1BE,UAAWH,EAAaG,UACxBI,aApBiB,SAAC,GAAwC,EAAvCC,YAAuC,IAA1Bz0U,EAA0B,EAA1BA,IAAe6c,GAAW,EAArB63T,SAAqB,EAAX73T,OAIjD,OAAO,mCAAgCA,MAAOA,EAAO7c,IAAKA,KAiBxD20U,eAdmB,kBAAM,+BAAKvhP,UAAW,YAAhB,yBAmB/BmqT,EAAmB7yP,UAAY,CAI5BzhJ,SAAU,UAAU2hJ,M,WAiBR,IAAAt2C,UAZS,SAACxzG,GAAU,MACAA,EAAMgR,YACvC,MAAO,CACL4X,aAH+B,EAC1BA,aAGLzgB,SAJ+B,EACZA,YAOI,GAIZ,CAA6Cs0Y,I,6FC5E5D,O,WACA,MACA,OACA,O,IAEA,SACA,QACA,Q,IACA,OACA,Q,mDAEA,IAAMC,EAAoB,SAAC1pS,GAAU,IAE5BjoG,EAAmGioG,EAAnGjoG,QAASshB,EAA0F2mF,EAA1F3mF,uBAAwBxM,EAAkEmzF,EAAlEnzF,eAAgBwC,EAAkD2wF,EAAlD3wF,KAAM3W,EAA4CsnG,EAA5CtnG,YAAaxB,EAA+B8oG,EAA/B9oG,MAAOooF,EAAwB0gB,EAAxB1gB,UAAWwhD,EAAa9gC,EAAb8gC,UACvFt6H,EAAqBqG,EAAezQ,SAHP,GAKK,IAAAy5I,WAAS,GALd,qBAK5B8zP,EAL4B,KAKdC,EALc,KAO7BC,OAAkC,IAAd/oQ,IAA+BA,EAEnDgpQ,EAAqB,kBAAMF,GAAiBD,IAM5CI,EAAsB,SAACC,GACvBxjY,EAAmBvC,wBACrBlM,EAAQM,UAAUnB,MAAQ8yY,GAE1BjyY,EAAQM,UAAUjB,KAAO4yY,EACzBjyY,EAAQM,UAAUm1G,eAAiBw8R,GAErCjyY,EAAQM,UAAU4qP,iBAAkB,EACpC5pO,KAGF,OACE,+BAAKimE,UAAW,sBAAwBA,EAAY,IAAMA,EAAY,KACnEuqT,EAAY,KACX,gCAAMvqT,UAAW,EAAA7uF,UAAY,0BAA4B,IAAK+V,EAAmBgC,cACnF,mCAAW82E,UAAW,mDACjBqqT,EAAe,qCAAuC,IAChDpsH,aAAa,EACbuxD,aAAc,MACdpyU,GAAG,qBACH8tN,SAAUu/K,EACV11K,OAAQy1K,EACRtsH,aAAcusH,EACdn+Y,MAAOsL,IACjByyY,GAAgBE,EACb,KACA,EAAAp5Y,UAAY,gCAAM6uF,UAAU,oDAAoDpoF,GAAgBA,EACnGmY,IAASw6X,EAAY,gCAAMvqT,UAAU,2BAAhB,IAA4CjwE,EAA5C,KAA4D,KAClF,iCAAOorT,QAAQ,qBACR1xT,MAAO8gY,EAAY,CAACvvD,WAAY,GAAK,KACrCh7P,UAAU,0BACVkyF,QAASs4N,GACb,EAAAr5Y,UACG,oCAAU0vG,MAAO,UAAaznG,GAAa4nG,SAC3C,2CAAiBH,MAAO,UAAaznG,GAAa4nG,YAM9DopS,EAAkB9yP,UAAY,CAC5B7+I,QAAS,UAAU1L,OACnBgoO,OAAQ,UAAU5gD,KAClBpkK,KAAM,UAAU6nB,OAChBhgC,MAAO,UAAU2/I,UAAU,CAAC,UAAUvpC,OAAQ,UAAUp2E,SACxDooD,UAAW,UAAUpoD,OACrB4pG,UAAW,UAAUgW,MAGvB,IAUMkuC,EAAqB,CACzB3rK,iD,WAGa,IAAAojI,aACb,IAAAj8C,UAfsB,SAACxzG,EAAOqvP,GAAa,IACpC3jP,EAAe1L,EAAMgR,YAArBtF,YACP,MAAO,CACLX,QAASskP,EAAStkP,SAAW/K,EAAMytB,eAAetB,qBAClDtM,eAAgB7f,EAAMqN,gBACtBqmQ,iBAAkB1zQ,EAAMytB,eAAeimP,iBACvChoQ,iBASuBssL,EAAzB,CAA6C0kN,K,8EC1F/C,I,IAAA,MACA,O,IACA,MACA,S,IACA,S,mDAEA,IAAMO,EAAoB,SAACjqS,GAAU,IAC5BkqS,EAAsClqS,EAAtCkqS,YAAaniJ,EAAyB/nJ,EAAzB+nJ,eAAgBzlP,EAAS09F,EAAT19F,MAEhC6nY,EAAWpiJ,EAAeO,cAE9B,OACE,+BAAKhpK,UAAU,kBAAkBg6M,UAAQ,wBACvC,8BAAIh6M,UAAU,kBAEX4qT,EACD,gCAAM5qT,UAAU,kBACP,KAAOh9E,EAAQ,IAAIvV,OAAO,KAGrC,+BAAKuyF,UAAU,oBAEX6qT,EAAS3tY,KAAI,SAAC2wR,EAAgB7qR,GAC5B,OAAO,mCAAmBpW,IAAKoW,EACR6qR,eAAgBA,EAChBplC,eAAgBA,EAChBzlP,MAAOA,UAQ1C2nY,EAAkBrzP,UAAY,CAC5BszP,YAAa,UAAUhzW,OACvB6wN,eAAgB,UAAUz5M,MAAV,4B,WAaH,IAAAkyD,UAVS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,cAIT,GAIZ,CAA6C8tS,I,4GCjD5D,MACA,OACA,O,IACA,Q,IAEA,S,IACA,Q,IAEA,OAEA,SACA,SACA,QACA,QACA,Q,mDAEA,IAiDMjlN,EAAqB,CACzBn5B,sDACA93F,8CACAw7E,6C,WAGa,IAAAkN,aACb,IAAAj8C,UAnBsB,SAACxzG,GAKvB,MAAO,CACL8+J,uBAL+B9+J,EAAMk4L,WAAhCp5B,uBAMLpzJ,YALoB1L,EAAMgR,YAArBtF,YAML04D,mBAL2BpkE,EAAM0zG,UAA5BtvC,sBAgBkB4zH,EAAzB,EAxD8B,SAAChlF,GAAU,IAOnC,EAaA,EAnBCtnG,EACmBsnG,EADnBtnG,YAAaozJ,EACM9rD,EADN8rD,uBAAwBD,EAClB7rD,EADkB6rD,0BAA2Bz6F,EAC7C4uC,EAD6C5uC,mBAAoB2C,EACjEisC,EADiEjsC,sBACzFw7E,EAAwBvvC,EAAxBuvC,qBAGIj+H,GADS,IAAAzB,oBACa+a,wBAAwBwmC,GAE9Cg5U,GAAA,gCAAkB,WAAOzxT,GAAP,2EAClBrnE,GAAiBA,EAAaoyM,kCADZ,iCAEP,IAAA8mC,sBAAqBl5O,EAAcqnE,GAAY,SAAC0xT,GAC3D96P,EAAqB86P,GAChBA,GACHt2U,OALgB,0FAAlB,6CAWAu2U,GAAa,aAASF,EAAiB,KAEvC34L,GAAA,gCAA0B,WAAOn8G,GAAP,8EAC9Bu2D,EAA0Bv2D,EAAM+mE,cAAczwK,OADhB,SAExB0+Y,EAAWh1S,EAAMlqF,OAAOxf,OAFA,kDAA1B,6CAKN,OACE,+BAAK0zF,UAAU,aACb,mCAAY88L,QAAA,EAAOq+C,QAAQ,iBAAiB1xT,MAAO,CAAEo3F,MAAO,UAAaznG,GAAa6wH,UACpF,4CAAkB7sH,GAAI,gCAExB,mCAAWA,GAAG,iBAAiB24B,MAAM,GAAGr9B,KAAK,QAAQmqP,QAAQ,WAAWooJ,WAAW,EAAMzqY,KAAK,SACnFlU,MAAOkgK,EACP0+D,SAAU/Y,U,2GChD3B,O,OACA,OACA,O,IACA,M,IAEA,S,IACA,S,IACA,S,IACA,SAEA,SACA,Q,IACA,SACA,QAEA,QAEA,Q,OAEA,S,IACA,OACA,Q,mDAGA,IAAM+4L,EAAkB,SAACxqS,GAAU,IACzB1gB,EACoB0gB,EADpB1gB,UAAWgsE,EACStrD,EADTsrD,cAAen8I,EACN6wF,EADM7wF,KAAMha,EACZ6qG,EADY7qG,SAAU27D,EACtBkvC,EADsBlvC,kBAAmBM,EACzC4uC,EADyC5uC,mBAAoBq5U,EAC7DzqS,EAD6DyqS,mBACvFtM,EAA0Bn+R,EAA1Bm+R,sBAF+B,GAGW,IAAAtoP,UAAS,MAHpB,qBAG1B27D,EAH0B,KAGVk5L,EAHU,MAKjC,IAAAr0R,YAAU,WACRq0R,EAAkBp/O,EAAgB,cAAgBn2J,EAAWq8M,EAAiB,MAE7E,CAAClmD,IAEJ,IAmBM17I,GAAS,IAAAC,oBACTyB,EAAem5X,IACb35U,EAAoBA,EAAkB17D,YAAcwa,EAAOgb,wBAAwBwmC,IAErFykH,EAAmBvqB,IAAkBh6I,EAAaw1E,qBAAuBq3S,IAC3E,IAAA1oN,wBAAuBnkK,GACvB,GAEJ,OAAKA,EAeH,+BAAKguE,UAAW,uBAAyBA,EAAY,IAAMA,EAAY,KACpEu2F,EAAiBr5K,KAAI,SAAAmuY,GACpB,OACE,8BAAIrrT,UAAU,qBAAqBpzF,IAAKy+Y,EAAgBjuY,IACtD,mCAAWs/X,SAAUxqL,IAAmBm5L,EAAgBjuY,GAAI8tN,UA9ChDjmM,EA8CuEomX,EAAgBjuY,GA9C7E0zM,EA8CiFu6L,EAAgBx/Y,KA9ClF,SAACmqG,EAAOs1S,GACrD,IAAMC,EAAkB,UAAU/zW,mBAAmB,CAACz+B,UAAW,CAAC2+B,IAAKo5K,KAAc,GACrF,qBACE,UAAUv6K,eACR+0W,EACI,EAAAzsW,gCAAgCgD,oCAAsC0pW,EACtE,EAAA1sW,gCAAgCiD,qCAAuCypW,GAG7E,UAAUh1W,eACR+0W,EACI,EAAAvzW,6BAA6BoD,iCAAmCowW,EAChE,EAAAxzW,6BAA6BqD,kCAAoCmwW,GAIzEH,IAAkBE,GAAarmX,MA+BrB,mCACEumX,WAAY,wCACZ7sJ,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnCquY,gBAAc,mBACdruY,GAAG,kBACH4iF,UAAU,mBAEZ,+BAAKA,UAAU,mCACb,gCAAMA,UAAU,yBACbqrT,EAAgBtjM,gBAChBsjM,EAAgBnmE,sBAAhB,KAA6CmmE,EAAgBnmE,sBAA7D,IAAwF,MAE1FlzT,EAAa+8J,iBAAmB/8J,EAAa08J,qBAAuB,KAAO,mCAAiBh2K,KAAM,OAGrG,uCACE,+BAAKsnF,UAAU,oBACb,mCAAoBqrT,gBAAiBA,EAAiBr5X,aAAcA,QAhE/D,IAACiT,EAAU6rL,MA4BvB,MA+CXo6L,EAAgB5zP,UAAY,CAC1Bt3D,UAAW,UAAUpoD,OACrBinW,sBAAuB,UAAUrnP,MAGnC,IA6BMkuC,EAAqB,CACzB35B,8CACAQ,sDACAhoI,yC,WAGa,IAAA44H,aACb,IAAAj8C,UApCsB,SAACxzG,GAAU,MACeA,EAAM0zG,UAA/C5vC,EAD0B,EAC1BA,kBAAmBM,EADO,EACPA,mBACnBj8D,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGoBnI,EAAMyc,YAApDiP,EAH0B,EAG1BA,YAAa1F,EAHa,EAGbA,gBAAiBilX,EAHJ,EAGIA,aAC9B3sO,EAAiBt+J,EAAMk4L,WAAvB55B,cACAguO,EAAqBtsY,EAAM0zG,UAA3B44R,kBAEHmR,EAAqB,KAPQ,EAQkCz9Y,EAAMqY,YAAlEG,EAR0B,EAQ1BA,qBAAsBF,EARI,EAQJA,iBAAkBwZ,EARd,EAQcA,iBAC/C,GAAIwsI,GAAiBhmJ,EAAkB,CACrC,IAAM8sG,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAC9C,IAAzB4sG,EAAcjpH,SAChBshZ,GAAqB,IAAAt7S,gCAA+BijB,EAAc,KAItE,MAAO,CACLk5C,cAAe5yI,GAAe4yI,EAC9B2sO,eACA9iY,WAEA27D,oBACA99C,kBACAo+C,qBACAkoU,oBACAmR,wBAWuBzlN,EAAzB,CAA6CwlN,K,yGCtJ/C,MACA,OACA,O,IAEA,Q,IACA,Q,IACA,Q,IAEA,MACA,SACA,UACA,QACA,Q,OACA,QACA,QACA,U,mDAEA,IAAMQ,EAAqB,SAAChrS,GAAU,IAC7B2qS,EAAwD3qS,EAAxD2qS,gBAAiB33X,EAAuCgtF,EAAvChtF,gBAAiB6Q,EAAsBm8E,EAAtBn8E,mBAqBzC,OACE,+BAAKy7D,UAAU,aACb,uCACGqrT,EAAgB9/X,OAAOrO,KAAI,SAAAoO,GAM1B,IAAI,IAAA25T,yBAAwB35T,GAC1B,OAAO,KAET,IAAMq1G,EAAWjtG,EAAgBxS,MAAK,SAAC9E,GACrC,OAAOA,EAAO+lF,gBAAkBkpT,EAAgBjuY,IAAMhB,EAAO6oB,WAAa3Z,EAAYlO,MAKxF,OACE,mCACE24B,OAAO,IAAAovS,yBAAwB75T,GAC/B00E,UAAU,kBACVpzF,IAAK0e,EAAYlO,GACjB4tN,QAAS,mCAAUF,UAAWnqG,EAAU3gC,UAAU,2BAA2BkrI,SAR3D,WACpB,OAnCmB,SAACjmM,EAAUk9D,EAAewpT,EAAiBhrR,GACtE,IAAM4qR,EAAkB,UAAU/zW,mBAAmB,CAACz+B,UAAW,CAAC2+B,IAAKi0W,KAAmB,GAE1F,qBACE,UAAUp1W,eACRoqF,EACI,EAAA9hF,gCAAgCmD,sCAAwCupW,EACxE,EAAA1sW,gCAAgCkD,mCAAqCwpW,GAG3E,UAAUh1W,eACRoqF,EACI,EAAA5oF,6BAA6BuD,mCAAqCiwW,EAClE,EAAAxzW,6BAA6BsD,gCAAkCkwW,GAGvEhnX,GAAmB,IAAAgjL,wBAAA,wBAA2B7zL,IAAkB,CAACuR,WAAUk9D,mBAmB5DulH,CAAqBp8L,EAAYlO,GAAIiuY,EAAgBjuY,GAAIkO,EAAYmmF,YAAakvB,cAgBrG+qR,EAAmBp0P,UAAY,CAC7B+zP,gBAAiB,UAAUr8V,MAAV,wBACjBh9B,aAAc,UAAUg9B,MAAV,0BAGhB,IAOM02I,EAAqB,CACzBnhK,yC,WAGa,IAAA44H,aACb,IAAAj8C,UAZsB,SAACxzG,GAEvB,MAAO,CACLgmB,gBAFwBhmB,EAAMyc,YAAzBuJ,mBAWkBgyK,EAAzB,CAA6CgmN,K,gFCxF/C,I,IAAA,MACA,OACA,O,IAEA,O,IACA,SAEA,QACA,SACA,Q,0DAGA,IAkCMhmN,EAAqB,CACzBnhK,wCACAgoI,uD,WAGa,IAAApP,aACb,IAAAj8C,UAfsB,SAACxzG,GAAU,IAC1B8jE,EAAqB9jE,EAAM0zG,UAA3B5vC,kBAEP,MAAO,CACLw6F,cAFoBt+J,EAAMyc,YAArBiP,YAGLo4C,uBAUuBk0H,EAAzB,EAxCuB,SAAChlF,GAAU,IAC3Bn8E,EAAuDm8E,EAAvDn8E,mBAAoB1U,EAAmC6wF,EAAnC7wF,KAAM08I,EAA6B7rD,EAA7B6rD,0BAE3Bq/O,EAAmB,WACvB,UAAUr1W,eAAe,EAAAwB,6BAA6BmD,0BACtD3W,EAAmB,IACnBgoI,EAA0B,KAK5B,OACE,+BAAKvsE,UAAU,uBACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAU,+CACVkyF,QAAS05N,GACnB,yCAEF,gCAAM5rT,UAAU,2BAA2BkyF,QAAS05N,GAClD,4CAAkBxuY,GAAG,+C,0ICrBd,WAA+B,OACI,IAAAm5I,UAASs1P,KADb,qBACrCC,EADqC,KACnBC,EADmB,KAY5C,OATA,IAAAh1R,YAAU,WACR,SAASwpI,IACPwrJ,EAAoBF,KAItB,OADAt+Y,OAAO0uD,iBAAiB,SAAUskM,GAC3B,kBAAMhzP,OAAO+qG,oBAAoB,SAAUioJ,MACjD,IAEIurJ,GAtBT,WAEA,SAASD,IAAsB,MACkCt+Y,OAC/D,MAAO,CACLwoB,YAH2B,EACrBgiC,WAGNzhC,aAJ2B,EACIgpC,e,gICHnC,OACA,OAEA,QACA,S,WA2Be,IAAA4hD,UANS,SAACxzG,GACvB,MAAO,CACLopH,wBAAyBppH,EAAMgR,YAAYkiG,kBAAkB/2G,UAIlD,EAzBS,SAAC62G,GAAU,IAE1Bk1C,EAAqCl1C,EAArCk1C,SAAU9+B,EAA2BpW,EAA3BoW,wBAFgB,GAIC,IAAAy/B,UAAS,IAJV,qBAI1By1P,EAJ0B,KAIfC,EAJe,KAgBjC,OAJA,IAAAl1R,YAAU,WANa,IACfzmG,KAAS,IAAAC,qBACf,IAAAwnK,2BAA0BznK,GACvB2W,MAAK,SAACswE,GAAD,OAAc00S,EAAa10S,QAKlC,CAACuf,IAEG8+B,EAASo2P,O,8ECtBlB,I,IAAA,MACA,O,IACA,M,IAEA,S,IACA,S,IACA,S,mDAEA,IAAME,EAAkB,SAACxrS,GAAU,IAE1BswH,EAAetwH,EAAfswH,YAEP,OACE,wCACG,kBACC,mCAAShxI,UAAU,kBACjB,mCAAuBgxI,YAAaA,IACpC,6CAOVk7K,EAAgB50P,UAAY,CAC1B05E,YAAa,UAAU78C,KAAK9lE,Y,WAYf,IAAAnN,UATS,WACtB,MAAO,KAKkB,GAGZ,CAA6CgrS,I,8ECrC5D,W,OACA,OACA,OACA,Q,IACA,M,IAEA,O,IAEA,S,IACA,QAGA,QACA,QACA,Q,IACA,QAEA,QACA,Q,OACA,QACA,Q,mDAEA,IAAMC,EAAiC,SAACzrS,GAAU,IAEzC7wF,EACmC6wF,EADnC7wF,KAAMha,EAC6B6qG,EAD7B7qG,SAAUm7N,EACmBtwH,EADnBswH,YAAaz+J,EACMmuC,EADNnuC,qBAAsB56D,EAChB+oG,EADgB/oG,UAAWynB,EAC3BshF,EAD2BthF,eAAgBgzC,EAC3CsuC,EAD2CtuC,kBAAmBjC,EAC9DuwC,EAD8DvwC,cACtG01H,EAAwCnlF,EAAxCmlF,QAAS+4D,EAA+Bl+I,EAA/Bk+I,YAAarxO,EAAkBmzF,EAAlBnzF,eAElBre,GAAW,IAAA+vY,eA+BjB,OARAtnY,EAAUnE,SAAQ,SAAAgI,IACXA,EAAS4tF,uBAAwB,IAAAN,iBAAgBttF,IAGtBA,EAAS+C,YAKzC,+BAAKyhF,UAAU,oBAYZ4+J,GAAerxO,EAAe2nI,UAAa,EAAD,oBAAuBr/I,EAAY,KAC5E,wCACG,SAACq9S,GAAD,OACC,+BAAKlzN,UAAU,UAAUkyF,QAAS,kBAnCpB,SAACghI,GAEvB,GADA,UAAU38Q,eAAe,EAAAwB,6BAA6BiF,oBAClD5d,EACF8zR,QACK,CACL,IAAM3lM,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAC7Ch7C,EAAqBg7C,EAAU,EAAAz7E,cAAcM,cAAgB,EAAAN,cAAckB,cA6B7Bo5W,CAAgBl5F,KACtD,mCAAYv0D,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,gCACnC4iF,UAAW,aAAenqF,EAAW,qBAAuB,KAAO,EAAA7E,mBAAqB,qBAAuB,KACzH,yCAED6E,EAAW,KACV,gCAAMmqF,UAAU,iBACd,4CAAkB5iF,GAAG,qCAO/BvH,GAAa3G,GAAaA,EAAS+d,SACnC,wCACG,sBAAwB/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAOC,MAOvD,KANF,+BAAKo1E,UAAU,UAAUkyF,QAAS8+C,GA1DrB,WACrB5+J,EAAkB,IAClBjC,EAAc,MACd01H,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAwDV,mCAAYulJ,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,gCACnC4iF,UAAW,8BACrB,2CANsC,OA8BtDmsT,EAA+B70P,UAAY,CACzC05E,YAAa,UAAU78C,KACvByqE,YAAa,UAAUpnG,MAGzB,IAcMkuC,EAAqB,CACzBnzH,4CACAH,sCACAjC,+B,WAGa,IAAAgtF,aACb,IAAAwoC,aACE,IAAAzkF,UAtBoB,SAACxzG,GAMvB,MAAO,CACLmI,SANiBnI,EAAMgR,YAAlB7I,SAOL8B,UANkBjK,EAAM8J,UAAnBG,UAOLynB,eANuB1xB,EAAMwc,UAAxBkV,eAOL7R,eANqB7f,EAAMqN,mBAkBF2qL,EAAzB,CAA6CymN,M,mICjJjD,OACA,OACA,QACA,SACA,QACA,QACA,SAEA,IAmCMzmN,EAAqB,CACzBnzH,4CACA8sO,uD,WAGa,IAAA15G,aACb,IAAAzkF,UApBsB,SAACxzG,GAMvB,MAAO,CACL8c,uBAN+B9c,EAAMwc,UAAhCM,uBAOLtD,mBANiBxZ,EAAMqN,gBAAlB+B,SAOLnF,UANkBjK,EAAM8J,UAAnBG,UAOLgF,SANiBjP,EAAMkP,UAAlBD,YAgBkB+oL,EAAzB,EAzCgC,SAAChlF,GAAU,IAEpCk1C,EACOl1C,EADPk1C,SAAU1uI,EACHw5F,EADGx5F,mBAAoBsD,EACvBk2F,EADuBl2F,uBAAwB+nD,EAC/CmuC,EAD+CnuC,qBAAsB8sO,EACrE3+L,EADqE2+L,0BAA2B1nS,EAChG+oG,EADgG/oG,UAC5GgF,EAAY+jG,EAAZ/jG,SAHyC,GAIS,IAAA45I,WAAS,GAJlB,qBAIpC81P,EAJoC,KAIhBC,EAJgB,KAMrCnrI,GAAkB,IAAAz9E,mBAAkB/rL,GACpC40Y,EAA6BrlY,EAAmBuD,0BAA4BD,MAA6B22P,IAAmBxkQ,EAAS9S,QAW3I,OATA,IAAAktH,YAAU,WACJw1R,IACFh6U,EAAqB,EAAAzgC,cAAckB,aACnCqsQ,GAA0B,GAC1BitG,GAAsB,MAGvB,IAEI12P,EAASy2P,EAAoBE,Q,8EC1BtC,I,IAAA,MACA,OACA,OACA,Q,IAEA,O,IACA,O,IACA,SAEA,QACA,Q,IASA,QACA,QACA,Q,WACA,SACA,SACA,QACA,QACA,Q,IACA,SACA,QACA,S,mDAGA,IAyJM7mN,EAAqB,CACzBtzH,sCACAG,6C,WAGa,IAAA4qF,aACb,IAAAwoC,aACE,IAAAzkF,UA/BoB,SAACxzG,GACvB,IAAM6f,EAAiB7f,EAAMqN,gBACtB+E,EAAoBpS,EAAMsS,oBAA1BF,iBAF0B,EAGqBpS,EAAM8J,UAArDG,EAH0B,EAG1BA,UAAW6hU,EAHe,EAGfA,wBAAyBz8T,EAHV,EAGUA,QAHV,EAIKrP,EAAMgR,YAArC7I,EAJ0B,EAI1BA,SAAU+qG,EAJgB,EAIhBA,kBACVvuC,EAAkB3kE,EAAM0zG,UAAxB/uC,eACA7nD,EAA0B9c,EAAMwc,UAAhCM,uBAN0B,EAOgB9c,EAAMo5B,wBAAhDw4Q,EAP0B,EAO1BA,uBAAwBM,EAPE,EAOFA,eAE/B,MAAO,CACLryR,iBACAzN,mBACAnI,YACA6hU,0BACA3jU,WACAw8D,iBACAykD,wBAAyBlW,EAAkB/2G,OAC3C2gB,yBACAzN,UACAuiS,yBACAM,oBAWyBl6G,EAAzB,EAhKmB,SAAChlF,GAAU,IAEzB5gG,EAEG4gG,EAFH5gG,iBAAkByN,EAEfmzF,EAFenzF,eAAgB5V,EAE/B+oG,EAF+B/oG,UAAW9B,EAE1C6qG,EAF0C7qG,SAAUw8D,EAEpDquC,EAFoDruC,eAAgBykD,EAEpEpW,EAFoEoW,wBAAyB+uE,EAE7FnlF,EAF6FmlF,QACrGzzH,EACQsuC,EADRtuC,kBAAmB5nD,EACXk2F,EADWl2F,uBAAwB80R,EACnC5+L,EADmC4+L,uBAAwBM,EAC3Dl/L,EAD2Dk/L,eAAgBrtO,EAC3EmuC,EAD2EnuC,qBACnF1iD,EAAQ6wF,EAAR7wF,KACI3I,EAAqBqG,EAAezQ,SAEpCywG,GAAU,IAAAnzG,aAAcmT,EAAeggG,QACvC2vN,GAAmBh2T,EAAmBsf,SACtCzvB,GAAa,IAAA+E,iBACfqjH,GAAa,IAAA7oH,wBAAuBS,EAAY+I,GAc9Co4E,EAAWvgF,EAAU1E,OAAM,SAAAuI,GAAA,QAAa,IAAAstF,iBAAgBttF,IAAaA,EAASgB,YAAchB,EAAS+C,YAEvGiuY,GAAe,IAAA9oN,mBAAkB/rL,EAAWkY,GA1BhB,GA2BC,IAAA8tH,mBAA5BC,EA3B2B,EA2B3BA,cAAe4D,EA3BY,EA2BZA,UACf5D,IAAiB12H,EAAmB+qK,aAAgBznK,IACvDozH,GAAgB,GAElB,IAAM6uQ,GAAajrQ,GAAc89J,IAA2BM,EAAerwS,SAAS,SAC9Em9Y,EAAgBptG,IAA2BM,EAAerwS,SAAS,YAwCzE,OACE,kCAAQywF,UAAW,aAAenqF,GAAaw8D,IAAmB,EAAA1nD,OAAOE,MAAQisG,EAA2B,qBAAuB,KAIhIjhH,GAAaw8D,IAAmB,EAAA1nD,OAAOE,KAAQ,KAC9C,+BAAKm1E,UAAW,YAAe94E,EAAmBsf,SAAqC,GAA1B,2BAC1D3wB,GAAa03G,GAAYrmG,EAAmBsf,SAC3C,wCACG,SAACmmX,GAAD,OACC,mCAAQ3sT,UAAW,uDACdnqF,EAAW,0BAA4B,+CAEpCq8K,QAAS,kBApET,SAACy6N,GACrB,UAAUp2W,eAAe,EAAAwB,6BAA6BoF,sBADL,OAEhB,IAAA+gN,+BAA1Bx0O,EAF0C,EAE1CA,SAAUpd,EAFgC,EAEhCA,MAAOkpB,EAFyB,EAEzBA,MACxB,UAAUghB,mBAAmB,YAAa,CAAC9sB,WAAUpd,QAAOkpB,UAC5Dm3X,IAgEmCC,CAAcD,KAEnC,4CAAkBvvY,GAAG,wCAR2B,KAaxD,wCACG,SAACyvY,GAAD,OAA0BH,GAAiBn/X,EAAe2nI,UAAYhuI,EAAmBsf,SAAY,KACpG,mCAAQw5D,UAAW,qDACdnqF,EAAW,0BAA4B,+CACpCqiF,SAAUA,EACV4kN,UAAWogC,EAAkB,KAAO,uCAAS,8CAC7ChrJ,QAAS,kBAlDP,SAAC26N,GACrB,UAAUt2W,eAAe,EAAAwB,6BAA6BmF,mBAClDqwE,IAAYrmG,EAAmBsf,SACjCqmX,IACSjvQ,GACTrwI,OAAOwpJ,aAAaxpJ,OAAOu/Y,sBAC3Bv6U,EAAqB,EAAAzgC,cAAckB,eAEnCo/B,EAAkB,EAAAznD,OAAOC,MACzBi7K,EAAQ17L,KAAK,EAAAwgB,OAAOC,OAyCWmiY,CAAcF,KACnC,4CAAkBzvY,GAhE1B8J,EAAmB+qK,cAAgBznK,EAC9B,4BACE0yT,EACF,oCACEt/L,EACF,yCAIA,qCAkDC,IAKsDA,GAAiBs/L,EAAkB,KAAO,IAAMsvE,EAAe,QAIxHtlY,EAAmB8oQ,eAClB,mCAAQhwL,UAAW,qDACdnqF,EAAW,0BAA4B,+CAEpCqiF,SAAUA,EACV4kN,UAAW,wCACX5qH,QAjGQ,WACxB,UAAU37I,eAAe,EAAAwB,6BAA6Bi1W,sBACtDz6U,EAAqB,EAAAzgC,cAAckB,YAAa,eAgGtC,4CAAkB51B,GAAG,mCAErB,KACHqvY,EAAY,KACX,+BAAKzsT,UAAW,mBAAqB49C,EAAgB,2BAA6B,KAChF,gCAAM59C,UAAU,6BACd,4CAAkB5iF,GAAG,+BAEvB,gCAAM4iF,UAAW,uBAAyB49C,EAAgB,+BAAiC,KACxFA,EAAgB,yCAA4B,IAAA90H,sBAAqB5B,GAAoB,IAAA9P,cAAa+nH,GAAa,MAAM,a,wLCvJtI,MACA,OAEA,QACA,S,IACA,QACA,QACA,Q,mDAGO,IAAM,EAAsB8tR,EAAtBA,qBAAA,gCAAsB,4GACN,UAAQ/nR,0BAA0B,KAD5B,WAC3BokD,EAD2B,SAEXA,EAAajgL,MAASigL,EAAajgL,KAAK0tF,SAF7B,0CAGxB,GAHwB,cAK3BzmE,GAAS,IAAAC,qBACRqmG,gBAAgB0yD,EAAajgL,MACpCinB,EAAOuZ,cAAcr2B,SAAQ,SAAC2oG,GAC5BA,EAAYhoF,aAAa3gB,SAAQ,SAACwuI,GAChCA,EAAYx6C,qBAAsB,QAGtC,UAAMnuE,UAAS,IAAAysG,sBAAqBt3H,SAASC,SAASoC,iBAZrB,mBAa1B,GAb0B,mDAAtB,4CAgBgCq8Y,EAAhCA,8BAAgC,WAAM,IAK3C,EAL2C,GAEL,IAAA32P,WAAS,GAFJ,qBAE1CK,EAF0C,KAE1BC,EAF0B,KAG3CrB,GAAY,IAAAF,gBAEZ0B,GAAA,gCAAgB,mGACd1mI,GAAS,IAAAC,oBACT+0F,EAAuBh1F,EAAOi1F,mBAAkB,GAAM,GAAO,GAC9DnpG,QAAO,SAAA+wY,GAAA,OAAaA,EAASzxY,OAAOnM,SAAS,YAAc49Y,EAASzxY,OAAOnM,SAAS,iBAErF69Y,EAAqB,GACzB9nS,EAAqB9xG,SAAQ,SAAC65Y,KACxBA,EAAmBr7X,eACfq7X,EAAmB3+N,sBACpB2+N,EAAmB5xY,aACnB4xY,EAAmB5xY,YAAY1C,WAC/Bs0Y,EAAmB5xY,YAAY1C,UAAUmF,oBACxCkvY,EAAmB79Y,SAAS89Y,EAAmB5xY,YAAY1C,UAAUmF,oBACpEmvY,EAAmBr7X,aAAaywH,8BAC7B4qQ,EAAmBr7X,aAAaywH,6BAA6BlzI,SAAS89Y,EAAmB5xY,YAAY1C,UAAUmF,qBACpHmvY,EAAmBr7X,aAAaywH,+BACnC4qQ,EAAmBr7X,aAAaywH,6BAA+B,IAEjE2qQ,EAAmBjjZ,KAAKkjZ,EAAmB5xY,YAAY1C,UAAUmF,mBACjEmvY,EAAmBr7X,aAAaywH,6BAA6Bt4I,KAAKkjZ,EAAmB5xY,YAAY1C,UAAUmF,uBAG/G9Q,QAAQ4B,IAAI,qBAAsBo+Y,GAC7BA,EAAmBvjZ,OAvBJ,uBAwBlBgtJ,GAAkB,GAxBA,4CA2Bc,IAAAngC,eAAc,KAAM02R,GAAoB,GA3BtD,SA2Bdz2R,EA3Bc,SA4BOA,EAAoBttH,OAC7C+D,QAAQ4B,IAAI,sBAAuB2nH,EAAoBttH,MACvDinB,EAAOsmG,gBAAgBD,EAAoBttH,OAEzCmsJ,KACFqB,GAAkB,GAjCA,mDAAhB,4CA0CN,OALA,IAAA9/B,YAAU,WACRigC,MAEC,IAEIJ,I,8ECzET,I,IAAA,M,IACA,MACA,O,IAEA,QAEA,QACA,Q,mDAEA,IAAM02P,EAA2B,SAAC5sS,GAAU,IAEnC3S,EAA+D2S,EAA/D3S,YAAaj8B,EAAkD4uC,EAAlD5uC,mBAAoBN,EAA8BkvC,EAA9BlvC,kBAAmBlR,EAAWogD,EAAXpgD,QAE3D,IAAKwR,GAAsBxR,IAAYkR,EACrC,OAAO,KAGT,GAAIu8B,EAAYl5E,2BAA6B28C,EAAkB38C,yBAC7D,OAAO,KAGT,IAAMlmB,EAASo/F,EAAYj4F,YAG3B,OAFwB,IAAA8uG,wBAAuB7W,EAAap/F,GAAQ,GAG3D,KAIP,+BAAKqxF,UAAU,yBACb,mCAAW/nC,SAAS,YAK1Bq1V,EAAyBh2P,UAAY,CACnCvpD,YAAa,UAAU/+C,MAAV,oBACbsR,QAAS,UAAUk3F,M,WAaN,IAAAt2C,UAVS,SAACxzG,GAAU,MACeA,EAAM0zG,UAEtD,MAAO,CACL5vC,kBAJ+B,EAC1BA,kBAILM,mBAL+B,EACPA,mBAKxBymJ,YAJoB7qN,EAAMouB,wBAArBy8L,eAQM,CAAyB+0L,I,sKClDxC,O,OACA,O,IACA,OAEA,SAIA,Q,IACA,SACA,QACA,QACA,QACA,QACA,QACA,S,mDAEO,IAAMC,EAAiCA,EAAjCA,+BAAiC,SAAC51Y,EAAW43F,EAAYhwE,EAAgBE,EAAkB4yC,EAAgBnkD,GACtH,IAAIiwO,EAAqB,GA0CzB,OAzCI,IAAA9uI,uBAAsB9f,EAAYhwE,GACpCrR,EAAO1a,SAAQ,SAACsb,EAAO1M,GACrBmtF,EAAW/7F,SAAQ,SAAAg8F,GACjB,IAAMy2N,EAAoBxmS,EAAiBve,MAAK,SAAAupL,GAC9C,OAAOA,EAAaj6E,eAAiBhhB,EAAWpyF,IAAMqtL,EAAaroL,aAAeA,IAC7E,IAAA+sG,wBAAuBs7E,MAE1Bw7H,GAAqBA,EAAkB//S,sBACzCpc,OAAOmc,KAAKggT,EAAkB//S,sBAAsB1S,SAAQ,SAAA5G,GACtDq5T,EAAkB//S,qBAAqBtZ,GAAKkzB,aACzCmmS,EAAkB//S,qBAAqBtZ,GAAKkzB,YAAY8vE,WAAa,EAAAkhB,mBAAmBuG,QAC7F8mI,EAAmBh0P,KAAK,CACtBiT,GAAIgF,EAAa6jT,EAAkB//S,qBAAqBtZ,GAAKkzB,YAAY1iB,KAG7E,IAAI0jV,EAAmBnpV,EAAUyE,QAAO,SAAAZ,GACtC,OAAOA,EAASC,aAAgBD,EAASoC,eAAiBwE,IAClDxV,IAAQ4O,EAASokB,iBACjBu+N,EAAmB5uP,SAASiM,EAAS4B,OAE3C0jV,EAAiBj3V,SACnBs0P,0BAAyBA,IAAzB,aAAgD2iG,WAKxDnpV,EAAUnE,SAAQ,SAAAgI,GACX2iP,EAAmB9oP,MAAK,SAAA0L,GAAA,OAASA,EAAM3D,KAAO5B,EAAS4B,QAC1D+gP,0BAAyBA,GAAzB,CAA6C3iP,WAKnD2iP,EAAqBxmP,EAEvB,qBACEwmP,EAAqBA,EAAmB/hP,QAAO,SAAA2E,GAAA,OAASA,EAAM1E,UAAY,EAAAC,mBAAmBC,QACpF81D,IAAmB,EAAA1nD,OAAOE,OACnCszO,GAAqB,IAAAvvJ,0BAAyBuvJ,IAGzCA,GAqGHz4D,EAAqB,CACzB65G,sDACAE,kEACAE,qE,WAGa,IAAAz+L,UAzBS,SAACxzG,GAAU,MACgBA,EAAMo5B,wBAAhD04Q,EAD0B,EAC1BA,uBAAwBI,EADE,EACFA,eACxBjoS,EAAajK,EAAM8J,UAAnBG,UACA06D,EAAkB3kE,EAAM0zG,UAAxB/uC,eAH0B,EAIsB3kE,EAAMqY,YAG7D,MAAO,CACLpO,YACA6nS,yBACAI,iBACAvtO,iBACAk9B,WAZ+B,EAI1BA,WASLhwE,eAb+B,EAIdA,eAUjBE,iBAd+B,EAIEA,iBAWjCvR,OAVexgB,EAAM4U,YAAhB4L,UAoB+Bw3K,EAAzB,EAxGgB,SAAChlF,GAAU,IAEjC6+L,EACmE7+L,EADnE6+L,0BAA2B5nS,EACwC+oG,EADxC/oG,UAAW8nS,EAC6B/+L,EAD7B++L,gCAAiCE,EACJj/L,EADIi/L,iCAC5EttO,EAAwEquC,EAAxEruC,eAAgBk9B,EAAwDmR,EAAxDnR,WAAYhwE,EAA4CmhF,EAA5CnhF,eAAgBE,EAA4BihF,EAA5BjhF,iBAAkBvR,EAAUwyF,EAAVxyF,OAE1DiwO,EAAqBovJ,EAA+B51Y,EAAW43F,EAAYhwE,EAC7EE,EAAkB4yC,EAAgBnkD,IAEtC,IAAA6oG,YAAU,WAGR,OAFAy2R,IAEO,WACL/tG,EAAgC,IAChCE,EAAiC,IACjCJ,EAA0B,MAG3B,IAEH,IAAM,EAiBA,EASA,EAWA,EArCAkuG,GAAA,gCAAmB,sGACnB/tG,EAAgB,GADG,0KAEXoyC,EAFW,KAEGviQ,EAFH,OAIjBuiQ,GAAgB,GAJC,gCAKb,IAAItmV,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAL9B,OAMnBi0S,EAAcv1S,KAAKolF,EAAQnyE,IAC3BqiS,YAAoCC,IAPjB,sBASnB57M,YAAW,WACT47M,EAAcv1S,KAAKolF,EAAQnyE,IAC3BqiS,YAAoCC,MACnC,KAAOoyC,EAAe,IAZN,mDAEe3zF,EAAmB6nG,UAFlC,kbAAnB,4CAiBApmD,GAAA,gCAAiB,oGACf,IAAIp0S,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAD5B,cAErBk0S,EAAiC,CAAC,QAFb,SAGf,IAAIn0S,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAH5B,cAIrBk0S,EAAiC,CAAC,MAAO,UAJpB,SAKf,IAAIn0S,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,SAL5B,OAMrBk0S,EAAiC,CAAC,MAAO,QAAS,aAN7B,kDAAjB,4CASA6tG,GAAA,gCAAgB,oGACd,IAAIhiZ,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAD7B,uBAEdgiZ,IAFc,uBAGd,IAAIjiZ,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,SAH7B,cAIpB8zS,EAA0B,GAJN,SAKd,IAAI/zS,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAL7B,cAMpB8zS,EAA0B,GANN,UAOdK,IAPc,yBAQd8tG,IARc,mDAAhB,4CAWAA,GAAA,gCAAiB,2FACf7sM,EAAiBryM,SAASg9F,cAAc,0BAE5C+zM,EAA0B,IAC1B,aAAE1+F,GAAgBI,QAAQ,KAAK,WAC7B1zM,OAAOwpJ,aAAaxpJ,OAAOu/Y,sBAC3Bv/Y,OAAOu/Y,qBAAuBhpT,YAAW,WACvCy7M,EAA0B,IAC1B,aAAE1+F,GAAgBC,OAAO,OACxB,SAGLy+F,EAA0B,GAZP,kDAAjB,4CAgBN,OACE,wCACG,CAAC,EAAE,EAAE,GAAGriS,KAAI,SAAAiJ,GAAA,OAAa,mCAAuBA,UAAWA,EAAWvZ,IAAKuZ,Y,8ECzIlF,I,EAAA,O,oCAEA,IAAMwnY,EAAc,kBAClB,gCAAM3tT,UAAU,QACd,gCAAMA,UAAU,+BAChB,gCAAMA,UAAU,+BAChB,gCAAMA,UAAU,iCAIpB2tT,EAAYhoY,YAAc,c,UAEXgoY,G,8ECZf,I,IAAA,M,IACA,MACA,OACA,OACA,QAEA,QACA,QACA,Q,OACA,QACA,Q,IACA,SACA,Q,mDAEA,IAAMC,EAAoC,SAACltS,GAAU,IAE5C3S,EAC0B2S,EAD1B3S,YAAa38B,EACasvC,EADbtvC,qBAAsBy0H,EACTnlF,EADSmlF,QAASt3B,EAClB7tD,EADkB6tD,SAAUr5F,EAC5BwrC,EAD4BxrC,mBAAoBi2C,EAChDzK,EADgDyK,SAC/E2tB,EAA+Bp4B,EAA/Bo4B,4BAEF,IAAKy1B,GAAYr5F,EAAmBvvC,QAClC,OAAO,KAGT,IAAKwlF,EAAU,CAEb,IAD+B,IAAArd,2BAA0BC,GAEvD,OAAO,KAGT,IAAMp/F,EAASo/F,EAAYj4F,YAG3B,IAFwB,IAAA8uG,wBAAuB7W,EAAap/F,GAAQ,GAGlE,OAAO,KAkBX,OACE,+BAAKujL,QAfiB,SAACl8E,GACvBA,EAAM7V,iBACN6V,EAAM9V,kBACN,UAAU3pD,eAAe,EAAAwB,6BAA6BkE,+BAElDkvE,EACF2tB,GAA4B,IAI9B1nE,EAAqB28B,GACrB83F,EAAQ17L,MAAK,IAAA2/F,eAAciE,GAAa,MAIT/N,UAAU,8BACvC,0CAKN4tT,EAAkCt2P,UAAY,CAC5CvpD,YAAa,UAAU/+C,MAAV,oBAAkCq/D,WAC/CkgD,SAAU,UAAU/W,KACpBrsC,SAAU,UAAUqsC,MAGtB,IAUMkuC,EAAqB,CACzBt0H,4CACA0nE,2D,WAGa,IAAA6sD,aACb,IAAAxoC,aACE,IAAAj8C,UAjBoB,SAACxzG,GAIvB,MAAO,CACL6qN,YAJoB7qN,EAAMouB,wBAArBy8L,YAKLrjJ,mBAJ2BxnE,EAAM0zG,UAA5BlsC,sBAeoBwwH,EAAzB,CAA6CkoN,M,+HCjFjD,O,OACA,O,IACA,MACA,OAEA,Q,uDAEMC,G,oNAMK,WACHC,EAAc14Y,KAAKsrG,MAAMx5F,mBAC7B,OACE,kCAAQ84E,UAAW,+CAAiD5qF,KAAKsrG,MAAMk1M,eAAiBxgT,KAAKsrG,MAAMr+E,qBAAuByrX,EAAY34F,kBAAqB3mT,SAASC,SAAS2b,WAAa0jY,EAAY14F,mBAAsB,sCAAwC,IACpQljI,QAAS,kBAAM,EAAKxxE,MAAM19E,kBAAkB,EAAK09E,MAAMz9E,cAC7D,gCAAM+8D,UAAU,0BAAyB,4CAAkB5iF,GAAI,qC,kBAT9Dk6I,UAAY,CACjBs+J,cAAe,UAAUp+J,M,cAsBd,IAAAt2C,UARS,SAACxzG,GACvB,MAAO,CACL20B,kBAAmB30B,EAAM8J,UAAU6qB,kBACnCY,WAAYv1B,EAAMkP,UAAUqmB,WAC5B/b,mBAAoBxZ,EAAMqN,gBAAgB+B,YAIN,CACtCkmB,qCADa,CAEZ6qX,I,8EClCH,I,EAAA,O,oCACA,OACA,OACA,SAEA,IAkCMnoN,EAAqB,CACzB9f,oEACAF,iD,WAGa,IAAAxkE,UAbS,SAACxzG,GAAU,IAC1Bm4K,EAA8Bn4K,EAAM8J,UAApCquK,2BACP,MAAO,CACL33J,OAAQxgB,EAAM4U,YAAY4L,OAC1B23J,gCASoC6f,EAAzB,EAvCkB,SAAChlF,GAAU,IAEnCxyF,EAAgGwyF,EAAhGxyF,OAAQ23J,EAAwFnlE,EAAxFmlE,2BAA4BD,EAA4DllE,EAA5DklE,iCAAkCF,EAA0BhlE,EAA1BglE,uBAE7E,GAAIx3J,EAAOrkB,QAAU,EACnB,OAAO,KAQT,OACE,+BAAKm2F,UAAU,kBACb,gCAAMA,UAAU,kBAAiB,4CAAkB5iF,GAAG,wBACtD,kCAAQ4iF,UAAW,4BAA8B6lF,EAA6B,qBAAuB,IAC7FqM,QATc,WACxBxM,GAAuB,GACvBE,GAAkCC,KAQ9B,gCAAM7lF,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,2B,8ECzB/E,I,IAAA,MACA,OACA,O,IAEA,OACA,QACA,UACA,S,mDAEA,IAmCMsoL,EAAqB,CACzBliK,wCACAi+W,sDACA77N,oEACAF,iD,WAGa,IAAAxkE,UAdS,SAACxzG,GAEvB,MAAO,CACLivN,oBAF4BjvN,EAAMgvN,qBAA7BC,uBAa+Bj3B,EAAzB,EA1CiB,SAAChlF,GAAU,IAElCi8G,EAA8Fj8G,EAA9Fi8G,oBAAqBn5L,EAAyEk9E,EAAzEl9E,mBAAoBi+W,EAAqD/gS,EAArD+gS,0BAA2B/7N,EAA0BhlE,EAA1BglE,uBAE3E,IAAKl3K,SAASC,SAAS2b,UACrB,OAAO,KAUT,OACE,+BAAK41E,UAAU,kBACb,gCAAMA,UAAU,kBAAiB,4CAAkB5iF,GAAG,sCACtD,kCAAQ4iF,UAAW,4BAA8B28H,EAAsB,qBAAuB,IACtFzqC,QAXc,WACxB,UAAU37I,eAAV,2BAAoDomL,EAA6B,MAAP,OAC1En5L,IACAkiJ,GAAuB,GACvB+7N,GAA2B9kL,KAQvB,gCAAM38H,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,2B,8EC/B/E,I,IAAA,MACA,OACA,OAEA,S,IACA,O,IACA,O,mDAEA,IA+BMsoL,EAAqB,CAEzBu7B,kDACA5d,yD,WAGa,IAAAniG,UAZS,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAUc2qL,EAAzB,EArCU,SAAChlF,GAAU,IAG3B2iG,EAAuE3iG,EAAvE2iG,2BAA4B91L,EAA2CmzF,EAA3CnzF,eAAgB0zM,EAA2BvgH,EAA3BugH,wBAGnD,KAD6B,UAAOhrN,aAAgBsX,EAAeG,eAAiBlf,SAASC,SAASiwU,qBAEpG,OAAO,KAWT,OACE,kCAAQ1+O,UAAU,2CAA2CkyF,QATjC,WAC5B,UAAU37I,eAAe,8BAGzB0qL,GAAwB,GACxB5d,GAA2B,KAKzB,gCAAMrjH,UAAU,0BAAyB,4CAAkB5iF,GAAG,6B,0HC5BpE,O,OACA,OAEA,S,IACA,S,IACA,S,IACA,Q,uDAEM2wY,E,gNAGF,IAAM7mY,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAC/C01I,EAAgBA,EAAhBA,2DACA6iK,EAAajgT,KAAKsrG,MAAMnzF,eAAeulI,QAAU,GAAK,CAC1DxT,SAAU,QACVvqI,MAAO,QAEHugT,EAAuB9mT,SAASC,SAAS8mT,oBAAqD,IAA/BngT,KAAKsrG,MAAM+4H,gBAChF,OACE,+BAAKz5I,UAAU,mBACb,+BAAKA,UAAU,yBACb,yCAED5qF,KAAKsrG,MAAMnzF,eAAe8gQ,SACzB,+BAAKruL,UAAU,yBACb,+BAAK7rF,IAAKiB,KAAKsrG,MAAMnzF,eAAeulI,SAAWN,EAAe/oI,MAAO4rS,EAAY/rG,IAAI,UAErF,KACHpiM,EAAmBk1H,cAAgBk5K,EAClC,+BAAKt1N,UAAU,yBACb,yCAED,MACD94E,EAAmBy3T,oBAAuBrpB,GACxC9mT,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,aAE5E,KADA,mCAAiB01E,UAAU,gC,2BAcxB,IAAAkhB,UAPS,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtB0+N,gBAAiB/rO,EAAM+sO,iBAAiBhB,mBAI7B,CAAyBs0K,I,0JCjDxC,MACA,O,IACA,OACA,OAEA,QAEA,Q,IAEA,O,IACA,O,uDAGMC,E,yOASJC,eAAiB,WACf,EAAK71L,e,EAGP81L,kBAAoB,SAACp8X,EAASk5P,GAC5B,UAAUz0O,eAAe,mBAAqBzkB,EAAQpW,QACtD,EAAKqwU,wBAAwBj6T,EAASk5P,I,EAGxCmjI,0BAA4B,SAACz8X,GAC3B,OAAOA,EAAWG,SACf3U,KAAI,SAAC4U,EAASmvU,GACb,IAAMtyV,EAASmjB,EAAQlB,KAAK9a,WAAagc,EAAQlB,KAAK9a,YACtD,OAAInH,GAA8B,UAApBA,EAAOsiB,UAAwBtiB,EAAOkjB,WAAW5e,OAAM,SAAAm7Y,GACnE,OAAO18X,EAAWG,SAASxc,MAAK,SAAAg5Y,GAAA,OAAgBA,EAAaz9X,KAAKlV,SAAW0yY,EAAax9X,KAAKlV,aAE3FulV,EACK,MAEPnvU,EAAQlB,KAAKg0S,cAAgB,QACtB9yS,GAGJA,KAER1V,QAAO,SAAA0V,GAAA,OAAWA,M,4GA/BrB,aAAEvkB,QAAQwqG,GAAG,UAAY8yB,iBAAkBz1H,KAAK64Y,kB,8CAGhD,aAAE1gZ,QAAQ8gO,IAAI,UAAYxjG,iBAAkBz1H,KAAK64Y,kB,+BA+B1C,WACD/oG,EAAW9vS,KAAKo3U,cACtB,OACE,+BAAKxsP,UAAU,YACZklN,EAAShoS,KAAI,SAACinL,EAASnhL,GACtB,OAAOmhL,EAAQ3uK,OAAS2uK,EAAQ3uK,MAAM3rB,OACpC,mCAASm2F,UAAU,UAAUpzF,IAAK,UAAUoW,GAC1C,8BAAIg9E,UAAU,MACZ,4CAAkB5iF,GAAG,mCAAmCmO,OAAQ,CAC9D+/B,MAAO64I,EAAQ74I,UAGnB,8BAAI00C,UAAU,gBACXmkG,EAAQ3uK,MAAMtY,KAAI,SAAC4U,EAAS9O,GAE3B,IAAM8gD,EAAQhyC,EAAQlB,KAAKmoE,eAAiB,EAAAsjC,SAASvqG,EAAQlB,KAAKlV,SAC7DoW,EAAQlB,KAAKupG,iBAAkB,IAAAF,wBAAuBnoG,EAAQlB,KAAKK,UAClE8uT,GAAY,EAAA1jN,SAASvqG,EAAQlB,KAAKlV,SAAWoW,EAAQlB,KAAKupG,eAC1D1wG,EAAQ,CACZy3E,gBAAiBp9B,EAAQA,OAAOA,EAAf,IAA0B,QAM7C,OAJIhyC,EAAQlB,KAAKmoE,gBACftvE,EAAMoqG,eAAiB,WAIvB,8BAAI7zB,UAAW,sBAAwB+/O,EAAW,8BAAgC,IAAKt2T,MAAOA,EAAO7c,IAAKklB,EAAQ4F,KAAK1U,EACnHkvK,QAAS,kBAAM,EAAKg8N,kBAAkBp8X,EAAQlB,KAAMuzK,EAAQ74I,SAC9D,+BAAK00C,UAAU,2BACXluE,EAAQlB,KAAK2K,eAAiBzJ,EAAQlB,KAAK2K,cAAcxiB,UAAUkrN,iBAAoBnyM,EAAQlB,KAAKg0S,eAAiB9yS,EAAQ4F,YAOzI,a,KA3Ed,S,oBAwFe,IAAAwpF,UANS,SAACxzG,GACvB,MAAO,CACLmrB,YAAanrB,EAAMgrN,WAAW7/L,eAIM,CACtC+C,4DACA1C,8CACAqJ,kCACAvH,oEACAgN,2CALa,CAMZgmX,I,oJCzGH,O,WACA,MACA,OACA,OACA,QAEA,Q,IAWA,Q,IACA,S,IACA,OACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,Q,IAMA,S,IACA,SACA,QACA,QACA,QAEA,QACA,SACA,QACA,Q,uDAEMM,G,6OAgFJC,0BAA4B,WAC1B,IAAMhzX,EAAgB,EAAKmlF,MAAM7mF,qBAQjC,GAAI,EAAK6mF,MAAM6lE,oBACb,OAAO,EAAK7lE,MAAM6lE,oBAAoBhoK,SACjC,GAAI,EAAKmiG,MAAM44R,0BACpB,OAAO,EAAK54R,MAAM44R,0BAA0B/6X,SAG9C,IAAMyT,EAAeuJ,EAAczlB,YAE7Bo4U,EAAgB3yT,EAAc2yT,cAAgB3yT,EAAc2yT,aAAa,EAAKxtO,MAAMr+F,mBACpF2P,EAAak8T,cAAgBl8T,EAAak8T,aAAa,EAAKxtO,MAAMr+F,kBACxE,GAAI6rU,EACF,OAAOA,EAGT,IAAMsgE,GAA6B,IAAAr3R,iCAAgC57F,EAAevJ,GAElF,GAAIw8X,GAA8D,IAA/BA,EACjC,OAAOA,EAIT,MADiC,CAAC,oBAAqB,oBAAqB,aAAc,aAAc,4BAC3Ej/Y,SAASgsB,EAAc7f,QAC3C,EAGF,G,EAGT+yY,yBAA2B,SAAClwY,GACtBA,GAAY,EAAKmiG,MAAM/lF,0BACzB,EAAK+lF,MAAMhmF,gCAA+B,GAE5C,EAAKgmF,MAAMnmF,4BAA4Bhc,I,EAGzCm0U,sBAAwB,WACtB,UAAUn8S,eAAe,eACzB,EAAKmqE,MAAMn+E,gBAAgB,EAAKm+E,MAAM7mF,sBACtC,EAAK6mF,MAAM+Y,mBAAmB,EAAK/Y,MAAM6lE,qBAAuB,CAAC9qK,YAAa,EAAKilG,MAAM7mF,uBAEzF,EAAK6mF,MAAM2X,qBAAoB,I,EAMjCq2R,4BAA8B,WAC5B,UAAUn4W,eAAe,eACzB,EAAKmqE,MAAMn+E,gBAAgB,EAAKm+E,MAAM7mF,sBACtC,EAAK6mF,MAAM+Y,mBAAmB,EAAK/Y,MAAM6lE,qBAAuB,CAAC9qK,YAAa,EAAKilG,MAAM7mF,uBAEzF,EAAK6mF,MAAM2X,qBAAoB,GAC/B,EAAK3X,MAAM4X,sBAAsB,EAAAtlE,WAAWE,W,EAM9Cy7V,kBAAoB,WAClB,IAAMxnL,EAAiB,EAAKzmH,MAAMmyE,WAAWviK,OAAOi1F,oBACpD,OAAO,EAAK7E,MAAM5lF,4BAA4B5d,KAAI,SAACgiS,EAAmB0vG,GACpE,IAAMrzX,EAAgB4rM,EAAejmN,MAAK,SAAAzI,GAAA,OAAWA,EAAQiD,SAAWwjS,EAAkBxjS,UAC1F,OACE,+BAAKskF,UAAU,iBAAiBpzF,IAAK,oBAAoBgiZ,GACvD,+BAAK5uT,UAAU,4BAA4Bv2E,MAAO,CAACy3E,gBAAiBA,OAAOg+M,EAAkBrxL,UAA1C,OACnD,+BAAK7tB,UAAU,yBACb,6BAAGA,UAAW,6BAA8B0hL,wBAAyB,CAACC,OAAQpmP,EAAchH,eAC5F,mCAAU7b,KAAK,SACLwiU,SAAS,EACT3iD,YAAa,SAACh6Q,GACZ,IAAMuc,EAA8B,EAAK4lF,MAAM5lF,4BAA4B5d,KAAI,SAAA2xY,GAI7E,OAHIA,EAAUnzY,SAAWwjS,EAAkBxjS,SACzCmzY,EAAUtwY,SAAWA,GAEhBswY,KAET,EAAKnuS,MAAM7lF,kCAAkCC,IAE/CxuB,MAAO4yS,EAAkB3gS,iB,2GA9JzB,WACZ+R,GAAS,IAAAC,oBACTgL,EAAgBnmB,KAAKsrG,MAAM7mF,qBAC7BzkB,KAAKsrG,MAAMnzF,eAAezQ,SAASgyY,yBACrC15Y,KAAKsrG,MAAMh+E,oBAAoBnH,GAGjC,IAAMwzX,EAAgBxzX,EAAczlB,YAQpC,IAPiD,UAA3Bi5Y,EAAc99X,UAAiD,iBAAzB89X,EAAcrzY,QAC1C,WAA3BqzY,EAAc99X,UACc,YAA3B89X,EAAc99X,WACoB,aAArCziB,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,iBACxC,WAA3Bk+Y,EAAc99X,YAGEX,EAAOc,aAC1Bhc,KAAKsrG,MAAMsuS,4BAA4B,OAClC,OACgC55Y,KAAKsrG,MAAnCnR,EADF,EACEA,WAAYhwE,EADd,EACcA,eACf1N,EAAW,GACf,GAAIvB,EAAOc,cAAgBhc,KAAKsrG,MAAMvtF,oBAAqB,IAAAk8F,uBAAsB9f,EAAYhwE,GAAiB,CAC5G,IAAMpM,EAAmB7C,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAAS,EAAK60G,MAAMvtF,oBAC/FtB,EAAWsB,EAAmBA,EAAiBtB,SAAWzc,KAAKsrG,MAAMmyE,WAAWhhK,UAAS,QAEzFA,EAAWzc,KAAKsrG,MAAMmyE,WAAWhhK,UAAS,GAG5C,IAAMo9X,EAAiCp9X,EAASE,WAAU,SAACD,GACzD,OAAOA,EAAQlB,KAAKlV,SAAWqzY,EAAcrzY,UAG/CtG,KAAKsrG,MAAMsuS,4BAA4BC,GAOzC,GAJI75Y,KAAKsrG,MAAMlmF,uBAAyB,GACtCplB,KAAKsrG,MAAMnmF,4BAA4BnlB,KAAKm5Y,8BAGJ,YAArC//Y,SAASC,SAASoC,gBAAqE,OAArCrC,SAASC,SAASoC,iBAC3C,gBAAzB0qB,EAAc7f,QAA4B6f,EAAcrT,SAAd,OAAkC,CAC/E,IACM4S,EADiB1lB,KAAKsrG,MAAMmyE,WAAWviK,OAAOi1F,oBAEjDnpG,QAAO,SAAA3D,GAAA,OAAWA,EAAQiD,OAAOnM,SAAS,yBAC1C2N,KAAI,SAAAzE,GACH,IAAMy2Y,EAAc,EAAKxuS,MAAM/oG,UAAUuJ,MAAK,SAAA1F,GAAA,OAAYA,EAASE,SAAWjD,EAAQiD,UACtF,uBACKjD,EADL,CAEE8F,SAAU2wY,EAAcA,EAAY3wY,SAAW9F,EAAQ8F,cAK7DnJ,KAAKsrG,MAAM7lF,kCAAkCC,GAG3C1lB,KAAKsrG,MAAM0xC,sBAAwBh9I,KAAKsrG,MAAM0xC,qBAAqBgqG,aACrEhnP,KAAKsrG,MAAMyxC,2BAA2B,CACpCiqG,aAAa,M,6CAMjBhnP,KAAKsrG,MAAM9mF,2BAA2B,MACtCxkB,KAAKsrG,MAAM7lF,kCAAkC,IAC7CzlB,KAAKsrG,MAAMnmF,4BAA4B,K,+BAoGhC,WACDgB,EAAgBnmB,KAAKsrG,MAAM7mF,qBAD1B,EAEkDzkB,KAAKsrG,MAAvD+iD,EAFA,EAEAA,yBAA0Bl2I,EAF1B,EAE0BA,eAAgBsC,EAF1C,EAE0CA,KAC3C3I,EAAqBqG,EAAezQ,SAEpCyW,EAAkBgI,EAAcw5I,4BAChCo6O,EAAoBnyY,MAAMC,QAAQsW,IAAoBA,EAAgB1pB,OAEtEk3Q,GAAkB,IAAAj3P,oBAAmByR,GACrCimH,EAAYt6H,EAAmBk1H,cAAgB7uH,EAAe8uH,4BAA8B0kI,IAAoBxzP,EAAe+uH,mBAE/HzmI,EAAWT,KAAKsrG,MAAM3qF,YAAc,IAEpCq5X,GAA2D,YAArC5gZ,SAASC,SAASoC,gBAAqE,OAArCrC,SAASC,SAASoC,iBAClE,gBAAzB0qB,EAAc7f,QAA4B6f,EAAcrT,SAAd,OAEzCmnY,EAAwBA,GAAxBA,0CAA8C,OAAQ,eAAgB,uBACtEt/X,GAAO,IAAAH,gBAAe2L,EAAe1L,EAAMtC,EAAgBnY,KAAKsrG,MAAMlmF,uBACtE80X,EAAiBv/X,EAAKre,cACtBqpU,EAAiB7zT,EAAmBlF,cAAgB,EAAAyjC,cAAcC,SACtE2pW,EAAsB9/Y,SAASgsB,EAAc7f,SAAW,CAAC,KAAM,KAAM,MAAMrG,MAAK,SAAAk6Y,GAAA,OAAMA,IAAOD,MAEzFtmI,EAAWztP,EAAczlB,UAAYylB,EAAczlB,YAAYkzQ,SAAW,KAEhF,OACE,+BAAKhpL,UAAU,wBACb,+BAAKA,UAAU,mCACb,+BAAKA,UAAW,WAAamvT,EAAoB,uBAAyB,KACxE,+BAAKnvT,UAAU,gBACb,mCAAiBzkE,cAAeA,EACfimH,UAAWA,EACX3rI,SAAUA,EACVkrQ,gBAAiBA,EACjB75P,mBAAoBA,KAEvC,+BAAK84E,UAAU,mBACb,8BAAIA,UAAU,0BACZ,4CAAkB5iF,GAAG,mCAErBvH,EAAqC,KAA1B,wCACb,wCACA,+BAAKmqF,UAAW,mBAAqByjE,EAA2B,6BAAgC,KAC9F,+BAAKzjE,UAAU,kBACZwhD,EAAY,mCAAkBkvM,kBAAkB,IAAW,KAC3Dn1T,EAAcxiB,UAAUipS,aAAe,KACtCotG,EACIh6Y,KAAKu5Y,oBAEL,+BAAK3uT,UAAU,4BACb,4CAAkB5iF,GAAG,qCACHmO,OAAQ,CAACwE,QACTy/X,eAAe,0BAC9B,SAACz5W,GAAD,OACC,mCAAUmlS,SAAS,EACTH,cAAeA,EACfriU,KAAM7C,EAAU,MAAQ,SACxBkgC,MAAOizO,IAAY,IAAA+/C,WAAUl5S,EAAKvC,QAAU07P,EAAWjzO,EACvDpb,yBAA0B,EAAK+lF,MAAM/lF,yBACrC49P,YAAa,EAAKk2H,yBAClBniZ,MAAO,EAAKo0G,MAAMlmF,8BAOzC,IAAApI,6BAA4BmJ,EAAerU,GAC1C,+BAAK84E,UAAU,kBACb,kCAAQA,UAAU,mDACVkyF,QAAS98K,KAAKs9U,uBACpB,4CAAkBt1U,GAAG,yCAGvB,MACH,IAAAwV,oCAAmC2I,EAAerU,GACjD,+BAAK84E,UAAU,kBACb,kCAAQA,UAAU,mDACVkyF,QAAS98K,KAAKs5Y,6BACpB,4CAAkBtxY,GAAG,gDAGvB,KACHvH,EAAW,+BAAKmqF,UAAU,kBAAiB,yCAAgC,MAE7EnqF,EAAW,KAAO,0CAGtBA,EAAW,wCAA6B,KACxCA,EAAW,wCAA4B,KACvCs5Y,EAAoB,mCAAuBx9D,mBAAoBv8U,KAAKsrG,MAAMixO,qBAAwB,MAErG,6C,kBAvQCr6L,UAAY,CACjBvgE,SAAU,UAAUtrE,MAAM4iG,WAC1BsjO,mBAAoB,UAAUx9J,KAAK9lE,WACnC2gS,4BAA6B,UAAU76N,KAAK9lE,WAC5CwkE,WAAY,UAAU9lL,Q,GAqSpB24L,EAAqB,CACzBtnK,kCACA7D,0DACAX,wDACAiB,sEACAsE,8BACAoD,kCACAG,0CACAsF,0CACAtN,gEACAy3H,wDAEA14B,wCACApB,0CACAC,+C,WAGa,IAAAqtE,aACb,IAAAxoC,aACE,IAAAj8C,UA/CoB,SAACxzG,GAAU,MAEqCA,EAAMytB,eADrEX,EAD0B,EAC1BA,sBAAuBG,EADG,EACHA,yBAA0BG,EADvB,EACuBA,4BAA6BzH,EADpD,EACoDA,eACnFwG,EAF+B,EAE/BA,qBAAsB4pI,EAFS,EAETA,yBAA0B29G,EAFjB,EAEiBA,iBAFjB,EAGQ1zQ,EAAM8J,UAAxCG,EAH0B,EAG1BA,UAAW4uK,EAHe,EAGfA,oBAHe,EAII74K,EAAMqY,YAApCwpF,EAJ0B,EAI1BA,WAAYhwE,EAJc,EAIdA,eACnB,MAAO,CACL1F,uBACAxG,iBACAmH,wBACAG,2BACAG,8BACA2oI,2BACA1tI,YAAaroB,EAAMgR,YAAYqX,YAC/Bpe,YACAynB,eAAgB1xB,EAAMwc,UAAUkV,eAChCqwX,gBAAiB/hZ,EAAMwc,UAAUkV,gBAAkB1xB,EAAMwc,UAAUM,uBACnE+C,eAAgB7f,EAAMqN,gBACtBoY,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChC9Q,iBAAkB3U,EAAM4U,YAAYD,iBACpCi3X,0BAA2B5rY,EAAMgvN,qBAAqB48K,0BACtDlnP,qBAAsB1kJ,EAAMu1I,gBAAgBmP,qBAC5Cm0B,sBACA66F,mBACA7xK,aACAhwE,oBAuByBmmK,EAAzB,CAA6C4oN,M,8EC1WjD,I,IAAA,MACA,O,IACA,MAEA,Q,mDAEA,IAAMoB,EAAmB,SAAChvS,GAAU,IAE3B7mF,EAA+C6mF,EAA/C7mF,qBAAsBzO,EAAyBs1F,EAAzBt1F,aAEvBoI,EAFgDktF,EAAXjoG,SAETohB,EAE5BgxT,EAAmBz/T,EAAalK,MAAK,SAAAmK,GAAA,MAAwB,UAAfA,EAAMxf,QAC1D,IAAKg/U,EACH,OAAO,KAGT,IAAM8kE,GAAqB,IAAAn4T,sBAAqBhkE,EAAgBq3T,GAChE,IAAK8kE,EACH,OAAO,KAGT,IAAMC,EAAmB/kE,EAAiBt/T,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAOuyY,EAAmB,MAC3F,IAAKC,IAAqBA,EAAiBj+S,KACzC,OAAO,KAGT,IAAMniB,EAAS,CACb0R,wBAAwB,IAAArB,mBAAkB+vT,EAAiBj+S,MAA3D,KAGF,OACE,+BAAK3R,UAAU,sBAAsBv2E,MAAO+lE,KAIhDkgU,EAAiBp4P,UAAY,CAC3B7+I,QAAS,UAAU1L,Q,WAcN,IAAAm0G,UAXS,SAACxzG,GACvB,MAAO,CACLmsB,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CzO,aAAc1d,EAAMyc,YAAYiB,gBAIT,GAIZ,CAA6CskY,I,iKCnD5D,O,WACA,MACA,O,IACA,O,IACA,Q,IACA,OAEA,QAMA,Q,IAGA,O,IACA,Q,IACA,Q,IACA,QACA,QACA,QACA,QACA,Q,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,SACA,QACA,SACA,QACA,QACA,QACA,S,uDAEMG,G,gBAcJ,WAAYnvS,IAAO,gGACXA,IADW,iBAEjB,EAAKvkG,MAAQ,CACXoyM,mBAAkB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACxD2+F,kBAAmB,GACnB26E,YAAY,EACZ+nB,kBAAmB,IAErBviZ,OAAOwiZ,oBAAsBxiZ,OAAOwiZ,qBAAuB,EAC3DxiZ,OAAOq+S,eAAiBr+S,OAAOq+S,gBAAkB,EAThC,E,oFAYC,WAClBx2S,KAAK46Y,gBAAgB56Y,KAAKsrG,QAC1B,aAAElyG,UAAUupG,GAAG,UAAY+yB,mBAAmB,WACxC,EAAKpqB,MAAMy0E,gBAAkB,EAAKz0E,MAAMy0E,cAAcv5F,qBAAuB,EAAK8kB,MAAMy0E,cAAc55J,gBACxG,EAAKo2T,mBAAmB,CACtB/gU,KAAM,EAAK8vF,MAAMy0E,cAAcv5F,qBAAuB,EAAK8kB,MAAMy0E,cAAc55J,gBAGnF,EAAK68L,aAAY,aACV,EAAK13G,MAAMuvS,gBAAkB,EAAKvvS,MAAMuvS,eAAiB,MAC5D,aAAE1iZ,QAAQ+pG,QAAQ,gBAKpBliG,KAAKsrG,MAAMy0E,eAAiB//K,KAAKsrG,MAAMy0E,cAAc55J,gBACvDnmB,KAAKsrG,MAAMplF,iBAAiBlmB,KAAKsrG,MAAMy0E,cAAc55J,eACrDnmB,KAAK86Y,6BAA6B96Y,KAAKsrG,U,8CAKzC,aAAElyG,UAAU6/N,IAAI,UAAYvjG,qB,gDAGJkpD,IACnBA,EAAUmB,eAAiB//K,KAAKsrG,MAAMy0E,eAAkBnB,EAAUmB,cAAclkK,WAAa7b,KAAKsrG,MAAMy0E,cAAclkK,UACrH+iK,EAAUmB,eAAkBnB,EAAUmB,cAAclkK,WAAa7b,KAAK+G,MAAM2zY,mBAAuB97N,EAAUj9F,WAAa3hF,KAAKsrG,MAAM3pB,YACzI3hF,KAAK46Y,gBAAgBh8N,GACrB5+K,KAAK86Y,6BAA6Bl8N,IAEhC5+K,KAAKk5S,cAAgBt6H,EAAUj9F,SAASltF,SAAWuL,KAAKsrG,MAAM3pB,SAASltF,QACzEuL,KAAK46Y,gBAAgBh8N,GAGvB,IAAIm8N,GAAwB,EAC5B,GAAIn8N,EAAUp7C,aAAa/uI,OAAQ,CACjC,IAAMumZ,EAAmBp8N,EAAUp7C,aAAa13H,MAAK,SAAAm4H,GACnD,OAAOA,EAAUhvE,mBAAqB2pH,EAAUmB,cAAcnkK,QAAUqoH,EAAUhvE,mBAAqB2pH,EAAUmB,cAAclkK,YAE7Hm/X,GAAoBA,EAAiBhlY,aAAavhB,SACpDsmZ,GAAwB,GAI5B,GAAIn8N,EAAUtgK,gBAAgB7pB,SAAWsmZ,GAAyBn8N,EAAUmB,cAAe,CACzF,IAAM22H,GAAc,IAAA52H,8CAA6ClB,EAAUtgK,gBAAiBsgK,EAAUmB,eAClG22H,GACF12S,KAAKwgL,kCAAkC5B,EAAUmB,cAAe22H,EAAYz2H,8BAA+B,M,uCAsKhGrB,GAAW,WAEpBk4H,EAAyB92S,KAAKo3S,mBAAmBx4H,GACjDj9F,EAAWi9F,EAAUj9F,SAAS36E,QAAO,SAAA3D,GAAA,OAAWA,KAClD0zS,EAA4B/2S,KAAK62S,uBACnC,CAACr7R,KAAMojK,EAAUmB,eAAgBp+F,EAAUm1N,GAEzCmkG,EAAkB,GAIhBnpY,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,UACjDk3K,EAAUj9F,SAASltF,SAAWqd,EAAmBy3T,oBAAwBnwU,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,cAAmB0pK,EAAUxpK,wBACpLwpK,EAAUj9F,SAASvjF,SAAQ,SAACiF,EAASuK,GAC/BvK,GAAWA,EAAQmY,QAAS,IAAA9G,oBAAmBrR,EAAQmY,MAAM,IAC/Dy/X,EAAgBlmZ,KAAK6Y,MAK3B,IAAM4pS,GAAiBV,GAAqD,IAA3BA,IAAiCA,GAA0B,EACtGS,EAAmBC,GACrB,cAAMV,GAAN,OAAiCmkG,GAAjC,aAAqDlkG,KADhC,UAEjBkkG,GAFiB,aAEGlkG,IAC5B/2S,KAAKs9K,SAAS,CACZo9N,kBAAmB97N,EAAUmB,cAAgBnB,EAAUmB,cAAclkK,SAAW,GAChFm8R,kBAAmBh4S,KAAK0nI,kBAAkB6vK,EAAkB34H,EAAW44H,GAAe,GACtFm7E,YAAY,IACX,WACD,GAAI,EAAKz5E,aAAc,CACrB,IAAMgiG,GAAY,aAAE,EAAKr/D,WAAW/vU,KAAK,2BACrC,EAAKw/F,MAAM3qF,aAAe,IAC5Bu6X,EAAUztT,WAAW,EAAKyrN,cAE1BgiG,EAAUj0O,UAAU,EAAKiyI,cAE3B,EAAKA,cAAe,Q,+BAsLjB,WAEDiiG,EAAoC,IADZn7Y,KAAKsrG,MAA5BhnF,oBAEP,OACE,wCACE,+BAAK07H,IAAK,SAACkkI,GACT,EAAK23D,UAAY33D,EACjB,EAAK54K,MAAM8vS,OAAOl3H,IAEft5L,UAAW,8BAAgC5qF,KAAKsrG,MAAMhnF,qBACnDtkB,KAAKsrG,MAAMs0H,eAAiB,iCAAmC,KAC/Du7K,EAAY,qBAAuB,0BACxCn7Y,KAAKsrG,MAAM+vS,gBAAkBr7Y,KAAK+G,MAAM4rX,WACrC3yX,KAAKm7S,WAAWggG,GAChB,yCAGLn7Y,KAAK+G,MAAMgyS,0BAA4B/4S,KAAKw4S,qBAAuB,U,gBAzdnEt2J,UAAY,CACjBvgE,SAAU,UAAUtrE,MAAM4iG,WAC1B8jE,qBAAsB,UAAUgC,KAAK9lE,WACrCmiS,OAAQ,UAAUr8N,KAAK9lE,WACvB8mE,cAAe,UAAUpoL,OACzBkjZ,eAAgB,UAAUjiS,OAC1ByiS,cAAe,UAAUj5P,KAAKnpC,WAC9Bn1B,WAAY,UAAUthD,OACtBuzE,SAAU,UAAUqsC,KACpB1kC,cAAe,UAAUxE,QAAQ,UAAUt/D,MAAV,0B,+BAoEnCkhW,6BAA+B,SAACl8N,GAC1BA,EAAUmB,eAAiBnB,EAAUmB,cAAcp5F,8BAClDi4F,EAAUmB,cAAc55J,gBAAkBy4J,EAAUmB,cAAc55J,cAAcy9D,2BACnFg7F,EAAUmB,cAAcp5F,6BAA+B,O,KAI3Di0T,gBAAkB,SAACh8N,GACjB,EAAKtB,SAAS,CACZi6H,iBAAkB,GAClBo7E,YAAY,IACX,WACD,EAAK2oB,iBAAiB18N,O,KAI1B28N,iBAAmB,SAAC57X,GAClB,GAAKA,GAAYA,EAAQnE,MAASmE,EAAQnE,KAAK9a,UAA/C,CAGA,IAAMnH,EAASomB,EAAQnE,KAAK9a,YAC5B,GAAInH,EAAOupF,SAAU,CACnB,IAAM8zK,EAAaj3O,EAAQnE,KAAK9a,YAC5Bo2P,GAA4B,EAChC,GAA0B,qBAAtBF,EAAWtwP,QAAwE,IAAvCswP,EAAWl2P,YAAYwa,OAAO9P,KAAY,CACxF,IAAMi+E,EAAautK,EAAWl2P,YAAYwa,OAAOsD,MAAMu7E,OAAO1Q,WAC1DA,GAAcA,EAAWvG,WAC3Bg0K,GAA4B,GAG5BF,EAAW9zK,WAAag0K,IAC1BF,EAAW9zK,UAAW,EACtB8zK,EAAWhkK,iBAGf,GAAIr5F,EAAOmH,UAAW,CACpB,IAAMgwI,EAAen3I,EAAOmH,YACE,WAA1BgwI,EAAa70H,UAAyB60H,EAAarnD,YAAcqnD,EAAarnD,WAAWvG,WAC3F4tD,EAAarnD,WAAWvG,UAAW,EACnC4tD,EAAarnD,WAAWuJ,oB,KAK9B2pP,oB,gCAAqB,WAAOp2T,EAAey6E,GAAtB,cAA6B46S,EAA7B,uDAAkD,KAAlD,2EAEf56S,IAASA,EAAMlqF,OAAOuqI,QAAQ,oBAFf,0CAGV,GAHU,YAIR,EAAK31C,MAAMnlF,eAAiB,EAAKmlF,MAAMnlF,cAAcxiB,UAAUqE,KAAOme,EAAc3K,KAAK7X,UAAUqE,IACxG,EAAKsjG,MAAMy0E,eAAiB,EAAKz0E,MAAMy0E,cAAcx5F,WAAW,EAAK+kB,MAAMr+F,mBAL9D,uBAMjB,EAAK4sP,mBAAmB1zO,EAAc3K,KAAMolF,GACxC,EAAK0K,MAAMixO,oBACb,EAAKjxO,MAAMixO,mBAAmBp2T,EAAc3K,MAR7B,mBAUV,GAVU,UAaf,UAAO3a,cACT7I,QAAQ4B,IAAI,gBAAiBusB,EAAc3K,MAC3CxjB,QAAQ4B,IAAI,qBAAsBusB,EAAc3K,KAAK7X,UAAUmF,kBAAmB,4BAA6Bqd,EAAc3K,KAAKiE,2BAE9H3N,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,YACjD,EAAK4jG,MAAMthF,gBAAkBlY,EAAmB2pY,yBAA2B3pY,EAAmB4pY,yBAC1FvjZ,OAAOwiZ,qBAAuB7oY,EAAmB4pY,uBAnBtC,wBAoBjB,EAAKpwS,MAAMyxE,qBAAqB,EAAAz9H,eAAeG,WApB9B,8BAuBf,EAAK6rD,MAAMixO,qBAAuBi/D,GACpC,EAAKlwS,MAAMixO,mBAAmBp2T,EAAc3K,MAE1C,EAAK8vF,MAAM1jF,kBACb,EAAK0jF,MAAM3jF,wBAAuB,GAM/B6zX,GACH,EAAKlwS,MAAMplF,iBAAiBC,EAAc3K,OAGlB,EAAKq+O,mBAAmB1zO,EAAc3K,KAAMolF,IAC5C46S,EAtCP,wDA0CbtgY,GAAS,IAAAC,qBAEH2Z,aAA0C,YAA1B5Z,EAAOzf,kBAAkC,IAAAi7P,4BAA2BvwO,EAAc3K,MA5C3F,mCA6CX,IAAAg7O,0CAAyCrwO,EAAc3K,MA7C5C,QAgDfN,EAAO4Z,cAET,IAAAwxD,iBAAgBngE,EAAc3K,OAExB+yH,GAAe,IAAAd,iBAAgBtnH,EAAc3K,QAG/B5T,MAAMC,QAAQ0mI,EAAaX,sBAAwBW,EAAaX,oBAAoBn5I,SACtG,IAAA45I,wBAAuBloH,EAAc3K,KAAM+yH,GAAc,KAI3DpoH,EAAc3K,KAAKirF,aAAY,EAAO,GAAI+0S,EAAqB,CAACnjI,mBAAmB,GAAQ,MAEvF,EAAA17K,cAAcxiG,SAASgsB,EAAc3K,KAAKlV,SAAW,EAAA80B,uBAAuBjhC,SAASgsB,EAAc3K,KAAKlV,SACpGoP,GAAkB,IAAAhB,oBAAmByR,EAAc3K,MACzD,UAAiBgzM,iBAAiBroM,EAAc3K,MAAO9F,KAC9C,EAAAgnF,iBAAiBviG,SAASgsB,EAAc3K,KAAKlV,SAAW,EAAA60B,0BAA0BhhC,SAASgsB,EAAc3K,KAAKlV,WACjHoP,GAAkB,IAAAhB,oBAAmByR,EAAc3K,MACzD,UAAoBkzH,oBAAoBvoH,EAAc3K,MAAO9F,KAIjE,EAAK6lY,iBAAiBp1X,GAIY,SAA9BA,EAAc3K,KAAKlV,QACrB,EAAKglG,MAAMqwS,wBAAwBx1X,EAAc3K,MAGnD,EAAK8vF,MAAMuxC,sCAAqC,IAChD,aAAE1kJ,QAAQ+pG,QAAQ,UAAYszB,eAC9B,EAAKlqB,MAAMr4E,oBACXy7D,YAAW,WACT,EAAK4c,MAAMuxC,sCAAqC,KAC/C,GApFgB,8C,oDAwFrBg9G,mBAAqB,SAAC7wK,EAAgB4X,GACpC,GAAI5X,IAAmBA,EAAepF,0BACjC,EAAK0nB,MAAMy0E,eACX,EAAKz0E,MAAMy0E,cAAc+5E,yBACzB,EAAKxuJ,MAAMy0E,cAAc+5E,wBAAwB9wK,GAAiB,CACrE,IAAM+wK,GAAgB,IAAAlgP,kBAAiB+mF,GAUvC,OATA,EAAK0K,MAAMyxC,2BAA2B,CACpCiqG,aAAa,EACbH,cAAe,CACb/0M,KAAMioN,EAAc3/O,EACpBlV,IAAK60P,EAAc1/O,GAErBqsO,aAAc19J,EAAe1iF,UAE/B,aAAEnO,QAAQ+pG,QAAQ,UAAYuzB,mBACvB,EAMT,OALW,EAAKnqB,MAAM0xC,sBAAwB,EAAK1xC,MAAM0xC,qBAAqBgqG,aAC5E,EAAK17I,MAAMyxC,2BAA2B,CACpCiqG,aAAa,KAGV,G,KAiDTowD,mBAAqB,SAAC9rM,GACpB,GAAIA,EAAMy0E,eAAgD,SAA/Bz0E,EAAMy0E,cAAcz5K,OAC7C,OAAO,EAET,IAAMwL,EAAqBw5F,EAAMnzF,eAAezQ,SAC1CyxM,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBAC3Dg+F,EAAoB,KAkBxB,OAjBKvlS,EAAmBy3T,oBAAwBnwU,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,cACtHo2F,EAAMl2F,yBAA0Bk2F,EAAMy0E,gBAAiBz0E,EAAMy0E,cAAcv5F,oBAOxE8kB,EAAMy0E,eAAiBz0E,EAAMy0E,cAAcp5F,6BAClD0wN,EAAoB/rM,EAAM3pB,SAAShlE,WAAU,SAACs0D,GAC5C,OAAOA,GAAQA,EAAKz1D,MAAS8vF,EAAMy0E,cAAcp5F,6BAA6BhjF,UAAUqE,KAAOipE,EAAKz1D,KAAKxT,QAElGsjG,EAAMy0E,eAAiBz0E,EAAMy0E,cAAc55J,gBACpDkxR,EAAoB/rM,EAAM3pB,SAAShlE,WAAU,SAACs0D,GAC5C,OAAOA,GAAQA,EAAKz1D,MAAS8vF,EAAMy0E,cAAcu3H,gBAAgBn+F,KAAsBloI,EAAKz1D,KAAKxT,SAXnGqvS,EAAoB/rM,EAAM3pB,SAAShlE,WAAU,SAACs0D,GAC5C,OAAOq6B,EAAMy0E,cAAcv5F,oBAAoB7iF,UAAUqE,KAAOipE,EAAKz1D,KAAKxT,QAavEqvS,G,KAGTQ,uBAAyB,SAACz5R,GAA6D,IAA7C2hK,EAA6C,uDAA7B,EAAKz0E,MAAMy0E,cACnE,IAAK3hK,EACH,OAAO,EAGT,IAAM+5R,EAAmB/5R,EAAeza,UAAUqE,GAElD,GAAI,EAAKsjG,MAAMyK,SAAU,OAC0B,EAAKzK,MAA/Cx6F,EADgB,EAChBA,qBAAsBsZ,EADN,EACMA,iBAC7B,SAAKtZ,GAAyBA,EAAqBsZ,IAAsBtZ,EAAqBsZ,GAAkBnZ,mBAG5GmN,EAAeza,UAAUmF,mBAAqBgI,EAAqBsZ,GAAkBnZ,gBAAgBtN,UAAUmF,kBAC1GsV,EAAeza,UAAUmF,oBAAsBgI,EAAqBsZ,GAAkBnZ,gBAAgBtN,UAAUmF,kBAElHqvS,IAAqBrnS,EAAqBsZ,GAAkBnZ,gBAAgBtN,UAAUqE,IAG/F,IAAIujH,GAAW,EAOf,OANI4sL,GAAoBp4H,IACjB,EAAKz0E,MAAMnlF,gBAAkB,EAAKmlF,MAAMnlF,cAAcy9D,0BAA6Bm8F,EAAcx5F,WAAW,EAAK+kB,MAAMr+F,qBAC5Hs+G,EAAWw0D,EAAcp5F,6BACrBo5F,EAAcp5F,6BAA6BhjF,UAAUqE,KAAOmwS,EAC5D,EAAK7sM,MAAMnlF,eAAiB,EAAKmlF,MAAMnlF,cAAcxiB,UAAUqE,KAAOmwS,GAErE5sL,G,KAGTqwR,yBAA2B,YAA4C,IAA1C/pS,EAA0C,EAA1CA,YAAapkB,EAA6B,EAA7BA,WAAYirN,EAAiB,EAAjBA,YACpD,GAAI,EAAKptM,MAAM+vS,gBAAkB,EAAKt0Y,MAAM4rX,WAAY,CACtD,IAAMkpB,EAAkBzxY,KAAKkI,KAAKomS,GAC5BojG,EAAmB1xY,KAAKouE,MAAMkgO,GAC9BqjG,EAAiB3xY,KAAKkI,KAAKm7E,GAC3BuuT,EAAkB5xY,KAAKouE,MAAMiV,GAC9BouT,EAAkBE,IAAmBlqS,GACpCgqS,EAAkBG,IAAoBnqS,GACtCiqS,EAAmBC,IAAmBlqS,GACtCiqS,EAAmBE,IAAoBnqS,GAC3C,EAAK8mM,uBAAuBlrN,EAAY,CAACjyE,KAAM,EAAK8vF,MAAMy0E,kB,KAwBhEg0M,sBAAwB,WAAM,MAET,EAAKzoR,MADjB3qF,EADqB,EACrBA,YAAao/J,EADQ,EACRA,cAAe86N,EADP,EACOA,eAAgB99N,EADvB,EACuBA,qBAAsBhnE,EAD7C,EAC6CA,SAAU2H,EADvD,EACuDA,cAGnF,IAJ4B,EAE1Bu+R,eAEsBl8N,IAAkBA,EAAc3tF,sBAA0B,EAAKypP,UACrF,OAAO,wCAET,IAAMqgE,EAAkB,EAAKn1Y,MAAMixS,kBAAkBhxS,QAAO,SAAAoX,GAAA,OAAkBA,KAC9E,OAAQuC,GAAexoB,OAAOwqD,YAAc,IAC1C,mCAAoCu5V,gBAAiBA,EACjBnmS,SAAUA,EACV2H,cAAeA,EACfy+R,cAAe,EAAKtgE,UACpBhkC,uBAAwB,EAAKA,uBAC7B0kC,mBAAoB,EAAKA,mBACzBx/J,qBAAsBA,EACtBiD,SAAU,EAAK47N,yBACff,eAAgBA,EAChB96N,cAAeA,IAEnD,mCAA8Bm8N,gBAAiBA,EACjBnmS,SAAUA,EACV2H,cAAeA,EACfy+R,cAAe,EAAKtgE,UACpBhkC,uBAAwB,EAAKA,uBAC7B0kC,mBAAoB,EAAKA,mBACzBx/J,qBAAsBA,EACtBiD,SAAU,EAAKo8N,0BACfvB,eAAgBA,EAChB96N,cAAeA,K,KAIjDq8N,0BAA4B,YAA6C,IAA3CtqS,EAA2C,EAA3CA,aAAcyrE,EAA6B,EAA7BA,aAActW,EAAe,EAAfA,UACxD,GAAI,EAAK37D,MAAM+vS,gBAAkB,EAAKt0Y,MAAM4rX,WAAY,CACtD,IAAM9mM,EAAmBzhL,KAAKkI,KAAKirK,GAC7BuO,EAAoB1hL,KAAKouE,MAAM+kG,GAC/BwO,EAAgB3hL,KAAKkI,KAAK20J,GAC1B+kB,EAAiB5hL,KAAKouE,MAAMyuF,GAC7B4kB,EAAmBE,IAAkBj6E,GACpC+5E,EAAmBG,IAAmBl6E,GACtCg6E,EAAoBC,IAAkBj6E,GACtCg6E,EAAoBE,IAAmBl6E,GAC3C,EAAK6mM,uBAAuB1xI,EAAW,CAACzrJ,KAAM,EAAK8vF,MAAMy0E,kB,KAK/Ds8N,UAAY,SAAClmZ,GACX,EAAKm1G,MAAM+wS,UAAUlmZ,EAAEugB,OAAOu7C,QAAQv6C,M,KAGxC4kY,sBAAwB,WAAM,MACoC,EAAKhxS,MAA9Dy0E,EADqB,EACrBA,cAAehqE,EADM,EACNA,SAAU2H,EADJ,EACIA,cAChC,OAF4B,EACmBu+R,eACvBl8N,IAAkBA,EAAc3tF,sBAA0B,EAAKypP,UAC9E,wCAEF,mCAA8BqgE,gBAAiB,EAAKn1Y,MAAMixS,kBAC5BjiM,SAAUA,EACV2H,cAAeA,EACfm6L,uBAAwB,EAAKA,uBAC7B0kC,mBAAoB,EAAKA,mBACzBv8J,SAAU,EAAKo8N,0BACfr8N,cAAeA,K,KAGtDo7H,WAAa,SAACggG,GAAc,MAE2B,EAAK7vS,MAAnDk4B,EAFmB,EAEnBA,aAAcu8C,EAFK,EAELA,cAAek8N,EAFV,EAEUA,cAEpC,GAAIz4Q,EAAa/uI,OAAQ,CACvB,IAAMumZ,EAAmBx3Q,EAAa13H,MAAK,SAAAm4H,GACzC,OAAOA,EAAUhvE,mBAAqB8qH,EAAcnkK,QAAUqoH,EAAUhvE,mBAAqB8qH,EAAclkK,YAE7G,GAAIm/X,GAAoBA,EAAiBhlY,aAAavhB,SAAWumZ,EAAiBuB,YAAcvB,EAAiBwB,iBAC/G,OAAMP,GAAkBl8N,IAAkBA,EAAc3tF,sBAA0B,EAAKypP,UAC9E,wCAEF,mCAAY97J,cAAeA,EACf86N,eAAgB,EAAKvvS,MAAMuvS,iBAIlD,OAAOM,EACH,EAAKmB,wBACL,EAAKvoB,0B,cAmDE,IAAAjoR,UAzBS,SAACxzG,GAAU,MAE8BA,EAAMqY,YAA9D6yH,EAF0B,EAE1BA,aAAc1yH,EAFY,EAEZA,qBAAsBsZ,EAFV,EAEUA,iBAE3C,MAAO,CACL9F,oBAAqBhsB,EAAMytB,eAAezB,oBAC1Cm2H,mBAAoBniJ,EAAMytB,eAAezB,oBACzClP,uBAAwB9c,EAAMwc,UAAUM,uBACxCuL,YAAaroB,EAAMgR,YAAYqX,YAC/BwF,cAAe7tB,EAAMytB,eAAeI,cACpCy5M,eAAgBtnO,EAAMyc,YAAYiP,YAClC7L,eAAgB7f,EAAMqN,gBACtBskB,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCjU,aAAc1d,EAAMyc,YAAYiB,aAChC4R,iBAAkBtvB,EAAMouB,wBAAwBkB,iBAChDtJ,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnC0L,eAAgB1xB,EAAMwc,UAAUkV,eAChC/c,iBAAkB3U,EAAM4U,YAAYD,iBACpC+vI,qBAAsB1kJ,EAAMu1I,gBAAgBmP,qBAC5CxZ,eACA1yH,uBACAsZ,sBAIoC,CACtC5F,wDACA0B,oCACAG,wDACAsB,gDACAk1H,4EACAE,wDACA9pH,uCAPa,CAQZwnX,I,8ECtiBH,I,IAAA,MACA,O,IACA,MAEA,Q,IACA,Q,IACA,O,IACA,S,IACA,S,IACA,SACA,Q,IACA,S,IACA,S,IACA,SACA,QACA,U,mDAGA,IAAMgC,EAAU,SAACnxS,GAAU,IAElBigB,EAC4CjgB,EAD5CigB,SAAUntG,EACkCktF,EADlCltF,eAAgBjG,EACkBmzF,EADlBnzF,eAAgBokU,EACEjxO,EADFixO,mBAAoB/3T,EAClB8mF,EADkB9mF,2BAA4B2I,EAC9Cm+E,EAD8Cn+E,gBAC/FuvX,EAAiDpxS,EAAjDoxS,UAAW/7X,EAAsC2qF,EAAtC3qF,YAAao1F,EAAyBzK,EAAzByK,SAAUrrF,EAAe4gF,EAAf5gF,YAC9B5Y,EAAqBqG,EAAezQ,SAEpCw0U,EAAkB,WACtB,GAAIwgE,EACF,OAAO,EAET,IAAMzrY,GAAkB,IAAA8qU,mCAAkC39T,GAC1DoG,EAA2BvT,GAC3Bkc,EAAgB,cAGZw+O,GAAkB,IAAAj3P,oBAAmB0J,GACrCguH,EAAYt6H,EAAmBk1H,cAAgB7uH,EAAe8uH,4BAC9D0kI,IAAoBxzP,EAAe+uH,mBAanCzmI,EAAWkgB,EAAc,IAEzB27T,GAAqBvmO,IAAarrF,IAAgBA,EAAY24H,gBAEpE,OACE,+BAAKz4D,UAAW,UAAY8xT,EAAY,mBAAqB,IAAK5/N,QAhBzC,SAACl8E,GAC1B,GAAI87S,EACF,OAAO,EAGT,IAAK3mS,GAAYnV,GADkB,CAAC,YAAa,cAAe,eACX3gG,MAAK,SAAA2qF,GAAA,OAAagW,EAAMlqF,OAAOuqI,QAAQr2D,MAC1F,OAAO,EAET2xP,EAAmB,CAAC/gU,KAAM4C,GAAiBwiF,KASzC,+BAAKhW,UAAW,qBAAuB2gC,EAAW,+BAAkC,IAAK8hI,cAAe6uF,GACtG,mCAAkB74U,QAAS+a,KACzBs+X,GAAaj8Y,EACb,gCAAMmqF,UAAU,0BACd,mCAA8BxsE,eAAgBA,KAE9C,KACJ,mCAAuB+5R,iBAAkB/5R,EAAeza,UAAUqE,MAEpE,+BAAK4iF,UAAU,mBACb,8BAAIA,UAAU,uBAAsB,mCAAavnF,QAAS+a,KAC1D,mCAAwB/a,QAAS+a,EAAgB+tP,OAAO,IACxD,+BAAKvhL,UAAU,YACb,+BAAKA,UAAU,kBACZwhD,EAAY,mCAAkB/oI,QAAS+a,EAAgBo9T,WAAW,IAAU,KAC5E7vE,EAAkB,wCAA6B,MAEhD+wI,GAAcj8Y,EAIZ,KAHF,+BAAKmqF,UAAU,oBACb,mCAA8BxsE,eAAgBA,KAGlD,mCAAiCA,eAAgBA,EAChB89T,gBAAiBA,EACjBI,kBAAmBA,EACnBlwM,UAAWA,EACXswQ,UAAWA,QAOtDD,EAAQv6P,UAAY,CAClB32B,SAAU,UAAU62B,KACpBs6P,UAAW,UAAUt6P,KACrBrsC,SAAU,UAAUqsC,KACpB13H,YAAa,UAAUkvB,MAAV,wBACbx7B,eAAgB,UAAUzmB,OAAOshH,WACjCsjO,mBAAoB,UAAUx9J,KAAK9lE,YAGrC,IASMq3E,EAAqB,CACzB9rK,wDACA2I,mC,WAGa,IAAA2+E,UAdS,SAACxzG,GAEvB,MAAO,CACL+1J,yBAFiC/1J,EAAMytB,eAAlCsoI,yBAGL1tI,YAAaroB,EAAMgR,YAAYqX,YAC/BxI,eAAgB7f,EAAMqN,mBASc2qL,EAAzB,CAA6CmsN,I,8EC9G5D,I,IAAA,MACA,O,IACA,M,mDAEA,IAAME,EAAwB,SAACrxS,GAAU,IAEhC6sM,EAA4E7sM,EAA5E6sM,iBAAkB51S,EAA0D+oG,EAA1D/oG,UAAW2hY,EAA+C54R,EAA/C44R,0BAA2Bj3X,EAAoBq+F,EAApBr+F,iBAwBzDirS,EAtByB,WAC7B,GAAIgsF,GAA6BA,EAA0B79X,YACzD,OAAI69X,EAA0B79X,YAAY1C,UAAUqE,KAAOmwS,EAClD+rF,EAA0B/6X,SAE5B,EAET,IAAI+uS,EAA+B,EAC7B0kG,EAAoBr6Y,EAAUyE,QAAO,SAACZ,GAC1C,OAAQ+xS,IAAqB/xS,EAASC,YAAY1C,UAAUqE,IAAQ5B,EAASoC,eAAiByE,KAUhG,OARI2vY,EAAkBnoZ,SACpByjT,EAA+B0kG,EAAkBt7Y,QAAO,SAACmB,EAAO2D,GAC9D,MAAwB,UAApBA,EAASE,OACJ7D,EAAQ,EAEVA,EAAQ2D,EAAS+C,WACvB,OAEM+uS,EAA8BpzS,QAAQ,IAAIA,QAAQ,GAG1B+3Y,GACrC,OAAK3kG,EAKH,gCAAMttN,UAAU,iCAAiCstN,GAJ1C,MAQXykG,EAAsBz6P,UAAY,CAChCi2J,iBAAkB,UAAUv/L,OAAOK,Y,WActB,IAAAnN,UAXS,SAACxzG,GAIvB,MAAO,CACLiK,UAJkBjK,EAAM8J,UAAnBG,UAKL0K,iBAJyB3U,EAAM4U,YAA1BD,iBAKLi3X,0BAJkC5rY,EAAMgvN,qBAAnC48K,6BAQM,CAAyByY,I,iGCvDxC,MACA,O,IACA,MACA,QACA,QACA,S,mDAEA,IAAMG,EAAmB,SAACxxS,GAAU,IAI1B9O,EAHD+hB,EAAkGjT,EAAlGiT,mBAAoBxoG,EAA8Eu1F,EAA9Ev1F,YAAauI,EAAiEgtF,EAAjEhtF,gBAAiB6Q,EAAgDm8E,EAAhDn8E,mBAAoB0rX,EAA4BvvS,EAA5BuvS,eAAgBp6Y,EAAY6qG,EAAZ7qG,SAsBzFg4G,GAnBIjc,EAAmB+hB,EAAmB/hB,iBACxC50F,MAAMC,QAAQ20F,IAAqBA,EAAiB/nG,OAC/C+nG,EAAiB,GAAG3F,UAEtB,IAAApM,mBAAkB8zB,EAAmBhiB,OAgBxCiiB,GAAWzoG,EAAYtf,MAAQ,IAAI6F,cAAcnC,SAAS,SAE1DigF,EAAS,CACbqkC,eAAgBD,EAAW,QAAU,WAEnC/F,IACFr+B,EAAO0R,gBAAkB,OAAS2sB,EAAY,MAE3CA,GAAa8F,GAAsBC,IACtCpkC,EAAOs+B,gBAAkB6F,EAAmBrnH,OAG9C,IAAMq0H,EAAWjtG,EAAgBre,MAAK,SAAA6sF,GACpC,OAAOA,EAAaC,gBAAkBh3E,EAAY/N,IAAM8kF,EAAaj9D,WAAa0uF,EAAmBv2G,MAGvG,OACE,+BAAK4iF,UAAW,WAAa2gC,EAAW,qBAAuB,IAC1Dl3G,MAAO5T,EAAW,GAAK,CAACZ,OAAQg7Y,GAChC/9N,QAhCwB,WACzBl1K,MAAMC,QAAQ02G,EAAmBn+F,QAAUm+F,EAAmBn+F,MAAM3rB,aAEtE,GAAKwiU,sBAAsB14M,EAAmBn+F,MAAMtY,KAAI,SAAAqY,GAAA,OAAUA,EAAOnY,OAEzEmnB,GAAmB,IAAAkjL,yBAAA,wBAA4B/zL,IAAkB,CAC/DuR,SAAU0uF,EAAmBv2G,GAC7B+kF,cAAeh3E,EAAY/N,OA0B1BxQ,IAAK,UAAY+mH,EAAmBv2G,IACvC,+BAAK4iF,UAAU,oBAAoBv2E,MAAO+lE,IAC1C,+BAAKwQ,UAAU,gBAAgB2zB,EAAmBliB,eAMxDygT,EAAiB56P,UAAY,CAC3BnsI,YAAa,UAAUpe,OAAOshH,WAC9BsF,mBAAoB,UAAU5mH,OAAOshH,WACrC4hS,eAAgB,UAAUjiS,QAG5B,IAWM03E,EAAqB,CACzBnhK,yC,WAGa,IAAA28E,UAfS,SAACxzG,GAIvB,MAAO,CACLgsB,oBAJ4BhsB,EAAMytB,eAA7BzB,oBAKLhG,gBAJwBhmB,EAAMyc,YAAzBuJ,gBAKL7d,SAJiBnI,EAAMgR,YAAlB7I,YAY+B6vL,EAAzB,CAA6CwsN,I,8EChF5D,I,IAAA,M,IACA,MACA,OACA,U,IACA,S,mDAEA,IAAMC,EAA4B,SAACzxS,GAAU,IAEpCj3F,EAAwEi3F,EAAxEj3F,MAAO2oY,EAAiE1xS,EAAjE0xS,YAAaC,EAAoD3xS,EAApD2xS,UAAWC,EAAyC5xS,EAAzC4xS,YAAaC,EAA4B7xS,EAA5B6xS,WAAYrpC,EAAgBxoQ,EAAhBwoQ,aAEzDspC,EAAYH,EAAUnxY,MAAK,SAAAuxY,GAC/B,OAAOA,EAAcC,aAAeN,EAAYM,WAAa,KAEzDC,EAAYN,EAAUnxY,MAAK,SAAAuxY,GAC/B,OAAOA,EAAcC,aAAeN,EAAYM,WAAa,KAGzDE,EAAgB,SAACtnW,GACrB,GAAI49T,EAAc,CAChB,IAAMrmR,EAAkC,IAArBv3C,EAAMonW,WAAmB,EAAIpnW,EAAMu3C,WAAa,EAEnEyvT,EAAY1oS,QAAQipS,iBAAiB,CAAChwT,mBACjC,CACL,IAAMw5E,EAAiC,IAArB/wH,EAAMonW,WAAmB,EAAIpnW,EAAM+wH,UAAY,EAEjEi2O,EAAY1oS,QAAQipS,iBAAiB,CAACx2O,gBAyBpCy2O,GAAmBN,EACnBO,GAAqBJ,EAE3B,OACE,+BAAKlpY,MAAOA,GAAS,GAAIu2E,UAAW,mBACjCkpR,EAAe,+BAAiC,8BAC9C8pC,aAAYZ,EAAYM,YAC1BxpC,EACC,gCAAMlpR,UAAU,yBAAyBoyT,EAAY9mY,YAAYmmF,aAEjE,mCAAmC4gT,UAAWA,EACXD,YAAaA,EACbG,WAAYA,EACZK,cAAeA,IAEpD,+BAAK5yT,UAAU,2BACb,kCAAQ9H,SAAU66T,EACV7gO,QAAU6gO,EAAqD,KAAjC,kBAAMH,EAAcD,IAClD3yT,UAAU,sEAClB,kCAAQ9H,SAAU46T,EACV5gO,QAAU4gO,EAAmD,KAAjC,kBAAMF,EAAcJ,IAChDxyT,UAAU,uEAM1BmyT,EAA0B76P,UAAY,CACpC7tI,MAAO,UAAU1c,OACjBqlZ,YAAa,UAAUpjW,MAAV,6BAA2Cq/D,WACxDgkS,UAAW,UAAU5mY,MAAM4iG,WAC3BikS,YAAa,UAAUpxM,IACvBqxM,WAAY,UAAU/6P,KACtB0xN,aAAc,UAAU1xN,M,WAWX,IAAAt2C,UARS,WACtB,MAAO,KAGkB,GAIZ,CAA6CixS,I,kKC9F5D,OAEA,QACA,QACA,QACA,S,mDAU8Bc,EAAjBA,eAAiB,SAAC99N,EAAem8N,EAAiBlmY,EAAcmC,GAE3E,IAAK4nK,EACH,MAAO,CAAC+9N,aAAa,EAAOC,gBAAgB,GAG9C,IAAID,GAAc,EACZE,EAAsBhoY,EAAalK,MAAK,SAAAiK,GAAA,MAA2C,wBAA5BA,EAAYtf,KAAK0mB,UAExE8gY,EAAe9lY,EAAeG,gBACjCH,EAAeg7G,gBAAkBh7G,EAAeg7G,eAAeh5H,SAAS,yBACrEge,EAAeg7G,gBAAkBh7G,EAAeg7G,eAAeh5H,SAAS,0BACxEge,EAAeg7G,gBAAoD,iCAAlCh7G,EAAeg7G,gBAChDh7G,EAAei7G,0BAA4Bj7G,EAAei7G,yBAAyBj5H,SAAS,yBAC5Fge,EAAei7G,0BAA4Bj7G,EAAei7G,yBAAyBj5H,SAAS,0BAC5Fge,EAAei7G,0BAAwE,iCAA5Cj7G,EAAei7G,0BAGhE,IAAKj7G,EAAeE,SAAW4lY,IAC1B,EAAAvhT,iBAAiBviG,SAAS4lL,EAAcz5K,SAAW03Y,GAAuBA,EAAoB7nY,OAAQ,CACzG,IAAK4pK,EAAcpG,gBACjB,MAAO,CAACmkO,cAAaC,gBAAgB,GAC5BC,EAAoB7nY,OAAOlW,MAAK,SAAAiW,GAAA,OAAe6pK,EAAcpG,gBAAgBx/K,SAAS+b,EAAYlO,SAK3G81Y,EAJ8BE,EAAoB7nY,OAAOnP,QAAO,SAAAkP,GAC9D,OAAO6pK,EAAcpG,gBAAgBx/K,SAAS+b,EAAYlO,OAGxB/H,MAAK,SAACiW,GAQxC,OAP4BgmY,EAAgBl1Y,QAAO,SAAA3D,GACjD,IAAKA,IAAYA,EAAQmY,KACvB,OAAO,EAET,IAAM0iY,GAAoB,IAAA97T,sBAAqB/+E,EAAQmY,KAAMwiY,GAC7D,OAAOE,GAAqBA,EAAkB/jZ,SAAS+b,EAAYlO,OAE1CvT,WAIjC,MAAO,CAACqpZ,cAAaC,gBAAgB,IAGHI,EAAvBA,qBAAuB,SAACC,EAAYC,EAAgBzhY,EAAcyiK,GAAoB,IAI3F,EAJ2F,GAEvD,IAAAl+B,WAAUk9P,GAF6C,qBAE1FC,EAF0F,KAE3EC,EAF2E,KAI3FC,GAAA,gCAAe,2GACuB,IAAAxsR,wBAAuBp1G,EAAahB,QAAUgB,EAAaf,SAAU,MAAM,GADlG,OACbolK,EADa,QAEnB,IAAA/B,2BAA0B+B,EAA4BhtL,KAAM2oB,EAAcyiK,GAC1Ek/N,GAAiB,GAHE,kDAAf,4CAaN,OAPA,IAAA58R,YAAU,WACJy8R,GAAcC,GAChBG,MAGD,CAACH,EAAgBzhY,IAEb0hY,I,qIC1ET,O,OACA,O,IACA,O,IAEA,OACA,SACA,QACA,Q,uDAEMG,E,YAEJ,WAAYnzS,IAAO,gGACXA,IADW,SA8BnBozS,iBAAmB,WACjB,UAAUv9W,eAAe,iBACzB,EAAKm8I,SAAS,CACZqhO,eAAe,IACd,WACDjwT,YAAW,WACT,EAAK4c,MAAMmiD,sBAAqB,KAC/B,SArCY,EAyCnBmxP,eAAiB,SAACC,EAAat2I,GAC7B,UAAUpnO,eAAe,sBAAwB09W,EAAY72Y,IAC7D,EAAKsjG,MAAMsiD,2BAA2B26G,IAzCtC,EAAKxhQ,MAAQ,CACX2xH,OAAQ,GACRimR,eAAe,GAJA,E,oFAQC,aACqB3+Y,KAAKsrG,MAArCnlF,EADW,EACXA,cAAeq9D,EADJ,EACIA,cACtBxjF,KAAKs9K,SAAS,CACZ5kD,QAAS,CACP1wH,GAAI,EACJoP,KAAK,IAAAhU,qBAAoB+iB,GACzBwiP,SAAS,IAAAvlQ,qBAAoB+iB,EAAe,EAAAsqD,gBAAgBE,UAH9D,qBAKK6S,MAGPkL,YAAW,WACT,EAAK4uF,SAAS,CACZqhO,eAAe,MAEhB,K,6CAIH3+Y,KAAKsrG,MAAMsiD,2BAA2B,K,+BAmB/B,WACDixP,EAAc7+Y,KAAK+G,MAAM2xH,OAAO14H,KAAKsrG,MAAMuiD,yBACjD,OACE,+BAAKjjE,UAAU,kBAAkBkyF,QAAS98K,KAAK0+Y,kBAC7C,+BAAK9zT,UAAW,gBAAkB5qF,KAAK+G,MAAM43Y,cAAgB,wBAA0B,IAClF7hO,QAAS,SAAC3mL,GAAD,OAAOA,EAAE20F,oBACrB,+BAAKF,UAAU,sBAAsBkyF,QAAS98K,KAAK0+Y,mBAEnD,+BAAK9zT,UAAU,sBACZi0T,EACG,+BAAK9/Y,IAAK8/Y,EAAYznY,IACjB88L,IAAK2qM,EAAYpoZ,KACjBqmL,QAAS,kBAAM3kL,OAAO6+F,KAAK6nT,EAAYznY,IAAK,WAC5CwzE,UAAU,6BACf,MAEN,+BAAKA,UAAU,wBACb,8BAAIA,UAAU,6BACX5qF,KAAK+G,MAAM2xH,OAAO5wH,KAAI,SAACyxV,EAAGulD,GACzB,OACE,8BAAItnZ,IAAK+hW,EAAEvxV,GAAIqM,MAAO,CAACy3E,gBAAiB,SAAWytQ,EAAE5wF,SAAW4wF,EAAEniV,KAAO,MACrEwzE,WAAW,aAAW,kCACpB,CAAC,0CAA2C,EAAK0gB,MAAMuiD,0BAA4BixP,IACrFhiO,QAAS,kBAAM,EAAK8hO,eAAerlD,EAAGulD,iB,+BAqB7C,IAAAhzS,UAVS,SAACxzG,GAAU,MAC+DA,EAAMytB,eAAhG8nI,EAD2B,EAC3BA,wBAAyBppI,EADE,EACFA,qBAAsBkpI,EADpB,EACoBA,yBAA0BxnI,EAD9C,EAC8CA,cACzE44X,EAAcpxP,IAAsDlpI,GAAwB0B,GAClG,MAAO,CACLq9D,cAAeu7T,EAAYp7Y,UAAU6/E,eAAiB,GACtDqqE,0BACA1nI,cAAe44X,KAIqB,CACtCtxP,4CACAG,yDAFa,CAGZ6wP,I,6FCxGH,O,WACA,MACA,OACA,OAEA,QACA,QACA,QACA,S,mDAEA,IAAIjrB,EAAY,EAEVwrB,EAA4B,SAAC1zS,GAAU,IAEpCmyE,EACanyE,EADbmyE,WAAY/yJ,EACC4gF,EADD5gF,YAAajQ,EACZ6wF,EADY7wF,KAAM6L,EAClBglF,EADkBhlF,qBAAsBD,EACxCilF,EADwCjlF,2BAA4B1F,EACpE2qF,EADoE3qF,YACtFxI,EAAkBmzF,EAAlBnzF,eAEIioI,GAAY,IAAAF,gBACZ1/B,GAAkB,IAAAu/B,aAAYr1H,GAC9Bu0X,GAAiB,IAAAl/P,aAAY09B,GAPQ,GAQT,IAAAt8B,UAAS,IARA,qBAQpC+9P,EARoC,KAQzBC,EARyB,KAoBrCC,EAAY,WAChBz9P,aAAa6xO,GACbntW,GAA2B,GAC3BmtW,EAAY9kS,YAAW,WACrB,IAAM2wT,EAbJ30X,GAAeA,EAAYvL,YACtBuL,EAAYvL,YAEhBs+J,GAGE,IAAAsQ,4BAA2BtQ,EAAWjiK,KAAMf,EAAMtC,GAFhD,GAUHioI,KAAei/P,IACjBF,EAAaE,GACbh5X,GAA2B,MAE5B,OAGL,IAAAs7F,YAAU,aACHnB,GAAmB91F,GAAgB81F,GAAmB91F,GAAgB81F,EAAgBx4G,KAAO0iB,EAAY1iB,KAElGi3Y,GAAkBxhO,GAAewhO,GAAkBxhO,GAAewhO,EAAezjY,KAAKK,WAAa4hK,EAAWjiK,KAAKK,WAD7HujY,MAKD,CAAC3hO,EAAY/yJ,IAEhB,IAAI0vD,EAAS,GAOb,OANI8kU,GAAcA,EAAUzqZ,OAAS,KAASksB,EAAc,MAC1Dy5D,EAASz5D,EAAc,IACnB,CAACkiC,SAAU,QACXliC,EAAc,IAAM,CAACkiC,SAAU,QAAU,IAI7C,+BAAK+nC,UAAW,SAAWtkE,EAAuB,iBAAmB,IAAKjS,MAAO+lE,GAC9E8kU,EACD,kCAAQt0T,UAAU,WAAWkyF,QAAS,kBAAMz2J,GAA2B,QAK7E24X,EAA0B98P,UAAY,CACpCu7B,WAAY,UAAU9lL,OACtB+yB,YAAa,UAAUkvB,MAAV,yBAGf,IAQM02I,EAAqB,CACzBjqK,yD,WAGa,IAAA0hI,aACb,IAAAj8C,UAbsB,SAACxzG,GACvB,MAAO,CACLguB,qBAAsBhuB,EAAMytB,eAAeO,qBAC3C3F,YAAaroB,EAAMgR,YAAYqX,YAC/BxI,eAAgB7f,EAAMqN,mBASC2qL,EAAzB,CAA6C0uN,K,8ECtF/C,W,OACA,UACA,O,IACA,OAEA,SACA,Q,IACA,O,mDAEA,IAoEM1uN,EAAqB,CACzBpiC,kDACA7nI,yD,WAGa,IAAAylF,UAdS,SAACxzG,GAAU,MACmBA,EAAMytB,eAC1D,MAAO,CACLI,cAH+B,EAC1BA,cAGLL,2BAJ+B,EACXA,2BAIpBnF,YAAaroB,EAAMgR,YAAYqX,eASK2vK,EAAzB,EAzEW,SAAChlF,GAAU,IAE5BxlF,EAA0DwlF,EAA1DxlF,2BAA4BnF,EAA8B2qF,EAA9B3qF,YAAawF,EAAiBmlF,EAAjBnlF,cAC1Cm5X,GAAS,IAAAr/P,QAAO,OAEtB,IAAAt+B,YAAU,WAMR,OALiBhhG,EAAc,KAE7B2+X,EAAO9qS,QAAQ+qS,OAEjBj0S,EAAMjlF,4BAA2B,GAC1B,WACLilF,EAAM4iD,yBAAwB,MAE/B,KAEH,IAAAvsC,YAAU,WAER,OAAO,WACLrW,EAAM4iD,yBAAwB,MAE/B,CAACpoI,IAEJ,IAaMrlB,EAAWkgB,EAAc,IAE/B,OACE,+BAAKiqE,UAAU,8CACZnqF,EAAW,KACV,+BAAKmqF,UAAU,0BAA0Bv2E,MAAO,IAC9C,kCACE2rI,IAAKs/P,EACLE,aAAA,EACAC,UAAU,EACV1gZ,IAXQ,uEAed,gCAAM6rF,UAAU,2BAAhB,kBACA,6BAAGA,UAAU,0BAAb,qFACA,6BAAGA,UAAU,4BACX,kCAAQA,UAAU,6BAA6BkyF,QA9BrB,WAC9B,IAAMn3F,EAAax/D,EAAczlB,YAC9Bgf,qBACA5T,MAAK,SAAA6T,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAOme,EAAcxiB,UAAUqE,MACrE29E,IACFA,EAAWnqE,KAAK+9N,8BAChB5zJ,EAAWnqE,KAAKirF,eAChB,aAAEtuG,QAAQ+pG,QAAQ,UAAYuzB,mBAEhCnqB,EAAM4iD,yBAAwB,KAqB1B,uB,8HC9DR,O,WACA,MACA,O,IACA,OACA,OAEA,Q,IAGA,S,IAEA,O,IAEA,Q,IACA,S,IACA,Q,IACA,Q,IACA,O,IACA,Q,IACA,QACA,Q,IACA,S,IACA,SACA,Q,IACA,QACA,QACA,Q,uDAGMwxP,G,6OAQJC,qBAAuB,SAACxpZ,GACtB,UAAUgrC,eAAe,oBAAsBhrC,EAAEugB,OAAOu7C,QAAQxyB,MAChE,EAAK6rE,MAAMq0S,sBAAsBxpZ,EAAEugB,OAAOu7C,QAAQxyB,O,EAGpD6/L,sBAAwB,YACtB,aAAEnnO,QAAQ+pG,QAAQ,WAClB,aAAE/pG,QAAQ+pG,QAAQ,UAAY8zB,sB,gGAGvB,aAC2Ch2H,KAAKsrG,MAAhDuyE,EADA,EACAA,cAAe1lK,EADf,EACeA,eAAgB1X,EAD/B,EAC+BA,SAChCya,GAAS,IAAAC,oBACTrJ,EAAqBqG,EAAezQ,SAEtCk4Y,EAAgB,GAChB/hO,IACF+hO,EAAgB/hO,EAAcriK,KAAKlV,QAGrC,IAAMm1L,EAAY,EAAA9+F,cAAcxiG,SAASylZ,GAEnCvzP,EAAe,EAAA3vD,iBAAiBviG,SAASylZ,IAAkB,EAAAzkX,0BAA0BhhC,SAASylZ,GAE9FC,EAAyC,eAAlBD,GAAiE,aAA9B,IAAAxjZ,2BAE1D0jZ,EAA2BjiO,GAAiBA,EAAcriK,KAAKwnE,cAErE,OACE,+BAAK4H,UAAU,mBACXzyE,EAAeG,gBAAkBunY,GAAwBpkN,GAAapvC,GAAgByzP,GACtF,+BAAKl1T,UAAU,wBACZk1T,GAA4BjiO,EAAgB,mCAAgBp9K,SAAUA,EAAUo9K,cAAeA,EAAcriK,KAAMynM,aAAa,IAAU,KAC1I48L,EAAuB,mCAAkBxgL,aAAcr/N,KAAKs/N,wBAA2B,MACtF7jC,GAAapvC,IAAiBwxB,EAC9B,+BAAKjzF,UAAU,0BACZ6wG,EACGvgL,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAcriK,KAAK2K,cAAeovM,oBAAoB,IAC5F,mCAAkBpa,gBAAgB,EAAMC,aAAa,EAAMv9B,cAAeA,EAAcriK,OAC1F,KACH6wI,EACGnxI,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAcriK,KAAK2K,cAAeovM,oBAAoB,IAC5F,mCAAqBpa,gBAAgB,EAAMC,aAAa,EAAMv9B,cAAeA,EAAcriK,OAC7F,MAEJ,MAEJ,KACJ,+BAAKovE,UAAU,yBACM,eAAlBg1T,GAAkCn/Y,EAC/B,KACA,mCAAwBk/Y,qBAAsB3/Y,KAAK2/Y,qBAAsB9hO,cAAeA,IAC5F,+BAAKjzF,UAAU,0BACb,4CAAkB5iF,GAAG,qCAAqCoyY,eAAe,WACtE,SAAC9oQ,GAAD,OACC,iCAAO1mD,UAAW,gCAAkC,EAAK0gB,MAAMrnB,WAAa,yBAA2B,IAChG/sF,MAAO,EAAKo0G,MAAMrnB,WAAY74E,KAAK,OACnC0qN,SAAU,EAAKxqH,MAAMyxG,wBAAyBzrE,YAAaA,OAGrEtxI,KAAKsrG,MAAMrnB,WACV,kCAAQ2G,UAAU,+BAA+BkyF,QAAS,WACxD,EAAKxxE,MAAMyxG,wBAAwB,CAACrmM,OAAO,CAACxf,MAAM,SAElD,MAEN,+BAAK0zF,UAAU,2BACZnqF,GAAYqR,EAAmBgwN,cAAgB,mCAAaq5E,YAAY,IAAU,KAClF16S,EAAW,wCAAsB,KACjC0X,EAAeG,cAAgB,KAAO,wCACvC,+C,kBA9EH4pI,UAAY,CACjB27B,cAAe,UAAUlmL,OACzBssF,WAAY,UAAUzhD,OAAOy2E,WAC7B8jG,wBAAyB,UAAUh+B,KAAK9lE,Y,GA+FtCq3E,EAAqB,CACzBqvN,+C,WAGa,IAAA7zS,UAhBS,SAACxzG,GAAU,MACkCA,EAAMytB,eAAlEzB,EAD0B,EAC1BA,oBAAqBG,EADK,EACLA,qBAAsB0B,EADjB,EACiBA,cAElD,MAAO,CACL7B,sBACAG,uBACAhkB,SAJiBnI,EAAMgR,YAAlB7I,SAKL0X,eAAgB7f,EAAMqN,gBACtBwgB,mBAQoCmqK,EAAzB,CAA6CovN,I,2ICrI5D,O,WACA,OACA,OAEA,Q,IACA,S,IACA,O,IACA,Q,uDAEqBK,E,YAEnB,WAAYz0S,IAAO,gGACXA,IADW,SA6BnB00S,sBAAwB,SAACl6X,GAAoD,IAAxBm6X,EAAwB,uDAAR,IACnE,GAAI,EAAKC,WAAY,CACnB,IAAMC,EAAY,EAAKD,WAAWxnG,YAAc,EAAKwnG,WAAWruS,YAC1DuuS,EAAc,EAAK90S,MAAM3qF,YAAc,IAAM,GAAK,GAClD0/X,EAAeD,EAAYt6X,EAC3B2nE,EAAc0yT,EAAY,GAAOE,EAAeF,EAAaA,EAAYE,GAC/E,aAAE,EAAKH,YAAY1yT,QAAQ,CAACC,cAAawyT,KAnC1B,EAuCnBK,uBAAyB,SAACnqZ,GAExB,EAAKmnL,SAAS,CACZijO,WAAYpqZ,EAAEugB,OAAO+2E,WAAa,IAAM,GAAK,IAAMt3F,EAAEugB,OAAO+2E,WAC5D+yT,YAAarqZ,EAAEugB,OAAO+2E,WAAa,KAAO,IAAM,EAAIt3F,EAAEugB,OAAO+2E,cA3C9C,EA+CnBgzT,YAAc,WACZ,EAAKC,gBAAgB,EAAKp1S,QAhDT,EAmDnBo1S,gBAAkB,WAA4B,IAA3B9hO,EAA2B,uDAAf,EAAKtzE,MAG5BpwF,GAAS,IAAAC,oBAEf,GAAID,EAAOc,cAAgB4iK,EAAU7gK,iBAAkB,CACrD,IAAMA,EAAmB7C,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASmoL,EAAU7gK,qBACzF7C,EAAOc,aAAa,GACzB,EAAKshK,SAAS,CACZv+J,aAAchB,EAAiBtB,gBAGjC,EAAK6gK,SAAS,CACZv+J,aAAc6/J,EAAUnB,WAAWhhK,UAAS,MAhE/B,EAqEnBkkY,gBAAkB,WAA8B,IAA7BC,EAA6B,0DACkD,EAAKt1S,MAA9FxlF,EADuC,EACvCA,2BAA4ByhM,EADW,EACXA,oBAAqB/7G,EADV,EACUA,kBAAmBm2E,EAD7B,EAC6BA,kBAC3E,OACE,mCAAc/2F,UAAU,wBAAwBuvN,mBAAoB,0BAGlE,+BAAKvvN,UAAU,wBAAwBo1D,IAAK,SAACksG,GAAD,OAAQ,EAAKg0J,WAAah0J,IACnE,EAAKnlP,MAAMgY,aAAajX,KAAI,SAACmpE,EAAMrjE,GAClC,OAAK49F,EAAkBrxG,SAASf,SAASC,SAASoC,gBAG9C8rN,GAAwB35M,IAAUkY,GAA+B3tB,OAAO2B,SAASC,KAAKI,SAAS,cAG/F82E,EAAKz1D,MAA6B,UAArBy1D,EAAKz1D,KAAKlV,OAFlB,KAKF,mCAAwBqZ,QAASsxD,EACT4vU,UAAWjzY,EACXkY,2BAA4BA,EAC5B86X,iBAAkBA,EAClBE,wBAAyB,EAAKA,wBAC9BtpZ,IAAK,eAAeoW,IAb1C,QAeVgzY,EACC,kCAAQh2T,UAAU,oGAEVkyF,QAAS,cACf,gCAAMlyF,UAAU,qCACd+2F,EACA,gCAAM/2F,UAAU,qCAAqC,EAAK0gB,MAAM/oG,UAAU9N,QADtD,KAGtB,gCAAMm2F,UAAU,oCACd,4CAAkB5iF,GAAG,gDAGvB,QAvGV,EAAKjB,MAAQ,CACXgY,aAAc,GACdwhY,YAAa,IACbC,YAAa,GALE,E,oFASC,WAClBxgZ,KAAK0gZ,gBAAgB1gZ,KAAKsrG,QAE1B,aAAEnzG,QAAQwqG,GAAG,UAAY8yB,iBAAkBz1H,KAAKygZ,aAChD/xT,YAAW,WACT,EAAKsxT,sBAAsB,EAAK10S,MAAMxlF,2BAA4B,KACjE,K,8CAIH,aAAE3tB,QAAQ8gO,IAAI,UAAYxjG,iBAAkBz1H,KAAKygZ,e,gDAIzB7hO,GACpB5+K,KAAKsrG,MAAM82E,uBAAyBxD,EAAUwD,sBAChDpiL,KAAK0gZ,gBAAgB9hO,O,0BA3BNmhO,G,8ECTrB,I,IAAA,MACA,OACA,QACA,O,IACA,MAEA,QAGA,S,mDAEA,IAAMgB,EAA4B,SAACz1S,GAAU,IAEpCl+E,EAEOk+E,EAFPl+E,aAAc3I,EAEP6mF,EAFO7mF,qBAAsB8iM,EAE7Bj8G,EAF6Bi8G,oBAAqBzjM,EAElDwnF,EAFkDxnF,sBAAuB0C,EAEzE8kF,EAFyE9kF,6BACrFvI,EACYqtF,EADZrtF,eAAgBuG,EACJ8mF,EADI9mF,2BAA4BisK,EAChCnlF,EADgCmlF,QAASrmK,EACzCkhF,EADyClhF,iBAAkB42X,EAC3D11S,EAD2D01S,sBAAuBC,EAClF31S,EADkF21S,cAC9FlrS,EAAYzK,EAAZyK,SAEKwiE,GAAyB,IAAAkd,4BAAzBld,sBA0BP,OACE,kCAAQ3tF,UAAU,0EACVkyF,QA1BoB,WAC5B,MAAqB,eAAjB1vJ,GACFtJ,GAAsB,EAAO7F,GAC7BuI,GAA6B,QAC7BiqK,EAAQ17L,KAAK,gBAEJ0vB,GACTD,EAA2B,WACN,iBAAjB4I,GACFqjK,EAAQ17L,KAAK,wBAGNwyN,EACT92B,EAAQ17L,KAAK,iBAEJisZ,GAAyBC,IAAkBD,EAAsB,QAC1EC,IAGElrS,GACFwiE,EAAsBnuJ,EAAmB,MAOzC,4CAAkBpiB,GAAG,oCAM3B+4Y,EAA0B7+P,UAAY,CACpCnsC,SAAU,UAAUqsC,KACpB4+P,sBAAuB,UAAUjiO,KACjCkiO,cAAe,UAAUliO,MAG3B,IAeMuR,EAAqB,CACzBxsK,8CACA0C,4DACAhC,yD,WAGa,IAAA+rK,aACb,IAAAzkF,UAtBsB,SAACxzG,GAAU,MACcA,EAAMytB,eAKrD,MAAO,CACL9H,eAP+B,EAC1BA,eAOLwG,qBAR+B,EACVA,qBAQrB2I,aAPqB90B,EAAM8J,UAAtBgrB,aAQLhD,iBAPyB9xB,EAAMqY,YAA1ByZ,iBAQLm9L,oBAP4BjvN,EAAMgvN,qBAA7BC,uBAkBkBj3B,EAAzB,CAA6CywN,K,8HChF/C,M,IACA,OACA,OACA,OAEA,S,uDAIMG,E,YAEJ,WAAY51S,IAAO,gGACXA,IADW,SAWnBs7H,kBAAoB,WAClB,OAAI,EAAKt7H,MAAMklD,+BACN,KAEWp3J,SAAS02F,eAAe,cAIzB12F,SAASg9F,cAAc,0BAI1Cj+F,OAAOgpZ,gCAAkCzyT,YAAW,WAClD,EAAK4c,MAAM+kD,4BAA2B,GACtC,EAAK+wP,uBACL,aAAE,gCAAgC11M,OAAO,MACzC,aAAE,wCAAwCA,OAAO,KAAK,WACpD,EAAK01M,yBAEPjpZ,OAAO0uD,iBAAiB,SAAU,EAAKskM,gBACtC,MAdM,MAjBQ,EAkCnBA,aAAe,WACbxpG,aAAa,EAAK0/P,UAClB,EAAKA,SAAW3yT,WAAW,EAAK0yT,oBAAqB,MApCpC,EAuCnBA,oBAAsB,WACpB,EAAKj6K,4BAA4B,4BAxChB,EAgDnBC,oBAAsB,WACpB,EAAKN,cAAa,IAjDD,EAoDnBA,aAAe,SAACO,IACd,aAAE,gCAAgCx7B,QAAQ,KAAK,WAE7C,GADA,EAAKvgG,MAAM+kD,4BAA2B,GAClCg3E,EAAS,CACX,EAAK/7H,MAAMilD,mCAAkC,GAC7C,IACEp4J,OAAO67G,aAAaC,QAAQ,+BAA+B,GAC3D,MAAO7nG,GAAMpU,QAAQ4B,IAAI,yBAA0BwS,SA3DxC,EAgEnByvS,gBAAkB,WAChB,EAAK/0E,cAAa,GAClB,IAAM80E,EAAaxiT,SAASg9F,cAAc,qBAC1C,IAAKwlN,EACH,OAAO,KAETA,EAAW1rN,SApEX,EAAKnpF,MAAQ,CACX0gO,WAAY,CACV31L,KAAM,EACN5sC,IAAK,IAGT,EAAKm8Y,SAAW,EARC,E,uFA4CjBlpZ,OAAOwpJ,aAAaxpJ,OAAOgpZ,iCAC3BhpZ,OAAO+qG,oBAAoB,SAAUljG,KAAKmrP,gB,+BA4BnC,aAE4EnrP,KAAKsrG,MAAjFglD,EAFA,EAEAA,+BAAgCE,EAFhC,EAEgCA,+BAAgC/vJ,EAFhE,EAEgEA,SAEvE,OAAK6vJ,GAAkCE,EAC9B,KAIP,+BAAK5lE,UAAW,gDACd,+BAAKA,UAAW,4BACd,+BAAKA,UAAU,+DAA+Dv2E,MAAO,CACnFy9B,KAAM9xC,KAAK+G,MAAM0gO,WAAW31L,MAAQrxC,EAAW,IAAM,OAErD,+BAAKmqF,UAAU,+BACf,6BAAGA,UAAU,sBAAsB5iF,GAAG,iBACpC,4CAAkBA,GAAG,wCAAuC,mCAC5D,4CAAkBA,GAAG,0CAEvB,+BAAK4iF,UAAU,+BACf,+BAAKA,UAAU,0BACb,kCAAQA,UAAU,iEACVkyF,QAAS,kBAAM,EAAKgqD,cAAa,IAAO9+N,GAAG,kBACjD,4CAAkBA,GAAG,8CAI3B,gCAAM4iF,UAAU,iDAAiDv2E,MAAO,CACtE,UAAa,aAAarU,KAAK+G,MAAM0gO,WAAW31L,KAAK,OAAO9xC,KAAK+G,MAAM0gO,WAAWviO,IAAI,SAExF,+BAAK0lF,UAAU,yCAAyCv2E,MAAO,CAC7Dy9B,KAAM9xC,KAAK+G,MAAM0gO,WAAW31L,KAC5B5sC,IAAKlF,KAAK+G,MAAM0gO,WAAWviO,MAE3B,kCAAQ0lF,UAAU,sDAAsDkyF,QAAS98K,KAAK67S,yB,KAhHlG,Q,SAoIMvrH,EAAqB,CACzBjgC,wDACAE,uE,WAGa,IAAAzkD,UAhBS,SAACxzG,GAAU,MACwCA,EAAMyvO,cAG/E,MAAO,CACLz3E,+BAL+B,EAC1BA,+BAKLE,+BAN+B,EACMA,+BAMrC/vJ,SALiBnI,EAAMgR,YAAlB7I,YAc+B6vL,EAAzB,CAA6C4wN,I,8EC/I5D,W,OACA,O,IACA,M,IAEA,Q,IACA,SACA,QAGA,QACA,S,mDAGA,IAAMI,EAA6B,SAACh2S,GAAU,IAErClR,EAA2FkR,EAA3FlR,WAAYtpF,EAA+Ew6F,EAA/Ex6F,qBAAsBsZ,EAAyDkhF,EAAzDlhF,iBAAkBm3X,EAAuCj2S,EAAvCi2S,eAAgBh6L,EAAuBj8G,EAAvBi8G,oBAErEi6L,GAAmB,IAAAvhQ,UAInBx1H,GAAc,IAAAg6G,oBAAmBrqC,EAAYhwE,EAAkBtZ,GAY/D+/C,EACJ,+BAAK+5B,UAAU,wBACVo1D,IAAKwhQ,GAGP/2X,EAAY3iB,KAAI,SAACy6G,GAChB,IAAMk/R,GAAe,IAAAlhS,yBAAwBgC,EAAKxxG,UAAWD,EAAsB2Z,GACnF,OAAI88L,GAAwBhlG,EAAKxxG,YAAcqZ,GAAqBjyB,OAAO2B,SAASC,KAAKI,SAAS,aACzF,KAEF,mCAA2BuzU,oBAAqB58T,EAAqByxG,EAAKxxG,WAC/CqpF,WAAYA,EACZmnT,eAAgBA,EAChBE,aAAcA,EACdt2X,WAAYo3F,EAAKp3F,WACjBpa,UAAWwxG,EAAKxxG,UAChBvZ,IAAK,WAAa+qH,EAAKxxG,gBAa/D,OACE,mCAAc65E,UAAU,wBAAwBuvN,mBAAoB,yBAA0BD,cAAesnG,GAC1G3wV,IAMPywV,EAA2Bp/P,UAAY,CACrCq/P,eAAgB,UAAUn/P,KAC1BhoD,WAAY,UAAUxgD,MAAV,uBAAqCq/D,WACjDkJ,aAAc,UAAUxqH,OACxBohL,WAAY,UAAUngE,Q,WAuBT,IAAA9M,UApBS,SAACxzG,EAAOqvP,GAAa,MACMrvP,EAAMqY,YAAhDG,EADoC,EACpCA,qBAAsBsZ,EADc,EACdA,iBADc,EAEX9xB,EAAMgR,YAA/BqX,EAFoC,EAEpCA,YAAalgB,EAFuB,EAEvBA,SAIpB,MAAO,CACLqQ,qBAJqB62O,EAAhBxlI,cAIiCrxG,EACtCsZ,mBAEAzJ,cACAlgB,WACA8mN,oBAR4BjvN,EAAMgvN,qBAA7BC,uBAYkB,GAIZ,CAA6C+5L,I,iGCjG5D,MACA,O,IACA,OAEA,QACA,SACA,Q,6DAGe,SAACxlG,GAEd,IA8DMxrH,EAAqB,CACzBhrK,gEACA8oI,iEAGF,OAAO,IAAAtiD,UAlBiB,SAACxzG,GAAU,MACoDA,EAAMytB,eAApFtB,EAD0B,EAC1BA,qBAAsBW,EADI,EACJA,sBAAuBvF,EADnB,EACmBA,cAAe5B,EADlC,EACkCA,eAGnE,MAAO,CACLwG,uBACAW,wBACAvF,gBACA9B,iBANyBzlB,EAAMgsL,QAA1BvmK,iBAOLE,oBAS4BqyK,EAAzB,EAnEiC,SAAChlF,GAAU,IAE1ClmF,EAC8CkmF,EAD9ClmF,sBAAuBX,EACuB6mF,EADvB7mF,qBAAsBa,EACCgmF,EADDhmF,+BAAgC8oI,EAC/B9iD,EAD+B8iD,+BAClFvuI,EAAmDyrF,EAAnDzrF,cAAe9B,EAAoCutF,EAApCvtF,iBAAkBE,EAAkBqtF,EAAlBrtF,eAuCnC,OAAO,wBAAC69R,GAAD,gBAAsBxwM,EAAtB,CACkBo2S,eAtCF,WACrB,IAAKt8X,GAAyBX,IAAyBA,EAAqB9gB,UAAUipS,aAAc,CAClGtnR,GAA+B,GAC/B8oI,GAA+B,GAC/B,IAAMuzP,GAAsB,aAAE,oCAI9B,OAHIA,GACFA,EAAoBn0T,QAAQ,CAACy5E,UAAW,GAAI,MAEvC,EAET,OAAO,GA6BgB26O,2BAjBU,SAACz7X,GAA4C,IAA7B07X,EAA6B,uDAAP,GAYvE,OAXIj6Y,MAAMC,QAAQgY,IAAkBA,EAAcprB,QAChDorB,EAAczhB,SAAQ,SAAA0jZ,GACpBA,EAAa3jY,gBAAgB/f,SAAQ,SAAAugB,GACnC,GAAIA,EAAeoB,aAAc,CAC/B,IAAMgiY,GAAwB,IAAAnkY,mBAAkBe,EAAgBA,EAAeoB,aAAchC,GAC7FgkY,EAAsB/tT,qBAAuB7tE,EAC7C07X,EAAoB9sZ,KAAKgtZ,UAK1BF,GAMgBG,yBA3BQ,SAAC77X,GAChC,IAAIyvP,EAAa33P,EACjB,GAAIkI,EAAczlB,UAAW,CAC3B,IAAMgc,EAAUyJ,EAAczlB,YAC9Bk1Q,EAAal5P,EAAQhc,UAAYgc,EAAQhc,YAAYmb,SAAWa,EAAQb,SAE1E,OAAO+5P,W,2JCnCb,O,OACA,OACA,Q,IACA,S,IACA,Q,IACA,QACA,OAEA,QAOA,Q,IAOA,O,IACA,Q,IACA,S,IACA,SACA,QACA,S,IACA,S,IACA,S,IACA,SACA,S,IACA,SACA,QACA,QACA,Q,IACA,SACA,S,IACA,QACA,SACA,S,IACA,QACA,S,uDAEMqsI,E,YAEJ,WAAY32S,GAAO,8GACXA,IADW,SAanB42S,4BAbmB,gCAaU,WAAOC,EAAUn1Y,GAAjB,8BAA6B5G,EAA7B,uDAAwC,KAAxC,0EACpB6X,EAAkDkkY,EAAlDlkY,eAAgBg3C,EAAkCktV,EAAlCltV,iBAAkBr4C,EAAgBulY,EAAhBvlY,aACzC,UAAUukB,eAAe/6B,EAAW,6BAA+B,uCAFxC,EAGqB,EAAKklG,MAA9Cr+F,EAHoB,EAGpBA,iBAAkB4kK,EAHE,EAGFA,qBACrBzrK,GAAaA,EAAS0H,qBAAuB1U,SAASC,SAASoC,eAJxC,iCAKnB,IAAA+nL,2BAA0Bp9K,EAAS0H,oBALhB,UAQvBd,IAAeC,EARQ,kCASnB,IAAAq2K,mBAAkBt2K,GATC,wBAUnB6kK,EAAoB7kK,GAVD,YAYvB4P,EAZuB,wBAcrBymM,EAAkB,KAClBtyM,EAAY,EACZ3K,GAAYA,EAASkkB,eACvB+4L,EAAkB,CAACjoG,aAAch1G,EAASkkB,aAActd,cACxD+D,EAAY3K,EAASokB,iBAEvB,aAAiB,gBAAgB,EAAO,CAAChP,KAAMoB,GAAe,GAAIymM,EAAiBtyM,GApB1D,4BAuBrBmK,GAAS,IAAAC,qBACJa,cACL6vU,EAAe,EACbu2D,EAAclnY,EAAOc,aAAalQ,MAAK,SAAA68K,GAC3C,IAAM05N,EAAS15N,EAAM14E,gBAAgBtzF,WAAU,SAAA6mM,GAC7C,OAAQA,EAAMhoM,KAAKuB,wBAA0BymM,EAAMlhM,QAAU2yC,KAE/D,OAAIotV,GAAU,IACZx2D,EAAew2D,GACR,OAGLnnY,EAAOc,aAAa,GAC1B,EAAKsvF,MAAM14E,oBAAoBwvX,EAAY3rZ,MAC3C,EAAK60G,MAAM1lF,iCAAiCimU,IAC5C,IAAApoI,mBAAkB2+L,EAAY3rZ,KAAMo1V,KAEpC,EAAKvgP,MAAMxnF,uBAAsB,EAAM7F,IACjC8oF,EAAc7rF,EAAOsD,MAAMP,KAEzB4tU,EAAe9kP,EAAYtqF,WAAWE,WAAU,SAAA6mM,GACpD,OAAQA,EAAMhoM,KAAKuB,wBAA0BymM,EAAMlhM,QAAU2yC,MAE/D,IAAAk1L,iBAAgBpjJ,EAAa8kP,GAAgB,EAAIA,EAAe,IAEhE,EAAA35T,YAAYn9B,KAAK,cAhDM,8CAbV,iDAkEnButZ,wBAA0B,WAAM,MAEU,EAAKh3S,MADtCxyF,EADuB,EACvBA,OAAQvW,EADe,EACfA,UAAW0K,EADI,EACJA,iBAAkBwjK,EADd,EACcA,2BAA4Bh2J,EAD1C,EAC0CA,KAAMtC,EADhD,EACgDA,eAAgBgiF,EADhE,EACgEA,WAC1FhwE,EAF0B,EAE1BA,eAAgBE,EAFU,EAEVA,iBACd0rF,GAAW,IAAAkE,uBAAsB9f,EAAYhwE,GAC/Co4X,EAAa,GA6IjB,OA5IAzpY,EAAO1a,SAAQ,SAACsb,EAAO1M,GAErB,IAAMkO,GAAS,IAAAC,kBAAiBhD,EAAezQ,SAASg7K,0BAA4BhpK,EAAML,KAAOK,EAAML,KAAOjgB,SAASC,SAASoC,gBAE1H+mZ,EAAW,GACX96L,EAAiBnlN,EAAUyE,QAAO,SAACZ,GAAD,OAAcA,EAASC,aAAgBD,EAASoC,eAAiBwE,KACzG,GAAIyjK,GAA8BzjK,IAAeC,EAAkB,CACjE,IAAIs+U,EAAoB,GAElBk3D,EAAgB,SAACr8Y,EAAUskB,EAAa0wF,GAE5C,IAAMrU,EAAc3gG,EAASC,YAAY3F,UACrC0F,EAASC,YAAY3F,YACrBwa,EAAOgb,wBAAwB9vB,EAASC,YAAYC,QACpD2uD,SACAytV,SAEAt8Y,EAAS0U,6BACXm6C,EAAmB7uD,EAAS0U,4BAC5B4nY,EAA0BjoY,EAAKC,cAAc,CAAC1S,GAAI,2BAA8B5B,EAAS0U,gCAEzFm6C,EAAmB8xC,EAAcA,EAAYhqF,wBAA0BgqF,EAAYlrF,SAAWzV,EAAS6X,eACnGyM,IACFg4X,GAA0B,IAAA/vO,oBAAmBjoJ,IAE1Cg4X,GAA4Bh4X,IAC/Bg4X,EAA0B37S,GAAc,IAAAjrF,qBAAoBirF,EAAatsF,EAAMtC,GAAkB/R,EAAS6X,iBAI9G,IAAM1kB,EAASipZ,EAAS12Y,MAAK,SAAAq2Y,GAC3B,OAAIpsS,GAAY3vG,EAASsK,kBAChByxY,EAAS1xY,gBAAkBrK,EAASsK,mBAAsByxY,EAAS/mS,eAAiBh1G,EAASkkB,aAE/F63X,EAASltV,mBAAqBA,KAEnC17D,EACFA,EAAOgJ,UAAUxN,KAAKqR,GAEtBo8Y,EAASztZ,KAAK,CACZkgE,mBACAytV,0BACAzkY,eAAgB7X,EAAS6X,eACzB1b,UAAW,CAAC6D,GACZwW,aAAcmqF,EACdt2F,cAAeia,EAAcA,EAAY1iB,GAAK,KAC9CozG,kBAKFrF,GACF5b,EAAW/7F,SAAQ,SAAAg8F,GACjB,IAAMy2N,EAAoBxmS,EAAiBve,MAAK,SAAAupL,GAC9C,OAAOA,EAAaj6E,eAAiBhhB,EAAWpyF,IAAMqtL,EAAaroL,aAAeA,KAEhF6jT,GAAqBA,EAAkB//S,sBACzCpc,OAAOmc,KAAKggT,EAAkB//S,sBAAsB1S,SAAQ,SAAA5G,GAC1D,IAAMkzB,EAAcmmS,EAAkB//S,qBAAqBtZ,GAAKkzB,YAChE,IAAIA,GAAeA,EAAY8vE,WAAa,EAAAkhB,mBAAmBuG,QAAWv3F,EAAYo4H,qBAAtF,CAUA,IAAI4oM,EAAmBnpV,EAAUyE,QAAO,SAAAZ,GACtC,OAAIA,EAASslB,iBAGNtlB,EAASC,aAAgBD,EAASoC,eAAiBwE,IAClD0d,GAAetkB,EAASsK,kBACzBga,EAAY1iB,KAAO5B,EAASsK,mBAC5BlZ,IAAQ4O,EAASokB,kBAChB+gU,EAAkBpxV,SAASiM,EAAS4B,QAE1C0jV,EAAiBj3V,SACnB82V,0BAAwBA,IAAxB,aAA8CG,EAAiB5jV,KAAI,SAAA6D,GAAA,OAASA,EAAM3D,QAClF0jV,EAAiBttV,SAAQ,SAACgI,GAAD,OAAcq8Y,EAAcr8Y,EAAUskB,EAAa0vE,EAAWpyF,aArBvFw6Y,EAASztZ,KAAK,CACZqW,KAAM,EAAAswG,mBAAmBuG,OACzByrN,oBAAqB7c,EAAkB//S,qBAAqBtZ,GAC5D6rN,gBAAiBwtG,EACjB9/S,UAAWvZ,EACXkzB,sBA6BVg9L,EAAetpN,SAAQ,SAACgI,GACjBmlV,EAAkBpxV,SAASiM,EAAS4B,KAAQ5B,EAASslB,iBACxD6/T,EAAkBx2V,KAAKqR,EAAS4B,IAChCy6Y,EAAcr8Y,QAGT8U,EAAOc,cAChBd,EAAOc,aAAa5d,SAAQ,SAAAke,GAC1BA,EAAWG,SAASre,SAAQ,SAACse,GAC3B,IAAIgvU,EAAmBnpV,EAAUyE,QAAO,SAAAZ,GACtC,OAAIA,EAASslB,iBAGNtlB,EAASC,aAAgBD,EAASoC,eAAiBwE,IACpD0P,EAAQlB,KAAKlV,SAAWF,EAASE,QAAWF,EAAS4tF,sBAAwBt3E,EAAQlB,KAAKlV,SAAWF,EAAS4tF,qBAAqB1tF,UACnIilV,EAAkBpxV,SAASiM,EAAS4B,QAExC0jV,EAAiBj3V,SACnB82V,0BAAwBA,IAAxB,aAA8CG,EAAiB5jV,KAAI,SAAA6D,GAAA,OAASA,EAAM3D,QAClF0jV,EAAiBttV,SAAQ,SAACgI,GAAD,OAAcq8Y,EAAcr8Y,aAI3DshN,EAAetpN,SAAQ,SAACgI,GACjBmlV,EAAkBpxV,SAASiM,EAAS4B,KAAQ5B,EAASslB,iBACxD6/T,EAAkBx2V,KAAKqR,EAAS4B,IAChCy6Y,EAAcr8Y,QAIlBshN,EAAetpN,SAAQ,SAACgI,GAAD,OAAcq8Y,EAAcr8Y,MAErDo8Y,EAASztZ,KAAK,CACZqW,KAAM,UACN4B,eAEEyjK,GACF+xO,EAASztZ,KAAK,CACZqW,KAAM,WACN4B,eAINu1Y,EAAWv1Y,GAAcw1Y,KAGpBD,GAnNU,EAsNnBI,iBAAmB,SAACliZ,EAAU0X,EAAgBrG,GAAuB,MACmB,EAAKw5F,MAApF/oG,EAD4D,EAC5DA,UAAWkuK,EADiD,EACjDA,2BAA4Br7J,EADqB,EACrBA,uBAAwB0D,EADH,EACGA,OAAQ2B,EADX,EACWA,KAC9E,IAAKlY,EAAU9N,OAEb,OACE,8BAAIm2F,UAAU,iBACZ,4CAAkB5iF,GAAG,wCAI3B,IAAMu6Y,EAAa,EAAKD,0BAClBM,EAAkBluZ,OAAOmc,KAAK0xY,GAX+B,EAa1BnpZ,SAASC,SAA3C2b,EAb4D,EAa5DA,UAAWC,EAbiD,EAajDA,MAAOC,EAb0C,EAa1CA,aACnBqzH,GAAmBz2H,EAAmBy3T,oBAAsBz3T,EAAmBuD,4BAC9EL,GAAaC,GAASC,KAAkBE,EAE/C,OAAOwtY,EAAgB96Y,KAAI,SAAAkF,GACzB,OACE,+BAAK49E,UAAW,cAAgB6lF,GAA+BmyO,EAAgBnuZ,OAAS,EAAM,wBAA0B,IAAK+C,IAAKwV,GAC/HyjK,GAA+BmyO,EAAgBnuZ,OAAS,EACvD,8BAAIm2F,UAAU,2BACZ,4CAAkB5iF,GAAG,2BADvB,MACoD,IAAA6Q,aAAY7L,EAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,IAEzH,KACHoqY,EAAWv1Y,GAAYlF,KAAI,SAACq6Y,EAAUv0Y,GACrC,GAAI,EAAK09F,MAAM4+L,wBAA0Bi4G,EAAS5/Y,YAAc4/Y,EAAS5/Y,UAAUtC,MAAK,SAAAmG,GACtF,OAAO,EAAKklG,MAAMg/L,cAAcnwS,SAASiM,EAAS4B,OAElD,OAAO,EAET,GAAsB,aAAlBm6Y,EAAS/2Y,KAAqB,CAChC,IAAMo3K,GAAkB,IAAA97K,eAAcy7Y,EAASn1Y,YAAY,GAC3D,GAAImL,EAAeknI,kBAAqB,EAAK/zC,MAAM4+L,wBAA2B,EAAK5+L,MAAM8+L,uBAAyB,EAChH,OAAO,KAET,IAAM1iF,EAAiB51M,EAAmB0B,uBAAyBjR,EAAUyE,QAAO,SAAAZ,GAAA,OAAYA,EAASoC,eAAiB25Y,EAASn1Y,cAAc,GAC3Iy+U,GAA2B,IAAA5iV,+BAA8BiJ,EAAoB41M,GAEnF,OACE,+BAAK98H,UAAW,eAAiB6gQ,EAAyBh3V,OAAS,kBAAoB,IAAK+C,IAAKoW,GAC9F69U,EAAyBh3V,OAASg3V,EAAyB3jV,KAAI,SAAAgkV,GAC9D,IAAMC,GAAe,IAAArlV,eAAcy7Y,EAASn1Y,YAAY,EAAO8+U,EAAWvpV,WAC1E,OACE,+BAAK/K,IAAKs0V,EAAWx3U,SAAW6tY,EAASn1Y,WACpC49E,UAAW,yBACT23T,EAAWv1Y,GAAYnP,OAAM,SAAAskZ,GAAA,MAA8B,aAAlBA,EAAS/2Y,QAAuB,+BAAiC,KAE/G,gCAAMw/E,UAAU,8BAA6B,4CAAkB5iF,GAAG,sCAAlE,MACCugI,EACC,gCAAM39C,UAAU,uBACd,4CAAkB5iF,GAAG,kDAErB,IAAAsL,iBAAgBw4U,EAAWx3U,SAAUxC,IAAsB,IAAA9P,cAAa+pV,EAAalqV,eAAe,OAGzG,KACL,+BAAK+oF,UAAW,yBACd23T,EAAWv1Y,GAAYnP,OAAM,SAAAskZ,GAAA,MAA8B,aAAlBA,EAAS/2Y,QAAuB,+BAAiC,KAE1G,gCAAMw/E,UAAU,8BAA6B,4CAAkB5iF,GAAG,sCAAlE,MACCugI,EACC,gCAAM39C,UAAU,uBACd,4CAAkB5iF,GAAG,kDAErB,IAAA0L,sBAAqB5B,GAAoB,IAAA9P,cAAawgL,EAAgB3gL,kBAI3E,GAAsB,YAAlBsgZ,EAAS/2Y,KAClB,OAAO,mCAAiB4B,YAAaA,EAAYxV,IAAKoW,IACjD,GAAIu0Y,EAAS/2Y,OAAS,EAAAswG,mBAAmBuG,OAC9C,OAAO,mCAAuCj1G,YAAaA,EAAYm1Y,SAAUA,EAAU3qZ,IAAKoW,IAElG,IAAMi1Y,EAAoBV,EAASltV,mBAAqB,EAAAxrD,cAAcC,MAEhEo5Y,EAAwB,SAACliT,GAA+B,IAAxBmiT,EAAwB,uDAAT,MAC9CA,GAAgBZ,EAAS5/Y,UAAU9N,QAAU0tZ,EAAS5/Y,UAAU,GAAG+nB,eACtEy4X,EAAeZ,EAAS5/Y,UAAU,IAEpC,EAAK2/Y,2BAA2BC,GAAWn1Y,EAAY+1Y,IAGzD,OACE,+BAAKn4T,UAAU,cAAcpzF,IAAKoW,GAChC,8BAAIg9E,UAAU,sBAAsBu3T,EAASO,yBAE3CG,EACI,KACA,kCAAQj4T,UAAU,wBAAwBkyF,QAASgmO,GACjD,4CAAkB96Y,GAAG,wCAG7B,8BAAI4iF,UAAW,sBACZ94E,EAAmBk1H,aAAgB7uH,EAAe8uH,2BAA8B9uH,EAAe+uH,oBAAuBzmI,EAA8C,GAAnC,mCACjI0hZ,EAAS5/Y,UAAUuF,KAAI,SAAC1B,EAAU48Y,GACjC,OAAO,mCAA2BpmY,aAAculY,EAASvlY,aACvBxW,SAAUA,EACV5O,IAAKwrZ,EACLF,sBAAuBA,iBAzTxD,EAoUnBG,iBAAmB,SAACxiZ,EAAU0X,EAAgBrG,EAAoBm6G,GAKhE,OAH0B,aAAKA,IAAkBn6G,EAAmBoxY,uBAC7D,EAAK53S,MAAM4+L,wBAA2B,EAAK5+L,MAAM8+L,wBAA0B,GAI9E,+BAAKx/M,UAAU,cAAcpzF,IAAI,iBAC/B,8BAAIozF,UAAU,qBAAqBgzT,aAAW,iBAC5C,4CAAkB51Y,GAAG,qCAEvB,8BAAI4iF,UAAW,sBACV94E,EAAmBk1H,aAAgB7uH,EAAe8uH,2BAA8B9uH,EAAe+uH,oBAAuBzmI,EAA8C,GAAnC,mCACnIwrH,EAAcnkH,KAAI,SAACq7Y,EAAUC,GAC5B,OAAO,mCAAuCD,SAAUA,EAAU1iZ,SAAUA,EAAUjJ,IAAK4rZ,SAM9F,MAxVU,EA2VnBC,SAAW,SAAC5iZ,EAAUkB,EAAYmQ,EAAoB2/J,GACpD,GAAIhxK,GAAY,EAAK6qG,MAAM/oG,UAAU9N,QAAU,EAAK62G,MAAMl2F,uBAAwB,CAEhF,GAAIq8J,EACF,OACE,+BAAK7mF,UAAU,eACb,8BAAIA,UAAU,sBAAqB,4CAAkB5iF,GAAG,6BACxD,8BAAI4iF,UAAU,qBACZ,8BAAIA,UAAU,0BACZ,+BAAKA,UAAU,+BACb,+BAAKA,UAAU,qCACb,mCAAgBtnF,KAAK,iBASnC,IAAIq6W,EAAWh8W,EAAWN,WAAW5M,OACjCkN,EAAWN,WACX,CAAC,CAAC5K,KAAM,GAAIgL,YAAaE,EAAWD,gBAElCk8W,EAAYD,EAAS19W,MAAK,SAAAuB,GAAA,OAAOA,EAAIC,YAAc,KAEzD,OACE,wCACGm8W,GAAmC,IAApBD,EAASlpX,QAAiBqd,EAAmBnK,QAAWg2W,EAAS71W,KAAI,SAACm2W,EAAWC,GAC/F,IAAMC,EAAWF,EAAUx8W,YAAYqD,QAAQ,GAC/C,OACE,+BAAK8lF,UAAU,cAAcpzF,IAAK0mX,GAChC,8BAAItzR,UAAU,sBAAsBqzR,EAAUl3W,OAAS,4CAAkBiB,GAAG,6BAC5E,8BAAI4iF,UAAU,qBACZ,8BAAIA,UAAU,0BACZ,+BAAKA,UAAU,+BACb,+BAAKA,UAAU,qCACb,gCAAMA,UAAU,6CACb,IAAAl3E,sBAAqB5B,EAAoBqsW,YAQrD,KACJx8W,EAAWI,kBACV,+BAAK6oF,UAAU,eACb,8BAAIA,UAAU,sBAAqB,4CAAkB5iF,GAAG,yCACxD,8BAAI4iF,UAAU,qBACZ,8BAAIA,UAAU,0BACZ,+BAAKA,UAAU,+BACb,+BAAKA,UAAU,qCACf,gCAAMA,UAAU,6CACb,IAAAl3E,sBAAqB5B,EAAoBnQ,EAAWI,kBAAkB+C,QAAQ,UAOvF,MAIV,OAAO,MA3ZP,EAAKiC,MAAQ,GAFI,E,oFAMjB/G,KAAKsrG,MAAMl9E,uB,4CAGSwwJ,GACpB,OAAQA,EAAUysC,uB,+BAwZlB,IAAM5qN,EAAWT,KAAKsrG,MAAM3qF,YAAc,IACpChf,GAAa,IAAA+E,iBAHZ,EAIiF1G,KAAKsrG,MAAtFnzF,EAJA,EAIAA,eAAgB8zG,EAJhB,EAIgBA,cAAes7F,EAJ/B,EAI+BA,oBAAqB91C,EAJpD,EAIoDA,eAAgBlvK,EAJpE,EAIoEA,UACrEuP,EAAqBqG,EAAezQ,SAI1C,OACE,+BAAKkjF,UAAW,uBAAyB5qF,KAAKsrG,MAAMr+E,kBAAoB,kCAAoC,KACzGs6L,EAAsB,wCAAyBvnN,KAAK2iZ,iBAAiBliZ,EAAU0X,EAAgBrG,GAC/F9R,KAAKijZ,iBAAiBxiZ,EAAU0X,EAAgBrG,EAAoBm6G,GACpEjsH,KAAKqjZ,SAAS5iZ,EAAUkB,EAAYmQ,EAAoB2/J,GACxDlvK,EAAU9N,OAAS,wCAA+B,KAClD2E,SAASC,SAAS8mT,mBAAqB,wCAAsB,U,cAiChE7vH,EAAqB,CACzBpkK,gCACApI,8CACAsK,wCACAwE,0CACAhN,oEACAisJ,2C,WAGa,IAAA9pB,aACb,IAAAj8C,UArCsB,SAACxzG,GACvB,IAAM2zH,GAAgB,aAAQ3zH,EAAMkP,UAAUD,UAAU,SAAAhT,GAAA,OAAK,aAAOA,EAAE23H,SAAU,CAACX,UAAU,OAD1D,EAEsBjzH,EAAMqY,YAAtDwpF,EAF0B,EAE1BA,WAAYhwE,EAFc,EAEdA,eAAgBE,EAFF,EAEEA,iBAC5BonJ,EAAkBn5K,EAAM8J,UAAxBqvK,eACP,MAAO,CACLlvK,UAAWjK,EAAM8J,UAAUG,UAC3B0pH,gBACA72G,uBAAwB9c,EAAMwc,UAAUM,uBACxCqO,YAAanrB,EAAMgrN,WAAW7/L,YAC9BwJ,kBAAmB30B,EAAM8J,UAAU6qB,kBACnCtM,YAAaroB,EAAMgR,YAAYqX,YAC/BxI,eAAgB7f,EAAMqN,gBACtBukS,uBAAwB5xS,EAAMo5B,wBAAwBw4Q,uBACtDE,uBAAwB9xS,EAAMo5B,wBAAwB04Q,uBACtDE,cAAehyS,EAAMo5B,wBAAwB44Q,cAC7Cr9R,iBAAkB3U,EAAM4U,YAAYD,iBACpC6L,OAAQxgB,EAAM4U,YAAY4L,OAC1B23J,2BAA4Bn4K,EAAM8J,UAAUquK,2BAC5C82C,oBAAqBjvN,EAAMgvN,qBAAqBC,oBAChDptH,aACAhwE,iBACAE,mBACAghM,qBAAsB/yN,EAAMkwO,iBAAiBnd,qBAC7C55C,oBAcuB6e,EAAzB,CAA6C2xN,K,wJCxgB/C,MACA,O,IACA,MACA,O,IACA,OAEA,QAUA,Q,IAOA,Q,IACA,SACA,QACA,S,IACA,S,IACA,OACA,Q,IACA,OACA,S,IACA,OACA,SACA,SACA,QAEA,S,IACA,SACA,Q,uDAIMqB,G,oPAQJv8Y,MAAQ,CACNw8Y,eAAe,EACfC,iBAAiB,G,EAgBnBxgL,cAAgB,WACd,EAAK1lD,SAAS,CACZimO,eAAe,EACfC,iBAAiB,IAChB,WACD,EAAKlmO,SAAS,CACZkmO,iBAAiB,OAGrB,EAAKxgM,e,EAGPygM,kBAAoB,WAAM,IAiBpB,EAjBoB,EACW,EAAKn4S,MAAjCllG,EADiB,EACjBA,SAAU+R,EADO,EACPA,eACjB,EAAKmzF,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,QAAS,CACP/tC,GAAI,+CACJu7E,YAAan9E,EAASC,YAAYmS,kBAEpCshC,QAAS,CAAC,CACRx3B,KAAM,yCACNmpF,MAAO,OACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAS,MAE5C,CACDjO,KAAM,0CACNmpF,MAAO,QACPvb,OAAA,gCAAO,uFACL,EAAKob,MAAMp/E,eAAe9lB,GAC1B,EAAKklG,MAAMt8E,sBAAsB,CAACuB,SAAS,KACvCpY,EAAezQ,SAASiW,qBAHvB,iCAIG,IAAAksG,oBAAmBzjH,EAASoC,kBAAcwqD,GAAW,GAJxD,QAML,IAAA0wH,gCAA+Bt9K,GAAUyrB,MAAK,SAAA96B,OANzC,6CAAP,iD,EAYN2sZ,gBAAkB,WAAM,IACft9Y,EAAY,EAAKklG,MAAjBllG,SACP,EAAKklG,MAAMw3S,sBAAsB,KAAM18Y,GACvC,EAAKklG,MAAM4lE,uBAAuB9qK,I,EAGpCu9Y,mBAAqB,WACnB,EAAKrmO,SAAS,CACZimO,eAAgB,EAAKx8Y,MAAMw8Y,gBAC1B,WACD70T,YAAW,WACT,EAAK3nF,MAAMw8Y,cACPprZ,OAAO0uD,iBAAiB,QAAS,EAAKi3H,mBACtC3lL,OAAO+qG,oBAAoB,QAAS,EAAK46E,qBAC5C,O,EAIPA,kBAAoB,SAAC3nL,GAEf,EAAK4Q,MAAMw8Y,gBADS,CAAC,gBAAiB,eACOtjZ,MAAK,SAAA8mP,GAAA,OAAO5wP,EAAEugB,OAAOuqI,QAAQ8lG,OAC5E,EAAKzpE,SAAS,CACZimO,eAAe,K,EAKrBK,WAAa,WACX,EAAKD,sB,EAGP36X,gBAAkB,WAChB,EAAKsiF,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,K,4GAtFnB,aAAE9xB,QAAQwqG,GAAG,UAAY8yB,iBAAkBz1H,KAAKgjO,iB,8CAIhD,aAAE7qO,QAAQ8gO,IAAI,UAAYxjG,iBAAkBz1H,KAAKgjO,eACjD7qO,OAAO+qG,oBAAoB,QAASljG,KAAK89K,qB,4CAGrBc,GACpB,OAAQA,EAAUysC,uB,+BAmFlB,IAAMnwM,GAAS,IAAAC,oBACT0oY,EAAwB,UAAOhjZ,YAE/BJ,EAAWT,KAAKsrG,MAAM3qF,YAAc,IALnC,EAOmB3gB,KAAKsrG,MADxBnzF,EANA,EAMAA,eAAgB/R,EANhB,EAMgBA,SAAU6G,EAN1B,EAM0BA,iBAAkBwN,EAN5C,EAM4CA,KAAM0/E,EANlD,EAMkDA,WAAY9vE,EAN9D,EAM8DA,iBAAkB9nB,EANhF,EAMgFA,UAAW+oQ,EAN3F,EAM2FA,cAChG1hQ,EAPK,EAOLA,qBACIkI,EAAqBqG,EAAezQ,SAE1C,GAAI1H,KAAKsrG,MAAM4+L,yBAA2BlqS,KAAKsrG,MAAMg/L,cAAcnwS,SAASiM,EAAS4B,IACnF,OAAO,EAET,IAAMsiP,EAAclkP,EAASC,YAAY3F,UAAY0F,EAASC,YAAY3F,YAAYmb,SAAW,GAC7FuwH,GAAY,EACZ65K,EAAa,KACX69F,GAAgB,IAAApvY,oBAAmBtO,EAASC,aAClD,GAAIyL,EAAmBk1H,cAAgB7uH,EAAe8uH,4BAA8B9uH,EAAe+uH,mBAAoB,CAErH,IADgC,IAAA/gI,4BAA2BC,KAAa,IAAAM,iBAAgB+B,oBAC3B,IAA9BrC,EAAS6C,iBACtCg9S,EAAa,SACR,CAIL,IAAMl1K,EAAuB3qI,EAASE,SAAW,EAAAmD,cAAcC,OAASE,EACxEq8S,GAAa,IAAA15S,oBACXnG,EAASC,YACTD,EAAS+C,SACT/C,EAASgD,gBACT,EACAhD,EACA2qI,EACA3qI,EAASoC,cAGb4jI,GAAa03Q,EAOf,IAAMt1N,GAAc,IAAAh0K,gBAAepU,EAASC,YAAaoU,EAAMtC,EAAgB/R,EAAS+C,UAClFi+S,GAAe,IAAAvsS,iBAAgBzU,EAAUqU,GAC3CyvT,GAAc,CAAC,OAAQ,SAAS/vU,SAASitT,KAAkB97C,EAC/D,GAAIllQ,EAASsK,mBAAqB2Z,EAAkB,CAClD,IAAM05X,EAAe15X,EAAiBve,MAAK,SAAAk4Y,GAAA,OAAmBA,EAAeh3Y,aAAe5G,EAASoC,cAC7Fw7Y,EAAe5oS,eAAiBh1G,EAASkkB,gBAC3C25X,EAAoBF,GAAgBA,EAAajzY,qBAAuBizY,EAAajzY,qBAAuB,KAC5GspF,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAO5B,EAASkkB,iBACjD,IAAA43F,gCAA+B9nB,EAAY6pT,EAAmB79Y,EAASsK,mBAArF2xG,aAEL6nN,GAAa,GAGjB,IAEMg6E,EAFAvpY,EAAOysS,GAA8B54H,EAUrC21N,EAAoB5hZ,EAAUtC,MAAK,SAAA0L,GAAA,OAASA,EAAM+f,iBAAmBtlB,EAAS4B,MAEpF,OACE,8BAAI4iF,UAAW,wBAA0BxkF,EAASC,YAAY0kB,UAAU9d,GAAoB,mCAAqC,KAC/H,+BAAK29E,UAAW,2BACXwhD,GAAc3rI,EAAY,kCAAoC,KAChE2F,EAAS6hJ,gBAAkB,0CAA4C,KACtE7b,GAAc03Q,EAAsD,GAAtC,sCAChC,+BAAKl5T,UAAU,+BACb,8BAAIA,UAAU,qCACX0/J,IAAgBpvO,EAAOc,aAAesuO,EAAc,MAAQ,MAlBjE45J,SACA99Y,EAASC,YAAYivM,kBACvB4uM,GAAY,IAAA92Y,sBAAqBhH,EAASC,YAAa,YAAaD,EAASC,YAAYmS,iBAAkBpS,EAASgD,iBAG/G86Y,GAAwB,mCAAa7gZ,QAAS+C,EAASC,gBAgBvDD,EAAS+Y,YACR,6BAAGyrE,UAAU,0CACV0hL,wBAAyB,CAACC,OAAQnmQ,EAAS+Y,eAC5C,KACH/Y,EAAS6hJ,kBAAoB7hJ,EAAS8hJ,qBAAuB,KAC5D,+BAAKt9D,UAAU,qCACZwhD,GAAa3rI,EACZ,gCAAMmqF,UAAU,6CACb,IAAAkxF,sBAAqBmqI,EAAY7/S,EAASC,YAAa8R,EAAgBsC,EAAK1C,WAE7E,KACH+rY,GAAiBrjZ,EAChB,gCAAMmqF,UAAU,2CAA2CkyF,QAAS98K,KAAKgpB,iBACvE,4CAAkBhhB,GAAG,6CAErB,KACH8J,EAAmB6L,sBAA4C,SAApBvX,EAASE,OAAoB,KACvE,gCAAMskF,UAAU,wCACbjwE,EADH,MAEI,IAAA3Y,cAAagH,WAAW5C,EAAS2U,uBAAyB3U,EAAS2U,oBAC/D3U,EAAS2U,oBACT3U,EAAS+C,SAAU2I,EAAmB0B,4BAOrD/S,GAAa2F,EAAS6hJ,iBAAoB7hJ,EAAS0lB,wBAUhD1lB,EAAS6hJ,iBAAmB7hJ,EAAS0lB,wBAA0B,KACjE,+BAAK8+D,UAAU,0EACX,gCAAMA,UAAU,6BAA6BkyF,QAAS98K,KAAK2jZ,oBACxDv9Y,EAASC,YAAY0kB,UAAU9d,GAC5B,4CAAkBjF,GAAG,2CACrB,4CAAkBA,GAAG,2CAE5BkiU,EACC,gCAAMt/O,UAAU,kBAAkBkyF,QAAS98K,KAAK0jZ,iBAC9C,4CAAkB17Y,GAAG,wCAErB,KACJ,gCAAM4iF,UAAU,iBAAiBkyF,QAAS98K,KAAKyjZ,mBAC3C,4CAAkBz7Y,GAAG,2CAtB3B,+BAAK4iF,UAAU,kCACb,kCAAQA,UAAW,uCAChB5qF,KAAK+G,MAAMw8Y,cAAgB,0BAA4B,IAClDzmO,QAAS98K,KAAK2jZ,qBACrBz5E,EACC,kCAAQt/O,UAAU,sCAAsCkyF,QAAS98K,KAAK0jZ,kBACpE,KACJ,kCAAQ94T,UAAU,wCAAwCkyF,QAAS98K,KAAKyjZ,qBAoB1EhjZ,EAgBE,KAfF,+BAAKmqF,UAAU,uCAEZwhD,EACGy3Q,EACE,mCAAY59F,YAAaA,EAAY7/S,SAAUA,IAC9C,gCAAMwkF,UAAU,UACd,IAAAkxF,sBAAqBmqI,EAAY7/S,EAASC,YAAa8R,EAAgBsC,EAAK1C,WAEjF,KACH+rY,EACC,gCAAMl5T,UAAU,sBAAsBkyF,QAAS98K,KAAKgpB,iBACpD,4CAAkBhhB,GAAG,6CAEnB,QAIThI,KAAK+G,MAAMy8Y,iBAAoBp9Y,EAAS6hJ,iBAAoB7hJ,EAAS0lB,wBAKlE,KAJF,mCAAY1lB,SAAUA,EACV6Q,YAAa7Q,EAASC,YAAY1C,UAAUqE,GAC5Cu7Y,cAAevjZ,KAAK+G,MAAMw8Y,cAC1Ba,YAAapkZ,KAAK4jZ,aAE/BO,EAAoB,mCAAkCE,eAAgBj+Y,EAChB08Y,sBAAuB9iZ,KAAKsrG,MAAMw3S,wBAA2B,U,gBAtQnH5gQ,UAAY,CACjB97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,WAC7C6pS,sBAAuB,UAAU/jO,KAAK9lE,WACtCqyJ,cAAe,UAAUlpH,M,GA0RvBkuC,EAAqB,CACzBpkK,gCACA8C,8CACAhG,kCACA4J,0CAEAhN,oEACA9B,8CACAU,wDACAgC,4DACA2G,kCAEA0kJ,0CACAX,iD,WAGa,IAAAnpB,aACb,IAAAj8C,UAlCsB,SAACxzG,GAAU,MACMA,EAAMqY,YAAtC0Z,EAD0B,EAC1BA,iBAAkB8vE,EADQ,EACRA,WACzB,MAAO,CACL53F,UAAWjK,EAAM8J,UAAUG,UAC3B6S,uBAAwB9c,EAAMwc,UAAUM,uBACxCuL,YAAaroB,EAAMgR,YAAYqX,YAC/BxI,eAAgB7f,EAAMqN,gBACtBukS,uBAAwB5xS,EAAMo5B,wBAAwBw4Q,uBACtDI,cAAehyS,EAAMo5B,wBAAwB44Q,cAC7Cr9R,iBAAkB3U,EAAM4U,YAAYD,iBACpCktF,aACA9vE,mBACAghM,qBAAsB/yN,EAAMkwO,iBAAiBnd,qBAC7CzhN,qBAAsBtR,EAAMqR,cAAcC,wBAqBnB0mL,EAAzB,CAA6CgzN,K,6FC3V/C,O,OACA,O,IACA,MACA,OACA,Q,mDAEA,IAAMgB,EAAa,SAACh5S,GAAU,IAEvB7wF,EAAsG6wF,EAAtG7wF,KAAMrU,EAAgGklG,EAAhGllG,SAAUg+Y,EAAsF94S,EAAtF84S,YAAab,EAAyEj4S,EAAzEi4S,cAAev/P,EAA0D14C,EAA1D04C,WAAY/sI,EAA8Cq0F,EAA9Cr0F,YAAajK,EAAiCs+F,EAAjCt+F,WAAYof,EAAqBk/E,EAArBl/E,kBAF1D,GAGI,IAAA+0H,UAAS,IAHb,qBAGrBr2H,EAHqB,KAGXy5X,EAHW,MAK5B,IAAA5iS,YAAU,WACR4iS,EAAYn+Y,EAAS0kB,UAAY,MAChC,CAACk5H,EAAY/sI,EAAajK,IAE7B,IAmBMw3Y,EAAkB,WACtBp4X,EAAkB13B,OAAO+2B,OAAO,GAAIrlB,EAAU,CAC5C0kB,cACE,GACJs5X,KAGF,OACE,+BAAKx5T,UAAW,gBAAkB9/D,IAAay4X,EAAgB,2BAA6B,KACzFA,EAAgB,wBAA0B,KAE3C,oCAAU34T,UAAU,qCACV0mD,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,0CACrC9Q,MAAO4zB,EACP40M,QA1BM,WACd50M,IAAay4X,GACfiB,KAyBU7kL,OArBC,WACbvzM,EAAkB13B,OAAO+2B,OAAO,GAAIrlB,EAAU,CAC5C0kB,cACE,IAmBQgrM,SAnCO,SAAC3/N,GACpBouZ,EAAYpuZ,EAAEugB,OAAOxf,OAChBqsZ,GACHiB,OAiCA,kCAAQ55T,UAAU,oDAAoDkyF,QAAS0nO,GAC7E,4CAAkBx8Y,GAAG,8CAM7Bs8Y,EAAWpiQ,UAAY,CACrB97I,SAAU,UAAUzO,OAAOshH,WAC3BhiG,YAAa,UAAU2hG,OAAOK,WAC9BmrS,YAAa,UAAUrlO,MAGzB,IAMMuR,EAAqB,CACzBlkK,uC,WAGa,IAAA27H,aACb,IAAAj8C,UAXsB,SAACxzG,EAAOqvP,GAC9B,MAAO,CACL36O,WAAY26O,EAASvhP,SAASoC,gBASP8nL,EAAzB,CAA6Cg0N,K,iGC3E/C,MACA,OACA,O,IACA,M,IAEA,SACA,Q,IACA,S,mDAGA,IAAMG,EAAmC,SAACn5S,GAAU,IAE3C+4S,EAA+F/4S,EAA/F+4S,eAAgB9hZ,EAA+E+oG,EAA/E/oG,UAAW4V,EAAoEmzF,EAApEnzF,eAAgB1X,EAAoD6qG,EAApD7qG,SAAUikZ,EAA0Cp5S,EAA1Co5S,eAAgBC,EAA0Br5S,EAA1Bq5S,uBAEtE7yY,EAAqBqG,EAAezQ,SAEtCk9Y,EAAmBriZ,EAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAM+f,iBAAmB24X,EAAer8Y,MAEzF,OAAImQ,EAAe8/F,sBAMjB2sS,EAAmBA,EAAiB59Y,QAAO,SAAA2E,GAAA,MAA0B,eAAjBA,EAAMrF,WACpC7R,OACb,KAKT,+BAAKm2F,UAAU,wBACb,+BAAKA,UAAU,4BACb,4CAAkB5iF,GAAG,+BAEvB,8BAAI4iF,UAAW,sBACV94E,EAAmBk1H,aAAgB7uH,EAAe8uH,2BACjD9uH,EAAe+uH,oBAAuBzmI,EAA8C,GAAnC,mCACpDmkZ,EAAiB98Y,KAAI,SAAA1B,GACpB,OAAIs+Y,EACK,iDAAyBt+Y,SAAUA,EACV5O,IAAK4O,EAAS4B,IACV28Y,EAF7B,CAGyBr5I,eAAe,KAE1C,mCAA2BllQ,SAAUA,EACV5O,IAAK4O,EAAS4B,GACd86Y,sBAAuB,kBAAM,MAC7Bx3I,eAAe,UAO3Dm5I,EAAiCviQ,UAAY,CAC3CmiQ,eAAgB,UAAUzqW,MAAV,qBAAmCq/D,Y,WAgBtC,IAAAnN,UAbS,SAACxzG,GAAU,IAC1BiK,EAAajK,EAAM8J,UAAnBG,UACA9B,EAAYnI,EAAMgR,YAAlB7I,SAEP,MAAO,CACL8B,YACA4V,eAAgB7f,EAAMqN,gBACtBlF,cAIuB,GAEZ,CAA6CgkZ,I,mHCxE5D,O,OACA,O,IACA,MACA,OACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,SACA,SACA,SACA,QACA,QACA,Q,IACA,S,mDAEA,IAAMI,EAA0B,SAACv5S,GAAU,IA6BnC,EA3BDllG,EACiFklG,EADjFllG,SAAUsW,EACuE4uF,EADvE5uF,QAASooY,EAC8Dx5S,EAD9Dw5S,oBAAqB93Y,EACyCs+F,EADzCt+F,WAAYC,EAC6Bq+F,EAD7Br+F,iBAAkB4kK,EACWvmE,EADXumE,oBAAqBy5F,EACVhgK,EADUggK,cAC9F1jF,EAAoFt8E,EAApFs8E,eAAgB72K,EAAoEu6F,EAApEv6F,UAAW2Z,EAAyD4gF,EAAzD5gF,YAAa24L,EAA4C/3G,EAA5C+3G,gBAAiB9gN,EAA2B+oG,EAA3B/oG,UAAWk/Y,EAAgBn2S,EAAhBm2S,aAH7B,GAKT,IAAAtgQ,UAAS,IALA,qBAKlCh4I,EALkC,KAKxB47Y,EALwB,QAMC,IAAA5jQ,UAAS,IANV,qBAMlCoiQ,EANkC,KAMnByB,EANmB,KAQnCC,EAAwB,WAC5B,IAAMhZ,GAAcsX,EACpByB,EAAiB/Y,GACjBv9S,YAAW,WACTu9S,EACI9zY,OAAO0uD,iBAAiB,QAASi3H,GACjC3lL,OAAO+qG,oBAAoB,QAAS46E,KACvC,IAOCA,EAAoB,SAACl9E,GAErB2iT,IADoB,CAAC,gBAAiB,oBACJtjZ,MAAK,SAAA8mP,GAAA,OAAOnmJ,EAAMlqF,OAAOuqI,QAAQ8lG,OACrEi+J,GAAiB,IAIfE,GAAA,gCAAiC,uFACjCl4Y,IAAeC,EADkB,iCAE7B,IAAAq2K,mBAAkBt2K,GAFW,OAGnC6kK,EAAoB7kK,IACpB,IAAAg8K,6BAA4Bh8K,GAJO,gCAM9B5W,QAAQC,WANsB,kDAAjC,4CAUA8uZ,EAAmB/+Y,EAASE,SAAW,EAAAmD,cAAcC,OAAS4hQ,GAAiBm2I,EAC/E0C,EAAoB5hZ,EAAUtC,MAAK,SAAA0L,GAAA,OAASA,EAAM+f,iBAAmBtlB,EAAS4B,MAEpF,OACE,+BAAK4iF,UAAW,MAAQ62T,EAAe,aAAe,KACpD,+BAAK72T,UAAU,WACb,mCAAqCxkF,SAAUA,EACV0+Y,oBAAqBA,EACrBn1S,WAAY8xS,EACZz0Y,WAAYA,IACjD,+BAAK49E,UAAU,yBACb,+BAAKA,UAAU,YAAW,4CAAkB5iF,GAAG,+BAC/C,+BAAK4iF,UAAU,WACb,mCAAgBxkF,SAAUA,EAAUsW,QAASA,EAC7BvT,SAAUA,EACV6D,WAAYA,EACZ46K,eAAgBA,EAChB72K,UAAWA,EACX2Z,YAAaA,EACb24L,gBAAiBA,EACjB1zG,WAAY27J,GAAiBm2I,IAE5C0D,qBACG,KACA,mCAAsB/+Y,SAAUA,EACVsW,QAASA,EACT1P,WAAYA,EACZk4Y,+BAAgCA,EAChCt9N,eAAgBA,EAChBy7B,gBAAiBA,EACjBtyM,UAAWA,IACrC,kCAAQ65E,UAAW,6BAChBxkF,EAAS8kD,SAAW9kD,EAAS6hJ,gBAAkB,uBAAyB,IACnEnlE,SAAU18E,EAAS8kD,SAAW9kD,EAAS6hJ,gBAAiB60B,QAASmoO,MAG7E,mCAAkB7+Y,SAAUA,EACVsW,QAASA,EACT0oY,kBAAmBL,EACnBp1S,WAAY27J,GAAiBm2I,EAC7ByD,+BAAgCA,IAClD,mCAAe9+Y,SAAUA,EAAU+C,SAAU/C,EAAS+C,YAEvD/C,EAAS8kD,SAAW9kD,EAAS6hJ,gBAAkB,KAAQ,+BAAKr9D,UAAU,WACrE,+BAAKA,UAAU,4BACf,+BAAKA,UAAU,yBACb,mCAAYxkF,SAAUA,EACV6Q,YAAa7Q,EAASC,YAAY1C,UAAUqE,GAC5Cu7Y,cAAeA,EACfa,YAtED,WACjBa,QAuEI,+BAAKr6T,UAAU,4BAEhBu5T,EAAoB,mCAAkCE,eAAgBj+Y,EAChBs+Y,gBAAgB,EAChBC,uBAAwB,CACtBjoY,UACA1P,aACA46K,iBACA72K,YACA2Z,cACA24L,kBACAyhM,uBAEFhC,sBAAuB,kBAAM,QAAU,OAKpG+B,EAAwB3iQ,UAAY,CAClC97I,SAAU,UAAUwzC,MAAV,qBACVl9B,QAAS,UAAU/kB,OAAOshH,WAC1B6rS,oBAAqB,UAAU/lO,KAAK9lE,WACpCjsG,WAAY,UAAU4rG,OAAOK,WAC7B2uE,eAAgB,UAAUplJ,OAE1B6gL,gBAAiB,UAAUzpK,MAAV,4BACjBlvB,YAAa,UAAUkvB,MAAV,wBACb7oC,UAAW,UAAU6nG,OACrB0yJ,cAAe,UAAUlpH,KACzBq/P,aAAc,UAAUr/P,MAG1B,IASMkuC,EAAqB,CACzBze,2C,WAGa,IAAA/lE,UAbS,SAACxzG,GAGvB,MAAO,CACL2U,iBAHyB3U,EAAM4U,YAA1BD,iBAIL1K,UAHkBjK,EAAM8J,UAAnBG,aAW+B+tL,EAAzB,CAA6Cu0N,I,wGC1J5D,O,OACA,O,IACA,MACA,QACA,QACA,UACA,QACA,S,mDAEA,IAAMQ,EAAsC,SAAC/5S,GAAU,IAEhDllG,EAA8GklG,EAA9GllG,SAAU8lB,EAAoGo/E,EAApGp/E,eAAgB44X,EAAoFx5S,EAApFw5S,oBAAqB93Y,EAA+Ds+F,EAA/Dt+F,WAAYojK,EAAmD9kE,EAAnD8kE,gBAAiBt+J,EAAkCw5F,EAAlCx5F,mBAAoB69F,EAAcrE,EAAdqE,WAE/F21S,GAAsB,IAAAvlQ,aAAYqwB,IAExC,IAAAzuD,YAAU,WACJyuD,GAAmBA,EAAgBuhO,aAAe2T,GAAuBA,EAAoB/X,YAC5F+X,EAAoBl/Y,UAAak/Y,EAAoBl/Y,SAAS4B,KAAO5B,EAAS4B,MACjF,IAAAwlY,+BAA8BxgY,EAAYkf,GAC1Cq5X,OAED,CAACn1O,IAEJ,IAAM,EAAAm1O,GAAA,gCAAiB,uFACrBn/Y,EAAS8kD,QAAU45V,EAAoB1+Y,GAAY8lB,EAAe9lB,IAC9D0L,EAAmB6L,qBAFF,iCAGb,IAAAksG,oBAAmBzjH,EAASoC,cAHf,QAKrB,IAAAk7K,gCAA+Bt9K,GAAUyrB,MAAK,SAAA96B,OALzB,kDAAjB,4CAkBN,OACE,+BAAK6zF,UAAU,2BACZxkF,EAAS6hJ,gBAAkB,KAAO,kCAAQr9D,UAAU,0BAA0BkyF,QAZzD,WACxB,OAAIntE,MAGA,IAAA29R,qBAAoBlnY,EAAU,KAAM4G,GAAY,SAGpDu4Y,UAUJF,EAAoCnjQ,UAAY,CAC9C97I,SAAU,UAAUwzC,MAAV,qBACVkrW,oBAAqB,UAAU/lO,KAAK9lE,WACpCjsG,WAAY,UAAU4rG,OAAOK,WAC7BtJ,WAAY,UAAUyyC,MAGxB,IASMkuC,EAAqB,CACzBpkK,iC,WAGa,IAAA4/E,UAbS,SAACxzG,GAGvB,MAAO,CACL83K,gBAHwB93K,EAAMwc,UAAzBs7J,gBAILt+J,mBAHyBxZ,EAAMqN,gBAAgB+B,YAWX4oL,EAAzB,CAA6C+0N,I,kICpE5D,MACA,O,IACA,MAEA,S,IACA,QACA,SACA,SACA,Q,uDAEMG,G,oNAQK,MAE2GxlZ,KAAKsrG,MAAhHrgG,EAFA,EAEAA,SAAU6G,EAFV,EAEUA,mBAAoBpH,EAF9B,EAE8BA,iBAAkBG,EAFhD,EAEgDA,gBAAiB46Y,EAFjE,EAEiEA,iBAAkBz6Y,EAFnF,EAEmFA,qBAEpFg/Q,GAAgB,IAAAv7F,kBAAiB/jL,EAAkBG,EAAiBI,GAAU,EAAOD,GAE3F,OAAIy6Y,GACK,IAAA/xY,sBAAqB5B,EAAoBk4Q,GAIhD,8BAAIp/L,UAAU,YACZ,+BAAKA,UAAU,uCACb,kCAAQA,UAAW,eAAiB3/E,EAASsgH,SAAW,wBAA0B,IAC1EuxD,QAAS98K,KAAK6nR,6BAExB,+BAAKj9L,UAAU,yDAAyDkyF,QAAS98K,KAAK6nR,2BACnF58Q,EAASsgH,SAAWtgH,EAASxU,KAAO,MAEtCwU,EAASsgH,SACR,+BAAK3gC,UAAU,6DACZ,IAAAl3E,sBAAqB5B,EAAoBk4Q,IAE1C,U,gBA7BH9nI,UAAY,CACjBj3I,SAAU,UAAU2uC,MAAV,qBACV/uC,gBAAiB,UAAU+uC,MAAV,6BACjB6rW,iBAAkB,UAAUrjQ,M,GA4C1BkuC,EAAqB,CACzBz8D,2C,WAGa,IAAA/nB,UAhBS,SAACxzG,GAAU,MACgBA,EAAMsS,oBACvD,MAAO,CACLF,iBAH+B,EAC1BA,iBAGLM,qBAJ+B,EACRA,qBAIvB8G,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CnF,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1BE,gBAAiBnP,EAAMwc,UAAUrN,mBAQG6oL,EAAzB,CAA6Ck1N,I,wGC/D5D,O,OACA,OACA,O,IACA,M,IACA,O,IAEA,SACA,QACA,QACA,S,mDAEA,IAAME,EAA8B,SAACp6S,GAAU,IAEtCq6S,EACoEr6S,EADpEq6S,kBAAmBjpY,EACiD4uF,EADjD5uF,QAASkpY,EACwCt6S,EADxCs6S,wBAAyBC,EACev6S,EADfu6S,OAAQC,EACOx6S,EADPw6S,WAAY94Y,EACLs+F,EADKt+F,WAAYyN,EACjB6wF,EADiB7wF,KAAMtC,EACvBmzF,EADuBnzF,eAChGyvK,EAAyEt8E,EAAzEs8E,eAAgB72K,EAAyDu6F,EAAzDv6F,UAAW2Z,EAA8C4gF,EAA9C5gF,YAAa24L,EAAiC/3G,EAAjC+3G,gBAAiBo+L,EAAgBn2S,EAAhBm2S,aAHd,GAIX,IAAAtgQ,UAAS,IAJE,qBAItC5+I,EAJsC,KAI3BwjZ,EAJ2B,MAM7C,IAAApkS,YAAU,WACRokS,0BAAiBJ,KACZA,EAAkBlxZ,QACrBuxZ,GAAiB,KAGlB,CAACJ,EAAyBC,EAAQC,IAErC,IAAME,EAAmB,SAACC,GACxB,IAAMC,EAAuBD,EAAe1jZ,EAAY,GACxDwjZ,0BAAiBG,GAAjB,CAAuC,CACrCl+Y,GAAI,UAAKqa,KACT6oC,SAAS,EACT/hD,SAAU,EACV7C,OAAQoW,EAAQlB,KAAKlV,YAInBw+Y,EAAsB,SAAC1+Y,GAC3B,IAAMwH,EAAQrL,EAAUoa,WAAU,SAAAhR,GAAA,OAASA,EAAM3D,KAAO5B,EAAS4B,MAC7D4F,GAAS,GACXrL,EAAU5M,OAAOiY,EAAO,GAE1Bm4Y,0BAAiBxjZ,MAGb4jZ,EAA4B,CAAC,OAAQ,yBAA0B,SAAShsZ,SAASuiB,EAAQlB,KAAKlV,SAC/Fm7Y,EAEL,OACE,wCACE,8BAAI72T,UAAW,+CAAiD62T,EAAe,aAAe,KAC3F/2X,GACG,IAAAioJ,oBAAmBjoJ,IACnB,IAAA5O,qBAAoBY,EAAQlB,KAAMf,EAAMtC,IAE9C,8BAAIyyE,UAAW,qBAAwBroF,EAAU9N,OAAwC,GAA/B,+BACvD8N,EAAUuF,KAAI,SAAC1B,EAAU4iP,GACxB,OAAO,mCAAyB5iP,SAAUA,EACVsW,QAASA,EACTllB,IAAKwxP,EACLh8O,WAAYA,EACZ83Y,oBAAqBA,EACrBl9N,eAAgBA,EAChB72K,UAAWA,EACX2Z,YAAaA,EACb+2X,aAAcA,EACdp+L,gBAAiBA,QAGpD8iM,GAA6B5jZ,EAAU9N,OAAS,KAC/C,+BAAKm2F,UAAU,8BACb,kCAAQA,UAAU,mCAAmCkyF,QAASkpO,GAC5D,4CAAkBh+Y,GAAG,yCAQjC09Y,EAA4BxjQ,UAAY,CACtCxlI,QAAS,UAAU/kB,OAAOshH,WAC1B0sS,kBAAmB,UAAUtvY,MAAM4iG,WACnCjsG,WAAY,UAAU4rG,OAAOK,WAC7B2uE,eAAgB,UAAUplJ,OAE1B6gL,gBAAiB,UAAUzpK,MAAV,4BACjBlvB,YAAa,UAAUkvB,MAAV,wBACb7oC,UAAW,UAAU6nG,OACrB6oS,aAAc,UAAUr/P,M,WAgBX,IAAA2F,aACb,IAAAj8C,UAdsB,SAACxzG,EAAOqvP,GAC9B,MAAO,CACLi+J,wBAAyBj+J,EAASg+J,kBAAkBlxZ,OACpDoxZ,OAAQl+J,EAASg+J,kBAAkB79Y,KAAI,SAAC1B,GAAD,OAAcA,EAAS4B,MAAIqL,OAClEyyY,WAAYn+J,EAASg+J,kBAAkB79Y,KAAI,SAAC1B,GAAD,OAAcA,EAAS8yD,UAAQ7lD,OAC1E8E,eAAgB7f,EAAMqN,mBAIC,GAKzB,CAA6C+/Y,K,6FCxG/C,O,OACA,O,IACA,MACA,O,IAEA,SACA,S,mDAEA,IAAMU,EAAkB,SAAC96S,GAAU,IAE1Bt1F,EAAuCs1F,EAAvCt1F,aAAczT,EAAyB+oG,EAAzB/oG,UAAWyK,EAAcs+F,EAAdt+F,WAFC,GAGS,IAAAm0I,WAAS,GAHlB,qBAG1BklQ,EAH0B,KAGXC,EAHW,QAIT,IAAAnlQ,YAAfolQ,GAJwB,qBAK3BvjM,GAAc,IAAA3iE,cAAY,kBAAMkmQ,EAAY,MAAK,IAEjD58H,EAAmBpnR,EAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAMnD,eAAiBwE,GAAcrB,EAAMrF,OAAOnM,SAAS,iBACxGiM,EAAWujR,EAAiB,GAE5BL,GAA0B,IAAAF,4BAA2BhjR,EAAU4P,GACrE,IAAKszQ,IAA4BA,EAAwB70R,OACvD,OAAO,KAGT,IAAM2lF,EAAS,GAMf,OALIisU,IAEFjsU,EAAOv6E,OAA2C,GAAjCypR,EAAwB70R,OAAe,IAIxD,+BAAKm2F,UAAU,0DACb,+BAAKA,UAAW,WAAay7T,EAAgB,mBAAqB,IAAKhyY,MAAO+lE,GAC5E,gCAAMwQ,UAAU,iBACd,4CAAkB5iF,GAAG,mBAEvB,mCAAqB0U,QAAS,CAAClB,KAAMpV,EAASC,YAAY3F,aACrC4oR,wBAAyBA,EACzBjqD,aAAcrc,EACd58M,SAAUA,EACVujR,iBAAkBA,EAClB38Q,WAAYA,KAEnC,kCAAQ49E,UAAU,+BAA+BkyF,QAAS,kBAAMwpO,GAAkBD,KAChF,4CAAkBr+Y,GAAIq+Y,EAAgB,sBAAwB,0BAMtED,EAAgBlkQ,UAAY,CAC1Bl1I,WAAY,UAAU4rG,OAAOK,Y,WAahB,IAAA8uC,aACb,IAAAj8C,UAXsB,SAACxzG,GACvB,MAAO,CACL0d,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtBpD,UAAWjK,EAAM8J,UAAUG,aAIJ,GAGzB,CAA6C6jZ,K,kIChE/C,M,IACA,MACA,OACA,OAEA,Q,IAGA,QACA,QACA,Q,IACA,OACA,S,uDAEMI,G,6OAiBJC,iBAAmB,WACjB,IAAMC,EAAa,GAEb/1S,EADgB,EAAKrF,MAAMq7S,cACIlyZ,OAC/BmyZ,EAAYzuZ,OAAOwqD,YAAc,KAElCxqD,OAAO+xD,aAAe,KACpBymD,GAAkB,EAFrB,EAGE,EACN,GAAKA,EAAiBi2S,GAAc,EAAKt7S,MAAM3qF,aAAe,IAC5D,IAAK,IAAIpsB,EAAI,EAAGA,GAAKqyZ,EAAWj2S,EAAep8G,IAC7CmyZ,EAAW3xZ,KACT,8BAAI61F,UAAU,iDAAiDpzF,IAAK,QAAQjD,KAIlF,OAAOmyZ,G,6IAGA,aACwB1mZ,KAAKsrG,MAA7BnzF,EADA,EACAA,eAAgBsC,EADhB,EACgBA,KACjB3I,EAAqBqG,EAAezQ,SAC1C,OACE,+BAAKkjF,UAAW,YAAc5qF,KAAKsrG,MAAM7qG,SAAW,oBAAsB,KACvET,KAAKsrG,MAAM7qG,SACV,8BAAImqF,UAAW,kBACb,4CAAkB5iF,GAAG,2CAErB,KAEJ,8BAAI4iF,UAAU,iBACX5qF,KAAKsrG,MAAMq7S,cAAc7+Y,KAAI,SAAC1B,EAAUwH,GAEvC,IAAIw+H,GAAY,GACZt6H,EAAmBk1H,aAAgB7uH,EAAe8uH,2BAA8B9uH,EAAe+uH,sBAC5Fp1H,EAAmBy3T,oBAAwBnwU,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,cAAmB9O,EAASC,YAAY1C,UAAUgS,UACxK,EAAK21F,MAAMl2F,0BAIfg3H,GAAY,GAGhB,IAAM03Q,GAAiB,EAAKx4S,MAAMl2F,wBAA2BtD,EAAmBy3T,sBAAwBnwU,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,eAC/KpD,EAAmBk1H,cAAgB5gI,EAASC,YAAY1C,UAAUgS,SAEjEtB,EAAQ,CACZy3E,wBAAwB,IAAA1oF,qBAAoBgD,EAASC,YAAa,EAAAoqE,gBAAgBE,QAAlF,KAEInuE,GAAQ,IAAA+J,oBAAmBnG,EAASC,YAAa,GACvD,OACE,8BAAIukF,UAAU,sBAAsBpzF,IAAK4O,EAASC,YAAYwV,SAASjO,EAAOyG,MAAOA,EACjFyoK,QAAS,kBAAM,EAAKw7H,oBAAoBlyS,EAASC,YAAa,yCAA0C,GAAI,KAAMD,KACpH,+BAAKwkF,UAAU,4BACb,mCAAavnF,QAAS+C,EAASC,cAC9B,EAAKilG,MAAM7qG,UAAY2rI,EACpB,qCAAO,IAAA0vC,sBAAqBt5K,EAAO4D,EAASC,YAAa8R,EAAgBsC,EAAK1C,WAC9E,KACH,EAAKuzF,MAAM7qG,UAAYqjZ,EACtB,gCAAMl5T,UAAU,iBACd,4CAAkB5iF,GAAG,qCAErB,UAKXhI,KAAKymZ,mBAAmB3+Y,KAAI,SAAA++Y,GAAA,OAAaA,W,gBAxE3C3kQ,UAAY,CACjBzhJ,SAAU,UAAU2hJ,KACpBukQ,cAAe,UAAUtwY,MAAM4iG,Y,GAqF7Bq3E,EAAqB,CACzBxsK,8CACAU,wDACAoB,oEACAuH,kCACAyF,2C,WAGa,IAAAm1H,aACb,IAAAj8C,UAjBsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtByP,uBAAwB9c,EAAMwc,UAAUM,uBACxCuL,YAAaroB,EAAMgR,YAAYqX,eAaR2vK,EAAzB,CAA6Ck2N,K,8EC1H/C,I,EAAA,O,oCACA,OACA,OACA,Q,WAmCe,IAAAz+P,aACb,IAAAj8C,UATsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAIC,GAGzB,EAlCwB,SAAC2lG,GAAU,IAE5B7wF,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAeb,OACE,+BAAKyyE,UAAU,cACb,gCAAMA,UAAU,oBAChB,+BAAKA,UAAU,qBAAqB0hL,wBAAyB,CAACC,OAhBrC,WAC3B,IAAKp0P,EAAeE,SAAWF,EAAeG,gBAAkBmC,EAAK1C,SAAU,CAC7E,GAAoB,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,uCAC3C,OAAO0C,EAAK1C,SAAS,uCAChB,GAAoB,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,sDAClD,OAAO0C,EAAK1C,SAAS,sDAChB,GAAII,EAAeE,QACxB,6BAGJ,OAAOF,EAAezQ,SAASsrT,kBAMyCG,Y,kICzB5E,MACA,OACA,Q,IACA,MACA,O,IAEA,SAEA,QAOA,Q,IAEA,Q,IACA,SACA,S,IACA,S,IACA,S,IACA,S,IACA,OACA,S,IAEA,SACA,SACA,UACA,Q,IACA,S,uDAEM2zF,G,6OAEJC,YAAc,K,EACdC,WAAa,K,EAObx9E,gBAAkB,WAChB,UAAUroS,eAAe,sBACzB,EAAKkoS,kB,EAGPtnG,OAAS,WACP,OAAQ,EAAKz2H,MAAMl+E,cACjB,IAAK,aACH,EAAKk+E,MAAM9kF,8BAA6B,GACxC,EAAA0L,YAAYn9B,KAAK,cACjB,MACF,IAAK,eACH,EAAAm9B,YAAYn9B,KAAK,gBACjB,MACF,IAAK,YACL,SACiB,IAAAomB,oBACRa,cAAe,IAAAynM,qBAAsB,EAAAvxL,YAAYn9B,KAAK,aAC7D,EAAKu2G,MAAMxnF,uBAAsB,EAAM,EAAKwnF,MAAMrtF,gBAItD,EAAKqtF,MAAMn+E,gBAAgB,K,EAG7B85X,qBAAuB,WAAM,MACkD,EAAK37S,MAA3EouS,EADoB,EACpBA,wBAAyBiN,EADL,EACKA,cAAex8X,EADpB,EACoBA,eAAgBgwE,EADpC,EACoCA,WAC/D,GAAIu/S,EACF,OAAO,mCAAqBiN,cAAeA,EAAelmZ,UAAU,IAEtE,IAAMya,GAAS,IAAAC,oBACf,IAAKD,EAAOia,YACV,OAAO,KAET,IAAI,IAAA8kF,uBAAsB9f,EAAYhwE,GACrC,OAAO,wCAER,IAAM+8X,EAAWxyZ,OAAOmc,KAAKqK,EAAOsD,OAAO,GAC3C,OAAO,mCAA4Bi/J,WAAYviK,EAAOsD,MAAM0oY,M,gGAGrD,aACyElnZ,KAAKsrG,MAA9EnzF,EADA,EACAA,eAAgBwpK,EADhB,EACgBA,kBAAmB+3N,EADnC,EACmCA,wBAAyB5oR,EAD5D,EAC4DA,UAC7Dh/G,EAAqBqG,EAAezQ,SAEpCy/Y,EAAqBnnZ,KAAKsrG,MAAM24R,mBAAqBjkY,KAAKsrG,MAAM5gG,iBAAiBjW,SACjF2E,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAEjD8xY,EAAc/mZ,KAAKmpU,iBACnBi+E,EACJ,kCAAQx8T,UAAU,gDACVkyF,QAAS,kBAAMiqO,EAAYjqO,QAAQ,QACnC98B,IAAK,SAACkkI,GAAD,OAAU,EAAK6iI,YAAc7iI,IACxC,4CAAkBl8Q,GAAI++Y,EAAY39E,YAGhCi+E,EACJ,kCAAQz8T,UAAU,gDACVkyF,QAAA,gCACN,4CAAkB90K,GAAI,2BAI1B,OACE,+BAAK4iF,UAAW,gBAAkB8uT,EAA0B,+BAAiC,KAC1FA,EACG,8BAAI9uT,UAAU,uBAAsB,4CAAkB5iF,GAAG,2CACzD,KACJ,+BAAK4iF,UAAU,sBACb,+BAAKA,UAAU,2BAA2B5qF,KAAKinZ,wBAC/C,+BAAKr8T,UAAW,4BACbu8T,IAA0D,IAAnC/tZ,SAASC,SAAS6b,aAA0B,kDAAoD,KACtHwkY,GAA4ByN,IAA0D,IAAnC/tZ,SAASC,SAAS6b,aAAgF,GAAtD,sDAChGpD,EAAmBk1H,aAAe0yQ,IAA4BvhY,EAAe+uH,mBAC5E,+BAAKt8C,UAAU,kCACb,yCAEA,KACJ,+BAAKA,UAAU,oCACX8uT,GAA4ByN,EAA2C,KAAtB,wCACjDxlO,EACA,kCAAQ/2F,UAAU,0EACVkyF,QAAS98K,KAAK+hO,QACpB,4CAAkB/5N,GAAG,oCAHH,KAMrBm/Y,EAAqB,wCAA0B,KAC/C/tZ,SAASC,SAASiwU,qBAAuBnxT,EAAeG,cAAgB+uY,EAAoB,KAC5FjuZ,SAASC,SAASiwU,sBAAwBnxT,EAAeG,cAEtD,mCAAagvY,kBAAmBtnZ,KAAKsrG,MAAM2lE,4BAC9Bs2O,eAAgB,IAChBC,qBAAsBxnZ,KAAKsrG,MAAM0lE,+BACjCl3H,QAAS,CAAC,CACRsvR,SAAU,wBAEVq+E,cAAe32R,EAAYA,EAAZA,6BAA2C,WACxD,EAAKxlB,MAAM2iG,4BAA2B,EAAM,UAE7C,CACDm7H,SAAU29E,EAAY39E,SACtBq+E,cAAeV,EAAYjqO,QAAQrlL,KAAKuI,KAAM,gBAI3DonZ,U,gBA9GXllQ,UAAY,CACjBw3P,wBAAyB,UAAUt3P,KAAKnpC,WACxC0tS,cAAe,UAAUtwY,MAAM4iG,Y,cA8IpB,IAAAnN,UAzBS,SAACxzG,GAAU,MACmDA,EAAM8J,UAAnFG,EAD0B,EAC1BA,UAAW6qB,EADe,EACfA,aAAcwlP,EADC,EACDA,oBAAqB3hG,EADpB,EACoBA,4BADpB,EAEQ34K,EAAMgR,YAAxCqX,EAF0B,EAE1BA,YAAaghK,EAFa,EAEbA,kBAFa,EAGIrpL,EAAMqY,YAApCwpF,EAH0B,EAG1BA,WAAYhwE,EAHc,EAGdA,eACZ2mG,EAAax4H,EAAMwc,UAAnBg8G,UAEP,MAAO,CACLnwG,cACApe,YACA6qB,eACAnP,eAAgB3lB,EAAMytB,eAAe9H,eACrC9F,eAAgB7f,EAAMqN,gBACtBitQ,sBACA5oP,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxC1K,iBAAkBpS,EAAMsS,oBAAoBF,iBAC5Cu5X,kBAAmB3rY,EAAMsS,oBAAoBq5X,kBAC7ChzN,8BACA0Q,oBACAxnF,aACAhwE,iBACA2mG,eAIoC,CACtC3jG,kCACArJ,8CACA0C,4DACAwI,8CACAhG,kCACAilL,wDACAj9B,iEAPa,CAQZ81O,I,0HC7LH,O,OACA,OACA,OAEA,QAEA,Q,IAOA,Q,IACA,QACA,S,IACA,S,uDAEMY,E,yOAMJ1+X,gBAAkB,WAChB,EAAKsiF,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,K,EAIrB+kX,aAAe,SAACzmQ,EAAiB01O,EAAWC,GAAmB,MAChB,EAAK5yQ,MAA3Cx5F,EADsD,EACtDA,mBAAoB2I,EADkC,EAClCA,KAAMwzG,EAD4B,EAC5BA,SAC3B05R,GAAgBp/Q,IAAqB01O,EAAUx8W,YAAc,EAC7D08W,EAAWF,EAAUx8W,YAAYqD,QAAQ,GAC/C,GAAIq5W,GAAY,IAAMrsW,EAAmBnK,QACvC,OAAO,KAET,IAAMy2W,EAAUH,EAAU91W,UAAY81W,EAAU91W,SAAS8lH,GACrDgwP,EAAU91W,SAAS8lH,IAClBgwP,EAAUl3W,OAAS0T,EAAKC,cAAc,CAAC1S,GAAI,mCAAqC2/Y,EACjF,EAAKr8S,MAAMnzF,eAAeE,QACxBoC,EAAKC,cAAc,CAAC1S,GAAI,8CACxByS,EAAKC,cAAc,CAAC1S,GAAI,yCAC1B,IACJ,OACE,+BAAK4iF,UAAU,eAAepzF,IAAK0mX,GACjC,8BAAItzR,UAAU,uBAAuBwzR,GACpC71O,EACG,gCAAM39C,UAAU,sBAAsBkyF,QAAS,EAAK9zJ,iBAChD,4CAAkBhhB,GAAG,+CAEzB8J,EAAmBnK,QACjB,mCAAsBw2W,SAAUA,IAChC,6BAAGvzR,UAAU,wBAAuB,IAAAl3E,sBAAqB5B,EAAoBqsW,M,6GAjCnEv/L,GACpB,OAAQA,EAAUysC,uB,+BAsCX,aAEoErrN,KAAKsrG,MADzEx5F,EADA,EACAA,mBAAoBsD,EADpB,EACoBA,uBAAwB1K,EAD5C,EAC4CA,iBAAkB+lK,EAD9D,EAC8DA,2BACnE33J,EAFK,EAELA,OAAQ7L,EAFH,EAEGA,iBAAkBwN,EAFrB,EAEqBA,KAAMtC,EAF3B,EAE2BA,eAAgBs5J,EAF3C,EAE2CA,eAAgBx8J,EAF3D,EAE2DA,MAElE,GAAIkD,EAAeknI,iBACjB,OAAO,KALF,MAQ2BjmJ,SAASC,SAApC2b,EARA,EAQAA,UAAWE,EARX,EAQWA,aACZvT,GAAa,IAAA+E,iBACfqjH,GAAa,IAAA7oH,wBAAuBS,EAAY+I,GAC9C69H,GAAmBz2H,EAAmBy3T,oBAAsBz3T,EAAmBuD,4BAC9EL,GAAaC,GAASC,KAAkBE,EAE3CuoW,EAAWh8W,EAAWN,WAAW5M,OACjCkN,EAAWN,WACX,CAAC,CAACI,YAAaE,EAAWD,gBAC1BktY,EAAYjtY,EAAWI,kBAGrB67W,GAAansM,IAAmBlpC,GAAmBo1O,EAAS19W,MAAK,SAAAuB,GAAA,OAAOA,EAAIC,YAAc,MACxFqQ,EAAmBnK,SAAWyN,GAA0BH,MACzDjV,KAAKsrG,MAAM4+L,yBAA2BlqS,KAAKsrG,MAAMk/L,eAAerwS,SAAS,QAC5E6vR,EAAgB,EACpB,GAAIlxQ,EAAOrkB,OAAS,IAAMg8K,EAA4B,CAEpD,IAAM+R,GAAkB,IAAA97K,eAAcuG,GAEtC+8Q,EAAgBxnG,EAAgB3gL,cAChC87W,EAAWn7L,EAAgBnhL,WAAW5M,OAClC+tL,EAAgBnhL,WAChB,CAAC,CAACI,YAAa+gL,EAAgB9gL,gBACnCktY,EAAYpsN,EAAgBzgL,kBAE9BioR,EAAgBA,EAAcllR,QAAQ,GACtCilH,EAAaA,EAAWjlH,QAAQ,GAEhC,IAIM+kR,GAJcvhR,OAAOC,UAAU0E,GAEjCjN,KAAKsrG,MAAM/oG,UAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAMnD,eAAiByE,GAAoBtB,EAAMrF,OAAOnM,SAAS,iBACtG6F,KAAKsrG,MAAM/oG,UAAUyE,QAAO,SAAA2E,GAAA,OAASA,EAAMrF,OAAOnM,SAAS,kBACbmH,QAAQ,SAACsjU,EAAaj5T,GAAd,OAAwBi5T,EAAcj5T,EAAMxC,WAAW,GAC3Gy+Y,EAAkB91Y,EAAmB+1Y,iBAAmBz9Y,KAAK2nE,QAAQg4C,EAAa8/J,GAA2B,GAAK,KAGlH4hE,GAA2B,IAAA5iV,+BAA8BiJ,EAAoB9R,KAAKsrG,MAAM/oG,WAE9F,OACE,wCACGkvK,EACC,+BAAK7mF,UAAU,qCACb,mCAAgBtnF,KAAK,aAErB,KACHs6W,IAAcnsM,EAAiBksM,EAAS71W,KAAI,SAACm2W,EAAWC,GACvD,OAAO,EAAK8wB,aAAazmQ,EAAiB01O,EAAWC,MAClD,KACJ0wB,EACC,+BAAKhkT,UAAU,gBACb,8BAAIA,UAAU,uBACXnwE,EAAKC,cAAc,CAAC1S,GAAI,0CACvBugI,IAAqBqmQ,EAAY,EAC/B5uY,KAAKsrG,MAAMnzF,eAAeE,QACxBoC,EAAKC,cAAc,CAAC1S,GAAI,8CACxByS,EAAKC,cAAc,CAAC1S,GAAI,yCAC1B,KAELugI,EACG,gCAAM39C,UAAU,sBAAsBkyF,QAAS98K,KAAKgpB,iBACpD,4CAAkBhhB,GAAG,+CAErB,6BAAG4iF,UAAU,wBAAuB,IAAAl3E,sBAAqB5B,EAAoB88X,EAAU9pY,QAAQ,MAGnG,KACFgU,EAAOrkB,OAAS,IAAOg8K,EACvB,+BAAK7lF,UAAU,gBACb,8BAAIA,UAAU,uBAAsB,4CAAkB5iF,GAAG,uCACxDugI,EACG,gCAAM39C,UAAU,sBAAsBkyF,QAAS98K,KAAKgpB,iBAClD,4CAAkBhhB,GAAG,iDAEvB,6BAAG4iF,UAAU,wBAAuB,IAAAl3E,sBAAqB5B,EAAoBk4Q,KAGjF,KACH49H,EACC,+BAAKh9T,UAAU,gBACb,8BAAIA,UAAU,uBAAsB,4CAAkB5iF,GAAG,2CACzD,6BAAG4iF,UAAU,uBACV29C,EACG,gCAAM39C,UAAU,sBAAsBkyF,QAAS98K,KAAKgpB,iBACpD,4CAAkBhhB,GAAG,kDAErB,IAAA0L,sBAAqB5B,EAAoB81Y,KAI/C,MACFn8D,EAAyBh3V,QAAWuL,KAAKsrG,MAAM4+L,yBAA2BlqS,KAAKsrG,MAAMk/L,eAAerwS,SAAS,SAAY,KACzHsxV,EAAyB3jV,KAAI,SAAAgkV,GAC3B,IAAMC,GAAe,IAAArlV,eAAc,MAAM,EAAMolV,EAAWvpV,WACpDE,GAAQ,IAAAT,eAAa,IAAAd,wBAAuB6qV,EAAcrhV,IAAmB,GACnF,OACE,+BAAKkgF,UAAU,eAAepzF,IAAKs0V,EAAWx3U,UAC5C,8BAAIs2E,UAAU,uBAAsB,4CAAkB5iF,GAAG,oCACxDugI,EACG,gCAAM39C,UAAU,sBAAsBkyF,QAAS,EAAK9zJ,iBACtD,4CAAkBhhB,GAAG,iDAEnB,6BAAG4iF,UAAU,wBAAuB,IAAAt3E,iBAAgBw4U,EAAWx3U,SAAUxC,GAAsBrP,OAM1GzC,KAAKsrG,MAAM4+L,yBAA2BlqS,KAAKsrG,MAAMk/L,eAAerwS,SAAS,SAAW,KACnF,+BAAKywF,UAAU,gBACb,8BAAIA,UAAU,uBAAsB,4CAAkB5iF,GAAG,oCACxDugI,EACG,gCAAM39C,UAAU,sBAAsBkyF,QAAS98K,KAAKgpB,iBAClD,4CAAkBhhB,GAAG,iDAGvB,6BAAG4iF,UAAU,wBACV,IAAAl3E,sBAAqB5B,EAAoBi4G,EAAY,MAAM,GAAO,U,cAmC/EumE,EAAqB,CACzBtnK,mC,WAGa,IAAA++H,aACb,IAAAj8C,UA7BsB,SAACxzG,GAAU,MACwCA,EAAM8J,UAAxEquK,EAD0B,EAC1BA,2BAA4BluK,EADF,EACEA,UAAWoF,EADb,EACaA,QAAS8pK,EADtB,EACsBA,eAChDx8J,EAAS3c,EAAMgR,YAAf2L,MACP,MAAO,CACLG,uBAAwB9c,EAAMwc,UAAUM,uBACxCtD,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C8iS,eAAgBlyS,EAAMo5B,wBAAwB84Q,eAC9CN,uBAAwB5xS,EAAMo5B,wBAAwBw4Q,uBACtD3nS,YACAkuK,6BACAlpK,SAAUjP,EAAMkP,UAAUD,SAC1BE,gBAAiBnP,EAAMqN,gBAAgB8B,gBACvCiD,iBAAkBpS,EAAMsS,oBAAoBF,iBAC5CyN,eAAgB7f,EAAMqN,gBACtBmT,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,iBACpCghH,SAAU31H,EAAMgR,YAAY2kH,SAC5Bo9F,qBAAsB/yN,EAAMkwO,iBAAiBnd,qBAC7C1jN,UACA8pK,iBACAx8J,WASuBq7K,EAAzB,CAA6Co3N,K,qIChO/C,O,OACA,OACA,Q,IACA,OAEA,Q,IACA,QACA,Q,IACA,S,IACA,S,IAEA,O,IACA,Q,uDAEMI,E,YAEJ,WAAYx8S,IAAO,gGACXA,IADW,SAyBnBy8S,eAAiB,WACf,IAAM5uM,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzDn+L,GAAS,IAAAC,oBACf,EAAKmiK,SAAS,CACZr9D,OAAQ/kG,EAAOo+L,UAAUH,MA7BV,EAiCnB6uM,eAAiB,WAEf,GAD2B,EAAK18S,MAAMnzF,eAAezQ,SAC9B2N,0BAA4B,UAAgBq4L,kBAAhB,gBAAqC,EAAKpiG,QAC3F,OAAO,EAET,EAAKA,MAAM9kF,8BAA6B,GACxC,EAAA0L,YAAYn9B,KAAK,eArCjB,EAAKgS,MAAQ,CACXk5G,OAAQ,IAHO,E,oFAQjBjgH,KAAK+nZ,kBACL,aAAE5vZ,QAAQwqG,GAAG,UAAY8yB,iBAAkBz1H,KAAK+nZ,kB,8CAIhD,aAAE5vZ,QAAQ8gO,IAAI,UAAYxjG,oB,gDAGFmpD,GAAW,YACZA,EAAUr8K,UAAU9N,SAAWuL,KAAKsrG,MAAM/oG,UAAU9N,QAAWmqL,EAAUr8K,UAAUtC,MAAK,SAACmG,EAAUwH,GACxH,OAAOxH,EAASC,YAAY1C,UAAUqE,KAAO,EAAKsjG,MAAM/oG,UAAUqL,GAAOvH,YAAY1C,UAAUqE,QAG/FhI,KAAK+nZ,mB,+BAqBA,IAEAt5P,EAAwBzuJ,KAAKsrG,MAA7BmjD,qBACDvzI,GAAS,IAAAC,oBACT8sY,GAAc,IAAAj0X,oBACpB,OACE,+BAAK42D,UAAW,6DAA+DxxF,SAASC,SAASoC,eAC7F,2BAA2BgzJ,GAC5BzuJ,KAAKsrG,MAAM3qF,YAAc,IACxB3gB,KAAKsrG,MAAMw1H,WAAa9gO,KAAKsrG,MAAMw1H,UAAUrsO,OAAS,EAClD,mCAAY0mV,aAAa,EACbC,qBAAsB,oDAClC,mCAAYxwP,UAAU,oDACxB,KACJ,wBAACq9T,EAAD,CAAar4T,SAAS,4BACTqwB,OAAQjgH,KAAK+G,MAAMk5G,OACnBtgH,MAAOK,KAAKsrG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQG,KAAKsrG,MAAMvjF,iBAAiBloB,OACpCqf,WAAYhE,EAAOwmE,uBACnBxmE,OAAQA,EACRsrN,kBAAkB,IAE/B,kCAAQ57I,UAAU,wEACVkyF,QAAS98K,KAAKgoZ,iBAEtB,6C,2BAkBO,IAAAl8S,UAZS,SAACxzG,GAAU,IAC1Bm2J,EAAwBn2J,EAAMytB,eAA9B0oI,qBACP,MAAO,CACLlsJ,UAAWjK,EAAM8J,UAAUG,UAC3B4V,eAAgB7f,EAAMqN,gBACtBgb,YAAaroB,EAAMgR,YAAYqX,YAC/BmgN,UAAWxoO,EAAMu1I,gBAAgBizF,UACjC/4M,iBAAkBzvB,EAAMouB,wBAAwBqB,iBAChD0mI,0BAIoC,CACtCjoI,4DACAwC,mCAFa,CAGZ8+X,I,8ECxGH,I,IAAA,MACA,O,IACA,M,mDAEA,IAAMI,EAAmC,SAAC58S,GACxC,OACE,+BACE1gB,UAAW,2BAA6B0gB,EAAMr+E,kBAAoB,sCAAwC,KAC1G,6BAAG29D,UAAU,gCACX,4CAAkB5iF,GAAG,uCAEvB,+BAAK4iF,UAAU,mCACb,kCAAQA,UAAU,+BAA+BkyF,QAASxxE,EAAM68S,sBAC9D,4CAAkBngZ,GAAG,gDAEvB,kCAAQ4iF,UAAU,+BAA+BkyF,QAASxxE,EAAM88S,eAC9D,4CAAkBpgZ,GAAG,kDAO/BkgZ,EAAiChmQ,UAAY,CAC3Cj1H,kBAAmB,UAAUm1H,KAAKnpC,WAClCkvS,qBAAsB,UAAUppO,KAAK9lE,WACrCmvS,cAAe,UAAUrpO,KAAK9lE,Y,UAGjBivS,G,8HC7Bf,O,OACA,OACA,O,IAEA,SACA,SACA,S,IACA,QACA,Q,IACA,QACA,S,mDAEA,IAiEM53N,EAAqB,CACzBze,0CACAC,sBACAlsJ,qE,WAGa,IAAAkmF,UAjBS,SAACxzG,GAAU,IAE1BoP,EAAYpP,EAAMqN,gBAAlB+B,SACP,MAAO,CACLoR,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,iBAEpC6E,mBAAoBpK,KAUgB4oL,EAAzB,EAvEA,SAAChlF,GAAU,IAIlB,EAFCxyF,EAAgDwyF,EAAhDxyF,OAAQ7L,EAAwCq+F,EAAxCr+F,iBAAkB6E,EAAsBw5F,EAAtBx5F,mBAE3Bu2Y,GAAA,gCAAkB,6GAClBv2Y,EAAmB4wK,0BAA4B5pK,EAAO7L,IAAqB6L,EAAO7L,GAAkBoM,MAClGP,EAAO7L,GAAkBoM,OAASjgB,SAASC,SAASoC,gBAFpC,iCAGd,IAAA+nL,2BAA0B1qK,EAAO7L,GAAkBoM,MAHrC,qCAK0BP,EAAO83U,UALjC,gGAKV13U,EALU,KAKS1Q,EALT,MAMfyE,IAAqBiM,GAAsB9f,SAASC,SAAS4b,SAAYzM,EAAa4hH,mBAAsB5hH,EAAa2hH,SAN1G,mCAQZ,IAAAN,oBAAmB3wG,GARP,8UAAlB,6CAaN,IAAAyoG,YAAU,WACR0mS,MAEC,IAUH,IAAM,EAAA7rO,GAAA,gCAAc,6GACS,IAAA3yD,sBADT,cACZrhH,EADY,OAEZ26K,EAFY,wBAEI36K,GAFJ,CAEkB,KACpC8iG,EAAMwmE,UAAUqR,GAChB73E,EAAMumE,oBAAoBsR,EAAU1uL,OAAS,GAC7C62G,EAAM1lF,iCAAiC,IACvC,aAAiB,gBAAgB,GANf,WAOZ,IAAAikG,sBAPY,mDAAd,4CAUN,OACE,mCAAcj/B,UAAU,SAASuvN,mBAAoB,gBACnD,8BAAIvvN,UAAU,eACX9xE,EAAOhR,KAAI,SAAC4R,EAAO9L,GAClB,OAAO,mCAAO8L,MAAOA,EAAO1M,WAAYY,EAAOpW,IAAKoW,OAEtD,8BAAIg9E,UAAU,2CAA2CkyF,QAASN,GAChE,4CAAkBx0K,GAAG,6B,0HC3D/B,O,OACA,OACA,O,IAEA,S,IACA,OACA,SACA,Q,uDAEMsgZ,E,YAEJ,WAAYh9S,IAAO,gGACXA,IADW,SA6BnBi9S,oBAAsB,WACpB,EAAKj9S,MAAM2hH,4BAA2B,IA5BtC,EAAKlmN,MAAQ,CACX0lY,SAAS,GAHM,E,oFAQZzsY,KAAKsrG,MAAM24R,oBACd,IAAAzwQ,kB,gDAIsBorD,GAAW,WACnC,UAAUz9I,eAAe,wBACpBy9I,EAAUsuC,sBAAwBltN,KAAKsrG,MAAM4hH,sBAChDltN,KAAKs9K,SAAS,CACZmvN,SAAS,IACR,WACD/9S,YAAW,WACT,EAAK4uF,SAAS,CACZmvN,SAAS,MAEV,U,+BAUA,IAEAt0X,EAAkBnY,KAAKsrG,MAAvBnzF,eAEP,OACE,+BAAKyyE,UAAW,aAAe5qF,KAAKsrG,MAAM4hH,qBAAuB,qBAAuB,KAAOltN,KAAK+G,MAAM0lY,QAAU,sBAAwB,KAC1I,+BAAK7hT,UAAU,oBACb,8BAAIA,UAAU,2BAA0B,4CAAkB5iF,GAAG,iCAC5DmQ,EAAeknI,iBAAmB,KACjC,6BAAGz0D,UAAU,iCACX,4CAAkB5iF,GAAG,uCADvB,IAC+DmQ,EAAe+vO,YAD9E,IAC2F,4CAAkBlgP,GAAG,yCAIpH,kCAAQ4iF,UAAU,2CAA2CkyF,QAAS98K,KAAKuoZ,sBAC3E,+BAAK39T,UAAU,qBACb,8C,2BAeK,IAAAkhB,UARS,SAACxzG,GACvB,MAAO,CACL40N,qBAAsB50N,EAAMsS,oBAAoBsiN,qBAChD+2K,kBAAmB3rY,EAAMsS,oBAAoBq5X,kBAC7C9rX,eAAgB7f,EAAMqN,mBAIc,CACtCsnN,yDADa,CAEZq7L,I,6FC7EH,O,OACA,O,IACA,MAEA,Q,mDAEA,IAAME,EAAmB,SAACl9S,GAAU,IAE3Bm9S,EAA8En9S,EAA9Em9S,cAAe1hF,EAA+Dz7N,EAA/Dy7N,gBAAiBvmL,EAA8Cl1C,EAA9Ck1C,SAAUymL,EAAoC37N,EAApC27N,SAAUyhF,EAA0Bp9S,EAA1Bo9S,QAASC,EAAiBr9S,EAAjBq9S,cAFlC,GAIN,IAAAxnQ,WAAS,GAJH,qBAI3BzwC,EAJ2B,KAInB02N,EAJmB,KAK5BC,GAAgB,IAAApnL,QAAO,OAE7B,IAAAc,uBAAsBsmL,GAAe,WACnCD,GAAU,MAGZ,IASIhtP,EAAS,CACXv6E,OAAQ6wG,EACJu2N,GAAawhF,EAAch0Z,OAASwyU,EAHjB,GAIhBA,GAAgC0hF,EAAgB,GAAK,GAAK,KAJ1C,GAKhBF,EAAch0Z,QAA8Bk0Z,EAAgB,GAAK,GAAK,KACzE,GAGN,OACE,+BAAK/9T,UAAW,gBAAkB8lB,EAAS,wBAA0B,IAAKsvC,IAAKqnL,GAC7E,+BAAKz8O,UAAU,WAAWkyF,QAAS,kBAAMsqJ,GAAU,KAChD5mL,GAAY,MAEf,+BAAK51D,UAAU,cAAcv2E,MAAO+lE,GACjCuuU,EAAgB,+BAAK/9T,UAAU,oFAAoF+9T,GAAuB,KAC3I,8BAAI/9T,UAAW,6CACVq8O,GAAawhF,EAAch0Z,OAASwyU,EAAY,6BAA+B,KACjFwhF,EAAc3gZ,KAAI,SAAC45R,EAAYgmC,GAC9B,OACE,8BAAI98O,UAAU,yBACVpzF,IAAKkqS,EAAWxqS,MAAQwwU,EACxB5qJ,QAAS,kBA9BK,SAAC4kH,GAC7B,GAAIA,EAAW5+M,SACb,OAAO,EAETikP,EAAgBrlC,GAChB0lC,GAAU,GAyBmBQ,CAAsBlmC,KACtCA,EAAW3hC,MACV,gCAAMn1K,UAAW,+BAAiC82M,EAAW5+M,SAAW,yCAA2C,KAChH4lU,EAAU,4CAAkB1gZ,GAAI05R,EAAWp/Q,OAAUo/Q,EAAWp/Q,cAYrFkmY,EAAiBtmQ,UAAY,CAC3BumQ,cAAe,UAAUpyY,MAAM4iG,WAC/B8tN,gBAAiB,UAAUhoJ,KAAK9lE,Y,UAGnBuvS,G,qICnEf,O,uDAGqBI,E,yOAEnB9hL,aAAe,WACT,EAAKr7B,iBACP,aAAE,EAAKA,gBAAgBI,QAAQ,KAAK,WAClC,EAAKvgG,MAAMm/L,mCAAkC,GAC7C,EAAKn/L,MAAMu/L,uCAAsC,O,qDARzD,Q,mBAEqB+9G,G,8ECHrB,WACA,U,UAGyB,SAAClnS,EAAyBn/G,GAAoD,IAAzCsmZ,IAAyC,yDAAtB12J,IAAsB,yDAQrG,OANA,IAAAxwI,YAAU,WACJknS,GAAennS,EAA0B,GAAMn/G,EAAU9N,SAC3D,IAAAq0Z,eAAc32J,KAEf,CAACzwI,EAAyBn/G,EAAWsmZ,EAAY12J,IAE7C,O,kGCZT,O,OACA,O,IACA,M,IACA,OACA,Q,IAEA,Q,IAEA,QACA,QAMA,Q,IACA,S,IACA,SAEA,QAEA,Q,WACA,QACA,QACA,QACA,QAEA,SACA,Q,OACA,QACA,QACA,QACA,Q,mDAEA,IAAM42J,EAAa,SAACz9S,GAAU,IAErBvjF,EAIkBujF,EAJlBvjF,iBAAkB6nE,EAIA0b,EAJA1b,SAAU2kB,EAIVjJ,EAJUiJ,YAAa9zG,EAIvB6qG,EAJuB7qG,SAAU69D,EAIjCgtC,EAJiChtC,mBAAoBohR,EAIrDp0O,EAJqDo0O,mBAAoB3kR,EAIzEuwC,EAJyEvwC,cAChG0B,EAGuB6uC,EAHvB7uC,sBAAuBz4D,EAGAsnG,EAHAtnG,YAAawnG,EAGbF,EAHaE,kBAAmBxwC,EAGhCswC,EAHgCtwC,WAAY/yC,EAG5CqjF,EAH4CrjF,eAAgBwoK,EAG5DnlF,EAH4DmlF,QAASv4B,EAGrE5sD,EAHqE4sD,4BAC5FD,EAEuB3sD,EAFvB2sD,+BAAgC/4F,EAETosC,EAFSpsC,yBAA0BjC,EAEnCquC,EAFmCruC,eAAgBD,EAEnDsuC,EAFmDtuC,kBAAmBuB,EAEtE+sC,EAFsE/sC,YAC7FnB,EACuBkuC,EADvBluC,kBAAmBa,EACIqtC,EADJrtC,UAAWG,EACPktC,EADOltC,YAAaxtD,EACpB06F,EADoB16F,iBAAkBE,EACtCw6F,EADsCx6F,qBAAsBqH,EAC5DmzF,EAD4DnzF,eAAgBgiF,EAC5EmR,EAD4EnR,WACnGspC,EAAuBn4B,EAAvBm4B,oBAN0B,GAQJ,IAAAulR,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GARmB,wBASoB,IAAA7hE,WAAS,GAT7B,qBASrB8nQ,EATqB,KASHj9J,EATG,KAWtB9wO,IAAS,IAAAC,oBACTg+L,KAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBAE3Dp5F,GAAS/kG,GAAOo+L,UAAUH,IAC1BvoM,GAAoBA,EAAiBk4E,YACvCm3B,IAAS,IAAAD,kCAAiCpvG,EAAkBE,EAAsBmvG,KAGpF,IAAM/gG,GAAahE,GAAOwmE,wBAE1B,IAAAigC,YAAU,YACR,aAAE,cAAcn0B,QAAQ,CAACy5E,UAAW7tK,SAAS6C,KAAKshL,cAAe,OAChE,IAEH,IAiGM9xE,GAAQD,EAAkB/2G,OAAS,EAAAi3G,OAAOC,MAAQ,UAAa3nG,GAAa4nG,OAC5Es9S,GAAsBzoZ,IAAa29D,GAAgBhB,IAAsB,EAAA1gC,cAAcE,OACvFqhC,GAAa,EAAA1/B,wBAAwBF,YAI3C,OACE,wCACE,+BAAKusD,UAAW,eAAiBs+T,GAAsB,6BAA+B,KACnF19S,EAAkB/2G,OACjB,mCAAsBwrH,OAAQA,GACRrwB,SAAUA,EACVowD,IAAKzrC,EACL64I,gBAzDN,SAACxsJ,GAEvB,GAAI2T,GAAeA,EAAYC,SAAWD,EAAYC,QAAQC,UAAW,CAEvE,GAAIF,EAAYC,QAAQC,UAAUmuQ,gBAAkBzqX,OAAOqmO,UAEzD,OAAO,EAGT,GAAc,IADAjqH,EAAYC,QAAQC,UAAUxpD,YACzB+P,GAAe,EAAAp/D,qBAAuBs8J,GAA+Bj7F,GAatF,OAZAlC,GAAc,GACd0B,EAAsB,IACtB,uBACMy7F,GACFD,GAA+B,GAE7Bh7F,GACFD,EAAkB,MAGtB,IAAAs3C,eAAcC,EAAatsF,GAC3BwoK,EAAQ17L,KAAK,MACN,EAQX,GAJI0L,GAAY8zG,EAAYC,SAAWD,EAAYC,QAAQmoH,iBACzDpoH,EAAYC,QAAQmoH,gBAAgB/7H,GA5EZ,SAAC+rH,EAAc/rH,GACzC,GAAIriC,EAAYmyC,OAId,OAHApyC,EAAmB,CACjBoyC,QAAQ,KAEH,EAET,IAAKi8G,EACH,OAAO,EAR0C,IAU5Cn2G,GAAe,IAAAH,2BAA0Bs2G,EAAarmN,OAAQqmN,EAAa/rI,cAAezoE,GAA1Fq+F,YACP,GAAKA,EAAY/hH,OAAS,KAAQk4N,EAAarmN,QAAkC,gBAAxBqmN,EAAarmN,QAA2B,CAI/F,IAAMuiQ,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCW,yBAA2BuiL,EAAarmN,OACxE,EAAAq8B,6BAA6ByB,sBAAwBuoL,EAAarmN,OAYtE,OAXA,UAAU66B,eAAe0nO,GACzBvqM,EAAmB,CACjBoyC,QAAQ,EACRpqG,OAAQqmN,EAAarmN,OACrBs6E,cAAe+rI,EAAa/rI,cAC5BllD,SAAU,CACRthB,EAAGwmF,EAAM7mF,QACTM,EAAGumF,EAAMzmF,WAGb+kD,GAAyB,IAClB,EACF,GAA2B,IAAvBs3C,EAAY/hH,QAAgB+hH,EAAY,GAAGlwG,OAAOnM,SAAS,WAAY,CAChF,IAAM69G,EAAWxB,EAAY,GAAGlwG,OAAOvI,MAAM,KAAK,GAKlD,OAJAg9D,GAAc,GACd0oE,EAAoBtpC,EAAWruF,MAAK,SAAAsuF,GAAA,OAAcA,EAAWpyF,KAAOgwG,MAEpEy4E,EAAQ17L,MAAQ,IAAAw/F,eAAa,GAAS,EAAAh/E,OAAO0uF,OAA7C,IAAuD+T,IAChD,EAEP,IAAMmxS,GAAuB,IAAAjvT,qCAAoCC,EAAYwyH,EAAarmN,QAC1F,QAAI6iZ,IACFpuV,GAAc,GACd0oE,EAAoB0lR,GACpB14N,EAAQ17L,MAAQ,IAAAw/F,eAAa,GAAS,EAAAh/E,OAAO0uF,OAA7C,IAAuDklT,EAAqBnhZ,KACrE,GAoCPy4X,CAAoBrnY,SAASuzN,aAAc/rH,GAC7C,OAAO,EAGT,GAAIxnG,SAASuzN,aAAc,CACzB,IAAM+zK,EAAgBtnY,SAASuzN,aAAarmN,OACtCuiQ,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCU,mBAAqBu2V,EACrD,EAAA/9V,6BAA6BwB,gBAAkBu8V,EACnD,UAAUv/V,eAAe0nO,GACzB62E,EAAmBghD,EAAe,KAAM,MAAM,KAAS,EAAD,oBAAuBjgY,MAkBnD68P,iBA/GL,WACvBt6C,EAAY,IA+GgB9jM,WAAYA,GACZhE,OAAQA,GACRyiP,YAAaziP,GAAOkZ,MACpBz0B,MAAOooB,EAAiBpoB,MACxBE,OAAQkoB,EAAiBloB,OACzB2mO,kBAAkB,EAClBC,cAAc,EACdulB,oBAAqBA,EACrB7zO,eAAgBA,IAEpC,MAELo8F,EAAc,mCAAiBA,YAAaA,IAAiB,KAM7DA,GAAeA,EAAYC,UAAY,EAAD,mBAAsB,mCAAY40S,eAAgB70S,EAAYC,UAAa,KACjHy0S,EACC,+BAAK50Y,MAAO,CAAC,MAASo3F,IAAQ7gB,UAAW,uCAAyC5vB,EAAa,qBAAuB,KACpH,mCAAY4vB,UAAU,mBACtB,mCAAkBv2E,MAAO,CAAC,MAASo3F,OAEnC,OAMVs9S,EAAW7mQ,UAAY,CACrBw9L,mBAAoB,UAAU3gK,KAC9BxqE,YAAa,UAAU58G,QAGzB,IAkCM24L,EAAqB,CACzBhyH,wCACAvD,8BACA0B,8CACAx0C,gCACAgwI,gEACA/4F,oDACAlC,sCACAymE,2C,WAGa,IAAA8sD,aACb,IAAAzkF,UA9CsB,SAACxzG,GAAU,MACiBA,EAAMouB,wBAAjDkpE,EAD0B,EAC1BA,SAAU7nE,EADgB,EAChBA,iBAAkBo7L,EADF,EACEA,YADF,EAE4D7qN,EAAM0zG,UAA5FztC,EAF0B,EAE1BA,YAAavD,EAFa,EAEbA,WAAYiC,EAFC,EAEDA,eAAgBG,EAFf,EAEeA,kBAAmBa,EAFlC,EAEkCA,UAAWG,EAF7C,EAE6CA,YAF7C,EAG2B9lE,EAAMgR,YAA3D7I,EAH0B,EAG1BA,SAAUkgV,EAHgB,EAGhBA,QAAS38U,EAHO,EAGPA,YAAawnG,EAHN,EAGMA,kBAChC0sD,EAA+B5/J,EAAMk4L,WAArCt4B,4BAJ0B,EAK4B5/J,EAAMqY,YAA5DC,EAL0B,EAK1BA,iBAAkBE,EALQ,EAKRA,qBAAsBqpF,EALd,EAKcA,WAI/C,MAAO,CACLvK,WACA7nE,mBAEAo7L,cACA1iN,SAAUA,GAAYkgV,EACtBpiR,cACAv6D,cACAwnG,oBACAxwC,aAGAk9F,8BACAj7F,iBACAG,oBACAa,YACAG,cACAxtD,mBACAE,uBACAqH,eAtBqB7f,EAAMqN,gBAuB3Bw0F,aACA5yE,aAvBqBjvB,EAAMouB,wBAAtBa,gBAuCkB+oK,EAAzB,CAA6Cy4N,K,8EC5P/C,W,OACA,O,IACA,MACA,OACA,Q,IAEA,O,IACA,O,IACA,QAEA,QACA,Q,IAKA,OACA,QACA,QACA,QACA,Q,IAOA,QACA,SAMA,QACA,Q,IACA,Q,IACA,Q,IACA,QACA,QACA,QACA,Q,OACA,Q,mDAEA,IAAMM,EAAsB,SAAC/9S,GAAU,IAE9BlvC,EAIyDkvC,EAJzDlvC,kBAAmB3hD,EAIsC6wF,EAJtC7wF,KAAMtC,EAIgCmzF,EAJhCnzF,eAAgBukD,EAIgB4uC,EAJhB5uC,mBAAoBD,EAIJ6uC,EAJI7uC,sBAAuBg0H,EAI3BnlF,EAJ2BmlF,QACzF15B,EAG8DzrD,EAH9DyrD,8BAA+B/5F,EAG+BsuC,EAH/BtuC,kBAAmBv8D,EAGY6qG,EAHZ7qG,SAAUi3J,EAGEpsD,EAHFosD,0BAA2BxrI,EAGzBo/E,EAHyBp/E,eACvFurI,EAE8DnsD,EAF9DmsD,6BAA8BJ,EAEgC/rD,EAFhC+rD,sBAAuB73F,EAES8rC,EAFT9rC,uBAAwB2xG,EAEf7lE,EAFe6lE,oBAC7Eta,EAC8DvrD,EAD9DurD,uBAAwB94I,EACsCutF,EADtCvtF,iBAAkB65I,EACoBtsD,EADpBssD,2BAA4Bx6F,EACRkuC,EADQluC,kBAAmBrC,EAC3BuwC,EAD2BvwC,cACzF9yC,EAA8DqjF,EAA9DrjF,eAAgBk1C,EAA8CmuC,EAA9CnuC,qBAAsBnB,EAAwBsvC,EAAxBtvC,qBAExC,IAAKI,EACH,OAAO,wCAIT,IAAM7iE,EAAS6iE,EAAkB17D,YAC3B4mS,GAAkB,IAAA93L,wBAAuBpzC,EAAmB7iE,GAE5D+vZ,EAA4B,SAACr3T,EAAoBwlT,EAAsB/3D,IAE3E,UAAUv+S,eAAe,EAAAsI,gCAAgCsC,yBAA2BqwB,EAAkBz4D,UAAU2+B,KAAO85B,EAAkBz4D,UAAUmF,oBAE9HszD,EAAkB17D,YAC1B6yG,iBAAkB,EAC/B92C,EAAsB,IAElB00G,GACFjlJ,EAAeilJ,GAEjBsf,EAAQ17L,MAAK,IAAA2/F,eAAct4B,IAC3B61B,EAAmB71B,GAAmB,GACjC37D,GACHi/U,EAAmBtjR,EAAkB91D,OAAQ81D,EAAmB,MAAM,IAKpE,IAAAp3D,aAAcmT,EAAeggG,WACZ,IAAA7wG,oBAAmB80D,GACzBrnE,KAAKqnE,GAClBq7U,GAAqB,IAAA5/S,8BAA6Bz7B,EAAmBw7F,EAA4B75I,MAEjGg5I,GAA8B,GAC9BF,EAAuBz6F,GACvBq7F,GAA6B,KAI3B8xP,EAA8B,SAACh1S,GACnC,UAAUpzE,eAAe,EAAAsI,gCAAgCuC,gCACzDgxB,EAAkB,EAAAznD,OAAO4uF,UACzB1nC,EAAsB,IACtBT,EAAqB,MACrBy7F,GAA6B,IAC7B,IAAAnjD,eAAcC,EAAatsF,IAGvBuhY,EAAoB,SAAC9pE,EAAoBnrO,GAC7C,GAAI73C,EAAoB,CACtB,UAAUv7B,eAAe,EAAAsI,gCAAgCwC,iCACzDwwB,EAAsB,IACtB46F,EAAsB,IACtB,IAAMn8I,GAAS,IAAAC,oBACTktT,GAAmB,IAAA5uO,qBAAmB,EAAM/8B,EAAoBN,EAAmBoD,GASzF,OARItkD,EAAOy+E,wBAAwBv9B,EAAkB91D,UAAY+hU,GAC/DqX,EAAmBtjR,EAAkB91D,OAAQ81D,EAAmB,MAAM,GACtEq0H,EAAQ17L,MAAK,IAAA2/F,eAAct4B,OAE3B,IAAAk4C,eAAcC,EAAatsF,GAC3B8yC,GAAc,GACd01H,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAEf,EAGT,UAAU7iE,eAAe,EAAAsI,gCAAgCkB,sBACrD+sH,GACFD,GAA6B,GAE/Bh7F,EAAsBL,EAAkB91D,QACxCo5U,EAAmBtjR,EAAkB91D,OAAQ81D,EAAmB,MAAM,GACtEq0H,EAAQ17L,MAAK,IAAA2/F,eAAct4B,GAAmB,KAa1Cy3I,EAAYz2I,IAAsB,EAAA1gC,cAAcK,YAChDrnB,GAAkB,IAAAhB,oBAAmB0nD,GACrC0mB,EAAW+wH,IAAen+L,KAAoB,IAAArO,WAAU+0D,GAExDqtV,EAAoB,WACxB,UAAUtoX,eAAe,EAAAsI,gCAAgCkC,yBACzDwxB,EAAqB,EAAAzgC,cAAckB,cAG/B8rX,GAAwB71M,EAC1BpzM,EAAW,+BAAiC,uCAC5CiV,EAAkB,oCAChBy7J,EACE,sCACA,gCASR,OAAI1wK,EAEA,kCAAmBmoU,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,wCACE,wCACG,SAACztP,GAAD,OACC,wCACG,SAACwlT,GAAD,OAA0B/6U,EAAqB,KAC9C,mCAAQkuB,UAAW,+GACdipH,EAAY,+BAAiC,IAC1C45C,QAAQ,WACR3qK,SAAUA,EACV4kN,UAAWhyR,GAAmBgiJ,EAA4B,KACxDm8C,EACI,mCAAkBjpH,UAAU,4BAA4Bv2E,MAAO,CAAC,MAAS,EAAAq3F,OAAOC,SAChF,uCAAS,8CAEfmxE,QAAS,kBArDT,SAAC7qF,EAAoBwlT,EAAsB/3D,EAAoBnrO,GACvFmjD,EACF6xP,EAA4Bh1S,GAG9B7+F,EACI+zY,IACAH,EAA0Br3T,EAAoBwlT,EAAsB/3D,GA8C7BiqE,CAAsB13T,EAAoBwlT,EAAsB/3D,EAAoBnrO,KA1B3HmjD,EACK,4CAAkB1vJ,GAAG,oCAEvB,4CAAkBA,GAAI0hZ,YA8BjB,mCAAQ9+T,UAAW,qFAChBluB,EAAqB,6BAA+B,IAC/C+wL,QAAQ,WAAW3wE,QAAS,kBAAM0sO,EAAkB9pE,EAAoBnrO,KAC9E,4CAAkBvsG,GAAI00D,EAAqB,sBAAwB,wBAClEA,EAAqB,KAAO,KAAM,IAAA5gD,qBAAoBviB,EAAQkhB,EAAMtC,WAWnF,kCAAmBywT,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,+BAAK90P,UAAU,qCACb,+BAAKA,UAAU,8BACZ8sE,EACC,mCAAQ9sE,UAAW,uDACXkyF,QAAS,kBAAMysO,EAA4Bh1S,KACjD,4CAAkBvsG,GAAI,qCAErBmQ,EAAezQ,SAAS0pB,SAC3B,wCACG,SAAC6gE,GAAD,OACC,wCACG,SAACwlT,GAAD,OACC,mCAAQ7sT,UAAW,uDAAyDipH,EAAY,+BAAiC,IACjH/wH,SAAUA,EACV4kN,UAAW7zF,EACP,mCAAkBjpH,UAAU,4BAA4Bv2E,MAAO,CAAC,MAAS,EAAAq3F,OAAOC,SAChFj2F,EAAkB,KAAO,uCAAS,8CAEtConK,QAAS,kBAAMpnK,EACX+zY,IACAH,EAA0Br3T,EAAoBwlT,EAAsB/3D,KAC9E,4CAAkB13U,GAAI0hZ,YAdM,MAsB1C,+BAAK9+T,UAAU,8BACb,mCAAQA,UAAW,kDAAoDluB,EAAqB,yBAA2B,yBAC/GomB,SAAUwkN,EACVxqH,QAAS,kBAAM0sO,EAAkB9pE,KACvC,4CAAkB13U,GAAI00D,EAAqB,0BAA4B,wBACtEA,EAAqB,KAAO,KAAM,IAAA5gD,qBAAoBviB,EAAQkhB,EAAMtC,aAWvFkxY,EAAoBnnQ,UAAY,CAC9BvpD,YAAa,UAAU/+C,MAAV,qBAGf,IAuBM02I,EAAqB,CACzB7zH,8CACAG,8CACA3pC,sCACA8jI,8DACA/5F,sCACAq6F,8CACApvI,gCACAwvI,4DACAZ,gDACA97F,8BACAoC,4CACAjxC,gCACA8vC,6C,WAGa,IAAAu0H,aACb,IAAAxoC,aACE,IAAAj8C,UAzCoB,SAACxzG,GAAU,MAC0DA,EAAM0zG,UAA1F5vC,EAD0B,EAC1BA,kBAAmBM,EADO,EACPA,mBAAoBU,EADb,EACaA,kBAAmBoC,EADhC,EACgCA,uBAC1D/+D,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAG+BnI,EAAMk4L,WAA/D94B,EAH0B,EAG1BA,0BAA2BE,EAHD,EAGCA,2BAC3B75I,EAAoBzlB,EAAMgsL,QAA1BvmK,iBACA3I,EAA0B9c,EAAMwc,UAAhCM,uBACA+7J,EAAuB74K,EAAM8J,UAA7B+uK,oBAEP,MAAO,CACL/0G,oBACAM,qBACAvkD,eAAgB7f,EAAMqN,gBACtBlF,WACAi3J,4BACA35I,mBACA65I,6BACAx6F,oBACAhoD,yBACAoqD,yBACA2xG,yBAsByBmf,EAAzB,CAA6C+4N,M,6FCvSjD,O,OACA,OACA,O,IAEA,QAEA,Q,IACA,OACA,Q,IACA,SACA,S,IACA,Q,mDAEA,IA0CM/4N,EAAqB,CACzB7zH,8CACAG,8CACA3pC,uC,WAGa,IAAA64E,UAdS,SAACxzG,GAAU,MACeA,EAAM0zG,UACtD,MAAO,CACL5vC,kBAH+B,EAC1BA,kBAGLM,mBAJ+B,EACPA,sBAaY4zH,EAAzB,EAhDmB,SAAChlF,GAAU,OAEK,IAAA61C,UAAS,MAFd,qBAEpCyoQ,EAFoC,KAElBC,EAFkB,KAGpCztV,EAAgCkvC,EAAhClvC,kBAAmB0tV,EAAax+S,EAAbw+S,UAK1B,OAJA,IAAAnoS,YAAU,WACRkoS,GAAoB,IAAA37N,qCAAoC9xH,MACxD,CAACA,EAAmBytV,IAEjBztV,EAQH,+BAAKwuB,UAAU,kCACb,+BAAKA,UAAU,YACb,8BAAIA,UAAU,iCACZ,mCAAW/nC,SAAS,UAAS,gCAAM+nC,UAAU,wBAAuB,4CAAkB5iF,GAAG,6CAG7F,+BAAK4iF,UAAU,+BACb,yCAEF,+BAAKA,UAAU,mCACZhjF,MAAMC,QAAQ+hZ,IAAqBA,EAAiBn1Z,OACjD,mCAAuBm1Z,iBAAkBA,IACzC,OAnBJE,EACK,wCAEF,S,gICzBX,OACA,QAEA,QACA,QACA,SACA,QACA,QAEA,IA0FMx5N,EAAqB,CACzBpkK,gCACAhC,sBACAuyC,8CACAxpC,sCACAm+I,kDACA/qC,iD,WAGa,IAAAkqD,aACb,IAAAzkF,UAxBsB,SAACxzG,GAAU,MACSA,EAAM8J,UAAzCG,EAD0B,EAC1BA,UAAW8uK,EADe,EACfA,qBAIlB,MAAO,CACL9uK,YACAwb,iBALyBzlB,EAAMgsL,QAA1BvmK,iBAMLwJ,aALqBjvB,EAAMouB,wBAAtBa,aAML8pJ,uBACAr7J,aANqB1d,EAAMyc,YAAtBiB,gBAoBkBs6K,EAAzB,EApG0B,SAAChlF,GAAU,IAE9B/oG,EACqB+oG,EADrB/oG,UAAW2pB,EACUo/E,EADVp/E,eAAgBhC,EACNohF,EADMphF,UAAWnM,EACjButF,EADiBvtF,iBAAkByiI,EACnCl1C,EADmCk1C,SAAU6wB,EAC7C/lE,EAD6C+lE,qBAAsBD,EACnE9lE,EADmE8lE,wBAC7F/qC,EAA0B/6B,EAA1B+6B,uBAWIp0C,EAAqB,SAAC5uF,EAAS0mZ,GAAmD,IAA7BloS,EAA6B,uDAAP,GAEzEjlG,EAAevZ,EAAQ3C,YACzBod,EAAc,EAEZgC,EAAgBvd,EAAUuJ,MAAK,SAAAH,GACnC,OAAIiR,EAAa6e,eACP9vB,EAAMrF,SAAWjD,EAAQiD,QAC3BqF,EAAMtF,YAAYyM,SAAS8tE,gBAAkBv9E,EAAQyP,SAAS8tE,cAE/Dj1E,EAAMrF,SAAWjD,EAAQiD,UAMlC,GAJIwZ,IACFoM,EAAepM,GACfhC,EAAcgC,EAAc3W,UAE1B4gZ,EAAsB,CACxB,IAAMx+R,EAAWw+R,EAAqBj+Y,MAAK,SAAAk+Y,GACzC,OAAOA,EAAO/4Y,iBAAmB+4Y,EAAO/4Y,gBAAgBtN,UAAUqE,KAAO3E,EAAQM,UAAUqE,OACvF+hZ,EAAqBj+Y,MAAK,SAAAk+Y,GAAA,OAAUA,EAAO1jZ,SAAWjD,EAAQiD,UAChEilH,GAAYA,EAASpiH,WACvB2U,EAAcytG,EAASpiH,UAG3B,IAAM6uF,GAAa,IAAAH,8BAA6Bx0F,EAASya,EAAaC,GACtE,GAAI8jG,EAAoBptH,OAAQ,CAC9B,IAAMqtH,EAAiBD,EAAoB76G,QAAO,SAAA2E,GAChD,OAAOA,EAAMtF,aAAesF,EAAMtF,YAAY1C,UAAU6M,YAAcnN,EAAQM,UAAU6M,aAE1F,GAAIsxG,EAAertH,OAAQ,CACzB,IAAMw1Z,EAAcnoS,EAAexgH,QAAO,SAACmB,EAAOkJ,GAAR,OAAkBlJ,EAAQkJ,EAAMxC,WAAU,GAEpF,GAAI8gZ,IAAgBnsY,EAClB,QAMN,GAFAoM,EAAU8tE,GAENq5E,EAAqB58K,OAAQ,CAC/B,IAAIo8L,EAAsBA,GAAtBA,qBAA0Bxf,IAC9Br5E,EAAW55F,SAAQ,SAAAgI,GACjB,IAAM0qL,EAAgBD,EAAoBl0K,WAAU,SAAAo0K,GAClD,OAAI3qL,EAASC,YAAYyM,SAAS8tE,cACxBmwG,EAAgBzqL,SAAWF,EAASE,QACtCF,EAASC,YAAYyM,SAAS8tE,gBAAkBmwG,EAAgB1qL,YAAYyM,SAAS8tE,cAEtFmwG,EAAgBzqL,SAAWF,EAASE,UAEzCwqL,GAAiB,GACnBD,EAAoBl7L,OAAOm7L,EAAe,MAG1CD,EAAoBp8L,SAAW48K,EAAqB58K,QACtD28K,EAAwByf,KAK9B,OAAOrwC,GApEiB,SAAC7+D,EAAUooU,GAAmD,IAA7BloS,EAA6B,uDAAP,GAC7ElgC,EAASvjF,SAAQ,SAAAiF,GACf4uF,EAAmB5uF,EAAS0mZ,EAAsBloS,MAEhDA,EAAoBptH,SACtBy1B,EAAU23F,GACVwkB,EAAuB,a,8ECpB7B,I,IAAA,MACA,O,IACA,MACA,OACA,Q,IAEA,O,IACA,O,IAEA,OACA,QACA,QACA,QACA,QAEA,QACA,QACA,Q,WACA,SACA,QACA,Q,IACA,S,mDAEA,IAAM6jR,EAAyB,SAAC5+S,GAAU,IAEjClvC,EACoFkvC,EADpFlvC,kBAAmBQ,EACiE0uC,EADjE1uC,sBAAuBC,EAC0CyuC,EAD1CzuC,eAAgBC,EAC0BwuC,EAD1BxuC,gBAAiB94D,EACSsnG,EADTtnG,YAAam5D,EACJmuC,EADInuC,qBAC7F18D,EAAyF6qG,EAAzF7qG,SAAUk4F,EAA+E2S,EAA/E3S,YAAaj8B,EAAkE4uC,EAAlE5uC,mBAAoBy9B,EAA8CmR,EAA9CnR,WAAY5yE,EAAkC+jF,EAAlC/jF,aAAc3W,EAAoB06F,EAApB16F,iBAEvE,GAAInQ,EACF,OAAO,KAGT,IAAM4C,EAAUs1F,GAAev8B,EAEzB1mD,GAAkB,IAAAhB,oBAAmBrR,GACrC8mZ,GAAkB9mZ,EAAQM,UAAUymZ,cAAgBxiZ,MAAMC,QAAQxE,EAAQM,UAAU0mZ,eA4BpFC,GAAa15Y,IAAoB,IAAA4pG,uBAAsBrgB,EAAY92F,EAAQiD,OAAQihB,GAEzF,OACE,+BAAKqjE,UAAW,aAAe,EAAAhvF,mBAAqB,GAAK,iBAAmB0uZ,EAAY,qBAAuB,KAC7G,mCAAQ1/T,UAAW,sDACd,EAAAhvF,mBAAqB,sBAAwB,KAC7C8Z,EAAkB,yBAA2B,IAC1CotE,SAAUqnU,EACVziH,UACE,mCAAS98M,UAAW,oBAClB,sCAAY6gB,MAAO,UAAaznG,GAAa6wH,WAGjDioD,QAvCc,WACxB,GAAIpnK,EAKF,OAJA,sBACE,UAAUyrB,eAAe,EAAAsI,gCAAgCoC,8BAE3DsxB,EAAqB,EAAAzgC,cAAckB,cAC5B,EAGT,IAAIgvS,EAAe,GACnB,sBACE,UAAUzrS,eAAe07B,EAAiB,EAAApzB,gCAAgC6B,2BAA6B,EAAA7B,gCAAgC4B,2BACvIuhS,EAAe/vQ,GAAmBC,IAAoB,EAAAzgC,qBAAqBE,OAAU,GAAKl5B,EAAU,SAAW,SAE/G,UAAU89B,eAAe07B,EAAiB,EAAAl6B,6BAA6B+B,wBAA0B,EAAA/B,6BAA6B8B,wBAC9HmoS,EAAe/vQ,GAAmBC,IAAoB,EAAAzgC,qBAAqBC,KAAQ,GAAKogC,EAAqB,SAAW,QAI1H,IAAM6tV,EAAgB3iZ,MAAMC,QAAQxE,EAAQM,UAAU0mZ,eAClD,EAAAhuX,qBAAqBE,OACrB,EAAAF,qBAAqBG,IAEzBogC,EAAsBgwQ,EAAc29E,KAiBhC,4CAAkBviZ,GAAIsiZ,EAAY,8BAAgC,2BAEnE50Y,IAAoB40Y,EAAY,wCAAsB,KACtDA,EAAY,mCAA0BjnZ,QAASA,EAASinZ,UAAWA,IAAe,OAKzFJ,EAAuBhoQ,UAAY,CACjCvpD,YAAa,UAAU/+C,MAAV,qBAGf,IAqBM02I,EAAqB,CACzB7zH,8CACAG,8CACA3pC,sCACAkqC,6C,WAGa,IAAAozH,aACb,IAAAzkF,UA7BsB,SAACxzG,GAAU,MACgDA,EAAM0zG,UAAhF5vC,EAD0B,EAC1BA,kBAAmBS,EADO,EACPA,eAAgBC,EADT,EACSA,gBAAiBJ,EAD1B,EAC0BA,mBAD1B,EAEDpkE,EAAMgR,YAA/B7I,EAF0B,EAE1BA,SAAUuD,EAFgB,EAEhBA,YACVoR,EAA0B9c,EAAMwc,UAAhCM,uBAH0B,EAIM9c,EAAMqY,YAAtCC,EAJ0B,EAI1BA,iBAGP,MAAO,CACLwrD,oBACAS,iBACAC,kBACAJ,qBACAj8D,WACAuD,cACAoR,yBACA+kF,WAf+B,EAIRA,WAYvB5yE,aAXqBjvB,EAAMouB,wBAAtBa,aAYL3W,sBAYuB0/K,EAAzB,CAA6C45N,K,8ECtH/C,I,IAAA,MACA,O,IACA,M,IAEA,OAEA,Q,OACA,QACA,QAEA,QACA,Q,mDAEA,IAAMM,EAAmB,SAACl/S,GAAU,IAE3BnuC,EAAmCmuC,EAAnCnuC,qBAAsBytB,EAAa0gB,EAAb1gB,UAW7B,OACE,+BAAKA,UAAWA,GAAa,kBAAmBkyF,QAVxB,WACxB,IAAM+rF,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCuF,oBAChC,EAAArM,6BAA6B4G,iBACjC,UAAUpI,eAAe0nO,GAEzB1rM,EAAqB,EAAAzgC,cAAckB,eAKjC,mCAASilB,SAAU,WACjB,iDAMR2nW,EAAiBtoQ,UAAY,CAC3Bt3D,UAAW,UAAUpoD,QAGvB,IAIM8tJ,EAAqB,CACzBnzH,6C,WAGa,IAAA2uC,UARS,WACtB,MAAO,KAO+BwkF,EAAzB,CAA6Ck6N,I,8EC/C5D,I,IAAA,MACA,O,IACA,MACA,OACA,Q,IAEA,O,IACA,QAEA,QACA,QACA,QACA,QAEA,QACA,QACA,QACA,QACA,Q,IACA,QACA,Q,mDAEA,IAAMC,EAA2B,SAACn/S,GAAU,IAEnCnuC,EAA0FmuC,EAA1FnuC,qBAAsBsmE,EAAoEn4B,EAApEm4B,oBAAqBgtD,EAA+CnlF,EAA/CmlF,QAASxoK,EAAsCqjF,EAAtCrjF,eAAgB5kB,EAAsBioG,EAAtBjoG,QAASinZ,EAAah/S,EAAbg/S,UAG9E50Y,GAAkB,IAAAhB,oBAAmBrR,GAW3C,OACE,kCAAmBulU,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAQ3pB,UAAW,gEACd,EAAAhvF,mBAAqB,sBAAwB,KAC7C8Z,EAAkB,yBAA2B,IAC1CotE,SAAUptE,EACV+xT,QAAS,wCACT3qJ,QAAS,kBAlBG,SAACvoE,GACzB,GAAI7+F,EAEF,OADAynD,EAAqB,EAAAzgC,cAAckB,cAC5B,EAET6lG,EAAoB6mR,IACpB,IAAAh2S,eAAcC,EAAatsF,GAC3BwoK,EAAQ17L,MAAQ,IAAAw/F,eAAa,GAAS,EAAAh/E,OAAO0uF,OAA7C,IAAuDqmT,EAAUtiZ,IAWtC0iZ,CAAkBn2S,KACnC,gCAAM3pB,UAAU,yBAAyB0/T,EAAU7zZ,MAAQ6zZ,EAAU7zZ,KAAKhC,OAAS,GAC/E61Z,EAAU7zZ,KACV,4CAAkBuR,GAAG,sBAAsBmO,OAAQ,CAACynU,WAAY0sE,EAAU7zZ,cAO5Fg0Z,EAAyBvoQ,UAAY,CACnC7+I,QAAS,UAAUu2C,MAAV,oBACT0wW,UAAW,UAAU3yZ,QAGvB,IAUM24L,EAAqB,CACzBnzH,4CACAsmE,0CACAx7G,iC,WAGa,IAAAsoK,aACb,IAAAzkF,UAjBsB,SAACxzG,GAIvB,MAAO,CACLmI,SAJiBnI,EAAMgR,YAAlB7I,SAKL2U,uBAJ+B9c,EAAMwc,UAAhCM,0BAekBk7K,EAAzB,CAA6Cm6N,K,iHC9E/C,I,EAAA,OACA,Q,oCACA,QACA,SACA,QAEyCE,EAA5BA,0BAA4B,SAACvuV,EAAmBxrD,EAAkBkB,GAE7E,IAAM84Y,GAAoB,IAAA7qQ,aAAY3jF,IAEtC,IAAAulD,YAAU,WACH/wG,IAAoBwrD,GAAuBwuV,GAAsBxuV,EAAkBz4D,UAAUqE,KAAO4iZ,EAAkBjnZ,UAAUqE,IACnI,UAAUo5B,mBAAmB,YAAa,CACxC9sB,SAAUxC,EAAmBwC,SAC7Bpd,QAAQ,IAAAqV,oBAAmB6vD,EAAmB,GAC9Ch8C,MAAO,EAAC,IAAAwnO,2BAA0BxrL,EAAmB,QAIxD,CAACA,M,8ECnBN,I,IAAA,MACA,OACA,O,IAEA,O,IACA,OAEA,QACA,QACA,QACA,Q,IACA,OACA,Q,0DAEA,IA8CMk0H,EAAqB,CACzB1zH,+C,WAGa,IAAAmrF,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAU,MAC4BA,EAAM0zG,UAA5D5vC,EAD0B,EAC1BA,kBAAmBS,EADO,EACPA,eAE1B,MAAO,CACLT,oBACAU,gBAL+B,EACSA,gBAKxCD,iBACA74D,YALoB1L,EAAMgR,YAArBtF,eAckBssL,EAAzB,EAnD0B,SAAChlF,GAAU,IAE9BlvC,EAAgGkvC,EAAhGlvC,kBAAmB3hD,EAA6E6wF,EAA7E7wF,KAAMmiD,EAAuE0uC,EAAvE1uC,sBAAuB54D,EAAgDsnG,EAAhDtnG,YAAa64D,EAAmCyuC,EAAnCzuC,eAAgBC,EAAmBwuC,EAAnBxuC,gBAEpF,IAAKV,EACH,OAAO,KAeT,OACE,mCAAYmtL,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC86E,UAAWl7E,MAAMC,QAAQu0D,EAAkBz4D,UAAU0mZ,eACrDz/T,UAAU,wDACVkyF,QAhBY,WAExB,IAAM+rF,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgC0C,6BAChC,EAAAxJ,6BAA6B+C,0BAEjC,UAAUvE,eAAe0nO,GAEzB,IAAM+jE,EAAe/vQ,GAAmBC,IAAoB,EAAAzgC,qBAAqBE,OAAU,GAAK,OAChGqgC,EAAsBgwQ,EAAc,EAAAvwS,qBAAqBE,UAQvD,uCACE,sCAAYkvE,MAAO,UAAaznG,GAAa6wH,WAE/C,gCAAMjqC,UAAU,iBACd,4CAAkB5iF,GAAG,mC,8EC3C7B,W,OACA,OACA,OACA,Q,IAEA,Q,IACA,Q,IACA,QAEA,Q,WACA,SACA,QACA,QACA,QACA,QAEA,QACA,Q,mDAEA,IA+EMsoL,EAAqB,CACzB7sD,0CACAzmE,uC,WAGa,IAAAuzH,aACb,IAAAxoC,aACE,IAAAj8C,UArBoB,SAACxzG,GAMvB,MAAO,CACL6hG,WANmB7hG,EAAMqY,YAApBwpF,WAOL5yE,aANqBjvB,EAAMouB,wBAAtBa,aAOL9mB,SANiBnI,EAAMgR,YAAlB7I,SAOLw+G,eANuB3mH,EAAMilV,UAAxBt+N,kBAiBoBqxE,EAAzB,EAtFuB,SAAChlF,GAAU,IAE7BnR,EACHmR,EADGnR,WAAYs2F,EACfnlF,EADemlF,QAASlpK,EACxB+jF,EADwB/jF,aAAck8G,EACtCn4B,EADsCm4B,oBAAqBhjI,EAC3D6qG,EAD2D7qG,SAAUu8D,EACrEsuC,EADqEtuC,kBAAmBiiD,EACxF3T,EADwF2T,eAG5F,IAAKr3G,MAAMC,QAAQsyF,KAAgBA,EAAW1lG,QAAU0lG,EAAWt8F,OAAM,SAAAu8F,GAAA,OAAc,IAAAyf,kBAAiBzf,EAAY7yE,MAClH,OAAO,KAGT,IAAMsjY,EAAc,SAACzwT,GACnB,UAAUj5D,eAAe,EAAAwB,6BAA6BmG,eAAiB,UAAUvG,sBAAsB63D,EAAW3jG,OAClHgtI,EAAoBrpC,GACpBp9B,EAAkB,IAEbiiD,GACHwxE,EAAQ17L,MAAQ,IAAAw/F,eAAa,GAAS,EAAAh/E,OAAO0uF,OAA7C,IAAuD7J,EAAWpyF,KAItE,OACE,wCACGmyF,EAAWryF,KAAI,SAAAsyF,GACd,IAAI,IAAAyf,kBAAiBzf,EAAY7yE,IAAiB6yE,EAAW0wT,WAC3D,OAAO,KAFmB,IAIrB/lS,EAAoC3qB,EAApC2qB,eAAgB49B,EAAoBvoD,EAApBuoD,iBAEvB,OAAIliJ,GAAYA,EAAZA,mBAEA,mCAAUmqF,UAAU,2BACVmgU,WAAU3wT,EAAWpyF,GACrBxQ,IAAK4iG,EAAWpyF,GAChB80K,QAAS,kBAAM+tO,EAAYzwT,KACnC,uCACE,yCAEDA,EAAW3jG,MAMhB,8BAAIm0F,UAAU,YACVmgU,WAAU3wT,EAAWpyF,GACrBxQ,IAAK4iG,EAAWpyF,GAChB80K,QAAS,kBAAM+tO,EAAYzwT,KAC7B,+BAAKxP,UAAU,yBACZm6B,GAAkB49B,EACjB,+BAAK/3D,UAAU,oBAAoBv2E,MAAO,CACxC22Y,mBAAmBjmS,GAAkB49B,GAArC,kCAEA,MAEN,+BAAK/3D,UAAU,sBACb,gCAAMA,UAAU,4BAA4BwP,EAAW3jG,MACvD,6BAAGm0F,UAAU,2BAA2BwP,EAAWj7E,cAErD,mD,8EC5EZ,I,IAAA,M,IAEA,O,IACA,Q,6DAEwC,WAEtC,OACE,+BAAKyrE,UAAU,qBACb,uCACE,4C,8ECVR,WACA,QAEA,QACA,QACA,QAmCM0lG,EAAqB,CACzB7zH,8CACAT,6C,WAGa,IAAAu0H,aACb,IAAAzkF,UAhBsB,SAACxzG,GAAU,MACeA,EAAM0zG,UAA/CtvC,EAD0B,EAC1BA,mBAAoBN,EADM,EACNA,kBAE3B,MAAO,CACL37D,SAFiBnI,EAAMgR,YAAlB7I,SAGLi8D,qBACAN,uBAUuBk0H,EAAzB,EAvCwB,SAAChlF,GAAU,IAE5BmlF,EAA0EnlF,EAA1EmlF,QAASjwC,EAAiEl1C,EAAjEk1C,SAAU9jF,EAAuD4uC,EAAvD5uC,mBAAoBj8D,EAAmC6qG,EAAnC7qG,SAAUg8D,EAAyB6uC,EAAzB7uC,sBAkBxD,OAAO+jF,GAhBe,SAACn9I,GACrB,IAAM6X,GAAS,IAAAC,oBACX1a,EAEgB4C,IAAY6X,EAAOy+E,wBAAwBt2F,EAAQiD,QAEnEmqL,EAAQ17L,MAAK,IAAA2/F,eAAcrxF,GAAS,KAEpCo5D,EAAsB,IACtBg0H,EAAQ17L,MAAK,IAAA2/F,eAAcrxF,KAG7BotL,EAAQ17L,MAAK,IAAA2/F,eAAcrxF,IAAWq5D,Y,8ECvB5C,I,IAAA,MACA,O,IACA,M,IAEA,O,IACA,Q,IACA,SACA,QACA,QACA,Q,mDAEA,IAAM4uQ,EAAkB,kBAAM,MAExB2/E,EAA0B,SAAC3/S,GAAU,IAElC9vC,EAAiE8vC,EAAjE9vC,aAAc6vQ,EAAmD//N,EAAnD+/N,cAAe5qU,EAAoC6qG,EAApC7qG,SAAUmc,EAA0B0uF,EAA1B1uF,aAAcm5F,EAAYzK,EAAZyK,SAEtD76F,GAAS,IAAAC,oBAET0lG,EAASjkG,EAAaikG,OAASjkG,EAAaikG,OAAO3lG,EAAO9P,MAAQ,EAExE,GAAIy1G,EAAS,EAAG,CAEd,IAAMhwD,EAAU,EAAAj1D,mBACd,+BAAKgvF,UAAWnqF,EAAW,wBAA0B,oCACnD,+BAAKmqF,UAAW,iCAAmCpvB,GACjD,mCAAsB+vQ,aAAc1qN,EAAQyqN,gBAAiBA,MAIjE,mCAAqBD,cAAet1N,IAAa,EAAD,mBAAsBs1N,EAAgB,GAAKA,EACtEC,gBAAiBA,EACjBC,aAAc1qN,EACdpgH,SAAUA,EACVwxF,mBAAoB,KACpBz2B,aAAcA,IAGrC,OAAIu6C,EACKllD,EAIP,+BAAK+5B,UAAU,oCACZ/5B,GAKP,OACE,+BAAK+5B,UAAU,cACb,0CAKNqgU,EAAwB/oQ,UAAY,CAClCmpL,cAAe,UAAUzyN,OACzBh8F,aAAc,UAAUg9B,MAAV,0B,WAeD,IAAAkyD,UAZS,SAACxzG,GAAU,IAC1BkjE,EAAgBljE,EAAM0zG,UAAtBxwC,aAIP,MAAO,CACL/6D,SAJiBnI,EAAMgR,YAAlB7I,SAKL+6D,eACAu6C,WALyBz9G,EAAMqY,YAA1BC,oBASM,CAAyBq6Y,I,8ECzExC,I,IAAA,MACA,OACA,O,IAEA,O,IACA,O,IACA,S,IACA,Q,IAEA,OACA,QACA,SACA,Q,IACA,S,IACA,SACA,Q,OACA,Q,mDAKA,IAiGM36N,EAAqB,CACzB35B,8CACAp7F,mC,WAGa,IAAAwsF,aACb,IAAAj8C,UA3CsB,SAACxzG,GAAU,MACsBA,EAAM0zG,UAAtDtvC,EAD0B,EAC1BA,mBAAoBlB,EADM,EACNA,aAAcR,EADR,EACQA,WADR,EAED1iE,EAAMgR,YAA/BtF,EAF0B,EAE1BA,YAAavD,EAFa,EAEbA,SAFa,EAGenI,EAAMk4L,WAA/C55B,EAH0B,EAG1BA,cAAeQ,EAHW,EAGXA,uBACf94I,EAAmBhmB,EAAMyc,YAAzBuJ,gBACDnG,EAAiB7f,EAAMqN,gBALI,EAMkCrN,EAAMqY,YAAlEG,EAN0B,EAM1BA,qBAAsBF,EANI,EAMJA,iBAAkBwZ,EANd,EAMcA,iBAE3C0lT,EAAwBxxT,EAAgB7pB,OACxC2iK,IACF04K,GAAyB,GAG3B,IAAIlwG,GAAiB,EACrB,GAAIznN,EAAes2H,eAAgB,CAC5B79H,IACHgvN,EAAwC,sBAAvBljK,GAEnB,IAAMghD,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAC3E,GAA6B,IAAzB4sG,EAAcjpH,OAAc,CAC9B,IAAMmoB,GAAe,IAAA69E,gCAA+BijB,EAAc,IAClEkiH,EAAiBhjN,GAAwC,sBAAxBA,EAAatW,QAIlD,MAAO,CACL00D,aACAQ,eACAkB,qBACA14D,cACA4yJ,gBACAn2J,WACAqvU,wBACAlwG,oBAUuBtvC,EAAzB,EAvG0B,SAAChlF,GAAU,IAE9B5uC,EACyE4uC,EADzE5uC,mBAAoBk6F,EACqDtrD,EADrDsrD,cAAeD,EACsCrrD,EADtCqrD,sBAAuBl8I,EACe6wF,EADf7wF,KAAMzW,EACSsnG,EADTtnG,YAAa47N,EACJt0H,EADIs0H,eAClFpkK,EAA8E8vC,EAA9E9vC,aAAcD,EAAgE+vC,EAAhE/vC,gBAAiBP,EAA+CswC,EAA/CtwC,WAAYv6D,EAAmC6qG,EAAnC7qG,SAAUqvU,EAAyBxkO,EAAzBwkO,sBAEjDo7E,EAAqB,WACzB,UAAU/pX,eAAe,EAAAsI,gCAAgCgE,oBACzDkpH,GAAuBC,IAGnBu0P,EAAkB,WACtB,IAAMljB,EAA+B,IAAjBzsU,EAAqB,EAAI,EAC7C,UAAUr6B,eAAe,EAAAsI,gCAAgC6C,4BAA8B27V,GACvF1sU,EAAgB0sU,IAGlB,OAAIxnY,EAEA,mCAASmqF,UAAW,kBAAoBluB,GAAsB1B,EAAa,0BAA4B,KACpG0B,EAAqB,wCAAsB,MAMhD,kCAAQkuB,UAAU,yBACfg1I,EACC,+BAAKh1I,UAAU,8BACb,mCAAOwgU,aAAct7E,EAAuBrkO,MAAM,UAAU4/S,WAAYv7E,GACtE,mCAAYvmF,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,2BACnC4iF,UAAW,+CAAiDgsE,EAAgB,qBAAuB,IACnGkmB,QAASouO,GACnB,0CAGJ,gCAAMtgU,UAAU,oCACVkyF,QAASouO,GACb,4CAAkBljZ,GAAG,6BAGvB,KACJ,+BAAK4iF,UAAU,oEACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAoB,IAAjBwzD,EAAqB,4BAA8B,8BACtFovB,UAAW,8CACXkyF,QAASquO,GACD,IAAjB3vV,EAAqB,wCACpB,uCACE,yCAAeiwC,MAAO,UAAaznG,GAAa6wH,YAItD,gCAAMjqC,UAAU,oCACVkyF,QAASquO,GACb,4CAAkBnjZ,GAAqB,IAAjBwzD,EAAqB,4BAA8B,sC,8EC1EnF,I,IAAA,MACA,O,IAEA,OAEA,Q,OACA,Q,8DAsBe,IAAAswC,UATS,SAACxzG,GAGvB,MAAO,CACL0L,YAHoB1L,EAAMgR,YAArBtF,YAIL4yJ,cAHsBt+J,EAAMk4L,WAAvB55B,iBAOM,EApBY,SAACtrD,GAAU,IAE7BsrD,EAA8BtrD,EAA9BsrD,cAAe5yJ,EAAesnG,EAAftnG,YAEtB,OACE,uCACE,2CAAiBynG,MAAOmrD,EAAgB,EAAAlrD,OAAOC,MAAQ,UAAa3nG,GAAa6wH,e,iFCdvF,I,IAAA,MACA,O,IACA,MACA,O,mDAEA,IAAMy2R,EAAwB,SAAChgT,GAAU,IAEhCjoG,EAAiCioG,EAAjCjoG,QAASoX,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAElB00X,EAAO,GACPz4S,EAAiB/wF,EAAQM,UAAUywF,eAYvC,OAXIj8E,EAAeE,SAAWoC,EAAK1C,WACb,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,8BAAgC1U,EAAQM,UAAUmF,mBAC7FsrF,EAAiB35E,EAAKC,cAAc,CAAC1S,GAAI,8BAAgC3E,EAAQM,UAAUmF,oBAClE,UAAhB2R,EAAKvC,QAAsBuC,EAAK1C,SAAS,oCAAsC1U,EAAQM,UAAUmF,qBAC1GsrF,EAAiB35E,EAAKC,cAAc,CAAC1S,GAAI,oCAAsC3E,EAAQM,UAAUmF,sBAGjGsrF,GAAkBA,EAAe3/F,OAAS,IAC5Co4Y,EAAOz4S,EAAer2F,MAAM,MAAMiJ,QAAO,SAAAtP,GAAA,OAAKA,MAG3Cm1Y,EAAKp4Y,OAKR,8BAAIm2F,UAAW,cAAgBiiT,EAAKp4Y,OAAS,EAAI,oBAAsB,KACpEo4Y,EAAK/kY,KAAI,SAAC+kY,EAAMj/X,GACf,OAAO,8BAAIg9E,UAAU,mBAAmBpzF,IAAK,OAASoW,GAAQi/X,OAN3D,MAYXye,EAAsBppQ,UAAY,CAChC7+I,QAAS,UAAU1L,OAAOshH,Y,WAWb,IAAA8uC,aACb,IAAAj8C,UATsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAIC,GAGzB,CAA6C2lZ,K,8EChD/C,I,IAAA,MACA,OACA,O,IAEA,O,IACA,QAEA,Q,WACA,S,mDAIA,IA+BMh7N,EAAqB,CACzB35B,sBAnCF,OAmCEA,uB,WAIA,IAAA5O,aACE,IAAAj8C,UAhBoB,SAACxzG,GAIvB,MAAO,CACLgmB,gBAJwBhmB,EAAMyc,YAAzBuJ,gBAKLs4I,cAJsBt+J,EAAMk4L,WAAvB55B,iBAcoB05B,EAAzB,EArCmC,SAAChlF,GAAU,IAEzC7wF,EAA+D6wF,EAA/D7wF,KAAMm8I,EAAyDtrD,EAAzDsrD,cAAet4I,EAA0CgtF,EAA1ChtF,gBAAiBq4I,EAAyBrrD,EAAzBqrD,sBAO7C,OACE,mCAAY4yF,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAW,uFACNgsE,EAAgB,qBAAuB,IAC5CkmB,QATa,WACzB,UAAU37I,eAAe,EAAAsI,gCAAgCgE,oBACzDkpH,GAAuBC,KAQrB,mCAAOw0P,aAAc9sY,EAAgB7pB,OAAQg3G,MAAM,YAAY4/S,WAAY/sY,EAAgB7pB,QACzF,+C,8EC3BR,I,IAAA,MACA,OACA,O,IAEA,O,IACA,O,IACA,SAEA,Q,OACA,QACA,Q,IACA,O,mDAGA,IAiCM67L,EAAqB,CACzB/0H,mC,WAIA,IAAAwsF,aACE,IAAAj8C,UAhBoB,SAACxzG,GAIvB,MAAO,CACLkjE,aAJqBljE,EAAM0zG,UAAtBxwC,aAKLx3D,YAJoB1L,EAAMgR,YAArBtF,eAcoBssL,EAAzB,EAvCgC,SAAChlF,GAAU,IAEtC7wF,EAAoD6wF,EAApD7wF,KAAM+gD,EAA8C8vC,EAA9C9vC,aAAcD,EAAgC+vC,EAAhC/vC,gBAAiBv3D,EAAesnG,EAAftnG,YAQ5C,OACE,mCAAYulP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAW,sFACXkyF,QATU,WACtB,IAAMmrN,EAA+B,IAAjBzsU,EAAqB,EAAI,EAC7C,UAAUr6B,eAAe,EAAAsI,gCAAgC6C,4BAA8B27V,GACvF1sU,EAAgB0sU,KAOI,IAAjBzsU,EAAqB,wCACpB,uCACE,yCAAeiwC,MAAO,UAAaznG,GAAa6wH,iB,+EC9B1D,I,IAAA,MACA,O,IACA,MACA,O,IAEA,Q,IACA,QAEA,S,IACA,Q,IACA,O,mDAGA,IAAM02R,EAAgC,SAACjgT,GAAU,IAExC2B,EAC8D3B,EAD9D2B,kBAAmBu+S,EAC2ClgT,EAD3CkgT,qBAAsBpzP,EACqB9sD,EADrB8sD,8BAA+BD,EACV7sD,EADU6sD,iCAC7E19I,EAAmE6wF,EAAnE7wF,KAAMu9I,EAA6D1sD,EAA7D0sD,4BAA6B6wG,EAAgCv9J,EAAhCu9J,eAAgB4iJ,EAAgBngT,EAAhBmgT,aAYrD,OACE,wCACG,SAACx5T,EAAoBy5T,GAArB,OACC,mCACE91L,QACE,mCACEhrI,UAAU,kBACVirI,eAAA,EACAH,QAASt9D,EACT09D,SAAU,kBAnBA,SAAC41L,GAGrB,UAAUvqX,eAAe0nO,GAAkBzwG,GAE3C,IAAMuzP,EAAkBvzP,EAAgCozP,EAAuBv+S,EAC/EkrD,GAAkCC,GAClCszP,EAAuBC,EAAiB3zP,GAA6B,GAAO,GAYlD4zP,CAAcF,IAC9BjgT,MAAM,YAGV9qE,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAIyjZ,GAAgB,mCAOzDF,EAA8BrpQ,UAAY,CACxCj1C,kBAAmB,UAAU52F,MAAM4iG,WACnCuyS,qBAAsB,UAAUn1Y,MAAM4iG,WACtC4vJ,eAAgB,UAAUrmO,OAC1BipX,aAAc,UAAUjpX,QAG1B,IAUM8tJ,EAAqB,CACzBn4B,qE,WAGa,IAAApQ,aACb,IAAAj8C,UAfsB,SAACxzG,GAAU,MACoCA,EAAMk4L,WAE3E,MAAO,CACLp4B,8BAJ+B,EAC1BA,8BAILJ,4BAL+B,EACKA,4BAKpChiJ,aAJqB1d,EAAMyc,YAAtBiB,gBAakBs6K,EAAzB,CAA6Ci7N,K,8HCtE/C,O,OACA,OAEA,QACA,SACA,Q,IACA,MACA,QACA,QACA,Q,6DAEe,SAACzvG,GAEd,IAoEMxrH,EAAqB,CACzBn4B,oEACAJ,gEACA14F,+CAGF,OAAO,IAAAysC,UAnBiB,SAACxzG,GAAU,MACgCA,EAAM0zG,UAGvE,MAAO,CACL5vC,kBAL+B,EAC1BA,kBAKLm9S,gBAN+B,EACP78S,mBAMxBukP,gBAP+B,EACaA,gBAO5CjrS,aANqB1d,EAAMyc,YAAtBiB,aAOLpF,iBANyBtY,EAAMqY,YAA1BC,oBAgBuB0/K,EAAzB,EA1EuB,SAAChlF,GAAU,IAUjC,EARClvC,EACwEkvC,EADxElvC,kBAAmBpmD,EACqDs1F,EADrDt1F,aAAcmiJ,EACuC7sD,EADvC6sD,iCAAkCJ,EACKzsD,EADLysD,+BACxEnnJ,EAA6E06F,EAA7E16F,iBAAkByuD,EAA2DisC,EAA3DjsC,sBAAuB4hP,EAAoC31M,EAApC21M,gBAAiBs4D,EAAmBjuQ,EAAnBiuQ,gBAHrB,GAKW,IAAAp4N,UAAS,IALpB,qBAKhCl0C,EALgC,KAKb4+S,EALa,QAMiB,IAAA1qQ,UAAS,IAN1B,qBAMhCqqQ,EANgC,KAMVM,EANU,KAQjC1rQ,GAAY,IAAAF,gBAEZ6rQ,GAAA,gCAAwB,sHACxBn7Y,EADwB,oDAItBsK,GAAS,IAAAC,sBACTyB,EAAew/C,EAAoBA,EAAkB17D,YAAcwa,EAAOgb,wBAAwBqjV,KACnF38V,EAAaw1E,oBANN,sDAStB6C,GAAgB,IAAAC,cAAY,IATN,iBAY1B,IADI85C,EAAW,GAXW,8CAYjB75C,EAZiB,SAapBA,EAAav4E,cAAiBu4E,EAAav4E,aAAaw1E,qBAAwB+C,EAAav4E,aAAaokG,mBAE5GguB,EAASj6I,MAAK,IAAA49F,6BAA4BwC,EAAav4E,cAAciV,MAAK,WAAM,IACvE6qC,EAAsB,UAAMv6D,WAAW6pG,UAAvCtvC,mBACHy4B,EAAav4E,aAAatW,SAAWo2D,GACvC,UAAMz4C,SAASo7C,UANvB,EAAyB41B,EAAzB,+CAAwC,IAZd,sPAuBpB7+F,QAAQ64I,IAAID,GAvBQ,QAyBxB5yE,IAAmB,GAC+B,IAAA2wC,sBAAqB3wC,EAAmBpmD,GAArFi3F,EADc,EACdA,kBAAmBC,EADL,EACKA,uBAC1BirD,GAAiC,GAC7B/X,MACFyrQ,EAAqB5+S,GACrB6+S,EAAwB5+S,IAE1B6qD,EAA+B37F,IAhCL,+EAAxB,4CAyCN,OALA,IAAAulD,YAAU,WACRoqS,MAEC,CAAC3vV,EAAmBxrD,EAAkBqwS,IAElC,wBAACnF,GAAD,gBAAsBxwM,EAAtB,CAA6B2B,kBAAmBA,EAAmBu+S,qBAAsBA,U,8EChEpG,W,OACA,OACA,QAEA,QACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,S,IACA,S,IACA,S,mDAEA,IAkGMl7N,EAAqB,CACzBtzH,uC,WAGa,IAAA8uC,UAvBS,SAACxzG,GAAU,MACIA,EAAM0zG,UAApChxC,EAD0B,EAC1BA,WAAYiC,EADc,EACdA,eADc,EAEgB3kE,EAAMwc,UAAhDkV,EAF0B,EAE1BA,eAAgB5U,EAFU,EAEVA,uBAChB7S,EAAajK,EAAM8J,UAAnBG,UACAgF,EAAYjP,EAAMkP,UAAlBD,SACA03G,EAAkB3mH,EAAMilV,UAAxBt+N,eAEP,MAAO,CACLjkD,aACAiC,iBACA9kD,eAAgB7f,EAAMqN,gBACtBqkB,iBACA5U,yBACA7S,YACAgF,WACA03G,oBAQoCqxE,EAAzB,EAtGS,SAAChlF,GAAU,IAE1BruC,EAAkHquC,EAAlHruC,eAAgBD,EAAkGsuC,EAAlGtuC,kBAAmB7kD,EAA+EmzF,EAA/EnzF,eAAgB/C,EAA+Dk2F,EAA/Dl2F,uBAAwB7S,EAAuC+oG,EAAvC/oG,UAAWgF,EAA4B+jG,EAA5B/jG,SAAU03G,EAAkB3T,EAAlB2T,eACjGntG,EAAqBqG,EAAezQ,SAEtC5N,GAAW,IAAA+vY,eAETmiB,EAAgB/uV,EAAe9iE,SAAS,EAAAob,OAAOC,QAC9CypG,IAAmBhiD,GAAkBnjE,EAAS+d,UAAY/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAOC,OAEnG,IAAAmsG,YAAU,YACH1kD,GAAkBnjE,EAAS+d,UAAY/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAOC,MAC5EwnD,EAAkB,EAAAznD,OAAOC,MAChBw2Y,GAAkBlyZ,EAAS+d,WAAa/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAOC,OACnFwnD,EAAkB,MAGnB,CAACljE,EAAS+d,WAEb,IAAMk0P,GAAkB,IAAAz9E,mBAAkB/rL,GACpC0pZ,EAA8Bn6Y,EAAmBuD,0BAA4BD,MAA6B22P,IAAmBxkQ,EAAS9S,QAEtIy3Z,EAAgB,WACpB,OAAKp6Y,EAAmBsf,YAGpB66X,GAAiCnyZ,EAAS+d,UAAa/d,EAAS+d,WAAa,EAAAtC,OAAOC,OAC/E,oCAAU+iD,GAAI,EAAAhjD,OAAOC,OAHrB,oCAAU+iD,GAAI,EAAAhjD,OAAOyuF,QAQhC,OACE,mCAASpZ,UAAW,8EAAgFohU,EAAgB,yBAA2B,KAC7I,sCACE,iCAAOG,OAAA,EAAM9yS,KAAM,EAAA9jG,OAAOC,MACvB02Y,KAAmB,yCAEtB,iCAAO7yS,KAAM,EAAA9jG,OAAO6uF,WAClB,yCAEF,iCAAOiV,KAAM,EAAA9jG,OAAO8uF,cAClB,yCAEF,iCAAOgV,KAAM,EAAA9jG,OAAO+uF,WAClB,yCAEF,iCAAO+U,KAAM,EAAA9jG,OAAOqvF,iBAClB,yCAEF,iCAAOyU,KAAM,EAAA9jG,OAAOsvF,WAClB,yCAEF,iCAAOwU,KAAM,EAAA9jG,OAAOivF,iBACjB0nT,KAAmB,yCAEtB,iCAAO7yS,KAAM,EAAA9jG,OAAOgvF,aACjB2nT,KAAmB,yCAEtB,iCAAO7yS,KAAM,EAAA9jG,OAAOkvF,cACjBynT,KAAmB,yCAEtB,iCAAO7yS,KAAM,EAAA9jG,OAAOmvF,aACjBwnT,KAAmB,yCAEtB,iCAAO7yS,KAAM,EAAA9jG,OAAOuvF,aACjBonT,KAAmB,yCAEtB,iCAAO7yS,KAAM,EAAA9jG,OAAOovF,cACjBunT,KAAmB,yCAEtB,iCAAO7yS,KAAM,EAAA9jG,OAAOwvF,aACjBmnT,KAAmB,+C,wGC7F9B,O,OACA,OACA,OACA,Q,IAEA,Q,IACA,O,IAEA,SACA,Q,IACA,S,IACA,Q,IACA,Q,IACA,QACA,QACA,S,8DAwHe,IAAA37N,aACb,IAAAzkF,UAfsB,SAACxzG,GAAU,IAC1ByI,EAAYzI,EAAMwc,UAAlB/T,SACAN,EAAYnI,EAAMgR,YAAlB7I,SAEP,MAAO,CACLM,WACA+Q,mBAHiBxZ,EAAMqN,gBAAlB+B,SAILjH,cAIuB,GAIzB,EAvH6B,SAAC6qG,GAAU,IAIlC,EAWA,EAbC7qG,EAAmD6qG,EAAnD7qG,SAAUgwL,EAAyCnlF,EAAzCmlF,QAAS1vL,EAAgCuqG,EAAhCvqG,SAAU+Q,EAAsBw5F,EAAtBx5F,mBAE9Bs6Y,GAAA,gCAAuB,qGACrB,IAAAhmF,wBADqB,OAEvBt0T,EAAmBwuC,MACrBmwI,EAAQ17L,KAAK,EAAAwgB,OAAOsvF,WACX/yF,EAAmBuf,kBAC5Bo/J,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,aAEpBksF,EAAQ17L,KAAK,EAAAwgB,OAAOuvF,aAPK,kDAAvB,4CAWAunT,GAAA,gCAAsB,WAAOnmF,GAAP,wFACD,IAAAI,2BAA0BJ,EAAwB,EAAAz8R,gCAAgCwE,qBAAsBm+W,GADvG,2DAGjB,GAHiB,uBAKpBA,IALoB,kDAAtB,6CAQAE,EAAe,SAACtnI,EAAiBkhD,GAAlB,OACnB,mCAAWt7O,UAAU,6BAClBnqF,EAAW,KACV,wCACE,8BAAImqF,UAAU,oBACZ,4CAAkB5iF,GAAG,qCAEvB,6BAAG4iF,UAAU,wBACX,4CAAkB5iF,GAAG,yCAI3B,mCAA8Bg9Q,gBAAiBA,IAC/C,+BAAKp6L,UAAU,mBACb,+BAAKA,UAAU,wBACb,yCAEDnqF,EAAW,KACV,+BAAKmqF,UAAU,yBACb,mCAAQA,UAAU,2EACV9H,UAAW/hF,EAAS2wP,cACpB50E,QAAS,kBAAMuvO,EAAoBnmF,KACzC,4CAAkBl+T,GAAG,0CAQjC,OAAIvH,EAEA,wCACG,SAACukR,EAAiBkhD,GAEjB,IAAM34E,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAOC,QAGxB,CACE62N,UAAW,qDACXmhB,QAAS,+CACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAO6uF,aAGxB,CACEioI,UAAW,mCACXmhB,QAAS,0CACT1wE,QAAS,kBAAMuvO,EAAoBnmF,IACnCpjP,UAAW/hF,EAAS2wP,gBAIxB,OACE,+BAAK9mK,UAAU,MACb,+BAAKA,UAAU,WACb,mCAAuB10C,MAAM,kCACNizM,SAAS,wCAC/BmjK,EAAatnI,EAAiBkhD,GAC/B,+BAAKt7O,UAAU,eAEjB,mCAAuB2iK,oBAAqBA,QAStD,wCACG,SAACy3B,EAAiBkhD,GAAlB,OAA6ComF,EAAatnI,EAAiBkhD,W,mHCpHlF,O,OACA,O,IACA,M,IACA,O,IAEA,QAEA,UACA,Q,OACA,U,mDAEA,IAAMqmF,EAAkC,CACtC,4BAA+B,QAC/B,SAAY,OACZ,YAAe,UAIXC,EAAmB,SAAClhT,GAAU,IAE3B1zG,EAC0D0zG,EAD1D1zG,SAAU+sR,EACgDr5K,EADhDq5K,WAAYmmH,EACoCx/R,EADpCw/R,cAAerwX,EACqB6wF,EADrB7wF,KAAM40J,EACe/jE,EADf+jE,aAAc63J,EACC57N,EADD47N,mBAAoBh4J,EACnB5jE,EADmB4jE,oBAClF81G,EAA+D15K,EAA/D05K,gBAAiB/rK,EAA8C3N,EAA9C2N,WAAYyuK,EAAkCp8K,EAAlCo8K,OAAQw+C,EAA0B56N,EAA1B46N,uBAHL,GAKF,IAAA/kL,WAAS,GALP,qBAK3BsrQ,EAL2B,KAKjBC,EALiB,KAM5BC,GAAkB,IAAA1sQ,QAAO,MAEzB0/E,EAAS,SAAC/+H,IACd,IAAAo+M,aAAYp+M,EAAOhpG,EAAUkzY,EAAez7N,EAAc63J,EAAoBh4J,KAUhF,IAAA+vI,qBAAoBj6B,EAAiBrlD,EAAQglD,IAE7C,IAAAhjK,YAAU,WACR,OAAO,WACL,GAAIxpH,OAAOy0Z,QAAUz0Z,OAAOy0Z,OAAOC,MAAQ10Z,OAAOy0Z,OAAOC,KAAKjsT,MAAO,CACnEzoG,OAAOiiV,aAAe,KACtB,IAAM0yE,EAAe1zZ,SAASg9F,cAAc,kBACxC02T,IACF,aAAEA,GAAcj1O,aAKrB,IAEH,IASM,EAAAk1O,GAAA,gCAAoB,iGAClBjjQ,EAAgBswL,aAAa4yE,WADX,oDAKjBC,EAAyCnjQ,EAAzCmjQ,kBAAmBC,EAAsBpjQ,EAAtBojQ,mBACtBD,GACFttL,EAAO,CAACjpN,OAAQ,CAACxf,MAAO+1Z,KAEtB,UAAOpsZ,aACT7I,QAAQ4B,IAAIkwJ,GAETojQ,EAZmB,iDAexBx4Z,OAAOmc,KAAK07Y,GAAiCnuZ,SAAQ,SAAA+uZ,GACnD,IAAM5pD,EAAY2pD,EAAmBphZ,MAAK,SAAAy3V,GAAA,OAAaA,EAAU/iV,MAAMrmB,SAASgzZ,MAC5E5pD,IACFunC,EAAcyhB,EAAgCY,GAAe5pD,EAAU6pD,WAAa7pD,EAAU8pD,YACzE,gCAAjBF,GAAkD5pD,EAAU8pD,WAC9DviB,EAAc,aAAcvnC,EAAU8pD,YACZ,gBAAjBF,GAAkCjnF,GAC3Cx3O,YAAW,WACTw3O,MACC,OAxBe,kDAApB,4CA8BAonF,EAAmB,WACnBn1Z,OAAOy0Z,QAAUz0Z,OAAOy0Z,OAAOC,MAAQ10Z,OAAOy0Z,OAAOC,KAAKU,SAC5Dp1Z,OAAOiiV,aAAe,IAAIjiV,OAAOy0Z,OAAOC,KAAKU,OAAOC,aAClDb,EAAgBn4S,SAGlBr8G,OAAOiiV,aAAaqzE,UAAU,CAAC,qBAAsB,sBACrDt1Z,OAAOiiV,aAAaszE,YAAY,gBAAiBX,MAIrD,IAAAprS,YAAU,WACHvoH,SAAS02F,eAAe,sBAC3B,IAAAw+S,YAAA,oHAEE,KACA,sBAIH,IAEH,IAAMloH,EAAc/2G,GAAgBznK,MAAMC,QAAQwnK,EAAaz3K,OAAgBy3K,EAAaz3K,GAAUnD,OAEtG,OACE,+BAAKm2F,UAAU,cACb,mCAAWA,UAAU,aACVx/E,KAAM,OACN65Q,SAAUwnI,EAAWE,EAAkB,KACvCz1Z,MAAOytR,EACPu6B,SAAUjmM,EACV31G,KAAK,QACLq9B,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAI,yBAC/B23N,OAAQA,EACR7J,SA5FE,SAACl1H,IAChB,IAAAoqI,eAAcpqI,EAAOhpG,EAAUkzY,EAAez7N,EAAc63J,EAAoBh4J,IA4FnEwwD,QA1EC,WACT+sL,IACHC,GAAY,GACZh+T,YAAW,WACT4+T,MACC,KAsEQr1Z,MAAOmuR,EACP+4B,gBAAiB,CAACz3B,UAClB03B,WACEh5B,EAAc3rQ,EAAKC,cAAc,CAAC1S,GAAKqnK,EAAaz3K,GAAU,KAAM,GAEtE61P,QAAQ,eAKzB++J,EAAiBtqQ,UAAY,CAC3BtqJ,SAAU,UAAU4qC,OAAOy2E,WAC3B6xR,cAAe,UAAU/rN,KAAK9lE,WAC9BA,WAAY,UAAUmpC,KAEtB4iI,gBAAiB,UAAU5iI,KAC3BitB,aAAc,UAAU13K,OACxBuvU,mBAAoB,UAAUnoJ,KAC9B7P,oBAAqB,UAAU6P,KAC/BmnJ,uBAAwB,UAAUnnJ,M,WAGrB,IAAAh3B,YAAWykQ,I,wFC5IX,SAA2BmB,GACxC,IAAM3oB,EAAa2oB,EAASC,WAAW,KAAM,IACzCC,EAAO,IAAIx3U,OAAO,oBAClBy3U,EAAO,IAAIz3U,OAAO,6BAClB03U,EAAO,IAAI13U,OAAO,uBAClB23U,EAAO,IAAI33U,OAAO,uBAElB43U,EAAa,IAAI53U,OAAO,qBACxB63U,EAAc,IAAI73U,OAAO,qBAEzB83U,EAAS,IAAI93U,OAAO,yBACpB+3U,EAAS,IAAI/3U,OAAO,8BACpBg4U,EAAS,IAAIh4U,OAAO,0BAEpBi4U,EAAS,IAAIj4U,OAAO,4BACpBk4U,EAAO,IAAIl4U,OAAO,uBAGtB,GAAIy3U,EAAKvwZ,KAAKynY,GACZ,MAAO,CAAC1iX,KAAM,OAAQi6E,KAAMiyT,EAAgB,SAE9C,GAAIX,EAAKtwZ,KAAKynY,GACZ,MAAO,CAAC1iX,KAAM,OAAQi6E,KAAMiyT,EAAgB,SAE9C,GAAIP,EAAW1wZ,KAAKynY,IAAekpB,EAAY3wZ,KAAKynY,GAClD,MAAO,CAAC1iX,KAAM,aAAci6E,KAAMiyT,EAAgB,eAEpD,GAAIL,EAAO5wZ,KAAKynY,IAAeopB,EAAO7wZ,KAAKynY,IAAeqpB,EAAO9wZ,KAAKynY,GACpE,MAAO,CAAC1iX,KAAM,WAAYi6E,KAAMiyT,EAAgB,aAElD,GAAIF,EAAO/wZ,KAAKynY,GACd,MAAO,CAAC1iX,KAAM,SAAUi6E,KAAM,mCAAS15C,SAAS,QAAQ09E,QAAS,eAAgB,mBAEnF,GAAIguR,EAAIhxZ,KAAKynY,GACX,MAAO,CAAC1iX,KAAM,MAAOi6E,KAAMiyT,EAAgB,QAE7C,GAAIT,EAAKxwZ,KAAKynY,IAAegpB,EAAKzwZ,KAAKynY,GACrC,MAAO,CAAC1iX,KAAM,YAAai6E,KAAMiyT,EAAgB,aAEnD,MAAO,CAAClsY,KAAM,GAAIi6E,KAAM,mCAAgBloF,MAAO,CAAC,MAAS,EAAAq3F,OAAO8oB,WAhDlE,I,IAAA,M,IACA,S,IACA,O,IAEA,SACA,Q,mDAEA,IAAMg6R,EAAkB,SAACC,GAAD,OAAc,mCAAS5rW,SAAS,QAAQ09E,QAAS,aAAc,UAAgBkuR,M,8ECPvG,I,IAAA,MACA,OAEA,OACA,Q,IACA,SACA,Q,IACA,SACA,QACA,Q,8DA0De,IAAA1mQ,aACb,IAAAj8C,UAdsB,SAACxzG,GAAU,MACEA,EAAM4U,YAIzC,MAAO,CACL4L,OAN+B,EAC1BA,OAML7L,iBAP+B,EAClBA,iBAOb1K,UANkBjK,EAAM8J,UAAnBG,UAOL4V,eANqB7f,EAAMqN,mBAW7B,EAzDuB,SAAC2lG,GAAU,IAE3B/oG,EAA2C+oG,EAA3C/oG,UAAWuW,EAAgCwyF,EAAhCxyF,OAAQ2B,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAEhC,OACE,+BAAKyyE,UAAU,WACZ9xE,EAAOhR,KAAI,SAAC4R,EAAO1M,GAElB,IAAM87R,EAAgBvmS,EACnByE,QAAO,SAAA2E,GAAA,OAAS,EAAA/P,mBACb+P,EAAM1E,UAAY,EAAAC,mBAAmBC,OAASwE,EAAMqoF,sBACnDroF,EAAMqoF,wBACVtrF,MAAK,SAACC,EAAGC,GAAJ,OAAU,IAAAgrF,iBAAgBjrF,EAAEtC,YAAa9D,IAAa,IAAAqxF,iBAAgBhrF,EAAEvC,YAAa9D,MAE7F,OAAKumS,EAAcr0S,OAYjB,+BAAKm2F,UAAU,aAAapzF,IAAK,QAAUwV,GACzC,8BAAI49E,UAAU,mCACX,IAAA/xE,aAAY7L,EAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,IAE1E,8BAAIyyE,UAAU,oBACXk+M,EAAchhS,KAAI,SAAA1B,GACjB,OAAO,mCAAqBA,SAAUA,EAAU5O,IAAK4O,EAAS4B,SAGlE,yCAlBA,+BAAK4iF,UAAU,aAAapzF,IAAK,QAAUwV,GACzC,8BAAI49E,UAAU,mCAAmCpzF,IAAK,QAAUwV,GAC9D,4CAAkBhF,GAAG,sC,uHC9BrC,MACA,OACA,QAEA,Q,OACA,QACA,QACA,Q,IACA,SACA,S,6DAEe,SAAC8zS,GAmFd,OAAO,IAAAvrH,aACL,IAAAzkF,UAfsB,SAACxzG,GAKvB,MAAO,CACLmI,SALiBnI,EAAMgR,YAAlB7I,SAMLupB,eALuB1xB,EAAMwc,UAAxBkV,eAMLlY,mBALiBxZ,EAAMqN,gBAAlB+B,YASkB,GAGzB,EAlF4B,SAAC4jG,GAAU,IAEhCmlF,EAAmEnlF,EAAnEmlF,QAAS32L,EAA0DwxG,EAA1DxxG,SAAUkwB,EAAgDshF,EAAhDthF,eAAgBvpB,EAAgC6qG,EAAhC7qG,SAAUqR,EAAsBw5F,EAAtBx5F,mBAE9C48Y,KAAoB50Z,GAAYA,EAAS+d,UAAY/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAOovF,eAE7F,OACE,wCACG,SAACgqT,GAEA,IAAM,EAAAC,GAAA,gCAAoB,2GACxB,UAAUztX,eAAe,EAAAsI,gCAAgCuE,mBACpDhkB,EAFmB,uBAGtBymK,EAAQ17L,KAAK0L,EAAW,EAAA8U,OAAO8uF,aAAe,EAAA9uF,OAAO6uF,WAH/B,8BAMpBtyF,EAAmB7H,aAAgBykZ,EANf,uBAOtBj+N,EAAQ17L,KAAK,EAAAwgB,OAAOovF,cAPE,iCAUxB,IAAA/9E,gBAVwB,WAWG,IAAA6wE,WAAU,CACnCC,QAAQ,EACRg1B,kBAAkB,EAClB/0B,aAAa,IAdS,YAWlB0uO,EAXkB,UAiBtBjtU,SAASC,SAAS4b,MAAQoxT,EAAapxT,OAjBjB,GAmBwB,IAAA6zO,+BAAzCx0O,EAnBiB,EAmBjBA,SAAUpd,EAnBO,EAmBPA,MAAOkpB,EAnBA,EAmBAA,MAAO5e,EAnBP,EAmBOA,IAAKynP,EAnBZ,EAmBYA,UAChCn3O,EAAmBuf,kBApBC,kCAqBQs9X,IArBR,WAqBhBE,EArBgB,OAsBtB72Z,QAAQ4B,IAAI,kBAAmBi1Z,GAC/B,UAAUztX,mBAAmB,WAAY,CAAC9sB,WAAUpd,QAAOkpB,QACzD+nO,OAAQ,GACR3mP,MACAynP,WACA6lK,eAAgBD,GAAmBA,EAAgBt8R,qBAAuBs8R,EAAgBt8R,oBAAoBw8R,QAC1GF,EAAgBt8R,oBAAoBw8R,QAAU,uBAEpD,IAAAz8T,iBACKu8T,GAAoBA,EAAgBt8R,qBAA4E,MAArDs8R,EAAgBt8R,oBAAoBC,aA/B9E,2CAgCb,GAhCa,gCAmCtB,UAAUpxF,mBAAmB,WAAY,CAAC9sB,WAAUpd,QAAOkpB,QACzD+nO,OAAQ,GACR3mP,MACAynP,WACA6lK,eAAgB,2BAvCI,SA0CxB,IAAAx8T,iBACI+zO,GACF51I,EAAQ17L,KAAK,EAAAwgB,OAAOwvF,aA5CE,mDAApB,4CAgDN,OACE,wBAAC+2M,GAAD,gBAAsBxwM,EAAtB,CAA6BsjT,kBAAmBA,c,8ECxE5D,I,IAAA,M,IACA,Q,IACA,M,IAEA,Q,IAEA,S,IACA,Q,IACA,S,IACA,Q,mDAGA,IAAMI,EAAgC,SAAC1jT,GAAU,IAExCw+C,EAAkEx+C,EAAlEw+C,cAAemlQ,EAAmD3jT,EAAnD2jT,eAAgBC,EAAmC5jT,EAAnC4jT,iBAAkBC,EAAiB7jT,EAAjB6jT,cAElDC,EAAsB,SAACx3Z,EAAUV,GACrC+3Z,EAAer3Z,EAAUV,IAGrBg4K,EAAsB,SAACt3K,EAAUy3Z,GACrC,IAAMlgP,GAAe,aAAKkgP,GACpB38R,EAAS,GAEf,OAAQ96H,GACN,IAAK,WACH,IAAKu3K,EAEH,OADAz8C,EAAO39H,KAAK,gCACL29H,EAET,MAEF,IAAK,SACH,IAAKy8C,EAEH,OADAz8C,EAAO39H,KAAK,oCACL29H,EAET,IAAK,UAAKu6C,MAAMkC,GAEd,OADAz8C,EAAO39H,KAAK,sCACL29H,EAKb,OAAOA,GAGT,OACE,wCACG,SAACsyJ,EAAiBkhD,GAAlB,OACC,mCAAWt7O,UAAU,wBAClBl2F,OAAOmc,KAAKi5I,GAAehiJ,KAAI,SAAAwnZ,GAC9B,MAAiB,eAAbA,EACK,KAEQ,aAAbA,EAEA,+BAAK1kU,UAAU,wBAAwBpzF,IAAK83Z,GAC1C,mCAAkB13Z,SAAU03Z,EACVppF,uBAAwBA,EACxBlhD,gBAAiBA,EACjBL,WAAY76H,EAAcwlQ,GAC1BxkB,cAAeskB,EACflgP,oBAAqBA,EACrBG,aAAc8/O,EACdjoF,mBAAoBgoF,EACpBj2S,YAAY,KAKlC,+BAAKruB,UAAU,wBAAwBpzF,IAAK83Z,GAC1C,mCAAW13Z,SAAU03Z,EACVtqI,gBAAiBA,EACjBL,WAAY76H,EAAcwlQ,GAC1BxkB,cAAeskB,EACflgP,oBAAqBA,EACrBG,aAAc8/O,EACdjoF,mBAAoBgoF,EACpBj2S,YAAY,aAUvC+1S,EAA8B9sQ,UAAY,CACxC4H,cAAe,UAAUnyJ,OAAOshH,WAChCg2S,eAAgB,UAAUlwO,KAAK9lE,WAC/Bk2S,cAAe,UAAUx3Z,OACzBu3Z,iBAAkB,UAAUnwO,M,UAGfiwO,G,8EChGf,I,IAAA,MACA,O,IACA,M,IAEA,S,IACA,Q,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,SACA,U,mDAGA,IAAMO,EAAY,SAACjkT,GAAU,IAEpB1zG,EAC0B0zG,EAD1B1zG,SAAU+sR,EACgBr5K,EADhBq5K,WAAYmmH,EACIx/R,EADJw/R,cAAerwX,EACX6wF,EADW7wF,KAAM40J,EACjB/jE,EADiB+jE,aAAc63J,EAC/B57N,EAD+B47N,mBAAoBh4J,EACnD5jE,EADmD4jE,oBAClF81G,EAA+B15K,EAA/B05K,gBAAiB/rK,EAAc3N,EAAd2N,WAEb0mH,EAAS,SAAC/+H,IACd,IAAAo+M,aAAYp+M,EAAOhpG,EAAUkzY,EAAez7N,EAAc63J,EAAoBh4J,IAG1E4mD,EAAW,SAACl1H,IAChB,IAAAoqI,eAAcpqI,EAAOhpG,EAAUkzY,EAAez7N,EAAc63J,EAAoBh4J,KAGlF,IAAA+vI,qBAAoBj6B,EAAiBrlD,EAAQglD,GAE7C,IAAMyB,EAAc/2G,GAAgBznK,MAAMC,QAAQwnK,EAAaz3K,OAAgBy3K,EAAaz3K,GAAUnD,OAEhG2W,EAAoB,UAAbxT,GAAqC,aAAbA,EAA0B,OAASA,EAExE,MAAiB,eAAbA,EAEA,+BAAKgzF,UAAU,cACb,mCAAa6iK,QAAQ,WAAWnqP,KAAK,SACnC,mCAAYyiU,QAAQ,YAClB,4CAAkB/9T,GAAI,eAAiBpQ,KAEzC,mCAAegzF,UAAU,aACV5iF,GAAIpQ,EACJwT,KAAMA,EACNlU,MAAOytR,EACPu6B,SAAUjmM,EACVu2S,aAA2B,eAAb53Z,EACZ,mCAAgB8jC,SAAS,QACtB,aAAkBipP,GAAYpoL,MAE/B,KACJ57D,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAI,eAAiBpQ,IAChDk+N,SAAUA,EACV6J,OAAQA,EACR1nO,MAAOmuR,EACP34B,QAAQ,aACtB24B,EACC,mCAAgBx7L,UAAU,4FACxB,4CAAkB5iF,GAAIqnK,EAAaz3K,GAAU,MAE7C,OAOV,+BAAKgzF,UAAU,cACb,mCAAWA,UAAU,aACVx/E,KAAMA,EACNlU,MAAOytR,EACPu6B,SAAUjmM,EACV31G,KAAK,QACLq9B,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAI,eAAiBpQ,IAChDk+N,SAAUA,EACV6J,OAAQA,EACR1nO,MAAOmuR,EACPg5B,WACEh5B,EAAc3rQ,EAAKC,cAAc,CAAC1S,GAAKqnK,EAAaz3K,GAAU,KAAM,GAEtE61P,QAAQ,eAKzB8hK,EAAUrtQ,UAAY,CACpBtqJ,SAAU,UAAU4qC,OAAOy2E,WAC3B6xR,cAAe,UAAU/rN,KAAK9lE,WAC9BA,WAAY,UAAUmpC,KAEtB4iI,gBAAiB,UAAU5iI,KAC3BitB,aAAc,UAAU13K,OACxBuvU,mBAAoB,UAAUnoJ,KAC9B7P,oBAAqB,UAAU6P,M,WAGlB,IAAAh3B,YAAWwnQ,I,yGC/F1B,OACA,O,IACA,MAEA,QAEA,QAQA,QACA,QACA,QACA,QACA,QACA,UACA,QACA,QAMA,QACA,QACA,QACA,Q,mDAEA,IAAIE,EAAgB,GAChBC,GAAkB,EAKhBC,EAAc,SAACrkT,GAAU,IAUvB,EARC/jF,EAEwD+jF,EAFxD/jF,aAAcH,EAE0CkkF,EAF1ClkF,UAAW2zC,EAE+BuwC,EAF/BvwC,cAAeC,EAEgBswC,EAFhBtwC,WAAYoB,EAEIkvC,EAFJlvC,kBAAmBJ,EAEfsvC,EAFetvC,qBAC5ES,EAC6D6uC,EAD7D7uC,sBAAuBC,EACsC4uC,EADtC5uC,mBAAoBO,EACkBquC,EADlBruC,eAAgBD,EACEsuC,EADFtuC,kBAAmBpsD,EACjB06F,EADiB16F,iBAC9E8wG,EAA6DpW,EAA7DoW,wBAAyBzuF,EAAoCq4E,EAApCr4E,kBAAmB5K,EAAiBijF,EAAjBjjF,cAG1CvuB,GAAW,IAAA+vY,eACX+lB,EAAU,EAERC,GAAA,gCAAsB,gIAEtB/1Z,IAAYA,EAAS+d,SAFC,oBAIE,MAAtB/d,EAAS+d,SAJW,uBAKlBmjD,GACFD,EAAc,MAEZqB,GACFJ,EAAqB,MAEnBU,GACFD,EAAsB,IAEpBQ,GACFD,EAAkB,IAfE,6BAwBlB9hD,GAAS,IAAAC,oBAxBS,GAyB+B,IAAAi6F,kBAAiBt7G,EAAS+d,UAA5E09F,EAzBmB,EAyBnBA,cAAeC,EAzBI,EAyBJA,oBAAqBC,EAzBjB,EAyBiBA,WAIrCq6S,GAAc,EACdC,GAAa,EACbC,GAAgB,GAEhBtuS,IAA2BnM,EAjCP,oBAkChBlhB,GAAS,IAAAoB,wBAAuBruE,EAAWmuF,GAC3C06S,EAAoB7oY,EAAUtb,MAAK,SAAAuoF,GAAA,OAAUA,EAAOrsF,KAAOuf,OAC7D8sE,GAAUA,EAAOrsF,IAAOqsF,EAAOrsF,KAAOuf,GAAiB0oY,GAAsBA,EAAkB37T,SAAWihB,GApCxF,wBAwCpBy6S,GAAgB,EAxCI,WAyCd,IAAA9gR,gBAAe76C,EAAQhsE,GAzCT,YA4CpBotF,GAAe7kG,EA5CK,oBA6ChBu8I,EAAsB33C,EAAsBA,EAAoB72G,QAAQ,MAAO,KAAO,IACxFuuI,GAAe9wE,GAAsBA,EAAkBz4D,UAAU2+B,MAAQmzE,GACxEr5C,EAAkBz4D,UAAUmF,oBAAsB2sG,EAEnDv6F,EAAOkyI,gBAAgB33C,EAAY03C,IAClCjyI,EAAOkyI,gBAAgB33C,EAAY03C,GAAoB,GAAO,GAF/D/wF,IAGkBqzV,EAAct1Z,SAASs7G,KACvCD,GAAwBt6F,EAAOgb,wBAAwBu/E,EAAW92G,QAAQ,MAAO,MApDjE,wBAqDf+iH,IACH,IAAA96F,gBAtDkB,WAwDC,IAAAqmI,+BAA8Bx3C,EAAYD,GAxD3C,QAwDpB03B,EAxDoB,OAyDfxrB,IACH,IAAApvB,iBA1DkB,QA6DtB,GAAI46C,EAAc,CAEhB,GADA6iR,EAAa7iR,GACRwiR,IAAmB,IAAAh7Y,oBAAmBq7Y,GAGzC,IAFAL,GAAkB,EAClBK,EAAWpsZ,UAAUgS,UAAW,EACvBphB,EAAI,EAAGA,EAAI2mB,EAAOyZ,cAAclgC,OAAQF,IAC3C2mB,EAAOyZ,cAAcpgC,GAAGuU,oBAAsBinZ,EAAWpsZ,UAAUmF,oBACrEoS,EAAOyZ,cAAcpgC,GAAGohB,UAAW,GAIpCymD,GAAsBA,EAAkBz4D,UAAUmF,oBAAsBokI,EAAavpI,UAAUmF,mBAClGkzD,EAAqBkxE,GAEvB,qBACM13B,IACF/4C,EAAsBywE,EAAa5mI,QACnCwpZ,GAAc,IAGhBrzV,EAAsBywE,EAAa5mI,QACnCwpZ,GAAc,GAEX90V,GACHD,EAAc,EAAA7+B,kBAAkBE,aArFd,YAyFnBo5E,IAAuBC,GAAgBq6S,GAsCtCE,GAAiBh1V,IACdw6C,GACHz6C,EAAc,OAIdqB,IAAsBq5C,GACxBz5C,EAAqB,MAEvB,qBACMU,IAAuB84C,GACzB/4C,EAAsB,IAGpBQ,GAAkBvoE,OAAOyhB,OAAP,UAAsBtY,OAAM,SAAA6iV,GAAA,OAAS5mV,EAAS+d,WAAa6oU,MAC/E1jR,EAAkB,IAWtB,uBACOy4C,GAAe/4C,GAAuB1B,IAAc,CAAC,EAAAzlD,OAAOkqB,KAAM,EAAAlqB,OAAOkpB,OAAOx+B,MAAK,SAAAygV,GAAA,OAAS5mV,EAAS+d,WAAa6oU,MACvH3lR,GAAc,GAEZkC,GAAkB,CAAC,EAAA1nD,OAAOkqB,KAAM,EAAAlqB,OAAOkpB,OAAOx+B,MAAK,SAAAygV,GAAA,OAAS5mV,EAAS+d,WAAa6oU,MACpF3lR,GAAc,MApEby6C,KACHA,GAAsB,IAAA06S,gCAA+Bz6S,KAE7C88J,EAAoBr3P,EAAOgb,wBAAwBs/E,IACpDu6S,GAAcx9I,GAAqBA,EAAkBpsP,gBACxD4pY,EAAax9I,EAAkBpsP,cAC/B61C,EAAqBu2M,EAAkBpsP,iBAE/B,EAAD,qBACHosP,EAAoBr3P,EAAOgb,wBAAwBu/E,EAAW92G,QAAQ,IAAK,SAE/E89D,EAAsB81M,EAAkBjsQ,QACnC00D,GACHD,EAAc,EAAA7+B,kBAAkBE,eAOpCo5E,IAAwB5kG,GACtB2hQ,EAAoBr3P,EAAOgb,wBAAwBs/E,IAClDt6F,EAAOgb,yBAAwB,IAAAg6X,gCAA+B16S,KAC9Du6S,GAAcx9I,GAAqBA,EAAkBpsP,gBACxD4pY,EAAax9I,EAAkBpsP,cAC/B61C,EAAqBu2M,EAAkBpsP,gBAEpC60C,GACHD,EAAc,EAAA7+B,kBAAkBE,aAE9Bm2O,GAAqBA,EAAkBjsQ,SAAWo2D,GACpDD,EAAsB81M,EAAkBjsQ,SAEjC,EAAA1K,oBAAsB8gE,GAC/BD,EAAsB,MAuCtBszV,IAAe,IAAAr7Y,oBAAmBq7Y,GAnKd,oBAoKhBx2Z,EAASw2Z,EAAWrvZ,YACrB,EAAD,oBAAyBnH,EAAO4sB,eAC9B5sB,EAAO4sB,cAAcxiB,UAAUmF,oBAAsBinZ,EAAWpsZ,UAAUmF,kBAtK1D,oBAuKpB9Q,QAAQ4B,IAAI,sBAAuBm2Z,KACL,IAAAxiR,mBAAkBwiR,GAxK5B,uBA0KZxhR,GAAe,IAAAd,iBAAgBsiR,KACjBnoZ,MAAMC,QAAQ0mI,EAAaX,sBAAwBW,EAAaX,oBAAoBn5I,QA3KtF,mCA4KV,IAAA45I,wBAAuB0hR,EAAYxhR,GAAc,GA5KvC,SA+KpB,IAAAjoD,iBAAgBypU,GAAY,GAAO,GACnC98X,IACK15B,EAAO67F,sBACV77F,EAAO67F,oBAAsB26T,GAlLX,QA0LnBL,IACHA,GAAkB,GA3LI,mDAAtB,4CA0MN,OALA,IAAA/tS,YAAU,WAJRggC,aAAaiuQ,GACbA,EAAUlhU,WAAWmhU,EAAqB,KAMzC,CAAC/1Z,EAAS+d,WAEN,MA+BT83Y,EAAYztQ,UAAY,CACtBw9L,mBAAoB,UAAU3gK,KAC9BxqE,YAAa,UAAU58G,QAGzB,IAAM24L,EAAqB,CACzBv1H,8BACAiB,4CACAS,8CACAO,sCACA/pC,uC,WAIa,IAAAs9J,aACb,IAAAzkF,UAnCsB,SAACxzG,GAAU,MAC2CA,EAAM0zG,UAA3EhxC,EAD0B,EAC1BA,WAAY0B,EADc,EACdA,mBAAoBN,EADN,EACMA,kBAAmBa,EADzB,EACyBA,eADzB,EAEgB3kE,EAAMouB,wBAAhDa,EAF0B,EAE1BA,aAAcH,EAFY,EAEZA,UAAWiB,EAFC,EAEDA,cAEzBmjF,EAAqBlzG,EAAMgR,YAA3BkiG,kBACA56F,EAAoBtY,EAAMqY,YAA1BC,iBACP,MAAO,CACLoqD,aACA0B,qBACAN,oBACAa,iBACA11C,eACAc,gBACAjB,YAEAs6F,wBAAyBlW,EAAkB/2G,OAC3Cmc,sBAmBuB0/K,EAAzB,CAA6Cq/N,K,sHCxS/C,YAEMQ,EAA4B,CAChC,QACA,iBACA,wBACA,cACA,wBACA,2BACA,2CACA,uCACA,oBACA,uBACA,oBACA,8BACA,wBACA,4BACA,yBACA,0BACA,yBACA,4BACA,YACA,yBACA,6BACA,sBACA,oCACA,yBACA,4BACA,cACA,kCACA,oBACA,aACA,oBACA,kBACA,0BACA,+BACA,qBACA,sBACA,eACA,sBACA,4BACA,iBACA,6BACA,yBACA,sBACA,gCACA,+BACA,+BACA,wBACA,kBACA,8BACA,eACA,uBACA,eACA,uBACA,aACA,cACA,8BACA,cACA,mBACA,iBACA,4BACA,kBACA,+BACA,wBACA,cACA,sBAGIC,EAAyB,CAC7B,uBACA,wBACA,iBACA,kBACA,kBACA,UACA,UACA,iBAG4CF,EAAjCA,+BAAiC,SAACG,GAC7C,IAAKA,EACH,MAAO,GAETA,EAAeA,EAAa1xZ,QAAQ,MAAO,KAAKA,QAAQ,SAAU,IAClE,IAAI2xZ,GAAgB,IAAAp9Y,wBAAuBhQ,mBAAmBmtZ,IAAelzY,OAC7E,IAAKgzY,EAA0Bh2Z,SAASm2Z,KAAmBF,EAAuBj2Z,SAASm2Z,GACzF,MAAO,GAET,OAAQA,GAEN,IAAK,uBACH,MAAO,eACT,IAAK,kBACH,MAAO,kBACT,IAAK,iBACH,MAAO,cACT,IAAK,wBACL,IAAK,kBACH,MAAO,gBACT,IAAK,UACH,MAAO,iBACT,IAAK,UACH,MAAO,SACT,IAAK,gBACH,MAAO,YAET,IAAK,sBACL,IAAK,gCACL,IAAK,+BACL,IAAK,+BACL,IAAK,oBACL,IAAK,8BACL,IAAK,wBACL,IAAK,cACL,IAAK,2CACL,IAAK,uCACL,IAAK,iBACL,IAAK,qBACH,MAAO,gBACT,IAAK,+BACL,IAAK,oBACH,MAAO,kBACT,IAAK,wBACL,IAAK,8BACH,MAAO,YACT,IAAK,YACH,MAAO,WACT,IAAK,aACH,MAAO,YACT,IAAK,oBACH,MAAO,cACT,IAAK,sBACL,IAAK,qBACL,IAAK,eACL,IAAK,sBACL,IAAK,4BACL,IAAK,iBACL,IAAK,6BACL,IAAK,yBACH,MAAO,iBACT,IAAK,wBACL,IAAK,kBACH,MAAO,YACT,IAAK,eACH,MAAO,eACT,IAAK,sBACH,MAAO,eACT,IAAK,eACL,IAAK,uBACL,IAAK,uBACH,MAAO,SACT,IAAK,aACH,MAAO,YACT,IAAK,cACH,MAAO,aACT,IAAK,mBACL,IAAK,kBACH,MAAO,cACT,QACE,MAAO,M,6FChKb,O,OACA,OACA,Q,IACA,O,IACA,MAEA,Q,IACA,QACA,QACA,QACA,Q,mDAGA,IAAMC,EAA0B,SAACjlT,GAAU,IAElC16F,EAA4E06F,EAA5E16F,iBAAkBwZ,EAA0DkhF,EAA1DlhF,iBAAkBtZ,EAAwCw6F,EAAxCx6F,qBAAsBmX,EAAkBqjF,EAAlBrjF,eAFxB,GAGT,IAAAk5H,WAAS,GAAhC6qG,GAHgC,wBAIjB,IAAAg9J,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAJgC,wBAKP,IAAA7hE,UAAS,IALF,qBAKlCxgB,EALkC,KAKvB6vR,EALuB,QAMD,IAAArvQ,WAAS,GANR,qBAMlCsvQ,EANkC,KAMpBC,EANoB,KAQnCn8S,GAAc,IAAA0rC,WAUpB,IAAAt+B,YAAU,WACR,IAAIjE,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GACpE4sG,EAAcjpH,SACjBipH,GAAgB,IAAAnjB,kBAAiB3pF,EAAkB,EAAGE,IACjDF,EAAiBm4E,aAAa/hF,QAAO,SAAA4zG,GAAA,MAAkC,UAAtBA,EAASpgB,aAGjE,IAAMob,GAAe,IAAAgI,2BAA0BF,GAE/C,GAAI9H,GAAgBrB,GAAeA,EAAYC,SAAWD,EAAYC,QAAQ1vD,OAAQ,CACpF,IAAM9S,GAAS,IAAA0/D,gBAAekE,EAAcrB,EAAYC,QAAQ1vD,QAAQ,GAExE,GAAI9S,EAAQ,CACV,IAAMsiM,EAAUtiM,EAAO6/D,cAAgB7/D,EAAO53B,GAAK43B,EAAO53B,EAAI,GAAK,GAAK,GACxEo2Y,0BAAoCx+W,EAAOghE,SAAWshI,GAAtD,OAA+E,GAAXtiM,EAAO33B,GAA3E,aAGFm2Y,EAAa,2BAEXpmY,GAAoB,IAAMszF,EAAcjpH,SAC1C,IAAA6/G,eAAcC,EAAatsF,KAG5B,CAACmC,KAEJ,IAAAu3F,YAAU,WACRjzB,YAAW,WACTgiU,GAAgB,KACf,OAEF,IAEH,IAAMx1Y,GAAS,IAAAC,oBACX8kG,EAAS/kG,EAAOo+L,WAAU,GAC1B1oM,GAAoBA,EAAiBk4E,YACvCm3B,GAAS,IAAAD,kCAAiCpvG,EAAkBE,EAAsBmvG,IAEpF,IAAM/gG,EAAahE,EAAOwmE,uBAE1B,OACE,+BAAKkJ,UAAW,sBAAwB6lU,EAAe,8BAAgC,KACrF,mCAAsBxwS,OAAQA,EACRrwB,SAAU,UAAKvtE,KACf29H,IAAKzrC,EACL64I,gBAhDF,aAiDEkQ,iBArDD,WACvBt6C,EAAY,IAqDY9jM,WAAYA,EACZhE,OAAQA,EACRyiP,YAAaziP,EAAOkZ,MACpBz0B,MAAO,KACPE,OAAQ,KACR2mO,kBAAkB,EAClBC,cAAc,EACdulB,oBAAqBA,EACrBrrH,UAAWA,MAMvC4vR,EAAwBruQ,UAAY,CAClC3tC,YAAa,UAAU4tC,UAAU,CAC/B,UAAU48B,KACV,UAAUnlI,MAAM,CAAE46D,QAAS,UAAUs3F,SAIzC,IAcMxb,EAAqB,CACzBroK,iC,WAGa,IAAAsoK,aACb,IAAAzkF,UAnBsB,SAACxzG,GAAU,MACkCA,EAAMqY,YAAlEC,EAD0B,EAC1BA,iBAAkBwZ,EADQ,EACRA,iBAAkBtZ,EADV,EACUA,qBACpCqyM,EAAe7qN,EAAMouB,wBAArBy8L,YAGP,MAAO,CACLzhG,wBAH0BppH,EAAMgR,YAA3BkiG,kBAGsC/2G,OAC3Cmc,mBACAwZ,mBACAtZ,uBACAqyM,iBASuB7yB,EAAzB,CAA6CigO,K,8ECrH/C,W,WACA,OACA,O,IACA,MAEA,Q,IACA,S,mDAGA,IAAMI,EAA2B,SAACrlT,GAAU,IAEnC16F,EAA8E06F,EAA9E16F,iBAAkBE,EAA4Dw6F,EAA5Dx6F,qBAAsBsZ,EAAsCkhF,EAAtClhF,iBAAkB3pB,EAAoB6qG,EAApB7qG,SAAU25E,EAAUkxB,EAAVlxB,OAErEw2U,GAAwB,IAAA3wQ,UAQ9B,IANA,IAAAt+B,YAAU,WACJvnC,GAAUA,EAAOz6E,OAASixZ,GAAyBA,EAAsBp8S,UAC3E,aAAEo8S,EAAsBp8S,SAAShnB,QAAQ,CAACC,WAAYmjU,EAAsBp8S,QAAQkkM,aAAc,OAEnG,CAACt+N,KAECxpE,IAAqBE,IAAyBpc,OAAOmc,KAAKC,GAAsBrc,OACnF,OAAO,KAGT,IAAMipH,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GACrEkvU,EAAkB51T,GAAoB,IAAMszF,EAAcjpH,OAEhE,OACE,+BAAKm2F,UAAW,uBAAyBo1P,IAAoBv/U,EAAW,iCAAmC,KACtGA,EAAW,+BAAiC,IAAKu/I,IAAK4wQ,GACzD,8BAAIhmU,UAAU,wCAAwCv2E,MAAO+lE,GAC1D1lF,OAAOmc,KAAKC,GAAsBsuG,UAAUt3G,KAAI,SAACtQ,GAChD,OAAO,mCAA4Bk2U,oBAAqB58T,EAAqBtZ,GAC1Cq5Z,UAAWpwZ,EACXsQ,WAAYvZ,EACZA,IAAK,WAAaA,UAO/Dm5Z,EAAyBzuQ,UAAY,CACnCzhJ,SAAU,UAAU2hJ,M,WA2CP,IAAAt2C,UAxCS,SAACxzG,EAAOqvP,GAAa,MACwBrvP,EAAMqY,YAAlEC,EADoC,EACpCA,iBAAkBE,EADkB,EAClBA,qBAAsBsZ,EADJ,EACIA,iBACxC3pB,EAAYknP,EAAZlnP,SACAkgB,EAAeroB,EAAMgR,YAArBqX,YAEHy5D,EAAS,KACb,GAAI35E,EAAU,CACZ,IACMyqN,EAAW9gM,EAAmB,EACpC,GAF6BzJ,EAAc,IAEJ,IAAXuqM,EAAiB,CAI3C,IAHA,IAAM4lM,EAAuBnwY,EAAc,IACvCpsB,EAAI,EACJw8Z,EAAuB,EACpBx8Z,EAAI22N,GACJ4lM,EAA4B,IAAJv8Z,EAAY,KACvCw8Z,IAEFx8Z,IAGF6lF,EAAS,CACPz6E,qBAA6C,IAAvBoxZ,EAAtB,QAKN,MAAO,CACLngZ,mBACAE,uBACAsZ,mBACA3pB,WACAkgB,cACAy5D,YAIuB,GAIZ,CAA6Cu2U,I,6FCvF5D,O,WACA,MACA,OACA,O,IAEA,S,IACA,O,IACA,Q,IACA,O,IACA,SAEA,QACA,Q,IACA,QACA,Q,IACA,QACA,Q,IAKA,S,IACA,O,IACA,QACA,QACA,QACA,QACA,QACA,S,mDAEA,IAAMK,EAA6B,SAAC1lT,GAAU,IAErCoiO,EACHpiO,EADGoiO,oBAAqBtjT,EACxBkhF,EADwBlhF,iBAAkBrZ,EAC1Cu6F,EAD0Cv6F,UAAWsuK,EACrD/zE,EADqD+zE,gBAAiBz7C,EACtEt4B,EADsEs4B,oBAAqBnjI,EAC3F6qG,EAD2F7qG,SAAU0X,EACrGmzF,EADqGnzF,eAEnGrG,EAAqBqG,EAAezQ,SAJE,GAKV,IAAAy5I,UAAS,GALC,qBAKrCxgB,EALqC,KAK1B6vR,EAL0B,KAOtCS,EAA0B,EAAAr1Z,qBAAuB6E,EACjDywZ,EAAyB,EAAAt1Z,oBAAsB6E,GAErD,IAAAkhH,YAAU,WACR,GAAI+rN,GAAuBtjT,GAAoBrZ,EAAW,CAIxD,IACI4vH,EAAYwwR,GADG/mY,EAAmBrZ,GAElCmgZ,IACFvwR,GAAaA,GAKf6vR,EAAa7vR,MAGd,CAACv2G,IAEJ,IAAMgnY,GAAmB,IAAAtvQ,UAAQ,WAC/B,OAAO4rL,IAAuBA,EAAoBz8T,kBAAkB,IAAA5J,WAAUqmU,EAAoBz8T,mBACjG,CAACy8T,IAEE/hE,GAAkB,IAAA7pH,UAAQ,WAC9B,SAAO4rL,IAAuBA,EAAoBz8T,mBAAkB,IAAAyD,oBAAmBg5T,EAAoBz8T,mBAC1G,CAACy8T,IAEEthM,GAAY,IAAA0V,UAAQ,WACxB,IAAM5mI,GAAS,IAAAC,oBACf,OAAOuyT,IAAuBA,EAAoBz8T,iBAC9Ca,EAAmBk1H,cAAgB7uH,EAAe8uH,4BAA8B0kI,IAC9ExzP,EAAe+uH,oBAChBhsH,EAAOy+E,wBAAwB+zO,EAAoBz8T,gBAAgB3K,QAAQ,KAG/E,CAAConU,IAEJ,IAAKA,EACH,OAAO,KAGT,IAAMyjF,EAAYF,EAA0BA,EAA1BA,4BAAwDxwZ,EAAWA,EAAXA,6CAEnEiqB,EAAgDgjT,EAAhDhjT,YAAazZ,EAAmCy8T,EAAnCz8T,gBAAiBquG,EAAkBouN,EAAlBpuN,eAC/B3W,EAAYv+E,EAAmBrZ,EAC/BsD,EAAQ,CACZssH,UAAWswR,EAA0BA,cAActwR,EAAxC,oBAAuEA,EAAvE,OAGP0wR,GAAepgZ,IAAoBquG,GAAkBvuG,EAAY,GAA+B,WAAzB2Z,EAAY8vE,SAgEnFi/J,GAAW,IAAA9mF,oBAAmBjoJ,GAEpC,OACE,8BAAIkgE,WAAYqmU,EAA0B,qBAAuB,YAActoT,EAAY,oBAAsB,IAC7Gt0F,MAAOA,EACPyoK,QAAS,kBAAMm0O,EAA0B,KAAOrtR,EAAoB7yH,KAnErD,WACnB,GAAIoH,EAAeM,WAAahY,EAC9B,OAAO,KAET,GAAI4wZ,EACF,OACE,+BAAKzmU,UAAW,cAAgBnqF,EAAW,wBAA0B,uBACnE,yCAKN,GAA6B,WAAzBiqB,EAAY8vE,UAAyB9vE,EAAYq6F,iBAAmBtkH,EAAU,CAChF,IAAM25E,EAAS,CACbqkC,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpBonO,aAAc,MACdj6P,gBAAiB,OAASphE,EAAYq6F,eAAiB,KAEzD,OAAO,+BAAKn6B,UAAU,qBAAqBv2E,MAAO+lE,IAC7C,GAA6B,WAAzB1vD,EAAY8vE,SAAuB,CAC5C,GAAI/5F,EACF,OACE,mCAAYmqF,UAAW,mCACrB,yCAIN,IAAM70E,EAAcspK,EAAgBvzK,MAAK,SAAAmK,GAAA,OAASA,EAAMjO,KAAOs3G,EAAe3uB,kBACvEvW,GAAU,IAAAkkC,kCAAiCgB,EAAgBvpG,GAAe,IAA1EqkE,OACP,OAAO,+BAAKwQ,UAAU,qBAAqBv2E,MAAO+lE,IAC7C,GAA6B,UAAzB1vD,EAAY8vE,SAAsB,CAC3C,IAAM59E,GAAe,IAAA69E,gCAA+B/vE,GACpD,GAAIjqB,EACF,OACE,mCAAYmqF,UAAW,mCACpBhuE,GAAgB,UAA2BA,EAAatW,QACrD,uCAAU,UAA2BsW,EAAatW,SAClD,yCAIV,IAAMgrZ,EAAa5jF,GAAuBA,EAAoBz8T,gBACxDy8T,EAAoBz8T,gBACpB2L,EAAeA,EAAa+pE,8BAAgC/pE,EAAauJ,cAAgB,KAC/F,OAAKmrY,EAKH,+BAAK1mU,UAAU,sBACb,mCAAkBvnF,QAASiuZ,EAAYr6Y,YAAaq6Y,EAAW3tZ,UAAUqE,OAL3EhQ,QAAQ4B,IAAI,sCAAuCgjB,GAC5C,+BAAKguE,UAAU,wBAQ1B,OAAOnqF,EACH,mCAAYmqF,UAAW,mCAAmC,yCAC1D,+BAAKA,UAAU,uBAUhBuiT,GACD,+BAAKviT,UAAW,oBAAsBnqF,EAAW,4BAA8B,KAC7E,gCAAMmqF,UAAU,yBACb,UAAK0kF,sBAAsBmqF,EAAU,KAEvCh5P,EAAW,KACV,wCACGwwZ,GAA2BhgZ,EAC1B,gCAAM25E,UAAU,0BACd,mCAAavnF,QAAS4N,EAAiBmH,mBAAmB,EAAMyvI,UAAW,MAE3E,KACJ,gCAAMj9D,UAAU,0BACb00B,EAAiBA,EAAejjB,YAAcijB,EAAejjB,YAAcijB,EAAepoH,MAAQ,KAClGk1I,GAAan7H,EAAkB,mCAAkB0nF,YAAa1nF,IAAqB,MAClFm7H,GAAan7H,EAAkB,mCAAa5N,QAAS4N,EACTmH,mBAAmB,EACnByvI,UAAW,KAAQ,KAChEwpQ,EAAc,4CAAkBrpZ,GAAG,4BAA8B,MAEnEopZ,EAAmB,KAClB,gCAAMxmU,UAAU,iBACd,4CAAkB5iF,GAAG,+BAM9BipZ,EACC,gCAAMrmU,UAAU,0BAA0BkyF,QAAS,kBAAMl5C,EAAoB7yH,KAC3E,4CAAkB/I,GAAG,qBAErB,OAKVgpZ,EAA2B9uQ,UAAY,CACrCnxI,UAAW,UAAU6nG,OAAOK,WAC5By0N,oBAAqB,UAAU9zR,MAAV,gCAA8Cq/D,YAGrE,IAiBMq3E,EAAqB,CACzB1sD,2C,WAGa,IAAA93B,UArBS,SAACxzG,EAAOqvP,GAAa,MACMrvP,EAAMqY,YAAhDyZ,EADoC,EACpCA,iBAAkBtZ,EADkB,EAClBA,qBAClBkF,EAAgB1d,EAAMyc,YAAtBiB,aACAvV,EAAYnI,EAAMgR,YAAlB7I,SACAowZ,EAAalpK,EAAbkpK,UAGP,MAAO,CACLzmY,mBAEAi1J,gBAAiBrpK,EACjBlF,uBACArQ,cAAgC,IAAdowZ,EAA6BA,EAAYpwZ,EAC3D0X,eARqB7f,EAAMqN,mBAgBS2qL,EAAzB,CAA6C0gO,I,mHC7N5D,O,OACA,OACA,Q,IACA,O,IAEA,Q,IACA,S,IACA,SACA,QACA,S,IACA,OACA,S,WAKA,SACA,QACA,Q,IACA,SACA,QACA,QACA,QACA,QACA,QACA,S,mDAGA,IAgIM1gO,EAAqB,CACzB6rH,sCACAn/O,sCACAjC,8BACA0oE,0CACAwgG,sCACA3xM,oDACAyvJ,2C,WAGa,IAAAwO,aACb,IAAAzkF,UA7BsB,SAACxzG,GAAU,MAC+CA,EAAMilV,UAA/Et+N,EAD0B,EAC1BA,eAAgBu8J,EADU,EACVA,mBAAoBC,EADV,EACUA,kBAAmBygC,EAD7B,EAC6BA,eAD7B,EAEa5jT,EAAMgR,YAA7CkiG,EAF0B,EAE1BA,kBAAmBw2E,EAFO,EAEPA,iBAFO,EAGI1pL,EAAM0zG,UAApC/uC,EAH0B,EAG1BA,eAAgBjC,EAHU,EAGVA,WAEvB,MAAO,CACLikD,iBACAu8J,qBACAC,oBACAtjQ,eAAgB7f,EAAMqN,gBACtB+7G,wBAAyBlW,EAAkB/2G,OAC3CwoE,iBACAjC,aACAgnH,mBACAk6H,oBAeuB5rH,EAAzB,EA3Ie,SAAChlF,GAAU,IAYpB,EAVC2T,EAE4C3T,EAF5C2T,eAAgBnlH,EAE4BwxG,EAF5BxxG,SAAUqiT,EAEkB7wM,EAFlB6wM,kBAAmBz6L,EAEDpW,EAFCoW,wBAAyBzkD,EAE1BquC,EAF0BruC,eAAgBjC,EAE1CswC,EAF0CtwC,WAC3FgC,EACiDsuC,EADjDtuC,kBAAmBjC,EAC8BuwC,EAD9BvwC,cAAe0oE,EACen4B,EADfm4B,oBAAqBu+C,EACN12E,EADM02E,iBAAkBk6H,EACxB5wM,EADwB4wM,eAAgBj4E,EACxC34H,EADwC24H,kBACzF3xM,EAAiDg5E,EAAjDh5E,yBAA0ByvJ,EAAuBz2E,EAAvBy2E,oBAJF,GAMsB,IAAAinO,YAAA,iDANtB,qBAMnBuI,EANmB,KAMDC,EANC,KAOnBh2I,EAAyC+1I,EAAzC/1I,mBAAoBC,EAAqB81I,EAArB91I,kBACrBsyH,EAAaj0Y,EAAS+d,SAAS1d,SAAS,EAAAob,OAAOyvF,MAC/CysT,GAAc,IAAA1xQ,aAAYguP,GAC1B2jB,EAAaz0V,IAAmB,EAAA1nD,OAAOC,KAEvCm8Y,GAAA,gCAAe,wGACf5jB,EADe,oBAEZrsR,GAA4BsgE,GAAqBk6H,EAFrC,iCAGT,IAAAtsL,mBAHS,OAIfq0G,GAAkB,GACZ/oN,GAAS,IAAAC,oBACfzmB,OAAOyhB,OAAO+E,EAAOsD,OAAOpgB,SAAQ,SAAAod,GAClCA,EAAKo2Y,wBAEPt/X,EAAyBpX,EAAOzf,iBAChC,IAAAq3H,iBAAgB53G,EAAOqmE,gCAAgC1vD,MAAK,SAAAggY,GACtDA,GACF32Y,EAAO6qN,wBAAwB8rL,MAZpB,OAgBZ5yS,EAEMA,MACH7mD,EAAUh/D,SAASg9F,cAAc,oBACtBh+B,EAAQ/jD,MAAMwxJ,SAAqC,SAA1BztG,EAAQ/jD,MAAMwxJ,UACtD,aAAEztG,GAASszI,OAAO,MAJpBywG,GAAkB,IAOdl4S,EAAWnK,EAAS+d,SAAS9Z,MAAM,EAAAwX,OAAOyvF,KAAO,MACzC,KACZ/gG,EAAS,GAAmC,cAA9B,IAAA7H,2BAA2C,gBAAkB,UAEzE6H,EAAS,KACL6tZ,EAAoB7tZ,EAAS,GAAGlG,MAAM,KACtCkxL,EAAa6iO,EAAkB,GAC/BC,EAAQD,EAAkB,GAC5B7iO,GAAeA,IAAeusF,GAChCg2I,GAAoB,IAAA11I,mBAAkB,CAACN,mBAAoBvsF,KAEzD8iO,GAAUA,IAAUt2I,EACtB+1I,GAAoB,IAAA11I,mBAAkB,CAACL,kBAAmBs2I,KACjDt2I,IAAsBs2I,GAC/BP,GAAoB,IAAA11I,mBAAkB,CAACL,kBAAmB,OAtC7C,wBA0CRg2I,IAELxyS,IAAmByyS,GACrBv1G,GAAkB,GAEfn6H,GACHD,GAAoB,IAhDL,mDAAf,4CA0DN,IALA,IAAApgE,YAAU,WACRgwS,MAEC,CAAC73Z,EAAS+d,YAERonG,EACH,OAAO,KAGT,IAAMi6G,EAAe,SAACt4H,GAChB8wT,IAAe9wT,EAAMlqF,OAAOuqI,QAAQ,4BACtCjkF,EAAkB,IAEhBhC,IACFD,EAAc,MACdiC,EAAkB,IAClBymE,EAAoB,QAIxB,OACE,kCAAa2pM,SAAb,CAAsBl2U,MAAO,CAACq6Z,mBAAkBC,wBAC9C,mCAAa5mU,UAAW,iCAAmC8mU,GAAc12V,EAAa,oBAAsB,MACzG,WACC,OAAKkhP,EAMH,wCACE,+BAAKtxN,UAAU,eAAekyF,QAASo8C,GACpCsiD,IAAuBC,EAAoB,wCAAuB,KAClEA,EAAoB,wCAAqB,KACzC,EAAA7/Q,mBAAqB,KAAO,mCAAgBgvF,UAAU,2BACvD,0CATF,mCAAiBq3D,aAAa,a,kICvH5C,YACA,UAMa+vQ,EAAyBA,EAAzBA,uBAAyB,SAACC,GACrC,IAAKA,EACH,OAAO,KAET,IAAM/2Y,GAAS,IAAAC,oBACf,OAAOD,EAAOgb,wBAAwB+7X,IACjC/2Y,EAAOgb,yBAAwB,IAAAg6X,gCAA+B+B,KASpCC,EAApBA,kBAAoB,SAACD,EAAgBF,GAAyC,IAAlC1/I,EAAkC,wDACzF,IAAK4/I,IAAmBF,EACtB,OAAO,KAET,IAAM72Y,GAAS,IAAAC,oBACTyB,EAAeo1Y,EAAuBC,GAC5C,OAAO/2Y,EAAOkyI,gBAAgB2kQ,EAAOn1Y,EAAeA,EAAatW,OAAS,IAAI,EAAM+rQ,K,4GC5BtF,MACA,OACA,Q,IACA,M,IACA,OAEA,QACA,Q,IAKA,Q,IACA,QACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,Q,mDAGA,IAAM8/I,EAAgC,SAAC7mT,GAAU,IAKzC,EAHCjoG,EAC6DioG,EAD7DjoG,QAASm9I,EACoDl1C,EADpDk1C,SAAU27J,EAC0C7wM,EAD1C6wM,kBAAmB1/O,EACuB6uC,EADvB7uC,sBAAuBh8D,EACA6qG,EADA7qG,SAAU27S,EACV9wM,EADU8wM,uBAAwBtiT,EAClCwxG,EADkCxxG,SACpGwiT,EAAkEhxM,EAAlEgxM,kBAAmBl1R,EAA+CkkF,EAA/ClkF,UAAWiB,EAAoCijF,EAApCjjF,cAAe4K,EAAqBq4E,EAArBr4E,kBAEzCm/X,GAAA,gCAAuB,WAAO1yE,GAAP,sFAC3B1nV,QAAQ4B,IAAI,oBAAqByJ,IAE7BuE,MAAMC,QAAQxE,EAAQyP,SAAR,cAAmCzP,EAAQyP,SAAR,WAA+Bre,OAHzD,oBAInBilN,GAAmBr2M,EAAQyP,SAAR,WAA+B,GAAInU,QAAQ,SAAU,IACxEuc,GAAS,IAAAC,oBACXu+L,IAAkBx+L,EAAO9P,KANJ,wBAOjBinZ,EAAYjrY,EAAUtb,MAAK,SAAA2jN,GAAA,OAAYA,EAASC,cAAgBhW,MACtE,IAAA9yL,gBARuB,UASjB,IAAA+rE,6BAA4BtvF,EAAQ3C,aATnB,WAUnB2xZ,EAVmB,mCAWf,IAAAnjR,gBAAemjR,EAAWhqY,GAXX,uCAafnN,GAAS,IAAAC,oBAbM,UAcfD,EAAOo5M,aAAa5a,GAdL,eAgBvB,IAAApzH,iBAAgBjjF,GAAS,GAAM,GAAM,IACrC,IAAAyvF,sBAAqBzvF,GAAS,cAAU,GACxC4vB,IAlBuB,UAmBjB,IAAI78B,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAnB1B,SAoBvB,IAAAi8F,iBApBuB,QAuB3Bl5F,SAASg9F,cAAc,SAASl6F,UAAUC,IAAI,iBAC9CigT,EAAuBtiT,EAAS+d,WAChC,aAAE,oBAAoBg0L,QAAQ,KAAK,WACjC6zI,EAAmBr8U,EAAQiD,OAAQjD,GACnC84S,EAAkB,IAClBG,GAAkB,GACb77S,GACHiuF,YAAW,WACTjyB,EAAsBp5D,EAAQiD,UAC7B,QAhCoB,mDAAvB,6CAqCN,OACE,kCAAmBsiU,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OAAwBl/L,GAAS,kBAAM4xQ,EAAqB1yE,aAOvEyyE,EAA8BjwQ,UAAY,CACxC7+I,QAAS,UAAUu2C,MAAV,oBAAkCq/D,YAG7C,IAWMq3E,EAAqB,CACzB6rH,sCACAphP,8BACAiB,4CACAS,8CACA2/O,gDACAE,sCACArpR,uC,WAGa,IAAAs9J,aACb,IAAAzkF,UAtBsB,SAACxzG,GAAU,IAC1BmI,EAAYnI,EAAMgR,YAAlB7I,SAD0B,EAEEnI,EAAMouB,wBAEzC,MAAO,CACLjmB,WACA2mB,UAN+B,EAE1BA,UAKLiB,cAP+B,EAEfA,iBAoBOioK,EAAzB,CAA6C6hO,K,6FCvG/C,O,OACA,O,IACA,MACA,QACA,OAEA,QACA,QACA,Q,mDAGA,IAAMG,EAA2B,SAAChnT,GAAU,IAEnCjoG,EAAwEioG,EAAxEjoG,QAAS2S,EAA+Ds1F,EAA/Dt1F,aAAcorS,EAAiD91M,EAAjD81M,mBAAoBmxG,EAA6BjnT,EAA7BinT,UAAWC,EAAkBlnT,EAAlBknT,eACxDC,EAAgBnnT,EAAhBmnT,aAHqC,GAKM,IAAAtxQ,UAAS,IALf,qBAKnC0J,EALmC,KAKjBq2J,EALiB,KAc1C,IAPA,IAAAv/L,YAAU,WACR,IAAMpgE,GAAe,IAAA0qD,mBAAkB5oG,EAAS2S,GAAc,EAAMw8Y,GAEpEtxG,EAAoB3/P,GAAgB,MAEnC,CAACl+C,EAAQiD,UAEPukJ,EAAiBp2J,OACpB,OAAO,KAGL89Z,IAAcE,IAChBA,EAAe5nQ,EAAiB/+I,MAAK,SAAAi9H,GAAA,OAAeA,EAAY1lI,QAAQM,UAAUqE,KAAO3E,EAAQM,UAAUqE,OAG7G,IAAM0qZ,EAAmBH,GAAaE,GAClC,IAAAv/Y,yBAAwBu/Y,EAAatyU,WAAWkc,aAAeo2T,EAAatyU,WAAWjpF,OAAOyH,QAAQ,SAAU,KAChH,KAEJ,OACE,+BAAKisF,UAAU,uBACZ2nU,EACC,8BAAI3nU,UAAU,2BACZ,4CAAkB5iF,GAAG,uBADvB,IAEE,gCAAM4iF,UAAU,kCAAkC8nU,IAElD,KACJ,8BAAI9nU,UAAU,4DACXigE,EAAiB/iJ,KAAI,SAAAo4E,GACpB,IAAMi5E,EAAWs5P,GAAiBvyU,EAAOC,WAAWn4E,KAAOyqZ,EAAatyU,WAAWn4E,GAC7EoyE,GAAS,IAAAo+B,iBAAgBt4B,EAAOC,YACtC,OACE,8BAAIyK,UAAW,sBAAwB1K,EAAOC,WAAWn4E,IAAOmxJ,EAAW,oBAAsB,IAC7F3hK,IAAK0oF,EAAOC,WAAWn4E,GACvB80K,QAAS,kBAAMskI,EAAmBlhO,IAClC7rE,MAAO+lE,UAQvBk4U,EAAyBpwQ,UAAY,CACnC7+I,QAAS,UAAUu2C,MAAV,oBAAkCq/D,WAC3Cw5S,aAAc,UAAU96Z,OACxBypT,mBAAoB,UAAUriI,KAAK9lE,WACnCs5S,UAAW,UAAUnwQ,KACrBowQ,eAAgB,UAAUt5S,QAAQ,UAAUt/D,MAAV,sB,WAoBrB,IAAA22I,aACb,IAAAzkF,UAlBsB,SAACxzG,GAMvB,MAAO,CAIL0d,aARqB1d,EAAMyc,YAAtBiB,gBAYkB,GAIzB,CAA6Cs8Y,K,gFCvF/C,I,IAAA,MACA,OACA,OACA,Q,IACA,M,IAEA,O,IACA,O,IACA,QAEA,QACA,QAKA,QACA,Q,WACA,QACA,QACA,QACA,SACA,Q,mDAGA,IAAMK,EAAiB,SAACrnT,GAAU,IAEzB7wF,EACgF6wF,EADhF7wF,KAAMugD,EAC0EswC,EAD1EtwC,WAAYD,EAC8DuwC,EAD9DvwC,cAAeiC,EAC+CsuC,EAD/CtuC,kBAAmBN,EAC4B4uC,EAD5B5uC,mBAAoBvkD,EACQmzF,EADRnzF,eAAgByyE,EACR0gB,EADQ1gB,UAC7FnuB,EAAqF6uC,EAArF7uC,sBAAuBx0C,EAA8DqjF,EAA9DrjF,eAAgB1lB,EAA8C+oG,EAA9C/oG,UAAWkuL,EAAmCnlF,EAAnCmlF,QAASr7K,EAA0Bk2F,EAA1Bl2F,uBACvDtD,EAAqBqG,EAAezQ,SAG1C,IADgB,IAAA1C,aAAcmT,EAAeggG,UAC7BrmG,EAAmBsf,SACjC,OAAO,KAGT,IAkBM26O,GAAkB,IAAAz9E,mBAAkB/rL,EAAWkY,GAErD,OACE,kCAAmBmuT,SAAnB,MACG,SAACr0N,GAAD,OACC,+BAAK3pB,UAAW,oBAAsBA,EAAY,IAAMA,EAAY,KAClE,mCAAOwgU,aAAcr/I,EACdtgK,MAAM,UACN4/S,WAAYt/I,GACjB,mCAAYxiB,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,qDACVkyF,QAAS,kBA7BP,SAACvoE,GACvB,UAAUpzE,eAAe,EAAAwB,6BAA6BE,gBAClDm4B,GACFD,GAAc,GAEZ2B,GACFD,EAAsB,IAEpB3qD,EAAmB+qK,cAAgBznK,GACrC4nD,EAAkB,EAAAznD,OAAOE,MACzBg7K,EAAQ17L,KAAK,EAAAwgB,OAAOE,QAEpBunD,EAAkB,EAAAznD,OAAOC,MACzBi7K,EAAQ17L,KAAK,EAAAwgB,OAAOC,QAEtB,IAAA8+F,eAAcC,EAAatsF,GAcQ2qY,CAAgBr+S,KACzC,uCACE,qDAchBo+S,EAAezwQ,UAAY,CACzBt3D,UAAW,UAAUpoD,QAGvB,IAgBM8tJ,EAAqB,CACzBv1H,8BACAiC,sCACAP,8CACAx0C,iC,WAGa,IAAAsoK,aACb,IAAAxoC,aACE,IAAAj8C,UAzBoB,SAACxzG,GACvB,IAAM6f,EAAiB7f,EAAMqN,gBADI,EAEwBrN,EAAM0zG,UAI/D,MAAO,CACL/uC,eAP+B,EAE1BA,eAMLP,mBAR+B,EAEVA,mBAOrB1B,WAT+B,EAEUA,WAQzCz4D,UAPkBjK,EAAM8J,UAAnBG,UAQL4V,iBACA/C,uBAR+B9c,EAAMwc,UAAhCM,0BAqBoBk7K,EAAzB,CAA6CqiO,M,6FC9GjD,O,OACA,O,IAEA,Q,IAEA,Q,IACA,SACA,QACA,QACA,QACA,Q,8DAsFe,IAAA7mT,UAnBS,SAACxzG,GAAU,MACuCA,EAAM0zG,UAAvE5vC,EAD0B,EAC1BA,kBAAmBM,EADO,EACPA,mBAAoB8C,EADb,EACaA,uBACvC/+D,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGYnI,EAAMqY,YAA5CC,EAH0B,EAG1BA,iBAAkBwZ,EAHQ,EAGRA,iBAClBO,EAA0BryB,EAAMyV,UAAhC4c,uBAGP,MAAO,CACLw4L,YAHoB7qN,EAAMouB,wBAArBy8L,YAIL/mJ,oBACAM,qBACA8C,yBACA/+D,WACAmQ,mBACAwZ,mBACAO,4BAIW,EApFmB,SAAC2gF,GAAU,IAEpClvC,EACqBkvC,EADrBlvC,kBAAmBM,EACE4uC,EADF5uC,mBAAoB8C,EAClB8rC,EADkB9rC,uBAAwB/+D,EAC1C6qG,EAD0C7qG,SAAUmQ,EACpD06F,EADoD16F,iBAAkBwZ,EACtEkhF,EADsElhF,iBAChGO,EAA0B2gF,EAA1B3gF,uBAHyC,GAIP,IAAAw2H,WAAS,GAJF,qBAIpC0xQ,EAJoC,KAIxBC,EAJwB,KAKrC/nH,GAAY,IAAA9qJ,QAAO,MAEnB8yQ,GAAiB,IAAAhzQ,aAAY31H,GAE/BouE,EAAep8B,EACnB,IAAKo8B,GAAgB/3F,GAAYi8D,EAAoB,CACnD,IACM9/C,GADS,IAAAzB,oBACa+a,wBAAwBwmC,GAChD9/C,IACF47E,EAAe57E,EAAa+pE,8BAAgC/pE,EAAauJ,gBAI7E,IAAAw7F,YAAU,WACRmxS,EAAct6T,GAAgBA,EAAa5U,4BAC1C,CAAC4U,KAEJ,IAAAmpB,YAAU,WACJh3F,GAA0BkoY,GAC5BC,GAAc,KAGf,CAACnoY,KAEJ,IAAAg3F,YAAU,WACJ/wG,GAAoBiiZ,GAAeE,IAAmB3oY,GACxD0oY,GAAc,KAGf,CAAC1oY,IAEJ,IAAMsvE,EAAoB,EAAD,oBAEpB9oF,IAAoB,IAAA6oF,qBAAmB,EAAM/8B,EAAoBN,EAAmBoD,IADpF5uD,IAAoB,IAAA8nF,2BAA0Bt8B,GAGnD,OACE,+BAAKwuB,UAAW,4CACXioU,EAAa,uCAAyC,KACtD,EAAAj3Z,mBAAqB,wCAA0C,uCAC9DgV,GAAoBwZ,GAAoB,EAAK,uCAAyC,MACtF3pB,IAAai8D,GAAuB9rD,GAAoBwZ,GAAoB,GAAM,8CAAgD,MAClI3pB,GAAYi5F,EAAmB,6CAA+C,IAC/EsmD,IAAK+qJ,GACR,mCAAOngN,UAAU,4BACf,+BAAKA,UAAU,cACb,+BAAKA,UAAU,yBACZ4N,EAAe,mCAAkBn1F,QAASm1F,EACT97B,mBAAoBA,EACpBzlD,YAAauhF,EAAa70F,UAAUqE,KAAQ,MAEhF,+BAAK4iF,UAAU,uBACb,wCACA,0I,8ECrEZ,W,OACA,O,IACA,QACA,Q,8DA6Be,IAAAkhB,UATS,SAACxzG,GAGvB,MAAO,CACL2lE,UAHkB3lE,EAAM0zG,UAAnB/tC,UAILx9D,SAHiBnI,EAAMgR,YAAlB7I,YAOM,EA3Be,SAAC6qG,GAAU,IAEhCrtC,EAAoCqtC,EAApCrtC,UAAWx9D,EAAyB6qG,EAAzB7qG,SAAU6jI,EAAeh5B,EAAfg5B,YACtBymK,GAAY,IAAA9qJ,QAAO,MAEzB,OAAKhiF,EAKH,+BAAK2sB,UAAU,8CAA8Co1D,IAAK+qJ,GAChE,mCAAiBA,UAAWA,EACXzmK,YAAaA,GAAe,EAAArmG,iBAAiBK,OAC7C0sQ,UAAWvqS,EAAW,OAAS,WAP3C,S,8ECXX,W,OACA,O,IACA,MAEA,Q,IACA,Q,IACA,O,IACA,QACA,Q,IACA,OACA,Q,IACA,S,IAEA,Q,IACA,S,IACA,S,IACA,QACA,Q,IACA,S,IACA,S,IAIA,MACA,Q,IAEA,S,IACA,SACA,U,IACA,S,IACA,QACA,Q,IACA,S,IACA,Q,IACA,S,mDAGA,IAAMuyZ,EAAc,SAAC1nT,GAAU,IAEtBlvC,EACekvC,EADflvC,kBAAmBM,EACJ4uC,EADI5uC,mBAAoBj8D,EACxB6qG,EADwB7qG,SAAU0X,EAClCmzF,EADkCnzF,eAAgBolM,EAClDjyG,EADkDiyG,sBACtE3sM,EAAoB06F,EAApB16F,iBACIkB,EAAqBqG,EAAezQ,SAEpCgO,GAAkB,IAAAhB,oBAAmB0nD,GACrCwuV,GAAoB,IAAA7qQ,aAAY3jF,GAkBtC,OAhBA,IAAAulD,YAAU,YACHipS,GAAqBxuV,GAAqB1mD,KAAqB5D,EAAmBu6H,kBAAsBkxE,EAAwB,GAAMzrM,EAAmBujN,kBAC5Jl9N,OAAOwpJ,aAAaxpJ,OAAO86Z,mBAC3B96Z,OAAO86Z,kBAAoBvkU,YAAW,WAChB,UAAMvsF,WAAnB6pG,UACO5vC,oBAIb,QAGJ,CAACA,KAEJ,IAAAuuV,2BAA0BvuV,EAAmBxrD,EAAkBkB,GAE1DsqD,EAQH,+BAAKwuB,UAAW,cAAgBl1E,EAAkB,sBAAwB,KACvEjV,EAAW,KAAO,wCACnB,+BAAKmqF,UAAU,oBACZnqF,EAAW,KAAO,mCAAkBiV,gBAAiBA,IACrDjV,EAAW,KAAO,mCAAkB4C,QAAS+4D,IAC9C,wCACC37D,EACG,wCACAiV,EAAkB,wCAClB,wCACE,+BAAKk1E,UAAU,YACb,8BAAIA,UAAU,kBACZ,mCAAavnF,QAAS+4D,EAAmBhkD,mBAAmB,KAE7D3X,EACC,mCAAyBk4F,YAAav8B,EAAmBgrO,QAAQ,IAEjE,mCAA+BzuM,YAAav8B,KAGhD,6BAAGwuB,UAAU,6BACX,mCAAgB+N,YAAav8B,IAC7B,mCAAuBu8B,YAAav8B,MAI3C1mD,IAAoB,EAAD,iBAAoB,KACtC,6BAAGk1E,UAAU,mCACX,mCAAavnF,QAAS+4D,KAG1B,+BAAKwuB,UAAW,qBAAuB94E,EAAmB8oQ,eAAiB,gCAAkC,KAC1GllQ,EAAkB,KACjB,+BAAKk1E,UAAU,qBACb,mCAAsB+N,YAAav8B,KAIvC,yCAED1mD,EAAkB,wCAA6B,KAChD,+BAAKk1E,UAAU,mBACb,wCACA,yCAEoC,WAArCxxF,SAASC,SAASoC,gBAAgC0c,EAAeM,SAAsC,KAA3B,yCAU/E,+BAAKmyE,UAAU,uBACb,mCAAyB+N,YAAav8B,MA/DtCM,EACK,wCAEF,MAkEXs2V,EAAY9wQ,UAAY,CACtBvpD,YAAa,UAAU/+C,MAAV,qBAGf,IAiBM02I,EAAqB,CACzB7zH,8CACAxpC,sCACAkqC,6C,WAGa,IAAA2uC,UAvBS,SAACxzG,GAAU,MACeA,EAAM0zG,UAA/C5vC,EAD0B,EAC1BA,kBAAmBM,EADO,EACPA,mBACnBj8D,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGuBnI,EAAMwc,UAAvDM,EAH0B,EAG1BA,uBAAwBmoM,EAHE,EAGFA,sBACxB3sM,EAAoBtY,EAAMqY,YAA1BC,iBAEP,MAAO,CACLwrD,oBACAM,qBACAj8D,WACA2U,yBACAmoM,wBACAplM,eAAgB7f,EAAMqN,gBACtBiL,sBAUoC0/K,EAAzB,CAA6C0iO,I,8FC/J5D,O,OACA,OACA,OACA,Q,IAEA,O,IACA,QAEA,Q,IACA,SACA,Q,IACA,QACA,QACA,QACA,Q,IACA,SACA,Q,WAEA,S,mDAGA,IAsEM1iO,EAAqB,CACzB7zH,8CACAT,4CACA/zC,iC,WAGa,IAAAsoK,aACb,IAAAxoC,aACE,IAAAj8C,UAxBoB,SAACxzG,GAAU,MAC6BA,EAAM0zG,UAA7D5vC,EAD0B,EAC1BA,kBAAmBZ,EADO,EACPA,aAAckB,EADP,EACOA,mBACjCj8D,EAAYnI,EAAMgR,YAAlB7I,SACA2U,EAA0B9c,EAAMwc,UAAhCM,uBAEP,MAAO,CACL3U,WACA27D,oBACAZ,eACA87O,gBAAiBl7O,EAAoBA,EAAkBz4D,UAAUqE,GAAK,GACtEmQ,eAAgB7f,EAAMqN,gBACtB+2D,qBACAtnD,4BAYyBk7K,EAAzB,EA9EuB,SAAChlF,GAAU,IAE7B7wF,EACuD6wF,EADvD7wF,KAAM68R,EACiDhsM,EADjDgsM,gBAAiBl7O,EACgCkvC,EADhClvC,kBAAmBjkD,EACamzF,EADbnzF,eAAgBs4K,EACHnlF,EADGmlF,QAAShwL,EACZ6qG,EADY7qG,SAAUg8D,EACtB6uC,EADsB7uC,sBAClFT,EAA4DsvC,EAA5DtvC,qBAAsB/zC,EAAsCqjF,EAAtCrjF,eAAgBy0C,EAAsB4uC,EAAtB5uC,mBAHJ,GAKY,IAAAykF,UAAS,IALrB,qBAK7BlsF,EAL6B,KAKXi+V,EALW,MAOpC,IAAAvxS,YAAU,WACR,GAAIvlD,GAAqBM,EAAoB,CAC3C,IAAM9/C,GAAe,IAAAs6E,kBAAiB96B,EAAmBM,GACzDw2V,GAAoB,IAAAp3Y,qBAAoBc,EAAcnC,EAAMtC,OAG7D,CAACm/R,EAAiB56O,IAErB,IAAMiiQ,EAAkB,SAACpqN,GACvB,UAAUpzE,eAAe,EAAAwB,6BAA6BmB,oBACtD24B,EAAsB,IACtBT,EAAqB,OACrB,IAAAs4C,eAAcC,EAAatsF,GAC3BwoK,EAAQ17L,MAAK,IAAAw/F,kBAIT4+T,GAAkBl+V,GAAoB,IAAIxgE,QAAU,GAE1D,OACE,kCAAmBm0U,SAAnB,MACG,SAACr0N,GAAD,OACC,wCACE,+BAAK3pB,UAAU,mBACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAW,aAAenqF,EAAW,GAAK,sCAC1Cq8K,QAAS,kBAAM6hJ,EAAgBpqN,KACzC,yCAEF,gCAAM3pB,UAAU,mBAAmBkyF,QAAS,kBAAM6hJ,EAAgBpqN,KAC/D4+S,EAAiB,wCAAU,4CAAkBnrZ,GAAG,wBAA/B,KAAqE,KAAMitD,IAGjG,+BAAK21B,UAAU,sBACb,wCACCnqF,EAAW,KACV,wCAEDA,EAAW,wCAA6B,gB,8EClErD,W,OACA,OACA,OACA,Q,IAEA,O,IACA,Q,IAEA,QACA,QACA,QACA,Q,IACA,SACA,Q,WACA,S,IACA,OACA,Q,mDAEA,IAoDM6vL,EAAqB,CACzBroK,gCACA27G,2C,WAGa,IAAA2sD,aACb,IAAAxoC,aACE,IAAAj8C,UAhBoB,SAACxzG,GAGvB,MAAO,CACLmI,SAHiBnI,EAAMgR,YAAlB7I,SAILmQ,iBAHyBtY,EAAMqY,YAA1BC,oBAcoB0/K,EAAzB,EA3DqB,SAAChlF,GAAU,IAE3B7wF,EAAkF6wF,EAAlF7wF,KAAMg2K,EAA4EnlF,EAA5EmlF,QAAShwL,EAAmE6qG,EAAnE7qG,SAAUwnB,EAAyDqjF,EAAzDrjF,eAAgB27G,EAAyCt4B,EAAzCs4B,oBAAqBhzH,EAAoB06F,EAApB16F,iBAE/D+tT,EAAkB,SAACpqN,GACvB,UAAUpzE,eAAe,EAAAwB,6BAA6BmB,qBACtD,IAAAwwE,eAAcC,EAAatsF,GAC3BwoK,EAAQ17L,MAAK,IAAAw/F,kBAGf,OACE,kCAAmBq0O,SAAnB,MACG,SAACr0N,GAAD,OACC,wCACE,+BAAK3pB,UAAU,mBACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAW,8BAAgCnqF,EAAW,GAAK,qBAC3Dq8K,QAAS,kBAAM6hJ,EAAgBpqN,KACzC,yCAEF,gCAAM3pB,UAAU,mBAAmBkyF,QAAS,kBAAM6hJ,EAAgBpqN,KAChE,4CAAkBvsG,GAAG,+BAGzB,+BAAK4iF,UAAU,sBACZnqF,GAAYmQ,EACX,mCAAQg6E,UAAW,yFACXkyF,QAAS,kBAAMl5C,EAAoB,KACzC,4CAAkB57H,GAAG,oBAFvB,IAE4C4I,EAAiBna,MAG7D,wCACE,wCACA,oD,8ECnDhB,I,IAAA,MACA,O,IACA,SACA,QACA,Q,8DA0De,IAAAq1G,UAnBS,SAACxzG,GAAU,MACkCA,EAAMqY,YAAlEC,EAD0B,EAC1BA,iBAAkBE,EADQ,EACRA,qBAAsBsZ,EADd,EACcA,iBADd,EAED9xB,EAAMgR,YAGtC,MAAO,CACLsH,mBACAE,uBACAsZ,mBACAzJ,YAT+B,EAE1BA,YAQLlgB,SAV+B,EAEbA,SASlB0X,eARqB7f,EAAMqN,mBAYJ,GAIZ,EAvDqB,SAAC2lG,GAAU,IAEtC16F,EAAmG06F,EAAnG16F,iBAAkBE,EAAiFw6F,EAAjFx6F,qBAAsBsZ,EAA2DkhF,EAA3DlhF,iBAAkBzJ,EAAyC2qF,EAAzC3qF,YAAalgB,EAA4B6qG,EAA5B7qG,SAAU0X,EAAkBmzF,EAAlBnzF,eAExF,IAAKvH,IAAqBE,IAAyBpc,OAAOmc,KAAKC,GAAsBrc,OACnF,OAAO,KAGT,IAAM08Z,EAAY1wZ,EAAWA,EAAXA,6CAEZ25E,EAAS,CACbz6E,MAAOjL,OAAOmc,KAAKC,GAAsB9J,QAAO,SAAAxP,GAAA,OAAOA,EAAM4yB,KAAkB31B,OAAS08Z,GAGpFzzS,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GACrEkvU,EAAkB51T,GAAoB,IAAMszF,EAAcjpH,OAI1D2+Z,EAAuBh5U,EAAOz6E,OAHlBc,EACdkgB,EAAc,IACdA,GAAeq/T,EAAkB,IAAM,MAG3C,OACE,+BAAKp1P,UAAW,YAAco1P,IAAoBv/U,EAAW,sBAAwB,KAChF0X,EAAeM,WAAahY,EAAW,4BAA8B,KACrE2yZ,EAAuB,wBAA0B,IAAK/+Y,MAAO+lE,GAChE,8BAAIwQ,UAAU,kBACXl2F,OAAOmc,KAAKC,GAAsBsuG,UAAUt3G,KAAI,SAACtQ,GAChD,OAAO,mCAA4Bk2U,oBAAqB58T,EAAqBtZ,GAC1CuZ,WAAYvZ,EACZA,IAAK,WAAaA,a,8ECpC/D,I,IAAA,MACA,OACA,Q,IAEA,S,IACA,Q,IACA,Q,IACA,S,8DAwCe,IAAA+4L,aACb,IAAAzkF,UAVsB,SAACxzG,GAGvB,MAAO,CACLsY,iBAHyBtY,EAAMqY,YAA1BC,iBAILnQ,SAHiBnI,EAAMgR,YAAlB7I,YAQP,EAtC0B,SAAC6qG,GAAU,IAE9B16F,EAA8B06F,EAA9B16F,iBAAkBnQ,EAAY6qG,EAAZ7qG,SAEzB,OAAKmQ,EAKH,+BAAKg6E,UAAU,oCACZnqF,EACC,kCAAQmqF,UAAU,2CAChB,yCAEA,KACJ,kCAAmBg+O,SAAnB,MACG,SAACr0N,GAAD,OACC,wCACG,SAACtiB,GAAD,OACC,mCAAmBsiB,YAAaA,EAAatiB,mBAAoBA,WAdpE,U,iGCfX,MACA,OACA,O,IACA,MACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,OAEA,QACA,QACA,Q,OACA,QACA,QACA,Q,IACA,Q,mDAEA,IAAMohU,EAAgC,SAAC/nT,GAAU,IAExC16F,EACgB06F,EADhB16F,iBAAkBwZ,EACFkhF,EADElhF,iBAAkBtZ,EACpBw6F,EADoBx6F,qBAAsBq6R,EAC1C7/L,EAD0C6/L,SAAU16G,EACpDnlF,EADoDmlF,QAASxoK,EAC7DqjF,EAD6DrjF,eAAgB9P,EAC7EmzF,EAD6EnzF,eAClGw4S,EAAqBrlN,EAArBqlN,kBAEF,IAAK//S,EACH,OAAO,KAGT,IAMM8sG,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GACrEkvU,EAAkB51T,GAAoB,IAAMszF,EAAcjpH,OAEhE,OACE,mCAAQuiG,KAAMgpP,IAAoBrvB,EAC1B/lO,UAAU,2BACV5iF,GAAI,cACJmjS,SAAUA,EAAS32L,QACnBw2L,UAAW,QACXI,YAAA,EACAC,eAAe,IACpB,gBAAGC,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB,iBAE1B,mCAAO3gN,UAAU,2DACf,+BAAMA,UAAU,iCACd,8BAAIA,UAAU,MACZ,4CAAkB5iF,GAAG,yBAAyBmO,OAAQ,CAACynU,WAAYhtU,EAAiBna,SAEtF,iCACE,4CAAkBuR,GAAG,+BAA+BmO,OAAQ,CAACynU,WAAYhtU,EAAiBna,SAE5F,+BAAKm0F,UAAU,cACb,kCAAmBg+O,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAQ3pB,UAAW,gBAAkBzyE,EAAe8/F,mBAChD,wBAA0B,4CACtB6kE,QAAS,kBAnCJ,SAACvoE,GAC9B,UAAUpzE,eAAe,EAAAwB,6BAA6BwG,2BACtD,IAAAmrE,eAAcC,EAAatsF,GAC3BwoK,EAAQ17L,MAAK,IAAAw/F,iBAgC0B++T,CAAuB/+S,KAC5C,4CAAkBvsG,GAAG,uCAa3CqrZ,EAA8BnxQ,UAAY,CACxCipJ,SAAU,UAAUxzS,OAAOshH,YAG7B,IAYMq3E,EAAqB,CACzB1sD,0CACA37G,iC,WAGa,IAAAsoK,aACb,IAAAzkF,UAlBsB,SAACxzG,GAAU,MACqDA,EAAMqY,YAE5F,MAAO,CACLC,iBAJ+B,EAC1BA,iBAILwZ,iBAL+B,EACRA,iBAKvBtZ,qBAN+B,EACUA,qBAMzC6/S,kBAP+B,EACgCA,kBAO/Dx4S,eAAgB7f,EAAMqN,mBAUC2qL,EAAzB,CAA6C+iO,K,6GCnG/C,W,OACA,OACA,Q,IAEA,O,IACA,OAEA,Q,IACA,OACA,OACA,QACA,Q,IACA,O,IACA,QACA,QACA,Q,OACA,QACA,Q,mDAEO,IAAME,EAAwBA,EAAxBA,sBAAwB,SAAC94Y,EAAMtC,GAC1C,OAAKsC,GAAStC,EAGVA,EAAe0nI,SACVplI,EAAKC,cAAc,CAAC1S,GAAI,UAAW,IAAAkL,yBAAuB,IAAA9W,8BAC7D,IAAMqe,EAAKC,cAAc,CAAC1S,GAAI,oBAE7ByS,EAAKC,cAAc,CAAC1S,GAAI,sBANtB,IAwFLsoL,EAAqB,CACzBtzH,sCACAjC,8BACAiD,qC,WAGa,IAAAuyH,aACb,IAAAxoC,aACE,IAAAj8C,UAvBoB,SAACxzG,GAAU,MACeA,EAAM0zG,UAA/C/uC,EAD0B,EAC1BA,eAAgBjC,EADU,EACVA,WAAYiD,EADF,EACEA,UADF,EAED3lE,EAAMgR,YAGtC,MAAO,CACLtF,YAN+B,EAE1BA,YAKLvD,SAP+B,EAEbA,SAMlBw8D,iBACAjC,aACAiD,YACA9lD,eARqB7f,EAAMqN,mBAoBF2qL,EAAzB,EAvFwB,SAAChlF,GAAU,IAE9BtnG,EACwCsnG,EADxCtnG,YAAag5D,EAC2BsuC,EAD3BtuC,kBAAmByzH,EACQnlF,EADRmlF,QAASxzH,EACDquC,EADCruC,eAAgBx8D,EACjB6qG,EADiB7qG,SAAUga,EAC3B6wF,EAD2B7wF,KAAMwjD,EACjCqtC,EADiCrtC,UAAWD,EAC5CstC,EAD4CttC,iBACzFhD,EAA6CswC,EAA7CtwC,WAAYD,EAAiCuwC,EAAjCvwC,cAAe5iD,EAAkBmzF,EAAlBnzF,eACvB4yR,GAAY,IAAA9qJ,QAAO,MAEnBkZ,EAAWl8F,IAAmB,EAAA1nD,OAAOkpB,MACrC+0X,EAAa/yZ,EAAW,EAAA89B,wBAAwBE,MAAQ,EAAAR,iBAAiBE,gBAEzEs1X,EAAuB,WAC3B,GAAIx1V,IAAcu1V,EAGhB,OAFA,UAAUryX,eAAe,EAAAwB,6BAA6B0E,sBACtD22B,EAAiBC,EAAY,IACtB,EAELk7F,GACF,UAAUh4H,eAAe,EAAAwB,6BAA6B4E,oBACtDy1B,EAAkB,IAClByzH,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAEpB,UAAU7iE,eAAe,EAAAwB,6BAA6B2E,mBACtD01B,EAAkB,EAAAznD,OAAOkpB,OACzBgyJ,EAAQ17L,KAAK,EAAAwgB,OAAOkpB,QAElBu8B,GACFD,EAAc,OAIZg3U,EACJ,uCACE,6CAAmBtmS,MAAO,UAAaznG,GAAa6wH,WAIlD6+R,EAAkBH,EAAsB94Y,EAAMtC,GAEpD,OACE,+BAAKyyE,UAAW,oBAAuBuuE,GAAal7F,IAAcu1V,EAAe,4BAA8B,IAC1GxzQ,IAAK+qJ,GACPtqS,EACC,mCAAY8oP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,qBACpC4iF,UAAW,aAAeuuE,GAAY14J,EAAW,qBAAuB,sBACxEq8K,QAAS22O,GAClB1hB,GAGH,mCAAQxoJ,aAAW,OACXl1O,MAAO8D,EAAe0nI,SAAW,CAACkjL,QAAS,UAAY,KACvDn4O,UAAW,qDAAwDuuE,EAAmC,GAAxB,uBAC9EuuI,UAAWqqG,EACXj1N,QAAS22O,GACdC,GAGL,mCAAiB3oH,UAAWA,EACXzmK,YAAakvR,EACbtoH,yBAA0BwoH,EAC1BzoH,YAAA,kBAA+BuoH,EAA/B,iBACAxoH,UAAWvqS,EAAW,OAAS,iB,wCCxFtD,QACA,I,IAAA,M,IACA,QACA,O,IACA,M,IACA,S,IACA,O,IACA,O,IACA,Q,mDACAutP,EAAQ,MAAe42D,WAEvB,UAAUnkR,UAAU,8BACpBtoC,OAAOw7Z,gBAAkB,kBAAM,UAAU9xX,kBAEzC,UAASo4B,OACP,oCAAU3hE,MAAA,WACR,uCACE,0CAGJc,SAAS02F,eAAe,QAG1B33F,OAAOy7Z,WAAa,WACdr6Z,QAAUH,SAASC,SAASC,WAC1BC,OAAOpB,OAAOy7Z,YAChB,UAAOr6Z,OAAOpB,OAAOy7Z,e,6BCkN1B,IAASC,EAmBV,SAASC,EAAc1oZ,EAAMlU,EAAO68Z,GAElC,YAAmB,IAARA,GAAgC,IAARA,EAC1B3pZ,KAAKgB,GAAMlU,IAEpBA,GAASA,EACT68Z,GAAOA,EAEHriZ,MAAMxa,IAA2B,iBAAR68Z,GAAoBA,EAAM,GAAM,EACpDtyE,KAGTvqV,EAAQA,EAAM4gB,WAAW/Z,MAAM,QAG/B7G,GAFAA,EAAQkT,KAAKgB,KAAQlU,EAAM,GAAK,KAAOA,EAAM,IAAOA,EAAM,GAAK68Z,GAAQA,MAEzDj8Y,WAAW/Z,MAAM,MAChB,GAAK,KAAO7G,EAAM,IAAOA,EAAM,GAAK68Z,EAAOA,MAhR5D,QACA,QACA,QAEKl9U,OAAOliF,UAAUu2F,YACpBx2F,OAAOkC,eAAeigF,OAAOliF,UAAW,aAAc,CACpDkC,YAAY,EACZ81Q,cAAc,EACdC,UAAU,EACV11Q,MAAO,SAASw6L,EAAch2J,GAE5B,OADAA,EAAWA,GAAY,EAChB17B,KAAKhG,QAAQ03L,EAAch2J,KAAcA,KAKjDm7C,OAAOliF,UAAUwF,WACpB08E,OAAOliF,UAAUwF,SAAW,SAAS2I,EAAQw3D,GAM3C,MAJqB,iBAAVA,IACTA,EAAQ,KAGNA,EAAQx3D,EAAOrO,OAASuL,KAAKvL,UAGS,IAAjCuL,KAAKhG,QAAQ8I,EAAQw3D,KAK7Buc,OAAOliF,UAAUkyG,aACpBhwB,OAAOliF,UAAUkyG,WAAa,SAAU/jG,EAAQw3D,GAM9C,MAJqB,iBAAVA,IACTA,EAAQ,KAGNA,EAAQx3D,EAAOrO,OAASuL,KAAKvL,UAGqC,IAA7DuL,KAAK1D,cAActC,QAAQ8I,EAAOxG,cAAeg+D,KAKlC,mBAAjB5lE,OAAO+2B,SAChB/2B,OAAO+2B,OAAS,SAAS/U,GAEvB,GAAc,MAAVA,EACF,MAAM,IAAIisS,UAAU,8CAGtBjsS,EAAShiB,OAAOgiB,GAChB,IAAK,IAAI9I,EAAQ,EAAGA,EAAQ6+P,UAAUh4Q,OAAQmZ,IAAS,CACrD,IAAImzB,EAAS0rO,UAAU7+P,GACvB,GAAc,MAAVmzB,EACF,IAAK,IAAIvpC,KAAOupC,EACVrsC,OAAOC,UAAUC,eAAeC,KAAKksC,EAAQvpC,KAC/Ckf,EAAOlf,GAAOupC,EAAOvpC,IAK7B,OAAOkf,IAIN9O,MAAMjT,UAAUgoB,YACnB/U,MAAMjT,UAAUgoB,UAAY,SAASq3Y,GACnC,GAAY,MAARh0Z,KACF,MAAM,IAAI2iT,UAAU,yDAEtB,GAAyB,mBAAdqxG,EACT,MAAM,IAAIrxG,UAAU,gCAOtB,IALA,IAGIzrT,EAHAue,EAAO/gB,OAAOsL,MACdvL,EAASghB,EAAKhhB,SAAW,EACzBw/Z,EAAUxnJ,UAAU,GAGfl4Q,EAAI,EAAGA,EAAIE,EAAQF,IAE1B,GADA2C,EAAQue,EAAKlhB,GACTy/Z,EAAUn/Z,KAAKo/Z,EAAS/8Z,EAAO3C,EAAGkhB,GACpC,OAAOlhB,EAGX,OAAQ,IAKPqT,MAAMjT,UAAUwF,UACnBzF,OAAOkC,eAAegR,MAAMjT,UAAW,WAAY,CACjDuC,MAAO,SAASg9Z,EAAeC,GAG7B,GAAY,MAARn0Z,KACF,MAAM,IAAI2iT,UAAU,iCAGtB,IAAIhsT,EAAIjC,OAAOsL,MAGX+yE,EAAMp8E,EAAElC,SAAW,EAGvB,GAAY,IAARs+E,EACF,OAAO,EAKT,IAAIr7E,EAAgB,EAAZy8Z,EAOJ5/U,EAAInqE,KAAKywH,IAAInjI,GAAK,EAAIA,EAAIq7E,EAAM3oE,KAAK4pE,IAAIt8E,GAAI,GAEjD,SAAS08Z,EAAch6Y,EAAGC,GACxB,OAAOD,IAAMC,GAAmB,iBAAND,GAA+B,iBAANC,GAAkB3I,MAAM0I,IAAM1I,MAAM2I,GAIzF,KAAOk6D,EAAIxB,GAAK,CAId,GAAIqhV,EAAcz9Z,EAAE49E,GAAI2/U,GACtB,OAAO,EAET3/U,IAIF,OAAO,KAMR3sE,MAAMjT,UAAUmX,MACnBpX,OAAOkC,eAAegR,MAAMjT,UAAW,OAAQ,CAC7CuC,MAAO,SAAS88Z,GAEd,GAAY,MAARh0Z,KACF,MAAM,IAAI2iT,UAAU,iCAGtB,IAAIhsT,EAAIjC,OAAOsL,MAGX+yE,EAAMp8E,EAAElC,SAAW,EAGvB,GAAyB,mBAAdu/Z,EACT,MAAM,IAAIrxG,UAAU,gCAUtB,IANA,IAAIsxG,EAAUxnJ,UAAU,GAGpBl4L,EAAI,EAGDA,EAAIxB,GAAK,CAKd,IAAIshV,EAAS19Z,EAAE49E,GACf,GAAIy/U,EAAUn/Z,KAAKo/Z,EAASI,EAAQ9/U,EAAG59E,GACrC,OAAO09Z,EAGT9/U,QAQH3sE,MAAMjT,UAAU8rI,MACnB/rI,OAAOkC,eAAegR,MAAMjT,UAAW,OAAQ,CAC7CuC,MAAO,SAASA,GAGd,GAAY,MAAR8I,KACF,MAAM,IAAI2iT,UAAU,+BA4BtB,IAzBA,IAAI2xG,EAAI5/Z,OAAOsL,MAGX+yE,EAAMuhV,EAAE7/Z,SAAW,EAGnB6lE,EAAQmyM,UAAU,GAClB8nJ,EAAgBj6V,GAAS,EAGzBia,EAAIggV,EAAgB,EACtBnqZ,KAAKywH,IAAI9nD,EAAMwhV,EAAe,GAC9BnqZ,KAAKwwH,IAAI25R,EAAexhV,GAGtBjjE,EAAM28P,UAAU,GAChB+nJ,OAAsBxhW,IAARljD,EAChBijE,EAAMjjE,GAAO,EAGXulM,EAAam/M,EAAc,EAC7BpqZ,KAAKywH,IAAI9nD,EAAMyhV,EAAa,GAC5BpqZ,KAAKwwH,IAAI45R,EAAazhV,GAGjBwB,EAAI8gI,GACTi/M,EAAE//U,GAAKr9E,EACPq9E,IAIF,OAAO+/U,KAITlqZ,OAASA,KAAKyI,QAChBzI,KAAKyI,MAAQ,SAAU2zQ,GACrB,OAAOA,EAAI,EAAIp8Q,KAAKkI,KAAKk0Q,GAAKp8Q,KAAKouE,MAAMguM,MAInCqtI,EAQRY,QAAQ9/Z,WAPAg3F,QAAUkoU,EAAQloU,SAAWkoU,EAAQa,oBAAsBb,EAAQc,mBAAqBd,EAAQe,kBAAoBf,EAAQgB,sBACpIhB,EAAQ5yQ,QAAU4yQ,EAAQ5yQ,SAAW,SAAiBimF,GACpD,OAAKlnO,KACDA,KAAK2rF,QAAQu7I,GAAkBlnO,KAC9BA,KAAK80Z,cACE90Z,KAAK80Z,cAAc7zQ,QAAQimF,GADN,KAFf,MAoCjB98N,KAAK2nE,UACR3nE,KAAK2nE,QAAU,SAAS76E,EAAO68Z,GAC7B,OAAOD,EAAc,QAAS58Z,EAAO68Z,KAIpC3pZ,KAAK2qZ,UACR3qZ,KAAK2qZ,QAAU,SAAS79Z,EAAO68Z,GAC7B,OAAOD,EAAc,QAAS58Z,EAAO68Z,KAIpC3pZ,KAAKyC,SACRzC,KAAKyC,OAAS,SAAS3V,EAAO68Z,GAC5B,OAAOD,EAAc,OAAQ58Z,EAAO68Z,M,iJCjSxC,SAAU59Z,EAAEgB,EAAEO,EAAEX,GAAG,SAASlB,EAAEc,EAAEq+Z,GAAG,IAAIt9Z,EAAEf,GAAG,CAAC,IAAIQ,EAAER,GAAG,CAAmE,GAAGpC,EAAE,OAAOA,EAAEoC,GAAE,GAAI,IAAI+B,EAAE,IAAIg3H,MAAM,uBAAuB/4H,EAAE,KAAK,MAAM+B,EAAEyoG,KAAK,mBAAmBzoG,EAAE,IAAIxC,EAAEwB,EAAEf,GAAG,CAACX,QAAQ,IAAImB,EAAER,GAAG,GAAG9B,KAAKqB,EAAEF,SAAQ,SAASG,GAAG,IAAIuB,EAAEP,EAAER,GAAG,GAAGR,GAAG,OAAON,EAAE6B,GAAIvB,KAAID,EAAEA,EAAEF,QAAQG,EAAEgB,EAAEO,EAAEX,GAAG,OAAOW,EAAEf,GAAGX,QAAkD,IAA1C,IAAIzB,GAAE,EAA4CoC,EAAE,EAAEA,EAAEI,EAAEtC,OAAOkC,IAAId,EAAEkB,EAAEJ,IAAI,OAAOd,EAAvb,CAA2b,CAACE,EAAE,CAAC,SAASi4P,EAAQ/3P,EAAOD,IAAS,SAAUi/Z,GAAqB,IAAuDC,EAAqJ,SAAgCz+Y,GAAK,OAAOA,GAAKA,EAAIpf,WAAWof,EAAI,CAAC,QAAUA,GAAnNy3O,CAAnDF,EAAQ,uBAAmQ,GAA/KA,EAAQ,gBAAgBA,EAAQ,uBAAuBknK,EAAA,QAA4Bj/Z,GAA+Fg/Z,EAAOE,eAAgB,MAAM,IAAIzlS,MAAM,kDAAkDulS,EAAOE,gBAAe,IAAOtga,KAAKmL,UAAqB,IAATi1Z,EAAqBA,EAAqB,oBAAPhwZ,KAAmBA,KAAqB,oBAAT9M,OAAqBA,OAAO,KAAK,CAAC,qBAAqB,EAAE,eAAe,GAAG,sBAAsB,KAAK+mD,EAAE,CAAC,SAAS8uM,EAAQ/3P,EAAOD,IAAS,SAAUo/Z,GAAwBp/Z,EAAQqB,YAAW,EAAyF,IAAuEmH,EAA3J,SAAgCiY,GAAK,OAAOA,GAAKA,EAAIpf,WAAWof,EAAI,CAAC,QAAUA,GAA0Cy3O,CAA3BF,EAAQ,SAA0D,QAAkB33P,QAAQ++Z,EAAU,aAAap/Z,EAAA,QAAmB,SAASC,GAAQ,GAAGA,EAAOsD,QAA+C,IAAvCtD,EAAOsD,OAAO87Z,SAASr7Z,QAAQwE,GAAW,MAAM,IAAIkxH,MAAM,wCAAyCz5H,EAAOD,QAAQA,EAAA,UAAqBnB,KAAKmL,KAAK,qBAAqB,CAACq5G,KAAK,IAAIl6D,EAAE,CAAC,SAAS6uM,EAAQ/3P,EAAOD,IAAS,SAAUs/Z,GAAS,SAASC,EAAe/2Y,EAAMg3Y,GAAyB,IAAT,IAAIC,EAAG,EAAUlha,EAAEiqB,EAAM/pB,OAAO,EAAEF,GAAG,EAAEA,IAAI,CAAC,IAAImha,EAAKl3Y,EAAMjqB,GAAa,MAAPmha,EAAYl3Y,EAAM7oB,OAAOpB,EAAE,GAAkB,OAAPmha,GAAal3Y,EAAM7oB,OAAOpB,EAAE,GAAGkha,KAAaA,IAAIj3Y,EAAM7oB,OAAOpB,EAAE,GAAGkha,KAAM,GAAGD,EAAgB,KAAKC,IAAKA,EAAIj3Y,EAAM23C,QAAQ,MAAO,OAAO33C,EAAM,IAAIm3Y,EAAY,gEAAoEC,EAAU,SAASP,GAAU,OAAOM,EAAYp/U,KAAK8+U,GAAUh9Z,MAAM,IAAqtE,SAAS2O,EAAO6uZ,EAAGn9Z,GAAG,GAAGm9Z,EAAG7uZ,OAAO,OAAO6uZ,EAAG7uZ,OAAOtO,GAAc,IAAX,IAAIs4E,EAAI,GAAWz8E,EAAE,EAAEA,EAAEsha,EAAGpha,OAAOF,IAAQmE,EAAEm9Z,EAAGtha,GAAGA,EAAEsha,IAAI7kV,EAAIj8E,KAAK8ga,EAAGtha,IAAI,OAAOy8E,EAAx1Eh7E,EAAQK,QAAQ,WAAsD,IAA3C,IAAIy/Z,EAAa,GAAGC,GAAiB,EAAcxha,EAAEk4Q,UAAUh4Q,OAAO,EAAEF,IAAI,IAAIwha,EAAiBxha,IAAI,CAAC,IAAI8kH,EAAK9kH,GAAG,EAAEk4Q,UAAUl4Q,GAAG+ga,EAAQU,MAAM,GAAiB,iBAAP38S,EAAiB,MAAM,IAAIspM,UAAU,6CAAsDtpM,IAAey8S,EAAaz8S,EAAK,IAAIy8S,EAAaC,EAAkC,MAAjB18S,EAAKpmG,OAAO,IAAyH,OAAO8iZ,EAAiB,IAAI,KAA5ID,EAAaP,EAAevuZ,EAAO8uZ,EAAa/3Z,MAAM,MAAK,SAASlG,GAAG,QAAQA,MAAKk+Z,GAAkB1iZ,KAAK,OAAmD,KAAKrd,EAAQiga,UAAU,SAAS58S,GAAM,IAAI68S,EAAWlga,EAAQkga,WAAW78S,GAAM88S,EAAgC,MAAlBz4Z,EAAO27G,GAAM,GAAqK,OAA5JA,EAAKk8S,EAAevuZ,EAAOqyG,EAAKt7G,MAAM,MAAK,SAASlG,GAAG,QAAQA,MAAKq+Z,GAAY7iZ,KAAK,OAAgB6iZ,IAAY78S,EAAK,KAAOA,GAAM88S,IAAe98S,GAAM,MAAW68S,EAAW,IAAI,IAAI78S,GAAMrjH,EAAQkga,WAAW,SAAS78S,GAAM,MAAwB,MAAjBA,EAAKpmG,OAAO,IAAUjd,EAAQqd,KAAK,WAAW,IAAI+iZ,EAAMxuZ,MAAMjT,UAAU0D,MAAMxD,KAAK43Q,UAAU,GAAG,OAAOz2Q,EAAQiga,UAAUjvZ,EAAOovZ,GAAM,SAASv+Z,EAAE+V,GAAO,GAAc,iBAAJ/V,EAAc,MAAM,IAAI8qT,UAAU,0CAA0C,OAAO9qT,KAAIwb,KAAK,OAAOrd,EAAQqga,SAAS,SAAS5kW,EAAK8G,GAA0E,SAASp7C,EAAK6kU,GAAiB,IAAZ,IAAI1nR,EAAM,EAAOA,EAAM0nR,EAAIvtV,QAAgC,KAAbutV,EAAI1nR,GAAhBA,KAAuD,IAArB,IAAIxqD,EAAIkyU,EAAIvtV,OAAO,EAAOqb,GAAK,GAAuB,KAAXkyU,EAAIlyU,GAAdA,KAA8B,OAAGwqD,EAAMxqD,EAAU,GAAUkyU,EAAI3pV,MAAMiiE,EAAMxqD,EAAIwqD,EAAM,GAAnR7I,EAAKz7D,EAAQK,QAAQo7D,GAAM/zD,OAAO,GAAG66D,EAAGviE,EAAQK,QAAQkiE,GAAI76D,OAAO,GAAuW,IAApJ,IAAI44Z,EAAUn5Y,EAAKs0C,EAAK1zD,MAAM,MAAUw4Z,EAAQp5Y,EAAKo7C,EAAGx6D,MAAM,MAAUtJ,EAAO2V,KAAKwwH,IAAI07R,EAAU7ha,OAAO8ha,EAAQ9ha,QAAY+ha,EAAgB/ha,EAAeF,EAAE,EAAEA,EAAEE,EAAOF,IAAK,GAAG+ha,EAAU/ha,KAAKgia,EAAQhia,GAAG,CAACiia,EAAgBjia,EAAE,MAAO,IAAIkia,EAAY,GAAG,IAAQlia,EAAEiia,EAAgBjia,EAAE+ha,EAAU7ha,OAAOF,IAAKkia,EAAY1ha,KAAK,MAAqE,OAA/D0ha,EAAYA,EAAYtpW,OAAOopW,EAAQl+Z,MAAMm+Z,KAAqCnjZ,KAAK,MAAMrd,EAAQ0ga,IAAI,IAAI1ga,EAAQ2ga,UAAU,IAAI3ga,EAAQ4ga,QAAQ,SAASv9S,GAAM,IAAI/jH,EAAOsga,EAAUv8S,GAAM76G,EAAKlJ,EAAO,GAAG4kI,EAAI5kI,EAAO,GAAG,OAAIkJ,GAAO07H,GAAkBA,IAAKA,EAAIA,EAAIx8H,OAAO,EAAEw8H,EAAIzlI,OAAO,IAAU+J,EAAK07H,GAAvD,KAA4DlkI,EAAQ6ga,SAAS,SAASx9S,EAAKy9S,GAAK,IAAIp+Z,EAAEk9Z,EAAUv8S,GAAM,GAA4E,OAAtEy9S,GAAKp+Z,EAAEgF,QAAQ,EAAEo5Z,EAAIria,UAAUqia,IAAKp+Z,EAAEA,EAAEgF,OAAO,EAAEhF,EAAEjE,OAAOqia,EAAIria,SAAeiE,GAAG1C,EAAQ+ga,QAAQ,SAAS19S,GAAM,OAAOu8S,EAAUv8S,GAAM,IAA+I,IAAI37G,EAAyB,MAAlB,KAAKA,QAAQ,GAAS,SAASyV,EAAImnD,EAAMyY,GAAK,OAAO5/D,EAAIzV,OAAO48D,EAAMyY,IAAM,SAAS5/D,EAAImnD,EAAMyY,GAAuC,OAA/BzY,EAAM,IAAEA,EAAMnnD,EAAI1e,OAAO6lE,GAAannD,EAAIzV,OAAO48D,EAAMyY,MAAQl+E,KAAKmL,KAAKguP,EAAQ,cAAc,CAACgpK,SAAS,IAAIC,EAAE,CAAC,SAASjpK,EAAQ/3P,EAAOD,GAAS,IAAIs/Z,EAAQr/Z,EAAOD,QAAQ,GAAOkha,EAAM,GAAOC,GAAS,EAAM,SAASC,IAAa,IAAGD,EAAH,CAAkC,IAAIE,EAAlBF,GAAS,EAA2C,IAArB,IAAIpkV,EAAImkV,EAAMzia,OAAas+E,GAAI,CAACskV,EAAaH,EAAMA,EAAM,GAAY,IAAT,IAAI3ia,GAAG,IAAUA,EAAEw+E,GAAKskV,EAAa9ia,KAAKw+E,EAAImkV,EAAMzia,OAAO0ia,GAAS,GAAiN,SAASG,KAApNhC,EAAQiC,SAAS,SAASC,GAAKN,EAAMnia,KAAKyia,GAASL,GAAUzoU,WAAW0oU,EAAW,IAAK9B,EAAQp/W,MAAM,UAAUo/W,EAAQmC,SAAQ,EAAKnC,EAAQoC,IAAI,GAAGpC,EAAQqC,KAAK,GAAGrC,EAAQz0R,QAAQ,GAAGy0R,EAAQsC,SAAS,GAAoBtC,EAAQ3yT,GAAG20T,EAAKhC,EAAQ5H,YAAY4J,EAAKhC,EAAQuC,KAAKP,EAAKhC,EAAQr8L,IAAIq+L,EAAKhC,EAAQwC,eAAeR,EAAKhC,EAAQyC,mBAAmBT,EAAKhC,EAAQ7sN,KAAK6uN,EAAKhC,EAAQxvT,QAAQ,SAASrvG,GAAM,MAAM,IAAIi5H,MAAM,qCAAqC4lS,EAAQU,IAAI,WAAW,MAAM,KAAKV,EAAQ0C,MAAM,SAAS99R,GAAK,MAAM,IAAIxK,MAAM,mCAAmC4lS,EAAQ2C,MAAM,WAAW,OAAO,IAAI,IAAIC,EAAE,CAAC,SAASlqK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO/3P,EAAOD,QAAQ,SAASmia,GAAa,OAAO,SAASC,EAAMlsK,EAAGioK,GAAW,IAAsFj9Z,EAAlFo9Z,EAAExkL,EAAEuoL,SAASD,GAAO3ja,EAAOq7O,EAAEwoL,SAAShE,EAAE7/Z,QAAQmZ,EAAMkiO,EAAEyoL,QAAQpE,EAAU1/Z,GAAc,GAAG0ja,GAAajsK,GAAIA,GAAG,KAAMz3P,EAAOmZ,GAAwB,IAAjB1W,EAAMo9Z,EAAE1mZ,OAAmB1W,EAAM,OAAO,OAAU,KAAKzC,EAAOmZ,EAAMA,IAAQ,IAAGuqZ,GAAavqZ,KAAS0mZ,IAAMA,EAAE1mZ,KAASs+O,EAAG,OAAOisK,GAAavqZ,EAAM,OAAOuqZ,IAAc,KAAK,CAAC,MAAM,KAAK/4W,EAAE,CAAC,SAAS4uM,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOrqM,EAAIqqM,EAAQ,WAAW/3P,EAAOD,QAAQ,SAASwia,GAAM,IAAIC,EAAa,GAAND,EAAQE,EAAgB,GAANF,EAAQG,EAAc,GAANH,EAAQI,EAAe,GAANJ,EAAQK,EAAoB,GAANL,EAAQM,EAAe,GAANN,GAASK,EAAc,OAAO,SAAST,EAAMW,EAAWC,GAA0L,IAApL,IAA4KvsU,EAAIzb,EAA5KsjV,EAAE5/Z,OAAOo7O,EAAEmpL,cAAcb,IAAQnzZ,EAAK6qO,EAAEopL,UAAU5E,GAAG57Z,EAAEirD,EAAIo1W,EAAWC,EAAK,GAAGvka,EAAOq7O,EAAEwoL,SAASrzZ,EAAKxQ,QAAQmZ,EAAM,EAAEtY,EAAOmja,EAAO7wZ,MAAMnT,GAAQika,EAAU,QAAG1lW,EAAuBv+D,EAAOmZ,EAAMA,IAAQ,IAAGkrZ,GAAUlrZ,KAAS3I,KAAsB+rE,EAAIt4E,EAApB+zF,EAAIxnF,EAAK2I,GAAiBA,EAAM0mZ,GAAMkE,GAAM,GAAGC,EAAOnja,EAAOsY,GAAOojE,OAAS,GAAGA,EAAI,OAAOwnV,GAAM,KAAK,EAAE,OAAO,EAAK,KAAK,EAAE,OAAO/rU,EAAI,KAAK,EAAE,OAAO7+E,EAAM,KAAK,EAAEtY,EAAOP,KAAK03F,QAAU,GAAGmsU,EAAS,OAAO,EAAO,OAAOC,GAAe,EAAEF,GAASC,EAASA,EAAStja,KAAU,CAAC,MAAM,GAAG,UAAU,KAAK6ja,EAAE,CAAC,SAASnrK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO,SAASorK,EAAOh4U,EAAUi4U,EAAKC,GAAM,IAAIl4U,EAAU,MAAMuhO,UAAU22G,EAAKD,EAAKC,EAAKD,GAAMD,EAAOG,IAAIzpL,EAAEmpL,cAAcG,EAAOI,GAAG,SAASC,GAAI,IAAI3pL,EAAE4pL,WAAWD,GAAI,MAAM92G,UAAU82G,EAAG,uBAAuB,OAAOA,GAAIL,EAAO3iZ,IAAI,SAASgjZ,GAAI,IAAI3pL,EAAEzkE,SAASouP,GAAI,MAAM92G,UAAU82G,EAAG,sBAAsB,OAAOA,GAAIL,EAAO7sH,KAAK,SAASktH,EAAGv3G,EAAYzrT,GAAM,KAAKgja,aAAcv3G,GAAa,MAAMS,UAAUlsT,EAAK,6BAA6B,OAAOgja,GAAIxja,EAAOD,QAAQoja,GAAQ,CAAC,MAAM,KAAKO,EAAE,CAAC,SAAS3rK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO4rK,EAAS5rK,EAAQ,iBAAiB/3P,EAAOD,QAAQtB,OAAO+2B,QAAQ,SAAgB/U,EAAOqqB,GAAqE,IAA7D,IAAI84X,EAAEnla,OAAOo7O,EAAEmpL,cAAcviZ,IAASxgB,EAAEu2Q,UAAUh4Q,OAAOF,EAAE,EAAQ2B,EAAE3B,GAAiF,IAA9E,IAA0EiD,EAAtEsia,EAAEhqL,EAAEopL,UAAUzsJ,UAAUl4Q,MAAMsc,EAAK+oZ,EAASE,GAAGrla,EAAOoc,EAAKpc,OAAOgB,EAAE,EAAYhB,EAAOgB,GAAEoka,EAAEria,EAAIqZ,EAAKpb,MAAMqka,EAAEtia,GAAK,OAAOqia,IAAI,CAAC,MAAM,GAAG,gBAAgB,KAAKE,EAAE,CAAC,SAAS/rK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOgsK,EAAIhsK,EAAQ,UAARA,CAAmB,eAAel2O,EAAS,GAAGA,SAAS,SAASmiZ,EAAIR,GAAI,OAAO3hZ,EAASjjB,KAAK4ka,GAAIpha,MAAM,GAAG,GAAG4ha,EAAIC,QAAQ,SAAST,GAAI,IAAInF,EAAEuF,EAAE,OAAW7mW,MAAJymW,OAAmBzmW,IAALymW,EAAe,YAAY,OAAsC,iBAAxBI,GAAGvF,EAAE5/Z,OAAO+ka,IAAKO,IAAgBH,EAAEI,EAAI3F,IAAI2F,EAAIviZ,IAAI,SAAS+hZ,EAAGtpP,EAAIgqP,GAASV,IAAK3pL,EAAE+sH,IAAI48D,EAAGU,EAAKV,EAAGA,EAAG9ka,UAAUqla,IAAKlqL,EAAEt6K,KAAKikW,EAAGO,EAAI7pP,IAAMl6K,EAAOD,QAAQika,GAAK,CAAC,MAAM,GAAG,UAAU,KAAKG,GAAG,CAAC,SAASpsK,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAOrqM,EAAIqqM,EAAQ,WAAWqsK,EAAKrsK,EAAQ,WAAWqsK,KAAKjB,EAAOprK,EAAQ,cAAcssK,EAAMtsK,EAAQ,cAAczrI,EAAKyrI,EAAQ,YAAYzrI,KAAKg4S,EAAKzqL,EAAE+sH,IAAInlV,EAAIo4N,EAAEp4N,IAAI2zJ,EAASykE,EAAEzkE,SAAS71G,EAAKs6K,EAAEt6K,KAAKglW,EAAa9la,OAAO8la,cAAcnvP,EAASghI,EAAGguH,EAAK,MAAMI,EAAGJ,EAAK,MAAMK,EAAKL,EAAK,QAAQM,EAAMN,EAAK,SAASO,EAAKP,EAAK,QAAQQ,EAAK/qL,EAAEgrL,KAAKT,EAAK,QAAQ,OAAOryZ,EAAG,EAAE,SAAS+yZ,EAAQtB,EAAGlia,GAAQ,IAAI8zK,EAASouP,GAAI,MAAkB,gBAAX,IAAOA,EAAP,0BAAOA,IAAaA,GAAe,iBAAJA,EAAa,IAAI,KAAKA,EAAG,IAAIc,EAAKd,EAAGptH,GAAI,CAAC,IAAImuH,EAAaf,GAAI,MAAM,IAAI,IAAIlia,EAAO,MAAM,IAAIi+D,EAAKikW,EAAGptH,IAAKrkS,GAAI,MAAM,IAAIyxZ,EAAGptH,GAAI,SAAS2uH,EAAShC,EAAKxha,GAAK,IAAuByja,EAAnBrtZ,EAAMmtZ,EAAQvja,GAAW,GAAW,MAARoW,EAAY,OAAOorZ,EAAKyB,GAAI7sZ,GAAO,IAAIqtZ,EAAMjC,EAAK2B,GAAOM,EAAMA,EAAMA,EAAMvja,EAAG,GAAGuja,EAAM1mV,GAAG/8E,EAAI,OAAOyja,EAAOhla,EAAOD,QAAQ,CAACkla,eAAe,SAASC,EAAQC,EAAK3C,EAAO4C,GAAO,IAAI7nV,EAAE2nV,GAAQ,SAASnC,EAAKsC,GAAUlC,EAAO7sH,KAAKysH,EAAKxlV,EAAE4nV,GAAM1jZ,EAAIshZ,EAAKyB,EAAG3qL,EAAEv4O,OAAO,OAAOmgB,EAAIshZ,EAAK6B,EAAK,GAAGnjZ,EAAIshZ,EAAK0B,OAAK1nW,GAAWt7C,EAAIshZ,EAAK2B,OAAM3nW,GAAwBA,MAAVsoW,GAAoBhB,EAAMgB,EAAS7C,EAAOO,EAAKqC,GAAOrC,MAA01B,OAAl1BhrK,EAAQ,UAARA,CAAmBx6K,EAAE7+E,UAAU,CAAC24R,MAAM,WAAiB,IAAI,IAAcr5R,EAAL+L,KAAey6Z,GAAIQ,EAAnBj7Z,KAA8B26Z,GAAOM,EAAMA,EAAMA,EAAMvja,EAAGuja,EAAMlka,GAAE,EAAQkka,EAAMpja,IAAEoja,EAAMpja,EAAEoja,EAAMpja,EAAEH,OAAEs7D,UAAiB/+D,EAAKgna,EAAM1ma,GAAhIyL,KAAwI26Z,GAAxI36Z,KAAoJ06Z,QAAM1nW,EAA1JhzD,KAAyK66Z,GAAM,GAAG,OAAS,SAASrja,GAAK,IAAcyja,EAAMD,EAAXh7Z,KAAyBxI,GAAK,GAAGyja,EAAM,CAAC,IAAIh5P,EAAKg5P,EAAMvja,EAAE6iF,EAAK0gV,EAAMpja,SAApEmI,KAAkFy6Z,GAAIQ,EAAM1ma,GAAG0ma,EAAMlka,GAAE,EAAQwjF,IAAKA,EAAK7iF,EAAEuqK,GAAQA,IAAKA,EAAKpqK,EAAE0iF,GAA/Iv6E,KAA4J26Z,IAAQM,IAApKj7Z,KAA+K26Z,GAAO14P,GAAtLjiK,KAAmM06Z,IAAOO,IAA1Mj7Z,KAAqN06Z,GAAMngV,GAA3Nv6E,KAAqO66Z,KAAQ,QAAQI,GAAO78Z,QAAQ,SAAiB26Z,GAAuD,IAA3C,IAAqCkC,EAAjCvia,EAAEirD,EAAIo1W,EAAWtsJ,UAAU,GAAG,GAAewuJ,EAAMA,EAAMA,EAAMvja,EAAEsI,KAAK26Z,IAAgC,IAAxBjia,EAAEuia,EAAMz0I,EAAEy0I,EAAM1mV,EAAEv0E,MAAYi7Z,GAAOA,EAAMlka,GAAEkka,EAAMA,EAAMpja,GAAIglW,IAAI,SAAarlW,GAAK,QAAQwja,EAASh7Z,KAAKxI,MAAWs4O,EAAEgrL,MAAKhrL,EAAEyrL,QAAQ/nV,EAAE7+E,UAAU,OAAO,CAACmC,IAAI,WAAW,OAAOsia,EAAOG,IAAIv5Z,KAAK66Z,OAAiBrnV,GAAG+lV,IAAI,SAASP,EAAKxha,EAAIN,GAAO,IAA6BqjF,EAAK3sE,EAA9BqtZ,EAAMD,EAAShC,EAAKxha,GAAuP,OAApOyja,EAAOA,EAAMz0I,EAAEtvR,GAAW8ha,EAAK0B,GAAMO,EAAM,CAAC1ma,EAAEqZ,EAAMmtZ,EAAQvja,GAAI,GAAM+8E,EAAE/8E,EAAIgvR,EAAEtvR,EAAMW,EAAE0iF,EAAKy+U,EAAK0B,GAAMhja,OAAEs7D,EAAUj8D,GAAE,GAAWiia,EAAK2B,KAAO3B,EAAK2B,GAAOM,GAAS1gV,IAAKA,EAAK7iF,EAAEuja,GAAMjC,EAAK6B,KAAmB,MAARjtZ,IAAYorZ,EAAKyB,GAAI7sZ,GAAOqtZ,IAAajC,GAAMgC,SAASA,EAASQ,QAAQ,SAAShoV,EAAE4nV,EAAK3C,GAAQzqK,EAAQ,kBAARA,CAA2Bx6K,EAAE4nV,GAAK,SAASK,EAASC,GAAMhkZ,EAAI1X,KAAK46Z,EAAK,CAACjka,EAAE8ka,EAASlnV,EAAEmnV,OAAQ,WAAwD,IAA7C,IAAIC,EAAK37Z,KAAK46Z,GAAMc,EAAKC,EAAKpnV,EAAE0mV,EAAMU,EAAKzla,EAAQ+ka,GAAOA,EAAMlka,GAAEkka,EAAMA,EAAMpja,EAAE,OAAI8ja,EAAKhla,IAAKgla,EAAKzla,EAAE+ka,EAAMA,EAAMA,EAAMvja,EAAEika,EAAKhla,EAAEgka,IAAgEp4S,EAAK,EAAnB,QAANm5S,EAA2BT,EAAM1mV,EAAY,UAANmnV,EAA6BT,EAAMz0I,EAAiB,CAACy0I,EAAM1mV,EAAE0mV,EAAMz0I,KAA7Im1I,EAAKhla,OAAEq8D,EAAiBuvD,EAAK,MAAqHk2S,EAAO,UAAU,UAAUA,GAAO,MAAS,CAAC,MAAM,GAAG,aAAa,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,GAAG,UAAU,KAAKmD,GAAG,CAAC,SAAS5tK,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAWssK,EAAMtsK,EAAQ,cAAc/3P,EAAOD,QAAQ,SAASola,GAAMS,EAAKA,EAAKC,EAAEV,EAAK,CAAC3uE,OAAO,WAAkB,IAAIzK,EAAI,GAAkC,OAA/Bs4E,EAAMt6Z,MAAK,EAAMgiV,EAAIjtV,KAAKitV,GAAYA,OAAS,CAAC,UAAU,GAAG,aAAa,KAAK+5E,GAAG,CAAC,SAAS/tK,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAOqsK,EAAKrsK,EAAQ,WAAWqsK,KAAKjB,EAAOprK,EAAQ,cAAcssK,EAAMtsK,EAAQ,cAAcusK,EAAKzqL,EAAE+sH,IAAIxxL,EAASykE,EAAEzkE,SAAS71G,EAAKs6K,EAAEt6K,KAAKglW,EAAa9la,OAAO8la,cAAcnvP,EAASrjK,EAAG,EAAEqkS,EAAGguH,EAAK,MAAM2B,EAAK3B,EAAK,QAAQ4B,EAAK5B,EAAK,QAAQzsH,EAAO5/C,EAAQ,qBAAqBliP,EAAK8hS,EAAO,GAAGjxR,EAAUixR,EAAO,GAAG,SAASsuH,EAAW5ja,EAAMd,GAAK,OAAOsU,EAAKxT,EAAM+d,OAAM,SAASojZ,GAAI,OAAOA,EAAG,KAAKjia,KAAM,SAAS2ka,EAAUnD,GAAM,OAAOA,EAAKiD,IAAOzmW,EAAKwjW,EAAKiD,EAAK,CAAC5lZ,MAAM,GAAGvf,IAAI,SAASU,GAAK,IAAIyja,EAAMiB,EAAWl8Z,KAAKxI,GAAK,GAAGyja,EAAM,OAAOA,EAAM,IAAIp+D,IAAI,SAASrlW,GAAK,QAAQ0ka,EAAWl8Z,KAAKxI,IAAMkgB,IAAI,SAASlgB,EAAIN,GAAO,IAAI+ja,EAAMiB,EAAWl8Z,KAAKxI,GAAQyja,EAAMA,EAAM,GAAG/ja,EAAW8I,KAAKqW,MAAMthB,KAAK,CAACyC,EAAIN,KAAS,OAAS,SAASM,GAAK,IAAIoW,EAAM+O,EAAU3c,KAAKqW,OAAM,SAASojZ,GAAI,OAAOA,EAAG,KAAKjia,KAA2C,OAAjCoW,GAAM5N,KAAKqW,MAAM1gB,OAAOiY,EAAM,MAAYA,KAASquZ,GAAMhma,EAAOD,QAAQ,CAACkla,eAAe,SAASC,EAAQC,EAAK3C,EAAO4C,GAAO,IAAI7nV,EAAE2nV,GAAQ,SAASnC,EAAKsC,GAAUxrL,EAAEp4N,IAAI0hZ,EAAO7sH,KAAKysH,EAAKxlV,EAAE4nV,GAAM/uH,EAAGrkS,KAAmBgrD,MAAVsoW,GAAoBhB,EAAMgB,EAAS7C,EAAOO,EAAKqC,GAAOrC,MAAqY,OAA7XhrK,EAAQ,UAARA,CAAmBx6K,EAAE7+E,UAAU,CAAC,OAAS,SAAS6C,GAAK,QAAI6zK,EAAS7zK,KAAsBgja,EAAahja,GAAkD+ia,EAAK/ia,EAAIwka,IAAOzB,EAAK/ia,EAAIwka,GAAMh8Z,KAAKqsS,YAAa70S,EAAIwka,GAAMh8Z,KAAKqsS,IAAtG8vH,EAAUn8Z,MAAV,OAA0BxI,KAAkFqlW,IAAI,SAAarlW,GAAK,QAAI6zK,EAAS7zK,KAAsBgja,EAAahja,GAA4C+ia,EAAK/ia,EAAIwka,IAAOzB,EAAK/ia,EAAIwka,GAAMh8Z,KAAKqsS,IAApE8vH,EAAUn8Z,MAAM68V,IAAIrlW,OAA+Dg8E,GAAG+lV,IAAI,SAASP,EAAKxha,EAAIN,GAA0I,OAA/Hsja,EAAapB,EAAO3iZ,IAAIjf,KAA2C+ia,EAAK/ia,EAAIwka,IAAOxmW,EAAKh+D,EAAIwka,EAAK,IAAIxka,EAAIwka,GAAMhD,EAAK3sH,IAAKn1S,GAA1Fila,EAAUnD,GAAMthZ,IAAIlgB,EAAIN,GAA+E8ha,GAAMmD,UAAUA,EAAUH,KAAKA,EAAK3vH,GAAGA,IAAK,CAAC,MAAM,GAAG,oBAAoB,EAAE,aAAa,EAAE,aAAa,GAAG,UAAU,GAAG,UAAU,KAAK+vH,GAAG,CAAC,SAASpuK,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAWquK,EAAMruK,EAAQ,YAAYquK,MAAM/B,EAAMtsK,EAAQ,cAAcsuK,EAAQtuK,EAAQ,eAAeuuK,EAAevuK,EAAQ,cAAcu+C,KAAKt2S,EAAOD,QAAQ,SAASola,EAAKD,EAAQqB,EAAQrkV,EAAOsgV,EAAOgE,GAAS,IAAIn4J,EAAKx0B,EAAEypH,EAAE6hE,GAAM5nV,EAAE8wL,EAAK+2J,EAAM5C,EAAO,MAAM,MAAMiE,EAAMlpV,GAAGA,EAAE7+E,UAAU2/Z,EAAE,GAAG,SAASqI,EAAUC,GAAK,IAAIpD,EAAGkD,EAAME,GAAK5uK,EAAQ,YAARA,CAAqB0uK,EAAME,EAAS,UAALA,GAA+D,OAALA,GAAgE,OAALA,EAAvG,SAASj0Z,GAAG,OAAO6wZ,EAAG3ka,KAAKmL,KAAS,IAAJ2I,EAAM,EAAEA,IAA+H,OAALi0Z,EAAW,SAAaj0Z,GAA2B,OAAxB6wZ,EAAG3ka,KAAKmL,KAAS,IAAJ2I,EAAM,EAAEA,GAAU3I,MAAM,SAAa2I,EAAEC,GAA6B,OAA1B4wZ,EAAG3ka,KAAKmL,KAAS,IAAJ2I,EAAM,EAAEA,EAAEC,GAAU5I,OAAO,GAAI8vO,EAAE4pL,WAAWlmV,KAAMipV,IAAUJ,GAAOK,EAAMt+Z,SAASs+Z,EAAM9rE,SAAyG,CAAC,IAAkDisE,EAA9CtwH,EAAK,IAAI/4N,EAAEspV,EAAMvwH,EAAK8uH,GAAOoB,EAAQ,IAAI,EAAE,GAAiBzuK,EAAQ,kBAARA,EAA2B,SAAS2tK,GAAM,IAAInoV,EAAEmoV,SAASnoV,EAAE2nV,GAAQ,SAASzkZ,EAAO4kZ,GAAUiB,EAAe7lZ,EAAO88D,EAAE4nV,GAAM,IAAIpC,EAAK,IAAI10J,EAAoE,OAAlDtxM,MAAVsoW,GAAoBhB,EAAMgB,EAAS7C,EAAOO,EAAKqC,GAAOrC,GAAaA,MAASrka,UAAU+na,EAAMA,EAAMv5U,YAAY3P,GAAEipV,GAASlwH,EAAKnuS,SAAQ,SAASquF,EAAIj1F,GAAKqla,EAAU,EAAErla,IAAO8oN,OAAcu8M,IAAWF,EAAU,UAAUA,EAAU,OAAOlE,GAAQkE,EAAU,SAAUE,GAAWC,IAAQvwH,IAAKowH,EAAUtB,QAAvlB7nV,EAAE2E,EAAO+iV,eAAeC,EAAQC,EAAK3C,EAAO4C,GAAOrtK,EAAQ,UAARA,CAAmBx6K,EAAE7+E,UAAU6na,GAAuqB,OAA3JxuK,EAAQ,WAAWt2O,IAAI87D,EAAE4nV,GAAM9G,EAAE8G,GAAM5nV,EAAEqoV,EAAKA,EAAKkB,EAAElB,EAAKmB,EAAEnB,EAAKoB,GAAGzpV,GAAG8wL,GAAMgwJ,GAAGgI,EAAQ9oV,GAAG8oV,EAAQxsL,EAAEotL,KAAK9B,IAAWqB,GAAQtkV,EAAOqjV,QAAQhoV,EAAE4nV,EAAK3C,GAAejlV,IAAI,CAAC,MAAM,GAAG,aAAa,EAAE,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,KAAK2pV,GAAG,CAAC,SAASnvK,EAAQ/3P,EAAOD,GAAS,IAAIona,EAAepvK,EAAQ,cAAcwrK,GAAGvja,EAAOD,QAAQ,SAASwja,EAAGR,EAAKvka,GAA2B,GAAnB2oa,EAAe5D,IAAQ/ka,QAAeu+D,IAAPgmW,EAAiB,OAAOQ,EAAG,OAAO/ka,GAAQ,KAAK,EAAE,OAAO,SAASkU,GAAG,OAAO6wZ,EAAG3ka,KAAKmka,EAAKrwZ,IAAI,KAAK,EAAE,OAAO,SAASA,EAAEC,GAAG,OAAO4wZ,EAAG3ka,KAAKmka,EAAKrwZ,EAAEC,IAAI,KAAK,EAAE,OAAO,SAASD,EAAEC,EAAErS,GAAG,OAAOija,EAAG3ka,KAAKmka,EAAKrwZ,EAAEC,EAAErS,IAAI,OAAO,WAAW,OAAOija,EAAGpka,MAAM4ja,EAAKvsJ,cAAc,CAAC,aAAa,IAAI4wJ,GAAG,CAAC,SAASrvK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOinK,EAAOnlL,EAAEypH,EAAE2jE,EAAKptL,EAAEotL,KAAKxD,EAAW5pL,EAAE4pL,WAAW4D,EAAOtvK,EAAQ,aAAa,SAASrqM,EAAI61W,EAAGR,GAAM,OAAO,WAAW,OAAOQ,EAAGpka,MAAM4ja,EAAKvsJ,YAAqF,SAASovJ,EAAKzwZ,EAAK3U,EAAKsqC,GAAQ,IAAIvpC,EAAI+la,EAAI3mV,EAAIm9U,EAAIyJ,EAASpyZ,EAAKywZ,EAAKkB,EAAEU,EAAQryZ,EAAKywZ,EAAKC,EAAEplZ,EAAO8mZ,EAASvI,EAAO7pZ,EAAKywZ,EAAK/B,EAAE7E,EAAOx+Z,IAAOw+Z,EAAOx+Z,IAAO,IAAI9B,UAAUqB,EAAQwna,EAASN,EAAKA,EAAKzma,KAAQyma,EAAKzma,GAAM,IAA4B,IAAIe,KAAzBgma,IAASz8X,EAAOtqC,GAAgBsqC,EAAkD61C,IAA1C2mV,IAAMnyZ,EAAKywZ,EAAKoB,IAAIvmZ,GAAQlf,KAAOkf,GAAgBA,EAAOqqB,GAAQvpC,GAAyBu8Z,EAAjB3oZ,EAAKywZ,EAAK58R,GAAGs+R,EAAQ55W,EAAIizB,EAAIq+U,GAAiBwI,GAAS/D,EAAW9iV,GAAKjzB,EAAInyC,SAAS3c,KAAK+hF,GAAKA,EAAOlgE,IAAS6mZ,GAAID,EAAO5mZ,EAAOlf,EAAIo/E,GAAQ5gF,EAAQwB,IAAMo/E,GAAIk5J,EAAEt6K,KAAKx/D,EAAQwB,EAAIu8Z,GAAQ0J,KAASzna,EAAQrB,YAAYqB,EAAQrB,UAAU,KAAK6C,GAAKo/E,GAA5oBq+U,EAAOiI,KAAKA,EAAKrB,EAAKoB,EAAE,EAAEpB,EAAKkB,EAAE,EAAElB,EAAK/B,EAAE,EAAE+B,EAAKC,EAAE,EAAED,EAAK58R,EAAE,GAAG48R,EAAKmB,EAAE,GAA2kB/ma,EAAOD,QAAQ6la,GAAM,CAAC,MAAM,GAAG,YAAY,KAAK6B,GAAG,CAAC,SAAS1vK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO50P,EAAS02O,EAAEypH,EAAEngW,SAASiyK,EAASykE,EAAEzkE,SAASq3G,EAAGr3G,EAASjyK,IAAWiyK,EAASjyK,EAAS8oD,eAAejsD,EAAOD,QAAQ,SAASyja,GAAI,OAAO/2I,EAAGtpR,EAAS8oD,cAAcu3W,GAAI,KAAK,CAAC,MAAM,KAAKkE,GAAG,CAAC,SAAS3vK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO/3P,EAAOD,QAAQ,SAASyja,GAAI,IAAI5oZ,EAAKi/N,EAAE8tL,QAAQnE,GAAIoE,EAAQ/tL,EAAE+tL,QAAQC,EAAWhuL,EAAEguL,WAAiH,OAAnGA,GAAWhuL,EAAElkE,KAAK/2K,KAAKipa,EAAWrE,IAAI,SAASjia,GAAQqma,EAAQpE,EAAGjia,GAAKX,YAAWga,EAAK9b,KAAKyC,MAAcqZ,IAAO,CAAC,MAAM,KAAKktZ,GAAG,CAAC,SAAS/vK,EAAQ/3P,EAAOD,GAAS,IAAI2tD,EAAIqqM,EAAQ,WAAWl3P,EAAIk3P,EAAQ,YAAYl3P,IAAIjC,EAAKm5P,EAAQ,iBAAiB/3P,EAAOD,QAAQ,SAASsla,EAAS1qE,EAAQ4oE,EAAGR,GAAiE,IAA3D,IAAsDz2S,EAAlD0/N,EAASnrV,EAAIwka,GAAU5ia,EAAEirD,EAAI61W,EAAGR,EAAKpoE,EAAQ,EAAE,KAAgBruO,EAAK0/N,EAAShgL,QAAQ2hH,MAAM,IAAyC,IAAtC/uR,EAAKotV,EAASvpV,EAAE6pH,EAAKrrH,MAAM05V,GAAkB,OAAO/7V,EAAKmpa,MAAM/7E,KAAc,CAAC,UAAU,GAAG,WAAW,GAAG,gBAAgB,KAAKg8E,GAAG,CAAC,SAASjwK,EAAQ/3P,EAAOD,GAASC,EAAOD,QAAQ,SAAS85O,GAAwB,OAArBA,EAAEouL,IAAG,EAAKpuL,EAAEz2H,KAAKy2H,EAAEypH,EAASzpH,IAAI,IAAIquL,GAAG,CAAC,SAASnwK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOl2O,EAAS,GAAGA,SAASsmZ,EAAStuL,EAAEsuL,SAAaC,EAA2B,WAAf,oBAAOlma,OAAP,0BAAOA,UAAkBzD,OAAO4pa,oBAAoB5pa,OAAO4pa,oBAAoBnma,QAAQ,GAA4FlC,EAAOD,QAAQc,IAAI,SAA6B2ia,GAAI,OAAG4E,GAAgC,mBAAnBvmZ,EAASjjB,KAAK4ka,GAA3K,SAAwBA,GAAI,IAAI,OAAO2E,EAAS3E,GAAI,MAAMtja,GAAG,OAAOkoa,EAAYhma,SAAyHkma,CAAe9E,GAAW2E,EAAStuL,EAAEuoL,SAASoB,MAAO,CAAC,MAAM,KAAK+E,GAAG,CAAC,SAASxwK,EAAQ/3P,EAAOD,GAASC,EAAOD,QAAQ,SAASwja,EAAGt2G,EAAK81G,GAAM,IAAIyF,OAAUzrW,IAAPgmW,EAAiB,OAAO91G,EAAKzuT,QAAQ,KAAK,EAAE,OAAOgqa,EAAGjF,IAAKA,EAAG3ka,KAAKmka,GAAM,KAAK,EAAE,OAAOyF,EAAGjF,EAAGt2G,EAAK,IAAIs2G,EAAG3ka,KAAKmka,EAAK91G,EAAK,IAAI,KAAK,EAAE,OAAOu7G,EAAGjF,EAAGt2G,EAAK,GAAGA,EAAK,IAAIs2G,EAAG3ka,KAAKmka,EAAK91G,EAAK,GAAGA,EAAK,IAAI,KAAK,EAAE,OAAOu7G,EAAGjF,EAAGt2G,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAAIs2G,EAAG3ka,KAAKmka,EAAK91G,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAAI,KAAK,EAAE,OAAOu7G,EAAGjF,EAAGt2G,EAAK,GAAGA,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAAIs2G,EAAG3ka,KAAKmka,EAAK91G,EAAK,GAAGA,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAAI,KAAK,EAAE,OAAOu7G,EAAGjF,EAAGt2G,EAAK,GAAGA,EAAK,GAAGA,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAAIs2G,EAAG3ka,KAAKmka,EAAK91G,EAAK,GAAGA,EAAK,GAAGA,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAAI,OAAOs2G,EAAGpka,MAAM4ja,EAAK91G,KAAQ,IAAIw7G,GAAG,CAAC,SAAS1wK,EAAQ/3P,EAAOD,GAAS,IAAI2oa,EAAa3wK,EAAQ,cAAcv3O,IAAI,SAASunZ,EAAM/7E,GAAU,IAAIj0U,EAAIi0U,EAAA,YAA4BjvR,IAANhlD,GAAgB2wZ,EAAa3wZ,EAAInZ,KAAKotV,IAAW,SAASptV,EAAKotV,EAASu3E,EAAGtia,EAAM05V,GAAS,IAAI,OAAOA,EAAQ4oE,EAAGmF,EAAazna,GAAO,GAAGA,EAAM,IAAIsia,EAAGtia,GAAO,MAAMf,GAAmB,MAAhB6na,EAAM/7E,GAAgB9rV,GAAGtB,EAAKmpa,MAAMA,EAAM/na,EAAOD,QAAQnB,GAAM,CAAC,aAAa,IAAI+pa,GAAG,CAAC,SAAS5wK,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAWsvK,EAAOtvK,EAAQ,aAAale,EAAEke,EAAQ,OAAOisK,EAAIjsK,EAAQ,WAAW6wK,EAAM7wK,EAAQ,YAAY8wK,EAAgB9wK,EAAQ,UAARA,CAAmB,YAAiE+wK,EAAUF,EAAME,UAAU9oa,EAAOD,QAAQ,SAASsuQ,EAAK82J,EAAKl5G,EAAYjgJ,EAAK+8P,EAAQC,EAAOC,GAA2C,SAASC,EAAazD,GAAM,SAAS0D,EAAGpG,GAAM,OAAO,IAAI92G,EAAY82G,EAAK0C,GAAM,OAAOA,GAAM,IAA3P,OAA6S,IAA/R,SAA2S,OAAO,WAAkB,OAAO0D,EAAGp/Z,OAAO,OAAO,WAAmB,OAAOo/Z,EAAGp/Z,OAA7Q6+Z,EAAMtna,OAAO2qT,EAAYk5G,EAAKn5P,GAAsP,IAAkKu6P,EAAQhla,EAAtKwia,EAAIoB,EAAK,YAAYsB,EAAMp4J,EAAK3vQ,UAAU0qa,EAAQ3C,EAAMoC,IAAkBpC,EAA9e,eAAkgBsC,GAAStC,EAAMsC,GAASM,EAASD,GAASF,EAAaH,GAAqB,GAAGK,EAAQ,CAAC,IAAIE,EAAkBzvL,EAAE0vL,SAASF,EAASzqa,KAAK,IAAIyvQ,IAAO21J,EAAIviZ,IAAI6nZ,EAAkBvF,GAAI,GAASlqL,EAAEouL,IAAIpuL,EAAE+sH,IAAI6/D,EAAvsB,eAA0tBmC,EAAMnnZ,IAAI6nZ,EAAkBzvL,EAAEkpL,MAA8F,IAArFlpL,EAAEouL,IAAIgB,IAAML,EAAMnnZ,IAAIglZ,EAAM4C,GAAUP,EAAU3D,GAAMkE,EAASP,EAAU/E,GAAKlqL,EAAEkpL,KAAQgG,EAAyK,GAAhKxC,EAAQ,CAAC3rZ,KAAKouZ,EAAOK,EAASH,EAA92B,QAAi4BhpZ,OAAn3B,UAA03B6oZ,EAAgBM,EAASH,EAAn5B,UAAw6BvuE,QAAx6B,UAAg7BouE,EAAgBM,EAASH,EAAa,YAAeD,EAAM,IAAI1na,KAAOgla,EAAchla,KAAOkla,GAAOY,EAAOZ,EAAMlla,EAAIgla,EAAQhla,SAAWqka,EAAKA,EAAKC,EAAED,EAAKoB,EAAE4B,EAAMxC,MAAMjB,EAAKoB,KAAY,CAAC,MAAM,GAAG,UAAU,EAAE,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,KAAKiD,GAAG,CAAC,SAASzxK,EAAQ/3P,EAAOD,GAAS,IAAI8oa,EAAgB9wK,EAAQ,UAARA,CAAmB,YAAY0xK,GAAa,EAAM,IAAI,IAAIC,EAAM,CAAC,GAAGb,KAAmBa,EAAA,OAAgB,WAAWD,GAAa,GAAM93Z,MAAM6pD,KAAKkuW,GAAM,WAAW,MAAM,KAAI,MAAMxpa,IAAIF,EAAOD,QAAQ,SAASugF,GAAM,IAAImpV,EAAa,OAAO,EAAM,IAAIrF,GAAK,EAAM,IAAI,IAAIr4E,EAAI,CAAC,GAAG25E,EAAK35E,EAAI88E,KAAmBnD,EAAK15P,KAAK,WAAWo4P,GAAK,GAAMr4E,EAAI88E,GAAiB,WAAW,OAAOnD,GAAMplV,EAAKyrQ,GAAK,MAAM7rV,IAAI,OAAOkka,IAAO,CAAC,UAAU,KAAKuF,GAAG,CAAC,SAAS5xK,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAOisK,EAAIjsK,EAAQ,WAAWksK,EAAQD,EAAIC,QAAQd,EAAOprK,EAAQ,cAAc2wK,EAAavF,EAAO3iZ,IAAIqoZ,EAAgB9wK,EAAQ,UAARA,CAAmB,YAAqC+wK,EAAU/wK,EAAQ,aAARA,CAAsB,aAAauxK,EAAkB,GAAyC,SAASM,EAAYvL,EAAEp9Z,GAAO44O,EAAEt6K,KAAK8+V,EAAEwK,EAAgB5na,GAA5K,cAAoM,IAAG44O,EAAEt6K,KAAK8+V,EAA9M,aAA4Np9Z,GAA7I2oa,EAAYN,EAAkBzvL,EAAEkpL,MAAoH/ia,EAAOD,QAAQ,CAACqma,MAAM,QAAQ,MAAM,QAAQ,GAAGxrZ,QAAQkuZ,UAAUA,EAAUx8S,KAAK,SAASqhK,EAAK1sR,GAAO,MAAM,CAACA,MAAMA,EAAM0sR,OAAOA,IAAOlB,GAAG,SAAS+2I,GAAI,IAAInF,EAAE5/Z,OAAO+ka,GAAIzia,EAAO84O,EAAEypH,EAAEviW,OAAO,OAAOA,GAAQA,EAAOirV,UAAlb,gBAA2cqyE,GAAGwK,KAAmBxK,GAAGxkL,EAAE+sH,IAAIkiE,EAAU7E,EAAQ5F,KAAKx9Z,IAAI,SAAS2ia,GAAI,IAAsBqG,EAAlB9oa,EAAO84O,EAAEypH,EAAEviW,OAAoL,OAA9Jg8D,MAAJymW,IAAeqG,EAAQrG,EAAGzia,GAAQA,EAAOirV,UAA5lB,eAAonBw3E,EAAGqF,IAAkBC,EAAU7E,EAAQT,KAAKL,EAAOtpL,EAAE4pL,WAAWoG,GAASrG,EAAG,qBAA4BkF,EAAamB,EAAQjra,KAAK4ka,KAAM/hZ,IAAImoZ,EAAYtoa,OAAO,SAAS2qT,EAAYk5G,EAAKn5P,EAAKy6P,GAAOx6G,EAAYvtT,UAAUm7O,EAAEv4O,OAAOmla,GAAO6C,EAAkB,CAACt9P,KAAK6tE,EAAEu8B,KAAK,EAAEpqG,KAAQg4P,EAAIviZ,IAAIwqS,EAAYk5G,EAAK,gBAAgB,CAAC,MAAM,GAAG,aAAa,EAAE,UAAU,EAAE,aAAa,GAAG,UAAU,KAAK2E,GAAG,CAAC,SAAS/xK,EAAQ/3P,EAAOD,GAAsB,IAAIi/Z,EAAoB,oBAANhwZ,KAAkBA,KAAKuM,SAAS,cAATA,GAA0B0rZ,EAAK,GAAGtma,EAAelC,OAAOkC,eAAehC,EAAe,GAAGA,eAAe0d,EAAKlI,KAAKkI,KAAKkmE,EAAMpuE,KAAKouE,MAAMqiD,EAAIzwH,KAAKywH,IAAID,EAAIxwH,KAAKwwH,IAAQkgS,IAAO,WAAW,IAAI,OAA4D,GAArDlka,EAAe,GAAG,IAAI,CAACE,IAAI,WAAW,OAAO,KAAK6R,EAAK,MAAMxS,KAAnF,GAA+Fq/D,EAAKwqW,EAAc,GAAG,SAASC,EAAUxG,GAAI,OAAO/nZ,MAAM+nZ,GAAIA,GAAI,GAAGA,EAAG,EAAEjhV,EAAMlmE,GAAMmnZ,GAAI,SAASptJ,EAAK6zJ,EAAOhpa,GAAO,MAAM,CAACL,aAAoB,EAAPqpa,GAAUvzJ,eAAsB,EAAPuzJ,GAAUtzJ,WAAkB,EAAPszJ,GAAUhpa,MAAMA,GAAO,SAASipa,EAAUxoa,EAAOH,EAAIN,GAAyB,OAAlBS,EAAOH,GAAKN,EAAaS,EAAO,SAASqoa,EAAcE,GAAQ,OAAOpF,EAAK,SAASnja,EAAOH,EAAIN,GAAO,OAAO44O,EAAEyrL,QAAQ5ja,EAAOH,EAAI60Q,EAAK6zJ,EAAOhpa,KAASipa,EAAoJ,SAASlH,EAAcQ,GAAI,GAAOzmW,MAAJymW,EAAc,MAAM92G,UAAU,yBAAyB82G,GAAI,OAAOA,EAAG,IAAI3pL,EAAE75O,EAAOD,QAAQg4P,EAAQ,SAARA,CAAkB,CAACurG,EAAE07D,EAAOiI,KAAKA,EAAKn9J,KAAKk1J,EAAO77Z,UAAUA,SAASgna,gBAAgB/0P,SAAvV,SAAkBouP,GAAI,OAAY,OAALA,IAAuB,gBAAX,IAAOA,EAAP,0BAAOA,KAAyB,mBAAJA,IAAoSC,WAApR,SAAoBD,GAAI,MAAkB,mBAAJA,GAAoQT,KAAK,WAAW,OAAOh5Z,MAAMiga,UAAUA,EAAU3H,SAAS,SAASmB,GAAI,OAAOA,EAAG,EAAE7+R,EAAIqlS,EAAUxG,GAAI,kBAAkB,GAAGlB,QAAQ,SAAS3qZ,EAAMnZ,GAA+B,OAAvBmZ,EAAMqyZ,EAAUryZ,IAAoB,EAAEitH,EAAIjtH,EAAMnZ,EAAO,GAAGmmI,EAAIhtH,EAAMnZ,IAASooW,IAAI,SAAS48D,EAAGjia,GAAK,OAAO5C,EAAeC,KAAK4ka,EAAGjia,IAAMD,OAAO7C,OAAO6C,OAAOioa,SAAS9qa,OAAO2uT,eAAey3G,KAAKA,EAAKzuJ,KAAKA,EAAKwxJ,QAAQnpa,OAAO2ra,yBAAyB9E,QAAQ3ka,EAAe0pa,SAAS5ra,OAAOstT,iBAAiB47G,QAAQlpa,OAAOmc,KAAKutZ,SAAS1pa,OAAO4pa,oBAAoBR,WAAWppa,OAAO6ra,sBAAsBtH,cAAcA,EAAcC,UAAUxka,OAAO2ja,SAAS,SAASoB,GAAI,OAAO3pL,EAAEopL,UAAUD,EAAcQ,KAAMjkW,KAAKA,EAAK+jW,IAAIyG,EAAc,GAAGtoZ,IAAIu9Y,EAAOj+Z,OAAOmpa,EAAU3qW,EAAKo2G,KAAK,GAAGxtK,UAAyB,oBAALoia,MAAiBA,IAAItD,GAAoB,oBAALuD,MAAiBA,IAAIxL,IAAQ,CAAC,SAAS,KAAKyL,GAAG,CAAC,SAAS1yK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO/3P,EAAOD,QAAQ,SAAS2B,EAAOu0P,GAA8E,IAA1E,IAAsE10P,EAAlE88Z,EAAExkL,EAAEuoL,SAAS1ga,GAAQkZ,EAAKi/N,EAAE8tL,QAAQtJ,GAAG7/Z,EAAOoc,EAAKpc,OAAOmZ,EAAM,EAAYnZ,EAAOmZ,GAAM,GAAG0mZ,EAAE98Z,EAAIqZ,EAAKjD,QAAYs+O,EAAG,OAAO10P,IAAM,CAAC,MAAM,KAAKmpa,GAAG,CAAC,SAAS3yK,EAAQ/3P,EAAOD,GAAS,IAAIsna,EAAOtvK,EAAQ,aAAa/3P,EAAOD,QAAQ,SAAS0gB,EAAO3X,GAAK,IAAI,IAAIvH,KAAOuH,EAAIu+Z,EAAO5mZ,EAAOlf,EAAIuH,EAAIvH,IAAM,OAAOkf,IAAS,CAAC,YAAY,KAAKkqZ,GAAG,CAAC,SAAS5yK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO2wK,EAAa3wK,EAAQ,cAAcv3O,IAAIxgB,EAAOD,QAAQ,SAAiByja,GAAIkF,EAAalF,GAAI,IAAI5oZ,EAAKi/N,EAAEsuL,SAAS3E,GAAIqE,EAAWhuL,EAAEguL,WAAW,OAAOA,EAAWjtZ,EAAKs8C,OAAO2wW,EAAWrE,IAAK5oZ,IAAO,CAAC,MAAM,GAAG,aAAa,IAAIgwZ,GAAG,CAAC,SAAS7yK,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAO8yK,EAAO9yK,EAAQ,cAAcovK,EAAepvK,EAAQ,cAAcwrK,GAAGvja,EAAOD,QAAQ,WAA+G,IAApG,IAAIwja,EAAG4D,EAAep9Z,MAAMvL,EAAOg4Q,UAAUh4Q,OAAOssa,EAAMn5Z,MAAMnT,GAAQF,EAAE,EAAE2a,EAAE4gO,EAAEz2H,KAAKnqG,EAAE8xZ,GAAO,EAAYvsa,EAAOF,IAAMwsa,EAAMxsa,GAAGk4Q,UAAUl4Q,QAAQ2a,IAAE8xZ,GAAO,GAAK,OAAO,WAAW,IAA+C99G,EAA3C81G,EAAKh5Z,KAAK0yV,EAAQjmF,UAAUh4Q,OAAOgB,EAAE,EAAE8+E,EAAE,EAAO,IAAIysV,IAAStuE,EAAQ,OAAOouE,EAAOtH,EAAGuH,EAAM/H,GAAyB,GAAnB91G,EAAK69G,EAAM1oa,QAAW2oa,EAAO,KAAKvsa,EAAOgB,EAAEA,IAAOytT,EAAKztT,KAAKyZ,IAAEg0S,EAAKztT,GAAGg3Q,UAAUl4L,MAAK,KAAMm+Q,EAAQn+Q,GAAE2uO,EAAKnuT,KAAK03Q,UAAUl4L,MAAM,OAAOusV,EAAOtH,EAAGt2G,EAAK81G,MAAS,CAAC,MAAM,GAAG,aAAa,EAAE,aAAa,KAAKiI,GAAG,CAAC,SAASjzK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOkzK,EAAIrqV,OAAO,GAAGjiF,gBAAgBusa,EAAInzK,EAAQ,WAAWqsK,KAAK,OAAO+G,EAAU5vZ,SAASsG,SAAS,SAASwlZ,EAAOhJ,EAAE98Z,EAAIi1F,EAAI4tU,GAAM,GAAGvqL,EAAE4pL,WAAWjtU,GAAK,CAAC,IAAI40U,EAAK/M,EAAE98Z,GAAKs4O,EAAEt6K,KAAKi3B,EAAI00U,EAAIE,EAAKxqV,OAAOwqV,GAAMH,EAAIvia,QAAQ,iBAAiBk4E,OAAOr/E,KAAY,SAASi1F,IAAKA,EAAIh2F,KAAKe,GAAO88Z,IAAIxkL,EAAEypH,EAAG+6D,EAAE98Z,GAAKi1F,GAAa4tU,UAAY/F,EAAE98Z,GAAKs4O,EAAEt6K,KAAK8+V,EAAE98Z,EAAIi1F,IAAM6wU,EAAO9rZ,SAAS7c,UAAU,YAAW,WAAoB,OAAOm7O,EAAE+sH,IAAI78V,KAAKmha,GAAKnha,KAAKmha,GAAKC,EAAUvsa,KAAKmL,SAAQ8vO,EAAEotL,KAAKoE,cAAc,SAAS7H,GAAI,OAAO2H,EAAUvsa,KAAK4ka,IAAKxja,EAAOD,QAAQsna,GAAQ,CAAC,MAAM,GAAG,UAAU,KAAKiE,GAAG,CAAC,SAASvzK,EAAQ/3P,EAAOD,GAAsBC,EAAOD,QAAQ,SAASwra,EAAO7ia,EAAQ8ia,GAAU,IAAIC,EAAS/ia,IAAUjK,OAAOiK,GAAS,SAAS6c,GAAM,OAAO7c,EAAQ6c,IAAO7c,EAAQ,OAAO,SAAS86Z,GAAI,OAAO5iV,OAAO4qV,EAAShI,EAAGz5Z,MAAMrB,QAAQ6ia,EAAOE,MAAa,IAAIC,GAAG,CAAC,SAAS3zK,EAAQ/3P,EAAOD,GAASC,EAAOD,QAAQtB,OAAOguR,IAAI,SAAYtoQ,EAAEC,GAAG,OAAOD,IAAIC,EAAM,IAAJD,GAAO,EAAEA,GAAI,EAAEC,EAAED,GAAGA,GAAGC,GAAGA,IAAI,IAAIunZ,GAAG,CAAC,SAAS5zK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOorK,EAAOprK,EAAQ,cAAc,SAAS6zK,EAAMvN,EAAEoI,GAAOtD,EAAO3iZ,IAAI69Y,GAAG8E,EAAe,OAARsD,GAAc5sL,EAAEzkE,SAASqxP,GAAOA,EAAM,6BAA6Bzma,EAAOD,QAAQ,CAAC0hB,IAAIhjB,OAAOovT,iBAAiB,aAAa,GAAG,SAASg+G,EAAMpqZ,GAAK,KAAIA,EAAIs2O,EAAQ,UAARA,CAAmBx8O,SAAS3c,KAAKi7O,EAAE+tL,QAAQnpa,OAAOC,UAAU,aAAa+iB,IAAI,IAAO,GAAG,IAAI,MAAMvhB,GAAG2ra,GAAM,EAAK,OAAO,SAAwBxN,EAAEoI,GAAmE,OAA5DmF,EAAMvN,EAAEoI,GAAUoF,EAAMxN,EAAElxG,UAAUs5G,EAAWhlZ,EAAI48Y,EAAEoI,GAAcpI,GAAtP,QAA4PthW,GAAW6uW,MAAMA,IAAQ,CAAC,MAAM,GAAG,aAAa,EAAE,UAAU,KAAKE,GAAG,CAAC,SAAS/zK,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAmC11P,EAAMw3O,EAAEypH,EAA7B,wBAAyCzpH,EAAEypH,EAA3C,sBAAqD,IAAItjW,EAAOD,QAAQ,SAASwB,GAAK,OAAOc,EAAMd,KAAOc,EAAMd,GAAK,MAAM,CAAC,MAAM,KAAKwqa,GAAG,CAAC,SAASh0K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOi0K,EAAQj0K,EAAQ,UAARA,CAAmB,WAAW/3P,EAAOD,QAAQ,SAASw9E,GAAMs8J,EAAEgrL,QAAQmH,KAAWzuV,IAAGs8J,EAAEyrL,QAAQ/nV,EAAEyuV,EAAQ,CAACt1J,cAAa,EAAK71Q,IAAIg5O,EAAEkpL,SAAS,CAAC,MAAM,GAAG,UAAU,KAAKkJ,GAAG,CAAC,SAASl0K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO/3P,EAAOD,QAAQ,SAASmsa,GAAW,OAAO,SAASnJ,EAAK1xW,GAAK,IAAkE3+C,EAAEC,EAAhE/S,EAAEghF,OAAOi5J,EAAEmpL,cAAcD,IAAOzka,EAAEu7O,EAAEmwL,UAAU34W,GAAKpxD,EAAEL,EAAEpB,OAAW,OAAGF,EAAE,GAAGA,GAAG2B,EAASisa,EAAU,QAAGnvW,GAAUrqD,EAAE9S,EAAEmhF,WAAWziF,IAAY,OAAOoU,EAAE,OAAOpU,EAAE,IAAI2B,IAAI0S,EAAE/S,EAAEmhF,WAAWziF,EAAE,IAAI,OAAOqU,EAAE,MAAMu5Z,EAAUtsa,EAAEod,OAAO1e,GAAGoU,EAAEw5Z,EAAUtsa,EAAEwC,MAAM9D,EAAEA,EAAE,GAAkBqU,EAAE,OAAhBD,EAAE,OAAO,IAAc,SAAS,CAAC,MAAM,KAAKy5Z,GAAG,CAAC,SAASp0K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOq0K,EAAOr0K,EAAQ,qBAAqB/3P,EAAOD,QAAQ,SAASgja,EAAKj/R,EAAUuoS,EAASxwX,GAAM,IAAIgoX,EAAEjjV,OAAOi5J,EAAEmpL,cAAcD,IAAO,QAAehmW,IAAZ+mE,EAAsB,OAAO+/R,EAAE,IAA4CyI,EAA3BzyL,EAAEmwL,UAAUlmS,GAAoC+/R,EAAErla,OAAO,GAAG8ta,EAAQ,GAAGA,IAAUjiN,IAAU,MAAM,IAAIkiN,WAAW,gCAAgCzoS,EAAU,gBAAgB+/R,GAAG,IAAI2I,OAAoBzvW,IAAXsvW,EAAqB,IAAIzrV,OAAOyrV,GAAcI,EAASL,EAAOxta,KAAK4ta,EAASr4Z,KAAKkI,KAAKiwZ,EAAQE,EAAShua,SAAoH,OAAxGiua,EAASjua,OAAO8ta,IAAQG,EAAS5wX,EAAK4wX,EAASrqa,MAAMqqa,EAASjua,OAAO8ta,GAASG,EAASrqa,MAAM,EAAEkqa,IAAgBzwX,EAAK4wX,EAASv1W,OAAO2sW,GAAGA,EAAE3sW,OAAOu1W,KAAY,CAAC,MAAM,GAAG,oBAAoB,KAAKC,GAAG,CAAC,SAAS30K,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAO/3P,EAAOD,QAAQ,SAAgB6zK,GAAO,IAAI12J,EAAI0jE,OAAOi5J,EAAEmpL,cAAcj5Z,OAAOgxE,EAAI,GAAGt5E,EAAEo4O,EAAEmwL,UAAUp2P,GAAO,GAAGnyK,EAAE,GAAGA,GAAG4oN,IAAS,MAAMkiN,WAAW,2BAA2B,KAAK9qa,EAAE,GAAGA,KAAK,KAAKyb,GAAKA,GAAU,EAAFzb,IAAIs5E,GAAK79D,GAAI,OAAO69D,IAAM,CAAC,MAAM,KAAK4xV,GAAG,CAAC,SAAS50K,EAAQ/3P,EAAOD,GAAsB,IAAgW6sa,EAAMC,EAAQnnP,EAA1Wm0D,EAAEke,EAAQ,OAAOrqM,EAAIqqM,EAAQ,WAAWisK,EAAIjsK,EAAQ,WAAW8yK,EAAO9yK,EAAQ,cAAc+0K,EAAI/0K,EAAQ,kBAAkBinK,EAAOnlL,EAAEypH,EAAEmgE,EAAW5pL,EAAE4pL,WAAW35J,EAAKjwB,EAAEiwB,KAAKu1J,EAAQL,EAAOK,QAAQ0N,EAAQ/N,EAAOgO,aAAaC,EAAUjO,EAAOkO,eAAeC,EAAenO,EAAOmO,eAAeC,EAAQ,EAAEnM,EAAM,GAA8D,SAASoM,IAAM,IAAIt7Z,GAAIhI,KAAK,GAAG8vO,EAAE+sH,IAAIq6D,EAAMlvZ,GAAI,CAAC,IAAIwxZ,EAAGtC,EAAMlvZ,UAAWkvZ,EAAMlvZ,GAAIwxZ,KAAM,SAAS+J,EAAQ3iU,GAAO0iU,EAAIzua,KAAK+rG,EAAM3sG,MAAUyla,EAAWsJ,IAAWtJ,EAAWwJ,KAAYF,EAAQ,SAASxJ,GAAoB,IAAhB,IAAIt2G,EAAK,GAAG3uT,EAAE,EAAQk4Q,UAAUh4Q,OAAOF,GAAE2uT,EAAKnuT,KAAK03Q,UAAUl4Q,MAA8F,OAAxF2ia,IAAQmM,GAAS,WAAWvC,EAAOpH,EAAWF,GAAIA,EAAGhoZ,SAASgoZ,GAAIt2G,IAAO2/G,EAAMQ,GAAgBA,GAASH,EAAU,SAASl7Z,UAAWkvZ,EAAMlvZ,IAAsB,WAAdiyZ,EAAI3E,GAAqBuN,EAAM,SAAS76Z,GAAIstZ,EAAQiC,SAAS5zW,EAAI2/W,EAAIt7Z,EAAG,KAAaitZ,EAAOpuW,kBAAkB6yW,EAAWzE,EAAO9yX,eAAe8yX,EAAOuO,eAAeX,EAAM,SAAS76Z,GAAIitZ,EAAO9yX,YAAYn6B,EAAG,MAAMitZ,EAAOpuW,iBAAiB,UAAU08W,GAAQ,IAAe7J,EAAW0J,IAA4CznP,GAA3BmnP,EAAQ,IAAIM,GAA4BK,MAAMX,EAAQY,MAAMC,UAAUJ,EAAQV,EAAMl/W,EAAIg4H,EAAKx5I,YAAYw5I,EAAK,IAAgDknP,EAAj5B,uBAAk4BE,EAAI,UAAiB,SAAS/6Z,GAAI+3P,EAAK59M,YAAY4gX,EAAI,WAArB,mBAAoD,WAAWhjK,EAAKz9M,YAAYtiD,MAAMsja,EAAIzua,KAAKmT,KAAiB,SAASA,GAAI0mF,WAAW/qC,EAAI2/W,EAAIt7Z,EAAG,GAAG,KAAK/R,EAAOD,QAAQ,CAAC0hB,IAAIsrZ,EAAQ11I,MAAM41I,IAAY,CAAC,MAAM,GAAG,UAAU,EAAE,UAAU,GAAG,iBAAiB,GAAG,aAAa,KAAKU,GAAG,CAAC,SAAS51K,EAAQ/3P,EAAOD,GAASC,EAAOD,QAAQ,SAASugF,GAAM,IAAW,OAAPA,KAAc,EAAM,MAAMpgF,GAAG,OAAO,KAAQ,IAAI0ta,GAAG,CAAC,SAAS71K,EAAQ/3P,EAAOD,GAAS,IAAI8ta,EAAI,EAAE,SAAS1hZ,EAAI5qB,GAAK,MAAM,UAAU21D,YAAa6F,IAANx7D,EAAgB,GAAGA,EAAI,QAAQssa,EAAI15Z,KAAKkhF,UAAUxzE,SAAS,KAAKsK,EAAIi4Y,KAAKrsK,EAAQ,OAAOurG,EAAEviW,QAAQorB,EAAInsB,EAAOD,QAAQosB,GAAK,CAAC,MAAM,KAAK2hZ,GAAG,CAAC,SAAS/1K,EAAQ/3P,EAAOD,GAAS,IAAIgua,EAAYh2K,EAAQ,UAARA,CAAmB,eAAoBg2K,IAAc,IAAIh2K,EAAQ,OAAOx4L,KAAK5tD,MAAMjT,UAAUqva,EAAY,IAAI/ta,EAAOD,QAAQ,SAASwB,GAAK,GAAGwsa,GAAaxsa,IAAK,IAAO,CAAC,MAAM,GAAG,UAAU,KAAKysa,GAAG,CAAC,SAASj2K,EAAQ/3P,EAAOD,GAAS,IAAIi/Z,EAAOjnK,EAAQ,OAAOurG,EAAEjhW,EAAM01P,EAAQ,aAARA,CAAsB,OAAO/3P,EAAOD,QAAQ,SAASS,GAAM,OAAO6B,EAAM7B,KAAQ6B,EAAM7B,GAAMw+Z,EAAOj+Z,QAAQi+Z,EAAOj+Z,OAAOP,IAAOu3P,EAAQ,WAAWqsK,KAAK,UAAU5ja,MAAS,CAAC,MAAM,GAAG,aAAa,GAAG,UAAU,KAAKyta,GAAG,CAAC,SAASl2K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO+0K,EAAI/0K,EAAQ,kBAAkBisK,EAAIjsK,EAAQ,WAAW6tK,EAAK7tK,EAAQ,WAAW8yK,EAAO9yK,EAAQ,cAAcm2K,EAAYn2K,EAAQ,qBAAqBo2K,EAASp2K,EAAQ,WAAWqsK,KAAK,aAAajB,EAAOprK,EAAQ,cAAc2wK,EAAavF,EAAO3iZ,IAAI4tZ,EAAY3va,OAAOC,UAAUorQ,EAAKjwB,EAAEiwB,KAAK/gI,EAAE,GAAGslS,EAAOtlS,EAAE3mI,MAAMksa,EAAMvlS,EAAE3rH,KAAK6mZ,EAAQD,EAAIC,QAAQr9D,EAAI/sH,EAAE+sH,IAAIjmW,EAAek5O,EAAEyrL,QAAQiJ,EAAiB10L,EAAE+tL,QAAQ77G,EAAiBlyE,EAAEwwL,SAAS5G,EAAW5pL,EAAE4pL,WAAWruP,EAASykE,EAAEzkE,SAASgtP,EAASvoL,EAAEuoL,SAASC,EAASxoL,EAAEwoL,SAASC,EAAQzoL,EAAEyoL,QAAQkM,GAAe,EAAMC,EAAS12K,EAAQ,qBAARA,EAA8B,GAAO22K,EAASR,EAAY,GAAGS,EAAKT,EAAY,GAAGU,EAAQV,EAAY,GAAGW,EAAMX,EAAY,GAAGY,EAAOZ,EAAY,GAAG,IAAIr0L,EAAEgrL,KAAK,CAAC,IAAI2J,EAC7s+B,GAD4t+B7ta,EAAemsa,EAAI,OAAO,IAAI,CACxx+Bjsa,IAAI,WAAW,OAAO,KAAKsjB,EAAK,MAAMjkB,IAAI25O,EAAEyrL,QAAQ,SAASjH,EAAEwH,EAAEkJ,GAAY,GAAGP,EAAe,IAAI,OAAO7ta,EAAe09Z,EAAEwH,EAAEkJ,GAAY,MAAM7ua,IAAI,GAAG,QAAQ6ua,GAAY,QAAQA,EAAW,MAAMriH,UAAU,4BAAwF,MAAzD,UAAUqiH,IAAWrG,EAAarK,GAAGwH,GAAGkJ,EAAW9ta,OAAao9Z,GAAGxkL,EAAE+tL,QAAQ,SAASvJ,EAAEwH,GAAG,GAAG2I,EAAe,IAAI,OAAOD,EAAiBlQ,EAAEwH,GAAG,MAAM3la,IAAI,GAAG0mW,EAAIy3D,EAAEwH,GAAG,OAAOhsL,EAAEu8B,MAAMg4J,EAAYY,qBAAqBpwa,KAAKy/Z,EAAEwH,GAAGxH,EAAEwH,KAAKhsL,EAAEwwL,SAASt+G,EAAiB,SAASsyG,EAAE4Q,GAAYvG,EAAarK,GAA2D,IAAxD,IAAsDwH,EAAlDjrZ,EAAKi/N,EAAE8tL,QAAQsH,GAAYzwa,EAAOoc,EAAKpc,OAAOF,EAAE,EAAUE,EAAOF,GAAEu7O,EAAEyrL,QAAQjH,EAAEwH,EAAEjrZ,EAAKtc,KAAK2wa,EAAWpJ,IAAI,OAAOxH,GAAGuH,EAAKA,EAAK/B,EAAE+B,EAAKoB,GAAGntL,EAAEgrL,KAAK,SAAS,CAACuF,yBAAyBvwL,EAAE+tL,QAAQjna,eAAek5O,EAAEyrL,QAAQv5G,iBAAiBA,IAAmB,IAAImjH,EAAM,gGAAqGpna,MAAM,KAAKqna,EAAMD,EAAMh4W,OAAO,SAAS,aAAak4W,EAASF,EAAM1wa,OAAW6wa,EAAW,WAAW,IAA2CC,EAAvCh6T,EAAOw3T,EAAI,UAAUxua,EAAE8wa,EAAgS,IAAjQ95T,EAAOl3F,MAAMwxJ,QAAQ,OAAOk6F,EAAK59M,YAAYopD,GAAQA,EAAOxsG,IAAI,eAAcwma,EAAeh6T,EAAOi6T,cAAcpsa,UAAwB49F,OAAOuuU,EAAeE,MAAM,uCAAwCF,EAAevH,QAAQsH,EAAWC,EAAetI,EAAQ1oa,YAAW+wa,EAAW3wa,UAAUwwa,EAAM5wa,IAAI,OAAO+wa,KAAc,SAASI,EAAc9xT,EAAMn/G,GAAQ,OAAO,SAASkD,GAAQ,IAAqCH,EAAjC88Z,EAAE+D,EAAS1ga,GAAQpD,EAAE,EAAEe,EAAO,GAAO,IAAIkC,KAAO88Z,EAAK98Z,GAAK4sa,GAASvnE,EAAIy3D,EAAE98Z,IAAMlC,EAAOP,KAAKyC,GAAK,KAAM/C,EAAOF,GAAKsoW,EAAIy3D,EAAE98Z,EAAIo8G,EAAMr/G,SAAQmwa,EAASpva,EAAOkC,IAAMlC,EAAOP,KAAKyC,IAAK,OAAOlC,GAAQ,SAASqwa,KAAS9J,EAAKA,EAAK/B,EAAE,SAAS,CAACz2G,eAAevzE,EAAE0vL,SAAS1vL,EAAE0vL,UAAU,SAASlL,GAA2B,OAAxBA,EAAE5/Z,OAAO0ka,EAAOG,IAAIjF,IAAOz3D,EAAIy3D,EAAE8P,GAAiB9P,EAAE8P,GAAa1K,EAAWpF,EAAEnxU,cAAcmxU,aAAaA,EAAEnxU,YAAoBmxU,EAAEnxU,YAAYxuF,UAAiB2/Z,aAAa5/Z,OAAO2va,EAAY,MAAM/F,oBAAoBxuL,EAAEsuL,SAAStuL,EAAEsuL,UAAUsH,EAAcN,EAAMA,EAAM3wa,QAAa8C,OAAOu4O,EAAEv4O,OAAOu4O,EAAEv4O,QAAQ,SAAS+8Z,EAAE4Q,GAAY,IAAI5va,EAAsI,OAAxH,OAAJg/Z,GAAUqR,EAAMhxa,UAAUgqa,EAAarK,GAAGh/Z,EAAO,IAAIqwa,EAAMA,EAAMhxa,UAAU,KAAKW,EAAO8ua,GAAU9P,GAAOh/Z,EAAOgwa,SAAiCtyW,IAAbkyW,EAAuB5va,EAAO0sT,EAAiB1sT,EAAO4va,IAAar0Z,KAAKi/N,EAAE8tL,QAAQ9tL,EAAE8tL,SAAS8H,EAAcP,EAAME,GAAgBO,KAAK,SAAcnM,GAAI,OAAOA,GAAIoM,OAAO,SAAgBpM,GAAI,OAAOA,GAAIqM,kBAAkB,SAA2BrM,GAAI,OAAOA,GAAIsM,SAAS,SAAkBtM,GAAI,OAAOpuP,EAASouP,IAAKuM,SAAS,SAAkBvM,GAAI,OAAOpuP,EAASouP,IAAKe,aAAa,SAAsBf,GAAI,OAAOpuP,EAASouP,MAAOoC,EAAKA,EAAKC,EAAE,WAAW,CAACrka,KAAK,SAASuha,GAAM,IAAIQ,EAAGJ,EAAOI,GAAGx5Z,MAAMima,EAAS3B,EAAOzva,KAAK43Q,UAAU,GAAG,SAASy5J,IAAQ,IAAIhjH,EAAK+iH,EAAS94W,OAAOm3W,EAAOzva,KAAK43Q,YAAY05J,EAAOnma,gBAAgBkma,EAAMviX,EAAIwiX,EAAOr2L,EAAEv4O,OAAOiia,EAAG7ka,WAAWqka,EAAK1ja,EAAOwra,EAAOtH,EAAGt2G,EAAKv/P,GAAK,OAAOwiX,EAAOxiX,EAAIruD,EAAoD,OAA1Ckka,EAAG7ka,YAAUuxa,EAAMvxa,UAAU6ka,EAAG7ka,WAAiBuxa,KAAc,KAAKxxa,OAAO,MAAc,KAAR,IAAI,KAAUo7O,EAAEopL,UAAU,SAASO,GAAI,MAAgB,UAATQ,EAAIR,GAAcA,EAAG17Z,MAAM,IAAIrJ,OAAO+ka,KAAK,IAAI2M,GAAW,EAAK,IAAOrmK,GAAKukK,EAAOzva,KAAKkrQ,GAAMqmK,GAAW,EAAM,MAAMjwa,IAA6kB,SAASkwa,EAAkBC,GAAS,OAAO,SAASvN,EAAWwN,GAAMnN,EAAOI,GAAGT,GAAY,IAAIzE,EAAE+D,EAASr4Z,MAAMvL,EAAO6ja,EAAShE,EAAE7/Z,QAAQmZ,EAAM04Z,EAAQ7xa,EAAO,EAAE,EAAEF,EAAE+xa,GAAS,EAAE,EAAE,GAAG75J,UAAUh4Q,OAAO,EAAE,OAAO,CAAC,GAAGmZ,KAAS0mZ,EAAE,CAACiS,EAAKjS,EAAE1mZ,GAAOA,GAAOrZ,EAAE,MAAMqZ,GAAOrZ,EAAE6ka,EAAOkN,EAAQ14Z,GAAO,EAAEnZ,EAAOmZ,EAAM,+CAA+C,KAAK04Z,EAAQ14Z,GAAO,EAAEnZ,EAAOmZ,EAAMA,GAAOrZ,EAAKqZ,KAAS0mZ,IAAGiS,EAAKxN,EAAWwN,EAAKjS,EAAE1mZ,GAAOA,EAAM5N,OAAM,OAAOuma,GAA09B,SAASC,EAAG9vV,GAAK,OAAOA,EAAI,EAAEA,EAAI,IAAIA,EAA9gEmlV,EAAKA,EAAKC,EAAED,EAAKoB,EAAEmJ,EAAW,QAAQ,CAAC/ta,MAAM,SAAeoua,EAAM32Z,GAAK,IAAIijE,EAAIulV,EAASt4Z,KAAKvL,QAAQiya,EAAMzM,EAAIj6Z,MAAkC,GAA5B8P,OAAUkjD,IAANljD,EAAgBijE,EAAIjjE,EAAc,SAAP42Z,EAAe,OAAOpC,EAAOzva,KAAKmL,KAAKyma,EAAM32Z,GAAyG,IAApG,IAAIwqD,EAAMi+V,EAAQkO,EAAM1zV,GAAK4zV,EAAKpO,EAAQzoZ,EAAIijE,GAAKzvE,EAAKg1Z,EAASqO,EAAKrsW,GAAOssW,EAAOh/Z,MAAMtE,GAAM/O,EAAE,EAAOA,EAAE+O,EAAK/O,IAAIqya,EAAOrya,GAAU,UAAPmya,EAAgB1ma,KAAKiT,OAAOqnD,EAAM/lE,GAAGyL,KAAKs6D,EAAM/lE,GAAG,OAAOqya,KAAU/K,EAAKA,EAAKC,EAAED,EAAKoB,GAAGntL,EAAEopL,WAAWxka,QAAQ,QAAQ,CAAC2e,KAAK,WAAgB,OAAOkxZ,EAAMnva,MAAM06O,EAAEopL,UAAUl5Z,MAAMysQ,cAAcovJ,EAAKA,EAAK/B,EAAE,QAAQ,CAACjyZ,QAAQ,SAASg/Z,GAAK,MAAiB,SAAV5M,EAAI4M,MAA4dhL,EAAKA,EAAKC,EAAE,QAAQ,CAAC19Z,QAAQ0xO,EAAElkE,KAAKkkE,EAAElkE,MAAM,SAAiBmtP,GAAY,OAAO4L,EAAS3ka,KAAK+4Z,EAAWtsJ,UAAU,KAAK3kQ,IAAI,SAAaixZ,GAAY,OAAO6L,EAAK5ka,KAAK+4Z,EAAWtsJ,UAAU,KAAKzlQ,OAAO,SAAgB+xZ,GAAY,OAAO8L,EAAQ7ka,KAAK+4Z,EAAWtsJ,UAAU,KAAKxsQ,KAAK,SAAc84Z,GAAY,OAAO+L,EAAM9ka,KAAK+4Z,EAAWtsJ,UAAU,KAAK5uQ,MAAM,SAAek7Z,GAAY,OAAOgM,EAAO/ka,KAAK+4Z,EAAWtsJ,UAAU,KAAKnrQ,OAAO+ka,GAAkB,GAAOS,YAAYT,GAAkB,GAAMrsa,QAAQ,SAAiBkyP,GAAI,OAAOw4K,EAAS1ka,KAAKksP,EAAGugB,UAAU,KAAKvtQ,YAAY,SAASgtP,EAAGioK,GAAW,IAAIG,EAAE+D,EAASr4Z,MAAMvL,EAAO6ja,EAAShE,EAAE7/Z,QAAQmZ,EAAMnZ,EAAO,EAA6G,IAAxGg4Q,UAAUh4Q,OAAO,IAAEmZ,EAAMxD,KAAKwwH,IAAIhtH,EAAMkiO,EAAEmwL,UAAU9L,KAAevmZ,EAAM,IAAEA,EAAM0qZ,EAAS7ja,EAAOmZ,IAAYA,GAAO,EAAEA,IAAQ,GAAGA,KAAS0mZ,GAAKA,EAAE1mZ,KAASs+O,EAAG,OAAOt+O,EAAM,OAAO,KAAKiuZ,EAAKA,EAAKC,EAAE,SAAS,CAAC3+Y,KAAK6wO,EAAQ,eAARA,CAAwB,uBAAuB,QAAQ6tK,EAAKA,EAAK/B,EAAE,OAAO,CAACtqI,IAAI,WAAW,OAAO,IAAIhtQ,QAAkD,IAAIwlN,EAAK,IAAIxlN,MAAK,gBAASukZ,IAAa/+L,EAAKg/L,aAAiC,4BAApBh/L,EAAKg/L,eAA2Ch5K,EAAQ,aAARA,EAAsB,WAAW,IAAIxrO,KAAKi/T,KAAKulF,kBAAiBnL,EAAKA,EAAKC,EAAED,EAAKoB,EAAE8J,EAAW,OAAO,CAACC,YAAY,WAAW,IAAIC,SAASjna,MAAM,MAAMwia,WAAW,sBAAsB,IAAIhsa,EAAEwJ,KAAKqa,EAAE7jB,EAAE0wa,iBAAiB5wa,EAAEE,EAAE2wa,qBAAqBtxa,EAAEwkB,EAAE,EAAE,IAAIA,EAAE,KAAK,IAAI,GAAG,OAAOxkB,GAAG,QAAQuU,KAAK4pE,IAAI35D,IAAIhiB,MAAMxC,GAAG,GAAG,GAAG,IAAI2wa,EAAGhwa,EAAE4wa,cAAc,GAAG,IAAIZ,EAAGhwa,EAAE6wa,cAAc,IAAIb,EAAGhwa,EAAE8wa,eAAe,IAAId,EAAGhwa,EAAE+wa,iBAAiB,IAAIf,EAAGhwa,EAAEgxa,iBAAiB,KAAKlxa,EAAE,GAAGA,EAAE,IAAIkwa,EAAGlwa,IAAI,OAAmD,UAAzC4ja,EAAQ,WAAW,OAAOztJ,UAAlB,MAA0CwtJ,EAAIC,QAAQ,SAAST,GAAI,IAAItpP,EAAI+pP,EAAQT,GAAI,MAAY,UAALtpP,GAAeupP,EAAWD,EAAGgO,QAAQ,YAAYt3P,KAAM,CAAC,MAAM,GAAG,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,GAAG,iBAAiB,GAAG,aAAa,GAAG,eAAe,GAAG,aAAa,GAAG,UAAU,KAAKu3P,GAAG,CAAC,SAAS15K,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAWuqK,EAAQzoL,EAAEyoL,QAAQsD,EAAKA,EAAKC,EAAE,QAAQ,CAAC6L,WAAW,SAAoBjxZ,EAAO4jD,GAAO,IAAIg6V,EAAE5/Z,OAAOo7O,EAAEmpL,cAAcj5Z,OAAO+yE,EAAI+8J,EAAEwoL,SAAShE,EAAE7/Z,QAAQ8jE,EAAGggW,EAAQ7hZ,EAAOq8D,GAAKthB,EAAK8mW,EAAQj+V,EAAMyY,GAAKjjE,EAAI28P,UAAU,GAAGm7J,OAAU50W,IAANljD,EAAgBijE,EAAIwlV,EAAQzoZ,EAAIijE,GAAK82F,EAAMz/J,KAAKwwH,IAAIgtS,EAAIn2W,EAAKshB,EAAIxa,GAAIgrN,EAAI,EAAoE,IAA/D9xN,EAAK8G,GAAIA,EAAG9G,EAAKo4G,IAAO05G,GAAK,EAAE9xN,EAAKA,EAAKo4G,EAAM,EAAEtxG,EAAGA,EAAGsxG,EAAM,GAAQA,KAAQ,GAAMp4G,KAAQ6iW,EAAEA,EAAE/7V,GAAI+7V,EAAE7iW,UAAkB6iW,EAAE/7V,GAAIA,GAAIgrN,EAAI9xN,GAAM8xN,EAAI,OAAO+wI,KAAKtmK,EAAQ,cAARA,CAAuB,eAAe,CAAC,MAAM,GAAG,UAAU,GAAG,cAAc,KAAK65K,GAAG,CAAC,SAAS75K,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAWuqK,EAAQzoL,EAAEyoL,QAAQsD,EAAKA,EAAKC,EAAE,QAAQ,CAACr7R,KAAK,SAAcvpI,GAA6K,IAAtK,IAAIo9Z,EAAE5/Z,OAAOo7O,EAAEmpL,cAAcj5Z,OAAOvL,EAAOq7O,EAAEwoL,SAAShE,EAAE7/Z,QAAQmZ,EAAM2qZ,EAAQ9rJ,UAAU,GAAGh4Q,GAAQqb,EAAI28P,UAAU,GAAGq7J,OAAa90W,IAANljD,EAAgBrb,EAAO8ja,EAAQzoZ,EAAIrb,GAAcqza,EAAOl6Z,GAAM0mZ,EAAE1mZ,KAAS1W,EAAM,OAAOo9Z,KAAKtmK,EAAQ,cAARA,CAAuB,SAAS,CAAC,MAAM,GAAG,UAAU,GAAG,cAAc,KAAK+5K,GAAG,CAAC,SAAS/5K,EAAQ/3P,EAAOD,GAAsB,IAAI4ma,EAAI,YAAYf,EAAK7tK,EAAQ,WAAWg6K,GAAO,EAAKC,EAAMj6K,EAAQ,oBAARA,CAA6B,GAAM4uK,IAAM,IAAGh1Z,MAAM,GAAGg1Z,IAAK,WAAWoL,GAAO,KAAQnM,EAAKA,EAAKC,EAAED,EAAKoB,EAAE+K,EAAO,QAAQ,CAACrrZ,UAAU,SAAmBo8Y,GAAY,OAAOkP,EAAMjoa,KAAK+4Z,EAAWtsJ,UAAU,OAAOze,EAAQ,cAARA,CAAuB4uK,IAAM,CAAC,oBAAoB,EAAE,UAAU,GAAG,cAAc,KAAKsL,GAAG,CAAC,SAASl6K,EAAQ/3P,EAAOD,GAAsB,IAAe6la,EAAK7tK,EAAQ,WAAWg6K,GAAO,EAAKC,EAAMj6K,EAAQ,oBAARA,CAA6B,GAA9E,QAA0F,IAAGpmP,MAAM,GAAN,MAAc,WAAWoga,GAAO,KAAQnM,EAAKA,EAAKC,EAAED,EAAKoB,EAAE+K,EAAO,QAAQ,CAACl8Z,KAAK,SAAcitZ,GAAY,OAAOkP,EAAMjoa,KAAK+4Z,EAAWtsJ,UAAU,OAAOze,EAAQ,cAARA,CAArP,SAAkR,CAAC,oBAAoB,EAAE,UAAU,GAAG,cAAc,KAAKm6K,GAAG,CAAC,SAASn6K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOrqM,EAAIqqM,EAAQ,WAAW6tK,EAAK7tK,EAAQ,WAAW6wK,EAAM7wK,EAAQ,YAAYn5P,EAAKm5P,EAAQ,iBAAiB6tK,EAAKA,EAAK/B,EAAE+B,EAAKoB,GAAGjvK,EAAQ,kBAARA,EAA2B,SAAS2tK,GAAM/zZ,MAAM6pD,KAAKkqW,MAAQ,QAAQ,CAAClqW,KAAK,SAAc22W,GAAW,IAA4I3za,EAAOa,EAAOitH,EAAK0/N,EAA3JqyE,EAAE5/Z,OAAOo7O,EAAEmpL,cAAcmP,IAAYC,EAAM57J,UAAU,GAAG67J,OAAgBt1W,IAARq1W,EAAkB3va,EAAE4va,EAAQ3kX,EAAI0kX,EAAM57J,UAAU,GAAG,QAAGz5M,EAAUplD,EAAM,EAA8B,GAAGixZ,EAAMn8I,GAAG4xI,GAAyE,IAArEryE,EAAS48E,EAAM/na,IAAIw9Z,GAAGh/Z,EAAO,IAAiB,mBAAN0K,KAAiBA,KAAK4H,SAAc26G,EAAK0/N,EAAShgL,QAAQ2hH,KAAKh2Q,IAAStY,EAAOsY,GAAO06Z,EAAQzza,EAAKotV,EAASvpV,EAAE,CAAC6pH,EAAKrrH,MAAM0W,IAAO,GAAM20G,EAAKrrH,WAAwF,IAA5E5B,EAAO,IAAiB,mBAAN0K,KAAiBA,KAAK4H,OAAOnT,EAAOq7O,EAAEwoL,SAAShE,EAAE7/Z,SAAcA,EAAOmZ,EAAMA,IAAStY,EAAOsY,GAAO06Z,EAAQ5va,EAAE47Z,EAAE1mZ,GAAOA,GAAO0mZ,EAAE1mZ,GAA4B,OAApBtY,EAAOb,OAAOmZ,EAAatY,MAAW,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,KAAKiza,GAAG,CAAC,SAASv6K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOw6K,EAAWx6K,EAAQ,eAAe4sK,EAAK5sK,EAAQ,WAAWqsK,KAAK,QAAQwE,EAAM7wK,EAAQ,YAAYzrI,EAAKs8S,EAAMt8S,KAAKw8S,EAAUF,EAAME,UAAU/wK,EAAQ,kBAARA,CAA2BpmP,MAAM,SAAQ,SAAS6zZ,EAASC,GAAM5rL,EAAEp4N,IAAI1X,KAAK46Z,EAAK,CAACjka,EAAEm5O,EAAEuoL,SAASoD,GAAUlna,EAAE,EAAEggF,EAAEmnV,OAAQ,WAAW,IAAIC,EAAK37Z,KAAK46Z,GAAMtG,EAAEqH,EAAKhla,EAAE+ka,EAAKC,EAAKpnV,EAAE3mE,EAAM+tZ,EAAKpna,IAAI,OAAI+/Z,GAAG1mZ,GAAO0mZ,EAAE7/Z,QAAQkna,EAAKhla,OAAEq8D,EAAiBuvD,EAAK,IAA0BA,EAAK,EAAnB,QAANm5S,EAA2B9tZ,EAAgB,UAAN8tZ,EAA6BpH,EAAE1mZ,GAAsB,CAACA,EAAM0mZ,EAAE1mZ,OAAU,UAAUmxZ,EAAU0J,UAAU1J,EAAUn3Z,MAAM4ga,EAAW,QAAQA,EAAW,UAAUA,EAAW,YAAY,CAAC,MAAM,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,GAAG,cAAc,KAAKE,GAAG,CAAC,SAAS16K,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAK/B,EAAE,QAAQ,CAAC6O,GAAG,WAAyG,IAA3F,IAAI/6Z,EAAM,EAAEnZ,EAAOg4Q,UAAUh4Q,OAAOa,EAAO,IAAiB,mBAAN0K,KAAiBA,KAAK4H,OAAOnT,GAAcA,EAAOmZ,GAAMtY,EAAOsY,GAAO6+P,UAAU7+P,KAA8B,OAArBtY,EAAOb,OAAOA,EAAca,MAAW,CAAC,UAAU,KAAKsza,GAAG,CAAC,SAAS56K,EAAQ/3P,EAAOD,GAASg4P,EAAQ,cAARA,CAAuBpmP,QAAQ,CAAC,cAAc,KAAKiha,GAAG,CAAC,SAAS76K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO86K,EAAa96K,EAAQ,UAARA,CAAmB,eAAe+6K,EAAcv3Z,SAAS7c,UAAem0a,KAAgBC,GAAej5L,EAAEyrL,QAAQwN,EAAcD,EAAa,CAAC5xa,MAAM,SAASo9Z,GAAG,IAAIxkL,EAAE4pL,WAAW15Z,QAAQ8vO,EAAEzkE,SAASipP,GAAG,OAAO,EAAM,IAAIxkL,EAAEzkE,SAASrrK,KAAKrL,WAAW,OAAO2/Z,aAAat0Z,KAAK,KAAMs0Z,EAAExkL,EAAE0vL,SAASlL,IAAG,GAAGt0Z,KAAKrL,YAAY2/Z,EAAE,OAAO,EAAK,OAAO,MAAU,CAAC,MAAM,GAAG,UAAU,KAAK0U,GAAG,CAAC,SAASh7K,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAmButK,EAAQzrL,EAAEyrL,QAAQwN,EAAcv3Z,SAAS7c,UAAhD,SAAkEo0a,GAAej5L,EAAEouL,IAAIpuL,EAAEgrL,MAAMS,EAAQwN,EAAvG,OAA0H,CAACp8J,cAAa,EAAK71Q,IAAI,WAAW,IAAI0N,EAAMqyE,OAAO72E,MAAMwE,MAAM,yBAAyB/N,EAAK+N,EAAMA,EAAM,GAAG,GAAuD,OAApDsrO,EAAE+sH,IAAI78V,KAA/O,SAA2Pu7Z,EAAQv7Z,KAAnQ,OAA6Q8vO,EAAEu8B,KAAK,EAAE51Q,IAAcA,GAAMihB,IAAI,SAASxgB,GAAO44O,EAAE+sH,IAAI78V,KAApU,SAAgVu7Z,EAAQv7Z,KAAxV,OAAkW8vO,EAAEu8B,KAAK,EAAEn1Q,QAAY,CAAC,MAAM,KAAK+xa,GAAG,CAAC,SAASj7K,EAAQ/3P,EAAOD,GAAsB,IAAIkza,EAAOl7K,EAAQ,yBAAyBA,EAAQ,iBAARA,CAA0B,OAAM,SAASl3P,GAAK,OAAO,WAAe,OAAOA,EAAIkJ,KAAKysQ,UAAU,OAAM,CAAC31Q,IAAI,SAAaU,GAAK,IAAIyja,EAAMiO,EAAOlO,SAASh7Z,KAAKxI,GAAK,OAAOyja,GAAOA,EAAMz0I,GAAG9uQ,IAAI,SAAalgB,EAAIN,GAAO,OAAOgya,EAAO3P,IAAIv5Z,KAAW,IAANxI,EAAQ,EAAEA,EAAIN,KAASgya,GAAO,IAAO,CAAC,iBAAiB,GAAG,wBAAwB,KAAKC,GAAG,CAAC,SAASn7K,EAAQ/3P,EAAOD,GAAS,IAAiB6la,EAAK7tK,EAAQ,WAAWo7K,EAAEh/Z,KAAKg/Z,EAAEt3V,EAAI1nE,KAAK0nE,IAAIkC,EAAI5pE,KAAK4pE,IAAI+/U,EAAI3pZ,KAAK2pZ,IAAIn6Z,EAAIwQ,KAAKxQ,IAAIi4E,EAAKznE,KAAKynE,KAAKv/D,EAAKlI,KAAKkI,KAAKkmE,EAAMpuE,KAAKouE,MAAM6wV,EAAQv3V,EAAI,GAAG,IAAIw3V,EAAUx3V,EAAI,GAAG,IAAIy3V,EAAMz3V,EAAI,EAAE,MAAM,EAAEw3V,GAAWE,EAAM13V,EAAI,GAAG,KAA8D,SAAS23V,EAAKrvZ,GAAG,OAAc,IAAPA,GAAGA,IAAOA,GAAGA,EAAEA,EAAEA,EAAE,GAAG,EAAE,EAAoF,SAASsvZ,EAAMtvZ,GAAG,OAAc,IAAPA,GAAGA,GAAMA,EAAEA,GAAG,MAAMA,EAAE,KAAKA,EAAEA,EAAEA,EAAE,EAAE25Y,EAAI35Y,GAAG,EAAEyhZ,EAAKA,EAAK/B,EAAE,OAAO,CAAC6P,MAAM,SAAevvZ,GAAG,OAAOA,GAAGA,GAAG,EAAEqnU,IAAIwlF,SAAS7sZ,GAAGxgB,EAAIwgB,EAAEgvZ,EAAEv3V,EAAKz3D,EAAE,GAAGy3D,EAAKz3D,EAAE,GAAGgvZ,GAAG,EAAEhvZ,GAAGwvZ,MAAtQ,SAASA,EAAMxvZ,GAAG,OAAO6sZ,SAAS7sZ,GAAGA,IAAO,GAAHA,EAAOA,EAAE,GAAGwvZ,GAAOxvZ,GAAGxgB,EAAIwgB,EAAEy3D,EAAKz3D,EAAEA,EAAE,IAAhCA,GAAoOyvZ,MAAM,SAAezvZ,GAAG,OAAc,IAAPA,GAAGA,GAAMA,EAAExgB,GAAK,EAAEwgB,IAAI,EAAEA,IAAI,GAAG0vZ,KAAK,SAAc1vZ,GAAG,OAAOqvZ,EAAKrvZ,GAAGA,GAAG03D,EAAIkC,EAAI55D,GAAG,EAAE,IAAI2vZ,MAAM,SAAe3vZ,GAAG,OAAOA,KAAK,GAAG,GAAGo+D,EAAM5+E,EAAIwgB,EAAE,IAAIhQ,KAAK4/Z,OAAO,IAAIC,KAAK,SAAc7vZ,GAAG,OAAO25Y,EAAI35Y,GAAGA,GAAG25Y,GAAK35Y,IAAI,GAAGsvZ,MAAMA,EAAMQ,OAAO,SAAgB9vZ,GAAG,IAA8BzR,EAAErT,EAA5B60a,EAAKn2V,EAAI55D,GAAGgwZ,EAAMX,EAAKrvZ,GAAY,OAAG+vZ,EAAKX,EAAaY,GAAsBD,EAAKX,EAAMF,EAA/sB,EAAED,EAAQ,EAAEA,GAA8sBG,EAAMF,GAAuCh0a,GAA7BqT,GAAG,EAAE2ga,EAAUD,GAASc,IAAexha,EAAEwha,IAAgBZ,GAAOj0a,GAAQA,EAAc80a,GAAtkC,KAA4lCA,EAAM90a,GAAQ+0a,MAAM,SAAeC,EAAOC,GAA0D,IAAlD,IAA0C1D,EAAI5kX,EAA1CokI,EAAI,EAAE9xL,EAAE,EAAEw+E,EAAI05L,UAAUh4Q,OAAO+1a,EAAK,EAAgBj2a,EAAEw+E,GAAgCy3V,GAA3B3D,EAAI7yV,EAAIy4L,UAAUl4Q,QAAgC8xL,EAAIA,GAAjBpkI,EAAIuoX,EAAK3D,GAAgB5kX,EAAI,EAAEuoX,EAAK3D,GAAgCxgP,GAApBwgP,EAAI,GAAG5kX,EAAI4kX,EAAI2D,GAAcvoX,EAAc4kX,EAAI,OAAO2D,IAAx1C,QAAi3CA,EAAK34V,EAAKw0G,IAAMokP,KAAK,SAAcrwZ,EAAEC,GAAG,IAAiBqwZ,GAAItwZ,EAAEuwZ,GAAItwZ,EAAEuwZ,EAAlB,MAA4BF,EAAGG,EAA/B,MAAyCF,EAAG,OAAO,EAAEC,EAAGC,IAAxD,MAAoEH,IAAK,IAAIG,EAAGD,GAAhF,MAA2FD,IAAK,KAAK,KAAK,IAAIG,MAAM,SAAe1wZ,GAAG,OAAOA,GAAGA,IAAI,MAAMA,EAAE,KAAKA,EAAEA,EAAEA,EAAE,EAAExgB,EAAI,EAAEwgB,IAAI2wZ,MAAM,SAAe3wZ,GAAG,OAAOxgB,EAAIwgB,GAAGhQ,KAAK4ga,MAAMC,KAAK,SAAc7wZ,GAAG,OAAOxgB,EAAIwgB,GAAGhQ,KAAK8ga,KAAKzB,KAAKA,EAAK0B,KAAK,SAAc/wZ,GAAG,OAAO45D,EAAI55D,GAAGA,GAAG,GAAGsvZ,EAAMtvZ,GAAGsvZ,GAAOtvZ,IAAI,GAAG25Y,EAAI35Y,EAAE,GAAG25Y,GAAK35Y,EAAE,KAAKgvZ,EAAE,IAAIgC,KAAK,SAAchxZ,GAAG,IAAIzR,EAAE+ga,EAAMtvZ,GAAGA,GAAGxR,EAAE8ga,GAAOtvZ,GAAG,OAAOzR,GAAv1D,IAAm2D,EAAEC,GAAr2D,KAAk3D,GAAGD,EAAEC,IAAImrZ,EAAI35Y,GAAG25Y,GAAK35Y,KAAKvH,MAAM,SAAe4mZ,GAAI,OAAOA,EAAG,EAAEjhV,EAAMlmE,GAAMmnZ,OAAQ,CAAC,UAAU,KAAK4R,GAAG,CAAC,SAASr9K,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAO3iF,EAASykE,EAAEzkE,SAASquP,EAAW5pL,EAAE4pL,WAA2B4R,EAAQx7L,EAAEypH,EAAF,OAAYj1F,EAAKgnK,EAAQ5O,EAAM4O,EAAQ32a,UAAyO,SAAS42a,EAAS9R,GAAuC,GAAhCpuP,EAASouP,KAAIA,EAArQ,SAAqBA,GAAI,IAAID,EAAG/sU,EAAI,GAAGitU,EAAWF,EAAGC,EAAG+R,WAAWngQ,EAAS5+E,EAAI+sU,EAAG3ka,KAAK4ka,IAAK,OAAOhtU,EAAI,GAAGitU,EAAWF,EAAGC,EAAG3hZ,YAAYuzJ,EAAS5+E,EAAI+sU,EAAG3ka,KAAK4ka,IAAK,OAAOhtU,EAAI,MAAMk2N,UAAU,kCAA2E8oH,CAAYhS,IAAkB,iBAAJA,GAAcA,EAAGhla,OAAO,GAAqB,IAAlBgla,EAAGziV,WAAW,GAAO,CAAC,IAAI00V,GAAO,EAAM,OAAOjS,EAAGziV,WAAW,IAAI,KAAK,GAAG,KAAK,GAAG00V,GAAO,EAAK,KAAK,GAAG,KAAK,IAAI,OAAO9ra,SAAS65Z,EAAGpha,MAAM,GAAGqza,EAAO,EAAE,IAAI,OAAOjS,GAAM3pL,EAAEouL,IAAMoN,EAAQ,QAAQA,EAAQ,SAASA,EAAQ,SAAgB7R,GAAI,OAAOz5Z,gBAAgBsra,EAAQ,IAAIhnK,EAAKinK,EAAS9R,IAAK8R,EAAS9R,IAAK3pL,EAAElkE,KAAK/2K,KAAKi7O,EAAEgrL,KAAKhrL,EAAEsuL,SAAS95J,GAAM,6KAAqLvmQ,MAAM,MAAK,SAASvG,GAAQs4O,EAAE+sH,IAAIv4F,EAAK9sQ,KAAOs4O,EAAE+sH,IAAIyuE,EAAQ9za,IAAMs4O,EAAEyrL,QAAQ+P,EAAQ9za,EAAIs4O,EAAE+tL,QAAQv5J,EAAK9sQ,OAAS8za,EAAQ32a,UAAU+na,EAAMA,EAAMv5U,YAAYmoV,EAAQt9K,EAAQ,YAARA,CAAqBle,EAAEypH,EAA7jC,SAAskC+xE,KAAW,CAAC,MAAM,GAAG,YAAY,KAAKK,GAAG,CAAC,SAAS39K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAWh6K,EAAI5pE,KAAK4pE,IAAIwE,EAAMpuE,KAAKouE,MAAMozV,EAAU97L,EAAEypH,EAAE0tE,SAA2C,SAAS1+Z,EAAUkxZ,GAAI,OAAO3pL,EAAEzkE,SAASouP,IAAKmS,EAAUnS,IAAKjhV,EAAMihV,KAAMA,EAAGoC,EAAKA,EAAK/B,EAAE,SAAS,CAACuP,QAAQj/Z,KAAK0nE,IAAI,GAAG,IAAIm1V,SAAS,SAAkBxN,GAAI,MAAkB,iBAAJA,GAAcmS,EAAUnS,IAAKlxZ,UAAUA,EAAUmJ,MAAM,SAAeknG,GAAQ,OAAOA,GAAQA,GAAQizT,cAAc,SAAuBjzT,GAAQ,OAAOrwG,EAAUqwG,IAAS5kC,EAAI4kC,IAAxW,kBAAmYkzT,iBAAnY,iBAAqaC,kBAAra,iBAAwc/ia,WAAWA,WAAWpJ,SAASA,YAAY,CAAC,MAAM,GAAG,UAAU,KAAKosa,GAAG,CAAC,SAASh+K,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAK/B,EAAE,SAAS,CAACruY,OAAOuiO,EAAQ,iBAAiB,CAAC,aAAa,EAAE,UAAU,KAAKi+K,GAAG,CAAC,SAASj+K,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAK/B,EAAE,SAAS,CAACp3I,GAAG10B,EAAQ,eAAe,CAAC,UAAU,GAAG,WAAW,KAAKk+K,GAAG,CAAC,SAASl+K,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAK/B,EAAE,SAAS,CAACh2G,eAAe91D,EAAQ,iBAAiBt2O,OAAO,CAAC,UAAU,GAAG,gBAAgB,KAAKy0Z,GAAG,CAAC,SAASn+K,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAW3iF,EAASykE,EAAEzkE,SAASgtP,EAASvoL,EAAEuoL,SAASvoL,EAAElkE,KAAK/2K,KAAK,gIAAqIkJ,MAAM,MAAK,SAAS6+Z,EAAIvwH,GAAI,IAAImtH,GAAI1pL,EAAEotL,KAAKxoa,QAAQ,IAAIkoa,IAAMloa,OAAOkoa,GAAKoL,EAAO,EAAEp6H,EAAO,GAAGA,EAAOgvH,GAAS,GAAJvwH,GAA6D,GAAJA,GAA2D,GAAJA,EAA1G,SAAgBotH,GAAI,OAAOpuP,EAASouP,GAAID,EAAGC,GAAIA,GAAmI,GAAJptH,GAAiE,GAAJA,EAAvD,SAAkBotH,GAAI,OAAOpuP,EAASouP,IAAID,EAAGC,IAA2E,GAAJptH,EAAM,SAAsBotH,GAAI,QAAOpuP,EAASouP,IAAID,EAAGC,IAAe,GAAJptH,EAAM,SAAkCotH,EAAGjia,GAAK,OAAOgia,EAAGnB,EAASoB,GAAIjia,IAAU,GAAJ60S,EAAM,SAAwBotH,GAAI,OAAOD,EAAG9ka,OAAOo7O,EAAEmpL,cAAcQ,MAAW,GAAJptH,EAAM,SAAcotH,GAAI,OAAOD,EAAGnB,EAASoB,KAAMzrK,EAAQ,iBAAiBl3P,IAAI,IAAI0ia,EAAG,KAAK,MAAMrja,GAAG6xa,EAAO,EAAEnM,EAAKA,EAAK/B,EAAE+B,EAAKoB,EAAE+K,EAAO,SAASp6H,OAAW,CAAC,MAAM,GAAG,UAAU,GAAG,gBAAgB,KAAKw+H,GAAG,CAAC,SAASp+K,EAAQ/3P,EAAOD,GAAsB,IAAIika,EAAIjsK,EAAQ,WAAW7/J,EAAI,GAAGA,EAAI6/J,EAAQ,UAARA,CAAmB,gBAAgB,IAAOA,EAAQ,OAAOkwK,IAAc,KAAVjE,EAAI9rU,IAAW6/J,EAAQ,YAARA,CAAqBt5P,OAAOC,UAAU,YAAW,WAAoB,MAAM,WAAWsla,EAAIC,QAAQl6Z,MAAM,OAAK,IAAQ,CAAC,MAAM,GAAG,UAAU,EAAE,YAAY,GAAG,UAAU,KAAKqsa,GAAG,CAAC,SAASr+K,EAAQ/3P,EAAOD,GAAsB,IAA2jBs2a,EAAvjBx8L,EAAEke,EAAQ,OAAOrqM,EAAIqqM,EAAQ,WAAWisK,EAAIjsK,EAAQ,WAAW6tK,EAAK7tK,EAAQ,WAAWorK,EAAOprK,EAAQ,cAAcssK,EAAMtsK,EAAQ,cAAcu+K,EAASv+K,EAAQ,iBAAiBt2O,IAAI80Z,EAAKx+K,EAAQ,YAAYsuK,EAAQtuK,EAAQ,eAAei0K,EAAQj0K,EAAQ,UAARA,CAAmB,WAAWy+K,EAAOz+K,EAAQ,WAAWqsK,KAAK,UAA4BpF,EAAOnlL,EAAEypH,EAAE+7D,EAAQL,EAAOK,QAAQoX,EAAqB,WAAdzS,EAAI3E,GAAoBqX,EAAKrX,GAASA,EAAQiC,UAAUvpK,EAAQ,YAAYt2O,IAAIokZ,EAAE7G,EAAA,QAAgByE,EAAW5pL,EAAE4pL,WAAWruP,EAASykE,EAAEzkE,SAAS+xP,EAAehE,EAAOI,GAAGmF,EAAavF,EAAO3iZ,IAAY,SAASm2Z,EAAYC,GAAK,IAAItva,EAAK,IAAIu+Z,GAAE,eAA6C,OAA5B+Q,IAAItva,EAAK4lF,YAAYzuF,QAAcona,EAAEzla,QAAQkH,KAAQA,EAAK,IAAIuva,EAAU,WAAW,IAAIC,GAAM,EAAM,SAASC,EAAG5yZ,GAAG,IAAInV,EAAK,IAAI62Z,EAAE1hZ,GAA+B,OAA5BmyZ,EAAStna,EAAK+na,EAAGr4a,WAAkBsQ,EAAK,IAA0M,GAAtM8na,EAAMrT,EAAWoC,IAAIpC,EAAWoC,EAAEzla,UAAUu2a,IAAcL,EAASS,EAAGlR,GAAGkR,EAAGr4a,UAAUm7O,EAAEv4O,OAAOuka,EAAEnna,UAAU,CAACwuF,YAAY,CAACjsF,MAAM81a,KAAWA,EAAG32a,QAAQ,GAAGw7B,MAAK,yBAAwBm7Y,IAAKD,GAAM,GAASA,GAAOj9L,EAAEgrL,KAAK,CAAC,IAAImS,GAAmB,EAAMnR,EAAEzla,QAAQy5O,EAAEyrL,QAAQ,GAAG,OAAO,CAACzka,IAAI,WAAWm2a,GAAmB,MAASF,EAAME,GAAoB,MAAM92a,GAAG42a,GAAM,EAAM,OAAOA,EAA7d,GAA8pB,SAAS7R,EAAe1nV,GAAG,IAAIsmV,EAAE6E,EAAanrV,GAAGyuV,GAAS,OAAUjvW,MAAH8mW,EAAaA,EAAEtmV,EAAE,SAAS05V,EAAWzT,GAAI,IAAI5nY,EAAkC,OAA1Bw5I,EAASouP,KAAI5nY,EAAK4nY,EAAG5nY,QAAY6nY,EAAW7nY,IAAMA,EAAW,SAASs7Y,EAAOjjT,GAAQ,IAAI4yS,EAAM5yS,EAAO3zH,EAAKuma,EAAMroa,QAAOk4a,EAAK93a,KAAKoga,GAAO,WAAW,IAAI/9Z,EAAMgzH,EAAOs8J,EAAEgnB,EAAa,GAAVtjL,EAAOr0H,EAAKtB,EAAE,EAAE,SAAS+ua,EAAI8J,GAAO,IAA8Bp/Z,EAAI6jB,EAA9Bq6D,EAAGshN,EAAG4/H,EAAM5/H,GAAG4/H,EAAMC,KAAc,IAAOnhV,GAAQshN,IAAGtjL,EAAOunC,GAAE,IAAKzjJ,GAAS,IAALk+E,EAAUh1F,EAAMg1F,EAAGh1F,MAAgBk2a,EAAMtR,EAAGsR,EAAME,IAAI3qH,UAAU,yBAAgC9wR,EAAKq7Y,EAAWl/Z,IAAM6jB,EAAKh9B,KAAKmZ,EAAIo/Z,EAAMp8V,IAAIo8V,EAAME,KAAUF,EAAMp8V,IAAIhjE,IAAUo/Z,EAAME,IAAIp2a,GAAO,MAAMa,GAAKq1a,EAAME,IAAIv1a,IAAM,KAAM+ka,EAAMroa,OAAOF,GAAE+ua,EAAIxG,EAAMvoa,MAAMuoa,EAAMroa,OAAO,KAA8N,SAAS84a,EAAQr2a,GAAO,IAAgBs2a,EAAZtjT,EAAOlqH,KAAgBkqH,EAAO1zH,IAAS0zH,EAAO1zH,GAAE,GAAK0zH,EAAOA,EAAOnzH,GAAGmzH,GAAcs8J,EAAEtvR,EAAMgzH,EAAOr0H,EAAE,EAAEq0H,EAAOvhH,EAAEuhH,EAAO3zH,EAAE8B,QAAQq2F,YAAW,WAAWi+U,EAAK93a,KAAKoga,GAAO,YAA9Z,SAASwY,EAAYD,GAAS,IAAwDJ,EAApDljT,EAAOsjT,EAAQf,GAAQ3P,EAAM5yS,EAAOvhH,GAAGuhH,EAAO3zH,EAAEhC,EAAE,EAAQ,GAAG21H,EAAOunC,EAAE,OAAO,EAAM,KAAMqrQ,EAAMroa,OAAOF,GAAoB,IAAjB64a,EAAMtQ,EAAMvoa,MAAc84a,OAAOI,EAAYL,EAAMtR,GAAG,OAAO,EAAM,OAAO,GAAuN2R,CAAYD,EAAQtjT,EAAOryH,KAAO60a,EAAQpX,EAAQ7sN,KAAK,qBAAqBvxM,EAAMs2a,GAAiBvY,EAAOj9Z,SAASA,QAAQC,OAAOD,QAAQC,MAAM,8BAA8Bf,IAAQgzH,EAAOvhH,OAAEqqD,OAAa,GAAGm6W,EAAOjjT,IAAQ,SAASwjT,EAASx2a,GAAO,IAAgB26B,EAAZq4F,EAAOlqH,KAAU,IAAGkqH,EAAO1zH,EAAV,CAAmB0zH,EAAO1zH,GAAE,EAAK0zH,EAAOA,EAAOnzH,GAAGmzH,EAAO,KAAOr4F,EAAKq7Y,EAAWh2a,IAAQy1a,EAAK93a,KAAKoga,GAAO,WAAW,IAAIkG,EAAQ,CAACpka,EAAEmzH,EAAO1zH,GAAE,GAAO,IAAIq7B,EAAKh9B,KAAKqC,EAAMysD,EAAI+pX,EAASvS,EAAQ,GAAGx3W,EAAI4pX,EAAQpS,EAAQ,IAAI,MAAMhla,GAAGo3a,EAAQ14a,KAAKsma,EAAQhla,QAAW+zH,EAAOs8J,EAAEtvR,EAAMgzH,EAAOr0H,EAAE,EAAEs3a,EAAOjjT,IAAS,MAAM/zH,GAAGo3a,EAAQ14a,KAAK,CAACkC,EAAEmzH,EAAO1zH,GAAE,GAAOL,KAAQ22a,IAAWhR,EAAE,SAAiB6R,GAAUvQ,EAAeuQ,GAAU,IAAIzjT,EAAO,CAACryH,EAAEuha,EAAO7sH,KAAKvsS,KAAK87Z,EAAhzF,WAA2zFvla,EAAE,GAAGoS,OAAEqqD,EAAUn9D,EAAE,EAAEW,GAAE,EAAMgwR,OAAExzN,EAAUy+F,GAAE,GAAOq+E,EAAEt6K,KAAKx1D,KAAKysa,EAAOviT,GAAQ,IAAIyjT,EAAShqX,EAAI+pX,EAASxjT,EAAO,GAAGvmE,EAAI4pX,EAAQrjT,EAAO,IAAI,MAAMnyH,GAAKw1a,EAAQ14a,KAAKq1H,EAAOnyH,KAAOi2P,EAAQ,UAARA,CAAmB8tK,EAAEnna,UAAU,CAACk9B,KAAK,SAAc+7Y,EAAYC,GAAY,IAAI/T,EAAE6E,EAAaA,EAAa3+Z,MAAMmjF,aAAa8+U,GAAamL,EAAM,CAAC5/H,IAAGksH,EAAWkU,IAAaA,EAAiBP,OAAK3T,EAAWmU,IAAYA,GAAsBL,EAAQJ,EAAMtR,EAAE,IAAO9oW,MAAH8mW,EAAaA,EAAEgC,IAAG,SAAS9qV,EAAIs8V,GAAKF,EAAMp8V,IAAIosV,EAAepsV,GAAKo8V,EAAME,IAAIlQ,EAAekQ,MAAWpjT,EAAOlqH,KAAKysa,GAAyF,OAAjFviT,EAAO3zH,EAAExB,KAAKq4a,GAAUljT,EAAOvhH,GAAEuhH,EAAOvhH,EAAE5T,KAAKq4a,GAAUljT,EAAOr0H,GAAEs3a,EAAOjjT,GAAesjT,GAAS,MAAQ,SAASK,GAAY,OAAO7ta,KAAK6xB,UAAKmhC,EAAU66W,OAAehS,EAAKA,EAAKkB,EAAElB,EAAKmB,EAAEnB,EAAKoB,GAAG6P,EAAU,CAAC12a,QAAQ0la,IAAI7B,EAAIviZ,IAAIokZ,EAAzkH,WAAolHQ,EAAQR,GAAGQ,EAAQgQ,EAAQx8L,EAAEotL,KAAF,SAAiBrB,EAAKA,EAAK/B,EAAE+B,EAAKoB,GAAG6P,EAAppH,UAAsqH,CAAC75O,OAAO,SAAgBl8L,GAAG,OAAO,IAAImka,EAAel7Z,MAAnB,EAA0B,SAASgxE,EAAIs8V,GAAKA,EAAIv2a,SAAQ8ka,EAAKA,EAAK/B,EAAE+B,EAAKoB,IAAI6P,GAAWF,GAAY,IAA5yH,UAA2zH,CAACv2a,QAAQ,SAAiB+jB,GAAG,OAAx9FixJ,EAAXouP,EAAo/Fr/Y,KAA19F0yZ,EAA2B,WAAjB7S,EAAIC,QAAQT,GAAegT,KAAUhT,KAA6B9wZ,EAAk6FyR,EAAE+oE,YAAl6Fv6E,EAA86F5I,MAAv6F8vO,EAAEouL,IAAIv1Z,IAAImzZ,GAAGlzZ,IAAI0ja,GAA2BE,EAAK7ja,EAAEC,IAA03FwR,EAAE,IAAIpa,MAAK,SAASgxE,GAAKA,EAAI52D,MAA5+F,IAAyBzR,EAAEC,EAAxG6wZ,KAAikGoC,EAAKA,EAAK/B,EAAE+B,EAAKoB,IAAI6P,GAAW9+K,EAAQ,kBAARA,EAA2B,SAAS2tK,GAAMG,EAAE7sR,IAAI0sR,GAAN,OAAqB,mBAArhI,UAA8iI,CAAC1sR,IAAI,SAAaqsR,GAAU,IAAI9nV,EAAE0nV,EAAel7Z,MAAMmW,EAAO,GAAG,OAAO,IAAIq9D,GAAE,SAASxC,EAAIs8V,GAAKhT,EAAMgB,GAAS,EAAMnlZ,EAAOphB,KAAKohB,GAAQ,IAAI23Z,EAAU33Z,EAAO1hB,OAAO6hF,EAAQ1uE,MAAMkma,GAAcA,EAAUh+L,EAAElkE,KAAK/2K,KAAKshB,GAAO,SAASq3Z,EAAQ5/Z,GAAO4lE,EAAEn9E,QAAQm3a,GAAS37Y,MAAK,SAAS36B,GAAOo/E,EAAQ1oE,GAAO1W,IAAQ42a,GAAW98V,EAAIsF,KAAUg3V,MAAYt8V,EAAIsF,OAAYy3V,KAAK,SAAczS,GAAU,IAAI9nV,EAAE0nV,EAAel7Z,MAAM,OAAO,IAAIwzE,GAAE,SAASxC,EAAIs8V,GAAKhT,EAAMgB,GAAS,GAAM,SAASkS,GAASh6V,EAAEn9E,QAAQm3a,GAAS37Y,KAAKm/C,EAAIs8V,aAAa,CAAC,MAAM,GAAG,aAAa,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,aAAa,GAAG,kBAAkB,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,KAAKU,GAAG,CAAC,SAAShgL,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAWu+K,EAASv+K,EAAQ,iBAAiB6wK,EAAM7wK,EAAQ,YAAYigL,EAASjgL,EAAQ,UAARA,CAAmB,YAAY4sK,EAAK5sK,EAAQ,WAAWqsK,KAAK,QAAQ93S,EAAKs8S,EAAMt8S,KAAK62S,EAAOprK,EAAQ,cAAc3iF,EAASykE,EAAEzkE,SAASm0P,EAAS1vL,EAAE0vL,SAAS0O,EAASp+L,EAAEypH,EAAE40E,QAAQC,EAAO58Z,SAASpc,MAAMupa,EAAavF,EAAO3iZ,IAAI43Z,EAAc35a,OAAO8la,cAAcnvP,EAASijQ,EAAmB55a,OAAOoxa,kBAAkByI,IAAiBL,GAAUA,EAASM,WAAWP,KAAYC,EAASM,UAAU,KAAK,SAASC,EAAUhT,GAAU3rL,EAAEp4N,IAAI1X,KAAK46Z,EAAK,CAACjka,EAAE8ka,EAASlnV,OAAEvhB,EAAUz+D,EAAE,IAAIsqa,EAAMtna,OAAOk3a,EAAU,UAAS,WAAW,IAAgCj3a,EAA5Bmka,EAAK37Z,KAAK46Z,GAAM/pZ,EAAK8qZ,EAAKpnV,EAAM,GAASvhB,MAANniD,EAAgC,IAAIrZ,KAAnBmka,EAAKpnV,EAAE1jE,EAAK,GAAc8qZ,EAAKhla,EAAEka,EAAK9b,KAAKyC,GAAK,GAAG,GAAGmka,EAAKpna,GAAGsc,EAAKpc,OAAO,OAAO8tH,EAAK,YAAY/qH,EAAIqZ,EAAK8qZ,EAAKpna,QAAQona,EAAKhla,IAAI,OAAO4rH,EAAK,EAAE/qH,MAAO,IAAIk3a,EAAQ,CAACt5a,MAAM,SAAeshB,EAAOi4Z,EAAaC,GAAe,OAAOR,EAAOv5a,KAAK6hB,EAAOi4Z,EAAaC,IAAgBC,UAAU,SAAmBn4Z,EAAOk4Z,GAAe,IAAIlS,EAAMtD,EAAOI,GAAG/sJ,UAAUh4Q,OAAO,EAAEiiB,EAAO+1P,UAAU,IAAI93Q,UAAUuuF,EAAS4sJ,EAAEv4O,OAAO8zK,EAASqxP,GAAOA,EAAMhoa,OAAOC,WAAWW,EAAO84a,EAAOv5a,KAAK6hB,EAAOwsE,EAAS0rV,GAAe,OAAOvjQ,EAAS/1K,GAAQA,EAAO4tF,GAAUtsF,eAAe,SAAwB8f,EAAOo4Z,EAAYC,GAAYpQ,EAAajoZ,GAAQ,IAA6C,OAAzCo5N,EAAEyrL,QAAQ7kZ,EAAOo4Z,EAAYC,IAAmB,EAAK,MAAM54a,GAAG,OAAO,IAAQ64a,eAAe,SAAwBt4Z,EAAOo4Z,GAAa,IAAIziK,EAAKv8B,EAAE+tL,QAAQc,EAAajoZ,GAAQo4Z,GAAa,QAAOziK,IAAOA,EAAKM,sBAA0Bj2P,EAAOo4Z,IAAch4a,IAAI,SAASA,EAAI4f,EAAOo4Z,GAAa,IAAqGpS,EAAjGuS,EAASxiK,UAAUh4Q,OAAO,EAAEiiB,EAAO+1P,UAAU,GAAGJ,EAAKv8B,EAAE+tL,QAAQc,EAAajoZ,GAAQo4Z,GAAmB,OAAGziK,EAAYv8B,EAAE+sH,IAAIxwF,EAAK,SAASA,EAAKn1Q,WAAiB87D,IAAXq5M,EAAKv1Q,SAAgBk8D,EAAUq5M,EAAKv1Q,IAAIjC,KAAKo6a,GAAiB5jQ,EAASqxP,EAAM8C,EAAS9oZ,IAAS5f,EAAI4la,EAAMoS,EAAYG,QAAUj8W,GAAWqtW,yBAAyB,SAAkC3pZ,EAAOo4Z,GAAa,OAAOh/L,EAAE+tL,QAAQc,EAAajoZ,GAAQo4Z,IAAczrH,eAAe,SAAwB3sS,GAAQ,OAAO8oZ,EAASb,EAAajoZ,KAAUmmV,IAAI,SAAanmV,EAAOo4Z,GAAa,OAAOA,KAAep4Z,GAAQ8jZ,aAAa,SAAsB9jZ,GAAQ,OAAO23Z,EAAc1P,EAAajoZ,KAAUw4Z,QAAQlhL,EAAQ,gBAAgB83K,kBAAkB,SAA2BpvZ,GAAQioZ,EAAajoZ,GAAQ,IAAqD,OAA9C43Z,GAAmBA,EAAmB53Z,IAAe,EAAK,MAAMvgB,GAAG,OAAO,IAAQuhB,IAAI,SAASA,EAAIhB,EAAOo4Z,EAAYK,GAAG,IAAwGC,EAAmB1S,EAAvHuS,EAASxiK,UAAUh4Q,OAAO,EAAEiiB,EAAO+1P,UAAU,GAAG4iK,EAAQv/L,EAAE+tL,QAAQc,EAAajoZ,GAAQo4Z,GAAsC,IAAIO,EAAQ,CAAC,GAAGhkQ,EAASqxP,EAAM8C,EAAS9oZ,IAAU,OAAOgB,EAAIglZ,EAAMoS,EAAYK,EAAEF,GAAUI,EAAQv/L,EAAEu8B,KAAK,GAAG,OAAGv8B,EAAE+sH,IAAIwyE,EAAQ,YAAgC,IAAnBA,EAAQziK,WAAmBvhG,EAAS4jQ,OAAuBG,EAAmBt/L,EAAE+tL,QAAQoR,EAASH,IAAch/L,EAAEu8B,KAAK,IAAsBn1Q,MAAMi4a,EAAEr/L,EAAEyrL,QAAQ0T,EAASH,EAAYM,IAA2B,QAA0Bp8W,IAAdq8W,EAAQ33Z,MAAuB23Z,EAAQ33Z,IAAI7iB,KAAKo6a,EAASE,IAAG,KAAW5C,IAASmC,EAAQ5qH,eAAe,SAAwBptS,EAAOgmZ,GAAO6P,EAAS1K,MAAMnrZ,EAAOgmZ,GAAO,IAA+B,OAA3B6P,EAAS70Z,IAAIhB,EAAOgmZ,IAAc,EAAK,MAAMvma,GAAG,OAAO,KAAQ0la,EAAKA,EAAKkB,EAAE,CAACoR,QAAQ,KAAKtS,EAAKA,EAAK/B,EAAE+B,EAAKoB,EAAEsR,EAAe,UAAU,CAACC,UAAU,SAAmB93Z,GAAQ,OAAO,IAAI+3Z,EAAU9P,EAAajoZ,OAAYmlZ,EAAKA,EAAK/B,EAAE,UAAU4U,IAAU,CAAC,MAAM,GAAG,aAAa,EAAE,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAAG,UAAU,GAAG,UAAU,KAAKY,GAAG,CAAC,SAASthL,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAOisK,EAAIjsK,EAAQ,WAAWuhL,EAAQz/L,EAAEypH,EAAEljR,OAAOiuL,EAAKirK,EAAQ7S,EAAM6S,EAAQ56a,UAAU66a,EAAG,KAAKC,EAAY,IAAIF,EAAQC,KAAMA,EAAGE,EAAqB,WAAW,IAAI,MAAwB,QAAjBH,EAAQC,EAAG,KAAa,MAAMr5a,KAApD,GAA+D25O,EAAEouL,IAAIpuL,EAAEgrL,OAAU2U,GAAcC,IAAsBH,EAAQ,SAAgB5iG,EAAQgjG,GAAO,IAAIC,EAA8B,UAAd3V,EAAIttF,GAAmBkjG,OAAyB78W,IAAR28W,EAAkB,OAAK3va,gBAAgBuva,IAAUK,IAAiBC,EAAuCJ,EAAY,IAAInrK,EAAKsrK,IAAkBC,EAAiBljG,EAAQ5rS,OAAO4rS,EAAQgjG,GAAO,IAAIrrK,EAAKsrK,EAAgBjjG,EAAQ5rS,OAAO4rS,EAAQijG,GAAiBC,EAAiBljG,EAAQgjG,MAAMA,GAArMhjG,GAA6M78F,EAAElkE,KAAK/2K,KAAKi7O,EAAEsuL,SAAS95J,IAAM,SAAS9sQ,GAAKA,KAAO+3a,GAASz/L,EAAEyrL,QAAQgU,EAAQ/3a,EAAI,CAACm1Q,cAAa,EAAK71Q,IAAI,WAAW,OAAOwtQ,EAAK9sQ,IAAMkgB,IAAI,SAAS+hZ,GAAIn1J,EAAK9sQ,GAAKiia,QAAQiD,EAAMv5U,YAAYosV,EAAQA,EAAQ56a,UAAU+na,EAAM1uK,EAAQ,YAARA,CAAqBle,EAAEypH,EAAE,SAASg2E,IAAwB,KAAZ,KAAKI,OAAW7/L,EAAEyrL,QAAQmB,EAAM,QAAQ,CAAC/vJ,cAAa,EAAK71Q,IAAIk3P,EAAQ,eAARA,CAAwB,cAAc,SAAQA,EAAQ,cAARA,CAAuBuhL,IAAU,CAAC,MAAM,GAAG,UAAU,EAAE,YAAY,GAAG,eAAe,GAAG,cAAc,KAAKO,GAAG,CAAC,SAAS9hL,EAAQ/3P,EAAOD,GAAsB,IAAIkza,EAAOl7K,EAAQ,yBAAyBA,EAAQ,iBAARA,CAA0B,OAAM,SAASl3P,GAAK,OAAO,WAAe,OAAOA,EAAIkJ,KAAKysQ,UAAU,OAAM,CAACtwQ,IAAI,SAAajF,GAAO,OAAOgya,EAAO3P,IAAIv5Z,KAAK9I,EAAc,IAARA,EAAU,EAAEA,EAAMA,KAASgya,IAAS,CAAC,iBAAiB,GAAG,wBAAwB,KAAK6G,GAAG,CAAC,SAAS/hL,EAAQ/3P,EAAOD,GAAsB,IAAI6la,EAAK7tK,EAAQ,WAAWgiL,EAAIhiL,EAAQ,gBAARA,EAAyB,GAAO6tK,EAAKA,EAAKC,EAAE,SAAS,CAACmU,YAAY,SAAqB3oX,GAAK,OAAO0oX,EAAIhwa,KAAKsnD,OAAS,CAAC,UAAU,GAAG,gBAAgB,KAAK4oX,GAAG,CAAC,SAASliL,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAOisK,EAAIjsK,EAAQ,WAAW6tK,EAAK7tK,EAAQ,WAAWsqK,EAASxoL,EAAEwoL,SAASuD,EAAKA,EAAKC,EAAED,EAAKoB,GAAGjvK,EAAQ,aAARA,EAAsB,WAAW,IAAIv8D,SAAS,QAAO,SAAS,CAACA,SAAS,SAAkBC,GAAc,GAAsB,UAAnBuoO,EAAIvoO,GAAwB,MAAMixH,YAAY,IAAIq2G,EAAKniV,OAAOi5J,EAAEmpL,cAAcj5Z,OAAOmwa,EAAY1jK,UAAU,GAAG15L,EAAIulV,EAASU,EAAKvka,QAAQqb,OAAkBkjD,IAAdm9W,EAAwBp9V,EAAI3oE,KAAKwwH,IAAI09R,EAAS6X,GAAap9V,GAAsB,OAAjB2+G,GAAc,GAAUsnO,EAAK3ga,MAAMyX,EAAI4hL,EAAaj9L,OAAOqb,KAAO4hL,MAAiB,CAAC,MAAM,GAAG,UAAU,EAAE,UAAU,GAAG,aAAa,KAAK0+O,GAAG,CAAC,SAASpiL,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAWuqK,EAAQvqK,EAAQ,OAAOuqK,QAAQzhV,EAAaD,OAAOC,aAAau5V,EAAex5V,OAAOy5V,cAAczU,EAAKA,EAAK/B,EAAE+B,EAAKoB,KAAKoT,GAAuC,GAAvBA,EAAe57a,QAAW,SAAS,CAAC67a,cAAc,SAAuBl2Z,GAA4C,IAAzC,IAAoC+mF,EAAhCnwB,EAAI,GAAG+B,EAAI05L,UAAUh4Q,OAAOF,EAAE,EAAaw+E,EAAIx+E,GAAE,CAAsB,GAArB4sG,GAAMsrK,UAAUl4Q,KAAQgka,EAAQp3T,EAAK,WAAWA,EAAK,MAAMqhU,WAAWrhU,EAAK,8BAA8BnwB,EAAIj8E,KAAKosG,EAAK,MAAMrqB,EAAaqqB,GAAMrqB,EAAiC,QAAlBqqB,GAAM,QAAQ,IAAUA,EAAK,KAAK,QAAQ,OAAOnwB,EAAI39D,KAAK,QAAQ,CAAC,MAAM,GAAG,UAAU,KAAKk9Z,GAAG,CAAC,SAASviL,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAOisK,EAAIjsK,EAAQ,WAAW6tK,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAKC,EAAE,SAAS,CAAC3ha,SAAS,SAAkBu3L,GAAc,GAAsB,UAAnBuoO,EAAIvoO,GAAwB,MAAMixH,YAAY,SAAS9rO,OAAOi5J,EAAEmpL,cAAcj5Z,OAAOhG,QAAQ03L,EAAa+6E,UAAU,QAAQ,CAAC,MAAM,GAAG,UAAU,EAAE,UAAU,KAAK+jK,GAAG,CAAC,SAASxiL,EAAQ/3P,EAAOD,GAAS,IAAI0hB,EAAIs2O,EAAQ,OAAOt2O,IAAIs4Z,EAAIhiL,EAAQ,gBAARA,EAAyB,GAAM4sK,EAAK5sK,EAAQ,WAAWqsK,KAAK,QAAkC93S,EAApByrI,EAAQ,YAAuBzrI,KAAKyrI,EAAQ,kBAARA,CAA2Bn3K,OAAO,UAAS,SAAS4kV,GAAU/jZ,EAAI1X,KAAK46Z,EAAK,CAACjka,EAAEkgF,OAAO4kV,GAAUlna,EAAE,OAAK,WAAW,IAA0Cy3D,EAAtC2vW,EAAK37Z,KAAK46Z,GAAMtG,EAAEqH,EAAKhla,EAAEiX,EAAM+tZ,EAAKpna,EAAQ,OAAGqZ,GAAO0mZ,EAAE7/Z,OAAc8tH,EAAK,IAAGv2D,EAAMgkX,EAAI1b,EAAE1mZ,GAAO+tZ,EAAKpna,GAAGy3D,EAAMv3D,OAAc8tH,EAAK,EAAEv2D,QAAU,CAAC,MAAM,GAAG,WAAW,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,UAAU,KAAKykX,GAAG,CAAC,SAASziL,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAK/B,EAAE,SAAS,CAACt1I,IAAI,SAAaksJ,GAAsG,IAA5F,IAAIxP,EAAIpxL,EAAEuoL,SAASqY,EAASlsJ,KAAKzxM,EAAI+8J,EAAEwoL,SAAS4I,EAAIzsa,QAAQk8a,EAAIlkK,UAAUh4Q,OAAOu8E,EAAI,GAAGz8E,EAAE,EAAQw+E,EAAIx+E,GAAGy8E,EAAIj8E,KAAK8hF,OAAOqqV,EAAI3sa,OAAUA,EAAEo8a,GAAI3/V,EAAIj8E,KAAK8hF,OAAO41L,UAAUl4Q,KAAK,OAAOy8E,EAAI39D,KAAK,QAAQ,CAAC,MAAM,GAAG,UAAU,KAAKu9Z,GAAG,CAAC,SAAS5iL,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAKC,EAAE,SAAS,CAACuG,OAAOr0K,EAAQ,wBAAwB,CAAC,UAAU,GAAG,oBAAoB,KAAK6iL,GAAG,CAAC,SAAS7iL,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAOisK,EAAIjsK,EAAQ,WAAW6tK,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAKC,EAAED,EAAKoB,GAAGjvK,EAAQ,aAARA,EAAsB,WAAW,IAAI9iK,WAAW,QAAO,SAAS,CAACA,WAAW,SAAoBwmG,GAAc,GAAsB,UAAnBuoO,EAAIvoO,GAAwB,MAAMixH,YAAY,IAAIq2G,EAAKniV,OAAOi5J,EAAEmpL,cAAcj5Z,OAAO4N,EAAMkiO,EAAEwoL,SAASluZ,KAAKwwH,IAAI6xI,UAAU,GAAGusJ,EAAKvka,SAA0B,OAAjBi9L,GAAc,GAAUsnO,EAAK3ga,MAAMuV,EAAMA,EAAM8jL,EAAaj9L,UAAUi9L,MAAiB,CAAC,MAAM,GAAG,UAAU,EAAE,UAAU,GAAG,aAAa,KAAKo/O,GAAG,CAAC,SAAS9iL,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAO+iL,EAAO/iL,EAAQ,WAAWt2O,IAAI0K,EAAI4rO,EAAQ,WAAWgjL,EAAOhjL,EAAQ,cAAc6tK,EAAK7tK,EAAQ,WAAWsvK,EAAOtvK,EAAQ,aAAaijL,EAAMjjL,EAAQ,aAAa4rK,EAAS5rK,EAAQ,iBAAiB2wK,EAAa3wK,EAAQ,cAAcv3O,IAAI4tZ,EAAY3va,OAAOC,UAAUmma,EAAKhrL,EAAEgrL,KAAKj+D,EAAI/sH,EAAE+sH,IAAIq0E,EAAQphM,EAAEv4O,OAAOsma,EAAQ/tL,EAAE+tL,QAAQtC,EAAQzrL,EAAEyrL,QAAQlvJ,EAAKv8B,EAAEu8B,KAAK8kK,EAAOnjL,EAAQ,iBAAiBowK,EAAS+S,EAAOr6a,IAAIuha,EAASvoL,EAAEuoL,SAAS+Y,EAAQthM,EAAEypH,EAAEviW,OAAOq6a,GAAO,EAAMrX,EAAI53Y,EAAI,OAAOkvZ,EAAOlvZ,EAAI,UAAUmvZ,EAAsB,GAAGtM,qBAAqBuM,EAAeR,EAAO,mBAAmBS,EAAWT,EAAO,WAAWlE,EAAUh9L,EAAE4pL,WAAW0X,GAAaM,EAAc5W,EAAK,WAAW,IAAI,OAAOoW,EAAQ3V,EAAQ,GAAG+V,EAAO,CAACx6a,IAAI,WAAW,OAAOyka,EAAQv7Z,KAAKsxa,EAAO,CAACp6a,OAAM,IAAQo6a,OAAYA,IAAS/V,EAAQ,MAAMpla,GAAG,OAAO,SAASsja,EAAGjia,EAAIi8E,GAAG,IAAIk+V,EAAU9T,EAAQwG,EAAY7sa,GAAQm6a,UAAiBtN,EAAY7sa,GAAK+ja,EAAQ9B,EAAGjia,EAAIi8E,GAAMk+V,GAAWlY,IAAK4K,GAAY9I,EAAQ8I,EAAY7sa,EAAIm6a,KAA/T,GAA+UpW,EAAQ,SAASj1G,EAAKn2I,GAC5w+B,IAAIyhQ,EAAIH,EAAWthQ,GAAK2/D,EAAEp4N,IAAIw5Z,EAAQE,EAAQz8a,WAAWqla,EAAI7pP,GAAoM,OAA/L2qP,GAAMuW,GAAQK,EAAcrN,EAAYl0P,EAAI,CAACw8F,cAAa,EAAKj1P,IAAI,SAASxgB,GAAU2lW,EAAI78V,KAAKsxa,IAASz0E,EAAI78V,KAAKsxa,GAAQnhQ,KAAKnwK,KAAKsxa,GAAQnhQ,IAAK,GAAMuhQ,EAAc1xa,KAAKmwK,EAAIk8F,EAAK,EAAEn1Q,OAAkB06a,EAAI,SAASh7a,EAAe6ia,EAAGjia,EAAIi8E,GAAG,OAAGA,GAAGopR,EAAI40E,EAAWj6a,IAAUi8E,EAAE58E,YAA0FgmW,EAAI48D,EAAG6X,IAAS7X,EAAG6X,GAAQ95a,KAAKiia,EAAG6X,GAAQ95a,IAAK,GAAMi8E,EAAEy9V,EAAQz9V,EAAE,CAAC58E,WAAWw1Q,EAAK,GAAE,OAA/JwwF,EAAI48D,EAAG6X,IAAQ/V,EAAQ9B,EAAG6X,EAAOjlK,EAAK,EAAE,KAAKotJ,EAAG6X,GAAQ95a,IAAK,GAAkHk6a,EAAcjY,EAAGjia,EAAIi8E,IAAU8nV,EAAQ9B,EAAGjia,EAAIi8E,GAAG,SAASuuO,EAAiBy3G,EAAGqC,GAAG6C,EAAalF,GAA2D,IAAvD,IAAmDjia,EAA/CqZ,EAAK+oZ,EAASkC,EAAEzD,EAASyD,IAAIvna,EAAE,EAAE2B,EAAE2a,EAAKpc,OAAiByB,EAAE3B,GAAEqC,EAAe6ia,EAAGjia,EAAIqZ,EAAKtc,KAAKuna,EAAEtka,IAAM,OAAOiia,EAAG,SAASlia,EAAOkia,EAAGqC,GAAG,YAAW9oW,IAAJ8oW,EAAcoV,EAAQzX,GAAIz3G,EAAiBkvH,EAAQzX,GAAIqC,GAA4K,SAASuE,EAAyB5G,EAAGjia,GAAK,IAAIi8E,EAAEoqV,EAAQpE,EAAGpB,EAASoB,GAAIjia,GAAqF,OAA7Ei8E,IAAGopR,EAAI40E,EAAWj6a,IAAQqlW,EAAI48D,EAAG6X,IAAS7X,EAAG6X,GAAQ95a,KAAMi8E,EAAE58E,YAAW,GAAY48E,EAAE,SAAS6qV,EAAoB7E,GAAuD,IAAnD,IAA+Cjia,EAA3Co8G,EAAMwqT,EAAS/F,EAASoB,IAAKnka,EAAO,GAAGf,EAAE,EAAYq/G,EAAMn/G,OAAOF,GAAMsoW,EAAI40E,EAAWj6a,EAAIo8G,EAAMr/G,OAAOiD,GAAK85a,GAAOh8a,EAAOP,KAAKyC,GAAK,OAAOlC,EAAO,SAASira,EAAsB9G,GAAuD,IAAnD,IAA+Cjia,EAA3Co8G,EAAMwqT,EAAS/F,EAASoB,IAAKnka,EAAO,GAAGf,EAAE,EAAYq/G,EAAMn/G,OAAOF,GAAKsoW,EAAI40E,EAAWj6a,EAAIo8G,EAAMr/G,OAAMe,EAAOP,KAAK08a,EAAWj6a,IAAM,OAAOlC,EAAWw3a,IAA+IxP,GAApI8T,EAAQ,WAAkB,GAAGpxa,gBAAgBoxa,EAAQ,MAAMzuH,UAAU,+BAA+B,OAAO2D,EAAKlkS,EAAIqqP,UAAU,OAAqB93Q,UAAU,YAAW,WAAW,OAAOqL,KAAKg6Z,MAAOlqL,EAAEv4O,OAAOA,EAAOu4O,EAAEyrL,QAAQ3ka,EAAek5O,EAAE+tL,QAAQwC,EAAyBvwL,EAAEwwL,SAASt+G,EAAiBlyE,EAAEsuL,SAAS+S,EAAOr6a,IAAIwna,EAAoBxuL,EAAEguL,WAAWyC,EAAyBzwL,EAAEgrL,MAAMhrL,EAAEouL,IAAGZ,EAAO+G,EAAY,wBAA5mC,SAA8B7sa,GAAK,IAAI4xa,EAAEmI,EAAsB18a,KAAKmL,KAAKxI,GAAK,QAAO4xa,IAAIvsE,EAAI78V,KAAKxI,KAAOqlW,EAAI40E,EAAWj6a,IAAMqlW,EAAI78V,KAAKsxa,IAAStxa,KAAKsxa,GAAQ95a,KAAK4xa,KAAs/B,IAAM,IAAIyI,EAAc,CAAC,IAAM,SAASr6a,GAAK,OAAOqlW,EAAI20E,EAAeh6a,GAAK,IAAIg6a,EAAeh6a,GAAKg6a,EAAeh6a,GAAK45a,EAAQ55a,IAAMs6a,OAAO,SAAgBt6a,GAAK,OAAOy5a,EAAMO,EAAeh6a,IAAMu6a,UAAU,WAAWV,GAAO,GAAMW,UAAU,WAAWX,GAAO,IAAQvhM,EAAElkE,KAAK/2K,KAAK,iHAAsHkJ,MAAM,MAAK,SAAS07Z,GAAI,IAAImY,EAAI5jL,EAAQ,UAARA,CAAmByrK,GAAIoY,EAAcpY,GAAIqT,EAAU8E,EAAItrH,EAAKsrH,MAAOP,GAAO,EAAKxV,EAAKA,EAAKkB,EAAElB,EAAKmB,EAAE,CAAChma,OAAOo6a,IAAUvV,EAAKA,EAAK/B,EAAE,SAAS+X,GAAehW,EAAKA,EAAK/B,EAAE+B,EAAKoB,GAAG6P,EAAU,SAAS,CAACv1a,OAAOA,EAAOX,eAAeA,EAAeorT,iBAAiBA,EAAiBq+G,yBAAyBA,EAAyB/B,oBAAoBA,EAAoBiC,sBAAsBA,IAAwBwQ,EAAOK,EAAQ,UAAUL,EAAO3ma,KAAK,QAAO,GAAM2ma,EAAOjhM,EAAEypH,EAAEplP,KAAK,QAAO,IAAO,CAAC,MAAM,GAAG,aAAa,EAAE,UAAU,EAAE,UAAU,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,KAAK89T,GAAG,CAAC,SAASjkL,EAAQ/3P,EAAOD,GAAsB,IAAI85O,EAAEke,EAAQ,OAAOkkL,EAAKlkL,EAAQ,uBAAuBmuK,EAAU+V,EAAK/V,UAAU9vH,EAAG6lI,EAAK7lI,GAAG2vH,EAAKkW,EAAKlW,KAAKn/D,EAAI/sH,EAAE+sH,IAAIxxL,EAASykE,EAAEzkE,SAASmvP,EAAa9la,OAAO8la,cAAcnvP,EAASl9E,EAAI,GAAOgkV,EAASnkL,EAAQ,iBAARA,CAA0B,WAAU,SAASl3P,GAAK,OAAO,WAAmB,OAAOA,EAAIkJ,KAAKysQ,UAAU,OAAM,CAAC31Q,IAAI,SAAaU,GAAK,GAAG6zK,EAAS7zK,GAAK,CAAC,IAAIgja,EAAahja,GAAK,OAAO2ka,EAAUn8Z,MAAMlJ,IAAIU,GAAK,GAAGqlW,EAAIrlW,EAAIwka,GAAM,OAAOxka,EAAIwka,GAAMh8Z,KAAKqsS,MAAO30R,IAAI,SAAalgB,EAAIN,GAAO,OAAOg7a,EAAK3Y,IAAIv5Z,KAAKxI,EAAIN,KAASg7a,GAAK,GAAK,GAAsE,IAA5D,IAAIC,GAAUz6Z,KAAKhjB,OAAOmxa,QAAQnxa,QAAQy5F,GAAK,GAAGr3F,IAAIq3F,IAAS2hJ,EAAElkE,KAAK/2K,KAAK,CAAC,SAAS,MAAM,MAAM,QAAO,SAAS2C,GAAK,IAAIkla,EAAMyV,EAASx9a,UAAUi5S,EAAO8uH,EAAMlla,GAAKw2P,EAAQ,YAARA,CAAqB0uK,EAAMlla,GAAI,SAASmR,EAAEC,GAAG,GAAGyiK,EAAS1iK,KAAK6xZ,EAAa7xZ,GAAG,CAAC,IAAIrT,EAAO6ma,EAAUn8Z,MAAMxI,GAAKmR,EAAEC,GAAG,MAAY,OAALpR,EAAWwI,KAAK1K,EAAO,OAAOs4S,EAAO/4S,KAAKmL,KAAK2I,EAAEC,UAAS,CAAC,MAAM,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,YAAY,KAAKwpa,GAAG,CAAC,SAASpkL,EAAQ/3P,EAAOD,GAAsB,IAAIk8a,EAAKlkL,EAAQ,uBAAuBA,EAAQ,iBAARA,CAA0B,WAAU,SAASl3P,GAAK,OAAO,WAAmB,OAAOA,EAAIkJ,KAAKysQ,UAAU,OAAM,CAACtwQ,IAAI,SAAajF,GAAO,OAAOg7a,EAAK3Y,IAAIv5Z,KAAK9I,GAAM,KAAQg7a,GAAK,GAAM,IAAO,CAAC,iBAAiB,GAAG,sBAAsB,KAAKG,GAAG,CAAC,SAASrkL,EAAQ/3P,EAAOD,GAAsB,IAAI6la,EAAK7tK,EAAQ,WAAWskL,EAAUtkL,EAAQ,qBAARA,EAA8B,GAAM6tK,EAAKA,EAAKC,EAAE,QAAQ,CAAC3ha,SAAS,SAAkB+xP,GAAI,OAAOomL,EAAUtya,KAAKksP,EAAGugB,UAAU,OAAOze,EAAQ,cAARA,CAAuB,aAAa,CAAC,qBAAqB,EAAE,UAAU,GAAG,cAAc,KAAKukL,GAAG,CAAC,SAASvkL,EAAQ/3P,EAAOD,GAASg4P,EAAQ,yBAARA,CAAkC,QAAQ,CAAC,yBAAyB,KAAKwkL,GAAG,CAAC,SAASxkL,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAWkhL,EAAQlhL,EAAQ,gBAAgB6tK,EAAKA,EAAK/B,EAAE,SAAS,CAAC2Y,0BAA0B,SAAmC96a,GAAQ,IAAI28Z,EAAExkL,EAAEuoL,SAAS1ga,GAAQrC,EAAO,GAA2F,OAAxFw6O,EAAElkE,KAAK/2K,KAAKq6a,EAAQ5a,IAAG,SAAS98Z,GAAKs4O,EAAEyrL,QAAQjma,EAAOkC,EAAIs4O,EAAEu8B,KAAK,EAAEv8B,EAAE+tL,QAAQvJ,EAAE98Z,QAAgBlC,MAAW,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,KAAKo9a,GAAG,CAAC,SAAS1kL,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAW,SAAS2kL,EAAoBC,GAAW,OAAO,SAASj7a,GAAQ,IAAuFH,EAAnF88Z,EAAExkL,EAAEuoL,SAAS1ga,GAAQkZ,EAAKi/N,EAAE8tL,QAAQtJ,GAAG7/Z,EAAOoc,EAAKpc,OAAOF,EAAE,EAAEe,EAAOsS,MAAMnT,GAAY,GAAGm+a,EAAU,KAAMn+a,EAAOF,GAAEe,EAAOf,GAAG,CAACiD,EAAIqZ,EAAKtc,KAAK+/Z,EAAE98Z,SAAW,KAAM/C,EAAOF,GAAEe,EAAOf,GAAG+/Z,EAAEzjZ,EAAKtc,MAAM,OAAOe,GAAQuma,EAAKA,EAAK/B,EAAE,SAAS,CAAC3jZ,OAAOw8Z,GAAoB,GAAO/hF,QAAQ+hF,GAAoB,MAAS,CAAC,MAAM,GAAG,UAAU,KAAKE,GAAG,CAAC,SAAS7kL,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAW6tK,EAAKA,EAAK/B,EAAE,SAAS,CAACgZ,OAAO9kL,EAAQ,eAARA,CAAwB,sBAAsB,QAAO,MAAS,CAAC,UAAU,GAAG,eAAe,KAAK+kL,GAAG,CAAC,SAAS/kL,EAAQ/3P,EAAOD,GAASg4P,EAAQ,yBAARA,CAAkC,QAAQ,CAAC,yBAAyB,KAAKglL,GAAG,CAAC,SAAShlL,EAAQ/3P,EAAOD,GAAsB,IAAI6la,EAAK7tK,EAAQ,WAAWgiL,EAAIhiL,EAAQ,gBAARA,EAAyB,GAAM6tK,EAAKA,EAAKC,EAAE,SAAS,CAACmX,GAAG,SAAY3rX,GAAK,OAAO0oX,EAAIhwa,KAAKsnD,OAAS,CAAC,UAAU,GAAG,gBAAgB,KAAK4rX,GAAG,CAAC,SAASllL,EAAQ/3P,EAAOD,GAAsB,IAAI6la,EAAK7tK,EAAQ,WAAWmlL,EAAKnlL,EAAQ,kBAAkB6tK,EAAKA,EAAKC,EAAE,SAAS,CAACsX,KAAK,SAAc17a,GAAG,OAAOy7a,EAAKnza,KAAKtI,EAAE+0Q,UAAU,IAAG,OAAU,CAAC,UAAU,GAAG,iBAAiB,KAAK4mK,GAAG,CAAC,SAASrlL,EAAQ/3P,EAAOD,GAAsB,IAAI6la,EAAK7tK,EAAQ,WAAWmlL,EAAKnlL,EAAQ,kBAAkB6tK,EAAKA,EAAKC,EAAE,SAAS,CAACwX,KAAK,SAAc57a,GAAG,OAAOy7a,EAAKnza,KAAKtI,EAAE+0Q,UAAU,IAAG,OAAW,CAAC,UAAU,GAAG,iBAAiB,KAAK8mK,GAAG,CAAC,SAASvlL,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAWwlL,EAAO1jM,EAAEotL,KAAKt1Z,OAAOA,MAAM6ra,EAAQ,GAAG,SAASC,EAAW7ia,EAAKpc,GAAQq7O,EAAElkE,KAAK/2K,KAAKgc,EAAK9S,MAAM,MAAK,SAASvG,GAAgBw7D,MAARv+D,GAAmB+C,KAAOg8a,EAAOC,EAAQj8a,GAAKg8a,EAAOh8a,GAAaA,IAAM,KAAGi8a,EAAQj8a,GAAKw2P,EAAQ,UAARA,CAAmBx8O,SAAS3c,KAAK,GAAG2C,GAAK/C,OAAUi/a,EAAW,wCAAwC,GAAGA,EAAW,gEAAgE,GAAGA,EAAW,kGAAqG7X,EAAKA,EAAK/B,EAAE,QAAQ2Z,IAAU,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,KAAKE,GAAG,CAAC,SAAS3lL,EAAQ/3P,EAAOD,GAASg4P,EAAQ,wBAAwB,IAAIle,EAAEke,EAAQ,OAAO+wK,EAAU/wK,EAAQ,YAAY+wK,UAAUkP,EAASjgL,EAAQ,UAARA,CAAmB,YAAY4lL,EAAY7U,EAAUn3Z,MAAMisa,EAAG/jM,EAAEypH,EAAEu6E,SAASC,EAAIjkM,EAAEypH,EAAEy6E,eAAeC,EAAQJ,GAAIA,EAAGl/a,UAAUu/a,EAASH,GAAKA,EAAIp/a,UAAam7O,EAAEouL,KAAO2V,KAAM5F,KAAYgG,IAASnkM,EAAEt6K,KAAKy+W,EAAQhG,EAAS2F,GAAgBG,KAAO9F,KAAYiG,IAAUpkM,EAAEt6K,KAAK0+W,EAASjG,EAAS2F,IAAa7U,EAAU+U,SAAS/U,EAAUiV,eAAeJ,GAAa,CAAC,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,uBAAuB,KAAKO,GAAG,CAAC,SAASnmL,EAAQ/3P,EAAOD,GAAS,IAAI6la,EAAK7tK,EAAQ,WAAWomL,EAAMpmL,EAAQ,YAAY6tK,EAAKA,EAAKkB,EAAElB,EAAK58R,EAAE,CAACgkS,aAAamR,EAAM18Z,IAAIyrZ,eAAeiR,EAAM9mJ,SAAS,CAAC,UAAU,GAAG,WAAW,KAAK+mJ,GAAG,CAAC,SAASrmL,EAAQ/3P,EAAOD,GAAS,IAAI85O,EAAEke,EAAQ,OAAO6tK,EAAK7tK,EAAQ,WAAW8yK,EAAO9yK,EAAQ,cAAcsmL,EAAQtmL,EAAQ,eAAexwP,EAAUsyO,EAAEypH,EAAE/7V,UAAU+2a,IAAO/2a,GAAW,WAAWD,KAAKC,EAAUC,WAAW,SAAS6oT,EAAK5uS,GAAK,OAAO68Z,EAAK,SAAS/a,EAAG96K,GAAM,OAAOhnO,EAAIopZ,EAAOwT,EAAQ,GAAGj8a,MAAMxD,KAAK43Q,UAAU,GAAG38B,EAAE4pL,WAAWF,GAAIA,EAAGhoZ,SAASgoZ,IAAK96K,IAAOhnO,EAAImkZ,EAAKA,EAAKkB,EAAElB,EAAK58R,EAAE48R,EAAKoB,EAAEsX,EAAK,CAAC7lV,WAAW43N,EAAKx2E,EAAEypH,EAAE7qQ,YAAYk5E,YAAY0+I,EAAKx2E,EAAEypH,EAAE3xL,gBAAgB,CAAC,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,KAAK4sQ,GAAG,CAAC,SAASxmL,EAAQ/3P,EAAOD,GAASg4P,EAAQ,iBAAiBA,EAAQ,wBAAwBA,EAAQ,+BAA+BA,EAAQ,2BAA2BA,EAAQ,yCAAyCA,EAAQ,kCAAkCA,EAAQ,kDAAkDA,EAAQ,+BAA+BA,EAAQ,uCAAuCA,EAAQ,oCAAoCA,EAAQ,gCAAgCA,EAAQ,sBAAsBA,EAAQ,wCAAwCA,EAAQ,4BAA4BA,EAAQ,iCAAiCA,EAAQ,sCAAsCA,EAAQ,kCAAkCA,EAAQ,iCAAiCA,EAAQ,+BAA+BA,EAAQ,oCAAoCA,EAAQ,4BAA4BA,EAAQ,0BAA0BA,EAAQ,gCAAgCA,EAAQ,+BAA+BA,EAAQ,mCAAmCA,EAAQ,4BAA4BA,EAAQ,4BAA4BA,EAAQ,kCAAkCA,EAAQ,wBAAwBA,EAAQ,yBAAyBA,EAAQ,qBAAqBA,EAAQ,qBAAqBA,EAAQ,0BAA0BA,EAAQ,0BAA0BA,EAAQ,yBAAyBA,EAAQ,gCAAgCA,EAAQ,2BAA2BA,EAAQ,6BAA6BA,EAAQ,6BAA6BA,EAAQ,+BAA+BA,EAAQ,qDAAqDA,EAAQ,iCAAiCA,EAAQ,6BAA6BA,EAAQ,6BAA6BA,EAAQ,8BAA8BA,EAAQ,wBAAwBA,EAAQ,2BAA2BA,EAAQ,8BAA8B/3P,EAAOD,QAAQg4P,EAAQ,eAAekvK,MAAM,CAAC,cAAc,GAAG,gBAAgB,GAAG,kCAAkC,GAAG,2BAA2B,GAAG,2BAA2B,GAAG,iCAAiC,GAAG,2BAA2B,GAAG,+BAA+B,GAAG,yBAAyB,GAAG,8BAA8B,GAAG,sCAAsC,GAAG,8BAA8B,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,mCAAmC,GAAG,+BAA+B,GAAG,8BAA8B,GAAG,0BAA0B,GAAG,wCAAwC,GAAG,iDAAiD,GAAG,iCAAiC,GAAG,wBAAwB,GAAG,wBAAwB,GAAG,uBAAuB,GAAG,oBAAoB,GAAG,qCAAqC,GAAG,iCAAiC,GAAG,uCAAuC,GAAG,gCAAgC,GAAG,gCAAgC,GAAG,2BAA2B,GAAG,8BAA8B,GAAG,mCAAmC,GAAG,uBAAuB,GAAG,yBAAyB,GAAG,yBAAyB,GAAG,+BAA+B,GAAG,4BAA4B,GAAG,oDAAoD,GAAG,gCAAgC,GAAG,8BAA8B,GAAG,4BAA4B,GAAG,0BAA0B,GAAG,4BAA4B,GAAG,4BAA4B,GAAG,6BAA6B,GAAG,6BAA6B,GAAG,0BAA0B,GAAG,uBAAuB,KAAKuX,GAAG,CAAC,SAASzmL,EAAQ/3P,EAAOD,IAAS,SAAUs/Z,EAAQL,IAAS,SAASA,GAAqB,IAAIyf,EAAOhgb,OAAOC,UAAUC,eAAiC+/a,EAA+B,mBAAT39a,QAAqBA,OAAOirV,UAAU,aAAiB2yF,EAAyB,iBAAhB,IAAO3+a,EAAP,0BAAOA,IAAsB4+a,EAAQ5f,EAAO6f,mBAAmB,GAAGD,EAAYD,IAAU3+a,EAAOD,QAAQ6+a,OAAxC,EAAuDA,EAAQ5f,EAAO6f,mBAAmBF,EAAS3+a,EAAOD,QAAQ,IAA4NswT,KAAKA,EAA2H,IAAgKyuH,EAAiB,GAAkGC,EAAGC,EAA2Btgb,UAAUugb,EAAUvgb,UAAUwgb,EAAkBxgb,UAAUqgb,EAAG7xV,YAAY8xV,EAA2BA,EAA2B9xV,YAAYgyV,EAAkBA,EAAkB5ka,YAAY,oBAAoLska,EAAQO,oBAAoB,SAASC,GAAQ,IAAIC,EAAqB,mBAATD,GAAqBA,EAAOlyV,YAAY,QAAOmyV,IAAKA,IAAOH,GAAmD,uBAA/BG,EAAK/ka,aAAa+ka,EAAK7+a,QAAmCo+a,EAAQU,KAAK,SAASF,GAAuF,OAA/EA,EAAOjyH,UAAU6xH,EAA2BI,EAAO1gb,UAAUD,OAAO6C,OAAOy9a,GAAWK,GAAQR,EAAQW,MAAM,SAAS3O,GAAK,OAAO,IAAI4O,EAAc5O,IAA+2B6O,EAAsBC,EAAchhb,WAAWkgb,EAAQe,MAAM,SAASC,EAAQC,EAAQ7wa,EAAK8wa,GAAa,IAAIpa,EAAK,IAAIga,EAAcrvH,EAAKuvH,EAAQC,EAAQ7wa,EAAK8wa,IAAc,OAAOlB,EAAQO,oBAAoBU,GAASna,EAAKA,EAAK15P,OAAOpwI,MAAK,SAASv8B,GAAQ,OAAOA,EAAOsuR,KAAKtuR,EAAO4B,MAAMyka,EAAK15P,WAAupDyzQ,EAAsBV,GAAIA,EAAGL,GAAgB,WAAW,OAAO30a,MAAMg1a,EAAGl9Z,SAAS,WAAW,MAAM,sBAA6b+8Z,EAAQhka,KAAK,SAASlZ,GAAQ,IAAIkZ,EAAK,GAAG,IAAI,IAAIrZ,KAAOG,EAAQkZ,EAAK9b,KAAKyC,GAAoB,OAAfqZ,EAAKuuG,UAAiB,SAAS6iD,IAAO,KAAMpxJ,EAAKpc,QAAO,CAAC,IAAI+C,EAAIqZ,EAAK0jI,MAAM,GAAG/8I,KAAOG,EAAuC,OAA/BsqK,EAAK/qK,MAAMM,EAAIyqK,EAAK2hH,MAAK,EAAa3hH,EAAqB,OAAfA,EAAK2hH,MAAK,EAAY3hH,IAA6c4yQ,EAAQ1+Z,OAAOA,EAA+D6/Z,EAAQrhb,UAAU,CAACwuF,YAAY6yV,EAAQl5Y,MAAM,WAAW98B,KAAKu6E,KAAK,EAAEv6E,KAAKiiK,KAAK,EAAEjiK,KAAKi2a,UAA/yLjjX,EAA8zLhzD,KAAK4jR,MAAK,EAAM5jR,KAAKk2a,SAAS,KAAKl2a,KAAKm2a,WAAW/3a,QAAQg4a,GAAe,IAAI,IAAgBC,EAAZC,EAAU,EAAW5B,EAAO7/a,KAAKmL,KAAKq2a,EAAS,IAAIC,IAAYA,EAAU,KAAKA,EAAWt2a,KAAKq2a,GAAU,MAAOpyH,KAAK,WAAWjkT,KAAK4jR,MAAK,EAAK,IAAqC2yJ,EAAvBv2a,KAAKm2a,WAAW,GAA4BK,WAAW,GAAqB,UAAlBD,EAAWnra,KAAgB,MAAMmra,EAAW1P,IAAI,OAAO7ma,KAAKy2a,MAAMC,kBAAkB,SAASC,GAAW,GAAG32a,KAAK4jR,KAAM,MAAM+yJ,EAAU,IAAI7iR,EAAQ9zJ,KAAK,SAAS83C,EAAO8+X,EAAIC,GAAkE,OAA1D3sT,EAAO9+G,KAAK,QAAQ8+G,EAAO28S,IAAI8P,EAAU7iR,EAAQmO,KAAK20Q,IAAYC,EAAO,IAAI,IAAItib,EAAEyL,KAAKm2a,WAAW1hb,OAAO,EAAEF,GAAG,IAAIA,EAAE,CAAC,IAAI0ma,EAAMj7Z,KAAKm2a,WAAW5hb,GAAO21H,EAAO+wS,EAAMub,WAAW,GAAkB,SAAfvb,EAAM6b,OAAiB,OAAOh/X,EAAO,OAAO,GAAGmjX,EAAM6b,QAAQ92a,KAAKu6E,KAAK,CAAC,IAAIw8V,EAASrC,EAAO7/a,KAAKoma,EAAM,YAAgB+b,EAAWtC,EAAO7/a,KAAKoma,EAAM,cAAc,GAAG8b,GAAUC,EAAW,CAAC,GAAGh3a,KAAKu6E,KAAK0gV,EAAMgc,SAAU,OAAOn/X,EAAOmjX,EAAMgc,UAAS,GAAW,GAAGj3a,KAAKu6E,KAAK0gV,EAAMic,WAAY,OAAOp/X,EAAOmjX,EAAMic,iBAAkB,GAAGH,GAAU,GAAG/2a,KAAKu6E,KAAK0gV,EAAMgc,SAAU,OAAOn/X,EAAOmjX,EAAMgc,UAAS,OAAY,KAAGD,EAAiF,MAAM,IAAItnT,MAAM,0CAArF,GAAG1vH,KAAKu6E,KAAK0gV,EAAMic,WAAY,OAAOp/X,EAAOmjX,EAAMic,gBAAgFC,OAAO,SAAS/ra,EAAKy7Z,GAAK,IAAI,IAAItya,EAAEyL,KAAKm2a,WAAW1hb,OAAO,EAAEF,GAAG,IAAIA,EAAE,CAAC,IAAI0ma,EAAMj7Z,KAAKm2a,WAAW5hb,GAAG,GAAG0ma,EAAM6b,QAAQ92a,KAAKu6E,MAAMm6V,EAAO7/a,KAAKoma,EAAM,eAAej7Z,KAAKu6E,KAAK0gV,EAAMic,WAAW,CAAC,IAAIE,EAAanc,EAAM,OAAUmc,IAAsB,UAAPhsa,GAAuB,aAAPA,IAAoBgsa,EAAaN,QAAQjQ,GAAKA,GAAKuQ,EAAaF,aAAYE,EAAa,MAAK,IAAIltT,EAAOktT,EAAaA,EAAaZ,WAAW,GAAiH,OAA9GtsT,EAAO9+G,KAAKA,EAAK8+G,EAAO28S,IAAIA,EAAOuQ,EAAcp3a,KAAKiiK,KAAKm1Q,EAAaF,WAAgBl3a,KAAKshJ,SAASp3B,GAAe6qT,GAAkBzzR,SAAS,SAASp3B,EAAOmtT,GAAU,GAAiB,UAAdntT,EAAO9+G,KAAgB,MAAM8+G,EAAO28S,IAAqB,UAAd38S,EAAO9+G,MAA8B,aAAd8+G,EAAO9+G,KAAmBpL,KAAKiiK,KAAK/3C,EAAO28S,IAA0B,WAAd38S,EAAO9+G,MAAiBpL,KAAKy2a,KAAKvsT,EAAO28S,IAAI7ma,KAAKiiK,KAAK,OAA4B,WAAd/3C,EAAO9+G,MAAiBisa,IAAUr3a,KAAKiiK,KAAKo1Q,IAAWC,OAAO,SAASJ,GAAY,IAAI,IAAI3ib,EAAEyL,KAAKm2a,WAAW1hb,OAAO,EAAEF,GAAG,IAAIA,EAAE,CAAC,IAAI0ma,EAAMj7Z,KAAKm2a,WAAW5hb,GAAG,GAAG0ma,EAAMic,aAAaA,EAAgF,OAApEl3a,KAAKshJ,SAAS25Q,EAAMub,WAAWvb,EAAMoc,UAAUjB,EAAcnb,GAAc8Z,IAAoB,MAAQ,SAAS+B,GAAQ,IAAI,IAAIvib,EAAEyL,KAAKm2a,WAAW1hb,OAAO,EAAEF,GAAG,IAAIA,EAAE,CAAC,IAAI0ma,EAAMj7Z,KAAKm2a,WAAW5hb,GAAG,GAAG0ma,EAAM6b,SAASA,EAAO,CAAC,IAAI5sT,EAAO+wS,EAAMub,WAAW,GAAiB,UAAdtsT,EAAO9+G,KAAe,CAAC,IAAImsa,EAAOrtT,EAAO28S,IAAIuP,EAAcnb,GAAO,OAAOsc,GAAQ,MAAM,IAAI7nT,MAAM,0BAA0B8nT,cAAc,SAASlc,EAASmc,EAAWC,GAAyF,OAAhF13a,KAAKk2a,SAAS,CAACj0F,SAAS9rU,EAAOmlZ,GAAUmc,WAAWA,EAAWC,QAAQA,GAAgB3C,IAAvpQ,SAASzuH,EAAKuvH,EAAQC,EAAQ7wa,EAAK8wa,GAAa,IAAI4B,EAAUjjb,OAAO6C,QAAQu+a,GAASZ,GAAWvgb,WAA+F,OAApFgjb,EAAUC,QAAs5E,SAA0B/B,EAAQ5wa,EAAK6uJ,GAAS,IAAI/sJ,EAA5sE,iBAAyuE,OAAO,SAAgB6mS,EAAOi5H,GAAK,GAAzrE,cAA4rE9/Z,EAA2B,MAAM,IAAI2oH,MAAM,gCAAgC,GAAruE,cAAwuE3oH,EAA2B,OAAO8wa,IAAa,OAAW,CAAC,IAAI3B,EAASpiR,EAAQoiR,SAAS,GAAGA,EAAS,CAAC,GAAY,WAATtoI,GAA4B,UAATA,QAApmG56O,IAAsnGkjX,EAASj0F,SAASr0C,GAAoB,CAAC95I,EAAQoiR,SAAS,KAAK,IAAI4B,EAAa5B,EAASj0F,SAAT,OAA4B,GAAG61F,EAAsE,GAAiB,WAArE5tT,EAAO6tT,EAASD,EAAa5B,EAASj0F,SAAS4kF,IAAez7Z,KAAe,CAACwiS,EAAO,QAAQi5H,EAAI38S,EAAO28S,IAAI,SAAU,GAAY,WAATj5H,EAAmB,SAAU,IAAI1jL,EAAiE,GAAiB,WAAlFA,EAAO6tT,EAAS7B,EAASj0F,SAASr0C,GAAQsoI,EAASj0F,SAAS4kF,IAAez7Z,KAAe,CAAC0oJ,EAAQoiR,SAAS,KAAKtoI,EAAO,QAAQi5H,EAAI38S,EAAO28S,IAAI,SAAyD,GAAhDj5H,EAAO,OAAOi5H,OAArjH7zW,IAAukH12B,EAAK4tF,EAAO28S,KAAYjjJ,KAA8G,OAA7B78Q,EAAz/F,iBAA6hGu1B,EAA/Gw3H,EAAQoiR,EAASuB,YAAYn7Y,EAAKplC,MAAM48J,EAAQmO,KAAKi0Q,EAASwB,QAAsD5jR,EAAQoiR,SAAS,KAAK,GAAY,SAATtoI,EAA3jG,mBAA+kG7mS,EAAgC+sJ,EAAQmiR,KAAKpP,SAAgB/yQ,EAAQmiR,UAAW,GAAY,UAATroI,EAAiB,CAAC,GAAhuG,mBAAmuG7mS,EAAwD,MAAxBA,EAA9oG,YAA4qG8/Z,EAAO/yQ,EAAQ4iR,kBAAkB7P,KAAMj5H,EAAO,OAAOi5H,OAAj+H7zW,OAAigI,WAAT46O,GAAmB95I,EAAQqjR,OAAO,SAAStQ,GAAuE,GAAlE9/Z,EAA10G,YAA65G,YAAvDmjH,EAAO6tT,EAASlC,EAAQ5wa,EAAK6uJ,IAAmB1oJ,KAAgB,CAACrE,EAAM+sJ,EAAQ8vH,KAAn5G,YAAzE,iBAA0gH,IAAItnP,EAAK,CAACplC,MAAMgzH,EAAO28S,IAAIjjJ,KAAK9vH,EAAQ8vH,MAAM,GAAG15J,EAAO28S,MAAMkO,EAA4E,OAAOz4Y,EAA9Dw3H,EAAQoiR,UAAmB,SAATtoI,IAAiBi5H,OAAvzI7zW,OAA82I,UAAdk3D,EAAO9+G,OAAgBrE,EAAvnH,YAA+oH6mS,EAAO,QAAQi5H,EAAI38S,EAAO28S,OAAphImR,CAAiBnC,EAAQ5wa,GAAM,KAAK,IAAI+wa,EAAQD,GAAa,KAAY4B,EAA4B,SAASI,EAASve,EAAG/iZ,EAAIowZ,GAAK,IAAI,MAAM,CAACz7Z,KAAK,SAASy7Z,IAAIrN,EAAG3ka,KAAK4hB,EAAIowZ,IAAM,MAAM9ua,GAAK,MAAM,CAACqT,KAAK,QAAQy7Z,IAAI9ua,IAA0L,SAASm9a,KAAa,SAASC,KAAqB,SAASF,KAA+Q,SAASS,EAAsB/gb,GAAW,CAAC,OAAO,QAAQ,UAAUyJ,SAAQ,SAASwvS,GAAQj5S,EAAUi5S,GAAQ,SAASi5H,GAAK,OAAO7ma,KAAK43a,QAAQhqI,EAAOi5H,OAAqY,SAAS4O,EAAc5O,GAAK7ma,KAAK6ma,IAAIA,EAAI,SAAS8O,EAAcgC,GAAW,SAAS7W,EAAOlzH,EAAOi5H,GAAK,IAAIvxa,EAAOqib,EAAU/pI,GAAQi5H,GAAS3va,EAAM5B,EAAO4B,MAAM,OAAOA,aAAiBu+a,EAAcr/a,QAAQC,QAAQa,EAAM2va,KAAKh1Y,KAAKomZ,EAAWC,GAAa9hb,QAAQC,QAAQa,GAAO26B,MAAK,SAASsmZ,GAAkC,OAAvB7ib,EAAO4B,MAAMihb,EAAiB7ib,IAAQ4ib,GAAiC,iBAAjB,IAAO5iB,EAAP,0BAAOA,KAAoBA,EAAQj6Z,SAAQyla,EAAOxL,EAAQj6Z,OAAO5D,KAAKqpa,IAAQ,IAAiJsX,EAA7IH,EAAWnX,EAAOrpa,KAAKkgb,EAAU,QAAYO,EAAYpX,EAAOrpa,KAAKkgb,EAAU,SAAaU,EAAavX,EAAOrpa,KAAKkgb,EAAU,UAA+R33a,KAAK43a,QAAtQ,SAAiBhqI,EAAOi5H,GAAK,IAAIyR,EAAcF,EAAgBA,EAAgBvmZ,MAAK,WAAW,OAAOivY,EAAOlzH,EAAOi5H,MAAO,IAAIzwa,SAAQ,SAASC,GAASA,EAAQyqa,EAAOlzH,EAAOi5H,OAA6D,OAArDuR,EAAgBE,EAAA,MAAuBD,GAAqBC,GAAqlE,SAASC,EAAaC,GAAM,IAAIvd,EAAM,CAAC6b,OAAO0B,EAAK,IAAO,KAAKA,IAAMvd,EAAMgc,SAASuB,EAAK,IAAM,KAAKA,IAAMvd,EAAMic,WAAWsB,EAAK,GAAGvd,EAAMoc,SAASmB,EAAK,IAAGx4a,KAAKm2a,WAAWphb,KAAKkma,GAAO,SAASmb,EAAcnb,GAAO,IAAI/wS,EAAO+wS,EAAMub,YAAY,GAAGtsT,EAAO9+G,KAAK,gBAAgB8+G,EAAO28S,IAAI5L,EAAMub,WAAWtsT,EAAO,SAAS8rT,EAAQD,GAAa/1a,KAAKm2a,WAAW,CAAC,CAACW,OAAO,SAASf,EAAY33a,QAAQm6a,EAAav4a,MAAMA,KAAK88B,QAA+P,SAAS3mB,EAAOmlZ,GAAU,GAAGA,EAAS,CAAC,IAAImd,EAAend,EAASqZ,GAAgB,GAAG8D,EAAgB,OAAOA,EAAe5jb,KAAKyma,GAAU,GAA0B,mBAAhBA,EAASr5P,KAAmB,OAAOq5P,EAAS,IAAI5pZ,MAAM4pZ,EAAS7ma,QAAQ,CAAC,IAAIF,GAAG,EAAE0tK,EAAK,SAASA,IAAO,OAAQ1tK,EAAE+ma,EAAS7ma,QAAQ,GAAGigb,EAAO7/a,KAAKyma,EAAS/ma,GAA2C,OAAvC0tK,EAAK/qK,MAAMoka,EAAS/ma,GAAG0tK,EAAK2hH,MAAK,EAAa3hH,EAA0C,OAApCA,EAAK/qK,WAAjjL87D,EAAikLivG,EAAK2hH,MAAK,EAAY3hH,GAAM,OAAOA,EAAKA,KAAKA,GAAM,MAAM,CAACA,KAAK41Q,GAAkC,SAASA,IAAa,MAAM,CAAC3gb,WAA/rL87D,EAA+sL4wN,MAAK,IAAjyL,CAA+hR,iBAAhB,IAAOqxI,EAAP,0BAAOA,IAAkBA,EAAuB,YAAhB,oBAAO98Z,OAAP,0BAAOA,SAAkBA,OAAqB,YAAd,oBAAO8M,KAAP,0BAAOA,OAAgBA,KAAKjF,QAAQnL,KAAKmL,KAAKguP,EAAQ,iBAA4B,IAATinK,EAAqBA,EAAqB,oBAAPhwZ,KAAmBA,KAAqB,oBAAT9M,OAAqBA,OAAO,KAAK,CAAC6+Z,SAAS,KAAK,GAAG,CAAC,M,kKCHlqpB,MAEA,Q,IAIA,SAEA,SACA,Q,mDAUA,GAAG7+Z,OAAO43Y,MAAQ53Y,OAAO43Y,KAAKjrV,QAAwB,oBAAP8qV,GAAoB,CACjE53Y,QAAQ4B,IAAI,oCACZ,IAEEzB,OAAO43Y,KAAKjrV,QAAO,WACjB3sD,OAAO43Y,KAAKjrV,OAAOmgL,OAAOyzM,UAAU9oC,GAAG3qK,OACnC,CAACxuO,KAAO,mCACRkib,OAAQ,WACN3gb,QAAQ4B,IAAI,2DACZzB,OAAOw3Y,kBAAmB,EAC1Bx3Y,OAAO43Y,KAAKjrV,OAAOmgL,OAAO+qK,QAAQJ,GAAG3qK,OAAQ,CAC3CxuO,KAAM,4BACNoqB,SAAS,OAIf1oB,OAAO43Y,KAAKjrV,OAAOmgL,OAAO+qK,QAAQJ,GAAG3qK,OAAQ,CAC3CxuO,KAAM,+BACNoqB,SAAS,IAGX7oB,QAAQ4B,IAAI,gCACZzB,OAAO43Y,KAAKjrV,OAAOmgL,OAAO+qK,QAAQJ,GAAG3qK,OAAQ,CAC3CxuO,KAAM,mCACNoqB,SAAS,OAGf,MAAMzU,GACNpU,QAAQ4B,IAAI,oDAAqDwS,IAIrEjU,OAAO0uD,iBAAiB,WAAW,SAAC+5C,GAE9BA,EAAM3sG,MAA4B,qCAApB2sG,EAAM3sG,KAAKwC,OAC3BuB,QAAQ4B,IAAI,mBAAoBgnG,GAChCzoG,OAAO83Y,YAAcrvS,EAAM7/D,OAC3B5oC,OAAOw3Y,kBAAmB,M,IAMTipC,E,YAEnB,WAAYttU,IAAO,gGACXA,IADW,OAuBjB,IAAAy7G,sBAEI,IAAA/vK,0BACF59C,SAAS6C,KAAKC,UAAU27K,OAAO,YAC/Bz+K,SAAS6C,KAAKC,UAAUC,IAAI,gBACnB,IAAAyhJ,6BACTxkJ,SAAS6C,KAAKC,UAAU27K,OAAO,YAC/Bz+K,SAAS6C,KAAKC,UAAUC,IAAI,gBACnB,IAAA0hJ,+BACTzkJ,SAAS6C,KAAKC,UAAU27K,OAAO,YAC/Bz+K,SAAS6C,KAAKC,UAAUC,IAAI,cACnB,IAAA24C,sBACT17C,SAAS6C,KAAKC,UAAU27K,OAAO,YAC/Bz+K,SAAS6C,KAAKC,UAAUC,IAAI,mBACnB,IAAAu4C,mBACTt7C,SAAS6C,KAAKC,UAAUC,IAAI,cACnB,IAAAuiJ,qBACTtlJ,SAAS6C,KAAKC,UAAUC,IAAI,gBAE9BnE,QAAQ4B,IAAI,qCAAsCR,SAASC,SAASoC,gBACpEzD,QAAQ4B,IAAI,qCAAsCR,SAASC,SAASsC,gBAC/DvC,SAASC,SAAS2b,YACrB5b,SAASC,SAAS2b,UAAY7c,OAAO2B,SAASC,KAAKI,SAAS,mBAE9Df,SAASggN,SAAW,CAClB,iBAAyD,OAArChgN,SAASC,SAASoC,gBAAgE,aAArCrC,SAASC,SAASoC,gBAhDpE,E,yEA8DjB,OACE,0CACE,6C,GAlEyB,UAAMowG,W,UAAlB+sU,G,gJC9DrB,O,OACA,O,IACA,OACA,QACA,QAEA,QAKA,QAEA,Q,OACA,QAGA,U,IAEA,S,IACA,SACA,QACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,S,IACA,S,IACA,S,IAEA,S,IACA,S,IACA,SACA,Q,IACA,S,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,S,IACA,SACA,S,uDAEMC,E,YAEJ,WAAYvtU,GAAO,4GACXA,IAON,GARiB,EA6GnBwtU,wBA7GmB,6BA6GM,oGACnB1/a,SAASC,SAAS4b,MADC,iCAEK,IAAA47G,gBAAez3H,SAASC,SAAS4b,MAAO,EAAKq2F,MAAMwlB,WAFxD,QAEfuyG,EAFe,SAGFA,EAAYpvO,MAAQovO,EAAYpvO,KAAK+1H,SAAWq5G,EAAYpvO,KAAK+1H,QAAQ,IAAMq5G,EAAYpvO,KAAK+1H,QAAQ,GAAG/1H,OACtH8kb,EAAa11M,EAAYpvO,KAAK+1H,QAC9BpzG,EAAUysN,EAAYpvO,KAAK+1H,QAAQ,GAAG/1H,KACtCgZ,EAAmB2J,EAAQ3J,kBAAoB,EACjD8ra,EAAW9ra,IAAqB8ra,EAAW9ra,GAAkBhZ,MAAQ8kb,EAAW9ra,GAAkBhZ,KAAKwH,gBACrGs9a,EAAW9ra,GAAkBhZ,KAAKwH,iBAAmBrC,SAASC,SAASoC,iBAC3ErC,SAASC,SAASoC,eAAiBs9a,EAAW9ra,GAAkBhZ,KAAKwH,eACrErC,SAASC,SAASqC,YAAcq9a,EAAW9ra,GAAkBhZ,KAAKyH,aAClE,IAAAqrN,qBACA,EAAKz7G,MAAMxjF,sBACX9vB,QAAQ4B,IAAI,2DAA4DR,SAASC,SAASoC,kBAbzE,gCAiBhBrF,QAAQC,WAjBQ,6CA7GN,EAiInBk/P,iBAAmB,SAAC30J,GACdA,GAASA,EAAM3sG,MAAQ2sG,EAAM3sG,KAAKysC,SAAW,EAAAlkC,cAAcC,mBAC7D,EAAK6uG,MAAM+1E,YAAYzgF,EAAM3sG,KAAK4sB,QAAQotG,WAnI3B,EAuInB+xG,gBAAkB,WAChB,EAAKhd,eAxIY,EA2InBg2N,mBA3ImB,6BA2IC,2FAClB,IAAApyZ,gBADkB,UAEZ,IAAAosG,8BAFY,6CA3ID,EAiJnBimT,oBAAsB,WAKpBvqV,YAJ8B,SAAxBwqV,KACJ,IAAA7sT,iBACA,EAAK8sT,gBAAkBzqV,WAAWwqV,EAAuB,OAEzB,MAtJjB,EAyJnBE,qBAAuB,WACrBz3R,aAAa,EAAKw3R,kBA1JD,EA6JnBhuL,aAAe,WACbxpG,aAAa,EAAK0/P,UAClB,EAAKA,SAAW3yT,WAAW,EAAK2qV,eAAgB,MA/J/B,EAqKnBC,mBAAqB,WACnB33R,aAAa,EAAK43R,gBAClB,EAAKA,eAAiB7qV,WAAW,EAAK8qV,gBAAiB,MAvKtC,EA0KnBH,eAAiB,WACf,EAAK/tU,MAAM5qF,gBAAe,aAAEvoB,QAAQwH,SACpC,EAAK2rG,MAAMrqF,iBAAgB,aAAE9oB,QAAQ0H,WA5KpB,EA+KnB25a,gBAAkB,WAChB,EAAKluU,MAAMrqF,gBAAgB9oB,OAAO+xD,YAAc9wD,SAAS6C,KAAKgrK,YAhL7C,EAmLnBwyQ,cAAgB,WAEd,IAAK,EAAKnuU,MAAM02E,mBAAqB,EAAK12E,MAAMnzF,eAAe8gQ,UACzD7/Q,SAASC,SAAS8mT,qBAAuB,EAAK70M,MAAMukJ,oBACxD,OAAO,KAGT,OAAQz2P,SAASC,SAASoC,gBACxB,IAAK,UACL,IAAK,KACH,OAAO,wCACT,IAAK,WACL,IAAK,KACH,OAAO,wCAGT,IAAK,UACH,OAAO,wCACT,IAAK,UACH,OAAO,wCACT,IAAK,SACH,OAAO,wCACT,IAAK,YACH,OAAO,wCACT,IAAK,cACH,OAAO,mCAAkByf,OAAA,YAC3B,QACE,OAAO,OA5MX,EAAKmmY,SAAW,EAChB,EAAKk4B,eAAiB,EACtB,EAAKJ,gBAAkB,EACvB,EAAKpya,MAAQ,CACX2ya,QAAS,UAAO54a,0BAEd,EAAKiG,MAAM2ya,QAAS,CACtB,EAAKpuU,MAAM9kF,8BAA6B,IACnCruB,OAAO2B,SAASC,KAAKI,SAAS,iBAA/B,aACF,EAAA+3B,YAAYn9B,KAAK,cAEnB,EAAKu2G,MAAMzmF,eAAc,GACzB,EAAKymF,MAAMtmF,eAAc,GACzB,IACE7sB,OAAOwhb,eAAe1lU,QAAQ,kBAAkB,GAChD,MAAO7nG,GAAMpU,QAAQ4B,IAAIwS,GAC3BhT,SAASC,SAASo4F,gBAAiB,EAlBpB,S,iOAuBXzxF,KAAK84a,yB,cACX94a,KAAKsrG,MAAMk2E,yBAAyBpoL,SAASC,SAASoC,gBAChD2b,EAAM,IAAIC,IAAIlf,OAAO2B,SAASC,MAChCo6G,KAAKC,MAAMh9F,EAAIE,aAAaxgB,IAAI,gBAClCu5P,MAASl4P,OAAOwqD,WAAhB,MAAgCxqD,OAAO+xD,cAEzC,aAAE/xD,QAAQwqG,GAAG,SAAU3iG,KAAKmrP,cAC5BnrP,KAAKq5a,kBACD,IAAAl1a,qBACFhM,OAAO0uD,iBAAiB,SAAU7mD,KAAKw5a,iBACvCpgb,SAAS6C,KAAKC,UAAUC,IAAI,cAC5B6D,KAAKw5a,kBACL9qV,YAAW,WACL,EAAK4c,MAAM3qF,YAAc,MAC3B,aAAE,cAAc6sE,QAAQ,CAACy5E,UAAW,GAAI,OAEzC,MAED7tK,SAASC,SAAS4b,OAASjV,KAAKsrG,MAAMnoF,SAAS/pB,SAASC,SAAS4b,QACjE,IAAA5Q,gBAAiBjL,SAAS6C,KAAKC,UAAUC,IAAI,YAC7C,IAAAoI,aAAcnL,SAAS6C,KAAKC,UAAUC,IAAI,eAC1C,IAAAsI,cAAerL,SAAS6C,KAAKC,UAAUC,IAAI,gBAC3C,IAAA4I,cAAe3L,SAAS6C,KAAKC,UAAUC,IAAI,gBAC3C,IAAA6I,aAAc5L,SAAS6C,KAAKC,UAAUC,IAAI,eAC1C,IAAAiJ,SAAUhM,SAAS6C,KAAKC,UAAUC,IAAI,WACtC,IAAAoJ,cAAenM,SAAS6C,KAAKC,UAAUC,IAAI,eAC/C,eACE/C,SAAS6C,KAAKC,UAAUC,IAAI,gBAC5B6D,KAAKsrG,MAAMzmF,eAAc,GACzB7kB,KAAKsrG,MAAMtmF,eAAc,GACzBhlB,KAAKsrG,MAAM9kF,8BAA6B,IACnCruB,OAAO2B,SAASC,KAAKI,SAAS,eAA/B,aACF,EAAA+3B,YAAYn9B,KAAK,eAGrBiL,KAAKg5a,oB,WACC,IAAApyG,qBAAoBxvT,G,QAC1BpX,KAAKsrG,MAAMxjF,sBACX,IACE3vB,OAAOwhb,eACP,MAAOvta,GACPpM,KAAKsrG,MAAMxqF,oBAAoB,kBAEjC,IACE3oB,OAAO67G,aACP,MAAO5nG,GACPpM,KAAKsrG,MAAMxqF,oBAAoB,iBAGmB,IAAhD3oB,OAAO2B,SAASC,KAAKC,QAAQ,eAC/B7B,OAAO0uD,iBAAiB,UAAW7mD,KAAKu1P,kB,4IAM1C,aAAEp9P,QAAQ8gO,IAAI,SAAUj5N,KAAKmrP,cAC7BhzP,OAAO+qG,oBAAoB,UAAWljG,KAAKu1P,mBACvC,IAAApxP,oBACFhM,OAAO+qG,oBAAoB,SAAUljG,KAAKs5a,sB,gDAIpB16P,GACpBA,EAAUn4J,WAAazmB,KAAKsrG,MAAM7kF,UAAYtuB,OAAOwqD,WAAa,MACpEvpD,SAASg9F,cAAc,SAASl6F,UAAUC,IAAI,aAC9C,aAAEhE,QAAQ+pG,QAAQ,gBAClB/pG,OAAOyoQ,cAAe,EAEtBlyK,YAAW,WACTt1F,SAAS6C,KAAKC,UAAUC,IAAI,aAC5B,aAAEhE,QAAQ+pG,QAAQ,WAClB,aAAE/pG,QAAQg8C,WAKT,KAEDyqI,EAAU3pK,OAAUjV,KAAKsrG,MAAMr2F,OAAU7b,SAASC,SAAS4b,MAEnD2pK,EAAU3pK,QAASjV,KAAKsrG,MAAMr2F,OAAU7b,SAASC,SAAS4b,OACpEjV,KAAKo5a,uBAFLp5a,KAAKi5a,wB,+BA2GA,MACgCj5a,KAAKsrG,MAArCw2E,EADA,EACAA,aACDhwK,EAFC,EACcqG,eACqBzQ,SAE1C,OACE,+BAAKkjF,UAAW,QACX5qF,KAAKsrG,MAAM7kF,SAAW,YAAc,KACpCzmB,KAAKsrG,MAAMrhF,gBAAkB,sBAAwB,KACrDjqB,KAAK+G,MAAM2ya,QAAU,yBAA2B,KAChD15a,KAAKsrG,MAAM24N,qBAAuB,oBAAsB,KAC1D,EAAAloU,UAAY,wCAAe,KAC5B,sCACE,iCAAOs9G,KAAM,EAAA9jG,OAAOsnB,OAClB,yCAEF,iCAAOw8E,KAAM,EAAA9jG,OAAO2vF,MAClB,yCAEF,iCAAOmU,KAAM,EAAA9jG,OAAO4vF,mBAClB,yCAEF,iCAAOkU,KAAM,EAAA9jG,OAAO6vF,gBAClB,0CAGFplG,KAAKsrG,MAAM3gF,uBAAyB,wCAA2B,KAChE7Y,EAAmB8rB,cAAgB,EAAD,mBAAsB,wCAAsB,KAC/E,+BAAKgtD,UAAU,QACZ5qF,KAAKy5a,gBACL,EAAA39a,YACC,+BAAK8uF,UAAU,uBACZ,EAAAhvF,mBACG,mCAAiBkmL,aAAcA,IAC/B,mCAAgBA,aAAcA,IAClC,wCACG,SAACi8H,GAAD,OAAsB,mCAAeA,iBAAkBA,OAE1D,yCAEA,KACH3kT,SAASC,SAASiwU,oBAAsB,wCAA2B,MAErE,EAAAvtU,UAAY,wCACX,wCACE,wCACA,yCAGH,EAAA9B,gBAAkB,wCAAsB,U,gBA2B3Cq2L,GAAqB,CACzB9pK,4DACA9F,gCACAO,kCACA4D,8BACAG,8BACA7B,oBACAgtI,4DACAU,8DACA/oI,0CACAhH,0CACAugK,0BACAG,qD,WAGa,IAAA11E,UApCS,SAACxzG,GAAU,MACyBA,EAAMwc,UAAzDg8G,EAD0B,EAC1BA,UAAW7mG,EADe,EACfA,gBAAiBhV,EADF,EACEA,MAAOiM,EADT,EACSA,aADT,EAE8B5oB,EAAMgR,YAA9Dw4K,EAF0B,EAE1BA,aAAcE,EAFY,EAEZA,iBAAkBI,EAFN,EAEMA,qBAEvC,MAAO,CACLh1J,aAAc90B,EAAM8J,UAAUgrB,aAC9B3G,SAAUnuB,EAAMouB,wBAAwBD,SACxCwD,kBACAg6S,qBAAsB3rU,EAAM8J,UAAU6hU,qBACtCp0E,oBAAqBv3P,EAAM+sO,iBAAiBwqB,oBAC5C13O,eAAgB7f,EAAMqN,gBACtBmrH,YACA77G,QACAiM,eACA4gK,eACAE,mBACAr3J,uBAAwBryB,EAAMyV,UAAU4c,uBACxCy3J,0BAmBoCkO,GAAzB,CAA6CuoP,I,8HCpW5D,O,OACA,OACA,QACA,QAIA,Q,IAMA,Q,IACA,S,IACA,S,IACA,Q,IACA,Q,IACA,Q,IAEA,Q,IACA,QACA,S,IACA,QACA,Q,uDAEMe,G,gBAKJ,WAAYtuU,IAAO,gGACXA,IADW,OAEjB,EAAKpwF,OAAS,EAAKowF,MAAMpwF,OAFR,E,oFAKC,WAClB,GAAIlb,KAAKsrG,MAAME,kBAAkBrxG,SAAS6F,KAAKkb,OAAOzf,gBAEpD,OADAuE,KAAK+sU,kBACE,GAET,IAAAnmT,gBACAxwB,QAAQ64I,IAAI,EACV,IAAAnf,8BACA,IAAAgD,iBAAgB9yH,KAAKkb,OAAOqmE,kCAC3B1vD,MAAK,SAAAm7S,GACN52U,QAAQ64I,IAAI,CACV74I,QAAQC,QAAQ22U,EAAa,KAC7B,IAAAv7M,eACAr7H,QAAQC,QAAQ22U,EAAa,MAE5Bn7S,MAAK,SAACwhK,GACL,IAAMnf,EAAemf,EAAY,GAC3B2iJ,EAAmB3iJ,EAAY,GAAGp/L,KAClC+nB,EAAeq3K,EAAY,GAIjC,OAFA,EAAKn4K,OAAOsmG,gBAAgB0yD,GAC5B,EAAKh5J,OAAO4qN,oBAAoBkwG,GACzB,EAAK/I,kBAAkB/4J,EAAc8hK,EAAkBh6T,MAE/D6V,KAAK,EAAKuxM,eACVvxM,KAAK,EAAKqxM,UACVrxM,KAAK,EAAKmyM,kBAGfhkO,KAAK+sU,kBACL,IAAAj5M,sBAAqB,Q,+BAGd,WAEP,IAAK,EAAD,UACF,OAAO,KAHF,IAMArzH,EAAYT,KAAKsrG,MAAjB7qG,SACD04M,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBACzDvnM,EAAqB9R,KAAKsrG,MAAMx5F,mBAChCmuG,EAASjgH,KAAKkb,OAAOo+L,UAAUH,GAC/Bj6L,EAAalf,KAAKkb,OAAOwmE,uBACzBwrP,EAAeltU,KAAKylO,sBAE1B,OACE,+BAAK76I,UAAW,QACX5qF,KAAKsrG,MAAMivC,wBAA0B,oBAAsB,KAC3Dv6I,KAAKsrG,MAAMqvC,2BAA6B,UAAY36I,KAAKsrG,MAAMqvC,2BAA6B,KAC5F36I,KAAKsrG,MAAMsvC,0BAA4B,UAAY56I,KAAKsrG,MAAMsvC,0BAA4B,KAE7F,+BAAKhwD,UAAU,WACZ5qF,KAAKsrG,MAAM7kF,UAAYzmB,KAAKsrG,MAAM3kF,UACjC,wCACE,mCAAsBs5F,OAAQA,EACRrwB,SAAU5vF,KAAK+G,MAAM6oF,SACrBowD,IAAK,SAACkkI,GAAD,OAAU,EAAK3vK,YAAc2vK,GAClChlQ,WAAYA,EACZhE,OAAQlb,KAAKkb,OACbvb,MAAOK,KAAKsrG,MAAMvjF,iBAAiBpoB,MACnCE,OAAQG,KAAKsrG,MAAMvjF,iBAAiBloB,OACpC2mO,iBAAkBxmO,KAAKsrG,MAAMk7H,iBAC7BC,aAAczmO,KAAKsrG,MAAMm7H,eAE/C,yCAEA,KACJ,mCAAa5E,SAAU7hO,KAAK6hO,SACf7yM,sBAAuBhvB,KAAKgvB,sBAC5B6vM,gBAAiB7+N,KAAK6+N,gBACtBjvI,SAAU5vF,KAAK+G,MAAM6oF,YAEhC5vF,KAAK+G,MAAM48N,kBAAoB3jO,KAAKsrG,MAAM1b,SAC1C,mCAAY+6J,eAAgB3qP,KAAKkb,OAAOuZ,cAC5BvV,WAAYlf,KAAKkb,OAAO9P,KACxBwkF,SAAU5vF,KAAK+G,MAAM6oF,WAC/B,MAEJ5vF,KAAKkb,OAAOia,aAAen1B,KAAKsrG,MAAM3kF,UACtClmB,EACE,mCAAkB8zN,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BoE,eAAgB1+N,KAAK0+N,eACrBG,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpBsD,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnCwnN,oBAAqB58N,KAAK48N,sBAG5C,mCAAmB58E,IAAK,SAACkkI,GAAD,OAAU,EAAKjhD,OAASihD,GAC7B3vD,UAAWv0N,KAAKgjO,cAChBrG,gBAAiB38N,KAAK28N,gBACtB/sI,SAAU5vF,KAAK+G,MAAM6oF,SACrB0qI,yBAA0Bt6N,KAAKs6N,yBAC/BtxM,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5BgG,sBAAuBhvB,KAAKgvB,sBAC5B9I,iBAAkBlmB,KAAKkmB,iBACvBC,cAAenmB,KAAK+G,MAAMof,cAC1BrU,mBAAoBA,EACpB8qN,oBAAqB58N,KAAK48N,sBAG7C,KACH58N,KAAKsrG,MAAM/pF,eAAiB,mCAAYxa,MAAO/G,KAAK+G,MAAMkoB,kBAAqB,KAC/Ei+S,EAAe,mCAAoBzsU,SAAUA,IAAc,U,gBAvH3D8P,YAAc,G,cA8JR,IAAAu7F,UAjCS,SAACxzG,GAAU,MACkCA,EAAMgR,YAAlEiY,EAD0B,EAC1BA,eAAgBZ,EADU,EACVA,YAAa6qF,EADH,EACGA,kBAAmB/qG,EADtB,EACsBA,SADtB,EAEwDnI,EAAMouB,wBAAxFD,EAF0B,EAE1BA,SAAUE,EAFgB,EAEhBA,UAAWipE,EAFK,EAELA,SAAUhoE,EAFL,EAEKA,iBAAkBG,EAFvB,EAEuBA,iBAAkBo7L,EAFzC,EAEyCA,YAFzC,EAGmE7qN,EAAMu1I,gBAAnGizF,EAH0B,EAG1BA,UAAWvmF,EAHe,EAGfA,wBAAyBI,EAHV,EAGUA,2BAA4BC,EAHtC,EAGsCA,0BAHtC,EAIgBtiJ,EAAMwc,UAAhDM,EAJ0B,EAI1BA,uBAAwB4U,EAJE,EAIFA,eAJE,EAKgC1xB,EAAMyvO,cAAhEr3E,EAL0B,EAK1BA,2BAA4BI,EALF,EAKEA,2BALF,EAMiCx4J,EAAM+sO,iBAAjEf,EAN0B,EAM1BA,sBAAuBgB,EANG,EAMHA,gBAAiBjB,EANd,EAMcA,gBAC/C,MAAO,CACL59M,WACAE,YACAm6M,YACA1rN,yBACA4U,iBACArJ,cACAlgB,WACAmvF,WACA99E,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C6yI,0BACAI,6BACAC,4BACAhzH,mBACA8oI,6BACAI,6BACAwzE,wBACAgB,kBACAjB,kBACA9iN,iBACAwG,mBACAyjF,oBACA23G,iBAIoC,CACtCh2L,kCACA3G,4DACArC,oDACAX,wCACAwF,kCACAvB,0BACA4H,0BACA7K,wDACAwK,8CACAyhI,gDACAhvI,6CAXa,CAYZm4Z,I,0HCvMH,O,OACA,O,IACA,O,IACA,OAEA,QAUA,Q,IAKA,QACA,Q,IAEA,QACA,QACA,U,WACA,QACA,S,IACA,QACA,Q,IACA,Q,uDAEMjpD,E,yOAEJz2H,gBAAkB,SAACt5J,GAIjB,GAFA,EAAK0K,MAAMqxH,gBAAgB/7H,GAEvBxnG,SAASuzN,aAAc,CAEzB,GAAI,EAAK8zK,oBAAoBrnY,SAASuzN,aAAc/rH,GAClD,OAAO,EAGT,IAAM8/R,EAAgBtnY,SAASuzN,aAAarmN,OAE5C,GAAIo6X,EAAe,CACc,IAA3B,EAAK35X,MAAMoxN,aACb,EAAK76C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzB8tK,aAAc,KACb,WACD,EAAK0L,sBACL,EAAK5wH,aACL/Y,YAAW,YACT,aAAEt1F,UAAUupG,GAAG,QAAS,EAAKm7E,qBAC5B,MAIP,IACMlhK,GADS,IAAAzB,oBACa+a,wBAAwBwqW,GAChD9jX,GACF,EAAKw7M,0BAA0Bx7M,EAAaf,SAAUe,EAAalc,YAAYmb,a,EAOvF4kX,oBAAsB,SAAC9zK,GACrB,GAAI,EAAKrhH,MAAM/sC,YAAYmyC,OAIzB,OAHA,EAAKpF,MAAMhtC,mBAAmB,CAC5BoyC,QAAQ,KAEH,EAET,IAAKi8G,EACH,OAAO,EAR6B,IAW/Bn2G,GAAe,IAAAH,2BAA0Bs2G,EAAarmN,OAAQqmN,EAAa/rI,eAA3E41B,YACP,QAA2B,IAAvBA,EAAY/hH,SAAgB+hH,EAAY,GAAGT,aAC7C,aAAiB,cAAc,EAAO,KAAM,GAC1C,CAACqF,aAAc5E,EAAYwB,SAAUhrG,WAAY,EAAKs+F,MAAMr+F,oBACvD,I,EAKXoqN,uBAAyB,SAAC7lC,EAAgBlrL,GACxC,IAAM4U,GAAS,IAAAC,oBACXq8M,EAAgB,GAAIC,EAAgB,GAClC76M,EAAe1B,EAAOgb,wBAAwB5vB,GAChDsW,IACF66M,EAAgB76M,EAAaf,SAC7B27M,EAAgB56M,EAAalc,YAAYmb,UAItC47M,GAQL,EAAKn6C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAKllH,aACL,EAAK2wH,0BAA0BX,EAAeD,IAC9C,aAAEp+N,UAAUupG,GAAG,QAAS,EAAKm7E,mBAC7B,EAAKu6C,sBACD7mC,IAAmBkmC,cACrBlmC,EAAe/qF,kB,EAKrBygD,0BAA4B,SAACj2E,GAAuD,IAAjDt8D,EAAiD,wDAAVisF,EAAU,aAElF,GAAI,EAAK75F,MAAM4yN,qBACV,EAAK5yN,MAAM4yN,oBAAoBn+M,KAAK2K,eACpCve,MAAMC,QAAQ,EAAKd,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,UACd,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,IACtElL,MAAMC,QAAQopE,EAAKz1D,KAAK1I,SAAV,UACb,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,KAAOm+D,EAAKz1D,KAAK1I,SAAV,QAA8B,GAE/G,OADA,EAAK+mP,mBAAmB5oL,EAAM2vB,IACvB,EAGT,EAAK85H,0BAA0BzpJ,GAE/B,IAAMsuT,EAAoB,EAAK1lI,mBAAmB5oL,EAAM2vB,GACxD,IAAI2+R,EAAJ,CAYA,GARI,EAAKx4X,MAAMgxN,sBAAiE,qBAAzC,EAAKhxN,MAAMgxN,qBAAqBz1M,MAClE2uD,EAAKz1D,KAAK89N,aAAgB,EAAKvyO,MAAMgxN,qBAAqBv8M,KAAKs0H,YAAc7+D,EAAKz1D,KAAK89N,aAC1F,EAAK9f,gBAMHvoJ,EAAKzvB,kBAAmB,CAC1B,IAAIw1M,EAAoB,GACxB,OAAQ/lL,EAAKz1D,KAAKlV,QAChB,IAAK,gBACH0wP,EAAoB,OACpB,MACF,IAAK,OACHA,EAAoB,SACpB,MACF,IAAK,aACHA,EAAoB,aACpB,MACF,IAAK,cACHA,EAA+C,eAA3B/lL,EAAKzvB,kBAAqC,aAAe,eAKjF,EAAKu1M,0BAA0B9lL,EAAM+lL,QAErC,EAAKT,UAAUtlL,EAAMt8D,GAGnB,EAAK5N,MAAMgxN,sBACb,EAAKzsH,MAAMr4E,sB,gGAKN,WACD/X,GAAS,IAAAC,oBAETsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KAEvF4iK,EAAcljK,EAAOo9E,wBAIvB06R,GAA6B,EAE7Bn1M,GAAiBA,EAAcq4I,6BAC9Br4I,EAAcq4I,gCACjB88D,GAA8BhzX,KAAKsrG,MAAMwwC,qCAG3C,IAAMs1O,EAAiBpxX,KAAKk4P,2BATV,GAYZ57B,EAAsB,CAAC,EAAA59K,YAAYG,OAAQ,EAAAH,YAAYE,OAAQ,EAAAF,YAAYI,YAAa,EAAAJ,YAAY3pB,WAE1G,OACE,wCACE,+BAAK61D,WAAW,aAAW,cAAe,CAAC,yBAA0B5qF,KAAK+G,MAAMwwN,kBAC9E,+BACE3sI,WAAW,aAAW,MAAO,CAAC,cAAe5qF,KAAK+G,MAAMwwN,gBAAiB,QAAUv3N,KAAK+G,MAAMoxN,cAC9F,+BAAKvtI,UAAU,cAAco1D,IAAK,SAACkkI,GAAD,OAAU,EAAK1nD,WAAa0nD,IAC5D,+BAAKt5L,UAAU,wBACb,+BAAKA,UAAU,6BACZ5qF,KAAK6wD,SAtBF,EAAsB,IAWrB,EAW8C4sH,EAAYI,IAEjE,kCAAQjzF,UAAU,6BAA6BkyF,QAAS98K,KAAKy4N,mBAE9Dz4N,KAAKq8N,sBAAsBC,GAC3B02J,EAA6B,KAC5B,+BAAKpoS,UAAU,sBAAsBymS,eAAgBrxX,KAAKy6N,yBACxD,mCAAkBr8C,YAAaA,EACbM,SAAS,EACThuE,OAAQ1wG,KAAK+G,MAAMwwN,eACnB95C,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,2BAYjDj9K,KAAKsrG,MAAM7kF,SAAW,mCAAsBN,cAAenmB,KAAKsrG,MAAMnlF,gBAAmB,KACzFirW,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,MAEN,mCAAgBs6C,uBAAwBr3N,KAAKq3N,uBAC7BiD,yBAA0Bt6N,KAAKsrG,MAAMgvH,gC,cA2BvDhqC,EAAqB,CACzB91C,8CACAF,kDACAI,oDACAK,oDACAQ,sDACAE,wEACAt3H,oDACAyB,oEACA+qI,sDACAF,gDACA5V,4CACAkC,wDACA9pH,sCACAqrC,yC,WAGa,IAAAwtC,UArCS,SAACxzG,GAAU,IAC1BimE,EAAejmE,EAAM0zG,UAArBztC,YAEP,MAAO,CACLqhK,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzCX,SAAUnuB,EAAMouB,wBAAwBD,SACxCuD,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxComI,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D8U,uBAAwBt4J,EAAMyvO,cAAcn3E,uBAC5CF,2BAA4Bp4J,EAAMyvO,cAAcr3E,2BAChDzjJ,iBAAkB3U,EAAM4U,YAAYD,iBACpC+vI,qBAAsB1kJ,EAAMu1I,gBAAgBmP,qBAC5Cz+E,iBAqBoC+xH,EAAzB,CAA6CqgM,I,4GC9R5D,MACA,OACA,O,IACA,MACA,QAEA,QAEA,QACA,QACA,Q,IACA,Q,mDAGA,IAAMgQ,EAAoC,CAAC,mBAAoB,iBAAkB,aAAc,eAEzFC,EAAwB,SAACt1R,GAAU,IASjC,EAPChtC,EACuBgtC,EADvBhtC,mBAAoBxkB,EACGwxD,EADHxxD,QAASu9K,EACN/rH,EADM+rH,uBAAwBpqN,EAC9Bq+F,EAD8Br+F,iBAC1DqtN,EAA4BhvH,EAA5BgvH,yBAEIp/M,GAAS,IAAAC,oBAIT4lX,GAAA,gCAAqB,WAAOtpK,GAAP,0FAGlBnxN,EAA8BmxN,EAA9BnxN,OAAQyvG,EAAsB0hH,EAAtB1hH,SAAUiC,EAAYy/G,EAAZz/G,SAEzB15C,EAAmB,CACjBoyC,QAAQ,EACR9vB,cAAe,GACf89P,cAAep4U,IAGb26X,EAAa36X,EACb0iF,EAAiB,MAEjB+sB,EAdqB,uBAevB,aAAiB,cAAc,EAAO,KAAM,GAC1C,CAACqF,aAAcpD,EAAUhrG,WAAYC,IAhBhB,mBAiBhB,GAjBgB,YAoBnB2P,EAAe1B,EAAOgb,wBAAwB+qW,KAC/BrkX,EAAaw1E,sBAAuBuuS,EAAkCxmY,SAAS8mY,GArB3E,wBAsBvB,IAAAr6W,gBAtBuB,WAuBjB,IAAA+rE,6BAA4B/1E,GAvBX,SAwBvB,IAAA01E,iBAxBuB,QA4BzB+kI,EAAuBruI,EAAgBi4S,GA5Bd,mDAArB,6CAwCF3iE,EAAuC,KAAnBxkR,EAAQrlD,OAAgB,CAACy1I,SAAS,SAAW,KAIrE,OAFAlyI,QAAQ4B,IAAI,UAAWkgD,GAGrB,+BAAKzlC,MAAOiqT,GACV,+BAAK1zO,UAAU,uBACZ9wC,EAAQhyC,KAAI,SAAAuvG,GACX,OACE,kCAAQ7/G,IAAK6/G,EAAO/wG,OACZi4T,YAAa,kBAnBX,SAAClnN,GACnB,GAAIijH,EAA0B,CAC5B,IAAM19M,EAAe1B,EAAOgb,wBAAwBmhF,EAAO/wG,QACvDsW,GAAgBA,EAAauJ,eAAiBvJ,EAAauJ,cAAc0gE,OAC3EyzI,EAAyB19M,EAAauJ,cAAc0gE,MAAMO,OAAQiwB,EAAO/wG,SAe1Ci4T,CAAYlnN,IAC/BylE,QAAS,kBAAMikN,EAAmB1pR,IAClCzsB,UAAW,6DACNysB,EAAO/wG,SAAW+wG,EAAO/wG,OAAOnM,SAAS,UAAY,SAAWk9G,EAAO/wG,UAC/D,qBAAlB+wG,EAAO/wG,OACN,+BAAKskF,UAAU,sBACb,+BAAKA,UAAU,gCACf,+BAAKA,UAAU,yBAEf,KACJ,gCAAMA,UAAU,oCACd,4CAAkB5iF,GAAIqvG,EAAO37F,sBAU7CklX,EAAsB1+O,UAAY,CAChCm1E,uBAAwB,UAAUt4C,KAClCqjJ,WAAY,UAAUrjJ,MAGxB,IAgBMuR,EAAqB,CACzBhyH,yC,WAGa,IAAAypF,aACb,IAAAwoC,aACE,IAAAzkF,UAtBoB,SAACxzG,GAOvB,MAAO,CACLimE,YAPoBjmE,EAAM0zG,UAArBztC,YAQL99D,SAPiBnI,EAAMgR,YAAlB7I,SAQL05F,WAPmB7hG,EAAMqY,YAApBwpF,WAQLhiF,eAPqB7f,EAAMqN,gBAQ3BsH,iBAPyB3U,EAAM4U,YAA1BD,oBAiBoBqjL,EAAzB,CAA6CswM,M,8HC3HjD,MACA,OACA,O,IACA,O,IAEA,QAEA,Q,IAEA,Q,IACA,Q,IACA,QAEA,QACA,Q,IAOA,Q,IACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,QACA,U,OAEA,Q,IACA,Q,IACA,QACA,Q,IACA,Q,uDAEMzG,E,yOAMJsG,oBAAsB,SAAC9zK,EAAc/rH,GACnC,GAAI,EAAK0K,MAAM/sC,YAAYmyC,OAIzB,OAHA,EAAKpF,MAAMhtC,mBAAmB,CAC5BoyC,QAAQ,KAEH,EAET,IAAKi8G,GAAgB,EAAK5lN,MAAMwwN,eAC9B,OAAO,EARoC,IAWtC/gH,GAAe,IAAAH,2BAA0Bs2G,EAAarmN,OAAQqmN,EAAa/rI,eAA3E41B,YACP,OAAKA,EAAY/hH,OAAS,KAAQk4N,EAAarmN,QAAkC,gBAAxBqmN,EAAarmN,SACpE,EAAKglG,MAAMhtC,mBAAmB,CAC5BoyC,QAAQ,EACRpqG,OAAQqmN,EAAarmN,OACrBs6E,cAAe+rI,EAAa/rI,cAC5BllD,SAAU,CACRthB,EAAGwmF,EAAM7mF,QACTM,EAAGumF,EAAMzmF,YAGN,KACyB,IAAvBq8F,EAAY/hH,SAAgB+hH,EAAY,GAAGr8G,SAAS,a,EAUjEk9N,uBAAyB,SAAC7lC,EAAgBlrL,GACxC,IAAM4U,GAAS,IAAAC,oBACXq8M,EAAgB,GAAIC,EAAgB,GAClC76M,EAAe1B,EAAOgb,wBAAwB5vB,GAChDsW,IACF66M,EAAgB76M,EAAaf,SAC7B27M,EAAgB56M,EAAalc,YAAYmb,UAKtC47M,GAQL,EAAKn6C,SAAS,CACZi6C,gBAAgB,EAChBY,YAAa,EAAAz5K,YAAYG,OACzBo5K,iBAAiB,EACjBtL,aAAc,KACb,WACD,EAAKllH,aACL,EAAK2wH,0BAA0BX,EAAeD,IAC9C,aAAEp+N,UAAUupG,GAAG,QAAS,EAAKm7E,mBAC7B,EAAKu6C,sBACD7mC,IAAmBkmC,cACrBlmC,EAAe/qF,kB,EAKrByzJ,gBAAkB,SAACt5J,GAOjB,GAJKzoG,OAAOqmO,WAAc,EAAKz3N,MAAMwwN,gBAAmB,EAAKjsH,MAAM/sC,YAAYmyC,QAC7E,EAAKpF,MAAMqxH,gBAAgB/7H,GAGzBxnG,SAASuzN,eAAiBx0N,OAAOqmO,UAAW,CAG9C,GAAI,EAAKiiK,oBAAoBrnY,SAASuzN,aAAc/rH,GAClD,OAAO,EAGT,IAAM8/R,EAAgBtnY,SAASuzN,aAAarmN,OAE5C,GAAIo6X,EAAe,CACc,IAA3B,EAAK35X,MAAMoxN,aACb,EAAK0F,iBAEP,IACMjhN,GADS,IAAAzB,oBACa+a,wBAAwBwqW,GAChD9jX,IACF,EAAKw7M,0BAA0Bx7M,EAAaf,SAAUe,EAAalc,YAAYmb,UAC1E1jB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe9hN,EAAaf,SAASvf,cAAcqC,QAAQ,KAAM,U,EAOtFuoJ,0BAA4B,SAACj2E,GAAuD,IAAjDt8D,EAAiD,wDAAVisF,EAAU,aAGlF,GAAI,EAAK75F,MAAM4yN,qBACV,EAAK5yN,MAAM4yN,oBAAoBn+M,KAAK2K,eACpCve,MAAMC,QAAQ,EAAKd,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,UACd,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,IACtElL,MAAMC,QAAQopE,EAAKz1D,KAAK1I,SAAV,UACb,EAAK/L,MAAM4yN,oBAAoBn+M,KAAK2K,cAAcrT,SAAlD,QAAsE,KAAOm+D,EAAKz1D,KAAK1I,SAAV,QAA8B,GAE/G,OADA,EAAK+mP,mBAAmB5oL,EAAM2vB,IACvB,EAGT,IAAM2+R,EAAoB,EAAK1lI,mBAAmB5oL,EAAM2vB,GACxD,GAAI2+R,EACF,EAAKj0R,MAAMplF,iBAAiB+qD,EAAKz1D,UADnC,CAKA,GAAIy1D,EAAKzvB,kBAAmB,CAC1B,IAAIw1M,EAAoB,GACxB,OAAQ/lL,EAAKz1D,KAAKlV,QAChB,IAAK,gBACH0wP,EAAoB,OACpB,MACF,IAAK,OACHA,EAAoB,SACpB,MACF,IAAK,aACHA,EAAoB,aACpB,MACF,IAAK,cACHA,EAA+C,eAA3B/lL,EAAKzvB,kBAAqC,aAAe,eAKjF,EAAKu1M,0BAA0B9lL,EAAM+lL,QAChC,GAAyB,gBAArB/lL,EAAKz1D,KAAKlV,QAA4B,EAAKS,MAAMgxN,qBAAqBv8M,KAAKitG,OAAO/hC,oBACxF,EAAK3/E,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAe,CAC9D,IAAM4qW,EAAyB9/S,EAAKz1D,KAAK1I,SAAV,SAAiCm+D,EAAKz1D,KAAK1I,SAAV,SAA+B,GAAK,KAChGi+W,IAA2B,EAAKhqX,MAAMgxN,qBAAqBv8M,KAAKitG,OAAOtiG,cAAc2+D,wBAAwB,WAAYisS,GAC3H,EAAKh6H,0BAA0B9lL,EAAM,UAErC,EAAKslL,UAAUtlL,EAAMt8D,QAGvB,EAAK4hP,UAAUtlL,EAAMt8D,GAGvB,EAAK22F,MAAMplF,iBAAiB+qD,EAAKz1D,MAEjC,IAAM+nN,EAAc,EAAKx8N,MAAM4yN,oBAC3B,EAAK5yN,MAAMgxN,qBAAqBz1M,KAAO,IAAM,EAAKvb,MAAM4yN,oBAAoBr3M,KAC5E,EAAKvb,MAAMgxN,qBAAqBz1M,KAE/BnqB,OAAOsmO,kBACV,EAAKnzH,MAAMozH,eAAe6E,EAAYjnO,cAAcqC,QAAQ,KAAM,MAGhE,EAAKoI,MAAMgxN,sBACb,EAAKzsH,MAAMipH,c,EAIfmF,mBAAqB,SAAAo+B,GACnB,IAAMl+B,EAAck+B,EAAkBt8O,KACtCo+M,EAAYl5N,YAAYg5N,mBAAmBE,GAC3C,EAAKt8C,SAAS,CACZq8C,oBAAqBm+B,EACrB/+B,oBAAqBa,EAAYxnI,oBACjC4mI,gCAAgC,EAChC/0I,WAAY,KACX,WACD,EAAK+5I,qBACL,EAAKjE,yBACL,EAAKhH,2BAA2B+kC,EAAmB,0BAGrD,EAAK99B,8BAA8B89B,IAE9Bl+B,EAAYl5N,aAAoD,UAArCk5N,EAAYl5N,YAAYmb,UAC1B,gBAAzB+9M,EAAY/9M,WAA+B1jB,OAAOsmO,mBACrD,EAAKnzH,MAAMozH,eAAeo5B,EAAkBx1O,KAAKhmB,cAAcqC,QAAQ,KAAM,MAE/E,EAAK05N,oBAAoBy/B,I,iHA7LDl5E,GACxB5+K,KAAK08N,2BAA2B99C,K,+BAgMhC,IAAM1jK,GAAS,IAAAC,oBACTsiK,EAAaz9K,KAAK+G,MAAMgxN,qBAAuB/3N,KAAK+G,MAAMgxN,qBAAqBv8M,KAAO,KACtFqiK,EAAgB79K,KAAK+G,MAAM4yN,oBAAsB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAO,KACvFu6S,EAAgBl4I,GAAiBJ,EACjCW,EAAcljK,EAAOo9E,wBACrBlG,EAAsB2jO,GAAiBA,EAAc3jO,oBAOvD2gC,GAAY,EACZhqC,EAAe,GACf/oF,KAAKsrG,MAAMx5F,qBACT9R,KAAKsrG,MAAMx5F,mBAAmBonP,iBAAoBl5P,KAAKsrG,MAAMx5F,mBAAmBqnP,eAAiB//P,SAASC,SAAS2b,YACpHhV,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAUg/H,GAAiBA,EAAc6qL,cAAgB7qL,EAAczrF,sBACjH2gC,GAAY,EACZhqC,EAAe/oF,KAAK+G,MAAM/G,KAAKw7N,wBAAwBx7N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKlV,UAG7F,IAAMq7E,EAAW3hF,KAAKy0B,YAAYvZ,GAE5Bk2W,EAAiBpxX,KAAKk4P,0BAA0BnlI,GAEhD4nG,EAAcl9C,GAAoC,kBAAtBA,EAAWn3K,QAA8Bm3K,EAAWrrF,qBAChFyrF,IAAkB79K,KAAKqzN,WAAWx1C,IAA2C,gBAAzBA,EAAcv3K,QACxC,uBAAzBu3K,EAAcv3K,SAAoCu3K,EAAczrF,oBAEjE+sI,EAA2B42F,GAAiB,UAAgBtiH,yBAChEzzM,KAAKsrG,MAAMt1F,aAAc,WAAY+/S,EAAe/1T,KAAKsrG,MAAMnzF,gBAC/D1jB,OAEIynU,GAAmBl8T,KAAKsrG,MAAMx5F,mBAAmB8rB,aACjDigJ,GAAiBA,EAAc13J,eAAiB03J,EAAct3F,WAAWvmF,KAAKsrG,MAAMr+F,mBAAqB4wK,EAAcn3F,mBASzHssS,GAA6B,EAQjC,OACE,+BAAKpoS,UAAW,gBACb5qF,KAAK+G,MAAMwwN,gBAAkBv3N,KAAK+G,MAAMkxN,gBAAkB,2BAA6B,KACxF,+BAAKrtI,UAAW,QAAU5qF,KAAK+G,MAAMwwN,eAAiB,gBAAkB,KAEtE,+BAAK3sI,UAAW,cAAgB5qF,KAAK+G,MAAMk4N,mBAAqB,oCAAsC,KACpG,+BAAKr0I,UAAU,eACb,+BACEA,UAAW,qBACR5qF,KAAK+G,MAAM4yN,oBAAsB,kCAAoC,KACvE35N,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAAKwnE,cACrE,mCAAgB07S,YAAa1+X,KAAK+G,MAAM23X,YACxBj+X,UAAU,EACVo9K,cAAe79K,KAAK+G,MAAM4yN,oBAAoBn+M,KAC9CmjX,uBAAwB3+X,KAAK2+X,yBAC3C,KACH9gN,EACG3iK,EAAO4Z,YACL,mCAAyB6jE,YAAaklF,EAAc13J,gBACpD,mCAAqB1lB,UAAU,EAAMo9K,cAAeA,IACtD,KACHA,GAAiB79K,KAAKqzN,WAAWx1C,IAA6C,gBAA3BA,EAAchiK,SAC9D,mCACAk8M,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjCoD,yBAA0Bn7N,KAAKm7N,2BAC/B,MAEN,mCAAyBhD,YAAan4N,KAAK+G,MAAMoxN,YACxBl0I,WAAYjkF,KAAK+G,MAAMk9E,WACvB2L,SAAU5vF,KAAKsrG,MAAM1b,SACrBmoI,qBAAsB/3N,KAAK+G,MAAMgxN,qBACjChb,wBAAyB/8M,KAAK+8M,wBAC9B/tL,sBAAuBhvB,KAAKsrG,MAAMt8E,sBAClC6vM,gBAAiB7+N,KAAK6+N,gBACtB70M,eAAgBhqB,KAAKsrG,MAAMthF,eAC3BhB,gBAAiBhpB,KAAKsrG,MAAMtiF,gBAC5B21M,wBAAyB3+N,KAAK2+N,2BAExDhE,GAAc36N,KAAK+G,MAAMgyN,qBAAuBoG,GAC7Cn/N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OACzC,mCAAiB20J,sBAAuBxzM,KAAKwzM,sBAC5Bb,gBAAgB,WAChBl1B,WAAYs4I,EACZt1T,UAAU,IAG3BT,KAAK+G,MAAM0jN,mBACT13F,GAAa/yH,KAAK+G,MAAM4yN,qBAAuB35N,KAAK+G,MAAM4yN,oBAAoBn+M,KAC1Exb,KAAKu7N,sBAEPv7N,KAAKk/N,YAAYv9I,EAAmCqxS,EAA4Br4J,EAAYl9C,EAAYI,EAAeshD,EAA0B/sI,IAEtJ2gC,GAAc/yH,KAAK+G,MAAM0jN,mBAAsBkQ,GAC5C36N,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,OAevC,KAdF,mCACEurK,eAAgBrhI,EAAa/hF,QAAO,SAAAu7G,GAAA,OAASA,EAAKs2I,UAClD1uC,kBAAmBnqN,KAAK+G,MAAM40N,gBAC9BzR,qBAAsBlqN,KAAKy4P,mBAC3BpuC,kBAAmBrqN,KAAKqqN,kBACxBe,qBAAsBprN,KAAKorN,qBAC3B3qN,UAAU,EACV2U,uBAAwBpV,KAAKsrG,MAAMl2F,uBACnC21M,aAAa,EACbN,kBAAmBzqN,KAAK+G,MAAM0jN,kBAC9BE,oBAAqB3qN,KAAK2qN,oBAC1BD,4BAA6B1qN,KAAK0qN,4BAClCJ,kBAAmBvhI,EAAalrF,OAAM,SAAA0kH,GAAA,OAAQA,EAAKgoG,oBAAoB2xG,IAGjD82D,EACxB,mCACEv1M,WAAYs4I,EACZt1T,UAAU,IAEV,KACHk6N,IAAe36N,KAAK+G,MAAMgyN,qBAAuBoG,EAChD,mCAAiB1hD,WAAYs4I,EAAepjH,gBAAgB,WAAWlyM,UAAU,IAC/E,KACHT,KAAK+G,MAAMoxN,cAAgB,EAAAz5K,YAAYG,QAAU7+C,KAAK+G,MAAMgxN,wBACxDhlG,GAAsCigQ,GAA+Br4J,GAAcwE,GACtF,mCAAkB/gD,YAAaA,EACbX,WAAYA,EACZI,cAAeA,EACfF,eAAgB39K,KAAK05N,mBACrBv8C,kBAAmBn9K,KAAKi9K,wBACxC,OAGR,mCAAgBo6C,uBAAwBr3N,KAAKq3N,yBAC5C+5J,EACG,mCAAYlrW,iBAAkBlmB,KAAK84P,mBAAoB/7E,qBAAsB/8K,KAAK+8K,uBAClF,KACJ,mCACE/0K,GAAG,mBACHi8E,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9B7+B,UAAWl+K,KAAK+G,MAAM4yN,sBACvB35N,KAAKsrG,MAAM7kF,SAAW,mCAAsBN,cAAenmB,KAAKsrG,MAAMnlF,gBAAmB,U,cA0B5FmqK,EAAqB,CACzB91C,8CACAO,oDACA52H,oDACAyB,oEACA21H,sDACAE,wEACAN,wDACAN,4CACAkC,wDACAz+E,yC,WAGa,IAAAypF,aACb,IAAAj8C,UAlCsB,SAACxzG,GAAU,IAC1BimE,EAAejmE,EAAM0zG,UAArBztC,YACP,MAAO,CACLpmD,eAAgB7f,EAAMqN,gBACtB2Y,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCshN,eAAgBtnO,EAAMyc,YAAYiP,YAClChO,aAAc1d,EAAMyc,YAAYiB,aAChCoR,UAAW9uB,EAAMouB,wBAAwBU,UACzCX,SAAUnuB,EAAMouB,wBAAwBD,SACxCwD,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCuxH,uBAAwBljJ,EAAMu1I,gBAAgB2N,uBAC9CM,oCAAqCxjJ,EAAMu1I,gBAAgBiO,oCAC3D49D,cAAephN,EAAMyV,UAAU2rM,cAC/Bt9D,mBAAoB9jJ,EAAMu1I,gBAAgBuO,mBAC1CnvI,iBAAkB3U,EAAM4U,YAAYD,iBACpC+vI,qBAAsB1kJ,EAAMu1I,gBAAgBmP,qBAC5Cz+E,iBAkBuB+xH,EAAzB,CAA6C6pM,K,8ECra/C,I,EAAA,O,oCACA,OACA,OACA,UACA,QACA,Q,WA4Be,IAAAruR,UATS,SAACxzG,GAEvB,MAAO,CACLmgB,SAFiBngB,EAAMqN,gBAAlB8S,YAMkB,GAEZ,EAzBe,SAAC6yF,GAAU,IAEhC7yF,EAAY6yF,EAAZ7yF,SAEP,OAAItgB,OAAOw3Y,kBAAoBx3Y,OAAOy3Y,MAAO,IAAA5qY,aAAcyT,GAAvD,mBACK,KAIP,kCAAQmyE,UAAU,+DACVkyF,QAAA,yBACN,gCAAMlyF,UAAU,kBAAiB,4CAAkB5iF,GAAG,gC,8ECnB5D,W,OACA,O,IAEA,S,IACA,S,IACA,S,IACA,Q,IACA,O,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IAEA,S,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,8DAqCe,IAAA8jG,UARS,SAACxzG,GACvB,MAAO,CACL22B,gBAAiB32B,EAAM22B,mBAIA,GAEZ,EAnCA,SAACq8E,GAAU,IAEjBr8E,EAAmBq8E,EAAnBr8E,gBAEP,OACE,wCACE,wCACA,wCACA,wCACA,wCACA,mCAAYloB,MAAOkoB,IACnB,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCAEE71B,SAASC,SAASC,UAA+B,KAAnB,wCAChC,wCACA,6C,qIC3CN,O,OACA,OACA,QAEA,Q,IACA,QACA,QACA,OAEA,Q,IACA,O,IACA,O,uDAEMugb,E,YAEJ,WAAYvuU,IAAO,gGACXA,IADW,SA8CnB+tS,yBAA2B,SAAClwY,EAAU6/O,GACpC,EAAK1rE,SAAS,CACZxwJ,sBAAuB,EAAK/lB,MAAM+lB,sBAAsBhlB,KAAI,SAACgya,EAAgBC,GAI3E,OAHIA,KAAyB/wL,IAC3B8wL,EAAe3wa,SAAWA,GAErB2wa,QApDM,EAyDnBE,uBAAyB,WACvB,UAAU74Y,eAAe,sBACzB,EAAKmqE,MAAM1+E,kBAAiB,GAC5BxzB,SAAS6C,KAAKC,UAAU27K,OAAO,sBA5Dd,EA+DnB25N,YAAc,SAACyoC,GACb,IAAM/+Z,GAAS,IAAAC,oBACf,UAAUgmB,eAAe,sBAAwB84Y,EAAiB,MAAO,OACzE,EAAKD,yBACL5gb,SAAS6C,KAAKC,UAAUC,IAAI,mBACvBhE,OAAO2B,SAASC,KAAKI,SAAS,iBACjC,EAAA+3B,YAAYn9B,KAAK,gBAEnB,EAAKu2G,MAAM9kF,8BAA6B,GACpCyzZ,GACF,EAAK3uU,MAAMphF,UAAU,EAAKnjB,MAAM+lB,uBAElC5R,EAAO23E,sBA3EU,EA8EnBqnV,gBAAkB,WAAM,IAEfz/Z,EAAQ,EAAK6wF,MAAb7wF,KACP,OAAO,EAAK1T,MAAM+lB,sBAAsBhlB,KAAI,SAAC1B,EAAUwH,GACrD,IAAM+M,EAAOvU,EAASC,YAAY1C,UAAUgX,MAAQF,EAAKC,cAAc,CAAC1S,GAAI,4CAC5E,OACE,8BAAI4iF,UAAU,mBAAmBpzF,IAAK4O,EAASC,YAAYwV,SAASjO,GAClE,+BAAKg9E,UAAU,SACb,+BAAKA,UAAU,2BACb,+BAAK7rF,IAAKqH,EAASqyG,YAAa,IAAAr1G,qBAAoBgD,EAASC,aAAc6tM,IAAK9tM,EAASC,YAAYwV,YAEvG,+BAAK+uE,UAAU,0BACb,8BAAIA,UAAU,gCACZ,mCAAavnF,QAAS+C,EAASC,eAEjC,6BAAGukF,UAAU,qCAAqC0hL,wBAAyB,CACzEC,OAAQnmQ,EAAS+Y,aAAe/Y,EAASC,YAAY1C,UAAU4M,gBAGlEnK,EAASC,YAAY1C,UAAUipS,aAAe,KAC/C,+BAAKhiN,UAAU,8BACb,mCAAUtnF,KAAK,SAASpM,MAAOkP,EAAS+C,SAAU+sC,MAAOv7B,EAC/CwoQ,YAAa,SAAAjsR,GAAA,OAAS,EAAKmiZ,yBAAyBniZ,EAAO0W,QAGxExH,EAAS+C,UAAY,EACpB,6BAAGyhF,UAAU,iCAAgC,4CAAkB5iF,GAAG,kCAChE,4CAAkBA,GAAG,oCACrB,UAxGV,EAAKjB,MAAQ,CACX+lB,sBAAuB,IAHR,E,0FAOO8xJ,GACxB,GAAIh3K,MAAMC,QAAQ+2K,EAAU9xJ,wBAA0B8xJ,EAAU9xJ,sBAAsBr4B,OAAQ,CAC5F,IAAI0lb,EAAgC,GAEpCv7P,EAAU9xJ,sBAAsB1uB,SAAQ,SAAC0lU,GACvC,IAAIs2G,GAAgB,EACpB,GAAIt2G,EAAqBz9T,YAAYwH,eAAgB,CACnD,IAAMwsa,EAAeF,EAA8Bx9Z,WAAU,SAAC29Z,GAC5D,OAAOA,EAA6Bj0a,YAAYwV,WAAaioT,EAAqBz9T,YAAYwV,YAEhG,GAA4C,WAAxCioT,EAAqB7lT,gBAA+B6lT,EAAqBz9T,YAAY1C,UAAU4M,YAAYpW,SAAS,iBAI3F,IAHDykL,EAAU9xJ,sBAAsBnQ,WAAU,SAAC49Z,GACnE,OAAOA,EAAyBl0a,YAAYwV,WAAaioT,EAAqBz9T,YAAYwV,cAG1Fu+Z,GAAgB,QAETC,GAAgB,IACzBD,GAAgB,GAGpB,IAAKA,EAAe,CAClB,IAAMtgC,EAAcl7N,EAAUr8K,UAAUuJ,MAAK,SAAA1F,GAAA,OAAYA,EAASE,SAAWw9T,EAAqBx9T,UAClG6za,EAA8Bplb,MAA9B,gBACK+uU,EADL,CAEE36T,SAAU2wY,EAAcA,EAAY3wY,SAAW26T,EAAqB36T,gBAK1EnJ,KAAKs9K,SAAS,CACZxwJ,sBAAuBqtZ,IAGvBv7P,EAAU/xJ,mBAAqB7sB,KAAKsrG,MAAMz+E,kBAC5CzzB,SAAS6C,KAAKC,UAAUC,IAAI,uB,+BAsEvB,WAEDm1Y,GAAc,IAAAntY,oBAAsBnE,KAAKsrG,MAAM3qF,YAAc,KAAS3gB,KAAKsrG,MAAM3qF,aAAe,IAAO,CAAE9gB,OAAQG,KAAKsrG,MAAMpqF,aAAe,IAAO,GAExJ,OAAOlhB,KAAKsrG,MAAMz+E,iBAChB,+BAAK+9D,UAAU,UAAUv2E,MAAOi9X,GAC9B,+BAAK1mT,UAAU,eACb,+BAAKA,UAAU,sBACb,8BAAIA,UAAU,6BAA4B,4CAAkB5iF,GAAG,8BAC/D,kCAAQ4iF,UAAU,qCAAqCkyF,QAAS98K,KAAKg6a,0BAEvE,+BAAKpvV,UAAU,oBACb,8BAAIA,UAAU,oBACX5qF,KAAKk6a,oBAGV,+BAAKtvV,UAAU,sBACb,kCAAQA,UAAU,8BAA8BkyF,QAAS,kBAAM,EAAK00N,aAAY,KAC9E,4CAAkBxpY,GAAG,uCAEvB,kCAAQ4iF,UAAU,+BAA+BkyF,QAAS,kBAAM,EAAK00N,aAAY,KAC/E,4CAAkBxpY,GAAG,uCAK3B,S,gBAcFsoL,EAAqB,CACzB1jK,oCACApG,4DACA0D,uB,WAGa,IAAA69H,aACb,IAAAj8C,UAjBsB,SAACxzG,GACvB,MAAO,CACLu0B,iBAAkBv0B,EAAM8J,UAAUyqB,iBAClCC,sBAAuBx0B,EAAM8J,UAAU0qB,sBACvCnM,YAAaroB,EAAMgR,YAAYqX,YAC/BO,aAAc5oB,EAAMgR,YAAY4X,aAChC3e,UAAWjK,EAAM8J,UAAUG,aAWJ+tL,EAAzB,CAA6CupP,K,qIC9K/C,O,OACA,O,IACA,OACA,QACA,OAEA,QAQA,S,IACA,SACA,U,IACA,SACA,QACA,Q,IACA,Q,IACA,O,IACA,O,IACA,SACA,SACA,S,IACA,O,IACA,S,uDAEMW,E,YAEJ,WAAYlvU,IAAO,gGACXA,IADW,SADnBx5F,mBAAqB,KACF,EAoCnB2oa,eAAiB,WACf,IAAMv/Z,GAAS,IAAAC,qBACf,IAAAwnK,2BAA0BznK,GACvB2W,MAAK,SAACswE,GACL,EAAKm7E,SAAS,CACZ8sI,SAAUjoN,GAAY,EAAKmJ,MAAM8e,mBAAqB,SAzC3C,EA8CnBswT,sBAAwB,WACtB,UAAUv5Y,eAAe,sBACzB,aAAEhpC,QAAQ+pG,QAAQ,UAAYyzB,mBAC1B,EAAK5uH,MAAM04B,OAAS,EAAA0wW,KAAK/vV,OAC3B,EAAKk9H,SAAS,CACZ79I,KAAM,EAAA0wW,KAAKxwW,WAGf,EAAK2rE,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBi5W,mBAAmB,KAxDJ,EA4DnBy3C,qBAAuB,WAAM,MAC8B,EAAKrvU,MAAvDvqG,EADoB,EACpBA,SAAUuoB,EADU,EACVA,qBAAsBnR,EADZ,EACYA,eAEnCyia,EAAe,GACfx0J,GAAc,EAClB,OAAQ,EAAKr/Q,MAAM04B,MACjB,KAAK,EAAA0wW,KAAKzwW,MACV,KAAK,EAAAywW,KAAKrzW,MACR89Y,EAAe,CAAC,SAChB,MACF,KAAK,EAAAzqC,KAAKxwW,SACRi7Y,EAAe,CAAC,YAAa,QAAS,cAAe,UAczD,OATAA,EAAax8a,SAAQ,SAACxG,GACpB,IAAM86H,EAAS,UAAKw8C,oBAAoBnuK,EAASnJ,GAAWA,EAAUugB,GACtEmR,mBACG1xB,EAAW86H,IAEVA,EAAOj+H,SACT2xR,GAAc,MAGXA,GArFU,EAwFnBy0J,aAAe,WAC+D,6DAAP,GAAO,IAD7D7pL,6BAC6D,aAD9BN,oBAC8B,aAA5DjkI,wBAA4D,MAAzC,EAAAjsE,iBAAiBI,cAAwB,EACtE1lC,GAAS,IAAAC,oBACRpa,EAAY,EAAKuqG,MAAjBvqG,SACAkhC,EAAwBlhC,EAAxBkhC,YAAaF,EAAWhhC,EAAXghC,QAEpB,GAAI,EAAK44Y,uBACP,OAAO,EAGT,IAAMvtQ,EAASrrI,EAAQusI,KAAKv7J,eAAiB,KAG7C,OAFA,UAAUouB,eAAe,qBACzB,EAAKrvB,mBAAqB,EAAKw5F,MAAMnzF,eAAezQ,SAC5C,EAAKX,MAAM04B,MACjB,KAAK,EAAA0wW,KAAKzwW,MACR,UAAUyB,eAAe,4BACzB,IAAA4vN,WAAU,CAACC,wBAAuBN,eAAcjkI,mBAAkBghF,cAAe,EAAKniG,MAAMmiG,cAAer8K,SAAU,EAAKk6E,MAAMl6E,WAChI,MACF,KAAK,EAAA++W,KAAKxwW,SAER,GADA,UAAUwB,eAAe,8BACrB,EAAKmqE,MAAMnzF,eAAezQ,SAAS44C,MAAO,CAC5C,IAAIw6X,GAAe,EACnB,IACEA,EAAe,UAAK3tQ,cAAclrI,EAAamrI,GAC/C,MAAOhhK,GACP0ua,GAAe,EAEjB,IAAKA,EAYH,YAXA,EAAKxvU,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,QAAS,uBACT+D,QAAS,CAAC,CACRx3B,KAAM,+BACNmpF,MAAO,OACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAS,UAOrD,IAAAkhO,cAAa,CACXT,wBACAN,eACAjkI,mBACAghF,cAAe,EAAKniG,MAAMmiG,cAC1Br8K,SAAU,EAAKk6E,MAAMl6E,SACrBggO,mBAAoB,EAAKypL,aAAapjb,KAAlB,EAA6B,CAACu5P,wBAAuBN,eAAcjkI,uBAEzF,MACF,KAAK,EAAA0jR,KAAKrzW,OACR,IAAAo1N,qBAMJh3O,EAAO23E,sBAlJU,EAqJnBkoV,iBAAmB,SAACt7Y,GAAD,OAAU,WAC3B,UAAU0B,eAAe,0BAA4B1B,GACrD,EAAK69I,SAAS,CACZ79I,WAxJe,EA4JnBu7Y,kBAAoB,WAClB,EAAK19P,SAAS,CACZ29P,eAAgB,EAAKl0a,MAAMk0a,iBA9JZ,EAkKnBC,gBAAkB,SAACj4J,GACjB,EAAK3lG,SAAS,CACZ2lG,kBApKe,EAwKnBk4J,2BAA6B,WACtB,EAAK7vU,MAAMgjB,wBACd,IAAAE,gBAEF,EAAKljB,MAAM7hF,wBAAwB,EAAK6hF,MAAM5hF,uBA5K7B,EA+KnB0xZ,aAAe,SAACC,EAAQC,GAClBA,IACF,EAAKhwU,MAAM1hF,6BAA4B,IACvC,aAAExwB,UAAU8oG,QAAQ,UAAYwzB,oBAGlC,IAAM5jH,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SACrD,EAAKgza,wBACFY,IAAuBD,IACpB,EAAK/vU,MAAMmiG,gBAAkB,EAAAnuJ,eAAeG,WAAa3tC,EAAmB06G,2BAC9E,IAAA0jD,oBAAmB,EAAAvwH,kBAAkBC,qBAEpC,EAAK0rD,MAAMl6E,UAAYtf,EAAmBsf,UAAYtf,EAAmBuf,oBAC1E,IAAAG,oBAAmB1f,KA5LN,EAiMnBypa,aAAe,WACb,OACE,+BAAK3wV,UAAU,oBACb,0CApMa,EAyMnB4wV,kBAAoB,WAClB,OAAQ,EAAKlwU,MAAMmiG,eACjB,KAAK,EAAAnuJ,eAAeI,SAClB,OAAO,4CAAkB13C,GAAG,6BAC9B,KAAK,EAAAs3C,eAAeE,SAClB,OAAO,4CAAkBx3C,GAAG,6BAC9B,KAAK,EAAAs3C,eAAeC,OACpB,KAAK,EAAAD,eAAeG,UACpB,QACE,OAAOtnD,OAAO2B,SAASC,KAAKI,SAAS,cACjC,4CAAkB6N,GAAG,+BACrB,4CAAkBA,GAAG,kCApNZ,EAwNnByza,iBAAmB,SAAC3pa,GAClB,IAAI4pa,EAAU,GACd,OAAQ,EAAKpwU,MAAMmiG,eACjB,KAAK,EAAAnuJ,eAAeE,SAClBk8X,EAAUvjb,OAAO2B,SAASwb,KAAKnb,SAAS,cAAgB,gCAAkC,8BAC1F,MACF,KAAK,EAAAmlD,eAAeI,SAClBg8X,EAAUvjb,OAAO2B,SAASwb,KAAKnb,SAAS,cAAgB,gCAAkC,8BAC1F,MACF,KAAK,EAAAmlD,eAAeG,UAClBi8X,EAAUvjb,OAAO2B,SAASwb,KAAKnb,SAAS,cAAgB,gCAAkC,+BAC1F,MACF,KAAK,EAAAmlD,eAAeC,OACpB,QACEm8X,EAAUvjb,OAAO2B,SAASwb,KAAKnb,SAAS,cACpC,gCACA2X,EAAmBk1H,YACjB,6BAA+B,sCAGzC,OAAO,4CAAkBh/H,GAAI0za,KA1O7B,EAAK30a,MAAQ,CACX04B,KAAM,UAAO5+B,YAAc,EAAAsvY,KAAKzwW,MAAQ,EAAAywW,KAAKxwW,SAC7CyqR,SAAU,GACV6wH,eAAe,EACfh4J,aAAc,IANC,E,0FAUOrkG,GACxB,GAAIA,EAAU30J,kBAAoBjqB,KAAKsrG,MAAMrhF,gBAAiB,CACxD20J,EAAUj4J,WACZ,aAAExuB,QAAQ+pG,QAAQ,UAAY0zB,4BAA6B51H,KAAKy6a,gBAEhEz6a,KAAKy6a,iBAEP,IAAMh4J,GAAW,aAAE,eACb/zN,GAAQ,aAAE,qBAChBA,EAAM8G,OACNitN,EAAShuR,QAAUguR,EAASjtN,OAAOk2I,OAAO,KAAK,WAC7Ch9I,EAAMlhC,UAERr1B,OAAO+1M,4BAA6B,OAC1BtvB,EAAU30J,iBAAmBjqB,KAAKsrG,MAAMrhF,iBAClDjqB,KAAKs9K,SAAS,CACZ8sI,SAAU,KAGVxrI,EAAUskN,oBAAsBljY,KAAKsrG,MAAM43R,mBAC7CljY,KAAKs9K,SAAS,CACZ79I,KAAM,EAAA0wW,KAAK/vV,U,+BAgNR,aACgFpgD,KAAKsrG,MAArFrhF,EADA,EACAA,gBAAiBD,EADjB,EACiBA,eAAgB5U,EADjC,EACiCA,uBAAwBqtX,EADzD,EACyDA,oBAC1D3wX,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAErD,GAAIuiB,GAAmBD,GAAkBlY,EAAmBwuC,QAAUlnD,SAASC,SAASsib,YAAcvma,EACpG,OAAO,mCAAW61N,QAASjrO,KAAKo7a,eAGlC,GAAI34C,EACF,OAAO,wCAGT,IAAM6O,GAAc,IAAAntY,sBAAuB/K,SAAS6C,KAAKC,UAAU0kJ,SAAS,iBAAkB,IAAA57I,cAAehF,KAAKsrG,MAAM3qF,YAAc,IAClI,CAAE9gB,OAAQG,KAAKsrG,MAAMpqF,aAAe,IAAO,GAO/C,OAAO+I,EACH,+BAAK2gE,UAAU,yBACb,+BAAKA,UAAW,gCACb5qF,KAAK+G,MAAMk8Q,aAAe,8BAAgCjjR,KAAK+G,MAAMk8Q,aAAe,IAClF5uQ,MAAOi9X,GACV,+BAAK1mT,UAAU,qBACZ5qF,KAAK+G,MAAM04B,OAAS,EAAA0wW,KAAK/vV,MACxB,kCAAQwqC,UAAU,4BAA4BkyF,QAAS98K,KAAKm7a,6BAC1D,KACJ,kCAAQvwV,UAAU,oCAAoCkyF,QAAS98K,KAAK06a,yBAErE16a,KAAK+G,MAAM04B,OAAS,EAAA0wW,KAAK/vV,MAAQpgD,KAAKu7a,eACrC,+BAAK3wV,UAAU,yBACb,+BAAKA,UAAU,mBACb,mCAAYnrD,KAAMz/B,KAAK+G,MAAM04B,KACjBs7Y,iBAAkB/6a,KAAK+6a,iBACvBG,gBAAiBl7a,KAAKk7a,gBACtBL,aAAc76a,KAAK66a,eAC/B,+BAAKjwV,UAAU,0BACb,+BAAKA,UAAU,sCACb,+BAAKA,UAAU,0BAA0B7rF,IAAKiB,KAAK+G,MAAMqjT,YAE3D,+BAAKx/N,UAAU,oBACf,8BAAIA,UAAU,uBACX5qF,KAAKw7a,kBAAkB1pa,IAE1B,6BAAG84E,UAAU,mBACV5qF,KAAKy7a,iBAAiB3pa,IAEzB,+BAAK84E,UAAU,8BACZ5qF,KAAKsrG,MAAMmiG,gBAAkB,EAAAnuJ,eAAeC,OAC3C,kCAAQqrC,UAAU,yDACVkyF,QAAS,kBAAM,EAAK+9P,aAAa,CAACpuT,iBAAkB,EAAAjsE,iBAAiBI,kBAC3E,4CAAkB54C,GAChBhI,KAAK+G,MAAM04B,OAAS,EAAA0wW,KAAKrzW,MAAQ,kCAAoC,8BAGvE,KACH98B,KAAKsrG,MAAMmiG,gBAAkB,EAAAnuJ,eAAeE,SAC3C,kCAAQorC,UAAW,yEACXkyF,QAAS,kBAAM,UAAU37I,eAAe,qCAAuC,EAAK05Y,aAAa,CAACpuT,iBAAkB,EAAAjsE,iBAAiBC,iBAC3I,4CAAkBz4C,GAAG,gCAErB,KACHhI,KAAKsrG,MAAMmiG,gBAAkB,EAAAnuJ,eAAeI,UAC1C1/C,KAAKsrG,MAAMmiG,gBAAkB,EAAAnuJ,eAAeE,SAC7C,kCAAQorC,UAAW,0DAChB5qF,KAAKsrG,MAAMmiG,gBAAkB,EAAAnuJ,eAAeE,SAAW,mBAAqB,IACvEs9H,QAAS,kBAAM,UAAU37I,eAAe,EAAKmqE,MAAMmiG,gBAAkB,EAAAnuJ,eAAeE,SAAW,8CAAgD,2DAA6D,EAAKq7X,aAAa,CAACnqL,cAAc,EAAMjkI,iBAAkB,EAAAjsE,iBAAiBE,0BAE5R,4CAAkB14C,GAAG,gCAErB,KACHhI,KAAKsrG,MAAMmiG,gBAAkB,EAAAnuJ,eAAeG,UAC3C,kCAAQmrC,UAAW,yEACXkyF,QAAS,kBAAM,UAAU37I,eAAe,2BAA6B,EAAK05Y,aAAa,CAAC7pL,sBAAuBl/O,EAAmB06G,yBAChIC,iBAAkB,EAAAjsE,iBAAiBI,kBAC3C,4CAAkB54C,GAAG,mCAErB,KACHhI,KAAKsrG,MAAMmiG,gBAAkB,EAAAnuJ,eAAeG,UAC3C,kCAAQmrC,UAAU,yEACVkyF,QAAS,kBAAM,UAAU37I,eAAe,4BAA8B,EAAK05Y,aAAa,CAACpuT,iBAAkB,EAAAjsE,iBAAiBC,iBAClI,4CAAkBz4C,GAAG,oCAErB,SAMbhI,KAAK+G,MAAM04B,OAAS,EAAA0wW,KAAK/vV,MACxB,+BAAKwqC,UAAU,qBACb,6BAAGA,UAAU,iCACX,iCAAOA,UAAW,sDAEXm7O,QAAQ,eACf,iCAAO36T,KAAK,WAAWpD,GAAG,aAAa4iF,UAAU,oBAC1CkrI,SAAU91N,KAAKg7a,kBAAmBtlN,QAAS11N,KAAK+G,MAAMk0a,cAAen4V,UAAU,IACtF,gCAAMg6F,QAAS98K,KAAKg7a,mBAAmB,4CAAkBhza,GAAG,2BAE7DhI,KAAKsrG,MAAM43R,kBACV,kCAAQt4S,UAAU,+BAA+BkyF,QAAS98K,KAAK06a,uBAC7D,4CAAkB1ya,GAAG,mCAGvB,kCAAQ4iF,UAAU,+BACVkyF,QAAS98K,KAAK+6a,iBAAiB,EAAA5qC,KAAKxwW,WAC1C,4CAAkB33B,GAAG,gCAK3B,+BAAK4iF,UAAU,qBACZ5qF,KAAK+G,MAAM04B,OAAS,EAAA0wW,KAAKzwW,MACxB,6BAAGkrD,UAAU,iCAAgC,4CAAkB5iF,GAAG,kCAAlE,IAAoG,gCAClG80K,QAAS98K,KAAK+6a,iBAAiB,EAAA5qC,KAAKxwW,UAAWirD,UAAU,sCACzD,4CAAkB5iF,GAAG,wCAErB,KACHhI,KAAK+G,MAAM04B,OAAS,EAAA0wW,KAAKxwW,SACxB,6BAAGirD,UAAU,iCAAgC,4CAAkB5iF,GAAG,+BAAlE,IAAiG,gCAC/F80K,QAAS98K,KAAK+6a,iBAAiB,EAAA5qC,KAAKzwW,OAAQkrD,UAAU,sCACtD,4CAAkB5iF,GAAG,qCAErB,KACJ,6BAAG4iF,UAAU,mEACVkyF,QAAS98K,KAAK+6a,iBAAiB,EAAA5qC,KAAK/vV,QAAQ,4CAAkBp4C,GAAG,qCAM5E,S,gBA2BFsoL,EAAqB,CACzBtnK,kCACAS,gDACAG,0DACAoF,8CACA1F,6C,WAGa,IAAAy+H,aACb,IAAAj8C,UAhCsB,SAACxzG,GAAU,IAC1Bwc,EAA0Bxc,EAA1Bwc,UAAWxL,EAAehR,EAAfgR,YADe,EAEgBhR,EAAMouB,wBACvD,MAAO,CACLD,SAJ+B,EAE1BA,SAGLE,UAL+B,EAEhBA,UAIfyjG,kBAN+B,EAELA,kBAK1BpgG,eAAgBlV,EAAUkV,eAC1B5U,uBAAwBN,EAAUM,uBAClC6U,gBAAiBnV,EAAUmV,gBAC3BlpB,SAAU+T,EAAU/T,SACpB4f,YAAarX,EAAYqX,YACzBO,aAAc5X,EAAY4X,aAC1BotG,sBAAuBx5G,EAAUw5G,sBACjC5kG,qBAAsB5U,EAAU4U,qBAChCvR,eAAgB7f,EAAMqN,gBACtB88X,oBAAqB3tX,EAAU2tX,oBAC/Bh1L,cAAe34L,EAAU24L,cACzBr8K,SAAUtc,EAAUsc,SACpB8xW,kBAAmBpuX,EAAUouX,qBAaN5yM,EAAzB,CAA6CkqP,K,yICvb/C,O,OACA,O,IACA,O,IACA,MACA,O,IAEA,Q,IAEA,QAEA,UACA,QACA,Q,IACA,Q,IACA,S,uDAEMoB,G,gBAUJ,WAAYtwU,IAAO,gGACXA,IADW,SAiCnBg7K,kBAAoB,SAACnwR,GACnB,IAAIs2F,EAAMt2F,EAAEugB,OAAOxf,MACbU,EAAWzB,EAAEugB,OAAOjgB,KAEvBN,EAAEugB,OAAOmla,SAAW1lb,EAAEugB,OAAOmla,QAAQC,aAEtCrvV,EADsB,IAAIpW,OAAOlgF,EAAEugB,OAAOmla,QAAQC,YAC5Bn9a,QAAQ8tF,EAAK,KANZ,MAQsD,EAAK6e,MAA7E/hF,EARkB,EAQlBA,eAAgBpR,EARE,EAQFA,eAAgBiR,EARd,EAQcA,eAAgBE,EAR9B,EAQ8BA,qBAIvD,GAHAF,mBACGxxB,EAAW60F,IAEVljE,EAAe3xB,GAAW,CAC5B,IAAM86H,EAAS,UAAKw8C,oBAAoB/4K,EAAEugB,OAAOxf,MAAOf,EAAEugB,OAAOjgB,KAAM0hB,GAClEu6G,EAAOj+H,QACV60B,mBACG1xB,EAAW86H,MAjDD,EAuDnBqpT,iBAAmB,SAAC5lb,IAClBiD,SAAS6C,KAAKC,UAAUC,IAAI,eAC5B,EAAKmhL,SAAS,CACZ+nG,SAAS,KAEP,IAAAtgR,iBACF,aAAE,4BAA4BywD,QACb,aAAEr/D,EAAEugB,QAAQuqI,QAAQ,4BAC5BzzH,QAMX,IAAMwuZ,EAAmB7lb,EAAEugB,OAAOuqI,QAAQ,4BACtC+6R,GAAoBA,EAAiB/pX,QAAQwsB,OAC/C,EAAK6sB,MAAM4vU,gBAAgBc,EAAiB/pX,QAAQwsB,QAvErC,EA2EnBinM,gBAAkB,SAAC9kL,GACjB,EAAK08E,SAAS,CACZ+nG,SAAS,KAEP,IAAAtgR,eACF,aAAE,4BAA4ByoB,OAEhCp0B,SAAS6C,KAAKC,UAAU27K,OAAO,eAC/B,EAAKvsE,MAAM4vU,gBAAgB,IARA,MAUoC,EAAK5vU,MAA7D/hF,EAVoB,EAUpBA,eAAgBpR,EAVI,EAUJA,eAAgBmR,EAVZ,EAUYA,qBACjCpyB,EAAQ0pG,EAAMlqF,OAAOxf,MAAQ0pG,EAAMlqF,OAAOxf,MAAMimB,OAAS,GACzDvlB,EAAWgpG,EAAMlqF,OAAOjgB,KACxBi8H,EAAS,UAAKw8C,oBAAoBh4K,EAAOU,EAAUugB,IACrDu6G,EAAOj+H,SAICi+H,EAAOj+H,QAAU80B,EAAe3xB,KAH1C0xB,mBACG1xB,EAAW86H,KA3FC,EAmGnBupT,oBAAsB,SAACr7U,IACA,KAAhBA,EAAMs7U,OAAmC,KAAlBt7U,EAAM3B,SAAkB,EAAKqM,MAAMuvU,eAC7D,EAAKvvU,MAAMuvU,gBAnGb,EAAK9za,MAAQ,CACXs+Q,SAAS,GAHM,E,oFAOC,WAClBltR,OAAOoxX,SAAS,EAAG,GACnBpxX,OAAOiB,SAASytD,iBAAiB,oBAAqB7mD,KAAKm8a,oBACvD,IAAA13a,cACFiqF,YAAW,WACT,EAAKg3L,oBACL,K,6CAKJvtR,OAAOiB,SAAS8pG,oBAAoB,oBAAqBljG,KAAKm8a,qB,0CAW9D/ib,SAASgjb,cAAc90Q,OACvBnvK,OAAOoxX,SAAS,EAAG,K,+BA2EZ,aACwCvpX,KAAKsrG,MAA7C7wF,EADA,EACAA,KAAM8O,EADN,EACMA,eACPzX,EAFC,EACsBqG,eACazQ,SAGpC20a,EAAuBz0a,MAAMC,QAAQ0hB,EAAA,YAAgCA,EAAA,UAA4B90B,OACjG6nb,EAAmB10a,MAAMC,QAAQ0hB,EAAA,QAA4BA,EAAA,MAAwB90B,OACrF8nb,EAAoB30a,MAAMC,QAAQ0hB,EAAA,SAA6BA,EAAA,OAAyB90B,OAE9F,OACE,+BAAKm2F,UAAU,yBACZ5qF,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKrzW,MACtB,8BAAI8tD,UAAU,4CACd,4CAAkB5iF,GAAG,0BAErB,8BAAI4iF,UAAU,2CACb94E,EAAmBk1H,YAClB,gCAAMp8C,UAAU,yBACd,4CAAkB5iF,GAAI7P,OAAO2B,SAASwb,KAAKnb,SAAS,cAAgB,6BAA+B,0BAGrG,wCACE,gCAAMywF,UAAU,yBAAwB,4CAAkB5iF,GAAG,oCAC7D,gCAAM4iF,UAAU,yBAAwB,4CAAkB5iF,GAAG,oCAC7D,gCAAM4iF,UAAU,yBAAwB,4CAAkB5iF,GAAG,sCAIrE,8BAAI4iF,UAAW,wCAAwC5qF,KAAKsrG,MAAM7rE,MAC/Dz/B,KAAKsrG,MAAM5hF,qBAAuB,iCAAmC,KACrE1pB,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKxwW,SACxB,8BAAIirD,UAAU,0BAA0B4xV,aAAW,KACjD,iCAAOtlb,MAAO8I,KAAKsrG,MAAMvqG,SAASihC,UAC3B4oD,UAAW,iCAAmCyxV,EAAuB,mBAAqB,IAC1F/qS,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,yCACrCvR,KAAK,YACLipO,QAAS1/N,KAAK+7a,iBACdp8M,OAAQ3/N,KAAK0lR,gBACb5vD,SAAU91N,KAAKsmR,kBACft+Q,GAAG,YACHy0a,kBAAgB,4BACvB,mCAAkBz6J,QAAQ,YAAY12C,SAAU,SAACk7C,GAAD,OAAO,EAAKl7K,MAAMliF,eAAe,CAAC,UAAao9P,KAAKp7Q,KAAK,SACxGixa,EAAuB,gCAAMzxV,UAAU,uBAAhB,KAAiD,KACzE,mCAAiBhzF,SAAS,eAE1B,KACHoI,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKxwW,UAAY3/B,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKrzW,MAC7D,8BAAI8tD,UAAU,0BAA0B4xV,aAAW,KACjD,iCAAOtlb,MAAO8I,KAAKsrG,MAAMvqG,SAASwgC,MAC3BqpD,UAAW,iCAAmC0xV,EAAmB,mBAAqB,IACtFhrS,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,sCACrCvR,KAAK,QACLipO,QAAS1/N,KAAK+7a,iBACdp8M,OAAQ3/N,KAAK0lR,gBACb5vD,SAAU91N,KAAKsmR,kBACft+Q,GAAG,UACV,mCAAkBg6Q,QAAQ,QAAQ12C,SAAU,SAACk7C,GAAD,OAAO,EAAKl7K,MAAMliF,eAAe,CAAC,MAASo9P,KAAKp7Q,KAAK,UAChGkxa,EAAmB,gCAAM1xV,UAAU,uBAAhB,KAAiD,KACrE,mCAAiBhzF,SAAS,WAE1B,KACHoI,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKxwW,SACxB,8BAAIirD,UAAU,0BAA0B80I,QAAS1/N,KAAK+7a,iBAAkBS,aAAW,IAAI78M,OAAQ3/N,KAAK0lR,iBAClG,mCAAoB9tR,SAAS,cACTuhK,UAAU,EACV6rH,iBAAiB,EACjBD,aAAa,EACbzzI,YAAY,uCAEhC,KACHtxI,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKxwW,SACxB,8BAAIirD,UAAU,0BAA0B4xV,aAAW,KACjD,iCAAOtlb,MAAO8I,KAAKsrG,MAAMvqG,SAASmhC,OAC3B0oD,UAAW,iCAAmC2xV,EAAoB,mBAAqB,IACvFjrS,YAAa72H,EAAKC,cAAc,CAC9B1S,GAAIhI,KAAKsrG,MAAMnzF,eAAeE,QAC1B,0CACA,uCAEN5hB,KAAK,SACLipO,QAAS1/N,KAAK+7a,iBACdp8M,OAAQ3/N,KAAK0lR,gBACb5vD,SAAU91N,KAAKsmR,kBACft+Q,GAAG,WACTu0a,EAAoB,gCAAM3xV,UAAU,uBAAhB,KAAiD,KACtE,mCAAkBo3L,QAAQ,SAAS12C,SAAU,SAACk7C,GAAD,OAAO,EAAKl7K,MAAMliF,eAAe,CAAC,OAAUo9P,KAAKp7Q,KAAK,YACnG,mCAAiBxT,SAAS,YAE1B,KACHoI,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKzwW,MACxB,8BAAIkrD,UAAU,0BAA0B4xV,aAAW,KACjD,iCAAOtlb,MAAO8I,KAAKsrG,MAAMvqG,SAASwgC,MAC3BqpD,UAAW,iCAAmC0xV,EAAmB,mBAAqB,IACtFhrS,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,sCACrCvR,KAAK,QACLipO,QAAS1/N,KAAK+7a,iBACdp8M,OAAQ3/N,KAAK0lR,gBACb5vD,SAAU91N,KAAKsmR,kBACfo2J,WAAY18a,KAAKi8a,oBACjBj0a,GAAG,UAETs0a,EAAmB,gCAAM1xV,UAAU,uBAAhB,KAAiD,KACrE,mCAAkBo3L,QAAQ,QAAQ12C,SAAU,SAACk7C,GAAD,OAAO,EAAKl7K,MAAMliF,eAAe,CAAC,MAASo9P,KAAKp7Q,KAAK,UACjG,mCAAiBxT,SAAS,WAE1B,KACHoI,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKzwW,MACxB,8BAAIkrD,UAAU,0BAA0B4xV,aAAW,KACjD,iCAAOpxa,KAAK,WACLlU,MAAO8I,KAAKsrG,MAAMvqG,SAAS8tK,SAC3BjkF,UAAU,gCACV0mD,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,yCACrCvR,KAAK,WACLipO,QAAS1/N,KAAK+7a,iBACdp8M,OAAQ3/N,KAAK0lR,gBACb5vD,SAAU91N,KAAKsmR,kBACfo2J,WAAY18a,KAAKi8a,oBACjBj0a,GAAG,aAEV,mCAAkBg6Q,QAAQ,WAAW12C,SAAU,SAACk7C,GAAD,OAAO,EAAKl7K,MAAMliF,eAAe,CAAC,SAAYo9P,KAAKp7Q,KAAK,cAEvG,KACFpL,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKzwW,OAAS1/B,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKxwW,WAAa3/B,KAAKsrG,MAAM5hF,qBAkBjF,KAjBF,8BAAIkhE,UAAU,2BACZ,kCAAQn0F,KAAK,aACL66I,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,yCACrC4iF,UAAU,+DACV1zF,MAAO8I,KAAKsrG,MAAMvqG,SAASirH,WAC3B0zG,QAAS1/N,KAAK+7a,iBACdp8M,OAAQ3/N,KAAK0lR,gBACb5vD,SAAU91N,KAAKsmR,mBACrB,kCAAQpvR,MAAM,GAAG4rF,UAAA,GACdroE,EAAKC,cAAc,CAAC1S,GAAI,uDAE1BhI,KAAKsrG,MAAMijB,cAAczmH,KAAI,SAACq9N,GAC7B,OAAO,kCAAQjuO,MAAOiuO,EAASn9N,GAAIxQ,IAAK2tO,EAASn9N,IAAKm9N,EAAS/3G,cAGnE,gCAAMxiC,UAAU,wBAGnB5qF,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKzwW,MACxB,8BAAIkrD,UAAU,oBAAoBpzF,IAAK,aACrC,gCAAMozF,UAAU,4BAA4BkyF,QAAS98K,KAAKsrG,MAAMyvU,iBAAiB,EAAA5qC,KAAKrzW,QACpF,4CAAkB90B,GAAG,+BAGvB,KACHhI,KAAKsrG,MAAM7rE,OAAS,EAAA0wW,KAAKrzW,MACxB,8BAAI8tD,UAAU,oBAAoBpzF,IAAK,cACvC,gCAAMozF,UAAU,4DACVkyF,QAAS98K,KAAKsrG,MAAMyvU,iBAAiB,EAAA5qC,KAAKzwW,QAC9C,4CAAkB13B,GAAG,2BAGrB,W,GA9QW,UAAM6jG,W,EAEtBq2C,UAAY,CACjBziH,KAAM,UAAUm5E,OAAOK,WACvB8hU,iBAAkB,UAAUh8P,KAAK9lE,WACjCvvF,qBAAsB,UAAU04H,KAChCy4R,aAAc,UAAU97P,KACxBm8P,gBAAiB,UAAUn8P,M,GA6RzBuR,EAAqB,CACzBlnK,gCACAE,6C,WAGa,IAAAy+H,aACb,IAAAj8C,UApBsB,SAACxzG,GAAU,MACwDA,EAAMwc,UAAxF/T,EAD0B,EAC1BA,SAAUwoB,EADgB,EAChBA,eAAgBU,EADA,EACAA,gBAAiBskG,EADjB,EACiBA,cAAe7kG,EADhC,EACgCA,qBAGjE,MAAO,CACLvR,eAHqB7f,EAAMqN,gBAI3BskB,kBACAlpB,WACAwoB,iBACAglG,gBACA7kG,0BAUuB4mK,EAAzB,CAA6CsrP,K,iJC1T/C,MACA,O,IACA,M,IACA,SACA,O,IAEA,S,IACA,S,IACA,O,IACA,Q,IACA,MACA,QACA,S,uDAEMe,G,6OASF51a,MAAQ,CACJ61a,cAAc,eACdl+L,KAAM,GACNm+L,QAAS,O,EAQbC,qBAAuB,SAAC90M,GACpB,UAAU9mM,qBAAqB,wBAC/B,EAAKo8I,SAAS,CAACs/P,aAAc50M,K,EAGjC+0M,0BAA4B,SAACr+L,EAAMm+L,GAC/B,UAAU37Y,qBAAqB,gCAC/B,EAAKo8I,SAAS,CACVohE,KAAMA,EACNm+L,QAASA,K,EAIjBG,kBAAoB,SAAC7mb,GACjB,UAAUgrC,eAAe,mBACzB,UAAK0pD,cAAc10F,GACnB,UAAM8tB,SAAS,CAAC7Y,KAAMA,EAANA,eAAsByV,QAAS,CAAC2M,MAAM,KACtD,EAAK8vJ,SAAS,CAAC/sJ,SAAS,IACpB,EAAK+6E,MAAM+vU,QACb,EAAK/vU,MAAM+vU,U,EAIjB4B,oBAAsB,SAAC9mb,GACnB,UAAUgrC,eAAe,qBACzB,UAAK0pD,cAAc10F,IACnB,IAAA65P,kBAAiB,CACbhoB,KAAM,EAAKjhO,MAAM61a,aAAanoa,OAAO,WACjCiqO,KAAwB,IAAlB,EAAK33O,MAAM23O,KACjBm+L,QAAS,EAAK91a,MAAM81a,W,gGAM5B,OACI,+BAAKjyV,UAAU,uDACX,+BAAKA,UAAU,oBACX,+BAAKA,UAAU,6BACX,+BAAKA,UAAU,wBACX,kCAAI,4CAAkB5iF,GAAG,oCACzB,iCAAG,4CAAkBA,GAAG,oCAE3BhI,KAAKsrG,MAAM3qF,aAAe,IACzB,+BAAKiqE,UAAU,yBACX,kCAAQA,UAAU,4BAA4BkyF,QAAS98K,KAAKg9a,mBACxD,gCAAMpyV,UAAU,uCACd,4CAAkB5iF,GAAG,mDAG3B,kCAAQ4iF,UAAU,6BAA6BkyF,QAAS98K,KAAKi9a,qBACzD,gCAAMryV,UAAU,uCACd,4CAAkB5iF,GAAG,+CAI7B,MAER,+BAAK4iF,UAAU,gCACX,+BAAKA,UAAU,0BACX,mCAAWsyV,YAAal9a,KAAK88a,qBAAsBF,aAAc58a,KAAK+G,MAAM61a,eAC5E,mCAAe50M,KAAMhoO,KAAK+G,MAAM61a,aAAcO,YAAan9a,KAAK+8a,0BACjDr+L,KAAM1+O,KAAK+G,MAAM23O,KAAMm+L,QAAS78a,KAAK+G,MAAM81a,WAE7D78a,KAAKsrG,MAAM3qF,YAAc,IACxB,+BAAKiqE,UAAU,yBACX,kCAAQA,UAAU,4BAA4BkyF,QAAS98K,KAAKg9a,mBACxD,gCAAMpyV,UAAU,uCACd,4CAAkB5iF,GAAG,mDAG3B,kCAAQ4iF,UAAU,6BAA6BkyF,QAAS98K,KAAKi9a,qBACzD,gCAAMryV,UAAU,uCACd,4CAAkB5iF,GAAG,+CAI7B,KACJ,+BAAK4iF,UAAU,4BACb,4CAAkB5iF,GAAG,sD,GAnGR,UAAM6jG,W,EAClCuxU,aAAe,CAClBC,OAAQ,UAAU1lb,OAAOshH,Y,EAGtBipC,UAAY,CACfm5R,OAAQ,UAAUt8P,M,cAyGX,IAAAjzE,UAHS,SAACxzG,GAAD,MAAY,CAChCqoB,YAAaroB,EAAMgR,YAAYqX,eAEpB,CAAyBg8Z,I,mJC7HxC,M,IACA,M,IACA,SACA,O,IAEA,S,IACA,S,IACA,Q,uDAEqBW,G,gBAMjB,WAAYhyU,IAAO,gGACTA,IADS,SAUnBiyU,qBAAuB,SAACpnb,GACpB,UAAK00F,cAAc10F,GACnB,EAAKmnL,SAAS,CAAChnL,EAAG,EAAKyQ,MAAMzQ,EAAEknb,SAAS,EAAG,aAZ5B,EAenBC,qBAAuB,SAACtnb,GACpB,UAAK00F,cAAc10F,GACnB,EAAKmnL,SAAS,CAAChnL,EAAG,EAAKyQ,MAAMzQ,EAAE6F,IAAI,EAAG,aAjBvB,EAoBnBuhb,eAAiB,SAAC11M,GACd,IAAM40M,GAAe,aAAO,EAAK71a,MAAMzQ,GAAG0xO,KAAKA,GAC/C,EAAK1qD,SAAS,CAACs/P,aAAcA,IAC7B,EAAKtxU,MAAM4xU,YAAYN,IAvBR,EA0BnBe,iBAAmB,SAACxnb,GAChB,UAAK00F,cAAc10F,GACnB,EAAKmnL,SAAS,CACVhnL,GAAG,eACHsmb,cAAc,iBAElB,EAAKtxU,MAAM4xU,aAAY,iBAhCR,EAoDnBU,WAAa,WACT,IAAM5sW,EAAM,GACRz8E,SACAklN,EAAM,EAEJokO,GAAM,aAAO,EAAK92a,MAAMzQ,GAC9Bunb,EAAI71M,KAAK,GACT,IAAM81M,EAAYD,EAAIt8L,MACtB,IAAKhtP,EAAI,EAAGA,EAAIupb,EAAWvpb,IACvBy8E,EAAIj8E,KAAK,mCAAK6jH,OAAO,GAAGphH,IAAK,SAAWjD,KACxCklN,IAGJ,IAAMskO,EAAc,EAAKh3a,MAAMzQ,EAAEynb,cAC3BxyT,EAAW,EAAKxkH,MAAM61a,cAAgB,EAAK71a,MAAMi3a,MACvD,IAAKzpb,EAAI,EAAGA,EAAIwpb,EAAaxpb,IAEzBy8E,EAAIj8E,KAAK,mCAAK6jH,OAAQrkH,EAAI,EAAGiD,IAAK,MAAQjD,EAC5Bg3H,SAAUA,EAASk2H,UAAY,EAAK16O,MAAMzQ,EAAEmrP,SAC3CltP,EAAI,IAAOg3H,EAASy8G,QACrBz8G,EAAS08G,SAAW,EAAKlhO,MAAMzQ,EAAE2xO,OACjC/3I,MAAO,EAAKwtV,kBAC1BjkO,IAGJ,IAAMwkO,EAAU,EAAKxkO,EAAM,EAC3B,IAAKllN,EAAI,EAAe,IAAZ0pb,GAAiB1pb,EAAI0pb,EAAS1pb,IACtCy8E,EAAIj8E,KAAK,mCAAK6jH,OAAO,GAAGphH,IAAK,UAAYjD,KACzCklN,IAGJ,OAAOzoI,GAnFQ,EAsFnBi3N,cAAgB,WACZ,OACI,+BAAKr9M,UAAU,0CACX,+BAAKA,UAAU,oCAAoCkyF,QAAS,EAAKygQ,sBAC7D,+BAAK3yV,UAAU,8CACd,aAAO,EAAK7jF,MAAMzQ,GAAGknb,SAAS,EAAG,UAAU/oa,OAAO,SAEvD,+BAAKm2E,UAAU,uCAAuCkyF,QAAS,EAAK2gQ,sBAChE,+BAAK7yV,UAAU,iDACd,aAAO,EAAK7jF,MAAMzQ,GAAG6F,IAAI,EAAG,UAAUsY,OAAO,WA5F1D,EAAK1N,MAAQ,CACTzQ,EAAG,EAAKg1G,MAAMsxU,aACdoB,OAAO,eACPpB,aAAc,EAAKtxU,MAAMsxU,cANd,E,yEAoCf,OACI,+BAAKhyV,UAAU,iCACX,mCAAQt0F,EAAG0J,KAAK+G,MAAMzQ,IACrB0J,KAAK49a,aACL59a,KAAKioS,gBACN,+BAAKr9M,UAAU,iCAAiCkyF,QAAS98K,KAAK29a,kBAC1D,+BAAK/yV,UAAU,+BACX,+BAAKA,UAAU,8BAA8B5qF,KAAK+G,MAAM61a,aAAanoa,OAAO,QAC5E,+BAAKm2E,UAAU,iCAAiC5qF,KAAK+G,MAAM61a,aAAa50M,SAE5E,kCAAI,4CAAkBhgO,GAAG,gD,GApDN,UAAM6jG,W,EAClCq2C,UAAY,CACfg7R,YAAa,UAAUn+P,KACvB69P,aAAc,UAAUjlb,Q,aAHX2lb,G,8ECTrB,I,EAAA,O,oCACA,OAEA,IAAMY,EAAkB,SAAC,GAAD,IAAE5nb,EAAF,EAAEA,EAAF,OACpB,+BAAKs0F,UAAU,gCACX,+BAAKA,UAAU,sCAAsCt0F,EAAEme,OAAO,SAC9D,+BAAKm2E,UAAU,qCAAqCt0F,EAAEme,OAAO,MAC7D,+BAAKm2E,UAAU,uCAAsC,4CAAkB5iF,GAAG,0CAC1E,+BAAK4iF,UAAU,uCAAsC,4CAAkB5iF,GAAG,0CAC1E,+BAAK4iF,UAAU,uCAAsC,4CAAkB5iF,GAAG,2CAC1E,+BAAK4iF,UAAU,uCAAsC,4CAAkB5iF,GAAG,6CAC1E,+BAAK4iF,UAAU,uCAAsC,4CAAkB5iF,GAAG,4CAC1E,+BAAK4iF,UAAU,uCAAsC,4CAAkB5iF,GAAG,0CAC1E,+BAAK4iF,UAAU,uCAAsC,4CAAkB5iF,GAAG,8CAIlFk2a,EAAgB3ta,YAAc,oB,UAEf2ta,G,8ECnBf,I,IAAA,M,IACA,Q,mDAEA,IAAMC,EAAU,SAAC,GAAD,IAAEvlU,EAAF,EAAEA,OAAQ1oB,EAAV,EAAUA,MAAOq7B,EAAjB,EAAiBA,SAAjB,OAER,+BAAK3gC,UAAU,iCACVkyF,QAAS,SAAA3mL,GAAA,OAAK,UAAK61K,OAAO71K,GAAG,kBAAM+5F,GAASA,EAAM0oB,QACnD,+BAAKhuB,UAAU,gCAAgCguB,GAC9C2S,EAAW,+BAAK3gC,UAAU,iCAAmC,OAK1EuzV,EAAQ5ta,YAAc,W,UAEP4ta,G,mJCff,M,IACA,MACA,O,IAEA,Q,uDAEqBC,G,gBAQjB,WAAY9yU,IAAO,gGACTA,IADS,SAWnB+yU,gBAAkB,SAAC3/L,EAAMvoP,GACrB,UAAK00F,cAAc10F,GACnB,EAAKmnL,SAAS,CAACghQ,aAAc5/L,IAC7B,EAAKpzI,MAAM6xU,YAAYz+L,EAAM,EAAK33O,MAAM81a,UAdzB,EAiBnB0B,mBAAqB,SAAC1B,EAAS1mb,GAC3B,UAAK00F,cAAc10F,GACnB,EAAKmnL,SAAS,CAACu/P,QAASA,IACxB,EAAKvxU,MAAM6xU,YAAY,EAAKp2a,MAAMu3a,aAAczB,IApBjC,EA2CnB2B,YAAc,WAGV,IAFA,IAAMxtW,EAAM,GAEHz8E,EAAI,EAAKwS,MAAMuoR,UAAW/6R,EAAI,EAAKwS,MAAM03a,QAASlqb,IAAK,CAC5D,IAAImqb,EAAU,KACVlgE,EAAOjqX,EAMX,GALIA,EAAI,KACJmqb,EAAU,KACVlgE,GAAQ,IAGR,EAAKz3W,MAAMu3a,eAAiB/pb,EAC5By8E,EAAIj8E,KACA,+BAAK61F,UAAU,wBAAwBpzF,IAAK,aAAejD,EAAGuoL,QAAS,EAAKuhQ,gBAAgB5mb,KAArB,EAAgClD,IACnG,+BAAKq2F,UAAU,gCAAgC4zR,SAAqBkgE,SAGzE,CACH,IAAMC,EAAW,CAAC,WAAqC,QAAvB,EAAK53a,MAAM81a,QAAoB,UAAY,UACrE+B,EAAoB,CAAC,WAAqC,kBAAvB,EAAK73a,MAAM81a,QAA8B,UAAY,UAE9F7rW,EAAIj8E,KACA,+BAAK61F,UAAU,wBAAwBpzF,IAAK,aAAejD,GACvD,+BAAKq2F,UAAU,+BACVv2E,MAJe,CAACo3F,MAAO,YAIM+yQ,SAAqBkgE,GACvD,+BAAK9zV,UAAU,yEACX,+BAAKA,UAAU,mCACf,+BAAKA,UAAU,kCACX,+BAAKA,UAAU,iCAAiCkyF,QAAS,EAAKyhQ,mBAAmB9mb,KAAxB,EAAmC,QACxF,+BAAKmzF,UAAU,yCAAyCv2E,MAAOsqa,KAEnE,+BAAK/zV,UAAU,sCACb,4CAAkB5iF,GAAG,2CAG3B,+BAAK4iF,UAAU,kCACX,+BAAKA,UAAU,iCACVkyF,QAAS,EAAKyhQ,mBAAmB9mb,KAAxB,EAAmC,kBAC7C,+BAAKmzF,UAAU,yCAAyCv2E,MAAOuqa,KAEnE,+BAAKh0V,UAAU,sCACb,4CAAkB5iF,GAAG,oDAS/C,OAAOgpE,GA1FP,EAAKjqE,MAAQ,CACTuoR,UAAW,EACXmvJ,QAAS,GACTH,aAAc,EAAKhzU,MAAMozI,KACzBm+L,QAAS,EAAKvxU,MAAMuxU,SAPT,E,yEAwBf,IAAI70M,EAAOhoO,KAAKsrG,MAAM08H,KAAKvzN,OAAO,MAC5Boqa,EAAU72M,EAAK3vO,OAAO,GAE5B,OADA2vO,EAAOA,EAAKrpO,QAAQkgb,EAAS,IAEzB,+BAAKj0V,UAAU,6BACX,+BAAKA,UAAU,4BACX,+BAAKA,UAAU,mCAAmCo9I,GAClD,+BAAKp9I,UAAU,yCACX,+BAAKA,UAAU,gCAAgCi0V,GAC/C,+BAAKj0V,UAAU,gCAAgC5qF,KAAKsrG,MAAM08H,KAAKvzN,OAAO,WAG9E,+BAAKm2E,UAAU,+BACV5qF,KAAKw+a,oB,GA7CiB,UAAM3yU,W,EACtCq2C,UAAY,CACfi7R,YAAa,UAAUp+P,KACvB2/D,KAAM,UAAU9lI,OAChBikU,QAAS,UAAUr6Y,OACnBwlM,KAAM,UAAUrwO,Q,aALHymb,G,8ECNrB,I,EAAA,O,oCACA,OAEA,IAAMU,EAAyB,SAACxzU,GAAD,OAC7B,+BAAK1gB,UAAW,+BACb0gB,EAAMsnG,SAAW,uCAAyC,KAC1DtnG,EAAMiyC,OAAS,qCAAuC,KACtDjyC,EAAM+xC,YAAc,2CAA6C,KACjE/xC,EAAMjzF,QAAU,sCAAwC,KACzD,gCAAMuyE,UAAU,oCACd,4CAAkB5iF,GAAG,sBAEvB,+BAAKrI,MAAM,QAAQE,OAAO,QAAQ0gI,QAAQ,cAAcM,QAAQ,MAAMC,MAAM,6BAA6Bi+S,UAAU,gCACjH,oCACE,kCAAQ3ka,EAAE,QAAQC,EAAE,QAAQ1a,MAAM,SAASE,OAAO,SAASm/a,YAAY,oBAAoBh3a,GAAG,YAC5F,oCAAU6rE,GAAG,IAAIC,GAAG,KAAKmrW,GAAG,cAAc3pb,OAAO,uBACjD,0CAAgB4pb,aAAa,IAAID,GAAG,qBAAqB3pb,OAAO,qBAChE,yCAAe6gB,OAAO,yDAAyD/K,KAAK,SAAS6za,GAAG,mBAAmB3pb,OAAO,uBAC1H,uCAEE,uCAAa2pb,GAAG,qBAItB,6BAAGj3a,GAAG,SAAS8yD,OAAO,OAAO0lE,YAAY,IAAIE,SAAS,WACpD,6BAAG14H,GAAG,4BAA4B24H,UAAU,uCAC1C,6BAAG34H,GAAG,sBAAsBhB,OAAO,iBAAiB25H,UAAU,qCAC5D,gCACEnqI,EAAE,2yDACFwR,GAAG,WAIL,gCACExR,EAAE,+1BACFwR,GAAG,YACL,gCACExR,EAAE,8oDACFwR,GAAG,kBAQjB82a,EAAuBvua,YAAc,yB,UAEtBuua,G,qIChDf,O,WACA,MACA,OACA,QACA,S,uDAEMK,E,yOAcFC,kBAAoB,WAChBjnb,OAAOwmT,oBAAsB,SAACxoT,GAC1B,GAAsB,YAAlB,aAAOA,EAAElC,MAAmB,OACLkC,EAAElC,KAAlB2sG,EADqB,EACrBA,MAAO3oG,EADc,EACdA,MACd,GAAI2oG,EACA5oG,QAAQ4B,IAAI,WAAYgnG,GACpB,EAAK0K,MAAMv6E,UACX,EAAKu6E,MAAMv6E,SAAS6vE,GAExBzoG,OAAOknb,iBAAkB,EACzB,EAAK/zU,MAAMg0U,cAOZ,GAAGrnb,EAAO,CACb,IAAIsnb,EAAWtnb,EACf,EAAKqzG,MAAMg0U,OAAO,EAAKh0U,MAAMv6E,UAC7B,IAAIyuZ,EAAcD,EAAS/6a,MAAM,aACjC,GAAGg7a,GAAeA,EAAY/qb,OAAS,EAAG,CACxC,IAAIgrb,EAAOtrU,KAAKC,MAAMorU,EAAY,IAC/BC,EAAK1pY,UACNwpY,EAAWE,EAAK1pY,SAGpB,EAAKu1D,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTt4B,OAAO,EACPi+C,MAAO,2BACPH,QAASwpY,EACTzlY,QAAS,CAAC,CACRx3B,KAAM,sBACNmpF,MAAO,MACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAS,IACxC,EAAK+6E,MAAMv6E,UACZ,EAAKu6E,MAAMv6E,SAAS94B,WAShCE,OAAO0uD,iBACP1uD,OAAO0uD,iBAAiB,UAAW83P,qBAAqB,GACjDxmT,OAAOymT,aACdzmT,OAAOymT,YAAY,YAAaD,sB,2GA9DtC3+S,KAAKo/a,sB,2CAIFjnb,OAAOknb,kBACJr/a,KAAKsrG,MAAMv6E,UACb/wB,KAAKsrG,MAAMv6E,WAEb/wB,KAAKsrG,MAAMg0U,Y,+BA0DN,MACiBt/a,KAAKsrG,MAApBr2F,EADF,EACEA,MAEP,IAHK,EACSuY,KAGV,OAAO,KAIX,IAAMkyZ,EAAYA,EAAZA,oCAAkDzqa,EAAlD,yBACN,OACI,+BAAK21E,UAAU,uBACX,kCACI5iF,GAAI,iBAAmBiN,EACvBk/L,OAAQh8M,OAAOoB,OAAOgwX,SAAS,EAAG,GAClCo2D,iBAAiB,EACjBr2X,MAAM,GAENvqD,IAAK2gb,EACLE,YAAY,IACZC,UAAU,MACVxra,MAAO,CAAC1U,MAAO,OAAQE,OAAQ,4B,oBASnDs/a,EAAcj9R,UAAY,CACtBjtI,MAAO,UAAU2jG,OACjBprF,KAAM,UAAU40H,KAAKnpC,WACrBloF,SAAU,UAAUguJ,KACpBugQ,OAAQ,UAAUvgQ,KAAK9lE,WACvB6mU,qBAAsB,UAAUt9Y,Q,WAsBrB,IAAAspE,UAnBS,SAAA/kG,GAAS,IACtBq5U,EAA+Cr5U,EAA/Cq5U,cAAe92U,EAAgCvC,EAAhCuC,YAAa3D,EAAmBoB,EAAnBpB,gBACnC,MAAO,CACH6nB,KAAM4yT,EAAc5yT,KACpBuD,SAAUqvT,EAAcrvT,SACxB9b,MAAO3L,EAAY2L,MACnB0L,YAAarX,EAAYqX,YACzBO,aAAc5X,EAAY4X,aAC1B4+Z,qBAAsBn6a,EAAgB4a,eAInB,SAAA0D,GACvB,MAAO,CACHq7Z,OAAQ,SAACvuZ,GAAD,OAAc9M,GAAS,IAAA8L,eAAa,EAAOgB,KACnD/B,sBAAuB,SAAC+wZ,GAAD,OAAoB97Z,GAAS,IAAA+K,uBAAsB+wZ,QAInE,CAA6CZ,I,0HClI5D,O,OACA,OACA,OAEA,Q,IACA,SACA,QACA,SACA,SACA,S,uDAEMa,E,YAEJ,WAAY10U,IAAO,gGACXA,IADW,SAOnB20U,iBAAmB,WACb,EAAKl5a,MAAMm5a,eACT,EAAK50U,MAAM64N,iBACb,EAAK74N,MAAM64N,kBAEb,EAAKg8G,sBAZU,EAgBnBA,kBAAoB,WAClB,IAAMrua,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SACrD,EAAK4jG,MAAMr6E,aAAY,IACnB,EAAKq6E,MAAM8jB,YAAet9G,EAAmBuf,mBAC1Cvf,EAAmB+yM,oBAAsBzrN,SAASC,SAAS2b,WAChE7c,OAAO6+F,KAAK,EAAKsU,MAAM8jB,WAAY,WAnBrC,EAAKroH,MAAQ,CACXm5a,cAAc,GAHC,E,yEAyBV,WACP,IAAKlgb,KAAKsrG,MAAM44N,eACd,OAAO,KAFF,MAI4ClkU,KAAKsrG,MAAhD7wF,EAJD,EAICA,KAAM/P,EAJP,EAIOA,iBAAkByN,EAJzB,EAIyBA,eAC1BrG,EAAqBqG,EAAezQ,SACpC/F,GAAa,IAAA+E,iBACbqjH,GAAa,IAAA7oH,wBAAuBS,GACpCsuL,GAAkB,IAAAD,oBAAmBtlL,GACvC01a,EAAcnwP,EACbA,EAAgB7kL,OAAS,EAAAC,eAAemvK,QACvCyV,EAAgB3kL,QAChB,IAAA28M,kBAAiBh4B,EAAgB3kL,OAAQy+G,IACvC,IAAAk+F,kBAAiBh4B,EAAgB3kL,OAAQy+G,GAAYjlH,QAAQ,GAC7D,EACJ9E,KAAKsrG,MAAMivE,SAAW,GACpB8lQ,GAAgB,IAAAjwP,kBAAiB1lL,EAAkBq/G,EAAY5xG,IAAmB,EACxF,OACE,+BAAKyyE,UAAU,mCACb,+BAAKA,UAAU,sBAAsBkyF,QAAS,SAAC3mL,GAAQA,EAAE40F,iBAAkB50F,EAAE20F,oBAC3E,+BAAKF,UAAU,8BAEb,+BAAKA,UAAU,mCAAkC,4CAAkB5iF,GAAG,wBACtE,+BAAK4iF,UAAU,4CAA4CkyF,QAAS98K,KAAKmgb,oBACzE,+BAAKv1V,UAAU,oCACb,+BAAKA,UAAU,0CAAyC,4CAAkB5iF,GAAG,wBAC7E,+BAAK4iF,UAAU,4CACZ,IAAAl3E,sBAAqB5B,GAAoB,IAAA9P,cAAa+nH,OAI7D,+BAAKn/B,UAAU,8DACZ5qF,KAAKsrG,MAAMg1U,gBAAkB,mCAAK,4CAAkBt4a,GAAG,8BAA1B,IAAyD,gCAAM4iF,UAAU,QAAQw1V,EAAxB,KAAsC,4CAAkBp4a,GAAG,8BAA3D,KACrF,4CAAkBA,GAAG,8BADO,IACyBo4a,EADzB,KACuC,4CAAkBp4a,GAAG,+BAE1F,+BAAK4iF,UAAU,sCACZw1V,EADH,KACiB,4CAAkBp4a,GAAG,gCAEtC,+BAAK4iF,UAAU,8CAAf,IACI,IAAIz2E,KAAKC,kBAAa4+C,EAAW,CAAEx+C,sBAAuB,EAAGD,sBAAuB,IAAKE,OAAO4ra,IAEpG,mCACE/9Z,KAAS7H,EAAKC,cAAc,CAAE1S,GAAI,sCAA0C,IAAMo4a,EAAc,KAAQ3la,EAAKC,cAAc,CAAE1S,GAAI,sCACjI0tN,QAAS11N,KAAK+G,MAAMm5a,aACpB1qG,UAAW,SAAC9/G,GAAD,OAAa,EAAKp4C,SAAS,CAAE4iQ,aAAcxqN,QAE1D,+BAAK9qI,UAAW,8BAAgC5qF,KAAK+G,MAAMm5a,aAAe,GAAK,cAC7E,kCAAQt1V,UAAU,+BAA+BkyF,QAAS98K,KAAKigb,kBAC7D,gCAAMr1V,UAAU,sBAAqB,4CAAkB5iF,GAAG,8BAA1D,c,oBAwBRsoL,EAAqB,CACzBr/J,0BACAjC,+C,WAGa,IAAA+4H,aACb,IAAAj8C,UArBsB,SAAA/kG,GAAS,IACvBuC,EAAwDvC,EAAxDuC,YAAa3D,EAA2CoB,EAA3CpB,gBAAiBvD,EAA0B2E,EAA1B3E,UAAWsnH,EAAe3iH,EAAf2iH,WAC1Ch/G,EAAoB3D,EAAM6D,oBAA1BF,iBACP,MAAO,CACLuK,MAAO3L,EAAY2L,MACnBslK,QAAS50K,EAAgB+B,SAAS6yK,QAClC+lQ,eAAgB36a,EAAgB+B,SAAS44a,eACzCp8G,eAAgB9hU,EAAU8hU,eAC1BC,gBAAiB/hU,EAAU+hU,gBAC3BhsT,eAAgBpR,EAAMpB,gBACtBypH,WAAY1F,EAAW0F,WACvB1kH,sBAUuB4lL,EAAzB,CAA6C0vP,K,wGCpH/C,O,OACA,OACA,OACA,QAEA,S,IACA,Q,IACA,S,IACA,S,IACA,SACA,SACA,U,WACA,O,IACA,S,IAEA,QACA,Q,IACA,SACA,QACA,S,mDAEA,IA2JM1vP,EAAqB,CACzB2d,wDACA9gL,kCACA3G,4DACAk+L,qC,WAIA,IAAA54G,UAtBsB,SAACxzG,GAAU,MAC2BA,EAAMkwO,iBAA3Dnd,EAD0B,EAC1BA,qBAAsBC,EADI,EACJA,4BACtBl+L,EAAgB90B,EAAM8J,UAAtBgrB,aACA6hG,EAAiB32H,EAAMqxH,qBAAvBsF,cAEP,MAAO,CACLo8F,uBACAC,8BACAl+L,eACAjV,eAAgB7f,EAAMqN,gBACtBspH,mBAYuBqhE,EAAzB,EAnKuB,SAAChlF,GAAU,IAE3B2iG,EAC4E3iG,EAD5E2iG,2BAA4Bod,EACgD//G,EADhD+/G,qBAAsBC,EAC0BhgH,EAD1BggH,4BAA6Bl+L,EACHk+E,EADGl+E,aAAcD,EACjBm+E,EADiBn+E,gBAClG3G,EAAiF8kF,EAAjF9kF,6BAA8BrO,EAAmDmzF,EAAnDnzF,eAAgBusM,EAAmCp5G,EAAnCo5G,iBAAkBz1F,EAAiB3jB,EAAjB2jB,cAHhC,GAKI,IAAAkyB,UAAS,EAAAq7J,cAAcC,gBAL3B,qBAK3BtkF,EAL2B,KAKdQ,EALc,QAMJ,IAAAx3E,UAAA,kBANI,qBAM3B2S,EAN2B,KAMlBysR,EANkB,KAO5B9vP,GAAU,IAAAiF,cAEhB,IAAK21B,EACH,OAAO,KAGT,IAAMm1N,EAAmBroN,IAAgB,EAAAqkF,cAAcG,eAEjD/wG,EAAa,WACjBqC,GAA2B,GAC3B0qB,EAAe,EAAA6jF,cAAcC,iBAGzBgkI,EAAgB,SAACtoN,GACrBQ,EAAeR,GACfooN,mBAAezsR,EAAf,CAAwBwyO,cAAe,OAGnCo6C,EAAe,WACnBh8N,EAAiBz1F,EAAcnnH,KAAI,SAAAqqB,GAEjC,OADAA,EAASo5F,SAAWuoC,EAAQwyD,kBAAkBnsN,SAASg4B,EAASnqB,IACzDmqB,MAETwmM,EAAe,EAAA6jF,cAAcE,aAC7B,IAAM33F,GAAiB,IAAA7wG,qBAAoB,oBAAsB,GACjE6wG,EAAe3rN,SAASC,SAASmC,QAAU,aAAes4J,EAAQwyD,mBAClE,IAAAvyG,qBAAoB,kBAAmBI,KAAK2W,UAAUi6F,KAGlDmhH,EAAyB,WAE7B,OADAq6G,mBAAezsR,EAAf,CAAwBkxH,iBAAiB,KAClC,IAAI5uR,SAAQ,SAACC,GAClBq4F,YAAW,WACT6xV,mBAAezsR,EAAf,CAAwBkxH,iBAAiB,KACzC3uR,MACC,SAIDswN,EAAgB,SAACg6N,GACrBJ,mBAAezsR,EAAY6sR,KA8BvBC,GAA6B,UAAO//a,aAAezH,SAASC,SAAS2b,aAAewra,EACpFK,EAAoBznb,SAASC,SAAS4b,OAASkD,EAAeghQ,WACxB,KAAvChhQ,EAAeihQ,oBAEpB,OACE,mCAAaxtE,WAAYA,IACtB,SAACD,GAAD,OACC,kCAAoByhI,SAApB,CAA6Bl2U,MAAO48J,EAASysR,WAAYA,GACvD,+BAAK31V,UAAU,sBACb,+BAAKA,UAAU,oBACf,gCAAMA,UAAU,0BACd,4CAAkB5iF,GAChBmwN,IAAgB,EAAAqkF,cAAcC,eAC1BokI,EAAoB,8BAAgC,oBACpD,mCAGL1oN,IAAgB,EAAAqkF,cAAcC,eAC7B,kCAAQ7xN,UAAU,yEACVkyF,QAAS,kBAAM2jQ,EAAc,EAAAjkI,cAAcE,eACjD,4CAAkB10S,GAAG,mCAErB,MAEN,+BAAK4iF,UAAU,kBACb,mCAAyBuuE,SAAUg/D,IAAgB,EAAAqkF,cAAcC,eACxCokI,kBAAmBA,EACnBl6N,cAAeA,IACxC,mCAA6BxtD,SAAUg/D,IAAgB,EAAAqkF,cAAcE,YACxCokI,iBAAkB,kBAAML,EAAc,EAAAjkI,cAAcG,mBAChFxkS,EAAezQ,SAASm9M,mBAAqB,mCAA8B1rD,SAAUqnR,EACnBl6N,kBAAmBxyD,EAAQwyD,kBAC3BK,cAAeA,IAAmB,MAEvG,+BAAK/7H,UAAW,oBAAsBg2V,EAA4B,gCAAkC,KACjGA,EACC,+BAAKh2V,UAAU,yBACb,yCAEA,KACJ,+BAAKA,UAAU,iCACb,kCAAQA,UAAU,0EACVkyF,QAAS,kBArEP,SAAC6uB,GACvB,GAAI60O,EACFC,EAAc,EAAAjkI,cAAcE,kBACvB,GAAIvkF,IAAgB,EAAAqkF,cAAcC,gBAEvC,GADA9wG,EAAYC,GACwB,cAAhC0f,EAA6C,CAC/C,OAAQl+L,GACN,IAAK,aACH5G,GAA6B,GAC7BiqK,EAAQ17L,KAAK,cACb,MACF,IAAK,eACH07L,EAAQ17L,KAAK,gBACb,MACF,IAAK,YACL,SACE,aAAiB,gBAAgB,GAIrCo4B,EAAgB,UAGlBszZ,EAAc,EAAAjkI,cAAcC,gBA8CKj/H,CAAgBmuB,KACrC,4CAAkB3jM,GAAG,4BAEtBw4a,EACC,kCAAQ51V,UAAU,+BAA+BkyF,QAAS4jQ,GACxD,4CAAkB14a,GAAG,kBAGvB,mCAA6B4jM,WAAYD,EAAYl0M,UAAZ,EAAuBm0M,GACnCs6H,uBAAwBA,EACxBv/G,cAAeA,EACfwR,YAAaA,e,6FCvJ5D,O,OACA,OACA,O,IACA,MAEA,S,IACA,S,IACA,Q,IACA,Q,IACA,S,IACA,S,IACA,SACA,SACA,Q,mDAEA,IAAM4oN,EAA0B,SAACz1U,GAAU,OAED,IAAA61C,UAAS,IAFR,qBAElC6/R,EAFkC,KAEpBC,EAFoB,QAGP,IAAA9/R,UAAS,IAHF,qBAGlC+/R,EAHkC,KAGvBC,EAHuB,QAIO,IAAAhgS,WAAS,GAJhB,qBAIlCigS,EAJkC,KAIhBC,EAJgB,KAKlCloR,EAC6C7tD,EAD7C6tD,SAAUqyD,EACmClgH,EADnCkgH,2BAA4BrO,EACO7xG,EADP6xG,iBAAkBwJ,EACXr7G,EADWq7G,cAAeqe,EAC1B15H,EAD0B05H,4BAC5EE,EAAkD55H,EAAlD45H,4BAA6B27M,EAAqBv1U,EAArBu1U,kBAgC/B,IALA,IAAAl/T,YAAU,YAzBuB,WAC/B,qBAKE,OAJAs/T,EAAgB/7M,GAChB/nB,EAAiB+nB,GACjBi8M,EAAan8M,GACbq8M,GAAoB,IACb,EAET,UAAQz8M,2BACL/yM,MAAK,SAACswE,GACL,GAAIA,GAAYA,EAASluG,KAAM,CAC7B,IAAMqtb,EAAUn/U,EAASluG,KAAK8wO,UAAU/9N,QAAO,SAAAm+N,GAAA,OAAYA,EAAS/3G,YACpE6zT,EAAgBK,GAChBnkO,EAAiBmkO,GACjBH,EAAah/U,EAASluG,KAAK6wO,QAAQ99N,QAAO,SAAAi+N,GAAA,OAAUA,EAAO73G,UAAY63G,EAAO1jM,UAEhF8/Y,GAAoB,GACpBrpb,QAAQ4B,IAAI,oCAAqCuoG,MAElD9vE,OAAM,SAACp6B,GACNopb,GAAoB,GACpBrpb,QAAQC,MAAMA,MAKlB2sO,KAEC,KAEEw8M,EACH,OACE,+BAAKx2V,UAAW,oBAAsBuuE,EAAW,eAAiB,KAChE,yCAKN,IAAIooR,EAAgBL,EAChB3yT,EAAgByyT,EACpB,GAAIx1N,EAA4B,CAC9B,IAAMg2N,EAAah2N,EAA2BlvN,cAC9CiyH,EAAgByyT,EAAah6a,QAAO,SAAAmmH,GAClC,OAAOA,EAAYC,SAAS9wH,cAAcnC,SAASqnb,MAErDD,EAAgBL,EAAUl6a,QAAO,SAAA4rY,GAC/B,OAAOA,EAASxlR,SAAS9wH,cAAcnC,SAASqnb,IAAe5uC,EAASrxW,MAAMjlC,cAAcnC,SAASqnb,MAIzG,OACE,+BAAK52V,UAAW,oBAAsBuuE,EAAW,eAAiB,KAChE,wCACA,mCAA4B0nR,kBAAmBA,IAC5C,SAACxuC,GAAD,OACC,wCACE,mCAA0B9jR,cAAeA,EACfsyT,kBAAmBA,EACnBxuC,kBAAmBA,IAC7C,mCAA0BkvC,cAAeA,EACfV,kBAAmBA,EACnBxuC,kBAAmBA,EACnB1rL,cAAeA,UAQrDo6N,EAAwB7+R,UAAY,CAClCiX,SAAU,UAAU/W,KAAKnpC,WACzB0tG,cAAe,UAAU5nC,KACzB8hQ,kBAAmB,UAAUz+R,MAG/B,IAUMkuC,EAAqB,CACzBi7B,8DACApO,qC,WAGa,IAAAp1D,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAU,MAC8DA,EAAMkwO,iBACrG,MAAO,CACLhd,2BAH+B,EAC1BA,2BAGLwZ,4BAJ+B,EACEA,4BAIjCE,4BAL+B,EAC+BA,4BAK9DvkN,YAAaroB,EAAMgR,YAAYqX,eAUR2vK,EAAzB,CAA6CywP,K,8ECnH/C,W,OACA,O,IACA,MACA,S,IACA,SACA,U,IACA,S,mDAEA,IAAMU,EAA2B,SAACn2U,GAAU,IAEnCi2U,EAC+Bj2U,EAD/Bi2U,cAAe71N,EACgBpgH,EADhBogH,4BAA6B/+F,EACbrhB,EADaqhB,yBAA0B5rH,EACvCuqG,EADuCvqG,SAAUsxY,EACjD/mS,EADiD+mS,kBACrF1rL,EAAoCr7G,EAApCq7G,cAAek6N,EAAqBv1U,EAArBu1U,mBAEjB,IAAAl/T,YAAU,WACR,GAAI5gH,GAAYA,EAASwgC,QAAUorF,EAA0B,CAC3D,IAAM+0T,EAAmBH,EAAcz1a,MAAK,SAAA8mY,GAAA,OAAYA,EAASrxW,QAAUxgC,EAASwgC,SAChFmgZ,GACFh2N,EAA4Bg2N,MAI/B,CAAC3gb,EAASwgC,QAEb,IAAMogZ,EAAsB,SAACD,GAC3Bh2N,EAA4Bg2N,GAC5B/6N,EAAc,CAAC2/K,cAAe,MAGhC,OACE,kCAAoB19D,SAApB,MAEG,gBAAE09D,EAAF,EAAEA,cAAF,OACC,mCACEgM,oBAAqBuuC,EACrBxuC,kBAAmBA,EACnBl3F,WAAYomI,EACZpvC,aAAcxlR,EACdulR,aAAcyvC,EACdvvC,gBAAgB,+BAChBl8V,MAAM,6BACNi6E,aAAcm2Q,QAOxBm7C,EAAyBv/R,UAAY,CACnCq/R,cAAe,UAAUroU,QAAQ,UAAUt/D,MAAV,sBAAoCq/D,WACrE0T,yBAA0B,UAAU/yE,MAAV,qBAC1By4V,kBAAmB,UAAUz4V,MAAM,CACjCj6C,MAAO,UAAUi5G,OACjB/4G,OAAQ,UAAU+4G,UAItB,IAOM03E,EAAqB,CACzBo7B,2D,WAGa,IAAA5/G,UAXS,SAACxzG,GACvB,MAAO,CACLq0H,yBAA0Br0H,EAAMkwO,iBAAiB77G,yBACjD5rH,SAAUzI,EAAMwc,UAAU/T,YAQUuvL,EAAzB,CAA6CmxP,I,8ECnE5D,W,OACA,O,IACA,MACA,S,IACA,SACA,U,mDAEA,IAAMG,EAA2B,SAACt2U,GAAU,IAEnCijB,EACgBjjB,EADhBijB,cAAek9F,EACCngH,EADDmgH,4BAA6B7+F,EAC5BthB,EAD4BshB,yBAA0B7rH,EACtDuqG,EADsDvqG,SAAUsxY,EAChE/mS,EADgE+mS,kBACrFwuC,EAAqBv1U,EAArBu1U,kBAYF,OAVA,IAAAl/T,YAAU,WACR,GAAI5gH,GAAYA,EAASirH,aAAeY,EAA0B,CAChE,IAAMyB,EAAmBE,EAAcziH,MAAK,SAAAq5N,GAAA,OAAYA,EAASn9N,KAAOjH,EAASirH,cAC7EqC,GACFo9F,EAA4Bp9F,MAI/B,CAACttH,EAASirH,aAET60T,EACK,KAIP,mCACExuC,kBAAmBA,EACnBl3F,WAAY5sL,EACZ4jR,aAAcvlR,EACdslR,aAAczmL,EACd2mL,gBAAgB,+BAChBl8V,MAAM,gCAKZ0rY,EAAyB1/R,UAAY,CACnC3zB,cAAe,UAAUrV,QAAQ,UAAUt/D,MAAV,sBAAoCq/D,WACrE2T,yBAA0B,UAAUhzE,MAAV,qBAC1By4V,kBAAmB,UAAUz4V,MAAM,CACjCj6C,MAAO,UAAUi5G,OACjB/4G,OAAQ,UAAU+4G,UAItB,IAOM03E,EAAqB,CACzBm7B,2D,WAGa,IAAA3/G,UAXS,SAACxzG,GACvB,MAAO,CACLs0H,yBAA0Bt0H,EAAMkwO,iBAAiB57G,yBACjD7rH,SAAUzI,EAAMwc,UAAU/T,YAQUuvL,EAAzB,CAA6CsxP,I,6FC1D5D,O,OACA,OACA,O,IACA,M,mDAEA,IAAMC,EAA6B,SAACv2U,GAAU,OAEM,IAAA61C,UAAS,MAFf,qBAErCkxP,EAFqC,KAElByvC,EAFkB,KAGtCC,GAAoB,IAAA9hS,QAAO,MAC1Bt/H,EAA4C2qF,EAA5C3qF,YAAa6/H,EAA+Bl1C,EAA/Bk1C,SAAUqgS,EAAqBv1U,EAArBu1U,kBAmB9B,OAPA,IAAAl/T,YAAU,YAV0B,WAClC,GAAIogU,GAAqBA,EAAkBvtU,SAAWutU,EAAkBvtU,QAAQ3C,YAAa,CAC3F,IAAMpxG,EAAWkgB,EAAc,IAC/Bmha,EAAqB,CACnBnib,MAAOc,GAAYogb,EAAoBkB,EAAkBvtU,QAAQ3C,YAAc,KAC/EhyG,OAAQY,GAAYogb,EAAoBkB,EAAkBvtU,QAAQ1C,aAAe,QAMrFkwU,KAEC,CAACrha,EAAaoha,IAKf,+BAAKn3V,UAAU,cAAco1D,IAAK+hS,GAC/BvhS,EAAS6xP,KAKhBwvC,EAA2B3/R,UAAY,CACrC1B,SAAU,UAAUu+B,KAAK9lE,WACzB4nU,kBAAmB,UAAUz+R,M,WAWhB,IAAA2F,aACb,IAAAj8C,UATsB,SAACxzG,GACvB,MAAO,CACLqoB,YAAaroB,EAAMgR,YAAYqX,eAIR,GAGzB,CAA6Ckha,K,8ECjD/C,I,IAAA,MACA,O,IACA,MACA,O,IAEA,S,IACA,SACA,S,IACA,S,IACA,Q,IACA,QACA,S,IACA,Q,mDAEA,IAsCMI,EAA8B,SAAC32U,GAAU,IAEtC6tD,EAAgF7tD,EAAhF6tD,SAAUhhJ,EAAsEmzF,EAAtEnzF,eAAgB2oa,EAAsDx1U,EAAtDw1U,iBAAkB7xT,EAAoC3jB,EAApC2jB,cAAe21F,EAAqBt5G,EAArBs5G,kBAC5D5hE,EAAc,CAClB,UAAa,iDACb,SAAa,gDACb,YAAe,oDACf,OAAa,oDACb,SAAa,gDACb,KAAY7qI,EAAeG,cAAgB,gDAAkD,4CAC7F,MAAY,6CACZ,OAAaH,EAAeE,QAAU,mDAAqD,8CAC3F,MAAa,8CAEVF,EAAeG,sBACX0qI,EAAA,MAET,IAAMk/R,EAvDgB,SAAC/pa,EAAgB82G,GACvC,IAAMizT,EAAe,CACnB,6BAAgC,CAC9B5wS,YAAa,mEACbwZ,4CAGJ,OAAI3yI,EAAeG,cAC4B,QAArCH,EAAezQ,SAAS4M,SAAsB,GAAK4ta,GAEzD/pa,EAAezQ,SAASm9M,oBAAuB51F,EAAcx6H,OAAS,IAG1Eytb,EAAA,qBAAuC,CACrC5wS,YAAa,mDACbwZ,8CAJQo3R,GA4CWC,CAAgBhqa,EAAgB82G,GACjDmzT,EApC4B,SAACjqa,EAAgB82G,GACjD,IAAK92G,EAAezQ,SAASm9M,oBAAuB51F,EAAcx6H,QAAU,EAC1E,MAAO,GAET,IAAI6xN,GAAoB,IAAApB,sBAAqBj2F,GAI7C,OAHI92G,EAAe8/F,qBACjBquG,EAAoBA,EAAkBt/M,QAAO,SAACq7a,EAAMC,GAAP,OAAmC,IAAdA,MAE/Dh8N,EAAkB7xN,OAGU,IAA7B6xN,EAAkB7xN,OACb,UAAK66K,sBAAsBg3C,EAAkB,GAAG7vN,KAAM,KAAO,kBAE7D6vN,EAAkB7xN,OAAS,sBAL3B,GA2BgB8tb,CAA0Bpqa,EAAgB82G,GAEnE,OACE,+BAAKrkC,UAAW,gBAAkBuuE,EAAW,eAAiB,KAC5D,+BAAKvuE,UAAU,cACZl2F,OAAOmc,KAAKmyI,GAAal7I,KAAI,SAAClQ,EAAUynX,GACvC,OACE,kCAAoBz2C,SAApB,CAA6BpxU,IAAK6nX,IAE/B,gBAAEr6F,EAAF,EAAEA,gBAAF,MAAqC,gBAAbptR,EACvB,mCACEuhK,SAAUA,EACV6rH,gBAAiBA,EACjBptR,SAAUA,EACV05I,YAAa0R,EAAYprJ,KAG3B,mCACEuhK,SAAUA,EACV6rH,gBAAiBA,EACjBptR,SAAUA,EACV05I,YAAa0R,EAAYprJ,WAMlClD,OAAOmc,KAAKqxa,GAAcp6a,KAAI,SAAClQ,EAAUynX,GACxC,OACE,mCACE7nX,IAAK6nX,EACLznX,SAAUA,EACV6rR,OAAQy+J,EAAatqb,QAI1BugB,EAAezQ,SAASm9M,oBAAuB51F,EAAcx6H,OAAS,EACrE,+BAAKm2F,UAAU,mDACb,kCAAQA,UAAU,0CAA0CkyF,QAASgkQ,GACnE,4CAAkB94a,GAAG,gCAEnB48M,EACA,gCAAMh6H,UAAW,+CAAiDw3V,EAAqB,QAAU,SAC5FA,EAAqB,wBAA0B,KACjDA,GAAsB,gCAHL,mCAAgB9+a,KAAK,QAO7C,QAMZ2+a,EAA4B//R,UAAY,CACtCiX,SAAU,UAAU/W,KAAKnpC,WACzB6nU,iBAAkB,UAAU/hQ,M,WAiBf,IAAAjzE,UAdS,SAACxzG,GAAU,MACUA,EAAMqxH,qBAA1CsF,EAD0B,EAC1BA,cAAe21F,EADW,EACXA,kBACtB,MAAO,CACL4G,2BAA4BlzN,EAAMkwO,iBAAiBhd,2BACnDrzM,eAAgB7f,EAAMqN,gBACtBspH,gBACA21F,uBAIuB,GAIZ,CAA6Cq9N,I,6FC/I5D,O,OACA,OACA,O,IACA,M,IACA,QACA,QACA,Q,IACA,S,mDAEA,IAAMO,EAAmC,SAACl3U,GAAU,IAE3C1zG,EACqE0zG,EADrE1zG,SAAUmJ,EAC2DuqG,EAD3DvqG,SAAUqoB,EACiDkiF,EADjDliF,eAAgB3O,EACiC6wF,EADjC7wF,KAAM62H,EAC2BhmC,EAD3BgmC,YAAa/nH,EACc+hF,EADd/hF,eAAgBD,EACFgiF,EADEhiF,qBAC5E07P,EAA0E15K,EAA1E05K,gBAAiB7rH,EAAyD7tD,EAAzD6tD,SAAUhhJ,EAA+CmzF,EAA/CnzF,eAAgBmzM,EAA+BhgH,EAA/BggH,4BACvClrE,GAAY,IAAAF,gBAEZykI,EAAa5jR,EAASnJ,GAEtB+nO,EAAS,WACb,IAAMjtG,EAAS,UAAKw8C,oBAAoBy1G,EAAY/sR,EAAUugB,IAC1Du6G,EAAOj+H,SAICi+H,EAAOj+H,QAAU80B,EAAe3xB,KAH1C0xB,mBACG1xB,EAAW86H,MASlB,IAAA/Q,YAAU,WACJy+B,KAAe+Y,GAEjBwmE,MAOD,CAACqlD,IAEJ,IAcMoB,EAAcx+Q,MAAMC,QAAQ0hB,EAAe3xB,KAAc2xB,EAAe3xB,GAAUnD,OAElFgub,EAAiBtqa,EAAeG,cAClC,CAAC,WAAY,OAAQ,SACrB,CAAC,YAAa,QAAS,SAAU,eAErC,OACE,+BAAKsyE,UAAU,aACb,iCAAOx/E,KAAK,OACL3U,KAAMmB,EACNgzF,UAAW,2CAA6Cw7L,EAAc,mBAAqB,IAC3FtwD,SAzBM,SAACl1H,GAIhB,GAHAx3E,mBACGxxB,EAAWgpG,EAAMlqF,OAAOxf,QAEvBqyB,EAAe3xB,GAAW,CAC5B,IAAM86H,EAAS,UAAKw8C,oBAAoBtuE,EAAMlqF,OAAOxf,MAAOU,EAAUugB,GACjEu6G,EAAOj+H,QACV60B,mBACG1xB,EAAW86H,MAkBTitG,OAAQA,EACRruF,YAAa72H,EAAKC,cAAc,CAAC1S,GAAIspI,IACrCp6I,MAAOytR,IAEb89J,EAAetob,SAASvC,GAAY,gCAAMgzF,UAAU,uBAAhB,KAAiD,KACtE,WAAbhzF,IACEugB,EAAezQ,SAASC,SACvBg9Q,GACgC,cAAhCr5D,GACC1jN,MAAMC,QAAQ0hB,EAAe3xB,KAAe2xB,EAAe3xB,GAAUnD,OAMxE,mCAAiBmD,SAAUA,IAL7B,+BAAKgzF,UAAU,qBACb,gCAAMA,UAAU,2BACd,4CAAkB5iF,GAAI,qCAQlCw6a,EAAiCtgS,UAAY,CAC3CtqJ,SAAU,UAAU4qC,OAAOy2E,WAC3Bq4B,YAAa,UAAU9uG,OAAOy2E,WAC9B+rK,gBAAiB,UAAU5iI,KAAKnpC,WAChCkgD,SAAU,UAAU/W,KAAKnpC,YAG3B,IAYMq3E,EAAqB,CACzBlnK,gCACAE,6C,WAGa,IAAAy+H,aACb,IAAAj8C,UAlBsB,SAACxzG,GAAU,MACEA,EAAMwc,UAAlC/T,EAD0B,EAC1BA,SAAUwoB,EADgB,EAChBA,eACV+hM,EAA+BhzN,EAAMkwO,iBAArCld,4BACP,MAAO,CACLvqN,WACAwoB,iBACApR,eAAgB7f,EAAMqN,gBACtB2lN,iCAWuBh7B,EAAzB,CAA6CkyP,K,iGCjH/C,MACA,OACA,O,IACA,MACA,Q,mDAEA,IAAME,EAAoC,SAACp3U,GAAU,IAE5C1zG,EAAoD0zG,EAApD1zG,SAAUwxB,EAA0CkiF,EAA1CliF,eAAgB3O,EAA0B6wF,EAA1B7wF,KAAMgpQ,EAAoBn4K,EAApBm4K,OAAQ1iR,EAAYuqG,EAAZvqG,SAQ/C,OACE,+BAAK6pF,UAAU,aACb,kCAAQn0F,KAAK,GACLm0F,UAAW,8EACP7pF,EAASnJ,GAA4C,GAAhC,+BACzBV,MAAO6J,EAASnJ,IAAa,cAC7Bk+N,SAZK,SAACl1H,GAChBx3E,mBACGxxB,EAAWgpG,EAAMlqF,OAAOxf,UAWvB,kCAAQA,MAAM,cAAc4rF,UAAA,EAAS+1K,QAAA,GAClCp+O,EAAKC,cAAc,CAAC1S,GAAIy7Q,EAAOnyI,eAEjCmyI,EAAO34H,QAAQhjJ,KAAI,SAAC8lS,EAAQ+0I,GAC3B,OAAO,kCAAQnrb,IAAKmrb,EAAazrb,MAAO02S,GAASA,OAGrD,gCAAMhjN,UAAU,yBAKtB83V,EAAkCxgS,UAAY,CAC5CtqJ,SAAU,UAAU4qC,OAAOy2E,WAC3BwqK,OAAQ,UAAU9rR,OAAOshH,YAG3B,IAOMq3E,EAAqB,CACzBlnK,iC,WAGa,IAAA2+H,aACb,IAAAj8C,UAZsB,SAACxzG,GACvB,MAAO,CACLyI,SAAUzI,EAAMwc,UAAU/T,YAUHuvL,EAAzB,CAA6CoyP,K,wGCpD/C,O,OACA,OACA,O,IACA,M,IACA,OAEA,QACA,QAOA,SACA,QACA,SACA,SACA,S,IACA,M,IACA,OACA,SACA,QACA,SACA,S,mDAIA,IAAME,EAA8B,SAACt3U,GAAU,IAUvC,EARCsgG,EAGyCtgG,EAHzCsgG,WAAYh/E,EAG6BthB,EAH7BshB,yBAA0B7rH,EAGGuqG,EAHHvqG,SAAUoiB,EAGPmoF,EAHOnoF,SAAUiG,EAGjBkiF,EAHiBliF,eAAgBu9L,EAGjCr7G,EAHiCq7G,cAAexuM,EAGhDmzF,EAHgDnzF,eAC9FggN,EAE8C7sH,EAF9C6sH,YAAa+tG,EAEiC56N,EAFjC46N,uBAAwBp6G,EAESxgH,EAFTwgH,qBAAsBD,EAEbvgH,EAFaugH,wBAAyB/yM,EAEtCwyF,EAFsCxyF,OACpF4yM,EAC8CpgH,EAD9CogH,4BAA6B1iM,EACiBsiF,EADjBtiF,gBAAiBq0L,EACA/xG,EADA+xG,0BAA2BD,EAC3B9xG,EAD2B8xG,6BACzEkO,EAA8ChgH,EAA9CggH,4BAA6Br8F,EAAiB3jB,EAAjB2jB,cAEzBn9G,EAAqBqG,EAAezQ,SACrCilH,EAA4BrhB,EAA5BqhB,yBAECukI,GAAA,gCAAc,WAAOC,GAAP,kBAA0B0xL,EAA1B,wDAAiElrV,IAAjE,yDAAqFmrV,EAArF,kIACd3qN,IAAgB,EAAAqkF,cAAcE,aAAgBmmI,EADhC,iCAGV38G,IAHU,UAIVxzM,EAAS,UAAMvwH,WAAW2S,UAAUyU,gBACtC70B,OAAOmc,KAAK6hH,GAAQj+H,SAAUC,OAAOmc,KAAK6hH,GAAQzyH,MAAK,SAAAzI,GAAA,OAAOk7H,EAAOl7H,IAAQk7H,EAAOl7H,GAAK/C,UAL7E,0CAMP,GANO,cAShB,IAAAmyB,cAAa,0BATG,UAUS,IAAA6qO,cAAa,CACpCP,aAAa,EACbC,oBACAC,mBAAoBF,EAAYz5P,UAAZ,EAAuB05P,EAAmB0xL,GAC9DlzQ,0BAA2BuhF,EAAYz5P,UAAZ,GAAuB,EAAOorb,GAA+B,GAAO,KAdjF,UAUVnnL,EAVU,OAgBhB1jQ,QAAQ4B,IAAI,0BAA2B8hQ,IACnCA,EAjBY,iBAkBd/uI,EAA2B,CACzB3kH,GAAI0zP,EAAW1zP,IAAM0zP,EAAWlgQ,OAChC+lC,MAAOxgC,EAASwgC,OAASm6N,EAAWn6N,MACpC6rF,SAAUrsH,EAASihC,WAAajhC,EAAS4tK,SAAW,IAAM5tK,EAAS4tK,SAAW,KAEhF+8C,EAA4B/+F,GAvBd,kDAyBP,GAzBO,mCA2BNA,EA3BM,wBA4BhBg6F,EAAc,CAAC2/K,cAAe,oCA5Bd,mBA6BT,GA7BS,YAgClB,IAAA1/W,cAAa,4BAEPm8Z,EAAkBj3N,GAAyBqM,IAAgB,EAAAqkF,cAAcE,cAC5E/vL,GAA4BC,KAC1BD,GAA6BA,EAAyBprF,QAAUxgC,EAASwgC,OACtEqrF,GAA6BA,EAAyB5kH,KAAOjH,EAASirH,aArC5D,wBAwChB5yH,SAASC,SAAS4b,MAAQ,KAxCV,UAyCVkO,EAAS,GAzCC,YA2CdwpG,IAA4BC,EA3Cd,oBA4CZ8hD,EAAc,IACd/hD,IAA4BA,EAAyB3kH,GA7CzC,wBA8CRg7a,EAAmBr2T,EAAyBS,SAASrvH,MAAM,KACjE2wK,EAAY1sI,UAAYghZ,EAAiB,GACrCA,EAAiB,KACnBt0Q,EAAYC,SAAWq0Q,EAAiB,IAE1Ct0Q,EAAYntI,MAAQorF,EAAyBprF,MAnD/B,WAoDiB,IAAA8wN,iBAAgB,CAC7Cz9D,WAAYjoE,EAAyB3kH,GACrCsqP,oBAAqBnB,EACrBC,mBAAoBF,EAAYz5P,UAAZ,EAAuB05P,EAAmB0xL,GAC9DlzQ,0BAA2BuhF,EAAYz5P,UAAZ,GAAuB,EAAOorb,GAA+B,GAAO,KAxDnF,WAoDRl8G,EApDQ,OA0Dd3uU,QAAQ4B,IAAI,eAAgB+sU,IACxBA,EA3DU,iBA4DZj4J,GAAc,IAAAg4J,mCAAkCh4J,EAAai4J,GA5DjD,yFA8DL,GA9DK,QAgEd3uU,QAAQ4B,IAAI,cAAe80K,GAhEb,eAkEZ9hD,IACF8hD,EAAY1iD,WAAaY,EAAyB5kH,IAnEpC,UAqEVohB,EAAeslJ,GArEL,yBAsEV1lJ,EAAgB,CACpBgB,gBAAgB,EAChB5U,wBAAwB,IAxEV,eA4EXuzF,EAAa,UAAMxmG,WAAWwnH,qBAA9BhhB,UA5EW,mBA6EX,IAAAlR,WAAU,CACfC,QAAQ,EACRg1B,kBAAkB,EAClBC,yBAA0Bo2T,GAAmBp2T,EAA2BA,EAA2B,KACnGC,yBAA0Bm2T,GAAmBn2T,EAA2BA,EAA2B,KACnGC,yBAAyB,EACzBl1B,YAAaA,IAAgBgR,IAE5B92E,MAAK,SAAC2lE,GAmBL,GAlBAp+F,SAASC,SAAS4b,MAAQuiF,EAAaviF,OACvC,IAAAwiM,4BAA2B,mCAC3B7L,KACA,aAAExyM,UAAU8oG,QAAQ,UAAYwzB,mBAC5Bo2F,IACFhzM,EAAO1a,SAAQ,SAACsb,EAAO1M,GACjB0M,EAAMsxG,cAAgBtxG,EAAMyxG,SAAW3zB,EAAayrV,UAAYzrV,EAAayrV,SAASj2a,KACxFhV,QAAQ4B,IAAI,oCAAqCoT,EAAY,qBAAsB0M,EAAMyxG,QAAS,SAAU3zB,EAAayrV,SAASj2a,KAClI,IAAAmnH,4BAA2B/6H,SAASC,SAASmC,OAAQ,CACnD0nb,YAAaxpa,EAAMyxG,QACnBg4T,UAAW3rV,EAAayrV,SAASj2a,SAIvC6+M,GAAwB,KAG1B,IAAAv5H,iBACI6+J,GACF,IAAA3/N,oBAAmB1f,QACd,GAAqC,cAAhCw5M,IAAiDw3N,EAAyB,EACpF,IAAA3xZ,4BAA2Brf,GAC3B,IAAMs9G,EAAa,UAAMjtH,WAAWunH,WAAW0F,WAC3Cz3B,GAAey3B,IAAe53B,EAAa83B,gBAC7Cn3H,OAAO6+F,KAAKo4B,EAAY,UAG5B,OAAO53B,MAjHO,mDAAd,6CA6HN,IARA,IAAAmqB,YAAU,WACJ07F,EAA0B6zC,aAAe7zC,EAA0B8lL,kBACrE/lL,EAA6B,CAAC+lL,iBAAiB,IAC/CjyI,EAAY7zC,EAA0B8zC,mBAAmB,MAG1D,CAAC9zC,IAEgC,cAAhCiO,EACF,OACE,kCAAQ1gI,UAAU,+BAA+BkyF,QAAS,kBAAMo0E,GAAY,GAAO,GAAO,KACxF,4CAAkBlpP,GAAG,gCAK3B,IAAMo7a,EAAiD,aAAhC93N,EAEjB+3N,EAAsD,SAAhC/3N,IAA4Cx5M,EAAmB2f,eAAiB3f,EAAmBggB,gBAC1HhgB,EAAmB+yM,oBAAuB/yM,EAAmBsf,UAAYtf,EAAmBuf,mBAE3FiyZ,EAAqBnra,EAAezQ,SAASm9M,mBAC/C,oBACA,6BACE0+N,EAAiBpra,EAAezQ,SAASm9M,sBAAuB,IAAAK,sBAAqBj2F,GAAex6H,OAE1G,OACE,wCACG2ub,EACC,kCAAQx4V,UAAU,+BAA+BkyF,QAAS,kBAAMo0E,GAAY,KAC1E,4CAAkBlpP,GAAG,iCAErB,KACHq7a,EACC,kCAAQz4V,UAAW,eAAiB24V,EAAiB,oBAAsB,sBACnEzgW,SAAUygW,EACVzmQ,QAAS,kBAAMo0E,GAAY,KACjC,4CAAkBlpP,GAAIs7a,KAEtB,OAKVV,EAA4B1gS,UAAY,CACtCgkL,uBAAwB,UAAUnnJ,KAAK9lE,WACvC2yF,WAAY,UAAU7sB,KAAK9lE,WAC3B0tG,cAAe,UAAU5nC,KAAK9lE,WAC9Bk/G,YAAa,UAAU51E,MAAM,CAC3B,EAAAi6J,cAAcC,eACd,EAAAD,cAAcE,eAIlB,IAmBMpsH,EAAqB,CACzBntK,oBACAiG,gCACAquL,wDACAiU,0DACAG,kDACA7iM,kCACAo0L,6D,WAIA,IAAAtxG,UA9BsB,SAACxzG,GAAU,MACaA,EAAMwc,UAA7C/T,EAD0B,EAC1BA,SAAUs8M,EADgB,EAChBA,0BADgB,EAE+E/kN,EAAMkwO,iBAA/G77G,EAF0B,EAE1BA,yBAA0BC,EAFA,EAEAA,yBAA0Bk/F,EAF1B,EAE0BA,qBAAsBR,EAFhD,EAEgDA,4BAC1ExyM,EAAUxgB,EAAM4U,YAAhB4L,OACAm2G,EAAiB32H,EAAMqxH,qBAAvBsF,cAEP,MAAO,CACLtC,2BACAC,2BACAk/F,uBACAR,8BACAnzM,eAAgB7f,EAAMqN,gBACtB5E,WACA+X,SACAukM,4BACApuF,mBAeuBqhE,EAAzB,CAA6CsyP,I,8EC/O/C,W,OACA,OACA,OACA,S,IACA,O,IACA,Q,mDAEA,IAmDMtyP,EAAqB,CACzB/O,+C,WAIA,IAAAz1E,UAfsB,SAACxzG,GAAU,IAC1BgzN,EAA+BhzN,EAAMkwO,iBAArCld,4BAEP,MAAO,CACLr+F,mBAAoB30H,EAAMgR,YAAY2jH,mBACtC90G,eAAgB7f,EAAMqN,gBACtB2lN,iCASuBh7B,EAAzB,EAxDyB,SAAChlF,GAAU,IAE7Bi2E,EAA0Fj2E,EAA1Fi2E,sBAAuBt0D,EAAmE3hB,EAAnE2hB,mBAAoB90G,EAA+CmzF,EAA/CnzF,eAAgBmzM,EAA+BhgH,EAA/BggH,4BAWlE,IATA,IAAA3pG,YAAU,WACJxpG,EAAezQ,SAAS6H,yBAA2B09G,GACrDs0D,GAAuBt0D,KAExB,CAAC90G,EAAgB80G,EAAoBs0D,OAEL,UAAO1gL,aAAezH,SAASC,SAAS2b,aAAemD,EAAeG,eACnE,cAAhCgzM,GAGH,OAAO,KAGV,IAAMxoI,EAAW3qE,EAAezQ,SAAS6H,wBASzC,OACE,kCAAQq7E,UAAU,sBAAsBkyF,QARV,WAC9B,GAAIh6F,EACF,OAAO,EAETy+F,GAAuBt0D,IAImD/2E,MAAO4sC,EAAW,qBAAuB,IACjH,+BAAK8H,UAAW,kCAAoCqiC,EAAqB,4BAA8B,KAClGnqC,EAAW,yBAA2B,KACzC,+BAAK8H,UAAU,oBACb,mCAAQ2R,KAAK,gBAGjB,gCAAM3R,UAAW,wCAA0C9H,EAAW,gCAAkC,KACtG,4CAAkB96E,GAAG,yC,8EC1C7B,W,OACA,O,IACA,M,IACA,S,IACA,QACA,QACA,Q,IACA,Q,mDAGA,IAAMw7a,EAA+B,SAACl4U,GAAU,IAEvC6tD,EACa7tD,EADb6tD,SAAUlqC,EACG3jB,EADH2jB,cAAeq3F,EACZh7G,EADYg7G,kBAAmBK,EAC/Br7G,EAD+Bq7G,cAAe6E,EAC9ClgH,EAD8CkgH,2BAA4B5G,EAC1Et5G,EAD0Es5G,kBAC5FzsM,EAAkBmzF,EAAlBnzF,eAEIsra,GAAe,IAAA1jS,aAAYoZ,IAEjC,IAAAx3C,YAAU,WACJw3C,GAAasqR,IAAiBtqR,GAChCwtD,EAAc,CAACL,kBAAmBr3F,EAC7BjoH,QAAO,SAAAmrB,GAAA,OAAYA,EAASo5F,YAC5BzjH,KAAI,SAAAqqB,GAAA,OAAYA,EAASnqB,UAG/B,CAAC2+M,EAAextD,EAAUsqR,EAAcx0T,IAE3C,IAIIy0T,EAAqBz0T,EACzB,GAAIu8F,EAA4B,CAC9B,IAAM95B,EAAe85B,EAA2BlvN,cAChDonb,EAAqBz0T,EAAcjoH,QAAO,SAAAmrB,GAAA,OAAYA,EAAS17B,MAC1D07B,EAAS17B,KAAK6F,cAAcnC,SAASu3L,MAG5C,OACE,+BAAK9mG,UAAW,oBAAsBuuE,EAAW,eAAiB,KAChE,wCACA,+BAAKvuE,UAAU,eACb,+BAAKA,UAAU,qBACXg6H,EACA,8BAAIh6H,UAAU,YACX84V,EAAmB57a,KAAI,SAACqqB,EAAU8yL,GACjC,GAAI9sM,EAAe8/F,oBAAwC,IAAlBgtG,EAEvC,OAAO,KAET,IAAM26K,EAAYt5K,EAAkBnsN,SAASg4B,EAASnqB,IAChD80K,EAAU,kBAxBF,SAAC3qJ,GAC3Bw0L,EAAc,CAACL,mBAAmB,IAAAnwG,kBAAiBmwG,EAAmBn0L,EAASnqB,MAuB7C27a,CAAoBxxZ,IAC1C,OACE,8BAAIy4D,UAAU,iBAAiBpzF,IAAK26B,EAASnqB,IAC3C,+BAAK4iF,UAAW,kCAAoCg1S,EAAY,4BAA8B,IACzF9iN,QAASA,GACZ,+BAAKlyF,UAAU,oBACb,mCAAQ2R,KAAK,gBAGjB,gCAAM3R,UAAU,0BAA0BkyF,QAASA,GAChD3qJ,EAAS17B,WAlBA,mCAAgB6M,KAAK,gBA+BrDkgb,EAA6BthS,UAAY,CACvCiX,SAAU,UAAU/W,KAAKnpC,WACzB0tG,cAAe,UAAU5nC,KAAK9lE,Y,WAcjB,IAAAnN,UAXS,SAACxzG,GAAU,MACUA,EAAMqxH,qBAA1CsF,EAD0B,EAC1BA,cAAe21F,EADW,EACXA,kBACf4G,EAA8BlzN,EAAMkwO,iBAApChd,2BACP,MAAO,CACLv8F,gBACA92G,eAAgB7f,EAAMqN,gBACtB6lN,6BACA5G,uBAIW,CAAyB4+N,I,8HCzFxC,MACA,OACA,QACA,OAEA,S,IACA,O,IACA,SACA,QAMA,Q,uDAEMI,E,yOAEJC,gBAAkB,WAGhB,GAFA,UAAU1iZ,eAAe,+BACzB,EAAKyqK,aACD,EAAKtgG,MAAMnzF,eAAeoI,WAAY,CACxC,IAAIA,EAAa,EAAK+qF,MAAMnzF,eAAeoI,WAC3CA,EAAaA,EAAWpmB,SAAS,QAAUomB,EAAa,KAAOA,GAC3D,IAAAvb,YACF7M,OAAOoB,OAAOO,SAASC,KAAOwmB,EAE9BpoB,OAAO2B,SAASC,KAAOwmB,OAGzB,EAAA2R,YAAYn9B,KAAK,iB,EAIrB+ub,qBAAuB,WACrB,UAAU3iZ,eAAe,oCACzB,EAAKyqK,aACL,IAAM7c,EAAU,EAAKqoJ,cAAc,GACnC,EAAKT,wBAAwB5nJ,EAAQ3uK,MAAM,GAAG5E,KAAMuzK,EAAQ74I,OAC5D/9C,OAAO2B,SAASw/T,U,EAGlB1tH,WAAa,WACX,EAAKtgG,MAAM/5E,wBAAuB,I,EAGpCwyZ,aAAe,WAAM,MACY,EAAKz4U,MAA7B7wF,EADY,EACZA,KAAMtC,EADM,EACNA,eACb,MAAO,CACL+9B,MAAOz7B,EAAKC,cAAc,CACxB1S,GAAImQ,EAAeunI,aACf,sCACAvnI,EAAezQ,SAASm1K,YAAc,uCAAyC,qCAErFmnQ,SAAUvpa,EAAKC,cAAc,CAC3B1S,GAAImQ,EAAeunI,aACf,yCACAvnI,EAAeE,QACb,sCACAF,EAAezQ,SAASm1K,YACtB,0CACA,wCAEVonQ,SAAUxpa,EAAKC,cAAc,CAC3B1S,GAAImQ,EAAeunI,aACf,yCACAvnI,EAAeE,QAAU,sCAAwC,0C,EAK3E6ra,iBAAmB,WAAM,IAChB56a,EAAe,EAAKgiG,MAApBhiG,YACHuX,EAAU,CAACgvX,QAASz2Y,SAASC,SAAS4b,OAAS3L,EAAY2L,OAC/Djd,QAAQ4B,IAAI,uCAAwCinB,GACpD,IAAIivX,EAAe,CAACr5Y,KAAM,+BAAgCoqB,WAC1D,IACE1oB,OAAO43Y,KAAKjrV,OAAOmgL,OAAO+qK,QAAQJ,GAAG3qK,OAAQ6qK,GAC7C,MAAM35Y,GACN6B,QAAQ4B,IAAI,0CAEa,oBAAjBq2Y,aACRA,YAAY9tW,YAAY2tW,I,EAI5Bq0C,8BAAgC,WAC9B,EAAKv4O,aAELzzM,OAAO6+F,KADY,oHACK,W,gGAKxB,IAAKh3F,KAAKsrG,MAAM+kE,0BACd,OAAO,KAGT,IAAM+zQ,EAAYpkb,KAAK+jb,eAChB5ra,EAAkBnY,KAAKsrG,MAAvBnzF,eAIP,OACE,+BAAKyyE,UAAU,WACb,+BAAKA,UAAU,iCACb,kCAAQA,UAAU,iCAAiCkyF,QAAS98K,KAAK4rM,aACjE,+BAAKhhH,UAAU,kBACb,+BAAKA,UAAU,kBACb,+BAAKA,UAAW,wBAA0BzyE,EAAeunI,aAAe,qCAAuC,MAC/G,+BAAK90D,UAAU,uBACb,8BAAIA,UAAU,wBACZ,gCAAMA,UAAU,8BAA8Bw5V,EAAUluY,QAE1D,6BAAG00C,UAAU,uBAAuBw5V,EAAUJ,UAC7CI,EAAUH,SAAW,6BAAGr5V,UAAU,uBAAuBw5V,EAAUH,UAAgB,QAI1F,+BAAKr5V,UAAW,oBAGV,KACJ,+BAAKA,UAAU,0BACXzyF,OAAOw3Y,kBAAkC,oBAAPC,GAClC,kCAAQhlT,UAAU,+CACVkyF,QAAS98K,KAAKkkb,kBACpB,4CAAkBl8a,GAAG,yCAErBmQ,EAAeunI,aAAe,KAChC,kCAAQ90D,UAAU,+CACVkyF,QAAS98K,KAAK6jb,iBACpB,4CAAkB77a,GAAG,yCAGzB,kCAAQ4iF,UAAW,gCAChBzyE,EAAeE,SAAWF,EAAeunI,aAAe,qBAAsB,qBACzEo9B,QAAS3kK,EAAeunI,aAAe1/I,KAAKmkb,8BAAgCnkb,KAAK8jb,sBACvF,4CAAkB97a,GAAImQ,EAAeunI,aACjC,sDAAwD,sD,cAkBtE4wC,EAAqB,CACzB/+J,gDACA/K,4DACA3B,8BACA+N,0CACAhN,oEACA9B,8CACAqJ,mC,WAGa,IAAA46H,aACb,IAAAj8C,UAnBsB,SAAAxzG,GACtB,MAAO,CACL+3K,0BAA2B/3K,EAAM8J,UAAUiuK,0BAC3Cl4J,eAAgB7f,EAAMqN,gBACtB2D,YAAahR,EAAMgR,eAeIgnL,EAAzB,CAA6CszP,K,0HCxK/C,O,OACA,OACA,OAEA,Q,uDAEMS,E,yOAEJC,cAAgB,K,EAchBC,qBAAuB,SAACC,GACtB,IACMrsb,OAAOwhb,eAAetlU,QAAQ,mBAAqBj7G,SAASC,SAAS4b,QAAUuva,EACjF,EAAKl5U,MAAMhqF,mBAAkB,GAE7BotE,YAAW,WACT,EAAK41V,cAAcpob,UAAU27K,OAAO,sBACnC,KAEL,MAAOzrK,GAAMpU,QAAQ4B,IAAIwS,K,EAG7Bq4a,wBAA0B,WACxB,EAAKH,cAAcpob,UAAUC,IAAI,oBACjC,IACEhE,OAAOwhb,eAAe1lU,QAAQ,kBAAkB,GAChD,MAAO7nG,GAAMpU,QAAQ4B,IAAIwS,GAC3BsiF,YAAW,WACT,EAAK4c,MAAMhqF,mBAAkB,KAC5B,M,EAGLoja,yBAA2B,WACzB,EAAKp5U,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBi5W,mBAAmB,IAErBx0S,YAAW,WACLv2F,OAAO6tY,cACT7tY,OAAO6tY,aAAa,YAErB,M,EAGL2+C,iBAAmB,WAIjB,OACE,wCACE,iCAAG,4CAAkB38a,GAAG,kBACxB,iCAAG,4CAAkBA,GAAG,kBACxB,iCAAG,4CAAkBA,GAAG,oB,2GArDxBhI,KAAKsrG,MAAMnzF,eAAe8gQ,UAC5Bj5Q,KAAKukb,qBAAqBvkb,KAAKsrG,MAAMnzF,eAAezQ,SAAS88a,qB,gDAIvC5lQ,GACpBA,EAAUzmK,eAAe8gQ,WAAaj5Q,KAAKsrG,MAAMnzF,eAAe8gQ,UAClEj5Q,KAAKukb,qBAAqB3lQ,EAAUzmK,eAAezQ,SAAS88a,qB,+BAmDvD,WACP,OAAOxkb,KAAKsrG,MAAM/pF,eAAiB,KACjC,+BAAKqpE,UAAU,0BAA0Bo1D,IAAK,SAACkkI,GAAD,OAAU,EAAKogK,cAAgBpgK,IAC3E,+BAAKt5L,UAAU,eAAe5qF,KAAK2kb,oBACnC,+BAAK/5V,UAAU,iBACb,gCAAMA,UAAU,sBAAsBkyF,QAAS98K,KAAK0kb,0BAClD,4CAAkB18a,GAAG,uBAEvB,kCAAQ4iF,UAAU,+BAA+BkyF,QAAS98K,KAAKykb,yBAC7D,4CAAkBz8a,GAAG,+B,GAxEL,UAAM6jG,W,WAuFnB,IAAAC,UAPS,SAACxzG,GACvB,MAAO,CACLipB,eAAgBjpB,EAAMgR,YAAYiY,eAClCpJ,eAAgB7f,EAAMqN,mBAIc,CACtC2b,sCACA0H,mCAFa,CAGZq7Z,I,mHChGH,O,OACA,OACA,OACA,Q,IACA,SACA,Q,IACA,SACA,SACA,Q,IACA,Q,IACA,O,IACA,O,mDAEA,IA4HM/zP,EAAqB,CACzBnsE,kDACAh3F,kCACAjB,iC,WAGa,IAAA67H,aACb,IAAAj8C,UAtBsB,SAACxzG,GAAU,MACcA,EAAMyV,UAA7Cq2G,EADyB,EACzBA,kBAAmBE,EADM,EACNA,gBACnB/hH,EAAcjK,EAAM8J,UAApBG,UACA8G,EAAiB/Q,EAAMgR,YAAvBD,aACR,MAAO,CACL+6G,oBACAE,kBACAnsG,eAAgB7f,EAAMqN,gBACtBpD,YACA0K,iBAAkB3U,EAAM4U,YAAYD,iBACpC5D,eACAyP,OAAQxgB,EAAM4U,YAAY4L,OAC1BhH,mBAAoBxZ,EAAMqN,gBAAgB+B,YAUnB4oL,EAAzB,EAnIwB,SAAChlF,GAAU,IAC3B6Y,EACmC7Y,EADnC6Y,wBAAyBC,EACU9Y,EADV8Y,kBAAmB3pG,EACT6wF,EADS7wF,KAAMtC,EACfmzF,EADenzF,eAAgBmsG,EAC/BhZ,EAD+BgZ,gBAAiB/hH,EAChD+oG,EADgD/oG,UAAW4qB,EAC3Dm+E,EAD2Dn+E,gBACpG9jB,EAAyCiiG,EAAzCjiG,aAAcyP,EAA2BwyF,EAA3BxyF,OAAQoT,EAAmBo/E,EAAnBp/E,eAChBwkF,EAA2B0T,EAA3B1T,OAAQo+L,EAAmB1qL,EAAnB0qL,eAHmB,GAIK,IAAA3tJ,UAAS,IAJd,qBAI5BwkC,EAJ4B,KAIdi/P,EAJc,QAKL,IAAAzjS,WAAS,GALJ,qBAK5B/5F,EAL4B,KAKnBuzM,EALmB,QAMX,IAAAquJ,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAN0B,qBAQ7B6hO,EAAoBn0U,GAAS,IAAAu/L,wBAAuB,SAAW,KAC/D60I,GAAiBD,GAAqBA,EAAkBrpa,KAAK42E,qBAEnE,IAAAuvB,YAAU,WACJjR,GAAUo+L,GAAkBg2I,IAC9BnqL,GAAW,GACXoqL,IAEApqL,GAAW,MAGZ,CAACm0C,EAAgBg2I,KAEpB,IAAAnjU,YAAU,WACJjR,GAAU,UAAUj2F,MACtBuqa,MAGD,CAAClsa,IAEJ,IAAMksa,EAAoB,WACxB,IAAMC,EAAansa,EAAOhR,KAAI,SAAC4R,EAAO1M,GACpC,qBACEA,aACA0M,QACA21C,UAAW31C,EAAM21C,YACd,IAAAw/O,mBACDn1R,EAAMsxG,aACN5G,EAAkB2qL,4BAClBt0R,EACAtC,EACA5V,EACA+hH,EACAt3G,EACA0M,EAAML,KACNhQ,OAINu7a,0BAAoBK,MAGtB,IAAKv0U,EACH,OAAO,KAGT,IAAMq0U,EAA8B,WAC9Bj2I,EAAe3xP,iBACO56C,EAAUyE,QAAO,SAAAZ,GACvC,OAAO0oS,EAAe3xP,gBAAgBhjD,SAASiM,EAAS8yD,WAE1C96D,SAAQ,SAAAgI,GAAA,OAAY8lB,EAAe9lB,OAIjDwlM,EAAa,WACjBznF,EAAwB,CACtBzT,QAAQ,EACRo+L,eAAgB,QAUpB,OACE,wCACE,+BAAKlkN,UAAU,oBACX,gCAAMA,UAAU,0BACd,4CAAkB5iF,GAAG,6BAEzB,kCAAQ4iF,UAAU,iCAAiCkyF,QAAS8uB,MAE5Dk5O,GAAiBD,EACjB,+BAAKj6V,UAAU,2CACb,mCAAoBluE,QAASmoa,EAAmBlyN,SAAU,kBAAM3P,EAAY,IAAIo4D,YAAY,KAG9Fh0N,EACE,wCAEA,mCAAuBu+H,aAAcA,EACdi/P,gBAAiBA,EACjBI,kBAAmBA,IAG9C,+BAAKp6V,UAAU,oBACb,+BAAKA,UAAU,0BACb,kCAAQA,UAAU,8BAA8BkyF,QA7BhC,WACtB3vJ,EAAgB,aAChB,EAAA+E,YAAYn9B,KAAK,QACjB62M,MA2BQ,4CAAkB5jM,GAAG,4BAEvB,mCAA8B29K,aAAcA,EAAcimB,WAAYA,Y,yICnHhF,O,OACA,O,IACA,MACA,O,IACA,OAEA,QAKA,QACA,SACA,UACA,Q,IACA,S,IACA,SACA,SACA,SACA,SACA,QACA,SACA,SAIA,QACA,QACA,QACA,SACA,SAIA,U,mDAEA,IAAMs5O,EAA+B,SAAC55U,GAAU,IAEvCsgG,EAGiBtgG,EAHjBsgG,WAAYjmB,EAGKr6E,EAHLq6E,aAAcz7J,EAGTohF,EAHSphF,UAAWnM,EAGpButF,EAHoBvtF,iBAAkB9Q,EAGtCq+F,EAHsCr+F,iBAAkBm3G,EAGxD9Y,EAHwD8Y,kBAC9ED,EAEsB7Y,EAFtB6Y,wBAAyB3/F,EAEH8mF,EAFG9mF,2BAA4BjiB,EAE/B+oG,EAF+B/oG,UAAWglN,EAE1Cj8G,EAF0Ci8G,oBAAqBn7L,EAE/Dk/E,EAF+Dl/E,kBACrFvM,EACsByrF,EADtBzrF,cAAeytI,EACOhiD,EADPgiD,iBAAkBnzD,EACXmR,EADWnR,WAAYhwE,EACvBmhF,EADuBnhF,eAAgBvZ,EACvC06F,EADuC16F,iBAAkBkI,EACzDwyF,EADyDxyF,OAAQutH,EACjE/6B,EADiE+6B,uBACvFv0H,EAAsBw5F,EAAtBx5F,mBAEKwlU,EAAwClzN,EAAxCkzN,QAASvoC,EAA+B3qL,EAA/B2qL,6BAEhB,IAAAptL,YAAU,WACR,OAAO,WACA21N,GACHnzN,EAAwB,CACtBmzN,SAAS,OAKd,IAIH,IAoCM,EApCA6tG,EAAiB,WACrB,IAAMjqa,GAAS,IAAAC,oBACf,GAAKhjB,OAAO2B,SAASC,KAAKI,SAAS,aAGnC,IAAI,IAAA8/G,uBAAsB9f,EAAYhwE,IACpC,IAAAs5J,oBAAmB7yK,QACd,GAAIsK,EAAOc,aAAc,CAC9B,IAAMM,EAAapB,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASsnB,KAC9E,IAAKzB,EACH,OAEF,IAAMs7O,EAAmBt7O,EAAWG,SAASE,WAAU,SAAAgnM,GACrD,QAAQ,IAAA4iL,eAAc5iL,EAAYnoM,KAAMvO,EAAkB1K,IACrDohN,EAAYnoM,KAAKlV,SAAW,EAAAmD,cAAcC,SAE7CpB,OAAOC,UAAUqvP,KACnBpzO,EAA2B,OAC3B,IAAAi/L,mBAAkB1lM,EAAkB65O,MAKpC90K,GAAY6iG,GAAgBA,EAAa1lL,MAAK,SAAA4lL,GAClD,OAAOnxL,OAAOmc,KAAKg1K,GAAa5lL,MAAK,SAAAqwG,GACnC,IAAKu1E,EAAYv1E,KAAeu1E,EAAYv1E,GAAW3uB,SACrD,OAAO,EAET,IAAMmkG,EAAeD,EAAYv1E,GAAW3uB,SAC5C,SAAImkG,IAAgBA,EAAarxL,SACxBqxL,EAAa7lL,MAAK,SAAA8lL,GAAA,OAAgBA,EAAY1iL,iBAMrD+hb,GAAA,gCAAmB,WAAO1zC,EAAe7tN,GAAtB,2FACnB/gG,EADmB,uBAEfq3K,GAAc,aAAE,2BAChBkrL,GAAmB,aAAE,8CAEvBlrL,GAAekrL,GAAoBA,EAAiBzwW,UACtDulL,EAAY3sK,QAAQ,CAACy5E,UAAWo+Q,EAAiBzwW,SAAS1vE,KAAM,KAN7C,mBAQd,GARc,cAUnBogb,EAAgB,GAChBloE,EAAkB,GAClBmoE,EAZmB,wBAYiBx2I,IACxCppH,EAAavnL,SAAQ,SAAAynL,GACnBnxL,OAAOmc,KAAKg1K,GAAaznL,SAAQ,SAAAkyG,GAC/B,GAAKu1E,EAAYv1E,IAAeu1E,EAAYv1E,GAAW3uB,SAAvD,CAGA,IAAImkG,EAAeD,EAAYv1E,GAAW3uB,SACtCmkG,GAAgBA,EAAarxL,SAE/BqxL,EAAe0/P,EAAmC1/P,EAAcx1E,EAAWu1E,EAAY74K,aAC1E5O,SAAQ,SAAA2nL,GAKnB,GAJIA,EAAYrpK,UACdqpK,EAAYrpK,QAAQlB,KAAKkrE,oBAAqB,EAC9Cq/F,EAAYrpK,QAAQlB,KAAK+qE,WAAWt5E,IAAoB,GAEtD84K,EAAY1iL,UAAY0iL,EAAYjjG,SAAU,CAChD,IAAM6uN,EAAe8zI,GAA+Bljb,EAAW+tG,EAAWy1E,EAAaF,EAAY74K,YACnG,GAAI2kS,EACEA,EAAatrS,YAAYmS,mBAAqButK,EAAY1iL,QAAQmV,iBACpEkta,EAAiC/zI,EAAc5rH,GACtC37K,KAAKkI,KAAKq/R,EAAaxoS,YAAciB,KAAKkI,KAAKyzK,EAAY58K,WACjEwoS,EAAa1oS,mBAAqB88K,EAAY98K,kBAC9C0oS,EAAa52R,sBAAwBgrK,EAAYhrK,qBAEpD4qa,GAAgDh0I,EAAc5rH,QAE3D,GAAIwhC,GAAuBxhC,EAAYmqH,mBACzC3tS,EAAUuJ,MAAK,SAAA1F,GAAA,OAAYA,EAASC,YAAY1C,UAAUqE,KAAO+9K,EAAY1iL,QAAQM,UAAUqE,MAAK,CACvG,IAAM49a,EAAkBrjb,EAAUuJ,MAAK,SAAA1F,GAAA,OAAYA,EAASC,YAAY1C,UAAUqE,KAAO+9K,EAAY1iL,QAAQM,UAAUqE,MACvH69a,EAAiDD,EAAiB7/P,OAM7D,CACL,IAAMj4K,EAAqBgL,EAAO+sK,EAAY74K,aAAe8L,EAAO+sK,EAAY74K,YAAYqM,KACxFP,EAAO+sK,EAAY74K,YAAYqM,KAC/BjgB,SAASC,SAASoC,eAClBqqb,EAAgB,CAClB7na,eAAgB8nK,EAAYrpK,QAAQ4F,KACpC9Z,aAAcq9K,EAAY74K,WAC1Bc,qBACA3E,SAAU2I,EAAmBlF,cAAgB,EAAAyjC,cAAcC,OAASlmC,KAAKyC,OAAOk5K,EAAY58K,UAAW,GAAKiB,KAAKkI,KAAKyzK,EAAY58K,UAClI4R,oBAAqBgrK,EAAYhrK,oBAC7BjJ,EAAmBlF,cAAgB,EAAAyjC,cAAcC,OAASlmC,KAAKyC,OAAOk5K,EAAYhrK,qBAAsB,GAAK3Q,KAAKkI,KAAKyzK,EAAYhrK,qBACnI,KACJ9R,iBAAkB88K,EAAY98K,iBAC9B6R,4BAA6BirK,EAAYjrK,4BACzCxU,OAAQy/K,EAAYrpK,QAAQlB,KAAKlV,OACjCD,YAAa0/K,EAAY1iL,QACzBiuS,iBAAkBvrH,EAAYurH,iBAC9BC,gCAAiCxrH,EAAYwrH,gCAC7C52R,KAAMorK,EAAYprK,KAClBu+C,OAAQ6sH,EAAY7sH,OACpByqH,QAASoC,EAAYpC,QACrBwC,eAAgBJ,EAAYI,eAC5B92H,UAAW02H,EAAY12H,UACvB0hF,qBAAsBg1C,EAAYh1C,qBAClCzgC,aAEEnmF,GAAkBvZ,IACpBk1a,EAAgBC,EAAoBD,EAAe//P,IAErDu/P,EAAcvwb,KAAK+wb,IAGvB,IAAME,EAAWtxb,OAAO+2B,OAAO,GAAIs6J,EAAa,CAC9Cv9K,aAAcq9K,EAAY74K,WAC1BiR,eAAgB8nK,EAAYrpK,QAAQ4F,KACpChc,OAAQy/K,EAAYrpK,QAAQlB,KAAKlV,OACjCoW,QAAS,OAELupa,EAAyBV,EAA8B5oa,WAAU,SAAAm/K,GACrE,OAAQA,EAAS5iI,SAAW6sH,EAAY7sH,QAAY4iI,EAAStzL,eAAiByE,KAEhFg5a,GAA0B,EACtBV,EAA8B5vb,OAAOswb,EAAwB,EAAGD,GAChET,EAA8Bxwb,KAAKixb,aAM/Chub,QAAQ4B,IAAI,gCAAiC2rb,GAC7CphU,EAAwB,CACtB4qL,4BAA6Bw2I,IAlGR,UAuGI1hQ,IAvGJ,eAuGjBC,EAvGiB,QAwGvB,IAAAE,gDACK,IAAAswJ,uBAAsBxwJ,KACzB,IAAA0B,+BAA8B1B,GAEhC8nB,IA5GuB,WA6GjB,IAAA3jB,8BAA6Bq9P,GAAe,GAAO,GA7GlC,0BA8GjB,IAAA78P,oCA9GiB,QA+GnB,EAAA7sL,oBAAsBgV,GACxBy1H,EAAuBi/S,GACvBttb,QAAQ4B,IAAI,0BAA2B0rb,IAEvCp7Z,EAAUo7Z,GAEZY,EAAmB9oE,IAEf,IAAAnjQ,uBAAsB9f,EAAYhwE,KAEpC,IAAA8qK,8BAA6BqwP,GAE/B52V,YAAW,WACTy2V,MACC,GACHzzC,IA9HuB,mDAAnB,uBAAAt8Y,MAAA,kBAiIA8wb,EAAqB,SAAC9oE,GAC1B,IAAM+oE,EAA+Btma,EAAc/X,KAAI,SAAAg6Y,GAUrD,OATAA,EAAa3jY,gBAAgBrW,KAAI,SAAA6W,GAC/By+V,EAAgBt1W,KAAI,SAAAu1W,GAIlB,OAHI1+V,EAAehb,UAAUqE,KAAOq1W,EAAeh6W,QAAQM,UAAUqE,KACnE2W,EAAeoB,aAAes9V,EAAel0W,UAExCwV,QAIJmjY,KAGTx0P,EAAiB64R,IAUbX,EAAqC,SAAC1/P,EAAcx1E,EAAWtjG,GACnE,IAAIo5a,EAAuB,GA2C3B,OAzCI,EAAAjrY,2CAA2ChhD,SAASm2G,IACtDw1E,EAAa1nL,SAAQ,SAAAiF,GACnB,IAAMsuS,EAAey0I,EAAqBt6a,MAAK,SAAAkiG,GAC7C,IAAMq4U,EAAcr4U,EAAa3qG,QAAQM,UAAUqE,KAAO3E,EAAQA,QAAQM,UAAUqE,GAC9Es+a,EAAgBt4U,EAAa3qG,QAAQoc,2BAA6Bpc,EAAQA,QAAQoc,yBAGxF,OAAQ4ma,GAAeC,KAGrB30I,IAAiBtuS,EAAQy/E,UAC3B6uN,EAAahuH,QAAQ5uL,KAAKsO,EAAQ61D,QAClCy4O,EAAaxrH,eAAe9iL,EAAQ61D,QAAU71D,EAAQ8F,SACtDwoS,EAAaxoS,UAAY9F,EAAQ8F,SACjCwoS,EAAapB,iBAAmBltS,EAAQktS,gBACxCoB,EAAanB,iBAAmBntS,EAAQmtS,gBACpCmB,EAAa52R,sBACf42R,EAAa52R,qBAAuB1X,EAAQ0X,sBAEpC1X,EAAQy/E,UAClBsjW,EAAqBrxb,MAArB,gBACKsO,EADL,CAEEitG,UAAWA,EACXtjG,aACA22K,QAAS,CAACtgL,EAAQ61D,QAClBitH,gCAAkB9iL,EAAQ61D,OAAU71D,EAAQ8F,gBAOlDi9a,EAAqBhob,SAAQ,SAAA2nL,GAC3BA,EAAY58K,SAAW2I,EAAmBlF,cAAgB,EAAAyjC,cAAcC,OACpElmC,KAAKyC,OAAOk5K,EAAY58K,UAAW,GACnCiB,KAAKkI,KAAKyzK,EAAY58K,cAG5Bi9a,EAAuBtgQ,EAGlBsgQ,GAGHL,EAAsB,SAACD,EAAe//P,GAC1C+/P,EAAcx7Z,aAAe1Z,EAAiB5I,IAC1C+9K,EAAYr1K,mBAAqBq1K,EAAYjN,oBAC/CgtQ,EAAcp1a,kBAAoBq1K,EAAYjN,kBAAoBiN,EAAYr1K,mBAEhF,IAAM+Z,GAAc,IAAAkuJ,8BAClBoN,EAAYrpK,QAAQlB,KAAKI,QAAUmqK,EAAYrpK,QAAQlB,KAAKK,SAC5Diqa,EAAcp1a,kBACdo1a,EAAcp1a,kBAAoB,KAAOq1K,EAAY1iL,SAQvD,OANIonB,EAAYh2B,SACTqxb,EAAcp1a,oBACjBo1a,EAAcp1a,kBAAoB+Z,EAAY,GAAGU,WAAW,GAAGnjB,IAEjE89a,EAAct7Z,eAAiBC,EAAY,GAAG1Z,WAEzC+0a,GAGHJ,EAAmC,SAACr/a,EAAa0/K,GACrD,IAAIwgQ,EAAmB7xb,OAAO+2B,OAAO,GAAIplB,EAAa,CACpDA,YAAa0/K,EAAY1iL,QACzB8F,SAAU48K,EAAY58K,SACtB4R,oBAAqBgrK,EAAYhrK,oBAAsBgrK,EAAYhrK,oBAAsB,KACzF9R,iBAAkB88K,EAAY98K,iBAC9B6R,4BAA6BirK,EAAYjrK,4BACzCH,KAAMorK,EAAYprK,KAClBu+C,OAAQ6sH,EAAY7sH,OACpByqH,QAASoC,EAAYpC,QACrBwC,eAAgBJ,EAAYI,iBAE1Bh8J,GAAkBvZ,IACpB21a,EAAmBR,EAAoBQ,EAAkBxgQ,IAE3D35J,EAAkBm6Z,IAGdV,EAAmD,SAACx/a,EAAa0/K,GACrE35J,EAAkB13B,OAAO+2B,OAAO,GAAIplB,EAAa,CAC/C0U,oBAAqBgrK,EAAYhrK,oBAAsBgrK,EAAYhrK,oBAAsB,KACzF9R,iBAAkB88K,EAAY98K,iBAC9B6R,4BAA6BirK,EAAYjrK,4BACzC3R,SAAU48K,EAAY58K,SACtBwR,KAAMorK,EAAYprK,KAClBu+C,OAAQ6sH,EAAY7sH,OACpByqH,QAASoC,EAAYpC,QACrBwC,eAAgBJ,EAAYI,mBAI1Bw/P,GAAkD,SAACt/a,EAAa0/K,GACpE35J,EAAkB13B,OAAO+2B,OAAO,GAAIplB,EAAa,CAC/C0U,oBAAqBgrK,EAAYhrK,oBAAsBgrK,EAAYhrK,oBAAsB,KACzF9R,iBAAkB88K,EAAY98K,iBAC9B6R,4BAA6BirK,EAAYjrK,4BACzCH,KAAMorK,EAAYprK,KAClBxR,SAAU48K,EAAY58K,SACtBw6K,QAASoC,EAAYpC,QACrBwC,eAAgBJ,EAAYI,mBAY1Bs/P,GAAiC,SAACljb,EAAW+tG,EAAWy1E,EAAa/4K,GACzE,IACIw5a,EAA0Bjkb,EAAUyE,QAAO,SAAAZ,GAAA,OAAYA,EAASoC,eAAiBwE,KAuBrF,OAtBI,EAAAmuC,2CAA2ChhD,SAASm2G,GACvCk2U,EAAwB16a,MAAK,SAAA1F,GAC1C,IAAMqgb,GAAuB,IAAAx2I,wBAAuB7pS,EAASkqG,UAAWlqG,EAASE,OAAQ0G,GACnF05a,GAA0B,IAAAz2I,wBAAuBlqH,EAAYz1E,UAAWy1E,EAAYz/K,OAAQ0G,GAClG,IAAKy5a,IACCC,GACDD,EAAqBjra,KAAKlV,SAAWogb,EAAwBlra,KAAKlV,QAClEF,EAASoC,eAAiBwE,EAE7B,OAAO,EAET,IAAI25a,EAAiCvgb,EAASC,YAAY1C,UAAUqE,KAAO+9K,EAAY1iL,QAAQM,UAAUqE,GACrG4+a,EAAmBxgb,EAAS8yD,QAAW6sH,EAAYpC,QAASxpL,SAASiM,EAAS8yD,QAC9EotX,EAAgBlgb,EAASC,YAAYoZ,2BAA6BsmK,EAAY1iL,QAAQoc,yBAE1F,OAAQkna,GAAkCC,GAAoBN,KAGjDE,EAAwB16a,MAAK,SAAA1F,GAC1C,OAAQA,EAAS8yD,SAAW6sH,EAAY7sH,QAAY9yD,EAASoC,eAAiBwE,MAMpF,OACE,mCAAgBs+F,MAAOA,IACpB,SAACmsO,EAAuB5zJ,GAAxB,OACC,mCAAmBv4E,MAAOA,IACvB,SAAComS,GAAD,OACC,kCAAQ9mT,UAAW,oCAAsC9H,EAAW,oBAAsB,IAClFg6F,QAAS,kBAAMsoQ,EAAiB1zC,EAAe7tN,KACrD,4CAAkB77K,GAAIsvU,GAAW/0U,EAAU9N,OAAS,sCAAwC,+CAS1Gywb,EAA6BhjS,UAAY,CACvCyjC,aAAc,UAAUtvK,OAG1B,IAmBMi6K,EAAqB,CACzBpmK,sBACA4nJ,sBACA3tD,kDACA3/F,wDACA6/F,wCACAj4F,sCACAkhI,oCACAjnB,iD,WAGa,IAAA0hB,aACb,IAAAj8C,UA/BsB,SAACxzG,GAAU,MACYA,EAAMyV,UAA5Cq2G,EAD0B,EAC1BA,kBAAmBE,EADO,EACPA,gBADO,EAEsBhsH,EAAMqY,YAAtDwZ,EAF0B,EAE1BA,eAAgBvZ,EAFU,EAEVA,iBAAkBupF,EAFR,EAEQA,WACzC,MAAO,CACLmqB,kBACAF,oBACArmG,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChCjF,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,iBACpC1K,UAAWjK,EAAM8J,UAAUG,UAC3BglN,oBAAqBjvN,EAAMgvN,qBAAqBC,oBAChD1nM,cAAevnB,EAAMytB,eAAelG,cACpC/N,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CyyF,aACAhwE,iBACAvZ,sBAgBuB0/K,EAAzB,CAA6C40P,K,8EC3b/C,W,OACA,OACA,O,IAEA,S,IACA,SACA,QACA,S,IACA,MACA,Q,mDAEA,IAAM2B,EAAwB,SAACv7U,GAAU,IAC/B7wF,EAA4C6wF,EAA5C7wF,KAAMtC,EAAsCmzF,EAAtCnzF,eAAgB5V,EAAsB+oG,EAAtB/oG,UAAWuW,EAAWwyF,EAAXxyF,OACjC6sK,EAAqDr6E,EAArDq6E,aAAci/P,EAAuCt5U,EAAvCs5U,gBAAiBI,EAAsB15U,EAAtB05U,kBAEjC8B,EAAmBnhQ,EAAa1lL,MAAK,SAAA4lL,GACzC,OAAOnxL,OAAOmc,KAAKg1K,GAAa5lL,MAAK,SAAAqwG,GACnC,SAAKu1E,EAAYv1E,KAAeu1E,EAAYv1E,GAAW3uB,WAGhDkkG,EAAYv1E,GAAW3uB,SAAS1hF,MAAK,SAAA8lL,GAAA,OAAgBA,EAAY1iL,iBAItE0jb,GAAqB,IAAA7sX,yBAAyB,IAAA6kF,oBAEpD,OACE,wCACE,+BAAKn0D,UAAU,kBACb,+BAAKA,UAAU,sBACb,6BAAGA,UAAU,2BAA0B,4CAAkB5iF,GAAG,gCAC5D,6BAAG4iF,UAAU,+BACVk8V,EAAmB,4CAAkB9+a,GAAG,mCAAqC,OAGjF++a,EACG,+BAAKn8V,UAAU,0BACf,yCAEA,KAEJ,+BAAKA,UAAU,0BAEX+6F,EAAa79K,KAAI,SAAA+9K,GACf,IAAMV,GAAW,IAAAtsK,aAAYgtK,EAAY74K,WAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,GACpG,OACE,oCAAU3gB,IAAKquL,EAAY74K,YACzB,8BAAI49E,UAAU,2BAAd,SAA+Cu6F,GAC/C,mCAA6BU,YAAaA,EACbF,aAAcA,EACdi/P,gBAAiBA,EACjBI,kBAAmBA,YAUlE6B,EAAsB3kS,UAAY,CAChC2jC,YAAa,UAAUluL,OACvBguL,aAAc,UAAUtvK,MACxBuua,gBAAiB,UAAU7lQ,KAAK9lE,WAChC+rU,kBAAmB,UAAUjmQ,M,WAoBhB,IAAAh3B,aACb,IAAAj8C,UAnBsB,SAACxzG,GAAU,MACYA,EAAMyV,UAA5Cq2G,EAD0B,EAC1BA,kBAAmBE,EADO,EACPA,gBACnB/hH,EAAajK,EAAM8J,UAAnBG,UACA8G,EAAgB/Q,EAAMgR,YAAtBD,aACP,MAAO,CACL+6G,oBACAE,kBACAnsG,eAAgB7f,EAAMqN,gBACtBpD,YACA0K,iBAAkB3U,EAAM4U,YAAYD,iBACpC5D,eACAyP,OAAQxgB,EAAM4U,YAAY4L,OAC1BhH,mBAAoBxZ,EAAMqN,gBAAgB+B,YAGnB,GAIzB,CAA6Cm/a,K,8ECtF/C,I,IAAA,MACA,OACA,O,IACA,M,IAEA,S,IACA,S,mDAEA,IAAMG,EAA8B,SAAC17U,GAAU,IAEtCu6E,EAAiEv6E,EAAjEu6E,YAAaF,EAAoDr6E,EAApDq6E,aAAcq/P,EAAsC15U,EAAtC05U,kBAAmBJ,EAAmBt5U,EAAnBs5U,gBAErD,OAAK/+P,EAKH,+BAAKj7F,UAAU,6BACZl2F,OAAOmc,KAAKg1K,GAAa/9K,KAAI,SAAAwoG,GAC5B,IAAM/2G,EAASssL,EAAYv1E,GAC3B,OAAK/2G,GAAWA,EAAOooF,UAAapoF,EAAOooF,SAASltF,OAKlD,+BAAKm2F,UAAU,oBAAoBpzF,IAAK84G,GACtC,mCAAkCu1E,YAAaA,EACbv1E,UAAWA,EACXq1E,aAAcA,EACdi/P,gBAAiBA,EACjBI,kBAAmBA,IACrD,8BAAIp6V,UAAU,oBACXrxF,EAAOooF,SAAS75E,KAAI,SAACi+K,EAAakhQ,GAAd,OACnB,mCAA0Bzvb,IAAK,cAAgByvb,EACrB32U,UAAWA,EACXu1E,YAAaA,EACbF,aAAcA,EACdi/P,gBAAiBA,EACjBqC,iBAAkBA,EAClBjC,kBAAsBA,SAlB/C,SARN,MAoCXgC,EAA4B9kS,UAAY,CACtC2jC,YAAa,UAAUluL,OACvBguL,aAAc,UAAUtvK,MACxBuua,gBAAiB,UAAU7lQ,KAAK9lE,WAChC+rU,kBAAmB,UAAUjmQ,M,WAUhB,IAAAh3B,aACb,IAAAj8C,UARsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAGC,GAGzB,CAA6Cqhb,K,8EChE/C,I,IAAA,MACA,O,IACA,MAEA,Q,WACA,S,IACA,S,IACA,S,IACA,S,IACA,OACA,Q,mDAEA,IAAME,EAA2B,SAAC57U,GAAU,IAElCu6E,EAA4Gv6E,EAA5Gu6E,YAAaF,EAA+Fr6E,EAA/Fq6E,aAAci/P,EAAiFt5U,EAAjFs5U,gBAAiBt0U,EAAgEhF,EAAhEgF,UAAW22U,EAAqD37U,EAArD27U,iBAAkBjjb,EAAmCsnG,EAAnCtnG,YAAaghb,EAAsB15U,EAAtB05U,kBACxFj/P,EAAcF,EAAYv1E,GAAW3uB,SAASslW,GAC7CnkW,EAAqBijG,EAArBjjG,SAAUz/E,EAAW0iL,EAAX1iL,QAEX8jb,EAAkBrkW,GAAYz/E,GAEhCA,EADA,UAAaW,GAAa6wH,QAGxB,EAAAnpB,OAAO4oB,IACP8yT,EAAuB92U,IAAc,EAAA7mG,cAAcC,OAASq8K,EAAYqmB,kBACxEi7O,EAA0B/2U,IAAc,EAAA7mG,cAAcwwC,OAASq2D,IAAc,EAAA7mG,cAAcC,MAEjG,OACE,8BAAIkhF,UAAW,uBAAyB9H,EAAW,iCAAmC,KACnFz/E,EAAU,8BAAgC,IAAKikb,iBAAgBjkb,GAC9D+jb,EACE,mCAAiCD,gBAAiBA,EACjBphQ,YAAaA,IAC9C,KAEFshQ,EACE,mCAAkCF,gBAAiBA,EACjBthQ,YAAaA,EACbF,aAAcA,EACdi/P,gBAAiBA,EACjBt0U,UAAWA,EACX22U,iBAAkBA,EAClBjC,kBAAsBA,IACxD,+BAAKp6V,UAAU,4BACbvnF,EAAU,mCAAaA,QAASA,EAASwkJ,UAAW,KAAQ,MAGlE,mCAA+Bk+B,YAAaA,EAAaF,YAAaA,IACrExiL,EAAU,mCAAsCwiL,YAAaA,EACbF,aAAcA,EACdr1E,UAAWA,EACXs0U,gBAAiBA,EACjBqC,iBAAkBA,IAAsB,OAK/FC,EAAyBhlS,UAAY,CACnC2jC,YAAa,UAAUluL,OAAOshH,WAC9B0sE,aAAc,UAAUtvK,MAAM4iG,WAC9B2rU,gBAAiB,UAAU7lQ,KAAK9lE,WAChC3I,UAAW,UAAU9tE,OAAOy2E,WAC5BguU,iBAAkB,UAAUruU,OAAOK,WACnC+rU,kBAAmB,UAAUjmQ,KAAK9lE,Y,WAarB,IAAAnN,UAVS,SAACxzG,GAEvB,MAAO,CACL0L,YAFoB1L,EAAMgR,YAArBtF,eAKkB,GAIZ,CAA6Ckjb,I,mHC3E5D,O,OACA,O,IACA,MACA,O,IAEA,O,IACA,QACA,QACA,QACA,Q,IACA,OACA,S,IACA,QACA,SACA,S,mDAEA,IAAMK,EAA2B,SAACtiW,EAAUuiW,GAC1C,IAAKA,EACH,OAAOviW,EAET,IAAMysG,EAAe81P,EAAYlrb,cACjC,OAAO2oF,EAASj+E,QAAO,SAAA2Y,GACrB,IAAMlpB,EAAOkpB,GAAWA,EAAQnE,MAAQmE,EAAQnE,KAAKhD,eAAiBmH,EAAQnE,KAAKhD,iBAAmB,GACtG,OAAO/hB,GAAQA,EAAK6F,cAAcnC,SAASu3L,OAIzC+1P,EAAmC,SAACn8U,GAAU,IAE3Cu6E,EAAgFv6E,EAAhFu6E,YAAgCv1E,GAAgDhF,EAAnE05U,kBAAmE15U,EAAhDgF,WAAW22U,EAAqC37U,EAArC27U,iBAAkBE,EAAmB77U,EAAnB67U,gBAC7Dh9Z,EAAkBmhF,EAAlBnhF,eAH2C,EAIJ07J,EAAYv1E,GAAW3uB,SAASslW,GAAvE5jb,EAJ2C,EAI3CA,QAASqZ,EAJkC,EAIlCA,QAAShM,EAJyB,EAIzBA,kBAJyB,GAMZ,IAAAywI,UAAS,IANG,qBAM3CqmS,EAN2C,KAM9BE,EAN8B,QAOJ,IAAAvmS,WAAS,GAPL,qBAO3C2qP,EAP2C,KAO1BC,EAP0B,QAQnB,IAAAid,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GARJ,qBAQ3Cuta,EAR2C,KAQlC3kO,EARkC,KAS5C4kO,GAAkB,IAAA3nS,QAAO,MACzB85L,GAAe,IAAA95L,QAAO,OAE5B,IAAAS,iBAAgBknS,GAAiB,WAC/B77C,GAAmB,MAClB,GAEH,IAIM,EAAA87C,GAAA,gCAAqB,WAAOloa,GAAP,oFACzBA,EAAQnE,KAAKirF,cAEb,UAAiBqrC,gBAAgB+zC,EAAYv1E,GAAW3uB,SAASslW,GAAkB/tX,OAAQv5C,EAAQnE,MACnG,UAAiB0+H,oBAAoB2rC,EAAYv1E,GAAW3uB,SAASslW,GAAkB/tX,QACvF,UAA8B+3E,iCALL,UAwBA,IAAA4yC,mBAxBA,cAwBrBC,EAxBqB,iBAyBnB,IAAAwB,qBAAoBxB,GAzBD,OA4BzBioN,GAAmB,GA5BM,mDAArB,6CA0DAtwY,EAAiBoqL,EAAYnsK,MAAQmsK,EAAYnsK,MAAML,KAAOjgB,SAASC,SAASoC,eAChFqsb,EA5BgB,WACpB,GAAIh8C,EAAiB,CACnB,IAAKpvX,EAAQlB,KAAK42E,oBAChB,MAAO,CAAC,CAAC21V,QAAQ,IAEnB,GAAI59Z,EAAgB,CAClB,IAAM69Z,GAAc,IAAAxoT,0BAAyB9iH,EAAS,GAAI,GAAIhM,EAAmBjV,GAAgB,GACjG,OAAO8rb,EAAyBS,EAAaR,GAE/C,IACMviW,GADS,IAAA9pE,oBACSm9E,sBAAsB57E,EAAS,GAAI,IAAI,GAAO,GACtE,OAAO6qa,EAAyBtiW,EAAUuiW,GAE5C,MAAO,GAeUS,GAEb7tW,EAAS,CACbv6E,OAAQisY,EAAsC,GAApBg8C,EAAWrzb,OAAc,GAAK,EACxDkL,MAAOmsY,EAAkB,OAAS,GAGpC,OACE,+BAAKlhT,UAAU,2BAA2Bo1D,IAAK4nS,GAC7C,kCAAQh9V,UAAU,2BAA2BkyF,QArBzB,WAClBgvN,EACFC,GAAmB,IAEnBA,GAAmB,GACfhyD,GAAgBA,EAAavlO,SAC/BulO,EAAavlO,QAAQ4yD,WAgBrB,oCAAU37D,MAAO07U,KAElB9jb,EACG,mCAAaA,QAASA,IACtB,4CAAkB2E,GAAG,wCACzB,+BAAK4iF,UAAU,mCAAmCv2E,MAAO+lE,GACvD,iCAAOwQ,UAAU,wCACV1zF,MAAOswb,EACPxnS,IAAK+5L,EACLjkH,SAlFa,SAACl1H,GACzB8mV,EAAe9mV,EAAMlqF,OAAOxf,UAkFxB,8BAAI0zF,UAAU,WACXk9V,EAAWhgb,KAAI,SAAC6X,EAASg/T,GACxB,OAAOh/T,EAAQooa,OACb,mCAAoBrra,QAASA,EACTllB,IAAI,iBAAiBmwb,QAASA,EAASh1N,SAAU3P,IAErE,8BAAIp4H,UAAU,gBAAgBpzF,IAAKmnV,EAAc7hK,QAAS,kBAAM+qQ,EAAmBloa,KACjF,mCAAatc,QAASsc,EAAQnE,eAU9Cisa,EAAiCvlS,UAAY,CAC3C2jC,YAAa,UAAUluL,OAAOshH,WAC9B0sE,aAAc,UAAUtvK,MAAM4iG,WAC9B2rU,gBAAiB,UAAU7lQ,KAAK9lE,WAChCkuU,gBAAiB,UAAU3kZ,OAAOy2E,WAClC3I,UAAW,UAAU9tE,OAAOy2E,WAC5BguU,iBAAkB,UAAUruU,OAAOK,Y,WAWtB,IAAAnN,UARS,SAACxzG,GACvB,MAAO,CACL0L,YAAa1L,EAAMgR,YAAYtF,YAC/BmmB,eAAgB7xB,EAAMqY,YAAYwZ,kBAGX,GAEZ,CAA6Cs9Z,I,8EChK5D,W,OACA,O,IACA,MACA,OAEA,QACA,QACA,S,mDAEA,IAAMS,EAAgC,SAAC58U,GAAU,IAExCy6E,EAAyEz6E,EAAzEy6E,YAAa5tK,EAA4DmzF,EAA5DnzF,eAAgBsC,EAA4C6wF,EAA5C7wF,KAAM7N,EAAsC0+F,EAAtC1+F,YAAahD,EAAyB0hG,EAAzB1hG,qBAChDvG,EAAkE0iL,EAAlE1iL,QAAS8F,EAAyD48K,EAAzD58K,SAAU4R,EAA+CgrK,EAA/ChrK,oBAAqB9R,EAA0B88K,EAA1B98K,iBAAkB0R,EAAQorK,EAARprK,KAC3Dwta,EAAsBv7a,IAAgB,EAAAyjC,cAAcC,OAyBtDvnC,SAIFA,EAHG1F,EAvBmB,WAItB,IAAM+kb,EAA0BriQ,EAAYz/K,SAAW,EAAAmD,cAAcC,OAASE,EAC9E,GAAIm8K,EAAY9vK,OAAS8vK,EAAY9vK,MAAM8zR,cAAe,CACxD,IAAMs+I,EAA2B,CAAChlb,EAAS+G,KAAKkI,KAAKyzK,EAAY9vK,MAAM8zR,eAAgB,IAAI,EAAO,KAAMq+I,GAClGE,EAAyB,EAAA/7a,mBAAA,aAAsB87a,GACrDt/a,EAAeu/a,EAAyBviQ,EAAY9vK,MAAM8zR,cAAgBhkH,EAAY58K,SACjFg/a,IACHp/a,EAAeqB,KAAKyC,OAAO9D,GAAe,QAEvC,CACL,IAAMw/a,EAA0BJ,EAAsBh/a,EAAYiB,KAAKkI,KAAKnJ,GACtEk/a,EAA2B,CAAChlb,EAASklb,EAAyB,IAAI,EAAO,KAAMH,GACrFr/a,EAAe,EAAAwD,mBAAA,aAAsB87a,GAGvC,OAAOt/a,EAQQy/a,GAFA,KAIjB,IAAMC,EAAW9ta,EACX+ta,EAAkB1/a,WAAW+R,KAAyBA,EAAsBA,EAAsB5R,EAClGw/a,EAAe3/a,WAAWC,KAAsBA,EAAmBA,EAAmBF,EACtFk+H,EAA4B9uH,EAAe8uH,0BAEjD,OACE,wCACGyhT,EACC,+BAAK99V,UAAU,6BACZ89V,EADH,IACqBD,GAEnB,KACHplb,IAAY4jI,GAAkD,IAArBh+H,EACxC,wCACGy/a,EAAkB,+BAAK99V,UAAU,6BAAf,KAAqD,KACxE,+BAAKA,UAAU,8BACZ,IAAAkxF,sBAAqB6sQ,EAActlb,EAAS8U,EAAgBsC,EAAK1C,YAGpE,OAKVmwa,EAA8BhmS,UAAY,CACxC6jC,YAAa,UAAUpuL,OAAOshH,Y,WAajB,IAAA8uC,aACb,IAAAj8C,UAXsB,SAACxzG,EAAOqvP,GAC9B,MAAO,CACL/6O,YAAatU,EAAMyV,UAAUnB,YAC7BuL,eAAgB7f,EAAMqN,gBACtBypD,UAAWu4L,EAAS5hE,YAAY1iL,QAAUskP,EAAS5hE,YAAY1iL,QAAQM,UAAUqE,GAAK,KACtF4B,qBAAsBtR,EAAMqR,cAAcC,wBAGnB,GAGzB,CAA6Cs+a,K,4GCnF/C,MACA,O,IACA,MAEA,QACA,Q,OACA,QACA,S,IACA,O,mDAEA,IAAMU,EAAuC,SAACt9U,GAAU,IAE/Cu6E,EAAqIv6E,EAArIu6E,YAAaF,EAAwHr6E,EAAxHq6E,aAAci/P,EAA0Gt5U,EAA1Gs5U,gBAAiBt0U,EAAyFhF,EAAzFgF,UAAW22U,EAA8E37U,EAA9E27U,iBAAkBjjb,EAA4DsnG,EAA5DtnG,YAAazB,EAA+C+oG,EAA/C/oG,UAAW0K,EAAoCq+F,EAApCr+F,iBAAkBif,EAAkBo/E,EAAlBp/E,eACpH65J,EAAcF,EAAYv1E,GAAW3uB,SAASslW,GAC7CnkW,EAAYijG,EAAZjjG,SAED+lW,EAAoB/lW,EAAW,UAAa9+E,GAAa4nG,OAAS,EAAAF,OAAO4oB,IA6B/E,OACE,kCAAQ1pC,UAAW,8BAAgC9H,EAAW,mCAAqC,uCAC3Fg6F,QA7BgB,WACxBiJ,EAAYjjG,UAAYA,EACxB,UAAiB42D,0BAA0BqsC,EAAY7sH,QAAS4pB,GAEhE,IAAIgmW,SACAC,GAAcA,EAAdA,cAAkBljQ,GAWtB,IARI,IAAA4qH,yBAAwB5qH,KAC1BkjQ,GAAc,IAAAr4I,kBAAiBq4I,KAGjCD,0BAAmBnjQ,KACNmjQ,EAAansa,WAAU,SAAAlH,GAAA,OAAQA,IAASowK,MAAgBkjQ,EACrEnE,EAAgBkE,GAEZ/iQ,EAAYjjG,SAAU,CAExB,IAAM6uN,EAAepvS,EAAUuJ,MAAK,SAAA1F,GAClC,OAAQA,EAAS8yD,SAAW6sH,EAAY7sH,QAAY9yD,EAASoC,eAAiByE,KAE5E0kS,GACFzlR,EAAeylR,MAQf,gCAAM/mN,UAAU,mCACd,oCAAU6gB,MAAOo9U,OAM3BD,EAAqC1mS,UAAY,CAC/C2jC,YAAa,UAAUluL,OAAOshH,WAC9B2rU,gBAAiB,UAAU7lQ,KAAK9lE,WAChC3I,UAAW,UAAU9tE,OAAOy2E,WAC5BguU,iBAAkB,UAAUruU,OAAOK,YAGrC,IAUMq3E,EAAqB,CACzBpkK,iC,WAGa,IAAA4/E,UAdS,SAACxzG,GAIvB,MAAO,CACL0L,YAJoB1L,EAAMgR,YAArBtF,YAKLzB,UAJkBjK,EAAM8J,UAAnBG,UAKL0K,iBAJyB3U,EAAM4U,YAA1BD,oBAW+BqjL,EAAzB,CAA6Cs4P,I,4GC5E5D,MACA,O,IACA,MAEA,Q,IACA,SACA,S,mDAKA,IAAMI,EAAkC,SAAC19U,GAAU,IAU3C,EATC67U,EAAgC77U,EAAhC67U,gBAAiBphQ,EAAez6E,EAAfy6E,YASlBkjQ,GAAA,gCAAgB,WAAOljQ,GAAP,uEAChBA,EAAY12H,WACT,IAAA01H,uCAAsCgB,EAAY12H,aACrD,IAAA41H,sBAAqBc,EAAY12H,WAAWx9B,OAG9C75B,QAAQ4B,IAAI,6DAA8DmsL,EAAY12H,WANpE,kDAAhB,6CAUA65X,EAAoB,SAACnjQ,GACzB,UAAcumC,cAAcvmC,IAG9B,OACE,kCAAQn7F,UAAU,8BAA8BkyF,QAtBvB,WAEzBmsQ,EAAcljQ,GAAal0J,MAAK,WAC9Bq3Z,EAAkBnjQ,QAoBlB,uCAAat6E,MAAO07U,MAK1B6B,EAAgC9mS,UAAY,CAC1CilS,gBAAiB,UAAU3kZ,OAAOy2E,WAClC8sE,YAAa,UAAUpuL,OAAOshH,Y,WAUjB,IAAAnN,UAPS,SAACxzG,GACvB,MAAO,CACL0L,YAAa1L,EAAMgR,YAAYtF,eAGR,GAEZ,CAA6Cglb,I,8ECtD3D,I,IAAA,MACD,OACA,O,IACA,MAEA,QACA,Q,IACA,O,IACC,SACA,Q,mDAED,IAAMG,EAAmC,SAAC79U,GAAU,IAC1CgF,EAA6EhF,EAA7EgF,UAAWu1E,EAAkEv6E,EAAlEu6E,YAAaF,EAAqDr6E,EAArDq6E,aAAci/P,EAAuCt5U,EAAvCs5U,gBAAiBI,EAAsB15U,EAAtB05U,kBACvDvqa,EAAsC6wF,EAAtC7wF,KAAMtC,EAAgCmzF,EAAhCnzF,eAAgBnU,EAAgBsnG,EAAhBtnG,YAExBzK,EAASssL,EAAYv1E,GACrBr7C,GAAmB,IAAAn5C,qBAAoBviB,EAAOmjB,QAAQlB,KAAMf,EAAMtC,GAClEgva,EAAkB,UAAanjb,GAAa6wH,QAC5Cu0T,EAAe,CAAC,EAAA3/a,cAAcunC,oBAAqB,EAAAvnC,cAAcwnC,oBAAqB,EAAAxnC,cAAcynC,oBAAoB/2C,SAASm2G,GACnIrd,SACJ,GAAIm2V,EAAc,CAChB,IAAMlua,GAAS,IAAAC,oBACTkua,EAAsB,EAAA9tY,mCAAmC+0D,GAC/Drd,EAAsB/3E,EAAOgb,wBAAwBmzZ,GAGvD,OACE,+BAAKz+V,UAAU,qBACb,gCAAMA,UAAW,mFAAqF0lB,IACtG,gCAAM1lB,UAAU,0BACb31B,EADH,IACsBm0X,EAAe,KAAO,KACzCA,EACC,mCAAuCjC,gBAAoBA,EACpBxhQ,aAAiBA,EACjBE,YAAgBA,EAChB++P,gBAAoBA,EACpBI,kBAAsBA,EACtBvpb,eAAmBoqL,EAAYnsK,OAASmsK,EAAYnsK,MAAML,KAAOwsK,EAAYnsK,MAAML,KAAOjgB,SAASC,SAASoC,eAC5GmhB,aAAiBwsa,GAAgBn2V,EAAsBA,EAAsB4yF,EAAYv1E,KAC9H,QAQZ64U,EAAiCjnS,UAAY,CAC3C2jC,YAAa,UAAUluL,OACvBguL,aAAe,UAAUtvK,MACzBuua,gBAAiB,UAAU7lQ,KAAK9lE,WAChC3I,UAAW,UAAU9tE,Q,WAWR,IAAAulH,aACb,IAAAj8C,UATsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtB3B,YAAa1L,EAAMgR,YAAYtF,eAGR,GAGzB,CAA6Cmlb,K,mHC/D/C,O,OACA,O,IACA,MACA,O,IAEA,O,IACA,QACA,QACA,QACA,Q,IAEA,OACA,SACA,SACA,Q,mDAEA,IAWMG,EAAwC,SAACh+U,GAAU,IAC/C1uF,EAAgG0uF,EAAhG1uF,aAAcuqa,EAAkF77U,EAAlF67U,gBAAoCj8U,GAA8CI,EAAjE05U,kBAAiE15U,EAA9CJ,oBAAoBD,EAA0BK,EAA1BL,sBAE1Es+U,EAAsB3sa,EAAaF,QAAUE,EAAaF,QAAQlB,KAAOoB,EACvEvZ,EAAUkmb,EAAoBpja,eAAiBoja,EAAoB5iW,6BAJlB,GAMjB,IAAAw6D,UAAS,IANQ,qBAMhDqmS,EANgD,KAMnCE,EANmC,QAOT,IAAAvmS,WAAS,GAPA,qBAOhD2qP,EAPgD,KAO/BC,EAP+B,QAQxB,IAAAid,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GARC,qBAQhDuta,EARgD,KAQvC3kO,EARuC,KASjD4kO,GAAkB,IAAA3nS,QAAO,MACzB85L,GAAe,IAAA95L,QAAO,OAE5B,IAAAS,iBAAgBknS,GAAiB,WAC/B77C,GAAmB,MAClB,GAEH,IAIM,EAAA87C,GAAA,gCAAqB,WAAOloa,GAAP,oFACzBA,EAAQnE,KAAKirF,cACb,UAAiBuzC,uCAAuCr6H,EAAQnE,MAFvC,UAmBA,IAAAqoK,mBAnBA,cAmBrBC,EAnBqB,iBAoBnB,IAAAwB,qBAAoBxB,GApBD,OAwBzBioN,GAAmB,GACnB9gS,EAAsBC,EAAqB,GAzBlB,mDAArB,6CAmEA48U,EAtCAh8C,EACGy9C,EA7DsB,SAACtkW,EAAUuiW,GAC1C,IAAKA,EACH,OAAOviW,EAET,IAAMysG,EAAe81P,EAAYlrb,cACjC,OAAO2oF,EAASj+E,QAAO,SAAA2Y,GACrB,IAAMlpB,EAAOkpB,GAAWA,EAAQnE,MAAQmE,EAAQnE,KAAKhD,eAAiBmH,EAAQnE,KAAKhD,iBAAmB,GACtG,OAAO/hB,GAAQA,EAAK6F,cAAcnC,SAASu3L,MA2ElC61P,EAVQ,IAAApsa,oBACSm9E,sBACtB,CAAE98E,KAAMoB,GACR,GACA,GACA,KACA,MACA,GACA,CAAE6iH,aAAc,KAAMC,gBAAiB,OAEC8nT,GApBjC,CAAC,CAACO,QAAQ,IAsBd,GAgBH3tW,EAAS,CACbv6E,OAAQisY,EAAsC,GAApBg8C,EAAWrzb,OAAc,GAAK,EACxDkL,MAAOmsY,EAAkB,OAAS,GAGpC,OACE,+BAAKlhT,UAAU,2BAA2Bo1D,IAAK4nS,GAC7C,kCAAQh9V,UAAU,2BAA2BkyF,QApBzB,WAClBgvN,EACFC,GAAmB,IAEnBA,GAAmB,GACfhyD,GAAgBA,EAAavlO,SAC/BulO,EAAavlO,QAAQ4yD,WAerB,oCAAU37D,MAAO07U,KAElB9jb,EACG,mCAAaA,QAASA,IACtB,4CAAkB2E,GAAG,wCACzB,+BAAK4iF,UAAU,mCAAmCv2E,MAAO+lE,GACvD,iCAAOwQ,UAAU,wCACV1zF,MAAOswb,EACPxnS,IAAK+5L,EACLjkH,SA1Fa,SAACl1H,GACzB8mV,EAAe9mV,EAAMlqF,OAAOxf,UA0FxB,8BAAI0zF,UAAU,WACXk9V,EAAWhgb,KAAI,SAAC6X,EAASg/T,GACxB,OAAOh/T,EAAQooa,OACb,mCAAoBrra,QAAS,CAAClB,KAAM+ta,GAChB/xb,IAAI,iBAAiBmwb,QAASA,EAASh1N,SAAU3P,IAErE,8BAAIp4H,UAAU,gBAAgBpzF,IAAKmnV,EAAc7hK,QAAS,kBAAM+qQ,EAAmBloa,KACjF,mCAAatc,QAASsc,EAAQnE,eAU9C8ta,EAAsCpnS,UAAY,CAChDilS,gBAAiB,UAAU3kZ,OAAOy2E,WAClCr8F,aAAc,UAAUjlB,OAAOshH,WAC/Bx9G,eAAgB,UAAU+mC,OAAOy2E,WACjC0sE,aAAe,UAAUtvK,MACzBwvK,YAAc,UAAUluL,OACxBitb,gBAAiB,UAAU7lQ,KAAK9lE,WAChC+rU,kBAAmB,UAAUjmQ,MAG/B,IAOMuR,EAAqB,CACzBrlF,+C,WAGa,IAAAa,UAXS,SAACxzG,GACvB,MAAO,CACL0L,YAAa1L,EAAMgR,YAAYtF,YAC/BknG,mBAAoB5yG,EAAMs3D,cAAcs7C,mBACxC/gF,eAAgB7xB,EAAMqY,YAAYwZ,kBAOEmmK,EAAzB,CAA6Cg5P,I,8EC5K5D,I,IAAA,MACA,OACA,O,IAEA,Q,IACA,S,IACA,S,8DAsDe,IAAAx9U,UAXS,SAACxzG,GAAU,MAC2BA,EAAMqY,YAA3DmzH,EAD0B,EAC1BA,uBAAwBqC,EADE,EACFA,0BAG/B,MAAO,CACL5jI,UAHkBjK,EAAM8J,UAAnBG,UAILuhI,yBACAqC,+BAIW,EApDa,SAAC76B,GAAU,IAE9B66B,EAAgE76B,EAAhE66B,0BAA2B5jI,EAAqC+oG,EAArC/oG,UAAWuhI,EAA0Bx4B,EAA1Bw4B,uBAE7C,IAAKqC,EACH,OAAO,KAGT,IAAMsnQ,EAAoBlrY,EAAUyE,QAAO,SAAAZ,GACzC,OAAO09H,EAAuB7jI,MAAK,SAAA+yK,GAAA,OAAcA,EAAWhvB,aAAe59I,EAAS4B,SAGtF,OACE,mCAAa4iF,UAAU,qBACpB,SAAC+gH,GAAD,OACC,+BAAK/gH,UAAW,2BACd,+BAAKA,UAAU,2CACb,+BAAKA,UAAU,wBACf,gCAAMA,UAAU,gCACd,4CAAkB5iF,GAAG,2DAGzB,+BAAK4iF,UAAU,kBACb,+BAAKA,UAAU,uDACb,6BAAGA,UAAU,wDACX,4CAAkB5iF,GAAG,yDAEvB,8BAAI4iF,UAAU,oBACX6iT,EAAkB3lY,KAAI,SAAA1B,GACrB,OAAO,mCAA6B5O,IAAK4O,EAAS4B,GAAI5B,SAAUA,UAKxE,mCAA4BulM,YAAaA,EAAa8hM,kBAAmBA,Y,8EC1CnF,I,IAAA,MACA,OACA,O,IACA,M,IAEA,OACA,Q,IACA,SACA,Q,mDAEA,IAAM+7C,EAA8B,SAACl+U,GAAU,IAEtCllG,EAAwDklG,EAAxDllG,SAAUqU,EAA8C6wF,EAA9C7wF,KAAMtC,EAAwCmzF,EAAxCnzF,eAAgBrH,EAAwBw6F,EAAxBx6F,qBAEnCN,EAAY,KACZoM,EAAe,KACfxW,EAASC,YAAY3F,YACvBkc,EAAexW,EAASC,YAAY3F,YACpC8P,GAAY,IAAAsL,qBAAoBc,EAAcnC,EAAMtC,IAEtD,IAAMsxa,EAAoB/0b,OAAOmc,KAAKC,GAAsBhF,MAAK,SAAA49a,GAC/D,OAAO54a,EAAqB44a,GAAQh/Z,aAAgB5Z,EAAqB44a,GAAQh/Z,YAAY1iB,KAAO5B,EAASsK,qBAEzGg9T,EAAsB+7G,EAAoB34a,EAAqB24a,GAAqB,KAIpFj7P,GAAc,IAAAh0K,gBAAepU,EAASC,YAAaoU,EAAMtC,EAAgB/R,EAAS+C,UAClFi+S,GAAe,IAAAvsS,iBAAgBzU,EAAUqU,GACzCE,EAAOysS,GAA8B54H,EAE3C,OACE,8BAAI5jG,UAAU,mBAAmBpzF,IAAK4O,EAAS4B,IAC7C,+BAAK4iF,UAAU,SACb,+BAAKA,UAAU,0DACZ8iP,GAAuB9wT,EACtB,mCAAoC8N,YAAagjT,EAAsBA,EAAoBhjT,YAAc,KACrE9N,aAAcA,EACd8wT,oBAAqBA,IACvD,MAEN,+BAAK9iP,UAAU,0BACb,6BAAGA,UAAU,gCACVp6E,EAAYA,EAAY,MAAQ,KAAK,mCAAanN,QAAS+C,EAASC,eAElD,SAApBD,EAASE,OAAoB,KAC5B,6BAAGskF,UAAU,sCACVjwE,EADH,MACW,IAAA3Y,cAAagH,WAAW5C,EAAS2U,uBAAyB3U,EAAS2U,oBAC1E3U,EAAS2U,oBACT3U,EAAS+C,eASzBqgb,EAA4BtnS,UAAY,CACtC97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,Y,WAahC,IAAA8uC,aACb,IAAAj8C,UAXsB,SAACxzG,GAAU,IAC1BwY,EAAwBxY,EAAMqY,YAA9BG,qBAGP,MAAO,CACLqH,eAHqB7f,EAAMqN,gBAI3BmL,0BAKF,CAAyB04a,K,8ECzE3B,I,EAAA,O,oCACA,OACA,OACA,QACA,QAEA,QAIA,QACA,SACA,QACA,SACA,SACA,QAEA,IAyHMl5P,EAAqB,CACzBpqD,4DACAh6G,gCACA1H,wDACA0F,sBACAi6G,qD,WAGa,IAAAr4B,UAjCS,SAACxzG,GAAU,MAC8DA,EAAMqY,YAA9FG,EAD0B,EAC1BA,qBAAsBsZ,EADI,EACJA,iBAAkB+vE,EADd,EACcA,WAAYhwE,EAD1B,EAC0BA,eAAgBvZ,EAD1C,EAC0CA,iBAD1C,EAEsCtY,EAAMytB,eAAtEtB,EAF0B,EAE1BA,qBAAsBW,EAFI,EAEJA,sBAO7B,MAAO,CACLtU,uBACAsZ,mBACA3F,uBACAV,gBAb+B,EAEmBA,gBAYlDjS,mBAXiBxZ,EAAMqN,gBAAlB+B,SAYLqW,iBAXyBzlB,EAAMgsL,QAA1BvmK,iBAYLqH,wBACAmiM,oBAZ4BjvN,EAAMgvN,qBAA7BC,oBAaLn3C,gBAZwB93K,EAAMwc,UAAzBs7J,gBAaLj2E,aACAhwE,iBACA+5W,0BAdkC5rY,EAAMgvN,qBAAnC48K,0BAeLtzX,sBAWoC0/K,EAAzB,EAjIoB,SAAChlF,GAAU,IAErC46B,EAGuF56B,EAHvF46B,6BAA8Bh6G,EAGyDo/E,EAHzDp/E,eAAgBzH,EAGyC6mF,EAHzC7mF,qBAAsBD,EAGmB8mF,EAHnB9mF,2BACzE1T,EAE4Fw6F,EAF5Fx6F,qBAAsBsZ,EAEsEkhF,EAFtElhF,iBAAkBuhL,EAEoDrgG,EAFpDqgG,YAAa8hM,EAEuCniS,EAFvCmiS,kBAAmB37X,EAEoBw5F,EAFpBx5F,mBAAoBoY,EAEAohF,EAFAphF,UAC5F9E,EAC4FkmF,EAD5FlmF,sBAAuBrH,EACqEutF,EADrEvtF,iBAAkBwpM,EACmDj8G,EADnDi8G,oBAAqBn3C,EAC8B9kE,EAD9B8kE,gBAAiBjsC,EACa74B,EADb64B,yBAC/EhqC,EAA4FmR,EAA5FnR,WAAYhwE,EAAgFmhF,EAAhFnhF,eAAgB+5W,EAAgE54R,EAAhE44R,0BAA2BngX,EAAqCunF,EAArCvnF,gBAAiBnT,EAAoB06F,EAApB16F,iBAEnE2nK,GAAyB,IAAAkd,4BAAzBld,sBACHkY,GAAU,IAAAiF,cAIRkW,EAAa,WAA2B,IAA1B+9O,IAA0B,yDACxCv5Q,EAAgBwhO,iBAAmB+3C,IACrCv5Q,EAAgBwhO,mBAChB,IAAA1hO,oBAAmB,EAAG,IAAI,IAE5By7B,GAAY,WACVzlE,GAA6B,OAkEjC,OACE,+BAAKt7C,UAAU,oBACb,kCAAQA,UAAU,8BAA8BkyF,QAAS,kBAAM8uB,MAC7D,4CAAkB5jM,GAAG,oBAEvB,kCAAQ4iF,UAAU,sDAAsDkyF,QAnEzD,WAKjB,GAHA2wN,EAAkBrvY,SAAQ,SAAAgI,GACxB8lB,EAAe9lB,MAEbmhN,GA4BF,GA3BIp9L,GAAkBgwE,GACpBszS,EAAkBrvY,SAAQ,SAAAgI,GACxB,KAAIA,EAASokB,gBAAmBpkB,EAASokB,iBAAmB4lJ,EAAgBw5Q,mBAGxExjb,EAASsK,mBAAqBtK,EAASokB,gBAAkB1Z,GACxDA,EAAqB1K,EAASokB,iBAC9B1Z,EAAqB1K,EAASokB,gBAAgBvZ,iBAC9CH,EAAqB1K,EAASokB,gBAAgBvZ,gBAAgBtN,UAAUqE,KAAO5B,EAASC,YAAY1C,UAAUqE,GAAI,CACrH,IAAMoyF,EAAaD,EAAWruF,MAAK,SAAAsuF,GAAA,OAAcA,EAAWpyF,KAAO5B,EAASkkB,gBAC5E,GAAI8vE,EAAY,CACd,IAAIoqC,GAAiB,IAAAC,oBAAmBrqC,EAAYh0F,EAASokB,eAAgB1Z,GACzE0zH,EAAep+H,EAASokB,iBAAmBg6G,EAAep+H,EAASokB,gBAAgBW,YACpB,IAA9Dq5G,EAAep+H,EAASokB,gBAAgBW,WAAW12B,SACtDuD,QAAQ4B,IAAI,aAAckX,EAAqB1K,EAASokB,iBACxD25G,EAAyB/9H,EAASokB,eAAgB4vE,EAAYh0F,EAASoC,oBAM7E4nK,EAAgBohF,gBAClBphF,EAAgBohF,iBAChB,IAAAthF,oBAAmB,EAAG,IAAI,IAG5B07B,GAAW,GACP7nL,EAAiB,CACnB,GAAIjS,EAAmBsf,SAAU,CAC/B,IAAMjoB,EAAWsb,EACbW,GAAyB,EACzB8+W,EAA4BA,EAA0B/6X,SAAW,EAC/D6U,GAAiB,IAAAJ,mBAAkB9M,EAAqBsZ,GAAkBnZ,gBAAiB9H,EAAU4U,GAC3GmM,EAAU,CAAClM,IAEbyyK,EAAQ17L,KAAK,EAAAwgB,OAAOkwF,mBApCxB,CAwCA,IAAMiY,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAE3E,GADAynK,EAAsBnuJ,GAClB3F,GAAkD,IAAzBi5F,EAAcjpH,QAAgBipH,EAAc,GAAG2lC,iBACvEvyI,EAAqBsZ,IAAqBtZ,EAAqBsZ,GAAkBnZ,gBAAkB,CACtG,GAAIa,EAAmBsf,SAAU,CAC/B,IAAMpT,GAAiB,IAAAJ,mBAAkB6G,GAAwB3T,EAAqBsZ,GAAkBnZ,gBAAiBmU,GAAyB,EAAGrH,GACrJmM,EAAU,CAAClM,IAEbwG,EAA2B,MAC3B+zJ,EAAsBnuJ,EAAmB,QAEzC5F,EAA2B1T,EAAqBsZ,GAAkBnZ,iBAGpE26L,GAAW,MASP,4CAAkB5jM,GAAG,8C,8EC3G7B,I,IAAA,MACA,OACA,OAEA,SAGA,S,IACA,Q,mDAEA,IA8DMsoL,EAAqB,CACzB+8B,qE,WAGa,IAAAvhH,UAZS,SAACxzG,GAAU,MACyBA,EAAMsS,oBAChE,MAAO,CACL0iN,8BAH+B,EAC1BA,8BAGL5iN,iBAJ+B,EACKA,oBAWA4lL,EAAzB,EAlEwB,SAAChlF,GAAU,IAEzCgiH,EAAqFhiH,EAArFgiH,8BAA+B5iN,EAAsD4gG,EAAtD5gG,iBAAkB2iN,EAAoC/hH,EAApC+hH,iCACxD,IAAKC,EACH,OAAO,KAGT,IAAM6xJ,EAAiBz0W,EAAiBoB,MAAK,SAAAkjL,GAAA,OAAOA,EAAI5jL,OAAS,EAAAyvK,uBAAuBP,WACxF,IAAK6kM,EACH,OAAO,KAGT,IAEI/kS,EAAS,CACXv6E,OAAqBs/W,EAAe7zP,UAAU72H,OAF/B,GAGVwyU,QAJkB,GAKlBk4C,EAAe7zP,UAAU72H,OAA6B,GAAK,MAG5Dm3M,EAAa,kBAAMyhB,GAAiC,IAE1D,OACE,mCAAaziI,UAAU,qCAAqCkyF,QAAS8uB,EAAYJ,eAAe,gBAC7F,SAACG,GAAD,OACC,+BAAK/gH,UAAW,gFACd,+BAAKA,UAAU,cAAcv2E,MAAO+lE,GAClC,+BAAKwQ,UAAU,oFACb,4CAAkB5iF,GAAI,2CAExB,kCAAQ4iF,UAAU,6CAA6CkyF,QAAS,kBAAM6uB,EAAYC,MAC1F,8BAAIhhH,UAAW,4BACGu0R,EAAe7zP,UAAU72H,OAnBpC,GAmByD,6BAA+B,KAC5F0qX,EAAe7zP,UAAUxjH,KAAI,SAACmD,GAC7B,OACE,8BAAI2/E,UAAU,yBAAyBpzF,IAAKyT,EAASmwK,MAAQnwK,EAASjD,IACpE,+BAAK4iF,UAAW,yFACd,oCACG3/E,EAAS8vK,kBADZ,KACgC,gCAAMnwF,UAAW,kBAAkB,4CACjE5iF,GAAI,gCAFN,IAE8CiD,EAAS+vK,cAFvD,IAEsE,4CAAkBhzK,GAAI,mCAE5F,oCAAOiD,EAASgwK,uBAAyBhwK,EAASgwK,uBAAyB,IAAM,qB,gJCnDvG,O,OACA,O,IACA,OACA,O,IACA,Q,IACA,SAEA,QACA,QACA,SACA,Q,IACA,OACA,SACA,SACA,QACA,SACA,S,mDAEA,IAAM4uQ,EAAsB,iBAEtBC,E,YAEJ,WAAYx+U,IAAO,gGACXA,IADW,SAenBy+U,eAAiB,SAAC5zb,GAChB,IAAIugB,EAASvgB,EAAEugB,OACfve,OAAOu2F,YAAW,YAChB,aAAE,6BAA6Bu4E,UAAUvwJ,EAAOy4Q,UAAY,MAC3D,KACAh3R,OAAO+xD,aAAe,MAEvBx1D,OAAO+2B,OAAOryB,SAASg9F,cAAc,wBAAwB/hF,MAAO,CAACnP,IAAK,QAASrF,OAAQ,uBAC3FnL,OAAO+2B,OAAOryB,SAASg9F,cAAc,6BAA6B/hF,MAAO,CAAC6jM,UAAW,cAAeyrI,cAAe,YAvBpG,EA2BnBqmG,WAAa,WACX5wb,SAASg9F,cAAc,wBAAwB6zV,gBAAgB,SAC/D7wb,SAASg9F,cAAc,6BAA6B6zV,gBAAgB,UA7BnD,EAsCnBC,kBAAoB,SAAChpW,EAAUhqF,GAC7B,IAAIm7H,GAAcA,EAAdA,cAAkB,EAAKtrH,MAAMsrH,aAGjC,OAFAA,EAAYnxC,GAAYhqF,EACxB,EAAKomL,SAAS,CAACjrD,gBACRA,GA1CU,EA6CnBi3G,eAAiB,SAACnzO,EAAG+qF,GAAJ,OAAiB,EAAKgpW,kBAAkBhpW,EAAU/qF,EAAEugB,OAAOxf,QA7CzD,EA+CnBk7H,cAAgB,WACd,IAAIM,EAAS,GAyBb,IAxBI,aAAK,EAAK3rH,MAAMsrH,YAAY57H,OAC9Bi8H,EAAO39H,KAAK,oCAEV,EAAKgS,MAAMsrH,YAAYtwF,SAAmD,mBAAxC,aAAK,EAAKh7B,MAAMsrH,YAAYtwF,UAChE2wF,EAAO39H,KAAK,wCAEV,aAAK,EAAKgS,MAAMsrH,YAAYg4B,UAC9B33B,EAAO39H,KAAK,uCAEV,aAAK,EAAKgS,MAAMsrH,YAAY83T,QAC9Bz3T,EAAO39H,KAAK,yCAEV,aAAK,EAAKgS,MAAMsrH,YAAY+yQ,MAC9B1yQ,EAAO39H,KAAK,oCAEV,aAAK,EAAKgS,MAAMsrH,YAAY6yQ,WAC9BxyQ,EAAO39H,KAAK,yCAEV,aAAK,EAAKgS,MAAMsrH,YAAY8yQ,UAC9BzyQ,EAAO39H,KAAK,uCAEX,UAAO0L,YAAciyH,EAAOj+H,OAAS,IACtCi+H,EAAS,CAAC,6CAETA,EAAOj+H,OAAS,GAcZ,EACL,IAAAmyB,gBACA,IAAMwja,EAAgB,EAAKF,kBAAkB,SAAU,EAAKG,oBAC5D,OAAO,IAAAj4T,eAAcg4T,GAClBv4Z,MAAK,SAACm/C,GAEL,IADA,IAAAshB,iBAC4C,MAAzCthB,EAAIuhD,oBAAoBC,cACzB,IAAAilF,8BACA,EAAKnsG,MAAMniF,mBAAkB,GAC7BhxB,OAAOm5B,iBAAkB,GACrB,EAAKg6E,MAAM8jB,YAAgB,EAAK9jB,MAAMnzF,eAAezQ,SAASm9M,oBAAsBzrN,SAASC,SAAS2b,WAExG7c,OAAO6+F,KAAK,EAAKsU,MAAM8jB,WAAY,UAEjC,EAAK9jB,MAAMg/U,kBACb,EAAKh/U,MAAMg/U,mBACX,EAAKh/U,MAAMv7E,cAAa,EAAO,OAE/B,EAAKu7E,MAAM/5E,wBAAuB,OAE/B,CACL,IAAIkhG,EAAM,GAEPzhD,GAAQA,EAAIuhD,qBAAuBvhD,EAAIuhD,oBAAoBG,QAAU1hD,EAAIuhD,oBAAoBG,OAAOj+H,OAAS,GAAMu8E,EAAI/4E,MACxHw6H,EAAMzhD,EAAIuhD,oBAAoBG,OAAO,GAAGC,WAAa3hD,EAAI/4E,MAElD+4E,GAAOA,EAAIj7B,SAAWi7B,EAAIj7B,QAAQ68E,eAAen+H,OAAS,IACjEg+H,EAAMzhD,EAAIj7B,QAAQ68E,eAAe,GAAGtwG,MAGtC,IAAIuwG,GAAS,aAAYJ,EAAK,KAC3BI,GAAU,IACXJ,GAAM,aAAKA,EAAI/0H,OAAOm1H,EAAS,KAGjC,EAAKvnB,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,QAAS08E,EACTx6H,OAhBU,EAiBV6hD,QAAS,CAAC,CACRx3B,KAAM,gCACNmpF,MAAO,MACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAS,aAMpD8B,OAAM,SAAAp6B,GACL,IAAMsyb,EAAuB,EAAAn4T,cAAc36H,KAAd,EAAyB2yb,IACtD,IAAA36T,kBAAiBx3H,EAAO,GAAIsyb,IAC5B,IAAAj4V,oBAjEJ,EAAKgZ,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTt4B,OAAO,EACP89C,QAAS28E,EACTliG,QAAS,UAAO/vB,WAChBq5C,QAAS,CAAC,CACRx3B,KAAM,gCACNmpF,MAAO,MACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAS,UAnFlC,EAgJnB85Z,iBAAmB,WAAM,MACoB,EAAK/+U,MAAzC5gG,EADgB,EAChBA,iBAAkByN,EADF,EACEA,eACnBxW,GAAa,IAAA+E,iBACbqjH,GAAa,IAAA7oH,wBAAuBS,GAC1C,OAAO,IAAAyuL,kBAAiB1lL,EAAkBq/G,EAAY5xG,IAAmB4xG,GAlJzE,EAAKhjH,MAAQ,CACXsrH,YAAa,CACX57H,KAAM,GACN0zb,MAAO,GACPhlD,QAAS,GACTD,SAAU,GACVE,IAAK,GACL/6O,QAAS,GACTtoH,QAAS8nZ,IAVI,E,qFAiCd1xb,OAAOm5B,iBACRtxB,KAAKsrG,MAAMniF,mBAAkB,K,+BAqHxB,WACP,IAAKnpB,KAAKsrG,MAAM24N,qBACd,OAAO,KAFF,IAKAxpT,EAAQza,KAAKsrG,MAAb7wF,KACD3I,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SAE/C8ib,EAAexqb,KAAKqqb,mBAEpBxrQ,EAAiB7+K,KAAK+G,MAAM62K,OAAS,CAAE/9K,OAAO1H,OAAO+xD,YAAc,IAAO,GAIhF,OAHIlqD,KAAK+G,MAAM62K,SACbiB,EAAeh/K,OAAUG,KAAKsrG,MAAM3qF,YAAc,KAAOxoB,OAAO+xD,YAAc,IAAO,IAAM/xD,OAAO+xD,YAAc,IAGhH,+BAAK0gC,UAAU,mCACb,+BAAKA,UAAU,mDACVkyF,QAAS,SAAC3mL,GAAOA,EAAE40F,iBAAkB50F,EAAE20F,oBAC1C,+BAAKF,UAAU,8BAEb,+BAAKA,UAAU,mCACb,4CAAkB5iF,GAAG,yBAEvB,+BAAK4iF,UAAU,4CAA4CkyF,QAAS,kBAAM,EAAKxxE,MAAMniF,mBAAkB,MACvG,+BAAKyhE,UAAU,oCACb,+BAAKA,UAAU,0CAAyC,4CAAkB5iF,GAAG,yBAC7E,+BAAK4iF,UAAU,4CACZ,IAAAl3E,sBAAqB5B,GAAoB,IAAA9P,cAAawob,OAI7D,+BAAK5/V,UAAU,4BACb,+BAAKA,UAAU,WAQb,8BAAIA,UAAU,mBACZ,+BAAKA,UAAU,eACb,+BAAKA,UAAU,8CACf,6BAAGA,UAAU,qBAAoB,4CAAkB5iF,GAAG,uCAExD,+BAAK4iF,UAAU,iBACb,+BAAKA,UAAU,gBACb,iCAAOA,UAAU,WAAW5iF,GAAG,SACxBspI,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,+BACrC9Q,MAAO8I,KAAK+G,MAAMsrH,YAAY83T,MAC9Br0N,SAAU,SAAC3/N,GAAD,OAAO,EAAK+zb,kBAAkB,QAAS/zb,EAAEugB,OAAOxf,QAC1DwoO,QAAS1/N,KAAK+pb,eAAgBpqN,OAAQ3/N,KAAKgqb,cAEpD,+BAAKp/V,UAAU,2CACb,+BAAKA,UAAU,sBACb,iCAAOA,UAAU,WAAW5iF,GAAG,YACxB1E,KAAK,IACLguI,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,kCACrC6/I,UAAU,IACV3wJ,MAAO8I,KAAK+G,MAAMsrH,YAAY6yQ,SAC9BpvK,SAAU,SAAC3/N,GAAD,OAAO,EAAK+zb,kBAAkB,WAAY/zb,EAAEugB,OAAOxf,QAC7DwoO,QAAS1/N,KAAK+pb,eAAgBpqN,OAAQ3/N,KAAKgqb,aAClD,iCAAOp/V,UAAU,WAAW5iF,GAAG,WAAW1E,KAAK,IACxCguI,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,iCACrC6/I,UAAU,IACV3wJ,MAAO8I,KAAK+G,MAAMsrH,YAAY8yQ,QAC9BrvK,SAAU,SAAC3/N,GAAD,OAAO,EAAK+zb,kBAAkB,UAAW/zb,EAAEugB,OAAOxf,QAC5DwoO,QAAS1/N,KAAK+pb,eAAgBpqN,OAAQ3/N,KAAKgqb,aAClD,6BAAGp/V,UAAU,6BACX,4CAAkB5iF,GAAG,0CAGzB,+BAAK4iF,UAAU,qBACb,iCAAOA,UAAU,WAAW5iF,GAAG,MAAM1E,KAAK,IACnCguI,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,6BACrC6/I,UAAU,IACV3wJ,MAAO8I,KAAK+G,MAAMsrH,YAAY+yQ,IAC9BtvK,SAAU,SAAC3/N,GAAD,OAAO,EAAK+zb,kBAAkB,MAAO/zb,EAAEugB,OAAOxf,QACxDwoO,QAAS1/N,KAAK+pb,eAAgBpqN,OAAQ3/N,KAAKgqb,aAClD,6BAAGp/V,UAAU,6BACX,4CAAkB5iF,GAAG,yCAM/B,8BAAI4iF,UAAU,gBACZ,8BAAIA,UAAU,uBACZ,iCAAOx/E,KAAK,OACLkmI,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,oCACrCA,GAAG,OAAO4iF,UAAU,WACpB1zF,MAAO8I,KAAK+G,MAAMsrH,YAAY57H,KAC9Bq/N,SAAU,SAAC3/N,GAAD,OAAO,EAAK+zb,kBAAkB,OAAQ/zb,EAAEugB,OAAOxf,QACzDwoO,QAAS1/N,KAAK+pb,eAAgBpqN,OAAQ3/N,KAAKgqb,cAEpD,8BAAIp/V,UAAU,2EACZ,kCAAQn0F,KAAK,UACLuR,GAAG,UACH4iF,UAAW,6BAA+B5qF,KAAK+G,MAAMsrH,YAAYtwF,UAAY8nZ,EAAsB,6BAA+B,IAClI3yb,MAAO8I,KAAK+G,MAAMsrH,YAAYtwF,QAC9B+zL,SAAU,SAACl1H,GACT,EAAKspV,kBAAkB,UAAWtpV,EAAMlqF,OAAOxf,SAEtD,CAAC2yb,GAAD,gDAAiD/hb,KAAI,SAACi6B,EAAS0oZ,GAC9D,OAAO,kCAAQjzb,IAAKizb,EAAcvzb,MAAO6qC,GAAUA,QAIzD,8BAAI6oD,UAAU,4EACZ,iCAAOx/E,KAAK,OACLkmI,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,oCACrCA,GAAG,MAAM4iF,UAAU,WACnB1zF,MAAO8I,KAAK+G,MAAMsrH,YAAYg4B,QAC9ByrE,SAAU,SAAC3/N,GAAD,OAAO,EAAK+zb,kBAAkB,UAAW/zb,EAAEugB,OAAOxf,QAC5DwoO,QAAS1/N,KAAK+pb,eAAgBpqN,OAAQ3/N,KAAKgqb,iBAK1D,+BAAKp/V,UAAU,8BACb,kCAAQA,UAAU,+BAA+BkyF,QAAS98K,KAAKoyH,eAC7D,gCAAMxnC,UAAU,sBACd,4CAAkB5iF,GAAG,wC,gBAsB/BsoL,EAAqB,CACzBnnK,sCACA6F,8CACAuC,gDACAxB,6B,WAEa,IAAAg4H,aACb,IAAAj8C,UAnBsB,SAACxzG,GAAU,IAC1BoS,EAAoBpS,EAAMsS,oBAA1BF,iBACP,MAAO,CACLu5T,qBAAsB3rU,EAAM8J,UAAU6hU,qBACtC1pJ,QAASjiL,EAAMqN,gBAAgB+B,SAAS6yK,QACxC2pJ,eAAgB5rU,EAAM8J,UAAU8hU,eAChC/rT,eAAgB7f,EAAMqN,gBACtBypH,WAAY92H,EAAMoxH,WAAW0F,WAC7Bk7T,iBAAkBhyb,EAAM8nV,cAAcrvT,SACtCrmB,sBAUuB4lL,EAAzB,CAA6Cw5P,K,6FCpU/C,O,OACA,O,IACA,SACA,Q,8DAqCe,IAAAh+U,UARS,SAACxzG,GAEvB,MAAO,CACLopH,wBAF0BppH,EAAMgR,YAA3BkiG,kBAEsC/2G,OAC3Ck2B,uBAAwBryB,EAAMyV,UAAU4c,0BAI7B,EAnCS,SAAC2gF,GAAU,IAE1B3gF,EAAmD2gF,EAAnD3gF,uBAAwB+2F,EAA2BpW,EAA3BoW,wBAFE,GAGD,IAAAy/B,UAAA,mBAHC,qBAG1BupS,EAH0B,KAGhBC,EAHgB,KAgBjC,OAXA,IAAAhpU,YAAW,WACLD,GAA2BgpU,GAC7Bh8V,YAAW,WACTi8V,GAAY,KACX,KAGL,CAACjpU,IAIEgpU,EAKH,+BAAK9/V,UAAU,kBACZjgE,EAAyB,wCAA2B,MALhD,S;;ACuCV,IAEK05Y,EACJumB,EACAC,EACAC,EACAC,EACAC,EAwGF,GA/JKx5a,SAAS7c,UAAU8C,OACtB+Z,SAAS7c,UAAU8C,KAAO,SAAUwzb,GAEhC,GAAoB,mBAATjrb,KAEP,MAAM,IAAI2iT,UAAU,wEAGxB,IAAIuoI,EAAQtjb,MAAMjT,UAAU0D,MAAMxD,KAAK43Q,UAAW,GAC9C0+K,EAAUnrb,KACVorb,EAAO,aACPC,EAAS,WACL,OAAOF,EAAQ/1b,MACX4K,gBAAgBorb,GAAQH,EAAQjrb,KAAOirb,EACxCC,EAAM/9X,OAAOvlD,MAAMjT,UAAU0D,MAAMxD,KAAK43Q,cAOnD,OAHA2+K,EAAKz2b,UAAYqL,KAAKrL,UACtB02b,EAAO12b,UAAY,IAAIy2b,EAEhBC,IA6BPhnB,EAAc3va,OAAOC,UACzBi2b,EAAevmB,EAAYinB,iBAC3BT,EAAexmB,EAAYknB,iBAC3BT,EAAezmB,EAAYmnB,iBAC3BT,EAAe1mB,EAAYonB,iBAC3BT,EAAa3mB,EAAYzva,eAErBg2b,GAAgBC,GAAgBC,GAAgBC,IAE3Cr2b,OAAOkC,iBACRlC,OAAOkC,eAAiB,SAAU6f,EAAK20J,EAAM62I,GACzC,GAAIx1C,UAAUh4Q,OAAS,EACnB,MAAM,IAAIkuT,UAAU,0BAKxB,GAFAv3I,GAAQ,GAEJ4/Q,EAAWn2b,KAAKotT,EAAY,WACvB6oI,EAAaj2b,KAAK4hB,EAAK20J,IAAU2/Q,EAAal2b,KAAK4hB,EAAK20J,KAEzD30J,EAAI20J,GAAQ62I,EAAW/qT,OAGtB8zb,EAAWn2b,KAAKotT,EAAY,QAC5B+oI,EAAWn2b,KAAKotT,EAAY,QAG7B,MAAM,IAAIU,UAAU,0CAM5B,KAAMV,EAAWr1C,UAAYq1C,EAAWprT,YACpCorT,EAAWt1C,cAEX,MAAM,IAAIg2C,UACN,kHAYR,OAPIV,EAAWnrT,KACX8zb,EAAa/1b,KAAK4hB,EAAK20J,EAAM62I,EAAWnrT,KAExCmrT,EAAWvqS,KACXmza,EAAah2b,KAAK4hB,EAAK20J,EAAM62I,EAAWvqS,KAGrCjB,IAIV/hB,OAAO2ra,2BACR3ra,OAAO2ra,yBAA2B,SAAU5pZ,EAAK20J,GAC7C,GAAIqhG,UAAUh4Q,OAAS,EACnB,MAAM,IAAIkuT,UAAU,2BAGxBv3I,GAAQ,GAER,IAAI62I,EAAa,CACbt1C,cAAc,EACd91Q,YAAc,EACd+1Q,UAAc,GAElBl2Q,EAASo0b,EAAaj2b,KAAK4hB,EAAK20J,GAChCimQ,EAAS0Z,EAAal2b,KAAK4hB,EAAK20J,GAEhC,OAAK4/Q,EAAWn2b,KAAK4hB,EAAK20J,GAIrB10K,GAAW26a,UAOTpvH,EAAWr1C,SAClBq1C,EAAWnrT,IAAMmrT,EAAWvqS,SAAMs7C,EAE9Bt8D,IACAurT,EAAWnrT,IAAMJ,GAEjB26a,IACApvH,EAAWvqS,IAAM25Z,GAGdpvH,IAhBHA,EAAW/qT,MAAQuf,EAAI20J,GAChB62I,GAJAA,IAuBdvtT,OAAOstT,mBACRttT,OAAOstT,iBAAmB,SAAUvrS,EAAK60F,GACrC,IAAI8/D,EACJ,IAAKA,KAAQ9/D,EACL0/U,EAAWn2b,KAAKy2G,EAAO8/D,IACvB12K,OAAOkC,eAAe6f,EAAK20J,EAAM9/D,EAAM8/D,SAUxDhyK,SAASgna,gBAAgBnuW,SAEtBv9D,OAAO2ra,yBAAyB5L,QAAQ9/Z,UAAW,YACpDD,OAAO2ra,yBAAyB5L,QAAQ9/Z,UAAW,WAAWmC,KACjE,CACF,IAAI40b,EAAiB,CACjB70b,YAAY,EACZC,IAAK,WAED,IAAIvC,EAEAo3b,EACAC,EAASC,EAAU3qW,EACnB4qW,EACA/c,EAAa/ua,KAAK+ua,WAClBgd,EAAahd,EAAWt6a,OACxBse,EAAc,SAAUi5a,GACpB,OAAOA,EAAG/4a,OAAO,GAAGF,eAExBrc,EAAS,WACL,OAAOsJ,MAEXqxa,EAAS,SAAUwa,EAAU30b,GACzB,YAAyB,IAAVA,EACX8I,KAAKkvF,aAAa28V,EAAU30b,GAC5B8I,KAAKiqb,gBAAgB4B,IAEjC,KAEI,IAAKP,iBAAiB,QAAQ,eAC9BK,EAAqB,GAEzB,MAAOM,GACHN,EAAqBvyb,SAAS8oD,cAAc,OAEhD,IAAK3tD,EAAI,EAAGA,EAAIw3b,EAAYx3b,IAIxB,IAHAu3b,EAAY/c,EAAWx6a,KAGNu3b,EAAUr1b,MACtB,mBAAoB8G,KAAKuub,EAAUr1b,MAAO,CAC3Cm1b,EAAUE,EAAU50b,MAGpBgqF,GAFA2qW,EAAWC,EAAUr1b,MAEDiH,OAAO,GAAGiB,QAAQ,MAAOoU,GAC7C,IACIre,OAAOkC,eAAe+0b,EAAoBzqW,EAAU,CAChDrqF,WAAYmJ,KAAKnJ,WACjBC,IAAKJ,EAAOe,KAAKm0b,GAAW,IAC5Bl0a,IAAK25Z,EAAO55a,KAvCjBuI,KAuC4B6rb,KAG/B,MAAOK,GACHP,EAAmBzqW,GAAY0qW,GAI3C,OAAOD,IAGf,IAGIj3b,OAAOkC,eAAe69Z,QAAQ9/Z,UAAW,UAAW+2b,GACtD,MAAOv1b,GACLu1b,EAAe70b,YAAa,EAC5BnC,OAAOkC,eAAe69Z,QAAQ9/Z,UAAW,UAAW+2b,M,6BC3OrD70W,OAAOliF,UAAUwF,UACpBzF,OAAOkC,eAAeigF,OAAOliF,UAAW,WAAY,CAClDuC,MAAO,SAAS4L,EAAQw3D,GAKtB,MAJqB,iBAAVA,IACTA,EAAQ,KAGNA,EAAQx3D,EAAOrO,OAASuL,KAAKvL,UAGS,IAAjCuL,KAAKhG,QAAQ8I,EAAQw3D,O,6BCb/Buc,OAAOliF,UAAUu2F,YACpBx2F,OAAOkC,eAAeigF,OAAOliF,UAAW,aAAc,CACpDkC,YAAY,EACZ81Q,cAAc,EACdC,UAAU,EACV11Q,MAAO,SAASw6L,EAAch2J,GAE5B,OADAA,EAAWA,GAAY,EAChB17B,KAAKhG,QAAQ03L,EAAch2J,KAAcA,M,6BCPtD,I,EAAA,Q,oCAEA,UAAE89X,GAAG2yB,QAAU,SAAU/gb,EAAMnX,EAAMula,GAWnC,OAVAx5Z,KAAK4rK,MAAK,WACR,IAAIwsP,GAAQ,aAAEp4Z,MAEdo4Z,EAAM3ga,KAAK2T,EAAMnX,EAAMula,GAEvB,IAAI4yB,EAAkBh0B,EAAMnka,KAAK,UAAUmX,GACvC,UAAEvD,QAAQukb,IACZA,EAAgBj2X,QAAQi2X,EAAgB73S,UAGrCv0I,O,6BCXJ4H,MAAMjT,UAAUmX,MACnBpX,OAAOkC,eAAegR,MAAMjT,UAAW,OAAQ,CAC7CuC,MAAO,SAAS88Z,GAEd,GAAY,MAARh0Z,KACF,MAAM2iT,UAAU,iCAGlB,IAAIhsT,EAAIjC,OAAOsL,MAGX+yE,EAAMp8E,EAAElC,SAAW,EAGvB,GAAyB,mBAAdu/Z,EACT,MAAMrxG,UAAU,gCAUlB,IANA,IAAIsxG,EAAUxnJ,UAAU,GAGpBl4L,EAAI,EAGDA,EAAIxB,GAAK,CAKd,IAAIshV,EAAS19Z,EAAE49E,GACf,GAAIy/U,EAAUn/Z,KAAKo/Z,EAASI,EAAQ9/U,EAAG59E,GACrC,OAAO09Z,EAGT9/U,MAMJo4L,cAAc,EACdC,UAAU,IAIThlQ,MAAMjT,UAAU8rI,MACnB/rI,OAAOkC,eAAegR,MAAMjT,UAAW,OAAQ,CAC7CuC,MAAO,SAASA,GAGd,GAAY,MAAR8I,KACF,MAAM,IAAI2iT,UAAU,+BA4BtB,IAzBA,IAAI2xG,EAAI5/Z,OAAOsL,MAGX+yE,EAAMuhV,EAAE7/Z,SAAW,EAGnB6lE,EAAQmyM,UAAU,GAClB8nJ,EAAgBj6V,GAAS,EAGzBia,EAAIggV,EAAgB,EACtBnqZ,KAAKywH,IAAI9nD,EAAMwhV,EAAe,GAC9BnqZ,KAAKwwH,IAAI25R,EAAexhV,GAGtBjjE,EAAM28P,UAAU,GAChB+nJ,OAAsBxhW,IAARljD,EAChBijE,EAAMjjE,GAAO,EAGXulM,EAAam/M,EAAc,EAC7BpqZ,KAAKywH,IAAI9nD,EAAMyhV,EAAa,GAC5BpqZ,KAAKwwH,IAAI45R,EAAazhV,GAGjBwB,EAAI8gI,GACTi/M,EAAE//U,GAAKr9E,EACPq9E,IAIF,OAAO+/U,M,6BCxFRG,QAAQ9/Z,UAAUg3F,UACrB8oU,QAAQ9/Z,UAAUg3F,QAChB8oU,QAAQ9/Z,UAAUgga,mBAClBF,QAAQ9/Z,UAAUkga,uBAGjBJ,QAAQ9/Z,UAAUssJ,UACrBwzQ,QAAQ9/Z,UAAUssJ,QAAU,SAASprJ,GACnC,IAAIq2P,EAAKlsP,KAET,EAAG,CACD,GAAIy0Z,QAAQ9/Z,UAAUg3F,QAAQ92F,KAAKq3P,EAAIr2P,GAAI,OAAOq2P,EAClDA,EAAKA,EAAG4oK,eAAiB5oK,EAAGnmF,iBACd,OAAPmmF,GAA+B,IAAhBA,EAAG1xJ,UAC3B,OAAO,Q,6BCNX,SAASs5T,EAAc1oZ,EAAMlU,EAAO68Z,GAElC,YAAmB,IAARA,GAAgC,IAARA,EAC1B3pZ,KAAKgB,GAAMlU,IAEpBA,GAASA,EACT68Z,GAAOA,EAEHriZ,MAAMxa,IAA2B,iBAAR68Z,GAAoBA,EAAM,GAAM,EACpDtyE,KAGTvqV,EAAQA,EAAM4gB,WAAW/Z,MAAM,QAG/B7G,GAFAA,EAAQkT,KAAKgB,KAAQlU,EAAM,GAAK,KAAOA,EAAM,IAAOA,EAAM,GAAK68Z,GAAQA,MAEzDj8Y,WAAW/Z,MAAM,MAChB,GAAK,KAAO7G,EAAM,IAAOA,EAAM,GAAK68Z,EAAOA,MAIvD3pZ,KAAK2nE,UACR3nE,KAAK2nE,QAAU,SAAS76E,EAAO68Z,GAC7B,OAAOD,EAAc,QAAS58Z,EAAO68Z,KAIpC3pZ,KAAK2qZ,UACR3qZ,KAAK2qZ,QAAU,SAAS79Z,EAAO68Z,GAC7B,OAAOD,EAAc,QAAS58Z,EAAO68Z,KAIpC3pZ,KAAKyC,SACRzC,KAAKyC,OAAS,SAAS3V,EAAO68Z,GAC5B,OAAOD,EAAc,OAAQ58Z,EAAO68Z,M,6BC1CxCs4B,yBAAyB13b,UAAU83O,SAAW,SAAUnqN,EAAMlI,EAAGC,EAAG6vH,EAAUkjL,GAAyB,IAAb7gF,EAAa,uDAAN,KAEzFrmL,EAAQ5jC,EAAKvkB,MAAM,MACnBwuO,IACFvsO,KAAKusO,KAAOA,GAGd,IAAK,IAAIh4O,EAAI,EAAGA,EAAI2xD,EAAMzxD,OAAQF,IAAK,CAKnC,IAHA,IAAIsiX,EAAQ3wT,EAAM3xD,GAAGwJ,MAAM,KACvBgxD,EAAO,GAEFr3D,EAAI,EAAGA,EAAIm/W,EAAMpiX,OAAQiD,IAAK,CACnC,IAAIinM,EAAW5vI,EAAO8nT,EAAMn/W,GAAK,IAC7B40b,EAAUtsb,KAAK2qO,YAAYhsC,GAC3B4tP,EAAYD,EAAQ3sb,MACpB4sb,EAAYriT,GAAYxyI,EAAI,GAC5BsI,KAAKw2W,SAASznT,EAAM30C,EAAGC,GACvB00C,EAAO8nT,EAAMn/W,GAAK,IAClB2iB,GAAK+yS,GAGLr+P,EAAO4vI,EAIf3+L,KAAKw2W,SAASznT,EAAM30C,EAAGC,GACvBA,GAAK+yS,K,6BCmPmB,IAGxBo/H,EAQAC,EAjNRt0b,OAAOk1V,SAAW,SAASp1Q,EAAWC,GAGlC,QAAyB,IAAdD,GAA6BC,EACV,iBAAfD,GAAmD,iBAAjBC,GACzCl4E,KAAKi4E,UAAYA,EACjBj4E,KAAKk4E,YAAcA,GACU,iBAAfD,GAAmD,iBAAjBC,IAIhDl4E,KAAKi4E,UAAYr4E,SAASq4E,GAC1Bj4E,KAAKk4E,YAAct4E,SAASs4E,SAG7B,QAA2B,IAAhBA,EAA6B,CAC3C,IAAIxB,EAAMuB,EACV,GAAoB,iBAATvB,EACP12E,KAAKi4E,UAAYvB,EACjB12E,KAAKk4E,YAAc,OAChB,GAAoB,iBAATxB,EAAmB,CACjC,IAAI/tE,EAAGC,EAEHo5U,EAAMtrQ,EAAI34E,MAAM,KAKpB,GAJIikV,EAAI,KAAIr5U,EAAIq5U,EAAI,IAChBA,EAAI,KAAIp5U,EAAIo5U,EAAI,IAGhBr5U,EAAI,GAAM,GAAKC,GAAKA,EAAEpE,MAAM,KAC5B,OAAQ,IAAI6oV,SAAS1kV,GAAIxM,IAAI,IAAIkxV,SAASzkV,IACvC,IAAID,GAAMC,EAeb,OAbA,GAAkB,iBAAPD,GAAmBA,EAAEnE,MAAM,KAAM,CAExC,IAAI9L,EAAIiQ,EAAE5K,MAAM,KAChBiC,KAAKi4E,UAAYv/E,EAAE,GAAIsH,KAAKk4E,YAAcx/E,EAAE,OAEzC,IAAkB,iBAAPiQ,GAAmBA,EAAEnE,MAAM,KACzC,OAAO,IAAI6oV,SAASrkV,WAAWL,IAG/B3I,KAAKi4E,UAAYr4E,SAAS+I,GAC1B3I,KAAKk4E,YAAc,IAOnCl4E,KAAKi2Z,aAIT5oE,SAAS14V,UAAUo2D,MAAQ,WAEvB,OAAO,IAAIsiS,SAASrtV,KAAKi4E,UAAWj4E,KAAKk4E,cAI7Cm1Q,SAAS14V,UAAUmjB,SAAW,WAE7B,GAAIpG,MAAM1R,KAAKk4E,aAEd,MAAO,MACL,IAAI5iF,EAAS,GACR0K,KAAKi4E,UAAY,GAAOj4E,KAAKk4E,YAAc,IAC5C5iF,EAAS,KACb,IAAI2iF,EAAY7tE,KAAK4pE,IAAIh0E,KAAKi4E,WAC1BC,EAAc9tE,KAAK4pE,IAAIh0E,KAAKk4E,aAE5Bw0W,EAAYtib,KAAKouE,MAAMP,EAAYC,GAUvC,OARiB,GAAbw0W,IACAp3b,GAAUo3b,GACG,IAHjBz0W,GAAwBC,KAKV,GAAbw0W,IACFp3b,GAAQ,KACHA,GAAU2iF,EAAY,IAAMC,GAEzB5iF,EAAOb,OAAS,EAAIa,EAAS,KAIxC+3V,SAAS14V,UAAUg4b,MAAQ,SAASC,GAEnC,GAAIl7a,MAAM1R,KAAKk4E,aACd,MAAO,MACL,IAAI5iF,EAAS,GACR0K,KAAKi4E,UAAY,GAAOj4E,KAAKk4E,YAAc,IAC5C5iF,EAAS,KACb,IAAI2iF,EAAY7tE,KAAK4pE,IAAIh0E,KAAKi4E,WAC1BC,EAAc9tE,KAAK4pE,IAAIh0E,KAAKk4E,aAEhC,IAAI00W,EAEN,OAAmB,IAAhB10W,EACK5iF,EAAS2iF,EAET3iF,EAAS,UAAY2iF,EAAY,KAAOC,EAAc,IAE5D,IAAIw0W,EAAYtib,KAAKouE,MAAMP,EAAYC,GAMvC,OAJiB,GAAbw0W,IACAp3b,GAAUo3b,GACG,IAHjBz0W,GAAwBC,KAIpB5iF,GAAU,UAAY2iF,EAAY,KAAOC,EAAc,KACpD5iF,EAAOb,OAAS,EAAIa,EAAS,KAIxC+3V,SAAS14V,UAAUk4b,QAAU,SAASjqO,GAIlC,OAFA5iN,KAAKi4E,WAAa2qI,EAClB5iN,KAAKk4E,aAAe0qI,EACb5iN,MAGXqtV,SAAS14V,UAAUwH,IAAM,SAASyM,GAE9B,IAAID,EAAI3I,KAAK+qD,QAETniD,EADAA,aAAaykV,SACTzkV,EAAEmiD,QAEF,IAAIsiS,SAASzkV,GAErB,IAAIkkb,EAAKnkb,EAAEuvE,YAIX,OAHAvvE,EAAEkkb,QAAQjkb,EAAEsvE,aACZvvE,EAAEsvE,WAAarvE,EAAEqvE,UAAY60W,EAEtBnkb,EAAEstZ,aAIb5oE,SAAS14V,UAAU6ob,SAAW,SAAS50a,GAEnC,IAAID,EAAI3I,KAAK+qD,QAETniD,EADAA,aAAaykV,SACTzkV,EAAEmiD,QAEF,IAAIsiS,SAASzkV,GAErB,IAAIkkb,EAAKnkb,EAAEuvE,YAIX,OAHAvvE,EAAEkkb,QAAQjkb,EAAEsvE,aACZvvE,EAAEsvE,WAAarvE,EAAEqvE,UAAY60W,EAEtBnkb,EAAEstZ,aAIb5oE,SAAS14V,UAAUo4b,SAAW,SAASnkb,GAEnC,IAAID,EAAI3I,KAAK+qD,QACb,GAAIniD,aAAaykV,SAEb1kV,EAAEsvE,WAAarvE,EAAEqvE,UACjBtvE,EAAEuvE,aAAetvE,EAAEsvE,gBAChB,IAAiB,iBAANtvE,EAGd,OAAOD,EAAEokb,SAAS,IAAI1/F,SAASzkV,IAF/BD,EAAEsvE,WAAarvE,EAInB,OAAOD,EAAEstZ,aAGb5oE,SAAS14V,UAAUq4b,OAAS,SAASpkb,GAEjC,IAAID,EAAI3I,KAAK+qD,QACb,GAAIniD,aAAaykV,SAEb1kV,EAAEsvE,WAAarvE,EAAEsvE,YACjBvvE,EAAEuvE,aAAetvE,EAAEqvE,cAChB,IAAiB,iBAANrvE,EAGd,OAAOD,EAAEqkb,OAAO,IAAI3/F,SAASzkV,IAF7BD,EAAEuvE,aAAetvE,EAIrB,OAAOD,EAAEstZ,aAGb5oE,SAAS14V,UAAUs4b,OAAS,SAASrkb,GAE3BA,aAAaykV,WACfzkV,EAAI,IAAIykV,SAASzkV,IAGrB,IAAID,EAAI3I,KAAK+qD,QAAQkrW,YAErB,OADArtZ,EAAIA,EAAEmiD,QAAQkrW,YACNttZ,EAAEsvE,YAAcrvE,EAAEqvE,WAAatvE,EAAEuvE,cAAgBtvE,EAAEsvE,aAU/Dm1Q,SAAS14V,UAAUsha,WAGXu2B,EAAU,SAAS90b,GAEnB,MAAsB,iBAAPA,IACLA,EAAI,GAAKA,EAAI,EAAI,GAAKA,EAAI,EAAI,GAC9BA,EAAI,GAAKA,GAAK,EAAI,GAAKA,GAAK,GAAK,IAI3C+0b,EAAgB,SAAS/0b,EAAG61Z,GAE5B,GAAKA,EAEE,CACH,IAAI2/B,EAAS9ib,KAAK0nE,IAAI,GAAIy7U,GAC1B,OAAOnjZ,KAAKC,MAAM3S,EAAEw1b,GAAQA,EAH5B,OAAO9ib,KAAKC,MAAM3S,IAOlB,WASJ,IAAI6gF,EAAS40W,EACTX,EAAQxsb,KAAKk4E,eACbK,EAAUk0W,EAAczsb,KAAKk4E,YAAa,GAC1Ci1W,EAAU/ib,KAAK0nE,IAAI,GAAIyG,EAAQzgE,WAAW/Z,MAAM,KAAK,GAAGtJ,QACxDuL,KAAKk4E,YAAc9tE,KAAKC,MAAMrK,KAAKk4E,YAAci1W,GAEjDntb,KAAKi4E,WAAak1W,GAElBX,EAAQxsb,KAAKi4E,aACbM,EAAUk0W,EAAczsb,KAAKi4E,UAAW,GACxCk1W,EAAU/ib,KAAK0nE,IAAI,GAAIyG,EAAQzgE,WAAW/Z,MAAM,KAAK,GAAGtJ,QACxDuL,KAAKi4E,UAAY7tE,KAAKC,MAAMrK,KAAKi4E,UAAYk1W,GAE7Cntb,KAAKk4E,aAAei1W,GAExB,IAAIC,EAAM//F,SAAS+/F,IAAIptb,KAAKi4E,UAAWj4E,KAAKk4E,aAO5C,OANAl4E,KAAKi4E,WAAam1W,EAClBptb,KAAKk4E,aAAek1W,EAChBptb,KAAKk4E,YAAc,IACnBl4E,KAAKi4E,YAAc,EACnBj4E,KAAKk4E,cAAgB,GAElBl4E,OAQfqtV,SAAS+/F,IAAM,SAASzkb,EAAGC,GACvB,GAAI6jQ,UAAUh4Q,OAAS,EACnB,OAAOkU,EAEX,IAAIpS,EAkBJ,IAjBAoS,EAAIyB,KAAK4pE,IAAIrrE,GACbC,EAAIwB,KAAK4pE,IAAIprE,GAgBNA,GACHrS,EAAIoS,EAAIC,EACRD,EAAIC,EACJA,EAAIrS,EAER,OAAOoS,GAMX0kV,SAASggG,aAAe,SAAS31b,GAO7B,IAJA,IAAIg/E,EAAMtsE,KAAK4pE,IAAIt8E,GACf41b,EAAU,GACVC,EAAU,EAEPA,EAAUA,GAAW72W,GAEtBA,EAAM62W,GAAY,GAEhBD,EAAQv4b,KAAKw4b,GACb72W,GAAU62W,GAIVA,IASR,OALW,GAAP72W,GAEA42W,EAAQv4b,KAAK2hF,GAGV42W,GAIXjgG,SAAS14V,UAAUumI,KAAO,SAASL,EAAKlT,GAC/BA,IAAWA,EAAY,MACvBkT,IAAKA,EAAM,KAOhB,IALA,IAAI2yT,EAAYxtb,KAAKi4E,UAAY,EAC7BU,EAAU34E,KAAKi4E,UAAYj4E,KAAKk4E,YAChCI,EAAWluE,KAAK4pE,IAAI2E,EAAU,GAC9B80W,EAAYD,EAAWpjb,KAAKkI,KAAKqmE,GAAWvuE,KAAKouE,MAAMG,GAEnDT,EAAc,EAAGA,GAAe2iD,IAAO3iD,EAC3C,IAAI,IAAID,EAAY,EAAGA,GAAa4iD,IAAO5iD,EAAW,CAClD,IAAIy1W,EAAgBtjb,KAAK4pE,IAAIiE,EAAUC,GACvC,GAAI9tE,KAAK4pE,IAAI05W,EAAgBp1W,GAAYqvC,EACrC,OAAO,IAAI0lO,SAASogG,EAAYv1W,EAAcD,GAAau1W,GAAY,EAAI,GAAIt1W,GAK3F,OAAO,IAAIm1Q,SAASrtV,KAAKi4E,UAAWj4E,KAAKk4E,e,6FC1Z7C,O,OACA,OACA,OACA,S,IAOA,S,IACA,S,IACA,S,IACA,S,IACA,OACA,QACA,Q,IACA,Q,IACA,O,mDAEA,IA4GMo4G,EAAqB,CACzB1oF,0CACAJ,uC,WAIa,IAAAsE,UAnBS,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChC5uC,mBAAoBvgE,EAAMyV,UAAU8qD,mBACpChB,kBAAmBv/D,EAAMqR,cAAckuD,kBACvCjf,eAAgBtgD,EAAM80Q,2BAA2Bx0N,eACjDC,eAAgBvgD,EAAM80Q,2BAA2Bv0N,eACjDC,SAAUxgD,EAAM80Q,2BAA2Bt0N,SAC3C4wM,sBAAuBpxP,EAAM80Q,2BAA2B1jB,sBACxDvxO,eAAgB7f,EAAMqN,gBACtBlF,SAAUnI,EAAMgR,YAAY7I,SAC5BmvJ,eAAgBt3J,EAAMqR,cAAcimJ,kBASE0gC,EAAzB,EAlHI,SAAChlF,GAAU,IACrBzyC,EACSyyC,EADTzyC,mBAAoB6wL,EACXp+I,EADWo+I,sBAAuB7xL,EAClCyzC,EADkCzzC,kBAAmB1/C,EACrDmzF,EADqDnzF,eAAgB1X,EACrE6qG,EADqE7qG,SAAUmvJ,EAC/EtkD,EAD+EskD,eAC7FnoD,EAAc6D,EAAd7D,WACK7uD,EAA4C0yD,EAA5C1yD,eAAgBC,EAA4ByyD,EAA5BzyD,eAAgBC,EAAYwyD,EAAZxyD,SAChC8uD,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBAJA,GAKgB,IAAA25C,UAAS,GALzB,qBAKrBwsS,EALqB,KAKLC,EALK,QAMM,IAAAzsS,UAAS,GANf,qBAMrB0sS,EANqB,KAMVC,EANU,QAOgB,IAAA3sS,UAAS,GAPzB,qBAOrBpnE,EAPqB,KAOLg0W,EAPK,QAQM,IAAA5sS,UAAS,GARf,qBAQrB6sS,EARqB,KAQVC,EARU,MAU5B,IAAAtsU,YAAU,WACRisU,EACElkM,GAAwB,IAAA8kB,qCAAqC,IAAAhB,qBAAoBiB,wBAEnFq/K,EAAapkM,GAAwB,IAAAwyB,kCAAkC,IAAAG,iBACvE0xK,EAAkBrkM,GAAwB,IAAAyyB,qCAAqC,IAAAI,2BAC/E0xK,EACEp2X,EAAkBpjE,OAAS,UAAgB6zM,2BAA2B7zM,UAEvE,CAACokE,EAAoB6wL,EAAuB7xL,EAAmBjf,EAAgBC,EAAgBC,IAClG,IAAMo1Y,EAAwB,UAAWthb,cAAgB,EAAAyjC,cAAcC,OAAS,MAAQ,IAClF69Y,EAAmB,UAAWvhb,cAAgB,EAAAyjC,cAAcC,OAAS,KAAO,QAC5E89Y,EAAwB,UAAWxhb,cAAgB,EAAAyjC,cAAcC,OAAS,MAAQ,IAQxF,OACE,+BAAKs6C,UAAU,YACb,+BAAKA,UAAU,oBAEXglE,EACE,+BAAKhlE,UAAU,sBACb,kCAAQA,UAAU,6CAA6CkyF,QAX5C,WAC7Bl1E,EAAoB,EAAA30D,qBAAqBG,SACzCo0D,EAAkBC,IAAe,EAAAx0D,qBAAqBG,QAAU,GAAK,EAAAH,qBAAqBG,WAU9E,4CAAkBprC,GAAI,8BAG1B,GAEJ,+BAAK4iF,UAAU,sBACb,gCAAMA,UAAU,oBACd,4CAAkB5iF,GAAI,gCAExB,gCAAM4iF,UAAU,yCACd,oCAAO+iW,EAAgBA,EAAiB,EAAIO,EAAwB,QAGxE,+BAAKtjW,UAAU,wCACb,gCAAMA,UAAU,oBACd,4CAAkB5iF,GAAI,6BAExB,gCAAM4iF,UAAU,iDACd,oCAAOijW,EAAWA,EAAY,EAAIM,EAAmB,QAGzD,+BAAKvjW,UAAU,4CACb,gCAAMA,UAAU,mBAAmB8mS,YAAU,+BAC3C,4CAAkB1pX,GAClB,iCAEF,gCAAM4iF,UAAU,qDACd,oCAAO7Q,EAAgBA,EAAiB,EAAIq0W,EAAwB,SAGtEj2a,EAAezQ,SAASuU,eAAgB,UAAOpb,aAAiBJ,EASzD,KART,+BAAKmqF,UAAU,4CACb,gCAAMA,UAAU,mBAAmB8mS,YAAU,+BAC3C,4CAAkB1pX,GAAI,0BADxB,KAGA,gCAAM4iF,UAAU,qDACd,oCAAOojW,EAAY,EAAI,IAAM,KAAMA,IAErC,yCAEF,+BAAKpjW,UAAU,0CACb,0CAGJ,+BAAKA,UAAU,2CACb,kCAAQg6M,UAAQ,qBAAqBypJ,cAAY,gBAAgBzjW,UAAU,2DAA2D8mS,YAAU,uCAC9I,4CAAkB1pX,GAAI,yCAExB,kCAAQ48R,UAAQ,sBAAsBypJ,cAAY,gBAAgBzjW,UAAU,2DAA2D8mS,YAAU,gCAC/I,4CAAkB1pX,GAAI,kCAExB,wCACA,8C,6FC7GR,O,OACA,O,IACA,Q,IACA,Q,8DA4De,IAAA8jG,UARS,SAACxzG,GAAD,MAAY,CAClCs3J,eAAgBt3J,EAAMqR,cAAcimJ,kBAGX,GAIZ,EA1DuB,SAACtkD,GAAU,IACxCskD,EAAkBtkD,EAAlBskD,eADwC,GAGT,IAAAzO,UAAS,MAHA,qBAGxCiZ,EAHwC,KAG9Bk0R,EAH8B,KAyB/C,OAnBA,IAAA3sU,YAAU,WACR,IAAM4sU,EAA0B,WAC9B,IAAMC,EAAwB,UAAcjpR,iBAC5C,GAAKipR,EAEE,CACL,IACMp0R,EADco0R,EAAsB9tb,YACby7J,cAC7BmyR,EAAkBl0R,QAJlBk0R,EAAkB,OAUtB,OAFA,UAAgB3rV,GAAG,qBAAsB4rV,GAElC,WACL,UAAgBt1N,IAAI,qBAAsBs1N,MAE3C,IAEEn0R,EAKH,wCAEIxK,EACE,+BAAKhlE,UAAU,MACb,+BAAKA,UAAU,sBAAsBv2E,MAAO,CAC1CqkG,gBAAiB0hD,EAASvlC,QAC1B+sE,OAAQ,YAAcxnC,EAAS26E,kBAIjC,+BAAKnqJ,UAAU,IACXwvE,EAAS72E,cAGf,IAlBC,S,6FC/BX,O,OACA,O,IACA,SACA,O,IACA,Q,IACA,OACA,SACA,SACA,Q,8DA8Ee,IAAAwkE,aACb,IAAAj8C,UARsB,SAAC/kG,GAAD,MAAY,CAClC8wD,kBAAmB9wD,EAAM4C,cAAckuD,qBAGd,GAIzB,EA7EyB,WAAM,OACC,IAAAspF,WAAS,GADV,qBACxBrwF,EADwB,KACd29X,EADc,KAKzBp9X,EAAiB,WACrBo9X,GAAa39X,IAGTl0C,GAAe,IAAAklI,UAAQ,kBAAM,IAAAzmI,4BAA0B,IAAAF,uBAAqB,IAC5E8pE,GAAW,IAAA68D,UAAQ,kBAAM,IAAAu1B,aAAYz6J,EAAc,GAAI,IAAI,GAAM,KAAO,CAACA,IAUzE8xa,EAAgB,WAIpB,OAF4B,IAAAngL,4BAEKzmQ,KAAI,SAACi1Q,GACpC,IAAM15Q,EAAU4hF,EAASn5E,MAAK,SAAAzI,GAAA,OAAWA,EAAQmY,KAAK7X,UAAUqE,KAAO+0Q,EAAkB3tN,aACzF,GAAK/rD,EAIL,OAAOsrb,EAAatrb,EAAS05Q,OAI3B4xK,EAAe,SAACtrb,EAAS05Q,GAC7B,OAAO,8BAAIvlR,IAAK6L,EAAQmY,KAAK7X,UAAUqE,GAC5B4iF,UAAW,oBACpB,+BAAKA,UAAW,qBACd,mCAAkBvnF,QAASA,EAAQmY,QAErC,+BAAKovE,UAAW,oBACd,+BAAKA,UAAU,yBACb,mCAAavnF,QAASA,EAAQmY,QAEhC,+BAAKovE,UAAU,0BACb,4CAAkB5iF,GAAI,0BADxB,KACqD+0Q,EAAkBtjM,cAM7E,OACE,wCACE,kCAAQmR,UAAU,eAAekyF,QAnDjB,WAClB2xQ,GAAa39X,KAkDX,KAGA,mCACE5a,MAAO,4CAAkBluC,GAAI,0BAC7B6oD,QA7CG,8BAAI+5B,UAAW,oBAElB8jW,KA4CA59X,SAAUA,EACVC,gBAAiBM,EACjBD,YAAa,4CAAkBppD,GAAI,6BACnCqpD,eAAgBA,EAChBC,WAAW,W,8ECzEnB,I,EAAA,O,8CAEkB,WAChB,OACE,+BAAKs5B,UAAU,QACb,+BAAK5iF,GAAG,gCAAgCrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BAChF8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cAClEsuT,SAAS,YASZ,6BAAGx6a,MAAO,CAACosH,KAAK,YACY,mCAAS71C,UAAU,MAAM3kC,OAAO,krBAQ9D,+BAAKj+C,GAAG,0BAA0BrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BAC1E8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cAClEsuT,SAAS,YASZ,6BAAGx6a,MAAO,CAACosH,KAAK,YACY,mCAAS71C,UAAU,MAAM3kC,OAAO,krBAQ9D,+BAAKj+C,GAAG,wBAAwBrI,MAAM,QAAQE,OAAO,QAAQ0gI,QAAQ,cAAcM,QAAQ,MAAMC,MAAM,8BACrG,4DACA,6BAAG94H,GAAG,sBAAsB8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WAC7E,6BAAG14H,GAAG,sBAAsB24H,UAAU,gCAAgCF,KAAK,UAAU3lE,OAAO,WAC1F,gCAAM9yD,GAAG,oBAAoBw4H,YAAY,aAAapmH,EAAE,IAAIC,EAAE,IAAI1a,MAAM,MAAME,OAAO,MAAMuhI,GAAG,eAC9F,gCAAMp5H,GAAG,oBAAoBw4H,YAAY,aAAapmH,EAAE,KAAKC,EAAE,KAAK1a,MAAM,MAAME,OAAO,QACvF,6BAAGmI,GAAG,kBAAkB24H,UAAU,oCAAoCH,YAAY,OAChF,kCAAQx4H,GAAG,OAAOk5H,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,OACpC,kCAAQiR,GAAG,OAAOk5H,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,mBA2B5C,+BAAKiR,GAAG,8BAA8BrI,MAAM,QAAQE,OAAO,QAAQ0gI,QAAQ,cAAcM,QAAQ,MAAMC,MAAM,8BAC3G,0DACA,6BAAG94H,GAAG,sBAAsB8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WAC7E,6BAAG14H,GAAG,oBAAoB24H,UAAU,gCAAgCF,KAAK,UAAU3lE,OAAO,WACxF,gCAAM9yD,GAAG,oBAAoBw4H,YAAY,aAAapmH,EAAE,IAAIC,EAAE,IAAI1a,MAAM,MAAME,OAAO,MAAMuhI,GAAG,eAC9F,gCAAMp5H,GAAG,oBAAoBw4H,YAAY,aAAapmH,EAAE,KAAKC,EAAE,MAAM1a,MAAM,MAAME,OAAO,QACxF,gCAAMmI,GAAG,mBAAmBw4H,YAAY,aAAapmH,EAAE,KAAKC,EAAE,KAAK1a,MAAM,MAAME,OAAO,QACtF,6BAAGmI,GAAG,kBAAkB24H,UAAU,mCAAmCH,YAAY,OAC/E,kCAAQx4H,GAAG,OAAOk5H,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,OACpC,kCAAQiR,GAAG,OAAOk5H,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,gBAEtC,6BAAGiR,GAAG,kBAAkB24H,UAAU,oCAAoCH,YAAY,OAChF,kCAAQx4H,GAAG,OAAOk5H,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,OACpC,kCAAQiR,GAAG,OAAOk5H,GAAG,KAAKC,GAAG,KAAKpqI,EAAE,mBA2B5C,+BAAKiR,GAAG,yBAAyBrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BACzE8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cACjEsuT,SAAS,YASb,6BAAGx6a,MAAO,CAACosH,KAAK,YACd,gCAAM71C,UAAU,MAAMp0F,EAAE,0QAK5B,+BAAKwR,GAAG,wBAAwBrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BACxE8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cACjEsuT,SAAS,YASb,6BAAGx6a,MAAO,CAACosH,KAAK,YACd,iCACE,gCAAM71C,UAAU,MAAMp0F,EAAE,01BAS1B,gCAAMo0F,UAAU,MAAMp0F,EAAE,2fAKxB,iCACE,gCAAMo0F,UAAU,MAAMp0F,EAAE,qIAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,qJAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,8JAK9B,+BAAKwR,GAAG,4BAA4BrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BAC5E8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cACjEsuT,SAAS,YAUb,6BAAGx6a,MAAO,CAACosH,KAAK,YACd,gCAAM71C,UAAU,MAAMp0F,EAAE,+IAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,6IAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,6IAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,+UAGxB,gCAAMo0F,UAAU,MAAMp0F,EAAE,yHAI5B,+BAAKwR,GAAG,yBAAyBrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BACzE8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cACjEsuT,SAAS,YAUb,6BAAGx6a,MAAO,CAACosH,KAAK,YACd,gCAAM71C,UAAU,MAAMp0F,EAAE,+IAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,6IAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,6IAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,+UAGxB,gCAAMo0F,UAAU,MAAMp0F,EAAE,yHAI5B,+BAAKwR,GAAG,wBAAwBrI,MAAM,MAAME,OAAO,MAAM0gI,QAAQ,cAAcM,QAAQ,MAAMC,MAAM,8BACjG,6BAAG94H,GAAG,QAAQ8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WAC/D,6BAAG14H,GAAG,WAAW24H,UAAU,sBAAsBF,KAAK,UAAUC,SAAS,WACvE,6BAAG14H,GAAG,iBAAiB24H,UAAU,qBAC/B,gCAAMnqI,EAAE,u8EACR,gCAAMA,EAAE,sgGAKhB,+BAAKwR,GAAG,8BAA8BrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BAC9E8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cACjEsuT,SAAS,YASb,6BAAGx6a,MAAO,CAACosH,KAAK,YACd,kCAAQ71C,UAAU,MAAMs2C,GAAG,KAAKC,GAAG,OAAOpqI,EAAE,QAC5C,gCAAM6zF,UAAU,MAAMp0F,EAAE,uMAExB,kCAAQo0F,UAAU,MAAMs2C,GAAG,OAAOC,GAAG,OAAOpqI,EAAE,QAC9C,gCAAM6zF,UAAU,MAAMp0F,EAAE,iHAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,yIAExB,kCAAQo0F,UAAU,MAAMs2C,GAAG,OAAOC,GAAG,KAAKpqI,EAAE,QAC5C,kCAAQ6zF,UAAU,MAAMs2C,GAAG,OAAOC,GAAG,OAAOpqI,EAAE,QAC9C,kCAAQ6zF,UAAU,MAAMs2C,GAAG,OAAOC,GAAG,OAAOpqI,EAAE,MAC9C,kCAAQ6zF,UAAU,MAAMs2C,GAAG,OAAOC,GAAG,QAAQpqI,EAAE,QAC/C,gCAAM6zF,UAAU,MAAMp0F,EAAE,mxFAyBxB,kCAAQo0F,UAAU,MAAMs2C,GAAG,OAAOC,GAAG,MAAMpqI,EAAE,QAC7C,kCAAQ6zF,UAAU,MAAMs2C,GAAG,OAAOC,GAAG,QAAQpqI,EAAE,UAGnD,+BAAKiR,GAAG,8BAA8BrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BAC9E8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cACjEsuT,SAAS,YASb,6BAAGx6a,MAAO,CAACosH,KAAK,YACd,gCAAM71C,UAAU,MAAMp0F,EAAE,4zBAOxB,gCAAMo0F,UAAU,MAAMp0F,EAAE,8mDAexB,mCAASo0F,UAAU,MACV3kC,OAAO,2EAChB,mCAAS2kC,UAAU,MACV3kC,OAAO,6EAGpB,+BAAKj+C,GAAG,kCAAkCrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MACtEC,MAAM,6BAA6B8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MACvFkmH,QAAQ,cAAesuT,SAAS,YASnC,6BAAGx6a,MAAO,CAACosH,KAAK,YACd,gCAAM71C,UAAU,MAAMp0F,EAAE,wIAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,4LAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,oJAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,sJAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,wJAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,wJAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,wJAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,wJAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,wJAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,mHAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,qIAExB,gCAAM4jB,EAAE,OAAOC,EAAE,QAAQuwE,UAAU,MAAMjrF,MAAM,MAAME,OAAO,QAC5D,gCAAMua,EAAE,OAAOC,EAAE,QAAQuwE,UAAU,MAAMjrF,MAAM,MAAME,OAAO,QAC5D,gCAAM+qF,UAAU,MAAMp0F,EAAE,irBAMxB,gCAAMo0F,UAAU,MAAMp0F,EAAE,qQAGxB,gCAAMo0F,UAAU,MAAMp0F,EAAE,mQAGxB,gCAAMo0F,UAAU,MAAMp0F,EAAE,sOAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,qIAExB,gCAAMo0F,UAAU,MAAMp0F,EAAE,4mBAMxB,gCAAM4jB,EAAE,OAAOC,EAAE,QAAQuwE,UAAU,MAAMjrF,MAAM,KAAKE,OAAO,UAG/D,+BAAKmI,GAAG,8BAA8BrI,MAAM,MAAME,OAAO,MAAMghI,QAAQ,MAAMC,MAAM,6BAC9E8tT,WAAW,+BAA+Bx0a,EAAE,MAAMC,EAAE,MAAMkmH,QAAQ,cACjEsuT,SAAS,YASb,6BAAGx6a,MAAO,CAACosH,KAAK,YACd,iCACE,gCAAM71C,UAAU,MAAMp0F,EAAE,6dAKxB,gCAAMo0F,UAAU,MAAMp0F,EAAE,grCAW1B,gCAAMo0F,UAAU,MAAMp0F,EAAE,+dAO5B,+BAAKwR,GAAG,kBAAkBrI,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAC5EC,MAAM,6BAA6B8tT,WAAW,gCACjD,wDACA,6BAAG5mb,GAAG,kBAAkB8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACzE,6BAAG14H,GAAG,kBAAkBy4H,KAAK,UAAUC,SAAS,WAC9C,gCACElqI,EAAE,6VACFwR,GAAG,SACL,gCACExR,EAAE,0aACFwR,GAAG,YAIX,+BAAKA,GAAG,eAAeu4H,QAAQ,UAAUM,QAAQ,MAAMC,MAAM,6BACxD8tT,WAAW,gCACd,oDACA,6BAAG5mb,GAAG,cAAc8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACrE,mCAAS14H,GAAG,OAAOy4H,KAAK,UAAUC,SAAS,UAClCz6E,OAAO,oNAGpB,+BAAKj+C,GAAG,YAAYrI,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,8BACrF,uDACA,6BAAG94H,GAAG,iBAAiB8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACxE,6BAAG14H,GAAG,gBAAgB24H,UAAU,gCAAgCF,KAAK,UAAUC,SAAS,WACtF,gCAAMlqI,EAAE,07CAA07CwR,GAAG,OAAO8yD,OAAO,UAAU0lE,YAAY,SACz+C,6BAAGx4H,GAAG,WAAW24H,UAAU,iCACzB,gCAAMnqI,EAAE,8iCAA8iCwR,GAAG,SACzjC,gCAAMxR,EAAE,qiCAAqiCwR,GAAG,aAKxjC,+BAAKA,GAAG,UAAUrI,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,8BACnF,2DACA,4DACA,6BAAG94H,GAAG,wBAAwB8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WAC/E,gCAAM14H,GAAG,mBAAmB8yD,OAAO,UAAU0lE,YAAY,KAAKC,KAAK,UAAUrmH,EAAE,IAAIC,EAAE,IAAI1a,MAAM,KAAKE,OAAO,KAAKuhI,GAAG,MACnH,gCAAM5qI,EAAE,+rEAA+rEwR,GAAG,wBAAwBy4H,KAAK,UAAUC,SAAS,iB,8HCjdpwE,MACA,OACA,OACA,QAEA,Q,IACA,OACA,Q,IACA,QACA,QACA,Q,IACA,QACA,U,uDAEMouT,E,YAEJ,WAAYxjV,IAAO,gGACXA,IADW,SAWnBkmS,YAAc,SAACC,GAIb,GAHA,UAAUtwW,eAAe,8BAAgCswW,EAAU,MAAO,OAC1E,EAAKnmS,MAAMuY,yBAAwB,GACnCzqH,SAAS6C,KAAKC,UAAU27K,OAAO,qBAC3B45N,EAAS,CACX,EAAKnmS,MAAM2Y,wBAAuB,GAC7B,EAAK3Y,MAAM0Y,mBACdt1B,YAAW,WACT,EAAK4c,MAAMn+E,gBAAgB,QAC3B,EAAA+E,YAAYn9B,KAAK,EAAKu2G,MAAMl+E,cAAgB,eAC3C,GAEL,IAAMlO,EAAa,EAAA+Y,oBAAoBtb,WAAU,SAAA2qE,GAAA,OAAQA,IAAS,EAAKgkB,MAAMyY,iBAE7E,EAAKgrU,2BACL,IAAAhoD,cAAa,EAAKz7R,MAAMyY,gBACxB,IAAAmjR,gBAAehoX,KA3BA,EA+BnB6va,wBAA0B,WACxB,IAAM7za,GAAS,IAAAC,oBACf,GAAID,EAAOc,aAAc,CACvB,IAAM+B,EAAmB7C,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAAS,EAAK60G,MAAMvtF,oBAC/F,GAAIA,GACCA,EAAiBuxP,0BACjB,EAAKhkK,MAAM7mF,sBAC0B,YAArCrrB,SAASC,SAASoC,gBACyB,6BAA3C,EAAK6vG,MAAM7mF,qBAAqBne,SAC/ByX,EAAiBtB,SAASxc,MAAK,SAAAujN,GAAA,MAA+B,6BAAtBA,EAAMhoM,KAAKlV,UAAwC,CAC/F,IAAM6sN,EAAmBj4M,EAAOsD,MAAM,UAAgBxW,IACtD,GAAImrN,EAAkB,CACpB,IAAMyqK,EAAmBzqK,EAAiB12M,WAAW3Q,MAAK,SAAAo0T,GAAA,MAA+B,eAAtBA,EAAM1kT,KAAKlV,UAC9E,GAAIs3X,EAAiB,CACnB,IAAMnnY,EAAO,EAAK60G,MAAM7mF,qBAAqBu9D,yCACzCo9E,EAAaw+N,EAAgBpiX,KAAKkE,qBAAqB5T,MAAK,SAAA6T,GAC9D,OAAOA,EAAQnE,KAAKwmE,2CAA6CvrF,KAE/D2oK,GACF,EAAK9zD,MAAM9mF,2BAA2B46I,EAAW5jJ,MACjD,EAAK8vF,MAAMplF,iBAAiBk5I,EAAW5jJ,QAEnCoiX,EAAgBpiX,MAAQoiX,EAAgBpiX,KAAK2K,gBAC/Cy3W,EAAgBpiX,KAAK+qE,WAAW,EAAK+kB,MAAMr+F,mBAAoB,GAEjE,EAAKq+F,MAAM9mF,2BAA2B,YAtDhD,EAAKzd,MAAQ,GAFI,E,0FAKO63K,GACpBA,EAAU96D,0BAA4B9jH,KAAKsrG,MAAMwY,yBACnD1qH,SAAS6C,KAAKC,UAAUC,IAAI,uB,+BAyDvB,WACP,OAAO6D,KAAKsrG,MAAMwY,wBAChB,+BAAKl5B,UAAU,4BACb,+BAAKA,UAAU,uBACb,+BAAKA,UAAU,8BACf,8BAAIA,UAAU,qCACZ,4CAAkB5iF,GAAG,6BAEvB,kCAAQ4iF,UAAU,qCAAqCkyF,QAAS,kBAAM,EAAKxxE,MAAMuY,8BAEjF,+BAAKj5B,UAAU,4BACb,+BAAKA,UAAU,kCACb,4CAAkB5iF,GAAG,+BAEvB,+BAAK4iF,UAAW,oEAAsE5qF,KAAKsrG,MAAMyY,iBAEnG,+BAAKn5B,UAAU,+BACb,kCAAQA,UAAU,yCAAyCkyF,QAAS,kBAAM,EAAK00N,aAAY,KACzF,4CAAkBxpY,GAAG,gCAEvB,kCAAQ4iF,UAAU,0CAA0CkyF,QAAS,kBAAM,EAAK00N,aAAY,KAC1F,4CAAkBxpY,GAAG,oCAK3B,S,yBAgBO,IAAA8jG,UAZS,SAACxzG,GACvB,MAAO,CACLwrH,wBAAyBxrH,EAAMyV,UAAU+1G,wBACzCC,cAAezrH,EAAMyV,UAAUg2G,cAC/BC,kBAAmB1rH,EAAMyV,UAAUi2G,kBACnCjmG,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChC0G,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CxX,iBAAkB3U,EAAM4U,YAAYD,iBACpCmgB,aAAc90B,EAAM8J,UAAUgrB,gBAIM,CACtCy2F,kDACAI,gDACAz/F,wDACA0B,oCACAiH,mCALa,CAMZ2ha,I,wFC5HY,WACb,IAAI7oY,SAwBJ,OAtBEA,EADwB,WAAvB,UAAOr5C,YACC,CACP,IAAI,EAAJ,QAAU,GAAI,GAAI,WAClB,IAAI,EAAJ,QAAU,KAAM,GAAI,YACpB,IAAI,EAAJ,QAAU,KAAM,MAAO,eACvB,IAAI,EAAJ,QAAU,GAAI,MAAO,eAGb,CACR,IAAI,EAAJ,QAAU,GAAI,GAAI,WAClB,IAAI,EAAJ,QAAU,KAAM,GAAI,YACpB,IAAI,EAAJ,QAAU,KAAM,GAAI,eACpB,IAAI,EAAJ,QAAU,GAAI,GAAI,eAIV,CACV,IAAI,EAAJ,QAASq5C,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,MA1B/B,I,IAAA,Q,IACA,Q,IACA,O,mICFA,I,IAAA,Q,IACA,Q,IACA,O,6DAE0B,WACxB,IAAIA,SA8BJ,OA5BEA,EADwB,WAAvB,UAAOr5C,YACC,CACP,IAAI,EAAJ,QAAU,KAAM,MAAO,WACvB,IAAI,EAAJ,QAAU,IAAK,GAAI,YACnB,IAAI,EAAJ,QAAU,OAAQ,GAAI,eAAe,GACrC,IAAI,EAAJ,QAAU,OAAQ,EAAG,cACrB,IAAI,EAAJ,QAAU,EAAG,EAAG,cAChB,IAAI,EAAJ,QAAU,GAAI,MAAO,eAGd,CACP,IAAI,EAAJ,QAAU,KAAM,GAAI,WACpB,IAAI,EAAJ,QAAU,IAAK,GAAI,YACnB,IAAI,EAAJ,QAAU,IAAK,GAAI,eAAe,GAClC,IAAI,EAAJ,QAAU,IAAK,EAAG,cAClB,IAAI,EAAJ,QAAU,EAAG,EAAG,cAChB,IAAI,EAAJ,QAAU,GAAI,GAAI,eAIV,CACV,IAAI,EAAJ,QAASq5C,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,O,8EChC/B,I,IAAA,MACA,OACA,O,IACA,OAEA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,QACA,QACA,SAKA,Q,IACA,S,IACA,SACA,Q,mDAEA,IA4MMqqI,EAAqB,CACzBm5D,0DACAI,8CACA/wL,iD,WAGa,IAAAgzC,UAdS,SAACxzG,GAAD,MAAY,CAClCsgD,eAAgBtgD,EAAM80Q,2BAA2Bx0N,eACjDC,eAAgBvgD,EAAM80Q,2BAA2Bv0N,eACjDC,SAAUxgD,EAAM80Q,2BAA2Bt0N,SAC3C4wM,sBAAuBpxP,EAAM80Q,2BAA2B1jB,sBACxD7wL,mBAAoBvgE,EAAMyV,UAAU8qD,sBASEy3H,EAAzB,EAlNmB,SAAChlF,GAAU,IACpCo+I,EAA0Fp+I,EAA1Fo+I,sBAAuBG,EAAmEv+I,EAAnEu+I,sBAAuBjxM,EAA4C0yD,EAA5C1yD,eAAgBC,EAA4ByyD,EAA5BzyD,eAAgBC,EAAYwyD,EAAZxyD,SAE/El8B,GAAe,IAAA6hH,uBACjBuwT,GAA0B,GACT,OAAjBpya,GACEA,GAAgBA,EAAapB,OAASoB,EAAapB,KAAK42E,uBAGhC,KADP,IAAA99B,iBAAgB13C,GACpBnoB,SACfu6b,GAA0B,IAI9B,IAAMC,EAAe,SAAC7jb,GACpBy+O,EAAsBz+O,GACtBm+W,EAAS,IAAMn+W,EAAM,mBAIjBm+W,EAAW,SAAC2lE,GAChB,IAAMC,GAAa,aAAED,GACrBC,EAAW3hW,QAAQ,CAACy5E,UAAWkoR,EAAW,GAAG5xQ,cAAe,SAG9D,OACE,+BAAK3yF,UAAW,mBAAqB8+J,EAAwB,0BAA4B,IAAK1hP,GAAG,8BAC/F,+BAAK4iF,UAAU,uBACb,mCAAyBxyB,SAAS,IAClC,+BAAKwyB,UAAU,iBACb,8BAAIA,UAAU,sBAAsB8mS,YAAU,qBAC5C,4CAAkB1pX,GAAI,uBAExB,+BAAK4iF,UAAU,yBAEb,+BAAKA,UAAU,sBAEf,+BAAKA,UAAU,sBACb,+BAAK5iF,GAAI,EAAA2wC,6BAA6BC,eAAgBgyC,UAAU,4BAC9D,+BAAKA,UAAU,yBACb,+BAAKA,UAAU,iCACb,+BAAKA,UAAU,GAAG8mS,YAAU,gCAC1B,4CAAkB1pX,GAAI,kCAExB,+BAAK4iF,UAAU,wBACjB,gCAAMA,UAAU,OAAO8mS,YAAU,2BAC/B,4CAAkB1pX,GAAI,4BADxB,KAGI,gCAAM4iF,UAAU,QAAQwkW,eAAa,2BACtC,IAAA5gL,wCAKL,+BAAK5jL,UAAU,0BACb,+BAAKA,UAAU,cACb,+BAAKA,UAAU,aACf,+BAAKA,UAAU,WAAW8mS,YAAU,6BAClC,4CAAkB1pX,GAAI,+BAExB,+BAAK4iF,UAAU,aACf,+BAAKA,UAAU,WAAW8mS,YAAU,4BAClC,4CAAkB1pX,GAAI,8BAExB,+BAAK4iF,UAAU,cAEjB,+BAAKA,UAAU,gBAEXhyC,EAAe9wC,KAAI,SAACiiP,EAAKn8O,GACvB,IAAIyhb,GAAY,IAAA54W,aAAY7oE,EAAQ,GAEpC,OAAO,mCAAmBm8O,IAAKA,EAAKmiF,SAAUt+T,EAAQ,EAAGyhb,UAAWA,EAAW73b,IAAKoW,EAAQ,QAIlG,+BAAKg9E,UAAU,aAAakyF,QAAS,kBAAMmyQ,EAAa,EAAAt2Y,6BAA6BC,kBACnF,gCAAMgyC,UAAU,+BACV8mS,YAAU,6BACV49D,YAAU,eACd,4CAAkBtnb,GAAI,mCAM5Bgnb,EACI,+BAAKhnb,GAAI,EAAA2wC,6BAA6BG,SAAU8xC,UAAU,4BAC1D,+BAAKA,UAAU,yBACb,+BAAKA,UAAU,iCACb,+BAAKA,UAAU,GAAG8mS,YAAU,0BAC1B,4CAAkB1pX,GAAI,4BAExB,+BAAK4iF,UAAU,wBACrB,gCAAMA,UAAU,OAAO8mS,YAAU,2BAC/B,4CAAkB1pX,GAAI,4BADxB,KAGQ,gCAAM4iF,UAAU,QAAQwkW,eAAa,qBAC1C,IAAAlzK,qCAKD,+BAAKtxL,UAAU,0BACb,+BAAKA,UAAU,sBACb,+BAAKA,UAAU,aACf,+BAAKA,UAAU,WAAW8mS,YAAU,6BAClC,4CAAkB1pX,GAAI,+BAExB,+BAAK4iF,UAAU,WAAW8mS,YAAU,6BAClC,4CAAkB1pX,GAAI,+BAExB,+BAAK4iF,UAAU,WAAW8mS,YAAU,2BAClC,4CAAkB1pX,GAAI,6BAExB,+BAAK4iF,UAAU,cAEjB,+BAAKA,UAAU,gBAEX9xC,EAAShxC,KAAI,SAACiiP,EAAKn8O,GACjB,IAAIyhb,GAAY,IAAA54W,aAAY7oE,EAAQ,GAEpC,OAAO,mCAAam8O,IAAKA,EAAKmiF,SAAUt+T,EAAQ,EAAGyhb,UAAWA,EAAW73b,IAAKoW,EAAQ,QAI5F,+BAAKg9E,UAAU,aAAakyF,QAAS,kBAAMmyQ,EAAa,EAAAt2Y,6BAA6BG,YACvF,gCAAM8xC,UAAU,+BACV8mS,YAAU,6BACV49D,YAAU,SACd,4CAAkBtnb,GAAI,mCAKxB,KAEN,+BAAKA,GAAI,EAAA2wC,6BAA6BE,eAAgB+xC,UAAU,4BAC9D,+BAAKA,UAAU,yBACb,+BAAKA,UAAU,iCACb,+BAAKA,UAAU,GAAG8mS,YAAU,gCAC1B,4CAAkB1pX,GAAI,kCAExB,+BAAK4iF,UAAU,wBACjB,gCAAMA,UAAU,OAAO8mS,YAAU,2BAC/B,4CAAkB1pX,GAAI,4BADxB,KAGI,gCAAM4iF,UAAU,QAAQwkW,eAAa,2BACtC,IAAAjzK,wCAKL,+BAAKvxL,UAAU,0BACb,+BAAKA,UAAU,cACb,+BAAKA,UAAU,aACf,+BAAKA,UAAU,WAAW8mS,YAAU,6BAClC,4CAAkB1pX,GAAI,+BAExB,+BAAK4iF,UAAU,aACf,+BAAKA,UAAU,WAAW8mS,YAAU,6BAClC,4CAAkB1pX,GAAI,+BAExB,+BAAK4iF,UAAU,cAEjB,+BAAKA,UAAU,gBAEX/xC,EAAe/wC,KAAI,SAACiiP,EAAKn8O,GACvB,IAAIyhb,GAAY,IAAA54W,aAAY7oE,EAAQ,GAEpC,OAAO,mCAAmBm8O,IAAKA,EAAKmiF,SAAUt+T,EAAQ,EAAGyhb,UAAWA,EAAW73b,IAAKoW,EAAQ,QAIlG,+BAAKg9E,UAAU,aAAakyF,QAAS,kBAAMmyQ,EAAa,EAAAt2Y,6BAA6BE,kBACrF,gCAAM+xC,UAAU,+BACV8mS,YAAU,6BACV49D,YAAU,gBACd,4CAAkBtnb,GAAI,sCAQlC,+BAAK4iF,UAAU,4BACb,+BAAKA,UAAU,uBACb,wCACA,gD,iGClNZ,MACA,SACA,OACA,Q,IACA,O,mDAEA,IAsCM0lG,EAAqB,CACzBw5D,oDACAI,qD,WAGa,IAAAp+I,UARS,iBAAO,KAQSwkF,EAAzB,EA3CW,SAAChlF,GAAU,IAC5By+I,EAAgFz+I,EAAhFy+I,IAAKmiF,EAA2E5gO,EAA3E4gO,SAAUmjH,EAAiE/jV,EAAjE+jV,UAAWnlM,EAAsD5+I,EAAtD4+I,yBAA0BJ,EAA4Bx+I,EAA5Bw+I,yBAIrDylM,EAAoB,SAAC3uV,EAAO4oN,GAChC5oN,EAAM7V,iBAEN++J,EAAyB,EAAAnxM,6BAA6BC,eAAgBmxM,GAAtE,gBAA6Ey/D,EAAS5oN,EAAMlqF,OAAOxf,SAErG,OACE,+BAAK0zF,UAAU,eAAek3M,aAAYoqC,GACxC,+BAAKthP,UAAU,YACZykW,GAEH,+BAAKzkW,UAAU,YACb,iCAAOx/E,KAAK,SACLw/E,UAAU,eACV1zF,MAAO6yP,EAAIt1P,OAAQ68I,YAAa,UAAWpuF,wBAC3C4yK,SAAU,SAAC3/N,GAAOo5b,EAAkBp5b,EAAG,EAAAijD,2BAA2B3kD,YAE3E,+BAAKm2F,UAAU,YAAf,KACA,+BAAKA,UAAU,YACb,iCAAOx/E,KAAK,SACLw/E,UAAU,cACV1zF,MAAO6yP,EAAIpqP,MAAO2xI,YAAa,UAAWpuF,wBAC1C4yK,SAAU,SAAC3/N,GAAOo5b,EAAkBp5b,EAAG,EAAAijD,2BAA2Bz5C,WAE3E,+BAAKirF,UAAU,kBAAkBkyF,QA1BX,WACxBotE,EAAyB,EAAAvxM,6BAA6BC,eAAgBmxM,EAAI/hP,MA0BtE,gCAAM4iF,UAAU,wB,6FCnCxB,O,OACA,SAGA,OACA,Q,IAEA,S,IACA,OACA,Q,IACA,OACA,S,mDAEA,IA+GM0lG,EAAqB,CACzB45D,oDACAJ,qD,WAGa,IAAAh+I,UATS,SAACxzG,GAAD,MAAY,CAClCwgD,SAAUxgD,EAAM80Q,2BAA2Bt0N,YAQLw3I,EAAzB,EApHK,SAAChlF,GAAU,IACtBy+I,EAA0Fz+I,EAA1Fy+I,IAAKjxM,EAAqFwyD,EAArFxyD,SAAUozR,EAA2E5gO,EAA3E4gO,SAAUmjH,EAAiE/jV,EAAjE+jV,UAAWvlM,EAAsDx+I,EAAtDw+I,yBAA0BI,EAA4B5+I,EAA5B4+I,yBAM/DqlM,EAAoB,SAAC3uV,EAAO4oN,GAChC5oN,EAAM7V,iBAEN++J,EAAyB,EAAAnxM,6BAA6BG,SAAUixM,GAAhE,gBAAuEy/D,EAAU5oN,EAAMlqF,OAAOxf,SAE1Fs4b,EAA4B,WAChCC,IACA3lM,EAAyB,EAAAnxM,6BAA6BG,SAAUixM,EAAK,CAACu0B,iBAAkBv0B,EAAIu0B,mBAGxFmxK,EAAmB,WAErB32Y,EAAShxC,KAAI,SAACiiP,GACZD,EAAyB,EAAAnxM,6BAA6BG,SAAUixM,EAAK,CAACu0B,iBAAiB,QAKvFoxK,EAAqC,SAAC9hb,EAAO2mD,GACjDzb,EAAShxC,KAAI,SAACiiP,GACRA,EAAI/hP,IAAM4F,GACZk8O,EACE,EAAAnxM,6BAA6BG,SAC7BixM,GAFF,gBAGI,EAAA3wM,2BAA2BnoC,gBAAkBsjD,QAKjD0wB,GAAW,IAAA3wB,mBACXg9E,GAAc,IAAAitI,uBAcpB,OAVA,IAAA58J,YAAU,WACJ18B,EAASxwF,OAAS,IAAMs1P,EAAI94O,iBAC9B64O,EACE,EAAAnxM,6BAA6BG,SAC7BixM,GAFF,gBAGI,EAAA3wM,2BAA2BnoC,gBAAkBg0E,EAAS,GAAGzpE,SAG/D,CAACuuO,EAAKD,EAA0B7kK,IAGhC,+BAAK2F,UAAU,mCAAmCk3M,aAAYoqC,GAC5D,+BAAKthP,UAAU,YACZykW,GAEH,+BAAKzkW,UAAU,YACb,iCAAOx/E,KAAK,SAASw/E,UAAU,eAAe0mD,YAAa,UAAWpuF,wBAC/DhsD,MAAO6yP,EAAIt1P,OACXqhO,SAAU,SAAC3/N,GACTo5b,EAAkBp5b,EAAG,EAAAijD,2BAA2B3kD,YAG3D,+BAAKm2F,UAAU,aACf,+BAAKA,UAAU,YACb,iCAAOx/E,KAAK,SAASukb,aAAW,oBAAoB/kW,UAAU,eAAe0mD,YAAaA,EACnFp6I,MAAO6yP,EAAIlqP,OACXi2N,SAAU,SAAC3/N,GACTo5b,EAAkBp5b,EAAG,EAAAijD,2BAA2Bv5C,YAG3D,+BAAK+qF,UAAU,aACf,+BAAKA,UAAU,qBACb,gCAAMA,UAAU,+BAA+BkyF,QAAS0yQ,GAEpDvqW,EAASxwF,OAAS,EACds1P,EAAI94O,gBACF,mCAAa5N,QAAS0mP,EAAI94O,kBAC1B,mCAAa5N,QAAS4hF,EAAS,GAAGzpE,OACpC,IAGR,gCAAMovE,UAAW,mBAAqBm/J,EAAIu0B,gBAAkB,GAAK,QAASsxK,WAAU,aAAe,CAAC1jH,aAClG,8BAAIthP,UAAU,gCAAgCk3M,aAAW,eAErD78M,EAASn9E,KAAI,SAAC6X,GAAD,OACX,mCACEoqO,IAAKA,EACL2lM,mCAAoCA,EACpCF,0BAA2BA,EAC3Bj7X,YAAa50C,EAAQnE,KACrBhkB,IAAKmoB,EAAQnE,KAAK7X,UAAUqE,WASxC,+BAAK4iF,UAAU,kBAAkBkyF,QAhGX,WACxBotE,EAAyB,EAAAvxM,6BAA6BG,SAAUixM,EAAI/hP,MAgGhE,gCAAM4iF,UAAU,wB,iGClHxB,MACA,O,IACA,O,IACA,MACA,QACA,QACA,S,mDAEA,IAAMilW,EAAsB,SAACvkV,GAAU,IAC9B/2C,EAA6G+2C,EAA7G/2C,YAAai7X,EAAgGlkV,EAAhGkkV,0BAA2BE,EAAqEpkV,EAArEokV,mCAAoC3lM,EAAiCz+I,EAAjCy+I,IAAKD,EAA4Bx+I,EAA5Bw+I,yBAelFnkM,EAAcokM,EAAI94O,iBAAmB84O,EAAI94O,gBAAgBtN,UAAUqE,KAAOusD,EAAY5wD,UAAUqE,GAAK,SAAW,GAEtH,OACE,8BAAI4iF,UAAW,uBAAyBjlC,EACpCm3H,QAAS,SAAC3mL,IAjBU,SAACyqG,EAAOrsC,GAChCqsC,EAAM7V,iBAEN++J,EACE,EAAAnxM,6BAA6BG,SAC7BixM,GAFF,gBAGI,EAAA3wM,2BAA2BnoC,gBAAkBsjD,IAGjDm7X,EAAmC3lM,EAAI/hP,GAAIusD,GAC3Ci7X,IAOqBD,CAAkBp5b,EAAGo+D,KAEvC,mCAAalxD,QAASkxD,MAK7Bs7X,EAAoB3tS,UAAY,CAC9B3tF,YAAa,UAAU3a,MAAV,qBAIf,IAGM02I,EAAqB,CACzBw5D,qD,WAGa,IAAAh+I,UAPS,iBAAO,KAOSwkF,EAAzB,CAA6Cu/P,I,iGC/C5D,MACA,QACA,SACA,O,IACA,O,mDAEA,IA0CMv/P,EAAqB,CACzB45D,oDACAJ,qD,WAGa,IAAAh+I,UARS,iBAAO,KAQSwkF,EAAzB,EA/CW,SAAChlF,GAAU,IAC5By+I,EAAgFz+I,EAAhFy+I,IAAKmiF,EAA2E5gO,EAA3E4gO,SAAUmjH,EAAiE/jV,EAAjE+jV,UAAWnlM,EAAsD5+I,EAAtD4+I,yBAA0BJ,EAA4Bx+I,EAA5Bw+I,yBAIrDylM,EAAoB,SAAC3uV,EAAO4oN,GAChC5oN,EAAM7V,iBAEN++J,EAAyB,EAAAnxM,6BAA6BE,eAAgBkxM,GAAtE,gBAA6Ey/D,EAAS5oN,EAAMlqF,OAAOxf,SAGrG,OACE,+BAAK0zF,UAAU,eAAek3M,aAAYoqC,GACxC,+BAAKthP,UAAU,YACZykW,GAEH,+BAAKzkW,UAAU,YACb,iCAAOx/E,KAAK,SACLw/E,UAAU,eACV1zF,MAAO6yP,EAAIt1P,OACX68I,YAAa,UAAWpuF,wBACxB4yK,SAAU,SAAC3/N,GAAOo5b,EAAkBp5b,EAAG,EAAAijD,2BAA2B3kD,YAE3E,+BAAKm2F,UAAU,aACf,+BAAKA,UAAU,YACb,iCAAOx/E,KAAK,SACLw/E,UAAU,eACV1zF,MAAO6yP,EAAIlqP,OACXyxI,YAAa,UAAWpuF,wBACxB4yK,SAAU,SAAC3/N,GAAOo5b,EAAkBp5b,EAAG,EAAAijD,2BAA2Bv5C,YAE3E,+BAAK+qF,UAAU,mBACb,gCAAMA,UAAU,gBAAgBkyF,QA9BZ,WACxBotE,EAAyB,EAAAvxM,6BAA6BE,eAAgBkxM,EAAI/hP,a,6FCT9E,O,OACA,OACA,QACA,QACA,QACA,OACA,U,mDAEA,IAiFMsoL,EAAqB,CACzB1oF,0CACAsc,yC,WAGa,IAAApY,UAVS,SAACxzG,GAAD,MAAY,CAClCuvG,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAQS0jL,EAAzB,EAtFe,SAAChlF,GAAU,IAEhCzD,EAAsEyD,EAAtEzD,aAAcD,EAAwD0D,EAAxD1D,oBAAqBh7F,EAAmC0+F,EAAnC1+F,YAAas3G,EAAsB5Y,EAAtB4Y,mBAFhB,GAGiB,IAAAi9B,UAASv0I,GAH1B,qBAGhCkjb,EAHgC,KAGVC,EAHU,KAIjCzoD,EAA4B,aAAjBz/R,EAEXmoV,EAA+B,SAACF,GACpCC,EAAwBD,IAGpBG,EAAsB,SAACC,GACvBA,GACFhsU,EAAmB4rU,IACnB,IAAAh4Q,gBAAeg4Q,IAEfC,EAAwBnjb,GAG1Bg7F,EAAoB,KAQtB,OACE,+BAAKhd,UAAW,iCAAmC08S,EAAW,GAAK,WACjE,+BAAK18S,UAAU,uBACb,+BAAKA,UAAU,8BACb,+BAAKA,UAAU,qEACV8mS,YAAU,6BACb,4CAAkB1pX,GAAI,+BAExB,kCAAQ4iF,UAAU,sCAAsCulW,gBAAc,WAC9DrzQ,QAAS,kBAAMmzQ,GAAoB,IACnC5B,cAAY,iBAGtB,+BAAKzjW,UAAU,4BACb,+BAAKA,UAAU,2DAAf,SAGA,+BAAKA,UAAU,iCACb,gCAAMA,UAAU,kBACd,+BAAKA,UAAU,yCACb,gCAAMA,UAAU,iCACd,gCAAMA,UAAW,wBAA0BklW,IAAyB,EAAAt2Y,kBAAkBC,SAAW,SAAW,IAAK22Y,aAAW,WACtHtzQ,QAAS,kBAAMkzQ,EAA6B,aAC5Ct+D,YAAU,yCACd,4CAAkB1pX,GAAI,2CAExB,gCAAM4iF,UAAW,wBAA0BklW,IAAyB,EAAAt2Y,kBAAkBE,OAAS,SAAW,IAAK02Y,aAAW,SACpHtzQ,QAAS,kBAAMkzQ,EAA6B,WAC5Ct+D,YAAU,uCACd,4CAAkB1pX,GAAI,8CAOlC,+BAAK4iF,UAAU,kDACb,kCAAQA,UAAU,iCAAiCulW,gBAAc,WACzDrzQ,QAAS,kBAAMmzQ,GAAoB,KACzC,gCAAMrlW,UAAU,yBACV8mS,YAAU,kCACd,4CAAkB1pX,GAAI,4C,8EC3EpC,I,EAAA,O,oCACA,OACA,OAEA,QACA,SAEA,IAqEMsoL,EAAqB,CACzB3mF,yD,WAGa,IAAAmC,UARS,SAACxzG,GAAD,MAAY,CAClCsxG,oBAAqBtxG,EAAMs3D,cAAcg6C,uBAOH0mF,EAAzB,EAzEM,WAEnB,OADuB,IAAAp2H,sBAEd,KAIP,+BAAK0wB,UAAU,wBAAwBylW,YAAU,KAC/C,+BAAKzlW,UAAU,iBACb,+BAAKA,UAAU,sBACb,6BAAGA,UAAU,2BAA2B5iF,GAAG,uBAC3C,+BAAK4iF,UAAU,+BACb,kCAAQA,UAAU,gCAAgC5iF,GAAG,sBAC7C0pX,YAAU,oCAChB,4CAAkB1pX,GAAG,sCAEvB,kCAAQ4iF,UAAU,uEAAuE5iF,GAAG,qBACpF0pX,YAAU,4BAChB,4CAAkB1pX,GAAG,gCAI3B,gCAAM4iF,UAAU,6DAChB,+BAAKA,UAAU,4CACb,kCAAQA,UAAU,wCAAwC0lW,YAAU,WAClE,gCAAM1lW,UAAU,cAAc8mS,YAAU,qCACtC,4CAAkB1pX,GAAG,yCAI3B,+BAAK4iF,UAAU,4CACb,kCAAQA,UAAU,mCAAmC88S,cAAY,UAEnE,+BAAK98S,UAAU,4CACb,kCAAQA,UAAU,sCAAsC2lW,WAAS,SAASZ,aAAW,QAC7EtB,cAAY,QAClB,gCAAMzjW,UAAU,cAAc8mS,YAAU,oCACtC,4CAAkB1pX,GAAG,wCAI3B,+BAAK4iF,UAAU,4CACb,kCAAQA,UAAU,oCAAoC4lW,YAAU,QAC9D,gCAAM5lW,UAAU,cAAc8mS,YAAU,kCACtC,4CAAkB1pX,GAAG,sCAI3B,+BAAK4iF,UAAU,4CACb,kCAAQA,UAAU,yCAChB,gCAAMA,UAAU,SAAS8mS,YAAU,kCACjC,4CAAkB1pX,GAAG,qCAGzB,kCAAQ4iF,UAAU,8CAChB,gCAAMA,UAAU,cAAc8mS,YAAU,kCACtC,4CAAkB1pX,GAAG,4C,8EC/DnC,I,EAAA,O,oCACA,OACA,OAGA,IAkCMsoL,EAAqB,CACzB/mF,qBArCF,MAqCEA,sB,WAIa,IAAAuC,UATS,SAACxzG,GAAD,MAAY,CAClCkxG,cAAelxG,EAAMs3D,cAAc45C,iBAQG8mF,EAAzB,EAvCW,SAAChlF,GAAU,IAC5B9B,EAAuC8B,EAAvC9B,cAAeD,EAAwB+B,EAAxB/B,qBAOtB,OACE,+BAAK3e,UAAW,wBAA0B4e,EAAc14C,SAAW,GAAK,UAAW9oD,GAAG,uBACpF,+BAAK4iF,UAAU,sBAAsB5iF,GAAG,sBACtC,+BAAK4iF,UAAU,+BAA+B5iF,GAAG,oBAAoB0pX,YAAU,oBAC5EloR,EAActzD,OAEjB,+BAAK00C,UAAU,sBAAf,KACA,+BAAKA,UAAU,4BACb,6BAAG5iF,GAAG,oBACHwhG,EAAclnF,OAGnB,+BAAKsoE,UAAU,8EAA8EkyF,QAjBxE,WACzB3kL,OAAOkwD,kBAAmB,EAC1BkhD,EAAqB,CAACz4C,UAAU,EAAOlX,MAAO,SAgBxC,+BAAKgxC,UAAU,iCACb,4CAAkB5iF,GAAI,gC,6FC3BlC,O,OACA,OACA,Q,IACA,S,IACA,S,8DAuCe,IAAA8jG,UARS,SAACxzG,GAAD,MAAY,CAClCoxG,UAAWpxG,EAAMs3D,cAAc85C,aAGN,GAIZ,EArCG,SAAC4B,GAAU,IACpB5B,EAAa4B,EAAb5B,UADoB,GAEa,IAAAy3C,UAAS,MAFtB,qBAEpBsvS,EAFoB,KAENC,EAFM,KAoB3B,OAhBA,IAAA/uU,YAAU,WACR,OAAQjY,EAAUyuH,aAChB,KAAK,EAAAp6K,6BAA6BxhB,OAChCm0Z,EAAgB,yCAChB,MAEF,KAAK,EAAA3yY,6BAA6BC,GAChC0yY,EAAgB,yCAChB,MAEF,QACEA,EAAgB,OAGnB,CAAChnV,IAGF,+BAAK9e,UAAW,wBAA0B8e,EAAU54C,SAAW,GAAK,WAEhE2/X,O,8EC7BR,I,IAAA,MACA,OACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,OACA,QACA,QACA,Q,IACA,S,mDAEA,IAqCMngQ,EAAqB,CACzB7mF,oCACAhtC,8CACA8nD,wCACAI,wCACAha,wCACA5vC,+B,WAIa,IAAA+wC,UAlBS,SAACxzG,GAAD,MAAY,CAClCoxG,UAAWpxG,EAAMs3D,cAAc85C,UAC/B8a,YAAalsH,EAAMyV,UAAUy2G,YAC7BI,gBAAiBtsH,EAAMyV,UAAU62G,gBACjCha,uBAAwBtyG,EAAMyV,UAAU68F,uBACxCxuC,kBAAmB9jE,EAAM0zG,UAAU5vC,qBAaGk0H,EAAzB,EA/CO,SAAChlF,GAAU,IACxB7B,EAAoB6B,EAApB7B,iBAMP,OACE,+BAAK7e,UAAU,gCACb,+BAAKA,UAAU,IACb,kCAAQA,UAAU,gBACVkyF,QAAS,WAPrBrzE,EAAkB,CAAC34C,UAAU,EAAOqnK,YAAa,WAU/C,+BAAKvtI,UAAU,qBACb,yCAEF,+BAAKA,UAAU,oBACb,+BAAKA,UAAW,qBACZ,UAAO/pF,YAAc,wCAAmB,MACvC,IAAAm+I,UAAoD,KAAzC,wCACd,wCACA,+C,yHCnCV,I,IAAA,MACA,OACA,O,IAEA,OACA,Q,mDAEO,IAAM2xS,EAAmCA,EAAnCA,iCAAmC,SAACrlV,GAAU,IAClDtwC,EAA6BswC,EAA7BtwC,WAAYD,EAAiBuwC,EAAjBvwC,cAEnB,OACE,mCAAQ6vB,UAAW,wCACXkyF,QAAS,kBAAM/hH,GAAeC,KACpC,4CAAkBhzD,GAAG,mBAerBsoL,EAAqB,CACzBv1H,+B,WAGa,IAAAgtF,aACb,IAAAj8C,UAfsB,SAACxzG,GAGvB,MAAO,CACLmI,SAHiBnI,EAAMgR,YAAlB7I,SAILu6D,WAHmB1iE,EAAM0zG,UAApBhxC,WAILwpD,YAAalsH,EAAMyV,UAAUy2G,YAC7BxgH,YAAa1L,EAAMgR,YAAYtF,eAQRssL,EAAzB,CAA6CqgQ,K,sJCjC/C,MACA,OACA,O,IAEA,O,IACA,OACA,Q,IACA,OACA,QACA,Q,IACA,Q,mDAEO,IAAMA,EAAmCA,EAAnCA,iCAAmC,SAACrlV,GAAU,IAGnD,EAFCtnG,EAAyBsnG,EAAzBtnG,YAAavD,EAAY6qG,EAAZ7qG,SAEdmwb,GAAA,gCAAuB,4FACvB,UAAUlhS,QAAU,UAAUA,OAAOmhS,WACjCC,EAAe,UAAUphS,OAAOmhS,SAASE,WAAWhhW,UAAU,eAC9DyrJ,EAAOpiP,SAAS8oD,cAAc,MAC/BnoD,KAAO+2b,EACZt1M,EAAKvrJ,SAAW,YAChB72F,SAAS6C,KAAKkmD,YAAYq5L,GAC1BA,EAAKtrJ,QACL92F,SAAS6C,KAAKqmD,YAAYk5L,IARD,kDAAvB,4CAWAw1M,EAAsBvwb,EAAW,CAAEmlV,WAAY,OAAQv+F,UAAW,OAAS,CAAEu+F,WAAY,MAAOv+F,UAAW,OAEjH,OACE,mCAAQz8J,UAAW,wCACX88M,UACE,mCAASrzR,MAAO28a,GACd,0CAAgBvlV,MAAQ,UAAaznG,GAAa6wH,WAGtDioD,QAAS,kBAAM8zQ,MAEnBnwb,EAAW,GAAK,4CAAkBuH,GAAG,oCAcvCsoL,EAAqB,CACzB/rE,wCACA9a,oCACA0a,kDACAQ,yC,WAGa,IAAAojC,aACb,IAAAj8C,UAhBsB,SAACxzG,GAEvB,MAAO,CACLmI,SAFiBnI,EAAMgR,YAAlB7I,SAGL+jH,YAAalsH,EAAMyV,UAAUy2G,YAC7BxgH,YAAa1L,EAAMgR,YAAYtF,eAWRssL,EAAzB,CAA6CqgQ,K,8EC3D/C,I,EAAA,OACA,O,+CA8Ce,IAAA7kV,UATS,SAACxzG,GAAD,MAAY,CAClCmI,SAAUnI,EAAMgR,YAAY7I,SAC5B+jH,YAAalsH,EAAMyV,UAAUy2G,eAGJ,GAIZ,EA5CiB,SAAClZ,GAAU,IAClCkZ,EAAyBlZ,EAAzBkZ,YAAa/jH,EAAY6qG,EAAZ7qG,SAepB,OAbA,IAAAkhH,YAAU,WACR,IAAM4sR,EAASn1Y,SAAS8oD,cAAc,UAOtC,OANAqsV,EAAOxvY,IAAM,+EACbwvY,EAAOnjY,KAAO,SACdmjY,EAAOqnC,OAAQ,EAEfx8a,SAAS6C,KAAKkmD,YAAYosV,GAEnB,WACLn1Y,SAAS6C,KAAKqmD,YAAYisV,MAE3B,IAEE/pR,EAIE,+BAAK55B,UAAW,WACrB,wCAAc5iF,GAAG,eACHjJ,IAAKylH,EAELxmE,GAAG,GAEHizY,kBAAgB,GAChBC,eAAa,iBACb78a,MAAO,CAACqnB,SAAS,WAAY/7B,MAAO,OAAQE,OAAQY,EAAW,OAAX,qBACpDyzM,IAAI,MAZX,S,8ECpBX,W,OACA,O,IAEA,S,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,OAEA,Q,IACA,S,IACA,S,8DAsGe,IAAApoG,UATS,SAACxzG,GAAD,MAAY,CAClCksH,YAAalsH,EAAMyV,UAAUy2G,YAC7B/jH,SAAUnI,EAAMgR,YAAY7I,YAGH,GAIZ,EAlGa,SAAC6qG,GAAU,IAC9BkZ,EAAyBlZ,EAAzBkZ,YAAa/jH,EAAY6qG,EAAZ7qG,SACd0wb,GAAY,IAAAlxS,QAAO,MACnBmxS,GAAY,IAAAnxS,QAAO,MAqEzB,OAhEA,IAAAt+B,YAAU,WACR,GAAI6C,GAAe2sU,EAAU38U,UAAY48U,EAAU58U,QAAS,CAC1D,IAAIk7C,SACJ,OAAQ,UAAWnzH,OAAOmqB,WACxB,KAAK,EAAAzI,qBAAqBC,YAExBwxG,EAAS,IAAI,EAAJ,QAAyByhS,EAAU38U,QAASgQ,EAVtC,GAUmE/jH,GAClF,MACF,KAAK,EAAAw9C,qBAAqBE,eAC1B,QAEEuxG,EAAS,IAAI,EAAJ,QAA2ByhS,EAAU38U,QAASgQ,EAfxC,GAeqE/jH,GAIxF2wb,EAAU58U,QAAUk7C,EACpB,UAAUA,OAASA,EAenB,IAAMy7F,EAAe,WACnBz7F,EAAO2hS,eAAel5b,OAAOwqD,WAAYxqD,OAAO+xD,cAWlD,OAHA/xD,OAAO0uD,iBAAiB,SAAUskM,GAClCA,IAEO,WAELz7F,EAAOu0J,OAEPv0J,EAAO4hS,UACPF,EAAU58U,QAAU,KACpB,UAAUk7C,OAAS,KAOnBv3J,OAAO+qG,oBAAoB,SAAUioJ,GACrC,UAAUz7F,OAAS,SAKtB,CAACyhS,EAAW3sU,IAGb,wCACE,+BAAK55B,UAAW,yBACZ,UAAO/pF,YAAc,mCACnB0wb,eAxEa,GAyEb9rH,SAxEgB,EAyEhB18C,SAxEgB,MAyEhB,GACF,UAAOloR,YAAc,wCAAkB,GACvC,UAAOA,YAAc,mCAAgBuwb,UAAWA,IAAgB,GAClE,yCAEF,kCAAQxmW,UAAU,yBAAyBo1D,IAAKmxS,S,6FCpGtD,O,WACA,Q,6DAE6B,SAAC,GAAyC,IAAvCtmN,EAAuC,EAAvCA,aAAc46F,EAAyB,EAAzBA,SAAU18C,EAAe,EAAfA,SAAe,GACnC,IAAA5nI,UAAS0pF,GAD0B,qBAC9D2mN,EAD8D,KACnDC,EADmD,KAUrE,OACE,iCACErmb,KAAK,QACLwvH,IAAK6qM,EACL5qM,IAAKkuJ,EACL7xR,MAAOs6b,EACP17N,SAbiB,SAAC3/N,GACpB,IAAMu7b,EAAeppb,OAAOnS,EAAEugB,OAAOxf,OACrCc,QAAQ4B,IAAI,YAAa83b,GACzBD,EAAaC,GACb,UAAUhiS,OAAOiiS,qBAAqBD,IAUpC9mW,UAAU,sB,8ECpBhB,I,EAAA,O,8CAEuB,SAAC,GAAkB,IAAhBwmW,EAAgB,EAAhBA,UAClBQ,EAAuB,SAACxmb,GACxBgmb,EAAU58U,SACZ48U,EAAU58U,QAAQq9U,oBAAoBzmb,IAI1C,OACE,+BAAKw/E,UAAW,kBACd,qCACE,iCACEx/E,KAAK,QACL3U,KAAK,eACLS,MAAM,aACN4+N,SAAU,SAAA3/N,GAAA,OAAKy7b,EAAqBz7b,EAAEugB,OAAOxf,UALjD,gBASA,qCACE,iCACEkU,KAAK,QACL3U,KAAK,eACLS,MAAM,cACN46b,gBAAA,EACAh8N,SAAU,SAAA3/N,GAAA,OAAKy7b,EAAqBz7b,EAAEugB,OAAOxf,UANjD,mB,4HCpBM66b,E,wJAAZ,OACA,UACA,U,IAEA,MACA,Q,IACA,QACA,U,IACA,SACA,U,uDAMMC,E,WAYJ,WAAYltY,EAAQmtY,EAAQC,EAAgBzxb,GAAU,sCAXtD0xb,QAAU,KAW4C,KAVtDC,iBAAmB,KAUmC,KATtDF,eAAiB,GASqC,KARtDG,WAAa,MAQyC,KAPtDC,OAAS,KAO6C,KANtD/+C,KAAO,KAM+C,KALtD9yY,UAAW,EAK2C,KAJtD8xb,YAAc,KAIwC,KAHtDC,aAAe,KAGuC,KAFtDC,WAAa,KAEyC,KAyGtDC,iBAzGsD,6BAyGpC,qGACVtiH,EAAsB,EAAAC,oBAAoBC,6BAC1Cy3G,EAAS,IAAI,EAAJ,WAET4K,EAAqBviH,EAAoBtoU,IAApB,+CAAwB,WAAO8qb,GAAP,sGAEtB,UAAYC,eAAeD,EAAoB,IAFzB,QAEzCzhZ,EAFyC,QAKhC+rM,MACb6qM,EAAO33S,KAAKj/F,EAAW+rM,OAAO,SAACq2J,GAG7BA,EAAKn/W,MAAMsH,SAAShkB,IAClB,EACAk7a,EAAmBv4a,EAAI,EAAKg4a,WAC5B,GAQE,EAAKj+Z,OACP,EAAKA,MAAMj4B,IAAIo3Y,EAAKn/W,cAErB4+B,GAAW,SAAC/6D,GACbD,QAAQC,MAAR,2CAAyDk5C,EAAW+rM,MAApE,IAA8EjlP,MAGhFD,QAAQ4B,IAAR,sCAAkDg5b,GA3BL,gDA8B/C56b,QAAQC,MAAR,8CAA4D26b,EAA5D,MA9B+C,sDAAxB,uDAJX,SAsCHx8b,QAAQ64I,IAAI0jT,GAtCT,qFAzGoC,KAkJtDG,WAlJsD,6BAkJ1C,qGACJviH,EAAgB,EAAAC,cAAcC,uBAC9Bs3G,EAAS,IAAI,EAAJ,WAETgL,EAAexiH,EAAczoU,IAAd,+CAAkB,WAAOkrb,GAAP,sGAEhB,UAAYC,QAAQD,EAAc,IAFlB,QAE7Bz9Y,EAF6B,QAK1B2nM,MACP6qM,EAAO33S,KAAK76F,EAAK2nM,OAAO,SAACq2J,GAGvBA,EAAKn/W,MAAMsH,SAAShkB,IAClB,EACA,EAAI,EAAK26a,WACT,GAQE,EAAKj+Z,OACP,EAAKA,MAAMj4B,IAAIo3Y,EAAKn/W,cAErB4+B,GAAW,SAAC/6D,GACbD,QAAQC,MAAR,qCAAmDs9C,EAAK2nM,MAAxD,IAAkEjlP,MAGpED,QAAQ4B,IAAR,gCAA4Co5b,GA3BX,gDA8BnCh7b,QAAQC,MAAR,wCAAsD+6b,EAAtD,MA9BmC,sDAAlB,uDAJX,SAsCG58b,QAAQ64I,IAAI8jT,GAtCf,qFAjJV/yb,KAAK8kD,OAASA,EACd9kD,KAAKiyb,OAASA,EACdjyb,KAAKkyb,eAAiBA,EACtBlyb,KAAKS,SAAWA,EAGhBT,KAAKkzb,YACLlzb,KAAKuyb,YAAc,IAAI,EAAJ,QAAgBvyb,KAAKo0B,MAAOp0B,KAAKqyb,YAEpDj8b,QAAQ64I,IAAI,CAACjvI,KAAK0yb,kBAAmB1yb,KAAKmzb,iBAAkBnzb,KAAK8yb,cAAcjha,MAAK,e,yDAMpF7xB,KAAKo0B,MAAQ,IAAI29Z,EAAMqB,MAGvBpzb,KAAKo0B,MAAM42X,WAAa,IAAI+mC,EAAM1uF,MAAM,UAExCrjW,KAAKqzb,OAAS,IAAItB,EAAMuB,kBAAkB,GAAItzb,KAAK8kD,OAAO+sD,YAAc7xG,KAAK8kD,OAAOgtD,aAAc,GAAK,KACvG9xG,KAAKqzb,OAAO33Z,SAAShkB,IAAI,EAAG,EAAG,GAE/B1X,KAAK6wb,SAAW,IAAIkB,EAAMwB,cAAc,CACtCzuY,OAAQ9kD,KAAK8kD,OACb0uY,WAAW,EACXC,uBAAuB,EACvBC,gBAAiB,qBAEnB1zb,KAAK6wb,SAASvhN,QAAQtvO,KAAK8kD,OAAO+sD,YAAa7xG,KAAK8kD,OAAOgtD,cAE3D9xG,KAAK6wb,SAAS8C,cAAcx7b,OAAOy7b,kBAEnC5zb,KAAK6wb,SAASgD,iBAAmB9B,EAAM+B,eACvC9zb,KAAK6wb,SAASkD,iBAAkB,EAChC/zb,KAAK6wb,SAASmD,YAAcjC,EAAMkC,sBAClCj0b,KAAK6wb,SAASqD,oBAAsB,EACpCl0b,KAAK6wb,SAASsD,UAAUxgU,SAAU,EAClC3zH,KAAK6wb,SAASsD,UAAUC,YAAa,EACrCp0b,KAAK6wb,SAASsD,UAAU/ob,KAAO2mb,EAAMsC,aACrCr0b,KAAK6wb,SAASyD,aAAc,EAC5Bt0b,KAAK6wb,SAAS0D,YAAc,IAE5Bv0b,KAAKqlD,SAAW,IAAI,EAAJ,cAAkBrlD,KAAKqzb,OAAQrzb,KAAK6wb,SAASE,YAC7D/wb,KAAKqlD,SAAS3uC,OAAOgB,IAAI,EAAG,EAAG,GAC/B1X,KAAKqlD,SAASs8T,SACd3hX,KAAKqlD,SAASmvY,eAAgB,EAC9Bx0b,KAAKqlD,SAASovY,cAAgB,GAC9Bz0b,KAAKqlD,SAASqvY,oBAAqB,EACnC10b,KAAKqlD,SAASswB,YAAc,GAC5B31E,KAAKqlD,SAASsvY,YAAc,KAE5B,IAAAC,YAAW50b,KAAKo0B,MAAOp0B,KAAK6wb,SAAU,EAAAgE,eAAeC,mBAQrD90b,KAAKwtF,Y,yCAGYunW,EAAOC,GACxB,IAIMjzY,EAAQizY,GAJF,IAAIjD,EAAMkD,MAAOC,cAAcH,GAC1Bj4R,QAAQ,IAAIi1R,EAAMoD,SACR/6a,EAI3B26a,EAAMhzY,MAAMrqC,IAAIqqC,EAAOA,EAAOA,K,0DAGIgzY,GAClCA,EAAMhzY,MAAMrqC,IAAI1X,KAAKqyb,WAAYryb,KAAKqyb,WAAYryb,KAAKqyb,c,uCAGxC,WAGT+C,EADmB,EAAA14M,YAAYyzF,2BACCroU,KAAI,SAAC4zB,GACzC,OAAO,EAAK62Z,YAAY8C,UAAU35Z,MAGpC,OAAOtlC,QAAQk/b,WAAWF,GAAcvja,MAAK,SAACykD,GAC5C,IAAMi/W,EAASj/W,EAAQtvE,QAAO,SAAA1R,GAAA,MAA4B,cAAlBA,EAAO6uS,QAA2C,OAAjB7uS,EAAO4B,SAAgB4Q,KAAI,SAAAxS,GAAA,OAAUA,EAAO4B,SAC/Gs+b,EAAW,EAAKC,mBAAmBF,GACzC,EAAK/C,aAAegD,EAAS1rY,UAAU,IAAIioY,EAAMoD,SACjD,EAAK1C,WAAa+C,EAAS14R,QAAQ,IAAIi1R,EAAMoD,SAAW1gc,SAExD,EAAKihc,8BAA8B,EAAKlD,aAAc,EAAKC,YACvD,EAAKr+Z,OACP,EAAKuha,YAAY,EAAKnD,cAGxB,UAAMvua,UAAS,IAAA4E,gBAAe,CAAEvF,WAAY,KAC5CorE,YAAW,WACT,UAAMzqE,UAAS,IAAA4E,gBAAe,CAAE0H,SAAS,OACxC,QACF8B,OAAM,SAAAp6B,GACPD,QAAQ4B,IAAI,6BAA8B3B,Q,yCAsF3Bs9b,GACjB,IAAMC,EAAW,IAAIzD,EAAMkD,KAO3B,OANAM,EAAOn3b,SAAQ,SAAA22b,GACTA,aAAiBhD,EAAM6D,UACzBJ,EAASK,eAAed,MAIrBS,I,oDAGqBxjZ,EAAQ1uC,GACpCtD,KAAKqlD,SAASvoB,QACd98B,KAAKqlD,SAAS3uC,OAAOo/a,KAAK9jZ,GAC1BhyC,KAAKqlD,SAASsvY,YAAqB,GAAPrxb,EAE5BtD,KAAKqzb,OAAO33Z,SAASo6Z,KAAK9jZ,EAAO+Y,QAAQ5uD,IAAI,IAAI41b,EAAMoD,QAAQ7xb,EAAMA,EAAO,EAAU,EAAPA,KAC/EtD,KAAKqzb,OAAO0C,KAAOzyb,EAAO,IAC1BtD,KAAKqzb,OAAO2C,IAAa,IAAP1yb,EAClBtD,KAAKqzb,OAAO4C,OAAOjkZ,GACnBhyC,KAAKqzb,OAAO6C,2B,uCAoBG3iD,GA8Bf,OA7BAA,EAAKn/W,MAAMosH,SAASpiJ,SAAQ,SAAA+7E,GAEtBA,EAAQg8W,SACVh8W,EAAQqmE,SAASpiJ,SAAQ,SAAA+7N,GACvBA,EAAMi8N,eAAgB,KAExBj8W,EAAQk8W,YAAa,EACrBl8W,EAAQi8W,eAAgB,EACxBj8W,EAAQ5pD,SAAU,GAEhB4pD,EAAQm8W,SACVn8W,EAAQqmE,SAASpiJ,SAAQ,SAAAjI,GAEnBgkF,EAAQg8W,SACVh8W,EAAQk8W,YAAa,EACrBl8W,EAAQi8W,eAAgB,GAEtBj8W,EAAQo8W,UACVp8W,EAAQ5pD,SAAU,MAIpB4pD,EAAQo8W,UACVp8W,EAAQq3W,WAAa,IACrBx5b,QAAQ4B,IAAIugF,GACZA,EAAQ5pD,SAAU,MAIfgjX,I,+BAGAijD,GAAW,WAMZC,EAAmBz2b,KAAKkyb,eAG9Bl6b,QAAQ4B,IAAR,wBAAoCoG,KAAKkyb,gBACzCl6b,QAAQ4B,IAAR,qBAAiC68b,GAEV,CAErB,CAAEr8a,EAAG,EAAGC,EAAGq8a,KAAgBvlH,EAAG,GAC9B,CAAE/2T,EAAG,EAAGC,EAAGq8a,EAAgBvlH,EAAG,GAG9B,CAAE/2T,EAfgB,IAeAC,EAdD,IAcgB82T,EAff,KAgBlB,CAAE/2T,GAhBgB,IAgBCC,EAfF,IAeiB82T,EAhBhB,KAiBlB,CAAE/2T,EAjBgB,IAiBAC,EAhBD,IAgBgB82T,GAjBf,KAkBlB,CAAE/2T,GAlBgB,IAkBCC,EAjBF,IAiBiB82T,GAlBhB,KAqBlB,CAAE/2T,EArBgB,IAqBAC,GApBD,IAoBiB82T,EArBhB,KAsBlB,CAAE/2T,GAtBgB,IAsBCC,GArBF,IAqBkB82T,EAtBjB,KAuBlB,CAAE/2T,EAvBgB,IAuBAC,GAtBD,IAsBiB82T,GAvBhB,KAwBlB,CAAE/2T,GAxBgB,IAwBCC,GAvBF,IAuBkB82T,GAxBjB,MA4BL/yU,SAAQ,SAAAkpD,GACrB,IAAIqtE,EAAQ,IAAIo9T,EAAM4E,WAAW,SAAUF,EAAkB,EAAG,GAChE9hU,EAAMj5F,SAAShkB,IAAI8+a,EAAUp8a,EAAIktC,EAAIltC,EAAGo8a,EAAUn8a,EAAIitC,EAAIjtC,EAAGm8a,EAAUrlH,EAAI7pR,EAAI6pR,GAC/Ex8M,EAAM0hU,YAAa,EACnB,EAAKjia,MAAMj4B,IAAIw4H,MAKjB,IAAMiiU,EAAe,IAAI7E,EAAM8E,aAAa,SAAU,IACtD72b,KAAKo0B,MAAMj4B,IAAIy6b,GAEf,IAAME,EAAmB,IAAI/E,EAAMgF,iBAAiB,SAAU,IAC9DD,EAAiBp7Z,SAAShkB,IAAI8+a,EAAUp8a,EAAGo8a,EAAUn8a,EAAGm8a,EAAUrlH,EAAI,IACtE2lH,EAAiBT,YAAa,EAC9Br2b,KAAKo0B,MAAMj4B,IAAI26b,K,iCAGNN,GACTx2b,KAAK6wb,SAASqD,oBAAsB,GACpCl0b,KAAKkyb,eAAiB,IACtBlyb,KAAKg3b,SAASR,K,kCAEJA,GACVx2b,KAAK6wb,SAASqD,oBAAsB,EACpCl0b,KAAKkyb,eAAiB,GAEtBlyb,KAAKg3b,SAASR,K,0CAGIprb,GAKlB,OAHApL,KAAKo0B,MAAMosH,SAAWxgJ,KAAKo0B,MAAMosH,SAASx5I,QAAO,SAAAmzN,GAAA,QAAWA,aAAiB43N,EAAMkF,UAG3E7rb,GACN,IAAK,aACHpL,KAAKk3b,WAAWl3b,KAAKwyb,cACrB,MACF,IAAK,cACHxyb,KAAK21b,YAAY31b,KAAKwyb,cACtB,MACF,QACEx6b,QAAQwvJ,KAAR,0BAAuCp8I,M,2CAKxBomb,GACnBxxb,KAAKkyb,eAAiBV,EACtBxxb,KAAKo0B,MAAMosH,SAASpiJ,SAAQ,SAAA+7N,GACtBA,aAAiB43N,EAAM4E,aAEzBx8N,EAAMq3N,UAAYA,Q,gCAMtBxxb,KAAKoyb,iBAAmB/jW,sBAAsBruF,KAAKwtF,QAAQ/1F,KAAKuI,OAChEA,KAAKqlD,SAASs8T,SACd3hX,KAAK6wb,SAAS52X,OAAOj6D,KAAKo0B,MAAOp0B,KAAKqzb,U,6BAIlCrzb,KAAKoyb,kBACP+E,qBAAqBn3b,KAAKoyb,oB,gCAM5Bpyb,KAAKikT,OAILjkT,KAAK6wb,SAASS,UACdtxb,KAAKqlD,SAASisY,UAUdtxb,KAAKo0B,MAAQ,KACbp0B,KAAKqzb,OAAS,KACdrzb,KAAK6wb,SAAW,KAChB7wb,KAAKqlD,SAAW,KAChBrlD,KAAK8kD,OAAS,O,6LAgBd9kD,KAAKqzb,OAAOzub,OAAS5E,KAAK8kD,OAAO+sD,YAAc7xG,KAAK8kD,OAAOgtD,aAC3D9xG,KAAKqzb,OAAO6C,yBACZl2b,KAAK6wb,SAASvhN,QAAQtvO,KAAK8kD,OAAO+sD,YAAa7xG,KAAK8kD,OAAOgtD,kB,eA6ChDkgV,G,4HCxdHD,E,wJAAZ,OACA,U,IACA,QACA,S,uDAEMqF,E,WACJ,WAAYhja,EAAOi+Z,IAAY,qBAC7Bryb,KAAKo0B,MAAQA,EACbp0B,KAAKqyb,WAAaA,EAClBryb,KAAK+nb,OAAS,IAAI,EAAJ,W,wGAGAruE,G,yFACTA,EAAYtiW,I,uBACfpf,QAAQ4B,IAAR,2BAAuC8/W,EAAYpzW,Q,kBAC5ClQ,QAAQC,QAAR,2BAA2CqjX,EAAYpzW,S,UAG5D+wb,EAAY39E,EAAYtiW,KAExBsiW,EAAY49E,cAAgB59E,EAAY49E,eAAiB59E,EAAY/5W,M,0CAE1CK,KAAKu3b,uBAAuB79E,G,QAAnD89E,E,SACkBA,EAAet6M,QACnCm6M,EAAYG,EAAet6M,O,kDAG7BllP,QAAQC,MAAR,4CAA0DyhX,EAAYpzW,OAAtE,M,iCAIG,IAAIlQ,SAAQ,SAACC,EAAS48L,GAC3B,QAAK80P,OAAO33S,KAAKinT,GAAjB,gCAA4B,WAAO9jD,GAAP,gFACpBkkD,EAAelkD,EAAKn/W,MAE1Bm/W,EAAKn/W,MAAMsH,SAAShkB,IAClBgiW,EAAYt/V,EAAI,EAAKi4a,WACrB34E,EAAYr/V,EAAI,EAAKg4a,WACrB34E,EAAYvoC,EAAI,EAAKkhH,YAEvB9+C,EAAKn/W,MAAMsja,SAASr9a,EAAI03a,EAAM4F,UAAUC,SAASl+E,EAAYg+E,UAE7D,EAAKtja,MAAMj4B,IAAIs7b,IAGX/9E,EAAY/nC,aAbU,gCAclB,EAAKkmH,aAAan+E,EAAY/nC,aAAc8lH,GAd1B,YAkBtB/9E,EAAY18T,SAAW08T,EAAY18T,QAAQvoD,OAAS,GAlB9B,kCAmBlB,EAAKqjc,YAAYp+E,EAAa+9E,GAnBZ,QAsB1Bphc,EAAQohc,GAtBkB,8CAA5B,2BAAAz3b,KAAA,kBAuBGgzD,GAAW,SAAC/6D,GACbD,QAAQC,MAAR,gCAA8Co/b,EAA9C,IAA4Dp/b,GAC5Dg7L,EAAOh7L,U,8KAKM8/b,EAAa3ja,G,2GACvB,IAAIh+B,SAAQ,SAACC,EAAS48L,GAC3B,EAAK80P,OAAO33S,KAAK2nT,GAAa,SAACC,GAC7B5ja,EAAM6ja,UAAS,SAAC99N,GACd,GAAIA,EAAMg8N,OAAQ,CAChB,IAAM+B,EAAeF,EAAa5ja,MAAM+ja,oBAAoB,OAAQ,QAChED,IACF/9N,EAAM5sN,SAAW2qb,EAAa3qb,cAIpClX,WACC28D,GAAW,SAAC/6D,GACbD,QAAQC,MAAR,mCAAiD8/b,EAAjD,IAAiE9/b,GACjEg7L,EAAOh7L,U,qKAKKyhX,EAAa+9E,G,sFACvBW,EAAgB,GAChBC,EAAc,GAGpBZ,EAAaQ,UAAS,SAACtgc,GACjBA,EAAOlB,MAAQkB,EAAOlB,KAAK0D,SAAS,WACtCi+b,EAAcrjc,KAAK4C,GACVA,EAAOlB,MAAQkB,EAAOlB,KAAK0D,SAAS,UAC7Ck+b,EAAYtjc,KAAK4C,MAIQ,IAAzBygc,EAAc3jc,QAAuC,IAAvB4jc,EAAY5jc,O,uBAC5CuL,KAAKs4b,YACLtgc,QAAQ4B,IAAR,2C,8CAKwB8/W,EAAY18T,S,iDAA3Bu7Y,E,YACL7+E,EAAY18T,QAAQpoD,eAAe2jc,KAClC7+E,EAAY18T,QAAQu7Y,GAAallH,Y,wBAE9Bv7R,EAAS4hU,EAAY18T,QAAQu7Y,G,UAG7Bv4b,KAAKw4b,WAAW1gZ,EAAQsgZ,EAAeC,EAAaZ,G,4LAK/C3/Y,EAAQsgZ,EAAeC,EAAaZ,G,2GAC5C,IAAIrhc,SAAQ,SAACC,EAAS48L,GAC3B,EAAK80P,OAAO33S,KAAKt4F,EAAOu7R,aAAa,SAAColH,GACpC,IAAKA,IAAeA,EAAWrka,MAG7B,OAFAp8B,QAAQC,MAAR,gCAA8C6/C,EAAOu7R,kBACrDpgJ,EAAO,IAAIvjE,MAAM,yBAMnB,IAFA,IAAM8wB,EAAWi4S,EAAWrka,MAAMosH,SAEzBjsJ,EAAI,EAAGA,EAAIisJ,EAAS/rJ,OAAQF,IAAK,CACxC,IAAM4lO,EAAQ35E,EAASjsJ,GAEvB,GAAI4lO,EAAMg8N,OAAQ,CAEhB,GAAIh8N,EAAM1jO,KAAK0D,SAAS,OAAQ,4BAC9B,YAAqBi+b,EAArB,+CAAoC,KAAzBM,EAAyB,QAClC,EAAKC,mBAAmBx+N,EAAOriL,EAAQ4gZ,EAAQjB,IAFnB,8EAOhC,GAAIt9N,EAAM1jO,KAAK0D,SAAS,OAAQ,4BAC9B,YAAmBk+b,EAAnB,+CAAgC,KAArBO,EAAqB,QAC9B,EAAKD,mBAAmBx+N,EAAOriL,EAAQ8gZ,EAAMnB,IAFjB,gFAQpCphc,EAAQoic,EAAWrka,cAClB4+B,GAAW,SAAC/6D,GACbD,QAAQC,MAAR,iCAA+C6/C,EAAOu7R,YAAtD,IAAsEp7U,GACtEg7L,EAAOh7L,U,sIAMD4gc,EAAY/gZ,EAAQghZ,EAAiBrB,GAC/C,IAAMsB,EAAiBD,EAAgBp9Z,SAASqvB,QAC1CiuY,EAAiBF,EAAgBpB,SAAS3sY,QAC1CkuY,EAAkBxB,EAAa/7Z,SAASqvB,QAExCmuY,GAAsB,IAAInH,EAAMoD,SAAUgE,WAC9CF,EACA,IAAIlH,EAAMoD,QACR4D,EAAe3+a,EACf2+a,EAAe1+a,EACf0+a,EAAe5nH,IAGbioH,EAAcP,EAAW9tY,QAC/BquY,EAAY19Z,SAASo6Z,KAAKoD,GAC1BE,EAAY1B,SAAS5B,KAAKkD,GAE1Bh5b,KAAKo0B,MAAMj4B,IAAIi9b,K,yCAGEP,EAAY/gZ,EAAQghZ,GACrC,IAAMM,EAAcP,EAAW9tY,QAE/B+tY,EAAgB38b,IAAIi9b,K,gFAGO19Z,G,0EACvBA,EAAS0lI,cAAgB,EAAAo9G,cAAc3nO,U,gCAC5B,UAAYwiZ,wBAAwB39Z,EAAU,I,+DAE9C,UAAY49Z,kBAAkB59Z,EAAU,I,kLAInC4+B,EAAOxqD,GAC3B,IAAMvC,EAAW,IAAIwkb,EAAMwH,kBAAkB,CAAE9tV,MAAO,WAChDxlD,EAAS,GACfA,EAAOlxD,KAAK,IAAIg9b,EAAMoD,QAAQ76X,EAAMlgD,EAAGkgD,EAAMjgD,EAAGigD,EAAM62Q,IACtDlrR,EAAOlxD,KAAK,IAAIg9b,EAAMoD,QAAQrlb,EAAIsK,EAAGtK,EAAIuK,EAAGvK,EAAIqhU,IAEhD,IAAMqoH,GAAW,IAAIzH,EAAM0H,gBAAiBC,cAAczzY,GACpD8I,EAAO,IAAIgjY,EAAM4H,KAAKH,EAAUjsb,GAEtCvN,KAAKo0B,MAAMj4B,IAAI4yD,K,kCAIf,IAAM6qY,EAAY,GAClB55b,KAAKo0B,MAAM6ja,UAAS,SAACtgc,GACnBiic,EAAU7kc,KAAK4C,MAGjBK,QAAQ4B,IAAIggc,O,eAIDxC,G,wGCvMCxC,WAAT,SAAoBxga,EAAOy8Z,GAAwD,IAA9CgJ,EAA8C,uDAAlChF,EAAeC,kBAI/DgF,EAAS,kFAEf,GAAID,IAAchF,EAAekF,IAAK,CACpC,IAAMC,EAAa,IAAI,EAAJ,WAEnBA,EAAW5pT,KAAK0pT,GAAQ,SAACzvK,GACvBA,EAAQi+I,QAAUypB,EAAMkI,iCAGxB7la,EAAM8la,YAAc7vK,EAEpBj2P,EAAM8la,YAAYC,aAAc,UAG7B,GAAIN,IAAchF,EAAeuF,eAAgB,CACtD,IAAMA,EAAiB,IAAIrI,EAAMsI,eAAexJ,GAChDuJ,EAAeE,+BAEf,IAAMN,EAAa,IAAI,EAAJ,WACnBA,EAAW5pT,KAAK0pT,GAAQ,SAACS,GACrB,IAAMjI,EAAS8H,EAAeI,oBAAoBD,GAAYlwK,QAC9Dj2P,EAAM8la,YAAc5H,EAEpBl+Z,EAAMqma,qBAAuB,EAC7Brma,EAAM8la,YAAYC,aAAc,EAGhCI,EAAWjJ,UACX8I,EAAe9I,iBAEjBt+X,GACA,SAAC/6D,GACCD,QAAQC,MAAM,6CAA8CA,WAE3D,GAAI4hc,IAAchF,EAAeC,kBAAmB,CACzD,IAAMsF,EAAiB,IAAIrI,EAAMsI,eAAexJ,GAChDuJ,EAAeE,gCACf,iBAAgBlqT,KAAK0pT,GAAO,SAAUzvK,GACpC,IAAMqwK,EAAsBN,EAAeI,oBAAoBnwK,GACzDswK,EAAYD,EAAsBA,EAAoBrwK,QAAU,KACtEj2P,EAAM8la,YAAcS,EAEpBvma,EAAMqma,qBAAuB,EAC7Brma,EAAM8la,YAAYC,aAAc,OAzDtC,IAAYpI,E,wJAAZ,OACA,UACA,UAEO,IAAM8C,EAAiBA,EAAjBA,eAAiB,CAC5BkF,IAAK,MACLK,eAAgB,iBAChBtF,kBAAmB,sB,uGCPT/C,E,wJAAZ,OACA,UACA,UACA,UACA,U,IACA,MACA,Q,uDAMM6I,E,WAQJ,WAAY91Y,EAAQmtY,EAAQC,EAAgBzxb,IAAU,0BAPtD0xb,QAAU,KAO4C,KANtDC,iBAAmB,KAMmC,KALtDF,eAAiB,IAKqC,KAJtDI,OAAS,KAI6C,KAHtD/+C,KAAO,KAG+C,KAFtD9yY,UAAW,EASTT,KAAK8kD,OAASA,EACd9kD,KAAKiyb,OAASA,EACdjyb,KAAKkyb,eAAiBA,EACtBlyb,KAAKS,SAAWA,EAKhBT,KAAK66b,cAEL76b,KAAK86b,e,2DAKL96b,KAAKo0B,MAAQ,IAAI29Z,EAAMqB,MAGvBpzb,KAAKo0B,MAAM42X,WAAa,IAAI+mC,EAAM1uF,MAAM,UAExCrjW,KAAKqzb,OAAS,IAAItB,EAAMuB,kBAAkB,GAAItzb,KAAK8kD,OAAO+sD,YAAc7xG,KAAK8kD,OAAOgtD,aAAc,GAAK,KACvG9xG,KAAKqzb,OAAO33Z,SAAShkB,IAAI,EAAG,EAAG,GAE/B1X,KAAK6wb,SAAW,IAAIkB,EAAMwB,cAAc,CAAEzuY,OAAQ9kD,KAAK8kD,OAAQ0uY,WAAW,EAAMC,uBAAuB,IACvGzzb,KAAK6wb,SAASvhN,QAAQtvO,KAAK8kD,OAAO+sD,YAAa7xG,KAAK8kD,OAAOgtD,cAE3D9xG,KAAK6wb,SAAS8C,cAAcx7b,OAAOy7b,kBAEnC5zb,KAAK6wb,SAASgD,iBAAmB9B,EAAM+B,eACvC9zb,KAAK6wb,SAASkD,iBAAkB,EAChC/zb,KAAK6wb,SAASmD,YAAcjC,EAAMkC,sBAClCj0b,KAAK6wb,SAASqD,oBAAsB,GACpCl0b,KAAK6wb,SAASsD,UAAUxgU,SAAU,EAClC3zH,KAAK6wb,SAASsD,UAAUC,YAAa,EACrCp0b,KAAK6wb,SAASsD,UAAU/ob,KAAO2mb,EAAMsC,aACrCr0b,KAAK6wb,SAASyD,aAAc,EAC5Bt0b,KAAK6wb,SAAS0D,YAAc,IAE5Bv0b,KAAKqlD,SAAW,IAAI,EAAJ,cAAkBrlD,KAAKqzb,OAAQrzb,KAAK6wb,SAASE,YAC7D/wb,KAAKqlD,SAAS3uC,OAAOgB,IAAI,EAAG,EAAG,GAC/B1X,KAAKqlD,SAASs8T,SACd3hX,KAAKqlD,SAASmvY,eAAgB,EAC9Bx0b,KAAKqlD,SAASovY,cAAgB,GAC9Bz0b,KAAKqlD,SAASqvY,oBAAqB,EACnC10b,KAAKqlD,SAASswB,YAAc,GAC5B31E,KAAKqlD,SAASsvY,YAAc,IAQ5B30b,KAAKwtF,Y,wCAaW,WACVu6V,EAAS,IAAI,EAAJ,UACTqS,EAAiB,IAAI,EAAJ,eAAmBp6b,KAAK6wb,UAC/CuJ,EAAeE,+BAEfvS,EAAO33S,KAAK,kCAAkC,SAACi6I,GAC7C,IAAMqwK,EAAsBN,EAAeI,oBAAoBnwK,GAC/D,EAAKioK,OAASoI,EAAoBrwK,QAElCA,EAAQinK,UACR8I,EAAe9I,UAGf,EAAKwJ,sBACJ9nY,GAAW,SAAC/6D,GACbD,QAAQC,MAAM,0BAA2BA,GACzC,EAAK6ic,oB,qCAIM,YACE,IAAI,EAAJ,YACR1qT,KACLpwI,KAAKiyb,QACL,SAAC1+C,GACC,EAAKA,KAAOA,EACZ,IAAMpqL,GAAM,IAAI4oO,EAAMkD,MAAOC,cAAc3hD,EAAKn/W,OAC1C9wB,EAAO6lN,EAAIrsD,QAAQ,IAAIi1R,EAAMoD,SAAW1gc,SACxCu9C,EAASm3K,EAAIr/J,UAAU,IAAIioY,EAAMoD,SAEvC,EAAK4F,WAAaz3b,EAAO,EAIrB,EAAK+hD,WACP,EAAKA,SAASvoB,QACd,EAAKuoB,SAASsvY,YAAqB,GAAPrxb,GAG1B,EAAK+vb,SACP,EAAKA,OAAO33Z,SAASo6Z,KAAK9jZ,GAC1B,EAAKqhZ,OAAO33Z,SAASthB,GAAK9W,EAC1B,EAAK+vb,OAAO33Z,SAASrhB,GAAK/W,EAAO,EAEjC,EAAK+vb,OAAO33Z,SAASy1S,IAAM,EAE3B,EAAKkiH,OAAO0C,KAAOzyb,EAAO,IAC1B,EAAK+vb,OAAO2C,IAAa,IAAP1yb,EAClB,EAAK+vb,OAAO6C,0BAGd3iD,EAAKn/W,MAAMsH,SAASthB,IAAM43B,EAAO53B,EACjCm5X,EAAKn/W,MAAMsH,SAASrhB,IAAM23B,EAAO33B,EACjCk5X,EAAKn/W,MAAMsH,SAASy1S,IAAMn/R,EAAOm/R,EAEjCoiE,EAAO,EAAKynD,iBAAiBznD,GAGzB,EAAKn/W,OACP,EAAK6ma,WAAW1nD,GAId,EAAK++C,QACP/+C,EAAKn/W,MAAM6ja,UAAS,SAAC99N,GACfA,EAAMg8N,SACRh8N,EAAM5sN,SAAS+kb,OAAS,EAAKA,OAC7Bn4N,EAAM5sN,SAAS2tb,gBAAkB,GACjC/gO,EAAM5sN,SAAS4sb,aAAc,MAInC,EAAK/la,MAAMj4B,IAAIo3Y,EAAKn/W,OACpBp8B,QAAQ4B,IAAI,mBAAoB25Y,EAAK4nD,QAAQ,IAC7C,EAAKtK,SAASsD,UAAUgG,aAAc,EAItC,UAAMl2a,UAAS,IAAA4E,gBAAe,CAACvF,WAAY,KAC3CorE,YAAW,WACT,UAAMzqE,UAAS,IAAA4E,gBAAe,CAAC0H,SAAS,OACvC,YAELyiC,GACA,SAAC/6D,GAAD,OAAWD,QAAQC,MAAMA,Q,uCAIZs7Y,GA8Bf,OA7BAA,EAAKn/W,MAAMosH,SAASpiJ,SAAQ,SAAA+7E,GAEtBA,EAAQg8W,SACVh8W,EAAQqmE,SAASpiJ,SAAQ,SAAA+7N,GACvBA,EAAMi8N,eAAgB,KAExBj8W,EAAQk8W,YAAa,EACrBl8W,EAAQi8W,eAAgB,EACxBj8W,EAAQ5pD,SAAU,GAEhB4pD,EAAQm8W,SACVn8W,EAAQqmE,SAASpiJ,SAAQ,SAAAjI,GAEnBgkF,EAAQg8W,SACVh8W,EAAQk8W,YAAa,EACrBl8W,EAAQi8W,eAAgB,GAEtBj8W,EAAQo8W,UACVp8W,EAAQ5pD,SAAU,MAIpB4pD,EAAQo8W,UACVp8W,EAAQq3W,WAAa,IACrBx5b,QAAQ4B,IAAIugF,GACZA,EAAQ5pD,SAAU,MAIfgjX,I,iCAGEA,GACT,IAAMpqL,GAAM,IAAI4oO,EAAMkD,MAAOC,cAAc3hD,EAAKn/W,OAC1Cgna,EAAUjyO,EAAIrsD,QAAQ,IAAIi1R,EAAMoD,SAChCqB,EAAYrtO,EAAIr/J,UAAU,IAAIioY,EAAMoD,SAC1CiG,EAAQC,eAAe,MACvB,IAAK,IAAIjhb,EAAIo8a,EAAUp8a,EAAIghb,EAAQhhb,EAAI,EAAGA,GAAKo8a,EAAUp8a,EAAIghb,EAAQhhb,EAAI,EAAGA,GAAKghb,EAAQhhb,EAAI,EAC3F,IAAK,IAAI+2T,EAAIqlH,EAAUrlH,EAAIiqH,EAAQjqH,EAAI,EAAGA,GAAKqlH,EAAUrlH,EAAIiqH,EAAQjqH,EAAI,EAAGA,GAAKiqH,EAAQjqH,EAAG,CAC1F,IAAIx8M,EAAQ,IAAIo9T,EAAM4E,WAAW,SAAW32b,KAAKkyb,eAAgB,EAAG,GACpEv9T,EAAMj5F,SAAShkB,IAAI0C,EAAG,IAAK+2T,GAC3Bx8M,EAAM0hU,YAAa,EACnBr2b,KAAKo0B,MAAMj4B,IAAIw4H,IAEfA,EAAQ,IAAIo9T,EAAM4E,WAAW,SAAW32b,KAAKkyb,eAAgB,EAAG,IAC1Dx2Z,SAAShkB,IAAI0C,EAAG,EAAK+2T,GAC3Bx8M,EAAM0hU,YAAa,EACnBr2b,KAAKo0B,MAAMj4B,IAAIw4H,M,iCAKV4+Q,GAAM,WACTpqL,GAAM,IAAI4oO,EAAMkD,MAAOC,cAAc3hD,EAAKn/W,OAC1Cgna,EAAUjyO,EAAIrsD,QAAQ,IAAIi1R,EAAMoD,SAChCqB,EAAYrtO,EAAIr/J,UAAU,IAAIioY,EAAMoD,SAEpCmG,EAAUlxb,KAAKywH,IAAIugU,EAAQhhb,EAAGghb,EAAQ/gb,EAAG+gb,EAAQjqH,GAEjDoqH,EAAwB,EAAVD,EACd5E,EAAuB,IAAV4E,EAAiB,EAK9BE,EAAiBpxb,KAAK2pZ,IAAIwnC,GAC1B9E,EAAmBz2b,KAAKkyb,eAAiBsJ,EAE/Cxjc,QAAQ4B,IAAR,YAAwB0hc,EAAxB,kBAAiDC,EAAjD,iBAA6E7E,GAC7E1+b,QAAQ4B,IAAR,mBAA+B4hc,GAC/Bxjc,QAAQ4B,IAAR,wBAAoCoG,KAAKkyb,gBACzCl6b,QAAQ4B,IAAR,qBAAiC68b,GAEV,CAErB,CAAEr8a,EAAG,EAAGC,EAAGq8a,EAAYvlH,EAAGoqH,GAG1B,CAAEnhb,EAAGmhb,EAAalhb,EAAGq8a,EAAYvlH,EAAGoqH,GACpC,CAAEnhb,GAAImhb,EAAalhb,EAAGq8a,EAAYvlH,EAAGoqH,GACrC,CAAEnhb,EAAGmhb,EAAalhb,EAAGq8a,EAAYvlH,GAAIoqH,GACrC,CAAEnhb,GAAImhb,EAAalhb,EAAGq8a,EAAYvlH,GAAIoqH,GAGtC,CAAEnhb,EAAGmhb,EAAalhb,GAAIq8a,EAAYvlH,EAAGoqH,GACrC,CAAEnhb,GAAImhb,EAAalhb,GAAIq8a,EAAYvlH,EAAGoqH,GACtC,CAAEnhb,EAAGmhb,EAAalhb,GAAIq8a,EAAYvlH,GAAIoqH,GACtC,CAAEnhb,GAAImhb,EAAalhb,GAAIq8a,EAAYvlH,GAAIoqH,IAG1Bn9b,SAAQ,SAAAkpD,GACrB,IAAIqtE,EAAQ,IAAIo9T,EAAM4E,WAAW,SAAUF,EAAkB,EAAG,GAChE9hU,EAAMj5F,SAAShkB,IAAI8+a,EAAUp8a,EAAIktC,EAAIltC,EAAGo8a,EAAUn8a,EAAIitC,EAAIjtC,EAAGm8a,EAAUrlH,EAAI7pR,EAAI6pR,GAC/Ex8M,EAAM0hU,YAAa,EACnB,EAAKjia,MAAMj4B,IAAIw4H,GACf38H,QAAQ4B,IAAR,sBAAkC0tD,EAAIltC,EAAtC,QAA+CktC,EAAIjtC,EAAnD,QAA4DitC,EAAI6pR,EAAhE,gBAAiFslH,MAInF,IAAMG,EAAe,IAAI7E,EAAM8E,aAAa,SAAU,IACtD72b,KAAKo0B,MAAMj4B,IAAIy6b,K,iCAKNrjD,GAWT,IAVA,IAAMpqL,GAAM,IAAI4oO,EAAMkD,MAAOC,cAAc3hD,EAAKn/W,OAC1Cgna,EAAUjyO,EAAIrsD,QAAQ,IAAIi1R,EAAMoD,SAChCqB,EAAYrtO,EAAIr/J,UAAU,IAAIioY,EAAMoD,SAGpCsG,EAAerxb,KAAKywH,IAAIugU,EAAQhhb,EAAGghb,EAAQ/gb,EAAG+gb,EAAQjqH,GACtDuqH,EAA+B,GAAfD,EAIbrhb,EAAIo8a,EAAUp8a,EAAIqhb,EAAe,EAAGrhb,GAAKo8a,EAAUp8a,EAAIqhb,EAAe,EAAGrhb,GAAKqhb,EAAe,EACpG,IAAK,IAAItqH,EAAIqlH,EAAUrlH,EAAIsqH,EAAe,EAAGtqH,GAAKqlH,EAAUrlH,EAAIsqH,EAAe,EAAGtqH,GAAKsqH,EAAc,CAEnG,IAAI9mU,EAAQ,IAAIo9T,EAAM4E,WAAW,SANd,EAMwC+E,EAAe,GAC1E/mU,EAAMj5F,SAAShkB,IAAI0C,EAAGo8a,EAAUn8a,EAAIohb,EAAe,EAAGtqH,GACtDx8M,EAAM0hU,YAAa,EACnBr2b,KAAKo0B,MAAMj4B,IAAIw4H,IAGfA,EAAQ,IAAIo9T,EAAM4E,WAAW,SAZV,EAYoC+E,EAAe,IAChEhga,SAAShkB,IAAI0C,EAAGo8a,EAAUn8a,EAAIohb,EAAe,EAAGtqH,GACtDx8M,EAAM0hU,YAAa,EACnBr2b,KAAKo0B,MAAMj4B,IAAIw4H,M,iCAKV4+Q,GAYT,IAZe,WACTpqL,GAAM,IAAI4oO,EAAMkD,MAAOC,cAAc3hD,EAAKn/W,OAC1Cgna,EAAUjyO,EAAIrsD,QAAQ,IAAIi1R,EAAMoD,SAChCqB,EAAYrtO,EAAIr/J,UAAU,IAAIioY,EAAMoD,SAGpCsG,EAAerxb,KAAKywH,IAAIugU,EAAQhhb,EAAGghb,EAAQ/gb,EAAG+gb,EAAQjqH,GACtDuqH,EAA+B,IAAfD,EAChBE,EAAgC,GAAfF,EAGjBG,EAAS,GACNrnc,EAAI,EAAGA,EAAI,EAAGA,IACrBqnc,EAAO7mc,KAAK,IAAIg9b,EAAM4E,WAAW,SAAU32b,KAAKkyb,iBAIlD0J,EAAO,GAAGlga,SAAShkB,IAAI8+a,EAAUp8a,EAAIshb,EAAelF,EAAUn8a,EAAIshb,EAAgBnF,EAAUrlH,EAAIuqH,GAChGE,EAAO,GAAGlga,SAAShkB,IAAI8+a,EAAUp8a,EAAIshb,EAAelF,EAAUn8a,EAAIshb,EAAgBnF,EAAUrlH,EAAIuqH,GAEhGE,EAAO,GAAGlga,SAAShkB,IAAI8+a,EAAUp8a,EAAIshb,EAAelF,EAAUn8a,EAAIshb,EAAgBnF,EAAUrlH,EAAIuqH,GAChGE,EAAO,GAAGlga,SAAShkB,IAAI8+a,EAAUp8a,EAAIshb,EAAelF,EAAUn8a,EAAIshb,EAAgBnF,EAAUrlH,EAAIuqH,GAEhGE,EAAO,GAAGlga,SAAShkB,IAAI8+a,EAAUp8a,EAAIshb,EAAelF,EAAUn8a,EAAIshb,EAAgBnF,EAAUrlH,EAAIuqH,GAChGE,EAAO,GAAGlga,SAAShkB,IAAI8+a,EAAUp8a,EAAIshb,EAAelF,EAAUn8a,EAAIshb,EAAgBnF,EAAUrlH,EAAIuqH,GAEhGE,EAAO,GAAGlga,SAAShkB,IAAI8+a,EAAUp8a,EAAIshb,EAAelF,EAAUn8a,EAAIshb,EAAgBnF,EAAUrlH,EAAIuqH,GAChGE,EAAO,GAAGlga,SAAShkB,IAAI8+a,EAAUp8a,EAAIshb,EAAelF,EAAUn8a,EAAIshb,EAAgBnF,EAAUrlH,EAAIuqH,GAGhGE,EAAOx9b,SAAQ,SAAAu2H,GAAA,OAAS,EAAKvgG,MAAMj4B,IAAIw4H,Q,iCAG9B4+Q,GAAM,WACTpqL,GAAM,IAAI4oO,EAAMkD,MAAOC,cAAc3hD,EAAKn/W,OAC1Cgna,EAAUjyO,EAAIrsD,QAAQ,IAAIi1R,EAAMoD,SAChCqB,EAAYrtO,EAAIr/J,UAAU,IAAIioY,EAAMoD,SAC1Cn9b,QAAQ4B,IAAI,YAAa48b,GAEzB,IAAM8E,EAAUlxb,KAAKywH,IAAIugU,EAAQhhb,EAAGghb,EAAQ/gb,EAAG+gb,EAAQjqH,GAIjDslH,EAAmBz2b,KAAKkyb,eAE9Bl6b,QAAQ4B,IAAR,YAAwB0hc,EAAxB,mCACAtjc,QAAQ4B,IAAR,wBAAoCoG,KAAKkyb,gBACzCl6b,QAAQ4B,IAAR,qBAAiC68b,GAEV,CAErB,CAAEr8a,EAAG,EAAGC,EAAGq8a,IAAgBvlH,EAAG,GAC9B,CAAE/2T,EAAG,EAAGC,EAAGq8a,EAAgBvlH,EAAG,GAG9B,CAAE/2T,EAfgB,EAeAC,EAdD,EAcgB82T,EAff,GAgBlB,CAAE/2T,GAhBgB,EAgBCC,EAfF,EAeiB82T,EAhBhB,GAiBlB,CAAE/2T,EAjBgB,EAiBAC,EAhBD,EAgBgB82T,GAjBf,GAkBlB,CAAE/2T,GAlBgB,EAkBCC,EAjBF,EAiBiB82T,GAlBhB,GAqBlB,CAAE/2T,EArBgB,EAqBAC,GApBD,EAoBiB82T,EArBhB,GAsBlB,CAAE/2T,GAtBgB,EAsBCC,GArBF,EAqBkB82T,EAtBjB,GAuBlB,CAAE/2T,EAvBgB,EAuBAC,GAtBD,EAsBiB82T,GAvBhB,GAwBlB,CAAE/2T,GAxBgB,EAwBCC,GAvBF,EAuBkB82T,GAxBjB,IA4BL/yU,SAAQ,SAAAkpD,GACrB,IAAIqtE,EAAQ,IAAIo9T,EAAM4E,WAAW,SAAUF,EAAkB,EAAG,GAChE9hU,EAAMj5F,SAAShkB,IAAI8+a,EAAUp8a,EAAIktC,EAAIltC,EAAGo8a,EAAUn8a,EAAIitC,EAAIjtC,EAAGm8a,EAAUrlH,EAAI7pR,EAAI6pR,GAC/Ex8M,EAAM0hU,YAAa,EACnB,EAAKjia,MAAMj4B,IAAIw4H,MAKjB,IAAMiiU,EAAe,IAAI7E,EAAM8E,aAAa,SAAU,IACtD72b,KAAKo0B,MAAMj4B,IAAIy6b,GAEf,IAAME,EAAmB,IAAI/E,EAAMgF,iBAAiB,SAAU,IAC9DD,EAAiBp7Z,SAAShkB,IAAI8+a,EAAUp8a,EAAGo8a,EAAUn8a,EAAGm8a,EAAUrlH,EAAG,IACrE2lH,EAAiBT,YAAa,EAC9Br2b,KAAKo0B,MAAMj4B,IAAI26b,K,0CAGG1rb,GAKlB,OAHApL,KAAKo0B,MAAMosH,SAAWxgJ,KAAKo0B,MAAMosH,SAASx5I,QAAO,SAAAmzN,GAAA,QAAWA,aAAiB43N,EAAMkF,UAG3E7rb,GACN,IAAK,aACHpL,KAAK67b,WAAW77b,KAAKuzY,MACrB,MACF,IAAK,aACHvzY,KAAK87b,WAAW97b,KAAKuzY,MACrB,MACF,IAAK,aACHvzY,KAAK+7b,WAAW/7b,KAAKuzY,MACrB,MACF,IAAK,aACHvzY,KAAKg8b,WAAWh8b,KAAKuzY,MACrB,MACF,IAAK,aACHvzY,KAAKi7b,WAAWj7b,KAAKuzY,MACrB,MAEF,QACEv7Y,QAAQwvJ,KAAR,0BAAuCp8I,M,qCAM3C,IAAMwrb,EAAe,IAAI7E,EAAM8E,aAAa,QAAU,IACtD72b,KAAKo0B,MAAMj4B,IAAIy6b,GAEf,IAAME,EAAmB,IAAI/E,EAAMgF,iBAAiB,QAAU,GAC9DD,EAAiBp7Z,SAAShkB,IAAI,EAAG,GAAI,IACrCo/a,EAAiBT,YAAa,EAC9Br2b,KAAKo0B,MAAMj4B,IAAI26b,GAKf,IAAImF,EAAa,IAAIlK,EAAM4E,WAAW,QAAU,GAChDsF,EAAWvga,SAAShkB,IAAI,IAAK,EAAG,GAChCukb,EAAW5F,YAAa,EACxBr2b,KAAKo0B,MAAMj4B,IAAI8/b,IAEfA,EAAa,IAAIlK,EAAM4E,WAAW,QAAU,IACjCj7Z,SAAShkB,KAAK,EAAG,EAAG,GAC/Bukb,EAAW5F,YAAa,EACxBr2b,KAAKo0B,MAAMj4B,IAAI8/b,IAEfA,EAAa,IAAIlK,EAAM4E,WAAW,QAAU,IACjCj7Z,SAAShkB,IAAI,EAAG,EAAG,GAC9Bukb,EAAW5F,YAAa,EACxBr2b,KAAKo0B,MAAMj4B,IAAI8/b,K,sCAsBf,IAAMrF,EAAe,IAAI7E,EAAM8E,aAAa,SAAU,IACtD72b,KAAKo0B,MAAMj4B,IAAIy6b,GAEf,IAAME,EAAmB,IAAI/E,EAAMgF,iBAAiB,SAAU,IAE9DD,EAAiBp7Z,SAAShkB,IAAI,EAAG,GAAI,IACrCo/a,EAAiBT,YAAa,EAC9Br2b,KAAKo0B,MAAMj4B,IAAI26b,K,iCAIf,IAAMoF,EAAgB,IAAInK,EAAMoK,cAAc,IAAK,KAE7CC,EAAgB,IAAIrK,EAAMsK,qBAAqB,CAAE5wV,MAAO,IACxDjzB,EAAQ,IAAIu5W,EAAMuK,KAAKJ,EAAeE,GAC5C5jX,EAAMk/W,SAASt9a,GAAKhQ,KAAKqnE,GAAK,EAC9B+G,EAAM98C,SAASrhB,GAAKra,KAAK+6b,WACzBviX,EAAM49W,eAAgB,EACtBp2b,KAAKo0B,MAAMj4B,IAAIq8E,K,mCAIf,IAAM+jX,EAAW,IAAIxK,EAAMsK,qBAAqB,CAC9CG,UAAW,GACX/wV,MAAO,SACPgxV,UAAW,GACXC,UAAW,IAGPC,EAAgB,IAAI5K,EAAM6K,cAGhCD,EAAcvsT,KAAK,wDAAwD,SAAStoI,GAClFA,EAAI+0b,MAAQ9K,EAAM+K,eAClBh1b,EAAIi1b,MAAQhL,EAAM+K,eAClBh1b,EAAIk1b,WAAa,EACjBl1b,EAAIu6Z,OAAO3qZ,IAAI,GAAI,IACnB5P,EAAI0zX,SAAWu2D,EAAMkL,aACrBV,EAASz0b,IAAMA,EACfy0b,EAASpC,aAAc,KAIzBwC,EAAcvsT,KAAK,qDAAqD,SAAStoI,GAC/EA,EAAI+0b,MAAQ9K,EAAM+K,eAClBh1b,EAAIi1b,MAAQhL,EAAM+K,eAClBh1b,EAAIk1b,WAAa,EACjBl1b,EAAIu6Z,OAAO3qZ,IAAI,GAAI,IACnB6kb,EAASW,QAAUp1b,EACnBy0b,EAASpC,aAAc,KAIzBwC,EAAcvsT,KAAK,0DAA0D,SAAStoI,GACpFA,EAAI+0b,MAAQ9K,EAAM+K,eAClBh1b,EAAIi1b,MAAQhL,EAAM+K,eAClBh1b,EAAIk1b,WAAa,EACjBl1b,EAAIu6Z,OAAO3qZ,IAAI,GAAI,IACnB6kb,EAASY,aAAer1b,EACxBy0b,EAASpC,aAAc,KAGzB,IAAM+B,EAAgB,IAAInK,EAAMoK,cAAc,GAAI,IAC5CiB,EAAY,IAAIrL,EAAMuK,KAAKJ,EAAeK,GAChDa,EAAUhH,eAAgB,EAC1BgH,EAAU1ha,SAASrhB,GAAK,IACxB+ib,EAAU1F,SAASt9a,GAAKhQ,KAAKqnE,GAAK,EAClCzxE,KAAKo0B,MAAMj4B,IAAIihc,K,2CAGI5L,GACnBxxb,KAAKkyb,eAAiBV,EACtBxxb,KAAKo0B,MAAMosH,SAASpiJ,SAAQ,SAAA+7N,GACtBA,aAAiB43N,EAAM4E,aAEzBx8N,EAAMq3N,UAAYA,Q,gCAMtBxxb,KAAKoyb,iBAAmB/jW,sBAAsBruF,KAAKwtF,QAAQ/1F,KAAKuI,OAChEA,KAAKqlD,SAASs8T,SACd3hX,KAAK6wb,SAAS52X,OAAOj6D,KAAKo0B,MAAOp0B,KAAKqzb,U,6BAIlCrzb,KAAKoyb,kBACP+E,qBAAqBn3b,KAAKoyb,oB,gCAM5Bpyb,KAAKikT,OAILjkT,KAAK6wb,SAASS,UACdtxb,KAAKqlD,SAASisY,UAUdtxb,KAAKo0B,MAAQ,KACbp0B,KAAKqzb,OAAS,KACdrzb,KAAK6wb,SAAW,KAChB7wb,KAAKqlD,SAAW,KAChBrlD,KAAK8kD,OAAS,O,6LAgBd9kD,KAAKqzb,OAAOzub,OAAS5E,KAAK8kD,OAAO+sD,YAAc7xG,KAAK8kD,OAAOgtD,aAC3D9xG,KAAKqzb,OAAO6C,yBACZl2b,KAAK6wb,SAASvhN,QAAQtvO,KAAK8kD,OAAO+sD,YAAa7xG,KAAK8kD,OAAOgtD,kB,eA6ChD8oV,G,8EC5oBf,I,IAAA,M,IACA,Q,IACA,OACA,Q,IACA,OACA,O,IACA,OACA,QACA,QACA,O,IACA,O,mDAEA,IAuDMtqQ,EAAqB,CACzB/rE,wCACA9a,oCACA0a,kDACAQ,yC,WAGa,IAAAojC,aACb,IAAAj8C,UAfsB,SAACxzG,GAEvB,MAAO,CACLmI,SAFiBnI,EAAMgR,YAAlB7I,SAGLuD,YAAa1L,EAAMgR,YAAYtF,eAWRssL,EAAzB,EA/DuB,SAAChlF,GAAU,IAC3BtnG,EAAyBsnG,EAAzBtnG,YAAavD,EAAY6qG,EAAZ7qG,SA6Bduwb,EAAsBvwb,EAAW,CAAEmlV,WAAY,OAAQv+F,UAAW,OAAS,CAAEu+F,WAAY,MAAOv+F,UAAW,OAEjH,OACE,mCAAQz8J,UAAW,wCACXv2E,MAAO,CAACqkG,gBAAiB,SACzBgvL,UACE,mCAASrzR,MAAO28a,GACd,0CAAgBvlV,MAAO,UAAaznG,GAAa6wH,WAGrDioD,QAAS,WArCI,IACfptB,KAAS,UAAUA,SAEXA,EAAOmhS,SAEJnhS,EAAOmhS,SAASE,WACxBjiU,QAAO,SAACj/B,GACb,IAAM2rJ,EAAOpiP,SAAS8oD,cAAc,KACpCs5L,EAAKnnO,MAAMwxJ,QAAU,OACrBzsK,SAAS6C,KAAKkmD,YAAYq5L,GAC1BA,EAAKzhP,KAAOsd,IAAI24E,gBAAgBH,GAChC2rJ,EAAKvrJ,SAAW,mBAChBurJ,EAAKtrJ,QAGL,IAAMmtW,EAAS,IAAIC,WACnBD,EAAOE,UAAY,WACjB,IAAMC,EAAaH,EAAO/nc,OAC1B,UAAqBgoD,SAAS0b,YAAYwkY,IAE5CH,EAAOI,cAAc5tW,KAEpB,aAEH73F,QAAQC,MAAM,iCAeZwI,EAAW,GAAK,4CAAkBuH,GAAG,wC,mHCtD7C,O,OACA,OACA,O,IACA,MAEA,Q,IACA,S,IACA,M,IACA,O,mDASA,IAAM01b,EAAiB,WAErB,OADqB,UAAMv7b,WAAW4pG,YAAYjjF,YAA3CxF,YAILkwW,EAAY,EAEVmqE,EAAmB,SAACryV,GAAU,IAE3BxiF,EAAiDwiF,EAAjDxiF,YAAaD,EAAoCyiF,EAApCziF,eAAgB4qX,EAAoBnoS,EAApBmoS,iBAC7BlR,EAA2Bz5W,EAA3By5W,YAAaj/W,EAAcwF,EAAdxF,WAEds6a,GAAa,IAAA97S,UAAQ,WACzB,OAAO2xP,EAAmB,UAAUtoV,YAAc,KACjD,CAACsoV,IAEEoqD,EAAoB,WACxB,IArBwBjjU,EAAKC,EAqBzBijU,EAAe,KAInB,OAHIrqD,GAAoB7rY,MAAMC,QAAQ+1b,KACpCE,EAAmC,IAApBF,EAAWnpc,QAErBqpc,GAzBiBljU,EAyBiBkjU,EAzBZjjU,EAyB0BijU,EAAe,IAxBjE1zb,KAAKkhF,UAAYuvC,EAAMD,GAAOA,IA0B/BmjU,EAAqBx7D,EAAYz6X,KAAI,kBAAM+1b,QASjD,IAAAl8U,YAAU,WACR,OAAO,WACLxpH,OAAOwpJ,aAAa6xO,MAGrB,IAEH,IAAM,EAAAwqE,GAAA,gCAAkB,4QACVjtb,EADU,OAEhB2sb,IAAmB3sb,GAFH,gCAGZ,IAAI3a,SAAQ,SAAAC,GAAA,OAAWm9X,EAAY9kS,WAAWr4F,EAAS0nc,EAAmBhtb,OAH9D,OAKhB2sb,IAAmB3sb,GACrB8X,EAAe,CAACvF,WAAYvS,IANV,mDACKwxX,EAAY3xC,UADjB,4WAStB4iC,EAAY9kS,YAAW,WACrB7lE,EAAe,CAACvF,WAAYi/W,EAAY9tY,OAAS,IACjD++X,EAAY9kS,YAAW,WACrB7lE,EAAe,CAAC2/S,UAAU,MACxB,QACFq1H,KAdkB,8EAAlB,6CAiBN,IAAAl8U,YAAU,WACRq8U,MAEC,IAEH,IAAMC,EAAkB,CACtBt9T,UAAW,eApEI,GAoEcr9G,EAA2B,OAGpD46a,EAAqB56a,IAAgBi/W,EAAY9tY,OAAS,EAEhE,OACE,+BAAKm2F,UAAW,uBAAyBszW,EAAqB,iCAAmC,IAC5F7pb,MAAO4pb,GACT17D,EAAYz6X,KAAI,SAACq2b,EAAYC,GAC5B,IAAMC,EAAc,EAA8C,IAAzCj0b,KAAK4pE,IAAI1wD,EAAa86a,GACzCl7T,EAA0B,IAAhBm7T,EACZ,EACAA,EAAc,EAAIA,EAAc,GAAM,EAM1C,OACE,+BAAKzzW,UAAW,2BACXwzW,IAAoB96a,EAAa,8BAAgC,KACjE86a,EAAkB96a,EAAa,GAAK,kCACpCjP,MAAO,CAAC6uH,WACR1rI,IAAK2mc,EAAW77a,MACnB,+BAAKsoE,UAAU,gCACZ,UAAiBuzW,EAAW5hW,OAE/B,+BAAK3R,UAAU,8BACb,gCAAMA,UAAU,2CACd,4CAAkB5iF,GAAI,eAAiBm2b,EAAW77a,QAEpD,+BAAKsoE,UAAU,6BACb,+BAAKA,UAAU,iCAAiCv2E,MAAO,CACrDkwS,kBAAmBw5I,EAAqB,gBAW1DJ,EAAiBz7S,UAAY,CAC3BuxP,iBAAkB,UAAUrxP,MAG9B,IAUMkuC,EAAqB,CACzBznK,iC,WAGa,IAAAijF,UAdS,SAACxzG,GAIvB,MAAO,CACLwwB,YAJoBxwB,EAAMyzG,YAArBjjF,YAKL07F,YAJoBlsH,EAAMyV,UAArBy2G,eAY+B8rE,EAAzB,CAA6CqtQ,I,8EC7I5D,I,EAAA,O,8CAEe,CACb,UACE,+BAAK78T,MAAM,6BAA6BnhI,MAAM,SAASE,OAAO,SAAS0gI,QAAQ,qBAC7E,6BAAGv4H,GAAG,uBAAuB24H,UAAU,2BACrC,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,qIAC7C,gCAAMwR,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,yIAAyImqI,UAAU,wBAChM,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kXAAkXmqI,UAAU,0BACza,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,sPAAsPmqI,UAAU,mCAInT,MACE,+BAAKG,MAAM,6BAA6BnhI,MAAM,SAASE,OAAO,SAAS0gI,QAAQ,qBAC7E,6BAAGv4H,GAAG,mBAAmB24H,UAAU,yBACjC,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,8FAA8FmqI,UAAU,iCACrJ,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kGAAkGmqI,UAAU,gCACzJ,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,uGAAuGmqI,UAAU,gCAC9J,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,4FAA4FmqI,UAAU,8BACnJ,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,+FAA+FmqI,UAAU,0BACtJ,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,wFAAwFmqI,UAAU,wBAC/I,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,8YAA8YmqI,UAAU,iCAI3c,OACE,+BAAKG,MAAM,6BAA6BnhI,MAAM,SAASE,OAAO,SAAS0gI,QAAQ,qBAC7E,gCAAMv4H,GAAG,UAAUy5H,YAAU,UAAUjrI,EAAE,8mBAA8mBmqI,UAAU,uBAGrqB,QACE,+BAAKG,MAAM,6BAA6BnhI,MAAM,SAASE,OAAO,SAAS0gI,QAAQ,qBAC7E,gCAAMv4H,GAAG,kBAAkBxR,EAAE,y7CAAy7CmqI,UAAU,gCAGp+C,WACE,+BAAKG,MAAM,6BAA6BnhI,MAAM,SAASE,OAAO,SAAS0gI,QAAQ,qBAC7E,6BAAGv4H,GAAG,kBAAkB24H,UAAU,2BAChC,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,uHAAuHmqI,UAAU,gCAC9K,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kgBAAkgBmqI,UAAU,mBACzjB,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,2CAA2CmqI,UAAU,iCAClG,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,oDAAoDmqI,UAAU,iCAC3G,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,+CAA+CmqI,UAAU,mCAI5G,SACE,+BAAKG,MAAM,6BAA6BnhI,MAAM,SAASE,OAAO,SAAS0gI,QAAQ,qBAC7E,6BAAGv4H,GAAG,kBAAkB24H,UAAU,4BAChC,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,oGAAoGmqI,UAAU,iCAC3J,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,qFAAqFmqI,UAAU,gCAC5I,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,kGAAkGmqI,UAAU,iCACzJ,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,0IAA0ImqI,UAAU,wBACjM,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,8IAA8ImqI,UAAU,iCACrM,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,8IAA8ImqI,UAAU,wBACrM,gCAAM34H,GAAG,YAAYy5H,YAAU,YAAYjrI,EAAE,2IAA2ImqI,UAAU,mC,8ECxD1M,I,IAAA,MACA,OACA,Q,IACA,S,IAEA,S,mDAEA,IA2CM2vD,EAAqB,CACzB7mF,qC,WAIa,IAAAqC,UAbS,SAACxzG,GAAD,MAAY,CAClCoxG,UAAWpxG,EAAMs3D,cAAc85C,UAC/B8a,YAAalsH,EAAMyV,UAAUy2G,YAC7BI,gBAAiBtsH,EAAMyV,UAAU62G,gBACjCnkH,SAAUnI,EAAMgR,YAAY7I,SAC5BmqG,uBAAwBtyG,EAAMyV,UAAU68F,0BAQF0lF,EAAzB,EAhDG,SAAChlF,GAAU,IACpB7B,EAAoB6B,EAApB7B,iBAYP,OACE,+BAAK7e,UAAU,gCACb,+BAAKA,UAAU,IACb,+BAAKA,UAAU,KAGf,kCAAQA,UAAU,gBACVkyF,QAAS,WAVrBrzE,EAAkB,CAAC34C,UAAU,EAAOqnK,YAAa,WAa/C,+BAAKvtI,UAAU,qBACb,yCAEF,+BAAKA,UAAU,oBACb,+BAAKA,UAAW,qBACd,+C,4HCnCV,UACA,UACA,Q,IACA,M,uDAEM0zW,E,WACJ,WAAYrM,IAAQ,qBAClBjyb,KAAKiyb,OAASA,EACdjyb,KAAK86b,e,4DAGQ,IAEb,EAFa,QACE,IAAI,EAAJ,YACR1qT,KACLpwI,KAAKiyb,QADP,gCAEE,WAAO1+C,GAAP,wFAGQD,EAAW,IAAI,EAAJ,aACjBC,EAAKn/W,MAAMmqa,mBAAkB,GAAO,GAJtC,SAK4BjrD,EAASl/R,MAAOm/R,EAAKn/W,OALjD,OAKQoqa,EALR,OAMQ3uW,EAAO,IAAI0B,KAAM,CAAEitW,GAAe,CAAEpzb,KAAM,6BAEhD,UAAM6Y,UAAS,IAAAwgG,sBAAqBptG,IAAI24E,gBAAiBH,KAR3D,6CAFF,kDAYE78B,GACA,SAAC/6D,GAAD,OAAWD,QAAQC,MAAMA,U,eAKhBqmc,G,+EC/Bf,I,EAAA,OACA,O,oCAEA,IAwCMG,EAAyB,CAC7B54R,QAAS,QACTlmK,MAAO,IACPE,OAAQ,IACR67B,SAAU,WACVx2B,IAAK,W,WAWQ,IAAA4mG,UARS,SAACxzG,GAAD,MAAY,CAClCmI,SAAUnI,EAAMgR,YAAY7I,SAC5B+jH,YAAalsH,EAAMyV,UAAUy2G,eAGJ,GAGZ,EAxDgB,SAAClZ,GAAU,IAChCkZ,EAAgBlZ,EAAhBkZ,YAeR,OAbA,IAAA7C,YAAU,WACR,IAAM4sR,EAASn1Y,SAAS8oD,cAAc,UAOtC,OANAqsV,EAAOxvY,IAAM,+EACbwvY,EAAOnjY,KAAO,SACdmjY,EAAOqnC,OAAQ,EAEfx8a,SAAS6C,KAAKkmD,YAAYosV,GAEnB,WACLn1Y,SAAS6C,KAAKqmD,YAAYisV,MAE3B,IAEE/pR,EAKH,+BAAK55B,UAAW,UAAWv2E,MAAO,CAAEqnB,SAAU,WAAY/7B,MAAO,OAAQE,OAAQ,OAAQiyC,KAAM,EAAG5sC,IAAK,IACrG,wCACE8C,GAAG,WACHjJ,IAAKylH,EACLxmE,IAAA,EACA0gZ,WAAS,QACTzN,mBAAA,EACA0N,eAAa,QACbzqP,IAAI,aACJ0qP,mBAAiB,IACjBC,mBAAiB,kBACjBC,kBAAA,EACAzqb,MAAOoqb,KAhBJ,S,8ECpBX,I,IAAA,MACA,OACA,Q,IACA,OACA,Q,mDAEA,IAyCMnuQ,EAAqB,CACzB3mF,wDACA7wC,iD,WAIa,IAAAgzC,UAXS,SAACxzG,GAAD,MAAY,CAClCsxG,oBAAqBtxG,EAAMs3D,cAAcg6C,oBACzC/wC,mBAAoBvgE,EAAMyV,UAAU8qD,sBASEy3H,EAAzB,EA/CiB,SAAChlF,GAAU,IAClC1B,EAA+F0B,EAA/F1B,oBAAqBD,EAA0E2B,EAA1E3B,2BAA4B9wC,EAA8CyyC,EAA9CzyC,mBAAoBC,EAA0BwyC,EAA1BxyC,uBAa5E,OACE,+BAAK8xB,UAAW,wBAA0Bgf,EAAoB94C,SAAW,GAAK,WAC5E,+BAAK85B,UAAU,uBACb,+BAAKA,UAAU,+BAA+B8mS,YAAU,oBAAxD,kBACA,+BAAK9mS,UAAU,uBACf,+BAAKA,UAAU,gDACb,gCAAM8mS,YAAU,8BAAhB,oDAAoG,mCACpG,gCAAMA,YAAU,8BAAhB,wEAEF,+BAAK9mS,UAAU,kDACb,kCAAQA,UAAU,6DAA6DkyF,QAf7D,WACxB3kL,OAAOkwD,kBAAmB,EAC1BshD,EAA2B,CAAC74C,UAAU,EAAOlX,MAAO,SAc5C,gCAAMgxC,UAAU,0CAA0C8mS,YAAU,2BAApE,WAEF,kCAAQ9mS,UAAU,6DAA6DkyF,QAzB7D,WACxB3kL,OAAOkwD,kBAAmB,EAC1B,UAAUmP,YAAYoyC,EAAoBhwD,OAC1C+vD,EAA2B,CAAC74C,UAAU,EAAOlX,MAAO,OACpDkf,EAAuBD,EAAqB,KAsBpC,gCAAM+xB,UAAU,0CAA0C8mS,YAAU,2BAApE,kB,8EClCZ,W,OACA,OACA,OAEA,Q,IACA,SACA,S,IAKA,S,IACA,S,IACA,S,IACA,S,mDAEA,IA8BMphM,EAAqB,CACzB1oF,0CACAqiG,8BACAF,oCACAzwI,qD,WAGa,IAAAyuF,aACb,IAAAj8C,UAbsB,SAACxzG,GAAD,MAAY,CAClCgrB,WAAYhrB,EAAMqR,cAAc2Z,WAChCukF,aAAcvvG,EAAMs3D,cAAci4C,gBAWTyoF,EAAzB,EAtCyB,SAAChlF,GAAU,IAC7BzD,EAAgByD,EAAhBzD,aACAvkF,EAA6BgoF,EAA7BhoF,WAAY2mL,EAAiB3+F,EAAjB2+F,cACb80P,GAAa,IAAA9+S,QAAO,MACpBqnP,EAA4B,aAAjBz/R,EAMjB,OAJA,IAAA8Z,YAAU,WACR2lR,GAAWr9L,EAAc,KACxB,CAACq9L,EAAUr9L,IAGZ,+BAAKr/G,UAAW,kDAAoD08S,EAAW,GAAK,WAClF,+BAAK18S,UAAU,4BACb,mCAAoBm0W,WAAYA,IAChC,+BAAKn0W,UAAU,4CACG,IAAftnE,EAAmB,wCAA6B,GACjC,IAAfA,EAAmB,wCAAwB,GAC5B,IAAfA,EAAmB,mCAAkBy7a,WAAYA,IAAgB,IAEpE,mCAAoBA,WAAYA,W,6FCnCxC,O,OACA,OACA,QACA,OACA,S,IACA,Q,IACA,O,IACA,QACA,SACA,Q,mDAEA,IAyCMzuQ,EAAqB,CACzB1oF,0CACAiiG,kCACAE,qC,WAGa,IAAAhiD,aACb,IAAAj8C,UAbsB,SAACxzG,GAAD,MAAY,CAClCuvG,aAAcvvG,EAAMs3D,cAAci4C,aAClCiiG,aAAcxxM,EAAMqR,cAAcmgM,aAClC7lH,WAAY3rF,EAAMqR,cAAcs6E,cAUPqsG,EAAzB,EAhDyB,SAAChlF,GAAU,IAC7Bu+F,EAAmBv+F,EAAnBu+F,gBACA5lH,EAA4BqnB,EAA5BrnB,WAAY6lH,EAAgBx+F,EAAhBw+F,aAFiB,GAGZ,IAAAk/M,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAH2B,qBAI9BpmM,GAAe,IAAAklI,UAAQ,kBAAM,IAAAzmI,4BAA0B,IAAAF,uBAAqB,IAC5E8pE,GAAW,IAAA68D,UAAQ,kBAAM,IAAAu1B,aAAYz6J,EAAcqnE,EAAY,IAAI,GAAM,KAAO,CAACrnE,EAAcqnE,IAOrG,OACE,+BAAK2G,UAAW,gBACd,8BAAIA,UAAU,aACXhuE,GAAgBA,EAAapB,OAASoB,EAAapB,KAAK42E,oBACrD,mCAAoB11E,QAASE,EAAc+1M,SAAU,kBAAM3P,EAAY,IAAIo4D,YAAY,IACvFn2L,EACCn9E,KAAI,SAACzE,GACJ,OAAO,8BAAI7L,IAAK6L,EAAQmY,KAAK7X,UAAUqE,GAC5B4iF,UAAW,oBAAsBk/G,IAAiBzmM,EAAQmY,KAAK7X,UAAUqE,GAAK,0BAA0B,IACxG80K,QAAS,kBAdP,SAACz5K,GACxBwmM,EAAgBxmM,EAAQmY,KAAK7X,UAAUqE,IAaHg3b,CAAiB37b,KAEzC,mCAAkBA,QAASA,EAAQmY,OACnC,+BAAKovE,UAAU,wBACb,mCAAavnF,QAASA,EAAQmY,mB,8ECpChD,I,IAAA,MACA,OACA,QACA,O,IACA,S,mDAEA,QAEA,IAuCM80K,EAAqB,CACzB1oF,2C,WAGa,IAAAmgD,aACb,IAAAj8C,UAZsB,SAACxzG,GAAD,MAAY,CAClCuvG,aAAcvvG,EAAMs3D,cAAci4C,aAClC7xF,aAAc1d,EAAMyc,YAAYiB,aAChCg0L,cAAe1xM,EAAMqR,cAAcqgM,cACnCI,gBAAiB9xM,EAAMqR,cAAcygM,mBAQZ9Z,EAAzB,EA5CuB,SAAChlF,GAAU,IAC3B0+F,EAAkC1+F,EAAlC0+F,cAAeI,EAAmB9+F,EAAnB8+F,gBACf20P,EAAczzV,EAAdyzV,WAOP,OACE,+BAAKn0W,UAAW,iBAEZo/G,EACI,mCAEAjrM,IAAKirM,EACL31L,MAAO,CAAExU,OAAQ,IAAKF,MAAO,QAE7Bs/b,mBAAwC,IAApB70P,EAAwBA,EAAkB,EAC9DmoJ,YAAiC,IAApBnoJ,EAAwBA,EAAkB,EACvD80P,aAAc,EACd3lU,QAAQ,EACR4lU,KAnBK,aAoBLn/S,IAAK++S,IAEL,+BAAKn0W,UAAU,uF,iFCjC3B,I,EAAA,O,oCACA,OACA,OAEA,QACA,aACA,SAGA,IA8BM0lG,EAAqB,CACzB+Z,iBAjCF,OAiCEA,kB,WAGa,IAAAtiD,aACb,IAAAj8C,UATsB,SAACxzG,GAAD,MAAY,CAClCgyM,cAAehyM,EAAMqR,cAAc2gM,iBAQVha,EAAzB,EAnC8B,SAAChlF,GAAU,IAClCg/F,EAAmCh/F,EAAnCg/F,cAAeD,EAAoB/+F,EAApB++F,iBAEhB+0P,EAAkB,SAACC,GACvBh1P,EAAiBg1P,IAGnB,OACE,+BAAKz0W,UAAW,iBACd,+BAAKA,UAAU,mBACb,+BAAKA,UAAW,0BAA4B0/G,IAAkB,EAAAj5D,iBAAiBC,YAAc,+BAAiC,IAC5HwrC,QAAS,kBAAMsiR,EAAgB,EAAA/tT,iBAAiBC,eAChD,+BAAKvyI,IAAA,YAAgBm1M,IAAI,GAAGtpH,UAAU,0BACtC,4CAAkB5iF,GAAI,2CAExB,+BAAK4iF,UAAW,0BAA4B0/G,IAAkB,EAAAj5D,iBAAiBo4H,OAAS,+BAAiC,IACpH3sF,QAAS,kBAAMsiR,EAAgB,EAAA/tT,iBAAiBo4H,UACnD,+BAAK1qQ,IAAA,aAAiBm1M,IAAI,GAAGtpH,UAAU,0BACvC,4CAAkB5iF,GAAI,8C,6FC3BhC,O,OACA,OACA,OACA,SASA,QACA,S,IACA,S,IACA,O,IACA,S,mDAEA,IA0JMsoL,EAAqB,CACzB2Z,8BACAF,oCACAQ,sCACAC,wCACAN,sCACAC,wCACAa,mC,WAGa,IAAAjjD,aACb,IAAAj8C,UArBsB,SAACxzG,GAAD,MAAY,CAClCqU,eAAgBrU,EAAMqR,cAAcgD,eACpCD,gBAAiBpU,EAAMqR,cAAc+C,gBACrCg+L,YAAapyM,EAAMqR,cAAc+gM,YACjCO,aAAc3yM,EAAMqR,cAAcshM,aAClC3nL,WAAYhrB,EAAMqR,cAAc2Z,WAChCgnL,cAAehyM,EAAMqR,cAAc2gM,cACnCc,uBAAwB9yM,EAAMqR,cAAcyhM,0BAcnB9a,EAAzB,EArKyB,SAAChlF,GAAU,IAElChoF,EAGEgoF,EAHFhoF,WAAY5W,EAGV4+F,EAHU5+F,gBAAiBC,EAG3B2+F,EAH2B3+F,eAAgB+9L,EAG3Cp/F,EAH2Co/F,YAAaF,EAGxDl/F,EAHwDk/F,mBAC1DY,EAEE9/F,EAFF8/F,uBAAwBb,EAEtBj/F,EAFsBi/F,kBAAmBL,EAEzC5+F,EAFyC4+F,kBAAmBC,EAE5D7+F,EAF4D6+F,mBAC/BG,GAC7Bh/F,EADF2/F,aACE3/F,EADY0/F,gBACZ1/F,EAD6Bg/F,eAEzBy0P,EAAezzV,EAAfyzV,WAEAtkb,EAAS6wF,EAAT7wF,KACFogZ,EAAgB,QAAhBA,EAAiC,SATH,GAWU,IAAA15Q,WAAS,GAXnB,qBAW7Bm+S,EAX6B,KAWZC,EAXY,QAYQ,IAAAp+S,WAAS,GAZjB,qBAY7Bq+S,EAZ6B,KAYbC,EAZa,KAahCzmN,EAActsO,EACdqsO,EAAapsO,EAEX+yb,EAAmB,SAACxoc,EAAOkU,GAE/B,IAAMu0b,EAAWzoc,EAAMyH,QAAQ,UAAW,IACpCihc,EAAehgc,SAAS+/b,EAAU,KAAO,EAE/C,OAAOv0b,GACL,KAAKyvZ,EACHtwN,EAAkBq1P,GAClB7mN,EAAa6mN,EACb,MACF,KAAK/kC,EACHrwN,EAAmBo1P,GACnB5mN,EAAc4mN,EAGlB,IAAI/kX,EAAcC,EAfsB,GAgBP,IAAAH,gBAAeq+J,EAAaD,GAA1Dl+J,EAhBqC,EAgBrCA,aAAcC,EAhBuB,EAgBvBA,YACjBqvH,EAAmBrvH,EAAcD,GAC7BkkX,EAAWvqV,SAAWuqV,EAAWvqV,QAAQqrV,SAC3Cd,EAAWvqV,QAAQqrV,QAAQC,eAAehlX,EAAcD,IAQtDklX,EAAkB30P,EAAyB,sBAAwB,GAEzE,OACE,+BAAKxgH,UAAU,0CAEI,IAAftnE,EACE,+BAAKsnE,UAAU,sBACb,4CAAkB5iF,GAAI,qCAEtB,GAGW,IAAfsb,GAAoBgnL,IAAkB,EAAAj5D,iBAAiBo4H,OACnD,wCACA,GAGW,IAAfnmP,EACE,+BAAKsnE,UAAU,uBACb,iCAAOx/E,KAAK,OACLw/E,UAAU,qCACV0mD,YAAa72H,EAAKC,cAAc,CAAE1S,GAAI,+BACtC8tN,SAAU,SAAC3/N,GAAD,OA1BE8tF,EA0ByB9tF,EAAEugB,OAAOxf,WAzB7DgzM,EAAkBjmH,GADQ,IAACA,MA4BnB,GAGW,IAAf3gE,GAAoC,IAAfA,GAAoBgnL,IAAkB,EAAAj5D,iBAAiBC,YAE1E,wCACE,+BAAK1mD,UAAU,qBACf,gCAAMA,UAAU,0BACd,4CAAkB5iF,GAAI,8BAEtB,oCACA,iCAAOoD,KAAK,OACLw/E,UAAW,sDAAwDm1W,EACnErgO,QAAS,kBAAM6/N,GAAmB,IAClC5/N,OAAQ,kBAAM4/N,GAAmB,IACjCzpO,SAAU,SAAC3/N,GAAD,OAAOupc,EAAiBvpc,EAAEugB,OAAOxf,MAAO2ja,IAClD3ja,MAAOooc,EAAkB5yb,EAAkBA,EAAkB,UAAWw2C,uBAAsB,GAC9FouF,YAAY,OAEnB,gCAAM1mD,UAAU,uBAAhB,KAGA,oCACA,iCAAOx/E,KAAK,OACLw/E,UAAW,qDAAuDm1W,EAClErgO,QAAS,kBAAM+/N,GAAkB,IACjC9/N,OAAQ,kBAAM8/N,GAAkB,IAChC3pO,SAAU,SAAC3/N,GAAD,OAAOupc,EAAiBvpc,EAAEugB,OAAOxf,MAAO2ja,IAClD3ja,MAAOsoc,EAAiB7yb,EAAiBA,EAAiB,UAAWu2C,uBAAsB,GAC3FouF,YAAY,OAEnB,mCAAuBtpI,GAAI,mBACJsa,KAAM,0CACNoZ,SAAU,CAAEx2B,IAAK,GAAI4sC,KAAM,KAC3Bkb,UAAWo+I,KAGpC,yCAEA,GAgBA,KAEU,IAAf9nL,EAEC,+BAAKsnE,UAAU,wBACb,+BAAKA,UAAU,6BACb,4CAAkB5iF,GAAI,iCACtB,0CACA,oCAAOoC,KAAKyC,OAAO69L,EAAY/qM,OAAQ,GAAvC,IAA4CyK,KAAKyC,OAAO69L,EAAY7qM,QAAS,KAE/E,+BAAK+qF,UAAU,iCACb,4CAAkB5iF,GAAI,qCACtB,0CACA,oCAAOoC,KAAKyC,OAAO69L,EAAYtwL,GAAI,GAAnC,IAAwChQ,KAAKyC,OAAO69L,EAAYrwL,GAAI,MAGtE,W,6FC5JV,O,OACA,OACA,O,IACA,Q,mDAGA,IAmCMi2K,EAAqB,CACzB+a,wBAtCF,OAsCEA,yB,WAIA,IAAAv/F,UAfsB,SAACxzG,GAAU,IAC1BgzN,EAA+BhzN,EAAMkwO,iBAArCld,4BAEP,MAAO,CACLr+F,mBAAoB30H,EAAMgR,YAAY2jH,mBACtC90G,eAAgB7f,EAAMqN,gBACtB2lN,iCASuBh7B,EAAzB,EAxCkC,SAAChlF,GAAU,IACtC+/F,EAA2B//F,EAA3B+/F,wBADsC,GAEf,IAAAlqD,WAAS,GAFM,qBAEtCgY,EAFsC,KAE5B6mS,EAF4B,KASvCC,EAAkBA,kCAAiC9mS,EAAW,4BAA8B,IAElG,OACE,kCAAQvuE,UAAU,sBAAsBkyF,QARpB,WACpBkjR,GAAW7mS,GACXkyC,GAAyBlyC,IAMuCjjH,MAAOijH,EAAW,eAAiB,IACjG,+BAAKvuE,UAAWq1W,GACd,+BAAKr1W,UAAU,oBACb,mCAAQ2R,KAAK,gBAGjB,gCAAM3R,UAAW,wCACf,4CAAkB5iF,GAAG,sC,8ECzB7B,W,OACA,OACA,QACA,OACA,S,IAKA,O,IACA,OACA,Q,IACA,S,IACA,S,IACA,Q,IACA,O,mDAEA,IAmMMsoL,EAAqB,CACzB1oF,0CACAqiG,8BACAF,oCACAzwI,oDACAkxI,wCACAD,sCACAI,mD,WAGa,IAAA5iD,aACb,IAAAj8C,UArBsB,SAACxzG,GAAD,MAAY,CAClCwxM,aAAcxxM,EAAMqR,cAAcmgM,aAClCxmL,WAAYhrB,EAAMqR,cAAc2Z,WAChC3W,eAAgBrU,EAAMqR,cAAcgD,eACpCD,gBAAiBpU,EAAMqR,cAAc+C,gBACrCu+L,aAAc3yM,EAAMqR,cAAcshM,aAClCpjG,aAAcvvG,EAAMs3D,cAAci4C,aAClCyiG,cAAehyM,EAAMqR,cAAc2gM,iBAcVha,EAAzB,EA9MyB,SAAChlF,GAAU,IAC7Bw+F,EAA8Fx+F,EAA9Fw+F,aAAcliG,EAAgF0D,EAAhF1D,oBAAqBmiG,EAA2Dz+F,EAA3Dy+F,iBAAkBY,EAAyCr/F,EAAzCq/F,wBAAyBM,EAAgB3/F,EAAhB2/F,aAC9Et+L,EAAmC2+F,EAAnC3+F,eAAgBD,EAAmB4+F,EAAnB5+F,gBAChB4W,EAA6BgoF,EAA7BhoF,WAAY2mL,EAAiB3+F,EAAjB2+F,cACZ80P,EAAczzV,EAAdyzV,WAEDmB,GAAmB,IAAA7/S,cAAY,WACnC,IAAI8/S,EACFC,SACAP,SACAnoN,SAKF,GAFAmoN,GADAM,EAAepB,EAAaA,EAAWvqV,QAAU,MACxB2rV,EAAaN,QAAU,KAEnC,CACX,IAAMQ,EAAgBR,EAAQS,mBAC9B,GAAID,EAAe,CACjBD,EAAcC,EAActwW,YAE5Bg6G,EAAiBq2P,IAEjB1oN,EAAe,IAAIlnL,OACNzxD,IAAMqhc,EAEnB,IAAIvoN,EAAiB,UAAUxnL,SAC7BqnL,EACA/qO,EAAiB,UAAWq2C,uBAC5Bt2C,EAAkB,UAAWs2C,uBAC7B,KACA,KACA,YACA,MACA,cACA,KACA,KACA,KACA,UAAiB4W,WAAWokC,WAC5B8rG,GAEF+tC,EAAe7sC,gBAAgBC,GAE/BN,EAAwBktC,GAE1BgoN,EAAQxnY,UAGVq2B,YAAW,YACT,IAAA4D,mBACC,OAGF,CAACw3G,EAAca,EAAyBo0P,EAAYh1P,EAAkBr9L,EAAiBC,EAAgBs+L,IAMpGW,EAAa,WACjBhkG,EAAoB,KAyEtB,OACE,+BAAKhd,UAAU,kDACb,+BAAKA,UAAU,kDACb,kCAAQA,UAAU,6DAA6DkyF,QAjF3D,WACxB8uB,MAiFM,gCAAMhhH,UAAU,2CACd,4CAAkB5iF,GAAI,8BAG1B,wCAsBiB,IAAfsb,GAAoBwmL,EAClB,kCAAQl/G,UAAU,gEAChB,iCAAOA,UAAU,+BACf,iCAAOx/E,KAAK,OAAO0qN,SAvFL,SAACl1H,GAC3B,IAKM2/V,EAAY3/V,EAAMlqF,OAAO8pb,MAAM,IACrC,aAAiBD,EANH,CACZE,UAAW,EACXC,iBAAkB,KAClBC,cAAc,IAIb9ua,MAAK,SAAA+ua,GACJ5oc,QAAQ4B,IAAI,iCAAkCgnc,aAA0BrvW,MACxEv5F,QAAQ4B,IAAR,uBAAmCgnc,EAAet9b,KAAO,KAAO,KAAhE,OACA,IAAIu9b,EAAYxpb,IAAI24E,gBAAgB4wW,GACpC72P,EAAiB82P,MAuCrB52P,EAAc,MAqCF,4CAAkBjiM,GAAI,iCAGxB,KAGW,IAAfsb,EACE,kCAAQsnE,UAAU,+DAA+DkyF,QA/G5D,WAC7B,OAAQx5J,GACN,KAAK,EACH2mL,EAAc,GACd,MACF,KAAK,GACH,IAAArjL,gBACAghF,EAAoB,IACpB,UAAc5xC,OACd04B,YAAW,WACTwxW,MACC,MAqGG,gCAAMt1W,UAAU,0CAA0C8mS,YAAU,2BAClE,4CAAkB1pX,GAAI,mCAGxB,Y,+ECnMd,W,OACA,OACA,QACA,OACA,SAMA,S,IAGA,O,IACA,O,mDAEA,IAqFMsoL,EAAqB,CACzB1oF,0CACAqiG,8BACAF,oCACAzwI,oDACAkxI,wCACAD,sCACAI,kDACAQ,uD,WAGa,IAAApjD,aACb,IAAAj8C,UAtBsB,SAACxzG,GAAD,MAAY,CAClCwxM,aAAcxxM,EAAMqR,cAAcmgM,aAClCxmL,WAAYhrB,EAAMqR,cAAc2Z,WAChC3W,eAAgBrU,EAAMqR,cAAcgD,eACpCD,gBAAiBpU,EAAMqR,cAAc+C,gBACrCu+L,aAAc3yM,EAAMqR,cAAcshM,aAClCpjG,aAAcvvG,EAAMs3D,cAAci4C,aAClCyiG,cAAehyM,EAAMqR,cAAc2gM,iBAeVha,EAAzB,EAjG+C,SAAChlF,GAAU,IACnD1D,EAAkD0D,EAAlD1D,oBAAqBujG,EAA6B7/F,EAA7B6/F,0BACrBb,EAAiBh/F,EAAjBg/F,cACA39L,EAAmC2+F,EAAnC3+F,eAAgBD,EAAmB4+F,EAAnB5+F,gBAChB4W,EAA6BgoF,EAA7BhoF,WAAY2mL,EAAiB3+F,EAAjB2+F,cAiCb62P,EAAyB,WACxBn0b,GAAmBD,GAKxBy+L,GAA0B,GAZ1B,UAAiBr6D,qBACdnkI,EAAiB,UAAWq2C,wBAC5Bt2C,EAAkB,UAAWs2C,wBA1BhC4kD,EAAoB,KAgClBujG,GAA0B,IAS9B,OACE,wCAEmB,IAAf7nL,GAAoBgnL,IAAkB,EAAAj5D,iBAAiBC,YACrD,kCAAQ1mD,UAAU,+DACVkyF,QAAS,WAAOgkR,MACpB,gCAAMl2W,UAAU,2CACd,4CAAkB5iF,GAAI,iCAG1B,KAGW,IAAfsb,GAAoBgnL,IAAkB,EAAAj5D,iBAAiBo4H,OACrD,kCAAQ7+K,UAAU,+DACVkyF,QAAS,WAAOmtB,EAAc3mL,EAAa,KAC/C,gCAAMsnE,UAAU,2CACd,4CAAkB5iF,GAAI,2BAG1B,W,iGCpFZ,OACA,O,OACA,OACA,Q,IACA,SACA,OACA,QACA,QACA,QACA,SACA,QACA,Q,mDAKA,IAkGMsoL,EAAqB,CACzBlnF,wCACAtwC,iD,WAGa,IAAAivF,aACb,IAAAj8C,UApBsB,SAACxzG,GAAD,MAAY,CAClCimE,YAAajmE,EAAMs3D,cAAc2O,YACjCpmD,eAAgB7f,EAAMqN,gBACtBkzD,mBAAoBvgE,EAAMyV,UAAU8qD,mBACpCkoY,qBAAsBzoc,EAAMgsL,QAAQvmK,iBACpCE,eAAgB3lB,EAAMytB,eAAe9H,eACrCF,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChCwqF,aAAcjwG,EAAMs3D,cAAc24C,aAClCpO,WAAY7hG,EAAMqY,YAAYwpF,WAC9BvpF,iBAAkBtY,EAAMqY,YAAYC,iBACpCE,qBAAsBxY,EAAMqY,YAAYG,qBACxCqZ,eAAgB7xB,EAAMqY,YAAYwZ,kBASTmmK,EAAzB,EAxG6C,SAAChlF,GAAU,IACjD/sC,EAEmB+sC,EAFnB/sC,YAAawiY,EAEMz1V,EAFNy1V,qBAAsB9ib,EAEhBqtF,EAFgBrtF,eAAgBmrF,EAEhCkC,EAFgClC,mBAAoBjxF,EAEpDmzF,EAFoDnzF,eAAgBsC,EAEpE6wF,EAFoE7wF,KAC5Fo+C,EACwByyC,EADxBzyC,mBAAoBC,EACIwyC,EADJxyC,uBAAwByvC,EACpB+C,EADoB/C,aAAcpO,EAClCmR,EADkCnR,WAAYhwE,EAC9CmhF,EAD8CnhF,eAAgBvZ,EAC9D06F,EAD8D16F,iBACtFE,EAAwBw6F,EAAxBx6F,qBAHsD,GAKH,IAAAqwI,UAAS,IALN,qBAKjDs7K,EALiD,KAK7B2B,EAL6B,MAUxD,IAAAz8M,YAAU,WACR,IAAMzmG,GAAS,IAAAC,oBACXsB,EAAW,GACf,IAAI,IAAAw9F,uBAAsB9f,EAAYhwE,GAAiB,EACjC,IAAAS,mBAAkBha,EAAkBE,GAAsB,GAElE1S,SAAQ,SAAC26K,GACnB,GAAqC,IAAjCA,EAAW5tJ,WAAW12B,OAAc,CACtC,IAAMi2B,EAAcquJ,EAAW5tJ,WAAW,GACpCvO,GAAe,IAAA69E,gCAA+B/vE,GAChD9N,GAAgBloB,OAAOmc,KAAP,2BAAqC1W,SAASyiB,EAAatW,UACzEokB,EAAYs2a,mBAAqBt2a,EAAYwrB,OAAUxrB,EAAYwrB,QAAUt5B,EAAapM,UACvFiM,EAASxc,MAAK,SAAAyc,GAAA,OAAWA,EAAQgO,aAAgBhO,EAAQgO,YAAYwrB,QAAUxrB,EAAYwrB,UAC9Fz5B,EAAS1nB,KAAK,CAACymB,KAAMoB,EAAcqkb,UAAWv2a,EAAYwrB,MAAOxrB,gBAEzDjO,EAASxc,MAAK,SAAAyc,GAAA,OAAWA,EAAQlB,KAAKlV,SAAWsW,EAAatW,WACxEmW,EAAS1nB,KAAK,CAACymB,KAAMoB,aAKxB,CACL,GAAI1B,EAAOc,cAAgB+kb,EAAsB,CAC/C,IAAMhjb,EAAmB7C,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASsqc,MAC/E7lb,EAAOc,aAAa,GACzBS,EAAWsB,EAAiBtB,aACvB,CACL,IAAMghK,EAAaviK,EAAOsD,MAAMP,GAC5Bw/J,IACFhhK,EAAWghK,EAAWhhK,UAAS,IAGnCA,EAAWA,EAASzV,QAAO,SAACk6b,GAC1B,OAAOxsc,OAAOmc,KAAP,2BAAqC1W,SAAS+mc,EAAQ1lb,KAAKlV,WAGtE83T,EAAsB3hT,KACrB,CAACskb,EAAsB9ib,EAAgBsqF,EAAc33F,EAAkBE,EAAsBqZ,EAC9FgwE,IAEF,IAmBMvP,EAAYrsB,EAAYzN,UAjEG,WAiESyN,EAAYorJ,WAA0C,GAAK,SAErG,OAAOprJ,EAAYzN,SACjB,+BAAK85B,UAAW,sBAAwBA,GACtC,mCACE62M,gBAxB2B,SAACtrS,EAAG86E,GACnC,OAAQA,EAAK3qE,QACX,IAAK,UAE0B,aAAE,8BAClBolM,OAAO,KACpB,MAEF,SACE,IAAA6zF,aAAYtuN,EAAKz1D,KAAKlV,OAAQi4D,EAAYhlE,OAAQ03E,EAAKvmD,cACvD,IAAA80Q,WAAUvuN,EAAKgwX,YAAa,IAAAnlb,qBAAoBm1D,EAAKz1D,KAAMf,EAAMtC,GAAiB84D,EAAK3qE,OAAQi4D,EAAYhlE,QAK/Gu/D,EAAuBD,EAAqB,GAC5CuwC,EAAmB,CAACt4C,UAAU,KAS1BxJ,IAAKiX,EAAYjX,IACjBstV,gBAAiB,EAAA/6V,kBAAkBpkC,KACnC0rb,iBAAkB1mb,EAAKC,cAAc,CAAC1S,GAAI,2BAC1Co5b,qBAAsB,KACtB3kI,mBAAoBA,KAEtB,U,iGCjGN,MACA,OACA,O,IACA,M,IACA,OACA,QACA,Q,mDACA,IAGM4kI,EAAkB,SAAC/1V,GAAU,IAC1Bm2L,EACqBn2L,EADrBm2L,gBAAiBn6O,EACIgkD,EADJhkD,IAAK65Y,EACD71V,EADC61V,iBAAkBC,EACnB91V,EADmB81V,qBAAsB3kI,EACzCnxN,EADyCmxN,mBAAoBhiT,EAC7D6wF,EAD6D7wF,KAAMtC,EACnEmzF,EADmEnzF,eAC7F1X,EAA0B6qG,EAA1B7qG,SAAUygB,EAAgBoqF,EAAhBpqF,aACLkoF,EAAsBkC,EAAtBlC,mBAoBP,OACE,+BAAKphG,GAAG,cACH4iF,UAAU,kDACVv2E,OAAA,gBArBwB,SAACizC,GAC9B,GATuB,IASEA,EAAIjtC,EAAI6G,EAAc,CAC7C,IAAM0zD,EAASn0E,EAAW,GAAK,GAC/B6mD,EAAIjtC,EAAI6G,EAXa,IAWuB0zD,EAE9C,MAAO,CACL9iC,KAAMwV,EAAIltC,EAAI,KACdlV,IAAKoiD,EAAIjtC,EAAI,MAcCmoT,CAAuBl7Q,GAAlC,CAAwC3nD,MAAO2hc,QAA0Bzhc,OAAQ0hc,WACpF,+BAAK32W,UAAU,2BACZu2W,EACD,kCAAQv2W,UAAU,iCAAiCkyF,QAVhC,WACvB1zE,EAAmB,CAACt4C,UAAU,QAW5B,mCACIswY,GAA8C,MAElD,+BAAKx2W,UAAU,+BACb,8BAAIA,UAAU,0BAEV6xO,EAAmB30T,KAAI,SAACwvN,EAAU1pN,GAChC,IAAMnX,EAAO6gO,EAAS2pO,YAAa,IAAAnlb,qBAAoBw7M,EAAS97M,KAAMf,EAAMtC,GAC5E,OACE,8BAAI3gB,IAAKoW,EAAOg9E,UAAU,0BACxB,kCACE42W,eAAe,kBACf9vE,YAAY,oBACZ9mS,UAAa,2BACbkyF,QAAS,SAAC3mL,GAAD,OAAOsrS,EAAgBtrS,EAAGmhO,KAEnC,gCAAM1sI,UAAU,iCACbn0F,YAavB4qc,EAAgBn/S,UAAY,CAC1Bu/I,gBAAiB,UAAU1iH,KAAK9lE,WAChC3xD,IAAK,UAAU1N,MAAM,CACnBx/B,EAAG,UAAUw+F,OACbv+F,EAAG,UAAUu+F,SAEfuoV,iBAAkB,UAAUh/S,UAAU,CAAC,UAAUxqJ,OAAQ,UAAU6qC,SACnE4+Z,qBAAsB,UAAUzpc,OAChC8kU,mBAAoB,UAAUvjN,QAAQ,UAAUipC,UAAU,CACxD,UAAUxqJ,OACV,UAAUqnL,WAAV,eAKJ,IAMMsR,EAAqB,CACzBlnF,yC,WAGa,IAAA2+C,aACb,IAAAj8C,UAXsB,SAACxzG,GAAD,MAAY,CAClC6f,eAAgB7f,EAAMqN,gBACtBlF,SAAUnI,EAAMgR,YAAY7I,SAC5BygB,aAAc5oB,EAAMgR,YAAY4X,gBAQPovK,EAAzB,CAA6C+wQ,K,iGCjG/C,MACA,OACA,O,8DAiEe,IAAAv1V,UANS,iBAAO,KAGJ,GAGZ,EA/DY,SAACR,GAAU,IAC7Bm2L,EAA4Cn2L,EAA5Cm2L,gBAAiBn6O,EAA2BgkD,EAA3BhkD,IAAKm1Q,EAAsBnxN,EAAtBmxN,mBA8B7B,OACE,+BAAKz0T,GAAG,cAAc4iF,UAAU,cAAcv2E,OAAA,gBArBjB,SAACizC,GAC9B,MAAO,CACLxV,KAAMwV,EAAIltC,EAAI,KACdlV,IAAKoiD,EAAIjtC,EAAI,MAkB0CmoT,CAAuBl7Q,GAd9D,WAClB,IAAI4iF,EAAW,GACf,OAAQuyL,EAAmBhoU,QACzB,KAAK,EACHy1I,EAAW,CAAEA,SAAU,SAAU,MACnC,KAAK,EACL,QACEA,EAAW,CAAEA,SAAU,SAG3B,OAAOA,EAIkFu3T,KACvF,+BAAK72W,UAAU,uBAEX6xO,EAAmB30T,KAAI,SAACwvN,EAAU1pN,GAChC,OACE,kCACEpW,IAAKoW,EACL4zb,eAAe,kBACf9vE,YAAY,oBACZ9mS,UAAa,4DACb0sI,EAAShxN,OAAOhK,cAAcqC,QAAQ,KAAK,KAC3Cm+K,QAAS,SAAC3mL,GAAD,OAAOsrS,EAAgBtrS,EAAGmhO,KAEnC,gCAAM1sI,UAAU,oCACd,4CAAkB5iF,GAAIsvN,EAASh1M,kB,8EClDjD,I,IAAA,O,IACA,MACA,OACA,Q,IACA,SACA,OACA,Q,IAMA,OACA,QACA,SACA,Q,mDAEA,IAAMo/a,EAA+B,CACnC,CACEp7b,OAAQ,EAAAwvB,kBAAkBwb,yBAC1BhvB,KAAK,wCAEP,CACEhc,OAAQ,EAAAwvB,kBAAkBqb,WAC1B7uB,KAAK,sCAEP,CACEhc,OAAQ,EAAAm1C,kBAAkBnH,WAC1BhyB,KAAK,uCAQHq/a,EAAgC,CACpC,CACEr7b,OAAQ,EAAAwvB,kBAAkBub,kBAC1B/uB,KAAK,sCAEP,CACEhc,OAAQ,EAAAm1C,kBAAkBrB,kBAC1B93B,KAAK,uCAyDHguK,EAAqB,CACzBlnF,wCACAtwC,iD,WAGa,IAAAivF,aACb,IAAAj8C,UAZsB,SAACxzG,GAAD,MAAY,CAClCimE,YAAajmE,EAAMs3D,cAAc2O,YACjC1F,mBAAoBvgE,EAAMyV,UAAU8qD,mBACpC96C,iBAAkBzlB,EAAMgsL,QAAQvmK,oBASPuyK,EAAzB,EA3D4B,SAAChlF,GAAU,IAChC/sC,EAAqF+sC,EAArF/sC,YAAa6qC,EAAwEkC,EAAxElC,mBAAoB3uF,EAAoD6wF,EAApD7wF,KAAMo+C,EAA8CyyC,EAA9CzyC,mBAAoBC,EAA0BwyC,EAA1BxyC,uBAE5D8oY,EAAqD,cAA9B,IAAAxlc,2BAA2Culc,EAAgCD,EA+BlG92W,EAAYrsB,EAAYzN,UAhCG,WAgCSyN,EAAYorJ,WAA0C,GAAK,SAErG,OACE,+BAAK/+H,UAAW,sBAAwBA,GACtC,mCACE62M,gBAlC2B,SAACtrS,EAAG86E,GACnC,OAAQA,EAAK3qE,QACX,IAAK,UAE0B,aAAE,8BAClBolM,OAAO,KACpB,MAEF,SACE,IAAA6zF,aAAYtuN,EAAK3qE,OAAQi4D,EAAYhlE,SACrC,IAAAimS,WAAU/kR,EAAKC,cAAc,CAAC1S,GAAIipE,EAAK3uD,OAAQ2uD,EAAK3qE,OAAQi4D,EAAYhlE,QAK5Eu/D,EAAuBD,EAAqB,GAC5CuwC,EAAmB,CAACt4C,UAAU,KAC9B,IAAA82C,qBAAoB,EAAAn2D,2BAA2ByB,MAC/C,UAAO0P,UAAUsC,eAAiB,EAAAzT,2BAA2ByB,MAiBzDoU,IAAKiX,EAAYjX,IACjBstV,gBAAiB,EAAA/6V,kBAAkBC,QACnC2iR,mBAAoBmlI,U,8ECzF5B,I,IAAA,MACA,O,IACA,M,mDAEA,IAAMC,EAAoB,SAACv2V,GAAU,IAC5Bx6C,EAAwCw6C,EAAxCx6C,SAAU5a,EAA8Bo1D,EAA9Bp1D,MAAOizN,EAAuB79J,EAAvB69J,UAAWztO,EAAY4vE,EAAZ5vE,SAEnC,OACE,+BAAKkvD,UAAW,iBAAmB95B,EAAW,GAAK,UAC9Cz8C,MAAO,CAACy9B,KAAMpW,EAASoW,KAAO,KAAM5sC,IAAKw2B,EAASx2B,IAAM,OAC3D,+BAAK0lF,UAAU,sBACZ10C,GAEH,+BAAK00C,UAAU,cAEXu+K,EAAUrhQ,KAAI,SAACmpE,EAAMrjE,GACnB,OAAO,+BAAKpW,IAAKoW,GACdqjE,EAAK/6B,aASpB2rZ,EAAkB3/S,UAAY,CAC5BpxF,SAAU,UAAUsxF,KACpBlsG,MAAO,UAAU1T,OACjB2mO,UAAW,UAAU9yP,MACrBqlB,SAAU,UAAU/jC,Q,WAUP,IAAAm0G,UAPS,iBAAO,KAGJ,GAIZ,CAA6C+1V,I,iGCxC5D,MACA,O,IACA,OACA,S,IACA,S,mDAEA,IAAMC,EAAyB,SAACx2V,GAAU,IACjCtjG,EAA2GsjG,EAA3GtjG,GAAI4yH,EAAuGtvB,EAAvGsvB,IAAKC,EAAkGvvB,EAAlGuvB,IAAK9pE,EAA6Fu6C,EAA7Fv6C,gBAAiB2sP,EAA4EpyM,EAA5EoyM,iBAAkBC,EAA0DryM,EAA1DqyM,iBAAkBC,EAAwCtyM,EAAxCsyM,oBAAqB1mT,EAAmBo0G,EAAnBp0G,MAAOwkC,EAAY4vE,EAAZ5vE,SAoBhGqma,EAAiB,CACrBC,sBAAsB,EACtBpyK,MAAO,KAGHqyK,GAAyB,cAvBH,WAC1Bjqc,QAAQ4B,IAAI,2BACZ8jT,EAAiB11S,MAGK,SAACA,GACvB01S,EAAiB11S,KAiB+D+5b,GAC5EG,GAAyB,cAfH,WAC1Blqc,QAAQ4B,IAAI,2BACZ+jT,EAAiB31S,MAGK,SAACA,GACvB21S,EAAiB31S,KAS+D+5b,GAElF,OACE,+BAAKn3W,UAAW,+DAAkE5iF,EAC7EqM,MAAO,CAAEy9B,KAAMpW,EAASoW,KAAO,KAAM5sC,IAAKw2B,EAASx2B,IAAM,OAC5D,+BAAK0lF,UAAU,qBACb,iCAAOx/E,KAAK,SAASw/E,UAAU,mCAAmCgwC,IAAKA,EAAKC,IAAKA,EAAK3jI,MAAOA,EAAO4+N,SAAU,SAAC9tN,GAAD,OAAQ41S,EAAoB51S,MAC1I,6CAAK4iF,UAAU,sDAAyDq3W,GACtE,+BAAKr3W,UAAU,YACb,gCAAMp0F,EAAE,0BAA0BskE,OAAO,UAAUqnY,eAAe,QAAQ3hU,YAAY,QACtF,gCAAMhqI,EAAE,2BAA2BiqI,KAAK,UAAU3lE,OAAO,UAAUqnY,eAAe,QAAQ3hU,YAAY,UAG1G,6CAAK51C,UAAU,wDAA2Ds3W,GACxE,+BAAKt3W,UAAU,YACb,gCAAMp0F,EAAE,0BAA0BskE,OAAO,UAAUqnY,eAAe,QAAQ3hU,YAAY,QACtF,gCAAMhqI,EAAE,2BAA2BiqI,KAAK,UAAU3lE,OAAO,UAAUqnY,eAAe,QAAQ3hU,YAAY,WAI5G,kCAAQ51C,UAAU,mDACVkyF,QAAS,kBAAM/rH,MACpB,UAAUt2C,KAAKC,cAAc,CAAC1S,GAAI,0CAM3C85b,EAAuB5/S,UAAvB,4B,WASe,IAAAp2C,UAPS,SAACxzG,GAAD,MAAY,CAClCuvG,aAAcvvG,EAAMs3D,cAAci4C,gBAGT,GAGZ,CAA6Ci6V,I,gICtE5D,OAEA,IAgEM/2W,EAAiB,SAAA6V,IAJF,SAAAA,GACnB,MAAO,YAAaA,GAIfwhW,CAAaxhW,IAEdA,EAAM5mF,QAAQvlB,OAAS,GAAKmsG,EAAM7V,gBACpC6V,EAAM7V,kB,UApEW,SACnBs3W,EACAvlR,GAEG,6DADqG,GACrG,IADDklR,4BACC,aAD4BpyK,aAC5B,MADoC,IACpC,MADyC0yK,mCACzC,aAD6E30K,sBAC7E,MAD8F,GAC9F,KACiD,IAAAxsI,WAAS,GAD1D,qBACIohT,EADJ,KACwBC,EADxB,QAEmC,IAAArhT,WAAS,GAF5C,qBAEIyX,EAFJ,KAEiB6pS,EAFjB,KAGGtjM,GAAU,IAAAl/G,UACVvpI,GAAS,IAAAupI,UAET3lF,GAAQ,IAAA+lF,cACZ,SAAAz/C,GACEA,EAAM7V,iBACFi3W,GAAwBphW,EAAMlqF,SAChCkqF,EAAMlqF,OAAOmwC,iBAAiB,WAAYkkC,EAAgB,CACxDiY,SAAS,IAEXtsF,EAAO89F,QAAU5T,EAAMlqF,QAEzByoP,EAAQ3qJ,QAAU9lB,YAAW,WACvB4zW,EACFG,EAAe76R,aAAY,WACvBy6R,EAAYzhW,KACX+sL,IAGL00K,EAAYzhW,GAEd4hW,GAAsB,KAErB5yK,KAEL,CAACyyK,EAAazyK,EAAOoyK,EAAsBM,EAA6B30K,IAGpEL,GAAQ,IAAAjtI,cACZ,SAACz/C,GAAqC,IAA9B8hW,IAA8B,yDACpC9hW,EAAM7V,iBACNo0K,EAAQ3qJ,SAAWmtC,aAAaw9G,EAAQ3qJ,SACxCkuV,IAAuBH,GAAsBzlR,IAC7C0lR,GAAsB,GAClBR,GAAwBtrb,EAAO89F,SACjC99F,EAAO89F,QAAQtR,oBAAoB,WAAYnY,GAE7Cu3W,GACFj8R,cAAczN,KAGlB,CAACopS,EAAsBllR,EAASylR,EAAoB3pS,EAAa0pS,IAGnE,MAAO,CACLn6Y,YAAa,SAAAhyD,GAAA,OAAKmkE,EAAMnkE,IACxB6qQ,aAAc,SAAA7qQ,GAAA,OAAKmkE,EAAMnkE,IACzBqyD,UAAW,SAAAryD,GAAA,OAAKm3R,EAAMn3R,IACtB6qG,aAAc,SAAA7qG,GAAA,OAAKm3R,EAAMn3R,GAAG,IAC5B+qQ,WAAY,SAAA/qQ,GAAA,OAAKm3R,EAAMn3R,O,8EC1D3B,I,IAAA,MACA,O,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,S,IACA,S,IACA,S,IACA,S,IACA,S,8DAqEe,IAAA21G,UAVS,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClC+nD,eAAgBt3J,EAAMqR,cAAcimJ,kBAGX,GAIZ,EAnEW,SAACtkD,GAAU,IAE5BzD,EAAgCyD,EAAhCzD,aAAc+nD,EAAkBtkD,EAAlBskD,eACf6rC,GAAY,IAAAvhI,sBACZyoY,GAAiB,IAAAt2Q,qBASvB,OACE,mCACE,+BAAKzhG,UAAU,YARV6wG,EAAY,wCACf7rC,EACE,wCACA,mCAAcgzS,UAAWD,IAS3B,wCACElnQ,EAAY,wCAA2B,wCACzC,wCACGknQ,EAAqC,KAApB,wCACpB,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACElnQ,EAAY,wCAAyB,KACrCA,EAAY,wCAA0B,KACtCA,EAAY,wCAAwB,KACpCA,EAAY,wCAA2B,KACvCA,EAAY,wCAAgC,KAC5CA,EAAY,wCAAqB,KACjCA,EAAY,wCAAwB,MAExC,+BAAK7wG,UAAU,oBAEX6wG,GAAa5zF,IAAiB,EAAA5yD,mCAAmCM,KAAO,wCAAwB,KAChGkmJ,GAAa5zF,IAAiB,EAAA5yD,mCAAmCM,OAC7DkmJ,IAAc7rC,EACd,wCACA,KAEJA,EAAiB,wCAA0C,W,wGCtFrE,O,OACA,OACA,OAEA,QAMA,QACA,Q,IACA,O,IACA,S,IACA,SACA,S,IACA,OACA,S,IACA,O,mDAGA,IAiJM0gC,EAAqB,CACzB9oF,sCACAE,8CACAE,2C,WAIa,IAAAkE,UAfS,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCE,eAAgBrvG,EAAMs3D,cAAc+3C,eACpCE,aAAcvvG,EAAMs3D,cAAci4C,aAClC1vF,eAAgB7f,EAAMqN,gBACtBlF,SAAUnI,EAAMgR,YAAY7I,YAUU6vL,EAAzB,EAxJM,SAAChlF,GAAU,IACvB7D,EACuB6D,EADvB7D,WAAYE,EACW2D,EADX3D,eAAgBE,EACLyD,EADKzD,aAAcL,EACnB8D,EADmB9D,kBAAmBE,EACtC4D,EADsC5D,sBAAuBE,EAC7D0D,EAD6D1D,oBACzFzvF,EAA4BmzF,EAA5BnzF,eAAgB1X,EAAY6qG,EAAZ7qG,SAEZmnb,GAAkB,IAAA3nS,QAAO,MAEzBnmG,GADiB,IAAAuyI,qBACUs2Q,EAAjBA,4CANc,GAOc,IAAAxhT,UAASrnG,GAPvB,qBAOvBs5V,EAPuB,KAOPyvD,EAPO,MAS9B,IAAAniT,iBAAgBknS,GAAiB,SAAChnV,GAChC,IACMkiW,EAAsB,CAC1B,EAAAvsZ,uBAAuB5B,QACvB,EAAA4B,uBAAuB1B,cACvB,EAAA0B,uBAAuBvB,kBAJD,CAAC,WAAY,YAAa,QAAS,YAAa,wBAMnD/0C,MAAK,SAAA8mP,GAAA,OAAOnmJ,EAAMlqF,OAAOuqI,QAAQ8lG,QAChDp/I,EACFD,GAAsB,GAEH,KAAfD,GACEq7V,EAAoB3oc,SAASstG,IAEjCD,EAAkB,QAIvB,GAEH,IA2BMu7V,GAAyB,IAAA1iT,cAAY,SAAC2iT,EAAen7V,GACzD,IAAIo7V,EAAsB,KAK1B,OAJID,EAAc/sZ,UAChBgtZ,EAAsBvuc,OAAOmc,KAAKmyb,EAAc/sZ,SAASnqC,MAAK,SAAAo3b,GAAA,OAAiBA,IAAkBr7V,MAG5Fo7V,IACN,IAEGE,GAA6B,IAAA9iT,cAAY,SAACx4C,GAC9C,IAAMu7V,EAAyB,GAC/BtpZ,EAAQ17C,SAAQ,SAAC4kc,GACf,IAAMC,EAAsBF,EAAuBC,EAAen7V,GAC5Dw7V,GAAiBA,EAAjBA,cAAqBL,GACvBC,IACFI,EAAeC,gBAAkBz7V,EAC5Bm7V,EAAchtZ,wBACjBqtZ,EAAettZ,QAAU,2BAA6B8xD,IAK9B,YAAxBw7V,EAAevwZ,MAAsB,UAAWlmC,cAAgB,EAAAyjC,cAAcC,QAGlF8yZ,EAAuBruc,KAAKsuc,MAE9BR,EAAkBO,KACjB,CAACL,EAAwBjpZ,IAoB5B,OAlBA,IAAA6nE,YAAU,WACRwhV,EAA2Bt7V,KAC1B,CAACA,EAAck7V,EAAwBI,KAE1C,IAAAxhV,YAAU,WACR/Z,EAAoB,MACnB,CAACA,IAaF,iCAAOhd,UAAU,UAAUo1D,IAAK4nS,GAC9B,+BAAKh9V,UAAU,mBACb,+BAAKA,UAAU,wBACZwoT,EAAetrY,KAAI,SAACmpE,EAAMrjE,GACzB,IAAMurJ,EAAWtxD,KAAkB52B,EAAKqyX,gBAAkBryX,EAAKqyX,gBAAkBryX,EAAKn+B,MAChFC,EAAa,mBACDk+B,EAAKqyX,gBAAkBryX,EAAKqyX,gBAAkBryX,EAAKn+B,OAChEm+B,EAAKj+B,QAAU,kBAAoB,KACnCmmH,EAAW,kBAAoB,IACpC,OACE,kCAAQ3hK,IAAKoW,EACLg9E,UAAW73C,EACX+pI,QAAS,kBAxFH,SAACzlE,IACzB,IAAAjpD,uBACA,IAAIm1Y,EAAgBlsV,EAAOvkE,MAGvB+0D,IAAiB07V,GAAiB,EAAAtwZ,qBAAqBx7B,SAAW8rb,IACpEA,EAAgB,EAAAtwZ,qBAAqBC,MAEvC00D,EAAoB27V,GACpB,UAAO3gZ,UAAUsC,eAAiBq+Y,EAG9BlsV,EAAOrkE,UAITw0D,EAHgBC,IAAe87V,EAC3B,GACAA,GAKN,OAAQA,GACN,KAAK,EAAAtwZ,qBAAqBx7B,OACxB,UAAiB8wC,UAAU,SAAUtjD,MAAM,IAkEdykT,CAAkBz4O,IACjC/6B,MAAO+6B,EAAK/6B,OAClB,gCAAM00C,UAAU,eACd,4CAAkB5iF,GAAIipE,EAAKl7B,WAE7B,gCAAM60C,UAAW3Z,EAAK96B,4BAK9B,+BAAKy0C,UAAU,kCACb,+BAAKA,UAAU,kCACf,mCAAyBxyB,SAAS,EAAOg7U,eAAgBA,KACvDj7X,EAAezQ,SAASuU,eAAgB,UAAOpb,aAAkBJ,EAAkD,KAAvC,mCAAkB23D,SAAS,W,8ECvJnH,I,IAAA,MACA,OACA,OAEA,QACA,S,IACA,OACA,Q,IACA,S,IACA,S,mDAEA,IA6DMk4H,EAAqB,CACzB1oF,0CACAJ,uC,WAIa,IAAAsE,UAbS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,gBAUEyoF,EAAzB,EAnEO,SAAChlF,GAAU,IACxBzD,EAAoEyD,EAApEzD,aAAcJ,EAAsD6D,EAAtD7D,WAAYG,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBActD,OACE,iCAAO5c,UAAU,YACf,+BAAKA,UAAU,iBACZ,EAAA/3C,iBAAiB/qC,KAAI,SAACmpE,EAAMrjE,GAAP,OACpB,kCAAQpW,IAAKoW,EAAOg9E,UAAW,UAAY3Z,EAAKl+B,YAAc80D,IAAiB52B,EAAKn+B,KAAO,kBAAoB,IACvGgqI,QAAS,kBAjBC,SAACzlE,GAIzB,IAHA,IAAAjpD,uBACAw5C,EAAoByP,EAAOvkE,MAC3B,UAAO8P,UAAUsC,eAAiBmyD,EAAOvkE,KACrCukE,EAAOrkE,QAAS,CAClB,IAAMwwZ,EAAU/7V,IAAe4P,EAAOvkE,KAClC,GACAukE,EAAOvkE,KACX00D,EAAkBg8V,IASS95I,CAAkBz4O,IACjCq/W,YAAWr/W,EAAKn+B,KAChBoD,MAAO+6B,EAAK/6B,OAChB,gCAAM00C,UAAU,eACd,4CAAkB5iF,GAAI,wBAA0BipE,EAAK3uD,QAEzD,gCAAMsoE,UAAW3Z,EAAK96B,4BAI5B,+BAAKy0C,UAAU,oBACb,mCAAsB0gB,MAAOA,IAC1B,SAAC0nS,GAAD,OACC,kCAAQpoT,UAAU,qCACV5iF,GAAG,gBACH80K,QAAS,kBAAMk2N,MACrB,gCAAMpoT,UAAU,cAAc8mS,YAAU,sCAAxC,cAIN,mCAAgBpmR,MAAOA,IACpB,SAACmsO,GAAD,OACC,kCAAQ7sP,UAAU,4CACV5iF,GAAG,sBACH80K,QAAS,kBAAM26J,MACrB,gCAAM7sP,UAAU,cAAc8mS,YAAU,0CAAxC,0B,wGCxDd,O,OACA,OACA,OAEA,QAMA,QAMA,Q,IACA,OACA,S,IACA,OACA,Q,IACA,Q,mDAEA,IAoIMphM,EAAqB,CACzB9oF,sCACAE,8CACAE,0CACA2c,wCACAvc,uD,WAIa,IAAA8D,UAnBS,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCE,eAAgBrvG,EAAMs3D,cAAc+3C,eACpCE,aAAcvvG,EAAMs3D,cAAci4C,aAClC1vF,eAAgB7f,EAAMqN,gBACtBlF,SAAUnI,EAAMgR,YAAY7I,SAC5B+jH,YAAalsH,EAAMyV,UAAUy2G,YAC7BlB,aAAchrH,EAAMyV,UAAUu1G,gBAYQgtE,EAAzB,EA7Ia,SAAChlF,GAAU,IAC7B7D,EAA2D6D,EAA3D7D,WAAYE,EAA+C2D,EAA/C3D,eAAgBE,EAA+ByD,EAA/BzD,aAAcyb,EAAiBhY,EAAjBgY,aAC1C9b,EAA6F8D,EAA7F9D,kBAAmBE,EAA0E4D,EAA1E5D,sBAAuBE,EAAmD0D,EAAnD1D,oBAAqBI,EAA8BsD,EAA9BtD,0BAEjE4/U,GAAkB,IAAA3nS,QAAO,MAJM,GAKO,IAAAkB,UAAA,2BALP,qBAK9BiyP,EAL8B,KAKdyvD,EALc,MAOrC,IAAAniT,iBAAgBknS,GAAiB,SAAChnV,GACR,CAAC,WAAY,YAAa,QAAS,YAAa,uBAAwB,eAC9F,eAAgB,oBAEmC3gG,MAAK,SAAA8mP,GAAA,OAAqC,OAA9BnmJ,EAAMlqF,OAAOuqI,QAAQ8lG,QAGhFp/I,EACFD,GAAsB,GAEH,KAAfD,IACFD,EAAkB,IAClBQ,EAA0B,WAK/B,GAEH,IAkCM+6V,GAAyB,IAAA1iT,cAAY,SAAC2iT,EAAen7V,GACzD,IAAIo7V,EAAsB,KAK1B,OAJID,EAAc/sZ,UAChBgtZ,EAAsBvuc,OAAOmc,KAAKmyb,EAAc/sZ,SAASnqC,MAAK,SAAAo3b,GAAA,OAAiBA,IAAkBr7V,MAG5Fo7V,IACN,IAEGE,GAA6B,IAAA9iT,cAAY,SAACx4C,GAC9C,IAAMu7V,EAAyB,GAC/B,EAAA/sZ,wBAAwBj4C,SAAQ,SAAC4kc,GAC/B,IAAMC,EAAsBF,EAAuBC,EAAen7V,GAC5Dw7V,GAAiBA,EAAjBA,cAAqBL,GACvBC,IACFI,EAAeC,gBAAkBz7V,EACjCw7V,EAAettZ,QAAU,2BAA6B8xD,GAExDu7V,EAAuBruc,KAAKsuc,MAE9BR,EAAkBO,KACjB,CAACL,IAUJ,OARA,IAAAphV,YAAU,WACRwhV,EAA2Bt7V,KAC1B,CAACA,EAAck7V,EAAwBI,KAE1C,IAAAxhV,YAAU,WACR/Z,EAAoB,MACnB,CAACA,IAGF,iCAAOhd,UAAU,UAAUo1D,IAAK4nS,GAC9B,+BAAKh9V,UAAU,mBACb,+BAAKA,UAAU,wBACZwoT,EAAetrY,KAAI,SAACmpE,EAAMrjE,GACzB,IAAMurJ,EAAWtxD,KAAkB52B,EAAKqyX,gBAAkBryX,EAAKqyX,gBAAkBryX,EAAKn+B,MAChFC,EAAa,mBACDk+B,EAAKqyX,gBAAkBryX,EAAKqyX,gBAAkBryX,EAAKn+B,OAChEm+B,EAAKj+B,QAAU,kBAAoB,KACnCmmH,EAAW,kBAAoB,IACpC,OACE,kCAAQ3hK,IAAKoW,EACLg9E,UAAW73C,EACX+pI,QAAS,kBA9EH,SAACzlE,GACzB,GAAIiM,IAAiB,EAAAjrE,eAAeC,SAApC,EAGA,IAAA8V,uBACA,IAAIm1Y,EAAgBlsV,EAAOvkE,KAU3B,GAPI+0D,IAAiB07V,GAAiB,EAAAtwZ,qBAAqBx7B,SAAW8rb,IACpEA,EAAgB,EAAAtwZ,qBAAqBC,MAEvC00D,EAAoB27V,GACpB,UAAO3gZ,UAAUsC,eAAiBq+Y,EAG9BlsV,EAAOrkE,QAITw0D,EAHgBC,IAAe87V,EAC3B,GACAA,GAKFA,IAAkB,EAAAtwZ,qBAAqBx7B,QACzC,UAAiB8wC,UAAU,cAA3B,GAA2C,GAIzCg7Y,IAAkB,EAAAtwZ,qBAAqBI,aACzC,eACA,UAAiBojO,oBAAoB+iG,2BAArC,kBAgD+B9vD,CAAkBz4O,IACjC/6B,MAAO+6B,EAAK/6B,OAClB,gCAAM00C,UAAU,eACd,4CAAkB5iF,GAAIipE,EAAKl7B,WAE7B,gCAAM60C,UAAW3Z,EAAK96B,4BAK9B,+BAAKy0C,UAAU,kCACb,+BAAKA,UAAU,yC,wGC1IzB,O,OACA,OACA,QAKA,O,IACA,OACA,SACA,Q,IACA,OACA,U,IAIA,S,IACA,Q,mDAEA,IAqHM0lG,EAAqB,CACzB9oF,sCACAI,0CACAoC,2C,WAGa,IAAA8B,UAXS,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,gBASIyoF,EAAzB,EA3Ha,SAAChlF,GAAU,IAE9BzD,EAAoEyD,EAApEzD,aAAcJ,EAAsD6D,EAAtD7D,WAAYG,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBAChD+/R,GAAa,IAAAtnP,QAAO,IACpBqnP,EAAWz/R,GACG,YAAfJ,IACgB,SAAfA,GAAyB/yG,OAAOmc,KAAP,sCAAgD5Q,MAAK,SAAA21F,GAAA,OAAa6R,IAAe7R,MAE1G62F,GAAU,IAAA3qC,UAAQ,kBACtB,EAAAvyG,cAAcwB,cADQ,mDAGtB,EAAAtnC,cAAcgsC,cACd,EAAAhsC,cAAc0nC,eACb,IAbkC,GAcD,aAAiBs7I,GAA7Cm7M,EAd6B,EAc7BA,aAAc/zL,EAde,EAcfA,WAEtB,IAAAlyF,YAAU,WACR,IAAM8hV,EAAY/uc,OAAOyhB,OAAOoxX,EAAW/yR,SACvC8yR,IAAazzL,GACf,IAAAopG,gBAAewmJ,IAEf,IAAAvmJ,aAAYumJ,KAGb,CAACn8D,EAAUzzL,IAEd,IAAI/5J,GAAUA,EAAVA,qDAGC+5J,GAAa+zL,IAChB9tV,EAAUplD,OAAOmc,KAAKipC,GAASx4C,QAAO,SAACoic,EAAY9tW,GAEjD,OAAMgyS,EAAa72V,cAAgB62V,EAAa72V,aAAai3V,KAAKvzY,OAAS,GACtEmhG,IAAc,EAAA3gD,mCAAmCI,QAMlDuyV,EAAa9sV,yBAA2B8sV,EAAa9sV,wBAAwBktV,KAAKvzY,OAAS,GAC3FmzY,EAAa7sV,WAAa6sV,EAAa7sV,UAAUitV,KAAKvzY,OAAS,GAC/DmzY,EAAa5sV,cAAgB4sV,EAAa5sV,aAAagtV,KAAKvzY,OAAS,GACrEmzY,EAAa3sV,qBAAuB2sV,EAAa3sV,oBAAoB+sV,KAAKvzY,OAAS,GACrFmhG,IAAc,EAAA3gD,mCAAmCS,YAKnDguZ,EAAW9tW,GAAa97C,EAAQ87C,GAEzB8tW,GAhBEA,IAiBR,KAGL,IAkCMC,EAAmB,SAAC/tW,GACxB,MAAO,2BAA6BA,GAGtC,OACE,+BAAKhL,UAAW,mBAAqB08S,EAAW,YAAc,IAAKG,YAAU,cAC3E,+BAAK78S,UAAU,mBACXipH,EACE,wCACAn/M,OAAOmc,KAAKipC,GAAShyC,KAAI,SAAC8tF,GAAD,OACzB,kCAAQp+F,IAAKo+F,EACLoqD,IAAK,SAAAksG,GAAA,OAAMq7I,EAAW/yR,QAAQ5e,GAAas2J,GAC3CthK,UAAW,kBAAoBgL,EAC/BknF,QAAS,kBA/CD,SAAClnF,GAKzB,OAJA4R,EAAkB5R,GAClBgS,EAAoBhS,GACpB,UAAOhzC,UAAUsC,eAAiB0wC,GAClC,IAAA2yH,eACQ3yH,GACN,KAAK,EAAA3gD,mCAAmC/B,KACtCs0D,EAAkB,IAClB,MACF,KAAK,EAAAvyD,mCAAmCd,OACtCqzD,EAAkB,IAClBI,EAAoB,EAAA3yD,mCAAmCd,SACvD,IAAA4kS,qBACA,MACF,KAAK,EAAA9jS,mCAAmC1B,QACtC,IAAA0lS,qBACA,MACF,KAAK,EAAAhkS,mCAAmC7D,OACtCo2D,EAAkB,IAClBI,EAAoB,EAAA3yD,mCAAmC7D,SACvD,IAAA4nS,qBACA,MACF,KAAK,EAAA/jS,mCAAmCM,KACtCiyD,EAAkB,IAClBI,EAAoB,EAAA3yD,mCAAmCM,OACvD,IAAA2jS,mBACA,MACF,IAAK,SACH,IAAAI,qBAIJ,aAAE,6BAA6BniR,YAAY,4BAeZuyP,CAAkB9zN,KACvC,gCAAMhL,UAAU,eACd,4CAAkB5iF,GAAI27b,EAAiB/tW,gB,kHC1HvD,O,OACA,OACA,QAKA,O,IACA,OACA,SACA,Q,IACA,O,IACA,O,IACA,O,IACA,QACA,SACA,Q,IACA,Q,IACA,SACA,UACA,Q,IACA,S,IACA,Q,mDAEO,IAAM2yH,EAAcA,EAAdA,YAAc,WACzB,UAAajgK,aAAY,GACzB,UAAaW,YAAYhkD,MACzB,UAAUokD,eAAc,GACxB,UAAUG,sBAAqB,IA0N3B8mI,EAAqB,CACzB9oF,sCACAI,0CACAoC,2C,WAGa,IAAA8B,UAXS,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,gBASIyoF,EAAzB,EA7NgB,SAAChlF,GAAU,IAEjCzD,EAAoEyD,EAApEzD,aAAcJ,EAAsD6D,EAAtD7D,WAAYG,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBAChD+/R,GAAa,IAAAtnP,QAAO,IACpB0iT,GAAiB,IAAAt2Q,qBACjB9sD,GAAmB,IAAAd,uBACrB3kF,EAAU6oZ,EAAiBA,EAAjBA,kEACRr7D,EAAWz/R,GACZJ,IAAe,EAAAh2D,2BAA2BgD,SAC1CgzD,IAAe,EAAAlxD,uBAAuB1B,eACtC4yD,IAAe,EAAAlxD,uBAAuBvB,kBACtCyyD,IAAe,EAAAh2D,2BAA2BkD,UACzC8yD,IAAe,EAAAh2D,2BAA2ByB,MAAQx+C,OAAOmc,KAAKipC,GAAS75C,MAAK,SAAA21F,GAAA,OAAa6R,IAAe7R,MAExG62F,GAAU,IAAA3qC,UAAQ,kBAAMwlP,EAAW,CAAC,EAAA79X,cAAc8qC,SAAU,KAAI,CAAC+yV,IAd/B,GAeJ,aAAiB76M,GAA7Cm7M,EAfgC,EAehCA,aAAc/zL,EAfkB,EAelBA,UAG+B,KAFhC,IAAAv/I,iBAAgBirE,GAEK9qI,SAMxCqlD,EAAUplD,OAAOmc,KAAKipC,GAASx4C,QAAO,SAACoic,EAAY9tW,GAIjD,OAHIA,IAAc,EAAAnkD,2BAA2BjB,OAC3CkzZ,EAAW9tW,GAAa97C,EAAQ87C,IAE3B8tW,IACN,KAG6B,eAA9B,IAAAtnc,6BACF09C,EAAUplD,OAAOmc,KAAKipC,GAASx4C,QAAO,SAACoic,EAAY9tW,GAIjD,OAHIA,IAAc,EAAAr/C,uBAAuB1B,gBACvC6uZ,EAAW9tW,GAAa97C,EAAQ87C,IAE3B8tW,IACN,MAGA7vP,GAAa+zL,GAAgBA,EAAarzV,SAAgD,IAArCqzV,EAAarzV,QAAQyzV,KAAKvzY,SAClFqlD,EAAUplD,OAAOmc,KAAKipC,GAASx4C,QAAO,SAACoic,EAAY9tW,GAIjD,OAHIA,IAAc,EAAAnkD,2BAA2B8C,UAC3CmvZ,EAAW9tW,GAAa97C,EAAQ87C,IAE3B8tW,IACN,KA/CmC,OAmDV,IAAA16C,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAnDb,qBAmDjCunW,EAnDiC,KAmDzB3+J,EAnDyB,MAqDxC,IAAArhG,YAAU,WACR,IAAM8hV,EAAY/uc,OAAOyhB,OAAOoxX,EAAW/yR,UAClB,OAArB+qB,GACEA,GAAoBA,EAAiB/jH,MAAQ+jH,EAAiB/jH,KAAK42E,uBAEnEk1S,IAAazzL,GACf,IAAAopG,gBAAewmJ,IAEf,IAAAvmJ,aAAYumJ,MAGf,CAACn8D,EAAUzzL,EAAW8tK,EAAQpiP,IAEjC,IAoEMw5M,EAAoB,WACxB,UAAazwR,aAAY,GACzB,UAAaW,YAAYhkD,MACzB,UAAUokD,eAAc,GACxB,UAAUO,uBAAsB,GAChC8kC,YAAW,WACT,UAAU9kC,uBAAsB,KAC/B,MAGCqvR,EAAoB,WAGxB,UAAa3wR,aAAY,GACzB,UAAO1F,UAAUsC,eAAiB,eAG9Bi0R,EAAuB,WAC3B,UAAa7wR,aAAY,GACzB,UAAaC,UAAU,YAAavoD,MAAM,GAC1C,UAAO4iD,UAAUsC,eAAiB,aAG9Bk0R,EAAmB,WACvB,UAAa9wR,aAAY,GACzB,UAAaW,YAAYhkD,MACzB,UAAO+gD,UAAUI,aAAc,EAC/B,UAAU+E,YAAY/sD,SAAQ,SAACw7C,GAC7B,GAAIhyC,MAAMC,QAAQ+xC,EAAMkhH,mBAAqBlhH,EAAMkhH,iBAAiBrmK,OAAQ,CAE1E,GAAImlD,EAAM8R,gBAAiB,OAE3B9R,EAAMgtH,2BAKNyyK,EAAkB,aAGlBC,EAAmB,WACvB,UAAahxR,aAAY,GACzB,UAAaW,YAAYhkD,OAGrB2+b,EAAuB,WAC3B,UAAUp6Y,sBAAqB,GAC/B,UAAUI,uBAAsB,GAChC,UAAoBi6Y,uBACpBn1W,YAAW,WACT,UAAU9kC,uBAAsB,KAC/B,MAGL,OACE,+BAAKghC,UAAW,mBAAqB08S,EAAW,YAAc,IAAKG,YAAU,cAC3E,+BAAK78S,UAAU,mBACZ20C,GAAoBA,EAAiB/jH,OAAS+jH,EAAiB/jH,KAAK42E,oBACjE,mCAAoB11E,QAAS6iH,EAAkBozF,SAAU,kBAAM3P,EAAY,IAAIo4D,YAAY,IAC3FvnE,EACE,wCACAn/M,OAAOmc,KAAKipC,GAAShyC,KAAI,SAAC8tF,GAAD,OACzB,kCAAQp+F,IAAKo+F,EACLoqD,IAAK,SAAAksG,GAAA,OAAMq7I,EAAW/yR,QAAQ5e,GAAas2J,GAC3CthK,UAAW,kBAAoBgL,EAC/BknF,QAAS,kBArIH,SAAClnF,GAKzB,OAJA4R,EAAkB5R,GAClBgS,EAAoBhS,GACpB,UAAOhzC,UAAUsC,eAAiB0wC,EAClC2yH,IACQ3yH,GACN,KAAK,EAAAnkD,2BAA2ByB,KAC9Bs0D,EAAkB,IAClB,MACF,KAAK,EAAA/1D,2BAA2ByC,SAC9B,UAAS8hB,OACT,MACF,KAAK,EAAAvkB,2BAA2B0C,OAC9BqzD,EAAkB,IAClBI,EAAoB,EAAAn2D,2BAA2B0C,QAC/C4kS,IACA,MACF,KAAK,EAAAtnS,2BAA2B8B,OAC9Bi0D,EAAkB,IAClBI,EAAoB,EAAAn2D,2BAA2B8B,QAC/C0lS,IACA,MACF,KAAK,EAAAxnS,2BAA2B+C,MAC9BgzD,EAAkB,IAClB4xO,IACA,MACF,KAAK,EAAA3nS,2BAA2BnvB,KAC9BklF,EAAkB,IAClB6xO,IACA,MACF,KAAK,EAAA5nS,2BAA2B9Q,MAC9B6mE,EAAkB,IAClB,MACF,KAAK,EAAA/1D,2BAA2BkD,QAC9B6yD,EAAkB,EAAA/1D,2BAA2BkD,UAC7C,IAAA4kS,sBACA,MACF,KAAK,EAAA9nS,2BAA2BiC,UAC9B8zD,EAAkB,IAClB2xO,IACA,MAIF,KAAK,EAAA1nS,2BAA2BoD,cAC9B+uZ,IACD,MACF,KAAK,EAAArtZ,uBAAuBvB,iBAC1BwyD,EAAkB,EAAAjxD,uBAAuBvB,mBACzC,IAAAwkS,2BACA,MACD,IAAK,QACHF,KAaJ,aAAE,6BAA6BniR,YAAY,4BAoEVuyP,CAAkB9zN,KACvC,gCAAMhL,UAAU,eACd,4CAAkB5iF,GAAI,2BAA6B4tF,e,8ECxOrE,I,IAAA,O,IACA,O,IAEA,O,IACA,OACA,SACA,SACA,Q,IAKA,MACA,QACA,Q,6DAGe,IAAI,WACjB,IAAI3wF,EAAOjF,KAGXA,KAAKg2D,KAAO,aAKZh2D,KAAK6jc,qBAAuB,WAC1B5+b,EAAKw+F,kBAGPzjG,KAAKizP,eAAiB,WACpB,UAAax5L,SACX,UAAaC,OAAOM,OACpB/0D,EAAKwjT,aACLxjT,EACA,UAAa20D,WAAWojC,SAQ1B,UAAavjC,SACX,UAAaC,OAAOK,SACpB90D,EAAKujD,UACLvjD,EACA,UAAa20D,WAAWojC,UAI5Bh9F,KAAKwoD,UAAY,SAASJ,GAExB,IAAI+M,EAAa,UAAU/J,gBAC3B,GAAI+J,GAAcA,EAAW/I,gBAAiB,CAC5C,IAAMi4H,EAAa,UAAMliL,WAEzB,GADqBkiL,EAAWz0H,cAAci4C,eACzB,EAAAtxD,uBAAuB1B,cAC1C,OAGF,IAAIk3J,EAAM52I,EAAW/I,kBACrB,GAAI2/I,KAASA,EAAIrgJ,kBAAoBqgJ,EAAI7/I,kBAAoB6/I,EAAIvpC,4BAA8BupC,EAAItpC,gCAAiC,EAElI,IAAAvzG,gBAAe68I,EAAK,KAAM,EAAApvJ,0BAA0BC,UAAW,KAAM,KAAM,EAAAC,0BAA0BD,WACrG,IAAMknZ,EAAU,UAAUrpb,KAAKC,cAAc,CAAE1S,GAAI,0CACnD+jM,EAAIlI,mBAAmBigQ,GAEvB,UAAM7/a,UAAS,IAAAujF,mBAAkB,EAAAjxD,uBAAuB1B,gBACxD,UAAM5wB,UAAS,IAAAyjF,wBAAsB,IAErC,IAAM7uC,EAAqBwrH,EAAWt2K,UAAU8qD,mBAEhD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,KAM/D5zD,EAAKmuP,yBAGPpzP,KAAKyjG,eAAiB,WAOlBzjG,KAAK2oT,kBAIT3oT,KAAK2oT,eAAiB,WAEpB,IACEC,EADW,GAEXC,EAFW,GAITC,EAAS1vT,SAAS8oD,cAAc,OACpC4mQ,EAAOl3N,YAAc,YAErB,IAAIm3N,GAAO,aAAED,GACbC,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAuBVkpT,EAAKpmN,GAAG,QAhBR,WACE,IACIqmN,SACDJ,EAAWC,GACZG,EAAQH,EAAYD,EACpBA,EAJW,GAKXC,EALW,GAKUG,IAErBA,EAAQJ,EAAWC,EACnBA,EARW,GASXD,EATW,GASSI,GAEtB,UAAazgQ,UAAU,cAAetjD,GAAM,GAC5CA,EAAKy+F,YAAc,CAAEh1C,MAAOo6P,EAAQnpT,MAAOipT,EAAU/oT,OAAQgpT,GAC7D5jT,EAAKguP,oBAGP81D,EAAKpnC,UAAS,aAAE,SAEhB,UAAO37N,UAAU56C,KAAO,aACxB29S,EAAKh5E,KAAK,MAAV,iBAIF/vO,KAAKozP,sBAAwB,WACvBnuP,EAAKyuP,2BACPzuP,EAAKyuP,0BAA2B,EAChC,UAAa9vJ,YAAY3+F,EAAM,UAAay0D,OAAOK,UAInD90D,EAAKw+F,mBAGTzjG,KAAKyoT,aAAe,SAAS9kQ,GAC3B,GAAG1+C,EAAKy+F,YAAYh1C,QAAU,aAAEv2D,QAAQwH,QAAU,IAAM,CACtD,IAAIspT,EAAO,UAAajpN,kBACrBipN,GACDtlQ,EAAI2rC,UAAUrqF,EAAKy+F,YAAYh1C,MAAOu6P,EAAK7uS,EAAI,GAAI6uS,EAAK5uS,EAAI,GAAI,GAAI,MAI1Era,KAAKq4D,QAAU,SAASuyG,EAASxnE,GAC3BA,GACF,UAAaQ,YAAY3+F,EAAM,UAAay0D,OAAOM,QACnDh6D,KAAK0zP,0BAA2B,IAelC,UAAazqM,YAAYhkD,GACzB,UAAa2+F,YAAY3+F,GACzB,UAAO+gD,UAAUE,OAAQ,GAbzBlmD,KAAKw1D,QAEPx1D,KAAKw1D,KAAO,SAASr/D,GAChBA,IACDA,EAAE40F,iBACF50F,EAAE20F,sB,6FCvKR,O,OACA,OACA,SACA,Q,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,S,IACA,O,IACA,OACA,Q,IACA,OAEA,QACA,S,IACA,QACA,QACA,S,mDAKA,IAgLMwlG,EAAqB,CACzBx3H,gDACA8uC,2C,WAIa,IAAAkE,UAbS,SAACxzG,GAAD,MAAY,CAClCugE,mBAAoBvgE,EAAMyV,UAAU8qD,mBACpCo1D,SAAU31H,EAAMgR,YAAY2kH,SAC5BxmB,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,gBASIyoF,EAAzB,EAtLO,SAAChlF,GAAU,IAExB7D,EAAiD6D,EAAjD7D,WAAYI,EAAqCyD,EAArCzD,aAAcD,EAAuB0D,EAAvB1D,oBAC3B0/R,EAAWz/R,GAA+B,WAAfJ,EAC3B8/R,GAAa,IAAAtnP,QAAO,KAiB1B,IAAAt+B,YAAU,WACR,IAAM7nE,EAAUplD,OAAOyhB,OAAOoxX,EAAW/yR,SACtC8yR,GACD,IAAArqF,gBAAenjQ,IAEf,IAAAojQ,aAAYpjQ,KAGb,CAACwtV,IAEJ,IAyDMy8D,EAAsB,WAC1B,UAAS/tY,QAGLguY,EAAqB,WACzB,IAAMvuY,EAAK,UAAUtL,mBACfpI,EAAQ,UAAOC,aAEfiiZ,GADW,IAAA3vY,mBACexoD,MAAK,SAAA0kC,GAAA,OAAQA,EAAKh1B,KAAKhD,iBAAiBlc,cAAcnC,SAAS,YAJhE,GAKoB,IAAAwlI,0BALpB,qBAKxBG,EALwB,KAO3BkzN,GAP2B,UAO3BA,GAGJA,EAAa,CAAC54U,EAAGq7C,EAAGr7C,EAAI,IAAM2nC,EAAO1nC,EAAGo7C,EAAGp7C,EAAI,GAAK0nC,GACpD,IAAI8U,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAc,GAAI,GAAI,SAAU28R,EAAWlzN,GAC/EmkU,GACFt0P,EAAkB94I,EAASotY,EAAezob,KAAM,CAAC,IAGnDw3U,EAAa,CAAC54U,EAAGq7C,EAAGr7C,EAAI,IAAM2nC,EAAO1nC,EAAGo7C,EAAGp7C,EAAI,IAAM0nC,GACrD8U,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAc,GAAI,IAAK,SAAU28R,EAAYlzN,GAC7EmkU,GACFt0P,EAAkB94I,EAASotY,EAAezob,KAAM,CAAC,IAGnDw3U,EAAa,CAAC54U,EAAGq7C,EAAGr7C,EAAGC,EAAGo7C,EAAGp7C,EAAI,IAAM0nC,GACvC8U,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAc,GAAI,GAAI,SAAU28R,EAAYlzN,GAC5EmkU,GACFt0P,EAAkB94I,EAASotY,EAAezob,KAAM,CAAC,EAAG,EAAG,IAGzDw3U,EAAa,CAAC54U,EAAGq7C,EAAGr7C,EAAI,IAAM2nC,EAAO1nC,EAAGo7C,EAAGp7C,EAAI,IAAM0nC,GACrD8U,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAc,GAAI,IAAK,SAAU28R,EAAYlzN,GAC7EmkU,GACFt0P,EAAkB94I,EAASotY,EAAezob,KAAM,CAAC,EAAG,IAGtDw3U,EAAa,CAAC54U,EAAGq7C,EAAGr7C,EAAGC,EAAGo7C,EAAGp7C,EAAI,IAAM0nC,GACvC8U,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAc,GAAI,GAAI,SAAU28R,EAAYlzN,GAC5EmkU,GACFt0P,EAAkB94I,EAASotY,EAAezob,KAAM,CAAC,EAAG,EAAG,IAGzDw3U,EAAa,CAAC54U,EAAGq7C,EAAGr7C,EAAGC,EAAGo7C,EAAGp7C,EAAI,IAAM0nC,GACvC8U,EAAU,UAAiBR,SAAS,IAAI,EAAJ,QAAc,GAAI,IAAK,SAAU28R,EAAYlzN,GAC7EmkU,GACFt0P,EAAkB94I,EAASotY,EAAezob,KAAM,CAAC,EAAG,EAAG,KAIrDm0L,EAAoB,SAAC94I,EAASrmB,EAAMo/J,GAC1B,UAAU53I,aAAanB,GACjBpL,WAEdrtD,SAAQ,SAAC2wD,EAAMnhD,GACfgiM,EAAYz1M,SAASyT,KAEvB,IAAAshD,gBAAeH,EAAM,KAAM,EAAApS,0BAA0BnM,KAAMA,EAAK7sC,UAAUqE,GAAI,KAAMwoC,EAAKh4B,sBAK/F,OACE,+BAAKoyE,UAAW,eAAiB6c,GAAcI,GAAiC,WAAjBA,EAA4B,YAAc,IAAK4/R,YAAU,UACtH,+BAAK78S,UAAU,iBAnJM,IAAAyhG,qBAGE,CACrB,SAAW,YAAa,MAAO,YAGV,CACrB,SAAU,SAAU,YAAa,YAAa,MAAO,aA6IzBvkL,KAAI,SAACmpE,EAAMrjE,GAAP,OAC5B,kCAAQpW,IAAKoW,EACLoyI,IAAK,SAAAksG,GAAA,OAAMq7I,EAAW/yR,QAAQ5mG,GAASs+O,GACvCthK,UAAW,4CAA8C3Z,EACzD6rG,QAAS,kBAhID,SAAConR,GACzBlsc,QAAQ4B,IAAIsqc,GACZ,UAAOthZ,UAAUsC,eAAiBg/Y,EAClCt8V,EAAoBs8V,GAHmB,OAuBY,IAAAvkU,0BAvBZ,qBAuBhCG,EAvBgC,KAuBZC,EAvBY,KAwBvC,OAAQmkU,GACN,IAAK,SACH,UAAiB7tY,SAAS,IAAI,EAAJ,QAAW,UAAW4wU,WAAY,SAAU,KAAMlnQ,GAC5E,MACF,IAAK,SACH,UAAiB1pE,SAAS,IAAI,EAAJ,QAAc,UAAW4wU,WAAY,YAAa,KAAMnnQ,GAClF,MACF,IAAK,YACH,UAAiBzpE,SAAS,IAAI,EAAJ,QAAc,UAAW4wU,WAAY,YAAa,KAAMnnQ,GAClF,MACF,IAAK,YACH,UAAiBzpE,SAAS,IAAI,EAAJ,QAAiB,SAAU,KAAMypE,GAC3D,MACF,IAAK,MACH,UAAiBzpE,SAAS,IAAI,EAAJ,QAAQ,UAAW4wU,WAAY,SAAU,KAAMnnQ,GACzE,MACF,IAAK,YACHkkU,IACA,MACF,IAAK,WAEHD,IAMA5rc,OAAO+xD,YAAc,KAAO/xD,OAAOwqD,WA6ER+mQ,CAAkBz4O,IACjCkzX,aAAYlzX,a,8ECvLhC,I,IAAA,Q,IACA,Q,IACA,O,6DAEY,WACV,IAAIhrB,SAwBJ,OAtBEA,EAD4B,WAA3B,UAAWr5C,YACH,CACP,IAAI,EAAJ,QAAU,EAAG,EAAG,WAChB,IAAI,EAAJ,QAAU,MAAO,EAAG,YACpB,IAAI,EAAJ,QAAU,MAAO,MAAO,eACxB,IAAI,EAAJ,QAAU,EAAG,MAAO,eAGb,CACP,IAAI,EAAJ,QAAU,EAAG,EAAG,WAChB,IAAI,EAAJ,QAAU,GAAI,EAAG,YACjB,IAAI,EAAJ,QAAU,GAAI,GAAI,eAClB,IAAI,EAAJ,QAAU,EAAG,GAAI,eAIT,CACV,IAAI,EAAJ,QAASq5C,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,IAC3B,IAAI,EAAJ,QAASA,EAAO,GAAIA,EAAO,O,6FC1B/B,O,OACA,OACA,OACA,S,IAGA,S,IACA,S,IACA,S,IACA,S,IACA,O,IACA,S,IACA,S,IACA,S,8DAgGe,IAAA6lD,UATS,SAACxzG,GAAD,MAAY,CAClCugE,mBAAoBvgE,EAAMyV,UAAU8qD,mBACpC4uC,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,gBAGT,GAGZ,EA9FQ,SAACyD,GAAU,IACzBzyC,EAAsByyC,EAAtBzyC,mBACA4uC,EAA4B6D,EAA5B7D,WAAYI,EAAgByD,EAAhBzD,aAFa,GAGY,IAAAs5C,UAAS,IAHrB,qBAGzBijT,EAHyB,KAGTC,EAHS,QAIA,IAAAljT,UAAS,IAJT,qBAIzBpnG,EAJyB,KAIfuqZ,EAJe,QAKN,IAAAnjT,UAAS,IALH,qBAKzBlnG,EALyB,KAKlBsqZ,EALkB,QAMQ,IAAApjT,UAAS,IANjB,qBAMzBnnG,EANyB,KAMXwqZ,EANW,QAON,IAAArjT,UAAS,IAPH,qBAOzBlkG,EAPyB,KAOlBwnZ,EAPkB,KAmBhC,OAVA,IAAA9iV,YAAU,WACa,YAAjB9Z,IACF08V,EAAS,UAAUhxY,aAAa,SAChCixY,EAAgB,UAAUjxY,aAAa,eACvCkxY,EAAS,UAAUlxY,aAAa,SAChC+wY,EAAY,UAAUlyY,eACtBiyY,GAAkB,IAAA72L,yBAEnB,CAAC30M,EAAoBgvC,IAGtB,+BAAKjd,UAAW,sCAAwC6c,GAAcI,GAAiC,YAAjBA,EAA6B,YAAc,IAAK4/R,YAAU,WAC9I,+BAAK78S,UAAU,iBACb,+BAAKA,UAAU,sBACb,4CAAkB5iF,GAAI,mCAExB,+BAAK4iF,UAAU,gBACb,+BAAKA,UAAU,4BACb,+BAAKA,UAAU,2CACb,+BAAKA,UAAU,gBAAgB8mS,YAAU,0CACvC,4CAAkB1pX,GAAI,4CAExB,+BAAK4iF,UAAU,gBACb,+BAAKA,UAAU,mCACb,gCAAMA,UAAU,qBAAqB8mS,YAAU,kCAC7C,4CAAkB1pX,GAAI,oCAExB,gCAAM4iF,UAAU,qBACbw5W,EAAeh2L,cAGpB,+BAAKxjL,UAAU,oCACb,gCAAMA,UAAU,qBAAqB8mS,YAAU,uCAC7C,4CAAkB1pX,GAAI,yCACxB,gCAAM4iF,UAAU,qBACbw5W,EAAe31L,4BAM1B,+BAAK7jL,UAAU,uBACb,yCAEF,+BAAKA,UAAU,uBACb,yCAEF,+BAAKA,UAAU,yBAEX7wC,EAAStlD,OAAS,EAAI,mCAAqBslD,SAAUA,IAAc,IAGvE,+BAAK6wC,UAAU,sBAEX3wC,EAAMxlD,OAAS,EAAI,mCAAkBwlD,MAAOA,IAAW,IAG3D,+BAAK2wC,UAAU,6BAEX5wC,EAAavlD,OAAS,EAAI,mCAAyBulD,aAAcA,IAAkB,IAGvF,+BAAK4wC,UAAU,sBAEX3tC,EAAMxoD,OAAS,EAAI,mCAAiBwoD,MAAOA,IAAW,IAG1D,+BAAK2tC,UAAU,yBACb,gD,iGC5FZ,MACA,OACA,O,IACA,OACA,QACA,Q,8DAsCe,IAAAkhB,UATS,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAGJ,GAGZ,EApCU,SAAC0+F,GAAU,IAC1B1+F,EAAgB0+F,EAAhB1+F,YACFuhQ,EAAQ,UAAU58M,iBAAiB,EAAAlV,eAAeC,WAEpDooZ,EAAc,GAKlB,OAJAv2L,EAAM/vQ,SAAQ,SAASgc,GACrBsqb,EAAYtqb,EAAEljB,QAAUwtc,EAAYtqb,EAAEljB,QAAU,GAAK,KAIrDxC,OAAOk8V,QAAQ8zG,GAAa58b,KAAI,YAAyB,yBAAvB68b,EAAuB,KAAX96R,EAAW,KACnD+6R,EAAoC,aAAhBh4b,EAA6B+3b,EAAa,KAAO,IAAAttX,YAAWstX,GAAc,KAClG,OACE,+BAAK/5W,UAAU,6CAA6CpzF,IAAKmtc,GAC/D,+BAAK/5W,UAAU,iBAAiB,IAAMg6W,GACtC,+BAAKh6W,UAAU,gBACb,+BAAKA,UAAU,sBACb,4CAAkB5iF,GAAG,mCADvB,KAEK6hK,Y,8ECzBjB,I,IAAA,MACA,OACA,O,IACA,OACA,QACA,Q,8DAuCe,IAAA/9D,UATS,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAGJ,GAGZ,EArCW,SAAC0+F,GAAU,IAC5B1+F,EAAe0+F,EAAf1+F,YACDyrU,EAAS,UAAU9mR,iBAAiB,EAAAlV,eAAe7H,OAErDqwZ,EAAc,GAChBC,SAIF,OAFAzsH,EAAOj6U,SAAQ,SAASgc,GAAKyqb,EAAYzqb,EAAEljB,QAAU2tc,EAAYzqb,EAAEljB,QAAU,GAAK,KAGhF2tc,EAAY/8b,KAAI,SAACi9b,EAAaC,GAG5B,OAFAF,EAAmC,aAAhBl4b,EAA6Bo4b,EAAY,KAAO,IAAA3tX,YAAW2tX,GAAa,KAGzF,+BAAKp6W,UAAU,6CAA6CpzF,IAAKwtc,GAC/D,+BAAKp6W,UAAU,iBAAiB,MAAQk6W,GACxC,+BAAKl6W,UAAU,gBACb,+BAAKA,UAAU,sBACb,4CAAkB5iF,GAAG,mCADvB,KAEM+8b,Y,8EC1BlB,I,EAAA,O,oCACA,OACA,OACA,Q,WA+Ce,IAAAh9S,aACb,IAAAj8C,UATsB,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAGJ,GAGzB,EA9C0B,SAAC0+F,GAM3B,IANqC,IAC9B1+F,EAAqB0+F,EAArB1+F,YAAa6N,EAAQ6wF,EAAR7wF,KACbs/B,EAAYuxD,EAAZvxD,SACHkrZ,SACFC,EAAe,EAET3wc,EAAI,EAAGA,EAAIwlD,EAAStlD,OAAQF,IAClC2wc,GAAgBnrZ,EAASxlD,GAAGspD,KAG9B,OAAOjxC,GACL,IAAK,SACHq4b,EAAe,WAAa76b,KAAKyC,QAAO,IAAAE,SAAQm4b,IAAgB,GAAK,OACrE,MACF,IAAK,WACL,QACED,EAAexqb,EAAKC,cAAc,CAAC1S,GAAI,wCAA0C,IAAMoC,KAAKkI,MAAK,IAAAxF,kBAAiBo4b,IAAgB,IAGtI,OACE,+BAAKt6W,UAAU,4CACb,+BAAKA,UAAU,iBACb,4CAAkB5iF,GAAG,sCAEvB,+BAAK4iF,UAAU,gBACb,+BAAKA,UAAU,sBACb,4CAAkB5iF,GAAG,qCADvB,MAC+D+xC,EAAStlD,QAExE,+BAAKm2F,UAAU,uBACXq6W,U,8EClCZ,I,EAAA,O,oCACA,OACA,OACA,U,WAoCe,IAAAl9S,aACb,IAAAj8C,UATsB,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAGJ,GAGzB,EAnC+B,SAAC0+F,GACjBA,EAAR7wF,KAIP,OAFkB,IAAAg0T,2BAGN3mU,KAAI,SAACsyJ,EAAUxsJ,GACvB,OACE,+BAAKg9E,UAAU,8CAA8CpzF,IAAKoW,GAChE,+BAAKg9E,UAAU,mBACb,+BAAKA,UAAU,sBAAsBv2E,MAAO,CAC1CqkG,gBAAiB0hD,EAASvlC,QAC1B+sE,OAAQ,YAAcxnC,EAAS26E,kBAIjC,+BAAKnqJ,UAAU,IACXwvE,EAAS72E,uB,8ECtBzB,I,EAAA,O,oCACA,OACA,O,WA+Ce,IAAAwkE,aACb,IAAAj8C,UATsB,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAGJ,GAGzB,EA9CuB,SAAC0+F,GAAU,IAC3B1+F,EAAqB0+F,EAArB1+F,YAAa6N,EAAQ6wF,EAAR7wF,KACbw/B,EAASqxD,EAATrxD,MACHgrZ,SAEJ,OACEhrZ,EAAMnyC,KAAI,SAAC0oC,EAAM5iC,GACf,OAAOhB,GACL,IAAK,SACHq4b,EAAe,WAAa76b,KAAKyC,OAAO2jC,EAAK/7C,QAAS,GAAK,KAC3D,MACF,IAAK,WACL,QAEIwwc,EADCz0Z,EAAK71B,MAAoC,SAA5B61B,EAAK71B,KAAKre,cACS,IAAlBk0C,EAAKokB,SAChBn6C,EAAKC,cAAc,CAAC1S,GAAI,iCAAkC,KAAMwoC,EAAKqjB,WACrEp5C,EAAKC,cAAc,CAAC1S,GAAI,kCAAmC,KAAMwoC,EAAKqjB,WAE3Dp5C,EAAKC,cAAc,CAAC1S,GAAI,sCAAuC,KAAMoC,KAAKyC,OAAO2jC,EAAK/7C,QAAS,GAAI,IAIxH,OACE,+BAAKm2F,UAAU,4CAA4CpzF,IAAKoW,GAC9D,+BAAKg9E,UAAU,iBAAkBp6C,EAAK/5C,KAAO+5C,EAAK/5C,KAAKkI,QAAQ,KAAM,UAAY,OAAjF,KACA,+BAAKisF,UAAU,gBACb,+BAAKA,UAAU,sBACb,4CAAkB5iF,GAAG,qCADvB,KAC8DwoC,EAAKokB,UAEnE,+BAAKg2B,UAAU,uBAAuBq6W,a,8ECjClD,I,EAAA,O,oCACA,OACA,O,WA8Ce,IAAAl9S,aACb,IAAAj8C,UATsB,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAGJ,GAGzB,EA7C8B,SAAC0+F,GAAU,IAClC1+F,EAAqB0+F,EAArB1+F,YAAa6N,EAAQ6wF,EAAR7wF,KACbu/B,EAAgBsxD,EAAhBtxD,aACHirZ,SACFluQ,SAEF,OACE/8I,EAAalyC,KAAI,SAACwsC,EAAY1mC,GAC5B,OAAOhB,GACL,IAAK,SACHq4b,EAAe,WAAY76b,KAAKyC,OAAOynC,EAAW7/C,QAAS,GAAK,MAChEsiM,EAAiBziJ,EAAW79C,KAAO69C,EAAW79C,KAAKkI,QAAQ,KAAM,UAAY8b,EAAKC,cAAc,CAAC1S,GAAI,uCACrG,MACF,IAAK,WACL,QACEi9b,EAAexqb,EAAKC,cAAc,CAAC1S,GAAI,wCAA0C,IAAMoC,KAAKkI,KAAKgiC,EAAW7/C,QAAS,IACrHsiM,EAAiBziJ,EAAW79C,KAAO69C,EAAW79C,KAAKkI,QAAQ,KAAM,UAAY8b,EAAKC,cAAc,CAAC1S,GAAI,uCAGzG,OACE,+BAAK4iF,UAAU,2CAA2CpzF,IAAKoW,GAC7D,+BAAKg9E,UAAU,iBACXmsG,GAEJ,+BAAKnsG,UAAU,gBACb,+BAAKA,UAAU,sBACb,4CAAkB5iF,GAAG,qCADvB,KAC8DssC,EAAWsgB,UAEzE,+BAAKg2B,UAAU,uBAAuBq6W,a,8EChClD,I,EAAA,O,oCACA,OACA,OACA,Q,WA2Ce,IAAAl9S,aACb,IAAAj8C,UATsB,SAACxzG,GAAD,MAAY,CAClCmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,aAClCj7F,YAAatU,EAAMyV,UAAUnB,eAGJ,GAGzB,EA1CsB,SAAC0+F,GAAU,IAC1B1+F,EAAqB0+F,EAArB1+F,YAAa6N,EAAQ6wF,EAAR7wF,KACbwiC,EAASquD,EAATruD,MACHgoZ,SAEJ,OACEhoZ,EAAMn1C,KAAI,SAACytC,EAAM3nC,GACf,OAAOhB,GACL,IAAK,SACHq4b,EAAe,YAAY,IAAA5tX,YAAW9hC,EAAK9gD,QAAU,MACrD,MACF,IAAK,WACL,QACEwwc,EAAexqb,EAAKC,cAAc,CAAC1S,GAAI,wCAA0C,IAAMutC,EAAK9gD,OAAQ,IAGxG,OACE,+BAAKm2F,UAAU,4CAA4CpzF,IAAKoW,GAC9D,+BAAKg9E,UAAU,iBACXr1C,EAAK9+C,KAAKkI,QAAQ,KAAM,WAE5B,+BAAKisF,UAAU,gBACb,+BAAKA,UAAU,sBACb,4CAAkB5iF,GAAG,qCADvB,KAC8DutC,EAAKqf,UAEnE,+BAAKg2B,UAAU,uBAAuBq6W,a,6FC9BlD,O,OACA,OACA,OACA,Q,IACA,Q,IACA,SACA,Q,IACA,SACA,S,8DAwDe,IAAAn5V,UATS,SAACxzG,GAEvB,MAAO,CACLmvG,WAFmBnvG,EAAMs3D,cAApB63C,cAMkB,GAEZ,EAtDM,SAAC6D,GAAU,IAEvB7D,EAAc6D,EAAd7D,WAFuB,GAGN,IAAAuhT,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAHqB,wBAIU,IAAA7hE,UAAS,GAJnB,qBAIvBgkT,EAJuB,KAITC,EAJS,KAMxBxob,GAAe,IAAA6hH,uBACfx5C,GAAW,IAAA3wB,iBAAgB13C,GAC3BmtK,GAAmB,IAAAE,uBAEnBq9M,EAAW7/R,IAAe,EAAAh2D,2BAA2BjB,KAE3D,OACE,+BAAKo6C,UAAW,uBAAyB08S,EAAW,YAAc,IAAK8nD,eAAa,OAAOpnb,GAAG,gBAC5F,+BAAK4iF,UAAU,iBACb,+BAAKA,UAAU,wBACb,gCAAMA,UAAU,KAAK8mS,YAAU,+BAA/B,gBACA,6BAAGA,YAAU,qCAAb,gGAEF,+BAAK9mS,UAAU,yBACb,+BAAKA,UAAU,0BACb,4CAAkB5iF,GAAG,0CAGzB,8BAAI4iF,UAAU,2BAA2B5iF,GAAG,sBACzC4U,GAAgBA,EAAapB,OAASoB,EAAapB,KAAK42E,oBACrD,mCAAoB11E,QAASE,EAAc+1M,SAAU,kBAAM3P,EAAY,IAAIo4D,YAAY,IACvFn2L,EAASn9E,KAAI,SAAA6X,GAAA,OACb,mCACEwlb,aAAcA,EACdC,gBAAiBA,EACjB7wY,YAAa50C,EAAQnE,KACrBhkB,IAAKmoB,EAAQnE,KAAK7X,UAAUqE,QAEhC+hL,EAAmB,mCAA2Bo7Q,aAAcA,EACnCC,gBAAiBA,IACtC,IAGR,+BAAKx6W,UAAU,oB,8ECjDvB,I,IAAA,MACA,O,IACA,M,IACA,O,IACA,QACA,Q,IACA,OACA,OACA,QAKA,Q,IACA,SACA,Q,mDAEA,IAAMy6W,EAAsB,SAAC/5V,GAAU,IAC9B/2C,EACyB+2C,EADzB/2C,YAAag1C,EACY+B,EADZ/B,qBAAsB9uF,EACV6wF,EADU7wF,KAAMtC,EAChBmzF,EADgBnzF,eAAgBgtb,EAChC75V,EADgC65V,aAAcC,EAC9C95V,EAD8C85V,gBAC5Et9V,EAA8BwD,EAA9BxD,2BA0BF,OACE,8BAAIld,UAAW,sDAAyDu6W,IAAiB5wY,EAAY5wD,UAAUqE,GAAK,2BAA6B,IAC7I48R,UAAUrwO,EAAY5wD,UAAUqE,GAChCs9b,4BAA6B,IAAArtb,sBAAqBs8C,EAAa95C,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAC3F2kK,QA5BY,SAAC3mL,EAAG09V,GACpBuxG,EAAgB7wY,EAAY5wD,UAAUqE,IACtC,UAAYu9b,cAAchxY,GAC1B,UAAYs4H,gBAAgBgnK,GAC5B,UAAYpwP,iBACZqE,EAA2BvzC,EAAY5wD,UAAUqE,IAE7C7P,OAAOwqD,WAAa,KAAQ,UAAOoD,oBAsBrC,+BAAK6kC,UAAU,+CAA+CkyF,QAhB1C,SAAC3mL,GACvBA,EAAE40F,iBACF50F,EAAE20F,kBAEFye,EAAqB,CACnBz4C,UAAU,EACV5a,OAAO,IAAAj+B,sBAAqBs8C,EAAa95C,EAAK1C,SAAU0C,EAAKvC,OAAQC,GACrEmK,KAAM7H,EAAKC,cAAc,CAAC1S,GAAIusD,EAAY5wD,UAAUwb,mBAUpD,+BAAKyrE,UAAU,sCACf,mCAAkBvnF,QAASkxD,IAC3B,+BAAKq2B,UAAU,6DACb,mCAAavnF,QAASkxD,EAAaszF,UAAW,QAMtDw9S,EAAoBnjT,UAAY,CAC9B3tF,YAAa,UAAU3a,MAAV,qBAGf,IAKM02I,EAAqB,CACzB/mF,4CACAzwC,gDACAgvC,wDACAN,uC,WAGa,IAAAugD,aACb,IAAAj8C,UAbsB,SAACxzG,GAAD,MAAY,CAClCugE,mBAAoBvgE,EAAMyV,UAAU8qD,mBACpC1gD,eAAgB7f,EAAMqN,mBAWG2qL,EAAzB,CAA6C+0Q,K,8EC7E/C,I,IAAA,O,IACA,O,IACA,O,IACA,M,IACA,OACA,SACA,QAGA,SACA,QACA,QACA,Q,IACA,Q,6DAiMe,IA/LK,WAAW,WAC1Bpgc,EAAOjF,KAEXA,KAAKi6C,MAAQ,GACbj6C,KAAKu0D,YAAc,KACnBv0D,KAAK8xD,IAAM,KACX9xD,KAAK0jG,YAAc,KACnB1jG,KAAK0zP,0BAA2B,EAChC1zP,KAAKwoT,YAAc,GAElBxoT,KAAKulc,cAAgB,SAAShxY,GAC5Bv0D,KAAKu0D,YAAcA,GAGrBv0D,KAAK6sL,gBAAkB,SAAUgnK,GAC/B,UAAavrS,aAAY,GACzB,UAAUe,eAAc,GACxB,UAAUG,sBAAqB,GAC/B,UAAOxD,UAAUC,QAAS,EAC1B,UAAOD,UAAUE,OAAQ,EACzB,UAAOF,UAAU56C,KAAO,OACxB,UAAO46C,UAAUh+C,GAAK/C,EAAKsvD,YAAY5wD,UAAUqE,GAE5C6rV,IACH,UAAO7tS,UAAUG,UAAW,GAE9BuoC,YAAW,WACT,UAAO1oC,UAAUG,UAAW,IAC3B,MAGLnmD,KAAKyjG,eAAiB,WACpB,IAAMilN,EAAoB,EAAKF,YAAY18S,MAAK,SAAA4iD,GAAA,OAASA,EAAMuD,QAAQjqD,KAAO,EAAKusD,YAAY5wD,UAAUqE,GAAG8P,cACxG4wS,GACF,EAAKhlN,YAAc,CAAEh1C,MAAOg6P,EAAmB/oT,MAAO+oT,EAAkB/oT,MAAOE,OAAQ6oT,EAAkB7oT,QACzG,UAAa0oD,UAAU,cAAe,GAAM,GAC5C0qM,KAEA01D,KAIJ,IAAMA,EAAiB,WACrB,IAAIG,EAAS1vT,SAAS8oD,cAAc,OACpC4mQ,EAAOl3N,YAAc,YAErB,IAAIm3N,GAAO,aAAED,GACbC,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAEVkpT,EAAKh5E,KAAK,CACR,UAAW9qO,EAAKsvD,YAAY5wD,UAAUqE,GACtC,YAAa/C,EAAKsvD,YAAY/7C,iBAC9B,2BAA4BvT,EAAKsvD,YAAY/7C,mBAM/CuwS,EAAKpmN,GAAG,QAJR,WACE19F,EAAKujT,YAAYzzT,KAAK+zT,GACtB7jT,EAAKw+F,oBAGPslN,EAAKpnC,UAAS,aAAE,SAChBonC,EAAKh5E,KAAK,MAAV,iBACA,EAAKj+K,IAAMi3P,GAGP91D,EAAiB,WACrB,UAAax5L,SACX,UAAaC,OAAOM,OACpByuP,EACA,EACA,UAAa7uP,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOK,SACpBvR,EACA,EACA,UAAaoR,WAAWojC,UAI5Bh9F,KAAK+3D,iBAAmB,WACtB,UAAa9O,YAAY,GACzB,UAAa26C,YAAY,GACzB,UAAO59C,UAAUE,OAAQ,GAG3BlmD,KAAKq4D,QAAU,SAACuyG,EAASxnE,GACnBA,GACF,UAAaQ,YAAY,EAAM,UAAalqC,OAAOM,QACnD,EAAK05L,0BAA2B,IAEhC,EAAK37L,oBACL,aAAE,gBAAkB,EAAKjG,IAAI79D,KAAK,MAAO,MAAM4jL,SAC/C,EAAK2wI,YAAc,EAAKA,YAAYxhT,QAAO,SAAA0nD,GAAA,OAASA,EAAMuD,QAAQjqD,KAAO,EAAK8pD,IAAI79D,KAAK,WAK3F,IAkBMuxc,EAA4B,SAACz5P,EAAK05P,GACtC,IAAMC,EAAoBD,EAAmBnpc,cAGzCopc,EAAkBvrc,SAAS,wBACzB4xM,IAAQA,EAAItpC,iCACdspC,EAAIhI,8BACJ,UAAM9/K,UAAS,IAAAujF,mBAAkB,EAAAjxD,uBAAuB1B,iBAKxD6wZ,EAAkBvrc,SAAS,qBACO,OAAhC,UAAU4tD,oBACZ,UAAUA,kBAAoB,IAAI,EAAJ,SAEhC,UAAUA,kBAAkBorM,2BAA2BpnD,KAYrDvjJ,EAAY,SAACJ,GAEjB,IAAM+M,EAAa,UAAU/J,gBAE7B,GAAI+J,GAAcA,EAAW/I,gBAAiB,CAC5C,IAAMi4H,EAAa,UAAMliL,WACnB0lG,EAAew8E,EAAWz0H,cAAci4C,aACxCE,EAAsBs8E,EAAWz0H,cAAcm4C,oBACrD,GAAIF,IAAiB,EAAAp2D,2BAA2BjB,MAAQu3D,IAAwB,EAAAxxD,uBAAuBC,cAAe,CACpH,IAAMw1J,EAAY72I,EAAWtI,+BACvBk/I,EAAM52I,EAAW/I,kBACjBj0C,EAAiBksK,EAAW1+K,gBAC5B8U,EAAO,UAAUA,KAEvB,GAAIsxL,GAAOC,EAAW,EA5DD,SAACD,EAAKC,EAAWz3I,EAAap8C,EAAgBsC,GACvE,IAAIgrb,GAAqB,IAAAxtb,sBAAqBs8C,EAAa95C,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAGnF4zL,GAAOA,EAAI7/I,gBACb6/I,EAAIpJ,gBACKoJ,IAAQA,EAAIvpC,2BAA6BupC,EAAItpC,iCACtDspC,EAAIzzI,sBAIN,IAAApJ,gBAAe68I,EAAKC,EAAW,OAAQz3I,EAAY5wD,UAAUqE,GAAIusD,EAAYjuD,OAAQm/b,GAGrFD,EAA0Bz5P,EAAK05P,GA+CzBE,CAAmB55P,EAAKC,EAAW,EAAKz3I,YAAap8C,EAAgBsC,GAErE,IAAMo+C,EAAqBwrH,EAAWt2K,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,IAG7Du6L,OAKAA,EAAwB,WACxBnuP,EAAKyuP,2BACPzuP,EAAKyuP,0BAA2B,EAChC,UAAa9vJ,YAAY,EAAM,UAAalqC,OAAOK,UACnD,EAAK8yH,iBAAgB,GACrB,EAAKppF,mBAIHglN,EAAe,SAAS9kQ,GAC5B,GAAG1+C,EAAKy+F,YAAYh1C,QAAU,aAAEv2D,QAAQwH,QAAU,IAAM,CACtD,IAAIspT,EAAO,UAAajpN,kBACrBipN,GACDtlQ,EAAI2rC,UAAUrqF,EAAKy+F,YAAYh1C,MAAOu6P,EAAK7uS,EAAI,GAAI6uS,EAAK5uS,EAAI,GAAI,GAAI,Q,8ECxM5E,I,IAAA,MACA,O,IACA,MACA,QACA,OACA,QAMA,QACA,QACA,UACA,S,IACA,O,mDAEA,IAAMurb,EAA4B,SAACt6V,GAAU,IACnC65V,EAA8D75V,EAA9D65V,aAAcC,EAAgD95V,EAAhD85V,gBAAiBt9V,EAA+BwD,EAA/BxD,2BAQjCiiF,GAAmB,IAAAE,uBAEzB,OACE,8BAAIr/F,UAAW,sDAAyDu6W,IAAiB,EAAA5uZ,uBAAuBC,cAAgB,2BAA6B,IACzJsmI,QAVY,SAAC3mL,GAEjBivc,EAAgB,EAAA7uZ,uBAAuBC,eACvCsxD,EAA2B,EAAAvxD,uBAAuBC,gBAClD,IAAA+iS,wBAOE,+BAAK3uP,UAAU,iFACf,+BAAKA,UAAU,6DACb,mCAAavnF,QAAS0mL,EAAkBliC,UAAW,QAM3D+9S,EAA0B1jT,UAAY,CACpC3tF,YAAa,UAAU3a,MAAV,qBAGf,IAKM02I,EAAqB,CACzB/mF,4CACAzwC,gDACAgvC,wDACAF,0CACAJ,uC,WAGa,IAAAugD,aACb,IAAAj8C,UAdsB,SAACxzG,GAAD,MAAY,CAClCugE,mBAAoBvgE,EAAMyV,UAAU8qD,mBACpC1gD,eAAgB7f,EAAMqN,mBAYG2qL,EAAzB,CAA6Cs1Q,K,iGCzD/C,MACA,OACA,Q,IAMA,SACA,Q,8DAgCe,IAAA95V,UALS,SAACxzG,GAAD,OAAYA,EAAMs3D,gBAEf,GAGZ,EA9BW,SAAC07C,GAAU,IAE7Bg8R,EADeh8R,EAAd7D,aACyB,EAAAh2D,2BAA2Ba,WACrDA,GAAa,IAAA0E,0BAAA,sGACnB,OACE,+BAAK4zC,UAAW,uBAAyB08S,EAAW,YAAc,IAAK8nD,eAAa,aAAapnb,GAAG,sBAClG,+BAAK4iF,UAAU,iBACb,+BAAKA,UAAU,wBACb,gCAAMA,UAAU,KAAK8mS,YAAU,oCAA/B,sBAEF,+BAAK9mS,UAAU,yBACb,+BAAKA,UAAU,yBAAyB8mS,YAAU,uCAAlD,UAEF,+BAAK9mS,UAAU,2BAA2B5iF,GAAG,4BAEzCtT,OAAOmc,KAAKyhC,GAAYxqC,KAAI,SAACyiL,EAAU38K,GAAX,OAC1B,mCAAuB28K,SAAUA,EAAU/yL,IAAKoW,c,uHC3B9D,MACA,OACA,OACA,QAIA,QACA,SACA,QACA,QACA,QACA,S,mDAEA,IAuFM0iL,EAAqB,CACzB9oF,uC,WAGa,IAAAsE,UARS,WACtB,MAAO,KAO+BwkF,EAAzB,EA3Fe,SAAChlF,GAAU,IAIjC,EAHCi/E,EAAYj/E,EAAZi/E,SACA/iF,EAAqB8D,EAArB9D,kBAED+uJ,GAAA,gCAAY,WAAO31J,GAAP,4FAChB5oG,QAAQ4B,IAAI,WAAY2wL,GACxB3pF,EAAM7V,iBACN6V,EAAM9V,mBACN,IAAAlkE,gBAJgB,qBAMb,EAAAquB,mCAAmCK,aAAe,eANrC,eAOb,EAAAK,gBAAgBuB,aAAe,WAPlB,eAQb,EAAAvB,gBAAgB6B,SAAW,SAHxBquZ,EALU,EAWVC,EAXU,+CAWkB,WAAO5qb,EAAQqvK,GAAf,kFAC1BjkL,EAASu/b,EAAUt7Q,IAAaA,IAChC3tK,EAAe1B,EAAOgb,wBAAwB5vB,KAE/BsW,EAAaw1E,oBAJF,iCAKxB,IAAAO,6BAA4B/1E,GALJ,gCAQzBA,GARyB,kDAXlB,wDAsBVmpb,EAAoC,SAAC7qb,EAAQ0B,GAWjD,OAViB1B,EAAOo9E,sBACtB,CAAE98E,KAAMoB,GACR,GACA,GACAA,EAAauJ,cACb,MACA,GACA,CAAEs5G,aAAc,KAAMC,gBAAiB,OAGzB14H,QAAO,SAAA2Y,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUi4O,uBAGrDoqN,EApCU,+CAoCa,WAAOz7Q,GAAP,oFACtB,EAAAvyI,6BAA6B79C,SAASowL,GADhB,uBAEzB,IAAAD,+BAA8BC,GAFL,iCAMrBrvK,GAAS,IAAAC,oBANY,SAOA2qb,EAA0B5qb,EAAQqvK,GAPlC,UAOrB3tK,EAPqB,+BAUzB,IAAA0tK,+BAA8BC,GAVL,2BAcrBkR,GAAY,IAAAvhI,sBACO6rY,EAAkC7qb,EAAQ0B,GAG9CnoB,OAAS,GAAKgnM,EACjCj0F,EAAkB+iF,IAElBvyL,QAAQ4B,IAAIgjB,EAAaf,SAAW,qGACpC,IAAAyuK,+BAA8BC,IAtBL,mDApCb,gEA8DVy7Q,EAAqBz7Q,GAAUl4J,MAAMr6B,QAAQC,OA9DnC,SA+DhB,IAAAq6F,iBA/DgB,mDAAZ,6CAkEN,OACE,8BAAI1H,UAAU,2DACZ,6BAAG7wF,KAAK,IAAI6wF,UAAW,0CAA4C2/F,EAAUr0I,MAAOq0I,EAAW,eAC5FviL,GAAI,eAAiBuiL,EACrBzN,QAASy5E,GACV,gCAAM3rK,UAAU,6BACd,4CAAkB5iF,GAAI,8BAAgCuiL,W,8EC1FhE,W,OACA,OACA,QACA,S,IACA,S,IACA,O,8DA4De,IAAAz+E,UAVS,SAACxzG,GAEvB,MAAO,CACLmvG,WAFmBnvG,EAAMs3D,cAApB63C,cAMkB,GAGZ,EA1DS,SAAC6D,GAAU,IAE3Bg8R,EADeh8R,EAAd7D,aACyB,EAAAh2D,2BAA2BgD,QACrD8yV,GAAa,IAAAtnP,QAAO,KAE1B,IAAAt+B,YAAU,WACR,IAAM7nE,EAAUplD,OAAOyhB,OAAOoxX,EAAW/yR,SACrC8yR,GACF,IAAArqF,gBAAenjQ,IAEf,IAAAojQ,aAAYpjQ,KAGb,CAACwtV,IAeJ,OACE,+BAAK18S,UAAW,uBAAyB08S,EAAW,YAAc,IAAK8nD,eAAa,UAAUf,cAAY,aACxG,+BAAKzjW,UAAU,sDACb,kCAAQA,UAAU,uDAAuD0lW,YAAU,cAC3EtwS,IAAK,SAACksG,GAAD,OAAQq7I,EAAW/yR,QAAQ,GAAK03I,GACrCpvE,QAAS,kBAjBrB,UAAUtzH,sBAAqB,GAC/B,UAAUI,uBAAsB,GAChC,UAAQq8Y,0BACRv3W,YAAW,WACT,UAAU9kC,uBAAsB,KAC/B,MAaS2mY,WAAS,eACf,gCAAM3lW,UAAU,cAAc8mS,YAAU,sCAAxC,gBAEF,kCAAQ9mS,UAAU,yDAAyD0lW,YAAU,gBAC7ExzQ,QAAS,WAbrB,UAAQopR,oBAcIlmT,IAAK,SAACksG,GAAD,OAAQq7I,EAAW/yR,QAAQ,GAAK03I,GACrCqkM,WAAS,iBACf,gCAAM3lW,UAAU,cAAc8mS,YAAU,wCAAxC,wB,8EChDV,I,IAAA,O,IACA,O,IAEA,O,IACA,OACA,SACA,SACA,Q,IACA,M,6DAEe,IAAI,WACjB,IAAIzsX,EAAOjF,KAyLX,SAAS+3D,IACP,UAAa9O,YAAYhkD,GACzB,UAAa2+F,YAAY3+F,GACzB,UAAO+gD,UAAUE,OAAQ,EAzL3BlmD,KAAKg2D,KAAO,aAKZh2D,KAAKimc,mBAAqB,WACxBhhc,EAAKw+F,iBACDtrG,OAAOwqD,WAAa,KAAQ,UAAOoD,mBAKzC/lD,KAAKkmc,iBAAmB,WACtB,UAAU9sY,qBAGZp5D,KAAKizP,eAAiB,WACpB,UAAax5L,SACX,UAAaC,OAAOM,OACpB/0D,EAAKwjT,aACLxjT,EACA,UAAa20D,WAAWojC,SAQ1B,UAAavjC,SACX,UAAaC,OAAOK,SACpB90D,EAAKujD,UACLvjD,EACA,UAAa20D,WAAWojC,UAI5Bh9F,KAAKwoD,UAAY,SAASJ,GAExB,IAAI+M,EAAa,UAAU/J,gBAC3B,GAAI+J,GAAcA,EAAW/I,gBAAiB,CAG5C,GAFmB,UAAMjqD,WACOytD,cAAci4C,eACzB,EAAAp2D,2BAA2BgD,QAC9C,OAGF,IAAIs3J,EAAM52I,EAAW/I,mBACjB2/I,GAASA,EAAIrgJ,iBAAoBqgJ,EAAI7/I,mBACvC,IAAAgD,gBAAe68I,EAAK,KAAM,EAAApvJ,0BAA0BlI,QAAS,KAAM,KAAK,IA4BxEsjB,KAYJ9yD,EAAKmuP,yBAGPpzP,KAAKyjG,eAAiB,WAOlBzjG,KAAK2oT,kBAIT3oT,KAAK2oT,eAAiB,WAEpB,IACEC,EADW,GAEXC,EAFW,GAITC,EAAS1vT,SAAS8oD,cAAc,OACpC4mQ,EAAOl3N,YAAc,YAErB,IAAIm3N,GAAO,aAAED,GACbC,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAuBVkpT,EAAKpmN,GAAG,QAhBR,WACE,IACIqmN,SACDJ,EAAWC,GACZG,EAAQH,EAAYD,EACpBA,EAJW,GAKXC,EALW,GAKUG,IAErBA,EAAQJ,EAAWC,EACnBA,EARW,GASXD,EATW,GASSI,GAEtB,UAAazgQ,UAAU,cAAetjD,GAAM,GAC5CA,EAAKy+F,YAAc,CAAEh1C,MAAOo6P,EAAQnpT,MAAOipT,EAAU/oT,OAAQgpT,GAC7D5jT,EAAKguP,oBAGP81D,EAAKpnC,UAAS,aAAE,SAEhB,UAAO37N,UAAU56C,KAAO,aACxB29S,EAAKh5E,KAAK,MAAV,iBAIF/vO,KAAKozP,sBAAwB,WACvBnuP,EAAKyuP,2BACPzuP,EAAKyuP,0BAA2B,EAChC,UAAa9vJ,YAAY3+F,EAAM,UAAay0D,OAAOK,UAInD90D,EAAKw+F,mBAGTzjG,KAAKyoT,aAAe,SAAS9kQ,GAC3B,GAAG1+C,EAAKy+F,YAAYh1C,QAAU,aAAEv2D,QAAQwH,QAAU,IAAM,CACtD,IAAIspT,EAAO,UAAajpN,kBACrBipN,GACDtlQ,EAAI2rC,UAAUrqF,EAAKy+F,YAAYh1C,MAAOu6P,EAAK7uS,EAAI,GAAI6uS,EAAK5uS,EAAI,GAAI,GAAI,MAI1Era,KAAKq4D,QAAU,SAASuyG,EAASxnE,GAC3BA,GACF,UAAaQ,YAAY3+F,EAAM,UAAay0D,OAAOM,QACnDh6D,KAAK0zP,0BAA2B,GAEhC37L,IAEF/3D,KAAKw1D,QAEPx1D,KAAKw1D,KAAO,SAASr/D,GAChBA,IACDA,EAAE40F,iBACF50F,EAAE20F,sB,6FC/LR,O,OACA,OACA,Q,IAOA,S,IACA,O,IACA,S,8DAmDe,IAAAghB,UATS,SAACxzG,GAEvB,MAAO,CACLmvG,WAFmBnvG,EAAMs3D,cAApB63C,cAMkB,GAEZ,EAjDa,SAAC6D,GAAU,IAE9B7D,EAAc6D,EAAd7D,WAF8B,GAGe,IAAA05C,UAAS,GAHxB,qBAG9BglT,EAH8B,KAGVC,EAHU,KAI/B9+D,EAAW7/R,IAAe,EAAAh2D,2BAA2B6C,WAErD+xZ,EAAoB,UAAOz5b,cAAgB,EAAAyjC,cAAcE,SAC3D,EAAA8I,sBAAsB8T,OAAtB,mBACA,EAAA7T,6BAA6B6T,OAA7B,mBAEJ,OACE,+BAAKy9B,UAAW,uBAAyB08S,EAAW,YAAc,IAAK8nD,eAAa,aAAapnb,GAAG,sBAClG,+BAAK4iF,UAAU,iBACb,+BAAKA,UAAU,wBACb,gCAAMA,UAAU,KAAK8mS,YAAU,oCAA/B,qBACA,6BAAGA,YAAU,0CAAb,yGAGF,+BAAK9mS,UAAU,yBACb,+BAAKA,UAAU,yBAAyB8mS,YAAU,uCAAlD,UAEF,8BAAI9mS,UAAU,4BACXy7W,EAAkBv+b,KAAI,SAAC6X,EAAS/R,GAAV,OACrB,mCACEpW,IAAKoW,EACL21E,YAAa5jE,EACbwmb,mBAAoBA,EACpBC,sBAAuBA,OAIzB,mCAAiCD,mBAAoBA,EACpBC,sBAAuBA,W,8EC7CpE,I,IAAA,MACA,OACA,SACA,O,IACA,OACA,Q,IACA,S,mDAEA,IAgEM91Q,EAAqB,CACzB1oF,0CACAJ,uC,WAGa,IAAAugD,aACb,IAAAj8C,UAVsB,WACtB,MAAO,KASkBwkF,EAAzB,EAtEiC,SAAChlF,GAAU,IACrC7wF,EAAgE6wF,EAAhE7wF,KAAM8oE,EAA0D+nB,EAA1D/nB,YAAa4iX,EAA6C76V,EAA7C66V,mBAAoBC,EAAyB96V,EAAzB86V,sBAiBxCE,EAAoB,WACxB,IAAI/tO,SAEJ,OAAQh1I,GACN,IAAK,IACHg1I,EAAc99M,EAAKC,cAAc,CAAC1S,GAAI,kDACtC,MACF,IAAK,IACHuwN,EAAc99M,EAAKC,cAAc,CAAC1S,GAAI,kDACtC,MACF,IAAK,KACHuwN,EAAc99M,EAAKC,cAAc,CAAC1S,GAAI,mDACtC,MACF,IAAK,OACHuwN,EAAc99M,EAAKC,cAAc,CAAC1S,GAAI,iCACtC,MACF,QACEuwN,EAAc99M,EAAKC,cAAc,CAAC1S,GAAI,mCAAqC,IAAMu7E,EAIrF,OAAOg1I,GAGT,OACE,8BAAI3tI,UAAW,sDAAwDu7W,IAAuB5iX,EAAc,2BAA6B,IAAMu5F,QAxC5H,SAAC3mL,EAAG09V,GACvBuyG,EAAsB7iX,GAEtB,UAAiBspG,gBAAgBgnK,GACjC,UAAiBihD,qBAAqB,CACpCxxY,KAAMigF,EACN9sF,KAAM6vc,MAER,UAAiB7iW,iBACbtrG,OAAOwqD,WAAa,KAAQ,UAAOoD,oBAgCrC,+BAAK6kC,UAAU,0DAA0Dg6M,UAAQ,KAAK2hK,kBAAgB,IAAI9kU,YAAU,gBAC/G+kU,mBAAiB,oBACpB,+BAAK57W,UAAU,qBACb,+BAAKA,UAAW,2BACX7rF,IAAA,oDAAyDwkF,EAAzD,OACA2wH,IAAI,MAEX,+BAAKtpH,UAAU,sCACf,+BAAKA,UAAU,6BACb,oCAAO07W,a,8EC7DjB,I,IAAA,MACA,OACA,OACA,QAMA,QACA,Q,IACA,S,IACA,O,mDAEA,IAAMG,EAAkC,SAACn7V,GAAU,IACzC7wF,EAAgF6wF,EAAhF7wF,KAAM0rb,EAA0E76V,EAA1E66V,mBAAoBC,EAAsD96V,EAAtD86V,sBAAuBt+V,EAA+BwD,EAA/BxD,2BAezD,OACE,8BAAIld,UAAW,sDAAyDu7W,IAAuB,EAAA5vZ,uBAAuBE,uBAAyB,2BAA6B,IACxKqmI,QAfY,SAAC3mL,GAEjBiwc,EAAsB,EAAA7vZ,uBAAuBE,wBAC7CqxD,EAA2B,EAAAvxD,uBAAuBE,wBAClD,UAAiBo2I,iBAAgB,GACjC,UAAiBioN,qBAAqB,CACpCxxY,KAAiC,aAA3B,UAAWsJ,YAA6B,GAAK,IACnDnW,KAAMgkB,EAAKC,cAAc,CAAC1S,GAAI,+CAEhC,UAAiBy7F,mBAOf,+BAAK7Y,UAAU,8EACf,+BAAKA,UAAU,6DACb,4CAAkB5iF,GAAI,gDAM9By+b,EAAgCvkT,UAAY,GAG5C,IAKMouC,EAAqB,CACzB/mF,4CACAzwC,gDACAgvC,wDACAF,0CACAJ,uC,WAGa,IAAAugD,aACb,IAAAj8C,UAdsB,SAACxzG,GAAD,MAAY,CAClCugE,mBAAoBvgE,EAAMyV,UAAU8qD,mBACpC1gD,eAAgB7f,EAAMqN,mBAYG2qL,EAAzB,CAA6Cm2Q,K,6FC1D/C,O,OACA,OACA,Q,IACA,S,IACA,S,mDAMA,IAuEMn2Q,EAAqB,CACzB9oF,kBA7EF,MA6EEA,mB,WAIa,IAAAsE,UAZS,SAACxzG,GAEvB,MAAO,CACLmvG,WAFmBnvG,EAAMs3D,cAApB63C,cAW+B6oF,EAAzB,EA5EQ,SAAChlF,GAAU,IAEzB7D,EAAc6D,EAAd7D,WAFyB,GAGkB,IAAA05C,UAAS,IAH3B,qBAGzBulT,EAHyB,KAGNC,EAHM,KAI1Br/D,EAAW7/R,IAAe,EAAAh2D,2BAA2B2C,SAAWqzD,IAAe,EAAAh2D,2BAA2B4C,OAC1GuyZ,EAAkB,UAAMnrJ,YACxBorJ,EAAkB,UAAMprJ,aAE9B,IAAA95L,YAAU,WACLla,IAAe,EAAAh2D,2BAA2B2C,SAC3CuyZ,EAAqB,EAAAl1Z,2BAA2B2C,SAChDyyZ,EAAgBryV,QAAQtkB,SAChBuX,IAAe,EAAAh2D,2BAA2B4C,SAClDsyZ,EAAqB,EAAAl1Z,2BAA2B4C,QAChDuyZ,EAAgBpyV,QAAQtkB,WAGzB,CAACuX,IAEJ,IAAMiiN,EAAoB,SAAUvzT,GAKlCwwc,EAAqBxwc,EAAEugB,OAAOu7C,QAAQl4D,OAMxC,OACE,+BAAK6wF,UAAW,uBAAyB08S,EAAW,YAAc,IAAK8nD,eAAa,SAASpnb,GAAG,kBAC9F,+BAAK4iF,UAAU,iBACb,+BAAKA,UAAU,wBACb,gCAAMA,UAAU,KAAK8mS,YAAU,gCAA/B,iBACA,6BAAGA,YAAU,sCAAb,8FAGF,+BAAK9mS,UAAU,yBACb,+BAAKA,UAAU,yBAAyB8mS,YAAU,uCAAlD,UAEF,+BAAK9mS,UAAU,mBACb,+BAAKA,UAAU,gBACb,+BAAKA,UAAU,qBACb,kCAAQo1D,IAAK4mT,EAAiBE,YAAU,SAASl8W,UAAW,wBAAgD,WAAtB87W,EAAgC,GAAK,gCAAiC5pR,QAAS4sI,EAC7JgoE,YAAU,sCADlB,WAIF,+BAAK9mS,UAAU,qBACb,kCAAQo1D,IAAK6mT,EAAiBC,YAAU,SAASl8W,UAAW,wBAAgD,WAAtB87W,EAAgC,GAAK,gCAAiC5pR,QAAS4sI,GAArK,SAGJ,+BAAK9+N,UAAW,4BAAoD,WAAtB87W,EAAgC,GAAK,yBAA0B1+b,GAAG,UAC9G,yCAEF,+BAAK4iF,UAAW,4BAAoD,WAAtB87W,EAAgC,GAAK,yBAA0B1+b,GAAG,UAC9G,gD,6FClEZ,O,OACA,OACA,O,IACA,Q,IACA,O,IACA,QACA,QACA,S,IACA,OACA,Q,8DAuJe,IAAA8jG,UAdS,SAACxzG,GAIvB,MAAO,CACLmvG,WAJmBnvG,EAAMs3D,cAApB63C,WAKL+D,kBAJ0BlzG,EAAMgR,YAA3BkiG,kBAKL5+F,YAJoBtU,EAAMyV,UAArBnB,eAQkB,GAGZ,EAnJO,SAAC0+F,GAAU,IAS3By7V,EARGv7V,EAAkCF,EAAlCE,kBAAmB5+F,EAAe0+F,EAAf1+F,YADK,EAEe,UAAMu0I,SAAS,GAF9B,qBAExBknP,EAFwB,KAEPC,EAFO,KAOzBptX,GAAS,IAAAC,oBACXyB,SAEA4uF,EAAkB/2G,SACpBmoB,EAAe1B,EAAO+a,2BARC,WAWzB,IAAM+wa,GAAgB,IAAAllT,UAAQ,WAC5B,GAAIt2C,EAAkB/2G,OAAQ,CAC5B,IAAIuyc,GAAgB,IAAA3vR,aAAYz6J,EAAc,GAAI,IAAI,GAAO,GAM7D,OALAoqb,EAAgBA,EAAchgc,QAAO,SAAC2Y,GACpC,OAAO/f,SAAS+f,EAAQnE,KAAK7X,UAAUmF,uBAE3BJ,MAAK,SAACC,EAAGC,GAAJ,OAAUhJ,SAAS+I,EAAE6S,KAAK7X,UAAUmF,mBAAqBlJ,SAASgJ,EAAE4S,KAAK7X,UAAUmF,sBAE/Fk+b,EAET,MAAO,KACN,CAACx7V,EAAmB5uF,IAEjBqqb,GAAgB,IAAAnlT,UAAQ,WAC5B,GAAIt2C,EAAkB/2G,OAAQ,CAC5B,IAAMyyc,EAAqBhsb,EAAO+a,2BAzBF,UA0BhC,OAAO,IAAAohJ,aAAY6vR,EAzBQ,gCAyBoC,IAAI,GAAO,GAE5E,MAAO,KACN,CAAChsb,EAAQswF,IAEZu7V,IAAoBnqb,GAAgBoqb,EAAcvyc,OAAS,EAE3D,IAAM0yc,EAAoB,WAIxB,IAHA,IAAMh5L,EAAQ,GACV55Q,EAAI,IAECA,GADS,IACO45Q,EAAMp5Q,KAAKR,GAEpC,OAAO45Q,GAeHi5L,GAAiB,IAAAtlT,UAAQ,WAC7B,GAAIt2C,EAAkB/2G,OAAQ,CAC5B,GAAIsyc,EACF,OAAOC,EAEP,OAAQp6b,GACN,KAAK,EAAAyjC,cAAcC,OACjB,OAnBuB,WAI/B,IAHA,IAAM69N,EAAQ,GACV55Q,EAAI,EAEDA,EADW,KAEhBA,GAAK,GACL45Q,EAAMp5Q,KAAKR,GAGb,OAAO45Q,EAUQk5L,GACT,KAAK,EAAAh3Z,cAAcE,SACnB,QACE,OAAO42Z,KAIf,MAAO,KACN,CAAC37V,EAAmBu7V,EAAiBC,EAAep6b,IAsBjDmrD,EAAmB,WAEvB,UAAU1jB,OAAOiI,UAAY,EAC7B,UAAUjI,OAAOG,MAAQ,EACzB,UAAUH,OAAOhxC,QAAU,KAC3B,UAAO2iD,UAAUC,QAAS,GAGtBqhZ,EAAgBH,IAEtB,OACE,wCACGC,EAAet/b,KAAI,SAACusC,EAAQzmC,GAC3B,IAAM1W,EAAQ6vc,EAAkBnnc,SAASy0C,EAAO74B,KAAK7X,UAAUmF,mBAAqBurC,EAC9Eu2C,EAAYy9S,IAAoBnxY,EAAQ,uDAAyD,8BAEvG,OACE,+BAAK0zF,UAAWA,EAAWpzF,IAAKoW,EAC3BkvK,QAAS,SAAC3mL,GAAD,OAtCI,SAASA,EAAGe,EAAOyoB,GAC3C,IAQM4nb,EAAarwc,EAAQ,UAAW8rD,uBACtCslV,EAAmBi/D,GACnBxvY,IACA,UAAU1jB,OAAOG,MAAQ,EACzB,UAAUH,OAAOiI,UAAYirZ,EAC7B,UAAUlzZ,OAAO+a,UAbU,SAACzvC,EAASzoB,GAEnC,OAAI+vc,EAAcxyc,OAAS,GAAKyC,EAAQ,EAC/B+vc,EAAc,GAAGzrb,KAAK7X,UAAUqE,GAElC2X,EAAQnE,KAAOmE,EAAQnE,KAAK7X,UAAUqE,GAAK,KAQvBw/b,CAAmB7nb,EAAS4nb,GAEzD,UAAO79I,kBAAkB69I,GACzBvvc,QAAQ4B,IAAI,aAAc2tc,GAqBC79I,CAAkBvzT,EAAGe,EAAOm9C,KAC/C,+BAAKu2C,UAAW,4CAAqE,GAAvB08W,EAAc15b,KAC5E,+BAAKg9E,UAAU,yCAEXm8W,EACI,mCAAa1jc,QAASgxC,EAAO74B,OAC7B,wCACA,gCAAM40a,aAAW,UAAUl5b,EAAO,UAAWgsD,uBAAsB,GAAnE,KACA,4CAAkBl7C,GAAG,iD,6FCtIzC,O,OACA,O,IACA,Q,IACA,O,IACA,O,IACA,QACA,QACA,S,8DA+He,IAAA8jG,UAZS,SAACxzG,GAGvB,MAAO,CACLmvG,WAHmBnvG,EAAMs3D,cAApB63C,WAIL+D,kBAH0BlzG,EAAMgR,YAA3BkiG,qBAOkB,GAGZ,EA5HS,SAACF,GAAU,IAU7By7V,EATGv7V,EAAqBF,EAArBE,kBAD0B,EAEa,UAAM21C,SAAS,GAF5B,qBAE1BknP,EAF0B,KAETC,EAFS,KAQ3BptX,GAAS,IAAAC,oBACXyB,SAEA4uF,EAAkB/2G,SACpBmoB,EAAe1B,EAAO+a,2BARC,YAWzB,IAAMwxa,GAAkB,IAAA3lT,UAAQ,WAC9B,GAAIt2C,EAAkB/2G,OAAQ,CAC5B,IAAIgzc,GAAkB,IAAApwR,aAAYz6J,EAAc,GAAI,IAAI,GAAO,GAM/D,OALA6qb,EAAkBA,EAAgBzgc,QAAO,SAAC2Y,GACxC,OAAO/f,SAAS+f,EAAQnE,KAAK7X,UAAUmF,uBAEzBJ,MAAK,SAACC,EAAGC,GAAJ,OAAUhJ,SAAS+I,EAAE6S,KAAK7X,UAAUmF,mBAAqBlJ,SAASgJ,EAAE4S,KAAK7X,UAAUmF,sBAEjG2+b,EAET,MAAO,KACN,CAACj8V,EAAmB5uF,IAEjBqqb,GAAgB,IAAAnlT,UAAQ,WAC5B,GAAIt2C,EAAkB/2G,OAAQ,CAC5B,IAAMyyc,EAAqBhsb,EAAO+a,2BAzBF,UA0BhC,OAAO,IAAAohJ,aAAY6vR,EAzBQ,kCAyBoC,IAAI,GAAO,GAE5E,MAAO,KACN,CAAChsb,EAAQswF,IAEZu7V,IAAoBnqb,GAAgB6qb,EAAgBhzc,OAAS,EAE7D,IAWMizc,GAAmB,IAAA5lT,UAAQ,WAC/B,OAAIt2C,EAAkB/2G,OAChBsyc,EACKU,EAde,WAG1B,IAFA,IACIrzZ,EAAU,GAAI7/C,EAAI,EACfA,EAFW,IAGhBA,GAAK,EACL6/C,EAAQr/C,KAAKR,GAGf,OAAO6/C,EAQIuzZ,GAGJ,KACN,CAACn8V,EAAmBu7V,EAAiBU,IAsBlC1vY,EAAmB,WACvB,UAAa9O,YAAYhkD,MACzB,UAAa2+F,YAAY3+F,MAEzB,UAAUovC,OAAOiI,UAAY,EAC7B,UAAUjI,OAAOG,MAAQ,EACzB,UAAOwR,UAAUC,QAAS,GAG5B,OACE,wCACGyhZ,EAAiB5/b,KAAI,SAAC8/b,EAAiBh6b,GACtC,IAAM1W,EAAQ6vc,EAAkBnnc,SAASgoc,EAAgBpsb,KAAK7X,UAAUmF,mBAAqB8+b,EACzFC,EAAkB3wc,GA1FJ,MA0FiDA,EAC7D0zF,EAAYy9S,IAAoBnxY,EAAQ,uDAAyD,8BACvG,OACE,+BAAK0zF,UAAWA,EAAWpzF,IAAKoW,EAC3BkvK,QAAS,SAAC3mL,GAAD,OArCI,SAASA,EAAGe,EAAOyoB,GAS3C2oX,EAAmBpxY,GACnB6gE,IACA,UAAU1jB,OAAOiI,UAAY,EAC7B,UAAUjI,OAAOG,MAAQt9C,EACzB,UAAUm9C,OAAO+a,UAXU,SAACzvC,EAASzoB,GAEnC,OAAI+vc,EAAcxyc,OAAS,GAAKyC,EAAQ,EAC/B+vc,EAAc,GAAGzrb,KAAK7X,UAAUqE,GAElC2X,EAAQnE,KAAOmE,EAAQnE,KAAK7X,UAAUqE,GAAK,KAMvB8/b,CAAmBnob,EAASzoB,GAEzDc,QAAQ4B,IAAI,yBAA0B,UAAUy6C,OAAOG,OACvDx8C,QAAQ4B,IAAI,6BAA8B,UAAUy6C,OAAO+a,WAC3D,UAAOs6P,kBAAkBxyT,GAoBEwyT,CAAkBvzT,EAAGe,EAAO0wc,KAC/C,+BAAKh9W,UAAW,+CAAiDi9W,GAC/D,gCAAMj9W,UAAU,qCAChB,gCAAMA,UAAU,oCAElB,+BAAKA,UAAU,yCACb,gCAAMwlW,aAAW,UAAUl5b,a,8ECjHzC,I,EAAA,O,oCACA,OAGA,IAoBMo5L,EAAqB,CACzBxnF,eAvBF,MAuBEA,gB,WAGa,IAAAgD,UARS,SAACxzG,GAAD,MAAY,CAClCywG,cAAezwG,EAAMs3D,cAAcm5C,iBAOGunF,EAAzB,EAxBW,SAAChlF,GAAU,IAC5BvC,EAAiCuC,EAAjCvC,cAAeD,EAAkBwC,EAAlBxC,eAMtB,OACE,+BAAKle,UAAU,mBACb,kCAAQA,UAAW,0CAA4Cme,EAAgB,gBAAkB,MACzF+zE,QAPc,WACxBh0E,GAAgBC,W,8ECRpB,I,EAAA,O,oCACA,OAGA,IAoBMunF,EAAqB,CACzBtnF,iBAvBF,MAuBEA,kB,WAIa,IAAA8C,UATS,SAACxzG,GAAD,MAAY,CAClC2wG,gBAAiB3wG,EAAMs3D,cAAcq5C,mBAQCqnF,EAAzB,EAzBa,SAAChlF,GAAU,IAC9BrC,EAAqCqC,EAArCrC,gBAAiBD,EAAoBsC,EAApBtC,iBAMxB,OACE,+BAAKpe,UAAU,mBACb,kCAAQA,UAAW,+CAAiDqe,EAAkB,gBAAkB,MAChG6zE,QAPc,WACxB9zE,GAAkBC,W,8ECRtB,I,EAAA,O,oCACA,OAGA,IAoBMqnF,EAAqB,CACzB4a,gCAvBF,OAuBEA,iC,WAGa,IAAAp/F,UARS,SAACxzG,GAAD,MAAY,CAClC2+K,+BAAgC3+K,EAAMqR,cAAcstK,kCAOdqZ,EAAzB,EAxB6B,SAAChlF,GAAU,IAC9C2rE,EAAmE3rE,EAAnE2rE,+BAAgCi0B,EAAmC5/F,EAAnC4/F,gCAMvC,OACE,+BAAKtgH,UAAU,mBACb,kCAAQA,UAAW,yCAA2CqsF,EAAiC,gBAAkB,IACzG6F,QAPc,WACxBouB,GAAiCj0B,W,6FCRrC,O,OACA,OACA,OAEA,QACA,Q,IACA,Q,IACA,S,IAEA,S,mDAIA,IAuDMqZ,EAAqB,CACzB9oF,sCACAI,2C,WAIa,IAAAkE,UAfS,SAACxzG,GAAU,IAC1BmvG,EAAcnvG,EAAMs3D,cAApB63C,WACA6c,EAAmBhsH,EAAMyV,UAAzBu2G,gBACP,MAAO,CACL7c,aACAthF,cAAem+F,EAAkBA,EAAgBj+G,YAAc,QAU3BiqL,EAAzB,EA7Da,SAAChlF,GAAU,IAC9BnlF,EAAiBmlF,EAAjBnlF,cAEDmhX,EADeh8R,EAAd7D,aACyB,EAAAxyD,mCAAmCG,MAH9B,GAIM,IAAA+rG,UAAS,IAJf,qBAI9B9iI,EAJ8B,KAIZ0pb,EAJY,KAMrC,OACE,+BAAKn9W,UAAW,uBAAyB08S,EAAW,YAAc,KAChE,+BAAK18S,UAAU,uBACb,mCAAoBq4D,YAAc,4CAAkBj7I,GAAI,uCACpC1B,OAAQ,EAAAqxC,eAAe1G,oBAEvB5yB,iBAAkBA,EAClB0pb,eAAgBA,IACpC,mCAA4B5hb,cAAeA,EACf7f,OAAQ,EAAAqxC,eAAe9G,YACvBu3V,mBAAmB,EACnB/pX,iBAAkBA,EAClBuuK,kBAAmB,SAACvpL,EAASs2O,GAC3B,UAAiB68B,cAAcngN,SAAShzD,EAASs2O,Y,sIChCvF,Q,IACA,MACA,QACA,OACA,U,IACA,M,uDAEMquN,G,gBAQJ,WAAY18V,IAAO,gGACXA,IADW,OAEjB,EAAK4vK,qBAAuB,GAFX,E,oFAKC,MAC4Cl7Q,KAAKsrG,MAA5D5uF,EADW,EACXA,QAASi2M,EADE,EACFA,SAAUwoD,EADR,EACQA,mBAAoBnlQ,EAD5B,EAC4BA,aAC1Ciyb,EAAevrb,EAAQlB,KAAOkB,EAAU,CAAClB,KAAMkB,GAC/Cy+P,IAAuBn7Q,KAAKk7Q,qBAAqB/gR,SAAS8tc,EAAa3hc,SAAW,EAAAo2F,iBAAiBviG,SAAS8tc,EAAa3hc,UACvH2hc,EAAatuR,kBACjB35K,KAAKk7Q,qBAAqBnmR,KAAKkzc,EAAa3hc,QAC5CtG,KAAKwzN,0BAA0By0O,EAAcjyb,GAC1C6b,MAAK,WACA8gM,GACFA,QAIR3yN,KAAK+yN,2BAA2Bk1O,EAAc,GAAIt1O,K,+BAIlD,OAAO,8CAAoBzxM,aAAclhB,KAAKsrG,MAAMpqF,aAAczgB,SAAUT,KAAKsrG,MAAM7qG,e,gBA5BlFyhJ,UAAY,CACjBxlI,QAAS,UAAU/kB,OAAOshH,WAC1B05G,SAAU,UAAU5zC,KACpBo8F,mBAAoB,UAAU/4H,M,cA0CnB,IAAAt2C,UAbS,SAACxzG,GAAU,MACAA,EAAMgR,YAAhC4X,EAD0B,EAC1BA,aAAczgB,EADY,EACZA,SAErB,MAAO,CACL8B,UAAWjK,EAAM8J,UAAUG,UAC3ByT,aAAc1d,EAAMyc,YAAYiB,aAChCkL,eACAzgB,cAIuB,GAEZ,CAA6Cunc,I,8ECtD5D,W,OACA,OACA,QACA,S,IAMA,O,IACA,Q,IACA,O,8DAgJe,IAAAl8V,UAdS,SAACxzG,GAAU,IACzBmvG,EAAenvG,EAAMs3D,cAArB63C,WADyB,EAEqBnvG,EAAMgR,YAApDkiG,EAFyB,EAEzBA,kBAGR,MAAO,CACL/D,aACAvmF,aAP+B,EAENA,aAMzBzgB,SAR+B,EAEQA,SAOvC+6D,aANuBljE,EAAM0zG,UAAvBxwC,aAONkmD,wBAAyBlW,EAAkB/2G,UAIhC,EA7ImB,SAAC62G,GAAU,IACnCjoG,EAAyGioG,EAAzGjoG,QAASuK,EAAgG09F,EAAhG19F,MAAOyG,EAAyFi3F,EAAzFj3F,MAAO/N,EAAkFglG,EAAlFhlG,OAAQqzO,EAA0EruI,EAA1EquI,cAAe0uJ,EAA2D/8R,EAA3D+8R,gBAAiBC,EAA0Ch9R,EAA1Cg9R,mBAAoB17M,EAAsBthF,EAAtBshF,kBACnFpxH,EAAiB8vC,EAAjB9vC,aAEFovB,GAAY,IAAAk3D,UAAQ,WAMxB,MADiB,gCAAkCtmF,GAJlC6sU,IAAoBhlY,EAIyC,sBAAwB,MAErG,CAACm4D,EAAc6sU,EAAiBhlY,IAC7BwzF,GAAW,IAAAirD,UAAQ,kBAAMz+I,EAAQM,UAAUE,cAAe,IAAAC,oBAAmBT,EAAQM,UAAUE,aAAc,EAAA4sE,gBAAgBE,QAAUttE,EAAQM,UAAUC,kBAAiB,CAACP,EAAQM,UAAUE,aAAcR,EAAQM,UAAUC,kBAZxL,GAcV,IAAAk+I,UAAQ,WACvC,IAAM83F,GAAyB,IAAAH,2BAA0Bp2O,EAASs2O,GAClE,MAAO,CACLh6O,OAAO,IAAAk6O,uBAAsBx2O,EAAQM,UAAWi2O,GAChD/5O,QAAQ,IAAAk6O,wBAAuB12O,EAAQM,UAAWi2O,GAClDz8E,OAAO,IAAA28E,uBAAsBz2O,EAAQM,UAAWi2O,MAEjD,CAACv2O,EAASs2O,IAPLh6O,EAdmC,EAcnCA,MAAOE,EAd4B,EAc5BA,OAAQs9J,EAdoB,EAcpBA,MASjBusJ,GAAoB,IAAArpK,cAAY,SAAClqJ,GACrCA,EAAE40F,iBACFu9S,EAAmBjlY,GACnBupL,EAAkBvpL,EAASs2O,KAC1B,CAACt2O,EAASs2O,EAAe2uJ,EAAoB17M,IAE1Cs7Q,EAAkB,SAACpxL,GACvBA,EAAaqxL,QAAQ,YAAah0V,KAAK2W,UAAUznH,EAAQM,UAAUqE,KACnE8uQ,EAAaqxL,QAAQ,kBAAmBh0V,KAAK2W,UAAU6uH,EAAch2O,UAAUqE,KAC/E8uQ,EAAaqxL,QAAQ,QAASh0V,KAAK2W,UAAUnrH,IAC7Cm3Q,EAAaqxL,QAAQ,SAAUh0V,KAAK2W,UAAUjrH,IAC9Ci3Q,EAAaqxL,QAAQ,QAASh0V,KAAK2W,UAAUqyC,IAC7C25G,EAAaqxL,QAAQ,SAAUh0V,KAAK2W,UAAUxkH,IAE9C,IAAM8hc,EAAY,IAAI53Y,MACtB43Y,EAAUrpc,IAAM83F,EAChBigL,EAAauxL,aAAaD,EAAW,EAAG,IAwD1C,OACE,+BACEx9W,UAAWA,EACXv2E,MAAOA,EACP7c,IAAKoW,EACLg1Q,WAAA,EACA0lL,YA3DoB,SAACnyc,GACvB+xc,EAAgB/xc,EAAE2gR,eA2DhB9V,aAxDqB,SAAC7qQ,GACxBA,EAAE40F,iBACF50F,EAAE20F,kBAEF,IAAM2V,EAAQtqG,EAAE6jB,QAAQ,GAClBuub,EAAa,IAAIC,WAAW,YAAa,CAC7Czub,QAAS0mF,EAAM1mF,QACfI,QAASsmF,EAAMtmF,UAGjBhkB,EAAEugB,OAAOo3Q,cAAcy6K,GAEvB,IAAME,EAAY,IAAIC,UAAU,YAAa,CAC3CC,SAAS,EACTC,YAAY,EACZ9xL,aAAc,IAAI+xL,eAGpBX,EAAgBO,EAAU3xL,cAEX,UAAUpsN,YAClBojO,cAAc26K,IAoCnBvnM,WAjCmB,SAAC/qQ,GACtBA,EAAE40F,iBACF50F,EAAE20F,kBAEF,IAAM2V,EAAQtqG,EAAE8jB,eAAe,GACzBsub,EAAa,IAAIC,WAAW,UAAW,CAC3Czub,QAAS0mF,EAAM1mF,QACfI,QAASsmF,EAAMtmF,UAGjBhkB,EAAEugB,OAAOo3Q,cAAcy6K,GAEvB,IAAMzjZ,EAAS,UAAU4F,YACnBo+Y,EAAY,IAAIJ,UAAU,OAAQ,CACtCC,SAAS,EACTC,YAAY,EACZ7ub,QAAS0mF,EAAM1mF,QACfI,QAASsmF,EAAMtmF,QACf28P,aAAc,IAAI+xL,eAGpBX,EAAgBY,EAAUhyL,cAC1BhyN,EAAOgpO,cAAcg7K,IAYnBhsR,QAAS4sI,GAET,+BAAK9+N,UAAW,sDACbiM,EAAW,+BAAK93F,IAAK83F,EAAUjM,UAAU,2BAA2BspH,IAAI,KAAQ,MAEnF,+BAAKtpH,UAAW,uBACd,+BAAKA,UAAU,4BACZvnF,EAAQmV,kBAEX,+BAAKoyE,UAAU,mCACb,yCAASjrF,GAAS,GAAlB,OACA,yCAASE,GAAU,GAAnB,OACA,yCAASs9J,GAAS,KAEpB,+BAAKvyE,UAAU,6BACb,mCAAkB6gL,iBAAiB,EAAM9yK,YAAat1F,EAASunF,UAAU,mCACvD,IAAjBpvB,EAAqB,mCAAan4D,QAASA,EAAS+U,mBAAmB,IAAU,Y,8ECtI5F,I,IAAA,MACA,OACA,QAIA,QACA,O,IACA,S,IACA,OACA,S,IACA,S,IACA,O,mDAEA,IAkEMk4K,EAAqB,CACzB9oF,sCACAI,0CACAh3C,6B,WAIa,IAAAk7C,UAdS,SAACxzG,GAEvB,MAAO,CACLmvG,WAFmBnvG,EAAMs3D,cAApB63C,cAa+B6oF,EAAzB,EAzEe,SAAChlF,GAAU,IAChC1D,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBACrBC,EAA4B6D,EAA5B7D,WAAY72C,EAAgB06C,EAAhB16C,aACb02U,EAAW7/R,IAAe,EAAAh+F,cAAc+rC,YAAciyD,IAAe,EAAAh+F,cAAcgsC,eAAiBgyD,IAAe,EAAAh+F,cAAcquC,OA4BvI,OACE,+BAAK8yC,UAAW,uBAAyB08S,EAAW,YAAc,KAChE,+BAAK18S,UAAU,iBACb,+BAAKA,UAAU,sBACb,+BAAKA,UAAU,qBACb,4CAAkB5iF,GAAG,0CAEvB,kCAAQ4iF,UAAU,gBACVkyF,QAbI,WAClBt1E,EAAkB,EAAA/1D,2BAA2ByB,MAC7C00D,EAAoB,EAAAn2D,2BAA2ByB,UAc3C,+BAAK03C,UAAU,8BACb,+BAAKA,UAAW,4BAEZ,mCAAoBtkF,OAAQmhG,EAEXmlF,kBAAmB,SAACvpL,GArC/CutD,EACE,CACE1a,MAAO,UAAUz7B,KAAKC,cAAc,CAAC1S,GAAI,oCACzC6oD,QAPG,mCAA2Bk4Y,aAActhW,IAQ5C32C,UAAU,EACVC,gBAAiB,WACf,UAAqB/T,QAAQgsZ,mBAC7B,IAAA73Y,mBAEFC,YAAa,UAAU32C,KAAKC,cAAc,CAAC1S,GAAI,+BAC/CqpD,gCACAC,WAAY,UAAU72C,KAAKC,cAAc,CAAC1S,GAAI,0C,6FCnCtD,O,OACA,O,IACA,QACA,QACA,S,IACA,QACA,S,IACA,M,mDAEA,IAAMihc,EAAqB,SAAC39V,GAAU,IAC7BshF,EAAqBthF,EAArBshF,kBACAE,EAAsBxhF,EAAtBwhF,mBACAxmL,EAAUglG,EAAVhlG,OAH6B,EAIA,UAAM66I,SAAS,GAJf,qBAI7B+nT,EAJ6B,KAIjBC,EAJiB,QAKZ,IAAAngD,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAL2B,qBAe9BpmM,GADS,IAAAzB,oBACa8a,2BAA2B3vB,GACjD2+E,GAAW,IAAAoyF,aAAYz6J,EAAc,GAAI,IAAI,GAAM,GAEzD,OACE,wCAEIA,GAAgBA,EAAapB,OAASoB,EAAapB,KAAK42E,oBACpD,mCAAoB11E,QAASE,EAAc+1M,SAAU,kBAAM3P,EAAY,IAAIo4D,YAAY,IACvFn2L,EACCj+E,QAAO,SAAA2Y,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUi4O,sBACzC9zO,KAAI,SAAC6X,EAAS/R,GACf,IAAMg9E,EAAYs+W,GAAeA,EAAW1tb,KAAK7X,UAAUqE,KAAO2X,EAAQnE,KAAK7X,UAAUqE,GAAM,kDAAoD,yBAEnJ,OACE,+BAAK4iF,UAAWA,EAAWpzF,IAAKoW,EAC3BkvK,QAAS,SAAC3mL,GAAD,OArBxBy2L,EAFoCvpL,EAuBgBsc,GApBpDwpb,EAAc9lc,QACdypL,EAAmBzpL,GAJK,IAAYA,IAwBxB,+BAAKunF,UAAU,eACb,mCAAkBvnF,QAASsc,EAAQnE,QAErC,+BAAKovE,UAAU,iBACb,+BAAKA,UAAU,iDAoB3B0lG,EAAqB,CACzBxD,yCAGFm8Q,EAAmB/mT,UAAY,CAC7B0qC,kBAAmB,UAAU7N,M,WAGhB,IAAAjzE,UAfS,SAACxzG,GAEvB,MAAO,CACLmvG,WAFmBnvG,EAAMs3D,cAApB63C,cAc+B6oF,EAAzB,CAA6C24Q,I,iGCxE5D,MACA,OACA,SACA,O,IACA,QACA,QACA,QACA,Q,IACA,M,mDAEA,IAAMG,EAA4B,SAAC99V,GAAU,IACpCiiG,EAA8EjiG,EAA9EiiG,gBAAiBD,EAA6DhiG,EAA7DgiG,mBAAoBr8L,EAAyCq6F,EAAzCr6F,gBAAiBwJ,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAC5D4wb,EAAgBz9V,EAAhBy9V,aAEDr7O,EAAwB,SAAC27O,GAC7B,IAAIhrL,EAAUA,GAAVA,qBAAc9wE,IAClB8wE,EAAQlkR,SAASkvc,GACbhrL,EAAUA,EAAQr3Q,QAAO,SAAAV,GAAA,OAAUA,IAAW+ic,KAC9ChrL,EAAQtpR,KAAKs0c,GACjB/7P,EAAmB+wE,IA2BfnjQ,GAAS,IAAAC,oBAEf,OACE,+BAAKyvE,UAAW,qBACd,+BAAKA,UAAW,mBACd,+BAAKA,UAAW,OACd,+BAAKA,UAAW,wCACd,mCAAkBvnF,QAAS4N,EAAgBuK,OAC3C,mCACE,4CAAkBxT,GAAG,oCADvB,IAC4DiJ,EAAgBuK,KAAKhD,mBAGnF,+BAAKoyE,UAAW,wCACbl2F,OAAOmc,KAAP,sBAAgC/I,KAAI,SAAAxB,GACnC,GAAIyic,IAAiBzic,EACnB,OAAO,EAAAo1C,mBAAmBp1C,GAAQwB,KAAK,SAAAwhc,GACrC,IACM5zO,EAAUnoB,EAAgBpzM,SAASmvc,GACzC,OACE,+BAAK9xc,IAAK,kBAAkB8xc,EACvB1+W,UAAW,iCACd,gCAAMA,UAAW,kCACK8qI,EAAS,wBAA0B,IAEnD54C,QAAS,kBAA+B4wC,EAAsB47O,MAChE,gCAAM1+W,UAAW,qBACXkyF,QAAS,kBAA+B4wC,EAAsB47O,KAlDtE,SAAChjc,EAAQ4U,GAE3B,IAAM0B,EAAe1B,EAAOgb,wBAAwB5vB,GACpD,GAAIsW,EACF,OAAO,IAAAd,qBAAoBc,EAAcnC,EAAMtC,GAAgBxZ,QAAQ,SAAU,IAGrF,OAAQ2H,GACN,IAAK,cACL,KAAK,EAAAipC,cAAc0B,oBACjB,MAAO,gBACT,KAAK,EAAA1B,cAAcyB,oBACnB,IAAK,iBACH,MAAO,gBACT,IAAK,wBACH,MAAO,gBACT,IAAK,iBACH,MAAO,UACT,IAAK,gBACH,MAAO,SACT,QACE,MAAO,IA8BU2pK,CAAc2uP,EAAepub,gBAyBhDo1K,EAAqB,CACzBxD,wCACAwgB,yCAGF87P,EAA0BlnT,UAAY,CACpC6mT,aAAc,UAAUvma,Q,WAGX,IAAAulH,aACb,IAAAj8C,UArBsB,SAACxzG,GAAU,IAC1BmvG,EAAcnvG,EAAMs3D,cAApB63C,WAD0B,EAEUnvG,EAAM40D,kBACjD,MAAO,CACLu6C,aACAx2F,gBAL+B,EAE1BA,gBAILs8L,gBAN+B,EAETA,gBAKtBp1L,eAAgB7f,EAAMqN,mBAcC2qL,EAAzB,CAA6C84Q,K,8EC5G/C,I,IAAA,MACA,OACA,OAEA,QACA,Q,IACA,Q,IACA,S,IACA,S,mDAKA,IAoDM94Q,EAAqB,CACzB9oF,sCACAI,2C,WAIa,IAAAkE,UAfS,SAACxzG,GAAU,IAC1BmvG,EAAcnvG,EAAMs3D,cAApB63C,WACA6c,EAAmBhsH,EAAMyV,UAAzBu2G,gBACP,MAAO,CACL7c,aACAthF,cAAem+F,EAAkBA,EAAgBj+G,YAAc,QAU3BiqL,EAAzB,EA1Dc,SAAChlF,GAAU,IAC/BnlF,EAAiBmlF,EAAjBnlF,cAEDmhX,EADeh8R,EAAd7D,aACyB,EAAAxyD,mCAAmCE,MAEnE,OACE,+BAAKy1C,UAAW,uBAAyB08S,EAAW,YAAc,KAChE,+BAAK18S,UAAU,uBACb,mCAAoBq4D,YAAc,4CAAkBj7I,GAAI,uCACpC1B,OAAQ,EAAAqxC,eAAe3G,sBAEzC,mCAA4B7qB,cAAeA,EAClB7f,OAAQ,EAAAqxC,eAAe7G,eACvBs3V,mBAAmB,EACnBx7M,kBAAmB,SAACvpL,EAASs2O,GAC3B,UAAiB68B,cAAcngN,SAAShzD,EAASs2O,Y,8EC5BtF,I,IAAA,MACA,OACA,QACA,QACA,O,IACA,S,mDAEA,IA6CMrpD,EAAqB,CACzB9oF,sCACAI,2C,WAIa,IAAAkE,UAfS,SAACxzG,GAAU,IAC1BmvG,EAAcnvG,EAAMs3D,cAApB63C,WACA6c,EAAmBhsH,EAAMyV,UAAzBu2G,gBACP,MAAO,CACL7c,aACAthF,cAAem+F,EAAkBA,EAAgBj+G,YAAc,QAU3BiqL,EAAzB,EAnDoB,SAAChlF,GAAU,IACrCnlF,EAAiBmlF,EAAjBnlF,cACAyhF,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBAEtB8/R,EADeh8R,EAAd7D,aACyB,EAAAxyD,mCAAmC60K,MAOnE,OACE,+BAAKl/H,UAAW,uBAAyB08S,EAAW,YAAc,KAChE,+BAAK18S,UAAU,iBACb,+BAAKA,UAAU,sBACb,+BAAKA,UAAU,qBACb,4CAAkB5iF,GAAG,wCAEvB,kCAAQ4iF,UAAU,gBACVkyF,QAbI,WAClBt1E,EAAkB,EAAA/1D,2BAA2ByB,MAC7C00D,EAAoB,EAAAn2D,2BAA2ByB,UAc3C,+BAAK03C,UAAU,8BACb,+BAAKA,UAAW,4BAEZ,mCAAkBzkE,cAAeA,EACf7f,OAAQ,EAAAqxC,eAAeE,wB,6FCjCvD,O,OACA,O,IACA,QACA,QACA,S,IACA,QACA,S,IACA,M,IACA,S,mDAEA,IAAM0xZ,EAAmB,SAACj+V,GAAU,IAC3BwhF,EAAsBxhF,EAAtBwhF,mBACAxmL,EAAUglG,EAAVhlG,OAF2B,EAGE,UAAM66I,SAAS,GAHjB,qBAG3B+nT,EAH2B,KAGfC,EAHe,QAIV,IAAAngD,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAJyB,qBAe5BpmM,GADS,IAAAzB,oBACa8a,2BAA2B3vB,GACjD2+E,GAAW,IAAAoyF,aAAYz6J,EAAc,GAAI,IAAI,GAAM,GAEzD,OACE,wCAEIA,GAAgBA,EAAapB,OAASoB,EAAapB,KAAK42E,oBACpD,mCAAoB11E,QAASE,EAAc+1M,SAAU,kBAAM3P,EAAY,IAAIo4D,YAAY,IACvFn2L,EAASn9E,KAAI,SAAC6X,EAAS/R,GACvB,IAAMg9E,EAAYs+W,GAAeA,EAAW1tb,KAAK7X,UAAUqE,KAAO2X,EAAQnE,KAAK7X,UAAUqE,GAAM,kDAAoD,yBAEnJ,OACE,+BAAK4iF,UAAWA,EAAWpzF,IAAKoW,EAC3BkvK,QAAS,SAAC3mL,GAAD,OApBxBgzc,EAFoC9lc,EAsBgBsc,GAnBpDmtK,EAAmBzpL,GACnB,UAAmBwpL,iBAAgB,QACnC,UAAmBppF,iBALK,IAAYpgG,IAuBxB,+BAAKunF,UAAU,eACb,mCAAkBvnF,QAASsc,EAAQnE,QAErC,+BAAKovE,UAAU,iBACb,+BAAKA,UAAU,iDAoB3B0lG,EAAqB,CACzBxD,yCAGFy8Q,EAAiBrnT,UAAY,CAC3B57I,OAAQ,UAAUk8B,OAAOy2E,Y,WAGZ,IAAAnN,UAfS,SAACxzG,GAEvB,MAAO,CACLmvG,WAFmBnvG,EAAMs3D,cAApB63C,cAc+B6oF,EAAzB,CAA6Ci5Q,I,8ECvE5D,I,IAAA,O,IACA,O,IACA,O,IACA,MACA,QACA,QACA,S,IACA,OACA,SACA,Q,6DAiIe,IA/HY,WAAW,WACpCvpc,KAAK0jG,YAAc,KACnB1jG,KAAKwoT,YAAc,KACnBxoT,KAAK8xD,IAAM,KACX9xD,KAAK0zP,0BAA2B,EAEhC1zP,KAAK6sL,gBAAkB,SAACgnK,GACtB,UAAavrS,aAAY,GACzB,UAAUe,eAAc,GACxB,UAAUG,sBAAqB,GAC/B,UAAOxD,UAAUC,QAAS,EAC1B,UAAOD,UAAUE,OAAQ,EAEpB2tS,IACH,UAAO7tS,UAAUG,UAAW,GAE9BuoC,YAAW,WACT,UAAO1oC,UAAUG,UAAW,IAC3B,MAGLnmD,KAAKyjG,eAAiB,WACpB,IACEmlN,EADW,GAEXC,EAFW,GAITC,EAAS1vT,SAAS8oD,cAAc,OACpC4mQ,EAAOl3N,YAAc,YAErB,IAAIm3N,GAAO,aAAED,GACbC,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAmBVkpT,EAAKpmN,GAAG,QAhBU,WAChB,IACIqmN,SACAJ,EAAWC,GACbG,EAAQH,EAAYD,EACpBA,EAJW,GAKXC,EALW,GAKUG,IAErBA,EAAQJ,EAAWC,EACnBA,EARW,GASXD,EATW,GASSI,GAEtB,UAAazgQ,UAAU,cAAe,GAAM,GAC5C,EAAKm7C,YAAc,CAAEh1C,MAAOo6P,EAAQnpT,MAAOipT,EAAU/oT,OAAQgpT,GAC7D,EAAK51D,oBAGP81D,EAAKpnC,UAAS,aAAE,SAChBonC,EAAKh5E,KAAK,MAAV,gBAEA,EAAKj+K,IAAMi3P,GAGb/oT,KAAKizP,eAAiB,WACpB,UAAa1qM,UAAU,gBAAiB,GAAM,GAC9C,UAAakR,SACX,UAAaC,OAAOM,OACpB,EAAKyuP,aACL,EACA,UAAa7uP,WAAWojC,SAE1B,UAAavjC,SACX,UAAaC,OAAOK,SACpB,EAAKvR,UACL,EACA,UAAaoR,WAAWojC,UAI5Bh9F,KAAK+3D,iBAAmB,WACtB,UAAa9O,YAAY,GACzB,UAAa26C,YAAY,GACzB,UAAO59C,UAAUE,OAAQ,GAE3BlmD,KAAKq4D,QAAU,SAACuyG,EAASxnE,GACnBA,GACF,UAAaQ,YAAY,EAAM,UAAalqC,OAAOM,QACnD,EAAK05L,0BAA2B,GAEhC,EAAK37L,oBAIT/3D,KAAKwoD,UAAY,SAACJ,GAEhB,IAAIiE,EAAc,UAAUF,iBACxB2nS,EAAoB,UAAUlnS,uBAClC,GAAIP,EAAa,CACf,IAAMtlD,EAAQ,UAAM5E,WACd02D,EAAqB9xD,EAAMgH,UAAU8qD,mBACrC5nD,EAAkBlK,EAAMmmD,kBAAkBj8C,gBAC1C8iV,EAAwB9iV,EAAgBuK,KAAKhD,iBAE/C6zC,GAAeynS,GACjB,IAAA5kS,gBAAe7C,EAAaynS,EAAmB,EAAAn3S,0BAA0B9E,cAAe5mC,EAAgBuK,KAAK7X,UAAUqE,GAAI,KAAM+rV,GAEjI,UAAM9vU,UAAS,IAAAujF,mBAAkB,EAAAvyD,mCAAmC60K,QAGtE,UAAM7lM,UAAS,IAAA60C,wBAAuBD,EAAqB,IAE7D,EAAKu6L,yBAEPpzP,KAAKozP,sBAAwB,WACvBpzP,KAAK0zP,2BACP1zP,KAAK0zP,0BAA2B,EAChC,UAAa9vJ,YAAY5jG,KAAM,UAAa05D,OAAOK,UACnD/5D,KAAK6sL,iBAAgB,GACrB7sL,KAAKyjG,mBAGTzjG,KAAKyoT,aAAe,SAAC9kQ,GACnB,GAAI,EAAK+/C,YAAYh1C,QAAU,aAAEv2D,QAAQwH,QAAU,IAAM,CACvD,IAAIspT,EAAO,UAAajpN,kBACpBipN,GACFtlQ,EAAI2rC,UAAU,EAAKoU,YAAYh1C,MAAOu6P,EAAK7uS,EAAI,GAAI6uS,EAAK5uS,EAAI,GAAI,EAAKqpF,YAAY/jG,MAAO,EAAK+jG,YAAY7jG,Y,mHCpIjH,O,OACA,OACA,SACA,QACA,WAEA,QAIA,Q,IACA,SACA,QACA,QACA,Q,IACA,Q,mDAEA,IAgIMywL,EAAqB,CACzB9oF,sCACAI,2C,WAGa,IAAAmgD,aACb,IAAAj8C,UAlBsB,SAACxzG,GAAU,IAC1BmvG,EAAcnvG,EAAMs3D,cAApB63C,WAD0B,EAEAnvG,EAAMgR,YACvC,MAAO,CACLm+F,aACAhnG,SAL+B,EAE1BA,SAILygB,aAN+B,EAEhBA,aAKf/I,eAAgB7f,EAAMqN,gBACtB+kG,mBAAoBpyG,EAAMyV,UAAU28F,sBAUb4lF,EAAzB,EAtIsB,SAAChlF,GAAU,IAC1B1D,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBACrBC,EAAgF6D,EAAhF7D,WAAYhnG,EAAoE6qG,EAApE7qG,SAAU0X,EAA0DmzF,EAA1DnzF,eAAgBsC,EAA0C6wF,EAA1C7wF,KAA0ByG,GAAgBoqF,EAApCZ,mBAAoCY,EAAhBpqF,cACjEomX,EAAW,EAAAtvV,6BAA6B79C,SAASstG,GAEjD8gS,GAAe,IAAAtoP,QAAO,MALK,GAMa,IAAAkB,UAAS,GANtB,qBAM1BqnP,EAN0B,KAMTC,EANS,OAOa,UAAMtnP,SAAS,GAP5B,qBAO1BknP,EAP0B,KAOTC,EAPS,QAQT,IAAAnnP,UAAS,IARA,qBAQ1B6mP,EAR0B,KAQpBwhE,EARoB,QASC,IAAAroT,WAAS,GATV,qBAS1B0yD,EAT0B,KASfi0L,EATe,QAUC,IAAA3mP,UAAS,KAVV,qBAU1BsoT,EAV0B,KAUfC,EAVe,MAYjC,IAAA/nV,YAAU,WACJ4mR,EAAa/zR,SACfi0R,EAAmBF,EAAa/zR,QAAQ1C,gBAEzC,CAAC5wF,KAEJ,IAAAygG,YAAU,WACR+nV,EAAajpc,EAAW,IAAM,OAC7B,CAACA,KAEJ,IAAAkhH,YAAU,WACR,IAAM,mCAAY,gGACZla,IAAc7qF,EADF,mBAEdkrX,GAAa,IACTlrX,GAAiBA,EAAaw1E,oBAHpB,iCAIN,IAAAO,6BAA4B/1E,GAJtB,OAMRqoE,EAAW/pE,EAAOo9E,sBACtB,CAAE98E,KAAMoB,GACR,GACA,GACAA,EAAauJ,cACb,MACA,GACA,CAAEs5G,aAAc,KAAMC,gBAAiB,OAGnChgB,EAAmBz6B,EAASj+E,QAAO,SAAA2Y,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUi4O,sBAC3E4tN,EAAQ9pV,GACRooR,GAAa,GAlBC,kDAAZ,8CAsBMj2W,MAAK,SAAA96B,SAChB,CAACmkB,EAAQ0B,EAAc6qF,IAE1B,IAKMvsF,GAAS,IAAA4mI,UAAQ,kBAAM,IAAA3mI,sBAAoB,IAC3CyB,GAAe,IAAAklI,UAAQ,WAC3B,GAAIr6C,EAAY,CACd,IAAInhG,EAASmhG,EACTA,IAAe,EAAA9xD,gBAAgBuB,aACjC5wC,EAAS,SACAmhG,IAAe,EAAA9xD,gBAAgB6B,WACxClxC,EAAS,SAEX,IAAMsW,EAAe1B,EAAOgb,wBAAwB5vB,GAUpD,OAPA,gBAEA,wBAKOsW,KAGR,CAAC1B,EAAQusF,IACNxyC,GAAmB,IAAAn5C,qBAAoBc,EAAcnC,EAAMtC,GAEjE,OACE,+BAAKyyE,UAAW,wCAA0C08S,EAAW,YAAc,KACjF,+BAAK18S,UAAU,uBACb,+BAAKA,UAAU,yCACb,+BAAKA,UAAU,qBACZ31B,GAEH,kCAAQ21B,UAAU,gBACVkyF,QAtCI,WAClBt1E,EAAkB,EAAA/1D,2BAA2ByB,MAC7C00D,EAAoB,EAAAn2D,2BAA2ByB,UAuC3C,+BAAK03C,UAAU,uBAAuBo1D,IAAKuoP,GACvC10L,EACE,wCACA,gCACAl0M,MAAO8pc,EACP5pc,OAAQ2oY,EACR78D,SAAUq8D,EAAKvzY,OACfm3U,UAAW,IACX+mE,YAAa,gBAAGn7Y,EAAH,EAAGA,IAAKoW,EAAR,EAAQA,MAAOyG,EAAf,EAAeA,MAAf,OACX,mCACE7c,IAAKA,EACL6c,MAAOA,EACPhR,QAAS2kY,EAAKp6X,GACdgP,aAAcA,EACd+sb,aAActhE,IAAoBz6X,EAClCA,MAAOA,EACP06X,mBAAoBA,e,8EC1HtC,W,OACA,OACA,Q,IACA,OACA,QACA,SAGA,S,mDAQA,IAqDMh4M,EAAqB,CACzB7lF,sBAxDF,MAwDEA,uB,WAIa,IAAAqB,UAbS,SAACxzG,GAGvB,MAAO,KAU+Bg4L,EAAzB,EA1DY,SAAChlF,GAAU,IAC7BjoG,EAA2DioG,EAA3DjoG,QAASuZ,EAAkD0uF,EAAlD1uF,aAAchP,EAAoC09F,EAApC19F,MAAOyG,EAA6Bi3F,EAA7Bj3F,MAAOi0X,EAAsBh9R,EAAtBg9R,mBACrCqhE,EAAuCr+V,EAAvCq+V,aAAcl/V,EAAyBa,EAAzBb,sBACf9mG,EAAYN,EAAQmY,KAAK7X,UAEzBinF,GAAY,IAAAk3D,UAAQ,kBAAM6nT,EAAe,kDAAoD,2BAA0B,CAACA,IACxH9yW,GAAW,IAAAirD,UAAQ,kBAAMn+I,EAAUE,cAAe,IAAAC,oBAAmBH,EAAUE,aAAc,EAAA4sE,gBAAgBE,QAAUhtE,EAAUC,kBAAiB,CAACD,IAoBzJ,OACE,+BAAKinF,UAAWA,EAAWv2E,MAAOA,EAAO7c,IAAKoW,EACzCkvK,QAAS,SAAC3mL,GAAD,OApBU,SAACA,GAGzB,GADAmyY,EAAmB16X,GACf,EAAAoqC,6BAA6B79C,SAASyiB,EAAatW,QAAS,CAC9D,IAAMg0O,GAAoB,IAAAgB,aAAY33O,EAAUi4O,oBAC1ChC,GAAyB,IAAAS,2BAA0B12O,EAAW22O,GAC9D36O,GAAQ,IAAAk6O,uBAAsBl2O,EAAWi2O,GACzCz8E,GAAQ,IAAA28E,uBAAsBn2O,EAAWi2O,GAE/C5hP,QAAQ4B,IAAI,wBAAyB+J,EAAU4M,aAC/CvY,QAAQ4B,IAAI,yBAA0BggP,IACjB,IAAAtvD,+BAA8B1tK,EAAatW,OAAQ3C,EAAUqE,GAAI,CAACrI,QAAOE,OAAQs9J,SAE7FvgJ,EAAatW,SAAW,EAAAmD,cAAc0nC,YAC/Cs5D,EAAsB9mG,EAAUqE,IAMb0hT,KACnB,+BAAK9+N,UAAU,eACZiM,EAAW,+BAAK93F,IAAK83F,EAAUjM,UAAU,2BAA2BspH,IAAI,KAAO,MAElF,+BAAKtpH,UAAU,iBACb,+BAAKA,UAAU,kBACb,mCAAavnF,QAASA,EAAQmY,KAAMqsI,UAAW,MAEjD,+BAAKj9D,UAAU,gD,8ECpDvB,W,OACA,OACA,QACA,OACA,QACA,Q,IACA,S,IACA,SACA,S,mDAEA,IAkEM0lG,EAAqB,CACzB9oF,sCACAE,8CACAE,2C,WAIa,IAAAkE,UAdS,SAACxzG,GAAD,MAAY,CAClCs3J,eAAgBt3J,EAAMqR,cAAcimJ,eACpCnoD,WAAYnvG,EAAMs3D,cAAc63C,WAChCE,eAAgBrvG,EAAMs3D,cAAc+3C,eACpCE,aAAcvvG,EAAMs3D,cAAci4C,gBAUIyoF,EAAzB,EAzEc,SAAChlF,GAAU,IAE/BskD,EAAuEtkD,EAAvEskD,eAAgBjoD,EAAuD2D,EAAvD3D,eAAgBE,EAAuCyD,EAAvCzD,aAAcH,EAAyB4D,EAAzB5D,sBAC9CD,EAAsD6D,EAAtD7D,WAAYG,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBAClCogV,GAAkB,IAAA3nS,QAAO,OAE/B,IAAAS,iBAAgBknS,GAAiB,SAAChnV,GACR,CAAC,WAAY,YAAa,QAAS,YAAa,uBAAwB,8BAC3E3gG,MAAK,SAAA8mP,GAAA,OAAOnmJ,EAAMlqF,OAAOuqI,QAAQ8lG,QAChDp/I,EACFD,GAAsB,GAEtBF,EAAkB,QAGrB,GAeH,OACE,wCAEIooD,EAAiB,wCAAoB,KAEvC,iCAAOhlE,UAAW,YAAcglE,EAAiB,GAAI,UAAW5P,IAAK4nS,GACnE,+BAAKh9V,UAAU,mBACb,+BAAKA,UAAU,wBACZl2F,OAAOmc,KAAP,wBAAkC/I,KAAI,SAACmpE,EAAMrjE,GAAP,OACrC,kCAAQpW,IAAKoW,EACLg9E,UAAW,kBAAmB3Z,GAAQ42B,IAAiB52B,EAAO,kBAAoB,IAClF6rG,QAAS,kBAxBH,SAACzlE,GAGzB,QAFA,IAAAjpD,uBACAw5C,EAAoByP,GACZA,GACN,KAAK,EAAA/jE,qBAAqBE,SAC1B,KAAK,EAAAF,qBAAqBG,KACxB+zD,EAAkBC,EAAa,GAAI4P,GACnC,MACF,QACE7P,EAAkB,KAeWkiN,CAAkBz4O,IACjC/6B,MAAO+6B,GACb,gCAAM2Z,UAAU,eACd,4CAAkB5iF,GAAI,4BAA8BipE,UAK5D,+BAAK2Z,UAAU,kCACb,+BAAKA,UAAU,kCACf,mCAAkBxyB,SAAS,Y,8EC7DvC,W,OACA,OACA,OAEA,Q,IACA,Q,IACA,OACA,QACA,U,mDAEA,IAiCMk4H,EAAqB,CACzB1oF,0CACAJ,uC,WAGa,IAAAugD,aACb,IAAAj8C,UAXsB,SAACxzG,GAAD,MAAY,CAClCs3J,eAAgBt3J,EAAMqR,cAAcimJ,eACpC/3F,kBAAmBv/D,EAAMqR,cAAckuD,qBASdy4H,EAAzB,EAvCqB,SAAChlF,GAAU,IACzBzzC,EAA6EyzC,EAA7EzzC,kBAAmB+3F,EAA0DtkD,EAA1DskD,eAAgBhoD,EAA0C0D,EAA1C1D,oBAAqBJ,EAAqB8D,EAArB9D,kBAsB/D,OApBA,IAAAma,YAAU,WAaR,OAXA/Z,EAAoB,EAAAn2D,2BAA2ByB,MAC/C,UAAO0P,UAAUsC,eAAiB,EAAAzT,2BAA2ByB,KAC7Ds0D,EAAkB,KAClB,IAAA+gH,eAGI1wJ,EAAkBpjE,QACpB,UAAcuhE,OAEhB,UAAc0/G,YAAW,GAElB,WACL,UAAcA,YAAW,GACzB,UAAcW,uBAGhB,CAACzmB,EAAgBhoD,EAAqBJ,IAGtC,+BAAK5c,UAAW,gC,oGClCpB,W,OACA,OAEA,QACA,OACA,SACA,Q,IACA,O,mDAE4Bm8S,EAAfA,aAAe,aAArB,IAgEDz2M,EAAqB,CACzB1oF,2C,WAIa,IAAAkE,UAZS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCI,aAAcvvG,EAAMs3D,cAAci4C,gBASEyoF,EAAzB,EAlEK,SAAChlF,GAAU,IAEtB7D,EAAiD6D,EAAjD7D,WAAYI,EAAqCyD,EAArCzD,aAAcD,EAAuB0D,EAAvB1D,oBAC3B2/R,GAAa,IAAAtnP,QAAO,IACpBqnP,EAAW7/R,IACXI,IAAiB,EAAAv0D,qBAAqBG,MAAQo0D,KAAgBA,EAAhBA,4BAEpD,IAAA8Z,YAAU,WACR,IAAM7nE,EAAUplD,OAAOyhB,OAAOoxX,EAAW/yR,SACrC8yR,GACF,IAAArqF,gBAAenjQ,IAEf,IAAAojQ,aAAYpjQ,KAGb,CAACwtV,IAgBJ,OACE,+BAAK18S,UAAW,oBAAsB08S,EAAW,YAAc,KAC7D,+BAAK18S,UAAU,0CAEbl2F,OAAOmc,KAAP,6BAAuC/I,KAAI,SAACmpE,EAAMrjE,GAChD,IAAIg9E,EAAa,8CAAgD3Z,GAAQ42B,IAAiB52B,EAAO,kBAAoB,IACrH,OACE,kCAAQz5E,IAAKoW,EACLoyI,IAAK,SAAAksG,GAAA,OAAMq7I,EAAW/yR,QAAQ5mG,GAASs+O,GACvCthK,UAAWA,EACXkyF,QAAS,kBAxBD,SAACyN,GAEzB,OADA3iF,EAAoB2iF,GACZA,GACN,KAAK,EAAA12I,0BAA0BG,SAC3B,UAAiBA,WACnB,MACF,KAAK,EAAAH,0BAA0BI,WAC3B,UAAiBwgG,iBAiBQi1K,CAAkBz4O,KACvC,gCAAM2Z,UAAU,eACd,4CAAkB5iF,GAAI,4BAA8BipE,e,8ECvDpE,I,IAAA,MACA,OACA,QACA,Q,IACA,S,mDAEA,IA8BMq/G,EAAqB,CACzBzsE,mD,WAIa,IAAA/X,UAbS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChCn0C,gBAAiBh7D,EAAM+6D,iBAAiBC,gBACxCy0C,oBAAqBzvG,EAAMs3D,cAAcm4C,uBASLuoF,EAAzB,EAnCQ,SAAChlF,GAAU,IACzBh4C,EAAoDg4C,EAApDh4C,gBAAiBm0C,EAAmC6D,EAAnC7D,WAAYM,EAAuBuD,EAAvBvD,oBAC9Bu/R,GAAY7/R,IAAe,EAAAh2D,2BAA2BkD,SAAWozD,IAAwB,EAAAxxD,uBAAuBC,gBACjH8c,EAAgB7+D,OAAS,EAG9B,OACE,+BAAKm2F,UAAW,4BAA8B08S,EAAW,YAAc,KACrE,+BAAK18S,UAAU,oBAEXt3B,EAAgBxrD,KAAI,SAACurP,EAAgBzlP,GACnC,GAAKylP,EAGL,OAAO,mCAAmBmiJ,YAVhB,kBAU0CniJ,eAAgBA,EAAgBzlP,MAAOA,EAAOpW,IAAKoW,a,8ECpBnH,I,IAAA,MACA,O,IACA,MACA,QACA,SACA,SACA,S,IACA,O,mDAEA,IAAMg8b,EAAoB,SAACt+V,GAAU,IAC5BmtL,EAAyCntL,EAAzCmtL,eAAgBplC,EAAyB/nJ,EAAzB+nJ,eAAgBzlP,EAAS09F,EAAT19F,MAEnC8mS,GAAgB,IAAA18N,2BAA0BygN,EAAehkS,OAAOyC,OAEhE2yc,EAAmBx2M,EAAezoB,eAUlC6qK,EAAWpiJ,EAAeO,cAY9B,OACE,8BAAIhpK,UAAU,0CAA0Cg6M,UAAQ,iBAC9D,8BAAIh6M,UAAU,2CACZ,+BAAKA,UAAU,mBAAkB,IAAAnU,aAAY7oE,EAAQ,IACrD,+BAAKg9E,UAAU,iBACb,+BAAK7rF,IAAA,aAAiBm1M,IAAI,MAE5B,+BAAKtpH,UAAU,iBACb,iCAAOA,UAAU,+BACVx/E,KAAK,SACLwvH,IAAI,IACJk7F,SAAU,SAAC3/N,GAAD,OAhBHe,EAgBuBf,EAAEugB,OAAOxf,MAfhD0hS,GAAY1hS,OAChBm8P,EAAewlC,iBAAiBD,EAAUvlC,GAFvB,IAACn8P,EAChB0hS,GAgBStnJ,YAAamnJ,EAAe54R,OAC5B3I,MAAOuhS,EAAe54R,UAE/B,+BAAK+qF,UAAU,uBACb,mCACE,+BAAK7rF,IAAA,WAAem1M,IAAI,MAE1B,+CAKJ,8BAAItpH,UAAU,2CACZ,+BAAKA,UAAU,iBACb,+BAAK7rF,IAAA,aAAiBm1M,IAAI,MAE5B,+BAAKtpH,UAAU,iBACb,iCAAOx/E,KAAK,SACLyvH,IAAKgvU,EACLjvU,IAAI,IACJhwC,UAAU,+BACV0mD,YAAaojK,EACbx9S,MAAOw9S,EACP5xN,SAAU2yT,EAAShhZ,QAAU,EAC7BqhO,SAAU,SAAC3/N,GAAD,OAxDHe,EAwDuBf,EAAEugB,OAAOxf,MAvDhD0hS,EAAsC,WAA3B,UAAWhsR,aACtB,IAAA4pE,aAAYt/E,IACXA,OAELm8P,EAAeklC,iBAAiBK,EAAUH,EAAgBplC,GALvC,IAACn8P,EAChB0hS,MAyDA,+BAAKhuM,UAAU,uBAAf,aAwBRg/W,EAAkB1nT,UAAY,CAC5B4nT,kBAAmB,UAAUlwZ,MAAV,2BACnBmwZ,kBAAmB,UAAUnwZ,MAAV,4BAGrB,IAMM02I,EAAqB,CACzBijE,6C,WAIa,IAAAznJ,UAXS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,cASI6oF,EAAzB,CAA6Cs5Q,I,8EClH5D,I,IAAA,MACA,OACA,QACA,Q,IACA,S,mDAEA,IA4BMt5Q,EAAqB,CACzBzsE,mD,WAIa,IAAA/X,UAZS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChC/qD,qBAAsBpkD,EAAM40D,kBAAkBxQ,wBASV4zI,EAAzB,EAjCQ,SAAChlF,GAAU,IACzB5uD,EAAoC4uD,EAApC5uD,qBACD4qV,EADqCh8R,EAAd7D,aACG,EAAAlxD,uBAAuBvB,kBAAoB0H,EAAqBjoD,OAAS,EAGzG,OACE,+BAAKm2F,UAAW,gBAAkB08S,EAAW,YAAc,KACzD,+BAAK18S,UAAU,oBAEXluC,EAAqB50C,KAAI,SAACkic,EAAqBp8b,GAC7C,GAAKo8b,EAGL,OAAO,mCAAmBx0D,YAVhB,uBAU0CniJ,eAAgB22M,EAAqBp8b,MAAOA,EAAOpW,IAAKoW,a,8ECnBxH,I,IAAA,MACA,OACA,Q,IACA,S,IACA,O,8DAuCe,IAAAk+F,UAZS,SAACxzG,GACvB,MAAO,CACLuvG,aAAcvvG,EAAMs3D,cAAci4C,aAClCJ,WAAYnvG,EAAMs3D,cAAc63C,WAChChrD,sBAAuBnkD,EAAM40D,kBAAkBzQ,yBAIxB,GAIZ,EArCU,SAAC6uD,GAAU,IAC3B7uD,EAAqC6uD,EAArC7uD,sBAED6qV,EAFsCh8R,EAAd7D,aAEE,EAAAlxD,uBAAuB1B,eAAiB4H,EAAsBhoD,OAAS,EAEvG,OACE,+BAAKm2F,UAAW,gBAAkB08S,EAAW,YAAc,KACzD,+BAAK18S,UAAU,oBAEXnuC,EAAsB30C,KAAI,SAACoyV,EAAsBtsV,GAE/C,GADyB,UAAqBgvC,UAAU48S,gBAAgBU,EAAqBlyV,IAE3F,OAAO,mCACLkyV,qBAAsBA,EAEtBtsV,MAAOA,EACPpW,IAAKoW,a,8ECtBrB,I,IAAA,MACA,O,IACA,MACA,OAEA,S,IACA,SACA,Q,mDAEA,IAAMq8b,EAAsB,SAAC3+V,GAAU,IAC9B4uP,EAA+B5uP,EAA/B4uP,qBAAsBtsV,EAAS09F,EAAT19F,MAEvBs8b,EAAwBhwG,EAAqBtlS,SAYnD,OACE,+BAAKg2B,UAAU,mBACb,8BAAIA,UAAU,kBAEZ,4CAAkB5iF,GAdP,WACf,OAAQkyV,EAAqB9uV,MAC3B,KAAK,EAAAkzC,uBAAuBZ,mBAC1B,MAAO,2CACT,KAAK,EAAAY,uBAAuB1B,UAC5B,QACE,MAAO,mCAQeutZ,KACtB,gCAAMv/W,UAAU,kBACX,KAAOh9E,EAAQ,IAAIvV,OAAO,KAGjC,+BAAKuyF,UAAU,oBAEXs/W,EAAsBpic,KAAI,SAACsic,EAAsBx8b,GAC/C,OAAO,mCAAqBpW,IAAKoW,EACLw8b,qBAAsBA,EACtBlwG,qBAAsBA,EACtBtsV,MAAOA,UAQ/Cq8b,EAAoB/nT,UAAY,CAC9Bg4M,qBAAsB,UAAUtgT,MAAV,8B,WAaT,IAAAkyD,UAVS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,cAIT,GAIZ,CAA6CwiW,I,8EC7D5D,I,IAAA,MACA,O,IACA,MACA,OAEA,SACA,SAKA,S,IACA,O,IACA,S,IACA,OACA,Q,mDAEA,IAAMI,EAAsB,SAAC/+V,GAAU,IAC9B8+V,EAA+B9+V,EAA/B8+V,qBAGH11J,GAHkCppM,EAAT19F,MAGTw8b,EAAqB31c,QACrC61c,EAAmBF,EAAqB78N,UACtCiwE,EAAmB,UAAqB5gQ,UAAUk2S,eAAes3G,EAAqBpic,IAqB5F,OACE,+BAAK4iF,UAAW,sBAAwBw/W,EAAqBz6V,WAAa,+BAAiC,OACzG,+BAAK/kB,UAAU,kBACb,+BAAKA,UAAU,gBACb,4CAAkB5iF,GAAI,6BAA+Boic,EAAqB3zc,QAE5E,mCAA6B2zc,qBAAsBA,KAErD,8BAAIx/W,UAAU,kCACZ,8BAAIA,UAAU,2CAEZ,+BAAKA,UAAU,iBACb,+BAAK7rF,IAAA,aAAiBm1M,IAAI,MAE5B,+BAAKtpH,UAAU,iBACb,iCAAOA,UAAW,iCAAmC,UAAOh+E,cAAgB,EAAAyjC,cAAcC,OAAS,8BAAgC,IAC5HllC,KAAK,SACLwvH,IAAI,IACJk7F,SAAU,SAAC3/N,GAAD,OA1BLe,EA0ByBf,EAAEugB,OAAOxf,WAzBtD,UAAqB0lD,UAAUu9S,kBAAkByB,oBAAoBwuG,EAAqBpic,GAAI9Q,GAD3E,IAACA,GA2BLo6I,YAAa84T,EAAqBvqc,OAClC3I,MAAOkzc,EAAqBvqc,UAErC,+BAAK+qF,UAAU,uBACb,mCAEI4yN,EAAiB09C,cAAc/gW,SAASiwc,EAAqB3zc,MACzD,+BAAKsI,IAAA,WAAem1M,IAAI,KACxB,IAGR,mCACE,4CAAkBlsM,GAAI,8BAlCzBw1S,EAAiB29C,4BAA4BhhW,SAASiwc,EAAqB3zc,MAAQ,QAAU,eAsChG,8BAAIm0F,UAAU,2CACZ,+BAAKA,UAAU,iBACb,+BAAK7rF,IAAA,aAAiBm1M,IAAI,MAE5B,+BAAKtpH,UAAU,iBACb,iCAAOx/E,KAAK,SAELwvH,IAAI,IACJhwC,UAAW,iCAAmC,UAAOh+E,cAAgB,EAAAyjC,cAAcC,OAAS,8BAAgC,IAC5HghG,YAAaojK,EACbx9S,MAAOw9S,EACP5xN,SAAU06N,EAAiB49C,gBAAgBjhW,SAASiwc,EAAqB3zc,MACzEq/N,SAAU,SAAC3/N,GAAD,OA/DLyiS,EA+DyBziS,EAAEugB,OAAOxf,WA9DtD,UAAqB0lD,UAAUu9S,kBAAkBsB,oBAAoB2uG,EAAqBpic,GAAI4wR,GAD3E,IAACA,MAiEd,+BAAKhuM,UAAU,uBACb,4CAAkB5iF,GAAI,uCAG1B,8BAAI4iF,UAAU,8CACZ,+BAAKA,UAAU,iBACb,+BAAK7rF,IAAA,gBAAoBm1M,IAAI,MAE/B,+BAAKtpH,UAAU,iBACb,iCAAOx/E,KAAK,SACLwvH,IAAI,IACJhwC,UAAW,iCAAmC,UAAOh+E,cAAgB,EAAAyjC,cAAcC,OAAS,8BAAgC,IAC5HghG,YAAag5T,EACbpzc,MAAOozc,EACPx0O,SAAU,SAAC3/N,GAAD,OA3EFyiS,EA2EyBziS,EAAEugB,OAAOxf,WA1EzD,UAAqB0lD,UAAUu9S,kBAAkB2B,uBAAuBsuG,EAAqBpic,GAAI4wR,GAD3E,IAACA,MA6EjB,+BAAKhuM,UAAU,uBACb,4CAAkB5iF,GAAI,6CAQlCqic,EAAoBnoT,UAAY,CAC9BkoT,qBAAsB,UAAUxwZ,MAAV,6BACtBsgT,qBAAsB,UAAUtgT,MAAV,8BAGxB,IAMM02I,EAAqB,CACzB8c,iC,WAIa,IAAAthG,UAXS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,cASI6oF,EAAzB,CAA6C+5Q,I,8ECtI5D,I,IAAA,MACA,OACA,OACA,S,IACA,O,IACA,MACA,S,mDAEA,IAAME,EAA8B,SAACj/V,GAAU,IAEtC8+V,EAA2B9+V,EAA3B8+V,qBAOP,OACE,+BAAKx/W,UAAU,kBACb,gCAAMA,UAAU,mBAChB,kCAAQA,UAAW,4BAA+Bw/W,EAAqBz6V,WAAoC,GAAvB,sBAC5EmtE,QATc,WACxB,IAAM0gI,EAAmB,UAAqB5gQ,UAAUk2S,eAAes3G,EAAqBpic,IAC5F,UAAqB40C,UAAUu9S,kBAAkB4B,wBAAwBquG,EAAqBpic,IAAKw1S,EAAiB7tM,cAQhH,gCAAM/kB,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,wBAM/Euic,EAA4BroT,UAAY,CACtCkoT,qBAAsB,UAAUxwZ,MAAV,8BAGxB,IAOM02I,EAAqB,CACzB8c,iC,WAGa,IAAAthG,UAXS,SAACxzG,GAEvB,MAAO,CACLivN,oBAF4BjvN,EAAMgvN,qBAA7BC,uBAU+Bj3B,EAAzB,CAA6Ci6Q,I,8EC7C5D,I,IAAA,MACA,OACA,QAIA,Q,IACA,Q,IACA,S,IACA,SACA,O,mDAGA,IA6CMj6Q,EAAqB,CACzB9oF,sCACAI,2C,WAIa,IAAAkE,UAfS,SAACxzG,GAAU,IAC1BmvG,EAAcnvG,EAAMs3D,cAApB63C,WACA6c,EAAmBhsH,EAAMyV,UAAzBu2G,gBACP,MAAO,CACL7c,aACAthF,cAAem+F,EAAkBA,EAAgBj+G,YAAc,QAU3BiqL,EAAzB,EAnDY,SAAChlF,GAAU,IAC7BnlF,EAAiBmlF,EAAjBnlF,cAEDmhX,EADeh8R,EAAd7D,aACyB,EAAAxyD,mCAAmCI,KAEnE,OACE,+BAAKu1C,UAAW,uBAAyB08S,EAAW,YAAc,KAChE,+BAAK18S,UAAU,uBACb,mCAAoBq4D,YAAc,4CAAkBj7I,GAAI,sCACpC1B,OAAQ,EAAAqxC,eAAezG,qBAEzC,mCAA4B/qB,cAAeA,EAClB7f,OAAQ,EAAAqxC,eAAe5G,aAEvBq3V,mBAAmB,EACnBx7M,kBAAmB,SAACvpL,EAASs2O,GAC3B,UAAiB68B,cAAcngN,SAAShzD,EAASs2O,Y,8EC7BtF,I,IAAA,MACA,OACA,QACA,Q,IACA,S,mDAEA,IAoBMrpD,EAAqB,CACzB9oF,sCACAI,2C,WAIa,IAAAkE,UAbS,SAACxzG,GAEvB,MAAO,CACL2vG,mBAF6B3vG,EAAMs3D,cAA7Bq4C,sBAY8BqoF,EAAzB,EA1BY,SAAChlF,GAAU,IAE9Bg8R,EADyBh8R,EAAvBrD,qBACgC,EAAAryD,kCAAkCC,QAE1E,OACE,+BAAK+0C,UAAW,uBAAyB08S,EAAW,YAAc,KAChE,+BAAK18S,UAAU,uBACb,mCAAa6+S,uBAAwB,EAAQC,0BAA2B,U,mHCbhF,W,OACA,OACA,OACA,QAGA,Q,IACA,Q,IACA,S,IACA,S,IACA,SACA,S,mDAKA,IA+DMp5M,EAAqB,CACzB9oF,sCACAI,2C,WAGa,IAAAmgD,aACb,IAAAj8C,UAlBsB,SAACxzG,GAAU,IACzBmvG,EAAenvG,EAAMs3D,cAArB63C,WADyB,EAEEnvG,EAAMgR,YAEzC,MAAO,CACLm+F,aACAhnG,SAN+B,EAEzBA,SAKNygB,aAP+B,EAEfA,aAMhBk2I,uBAL+B9+J,EAAMk4L,WAAhCp5B,0BAekBk5B,EAAzB,EArE0B,SAAChlF,GAAU,IAC7B7D,EAA+D6D,EAA/D7D,WAAYhnG,EAAmD6qG,EAAnD7qG,SAAUygB,EAAyCoqF,EAAzCpqF,aAAck2I,EAA2B9rD,EAA3B8rD,uBAGtCkwO,EAAW,EAAAhxV,8BAA8Bn8C,SAASstG,GAClDglF,GAAU,IAAA3qC,UAAQ,kBAAMwlP,GAAW,IAAA96M,0BAAyB/kF,GAAc,KAAI,CAACA,EAAY6/R,IAC3FrjT,GAAa,IAAA69D,UAAQ,kBAAMwlP,EAAWlwO,EAAyB,KAAI,CAACA,EAAwBkwO,IAN7D,GASD,aAAiB76M,EAASxoG,GAAY,GAAlE2jT,EAT6B,EAS7BA,aAAc/zL,EATe,EASfA,UAChB22P,EAAqB/9Q,EAAQh4L,OAAS,EAE5C,OACE,+BAAKm2F,UAAW,uBAAyB08S,EAAW,YAAc,KAChE,+BAAK18S,UAAW,sBACd,+BAAKA,UAAU,8BACb,mCAAoBq4D,YAAc,IACd38I,OAAQmmL,EAAQ,MAEtC,+BAAK7hG,UAAU,kCACZ6hG,EAAQ3kL,KAAI,SAACxB,GACZ,IAAMmkc,EAAc7iE,EAAathY,GAG3BsmL,GAAoB,IAAAD,+BAA8BrmL,GAExD,OACE,kCAAOokc,SAAP,CAAgBlzc,IAAK8O,GAClButM,EACC,wCAEA42P,GACE,mCACEziE,KAAMyiE,EAAYziE,KAClBprX,aAAc6tb,EAAY7tb,aAC1Bnc,SAAUA,EACVygB,aAAcA,EACd0rK,kBAAmBA,EACnB+9Q,qBAAsBH,gB,6FCtD5C,O,OACA,SACA,QACA,I,IAAA,SACA,O,8DAsFe,IAAA1+V,UAVS,SAACxzG,GAIvB,MAAO,CACLmI,SAJmBnI,EAAMgR,YAAnB7I,SAKN+6D,aAJuBljE,EAAM0zG,UAAvBxwC,gBAQK,EApFM,SAAC,GAAiH,IAA/GA,EAA+G,EAA/GA,aAAcwsU,EAAiG,EAAjGA,KAAMprX,EAA2F,EAA3FA,aAAcnc,EAA6E,EAA7EA,SAAUygB,EAAmE,EAAnEA,aAAc0rK,EAAqD,EAArDA,kBAAqD,IAAlC+9Q,4BAAkC,SAC/HpiE,GAAe,IAAAtoP,QAAO,MADyG,GAEvF,IAAAkB,UAAS,GAF8E,qBAE9HqnP,EAF8H,KAE7GC,EAF6G,QAGnG,IAAAtnP,UAAS,KAH0F,qBAG9HypT,EAH8H,KAGnHC,EAHmH,QAIvF,IAAA1pT,UAAS,GAJ8E,qBAI9HknP,EAJ8H,KAI7GC,EAJ6G,MAMrI,IAAA3mR,YAAU,WACJ4mR,EAAa/zR,UAAYm2V,GAC3BliE,EAAmBF,EAAa/zR,QAAQ1C,gBAEzC,CAAC5wF,EAAcypb,KAElB,IAAAhpV,YAAU,WACRkpV,EAAapqc,EAAW,IAAM,OAC7B,CAACA,IAGJ,IAAI+qU,SACAI,SAEJ,OAAQpwQ,GACN,KAAK,EACHgwQ,EAAc,EACdI,EAAY,IACZ,MACF,KAAK,EACHJ,EAAc,EACdI,EAAY,IACZ,MACF,KAAK,EACHJ,EAAc,EACdI,EAAY,IACZ,MACF,KAAK,EACHJ,EAAc,EACdI,EAAY,IACZ,MACF,QACEJ,EAAc,EACdI,EAAY,IAEhB,IAAMF,EAActhU,KAAKouE,MAAMoyX,EAAYp/H,GAAe,EAAIA,EACxDG,EAAWvhU,KAAKkI,KAAK01X,EAAKvzY,OAAS+2U,GAEzC,OACE,+BAAK5gP,UAAU,4BAA4Bo1D,IAAKuoP,GAC9C,gCACE5oY,MAAOirc,EACP/qc,OAAQ8qc,EAAuBh/H,EAAWC,EAAY48D,EACtDh9D,YAAaA,EACbE,YAAaA,EACbC,SAAUA,EACVC,UAAWA,EACXI,aAAc,YAA2C,IAAxCC,EAAwC,EAAxCA,YAAaz0U,EAA2B,EAA3BA,IAAK00U,EAAsB,EAAtBA,SAAU73T,EAAY,EAAZA,MACrCzG,EAAQs+T,EAAWV,EAAcS,EACvC,OAAIr+T,GAASo6X,EAAKvzY,OAAe,KAE/B,mCACE+C,IAAKA,EACL6c,MAAOA,EACPhR,QAAS2kY,EAAKp6X,GAAO4N,KAAOwsX,EAAKp6X,GAAO4N,KAAOwsX,EAAKp6X,GACpDgP,aAAcA,EACdhP,MAAOA,EACPy6X,gBAAiBA,EACjBC,mBAAoBA,EACpB17M,kBAAmBA,Y,8ECvEjC,W,OACA,OACA,Q,IACA,Q,IACA,O,IACA,QACA,Q,IACA,Q,8DAiEe,IAAA9gF,UAdS,SAACxzG,GAAU,IACzBmvG,EAAenvG,EAAMs3D,cAArB63C,WADyB,EAEqBnvG,EAAMgR,YAApDkiG,EAFyB,EAEzBA,kBAGR,MAAO,CACL/D,aACAvmF,aAP+B,EAENA,aAMzBzgB,SAR+B,EAEQA,SAOvC+6D,aANuBljE,EAAM0zG,UAAvBxwC,aAONkmD,wBAAyBlW,EAAkB/2G,UAIhC,EA/DK,SAAC62G,GAAU,IACrBjoG,EAAiGioG,EAAjGjoG,QAASuK,EAAwF09F,EAAxF19F,MAAOyG,EAAiFi3F,EAAjFj3F,MAAOslO,EAA0EruI,EAA1EquI,cAAe0uJ,EAA2D/8R,EAA3D+8R,gBAAiBC,EAA0Ch9R,EAA1Cg9R,mBAAoB17M,EAAsBthF,EAAtBshF,kBAC3EpxH,EAAiB8vC,EAAjB9vC,aACF29F,EAAWkvO,IAAoBz6X,EAE/Bg9E,GAAY,IAAAk3D,UAAQ,WACxB,MAAO,+BAAiCtmF,GAAgB29F,EAAW,sBAAwB,MAC1F,CAACA,EAAU39F,IAERq7B,GAAW,IAAAirD,UAAQ,kBAAM,IAAA1+I,qBAAoBC,EAAS,EAAAotE,gBAAgBE,UAAS,CAACttE,IAEhFqmT,GAAoB,IAAArpK,cAAY,SAAClqJ,GACrCA,EAAE40F,iBACFu9S,EAAmB16X,GACnBg/K,EAAkBz2L,EAAGkN,EAASs2O,KAC7B,CAAC/rO,EAAOvK,EAASs2O,EAAe2uJ,EAAoB17M,IAEvD,OACE,+BACEhiG,UAAWA,EACXv2E,MAAOA,EACP7c,IAAKoW,EACLg1Q,WAAA,EACA9lG,QAAS4sI,GAET,+BAAK9+N,UAAW,sDACbuuE,EACC,+BAAKvuE,UAAU,yBACb,mCAAW/nC,SAAS,WAEpB,KACHg0C,EAAW,+BAAK93F,IAAK83F,EAAUjM,UAAU,2BAA2BspH,IAAI,KAAQ,MAEnF,+BAAKtpH,UAAW,uBACd,+BAAKA,UAAU,4BACZvnF,EAAQmV,kBAEX,+BAAKoyE,UAAU,mCACb,mCAAoBvnF,QAASA,EAAS+oQ,WAAY,MAEpD,+BAAKxhL,UAAU,6BACb,mCAAkB6gL,iBAAiB,EAAM9yK,YAAat1F,EAASkoQ,UAAU,EAAM3gL,UAAU,mCACvE,IAAjBpvB,EAAqB,mCAAan4D,QAASA,EAAS+U,mBAAmB,IAAU,Y,8ECnD5F,I,IAAA,MACA,OACA,Q,IACA,SACA,O,8DAwCe,IAAA2vI,aACb,IAAAj8C,UAbsB,SAACxzG,GACvB,MAAO,CACLkkD,eAAgBlkD,EAAM40D,kBAAkB1Q,eACxCirD,WAAYnvG,EAAMs3D,cAAc63C,WAChCn0C,gBAAiBh7D,EAAM+6D,iBAAiBC,gBACxCy0C,oBAAqBzvG,EAAMs3D,cAAcm4C,uBAIlB,GAIzB,EAvCgC,SAACuD,GAAU,IACpC7wF,EAA6C6wF,EAA7C7wF,KAAM+hC,EAAuC8uD,EAAvC9uD,eAAgBurD,EAAuBuD,EAAvBvD,oBAEvB/tD,EAAewC,EAAex1C,QAAO,SAAAw1C,GACzC,OAAOA,EAAepxC,OAAS,EAAAuxC,0BAA0BrI,YAClDkI,EAAe/lD,OAASgkB,EAAKC,cAAc,CAAC1S,GAAI,gDAEnDs/X,EAAYv/R,IAAwB,EAAAxxD,uBAAuBE,wBAA2BuD,EAAavlD,OAAS,EAC5G+gZ,EAAc/6X,EAAKC,cAAc,CAAC1S,GAAI,6CAE5C,OACE,+BAAK4iF,UAAW,4BAA8B08S,EAAW,YAAc,KACrE,+BAAK18S,UAAU,oBAEX5wC,EAAalyC,KAAI,SAACwsC,EAAY1mC,GAC5B,GAAK0mC,EAGL,OAAO,mCAAgCkhW,YAAaA,EAAalhW,WAAYA,EAAY1mC,MAAOA,EAAOpW,IAAKoW,c,8ECxBxH,I,IAAA,MACA,O,IACA,M,IACA,S,mDAEA,IAAMk9b,EAAiC,SAACx/V,GAAU,IACzCkqS,EAAkClqS,EAAlCkqS,YAAalhW,EAAqBg3D,EAArBh3D,WAAY1mC,EAAS09F,EAAT19F,MAEhC,OACE,+BAAKg9E,UAAU,kBAAkBg6M,UAAQ,wBACvC,8BAAIh6M,UAAU,kBAEX4qT,EACD,gCAAM5qT,UAAU,kBACP,KAAOh9E,EAAQ,IAAIvV,OAAO,KAGrC,+BAAKuyF,UAAU,oBAEX,mCAAgCpzF,IAAKoW,EACL0mC,WAAYA,EACZ1mC,MAAOA,OAQjDk9b,EAA+B5oT,UAAY,CACzCszP,YAAa,UAAUhzW,OACvB8R,WAAY,UAAU38C,Q,WAaT,IAAAm0G,UAVS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,cAIT,GAIZ,CAA6CqjW,I,6FC5C5D,O,OACA,O,IACA,MACA,QACA,SACA,S,IACA,OACA,Q,IACA,Q,IACA,O,mDAEA,IAAMC,EAAiC,SAACz/V,GAAU,IACzCh3D,EAAqBg3D,EAArBh3D,WAAY1mC,EAAS09F,EAAT19F,MACZirD,EAA8CyyC,EAA9CzyC,mBAAoBC,EAA0BwyC,EAA1BxyC,uBAErB/J,EAAO,UAAU+D,YAAYxe,EAAW0a,cACxC8nI,EAAmB/nI,EAAKoF,sBACxBL,EAAoC,aAAvB,UAAOlnD,YAA6BmiD,EAAKyF,gBAAkBzF,EAAK0F,kBANnC,GAQV,IAAA0sF,UAAS21C,GARC,qBAQzCigG,EARyC,KAQ5Bi0K,EAR4B,KAqBhD,OACE,8BAAIpgX,UAAU,0CAA0Cg6M,UAAQ,iBAC9D,8BAAIh6M,UAAU,2CACZ,+BAAKA,UAAU,mBAAkB,IAAAnU,aAAY7oE,EAAQ,IACrD,+BAAKg9E,UAAU,iBACb,+BAAK7rF,IAAA,aAAiBm1M,IAAI,MAE5B,+BAAKtpH,UAAU,iBACb,iCAAOA,UAAU,+BACVx/E,KAAK,SACLwvH,IAAI,IACJk7F,SAAU,SAAC3/N,GAAD,OAlBHe,EAkBuBf,EAAEugB,OAAOxf,MAjBpD63D,EAAKmqI,oBAAoBhiM,GACzB8zc,EAAe9zc,GACf4hE,EAAuBD,EAAqB,QAC5C,UAAcF,qBAAqByxG,6BAA6Br7G,GAJ7C,IAAC73D,GAmBPo6I,YAAaylJ,EACb7/R,MAAO6/R,KAEhB,+BAAKnsM,UAAU,uBACb,mCACE,+BAAK7rF,IAAA,WAAem1M,IAAI,MAE1B,+CAKJ,8BAAItpH,UAAU,2CACZ,+BAAKA,UAAU,iBACb,+BAAK7rF,IAAA,aAAiBm1M,IAAI,MAE5B,+BAAKtpH,UAAU,iBACb,iCAAOx/E,KAAK,SACLyvH,IA5CU,IA6CVD,IAAI,IACJhwC,UAAU,+BACV0mD,YAAax9E,EACb58D,MAAO48D,EACPgvB,UAAU,EACVgzI,SAAU,SAAC3/N,GAAmBA,EAAEugB,OAAOxf,UAEhD,+BAAK0zF,UAAU,uBAAf,aAQRmgX,EAA+B7oT,UAAY,CACzC5tG,WAAY,UAAU38C,QAGxB,IAOM24L,EAAqB,CACzBijE,4CACAz6L,iD,WAIa,IAAAgzC,UAbS,SAACxzG,GACvB,MAAO,CACLmvG,WAAYnvG,EAAMs3D,cAAc63C,WAChC5uC,mBAAoBvgE,EAAMyV,UAAU8qD,sBAUAy3H,EAAzB,CAA6Cy6Q,I,8EC/F5D,W,IACA,O,IACA,S,6DAE4B,WAAM,IACxBpqb,GAAgB,eAAhBA,aAER,IAAAghG,YAAU,WACR,UAAW7/D,mBAAmBnhC,GAC9B,UAAW+hC,gBAAgB/hC,KAC1B,CAACA,M,8ECTN,WACA,Q,UAE0B,YACxB,IAAAghG,YAAU,WACR,IAAM6rI,EAAU,GAehB,OAdI,IAAA/oP,cAAa+oP,EAAQz4P,KAAK,kBAC1B,IAAAwP,aAAYipP,EAAQz4P,KAAK,iBACzB,IAAA0P,cAAe+oP,EAAQz4P,KAAK,kBAC5B,IAAAwP,aAAcipP,EAAQz4P,KAAK,iBAC3B,IAAAsP,gBAAiBmpP,EAAQz4P,KAAK,cAC9B,IAAAm8E,WAAYs8K,EAAQz4P,KAAK,eACzB,IAAAqQ,SAAUooP,EAAQz4P,KAAK,aACvB,IAAA2/C,oBAAqB84M,EAAQz4P,KAAK,gBAClC,IAAAwQ,cAAeioP,EAAQz4P,KAAK,iBAGhCy4P,EAAQpvP,SAAQ,SAAA2oP,GAAA,OAAO3tP,SAAS6C,KAAKC,UAAUC,IAAI4qP,MAG5C,WACLyG,EAAQpvP,SAAQ,SAAA2oP,GAAA,OAAO3tP,SAAS6C,KAAKC,UAAU27K,OAAOkvE,SAEvD,M,8ECvBL,WACA,QACA,SACA,SACA,S,UAE+B,SAACv7I,EACA15F,EACA42F,EACA5vF,EACAwvF,EACAJ,EACAE,EACA7lG,EACA0K,EACA0d,IAE9B,IAAAg3F,YAAU,WACR,GAAInW,EAAkB/2G,QAAUqd,EAAmB6L,qBAAsB,CACvE,IACMipK,GADS,IAAAzrK,oBACkB8a,2BAA2B,QAEtDg1a,GADgB,IAAA5zR,aAAYuP,EAAmB,GAAI,IAAI,GAAO,GACrC3mL,MAAK,SAAAirc,GAAA,MAA6C,SAA7BA,EAAa1vb,KAAKlV,UACtEoiG,EAAyBuiW,MAE1B,CAACtgb,EAAwB6gF,EAAmB15F,EAAoB42F,EAA0B5vF,KAG7F,IAAA6oG,YAAW,WACT,GAAInW,EAAkB/2G,OAAQ,CAG5B,IAAIi0L,GAAgB,IAAAjB,yBAAwBllL,EAAW0K,GAAkB,GAczEq7F,EAAoBogF,GACpBxgF,EAAuBj7F,GACvBm7F,EAAsB,EAAAq8E,iBAAiB/qK,QACvC,IAAAsvK,6BAA4B/7K,MAG7B,CAACu+F,M,8ECrDN,I,EAAA,OACA,QACA,O,oCACA,QACA,Q,UAEwB,YACtB,IAAAmW,YAAU,WACR,IACM2C,EADQ,UAAMniH,WACU4L,UAAUu2G,gBACxC51B,YAAW,WACL41B,GAAmBA,EAAgBj+G,cACjC,CAAC,cAAe,uBAAuBlM,SAASmqH,EAAgBj+G,YAAYC,SAC9E,UAAM2d,UAAS,IAAAujF,mBAAkB,EAAAvyD,mCAAmCG,QACpE,UAAMnxB,UAAS,IAAA2jF,qBAAoB,EAAA3yD,mCAAmCG,SAC7D,CAAC,iBAAkB,wBAAwBj7C,SAASmqH,EAAgBj+G,YAAYC,SACzF,UAAM2d,UAAS,IAAAujF,mBAAkB,EAAAvyD,mCAAmCE,QACpE,UAAMlxB,UAAS,IAAA2jF,qBAAoB,EAAA3yD,mCAAmCE,UAC7D,IAAA13B,yBAA0B,CAAC,4BAA4BtjB,SAASmqH,EAAgBj+G,YAAYC,UACrG,UAAM2d,UAAS,IAAAujF,mBAAkB,EAAAvyD,mCAAmCK,eACpE,UAAMrxB,UAAS,IAAA2jF,qBAAoB,EAAA3yD,mCAAmCK,mBAGzE,OAEF,M,8ECzBL,I,EAAA,OAEA,O,oCACA,QACA,S,UAEiC,YAE/B,IAAAqsE,YAAW,WACT,IADe,EACD,UAAMx/G,WACyCwO,YAAtDC,EAFQ,EAERA,iBAAkBupF,EAFV,EAEUA,WAAYhwE,EAFtB,EAEsBA,gBAChCvZ,IAAoB,IAAAqpG,uBAAsB9f,EAAYhwE,KACzD,IAAAs5J,oBAAmB,KAAM,KAAM,KAAM,MAAM,KAE5C,M,8ECdL,I,EAAA,OACA,O,oCACA,QACA,S,UAEsB,YAEpB,IAAA9hE,YAAW,WACT,UAAM19F,UAAS,IAAAkL,oBAAmB,KAClC,UAAMlL,UAAS,IAAAkzI,2BAA0B,OACxC,M,8ECVL,I,IAAA,MACA,O,IACA,S,IACA,SACA,SACA,Q,8DAwBe,IAAArrD,UATS,SAACxzG,GAAD,MAAY,CAClC4wQ,aAAc5wQ,EAAMs3D,cAAcs5M,aAClCzoQ,SAAUnI,EAAMgR,YAAY7I,YAGH,GAIZ,EAtBI,SAAC6qG,GAAU,IACrB49J,EAA0B59J,EAA1B49J,aAAczoQ,EAAY6qG,EAAZ7qG,SACf4oL,GAAiB,IAAAnvH,sBAEvB,OACE,+BAAK0wB,UAAU,cACXs+K,EAAavgK,YAAcloG,EAAW,mCAAgB2K,KAAM,IAAO,KAEnEi+K,KAAmB,IAAAtqC,oBAAqB,wCAAkB,U,6FCflE,O,OACA,OACA,O,IACA,Q,IACA,S,IACA,MACA,SACA,QACA,S,IACA,OACA,S,mDAEA,IAAMosT,EAAiB,SAAC7/V,GAAU,IACzBvtF,EACWutF,EADXvtF,iBAAkB4C,EACP2qF,EADO3qF,YAAa0nF,EACpBiD,EADoBjD,eAAgB5tF,EACpC6wF,EADoC7wF,KAAMxN,EAC1Cq+F,EAD0Cr+F,iBAAkB6L,EAC5DwyF,EAD4DxyF,OAAQvW,EACpE+oG,EADoE/oG,UAAW4V,EAC/EmzF,EAD+EnzF,eAC/FowF,EAAgB+C,EAAhB/C,aACKn9F,EAAQkgG,EAARlgG,KAHyB,GAIE,IAAA+1I,WAAS,GAJX,qBAIzBiqT,EAJyB,KAIdC,EAJc,KAM1BvtR,GAAoB,IAAAz9B,cAAY,SAAClqJ,IACjCi1c,GAAcj1c,EAAEugB,OAAOuqI,QAAQ,oCAC7B9qJ,EAAEugB,OAAOuqI,QAAQ,+BAAkC9qJ,EAAEugB,OAAOuqI,QAAQ,2BACxEoqT,GAAa,GACblzc,OAAO+qG,oBAAoB,QAAS46E,MAErC,CAACutR,EAAcD,IAEZ/tR,GAAuB,IAAAh9B,cAAY,WACvCgrT,GAAcD,KACb,CAACC,EAAcD,KAQlB,IAAAzpV,YAAU,WAOR,OANAjzB,YAAW,WACT08W,EACIjzc,OAAO0uD,iBAAiB,QAASi3H,GACjC3lL,OAAO+qG,oBAAoB,QAAS46E,KACvC,GAEI3lL,OAAO+qG,oBAAoB,QAAS46E,KAC3C,CAACstR,EAAWttR,IAEd,IAAM+jH,EAAqB,IAATz2R,EAAa,YAAc,YAAcA,EACrDyzK,EAAiBusR,EAAY,CAAEvrc,OAAQ1H,OAAO+xD,YAAc,IAAO,GACrEkhZ,IACFvsR,EAAeh/K,OAAU8gB,EAAc,KAAOxoB,OAAO+xD,YAAc,IAAO,IAAM/xD,OAAO+xD,YAAc,IAGvG,IAAIq6H,EAAgB,GAChBC,SACJ,OAAQn8E,GACN,KAAK,EAAAo8E,iBAAiB/qK,MACpB6qK,GAAgB,IAAA1rK,aAAY5L,EAAkB1K,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAC7F,MACF,KAAK,EAAAssK,iBAAiBtgF,SACpBogF,EAAgB,mCAAgBqD,eAAgB7pK,IAChD,MACF,KAAK,EAAA0mK,iBAAiBG,UAKlBL,GAJFC,GAAc,IAAAK,kBAAiBt8E,IAIb,mCAAallG,QAASmhL,EAAYhpK,OAFlC,GAOtB,OACE,+BAAKovE,UAAU,2BACb,+BAAKA,UAAWi3M,GAAaupK,EAAYA,IAAIvpK,EAAhB,WAAsC,KACjE,+BAAKj3M,UAAWi3M,EAAU,UAAW/kH,QAASO,GAC9C,gCAAMzyF,UAAWi3M,EAAU,kBAEzB,gCAAMj3M,UAAWi3M,EAAU,iBACvBt9G,IAGN,+BAAK35F,UAAWi3M,EAAU,aAAcxtR,MAAOwqK,GAC7C,mCACEgjH,UAAaA,EACbypK,oBAtDkB,WAC1BjuR,IACAllL,OAAO+qG,oBAAoB,QAAS46E,IACpC,IAAA1vH,8BA0DJ+8Y,EAAejpT,UAAY,CACzB92I,KAAM,UAAUwtG,OAAOK,Y,WAkBV,IAAA8uC,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAD,MAAY,CAClCiwG,aAAcjwG,EAAMs3D,cAAc24C,aAClCF,eAAgB/vG,EAAMs3D,cAAcy4C,eACpCvvF,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,iBACpCkL,eAAgB7f,EAAMqN,gBACtBpD,UAAWjK,EAAM8J,UAAUG,UAC3Boe,YAAaroB,EAAMgR,YAAYqX,YAC/B5C,iBAAkBzlB,EAAMgsL,QAAQvmK,oBAGP,GAKzB,CAA6Cotb,K,8EC/G/C,W,OACA,O,IACA,M,IACA,S,IACA,S,IACA,SACA,Q,mDAKA,IAAMI,EAAsB,SAACjgW,GAAU,IAC9BxyF,EAAUwyF,EAAVxyF,OACA+oR,EAAkCv2L,EAAlCu2L,UAAWypK,EAAuBhgW,EAAvBggW,oBACZE,EAAgB1yb,EAAO9R,QAAO,SAAA0S,GAAA,OAAmC,IAA1BA,EAAMspK,mBAEnD,OACE,8BAAIp4F,UAAWi3M,EAAU,mBACvB,mCAAgBv2L,MAAOA,IACpB,SAACmsO,EAAuB5zJ,GAAxB,OACC,wCACE,mCAA0Bg+G,UAAWA,EACX4pK,WAAY,EACZH,oBAAqBA,EACrBznR,gBAAiBA,IAC3C,mCAA8Bg+G,UAAWA,EACXypK,oBAAqBA,EACrBG,WAAYD,EAAc/2c,OAAS+2c,EAAc/2c,OAAS,EAC1DovL,gBAAiBA,UAQ3D0nR,EAAoBrpT,UAAY,CAC9B2/I,UAAW,UAAUr/P,OAAOy2E,WAC5BqyV,oBAAqB,UAAUvsR,MAGjC,IAKMuR,EAAqB,CACzBpoF,gDACAE,+C,WAGa,IAAA0D,UAVS,SAACxzG,GAAD,MAAY,CAClCwgB,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,oBAQEqjL,EAAzB,CAA6Ci7Q,I,4GCnD5D,MACA,OACA,Q,IACA,MACA,QACA,OACA,SACA,SACA,QAKA,SACA,SAIA,SACA,SACA,QACA,S,mDAEA,IAAMG,EAA2B,SAACpgW,GAAU,IAKpC,EAyBA,EA7BCxyF,EAAqFwyF,EAArFxyF,OAAQvW,EAA6E+oG,EAA7E/oG,UAAWkY,EAAkE6wF,EAAlE7wF,KAAMtC,EAA4DmzF,EAA5DnzF,eAAgB05J,EAA4CvmE,EAA5CumE,oBAAqBvpE,EAAuBgD,EAAvBhD,oBAC9DmjW,EACqFngW,EADrFmgW,WAAYtjW,EACyEmD,EADzEnD,gBAAiB05L,EACwDv2L,EADxDu2L,UAAWh+G,EAC6Cv4E,EAD7Cu4E,gBAAiBynR,EAC4BhgW,EAD5BggW,oBAC9DpjW,EAA0FoD,EAA1FpD,uBAAwBE,EAAkEkD,EAAlElD,sBAAuBx1E,EAA2C04E,EAA3C14E,oBAAqByxF,EAAsB/Y,EAAtB+Y,mBAEhEsnV,GAAA,gCAAmB,WAAOtyb,EAAMguX,GAAb,4FACvBikE,KACA,IAAAl9Y,uBAFuB,UAGjB,IAAAk3H,uBAHiB,cAInBqC,GAAoB,IAAAxrK,6BAA4B5Z,EAAW8kY,MAEvDliN,GAAW,IAAAvrK,iBAAgBytX,EAAW9kY,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAC3FwvK,GAAoB,IAAAlC,eAAcN,IAE9BymR,EAAmBjkR,EAAkBthL,YACrCqiL,EAAgBkjR,EAAiBpzb,iBAAiBlc,eAClDyhB,GAAmB,IAAAiqK,gCAA+B5uL,SAASC,SAASoC,eAAgBmwc,KAExFh5a,EAAoB7U,EAAiBtnB,MAEvC4tH,EAAmB,MACnB/b,EAAoBogF,GACpBxgF,EAAuBm/R,GACvBj/R,EAAsB,EAAAq8E,iBAAiB/qK,OAEvCm4J,EAAoBw1N,GApBG,WAqBjB,IAAA/jN,mBAAkB+jN,EAAWvuX,GArBZ,yBAsBjB+yb,IAtBiB,mDAAnB,+CAyBAA,GAAA,gCAAkB,0FAClBhrb,GAAU,IAAA22J,0BACd,IAAAI,kBAAiB/2J,GAFK,kDAAlB,4CAKAirb,EAAmBhzb,EAAO9R,QAAO,SAAA0S,GAAA,OAAmC,IAA1BA,EAAMspK,mBAEtD,OACE8oR,EAAiBr3c,OAAUq3c,EACxBhkc,KAAI,SAAC4R,EAAO1M,GACX,IAAMmsJ,EAAWnsJ,IAAem7F,EAC1Bg9E,GAAW,IAAAtsK,aAAY7L,EAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,GACxF,OACE,8BAAI3gB,IAAK,WAAawV,EAAay+b,EAC/B3pK,aAAY2pK,EAAaz+b,EACzB8vK,QAAS,kBAAM6uR,EAAiBjyb,EAAO1M,EAAY62K,IACnDj5F,UAAWi3M,EAAU,oCAClB1oI,EAAWA,IAAI0oI,EAAf,+BAAyD,IADjD,IAELA,EAFK,yBAE6B70R,GACzCm4K,MAIP,MAINumR,EAAyBxpT,UAAY,CACnCupT,WAAY,UAAU7yV,OAAOK,WAC7B4oL,UAAW,UAAUr/P,OAAOy2E,WAC5BqyV,oBAAqB,UAAUvsR,KAAK9lE,WACpC4qE,gBAAiB,UAAU9E,KAAK9lE,YAGlC,IAYMq3E,EAAqB,CACzB19J,0CACAhN,oEACAisJ,0CACAvpE,0CACAJ,gDACAE,8CACAI,sCACA6b,wCACAohE,+B,WAGa,IAAA19B,aACb,IAAAj8C,UAzBsB,SAACxzG,GAAD,MAAY,CAClCwgB,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,iBACpC8Q,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChCsqF,eAAgB/vG,EAAMs3D,cAAcy4C,eACpCE,aAAcjwG,EAAMs3D,cAAc24C,aAClCJ,gBAAiB7vG,EAAMs3D,cAAcu4C,gBACrC5lG,UAAWjK,EAAM8J,UAAUG,UAC3B4V,eAAgB7f,EAAMqN,gBACtBmM,mBAAoBxZ,EAAMqN,gBAAgB+B,YAgBjB4oL,EAAzB,CAA6Co7Q,K,mHChH/C,O,OACA,O,IACA,QACA,Q,IAKA,MACA,QACA,QAKA,QACA,SACA,S,IACA,OACA,SACA,OACA,S,IACA,SACA,SACA,SACA,QACA,S,mDAEA,IAAMK,EAA+B,SAACzgW,GAAU,IACvCE,EAEiBF,EAFjBE,kBAAmBrD,EAEFmD,EAFEnD,gBAAiB5lG,EAEnB+oG,EAFmB/oG,UAAW2lG,EAE9BoD,EAF8BpD,uBAAwBI,EAEtDgD,EAFsDhD,oBAAqBxvF,EAE3EwyF,EAF2ExyF,OACjG+4J,EACsBvmE,EADtBumE,oBAAqBj/I,EACC04E,EADD14E,oBAAqBw1E,EACpBkD,EADoBlD,sBAAuBjwF,EAC3CmzF,EAD2CnzF,eAAgBsC,EAC3D6wF,EAD2D7wF,KAAM3I,EACjEw5F,EADiEx5F,mBACvFuyG,EAAsB/Y,EAAtB+Y,mBACKonV,EAA+DngW,EAA/DmgW,WAAY5pK,EAAmDv2L,EAAnDu2L,UAAWypK,EAAwChgW,EAAxCggW,oBAAqBznR,EAAmBv4E,EAAnBu4E,gBAJL,GAKN,IAAA1iC,UAAS,MALH,qBAKvCnlI,EALuC,KAKzBgwb,EALyB,KAMxC9wb,GAAS,IAAAC,qBAEf,IAAAwmG,YAAU,WACR,GAAInW,EAAkB/2G,OAAQ,CAC5B,IAAMunB,EAAed,EAAOc,aACtB4qK,GAAoB,IAAA5xH,iBAAgB,QACpC+yH,GAAgB,IAAA1Q,aAAYuP,EAAmB,GAAI,IAAG,GAAO,GAEnE,GAAI5qK,EAAc,CAChB,IAAIiwb,EAAqB/wb,EAAOc,aAAahV,QAAO,SAAAsV,GAClD,IAAM4vb,EAAsBpzb,EAAO7Y,MAAK,SAACyZ,EAAO1M,GAE9C,OADiB,IAAA6L,aAAY7L,EAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,GACxEhe,SAASmiB,EAAW7lB,QAAmC,IAA1BijB,EAAMspK,mBAE/CmpR,GAAU7vb,EAAWG,WAAaH,EAAWG,SAASxc,MAAK,SAAAyc,GAAA,MAAmC,SAAxBA,EAAQlB,KAAKlV,UACnF8lc,EAAmBrkR,EAAc9nL,MAAK,SAAAirc,GAC1C,OAAOA,EAAa1vb,KAAKK,WAAaS,EAAW7lB,QAEnD,OAAO01c,IAAWD,GAAuBE,KAE3CJ,EAAgBC,OAInB,CAACnzb,EAAQvW,EAAW4V,EAAgBqzF,EAAmB/wF,EAAMS,IAEhE,IAAM,EAAAmxb,GAAA,gCAAsB,WAAO/vb,EAAY+qX,GAAnB,0FAC1BikE,KACA,IAAAl9Y,uBAF0B,UAGpB,IAAAk3H,uBAHoB,UAKpBgnR,EAAgBhwb,EAAW7lB,KAAK0mB,OAAO7gB,gBACvCiwc,EAAmCzzb,EAAOhN,MAAK,SAAA4N,GAAA,OAASA,EAAM21C,YAAci9Y,MANxD,wBAQlBt/b,EAAa8L,EAAO9e,QAAQuyc,GAClC16R,EAAoB7kK,GATI,WAUlB,IAAAs2K,mBAAkBt2K,EAAY8L,GAVZ,QAWxB+yb,IAXwB,2BAaxB,UAAU39Y,OAAO,MACXs+Y,GAAgB,IAAA7kP,wBAAuB,KAAM2kP,EAAex6b,GAAoB,IAd9D,mCAiBhB,IAAA0xK,2BAA0BgpR,GAjBV,QAoB1BnoV,EAAmB,MACnBzxF,EAAoBtW,EAAW7lB,MAC/B6xG,EAAoBhsF,EAAW7lB,MAC/ByxG,EAAuBm/R,GACvBj/R,EAAsB,EAAAq8E,iBAAiBtgF,UAxBb,mDAAtB,+CA4BA0nW,EAAkB,WACtB,IAAIhrb,GAAU,IAAA22J,0BACd,IAAAI,kBAAiB/2J,IAGnB,OACE7E,GAAgBA,EAAavnB,OAAS,EACjCunB,EAAalU,KAAI,SAACwU,EAAY1O,GAC/B,IAAMy5X,EAAYz5X,EAAQ69b,EACpBtyS,EAAWkuO,IAAcl/R,EAE/B,OACE,8BAAI3wG,IAAK,WAAaoW,EAAQ69b,EAC1B3pK,aAAYulG,EACZvqN,QAAS,kBAAMuvR,EAAoB/vb,EAAY+qX,IAC/Cz8S,UAAWi3M,EAAU,wCAClB1oI,EAAWA,IAAI0oI,EAAf,+BAAyD,IADjD,IAELA,EAFK,yBAE6BvlR,EAAW7lB,KAAK6F,cAAcqC,QAAQ,KAAK,MACrF,mCAAgBipL,eAAgBtrK,EAAW7lB,WAK/C,mCAA8BorS,UAAWA,EACbypK,oBAAqBA,EACrBG,WAAYA,EACZ5nR,gBAAiBA,KAIrDkoR,EAA6B7pT,UAAY,CACvCupT,WAAY,UAAU7yV,OAAOK,WAC7B4oL,UAAW,UAAUr/P,OAAOy2E,WAC5BqyV,oBAAqB,UAAUvsR,KAAK9lE,WACpC4qE,gBAAiB,UAAU9E,KAAK9lE,YAGlC,IAcMq3E,EAAqB,CACzB19J,0CACAhN,oEACA0iF,0CACAJ,gDACAE,8CACAI,sCACAspE,sBACAD,0CACA3nJ,sBACAm6F,yC,WAGa,IAAA0jC,aACb,IAAAj8C,UA5BsB,SAACxzG,GAAD,MAAY,CAClCwgB,OAAQxgB,EAAM4U,YAAY4L,OAC1BiF,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChC/Z,YAAa1L,EAAMgR,YAAYtF,YAC/BwnG,kBAAmBlzG,EAAMgR,YAAYkiG,kBACrC15F,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CyQ,eAAgB7f,EAAMqN,gBACtBpD,UAAWjK,EAAM8J,UAAUG,UAC3BkmG,WAAYnwG,EAAMs3D,cAAc64C,WAChCF,aAAcjwG,EAAMs3D,cAAc24C,aAClCF,eAAgB/vG,EAAMs3D,cAAcy4C,eACpCF,gBAAiB7vG,EAAMs3D,cAAcu4C,mBAiBZmoF,EAAzB,CAA6Cy7Q,K,mHCzJ/C,O,OACA,OACA,Q,IAKA,MACA,QACA,QAKA,QACA,SACA,S,IACA,OACA,SACA,OACA,S,IACA,OACA,SACA,SACA,SAGA,QACA,QACA,S,mDAEA,IAAMU,EAA+B,SAACnhW,GAAU,IACvCoW,EAEiBpW,EAFjBoW,wBAAyBvZ,EAERmD,EAFQnD,gBAAiB5lG,EAEzB+oG,EAFyB/oG,UAAW2lG,EAEpCoD,EAFoCpD,uBAAwBpvF,EAE5DwyF,EAF4DxyF,OAAQ+4J,EAEpEvmE,EAFoEumE,oBAC1FvpE,EACsBgD,EADtBhD,oBAAqBF,EACCkD,EADDlD,sBAAuBjwF,EACtBmzF,EADsBnzF,eAAgBsC,EACtC6wF,EADsC7wF,KAAMxN,EAC5Cq+F,EAD4Cr+F,iBAAkBid,EAC9DohF,EAD8DphF,UACpFm6F,EAAsB/Y,EAAtB+Y,mBACKonV,EAA8CngW,EAA9CmgW,WAAY5pK,EAAkCv2L,EAAlCu2L,UAAWypK,EAAuBhgW,EAAvBggW,oBAJgB,GAKV,IAAAnqT,UAAS,MALC,qBAKvCurT,EALuC,KAK3BC,EAL2B,KAMxCzxb,GAAS,IAAAC,qBAEf,IAAAwmG,YAAU,WACR,GAAID,EAAwBjtH,OAAQ,CAClC,IACMmyL,GADS,IAAAzrK,oBACkB8a,2BAA2B,QACtD8xJ,GAAgB,IAAA1Q,aAAYuP,EAAmB,GAAI,IAAI,GAAO,GAEpE,GAAImB,EAAe,CACjB,IAAI6kR,EAAwB7kR,EAAc/gL,QAAO,SAAAw9K,GAM/C,OAL4B1rK,EAAO7Y,MAAK,SAACyZ,EAAO1M,GAC9C,IAAMm4K,GAAW,IAAAtsK,aAAY7L,EAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAClF00b,GAAsB,IAAA50b,sBAAqBusK,EAAYhpK,KAAMf,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAC/F,OAAOgtK,EAAShrL,SAAS0yc,KAAkD,IAA1Bnzb,EAAMspK,sBAI3D2pR,EAAcC,OAIjB,CAAC9zb,EAAQvW,EAAW4V,EAAgBupG,EAAyBjnG,EAAMS,IAEtE,IAAM,EAAAmxb,GAAA,gCAAsB,WAAOznR,EAAWyiN,GAAlB,0FAC1BikE,KACA,IAAAl9Y,uBAF0B,UAGpB,IAAAk3H,uBAHoB,UAIpBwnR,EAAoBloR,EAAUppK,KAAKhD,iBAAiBlc,iBACpDywc,EAAqBj0b,EAAO6D,WAAU,SAACjD,EAAO1M,GAClD,OAAQ0M,EAAM21C,YAAcy9Y,IAC1B,IAAArlR,yBAAwBllL,EAAWyK,GAAY,KAAU8/b,OAGnC,GAVA,wBAWxBj7R,EAAoBk7R,GAXI,WAYlB,IAAAzpR,mBAAkBypR,EAAoBj0b,GAZpB,QAaxB+yb,IAbwB,2BAexB,UAAU39Y,OAAO,MACXs+Y,GAAgB,IAAA7kP,wBAAuB,MAAM,IAAAtgC,sBAAqBzC,EAAUppK,MAAOrD,EAAezQ,UAAU,IAhB1F,yBAkBlByR,GAAe,IAAAgD,6BAA4B5Z,EAAW0K,KACrC23K,EAAUppK,KAAK9a,YAAYihF,WAC9CxoE,GAAe,IAAAwtK,iCAA+B,IAAAvqL,yBAAwBhD,SAASC,SAASoC,gBAAiB0c,EAAezQ,aAEtHyR,EAAa3Q,aAAeyE,EAC5Bid,EAAU,CAAC/Q,KAvBO,WA2BhB,IAAAqqK,2BAA0BgpR,GA3BV,QA+B1BnoV,EAAmB,MACnB/b,EAAoBs8E,EAAUppK,KAAKhD,iBAAiBlc,eACpD4rG,EAAuBm/R,GACvBj/R,EAAsB,EAAAq8E,iBAAiBG,WAlCb,mDAAtB,+CAsCAinR,EAAkB,WACtB,IAAIhrb,GAAU,IAAA22J,0BACd,IAAAI,kBAAiB/2J,IAGnB,OACE6rb,EACKA,EAAW5kc,KAAI,SAACzE,EAASuK,GAC1B,IAAMy5X,EAAYz5X,EAAQ69b,EACpBtyS,EAAWkuO,IAAcl/R,EACzBtsF,EAAWxY,EAAQmY,KAAKK,SAASvf,cAAcqC,QAAQ,KAAK,KAElE,OACE,8BAAInH,IAAK,WAAaoW,EAAQ69b,EAC1B3pK,aAAYulG,EACZvqN,QAAS,kBAAMuvR,EAAoBhpc,EAASgkY,IAC5Cz8S,UAAWi3M,EAAU,uCAClB1oI,EAAWA,IAAI0oI,EAAf,+BAAyD,IADjD,IAELA,EAFK,yBAE6BhmR,GAC1C,mCAAaxY,QAASA,EAAQmY,WAIhC,MAIVixb,EAA6BvqT,UAAY,CACvCupT,WAAY,UAAU7yV,OAAOK,WAC7B4oL,UAAW,UAAUr/P,OAAOy2E,WAC5BqyV,oBAAqB,UAAUvsR,KAAK9lE,WACpC4qE,gBAAiB,UAAU9E,KAAK9lE,YAGlC,IAeMq3E,EAAqB,CACzB19J,0CACAhN,oEACAsiF,gDACAE,8CACAE,0CACAwpE,sBACAD,0CACA3nJ,sBACAm6F,yC,WAGa,IAAA0jC,aACb,IAAAj8C,UA5BsB,SAACxzG,GAAD,MAAY,CAClCwgB,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,iBACpC8Q,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChC/Z,YAAa1L,EAAMgR,YAAYtF,YAC/B09G,wBAAyBppH,EAAMgR,YAAYkiG,kBAC3C15F,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CyQ,eAAgB7f,EAAMqN,gBACtBpD,UAAWjK,EAAM8J,UAAUG,UAC3BkmG,WAAYnwG,EAAMs3D,cAAc64C,WAChCF,aAAcjwG,EAAMs3D,cAAc24C,aAClCF,eAAgB/vG,EAAMs3D,cAAcy4C,eACpCF,gBAAiB7vG,EAAMs3D,cAAcu4C,mBAgBZmoF,EAAzB,CAA6Cm8Q,K,mHChK/C,O,OACA,OACA,O,IACA,SACA,SACA,QACA,S,IACA,OACA,QACA,QACA,S,IACA,S,mDAEA,IAmEMn8Q,EAAqB,CACzBjtE,kCACArb,sDACAmvD,uD,WAGa,IAAApP,aACb,IAAAj8C,UAbsB,SAACxzG,GAAD,MAAY,CAClCqoB,YAAaroB,EAAMgR,YAAYqX,YAC/B2iG,aAAchrH,EAAMyV,UAAUu1G,aAC9BlnD,kBAAmB9jE,EAAM0zG,UAAU5vC,qBAUVk0H,EAAzB,EA1EuB,SAAChlF,GAAU,IAC1BgY,EAA2GhY,EAA3GgY,aAAcD,EAA6F/X,EAA7F+X,gBAAiBrb,EAA4EsD,EAA5EtD,0BAA2BmvD,EAAiD7rD,EAAjD6rD,0BAA2B/6F,EAAsBkvC,EAAtBlvC,kBAD3D,GAEE,IAAA+kF,UAAS,MAFX,qBAE3B+nT,EAF2B,KAEfC,EAFe,MAIlC,aAAuB/sY,GAEvB,IAAMh8C,EAAQ,CACZ,CAAEugB,MAAO,UAAWzpC,MAAO,EAAAmhD,eAAeC,UAC1C,CAAE3X,MAAO,UAAWzpC,MAAO,EAAAmhD,eAAeE,cAK5C,IAAAopE,YAAU,WACR,IAAMmlN,EAAe1mT,EAAMtU,MAAK,SAAAmlE,GAAA,OAAQA,EAAK/5E,QAAUosH,MAAiBljG,EAAM,GACzE8ob,GAAcpiI,EAAa5vU,QAAUgyc,EAAWhyc,OACnDiyc,EAAcriI,KAEf,CAACxjN,EAAcljG,EAAO8ob,IAEzB,IAAM,EAuBA,EAvBA8D,GAAA,gCAAmB,WAAO/7X,GAAP,6EACvBk4X,EAAcl4X,GACdoyC,EAAgBpyC,EAAK/5E,OACrB8wG,EAA0B,MAC1BmvD,EAA0B,IAEtB2sB,OANmB,OAOf7yG,EAAK/5E,MAPU,cAQhB,EAAAmhD,eAAeE,YARC,OAShB,EAAAF,eAAeI,iBATC,SAYhB,EAAAJ,eAAeG,iBAZC,OAahB,EAAAH,eAAeK,sBAbC,UAgBhB,EAAAL,eAAeC,SAhBC,qCAUb,IAAAikM,gCAA+B1qN,MAAK,SAAA96B,OAVvB,8DAcb,IAAAwlP,+BAA6B,GAAM1qN,MAAK,SAAA96B,OAd3B,8DAiBE,IAAA8sL,mBAjBF,eAiBnBC,EAjBmB,OAkBnB,UAAU51H,OAAO41H,GAlBE,wEAAnB,6CAuBAmpR,GAAA,gCAAuB,WAAOC,GAAP,uEAE3BllW,EAA0B,MAC1BmvD,EAA0B,IAHC,kDAAvB,6CAMN,OACE,mCACEvsE,UAAW,0BACXxqE,MAAOA,EACP8ob,WAAYA,EACZiE,aAAcH,EACdI,iBAAkBH,EAClBI,iBAAiB,S,6FCrEvB,O,WACA,M,mDAEA,IAAMC,EAAW,SAAC,GAAsF,IAApF1iX,EAAoF,EAApFA,UAAWxqE,EAAyE,EAAzEA,MAAO+sb,EAAkE,EAAlEA,aAAcE,EAAoD,EAApDA,gBAAiBnE,EAAmC,EAAnCA,WAAYkE,EAAuB,EAAvBA,iBAAuB,GAC1E,IAAAjsT,UAASksT,IAAmB,GAD8C,qBAC/FE,EAD+F,KACvFC,EADuF,QAElD,IAAArsT,UAAS+nT,GAAc9ob,EAAM,IAFqB,qBAE/Fqtb,EAF+F,KAE3EC,EAF2E,MAItG,IAAA/rV,YAAU,WACJunV,GAAcA,EAAWhyc,QAAUu2c,EAAmBv2c,OACxDw2c,EAAsBxE,KAEvB,CAACA,EAAYuE,EAAmBv2c,QAEnC,IAAMy2c,GAAiB,IAAAttT,cAAY,WACjCmtT,GAAU,SAAAN,GAAA,OAAeA,KACzBE,EAAiBG,KAEhB,CAACH,IAEEJ,GAAmB,IAAA3sT,cAAY,SAAClqJ,EAAG86E,GACvC96E,EAAE20F,kBACF30F,EAAE40F,iBAEF2iX,EAAsBz8X,GACtBk8X,EAAal8X,GACbu8X,GAAU,KACT,CAACL,IAEEtrK,EAAYj3M,GAAa,YACzBjlC,EAAc4nZ,EAAY1rK,EAAZ,WAAkC,GAEtD,OACE,+BAAKj3M,UAAU,YACb,+BAAKA,UAAci3M,EAAd,IAA2Bl8O,GAC9B,+BAAKilC,UAAci3M,EAAd,UAAkC/kH,QAAS6wR,GAC9C,gCAAM/iX,UAAci3M,EAAd,kBACN,gCAAMj3M,UAAci3M,EAAd,iBAAyC4rK,EAAmB9sa,QAEpE,+BAAKiqD,UAAWi3M,EAAY,cACzB0rK,GACC,8BAAI3iX,UAAci3M,EAAd,kBAA0CxtR,MAAO,CAAE6jM,UAAW,QAASuoI,SAAU,SAClFrgU,EAAMtY,KAAI,SAACmpE,EAAMrjE,GAChB,IAAMurJ,EAAWloF,EAAK/5E,QAAUu2c,EAAmBv2c,MAEnD,OACE,8BAAIM,IAAKoW,EACLkvK,QAAS,SAAC3mL,GAAD,OAAO62c,EAAiB72c,EAAG86E,IACpC2Z,UAAci3M,EAAH,wBACR1oI,EAAWA,IAAI0oI,EAAf,+BAAyD,KAC7D5wN,EAAKtwC,eAY1B2sa,EAASprT,UAAY,CACnBt3D,UAAW,UAAUpoD,OACrBpiB,MAAO,UAAU84F,QAAQ,UAAUt/D,MAAM,CACvCjZ,MAAO,UAAU6B,OAAOy2E,WACxB/hH,MAAO,UAAU40M,IAAI7yF,cACnBA,WACJk0V,aAAc,UAAUpuR,KAAK9lE,WAC7Bm0V,iBAAkB,UAAUruR,KAAK9lE,WACjCo0V,gBAAiB,UAAUjrT,KAC3B8mT,WAAY,UAAUtvZ,MAAM,CAC1BjZ,MAAO,UAAU6B,OAAOy2E,WACxB/hH,MAAO,UAAU40M,IAAI7yF,cAIzBq0V,EAASruR,aAAe,CACtBopN,gBAAiB,G,UAGJilE,G,8EChFf,I,EAAA,OACA,SACA,QACA,O,oCACA,QACA,Q,UAE+B,SAAClxY,IAC9B,IAAAulD,YAAU,WAGR,IACO66H,EADO,UAAMr6O,WACamH,YAA1BkzO,kBAGP,IAAA//K,uBAAsB,EAAAltB,cAAcsB,aAEpC,UAAM5sB,UAAS,IAAA4E,gBAAe,CAACvF,WAAY,EAAGiN,SAAS,EAAOi4S,UAAU,KACxE,UAAMvkT,UAAS,IAAA4E,gBAAe,CAACvF,WAAY,EAAGiN,SAAS,EAAMi4S,UAAU,MAKvE,IAAAjsF,8BAA6BC,GAAkB3qN,MAAK,SAAA96B,SAGnD,CAACqlE,M,8EC1BN,I,EAAA,OAEA,QACA,Q,oCACA,S,UAEiC,YAE/B,IAAAulD,YAAW,WACT,IAAMzmG,GAAS,IAAAC,oBACf,IAAI,IAAA++C,uBAAwBh/C,EAAOsD,MAAMyzJ,QAAS,CAChD,GAAI/2J,EAAOsD,MAAMyzJ,QAAQ9/E,WAAY,CACnC,IAAMy7W,EAAoB1yb,EAAOsD,MAAMyzJ,QAAQ9/E,WAAWhsE,cAC1D,UAAiB6zH,uCAAuC4zT,GAE1D,GAAI1yb,EAAOsD,MAAMyzJ,QAAQ1/E,cAAe,CACtC,IAAMs7W,EAAuB3yb,EAAOsD,MAAMyzJ,QAAQ1/E,cAAcpsE,cAChE,UAAiB6zH,uCAAuC6zT,OAG3D,M,8ECpBL,I,IAAA,MACA,OACA,O,IACA,S,IACA,S,IACA,SACA,Q,IACA,S,IACA,S,8DAqCe,IAAA9lT,aACb,IAAAj8C,UAZsB,SAACxzG,GAEvB,MAAO,CACLgrH,aAAchrH,EAAMyV,UAAUu1G,aAC9B9X,kBAAmBlzG,EAAMgR,YAAYkiG,qBAId,GAIzB,EApCqC,SAACF,GAAU,IACxCgY,EAAoChY,EAApCgY,aAAc9X,EAAsBF,EAAtBE,mBACtB,aAAkBA,IAClB,aAAsBA,GAkBtB,OAhBqB,WACnB,OAAQ8X,GACN,KAAK,EAAAjrE,eAAeE,WAClB,OAAO,wCACT,KAAK,EAAAF,eAAeG,gBAClB,OAAO,mCAAiBgkM,kBAAkB,IAC5C,KAAK,EAAAnkM,eAAeI,iBAClB,OAAO,wCACT,KAAK,EAAAJ,eAAeK,sBAClB,OAAO,mCAAa8jM,kBAAkB,IACxC,KAAK,EAAAnkM,eAAeC,SACpB,QACE,OAAO,yCAINw1Z,Q,8EC/BT,I,IAAA,MACA,O,IACA,S,8DAuCe,IAAAhiW,UAPS,WACtB,MAAO,KAGkB,GAGZ,EArCa,WAG1B,OACE,+BAAK9jG,GAAG,iBAAiB4iF,UAAU,kBACjC,mCAAYkgE,QAAS,KACrB,+BAAK9iJ,GAAG,gBAAgB4iF,UAAU,yBAChC,+BAAKA,UAAU,qBACb,iCAAOx/E,KAAK,SAASw/E,UAAU,mCAAmC5iF,GAAG,cAAc4yH,IAAI,IAAIC,IAAI,QAC/F,+BAAKwzT,cAAY,iBAAiBzjW,UAAU,sDAC1C,+BAAKA,UAAU,YACb,gCAAMp0F,EAAE,0BAA0BskE,OAAO,UAAUqnY,eAAe,QAAQ3hU,YAAY,QACtF,gCAAMhqI,EAAE,2BAA2BiqI,KAAK,UAAU3lE,OAAO,UAAUqnY,eAAe,QAAQ3hU,YAAY,UAG1G,+BAAK6tT,cAAY,mBAAmBzjW,UAAU,wDAC5C,+BAAKA,UAAU,YACb,gCAAMp0F,EAAE,0BAA0BskE,OAAO,UAAUqnY,eAAe,QAAQ3hU,YAAY,QACtF,gCAAMhqI,EAAE,2BAA2BiqI,KAAK,UAAU3lE,OAAO,UAAUqnY,eAAe,QAAQ3hU,YAAY,WAI5G,kCAAQ6tT,cAAY,qBACZzjW,UAAU,mDACV8mS,YAAU,uCAFlB,gB,yGC1BR,O,WACA,S,IAKA,O,IACA,QACA,OACA,O,8DAqDe,IAAA3pO,aACb,IAAAj8C,UAZsB,SAACxzG,GAAD,MAAY,CAClCopH,wBAAyBppH,EAAMgR,YAAYkiG,kBAC3CrzF,eAAgB7f,EAAMqN,gBACtB0xU,YAAa/+U,EAAMyV,UAAUq2G,kBAAkBkzN,QAC/Cx+T,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,oBAGX,GAIzB,EApDiB,SAAAq+F,GAAS,IAElBw/C,EAA2Gx/C,EAA3Gw/C,QAASppC,EAAkGpW,EAAlGoW,wBAAyBvpG,EAAyEmzF,EAAzEnzF,eAAgBk/T,EAAyD/rO,EAAzD+rO,YAAa58T,EAA4C6wF,EAA5C7wF,KAAM3B,EAAsCwyF,EAAtCxyF,OAAQ7L,EAA8Bq+F,EAA9Br+F,iBAAqB8gc,GAFhF,aAEyFziW,EAFzF,yGAIlBwoD,EAAYhJ,EAAZgJ,QACFq9R,GAAY,aAChB,UAAiBr0V,aACjB,CAACg3D,WACDpyC,EACAvpG,EACAk/T,EACA58T,EACA3B,EACA7L,GAmBF,OAXA,IAAA00G,YAAU,WACR,UAAU78D,OAAOnlD,MAAQwxb,EAAU38U,QAAQ3C,YAC3C,UAAU/sD,OAAOjlD,OAASsxb,EAAU38U,QAAQ1C,eAC3C,CAACq/U,KAEJ,IAAAxvU,YAAU,WACR,OAAO,WACL,UAAiB78D,OAAOw9C,oBAAqB,KAE9C,IAGD,mCACE,gDAAQt6F,GAAG,YAAY4iF,UAAU,mBAAmB/qF,OAAO,MAAMF,MAAM,MAAMqgJ,IAAKmxS,GAAe4c,U,8EC7CvG,W,IACA,S,IACA,O,IACA,S,IACA,O,IACA,O,IACA,S,IACA,O,6DAEsB,SAAEjxW,GAC6B,IADfguD,EACe,uDADP,GAAIppC,EACG,aADsBvpG,EACtB,aADsCk/T,EACtC,aADmD58T,EACnD,aAA9B3B,EAA8B,aAAtB7L,EAAsB,aAC7Ckkb,GAAY,IAAAlxS,QAAO,MAD0B,GAEb,eAA9Bt/H,EAF2C,EAE3CA,YAAaO,EAF8B,EAE9BA,aAyErB,OAvEA,IAAAygG,YAAU,WACR,UAAiB1e,WACjB,UAAUjtC,MAAK,aAAE,eACjB,UAAMA,SACL,KAEH,IAAA2rD,YAAU,WACR,UAAUpoD,QAAQ9+C,KACjB,CAACA,KAEJ,IAAAknG,YAAU,WACR,IAAM81D,EAAc3+J,GAAUxQ,OAAOC,UAAU0E,GAAoB6L,EAAO7L,GAAoB,KAC1Fy0G,EAAwBjtH,SACtB4iV,GACA5/J,IAAgBA,EAAYzsD,cAC7B7yG,EAAezQ,SAASsmc,kBAE3B,UAASh4Y,SAGX,CAAC0rD,EAAyB21N,EAAal/T,KAEzC,IAAAwpG,YAAU,WACR,IACM78D,EAASqsY,EAAU38U,QAEzB1vD,EAAOnlD,MAAQghB,EACfmkC,EAAOjlD,OAASqhB,EAEhB,IAAM4yI,EAAUhvG,EAAOsqC,WAAW07D,EAAQgJ,SAAW,MACjDm6S,EAAa,EACb7b,SAmCJ,OAvBe,SAATn4X,IACJg0Y,IACAnxW,EAAap0F,MAAK,SAACC,EAAGC,GACpB,OAAOI,WAAWJ,EAAE2nD,UAAYvnD,WAAWL,EAAE4nD,aAE/CusC,EAAa1+F,SAAQ,SAAA8vc,GACnBA,EAAWj0Y,OAAOplE,UAAlB,EAA6Bi/J,EAASm6S,MAGxC,UAAiB96Z,OAAO/0C,SAAQ,SAAAw7C,GAC9BA,EAAMqgB,OAAOplE,UAAb,EAAwBi/J,MAG1B,UAAiB5xD,QAAQ,UAAiBxoC,OAAOM,QAMjDo4X,EA7BuB,SAACn4X,GACxB,OAAQ9hE,OAAOk2F,sBAAsBp0B,IACnC9hE,OAAOm2F,4BAA4Br0B,IACnC9hE,OAAOo2F,yBAAyBt0B,IAChC9hE,OAAOq2F,uBAAuBv0B,IAC9B9hE,OAAOs2F,wBAAwBx0B,IAC/B,SAASA,GACP9hE,OAAOu2F,WAAWz0B,EAjBL,IAAO,KAuCLm0B,CAAiBn0B,GAEtCA,GAEO,WACL9hE,OAAOg/b,qBAAqB/E,MAE7B,CAACt1V,EAAcguD,EAAS5pI,EAAcP,IAElCwwa,I,8ECrFT,I,EAAA,Q,8CAEe,IAAI,WAAW,WACzBzpb,EAAW,CACbmuE,YAAa,WACb1+B,MAAO,MACPyjF,IAAK,EACLC,IAAK,GACL3jI,MAAO,KACPqrH,KAAM,EACN4rV,MAAO,SAAUvtW,EAAOwtW,GACvB,UAAOrsZ,MAAQqsZ,EAAGl3c,MAClB,UAAOmuD,SAAStD,MAAMssZ,OAAO,QAASD,EAAGl3c,OACzC,UAAOmuD,SAASC,WAAW+oZ,OAAO,QAASD,EAAGl3c,SAGjD8I,KAAKg2D,KAAO,WACXtuD,EAASxQ,MAAQ,UAAO6qD,MACtBr6C,EAASmuE,YAAc,aAIzB71E,KAAKsuc,iBAENtuc,KAAKsuc,cAAgB,WACpB,EAAKpuM,MAAQ,EACb,IAAMp6F,EAAO1sK,SAAS02F,eAAe,aACjCg2E,EAAKj/G,iBACJ,YAAaztD,SAEhB0sK,EAAKj/G,iBAAiB,QAAS,EAAKw6C,SAC1B,iBAAkBjoG,SAE5B0sK,EAAKj/G,iBAAiB,aAAc,EAAKw6C,SAGzCykE,EAAKj/G,iBAAiB,sBAAuB,EAAKw6C,SAGnDykE,EAAK84I,YAAY,eAAgB,EAAKv9M,UAGxCrhG,KAAKqhG,QAAU,SAAClrG,GAGf,IAAI+pQ,GAFJ/pQ,EAAIA,GAAKgC,OAAOyoG,OAEFg9B,QAAUznI,EAAEo4c,QAAUp4c,EAAEq4c,YAEnB,EAAKtuM,MAAQA,EAEnB,EAAKA,MAAS,EAAKuuM,aAAe,EAAKC,YACpDv4c,EAAE40F,eAAiB50F,EAAE40F,iBAAoB50F,EAAEw4c,aAAc,GAE1D3uc,KAAK0uc,UAAY,WAChB,UAAO3sZ,OAAS,IACZ,UAAOA,MAAQ,KAClB,UAAOA,MAAQ,KAGjB/hD,KAAKyuc,WAAa,WACjB,UAAO1sZ,OAAS,IACZ,UAAOA,MAAQ,MAClB,UAAOA,MAAQ,Q,8EC3DlB,I,IAAA,O,IACA,O,IACA,S,IACA,MAEA,U,IACA,OACA,Q,IACA,OACA,S,IACA,QACA,QACA,SACA,Q,6DAEe,IAAI,WACjB,IACExtD,EACAyuT,EAAchjT,KACdo4D,GAAc,aAAE,0BAChBksE,EAAc,EACdsqU,EAAc,EAEdC,EAAc,CACZ94c,EAAG,4BACHmpD,EAAG,4BACHC,EAAG,4BACH83W,EAAG,4BACHiB,EAAG,4BACH94W,EAAG,6BAELu4H,EAAiB,EAAA1gI,wBAAwB98C,SAAShC,OAAOw/K,eAAiBx/K,OAAOw/K,cAAgB,MACjGpwH,EAAc,GAqdhB,SAASunZ,EAAe/vc,EAAKgwc,EAASzrc,GACpC,IAAMwuD,EAAM14D,SAAS8oD,cAAc,OACnC4P,EAAI8/B,YAAc,YAClB,IAAMm3N,GAAO,aAAEj3P,GACfi3P,EAAKpmC,IAAI,CACPjnP,SAAU,WACV/7B,MAAO,MACPE,OAAQ,QAEVkpT,EAAKpnC,UAAS,aAAE,SAChBonC,EAAKh5E,KAAK,MAAOhxO,GACjBgqT,EAAKh5E,KAAK,YAAazsO,GACvBikD,EAAMynZ,eAAeD,GAAWj9Y,EA/dlC9xD,KAAKg2D,KAAO,WACL,UAAOn1D,aAAgB1I,OAAO2B,SAASC,KAAKI,SAAS,4BACxD,UAAO4rD,mBAAoB,EAC3Bi9P,EAAMisJ,YACN1nZ,EAAMjlC,KAAKA,KAAK,UAAmB4sb,WAAWL,EAAS,KACvD7rJ,EAAMmsJ,qBAAqB,GAC3BnsJ,EAAMosJ,UAAY1gX,YAAW,WAC3Bs0N,EAAMkqB,cAAa,WACjB3lR,EAAM8nZ,KAAKl4Y,YAAY,wCAExB,KACH6rP,EAAMssJ,kBACNtsJ,EAAMusJ,oBAIVvvc,KAAKivc,UAAY,WACf,IAAI72Y,GAAU,aAAE,0BAsBhB,IArBA7Q,EAAc,CACZ6Q,UACA91C,KAAM81C,EAAQtsD,KAAK,uBACnBkyZ,MAAO5lW,EAAQtsD,KAAK,wBACpB0jc,WAAYp3Y,EAAQtsD,KAAK,uBACzBujc,KAAMj3Y,EAAQtsD,KAAK,6BACnBguC,QAAS,CACPtb,QAAS45B,EAAQtsD,KAAK,kCACtBoP,OAAQk9C,EAAQtsD,KAAK,kCACrBqoC,OAAQikB,EAAQtsD,KAAK,kCACrB0kC,KAAM4nB,EAAQtsD,KAAK,kCACnB2jc,WAAYr3Y,EAAQtsD,KAAK,wCACzB4jc,YAAat3Y,EAAQtsD,KAAK,iDAE5Bkjc,eAAgB,CACd11U,WAAY,KACZF,SAAU,KACVu2U,gBAAiB,OAIhBp7c,EAAI,EAAGA,GAnDE,EAmDaA,IACzBgzD,EAAM,OAAOhzD,GAAK6jE,EAAQtsD,KAAK,wBAAwBvX,IAI3DyL,KAAKsvc,gBAAkB,WACrB/nZ,EAAMy2W,MAAM9tU,MAAM8yN,EAAMl8E,cACxBv/K,EAAMioZ,WAAWt/W,MAAM8yN,EAAM4sJ,aAAan4c,KAAKurT,GAAO,IACtDz7P,EAAMzN,QAAQtb,QAAQ0xD,MAAM8yN,EAAM4sJ,cAClCroZ,EAAMzN,QAAQ5+B,OAAOg1E,MAAM8yN,EAAM4sJ,cACjCroZ,EAAMzN,QAAQ3F,OAAO+7C,MAAM8yN,EAAM6sJ,aACjCtoZ,EAAMzN,QAAQtJ,KAAK0/C,MAAM8yN,EAAM8sJ,WAC/BvoZ,EAAMzN,QAAQ21Z,WAAWv/W,MAAMlwF,KAAK+vc,gBACpCxoZ,EAAMzN,QAAQ41Z,YAAYx/W,MAAMlwF,KAAK+vc,iBAGvC/vc,KAAK+vc,eAAiB,WACpBxoZ,EAAMjlC,KAAKA,KAAK,UAAmB4sb,WAAWL,EAAS,KACvDtnZ,EAAMioZ,WAAWh6Y,OACjBjO,EAAM8nZ,KAAK75Y,OACX4C,EAAQtsD,KAAK,wBAAwBw4H,GAAa9uE,OAClD,UAAU7H,kBACV+gC,YAAW,WACTs0N,EAAMl8E,cAAa,KAClB,MAGL9mO,KAAK8mO,aAAe,SAAUkpO,GAE5B,GADAzoZ,EAAM6Q,QAAQyzI,QAAQ,OAClBmkQ,EAAS,CACI,UAAU7kZ,YAClB/sD,SAAQ,SAAAw7C,GACTA,aAAiBA,EAAjBA,SACiBA,EAAM6R,WACdrtD,SAAQ,SAAA2wD,GACjBA,EAAKuJ,2BAIX0qP,EAAMitJ,qBACN,UAAOlqZ,mBAAoB,GAE3B,IAAAqI,uBACA,UAAMnqC,UAAS,IAAAujF,mBAAkB,KACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,SACnC,UAAOhlD,UAAUsC,eAAiB,GAElC,IACM2T,EADa,UAAM12D,WACa4L,UAAU8qD,mBAChD,UAAM50C,UAAS,IAAA60C,wBAAuBD,EAAqB,IAC3D,UAAM50C,UAAS,IAAAkgG,yBAAwB,CAACmzN,SAAS,OAIrDt3U,KAAKktU,aAAe,SAAUv6G,GAC5BprK,EAAM6Q,QAAQszI,OAAO,OACrBinB,KAGF3yN,KAAK4vc,aAAe,SAAUM,GAC5B,IAAMp7Q,EAAWxwD,EAAc,EAC/B,GAAIwwD,EAhHU,EAiHZkuH,EAAMl8E,cAAa,OADrB,CAIA,GAAiB,IAAbhyC,GACF,IAAAiyM,cAAapvN,OAGR,IAAiB,IAAbmd,IAAmBo7Q,EAE5B,YADAltJ,EAAM6sJ,cAED,GAAiB,IAAb/6Q,IAAmBo7Q,EAE5B,YADAltJ,EAAM8sJ,YAGRvoZ,EAAM6Q,QAAQ23K,KAAK,YAAaj7C,GAChCvtI,EAAM,OAAO+8E,GAAaunE,QAAQ,KAAK,WACrCtkJ,EAAMjlC,KAAKA,KAAK,UAAmB4sb,WAAWL,EAAS/5Q,KACvDkuH,EAAMmsJ,qBAAqBr6Q,GAC3BxwD,EAAcwwD,OAIlB90L,KAAKmvc,qBAAuB,SAAUr6Q,GACpC,IAAIoqI,EAAmB,KACvB,OAAQpqI,GACN,KAAK,EACHoqI,EAAmB9lU,SAASg9F,cAAc,6BAC1C,MAEF,KAAK,EAEH,UAAMnyE,UAAS,IAAAujF,mBAAkB,YACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,YACnC,IAAIgoT,EAAU,IACd,OAAQj4O,GACN,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,MACHi4O,EAAU,IACV,MACF,IAAK,KACL,IAAK,MACHA,EAAU,IACV,MACF,IAAK,MACL,IAAK,OACHA,EAAU,IACV,MACF,IAAK,IACL,IAAK,KACHA,EAAU,IACV,MACF,IAAK,KACL,IAAK,MACH,GAAIz3Z,OAAO+xD,YAAc,KAAO/xD,OAAOwqD,WAAa,IAAK,CACvD,IAAMwtZ,GAAa,aAAE,iBACrBA,EAAWlsJ,OAAOz2N,QAAQ,CAAEy5E,UAAWkpS,EAAW,GAAG5yR,cAAgB,KACrEqyO,EAAU,SAEVA,EAAU,IAMhBlhU,YAAW,WACTwwO,EAAmB9lU,SAASg9F,cAAc,oCAAoCuhF,EAAc,KAC5FpwH,EAAA,MAAemkJ,OAAO,KACtB,IAAMr/G,EAAO6yO,EAAiB5yO,wBAC9B/kC,EAAM,OAASutI,GAAU6tF,IAAI,CAC3Bz9Q,IAAKmnF,EAAKnnF,IACV4sC,KAAMu6C,EAAKv6C,OAEbkxQ,EAAMotJ,SAAS/jX,KACdujU,GACH,MAEF,KAAK,EAEH,UAAM3rY,UAAS,IAAAujF,mBAAkB,SACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,SACnClZ,YAAW,WACTwwO,EAAmB9lU,SAASg9F,cAAc,+BAC1C7uC,EAAA,MAAemkJ,OAAO,KACtB,IAAMr/G,EAAO6yO,EAAiB5yO,wBAC9B/kC,EAAM,OAASutI,GAAU6tF,IAAI,CAC3Bz9Q,IAAKmnF,EAAKnnF,IACV4sC,KAAMu6C,EAAKv6C,OAEbkxQ,EAAMotJ,SAAS/jX,KACd,KACH,MAEF,KAAK,EAEH,KADA6yO,EAAmB9lU,SAASg9F,cAAc,8BAGxC,YADA4sN,EAAM4sJ,cAAa,GAIrBroZ,EAAA,MAAemkJ,OAAO,KACtB,MAEF,KAAK,EACH,IAAMw7B,EAAW/uO,OAAOwqD,WAAa,IAAM,kCAAoC,+BAC/Eu8Q,EAAmB9lU,SAASg9F,cAAc8wI,GAC1C3/K,EAAM8nZ,KAAKn4Y,SAAS,SACpB3P,EAAA,MAAemkJ,OAAO,MACtB,aAAE,wBAAwBl2I,QAC1B,aAAE,uBACClzC,KAAK,UAAmB4sb,WAAW,+BACnCj2O,MACA/oI,MAAM8yN,EAAM+sJ,gBAEA,UAAU5kZ,YAClB/sD,SAAQ,SAAAw7C,GACMA,EAAM6R,WACdrtD,SAAQ,SAAA2wD,GACjBA,EAAKsrI,iBAAiB,YAQ9B,GAAI6kI,GAAiC,IAAbpqI,GAA+B,IAAbA,EAAgB,CACxD,IAAMzoG,EAAO6yO,EAAiB5yO,wBAC9B/kC,EAAM,OAASutI,GAAU6tF,IAAI,CAC3Bz9Q,IAAKmnF,EAAKnnF,IACV4sC,KAAMu6C,EAAKv6C,OAEbkxQ,EAAMotJ,SAAS/jX,KAInBrsF,KAAKowc,SAAW,SAAU/jX,GACxB,IAAInnF,EAAMmnF,EAAKnnF,IACX4sC,EAAOu6C,EAAKv6C,MACZ35C,OAAO+xD,YAAc,KAAO/xD,OAAOwqD,WAAa,OAClDz9C,EAAMkF,KAAKC,MAA8C,KAAtCgiF,EAAKnnF,KAAQ,GAAKmnF,EAAK1sF,OAAS,GAAW,KAC9DmyC,EAAO1nC,KAAKC,MAAgD,KAAxCgiF,EAAKv6C,MAAS,GAAKu6C,EAAKxsF,QAAU,GAAW,MAEnE0nD,EAAM8nZ,KAAK1sL,IAAI,YAAa,aAAa7wO,EAAK,OAAO5sC,EAAI,QAG3DlF,KAAK6vc,YAAc,WACjB7sJ,EAAMl8E,cAAa,GAEnB,UAAM7iN,UAAS,IAAAujF,mBAAkB,KACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,KACnC,IAAMz0D,EAAS,UAAUgY,YACzB,GAAIhY,EAAO1+C,OAAQ,CAIjB,UAAOuxD,UAAUE,OAAQ,EACzB,UAAOF,UAAUk+I,UAAW,EAE5B,IACM5nH,GADkBnpC,EAAOrnC,MAAK,SAAA8tC,GAAA,MAA0B,eAAjBA,EAAMtzC,WAA4B6sC,EAAO,IACnDsY,WACnC,OAAQtzD,OAAO6uY,eACb,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,MACH,IAAMqpE,EAAe/zX,EAAWA,EAAW7nF,OAAS,GACpDuuT,EAAMstJ,mBAAmBD,GAAc,GAAO,WAC5CrtJ,EAAMutJ,uBAAuBF,GAAc,MAE7C,MAEF,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,OACH,IAAMG,EAAiBl0X,EAAW,GAClC0mO,EAAMytJ,qBAAqBD,GAAgB,GAAM,WAC/CxtJ,EAAM0tJ,yBAAyBF,GAAgB,MAEjD,IAAMH,EAAe/zX,EAAWA,EAAW7nF,OAAS,GACpDuuT,EAAMstJ,mBAAmBD,GAAc,GAAO,WAC5CrtJ,EAAMutJ,uBAAuBF,GAAc,EAAMG,MAEnD,MAEF,IAAK,IACL,IAAK,KACH,IAAMH,EAAe/zX,EAAW,GAChC0mO,EAAMstJ,mBAAmBD,GAAc,GAAM,WAC3CrtJ,EAAMutJ,uBAAuBF,GAAc,MAE7C,MAEF,IAAK,KACL,IAAK,MACH,IAAMA,EAAe/zX,EAAWA,EAAW7nF,OAAS,GACpDuuT,EAAMstJ,mBAAmBD,GAAc,GAAO,WAC5CrtJ,EAAMutJ,uBAAuBF,GAAc,MAE7C,IAAMG,EAAiBl0X,EAAW,GAClC0mO,EAAMytJ,qBAAqBD,GAAgB,GAAM,WAC/CxtJ,EAAM0tJ,yBAAyBF,GAAgB,SAUzDxwc,KAAKswc,mBAAqB,SAAUD,EAAcM,EAAY5/a,GAC5Ds/a,EAAalsQ,uBAAwB,EACrCksQ,EAAah2Q,iBAAiB9yI,EAAMynZ,eAAe11U,YACnD,IAAIzwE,EAAQ,EACN+nZ,EAASP,EAAa5+Y,KAAKr3C,EACjC4oS,EAAMwK,MAAQ9+N,YAAW,SAAS40U,IAChC+sC,EAAa5+Y,KAAKr3C,EAAIu2b,EAAaC,EAAS/nZ,EAAQ+nZ,EAAS/nZ,EAC7DwnZ,EAAa93Y,GAAGn+C,EAAIi2b,EAAa5+Y,KAAKr3C,EAExB,OADdyuC,EAEE93B,IAEA29D,WAAW40U,EAAK,MAEjB,IAGLtja,KAAKuwc,uBAAyB,SAAUF,EAAcM,EAAYH,GAChExtJ,EAAMstJ,mBAAmBD,EAAcM,GAAY,WAC7B,IAAhB/B,EACF5rJ,EAAM6tJ,WAAWR,EAAcG,IAE/B5B,IACA5rJ,EAAM6sJ,mBAKZ7vc,KAAKywc,qBAAuB,SAAUD,EAAgBM,EAAa//a,GACjEy/a,EAAersQ,uBAAwB,EACvCqsQ,EAAen2Q,iBAAiB9yI,EAAMynZ,eAAe51U,UACrD,IAAItwE,EAAQ,EACNioZ,EAASP,EAAe/+Y,KAAKp3C,EACnC2oS,EAAMguJ,OAAStiX,YAAW,SAAS40U,IACjCktC,EAAe/+Y,KAAKp3C,EAAIy2b,EAAcC,EAASjoZ,EAAQioZ,EAASjoZ,EAChE0nZ,EAAej4Y,GAAGl+C,EAAIm2b,EAAe/+Y,KAAKp3C,EAE5B,OADdyuC,EAEE/3B,GAAWA,IAEX29D,WAAW40U,EAAK,MAEjB,IAGLtja,KAAK0wc,yBAA2B,SAAUF,EAAgBG,GACxD3tJ,EAAMytJ,qBAAqBD,EAAgBG,IAG7C3wc,KAAK6wc,WAAa,SAAUR,EAAcG,GAExC7uT,aAAaqhK,EAAMwK,OACnB7rK,aAAaqhK,EAAMguJ,QACfX,IACFA,EAAalsQ,uBAAwB,EACrCksQ,EAAah2Q,iBAAiB,OAE5Bm2Q,IACFA,EAAersQ,uBAAwB,EACvCqsQ,EAAen2Q,iBAAiB,OAIlC,UAAOr0I,UAAUE,OAAQ,EACzB,UAAOF,UAAUk+I,UAAW,EAE5B,UAAMjgL,UAAS,IAAAujF,mBAAkB,SACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,SACnClZ,YAAW,WACTs0N,EAAMkqB,cAAa,WACjBlqB,EAAM4sJ,cAAa,QAEpB,MAGL5vc,KAAK8vc,UAAY,WACf,IAAMmB,EAAoB,GAAG54c,MAAMxD,KAAKuE,SAASwsK,iBAAiB,+CAC5DzyH,EAAS,UAAUgY,YACrB8lZ,EAAkBx8c,QAAU0+C,EAAO1+C,QACrCuuT,EAAMl8E,cAAa,GACnB,UAAM7iN,UAAS,IAAAujF,mBAAkB,SACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,SAEnClZ,YAAW,WACT,IAAMwiX,EAAaD,EAAkB,IAAMA,EAAkB,IAC7D,aAAEC,GAAYhvW,QAAQ,SACtBxT,YAAW,WAET,UAAMzqE,UAAS,IAAAujF,mBAAkB,KACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,KACnC,IACMtrB,GADkBnpC,EAAOrnC,MAAK,SAAA8tC,GAAA,MAA0B,eAAjBA,EAAMtzC,WAA4B6sC,EAAO,IACnDsY,WAC/B0lZ,EAAa70X,EAAW7nF,OAAS,EACrCuuT,EAAMwK,MAAQ9+N,YAAW,SAAS40U,IAChC,IAAMv0W,EAAOutB,EAAW60X,GACpBC,EAAgB,GACpB,OAAQj5c,OAAO6uY,eACb,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,MACHoqE,EAAgB,CAAC,GACjB,MACF,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,OACHA,EAAgB,CAAC,EAAG,GACpB,MACF,IAAK,IACL,IAAK,KACHA,EAAgB,CAAC,EAAG,GACpB,MACF,IAAK,KACL,IAAK,MACHA,EAAgB,CAAC,EAAG,EAAG,GAK3B,IAAKA,EAAcj3c,SAASg3c,GAAa,CACvC,IAAI7hZ,EAAa,UAAU8G,oBAAoBrH,GAC3CO,GACF,UAAUkI,YAAYlI,GAGxBP,EAAKo0I,eAAc,aAAE+tQ,GAAYnhO,KAAK,6BAA6B,aAAEmhO,GAAYnhO,KAAK,YACtFhhL,EAAKsrI,iBAAiB9yI,EAAMynZ,eAAeW,mBAE7CwB,EAaEziX,WAAW40U,EAAK,MAXhB3hR,aAAaqhK,EAAMwK,OACnB,UAAMvpS,UAAS,IAAAujF,mBAAkB,SACjC,UAAMvjF,UAAS,IAAA2jF,qBAAoB,SAEnC,UAAiB3+C,YAAY9wD,QAC7B,UAAiByrG,YAAYzrG,QAE7B6qT,EAAMkqB,cAAa,WACjBlqB,EAAM4sJ,cAAa,SAKtB,KACF,OACF,MAEH5sJ,EAAM4sJ,cAAa,IAoBvB5vc,KAAKuvc,gBAAkB,WACrBT,uBAAmC,aAAc,IACjDA,yBAAqC,WAAY,IACjDA,oBAAgC,kBAAmB,KAGrD9uc,KAAKiwc,mBAAqB,WACxBv7c,OAAOmc,KAAK02C,EAAMynZ,gBAAgB5wc,SAAQ,SAAA5G,GACxC,IAAMk3D,EAAQnH,EAAMynZ,eAAex3c,IACnC,aAAEk3D,GAAOmpH,e,8EC/gBf,I,IAAA,Q,IACA,S,IAGA,OACA,Q,6DAEe,IAAI,WAAW,WAC5B73K,KAAKqxc,eAAiB,sCACtBrxc,KAAKkY,QAAS,IAAAi5D,iBAAgB,aAAe,QAC7CnxE,KAAKkvc,WAAa,GAElBlvc,KAAKsxc,YAAc,SAACp5b,GAA4B,IAApBg3b,EAAoB,uDAAP,GACvC,EAAKqC,yBACL,EAAKr5b,OAASA,IAAU,IAAAi5D,iBAAgB,aAAe,QACvD,IAAMqgY,EAAc,GAAGn5c,MAAMxD,KAAKuE,SAASwsK,iBAAiB,gBAcxDlxK,OAAOmc,KAAKq+b,GAAYz6c,QAC1BC,OAAOmc,KAAKq+b,GAAY9wc,SAAQ,SAAAw4a,GACzB,EAAKs4B,WAAWt4B,KACnB,EAAKs4B,WAAWt4B,GAAO,IAEzB,EAAKs4B,WAAWt4B,GAAOlib,OAAO+2B,OAAO,GAAI,EAAKyjb,WAAWt4B,GAAMs4B,EAAWt4B,OAG9E46B,EAAYpzc,SAAQ,SAAC+7E,GACnB,IAAM3iF,EAAM2iF,EAAQloB,QAAQ3vC,KACxBmvb,EAAa,EAAKplO,UAAU70O,GAC7BA,IAAQi6c,IACTt3X,EAAQu3X,UAAYD,OAO1Bzxc,KAAK2xc,qBAAuB,SAACz5b,GAC3B,IAAMC,EAAiB,UAAOA,eAC9B,GAAIA,GAA6B,UAAXD,EAAoB,CACxC,GAAIC,EAAeE,QACjB,MAAO,eACF,GAAIF,EAAeonI,0BACxB,MAAO,kBACF,GAAIpnI,EAAeG,cACxB,MAAO,qBACF,GAAIH,EAAeggG,QACxB,MAAO,eAIX,OAAOjgG,GAGT,IAAM08S,EAAiB,SAACzyN,GAEtB,IAAI+sW,EAAa,GACjB,UAAK96V,MAAMjS,EAASluG,KAAM,CACxBqtJ,SAAU,SAAChrE,GAETA,EAAQriF,KAAK,GAAGmK,SAAQ,SAAC8Z,GACR,QAAXA,IACFg3b,EAAWh3b,GAAU,OAGzBo+D,EAAQriF,KAAKmK,SAAQ,SAACi2T,EAAiBC,GACrC,GAAIA,EAAsB,CACxB,IAAM98T,EAAM68T,EAAgB,GAC5BA,EAAgBj2T,SAAQ,SAACm2T,EAAgBC,GACvC,GAAIA,EAAqB,CACvB,IAAMt8S,EAASo+D,EAAQriF,KAAK,GAAGugU,GAC3BD,IACF26I,EAAWh3b,GAAQ1gB,GAAO+8T,cAQxC,EAAK26I,WAAaA,EAClBl3c,QAAQ4B,IAAI,aAAc,EAAKs1c,YAC/B,EAAKoC,eAIPtxc,KAAKg2D,KAAO,WAIV,UAAMl/D,IAAI,EAAKu6c,gBACZx/a,KAAK+iS,GACLviS,MAAMr6B,QAAQC,QAInB+H,KAAKqsO,UAAY,SAAC70O,GAAwC,IAAnCo6c,EAAmC,uDAAT,KAC3CC,EAAoB,EAAKF,qBAAqB,EAAKz5b,QACnDu5b,EAAa,EAAKvC,WAAW2C,GAAmBr6c,GACpD,YAAmBw7D,IAAfy+Y,EAEKG,GAAoDp6c,EAGtDi6c,GAGTzxc,KAAK8xc,sBAAwB,SAACC,EAAuBt+Y,GACnD,OAAO,EAAK44K,UACV,iCAAmC0lO,EAAsB50b,OAAQs2C,IAIrEzzD,KAAKuxc,uBAAyB,WAC5B,IAAIS,GAAgB,IAAA7gY,iBAAgB,eACV,GAAG94E,MAAMxD,KAAKuE,SAASwsK,iBAAiB,+CAChDxnK,SAAQ,SAAC+7E,GACzBA,EAAQloB,QAAQ3vC,KAAyB,SAAlB0vb,EAA2B,qCAAuC,qC,8EChI/F,I,EAAA,OACA,SACA,O,8CAE0B,SAACxmW,IAEzB,IAAAmW,YAAW,WACT,IACOygE,EADO,UAAMjgL,WACiBmH,YAA9B84K,qBACP,GAAI52E,EAAkB/2G,SAAW2tL,EAAsB,CACrD,IAAIvhK,GAAU,IAAA22J,0BACd,IAAAI,kBAAiB/2J,MAGlB,CAAC2qF,M,8ECdN,W,IACA,M,IACA,Q,6DAE8B,SAACA,IAE7B,IAAAmW,YAAW,WACT,IACOygE,EADO,UAAMjgL,WACiBmH,YAA9B84K,qBACH52E,EAAkB/2G,SAAW2tL,IAC/B,UAA8B35H,4BAC9B,UAA8BwoF,oCAG/B,CAACzlC,M,8ECdN,W,OACA,OACA,Q,IAEA,Q,IACA,S,IACA,SACA,QACA,Q,IACA,S,IACA,SACA,QACA,QACA,Q,mDAGA,IAkEM8kF,EAAqB,CACzBtzH,uC,WAGa,IAAA8uC,UAbS,SAACxzG,GAGvB,MAAO,CACL2kE,eAHuB3kE,EAAM0zG,UAAxB/uC,eAILx8D,SAHiBnI,EAAMgR,YAAlB7I,YAW+B6vL,EAAzB,EAtEO,SAAChlF,GAAU,IAExBtuC,EAA+CsuC,EAA/CtuC,kBAAmBC,EAA4BquC,EAA5BruC,eAAgBx8D,EAAY6qG,EAAZ7qG,SACtC3G,GAAW,IAAA+vY,eAETooE,EAAiB,EAAAzya,kBAAkB1zB,MAAK,SAAA40U,GAAA,OAASA,IAAU5mV,EAAS+d,YACpEq6b,GAAgB,IAAAnyT,aAAYkyT,GAoBlC,OAlBA,IAAAtwV,YAAU,YACH1kD,GAAkBg1Y,EACrBj1Y,EAAkBi1Y,IACRA,GAAkBC,GAAiBj1Y,KACxC,EAAArhE,oBAAwBs2c,IAAkB,EAAA38b,OAAOkqB,MAAUyya,IAAkB,EAAA38b,OAAOkpB,OAAYw+B,IAAmB,EAAA1nD,OAAO4uF,WAC/HnnC,EAAkB,MAGnB,CAACljE,EAAS+d,YAEb,IAAA8pG,YAAU,WACH,EAAD,qBACFvoH,SAAS6C,KAAKoY,MAAMosU,SAAY,EAAAjhT,kBAAkBv/B,MAAK,SAAAygV,GAAA,OAASA,IAAUzjR,KAAmB,SAAW,MAGzG,CAACA,IAGA,EAAArhE,oBACCqhE,IAAmB,EAAA1nD,OAAOC,OACxBynD,GAAkB,EAAAz9B,kBAAkB3hC,OAAM,SAAA6iV,GAAA,OAASA,IAAU5mV,EAAS+d,aACvEpX,IAAc3G,GAAYA,EAAS+d,WAAa,EAAAtC,OAAOE,MAAUwnD,IAAmB,EAAA1nD,OAAOE,MACxF,KAIP,mCAAam1E,UAAW,oBACrB,SAAC+gH,GACA,OACE,sCACE,iCAAOtyF,KAAM,EAAA9jG,OAAOE,MAClB,mCAAUk2L,YAAaA,KAEzB,iCAAOtyF,KAAM,EAAA9jG,OAAOkqB,MAClB,mCAAYksK,YAAaA,KAE3B,iCAAOtyF,KAAM,EAAA9jG,OAAOkpB,OAClB,mCAAWktK,YAAaA,KAE1B,iCAAOtyF,KAAM,CAAC,EAAA9jG,OAAOmqB,MAAO,EAAAnqB,OAAOoqB,WACjC,mCAAUgsK,YAAaA,a,iGChErC,MACA,OACA,Q,IAEA,S,IACA,SACA,QACA,QACA,QACA,Q,WACA,S,mDAGA,IAwDMrb,EAAqB,CACzBtzH,sCACAG,4CACAO,uC,WAGa,IAAA6yH,aACb,IAAAzkF,UApBsB,SAACxzG,GAMvB,MAAO,CACL+4K,qBAJ6B/4K,EAAM8J,UAA9BivK,qBAKL5wK,SAJiBnI,EAAM8J,UAAlB3B,YAgBkB6vL,EAAzB,EA/De,SAAChlF,GAAU,IAEnBtuC,EACOsuC,EADPtuC,kBAAmByzH,EACZnlF,EADYmlF,QAASkb,EACrBrgG,EADqBqgG,YAAat6B,EAClC/lE,EADkC+lE,qBAAsBl0G,EACxDmuC,EADwDnuC,qBAAsBO,EAC9E4tC,EAD8E5tC,kBAC1Fj9D,EAAY6qG,EAAZ7qG,SAQI8pY,EAAkB,WAItB,GAFA,UAAUppW,eAAe,EAAAwB,6BAA6BkF,yBAElDwpI,EAAqB58K,OAQvB,OAPA0oE,EAAqB,EAAAzgC,cAAce,iBACnCigC,EAAkB,CAChB41C,4CAAyB+9D,EACtBrqK,QAAO,SAAAZ,GAAA,OAAYA,EAASC,cAAgBD,EAAS4tF,wBACrDlsF,KAAI,SAAA1B,GAAA,OAAYA,EAASC,oBAGvB,EAGT22D,EAAkB,IAClB2uI,GAAY,WACVlb,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,UAIxB,OACE,+BAAKpZ,UAAU,MACb,+BAAKA,UAAU,yBACb,mCAAcgxI,YAAa2uK,IAC3B,mCAAiB3uK,YAAa2uK,KAE/B9pY,EAAW,KAAO,8C,8ECnDzB,W,OACA,OACA,O,IACA,M,IAEA,O,IACA,Q,IACA,O,IACA,S,IACA,SACA,QACA,Q,mDAEA,IAAM0xc,EAAe,SAAC7mW,GAAU,IAEvBswH,EAAiEtwH,EAAjEswH,YAAan7N,EAAoD6qG,EAApD7qG,SAAU0X,EAA0CmzF,EAA1CnzF,eAAgB/C,EAA0Bk2F,EAA1Bl2F,uBACxCtD,EAAqBqG,EAAezQ,SAE1C,GAAIjH,EACF,OAAO,KAGT,IAAMirQ,EAAW55P,EAAmB+qK,cAAgBznK,EAE9C3Z,GAAiB,IAAAyX,yBAAuB,IAAA9W,4BAE9C,OACE,mCAASwuF,UAAU,iBACjB,+BAAKA,UAAU,UACb,wCACG,SAACgsT,GAAD,OACC,+BAAKhsT,UAAW,cAAiBgsT,EAAqC,GAAzB,yBAC1CA,EACG,+BAAK73Y,IAAK63Y,EAAW1iM,IAAI,GAAGtpH,UAAU,sBACtC,4CAIV,+BAAKA,UAAU,WACb,mCAAQA,UAAW,qCACX88M,UAAW,wCACX5qH,QAAS8+C,GACf,4CAAkB5zN,GAAG,2BAGxB,EAAA7M,kBAAoBgd,EAAeM,SAAW,KAC7C,8BAAImyE,UAAU,iBACZ,4CAAkB5iF,GAAI0jQ,EAAW,iCAAmC,wBAAyBv1P,OAAQ,CACnG1a,oBAEF,mCACCiwQ,EAAW,mCAAQ,KACpB,4CAAkB1jQ,GAAI0jQ,EAAW,iCAAmC,2BAGvEA,uBAAgCvzP,EAAeM,SAAW,KACzD,wCACE,6BAAGmyE,UAAU,gBACX,4CAAkB5iF,GAAG,uBAAuBmO,OAAQ,CAClD1a,oBAEDqW,EAAmBk1H,YAAc,4CAAkBh/H,GAAG,2BAA6B,MAEtF,6BAAG4iF,UAAU,gBACV94E,EAAmBk1H,YAAc,4CAAkBh/H,GAAG,yBAA2B,KAClF,4CAAkBA,GAAG,4BAEtB8J,EAAmBsf,SAClB,6BAAGw5D,UAAU,gBACX,4CAAkB5iF,GAAG,0BAErB,MAGPmQ,EAAeM,SACd,6BAAGmyE,UAAU,iBACX,4CAAkB5iF,GAAG,uBAAuBmO,OAAQ,CAClD1a,qBAGF,MAEN,+BAAKmvF,UAAU,aACb,mCAAiBlvD,SAAU,OAAQkuW,UAAU,OAMrDuoE,EAAajwT,UAAY,CACvB05E,YAAa,UAAU78C,KAAK9lE,Y,WAef,IAAA8uC,aAAW,IAAAj8C,UAZF,SAACxzG,GAKvB,MAAO,CACLmI,SALiBnI,EAAMgR,YAAlB7I,SAML0X,eALqB7f,EAAMqN,gBAM3ByP,uBAL+B9c,EAAMwc,UAAhCM,0BASiB,CAAyB+8b,K,iGCzGnD,MACA,OACA,O,IACA,M,IAEA,Q,IACA,Q,IAEA,SACA,SACA,SACA,Q,0DAEA,IAAMC,EAAwB,SAAC9mW,GAAU,IAEhC/oG,EACqB+oG,EADrB/oG,UAAWq5N,EACUtwH,EADVswH,YAAal6G,EACHpW,EADGoW,wBAAyBjnG,EAC5B6wF,EAD4B7wF,KAAMsqH,EAClCz5B,EADkCy5B,mBAAoBjzH,EACtDw5F,EADsDx5F,mBAChFsD,EAA0Bk2F,EAA1Bl2F,uBAEEgiY,GAAe,IAAA9oN,mBAAkB/rL,EAAWkY,GAC1C43b,EAAmB9vc,EAAU1E,OAAM,SAAA8N,GAAA,OAASA,EAAMqoF,uBAAyBroF,EAAMvE,aAWjFskQ,EAAW55P,EAAmB+qK,cAAgBznK,EAEpD,OACE,kCAAQw1E,UAAU,aAChB,+BAAKA,UAAU,mBACb,8BAAIA,UAAU,YACZ,4CAAkB5iF,GAAI0jQ,EAAW,kCAAoC,2BACpEhqJ,IAA4BgqJ,EAA5B,KAA4C0rI,EAA5C,IAA8D,MAEjE,8BAAIxsT,UAAU,gBACZ,4CAAkB5iF,GAAI0jQ,EAAW,qCAAuC,+BAE1E,mCACE9gL,UAAU,UACVjqD,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAI,wCAC/B4tN,QAAS,mCAAUF,QAAS28O,EAAkBv8O,SAxB1B,WAC1B,UAAU30L,eAAe,EAAAwB,6BAA6BqF,wBAA0Bqqa,EAAmB,UAAY,UAC/G,IAAMxnb,EAAeA,GAAfA,qBAAmBtoB,EAAUuF,KAAI,SAAA6D,GAErC,OADAA,EAAMvE,UAAYirc,EACX1mc,OAETo5H,EAAmBl6G,SAwBjB,mCAAgC+wM,YAAaA,MAKnDw2O,EAAsBlwT,UAAY,CAChC05E,YAAa,UAAU78C,KAAK9lE,YAG9B,IAcMq3E,EAAqB,CACzBvrD,yC,WAGa,IAAAgjB,aACb,IAAAj8C,UAnBsB,SAACxzG,GAAU,IAC1BiK,EAAajK,EAAM8J,UAAnBG,UACAipG,EAAqBlzG,EAAMgR,YAA3BkiG,kBACA9jG,EAAYpP,EAAMqN,gBAAlB+B,SACA0N,EAA0B9c,EAAMwc,UAAhCM,uBAEP,MAAO,CACL7S,YACAm/G,wBAAyBlW,EAAkB/2G,OAC3Cqd,mBAAoBpK,EACpB0N,4BASuBk7K,EAAzB,CAA6C8hR,K,+EC/E/C,I,IAAA,MACA,O,IAEA,O,IACA,SACA,Q,IACA,S,8DAyCe,IAAAtmW,UAbS,SAACxzG,GAAU,MACKA,EAAMgR,YAArCkiG,EAD0B,EAC1BA,kBAAmB/qG,EADO,EACPA,SACnB8B,EAAajK,EAAM8J,UAAnBG,UACP,MAAO,CACLm/G,wBAAyBlW,EAAkB/2G,OAC3C8N,YACA9B,cAIuB,GAGZ,EAvCM,SAAC6qG,GAAU,IAEvBoW,EAAgDpW,EAAhDoW,wBAAyBn/G,EAAuB+oG,EAAvB/oG,UAAW9B,EAAY6qG,EAAZ7qG,SAE3C,IAAKihH,EACH,OACE,+BAAK92B,UAAU,WACb,yCAKN,IAAMk+M,GAAgB,IAAAtvM,0BAAyBj3F,GAE/C,OACE,+BAAKqoF,UAAU,WACb,8BAAIA,UAAU,iBACXk+M,EAAchhS,KAAI,SAAA1B,GACjB,OAAO,mCAAqBA,SAAUA,EAAU5O,IAAK4O,EAAS4B,SAGjEvH,EAAW,mCAAiBi7B,SAAU,SAAUkuW,UAAU,IAAU,U,8EC7B3E,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,QACA,QACA,QACA,QACA,Q,IACA,SACA,Q,0DAEA,IAAM0oE,EAA6B,SAAChnW,GAAU,IAErCllG,EAA2DklG,EAA3DllG,SAAUqU,EAAiD6wF,EAAjD7wF,KAAM0iD,EAA2CmuC,EAA3CnuC,qBAAsBO,EAAqB4tC,EAArB5tC,kBAc7C,OACE,+BAAKktB,UAAU,wBACZ,IAAAvjF,WAAUjB,EAASC,cAAgBD,EAAS4tF,qBAC3C,mCAAYu1J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,sBACnC4iF,UAAU,6BACVkyF,QAjBQ,WACxB,IAAM2qH,EAAe,UAAUrlQ,mBAAmBh8B,EAASC,aAC3D,UAAU86B,eAAe,EAAAwB,6BAA6BwF,uBAAyBs/P,GAE/E,IAAMn0L,EAAsB,CAACltG,EAASC,aACtC82D,EAAqB,EAAAzgC,cAAcc,aACnCkgC,EAAkB,CAChB41C,wBAEFt7G,QAAQ4B,IAAI,WAAYwM,KASlB,yCAGF,mCAAsCA,SAAUA,MAMxDksc,EAA2BpwT,UAAY,CACrC97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,YAG/C,IAMMq3E,EAAqB,CACzBnzH,4CACAO,uC,WAGa,IAAAqqF,aACb,IAAAj8C,UAZsB,WACtB,MAAO,KAWkBwkF,EAAzB,CAA6CgiR,K,6FC7D/C,O,OACA,O,IACA,M,IAEA,O,IACA,SAEA,Q,IACA,SACA,Q,0DAEA,IAAMC,EAAuC,SAACjnW,GAAU,IAE/CllG,EAAkBklG,EAAlBllG,SAAUqU,EAAQ6wF,EAAR7wF,KAEXswR,GAAY,IAAA9qJ,QAAO,MAJ6B,GAKlB,IAAAkB,WAAS,GALS,qBAK/CqxT,EAL+C,KAKnCC,EALmC,KAetD,OACE,wCACE,mCAAYlpN,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnCg4I,IAAK+qJ,EACLngN,UAAW,8BAAgC4nX,EAAa,qBAAuB,IAC/E11R,QAbQ,WACtB,IAAM2qH,EAAe,UAAUrlQ,mBAAmBh8B,EAASC,aACrDqsc,EAAYF,EAAa,OAAS,OACxC,UAAUrxa,eAAkB,EAAAwB,6BAA6ByF,6BAA+Bsqa,EAAxF,IAAqGjrK,GAErGgrK,GAAeD,KASX,yCAEF,mCAAkCpsc,SAAUA,EACV+kS,SAAUJ,EACVynK,WAAYA,EACZC,cAAeA,MAKvDF,EAAqCrwT,UAAY,CAC/C97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,Y,WAGhC,IAAA8uC,YACbwqT,I,iGC/CF,M,IACA,M,IAEA,Q,IACA,Q,IACA,Q,IACA,QAEA,Q,IACA,S,mDAEA,IAAMI,EAAmC,SAACrnW,GAAU,IAE3C6/L,EAAiD7/L,EAAjD6/L,SAAUqnK,EAAuClnW,EAAvCknW,WAAYC,EAA2BnnW,EAA3BmnW,cAAersc,EAAYklG,EAAZllG,SAEtCwsc,EAAc,WAClBH,GAAc,IAGhB,OACE,mCAAQz7W,KAAMw7W,EACN5nX,UAAU,6BACV5iF,GAAI5B,EAAS4B,GAAK,SAClBmjS,SAAUA,EAAS32L,QACnBw2L,UAAW,aACXI,YAAA,EACAC,eAAe,IACpB,gBAAGC,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB,eAE1B,uCACE,mCAAmBy3B,YAAa4vI,GAC9B,mCACE,mCAAyCxsc,SAAUA,EAAUwsc,YAAaA,YAU1FD,EAAiCzwT,UAAY,CAC3C97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,WAC7CkyL,SAAU,UAAUr/F,IAAI7yF,WACxBu5V,WAAY,UAAUpwT,KAAKnpC,WAC3Bw5V,cAAe,UAAU1zR,KAAK9lE,Y,UAGjB05V,G,8ECpDf,I,IAAA,MACA,OACA,O,IACA,M,IAEA,Q,IACA,Q,IACA,Q,IACA,S,IACA,QAEA,QACA,Q,IACA,Q,IAEA,Q,IACA,QACA,Q,OACA,Q,mDAEA,IAAME,EAA0C,SAACvnW,GAAU,IAElDsnW,EAAmFtnW,EAAnFsnW,YAAaxsc,EAAsEklG,EAAtEllG,SAAU42D,EAA4DsuC,EAA5DtuC,kBAAmBP,EAAyC6uC,EAAzC7uC,sBAAuBtkD,EAAkBmzF,EAAlBnzF,eAElEggG,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAsB7C,OACE,mCAAUnwG,GAAG,kBACVmwG,EACC,wCACG,SAAC2lM,GAAD,OACC,mCAAUlzN,UAAU,2BAA2BkyF,QAAS,kBAzBjC,SAACghI,GAChC,IAAMrW,EAAe,UAAUrlQ,mBAAmBh8B,EAASC,aAC3D,UAAU86B,eAAe,EAAAwB,6BAA6B0F,qCAAuCo/P,GAE7FmrK,IACA90J,EAAgB13S,GAoBsD0sc,CAAyBh1J,KACrF,uCACE,yCAEF,4CAAkB91S,GAAG,wCAIzB,KACJ,kCAAmB4gU,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,mCAAU90P,UAAU,2BAA2BkyF,QAAS,kBA9BtC,SAAC4iK,GAC7B,IAAMj4C,EAAe,UAAUrlQ,mBAAmBh8B,EAASC,aAC3D,UAAU86B,eAAe,EAAAwB,6BAA6B2F,mCAAqCm/P,GAE3FmrK,IACA51Y,EAAkB,IAClB0iR,EAAmBt5U,EAASE,OAAQF,EAASC,aAC7CqoF,YAAW,WACTjyB,EAAsBr2D,EAASE,UAC9B,KAqBqEysc,CAAsBrzH,KAClF,uCACE,yCAEF,4CAAkB13U,GAAG,0CAUrC6qc,EAAwC3wT,UAAY,CAClD97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,WAC7C25V,YAAa,UAAU7zR,KAAK9lE,YAG9B,IAOMq3E,EAAqB,CACzBnzH,4CACAH,sCACAP,+C,WAGa,IAAAqvC,UAbS,SAACxzG,GAEvB,MAAO,CACL6f,eAFqB7f,EAAMqN,mBAYS2qL,EAAzB,CAA6CuiR,I,8FChG5D,O,OACA,O,IACA,MACA,O,IAEA,Q,IACA,O,IACA,S,IACA,SAEA,QACA,QAEA,Q,WACA,SACA,QACA,Q,mDAEA,IAAMG,EAAsB,SAAC1nW,GAAU,IAE9BllG,EACiBklG,EADjBllG,SAAU2lB,EACOu/E,EADPv/E,uBAAwBknb,EACjB3nW,EADiB2nW,cAAe/nZ,EAChCogD,EADgCpgD,QAASljD,EACzCsjG,EADyCtjG,GAAIyS,EAC7C6wF,EAD6C7wF,KAAM2pT,EACnD94N,EADmD84N,wBACzEtyT,EAAsBw5F,EAAtBx5F,mBAHmC,GAIL,IAAAqvI,UAAS,IAJJ,qBAI9Bh4I,EAJ8B,KAIpB47Y,EAJoB,KAM/BmuD,GAAmB,IAAA9/W,4BAA2BthF,EAAoB1L,EAAWA,EAASC,YAAc,MAEpG8sc,EAAMD,GAAoB9sc,EAASC,aAAeD,EAASC,YAAY1C,UAAU6vF,kBAAoB,EACvGptF,EAASC,YAAY1C,UAAU6vF,kBAC/B,MAKE+4O,EAAiB,SAACC,GACtBu4E,EAAYv4E,KAGd,IAAA7qN,YAAU,WACJv7G,GAAYA,EAASC,YACvBkmU,EAAenmU,EAAS+C,UAAY,GAC3B+hD,GACTqhR,EAAe,MAGhB,CAACrhR,EAASljD,EAAIirc,IAEjB,IAAM3sL,EAAoB,SAACnwR,GAAuB,IAApBs2U,EAAoB,uDAAP,GAEzC,GAAIrmU,EAAS6hJ,gBACX,OAAO,EAGT,IAAI/wJ,EAAQ,GAAKf,EAAEugB,OAAOxf,MAE1B,GAAIA,EAAMiD,SAAS,KAEf,OAAO,GAOXjD,EAAQ0I,SAAS1I,IAAU,IAEdi8c,EACXj8c,EAAQA,EArCA,IAqCoBA,EACnBA,IAAUi8c,IACnBj8c,EAAQi8c,GAGV,IAAM1rK,EAAe,UAAUrlQ,mBAAmBh8B,EAASC,aACrDqmU,EAAkBD,EAAaA,EAAa,IAAMv1U,EAAQ,SAAWA,EAC3E,UAAUiqC,eAAkB,EAAAwB,6BAA6BuF,+BAAiCu/P,EAA1F,IAA0GilC,GAE1GH,EAAer1U,GACVkP,EAAS8kD,SAcZn/B,EAAuB3lB,EAAUlP,IAW9BihH,GAAW,IAAAowB,mBAAXpwB,QAEP,OACE,+BAAKvtB,UAAU,eACb,gCAAMA,UAAU,qBACbutB,EAAU,4CAAkBnwG,GAAG,+BAAiC,mCAAyB5B,SAAUA,KAEtG,+BAAKwkF,UAAU,wBACZsoX,GAAqB/pc,IAAagqc,EACjC,gCAAMvoX,UAAU,iDACd,4CAAkBz0E,OAAQ,CAAChN,SAAU/C,EAASC,YAAY1C,UAAU6vF,mBAAoBxrF,GAAG,gCAE3F,KACJ,mCAAYuhP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iCACnC80K,QAAS,WACPwpG,EAAkB,CAAC5vQ,OAAQ,CAACxf,MAAOiS,EAAW,IAAK,UAErDyhF,UAAU,8BACpB,yCAEF,mCAAWA,UAAW,sBAAwBzhF,IAAagqc,EAAM,2BAA6B,IACnFxya,MAAM,GACN8sN,QAAQ,WACRnqP,KAAK,QACL8H,KAAK,SACLlU,MAAOiS,EACPwjU,QAAQ,yBACRzrO,UAlCO,SAACN,GACvB,GAAgB,MAAZA,EAAMppG,IAER,OADAopG,EAAM7V,kBACC,GAgCM+qI,SAAUwwD,IACrB,mCAAY/8B,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iCACnC86E,SAAU35E,IAAagqc,EACvBr2R,QAAS,WACPwpG,EAAkB,CAAC5vQ,OAAQ,CAACxf,MAAOiS,EAAW,IAAK,SAErDyhF,UAAU,8BACpB,yCAEDw5O,EAAwBjqU,SAASiM,EAAS4B,IACzC,gCAAM4iF,UAAU,+CACd,4CAAkBz0E,OAAQ,CAACiK,MAAOha,EAAS+C,UAAWnB,GAAG,mCAEzD,QAMZgrc,EAAoB9wT,UAAY,CAC9B97I,SAAU,UAAUwzC,MAAV,sBAGZ,IAaM02I,EAAqB,CACzBvkK,iD,WAGa,IAAAg8H,aACb,IAAAj8C,UAlBsB,SAACxzG,EAAOqvP,GAAa,MACErvP,EAAM8J,UAA5CG,EADoC,EACpCA,UAAW6hU,EADyB,EACzBA,wBAElB,MAAO,CACLl5Q,QAASy8L,EAASvhP,SAAS8kD,QAC3BljD,GAAI2/O,EAASvhP,SAAS4B,GACtBirc,cAAetrN,EAASvhP,SAAS+C,SACjC5G,YACA6hU,0BACAtyT,mBAAoBxZ,EAAMqN,gBAAgB+B,YASnB4oL,EAAzB,CAA6C0iR,K,8EC1K/C,I,EAAA,OACA,O,oCACA,OAEA,QACA,QAEA,IAAMI,EAA0B,SAAC9nW,GAAU,IAElCllG,EAAkCklG,EAAlCllG,SAAUqU,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAEjBq2K,GAAc,IAAAh0K,gBAAepU,EAASC,YAAaoU,EAAMtC,EAAgB/R,EAAS+C,UAExF,OADqB,IAAA0R,iBAAgBzU,EAAUqU,IACxB+zK,GAGzB4kR,EAAwBlxT,UAAY,CAClC97I,SAAU,UAAUwzC,MAAV,sB,WASG,IAAAmuG,aACb,IAAAj8C,UAPsB,SAACxzG,GAEvB,MAAO,CACL6f,eAFqB7f,EAAMqN,mBAM7B,CAAyBytc,K,8EC3B3B,I,IAAA,MACA,O,IACA,MACA,OAEA,Q,IACA,S,mDAEA,IAAMC,EAAyB,SAAC/nW,GAAU,IAEjCllG,EAAuBklG,EAAvBllG,SAAU7D,EAAa+oG,EAAb/oG,UACV8D,EAAeD,EAAfC,YAEDyiS,EAAgBvmS,EAAUyE,QAAO,SAAA2E,GACrC,OAAOA,EAAMqoF,sBAAyBroF,EAAMqoF,qBAAqBrwF,UAAUqE,KAAO3B,EAAY1C,UAAUqE,MAM1G,OACE,+BAAK4iF,UAAU,sBACb,8BAAIA,UAAU,iBACXk+M,EAAchhS,KAAI,SAAA1B,GACjB,OAAO,mCAAqBA,SAAUA,EAAU5O,IAAK4O,EAAS4B,GAAIsjQ,eAAe,UAO3F+nM,EAAuBnxT,UAAY,CACjC97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,Y,WAkBhC,IAAA8uC,aACb,IAAAj8C,UAhBsB,SAACxzG,EAAOqvP,GAAa,MACNrvP,EAAM0zG,UAApC7wC,EADoC,EACpCA,aAAcK,EADsB,EACtBA,aACdj5D,EAAajK,EAAM8J,UAAnBG,UACP,MAAO,CACL44D,eACAK,eACAryD,SAAUw+O,EAASvhP,SAAS+C,SAC5B5G,eAIuB,GAKzB,CAA6C8wc,K,8ECnD/C,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,Q,IACA,Q,IACA,SAEA,QACA,QACA,Q,IAKA,Q,IACA,QACA,QACA,S,mDAEA,IAAMC,EAAuB,SAAChoW,GAAU,IAE/BllG,EAAuGklG,EAAvGllG,SAAUqU,EAA6F6wF,EAA7F7wF,KAAM2R,EAAuFk/E,EAAvFl/E,kBAAmB4wC,EAAoEsuC,EAApEtuC,kBAAmBP,EAAiD6uC,EAAjD7uC,sBAAuBy0G,EAA0B5lE,EAA1B4lE,uBAmBpF,OACE,+BAAKtmF,UAAU,uBACZ,EAAAhvF,mBACC,kCAAmBgtU,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,mCAAYn2F,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,sBACnC4iF,UAAU,wDACVkyF,QAAS,kBArBL,SAAC4iK,GAC7B,GAAIt5U,EAASgB,UACX,OAAO,EAET41D,EAAkB,IAClB0iR,EAAmBt5U,EAASE,OAAQF,EAASC,aAC7CqoF,YAAW,WACTjyB,EAAsBr2D,EAASE,QAC/B4qK,EAAuB9qK,KACtB,KAYoC2sc,CAAsBrzH,KAC/C,+CAMR,KACJ,mCAAYn2F,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,sBACnC4iF,UAAU,6BACVkyF,QApCc,WAC5B12K,EAASgB,WAAahB,EAASgB,UAC/BglB,EAAkBhmB,KAmCbA,EAASgB,UAAY,wCAA0B,2CAMxDksc,EAAqBpxT,UAAY,CAC/B97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,WAC7C7xG,UAAW,UAAUg7I,MAGvB,IAMMkuC,EAAqB,CACzB5yH,sCACAV,sCACAP,8CACArwC,sCACA8kJ,iD,WAGa,IAAAnpB,aACb,IAAAj8C,UAfsB,WACtB,MAAO,KAckBwkF,EAAzB,CAA6CgjR,K,kGCzF/C,MACA,O,IACA,M,IAEA,QAEA,QACA,SACA,Q,0DAGA,IAAMC,EAA8B,SAACjoW,GAAU,IAEtCllG,EAAsDklG,EAAtDllG,SAAU2+H,EAA4Cz5B,EAA5Cy5B,mBAAoB39H,EAAwBkkG,EAAxBlkG,UAAW7E,EAAa+oG,EAAb/oG,UAEhD,GAAI6D,EAAS4tF,qBACX,OAAO,KAiBT,OAAO,mCAAUpJ,UAAU,uBAAuB8qI,SAAUtuN,EAAW0uN,SAdjD,WACpB,IAAM2xE,EAAe,UAAUrlQ,mBAAmBh8B,EAASC,aAC3D,UAAU86B,eAAkB,EAAAwB,6BAA6BsF,uBAAyBw/P,EAAlF,KAAkGrgS,EAAY,QAAU,YAExH,IAAMyjB,EAAeA,GAAfA,qBAAmBtoB,EAAUuF,KAAI,SAAA6D,GAKrC,OAJKA,EAAMtF,YAAY1C,UAAUqE,KAAO5B,EAASC,YAAY1C,UAAUqE,IACjE2D,EAAMqoF,sBAAyBroF,EAAMqoF,qBAAqBrwF,UAAUqE,KAAO5B,EAASC,YAAY1C,UAAUqE,MAC9G2D,EAAMvE,WAAaA,GAEduE,OAETo5H,EAAmBl6G,OAMvB0ob,EAA4BrxT,UAAY,CACtC97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,YAG/C,IAQMq3E,EAAqB,CACzBvrD,yC,WAGa,IAAAj5B,UAZS,SAACxzG,EAAOqvP,GAAa,IACpCplP,EAAajK,EAAM8J,UAAnBG,UACP,MAAO,CACL6E,UAAWugP,EAASvhP,SAASgB,UAC7B7E,eAQoC+tL,EAAzB,CAA6CijR,I,8ECpD5D,I,IAAA,MACA,O,IACA,MACA,OAEA,Q,IACA,QACA,QACA,S,mDAGA,IAAMC,EAA8B,SAACloW,GAAU,IAEtCllG,EAAuEklG,EAAvEllG,SAAUlE,EAA6DopG,EAA7DppG,aAAc4P,EAA+Cw5F,EAA/Cx5F,mBAAoBsa,EAA2Bk/E,EAA3Bl/E,kBAAmB3R,EAAQ6wF,EAAR7wF,KAEhEo+F,GAAe,IAAA3uG,yBAAwB9D,GAC7C,IAAKyyG,EACH,OAAO,KAGT,IAAM46V,EAAkBvxc,EAAa4J,MAAK,SAAA4nc,GACxC,SAAKttc,EAASC,cAAgBD,EAASC,YAAY1C,YAG5C+vc,EAAez8b,cAAgB7Q,EAASC,YAAY1C,UAAUqE,MAGvE,IAAKyrc,IAAoBA,EAAgB3oT,UAAY2oT,EAAgB3oT,QAAQr2J,OAC3E,OAAO,oCAAO2R,EAASgiJ,aAAhB,KAAgChiJ,EAASyyG,cAGlD,IAUMkiG,EAAc04P,EAAgB3oT,QAAQhjJ,KAAI,SAAAo4E,GAC9C,IAAMx9E,EAAO0H,KAAKyI,MAAoB,IAAdqtE,EAAOx9E,MAAc,IAC7C,MAAO,CACL4f,KAAM,GACNqe,MAAOj+B,EACHoP,EAAmBgC,aAAepR,EAClC+X,EAAKC,cAAc,CAAC1S,GAAI,2BAC5B9Q,MAAOwL,EACPjM,KAAMypF,EAAOhqC,MACbsxR,QAAStnP,EAAOhqC,OAASgqC,EAAO59E,WAAa49E,EAAOhqC,MAAQ,KAAOgqC,EAAO59E,SAAW,IAAM,IAAM,QAI/FwkU,EAAe/rH,EAAYjvM,MAAK,SAAAmlE,GAAA,OAAQA,EAAK/5E,QAAU2hH,MAAiBkiG,EAAY,GAE1F,OACE,mCAAcnwH,UAAU,oBACVo8O,YAAaF,EAAanmS,MAC1Bo6K,YAAaA,EACb+rH,aAAcA,EACdC,gBA9BQ,SAACrlC,GACvB,IAAMp/R,EAAWmxc,EAAgB3oT,QAAQh/I,MAAK,SAAAmlE,GAAA,OAAQA,EAAKvuE,OAASg/R,EAAWxqS,OAAS+5E,EAAK/6B,QAAUwrP,EAAWjrS,QAClH21B,EAAkB13B,OAAO+2B,OAAO,GAAIrlB,EAAU,CAC5CyyG,aAAc6oL,EAAWxqS,MACzBkxJ,aAAcs5I,EAAWjrS,KACzB4xJ,aAAc/lJ,EAASA,SACvBonS,aAAcpnS,EAAS6+F,YA4B7BqyW,EAA4BtxT,UAAY,CACtC97I,SAAU,UAAUwzC,MAAV,qBAAmCq/D,YAG/C,IAUMq3E,EAAqB,CACzBlkK,uC,WAGa,IAAA27H,aACb,IAAAj8C,UAfsB,SAACxzG,GAIvB,MAAO,CACL4J,aAJqB5J,EAAM8J,UAAtBF,aAKL4P,mBAJiBxZ,EAAMqN,gBAAlB+B,YAakB4oL,EAAzB,CAA6CkjR,K,8ECpF/C,aACA,S,UAEoC,SAACloW,GAWnC,OAAOk1C,EATYl1C,EAAZk1C,WAEyB,YAC9B,IAAA09J,qBAAoB,CAClB,UAAa,EAAAjzC,4BAA4BE,aACzC,UAAY,S,8ECVlB,I,IAAA,MACA,OACA,Q,IAEA,S,IACA,S,IACA,SACA,QACA,Q,IACA,OACA,U,mDAEA,IA+CM76E,EAAqB,CACzBtzH,uC,WAGa,IAAAuzH,aACb,IAAAzkF,UAbsB,SAACxzG,GAAU,MACkBA,EAAMgR,YAAlDkiG,EAD0B,EAC1BA,kBAAmBo2E,EADO,EACPA,sBAC1B,MAAO,CACLlgE,wBAAyBlW,EAAkB/2G,OAC3CmtL,2BASuB0O,EAAzB,EApDiB,SAAChlF,GAAU,IAErBtuC,EAAoEsuC,EAApEtuC,kBAAmByzH,EAAiDnlF,EAAjDmlF,QAASkb,EAAwCrgG,EAAxCqgG,YAAajqF,EAA2BpW,EAA3BoW,wBAY1C8/B,GAAiB,IAAAs2P,iCAEjBvN,EAAkB,WACtBvtU,EAAkB,IAClB2uI,GAAY,WACLxzM,OAAO2B,SAASwb,KAAKnb,SAAS,UAAahC,OAAO2B,SAASwb,KAAKnb,SAAS,SAC5Es2L,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,UAK1B,OACE,+BAAKpZ,UAAU,MACb,+BAAKA,UAAU,kDACb,wCACE82B,GAA4B8/B,EAExB,mCAAgB+oP,gBAAiBA,IADjC,+BAAK3/S,UAAU,WAAU,0CAIjC,mCAAa2/S,gBAAiBA,U,8EC9CpC,I,EAAA,O,oCACA,OACA,O,WAqCe,IAAAxiP,aACb,IAAAj8C,UAVsB,WACtB,MAAO,KAKkB,GAIzB,EAnCuB,WAQvB,OACE,kCAAQlhB,UAAU,aAChB,+BAAKA,UAAU,mBACb,8BAAIA,UAAU,YACZ,4CAAkB5iF,GAAG,8BAEvB,8BAAI4iF,UAAU,gBACZ,4CAAkB5iF,GAAG,kCAGzB,+BAAK4iF,UAAU,2B,6FCvBrB,O,WACA,O,IACA,M,IAEA,Q,IACA,Q,IAEA,O,IACA,OAEA,Q,IACA,S,IACA,O,mDAEA,IAAM+oX,EAAiB,SAACroW,GAAU,IAEzBi/R,EAAmBj/R,EAAnBi/R,gBAFyB,GAIN,IAAAppP,UAAS,IAJH,qBAIzByyT,EAJyB,KAIlBC,EAJkB,QAKY,IAAA1yT,WAAS,GALrB,qBAKzB2yT,EALyB,KAKTC,EALS,QAMR,IAAA/qD,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GANuB,qBAQ1BgxP,EAAa,WACjBhxP,EAAY,IAYd,IATA,IAAArhG,YAAU,WAGR,OAFAkyV,GAAS,IAAAl/V,oBACT,aAAEx8G,QAAQwqG,GAAG,UAAY6yB,cAAew+U,GACjC,YACL,aAAE77c,QAAQ8gO,IAAI,UAAYzjG,cAAew+U,MAG1C,KAEEJ,EAAMn/c,OACT,OACE,+BAAKm2F,UAAU,WACb,yCAUN,OACE,+BAAKA,UAAU,WACZ,UAAO9pF,yBACN,iCACE,mCACE6/B,MAAO,6BACPiqD,UAAU,kBACVgrI,QAAS,mCAAUF,QAASo+O,EAAgBh+O,SAZhC,SAACl1H,GACrBmzW,EAAkBnzW,EAAMlqF,OAAOg/M,SAC/Bm+O,GAAS,IAAAl/V,gBAAe/T,EAAMlqF,OAAOg/M,gBAa/B,KACJ,8BAAI9qI,UAAU,cAEXgpX,EAAM9rc,KAAI,SAAC7M,EAAMg5c,GAChB,OAAO,mCAAgBz8c,IAAKy8c,EAAWh5c,KAAMA,EAAMsvY,gBAAiBA,UAO9EopE,EAAezxT,UAAY,CACzBqoP,gBAAiB,UAAUxrN,KAAK9lE,Y,UAGnB06V,G,mHCzEf,O,WACA,MACA,OACA,O,IAEA,OACA,SACA,QACA,QACA,QACA,QACA,SAEA,Q,0DAEA,IAAMO,EAAiB,SAAC5oW,GAAU,IAEzBrwG,EAAoFqwG,EAApFrwG,KAAM0/S,EAA8ErvM,EAA9EqvM,UAAWx9O,EAAmEmuC,EAAnEnuC,qBAAsBI,EAA6C+tC,EAA7C/tC,yBAA0BgtU,EAAmBj/R,EAAnBi/R,gBAClEnqP,GAAY,IAAAF,gBAEZhlI,GAAS,IAAAC,oBACT/P,EAAO8P,EAAOynN,YAAY1nO,EAAKg6G,YANL,GAOQ,IAAAksC,UACtCjmI,EAAO8qR,kBAAoB9qR,EAAO8qR,iBAAiB/qS,EAAKg6G,YAAc/5F,EAAO8qR,iBAAiB/qS,EAAKg6G,YAAc,IARnF,qBAOzBpxG,EAPyB,KAOXiwM,EAPW,KAU1B36C,EAAW/tJ,IAAS8P,EAAO9P,MAAQ8P,EAAOkZ,QAAUn5B,EAAKi6G,UAwC/D,OAvBA,IAAAyM,YAAU,WAEN,IAAM,EADH99G,EAiBOA,GACViwM,qDAjBM,gCAAqB,+FACnBx/K,EAAa6kI,EAAWj+I,GAAS,IAAAgZ,kBAAiBhZ,EAAQjgB,EAAKg6G,WAAYh6G,EAAKi6G,WACjFikD,EAFoB,uBAGjBk7D,EAAen5M,EAAOq0F,2BAA0B,GAAM,GAAO,GAH5C,SAIjBj7E,EAAWggM,aAAalpN,EAAM8P,EAAO9P,KAAMipN,EAAcp5N,EAAKi6G,UAAW,MAAM,GAJ9D,QAMzB,IAAAytE,2BAA0BruJ,GACvBzC,MAAK,SAAAswE,GAEAi+C,KACF0zD,EAAgB3xG,MAVG,kDAArB,4CAeai+C,KAIpB,IAECu6J,EACK,+BAAK57S,IAAK8E,EAAc+mF,UAAU,eAAespH,IAAI,cAI5D,8BAAItpH,UAAU,oBAAoBkyF,QAAS,kBA1CrCq3R,EAAiBA,eAAe/oc,EAAhC,UAA8CnQ,EAAKi6G,UACzD,UAAU/zE,eAAe,EAAAwB,6BAA6B2D,SAAW6ta,QAC5Dh7S,EAQHoxO,KAPAptU,EAAqB,EAAAzgC,cAAcQ,cACnCqgC,EAAyB,CACvBm8I,cAAetuM,EACfq5X,SAAUxpY,EAAKi6G,UACfwvR,cAAe,OARS,IACtByvE,IA2CJ,+BAAKvpX,UAAW,aAAeuuE,EAAW,qBAAuB,KAC/D,+BAAKvuE,UAAW,wBAA2B/mF,EAAkD,GAAnC,mCACvDA,EAAe,+BAAK9E,IAAK8E,EAAc+mF,UAAU,6BAA6BspH,IAAI,cAAgB,yCAErG,+BAAKtpH,UAAU,sBAKb,+BAAKA,UAAU,kCACb,gCAAMA,UAAU,uCACd,4CAAkB5iF,GAAG,4BADvB,IACoD/M,EAAKg6G,YAEzD,gCAAMrqB,UAAU,uCACd,4CAAkB5iF,GAAG,2BADvB,IACmD/M,EAAKi6G,gBASpEg/V,EAAehyT,UAAY,CACzBjnJ,KAAM,UAAUtD,OAAOshH,WACvBsxR,gBAAiB,UAAUxrN,KAAK9lE,WAChCx4G,SAAU,UAAU2hJ,KACpBu4J,UAAW,UAAUv4J,MAGvB,IAKMkuC,EAAqB,CACzBnzH,4CACAI,qD,WAGa,IAAAuuC,UAVS,WACtB,MAAO,KAS+BwkF,EAAzB,CAA6C4jR,I,8EC/G5D,W,OACA,OACA,OACA,Q,IAEA,Q,IACA,O,IACA,OAEA,QACA,Q,OACA,QACA,Q,IACA,QACA,QACA,Q,0DAEA,IA+DM5jR,EAAqB,CACzBtzH,sCACAgB,qC,WAGa,IAAAuyH,aACb,IAAAxoC,aACE,IAAAj8C,UApBoB,SAACxzG,GAAU,IAC1B0L,EAAe1L,EAAMgR,YAArBtF,YAD0B,EAEG1L,EAAM0zG,UAG1C,MAAO,CACLhoG,cACAi5D,eAP+B,EAE1BA,eAMLgB,UAR+B,EAEVA,UAOrB12C,aANqBjvB,EAAMouB,wBAAtBa,gBAiBoB+oK,EAAzB,EAtE4B,SAAChlF,GAAU,IAElC7wF,EAC4D6wF,EAD5D7wF,KAAMwiD,EACsDquC,EADtDruC,eAAgBj5D,EACsCsnG,EADtCtnG,YAAaumY,EACyBj/R,EADzBi/R,gBAAiBvtU,EACQsuC,EADRtuC,kBAAmByzH,EACXnlF,EADWmlF,QAAS3tG,EACpBwoB,EADoBxoB,SAAU7kB,EAC9BqtC,EAD8BrtC,UAC/FD,EAAiEstC,EAAjEttC,iBAAkB4sU,EAA+Ct/R,EAA/Cs/R,qBAAsBC,EAAyBv/R,EAAzBu/R,sBACpC9/F,GAAY,IAAA9qJ,QAAO,MAEzB,IAAK4qP,EACH,OAAO,KAGT,IAAMupE,EAAiBn3Y,IAAmB,EAAA1nD,OAAOkqB,KAiB3C40a,EAAevxX,MAAe7kB,GAAcA,IAAc,EAAAhgC,iBAAiBE,iBAEjF,OACE,8BAAIysD,UAAU,2BACZ,mCAAS10C,MAAOz7B,EAAKC,cAAc,CAAC1S,GAAG,wBAAyBgjS,UAAU,SACxE,mCAAYzhD,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,wBACnCg4I,IAAK+qJ,EACLjoN,SAAUuxX,EACVzpX,UAAW,kCAAoCwpX,EAAiB,qBAAuB,KAClFn2Y,IAAc,EAAAhgC,iBAAiBE,gBAAkB,+BAAiC,IACvF2+I,QAzBQ,WAExB,GADA,UAAU37I,eAAe,EAAAwB,6BAA6BM,kBAClDg7B,IAAc,EAAAhgC,iBAAiBE,gBAEjC,OADA6/B,EAAiBC,EAAY,IACtB,EAELhB,GAAkBstU,EACpBA,KAEAvtU,EAAkB,EAAAznD,OAAOkqB,MACzBgxJ,EAAQ17L,KAAK,EAAAwgB,OAAOkqB,OAEtBmrW,MAcM,uCACE,0CAAgBn/R,MACd4oW,EAAe,sBAAwBD,EAAiB,EAAA1oW,OAAOC,MAAQ,UAAa3nG,GAAa6wH,aAKzG,mCAAiBk2K,UAAWA,EAAWzmK,YAAa,EAAArmG,iBAAiBE,yB,+EC9D3E,W,OACA,OACA,O,IAEA,Q,IACA,O,IACA,SAEA,QACA,QACA,Q,IACA,Q,IACA,QACA,Q,OACA,Q,mDAEA,IAuEMmyJ,EAAqB,CACzBnzH,4CACAa,qC,WAGa,IAAA+pF,aACb,IAAAj8C,UArBsB,SAACxzG,GAAU,IAC1B0L,EAAe1L,EAAMgR,YAArBtF,YAD0B,EAEK1L,EAAM0zG,UAI5C,MAAO,CACLhoG,cACAswc,iBAR+B,EAE1BA,iBAOLr2Y,UAT+B,EAERA,UAQvBj0C,eAPuB1xB,EAAMwc,UAAxBkV,eAQL7R,eAPqB7f,EAAMqN,mBAiBJ2qL,EAAzB,EA7E4B,SAAChlF,GAAU,IAEhC7wF,EAC6B6wF,EAD7B7wF,KAAMwiD,EACuBquC,EADvBruC,eAAgBE,EACOmuC,EADPnuC,qBAAsB2lB,EACfwoB,EADexoB,SAAU7kB,EACzBqtC,EADyBrtC,UAAWD,EACpCstC,EADoCttC,iBAAkB4sU,EACtDt/R,EADsDs/R,qBACxF5gX,EAAkCshF,EAAlCthF,eAAgB7R,EAAkBmzF,EAAlBnzF,eACZ4yR,GAAY,IAAA9qJ,QAAO,MAEnB9nC,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAE7C,GAAIhgG,EAAe2nI,QACjB,OAAO,KAGT,IAAMy0T,EAAct3Y,IAAmB,EAAA1nD,OAAOmqB,MAiBxC20a,EAAevxX,MAAe7kB,GAAcA,IAAc,EAAAhgC,iBAAiBI,aAC3Em2a,EAAer8V,EAAU,mBAAqB,eAEpD,OACE,8BAAIvtB,UAAU,2BACZ,mCAAS10C,MAAOz7B,EAAKC,cAAc,CAAC1S,GAAIwsc,IAAgBxpK,UAAU,SAChE,+BAAKpgN,UAAU,mCACb,wCACG,SAACkzN,GAAD,OACC,mCAAYv0D,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAIwsc,IACpCx0T,IAAK+qJ,EACLjoN,SAAUuxX,EACVzvK,UAAQ,cACRh6M,UAAW,kCAAoC2pX,EAAc,qBAAuB,KAC/Et2Y,IAAc,EAAAhgC,iBAAiBI,YAAc,+BAAiC,IACnFy+I,QAAS,kBA9BL,SAACghI,GAE3B,GADA,UAAU38Q,eAAe,EAAAwB,6BAA6BQ,iBAClD86B,IAAc,EAAAhgC,iBAAiBI,YAEjC,OADA2/B,EAAiBC,EAAY,IACtB,EAELj0C,EACF8zR,IAEA3gP,EAAqBg7C,EAAU,EAAAz7E,cAAcM,cAAgB,EAAAN,cAAckB,aAE7EgtW,IACA5yY,QAAQ4B,IAAI,eAAgBzB,OAAO67G,cAkBEygW,CAAoB32J,KAC7C,8CAMV,mCAAiB/S,UAAWA,EAAWzmK,YAAa,EAAArmG,iBAAiBI,oB,8ECnE3E,W,OACA,OACA,OACA,Q,IAEA,Q,IACA,OAEA,Q,IAMA,Q,IACA,QACA,QACA,Q,IACA,S,IACA,SACA,Q,OACA,QACA,Q,mDAEA,IAoFMiyJ,EAAqB,CACzBv1H,8BACAiD,oCACA5C,sCACA8D,oDACAlC,uC,WAGa,IAAAuzH,aACb,IAAAxoC,aACE,IAAAj8C,UAxBoB,SAACxzG,GAAU,MACKA,EAAMgR,YAArCkiG,EAD0B,EAC1BA,kBAAmB/qG,EADO,EACPA,SADO,EAE+BnI,EAAM0zG,UAEtE,MAAO,CACLhxC,WAL+B,EAE1BA,WAILiC,eAN+B,EAEdA,eAKjBgB,UAP+B,EAEEA,UAMjC5C,eAR+B,EAEaA,eAO5CqmD,wBAAyBlW,EAAkB/2G,OAC3CgM,cAcyB6vL,EAAzB,EA9F0B,SAAChlF,GAAU,IAEhC7wF,EAE0B6wF,EAF1B7wF,KAAMugD,EAEoBswC,EAFpBtwC,WAAYD,EAEQuwC,EAFRvwC,cAAewvU,EAEPj/R,EAFOi/R,gBAAiBznT,EAExBwoB,EAFwBxoB,SAAU7kB,EAElCqtC,EAFkCrtC,UAAWD,EAE7CstC,EAF6CttC,iBAAkB4sU,EAE/Dt/R,EAF+Ds/R,qBAC9FvvU,EAC+BiwC,EAD/BjwC,eAAgBD,EACekwC,EADflwC,kBAAmBsmD,EACJpW,EADIoW,wBAAyBxiD,EAC7BosC,EAD6BpsC,yBAA0BuxH,EACvDnlF,EADuDmlF,QAASxzH,EAChEquC,EADgEruC,eAC/FD,EAA+BsuC,EAA/BtuC,kBAAmBv8D,EAAY6qG,EAAZ7qG,SACfsqS,GAAY,IAAA9qJ,QAAO,MAEnBy0T,EAAkBj0c,EAAW,EAAA89B,wBAAwBH,cAAgB,EAAAH,iBAAiBG,cAoCtFi2a,EAAevxX,MAAe7kB,GAAcA,IAAcy2Y,GAEhE,OACE,8BAAI9pX,UAAU,2BACZ,mCAAS10C,MAAOz7B,EAAKC,cAAc,CAAC1S,GAAG,qBAAsBgjS,UAAU,SACrE,mCAAYzhD,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnCg4I,IAAK+qJ,EACLjoN,SAAUuxX,EACVzpX,UAAW,kCAAoC5vB,EAAa,qBAAuB,KAC9EiD,IAAcy2Y,EAAkB,+BAAiC,IACtE53R,QA5CM,WAEtB,GADA,UAAU37I,eAAe,EAAAwB,6BAA6BK,kBACjD0+E,EACH,OAAO,EAET,GAAIzjD,IAAcy2Y,EAEhB,OADA12Y,EAAiBC,EAAY,IACtB,EAcT,GAZAlD,EAAcC,EAAa,KAAO,EAAA9+B,kBAAkBC,MAC/C6+B,GACHkE,GAAyB,IAEvBlE,GAAciC,KACZA,GACFD,EAAkB,IAClByzH,EAAQ17L,MAAK,IAAAw/F,kBAEbk8F,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAGnBhpC,IAAeK,EAAe5mE,OAAQ,CACzC,IACMwqF,GADS,IAAA9jE,oBACYg1F,mBAAkB,GACzClxB,EAAY,IACd7jB,EAAkB6jB,EAAY,GAAG34E,QAGjCikY,GACFA,IAEFK,MAcM,0CAIJ,mCAAiB7/F,UAAWA,EACXzmK,YAAaowU,EACbzpK,YAAa,6BAC7BF,EACC,wCACG,SAAC4pK,GAAD,OAAgB,mCAA6B5pK,UAAWA,EAAW4pK,WAAYA,IAAe35Y,OAE/F,Y,iGCzFV,M,IACA,MACA,O,IAEA,Q,IACA,Q,mDAEA,IAAM45Y,EAA8B,SAACtpW,GAAU,IAEtC0/L,EAAoC1/L,EAApC0/L,UAAWD,EAAyBz/L,EAAzBy/L,UAAW4pK,EAAcrpW,EAAdqpW,WAE7B,OAAK5pK,EAKH,mCAAQ/zM,KAAM29W,EACN/pX,UAAW,6CAA+CogN,EAC1DG,SAAUJ,EAAUv2L,QACpBw2L,UAAWA,EACXI,YAAA,EACAC,eAAA,IACL,gBAAGC,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAA+B,UAAdP,EAAwB,eAAiB,iBAEnE,+BAAKpgN,UAAU,sBACb,gCAAMA,UAAW,oDAAsDogN,GACnE,4CAAkBhjS,GAAG,mCAjB1B,MA0BX4sc,EAA4B1yT,UAAY,CACtC6oJ,UAAW,UAAUpzS,OAAOshH,WAC5B+xL,UAAW,UAAUxoQ,QAGvBoya,EAA4B31R,aAAe,CACzC+rH,UAAW,S,UAGE4pK,G,gIC/Cf,OACA,OACA,QAIA,IA2EMtkR,EAAqB,CACzBpxH,yBA/EF,MA+EEA,0B,WAGa,IAAA4sC,UA1BS,SAACxzG,GAAU,MACsEA,EAAM0zG,UAAtGztC,EAD0B,EAC1BA,YAAavD,EADa,EACbA,WAAYiD,EADC,EACDA,UAAWb,EADV,EACUA,kBAAmBH,EAD7B,EAC6BA,eAAgBkC,EAD7C,EAC6CA,sBAD7C,EAEkC7mE,EAAMouB,wBAAlEqB,EAF0B,EAE1BA,iBAAkBR,EAFQ,EAERA,aAAc47L,EAFN,EAEMA,YAAaj7L,EAFnB,EAEmBA,YAFnB,EAGgC5vB,EAAMgR,YACvE,MAAO,CACL20D,YACAb,oBACAmB,cACAvD,aACAjzC,mBACApH,YAV+B,EAG1BA,YAQLO,aAX+B,EAGbA,aASlBsqF,kBAZ+B,EAGCA,kBAUhCjkF,eACA47L,cACAlmJ,iBACA/0C,cACAi3C,wBACA1+D,SAlB+B,EAGoBA,YAuBf6vL,EAAzB,EA/EM,SAAChlF,GAAU,IAEvBtwC,EACwDswC,EADxDtwC,WAAYuD,EAC4C+sC,EAD5C/sC,YAAaN,EAC+BqtC,EAD/BrtC,UAAWb,EACoBkuC,EADpBluC,kBAAmBH,EACCquC,EADDruC,eAAgBuuC,EACfF,EADeE,kBAAmBg1C,EAClCl1C,EADkCk1C,SAAUt4H,EAC5CojF,EAD4CpjF,YACzGi3C,EAA6DmsC,EAA7DnsC,sBAAuBD,EAAsCosC,EAAtCpsC,yBAA0Bz+D,EAAY6qG,EAAZ7qG,SAHrB,GAIM,IAAA0gJ,WAAS,GAJf,qBAIvBwzT,EAJuB,KAIXE,EAJW,KAKxBz0T,GAAY,IAAAF,gBAyClB,OArCA,IAAAv+B,YAAU,WACR,IAAIn0F,SACA2xC,IACF3xC,IAASwtC,GAAcuD,EAAYmyC,QAAUxoF,EAAc,GAC3D2sb,EAAcrnb,IAEZA,GAAQ2xC,IACVhnE,OAAOwpJ,aATK,GAUZxpJ,OAAOu2F,YAAW,WACZ0xD,KACFy0T,GAAc,KAEfp0c,EAAW,KAAO,QAGtB,CAACu6D,EAAYuD,EAAYmyC,OAAQxoF,EAAai3C,KAEjD,IAAAwiD,YAAU,WAMR,OALIlhH,GACFtI,OAAOu2F,YAAW,WAChBxvB,GAAyB,KACxB,KAEE,WACL/mE,OAAOwpJ,aA1BK,MA6Bb,KAEH,IAAAhgC,YAAU,YACHxiD,GAA0Bj3C,EAAc,GAC3Cg3C,GAAyB,KAG1B,CAACh3C,IAGA+1C,GAAab,GAAqBH,IAAmBuuC,EAAkB/2G,OAClE,KAGF+rJ,EAASm0T,O,8ECxDlB,W,OACA,OACA,OACA,Q,IAEA,Q,IACA,O,IACA,SAEA,QACA,Q,IACA,Q,IACA,SACA,QACA,Q,0DAEA,IA0DMrkR,EAAqB,CACzBv1H,8BACAc,8CACAmC,qC,WAGa,IAAAuyH,aACb,IAAAxoC,aACE,IAAAj8C,UAnBoB,SAACxzG,GAAU,MACmBA,EAAM0zG,UAE1D,MAAO,CACLhxC,WAJ+B,EAC1BA,WAILiD,UAL+B,EACdA,UAKjBnC,mBAN+B,EACHA,mBAM5Br7D,SALiBnI,EAAMgR,YAAlB7I,YAiBoB6vL,EAAzB,EAlE0B,SAAChlF,GAAU,IAEhC7wF,EACgD6wF,EADhD7wF,KAAMugD,EAC0CswC,EAD1CtwC,WAAYD,EAC8BuwC,EAD9BvwC,cAAec,EACeyvC,EADfzvC,sBAAuBC,EACRwvC,EADQxvC,mBAAoB20H,EAC5BnlF,EAD4BmlF,QAAS3tG,EACrCwoB,EADqCxoB,SAAUriF,EAC/C6qG,EAD+C7qG,SACpGw9D,EAAqDqtC,EAArDrtC,UAAWD,EAA0CstC,EAA1CttC,iBAAkB4sU,EAAwBt/R,EAAxBs/R,qBACzB7/F,GAAY,IAAA9qJ,QAAO,MAgBnBo0T,EAAevxX,MAAe7kB,GAAcA,IAAc,EAAAhgC,iBAAiBI,aAEjF,OACE,8BAAIusD,UAAU,2BACZ,mCAAS10C,MAAOz7B,EAAKC,cAAc,CAAC1S,GAAG,sBAAuBgjS,UAAU,SACtE,mCAAYzhD,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,sBACnCg4I,IAAK+qJ,EACLjoN,SAAUuxX,EACVS,mBAAkB,gBAClBlqX,UAAW,kCAAoC9uB,EAAqB,qBAAuB,KACtFmC,IAAc,EAAAhgC,iBAAiBI,YAAc,+BAAiC,IACnFy+I,QAzBO,WAEvB,GADA,UAAU37I,eAAe,EAAAwB,6BAA6BS,iBAClD66B,IAAc,EAAAhgC,iBAAiBI,YAEjC,OADA2/B,EAAiBC,EAAY,IACtB,EAELjD,IACFD,EAAc,MACd01H,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,OAEtBnoC,GAAuBC,GACvB8uU,MAeM,0CAIJ,mCAAiB7/F,UAAWA,EACXzmK,YAAa,EAAArmG,iBAAiBI,YAC9BusD,UAAU,mBACVqgN,YAAaxqS,oBACS,EAAAw9B,iBAAiBI,YAD1B,0CAES,EAAAJ,iBAAiBI,YAF1B,mBAG9B,mCAAkB8sQ,SAAUJ,W,wGC1DlC,O,OACA,OACA,O,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,S,IACA,SAGA,Q,IACA,OACA,Q,IACA,SACA,Q,0DAEA,IAyGMz6G,EAAqB,CACzBz0H,8CACAsB,4CACAa,qC,WAGa,IAAA8tC,UAlBS,SAACxzG,GAAU,MACaA,EAAMgR,YAA7C4X,EAD0B,EAC1BA,aAAcld,EADY,EACZA,YAAavD,EADD,EACCA,SADD,EAEOnI,EAAM0zG,UAC9C,MAAO,CACLlwC,mBAJ+B,EAE1BA,mBAGLmC,UAL+B,EAENA,UAIzBj6D,cACAkd,eACAzgB,cAUoC6vL,EAAzB,EA/GU,SAAChlF,GAAU,IAE3BxvC,EAC0BwvC,EAD1BxvC,mBAAoBD,EACMyvC,EADNzvC,sBAAuBsvO,EACjB7/L,EADiB6/L,SAAUnnS,EAC3BsnG,EAD2BtnG,YAAakd,EACxCoqF,EADwCpqF,aAAci8C,EACtDmuC,EADsDnuC,qBAAsB18D,EAC5E6qG,EAD4E7qG,SAC3Gw9D,EAA+BqtC,EAA/BrtC,UAAWD,EAAoBstC,EAApBttC,iBACP+sO,GAAY,IAAA9qJ,QAAO,MAJS,GAKc,IAAAkB,WAAS,GALvB,qBAK3B4zT,EAL2B,KAKTC,EALS,MAOlC,IAAArzV,YAAU,YACH7lD,GAAsBi5Y,GACzBC,GAAoB,KAGrB,CAACl5Y,IAEJ,IAAM4oO,EAAc,SAAC9jM,GACfA,GAASuqM,EAAS32L,SAAW22L,EAAS32L,QAAQosC,SAAShgD,EAAMlqF,UAG7Dq+b,GACFC,GAAoB,GAEtBn5Y,GAAsB,KAGlBo5Y,EAAa,WAEjB,GADA,UAAU9za,eAAe,EAAAwB,6BAA6BU,kBAClD46B,IAAc,EAAAhgC,iBAAiBI,YAEjC,OADA2/B,EAAiBC,EAAY,IACtB,EAET+2Y,GAAqBD,IAGjBG,EAAiB,SAACt0W,GAEtB,GADA,UAAUz/D,eAAe,EAAAwB,6BAA6BW,kBAClD26B,IAAc,EAAAhgC,iBAAiBI,YAEjC,OADA2/B,EAAiBC,EAAY,IACtB,EAETymO,EAAY9jM,GACZzjC,EAAqB,EAAAzgC,cAAcI,QAOrC,OACE,mCAAQk6D,KAAMl7B,IAAwBr7D,GAAaw9D,IAAc,EAAAhgC,iBAAiBI,YAC1EusD,UAAU,sBACV5iF,GAAI,gBACJmjS,SAAUA,EAAS32L,QACnBw2L,UAAW9pR,EAAe,IAAM,YAAc,cAC9CkqR,YAAA,EACAC,cAAe5qS,IACpB,gBAAG6qS,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB,iBAE1B,mCAAOvrJ,IAAK+qJ,GACV,mCAAmBi4B,YAAat+B,GAC9B,mCAAUC,cAAe7oO,EAAoB9zD,GAAG,kBAC9C,mCAAU4iF,UAAU,2BAA2BkyF,QAASm4R,GACtD,uCACE,mCAAW5gc,MAAO,CAAEo3F,MAAO,UAAaznG,GAAa6wH,YAEvD,4CAAkB7sH,GAAG,wBAEvB,mCAAU4iF,UAAU,2BAA2BkyF,QAASo4R,GACtD,uCACE,mCAAU7gc,MAAO,CAAEo3F,MAAO,UAAaznG,GAAa6wH,YAEtD,4CAAkB7sH,GAAG,8BAU3B,mCAAuBmjS,SAAUJ,EACVgqK,iBAAkBA,EAClBrwK,YAAaA,a,kGC1GhD,M,IACA,MACA,O,IAEA,Q,IACA,Q,IACA,Q,IAEA,Q,mDAEA,IAAMywK,EAAwB,SAAC7pW,GAAU,IAEhCo5L,EAAyDp5L,EAAzDo5L,YAAaqwK,EAA4CzpW,EAA5CypW,iBAAkB5pK,EAA0B7/L,EAA1B6/L,SAAUjqR,EAAgBoqF,EAAhBpqF,aAEhD,OACE,mCAAQ81E,KAAM+9W,EACNnqX,UAAU,qDACV5iF,GAAI,gBACJmjS,SAAUA,EAAS32L,QACnBw2L,UAAW9pR,EAAe,IAAM,YAAc,cAC9CkqR,YAAA,EACAC,eAAe,IACpB,gBAAGC,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB,iBAE1B,uCACE,mCAAyB7G,YAAaA,UAQlDywK,EAAsBjzT,UAAY,CAChCwiJ,YAAa,UAAU3lH,KAAK9lE,WAC5B87V,iBAAkB,UAAU3yT,KAAKnpC,Y,WAUpB,IAAAnN,UAPS,SAACxzG,GAEvB,MAAO,CACL4oB,aAFqB5oB,EAAMgR,YAAtB4X,gBAMM,CAAyBi0b,I,8EChDxC,W,OACA,OACA,O,IAEA,Q,IACA,O,IACA,O,IACA,QAEA,QACA,QACA,Q,OACA,S,mDAGA,IAgEM7kR,EAAqB,CACzBtsK,2B,WAGa,IAAA+jI,aACb,IAAAj8C,UAtBsB,SAACxzG,GAAU,MAC2BA,EAAM0zG,UAA3DtvC,EAD0B,EAC1BA,mBAAoBN,EADM,EACNA,kBAAmBpB,EADb,EACaA,WADb,EAEoB1iE,EAAMyc,YAApDuJ,EAF0B,EAE1BA,gBAAiB0F,EAFS,EAETA,YAAahO,EAFJ,EAEIA,aAGrC,MAAO,CACLglD,aACA0B,qBACAp+C,kBACAs4I,cAAe5yI,EACfo4C,oBACA37D,SARiBnI,EAAMgR,YAAlB7I,SASL4+K,gBAAiBrpK,EACjBmC,eAAgB7f,EAAMqN,mBASC2qL,EAAzB,EArE+B,SAAChlF,GAAU,IAEnC7wF,EAC6D6wF,EAD7D7wF,KAAM8vX,EACuDj/R,EADvDi/R,gBAAiBznT,EACsCwoB,EADtCxoB,SAAUpmB,EAC4B4uC,EAD5B5uC,mBAAoBp+C,EACQgtF,EADRhtF,gBAAiBs4I,EACTtrD,EADSsrD,cAAe5yI,EACxBsnF,EADwBtnF,YAAavjB,EACrC6qG,EADqC7qG,SACvG27D,EAAkEkvC,EAAlElvC,kBAAmBijH,EAA+C/zE,EAA/C+zE,gBAAiBrkH,EAA8BswC,EAA9BtwC,WAAY7iD,EAAkBmzF,EAAlBnzF,eAC5C4yR,GAAY,IAAA9qJ,QAAO,MAUrBm1T,GAAa,IAAAtzT,UAAQ,WACvB,IAAK9mF,IAAe0B,GAAuBj8D,GAAY27D,GAAsBjkD,EAAeM,SAC1F,OAAO,EAET,IAAMnS,EAASo2D,IAAuBN,EAAoBA,EAAkB91D,OAAS,IAKrF,QAJyB,IAAAu5K,qBAAoB,KAAMv5K,EAAQ+4K,GAIlC5qL,SAExB,CAACioE,EAAoBj8D,EAAU27D,EAAmBijH,EAAiBrkH,IAEtE,OACE,8BAAI4vB,UAAW,2BAA6BwqX,EAAa,mCAAqC,KAC5F,mCAASl/Z,MAAOz7B,EAAKC,cAAc,CAAC1S,GAAG,oBAAqBgjS,UAAU,SACpE,mCAAOogH,aAAc9sY,EAAgB7pB,OAAQg3G,MAAM,UAAU4/S,WAAY/sY,EAAgB7pB,QACvF,mCAAY80P,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC86E,SAAUA,EACVk9D,IAAK+qJ,EACLngN,UAAW,kCAAmCgsE,EAAgB,sBAAwB,IACtFkmB,QA7BO,WACzB,UAAU37I,eAAe,EAAAwB,6BAA6BI,oBACtD/e,GAAa4yI,GACT2zO,GACFA,MA0BM,uCACE,0D,gFCpDd,I,IAAA,MACA,OACA,OACA,Q,IAEA,Q,IACA,O,IACA,OAEA,Q,IACA,OACA,QACA,Q,WACA,Q,mDAEA,IA0CMj6M,EAAqB,CACzBtzH,uC,WAGa,IAAAuzH,aACb,IAAAxoC,aACE,IAAAj8C,UAhBoB,SAACxzG,GAAU,MACQA,EAAMgR,YAAxCtF,EAD0B,EAC1BA,YAAawnG,EADa,EACbA,kBAEpB,MAAO,CACLxnG,cACAi5D,eAHuB3kE,EAAM0zG,UAAxB/uC,eAILykD,wBAAyBlW,EAAkB/2G,UAUlB67L,EAAzB,EAA6C,cAhDd,SAAChlF,GAAU,IAErC7wF,EAAkG6wF,EAAlG7wF,KAAMwiD,EAA4FquC,EAA5FruC,eAAgBj5D,EAA4EsnG,EAA5EtnG,YAAa4mY,EAA+Dt/R,EAA/Ds/R,qBAAsBL,EAAyCj/R,EAAzCi/R,gBAAiBznT,EAAwBwoB,EAAxBxoB,SAAU84N,EAActwM,EAAdswM,WAYrFy4J,EAAevxX,EAErB,OACE,8BAAI8H,UAAU,wDACZ,mCAAS10C,MAAOz7B,EAAKC,cAAc,CAAC1S,GAAG,iBAAkBgjS,UAAU,SACjE,mCAAYzhD,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,wBACnC86E,SAAUuxX,EACVzpX,UAAU,iCACVkyF,QAlBM,WACtB,UAAU37I,eAAe,EAAAwB,6BAA6BO,sBAClD+5B,GAAkBstU,EACpBA,IAEA3uF,EAAW1rN,QAEb06S,MAYM,uCACE,4CAAkBn/R,MAAO4oW,EAAe,sBAAwB,UAAarwc,GAAa6wH,qB,8ECvCtG,W,OACA,OACA,O,IAEA,Q,IACA,O,IACA,SAEA,QACA,Q,OACA,QACA,QACA,Q,IACA,Q,mDAEA,IAqFMy7D,EAAqB,CACzB18J,oCACAyrC,+C,WAGa,IAAA0oF,aACb,IAAAj8C,UAlBsB,SAACxzG,GAKvB,MAAO,CACLu7B,cALsBv7B,EAAMgoV,aAAvBzsT,cAMLpzB,SALiBnI,EAAMgR,YAAlB7I,SAMLw9D,UALkB3lE,EAAM0zG,UAAnB/tC,aAekBqyH,EAAzB,EA3F8B,SAAChlF,GAAU,IAElC7wF,EACyC6wF,EADzC7wF,KAAM8vX,EACmCj/R,EADnCi/R,gBAAiBznT,EACkBwoB,EADlBxoB,SAAUjvD,EACQy3E,EADRz3E,cAAeD,EACP03E,EADO13E,iBAAkByrC,EACzBisC,EADyBjsC,sBAAuB4yB,EAChDqZ,EADgDrZ,mBAC9FxxF,EAA8C6qG,EAA9C7qG,SAAUoqY,EAAoCv/R,EAApCu/R,sBAAuB5sU,EAAaqtC,EAAbrtC,UAC7B8sO,GAAY,IAAA9qJ,QAAO,MAEnBy0T,EAAkB,EAAAn2a,wBAAwBC,QAE1C62a,EAAkB,WAItB,GAHI9qE,GACFA,IAEE12W,EAAcp/B,QAAU,EAC1B,OAAO,EAET,IAAMymB,GAAS,IAAAC,oBACf0Y,EAAc0gH,MACd,IAAMgxP,EAAY1xW,EAAcA,EAAcp/B,OAAS,GACvDymB,EAAOk0H,4BAA4Bm2P,GAEnClmU,IACA4yB,IACAr+D,EAAiBC,IAGbyhb,EAAiB,SAAC10W,GAClBA,EAAM20W,SAAyB,MAAd30W,EAAMppG,MACzB,UAAU2pC,eAAe,EAAAwB,6BAA6B6G,wBACtD6ra,OAIJ,IAAA1zV,YAAU,WAER,OADAvoH,SAASytD,iBAAiB,UAAWyuZ,GAC9B,WACLl8c,SAAS8pG,oBAAoB,UAAWoyW,MAGzC,IAEH,IAAMjB,EAAevxX,GAAYjvD,EAAcp/B,QAAU,EAEnD4iH,EACJ,mCAAYkyI,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,mBACnC86E,SAAUuxX,EACVr0T,IAAK+qJ,EACLngN,UAAW,kCACNnqF,IAAaoqY,GAA0B5sU,IAAcy2Y,EACpD,+BAAiC,IACvC53R,QAAS,WACP,UAAU37I,eAAe,EAAAwB,6BAA6B6G,wBACtD6ra,MAEZ,yCAIJ,OACE,8BAAIzqX,UAAW,2BACZypX,EAAeh9V,EACd,mCAASnhE,MAAOz7B,EAAKC,cAAc,CAAC1S,GAAG,mBAAoBgjS,UAAU,SAClE3zL,GAGJ52G,IAAaoqY,EACV,mCAAiB9/F,UAAWA,EACXzmK,YAAaowU,EACbzpK,YAAa,yCAA4C,W,8EClFpF,I,IAAA,MACA,OACA,QAEA,Q,IACA,S,IACA,SACA,Q,IACA,S,mDAEA,IAoDM36G,EAAqB,CACzBtzH,uC,WAGa,IAAAuzH,aACb,IAAAzkF,UAXsB,WACtB,MAAO,KAUkBwkF,EAAzB,EAzDe,SAAChlF,GAAU,IAEnBtuC,EAAqDsuC,EAArDtuC,kBAAmByzH,EAAkCnlF,EAAlCmlF,QAAS32L,EAAyBwxG,EAAzBxxG,SAAU6xM,EAAergG,EAAfqgG,YA+B7C,OACE,+BAAK/gH,UAAU,MACb,+BAAKA,UAAU,yBACb,mCAAgBgxI,YAvBE,WACtB,OAAQ9hO,EAAS+d,UACf,KAAK,EAAAtC,OAAOmqB,MACZ,QACEs9B,EAAkB,IAClB2uI,GAAY,WACLxzM,OAAO2B,SAASwb,KAAKnb,SAAS,SACjCs2L,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,SAGxB,MAEF,KAAK,EAAAzuF,OAAOoqB,SACVq9B,EAAkB,EAAAznD,OAAOmqB,OACzB+wJ,EAAQ17L,KAAK,EAAAwgB,OAAOmqB,WAUpB,+BAAKkrD,UAAU,WACb,wCACA,mCAAiB4qX,WAnCN,WACjBx4Y,EAAkB,IAClB2uI,GAAY,WACLxzM,OAAO2B,SAASwb,KAAKnb,SAAS,SACjCs2L,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,oB,8EClB5B,I,IAAA,MACA,OACA,O,IAEA,O,IACA,Q,8DA0Be,IAAA+jD,aACb,IAAAj8C,UAVsB,WACtB,MAAO,KAKkB,GAIzB,EAzBqB,SAACR,GAAU,IAEzBswH,EAAetwH,EAAfswH,YAEP,OACE,kCAAQhxI,UAAU,aAChB,mCAAQA,UAAW,qCACX88M,UAAW,wCACX5qH,QAAS8+C,GACf,4CAAkB5zN,GAAG,2B,8EChB7B,I,IAAA,MACA,OACA,QACA,O,IAEA,S,IACA,OACA,Q,8DA2Ce,IAAA8jG,UATS,WACtB,MAAO,KAKkB,GAGZ,EAzCU,WAEvB,OACE,wCACG,SAAC8qS,GAAD,OACC,+BAAKhsT,UAAU,iBACb,+BAAKA,UAAU,yBACb,kCAAQA,UAAU,aAChB,+BAAKA,UAAU,qDACf,+BAAKA,UAAU,8BACZgsT,EACG,+BAAK73Y,IAAK63Y,EAAW1iM,IAAI,GAAGtpH,UAAU,sBACtC,0CAGR,sCACE,iCAAOyuB,KAAM,EAAA9jG,OAAOoqB,UAClB,8BAAIirD,UAAU,MACZ,4CAAkB5iF,GAAG,4BAEvB,6BAAG4iF,UAAU,QACX,4CAAkB5iF,GAAG,0C,6FC9BvC,O,OACA,OACA,Q,IAEA,S,IACA,S,IACA,S,IACA,SACA,Q,8DAoEe,IAAAuoL,aAlES,SAACjlF,GAAU,IAE1BmlF,EAAuBnlF,EAAvBmlF,QAAS+kR,EAAclqW,EAAdkqW,WAFiB,GAGa,IAAAr0T,WAAS,GAHtB,qBAG1B6jI,EAH0B,KAGTq6B,EAHS,KAwBjC,OACE,+BAAKz0N,UAAU,kBACb,+BAAKA,UAAU,0BACb,8BAAIA,UAAU,MACZ,sCACE,iCAAOyuB,KAAM,EAAA9jG,OAAOmqB,OAClB,4CAAkB13B,GAAG,sBAEvB,iCAAOqxG,KAAM,EAAA9jG,OAAOoqB,UAClB,4CAAkB33B,GAAG,2BAI3B,mCAAgBg9Q,gBAAiBA,IACjC,sCACE,iCAAO3rK,KAAM,EAAA9jG,OAAOmqB,OAClB,wCACE,iCACE,gCAAMkrD,UAAU,0BAA0BkyF,QA1B9B,cA2BV,4CAAkB90K,GAAG,gCAGzB,mCAAiBwtc,WAAYA,IAC7B,6BAAG5qX,UAAU,gBACX,4CAAkB5iF,GAAG,yBADvB,IACgD,gCAAM4iF,UAAU,4BAA4BkyF,QA5B9E,WACxB2T,EAAQ17L,KAAK,cA4BC,4CAAkBiT,GAAG,gCAK7B,iCAAOqxG,KAAM,EAAA9jG,OAAOoqB,UAClB,wCACE,wCACA,mCAAoBumS,uBApDD,WAE7B,OADA7mB,GAAmB,GACZ,IAAIjpT,SAAQ,SAACC,GAClBq4F,YAAW,WACT2wN,GAAmB,GACnBhpT,MACC,SA8CyEm/c,WAAYA,a,mHCnE9F,O,OACA,OACA,O,IAEA,O,IACA,Q,IAEA,OACA,S,IACA,OACA,QACA,SACA,Q,8DA6Ce,IAAA1pW,UARS,WACtB,MAAO,KAGkB,GAIZ,EA3CS,SAACR,GAAU,IAK3B,EAHCkqW,EAAclqW,EAAdkqW,WAF0B,GAGC,IAAAr0T,WAAS,GAHV,qBAG1B0yD,EAH0B,KAGfi0L,EAHe,KAK3B2tE,GAAA,gCAAmB,2FACvB3tE,GAAa,GACb,UAAU3mW,eAAe,2BAFF,UAGG,IAAA4vN,aAHH,oDAKF,IAAAt5J,WAAU,CAACC,QAAQ,EAAMC,aAAa,IALpC,gBAOnB,IAAA8/G,8BACA+9P,KAEA1tE,GAAa,GAVM,wBAarBA,GAAa,GAbQ,mDAAnB,4CAiBN,OACE,mCAAQl9S,UAAW,uFACX68O,QAAS,wCACT3kP,SAAU+wH,EAGV/2B,QAAS24R,GACf,4CAAkBztc,GAAG,4BACpB6rM,EAAY,mCAAiBpoG,MAAO,EAAAC,OAAOC,QAAW,U,8EC5C7D,W,OACA,QAEA,Q,IACA,Q,IACA,Q,6DAEuB,SAACL,GAAU,IAEzB05K,EAAmB15K,EAAnB05K,gBAEP,OACE,wCACE,mCAAeptR,SAAS,QAAQotR,gBAAiBA,IACjD,sCACE,iCAAO3rK,KAAM,EAAA9jG,OAAOmqB,OAClB,mCAAe9nC,SAAS,WAAWotR,gBAAiBA,MAGxD,sCACE,iCAAO3rK,KAAM,EAAA9jG,OAAOoqB,UAClB,wCACE,mCAAe/nC,SAAU,YAAaotR,gBAAiBA,IAEvD,mCAAoBptR,SAAU,cAAeotR,gBAAiBA,IAC9D,mCAAeptR,SAAU,SAAUotR,gBAAiBA,U,8ECzBhE,W,OACA,OACA,O,IAEA,Q,mDAGA,IAiDM10F,EAAqB,CACzBlnK,eApDF,MAoDEA,gB,WAGa,IAAA0iF,UAXS,SAACxzG,GAEvB,MAAO,CACLyI,SAFiBzI,EAAMwc,UAAlB/T,YAU+BuvL,EAAzB,EArDgB,SAAChlF,GAAU,IAEjCvqG,EAA4BuqG,EAA5BvqG,SAAUqoB,EAAkBkiF,EAAlBliF,eAEXssb,EAAmB,SAAC90W,GACxBx3E,EAAe,CACbsoO,cAAe9wJ,EAAMlqF,OAAOg/M,WAUhC,OACE,wCACE,6BAAG9qI,UAAU,iBACX,mCACE8qI,QAAS30N,EAAS2wP,cAClB57B,SAAU4/O,IAEZ,gCAAM9qX,UAAU,kBACd,4CAAkB5iF,GAAG,4BADvB,IACmD,gCAAM4iF,UAAU,YAAYkyF,QAAS44R,GACpF,4CAAkB1tc,GAAG,+BAI3B,6BAAG4iF,UAAU,iBACX,mCACE8qI,QAAS30N,EAAS4wP,sBAClB77B,SAtBqB,SAACl1H,GAC5Bx3E,EAAe,CACbuoO,sBAAuB/wJ,EAAMlqF,OAAOg/M,aAsBlC,gCAAM9qI,UAAU,kBACd,4CAAkB5iF,GAAG,mC,mHC1C/B,O,OACA,OACA,O,IACA,M,IAEA,O,IACA,Q,IAEA,MACA,QACA,SACA,S,IACA,OACA,Q,mDAEA,IAAM2tc,EAAqB,SAACrqW,GAAU,IAK9B,EAHC46N,EAAsC56N,EAAtC46N,uBAAwBsvI,EAAclqW,EAAdkqW,WAFK,GAGF,IAAAr0T,WAAS,GAHP,qBAG7B0yD,EAH6B,KAGlBi0L,EAHkB,KAK9BukB,GAAA,gCAAsB,4GACpBnmF,IADoB,UAEpBxzM,EAAS,UAAMvwH,WAAW2S,UAAUyU,gBACtC70B,OAAOmc,KAAK6hH,GAAQj+H,SAAUC,OAAOmc,KAAK6hH,GAAQzyH,MAAK,SAAAzI,GAAA,OAAOk7H,EAAOl7H,IAAQk7H,EAAOl7H,GAAK/C,UAHnE,0CAIjB,GAJiB,cAM1BqzY,GAAa,GANa,UAOD,IAAAr2I,gBAPC,UAOpBiK,EAPoB,OAQ1B1jQ,QAAQ4B,IAAI,0BAA2B8hQ,GAClCA,EATqB,wBAUxBosI,GAAa,GAVW,mBAWjB,GAXiB,SAa1B,IAAArwS,WAAU,CACRC,QAAQ,IAEP7lE,MAAK,SAAC2lE,GACLp+F,SAASC,SAAS4b,MAAQuiF,EAAaviF,OACvC,IAAAwiM,8BACA+9P,IAEA1tE,GAAa,MArBS,mDAAtB,4CAyBN,OACE,mCAAQl9S,UAAW,uFACX9H,SAAU+wH,EACV4zH,QAAS,wCACT3qJ,QAASuvO,GACf,4CAAkBrkZ,GAAG,+BACpB6rM,EAAY,mCAAiBpoG,MAAO,EAAAC,OAAOC,QAAW,OAK7DgqW,EAAmBzzT,UAAY,CAC7BgkL,uBAAwB,UAAUnnJ,KAAK9lE,WACvCu8V,WAAY,UAAUz2R,KAAK9lE,Y,WAYd,IAAAnN,UATS,WACtB,MAAO,KAIkB,GAIZ,CAA6C6pW,I,8ECtE5D,I,IAAA,MACA,OACA,Q,IAEA,SACA,QACA,Q,IACA,S,mDAEA,IA8BMrlR,EAAqB,CACzBtzH,uC,WAGa,IAAAuzH,aACb,IAAAzkF,UAXsB,WACtB,MAAO,KAUkBwkF,EAAzB,EAnCgB,SAAChlF,GAAU,IAEpBtuC,EAA2CsuC,EAA3CtuC,kBAAmByzH,EAAwBnlF,EAAxBmlF,QAASkb,EAAergG,EAAfqgG,YAYnC,OACE,+BAAK/gH,UAAU,MACb,+BAAKA,UAAU,gDACb,mCAAe+gH,YAAaA,KAE9B,mCAAa4+L,gBAfO,WACtBvtU,EAAkB,IAClB2uI,GAAY,WAIVlb,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,kB,8ECnB1B,I,IAAA,MACA,O,IACA,M,IAEA,S,IACA,O,mDAEA,IAAM4xW,EAAgB,SAACtqW,GAAU,IAExBlkF,EAAmDkkF,EAAnDlkF,UAAWs6F,EAAwCpW,EAAxCoW,wBAAyBiqF,EAAergG,EAAfqgG,YAE3C,OAAKjqF,EAWH,+BAAK92B,UAAU,WACb,8BAAIA,UAAU,uBACXxjE,EAAUtf,KAAI,SAACqnI,EAAY8kU,GAC1B,OAAO,mCAAgBz8c,IAAKy8c,EAAW9kU,WAAYA,EAAYw8D,YAAaA,SAZhF,+BAAK/gH,UAAU,WACb,0CAkBRgrX,EAAc1zT,UAAY,CACxBypD,YAAa,UAAU5sB,M,WAeV,IAAAjzE,UAZS,SAACxzG,GAAU,IAC1BkzG,EAAqBlzG,EAAMgR,YAA3BkiG,kBACP,MAAO,CACLpkF,UAAW9uB,EAAMouB,wBAAwBU,UACzCs6F,wBAAyBlW,EAAkB/2G,UAIpB,GAIZ,CAA6Cmhd,I,wGChD5D,O,OACA,OACA,Q,IACA,MACA,O,IAEA,O,IACA,QAEA,Q,IACA,OACA,QACA,Q,IACA,QACA,Q,OACA,Q,mDAEA,IAAMC,EAAiB,SAACvqW,GAAU,IAqB1B,EAnBC6jC,EAC2B7jC,EAD3B6jC,WAAYshD,EACenlF,EADfmlF,QAASkb,EACMrgG,EADNqgG,YAAa3uI,EACPsuC,EADOtuC,kBAAmBz1C,EAC1B+jF,EAD0B/jF,aAAc4L,EACxCm4E,EADwCn4E,0BAA2B9K,EACnEijF,EADmEjjF,cACnGlQ,EAAgCmzF,EAAhCnzF,eAAgBmpU,EAAgBh2O,EAAhBg2O,aAEZnoL,EAAW5xI,GAAiB4nH,EAAWnnI,KAAOuf,EAE9Cuub,EAAa,WAAyB,IAAxBC,EAAwB,wDAC1C/4Y,EAAkB,IAClB2uI,GAAY,WACV,GAAIoqQ,GAAe59b,EAAe0nI,UAAYyhM,GAAgBA,EAAannV,SAAS,SAApF,CACE,IAAM67c,EAAY10H,EACf3iV,QAAQ,MAAO,KACfA,QAAQ,aAAc,QAAQwwI,EAAW76C,OAAS,KACrDm8F,EAAQ17L,KAAKihd,QAGfvlR,EAAQ17L,KAAK,SAASo6I,EAAW76C,YAI/B2hX,GAAA,gCAAkB,WAAOhkX,GAAP,gFACtBj6F,QAAQ4B,IAAI,aAAcu1I,GACpBglU,EAFgB,MAEOhlU,EAAWnnI,GAFlB,WAE+BmnI,EAAW76C,OAF1C,gBAEgE66C,EAAWugF,YAF3E,UAEgGvgF,EAAW/6G,MACjI,UAAU+M,eAAe,EAAAwB,6BAA6B6E,oBAAsB2sa,IAExEh7S,EALkB,uBAMpB28S,IANoB,mBAOb,GAPa,cAStB3ib,EAA0Bg8G,EAAWnnI,KACrC,IAAA4e,gBAVsB,WAWhB,IAAAsoH,gBAAeC,EAAY9mH,GAXX,QAYtB4pE,KACA,IAAAK,iBACAwjX,GAAW,GAdW,mDAAlB,6CAiBN,OACE,8BAAIlrX,UAAW,qBAAuBuuE,EAAW,mBAAqB,IAClE9kJ,MAAO,CAACy3E,gBAAiBA,OAAOqjD,EAAWitF,UAAnC,MACTjtF,GAAcA,EAAWitF,UACxB,wCAMM,KACJ,wCACG,SAACnqI,GAAD,OACC,mCAAQrH,UAAW,oEACX68O,QAAS,wCACT3qJ,QAAS,kBAAMm5R,EAAgBhkX,KACrC,4CAAkBjqF,GAAG,2BAK3B,0CAKV6tc,EAAe3zT,UAAY,CACzB/S,WAAY,UAAUx3I,OACtBg0M,YAAa,UAAU5sB,MAGzB,IAYMuR,EAAqB,CACzBtzH,sCACA7pC,uD,WAGa,IAAAo9J,aACb,IAAAzkF,UAlBsB,SAACxzG,GAAU,MACKA,EAAMouB,wBAArCa,EAD0B,EAC1BA,aAAcc,EADY,EACZA,cACdi5T,EAAgBhpV,EAAMgR,YAAtBg4U,aAEP,MAAO,CACL/5T,eACAc,gBACAlQ,eAJqB7f,EAAMqN,gBAK3B27U,kBAUuBhxJ,EAAzB,CAA6CulR,K,8ECxG/C,W,OACA,O,IAGA,S,IACA,Q,IACA,O,IACA,S,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,8DAiCe,IAAA/pW,UANS,WACtB,MAAO,KAGkB,GAEZ,EA/BI,WAEjB,OACE,wCAEE,wCACA,wCACA,wCAEA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACA,wCACG,SAACiyM,GAAD,OAAsB,mCAAkBA,iBAAkBA,OAE7D,6C,iGCxCN,MACA,OACA,O,IACA,Q,IAEA,O,IACA,O,IACA,Q,IACA,Q,IAEA,Q,mDAKA,IAkGMztH,EAAqB,CACzBthK,sBAvGF,MAuGEA,uB,WAGa,IAAA+4H,aACb,IAAAj8C,UAXsB,SAACxzG,GACvB,MAAO,CACL22B,gBAAiB32B,EAAM22B,mBASAqhK,EAAzB,EAvG0B,SAAChlF,GAAU,IAE9Br8E,EAAgDq8E,EAAhDr8E,gBAAiBxU,EAA+B6wF,EAA/B7wF,KAAMuU,EAAyBs8E,EAAzBt8E,sBACvBuB,EAAiCtB,EAAjCsB,QAASwlB,EAAwB9mB,EAAxB8mB,QAASG,EAAejnB,EAAfinB,MAAejnB,EAAR7jB,KAEhC,IAAKmlB,EACH,OAAO,KAGT,IAcMq7K,EAAa,WACjB58K,EAAsB,CAACuB,SAAS,KAuClC,OACE,mCAAaq7K,WAAYA,EAAYhhH,UAAU,iBAC5C,SAAC+gH,GAAD,OACC,+BAAK/gH,UAAU,mCACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAU,+CACVkyF,QAAS,kBAAM6uB,EAAYC,KACrC,yCAEF,+BAAKhhH,UAAU,uBAMb,6BAAGA,UAAU,kEACX,wCADF,IACe,gCAAMA,UAAU,kCAC1B10C,EAAQz7B,EAAKC,cAAc,CAAC1S,GAAIkuC,IAAU,iBAG/C,6BAAG00C,UAAU,mCAzEjBhjF,MAAMC,QAAQkuC,GACTA,EAAQjuC,KAAI,SAAC2qH,EAAKwjG,GAAN,OAAmB,6BAAGz+N,IAAK,MAAMy+N,GAAWxjG,OACtD,aAAS18E,GACXA,EAAQ/tC,GAAK,4CAAkBA,GAAI+tC,EAAQ/tC,GAAImO,QAAA,gBAAY4/B,KAAcA,EACvEA,EACFt7B,EAAK1C,SAASg+B,GACjB,4CAAkB/tC,GAAI+tC,IACtBA,EAAQp3C,QAAQ,MAAO,UAAUA,QAAQ,iBAAkB,IAExD,SAQU,SAACgtM,GA0BhB,OACE,mCAAQ/gH,UAAW,oDACXkyF,QAAS,kBAAM6uB,EAAYC,KACjC,4CAAkB5jM,GAAG,sBA4BpBkuc,CAAavqQ,a,8ECnG1B,I,IAAA,MACA,OACA,OACA,Q,IAEA,O,IAEA,QACA,QAMA,QACA,QACA,QACA,Q,IACA,QACA,Q,WACA,QACA,QACA,Q,mDAEA,IAkOMrb,EAAqB,CACzBnzH,4CACAH,sCACAjC,8BACAgE,2C,WAGa,IAAAwxH,aACb,IAAAzkF,UAxBsB,SAACxzG,GAAU,MACoCA,EAAM0zG,UAApE5uC,EAD0B,EAC1BA,kBAAmBI,EADO,EACPA,sBAAuBwB,EADhB,EACgBA,iBADhB,EAEgB1mE,EAAMouB,wBAAhDU,EAF0B,EAE1BA,UAAWG,EAFe,EAEfA,aAGlB,MAAO,CACL61C,oBACAI,wBACAp2C,YACAiB,cAT+B,EAEDA,cAQ9Bd,eACAy3C,mBACA7mD,eATqB7f,EAAMqN,mBAqBJ2qL,EAAzB,EA1OwB,SAAChlF,GAAU,IAE5BluC,EACgGkuC,EADhGluC,kBAAmBD,EAC6EmuC,EAD7EnuC,qBAAsBH,EACuDsuC,EADvDtuC,kBAAmByzH,EACoCnlF,EADpCmlF,QAASjzH,EAC2B8tC,EAD3B9tC,sBAAuBp2C,EACIkkF,EADJlkF,UACjGG,EAAqG+jF,EAArG/jF,aAAcwzC,EAAuFuwC,EAAvFvwC,cAAeiE,EAAwEssC,EAAxEtsC,iBAAkB7mD,EAAsDmzF,EAAtDnzF,eAAgB4mD,EAAsCusC,EAAtCvsC,oBAAqB12C,EAAiBijF,EAAjBjjF,cAChF8tb,EAAiB,CACrB,EAAAz5a,cAAcM,cACd,EAAAN,cAAcO,cACd,EAAAP,cAAcQ,aACd,EAAAR,cAAcS,oBACd,EAAAT,cAAcI,MACd,EAAAJ,cAAcW,YAGhB,IAAK+/B,IAAsB+4Y,EAAel2c,MAAK,SAAA0qY,GAAA,OAAaA,IAAcvtU,KACxE,OAAO,KAGT,IAAMwuI,EAAa,SAACD,GACd3sI,GACFD,EAAoB,IAEtB4sI,GAAY,WACVxuI,EAAqB,QAoFnBgtY,EAAW,WACf,OAAQ/sY,GACN,KAAK,EAAA1gC,cAAcM,cACjB,OAAO,IAAAh4B,YAAa,+BAAiC,gCAEvD,KAAK,EAAA03B,cAAcO,cACjB,MAAO,4BAET,KAAK,EAAAP,cAAcQ,aACjB,MAAO,2BAET,KAAK,EAAAR,cAAcS,oBACjB,MAAO,kCAET,KAAK,EAAAT,cAAcI,MACjB,MAAO,mBAET,KAAK,EAAAJ,cAAcW,WACjB,MAAO,kBAGX,MAAO,IAGH+4a,EAAiB,WACrB,OAAQh5Y,GACN,KAAK,EAAA1gC,cAAcM,cACjB,MAAO,8BAET,KAAK,EAAAN,cAAcO,cACjB,MAAO,2BAET,KAAK,EAAAP,cAAcQ,aACjB,MAAO,0BAET,KAAK,EAAAR,cAAcS,oBACjB,MAAO,iCAET,KAAK,EAAAT,cAAcI,MACjB,MAAO,kBAET,KAAK,EAAAJ,cAAcW,WACjB,MAAO,iBAGX,MAAO,IAGHg5a,EAAgB,WACpB,OAAQj5Y,GACN,KAAK,EAAA1gC,cAAcS,oBACjB,MAAO,mCAET,KAAK,EAAAT,cAAcI,MACjB,MAAO,cAET,KAAK,EAAAJ,cAAcW,WACjB,MAAO,mBAGX,MAAO,mBAIT,OACE,wCACG,SAACsuK,GAAD,OACC,+BAAK/gH,UAAU,mCACb,+BAAKA,UAAU,uBACb,8BAAIA,UAAU,4BACZ,4CAAkB5iF,GAAImic,OAExB,6BAAGv/W,UAAU,kBACX,4CAAkB5iF,GAAIouc,QAG1B,+BAAKxrX,UAAW,uBACbxtB,IAAsB,EAAA1gC,cAAcS,oBAAsB,8BAAgC,KAC1FigC,IAAsB,EAAA1gC,cAAcS,qBAAuBigC,IAAsB,EAAA1gC,cAAcW,WAAa,KAC3G,mCAAQutD,UAAW,sDACXkyF,QAAS,kBAAM8uB,EAAWD,KAChC,4CAAkB3jM,GAAG,oBAGzB,wCACG,SAACiqF,GAAD,OACC,wCACG,SAAC6rN,GAAD,OACC,mCAAQlzN,UAAW,oCACdxtB,IAAsB,EAAA1gC,cAAcS,oBAAsB,sBAAwB,qBAC/E2/I,QAAS,kBA1KT,SAAC6uB,EAAamyG,EAAiB7rN,GACvD,OAAQ70B,GACN,KAAK,EAAA1gC,cAAcM,cACnB,KAAK,EAAAN,cAAcO,cACjB,IAAM4rO,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgC0D,kBAChC,EAAAxK,6BAA6B0D,eACjC,UAAUlF,eAAe0nO,GACzB,IAAM1wJ,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAC7C,GAAI/6C,IAAsB,EAAA1gC,cAAcO,gBAAkBk7E,EAAS,CACjEh7C,EAAqB,EAAAzgC,cAAckB,aACnC,MAEFguK,EAAWD,GACX3uI,EAAkB,IAElB8gP,IAEA,MAEF,KAAK,EAAAphR,cAAcQ,aACjB,IAAM2rO,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCoE,6BAChC,EAAAlL,6BAA6BkG,0BACjC,UAAU1H,eAAe0nO,GAJM,IAMxBnvD,EAA2Bl8I,EAA3Bk8I,cAAe+qL,EAAYjnU,EAAZinU,UACP,IAAAtpX,oBACRm5M,aAAa5a,EAAe,KAAM,KAAM+qL,GAAU,WACvDznU,EAAkB,IAClB,sBACEjC,EAAc,MAEhB01H,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,MACpB4nG,EAAWD,GACX15G,OAGF,MAEF,KAAK,EAAAv1D,cAAcS,oBACjByuK,EAAWD,GACX3uI,EAAkB,IAClByzH,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,MACpB,MAEF,KAAK,EAAAtnE,cAAcI,MACjB,IAAM+rO,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCmE,wBAChC,EAAAjL,6BAA6BiG,yBACjC,UAAUzH,eAAe0nO,GAEzBj9D,EAAWD,GACX3uI,EAAkB,IAClByzH,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,MAEpB,IAAIsyW,EAAc,KACdhuc,OAAOC,UAAUgf,KACnB+ub,EAAclvb,EAAUtb,MAAK,SAAAuoF,GAAA,OAAUA,EAAOrsF,KAAOuf,MAElD+ub,IACHA,EAAclvb,EAAUtb,MAAK,SAAAuoF,GAAA,OAAUA,EAAO6c,qBAE5ColW,IACFt+c,QAAQ4B,IAAI,gBAAiB08c,IAC7B,IAAApnU,gBAAeonU,EAAajub,IAE9B,MAEF,KAAK,EAAAqU,cAAcW,WACjB,IAAMwrO,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCkE,8BAChC,EAAAhL,6BAA6BgG,2BACjC,UAAUxH,eAAe0nO,GACzBj9D,EAAWD,IAgGwB4qQ,CAAkB5qQ,EAAamyG,EAAiB7rN,KACrE,4CAAkBjqF,GAAIquc,uB,8EC7N5C,I,IAAA,MACA,OACA,OACA,Q,IAEA,O,IACA,Q,IACA,Q,IAEA,QACA,QAMA,Q,IAEA,SACA,QACA,S,IACA,S,mDAGA,IAsGM/lR,EAAqB,CACzBnzH,4CACAO,sCACAjB,8CACAO,sCACA9wC,gCACAklJ,mD,WAGa,IAAAmf,aACb,IAAAxoC,aACE,IAAAj8C,UAtBoB,SAACxzG,GAAU,MAC8BA,EAAM0zG,UAErE,MAAO,CACL5uC,kBAJ+B,EAC1BA,kBAILO,eAL+B,EACPA,eAKxBvB,kBAN+B,EACSA,kBAMxC37D,SALiBnI,EAAMgR,YAAlB7I,YAoBoB6vL,EAAzB,EAjHmB,SAAChlF,GAAU,IAEzBluC,EAA2EkuC,EAA3EluC,kBAAmBD,EAAwDmuC,EAAxDnuC,qBAAsBQ,EAAkC2tC,EAAlC3tC,eAAgBljD,EAAkB6wF,EAAlB7wF,KAAMha,EAAY6qG,EAAZ7qG,SAEhEgqY,EAAc,CAAC,EAAA/tW,cAAcY,aAAc,EAAAZ,cAAca,WAAY,EAAAb,cAAcc,YAAa,EAAAd,cAAce,gBAAiB,EAAAf,cAAcgB,oBACnJ,IAAK0/B,IAAsBqtU,EAAYxqY,MAAK,SAAA0qY,GAAA,OAAaA,IAAcvtU,KACrE,OAAO,KANuB,IASzBk2C,EAAuB31C,EAAvB21C,oBAEDs4F,EAAa,SAACD,GAClBA,GAAY,WACVxuI,EAAqB,QAIrBq5Y,EAAc,GAClB,OAAQp5Y,GACN,KAAK,EAAA1gC,cAAcY,aACjBk5a,EAAc,UACd,MAEF,KAAK,EAAA95a,cAAca,WACjBi5a,EAAc,QACd,MAEF,KAAK,EAAA95a,cAAcc,YACjBg5a,EAAc,SACd,MAEF,KAAK,EAAA95a,cAAce,gBACjB+4a,EAAc,aACd,MAEF,KAAK,EAAA95a,cAAcgB,mBACjB84a,EAAc,gBAKlB,OACE,mCAAa5rX,UAAU,wBACpB,SAAC+gH,GAAD,OACC,+BAAK/gH,UAAW,gCACZxtB,IAAsB,EAAA1gC,cAAcY,cAAiBg2E,EAAoB7+G,OACzE,2BAA2B6+G,EAAoB7+G,OAC/C,KACF,+BAAKm2F,UAAU,qBACb,8BAAIA,UAAU,2EACZ,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBAAqB86E,UAAU,EAClE8H,UAAU,oEACpB,yCAEF,gCAAMA,UAAU,kCAAiC,4CAAkB5iF,GAAG,0BACtE,gCAAM4iF,UAAU,kCAAhB,OACA,sCAAQ,4CAAkB5iF,GAAA,kBAAsBwuc,EAAtB,aAE3B/1c,EACC,+BAAKmqF,UAAU,6BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAU,6BACVkyF,QAAS,kBAAM8uB,EAAWD,KACpC,0CAGF,MAEN,+BAAK/gH,UAAU,iCACb,6BAAGA,UAAU,kBACX,4CAAkB5iF,GAAA,kBAAsBwuc,EAAtB,WAEnBljW,EAAoB7+G,OACnB,8BAAIm2F,UAAU,mCACX0oB,EAAoBxrG,KAAI,SAAA2kG,GACvB,OAAO,mCAAuBj1G,IAAKi1G,EAAmB9oG,UAAUqE,GAClC2wF,YAAa8T,QAG7C,KACJ,6BAAG7hB,UAAU,mCACX,4CAAkB5iF,GAAA,kBAAsBwuc,EAAtB,eAGtB,mCAAuB5qQ,WAAY,kBAAMA,EAAWD,gB,8EC5G9D,I,IAAA,M,IACA,M,IACA,S,IACA,Q,IACA,O,IACA,QACA,Q,mDAEA,IAAM8qQ,EAAwB,SAACnrW,GAAU,IAEhC3S,EAAe2S,EAAf3S,YAEP,OACE,8BAAI/N,UAAU,iCACZ,+BAAKA,UAAU,yBACb,mCAA0B+N,YAAaA,IACvC,mCAAkBt1F,QAASs1F,KAE7B,+BAAK/N,UAAU,uBACb,gCAAMA,UAAU,4BACd,mCAAavnF,QAASs1F,EAAavgF,mBAAmB,KAExD,6BAAGwyE,UAAU,mCACX,mCAAavnF,QAASs1F,KAExB,+BAAK/N,UAAU,qBACb,mCAAkB+N,YAAaA,QAOzC89W,EAAsBv0T,UAAY,CAChCvpD,YAAa,UAAU/+C,MAAV,oBAAkCq/D,Y,UAIlCw9V,G,iGCtCf,MACA,OACA,O,IACA,MACA,Q,IAEA,OAEA,QAMA,Q,IAEA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,Q,OACA,QACA,S,mDAIA,IAAMC,EAAwB,SAACprW,GAAU,IAEhClvC,EAG+CkvC,EAH/ClvC,kBAAmBgB,EAG4BkuC,EAH5BluC,kBAAmBwuI,EAGStgG,EAHTsgG,WAAY5uI,EAGHsuC,EAHGtuC,kBAAmBP,EAGtB6uC,EAHsB7uC,sBAAuBg0H,EAG7CnlF,EAH6CmlF,QACjG9yH,EAEoD2tC,EAFpD3tC,eAAgBl9D,EAEoC6qG,EAFpC7qG,SAAU8B,EAE0B+oG,EAF1B/oG,UAAW2pB,EAEeo/E,EAFfp/E,eAAgBmlJ,EAED/lE,EAFC+lE,qBAAsBD,EAEvB9lE,EAFuB8lE,wBAAyBlnJ,EAEhDohF,EAFgDphF,UACpG6wC,EACoDuwC,EADpDvwC,cAAeK,EACqCkwC,EADrClwC,kBAAmB+B,EACkBmuC,EADlBnuC,qBAAsBnnD,EACJs1F,EADIt1F,aAAc0nD,EAClB4tC,EADkB5tC,kBAAmBzqC,EACrCq4E,EADqCr4E,kBACzFwkI,EAAoDnsD,EAApDmsD,6BAA8B3lJ,EAAsBw5F,EAAtBx5F,mBAEzBwhG,EAAuB31C,EAAvB21C,oBAEDijW,EAAoB,SAACnrc,EAAM6mF,EAAoBy5T,GACnD,OAAQtuV,GACN,KAAK,EAAA1gC,cAAcY,aACnB,KAAK,EAAAZ,cAAca,WAEjB,UAAU4D,eAAe,EAAAwB,6BAA6B+F,uBAEtD,IAAM9rB,EAAew/C,EAAkB17D,YAUvC,GATAkc,EAAa22F,iBAAkB,EAClB,QAATnoG,GACFsgZ,EAAuBp4S,GACvB72C,EAAsB,KAEtBw1B,EAAmB71B,GAIjBgB,IAAsB,EAAA1gC,cAAcY,aAAc,KAC7C4vE,GAA0B,IAAAH,sBAAqB3wC,EAAmBpmD,GAAlEk3F,uBACP,GAAIA,EAAuBz4G,OAAQ,CACjC0oE,EAAqB,EAAAzgC,cAAca,YACnCmgC,EAAkB,CAChB41C,oBAAqBpG,IAEvB,YAGFtwF,EAAaw4E,oBAAsBh5B,EAGrCwvI,IAEAn0C,GAA6B,GAC7Bh7F,EAAsB,IACtBg0H,EAAQ17L,MAAK,IAAA2/F,eAAct4B,MAQ3Bu6Y,EAAoB,WACxB,UAAUx1a,eAAe,EAAAwB,6BAA6B4F,6BACtD,IAAIqua,EAA0BA,GAA1BA,qBAA8BvlS,IAClC/9D,EAAoBl1G,SAAQ,SAAAiF,GAC1B,IAAM+C,EAAW7D,EAAUuJ,MAAK,SAAC1F,GAC/B,OAAOA,EAASC,aAAgBD,EAASC,YAAY1C,UAAUqE,KAAO3E,EAAQM,UAAUqE,MAE1F,GAAI5B,EAAU,CAEZ,UAAUg7B,mBAAmB,mBAAoB,CAC/C9sB,SAAUxC,EAAmBwC,SAC7Bpd,QAAQ,IAAAqV,oBAAmBnG,EAASC,YAAaD,EAAS+C,UAC1DiX,MAAO,EAAC,IAAAwnO,2BAA0BxhP,EAASC,YAAaD,EAAS+C,aAGnEytc,EAAwB7hd,KAAKqR,GAC7B8lB,EAAe9lB,IACX,IAAAwtF,iBAAgBxtF,EAASC,YAAa9D,IACxCA,EAAUnE,SAAQ,SAAAuN,GACZA,EAAMqoF,sBAAwBroF,EAAMqoF,qBAAqBrwF,UAAUqE,KAAO5B,EAASC,YAAY1C,UAAUqE,KAC3G4uc,EAAwB7hd,KAAK4W,GAC7BugB,EAAevgB,OAIrB,IAAI4f,EAAgBsrb,EAAkCzwc,GAClDmlB,IACFqrb,EAAwB7hd,KAAKw2B,GAC7BW,EAAeX,QAIrB6lJ,EAAwBwlS,GACxBhrQ,KAGIirQ,EAAoC,SAACzwc,GACzC,IAAI0wc,EAAiC,KACrC,GAAI1wc,EAAS4tF,qBAAsB,CACjC,IAAI+iX,EAA4B,EAChCx0c,EAAUnE,SAAQ,SAAAuN,GACZA,EAAMqoF,sBAAwBroF,EAAMqoF,qBAAqBrwF,UAAUqE,KAAO5B,EAAS4tF,qBAAqBrwF,UAAUqE,IACpH+uc,OAGAA,EAA4B,IAC9BD,EAAiCv0c,EAAUuJ,MAAK,SAACH,GAC/C,OAAOA,EAAMtF,aAAgBsF,EAAMtF,YAAY1C,UAAUqE,KAAO5B,EAAS4tF,qBAAqBrwF,UAAUqE,OAK9G,OAAO8uc,GAGHE,EAAgC,WACpC,UAAU71a,eAAe,EAAAwB,6BAA6B6F,kCACtDw0B,EAAkB,IAClB4uI,IACAnb,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,MACpB5oC,EAAkBi2G,EAAqBvpK,KAAI,SAAA1B,GAAA,OAAYA,EAASE,WAChEooF,YAAW,WACT3zB,EAAc,EAAA7+B,kBAAkBC,QAC/B,IAIC86a,EAA8B,WAClC,UAAU91a,eAAe,EAAAwB,6BAA6B8F,0BACtDve,EAAUmnJ,GACVD,EAAwB,IACxBw6B,KAaF,OACE,wCACG,SAAC35G,EAAoBy5T,GAArB,OACC,+BAAK9gU,UAAU,uBACZnqF,GAAa28D,IAAsB,EAAA1gC,cAAce,gBAAmB,KACnE,+BAAKmtD,UAAU,4BACb,mCAAQA,UAAW,qCACXkyF,QAAS8uB,GACf,4CAAkB5jM,GAAG,qBAI1Bo1D,IAAsB,EAAA1gC,cAAce,gBACnC,+BAAKmtD,UAAU,4BACb,mCAAQA,UAAW,qCACXkyF,QAASm6R,GACf,4CAAkBjvc,GAAG,6CAGvB,KACHo1D,IAAsB,EAAA1gC,cAAcc,YACnC,mCAAQotD,UAAW,qDAAuDnqF,EAAW,0BAA4B,IACzGq8K,QAAS65R,GACf,4CAAkB3uc,GAAG,qBAErB,KACHo1D,IAAsB,EAAA1gC,cAAce,gBACnC,mCAAQmtD,UAAW,qDAAuDnqF,EAAW,0BAA4B,IACzGq8K,QAASk6R,GACf,4CAAkBhvc,GAAG,sBAErB,KACHo1D,IAAsB,EAAA1gC,cAAcY,cAAgB8/B,IAAsB,EAAA1gC,cAAca,WACvF,+BAAKqtD,UAAW,6BAA+BnqF,EAAW,eAAiB,KACzE,mCAAQmqF,UAAW,sCAAwCnqF,EAAW,0BAA4B,IAC1Fq8K,QAAS,kBAAMy5R,EAAkB,OAAQtkX,EAAoBy5T,KACnE,4CAAkB1jZ,GAAG,wBAEvB,mCAAQ4iF,UAAW,qDAAuDnqF,EAAW,0BAA4B,IACzGq8K,QAAS,kBAAMy5R,EAAkB,MAAOtkX,EAAoBy5T,KAClE,4CAAkB1jZ,GAAIo1D,IAAsB,EAAA1gC,cAAcY,aAAe,qBAAuB,wBAGlG,KACH8/B,IAAsB,EAAA1gC,cAAcgB,mBACnC,+BAAKktD,UAAW,6BAA+BnqF,EAAW,eAAiB,KACzE,mCAAQmqF,UAAW,sCAAwCnqF,EAAW,0BAA4B,IAC1Fq8K,QAAS8uB,GACf,4CAAkB5jM,GAAG,oBAEvB,mCAAQ4iF,UAAW,qDAAuDnqF,EAAW,0BAA4B,IACzGq8K,QAAS,kBA7DC,SAAC7qF,GAC7Bj1B,EAAkB,IAClB4uI,KACA,IAAA55G,gBAAe51B,EAAmB61B,GAClCh/D,IACAqgF,EAAoBl1G,SAAQ,SAAAugB,IAC1B,IAAAqzE,gBAAerzE,EAAgBszE,MAuDAilX,CAAsBjlX,KAC3C,4CAAkBjqF,GAAG,yBAGvB,UAOd0uc,EAAsBx0T,UAAY,CAChC0pD,WAAY,UAAU7sB,KAAK9lE,YAG7B,IAuBMq3E,EAAqB,CACzBnzH,4CACAO,sCACAjB,8CACAO,sCACA9wC,gCACAklJ,kDACAlnJ,sBACA6wC,8BACAK,sCACAnoC,sCACAlH,gDACA0rI,6D,WAGa,IAAA84B,aACb,IAAAzkF,UAvCsB,SAACxzG,GAAU,MAC8BA,EAAM0zG,UAA9D5uC,EAD0B,EAC1BA,kBAAmBO,EADO,EACPA,eAAgBvB,EADT,EACSA,kBACnC37D,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGSnI,EAAM8J,UAMhD,MAAO,CACLg7D,oBACAO,iBACAvB,oBACA37D,WACA8B,UAd+B,EAG1BA,UAYL8uK,qBAf+B,EAGfA,qBAahBr7J,aAZqB1d,EAAMyc,YAAtBiB,aAaLlE,mBAViBxZ,EAAMqN,gBAAlB+B,YAgCkB4oL,EAAzB,CAA6ComR,K,8EC7Q/C,I,IAAA,MACA,OACA,O,IAEA,QACA,Q,IACA,SACA,Q,8DAqDe,IAAA5qW,UAdS,SAACxzG,GAIvB,MAAO,CACL8kE,kBAJ0B9kE,EAAM0zG,UAA3B5uC,kBAKLjlD,eAJqB7f,EAAMqN,mBAQJ,GAIZ,EAlDc,SAAC2lG,GAAU,IAE/BluC,EAAqCkuC,EAArCluC,kBAAmBjlD,EAAkBmzF,EAAlBnzF,eAI1B,IAFoB,CAAC,EAAAukB,cAAcC,KAAM,EAAAD,cAAcG,OAEtC58B,MAAK,SAAA0qY,GAAA,OAAaA,IAAcvtU,KAC/C,OAAO,KAGT,IAAM+6C,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAEzCg/V,EAAc/5Y,EAKlB,OAJK+6C,GAAWhgG,EAAeoI,aAC7B42b,GAA4B,UAI5B,wCACG,SAACxrQ,GAAD,OACC,+BAAK/gH,UAAW,gCAAkCxtB,GAChD,+BAAKwtB,UAAU,0BACb,8BAAIA,UAAU,uCACZ,4CAAkB5iF,GAAA,YAAgBmvc,EAAhB,YAEpB,6BAAGvsX,UAAU,uBACX,4CAAkB5iF,GAAA,YAAgBo1D,EAAhB,WAEpB,mCAA4BuuI,YAAaA,a,8ECtCrD,W,OACA,OACA,O,IAEA,O,IACA,S,IACA,Q,IACA,OAEA,QAIA,QACA,Q,IACA,OAEA,Q,IACA,Q,IACA,SACA,Q,OACA,Q,mDAGA,IA4GMrb,EAAqB,CACzBnzH,4CACAH,uC,WAGa,IAAA8uC,UAnBS,SAACxzG,GAMvB,MAAO,CACL8kE,kBAN0B9kE,EAAM0zG,UAA3B5uC,kBAOLp5D,YANoB1L,EAAMgR,YAArBtF,YAOLgmB,eANuB1xB,EAAMwc,UAAxBkV,eAOL7R,eANqB7f,EAAMqN,mBAeS2qL,EAAzB,EAjHoB,SAAChlF,GAAU,IAErCtnG,EACasnG,EADbtnG,YAAao5D,EACAkuC,EADAluC,kBAAmBD,EACnBmuC,EADmBnuC,qBAAsBH,EACzCsuC,EADyCtuC,kBAAmB2uI,EAC5DrgG,EAD4DqgG,YAAa3hL,EACzEshF,EADyEthF,eAC3F7R,EAAkBmzF,EAAlBnzF,eAEIggG,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAEvCyzF,EAAa,WACjBD,GAAY,WACVxuI,EAAqB,QA8EzB,OACE,+BAAKytB,UAAU,0BA7CE,WACjB,OAAQxtB,GACN,KAAK,EAAA1gC,cAAcC,KACnB,KAAK,EAAAD,cAAcG,MACjB,OACE,wCACGugC,IAAsB,EAAA1gC,cAAcC,KACnC,wCACG,SAACy6a,GAAD,OACC,mCAAQxsX,UAAW,iCACX68O,QACE,uCACE,wCAAch8N,MAAO,UAAaznG,GAAa6wH,WAGnDioD,QAAS,kBA7CR,SAACs6R,GACxB,IAAMvuM,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCwD,oBAChC,EAAAtK,6BAA6BwD,iBACjC,UAAUhF,eAAe0nO,GAEzBj9D,IACIzzF,EACFi/V,IACSj/b,EAAeoI,aACxB,IAAAD,mBAAkBnI,EAAeoI,YAmCE82b,CAAiBD,KACtC,4CAAkBpvc,GAAG,sBAIzB,KACFmwG,GAAW/6C,IAAsB,EAAA1gC,cAAcC,KAC/C,wCACG,SAACmhR,GAAD,OACC,mCAAQlzN,UAAW,iCACX68O,QAAS,wCACT3qJ,QAAS,kBA1CT,SAACghI,GACvB,IAAMj1C,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCyD,mBAChC,EAAAvK,6BAA6ByD,gBACjC,UAAUjF,eAAe0nO,GAErB7+O,GACF4hL,IACA5uI,EAAkB,IAClB8gP,KAEA3gP,EAAqBg7C,EAAU,EAAAz7E,cAAcM,cAAgB,EAAAN,cAAckB,aA+BxCo5W,CAAgBl5F,KACrC,4CAAkB91S,GAAG,qBAN2B,KAWxD,mCAAQ4iF,UAAW,mCACX68O,QAAS,wCACT3qJ,QAAS8uB,GACf,4CAAkB5jM,GAAG,qBAM/B,OAAO,KAKJsvc,Q,8ECjHP,WAEA,SACA,SACA,QACA,Q,WA2Ee,IAAAxrW,UAVS,SAACxzG,GAAU,MAC4CA,EAAMouB,wBACnF,MAAO,CACLU,UAH+B,EAC1BA,UAGLG,aAJ+B,EACfA,aAIhB6L,uBAL+B,EACDA,uBAK9BG,kBAN+B,EACuBA,qBAS3C,EAzEa,SAAC+3E,GAAU,IAE9BlkF,EAAgFkkF,EAAhFlkF,UAAWo5H,EAAqEl1C,EAArEk1C,SAAUj5H,EAA2D+jF,EAA3D/jF,aAAc6L,EAA6Ck4E,EAA7Cl4E,uBAAwBG,EAAqB+3E,EAArB/3E,kBA0DlE,OAAOitH,GAxDiB,WACtB,IAAI+2T,EAAgB,QAChBC,EAAmB,GACnBC,EAAa,GACjB,GAAInvc,OAAOC,UAAU6qB,GACnBmkb,EAAgB,OAChBC,EAAmB,aACd,GAAIlvc,OAAOC,UAAUgrB,GAAoB,CAC9C,IAAMykO,EAAgB5wO,EAAUtb,MAAK,SAAAuoF,GAAA,OAAUA,EAAOrsF,KAAOurB,KAC7D,GAAIykO,EAAe,CACjB,IAAM/iK,GAAgB,IAAAC,cAAY,GAG9BwiX,EAAiB,KAuBrB,GAtBAziX,EAAcnpF,MAAK,SAAAqpF,GACjB,IAAKA,EAAav4E,aAChB,OAAO,EAET,GAAIu4E,EAAav4E,aAAa6e,gBAQ5B,GAPA/mC,OAAOmc,KAAKskF,EAAav4E,aAAa6e,gBAAgBr9B,SAAQ,SAAAs9B,GAC5D,IAAMi8a,EAAkBxiX,EAAav4E,aAAa6e,eAAeC,GAC3Dk8a,EAAa5/M,EAAc7iK,EAAa7uF,OAAS,IAAMo1B,GACzDi8a,GAAmBC,GAAeD,EAAgBh0c,UAAUqE,KAAO4vc,IACrEF,EAAiBC,MAGjBD,EACF,OAAO,OAEJ,GAAIviX,EAAa9uF,aAAgB8uF,EAAa9uF,YAAY1C,UAAUqE,KAAOgwP,EAAc7iK,EAAa7uF,QAE3G,OADAoxc,EAAiBviX,EAAa9uF,aACvB,EAET,OAAO,KAGLqxc,EAAgB,CAClB,IAAMG,EAAqB30c,mBAAmBw0c,EAAe/zc,UAAUm0c,iBAAiB/5c,MAAM,aAAe,GAC7Gw5c,EAAgB,OAChBC,EAAmB,MACnBC,EAAaI,EAAmB,IAAMA,IAK5C,IAAIvjX,GAAS,IAAAL,WAAU1sE,EAAcH,GACjCgtG,EAAW,CACb,UAAa,EAAA62I,4BAA4BtuO,KACzC,cAAiB46a,EACjB,iBAAoBC,EACpB,OAAUljX,EAAS,GACnB,WAAcmjX,IAEhB,IAAAv5J,qBAAoB9pL,U,8EChExB,W,OACA,OACA,OACA,Q,IAEA,QACA,QACA,QACA,Q,IACA,SACA,SACA,SACA,UACA,SACA,QACA,Q,mDAEA,IAqGMk8D,EAAqB,CACzButH,0DACAQ,4DACAlhP,4CACAm0G,yD,WAGa,IAAAif,aACb,IAAAxoC,aAAW,IAAAj8C,UAxBW,SAACxzG,GAAU,IAC1B8kE,EAAqB9kE,EAAM0zG,UAA3B5uC,kBAD0B,EAE6B9kE,EAAMgmT,uBAA7DC,EAF0B,EAE1BA,yBAA0BC,EAFA,EAEAA,0BAC1Bj8S,EAAajK,EAAM8J,UAAnBG,UACD4V,EAAiB7f,EAAMqN,gBAE7B,MAAO,CACLy3D,oBACAqhP,6BAA8BF,EAAA,UAC9BG,iCAAkCF,EAAA,QAClCA,4BACAj8S,YACA4V,oBAYkCm4K,EAAzB,EA7GY,SAAChlF,GAAU,IAE3BluC,EAEoDkuC,EAFpDluC,kBAAmBD,EAEiCmuC,EAFjCnuC,qBAAsBshP,EAEWnzM,EAFXmzM,6BAA8BC,EAEnBpzM,EAFmBozM,iCAC5EF,EACyDlzM,EADzDkzM,0BAA2BX,EAC8BvyM,EAD9BuyM,4BAA6BQ,EACC/yM,EADD+yM,6BAA8BN,EAC7BzyM,EAD6ByyM,iBACtFzsI,EAAyDhmE,EAAzDgmE,2BAA4B/uK,EAA6B+oG,EAA7B/oG,UAAW4V,EAAkBmzF,EAAlBnzF,eAErC4/b,EAAe,SAACplP,GAAD,OAAcA,EAAWA,IAAa,MAEnD/mB,EAAa,WACjBmsQ,GAAa,WACX56Y,EAAqB,SAIzB,IAAAwkD,YAAU,WACH88L,IAAiC,EAAAxzC,4BAA4B/gP,WACjB,kBAApCw0R,IACXb,EAA4B,IAC5BQ,EAA6B,IAC7BlmT,OAAOm0H,wBAAyB,EAC3BoyL,IAC4C,kBAA3CF,EAAA,UACFT,GAAiB,IAEjB,IAAAtuL,kBAAiB+uL,EAAA,eAGrBltI,EAA2B/uK,EAAUyE,QAAO,SAAAZ,GAAA,OAAY,IAAAstF,iBAAgBttF,OACxEwlM,OAGD,CAAC6yG,EAA8BC,IAElC,IAAMy3J,EAAiB,CACrB,EAAAz5a,cAAcK,aAGhB,GAAI,EAAAnhC,qBAAuBwhE,IAAsB+4Y,EAAel2c,MAAK,SAAA0qY,GAAA,OAAaA,IAAcvtU,KAC9F,OAAO,KAGT,IAAM+sY,EAAW,WACf,OAAQ/sY,GACN,KAAK,EAAA1gC,cAAcK,YACjB,MAAO,oBAGX,MAAO,IAGHq5a,EAAiB,WACrB,OAAQh5Y,GACN,KAAK,EAAA1gC,cAAcK,YAEjB,OADgB,IAAA/3B,aAAcmT,EAAeggG,QAEpC,mBAEF/+G,SAASC,SAAS4b,MAAQ,gCAAkC,gCAGvE,MAAO,IAGT,OACE,wCACG,SAAC02L,GAEA,OADAosQ,EAAepsQ,EAEb,+BAAK/gH,UAAU,uDACb,+BAAKA,UAAU,uBACb,8BAAIA,UAAU,4BACZ,4CAAkB5iF,GAAImic,OAExB,6BAAGv/W,UAAU,kBACX,4CAAkB5iF,GAAIouc,QAG1B,kD,8EC9FZ,I,IAAA,MACA,O,IACA,Q,8DAwBe,IAAAtqW,UAPS,WACtB,MAAO,KAIkB,GAEZ,EArBQ,WAWrB,OAAO,mCAAYlhB,UAAU,iBAAiB65N,gBATvB,SAAC4+G,GAAD,OACrB,+BAAKz4U,UAAU,gBACb,gCAAMA,UAAU,yBAAyBy4U,EAAzC,KACA,+BAAKz4U,UAAU,sBACb,+BAAKv2E,MAAO,CAAC1U,MAAO0ja,EAAU,MAAOz4U,UAAU,qC,8ECXvD,I,IAAA,MACA,OACA,O,IAEA,O,IAEA,QACA,QACA,Q,mDAIA,IA4DM0lG,EAAqB,CACzBnzH,qBAhEF,MAgEEA,qBACAlqC,uC,WAGa,IAAA64E,UAbS,SAACxzG,GAAU,MACcA,EAAM0zG,UACrD,MAAO,CACL5vC,kBAH+B,EAC1BA,kBAGLgB,kBAJ+B,EACPA,qBAYYkzH,EAAzB,EAjEgB,SAAChlF,GAAU,IAEjClvC,EAAiFkvC,EAAjFlvC,kBAAmBgB,EAA8DkuC,EAA9DluC,kBAAmBD,EAA2CmuC,EAA3CnuC,qBAAsBlqC,EAAqBq4E,EAArBr4E,kBAE7Dw3W,EAAc,CAAC,EAAA/tW,cAAciB,oBACnC,IAAKy/B,IAAsBqtU,EAAYxqY,MAAK,SAAA0qY,GAAA,OAAaA,IAAcvtU,KACrE,OAAO,KAGT,IAAMwuI,EAAa,SAACD,GAClBA,GAAY,WACVxuI,EAAqB,QAazB,OACE,mCAAaytB,UAAU,wBACpB,SAAC+gH,GAAD,OACC,+BAAK/gH,UAAU,mCACb,+BAAKA,UAAU,uBACb,8BAAIA,UAAU,4BACZ,4CAAkB5iF,GAAI,8BAExB,6BAAG4iF,UAAU,kBACX,4CAAkB5iF,GAAI,8BAG1B,+BAAK4iF,UAAW,uBACd,mCAAQA,UAAW,sDACXkyF,QAAS,kBAAM8uB,EAAWD,KAChC,4CAAkB3jM,GAAG,oBAEvB,mCAAQ4iF,UAAW,oDACXkyF,QAAS,kBA3BK,SAAC6uB,GAC3BvvI,IACFA,EAAkBm9K,8BAClBn9K,EAAkBqqC,cAClBxzE,KAEF24K,EAAWD,GAqBoBqsQ,CAAwBrsQ,KAC7C,4CAAkB3jM,GAAI,oD,8ECvDpC,W,OACA,O,IAEA,QAEA,QACA,Q,IACA,S,IACA,S,IACA,SACA,SACA,QACA,S,mDAGA,IAkEMsoL,EAAqB,CACzBnzH,4CACAH,sCACAitO,sDACAzsF,2C,WAGa,IAAA1xG,UAzBS,SAACxzG,GAAU,MACWA,EAAM0zG,UAA3C5uC,EAD0B,EAC1BA,kBAAmBO,EADO,EACPA,eACnBl9D,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGwBnI,EAAMo5B,wBAI/D,MAAO,CACL0rC,oBACAO,iBACAl9D,WACAypS,uBAX+B,EAG1BA,uBASLE,uBAZ+B,EAGFA,uBAU7B3sF,iBATyBnlN,EAAMwc,UAA1B2oM,iBAULtlM,eATqB7f,EAAMqN,mBAoBS2qL,EAAzB,EAzEU,SAAChlF,GAAU,IAE3BluC,EAC0DkuC,EAD1DluC,kBAAmBD,EACuCmuC,EADvCnuC,qBAAsB+sO,EACiB5+L,EADjB4+L,uBAAwBE,EACP9+L,EADO8+L,uBAAwB5sF,EAC/BlyG,EAD+BkyG,oBAC9FC,EAA+DnyG,EAA/DmyG,iBAAkBwsF,EAA6C3+L,EAA7C2+L,0BAA2B9xR,EAAkBmzF,EAAlBnzF,eAE/C,GAAIilD,IAAsB,EAAA1gC,cAAckB,YACtC,OAAO,KAGT,IAcIgtD,EAAY,8BAQhB,OAPIs/M,IACFt/M,GAAa,6BAA0D,IAA3Bw/M,EAA+B,mBAAqB,8BAE9FjyR,EAAe0nI,SAKjB,mCAAaj1D,UAAU,sBAAsB4gH,eAAe,eACzD,SAACG,GAAD,OACC,wCACGu+F,EAAyB,wCAA4B,KACtD,+BAAKt/M,UAAWA,GACd,+BAAKA,UAAU,cACb,mCAAyBghH,WAAY,kBA7B9B,SAACD,GAClBA,GAAY,WACVxuI,EAAqB,IACjB+sO,GACFD,GAA0B,GAExBxsF,IAAqB,EAAAt9J,iBAAiBC,OAASq9J,IAAqB,EAAAt9J,iBAAiBE,QACvFquC,YAAW,WACT8uH,EAAoB,EAAAr9J,iBAAiBxgB,YACpC,QAoB8CisK,CAAWD,MACtD,mCAAqBxzL,eAAgBA,c,8ECtDnD,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,O,IACA,QAEA,QACA,Q,IACA,Q,IACA,S,IACA,SACA,Q,IACA,S,IACA,S,IACA,SACA,QACA,S,EACA,S,mDAGA,IAAM8/b,EAA0B,SAAC3sW,GAAU,IAElCmyG,EAAmFnyG,EAAnFmyG,iBAAkB7R,EAAiEtgG,EAAjEsgG,WAAYnxL,EAAqD6wF,EAArD7wF,KAAM4iD,EAA+CiuC,EAA/CjuC,kBAAmB58D,EAA4B6qG,EAA5B7qG,SAAU0X,EAAkBmzF,EAAlBnzF,eAClErG,EAAqBqG,EAAezQ,SAHD,GAKY,IAAA6gI,mBAA9C6D,EALkC,EAKlCA,UAAW5D,EALuB,EAKvBA,cAAe6D,EALQ,EAKRA,iBAE3B6rU,EAAcpmc,EAAmB8oQ,gBAAkBv9M,GAA2C,cAAtBA,IACxEogJ,IAAqB,EAAAt9J,iBAAiBxgB,UAAY89K,IAAqB,EAAAt9J,iBAAiBzgB,OAExFyqa,EAAW,WACf,OAAQ1sP,GACN,KAAK,EAAAt9J,iBAAiBzgB,MACpB,OAAIw4a,EACK,mCACE1vU,EACF,+BAEF,6BACT,KAAK,EAAAroF,iBAAiBxgB,SACpB,OAAIu4a,EACK,mCACE76Y,GAAqB3oE,OAAOmc,KAAP,iBAA2B5Q,MAAK,SAAAo3G,GAAA,OAAUh6C,IAAsBg6C,KACvF,+BACEvlG,EAAmB+qK,YACrB,kCACEr0C,EACL6D,EACK,6BAEFD,EACH3rI,EAAW,yCAA2C,kCACtD,0CAEC,6BACT,KAAK,EAAA0/C,iBAAiBC,MACpB,MAAO,+BACT,KAAK,EAAAD,iBAAiBE,OACpB,MAAO,gCACT,KAAK,EAAAF,iBAAiBG,MACpB,MAAO,+BACT,KAAK,EAAAH,iBAAiBI,YACpB,MAAO,gCACT,QACE,MAAO,KA+CP4oM,EA3Cc,WAClB,OAAQ1rC,GACN,KAAK,EAAAt9J,iBAAiBzgB,MACtB,KAAK,EAAAygB,iBAAiBxgB,SACpB,OAAIxnB,EAAe0nI,SACV,mCAELq4T,EACK,GACE76Y,GAAqB3oE,OAAOmc,KAAP,iBAA2B5Q,MAAK,SAAAo3G,GAAA,OAAUh6C,IAAsBg6C,KACvF,kCACEmxB,EACF6D,EAAmB,uCAAyC,4BAE9DoxE,IAAqB,EAAAt9J,iBAAiBzgB,MAAQ,0CAA4C,oCACnG,KAAK,EAAAygB,iBAAiBE,OACpB,MAAO,mCACT,KAAK,EAAAF,iBAAiBG,MACpB,MAAO,4BACT,KAAK,EAAAH,iBAAiBI,YACpB,MAAO,mCACT,QACE,MAAO,IAqBI43Z,GAEjB,OACE,wCACG,SAACnzL,EAAiBkhD,GAAlB,OACC,+BAAKt7O,UAAU,oBACb,kCAAQA,UAAW,sBAAwB6yH,IAAqB,EAAAt9J,iBAAiBC,MAAQ,2BAA6B,KACnHooF,EACC,+BAAK59C,UAAU,2BACb,mCAAS/nC,SAAU,WACjB,yCAAe+nC,UAAU,sBAG3B,KACJ,+BAAKA,UAAW,8BAAgCstX,EAAc,yCAA2C,KACtG//b,EAAe0nI,SACd,+BAAKj1D,UAAU,sBACb,+BAAKA,UAAU,2BACb,8BAAIA,UAAW,wBAA0B49C,EAAgB,mBAAqB,KAA9E,eACc,mCADd,6BAIF,+BAAK59C,UAAW,2BAA6B49C,EAAgB,wCAA0C,KACrG,+BAAKxgI,GAAG,eAAejJ,IAAI,8DAA8Dm1M,IAAI,gCAAgC9sJ,QAAQ,YAIzI,8BAAIwjC,UAAU,wBACZ,4CAAkB5iF,GAAImic,OAGzB+N,EACC,8BAAIttX,UAAU,wBACZ,4CAAkB5iF,GAAG,uCAErB,KACHmhP,EACC,6BAAGv+J,UAAW,wCACTzyE,EAAe0nI,SAAW,mDAAqD,KAClF,4CAAkB73I,GAAImhP,KAEtB,KACJ,+BAAKv+J,UAAU,4BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAU,6BACVkyF,QAAS8uB,GACnB,4CAKR,+BAAKhhH,UAAW,iCAAmC6yH,IAAqB,EAAAt9J,iBAAiBC,MAAQ,8BAAgC,KApEtH,SAAC4kO,GAClB,OAAQvnE,GACN,KAAK,EAAAt9J,iBAAiBzgB,MACtB,KAAK,EAAAygB,iBAAiBxgB,SACtB,KAAK,EAAAwgB,iBAAiBE,OACpB,OAAO,mCAA+B2kO,gBAAiBA,IACzD,KAAK,EAAA7kO,iBAAiBC,MACpB,OAAO,wCACT,KAAK,EAAAD,iBAAiBG,MACpB,OAAO,mCAAuB0kO,gBAAiBA,IACjD,KAAK,EAAA7kO,iBAAiBI,YACpB,OAAO,mCAA6BqrJ,WAAYA,IAClD,QACE,OAAO,MAwDFwsQ,CAAWpzL,KAEb7sQ,EAAe0nI,UAAiC,EAAA1/F,iBAAiBxgB,SAAuD,MAClG,cAAtB09B,EACG,KACA,mCAAwB6oQ,uBAAwBA,EAAwBt6H,WAAYA,SAOlGqsQ,EAAwB/1T,UAAY,CAClC0pD,WAAY,UAAU7sB,KAAK9lE,YAG7B,IAcMq3E,EAAqB,CACzBnzH,4CACAH,uC,WAGa,IAAA+qF,aACb,IAAAj8C,UApBsB,SAACxzG,GAMvB,MAAO,CACLmlN,iBANyBnlN,EAAMwc,UAA1B2oM,iBAOLpgJ,kBAN0B/kE,EAAM0zG,UAA3B3uC,kBAOL58D,SANiBnI,EAAMgR,YAAlB7I,SAOL0X,eANqB7f,EAAMqN,mBAgBJ2qL,EAAzB,CAA6C2nR,K,8EC1M/C,W,OACA,O,IACA,MACA,O,IAEA,Q,IACA,O,IACA,Q,IACA,S,IAEA,Q,IACA,QACA,QACA,S,mDAGA,IAAMI,EAAgC,SAAC/sW,GAAU,IAExCmyG,EAA0DnyG,EAA1DmyG,iBAAkBunE,EAAwC15K,EAAxC05K,gBAAiBxnE,EAAuBlyG,EAAvBkyG,oBAEpC86P,EAA0B,WAC9B96P,EAAoBC,IAAqB,EAAAt9J,iBAAiBE,OAAS,EAAAF,iBAAiBzgB,MAAQ,EAAAygB,iBAAiBE,SAG/G,OACE,mCAAWuqC,UAAU,oBAClB6yH,IAAqB,EAAAt9J,iBAAiBxgB,SACrC,wCACE,mCAAe/nC,SAAU,YAAaotR,gBAAiBA,EAAiB0C,QAAQ,IAChF,mCAAoB9vR,SAAU,cAAeotR,gBAAiBA,EAAiB0C,QAAQ,KAEvF,KACJ,mCAAe9vR,SAAS,QAAQotR,gBAAiBA,EAAiB0C,QAAQ,IACzEjqE,IAAqB,EAAAt9J,iBAAiBxgB,SACnC,mCAAe/nC,SAAS,SAASotR,gBAAiBA,EAAiB0C,QAAQ,IAC3E,KACHjqE,IAAqB,EAAAt9J,iBAAiBzgB,MACnC,mCAAe9nC,SAAS,WAAWotR,gBAAiBA,EAAiB0C,QAAQ,IAC7E,KACHjqE,IAAqB,EAAAt9J,iBAAiBzgB,OAAS+9K,IAAqB,EAAAt9J,iBAAiBE,OACpF,mCACGo9J,IAAqB,EAAAt9J,iBAAiBE,OACrC,+BAAKuqC,UAAU,mBAAoBkyF,QAASw7R,GAC1C,mCAAS1tX,UAAU,yBACjB,yCAEF,4CAAkB5iF,GAAG,kBAErB,KACHy1M,IAAqB,EAAAt9J,iBAAiBzgB,MACrC,+BAAKkrD,UAAU,mBAAoBkyF,QAASw7R,GAC1C,mCAAS1tX,UAAU,yBACjB,yCAEF,4CAAkB5iF,GAAG,iCAErB,MAEJ,OAKVqwc,EAA8Bn2T,UAAY,CACxC8iI,gBAAiB,UAAU5iI,KAAKnpC,YAGlC,IAQMq3E,EAAqB,CACzBktB,2C,WAGa,IAAA1xG,UAZS,SAACxzG,GAGvB,MAAO,CACLmlN,iBAHyBnlN,EAAMwc,UAA1B2oM,oBAW+BntB,EAAzB,CAA6C+nR,I,+EC/E5D,W,OACA,OACA,O,IACA,M,IAEA,O,IACA,SAEA,QACA,S,IACA,SACA,Q,mDAEA,IAAME,EAAyB,SAACjtW,GAAU,IAEjCmyG,EAAuFnyG,EAAvFmyG,iBAAkByoH,EAAqE56N,EAArE46N,uBAAwB1oH,EAA6ClyG,EAA7CkyG,oBAAqB5R,EAAwBtgG,EAAxBsgG,WAAYnrM,EAAY6qG,EAAZ7qG,SAE5E+3c,EAAe,WACnBh7P,EAAoB,EAAAr9J,iBAAiBC,QAOjCq4Z,EAAgBh7P,IAAqB,EAAAt9J,iBAAiBzgB,OAAS+9K,IAAqB,EAAAt9J,iBAAiBxgB,SAE3G,OACE,wCACE,+BAAKirD,UAAW,sBAAwB6tX,EAAgB,6BAA+B,KACpFA,EAAgB,KACf,wCACE,+BAAK7tX,UAAU,2BACb,+BAAKA,UAAU,mBAAoBkyF,QAZtB,WACvB0gC,EAAoBC,IAAqB,EAAAt9J,iBAAiBxgB,SAAW,EAAAwgB,iBAAiBzgB,MAAQ,EAAAygB,iBAAiBxgB,YAYnG,+BAAKirD,UAAU,yBACb,4CAAkB5iF,GAAIy1M,IAAqB,EAAAt9J,iBAAiBxgB,SAAW,6BAA+B,mCAExG,mCAASirD,UAAU,yBAChB6yH,IAAqB,EAAAt9J,iBAAiBxgB,SAAW,wCAAuB,kDAE3E,4CAAkB33B,GAAIy1M,IAAqB,EAAAt9J,iBAAiBxgB,SAAW,+BAAiC,sCAG3G89K,IAAqB,EAAAt9J,iBAAiBxgB,UAAal/B,EAMhD,KALF,+BAAKmqF,UAAU,0BAA0BkyF,QAAS07R,GAChD,gCAAM5tX,UAAU,oBACd,4CAAkB5iF,GAAG,sCAM/B,mCAA8Bk+T,uBAAwBA,EAAwBt6H,WAAYA,KAE3F6R,IAAqB,EAAAt9J,iBAAiBxgB,UAAYl/B,EACjD,+BAAKmqF,UAAU,qBAAqBkyF,QAAS07R,GAC3C,gCAAM5tX,UAAU,oBACd,4CAAkB5iF,GAAG,qCAGvB,OAcVuwc,EAAuBr2T,UAAY,CACjCgkL,uBAAwB,UAAUnnJ,KAAK9lE,WACvC2yF,WAAY,UAAU7sB,KAAK9lE,YAG7B,IAAMq3E,EAAqB,CACzBktB,2C,WAGa,IAAA1xG,UAlBS,SAACxzG,GAGvB,MAAO,CACLmlN,iBAHyBnlN,EAAMwc,UAA1B2oM,iBAILh9M,SAHiBnI,EAAMgR,YAAlB7I,YAgB+B6vL,EAAzB,CAA6CioR,I,yGCnF5D,O,OACA,OACA,OACA,Q,IACA,M,IAEA,O,IACA,SAEA,QACA,SACA,QACA,QACA,SAKA,UACA,QACA,SACA,Q,mDAEA,IAAMG,EAA+B,SAACptW,GAAU,IAEvCmyG,EAC8FnyG,EAD9FmyG,iBAAkByoH,EAC4E56N,EAD5E46N,uBAAwB1oH,EACoDlyG,EADpDkyG,oBAAqB5R,EAC+BtgG,EAD/BsgG,WAAY95L,EACmBw5F,EADnBx5F,mBAChFsD,EAAmGk2F,EAAnGl2F,uBAAwBrU,EAA2EuqG,EAA3EvqG,SAAUipB,EAAiEshF,EAAjEthF,eAAgBo5W,EAAiD93R,EAAjD83R,aAAc1lL,EAAmCpyG,EAAnCoyG,aAAcrgJ,EAAqBiuC,EAArBjuC,kBAEzEmrE,GAAiB,IAAAD,mBAAjBC,cACD0vU,EAAcpmc,EAAmB8oQ,gBAAkBv9M,GAA2C,cAAtBA,IACxEogJ,IAAqB,EAAAt9J,iBAAiBxgB,UAAY89K,IAAqB,EAAAt9J,iBAAiBzgB,QAE9F,IAAAiiF,YAAU,WACH87F,IAAqB,EAAAt9J,iBAAiBzgB,OAAS+9K,IAAqB,EAAAt9J,iBAAiBxgB,WAAa3V,GAAmB5U,GACxHujc,MAGD,CAACl7P,IAEJ,IAQM,EAQA,EAQA,EAxBAk7P,EAAqB,WACzB,SAAI7mc,EAAmBwuC,OAAUlrC,KAC/BooM,EAAoB,EAAAr9J,iBAAiBG,QAC9B,IAKLs4Z,GAAA,gCAAuB,0FACrB/vM,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCoF,gCAChC,EAAAlM,6BAA6B+D,qCAEjC,IAAAqkW,iBAAgB3H,EAAcv6H,EAAgB9nQ,EAAUipB,EAAgB,EAAG0zL,GALhD,kDAAvB,4CAQAm7P,GAAA,gCAAyB,0FACvBhwM,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCqF,iCAChC,EAAAnM,6BAA6BgE,sCAEjC,IAAAokW,iBAAgB3H,EAAcv6H,EAAgB9nQ,EAAUipB,EAAgB,EAAG0zL,GAL9C,kDAAzB,4CAQA64P,GAAA,gCAAoB,sGAElBuC,EAAYz7Y,GAAqB3oE,OAAOmc,KAAP,iBAA2B5Q,MAAK,SAAAo3G,GAAA,OAAUh6C,IAAsBg6C,KAF/E,KAIhBomG,EAJgB,cAKjB,EAAAt9J,iBAAiBxgB,SALA,SA0BjB,EAAAwgB,iBAAiBzgB,MA1BA,UA6CjB,EAAAygB,iBAAiBC,MA7CA,UAgDjB,EAAAD,iBAAiBE,OAhDA,UAuDjB,EAAAF,iBAAiBG,MAvDA,UA0DjB,EAAAH,iBAAiBI,YA1DA,0BAMd6rW,EANc,+CAMS,2GACA,IAAAhmF,wBADA,UACrB2yI,EADqB,QAEvBJ,IAFuB,0CAGlB,GAHkB,UAK3B/sQ,KACIktQ,IAAaC,EANU,iCAOnB,IAAA5hX,mBAAkB95B,EAAmB,IAAI,EAAO07Y,EAAaliX,UAP1C,kDANT,qDAgBdgyK,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCkF,yBAChC,EAAAhM,6BAA6B6D,6BAlBb,UAmBK,IAAA8/R,2BAA0BJ,EAAwBr9D,EAAgBujJ,GAnBvE,4DAqBX,GArBW,yBAuBdA,IAvBc,mDA2BdvjJ,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCiF,sBAChC,EAAA/L,6BAA6B4D,0BA7Bb,WA8BQ,IAAA0/R,wBAAuBC,EAAwBr9D,GA9BvD,YA8Bds9D,EA9Bc,UA+BEA,EAAcluU,MA/BhB,wBAgClBD,QAAQC,MAAM,yCAA0CkuU,GAhCtC,mBAiCX,GAjCW,0BAmCO,IAAAC,wBAnCP,WAmCd2yI,EAnCc,OAoCf5yI,EAAc/wT,yBAA0Bujc,IApCzB,2CAqCX,GArCW,WAuCpB/sQ,KACIktQ,IAAaC,EAxCG,mCAyCZ,IAAA5hX,mBAAkB95B,EAAmB,IAAI,EAAO07Y,EAAaliX,UAzCjD,mDA8CpB2mH,EAAoB,EAAAr9J,iBAAiBxgB,UA9CjB,oCAiDdkpO,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCmF,+BAChC,EAAAjM,6BAA6B8D,mCAnDb,WAoDd,IAAA+/R,2BAA0BN,EAAwBr9D,GApDpC,mDAwDpBrrD,EAAoB,EAAAr9J,iBAAiBI,aAxDjB,8CA2Ddq4Z,IA3Dc,+FAApB,4CAwGN,OACE,wCACGn7P,IAAqB,EAAAt9J,iBAAiBI,YACrC,+BAAKqqC,UAAU,+DACb,mCAAQA,UAAU,6FACVkyF,QAAS+7R,GACf,4CAAkB7wc,GAAG,gDAGvB,KACJ,+BAAK4iF,UAAU,2BACb,mCAAQA,UAAW,uDACd6yH,IAAqB,EAAAt9J,iBAAiBE,OACrC,oBACA63Z,EAAc,GAAK,sBACpBz6P,IAAqB,EAAAt9J,iBAAiBI,YAAc,0BAA4B,yBAC7EmnP,UAAWwwK,EAAc,wCAA8B,KACvDp7R,QAASy5R,GACf,4CAAkBvuc,GAvDE,WAC1B,OAAQy1M,GACN,KAAK,EAAAt9J,iBAAiBzgB,MACpB,OAAIw4a,EACK,mCACE76Y,GAAqB3oE,OAAOmc,KAAP,iBAA2B5Q,MAAK,SAAAo3G,GAAA,OAAUh6C,IAAsBg6C,KACvF,+BACEvlG,EAAmB+qK,YACrB,4BACEr0C,EACF,+BAEF,oCACT,KAAK,EAAAroF,iBAAiBxgB,SACtB,QAIE,OAAIu4a,EACK,mCACE76Y,GAAqB3oE,OAAOmc,KAAP,iBAA2B5Q,MAAK,SAAAo3G,GAAA,OAAUh6C,IAAsBg6C,KACvF,+BACEvlG,EAAmB+qK,YACrB,4BAEF,oCACT,KAAK,EAAA18H,iBAAiBC,MACpB,MAAO,eACT,KAAK,EAAAD,iBAAiBE,OACpB,MAAO,gCACT,KAAK,EAAAF,iBAAiBG,MACpB,MAAO,eACT,KAAK,EAAAH,iBAAiBI,YACpB,MAAO,4CAsBiBy4Z,SAyBhCN,EAA6Bx2T,UAAY,CACvCgkL,uBAAwB,UAAUnnJ,KAAK9lE,WACvC2yF,WAAY,UAAU7sB,KAAK9lE,YAG7B,IAAMq3E,EAAqB,CACzBktB,0CACAE,6B,WAGa,IAAAntB,aACb,IAAAzkF,UA7BsB,SAACxzG,GAAU,MAC+BA,EAAMwc,UAA/D2oM,EAD0B,EAC1BA,iBAAkB18M,EADQ,EACRA,SAAUipB,EADF,EACEA,eAAgB2zL,EADlB,EACkBA,UAC5Cj2M,EAAYpP,EAAMqN,gBAAlB+B,SACA0N,EAA0B9c,EAAMwc,UAAhCM,uBAIP,MAAO,CACLqoM,mBACA18M,WACAipB,iBACAo5W,aAPqBzlL,EAAhBylL,aAQLtxX,mBAAoBpK,EACpB0N,yBACAioD,kBAT0B/kE,EAAM0zG,UAA3B3uC,qBAwBkBizH,EAAzB,CAA6CooR,K,+EC7N/C,I,IAAA,M,IACA,M,IAEA,Q,IACA,Q,IACA,Q,mDAEA,IAAMO,EAAwB,SAAC3tW,GAAU,IAEhC05K,EAAmB15K,EAAnB05K,gBAEP,OACE,mCAAWp6L,UAAU,oBACnB,+BAAKA,UAAU,mBACb,+BAAKA,UAAU,yBACb,mCAAoBhzF,SAAU,cAAeotR,gBAAiBA,KAEhE,+BAAKp6L,UAAU,uDACb,mCAAehzF,SAAU,SAAUotR,iBAAiB,IADtD,QAQRi0L,EAAsB/2T,UAAY,CAChC8iI,gBAAiB,UAAU5iI,KAAKnpC,Y,UAGnBggW,G,8EC7Bf,W,OACA,O,IACA,M,IAEA,QAEA,SACA,QACA,QACA,U,0DAEA,IAAMC,EAA8B,SAAC5tW,GAAU,IAEtCoyG,EAAoEpyG,EAApEoyG,aAAc1zL,EAAsDshF,EAAtDthF,eAAgBjpB,EAAsCuqG,EAAtCvqG,SAAUqiY,EAA4B93R,EAA5B83R,aAAcx3L,EAActgG,EAAdsgG,WAW7D,OATA,IAAAjqF,YAAU,WACR,IAAMknJ,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCoF,gCAChC,EAAAlM,6BAA6B+D,qCAEjC,IAAAqkW,iBAAgB3H,EAAcv6H,EAAgB9nQ,EAAUipB,EAAgB,EAAG0zL,KAE1E,IAGD,mCAAW9yH,UAAU,oBACnB,mCAAgBghH,WAAYA,MAKlCstQ,EAA4Bh3T,UAAY,CACtC0pD,WAAY,UAAU7sB,KAAK9lE,YAG7B,IAWMq3E,EAAqB,CACzBotB,6B,WAGa,IAAA5xG,UAfS,SAACxzG,GAAU,MACaA,EAAMwc,UAGpD,MAAO,CACL/T,SAL+B,EAC1BA,SAKLipB,eAN+B,EAChBA,eAMfo5W,aAP+B,EACAzlL,UAC1BylL,gBAa+B9yM,EAAzB,CAA6C4oR,I,8EClD5D,I,IAAA,MACA,OACA,O,IAEA,Q,mDAIA,IA4BM5oR,EAAqB,CACzBstB,aAhCF,OAgCEA,c,WAGa,IAAA9xG,UAXS,SAACxzG,GAEvB,MAAO,CACLulN,MAFcvlN,EAAMwc,UAAf+oM,SAU+BvtB,EAAzB,EAhCuB,SAAChlF,GAAU,IAExCuyG,EAAuBvyG,EAAvBuyG,MAAOD,EAAgBtyG,EAAhBsyG,aAMd,OACE,6BAAGhzH,UAAU,iBACX,mCACE8qI,QAAS7X,EACTiY,SARmB,WACvBlY,GAAcC,MASZ,gCAAMjzH,UAAU,kBACd,4CAAkB5iF,GAAG,iC,8ECvB7B,I,IAAA,MACA,O,IAEA,OAEA,Q,IACA,SACA,QACA,Q,6DAG4B,SAACsjG,GAAU,IAE9BnzF,EAAkBmzF,EAAlBnzF,eAEP,OACE,+BAAKyyE,UAAU,qBACb,+BAAKA,UAAU,sBACb,mCAA0BA,UAAU,wDAEtC,+BAAKA,UAAW,mBAAqBzyE,EAAeM,UAAYN,EAAe0nI,SAAW,0BAA4B,KACpH,+BAAKj1D,UAAU,wBACb,mCAASv2E,MAAO,CAAEwuC,SAAU,YAC1B,wDAGJ,6BAAG+nC,UAAU,yBACX,4CAAkB5iF,GAAG,gCAAgCmO,OAAQ,CAC3D1a,gBAAgB,IAAAyX,yBAAuB,IAAA9W,gCAG1C+b,EAAeM,UAAYN,EAAe0nI,SAAW,KACpD,6BAAGj1D,UAAU,6BACX,4CAAkB5iF,GAAG,0C,mHCjCjC,O,OACA,O,IACA,MAEA,QACA,QACA,SACA,S,IACA,O,mDAGA,IAAMmxc,EAA2B,SAAC7tW,GAAU,IAEnCqvM,EAAiDrvM,EAAjDqvM,UAAW/vN,EAAsC0gB,EAAtC1gB,UAAW82B,EAA2BpW,EAA3BoW,wBACvB0+B,GAAY,IAAAF,gBAEZhlI,GAAS,IAAAC,oBAL2B,GAMF,IAAAgmI,UACtCjmI,EAAO8qR,kBAAoB9qR,EAAO8qR,iBAAiB9qR,EAAO9P,MAAQ8P,EAAO8qR,iBAAiB9qR,EAAO9P,MAAQ,IAPjE,qBAMnCvH,EANmC,KAMrBiwM,EANqB,KAuB1C,OAbA,IAAAnyF,YAAU,WAEN,IAAM,GADH99G,GAAgB69G,IACb,gCAAqB,2GACF,IAAAihE,2BAA0BznK,GADxB,OACnBinF,EADmB,OAErBi+C,KAEF0zD,EAAgB3xG,GAAYA,EAAZA,gDAJO,kDAArB,4CAOai+C,KAEpB,CAAC1+B,IAEC79G,GAAiB69G,EAIlBi5L,EACK,+BAAK57S,IAAK8E,EAAc+mF,UAAWA,GAAa,GAAIspH,IAAI,iBAG1D,+BAAKtpH,UAAWA,GAAa,GAAIv2E,MAAO,CAACy3E,gBAAiBA,OAAOjoF,EAAxB,OAPvC,yCAUXs1c,EAAyBj3T,UAAY,CACnCy4J,UAAW,UAAUv4J,KACrBx3D,UAAW,UAAUpoD,Q,WAUR,IAAAspE,UAPS,SAACxzG,GAEvB,MAAO,CACLopH,wBAF0BppH,EAAMgR,YAA3BkiG,kBAEsC/2G,UAIhC,CAAyB0kd,I,8ECzDxC,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,S,IACA,SAEA,Q,IACA,SACA,QACA,Q,mDAGA,IAAMC,EAAwB,SAAC9tW,GAAU,IAEhC8+L,EAAqD9+L,EAArD8+L,uBAAwBr5R,EAA6Bu6F,EAA7Bv6F,UAAWksD,EAAkBquC,EAAlBruC,eAcpC2tB,EAAY,sCACbw/M,GAA2BA,IAA2Br5R,EAAa,wBAA0B,KAC7FA,GAAcA,EAAYq5R,EAA0B,qBAAuB,KAC3Er5R,EAAYq5R,EAAyB,wBAA0B,KACpC,IAA3BA,EAA+B,QAAU,IAExC3uS,GAAiB,IAAAW,2BAEvB,OACE,+BAAK5E,IAAKuZ,EAAW65E,UAAWA,GAC9B,+BAAKA,UAAW,sCAAwC75E,IACxD,+BAAK65E,UAAU,kBACb,+BAAKA,UAAU,kDACb,mCAASv2E,MAAO,CAAEwuC,SAAU,YAzBpB,WACd,OAAQunP,GACN,KAAK,EACH,OAAO,6CACT,KAAK,EACH,OAAO,wCACT,KAAK,EACL,QACE,OAAO,yCAkBF2nG,KAGL,8BAAInnT,UAAU,wBACZ,4CAAkB5iF,GAAI,oBAAsB+I,EAAY,UAAYksD,IAAmB,EAAA1nD,OAAOE,KAAO,QAAU,IAC7FU,OAAQ,CAAC1a,qBAE7B,6BAAGmvF,UAAU,uBACX,4CAAkB5iF,GAAI,oBAAsB+I,EAAY,QACtCoF,OAAQ,CAAC1a,qBAE7B,gCAAMmvF,UAAU,8BACd,4CAAkB5iF,GAAG,gCACrB,4CAOVoxc,EAAsBl3T,UAAW,CAC/BnxI,UAAW,UAAU6nG,OAAOK,Y,WAaf,IAAAnN,UAVS,SAACxzG,GAIvB,MAAO,CACL8xS,uBAJ+B9xS,EAAMo5B,wBAAhC04Q,uBAKLntO,eAJuB3kE,EAAM0zG,UAAxB/uC,kBAQM,CAAyBm8Y,I,gFC/ExC,W,OACA,O,IAEA,QACA,Q,IACA,SACA,Q,mDAEA,IAmDM9oR,EAAqB,CACzBtwH,mD,WAIA,IAAA8rC,UAhBsB,SAACxzG,GAAU,MACgCA,EAAM0zG,UAEvE,MAAO,CACLtvC,mBAJ+B,EAC1BA,mBAILuD,qBAL+B,EACNA,qBAKzBzE,aAN+B,EACgBA,aAM/C/6D,SALiBnI,EAAMgR,YAAlB7I,YAckB6vL,EAAzB,EAxD2B,SAAChlF,GAAU,IAE/BrrC,EAAqEqrC,EAArErrC,qBAAsBD,EAA+CsrC,EAA/CtrC,wBAAyBtD,EAAsB4uC,EAAtB5uC,mBAC/CnsC,EAA+B0vC,EAA/B1vC,QAASi4S,EAAsBvoQ,EAAtBuoQ,SAAUwW,EAAY/+Q,EAAZ++Q,UAG1B,IAAAr9N,YAAU,YACHjlD,GAAsBnsC,GACzB8ob,MAGD,CAAC38Y,IAEJ,IAAM28Y,EAAgB,WACpBr5Y,EAAwB,CACtBzvC,SAAS,EACTi4S,UAAU,EACV7vO,YAAa,KACbqmP,UAAU,EACV95U,IAAK,KACL4sC,KAAM,KACNjyC,OAAQ,KACRF,MAAO,QAIX,OAAK4wB,GAAWi4S,EACP,KAIP,mCACE1rJ,QAASu8R,EACTzuX,UAAW,oCAAsCo0P,EAAW,uCAAyC,KAChG,EAAApjV,mBAAqB,oCAAsC,MAC/D,kBAAM,+C,8EC3Cb,I,IAAA,MACA,O,IAEA,Q,IACA,SACA,Q,mDAEA,IAAM09c,EAAsB,a,WAmD1B,IAAAxtW,UAbsB,SAACxzG,GAAU,MACYA,EAAM0zG,UAA5C/rC,EAD0B,EAC1BA,qBAAsBzE,EADI,EACJA,aACtB5qD,EAAoBtY,EAAMqY,YAA1BC,iBAEP,MAAO,CACLqvD,uBACAzE,eACA/6D,SAJiBnI,EAAMgR,YAAlB7I,SAKLmQ,sBAKF,EAjD2C,SAAC06F,GAAU,IAE/CrrC,EAA0CqrC,EAA1CrrC,qBAAsBrvD,EAAoB06F,EAApB16F,iBACtBkhC,EAAyCmuB,EAAzCnuB,KAAM5sC,EAAmC+6D,EAAnC/6D,IAAKrF,EAA8BogE,EAA9BpgE,OAAQF,EAAsBsgE,EAAtBtgE,MAAOg5F,EAAe14B,EAAf04B,YAE7BtkF,EAAQ,CACVqnB,SAAU,QACVoW,OACA5sC,MACArF,SACAF,QACA6sO,UAAW,QAGb,OAAI57N,EACK,mCAA8B+nF,YAAaA,EACbjuE,YAAa,CACX1iB,GAAI,OACJwyF,SAAU,EAAAkhB,mBAAmBzlG,MAC7BzF,UAAW,WACXmjH,SAAS,GAEXpf,YAAa,GACb4zN,wBAAwB,EACxBl2O,mBAAoBqnX,EACpBzxK,qBAAsByxK,EACtBjlc,MAAOA,EACP4wE,SAAU,KAG1C,mCAAiB5wE,MAAOA,EACP8zT,wBAAwB,EACxBxvO,YAAaA,EACb1T,SAAU,S,8EC1CpC,I,IAAA,M,IACA,SAEYs0X,E,wJAAZ,S,6DAEyC,WAEvC,IAAMxX,EAAiB,CACrByX,MAAM,EACNC,UAAU,EACVF,gBACAG,iBAAkB,CAChBC,oBAAqB,mBAIzB,OACE,mCAAQ7uT,QAASi3S,M,guhBCjBrB,I,IAAA,MACA,O,IACA,M,IAEA,OAEA,Q,mDAGA,IAAM6X,EAAwB,SAACtuW,GAAU,IAEhClgG,EAAQkgG,EAARlgG,KAEP,OACE,+BAAKw/E,UAAW,uBAAyBx/E,EAAO,uBAAyBA,EAAO,KAC9E,+BAAKw/E,UAAU,2BACb,mCAAS/nC,SAAU,WACjB,yCAAe+nC,UAAU,sBAG7B,+BAAKA,UAAU,2BACb,4CAAkB5iF,GAAa,UAAToD,EAAmB,iCAAmC,gCAMpFwuc,EAAsB13T,UAAY,CAChC92I,KAAM,UAAUo3B,Q,UAGHo3a,G,8EC/Bf,I,IAAA,MACA,O,IACA,MACA,O,IAEA,OACA,QACA,QACA,Q,mDAEA,IAAMhuE,EAAa,EAAAhwY,mBAAqB,GAAK,IAGvCi+c,EAAsB,SAACvuW,GAAU,IAE9B3S,EAAmD2S,EAAnD3S,YAAal+E,EAAsC6wF,EAAtC7wF,KAAMtC,EAAgCmzF,EAAhCnzF,eAAgBnC,EAAgBs1F,EAAhBt1F,aAEpCkvE,GAAiB,IAAAjtE,sBAAqB0gF,EAAal+E,EAAK1C,SAAU0C,EAAKvC,OAAQC,EAAgBnC,GAAc,GAGnH,OAFoB,IAAAiC,sBAAqB0gF,EAAal+E,EAAK1C,SAAU0C,EAAKvC,OAAQC,EAAgBnC,GAAc,KAE5FkvE,EACX,KAIP,6BAAG0F,UAAU,mCACX,mCAAavnF,QAASs1F,EAAakvD,UAAW+jP,MAKpDiuE,EAAoB33T,UAAY,CAC9BvpD,YAAa,UAAU/+C,MAAV,qB,WAaA,IAAAmuG,aACb,IAAAj8C,UAXsB,SAACxzG,GAAU,IAC1B0d,EAAgB1d,EAAMyc,YAAtBiB,aAGP,MAAO,CACLmC,eAHqB7f,EAAMqN,gBAI3BqQ,kBAKF,CAAyB6jc,K,6FC9C3B,O,OACA,O,IACA,MACA,O,IAEA,Q,IACA,O,IACA,S,IACA,SAEA,QACA,QACA,QACA,QACA,Q,mDAGA,IAAMC,EAAuC,SAACxuW,GAAU,IAE/C3S,EAAyG2S,EAAzG3S,YAAa56E,EAA4FutF,EAA5FvtF,iBAAkBxb,EAA0E+oG,EAA1E/oG,UAAWwpB,EAA+Du/E,EAA/Dv/E,uBAAwBtR,EAAuC6wF,EAAvC7wF,KAAMyP,EAAiCohF,EAAjCphF,UAAWpY,EAAsBw5F,EAAtBx5F,mBAEpF1L,EAAW7D,EAAUuJ,MAAK,SAAAH,GAAA,OAASA,EAAMw8I,kBAAoBx8I,EAAMtF,YAAY1C,UAAUqE,KAAO2wF,EAAYh1F,UAAUqE,MAEtHkrc,GAAmB,IAAA9/W,4BAA2BthF,EAAoB1L,EAAWA,EAASC,YAAc,MANpD,GAQtB,IAAA86I,UAAS/6I,EAAWA,EAAS+C,SAAW,GARlB,qBAQ/CA,EAR+C,KAQrC47Y,EARqC,KAShDouD,EAAM/sc,GAAYA,EAASC,aAAeD,EAASC,YAAY1C,UAAU6vF,kBAAoB,EAC/FptF,EAASC,YAAY1C,UAAU6vF,kBAC/B,MAKE+4O,EAAiB,SAACC,GACtBu4E,EAAYv4E,KAGd,IAAA7qN,YAAU,WACJv7G,GAAYA,EAASC,aACvBkmU,EAAenmU,EAAS+C,UAAY,KAGrC,CAACwvF,IAGJ,IAAM2tL,EAAoB,SAACnwR,GAEzB,IAAIe,EAAQ,GAAKf,EAAEugB,OAAOxf,MAE1B,GAAIA,EAAMiD,SAAS,KAEf,OAAO,EAoBX,IAbAjD,EAAQ0I,SAAS1I,IAAU,IAEdi8c,EACXj8c,EAAQA,EAhCA,IAgCoBA,EACnBA,IAAUi8c,IACnBj8c,EAAQi8c,GAOV5mI,EAAer1U,GACXkP,EACF2lB,EAAuB3lB,EAAUlP,QAC5B,GAAIA,EAAO,CAChB,IAAIk0B,GAAc,IAAAxN,mBAAkB+6E,EAAazhG,EAAO6mB,GACxDqN,EAAY+8H,kBAAmB,EAC/Bj+H,EAAU,CAACkB,MAWf,OACE,+BAAKw/D,UAAU,oCACb,+BAAKA,UAAU,wBACZsoX,GAAqB/pc,IAAagqc,EACjC,gCAAMvoX,UAAU,iDACd,4CAAkBz0E,OAAQ,CAAChN,SAAU/C,EAASC,YAAY1C,UAAU6vF,mBAAoBxrF,GAAG,gCAE3F,KACJ,mCAAYuhP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iCACnC80K,QAAS,WACPwpG,EAAkB,CAAC5vQ,OAAQ,CAACxf,MAAOiS,EAAW,MAEhDyhF,UAAU,+CACpB,yCAEF,mCAAWA,UAAW,sBAAwBzhF,IAAagqc,EAAM,2BAA6B,IACnFxya,MAAM,GACN8sN,QAAQ,WACRnqP,KAAK,QACL8H,KAAK,SACLlU,MAAOiS,EACPwjU,QAAQ,yBACRzrO,UA7BO,SAACN,GACvB,GAAgB,MAAZA,EAAMppG,IAER,OADAopG,EAAM7V,kBACC,GA2BM+qI,SAAUwwD,IACrB,mCAAY/8B,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iCACnC86E,SAAU35E,IAAagqc,EACvBr2R,QAAS,WACPwpG,EAAkB,CAAC5vQ,OAAQ,CAACxf,MAAOiS,EAAW,MAEhDyhF,UAAU,+CACpB,4CAYVkvX,EAAqC53T,UAAY,CAC/CvpD,YAAa,UAAU/+C,MAAV,qBAMf,IAaM02I,EAAqB,CACzBpmK,sBACAk6G,kDACAr4G,iD,WAGa,IAAAg8H,aACb,IAAAj8C,UApBsB,SAACxzG,GAKvB,MAAO,CACLkjE,aALqBljE,EAAM0zG,UAAtBxwC,aAMLz9C,iBALyBzlB,EAAMgsL,QAA1BvmK,iBAMLxb,UALkBjK,EAAM8J,UAAnBG,UAMLuP,mBAAoBxZ,EAAMqN,gBAAgB+B,YAWnB4oL,EAAzB,CAA6CwpR,K,mHC5J/C,O,OACA,OAEA,S,IACA,SACA,OACA,QACA,QACA,S,mDAEA,IAAMC,EAAa,SAACzuW,GAAU,IAUtB,EATCnzF,EACwDmzF,EADxDnzF,eAAgBrD,EACwCw2F,EADxCx2F,UAAWgE,EAC6BwyF,EAD7BxyF,OAAQvW,EACqB+oG,EADrB/oG,UAAWqI,EACU0gG,EADV1gG,oBAAqBqK,EACXq2F,EADWr2F,MAAOwF,EAClB6wF,EADkB7wF,KAAMzE,EACxBs1F,EADwBt1F,aAAchS,EACtCsnG,EADsCtnG,YACnG2M,EAA6D26F,EAA7D36F,YAAa66F,EAAgDF,EAAhDE,kBAAmB7hG,EAA6B2hG,EAA7B3hG,cAAe+/G,EAAcpe,EAAdoe,WAC1C3oH,EAAY+T,EAAZ/T,SAEDi5c,GAAa,IAAA78T,mBAAkBhlI,GALT,GAMQ,IAAAgpI,UAAS,IANjB,qBAMrB84T,EANqB,KAMTC,EANS,QAO0B,IAAA/4T,UAAS,IAPnC,qBAOrBsnF,EAPqB,KAOA0xO,EAPA,QAQM,IAAAh5T,WAAS,GARf,qBAQrB0yD,EARqB,KAQVi0L,EARU,KAUtBsyE,GAAA,gCAAa,6GACK,IAAA1oX,uBAAsBsoX,GAD3B,UACXK,EADW,QAEblic,EAAeuwN,kBAAmBvwN,EAAeuwN,gBAAgBC,8BAFpD,iCAGyB,IAAAC,uBAAsBrmO,EAAWoO,GAH1D,OAGT2pc,EAHS,OAIfH,EAAuBG,GAJR,OAMjBJ,EAAcG,GACdvyE,GAAa,GAPI,mDAAb,6CAUN,IAAAnmR,YAAU,WACHnW,EAAkB/2G,QAGvB2ld,MAEC,CAAC5uW,IAOJ,IAAI6iB,EAAmB,KAKvB,OAJIttH,EAASirH,YAAcl3G,EAAUw5G,wBACnCD,EAAmBv5G,EAAUy5G,cAAcziH,MAAK,SAAA2iH,GAAA,OAAQA,EAAIzmH,KAAQjH,EAASirH,eAG3E6nF,EACK,KAIP,+BAAKjpH,UAAU,SACb,yCACE,mCAAezyE,eAAgBA,EAChBgwN,UAAW8xO,EACXl5c,SAAUA,EACV+X,OAAQA,EACR7D,MAAOA,EACPrK,oBAAqBA,EACrB+hH,yBAA0B,KAC1B0B,iBAAkBA,EAClBn2G,OAAQuC,EAAKvC,OACblC,aAAcA,EACdhS,YAAaA,EACb2M,YAAaA,EACb83N,oBAAqBA,EACrB9+N,cAAeA,EACf+/G,WAAYA,EACZnnH,UAAWA,OAMlCw3c,EAAW73T,UAAY,G,WAyBR,IAAA6F,aACb,IAAAj8C,UArBsB,SAACxzG,GAAU,MACeA,EAAMgR,YAA/CkiG,EAD0B,EAC1BA,kBAAmBv2F,EADO,EACPA,MAAOjR,EADA,EACAA,YACjC,MAAO,CACLzB,UAAWjK,EAAM8J,UAAUG,UAC3BoH,cAAerR,EAAMqR,cACrBwO,eAAgB7f,EAAMqN,gBACtBmP,UAAWxc,EAAMwc,UACjBgE,OAAQxgB,EAAM4U,YAAY4L,OAC1BlO,oBAAqBtS,EAAMsS,oBAC3BqK,QACAe,aAAc1d,EAAMyc,YAAYiB,aAChChS,cACAwnG,oBACA76F,YAAarY,EAAMqY,YACnB+4G,WAAYpxH,EAAMoxH,cAIK,GAGzB,CAA6CqwV,K,8ECtG/C,I,IAAA,MACA,Q,IAEA,M,IACA,O,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,Q,IACA,S,mDAGA,IAAIQ,GAAsB,EAEpBC,EAAsB,WAC1BD,GAAsB,GAGlBE,EAAsB,SAACC,EAAW/7c,GAClC,UAAOiC,eAAiB25c,GAC1B57c,EAAQ,YAINg8c,EAAoB,SAACD,EAAW/7c,GACpCvF,SAASC,SAASuhd,mBAAoB,EACtCH,EAAoBC,EAAW/7c,IAG3Bk8c,EAAyB,SAACH,EAAW/7c,GAEzC,SADc,UAAMwD,WACVwD,gBAAgBszQ,WAAY7/Q,SAASC,SAASo4F,kBACtD9yF,EAAQ,gBACD,IAKLm8c,EAAkB,SAACJ,EAAW/7c,GAC7Bk8c,EAAuBH,EAAW/7c,IACrC87c,EAAoBC,EAAW/7c,IAI7Bo8c,EAAuB,SAACL,EAAW/7c,GAClCk8c,EAAuBH,EAAW/7c,IACrC87c,EAAoBC,EAAW/7c,GAEjC,IAAMoI,EAAQ,UAAM5E,WAChB4E,EAAMpB,gBAAgBszQ,UAAYlyQ,EAAMpB,gBAAgB+B,SAASszc,oBAC/Dj0c,EAAMuC,YAAYypB,WAAWsuT,oBACjC1iV,EAAQ,sBAWNs8c,EAAsB,SAACP,EAAW/7c,GACjCk8c,EAAuBH,EAAW/7c,IACrC87c,EAAoBC,EAAW/7c,I,UAIjB,kBAChB,sCAEE,iCAAOwtZ,OAAA,EAAM9yS,KAAM,EAAA9jG,OAAOyuF,KAAMu/P,UAAA,UAA4B23G,QAASJ,IACrE,iCAAO3uD,OAAA,EAAM9yS,KAAM,EAAA9jG,OAAOgwF,YAAag+P,UAAA,UAA4B23G,QAASJ,IAC5E,iCAAOzhW,KAAM,EAAA9jG,OAAO0uF,OAAQs/P,UAAA,UAAwB23G,QAASV,GAC3D,iCAAOruD,OAAA,EAAM9yS,KAAM,EAAA9jG,OAAO0uF,OAAQs/P,UAAA,YAClC,iCAAOlqP,KAAK,OAAOkqP,UAAA,YACnB,iCAAOlqP,KAAK,SAASkqP,UAAA,aAEvB,iCAAOlqP,KAAK,wBAAwBkqP,UAAA,UAAuB23G,QAASD,IACpE,iCAAO5hW,KAAM,EAAA9jG,OAAOiwF,SAAU+9P,UAAA,UAAyB23G,QAASJ,IAChE,iCAAO3uD,OAAA,EAAM9yS,KAAK,aAAakqP,UAAA,UAAgC23G,QAASH,IACxE,iCAAO5uD,OAAA,EAAM9yS,KAAK,wBAAwBkqP,UAAA,UAAgC23G,QAASH,IACnF,iCAAO1hW,KAAK,oCAAoCkqP,UAAA,UAAgC23G,QAASH,IACzF,iCAAO1hW,KAAM,EAAA9jG,OAAOkwF,aAAc89P,UAAA,UAA6B23G,QAASD,IACxE,iCAAO5hW,KAAM,EAAA9jG,OAAOi0E,WAAY+5Q,UAAA,UAAgC23G,QAASP,IACzE,iCAAOthW,KAAM,EAAA9jG,OAAO4c,SAAUoxU,UAAA,e,8HC3FlC,MACA,OACA,QACA,OAEA,Q,IAMA,Q,IACA,SACA,SACA,Q,IACA,Q,uDAEM43G,E,yOAQJC,eAAiB,WACf,EAAK9vW,MAAM9kF,8BAA6B,GACxC,EAAK8kF,MAAMzmF,eAAc,GACzB,EAAAqN,YAAYn9B,KAAK,e,EAGnBsmd,gBAAkB,WAAM,MACe,EAAK/vW,MAAnCnR,EADe,EACfA,WAAYhwE,EADG,EACHA,eACnB,IAAI,IAAA8vF,uBAAsB9f,EAAYhwE,IACpC,mBADF,CAIA,IAAM4kK,EAAU,EAAKqoJ,cAAc,GACnC,IAAKroJ,IAAYA,EAAQ3uK,QAAU2uK,EAAQ3uK,MAAM,GAG/C,OAFA,IAAAqvG,kBAAiB,yDACjB,EAAAv9F,YAAYn9B,KAAK,cAGnB,EAAK4hV,wBAAwB5nJ,EAAQ3uK,MAAM,GAAG5E,KAAMuzK,EAAQ74I,S,2GAvBxDl2C,KAAKsrG,MAAM7kF,UACbzmB,KAAKsrG,MAAM9kF,8BAA6B,K,+BA0B1C,IAAM80b,EAAct7c,KAAKsrG,MAAM3qF,YAAc,IAAM,8BAAgC,8BACnF,OACE,+BAAKiqE,UAAU,UACZ5qF,KAAKsrG,MAAM3qF,YAAc,IAAM,mCAAe4/R,iBAAiB,EAAOD,gBAAgB,IAAU,KACjG,+BAAK11N,UAAU,kBACb,+BAAKA,UAAU,mBACb,mCAASA,UAAU,2DACjB,8BAAIA,UAAU,gBACZ,gCAAMA,UAAU,sBAAqB,4CAAkB5iF,GAAG,wCAC1D,gCAAM4iF,UAAU,sBAAqB,4CAAkB5iF,GAAG,yCAE5D,+BAAK4iF,UAAU,iBACb,kCAAQA,UAAW0wX,EAAax+R,QAAS98K,KAAKq7c,iBAC5C,4CAAkBrzc,GAAG,0CAI3B,mCAAS4iF,UAAU,gEACjB,8BAAIA,UAAU,2BACZ,gCAAMA,UAAU,sBACd,4CAAkB5iF,GAAG,0CAEvB,gCAAM4iF,UAAU,sBACd,4CAAkB5iF,GAAG,2CAGzB,+BAAK4iF,UAAU,iBACb,kCAAQA,UAAW0wX,EAAax+R,QAAS98K,KAAKo7c,gBAC5C,4CAAkBpzc,GAAG,mD,yBAqBxB,IAAA8jG,UAVS,SAACxzG,GAAU,MACIA,EAAMqY,YAC3C,MAAO,CACLwpF,WAH+B,EAC1BA,WAGLhwE,eAJ+B,EACdA,eAIjBxJ,YAAaroB,EAAMgR,YAAYqX,YAC/B8F,SAAUnuB,EAAMouB,wBAAwBD,YAIJ,CACtCD,4DACA3B,8BACA+N,0CACAhN,oEACA9B,8CACAqJ,mCANa,CAOZgub,I,2ICvGH,O,OACA,O,uDAEqBI,E,gNAEjB,OACE,kCAAQ3wX,UAAU,0CAA0CkyF,QAAS98K,KAAKsrG,MAAMwxE,SAC9E,gCAAMlyF,UAAU,0BAAyB,4CAAkB5iF,GAAG,gC,8BAJjDuzc,G,8ECHrB,I,IAAA,MACA,OACA,OACA,Q,IACA,OACA,S,mDAEA,IAmCMjrR,EAAqB,CACzB1hK,mD,WAGa,IAAAk9E,UAXS,SAACxzG,GAEvB,MAAO,CACL6f,eAFqB7f,EAAMqN,mBAUS2qL,EAAzB,EAvCW,SAAChlF,GAAU,IAE5BnzF,EAA2CmzF,EAA3CnzF,eAAgByW,EAA2B08E,EAA3B18E,wBAEvB,IAAKx1B,SAASC,SAAS2b,YAAcmD,EAAeqjc,iCAClD,OAAO,KAGT,IAAMC,GAAa,IAAA1/R,cAAa5jK,GAOhC,OACE,+BAAKyyE,UAAU,kBACb,gCAAMA,UAAU,kBAAiB,4CAAkB5iF,GAAG,iCACtD,kCAAQ4iF,UAAW,4BAA8B6wX,EAAa,qBAAuB,IAC7E3+R,QATc,WACxB,UAAU37I,eAAV,uBAAgDs6a,EAAoB,MAAP,OAC7D7sb,MAQI,gCAAMg8D,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,2B,8EC7B/E,I,IAAA,MACA,OACA,OACA,Q,IACA,O,mDAEA,IAoCMsoL,EAAqB,CACzBxhK,+D,WAGa,IAAAg9E,UAbS,SAACxzG,GAGvB,MAAO,CACL6f,eAHqB7f,EAAMqN,gBAI3B0lN,qBAH6B/yN,EAAMkwO,iBAA9Bnd,wBAW+B/6B,EAAzB,CACb,UAAMi2O,MAzCuB,SAACj7T,GAAU,IAEjCnzF,EAAiDmzF,EAAjDnzF,eAAgB2W,EAAiCw8E,EAAjCx8E,8BACjBhd,EAAqBqG,EAAezQ,SAE1C,IAAKtO,SAASC,SAAS2b,YAAcmD,EAAeujc,qBAClD,OAAO,KAQT,OACE,+BAAK9wX,UAAU,kBACb,gCAAMA,UAAU,kBAAiB,4CAAkB5iF,GAAG,uBACtD,kCAAQ4iF,UAAW,4BAA8B94E,EAAmBvC,wBAA0B,qBAAuB,IAC7GutK,QATc,WACxB,UAAU37I,eAAV,0BAAmDrvB,EAAmBvC,wBAAiC,MAAP,OAChGuf,GAA+Bhd,EAAmBvC,2BAQ9C,gCAAMq7E,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,oBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,0BAoB1C,SAACsjG,EAAOszE,GAEzC,GAAIA,EAAUysC,qBAEZ,OAAO,O,oJCnDb,MACA,O,IACA,OACA,QAEA,Q,IACA,QACA,SACA,Q,IACA,S,IACA,SACA,QACA,Q,uDAEMswP,E,gPAEJ50c,MAAQ,CACNkzD,QAAQ,G,EA4BV2hZ,sB,6BAAuB,mGACrB,IAAAh1b,gBADqB,UAGE,IAAAksG,mBAHF,OAGf3wB,EAHe,OAKjBmtJ,EAA6B,GACjCntJ,EAAS/jG,SAAQ,SAAAke,GACfA,EAAW24E,cAAc72F,SAAQ,SAAAwe,GACA,SAA3BA,EAAapM,WACfoM,EAAa+kE,SAASvjF,SAAQ,SAAAuF,GAC5B,IAAMk4c,EAAUl4c,EAAU4M,YAAY5R,QAAQ,UAAW,IACrDk9c,IAAY,EAAAxhd,sBAAsBE,SAAWshd,IAAY,EAAAxhd,sBAAsBC,UACjFg1P,EAA2Bv6P,KAAK,CAC9B8md,UACApjW,WAAW,IAAA30G,oBAAmBH,EAAUE,yBAOpD,EAAKynG,MAAM+jJ,8BAA8BC,IACzC,IAAAh9J,iBACI,EAAKugI,YACP,EAAKv1C,SAAS,CACZrjH,QAAQ,IAzBS,6C,EA8BvB6hZ,sBAAwB,WACa,IAA/B,EAAKxwW,MAAM+4H,iBACb,aAAE,4BAA4Bx4B,QAAQ,KAAK,WACzC,EAAA35K,YAAYn9B,KAAK,eAGnB,aAAE,iBAAiB82M,QAAQ,KAAK,WAC9B,EAAA35K,YAAYn9B,KAAK,oB,2GA7DrBqE,SAAS6C,KAAKC,UAAUC,IAAI,qBACxB6D,KAAKsrG,MAAMnzF,eAAe8gQ,SAC5Bj5Q,KAAKs9K,SAAS,CACZrjH,QAAQ,IAGVj6D,KAAK47c,uBAEP57c,KAAK6yN,YAAa,I,gDAGMj0C,GACpBA,EAAUzmK,eAAe8gQ,WAAaj5Q,KAAKsrG,MAAMnzF,eAAe8gQ,UAC9Dr6F,EAAUzmK,eAAezQ,SAAS+pF,gBACpC,EAAAv/D,YAAYn9B,KAAK,iB,6CAMrBqE,SAAS6C,KAAKC,UAAU27K,OAAO,qBAC/B73K,KAAK6yN,YAAa,I,+BA8ClB,OAAO7yN,KAAK+G,MAAMkzD,OAChB,+BAAK2wB,UAAW,QACb5qF,KAAKsrG,MAAM3qF,YAAc,IAAM,wCAA8B,mCAAe4/R,iBAAiB,IAC9F,+BAAK31N,UAAW,8BAA8B5qF,KAAKsrG,MAAM+4H,iBACtDrkO,KAAKsrG,MAAMk1C,UAEd,+BAAK51D,UAAU,eACb,wCACA,+BAAKA,UAAU,wBACb,kCAAQA,UAAU,0EACVkyF,QAAS98K,KAAK87c,uBADtB,WAOJ,S,GA1FkB,UAAMjwW,W,WAsGjB,IAAAC,UARS,SAACxzG,GACvB,MAAO,CACL+rO,gBAAiB/rO,EAAM+sO,iBAAiBhB,gBACxC1jN,YAAaroB,EAAMgR,YAAYqX,YAC/BxI,eAAgB7f,EAAMqN,mBAIc,CACtC0pP,8DACAU,yCAFa,CAGZ4rN,I,8HCvHH,MACA,O,uDAEMI,E,yOAEJC,kBAAoB,WAClB,OAAuC,IAA/B,EAAK1wW,MAAM+4H,gBAAZ,+BAC4B,EAAK/4H,MAAMkkJ,gBADvC,IAEH,2C,gGAIJ,OACE,+BAAK5kK,UAAU,yBACZ5qF,KAAKg8c,yB,GAX0B,UAAMnwW,W,WAwB/B,IAAAC,UAPS,SAACxzG,GACvB,MAAO,CACL+rO,gBAAiB/rO,EAAM+sO,iBAAiBhB,gBACxCmrB,gBAAiBl3P,EAAM+sO,iBAAiBmqB,mBAIJ,GAAzB,CACZusN,I,8HC5BH,MACA,O,IACA,OACA,QAEA,SACA,S,uDAEMJ,E,yOAOJM,yBAA2B,SAAC5kW,GAC1B,EAAK/L,MAAMikJ,mBAAmBl4I,IAC9B,aAAE,iBAAiBw0F,QAAQ,KAAK,WAC9B,EAAA35K,YAAYn9B,KAAK,oB,2GAPnBiL,KAAKsrG,MAAMykJ,mBAAmB,IAC9B,aAAE,iBAAiBrkD,OAAO,O,+BAUnB,WACP,OACE,+BAAK9gH,UAAU,gBACZl2F,OAAOmc,KAAP,6BAAuC/I,KAAI,SAAAo0c,GAAA,OAC1C,kCAAQtxX,UAAW,8CAAgDsxX,EAAW5/c,eAC3E,EAAKgvG,MAAMkkJ,kBAAoB0sN,EAAa,kCAAoC,IAC3E1kd,IAAK0kd,EACLp/R,QAAS,kBAAM,EAAKm/R,yBAAyBC,KAC/C,gCAAMtxX,UAAU,6BACbsxX,IAAe,EAAAnhM,0BAA0BC,MAAQ,cAAgBkhM,Y,GAvB1D,UAAMrwW,W,WAsCjB,IAAAC,UANS,SAACxzG,GACvB,MAAO,CACLk3P,gBAAiBl3P,EAAM+sO,iBAAiBmqB,mBAIJ,CACtCD,wCACAQ,yCAFa,CAGZ4rN,I,8HCjDH,MACA,O,IACA,OAEA,QACA,QACA,SAOA,SACA,S,uDAEMQ,E,yOAUJC,uBAAyB,SAAC/ic,GAKxB,GAHA,EAAKiyF,MAAMmkJ,mBAAmBp2O,GAEP3kB,OAAOmc,KAAP,yBACH5Q,MAAK,SAAAupF,GAAA,OAAcA,IAAenwE,KAQhD,EAAKiyF,MAAMqkJ,wBACb,EAAKrkJ,MAAMokJ,sCAAqC,IAElD,aAAE,cAAc7jD,QAAQ,KAAK,WAC3B,EAAA35K,YAAYn9B,KAAK,kBACjB,EAAKu2G,MAAMykJ,mBAAmB,UAb2B,CAC3D,EAAKzkJ,MAAMokJ,sCAAqC,GAChD,IACM2sN,EAD0B,EAAK/wW,MAAMnzF,eAAe6gM,wBACNltM,MAAK,SAAAmtM,GAAA,OAAgBA,GAC7B,YAAvCA,EAAa9sF,QAAQ7vH,iBAC1B+c,EAAOgjc,EAAsB,EAAAhid,sBAAsBE,QAAU,EAAAF,sBAAsBC,SACnF,EAAKgid,kBAWPljd,SAASC,SAASoC,eAAiB4d,G,EAGrCijc,gBAAkB,WAChB,EAAKhxW,MAAMwkJ,yBAAyB,GACpC,EAAKxkJ,MAAMykJ,mBAAmB,GAC9B,EAAKzkJ,MAAMskJ,wBAAuB,GAClC,EAAKtkJ,MAAM6kD,8BAA6B,GACxC,EAAK7kD,MAAMulD,+BAA8B,IACzC,aAAE,SAASg7C,QAAQ,KAAK,WACtB,EAAA35K,YAAYn9B,KAAK,iB,2GAvCnBiL,KAAKsrG,MAAMykJ,mBAAmB,IAC9B,aAAE,4BAA4BrkD,OAAO,KAChC1rM,KAAKsrG,MAAMkkJ,iBACdxvP,KAAKsrG,MAAMikJ,mBAAmB,EAAAwrB,0BAA0BC,S,+BAwCnD,WACDhiE,EAA0Bh5M,KAAKsrG,MAAMnzF,eAAe6gM,wBAC1D,OAAKA,EAAwBvkN,QAAWuL,KAAKsrG,MAAMgkJ,2BAA2B76P,OAQ5E,+BAAKm2F,UAAU,aACZl2F,OAAOmc,KAAP,yBAAmC/I,KAAI,SAAC+zc,GACvC,IAAM5iQ,EAAeD,EAAwBltM,MAAK,SAAAmtM,GAAA,OAAgBA,GAAgBA,EAAa9sF,QAAQ7vH,gBAAkBu/c,EAAQv/c,iBACjI,OAAK28M,EAIH,kCAAQruH,UAAW,yEAA2EixX,GAC3F,EAAKvwW,MAAMg6H,kBAAoBu2O,EAAU,kCAAoC,IACxErkd,IAAKqkd,EACLxnc,MAAO,CAACy3E,gBAAiBA,OAAOmtH,EAAaxgG,UAArC,KACRqkE,QAAS,kBAAM,EAAKs/R,uBAAuBP,KACjD,gCAAMjxX,UAAU,6BAA6BixX,IARxC,QAYV77c,KAAKsrG,MAAMkkJ,kBAAoB,EAAAurB,0BAA0BC,MAAQh7Q,KAAKsrG,MAAMgkJ,2BAA2BxnP,KAAI,SAACuR,EAAMguX,GACjH,OACE,kCAAQz8S,UAAW,yEAA2EvxE,EAAKwic,SAChG,EAAKvwW,MAAMg6H,kBAAoBjsN,EAAKwic,QAAU,kCAAoC,IAC7Erkd,IAAK6vY,EACLhzX,MAAO,CAACy3E,gBAAiBA,OAAOzyE,EAAKo/F,UAA7B,KACRqkE,QAAS,kBAAM,EAAKs/R,uBAAuB/ic,EAAKwic,WAEtD,gCAAMjxX,UAAU,kBAAhB,qBACA,gCAAMA,UAAU,6BAA6BvxE,EAAKwic,aAGnD,MAlCL,+BAAKjxX,UAAU,aACb,2H,GAnDoB,UAAMihB,W,WAoGrB,IAAAC,UAVS,SAACxzG,GACvB,MAAO,CACLg3P,2BAA4Bh3P,EAAM+sO,iBAAiBiqB,2BACnDhqB,gBAAiBhtO,EAAM+sO,iBAAiBC,gBACxCkqB,gBAAiBl3P,EAAM+sO,iBAAiBmqB,gBACxCG,uBAAwBr3P,EAAM+sO,iBAAiBsqB,uBAC/Cx3O,eAAgB7f,EAAMqN,mBAIc,CACtC8pP,wCACAM,wCACAR,wCACAG,4EACAE,gDACAE,oDACA3/F,4DACAU,+DARa,CASZsrT,I,8HC7HH,MACA,O,IACA,OACA,QAEA,QACA,QACA,QACA,SAMA,QACA,S,IACA,Q,uDAGMI,E,yOAeJC,6BAA+B,WAI7B,GAHK,EAAKlxW,MAAMkkJ,iBACd,EAAKlkJ,MAAMikJ,mBAAmB,EAAAwrB,0BAA0BC,QAErD,EAAK1vK,MAAMg6H,gBAAiB,CAC/B,IAAIjsN,EAAO,EAAAhf,sBAAsBE,QACjC,OAAQnB,SAASC,SAASoC,gBACxB,KAAK,EAAApB,sBAAsBC,SACzB+e,EAAO,EAAAhf,sBAAsBC,SAC7B,MACF,KAAK,EAAAD,sBAAsBE,SAI7B,EAAK+wG,MAAMmkJ,mBAAmBp2O,K,EAIlCijc,gBAAkB,WAChB,OAAQ,EAAKhxW,MAAMkkJ,iBACjB,KAAK,EAAAurB,0BAA0Bl8N,OAC7B,EAAKysD,MAAM9kF,8BAA6B,GACxC,EAAA0L,YAAYn9B,KAAK,cACjB,MAEF,KAAK,EAAAgmR,0BAA0BC,OAC7B,aAAiB,gBACjB,MAEF,QACE,EAAA9oP,YAAYn9B,KAAK,kB,EAKvB0nd,6BAA+B,SAACC,GAC9B,EAAKpxW,MAAMwkJ,yBAAyB4sN,GACpC,EAAKpxW,MAAMykJ,mBAAmB,GAC9B,EAAKzkJ,MAAMskJ,wBAAuB,IAClC,aAAE,SAAS/jD,QAAQ,KAAK,WAClB,EAAKvgG,MAAMukJ,qBAAuB,EAAKvkJ,MAAME,kBAAkB/2G,SACjE,EAAKg/N,aAAaipP,GAClB,EAAKJ,uB,EAKXK,WAAa,WACX,OAAQ,EAAKrxW,MAAMg6H,iBACjB,KAAK,EAAAjrO,sBAAsBC,SACzB,OAAO5F,OAAOmc,KAAP,cACT,KAAK,EAAAxW,sBAAsBE,QACzB,6BACF,QACE,MAAO,K,2GAlEXyF,KAAKsrG,MAAMykJ,mBAAmB,GAC9B/vP,KAAKsrG,MAAM9kF,8BAA6B,GACxCxmB,KAAKw8c,gCACL,aAAE,sCAAsC9wQ,OAAO,O,gDAGvB9sB,GACpBA,EAAUpzE,kBAAkB/2G,SAAWuL,KAAKsrG,MAAME,kBAAkB/2G,QACtEuL,KAAKs8c,oB,+BA8DA,WACP,OACE,+BAAK1xX,UAAU,gBACZ5qF,KAAK28c,aAAa70c,KAAI,SAACg8E,EAAY44X,GAAb,OACrB,kCAAQ9xX,UAAW,2EAA6E9G,GAC7F44X,IAAgB,EAAKpxW,MAAMg5H,sBAAwB,kCAAoC,IAClF9sO,IAAKssF,EACLg5F,QAAS,kBAAM,EAAK2/R,6BAA6BC,c,KAlFnE,Q,oBAoGe,IAAA5wW,UAVS,SAACxzG,GACvB,MAAO,CACLgsO,sBAAuBhsO,EAAM+sO,iBAAiBf,sBAC9CgB,gBAAiBhtO,EAAM+sO,iBAAiBC,gBACxCkqB,gBAAiBl3P,EAAM+sO,iBAAiBmqB,gBACxCK,oBAAqBv3P,EAAM+sO,iBAAiBwqB,oBAC5CrkJ,kBAAmBlzG,EAAMgR,YAAYkiG,qBAID,CACtCskJ,oDACAC,wCACAH,gDACAppO,4DACAipO,wCACAF,yCANa,CAOZgtN,I,0HC5HH,O,OACA,OACA,UACA,QACA,QACA,OAEA,Q,uDAEMK,E,yOAEJt9D,OAAS,K,EAET/gO,gBAAkB,WACsB,IAAjC,EAAKjzE,MAAM9mG,MAAMs2G,OAAOyH,MAC3B,EAAKjX,MAAMx4E,cAAc,CACvBuuT,oBAAoB,IAEtB,EAAAnvT,YAAYn9B,KAAK,cAEjB,EAAAm9B,YAAYn9B,KAAK,qBAAuB,EAAKu2G,MAAM9mG,MAAMs2G,OAAOyH,KAAO,K,EAqB3Es6V,YAAc,SAACt6V,GACb,OAAQA,GACN,KAAK,EACH,MAAO,CACLrsE,MAAO,yBACPizM,SAAU,6BAEd,KAAK,EACH,MAAO,CACLjzM,MAAO,yBACPizM,SAAU,6BAEd,KAAK,EACH,MAAO,CACLjzM,MAAO,yBACPizM,SAAU,6BAEd,QACE,MAAO,K,2GA/BO,WAClBnpP,KAAKsrG,MAAMx4E,cAAc,CACvBsuT,mBAAmB,MAEhBphV,KAAKsrG,MAAM9mG,MAAMs2G,OAAOyH,MAAQviH,KAAKsrG,MAAM9mG,MAAMs2G,OAAOyH,KAAO,IAClE,EAAArwF,YAAYn9B,KAAK,qBAEnBiL,KAAKs/Y,OAAOC,OACZ7wT,YAAW,WACT,EAAK4wT,OAAOC,SACX,O,+BAyBI,WAEDu9D,EAAY,wCACZC,EAAS,CACbhnd,EAAG+md,EAAY,oBACf59Z,EAAG49Z,EAAY,mBACf39Z,EAAG29Z,EAAY,wBAEXv6V,GAAQviH,KAAKsrG,MAAM9mG,MAAMs2G,OAAOyH,KAChCjgG,EAAOtiB,KAAK68c,YAAYt6V,GAE9B,OAAOviH,KAAKsrG,MAAM+1O,mBAAqB,KACrC,+BAAKz2P,UAAU,YACb,+BAAKA,UAAU,kBACb,+BAAKA,UAAW,8CAAgD5qF,KAAKsrG,MAAM9mG,MAAMs2G,OAAOyH,MAC5E,IAATA,EAAa,8BAAI33B,UAAU,iCAAgC,4CAAkB5iF,GAAIsa,EAAK6mO,YAAmB,KAC1G,8BAAIv+J,UAAU,8BAA6B,4CAAkB5iF,GAAIsa,EAAK4zB,SAC5D,IAATqsE,EAAa,8BAAI33B,UAAU,iCAAgC,4CAAkB5iF,GAAIsa,EAAK6mO,YAAmB,MAE5G,kCACEnpG,IAAK,SAAAs/P,GAAY,EAAKA,OAASA,GAC/BE,aAAA,EACAw9D,MAAOh9c,KAAKsrG,MAAM3qF,YAAc,IAChC8+X,UAAU,EACV1gZ,IAAKg+c,EAAOx6V,KAEd,kCAAQ33B,UAAW5qF,KAAKsrG,MAAM3qF,YAAc,IACtC,+CACA,+CACEm8J,QAAS98K,KAAKu+K,iBACpB,4CAAkBv2K,GAAa,IAATu6G,EAAa,2BAA6B,mC,gBAgBtE+tE,EAAqB,CACzBx9J,+B,WAGa,IAAAy9J,aACb,IAAAzkF,UAbsB,SAACxzG,GAEvB,MAAO,CACL+oV,mBAFmB/oV,EAAMgR,YAApBypB,WAE0BsuT,mBAC/B1gU,YAAaroB,EAAMgR,YAAYqX,eASR2vK,EAAzB,CAA6CssR,K,+IClH/C,O,OACA,O,IAEA,S,IACA,SACA,Q,uDAEMK,E,2NAGEj9c,KAAKsrG,MAAM7kF,UACbzmB,KAAKsrG,MAAM9kF,8BAA6B,K,+BAK1C,IAAM7F,EAAc3gB,KAAKsrG,MAAM3qF,YAC/B,OAAOA,EAAcA,EAAc,IAAM,wCAAyB,wCAAwB,S,2BAW/E,IAAAmrF,UAPS,SAACxzG,GACvB,MAAO,CACLqoB,YAAaroB,EAAMgR,YAAYqX,YAC/B8F,SAAUnuB,EAAMouB,wBAAwBD,YAIJ,CACtCD,6DADa,CAEZy2b,I,0HC9BH,O,OACA,OACA,Q,IACA,OACA,OAEA,QAEA,Q,IACA,SACA,Q,IACA,S,IACA,O,IACA,S,uDAEMC,E,YAEJ,WAAY5xW,IAAO,gGACXA,IADW,SAuBnB6xW,eAAiB,aACV,EAAKp2c,MAAMq2c,aAAmC,IAAnBjld,OAAOkld,SAAiB,EAAKt2c,MAAMq2c,cACjE,EAAKjyN,gBAzBU,EA6BnBA,aAAe,WACbxpG,aAAa,EAAK0/P,UAClB,EAAKA,SAAW3yT,WAAW,EAAK4uX,sBAAuB,MA/BtC,EA0CnBA,sBAAwB,WACtB,EAAKhgS,SAAS,CACZz9K,OAAQ1H,OAAO+xD,YAAc9wD,SAAS6C,KAAKgrK,aA5C5B,EAgDnBs2S,gBAAkB,WAChB,EAAKjgS,SAAS,CACZ8/R,aAAa,IACZ,WACD,IAAMI,GAAY,aAAE,iBAChBA,IACF,aAAE,cAAchwX,QAAQ,CAACy5E,UAAWu2S,EAAU5oY,SAAS1vE,KAAM,SAtDhD,EA2DnBk2c,eAAiB,WACf,EAAK9vW,MAAM9kF,8BAA6B,GACxC,EAAK8kF,MAAMzmF,eAAc,GACzB,EAAAqN,YAAYn9B,KAAK,eA9DA,EAiEnB0od,kBAAoB,SAACx5X,GACnB,EAAKq5F,SAAS,CACZr5F,gBAnEe,EAuEnBy5X,eAAiB,WAIf,OAHe,IAAAvic,oBACOwic,qBAAqB,EAAK52c,MAAMk9E,YAEtCn8E,KAAI,SAAC6X,EAAS/R,GAC5B,OACE,8BAAIg9E,UAAU,2BAA2BpzF,IAAK,YAAYoW,EAAOkvK,QAAS,kBAAM,EAAK8gS,aAAa,CAChGpic,KAAMmE,MAELA,EAAQ9D,cAhFE,EAsFnB+hc,aAAe,SAACj+b,GACd,UAAUwhB,eAAe,mBAAqBxhB,EAAQnE,KAAKK,UAE3D,IAAM89X,EAAgBh6X,EAAQnE,KAAK9a,YAE7Bk2U,EAA2C,UAA3B+iE,EAAc99X,UAAiD,iBAAzB89X,EAAcrzY,QAC1C,WAA3BqzY,EAAc99X,UACc,YAA3B89X,EAAc99X,WACoB,aAArCziB,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,iBACxC,WAA3Bk+Y,EAAc99X,SACnB,EAAKyvF,MAAMzmF,eAAc,GACzB,EAAKymF,MAAMxnF,uBAAsB,EAAM8yT,EAAe+iE,EAAc99X,SAAW89X,EAAcj5Y,YAAYmb,UACzG,EAAAqW,YAAYn9B,KAAK,aACjB,EAAKu2G,MAAM9mF,2BAA2B7E,EAAQnE,MAC9CmE,EAAQnE,KAAKirF,eAlGb,EAAK1/F,MAAQ,CACXk9E,WAAY,GACZpkF,OAAQ,EACRu9c,aAAa,GAEf,EAAK/7D,SAAW,EAPC,E,oFAUC,YACd,IAAAl9Y,qBACF,CAAC,SAAU,UAAU/F,SAAQ,SAACjI,GAC5BgC,OAAO0uD,iBAAiB1wD,EAAG,EAAKgnd,mBAElCzuX,YAAW,WAETv2F,OAAOoxX,SAAS,EAAG,KAClB,MAELvpX,KAAKmrP,iB,6CAcgB,YACjB,IAAAhnP,oBACF,CAAC,SAAU,UAAU/F,SAAQ,SAACjI,GAC5BgC,OAAO+qG,oBAAoB/sG,EAAG,EAAKgnd,qB,+BAmEvC,IACMU,GADe,IAAA15c,mBACsB,CAAEtE,OAAQG,KAAK+G,MAAMlH,QAAW,GAC3E,OACE,+BAAK+qF,UAAW,UAAY5qF,KAAK+G,MAAMq2c,YAAc,gBAAkB,KACrE,+BAAKxyX,UAAU,WAAWv2E,MAAOwpc,GAE/B,wCACA,+BAAKjzX,UAAW,gCAAkCxxF,SAASC,SAASoC,gBAAmBuE,KAAK+G,MAAMk9E,WAAuC,GAA1B,0BAC5GjkF,KAAK+G,MAAMk9E,WACV,8BAAI2G,UAAU,uBACX5qF,KAAK09c,kBAEN,MAEN,+BAAK9yX,UAAU,mBACb,+BAAKA,UAAU,yBACb,kCAAQA,UAAU,4DACVkyF,QAAS98K,KAAKu9c,iBACpB,4CAAkBv1c,GAAG,oCAGzB,+BAAK4iF,UAAU,2BACb,mCAAyB6yX,kBAAmBz9c,KAAKy9c,qBAEnD,+BAAK7yX,UAAU,0BACb,kCAAQA,UAAU,4DACVkyF,QAAS98K,KAAKo7c,gBACpB,4CAAkBpzc,GAAG,2CAK5BhI,KAAK+G,MAAMq2c,YACV,+BAAKxyX,UAAU,gBACb,yCAEA,U,2BAaG,IAAAkhB,UAPS,SAACxzG,GACvB,MAAO,CACLmrB,YAAanrB,EAAMgrN,WAAW7/L,YAC9BxF,eAAgB3lB,EAAMytB,eAAe9H,kBAID,CACtCuI,4DACA1C,8CACAU,wDACAK,+BAJa,CAKZq4b,I,8HC/KH,O,OACA,O,IACA,MACA,O,uDAEMY,G,gBAMJ,WAAYxyW,IAAO,gGACXA,IADW,SAOnByxG,wBAA0B,SAAC5mN,GACzB,EAAKmnL,SAAS,CACZr5F,WAAY9tF,EAAEugB,OAAOxf,QAEvB,EAAKo0G,MAAMmyW,kBAAkBtnd,EAAEugB,OAAOxf,QAXrB,EAcnB6md,cAAgB,WACd3kd,SAAS6C,KAAKC,UAAUC,IAAI,gBAC5B/C,SAAS6C,KAAKgrK,UAAY,EAC1Bv4E,YAAW,WACTt1F,SAAS6C,KAAKgrK,UAAY,IACzB,IAnBc,EAsBnB+2S,aAAe,WACb5kd,SAAS6C,KAAKC,UAAU27K,OAAO,iBArB/B,EAAK9wK,MAAQ,CACXk9E,WAAY,IAHG,E,yEA0BV,WACP,OACE,+BAAK2G,UAAU,mBACb,4CAAkB5iF,GAAG,iCAAiCoyY,eAAe,WAClE,SAAC9oQ,GAAD,OACC,iCAAO1mD,UAAW,mCACf,EAAK7jF,MAAMk9E,WAAa,mCAAqC,IAAK74E,KAAK,OACnElU,MAAO,EAAK6P,MAAMk9E,WAAY6xI,SAAU,EAAK/Y,wBAAyBzrE,YAAaA,EACnFouF,QAAS,EAAKq+O,cAAep+O,OAAQ,EAAKq+O,kBAIrD,gCAAMpzX,UAAU,+B,kBA1Cfs3D,UAAY,CACjBu7T,kBAAmB,UAAU1+R,KAAK9lE,Y,cAqDvB,IAAAnN,UANS,WACtB,MAAO,KAK+B,GAAzB,CAEZgyW,I,0HC/DH,O,OACA,OACA,QACA,OAEA,QACA,Q,IACA,Q,IACA,S,IACA,S,IACA,O,uDAEMG,E,yOAMJ7C,eAAiB,WACf,UAAUj6a,eAAe,oBACzB,EAAKmqE,MAAM9kF,8BAA6B,GACxC,EAAA0L,YAAYn9B,KAAK,e,EAGnBmpd,kBAAoB,WAClB,OAAQ9kd,SAASC,SAASoC,gBACxB,IAAK,UACL,IAAK,KACH,MAAO,UACT,IAAK,WACL,IAAK,KACH,MAAO,WACT,QACE,MAAO,K,2GAlBXrC,SAAS6C,KAAKC,UAAU27K,OAAO,qB,+BAuB/B,IAAM38J,GAAS,IAAAC,oBACf,OACE,+BAAKyvE,UAAU,oBACb,mCAAe21N,iBAAiB,IAChC,+BAAK31N,UAAU,QACb,mCAASA,UAAW,gBAAkB5qF,KAAKk+c,oBAAoB5hd,eAC7D,+BAAKsuF,UAAU,cACb,8BAAIA,UAAU,qBACZ,4CAAkB5iF,GAAI,6BACtB,gCAAM4iF,UAAU,aACd,4CAAkB5iF,GAAI,oCAAoChI,KAAKk+c,wBAGnE,8BAAItzX,UAAU,qBAAoB,4CAAkB5iF,GAAI,6BACxD,kCAAQ4iF,UAAU,kDACVkyF,QAAS98K,KAAKo7c,gBACpB,4CAAkBpzc,GAAI,iCAI5B,mCAAgCkT,OAAQA,IACxC,8C,2BAaK,IAAA4wF,UANS,WACtB,MAAO,KAK+B,CACtCtlF,6DADa,CAEZy3b,I,8HC1EH,O,OACA,O,IACA,MACA,QACA,OAEA,Q,IACA,O,uDAEME,G,gBAMJ,WAAY7yW,IAAO,gGACXA,IADW,SAOnByxG,wBAA0B,SAAC5mN,GACzB,EAAKmnL,SAAS,CACZr5F,WAAY9tF,EAAEugB,OAAOxf,SATN,EAanB6md,cAAgB,WACd3kd,SAAS6C,KAAKC,UAAUC,IAAI,gBAC5B/C,SAAS6C,KAAKgrK,UAAY,EAC1Bv4E,YAAW,WACTt1F,SAAS6C,KAAKgrK,UAAY,IACzB,IAlBc,EAqBnB+2S,aAAe,WACb5kd,SAAS6C,KAAKC,UAAU27K,OAAO,iBAtBd,EAyBnB+lS,aAAe,SAACj+b,GACd,UAAUwhB,eAAe,mBAAqBxhB,EAAQnE,KAAKK,UAE3D,IAAM89X,EAAgBh6X,EAAQnE,KAAK9a,YAE7Bk2U,EAA2C,UAA3B+iE,EAAc99X,UAAiD,iBAAzB89X,EAAcrzY,QAC1C,WAA3BqzY,EAAc99X,UACc,YAA3B89X,EAAc99X,WACoB,aAArCziB,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,iBACxC,WAA3Bk+Y,EAAc99X,SACnB,EAAKyvF,MAAMzmF,eAAc,GACzB,EAAKymF,MAAMxnF,uBAAsB,EAAM8yT,EAAe+iE,EAAc99X,SAAW89X,EAAcj5Y,YAAYmb,UACzG,EAAKyvF,MAAM9mF,2BAA2B7E,EAAQnE,MAC9CmE,EAAQnE,KAAKirF,cACb,EAAAv0E,YAAYn9B,KAAK,cArCjB,EAAKgS,MAAQ,CACXk9E,WAAY,IAHG,E,yEA0CV,WACHgB,EAAWjlF,KAAKsrG,MAAMpwF,OAAOyic,qBAAqB39c,KAAK+G,MAAMk9E,YAE3Dm6X,EAAgBn5X,EAASn9E,KAAI,SAAC6X,EAAS/R,GAC3C,OACE,8BAAIg9E,UAAU,6BAA6BpzF,IAAK,YAAYoW,EAAOkvK,QAAS,kBAAM,EAAK8gS,aAAa,CAClGpic,KAAMmE,MAELA,EAAQ9D,aAIXxH,EAAQ,GACNgqc,EAAiBp5X,EAASxwF,OAAS,GAAOwwF,EAASxwF,OAAS,EAIlE,OAHI4pd,IACFhqc,EAAMxU,OAA2B,GAAlBolF,EAASxwF,QAGxB,+BAAKm2F,UAAU,UACb,4CAAkB5iF,GAAG,iCAAiCoyY,eAAe,WAClE,SAAC9oQ,GAAD,OACC,iCAAOlmI,KAAK,OAAOw/E,UAAW,yBAA2B,EAAK7jF,MAAMk9E,WAAa,yBAA2B,IACrGqtD,YAAaA,EACbp6I,MAAO,EAAK6P,MAAMk9E,WAClB6xI,SAAU,EAAK/Y,wBACf2iB,QAAS,EAAKq+O,cACdp+O,OAAQ,EAAKq+O,kBAGxB,gCAAMpzX,UAAU,gBAChB,+BAAKA,UAAW,mBAAqB5qF,KAAK+G,MAAMk9E,YAAcgB,EAASxwF,OAAS,2BAA6B,IACxG4f,MAAOA,GACV,8BAAIu2E,UAAW,wBAA0ByzX,EAAgB,mCAAqC,KAC3FD,S,kBA/EJl8T,UAAY,CACjBhnI,OAAQ,UAAUvjB,OAAOshH,Y,cA4Fd,IAAAnN,UANS,WACtB,MAAO,KAK+B,CACtCjnF,8BACAf,8CACAU,yDAHa,CAIZ25b,I,8HC5GH,MACA,OACA,Q,IAEA,S,IACA,SACA,Q,uDAEMG,E,4NAGEt+c,KAAKsrG,MAAMx5F,mBAAmBkpc,mBAAqB7id,OAAO2B,SAASC,KAAKI,SAAS,eAC/E6F,KAAKsrG,MAAMv4E,WAAWsuT,oBAC1BrhV,KAAKsrG,MAAMmlF,QAAQ17L,KAAK,uB,+BAInB,MACiDiL,KAAKsrG,MAAtDnR,EADA,EACAA,WAAYhwE,EADZ,EACYA,eACnB,OAFO,EAC4BqhF,kBACZ/2G,QAGnB,IAAAwlH,uBAAsB9f,EAAYhwE,GAC7B,wCAEF,mCAAiB2wF,OAAQ96G,KAAKsrG,MAAMwP,SALlC,S,GAZqB,UAAMjP,W,WAoCzB,IAAA0kF,aACb,IAAAzkF,UAhBsB,SAACxzG,GAAU,MACIA,EAAMqY,YAApCwpF,EAD0B,EAC1BA,WAAYhwE,EADc,EACdA,eACZziB,EAAYpP,EAAMqN,gBAAlB+B,SAF0B,EAGOpP,EAAMgR,YAG9C,MAAO,CACLkiG,kBAP+B,EAG1BA,kBAKLz4E,WAR+B,EAGPA,WAMxBjhB,mBAAoBpK,EACpByyF,aACAhwE,oBAKF,CAAyBm0b,K,gJC7C3B,O,OACA,QACA,QACA,O,IACA,S,IACA,Q,IACA,OAEA,Q,IAKA,Q,IACA,S,IACA,S,IAIA,SACA,SAEA,Q,IACA,QACA,SAEA,Q,IACA,O,IACA,QACA,SACA,QACA,UACA,SACA,SAKA,SACA,QACA,S,mDAMA,IAAMC,EAAuBpmd,OAAOqF,WACjCrF,OAAOqF,UAAUC,UAAUnB,cAActC,QAAQ,YAAc,EAAI,IAAM,EAEtEwkd,E,YAEJ,WAAYlzW,GAAO,kHACXA,IADW,SAkFnBmzW,kBAAoB,SAAC7/R,GACnB,IAAM1jK,GAAS,IAAAC,oBACTqvO,GAAc,IAAA/mC,mBAAkB7kC,EAAU7gK,iBAAkB6gK,EAAU94J,4BACvE5K,EAAOc,cAGRwuO,GACF,EAAKk0N,mBAAmBl0N,IAzFT,EAoGnBm0N,mCAAqC,SAAC57O,GACpC,GAAI,EAAKz3H,MAAM9mG,OAAS,EAAK8mG,MAAM9mG,MAAMs2G,QAAU,EAAKxP,MAAM9mG,MAAMs2G,OAAOj/F,SAAU,OACnD,EAAKyvF,MAAM9mG,MAAMs2G,OAA1Cj/F,EAD4E,EAC5EA,SAAUyuO,EADkE,EAClEA,YACXpvO,GAAS,IAAAC,oBACTyjc,EAAe1jc,EAAOc,aAAa,GACnC6ic,EAAyB3jc,EAAOc,aAAaW,WAAU,SAAAL,GAC3D,OAAOA,EAAW7lB,KAAKkI,QAAQ,KAAK,KAAKA,QAAQ,MAAM,KAAKrC,gBAAkBuf,KAE1ES,EAAapB,EAAOc,aAAa6ic,GACjCnlK,EAAcp9R,EAAaA,EAAW7lB,KAAOmod,EAAanod,KAKhE,GAJA,EAAK60G,MAAM14E,oBAAoB8mR,GAE/B,EAAKiiG,wBAAwB,KAAMjiG,GAE/BpvD,GAAehuO,EAAY,CAC7B,IAAMwic,EAAmBxic,EAAWG,SAASzV,QAAO,SAAA0V,GAClD,OAAOA,EAAQlB,KAAKK,SAASld,QAAQ,KAAK,KAAKrC,gBAAkBguP,KAEnE,GAAIw0N,EAAiBrqd,OAAQ,CAC3B,IAAIsqd,EAAsBzic,EAAWG,SAASE,WAAU,SAAAD,GACtD,OAAOA,EAAQlB,KAAKK,SAASld,QAAQ,KAAK,KAAKrC,gBAAkBguP,KAEnE,GAAIw0N,EAAiBrqd,OAAS,EAAG,CAC/B,IAAMuqd,EAA0B1ic,EAAWG,SAASE,WAAU,SAACD,EAASmvU,GACtE,OAAQnvU,EAAQlB,KAAKK,SAASld,QAAQ,KAAK,KAAKrC,gBAAkBguP,GAC5DuhG,IAAiB,EAAKvgP,MAAMxlF,8BAEhCk5b,GAA2B,IAC7BD,EAAsBC,GAG1B,EAAK1zW,MAAM1lF,iCAAiCm5b,UAGvCh8O,GACT,EAAKk8O,6BAvIU,EA2InBA,0BAA4B,WAA2B,IAA1BC,EAA0B,wDAC/Chkc,GAAS,IAAAC,oBACf,IAAKD,EAAOc,aAGV,OAFA,EAAKsvF,MAAM1lF,iCAAiC,QAC5C,EAAAsM,YAAYn9B,KAAK,cAGnB,IAAMgpB,EAAmB7C,EAAOc,aAAa,GAAGvlB,KAChD,EAAK60G,MAAM14E,oBAAoB7U,GAC3Bmhc,GACF,EAAKT,kBAAkB,CACrB1gc,mBACA+H,2BAA4B,KAvJf,EA4JnBq5b,+BAAiC,SAACj9R,GAA0B,MACQ,EAAK52E,MAAhE14E,EADmD,EACnDA,oBAAqB1M,EAD8B,EAC9BA,iBAAkBjZ,EADY,EACZA,iBACxCiO,GAAS,IAAAC,oBAEf,GADAnjB,QAAQ4B,IAAI,wBAAyBsoL,GACF,iBAA/BA,EAAsB92K,KAAyB,CACjD,EAAK6zc,2BAA0B,GAC/B,IAAM/gS,EAAY,EAAKkhS,qBACnBlhS,GAAaA,EAAU1iK,MAAQ0mK,EAAsB7+K,UACvD66K,EAAU1iK,KAAK2K,cAAgB+7J,EAAsB7+K,QACrD66K,EAAU1iK,KAAK+qE,WAAWt5E,IAAoB,EAC9CiZ,EAAiBg8J,EAAsB7+K,eAEpC,GAAmC,mBAA/B6+K,EAAsB92K,MAA6B8P,EAAOc,aAAc,CACxDd,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASyrL,EAAsBmuO,iBAExGz9X,EAAoBsvJ,EAAsBmuO,cAC1C,EAAKzW,4BAA4B,IAEjC,EAAKqlE,2BAA0B,KA9KlB,EAmLnBtjE,yBAnLmB,gCAmLO,mCAAO/0T,EAAP,uDAAwB,KAAMy4X,EAA9B,uDAAiD,GAAjD,4EACuB,EAAK/zW,MAA7CnzF,EADiB,EACjBA,eAAgBiqK,EADC,EACDA,qBAClBjqK,EAAezQ,SAASg7K,2BAA4BN,EAFjC,0CAGf,GAHe,UAMpB/oK,EAAOutE,GAAiB,IAAAygG,sBAAqBzgG,IAAkB,IAAA1zE,wBAAuBmsc,GAG1F,EAAK/zW,MAAMmkJ,mBAAmBp2O,IAExBuuM,GAAkB,IAAAjzC,wBAAuBt7J,IAEzC,EAAKiyF,MAAMqkJ,wBACb,EAAKrkJ,MAAMokJ,sCAAqC,IAG7Cv3O,EAAezQ,SAASiW,sBAC3B,EAAK2tF,MAAMokJ,sCAAqC,GAG5Cx0O,GAAS,IAAAC,qBACTisM,EAAmBlsM,EAAOgb,wBAAwB,UAChCkxL,EAAiBzlI,SAAS1hF,MAAK,SAAAoD,GAAA,OAAWA,EAAQM,UAAUmF,oBAAsBuQ,OACxGA,EAAO,EAAKiyF,MAAMm2E,0BAQhBrN,EAAoBwzC,GAAkB,IAAAhzC,mCAAkCgzC,GAAmB,OACvExuN,SAASC,SAASoC,iBAAmB24K,EAjCvC,mCAkChB,IAAAoP,2BAA0BpP,GAlCV,QAmChB8N,EAAwB,CAC5B92K,KAAMw7E,EAAiB,eAAiB,iBACxCvjF,QAASujF,EACTypU,aAAcgvD,GAEhB,EAAKF,+BAA+Bj9R,GAxCd,8CAnLP,8CA+NnBo9R,oBAAsB,WAA4B,IAA3BC,EAA2B,wDAIhD7wX,YAAW,WAET,IADe,IAAAvzE,oBACJa,aACT,EAAK2ic,yCACA,OAC2B,EAAKrzW,MAAM9mG,MAAMs2G,OAA1Cj/F,EADF,EACEA,SAAUyuO,EADZ,EACYA,YAGXrsO,EAAiB,EAAKqtF,MAAMrtF,eAC5Buhc,EAAmB,EAAKl0W,MAAM7nF,YAAY3X,MAAK,SAAA2zc,GAAA,OAAYA,EAASnjd,gBAAkBuf,KAU5F,GATI2jc,GAAoB,EAAKl0W,MAAMrtF,iBAAmBuhc,GAAoBD,GACxE,EAAKj0W,MAAMxnF,uBAAsB,EAAM07b,GAErCA,GAAoBvhc,EAAe3hB,gBAAkBuf,GACvD,EAAK6jc,iBAAiBF,GAAkB,GAKtC,EAAKz4c,MAAM02K,WAAY,CACzB,IACMm6E,EADW,EAAK7wP,MAAM02K,WAAWhhK,UAAS,GACdE,WAAU,SAAAD,GAE1C,OADqBA,EAAQlB,KAAKK,SAASvf,cAAcqC,QAAQ,IAAI,OAC7C2rP,KAEtBsN,GAAoB,GAAKA,IAAqB,EAAKtsJ,MAAMxlF,4BAI3D,EAAK8zX,4BAA4BhiJ,GAAkB,IAKrD2nN,IACEA,EAAe1nc,SAAS1d,SAAS,cACnC,EAAKmxG,MAAM9kF,8BAA6B,GAExC,EAAK8kF,MAAM9kF,8BAA6B,MAI3C+3b,IA7Qc,EAgRnBG,mBAAqB,SAAC7gS,GACpB,IAAM8hS,EAAcvmd,SAASC,SAASoC,eAAiB,IAAMoiL,EAAcriK,KAAKlV,OAC3E,EAAKs5c,oBAAoBzld,SAASwld,KACrC,EAAK5sP,2BAA2Bl1C,EAAe,GAAI,MAAM,GACzD,EAAK+hS,oBAAoB7qd,KAAK4qd,IAE3B,EAAKzkM,qBAAqB/gR,SAAS0jL,EAAcriK,KAAKlV,UAAW,EAAAo2F,iBAAiBviG,SAAS0jL,EAAcriK,KAAKlV,SAC7Gu3K,EAAclE,kBAClB,EAAKuhG,qBAAqBnmR,KAAK8oL,EAAcriK,KAAKlV,QAClD,EAAKktN,0BAA0B31C,EAAcriK,KAAM,EAAK8vF,MAAMt1F,cAC3D6b,MAAK,WACA,EAAKghM,YACP,EAAK7P,mBA5RI,EAkSnB08P,iBAAmB,SAACG,GAClB,IACMpiS,GADS,IAAAtiK,oBACWqD,MAAMqhc,GAChC,EAAKv0W,MAAM1lF,iCAAiC,GAC5C,EAAK03J,SAAS,CACZG,aACAx5F,WAAY,KACX,WACD,IAAMg6I,EAAgB7kO,SAASg9F,cAAc,iBAI7C,GAHI6nI,IACFA,EAAcxwI,WAAa,GAEA,YAAxBgwF,EAAW5hK,WACwB,aAArCziB,SAASC,SAASoC,gBAAsE,OAArCrC,SAASC,SAASoC,iBAAqD,UAAxBgiL,EAAW5hK,UAAgD,WAAxB4hK,EAAW5hK,UAAiD,WAAxB4hK,EAAW5hK,SAAuB,CAC5M,IAAM89X,EAAgB,CACpBn+X,KAA8B,WAAxBiiK,EAAW5hK,SAAwB4hK,EAAW31D,OAAS21D,EAC7Dn7J,KAAMm7J,EAAW5hK,UAEnB,EAAK6ic,mBAAmB/kE,OACnB,CACL,IAAMmmE,EAAiBriS,EAAWhhK,UAAS,GAAO,GAClD,EAAKiic,mBAAmBoB,QAvTX,EA4TnBlmE,4BAA8B,SAAC9zX,GAAgD,IAApB2mT,EAAoB,uDAAP,GAGhEvxT,GAAS,IAAAC,oBAKf,GAJA,EAAKmiK,SAAS,CACZr5F,WAAY,KAGV/oE,EAAOc,cAAgB,EAAKsvF,MAAMvtF,iBAAkB,CACtD,IAAMA,EAAmB7C,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAAS,EAAK60G,MAAMvtF,oBAC/F,GAAmB,eAAf0uT,GAA8C,oBAAfA,EAMjC,IALA,IAAMszI,EAAsB,WAC1Bj6b,EAA6BA,GAA8B,EAAI,EAAIA,EACnE,IAAMg6b,EAAiB/hc,EAAiBtB,SAASqJ,GACjD,OAAOg6b,GAAkBA,EAAetkc,OAAQ,IAAA+qX,eAAcu5E,EAAetkc,KAAM,EAAK8vF,MAAMr+F,iBAAkB,EAAKq+F,MAAM/oG,YAEtHujB,GAA8B/H,EAAiBtB,SAAShoB,OAAS,GACjEsrd,KAILj6b,GAA0D,EAI9D,GAAIA,EAA6B/H,EAAiBtB,SAAShoB,OAAS,EAAG,KAC9D0jB,EAAkB,EAAKmzF,MAAvBnzF,eACD6nc,EAAkB9kc,EAAOc,aAAaW,WAAU,SAAAL,GAAA,OAAcA,EAAW7lB,OAAS,EAAK60G,MAAMvtF,oBAE/F6gc,EAAe1jc,EAAOc,aAAagkc,EAAgB,GACnDC,EAAyB,KAE7B,GAAI9nc,EAAezQ,SAASiW,sBACvBI,EAAiBtB,UACjBsB,EAAiBtB,SAAS,EAAK6uF,MAAMxlF,6BAC4C,SAAjF/H,EAAiBtB,SAAS,EAAK6uF,MAAMxlF,4BAA4BtK,KAAKlV,OAAmB,CAC5F,IAAM4iL,GAAY,IAAA/sK,6BAA4B,EAAKmvF,MAAM/oG,UAAW,EAAK+oG,MAAMr+F,kBAC3Ei8K,GAAaA,EAAU7iL,cACzB45c,EAAyB/kc,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAc,IAAAC,4BAA2B2sK,EAAU7iL,YAAaiW,EAAW7lB,MAAM,MAC/Hmod,IACEqB,IACFrB,EAAeqB,GAEjB,EAAKtkE,wBAAwBzyN,EAAU7iL,YAAau4c,EAAanod,QAMnEmod,GACF,EAAKtzW,MAAM14E,oBAAoBgsb,EAAanod,MAC5C,EAAK60G,MAAM1lF,iCAAiC,IAE5C,EAAKs6b,qBAAqB,qBAEvB,GAAIp6b,EAA6B,EAAG,CACzC,IAAMk6b,EAAkB9kc,EAAOc,aAAaW,WAAU,SAAAL,GAAA,OAAcA,EAAW7lB,OAAS,EAAK60G,MAAMvtF,oBAC/F,EAAKutF,MAAM7nF,YAAYu8b,EAAgB,GACzC,EAAK10W,MAAM14E,oBAAoB1X,EAAOc,aAAagkc,EAAgB,GAAGvpd,MAEtE,EAAKioZ,uBAEF,CACL,IAAMt0J,EAAuBtkO,GAA8B,EAAI,EAAIA,EACnE,EAAKwlF,MAAM1lF,iCAAiCwkO,GAC5C,IAAM01N,EAAiB/hc,EAAiBtB,SAAS2tO,GACjD17J,YAAW,WACT,EAAKgwX,mBAAmBoB,GACxB,IAAM7hP,EAAgB7kO,SAASg9F,cAAc,iBACzC6nI,IACFA,EAAcxwI,WAAa,KAE5B,SAGL,GAAI3nE,EAA6B,EAAK/e,MAAM02K,WAAWhhK,UAAS,GAAOhoB,OAAS,EAAG,CACjF,IAAMurd,EAAkB,EAAK10W,MAAM7nF,YAAY9G,WAAU,SAAAnB,GAAA,OAAQA,IAAS,EAAK8vF,MAAMrtF,kBAC/E4hc,EAAe,EAAKv0W,MAAM7nF,YAAYu8b,EAAgB,GACxDH,GACF,EAAKv0W,MAAMxnF,uBAAsB,EAAM+7b,GACvC,EAAKv0W,MAAM1lF,iCAAiC,IAE5C,EAAKs6b,qBAAqB,qBAGvB,GAAIp6b,EAA6B,EAAG,CACzC,IAAMk6b,EAAkB,EAAK10W,MAAM7nF,YAAY9G,WAAU,SAAAnB,GAAA,OAAQA,IAAS,EAAK8vF,MAAMrtF,kBACjF,EAAKqtF,MAAM7nF,YAAYu8b,EAAgB,GACzC,EAAK10W,MAAMxnF,uBAAsB,EAAM,EAAKwnF,MAAM7nF,YAAYu8b,EAAgB,IAE9E,EAAKthE,uBAEF,CACL,IAAMt0J,EAAuBtkO,GAA8B,EAAI,EAAIA,EACnE,EAAKwlF,MAAM1lF,iCAAiCwkO,GAC5C,IAAM01N,EAAiB,EAAK/4c,MAAM02K,WAAWhhK,UAAS,GAAO2tO,GAC7D17J,YAAW,WACT,EAAKgwX,mBAAmBoB,GACxB,IAAM7hP,EAAgB7kO,SAASg9F,cAAc,iBACzC6nI,IACFA,EAAcxwI,WAAa,KAE5B,GAIF,EAAK6d,MAAMxmF,oBACd,EAAKwmF,MAAMzmF,eAAc,GAGtB,EAAKymF,MAAMrmF,oBACd,EAAKqmF,MAAMtmF,eAAc,GAG3B,EAAKsmF,MAAMgjD,YAAY,KA9aN,EAkbnBowP,iBAAmB,SAACtnY,GACd,EAAKk0F,MAAM7mF,qBACb,EAAK6mF,MAAM9mF,2BAA2B,MAEtC,EAAK07b,qBAAqB9oc,IAtbX,EA0bnB8oc,qBAAuB,SAAC9oc,GACtB,EAAKk0F,MAAMxnF,uBAAsB,EAAO,EAAKwnF,MAAMrtF,gBACvC,iBAAR7G,GACF,EAAKk0F,MAAMn+E,gBAAgB,aAC3B,EAAA+E,YAAYn9B,KAAK,kBAEjBqE,SAAS6C,KAAKC,UAAU27K,OAAO,mBAC/B,EAAA3lJ,YAAYn9B,KAAK,kBAjcF,EAqcnBsnZ,UAAY,SAACw/B,GACX,OAAQ,EAAK90a,MAAM02K,WAAW5hK,UAC5B,IAAK,SACH,EAAKyvF,MAAMzmF,eAAc,GACzB,MACF,IAAK,SACH,EAAKymF,MAAMtmF,eAAc,GAK7B,EAAKje,MAAM02K,WAAW29C,mBAAmBygN,GACzC,EAAKvwU,MAAM1lF,iCAAiC,GAC5C,EAAK03J,SAAS,CACZr5F,WAAY,KACX,WACD,IAAMg6I,EAAgB7kO,SAASg9F,cAAc,iBACzC6nI,IACFA,EAAcxwI,WAAa,OAvdd,EA4dnBooK,mBA5dmB,gCA4dC,WAAO5xK,GAAP,iFACdA,EADc,uBAEVi6F,EAAY,EAAKkhS,qBAAqB5jc,KAF5B,UAGV,IAAAs6O,sBAAqB53E,EAAWj6F,GAAY,SAACk8X,GAC7C,EAAKttP,YACP,EAAKv1C,SAAS,CAAC6iS,qBALH,OAQZ,EAAKttP,YACP,EAAK7P,cATS,6CA5dD,+CA0enB+yC,oBAAqB,aAAS,EAAKF,kBAAmB,KA1enC,EA4enB94C,yBA5emB,gCA4eO,WAAOn8G,GAAP,oFAClB3c,EAAa2c,EAAMlqF,OAAOxf,MAChC,EAAKomL,SAAS,CACZr5F,eAHsB,SAKlB,EAAK8xK,mBAAmB9xK,GALN,6CA5eP,+CAofnB+7I,gBAAkB,WAChB,EAAKhd,eArfY,EAwfnBo8P,mBAAqB,WACnB,IAAMlkc,GAAS,IAAAC,oBACf,GAAID,EAAOc,cAAgB,EAAKsvF,MAAMvtF,iBAAkB,CACtD,IAAIA,EAAmB7C,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAAS,EAAK60G,MAAMvtF,oBAO7F,OANKA,IACHA,EAAmB7C,EAAOc,aAAa,GACvC0yE,YAAW,WACT,EAAK4c,MAAM14E,oBAAoB7U,EAAiBtnB,QAC/C,IAEEsnB,EAAiBtB,SAAS,EAAK6uF,MAAMxlF,6BAA+B/H,EAAiBtB,SAAS,GAIrG,OAAK,EAAK1V,MAAM02K,WAGK,EAAK12K,MAAM02K,WAAWhhK,UAAS,GAChC,EAAK6uF,MAAMxlF,4BAHtB,MAvgBM,EA+gBnB2O,YAAc,SAACopJ,EAAe3iK,GAC5B,GAAI,EAAKnU,MAAM02K,aAAeI,GAAiB,EAAK92K,MAAM02K,WAAWl6K,WAAa,EAAAC,aAAa02B,QAAS,CACtG,IAAMgjJ,EAAa,CAAC1hK,KAAM,EAAKzU,MAAM02K,YAC/BsC,EAAiB7C,EAAW1hK,KAAKjY,WAAa,EAAAC,aAAa02B,OAAUgjJ,EAAaW,EACxF,OAAO3iK,EAAOo9E,sBACZynF,EACA,EAAKz0E,MAAMhtF,gBACX,EAAKvX,MAAMk9E,YACX,GACA,EACA,EAAKqnB,MAAMt1F,aACX,CAACshM,oBAAqB,EAAKhsG,MAAMvtF,mBAGrC,MAAO,IA3hBP,EAAKhX,MAAQ,CACX02K,WAAY,KACZx5F,WAAY,GACZk8X,eAAe,GAEjB,EAAKttP,YAAa,EAClB,EAAK+sP,oBAAsB,GAC3B,EAAK1kM,qBAAuB,GATX,E,qFAabl7Q,KAAKsrG,MAAMvnF,iBACb3qB,SAAS6C,KAAKC,UAAUC,IAAI,qB,0CAIZ,WACZ+e,GAAS,IAAAC,oBACfnb,KAAK6yN,YAAa,EAClB,IAAM50M,EAAiBje,KAAKsrG,MAAMrtF,gBAClCje,KAAKs9K,SAAS,CACZG,WAAYviK,EAAOsD,MAAMP,KACxB,WACD,IAAImic,EAAc,EAAKhB,qBACnBgB,GACF,EAAK1B,mBAAmB0B,MAGvBllc,EAAOc,eAIWd,EAAOc,aAAa,KACpBhc,KAAKsrG,MAAMvtF,kBAC9B/d,KAAK2+c,oCAAmC,GAE1C3+c,KAAKqgd,SAAW,EAAAnub,YAAYoub,OAAOtgd,KAAKs/c,uBAPxCt/c,KAAKqgd,SAAW,EAAAnub,YAAYoub,OAAOtgd,KAAKs/c,qBACxCt/c,KAAKs/c,uBAQP,IAAKt/c,KAAKsrG,MAAMvnF,gBACd,GAAK7I,EAAOc,aAOVhc,KAAKsrG,MAAMxnF,uBAAsB,EAAM9jB,KAAKsrG,MAAMrtF,gBAAkBje,KAAKsrG,MAAM7nF,YAAY,QAPnE,CACxB,IAAM5H,EAAW7b,KAAKsrG,MAAM9mG,MAAMs2G,OAAOj/F,SACnC2jc,EAAmBx/c,KAAKsrG,MAAM7nF,YAAY3X,MAAK,SAAA2zc,GAAA,OAAYA,EAASnjd,gBAAkBuf,KAC5F7b,KAAKsrG,MAAMxnF,uBAAsB,EAAM07b,GAAoBx/c,KAAKsrG,MAAMrtF,iBAAmBuhc,EACrFA,EACAx/c,KAAKsrG,MAAMrtF,gBAAkBje,KAAKsrG,MAAM7nF,YAAY,KAK5D,aAAEtrB,QAAQwqG,GAAG,UAAYqzB,oBAAqBh2H,KAAKggO,iBAI/C7nO,OAAO2B,SAASwb,KAAKnb,SAAS,gBAAkB6F,KAAKsrG,MAAM7kF,WAC7DzmB,KAAKsrG,MAAM9kF,8BAA6B,GACxCxmB,KAAKsrG,MAAMxnF,uBAAsB,M,gDAKX86J,GACxB,IAAM1jK,GAAS,IAAAC,oBACXyjK,EAAU3gK,gBAAmBje,KAAKsrG,MAAMrtF,iBAAmB2gK,EAAU3gK,iBAAoB9lB,OAAO2B,SAASwb,KAAKnb,SAAS,eACzH6F,KAAK0/c,iBAAiB9gS,EAAU3gK,iBAE7B2gK,EAAU94J,4BAAuE,IAAzC84J,EAAU94J,4BAClD9lB,KAAKsrG,MAAMxlF,6BAA+B84J,EAAU94J,4BAA+B3tB,OAAO2B,SAASwb,KAAKnb,SAAS,gBAChH+gB,EAAOc,aACThc,KAAKy+c,kBAAkB7/R,IAEvB,IAAAurE,iBAAgBnqP,KAAK+G,MAAM02K,WAAYmB,EAAU94J,4BAA4B,IAG7E5K,EAAOc,cAAiB4iK,EAAU7gK,mBAAqB/d,KAAKsrG,MAAMvtF,mBAAsB5lB,OAAO2B,SAASwb,KAAKnb,SAAS,cACxH6F,KAAKy+c,kBAAkB7/R,GACbA,EAAUn4J,WAAYzmB,KAAKsrG,MAAM7kF,UAAavL,EAAOc,cAC/Dhc,KAAK0/c,iBAAiB9gS,EAAU3gK,kB,6CAgBlCje,KAAK6yN,YAAa,EAClB7yN,KAAKqgd,YACL,aAAElod,QAAQ8gO,IAAI,UAAYjjG,oBAAqBh2H,KAAKggO,iBACpDhgO,KAAKsrG,MAAMgjD,YAAY,M,+BAicvB,IAAMpzI,GAAS,IAAAC,oBACX0iK,EAAgB,GAChB79K,KAAK+G,MAAM02K,aACbI,EAAgB79K,KAAKo/c,sBAGvB,IAAMz9X,EAAW3hF,KAAKy0B,YAAYopJ,EAAe3iK,GAQ3Cqlc,GAAoBvgd,KAAKsrG,MAAMxmF,oBAAsB9kB,KAAK+G,MAAM02K,YACjEz9K,KAAK+G,MAAM02K,WAAW8hD,WAAW9qO,QAA6C,WAAnCuL,KAAK+G,MAAM02K,WAAW5hK,UACrC,iBAA5B7b,KAAKsrG,MAAMl+E,cAC+B,IAA1CptB,KAAKsrG,MAAMxlF,2BACV06b,GAAoBxgd,KAAKsrG,MAAMrmF,oBAAsBjlB,KAAK+G,MAAM02K,YACjEz9K,KAAK+G,MAAM02K,WAAW8hD,WAAW9qO,QAA6C,WAAnCuL,KAAK+G,MAAM02K,WAAW5hK,UACrC,iBAA5B7b,KAAKsrG,MAAMl+E,cAC+B,IAA1CptB,KAAKsrG,MAAMxlF,2BAEhB,OAAO9lB,KAAKsrG,MAAMvnF,iBAAmB/jB,KAAKsrG,MAAMrtF,gBAAkBje,KAAK+G,MAAM02K,WAC3E,wCACE,+BAAK7yF,UAAU,0BACb,+BAAKA,UAAU,+BAGX21X,GAAqBC,EAsBnB,KArBF,+BAAK51X,UAAU,aACb,mCAAe21N,iBAAiB,IAC/B1iI,EACC,mCAAel8F,SAAUA,EACVw+X,cAAengd,KAAK+G,MAAMo5c,cAC1Bl8X,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9Bt/B,WAAYz9K,KAAK+G,MAAM02K,WACvBI,cAAeA,EACf6gO,iBAAkB1+Y,KAAK0+Y,iBACvB9E,4BAA6B55Y,KAAK45Y,4BAClC75K,aAAc//N,KAAKggO,gBACnB27K,wBAAyB37Y,KAAK27Y,wBAC9BU,UAAWr8Y,KAAKq8Y,YAC7B,KACJ,mCAAiB5+N,WAAYz9K,KAAK+G,MAAM02K,WACvBv5B,eAAgBlkJ,KAAK+G,MAAM02K,WAAWv5B,eACtC01P,4BAA6B55Y,KAAK45Y,4BAClC/7N,cAAeA,EACf6gO,iBAAkB1+Y,KAAK0+Y,qBAI9C,mCACE12Y,GAAG,kBACHi8E,WAAYjkF,KAAK+G,MAAMk9E,WACvB84H,wBAAyB/8M,KAAK+8M,wBAC9B7hM,OAAQA,EACRgjK,UAAWL,IAEb,yCAED79K,KAAKsrG,MAAM7kF,SAAW,KAAO,yCAE9B,S,yBAwCO,IAAA8pK,aAAW,IAAAzkF,UApCF,SAACxzG,GAAU,MACqDA,EAAMgR,YAArFqX,EAD0B,EAC1BA,YAAa6qF,EADa,EACbA,kBAAmBi2E,EADN,EACMA,sBAAuBW,EAD7B,EAC6BA,qBAD7B,EAGT9pL,EAAMytB,eADvBhC,EAF0B,EAE1BA,gBAAiB9F,EAFS,EAETA,eAAgB6H,EAFP,EAEOA,2BAA4BrB,EAFnC,EAEmCA,qBAAsBK,EAFzD,EAEyDA,mBACxFG,EAH+B,EAG/BA,mBAEKhY,EAAoB3U,EAAM4U,YAA1BD,iBAL0B,EAMC3U,EAAM8J,UAAjCgrB,EAN0B,EAM1BA,aAAc7qB,EANY,EAMZA,UACdotP,EAA0Br3P,EAAM+sO,iBAAhCsqB,uBAP0B,EAQKr3P,EAAMouB,wBAC5C,MAAO,CACL3C,kBACA9F,iBACA6H,6BACArB,uBACAK,qBACAG,qBACAtE,cACA8F,SAjB+B,EAQ1BA,SAUL2jG,kBAlB+B,EAQhBA,kBAWf3mG,YAAanrB,EAAMgrN,WAAW7/L,YAC9B2J,eACA9O,gBAAiBhmB,EAAMyc,YAAYuJ,gBACnCP,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAGhC/H,aAAc1d,EAAMyc,YAAYiB,aAChC/I,mBACA1K,YACAipG,oBACArzF,eAAgB7f,EAAMqN,gBACtBgqP,yBACAluE,wBACAW,0BAI+C,CACjDt+J,8CACAU,wDACA2I,kCACAvH,oEACAf,8BACAG,8BACA4N,0CACAm9H,8CACAvpI,4DACA8nI,0BACAmhG,wCACAC,4EACAxpO,qCAbwB,CAcvBs4b,K,kMCzsBkBiC,E,wNAEF1qa,GACf/9C,QAAQ4B,IAAI,wBAAyBm8C,O,KALzC,Q,mBAEqB0qa,G,+ICFrB,M,IACA,MACA,O,IAEA,OACA,SACA,QACA,O,IAEA,MACA,QAEA,Q,IAOA,S,IACA,SAEA,QAGA,Q,IACA,S,IACA,S,IACA,O,IAEA,S,IACA,Q,IACA,SACA,SACA,SACA,S,IACA,O,IACA,S,IACA,S,IACA,SACA,S,IAEA,Q,IACA,S,IACA,S,IACA,S,IACA,Q,uDAGMC,G,gBAeJ,WAAYp1W,IAAO,gGACXA,IADW,iBAEjB,EAAKvkG,MAAQ,CACX45c,iBAAkB,EAClBj7E,YAAa,EACbk7E,UAAW,GACXC,gBAAiB,GACjBC,cAAc,EACdjmE,eAAgB,EAChBQ,eAAe,EACfx7Y,OAAQ,EACRkhd,eAAe,EACfC,iBAAiB,EACjBC,kBAAkB,GAEpB,EAAKplI,UAAY,KACjB,EAAKwlE,SAAW,EAChB,EAAK6/D,oBAAqB,EAC1B,EAAKC,YAAa,EAlBD,E,oFAqBC,WAClBnhd,KAAKkmB,oBACL,aAAE/tB,QAAQwqG,GAAG,SAAU3iG,KAAKmrP,eAC5B,aAAEhzP,QAAQwqG,GAAG,UAAY8yB,iBAAkBz1H,KAAKgjO,eAChDhjO,KAAKohd,+BACD,IAAAj9c,qBACFhM,OAAO0uD,iBAAiB,SAAU7mD,KAAKmrP,cACvCz8J,YAAW,WAETv2F,OAAOoxX,SAAS,EAAG,KAClB,KAEL,aAAEpxX,QAAQwqG,GAAG,UAAY6yB,eAAe,WAClC,EAAK2rV,YACP,EAAKn+P,mB,gDAKepkC,GAAW,YAC9BA,EAAUnB,WAAW5hK,WAAa7b,KAAKsrG,MAAMmyE,WAAW5hK,UACvD+iK,EAAUf,eAAkBe,EAAUf,cAAcriK,KAAKK,WAAa7b,KAAKsrG,MAAMuyE,cAAcriK,KAAKK,YACxG7b,KAAKkmB,iBAAiB,KAAM04J,GAC5B5+K,KAAKqhd,cAAcziS,IAErBlwF,YAAW,WAEJkwF,EAAUf,cAAcriK,KAAK2K,eAChCy4J,EAAUf,cAAcriK,KAAK4qE,eAG9B,IACCpmF,KAAKkhd,qBACFlhd,KAAK+G,MAAM8zY,iBAAmBj8N,EAAUn+K,WAAcm+K,EAAUn6J,sBAAwBzkB,KAAKsrG,MAAM7mF,wBACxGzkB,KAAKmrP,eACLnrP,KAAKkhd,oBAAqB,GAExBtiS,EAAUt6J,sBAAwBtkB,KAAKsrG,MAAMhnF,qBAAwBs6J,EAAUn+K,WACjFT,KAAKs9K,SAAS,CACZ+9N,eAAe,IAEjB3sT,YAAW,WACL,EAAKyyX,YACP,EAAKG,yBAEN,IAEDthd,KAAKsrG,MAAM7kF,WAAam4J,EAAUn4J,SACpCzmB,KAAKuhd,aACwC,IAApC3iS,EAAU1uB,uBAAgClwJ,KAAKsrG,MAAM4kD,uBAC9DlwJ,KAAKqtY,W,8CAaP,aAAEl1Y,QAAQ8gO,IAAI,SAAUj5N,KAAKmrP,eAC7B,aAAEhzP,QAAQ8gO,IAAI,UAAYzjG,gBAC1B,aAAEr9H,QAAQ8gO,IAAI,UAAYxjG,iBAAkBz1H,KAAKgjO,gBAC7C,IAAA7+N,oBACFhM,OAAO+qG,oBAAoB,SAAUljG,KAAKmrP,cAE5CnrP,KAAKmhd,YAAa,I,6CAsDlB,GAAKnhd,KAAKmhd,WAAV,CAGA,IAAIrlI,EAAkB,EACtB,OAAO97U,KAAKsrG,MAAMhnF,qBAChB,KAAK,EACHw3T,EAAkB,KAClB,MACF,KAAK,EACHA,EAAkB,GAClB,MACF,KAAK,EACHA,EAAkB,GAClB,MACF,QACEA,EAAkB,KAGtB,IAAM++D,GAAiB,aAAE76Y,KAAK67U,WAAWl8U,QAAQm8U,EAAgB,IACjE97U,KAAKs9K,SAAS,CACZu9N,iBACAQ,eAAe,O,+BAoKV,WACDngY,GAAS,IAAAC,oBADR,EAIkC/hB,SAASC,SAA3C2b,EAJA,EAIAA,UAAWC,EAJX,EAIWA,MAAOC,EAJlB,EAIkBA,aAJlB,EAK0DlV,KAAKsrG,MAA/DuyE,EALA,EAKAA,cAAe13J,EALf,EAKeA,cAAehO,EAL9B,EAK8BA,eAAgB1X,EAL9C,EAK8CA,SAC/CqR,EAAqBqG,EAAezQ,SAEpCwgF,EAAahtE,EAAOqmE,+BAA+BjlF,cAEnD68M,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBAGzDwkQ,EADep9c,IAAY,IAAA0D,mBACU,CAAEtE,OAAQG,KAAK+G,MAAMlH,OAAS,IAAO,GAE1E2hd,EAAiBr7b,GAAiBA,EAAczlB,YAAY6lF,WAAWvmF,KAAKsrG,MAAMr+F,kBAElFw0c,EAAiBD,IACjBr7b,EAAcxiB,UAAUgS,UACxB7D,EAAmBy3T,sBAAwBv0T,GAAaC,GAASC,KACjElV,KAAKsrG,MAAMl2F,yBAA2BtD,EAAmBuD,wBAGzDqsc,GAAkB1hd,KAAK+G,MAAMi6c,iBAAmBvgd,EAKhDm8K,EAAkB9qK,EAAmB+qK,YAErC8kS,GAA8B3hd,KAAK+G,MAAMi6c,kBAAoBhhd,KAAKsrG,MAAMqkJ,0BACvE79O,EAAmBuD,yBAA4BvD,EAAmBuD,yBAA2BrV,KAAKsrG,MAAMl2F,wBACvGtD,EAAmBuD,yBAA2Bjc,SAASC,SAASuhd,sBACjE9oc,EAAmB6L,sBAAwB3d,KAAKsrG,MAAM8e,mBAEvDnK,EAAS/kG,EAAOo+L,UAAUH,GAE1ByoQ,GAA2BH,IAAmBzhd,KAAK+G,MAAMi6c,iBAAmBQ,GAAkBr7b,GAC/FA,EAAcy9D,2BAA6B5jF,KAAKsrG,MAAMqkJ,yBAA2Bx3O,EAAeG,cAE/F61I,GAAyBszT,IAAmBzhd,KAAK+G,MAAMi6c,iBAAmBQ,GAAkBr7b,IAC5FA,EAAcy9D,2BAA6B5jF,KAAKsrG,MAAMqkJ,wBAA0B3vP,KAAKsrG,MAAM6iD,sBAG3Fo1E,EAAc,gDAAkDnqO,SAASC,SAASoC,eACpF,2BAA2BysF,EAC3B,iCAAiChtE,EAAOkZ,MACxC,2BAA2Bp0B,KAAK6hd,oBAC/B7hd,KAAK+G,MAAMi6c,gBAAkB,oCAAsC,KACnEhhd,KAAK+G,MAAMk6c,iBAAmB,qCAAuC,KACpEhhW,EAAOxrH,QAA4B,IAAlBwrH,EAAOxrH,OAAqD,GAAtC,qCAE7C,OACE,+BAAKm2F,UAAU,iBAAiBv2E,MAAOwpc,GACrC,+BAAKjzX,UAAU,kBACb,+BAAKA,UAAU,kBACb,wCACA,+BAAKA,UAAW24I,EAAalvN,MAAOrU,KAAK+G,MAAM+6c,mBAC7C,mCAAsB56P,cAAelnN,KAAKknN,cACpBi3C,aAAcn+P,KAAKm+P,eACxCn+P,KAAK+hd,qBAAqB9hW,EAAQ/kG,GAClClb,KAAK+G,MAAMg6c,gBAAkB/gd,KAAKsrG,MAAMqkJ,uBACvC,+BAAK/kK,UAAU,qBACb,+BAAKA,UAAU,6BACb,+BAAKA,UAAU,6DACb,+BAAKA,UAAU,uCACf,mCAAYA,UAAU,0CAI1B,MAKF62X,IAAmBzhd,KAAK+G,MAAMi6c,iBAAmBnjS,GAAiB79K,KAAKsrG,MAAM3pB,SAASltF,OACpF,mCAA2BgpL,WAAYI,IACvC,MACH4jS,GAAmBzhd,KAAK+G,MAAMi6c,iBAAoBhhd,KAAKsrG,MAAMqkJ,uBAY1D,KAXF,+BAAK/kK,UAAU,QACb,gCAAMA,UAAU,cAChB,6BAAGA,UAAU,aAAY,4CAAkB5iF,GAAG,wCAC9C,kCAAQ4iF,UAAU,2CAA2CkyF,QAAS,kBAAM,EAAKC,qBAC/EH,EAAkB,EAAAt9H,eAAeE,SAAW,EAAAF,eAAeC,UAE1Dq9H,EACG,4CAAkB50K,GAAG,sCACrB,4CAAkBA,GAAG,yCAI9B45c,EACC,mCAAqBv0E,OAAQrtY,KAAKqtY,OACb5sY,SAAUA,EACVo6Y,eAAgB76Y,KAAK+G,MAAM8zY,eAC3B10X,cAAeA,IAClC,KACHgoI,EAAwB,wCAAwB,KAChDuzT,EACC1hd,KAAKsrG,MAAMw1H,WAAa9gO,KAAKsrG,MAAMw1H,UAAUrsO,OAAS,EAClD,mCAAY0mV,aAAa,EACbC,qBAAsB,oEAClC,mCAAYxwP,UAAU,oDACxB,KAOH+2X,EACC,kCAAQ/2X,UAAU,wEAAwEkyF,QAAS98K,KAAKqtY,SACtG,KAMJ,wCACCj0Y,SAASC,SAAS8mT,qBAAuBngT,KAAKsrG,MAAMqkJ,uBACjD,kCAAQ/kK,UAAW,qEAClB82X,EAAiB,mDAAqD,IAE/D5kS,QAAS98K,KAAKgid,qBACtB,OAIPhid,KAAKsrG,MAAM7mF,qBACV,mCACEk9D,SAAU3hF,KAAKsrG,MAAM3pB,SACrB46P,mBAAoBv8U,KAAKu8U,mBACzB9+J,WAAYz9K,KAAKsrG,MAAMmyE,WACvBm8N,4BAA6B55Y,KAAKsrG,MAAMsuS,8BAG1C,+BAAKhvT,UAAU,2BACb,mCAAqBmyH,wBAAyB/8M,KAAKsrG,MAAMyxG,wBACpC94H,WAAYjkF,KAAKsrG,MAAMrnB,WACvB45F,cAAeA,IACpC,+BAAKjzF,UAAU,qBACb,mCACEwwT,OAAQp7Y,KAAKo7Y,OACbr7N,cAAe//K,KAAKiid,mBACpBtgY,SAAU3hF,KAAKsrG,MAAM3pB,SACrBk5T,eAAgB76Y,KAAK+G,MAAM8zY,eAC3BQ,eAAgBr7Y,KAAKsrG,MAAM60W,eAAiBngd,KAAK+G,MAAMs0Y,cACvDt+N,qBAAsB/8K,KAAK+8K,qBAC3Bj5F,WAAY5oE,EAAOwmE,uBACnBq+I,aAAc//N,KAAKsrG,MAAMy0H,aACzB47K,wBAAyB37Y,KAAKsrG,MAAMqwS,6BAsB7Cx1X,GAAiBnmB,KAAKsrG,MAAMoiD,eAAiB,wCAAa,U,gBAlgB1DxL,UAAY,CACjB27B,cAAe,UAAUlmL,OAAOshH,WAChCwkE,WAAY,UAAU9lL,OACtBssF,WAAY,UAAUzhD,OAAOy2E,WAC7B8jG,wBAAyB,UAAUh+B,KAAK9lE,WACxCylS,iBAAkB,UAAU3/N,KAAK9lE,WACjC2gS,4BAA6B,UAAU76N,KAAK9lE,WAC5Ct3B,SAAU,UAAUtrE,MAAM4iG,WAC1B+mH,gBAAiB,UAAUjhD,KAC3B48N,wBAAyB,UAAU58N,KACnCohS,cAAe,UAAU/9T,M,6BA8E3B+oG,aAAe,WACb,EAAK7tE,SAAS,CACZ+9N,eAAe,IAEjB15P,aAAa,EAAK0/P,UAClB,EAAKA,SAAW3yT,WAAW,EAAK0yX,4BAA6B,M,KAa/Dp+O,cAAgB,WACT,EAAKm+O,YAGV,EAAKn+P,e,KAGPq+P,cAAgB,WAA4B,IAA3BziS,EAA2B,uDAAf,EAAKtzE,MACzB7qG,EAAYm+K,EAAZn+K,SACDyhd,EAAYtjS,EAAUf,eAAiBe,EAAUnB,WAEnDykS,GAAaA,EAAU1mc,MACrB/a,GAAcyhd,EAAU1mc,KAAKm4P,aAA8C,IAA/BuuM,EAAU1mc,KAAKm4P,YAIpDuuM,EAAU1mc,KAAKm4P,aAAgBuuM,EAAU1mc,KAAKm4P,cAAgB/0F,EAAUt6J,oBACjF,EAAKgnF,MAAMq0S,qBAAqBuiE,EAAU1mc,KAAKm4P,aACrCuuM,EAAU1mc,KAAKm4P,aAAkD,IAAlC/0F,EAAUt6J,qBACnD,EAAKgnF,MAAMq0S,qBAAqB,GANM,IAAlC/gO,EAAUt6J,qBACZ,EAAKgnF,MAAMq0S,qBAAqB,GAO3Bl/Y,GAA+C,IAAnC,EAAK6qG,MAAMhnF,qBAChC,EAAKgnF,MAAMq0S,qBAAqB,I,KAIpCyhE,4BAA8B,WAC5B,EAAKC,gBACc,EAAK/1W,MAAjB7qG,SAELiuF,YAAW,WAET,EAAK4uF,SAAS,CACZu9N,gBAAgB,aAAE,EAAKh/D,WAAWh8U,SAClCw7Y,eAAe,MAEhB,GAEH3sT,YAAW,WACT,EAAK4yX,yBACJ,IAED,EAAKh2W,MAAM7mF,sBAAwB,EAAK6mF,MAAM7kF,YAChD,EAAKy6b,oBAAqB,GAE5B,EAAK5jS,SAAS,CACZz9K,OAAQ1H,OAAO+xD,YAAc9wD,SAAS6C,KAAKgrK,a,KA8B/C04O,qBAAuB,SAACxpZ,GACtB,UAAUgrC,eAAe,oBAAsBhrC,EAAEugB,OAAOu7C,QAAQxyB,MAChE,EAAK6rE,MAAMq0S,sBAAsBxpZ,EAAEugB,OAAOu7C,QAAQxyB,O,KAGpD88S,mBAAqB,SAACp2T,GACpBA,EAAc3K,KAAKirF,cACnB,EAAK6E,MAAMplF,iBAAiBC,EAAc3K,O,KAI5CmyL,mBAAqB,SAACxnL,GACpB,EAAKm3J,UAAL,gBACGn3J,GAAiB,EAAKpf,MAAMof,M,KAIjC42J,qBAAuB,WAA2C,IAA1C0wB,EAA0C,uDAA1B,EAAAnuJ,eAAeC,OAC/CztC,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SAC/Ck1K,EAAkB9qK,EAAmB+qK,YAC3C,UAAU17I,eAAey7I,EAAkB,8BAAgC,cACvE,EAAKtxE,MAAMthF,eACTlY,EAAmBwuC,MAChB,EAAKgrD,MAAMl2F,uBAMd,EAAKu4L,mBAAmB,oBALxB,EAAKriG,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBwjL,kBAMJ,EAAKE,mBAAmB,oBAG1B,EAAKriG,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,EACjBwjL,mB,KAKNvnL,iBAAmB,WAA8C,IAA7CC,EAA6C,uDAA7B,KAAMmlF,EAAuB,uDAAf,EAAKA,MAGrD,IAAKnlF,EAAe,CAClB,IAAM45J,EAAgB,EAAKkiS,iBAAiB32W,GACtCx5F,EAAqB,EAAKw5F,MAAMnzF,eAAezQ,SACrDye,EAAkBrU,EAAmBy3T,sBAAwBnwU,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,gBACnI,EAAKo2F,MAAMthF,gBAAkB+1J,EAAcv5F,qBAC5C10E,EAAmBy3T,sBAAwBnwU,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAAS7b,SAASC,SAAS6b,eACvH,EAAKo2F,MAAMthF,gBACX+1J,EAAcv5F,sBACbu5F,EAAcr5F,mBAChBq5F,EAAcv5F,oBACdu5F,EAAc55J,cACZ45J,EAAc55J,cACd45J,EAAcp5F,8BAAgCo5F,EAAcx5F,WAAW+kB,EAAMr+F,kBAC3E8yK,EAAcp5F,6BACd,KAGV,EAAK2kB,MAAMplF,iBAAiBC,I,KAG9B87b,iBAAmB,WAAwB,IAAvB32W,EAAuB,uDAAf,EAAKA,MAC/B,OAAOA,EAAMmyE,WAAWl6K,WAAa,EAAAC,aAAaC,QAC9C6nG,EAAMuyE,cAAcriK,KACpB8vF,EAAMmyE,Y,KAGZ29N,OAAS,SAACp7P,GACR,EAAK67L,UAAY77L,G,KAGnBgiU,mBAAqB,WACnB,EAAK12W,MAAMikJ,mBAAmB,EAAAwrB,0BAA0BC,OACxD,EAAA9oP,YAAYn9B,KAAK,W,KAGnBopQ,aAAe,WACR,EAAKgjN,aAGV,UAAMl9b,UAAS,IAAAknF,gBACf,EAAKmyE,SAAS,CACZyjS,eAAe,M,KAInB75P,cAAgB,WACd,EAAK5pC,SAAS,CACZyjS,eAAe,IAEjB,UAAM98b,UAAS,IAAAmnF,iB,KAGjBk0H,sBAAwB,YACtB,aAAEnnO,QAAQ+pG,QAAQ,WAClB,aAAE/pG,QAAQ+pG,QAAQ,UAAY8zB,sB,KAGhC6rV,iBAAmB,WAAM,MACyD,EAAKv2W,MAA9EuyE,EADgB,EAChBA,cAAel8F,EADC,EACDA,SAAU5jE,EADT,EACSA,iBAAkB+H,EAD3B,EAC2BA,2BAClD,IAAK+3J,EACH,MAAO,GAET,GAAIl8F,EAASltF,QAAUktF,EAAS9jF,OAAM,SAAA8hB,GAAA,OAAWA,EAAQnE,KAAKooE,6BAA6B99D,EAA6B,EAAG,CACzH,IAAM5K,GAAS,IAAAC,oBACf,GAAID,EAAOc,cAAgB+B,EAAkB,CAC3C,IAAIzB,EAAapB,EAAOc,aAAalQ,MAAK,SAAAwQ,GAAA,OAAcA,EAAW7lB,OAASsnB,KAC5E,GAAIzB,EAAY,CACd,IAAMG,EAAWH,EAAWG,SAC5B,GAAIA,EAAShoB,OACX,IAAK,IAAIF,EAAIuxB,EAA6B,EAAGvxB,GAAM,EAAGA,IACpD,GAAIkoB,EAASloB,GAAI,CACf,IAAM4td,EAAwBjnc,EAAOo9E,sBAAsB77E,EAASloB,GAAG,GAAI,IAAG,GAAM,GACpF,GAAI4td,EAAsB1td,QAAU0td,EAAsBlid,MAAK,SAAA0f,GAAA,OAAYA,EAAQnE,KAAKooE,4BACtF,OAAOnnE,EAASloB,GAAGinB,KAAKlV,UAQtC,OAAOu3K,EAAcriK,KAAKlV,Q,KAG5By7c,qBAAuB,SAAC9hW,EAAQ/kG,GAAW,MAEf,EAAKowF,MADxBqkJ,EADkC,EAClCA,uBAAwBlvP,EADU,EACVA,SAAU0lB,EADA,EACAA,cAAe4B,EADf,EACeA,iBAAkBqiG,EADjC,EACiCA,kBACxEg4D,EAFuC,EAEvCA,qBACF,GAAIh4D,EACF,OAAO,KAET,GAAIulI,EACF,OAAO,mCAAqB09I,OAAQ,EAAKA,OACb5sY,SAAUA,EACVo6Y,eAAgB,EAAK9zY,MAAM8zY,eAC3BzN,2BAA2B,EAC3BjnX,cAAeA,IAE7C,GAAIi8J,EACF,OAAO,wCAET,IAAM6lO,GAAc,IAAAj0X,oBACpB,OACE,wBAACi0X,EAAD,CAAar4T,SAAS,kBACTqwB,OAAQA,EACRtgH,MAAOooB,EAAiBpoB,MACxBE,OAAQkoB,EAAiBloB,OACzBqf,WAAYhE,EAAOwmE,uBACnBxmE,OAAQA,EACRsrN,kBAAkB,EAClB23B,aAAc,EAAKA,aACnBj3C,cAAe,EAAKA,kB,GAyNjC52B,EAAqB,CACzBqvN,8CACAn7X,wDACAwE,kCACAxC,4DACAN,oCACAY,4DACA2pI,gDACA8+F,wCACA9hG,6C,WAGa,IAAA3hD,UA9CS,SAACxzG,GAAU,MACkCA,EAAMouB,wBAAlED,EAD0B,EAC1BA,SAAUE,EADgB,EAChBA,UAAWoB,EADK,EACLA,iBAAkBqiG,EADb,EACaA,kBADb,EAGqC9xH,EAAMytB,eADrE2nI,EAF0B,EAE1BA,eAAgBzvI,EAFU,EAEVA,eAAgB8F,EAFN,EAEMA,gBAAiBO,EAFvB,EAEuBA,oBAAqBG,EAF5C,EAE4CA,qBAC3E0B,EAH+B,EAG/BA,cAAegoI,EAHgB,EAGhBA,sBAAuBroI,EAHP,EAGOA,2BAHP,EAIQxtB,EAAMgR,YAAxC7I,EAJ0B,EAI1BA,SAAU2hL,EAJgB,EAIhBA,qBAEjB,MAAO,CACL37J,WACAE,YACAoB,mBACAqiG,oBACAnsG,iBACA8F,kBACAO,sBACAG,uBACA0B,gBACAunI,iBACAS,wBACAroI,6BACA/H,iBAdyBzlB,EAAMgsL,QAA1BvmK,iBAeLxb,UAAWjK,EAAM8J,UAAUG,UAC3BynB,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxC3U,WACA0X,eAAgB7f,EAAMqN,gBACtBuqJ,sBAAuB53J,EAAMyvO,cAAc73E,sBAC3CY,2BAA4Bx4J,EAAMyvO,cAAcj3E,2BAChD6+F,uBAAwBr3P,EAAM+sO,iBAAiBsqB,uBAC/C7uB,UAAWxoO,EAAMu1I,gBAAgBizF,UACjC7zN,iBAAkB3U,EAAM4U,YAAYD,iBACpCm1K,0BAgBoCkO,EAAzB,CAA6CowR,I,0HCzmB5D,O,OACA,O,IACA,SACA,OAEA,Q,IACA,Q,IACA,OACA,Q,uDAEM0B,E,yOASJzjF,uBAAyB,SAACxoY,GACxB,IAAMksd,GAAgBlsd,EAAEugB,OAAOuqI,QAAQ,aAAahvF,QAAQrkD,MAC5D,EAAK09F,MAAMv9E,YAAY,EAAKu9E,MAAM/jG,SAASO,KAAI,SAAC0kS,EAAW5+R,GAKzD,OAJIA,IAAUy0c,IACZ,UAAUlhb,eAAe,+BAAiCqrQ,EAAUt2P,OACpEs2P,EAAU74K,SAAW64K,EAAU74K,SAE1B64K,O,EAIX81K,mBAAqB,SAACC,EAAYC,GAChC,UAAUrhb,eAAe,gCAAkCohb,EAAa,IAAMC,GAC9E,EAAKl3W,MAAMv9E,YAAY,EAAKu9E,MAAM/jG,SAASO,KAAI,SAAC0kS,EAAW5+R,GASzD,OARIA,KAAW20c,IACb/1K,EAAUtgL,SAAWsgL,EAAUtgL,SAASpkH,KAAI,SAACqkH,EAAS62R,GAIpD,OAHIA,KAAYw/D,IACdr2V,EAAQZ,UAAYY,EAAQZ,UAEvBY,MAGJqgL,O,EAIXi2K,mBAAqB,SAACF,EAAYC,EAAcE,EAAWxrd,GACzD,UAAUgqC,qBAAqB,8BAAgCwhb,GAC/D,EAAKp3W,MAAMv9E,YAAY,EAAKu9E,MAAM/jG,SAASO,KAAI,SAAC0kS,EAAW5+R,GASzD,OARIA,KAAW20c,IACb/1K,EAAUtgL,SAAWsgL,EAAUtgL,SAASpkH,KAAI,SAACqkH,EAAS62R,GAIpD,OAHIA,KAAYw/D,IACdr2V,EAAQu2V,GAAaxrd,GAEhBi1H,MAGJqgL,O,EAIXm2K,iBAAmB,SAACC,EAAgBjvV,GAClC,OAAOA,EAA2B,GAAjBivV,EAAsB,G,gGA8BhC,WACD9wc,EAAqB9R,KAAKsrG,MAAMnzF,eAAezQ,SACrD,OACE,8BAAIkjF,UAAU,aACX5qF,KAAKsrG,MAAM/jG,SAASO,KAAI,SAAC0kS,EAAW5+R,GACnC,OAAI4+R,EAAUtgL,SAASruH,OAAM,SAAAsuH,GAAA,OAAWA,EAAQugL,sBACvC,KAGP,8BAAI9hN,UAAU,kBAAkBpzF,IAAK,YAAcoW,GACjD,+BAAKg9E,UAAU,WACb,+BAAKA,UAAW,gCAAkC4hN,EAAUt2P,MAAM55C,cAAcqC,QAAQ,KAAK,OAC7F,+BAAKisF,UAAU,gBACb,8BAAIA,UAAU,uBAAuB4hN,EAAUt2P,OAC/C,6BAAG00C,UAAU,6BAA6B4hN,EAAUrtR,cAEtD,+BAAKyrE,UAAU,iBACb,kCAAQA,UAAW,YAAc4hN,EAAU74K,QAAU,qBAAuB,IACpEmuK,aAAYl0R,EACZkvK,QAAS,EAAK6hN,wBACpB,gCAAM/zS,UAAU,oBAChB,gCAAMA,UAAU,oCAAmC,4CAAkB5iF,GAAG,qBACxE,gCAAM4iF,UAAU,mCAAkC,4CAAkB5iF,GAAG,wBAI5E,aAAKwkS,EAAUtgL,UACd,8BAAIthC,UAAW,eACXv2E,MAAO,CAACxU,OAAQ,EAAK8id,iBAAiBn2K,EAAUtgL,SAASz3H,OAAQ+3S,EAAU74K,WAC5E64K,EAAUtgL,SAASpkH,KAAI,SAACqkH,EAAS62R,GAChC,OACE,8BAAIp4T,UAAU,qBAAqBpzF,IAAK,UAAYwrZ,GAClD,+BAAKp4T,UAAU,cACb,+BAAKA,UAAU,uBACb,kCAAQA,UAAW,eAAiBuhC,EAAQZ,SAAW,wBAA0B,IACzEuxD,QAAS,kBAAM,EAAKwlS,mBAAmB10c,EAAOo1Y,OAExD,+BAAKp4T,UAAU,oBACZuhC,EAAQj2E,MACT,6BAAG00C,UAAU,gCAAgCuhC,EAAQhtG,cAEvD,+BACEyrE,UAAW,uBAA0BuhC,EAAQZ,SAA8C,GAAnC,mCACxD,mCAAUr0H,MAAOi1H,EAAQ8/K,OAAQ3oS,KAAK,SAAS4yC,MAAOi2E,EAAQxxG,MAAQ,WAC5DwoQ,YAAa,SAAAjsR,GAAA,OAAS,EAAKurd,mBAAmB70c,EAAOo1Y,EAAQ,SAAU9rZ,IAAQuuU,SAAU,EAC3F74B,aAAczgL,EAAQygL,aAAcp9J,gBAAiBrjB,EAAQqjB,mBAEvE,+BAAK5kD,UAAU,oBACb,+BAAKA,UAAU,0BAAyB,4CAAkB5iF,GAAG,yBAC7D,+BAAK4iF,UAAU,4BACZ,IAAAl3E,sBAAqB5B,GAAoB,IAAA9P,cAAamqH,EAAQ8/K,OAAS9/K,EAAQ3pH,gBAQ5F,c,2BAiBH,IAAAspG,UARS,SAACxzG,GACvB,MAAO,CACLiP,SAAUjP,EAAMkP,UAAUD,SAC1B2mB,qBAAsB51B,EAAMkP,UAAU0mB,qBACtC/V,eAAgB7f,EAAMqN,mBAIc,CACtCooB,2BADa,CAEZq0b,I,kICxKH,O,WACA,MACA,O,IACA,OACA,O,IACA,OAEA,S,IAKA,S,uDAGMS,G,6OAMJ97c,MAAQ,CACN+7c,eAAe,G,EAGjBC,kBAAoB,WAClB,UAAU5hb,eAAe,4BACzB,EAAKm8I,SAAS,CACZwlS,eAAe,IAGjB,IAAMv5F,EAAWnwX,SAASg9F,cAAc,oBAAoB+4L,UAAY,KACxE,aAAE,oCAAoC3hM,QAAQ,CAACy5E,UAAWsiN,GAAW,KAErE76R,YAAW,WACT,IAAM7uE,EAAgB,EAAKyrF,MAAMzrF,cAAc/X,KAAI,SAAAg6Y,GAOjD,OANAA,EAAa3jY,gBAAgBrW,KAAI,SAAA6W,GAI/B,OAHKA,EAAeoB,eAClBpB,EAAeoB,aAAe,GAEzBpB,KAEFmjY,KAET,EAAKx2S,MAAMgiD,iBAAiBztI,KAC3B,M,EAGLmjc,+BAAiC,SAACpiX,GAChC,EAAK0K,MAAMiiD,uBAAuB3sD,EAAMlqF,OAAOxf,Q,EAGjD+rd,0BAA4B,WAC1B,IAAM15F,EAAWnwX,SAASg9F,cAAc,oBAAoB+4L,WAC5D,aAAE,oCAAoC3hM,QAAQ,CAACy5E,UAAWsiN,GAAW,M,gGAG9D,WAEP,OACE,+BAAK3+R,UAAU,QAeb,+BAAKA,UAAU,YAEb,+BAAKA,UAAU,oBACb,4CAAkB5iF,GAAG,wDAAwDoyY,eAAe,wBACzF,SAAC9oQ,GAAD,OACC,iCAAO1mD,UAAU,kCACV0mD,YAAaA,EACbp6I,MAAO,EAAKo0G,MAAMkiD,oBAClBsoE,SAAU,EAAKktP,qCAI3Bhjd,KAAKsrG,MAAM3qF,YAAc,IACxB,+BAAKiqE,UAAU,iBACb,kCAAQA,UAAU,8BAA8BkyF,QAAS98K,KAAKijd,2BAC5D,4CAAkBj7c,GAAG,0DAGvB,MAEN,+BAAK4iF,UAAW,YAAc5qF,KAAK+G,MAAM+7c,cAAgB,oBAAsB,IAAK9iU,IAAK,SAACksG,GAAD,OAAQ,EAAKg3N,QAAUh3N,IAC9G,6BAAGthK,UAAU,sBACX,4CAAkB5iF,GAAG,8DAEvB,kCAAQ4iF,UAAU,gDAAgDkyF,QAAS98K,KAAK+id,mBAC9E,4CAAkB/6c,GAAG,6DAGzB,mCAA+Bu0U,mBAAoBv8U,KAAKsrG,MAAMixO,0B,kBAtF7Dr6L,UAAY,CACjBq6L,mBAAoB,UAAUx9J,KAAK9lE,Y,cAqGxB,IAAAnN,UAVS,SAACxzG,GACvB,MAAO,CACLqoB,YAAaroB,EAAMgR,YAAYqX,YAC/Bd,cAAevnB,EAAMytB,eAAelG,cACpC2tI,oBAAqBl1J,EAAMytB,eAAeynI,oBAC1C/oI,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CW,sBAAuB9sB,EAAMytB,eAAeX,yBAIR,CACtCkoI,oCACAC,iDAFa,CAGZs1T,I,8HC1HH,O,OACYxgU,E,wJAAZ,MACA,O,IACA,QACA,OAEA,S,IACA,SACA,QACA,Q,IACA,QACA,Q,uDAEM8gU,G,6OAOJp8c,MAAQ,CACN8sM,WAAW,EACXuvQ,4BAA4B,EAC5BC,kBAAmB,G,EAqBrBC,kBAAoB,SAAC1kS,GAAc,OACa,IAAA1gK,8BAC5C0gK,EAAUn6J,qBAAqBk7I,4BAA6Bif,EAAUn6J,sBADnE/F,EAD4B,EAC5BA,gBAAiBD,EADW,EACXA,qBAmBtB,OAhBIC,EAAgBjqB,SAAW,EAAKsS,MAAMq8c,6BACxC,EAAK9lS,SAAS,CACZu2B,WAAW,KAEb,IAAAvyF,eAAc5iG,GACXmT,MAAK,SAAAswE,IACW,IAAAhnF,oBACRqmG,gBAAgBrf,EAASluG,MAChC,EAAKqpL,SAAS,CACZu2B,WAAW,EACXuvQ,4BAA4B,IAE9B,EAAK91T,iBAAiB,EAAKhiD,WAGjC7sF,GAAuB,IAAAY,4BAA2BZ,IAC3C,aAAOA,GAAsB,SAACpb,GAAD,OAAaA,EAAQM,UAAUqE,O,EAGrEslJ,iBAAmB,WAA4B,IAA3BsxB,EAA2B,uDAAf,EAAKtzE,MAC5B7wF,EAAwBmkK,EAAxBnkK,KAAMtC,EAAkBymK,EAAlBzmK,eACPgG,EAAkB,EAAKmlc,kBAAkB1kS,GAE/C,EAAKtzE,MAAMgiD,kBAAiB,IAAA1tI,qBAAoBzB,EAAiBygK,EAAUr8K,UAAWq8K,EAAU3xK,iBAAkBwN,EAAMtC,K,EAG1HokU,mBAAqB,SAAC59T,GAIpB,GAHA,EAAK2+J,SAAS,CACZ+lS,kBAAmB1kc,EAAenD,KAAK7X,UAAUqE,KAE/C2W,EAAenD,KAAK9a,WAAaie,EAAenD,KAAK9a,YAAYoiF,SAAU,CAC7E,IAAM8zK,EAAaj4O,EAAenD,KAAK9a,YACnCk2P,EAAW9zK,WACb8zK,EAAW9zK,UAAW,EACtB8zK,EAAWhkK,iBAGf,EAAK0Y,MAAMixO,mBAAmB59T,I,2GAzD9B3e,KAAKstJ,qB,6CAKLttJ,KAAKsrG,MAAMgiD,iBAAiB,M,gDAGJsxB,IAEpBA,EAAUpxB,sBAAwBxtJ,KAAKsrG,MAAMkiD,qBAC3CoxB,EAAUnkK,MAAQza,KAAKsrG,MAAM7wF,MAASmkK,EAAUnkK,KAAKvC,SAAWlY,KAAKsrG,MAAM7wF,KAAKvC,SACpFlY,KAAKstJ,iBAAiBsxB,K,+BAgDjB,WAEP,OACE,8BAAIh0F,UAAU,mBACX5qF,KAAK+G,MAAM8sM,UAAY,wCAAoB7zM,KAAKsrG,MAAMzrF,cAAc/X,KAAI,SAACg6Y,EAAcyhE,GACtF,OACE,8BAAI34X,UAAU,aAAapzF,IAAK+rd,GAC9B,8BAAI34X,UAAU,oBAAoBk3T,EAAarrZ,MAC9CqrZ,EAAa3jY,gBAAgBrW,KAAI,SAAC6W,EAAgB6kc,GACjD,OAAO,mCAA8BjnI,mBAAoB,EAAKA,mBACzBpjL,SAAU,EAAKpyJ,MAAMs8c,oBAAsB1kc,EAAehb,UAAUqE,GACpE2W,eAAgBA,EAChBnnB,IAAKgsd,gB,kBArFjDthU,UAAY,CACjBz9H,qBAAsB49H,EAAU1qJ,OAAOshH,WACvCsjO,mBAAoBl6L,EAAU08B,KAAK9lE,Y,GAuGjCq3E,EAAqB,CACzBhjC,qC,WAEa,IAAAvF,aACb,IAAAj8C,UAdsB,SAACxzG,GACvB,MAAO,CACLunB,cAAevnB,EAAMytB,eAAelG,cACpC2tI,oBAAqBl1J,EAAMytB,eAAeynI,oBAC1C/oI,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CliB,UAAWjK,EAAM8J,UAAUG,UAC3B4V,eAAgB7f,EAAMqN,gBACtBsH,iBAAkB3U,EAAM4U,YAAYD,oBAObqjL,EAAzB,CAA6C6yR,K,8HC5H/C,O,WACA,MACA,O,IAEA,QACA,Q,IACA,SACA,SACA,Q,IACA,S,IACA,O,IACA,Q,uDAEMM,G,6OAYJpqE,yBAA2B,SAACniZ,GAC1B,IAAM2oB,EAAgB,EAAKyrF,MAAMzrF,cAAc/X,KAAI,SAAAg6Y,GAOjD,OANAA,EAAa3jY,gBAAgBrW,KAAI,SAAA6W,GAI/B,OAHIA,EAAehb,UAAUqE,KAAO,EAAKsjG,MAAM3sF,eAAehb,UAAUqE,KACtE2W,EAAeoB,aAAe7oB,GAEzBynB,KAEFmjY,KAET,EAAKx2S,MAAMgiD,iBAAiBztI,I,EAG9B69J,uBAAyB,WACvB,EAAKpyE,MAAMixO,mBAAmB,CAC5B/gU,KAAM,EAAK8vF,MAAM3sF,kB,6IAIZ,aAE4C3e,KAAKsrG,MAAjD3sF,EAFA,EAEAA,eAAgBw6I,EAFhB,EAEgBA,SAAUhhJ,EAF1B,EAE0BA,eAC3BrG,EAAqBqG,EAAezQ,SACpCmvF,EAAYl4E,EAAehb,UAAUE,cACrC,IAAAC,oBAAmB6a,EAAehb,UAAUE,aAAc,EAAA4sE,gBAAgBE,QAC1EhyD,EAAe/a,gBACfnD,EAAWT,KAAKsrG,MAAM3qF,YAAc,IACpC+ic,EAAqB/kc,EAAehb,UAAU+kQ,gBAAkB/pP,EAAehb,UAAU6/E,eAC1F7kE,EAAehb,UAAU6/E,cAAc/uF,OAEtCk3Q,GAAkB,IAAAj3P,oBAAmBiK,GACrCytH,EAAYt6H,EAAmBk1H,cAAgB7uH,EAAe8uH,4BAA8B0kI,IAAoBxzP,EAAe+uH,mBAErI,OACE,+BAAKt8C,UAAU,UAAU+4X,kBAAiBhlc,EAAehb,UAAUqE,IACjE,+BAAK4iF,UAAW,iBAAmBuuE,EAAW,yBAA2B,IAAK2jB,QAAS98K,KAAK09K,wBAC1F,+BAAK9yF,UAAU,wBACZiM,EAAW,+BAAK93F,IAAK83F,EAAUjM,UAAU,2BAA2BspH,IAAI,KAAO,KAC/EwvQ,EACG,kCAAQ94X,UAAU,2EACVkyF,QAAS,kBAAM,EAAKxxE,MAAMmiD,sBAAqB,EAAM9uI,MAC7D,OAGR,+BAAKisE,UAAU,mBACb,8BAAIA,UAAU,iBACZ,mCAAavnF,QAASsb,KAExB,+BAAKisE,UAAU,mBACb,+BAAKA,UAAU,yBACb,mCAAoBA,UAAU,sBAAsBvnF,QAASsb,IAC5Dle,IAAa2rI,EAAY,KACxB,+BAAKxhD,UAAU,iBACb,mCAAkBvnF,QAASsb,EAAgB88T,gBAAiB98T,EAAeoB,cAAgB,MAMjG,+BAAK6qE,UAAU,oBACZwhD,EAAY,mCAAkB/oI,QAASsb,EACE28T,kBAAkB,EAClBG,gBAAiB98T,EAAeoB,cAAgB,IAAO,KAChG4rP,EAAkB,mCAAwBw7D,UAAU,IAAU,KAC/D,mCAAU7jU,KAAM7C,EAAU,MAAQ,SACxBqlU,SAAS,EACT3iD,YAAanjR,KAAKq5Y,yBAClBniZ,MAAOynB,EAAeoB,cAAgB,Y,kBA7ErDmiI,UAAY,CACjBvjI,eAAgB,UAAUhnB,OAAOshH,WACjCsjO,mBAAoB,UAAUx9J,KAAK9lE,WACnCkgD,SAAU,UAAU/W,M,cA4GT,IAAAt2C,UAXS,SAACxzG,GACvB,MAAO,CACLunB,cAAevnB,EAAMytB,eAAelG,cACpCtd,UAAWjK,EAAM8J,UAAUG,UAC3BkiB,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CtM,eAAgB7f,EAAMqN,gBACtByP,uBAAwB9c,EAAMwc,UAAUM,uBACxCuL,YAAaroB,EAAMgR,YAAYqX,eAIK,CACtC2sI,oCACAG,6CAFa,CAGZg2T,I,8ECjIH,I,IAAA,M,IACA,MACA,O,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,O,mDAEA,IAAMG,EAAkB,SAACt4W,GAAU,IAE1BnlF,EAA2EmlF,EAA3EnlF,cAAeimH,EAA4D9gC,EAA5D8gC,UAAWu/H,EAAiDrgK,EAAjDqgK,gBAAiBlrQ,EAAgC6qG,EAAhC7qG,SAAUqR,EAAsBw5F,EAAtBx5F,mBAE5D,OACE,mCACE,8BAAI84E,UAAU,uBAAsB,mCAAavnF,QAAS8iB,KACzDA,EAAcxiB,UAAU2+B,MAAQxwB,EAAmBi1S,QAClD,gCAAMn8N,UAAU,6BACd,4CAAkB5iF,GAAG,sCADvB,IAC8Dme,EAAcxiB,UAAU2+B,KAEpF,KACJ,mCAAkBj/B,QAAS8iB,EAAeimH,UAAWA,IACpDu/H,EAAkB,wCAA6B,KAChD,mCAAkBtoQ,QAAS8iB,IAC3B,mCAAqB9iB,QAAS8iB,IAC7B1lB,EAAW,KAAO,mCAAwB4C,QAAS8iB,MAK1Dy9b,EAAgBrzc,YAAc,kBAC9Bqzc,EAAgB1hU,UAAY,CAC1B/7H,cAAe,UAAUxuB,OACzBy0I,UAAW,UAAUgW,KACrBupH,gBAAiB,UAAUvpH,KAC3B3hJ,SAAU,UAAU2hJ,KACpBtwI,mBAAoB,UAAUna,Q,UAEjBisd,G,8ECxCf,I,IAAA,MACA,OACA,O,IACA,MAEA,Q,mDAEA,IAAMC,EAAsB,SAACv4W,GAAU,IAE9B7mF,EAA+C6mF,EAA/C7mF,qBAAsBzO,EAAyBs1F,EAAzBt1F,aAEvBoI,EAFgDktF,EAAXjoG,SAETohB,EAE5Bu5X,EAAsBhoY,EAAalK,MAAK,SAAAiK,GAAA,MAA2C,wBAA5BA,EAAYtf,KAAK0mB,UAC9E,IAAK6gY,EACH,OAAO,KAGT,IAAM8lE,GAAwB,IAAA1hY,sBAAqBhkE,EAAgB4/X,GACnE,IAAK8lE,EACH,OAAO,KAGT,IAAMC,EAAsB/lE,EAAoB7nY,OAAOrK,MAAK,SAAA2gF,GAAA,OAAOA,EAAIzkF,KAAO87c,EAAsB,MAGpG,OACE,+BAAKl5X,UAAU,0BACb,4CAAkB5iF,GAAG,qCACrB,gCAAM4iF,UAAU,gCAAhB,IAAiDm5X,EAAoB1nX,eAK3EwnX,EAAoB3hU,UAAY,CAC9B7+I,QAAS,UAAU1L,Q,WAcN,IAAAm0G,UAXS,SAACxzG,GACvB,MAAO,CACLmsB,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CzO,aAAc1d,EAAMyc,YAAYiB,gBAIT,GAIZ,CAA6C6tc,I,wGCjD5D,O,OACA,O,IAEA,QACA,SACA,QACA,Q,IACA,O,8DAsEe,IAAA/3W,UATS,SAACxzG,GAAU,MACwBA,EAAMytB,eAC/D,MAAO,CACLtB,qBAH+B,EAC1BA,qBAGL4pI,yBAJ+B,EACJA,yBAI3B1tI,YAAaroB,EAAMgR,YAAYqX,eAIK,CACtC8sI,4CACAG,yDAFa,EApEU,SAACtiD,GAAU,IAE3B7mF,EAAkD6mF,EAAlD7mF,qBAAsB4pI,EAA4B/iD,EAA5B+iD,yBAFK,GAGA,IAAAlN,WAAS,GAHT,qBAG3B0yD,EAH2B,KAGhBtrL,EAHgB,QAIQ,IAAA44H,UAAS,IAJjB,qBAI3B39D,EAJ2B,KAIZ8kL,EAJY,QAKc,IAAAnnH,UAAS,GALvB,qBAK3BonH,EAL2B,KAKTC,EALS,MAOlC,IAAA7mJ,YAAU,WACR,IAAI8mJ,EAAwBhkP,EAAqB9gB,UAAU+kQ,gBAAkB9gQ,MAAMC,QAAQ4c,EAAqB9gB,UAAU6/E,gBACrH/+D,EAAqB9gB,UAAU6/E,cAAc/uF,OAAUgwB,EAAqB9gB,UAAU6/E,cAAgB,GAC3G8kL,GAAkB,CAChBlxP,KAAK,IAAAhU,qBAAoBqhB,GACzBkkP,SAAS,IAAAvlQ,qBAAoBqhB,EAAsB,EAAAgsD,gBAAgBE,UAFrE,qBAIK83L,OAGJ,IAEH,IAOMm2I,EAAiB,SAAChxY,GACtB,UAAUuzB,eAAe,mCACzBmqE,EAAMmiD,sBAAqB,GAC3BniD,EAAMsiD,2BAA2BhgJ,IAG7Bm7P,EAAevlL,EAAc+kL,GAEnC,OACE,+BAAK39K,UAAW,iBAAmByjE,EAA2B,6BAAgC,KAC3F7qE,EAAc/uF,OAAS,EACtB,8BAAIm2F,UAAW,0BACZpH,EAAc/uF,OAAS,EAAI,2CAA6C,KACxE+uF,EAAc/uF,OAAS,EAAI,yCAA2C,KACtE+uF,EAAc17E,KAAI,SAACk8c,EAAMp2c,GACxB,OAAO,8BAAIg9E,UAAW,gCAAkC29K,IAAqB36P,EAAQ,wCAA0C,IACpHpW,IAAKoW,EACLyG,MAAO,CAACy3E,gBAAiB,SAAWk4X,EAAKr7M,SAAWq7M,EAAK5sc,KAAO,MAChEmnT,YAAa,kBAzBd,SAAC3wT,GACfA,IAAU26P,IACZhgP,GAAa,GACbigP,EAAoB56P,IAsBgBq2c,CAAYr2c,IAC/BkvK,QAAS,kBAAM8hO,EAAehxY,UAG3C,KACJ,+BAAKg9E,UAAU,uBACZipH,IAAck1D,EAAe,wCAAoB,KACjDA,EAAe,+BAAKn+K,UAAW,6BAA+BipH,EAAY,sCAAwC,IAC9F/2B,QAAS,kBAAM8hO,EAAer2I,IAC9BxpQ,IAAKgqQ,EAAa3xP,IAAK+8L,OAAQ,kBAAM5rL,GAAa,IAAQ2rL,IAAI,KAAO,W,wGC9DlG,O,OACA,OACA,OAEA,SACA,QACA,Q,IACA,O,8DA4De,IAAApoG,UAPS,SAACxzG,GACvB,MAAO,CACLmsB,qBAAsBnsB,EAAMytB,eAAetB,qBAC3C9D,YAAaroB,EAAMgR,YAAYqX,eAIK,CACtC8sI,4CACAG,yDAFa,EA1DiB,SAACtiD,GAAU,IAElC7mF,EAAwB6mF,EAAxB7mF,qBACDy/b,EAAez/b,EAAqB9gB,UAAU+kQ,gBAC/C9gQ,MAAMC,QAAQ4c,EAAqB9gB,UAAU6/E,gBAC7C/+D,EAAqB9gB,UAAU6/E,cAAc/uF,OALT,GAOC,IAAA0sJ,UAAS,IAPV,qBAOlC39D,EAPkC,KAOnB8kL,EAPmB,KAoBzC,IAXA,IAAA3mJ,YAAU,WACR,IAAI8mJ,EAAuBy7M,EAAez/b,EAAqB9gB,UAAU6/E,cAAgB,GACzF8kL,GAAkB,CAChBlxP,KAAK,IAAAhU,qBAAoBqhB,GACzBkkP,SAAS,IAAAvlQ,qBAAoBqhB,EAAsB,EAAAgsD,gBAAgBC,SAFrE,qBAIK+3L,OAGJ,KAEEy7M,EACH,OAAO,KAST,OACE,+BAAKt5X,UAAU,mBACX,8BAAIA,UAAU,0BACZ,4CAAkB5iF,GAAG,0CAExBw7E,EAAc/uF,OAAS,EACtB,8BAAIm2F,UAAW,2BACZpH,EAAc/uF,OAAS,EAAI,2CAA6C,KACxE+uF,EAAc/uF,OAAS,EAAI,yCAA2C,KACtE+uF,EAAc17E,KAAI,SAACk8c,EAAMp2c,GACxB,OAAO,8BAAIg9E,UAAU,+BACVpzF,IAAKoW,EACLyG,MAAO,CAACy3E,gBAAiB,SAAWk4X,EAAKr7M,SAAWq7M,EAAK5sc,KAAO,MAChE0lK,QAAS,kBAnBP,SAAClvK,GACtB,UAAUuzB,eAAe,mCACzBmqE,EAAMmiD,sBAAqB,GAC3BniD,EAAMsiD,2BAA2BhgJ,GAgBCgxY,CAAehxY,UAG3C,U,8ECvDV,W,OACA,OACA,OAEA,S,IACA,O,mDAEA,IAiCM0iL,EAAqB,CACzBliC,iE,WAGa,IAAAtiD,UAbS,SAACxzG,GAAU,MACwBA,EAAMytB,eAAxDsoI,EAD0B,EAC1BA,yBACP,MAAO,CACL5pI,qBAH+B,EACAA,qBAG/B4pI,2BACAphJ,iBAAkB3U,EAAM4U,YAAYD,oBAQAqjL,EAAzB,EArCc,SAAChlF,GAAU,IAC/B+iD,EAAoG/iD,EAApG+iD,yBAA0BD,EAA0E9iD,EAA1E8iD,+BAAgC3pI,EAA0C6mF,EAA1C7mF,qBAAsBxX,EAAoBq+F,EAApBr+F,kBAEvF,IAAA00G,YAAU,WACR,OAAO,WACLysC,GAA+B,MAEhC,IAOH,OACE,kCAAQxjE,UAAW,8CAAgDyjE,EAA2B,uBAAyB,IAC/GyuB,QAPU,WAClB,UAAU37I,eAAe,iBACzBitH,GAAgCC,KAM9B,4CAAkBrmJ,GAAIyc,EAAqBsG,UAAU9d,GACjD,yCACA,+C,6FC1BV,O,OACA,OACA,O,mDAGA,IA2DMqjL,EAAqB,CACzBliC,+BA9DF,OA8DEA,gC,WAGa,IAAArG,aACb,IAAAj8C,UAdsB,SAACxzG,GAAU,MACwBA,EAAMytB,eAC/D,MAAO,CACLtB,qBAH+B,EAC1BA,qBAGL4pI,yBAJ+B,EACJA,yBAI3BphJ,iBAAkB3U,EAAM4U,YAAYD,oBASbqjL,EAAzB,EAhE2B,SAAChlF,GAAU,IAE/B7mF,EAA0G6mF,EAA1G7mF,qBAAsB4pI,EAAoF/iD,EAApF+iD,yBAA0B5zI,EAA0D6wF,EAA1D7wF,KAAM2zI,EAAoD9iD,EAApD8iD,+BAAgCnhJ,EAAoBq+F,EAApBr+F,iBAFvD,GAGR,IAAAk0I,WAAS,GAHD,qBAG/B5wH,EAH+B,KAGtB4zb,EAHsB,QAIV,IAAAhjU,WAAS,GAJC,qBAI/B6wH,EAJ+B,KAIvBoyM,EAJuB,QAKN,IAAAjjU,UAAS,IALH,qBAK/Br2H,EAL+B,KAKrBy5X,EALqB,MAOtC,IAAA5iS,YAAU,WACJ0sC,GACF+1T,GAAU,GACVD,GAAW,GACX5/D,EAAY9/X,EAAqBsG,UAAU9d,IAAqB,MAEhEk3c,GAAW,GACXz1X,YAAW,WACT01X,GAAU,KACT,QAEJ,CAAC/1T,IAWJ,OAAKA,GAA6B2jH,EAKhC,+BAAKpnL,UAAW,gBAAkBr6D,EAAU,wBAA0B,KACpE,oCAAU95B,KAAK,GACLuR,GAAG,GACHq8c,KAAK,KACLr8E,KAAK,KACLp9S,UAAU,qCACV0mD,YAAa72H,EAAKC,cAAc,CAAC1S,GAAI,0CACrC9Q,MAAO4zB,EACPgrM,SAtBO,SAAC3/N,GACpBouZ,EAAYpuZ,EAAEugB,OAAOxf,UAsBnB,kCAAQ0zF,UAAU,oDAAoDkyF,QAnBlD,WACtBr4J,EAAqBsG,UAAU9d,GAAoB6d,EACnDsjI,GAA+B,KAkB3B,4CAAkBpmJ,GAAG,6CAdlB,U,8ECnCX,W,OACA,S,IACA,MACA,O,IAEA,S,IACA,SACA,QACA,SACA,Q,IACA,S,mDAEA,IAAMs8c,EAAQ,IAAI,EAAJ,kBAAsB,CAClCC,YAAY,EACZC,cAAe,MAGXC,EAA+B,SAACn5W,GAAU,IAEvC4wS,EACsB5wS,EADtB4wS,gBAAiBrkG,EACKvsM,EADLusM,uBAAwB0kC,EACnBjxO,EADmBixO,mBAAoBhuL,EACvCjjD,EADuCijD,SAAUwxB,EACjDz0E,EADiDy0E,cAAezxB,EAChEhjD,EADgEgjD,YAAa0xB,EAC7E10E,EAD6E00E,SACxGjqE,EAA2BzK,EAA3ByK,SAAU2H,EAAiBpS,EAAjBoS,cACN0iC,GAAY,IAAAF,iBAKlB,IAAAv+B,YAAU,WACR,OAAO,WACL2sC,EAAY,IACZg2T,EAAMrhX,cAEP,CAACqrD,IAEJ,IAAM69K,EAAiB,kBAAM,+BAAKvhP,UAAW,YAAhB,sBAEvB+nT,EAAc,SAAC,GAAgC,IAA/B/kY,EAA+B,EAA/BA,MAAOrU,EAAwB,EAAxBA,OAAQ/B,EAAgB,EAAhBA,IAAK6c,EAAW,EAAXA,MAClC+J,EAAiB89X,EAAgBtuY,GAASsuY,EAAgBtuY,GAAO4N,KAAO,KACxE+vG,EAAWssL,EAAuBz5R,EAAgB2hK,GAEpD5hK,EAAkB,GAChBuhJ,EAAyBthJ,EAAiBA,EAAeuhJ,4BAA8B,KAC7F,GAAID,GAA0B93J,MAAMC,QAAQ63J,IAA2BA,EAAuBjrK,OAAQ,CACpG,IAAMiwd,EAAmBn2T,EAASziJ,MAAK,SAAA64c,GAAA,OAASA,EAAMt+c,YAAY1C,UAAUqE,KAAOoW,EAAeza,UAAUqE,MACxG08c,GAAoBA,EAAiBE,sBACvCzmc,EAAkBuhJ,GAItB,OACE,wCAAcloK,IAAKA,EACL8sd,MAAOA,EACP/qd,OAAQA,EACR0yU,YAAa,EACbC,SAAUt+T,IACrB,gBAAE47S,EAAF,EAAEA,QAAF,OACC,mDACG,SAAC/oK,GACA,IAAMokU,EAAyB,WACzBzkU,KAAeK,KAEjB+oK,KAIJ,OAAIzzM,IAAa2H,EAAcjpH,OAAS,GAAMipH,EAAc,IAAMA,EAAc,GAAGljB,WAAa,EAAAkhB,mBAAmBuG,QAE5Gi6R,EAAgBtuY,GAAO5F,GAI1B,+BAAK4iF,UAAU,YAAYpzF,IAAKA,EAAK6c,MAAOA,GAC1C,mCAA8B04X,WAAW,EACXxwD,mBAAoBA,EACpB7xT,YAAawxX,EAAgBtuY,MANtD,KAYT,+BAAKg9E,UAAU,YAAYv2E,MAAOA,GAChC,mCAASk3G,SAAUA,EACVxV,SAAUA,EACVrrF,YAAagzF,EAAgBA,EAAc,GAAK,KAChDt/F,eAAgBA,EAChBm+T,mBAAoB,SAAC52P,EAAYib,GAC/BikX,IACAtoI,EAAmB52P,EAAYib,MAEzCziF,EAAgB1pB,OACb,mCAAwB0pB,gBAAiBA,EACjBC,eAAgBA,EAChBymc,uBAAwBA,IAChD,aAUdp5I,EAAe,CACnBI,iBAAkB,EAClBF,SAAUuwE,EAAgBznZ,QAG5B,OACE,0CACG,gBAAEkL,EAAF,EAAEA,MAAOE,EAAT,EAASA,OAAT,OACC,gCAEE+qF,UAAW,sBACXjrF,MAAOA,EACPE,OAAQA,EACRgsU,iBAAkBJ,EAAaI,iBAC/BF,SAAUF,EAAaE,SACvBm5I,yBAA0BR,EAC1B14I,UAAW04I,EAAM14I,UACjB+mE,YAAaA,EACbxmE,eAAgBA,EAChBnsJ,SAAUA,QAOpBykS,EAA6BviU,UAAY,CACvCg6P,gBAAiB,UAAU7lY,MAC3BwhS,uBAAwB,UAAU94H,KAAK9lE,WACvCsjO,mBAAoB,UAAUx9J,KAAK9lE,WACnC+mE,SAAU,UAAUjB,KACpBgB,cAAe,UAAUpoL,OACzBo+G,SAAU,UAAUqsC,KACpB1kC,cAAe,UAAUxE,QAAQ,UAAUt/D,MAAV,0BAGnC,IAMM02I,EAAqB,CACzBhiC,2B,WAGa,IAAAxiD,UAVS,SAACxzG,GACvB,MAAO,CACLi2J,SAAUj2J,EAAMytB,eAAewoI,YAQK+hC,EAAzB,CAA6Cm0R,I,8ECpJ5D,I,IAAA,MACA,O,IACA,MACA,OACA,QAEA,QACA,QACA,S,IACA,O,IACA,S,IACA,SACA,Q,mDAEA,IAAMM,EAAiB,SAACz5W,GAAU,IAEzBltF,EAC0DktF,EAD1DltF,eAAgBjG,EAC0CmzF,EAD1CnzF,eAAgB+jU,EAC0B5wO,EAD1B4wO,gBAAiBzuL,EACSniD,EADTmiD,qBAAsBtgI,EACbm+E,EADan+E,gBAAiBo6L,EAC9Bj8G,EAD8Bi8G,oBAC7Fm1L,EAA+DpxS,EAA/DoxS,UAAWr4R,EAAoD/Y,EAApD+Y,mBAAoBi4N,EAAgChxO,EAAhCgxO,kBAAmBlwM,EAAa9gC,EAAb8gC,UAC9Ct6H,EAAqBqG,EAAezQ,SAEpCg8c,EAAoBtlc,IAAmBs+X,GAAat+X,EAAeza,UAAU+kQ,gBAC9EtqP,EAAeza,UAAU6/E,eAAiBplE,EAAeza,UAAU6/E,cAAc/uF,OActF,OACE,+BAAKm2F,UAAU,mBACZ84X,EACG,kCAAQ94X,UAAU,2BAA2BkyF,QARpB,WAC/B,UAAU37I,eAAe,kBACzBssH,GAAqB,EAAMrvI,MAOrB,MACH,IAAApB,6BAA4BoB,EAAgBtM,KAAwB4qY,EACnE,kCAAQ9xT,UAAU,0BAA0BkyF,QAlBpB,WAC5B,UAAU37I,eAAe,eACzBhU,EAAgB,aAChBk3F,EAAmB,CAACh+G,YAAa+X,IACjC,EAAA8T,YAAYn9B,KAAK,WAeX,KACH2nZ,IAAcpgE,EAAoB,KAAO,gCAAM1xP,UAAU,0BAA0BkyF,QAASo/J,IAC7F,+BAAKtxP,UAAU,cACZwhD,EAAY,mCAAchuH,eAAgBA,IAAoB,KAC7DmpM,EAA2E,KAArD,mCAAiBnpM,eAAgBA,OAMjE2mc,EAAe7iU,UAAY,CACzB9jI,eAAgB,UAAUzmB,OAAOshH,WACjCijO,gBAAiB,UAAUn9J,KAAK9lE,WAChCyjS,UAAW,UAAUt6P,KACrBk6L,kBAAmB,UAAUl6L,KAC7BhW,UAAW,UAAUgW,MAGvB,IAQMkuC,EAAqB,CACzB9rK,wDACA2I,kCACAsgI,4CACAppC,yC,WAGa,IAAA0jC,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAU,IAC1BivN,EAAuBjvN,EAAMgvN,qBAA7BC,oBACP,MAAO,CACLpvM,eAAgB7f,EAAMqN,gBACtB4hN,yBAYuBj3B,EAAzB,CAA6Cy0R,K,iGC5E/C,MACA,O,IACA,MACA,OAEA,Q,IACA,QACA,QACA,QACA,S,mDAEA,IAAMC,EAAkB,SAAC15W,GAAU,IAE1BltF,EAAiFktF,EAAjFltF,eAAgBjG,EAAiEmzF,EAAjEnzF,eAAgBsC,EAAiD6wF,EAAjD7wF,KAAM8zI,EAA2CjjD,EAA3CijD,SAAUD,EAAiChjD,EAAjCgjD,YAAavwI,EAAoButF,EAApBvtF,iBAC9DjM,EAAqBqG,EAAezQ,SAEpCuyY,EAAwBA,GAAxBA,0CAA8C,OAAQ,eAAgB,uBACtEt/X,GAAO,IAAAH,gBAAe4D,EAAgB3D,EAAMtC,GAC5CwtT,EAAiB7zT,EAAmBlF,cAAgB,EAAAyjC,cAAcC,SACtE2pW,EAAsB9/Y,SAASikB,EAAe9X,SAAW,CAAC,KAAM,KAAM,MAAMrG,MAAK,SAAAk6Y,GAAA,OAAMA,IAAOx/X,EAAKre,kBAoB/F2od,EAAc12T,EAASziJ,MAAK,SAAA64c,GAAA,OAASA,EAAMt+c,YAAY1C,UAAUqE,KAAOoW,EAAeza,UAAUqE,MACjGmB,EAAW87c,EAAcA,EAAY97c,SAAW,EAEtD,OACE,mCAAU28T,SAAS,EACTH,cAAeA,EACfriU,KAAM,QACNiiB,0BAA0B,EAC1B49P,YAzBqB,SAACjsR,GAChC,IAAMgud,EAAcA,GAAdA,qBAAkB32T,IAClB42T,EAAoBD,EAAYvoc,WAAU,SAAAgoc,GAAA,OAASA,EAAMt+c,YAAY1C,UAAUqE,KAAOoW,EAAeza,UAAUqE,MACrH,GAAIm9c,GAAqB,EACvBD,EAAYC,GAAmBh8c,SAAWjS,MACrC,CACL,IAAM8mB,GAAiB,IAAAJ,mBAAkBQ,EAAgBlnB,EAAO6mB,GAC1DI,EAAkBC,EAAeuhJ,4BACnC/3J,MAAMC,QAAQsW,IAAoBA,EAAgB1pB,SACpDupB,EAAe4mc,qBAAsB,GAEvCM,EAAYnwd,KAAKipB,GAEnBswI,EAAY42T,IAaFhud,MAAOiS,KAIrB67c,EAAgB9iU,UAAY,CAC1B9jI,eAAgB,UAAUzmB,OAAOshH,YAGnC,IASMq3E,EAAqB,CACzBhiC,2B,WAGa,IAAAvG,aACb,IAAAj8C,UAdsB,SAACxzG,GAEvB,MAAO,CACLi2J,SAFiBj2J,EAAMytB,eAAlBwoI,SAGLp2I,eAAgB7f,EAAMqN,gBACtBoY,iBAAkBzlB,EAAMgsL,QAAQvmK,oBASTuyK,EAAzB,CAA6C00R,K,8ECtE/C,I,IAAA,M,IACA,MACA,OACA,OAEA,QACA,S,mDAEA,IAAMI,EAAe,SAAC95W,GAAU,IAG5BltF,EAMEktF,EANFltF,eACAjG,EAKEmzF,EALFnzF,eACA/C,EAIEk2F,EAJFl2F,uBACAm5I,EAGEjjD,EAHFijD,SACAxwI,EAEEutF,EAFFvtF,iBACAtD,EACE6wF,EADF7wF,KAIF,GAF2BtC,EAAezQ,SAEnB2N,0BAA4BD,EACjD,OAAO,KAGT,IAAMiwc,EAAe92T,EAASziJ,MAAK,SAAA64c,GAAA,OAASA,EAAMt+c,YAAY1C,UAAUqE,KAAOoW,EAAeza,UAAUqE,MAElGmB,EAAWk8c,EAAeA,EAAal8c,SAAW,EAEpD3G,EAAQ,EAOZ,OANI2G,IACF3G,GAAQ,IAAA+J,oBAAmB6R,EAAgBjV,EAAU4U,IAMrD,+BAAK6sE,UAAU,yBACb,+BAAKA,UAAU,6BACXpoF,GAAe,IAAAs5K,sBAAqBt5K,EAAO4b,EAAgBjG,EAAgBsC,EAAK1C,UAAxE,QAqBlBqtc,EAAaljU,UAAY,CACvB9jI,eAAgB,UAAUzmB,Q,WAGb,IAAAowJ,aACb,IAAAj8C,UAnBsB,SAACxzG,GAAU,IAC1Bi2J,EAAYj2J,EAAMytB,eAAlBwoI,SACP,MAAO,CACLp2I,eAAgB7f,EAAMqN,gBACtByP,uBAAwB9c,EAAMwc,UAAUM,uBACxCm5I,WACAxwI,iBAAkBzlB,EAAMgsL,QAAQvmK,oBAIT,GASzB,CAA6Cqnc,K,iGChE/C,MACA,O,IACA,MAEA,OACA,SACA,Q,mDAGA,IAAME,EAA+B,SAACh6W,GAAU,IAEvCltF,EAA2DktF,EAA3DltF,eAAgBmwI,EAA2CjjD,EAA3CijD,SAAUD,EAAiChjD,EAAjCgjD,YAAavwI,EAAoButF,EAApBvtF,iBAExCI,EAAkBC,EAAeuhJ,4BACvC,IAAK/3J,MAAMC,QAAQsW,KAAqBA,EAAgB1pB,OACtD,OAAO,KAGT,IAAMwwd,EAAc12T,EAASziJ,MAAK,SAAA64c,GAAA,OAASA,EAAMt+c,YAAY1C,UAAUqE,KAAOoW,EAAeza,UAAUqE,MAevG,OACE,gCAAM4iF,UAAW,cAAgBq6X,GAAeA,EAAYL,oBAAsB,sBAAwB,IACpG9nS,QAf2B,WACjC,IAAMooS,EAAcA,GAAdA,qBAAkB32T,IAClB42T,EAAoBD,EAAYvoc,WAAU,SAAAgoc,GAAA,OAASA,EAAMt+c,YAAY1C,UAAUqE,KAAOoW,EAAeza,UAAUqE,MACrH,GAAIm9c,GAAqB,EACvBD,EAAYC,GAAmBP,qBAAuBM,EAAYC,GAAmBP,wBAChF,CACL,IAAM5mc,GAAiB,IAAAJ,mBAAkBQ,EAAgB,EAAGL,GAC5DC,EAAe4mc,qBAAsB,EACrCM,EAAYnwd,KAAKipB,GAEnBswI,EAAY42T,KAMV,4CAAkBl9c,GAAG,4CAK3Bs9c,EAA6BpjU,UAAY,CACvC9jI,eAAgB,UAAUzmB,OAAOshH,YAGnC,IAQMq3E,EAAqB,CACzBhiC,2B,WAGa,IAAAxiD,UAZS,SAACxzG,GAEvB,MAAO,CACLi2J,SAFiBj2J,EAAMytB,eAAlBwoI,SAGLxwI,iBAAkBzlB,EAAMgsL,QAAQvmK,oBAQIuyK,EAAzB,CAA6Cg1R,I,6FCzD5D,O,OACA,O,IACA,M,IACA,QACA,O,IAEA,SACA,QACA,QACA,Q,IACA,Q,mDAGA,IAAMC,EAAyB,SAACj6W,GAAU,IAEjCntF,EAAgHmtF,EAAhHntF,gBAAiB0mc,EAA+Fv5W,EAA/Fu5W,uBAAwBpqc,EAAuE6wF,EAAvE7wF,KAAMtC,EAAiEmzF,EAAjEnzF,eAAgBlL,EAAiDq+F,EAAjDr+F,iBAAkB0T,EAA+B2qF,EAA/B3qF,YAAavC,EAAkBktF,EAAlBltF,eAF7D,GAG4B,IAAA+iI,WAAS,GAHrC,qBAGjCiiU,EAHiC,KAGLoC,EAHK,QAIN,IAAArkU,WAAS,GAJH,qBAIjC0yD,EAJiC,KAItBi0L,EAJsB,QAKN,IAAA3mP,UAAS,IALH,qBAKjCskU,EALiC,KAKtBC,EALsB,MAwBxC,IAAA/jW,YAAU,WACR,IAlB8B,EACzBjjG,EAAiBD,EAiBhBknc,GAlBwB,GACgB,IAAAznc,8BAA6BC,EAAiBC,GAAvFM,EADyB,EACzBA,gBAAiBD,EADQ,EACRA,qBAClBC,EAAgBjqB,SAAW2ud,IAC7Bt7E,GAAa,IACb,IAAAxmR,eAAc5iG,GACXmT,MAAK,SAAAswE,IACW,IAAAhnF,oBACRqmG,gBAAgBrf,EAASluG,MAChCuxd,GAA8B,GAC9B19E,GAAa,OAInBrpX,GAAuB,IAAAY,4BAA2BZ,IAC3C,aAAOA,GAAsB,SAACpb,GAAD,OAAaA,EAAQM,UAAUqE,OAK7D69C,GAAS,IAAAjmC,qBAAoB+lc,EAAgB,GAAI14c,EAAkBwN,EAAMtC,GAM/E,OALAutc,EAAa7/Z,GACbg/Z,IACAn2X,YAAW,WACTm2X,MACC,GACI,WACLA,IACAn2X,YAAW,WACTm2X,MACC,MAGJ,CAAChxQ,IAEJ,IAAM0oI,EAAqB,aAErBqpI,EAAgBjlc,EAAc,IAAM,IAAM,IAE1Cklc,EAAgB,CACpBhmd,OAAQ4ld,EAAUhxd,SAAWo/M,EACzB4xQ,EAAUnkd,QAAO,SAACC,EAAK0U,GAAN,OAAgB1U,EAAM,GAAM0U,EAAMkI,gBAAgB1pB,OAASmxd,IAAgB,GAC5FA,GAGN,OACE,+BAAKh7X,UAAU,YAAYv2E,MAAOwxc,GAC/BhyQ,EAAY,wCAAoB4xQ,EAAU39c,KAAI,SAACg6Y,EAAcyhE,GAC5D,OACE,8BAAI34X,UAAU,aAAapzF,IAAK+rd,GAC9B,8BAAI34X,UAAU,oBAAoBk3T,EAAarrZ,MAC9CqrZ,EAAa3jY,gBAAgBrW,KAAI,SAAC6W,EAAgBmnc,GACjD,OACE,+BAAKl7X,UAAU,YAAYpzF,IAAKsud,EAAsBnnc,EAAehb,UAAUqE,IAC7E,mCAASujH,UAAU,EACVmxR,WAAW,EACXt+X,eAAgBO,EAChB49T,mBAAoBA,cAW/CgpI,EAAuBrjU,UAAY,CACjC9jI,eAAgB,UAAUzmB,OAAOshH,WACjC96F,gBAAiB,UAAU9H,MAAM4iG,WACjC4rW,uBAAwB,UAAU9lS,KAAK9lE,Y,WAa1B,IAAA8uC,aACb,IAAAj8C,UAXsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtBsH,iBAAkB3U,EAAM4U,YAAYD,iBACpC0T,YAAaroB,EAAMgR,YAAYqX,eAIR,GAGzB,CAA6C4kc,K,8ECxG/C,I,IAAA,M,IACA,MACA,OACA,O,IAEA,OACA,QACA,QACA,QACA,Q,mDAEA,IAAMQ,EAA4B,SAACz6W,GAAU,IAEpCx5F,EAA+Fw5F,EAA/Fx5F,mBAAoBmxG,EAA2E3X,EAA3E2X,oBAAqB98F,EAAsDmlF,EAAtDnlF,cAAegH,EAAuCm+E,EAAvCn+E,gBAAiBk3F,EAAsB/Y,EAAtB+Y,mBAEhF,KAAK,IAAArnG,6BAA4B,CAAC1W,OAAQ,cAAewL,GACvD,OAAO,KAYT,OACE,kCAAQ84E,UAAU,mDACVkyF,QAXoB,WAC5B,UAAU37I,eAAe,sBACrBhb,IACFgH,EAAgBhH,GAChBk+F,EAAmB,CAACh+G,YAAa8f,KAEnC88F,GAAoB,KAMlB,4CAAkBj7G,GAAG,yCAM3B+9c,EAA0B7jU,UAAY,CACpC7+I,QAAS,UAAUu2C,MAAV,qBAGX,IAOM02I,EAAqB,CACzBrtE,0CACA91F,kCACAk3F,yC,WAGa,IAAAvY,UAbS,SAACxzG,GAEvB,MAAO,CACLwZ,mBAFexZ,EAAMqN,gBAAgB+B,YAYD4oL,EAAzB,CAA6Cy1R,I,wGCtD5D,O,WACA,MACA,O,IACA,QACA,QACA,S,IACA,SACA,Q,IACA,QACA,QACA,U,IACA,S,mDAEA,IAAMC,EAAa,SAAC16W,GAAU,IAErBy0E,EACqGz0E,EADrGy0E,cAAe86N,EACsFvvS,EADtFuvS,eAAgBr3Q,EACsEl4B,EADtEk4B,aAAcyqB,EACwD3iD,EADxD2iD,cAAej4I,EACyCs1F,EADzCt1F,aAAcmC,EAC2BmzF,EAD3BnzF,eAC/Es6L,EAA0GnnG,EAA1GmnG,sBAAuB8gG,EAAmFjoM,EAAnFioM,yBAA0BjvR,EAAyDgnF,EAAzDhnF,oBAAqBD,EAAoCinF,EAApCjnF,uBAAwB5jB,EAAY6qG,EAAZ7qG,SAHpE,GAIM,IAAA0gJ,WAAS,GAJf,qBAIrB0yD,EAJqB,KAIVi0L,EAJU,QAKsB,IAAA3mP,UAAS,IAL/B,qBAKrB8kU,EALqB,KAKFC,EALE,MAO5B,IAAAvkW,YAAU,WACRwkW,MAEC,CAACl4T,IAEJ,IAIMl4I,EAJmBytH,EAAa13H,MAAK,SAAAm4H,GACzC,OAAOA,EAAUhvE,mBAAqB8qH,EAAcnkK,QAAUqoH,EAAUhvE,mBAAqB8qH,EAAclkK,YAGxE7F,aAAai4I,GAElD,IAAKl4I,EACH,OAAO,KAGmB,IAAxBuO,GACFD,EAAuB,GAGzB,IAAM+hc,EAAiBpwc,EAAalK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASsf,EAAYtf,QAEvEihU,EAAsB,SAACt+D,EAAsB76I,GACjD,OAAO66I,EAAqBrjP,EAAY/N,KAAOoxP,EAAqBrjP,EAAY/N,IAAI7N,SAASokH,EAAmBv2G,KAG5GoxP,EAAuBr5E,EAAc55J,cACvC45J,EAAc55J,cAAcxiB,UAAUkS,eACtC,GAWEswc,EAAkB,WACtB,IAIM5uJ,EAdmB,SAAC8uJ,GAE1B,OAAOA,EAAqB39c,MAAK,SAACC,EAAEC,GAClC,IAAM6uT,EAAUC,EAAoBt+D,EAAsBzwP,GACpDgvT,EAAUD,EAAoBt+D,EAAsBxwP,GAC1D,OAAO6uT,IAAYE,EAAUF,EAAUE,GAAW,EAAI,EAAI,KAS9BH,CAHD,UAAgB/jH,yBAC3Cz9L,EAAcD,EAAYtf,KAAMspL,EAAe5nK,EAFzB,KAKC,gBAArBpC,EAAYtf,MAA+C,mBAArBsf,EAAYtf,KAChDg8M,EAAsB18L,EAAY/N,IACpCk+c,EAAqBzzQ,EAAsB18L,EAAY/N,MAEvD8/X,GAAa,IACb,IAAA91Q,wBAAuB+tD,EAAcnkK,QAAUmkK,EAAclkK,SAAU9F,EAAY/N,IAChF6pB,MAAK,SAACswE,GACLoxM,mBACGx9R,EAAY/N,GAAKm6F,EAASluG,OAE7B6zY,GAAa,GACbo+E,EAAqB/jX,EAASluG,UAIpCiyd,EAAqB3uJ,IAInB1wG,GAAY,IAAA5mM,kCAAiCmmc,GAE7CE,EAAwB,SAACC,GAC7B,OAAO1/P,EAAU7/M,QAAO,SAAAw/c,GAAA,OAAaD,EAAuBpsd,SAASqsd,EAAUx+c,QAGjF,OAAI6rM,EACK,wCAGFpzM,EACH,mCAAkBwld,kBAAmBK,EAAsBL,GACzCprE,eAAgBA,EAChB9kY,YAAaqwc,EACbhtN,qBAAsBA,EACtBr5E,cAAeA,IACjC,mCAAmBkmS,kBAAmBK,EAAsBL,GACzCprE,eAAgBA,EAChB9kY,YAAaqwc,EACbhtN,qBAAsBA,EACtBr5E,cAAeA,KAIxCimS,EAAW9jU,UAAY,CACrB69B,cAAe,UAAUpoL,OAAOshH,WAChC4hS,eAAgB,UAAUjiS,OAC1B4qB,aAAc,UAAUtqB,QAAQ,UAAUt/D,MAAV,2BAGlC,IAgBM02I,EAAqB,CACzBijH,oDACAlvR,iD,WAGa,IAAAynF,UArBS,SAACxzG,GAAU,IAC1BkrI,EAAgBlrI,EAAMqY,YAAtB6yH,aAD0B,EAEYlrI,EAAMytB,eAA5CkoI,EAF0B,EAE1BA,cAAe3pI,EAFW,EAEXA,oBAFW,EAGahsB,EAAMyc,YAA7CiB,EAH0B,EAG1BA,aAAcy8L,EAHY,EAGZA,sBACdhyM,EAAYnI,EAAMgR,YAAlB7I,SACP,MAAO,CACL+iI,eACAyqB,gBACAj4I,eACAy8L,wBACAt6L,eAAgB7f,EAAMqN,gBACtB2e,sBACA7jB,cASoC6vL,EAAzB,CAA6C01R,I,8ECtI5D,I,IAAA,MACA,S,IACA,MACA,O,IACA,S,mDAEA,IAAMS,EAAoB,SAACn7W,GAKzB,IALmC,IAE5BhnF,EAAuEgnF,EAAvEhnF,oBAAqB2hc,EAAkD36W,EAAlD26W,kBAAmBlwc,EAA+Bu1F,EAA/Bv1F,YAAa8kY,EAAkBvvS,EAAlBuvS,eAEtD9iG,EAAW,GACRxjT,EAAI,EAAGA,EAAI0xd,EAAkBxxd,OAAQF,IAC5CwjT,EAAShjT,KAAK,mCAAkBwpH,mBAAoB0nW,EAAkB1xd,GACtCsmZ,eAAgBA,EAChB9kY,YAAaA,KAG/C,IAAMy1T,EAAclnT,EAAsB,EAEpC7O,EAAO,CAAC,IACVw2T,EAAc,EASlB,OARAl0B,EAAS35S,SAAQ,SAAC+7E,EAASvsE,GACrBA,EAAQ49T,GAAgB,GAAgB,IAAV59T,IAChC6H,EAAK1gB,KAAK,IACVk3U,KAEFx2T,EAAKw2T,GAAal3U,KAAK,UAAMm/X,aAAa/5S,OAI1C,0CACG,gBAAEx6E,EAAF,EAAEA,MAAOE,EAAT,EAASA,OAAT,OACC,gCAAM8rU,SAAUvhU,KAAKkI,KAAKylS,EAAStjT,OAAS+2U,GACtCA,YAAaA,EACb7rU,MAAOA,EACPE,OAAQA,EACR6rU,YAAc/rU,EAAQ6rU,EAAe,EACrCI,UAAWivE,EAAiB,EAC5B7uE,aAAc,YAAyC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAC1C,OAAO,+BAAK7c,IAAKA,EAAK6c,MAAOA,GAC1BoB,EAAKy2T,GAAUD,WAUlCw6I,EAAkBvkU,UAAY,CAC5B69B,cAAe,UAAUpoL,OAAOshH,WAChCgtW,kBAAmB,UAAU5vc,MAAM4iG,WACnCljG,YAAa,UAAUpe,OAAOshH,WAC9BmgJ,qBAAsB,UAAUzhQ,OAAOshH,WACvC4hS,eAAgB,UAAUjiS,Q,WAYb,IAAA9M,UATS,SAACxzG,GAEvB,MAAO,CACLgsB,oBAF4BhsB,EAAMytB,eAA7BzB,uBAMkB,GAEZ,CAA6Cmic,I,6GCnE5D,I,EAAA,O,oCAEqCC,EAAxBA,sBAAwB,CACnC1+c,GAAI,UAAU4wG,OACdniH,KAAM,UAAU+rC,OAChBrjB,YAAa,UAAUqjB,OACvBmkb,oBAAqB,UAAUvkU,KAC/Bo6P,iBAAkB,UAAUp6P,KAC5BxlI,aAAc,UAAUulI,UAAU,CAAC,UAAUxqJ,OAAQ,UAAU6qC,SAC/D+5W,WAAY,UAAUn6P,KACtBpsI,aAAc,UAAUkjG,QAAQ,UAAUt/D,MAAM,CAC9C5xC,GAAI,UAAU4wG,OACdniH,KAAM,UAAU+rC,OAChBp3B,KAAM,UAAUo3B,OAChBrsB,OAAQ,UAAUE,MAClBqxS,WAAY,UAAUllR,Y,8ECf1B,I,IAAA,MACA,S,IACA,MACA,O,IACA,S,mDAEA,IAAMokb,EAAmB,SAACt7W,GAMxB,IANkC,IAE3BhnF,EAAuEgnF,EAAvEhnF,oBAAqB2hc,EAAkD36W,EAAlD26W,kBAAmBlwc,EAA+Bu1F,EAA/Bv1F,YAAa8kY,EAAkBvvS,EAAlBuvS,eACtDnvE,EAAsC,IAAxBpnT,EAA4Bu2X,EAAiB,IAAMA,EAAiB,GAAG,EAErF9iG,EAAW,GACRxjT,EAAI,EAAGA,EAAI0xd,EAAkBxxd,OAAQF,IAC5CwjT,EAAShjT,KAAK,mCAAkBwpH,mBAAoB0nW,EAAkB1xd,GACtCsmZ,eAAgBA,EAChB9kY,YAAaA,KAE/C,IAAM+uW,EAAY1rX,SAASg9F,cAAc,4BACnCywX,EAAa/hG,GAAa16W,KAAKkI,KAAKwyW,EAAUjzQ,YAAc65N,GAAe,EACjF,GAAIm7I,GAAuC,IAAxBvic,GAA+ByzR,EAAStjT,OAASoyd,EAClE,IAAK,IAAItyd,EAAI,EAAGA,GAAKsyd,EAAa9uK,EAAStjT,OAAOF,IAChDwjT,EAAShjT,KAAK,+BAAK61F,UAAU,4BAC7BmtN,EAAShjT,KAAK,+BAAK61F,UAAU,4BAIjC,IAAMopS,EAAW56X,SAASg9F,cAAc,sBAClCqkD,EAA6C,IAAxBn2H,EAA4B,EAAIA,EACrD2vW,EAAe7pX,KAAKkI,KAAKylS,EAAStjT,OAASgmJ,GAE3ChlI,EAAO,CAAC,IAWd,OAV2B,IAAvBglI,GACFhlI,EAAK1gB,KAAK,IACVgjT,EAAS35S,SAAQ,SAAC+7E,EAASvsE,GAEzB6H,EADgB7H,EAAQ6sI,GAAuB,EAAK,EAAI,GACzC1lJ,KAAK,UAAMm/X,aAAa/5S,QAGzC49N,EAAS35S,SAAQ,SAAC+7E,GAAD,OAAa1kE,EAAK,GAAG1gB,KAAK,UAAMm/X,aAAa/5S,OAI9D,gCAAMwxP,SAAUlxL,EACV+wL,YAAayoD,EACbt0X,MAAOq0X,EAASniR,YAChBhyG,OAAS6rU,EAAcjxL,EAAsB,EAC7CixL,YAAaA,EACbE,UAAWF,EACXM,aAAc,YAAyC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAC1C,OAAO,+BAAK7c,IAAKA,EAAK6c,MAAOA,GAC1BoB,EAAKy2T,GAAUD,QAQ9B26I,EAAiB1kU,UAAY,CAC3B69B,cAAe,UAAUpoL,OAAOshH,WAChCgtW,kBAAmB,UAAU5vc,MAAM4iG,WACnCljG,YAAa,UAAUpe,OAAOshH,WAC9BmgJ,qBAAsB,UAAUzhQ,OAAOshH,WACvC4hS,eAAgB,UAAUjiS,Q,WAYb,IAAA9M,UATS,SAACxzG,GAEvB,MAAO,CACLgsB,oBAF4BhsB,EAAMytB,eAA7BzB,uBAMkB,GAEZ,CAA6Csic,I,8EC3E5D,I,IAAA,MACA,S,IACA,MACA,O,IAEA,Q,IACA,S,IACA,SACA,U,IACA,SACA,QACA,Q,mDAEA,IAAME,EAA+B,SAACx7W,GAAU,IAEvC4wS,EAC4G5wS,EAD5G4wS,gBAAiB3/D,EAC2FjxO,EAD3FixO,mBAAoBx/J,EACuEzxE,EADvEyxE,qBAAsB89N,EACiDvvS,EADjDuvS,eAAgB96N,EACiCz0E,EADjCy0E,cAAe/pK,EACkBs1F,EADlBt1F,aAC/FgqK,EAAiH10E,EAAjH00E,SAAU17J,EAAuGgnF,EAAvGhnF,oBAAqBuzR,EAAkFvsM,EAAlFusM,uBAAwBskG,EAA0D7wS,EAA1D6wS,cAAehkY,EAA2CmzF,EAA3CnzF,eAAgB49F,EAA2BzK,EAA3ByK,SAAU2H,EAAiBpS,EAAjBoS,cAHpD,GAIR,IAAAmgS,gBAAe99N,EAAem8N,EAAiBlmY,EAAcmC,GAA5F2lY,EAJuC,EAIvCA,YAAaC,EAJ0B,EAI1BA,eAIpB,IAFA,IAAAI,sBAAqBpoS,EAAUgoS,EAAgBh+N,EAAe/pK,GAE1D+nY,EACF,OAAO,wCAGT,GAAID,EACF,OAAO,mCAAqC/9N,cAAeA,EACfo8N,cAAeA,EACfn8N,SAAUA,EACV63H,uBAAwBA,EACxBqkG,gBAAiBA,EACjB3/D,mBAAoBA,EACpBx/J,qBAAsBA,EACtB89N,eAAgBA,IAG9D,IAAMrvE,EAAclnT,EAAsB,EAEpC0nT,EAAe,SAAC,GAAwC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAC7CzG,EAAS49T,EAAcU,EAAYD,EACvC,OAAKiwE,EAAgBtuY,GAIjBmoG,IAAY,IAAAiM,sCAAqCtE,GAC9Cw+R,EAAgBtuY,GAAO5F,GAI1B,+BAAKxQ,IAAKA,EAAK6c,MAAOA,GACpB,mCAA8B+lE,OAAQ,CAACv6E,OAAQg7Y,GACjBt+D,mBAAoBA,EACpB7xT,YAAawxX,EAAgBtuY,MANtD,KAYT,+BAAKpW,IAAKA,EAAK6c,MAAOA,GACpB,mCACE+lE,OAAQ,CACNv6E,OAAQg7Y,GAEVz8X,eAAgB89X,EAAgBtuY,GAChCiqS,uBAAwBA,EACxB0kC,mBAAoBA,EACpBx/J,qBAAsBA,EACtBhnE,SAAUA,EACVrrF,YAAagzF,EAAgBA,EAAc,GAAK,QA3B7C,MAiCX,OACE,0CAAgBy+R,cAAeA,IAE5B,WACC,IAAMx8Y,EAAQw8Y,EAActqS,aAAe,EACrChyG,EAASs8Y,EAAcrqS,cAAgB,EAC7C,OACE,gCAAM65N,SAAUvhU,KAAKkI,KAAK4pY,EAAgBznZ,OAAS+2U,GAC7CA,YAAaA,EACb7rU,MAAOA,EACPE,OAAQA,EACRmgL,SAAUA,EACV0rJ,YAAc/rU,EAAQ6rU,EAAe,EACrCI,UAAWivE,EAAiB,EAC5B7uE,aAAcA,QAQ9B86I,EAA6B5kU,UAAY,CACvCg6P,gBAAiB,UAAU7lY,MAC3BkmU,mBAAoB,UAAUx9J,KAAK9lE,WACnC8jE,qBAAsB,UAAUgC,KAAK9lE,WACrC4+L,uBAAwB,UAAU94H,KAAK9lE,WACvC+mE,SAAU,UAAUjB,KACpBgB,cAAe,UAAUpoL,OACzBkjZ,eAAgB,UAAUjiS,OAC1BujS,cAAe,UAAUrwM,IACzB/1F,SAAU,UAAUqsC,KACpB1kC,cAAe,UAAUxE,QAAQ,UAAUt/D,MAAV,0B,WAgBpB,IAAAkyD,UAbS,SAACxzG,GAAU,IAC1BgsB,EAAuBhsB,EAAMytB,eAA7BzB,oBACP,MAAO,CACLtO,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtB2e,yBAIuB,GAIZ,CAA6Cwic,I,mHC1H5D,O,OACA,S,IACA,MACA,O,IAEA,S,IACA,SACA,UACA,Q,mDAEA,IAAMC,EAAsC,SAACz7W,GAAU,IAE9C4wS,EACiE5wS,EADjE4wS,gBAAiB3/D,EACgDjxO,EADhDixO,mBAAoBx/J,EAC4BzxE,EAD5ByxE,qBAAsB89N,EACMvvS,EADNuvS,eAAgB76N,EACV10E,EADU00E,SAAU17J,EACpBgnF,EADoBhnF,oBAC1FuzR,EAAsEvsM,EAAtEusM,uBAAwBskG,EAA8C7wS,EAA9C6wS,cAAep8N,EAA+Bz0E,EAA/By0E,cAAe/pK,EAAgBs1F,EAAhBt1F,aAHH,GAKX,IAAAmrI,UAAS,MALE,qBAK9Cg7K,EAL8C,KAK/B6qJ,EAL+B,QAMb,IAAA7lU,UAAS,MANI,qBAM9C8lU,EAN8C,KAMhCC,EANgC,QAOb,IAAA/lU,UAAS,IAPI,qBAO9CgmU,EAP8C,KAOhCC,EAPgC,QAQnB,IAAAjmU,UAAS,IARU,qBAQ9C87P,EAR8C,KAQnCoqE,EARmC,QAST,IAAAlmU,UAAS,IATA,qBAS9CmmU,EAT8C,KAS9BC,EAT8B,KAU/CrqE,GAAc,IAAAj9P,QAAO,MAErB+9P,EAAsBhoY,EAAalK,MAAK,SAAAiK,GAAA,MAA2C,wBAA5BA,EAAYtf,KAAK0mB,UACxEqqc,EAAwBxpE,EAAoB7nY,OAAOnP,QAAO,SAAAkP,GAC9D,OAAO6pK,EAAcpG,gBAAgBx/K,SAAS+b,EAAYlO,OAGtDwjU,EAAclnT,EAAsB,GAE1C,IAAAq9F,YAAU,WAAM,IACP8lW,EAAcC,IAAdD,WACPT,EAAiBtyd,OAAO+2B,OAAO,GAAIg8b,IACnCP,EAAgBxyd,OAAO+2B,OAAO,GAAIg8b,MAEjC,KAEH,IAAA9lW,YAAU,WAAM,IACPgmW,EAAkBD,IAAlBC,eACPP,0BAAoBO,KACpB,IAAIC,EAAe,CAACX,GAAD,qBAAkBU,IAClC3gd,QAAO,SAAAq2Y,GAAA,OAAiBA,GAAyC,kBAAvBA,EAAcjyY,QACxDtD,KAAI,SAAAu1Y,GAAiB,IACbnxE,EAAwBmxE,EAAxBnxE,SAED27I,EAFyBxqE,EAAdC,WAEe,EAI1Br2O,EAAYilK,GAAY2uE,EAAiB,IAH5BgtE,EAAa,EACd,GAAbA,EAAoBA,GAAchtE,EAAiB,GACpD,GAEJ,uBAAWwC,EAAX,CAA0Bp2O,iBAG9BogT,0BAAiBO,KACjBL,0BAAsBK,EAAaxoW,eAElC,CAAC6nW,EAAc/qE,EAAgBznZ,OAAQomZ,EAAgBv2X,EAAqBy7J,EAAcz5K,SAE7F,IAAMohd,EAA2B,WAK/B,IAJA,IAAIC,EAAiB,GACjBrqE,EAAa,EACbmqE,EAAa,KAHoB,WAK5BlzY,GACP,IAAMr+D,EAAcsxc,EAAsBjzY,GACpCuzY,EAAsB5rE,EAAgBl1Y,QAAO,SAAA3D,GACjD,IAAKA,EACH,OAAO,EAET,IAAM66Y,GAAoB,IAAA97T,sBAAqB/+E,EAAQmY,KAAMwiY,GAC7D,OAAOE,GAAqBA,EAAkB/jZ,SAAS+b,EAAYlO,OAErE,GAAI8/c,EAAoBrzd,OAAQ,CAC9B,IAAMyhD,EAAQ,CACZonW,aACAr2O,UAAW,EAEX/wJ,cACA9K,KAAM,gBACN8gU,SAAU9hU,KAAKkI,KAAKq1c,EAAelzd,OAAS+2U,IAE9C,GAAKi8I,EAEE,CACL,IAAMM,EAAev8I,EAAem8I,EAAelzd,OAAS+2U,EAC5D,GAAIu8I,IAAiBv8I,EACnB,IAAK,IAAIj3U,EAAI,EAAGA,EAAIwzd,EAAcxzd,IAChCozd,EAAe5yd,KAAK,CAACqW,KAAM,WAG/B,IAAM48c,EAAoBx8I,EAAc,EACxCm8I,EAAe5yd,KAAKmhD,GACpB,IAAK,IAAI3hD,EAAI,EAAGA,EAAIyzd,EAAmBzzd,IACrCozd,EAAe5yd,KAAK,CAACqW,KAAM,gBAX7Bq8c,EAAavxa,EAcfyxa,0BAAqBA,IAArB,aAAwCG,IACxCxqE,MAlCK/oU,EAAI,EAAGA,EAAIizY,EAAsB/yd,OAAQ8/E,IAAK,EAA9CA,GAsCT,IADA,IAAM0zY,EAAY79c,KAAKouE,MAAM2jU,EAAcrqS,cAAgB+oS,EAAiB,IACnEtmZ,EAAI,EAAGA,EAAKi3U,EAAcy8I,EAAY1zd,IAAK,CAClD,IAAMsta,EAAQ8lD,EAAeA,EAAelzd,OAAS,EAAIF,GACzD,GAAIsta,IAAyB,kBAAfA,EAAMz2Z,MAA2C,WAAfy2Z,EAAMz2Z,MAAoB,CACxE,IAAK,IAAI3V,EAAI,EAAGA,EAAK+1U,EAAcy8I,EAAYxyd,IAC7Ckyd,EAAe5yd,KAAK,CAACqW,KAAM,iBAE7B,OAGJ,MAAO,CAACu8c,iBAAgBF,eAMpBS,EAAe,SAAC58W,GAGpB,IAH8B,IACvB27D,EAAa37D,EAAb27D,UAEE1yK,EAAI,EAAGA,EAAI+yd,EAAe7yd,OAAQF,IAAK,CAC9C,IAAM4zd,EAAab,EAAe/yd,GAClC,IAAK0yK,EAAW,CACd,IAAMmhT,EAASd,EAAeA,EAAe7yd,OAAS,GAClD0zd,EAAWjyc,YAAYlO,KAAOogd,EAAOlyc,YAAYlO,IACnDg/c,EAAiBtyd,OAAO+2B,OAAO,GAAI28b,IAErC,MACK,GAAInhT,EAAYkhT,EAAWlhT,UAAW,CACvCkhT,EAAWjyc,YAAYlO,KAAOm0T,EAAcjmT,YAAYlO,IAC1Dg/c,EAAiBtyd,OAAO+2B,OAAO,GAAI08b,IAErC,OAGJnoS,EAAS10E,IAGL0gO,EAAe,SAAC,GAAwC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAC7CzG,EAAS49T,EAAcU,EAAYD,EACvC,OAAKk7I,EAAav5c,GAEsB,kBAA7Bu5c,EAAav5c,GAAOxC,KACtB,mCAA2BiJ,MAAOA,EACP2oY,YAAamqE,EAAav5c,GAC1BpW,IAAKA,EACLylZ,UAAWA,EACXC,YAAaA,IACT,WAA7BiqE,EAAav5c,GAAOxC,KACtB,+BAAKw/E,UAAU,eAAev2E,MAAO3f,OAAO+2B,OAAO,GAAKpX,EAAO,CAACxU,OAAQ,KAAMrI,IAAKA,IACpD,iBAA7B2vd,EAAav5c,GAAOxC,KACtB,+BAAKw/E,UAAU,eAAev2E,MAAOA,EAAO7c,IAAKA,IAGxD,+BAAKA,IAAKA,EAAK6c,MAAOA,GACpB,mCACE+lE,OAAQ,CACNv6E,OAAQg7Y,GAEVz8X,eAAgB+oc,EAAav5c,GAC7BiqS,uBAAwBA,EACxB0kC,mBAAoBA,EACpBx/J,qBAAsBA,KArBnB,MA2BLsrS,EAAe,SAAC/8W,GAAU,IACvB19F,EAAS09F,EAAT19F,MAEDusE,EAAUgtY,EADa37I,EAAc59T,GAE3C,OAAIusE,GAA6B,WAAjBA,EAAQ/uE,MAAsC,kBAAjB+uE,EAAQ/uE,KAG9CyvY,EAAiB,EAFf,IAKX,OACE,wCACG1+E,EACC,mCAA2B6gF,YAAa7gF,EACb8gF,UAAWA,EACXE,YAAY,EACZD,YAAaA,IACtC,KACJ,0CAEG,WACC,IAAMv9Y,EAAQw8Y,EAActqS,aAAe,EACrChyG,EAASs8Y,EAAcrqS,cAAgB,EAC7C,OACE,gCAAM65N,SAAUvhU,KAAKkI,KAAK60c,EAAa1yd,OAAS+2U,GAC1CxrL,IAAKk9P,EACL1xE,YAAaA,EACb7rU,MAAOA,EACPE,OAAQA,EACRmgL,SAAUkoS,EACVx8I,YAAc/rU,EAAQ6rU,EAAe,EACrCI,UAAWy8I,EACXx8I,iBAAkB,EAClBG,aAAcA,SAShC+6I,EAAoC7kU,UAAY,CAC9Cg6P,gBAAiB,UAAU7lY,MAC3BkmU,mBAAoB,UAAUx9J,KAAK9lE,WACnC8jE,qBAAsB,UAAUgC,KAAK9lE,WACrC4+L,uBAAwB,UAAU94H,KAAK9lE,WACvC+mE,SAAU,UAAUjB,KACpBgB,cAAe,UAAUpoL,OAAOshH,WAChC4hS,eAAgB,UAAUjiS,OAC1BujS,cAAe,UAAUrwM,IACzBw8Q,iBAAkB,UAAU1ua,MAAV,8B,WAeL,IAAAkyD,UAZS,SAACxzG,GAEvB,MAAO,CACLgsB,oBAF4BhsB,EAAMytB,eAA7BzB,oBAGLtO,aAAc1d,EAAMyc,YAAYiB,gBAIT,GAIZ,CAA6C+wc,I,6FCxO5D,O,WACA,MACA,OACA,UACA,Q,mDAEA,IAAMwB,EAAoC,SAACj9W,GAAU,IAE5C0xS,EAAyC1xS,EAAzC0xS,YAAaC,EAA4B3xS,EAA5B2xS,UAAWO,EAAiBlyS,EAAjBkyS,cAFoB,GAGP,IAAAr8P,WAAS,GAHF,qBAG5CqnU,EAH4C,KAG5BC,EAH4B,KAI7C7gC,GAAkB,IAAA3nS,QAAO,OAI/B,IAAAS,iBAAgBknS,GAAiB,WAC/B6gC,GAAkB,MAGpB,IAKMlhE,EAAoC,GAAnBtK,EAAUxoZ,OAC3B2lF,EAAS,CACbv6E,OAAQ2od,EAAiBjhE,EAAiB,KAAO,GAGnD,OACE,wCACE,gCAAM38T,UAAU,6DACVkyF,QAAS,kBAAM2rS,GAAmBD,IAAiBxoU,IAAK4nS,GAC3D5qC,EAAY9mY,YAAYmmF,aAE3B,+BAAKzR,UAAU,sBAAsBv2E,MAAO+lE,GAC1C,8BAAIwQ,UAAU,4BACXqyT,EAAUn1Y,KAAI,SAAC4gd,EAAQC,GACtB,OACE,8BAAInxd,IAAK,QAAUmxd,EACf7rS,QAAS,kBArBC,SAAC4rS,GACzBD,GAAkB,GAClBjrE,EAAckrE,GAmBeh/J,CAAkBg/J,IACjC99X,UAAW,iCACb,gCAAMA,UAAW,sBACd89X,EAAOxyc,YAAYmmF,qBAWtCksX,EAAkCrmU,UAAY,CAC5C86P,YAAa,UAAUpjW,MAAV,6BAA2Cq/D,WACxDgkS,UAAW,UAAU5mY,MAAM4iG,WAC3BukS,cAAe,UAAUz+N,KAAK9lE,Y,WAWjB,IAAAnN,UARS,WACtB,MAAO,KAGkB,GAIZ,CAA6Cy8W,I,8ECnE5D,I,IAAA,MACA,S,IACA,MACA,O,IAEA,S,IACA,QACA,U,IACA,S,IACA,SACA,QACA,Q,mDAEA,IAAMK,EAAqC,SAACt9W,GAAU,IAE7Cy0E,EAC2Gz0E,EAD3Gy0E,cAAem8N,EAC4F5wS,EAD5F4wS,gBAAiB3/D,EAC2EjxO,EAD3EixO,mBAAoBx/J,EACuDzxE,EADvDyxE,qBAAsB89N,EACiCvvS,EADjCuvS,eAAgBn9R,EACiBpS,EADjBoS,cAC/FsiE,EAAgH10E,EAAhH00E,SAAU17J,EAAsGgnF,EAAtGhnF,oBAAqBuzR,EAAiFvsM,EAAjFusM,uBAAwBskG,EAAyD7wS,EAAzD6wS,cAAenmY,EAA0Cs1F,EAA1Ct1F,aAAcmC,EAA4BmzF,EAA5BnzF,eAAgB49F,EAAYzK,EAAZyK,SAHlD,GAKd,IAAA8nS,gBAAe99N,EAAem8N,EAAiBlmY,EAAcmC,GAA5F2lY,EAL6C,EAK7CA,YAAaC,EALgC,EAKhCA,eAIpB,IAFA,IAAAI,sBAAqBpoS,EAAUgoS,EAAgBh+N,EAAe/pK,GAE1D+nY,EACF,OAAO,wCAGT,GAAID,EACF,OAAO,mCAA2C/9N,cAAeA,EACfo8N,cAAeA,EACfn8N,SAAUA,EACV63H,uBAAwBA,EACxBqkG,gBAAiBA,EACjB3/D,mBAAoBA,EACpBx/J,qBAAsBA,EACtB89N,eAAgBA,IAGpE,IAAMnvE,EAAsC,IAAxBpnT,EAA4Bu2X,EAAiB,IAAMA,EAAiB,GAAG,EAYrFpgQ,EAA6C,IAAxBn2H,EAA4B,EAAIA,EACrD2vW,EAAe7pX,KAAKkI,KAAK4pY,EAAgBznZ,OAASgmJ,GAUlDuxL,EAAe,SAAC,GAAwC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAC7CzG,EAAS6sI,EAAqBwxL,EAAeC,EACjD,OAAKgwE,EAAgBtuY,GAIjBmoG,IAAY,IAAAiM,sCAAqCtE,GAC9Cw+R,EAAgBtuY,GAAO5F,GAI1B,+BAAKxQ,IAAKA,EAAK6c,MAAOA,GACpB,mCAA8B+lE,OAAQ,GACRmiQ,mBAAoBA,EACpB7xT,YAAawxX,EAAgBtuY,MANtD,KAWT,+BAAKpW,IAAKA,EAAK6c,MAAOA,GACpB,mCACE+lE,OAAQ,GACRh8D,eAAgB89X,EAAgBtuY,GAChCiqS,uBAAwBA,EACxB0kC,mBAAoBA,EACpBx/J,qBAAsBA,EACtBhnE,SAAUA,EACVrrF,YAAagzF,EAAgBA,EAAc,GAAK,QAvB7C,MA4BX,OACE,0CAAgBy+R,cAAeA,IAE5B,WACC,IAAMx8Y,EAAQw8Y,EAActqS,aAAe,EAC3C,OACE,gCAAM85N,SAAUlxL,EACV+wL,YAAayoD,EACbt0X,MAAOA,EACPE,OAAS6rU,EAAcjxL,EAAsB,EAC7CulC,SAAUA,EACV0rJ,YAAaA,EACbE,UAAWF,EACXM,aAAcA,QAQ9B48I,EAAmC1mU,UAAY,CAC7Cg6P,gBAAiB,UAAU7lY,MAC3BkmU,mBAAoB,UAAUx9J,KAAK9lE,WACnC8jE,qBAAsB,UAAUgC,KAAK9lE,WACrC4+L,uBAAwB,UAAU94H,KAAK9lE,WACvC+mE,SAAU,UAAUjB,KACpBgB,cAAe,UAAUpoL,OACzBkjZ,eAAgB,UAAUjiS,OAC1BujS,cAAe,UAAUrwM,IACzB/1F,SAAU,UAAUqsC,KACpB1kC,cAAe,UAAUxE,QAAQ,UAAUt/D,MAAV,0B,WAgBpB,IAAAkyD,UAbS,SAACxzG,GAAU,IAC1BgsB,EAAuBhsB,EAAMytB,eAA7BzB,oBACP,MAAO,CACLtO,aAAc1d,EAAMyc,YAAYiB,aAChCmC,eAAgB7f,EAAMqN,gBACtB2e,yBAIuB,GAIZ,CAA6Cskc,I,mHC3I5D,O,OACA,S,IACA,MACA,O,IAEA,S,IACA,SACA,UACA,Q,mDAEA,IAAMC,EAA4C,SAACv9W,GAAU,IAEpD4wS,EACiE5wS,EADjE4wS,gBAAiB3/D,EACgDjxO,EADhDixO,mBAAoBx/J,EAC4BzxE,EAD5ByxE,qBAAsB89N,EACMvvS,EADNuvS,eAAgB76N,EACV10E,EADU00E,SAAU17J,EACpBgnF,EADoBhnF,oBAC1FuzR,EAAsEvsM,EAAtEusM,uBAAwBskG,EAA8C7wS,EAA9C6wS,cAAep8N,EAA+Bz0E,EAA/By0E,cAAe/pK,EAAgBs1F,EAAhBt1F,aAHG,GAKjB,IAAAmrI,UAAS,MALQ,qBAKpDg7K,EALoD,KAKrC6qJ,EALqC,QAMnB,IAAA7lU,UAAS,MANU,qBAMpD8lU,EANoD,KAMtCC,EANsC,QAOnB,IAAA/lU,UAAS,IAPU,qBAOpDgmU,EAPoD,KAOtCC,EAPsC,QAQzB,IAAAjmU,UAAS,IARgB,qBAQpD87P,EARoD,KAQzCoqE,EARyC,QASf,IAAAlmU,UAAS,IATM,qBASpDmmU,EAToD,KASpCC,EAToC,KAUrDrqE,GAAc,IAAAj9P,QAAO,MAErB+9P,EAAsBhoY,EAAalK,MAAK,SAAAiK,GAAA,MAA2C,wBAA5BA,EAAYtf,KAAK0mB,UACxEqqc,EAAwBxpE,EAAoB7nY,OAAOnP,QAAO,SAAAkP,GAC9D,OAAO6pK,EAAcpG,gBAAgBx/K,SAAS+b,EAAYlO,OAGtD0jU,EAAsC,IAAxBpnT,EAA4Bu2X,EAAiB,IAAMA,EAAiB,GAAG,EACrFpgQ,EAA6C,IAAxBn2H,EAA4B,EAAIA,GAE3D,IAAAq9F,YAAU,WAAM,IACP8lW,EAAcC,IAAdD,WACPT,EAAiBtyd,OAAO+2B,OAAO,GAAIg8b,IACnCP,EAAgBxyd,OAAO+2B,OAAO,GAAIg8b,MAEjC,KAEH,IAAA9lW,YAAU,WAAM,IACPgmW,EAAkBD,IAAlBC,eACPP,0BAAoBO,KACpB,IAAIC,EAAe,CAACX,GAAD,qBAAkBU,IAClC3gd,QAAO,SAAAq2Y,GAAA,OAAiBA,GAAyC,kBAAvBA,EAAcjyY,QACxDtD,KAAI,SAAAu1Y,GAAiB,IACbpxE,EAA2BoxE,EAA3BpxE,YAED47I,EAF4BxqE,EAAdC,WAEY,EAI1B7vT,EAAaw+O,GAAeP,EAAc,IAH7Bm8I,EAAa,EACd,GAAbA,EAAoBA,GAAcn8I,EAAc,GAAM,GACvD,IAEJ,uBAAW2xE,EAAX,CAA0B5vT,kBAG9B45X,0BAAiBO,KACjBL,0BAAsBK,EAAaxoW,eAElC,CAAC6nW,EAAc/qE,EAAgBznZ,OAAQomZ,EAAgBv2X,EAAqBy7J,EAAcz5K,SAE7F,IAAMohd,EAA2B,WAK/B,IAJA,IAAIC,EAAiB,GACjBrqE,EAAa,EACbmqE,EAAa,KAHoB,WAK5BlzY,GACP,IAAMr+D,EAAcsxc,EAAsBjzY,GACpCuzY,EAAsB5rE,EAAgBl1Y,QAAO,SAAA3D,GACjD,IAAKA,EACH,OAAO,EAET,IAAM66Y,GAAoB,IAAA97T,sBAAqB/+E,EAAQmY,KAAMwiY,GAC7D,OAAOE,GAAqBA,EAAkB/jZ,SAAS+b,EAAYlO,OAErE,GAAI8/c,EAAoBrzd,OAAQ,CAC9B,IAAMyhD,EAAQ,CACZonW,aACA7vT,WAAY,EAEZv3E,cACA9K,KAAM,gBACN6gU,YAAa7hU,KAAKkI,KAAKq1c,EAAelzd,OAASgmJ,IAEjD,GAAKgtU,EAEE,CACL,IAAMM,EAAettU,EAAsBktU,EAAelzd,OAASgmJ,EACnE,GAAIstU,IAAiBttU,EACnB,IAAK,IAAIlmJ,EAAI,EAAGA,EAAIwzd,EAAcxzd,IAChCozd,EAAe5yd,KAAK,CAACqW,KAAM,WAG/B,IAAM48c,EAAoBvtU,EAAqB,EAC/CktU,EAAe5yd,KAAKmhD,GACpB,IAAK,IAAI3hD,EAAI,EAAGA,EAAIyzd,EAAmBzzd,IACrCozd,EAAe5yd,KAAK,CAACqW,KAAM,gBAX7Bq8c,EAAavxa,EAcfyxa,0BAAqBA,IAArB,aAAwCG,IACxCxqE,MAlCK/oU,EAAI,EAAGA,EAAIizY,EAAsB/yd,OAAQ8/E,IAAK,EAA9CA,GAsCT,IADA,IAAMu0Y,EAAe1+c,KAAKouE,MAAM2jU,EAActqS,YAAc65N,GAAe,EAClEn3U,EAAI,EAAGA,EAAIu0d,EAAcv0d,IAAK,CACrC,IAAMsta,EAAQ8lD,EAAeA,EAAelzd,OAAS,EAAIF,GACzD,GAAIsta,IAAyB,kBAAfA,EAAMz2Z,MAA2C,WAAfy2Z,EAAMz2Z,MAAoB,CACxE,IAAK,IAAI3V,EAAI,EAAGA,EAAKglJ,EAAqBquU,EAAerzd,IACvDkyd,EAAe5yd,KAAK,CAACqW,KAAM,iBAE7B,OAGJ,MAAO,CAACu8c,iBAAgBF,eAOpBS,EAAe,SAAC58W,GAGpB,IAH8B,IACvB7d,EAAc6d,EAAd7d,WAEEl5F,EAAI,EAAGA,EAAI+yd,EAAe7yd,OAAQF,IAAK,CAC9C,IAAM4zd,EAAab,EAAe/yd,GAClC,IAAKk5F,EAAY,CACf,IAAM26X,EAASd,EAAeA,EAAe7yd,OAAS,GAClD0zd,EAAWjyc,YAAYlO,KAAOogd,EAAOlyc,YAAYlO,IACnDg/c,EAAiBtyd,OAAO+2B,OAAO,GAAI28b,IAErC,MACK,GAAI36X,EAAa06X,EAAW16X,WAAY,CACzC06X,EAAWjyc,YAAYlO,KAAOm0T,EAAcjmT,YAAYlO,IAC1Dg/c,EAAiBtyd,OAAO+2B,OAAO,GAAI08b,IAErC,OAGJnoS,EAAS10E,IAGL0gO,EAAe,SAAC,GAAwC,IAAvCC,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAC7CzG,EAAS6sI,EAAqBwxL,EAAeC,EACjD,OAAKi7I,EAAav5c,GAEsB,kBAA7Bu5c,EAAav5c,GAAOxC,KACtB,mCAA2BiJ,MAAOA,EACP63T,SAAUA,EACV8wE,YAAamqE,EAAav5c,GAC1BpW,IAAKA,EACLs8W,cAAc,EACdmpC,UAAWA,EACXC,YAAaA,IACT,WAA7BiqE,EAAav5c,GAAOxC,KACtB,+BAAKw/E,UAAU,eAAev2E,MAAO3f,OAAO+2B,OAAO,GAAKpX,EAAO,CAAC1U,MAAO,KAAMnI,IAAKA,IACnD,iBAA7B2vd,EAAav5c,GAAOxC,KACtB,+BAAKw/E,UAAU,eAAev2E,MAAOA,EAAO7c,IAAKA,IAGxD,+BAAKA,IAAKA,EAAK6c,MAAOA,GACpB,mCACE+lE,OAAQ,GACRh8D,eAAgB+oc,EAAav5c,GAC7BiqS,uBAAwBA,EACxB0kC,mBAAoBA,EACpBx/J,qBAAsBA,KArBnB,MA0BLgsS,EAAiB,SAACz9W,GAAU,IACzB19F,EAAS09F,EAAT19F,MACDo7c,EAAuBvuU,EAAqB7sI,EAClD,OAAIu5c,EAAa6B,IAAqE,kBAA5C7B,EAAa6B,GAAsB59c,KACpE,GAEFsgU,EAAc,GAGjBuoD,EAAe7pX,KAAKkI,KAAK60c,EAAa1yd,OAASgmJ,GAErD,OACE,wCACG0hL,EACC,mCAA2B6gF,YAAa7gF,EACb8gF,UAAWA,EACXE,YAAY,EACZrpC,cAAc,EACdopC,YAAaA,IACtC,KACJ,0CACG,WACC,OACE,gCAAMl9P,IAAKk9P,EACLvxE,SAAUlxL,EACV+wL,YAAayoD,EACbt0X,MAAOw8Y,EAActqS,YAAcsqS,EAActqS,YAAc,GAAK,EACpEhyG,OAAS6rU,EAAcjxL,EAAsB,EAC7CulC,SAAUkoS,EACVx8I,YAAaq9I,EACbn9I,UAAWF,EACXG,iBAAkB,EAClBG,aAAcA,SAShC68I,EAA0C3mU,UAAY,CACpDg6P,gBAAiB,UAAU7lY,MAC3BkmU,mBAAoB,UAAUx9J,KAAK9lE,WACnC8jE,qBAAsB,UAAUgC,KAAK9lE,WACrC4+L,uBAAwB,UAAU94H,KAAK9lE,WACvC+mE,SAAU,UAAUjB,KACpBgB,cAAe,UAAUpoL,OAAOshH,WAChC4hS,eAAgB,UAAUjiS,OAC1BujS,cAAe,UAAUrwM,IACzBw8Q,iBAAkB,UAAU1ua,MAAV,8B,WAeL,IAAAkyD,UAZS,SAACxzG,GAEvB,MAAO,CACLgsB,oBAF4BhsB,EAAMytB,eAA7BzB,oBAGLtO,aAAc1d,EAAMyc,YAAYiB,gBAIT,GAIZ,CAA6C6yc,I,iICxO5D,O,IACA,OACA,Q,IAEA,OACA,Q,uDAEqBI,E,yOAEnB1H,WAAa,YACX,aAAE,4CAA4C/zX,QAAQ,CAACy5E,UAAW,GAAI,GACtE,EAAKiiT,cAAa,WAChB,IAAM78X,EAAOjzF,SAASg9F,cAAc,0BAA0B0+T,cAAcxoU,wBAC5E,EAAKgxF,SAAS,CACZ0jS,iBAAiB,EACjBC,kBAAkB,EAClBa,kBAAmB,CACjB12K,WAAY,gBACZ1vQ,SAAU,QACVoW,KAAM,EACN5sC,IAAK,EACLy7H,UAAW,aAAat0C,EAAKv6C,KAAK,OAAOu6C,EAAKnnF,IAAI,MAClDvF,MAAO0sF,EAAK1sF,MAAQ,KACpBE,OAAQwsF,EAAKxsF,OAAS,KACtBunF,OAAQ,QAET,WACDsH,YAAW,WACT,EAAK4uF,SAAS,CACZ2jS,kBAAkB,EAClBa,kBAAmB,KAClB,WACqB,EAAKx2W,MAAM3qF,YAAc,MAAQ,IAAAxc,qBAErD,aAAE,4CAA4CqpF,QAAQ,CAACy5E,UAAW,GAAI,UAGzE,Y,EAKTomO,OAAS,WACP,UAAUlsW,eAAe,6BACzB,IACMkrD,EADiBjzF,SAASg9F,cAAc,0BAClB9J,wBAC5B,EAAKgf,MAAMxkF,+BACX,EAAKw2J,SAAS,CACZyjS,eAAe,EACfe,kBAAmB,CACjBpmb,SAAU,QACVoW,KAAM,EACN5sC,IAAK,EACLy7H,UAAW,aAAat0C,EAAKv6C,KAAK,OAAOu6C,EAAKnnF,IAAI,MAClDvF,MAAO0sF,EAAK1sF,MAAQ,KACpBE,OAAQwsF,EAAKxsF,OAAS,KACtBunF,OAAQ,QAET,WACDsH,YAAW,WACT,EAAKw6X,cAAa,WAMhBx6X,YAAW,WACT,EAAK4c,MAAM9kF,8BAA6B,GACxC,EAAA0L,YAAYn9B,KAAK,cACjB,EAAKu2G,MAAM9mF,2BAA2B,MACjC,EAAK8mF,MAAMwlD,4BACd,EAAKxlD,MAAMmlD,wBAAuB,KAEnC,UAEJ,O,EAIPy4T,aAAe,WAAyB,IAAxBv2P,EAAwB,uDAAb,aACnBw2P,EAAa,EAAK79W,MAAM3qF,YAAc,KACtCyoc,EAAY,EAAK99W,MAAM3qF,YAAc,KAAOxoB,OAAO+xD,YAAc,KACvE,EAAKozH,SAAS,CACZyjS,eAAe,EACfC,iBAAiB,EACjBc,kBAAmB,CACjB12K,WAAY,gBACZ1vQ,SAAU,QACVoW,KAAMq3a,EAAa,MAAQ,EAC3BvjI,WAAYujI,EAAa,SAAU,EACnCjkd,IAAK,EACLy7H,UAAW,OACXhhI,MAAOwpd,EAAa,SAAW,OAC/Btpd,OAAQ,OACRunF,OAAQ,KACR27O,QAASqmJ,EAAY,EAAI,WAE1B,WACDz2P,Q,0EA3Fes2P,G,4GCPrB,IAAYzoc,E,wJAAZ,OAEoCs8T,EAAvBA,qBAAuB,SAAC1yN,GAAD,MAAwB,CAC1Dh/G,KAAMoV,EAAMygD,wBACZpgD,QAAS,CAACupG,wB,8ECJZ,I,EAAA,O,8CAEuB,kBACrB,+BAAKzqH,MAAM,OAAOE,OAAO,OAAO0gI,QAAQ,YAAYM,QAAQ,MAAMC,MAAM,8BACtE,6BAAG94H,GAAG,eAAe8yD,OAAO,OAAO0lE,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACtE,gCAAMlqI,EAAE,+uCAA+uCwR,GAAG,sBAAsBy4H,KAAK,UAAUC,SAAS,gB,8ECL9yC,I,IAAA,MACA,O,IACA,M,mDAEA,IAAM2oV,EAAyB,SAAC/9W,GAAU,IAEjCuyE,EAAoFvyE,EAApFuyE,cAAev5J,EAAqEgnF,EAArEhnF,oBAAqBq7X,EAAgDr0S,EAAhDq0S,qBAAsBn8Q,EAA0Bl4B,EAA1Bk4B,aAAc/iI,EAAY6qG,EAAZ7qG,SAE3E6od,GAAe,EACnB,GAAIzrS,GAAiBr6C,EAAa/uI,OAAQ,CACxC,IAAMumZ,EAAmBx3Q,EAAa13H,MAAK,SAAAm4H,GACzC,OAAOA,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKI,QAAUqoH,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKK,YAEnHm/X,GAAoBA,EAAiBhlY,aAAavhB,SAAWumZ,EAAiBuB,YAAcvB,EAAiBwB,mBAC/G8sE,GAAe,GAInB,OACE,+BAAK1+X,UAAU,wBACb,kCAAQA,UAAW,+BAAyD,IAAxBtmE,EAA4B,uCAAyC,IACjHilc,YAAW,EAAGzsS,QAAS6iO,GAC7B,sCAEF,kCAAQ/0T,UAAW,+BAAyD,IAAxBtmE,EAA4B,uCAAyC,IACjHilc,YAAW,EAAGzsS,QAAS6iO,GAC7B,iCAAG,qCAAO,qCAAO,sCACjB,iCAAG,qCAAO,qCAAO,uCAElBl/Y,EAAW,KACV,kCAAQmqF,UAAW,+BAAyD,IAAxBtmE,EAA4B,uCAAyC,IACjHilc,YAAW,EAAGzsS,QAAS6iO,GAC7B,iCAAG,qCAAO,qCAAO,sCACjB,iCAAG,qCAAO,qCAAO,sCACjB,iCAAG,qCAAO,qCAAO,uCAGpB2pE,EACC,kCAAQ1+X,UAAW,+BAAyD,IAAxBtmE,EAA4B,uCAAyC,IACjHilc,YAAW,EAAGzsS,QAAS6iO,GAC7B,iCAAG,sCACH,iCAAG,sCACH,iCAAG,uCAEH,OAKV0pE,EAAuBnnU,UAAY,CACjC27B,cAAe,UAAUlmL,Q,WAgBZ,IAAAm0G,UAbS,SAACxzG,GAIvB,MAAO,CACLkrI,aAJqBlrI,EAAMqY,YAAtB6yH,aAKLl/G,oBAJ4BhsB,EAAMytB,eAA7BzB,oBAKL7jB,SAJiBnI,EAAMgR,YAAlB7I,YAQkB,GAEZ,CAA6C4od,I,0HClE5D,O,OACA,OACA,OAEA,Q,uDAEMG,E,yOAEJ5oP,mBAAqB,WACnB,EAAKt1H,MAAMt7E,oBAAoB,oB,gGAI/B,OACE,kCAAQ46D,UAAW,qBAAuB5qF,KAAKsrG,MAAM3qF,aAAe,IAAM,6BAA+B,4BACjGm8J,QAAS98K,KAAK4gO,oBACpB,gCAAMh2I,UAAU,0BACd,4CAAkB5iF,GAAG,oCAEtBhI,KAAKsrG,MAAMhtF,gBAAgB7pB,OAC1B,gCAAMm2F,UAAU,iCAAiC5qF,KAAKsrG,MAAMhtF,gBAAgB7pB,QAAiB,U,2BAcxF,IAAAq3G,UAPS,SAACxzG,GACvB,MAAO,CACLqoB,YAAaroB,EAAMgR,YAAYqX,YAC/BrC,gBAAiBhmB,EAAMyc,YAAYuJ,mBAIC,CACtC0R,2CADa,CAEZw5b,I,mKCpCH,M,IACA,MACA,OACA,Q,IACA,OACA,O,IAEA,SACA,QAIA,Q,IACA,O,IACA,S,IACA,SACA,SACA,QACA,SAKA,Q,IACA,SACA,SACA,Q,uDAGMC,G,0PAsBJ/nE,eAAiB,WACf,IAAK,EAAKp2S,MAAMlmF,uBACX,EAAKkmF,MAAM7mF,uBAAyB,EAAK6mF,MAAM7mF,qBAAqB9gB,UAAUipS,aAAc,CAC/F,EAAKthM,MAAMhmF,gCAA+B,GAC1C,EAAKgmF,MAAM8iD,gCAA+B,GAC1C,IAAMuzP,GAAsB,aAAE,oCAI9B,OAHIA,GACFA,EAAoBn0T,QAAQ,CAACy5E,UAAW,GAAI,MAEvC,EAET,OAAO,G,EAGT+6O,yBAA2B,SAAC77X,GAC1B,IAAIyvP,EAAa,EAAKtqK,MAAMrtF,eAC5B,GAAIkI,EAAczlB,UAAW,CAC3B,IAAMgc,EAAUyJ,EAAczlB,YAC9Bk1Q,EAAal5P,EAAQhc,UAAYgc,EAAQhc,YAAYmb,SAAWa,EAAQb,SAE1E,OAAO+5P,G,EAGTgsI,2BAA6B,SAACz7X,GAA4C,IAA7B07X,EAA6B,uDAAP,GAYjE,OAXIj6Y,MAAMC,QAAQ,EAAKyjG,MAAMzrF,gBAAkB,EAAKyrF,MAAMzrF,cAAcprB,QACtE,EAAK62G,MAAMzrF,cAAczhB,SAAQ,SAAA0jZ,GAC/BA,EAAa3jY,gBAAgB/f,SAAQ,SAAAugB,GACnC,GAAIA,EAAeoB,aAAc,CAC/B,IAAMgiY,GAAwB,IAAAnkY,mBAAkBe,EAAgBA,EAAeoB,aAAc,EAAKurF,MAAMvtF,kBACxGgkY,EAAsB/tT,qBAAuB7tE,EAC7C07X,EAAoB9sZ,KAAKgtZ,UAK1BF,G,EAGT6nE,wB,gCAAyB,6BAAOvjc,EAAP,uDAAuB,EAAKmlF,MAAM7mF,qBAAsBtb,EAAxD,uDAAmE,EAAG0/P,EAAtE,uDAAuF,cAAvF,2EACnB,EAAK64I,iBADc,0CAEd,GAFc,WAKnB,EAAKp2S,MAAM6lE,oBALQ,wBAMrB,EAAK7lE,MAAMl/E,kBAAkB13B,OAAO+2B,OAAO,GAAI,EAAK6/E,MAAM6lE,oBAAqB,CAC7EhoK,SAAU,EAAKmiG,MAAMlmF,sBACrB/e,YAAa8f,KAET07X,EAAsB,EAAKD,2BAA2Bz7X,GAVvC,UAWM,IAAA8hK,8BAA6B45N,GAAqB,GAXxD,YAWfh3X,EAXe,QAaJp2B,OAbI,kCAcb,EAAK62G,MAAMphF,UAAUW,GAdR,eAgBrB,EAAK8+b,oBAAoB,oBAhBJ,8BAoBvB,UAAUxob,eAAe0nO,GACiB,YAArCzvQ,SAASC,SAASoC,gBAAqE,OAArCrC,SAASC,SAASoC,gBAC3C,gBAAzB0qB,EAAc7f,SAA4B6f,EAAcrT,SAAd,OAtBxB,iBAuBrB,EAAKw4F,MAAMphF,UAAU,EAAKohF,MAAM5lF,6BAvBX,+BAyBf1H,EAAiB,CACrBC,eAAgB,EAAK+jY,yBAAyB77X,GAC9Chd,SAAUA,GAAY,EAAKmiG,MAAMlmF,uBAAyB,EAC1D9e,OAAQ6f,EAAc7f,OACtBD,YAAa8f,IAEA/c,eAAiB,EAAKkiG,MAAMvtF,iBACrC8jY,EAAsB,EAAKD,2BAA2Bz7X,EAAe,CAACnI,IAhCvD,WAiCM,IAAAiqK,8BAA6B45N,GAAqB,GAjCxD,WAiCfh3X,EAjCe,SAkCf++b,GAAoB,IAAA3gS,+CAA8Cp+J,IAlCnD,wBAoCnB,IAAAqlJ,oBAAmB,EAAAvwH,kBAAkBO,yCAA0C,CAC7EsxM,cAAe,EAAKq4N,sDAAsDpyd,KAA3D,EAAsEozB,EAAa,IAClG+mX,gBAAiB,EAAKk4E,yCAAyCryd,KAA9C,EAAyDmyd,EAAmB/+b,EAAa,MAtCzF,4CA2Cf,EAAKygF,MAAMphF,UAAUW,GA3CN,yBA6CjB,EAAKk/b,wBA7CY,8C,8CAgDzBF,uD,gCAAwD,WAAOrhS,GAAP,8FACN,IAAAW,gCAA+BX,GADzB,cAChDwhS,EADgD,gBAEhD,EAAK1+W,MAAMphF,UAAU,CAAC8/b,IAF0B,uBAGhD,EAAKD,wBAH2C,6C,+CAKxDD,0C,gCAA2C,WAAOz+b,EAAaD,GAApB,8EACzC,EAAKkgF,MAAMl/E,kBAAkB13B,OAAO+2B,OAAO,GAAIJ,EAAaD,IADnB,SAEnC,EAAK2+b,wBAF8B,6C,iDAK3CA,uB,6BAAwB,iGAChB7uc,GAAS,IAAAC,oBADO,SAEhBD,EAAO23E,qBAFS,OAGtB,EAAKo3X,kBAC6B,iBAA5B,EAAK3+W,MAAMl+E,cAA+D,eAA5B,EAAKk+E,MAAMl+E,cACzD,EAAKk+E,MAAMi8G,qBACf,EAAK2iQ,kBAAkB,EAAK5+W,MAAMxlF,2BAA6B,EAAG,mBAN9C,6C,EAUxBqkc,wB,6BAAyB,+FACjBjvc,GAAS,IAAAC,oBACf,UAAUgmB,eAAe,uBACrB,EAAKmqE,MAAMijD,SAAS95J,OAHD,iCAII,IAAAwzL,8BAAA,wBAAiC,EAAK38E,MAAMijD,SAASvnJ,QAAO,SAAA29c,GAEnF,cADOA,EAAMC,oBACND,EAAMx7c,eACV,GAPgB,cAIjB0hB,EAJiB,OAQjB,EAAKygF,MAAM6lE,sBACbtmJ,EAAeA,EAAa7jB,QAAO,SAAAZ,GACjC,OAAI,EAAKklG,MAAM6lE,oBAAoB9qK,YAAY1C,UAAUqE,KAAO5B,EAASC,YAAY1C,UAAUqE,KAC7F,EAAKsjG,MAAMl/E,kBAAkB13B,OAAO+2B,OAAO,GAAI,EAAK6/E,MAAM6lE,oBAAqB,CAC7EhoK,SAAU/C,EAAS+C,aAEd,OAdQ,SAmBf,EAAKmiG,MAAMphF,UAAUW,GAnBN,wBAqBjB3P,EAAO23E,qBArBU,QAsBvB,EAAKq3X,kBAAkB,EAAK5+W,MAAMxlF,2BAA6B,GAtBxC,8C,EAyBzBskc,iBAAmB,WACjB,IAAMjkc,EAAgB,EAAKmlF,MAAM7mF,sBAAwB,EAAK6mF,MAAMnlF,cAC9Dhd,EAAW,EAAKmiG,MAAM7mF,qBACxB,EAAK6mF,MAAMlmF,uBAAyB,EACpC,EAAKkmF,MAAM44R,0BAA4B,EAAK54R,MAAM44R,0BAA0B/6X,SAAW,EAE3F,GAAI,EAAKu4Y,iBACP,OAAO,EAGL,EAAKp2S,MAAM44R,2BAGb,EAAK54R,MAAMl/E,kBAAkB13B,OAAO+2B,OAAO,GAAI,EAAK6/E,MAAM44R,0BAA2B,CACnF/6X,WACA9C,YAAa8f,KAEf,EAAKwjc,oBAAoB,kCAEzB,EAAKD,uBAAuBvjc,EAAehd,EAAU,gCACrD,EAAA+oB,YAAYn9B,KAAK,mB,EAIrB40d,oBAAsB,SAAC9gN,GACrB,UAAU1nO,eAAe0nO,IACV,IAAA1tP,oBACR03E,qBACP,EAAA3gE,YAAYn9B,KAAK,kB,EAGnBk1d,gBAAkB,SAACI,GACjB,EAAK/+W,MAAM9mF,2BAA2B,MAClC6lc,GACF,EAAK/+W,MAAMn+E,gBAAgB,c,EAI/B2zX,wBAA0B,SAAClzY,GACzB,UAAUuzB,eAAe,qBACzB,EAAK+ob,kBAAkBt8c,GACnB,EAAK09F,MAAM7mF,sBACb,EAAKwlc,iBAAgB,GAJY,MAMoB,EAAK3+W,MAArDuyE,EAN4B,EAM5BA,cAAer6C,EANa,EAMbA,aAAcD,EAND,EAMCA,gBACpC,GAAIs6C,GAAiBr6C,EAAa/uI,OAAQ,CACxC,IAAM61d,EAAwB9mV,EAAa7mH,WAAU,SAAAsnH,GACnD,OAAOA,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKI,QAAUqoH,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKK,YAEnH2nH,EAAa8mV,IACf/mV,0BAAoBC,EAAa17H,KAAI,SAACm8H,EAAWsmV,GAI/C,OAHID,IAA0BC,IAC5BtmV,EAAUs4Q,YAAct4Q,EAAUs4Q,YAE7Bt4Q,U,EAMfumV,oBAAsB,SAAC5rS,GACrB,GAAIA,EAAUp7C,aAAa/uI,QAAUmqL,EAAUp7C,aAAavjI,MAAK,SAAAgkI,GAAA,OAAaA,EAAUs4Q,cAAa,CACnG,IAAM/4Q,EAAeo7C,EAAUp7C,aAAa17H,KAAI,SAAAm8H,GAE9C,OADAA,EAAUs4Q,YAAa,EAChBt4Q,KAET,EAAK34B,MAAMi4B,gBAAX,wBAA+BC,O,EAInCinV,mBAAqB,WACnB,IAAK,EAAKn/W,MAAM7mF,sBAAwB,EAAK6mF,MAAMnlF,cAAe,CAChE,IAAM5sB,EAAS,EAAK+xG,MAAMnlF,cAAczlB,YAIxC,IAHe,IAAAya,oBACSm9E,sBAAsB,CAAC98E,KAAMjiB,GAAS,GAAI,IAAI,GAAO,GACvC0G,MAAK,SAAA0f,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUqE,KAAO,EAAKsjG,MAAMnlF,cAAcxiB,UAAUqE,SACzF,EAAKsjG,MAAMnlF,cAAcy9D,0BAA4BrqF,EAAOgtF,WAAW,EAAK+kB,MAAMr+F,mBAC9G,OAAO,EAGX,OAAO,G,EAGTy9c,sBAAwB,WACtB,UAAUvpb,eAAe,qBACzB,EAAKmqE,MAAMn+E,gBAAgB,aACtB,EAAK6zX,sBAAsB,UAC1B,EAAKypE,qBACP,EAAKn/W,MAAM9mF,2BAA2B,EAAK8mF,MAAMnlF,gBAEjD,EAAK8jc,kBACL,EAAKC,kBAAkB,EAAK5+W,MAAMxlF,2BAA6B,EAAG,iB,EAKxE6kc,mBAAqB,WACnB,IAAMzvc,GAAS,IAAAC,oBACf,OAAID,EAAOc,cAAgB,EAAKsvF,MAAMvtF,iBAChC7C,EAAOc,aAAavnB,OAAS,EAE7B,+BAAKm2F,UAAU,oCACb,mCAA6Bx/E,KAAM,EACN2T,aAAc,EAAKhY,MAAMgY,aACzB6rc,iBAAkB,EAAK9pE,2BAInD,KAGL,+BAAKl2T,UAAU,oCACb,mCAAqBx/E,KAAM,EACN2T,aAAc,EAAKhY,MAAMgY,aACzBq/J,YAAaljK,EAAOo9E,wBACpBsyX,iBAAkB,EAAK9pE,4B,EAMpD+pE,6BAA+B,SAACtuE,GAAe,MACU,EAAKjxS,MAArDuyE,EADsC,EACtCA,cAAer6C,EADuB,EACvBA,aAAcD,EADS,EACTA,gBAC9B+mV,EAAwB9mV,EAAa7mH,WAAU,SAAAsnH,GACnD,OAAOA,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKI,QAAUqoH,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKK,YAEnH2nH,EAAa8mV,IACf9mV,EAAa8mV,GAAuB/tE,WAAaA,EACjDh5Q,0BAAoBC,MAEpB,EAAK0mV,kBAAkB,EAAK5+W,MAAMxlF,2BAA6B,I,EAInEk7X,sBAAwB,SAAC5jR,GAAc,MACC,EAAK9xB,MAApCuyE,EAD8B,EAC9BA,cAAer6C,EADe,EACfA,aACtB,IAAKq6C,IAAkBr6C,EAAa/uI,OAClC,OAAO,EAET,IAAMumZ,EAAmBx3Q,EAAa13H,MAAK,SAAAm4H,GACzC,OAAOA,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKI,QAAUqoH,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKK,YAEvH,IAAKm/X,IAAqBA,EAAiBhlY,aAAavhB,QAAUumZ,EAAiBuB,aAAevB,EAAiBwB,iBACjH,OAAO,EAES,SAAdp/Q,EACc,EAAK9xB,MAAM2iD,cAAgB,EACjC,EACN,EAAKi8T,kBAAkB,EAAK5+W,MAAMxlF,2BAA6B,GAC/D,EAAKwlF,MAAM0iD,8BAA8B,EAAK1iD,MAAM2iD,cAAgB,GAExD,EAAK3iD,MAAM2iD,cAAgB,GAChC+sP,EAAiBhlY,aAAavhB,OACrC,EAAKo2d,8BAA6B,GAClC,EAAKv/W,MAAM0iD,8BAA8B,EAAK1iD,MAAM2iD,cAAgB,GAE1E,OAAO,G,EAGTi8T,kBAAoB,SAACphN,GAA+B,IAApB2jE,EAAoB,uDAAP,GAC3C,EAAKnhO,MAAMsuS,4BAA4B9wI,EAAW2jE,GAClD,EAAKnhO,MAAM0iD,8BAA8B,I,iHAjTjB4wB,IACpBA,EAAU16B,iBAAmBlkJ,KAAKsrG,MAAM44C,gBACvC06B,EAAU4hK,qBAAuBxgV,KAAKsrG,MAAMk1O,oBAC5C5hK,EAAU7gK,mBAAqB/d,KAAKsrG,MAAMvtF,kBACzC6gK,EAAUnB,YAAcz9K,KAAKsrG,MAAMmyE,YAAemB,EAAUnB,WAAW5hK,WAAa7b,KAAKsrG,MAAMmyE,WAAW5hK,WAC9G7b,KAAK0gZ,gBAAgB9hO,GAEnBA,EAAU94J,6BAA+B9lB,KAAKsrG,MAAMxlF,6BACtD9lB,KAAKggZ,sBAAsBphO,EAAU94J,4BACrC9lB,KAAKwqd,oBAAoB5rS,M,+BA2SpB,aAEkB5+K,KAAKsrG,MADvBx5F,EADA,EACAA,mBAAoB2S,EADpB,EACoBA,qBAAsB8iM,EAD1C,EAC0CA,oBAAqBphM,EAD/D,EAC+DA,cAAe7B,EAD9E,EAC8EA,oBACnF6sJ,EAFK,EAELA,oBAMI25S,EAAqB35S,EACvB1sJ,EAAuB,sCAAuC,qCAC9D,qCAEEsmc,EAAsC,IAAxBzmc,EAEpB,OACE,+BAAKsmE,UAAU,oBACZ5qF,KAAK2gZ,kBACN,+BAAK/1T,UAAU,4BACb,mCAA2Bo2T,sBAAuBhhZ,KAAKghZ,sBAAuBC,cAAe,WAC3F,EAAKipE,kBAAkB,EAAK5+W,MAAMxlF,2BAA6B,MAE/DrB,GAAyB8iM,EAAkD,KAA5BvnN,KAAK2qd,qBACpDlmc,IAAyB8iM,GAAwBwjQ,EACjD,kCAAQngY,UAAW,0EACXkyF,QAAS98K,KAAK0qd,uBACpB,4CAAkB1id,GAChByc,EAAuB,gCAAkC,mCAG3D,KACFA,GAAyB8iM,GAAwBwjQ,EAK/C,KAJF,kCAAQngY,UAAW,iEACXkyF,QAAS98K,KAAK0qd,uBACpB,4CAAkB1id,GAAImpK,EAAsB25S,EAAqB,oCAGpEC,GAAgBxjQ,GAAwB9iM,EAKrC,KAJF,kCAAQmmE,UAAU,gGACVkyF,QAAS,kBAAM,EAAKqtS,2BAC1B,4CAAkBnid,GAAImpK,EAAsB,sCAAwC,wCAGtF1sJ,GAAwB3S,EAAmBsf,WAAam2L,EACtD,kCAAQ38H,UAAU,gGACVkyF,QAAS,kBAAM,EAAK4sS,2BAC1B,4CAAkB1hd,GAAI8id,KAExB,KACF3kc,GAAiBrU,EAAmBsf,UAAYm2L,EAC9C,kCAAQ38H,UAAU,+EACVkyF,QAAS98K,KAAKoqd,kBACpB,4CAAkBpid,GAAG,mCAEvB,W,gBAhXLk6I,UAAY,CACjBu7B,WAAY,UAAU9lL,OACtBkmL,cAAe,UAAUlmL,OACzBusJ,eAAgB,UAAU1hH,OAC1Bo3W,4BAA6B,UAAU76N,KAAK9lE,Y,cA6ZjC,IAAAnN,UA1CS,SAACxzG,GAAU,MAEyFA,EAAMytB,eADzH9H,EAD0B,EAC1BA,eAAgBwG,EADU,EACVA,qBAAsBW,EADZ,EACYA,sBAAuBe,EADnC,EACmCA,cAClET,EAF+B,EAE/BA,4BAA6BI,EAFE,EAEFA,2BAA4BjG,EAF1B,EAE0BA,cAAeouI,EAFzC,EAEyCA,cAAeM,EAFxD,EAEwDA,SAAUjqI,EAFlE,EAEkEA,oBAFlE,EAGwBhsB,EAAMgvN,qBAAxDC,EAH0B,EAG1BA,oBAAqB28K,EAHK,EAGLA,0BAHK,EAIW5rY,EAAM8J,UAA3CgrB,EAJ0B,EAI1BA,aAAc+jJ,EAJY,EAIZA,oBACd3tC,EAAgBlrI,EAAMqY,YAAtB6yH,aAL0B,EAM2BlrI,EAAMgR,YAA3DqX,EAN0B,EAM1BA,YAAa6qF,EANa,EAMbA,kBAAmBm2E,EANN,EAMMA,kBAChC10K,EAAoB3U,EAAM4U,YAA1BD,iBACP,MAAO,CACLqX,sBACArG,iBACAwG,uBACAW,wBACAe,gBACAT,8BACAI,6BACAjG,gBACAouI,gBAEA7gI,eACAtb,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CqW,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChC4C,cAGApe,UAAWjK,EAAM8J,UAAUG,UAE3Bi+U,mBAAoBloV,EAAMytB,eAAey6T,mBAGzCh1O,oBACAm2E,oBAEA10K,mBACAs6M,sBACA28K,4BACA/yN,sBACA5iB,WACA/qB,kBAIoC,CACtCh/G,wDACAV,8CACA0C,4DACA0D,sBACAgC,gCACAiB,kCACA7H,gEACA0oI,8DACAI,gEACAhiI,sCACAL,gDACAw3G,mCAZa,CAaZkmV,I,8HC7cH,O,WACA,MACA,OACA,OAEA,Q,IACA,O,uDAEMuB,G,gBASJ,WAAY1/W,IAAO,gGACXA,IADW,SAYnBm2L,gBAAkB,SAACtrS,GACjB,IAAM+mL,EAAa,EAAK5xE,MAAM8yE,YAAYjoL,EAAEugB,OAAOu7C,QAAQrkD,OAAO4N,KAClE,EAAK8vF,MAAMxnF,uBAAsB,EAAMo5J,EAAWrhK,UAClD,EAAKyvF,MAAMjoF,QAAQltB,EAAEugB,OAAOu7C,QAAQrkD,OACpC,IAAIwvK,GAAmB,EACK,IAAxBF,EAAW35K,UAA0C,WAAxB25K,EAAWrhK,WAC1CuhK,GAAmB,EACnB,EAAKC,wBAEP,EAAKC,SAAS,CACZF,sBAtBe,EA0BnBM,uBAAyB,SAACvnL,GACxB,UAAUgrC,eAAe,gBACzB,EAAKmqE,MAAMs/W,kBAAkBz0d,EAAEugB,OAAOu7C,QAAQrkD,OAC9C,EAAKyvK,uBACL3uF,YAAW,WACT,EAAK4uF,SAAS,CACZF,kBAAkB,MAEnB,MAlCc,EAqCnBI,gBAAkB,WAChB,UAAUr8I,eAAe,QACzB,EAAKm8I,SAAS,CACZF,kBAAkB,KAxCH,EA4CnBC,qBAAuB,WACrB,EAAKC,SAAS,CACZM,QAAS,EAAK72K,MAAM62K,SACnB,WACDlvF,YAAW,WACT,EAAK3nF,MAAM62K,OACPzlL,OAAO0uD,iBAAiB,QAAS,EAAKi3H,mBACtC3lL,OAAO+qG,oBAAoB,QAAS,EAAK46E,qBAC5C,OApDY,EAwDnBA,kBAAoB,SAAC3nL,IACf,EAAK4Q,MAAM62K,QAAWznL,EAAEugB,OAAOuqI,QAAQ,oCACrC9qJ,EAAEugB,OAAOuqI,QAAQ,+BAAkC9qJ,EAAEugB,OAAOuqI,QAAQ,0BACxE,EAAKo8B,wBAzDP,EAAKt2K,MAAQ,CACX62K,QAAQ,EACRR,kBAAkB,GAJH,E,uFASjBjlL,OAAO+qG,oBAAoB,QAASljG,KAAK89K,qB,+BAsDlC,WAED+jH,EAAgC,IAApB7hS,KAAKsrG,MAAMlgG,KAAa,YAAc,YAAYpL,KAAKsrG,MAAMlgG,KACzEyzK,EAAiB7+K,KAAK+G,MAAM62K,OAAS,CAAE/9K,OAAO1H,OAAO+xD,YAAc,IAAO,GAKhF,OAJIlqD,KAAK+G,MAAM62K,SACbiB,EAAeh/K,OAAUG,KAAKsrG,MAAM3qF,YAAc,KAAOxoB,OAAO+xD,YAAc,IAAO,IAAM/xD,OAAO+xD,YAAc,IAIhH,+BAAK0gC,UAAWi3M,GAAa7hS,KAAK+G,MAAM62K,OAAX,IAAwBikH,EAAxB,WAA8C,KACzE,+BAAKj3M,UAAWi3M,EAAU,UAAW/kH,QAAS98K,KAAKq9K,sBACjD,gCAAMzyF,UAAWi3M,EAAU,iBACzB,4CAAkB75R,GAAG,6CAEvB,gCAAM4iF,UAAWi3M,EAAU,iBACxB7hS,KAAKsrG,MAAMvsF,cAAgB/e,KAAKsrG,MAAMvsF,aAAatqB,QAAUuL,KAAKsrG,MAAMvsF,aAAa/e,KAAKsrG,MAAMxlF,4BAC7F9lB,KAAKsrG,MAAMvsF,aAAa/e,KAAKsrG,MAAMxlF,4BAA4BxD,KAAOtiB,KAAKsrG,MAAMrtF,iBAGzF,+BAAK2sE,UAAWi3M,EAAU,aAAcxtR,MAAOwqK,GAC5C7+K,KAAK+G,MAAMq2K,iBACR,kCAAQxyF,UAAWi3M,EAAU,kBAAmB/kH,QAAS98K,KAAKw9K,iBAA9D,QACA,KACJ,8BAAI5yF,UAAWi3M,EAAU,mBACtB7hS,KAAK+G,MAAMq2K,iBAAmBp9K,KAAKsrG,MAAMvsF,aAAajX,KAAI,SAAC8kI,EAAah/H,GACvE,OACE,8BAAIpW,IAAK,kBAAkBoW,EACvBk0R,aAAYl0R,EACZkvK,QAAS,EAAKY,uBACd9yF,UAAWi3M,0BACLA,EADK,yBAC6Bj1J,EAAYtqH,KAAKhmB,cAAcqC,QAAQ,KAAK,MACrFiuI,EAAYtqH,SAGdtiB,KAAKsrG,MAAM8yE,YAAYt2K,KAAI,SAACo1K,EAAYtvK,GAC3C,IAAMq9c,EAAS/tS,EAAW1hK,KAAKK,SAC/B,OACE,8BAAIrkB,IAAK,WAAWoW,EAChBk0R,aAAYl0R,EACZkvK,QAAS,EAAK2kH,gBACd72M,UAAWi3M,EAAU,wBAClBopL,IAAW,EAAK3/W,MAAMrtF,eAAtB,IAA2C4jR,EAA3C,+BAAqF,IAD7E,IAELA,EAFK,yBAE6BopL,EAAO3ud,cAAcqC,QAAQ,KAAK,MAC3Essd,a,kBAjHV/oU,UAAY,CACjB92I,KAAM,UAAUwtG,OAAOK,WACvBmlE,YAAa,UAAU/nK,MACvB0I,aAAc,UAAU1I,MACxBu0c,iBAAkB,UAAU7rS,KAAK9lE,Y,cAiItB,IAAAnN,UATS,SAACxzG,GACvB,MAAO,CACL2lB,eAAgB3lB,EAAMytB,eAAe9H,eACrCwF,YAAanrB,EAAMgrN,WAAW7/L,YAC9B9C,YAAaroB,EAAMgR,YAAYqX,YAC/BmF,2BAA4BxtB,EAAMytB,eAAeD,8BAIb,CACtChC,8CACAT,mBAFa,CAGZ2nc,I,8HClJH,O,WACA,MACA,OACA,O,IAEA,OACA,QACA,Q,IACA,QACA,Q,uDAEME,G,gBAMJ,WAAY5/W,IAAO,gGACXA,IADW,SAWnB+gW,oBAAsB,SAAC/vb,GACjBA,EAAW7lB,OAAS,EAAK60G,MAAMvtF,mBACjC,UAAUojB,eAAe,0BACzB,EAAKmqE,MAAM14E,oBAAoBtW,EAAW7lB,MAC1C,EAAK60G,MAAM1lF,iCAAiC,GAC5C,EAAKy3J,yBAhBU,EAoBnBA,qBAAuB,WACrB,EAAKC,SAAS,CACZM,QAAS,EAAK72K,MAAM62K,SACnB,WACDlvF,YAAW,WACT,EAAK3nF,MAAM62K,OACPzlL,OAAO0uD,iBAAiB,QAAS,EAAKi3H,mBACtC3lL,OAAO+qG,oBAAoB,QAAS,EAAK46E,qBAC5C,OA5BY,EAgCnBA,kBAAoB,SAAC3nL,IACf,EAAK4Q,MAAM62K,QAAWznL,EAAEugB,OAAOuqI,QAAQ,oCACrC9qJ,EAAEugB,OAAOuqI,QAAQ,+BAAkC9qJ,EAAEugB,OAAOuqI,QAAQ,0BACxE,EAAKo8B,wBAnCU,EAuCnBtrH,SAAW,SAACk5G,GACV,OAAIA,GAA0C,SAA3B,EAAK3/D,MAAMtnG,aAAqD,YAA3B,EAAKsnG,MAAMtnG,YAG5DinK,GAFE,IAAAjmD,uBAAsBimD,EAAY,EAAK3/D,MAAMtnG,cAvCtD,EAAK+C,MAAQ,CACX62K,QAAQ,GAHO,E,uFAQjBzlL,OAAO+qG,oBAAoB,QAASljG,KAAK89K,qB,+BAsClC,WACD5iK,GAAS,IAAAC,oBACT0mR,EAAgC,IAApB7hS,KAAKsrG,MAAMlgG,KAAa,YAAc,YAAYpL,KAAKsrG,MAAMlgG,KACzEyzK,EAAiB7+K,KAAK+G,MAAM62K,OAAS,CAAE/9K,OAAO1H,OAAO+xD,YAAc,IAAO,GAKhF,OAJIlqD,KAAK+G,MAAM62K,SACbiB,EAAeh/K,OAAUG,KAAKsrG,MAAM3qF,YAAc,KAAOxoB,OAAO+xD,YAAc,IAAO,IAAM/xD,OAAO+xD,YAAc,IAIhH,+BAAK0gC,UAAWi3M,GAAa7hS,KAAK+G,MAAM62K,OAAX,IAAwBikH,EAAxB,WAA8C,KACzE,+BAAKj3M,UAAWi3M,EAAU,UAAW/kH,QAAS98K,KAAKq9K,sBACjD,gCAAMzyF,UAAWi3M,EAAU,iBACzB,4CAAkB75R,GAAG,6CAEvB,gCAAM4iF,UAAWi3M,EAAU,iBACzB,mCAAgBj6G,eAAgB5nL,KAAKsrG,MAAMvtF,qBAG/C,+BAAK6sE,UAAWi3M,EAAU,aAAcxtR,MAAOwqK,GAC7C,8BAAIj0F,UAAWi3M,EAAU,mBACtB3mR,EAAOc,aAAed,EAAOc,aAAalU,KAAI,SAACwU,EAAY1O,GAC1D,IAAIq9J,EAAa,EAAKl5G,SAASz1C,EAAW2uJ,YACpC9R,EAAW78I,EAAW7lB,OAAS,EAAK60G,MAAMvtF,iBAIhD,OACE,8BAAIvmB,IAAK,WAAWoW,EAChBk0R,aAAYl0R,EACZkvK,QAAS,kBAAM,EAAKuvR,oBAAoB/vb,IACxCjI,MAAO,CACLy3E,uBAAwBm/E,EAAxB,IACAxsD,eAAgB,OAChBE,mBAAoB,oBAEtB/zB,UAAWi3M,EAAU,wBAClB1oI,EAAWA,IAAI0oI,EAAf,+BAAyD,IADjD,IAELA,EAFK,yBAE6BvlR,EAAW7lB,KAAK6F,cAAcqC,QAAQ,KAAK,MACrF,mCAAgBipL,eAAgBtrK,EAAW7lB,WAG7C,Y,kBA3FPyrJ,UAAY,CACjB92I,KAAM,UAAUwtG,OAAOK,Y,GA2GrBq3E,EAAqB,CACzB19J,0CACAhN,qE,WAGa,IAAAkmF,UAdS,SAACxzG,GAAU,MACEA,EAAMgR,YACzC,MAAO,CACLqX,YAH+B,EAC1BA,YAGL3c,YAJ+B,EACbA,YAIlB+Z,iBAAkBzlB,EAAMgsL,QAAQvmK,oBASIuyK,EAAzB,CAA6C46R,I,8HC9H5D,O,WACA,MACA,OACA,Q,IACA,SACA,QACA,O,IACA,S,uDAEMC,G,6OAUJpkd,MAAQ,CACNugY,UAAU,EACV8jF,YAAY,G,EAuBdC,aAAe,WACb,EAAKC,gBAAkB58X,YAAW,WAChC,EAAK4uF,SAAS,CACZgqN,UAAU,MAEX,M,EAGLikF,WAAa,WACX5pU,aAAa,EAAK2pU,iBAClB,EAAKhuS,SAAS,CACZgqN,UAAU,EACV8jF,YAAY,IACX,WACD,EAAKE,gBAAkB58X,YAAW,WAChC,EAAK4uF,SAAS,CACZgqN,UAAU,EACV8jF,YAAY,MAEb,S,2GAtCAprd,KAAKsrG,MAAMs1S,kBAAqB5gZ,KAAKsrG,MAAMu1S,YAAc7gZ,KAAKsrG,MAAMxlF,4BACvE9lB,KAAKqrd,iB,gDAIiBzsS,GACnBA,EAAUgiO,mBACR5gZ,KAAKsrG,MAAMu1S,YAAc7gZ,KAAKsrG,MAAMxlF,4BAAgC84J,EAAUiiO,YAAcjiO,EAAU94J,2BACzG9lB,KAAKurd,aACKvrd,KAAKsrG,MAAMu1S,YAAc7gZ,KAAKsrG,MAAMxlF,4BAAgC84J,EAAUiiO,YAAcjiO,EAAU94J,4BAChH9lB,KAAKqrd,kB,6CAMT1pU,aAAa3hJ,KAAKsrd,mB,+BA0BX,MAE4Btrd,KAAKsrG,MADjC3rF,EADA,EACAA,QAASmhY,EADT,EACSA,wBAAyBD,EADlC,EACkCA,UAAWpmY,EAD7C,EAC6CA,KAAMtC,EADnD,EACmDA,eAAgB2N,EADnE,EACmEA,2BACxE86X,EAFK,EAELA,iBAAkB58Y,EAFb,EAEaA,YAEhBvN,GAAO,IAAAqlB,qBAAoB6D,EAAQnE,KAAMf,EAAMtC,GAC9CwH,EAAQnE,KAAKuB,wBAAoC,eAATtmB,GAAmD,6BAAxBkpB,EAAQnE,KAAKlV,SACnF7P,EAAO,qBAET,IAAM0iK,EAAW0nP,IAAc/6X,IAA+B86X,EAC9D,OACE,wCACE,kCAAQh2T,UAAW,4DAA4DjrE,EAAQnE,KAAKlV,QACzF6yJ,EAAW,uCAAyC,IAC/C2jB,QAAS,WAAQgkO,EAAwBD,KAC9C1nP,GAAYn5J,KAAK+G,MAAMqkd,WACtB,+BAAKxgY,UAAW,cAAgB5qF,KAAK+G,MAAMugY,UAAYtnY,KAAK+G,MAAMqkd,WAAa,wBAA0B,KACvG,+BAAKxgY,UAAW,qBACd,+BAAKA,UAAU,gCAGjB,KACJ,+BAAKA,UAAW,qCAAuCuuE,IAAan5J,KAAK+G,MAAMugY,SAAW,UAAY,KACpG,gCAAM18S,UAAU,mCAAmCv2E,OAAO,IAAAywG,2BAA0BnlG,EAAQnE,KAAMxX,MAEpG,mCAAsB4oI,YAAajtH,EAAQnE,OAC3C,gCAAMovE,UAAU,oCAAoCn0F,IAEtD,mCAAyB0iK,SAAUA,EAAU0kB,cAAel+J,S,kBAnF3DuiI,UAAY,CACjB2+P,UAAW,UAAUjoS,OAAOK,WAC5BnzF,2BAA4B,UAAU8yF,OAAOK,WAC7Ct5F,QAAS,UAAUhoB,OAAOshH,WAC1B6nS,wBAAyB,UAAU/hO,KAAK9lE,WACxC2nS,iBAAkB,UAAUx+P,KAAKnpC,Y,cA+GtB,IAAA8uC,aACb,IAAAj8C,UAXsB,SAACxzG,GAAU,MACCA,EAAMytB,eACxC,MAAO,CACLgoI,SAH+B,EAC1BA,SAGLE,cAJ+B,EAChBA,cAIf91I,eAAgB7f,EAAMqN,gBACtB3B,YAAa1L,EAAMgR,YAAYtF,eAKR,GAAzB,CAA6Bmnd,K,8EChI/B,I,IAAA,M,IACA,MACA,OACA,S,mDAEA,IAAMK,EAA0B,SAAClgX,GAAU,IAElC6tD,EAAuF7tD,EAAvF6tD,SAAU0kB,EAA6EvyE,EAA7EuyE,cAAer6C,EAA8Dl4B,EAA9Dk4B,aAAcyqB,EAAgD3iD,EAAhD2iD,cAAeD,EAAiC1iD,EAAjC0iD,8BAEvDgtP,EAAmBx3Q,EAAa13H,MAAK,SAAAm4H,GACzC,OAAOA,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKI,QAAUqoH,EAAUhvE,mBAAqB4oH,EAAcriK,KAAKK,YAGvH,IAAKm/X,IAAqBA,EAAiBhlY,aAAavhB,SAAWumZ,EAAiBwB,iBAClF,OAAO,KAGT,IAMMivE,EAAezwE,EAAiBuB,WAAa,GAAKvB,EAAiBhlY,aACnErW,EAA8B,IAAtB8rd,EAAah3d,OACrB4f,EAAQ,CACZ1U,QACAykV,KAAM,OAASzkV,EAAQ,MAGzB,OACE,8BAAIirF,UAAW,aAAgBuuE,EAAkC,GAAvB,sBAA4B9kJ,MAAOA,GAC1Eo3c,EAAa3jd,KAAI,SAACiO,EAAa21c,GAC9B,OACE,8BAAI9gY,UAAW,kBAAoB8gY,IAAiBz9T,EAAgB,0BAA4B,IAC5Fz2J,IAAKk0d,EAAc5uS,QAAS,WAlBb,IAAClvK,KAkBqC89c,KAjBjDz9T,GACZD,EAA8BpgJ,KAkBxB,gCAAMg9E,UAAU,wBAAwB70E,EAAYtf,YAQhE+0d,EAAwBtpU,UAAY,CAClCiX,SAAU,UAAU/W,KAAKnpC,WACzB4kE,cAAe,UAAUlmL,OAAOshH,YAGlC,IASM0yW,EAAoB,CACxB39T,+D,WAGa,IAAAliD,UAbS,SAACxzG,GAGvB,MAAO,CACLkrI,aAHqBlrI,EAAMqY,YAAtB6yH,aAILyqB,cAHsB31J,EAAMytB,eAAvBkoI,iBAW+B09T,EAAzB,CAA4CH,I,8EC/D3D,W,OACA,OACA,Q,IAEA,Q,IACA,SACA,QACA,S,IACA,S,IACA,S,IACA,S,IACA,MACA,Q,IACA,Q,mDAGA,IA0EMl7R,EAAqB,CACzB9pK,6D,WAMa,IAAA+pK,aACb,IAAAzkF,UArBsB,SAACxzG,GAAU,MACMA,EAAMqY,YAAtCwpF,EAD0B,EAC1BA,WAAYvpF,EADc,EACdA,iBAInB,MAAO,CACL6V,SAJiBnuB,EAAMouB,wBAAlBD,SAKL0zE,aACAvpF,mBACAwxK,qBAN6B9pL,EAAMgR,YAA9B84K,wBAkBkBkO,EAAzB,EAlFsB,SAAChlF,GAAU,IAE1BnR,EAA+GmR,EAA/GnR,WAAYvpF,EAAmG06F,EAAnG16F,iBAAkBpM,EAAiF8mG,EAAjF9mG,MAAO1K,EAA0EwxG,EAA1ExxG,SAAU0sB,EAAgE8kF,EAAhE9kF,6BAA8BC,EAAkC6kF,EAAlC7kF,SAAU27J,EAAwB92E,EAAxB82E,qBAmC9F,OAjCA,IAAAzgE,YAAU,WACR3pH,QAAQ4B,IAAI,mBAAoBgX,GAIhC,IAAMwpF,GAAa,IAAAygB,wBAAuB1gB,EAAY31F,EAAMs2G,QAC5D9iH,QAAQ4B,IAAI,aAAcwgG,IACtBA,GAAgBxpF,GAAqBA,EAAiB44E,aAAe4Q,EAAW5Q,aAC/ErxF,OAAO2B,SAASC,KAAKI,SAAS,eACjC,IAAAspL,oBAAmBrpF,EAAY,KAGhC,CAACD,EAAYioF,KAEhB,IAAAzgE,YAAU,WACRjzB,YAAW,WACT,GAAK50F,GAAaA,EAAS+d,SAA3B,CAIA,IACO4O,EADc,UAAMtkB,WACKukB,wBAAzBD,SACH3sB,EAAS+d,SAAS1d,SAAS,eAAiBhC,OAAO2B,SAASC,KAAKI,SAAS,cAE5EqsB,GAA6B,GACpBC,GACTD,GAA6B,MAE9B,KAEF,CAAC1sB,EAAS+d,WAGRjH,EAMH,+BAAKg6E,UAAU,0BACb,+BAAKA,UAAU,+BACb,+BAAKA,UAAU,aACb,mCAAe21N,iBAAiB,IAChC,wCACA,+BAAK31N,UAAU,oBACb,mCAA4BwP,WAAYxpF,IACxC,2CAIN,wCACC6V,EAAW,KAAO,mCAAsBsvF,UAAU,KAjB9C,U,8ECtDX,I,IAAA,MACA,OAEA,Q,IACA,S,IACA,S,8DAwCe,IAAAjK,UAfS,SAACxzG,GAAU,MAC8CA,EAAMqY,YAIrF,MAAO,CACLwpF,WAN+B,EAC1BA,WAMLvpF,iBAP+B,EACdA,iBAOjBE,qBAR+B,EACIA,qBAQnCsZ,iBAT+B,EAC0BA,iBASzD3F,qBAR6BnsB,EAAMytB,eAA9BtB,qBASLzO,aARqB1d,EAAMyc,YAAtBiB,gBAYM,EArCa,SAACs1F,GAAU,IAE9Bx6F,EAA4Dw6F,EAA5Dx6F,qBAAsBsZ,EAAsCkhF,EAAtClhF,iBAAkBxZ,EAAoB06F,EAApB16F,iBAUzC8sG,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAE3E,OACE,uCACE,mCAAqB4sG,cAAeA,S,yICxB1C,O,OACA,OACA,Q,IACA,Q,IAEA,S,IAEA,SACA,QAOA,QACA,Q,IACA,S,IACA,M,IACA,SACA,Q,IACA,QACA,SACA,SACA,QACA,QACA,SACA,Q,IACA,OACA,Q,IACA,M,IACA,S,mDAGA,IAAMkuW,EAAsB,SAACtgX,GAAU,IAiB/B,EAfCoS,EAG0FpS,EAH1FoS,cAAej5F,EAG2E6mF,EAH3E7mF,qBAAsBgsK,EAGqDnlF,EAHrDmlF,QAAS3/K,EAG4Cw6F,EAH5Cx6F,qBAAsBsZ,EAGsBkhF,EAHtBlhF,iBAAkBxZ,EAGI06F,EAHJ16F,iBAC3FoF,EAE+Fs1F,EAF/Ft1F,aAAcvV,EAEiF6qG,EAFjF7qG,SAAU6jB,EAEuEgnF,EAFvEhnF,oBAAqBD,EAEkDinF,EAFlDjnF,uBAAwB+yI,EAE0B9rD,EAF1B8rD,uBAAwB94I,EAEEgtF,EAFFhtF,gBAC7F64I,EAC+F7rD,EAD/F6rD,0BAA2B8pJ,EACoE31M,EADpE21M,gBAAiBpmK,EACmDvvC,EADnDuvC,qBAAsB2T,EAC6BljD,EAD7BkjD,wBAAyB4zB,EACI92E,EADJ82E,qBAC3FnhE,EAA+F3V,EAA/F2V,sBAAuB1+G,EAAwE+oG,EAAxE/oG,UAAW6hI,EAA6D94B,EAA7D84B,wBAAyBn3H,EAAoCq+F,EAApCr+F,iBAAkBygJ,EAAkBpiD,EAAlBoiD,eAL1C,GAOL,IAAAvM,UAAS,IAPJ,qBAO9Bl8D,EAP8B,KAOpB4mY,EAPoB,KAQ/BC,GAAa,IAAA7rU,UAIbv1H,EAAcgzF,EAAc,GAE5BxiG,GAAS,IAAAC,oBACTyB,GAAe,IAAA69E,gCAA+B/vE,GAE9Cqhc,GAAA,gCAAqB,kGAErB3pS,EAFqB,0CAGhB,GAHgB,UAMrB,UAAOvhL,cACT7I,QAAQ4B,IAAI,gBAAiB8jH,GAC7B1lH,QAAQ4B,IAAI,eAAgBgjB,MAG1B,IAAAolG,sCAAqCtE,GAXhB,uBAavBmuW,0BAAgBnuW,KAChBm9B,GAAqB,GAdE,6BAsBrB,UAAOh6I,aACT7I,QAAQ4B,IAAI,cAAe8wB,IAGzB9N,GAAiBA,EAAaw1E,oBA1BT,wBA2BjBmwB,EAAOn4F,EA3BU,WA4BjB,IAAAuoE,6BAA4B/1E,GAAc,GA5BzB,WA6BjB0nH,EAAc,UAAMniI,WAAWwO,YAAYyZ,iBAC7Cm4F,IAAS+hB,EA9BU,2CA+Bd,GA/Bc,WAmCrB0nV,EAAcpvc,GAAe,IAAAoiG,0BAC/BluG,EACAsZ,EACAxZ,EACA8Z,EACA9N,EACA5G,EACAohJ,EACA94I,GACE,IAGA1B,KAAgB,IAAAgkG,yCAAwCl2F,EAAa9N,IAAkBqkG,EAAsBv2F,EAAYla,WA/CpG,mCAgDY,IAAAswG,0BAAyBkrW,EAAathc,EAAa9N,GAhD/D,iBAkDrBovc,GAAc,IAAAhtW,0BACZluG,EACAsZ,EACAxZ,EACA8Z,EACA9N,EACA5G,EACAohJ,EACA94I,IA1DmB,QA+DzButc,EAAYG,GACZC,GAAkBD,GAClBnxU,GAAqB,GACrBnsD,YAAW,WACTmsD,GAAqB,KACpB,GApEsB,mDAArB,4CAuFAoxU,GAAoB,SAACD,GACzB,GAAKpvc,GAAiBovc,EAAYv3d,OAAlC,CAGA,GAAIu3d,EAAYnud,OAAM,SAAA8hB,GAAA,OAAWA,EAAQnE,KAAKooE,6BAA6Bx5D,EAAmB,EAE5F,IADA,IAAMlP,GAAS,IAAAC,oBACN5mB,EAAI61B,EAAmB,EAAG71B,GAAM,EAAGA,IAAK,CAC/C,IACMm2B,GADgB,IAAA6vE,kBAAiB3pF,EAAkBrc,EAAGuc,GAC1B,GAC5Bo7c,GAAmB,IAAAzxX,gCAA+B/vE,GACxD,GAAIwhc,EAAkB,CACpB,IAAM/J,EAAwBjnc,EAAOo9E,sBAAsB,CAAC98E,KAAM0wc,GAAkB,GAAI,IAAG,GAAM,GACjG,GAAI/J,EAAsB1td,QAAU0td,EAAsBlid,MAAK,SAAA0f,GAAA,OAAYA,EAAQnE,KAAKooE,4BAEtF,YADA4qE,EAAwB09T,EAAiB5ld,SAMjDkoJ,EAAwB5xI,EAAatW,WAGvC,IAAAq7G,YAAU,WACRoqW,MAEC,CAAC3hc,EAAkBxZ,EAAkB0N,EAAiB84I,EAAwB6pJ,EAAiB7+H,KAElG,IAAAzgE,YAAU,WACR,GAAI/kG,IAAiB9L,EAAqBsZ,GAAmB,CAE3D,IAAM+hc,EAAuB5pd,EAAUuJ,MAAK,SAAA1F,GAC1C,OAAOA,EAASE,SAAWsW,EAAatW,QAAUF,EAASoC,eAAiByE,KAE1Ek/c,GACF/nV,mBACGh6G,EAAmB,CAClBM,cACAzZ,gBAAiBk7c,EAAqB9ld,YACtCC,OAAQsW,EAAatW,aAM5B,CAACsW,KAEJ,IAAA+kG,YAAU,WA7DJj3F,GACEjqB,GAAciqB,EAAY8qM,UAAqC,IAAzB9qM,EAAY8qM,SAI3C9qM,EAAY8qM,UAAa9qM,EAAY8qM,WAAalxM,EAC3DD,EAAuBqG,EAAY8qM,UACzB9qM,EAAY8qM,UAAqC,IAAxBlxM,GACnCD,EAAuB,GANK,IAAxBC,GACFD,EAAuB,GAOlB5jB,GAAoC,IAAxB6jB,GACrBD,EAAuB,KAqDxB,CAAC+F,KAEJ,IAAAu3F,YAAU,WACR,OAAO,WACDy1C,GACFD,EAA0B,OAI7B,IAEH,IAUM,GAVAi1T,GAAoB,SAACz5F,GACpBA,GACHo5F,KAIEr2E,IAAkB,cAAS,WAC/B,OAAO,IAAA5/I,sBAAqBl5O,EAAcw6I,EAAwBg1T,MACjE,KAEG9lM,IAAA,iCAAoB,WAAO1lL,GAAP,8EACxBu2D,EAA0Bv2D,EAAMlqF,OAAOxf,OADf,SAElBw+Y,GAAgB90S,EAAMlqF,OAAOxf,OAFX,kDAApB,8CAKN,OACE,wCACE,+BAAK0zF,UAAU,kBACb,+BAAKA,UAAU,kBACb,mCAAqBq2X,kBAAkB,EAClBD,iBAAiB,EACjBc,kBAAmB,KACnBngY,SAAUsD,EACV41T,eAAgB,IAChBxN,OAAQ,WACN58M,EAAQ17L,KAAK,EAAAwgB,OAAOi0E,aAEtB9+D,YAAaA,EACbmzJ,cAAejhK,EAAe,CAACpB,KAAMoB,GAAgB,KACrDmgK,qBAAsB,eAC1Ct4J,GAAwB7H,EACvB,mCACE+kE,SAAUsD,EACVs3P,mBAAoB,aACpB9+J,WAAY7gK,EAAalc,YACzBk5Y,4BAA6B,eAG/B,+BAAKhvT,UAAU,2BACb,mCAAqBmyH,wBAAyBupE,GACzBriM,WAAYmzE,EACZymB,cAAejhK,EAAe,CAACpB,KAAMoB,GAAgB,OACxE8gG,EAAcjpH,OAAgB,mCAC9B2mZ,OAAQ,SAACl3H,GAAD,OAAU4nM,EAAWt3W,QAAU0vK,GACvCxmK,cAAeA,EACfqiE,cAAenjK,EACf+kE,SAAUsD,EACVv6D,YAAaA,EAEbqyJ,qBAAsB,aACtBj5F,WAAY5oE,EAAOwmE,uBACnBi6T,yBAAyB,IATF,QAehC/+X,EAAe,mCAAc5U,GAAG,kBACHi8E,WAAYmzE,EACZ2lD,wBAAyBupE,GACzBprQ,OAAQA,EACRgjK,UAAW,CAAC1iK,KAAMoB,KAAoB,KACnE6H,GAAwB7H,GAAgB8wI,EAAiB,wCAAa,OAM7Ek+T,EAAoB1pU,UAAY,CAC9BxkC,cAAe,UAAUxE,QAAQ,UAAUt/D,MAAV,0BAGnC,IA8BM02I,EAAqB,CACzBjsK,gDACA8yI,sDACAtc,4CACA2T,kDACApqB,mD,WAGa,IAAAmsD,aACb,IAAAzkF,UAvCsB,SAACxzG,GAAU,MACqEA,EAAMqY,YAArGwpF,EAD0B,EAC1BA,WAAYvpF,EADc,EACdA,iBAAkBE,EADJ,EACIA,qBAAsBsZ,EAD1B,EAC0BA,iBAAkB62F,EAD5C,EAC4CA,sBAD5C,EAEmC3oH,EAAMytB,eAAnEtB,EAF0B,EAE1BA,qBAAsBH,EAFI,EAEJA,oBAAqBopI,EAFjB,EAEiBA,eAFjB,EAGOp1J,EAAMyc,YAAvCiB,EAH0B,EAG1BA,aAAcsI,EAHY,EAGZA,gBAHY,EAIQhmB,EAAMgR,YAAxC7I,EAJ0B,EAI1BA,SAAU2hL,EAJgB,EAIhBA,qBAMjB,MAAO,CACLjoF,aACAvpF,mBACAE,uBACAsZ,mBACA3F,uBACAH,sBACAopI,iBACA13I,eACAvV,WACA6d,kBACA84I,uBAhB+B9+J,EAAMk4L,WAAhCp5B,uBAiBL6pJ,gBAhBwB3oT,EAAM0zG,UAAzBi1M,gBAiBLhgM,wBACA1+G,UAjBkBjK,EAAM8J,UAAnBG,UAkBL0K,iBAjByB3U,EAAM4U,YAA1BD,iBAkBLm1K,0BAauBkO,EAAzB,CAA6Cs7R,K,6FCrT/C,O,OACA,OACA,OACA,S,IACA,MAEA,Q,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,Q,mDAIA,IAAMS,EAAsB,SAAC/gX,GAAU,IAGnC01W,EAWE11W,EAXF01W,gBACAC,EAUE31W,EAVF21W,iBACA5zE,EASE/hS,EATF+hS,OACAwN,EAQEvvS,EARFuvS,eACAl5T,EAOE2pB,EAPF3pB,SACAmgY,EAMEx2W,EANFw2W,kBACA/kS,EAKEzxE,EALFyxE,qBACAc,EAIEvyE,EAJFuyE,cACA13J,EAGEmlF,EAHFnlF,cAAehO,EAGbmzF,EAHanzF,eAAgB1X,EAG7B6qG,EAH6B7qG,SAAU2U,EAGvCk2F,EAHuCl2F,uBAAwBu6O,EAG/DrkJ,EAH+DqkJ,uBAAwBvlI,EAGvF9e,EAHuF8e,kBACzFn9G,EAEEq+F,EAFFr+F,iBAAkB8a,EAEhBujF,EAFgBvjF,iBAAkB+4M,EAElCx1H,EAFkCw1H,UAAW31H,EAE7CG,EAF6CH,YAAaC,EAE1DE,EAF0DF,YAAaqjD,EAEvEnjD,EAFuEmjD,qBAAsB/jI,EAE7F4gF,EAF6F5gF,YAC/FyjI,EACE7iD,EADF6iD,sBAAuBi0B,EACrB92E,EADqB82E,qBAbY,GAgBK,IAAAjhC,WAAS,GAhBd,qBAgB9B4/T,EAhB8B,KAgBfuL,EAhBe,KAkB/Bpxc,GAAS,IAAAC,oBAlBsB,EAqBI/hB,SAASC,SAA3C2b,EArB8B,EAqB9BA,UAAWC,EArBmB,EAqBnBA,MAAOC,EArBY,EAqBZA,aAGnBpD,EAAqBqG,EAAezQ,SAEpCwgF,EAAahtE,EAAOqmE,+BAA+BjlF,cAEnD68M,IAAmB//M,SAASggN,UAAWhgN,SAASggN,SAASC,iBAEzDmoQ,EAAiBr7b,GAAiBA,EAAczlB,YAAY6lF,WAAWt5E,GAEvEw0c,EAAiBD,IACjBr7b,EAAcxiB,UAAUgS,UACxB7D,EAAmBy3T,sBAAwBv0T,GAAaC,GAASC,KACjEE,IAA2BtD,EAAmBuD,wBAG9Cqsc,IAAkBV,GAAmBvgd,EAKrCm8K,GAAkB9qK,EAAmB+qK,YAErC8kS,IAA8BX,IAAoBrxN,KACjD79O,EAAmBuD,yBAA4BvD,EAAmBuD,yBAA2BD,GAC5FtD,EAAmBuD,yBAA2Bjc,SAASC,SAASuhd,sBACjE9oc,EAAmB6L,sBAAwBysG,GAE5CnK,GAAS/kG,EAAOo+L,UAAUH,GAE1ByoQ,IAA2BH,IAAmBT,GAAmBQ,GAAkBr7b,GACpFA,EAAcy9D,2BAA6B+rK,IAA2Bx3O,EAAeG,cAEpFi0c,IAA6B9K,IAAmBT,GAAmBQ,GAAkBr7b,IACrFA,EAAcy9D,2BAA6B+rK,GAA0BxhG,EAErEo1E,GAAc,gDAAkDnqO,SAASC,SAASoC,eACpF,2BAA2BysF,EAC3B,iCAAiChtE,EAAOkZ,MACxC,2BAA2Bq6H,GAC1BuyT,EAAkB,oCAAsC,KACxDC,EAAmB,qCAAuC,KACxDhhW,GAAOxrH,QAA4B,IAAlBwrH,GAAOxrH,SAAiBymB,EAAOia,YAAoD,GAAtC,qCAE/DgpO,GAAe,WACnBmuN,GAAiB,GACjBnhX,KAGI+7G,GAAgB,WACpBolQ,GAAiB,GACjBlhX,KAiCF,OACE,+BAAKxgB,UAAU,kBACb,wCACA,+BAAKA,UAAW24I,GAAalvN,MAAOytc,GAClC,mCAAsB56P,cAAeA,GAAei3C,aAAcA,KAlC3C,SAACl+I,EAAQ/kG,GACpC,GAAIkvG,EACF,OAAO,KAET,GAAIulI,EACF,OAAO,mCAAqB09I,OAAQA,EACR5sY,SAAUA,EACVo6Y,eAAgBA,EAChBzN,2BAA2B,EAC3BjnX,cAAeA,IAE7C,GAAIi8J,EACF,OAAO,wCAET,IAAM6lO,GAAc,IAAAj0X,oBACpB,OACE,wBAACi0X,EAAD,CAAar4T,SAAS,kBACTqwB,OAAQA,EACRtgH,MAAOooB,EAAiBpoB,MACxBE,OAAQkoB,EAAiBloB,OACzBqf,WAAYhE,EAAOwmE,uBACnBxmE,OAAQA,EACRsrN,kBAAkB,EAClB23B,aAAcA,GACdj3C,cAAeA,KAWzB66P,CAAqB9hW,GAAQ/kG,GAC7B6lc,IAAkBpxN,EACjB,+BAAK/kK,UAAU,qBACb,+BAAKA,UAAU,6BACb,+BAAKA,UAAU,6DACb,+BAAKA,UAAU,uCACf,mCAAYA,UAAU,0CAI1B,KAKF62X,GAAmBT,IAAoBnjS,IAAiBnzJ,IAAgBi3D,EAASltF,OAE/E,KADA,mCAA2BgpL,WAAYI,EAAenzJ,YAAaA,KAEtE+2b,GAAmBT,GAAoBrxN,EAUpC,KATF,+BAAK/kK,UAAU,QACb,gCAAMA,UAAU,cAChB,6BAAGA,UAAU,aAAY,4CAAkB5iF,GAAG,wCAC9C,kCAAQ4iF,UAAU,2CAA2CkyF,QAASC,GACnEH,GACG,4CAAkB50K,GAAG,sCACrB,4CAAkBA,GAAG,yCAI9B45c,GACC,mCAAqBv0E,OAAQA,EACR5sY,SAAUA,EACVo6Y,eAAgBA,EAChB10X,cAAeA,IAClC,KACHomc,GAA4B,wCAAwB,KACpD7K,GACC5gP,GAAaA,EAAUrsO,OAAS,EAC5B,mCAAY0mV,aAAa,EACbC,qBAAsB,oEAClC,mCAAYxwP,UAAU,oDACxB,KAOH+2X,GACC,kCAAQ/2X,UAAU,wEAAwEkyF,QAASuwN,IACjG,KAKJ,wCAEA,mCAAiCq0E,eAAgBA,GAAgBgC,mBA/H7C,OAsI5B2I,EAAoBnqU,UAAY,CAC9B8+T,gBAAiB,UAAU5+T,KAC3B6+T,iBAAkB,UAAU7+T,KAC5BirP,OAAQ,UAAUtuN,KAClB87N,eAAgB,UAAUjiS,OAC1Bj3B,SAAU,UAAUtrE,MACpByrc,kBAAmB,UAAUnqd,OAC7BolL,qBAAsB,UAAUgC,KAChClB,cAAe,UAAUlmL,QAG3B,IA+BM24L,EAAqB,CACzBnlF,0BACAC,2B,WAGa,IAAAU,UApCS,SAACxzG,GAAU,MACMA,EAAMqY,YAAtCwpF,EAD0B,EAC1BA,WAAYvpF,EADc,EACdA,iBADc,EAE0DtY,EAAMytB,eAA1FtB,EAF0B,EAE1BA,qBAAsB0pI,EAFI,EAEJA,sBAAuBhoI,EAFnB,EAEmBA,cAAesoI,EAFlC,EAEkCA,qBAC5Dr5I,EAA0B9c,EAAMwc,UAAhCM,uBACAu6O,EAA0Br3P,EAAM+sO,iBAAhCsqB,uBACA1iP,EAAoB3U,EAAM4U,YAA1BD,iBAL0B,EAO0B3U,EAAMouB,wBAA1D0jG,EAP0B,EAO1BA,kBAAmBriG,EAPO,EAOPA,iBAAkBo7L,EAPX,EAOWA,YAK5C,MAAO,CACLhpH,aACAvpF,mBACA6T,uBACA0pI,wBACA/4I,yBACAu6O,yBACA1iP,mBACAm9G,oBACAriG,mBACA+4M,UAdkBxoO,EAAMu1I,gBAAnBizF,UAeL3oN,eAdqB7f,EAAMqN,gBAe3BwgB,gBACAsoI,uBACA00D,cACA/gC,qBAjB6B9pL,EAAMgR,YAA9B84K,wBA0B+BkO,EAAzB,CAA6C+7R,I,8ECnP5D,I,EAAA,O,oCACA,OACA,QAEA,SAIA,IA8BM/7R,EAAqB,CACzBi/D,mBAlCF,OAkCEA,oB,WAGa,IAAAh/D,aACb,IAAAzkF,UAbsB,SAACxzG,GAGvB,MAAO,CACLq3P,uBAH+Br3P,EAAM+sO,iBAAhCsqB,0BAYkBr/D,EAAzB,EAnCsC,SAAChlF,GAAU,IAE1CqkJ,EAA0FrkJ,EAA1FqkJ,uBAAwBl/D,EAAkEnlF,EAAlEmlF,QAAS8+D,EAAyDjkJ,EAAzDikJ,mBAAoBmyN,EAAqCp2W,EAArCo2W,eAAgBgC,EAAqBp4W,EAArBo4W,kBAE5E,IAAKtqd,SAASC,SAAS8mT,oBAAsBxwD,EAC3C,OAAO,KAQT,OACE,kCAAQ/kK,UAAW,qEACd82X,EAAiB,mDAAqD,KACtEgC,EAAoB,sDAAwD,IACzE5mS,QATiB,WACzByyE,EAAmB,EAAAwrB,0BAA0BC,OAC7CvqF,EAAQ17L,KAAK,kB,8HClBjB,O,OACA,O,IACA,M,IAEA,SACA,UACA,QACA,QACA,QACA,QACA,QACA,QAGA,SACA,Q,IACA,OACA,Q,mDAGA,IAAMy3d,EAA0B,SAAClhX,GAAU,IAElC8vS,EAE4E9vS,EAF5E8vS,OAAQr7N,EAEoEz0E,EAFpEy0E,cAAep+F,EAEqD2pB,EAFrD3pB,SAAUmC,EAE2CwnB,EAF3CxnB,WAAYx/D,EAE+BgnF,EAF/BhnF,oBAAqB7jB,EAEU6qG,EAFV7qG,SAAU2jI,EAEA94B,EAFA84B,wBAAyB39G,EAEzB6kF,EAFyB7kF,SAC1G2D,EACiFkhF,EADjFlhF,iBAAkBM,EAC+D4gF,EAD/D5gF,YAAa20C,EACkDisC,EADlDjsC,sBAAuBq+C,EAC2BpS,EAD3BoS,cAAeuD,EACY3V,EADZ2V,sBAAuBnvG,EACXw5F,EADWx5F,mBAC5FswK,EAAiF92E,EAAjF82E,qBAAsBhtK,EAA2Dk2F,EAA3Dl2F,uBAAwB4U,EAAmCshF,EAAnCthF,eAAgBhB,EAAmBsiF,EAAnBtiF,gBAJvB,GAMT,IAAAm4H,WAAS,GANA,qBAMlCsrU,EANkC,KAMxBC,EANwB,KAQnC7wI,GAAY,IAAA57L,UACZohQ,GAAW,IAAAphQ,UACX0sU,GAAiB,IAAA1sU,UACjBG,GAAY,IAAAF,gBAEZ0sU,GAAa,IAAA9qU,UAAQ,WACzB,GAAI2qU,GAAYE,EAAen4W,QAC7B,OAAOm4W,EAAen4W,QAExB,IAAM30G,EAASY,GAAYo7U,EAAUrnO,QACjCqnO,EAAUrnO,QAAQ1C,cAClB,IAAA8pO,mBAAkB,CAACt3T,sBAAqB7jB,WAAUo7U,cAEtD,OADA8wI,EAAen4W,QAAU30G,EAClBA,IAEN,CAACykB,EAAqB7jB,EAAUo7U,EAAUrnO,QAASi4W,IAEhDI,EAAe,WACdzsU,KAGLssU,GAAY,IAGRnrX,EAAW,WACV8/S,IAGLqrE,GAAY,GACZ/qU,aAAa0/P,EAAS7sS,SACtB6sS,EAAS7sS,QAAUr8G,OAAOu2F,WAAWm+X,EAAc,QAGrD,IAAAlrW,YAAU,WAKR,OAJAxpH,OAAO0uD,iBAAiB,SAAU06C,IAC9B,IAAAp9F,oBACFhM,OAAO0uD,iBAAiB,SAAU06C,GAE7B,WACLppG,OAAO+qG,oBAAoB,SAAU3B,IACjC,IAAAp9F,oBACFhM,OAAO+qG,oBAAoB,SAAU3B,MAIxC,KAKH,IAAAogB,YAAU,WACHirW,GACHz0d,OAAO21R,cAAc,IAAIC,MAAM,aAGhC,CAACtnQ,IAEJ,IAcM,EAdA81T,GAAqB,IAAAl8L,cAAY,SAACh9I,GACtC,IAAI,IAAAskN,wBAAuBtkN,EAAS,GAAIyO,EAAoBswK,GAC1D,OAAO,EAETh+C,mBACGh6G,EAAmB,CAClBM,cACAzZ,gBAAiB5N,EACjBiD,OAAQjD,EAAQiD,YAInB,CAAC89H,EAAyBh6G,EAAkBM,IAEzCixX,GAAA,gCAA0B,WAAO/0T,GAAP,kFACxB4lX,GAAgB,IAAA7kP,wBAAuB/gI,EAAgB,GAAI90E,EAAoBswK,IADvD,iCAGtB,IAAAoB,2BAA0BgpR,GAHJ,kDAA1B,6CAOAzvR,EAAuB,WAA2C,IAA1C0wB,EAA0C,uDAA1B,EAAAnuJ,eAAeC,OACrDq9H,EAAkB9qK,EAAmB+qK,YAC3C,UAAU17I,eAAey7I,EAAkB,8BAAgC,cACvE5yJ,EACElY,EAAmBwuC,QAChBlrC,GACH4T,EAAgB,CACdiB,iBAAiB,EACjBwjL,mBAKNzkL,EAAgB,CACdiB,iBAAiB,EACjBwjL,mBAoCN,OACE,+BAAK7iH,UAAU,oBAAoBo1D,IAAK67L,GAhCvB,WAGjB,IAAIziC,GAAoC,IAAAx4L,yCAAwCl2F,EAAaq1J,GACvF+sS,IAAmC7rW,EAAsBv2F,EAAYla,WAC3E,GAAI4oS,GACF,IAAK0zK,EACH,OAAO,+BAAKliY,UAAU,sFAEnB,GAAIm1F,IAAkBA,EAAc3tF,oBACzC,OAAO,+BAAKxH,UAAU,iFAExB,OAAO,mCAAmBmrB,UAAU,EACVrrF,YAAaA,EACb0uR,kCAAmCA,EACnC6iG,cAAe7iG,GAAqC0zK,EACpDpvW,cAAeA,EACf09R,OAAQA,EACRr7N,cAAeA,EACfp+F,SAAUA,EACVk5T,eAAgB+xE,EAChBrwI,mBAAoBA,EAEpB8+D,eAAgBoxE,EAChB1vS,qBAAsBA,EACtBj5F,WAAYA,EACZ63T,wBAAyBA,EACzB57K,aAAc,kBAAM1gK,OAM3C+4Y,KAMPoU,EAAwBtqU,UAAY,CAClCxkC,cAAe,UAAUxE,QAAQ,UAAUt/D,MAAV,yBACjClvB,YAAa,UAAUkvB,MAAV,yBAGf,IA2BM02I,EAAqB,CACzBlsD,kDACA/kE,8CACAr2C,mC,WAGa,IAAA8iF,UAjCS,SAACxzG,GAAU,MACqEA,EAAMqY,YAArGwpF,EAD0B,EAC1BA,WAAYvpF,EADc,EACdA,iBAAkBE,EADJ,EACIA,qBAAsBsZ,EAD1B,EAC0BA,iBAAkB62F,EAD5C,EAC4CA,sBAD5C,EAEmB3oH,EAAMytB,eAAnDtB,EAF0B,EAE1BA,qBAAsBH,EAFI,EAEJA,oBACtBtO,EAAgB1d,EAAMyc,YAAtBiB,aAH0B,EAIQ1d,EAAMgR,YAAxC7I,EAJ0B,EAI1BA,SAAU2hL,EAJgB,EAIhBA,qBACV37J,EAAYnuB,EAAMouB,wBAAlBD,SACA/e,EAAYpP,EAAMqN,gBAAlB+B,SAN0B,EAOgBpP,EAAMwc,UAAhDkV,EAP0B,EAO1BA,eAEP,MAAO,CACLmwE,aACAvpF,mBACAE,uBACAsZ,mBACA3F,uBACAzO,eACAsO,sBACA7jB,WACAgmB,WACAw6F,wBACAnvG,mBAAoBpK,EACpB06K,uBACAhtK,uBAtB+B,EAOVA,uBAgBrB4U,oBAUoCsmK,EAAzB,CAA6Ck8R,I,8EC3M5D,I,EAAA,OACA,QACA,OAEA,O,oCACA,QACA,QAGA,IA6CMl8R,EAAqB,CACzB1sD,2C,WAGa,IAAA2sD,aACb,IAAAzkF,SAAQ,KAAMwkF,EAAd,EAlDqC,SAAChlF,GAAU,IAEzCxxG,EAA2DwxG,EAA3DxxG,SAAU22L,EAAiDnlF,EAAjDmlF,QAASjsL,EAAwC8mG,EAAxC9mG,MAAOo/H,EAAiCt4B,EAAjCs4B,oBAAqB4c,EAAYl1C,EAAZk1C,SAEhDJ,GAAY,IAAAF,gBAsClB,OApCA,IAAAv+B,YAAU,WACRjzB,YAAW,WACT,GAAK0xD,KAAgBtmJ,GAAaA,EAAS+d,SAA3C,CAIA,IAAMk1c,EAAe,UAAM5qd,WACpBmoP,EAAe9lP,EAAMs2G,OAArBwvI,YANQ,EAOkCyiO,EAAap8c,YAAvDyZ,EAPQ,EAORA,iBAAkBtZ,EAPV,EAOUA,qBAGzB,GAAKhX,EAAS+d,SAAS1d,SAAS,aAGhC,IAAKmwP,IAAgBhiP,OAAOC,WAAW+hP,IAAgBlgO,EAAmB,EAGxEw5G,EAAoB,OAHtB,CAOA,IAAMopV,EAAc1iO,EAAc,EAE9BlgO,IAAqB4ic,IAEnBl8c,EAAqBk8c,EAAc,GACrCppV,EAAoBopV,IAEpBppV,EAAoB,GACpB6sD,EAAQ17L,KAAK,oBAGhB,KAEF,CAAC+E,EAAS+d,WAEN2oI,O,4GCnDT,MACA,OACA,Q,IACA,M,IAEA,Q,IACA,SACA,QACA,S,IACA,SACA,U,OACA,QACA,QACA,S,mDAGA,IAAMysU,EAA4B,SAAC3hX,GAAU,IAEpCoiO,EACiFpiO,EADjFoiO,oBAAqBtjT,EAC4DkhF,EAD5DlhF,iBAAkBrZ,EAC0Cu6F,EAD1Cv6F,UAAWoa,EAC+BmgF,EAD/BngF,WAAYs2X,EACmBn2S,EADnBm2S,aAAcrnT,EACKkR,EADLlR,WAAY73F,EACP+oG,EADO/oG,UAC7Fg/Y,EAAsFj2S,EAAtFi2S,eAAgB98X,EAAsE6mF,EAAtE7mF,qBAAsBD,EAAgD8mF,EAAhD9mF,2BAA4BvX,EAAoBq+F,EAApBr+F,iBAE7DsrK,GAAyB,IAAAkd,0BAAyBr7F,GAAlDm+E,sBALoC,GAMZ,aAAuBxnK,EAAWqZ,GAA1Dk9W,EANoC,EAMpCA,SAAU8jF,EAN0B,EAM1BA,WAEb1gc,EAAcS,EAAW,GACzBuiT,GAAuBA,EAAoBhjT,aAAeS,EAAWlrB,MAAK,SAAA0tU,GAAA,OAAaA,EAAU3lU,KAAO0lU,EAAoBhjT,YAAY1iB,QAC1I0iB,EAAcgjT,EAAoBhjT,aAGpC,IAAM,EAAAwic,GAAA,gCAAkB,wFAElBzrE,EAFkB,0CAGb,GAHa,UAKlBh9X,GACFD,EAA2B,OAEzB+8X,EARkB,iCASd,IAAA99N,oBAAmBrpF,EAAYrpF,EAAW9D,EAAkByd,EAAcA,EAAY1iB,GAAK,MAT7E,wCAatBuwK,EAAsBxnK,EAAWqpF,GAbX,kDAAlB,4CAgBAq/J,GAAW,IAAA9mF,oBAAmBjoJ,GAE9B9N,EAAe8N,GAAc,IAAA+vE,gCAA+B/vE,GAAe,KAC3EyuI,EAAW/uI,IAAqBrZ,IAAcwwY,EAE9C4rE,GAAoB,IAAA1/I,6BAA4BC,EAAqB9wT,EAAcra,EAAW0K,EAAkBke,GAEtH,OAGE,kCAAQy/D,UAAW,gCAAkCuuE,EAAW,uCAAyC,KACpGsoP,EAAe,yCAA2C,KAC1D7kY,EAAe,iCAAmCA,EAAatW,OAAS,IACrE+pb,YAAWt/a,EAEX+rK,QAASowS,GACd3rE,EAAiB,KAChB,+BAAK32T,UAAW,cAAgB08S,GAAY8jF,EAAa,wBAA0B,KACjF,+BAAKxgY,UAAW,qBACd,+BAAKA,UAAU,gCAIrB,+BAAKA,UAAW,qCAAuCuuE,IAAamuO,EAAW,UAAY,KACzF,mCAAoC58W,YAAaA,EACb9N,aAAcA,EACd8wT,oBAAqBA,KAE1Dy/I,EAAoB,wCAAmC,KACxD,gCAAMviY,UAAU,oCAAoC,UAAK0kF,sBAAsBmqF,EAAU,OAM/FwzN,EAA0B/qU,UAAY,CACpC9nD,WAAY,UAAUxgD,MAAV,uBACZzuB,WAAY,UAAU+tF,QAAQ,UAAUt/D,MAAV,0BAGhC,IAqBM02I,EAAqB,CACzB9rK,yD,WAGa,IAAA+rK,aACb,IAAAzkF,UA1BsB,SAACxzG,GAAU,MACgBA,EAAMqY,YAAhDyZ,EAD0B,EAC1BA,iBAAkBtZ,EADQ,EACRA,qBAClBkF,EAAgB1d,EAAMyc,YAAtBiB,aAF0B,EAGD1d,EAAMgR,YAA/B7I,EAH0B,EAG1BA,SAAUuD,EAHgB,EAGhBA,YACVygB,EAAwBnsB,EAAMytB,eAA9BtB,qBAIP,MAAO,CACLliB,UAJkBjK,EAAM8J,UAAnBG,UAKL6nB,mBAEAi1J,gBAAiBrpK,EACjBlF,uBACArQ,WACAuD,cACAygB,uBACAxX,iBAXyB3U,EAAM4U,YAA1BD,oBAoBkBqjL,EAAzB,CAA6C28R,K,gIC/G/C,O,UAG+B,SAACl8c,EAAWq8c,GAAoB,OAG7B,IAAAjsU,WAAS,GAHoB,qBAGtDmmP,EAHsD,KAG5C+lF,EAH4C,QAIzB,IAAAlsU,WAAS,GAJgB,qBAItDiqU,EAJsD,KAI1CkC,EAJ0C,KAMzDhC,GAAkB,IAAArrU,UA8CtB,OA3BA,IAAAt+B,YAAU,WAgBR,OALI5wG,IAAcq8c,EA3BlB9B,EAAgB92W,QAAU9lB,YAAW,WACnC2+X,GAAY,KACX,KA2BQt8c,IAAcq8c,IAvBzBzrU,aAAa2pU,EAAgB92W,SAC7B64W,GAAY,GACZC,GAAc,GACdhC,EAAgB92W,QAAU9lB,YAAW,WACnC2+X,GAAY,GACZC,GAAc,KACb,MAoBI,WACL3rU,aAAa2pU,EAAgB92W,YAG9B,CAAC44W,IAOG,CAAC9lF,WAAU8jF,gB,8HCvDpB,O,OACA,OACA,OACA,QAEA,QACA,QACA,QAGA,QACA,Q,IAGA,S,IACA,SACA,Q,IACA,OACA,S,IAKA,SACA,S,IACA,SACA,QACA,QACA,SACA,QACA,U,mDAGA,IA2UM96R,EAAqB,CACzBlsD,kDACAnxG,sCACAzO,wDACA0F,sBACAkC,sCACAe,kCACA+4G,6D,WAGa,IAAAqqD,aACb,IAAAzkF,UA7CsB,SAACxzG,GAAU,MACsEA,EAAMqY,YAAtGwpF,EAD0B,EAC1BA,WAAYvpF,EADc,EACdA,iBAAkBwZ,EADJ,EACIA,iBAAkBtZ,EADtB,EACsBA,qBAAsBgzH,EAD5C,EAC4CA,uBAD5C,EAEoDxrI,EAAMytB,eAApFtB,EAF0B,EAE1BA,qBAAsBH,EAFI,EAEJA,oBAAqBc,EAFjB,EAEiBA,sBAAuBmpI,EAFxC,EAEwCA,SAFxC,EAGsBj2J,EAAM8J,UAAtDG,EAH0B,EAG1BA,UAAW4uK,EAHe,EAGfA,oBAAqB/jJ,EAHN,EAGMA,aASvC,MAAO,CACL+sE,aACAvpF,mBACAwZ,mBACAtZ,uBACA2T,uBACAzO,aAdqB1d,EAAMgR,YAAtB0M,aAeLzT,YAAW4uK,sBACX7sJ,sBACAijM,oBAhB4BjvN,EAAMgvN,qBAA7BC,oBAiBLz1M,mBAhBiBxZ,EAAMqN,gBAAlB+B,SAiBL0d,wBACArH,iBAjByBzlB,EAAMgsL,QAA1BvmK,iBAkBLwwI,WACAhnI,aAlBqBjvB,EAAMouB,wBAAtBa,aAmBL6F,eACAngB,iBAnByB3U,EAAM4U,YAA1BD,iBAoBL62H,yBACAgX,wBApBgCxiJ,EAAMu1I,gBAAjCiN,2BAmCkBw1C,EAAzB,EACE,cAvViC,SAAChlF,GAAU,IAEvC16F,EAIgG06F,EAJhG16F,iBAAkBwZ,EAI8EkhF,EAJ9ElhF,iBAAkBtZ,EAI4Dw6F,EAJ5Dx6F,qBAAsBszH,EAIsC94B,EAJtC84B,wBAAyB78G,EAIa+jF,EAJb/jF,aAAckpK,EAIDnlF,EAJCmlF,QACtGhsK,EAGqG6mF,EAHrG7mF,qBAAsBzO,EAG+Es1F,EAH/Et1F,aAAczT,EAGiE+oG,EAHjE/oG,UAAW0wB,EAGsDq4E,EAHtDr4E,kBAAmB7G,EAGmCk/E,EAHnCl/E,kBAAmBe,EAGgBm+E,EAHhBn+E,gBACrF7I,EAEqGgnF,EAFrGhnF,oBAAqBE,EAEgF8mF,EAFhF9mF,2BAA4B+iM,EAEoDj8G,EAFpDi8G,oBAAqBz1M,EAE+Bw5F,EAF/Bx5F,mBAAoB7E,EAEWq+F,EAFXr+F,iBAC1FkkK,EACqG7lE,EADrG6lE,oBAAqBjnJ,EACgFohF,EADhFphF,UAAWw3X,EACqEp2S,EADrEo2S,eAAgBE,EACqDt2S,EADrDs2S,2BAA4B7jY,EACyButF,EADzBvtF,iBAAkBqP,EACOk+E,EADPl+E,aAC9FhI,EAAqGkmF,EAArGlmF,sBAAuBmpI,EAA8EjjD,EAA9EijD,SAAUp0D,EAAoEmR,EAApEnR,WAAY2pC,EAAwDx4B,EAAxDw4B,uBAAwBoC,EAAgC56B,EAAhC46B,6BAEjExoB,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GACrE4Z,EAAcgzF,EAAc,GAC5BqtW,EAAsC,IAAxBzmc,EAEbi0J,IAAyB,IAAAkd,4BAAzBld,sBAEP,IAAK7tJ,EACH,OAAO,KAGT,IAgEM,GAcA,GAKA,GAYA,GA/FA6ic,GAAkB,WACtB,IAAMC,GAAe,IAAA/0S,uBAAsB7nK,EAAkBwZ,EAAkBtZ,EAAsBvO,EAAW0K,GAChHsrK,GAAsBi1S,IAGlBC,GAA0C38c,EAAqBsZ,KACnEM,EAAY8vE,WAAa,EAAAkhB,mBAAmBuG,QACtCnxG,EAAqBsZ,GAAkBM,aACrC5Z,EAAqBsZ,GAAkBM,YAAY1iB,KAAO0iB,EAAY1iB,KACvE01G,EAAcz9G,MAAK,SAAAytd,GAAA,OAAYA,EAAS1ld,KAAO8I,EAAqBsZ,GAAkBM,YAAY1iB,OAEnG8I,EAAqBsZ,GAAkBM,aACrC5Z,EAAqBsZ,GAAkBM,YAAY1iB,KAAO0iB,EAAY1iB,MAAQ0iB,EAAY0xF,eACxF1xF,EAAY0xF,aAAan8G,MAAK,SAAA0td,GAAA,OAAMA,EAAG3ld,KAAO8I,EAAqBsZ,GAAkBM,YAAY1iB,QAIvG43U,GAAc,WAElB,GADAguI,MACK98c,EAAqBsZ,IAAqBqjc,GAAyC,CACtF,IAAM7wc,GAAe,IAAA69E,gCAA+B/vE,GAChD9N,GAAgBA,EAAauJ,gBAC1BrV,EAAqBsZ,KAAsB11B,OAAOmc,KAAKC,GAAsB7Q,MAAK,SAAAzI,GACrF,OAAOsZ,EAAqBtZ,IAAQsZ,EAAqBtZ,GAAK8O,QACxDwK,EAAqBtZ,GAAK8O,SAAWsW,EAAatW,aAE1D,IAAA0rF,gBAAep1E,EAAauJ,eAC5B8M,KAEFmxG,mBACGh6G,EAAmB,CAClBM,iBAIN6ic,MAQIK,GAA2B,WACV,cAAjBxgc,GACFD,EAAgB,cAId2yT,GAAY,WAEhB,GADA8tI,MACK98c,EAAqBsZ,IAAqBqjc,GAC7C7tI,UACK,IAAKn7T,GAAwB3T,EAAqBsZ,GAAkBnZ,gBAAiB,CAC1F,IAAMA,GAAkB,IAAA8qU,mCAAkCjrU,EAAqBsZ,GAAkBnZ,iBACjGuT,EAA2BvT,QAEvBwT,GACFD,EAA2B,MAE7B+oc,MAIExD,IAAA,iCAAwB,iGAC5B6D,KACM1yc,GAAS,IAAAC,oBAFa,SAGtBD,EAAO23E,qBAHe,OAIxBpuE,GACFD,EAA2B,MAEzB+iM,EACF92B,EAAQ17L,KAAK,EAAAwgB,OAAOkwF,cAEpB8nX,KAV0B,kDAAxB,6CAcA1D,IAAA,iCAAwD,WAAOrhS,EAAiBY,GAAxB,8FACZ,IAAAD,gCAA+BX,EAAiBY,GADpC,cACtD4gS,EADsD,gBAEtD9/b,EAAU,CAAC8/b,IAF2C,uBAGtDD,KAHsD,kDAAxD,gDAKAD,IAAA,iCAA2C,WAAOz+b,EAAaD,GAApB,8EAC/CgB,EAAkB13B,OAAO+2B,OAAO,GAAIJ,EAAaD,IADF,SAEzC2+b,KAFyC,kDAA3C,gDAYAL,IAAA,iCAAyB,kHACzBhoE,IADyB,0CAEpB,GAFoB,WAIzBvwO,EAJyB,wBAMrBlgK,EAAkBwT,GAAwB3T,EAAqBsZ,GAAkBnZ,gBACnF6M,EAAc2G,EAAuBW,EAAwB,EAC7DmpI,EAAS95J,QAAUqc,EAAqBsZ,GAAkBnZ,iBAC5Ds9I,EAASnwJ,SAAQ,SAAAuN,GACXA,EAAMtF,YAAY1C,UAAUqE,KAAO8I,EAAqBsZ,GAAkBnZ,gBAAgBtN,UAAUqE,KACtG8V,EAAcnS,EAAMxC,aAI1BijB,EAAkB13B,OAAO+2B,OAAO,GAAI0lJ,EAAqB,CACvDhoK,SAAU2U,EACVzX,YAAa4K,KAET4wY,EAAsBD,EAA2B3wY,GAnB5B,WAoBA,IAAAg3K,8BAA6B45N,GAAqB,GApBlD,aAoBrBh3X,EApBqB,QAsBVp2B,OAtBU,kCAuBnBy1B,EAAUW,GAvBS,YA0BzB0jI,EAAS95J,OA1BgB,wBA2BvBo5d,EAAW18S,EAAsB5iB,EAASvnJ,QAAO,SAAA2E,GACnD,OAAOA,EAAMtF,YAAY1C,UAAUqE,KAAO8I,EAAqBsZ,GAAkBnZ,gBAAgBtN,UAAUqE,MACxGumJ,EACL,UAAUptH,eAAe,sBA9BE,WA+BA,IAAA8mJ,8BAAA,wBAAiC4lS,EAAS7md,QAAO,SAAA29c,GAE1E,cADOA,EAAMC,oBACND,EAAMx7c,eACV,GAlCsB,eA+BrB0hB,EA/BqB,iBAmCrBX,EAAUW,GAnCW,YAqCzBsmJ,EArCyB,wBAPF03F,EA6CL,mBA5CtB,UAAU1nO,eAAe0nO,IACV,IAAA1tP,oBACR03E,qBACP49F,EAAQ17L,KAAK,EAAAwgB,OAAOkwF,cAGS,8BAyCxB30F,EAAqBsZ,GAzCG,iBA0CvB3F,GACFD,EAA2B,MAE7Bo7T,KA7C2B,8BA+CrB3uU,EAAkBwT,GAAwB3T,EAAqBsZ,GAAkBnZ,mBAC9D85c,GAAgBtmc,GAhDd,wBAiDnBzG,GAAiB,IAAAJ,mBACrB3M,EACAwT,EACIW,GAAyB,EACzBnU,GAAmBA,EAAgBtN,UAAU6rI,iBAAkE,IAA9Cv+H,EAAgBtN,UAAU6rI,gBACzFv+H,EAAgBtN,UAAU6rI,gBAC1B,EACNzxH,GAEI8jY,EAAsBD,EAA2B3wY,EAAiB,CAAC+M,IA1DhD,WA8DE,IAAAiqK,8BAA6B45N,GAAqB,GA9DpD,WA8DnBh3X,EA9DmB,SA+DnB++b,GAAoB,IAAA3gS,+CAA8Cp+J,IA/D/C,wBAiEvB,IAAAqlJ,oBAAmB,EAAAvwH,kBAAkBO,yCAA0C,CAC7EsxM,cAAeq4N,GAAsDpyd,UAAtD,EAAiEozB,EAAa,GAAI++b,GACjGh4E,gBAAiBk4E,GAAyCryd,UAAzC,EAAoDmyd,EAAmB/+b,EAAa,MAnEhF,4CAuEnBX,EAAU23X,GAvES,yBAyErBkoE,KAzEqB,kCAPH,IAAClhN,IAOE,cAAzB,6CA+EAilN,GAF+C,IAAzBpwW,EAAcjpH,QAEWi2B,EAAY8vE,WAAa,EAAAkhB,mBAAmBzlG,MAE3F83c,GAAwBjqV,EAAuBrvI,QAAUqd,EAAmBsf,SAI5E2uT,GAFc31T,GAAoB,IAEJ2jc,KAA0Brjc,EAAY+1F,aAAgB3uG,EAAmBsf,UAAY7uB,EAAUtC,MAAK,SAAAmG,GAEtI,OAAOA,EAASoC,eAAiByE,GAC1B7G,EAASsK,oBAAsBga,EAAY1iB,IAC3C5B,EAASkkB,eAAiB1Z,EAAiB5I,IAC3C5B,EAASokB,iBAAmBJ,MAOjC4jc,IAAsBl8c,EAAmBsf,WACpC28b,KAA0Brjc,EAAY24H,kBAAoB3lC,EAAcjpH,OAAS,IAAOgwB,IAAyBsmc,GAEtHkD,IAAc,EACdrxc,GAAe,KACfsxc,IAAqBp9c,EAAqBsZ,IAAqBqjc,GAEnE,GAAIS,IAAqBJ,GAAsB,CAC7Clxc,IAAe,IAAA69E,gCAA+B/vE,GAC9C,IAAMu6D,IAAW,IAAA+5B,0BAAyBluG,EAAsBsZ,EAAkBxZ,EAAkB8Z,EAAa9N,GAAc5G,GAC/Hk4c,KAAsBjpY,GAASxwF,OAC/Bw5d,KAAgBhpY,GAASxwF,OACrBmoB,IAAgBA,GAAaw1E,sBAAwB67X,KACvDD,IAAqB,GAIzB,IAAMG,GAAgB1pc,GAAwB0sJ,EAExCi9S,GAAmBt8c,EAAmBsf,WAAa28b,MAChDnxc,IAAgBA,GAAaw1E,sBAAwB67X,MACtDvjc,EAAY24H,iBAAmB5+H,GAAwBsmc,IAAyC,IAAzBrtW,EAAcjpH,OAEvF45d,GAAoBD,KAAqB3pc,IAAyBsmc,GAClEx8T,EAAS95J,QAAU85J,EAAS1wJ,OAAM,SAAAywd,GAAA,OAAYA,EAAQnld,cACxDuhB,EAAY24H,mBACRvyI,EAAqBsZ,KAAsBtZ,EAAqBsZ,GAAkBnZ,kBAG1F,OACE,+BAAK25E,UAAU,4BACXxgE,GAAoB,GAAKszF,EAAcjpH,OACvC,wCACE,mCAA2BshH,UAAU,IACpCtxF,IAAyB7c,MAAMC,QAAQsyF,IAAeA,EAAWnzF,QAAO,SAAAozF,GAAA,QAAe,IAAAyf,kBAAiBzf,EAAY7yE,MAAe9yB,OAAS,EACzI,KACA,wCACH8yN,IAAwBwmQ,GAAwB,KAC/C,wCACGhuI,KAAgBt7T,EACf,kCAAQmmE,UAAW,0EACXkyF,QAAS8iK,IACf,4CAAkB53U,GAAG,mCAErB,KACH+3U,KAAgBiuI,IAAsBvpc,GAAwB3S,EAAmBsf,SAChF,kCAAQw5D,UAAW,0EACXkyF,QAASgjK,IACf,4CAAkB93U,GAChByc,EAAuB,gCAAkC,mCAG3D,KACHupc,GACC,kCAAQpjY,UAAW,wDACdsjY,GAAoB,oBAAsB,uCACvCprY,SAAUorY,GACVpxS,QAASgjK,IACf,4CAAkB93U,GAAI,mCAEtB,KACHomd,GACC,kCAAQxjY,UAAW,8DACdyjY,GAAoB,oBAAsB,uCACvCvrY,SAAUurY,GACVvxS,QAAS4sS,IACf,4CAAkB1hd,GAAImmd,GAAgB,sCAAwC,wCAE9E,KACHJ,GACC,kCAAQnjY,UAAW,uEACXkyF,QAAS,kBAAM52C,GAA6B,KAClD,4CAAkBl+H,GAAI,oBAEtB,MAGPu/M,GAAuBz1M,EAAmBsf,WAAa28b,GACtD,mCAAmCrE,uBAAwBA,KACzD,MAEJ,Y,6FCpUV,O,OACA,OACA,O,IAEA,Q,IACA,QAEA,QACA,QACA,Q,OACA,SACA,Q,mDAGA,IA4FMp5R,EAAqB,CACzB7sD,2C,WAGa,IAAA33B,UAjBS,SAACxzG,GAAU,MACMA,EAAMqY,YAI7C,MAAO,CACLwpF,WAN+B,EAC1BA,WAMLvpF,iBAP+B,EACdA,iBAOjB+P,YANoBroB,EAAMgR,YAArBqX,YAOL4G,aANqBjvB,EAAMgR,YAAtBie,gBAc+B+oK,EAAzB,EAhGuB,SAAChlF,GAAU,IAExC16F,EAA2D06F,EAA3D16F,iBAAkBupF,EAAyCmR,EAAzCnR,WAAYx5E,EAA6B2qF,EAA7B3qF,YAAa4G,EAAgB+jF,EAAhB/jF,aAFH,GAGnB,IAAA45H,WAAS,GAHU,qBAGxCzwC,EAHwC,KAGhC02N,EAHgC,KAKzCwgH,GAAkB,IAAA3nS,UAElBsuU,GAAmB,IAAAz0W,sBAAqB3f,EAAY5yE,GAEpD81J,EAAuB,WAC3B+pJ,GAAW12N,KAGb,IAAAgwC,iBAAgBknS,GAAiB,WAC3Bl3U,GACF2sE,OAIJ,IASMwB,EAAiBnuE,EAAS,CAAE7wG,OAAO1H,OAAO+xD,YAAc,IAAO,GAKrE,OAJIwmD,IACFmuE,EAAeh/K,OAAU8gB,EAAc,KAAOxoB,OAAO+xD,YAAc,IAAO,IAAM/xD,OAAO+xD,YAAc,IAIrG,+BAAK0gC,UAAU,mCAAmCo1D,IAAK4nS,GACrD,+BAAKh9V,UAAW,cAAgB8lB,EAAS,sBAAwB,KAC/D,+BAAK9lB,UAAW,oBAAqBkyF,QAASO,GAC5C,gCAAMzyF,UAAW,2BACf,4CAAkB5iF,GAAG,6CAEvB,gCAAM4iF,UAAW,2BACdh6E,EAAiBna,OAGtB,+BAAKm0F,UAAW,uBAAwBv2E,MAAOwqK,GAC7C,8BAAIj0F,UAAW,6BACZ2jY,EAAiBzmd,KAAI,SAACsyF,GACrB,IAAM++D,EAAW/+D,EAAWpyF,KAAO4I,EAAiB5I,GAC7C+8G,EAAoC3qB,EAApC2qB,eAAgB49B,EAAoBvoD,EAApBuoD,iBACjBsoB,EAAalmD,GAAkB49B,EAIrC,OACE,8BAAInrJ,IAAK,WAAW4iG,EAAWpyF,GAC3B80K,QAAS,kBApCH,SAAC1iF,GACvBpiG,QAAQ4B,IAAI,aAAcwgG,GAC1B,UAAUj5D,eAAe,EAAAsB,oBAAoBC,wBAA0B03D,EAAWpyF,IAC9EoyF,EAAWpyF,KAAO4I,EAAiB5I,KACrC,IAAAy7K,oBAAmBrpF,GAErBijF,IA8B+B2vN,CAAgB5yS,IAC/B/lF,MAAO,CACLy3E,uBAAwBm/E,EAAxB,KAEFrgF,UAAW,yEACLqgF,EAAkE,GAArD,qDACd9R,EAAW,0CAA4C,KAC5D8R,EAIE,KAHF,uCACE,yCAGJ,gCAAMrgF,UAAU,uCAAuCwP,EAAW3jG,kB,8ECjFpF,I,IAAA,MACA,OACA,OACA,Q,IACA,MAEA,QACA,Q,IACA,S,IACA,OACA,Q,mDAGA,IAAM+3d,EAAoC,SAACljX,GAAU,IAE5C44R,EAC4C54R,EAD5C44R,0BAA2BzzM,EACiBnlF,EADjBmlF,QAAShsK,EACQ6mF,EADR7mF,qBAAsB2H,EACdk/E,EADcl/E,kBAAmBjG,EACjCmlF,EADiCnlF,cAAeu7X,EAChDp2S,EADgDo2S,eACjGt8X,EAAiDkmF,EAAjDlmF,sBAAuBskc,EAA0Bp+W,EAA1Bo+W,uBAEnBzhY,EAAuBxjE,GAAwB0B,EAC/C28D,GAAYmF,EAiClB,OACE,kCAAQ2C,UAAW,6CACd9H,EAAW,oBAAsB,uCAC9BA,SAAUA,EACVg6F,QA5Be,WACvB,GAAIh6F,EACF,OAAO,EAET,IAX2B+lL,EAWrB1/P,EAAWsb,EACbW,GAAyB,EACzB8+W,EAA4BA,EAA0B/6X,SAAW,EACrE,GAAIu4Y,IACF,OAAO,EAELxd,GAGF93W,EAAkB13B,OAAO+2B,OAAO,GAAIy4W,EAA2B,CAC7D/6X,WACA9C,YAAa4hF,KAtBU4gL,EAwBL,+BAvBtB,UAAU1nO,eAAe0nO,IACV,IAAA1tP,oBACR03E,qBACP49F,EAAQ17L,KAAK,EAAAwgB,OAAOkwF,gBAsBlBikX,EAAuBzhY,EAAsB9+E,EAAU,gCACvDsnL,EAAQ17L,KAAK,EAAAwgB,OAAOkwF,iBASpB,4CAAkBz9F,GAAG,oCAM3Bwmd,EAAkCtsU,UAAY,CAC5CwnU,uBAAwB,UAAU3qS,MAGpC,IAYMuR,EAAqB,CACzBlkK,uC,WAGa,IAAAmkK,aACb,IAAAzkF,UAjBsB,SAACxzG,GAAU,MACoCA,EAAMytB,eAApEtB,EAD0B,EAC1BA,qBAAsB0B,EADI,EACJA,cAAef,EADX,EACWA,sBAG5C,MAAO,CACLX,uBACAy/W,0BAJkC5rY,EAAMgvN,qBAAnC48K,0BAKL/9W,gBACAf,2BASuBkrK,EAAzB,EACE,aAAgCk+R,M,0HCrFpC,O,OACA,O,IACA,S,IACA,SACA,Q,IACA,SACA,QACA,U,IACA,SACA,S,uDAEMC,E,2NAGEzud,KAAKsrG,MAAM7kF,UACbzmB,KAAKsrG,MAAM9kF,8BAA6B,GAErCxmB,KAAKsrG,MAAM24R,oBACd,IAAAzwQ,gBAEExzH,KAAKsrG,MAAM44R,2BACblkY,KAAKsrG,MAAMghS,6BAA6B,MAEtCtsY,KAAKsrG,MAAMnzF,eAAezQ,SAASC,UAAY3H,KAAKsrG,MAAMl2F,wBACxDhc,SAASC,SAAS2b,WACpBhV,KAAKsrG,MAAM2iG,4BAA2B,EAAM,e,+BASzC,MACqCjuM,KAAKsrG,MAA1CnzF,EADA,EACAA,eACP,OAFO,EACgBqzF,kBACA/2G,QAAW0jB,EAAe8gQ,SAI/C,wCACGj5Q,KAAKsrG,MAAM3qF,YAAc,IAAM,wCAAyB,wCACzD,wCACCxI,EAAezQ,SAASC,QAAU,wCAAgC,MAN/D,S,gBAyBN2oL,EAAqB,CACzB9pK,4DACA8lX,4DACAr+L,yD,WAGa,IAAAniG,UAnBS,SAACxzG,GAAU,IAC1B8c,EAA0B9c,EAAMwc,UAAhCM,uBACP,MAAO,CACLuL,YAAaroB,EAAMgR,YAAYqX,YAC/B6qF,kBAAmBlzG,EAAMgR,YAAYkiG,kBACrC/kF,SAAUnuB,EAAMouB,wBAAwBD,SACxCtO,eAAgB7f,EAAMqN,gBACtBs+X,kBAAmB3rY,EAAMsS,oBAAoBq5X,kBAC7CC,0BAA2B5rY,EAAMgvN,qBAAqB48K,0BACtD9uX,4BAUoCk7K,EAAzB,CAA6Cm+R,I,8HCpE5D,MACA,OACA,Q,IACA,OAEA,Q,IACA,S,IACA,S,IACA,SAEA,QAIA,Q,IAEA,O,IACA,S,IACA,Q,IACA,SACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAGMC,E,YAEJ,WAAYpjX,IAAO,gGACXA,IADW,SAoDnBqjX,gBAAkB,WAChB,IAAMnuK,EAAgB,EAAKouK,aAAa3nT,UAAY,IACpD,EAAKqW,SAAS,CACZkjI,kBAGEA,GAAiB,EAAKl1M,MAAMr+E,oBAC9B,EAAK4hc,yBAA0B,GAEG,IAAhC,EAAKD,aAAa3nT,WAAmB,EAAK4nT,0BAC5C,EAAKA,yBAA0B,EAC/B,EAAKvjX,MAAMt+E,iBAAgB,KA/DZ,EAmEnBm+N,aAAe,WACR,EAAK7/I,MAAMrhF,kBACd03H,aAAa,EAAK0/P,UAClB,EAAKA,SAAW3yT,WAAW,EAAK4uX,sBAAuB,OAtExC,EA0EnBA,sBAAwB,WACtB,EAAKhgS,SAAS,CACZkrN,gBAAiBrwY,OAAO+xD,YAAc9wD,SAAS6C,KAAKgrK,aA5ErC,EAgFnBmhP,cAAgB,WACd,UAAUjnX,eAAe,2BACzB,EAAKm8I,SAAS,CACZkjI,eAAe,IAEjB,EAAKl1M,MAAMt+E,iBAAgB,IArFV,EAwFnB8hc,gBAAkB,SAACC,EAAiBC,GAClC,UAAU7tb,eAAe,sBACzB,EAAKm8I,SAAS,CACZyxS,kBACAC,eAGF,IAAMC,GAAmB,gDAAqCD,EAAW1yd,cAAcqC,QAAQ,IAAK,KAA3E,MACzB,GAAIswd,EAAkB,CACpB,IAAMC,GAAgB,aAAE,EAAKN,cACvBrlG,EAAW2lG,EAAcjoT,YAAcgoT,EAAiBr6Y,SAAS1vE,IAAM,IAAM,EAAKomG,MAAMr+E,kBAAoB,GAAK,GAGvHiic,EAAc1hY,QAAQ,CAACy5E,UAAWsiN,GAAW,OArG9B,EAyGnBxnJ,OAAS,WACP,OAAQ,EAAKz2H,MAAMl+E,cACjB,IAAK,aACH,EAAKk+E,MAAM9kF,8BAA6B,GACnCruB,OAAO2B,SAASC,KAAKI,SAAS,eACjC,EAAA+3B,YAAYn9B,KAAK,cAEnB,MACF,IAAK,aACY,IAAAomB,oBACRa,cAAe,IAAAynM,qBAAsB,EAAAvxL,YAAYn9B,KAAK,aAC7D,EAAKu2G,MAAMxnF,uBAAsB,EAAM,EAAKwnF,MAAMrtF,gBAClD,MAEF,IAAK,eACL,QACE,EAAAiU,YAAYn9B,KAAK,gBAGrB,EAAKu2G,MAAMn+E,gBAAgB,KA5HV,EA+HnBg7X,qBAAuB,WACrB,UAAUhnX,eAAe,mCACzB,EAAKmqE,MAAM19E,kBAAiB,IAjIX,EAoInBm0b,qBAAuB,SAACoN,EAAgBz1E,EAAyBiN,GAC/D,OAAIwoE,EACK,KAELz1E,EACK,mCAAqBiN,cAAeA,EAAelmZ,UAAU,IAE/D,yCAzIP,EAAKmud,aAAe,KACpB,EAAK7nd,MAAQ,CACXy5S,eAAe,EACfwuK,WAAY,GACZD,gBAAiB,EACjBvmF,gBAAiB,GAEnB,EAAKqmF,yBAA0B,EATd,E,oFAYC,WAClBz1d,SAAS6C,KAAKC,UAAUC,IAAI,mBASvB6D,KAAKsrG,MAAMr+E,mBACdjtB,KAAK4ud,aAAa/na,iBAAiB,SAAU7mD,KAAK2ud,kBAEhD,IAAAxqd,oBACF,CAAC,SAAU,UAAU/F,SAAQ,SAACjI,GAC5BgC,OAAO0uD,iBAAiB1wD,EAAG,EAAKg1P,iBAGpCnrP,KAAKmrP,iB,6CAGgB,YACjB,IAAAhnP,oBACF,CAAC,SAAU,UAAU/F,SAAQ,SAACjI,GAC5BgC,OAAO+qG,oBAAoB/sG,EAAG,EAAKg1P,iBAGvC/xP,SAAS6C,KAAKC,UAAU27K,OAAO,mBAC/B73K,KAAK4ud,aAAa1rX,oBAAoB,SAAUljG,KAAK2ud,mB,+BAuG9C,WAGD9Q,EADgB79c,KAAKsrG,MAAM3qF,aAAe,KAAS3gB,KAAKsrG,MAAM3qF,YAAc,MAAQ,IAAAxc,mBAC/C,CAACtE,OAAQG,KAAK+G,MAAMyhY,iBAAmB,GAE5E12X,EAAqB9R,KAAKsrG,MAAMx5F,mBAGhCguS,GAFqBhuS,EAAmBiuS,kBACxC3mT,SAASC,SAAS2b,WAAalD,EAAmBkuS,oBACRhgT,KAAKsrG,MAAM/jG,SAAS9S,UAC7DuL,KAAKsrG,MAAM4+L,wBAA2BlqS,KAAKsrG,MAAM8+L,wBAA0B,IAC7EpqS,KAAKsrG,MAAM/jG,SAAStH,MAAK,SAACusS,GAAD,OAAeA,EAAUtgL,SAASjsH,MAAK,SAAAksH,GAAA,OAAYA,EAAQugL,yBAErFi6G,EAAgB,GAChBjN,EAA0B5nY,EAAmB4nY,wBAC7CA,IAEFA,GADAiN,EAAgB3mZ,KAAKgpU,0BACmBv0U,OAAS,GAGnD,IAAMs3Q,EAAkB/rQ,KAAKsrG,MAAM/oG,UAAU9N,OAnBtC,EAoB4DuL,KAAKsrG,MAAjEilE,EApBA,EAoBAA,iBAAkBg3C,EApBlB,EAoBkBA,oBAAqBn9F,EApBvC,EAoBuCA,kBAExC+8R,EAAqBnnZ,KAAKsrG,MAAM24R,mBAAqBjkY,KAAKsrG,MAAM5gG,iBAAiBjW,SACjF2E,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAEvD,OACE,+BAAK21E,UAAW,SAAW+7T,EAAclyZ,OAAS,wBAA0B,KACzE8yN,IAAwBh3C,EAAmB,qCAAuC,IAChFl8J,MAAOwpc,GACV,+BAAKjzX,UAAU,cACb,+BAAKA,UAAW,oBAAsBw/B,EAAoB,8BAAgC,KACxF,wCACA,wCACCpqH,KAAK+hd,qBAAqB33V,EAAmBsvR,EAAyBiN,IAEzE,+BAAK/7T,UAAU,qBACb,mCAA0B41N,cAAexgT,KAAK+G,MAAMy5S,gBACpD,+BAAK51N,UAAW,iBAAoBmhL,GAAoBx7F,EAA6C,GAA1B,yBACtEvwB,IAAK,SAACksG,GAAD,OAAQ,EAAK0iO,aAAe1iO,IACnC37E,EAAmB,wCAAY,KAC/BuvI,IAAsBvvI,EACnB,mCAAkCtjJ,kBAAmBjtB,KAAKsrG,MAAMr+E,kBAC9Bm7X,cAAepoZ,KAAKooZ,cACpBD,qBAAsBnoZ,KAAKmoZ,uBAC7D,KACH53O,EAAmB,KAAO,0CAC1Bw7F,GAAmBj6P,EAAmBkhT,mBAAqBlhT,EAAmBmhT,mBAC3E1iJ,GAAsBvwK,KAAKsrG,MAAM4+L,wBAAiE,IAAtClqS,KAAKsrG,MAAM8+L,uBAEvE,KADA,2CAKV,mCAAoBu8G,cAAe,GAAIjN,yBAAyB,IAM/D55F,EAAoB,wCAAc,KAClCqnG,EAAqB,wCAAwB,U,yBAgCvC,IAAAr7S,UA1BS,SAACxzG,GAAU,MAC2DA,EAAM8J,UAA3FG,EAD0B,EAC1BA,UAAW0qB,EADe,EACfA,kBAAmBG,EADJ,EACIA,aAAcwlP,EADlB,EACkBA,oBAAqBriG,EADvC,EACuCA,iBADvC,EAEKj4K,EAAMouB,wBAArC0jG,EAF0B,EAE1BA,kBAAmB3jG,EAFO,EAEPA,SAC1B,MAAO,CACLlkB,YACAgF,SAAUjP,EAAMkP,UAAUD,SAC1B0lB,oBACAhP,eAAgB3lB,EAAMytB,eAAe9H,eACrCmP,eACAzM,YAAaroB,EAAMgR,YAAYqX,YAC/BsJ,gBAAiB3xB,EAAMwc,UAAUmV,gBACjCD,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxCtD,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1C+e,WACAmsP,sBACAs3B,uBAAwB5xS,EAAMo5B,wBAAwBw4Q,uBACtDE,uBAAwB9xS,EAAMo5B,wBAAwB04Q,uBACtD75H,mBACAg3C,oBAAqBjvN,EAAMgvN,qBAAqBC,oBAChDn9F,oBACA1/G,iBAAkBpS,EAAMsS,oBAAoBF,iBAC5Cu5X,kBAAmB3rY,EAAMsS,oBAAoBq5X,qBAIT,CACtCj3W,kCACAG,kCACArJ,8CACA0C,4DACAoH,qCALa,CAMZ8gc,I,kICjRH,MACA,OACA,QACA,Q,IAEA,MACA,O,IACA,SAEA,QACA,Q,IAGA,S,IACA,O,IAEA,Q,IACA,QACA,S,IACA,S,IACA,S,IACA,S,IACA,S,uDAEMU,G,6OAOJ5lJ,gBAAkB,WAChB,UAAUroS,eAAe,sBACzB,EAAKkoS,kB,EAGPrgT,gBAAkB,WAChB,UAAUmY,eAAe,4BACzB,EAAKmqE,MAAMtiF,gBAAgB,CAACiB,iBAAiB,K,EAG/Cw/S,qBAAuB,WACrB,UAAUtoS,eAAe,4BACzB,EAAKmqE,MAAM5+E,YACX,EAAAwF,YAAYn9B,KAAK,iB,EAGnBu7K,uBAAyB,WACvB,UAAUnvI,eAAe,uBACzB,EAAKmqE,MAAMglE,wBAAwB,EAAKhlE,MAAMilE,mB,gGAGvC,IACAp4J,EAAkBnY,KAAKsrG,MAAvBnzF,eACDrG,EAAqBqG,EAAezQ,SAFnC,EAGsD1H,KAAKsrG,MAA3Dl2F,EAHA,EAGAA,uBAAwB7N,EAHxB,EAGwBA,SAAUmD,EAHlC,EAGkCA,iBAHlC,EAIkCtR,SAASC,SAA3C2b,EAJA,EAIAA,UAAWC,EAJX,EAIWA,MAAOC,EAJlB,EAIkBA,aACnBvT,GAAa,IAAA+E,iBACfqjH,GAAa,IAAA7oH,wBAAuBS,EAAY+I,GAC9C69H,GAAmBz2H,EAAmBy3T,oBAAsBz3T,EAAmBuD,4BAC9EL,GAAaC,GAASC,KAAkBE,EAG/C,OAFA20G,EAAaA,EAAWjlH,QAAQ,GAG9B,+BAAK8lF,UAAU,gBACb,+BACEA,UAAW,sBAA0B94E,EAAmBk1H,YAAiD,GAAlC,kCACtEl1H,EAAmBk1H,cAAgB7uH,EAAe+uH,mBACjD,+BAAKt8C,UAAU,kCACb,gCAAMA,UAAU,eAAc,4CAAkB5iF,GAAG,sCAClDugI,EACG,gCAAM39C,UAAU,sBAAsBkyF,QAAS98K,KAAKgpB,iBAClD,4CAAkBhhB,GAAG,8CAEvB,gCAAM4iF,UAAU,gBAAe,IAAAl3E,sBAAqB5B,EAAoBi4G,KAE5E,MAON,+BAAKn/B,UAAU,yBACb,+BAAKA,UAAU,+BACb,+BAAKA,UAAU,qCACb,wCACA,wCACA,wCACA,wCACA,kCAAQA,UAAW,2CAChB5qF,KAAKsrG,MAAMilE,iBAAmB,4BAA8B,IACvDuM,QAAS98K,KAAKswK,wBACpB,gCAAM1lF,UAAU,0BACd,4CAAkB5iF,GAAG,6CAGxB8J,EAAmBgwN,cAAgB,mCAAaq5E,YAAY,IAAU,KAEtErpS,EAAmBoxY,qBAAwD,kBAAjCljZ,KAAKsrG,MAAMxxG,SAAS+d,WAAgC,aAAKtQ,GAChG,mCAAei5S,cAAexgT,KAAKsrG,MAAMk1M,gBAAmB,a,gBA1ErEt+J,UAAY,CACjBs+J,cAAe,UAAUp+J,KACzBhtI,uBAAwB,UAAUgtI,KAAKnpC,Y,GAkGrCo2W,GAAqC,IAAA9+R,aAAW,SAAAjlF,GAAA,OAAS,wBAAC8jX,EAA6B9jX,MAEvFglF,EAAqB,CACzB1iK,oCACA5E,kCACAgG,8CACAtC,sBACA4jJ,iD,WAGa,IAAAxkE,UAxBS,SAACxzG,GAAU,MACKA,EAAM8J,UAArCG,EAD0B,EAC1BA,UAAWguK,EADe,EACfA,iBAClB,MAAO,CACLvmJ,eAAgB1xB,EAAMwc,UAAUkV,eAChC5U,uBAAwB9c,EAAMwc,UAAUM,uBACxC7S,YACAgF,SAAUjP,EAAMkP,UAAUD,SAC1B4Q,eAAgB7f,EAAMqN,gBACtB8B,gBAAiBnP,EAAMqN,gBAAgB8B,gBACvCiD,iBAAkBpS,EAAMsS,oBAAoBF,iBAC5C6lK,sBAcoC+f,EAAzB,CAA6C++R,I,8HCxI5D,MACA,OACA,QACA,O,IAEA,OACA,SACA,S,uDAEMC,E,yOAEJC,mBAAqB,WACnB,UAAUpub,eAAe,sBACzB,EAAKmqE,MAAMikJ,mBAAmB,EAAAwrB,0BAA0BC,OACxD,EAAA9oP,YAAYn9B,KAAK,U,gGAIjB,OACE,+BAAK61F,UAAU,qCACb,kCAAQA,UAAU,8BAA8BkyF,QAAS98K,KAAKuvd,oBAC5D,4CAAkBvnd,GAAG,wC,GAZA,UAAM6jG,W,WAyBtB,IAAAC,UANS,SAACxzG,GACvB,MAAO,CACLiK,UAAWjK,EAAM8J,UAAUG,aAIS,CACtCgtP,yCADa,CAEZ+/N,I,kICpCH,MACA,O,IACA,MACA,O,IAEA,SACA,Q,uDAEME,G,6OAOJn6E,oBAAsB,SAAC/pY,GACrB,EAAKmkd,SAASnkd,I,EAGhBmkd,SAAW,SAACnkd,GACV,IAAMlF,EAAW,EAAKklG,MAAMllG,SACtBkvY,EAAYlrY,KAAKyI,MAAOvH,EAASlF,EAAS+C,SAAY,KAAO,IACnE/C,EAASC,YAAY1C,UAAUjB,KAAO4yY,EACtClvY,EAASC,YAAY1C,UAAUm1G,eAAiBw8R,EAChD,EAAKhqS,MAAMl/E,kBAAkBhmB,I,gGAGtB,IACA6/S,EAAcjmT,KAAKsrG,MAAnB26M,WACP,OAAO,mCAAWr7N,UAAW,cACXi+L,aAAa,EACb/yD,SAAU91N,KAAKq1Y,oBACfn+Y,MAAO+uT,Q,GAxBJ,UAAMp6M,W,EAEtBq2C,UAAY,CACjB97I,SAAU,UAAUzO,OAAOshH,WAC3BgtM,WAAY,UAAUrtM,Q,GA+BpB03E,EAAqB,CACzBlkK,uC,WAGa,IAAA27H,aACb,IAAAj8C,UAXsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBASC2qL,EAAzB,CAA6Ck/R,K,wGChD/C,O,OACA,O,IACA,MACA,OAEA,QACA,QACA,Q,IACA,SACA,QACA,Q,mDAEA,IAAME,EAAmB,SAACpkX,GAAU,IAE3BllG,EACyCklG,EADzCllG,SAAUsW,EAC+B4uF,EAD/B5uF,QAASqP,EACsBu/E,EADtBv/E,uBAAwBm/B,EACFogD,EADEpgD,QAASljD,EACXsjG,EADWtjG,GAAIirc,EACf3nW,EADe2nW,cAAe7tD,EAC9B95S,EAD8B85S,kBAAmB3qY,EACjD6wF,EADiD7wF,KAAMtC,EACvDmzF,EADuDnzF,eACrG+sY,EAA8C55S,EAA9C45S,+BAAgCv1S,EAAcrE,EAAdqE,WAC3B/iG,EAAeuL,EAAezQ,SAA9BkF,YAJ2B,GAKF,IAAAu0I,UAAS,IALP,qBAK3Bh4I,EAL2B,KAKjB47Y,EALiB,KAQ9BpqY,EAAO,GACX,GAAIvU,EAAS8kD,QAAS,CACpB,IAAM+5B,EAAWvoE,EAAQlB,KAAKkE,qBAC1BulE,EAASxwF,QAAUwwF,EAAS,GAAGzpE,KAAK7X,UAAUgX,OAChDA,EAAOsqE,EAAS,GAAGzpE,KAAK7X,UAAUgX,WAGpCA,GAAO,IAAAH,gBAAepU,EAASC,YAAaoU,EAAMtC,EAAgBhP,GAGpE,IAAM8wY,EAAwBA,GAAxBA,0CAA8C,OAAQ,eAAgB,uBACtEC,EAAiBv/X,EAAKre,cACtBqpU,EAAiB/4T,IAAgB,EAAAyjC,cAAcC,SACnD2pW,EAAsB9/Y,SAASuiB,EAAQlB,KAAKlV,SAAW,CAAC,KAAM,KAAM,MAAMrG,MAAK,SAAAk6Y,GAAA,OAAMA,IAAOD,MAGxF3tE,EAAiB,SAACC,GACtBu4E,EAAYv4E,GACZ44E,EAAkB54E,KAGpB,IAAA7qN,YAAU,WACR,GAAIv7G,GAAYA,EAASC,YAAa,CACpC,IAAMspd,EAAmBvpd,EAAS2U,oBAAsB3U,EAAS2U,oBAAsB3U,EAAS+C,SAChGojU,EAAeojJ,GAAoB,QAC1Bzka,GACTqhR,EAAe,MAGhB,CAACrhR,EAASljD,EAAIirc,IA8CjB,GAAwB,SAApB7sc,EAASE,SACPF,EAAS8kD,WAAY,IAAA3+C,oBAAmBnG,EAASC,YAAaD,EAAS+C,SAAU/C,EAASgD,gBAAgB,EAAO,MAAM,EAAOhD,EAASoC,eACzI,OAAO,+BAAKoiF,UAAU,8BAI1B,IAAMglY,EAAkBxpd,EAAS8hJ,sBAAwBv4C,EAEzD,OACE,+BAAK/kB,UAAU,6BACZxkF,EAAS6hJ,kBAAoB7hJ,EAAS8hJ,qBAAuB,KAAO,+BAAKt9D,UAAU,YAAYjwE,GAC/FvU,EAAS6hJ,kBAAoB7hJ,EAAS8hJ,qBAAuB,KAC5D,+BAAKt9D,UAAU,WACb,+BAAKA,UAAU,kBACb,iCAAOA,UAAW,0DAA4DglY,EAAkB,sBAAwB,IACjHxkd,KAAK,SACLwvH,IAAI,IAEJ93C,SAAU8sY,EACV14d,MAAOiS,EACPwjU,QAAQ,yBACRzrO,UA5BO,SAACN,GACvB,GAAkB,MAAdA,EAAMppG,KAA8B,MAAdopG,EAAMppG,MAAgBmuU,EAE9C,OADA/kO,EAAM7V,kBACC,GA0BM40I,OAtCO,SAAC/+H,IAChBA,EAAMlqF,OAAOxf,QAClBq1U,EAAe,GACVnmU,EAAS8kD,SACZn/B,EAAuB3lB,EAAU,GAAG,KAmCzB0vN,SAnES,SAAC3/N,GAEzB,GAAIiQ,EAAS6hJ,gBACX,OAAO,EAGT,IAAI/wJ,EAAQ,GAAKf,EAAEugB,OAAOxf,MAE1B,GAAIA,EAAMiD,SAAS,KAAM,CACvB,IAAKwrU,EACH,OAAO,EAELzuU,EAAM6G,MAAM,KAAK,GAAGtJ,OAAS,IAC/ByC,GAASA,EAAM+H,UAAU,EAAG/H,EAAMzC,OAAS,KAI/CyC,GAASA,IAlDC,QAsDRq1U,EADAr1U,EAAkB,IAAVA,EAAc,GAAKA,GAEtBkP,EAAS8kD,SACZn/B,EAAuB3lB,EAAUlP,GAAO,QA8CtC,mCAAoBkP,SAAUA,EAAU8+Y,+BAAgCA,OAOlFwqE,EAAiBxtU,UAAY,CAC3B97I,SAAU,UAAUwzC,MAAV,qBACVwrW,kBAAmB,UAAUrmO,KAAK9lE,WAClCv8F,QAAS,UAAU/kB,OAAOshH,WAC1BisS,+BAAgC,UAAUnmO,KAC1CpvE,WAAY,UAAUyyC,MAGxB,IASMkuC,EAAqB,CACzBvkK,iD,WAGa,IAAAg8H,aACb,IAAAj8C,UAdsB,SAACxzG,EAAOqvP,GAC9B,MAAO,CACLxvO,eAAgB7f,EAAMqN,gBACtBulD,QAASy8L,EAASvhP,SAAS8kD,QAC3BljD,GAAI2/O,EAASvhP,SAAS4B,GACtBirc,cAAetrN,EAASvhP,SAAS+C,YASVmnL,EAAzB,CAA6Co/R,K,4GCrJ/C,MACA,O,IACA,MACA,QAEA,QACA,QACA,QACA,Q,mDAEA,IAAMG,EAAqB,SAACvkX,GAAU,IAE/BllG,EAAqGklG,EAArGllG,SAAU+mB,EAA2Fm+E,EAA3Fn+E,gBAAiBrb,EAA0Ew5F,EAA1Ex5F,mBAAoBuyG,EAAsD/Y,EAAtD+Y,mBAAoB6gS,EAAkC55S,EAAlC45S,+BAExE,GAAI9+Y,EAAS8kD,SAAW9kD,EAAS6hJ,mBAAoB,IAAAjrI,6BAA4B5W,EAASC,YAAayL,GACrG,OAAO,KAGT,IAAM,EAAAg+c,GAAA,gCAA8B,oGAC5B5qE,IAD4B,OAElC/3X,EAAgB,gBAChBk3F,EAAmBj+G,GACnB,EAAA8rB,YAAYn9B,KAAK,QAJiB,kDAA9B,4CAON,OACE,kCAAQ61F,UAAU,4BAA4BkyF,QAASgzS,KAI3DD,EAAmB3tU,UAAY,CAC7B97I,SAAU,UAAUwzC,MAAV,sBAGZ,IAMM02I,EAAqB,CACzBnjK,kCACAk3F,yC,WAGa,IAAAvY,UAXS,SAACxzG,GACvB,MAAO,CACLwZ,mBAAoBxZ,EAAMqN,gBAAgB+B,YASN4oL,EAAzB,CAA6Cu/R,I,8EC7C5D,W,OACA,O,IACA,MACA,OAEA,QACA,QACA,QACA,SACA,Q,mDAEA,IAAME,EAAgB,SAACzkX,GAAU,IAExBllG,EAAyEklG,EAAzEllG,SAAU+R,EAA+DmzF,EAA/DnzF,eAAgB6Q,EAA+CsiF,EAA/CtiF,gBAAiBvO,EAA8B6wF,EAA9B7wF,KAAM7Q,EAAwB0hG,EAAxB1hG,qBACpDq8S,EAAa,EAEb75K,GAAY,EACZ03Q,GAAgB,EACpB,IAAK19Y,EAAS8kD,UACZ44V,GAAgB,IAAApvY,oBAAmBtO,EAASC,cACxC,IAAA01K,cAAa5jK,KAAoB2rY,IACnC13Q,GAAY,EACsB,IAA9BhmI,EAAS6C,mBAAwB,CACnC,IAAM8nI,EAAuB3qI,EAASE,SAAW,EAAAmD,cAAcC,OAASE,EACxEq8S,GAAa,IAAA15S,oBAAmBnG,EAASC,YAAaD,EAAS+C,SAAU/C,EAASgD,gBAAgB,EAAMhD,EAAU2qI,EAAsB3qI,EAASoC,cAKvJ,MAAwB,SAApBpC,EAASE,QAAsB2/S,EAKjC,+BAAKr7N,UAAU,0BACZwhD,EACC,wCACE,+BAAKxhD,UAAU,YAAW,4CAAkB5iF,GAAG,+BAC/C,gCAAM4iF,UAAU,aACb,IAAAkxF,sBAAqBmqI,EAAY7/S,EAASC,YAAa8R,EAAgBsC,EAAK1C,YAG/E,KACH+rY,EACC,gCAAMl5T,UAAU,sBAAsBkyF,QAAS,kBAAM9zJ,EAAgB,CAAEiB,iBAAiB,MACtF,4CAAkBjiB,GAAG,6CAErB,MAjBC,+BAAK4iF,UAAU,4BAsB1BmlY,EAAc7tU,UAAY,CACxB97I,SAAU,UAAUwzC,MAAV,sBAGZ,IAYM02I,EAAqB,CACzBtnK,mC,WAGa,IAAA++H,aACb,IAAAj8C,UAjBsB,SAACxzG,EAAOqvP,GAAa,IACpCplP,EAAajK,EAAM8J,UAAnBG,UACA8oN,EAAwB/yN,EAAMkwO,iBAA9Bnd,qBACP,MAAO,CACLlzM,eAAgB7f,EAAMqN,gBACtBwD,SAAUw+O,EAASvhP,SAAS+C,SAC5B5G,YACA8oN,uBACAzhN,qBAAsBtR,EAAMqR,cAAcC,wBASnB0mL,EAAzB,CACE,UAAMi2O,KAAKwpD,GAAe,SAACzkX,EAAOszE,GAEhC,GAAIA,EAAUysC,qBAEZ,OAAO,Q,yIC9Ef,O,OACA,O,IACA,MACA,O,IACA,QAEA,QACA,QACA,Q,IACA,Q,IACA,OAEA,QACA,SACA,SACA,QACA,UAIA,QACA,QAIA,QACA,QAKA,SACA,SACA,SAKA,S,IACA,MACA,SACA,Q,mDAGA,IAAM2kQ,EAAiB,SAAC1kX,GAAU,IAE3BllG,EAGuBklG,EAHvBllG,SAAU8kD,EAGaogD,EAHbpgD,QAASxuC,EAGI4uF,EAHJ5uF,QAASvT,EAGLmiG,EAHKniG,SAAU+iB,EAGfo/E,EAHep/E,eAAgBhC,EAG/BohF,EAH+BphF,UAAWliB,EAG1CsjG,EAH0CtjG,GAAIgF,EAG9Cs+F,EAH8Ct+F,WAAYyN,EAG1D6wF,EAH0D7wF,KAAMtC,EAGhEmzF,EAHgEnzF,eAC1FyY,EAE0B06E,EAF1B16E,mBAAoBw/I,EAEM9kE,EAFN8kE,gBAAiBizC,EAEX/3G,EAFW+3G,gBAAiBj/E,EAE5B94B,EAF4B84B,wBAAyBrzH,EAErDu6F,EAFqDv6F,UAAW2Z,EAEhE4gF,EAFgE5gF,YAC1FyvE,EAC0BmR,EAD1BnR,WAAYnkF,EACcs1F,EADdt1F,aAAc4xK,EACAt8E,EADAs8E,eAAgB/V,EAChBvmE,EADgBumE,oBAAqB3rC,EACrC56B,EADqC46B,6BAA8Bv2B,EACnErE,EADmEqE,WAC7Fy2B,EAA0B96B,EAA1B86B,uBAEIt0H,EAAqBqG,EAAezQ,SAPV,GASM,IAAAy5I,UAAS,IATf,qBASzBqmS,EATyB,KASZE,EATY,QAUc,IAAAvmS,WAAS,GAVvB,sBAUzB2qP,GAVyB,MAURC,GAVQ,UAWI,IAAA5qP,WAAS,GAXb,uBAWzBwxO,GAXyB,MAWbtvF,GAXa,UAYK,IAAA2lH,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAZ5B,uBAYzB61c,GAZyB,MAYVjtQ,GAZU,MAa1BktQ,IAAyB,IAAAnwU,aAAYnvH,GACrC00X,IAAsB,IAAAvlQ,aAAYqwB,GAElC+/S,GAAkB,WACtB,GAAI/pd,GAAYA,EAASC,YAAa,CACpC,IAAIic,EAAOlc,EAASC,YAAYmS,eAAiBpS,EAASC,YAAYmS,iBAAmBpS,EAASC,YAAYwV,SACjG,qCAATyG,IACFA,EAAO7H,EAAKC,cAAc,CAAC1S,GAAIsa,KAEjCola,EAAepla,QACN4oC,GACTw8X,EAAe,MAInB,IAAA/lU,YAAU,WAER,OADAwuW,KACO,WACLh4d,OAAO+qG,oBAAoB,QAAS46E,OAErC,CAAC5yH,EAASljD,KAEb,IAAA25G,YAAU,YACH/wF,GAAsBs/b,IACzBC,OAED,CAACv/b,KAEJ,IAAA+wF,YAAU,WACJyuD,GAAmBA,EAAgBuhO,cAAgBvhO,EAAgBzwJ,SAAW2lY,IAC7EA,GAAoB3lY,SAAW2lY,GAAoBl/Y,UAAYk/Y,GAAoBl/Y,SAAS4B,KAAO5B,EAAS4B,MAC/G,IAAAwlY,+BAA8BxgY,GAC9Bojd,GAAoB9qE,GAAoB3lY,YAEzC,CAACywJ,IAEJ,IAIM,GAmFA,GAsDA,GA7IAslO,IAAkB,cAAS,WAC/B,OAAO,IAAA5/I,sBAAqBp5O,EAAQlB,KAAMgsa,EAAankJ,MACtD,KAEG/c,IAAA,iCAAoB,WAAO1lL,GAAP,0EACI,2BAAxBlkF,EAAQlB,KAAKlV,SAAuCF,EAAS6hJ,gBADzC,0CAEf,GAFe,cAIxBy/R,EAAe9mV,EAAMlqF,OAAOxf,OAC5B60Y,IAAmB,GALK,SAMlB2J,GAAgB90S,EAAMlqF,OAAOxf,OANX,kDAApB,8CAiBA4mL,GAAoB,SAACl9E,GAErBA,EAAMlqF,SADc,CAAC,eAAgB,aACJzW,MAAK,SAAA8mP,GAAA,OAAOnmJ,EAAMlqF,OAAOuqI,QAAQ8lG,OACpEspO,MAIEA,GAAgB,WACpBtkF,IAAmB,GACnB5zY,OAAO+qG,oBAAoB,QAAS46E,KAOhClF,IAAc,IAAA92B,UAAQ,WAC1B,KAAKgqP,IAAoBpvX,GAAYA,EAAQlB,MAASkB,EAAQlB,KAAK42E,qBACjE,MAAO,GAET,IAAInN,SACE/pE,GAAS,IAAAC,oBACf,GAAIkoM,EAAiB,KACZjoG,EAAsCioG,EAAtCjoG,aAActqG,EAAwBuyM,EAAxBvyM,qBACfspF,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAOozG,KAC7D,GAAI1wF,GAAeA,EAAY0xF,aAAc,CAC3C,IAAMsB,GAAgB,IAAAnjB,kBAAiBH,EAAYrpF,EAAWD,GAC9Dm0E,GAAW,IAAA+5B,0BAAyBluG,EAAsBC,EAAWqpF,EAAYsjB,EAAc,SAE/Fz4B,GAAW,IAAA+5B,0BAAyBluG,EAAsBC,EAAWqpF,EAAY1vE,QAGnFu6D,EAAW/pE,EAAOo9E,sBAChB57E,EACA,GACA,IACA,GACA,EACA1G,EACA,CAACshM,oBAAqB1vB,IAG1B,OAAO3iG,IAEN,CAAC6mT,GAAiBpvX,EAASuzc,GAAe5sQ,EAAiB34L,EAAayvE,EAAYppF,EAAWiF,EAAc4xK,IAE1GqgQ,GAAgB,WACpB,GAAIn8C,GAAiB,CACnB,IAAKpvX,EAAQlB,KAAK42E,oBAChB,MAAO,CAAC,CAAC21V,QAAQ,IAEnB,IAAMr2P,EAAe81P,EAAYlrb,cACjC,OAAOs8K,GACJ5xK,QAAO,SAAA2Y,GACN,IAAMlpB,EAAOkpB,GAAWA,EAAQnE,MAAQmE,EAAQnE,KAAKhD,eAAiBmH,EAAQnE,KAAKhD,iBAAmB,GACtG,OAAO/hB,GAAQA,EAAK6F,cAAcnC,SAASu3L,MAQjD,MAAO,IAGH0+R,IAAA,iCAAsB,WAAOzwc,GAAP,oBAAgB2wc,EAAhB,sIACtBA,GACFlqV,EAAuB,IAEpBhgI,EAAS8kD,SACZh/B,EAAe9lB,GAGbi9M,IACKr2M,EAA4Bq2M,EAA5Br2M,WAAYouG,EAAgBioG,EAAhBjoG,aACbhhB,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAOozG,KAC7DgpB,mBACGrzH,EAAY,CACX2Z,cACAzZ,gBAAiB0O,EAAQnE,KACzBlV,OAAQqZ,EAAQnE,KAAKlV,UAEtB,EAAO8zF,EAAYptF,IAGlB3J,EAAUsc,EAAQnE,KAClBsC,EAAc3U,IAAawW,EAAQnE,KAAKs9T,cAAgBn5T,EAAQnE,KAAKs9T,aAAa9rU,GAAc2S,EAAQnE,KAAKs9T,aAAa9rU,GAAc,OAAS,EACjJgR,EAAiB,CACrBC,eAAgBvB,EAAQ4F,KACxBnZ,SAAU2U,EACVxX,OAAQjD,EAAQiD,OAChBD,YAAahD,EACbmF,aAAcwE,GAEZ46K,IACF5pK,EAAe5U,eAAiBw+K,GAE9By7B,IACFrlM,EAAesM,aAAe+4L,EAAgBjoG,aAC9Cp9F,EAAewM,eAAiBzZ,EAChCiN,EAAetN,mBAAoB,IAAAwa,mCAAkCR,EAAarnB,GAAS2E,IAnCnE,UAqCpBkiB,EAAU,CAAClM,IArCS,WAsC1Bqyc,KAC4B,SAAxB1wc,EAAQnE,KAAKlV,SAAqBwL,EAAmB4wK,yBAvC/B,sBAwClBhO,GAAuB,IAAAC,yBAAuB,IAAA0S,sBAAqB1nK,EAAQnE,QAxCzD,oBA0ChB+0c,GAAuB,IAAA37S,mCAAkCF,GAC3Dt7K,SAASC,SAASoC,iBAAmB80d,EA3CnB,mCA4Cd,IAAA/sS,2BAA0B+sS,GA5CZ,QA6CpB1+S,EAAoB7kK,GA7CA,YAiDtB8E,EAAmB6L,qBAjDG,mCAkDlB,IAAAksG,oBAAmB78G,GAlDD,mDAAtB,8CAsDA66a,IAAA,iCAAqB,WAAOloa,GAAP,4FACrB,IAAA2tX,qBAAoBlnY,EAAUuZ,EAAS3S,GADlB,0CAEhB,GAFgB,WAIrBq2M,EAJqB,oBAKhBr2M,EAAkDq2M,EAAlDr2M,WAAYouG,EAAsCioG,EAAtCjoG,aAActqG,EAAwBuyM,EAAxBvyM,qBAC3BspF,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAOozG,KAC7DgpB,mBACGrzH,EAAY,CACX2Z,cACAzZ,gBAAiB0O,EAAQnE,KACzBlV,OAAQqZ,EAAQnE,KAAKlV,UAEtB,EAAO8zF,EAAYptF,IACW,UAAM7K,WAAWwO,YAA3CmzH,uBACoBrvI,OAfJ,wBAgBrByxI,GAA6B,GACvBsrH,EAAgB4+N,GAAoB34d,UAApB,EAA+BkoB,GAAS,GACxDiyX,EAAkB,WACtB55Y,QAAQ4B,IAAI,uBACZwqI,mBACGrzH,GADH,gBAEOD,EAAqBC,MAEzB,EAAOqpF,EAAYptF,KAGxB,IAAAkjK,oBAAmB,EAAAvwH,kBAAkBM,oCAAqC,CACxEuxM,gBACAogJ,gBAAiBA,EAAgBn6Y,UAAhB,GACjBmyb,iBAAkB74a,IACjB,GA/BkB,mBAgCd,GAhCc,yBAmCnBq/c,GAAoBzwc,GAnCD,mDAArB,8CAsCAmoa,GAAaG,KAEb7tW,GAAS,CACbv6E,OAAQisY,GAAsC,GAApBg8C,GAAWrzb,OAAc,GAG/Cm7d,GAAkBxpd,EAASE,SAAW,EAAAmD,cAAcC,OAASimG,EAE7Do4U,GACJ,8BAAIn9V,UAAU,wCACZ,+BAAKA,UAAU,kFAInB,OACE,+BAAKA,UAAU,kBACb,iCAAOA,UAAW,yCAA2CglY,GAAkB,sBAAwB,IAChG9sY,SAAU8sY,GACV14d,MAAOswb,EACP9nN,QAzLc,WACvB,GAA4B,2BAAxBhjN,EAAQlB,KAAKlV,QAAuCF,EAAS6hJ,gBAC/D,OAAO,EAET8jP,IAAmB,GACnB5zY,OAAO0uD,iBAAiB,QAASi3H,KAqLxB6hD,OAtKa,aAuKb7J,SAAUwwD,KACjB,+BAAK17L,UAAU,cAAcv2E,MAAO+lE,IAClC,8BAAIwQ,UAAU,WACX+nS,GAAao1D,GAASE,KAAgBngb,KAAI,SAAC6X,EAASg/T,GACnD,GAAIh/T,EAAQooa,OACV,OAAO,mCAAoBrra,QAASA,EAASllB,IAAI,iBAAiBy4d,cAAeA,GAAet9P,SAAU3P,KAE5G,IAAMttM,GAAkB,IAAAhB,oBAAmBiL,EAAQnE,MAC7C4wH,EAAYt6H,EAAmBk1H,cAAgB7uH,EAAe8uH,4BAA8BvxH,IAAoByC,EAAe+uH,mBAC/H1kI,GAAQ,IAAA+J,oBAAmBoT,EAAQnE,KAAM,GAE/C,OACE,8BAAIovE,UAAU,gBAAgBpzF,IAAKmnV,EAAc7hK,QAAS,kBAAM+qQ,GAAmBloa,KACjF,mCAAatc,QAASsc,EAAQnE,OAC7B4wH,EACC,gCAAMxhD,UAAU,wBACb,IAAAkxF,sBAAqBt5K,EAAOmd,EAAQnE,KAAMrD,EAAgBsC,EAAK1C,WAEhE,aAUpBi4c,EAAe9tU,UAAY,CACzB97I,SAAU,UAAUwzC,MAAV,qBACVl9B,QAAS,UAAU/kB,OAAOshH,WAC1B9vG,SAAU,UAAUg5I,UAAU,CAAC,UAAUvpC,OAAQ,UAAUp2E,SAC3Dx1B,WAAY,UAAU4rG,OAAOK,WAC7B2uE,eAAgB,UAAUplJ,OAE1B6gL,gBAAiB,UAAUzpK,MAAV,4BACjBlvB,YAAa,UAAUkvB,MAAV,wBACb7oC,UAAW,UAAU6nG,OACrBjJ,WAAY,UAAUyyC,MAGxB,IAsBMkuC,EAAqB,CACzBpkK,gCACAhC,sBACA2nJ,0CACAztC,kDACA8B,4DACAE,iD,WAGa,IAAA2hB,aACb,IAAAj8C,UAhCsB,SAACxzG,EAAOqvP,GAAa,MACGrvP,EAAMwc,UAA7C8b,EADoC,EACpCA,mBAAoBw/I,EADgB,EAChBA,gBACpBj2E,EAAc7hG,EAAMqY,YAApBwpF,WACAnkF,EAAgB1d,EAAMyc,YAAtBiB,aACAw1F,EAAqBlzG,EAAMgR,YAA3BkiG,kBACA1yF,EAAUxgB,EAAM4U,YAAhB4L,OAEP,MAAO,CAELoyC,QAASy8L,EAASvhP,SAAS8kD,QAC3BljD,GAAI2/O,EAASvhP,SAAS4B,GACtBmQ,eAAgB7f,EAAMqN,gBACtBirB,qBACAw/I,kBAEAj2E,aACAnkF,eACAw1F,oBACA1yF,YAcuBw3K,EAAzB,CAA6C0/R,K,4GC9W/C,M,IACA,MACA,O,IAEA,QACA,UACA,Q,mDAEA,IAAMQ,EAAuB,SAACllX,GAAU,IAKhC,EAHCghS,EACchhS,EADdghS,6BAA8BlmY,EAChBklG,EADgBllG,SAAUsW,EAC1B4uF,EAD0B5uF,QAASwoY,EACnC55S,EADmC45S,+BAAgCt9N,EACnEt8E,EADmEs8E,eAAgB72K,EACnFu6F,EADmFv6F,UACtGsyM,EAAmB/3G,EAAnB+3G,gBAEIotQ,GAAA,gCAA0B,oGACxBvrE,IADwB,OAE9B5Y,EAA6BlmY,EAAS8kD,QAAU,KAAO9kD,IACvD,aAAiB,gBAAgB,EAAOsW,EAASkrK,EAAgBy7B,EAAiBtyM,GAHpD,kDAA1B,4CAMA+xE,EAAmC,2BAAxBpmE,EAAQlB,KAAKlV,QAAuCF,EAAS6hJ,gBAE9E,OACE,kCAAQr9D,UAAW,+BAAiC9H,EAAW,uBAAyB,IAChFA,SAAUA,EAAUg6F,QAAS2zS,KAIzCD,EAAqBtuU,UAAY,CAC/BxlI,QAAS,UAAU/kB,OAAOshH,WAC1B7yG,SAAU,UAAUzO,OAAOshH,WAC3BisS,+BAAgC,UAAUnmO,KAAK9lE,WAC/C2uE,eAAgB,UAAUplJ,OAE1B6gL,gBAAiB,UAAUzpK,MAAV,4BACjB7oC,UAAW,UAAU6nG,QAGvB,IAKM03E,EAAqB,CACzBg8M,6D,WAGa,IAAAxgS,UATS,WACtB,MAAO,KAQ+BwkF,EAAzB,CAA6CkgS,I,8HC9C5D,MACA,O,IAEA,SACA,SACA,QACA,S,uDAEME,E,yOAEJC,iBAAmB,WAEjB,OAAQ,EAAKrlX,MAAM2iB,UACjB,IAAK,QACH,MAAO,WACT,IAAK,QACH,MAAO,YACT,IAAK,QACH,MAAO,cAEX,MAAO,c,gGAGA,WAEP,OAD2BjuH,KAAKsrG,MAAM5gG,iBAAiBjW,QAAU2E,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAEzG,IAAAtK,qBAAoB3K,KAAKsrG,MAAM5gG,kBAAkB5C,KAAI,SAAC+C,EAAiBi0W,GAC5E,IAAMnwL,GAAe,IAAA5jL,wBAAuBF,EAAiB,EAAKygG,MAAMtgG,sBAClE+zW,GAAmB,IAAAj0W,aAAY6jL,EAAa3nL,QAAO,SAAAiE,GACvD,OAAO,IAAA6kL,uBAAsB7kL,IAAaA,EAASqwK,eAAiB,EAAApB,oBAAoBK,YAE1F,OAAKwkM,EAAiBtqX,OAIpB,+BAAK+C,IAAKsnX,EAAsBl0R,UAAW,eACzC,8BAAIA,UAAU,oDACX,EAAK+lY,mBADR,IAC6B9ld,EAAgBpU,MAE7C,8BAAIm0F,UAAU,qBACXm0R,EAAiBj3W,KAAI,SAACmD,EAAU+zW,GAC/B,OAAO,mCAA+BxnX,IAAK,MAAQsnX,EAAuBE,EACpCn0W,gBAAiBA,EACjBI,SAAUA,SAX/C,QAkBN,S,GA1C6B,UAAM4gG,W,WAsD/B,IAAAC,UARS,SAACxzG,GACvB,MAAO,CACLoS,iBAAkBpS,EAAMsS,oBAAoBF,iBAC5CM,qBAAsB1S,EAAMsS,oBAAoBI,qBAChDijH,SAAU31H,EAAMgR,YAAY2kH,YAIQ,GAAzB,CAEZyiW,I,kIChEH,MACA,O,IACA,M,IAEA,S,IACA,QACA,S,uDAGME,G,oNAOK,MAC6B5wd,KAAKsrG,MAAlCrgG,EADA,EACAA,SAAUJ,EADV,EACUA,gBAIjB,OAFkBI,EAASqwK,eAAiB,EAAApB,oBAAoBK,QAI5D,8BAAI3vF,UAAW,6EACb,+BAAKA,UAAW,qFACb3/E,EAASxU,MAEZ,+BAAKm0F,UAAU,uCACf,gCAAMA,UAAW,gCACd5qF,KAAKyoR,mBAQZ,8BAAI79L,UAAU,2DACZ,+BAAKA,UAAU,+BACb,8BAAIA,UAAW,qCACZ3/E,EAASkwK,WAAa,4CAA6C,KAAMlwK,EAASxU,OAEvF,+BAAKm0F,UAAU,uCACb,gCAAMA,UAAW,UAAY3/E,EAASkwK,WAAa,cAAgB,kBAChElwK,EAASkwK,WACN,mCAAkBlwK,SAAUA,EAAUJ,gBAAiBA,EAAiB46Y,kBAAkB,IAC1FzlZ,KAAKwoR,2B,gBAnCZtmI,UAAY,CACjBr3I,gBAAiB,UAAUlT,OAAOshH,WAClChuG,SAAU,UAAUtT,OAAOshH,Y,cAuDhB,IAAAnN,UAdS,SAACxzG,GAAU,MACgBA,EAAMsS,oBACvD,MAAO,CACLF,iBAH+B,EAC1BA,iBAGLM,qBAJ+B,EACRA,qBAIvB8G,mBAAoBxZ,EAAMqN,gBAAgB+B,SAE1CnF,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1BE,gBAAiBnP,EAAMqN,gBAAgB8B,mBAKH,GAAzB,CAEZmpd,I,kICtEH,M,IACA,MACA,OACA,OAEA,S,IACA,OACA,QAKA,S,uDAEMC,G,6OAOJC,8BAAgC,SAAAtkc,GAAuB,IAC9C/R,EAAQ,EAAK6wF,MAAb7wF,KACP,EAAK6wF,MAAMt8E,sBAAsB,CAC/BuB,SAAS,EACTwlB,QAAS,CACP/tC,GAAI,+CACJ2kS,iBAAkBngR,EAAoB0pB,OAExC4D,QAAS,CAAC,CACRx3B,KAAM,yCACNmpF,MAAO,OACPvb,MAAO,WACL,EAAKob,MAAMt8E,sBAAsB,CAACuB,SAAS,MAE5C,CACDjO,KAAM7H,EAAKC,cAAc,CAAC1S,GAAI,4CAC9ByjG,MAAO,QACPvb,MAAO,WACL,UAAU/uD,eAAe,qCAAuC3U,EAAoB0pB,OACpF,EAAKo1D,MAAM/+E,kCAAkCC,GAC7C,EAAK8+E,MAAMt8E,sBAAsB,CAACuB,SAAS,U,EAMnDvH,gBAAkB,WAChB,EAAKsiF,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,K,gGAIZ,aAEoEjqB,KAAKsrG,MAAzEnzF,EAFA,EAEAA,eAAgBgrY,EAFhB,EAEgBA,SAAU1iZ,EAF1B,EAE0BA,SAAU2U,EAFpC,EAEoCA,uBAAwBqF,EAF5D,EAE4DA,KAF5D,EAGkCrhB,SAASC,SAA3C2b,EAHA,EAGAA,UAAWC,EAHX,EAGWA,MAAOC,EAHlB,EAGkBA,aACnBpD,EAAqBqG,EAAezQ,SAEtC0kI,GAAY,EACZ2kV,EAAY,MACZj/c,EAAmBk1H,aAAgB7uH,EAAe8uH,2BAA8B9uH,EAAe+uH,qBACjG6pV,GAAY,IAAAhlL,qBAAoBo3G,GAChC/2Q,GAAY,GAGd,IAAM7D,GAAmBz2H,EAAmBy3T,oBAAsBz3T,EAAmBuD,4BAC9EL,GAAaC,GAASC,KAAkBE,EAE/C,OACE,8BAAIw1E,UAAU,0BACZ,+BAAKA,UAAU,+BACb,8BAAIA,UAAU,qCAAqCu4T,EAASjtW,OAC5D,+BAAK00C,UAAU,qCAOb,gCAAMA,UAAU,wCACd,4CAAkB5iF,GAAG,gDADvB,IACwEm7Y,EAASl3G,UAIpFk3G,EAASz2G,mBAAqB,KAC7BjsS,EACI,+BAAKmqF,UAAU,kCACb,kCAAQA,UAAU,sCACVkyF,QAAS,kBAAM,EAAKxxE,MAAM19E,kBAAiB,MACnD,kCAAQg9D,UAAU,wCACVkyF,QAAS,WACP,EAAKg0S,8BAA8B3tE,OAI/C,+BAAKv4T,UAAU,0EACb,gCAAMA,UAAU,kBAAkBkyF,QAAS,kBAAM,EAAKxxE,MAAM19E,kBAAiB,KAC3E,4CAAkB5lB,GAAG,yCAEvB,gCAAM4iF,UAAU,iBAAiBkyF,QAAS,kBAAM,EAAKg0S,8BAA8B3tE,KACjF,4CAAkBn7Y,GAAG,4CAK9BokI,EACC,+BAAKxhD,UAAU,uCACZ29C,EACC,gCAAM39C,UAAU,sBAAsBkyF,QAAS98K,KAAKgpB,iBAClD,4CAAkBhhB,GAAG,4CAGvB,gCAAM4iF,UAAU,UACb,IAAAkxF,sBAAqBi1S,EAAW,KAAM54c,EAAgBsC,EAAK1C,YAIhE,U,GAxGwC,UAAM8zF,W,EAEjDq2C,UAAY,CACjBihQ,SAAU,UAAUxrZ,OAAOshH,WAC3Bx4G,SAAU,UAAU2hJ,M,GAiHlBkuC,EAAqB,CACzBthK,8CACAzC,sEACAqB,oCACA5E,mC,WAGa,IAAA++H,aACb,IAAAj8C,UAfsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtByP,uBAAwB9c,EAAMwc,UAAUM,0BAYjBk7K,EAAzB,CAA6CugS,K,8EC3I/C,W,OACA,OACA,QACA,Q,IAOA,SACA,O,IACA,SACA,SACA,Q,IACA,S,8DAiIe,IAAA9oU,aACb,IAAAj8C,UApBsB,SAACxzG,GAAU,MACIA,EAAMqY,YAApCwpF,EAD0B,EAC1BA,WAAYhwE,EADc,EACdA,eACZi4J,EAAwB9pL,EAAMgR,YAA9B84K,qBACP,MAAO,CACL7/K,UAAWjK,EAAM8J,UAAUG,UAC3B0K,iBAAkB3U,EAAM4U,YAAYD,iBACpC6L,OAAQxgB,EAAM4U,YAAY4L,OAC1B23J,2BAA4Bn4K,EAAM8J,UAAUquK,2BAC5Ct4J,eAAgB7f,EAAMqN,gBACtBw0F,aACAhwE,iBACAi4J,0BAIuB,GAKzB,EAhI0B,SAAC92E,GAAU,IAE9BxyF,EAAqHwyF,EAArHxyF,OAAQvW,EAA6G+oG,EAA7G/oG,UAAW0K,EAAkGq+F,EAAlGr+F,iBAAkBwjK,EAAgFnlE,EAAhFmlE,2BAA4Bh2J,EAAoD6wF,EAApD7wF,KAAMtC,EAA8CmzF,EAA9CnzF,eAAgBgiF,EAA8BmR,EAA9BnR,WAAYhwE,EAAkBmhF,EAAlBnhF,eACpGrY,EAAqBqG,EAAezQ,SAE1C,OAAOoR,EAAOhR,KAAI,SAAC4R,EAAO1M,GAExB,IAAMkO,GAAS,IAAAC,kBAAiBrJ,EAAmB4wK,0BAA4BhpK,EAAML,KAAOK,EAAML,KAAOjgB,SAASC,SAASoC,gBAE3H,GAAKuR,IAAeC,IAAsBwjK,EACxC,OAAO,KAET,IAAM+R,GAAkB,IAAA97K,eAAcsG,GAAY,GAE5Cgkd,EAAiBzud,EAAUyE,QAAO,SAAAZ,GACtC,IAAM6qd,EAAsC,UAApB7qd,EAASE,OACjC,OAAO4U,EAAOc,cACT5V,EAASC,aACRD,EAASoC,eAAiBwE,IAC1Bikd,IACA7qd,EAASslB,iBACTxQ,EAAOc,aAAa/b,MAAK,SAAA0oL,GAAA,OAASA,EAAMlsK,SAASxc,MAAK,SAAAujN,GACxD,OAAOA,EAAMhoM,KAAKlV,SAAWF,EAASE,gBAItC4qd,EAAgB3ud,EAAUyE,QAAO,SAAAZ,GACrC,IAAM6qd,EAAsC,UAApB7qd,EAASE,OACjC,OAAO4U,EAAOc,cACT5V,EAASC,aACRD,EAASoC,eAAiBwE,IAC1B5G,EAASslB,gBACVulc,IACC/1c,EAAOc,aAAa/b,MAAK,SAAA0oL,GAAA,OAASA,EAAMlsK,SAASxc,MAAK,SAAAujN,GACxD,OAAOA,EAAMhoM,KAAKlV,SAAWF,EAASE,gBAItC6qd,GAAwB,IAAA1pS,yBAAwBllL,EAAWyK,GAE3DgP,EAAed,EAAOc,aAE5B,OACE,+BAAK4uE,UAAW,0BAA4B6lF,EAA6B,wBAA0B,IAAKj5K,IAAKwV,GAC1GyjK,EACC,8BAAI7lF,UAAU,2BACZ,4CAAkB5iF,GAAG,2BADvB,MACoD,IAAA6Q,aAAY7L,EAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,IAEzH,MACH,IAAA8hG,uBAAsB9f,EAAYhwE,GAC/B,mCAAuBnd,WAAYA,IACnCkO,EAAOc,aACT,wCACGA,EAAalU,KAAI,SAAAwU,GAChB,IAAI/C,EAAkB,GAKtB,OAJIzH,EAAmB6L,uBACrBpE,EAAkB+C,EAAW7lB,KAAK0mB,OAAO7gB,eAGpCggB,EAAWG,SAAS3U,KAAI,SAAC4U,EAASmvU,GACvC,GAAI/5U,EAAmB6L,sBAAkD,SAAxBjB,EAAQlB,KAAKlV,QAAuBiT,IAAoB43c,IACnG,IAAAxqS,gCAA+BptK,EAAiBzH,GAClD,OAAO,KAGX,IAAI6zY,EAAoBpjZ,EAAUyE,QAAO,SAAAZ,GACvC,OAAIA,EAASslB,iBAGNtlB,EAASC,aAAgBD,EAASoC,eAAiBwE,GAAgB0P,EAAQlB,KAAKlV,SAAWF,EAASE,UAClGF,EAASgD,gBAAmBhD,EAASgD,iBAAmBkT,EAAW7lB,UAG9E,OAAO,mCAA6BimB,QAASA,EACTipY,kBAAmBA,EACnB34Y,WAAYA,EACZxV,IAAKwV,EAAa6+U,EAClBjkK,eAAgBtrK,EAAW7lB,aAGlEu6d,EAAev8d,OACd,mCAA6BioB,QAAS,CACpClB,KAAM,CACJlV,OAAQ,yBACRuV,SAAUpB,EAAKC,cAAc,CAAC1S,GAAI,wCAET29Y,kBAAmBqrE,EACnBhkd,WAAYA,IACvC,KACH8E,EAAmBmK,aAClB,mCAA6BS,SAAS,IAAAzB,wBACT0qY,kBAAmBurE,EACnBlkd,WAAYA,IACvC,MAEJ,KACHyjK,EACC,+BAAK7lF,UAAU,yBACb,gCAAMA,UAAU,8BAA6B,4CAAkB5iF,GAAG,+BACjE,IAAA0L,sBAAqB5B,GAAoB,IAAA9P,cAAawgL,EAAgB3gL,iBAEvE,KACJ,mCAAiBmL,YAAaA,a,kICvHtC,MACA,O,IACA,M,IACA,Q,IACA,Q,IACA,SACA,QACA,O,uDAEMokd,G,+NAUgB,aACcpxd,KAAKsrG,MAA9B5uF,EADW,EACXA,QAAS2iN,EADE,EACFA,aAChBr/N,KAAK+yN,2BAA2Br2M,EAAS,IAAI,WAC3C,EAAKsmM,cACLqc,S,+BAIK,MAE4Er/N,KAAKsrG,MAAjF5uF,EAFA,EAEAA,QAAStW,EAFT,EAESA,SAAUkjR,EAFnB,EAEmBA,wBAAyBt8Q,EAF5C,EAE4CA,WAAY28Q,EAFxD,EAEwDA,iBAE/D,IAAKjtQ,EAAQlB,KAAK42E,oBAChB,OAAO,wCAGT,IAAMy3L,EAA2BF,EAAiBroR,QAAQ,SAACsjU,EAAaj5T,GAAd,OAAwBi5T,EAAcj5T,EAAMxC,WAAW,GAEjH,OACE,+BAAKyhF,UAAU,mBACb,8BAAIA,UAAU,gBACZ,8BAAIA,UAAU,wCACZ,+BAAKA,UAAU,iBACb,gCAAMA,UAAU,wBAAuB,4CAAkB5iF,GAAG,yBAE9D,+BAAK4iF,UAAU,4BACb,gCAAMA,UAAU,wBAAuB,4CAAkB5iF,GAAG,oCAG/DshR,EAAwBxhR,KAAI,SAAA8hR,GAC3B,OAAO,mCAAyBpyR,IAAKoyR,EAAkB5hR,GACvB5B,SAAUA,EACVujR,iBAAkBA,EAClBE,yBAA0BA,EAC1B78Q,WAAYA,EACZ48Q,kBAAmBA,a,gBA3CtD1nI,UAAY,CACjB97I,SAAU,UAAUwzC,MAAV,qBACV+vO,iBAAkB,UAAUzwK,QAAQ,UAAUt/D,MAAV,sBACpCl9B,QAAS,UAAU/kB,OAAOshH,WAC1BomH,aAAc,UAAUtgD,KAAK9lE,WAC7BqwK,wBAAyB,UAAUjzQ,MAAM4iG,Y,cAoD9B,IAAAnN,UANS,WACtB,MAAO,KAGkB,GAEZ,CAA6CslX,I,8ECpE5D,I,IAAA,MACA,O,IACA,MACA,O,IAEA,OACA,QACA,QACA,SACA,Q,mDAEA,IAAMC,EAA0B,SAAC/lX,GAAU,IAElCllG,EAAqHklG,EAArHllG,SAAUujR,EAA2Gr+K,EAA3Gq+K,iBAAkBC,EAAyFt+K,EAAzFs+K,kBAAmBzxQ,EAAsEmzF,EAAtEnzF,eAAgBnC,EAAsDs1F,EAAtDt1F,aAAchJ,EAAwCs+F,EAAxCt+F,WAAY68Q,EAA4Bv+K,EAA5Bu+K,yBAC1F/3Q,EAAqBqG,EAAezQ,SAHD,GAKS,IAAAgiR,0BAChDtjR,EACAujR,EACAC,EACAC,EACA78Q,EACAgJ,GANKi0Q,EALkC,EAKlCA,gBAAiB5mR,EALiB,EAKjBA,QAAS2mR,EALQ,EAKRA,cASjC,OACE,8BAAIp/L,UAAU,gBACZ,+BAAKA,UAAU,iBACZq/L,EACD,+BAAKr/L,UAAU,yBACb,4CAAkB5iF,GAAG,4BADvB,IACmD,mCAAa3E,QAASA,MAG3E,+BAAKunF,UAAU,4BACb,+BAAKA,UAAU,yBAAwB,IAAAl3E,sBAAqB5B,EAAoBk4Q,EAAe3mR,OAMvGgud,EAAwBnvU,UAAY,CAClC97I,SAAU,UAAUwzC,MAAV,qBACV+vO,iBAAkB,UAAUzwK,QAAQ,UAAUt/D,MAAV,sBACpCgwO,kBAAmB,UAAUhwO,MAAV,8BACnB5sC,WAAY,UAAU4rG,OAAOK,WAC7B4wK,yBAA0B,UAAUjxK,OAAOK,Y,WAY9B,IAAA8uC,aACb,IAAAj8C,UAVsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,gBACtBqQ,aAAc1d,EAAMyc,YAAYiB,gBAIT,GAGzB,CAA6Cq7c,K,8EC1D/C,W,OACA,O,IACA,MACA,O,IAEA,SACA,Q,IAIA,SACA,QACA,QACA,SACA,Q,mDAGA,IAAMC,EAAwB,SAAChmX,GAAU,IAEhCt+F,EAAqFs+F,EAArFt+F,WAAY8L,EAAyEwyF,EAAzExyF,OAAQvW,EAAiE+oG,EAAjE/oG,UAAW43F,EAAsDmR,EAAtDnR,WAAY9vE,EAA0CihF,EAA1CjhF,iBAAkB5P,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAEpEq8L,EAAwBjyM,EAAUyE,QAAO,SAAAZ,GAAA,OAAYA,EAASC,aAAgBD,EAASoC,eAAiBwE,KAC1Gukd,EAAyB/8Q,EAAsBxtM,QAAO,SAAAZ,GACxD,QAASA,EAASkkB,cAAiBlkB,EAASokB,gBAAoBpkB,EAASslB,gBAAkBtlB,EAASE,SAAW,EAAAmD,cAAcC,UAE3H8nd,EAA6Bh9Q,EAAsBxtM,QAAO,SAAAZ,GAC5D,QAASA,EAASkkB,cAAiBlkB,EAASokB,gBAAoBpkB,EAASslB,gBAAkBtlB,EAASE,SAAW,EAAAmD,cAAcC,UAGzH+nd,EAAuB34c,EAAO9L,IAAc,IAAA5Q,yBAAwB0c,EAAO9L,GAAYqM,OAAQ,IAAAjd,2BAErG,OACE,wCACG+9F,EAAWryF,KAAI,SAAAsyF,GAEd,GAAIjiF,EAAezQ,SAASg7K,4BACtB,IAAA3oE,wBAAuB3f,EAAYq3X,GACvC,OAAO,KAGT,IAAMpuQ,EAAkBh5L,EAAiBve,MAAK,SAAA4ld,GAC5C,OAAOA,EAAsB1kd,aAAeA,GAAe0kd,EAAsBt2W,eAAiBhhB,EAAWpyF,KACxG,IAAA+xG,wBAAuB23W,EAAuBD,OAC/C,CAACzkd,aAAYouG,aAAchhB,EAAWpyF,GAAIwhF,YAAY,IAAAptF,2BAA2B0U,qBAAsB,IAEvGA,EAAuBuyM,EAAgBvyM,qBAEvC2Z,GAAc,IAAAG,mBAAkBwvE,EAAYtpF,GAAsB,GAIxE,OAAO2Z,EAAY3iB,KAAI,SAACy6G,GACtB,IAAMk/R,GAAe,IAAAlhS,yBAAwBgC,EAAKxxG,UAAWD,EAAsB2Z,GAC7EC,GAAc,IAAA8xF,2BAA0B+F,EAAKp3F,WAAara,EAAqByxG,EAAKxxG,YAAY,GACtG,IAAK2Z,EACH,OAAO,KAET,GAAI63F,EAAKp3F,WAAW12B,OAAS,EAC3B,OAAO,mCAA6BipH,cAAe6E,EAAKp3F,WACpBs2X,aAAcA,EACd1wY,UAAWwxG,EAAKxxG,UAChBsyM,gBAAiBA,EACjB34L,YAAaA,EACblzB,IAAK,WAAa4iG,EAAWpyF,GAAKgF,EAAau1G,EAAKxxG,YAE1F,IAAM6L,GAAe,IAAA69E,gCAA+B/vE,GACpD,IAAK9N,EACH,OAAO,KAUT,IAAI+oY,EAAoBnxM,EAAsBxtM,QAAO,SAAAZ,GACnD,OAAQwW,EAAatW,SAAWF,EAASE,QAAYF,EAASkkB,cAAiBlkB,EAASkkB,eAAiB8vE,EAAWpyF,IAC9G5B,EAASsK,mBAAsBtK,EAASsK,oBAAsBga,EAAY1iB,MAgBlF,OAbI29Y,EAAkBlxZ,SAChB88d,EAAuB98d,SACzB88d,EAAyBA,EAAuBvqd,QAAO,SAAA2E,GACrD,OAAQg6Y,EAAkB1lZ,MAAK,SAAA4jU,GAAA,OAAMA,EAAG77T,KAAO2D,EAAM3D,UAGrDwpd,EAA2B/8d,SAC7B+8d,EAA6BA,EAA2Bxqd,QAAO,SAAA2E,GAC7D,OAAQg6Y,EAAkB1lZ,MAAK,SAAA4jU,GAAA,OAAMA,EAAG77T,KAAO2D,EAAM3D,WAKpD,mCAA6B0U,QAAS,CAAClB,KAAMoB,GAChB6kY,aAAcA,EACdkE,kBAAmBA,EACnB34Y,WAAYA,EAEZ+D,UAAWwxG,EAAKxxG,UAChBsyM,gBAAiBA,EACjB34L,YAAaA,EAEblzB,IAAK,WAAa4iG,EAAWpyF,GAAKgF,EAAau1G,EAAKxxG,kBAG3Fwgd,EAAuB98d,OACtB,mCAA6BioB,QAAS,CAAClB,KAAM,CACzClV,OAAQ,yBACRuV,SAAUpB,EAAKC,cAAc,CAAC1S,GAAI,wCACT29Y,kBAAmB4rE,EACnBvkd,WAAYA,IACvC,KACHwkd,EAA2B/8d,OAC1B,mCAA6BioB,SAAS,IAAAzB,wBACT0qY,kBAAmB6rE,EACnBxkd,WAAYA,IACvC,OAKVskd,EAAsBpvU,UAAY,CAChCl1I,WAAY,UAAU4rG,OAAOK,Y,WAehB,IAAA8uC,aACb,IAAAj8C,UAdsB,SAACxzG,GAAU,MACMA,EAAMqY,YAAtCwpF,EAD0B,EAC1BA,WAAY9vE,EADc,EACdA,iBACnB,MAAO,CACL9nB,UAAWjK,EAAM8J,UAAUG,UAC3B0K,iBAAkB3U,EAAM4U,YAAYD,iBACpC6L,OAAQxgB,EAAM4U,YAAY4L,OAC1B23J,2BAA4Bn4K,EAAM8J,UAAUquK,2BAC5Ct4J,eAAgB7f,EAAMqN,gBACtBw0F,aACA9vE,sBAKF,CAAyBinc,K,8HC5I3B,O,OACA,O,IACA,M,IACA,OAEA,Q,IAKA,SACA,O,IAEA,SACA,QACA,SACA,SACA,S,IACA,Q,mDAEA,IAAMK,EAA8B,SAACrmX,GAAU,IAEtC5gF,EAA+G4gF,EAA/G5gF,YAAagzF,EAAkGpS,EAAlGoS,cAAe3sG,EAAmFu6F,EAAnFv6F,UAAWsyM,EAAwE/3G,EAAxE+3G,gBAAiBp2M,EAAuDq+F,EAAvDr+F,iBAAkB4kK,EAAqCvmE,EAArCumE,oBAAqB4vO,EAAgBn2S,EAAhBm2S,aAC/Fz0Y,EAAoCq2M,EAApCr2M,WAAY8D,EAAwBuyM,EAAxBvyM,qBAH0B,GAKX,IAAAqwI,UAAS,IALE,qBAKtC5+I,EALsC,KAK3BwjZ,EAL2B,MAO7C,IAAApkS,YAAU,WACHp/G,EAAU9N,QACbuxZ,GAAiB,KAGlB,IAEH,IAkBM,EASA,EA3BAA,EAAmB,SAACC,GACxB,IAAMC,EAAuBD,EAAe1jZ,EAAY,GACxDwjZ,0BAAiBG,GAAjB,CAAuC,CACrCl+Y,GAAI,UAAKqa,KACT6oC,SAAS,EACT/hD,SAAU,EACV7C,OAAQ,cAINw+Y,EAAsB,SAAC1+Y,GAC3B,IAAMwH,EAAQrL,EAAUoa,WAAU,SAAAhR,GAAA,OAASA,EAAM3D,KAAO5B,EAAS4B,MAC7D4F,GAAS,GACXrL,EAAU5M,OAAOiY,EAAO,GAE1Bm4Y,0BAAiBxjZ,MAGb2iZ,GAAA,gCAAiC,uFACjCl4Y,IAAeC,EADkB,iCAE7B,IAAAq2K,mBAAkBt2K,GAFW,OAGnC6kK,EAAoB7kK,IACpB,IAAAg8K,6BAA4Bh8K,GAJO,gCAM9B5W,QAAQC,WANsB,kDAAjC,4CASAo6d,GAAA,gCAA0B,oGACxBvrE,IADwB,QAE9B,aAAiB,gBAAgB,EAAO,KAAM,GAAI7hM,EAAiBtyM,GAFrC,kDAA1B,4CAKA6gd,GAAmB9gd,EAAqBC,KAAeD,EAAqBC,GAAW2Z,YAE7F,OACE,wCACE,8BAAIkgE,UAAW,+CAAiD62T,EAAe,aAAe,KAC3F/2X,EAAYg4H,yBAA0B,IAAAhiC,2BAA0Bh2F,IAEnE,+BAAKkgE,UAAW,qBAAwBroF,EAAU9N,OAAwC,GAA/B,+BACxD8N,EAAUuF,KAAI,SAAC1B,EAAU4iP,GACxB,OACE,+BAAKp+J,UAAW,MAAQ62T,EAAe,aAAe,IAAKjqZ,IAAKwxP,GAC9D,+BAAKp+J,UAAU,WACb,mCAAqCxkF,SAAUA,EACVupG,WAAY8xS,EACZqD,oBAAqBA,EACrB93Y,WAAYA,IACjD,+BAAK49E,UAAU,yBACb,+BAAKA,UAAU,YAAW,4CAAkB5iF,GAAG,+BAC/C,+BAAK4iF,UAAU,WACb,mCAAmCxkF,SAAUA,EACV2K,UAAWA,EACX4+F,WAAY8xS,EACZ/jS,cAAeA,EACf2lG,gBAAiBA,IACpD,kCAAQz4H,UAAW,+BAAiCgnY,EAAkB,uBAAyB,IACvF9uY,SAAU8uY,EAAiB90S,QAAS2zS,IAC5C,kCAAQ7lY,UAAW,gDAAiD9H,UAAU,MAGlF,+BAAK8H,UAAU,8BACf,+BAAKA,UAAU,iCAMxBroF,EAAU9N,QAAUgtZ,EAAe,KAClC,+BAAK72T,UAAU,8BACb,kCAAQA,UAAU,mCAAmCkyF,QAASkpO,GAC5D,4CAAkBh+Y,GAAG,yCAQjC2pd,EAA4BzvU,UAAY,CACtCmhE,gBAAiB,UAAUzpK,MAAV,4BAA0Cq/D,WAC3DyE,cAAe,UAAUxE,QAAQ,UAAUt/D,MAAV,yBAAuCq/D,WACxEvuF,YAAa,UAAUkvB,MAAV,wBAAsCq/D,WAEnDloG,UAAW,UAAU6nG,OAAOK,WAC5BwoS,aAAc,UAAUr/P,KAAKnpC,YAG/B,IAWMq3E,EAAqB,CACzBze,2C,WAGa,IAAA/lE,UAfS,SAACxzG,GAEvB,MAAO,CACL2U,iBAFyB3U,EAAM4U,YAA1BD,oBAc+BqjL,EAAzB,CAA6CqhS,I,8HCzI5D,O,OACA,O,IACA,MAEA,QAIA,QACA,QACA,U,mDAEA,IAAME,EAAoC,SAACvmX,GAAU,IAU7C,EAkCA,EAYA,EAtDC+3G,EAA8F/3G,EAA9F+3G,gBAAiB3lG,EAA6EpS,EAA7EoS,cAAe3sG,EAA8Du6F,EAA9Dv6F,UAAWqzH,EAAmD94B,EAAnD84B,wBAAyBjqC,EAA0BmR,EAA1BnR,WAAYwV,EAAcrE,EAAdqE,WAChF7+F,EAAkDuyM,EAAlDvyM,qBAAsB9D,EAA4Bq2M,EAA5Br2M,WAAYouG,EAAgBioG,EAAhBjoG,aAEnC02W,EAAchhd,EAAqBC,IAAcD,EAAqBC,GAAW2Z,aACnF,IAAAg2F,2BAA0B5vG,EAAqBC,GAAW2Z,aAAe,GAN1B,GAOb,IAAAy2H,UAAS2wU,GAPI,qBAO5CtqC,EAP4C,KAO/BE,EAP+B,QAQL,IAAAvmS,WAAS,GARJ,qBAQ5C2qP,EAR4C,KAQ3BC,EAR2B,KAU7CzlH,GAAA,gCAAoB,WAAO1lL,GAAP,uEACxB8mV,EAAe9mV,EAAMlqF,OAAOxf,OAC5B60Y,GAAmB,GAFK,kDAApB,6CAUAjuN,EAAoB,SAACl9E,GAErBA,EAAMlqF,SADc,CAAC,eAAgB,aACJzW,MAAK,SAAA8mP,GAAA,OAAOnmJ,EAAMlqF,OAAOuqI,QAAQ8lG,OACpEspO,KAIEA,EAAgB,WACpBtkF,GAAmB,GACnB5zY,OAAO+qG,oBAAoB,QAAS46E,IAehCsyS,GAAA,gCAAsB,WAAO1lc,GAAP,6EACpB0vE,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAOozG,KAC7DgpB,mBACGrzH,EAAY,CACX2Z,cACApkB,OAAQ,MAET,EAAO8zF,EAAYptF,GACtB06a,GAAe,IAAAhnU,2BAA0Bh2F,IACzC2lc,IAT0B,kDAAtB,6CAYAxoC,GAAA,gCAAqB,WAAOloa,GAAP,iFAIrB0jM,EAJqB,mBAKjBmuC,EAAgB4+N,EAAoB34d,UAApB,EAA+BkoB,KACjD,IAAA+tX,+BAA8B1gY,EAAYouG,EAAcrqG,EAAWygP,GANhD,0CAOd,GAPc,uBAUnB4+N,EAAoBzwc,GAVD,kDAArB,6CAaAmoa,EAjCgB,WACpB,IAAKh8C,EACH,MAAO,GAET,IAAMp6M,EAAe81P,EAAYlrb,cACjC,OAAOohH,EAAc12G,QAAO,SAAA0jB,GAAA,OAAe,IAAAg2F,2BAA0Bh2F,GAAapuB,cAAcnC,SAASu3L,MA4BxFu2P,GACb7tW,EAAS,CACbv6E,OAAQisY,EAAsC,GAApBg8C,EAAWrzb,OAAc,GAGrD,OACE,+BAAKm2F,UAAU,kBACb,iCAAOA,UAAW,yCAA2C+kB,EAAa,sBAAwB,IAC3F7sB,SAAU6sB,EACVz4G,MAAOswb,EACP9nN,QAhEc,WACvBqsK,GAAmB,GACnB5zY,OAAO0uD,iBAAiB,QAASi3H,IA+DxB6hD,OAhDa,aAiDb7J,SAAUwwD,IACjB,+BAAK17L,UAAU,cAAcv2E,MAAO+lE,GAClC,8BAAIwQ,UAAU,WACXk9V,EAAWhgb,KAAI,SAAC4iB,GACf,OACE,8BAAIkgE,UAAU,gBAAgBpzF,IAAKkzB,EAAY1iB,GAAI80K,QAAS,kBAAM+qQ,EAAmBn9Z,KAClFA,EAAYi2F,kBAAoBj2F,EAAYwrB,OAASxrB,EAAYla,kBAUlFqhd,EAAkC3vU,UAAY,CAC5CxkC,cAAe,UAAUxE,QAAQ,UAAUt/D,MAAV,yBAAuCq/D,WACxEoqG,gBAAiB,UAAUzpK,MAAV,4BAA0Cq/D,WAC3DloG,UAAW,UAAU6nG,OAAOK,WAC5BtJ,WAAY,UAAUyyC,KAAKnpC,YAI7B,IAOMq3E,EAAqB,CACzBlsD,mD,WAGa,IAAAt4B,UAXS,SAACxzG,GAEvB,MAAO,CACL6hG,WAFmB7hG,EAAMqY,YAApBwpF,cAU+Bm2F,EAAzB,CAA6CuhS,I,8EChI5D,I,IAAA,MACA,O,IACA,MACA,OAEA,SACA,S,IACA,O,mDAEA,IAAME,EAAwC,SAACzmX,GAAU,IAEhD7qG,EAAqG6qG,EAArG7qG,SAAU05F,EAA2FmR,EAA3FnR,WAAYgoT,EAA+E72S,EAA/E62S,SAAUn1Y,EAAqEs+F,EAArEt+F,WAAYk9R,EAAyD5+L,EAAzD4+L,uBAAwBI,EAAiCh/L,EAAjCg/L,cAAenyR,EAAkBmzF,EAAlBnzF,eAEnFu1T,EAAmDy0E,EAAnDz0E,oBAAqBrqH,EAA8B8+L,EAA9B9+L,gBAAiBtyM,EAAaoxY,EAAbpxY,UACtC2Z,EAAgCgjT,EAAhChjT,YAAazZ,EAAmBy8T,EAAnBz8T,gBAEpB,GAAIi5R,IAA2BI,EAAcnwS,SAAS6S,EAAa0d,EAAY1iB,IAC7E,OAAO,EAST,OACE,+BAAK4iF,UAAU,eACb,8BAAIA,UAAU,sBAAsBlgE,EAAYwrB,OAASxrB,EAAYla,WACrE,kCAAQo6E,UAAU,wBAAwBkyF,QATtB,WAAM,IACrB1hE,EAAgBioG,EAAhBjoG,aACDhhB,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAOozG,MAAiBjhB,EAAW,IACzF,IAAAspF,oBAAmBrpF,GAAarpF,EAAW/D,EAAY0d,EAAY1iB,MAO/D,4CAAkBA,GAAG,wCAEvB,8BAAI4iF,UAAW,sBAAuB,IAAAmxF,cAAa5jK,KAAoB1X,EAAW,iCAAmC,KACnH,8BAAImqF,UAAW,wBACb,+BAAKA,UAAW,yDAEd,mCACE,8BAAIA,UAAU,qCACX35E,EAAkB,mCAAa5N,QAAS4N,IAAqByZ,EAAYi2F,kBAAoBj2F,EAAYwrB,OAASxrB,EAAYla,WAEhIka,EAAYg4H,uBACX,6BAAG93D,UAAU,0CACV0hL,wBAAyB,CAACC,OAAQ7hP,EAAYg4H,0BAC/C,WAuBlBqvU,EAAsC7vU,UAAY,CAChDigQ,SAAU,UAAUxqZ,OAAOshH,WAC3BjsG,WAAY,UAAU4rG,OAAOK,Y,WAkBhB,IAAA8uC,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAU,MACMA,EAAMqY,YAAtC0Z,EAD0B,EAC1BA,iBAAkB8vE,EADQ,EACRA,WAClB15F,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGenI,EAAMo5B,wBAA/Cw4Q,EAH0B,EAG1BA,uBAAwBI,EAHE,EAGFA,cAC/B,MAAO,CACL7pS,WACA0X,eAAgB7f,EAAMqN,gBACtBsH,iBAAkB3U,EAAM4U,YAAYD,iBACpCktF,aACA9vE,mBACA6/Q,yBACAI,mBAKF,CAAyBynL,K,8HCvF3B,O,OACA,OAEA,OAEA,S,uDAEMC,G,6OAMJC,gCAAkC,WAChC,EAAK3mX,MAAM2hH,4BAA4B,EAAK3hH,MAAM4hH,uB,gGAKlD,OAKE,kCAAQtiI,UAAU,8BAA8BkyF,QAAS98K,KAAKiyd,iCAC5D,4CAAkBjqd,GAAIhI,KAAKsrG,MAAM4hH,qBAAuB,0CAA4C,6C,kBAhBnGhrE,UAAY,G,cA6BN,IAAAp2C,UAPS,SAACxzG,GACvB,MAAO,CACL40N,qBAAsB50N,EAAMsS,oBAAoBsiN,qBAChDp7M,mBAAoBxZ,EAAMqN,gBAAgB+B,YAIN,CACtCulN,yDADa,CAEZ+kQ,I,6FCxCH,O,WACA,MACA,OACA,OACA,Q,IACA,O,IACA,SACA,SACA,Q,mDAEA,IAGME,EAAuB,SAAC5mX,GAAU,IAE/BymE,EAAsFzmE,EAAtFymE,aAAc/tK,EAAwEsnG,EAAxEtnG,YAAa8N,EAA2Dw5F,EAA3Dx5F,mBAAoBnK,EAAuC2jG,EAAvC3jG,QAASw2W,EAA8B7yQ,EAA9B6yQ,SAAU95C,EAAoB/4N,EAApB+4N,iBAFnC,GAIE,IAAAljL,WAAS,GAJX,qBAI/B8zP,EAJ+B,KAIjBC,EAJiB,KAMhCE,EAAqB,kBAAMF,GAAiBD,IAM5CI,EAAsB,SAACC,GAC3BvjO,EAAaujO,EAhBD,cAgBiCA,IAG/C,OACE,+BAAK1qT,UAAU,sBACb,mCAAWA,UAAW,mDACjBqqT,EAAe,qCAAuC,IAChDpsH,aAAa,EACbuxD,aAAc,MACdpyU,GAAG,qBACH8tN,SAAUu/K,EACV11K,OAAQy1K,EACRtsH,aAAcusH,EACdn+Y,MAAOyQ,IACjBstY,EAAe,KAAO,6BAAGrqT,UAAU,wBACjC,IAAAl3E,sBAAqB5B,EAAoBuyT,EAAmB18T,EAAUw2W,IAEzE,iCAAOp4C,QAAQ,qBAAqBn7O,UAAU,0BAA0BkyF,QAASs4N,GAC/E,oCAAU3pS,MAAO,UAAaznG,GAAa4nG,YAMnDsmX,EAAqBhwU,UAAY,CAC/By9E,OAAQ,UAAU5gD,KAClBo/L,SAAU,UAAUh8N,UAAU,CAAC,UAAUvpC,OAAQ,UAAUp2E,UAG7D,IAWM8tJ,EAAqB,CACzBve,6B,WAGa,IAAAhqB,aACb,IAAAj8C,UAhBsB,SAACxzG,GAAU,IAC1B0L,EAAe1L,EAAMgR,YAArBtF,YAD0B,EAEG1L,EAAM8J,UAAnCuF,EAF0B,EAE1BA,QAAS08T,EAFiB,EAEjBA,iBAChB,MAAO,CACLvyT,mBAAoBxZ,EAAMqN,gBAAgB+B,SAC1CC,UACA08T,mBACArgU,iBASuBssL,EAAzB,CAA6C4hS,K,qICvE/C,O,OACA,OACA,QACA,OAEA,Q,IACA,O,IACA,Q,uDAEMC,E,yOAEJ/W,eAAiB,WAGf,GAD2B,EAAK9vW,MAAMx5F,mBACfuD,0BAA4B,UAAgBq4L,kBAAhB,gBAAqC,EAAKpiG,QAC3F,OAAO,EAGT,UAAUnqE,eAAe,mCACzB,EAAKmqE,MAAM9kF,8BAA6B,GACnCruB,OAAO2B,SAASC,KAAKI,SAAS,eACjC,EAAA+3B,YAAYn9B,KAAK,e,gGAKnB,OACE,kCAAQ61F,UAAU,oCAAoCkyF,QAAS98K,KAAKo7c,gBAClE,4CAAkBpzc,GAAG,gDACrB,oCAAM,4CAAkBA,GAAG,sD,2BAYpB,IAAA8jG,UANS,SAACxzG,GACvB,MAAO,CACLwZ,mBAAoBxZ,EAAMqN,gBAAgB+B,YAIN,CACtC8e,4DACAwC,mCAFa,CAGZmpc,I,oIC5CH,O,IACA,S,IAEA,S,IACA,OACA,QACA,QAKA,S,IACA,O,uDAEMC,E,yOAsBJC,kBAAoB,WAElB,OADA,EAAK/mX,MAAMxnF,uBAAsB,EAAO,EAAKwnF,MAAM7nF,YAAY,IACxDrtB,QAAQC,W,EAGjByqZ,wBAA0B,SAAClzY,GACzB,UAAUuzB,eAAe,wBACzB,IAAMjmB,GAAS,IAAAC,oBACf,GAAID,EAAOc,aAAc,CACvB,IAAMs2c,EAAep3c,EAAOc,aAAa,GAAGvlB,KAC5C,EAAK60G,MAAM14E,oBAAoB0/b,IAC/B,IAAA7uQ,mBAAkB6uQ,EAAc1kd,QAEhC,EAAKykd,oBACFxgc,MAAK,YACJ,IAAAs4N,iBAAgB,EAAK7+I,MAAMmyE,WAAY7vK,GAAO,MAGpD,EAAK09F,MAAM1lF,iCAAiChY,I,EAG9C8yY,gBAAkB,WAChB,IAAMxlY,GAAS,IAAAC,oBACf,GAAID,EAAOc,aAAc,CACvB,IAAM+B,GAAmB,aAAO7C,EAAOc,cAAc,SAAAM,GAAA,OAAcA,EAAWhG,SAAO,GACrF,EAAKgnK,SAAS,CACZv+J,aAAchB,EAAiBtB,eAE5B,CACL,IAAMyqY,EAAWxyZ,OAAOmc,KAAKqK,EAAOsD,OAAO,GAC3C,EAAK8+J,SAAS,CACZv+J,aAAc7D,EAAOsD,MAAM0oY,GAAUzqY,UAAS,O,2GAnDhC,WAClBzc,KAAK0gZ,gBAAgB1gZ,KAAKsrG,OACtBtrG,KAAKkgZ,aACPlgZ,KAAKkgZ,WAAWr5V,iBAAiB,SAAU7mD,KAAKsgZ,wBAEhD5xT,YAAW,WACL,EAAKwxT,aACP,aAAE,EAAKA,YAAY1yT,QAAQ,CAACC,WAAY,EAAKyyT,WAAWxnG,aAAc,OAEvE,M,6CAKD14S,KAAKkgZ,YACPlgZ,KAAKkgZ,WAAWh9S,oBAAoB,SAAUljG,KAAKsgZ,yBAErD,iH,+BAwCA,OAAOtgZ,KAAK2gZ,iBAAgB,O,yBAwBjB,IAAA70S,UApBS,SAACxzG,GAAU,MACiDA,EAAMgR,YAAjFqX,EAD0B,EAC1BA,YAAa6qF,EADa,EACbA,kBAAmBm2E,EADN,EACMA,kBAAmBS,EADzB,EACyBA,qBAE1D,MAAO,CAELzhK,cACA8D,qBAAsBnsB,EAAMytB,eAAetB,qBAC3CliB,UAAWjK,EAAM8J,UAAUG,UAC3B4jB,cAAe7tB,EAAMytB,eAAeI,cACpCq6T,mBAAoBloV,EAAMytB,eAAey6T,mBACzC16T,2BAA4BxtB,EAAMytB,eAAeD,2BACjD/H,iBAAkBzlB,EAAMgsL,QAAQvmK,iBAChCytF,oBACAm2E,oBACAS,uBAEA3+J,YAAanrB,EAAMgrN,WAAW7/L,eAIM,CACtCmC,oEACAgN,0CACA9O,+CAHa,CAIZsuc,I,6FCrGH,O,OACA,OACA,O,IACA,M,mDAEA,IAAMG,EAAc,SAACjnX,GAAU,IAEtBk1C,EAA8El1C,EAA9Ek1C,SAAU1mG,EAAoEwxD,EAApExxD,QAASwtW,EAA2Dh8S,EAA3Dg8S,kBAAmBE,EAAwCl8S,EAAxCk8S,qBAAsBD,EAAkBj8S,EAAlBi8S,eAFtC,GAGe,IAAApmQ,WAAS,GAHxB,qBAGtBqnU,EAHsB,KAGNC,EAHM,QAIiC,IAAAtnU,WAAS,GAJ1C,qBAItBqxU,EAJsB,KAIGC,EAJH,MAM7B,IAAA9wW,YAAU,cAEP,IAEH,IAMM+wW,EAAmB,WACvBjK,GAAmBD,GACnBiK,GAA2B,IAWvBr4Y,EAAS,CACbv6E,OAAQ2od,EAAiBjhE,EAAiB,KAAO,GAGnD,OACE,+BAAK38T,UAAW,YAAc49X,EAAiB,oBAAsB,KAClE1ua,EAAQwtW,GAAmBntU,QAC5B,kCAAQyQ,UAAU,+BAA+BkyF,QAfrB,WAC9B,IAAK01S,IAA4BhK,EAE/B,OADAkK,KACO,EAET54a,EAAQwtW,GAAmBG,kBAWvB,4CAAkBz/Y,GAAI8xC,EAAQwtW,GAAmBl+E,YAEnD,kCAAQx+O,UAAU,mBACVkyF,QAAS41S,IACjB,+BAAK9nY,UAAU,qBAAqBv2E,MAAO+lE,GACxCtgC,EAAQhyC,KAAI,SAACuvG,EAAQs7W,GACpB,OACE,kCAAQ/nY,UAAU,+BAA+BkyF,QAAS,kBAlC1C,SAAC61S,GACzBnrE,EAAqBmrE,GACrB74a,EAAQ64a,GAAalrE,gBACrBghE,GAAkB,GA+BsD/+J,CAAkBipK,IAAcn7d,IAAKm7d,GACnG,4CAAkB3qd,GAAIqvG,EAAO+xN,eAIlC5oL,GAEH,gCAAM51D,UAAU,yBAKtB2nY,EAAYrwU,UAAY,CACtB1B,SAAU,UAAU2B,UAAU,CAAC,UAAU48B,KAAM,UAAUmlG,OACzDojI,kBAAmB,UAAU1uS,OAAOK,WACpCuuS,qBAAsB,UAAUzoO,KAAK9lE,WACrCn/D,QAAS,UAAUzjC,MAAM4iG,WACzBsuS,eAAgB,UAAU3uS,OAAOK,Y,WAcpB,IAAA8uC,aACb,IAAAj8C,UAZsB,SAACxzG,GACvB,MAAO,CACLkzN,2BAA4BlzN,EAAMkwO,iBAAiBhd,2BACnD7qM,YAAaroB,EAAMgR,YAAYqX,eAIR,GAKzB,CAA6C4xc,K,8ECjF/C,I,IAAA,MACA,O,IAEA,SACA,S,8DAsDe,IAAAzmX,UAfS,SAACxzG,GAAU,MACMA,EAAMqY,YAAtC0Z,EAD0B,EAC1BA,iBAAkB8vE,EADQ,EACRA,WADQ,EArCT,SAAC9vE,EAAkBpd,EAAkBktF,GAC7D,IAAIC,EAAa,KACb+nB,EAAe,GACf42D,EAAa,EAEX65S,EAAsBvoc,EAAiBrjB,QAAO,SAAA6rd,GAAA,OAAYA,EAAS7ld,aAAeC,KACpF6ld,EAAqBF,EAAoB9md,MAAK,SAAAsuG,GAChD,OAAOA,EAAQc,qBAAsB,IAAAnB,wBAAuBK,MAiB9D,OAfK04W,GAAsBF,EAAoBn+d,SAC7Cq+d,EAAqBF,EAAoBA,EAAoBn+d,OAAS,IAEpEq+d,IACF14X,EAAaD,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,KAAO8qd,EAAmB13W,mBAExE+G,EAAe2wW,EAAmBhid,qBAClCioK,EAAazwK,OAAOC,UAAUuqd,EAAmB5uV,iBAC7C4uV,EAAmB5uV,gBACnBxvI,OAAOmc,KAAKiid,EAAmBhid,sBAAsBrc,QAGxD2lG,IACHA,EAAaD,EAAW,IAEnB,CAACC,aAAY+nB,eAAc42D,cAgBag6S,CAAkB1oc,EADtC/xB,EAAM4U,YAA1BD,iBAC8FktF,GAA9FC,EAH0B,EAG1BA,WACP,MAAO,CACL+nB,aAL+B,EAGdA,aAGjB/nB,aACA2+E,WAP+B,EAGAA,cAQR,GAIZ,EAzBuB,SAACztE,GAAU,IAExClR,EAAwCkR,EAAxClR,WAAY+nB,EAA4B7W,EAA5B6W,aAAc42D,EAAcztE,EAAdytE,WAEjC,OAAO,mCAA4BwoO,gBAAgB,EAChBnnT,WAAYA,EACZ+nB,aAAcA,EACd42D,WAAYA,Q,uHCxCjD,MACA,O,IACA,M,IACA,O,IACA,QACA,OACA,QAGA,SACA,QACA,Q,IAIA,Q,IACA,OACA,Q,IACA,QACA,SACA,SACA,Q,mDAEA,IAAMiiG,EAAQ,SAAC1vK,GAAU,IAMjB,EASA,EAbCxyF,EACsDwyF,EADtDxyF,OAAQY,EAC8C4xF,EAD9C5xF,MAAO1M,EACuCs+F,EADvCt+F,WAAYC,EAC2Bq+F,EAD3Br+F,iBAAkB4kK,EACSvmE,EADTumE,oBAAqBtvK,EACZ+oG,EADY/oG,UAAWkY,EACvB6wF,EADuB7wF,KAAMtC,EAC7BmzF,EAD6BnzF,eAAgBgV,EAC7Cm+E,EAD6Cn+E,gBACxG44G,EAA2Dz6B,EAA3Dy6B,sBAAuB57G,EAAoCmhF,EAApCnhF,eAAgBE,EAAoBihF,EAApBjhF,iBAGnC2oc,GAAA,gCAAa,uFACbhmd,IAAeC,EADF,iCAET,IAAA48G,sBAFS,cAGfgoD,EAAoB7kK,GAHL,UAIT,IAAAs2K,mBAAkBt2K,EAAY8L,GAJrB,QAKf,IAAAkwK,6BAA4Bh8K,GALb,kDAAb,4CASAimd,GAAA,gCAAmB,WAAO98d,GAAP,8EACvBA,EAAE40F,iBACF50F,EAAE20F,kBACFhyE,EAAOnjB,OAAOsX,EAAkB,GAChCimd,EAAyBp6c,GACrB7L,GACF4kK,EAAoB5kK,EAAmB,GANlB,UAQjB,IAAAq2K,mBAAkBr2K,EAAmBA,EAAmB,EAAI,EAAG6L,GAR9C,OASvBwyF,EAAMwmE,UAAN,wBAAoBh5J,MACpB,aAAE3gB,QAAQ+pG,QAAQ,UAAYuzB,kBAVP,kDAAnB,6CAaAy9V,EAA2B,SAACp6c,GAAW,IACpCvW,EAAqC+oG,EAArC/oG,UAAWmqB,EAA0B4+E,EAA1B5+E,UAAWgB,EAAe49E,EAAf59E,YACzB7C,EAAetoB,EAChByE,QAAO,SAAAZ,GAAA,OAAYA,EAASoC,eAAiByE,KAC7CnF,KAAI,SAAA1B,GAKH,OAJIA,EAASoC,aAAeyE,IAC1B7G,EAASC,YAAY0kB,UAAU3kB,EAASoC,aAAe,GAAKpC,EAASC,YAAY0kB,UAAU3kB,EAASoC,cACpGpC,EAASoC,aAAepC,EAASoC,aAAe,GAE3CpC,KAEP+sd,EAAsB,GAS1B,GARAtoc,EAAazsB,SAAQ,SAAAgI,GACd+sd,EAAoBh5d,SAASiM,EAASC,YAAY1C,UAAUqE,aACxD5B,EAASC,YAAY0kB,UAAUjS,EAAOrkB,QAC7C0+d,EAAoBp+d,KAAKqR,EAASC,YAAY1C,UAAUqE,QAG5D0kB,IACAgB,EAAY,CAACnrB,UAAWsoB,IACpBV,GAAkBE,EAAiB51B,OAAQ,CAC7C,IAAI2+d,EAAe/oc,EAChBrjB,QAAO,SAAAqsd,GAAA,OAAkBA,EAAermd,aAAeC,KACvDnF,KAAI,SAAAurd,GAIH,OAHIA,EAAermd,WAAaC,IAC9Bomd,EAAermd,WAAaqmd,EAAermd,WAAa,GAEnDqmd,KAEXttV,EAAsBqtV,KAqBpBj6T,EAAWnsJ,IAAeC,EAE1BiO,GAAS,IAAAC,kBAAiBzB,EAAML,MAClC4xJ,EAAavxJ,EAAM0wG,mBAAqB1wG,EAAMywG,QAC9CrmC,EAAa,GACX5kE,EAAa5W,OAAOC,UAAUmR,EAAMwF,YAAcxF,EAAMwF,WAAahE,EAAO9P,KAC9E9C,OAAOC,UAAU2W,KAAgB+rJ,IACnCnnF,GAAa,aAAO5oE,EAAOynN,aAAazjN,IAE1C,IAAMk7D,EAAS,CACb0R,uBAAwBm/E,EAAxB,KAGIqoT,EAAgBx6c,EAAOrkB,OAAS,EAEhC8+d,EAAmBp6T,GAAYm6T,IAAmBA,EAExD,OACE,8BAAI1oY,UAAW,qBAAuBuuE,EAAW,6BAA+B,IAC5E2jB,QAASk2S,EAAY3+c,MAAO+lE,GAC7Bk5Y,EACC,8BAAI1oY,UAAU,2BACX,IAAA/xE,aAAY7L,EAAYzK,EAAWuW,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,IAExE,KACH2rE,IAAemnF,EAAa,mCAAsB/vJ,OAAQA,EAAQ2kN,QAAS/7I,EAAY62N,WAAW,IAAU,KAC5G44K,EACC,kCAAQ3oY,UAAU,iCAAiCkyF,QA5ClC,SAAC3mL,GACtBA,EAAE40F,iBACF50F,EAAE20F,mBACE,IAAAk+F,6BAA4B/7K,IAC9B,aAAiB,gBAAgB,IAGnC,aAAiB,gBAAgB,MAsC3B,KACHsmd,IAAmB,IAAA71c,qBAChB,kCAAQktE,UAAU,iCAAiCkyF,QArCpC,SAAC3mL,GACtBA,EAAE40F,iBACF50F,EAAE20F,kBACF39D,EAAgB,gBAChB,EAAA+E,YAAYn9B,KAAK,WAkCX,KACHokK,GAAYm6T,EACX,kCAAQ1oY,UAAU,qCAAqCkyF,QAASm2S,IAC9D,OAKVj4M,EAAM94H,UAAY,CAChBxoI,MAAO,UAAU/hB,OACjBqV,WAAY,UAAU4rG,QAGxB,IAaM03E,EAAqB,CACzBze,0CACAC,sBACAplJ,sBACAgB,0BACAP,kCACA44G,+C,WAGa,IAAAgiB,aACb,IAAAj8C,UAvBsB,SAACxzG,GAAU,MACUA,EAAMqY,YAA1C0Z,EAD0B,EAC1BA,iBAAkBF,EADQ,EACRA,eACzB,MAAO,CACLxJ,YAAaroB,EAAMgR,YAAYqX,YAC/B7H,OAAQxgB,EAAM4U,YAAY4L,OAC1B7L,iBAAkB3U,EAAM4U,YAAYD,iBACpC1K,UAAWjK,EAAM8J,UAAUG,UAC3B4V,eAAgB7f,EAAMqN,gBACtBwkB,iBACAE,sBAcuBimK,EAAzB,CAA6C0qF,K,0HCxK/C,O,OACA,O,IACA,S,IACA,S,IACA,SACA,QACA,S,IACA,S,IACA,S,IACA,S,uDAEMw4M,E,gNAIF,IAAM9od,GAAmB,IAAAI,aAAY9K,KAAKsrG,MAAM5gG,kBAChD,OACE,+BAAKkgF,UAAU,aACZlgF,EAAiB5C,KAAI,SAAC+C,EAAiBi0W,GACtC,GAAIj0W,EAAgBO,OAAS,EAAAyvK,uBAAuBP,QAClD,OAAO,KAET,IAAMhvD,GAAY,IAAAxgH,aAAYD,EAAgBygH,WAAWtkH,QAAO,SAACo2X,GAAD,OAAWA,EAAK5xQ,cAChF,OACE,+BAAKh0H,IAAKsnX,EAAsBl0R,UAAW,qBACzC,8BAAIA,UAAU,sBAAsB//E,EAAgBpU,MACpD,8BAAIm0F,UAAU,kBACX0gC,EAAUxjH,KAAI,SAACmD,GACd,IAAMzT,EAAMyT,EAASmwK,MAASnwK,EAASjD,GAAK,IAAMiD,EAASqL,MAC3D,GAAIrL,EAASqwK,aACX,OAAQrwK,EAASqwK,cACf,KAAK,EAAApB,oBAAoBC,SACvB,OAAO,mCAAa3iL,IAAKA,EACLyT,SAAUA,EACVJ,gBAAiBA,IACvC,KAAK,EAAAqvK,oBAAoBE,SACvB,OAAO,mCAAkB5iL,IAAKA,EACLyT,SAAUA,EACVJ,gBAAiBA,IAC5C,KAAK,EAAAqvK,oBAAoBG,OAEvB,OAAOpvK,EAASowK,aAAe,KAAO,mCAAsB7jL,IAAKA,EACLyT,SAAUA,EACVJ,gBAAiBA,IAC/E,KAAK,EAAAqvK,oBAAoBI,QACvB,OAAO,mCAAiB9iL,IAAKA,EACLyT,SAAUA,EACVJ,gBAAiBA,IAC3C,KAAK,EAAAqvK,oBAAoBK,QACvB,OAAO,mCAAiB/iL,IAAKA,EACLyT,SAAUA,EACVJ,gBAAiBA,IAC3C,QACE,OAAO,mCAAUrT,IAAKA,EACLyT,SAAUA,EACVJ,gBAAiBA,IAIxC,QAAQ,GACN,KAAKI,EAASiwK,SACZ,OAAO,mCAAa1jL,IAAKA,EACJyT,SAAUA,EACVJ,gBAAiBA,IACxC,KAAKI,EAASkwK,WACZ,OAAO,mCAAkB3jL,IAAKA,EACLyT,SAAUA,EACVJ,gBAAiBA,IAC5C,QACE,OAAO,mCAAUrT,IAAKA,EACLyT,SAAUA,EACVJ,gBAAiBA,kB,2BAmBzC,IAAAihG,UAPS,SAACxzG,GACvB,MAAO,CACLoS,iBAAkBpS,EAAMsS,oBAAoBF,iBAC5CyN,eAAgB7f,EAAMqN,mBAIc,GAAzB,CAEZ6td,I,kIC5FH,MACA,O,IACA,MAEA,SACA,S,uDAGMh5G,G,oNAOK,IACAvvW,EAAYjL,KAAKsrG,MAAjBrgG,SACD63E,EAAW9iF,KAAK8nR,qBACtB,OACE,8BAAIl9L,UAAW,YAAc9H,EAAW,sBAAwB,KAC9D,+BAAK8H,UAAU,uCACb,kCAAQA,UAAW,eAAiB3/E,EAASsgH,SAAW,wBAA0B,IAC1EuxD,QAAS98K,KAAK6nR,6BAExB,+BAAKj9L,UAAU,oCAAoCkyF,QAAS98K,KAAK6nR,2BAC9D58Q,EAASsgH,SAAWtgH,EAASxU,KAAO,MAEtCwU,EAASsgH,SACR,+BAAK3gC,UAAU,uCACZ5qF,KAAKwoR,qBAEN,U,KAzBZ,Q,WAIStmI,UAAY,CACjBj3I,SAAU,UAAU2uC,MAAV,qBACV/uC,gBAAiB,UAAU+uC,MAAV,8B,GAuCf02I,EAAqB,CACzBz8D,2C,WAGa,IAAA/nB,UAlBS,SAACxzG,GAAU,MACgBA,EAAMsS,oBACvD,MAAO,CACLF,iBAH+B,EAC1BA,iBAGLM,qBAJ+B,EACRA,qBAKvBzI,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1BE,gBAAiBnP,EAAMqN,gBAAgB8B,gBAEvCqK,mBAAoBxZ,EAAMqN,gBAAgB+B,YAQN4oL,EAAzB,CAA6CkqL,I,6ICvD5D,MACA,O,IACA,MACA,OAEA,S,IACA,QACA,S,uDAEMi5G,G,6OAOJC,0BAA4B,SAAC9yX,GAC3B,IAAM+yX,EAAgB,EAAKroX,MAAMrgG,SAASwwK,eAAiBtnE,KAAKC,MAAM,EAAK9I,MAAMrgG,SAASwwK,gBAAkB,GAC5G,EAAKusG,oBAAoB,iBAAkB7zK,KAAK2W,WAAL,gBAAmB6oW,EAAnB,CACzC5jS,eAAgBnvF,EAAMlqF,OAAOxf,W,gGAIxB,aACkB8I,KAAKsrG,MAAvBrgG,EADA,EACAA,SAAUwP,EADV,EACUA,KACXqoE,EAAW9iF,KAAK8nR,qBAMhBrsG,EAAiBxwK,EAASwwK,eAAiBtnE,KAAKC,MAAMnpG,EAASwwK,gBAAkB,KAEvF,OACE,8BAAI7wF,UAAW,YAAc3/E,EAASsgH,SAAW,qBAAuB,KACrEzoC,EAAW,sBAAwB,KAclC,+BAAK8H,UAAU,uCACb,kCAAQA,UAAW,eAAiB3/E,EAASsgH,SAAW,wBAA0B,IAC1EuxD,QAAS98K,KAAK6nR,6BAExB,+BAAKj9L,UAAU,6CACZ3/E,EAASsgH,SACN,iCAAO3gC,UAAU,kCACV1zF,MAAO+T,EAASxU,KAChBq/N,SAAU,SAACl1H,GAAD,OAAW,EAAKonL,oBAAoB,OAAQpnL,EAAMlqF,OAAOxf,UAC1E,KACH+T,EAASsgH,UAAYkwD,GAAkBA,EAAe3wB,SAAW2wB,EAAe3wB,QAAQr2J,OACvF,kCAAQgC,KAAK,GACLm0F,UAAW,wEACN6wF,EAAesU,eAAiB,GAAK,oCAC1C74L,MAAOukL,EAAesU,gBAAkB,cACxCmvH,UAAU,EACVppF,SAAU91N,KAAK0zd,2BACrB,kCAAQx8d,MAAM,cAAc4rF,UAAA,EAAS+1K,QAAA,GAClCp+O,EAAKC,cAAc,CAAC1S,GAAI,gDAE1ByzK,EAAe3wB,QAAQhjJ,KAAI,SAACo4E,EAAQ0zY,GACnC,OAAO,kCAAQp8d,IAAKo8d,EAAc1zY,EAAQhpF,MAAOgpF,GAASA,OAG5D,MAER,+BAAK0K,UAAU,+CACZ6wF,IAAmBA,EAAesU,eAAiB,KAAO/vL,KAAK2oR,0B,gBAjEjEzmI,UAAY,CACjBj3I,SAAU,UAAU2uC,MAAV,qBACV/uC,gBAAiB,UAAU+uC,MAAV,8B,GAyFf02I,EAAqB,CACzBz8D,2C,WAGa,IAAAk0B,aACb,IAAAj8C,UApBsB,SAACxzG,GAAU,MACgBA,EAAMsS,oBACvD,MAAO,CACLF,iBAH+B,EAC1BA,iBAGLM,qBAJ+B,EACRA,qBAKvBzI,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1B4Q,eAAgB7f,EAAMqN,gBACtB8B,gBAAiBnP,EAAMqN,gBAAgB8B,gBACvCqK,mBAAoBxZ,EAAMqN,gBAAgB+B,YAUnB4oL,EAAzB,CAA6CmjS,K,kIC3G/C,MACA,O,IACA,MAEA,SACA,S,uDAIMI,G,oNAOK,IACA5od,EAAYjL,KAAKsrG,MAAjBrgG,SACP,OACE,8BAAI2/E,UAAW,8BACb,+BAAKA,UAAU,qCAAqC3/E,EAASxU,MAC7D,+BAAKm0F,UAAU,+CACZ5qF,KAAK2oR,0B,KAhBhB,Q,WAKSzmI,UAAY,CACjBj3I,SAAU,UAAU2uC,MAAV,qBACV/uC,gBAAiB,UAAU+uC,MAAV,8B,GA+Bf02I,EAAqB,CACzBz8D,2C,WAGa,IAAA/nB,UAnBS,SAACxzG,GAAU,MACgBA,EAAMsS,oBACvD,MAAO,CACLF,iBAH+B,EAC1BA,iBAGLM,qBAJ+B,EACRA,qBAKvBzI,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1BE,gBAAiBnP,EAAMqN,gBAAgB8B,gBAEvC0Q,eAAgB7f,EAAMqN,gBACtBmM,mBAAoBxZ,EAAMqN,gBAAgB+B,YAQN4oL,EAAzB,CAA6CujS,I,8HChD5D,MACA,O,IACA,MACA,OAEA,SAMA,S,IAKA,S,IACA,QACA,SACA,Q,uDAGMC,E,yOAkBJC,sBAAwB,SAACC,GACvB,EAAK1oX,MAAM8hH,qBAAqB4mQ,EAAa/od,SAAS8vK,oB,EAGxDk5S,iBAAmB,SAACntJ,EAAcu4C,GAAkB,IAC3Cp0W,EAAY,EAAKqgG,MAAjBrgG,SACHm0W,EAAmD,iBAA5Bn0W,EAASswK,eAChCpnE,KAAKC,MAAMnpG,EAASswK,gBACpB,GACJ6jM,EAAcC,GAAiBv4C,EAAa77T,SAASmwK,KACrD,EAAK4sG,oBAAoB,iBAAkB7zK,KAAK2W,UAAUs0P,K,EAG5D80G,mBAAqB,SAAC/0G,EAAgBvnX,GAAqC,IAA3Bu8d,EAA2B,uDAAP,GAC9DC,EAA0B,GAU9B,OATAj1G,EAAe7zP,UAAUltH,SAAQ,SAACs1H,GAC3B0gW,EAAwBn0d,MAAK,SAAA+zd,GAAA,OAAgBA,EAAa/od,SAASrT,KAAc87H,EAAI97H,OACxFw8d,EAAwBr/d,KAAK,CAC3BmC,MAAOw8H,EAAI0nD,MAAS1nD,EAAI1rH,GAAK,IAAM0rH,EAAIp9G,MACvCgM,KAAMoxG,EAAI97H,GAAYu8d,EACtBlpd,SAAUyoH,OAIT0gW,G,EAGTC,eAAiB,WACV,EAAK/oX,MAAMkiH,qBACd,EAAKliH,MAAMiiH,wBAAuB,I,2GA7ClB,MACsCvtN,KAAKsrG,MAAtDrgG,EADW,EACXA,SAAU8vK,EADC,EACDA,kBACXokM,EAFY,EACkBz0W,iBACIoB,MAAK,SAAAkjL,GAAA,OAAOA,EAAI5jL,OAAS,EAAAyvK,uBAAuBP,WAClF8kM,EAAmD,iBAA5Bn0W,EAASswK,eAClCpnE,KAAKC,MAAMnpG,EAASswK,gBACpB,GAEJ,IAAKR,GAAqBokM,EAAgB,CACxC,IAAMm1G,EAAiBn1G,EAAe7zP,UAAUx/G,MAAK,SAAA4nH,GAAA,OAAO0rP,EAAcjlX,SAASu5H,EAAI0nD,OAAS1nD,EAAIqnD,sBAC/FokM,EAAe7zP,UAAUx/G,MAAK,SAAA4nH,GAAA,OAAOA,EAAIqnD,qBAC1Cu5S,GACFt0d,KAAKsrG,MAAM8hH,qBAAqBknQ,EAAev5S,sB,+BAsC5C,aAEkB/6K,KAAKsrG,MADvBrgG,EADA,EACAA,SAAUP,EADV,EACUA,iBAAkBqwK,EAD5B,EAC4BA,kBAAmBsyC,EAD/C,EAC+CA,iCAAkC5yM,EADjF,EACiFA,KACtF+yM,EAFK,EAELA,oBACI2xJ,EAAiBz0W,EAAiBoB,MAAK,SAAAkjL,GAAA,OAAOA,EAAI5jL,OAAS,EAAAyvK,uBAAuBP,WACxF,IAAK6kM,EACH,OAAO,KAGT,IAAIC,EAAmD,iBAA5Bn0W,EAASswK,eAChCpnE,KAAKC,MAAMnpG,EAASswK,gBACpB,GAKE64S,EAA0Bp0d,KAAKk0d,mBAAmB/0G,EAAgB,oBAAqB,KACvFo1G,EAAqBv0d,KAAKk0d,mBAAmB/0G,EAAgB,gBAAiB,IAAM1kW,EAAKC,cAAc,CAAC1S,GAAI,mCAE5GrG,GAAa,IAAA+E,iBACbqjH,GAAa,IAAA7oH,wBAAuBS,EAAY+I,GAEtD,OACE,8BAAIkgF,UAAW,8BACb,+BAAKA,UAAU,yBACb,gCAAMA,UAAU,cACd,4CAAkB5iF,GAAG,yCAEvB,gCAAM4iF,UAAU,8BACd,4CAAkB5iF,GAAG,4CAEvB,+BAAK4iF,UAAU,mCACb,+BAAKA,UAAU,gBACb,mCAAkB69T,cAAe2rE,EACfzrE,cAAeluY,EAAKC,cAAc,CAAC1S,GAAI,sCACvC++T,gBAAiB/mU,KAAK+zd,uBACtC,+BAAKnpY,UAAU,aAAamwF,EAA5B,OAGJ,kCAAQnwF,UAAU,mDACVkyF,QAAS,kBAAMuwC,GAAiC,KADxD,OAIJ,+BAAKziI,UAAU,QACZl2F,OAAOmc,KAAP,0BAAoC/I,KAAI,SAAClQ,EAAUynX,GAClD,IAAME,EAAmBJ,EAAe7zP,UAAUx/G,MAAK,SAAA4nH,GAAA,OAAOA,EAAI0nD,OAASgkM,EAAcC,MACzF,OACE,+BAAKz0R,UAAW,6DACX4iI,EAAsB,oCAAsC,IAC5D1wC,QAAS,EAAKu3S,eACd78d,IAAKI,GACR,mCAAkB6wZ,cAAe8rE,EACf5rE,cAAeluY,EAAKC,cAAc,CAAC1S,GAAI,gCACvC++T,gBAAiB,SAACD,GAAD,OAAkB,EAAKmtJ,iBAAiBntJ,EAAcu4C,KACvF,+BAAKz0R,UAAU,iCACZ20R,EACGA,EAAiBvkM,cAAgB,IAAMvgK,EAAKC,cAAc,CAAC1S,GAAI,kCAC/DyS,EAAKC,cAAc,CAAC1S,GAAI,wCAGhC,+BAAK4iF,UAAU,iCACZ4iI,GAAsB,IAAAr+B,oBACrB,EAAK7jF,MACLi0Q,EAAmBA,EAAiBvkM,cAAgB,EACpDjxD,GACE,gB,cAWtB+pW,EAAgB5xU,UAAY,CAC1Bj3I,SAAU,UAAU2uC,MAAV,qBACV/uC,gBAAiB,UAAU+uC,MAAV,8BAGnB,IAiBM02I,EAAqB,CACzBz8D,0CACAu5F,4CACAC,oEACAE,iD,WAGa,IAAAxlE,aACb,IAAAj8C,UAzBsB,SAACxzG,GAAU,MACwDA,EAAMsS,oBAC/F,MAAO,CACLF,iBAH+B,EAC1BA,iBAGLM,qBAJ+B,EACRA,qBAIvB+vK,kBAL+B,EACcA,kBAK7CyyC,oBAN+B,EACiCA,oBAOhEjrN,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1BE,gBAAiBnP,EAAMqN,gBAAgB8B,gBAEvC0Q,eAAgB7f,EAAMqN,gBACtBmM,mBAAoBxZ,EAAMqN,gBAAgB+B,YAYnB4oL,EAAzB,CAA6CwjS,K,yIClL/C,O,OACA,O,IACA,MAEA,SACA,S,IACA,Q,IACA,S,IACA,OACA,S,IACA,M,uDAEMU,G,+NAOgB,aACiCx0d,KAAKsrG,MAAjDzgG,EADW,EACXA,gBAAiBsiN,EADN,EACMA,wBAClBniN,EAAuB,UAAM7I,WAAWyI,oBAAoBI,qBAClE,IAAKA,EAAqB/K,MAAK,SAAAgL,GAAA,OAAYA,EAASowK,cAAiBpwK,EAASowK,eAAiB,EAAK/vE,MAAMrgG,SAASmwK,QAAQ,CACzH,IAAMq5S,EAAY5pd,EAAgBygH,UAAUtkH,QAAO,SAAA0sH,GAAA,OAAOA,EAAI2nD,cAAiB3nD,EAAI2nD,eAAiB,EAAK/vE,MAAMrgG,SAASmwK,QAClHs5S,GAAS,eACfvnQ,0BAA4BniN,GAA5B,CAAkDtW,OAAO+2B,OAAO,GAAIgpc,EAAU,GAAI,CAChFxlS,WAAYpkL,EAAgB7C,GAC5BA,GAAI0sd,EACJt5S,KAAMs5S,EACNp+c,OAAO,IAAAs5K,4BAA2B5vL,KAAKsrG,MAAMrgG,eAE/CjL,KAAKsrG,MAAMuoB,oBAAX,wBAAmC7zH,KAAKsrG,MAAM5gG,uB,+BAIzC,aACyC1K,KAAKsrG,MAA9CzgG,EADA,EACAA,gBAAiBG,EADjB,EACiBA,qBAClB2pd,EAAgBA,CACpB,CAACzpa,SAAS,IADN,qBAEDrgD,EAAgBygH,UAAUtkH,QAAO,SAAA0sH,GAAA,OAAOA,EAAI2nD,cAAiB3nD,EAAI2nD,eAAiB,EAAK/vE,MAAMrgG,SAASmwK,UAE3G,GAA6B,IAAzBu5S,EAAclge,OAChB,OAAO,KAET,IAAMmge,EAAoB5pd,EAAqBhE,QAAO,SAAAiE,GAAA,OAAYA,EAASowK,cAAiBpwK,EAASowK,eAAiB,EAAK/vE,MAAMrgG,SAASmwK,QAI1I,OACE,wCACGw5S,EAAkB9sd,KAAI,SAAC+sd,EAAaC,GACnC,OAAO,mCAAqBt9d,IAAKq9d,EAAYz5S,KACjBnwK,SAAU4pd,EACVE,eAAgB,EAAKzpX,MAAMrgG,SAC3B6pd,iBAAkBA,EAClBH,cAAeA,EACfC,kBAAmBA,EACnB/pd,gBAAiBA,Y,gBA3C9Cq3I,UAAY,CACjBj3I,SAAU,UAAU2uC,MAAV,qBACV/uC,gBAAiB,UAAU+uC,MAAV,8B,GA8Df02I,EAAqB,CACzBz8D,0CACAs5F,mD,WAGa,IAAArhH,UAnBS,SAACxzG,GAAU,MACgBA,EAAMsS,oBACvD,MAAO,CACLF,iBAH+B,EAC1BA,iBAGLM,qBAJ+B,EACRA,qBAKvBzI,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1BE,gBAAiBnP,EAAMqN,gBAAgB8B,gBAEvCqK,mBAAoBxZ,EAAMqN,gBAAgB+B,YASN4oL,EAAzB,CAA6CkkS,I,6ICnF5D,MACA,O,IACA,M,IACA,OAEA,SACA,S,IACA,Q,IACA,SACA,S,uDAEMQ,G,6OAOJC,sBAAwB,SAACjB,GACvB,IAAIkB,EAAmBA,GAAnBA,qBAAuB,EAAK5pX,MAAMtgG,uBAChCgmW,EAAuB,EAAK1lQ,MAAMrgG,SAASmwK,MAAQ85S,EAAiBv4c,WAAU,SAAA1R,GAClF,OAAO,EAAKqgG,MAAMrgG,SAASmwK,OAASnwK,EAASmwK,QAE/C,GAAI41L,GAAwB,EAAG,CAC7B,IAAMmkH,EAAkBnB,EAAa9oa,QAAUgqa,EAAiBlkH,GAAwBgjH,EAAa/od,SACrGiqd,EAAiBv/d,OAAOq7W,EAAsB,EAAGt8W,OAAO+2B,OAAO,GAAI0pc,EAAiB,CAClF5pW,UAAWyoW,EAAa9oa,QACxB+jI,WAAY,EAAK3jF,MAAMzgG,gBAAgB7C,GACvCA,GAAIktd,EAAiBlkH,GAAsB16V,MAC3CA,MAAO4+c,EAAiBlkH,GAAsB16V,MAC9C8kK,KAAM85S,EAAiBlkH,GAAsB51L,QAGjD,EAAK9vE,MAAM6hH,wBAAwB+nQ,GACnC,EAAK5pX,MAAMuoB,oBAAX,wBAAmC,EAAKvoB,MAAM5gG,qB,EAGhD0qd,uBAAyB,WACvB,IAAIF,EAAmBA,GAAnBA,qBAAuB,EAAK5pX,MAAMtgG,uBAChCqqd,EAAqB,EAAK/pX,MAAMspX,kBAAkB,EAAKtpX,MAAMspX,kBAAkBnge,OAAS,GACxFige,GAAS,eACfQ,EAAiBnge,KAAKL,OAAO+2B,OAAO,GAAI,EAAK6/E,MAAMqpX,cAAc,GAAI,CACnEppW,UAAU,EACV0jE,WAAY,EAAK3jF,MAAMzgG,gBAAgB7C,GACvCA,GAAI0sd,EACJt5S,KAAMs5S,EACNp+c,OAAO,IAAAs5K,4BAA2BylS,MAEpC,EAAK/pX,MAAM6hH,wBAAwB+nQ,GACnC,EAAK5pX,MAAMuoB,oBAAX,wBAAmC,EAAKvoB,MAAM5gG,qB,gGAGvC,aACgF1K,KAAKsrG,MAArFrgG,EADA,EACAA,SAAU6pd,EADV,EACUA,iBAAkBF,EAD5B,EAC4BA,kBAAmBD,EAD/C,EAC+CA,cAAeI,EAD9D,EAC8DA,eAE/DtsE,EAAgBksE,EAAc7sd,KAAI,SAAA4rH,GACtC,OAAIA,EAAIxoE,QACC,CACLA,SAAS,EACTh0D,MAAO,OACPorB,KAAM,OACNrX,SAAU0pd,EAAc,GACxB7xY,UAAU,GAGP,CACL5rF,MAAOw8H,EAAI0nD,KACX94J,KAAMoxG,EAAIj9H,KACVwU,SAAUyoH,EACV5wC,SAAU,EAAKglM,mBAAmBp0J,OAOtC,OACE,8BAAI9oC,UAAW,YACb,+BAAKA,UAAU,gDACb,mCAAkB69T,cAAeA,EACfE,cAAe,kBACf5hF,gBAAiB/mU,KAAKi1d,uBACtC,kCAAQrqY,UAAW,kCAGvB,+BAAKA,UAAU,qCACZ3/E,EAASsgH,SAAWtgH,EAASxU,KAAO,KACpCwU,EAASsgH,UAAYwpW,EAAev5S,kBACJ,IAA7Bo5S,EAAkBnge,QAAiBqge,EAAmB,IAAQA,IAAqBF,EAAkBnge,OAAS,EAC9G,kCAAQm2F,UAAU,0CAA0CkyF,QAAS98K,KAAKo1d,yBAC1E,MAELnqd,EAASsgH,SACR,+BAAK3gC,UAAU,uCACZ5qF,KAAKwoR,qBAEN,U,gBAnFHtmI,UAAY,CACjBj3I,SAAU,UAAU2uC,MAAV,qBACV/uC,gBAAiB,UAAU+uC,MAAV,8B,GAqGf02I,EAAqB,CACzBz8D,0CACAs5F,mD,WAGa,IAAArhH,UAnBS,SAACxzG,GAAU,MACgBA,EAAMsS,oBACvD,MAAO,CACLF,iBAH+B,EAC1BA,iBAGLM,qBAJ+B,EACRA,qBAKvBzI,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1BE,gBAAiBnP,EAAMqN,gBAAgB8B,gBAEvCqK,mBAAoBxZ,EAAMqN,gBAAgB+B,YASN4oL,EAAzB,CAA6C0kS,I,kICzH5D,M,IACA,MACA,OACA,Q,IAEA,Q,IACA,S,IACA,S,IACA,OAEA,Q,IAYA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,Q,uDAGMM,G,gBAMJ,WAAYhqX,IAAO,gGACXA,IADW,SAoBnBqjX,gBAAkB,WAChB,IAAMnuK,EAAgB,EAAKouK,aAAa3nT,UAAY,IACpD,EAAKqW,SAAS,CACZkjI,kBAGEA,GAAiB,EAAKl1M,MAAMr+E,oBAC9B,EAAK4hc,yBAA0B,GAEG,IAAhC,EAAKD,aAAa3nT,WAAmB,EAAK4nT,0BAC5C,EAAKA,yBAA0B,EAC/B,EAAKvjX,MAAMt+E,iBAAgB,KA/BZ,EAmCnBo7X,cAAgB,WACd,UAAUjnX,eAAe,4BACzB,EAAKm8I,SAAS,CACZkjI,eAAe,IAEjB,EAAKl1M,MAAMt+E,iBAAgB,IAxCV,EA2CnBm7X,qBAAuB,WACrB,UAAUhnX,eAAe,oCACzB,EAAKmqE,MAAM19E,kBAAiB,IA7CX,EAgDnB5E,gBAAkB,WAChB,EAAKsiF,MAAMtiF,gBAAgB,CACzBiB,iBAAiB,KAlDF,EAsDnBw/S,qBAAuB,WACrB,UAAUtoS,eAAe,4BACzB,EAAKmqE,MAAM5+E,YACX,EAAAwF,YAAYn9B,KAAK,iBAzDA,EA4DnBgtd,qBAAuB,SAACoN,GACtB,OAAI,EAAK7jX,MAAM82E,qBAEX,+BAAKx3F,UAAW,6DAA+DxxF,SAASC,SAASoC,eAC7F,4BACF,yCAIF0zd,EACK,KAEwB,EAAK7jX,MAA/BqkJ,uBAEE,mCAAqBlvP,UAAU,EACV2sY,2BAA2B,EAC3BjnX,cAAe,OAEtC,yCA5EP,EAAKyoc,aAAe,KACpB,EAAK7nd,MAAQ,CACXy5S,eAAe,GAEjB,EAAKquK,yBAA0B,EANd,E,oFAUZ7ud,KAAKsrG,MAAMr+E,mBACdjtB,KAAK4ud,aAAa/na,iBAAiB,SAAU7mD,KAAK2ud,mB,6CAKpDv1d,SAAS6C,KAAKC,UAAU27K,OAAO,mBAC/B73K,KAAK4ud,aAAa1rX,oBAAoB,SAAUljG,KAAK2ud,mB,+BAgE9C,aACwC3ud,KAAKsrG,MAA7CnzF,EADA,EACAA,eAAgB+0M,EADhB,EACgBA,qBACjBp7M,EAAqBqG,EAAezQ,SAGpCo4S,GAFqBhuS,EAAmBiuS,kBACxC3mT,SAASC,SAAS2b,WAAalD,EAAmBkuS,oBACRhgT,KAAKsrG,MAAM/jG,SAAS9S,UAC7DuL,KAAKsrG,MAAM4+L,wBAA2BlqS,KAAKsrG,MAAM8+L,wBAA0B,IAC7EpqS,KAAKsrG,MAAM/jG,SAAStH,MAAK,SAACusS,GAAD,OAAeA,EAAUtgL,SAASjsH,MAAK,SAAAksH,GAAA,OAAYA,EAAQugL,yBAEnFy6G,EAAqBnnZ,KAAKsrG,MAAM24R,mBAAqBjkY,KAAKsrG,MAAM5gG,iBAAiBjW,SACjF2E,SAASC,SAAS2b,WAAa5b,SAASC,SAAS4b,OAEnD0xY,EAAgB,GAChBjN,EAA0B5nY,EAAmB4nY,wBAC7CA,IAEFA,GADAiN,EAAgB3mZ,KAAKgpU,0BACmBv0U,OAAS,GAGnD,IAAMs3Q,EAAkB/rQ,KAAKsrG,MAAM/oG,UAAU9N,OAnBtC,EAoB0CuL,KAAKsrG,MAA/Ci8G,EApBA,EAoBAA,oBAAqBn9F,EApBrB,EAoBqBA,kBAE5B,OACE,+BAAKx/B,UAAU,SACb,mCAAe21N,iBAAiB,IAChC,+BAAK31N,UAAW,cAAgB8uT,EAA0B,6BAA+B,KACvF,+BAAK9uT,UAAW,iDACd,wCACA,wCACC5qF,KAAK+hd,qBAAqB33V,GAC1B8iG,EAAuB,KACtB,+BAAKtiI,UAAU,eACb,0CAIN,+BAAKA,UAAU,qBACf,+BAAKA,UAAW,iBAAoBmhL,GAAoBxkD,EAAgD,GAA1B,0BACzEA,EAAsB,2BAA6B,KACnDz1M,EAAmBk1H,cAAgB0yQ,EAA0B,6BAA+B,IAC1F15P,IAAK,SAACksG,GAAD,OAAQ,EAAK0iO,aAAe1iO,IACnC4zD,EACG,mCAAkC7yR,kBAAmBjtB,KAAKsrG,MAAMr+E,kBAC9Bm7X,cAAepoZ,KAAKooZ,cACpBD,qBAAsBnoZ,KAAKmoZ,uBAC7D,KACJ,wCACCp8I,GAAmBj6P,EAAmBkhT,mBAAqBlhT,EAAmBmhT,oBAC1EjzT,KAAKsrG,MAAM4+L,wBAAiE,IAAtClqS,KAAKsrG,MAAM8+L,wBAClD,wCACA,MAEL0V,EAAoB,wCAAc,KAClCqnG,EAAqB,wCAAwB,MAC7Cr1Y,EAAmBk1H,aAAgB0yQ,GAA4BvhY,EAAe+uH,mBAI3E,KAHF,+BAAKt8C,UAAU,eACb,+BAAKA,UAAU,wBAAuB,4CAK9C,mCAAoB8uT,wBAAyBA,EAAyBiN,cAAeA,S,gBAlJpFzkQ,UAAY,CACjBz7H,SAAU,UAAU27H,KAAKnpC,Y,cAgLd,IAAAnN,UAzBS,SAACxzG,GAAU,MACKA,EAAMouB,wBAArC0jG,EAD0B,EAC1BA,kBAAmB3jG,EADO,EACPA,SACnB27J,EAAwB9pL,EAAMgR,YAA9B84K,qBACA8qC,EAAwB50N,EAAMsS,oBAA9BsiN,qBACP,MAAO,CACL3qN,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1Bkf,WACA2jG,oBACAh9F,aAAc90B,EAAM8J,UAAUgrB,aAC9BnP,eAAgB3lB,EAAMytB,eAAe9H,eACrCgP,kBAAmB30B,EAAM8J,UAAU6qB,kBACnC9U,eAAgB7f,EAAMqN,gBACtBitQ,oBAAqBt6Q,EAAM8J,UAAUwwQ,oBACrCjjB,uBAAwBr3P,EAAM+sO,iBAAiBsqB,uBAC/Cu6C,uBAAwB5xS,EAAMo5B,wBAAwBw4Q,uBACtDE,uBAAwB9xS,EAAMo5B,wBAAwB04Q,uBACtD1/R,iBAAkBpS,EAAMsS,oBAAoBF,iBAC5Cu5X,kBAAmB3rY,EAAMsS,oBAAoBq5X,kBAC7C18K,oBAAqBjvN,EAAMgvN,qBAAqBC,oBAChDnlC,uBACA8qC,0BAIoC,CACtC//L,kCACArJ,8CACA0C,4DACAoH,oCACAZ,kCACAhE,kCACA0D,sBACAsC,+CARa,CASZsmc,I,0HChOH,O,OACA,O,IACA,SACA,S,IACA,S,IACA,S,uDAEMC,E,yOAEJ9pR,eAAiB,K,EACjBonB,YAAa,E,2GAEO,MACoD7yN,KAAKsrG,MAApEnzF,EADW,EACXA,eAAgB/C,EADL,EACKA,uBAAwB7S,EAD7B,EAC6BA,UAAWgF,EADxC,EACwCA,SACtD4Q,EAAezQ,SAAS2N,0BACrBD,GAKCpV,KAAKsrG,MAAM4+L,wBACblqS,KAAKsrG,MAAM2+L,2BAA0B,GAElCjqS,KAAKsrG,MAAM35E,sCACd3xB,KAAKsrG,MAAMm/L,mCAAkC,KAR3CloS,EAAU9N,QAAU8S,EAAS9S,SAC/BuL,KAAKsrG,MAAM2+L,2BAA0B,IAW3CjqS,KAAK6yN,YAAa,I,6CAIlB7yN,KAAK6yN,YAAa,I,gDAGMj0C,GAAW,WAC/B5+K,KAAKsrG,MAAMnzF,eAAezQ,SAAS2N,0BAA4BrV,KAAKsrG,MAAM35E,sCACzEitJ,EAAUxpK,yBAA2BpV,KAAKsrG,MAAMl2F,wBACnDs5E,YAAW,WACL,EAAKmkI,aAAe,EAAKvnH,MAAMl2F,yBACjC,EAAKk2F,MAAM2+L,2BAA0B,GAChC,EAAK3+L,MAAM+kE,2BACd,EAAK/kE,MAAMm/L,mCAAkC,MAGhD,O,+BAKL,OACE,wCACGzqS,KAAKsrG,MAAM4+L,uBAAyB,wCAA6B,KACjElqS,KAAKsrG,MAAMo/L,+BACR1qS,KAAKsrG,MAAMnzF,eAAeE,QACxB,wCACA,wCACF,U,2BAoBG,IAAAyzF,UAbS,SAACxzG,GACvB,MAAO,CACL4xS,uBAAwB5xS,EAAMo5B,wBAAwBw4Q,uBACtD3nS,UAAWjK,EAAM8J,UAAUG,UAC3BgF,SAAUjP,EAAMkP,UAAUD,SAC1B4Q,eAAgB7f,EAAMqN,gBACtByP,uBAAwB9c,EAAMwc,UAAUM,uBACxCs1R,+BAAgCpyS,EAAMo5B,wBAAwBg5Q,+BAC9D/4Q,qCAAsCr5B,EAAMo5B,wBAAwBC,qCACpE0+I,0BAA2B/3K,EAAM8J,UAAUiuK,6BAIP,CACtC45H,sDACAQ,uEAFa,CAGZ8qL,I,qLChFH,MACA,O,IACA,OACA,OAEA,S,IAKA,SACA,Q,IACA,QACA,QACA,U,uDAKMC,E,gPAEJ/pR,eAAiB,K,EACjBonB,YAAa,E,EAqBbulL,e,6BAAgB,2FACd,EAAK9sS,MAAM6+L,0BAA0B,GACrC,EAAKG,gBAFS,SAGR,IAAIl0S,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,SAHnC,cAId,EAAKi1G,MAAM6+L,0BAA0B,GAJvB,SAKR,IAAI/zS,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,SALnC,cAMd,EAAKi1G,MAAM6+L,0BAA0B,GACrC,EAAKK,iBAPS,UAQR,IAAIp0S,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,SARnC,eASd,EAAKi1G,MAAM6+L,0BAA0B,GATvB,UAUR,IAAI/zS,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAVnC,QAWd,EAAKo/d,oBAXS,8C,EAchBnrL,cAAgB,WAAM,MACsE,EAAKh/L,MAAxF/oG,EADa,EACbA,UAAW43F,EADE,EACFA,WAAYhwE,EADV,EACUA,eAAgBE,EAD1B,EAC0BA,iBAAkB4yC,EAD5C,EAC4CA,eAAgBnkD,EAD5D,EAC4DA,OAC1EiwO,GAAqB,IAAAovJ,gCAA+B51Y,EAAW43F,EAAYhwE,EAC7EE,EAAkB4yC,EAAgBnkD,GAHlB,uBAIpB,IAJoB,IAIpB,EAJoB,4CAIRlL,EAJQ,KAIDusE,EAJC,KAMZu7Y,EAAoBv9d,OAAOw9d,sBAC3BC,EAAW,KAAKhod,EAAQ,GACxBiod,EAAc,UAAY19d,OAAOw9d,sBAAwB/nd,EAC/D,EAAKiod,GAAennY,YAAW,WACzB,EAAKmkI,YAAc6iQ,IAAsBv9d,OAAOw9d,sBAClD,EAAKrqX,MAAM++L,gCAAX,wBAA+C,EAAK/+L,MAAMg/L,eAA1D,CAAyEnwN,EAAQnyE,MAEjF25I,aAAa,EAAKk0U,MAEnBD,IAXL,EAA+B7sO,EAAmB6nG,UAAlD,+CAA6D,IAJzC,+E,EAmBtBpmD,eAAiB,WACf97M,YAAW,WACT,EAAK4c,MAAMi/L,iCAAiC,CAAC,UAC5C,KACH77M,YAAW,WACT,EAAK4c,MAAMi/L,iCAAiC,CAAC,MAAO,YACnD,M,EAGLkrL,kBAAoB,WACd,EAAKhqR,iBACP,aAAE,EAAKA,gBAAgBI,QAAQ,KAAK,WAClC,IAAM6pR,EAAoBv9d,OAAOw9d,sBACjCjnY,YAAW,WACL,EAAKmkI,YAAc6iQ,IAAsBv9d,OAAOw9d,uBAClD,UAAgBjoR,kBAAhB,gBAAqC,EAAKpiG,UAE3C,S,EAKTwqX,QAAU,SAACC,EAAWx5X,EAAMrmD,EAAO5zB,GACjC,IAAMgiH,EAAc,EAAKh5B,MAAM8+L,uBAC/B,OAAQ9lK,IAAgByxV,GAAazxV,IAAgByxV,EAAY,EAC/D,+BAAKnrY,UAAW,YACb05C,IAAgByxV,EAAY,8BAAgC,KAC5DzxV,IAAgByxV,EAAY,EAAI,+BAAiC,KAElE,+BAAKnrY,UAAU,oBACb,+BAAKA,UAAW,kDAAoD2R,GACnD,IAAdw5X,EAAkB,qDAA0B,KAC9B,IAAdA,EAAkB,mDAAwB,MAE7C,+BAAKnrY,UAAU,0BACb,6BAAGA,UAAU,aAAa10C,GAC1B,6BAAG00C,UAAU,mBACX,gCAAMA,UAAU,yBAAyBtoE,GACzC,4CAKN,M,2GA/Fc,WAClBtiB,KAAK6yN,YAAa,EAClB16N,OAAOw9d,sBAAwBx9d,OAAOw9d,uBAAyB,EAAIx9d,OAAOw9d,sBAAwB,EAAI,EACtGjnY,YAAW,WACL,EAAK+8G,iBACP,aAAE,EAAKA,gBAAgBC,OAAO,KAAK,WACjC,EAAK0sM,qBAGR,O,6CAIHp4Y,KAAK6yN,YAAa,EAClB7yN,KAAKsrG,MAAM++L,gCAAgC,IAC3CrqS,KAAKsrG,MAAMi/L,iCAAiC,IAC5CvqS,KAAKsrG,MAAM6+L,0BAA0B,K,+BAkF9B,WACD7lK,EAActkI,KAAKsrG,MAAM8+L,uBACxB3vR,EAAQza,KAAKsrG,MAAb7wF,KACP,OACE,+BAAKmwE,UAAW,8BAAiC05C,EAAmC,GAArB,oBAC1D0b,IAAK,SAACkkI,GAAD,OAAU,EAAKz4E,eAAiBy4E,IACvClkR,KAAK81d,QACJ,EACA,WACAr7c,EAAKC,cAAc,CAAC1S,GAAI,uDACxByS,EAAKC,cAAc,CAAC1S,GAAI,uDAEzBhI,KAAK81d,QACJ,EACA,eACAr7c,EAAKC,cAAc,CAAC1S,GAAI,uDACxByS,EAAKC,cAAc,CAAC1S,GAAI,uDAEzBhI,KAAK81d,QACJ,EACA,QACAr7c,EAAKC,cAAc,CAAC1S,GAAI,uDACxByS,EAAKC,cAAc,CAAC1S,GAAI,4D,GA7HI,UAAM6jG,WAqJtCykF,EAAqB,CACzB25G,sDACAE,sDACAE,kEACAE,oEACAvhR,mC,WAGa,IAAA++H,aACb,IAAAj8C,UA1BsB,SAACxzG,GAAU,MACsBA,EAAMqY,YAAtDwpF,EAD0B,EAC1BA,WAAYhwE,EADc,EACdA,eAAgBE,EADF,EACEA,iBAC5B4yC,EAAkB3kE,EAAM0zG,UAAxB/uC,eACAnkD,EAAUxgB,EAAM4U,YAAhB4L,OAEP,MAAO,CACLoxR,uBAAwB5xS,EAAMo5B,wBAAwBw4Q,uBACtD3nS,UAAWjK,EAAM8J,UAAUG,UAC3B6nS,uBAAwB9xS,EAAMo5B,wBAAwB04Q,uBACtDE,cAAehyS,EAAMo5B,wBAAwB44Q,cAC7CE,eAAgBlyS,EAAMo5B,wBAAwB84Q,eAC9CrwM,aAAYhwE,iBAAgBE,mBAC5B4yC,iBACAnkD,YAauBw3K,EAAzB,CAA6CklS,K,kICjL/C,MACA,O,IACA,OACA,OAEA,S,uDAMMQ,G,cAEJ,WAAY1qX,IAAO,gGACXA,IADW,gBAEc,EAAKA,MAA7B7wF,EAFU,EAEVA,KAAMtC,EAFI,EAEJA,eAFI,OAGjB,EAAKpR,MAAQ,CACX6+S,SAAU,CACR/hD,EAAGppP,EAAKC,cAAc,CAAC1S,GAAI,sDAC3BjS,EAAG0kB,EAAKC,cAAc,CAAC1S,GAAI,sDAC3Bk3C,EAAG/mC,EAAeynI,mBAAqB,uBAAyBnlI,EAAKC,cAAc,CAAC1S,GAAI,uDAE1Fy/N,WAAY,CACV31L,KAAM,EACN5sC,IAAK,GAEP+wd,uBAAwB,GACxBC,qBAAsBz7c,EAAKC,cAAc,CAAC1S,GAAI,kEAd/B,E,yEAoHV,WACDy/N,EAAaznO,KAAK+G,MAAM0gO,WAC9B,OACE,+BAAK78I,UAAW,kDAAmDo1D,IAAK,SAACkkI,GAAD,OAAU,EAAKz4E,eAAiBy4E,IACtG,+BAAKt5L,UAAW,YACd,+BAAKA,UAAU,2CACb,+BAAKA,UAAW,sDAAsD5qF,KAAKsrG,MAAMs/L,iCACjF,6BAAGhgN,UAAU,uBAAuB5qF,KAAK+G,MAAM6+S,SAAS5lT,KAAKsrG,MAAMs/L,iCACnE,+BAAKhgN,UAAU,0BACb,kCAAQA,UAAU,iEACVkyF,QAAS98K,KAAKonO,oBAAqBp/N,GAAG,iBAC5C,4CAAkBA,GAAG,0DAI3B,gCAAM4iF,UAAW,oFAAsF5qF,KAAKsrG,MAAMs/L,+BAC5Gv2R,MAAO,CACL,UAAa,aAAaozN,EAAW31L,KAAM,OAAO21L,EAAWviO,IAAK,SAE1E,+BAAK0lF,UAAW,gCAAkC5qF,KAAKsrG,MAAMs/L,+BAAgCv2R,MAAO,CAClGy9B,KAAM21L,EAAW31L,KACjB5sC,IAAKuiO,EAAWviO,MAEflF,KAAKsnO,4B,KA/IlB,S,sCAsBEV,kBAAoB,WAClB,EAAKuvP,6BACL,aAAE,kBAAkBzqR,OAAO,KAC3Bh9G,YAAW,YACT,aAAE,EAAK+8G,gBAAgBC,OAAO,OAC7B,M,KAGLyqR,0BAA4B,WAC1B,IAAMC,EAAqB,kEAGrBC,EAAmBj9d,SAASg9F,cAAcggY,IAAuBh9d,SAASg9F,cAFzC,iFAGjCkgY,GAAQ,aAFO,0BAGrB,GAAID,EAAkB,CAChBC,GACFA,EAAM9oY,QAAQ,CAACC,WAAY4oY,EAAiBpnM,YAAa,GAE3D,EAAK9nD,4BAA4B/tO,SAASg9F,cAAcggY,GAAsBA,EARzC,iFASrC,IAAIH,EAAyB,GACvB15X,EAAO85X,EAAiBjgY,cAAc,qCAC5C,GAAI6/X,EAAwB,CAC1B,IAAMM,EAAWp+d,OAAOy1F,iBAAiB2O,GACrCg6X,GAAYA,EAASvrE,aACvBirE,EAAuBjrE,WAAaurE,EAASvrE,YAE3CurE,GAAYA,EAAS93W,iBACvBw3W,EAAuBx3W,eAAiB83W,EAAS93W,gBAGrD,IAAMn8F,EAAO+zc,EAAiBjgY,cAAc,qCACrC37E,EAAQ,EAAK6wF,MAAb7wF,KACP,EAAK6iK,SAAS,CACZ24S,yBACAC,qBAAsB5zc,EAAOA,EAAKovb,UAAYj3b,EAAKC,cAAc,CAAC1S,GAAI,wEAGxE,EAAKo/N,uB,KAITE,mBAAqB,WACnB,OAAQ,EAAKh8H,MAAMs/L,gCACjB,KAAK,EACH,OACE,kCAAQhgN,UAAU,sEAAsEkyF,QAAS,EAAKsqD,qBACpG,gCAAMx8I,UAAU,mCAAmCv2E,MAAO,EAAKtN,MAAMkvd,yBACrE,gCAAMrrY,UAAU,oCAAoC,EAAK7jF,MAAMmvd,uBAIrE,KAAK,EACH,OAAO,kCAAQtrY,UAAU,wEACVkyF,QAAS,EAAKsqD,sBAE/B,KAAK,EACH,IACM2/K,EAAc3tZ,SAASg9F,cADZ,kDAEV37E,EAAQ,EAAK6wF,MAAb7wF,KACP,OACE,kCAAQmwE,UAAU,gDAAgDkyF,QAAS,EAAKsqD,qBAC7E2/K,EAAcA,EAAY2qD,UAAYj3b,EAAKC,cAAc,CAAC1S,GAAI,uEAIrE,QACE,OAAO,O,KAIbo/N,oBAAsB,WACpB,IAAMtyC,EAAW,EAAKxpF,MAAMs/L,+BAAiC,EAC7D,GAAiB,IAAb91G,EAEF,OADA,EAAKgyC,gBACE,EAET,OAAQhyC,GACN,KAAK,GACH,aAAE,kBAAkB+W,QAAQ,KAAK,WAC/B,EAAKs7B,4BAA4B,0EACjC,EAAK77H,MAAMq/L,kCAAkC71G,IAC7C,aAAE,kBAAkB4W,OAAO,QAE7B,MAEF,KAAK,GACH,aAAE,kBAAkBG,QAAQ,KAAK,WAC/B,EAAKs7B,4BAA4B,kDACjC,EAAK77H,MAAMq/L,kCAAkC71G,IAC7C,aAAE,kBAAkB4W,OAAO,W,GA+C/Bpb,EAAqB,CACzBq6G,sEACAF,sEACAI,+E,WAGa,IAAA9iJ,aACb,IAAAj8C,UAdsB,SAACxzG,GACvB,MAAO,CACLsyS,+BAAgCtyS,EAAMo5B,wBAAwBk5Q,+BAC9DzyR,eAAgB7f,EAAMqN,mBAWC2qL,EAAzB,CAA6C0lS,K,8HC9K/C,MACA,O,IACA,OACA,OAEA,S,uDAOMQ,E,YAEJ,WAAYlrX,IAAO,gGACXA,IADW,SAenBs7H,kBAAoB,WAElB,EAAKw6K,sBACL1yT,YAAW,YACT,aAAE,EAAK+8G,gBAAgBC,OAAO,OAC7B,KACHvzM,OAAO0uD,iBAAiB,SAAU,EAAKskM,eArBtB,EA4BnBA,aAAe,WACbxpG,aAAa,EAAK0/P,UAClB,EAAKA,SAAW3yT,WAAW,EAAK0yT,oBAAqB,MA9BpC,EAiCnBA,oBAAsB,WACpB,EAAKj6K,4BAA4B,0EACjC,EAAKA,4BAA4B,iDAAkD,iBAjCnF,EAAKpgO,MAAQ,CACX0gO,WAAY,CACV31L,KAAM,EACN5sC,IAAK,GAEPuxd,aAAc,CACZ3kb,KAAM,EACN5sC,IAAK,IAGT,EAAKm8Y,SAAW,EAZC,E,uFAyBjBlpZ,OAAO+qG,oBAAoB,SAAUljG,KAAKmrP,gB,+BAanC,aAC4BnrP,KAAK+G,MAAjC0gO,EADA,EACAA,WAAYgvP,EADZ,EACYA,aACnB,OACE,+BAAK7rY,UAAW,kDAAmDo1D,IAAK,SAACkkI,GAAD,OAAU,EAAKz4E,eAAiBy4E,IACtG,+BAAKt5L,UAAW,YACd,+BAAKA,UAAU,qBACb,+BAAKA,UAAU,kDACb,+BAAKA,UAAU,wDAAwDv2E,MAAO,CAC5EssH,UAAW,aAAa8mG,EAAW31L,KAAK,OAAO21L,EAAWviO,IAAI,QAE9D,kCAAQ0lF,UAAU,wEACVkyF,QAAS98K,KAAK8mO,gBAExB,+BAAKl8I,UAAU,4BACf,8BAAIA,UAAU,2BACZ,4CAAkB5iF,GAAG,mEAEvB,+BAAK4iF,UAAU,0BAA0Bv2E,MAAOrU,KAAKsrG,MAAM3qF,YAAc,IAAM,CAC7EggH,UAAW,aAAa8mG,EAAW31L,KAAK,OAAO21L,EAAWviO,IAAI,OAC5D,MAEN,+BAAK0lF,UAAU,iDACb,+BAAKA,UAAU,wDAAwDv2E,MAAO,CAC5EssH,UAAW,aAAa81V,EAAa3kb,KAAK,OAAO2kb,EAAavxd,IAAI,QAElE,kCAAQ0lF,UAAU,gDACRkyF,QAAS98K,KAAK8mO,cACtB,4CAAkB9+N,GAAG,uEAGzB,+BAAK4iF,UAAU,4BACf,8BAAIA,UAAU,2BACZ,4CAAkB5iF,GAAG,oEAEvB,+BAAK4iF,UAAU,8BAGnB,+BAAKA,UAAU,2BACb,kCAAQA,UAAU,gDACVkyF,QAAS98K,KAAK8mO,cACpB,4CAAkB9+N,GAAG,wE,KAlFnC,S,oBAkGe,IAAA8jG,UAPS,SAACxzG,GACvB,MAAO,CACLsyS,+BAAgCtyS,EAAMo5B,wBAAwBk5Q,+BAC9DjqR,YAAaroB,EAAMgR,YAAYqX,eAIK,CACtCgqR,sEACAF,sEACAI,+EAHa,CAIZ2rL,I,8EChHH,I,EAAA,OACA,U,+CAgCE,IAAA1qX,UAlBsB,SAACxzG,GAAU,MACEA,EAAMgR,YAAlCkiG,EAD0B,EAC1BA,kBAAmBv2F,EADO,EACPA,MADO,EAEc3c,EAAM8J,UAA9CG,EAF0B,EAE1BA,UAAWoF,EAFe,EAEfA,QAAS08T,EAFM,EAENA,iBACpBjvT,EAA0B9c,EAAMwc,UAAhCM,uBACA1N,EAAYpP,EAAMqN,gBAAlB+B,SAEP,MAAO,CACLg6G,wBAAyBlW,EAAkB/2G,OAC3C8N,YACAoF,UACAmK,mBAAoBpK,EACpB0N,yBACAH,QACAovT,sBAKF,EA9BiC,SAAC/4N,GAAU,IAErCoW,EAA2GpW,EAA3GoW,wBAAyBn/G,EAAkF+oG,EAAlF/oG,UAAWuP,EAAuEw5F,EAAvEx5F,mBAAoBsD,EAAmDk2F,EAAnDl2F,uBAAwBH,EAA2Bq2F,EAA3Br2F,MAAOovT,EAAoB/4N,EAApB+4N,iBAExFwkF,EAAa/2Y,EAAmBnK,SAAWyN,GAA0BH,IAAUovT,EAKrF,OAFA,aAAiB3iN,EAAyBn/G,EAAWsmZ,GAAY,GAE1D,S,mICZT,MACA,QACA,QACA,QACA,QACA,S,mDAEO,IAAM,EAAgBC,EAAhBA,eAAA,gCAAgB,6CAAO32J,IAAP,qIACmC,UAAMhwP,WAA7DC,EADoB,EACpBA,UAAWuD,EADS,EACTA,gBAAiBqkS,EADR,EACQA,aAAcl1R,EADtB,EACsBA,UAC3ChD,EAAqBnM,EAAgB+B,SACpCgjJ,EAAmBs/I,EAAnBt/I,gBACF54I,EAAmBnK,QAJG,wDAO3B,UAAMsc,UAAS,IAAAutJ,oBAAkB,IAC7B2gF,IACF,IAAAvrO,gBAEIjlB,GAAa,IAAA+E,iBACbqiP,GAAqB,IAAA3vJ,iBAAgBh3F,EAAUG,WAE/Cm0d,EAAc,IAAIl0c,KAClBm0c,EAAc,GAAKD,EAAYxuP,cAC/B0uP,EAAe,GAAKF,EAAYh1O,WAChCm1O,EAAc,CAClB,SAAYF,EACZ,UAAaC,EACb,aAAgBD,EAChB,cAAiBC,EACjB,aAAgB,GAAKj1d,EAAWE,cAChC,KAAQ,GACR,SAAYknP,EAAmBjhP,KAAI,SAAA1B,GACjC,MAAO,CACL,SAAY0L,EAAmBwC,SAC/B,SAAW,IAAA/H,oBAAmBnG,EAASC,YAAa,GACpD,eAAkB,GAAKjN,SAASC,SAASmC,OACzC,QAAW,CACT,mBAAsBkvJ,EAAgBX,UAAYj1I,EAAU/T,SAASgpJ,SACrE,qBAAwBW,EAAgBukB,UAAYn6J,EAAU/T,SAASkuK,SACvE,OAAUvkB,EAAgB3jJ,OAAS+N,EAAU/T,SAASgG,MACtD,KAAQ2jJ,EAAgBV,MAAQl1I,EAAU/T,SAASipJ,KACnD,MAASU,EAAgB3jJ,OAAS+N,EAAU/T,SAASgG,MACrD,WAAc2jJ,EAAgBxoH,QAAUptB,EAAU/T,SAASmhC,aAKnElqC,QAAQ4B,IAAI,4CAA6Ci9d,GAxC9B,WAyCG,IAAAjtU,aAAYitU,GAzCf,WAyCrBC,EAzCqB,OA0CvB3kO,IACF,IAAA7/J,iBAEF,UAAMruE,UAAS,IAAAutJ,oBAAkB,KAC7BslT,IAAmBA,EAAgBC,SA9CZ,wBA+CzB,UAAM9yc,UAAS,IAAAstJ,aAAYulT,EAAgBC,WA/ClB,mBAgDlB,GAhDkB,kCAkDpB,GAlDoB,mDAAhB,6C,yICPb,O,OACA,OACA,QAEA,SACA,S,IAIA,QACA,Q,IACA,S,IACA,SACA,S,OACA,SACA,SACA,S,IACA,O,mDAEA,IAyGMzmS,EAAqB,CACzBo0B,oCACAnzL,gDACA08K,wDACAmW,iD,WAGa,IAAAt4G,UAxBS,SAACxzG,GAAU,MAC8CA,EAAMqxH,qBAA9EsF,EAD0B,EAC1BA,cAAetmB,EADW,EACXA,UAAW4Z,EADA,EACAA,KAAMqiG,EADN,EACMA,kBAAmBv1F,EADzB,EACyBA,kBAI1D,MAAO,CACLJ,gBACA+nW,qBAAsBruX,EACtB4Z,OACAqiG,oBACA9yM,mBARiBxZ,EAAMqN,gBAAlB+B,SASL2jN,qBAR6B/yN,EAAMkwO,iBAA9Bnd,qBASL3pG,wBAAyBppH,EAAMgR,YAAYkiG,kBAAkB/2G,OAC7D46H,uBAWoCihE,EAAzB,EAhHQ,SAAChlF,GAAU,IAW1B,EATC2jB,EAEyC3jB,EAFzC2jB,cAAey1F,EAE0Bp5G,EAF1Bo5G,iBAAkBk/K,EAEQt4R,EAFRs4R,sBAAuBrhR,EAEfjX,EAFeiX,KAAMqiG,EAErBt5G,EAFqBs5G,kBAAmB9yM,EAExCw5F,EAFwCx5F,mBACtFyf,EAC8C+5E,EAD9C/5E,uBAAwB08K,EACsB3iG,EADtB2iG,2BAA4Bod,EACN//G,EADM+/G,qBAAsBjH,EAC5B94G,EAD4B84G,uBAC1E1iG,EAA8CpW,EAA9CoW,wBAAyB2N,EAAqB/jB,EAArB+jB,kBAErBohE,GAAU,IAAAiF,cANgB,GAOF,IAAAv0C,UAAA,kBAPE,qBAOzB2S,EAPyB,KAOhBysR,EAPgB,KAW1B02C,GAAA,gCAAqB,yGACpBv1W,EADoB,wDAIzB,IAAA96F,cAAa,6BAA8B,4BACvCwoG,EAAa0kC,EAAQ1kC,WACvBw3F,EAAe9yD,EAAQ8yD,aACvBqiB,EAAgBn1E,EAAQm1E,cAPD,UASI,IAAAH,yBAAuB,GAT3B,OASjBouP,EATiB,OAUvB9nW,EAAa8nW,EAAa9nW,WAC1Bw3F,EAAeswQ,EAAatwQ,aAC5BqiB,EAAgBiuP,EAAajuP,cAC7BjxO,QAAQ4B,IAAI,eAAgBs9d,GAbL,0BAewB,IAAA5xQ,kBAAiBr2F,EAAe23F,GAfxD,iBAelBlB,EAfkB,EAelBA,qBAAsBS,EAfJ,EAeIA,WAC7Bo6N,mBAAezsR,EAAf,CAAwBqyD,aAAY/2F,aAAYw3F,eAAcmjH,uBAlBlC,EAkByD9gG,mBACrFvkB,0BAAqBgB,MACrB,IAAApzH,iBAlByB,mDAArB,6CAqBN,IAAAqvB,YAAU,WACK,IAATY,GACF6hG,EAAuB,KAGxB,KAEH,IAAAziG,YAAU,WACJijG,IACFqyQ,IACI5rQ,GACFpd,GAA2B,MAI9B,CAAC2W,EAAmBljG,IAEvB,IAAMy1W,EAAiB,WACrB1mS,EAAQ17L,KAAK,iBAETs6H,GAAqBv9G,EAAmBsf,YAActf,EAAmBuf,mBAAqBl5B,OAAOm5B,iBACvGC,GAAuB,GACdn4B,SAASC,SAAS2b,WAC3Bi5L,GAA2B,IAIzB4Y,GAAY,IAAAR,uBAAsBp3F,EAAe6kC,GAKvD,GAJI,UAAOjzJ,aACT7I,QAAQ4B,IAAI,YAAaitN,IAGtBjC,GAAqBiC,EAAUP,kBAAkBrmN,MAAK,SAAAkyB,GAAA,OAAaA,EAAS6zL,WAE/E,OAAO,wCAGT,IAAMu2L,EAAsB,IAATh6R,EAMnB,OACE,kCAAkB6qN,SAAlB,CAA2Bl2U,MAAO2vN,EAAW05N,WAAYA,GACvD,+BACE31V,UAAW,6BAA+Bg5S,EAAwB,gCAAkC,KACpG,kCAAQh5S,UAAU,iCAAiCv2E,MAAO,CAACw9B,MAAO,QAASirI,QAASq6S,IACnF56E,EACG,mCAAuB66E,eAAgBD,IACvC,mCAAwBxwQ,cAXZ,SAACg6N,GACrBJ,mBAAezsR,EAAY6sR,a,8EC3F/B,W,OACA,OACA,O,IACA,M,mDAGA,IAAM02C,EAAwB,SAAC/rX,GAAU,IAEhCnzF,EAAwFmzF,EAAxFnzF,eAAgB80G,EAAwE3hB,EAAxE2hB,mBAAoBC,EAAoD5hB,EAApD4hB,cAAemC,EAAqC/jB,EAArC+jB,kBAAmB+nW,EAAkB9rX,EAAlB8rX,eAEvEE,EAAYrqW,IAAuB90G,EAAeo/c,sBAOxD,OACE,wCACE,+BAAK3sY,UAAU,2BACb,+BAAKA,UAAU,oBACb,6BAAGA,UAAU,0BACX,4CACE5iF,GAAIsvd,EAAY,mCAAqC,kDAExDA,EAAY,6BAAG1sY,UAAU,2BAA2BsiC,GAAqB,KAC1E,mCACCmC,EACC,6BAAGzkC,UAAU,2BACX,kCAAQA,UAAU,gDACVkyF,QAAS,kBAAM3kL,OAAO6+F,KAAKq4B,EAAmB,YACpD,4CAAkBrnH,GAAG,kCAGvB,OAGR,+BAAK4iF,UAAU,yBAAyBv2E,MAAO,CAACkwU,aAAc,SAC5D,+BAAK35P,UAAU,0BACf,+BAAKA,UAAU,0BACb,kCAAQA,UAAU,gDACVkyF,QA7BI,WAClBs6S,MA6BQ,4CAAkBpvd,GAAG,wCAQjCqvd,EAAsBn1U,UAAY,CAChCk1U,eAAgB,UAAUr4S,KAAK9lE,Y,WAgBlB,IAAAnN,UAbS,SAACxzG,GAAU,IAC1B+2H,EAAqB/2H,EAAMqxH,qBAA3B0F,kBACApC,EAAsB30H,EAAMgR,YAA5B2jH,mBACAlsH,EAAYzI,EAAMwc,UAAlB/T,SAEP,MAAO,CACLsuH,oBACAl3G,eAAgB7f,EAAMqN,gBACtBsnH,qBACAC,cAAensH,EAASwgC,SAIb,CAAyB81b,I,8ECnExC,W,OACA,OACA,U,IACA,M,IAEA,S,IACA,QACA,U,IACA,S,IACA,Q,IACA,S,IACA,SACA,QACA,S,mDAGA,IAAMG,EAAyB,SAAClsX,GAAU,IAEjC04R,EAA2F14R,EAA3F04R,gBAAiBr9K,EAA0Er7G,EAA1Eq7G,cAAei9K,EAA2Dt4R,EAA3Ds4R,sBAAuBzrX,EAAoCmzF,EAApCnzF,eAAgBzN,EAAoB4gG,EAApB5gG,iBAExE+sd,GAAc,IAAAx3U,QAAO,MACrBy3U,GAAU,IAAAz3U,QAAO,MALiB,GAON,IAAA47H,YAAA,WAD3B4vB,EANiC,EAMjCA,aAAcr8K,EANmB,EAMnBA,WAAYw3F,EANO,EAMPA,aAAcL,EANP,EAMOA,eAAgBC,EANvB,EAMuBA,mBAC7DM,EAPsC,EAOtCA,SAAUV,EAP4B,EAO5BA,mBAEZ,GAAI49K,EACF,OAAO,+BAAKp5S,UAAU,kBAGxB,IAAMjpF,GAAa,IAAA+E,iBACbqjH,GAAa,IAAA7oH,wBAAuBS,GAEpCg2d,IAAgB,IAAAvnS,kBAAiB1lL,EAAkBq/G,EAAY5xG,IAAmB,EAElF6J,EAAO4kM,GAAgBx3F,GAAcg3F,GAAsBQ,EAC7Dx3F,EACAm3F,GAAkBA,EAAeP,QAAUO,EAAeP,QAAU,KAClE4xQ,EAAY51c,IAASotG,EAE3B,OACE,+BAAKxkC,UAAU,WAAWo1D,IAAKy3U,EAAapjd,MAAO,CAACqnB,SAAS,aAC1DorL,GAAY9kM,EAAO,KAAO,wCAC1BA,EACC,+BAAK4oE,UAAU,iBACb,oCAAU5oE,KAAMA,EACN61c,cAAe,kBAAMlxQ,EAAc,CAACG,UAAU,KAC9Ch8D,QAAA,mBACPg8D,EAAW,gCAAM9mE,IAAK03U,EACLnqJ,WAAYqqJ,EAAYxxQ,EAAqBI,EAC7CsxQ,gBAAiB,kBAAMnxQ,EAAc,CAAC8kF,cAAc,KACpD1pP,MAAO,MACpB,MACJ+kK,IAAY8wQ,GAAcxxQ,IAAuBQ,GAAkBzuM,EAAeE,SAC9EF,EAAeuwN,iBAAmBvwN,EAAeuwN,gBAAgBk2I,mBAElE,KADA,yCAGLr4J,GAAkBklF,EAAe,mCAAsBisL,QAASA,EACT3tW,WAAYA,EACZ4tW,aAAcA,EACdF,YAAaA,EACb9wQ,cAAeA,IAAoB,MAE3F,KACJ,mCAAsBA,cAAeA,IACpCi9K,EAAwB,mCAAmBr9K,eAAgBA,IAAoB,OAKtFixQ,EAAuBt1U,UAAY,CACjCykE,cAAe,UAAU5nC,M,WAcZ,IAAAjzE,UAXS,SAACxzG,GAAU,MACKA,EAAMqxH,qBAArCpH,EAD0B,EAC1BA,KAAMqhR,EADoB,EACpBA,sBACNl5X,EAAoBpS,EAAMsS,oBAA1BF,iBACP,MAAO,CACL63G,OACAqhR,wBACAzrX,eAAgB7f,EAAMqN,gBACtB+E,sBAIW,CAAyB8sd,I,2LCrFxC,O,OACA,OACA,O,IACA,M,IAEA,SACA,U,IACA,QACA,SACA,SACA,S,mDAEA,IAAMO,EAAuB,SAACzsX,GAAU,IAE/B7wF,EAAyF6wF,EAAzF7wF,KAAMksM,EAAmFr7G,EAAnFq7G,cAAe13F,EAAoE3jB,EAApE2jB,cAAezE,EAAqDlf,EAArDkf,gBAAiBryG,EAAoCmzF,EAApCnzF,eAAgBwyG,EAAoBrf,EAApBqf,iBAEtEmpC,GAAU,IAAA+nH,YAAA,WACT11D,EAAkCryD,EAAlCqyD,WAAYC,EAAsBtyD,EAAtBsyD,mBAEb4xQ,EAAe,SAACl8b,EAAMm8b,IAC1B,IAAAxxQ,qBAAoB3qL,EAAMmzF,EAAegpW,GAAcnkU,EAAS6yD,IAgClE,OACE,wCACE,mCAAOR,WAAYA,EACZ+xQ,UAAWF,EACXl8b,KAAMsqL,EAAqB,IAClC,+BAAKx7H,UAAU,mBACb,kCAAQA,UAAU,6DACVkyF,QApCI,SAAZgjK,IACJ,GAAI15H,EAAqBD,EACvB6xQ,EAAa5xQ,EAAqB,OADpC,CAIA,IAAM+xQ,GAA2B,IAAAvuJ,6BAC/Bp/M,EACAyE,EACA92G,EACAwyG,EACAmpC,IAEqC,IAAnCqkU,EAAyBr8b,MAc7B,IAAAs8b,mBAAkBt4I,EAAUroV,UAAV,KAbhB,IAAAg4H,kBAAiBh1G,EAAKC,cAAc,CAAE1S,GAAI,yCAA2C,GAAI83U,EAAUroV,UAAV,IAAsB,GAAO,WACpHi3F,YAAW,WACT,IAAMupY,GAAaA,EAAbA,cACDnkU,EADC,CAEJ23I,aAAcrlF,IAAuB+xQ,EAAyBr8b,KAC9D4vQ,mBAAoBysL,EAAyBh0Q,aAE/CwC,EAAcsxQ,GACdD,EAAaG,EAAyBr8b,KAAMm8b,KAC3C,WAeA,4CAAkBjwd,GAAIo+M,EAAqBD,EACvC,gCACA,wCAOf4xQ,EAAqB71U,UAAY,CAC/BykE,cAAe,UAAU5nC,M,WAmBZ,IAAAh3B,aACb,IAAAj8C,UAjBsB,SAACxzG,GAAU,MACQA,EAAMqxH,qBAAxCsF,EAD0B,EAC1BA,cAAezE,EADW,EACXA,gBACfG,EAAoBryH,EAAMoxH,WAA1BiB,iBAEP,MAAO,CACLsE,gBACAzE,kBACAryG,eAAgB7f,EAAMqN,gBACtBglH,sBAIuB,GAKzB,CAA6CotW,K,8HC1F/C,M,IACA,M,IACA,O,IACA,SACA,O,mDAEA,IAAM71U,EAAY,CAChBikE,WAAY,UAAUvtG,OAAOK,WAC7Bi/W,UAAW,UAAUn5S,KAAK9lE,WAC1Bn9E,KAAM,UAAU88E,OAAOK,WACvB2Y,SAAU,UAAUhZ,OACpBnN,MAAO,UAAUjpE,QAWb61b,E,YACJ,WAAY/sX,IAAO,gGACXA,IADW,SAiCnBgtX,gBAAkB,SAAAx8b,GAEhB,EAAKwvE,MAAM4sX,UAAUp8b,IAjCrB,EAAK/0B,MAAQ,CAAEwxd,MAAO,IAFL,E,oFAObv4d,KAAKsrG,MAAM66G,YACbnmN,KAAKw4d,QAAQx4d,KAAKsrG,MAAMxvE,KAAO,K,yCAIhBkoR,GAEbhkT,KAAKsrG,MAAMxvE,OAASkoR,EAAUloR,MAAQ97B,KAAKsrG,MAAM66G,aAAe69F,EAAU79F,YAC5EnmN,KAAKw4d,QAAQx4d,KAAKsrG,MAAMxvE,KAAO,K,8BAI3BA,GACN,IAAIy8b,EAAQv4d,KAAK+G,MAAMwxd,MAEnBz8b,EAAO,GAAKA,EAAOy8b,EAAMpyQ,aAK7BoyQ,EAAQF,EAAWI,SAASz4d,KAAKsrG,MAAM66G,WAAYrqL,EAAM97B,KAAKsrG,MAAMsmB,UAGpE5xH,KAAKs9K,SAAS,CAAEi7S,MAAOA,O,+BA6ChB,WACDA,EAAQv4d,KAAK+G,MAAMwxd,MAClBpyQ,EAAcnmN,KAAKsrG,MAAnB66G,WAEP,OAAKoyQ,EAAMG,OAASH,EAAMG,MAAMjke,QAAU,EAEjC,KAIP,+BAAKm2F,WAAW,aAAW,QAAQ,CAAC,eAAkC,UAAnB5qF,KAAKsrG,MAAMG,SAC5D,+BAAK7gB,UAAU,aACVkyF,QAAS,kBAAMy7S,EAAM7yF,YAAc,GAAK,EAAK4yF,gBAAgB,KAChE,4CAAkBtwd,GAAG,kCAEtBm+M,EAAa,IACd,+BAAKv7H,UAAU,mBACVkyF,QAAS,kBAAMy7S,EAAM7yF,YAAc,GAAK,EAAK4yF,gBAAgBC,EAAM7yF,YAAc,MAItF,8BAAI96S,UAAU,cACX2tY,EAAMG,MAAM5wd,KAAI,SAACg0B,EAAMluB,GAAP,OACf,8BAAIg9E,WAAW,aAAW,kBAAkB,CAAC,0BAA0B2tY,EAAM7yF,cAAc5pW,IACvFtkC,IAAKoW,EACLkvK,QAAS,kBAAM,EAAKw7S,gBAAgBx8b,KACrCA,OAKNqqL,EAAa,IACd,+BAAKv7H,UAAU,oBACVkyF,QAAS,kBAAMy7S,EAAM7yF,YAAc6yF,EAAMpyQ,YAAc,EAAKmyQ,gBAAgBC,EAAM7yF,YAAc,MAIrG,+BAAK96S,UAAU,aACVkyF,QAAS,kBAAMy7S,EAAM7yF,YAAc6yF,EAAMpyQ,YAAc,EAAKmyQ,gBAAgBC,EAAMpyQ,cACrF,4CAAkBn+M,GAAG,qC,gCA5Ebm+M,EAAYu/K,EAAa9zQ,GAEvC8zQ,EAAcA,GAAe,EAE7B,IAAIizF,SAAWC,SAuBf,OAtBIzyQ,GAAc,IAEhBwyQ,EAAY,EACZC,EAAUzyQ,GAGNu/K,GAAe,GACjBizF,EAAY,EACZC,EAAU,IACDlzF,EAAc,GAAKv/K,GAC5BwyQ,EAAYxyQ,EAAa,EACzByyQ,EAAUzyQ,IAEVwyQ,EAAYjzF,EAAc,EAC1BkzF,EAAUlzF,EAAc,GAQrB,CACLA,YAAaA,EACb9zQ,SAAUA,EACVu0F,WAAYA,EACZwyQ,UAAWA,EACXC,QAASA,EACTF,OATY,aAAMC,EAAWC,EAAU,Q,GA/DpB,UAAM/sX,WA0H/BwsX,EAAWn2U,UAAYA,EACvBm2U,EAAWp5S,aAnIU,CACnBxzE,MAAO,GACPmmB,SAAU,GACV91F,KAAM,G,UAiIOu8b,G,6KClJf,Q,IACA,QACA,S,IACA,MACA,SAMA,QACA,SACA,QACA,Q,IACA,O,mDAKO,IAAM,EA2FA,EA+CA,EA1ImBQ,EAAnBA,kBAAA,gCAAmB,gCAAQ72b,EAAR,EAAQA,UAAW2sI,EAAnB,EAAmBA,SAAU1sD,EAA7B,EAA6BA,OAAQ62W,EAArC,EAAqCA,mBAAoBvuC,EAAzD,EAAyDA,qBAAzD,4EAEC,UAAMpob,WAA9BwnH,EAFuB,EAEvBA,qBAGFvwH,SAASC,SAAS4b,QAAS00G,EAAqBgmD,0BALvB,0CAQMhmD,EAAqBgmD,4BAR3B,UAQpBopT,EARoB,OAS1B/ge,QAAQ4B,IAAI,oBAAqBm/d,IAE7BA,EAXsB,iBAYxB,UAAM90c,UAAS,IAAA6rJ,8BAA6B,OAZpB,+BAcxBphF,YAAW,WAAM,IACR55E,EAAa,UAAM3S,WAAnB2S,UACDA,EAAU8b,oBAAsB9b,EAAU+b,mBAAqB,EAAA8uB,kBAAkBI,4BACrF,IAAA0vE,kBAAiB,gBAAiB,GAAI86T,KAEvC,GAnBqB,qFAuB1B,IAAA96T,kBAAA,KAAwB,GAAI86T,IAC5B,IAAAj4V,iBAxB0B,kCA+B9B,IAAA1rE,cAAa,0BAA2B,4BA/BV,EAiCG,UAAMzkB,WAAhC2S,EAjCuB,EAiCvBA,UAAWxL,EAjCY,EAiCZA,YAEd8qH,EAAW,CACbhjD,aAAch4E,SAASC,SAASmC,OAChCyZ,MAAO7b,SAASC,SAAS4b,OAAS3L,EAAY2L,OAAS,OACvDi4G,cAAep4G,EAAU/T,SAASwgC,MAClCy3b,aAAc,CACZh3b,YACA2sI,WACA1sD,UAEFg3W,kBAAmBtvW,EAAqBY,uBACxCuuW,qBACAI,wBAAyBvvW,EAAqBo6Q,eAAe5pY,SAAS,UA9C1C,WAmExB,IAAAs9F,WAAU,CAACC,QAAQ,EAAMC,aAAa,IAnEd,QAqE9B,UAAQwhY,aAAa/kW,GAClBviG,MAAK,SAAAv8B,GAAU,MACgBA,EAAOrB,KAA9B8xN,EADO,EACPA,YAAarzF,EADN,EACMA,QACpB,IAAApgC,iBACA,UAAMruE,UAAS,IAAA4/L,2BAA0B,CACvCthG,KAAM,EACN8M,kBAAmB02F,EACnBi+K,iBAAiB,KAEftxQ,GAAUA,EAAO,KACnB,IAAAjD,kBAAiBiD,EAAO,GAAI,GAAI63T,MAGnCl4Z,OAAM,SAAAp6B,IACL,IAAAw3H,kBAAiBx3H,EAAO,GAAIsyb,IAC5B,IAAAj4V,iBACA,UAAMruE,UAAS,IAAA4/L,2BAA0B,CACvCmgL,iBAAiB,QAtFO,4DAAnB,6CA2FoBo1F,EAApBA,mBAAA,gCAAoB,uBAAOnkd,EAAP,uDAAe,KAAMokd,EAArB,iIAEa,UAAMl3d,WAA3CmH,EAFwB,EAExBA,YAAaqgH,EAFW,EAEXA,qBACpB,IACE10G,EAAQA,GAAS7b,SAASC,SAAS4b,OAAS3L,EAAY2L,QAAU++F,aAAaK,QAAQ,sBACvF,MAAOjoG,GAAMpU,QAAQ4B,IAAI,yBAA0BwS,GALtB,OAO/B,UAAM6X,UAAS,IAAA4/L,2BAA0B,CAACmgL,iBAAiB,MAE3D,IAAAp9W,cAAa,6BAA8B,4BATZ,kBAYxB,UAAQwyc,kBAAkBnkd,EAAO00G,EAAqBe,sBAC1D74F,KADI,+CACC,WAAMv8B,GAAN,gFACC+je,IACH,IAAA/mY,kBAEEh9F,IAAUA,EAAOrB,MAASqB,EAAOrB,KAAK6vY,qBAJtC,iCAKkC,IAAAh7J,0BALlC,OAKIwwP,EALJ,OAMFthe,QAAQ4B,IAAI,yBAA0B0/d,GACtChke,EAAOrB,KAAK6vY,qBAAuBw1F,EAPjC,cASJ,UAAMr1c,UAAS,IAAAogM,2BAA0B/uN,EAAOrB,OAChD,UAAMgwB,UAAS,IAAA4/L,2BAA0B,CAACmgL,iBAAiB,KAVvD,kBAWG1uY,GAXH,mDADD,uDAcJ+8B,MAdI,+CAcE,WAAOp6B,GAAP,qFACD,EAAAgC,kBAAmB0vH,EAAqB66F,aADvC,iCAEyByB,MAAMt8F,EAAqB66F,cAFpD,cAEG0B,EAFH,gBAGgBA,EAAcr2H,OAH9B,OAGGA,EAHH,OAIH73F,QAAQ4B,IAAI,0BAA2Bi2F,GACjCk0S,EAAiB1sX,IAAI24E,gBAAgBH,GAC3C73F,QAAQ4B,IAAI,sBAAuBmqY,GACnC,UAAM9/W,UAAS,IAAAogM,2BAA0B,CACvC0/K,oBARC,QAWAs1F,IACH,IAAA/mY,iBAEFt6F,QAAQC,MAAMA,GAdT,mDAdF,wDAZwB,kDAApB,4CA+CoBmge,EAApBA,mBAAA,gCAAoB,WAAO7tC,GAAP,0GACkB,UAAMpob,WAAhDwnH,EADwB,EACxBA,qBAAsB6+G,EADE,EACFA,kBAE7B,IAAA5hN,cAAa,0BAA2B,4BAHT,EAKE,UAAMzkB,WAAhC2S,EALwB,EAKxBA,UAAWxL,EALa,EAKbA,cAEZiwd,GAAuBnge,SAASC,SAAS4b,OAAS00G,EAAqBgmD,2BAP9C,0CAWKhmD,EAAqBgmD,4BAX1B,UAWrBopT,EAXqB,OAa3B/ge,QAAQ4B,IAAI,oBAAqBm/d,IAE7BA,EAfuB,iBAgBzB,UAAM90c,UAAS,IAAA6rJ,8BAA6B,OAhBnB,+BAkBzBphF,YAAW,WAAM,IACR55E,EAAa,UAAM3S,WAAnB2S,UACDA,EAAU8b,oBAAsB9b,EAAU+b,mBAAqB,EAAA8uB,kBAAkBI,4BACrF,IAAA0vE,kBAAiB,gBAAiB,GAAI86T,KAEvC,GAvBsB,qFA2B3B,IAAA96T,kBAAA,KAAwB,GAAI86T,IAC5B,IAAAj4V,iBA5B2B,8BAiCzB46B,GAAiBs7G,EAAiB77G,yBAA2B67G,EAAiB77G,yBAAyBprF,MAAQ,OAChHzsB,EAAUysB,OAASzsB,EAAU/T,SAASwgC,MAlCZ,wBAqC7B,IAAAkuF,kBAAiB,4CAA6C,KAC9D,IAAAn9B,iBAtC6B,8BA0C3Br9E,EAAQ7b,SAASC,SAAS4b,OAAS3L,EAAY2L,MAC7Cskd,GAAuBtkd,EA3CE,mCA6CF,IAAAwiF,WAAU,CAACC,QAAQ,EAAMC,aAAa,IA7CpC,SA6CvB0uO,EA7CuB,UA+C3BpxT,EAAQoxT,EAAapxT,OA/CM,QAmD3Bukd,EAAoB,GACxB9ke,OAAOmc,KAAK84G,EAAqBa,iBAAiBpsH,SAAQ,SAAA6lN,GACxDu1Q,EAAkBv1Q,GAAc,CAC9Bw1Q,aAAc,GACdC,kBAAmB/vW,EAAqBa,gBAAgBy5F,OAIxD7vF,EAAW,CACbhjD,aAAch4E,SAASC,SAASmC,OAChCyZ,QACAi4G,gBACAssW,oBACAN,0BAAyBvvW,EAAqBo6Q,gBAAiBp6Q,EAAqBo6Q,eAAe5pY,SAAS,UAG9G,UAAQg/d,aAAa/kW,GAClBviG,MAAK,SAAAv8B,GAAU,MACgBA,EAAOrB,KAA9B8xN,EADO,EACPA,YAAarzF,EADN,EACMA,QACpB,IAAApgC,iBACA,UAAMruE,UAAS,IAAA4/L,2BAA0B,CACvCthG,KAAM,EACN8M,kBAAmB02F,EACnBi+K,iBAAiB,KAEftxQ,GAAUA,EAAO,IACnB,IAAAjD,kBAAiBiD,EAAO,GAAI,GAAI63T,GAEhC,UAAUppZ,eAAe,yBAG5B9O,OAAM,SAAAp6B,IACL,IAAAw3H,kBAAiBx3H,EAAO,GAAIsyb,IAC5B,IAAAj4V,iBACA,UAAMruE,UAAS,IAAA4/L,2BAA0B,CACvCmgL,iBAAiB,QAtFQ,4DAApB,8C,yIC7Jb,I,EAAA,O,oCAEO,IAAM21F,EAAiBA,EAAjBA,eAAiB,CAC5BrvJ,iBAAkB,UAAU1xN,OAC5BmyN,UAAW,UAAUvoS,OACrBy2E,WAAY,UAAUmpC,KACtBtmH,KAAM,UAAU88E,OAChBwxN,SAAU,UAAUzyU,OACpBk/C,UAAW,UAAUl/C,QAGViie,EAAiBA,EAAjBA,eAAiB,CAC5BjoX,OAAQ,UAAUuH,QAAQ,UAAUt/D,MAAM+/a,IAC1Cx6c,YAAa,UAAUqjB,OACvB2nS,WAAY,UAAU/nL,KACtBuoL,SAAU,UAAUvoL,KACpB8nL,YAAY,EACZ2vJ,UAAW,UAAUz3U,KACrBnpC,WAAY,UAAUmpC,KACtB8oL,YAAa,UAAU9oL,KACvB3rJ,KAAM,UAAU+rC,OAChBs3b,iBAAkB,UAAUlhX,QAIxBmhX,EAAoB,CACxB/xd,GAAI,UAAU4wG,OACdniH,KAAM,UAAU+rC,OAChBujL,YAAa,UAAUvjL,OACvBw3b,YAAa,UAAUx3b,OACvB22H,SAAU,UAAU/W,KACpB5+F,UAAW,UAAU4+F,KACrB72B,SAAU,UAAU62B,KACpB9rI,MAAO,UAAUsiG,OACjB2pK,OAAQ,UAAUrpK,QAAQ,UAAUt/D,MAAMggb,IAC1Cn0Q,WAAY,UAAU7sG,OACtBotG,QAAS,UAAUxjL,OACnBmjL,UAAW,UAAU/sG,OACrBgtG,QAAS,UAAUhtG,QAGUqhX,EAAlBA,gBAAkB,CAC7BC,QAAS,SACTC,YAAY,G,UAuCCJ,G,6FClFf,O,OACA,O,IACA,M,IACA,QACA,O,IAEA,QACA,S,IACA,S,IACA,S,IACA,SACA,S,IACA,SACA,S,mDAEA,IACIK,GAAoC,EAElCC,EAAuB,SAAC/uX,GAAU,IAE/BosX,EACuBpsX,EADvBosX,QAASD,EACcnsX,EADdmsX,YAAa9wQ,EACCr7G,EADDq7G,cAAe13F,EACd3jB,EADc2jB,cAAe+0F,EAC7B14G,EAD6B04G,mBAAoBvpM,EACjD6wF,EADiD7wF,KAAM+vG,EACvDlf,EADuDkf,gBACnFT,EAA4Bze,EAA5Bye,WAAY4tW,EAAgBrsX,EAAhBqsX,aAER7jU,GAAU,IAAA+nH,YAAA,WACTt1D,EACiBzyD,EADjByyD,eAAgBklF,EACC33I,EADD23I,aAAcjlF,EACb1yD,EADa0yD,mBAAoBklF,EACjC53I,EADiC43I,mBACvDtlF,EAAsBtyD,EAAtBsyD,mBAEIk0Q,EAAuB/zQ,EAAeg8D,OAkB5C,IAhBA,IAAA5gK,YAAU,WAER,OADAvoH,SAASytD,iBAAiB,UAAW0za,GAC9B,WACLnhe,SAAS8pG,oBAAoB,UAAWq3X,MAGzC,KAEH,IAAA54W,YAAU,WACJ8pL,GAAgB2uL,IAClBA,GAAoC,EACpCI,OAGD,CAAC/uL,KAEA,aAAQ6uL,KAA0B7uL,IAAiBisL,IAAYA,EAAQljX,UAAYkjX,EAAQljX,QAAQwrC,MACjGy3U,IAAgBA,EAAYjjX,QAChC,OAAO,KAGT,IAIMimX,EAAwB,aAcxBD,EAAoB,WACxB9rY,YAAW,WACT,IAAMvU,EAAU/gF,SAASg9F,cAAc,yDACnCjc,GACFA,EAAQ4vW,eAAe,CAAEvgE,SAAU,SAAUkxG,MAAO,SAAUlqc,OAAQ,cAEvE,MAGCmqc,EAA2B,WAAM,OACR,IAAA/wJ,6BAA4Bp/M,EAAiByE,GAAlEnzF,EAD6B,EAC7BA,KAAMqoL,EADuB,EACvBA,WACd,IAAc,IAAVroL,EAAJ,CAGA,IAAMm8b,GAAaA,EAAbA,cACDnkU,EADC,CAEJ23I,aAAcrlF,IAAuBtqL,EACrC4vQ,mBAAoBvnF,IAEtBwC,EAAcsxQ,IACd,IAAAxxQ,qBAAoB3qL,EAAMmzF,EAAegpW,EAAYtxQ,GACjDP,IAAuBtqL,EACzB0+b,IAEAJ,GAAoC,IAIlCG,EAA2B,SAAC35X,GACV,KAAlBA,EAAM3B,QACR0nH,EAAc,CAAE+kF,oBAAqB,IACV,IAAlB9qM,EAAM3B,UACf2B,EAAM7V,iBACN4vY,MAIAC,EAAiBlD,EAAQljX,QAAQwrC,IAAIivI,WACrC4rM,EAAgBnD,EAAQljX,QAAQwrC,IAAImvI,UAEpCu7C,EAAe,GACfowJ,EAAe,GACfC,EAAsB,KACtBC,EAAwB,KA2G5B,GAzGAV,EAAqBl8d,SAAQ,SAAA48L,GAC3BA,EAAMrpF,OAAOvzG,SAAQ,SAACsjN,EAAOu5Q,GAC3B,GAAIv5Q,EAAM5lL,OAAS0qL,EAAnB,CAD0C,IAKlC8jH,EAAqB5oH,EAArB4oH,iBACArxN,EAAe+hF,EAAf/hF,WANkC,EAObyoG,EAAM7qK,UAA7Bqkb,EAPoC,EAOpCA,IAAKC,EAP+B,EAO/BA,IAAKC,EAP0B,EAO1BA,IAAK/wJ,EAPqB,EAOrBA,IACf/3K,EAASolU,EAAQljX,QAAQwrC,IAAInuC,YAAc6vG,EAAM0oH,SAASzqU,MAC1D4yJ,EAASmlU,EAAQljX,QAAQwrC,IAAIluC,aAAe4vG,EAAM0oH,SAASvqU,OAC3DqF,EAAMw8M,EAAM0oH,SAASvqU,OAASwqU,EAC9BO,EAAc,CAClB94R,KAAM8ob,EAAiBM,EAAM5oU,EAC7BptJ,IAAK21d,EAAgB31d,EAAMqtJ,EAAS8oU,EACpC17d,OAAQy7d,EAAMF,GAAO5oU,EACrBzyJ,OAAQwqU,EAAM8wJ,EAlHN,EAkHsB5oU,GAEhC,GAAKyoC,EAAMkvI,WAAX,CAQA,IAAMvC,EAAa2C,IAAqB5+B,EACxC,GAAI1wG,EAAM2vI,SAAU,CAClB,IAAMzzU,GAAQ,IAAAyyU,eAAcnjH,EAAoB8jH,EAAkB/jH,EAAgB/7F,IAAoB,GAEjGm9M,GAkBC1uN,GACFyxN,EAAa31U,KAAK,CAAE48G,OAAQi5N,EAAaC,IAAKP,IAE5C3C,IACFozJ,mBAA0BnwJ,GAC1BowJ,IAA0B9je,GAE5B4je,EAAa/le,KACX,iCAAO61F,UAAW,oCACbquB,EAAa,wCAA0C,KACvD/hH,EAAQ,gDAAkD,IACxDM,IAAKwjM,EAAMvkM,KAAOwke,EAClBx5V,YAAWu5D,EAAMvkM,KACjB4d,MAAOu2T,EACP0wJ,WAAW,EACX37P,OAAQ86P,EACR3kQ,SAAW,SAAAl1H,GAAA,OAvHI,SAACA,EAAOujH,EAAY4mH,GAClD/mH,EAAmB,CACjBC,WAAYsC,EAAev+M,GAC3Bk8M,UAAWsC,EACXrC,aACA1tN,KAAMs0U,EACN7zU,MAAO0pG,EAAMlqF,OAAOxf,QAiHaqke,CAAwB36X,EAAO0pO,EAAkBtvI,EAAMvkM,OAC3EyqG,UAAWq5X,EACXr1M,aAAchuR,OAnCnB+hH,GACFyxN,EAAa31U,KAAK,CAAE48G,OAAQi5N,EAAaC,IAAKP,IAEhDwwJ,EAAa/le,KACX,+BACE0sI,YAAWu5D,EAAMvkM,KACjBm0F,UAAW,+BACN+8O,EAAa,wCAA0C,KACvD1uN,EAAa,wCAA0C,KACvD/hH,EAAQ,gDAAkD,IAC/DM,IAAKwjM,EAAMvkM,KAAOwke,EAClB5md,MAAOu2T,EACP9tJ,QAAS,WAzGnB6pC,EAAc,CAAC+kF,mBAyG2B4+B,MAChC,oCAAOpzU,WAyBJ8jM,EAAMkwI,aACXjyN,GACFyxN,EAAa31U,KAAK,CAAC48G,OAAQi5N,EAAaC,IAAKP,IAE3C3C,IACFozJ,mBAA0BnwJ,GAC1BowJ,KAA0B,IAAArxJ,eAAcnjH,EAAoB8jH,EAAkB/jH,EAAgB/7F,IAEhGswW,EAAa/le,KACX,mCAA8ByC,IAAKwjM,EAAMvkM,KAAOwke,EAClBrwJ,YAAaA,EACbG,UAAW/vI,EAAMvkM,KACjBwiH,WAAYA,EACZyoG,MAAOA,EACPyC,WAAYmmH,MAEnCtvI,EAAMmvI,YACf2wJ,EAAa/le,KACX,mCAA6ByC,IAAKwjM,EAAMvkM,KAAOwke,EAClBrwJ,YAAaA,EACbG,UAAW/vI,EAAMvkM,KACjB0tN,WAAYmmH,UAvE3CwwJ,EAAa/le,KAAK,mCAA0BimM,MAAOA,EACPjxE,WAAYA,EACZ4tW,aAAcA,EACd/sJ,YAAaA,EACbpzU,IAAKwjM,EAAMvkM,KAAOwke,YAwEhEF,GACFD,EAAa/le,KAAK,mCAA6BmQ,IAAK61d,EAAoB71d,IACzB81d,sBAAuBA,EACvBxje,IAAK,yBACL8qB,KAAM04c,EACFvgd,EAAKC,cAAc,CAAC1S,GAAI,sBACxB,KACJ2yd,yBAA0BA,EAC1BC,eAAgBA,MAE5DG,KAAwB,aAAQrwJ,KAE9BqwJ,EAAsB,CAGzB,IAFA,IAAIS,EAAa,EACbl5c,EAAO7H,EAAKC,cAAc,CAAE1S,GAAI,4BAC7Bwzd,EAAa9wJ,EAAaj2U,SAAU,IAAAk1U,eAAcnjH,EAAoBkkH,EAAa8wJ,GAAY3wJ,IAAKtkH,EAAgB/7F,IACzHgxW,IAKF,GAHIA,GAAc9wJ,EAAaj2U,SAC7B+me,EAAa9wJ,EAAaj2U,OAAS,IAEjC,IAAAk1U,eAAcnjH,EAAoBkkH,EAAa8wJ,GAAY3wJ,IAAKtkH,EAAgB/7F,GAAkB,KAC5F1uF,GAAS,IAAA8tS,6BAA4Bp/M,EAAiByE,GAAtDnzF,KACRxZ,EAAO7H,EAAKC,cAAc,CAAC1S,IAAe,IAAV8zB,EAAe,oBAAsB,sBAEvEg/b,EAAa/le,KAAK,mCAA6BmQ,IAAKwlU,EAAa8wJ,GAAY7pX,OAAOzsG,IACrC1N,IAAK,0BACLmje,yBAA0BA,EAC1Br4c,KAAMA,EACNs4c,eAAgBA,KAInE,OAAOE,GAGTT,EAAqBn4U,UAAY,CAC/BykE,cAAe,UAAU5nC,KACzBh1D,WAAY,UAAUnR,OACtB++W,aAAc,UAAU/+W,QAG1B,IAYM+yW,EAAoB,CACxB3nQ,yC,WAGa,IAAAj8D,aACb,IAAAj8C,UAjBsB,SAACxzG,GAAU,MACcA,EAAMqxH,qBAA9CsF,EAD0B,EAC1BA,cAAe1M,EADW,EACXA,KAAMiI,EADK,EACLA,gBADK,EAEGlyH,EAAMgR,YAE1C,MAAO,CACL2lH,gBACAzE,kBACAjI,OACA5hG,YAR+B,EAE1BA,YAMQO,aARkB,EAEbA,gBAeKyqc,EAAzB,CAA4C0O,K,8EC3Q9C,W,OACA,O,IACA,MACA,OAEA,SACA,S,IACA,Q,mDAEA,IAAMoB,EAA+B,SAACnwX,GAAU,IAEvC64G,EACiB74G,EADjB64G,WAAY4mH,EACKz/N,EADLy/N,UAAWH,EACNt/N,EADMs/N,YAAa7mH,EACnBz4G,EADmBy4G,iBAAkBv5F,EACrClf,EADqCkf,gBAAiBvR,EACtD3N,EADsD2N,WAAYyoG,EAClEp2G,EADkEo2G,MAAOzyF,EACzE3jB,EADyE2jB,cAC/F+0F,EAAsB14G,EAAtB04G,mBAH4C,GAKD,IAAA63D,YAAA,WAAtCt1D,EALuC,EAKvCA,eAAgBC,EALuB,EAKvBA,mBAEjBk1Q,GAAa,IAAA/xJ,eAAcnjH,EAAoBrC,EAAYoC,EAAgB/7F,GAC3En2G,EAAQ,CACZy9B,KAAM84R,EAAY94R,KAAO84R,EAAYjrU,MAAQ,EAAI,GACjDuF,IAAK0lU,EAAY1lU,IAAM0lU,EAAY/qU,OAAS,EAAI,IAG5Ci9K,EAAU,WACd,IAAM6+S,EAAgBj6Q,EAAMqpH,UAC5B,IAAK2wJ,GAAcC,EAAe,CAChC,IAAMC,GAA8B,IAAA9wJ,gCAA+B6wJ,EAAenxW,EAAiByE,GACnG,GAAI2sW,EAQF,YAPA53Q,EAAmB,CACjBC,WAAYsC,EAAev+M,GAC3Bk8M,UAAWsC,EACXrC,aACA1tN,KAAMs0U,EACN7zU,MAAO0ke,IAKb73Q,GAAiB,EAAM,CAACG,UAAWsC,EAAoBrC,aAAY4mH,YAAW4wJ,mBAGhF,OAAID,GACFrnd,EAAMy3E,gBAAkB,OAAS4vY,EAAa,IAE5C,+BAAK9wY,UAAU,+DACVv2E,MAAOA,EACPyoK,QAASA,KAMhB,+BAAKlyF,UAAW,6DACXquB,EAAa,wCAA0C,IACvD5kG,MAAOA,EACPwnd,iBAAgBn6Q,EAAMqpH,UACtBjuJ,QAASA,GACZ,4CAAkB90K,GAAG,4BAK3Byzd,EAA6Bv5U,UAAY,CACvCiiE,WAAY,UAAUvrG,OAAOK,WAC7B8xN,UAAW,UAAUvoS,OAAOy2E,WAC5B2xN,YAAa,UAAUjzU,OAAOshH,WAC9BA,WAAY,UAAUmpC,MAGxB,IAQMkuC,EAAqB,CACzByzB,oCACAC,yC,WAGa,IAAAl4G,UAbS,SAACxzG,GAAU,MACQA,EAAMqxH,qBAC/C,MAAO,CACLa,gBAH+B,EAC1BA,gBAGLyE,cAJ+B,EACTA,iBAYcqhE,EAAzB,CAA6CmrS,I,8ECjF5D,W,WACA,MACA,OAEA,S,IACA,QACA,S,mDAEA,IAAMK,EAA8B,SAACxwX,GAAU,IAEtC64G,EAA2E74G,EAA3E64G,WAAY4mH,EAA+Dz/N,EAA/Dy/N,UAAWH,EAAoDt/N,EAApDs/N,YAAa5mH,EAAuC14G,EAAvC04G,mBAAoBx5F,EAAmBlf,EAAnBkf,gBAFlB,GAIA,IAAAqxJ,YAAA,WAAtCt1D,EAJsC,EAItCA,eAAgBC,EAJsB,EAItBA,mBAEjBk1Q,GAAa,IAAA/xJ,eAAcnjH,EAAoBrC,EAAYoC,EAAgB/7F,GAC3En2G,EAAQ,CACZy9B,KAAM84R,EAAY94R,KAClB5sC,IAAK0lU,EAAY1lU,IAAM,GAazB,OACE,+BAAK0lF,UAAW,mEACXpzF,IAAA,YAAiB2sN,EACjB9vM,MAAOA,EACPyoK,QAdc,WACnBknC,EAAmB,CACjBC,WAAYsC,EAAev+M,GAC3Bk8M,UAAWsC,EACXrC,aACA1tN,KAAMs0U,EACN7zU,OAAQwke,MASPA,EACC,wCACE,+BAAK9wY,UAAU,mDACf,+BAAKA,UAAU,oDAEf,OAKVkxY,EAA4B55U,UAAY,CACtCiiE,WAAY,UAAUvrG,OAAOK,WAC7B8xN,UAAW,UAAUvoS,OAAOy2E,WAC5B2xN,YAAa,UAAUjzU,OAAOshH,YAGhC,IAOM0yW,EAAoB,CACxB3nQ,yC,WAGa,IAAAl4G,UAXS,SAACxzG,GAEvB,MAAO,CACLkyH,gBAFwBlyH,EAAMqxH,qBAAzBa,mBAU+BmhW,EAAzB,CAA4CmQ,I,8EC9D3D,I,IAAA,M,IACA,MACA,O,mDAGA,IAAMC,EAA8B,SAACzwX,GAAU,IAEtCpmG,EAAwDomG,EAAxDpmG,IAAK01d,EAAmDtvX,EAAnDsvX,eAAgBD,EAAmCrvX,EAAnCqvX,yBAA0Br4c,EAASgpF,EAAThpF,KAEhDjO,EAAQ,CACZy9B,KAAM8ob,EAAiB,GACvB11d,OAGF,OACE,+BAAK0lF,UAAU,uDACVv2E,MAAOA,EACPyoK,QAAS69S,GACZ,4CAAkB3yd,GAAIsa,GAAQ,8BAKpCy5c,EAA4B75U,UAAY,CACtCh9I,IAAK,UAAU0zG,OACfgiX,eAAgB,UAAUhiX,OAC1B+hX,yBAA0B,UAAU57S,KAAK9lE,Y,UAG5B8iX,G,8EC7Bf,I,IAAA,M,IACA,M,IACA,SACA,OAEA,Q,mDAGA,IAAMC,EAA2B,SAAC1wX,GAAU,IAEnC0vF,EAAyG1vF,EAAzG0vF,MAAO4vI,EAAkGt/N,EAAlGs/N,YAAa91T,EAAqFw2F,EAArFx2F,UAAWhD,EAA0Ew5F,EAA1Ex5F,mBAAoB86G,EAAsDthB,EAAtDshB,yBAA0B7C,EAA4Bze,EAA5Bye,WAAY4tW,EAAgBrsX,EAAhBqsX,aACzF52d,EAAY+T,EAAZ/T,SAEDk7d,EAAc,SAAC/ke,GACnB,OACE,+BACEuqI,YAAWu5D,EAAMvkM,KACjBm0F,UAAW,uBACXv2E,MAAOu2T,GACN1zU,IAKP,OAAQ8jM,EAAMvkM,MACZ,IAAK,YACL,IAAK,WACL,IAAK,QACH,OAAOwle,EAAYl7d,EAASi6L,EAAMvkM,OACpC,IAAK,sBACH,OAAOwle,EAAYl7d,EAAA,UACrB,IAAK,UACH,OAAOk7d,EAAYl7d,EAAA,QACrB,IAAK,QACH,OAAOk7d,EAAYl7d,EAAA,aACrB,IAAK,QACH,OAAOk7d,EAAY7ie,SAASC,SAAS4b,OACvC,IAAK,cACH,IAAIo5G,EAAmB,KAMvB,OAAO4tW,GAJL5tW,EADEttH,EAASirH,YAAcl3G,EAAUw5G,sBAChBx5G,EAAUy5G,cAAcziH,MAAK,SAAA2iH,GAAA,OAAQA,EAAIzmH,KAAQjH,EAASirH,cAE1DY,GAEiByB,EAAiBjB,SAAW,IAEpE,IAAK,gBAEH,OAAO6uW,GAAY,eAASxnd,OAAO,eACrC,IAAK,QAEH,OAAOwnd,GADc,IAAAvod,sBAAqB5B,EAAoBi4G,EAAWjlH,QAAQ,KAGnF,IAAK,UACH,OAAOm3d,GAAY,IAAAvod,sBAAqB5B,EAAoB6ld,EAAa7yd,QAAQ,KAEnF,IAAK,UACH,IAAMo3d,GAAWnyW,EAAa4tW,GAAc7yd,QAAQ,GAEpD,OAAOm3d,GADc,IAAAvod,sBAAqB5B,EAAoBoqd,IAGhE,IAAK,SACL,IAAK,WACL,IAAK,YACL,QACE,OAAO,OAQbF,EAAyB95U,UAAY,CACnC84C,MAAO,UAAUrjM,OACjBizU,YAAa,UAAUjzU,OACvBgK,WAAY,UAAUhK,Q,WAcT,IAAAm0G,UAXS,SAACxzG,GACvB,IAAMwc,EAAYxc,EAAMwc,UAGxB,MAAO,CACL83G,yBAHiCt0H,EAAMkwO,iBAAlC57G,yBAIL93G,YACAhD,mBAJyBxZ,EAAMqN,gBAAgB+B,YAQpC,CAAyBs0d,I,0HC1FxC,O,OACA,O,IACA,M,IACA,SACA,OAEA,SAMA,S,IACA,OACA,SACA,SACA,S,uDAEMG,E,YAEJ,WAAY7wX,IAAO,gGACXA,IADW,SAoBnB8wX,kBAAoB,SAAClzU,GAGnB,EAAKmzU,UAAUC,QAAQC,SACvB,IAAMzmC,EAAO18b,SAAS8oD,cAAc,UACpC4zY,EAAKn2b,MAAQ,EAAK08d,UAAUG,QAAQ78d,MACpCm2b,EAAKj2b,OAAS,EAAKw8d,UAAUG,QAAQ38d,OACrC,IAAM6uD,EAAQ,IAAI8B,MAClB9B,EAAM3vD,IAAMmqJ,EACZx6F,EAAMojC,OAAS,WACbgkW,EAAK1mW,WAAW,MAAME,UAAU5gC,EAC9BonY,EAAKn2b,MAAQ,EAAI+uD,EAAM/uD,MAAQ,EAC/Bm2b,EAAKj2b,OAAS,EAAI6uD,EAAM7uD,OAAS,GAEnC,EAAKw8d,UAAUI,YAAY3mC,EAAK/lW,UAAU,cAC1C,EAAKssY,UAAUC,QAAQI,UAAW,IAnCnB,EAuCnBC,oBAAsB,WACpB,OAAO,EAAKN,YAAc,EAAKA,UAAUnxa,WAxCxB,EA2CnB0xa,sBAAwB,WACtB,GAAK,EAAKD,sBAAV,CAKA,IAAME,EAAY,EAAKR,UAAUS,mBAAmB/sY,UAAU,aANlC,EAOgD,EAAKub,MAAzEu4R,EAPoB,EAOpBA,gBAAiB50Q,EAPG,EAOHA,cAAes3F,EAPZ,EAOYA,eAAgB/7F,EAP5B,EAO4BA,gBAChD05F,EAAmE2/K,EAAnE3/K,UAAWC,EAAwD0/K,EAAxD1/K,WAAY4mH,EAA4C84D,EAA5C94D,UAAWgyJ,EAAiCl5F,EAAjCk5F,cAAepB,EAAkB93F,EAAlB83F,cAErDp1Q,GACF,EAAKj7G,MAAM04G,mBAAmB,CAC5BC,WAAYsC,EAAev+M,GAC3Bk8M,YACAC,aACA1tN,KAAMs0U,EACN7zU,MAAO2le,IAELlB,GAAe,WACjB,IAAMr1Q,GAAoB,IAAApB,sBAAqBj2F,GACzCg8M,GAA+B,IAAAV,6BAA4BoxJ,GAFhD,uBAGjB,IAHiB,IAGjB,EAHiB,iBAGNxpc,EAHM,QAIAA,EAAVowP,OACEnkR,SAAQ,SAAA48L,GACRA,EAAMkvI,YAAelvI,EAAMkwI,aAGhClwI,EAAMrpF,OAAOvzG,SAAQ,SAACsjN,IACfA,EAAMqpH,YAAc,IAAAR,6BAA4B7oH,EAAMqpH,aAAeE,GACpE94S,EAASnqB,KAAOu+M,EAAev+M,IAAM05M,EAAM4oH,mBAAqBnmH,GAAczC,EAAM5lL,OAASooL,IAG5E,IAAAylH,eAAcjoH,EAAM5lL,KAAM4lL,EAAM4oH,iBAAkBn4S,EAAUq4F,IAEjF,EAAKlf,MAAM04G,mBAAmB,CAC5BC,WAAY9xL,EAASnqB,GACrBk8M,UAAWxC,EAAM5lL,KACjBqoL,WAAYzC,EAAM4oH,iBAClB7zU,KAAMukM,EAAMvkM,KACZS,MAAO2le,WAlBjB,EAAuBv2Q,EAAvB,+CAA0C,IAHzB,kFA4BVy2Q,GACT,EAAKzxX,MAAM+9H,oBAAoBwzP,GAGjC,EAAKvxX,MAAMy4G,kBAAiB,EAAO,UAjDnC,CAAiC,IACxBtpM,EAAQ,EAAK6wF,MAAb7wF,MACP,IAAAg1G,kBAAiBh1G,EAAKC,cAAc,CAAC1S,GAAI,4CAA6C,GAAI,EAAK40d,sBAAsBnle,KAA3B,MA9C3E,EAgGnBule,qBAAuB,SAAAz6W,GACR,IAATA,GACF,UAAUphF,eAAe,sBACzB,EAAKmqE,MAAMs4G,qBAAoB,GAC/B,EAAKt4G,MAAM2xX,2BAEX,EAAK3xX,MAAMy4G,kBAAiB,IApG9B,EAAKh9M,MAAQ,CACXk7G,OAAQ,IAHO,E,oFAOC,MAC2DjiH,KAAKsrG,MAA3Ei7G,EADW,EACXA,eAAgB/7F,EADL,EACKA,gBAAiBq5Q,EADtB,EACsBA,gBAAiBl5Q,EADvC,EACuCA,iBACzD,GAAwB,IAApB3qH,KAAKsrG,MAAMiX,MAAcviH,KAAKq8d,WAAax4F,EAAiB,KACvD3/K,EAAyB2/K,EAAzB3/K,UAAWC,EAAc0/K,EAAd1/K,WACZhuM,EAASowM,GAAkB/7F,EAAkBA,EAAgB+7F,EAAev+M,IAAM,GACpFmO,GAAUA,EAAO+tM,IAAc/tM,EAAO+tM,GAAWC,IAAehuM,EAAO+tM,GAAWC,GAAYjtN,MAChG8I,KAAKo8d,kBAAkBjmd,EAAO+tM,GAAWC,GAAYjtN,OAC5C2sY,GAAmBA,EAAgBk5F,eAAiBpyW,GAC7D3qH,KAAKo8d,kBAAkBzxW,M,+BA2FpB,WACP,OACE,+BAAK//B,UAAU,mCACb,+BAAKA,UAAU,kBACb,wCACE,+BAAKA,UAAU,0BAEb,+BAAKA,UAAU,gCAA+B,4CAAkB5iF,GAAG,4CAErE,+BAAK4iF,UAAU,wBACb,+BAAKA,UAAU,6BACb,mCAAiBsyY,YAAa,CAACtyY,UAAW,oCACzBo1D,IAAK,mBAAO,EAAKq8U,UAAYr8U,OAIlD,+BAAKp1D,UAAU,0BACb,+BAAKA,UAAU,2BACf,+BAAKA,UAAU,0BACb,kCAAQA,UAAU,+CAA+CkyF,QAAS,kBAAM,EAAKu/S,UAAU/uM,UAC7F,4CAAkBtlR,GAAG,oCAEvB,kCAAQ4iF,UAAU,gDACVkyF,QAAS98K,KAAK48d,uBACpB,4CAAkB50d,GAAG,sCAK7B,kCAAQ4iF,UAAU,iCAAiCkyF,QAAS,kBAAM,EAAKkgT,sBAAsB,Y,gBAqBjG1sS,EAAqB,CACzBszB,0CACAG,oCACAC,wCACAU,oCACA2kB,2CAGF8yP,EAAkBj6U,UAAY,CAC5BqkE,eAAgB,UAAU5uN,Q,WAGb,IAAAowJ,aACb,IAAAj8C,UA3BsB,SAAA/kG,GAAS,IACxB+N,EAAmC/N,EAAnC+N,UAAW60G,EAAwB5iH,EAAxB4iH,qBACXgB,EAAoB5jH,EAAM2iH,WAA1BiB,iBACP,MAAO,CACLuC,cAAep4G,EAAU/T,SAASwgC,MAClCghF,KAAMoH,EAAqBpH,KAC3B06W,wBAAyBtzW,EAAqB54F,SAC9C8yW,gBAAiBl6Q,EAAqBk6Q,gBACtC50Q,cAAetF,EAAqBsF,cACpCzE,gBAAiBb,EAAqBa,gBACtCG,sBAiBuB2lE,EAAzB,CAA6C6rS,K,iFC7L/C,W,OACA,OACA,O,IAEA,QACA,S,mDAeA,IAAMgB,EAAuB,SAACl0P,EAAey8J,GAC3C,IAAItrT,EAAS,CACX1+C,SAAU,WACVoW,KAAM,MACN6uF,UAAW,oBACXz7H,IAAK,GAEP,OAAK+jO,GAAkBA,EAAczoF,UAAayoF,EAAczoF,SAASklP,IAAiBz8J,EAAczoF,SAASklP,GAAallP,UAGtGyoF,EAAczoF,SAASklP,GAAallP,SAC5CpiJ,SAAQ,SAACqhC,GACnBA,EAAK+gH,UAAY/gH,EAAK7nB,QAAU6nB,EAAK+gH,UAAqC,IAAzB/gH,EAAK+gH,SAAS/rJ,QACjEgrC,EAAK+gH,SAASpiJ,SAAQ,SAACg/d,GAvB7B,IAAwBlme,EAwBZkme,EAAU9xX,OAAS8xX,EAAUxld,QAAUwld,EAAU9xX,MAAMqzQ,cACzDvkS,EAAOl1E,KAzBOhO,EAyBcuoC,EAAK7nB,OAAO1S,IAxBtC,OAKCkF,KAAK0nE,IAAI56E,EAAO,GAJjB,MAI0BA,EAF1B,KAqB6C,aAMhDkjF,GAbEA,GAwDLk2G,EAAqB,CACzByzB,qC,WAGa,IAAAj4G,UAZS,SAACxzG,GAEvB,MAAO,CACLqyH,iBAFyBryH,EAAMoxH,WAA1BiB,iBAGLxyG,eAAgB7f,EAAMqN,mBAQc2qL,EAAzB,EA5CK,SAAChlF,GAAU,IAEtBqf,EAAsDrf,EAAtDqf,iBAAkBo5F,EAAoCz4G,EAApCy4G,iBAAkB5rM,EAAkBmzF,EAAlBnzF,eAFd,GAGe,IAAA0jQ,YAAA,WAArC5yC,EAHsB,EAGtBA,cAAe7iB,EAHO,EAGPA,mBAChBhsI,EAAS+iZ,EAAqBl0P,EAAe7iB,EAAqB,GAGlEtpC,EAAU,WACdinC,GAAiB,EAAM,CAACg5Q,eAAe,KAGzC,OAAIpyW,GACFvwC,EAAO0R,gBAAkB,OAAS6+B,EAAmB,IAEnD,+BAAK//B,UAAU,6GACVv2E,MAAO+lE,EACP0iG,QAASA,KAMhB,+BAAKlyF,UAAW,6DACXzyE,EAAeuwN,iBAAmBvwN,EAAeuwN,gBAAgBohG,eAChE,wCAA0C,IAC3Cz1T,MAAO+lE,EACP0iG,QAASA,GACZ,4CAAkB90K,GAAG,+B,8ECvE3B,W,OACA,O,IACA,O,IAEA,Q,IACA,SACA,QACA,S,mDAEA,IA+GMsoL,EAAqB,CACzBzwH,+C,WAIA,IAAAisC,UAlBsB,SAACxzG,GAAU,MAC8BA,EAAM0zG,UAGrE,MAAO,CACLtvC,mBAL+B,EAC1BA,mBAKLoD,mBAN+B,EACNA,mBAMzBtE,aAP+B,EACcA,aAO7C/6D,SANiBnI,EAAMgR,YAAlB7I,SAOLmQ,iBANyBtY,EAAMqY,YAA1BC,oBAekB0/K,EAAzB,EApHuB,SAAChlF,GAAU,IAE3BxrC,EAA2GwrC,EAA3GxrC,mBAAoBD,EAAuFyrC,EAAvFzrC,sBAAuBnD,EAAgE4uC,EAAhE5uC,mBAAoBj8D,EAA4C6qG,EAA5C7qG,SAAU+6D,EAAkC8vC,EAAlC9vC,aAAc5qD,EAAoB06F,EAApB16F,iBACvF2f,EAA2EuvC,EAA3EvvC,QAASi4S,EAAkE1oQ,EAAlE0oQ,SAAUjmN,EAAwDziD,EAAxDyiD,KAAMy8N,EAAkDl/Q,EAAlDk/Q,SAAUF,EAAwCh/Q,EAAxCg/Q,iBAAkBC,EAAsBj/Q,EAAtBi/Q,mBAEtDs+I,GAAuB,IAAAp9U,UA4E7B,OA1EA,IAAAt+B,YAAU,WACJpxF,GACFm+D,YAAW,WACT7uB,EAAsB,CACpB0iD,KAAM,MAEP,OAGJ,CAAChyF,KAEJ,IAAAoxF,YAAU,YACHjlD,GAAsBnsC,GACzBsvC,EAAsB,CACpBtvC,SAAS,EACTgyF,KAAM,MAKT,CAAC7lD,KAEJ,IAAAilD,YAAU,WACR,GAAa,IAATY,GAAuB,IAATA,EAAlB,CAGA,IAAM+6W,EAAwB,IAAT/6W,EAAaw8N,EAAqBD,EACvD,GAAIx2U,OAAOC,UAAU+0d,GAAe,CAClC,IAAMC,EAAiB3sd,EACnBouU,EAAW,0BAA4B,cACvCv+U,EACE,2BAA6Bu+U,EAAW,0BAA4B,eACpE,mDAAqDA,EAAW,0BAA4B,eAC5Fw+I,EAAYpke,SAASg9F,cAAcmnY,GACzC,GAAI98d,GAAa+8d,GAAcA,EAAUjgT,aAAeigT,EAAU1rX,aAIhE,YAHI0rX,IACF,aAAEA,GAAWhwY,QAAQ,CAACy5E,UAAWq2T,GAAe,IAAAnyJ,kBAAiB3vQ,GAAgB,IAAK,MAK5F,IAAMiia,EAAkBrke,SAASg9F,cAAwB,IAATmsB,EAAc,wBAA0B,uBACxF,GAAKk7W,EAAL,CAIA,IAAMD,EAAaC,EAAgBx8U,QAAQ+9L,EAAW,0BAA4B,eAClF,GAAIv+U,GAAa+8d,GAAcA,EAAUjgT,aAAeigT,EAAU1rX,aAC5D0rX,IACF,aAAEA,GAAWhwY,QAAQ,CAACy5E,UAAWw2T,EAAgBtuM,UAAY,IAAK,SAFtE,CAOA,IAAMuuM,EAAUtke,SAASg9F,cAAc,mBACnCsnY,IACF,aAAEA,GAASlwY,QAAQ,CAAEtoF,IAAKu4d,EAAgBnxY,wBAAwBpnF,IAAM,KAAO,WAb/ElN,QAAQ4B,IAAI,uCA6Bb,CAAC2oH,KAEChyF,GAAWi4S,EACP,KAIP,mCAAa59O,UAAW,qEAAuE23B,GAC1Fy8N,EAAW,uCAAyC,MACtD,SAACrzI,GAAD,OACC,wCACE,+BAAK/gH,UAAW,6CAA+C23B,EAAMy9B,IAAKq9U,IAC1E,mCAAuBr+I,SAAUA,EAAU7zC,SAAUkyL,EAAsB1xR,YAAaA,Y,iGCpGlG,MACA,O,IACA,MACA,QACA,O,IACA,O,IAEA,Q,IACA,Q,IACA,Q,IACA,OAEA,QACA,S,mDAEA,IAAMgyR,EAAwB,SAACryX,GAAU,IAEhCxrC,EACyBwrC,EADzBxrC,mBAAoBD,EACKyrC,EADLzrC,sBAAuB8rI,EAClBrgG,EADkBqgG,YAAaw/F,EAC/B7/L,EAD+B6/L,SAAU6zC,EACzC1zO,EADyC0zO,SAAU7mU,EACnDmzF,EADmDnzF,eAAgBqjD,EACnE8vC,EADmE9vC,aACjG/6D,EAA8B6qG,EAA9B7qG,SAAUmQ,EAAoB06F,EAApB16F,iBAEZ,IAAKu6R,IAAaA,EAAS32L,QACzB,OAAO,KAN8B,IAShC+N,EAA4BziD,EAA5ByiD,KAAMw8N,EAAsBj/Q,EAAtBi/Q,mBAEP6+I,EAAkB,WACtB,GAAa,IAATr7W,EACF1iD,EAAsB,CAAC0iD,KAAM,QACxB,CACL,GAAIj6G,OAAOC,UAAUw2U,GAAqB,CACxC,IAAMw+I,EAAiB98d,EACnB,2BAA6Bu+U,EAAW,0BAA4B,eACpE,mDAAqDA,EAAW,0BAA4B,eAC1Fw+I,EAAYpke,SAASg9F,cAAcmnY,GACrCC,IACF,aAAEA,GAAWhwY,QAAQ,CAACy5E,UAAY83K,GAAqB,IAAA5T,kBAAiB3vQ,GAAiB,IAAK,SAE3F,CACL,IAAMiia,EAAkBrke,SAASg9F,cAAc,yBACzConY,EAAYC,EAAkBA,EAAgBx8U,QAAQ+9L,EAAW,0BAA4B,eAAiB,KAChHw+I,IACF,aAAEA,GAAWhwY,QAAQ,CAACy5E,UAAWw2T,EAAgBtuM,UAAY,IAAK,KAGtExjF,GAAY,WACV9rI,EAAsB,CACpBtvC,SAAS,EACTgyF,KAAM,EACNimN,UAAU,SAMlB,OACE,mCAAQxxO,KAAMurB,EAAO,EACb33B,UAAW,kBAAoBh6E,EAAmB,0BAA4B,oBAC9E5I,GAAI,cACJmjS,SAAUA,EAAS32L,QACnBw2L,UAAW,QACXI,YAAA,EACAC,eAAe,IACpB,gBAAGC,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAGEj3R,MAAO,CAAEk3R,gBAAiB,iBAE1B,mCAAO3gN,UAAU,yBACd23B,EACC,+BAAM33B,UAAU,kDACd,+BAAKA,UAAU,4BACb,8BAAIA,UAAU,MACZ,4CAAkB5iF,GAAI,0BAA0Bu6G,EAAK,YAEvD,6BAAG33B,UAAU,iCACX,4CAAkB5iF,GAAI,0BAA0Bu6G,EAAK,YAGzD,6BAAG33B,UAAU,sCACX,mCAAQA,UAAW,gBAAkBzyE,EAAe8/F,mBAChD,wBAA0B,4CACtB6kE,QAAS8gT,GACf,4CAAkB51d,GAAI,0BAA0Bu6G,EAAK,eAIzD,WAQhBo7W,EAAsBz7U,UAAY,CAChCipJ,SAAU,UAAUr/F,IACpBH,YAAa,UAAU5sB,KACvBigK,SAAU,UAAU58L,MAGtB,IAeMkuC,EAAqB,CACzBzwH,+C,WAGa,IAAA0wH,aACb,IAAAzkF,UApBsB,SAACxzG,GAAU,MACUA,EAAM0zG,UAA1ClsC,EAD0B,EAC1BA,mBAAoBtE,EADM,EACNA,aAK3B,MAAO,CACLsE,qBACA3nD,eANqB7f,EAAMqN,gBAO3B61D,eACA/6D,SAPiBnI,EAAMgR,YAAlB7I,SAQLmQ,iBAPyBtY,EAAMqY,YAA1BC,oBAgBkB0/K,EAAzB,CAA6CqtS,K,8EC1H/C,W,OACA,O,IAEA,S,IACA,Q,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,8DA6De,IAAA7xX,UAZS,SAACxzG,GAGvB,MAAO,CACL0iE,WAHmB1iE,EAAM0zG,UAApBhxC,WAILv6D,SAHiBnI,EAAMgR,YAAlB7I,YAOkB,GAGZ,EA3DS,SAAC6qG,GAAU,IAE1Bw2E,EAAsCx2E,EAAtCw2E,aAAc9mH,EAAwBswC,EAAxBtwC,WAAYv6D,EAAY6qG,EAAZ7qG,SAC3B8zG,GAAc,IAAA0rC,UAEpB,OACE,+BAAKr1D,UAAU,WACb,kCAAmBwiP,SAAnB,CAA4Bl2U,MAAOq9G,GACjC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OAAwB,mCAAYnrO,YAAaA,EAAamrO,mBAAoBA,OAErF,wCACA,mCAAiBnrO,YAAaA,IAC7B9zG,EACC,wCACE,KACJ,wCACA,mCAAc8zG,YAAaA,IAC3B,wCACsC,WAArCn7G,SAASC,SAASoC,eAA8B,wCAA4B,KAC7E,wCACA,wCACA,wCACA,wCACA,wCACCu/D,EACC,wCACE,wCAEA,wCACA,wCACA,wCACA,yCAEA,KACJ,wCACA,wCACC8mH,EACC,mCAAmBvtE,YAAaA,IAC7B,SAACmrO,GAAD,OAAwB,mCAAanrO,YAAaA,EAAamrO,mBAAoBA,OAEpF,W,6FCrEZ,O,OACA,O,IACA,M,IAEA,O,IACA,Q,IACA,SACA,QACA,Q,0DAEA,IAKMm+I,EAAkB,SAACjlX,GACvB,OAAOxuG,KAAKC,MAAe,IAATuuG,GAAgB,KAG9BklX,EAA8B,SAAC/7a,GACnC,OAAO87a,EAPgB,KAFP,KASoB97a,GAAb,MAOnBg8a,EAAa,SAACzyX,GAAU,IAErB89S,EAAkC99S,EAAlC89S,eAAgBnhY,EAAkBqjF,EAAlBrjF,eAFK,GAGkB,IAAAk5H,UAAS,KAH3B,qBAGrB68U,EAHqB,KAGJC,EAHI,QAIQ,IAAA98U,WAAS,GAJjB,qBAIrB+8U,EAJqB,KAITC,EAJS,QAKA,IAAAh9U,WAAS,GALT,qBAKrBi9U,EALqB,KAKbC,EALa,QAMc,IAAAl9U,UAAS68U,GANvB,qBAMrBM,EANqB,KAMNC,EANM,QAOkB,IAAAp9U,UAAS,MAP3B,qBAOrBq9U,EAPqB,KAOJC,EAPI,KAStBC,EAAY,WAChBT,EAAmBH,EAA4B10E,EAAe30S,UAAUxpD,cAW1E,IARA,IAAA02D,YAAU,WAER,OADAvoH,SAASytD,iBAAiB,aAAc63a,GACjC,WACLtle,SAAS8pG,oBAAoB,aAAcw7X,MAG5C,KAEEt1E,EAAe30S,UAClB,OAAO,KAKT,IAAMkqX,EAAkB,SAACvzd,GAEvB,GAAIg+Y,EAAe30S,UAAUoyQ,aAAe1uX,OAAOqmO,UACjD,OAAO,EAET,IAAIz8K,EAAQ,EACN68a,EArC0B,SAACljc,GACnC,OAAOmic,EAAgBgB,KAAuC,IAA0Bnjc,EAXjE,KA+CAojc,CAA4Bd,GACjD,GAAa,SAAT5yd,EAAiB,CACnB,UAAU+1B,eAAe,EAAAwB,6BAA6BsB,cACtD,IAAM86b,EAAYlB,EAAgBe,EAnDrB,KAoDb78a,EAAQg9a,EArDI,UAqDgCA,MACvC,CACL,UAAU59b,eAAe,EAAAwB,6BAA6BuB,eACtD,IAAM86b,EAAYnB,EAAgBe,EAvDrB,KAwDb78a,EAAQi9a,EA1DI,IA0DgCA,EAE9Cf,EAAmBH,EAA4B/7a,IAC/CqnW,EAAe30S,UAAUC,aAAa,KAAM3yD,GAC5C95B,EAAe85B,IAgCXyG,EAAY,WAChB21a,GAAc,IAIVc,EAAc,CAClBt+V,wBAAyBq9V,EAAzB,OAGF,OACE,+BAAKpzY,UAAU,aACb,mCAAYA,UAAU,iEACVkyF,QAAS,kBAAM6hT,EAAgB,UACzC,yCAEF,+BAAK/zY,UAAU,mBACVziC,YA7CW,SAACy4C,GACnBu9X,GAAc,GACdE,EAAUz9X,EAAMzmF,SAChBokd,EAAiBP,GACjB,IAAMhsb,EArEQ,IAqEEo3W,EAAe30S,UAAUxpD,WAA4B,CACnE7wC,EAAGgvY,EAAe30S,UAAUy3I,GAAGr6I,YAAc,EAC7Cx3F,EAAG+uY,EAAe30S,UAAUy3I,GAAGp6I,aAAe,GAC5Cs3S,EAAe30S,UAAUqvQ,uBAC7B26G,EAAmBzsb,IAsCZ2W,YAnCW,SAACi4C,GACnB,GAAIs9X,EAAY,CACd,IAAMpmW,EAAOsmW,EAASx9X,EAAMzmF,QACtBgmP,EAAem+N,EAAgBxmW,GAAQ,EACzC,EACAwmW,EAAgBxmW,GAAQ,IACtB,IACAwmW,EAAgBxmW,EACtBmmW,EAAmB99N,GACnB,IAAMp+M,EApFM,KAoFeo+M,EAlFR,IAsFnBipJ,EAAe30S,UAAUovQ,QAAQ9hU,EAAOy8a,GACxCp1E,EAAe30S,UAAUktQ,WAsBpBn5T,UAAWA,EACXw4C,aAAcx4C,GACjB,+BAAKoiC,UAAW,0BAA4BszY,EAAa,YAAc,IAAK7pd,MAAO4qd,KAErF,mCAAYr0Y,UAAU,iEACVkyF,QAAS,kBAAM6hT,EAAgB,WACzC,2CAMRZ,EAAW77U,UAAY,CACrBknQ,eAAgB,UAAUzxZ,QAG5B,IAIM24L,EAAqB,CACzBroK,iC,WAGa,IAAA6jF,UARS,WACtB,MAAO,KAO+BwkF,EAAzB,CAA6CytS,I,6FClJ5D,O,OACA,O,IACA,M,IAEA,Q,IACA,Q,IACA,Q,IAEA,SACA,QACA,Q,IACA,Q,mDAEA,IAAMmB,EAAkB,SAAC5zX,GAAU,IAE1B/sC,EAA0D+sC,EAA1D/sC,YAAaD,EAA6CgtC,EAA7ChtC,mBAAoBi2C,EAAyBjJ,EAAzBiJ,YAAa9zG,EAAY6qG,EAAZ7qG,SAC9CiwG,EAAoBnyC,EAApBmyC,OAAQh1E,EAAY6iC,EAAZ7iC,SACTqvQ,GAAY,IAAA9qJ,QAAO,MAEnBykJ,EAAc,SAAC9jM,GACfxnG,SAASuzN,cAAgB/rH,EAAMlqF,OAAOuqI,QAAQ,YAAc,EAAA9hH,iBAAiBhlC,SAASf,SAASuzN,aAAarmN,SAGhHg4D,EAAmB,CACjBoyC,QAAQ,EACR9vB,cAAe,MAIbxG,EAAS,CACbtoC,KAAMpW,EAASthB,EACflV,IAAKw2B,EAASrhB,GAGhB,OACE,+BAAKhG,MAAO+lE,EAAQwQ,UAAU,eAAeo1D,IAAK+qJ,GAChD,mCAAQ/zM,KAAM0Z,EACN9lB,UAAW,uBACXugN,SAAUJ,EAAUv2L,QACpBw2L,UAAW,eACXI,YAAA,EACAC,eAAgB5qS,EAChBiiU,UAAW,CAAC,CACVjsU,KAAM,kBACNk9H,SAAS,EACTm3B,QAAS,CACP63K,SAAS,EACTC,aAAa,EACbC,QAAQ,EACRC,aAAc,WACdC,QAAS,OAGlB,gBAAGz3B,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB,cAE1B,+BAAK3gN,UAAU,gCACb,mCAAmB2pB,YAAaA,IAC7B,SAACmrO,GAAD,OACC,mCAAmB1c,YAAat+B,GAC9B,+BAAK95M,UAAU,gCACb,mCAAwB80P,mBAAoBA,gBAalEw/I,EAAgBh9U,UAAY,CAC1B3tC,YAAa,UAAU4tC,UAAU,CAC/B,UAAU48B,KACV,UAAUnlI,MAAM,CAAE46D,QAAS,UAAUs3F,SAIzC,IASMxb,EAAqB,CACzBhyH,yC,WAGa,IAAAwtC,UAbS,SAACxzG,GAGvB,MAAO,CACLimE,YAHoBjmE,EAAM0zG,UAArBztC,YAIL99D,SAHiBnI,EAAMgR,YAAlB7I,YAW+B6vL,EAAzB,CAA6C4uS,I,mHChG5D,O,OACA,OACA,O,IACA,MACA,Q,IAEA,Q,IACA,Q,IACA,Q,IACA,O,IACA,Q,IACA,Q,IACA,Q,IACA,QAIA,Q,IACA,SAEA,QAWA,QACA,Q,OACA,Q,IACA,S,IACA,O,IACA,QACA,QACA,QACA,QACA,QACA,QACA,Q,mDAEA,IAAMv+F,EAAoC,CAAC,mBAAoB,iBAAkB,aAAc,eAEzFw+F,EAAyB,SAAC7zX,GAAU,IAiBlC,EAfC/sC,EAC4B+sC,EAD5B/sC,YAAaD,EACegtC,EADfhtC,mBAAoBohR,EACLp0O,EADKo0O,mBAAoBjlU,EACzB6wF,EADyB7wF,KAAMha,EAC/B6qG,EAD+B7qG,SAAU05F,EACzCmR,EADyCnR,WAAYspC,EACrDn4B,EADqDm4B,oBAAqBgtD,EAC1EnlF,EAD0EmlF,QAC3G11H,EAAiCuwC,EAAjCvwC,cAAe5iD,EAAkBmzF,EAAlBnzF,eAEV7R,EAAyBi4D,EAAzBj4D,OAAQs6E,EAAiBriB,EAAjBqiB,cACTmqN,GAAY,IAAA9qJ,QAAO,MANe,GAOc,IAAAkB,WAAS,GAPvB,qBAOjC0/O,EAPiC,KAOZC,EAPY,KAQlC5lX,GAAS,IAAAC,oBARyB,GAUN,IAAAk7F,2BAA0B/vG,EAAQs6E,GAA7D21B,EAViC,EAUjCA,WAAYC,EAVqB,EAUrBA,YACbQ,EAAmB97F,EAAOsD,MAAP,QAA0BtD,EAAOsD,MAAP,OAAuBwwF,YAAc9zF,EAAOsD,MAAP,OAAuBwwF,YAAc,EAAAr1E,aAAaiB,eACpI67E,EAA2C,cAA9B,IAAAr6G,2BACb66G,GAAWR,GAAc,EAAA/3E,4BAA4BvkC,SAASmM,GAC9D4wG,GAAWT,IAAe,EAAA53E,wBAAwB1kC,SAASmM,IAAW,EAAAw4B,0BAA0B3kC,SAASmM,IACzG6wG,IAAkBV,GAAc,EAAAx3E,mCAAmC9kC,SAASmM,GAE5Ey6X,IAAA,gCAAqB,WAAOhlL,EAAe9pH,GAAtB,oGAEnB42K,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCY,6BAA+B0xK,EAC/D,EAAAp5K,6BAA6B0B,0BAA4B03K,EAC7D,UAAU56K,eAAe0nO,IAErB5xJ,IAAa4pR,IAAuB,EAAAtlW,yBAAyBphC,SAAS4hN,GAPjD,uBAQvB+kL,GAAuB,GARA,mBAShB,GATgB,OAUdD,GACTC,GAAuB,GAXA,UAczBxiU,EAAmB,CACjBoyC,QAAQ,EACR9vB,cAAe,GACf89P,cAAe3iI,IAGbklL,EAAallL,EACb/yH,EAAiB,MAEjBiuB,KAAa,IAAAzhF,oBAAmBta,KAAY,EAAAua,gBAAgBC,IAA0B,yBAAlBqmL,GAA8D,gBAAlBA,IAClHklL,EAAa,eACPxpR,EAAav8F,EAAOgb,wBAAwB+qW,MAE1Ch8S,EAAW/pE,EAAOo9E,sBAAsB,CAAC98E,KAAMi8F,GAAa,KAAM,KAAMA,EAAWtxF,eACnE,yBAAlB41L,GACIrtD,EAAezpE,EAASn5E,MAAK,SAAA6T,GACjC,OAAOA,EAAQnE,KAAK1I,SAAb,WAAsC6M,EAAQnE,KAAK1I,SAAb,UAAmC3Y,SAAS,YAGzF6uF,EAAiB0lE,EAAalzI,MAGbi8F,EAAWtxF,eAAiBsxF,EAAWtxF,cAAcrT,SAAzB,WAAkD2kG,EAAWtxF,cAAcrT,SAAzB,UAA+C3Y,SAAS,QAEjJ+mY,EAAcj8S,EAASn5E,MAAK,SAAA6T,GAChC,OAAQA,EAAQnE,KAAK1I,SAAb,YAAuC6M,EAAQnE,KAAK1I,SAAb,UAAmC3Y,SAAS,YAG3F6uF,EAAiBk4S,EAAY1lX,SAOnCylX,EAAW9mY,SAAS,WAjDC,wBAkDjB69G,EAAWipR,EAAWljY,MAAM,KAAK,GACvCg9D,GAAc,GACd0oE,EAAoBtpC,EAAWruF,MAAK,SAAAsuF,GAAA,OAAcA,EAAWpyF,KAAOgwG,MAEpEy4E,EAAQ17L,MAAQ,IAAAw/F,eAAa,GAAS,EAAAh/E,OAAO0uF,OAA7C,IAAuD+T,GAtDhC,mBAuDhB,GAvDgB,aA0DnBp7F,EAAe1B,EAAOgb,wBAAwB+qW,KAC/BrkX,EAAaw1E,sBAAuBuuS,EAAkCxmY,SAAS8mY,GA3D3E,wBA4DvB,IAAAr6W,gBA5DuB,WA6DjB,IAAA+rE,6BAA4B/1E,GA7DX,SA8DvB,IAAA01E,iBA9DuB,QAiEnBm6H,GAAkBw0K,EAAW9mY,SAAS,QACtCile,EAAgB1/I,EAAmBuhD,EAAYj4S,EAAgBpI,GAAe,KAAS,EAAD,oBAAuBngF,IAAW,EAAMgsN,GACpIx6H,EAAmBjJ,GAAkBo2Y,GAnEZ,mDAArB,+CAsEN,OAAIloX,IAAYV,EAAY/hH,OAAS,EAEjC,wCACG,SAACw9F,GAAD,OACC,+BAAKjqF,GAAG,eAAe4iF,UAAU,yBAC9B4rB,EAAY1uG,KAAI,SAAAuvG,GACf,IAAM0kG,EAAgB1kG,EAAO/wG,OAEvB+4d,EAAiBtjR,EAAc5hN,SAAS,iBACxCw7U,EAAal7T,EAAKC,cAAc,CAAC1S,GAEjC,+BAAiCq3d,EAAiB,SAAWtjR,KAC7D2rF,EAAY23L,EACd,wCAGE,UAA2BtjR,GACzB,uCAAU,UAA2BA,IACrC,wCACR,OACE,mCAAQvkN,IAAKukN,EACL/7D,IAAkC,KAClCp1D,UAAU,uFACVkyF,QAAS,kBAAMikN,GAAmBhlL,EAAe9pH,IACjDy1M,UAAWA,GACrB,gCAAM98M,UAAU,qCACby0Y,EAAiB,wCAAU,4CAAkBr3d,GAAG,mCAA/B,KAAgF,KAAM2tU,WAYpH,mCAAO3tU,GAAG,gBACR,wCACG,SAACiqF,GAAD,OACC,uCACGukB,EAAY1uG,KAAI,SAAAuvG,GACf,IAAM0kG,EAAgB1kG,EAAO/wG,OACvB66X,EAAiBlqR,IAAY,EAAA17E,yBAAyBphC,SAAS4hN,GAC/DujR,EAAiBvjR,EAAc5hN,SAAS,iBACxCkle,EAAiBtjR,EAAc5hN,SAAS,iBACxCole,EAAuBpoX,IAAkB4kG,EAAc5hN,SAAS,oBAChE47G,EAAWupX,GAAkBD,GAAkBE,EAEjDC,EAAgBF,EAChBnlY,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,MAAQ+zM,EAAch+M,MAAM,kBAAkB,MAAItH,KACrF8oe,EACEplY,EAAWruF,MAAK,SAAAsuG,GAAA,OAAWA,EAAQpyG,MAAQ+zM,EAAch+M,MAAM,qBAAqB,MAAItH,KACxF,GACF+9c,EAAe,GAEnB,GAAI/9V,EAAY,CAEd,IAAI41H,EAAY,GAEdA,EADE,EAAA1tM,6BAA6BxkC,SAAS4hN,GAC5B,UACH9kG,IAAYqoX,EACT,SACe,eAAlBvjR,EACG,QAEA,SAGdy4P,EAAerzE,EACX,uCACA,uBAAuB90J,EAAU,KAAOizP,EACnB,mBAArBtoX,EAAwC,SAAWA,EACnDqoX,EAAiB,SAAWtjR,QAEhCy4P,EAAe,EAAAx1a,iCAAiC7kC,SAAS4hN,GACrD,iCAAmCA,EACnC,oCAAsCA,EAG5C,OACE,mCAAUvkN,IAAKukN,EACL/7D,IAAKmhP,EAAiBp2F,EAAY,KAClCngN,UAAU,2BACVkyF,QAAS,kBAAMikN,GAAmBhlL,EAAe9pH,KACzD,uCACG8jB,EACG,wCACA,UAA2BgmG,GACzB,uCAAU,UAA2BA,IACrC,yCAEPhmG,IAAa59F,EAAeggG,SAAWonX,GACpC,4CAAkBv3d,GAAImQ,EAAeggG,QAAU,oCAAsC,mCACrF,KACHpC,IAAa59F,EAAeggG,SAAWonX,GAAwB,IAAM,MACpEpnd,EAAeggG,SAAWqnX,EAAgBA,EAC1C,4CAAkBx3d,GAAIwsc,IAEvBrzE,IAAmBm+F,EAAiB,+BAAK10Y,UAAU,sCAAqC,yCAA6B,SAI3HqsB,GAAW,mCAA8B8pR,mBAAoBA,GACpB51F,SAAUJ,EACVjxP,QAASy8D,EAAWvvG,QAAO,SAAAqwG,GAAA,OAAU,EAAA97E,yBAAyBphC,SAASk9G,EAAO/wG,WAC9Eu6X,oBAAqBA,IAAyB,WAQpGs+F,EAAuBj9U,UAAY,CACjCw9L,mBAAoB,UAAU3gK,KAAK9lE,YAGrC,IAcMq3E,EAAqB,CACzBhyH,wCACAvD,8BACA0oE,2C,WAGa,IAAAskB,aACb,IAAAwoC,aACE,IAAAzkF,UAtBoB,SAACxzG,GAMvB,MAAO,CACLimE,YANoBjmE,EAAM0zG,UAArBztC,YAOL99D,SANiBnI,EAAMgR,YAAlB7I,SAOL05F,WANmB7hG,EAAMqY,YAApBwpF,WAOLhiF,eANqB7f,EAAMqN,mBAkBF2qL,EAAzB,CAA6C6uS,M,iGClRjD,MACA,OACA,O,IACA,M,IAEA,Q,IACA,Q,IACA,Q,IACA,O,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IAEA,SACA,Q,IACA,Q,mDAGA,IAAMM,EAA+B,SAACn0X,GAAU,IAEvCu1R,EAAkFv1R,EAAlFu1R,oBAAqBE,EAA6Dz1R,EAA7Dy1R,mBAAoB51F,EAAyC7/L,EAAzC6/L,SAAUrxP,EAA+BwxD,EAA/BxxD,QAASwkB,EAAsBgtC,EAAtBhtC,mBAE7Ds0Y,EAAc,WAClBt0Y,EAAmB,CACjBoyC,QAAQ,EACR9vB,cAAe,MAInB,OACE,mCAAQoW,KAAM6pS,EACNj2S,UAAU,4FACV5iF,GAAI,gBACJmjS,SAAUA,EAAS32L,QACnBw2L,UAAW,cACXI,YAAA,EACAC,eAAe,IACpB,gBAAGC,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB,cAE1B,+BAAK3gN,UAAU,gCACb,mCAAmBo4O,YAAa4vI,GAC9B,uCACE,wCACG,SAAC3gX,GAAD,OACC,mCAAUjqF,GAAG,gBACV8xC,EAAQhyC,KAAI,SAAAuvG,GACX,IAAM0kG,EAAgB1kG,EAAO/wG,OAC7B,OACE,mCAAU9O,IAAKukN,EAAenxH,UAAU,2BAA2BkyF,QAAS,kBAAMikN,EAAmBhlL,EAAe9pH,KAClH,uCACG,UAA2B8pH,GAAiB,uCAAU,UAA2BA,IAA4B,yCAEhH,4CAAkB/zM,GAAI,8BAA+B+zM,oBAgBjF0jR,EAA6Bv9U,UAAY,CACvC6+O,mBAAoB,UAAUhiN,KAAK9lE,WACnC4nR,oBAAqB,UAAUz+O,KAAKnpC,WACpCkyL,SAAU,UAAUr/F,IAAI7yF,WACxBn/D,QAAS,UAAUzjC,MAAM4iG,YAG3B,IAOMq3E,EAAqB,CACzBhyH,yC,WAGa,IAAAwtC,UAXS,SAACxzG,GAEvB,MAAO,CACLimE,YAFoBjmE,EAAM0zG,UAArBztC,eAU+B+xH,EAAzB,CAA6CmvS,I,6FC3F5D,O,OACA,OAEA,Q,IACA,SACA,Q,IACA,S,IACA,SACA,SAKA,QACA,QACA,QACA,QACA,Q,mDAEA,IAkFMnvS,EAAqB,CACzBv1H,8BACA08F,4DACAV,8DACAF,gDACA5uI,iC,WAGa,IAAA6jF,UA9BS,SAACxzG,GAAU,MACsEA,EAAM0zG,UAAtGhxC,EAD0B,EAC1BA,WAAYoB,EADc,EACdA,kBAAmBgB,EADL,EACKA,kBAAmBV,EADxB,EACwBA,mBAAoB8C,EAD5C,EAC4CA,uBAO7E,MAAO,CACLxE,aACAv6D,SARiBnI,EAAMgR,YAAlB7I,SASLi3J,0BARkCp/J,EAAMk4L,WAAnC94B,0BASLt7F,oBACAgB,oBACAV,qBACAtnD,uBAX+B9c,EAAMwc,UAAhCM,uBAYL6pG,eAXuB3mH,EAAMilV,UAAxBt+N,eAYLruG,iBAXyBtY,EAAMqY,YAA1BC,iBAYL4uD,4BAYoC8wH,EAAzB,EA1FM,SAAChlF,GAAU,IAEvBtwC,EAEyEswC,EAFzEtwC,WAAYv6D,EAE6D6qG,EAF7D7qG,SAAUi3J,EAEmDpsD,EAFnDosD,0BAA2BD,EAEwBnsD,EAFxBmsD,6BAA8B7mJ,EAEN06F,EAFM16F,iBACpFwrD,EAC8EkvC,EAD9ElvC,kBAAmBgB,EAC2DkuC,EAD3DluC,kBAAmB25F,EACwCzrD,EADxCyrD,8BAA+BF,EACSvrD,EADTurD,uBAAwBtiD,EACfjJ,EADeiJ,YAC7FtsF,EAA8EqjF,EAA9ErjF,eAAgBy0C,EAA8D4uC,EAA9D5uC,mBAAoBuiD,EAA0C3T,EAA1C2T,eAAgBz/C,EAA0B8rC,EAA1B9rC,uBAJxB,GAMQ,IAAA2hF,WAAS,GANjB,qBAMvBpkH,EANuB,KAMV2ic,EANU,KAOxBC,GAAoB,IAAA5/U,aAAY3iF,IAOtC,IAAAukD,YAAU,WACJ+1C,GACFD,GAA6B,KAG9B,CAACr7F,KAEJ,IAAAulD,YAAU,WACJvkD,IAAsB,EAAA1gC,cAAcK,YACtC2ic,GAAe,GACLtia,IACNrgC,GACF2ic,GAAe,GACf3oU,GAA8B,GAC9BF,EAAuBz6F,GACvBq7F,GAA6B,IACpBkoU,IAAsB,EAAAjjc,cAAcQ,eAC7C,IAAAo3E,eAAcC,EAAatsF,MAI9B,CAACm1C,IAEJ,IAIMs8B,GAAoB9oF,IAAoB,IAAA6oF,oBAAmBz+B,EAAY0B,EAAoBN,EAAmBoD,GAE9Goga,EAAS5ka,GAAcoB,IAAqB,IAAA1nD,oBAAmB0nD,GAErE,OACE,mCAASwuB,UAAW,iBACf5vB,EAAa,yBAA2B,KACxC4ka,EAAS,yBAA2B,KACpC3gX,EAAiB,uBAAyB,KAC1CvlB,EAAmB,gCAAkC,KACvDj5F,EAbIi3J,EAA4B,wCAAsC,wCAcrE,wCACE,8C,8ECxEV,I,IAAA,MACA,O,IACA,MAEA,Q,IACA,O,IACA,S,IACA,S,IACA,S,IAEA,QACA,Q,IACA,SACA,U,mDAEA,IAAMmoU,EAAe,SAACv0X,GAAU,IAEvBlvC,EAAiGkvC,EAAjGlvC,kBAAmB0tV,EAA8Ex+S,EAA9Ew+S,UAAWpyP,EAAmEpsD,EAAnEosD,0BAA2B9mJ,EAAwC06F,EAAxC16F,iBAAkBkB,EAAsBw5F,EAAtBx5F,mBAIlF,IAFA,IAAA64Y,2BAA0BvuV,EAAmBxrD,EAAkBkB,IAE1DsqD,GAAqBxrD,EACxB,OAAIk5Y,EACK,wCAEF,KAGT,IAAMp0Y,GAAkB,IAAAhB,oBAAmB0nD,GAE3C,OACE,+BAAKwuB,UAAW,4BAA8Bl1E,EAAkB,yBAA2B,KACzF,+BAAKk1E,UAAU,wCACb,wCACA,wCACC8sE,EAA4B,wCAA+B,wCAC5D,2CAMRmoU,EAAa39U,UAAY,CACvBvpD,YAAa,UAAU/+C,MAAV,qB,WAmBA,IAAAkyD,UAhBS,SAACxzG,GAOvB,MAAO,CACL8jE,kBAP0B9jE,EAAM0zG,UAA3B5vC,kBAQLs7F,0BAPkCp/J,EAAMk4L,WAAnC94B,0BAQLtiJ,uBAP+B9c,EAAMwc,UAAhCM,uBAQLxE,iBAPyBtY,EAAMqY,YAA1BC,iBAQLkB,mBAPiBxZ,EAAMqN,gBAAlB+B,YAWM,CAAyBm4d,I,8EC9DxC,W,OACA,O,IAEA,Q,IACA,O,IACA,O,IACA,Q,IACA,S,IACA,Q,IACA,SACA,Q,IACA,S,IACA,Q,IACA,QACA,Q,IACA,S,IACA,Q,IACA,Q,IACA,S,8DAwEe,IAAA/zX,UAnBS,SAACxzG,GAAU,MACgDA,EAAM0zG,UAAhF5vC,EAD0B,EAC1BA,kBAAmBS,EADO,EACPA,eAAgBC,EADT,EACSA,gBAAiBJ,EAD1B,EAC0BA,mBAD1B,EAEDpkE,EAAMgR,YAGtC,MAAO,CACL8yD,oBACAS,iBACAC,kBACAJ,qBACAj8D,SAV+B,EAE1BA,SASLuD,YAX+B,EAEhBA,YAUfoR,uBAT+B9c,EAAMwc,UAAhCM,0BAakB,GAGZ,EAtEa,SAACk2F,GAAU,IAE9BlvC,EAAgCkvC,EAAhClvC,kBAAmB0tV,EAAax+S,EAAbw+S,UAE1B,IAAK1tV,EACH,OAAI0tV,EACK,wCAEF,KAGT,IAAMhnU,IAAY,IAAAz7E,WAAU+0D,GACtBuvM,GAAkB,IAAAj3P,oBAAmB0nD,GAE3C,OACE,+BAAKwuB,UAAU,uBACZ+gL,EACC,wCAEA,wCACE,+BAAK/gL,UAAU,YACb,8BAAIA,UAAU,kBAAiB,mCAAavnF,QAAS+4D,EAAmBhkD,mBAAmB,MAE7F,6BAAGwyE,UAAU,6BACX,mCAAgB+N,YAAav8B,KAE/B,+BAAKwuB,UAAU,mCACb,mCAAoBvnF,QAAS+4D,EAAmB+vM,OAAO,KAEzD,+BAAKvhL,UAAU,qBACb,mCAAsB+N,YAAav8B,IACnC,0CAIN,+BAAKwuB,UAAU,wBACZxuB,EAAkBwnB,yBACf,wCACA,mCAAyB+U,YAAav8B,EAAmB8mJ,UAAU,KAEzE,mCAAqBpgI,SAAUA,IAC/B,wCACA,wCACA,+BAAK8H,UAAU,yBACb,mCAAsB9H,SAAUA,GAAY6oL,IAC5C,mCAAwB0xE,cAAejhR,EAAmBgrO,QAAQ,EAAMx8M,UAAU,2B,6FCjE1F,O,OACA,OACA,O,IACA,M,IACA,S,IAEA,OAEA,QACA,QACA,QACA,Q,OACA,SACA,QACA,Q,IACA,QACA,Q,OACA,Q,mDAEA,IAAMk1Y,EAA0B,SAACx0X,GAAU,IAElClvC,EAE6CkvC,EAF7ClvC,kBAAmBpmD,EAE0Bs1F,EAF1Bt1F,aAAcgmD,EAEYsvC,EAFZtvC,qBAAsB2kP,EAEVr1M,EAFUq1M,4BAA6B1tR,EAEvCq4E,EAFuCr4E,kBACzF2tR,EACkDt1M,EADlDs1M,4BAA6BngT,EACqB6qG,EADrB7qG,SAAUo8D,EACWyuC,EADXzuC,eAAgBgkP,EACLv1M,EADKu1M,iCAHhB,EAIWv1M,EADuCpT,gBAHlD,MAG6D,kBAH7D,EAIvCz9E,EAAkD6wF,EAAlD7wF,KAAM4kD,EAA4CisC,EAA5CjsC,sBAAuBoiP,EAAqBn2M,EAArBm2M,kBAJU,GAKO,IAAAtgK,UAAS,IALhB,qBAKlC0J,EALkC,KAKhBq2J,EALgB,KAMnC0pG,GAAoB,IAAA7qQ,aAAY3jF,GAChC+kP,EAAsB/kP,KAAsB,IAAAyjB,yBAAwBzjB,GAAqB,GAAKwkP,EAE9Fm/K,EAAgB,WACpB,IAAMx+a,GAAe,IAAA02C,+BAA8B77B,EAAmBpmD,EAAckiF,GAC9EiwC,GAAS,aAAO5mF,GAAgB,GAAI,CAAC,MAAO,cAClD2/P,EAAoB/4K,IAiBtB,IAdA,IAAAxmB,YAAU,WACRo+W,MAEC,CAACp/K,EAA6BQ,EAAqBN,KAEtD,IAAAl/L,YAAU,WACuC,oBAAbzpB,GAAmC0yT,GAAqBxuV,IACxF,IAAA4jB,oBAAmB4qU,EAAkBjnZ,UAAUmF,kBAAmBszD,EAAkBz4D,UAAUmF,mBAAqB,GAEnHi3d,MAGD,CAAC3ja,KAECyuF,EAAiBp2J,QACW,IAA5Bo2J,EAAiBp2J,SACf,EAAD,oBAAuBgM,GAAYo8D,GACnCT,GAAkD,kBAA7BA,EAAkB91D,OAC3C,OAAO,KAGT,IAAM05d,EAAsB5ja,EAAkBtpD,SAASolF,GAAU,GAyC3D0iH,EAAe,SAACviH,GACpB,OAAQH,GACN,IAAK,aACH,OAAQG,GACN,IAAK,IACH,OAAO59E,EAAKC,cAAc,CAAC1S,GAAI,6BACjC,IAAK,IACH,OAAOyS,EAAKC,cAAc,CAAC1S,GAAI,4BACjC,IAAK,IACH,OAAOyS,EAAKC,cAAc,CAAC1S,GAAI,6BACjC,QACE,OAAOqwF,EAEb,QACE,OAAOA,IAIb,OACE,+BAAKzN,UAAU,uBACb,gCAAMA,UAAU,6BACd,4CAAkB5iF,GAlCP,WACf,OAAQkwF,GACN,IAAK,wBACH,MAAO,yBACT,IAAK,aACH,MAAO,2BACT,IAAK,gBACH,MAAO,8BACT,QACE,MAAO,2BAyBeiyW,KADxB,IAII,gCAAMv/W,UAAU,kCAAkCgwH,EAAaolR,KAQnE,wCACG,SAACn4L,GAAD,OACC,+BAAKj9M,UAAU,4BACZigE,EAAiB/iJ,KAAI,SAAAo4E,GACpB,IAAMi5E,EAAW6mU,GAAwB9/Y,EAAOmY,YAAc2nY,EAC9D,OACE,mCAAQp1Y,UAAW,oEAAsEuuE,EAAW,8BAAgC,IAC5H3hK,IAAK0oF,EAAOmY,UACZykF,QAAS,kBA/EJ,SAAC58F,EAAQ2nN,GAClC,IAAMJ,EAAgB,UAAUllQ,sBAAsBq4K,EAAa16H,EAAOmY,YAAa/7F,cAAgB,IAAM,UAAU8lC,mBAAmBg6B,GACpIysM,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCyC,sBAAwBu7P,EACxD,EAAA9kQ,6BAA6B6C,mBAAqBiiQ,EAOtD,GANA,UAAUtmQ,eAAe0nO,GAErB,UAAOhoQ,aACT7I,QAAQ4B,IAAI,iBAAkBsmF,EAAO78E,SAGnCwkS,IACF,OAAO,EAEL4Z,GACFA,EAAkBvhO,EAAO78E,SAE3B24D,EAAqBkkB,EAAO78E,UAC5B,IAAAijF,iBAAgBpG,EAAO78E,SACvB4vB,IACAosC,IACAqvB,YAAW,WACTz7D,MACC,GAwDgCmuR,CAAmBlhO,EAAQ2nN,KAC/CjtF,EAAa16H,EAAOmY,qBAWvCynY,EAAwB59U,UAAY,CAClChqD,SAAU,UAAU11D,OACpBi/Q,kBAAmB,UAAU1iI,KAC7B54J,cAAe,UAAUyzB,MAAV,qBAGjB,IA4BM02I,EAAqB,CACzBt0H,4CACA/oC,sCACAosC,+C,WAGa,IAAA0oF,aACb,IAAAj8C,UAnCsB,SAACxzG,EAAOqvP,GAAa,IACpC9qL,EAAkBvkE,EAAM0zG,UAAxBnvC,eACDwkP,EAAqB/oT,EAAM0zG,UAAU5vC,kBAEpCpmD,EAAgB1d,EAAMyc,YAAtBiB,aACAvV,EAAYnI,EAAMgR,YAAlB7I,SAED27D,EAAoBurL,EAASxhO,eAAiBk7R,EAE9CV,EAAoD,oBAAtBh5D,EAASzvJ,UACzC97B,EAAoBA,EAAkBmmB,2BACtC,KACEs+N,EAAyD,oBAAtBl5D,EAASzvJ,UAC9C97B,GAAqBx0D,MAAMC,QAAQu0D,EAAkBz4D,UAAUmP,SAA5B,iBACjCspD,EAAkBz4D,UAAUmP,SAA5B,gBAAwDO,KAAK,KAE/D,KACJ,MAAO,CACL+oD,oBACApmD,eACA2qS,8BACAE,mCACAD,4BAA6BxkP,EAAoBA,EAAkB1jD,kBAAkB1C,GAAgB,KACrGvV,WACAo8D,oBAWuByzH,EAAzB,CAA6CwvS,K,6FC7L/C,O,OACA,OACA,O,IACA,M,IAEA,OAEA,QACA,Q,IACA,QACA,Q,mDAGA,IAAMG,EAAiB,CACrB,KAAQ,EAAA5kc,yBAAyBhjC,MAAM,EAAE,GACzC,MAAS,EAAAgjC,yBAAyBhjC,MAAM,EAAE,IAGtC6ne,EAA+B,SAAC50X,GAAU,IAEvClvC,EAA8CkvC,EAA9ClvC,kBAAmBnpC,EAA2Bq4E,EAA3Br4E,kBAAmBxY,EAAQ6wF,EAAR7wF,KAFC,GAGtB,IAAAuuY,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAHqC,qBAKxCpmM,EAAew/C,EAAkB17D,YAsCvC,OACE,wCACG,SAACmnS,GAAD,OACC,wCACGnzS,OAAOmc,KAAKovd,GAAgBn4d,KAAI,SAACowF,GAAD,OAC/B,+BAAKtN,UAAU,sBAAsBpzF,IAAK0gG,GACxC,gCAAMtN,UAAU,6BACd,4CAAkB5iF,GAAI,2BAA6BkwF,IADrD,KAGA,+BAAKtN,UAAU,4BACZq1Y,EAAe/nY,GAAUpwF,KAAI,SAAA4zB,GAC5B,IAAMy9H,EAAWv8I,EAAa6e,eAAeC,GAC7C,OACE,mCAAQkvD,UAAW,oEAAsEuuE,EAAW,8BAAgC,IAC5H3hK,IAAKkkC,EACLohJ,QAAS,kBAnDR,SAACphJ,EAAUmsQ,GAOpC,GAAIA,IACF,OAAO,EAGTjrR,EAAa6e,eAAeC,GAAY9e,EAAa6e,eAAeC,GAAY,KAAO9e,EAAakkE,2BAA2BplD,GAC3H9e,EAAa6e,eAAeC,IAAa9e,EAAakmE,WACxDlmE,EAAakmE,UAAW,GAG1B7vD,IACA+vL,IAkCuCo+F,CAAmB1lR,EAAUmsQ,KA/BjD,SAACxvM,GACpB,OAAQA,GACN,KAAK,EAAAh9D,yBAAyB,GAC9B,KAAK,EAAAA,yBAAyB,GAC5B,OAAO5gB,EAAKC,cAAc,CAAC1S,GAAI,sBACjC,KAAK,EAAAqzB,yBAAyB,GAC9B,KAAK,EAAAA,yBAAyB,GAC5B,OAAO5gB,EAAKC,cAAc,CAAC1S,GAAI,yBACjC,KAAK,EAAAqzB,yBAAyB,GAC9B,KAAK,EAAAA,yBAAyB,GAC5B,OAAO5gB,EAAKC,cAAc,CAAC1S,GAAI,yBACjC,QACE,OAAOqwF,GAoBQuiH,CAAal/K,iBAapCwkc,EAA6Bh+U,UAAY,CACvChqD,SAAU,UAAU11D,OACpBrc,cAAe,UAAUyzB,MAAV,qBAGjB,IAUM02I,EAAqB,CACzBr9J,uC,WAGa,IAAA80H,aACb,IAAAj8C,UAfsB,SAACxzG,EAAOqvP,GAAa,IACpCvrL,EAAqB9jE,EAAM0zG,UAA3B5vC,kBACA+mJ,EAAe7qN,EAAMouB,wBAArBy8L,YAEP,MAAO,CACL/mJ,kBAAmBurL,EAASxhO,eAAiBi2C,EAC7C+mJ,iBASuB7yB,EAAzB,CAA6C4vS,K,6FC9G/C,O,OACA,OACA,O,IACA,M,IAEA,OAEA,QACA,Q,IACA,QACA,Q,mDAGA,IAAMC,EAAwB,CAAC,iBAAkB,eAAgB,YAAa,WAAY,cAAe,aAAc,eAGjHC,EAA0B,SAAC90X,GAAU,IAElClvC,EAAwCkvC,EAAxClvC,kBAAmBnpC,EAAqBq4E,EAArBr4E,kBAFe,GAGjB,IAAA+1X,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAHgC,qBAKzC,IAAK5mJ,IAAsB+ja,EAAsBhme,SAASiiE,EAAkB91D,QAC1E,OAAO,KAGT,IAAMsW,EAAew/C,EAAkB17D,YAgCjC2/d,GAAgBzjd,EAAa6e,iBAAoB7e,EAAa6e,eAAb,IAAqC7e,EAAakkE,2BAA2B,IAAK1kB,GACnIkka,GAAiB1jd,EAAa6e,iBAAoB7e,EAAa6e,eAAb,IAAqC7e,EAAakkE,2BAA2B,IAAK1kB,GAE1I,OAAIika,GAAgBC,EACX,KAIP,wCACG,SAACz4L,GAAD,OACC,+BAAKj9M,UAAU,uBACb,gCAAMA,UAAU,6BACd,4CAAkB5iF,GAAG,4BADvB,KAGA,+BAAK4iF,UAAU,4BACZ,EAAAtvD,eAAexzB,KAAI,SAAA4zB,GAClB,GAAiB,MAAbA,EACF,OAAO,KAET,IAAMy9H,IAAav8I,EAAa6e,eAAeC,GACzConD,EAAwB,MAAbpnD,EAAmB2kc,EAAeC,EACnD,OACE,mCAAQ11Y,UAAW,oEACduuE,EAAW,8BAAgC,KAAOr2E,EAAW,yBAA2B,IACrFtrF,IAAKkkC,EACLonD,SAAUA,EACVg6F,QAAS,kBAxDJ,SAACphJ,EAAUmsQ,GAEpC,GAAIA,IACF,OAAO,EAGLjrR,EAAakmE,WAAalmE,EAAa6e,eAAeC,KACxD9e,EAAakmE,UAAW,GAE1BlmE,EAAa6e,eAAeC,GAAY9e,EAAa6e,eAAeC,GAAY,KAAO9e,EAAakkE,2BAA2BplD,GAiB/HzI,IACA+vL,IA6BmCo+F,CAAmB1lR,EAAUmsQ,KAClD,4CAAkB7/R,GAAI,2BAA6B0zB,cAWrE0kc,EAAwBl+U,UAAY,CAClCu/J,kBAAmB,UAAU1iI,KAC7B54J,cAAe,UAAUyzB,MAAV,qBAGjB,IAWM02I,EAAqB,CACzBr9J,uC,WAGa,IAAA80H,aACb,IAAAj8C,UAhBsB,SAACxzG,EAAOqvP,GAAa,MACIrvP,EAAM0zG,UAA9C5vC,EADoC,EACpCA,kBAAmBwoU,EADiB,EACjBA,kBACnBzhL,EAAe7qN,EAAMouB,wBAArBy8L,YAEP,MAAO,CACL/mJ,kBAAmBurL,EAASxhO,eAAiBi2C,EAC7C+mJ,cACAyhL,uBASuBt0M,EAAzB,CAA6C8vS,K,6FCpH/C,O,OACA,OACA,O,IACA,M,IAEA,OAEA,Q,IACA,Q,IACA,Q,IACA,QACA,QACA,QACA,Q,mDAGA,IAAMG,EAAoB,SAAC7kc,GACzB,OAAQA,GACN,IAAK,MACL,IAAK,IACH,MAAO,2BACT,IAAK,MACL,IAAK,IACH,MAAO,2BACT,QACE,MAAO,8BAIP8kc,EAA+B,SAACl1X,GAAU,IAEvClvC,EAA+DkvC,EAA/DlvC,kBAAmBiD,EAA4CisC,EAA5CjsC,sBAAuBoiP,EAAqBn2M,EAArBm2M,kBAFH,GAGtB,IAAAunG,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAHqC,qBAKxCpmM,EAAew/C,EAAkB17D,YAEvC,IAAK07D,GAA8C,qBAAxBx/C,EAAatW,OACtC,OAAO,KAGT,IAAMm6d,EAAcrka,EAAkBtpD,SAAlB,cACpB,IAAK2td,EACH,OAAO,KAGT,IAAMC,EAAqB,EAAA1kc,cAAch1B,QAAO,SAAA00B,GAC9C,QAAS9e,EAAakkE,2BAA2BplD,EAAU0gC,MAG7D,GAAIska,EAAmBjse,QAAU,EAC/B,OAAO,KAuBT,OACE,wCACG,SAACozS,GAAD,OACC,+BAAKj9M,UAAU,uBACb,gCAAMA,UAAU,6BACd,4CAAkB5iF,GAAG,yBADvB,KAGA,kCAAmB4gU,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,+BAAK90P,UAAU,4BACZ81Y,EAAmB54d,KAAI,SAAA4zB,GACtB,IAAMy9H,EAAWz9H,IAAa+kc,EAG9B,OACE,mCAAQ71Y,UAAW,oEACduuE,EAAW,8BAAgC,IACxC3hK,IAAKkkC,EACLonD,UALO,EAMPg6F,QAAS,kBAAM3jB,EAAW,KAzC7B,SAAC0uI,EAAsB63C,EAAoBhkT,GAMpE,GAAKA,IAAa+kc,GAAgB54L,IAChC,OAAO,EAET,IAAMxyM,EAAcz4E,EAAakkE,2BAA2BplD,EAAU0gC,GAClEi5B,IACEosN,GACFA,EAAkBpsN,GAEpBqqP,EAAmBrqP,EAAY/uF,OAAQ+uF,EAAa,MAAM,GAAM,GAAM,GACtEh2B,IACA2jJ,KAyB2Do+F,CAAmBvZ,EAAsB63C,EAAoBhkT,KACpG,4CAAkB1zB,GAAIu4d,EAAkB7kc,qBAelE8kc,EAA6Bt+U,UAAY,CACvChqD,SAAU,UAAU11D,OACpBi/Q,kBAAmB,UAAU1iI,KAC7B54J,cAAe,UAAUyzB,MAAV,qBAGjB,IAWM02I,EAAqB,CACzBr9J,sCACAosC,+C,WAGa,IAAA0oF,aACb,IAAAj8C,UAjBsB,SAACxzG,EAAOqvP,GAAa,MACIrvP,EAAM0zG,UAA9C5vC,EADoC,EACpCA,kBAAmBwoU,EADiB,EACjBA,kBACnBzhL,EAAe7qN,EAAMouB,wBAArBy8L,YAEP,MAAO,CACL/mJ,kBAAmBurL,EAASxhO,eAAiBi2C,EAC7C+mJ,cACAyhL,uBAUuBt0M,EAAzB,CAA6CkwS,K,6FCrI/C,O,OACA,OACA,O,IACA,M,IAEA,OAEA,Q,IAEA,QACA,QACA,Q,mDAGA,IAAMj5O,EAAiB,CAAC,SAAU,UAE5Bo5O,EAAiC,SAACr1X,GAAU,IAEzClvC,EAA2DkvC,EAA3DlvC,kBAAmBnpC,EAAwCq4E,EAAxCr4E,kBAAmBwuR,EAAqBn2M,EAArBm2M,kBAFG,GAGxB,IAAAunG,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAHuC,qBAK1CpmM,EAAew/C,EAAkB17D,YAMjC+/d,EAAcrka,EAAkBtpD,SAAS8tE,cACzCggZ,EAAiC,MAAhBH,GAAuC,MAAhBA,EAAsB,IAAM,IAE1E,IADoB7jd,EAAakkE,2BAA2B8/Y,EAAgBxka,GAE1E,OAAO,KA6CT,OACE,wCACG,SAACyrO,GAAD,OACC,+BAAKj9M,UAAU,uBACb,gCAAMA,UAAU,6BACd,4CAAkB5iF,GAAG,4BADvB,KAGA,+BAAK4iF,UAAU,4BACZ28J,EAAez/O,KAAI,SAAA4zB,GAClB,IAAMy9H,EAAwB,WAAbz9H,IACX9e,EAAa6e,eAAb,EACF7e,EAAa6e,eAAb,GAAoC7e,EAAa6e,eAAb,EAClCqnD,EA9BO,SAACq2E,EAAUz9H,GAClC,GAAIy9H,EACF,OAAO,EAET,IAAMynU,EAA8B,WAAbllc,EAAwB,IAAM,IAWrD,OAVgB9e,EAAakkE,2BAA2B8/Y,EAAgBxka,GAyB7Cyka,CAAiB1nU,EAAUz9H,GAC5C,OACE,mCAAQkvD,UAAW,oEACduuE,EAAW,8BAAgC,KAAOr2E,EAAW,yBAA2B,IACrFtrF,IAAKkkC,EACLonD,SAAUA,EACVg6F,QAAS,kBA5DJ,SAACphJ,EAAUmsQ,GAOpC,GAAIA,IACF,OAAO,EAGT,IAAMi5L,EAA8B,WAAbplc,EAAwB,IAAM,IAC/C25D,EAAcz4E,EAAakkE,2BAA2BggZ,EAAgB1ka,GACxEi5B,IACEosN,GACFA,EAAkBpsN,IAEpB,IAAA/O,iBAAgB+O,GAAa,GAAM,IAGrCpiE,IACA+vL,IAuCmCo+F,CAAmB1lR,EAAUmsQ,KAClD,4CAAkB7/R,GAAI,2BAA6B0zB,cAWrEilc,EAA+Bz+U,UAAY,CACzChqD,SAAU,UAAU11D,OACpBi/Q,kBAAmB,UAAU1iI,KAC7B54J,cAAe,UAAUyzB,MAAV,qBAGjB,IAWM02I,EAAqB,CACzBr9J,uC,WAGa,IAAA80H,aACb,IAAAj8C,UAhBsB,SAACxzG,EAAOqvP,GAAa,MACIrvP,EAAM0zG,UAA9C5vC,EADoC,EACpCA,kBAAmBwoU,EADiB,EACjBA,kBACnBzhL,EAAe7qN,EAAMouB,wBAArBy8L,YAEP,MAAO,CACL/mJ,kBAAmBurL,EAASxhO,eAAiBi2C,EAC7C+mJ,cACAyhL,uBASuBt0M,EAAzB,CAA6CqwS,K,8EChI/C,I,IAAA,MACA,OACA,O,IACA,MAGA,QACA,QACA,Q,IACA,O,IACA,S,IACA,Q,IACA,QACA,S,mDAGA,IAAMI,EAA6B,gBAE7BC,EAAuB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,MAEjDC,EAA+B,SAAC31X,GAAU,IAEvC7wF,EACiB6wF,EADjB7wF,KAAMha,EACW6qG,EADX7qG,SAAU27D,EACCkvC,EADDlvC,kBAAmB25C,EAClBzK,EADkByK,SAAU9iF,EAC5Bq4E,EAD4Br4E,kBAAmB0kI,EAC/CrsD,EAD+CqsD,8BACrE1lE,EAAsBqZ,EAAtBrZ,mBAEF,GAAiC,eAA7B71B,EAAkB91D,OACpB,OAAO,KAGT,IACMsW,EAAew/C,EAAkB17D,YAEjCyyc,EAAM6tB,EAAqBvse,OAE3Byse,EAAkBF,EACnBh6d,QAAO,SAAA00B,GAAA,OAAY9e,EAAa6e,eAAeC,MAC/CjnC,OAECkxU,EAAgB5vN,EAahBuwK,EAAoB,SAACnwR,GACzB,IAAIe,EAAQ,GAAKf,EAAEugB,OAAOxf,MAE1B,IAAK6pe,EAA2Bxje,KAAKrG,GACnC,OAAO,GAOTA,GAASA,GAEGi8c,EACVj8c,EAAQi8c,EACCj8c,GAjCD,IAkCRA,EAlCQ,GAoCNA,IAAUgqe,GA7BO,SAAChqe,GACtB8pe,EAAqB5ie,SAAQ,SAACs9B,EAAUylc,GACtCvkd,EAAa6e,eAAeC,GAAaylc,EAAgB,GAAKjqe,EACxD0lB,EAAa6e,eAAeC,IAAa9e,EAAakkE,2BAA2BplD,GACjF,QAERi8H,EAA8BzgK,GAC9B+6F,IACAh/D,IAsBEs5S,CAAer1U,IAWnB,OACE,+BAAK0zF,UAAU,uBACb,+BAAKA,UAAU,cACb,+BAAKA,UAAW,2CACR,EAAD,mBAAyC,GAAnB,mBAC3B,+BAAKA,UAAU,wBACb,4CAAkB5iF,GAAIvH,IAAa,EAAD,mBAAsB,6BAA+B,4BAEzF,+BAAKmqF,UAAU,6BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iCACnC80K,QAAS,WACPwpG,EAAkB,CAAC5vQ,OAAQ,CAACxf,MAAOgqe,EAAkB,MAEvDp+Y,UAjEL,EAkEK8H,UAAW,qCACJnqF,IAAa,EAAD,mBAAsB,mCAAqC,sBACxF,yCAEF,mCAAWmqF,UAAW,qDACXjqD,MAAM,GAENmiD,UAzEJ,EA0EIx/E,KAAK,QACL8H,KAAK,SACLlU,MAAOgqe,EACPv0J,QAAQ,yBACRzrO,UAjCG,SAACN,GACvB,GAAgB,MAAZA,EAAMppG,MAAcmuU,EAEtB,OADA/kO,EAAM7V,kBACC,GA+BU+qI,SAAUwwD,IACrB,mCAAY/8B,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,iCACnC80K,QAAS,WACPwpG,EAAkB,CAAC5vQ,OAAQ,CAACxf,MAAOgqe,EAAkB,MAEvDp+Y,UApFL,EAqFK8H,UAAW,qCACJnqF,IAAa,EAAD,mBAAsB,mCAAqC,sBACxF,8CASdwge,EAA6B/+U,UAAY,CAEvCu/J,kBAAmB,UAAU1iI,KAC7B9sF,mBAAoB,UAAU8sF,KAC9B54J,cAAe,UAAUyzB,MAAV,qBAGjB,IAWM02I,EAAqB,CACzBr9J,sCACA0kI,+D,WAGa,IAAA5P,aACb,IAAAj8C,UAjBsB,SAACxzG,EAAOqvP,GAAa,MACIrvP,EAAM0zG,UAA9C5vC,EADoC,EACpCA,kBAAmBwoU,EADiB,EACjBA,kBACnBzhL,EAAe7qN,EAAMouB,wBAArBy8L,YAEP,MAAO,CACL/mJ,kBAAmBurL,EAASxhO,eAAiBi2C,EAC7C+mJ,cACAyhL,uBAUuBt0M,EAAzB,CAA6C2wS,K,6FCrJ/C,O,OACA,OACA,O,IACA,M,IAEA,OAEA,Q,IACA,QACA,QACA,S,mDAGA,IAAMG,EAA8B,SAAC91X,GAAU,IAEtClvC,EAAwCkvC,EAAxClvC,kBAAmBnpC,EAAqBq4E,EAArBr4E,kBAFmB,GAGrB,IAAA+1X,aAAW,SAAA5uY,GAAA,OAAKA,EAAI,IAAG,GAAtC4oM,GAHoC,qBAKvCpmM,EAAew/C,EAAkB17D,YAyBvC,OACE,wCACG,SAACmnS,GAAD,OACC,+BAAKj9M,UAAU,uBACb,gCAAMA,UAAU,6BACd,4CAAkB5iF,GAAG,4BADvB,KAGA,+BAAK4iF,UAAU,4BACZ,EAAAsyH,oBAAoBp1M,KAAI,SAAC4zB,GACxB,IAAMy9H,EAAWv8I,EAAa65T,eAAiB/6S,EAC/C,OACE,mCAAQkvD,UAAW,oEAAsEuuE,EAAW,8BAAgC,IAC5H3hK,IAAKkkC,EACLohJ,QAAS,kBApCJ,SAACphJ,EAAUmsQ,GAOpC,GAAIA,IACF,OAAO,EAGLjrR,EAAakmE,WACflmE,EAAakmE,UAAW,EACxBlmE,EAAag2E,iBAEfx2B,EAAkBqqC,cAClB7pF,EAAa65T,aAAe/6S,EAC5B9e,EAAakqE,mBAAqBlqE,EAAakrE,wBAE/C70D,IACA+vL,IAgBmCo+F,CAAmB1lR,EAAUmsQ,KAClD,4CAAkB7/R,GAAI,mCAAqC0zB,cAW7E0lc,EAA4Bl/U,UAAY,CACtC/7H,cAAe,UAAUyzB,MAAV,qBAGjB,IAUM02I,EAAqB,CACzBr9J,uC,WAGa,IAAA80H,aACb,IAAAj8C,UAfsB,SAACxzG,EAAOqvP,GAAa,IACpCvrL,EAAqB9jE,EAAM0zG,UAA3B5vC,kBACA+mJ,EAAe7qN,EAAMouB,wBAArBy8L,YAEP,MAAO,CACL/mJ,kBAAmBurL,EAASxhO,eAAiBi2C,EAC7C+mJ,iBASuB7yB,EAAzB,CAA6C8wS,K,wGCvF/C,O,OACA,OACA,O,IAEA,O,IAEA,S,IACA,S,IACA,SACA,QACA,QACA,QACA,S,IACA,Q,mDAEA,IAyFM9wS,EAAqB,CACzB7zH,8CACAw6F,+E,WAEa,IAAAs5B,aACb,IAAAzkF,UAfsB,SAACxzG,GAIvB,MAAO,CACL8jE,kBAJ0B9jE,EAAM0zG,UAA3B5vC,kBAKLr+C,iBAJyBzlB,EAAMgsL,QAA1BvmK,oBAakBuyK,EAAzB,EA9F4B,SAAChlF,GAAU,IAChCs+S,EACet+S,EADfs+S,iBAAkBntV,EACH6uC,EADG7uC,sBAAuBL,EAC1BkvC,EAD0BlvC,kBAAmBq0H,EAC7CnlF,EAD6CmlF,QAASx5B,EACtD3rD,EADsD2rD,sCAC1El5I,EAAoButF,EAApBvtF,iBAFqC,GAIa,IAAAojI,WAAS,GAJtB,qBAIhCkgV,EAJgC,KAIZC,EAJY,KAMvC,IAAK13E,EACH,OAAO,KAiCT,OACE,+BAAKh/T,UAAU,oBACb,+BAAKA,UAAU,iCACb,oCACE,4CAAkB5iF,GAAG,gCAEvB,oCACE,mCAAyB25E,SAAUioU,MAGvC,mCAA6BA,iBAAkBA,IAC/C,+BAAKh/T,UAAU,mBACb,+BAAKA,UAAU,iDACb,wCACG,SAAC22Y,GAAD,OACC,wCACC,SAAC9pF,GAAD,OACC,mCACE7sT,UAAW,yFACXkyF,QAAS,kBAAMukT,EAAqB,KAjDpB,SAACE,EAAiB9pF,GAChD8pF,EAAgB33E,GAChB,IAAI43E,EAAiB,GACrB53E,EAAiBxrZ,SAAQ,SAAAqje,GACvB,OAAOD,EAAiBA,GAAjBA,qBAAqBA,IAArB,cAAwC,IAAA3pY,8BAA6B4pY,EAAiB,EAAG1jd,QAElG05X,EAAqB+pF,GACrBF,GAAsB,GA0CmCI,CAAwBH,EAAiB9pF,IACpF30T,SAAUu+Y,GAjCpBA,EACK,4CAAkBr5d,GAAI4hZ,EAAiBn1Z,OAAS,EAAI,+BAAiC,8BAE1Fm1Z,EAAiBn1Z,OAAS,EAE1B,wCACE,4CAAkBuT,GAAI,qCADxB,KACgE4hZ,EAAiBn1Z,OADjF,KAKG,4CAAkBuT,GAAI,0CA+BzB,+BAAK4iF,UAAU,iDACb,mCAAQA,UAAW,yFACXkyF,QAlDW,WACzBrgH,EAAsB,IACtBw6F,EAAsC76F,GACtCq0H,EAAQ17L,MAAK,IAAA2/F,eAAct4B,GAAmB,MAgDtC,4CAAkBp0D,GAAI4hZ,EAAiBn1Z,OAAS,EAAI,wBAA0B,gC,8ECrF1F,WACA,O,IACA,MAEA,QACA,QACA,QACA,S,IACA,M,mDAEA,IAAMkte,EAA0B,SAACr2X,GAAU,IAElC3pB,EAAsC2pB,EAAtC3pB,SAAUx4E,EAA4BmiG,EAA5BniG,SACX2I,EADuCw5F,EAAlBnzF,eACezQ,SAE1C,IAAKi6E,EACH,OAAO,KAGT,IAAMzmE,GAAS,IAAAC,oBAKXymd,EAAqB,EAdgB,uBAezC,YAAsBjgZ,EAAtB,+CAAgC,KAArBt+E,EAAqB,SACzB,IAAA0tG,wBAAuB1tG,GAAS,KAIhC6X,EAAOy+E,wBAAwBt2F,EAAQiD,UAI5Cs7d,KAAuB,IAAAr1d,oBAAmBlJ,EAASiF,OAAOC,UAAUY,GAAYA,EAAW,MAxBpD,6EA2BzC,OACE,gCAAMyhF,UAAU,yBACd,oCAAM,4CAAkB5iF,GAAG,yBAC3B,0CACA,yCAAQ,IAAA0L,sBAAqB5B,GAAoB,IAAA9P,cAAa4/d,GAAqB,MAAM,MAK/FD,EAAwBz/U,UAAY,CAClCvpD,YAAa,UAAU/+C,MAAV,oBACbyxN,SAAU,UAAUjpH,KACpBy/U,aAAc,UAAUz/U,KACxBj5I,SAAU,UAAUyvG,Q,WASP,IAAAmvC,aACb,IAAAj8C,UAPsB,SAACxzG,GACvB,MAAO,CACL6f,eAAgB7f,EAAMqN,mBAKxB,CAAyBg8d,K,8EC7D3B,W,OACA,O,IAEA,Q,IACA,S,IACA,S,IAEA,Q,IACA,OACA,Q,mDAEA,IAAMG,EACE,OADFA,EAEG,QAiEHxxS,EAAqB,CACzB7zH,+C,WAGa,IAAAqvC,UARS,WACtB,MAAO,KAO+BwkF,EAAzB,EAlEe,SAAChlF,GAAU,IAChCs+S,EAAoBt+S,EAApBs+S,iBACDm4E,GAAY,IAAA9hV,QAAO,MAEnB+hV,EAAoB,SAAC5kW,GACzB,OAAQA,GACN,KAAK0kW,EAAuBC,EAAUvtX,QAAQ/mB,YAAc,GAC1D,MACF,KAAKq0Y,EAAwBC,EAAUvtX,QAAQ/mB,YAAc,KAMjE,OAAKm8T,EAKH,+BAAKh/T,UAAU,4BAEXg/T,EAAiBn1Z,OAAS,EACtB,mCAAYqoL,QAAS,WAAQklT,EAAkBF,IACrCl3Y,UAAU,8BACpB,yCAEA,KAEN,+BAAKA,UAAU,yBAAyBo1D,IAAK+hV,GAC3C,+BAAKn3Y,UAAU,oCAEXg/T,EAAiB9hZ,KAAI,SAACzE,EAASuK,GAC7B,OACE,+BAAKg9E,UAAU,yBAAyBpzF,IAAKoW,GAC3C,+BAAKg9E,UAAU,gCACb,mCAAkBxtE,WAAY/Z,EAASglQ,gBAAgB,KAGvDz6P,EAAQg8Y,EAAiBn1Z,OAAS,EAAI,+BAAKm2F,UAAU,+BAA8B,yCAAkB,WASjHg/T,EAAiBn1Z,OAAS,EACtB,mCAAYqoL,QAAS,WAAQklT,EAAkBF,IACnCl3Y,UAAU,8BACtB,yCAEA,MArCD,S,gFC/BX,I,IAAA,MACA,O,IAEA,S,IACA,Q,IACA,S,IACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,SACA,Q,IACA,S,IACA,QACA,Q,IACA,Q,IACA,SACA,Q,IACA,S,8DAmEe,IAAAkhB,UApBS,SAACxzG,GAAU,MACOA,EAAM0zG,UAAvChxC,EAD0B,EAC1BA,WAAYoB,EADc,EACdA,kBACZhnD,EAA0B9c,EAAMwc,UAAhCM,uBAF0B,EAGM9c,EAAMqY,YAG7C,MAAO,CACLqqD,aACAoB,oBACAhnD,yBACAxE,iBAV+B,EAG1BA,iBAQLupF,WAX+B,EAGRA,WASvB5yE,aARqBjvB,EAAMouB,wBAAtBa,gBAYkB,GAIZ,EAjEY,SAAC+jF,GAAU,IAE7BlvC,EAAiEkvC,EAAjElvC,kBAAmBxrD,EAA8C06F,EAA9C16F,iBAAkBupF,EAA4BmR,EAA5BnR,WAAY5yE,EAAgB+jF,EAAhB/jF,aAExD,IAAK60C,GAAqBxrD,EACxB,OAAO,KAGT,IAAMkyE,IAAY,IAAAz7E,WAAU+0D,GACtB1mD,GAAkB,IAAAhB,oBAAmB0nD,GAErCkuV,GAAa15Y,IACd,IAAA4pG,uBAAsBrgB,EAAY/9B,EAAkB91D,OAAQihB,GAEjE,OACE,+BAAKqjE,UAAW,cAAgBl1E,EAAkB,yBAA2B,KAC3E,wCACC40Y,EAAY,mCAA0BjnZ,QAAS+4D,EAAmBkuV,UAAWA,IAAe,KAC7F,+BAAK1/T,UAAU,mCACb,mCAAoBvnF,QAAS+4D,EAAmB+vM,OAAO,KAEzD,+BAAKvhL,UAAU,qBACb,gCAAMA,UAAU,qBACd,mCAAsB+N,YAAav8B,KAErC,yCAEF,mCAAqB0mB,SAAUA,IAC/B,+BAAK8H,UAAU,yBACb,mCAAsB9H,SAAUA,IAChC,mCAAwBu6P,cAAejhR,EAAmBgrO,QAAQ,EAAMx8M,UAAU,sBAEpF,wCACA,wCACA,+BAAKA,UAAU,sBACb,wCACA,yCAEF,+BAAKA,UAAU,wBACb,mCAAyB+N,YAAav8B,EAAmB8mJ,UAAU,U,8EC3D3E,I,IAAA,MACA,O,IAEA,S,IACA,S,8DA8Be,IAAAp3G,UAZS,SAACxzG,GAAU,MACOA,EAAM0zG,UAC9C,MAAO,CACLhxC,WAH+B,EAC1BA,WAGLoB,kBAJ+B,EACdA,qBAOM,GAIZ,EA5B0B,SAACkvC,GAIxC,OAF4BA,EAArBlvC,kBAOL,+BAAKwuB,UAAW,cACd,wCACA,yCANK,S,8ECXX,I,IAAA,MACA,OACA,O,IAEA,SACA,QACA,Q,8DA+Ce,IAAAm9D,aACb,IAAAj8C,UAnBsB,SAACxzG,GAQvB,MAAO,CACL2kE,eARuB3kE,EAAM0zG,UAAxB/uC,eASLx8D,SARiBnI,EAAMgR,YAAlB7I,SASL+2J,kBAR0Bl/J,EAAMk4L,WAA3Bh5B,kBASL1+I,OARexgB,EAAM4U,YAAhB4L,OASLX,eARqB7f,EAAMqN,gBAS3Bs5G,eARuB3mH,EAAMilV,UAAxBt+N,kBAaP,EA9CsB,SAAC3T,GAAU,IAE1BruC,EAA6FquC,EAA7FruC,eAAgBx8D,EAA6E6qG,EAA7E7qG,SAAU+2J,EAAmElsD,EAAnEksD,kBAAmB/8I,EAAgD6wF,EAAhD7wF,KAAMtC,EAA0CmzF,EAA1CnzF,eAAgBW,EAA0BwyF,EAA1BxyF,OAAQmmG,EAAkB3T,EAAlB2T,eAC5EgjX,EAAmBhla,IAAmB,EAAA1nD,OAAO4uF,SAE7CghF,GAAW,IAAAtsK,aAAY,EAAG,GAAIC,EAAQ2B,EAAK1C,SAAU0C,EAAKvC,OAAQC,GAAgB7b,cAExF,OACE,mCAASsuF,UAAW,2CACfq3Y,EAAmB,yBAA2B,KAC9ChjX,EAAiB,uBAAyB,KAC1Cu4C,EAAoB,mDAAqD,KAC3E/2J,EAAW,KACV,8BAAImqF,UAAW,wBAA0B4sE,EAAoB,kCAAoC,KAC/F,4CAAkBxvJ,GAAG,4BAGxBvH,EAAW,KACV,6BAAGmqF,UAAU,8BACX,4CAAkB5iF,GAAG,+BAA+BmO,OAAQ,CAACgvK,eAGhE88S,EAAmB,mCAAqBn0F,iBAAiB,IAAU,W,8EC9B1E,I,IAAA,MACA,OACA,OACA,Q,IACA,M,IAEA,O,IACA,Q,IACA,Q,IACA,QAEA,Q,IACA,SACA,QAIA,QAOA,UACA,SACA,Q,WACA,Q,IACA,QACA,QACA,QACA,Q,mDAGA,IAAMo0F,EAAgB,SAAC52X,GAAU,IAExB7wF,EAEsC6wF,EAFtC7wF,KAAMtC,EAEgCmzF,EAFhCnzF,eAAgBskD,EAEgB6uC,EAFhB7uC,sBAAuBg0H,EAEPnlF,EAFOmlF,QAASzzH,EAEhBsuC,EAFgBtuC,kBAC3Dv8D,EAC2C6qG,EAD3C7qG,SAAU00F,EACiCmW,EADjCnW,aAAcqiE,EACmBlsD,EADnBksD,kBAAmBD,EACAjsD,EADAisD,0BAA2Bp4F,EAC3BmsC,EAD2BnsC,sBAAuB8/C,EAClD3T,EADkD2T,eAC7F//C,EAA2CosC,EAA3CpsC,yBAA0BnE,EAAiBuwC,EAAjBvwC,cAE5B,IAAKo6B,EACH,OAAO,KAGT,GAA4B,wBAAxBA,EAAa7uF,OACf,OACE,mCAAUskF,UAAU,+DACVkyF,QAAS,kBAAMvlB,EAA0BpiE,EAAa7uF,UAC9D,mCAAcskF,UAAW,+BAAiC4sE,EAAoB,qBAAuB,KACnG,mCAASnjJ,MAAOmjJ,EAAoB,CAAC/2B,KAAM,EAAA/0B,OAAOC,OAAS,MACxD,UAA2BxW,EAAa7uF,UAG7C,4CAAkB0B,GAAG,kCAK3B,IA2BMitD,GAAmB,IAAAn5C,qBAAoBq5E,EAAav4E,aAAcnC,EAAMtC,GAE9E,OACE,kCAAmBywT,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,mCAAU90P,UAAU,2BACVkyF,QAAS,kBAnCH,SAAC3nF,EAAcuqP,GACvC,IAAM72E,EAAiB,EAAAjtQ,mBACnB,EAAA6tC,gCAAgCiB,uBAAyByqD,EAAa7uF,OACtE,EAAAq8B,6BAA6Be,wBAA0ByxD,EAAa7uF,OAGxE,GAFA,UAAU66B,eAAe0nO,GAErB5pJ,EAIF,OAHAlkD,EAAc,MACdiC,EAAkB,SAClByzH,EAAQ17L,KAAQ,EAAAwgB,OAAOyvF,KAAvB,IAA+B7P,EAAa7uF,OAA5C,KAIFm2D,EAAsB,EAAA7gE,oBAAqB6E,EAAW,GAA2B00F,EAAa7uF,QAC9F02D,EAAkB,IACd,EAAAphE,oBAAsBu5F,EAAa9uF,eACjC,IAAAozF,qBAAmB,EAAMtE,EAAa7uF,OAAQ6uF,EAAa9uF,YAAa,CAACkqB,SAAS,IACtFkgK,EAAQ17L,MAAK,IAAA2/F,eAAcS,EAAa9uF,aAAc5F,IAEtDgwL,EAAQ17L,MAAK,IAAAggG,uBAEf2qP,EAAmBvqP,EAAa7uF,OAAQ6uF,EAAa9uF,YAAa,MAAM,EAAxE,sBACK84D,GACHD,GAAyB,GAYMija,CAAkBhtY,EAAcuqP,KACvD,uCACG,UAA2BvqP,EAAa7uF,QAAU,uCAAU,UAA2B6uF,EAAa7uF,SAAqB,yCAE3H2uD,UASfita,EAAchgV,UAAY,CACxB/sD,aAAc,UAAUx9F,OAAOshH,YAGjC,IAeMq3E,EAAqB,CACzB7zH,8CACAO,sCACA2gR,wCACApmL,sDACAr4F,oDACAnE,+B,WAGa,IAAAw1H,aACb,IAAAxoC,aACE,IAAAj8C,UA1BoB,SAACxzG,GAAU,IAC1BmI,EAAYnI,EAAMgR,YAAlB7I,SACA+2J,EAAqBl/J,EAAMk4L,WAA3Bh5B,kBACAr4F,EAAyB7mE,EAAM0zG,UAA/B7sC,sBACA8/C,EAAkB3mH,EAAMilV,UAAxBt+N,eAEP,MAAO,CACL9mG,eAAgB7f,EAAMqN,gBACtBlF,WACA+2J,oBACAr4F,wBACA8/C,oBAeyBqxE,EAAzB,CAA6C4xS,M,8ECxIjD,I,IAAA,MACA,OACA,O,IAEA,O,IACA,O,IACA,QAEA,S,IACA,SACA,Q,IACA,SACA,Q,0DAGA,IAiEM5xS,EAAqB,CACzB35B,8CACAxnI,yC,WAGa,IAAA44H,aACb,IAAAj8C,UAjBsB,SAACxzG,GAAU,IAC1B0iE,EAAc1iE,EAAM0zG,UAApBhxC,WAGP,MAAO,CACL47F,cAHsBt+J,EAAMk4L,WAAvB55B,cAILn2J,SAHiBnI,EAAMgR,YAAlB7I,SAILu6D,gBAUuBs1H,EAAzB,EAvEmB,SAAChlF,GAAU,IACvBsrD,EAAwFtrD,EAAxFsrD,cAAen8I,EAAyE6wF,EAAzE7wF,KAAMha,EAAmE6qG,EAAnE7qG,SAAUk2J,EAAyDrrD,EAAzDqrD,sBAAuBxnI,EAAkCm8E,EAAlCn8E,mBAEvDizc,EAAmB,WACvB,UAAUjhc,eAAe,EAAAsI,gCAAgC8C,6BACzDoqH,GAAuBC,IAQzB,OAZ+FtrD,EAAdtwC,WAmB/E,mCAAS4vB,UAAW,wCAA0CgsE,EAAgB,yBAA2B,KACvG,+BAAKhsE,UAAU,qFACb,+BAAKA,UAAW,YAAcnqF,EAAW,sBAAwB,KAC/D,8BAAImqF,UAAU,kBAAiB,4CAAkB5iF,GAAI,wBACrD,mCAAYuhP,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAU,6BACVkyF,QAASslT,GACnB,0CAGJ,+BAAKx3Y,UAAU,gBACb,4CAAkB5iF,GAAI,2BAExB,wCACA,wCACA,+BAAK4iF,UAAU,0BACb,+BAAKA,UAAU,8BACb,mCAAQA,UAAW,wDAA0DnqF,EAAW,0BAA4B,IAC5Gq8K,QAASslT,GACf,4CAAkBp6d,GAAI,yBAG1B,+BAAK4iF,UAAU,8BACb,mCAAQA,UAAW,wDAA0DnqF,EAAW,iDAAmD,IACnIq8K,QApCO,WACvB,UAAU37I,eAAe,EAAAsI,gCAAgC+C,6BACzDrd,EAAmB,MAmCT,4CAAkBnnB,GAAI,4BA/BzB,U,6FC7BX,O,OACA,OACA,O,IAEA,O,IACA,QAEA,SACA,Q,IACA,SAGA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,SACA,Q,0DAEA,IAqHMsoL,EAAqB,CACzBv5B,8DACAF,iD,WAGa,IAAA9O,aACb,IAAAj8C,UAxBsB,SAACxzG,GAAU,MAC+CA,EAAM0zG,UAA/EnvC,EAD0B,EAC1BA,eAAgBH,EADU,EACVA,mBAAoBN,EADV,EACUA,kBAAmBa,EAD7B,EAC6BA,eAD7B,EAEe3kE,EAAMk4L,WAA/C15B,EAF0B,EAE1BA,eAAgBE,EAFU,EAEVA,sBAChBhhJ,EAAgB1d,EAAMyc,YAAtBiB,aACAvV,EAAYnI,EAAMgR,YAAlB7I,SACP,MAAO,CACLu2J,wBACAF,iBACA3+I,eAAgB7f,EAAMqN,gBACtBqQ,eACA6mD,iBACAH,qBACAO,iBACAx8D,WACA27D,uBAUuBk0H,EAAzB,EA3H2B,SAAChlF,GAAU,IAC/B7wF,EACsG6wF,EADtG7wF,KAAMu8I,EACgG1rD,EADhG0rD,sBAAuBD,EACyEzrD,EADzEyrD,8BAA+BD,EAC0CxrD,EAD1CwrD,eAAgB9gJ,EAC0Bs1F,EAD1Bt1F,aAAc6mD,EACYyuC,EADZzuC,eAC/FH,EAA2G4uC,EAA3G5uC,mBAAoBO,EAAuFquC,EAAvFruC,eAAgB9kD,EAAuEmzF,EAAvEnzF,eAAgB1X,EAAuD6qG,EAAvD7qG,SAAUo2J,EAA6CvrD,EAA7CurD,uBAAwBz6F,EAAqBkvC,EAArBlvC,mBAExF,IAAAulD,YAAU,YACJ9kD,GAAkBH,GAAsBO,IAAoB+5F,IAC9DD,GAA8B,GAC9BF,EAAuB,UAI3B,IAXsC,GAmBc,IAAA9pD,sBAAqB+pD,EAAgB9gJ,GAAc,GAAhGi3F,EAnB+B,EAmB/BA,kBAAmBC,EAnBY,EAmBZA,uBACpBm1X,GAAyB,IAAA70X,2BAC7BspD,EAD6B,wBACT7pD,IADS,aACaC,IAAyBl3F,GAG/D4G,EAAek6I,EAAiBA,EAAep2J,YAAc,KAC7Du0D,EAAmBr4C,GAAe,IAAAd,qBAAoBc,EAAcnC,EAAMtC,GAAkB,KASlG,OACE,kCAAmBywT,SAAnB,MACC,SAACr0N,GAAD,OACC,mCAAS3pB,UAAW,kBAAoBosE,GAAyBqrU,EAAuB5te,OAAS,yBAA2B,KAC1H,kCAAQm2F,UAAU,yBAChB,+BAAKA,UAAU,YACb,8BAAIA,UAAU,kBACZ,4CAAkB5iF,GAAI,mCAExB,mCAAmBusG,YAAaA,IAC7B,SAACmrO,GAAD,OACC,mCAAYn2F,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,6BACV4iK,QAAS,GACT1wE,QAAS,kBArCV,SAAC4iK,GACxB,UAAUv+S,eAAe,EAAAsI,gCAAgCoD,yBACzDkqH,GAA+BC,GAC3B56F,GACFsjR,EAAmBtjR,EAAkB91D,OAAQ81D,EAAmB,MAAM,GAiCjCkzU,CAAiB5vD,KAC1C,6CAKPj/U,EAAW,KACV,mCAAmB8zG,YAAaA,IAC7B,SAACmrO,EAAoB4iJ,GAArB,OACC,wCACG,SAACC,GAAD,OACC,+BAAK33Y,UAAU,aAAakyF,QAAS,kBAhCzB,SAACylT,EAAeD,GAC5C,UAAUnhc,eAAe,EAAAsI,gCAAgCqD,yBACzDy1b,EAAczrU,GACdwrU,EAA4BxrU,GA6B+B0rU,CAAsBD,EAAeD,KAC9E,+BAAK13Y,UAAU,YACZksE,EAAiB,mCAAkB15I,WAAY05I,EAAgBuxG,gBAAgB,IAAU,MAE5F,+BAAKz9K,UAAU,kBACb,4CAAkB5iF,GAAI,kDACrBitD,EACD,4CAAkBjtD,GAAI,2DAStC,+BAAK4iF,UAAU,qBACZy3Y,EAAuBv6d,KAAI,SAAAimG,GAAA,OAC1B,+BAAKnjB,UAAU,2BAA2BpzF,IAAKu2G,EAAgBF,SAC7D,8BAAIjjB,UAAU,kCACZ,4CAAkB5iF,GAAA,4BAA2D,UAA5B+lG,EAAgBF,QAAsB,QAAU,SAC/E13F,OAAQ,CAAC+uE,eAAgB6oB,EAAgBF,YAE5DE,EAAgBpsB,SAAS75E,KAAI,SAAAzE,GAC5B,OAAO,mCAAmBoX,KAAMA,EAAMtC,eAAgBA,EAAgB9U,QAASA,EAAS7L,IAAK6L,EAAQM,UAAUqE,sB,6FCtG/H,O,OACA,OACA,O,IACA,M,IAEA,O,IACA,Q,IAEA,Q,IACA,Q,IACA,QACA,Q,IACA,OACA,Q,IACA,QACA,Q,IACA,S,IACA,QACA,QACA,Q,OACA,QACA,Q,mDAEA,IAAMy6d,EAAoB,SAACn3X,GAAU,IAE5BjoG,EAAuFioG,EAAvFjoG,QAASoX,EAA8E6wF,EAA9E7wF,KAAM0gD,EAAwEmwC,EAAxEnwC,aAAcp9C,EAA0DutF,EAA1DvtF,iBAAkB5F,EAAwCmzF,EAAxCnzF,eAAgBglD,EAAwBmuC,EAAxBnuC,qBAFnC,GAGG,IAAAgkF,UAAS,GAHZ,qBAG5BuhV,EAH4B,KAGfC,EAHe,KAsD7B/nJ,GAAU,IAAAvzU,WAAUhE,GAE1B,OACE,kCAAmBulU,SAAnB,MACG,SAACr0N,GAAD,OACC,+BAAK3pB,UAAW,kDACd,mCAAmB2pB,YAAaA,IAC7B,SAACmrO,EAAoB4iJ,GAArB,OACC,wCACG,SAACC,GAAD,OACC,+BAAK33Y,UAAW,4BACXkyF,QAAS,SAACl8E,GAAD,OAhCL,SAACA,EAAO2T,EAAaguX,EAAeD,GAC3D,IAAI1hY,EAAMlqF,OAAOuqI,QAAQ,sBAAzB,CAIA,IAAMwmJ,EAAe,UAAUrlQ,mBAAmB/+B,GAClD,UAAU89B,eAAe,EAAAsI,gCAAgCsD,0BAA4B06P,GAEjF,UAAO5mS,aAAewC,GACxBrL,QAAQ4B,IAAI,UAAWyJ,GAErB83D,IACF/hE,SAASg9F,cAAc,OAAO/hF,MAAM+2R,WAAa,OACjD18M,YAAW,WACTt1F,SAASg9F,cAAc,OAAO/hF,MAAM+2R,WAAa,kBAChD,MAGLk3L,EAA4Bj/d,GAC5Bk/d,EAAcl/d,IAayBylU,CAAiBloO,EAAO2T,EAAaguX,EAAeD,KAC3E,mCAAkBlld,WAAY/Z,EAASglQ,gBAAgB,IACvD,+BAAKz9K,UAAU,cACb,+BAAKA,UAAU,YACb,8BAAIA,UAAU,mBACX,IAAA9uE,qBAAoBzY,EAAQ3C,YAAa+Z,EAAMtC,KAGlDyiU,EAIE,KAHF,+BAAKhwP,UAAU,eACb,4CAAkB5iF,GAAI,2BAG1B,+BAAK4iF,UAAW,YAAc83Y,EAAc,GAAK,sBAC/C,+BAAK93Y,UAAU,iCACb,mCAAW/nC,SAAS,UACpB,gCAAM+nC,UAAU,wBAAuB,4CAAkB5iF,GAAG,yCAS3E4yU,EACC,+BAAKhwP,UAAW,0BAA6B83Y,EAAc,gCAAkC,KAC3F,wCACG,SAACzwY,GAAD,OACC,wCACG,SAACwlT,GAAD,OACC,mCAAQ7sT,UAAW,yFACXkyF,QAAS,kBA5FR,SAAC7qF,EAAoBwlT,GAChD,IAAMhwG,EAAe,UAAUrlQ,mBAAmB/+B,GAOlD,GANA,UAAU89B,eAAe,EAAAsI,gCAAgCuD,mCAAqCy6P,GAEzEpkS,EAAQ3C,YAChB6yG,iBAAkB,GAEf,IAAAg1B,mBAAXpwB,QAMH,OAJAwqX,EAAe,GAEf1wY,EAAmB5uF,GAAS,QAC5Bo0Y,GAAqB,IAAA5/S,8BAA6Bx0F,EAAS,EAAG0a,KAIxC,IAAArJ,oBAAmBrR,GAEzC85D,EAAqB,EAAAzgC,cAAckB,cAEnC+kc,EAAe,GACf1wY,EAAmB5uF,GAAS,IAuEWu/d,CAAqB3wY,EAAoBwlT,KAC9D,4CAAkBzvY,GAAI,0CAOhC,UA2Bdy6d,EAAkBvgV,UAAY,CAC5B7+I,QAAS,UAAUu2C,MAAV,oBACTh9B,aAAc,UAAUjlB,OACxB+jC,SAAU,UAAU8G,QAGtB,IAAM8tJ,EAAqB,CACzBt0H,4CACAS,8CACAU,6C,WAGa,IAAA4qF,aACb,IAAAj8C,UAhCsB,SAACxzG,GAAU,MAC2CA,EAAM0zG,UAA3E7wC,EAD0B,EAC1BA,aAAcK,EADY,EACZA,aAAckB,EADF,EACEA,mBAAoBN,EADtB,EACsBA,kBADtB,EAEC9jE,EAAMouB,wBAAjCa,EAF0B,EAE1BA,aAAcH,EAFY,EAEZA,UACdrJ,EAAoBzlB,EAAMgsL,QAA1BvmK,iBACA/H,EAAgB1d,EAAMyc,YAAtBiB,aAEP,MAAO,CACL+H,mBACA5F,eAHqB7f,EAAMqN,gBAI3BqQ,eACAmlD,eACAK,eACAkB,qBACAN,oBACA70C,eACAH,eAiBuBkpK,EAAzB,CAA6CmyS,K,8ECxK/C,I,IAAA,MACA,OAEA,SACA,Q,IACA,S,IACA,SACA,Q,mDAEA,IAyCMnyS,EAAqB,CACzB35B,8CACAp7F,mC,WAIA,IAAAuwC,UAxBsB,SAACxzG,GAAU,MACiEA,EAAM0zG,UAAjGtvC,EAD0B,EAC1BA,mBAAoBlB,EADM,EACNA,aAAcR,EADR,EACQA,WAAYoB,EADpB,EACoBA,kBAAmBoD,EADvC,EACuCA,uBADvC,EAEDlnE,EAAMgR,YAA/BtF,EAF0B,EAE1BA,YAAavD,EAFa,EAEbA,SAGpB,MAAO,CACLu6D,aACAQ,eACAkB,qBACA8C,yBACApD,oBACAp4D,cACA4yJ,cATsBt+J,EAAMk4L,WAAvB55B,cAULn2J,WACA6d,gBAVwBhmB,EAAMyc,YAAzBuJ,mBAoBkBgyK,EAAzB,EA/CoB,SAAChlF,GAAU,IAExB5uC,EAAsG4uC,EAAtG5uC,mBAAoBk6F,EAAkFtrD,EAAlFsrD,cAAe57F,EAAmEswC,EAAnEtwC,WAAYv6D,EAAuD6qG,EAAvD7qG,SAAU27D,EAA6CkvC,EAA7ClvC,kBAAmBoD,EAA0B8rC,EAA1B9rC,uBAEnF,GAAI/+D,EACF,OACE,mCAASmqF,UAAW,kBAAoBluB,GAAsB1B,EAAa,0BAA4B,KACpG0B,EAAqB,wCAAsB,MAKlD,IAAMg9B,GAAmB,IAAAD,oBAAmBz+B,EAAY0B,EAAoBN,EAAmBoD,GAE/F,OACE,mCAASorB,UAAW,kBAAoBluB,GAAsB1B,EAAa,0BAA4B,KAClG0+B,EAAmB,wBAA0B,KAAOk9D,EAAgB,sCAAwC,KAC/G,wCACCl6F,EAAqB,wCAAsB,U,8EC3BlD,W,OACA,OACA,QAEA,Q,IACA,S,IACA,S,IACA,S,IACA,SACA,SACA,Q,mDAGA,IA4CM4zH,EAAqB,CACzB7zH,8CACAT,6C,WAGa,IAAAu0H,aACb,IAAAzkF,UAlBsB,SAACxzG,GAAU,IAC1B2kE,EAAkB3kE,EAAM0zG,UAAxB/uC,eAD0B,EAEA3kE,EAAM+nV,sBAAhCtnK,EAF0B,EAE1BA,WAAY6kK,EAFc,EAEdA,WAEnB,MAAO,CACL3gR,iBACA11C,aAHqBjvB,EAAMouB,wBAAtBa,aAILwxJ,aACA6kK,gBAUuBttJ,EAAzB,EAlDuB,SAAChlF,GAAU,IAE3BruC,EAA8GquC,EAA9GruC,eAAgB87G,EAA8FztE,EAA9FytE,WAAY6kK,EAAkFtyO,EAAlFsyO,WAAY5hR,EAAsEsvC,EAAtEtvC,qBAAsBS,EAAgD6uC,EAAhD7uC,sBAAuBg0H,EAAyBnlF,EAAzBmlF,QAASlpK,EAAgB+jF,EAAhB/jF,aAC/Fs7c,EAAgB5la,IAAmB,EAAA1nD,OAAO0uF,OAC1C6+X,GAAiB,IAAAh1S,mBAAkB8vJ,GAYzC,IAVA,IAAAj8N,YAAU,WACL1kD,IAAmB,EAAA1nD,OAAO0uF,QAAU80E,GAAc,GAAKA,EAAa+pT,EAAerue,SACpFgoE,EAAsBqma,EAAe/pT,GAAYv9J,KAAKlV,QACtD01D,EAAqB8ma,EAAe/pT,GAAYv9J,KAAK2K,kBAKtD,CAACs2C,EAAuBT,EAAsB8ma,EAAgB/pT,EAAY97G,EAAgBwzH,EAASlpK,EAAcq2T,KAE/GklJ,EACH,OAAO,KAGT,IAAMC,EAAaD,EAAerue,OAAS,EAE3C,OACE,mCAASm2F,UAAW,iBAAmBi4Y,EAAgB,yBAA2B,MAC/D,IAAhB9pT,EAAoB,+BAAKnuF,UAAU,mDAAkD,yCAAiC,KACtHmuF,GAAc,GAAKA,EAAa+pT,EAAerue,OAAS,mCAAyBgoB,SAAUqmd,IAAoB,KAC/G/pT,GAAc+pT,EAAerue,OAAS,mCAAwBgoB,SAAUqmd,EAAgBC,WAAYA,IAAgB,MACpG,IAAhBhqT,EAAoB,mCAAuBt8J,SAAUqmd,EAAgBC,WAAYA,IAAgB,W,8ECxCxG,I,IAAA,MACA,OACA,O,IAEA,OAEA,Q,mDAGA,IAiDMzyS,EAAqB,CACzButJ,mBApDF,QAoDEA,oB,WAGa,IAAA/xO,UAXS,SAACxzG,GAEvB,MAAO,CACL2kE,eAFuB3kE,EAAM0zG,UAAxB/uC,kBAU+BqzH,EAAzB,EArDe,SAAChlF,GAAU,IAEhCuyO,EAAsBvyO,EAAtBuyO,mBAEP,KADsB,IAAA3oP,eAEpB,OAAO,KAWT,OACE,+BAAKtK,UAAU,wBACb,8BAAIA,UAAU,wBACZ,4CAAkB5iF,GAAG,+BAEvB,6BAAG4iF,UAAU,8BACX,4CAAkB5iF,GAAG,qCAEvB,+BAAK4iF,UAAU,uBACb,+BAAKA,UAAU,8BACb,mCAAQA,UAAW,yDACXkyF,QAAS,WAlBvB+gK,EAAmB,KAmBX,4CAAkB71U,GAAI,uCAG1B,+BAAK4iF,UAAU,8BACb,mCAAQA,UAAW,gEACXkyF,QArBkB,cAsBxB,4CAAkB90K,GAAI,gD,8EC3ClC,I,IAAA,MACA,OACA,QACA,OACA,S,IACA,Q,8DA2Ce,IAAA+/I,aACb,IAAAj8C,UAfsB,SAACxzG,GAAU,MACWA,EAAM0zG,UAA3C/uC,EAD0B,EAC1BA,eAEP,MAAO,CACLb,kBAJ+B,EACVA,kBAIrBa,iBACA87G,WAJmBzgL,EAAM+nV,sBAApBtnK,WAKL5gK,eAAgB7f,EAAMqN,mBAIC,GAIzB,EA1C8B,SAAC2lG,GAAU,IAElC7uF,EAAiE6uF,EAAjE7uF,SAAUs8J,EAAuDztE,EAAvDytE,WAAYt+J,EAA2C6wF,EAA3C7wF,KAAMtC,EAAqCmzF,EAArCnzF,eAAgBikD,EAAqBkvC,EAArBlvC,kBACnD,IAAK3/C,EACH,OAAO,KAGT,IAAMw4C,GAAmB,IAAAn5C,qBAAoBW,EAASs8J,GAAYv9J,KAAMf,EAAMtC,GACxE6qd,GAA0B,IAAAj1S,4BAA2BtxK,EAASs8J,GAAYv9J,KAAMf,EAAMtC,GAE5F,OACE,+BAAKyyE,UAAU,qBACb,+BAAKA,UAAU,wBACZ31B,GAEH,+BAAK21B,UAAU,6DACZo4Y,GAEF5ma,EACC,+BAAKwuB,UAAU,8BACb,yCAEA,W,8EC7BV,I,IAAA,MACA,O,IAEA,O,IACA,SACA,O,mDAGA,IA+DM0lG,EAAqB,CACzButJ,mBAlEF,QAkEEA,oB,WAGa,IAAA/xO,UAbS,SAACxzG,GAGvB,MAAO,CACL2kE,eAHuB3kE,EAAM0zG,UAAxB/uC,eAIL87G,WAHmBzgL,EAAM+nV,sBAApBtnK,cAW+BuX,EAAzB,EAnEe,SAAChlF,GAAU,IAEhC7uF,EAAwD6uF,EAAxD7uF,SAAUsmd,EAA8Cz3X,EAA9Cy3X,WAAYhqT,EAAkCztE,EAAlCytE,WAAY8kK,EAAsBvyO,EAAtBuyO,mBAKzC,GAHA7lV,QAAQ4B,IAAI,aAAcmpe,GAC1B/qe,QAAQ4B,IAAI,aAAcm/K,IAEtBt8J,EACF,OAAO,KAkBT,OACE,+BAAKmuE,UAAU,8BACb,+BAAKA,UAAU,iBACb,+BAAKA,UAAU,0BACb,mCAAQA,UAAU,sFACVkyF,QAhBG,WACjB+gK,EAAmB9kK,EAAa,IAeGj2F,SAAyB,IAAfi2F,EAAkB88N,WAAW,GAClE,4CAAkB7tY,GAAG,kCAEvB,mCAAQ4iF,UAAU,sFACVkyF,QAxBG,WACjB+gK,EAAmB9kK,EAAa,IAuBGj2F,SAAUi2F,IAAegqT,EAAa,EAAGltF,WAAW,GAC/E,4CAAkB7tY,GAAG,+BAGzB,+BAAK4iF,UAAU,uBACb,mCAAYi/E,MAAOk5T,EACPjnc,KAAMi9I,EAAa,EACnBz1K,KAAK,IACL2/d,cAAe,IACfx3X,MAAM,UACNy3X,gBAAA,EACAC,gBAAA,EACArtQ,SA5BU,SAACl1H,EAAO9kE,GAEpC9jC,QAAQ4B,IAAI,OAAQkiC,GAEpB+hT,EAAmB/hT,EAAO,a,uFC/B9B,I,IAAA,MACA,OACA,O,IACA,Q,8DAkCe,IAAAisH,aACb,IAAAj8C,UAbsB,SAACxzG,GAGvB,MAAO,CACL8jE,kBAH0B9jE,EAAM0zG,UAA3B5vC,kBAIL28G,WAHmBzgL,EAAM+nV,sBAApBtnK,cAOkB,GAIzB,EAjC6B,SAACztE,GAAU,IAEjC7uF,EAA+B6uF,EAA/B7uF,SAAU2/C,EAAqBkvC,EAArBlvC,kBACjB,OAAK3/C,EAKH,+BAAKmuE,UAAU,8BACb,+BAAKA,UAAU,wBACb,4CAAkB5iF,GAAG,8BAA8BmO,OAAQ,CAACynU,WAAY,aAE1E,+BAAKhzP,UAAU,6DAAf,iCAGCxuB,EAAoB,wCAAsB,MAXtC,U,8ECTX,I,IAAA,MACA,O,IAEA,S,8DAqBe,IAAA0vC,UAPS,SAACxzG,GAEvB,MAAO,CACL0iE,WAFmB1iE,EAAM0zG,UAApBhxC,cAMM,EAnBU,SAACswC,GAGxB,OAFqBA,EAAdtwC,WAIH,mCAAS4vB,UAAU,uBACjB,yCAEA,S,6FCbR,O,OACA,OACA,O,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,Q,IACA,SACA,QACA,Q,OACA,Q,8DA8Ge,IAAAm9D,aACb,IAAAj8C,UAfsB,SAACxzG,GAAU,MAC4BA,EAAM0zG,UAEnE,MAAO,CACL5vC,kBAJ+B,EAC1BA,kBAILS,eAL+B,EACPA,eAKxBC,gBAN+B,EACSA,gBAMxCq7C,QALgB7/G,EAAMqN,gBAAjBwyG,WASkB,GAIzB,EA5G6B,SAAC7M,GAAU,IAEjClvC,EAAoCkvC,EAApClvC,kBAAmB3hD,EAAiB6wF,EAAjB7wF,KAAM09F,EAAW7M,EAAX6M,QAC1BhkB,GAA0B,IAAAD,4BAA2B93B,GAHnB,GAKF,IAAA+kF,UAAShtD,EAAwB1/F,OAAS0/F,EAAwB,GAAK,eALrE,qBAKjCivY,EALiC,KAKpBC,EALoB,MAOxC,IAAA1hX,YAAU,WACR,IAAMxtB,GAA0B,IAAAD,4BAA2B93B,GAC3Dina,EAAelvY,EAAwB1/F,OAAS0/F,EAAwB,GAAK,iBAE5E,CAAC/3B,IAEJ,IA8BIkna,EAAW,GACXlna,EAAkBz4D,UAAUm0c,iBAAmB3/V,IACjDmrX,EAAWpge,mBAAmBk5D,EAAkBz4D,UAAUm0c,kBAY5D,OACE,+BAAKltX,UAAU,WACb,8BAAIA,UAAU,iBACXuJ,EAAwBrsF,KAAI,SAAAy7d,GAC3B,OACE,8BAAI34Y,UAAU,qBAAqBpzF,IAAK+re,GACtC,mCAAWj8F,SAAU87F,IAAgBG,EAASztQ,UArCpC0tQ,EAqC2DD,EArCjD,SAAC3iY,EAAOs1S,GACtC,qBACE,UAAU/0W,eACR+0W,EACI,EAAAzsW,gCAAgCuB,uCAAyCw4b,EACzE,EAAA/5b,gCAAgCwB,wCAA0Cu4b,GAGhF,UAAUric,eACR+0W,EACI,EAAAvzW,6BAA6BsC,oCAAsCu+b,EACnE,EAAA7gc,6BAA6BuC,qCAAuCs+b,GAG5EH,IAAentF,GAAastF,MAwBhB,mCACEptF,WAAY,wCACZ7sJ,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnCquY,gBAAc,mBACdruY,GAAG,kBACH4iF,UAAU,mBAEV,gCAAMA,UAAU,yBAAwB,4CAAkB5iF,GAAI,qBAAuBu7d,MAEvF,uCACE,+BAAK34Y,UAAU,oBA7DZ,SAAC64Y,GAClB,OAAQA,GACN,IAAK,cACH,OAAO,mCAAoBpge,QAAS+4D,IACtC,IAAK,WACH,OAAO,mCAAuB/4D,QAAS+4D,IACzC,QAGE,OAAO,MAqDMg8Y,CAAWmrB,OAjDT,IAACC,MAyDjBF,EACC,+BAAK14Y,UAAU,mBACb,gCAAMA,UAAU,wBAAuB,4CAAkB5iF,GAAG,mCAC5D,gCAAM4iF,UAAU,uBAAuBkyF,QAtC5B,WACjB,UAAU37I,eAAe,EAAAvlC,mBACrB,EAAA6tC,gCAAgCiC,qCAAuC43b,EACvE,EAAA3gc,6BAA6BqC,kCAAoCs+b,GAErE,UAAUnic,iBACVhpC,OAAO6+F,KAAKssY,EAAU,YAgC4C,4CAAkBt7d,GAAG,oCAEjF,W,8ECvGV,W,OACA,O,IACA,MACA,O,IAEA,O,IACA,O,IAEA,SACA,QACA,Q,IACA,OACA,QAIA,Q,0DAEA,IAAM07d,EAAoB,SAACp4X,GAAU,IAE5BlvC,EAA8EkvC,EAA9ElvC,kBAAmB37D,EAA2D6qG,EAA3D7qG,SAAUkje,EAAiDr4X,EAAjDq4X,aAAcp7c,EAAmC+iF,EAAnC/iF,aAAcvkB,EAAqBsnG,EAArBtnG,YAAayW,EAAQ6wF,EAAR7wF,KAEzE+4W,SAQJ,IANA,IAAA7xQ,YAAU,WACR,OAAO,WACLggC,aAAa6xO,QAIZp3T,IAAsBx0D,MAAMC,QAAQu0D,EAAkBz4D,UAAU0mZ,eACnE,OAAO,KAET,IAAMu5E,EAAYxna,EAAkBz4D,UAAU0mZ,cAAcviZ,KAAI,SAAA/I,GAE9D,OADAA,EAAMA,EAAIJ,QAAQ,oCAAqC,mCAGrDkle,EAAMD,EAAU93d,MAAK,SAAAsL,GAAA,OAAOA,EAAIjd,SAAS,WACzC2pe,EAAOF,EAAU93d,MAAK,SAAAsL,GAAA,OAAOA,EAAIjd,SAAS,YAC1C4pe,EAAMH,EAAU93d,MAAK,SAAAsL,GAAA,OAAOA,EAAIjd,SAAS,WAoBvC6pe,EACJ,mCAAYz6O,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,gCACnCi8d,KAAK,YACLnnT,QArBS,WACrB,UAAU37I,eAAe,EAAAvlC,mBACrB,EAAA6tC,gCAAgC+B,8BAChC,EAAA7I,6BAA6BmC,4BAQjCvc,GAAa,EAAM,GAAI,IAAI,GAC3Bo5H,aAAa6xO,GACbA,EAAY9kS,YAAW,WACrBnmE,GAAa,KACZ,MAOSqiE,UAAW,gFACR,EAAAhvF,qBAAuB+ne,EAAe,sBAAwB,KAG3E,uCACE,kDAAwBl4X,MAAO,UAAaznG,GAAa6wH,WAE1D,EAAAj5H,mBACC,gCAAMgvF,UAAU,2BACd,4CAAkB5iF,GAAG,kCAErB,MAIR,OACE,mCAAyB67d,IAAKA,EAAKE,IAAKA,EAAKD,KAAMA,EAAMrje,SAAUA,EAAUkje,aAAcA,EAClEK,SAAUA,KAIvCN,EAAkBxhV,UAAY,CAC5ByhV,aAAc,UAAUvhV,MAG1B,IAUMkuC,EAAqB,CACzB/nK,6B,WAGa,IAAAw/H,aACb,IAAAj8C,UAfsB,SAACxzG,GAAU,IAC1B8jE,EAAqB9jE,EAAM0zG,UAA3B5vC,kBAD0B,EAED9jE,EAAMgR,YACtC,MAAO,CACL8yD,oBACA37D,SAL+B,EAE1BA,SAILuD,YAN+B,EAEhBA,eAaQssL,EAAzB,CAA6CozS,K,8ECvG/C,I,IAAA,M,IACA,M,mDAEA,IAAMQ,EAA0B,SAAC54X,GAAU,IAElCu4X,EAAoDv4X,EAApDu4X,IAAKC,EAA+Cx4X,EAA/Cw4X,KAAMC,EAAyCz4X,EAAzCy4X,IAAKtje,EAAoC6qG,EAApC7qG,SAAUkje,EAA0Br4X,EAA1Bq4X,aAAcK,EAAY14X,EAAZ04X,SAM/C,OAAIL,EAEA,wCAAc3lb,GAAG,GACHmmb,OAAO,SACPC,WAAS,gCACTnzC,kBAAgB,GAChBlyb,IAAK8ke,EACLQ,UAASP,EACTQ,oBAAmBP,EACnBQ,MAAM,YACNrwR,IAAI,IACf8vR,GAML,wCAAch8d,GAAG,eACHjJ,IAAK8ke,EACLQ,UAASP,EACTQ,oBAAmBP,EACnB/lb,GAAG,GACHwmb,SAAS,IACTvzC,kBAAgB,GAChB58a,MAAO,CAAC1U,MAAO,OAAQE,OAAQY,EAAW,OAAX,qBAC/Bgke,YAAU,gCACVvwR,IAAI,GACJwwR,sBAAoB,iBAC/BV,IAKPE,EAAwBhiV,UAAY,CAClC2hV,IAAK,UAAUrhc,OACfshc,KAAM,UAAUthc,OAChBuhc,IAAK,UAAUvhc,OACf/hC,SAAU,UAAU2hJ,KACpB4hV,SAAU,UAAU7pZ,S,UAGP+pZ,G,8ECpDf,I,IAAA,MACA,OACA,O,IAEA,O,IACA,OAEA,QACA,QACA,QACA,QACA,Q,OACA,Q,0DAEA,IAiEM5zS,EAAqB,CACzB1zH,+C,WAGa,IAAAmrF,aACb,IAAAj8C,UAjBsB,SAACxzG,GAAU,MACgDA,EAAM0zG,UAAhFnvC,EAD0B,EAC1BA,eAAgBC,EADU,EACVA,gBAAiBJ,EADP,EACOA,mBAAoBN,EAD3B,EAC2BA,kBAE5D,MAAO,CACLM,qBACAI,kBACAD,iBACA74D,YALoB1L,EAAMgR,YAArBtF,YAMLo4D,uBASuBk0H,EAAzB,EAtE6B,SAAChlF,GAAU,IAEjClvC,EAA8GkvC,EAA9GlvC,kBAAmBQ,EAA2F0uC,EAA3F1uC,sBAAuBC,EAAoEyuC,EAApEzuC,eAAgBC,EAAoDwuC,EAApDxuC,gBAAiB94D,EAAmCsnG,EAAnCtnG,YAAa04D,EAAsB4uC,EAAtB5uC,mBAE/F,IAAKN,EACH,OAAO,KAGT,IAAMuoa,EAAkB,SAACxsQ,GACvB,UAAUh3L,eAAe,EAAAvlC,mBACrB,EAAA6tC,gCAAgCgC,gCAAkC0sL,EAClE,EAAAx1L,6BAA6BoC,6BAA+BozL,GAGhEv7J,EADqBC,GAAmBC,IAAoBq7J,EAAe,GAAKz7J,EAAqB,SAAW,OAC5Ey7J,IAGhCysQ,EAAc/na,GAAmBC,IAAoB,EAAAzgC,qBAAqBE,OAC1Esoc,EAAaD,EAAc,EAAAl5X,OAAOC,MAAQ,UAAa3nG,GAAa6wH,QAEpEiwW,EAAYjoa,GAAmBC,IAAoB,EAAAzgC,qBAAqBG,IACxEuoc,EAAWH,EAAc,EAAAl5X,OAAOC,MAAQ,UAAa3nG,GAAa6wH,QAExE,OACE,+BAAKjqC,UAAU,oBACb,mCAAQA,UAAW,kCAAoCg6Y,EAAc,wBAA0B,2BACvF9hZ,UAAWl7E,MAAMC,QAAQu0D,EAAkBz4D,UAAU0mZ,eACrD3iH,UACE,uCACE,sCAAYj8L,MAAOo5X,KAGvB/nT,QAAS,kBAAM6nT,EAAgB,EAAAtoc,qBAAqBE,UACzD,EAAA3gC,mBACG,4CAAkBoM,GAAG,gCACrB,4CAAkBA,GAAG,gCAE3B,mCAAQ4iF,UAAW,kCAAoCk6Y,EAAY,wBAA0B,2BACrFhiZ,UAAW1mB,EAAkBz4D,UAAUymZ,YACvC1iH,UACE,uCACE,kDAAwBj8L,MAAOs5X,KAGnCjoT,QAAS,kBAAM6nT,EAAgB,EAAAtoc,qBAAqBG,OACzD,EAAA5gC,mBACG,4CAAkBoM,GAAG,iCACrB,4CAAkBA,GAAG,uC,6FC7DjC,O,OACA,O,IAEA,O,8DAoCe,IAAA8jG,UAdS,SAACxzG,GAGvB,MAAO,CACL8jE,kBAH0B9jE,EAAM0zG,UAA3B5vC,qBASkB,GAIZ,EAlCY,SAACkvC,GAAU,OAEF,IAAA61C,WAAS,GAFP,qBAE7B0yD,EAF6B,KAElBtrL,EAFkB,KAI7B6zC,EAAqBkvC,EAArBlvC,kBAEP,OACE,+BAAKwuB,UAAU,eACb,gCAAMA,UAAU,iDAChB,gCAAMA,UAAU,oDACfipH,EAAY,wCAAqB,KAClC,+BAAK90M,IAAKq9D,EAAkBz4D,UAAUymZ,YACjCl2M,IAAI,UACJtpH,UAAU,oBACVoyP,YAAa,kBAAMz0T,GAAa,IAChC4rL,OAAQ,kBAAM5rL,GAAa,W,8ECpBtC,I,IAAA,MACA,OACA,O,IAEA,S,IACA,S,8DAyBe,IAAAw/H,aACb,IAAAj8C,UAbsB,SAACxzG,GAGvB,MAAO,CACL0iE,WAHmB1iE,EAAM0zG,UAApBhxC,WAILpqD,iBAHyBtY,EAAMqY,YAA1BC,oBAOkB,GAIzB,EAxBwB,SAAC06F,GAAU,IAE5BtwC,EAAgCswC,EAAhCtwC,WAAYpqD,EAAoB06F,EAApB16F,iBAEnB,OACE,+BAAKg6E,UAAW,aAAe5vB,GAAcpqD,EAAmB,qBAAuB,KACpFA,EAAmB,wCAA8B,8C,8ECbxD,W,OACA,OACA,OACA,Q,IAEA,O,IACA,S,IACA,OACA,QACA,Q,IAMA,SACA,QACA,Q,WACA,S,IACA,S,IACA,SACA,Q,mDAEA,IAqGM0/K,EAAqB,CACzBtzH,sCACAhB,4CACAjB,+B,WAGa,IAAAw1H,aACb,IAAAxoC,aACE,IAAAj8C,UApBoB,SAACxzG,GAAU,MAC+BA,EAAM0zG,UAA/D/uC,EAD0B,EAC1BA,eAAgBb,EADU,EACVA,kBAAmBM,EADT,EACSA,mBADT,EAEepkE,EAAMk4L,WACtD,MAAO,CACLvzH,iBACAb,oBACA0oU,kBAN+B,EAE1BA,kBAKLxtO,mBAP+B,EAEPA,mBAMxB56F,wBAYyB4zH,EAAzB,EA7G6B,SAAChlF,GAAU,IAEnC7wF,EACuE6wF,EADvE7wF,KAAMwiD,EACiEquC,EADjEruC,eAAgBD,EACiDsuC,EADjDtuC,kBAAmByzH,EAC8BnlF,EAD9BmlF,QAASr0H,EACqBkvC,EADrBlvC,kBAAmBJ,EACEsvC,EADFtvC,qBAC1Es7F,EAA4EhsD,EAA5EgsD,mBAAoBwtO,EAAwDx5R,EAAxDw5R,kBAAmB/pU,EAAqCuwC,EAArCvwC,cAAe2B,EAAsB4uC,EAAtB5uC,mBAElDsoa,EAAoB/na,IAAmB,EAAA1nD,OAAOkpB,MAC9Cwmc,EAAsBhoa,IAAmB,EAAA1nD,OAAOkqB,KAgDtD,OACE,wCACGi9B,EACC,wCACE,wCACA,wCACA,yCAEA,KACHN,EAAoB,wCACnB,yCACG,IAAAkzE,wBACC,mCAAQ1kD,UAAW,qFACdq6Y,EAAsB,6BAA+B,IAClDx3O,QAAQ,WAAW3wE,QApCN,WAC7B,UAAU37I,eAAe,EAAAsI,gCAAgC6D,oBACrD23b,GACFjoa,EAAkB,EAAAznD,OAAO4uF,UACzBssF,EAAQ17L,MAAK,IAAAw/F,mBAEbv3B,EAAkB,EAAAznD,OAAOkqB,MACzBgxJ,EAAQ17L,KAAK,EAAAwgB,OAAOkqB,SA8BZ,4CAAkBz3B,GAAIi9d,EAAsB,wBAA0B,yBAEtE,KACJ,mCAAQr6Y,UAAW,qFAChBo6Y,EAAoB,6BAA+B,IAC9Cv3O,QAAQ,WAAW3wE,QA/BN,WAC3B,UAAU37I,eAAe,EAAAsI,gCAAgC8D,kBACrDy3b,GACFhoa,EAAkB,EAAAznD,OAAO4uF,UACzBssF,EAAQ17L,MAAK,IAAAw/F,mBAEbv3B,EAAkB,EAAAznD,OAAOkpB,OACzBgyJ,EAAQ17L,KAAK,EAAAwgB,OAAOkpB,UAyBd,4CAAkBz2B,GAAIg9d,EAAoB,wBAA0B,wBAI1E,mCAAYz7O,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAW,uFACN3tB,IAAmB,EAAA1nD,OAAO4uF,SAAW,qBAAuB,IACjE24E,QA1EQ,WACtB,UAAU37I,eAAe,EAAAsI,gCAAgCiE,yBACrD0uB,GAAqB4oa,GACvBhoa,EAAkB,EAAAznD,OAAO4uF,UACzBnoC,EAAqB,MACrBy0H,EAAQ17L,MAAK,IAAAw/F,kBAET+iE,GAAsBwtO,GACxB9nU,EAAkB,KAClB,IAAAP,uBAAsB66F,GACtBm5B,EAAQ17L,MAAK,IAAA2/F,eAAcowS,GAAmB,KACrCA,GACT9nU,EAAkB,IAClBhB,EAAqB8oU,GACrBr0M,EAAQ17L,MAAK,IAAA2/F,eAAcowS,MAE3B9nU,EAAkB,IAClBjC,EAAc,MACdiB,EAAqB,MACrBy0H,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,SAwDpB,gD,yGC1GR,O,OACA,OACA,OACA,Q,IAEA,O,IACA,QAEA,Q,IAKA,Q,IACA,SACA,QAMA,QACA,QACA,Q,IACA,QACA,QACA,Q,mDAEA,IAoKMssF,EAAqB,CACzB1sD,0CACAQ,kDACAX,0CACAzmE,sCACA/0C,gCACA8yC,8BACAiB,6C,WAGa,IAAAu0H,aACb,IAAAxoC,aACE,IAAAj8C,UAjCoB,SAACxzG,GAAU,MACuDA,EAAMqY,YAAvFC,EAD0B,EAC1BA,iBAAkBwZ,EADQ,EACRA,iBAAkBtZ,EADV,EACUA,qBAAsB+wG,EADhC,EACgCA,oBAOjE,MAAO,CACLjxG,mBACAwZ,mBACAtZ,uBACArQ,SAViBnI,EAAMgR,YAAlB7I,SAWL8B,UAVkBjK,EAAM8J,UAAnBG,UAWLwb,iBAVyBzlB,EAAMgsL,QAA1BvmK,iBAWLkhG,eAVuB3mH,EAAMilV,UAAxBt+N,eAWL9mG,eAVqB7f,EAAMqN,gBAW3Bk8G,yBAgByByuE,EAAzB,EAhLgC,SAAChlF,GAAU,IAEtCs4B,EAE8Ct4B,EAF9Cs4B,oBAAqB9yH,EAEyBw6F,EAFzBx6F,qBAAsBszH,EAEG94B,EAFH84B,wBAAyBrmH,EAEtButF,EAFsBvtF,iBAAkB8jG,EAExCvW,EAFwCuW,oBAC3F4hB,EACmDn4B,EADnDm4B,oBAAqBzmE,EAC8BsuC,EAD9BtuC,kBAAmByzH,EACWnlF,EADXmlF,QAASxoK,EACEqjF,EADFrjF,eAAgBg3F,EACd3T,EADc2T,eAAgBlkD,EAC9BuwC,EAD8BvwC,cAAet6D,EAC7C6qG,EAD6C7qG,SAChG0X,EAAmDmzF,EAAnDnzF,eAAgB6jD,EAAmCsvC,EAAnCtvC,qBAAsBz5D,EAAa+oG,EAAb/oG,UAClCuP,EAAqBqG,EAAezQ,SALG,GAOO,IAAAy5I,WAAS,GAPhB,qBAOtCkgV,EAPsC,KAOlBC,EAPkB,KASvC4D,EAAmB,SAAC3wX,GAMxB,GAJAv4C,EAAqB,MACrBooE,EAAwB,IAAI,GAC5BR,EAAoB,GACpBH,EAAoB,MAChBxkB,EAMF,OALAlkD,GAAc,QACVjpD,EAAmBsf,WACrB4rC,EAAkB,EAAAznD,OAAOC,MACzBi7K,EAAQ17L,KAAK,EAAAwgB,OAAOC,QAIxBwnD,EAAkBlrD,EAAmBsf,SAAW,EAAA7b,OAAOC,KAAO,EAAAD,OAAO4uF,WACrE,IAAAmQ,eAAcC,EAAatsF,GAC3BwoK,EAAQ17L,KAAK+c,EAAmBsf,SAAW,EAAA7b,OAAOC,MAAO,IAAA++E,kBAGrD4wY,EAAiBzwe,OAAOmc,KAAKC,GAChC9J,QAAO,SAAAxP,GAAA,OAAOsZ,EAAqBtZ,GAAKyZ,kBAAmB,IAAA5J,WAAUyJ,EAAqBtZ,GAAKyZ,oBAC/FnJ,KAAI,SAAAtQ,GAAA,OAAOsZ,EAAqBtZ,MAE7B4te,EAAaD,EACdn+d,QAAO,SAAA0mU,GAAA,OAAwBplU,OAAOC,UAAUmlU,EAAoBvkU,WAAaukU,EAAoBvkU,SAAW,KAChHrB,KAAI,SAAA4lU,GAAA,OAAuBA,EAAoBz8T,mBAE9Cywd,EAA0B,SAACH,EAAiB9pF,GAEhD,GADA8pF,EAAgB6D,EAAYD,EAAgBtjX,IACxC,IAAA78G,aAAcmT,EAAeggG,QAAS,CACxC,IAAIqpX,EAAiB,GACrB4D,EAAWhne,SAAQ,SAAAqje,GACjB,IAAMloe,EAASkoe,EAAgB/ge,YACzByI,EAAW5P,EAAOkiC,eACpB/mC,OAAOmc,KAAKtX,EAAOkiC,gBAAgBz0B,QAAO,SAAA00B,GAAA,OAAYniC,EAAOkiC,eAAeC,MAAWjnC,OACvF,EACJ,OAAO+se,EAAiBA,GAAjBA,qBAAqBA,IAArB,cAAwC,IAAA3pY,8BAA6B4pY,EAAiBt4d,EAAU4U,QAEzG05X,EAAqB+pF,GAcvBF,GAAsB,IAGlB+D,EAAoB,WACxB,OAAIhE,EACK,4CAAkBr5d,GAAIo9d,EAAW3we,OAAS,EAAI,+BAAiC,8BAEpF2we,EAAW3we,OAAS,EAEpB,wCACE,4CAAkBuT,GAAI,qCADxB,KACgEo9d,EAAW3we,OAD3E,KAKG,4CAAkBuT,GAAI,mCAGzB+gP,GAAqB,IAAA3vJ,iBAAgB72F,GACrC+ie,EAAmBxzd,EAAmBsf,WAAa23N,EAAmBt0P,OACtE45d,GAAqBgT,IAAuB+D,EAAW3we,OAE7D,OACE,kCAAmBm0U,SAAnB,MACG,SAACr0N,GAAD,OACC,wCACG9zG,EACC,mCAAQmqF,UAAW,qFACd06Y,EAAmB,yBAA2B,IAC3CxiZ,SAAUwiZ,EACVxoT,QAAS,kBAAMwoT,EAAmB,KAAOJ,EAAiB3wX,KAChE,4CAAkBvsG,GAAI8J,EAAmBsf,SAAW,mBAAqB,qCAEzE,KACHtf,EAAmBsf,SAClB,wCACG,SAACmwc,GAAD,OACC,wCACG,SAAC9pF,GAAD,OAA0Bh3Y,EACzB,mCAAQmqF,UAAW,+GACdyjY,EAAoB,yBAA2B,IAC5CvrY,SAAUurY,EACVvxS,QAAS,kBAAMuxS,EAAoB,KAAOqT,EAAwBH,EAAiB9pF,KACxF4tF,KAGH,+BAAKz6Y,UAAU,sDACZy2Y,EACC,8BAAIz2Y,UAAU,2DACZ,mCAAW/nC,SAAS,UACpB,gCAAM+nC,UAAU,wBACfy6Y,MAIH,mCAAQz6Y,UAAW,6DACX9H,SAAUurY,EACVvxS,QAAS,kBAAMuxS,EAAoB,KAAOqT,EAAwBH,EAAiB9pF,KACxF4tF,YAQb,KACH5ke,EAAW,KACV,+BAAKmqF,UAAU,sDACb,mCAAQA,UAAW,gEAAkE06Y,EAAmB,yBAA2B,IAC3HxiZ,SAAUwiZ,EACVxoT,QAAS,kBAAMwoT,EAAmB,KAAOJ,EAAiB3wX,KAChE,4CAAkBvsG,GAAI8J,EAAmBsf,SAAW,mBAAqB,gD,6FChKzF,O,OACA,OACA,Q,IAEA,O,IACA,S,IACA,O,IAEA,SACA,OACA,Q,IACA,OACA,QACA,Q,OACA,Q,OACA,Q,IACA,SACA,Q,mDAGA,IA0EMk/J,EAAqB,CACzBtzH,uC,WAGa,IAAAuzH,aACb,IAAAzkF,UAhBsB,SAACxzG,GAAU,IAC1B2kE,EAAkB3kE,EAAM0zG,UAAxB/uC,eAD0B,EAEkB3kE,EAAMgR,YAAlD7I,EAF0B,EAE1BA,SAAU+qG,EAFgB,EAEhBA,kBACjB,MAAO,CACLvuC,iBACAx8D,WACAuD,YAN+B,EAEGA,YAKlC09G,wBAAyBlW,EAAkB/2G,UASpB67L,EAAzB,EA/EuB,SAAChlF,GAAU,IAE3BruC,EAA8FquC,EAA9FruC,eAAgBx8D,EAA8E6qG,EAA9E7qG,SAAUihH,EAAoEpW,EAApEoW,wBAAyB19G,EAA2CsnG,EAA3CtnG,YAAag5D,EAA8BsuC,EAA9BtuC,kBAAmByzH,EAAWnlF,EAAXmlF,QACpFoyS,EAAgB5la,IAAmB,EAAA1nD,OAAOkqB,MAAQw9B,IAAmB,EAAA1nD,OAAOkpB,MAHhD,GAII,IAAA0iH,WAAS,GAJb,qBAI3BokV,EAJ2B,KAIdC,EAJc,MAMlC,IAAA7jX,YAAU,WACRjzB,YAAW,WACT82Y,GAAe,KACd,OACF,IAWH,OACE,mCAAS56Y,UAAW,iBAAmBi4Y,EAAgB,yBAA2B,KAC/Epie,EAAW,KACV,8BAAImqF,UAAU,wBACZ,4CAAkB5iF,GAAG,8BAGxBvH,EAAW,KACV,6BAAGmqF,UAAU,8BACX,4CAAkB5iF,GAAG,iCAGxBvH,KAAa,IAAA6uI,wBAAyB,KACrC,+BAAK1kD,UAAU,0BACZ,CAAC,EAAAr1E,OAAOkqB,KAAM,EAAAlqB,OAAOkpB,OAAO32B,KAAI,SAAA8tF,GAC/B,IAAMujE,EAAWl8F,IAAmB24B,EAC9B2nI,EAAa3nI,IAAc,EAAArgF,OAAOkqB,KACtC,uCACE,0CAAgBgsE,MAAO0tD,EAAW,EAAAztD,OAAOC,MAAQ,UAAa3nG,GAAa6wH,WAE3E,wCACEw3G,EAAYz2I,IAAc,EAAArgF,OAAOkqB,KAAO,sBAAwB,oBACtE,OACE,mCAAQmrD,UAAW,mCAAqCuuE,EAAW,uBAAyB,0BACpF3hK,IAAKo+F,EACL8xM,UAAWnqE,EACXzgD,QAAS,kBAlCvBo+M,GAD0BuqG,EAmC0B7vY,KAlCpB,EAAArgF,OAAOkqB,KACvC,EAAAgK,gCAAgCqE,iBAChC,EAAArE,gCAAgCsE,eACpC,UAAU5M,eAAe+5V,GACzBl+T,EAAkByoa,QAClBh1S,EAAQ17L,KAAK0we,GANgB,IAACA,EAC1BvqG,IAmCQ,4CAAkBlzX,GAAIqkO,SAM9B3qH,EAEEmhX,GAAiB0C,EACftoa,IAAmB,EAAA1nD,OAAOkqB,KAAO,wCAA6B,wCAC9D,KAHF,8C,8FC3EV,O,OACA,O,IAEA,OACA,Q,IACA,SACA,U,8DA8Ce,IAAAqsE,UARS,SAACxzG,GAAU,MACkBA,EAAMgR,YAAlDkiG,EAD0B,EAC1BA,kBACP,MAAO,CACLo2E,sBAH+B,EACPA,sBAGxBlgE,wBAAyBlW,EAAkB/2G,UAIhC,EA5CiB,SAAC62G,GAAU,IAElCoW,EAA2BpW,EAA3BoW,wBAFkC,GAGf,IAAAy/B,UAAS,IAHM,qBAGlCyyT,EAHkC,KAG3BC,EAH2B,KAKnCryT,GAAiB,IAAAs2P,iCASvB,OAPA,IAAAn2R,YAAU,WACJ6/B,GACFqyT,GAAS,IAAAl/V,qBAGV,CAAC6sC,IAECA,GAAmB9/B,EAYtB,+BAAK92B,UAAU,+DACb,8BAAIA,UAAU,eACXgpX,EAAM9rc,KAAI,SAAC7M,EAAMg5c,GAChB,OAAO,mCAAiBh5c,KAAMA,EAAMzD,IAAKy8c,SAb7C,+BAAKrpX,UAAU,4DACb,6C,mHCzBR,O,WACA,MACA,OACA,OACA,Q,IAEA,OACA,SACA,QACA,QACA,QAMA,QACA,SAEA,QACA,Q,OACA,QACA,Q,IACA,Q,mDAEA,IAAM86Y,EAAkB,SAACp6X,GAAU,IAE1BrwG,EACaqwG,EADbrwG,KAAM0/S,EACOrvM,EADPqvM,UAAWx9O,EACJmuC,EADInuC,qBAAsBI,EAC1B+tC,EAD0B/tC,yBAA0BkzH,EACpDnlF,EADoDmlF,QAASzzH,EAC7DsuC,EAD6DtuC,kBAAmBjC,EAChFuwC,EADgFvwC,cAClG9yC,EAAkBqjF,EAAlBrjF,eACIm4H,GAAY,IAAAF,gBAEZhlI,GAAS,IAAAC,oBACT/P,EAAO8P,EAAOynN,YAAY1nO,EAAKg6G,YAPJ,GAQO,IAAAksC,UACtCjmI,EAAO8qR,kBAAoB9qR,EAAO8qR,iBAAiB/qS,EAAKg6G,YAAc/5F,EAAO8qR,iBAAiB/qS,EAAKg6G,YAAc,IATlF,qBAQ1BpxG,EAR0B,KAQZiwM,EARY,KAW3B36C,EAAW/tJ,IAAS8P,EAAO9P,MAAQ8P,EAAOkZ,QAAUn5B,EAAKi6G,UA4C/D,OAvBA,IAAAyM,YAAU,WAEN,IAAM,EADH99G,EAiBOA,GACViwM,qDAjBM,gCAAqB,+FACnBx/K,EAAa6kI,EAAWj+I,GAAS,IAAAgZ,kBAAiBhZ,EAAQjgB,EAAKg6G,WAAYh6G,EAAKi6G,WACjFikD,EAFoB,uBAGjBk7D,EAAen5M,EAAOq0F,2BAA0B,GAAM,GAAO,GAH5C,SAIjBj7E,EAAWggM,aAAalpN,EAAM8P,EAAO9P,KAAMipN,EAAcp5N,EAAKi6G,UAAW,MAAM,GAJ9D,QAMzB,IAAAytE,2BAA0BruJ,EAAY,KAAM,GACzCzC,MAAK,SAAAswE,GAEAi+C,KACF0zD,EAAgB3xG,MAVG,kDAArB,4CAeai+C,KAIpB,IAECu6J,EACK,+BAAK57S,IAAK8E,EAAc+mF,UAAU,eAAespH,IAAI,cAI5D,kCAAmB00H,SAAnB,MACG,SAACr0N,GAAD,OACC,8BAAI3pB,UAAU,oBAAoBkyF,QAAS,kBAjDnB,SAACvoE,GAC7B,IAAM4/V,EAAiBA,eAAe/oc,EAAhC,UAA8CnQ,EAAKi6G,UACzD,UAAU/zE,eAAe,EAAAsI,gCAAgC4D,YAAc8ma,GAClEh7S,GAQHp+F,EAAc,MACdiC,EAAkB,IAClBG,EAAqB,IACrBszH,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,OACpB,IAAAsQ,eAAcC,EAAatsF,KAX3Bk1C,EAAqB,EAAAzgC,cAAcQ,cACnCqgC,EAAyB,CACvBm8I,cAAetuM,EACfq5X,SAAUxpY,EAAKi6G,UACfwvR,cAAe,MAyCkC7pK,CAAsBtmH,KACrE,+BAAK3pB,UAAU,uBAAuBv2E,MAAO,CAACy3E,gBAAiBA,OAAOjoF,EAAxB,MAC3CA,EAAe,KAAO,yCAEzB,+BAAK+mF,UAAU,sBACb,+BAAKA,UAAU,4BACb,gCAAMA,UAAU,iCACd,4CAAkB5iF,GAAG,0BADvB,IACkD/M,EAAKg6G,mBAarEywX,EAAgBxjV,UAAY,CAC1BjnJ,KAAM,UAAUtD,OAAOshH,WACvBx4G,SAAU,UAAU2hJ,KACpBu4J,UAAW,UAAUv4J,MAGvB,IAKMkuC,EAAqB,CACzBv1H,8BACAiC,sCACAG,4CACAI,oDACAt1C,iC,WAGa,IAAAsoK,aACb,IAAAzkF,UAdsB,WACtB,MAAO,KAakBwkF,EAAzB,CAA6Co1S,K,8EC/H/C,I,IAAA,MACA,O,IACA,S,8DAwBe,IAAA55X,UAPS,SAACxzG,GAEvB,MAAO,CACL8uB,UAFkB9uB,EAAMouB,wBAAnBU,aAMM,EAtBe,SAACkkF,GAAU,IAEhClkF,EAAakkF,EAAblkF,UAEP,OACE,+BAAKwjE,UAAU,+DACb,8BAAIA,UAAU,eACXxjE,EAAUtf,KAAI,SAACqnI,EAAY8kU,GAC1B,OAAO,mCAAiBz8c,IAAKy8c,EAAW9kU,WAAYA,a,4GCZ9D,MACA,O,IACA,MAGA,QAEA,Q,IACA,OACA,Q,OACA,Q,mDAEA,IAAMw2V,EAAkB,SAACr6X,GAAU,IAM3B,EAJC6jC,EAAyF7jC,EAAzF6jC,WAAYl8G,EAA6Eq4E,EAA7Er4E,kBAAmB1L,EAA0D+jF,EAA1D/jF,aAAc4L,EAA4Cm4E,EAA5Cn4E,0BAA2B9K,EAAiBijF,EAAjBjjF,cAEzE8wI,EAAW5xI,GAAiB4nH,EAAWnnI,KAAOuf,EAE9C0ub,GAAA,gCAAkB,8FAElB98S,EAFkB,0CAGb,GAHa,cAMtB,IAAAvyI,gBACAuM,EAA0Bg8G,EAAWnnI,IACrChQ,QAAQ4B,IAAI,aAAcu1I,GAEpBglU,EAVgB,MAUOhlU,EAAWnnI,GAVlB,WAU+BmnI,EAAW76C,OAV1C,gBAUgE66C,EAAWugF,YAV3E,UAUgGvgF,EAAW/6G,MACjI,UAAU+M,eAAe,EAAAsI,gCAAgC+D,uBAAyB2ma,GAX5D,UAahB,IAAAjlU,gBAAeC,EAAY9mH,GAbX,OActB4K,KACA,IAAAq/D,iBAfsB,mDAAlB,4CAkBN,OACE,8BAAI1H,UAAU,oBAAoBkyF,QAASm5R,GACzC,+BAAKrrX,UAAU,uBAAuBv2E,MAAO,CAACy3E,gBAAiBA,OAAOqjD,EAAWitF,UAAnC,MAC3CjtF,EAAWitF,UAAY,KAAO,yCAEhCjtF,EAAWy2V,aAAez2V,EAAW02V,YACpC,+BAAKj7Y,UAAU,sBACb,+BAAKA,UAAU,4BACZukD,EAAWy2V,YACR,gCAAMh7Y,UAAU,iCAAhB,UAAwDukD,EAAWy2V,aACnE,MAILz2V,EAAW02V,YACR,+BAAKj7Y,UAAU,kCAAf,WAAyDukD,EAAW02V,aACpE,MAEJ,OAKVF,EAAgBzjV,UAAY,CAC1B/S,WAAY,UAAUx3I,QAGxB,IAQM24L,EAAqB,CACzBr9J,sCACAE,uD,WAGa,IAAA24E,UAbS,SAACxzG,GAAU,MACKA,EAAMouB,wBAC5C,MAAO,CACLa,aAH+B,EAC1BA,aAGLc,cAJ+B,EACZA,iBAYiBioK,EAAzB,CAA6Cq1S,I,8EC5E5D,I,IAAA,MACA,OACA,O,IAEA,S,8DA2Be,IAAA75X,UATS,SAACxzG,GAGvB,MAAO,CACLmI,SAHiBnI,EAAMgR,YAAlB7I,SAIL+2J,kBAH0Bl/J,EAAMk4L,WAA3Bh5B,qBAOM,EAzBY,SAAClsD,GAAU,IAE7B7qG,EAA+B6qG,EAA/B7qG,SAAU+2J,EAAqBlsD,EAArBksD,kBAEjB,OACE,mCAAS5sE,UAAW,2CAA6C4sE,EAAoB,yBAA2B,KAC7G/2J,EAAW,KACV,8BAAImqF,UAAU,wBACZ,4CAAkB5iF,GAAG,uCAGxBwvJ,EAAoB,mCAAqBq2O,aAAa,IAAU,U,8ECjBvE,W,WACA,MACA,OACA,Q,IAEA,S,IACA,S,IAEA,SACA,QACA,Q,IACA,SACA,QACA,Q,IACA,S,IACA,S,mDAEA,IAAMi4F,EAAkB,SAACx6X,GAAU,IAE1BtwC,EAAsGswC,EAAtGtwC,WAAYD,EAA0FuwC,EAA1FvwC,cAAeiC,EAA2EsuC,EAA3EtuC,kBAAmB/0C,EAAwDqjF,EAAxDrjF,eAAgBssF,EAAwCjJ,EAAxCiJ,YAAak8E,EAA2BnlF,EAA3BmlF,QAAShiD,EAAkBnjC,EAAlBmjC,eACvF30I,GAAW,IAAA+vY,eAETk8F,EAAiB,WAAyB,IAAxBC,IAAwB,yDAC1Chra,IACFD,EAAc,MACdiC,EAAkB,KAClB,IAAAs3C,eAAcC,EAAatsF,IAEzBnuB,GAAYA,EAAS+d,UAAa/d,EAAS+d,WAAa,EAAAtC,OAAOyuF,OACjEhnC,EAAkB,IACdgpa,GACFv1S,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAK1B,OACE,wCACE,+BAAKpZ,UAAU,cACZ6jD,EAAiB,KAChB,wCACE,mCAAiBs3V,eAAgBA,IACjC,wCACA,mCAAiBA,eAAgBA,KAGrC,mCAAwBA,eAAgBA,IACxC,mCAAiBA,eAAgBA,IACjC,mCAAsBA,eAAgBA,OAO9CD,EAAgB5jV,UAAY,CAC1B3tC,YAAa,UAAU4tC,UAAU,CAC/B,UAAU48B,KACV,UAAUnlI,MAAM,CAAE46D,QAAS,UAAUs3F,SAIzC,IASMxb,EAAqB,CACzBv1H,8BACAiC,sCACA/0C,iC,WAGa,IAAAsoK,aACb,IAAAzkF,UAhBsB,SAACxzG,GAGvB,MAAO,CACL0iE,WAHmB1iE,EAAM0zG,UAApBhxC,WAILyzE,eAHuBn2I,EAAMqN,gBAAxB8oI,kBAckB6hD,EAAzB,CAA6Cw1S,K,8EC9E/C,I,IAAA,MACA,OACA,O,IAEA,O,IACA,QAEA,QACA,QACA,Q,OACA,Q,mDAEA,IAiCMx1S,EAAqB,CACzBnzH,6C,WAGa,IAAA4qF,aACb,IAAAj8C,UAbsB,SAACxzG,GAGvB,MAAO,CACL6f,eAHqB7f,EAAMqN,mBAYJ2qL,EAAzB,EAtCsB,SAAChlF,GAAU,IAE1B7wF,EAA8C6wF,EAA9C7wF,KAAM0iD,EAAwCmuC,EAAxCnuC,qBAAsBhlD,EAAkBmzF,EAAlBnzF,eAGnC,MADgB,IAAAnT,aAAcmT,EAAeggG,WAC5BhgG,EAAeoI,WAC9B,OAAO,KAQT,OACE,+BAAKqqE,UAAW,sBACd,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,+CACVkyF,QATQ,WACtB,UAAU37I,eAAe,EAAAsI,gCAAgCE,uBACzDwzB,EAAqB,EAAAzgC,cAAcC,QAQ/B,+C,8EC/BR,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,S,IACA,SAEA,QACA,QACA,QACA,Q,0DAEA,IAAMspc,EAAkB,SAAC36X,GAAU,IAE1B7wF,EACuB6wF,EADvB7wF,KAAMinG,EACiBpW,EADjBoW,wBAAyB1mD,EACRswC,EADQtwC,WAAYD,EACpBuwC,EADoBvwC,cAAeiC,EACnCsuC,EADmCtuC,kBAAmBC,EACtDquC,EADsDruC,eAAgB8oa,EACtEz6X,EADsEy6X,eAClG7ma,EAA4BosC,EAA5BpsC,yBAsBF,OACE,+BAAK0rB,UAAW,sBACd,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,+CACVkyF,QAxBQ,WAEtB,GADA,UAAU37I,eAAe,EAAAsI,gCAAgCG,wBACpD83E,EACH,OAAO,EAGL1mD,GAAciC,EAChB8oa,KAIFhra,EAAc,EAAA7+B,kBAAkBC,MAChC+iC,GAAyB,GACpBjC,GACHyxB,YAAW,WACT1xB,EAAkB,EAAAznD,OAAO4uF,YACxB,MASAnpC,EAAa,wCAAoB,2CAM1Cira,EAAgB/jV,UAAY,CAC1B6jV,eAAgB,UAAUhnT,KAAK9lE,YAGjC,IAUMq3E,EAAqB,CACzBv1H,8BACAiC,sCACAkC,qD,WAGa,IAAA6oF,aACb,IAAAj8C,UAjBsB,SAACxzG,GAAU,IAC1BkzG,EAAqBlzG,EAAMgR,YAA3BkiG,kBAD0B,EAEIlzG,EAAM0zG,UAC3C,MAAO,CACLhxC,WAJ+B,EAE1BA,WAGLiC,eAL+B,EAEdA,eAIjBykD,wBAAyBlW,EAAkB/2G,UAWpB67L,EAAzB,CAA6C21S,K,gFCvE/C,W,OACA,OACA,O,IACA,M,IAEA,O,IACA,SAEA,QACA,SACA,S,IACA,SACA,Q,0DAEA,IAAMC,EAAyB,SAAC56X,GAAU,IAEjC7wF,EAAsG6wF,EAAtG7wF,KAAMinG,EAAgGpW,EAAhGoW,wBAAyBqkX,EAAuEz6X,EAAvEy6X,eAAgBjuU,EAAuDxsD,EAAvDwsD,wBAAyBD,EAA8BvsD,EAA9BusD,2BAEzEwvK,GAAgB,IAAApnL,QAAO,OAE7B,IAAAS,iBAAgB2mL,GAAe,WACzBvvK,GACFD,GAA2B,MAa/B,OACE,+BAAKjtE,UAAW,+CAAgDo1D,IAAKqnL,GACnE,mCAAY99E,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,qBACpC4iF,UAAU,+CACVkyF,QAbU,WAExB,GADA,UAAU37I,eAAe,EAAAsI,gCAAgCI,uBAAuBxxC,MAAM,GAAI,KACrFqpH,EACH,OAAO,EAETqkX,IACAluU,GAA4BC,KAQxB,mCAAWzjJ,MAAO,CAACssH,UAAW,mDAEhC,+BAAK/1C,UAAW,YAAcktE,EAA0B,oBAAsB,KAC3EpjK,OAAOmc,KAAP,iBAA2B/I,KAAI,SAAA8tF,GAAA,OAAa,mCAAkBA,UAAWA,EAAWp+F,IAAKo+F,UAMlGswY,EAAuBhkV,UAAY,CACjC6jV,eAAgB,UAAUhnT,KAAK9lE,YAGjC,IASMq3E,EAAqB,CACzBz4B,yD,WAGa,IAAA9P,aACb,IAAAj8C,UAdsB,SAACxzG,GAAU,IAC1BkzG,EAAqBlzG,EAAMgR,YAA3BkiG,kBACAssD,EAA2Bx/J,EAAMk4L,WAAjC14B,wBACP,MAAO,CACLp2C,wBAAyBlW,EAAkB/2G,OAC3CqjK,6BASuBw4B,EAAzB,CAA6C41S,K,+ECnE/C,I,IAAA,MACA,OACA,OACA,Q,IACA,M,IAEA,O,IACA,S,IACA,OAEA,SACA,QACA,QACA,QACA,QACA,Q,OACA,Q,mDAEA,IAAMC,EAAmB,SAAC76X,GAAU,IAE3B7wF,EAAyH6wF,EAAzH7wF,KAAMm7E,EAAmH0V,EAAnH1V,UAAWiiE,EAAwGvsD,EAAxGusD,2BAA4BzgE,EAA4EkU,EAA5ElU,cAAeptE,EAA6DshF,EAA7DthF,eAAgBmzC,EAA6CmuC,EAA7CnuC,qBAAsB4B,EAAuBusC,EAAvBvsC,oBAoBzG,OACE,+BAAK6rB,UAAW,sCAAwCgL,GACtD,mCAAY2zJ,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,qBACpC4iF,UAAU,+CACVkyF,QAAS,kBAtBA,SAAClnF,GAIxB,GAHA,UAAUz0D,eAAe,EAAAsI,gCAAgCI,uBAAyB+rD,GAClFiiE,GAA2B,IAEtB7tI,EAQH,OAPkB,IAAAu+G,mBAAXpwB,SAELh7C,EAAqB,EAAAzgC,cAAcO,eACnC8hC,EAAoB62B,IAEpBz4B,EAAqB,EAAAzgC,cAAckB,YAAag4D,IAE3C,GAGT,IAAAuB,mBAAkBvB,EAAWwB,GAOAgvY,CAAiBxwY,KAC1B,YAAdA,EAA2B,wCAAiB,uCAAU,EAAAgsC,eAAehsC,OAM/EuwY,EAAiBjkV,UAAY,CAC3BtsD,UAAW,UAAUpzD,OAAOy2E,YAG9B,IASMq3E,EAAqB,CACzBnzH,4CACA06F,wDACA94F,2C,WAGa,IAAAwxH,aACb,IAAAxoC,aACE,IAAAj8C,UAjBoB,SAACxzG,GAGvB,MAAO,CACL0xB,eAHuB1xB,EAAMwc,UAAxBkV,eAILotE,cAHiB9+F,EAAMgR,YAAlB03B,YAeoBsvJ,EAAzB,CAA6C61S,M,8ECxEjD,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,SAEA,QACA,Q,IACA,QACA,Q,OACA,Q,mDAEA,IAAME,EAAkB,SAAC/6X,GAAU,IAE1B7wF,EAA8E6wF,EAA9E7wF,KAAM0iD,EAAwEmuC,EAAxEnuC,qBAAsB4oa,EAAkDz6X,EAAlDy6X,eAAgB/7c,EAAkCshF,EAAlCthF,eAAgB7R,EAAkBmzF,EAAlBnzF,eAEnE,GAAIA,EAAe2nI,QACjB,OAAO,KAGT,IAAM3nC,GAAU,IAAAnzG,aAAcmT,EAAeggG,QAavCw9N,EAAax9N,EAAU,mBAAqB,eAElD,OACE,wCACG,SAAC2lM,GAAD,OACC,+BAAKlzN,UAAW,sBACd,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI2tU,IACpC7yP,UARH,EASG8hN,UAAQ,cACRh6M,UAAU,+CACVkyF,QAAS,kBArBD,SAACghI,GAC3B,UAAU38Q,eAAe,EAAAsI,gCAAgCS,uBACrDlgB,EACF8zR,IAEA3gP,EAAqBg7C,EAAU,EAAAz7E,cAAcM,cAAgB,EAAAN,cAAckB,aAE7Emoc,IAciCtxB,CAAoB32J,KAC7C,8CAQZuoL,EAAgBnkV,UAAY,CAC1B6jV,eAAgB,UAAUhnT,KAAK9lE,YAGjC,IAUMq3E,EAAqB,CACzBnzH,6C,WAGa,IAAA4qF,aACb,IAAAj8C,UAfsB,SAACxzG,GAIvB,MAAO,CACL0xB,eAJuB1xB,EAAMwc,UAAxBkV,eAKL7R,eAJqB7f,EAAMqN,mBAaJ2qL,EAAzB,CAA6C+1S,K,8ECzE/C,I,IAAA,MACA,OACA,O,IAEA,O,IACA,OAEA,Q,OACA,Q,IACA,O,IACA,Q,8DAqCe,IAAAt+U,aACb,IAAAj8C,UAZsB,SAACxzG,GAAU,MACQA,EAAMgR,YAC/C,MAAO,CACLtF,YAH+B,EAC1BA,YAGL09G,wBAJ+B,EACblW,kBAGyB/2G,UAIpB,GAIzB,EAA6C,cAnClB,SAAC62G,GAAU,IAE/B7wF,EAAiD6wF,EAAjD7wF,KAAMsrd,EAA2Cz6X,EAA3Cy6X,eAAgB/he,EAA2BsnG,EAA3BtnG,YAAa43S,EAActwM,EAAdswM,WAQ1C,OACE,+BAAKhxN,UAAW,kFACd,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,+CACVkyF,QAVa,WAC3B,UAAU37I,eAAe,EAAAsI,gCAAgCK,4BACzDi8b,IACAnqL,EAAW1rN,UAQP,uCACE,4CAAkBub,MAAO,UAAaznG,GAAa6wH,mB,8EC7B7D,I,IAAA,MACA,OACA,OACA,Q,IAEA,O,IACA,SAEA,Q,OACA,QACA,Q,mDAIA,IAqCMy7D,EAAqB,CACzB6rH,kBAzCF,OAyCEA,mB,WAGa,IAAA5rH,aACb,IAAAxoC,aACE,IAAAj8C,UAhBoB,SAACxzG,GAIvB,MAAO,CACL6f,eAJqB7f,EAAMqN,gBAK3B02S,oBAJ4B/jT,EAAMilV,UAA7BlhC,uBAcoB/rH,EAAzB,EA3CoB,SAAChlF,GAAU,IAE1B7wF,EAAyF6wF,EAAzF7wF,KAAM0hS,EAAmF7wM,EAAnF6wM,kBAAmBhkS,EAAgEmzF,EAAhEnzF,eAAgBs4K,EAAgDnlF,EAAhDmlF,QAAS4rH,EAAuC/wM,EAAvC+wM,oBAAqB0pL,EAAkBz6X,EAAlBy6X,eAG9E,IADgB,IAAA/ge,aAAcmT,EAAeggG,UAC7BhgG,EAAezQ,SAAS0pB,SACtC,OAAO,KAUT,OACE,+BAAKw5D,UAAW,sBACd,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,+CACVkyF,QAXQ,WACtB,UAAU37I,eAAe,EAAAsI,gCAAgCC,uBACzDq8b,GAAe,GACf5pL,GAAkB,GAClB1rH,EAAQ17L,KAAKsnT,GAAuB,EAAA9mS,OAAOyvF,QAQvC,gD,8ECnCR,W,OACA,O,IAEA,SACA,S,IAGA,S,mDAGA,IAuCMsrF,EAAqB,CACzBr4B,iE,WAGa,IAAAnsD,UAjBS,SAACxzG,GAAU,IAC1B0iE,EAAc1iE,EAAM0zG,UAApBhxC,WAD0B,EAEkC1iE,EAAMk4L,WAAlEt4B,EAF0B,EAE1BA,4BAA6BF,EAFH,EAEGA,4BAGpC,MAAO,CACL/4C,eAHuB3mH,EAAMilV,UAAxBt+N,eAILjkD,aACAg9F,8BACAE,iCAQoCo4B,EAAzB,EACb,cA5C6B,SAAChlF,GAAU,IAEjCtwC,EAC0CswC,EAD1CtwC,WAAYiyC,EAC8B3B,EAD9B2B,kBAAmBu+S,EACWlgT,EADXkgT,qBAAsBtzP,EACX5sD,EADW4sD,4BAA6BD,EACxC3sD,EADwC2sD,+BACvFD,EAA+C1sD,EAA/C0sD,4BAA6B/4C,EAAkB3T,EAAlB2T,eAW/B,OATA,IAAA0C,YAAU,YACH1C,IAAmBjkD,GAAciyC,EAAkBx4G,QAAUujK,EAChEC,GAA+B,IACrBj9F,GAAcikD,IAAmBi5C,GAC3CD,GAA+B,KAGhC,CAACj9F,EAAYiyC,EAAkBx4G,OAAQwqH,IAErChS,EAAkBx4G,OAKrB,mCAASm2F,UAAW,mBAAqBstE,EAA8B,2BAA6B,KAClG,mCAA+BjrD,kBAAmBA,EACnBu+S,qBAAsBA,KANhD,U,iGCzBX,MACA,O,IACA,MACA,O,IAEA,QACA,QACA,Q,IACA,S,mDAGA,IAAM86E,EAAgC,SAACh7X,GAAU,IAExC2B,EAAsF3B,EAAtF2B,kBAAmBu+S,EAAmElgT,EAAnEkgT,qBAAsBxzP,EAA6C1sD,EAA7C0sD,4BAA6BhiJ,EAAgBs1F,EAAhBt1F,aAEvEqsd,GAAyB,IAAA70X,2BAC7BwqD,EAD6B,wBACI/qD,IADJ,aAC0Bu+S,IAAuBx1Y,GAGhF,OACE,+BAAK40E,UAAU,cACb,+BAAKA,UAAU,sBACb,8BAAIA,UAAU,4BAA2B,4CAAkB5iF,GAAG,2BAC9D,6BAAG4iF,UAAU,gCACX,4CAAkB5iF,GAAG,8BAEvB,+BAAK4iF,UAAU,wBACb,mCAA+B4gU,qBAAsBA,EACtBv+S,kBAAmBA,EACnB47J,eAAgB,EAAAp/N,gCAAgC2D,2CAGnF,+BAAKw9C,UAAU,oBACZy3Y,EAAuBv6d,KAAI,SAAAimG,GAAA,OAC1B,+BAAKnjB,UAAU,2BAA2BpzF,IAAKu2G,EAAgBF,SAC7D,8BAAIjjB,UAAU,kCACZ,4CAAkB5iF,GAAA,4BAA2D,UAA5B+lG,EAAgBF,QAAsB,QAAU,SAC/E13F,OAAQ,CAAC+uE,eAAgB6oB,EAAgBF,YAE5DE,EAAgBpsB,SAAS75E,KAAI,SAAAy+d,GAC5B,OAAO,mCAAiBlyd,MAAO,GAAIskF,YAAa4tY,EAAkB/ue,IAAK+ue,EAAiB5ie,UAAUqE,eAShHs+d,EAA8BpkV,UAAY,CACxCj1C,kBAAmB,UAAU52F,MAAM4iG,WACnCuyS,qBAAsB,UAAUn1Y,MAAM4iG,Y,WAYzB,IAAAnN,UATS,SAACxzG,GAGvB,MAAO,CACL0/J,4BAHoC1/J,EAAMk4L,WAArCx4B,4BAILhiJ,aAHqB1d,EAAMyc,YAAtBiB,gBAOM,CAAyBswd,I,8EC/DxC,I,IAAA,MACA,OACA,OACA,Q,IAEA,O,IACA,O,IACA,QAEA,QACA,QACA,QACA,Q,WACA,QACA,QACA,QACA,QACA,SACA,Q,OACA,QACA,SACA,Q,mDAEA,IAsKMh2S,EAAqB,CACzBtzH,sCACAP,8CACAx0C,gCACAsvI,sDACAx8F,8BACA0oE,2C,WAGa,IAAA8sD,aACb,IAAAxoC,aACE,IAAAj8C,UAzCoB,SAACxzG,GAAU,MACmEA,EAAM0zG,UAAnG/uC,EAD0B,EAC1BA,eAAgBP,EADU,EACVA,mBAAoB1B,EADV,EACUA,WAAYoB,EADtB,EACsBA,kBAAmBoD,EADzC,EACyCA,uBADzC,EAEkBlnE,EAAMgR,YAAlDtF,EAF0B,EAE1BA,YAAavD,EAFa,EAEbA,SAAU+qG,EAFG,EAEHA,kBAFG,EAGuClzG,EAAMk4L,WAAvEh5B,EAH0B,EAG1BA,kBAAmBU,EAHO,EAGPA,4BAA6BtB,EAHtB,EAGsBA,cAHtB,EAIEt+J,EAAMqN,gBAAlC+B,EAJ0B,EAI1BA,SAAU+mI,EAJgB,EAIhBA,eACVlsI,EAAajK,EAAM8J,UAAnBG,UAL0B,EAMQjK,EAAMilV,UAAxCt+N,EAN0B,EAM1BA,eAAgBi9L,EANU,EAMVA,eAChBtrS,EAAoBtY,EAAMqY,YAA1BC,iBAEP,MAAO,CACLoqD,aACAiC,iBACAP,qBACAN,oBACAp4D,cACAwzJ,oBACAU,8BACAz3J,WACAqR,mBAAoBpK,EACpB+mI,iBACAlsI,YACAq0J,gBACA33C,iBACAyC,wBAAyBlW,EAAkB/2G,OAC3Cmc,mBACAsrS,iBACA18O,4BAeyB8wH,EAAzB,EAjLuB,SAAChlF,GAAU,IAE7BtuC,EAIasuC,EAJbtuC,kBAAmBC,EAINquC,EAJMruC,eAAgBj5D,EAItBsnG,EAJsBtnG,YAAayW,EAInC6wF,EAJmC7wF,KAAMiiD,EAIzC4uC,EAJyC5uC,mBAAoBD,EAI7D6uC,EAJ6D7uC,sBAC/Eg0H,EAGkBnlF,EAHlBmlF,QAASxoK,EAGSqjF,EAHTrjF,eAAgBuvI,EAGPlsD,EAHOksD,kBAAmBD,EAG1BjsD,EAH0BisD,0BAA2Bv8F,EAGrDswC,EAHqDtwC,WACvED,EAEkBuwC,EAFlBvwC,cAAem9F,EAEG5sD,EAFH4sD,4BAA6Bz3J,EAE1B6qG,EAF0B7qG,SAAUqR,EAEpCw5F,EAFoCx5F,mBAAoBvP,EAExD+oG,EAFwD/oG,UAAWq0J,EAEnEtrD,EAFmEsrD,cAAe33C,EAElF3T,EAFkF2T,eACpG7iD,EACkBkvC,EADlBlvC,kBAAmBxrD,EACD06F,EADC16F,iBAAkB6yH,EACnBn4B,EADmBm4B,oBAAqBy4K,EACxC5wM,EADwC4wM,eAAgB18O,EACxD8rC,EADwD9rC,uBAC1EivE,EAAkBnjC,EAAlBmjC,eAEIo0V,EAAgB5la,IAAmB,EAAA1nD,OAAOkqB,MAAQw9B,IAAmB,EAAA1nD,OAAOkpB,MAC5Ewjc,EAAmBhla,IAAmB,EAAA1nD,OAAO4uF,SAE7CqiY,EAAoB,SAACjyX,EAAamsO,GACtC,IAAM73E,EAAiB63E,IAAU,EAAAnrU,OAAO4uF,SACpC,EAAA16D,gCAAgCc,gCAChC,EAAAd,gCAAgCe,gCACpC,UAAUrJ,eAAe0nO,GACpB7tM,EAEMikD,IACTlkD,EAAc,MACdiC,EAAkB,KAHlBjC,GAAc,GAKZ2B,GACFD,EAAsB,IAEpBQ,IAAmByjR,GACrB3lR,EAAc,MACdiC,EAAkB,KAElBA,EAAkB0jR,GAEfzhO,GAAkBhiD,IAAmByjR,IACpCA,IAAU,EAAAnrU,OAAO4uF,SACnBssF,EAAQ17L,MAAK,IAAAw/F,iBAEbk8F,EAAQ17L,KAAK,EAAAwgB,OAAOkqB,OAGpB+3H,GACFD,EAA0B,IAExB3mJ,GACF6yH,EAAoB,OAEtB,IAAAnvB,eAAcC,EAAatsF,IAGvB2qY,EAAkB,SAACr+S,GACvB,UAAUpzE,eAAe,EAAAsI,gCAAgCgB,0BACzDuyB,EAAkB,EAAAznD,OAAOC,MACzBi7K,EAAQ17L,KAAK,EAAAwgB,OAAOC,MAChBwlD,GACFD,GAAc,GAEZ2B,GACFD,EAAsB,IAEpB+6F,GACFD,EAA0B,IAExB3mJ,GACF6yH,EAAoB,OAEtB,IAAAnvB,eAAcC,EAAatsF,IAGvByoF,GAAU9/F,GAAoBoqD,KAAgBv6D,IAAaw+G,EAC3D/jG,GAAS,IAAAC,oBACT09O,EAAS3gG,GACTx7F,GAAsB1B,IAAe9/C,EAAOy+E,wBAAwBj9B,KAAwB8C,EAAuBjvC,UAAYqmI,GAC/H35F,GAAkBA,EAAe9iE,SAAS,EAAAob,OAAOC,QAChD5E,IAAoB,IAAA6oF,oBAAmBz+B,EAAY0B,EAAoBN,EAAmBoD,GAE3FusM,GAAkB,IAAAz9E,mBAAkB/rL,EAAWkY,GAErD,OACE,kCAAmBmuT,SAAnB,MACG,SAACr0N,GAAD,OACC,kCAAQ3pB,UAAW,sDACd8lB,GAAUuO,EAAiB,iCAAmC,KAC9DwvB,EAAiB,oCAAsC,KACvDxvB,IAAmBi9L,EAAiB,uCAAyC,KAC7ErjD,EAAS,iCAAmC,KAC9CpqH,EAAiB,KAChB,+BAAK7jD,UAAU,8BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,6BACnC4iF,UAAW,+BAAiCq3Y,EAAmB,qBAAuB,KAAQjna,EAAmC,GAAtB,qBAC3G8hH,QAAS,kBAAM0pT,EAAkBjyX,EAAa,EAAAh/F,OAAO4uF,YAC/D,uCACE,yCAAesH,MAAOw2X,EAAmB,EAAAv2X,OAAOC,MAAQ,UAAa3nG,GAAa6wH,YAGtF,gCAAMjqC,UAAU,oCACVkyF,QAAS,kBAAM0pT,EAAkBjyX,EAAa,EAAAh/F,OAAO4uF,YACzD,4CAAkBn8F,GAAG,+BAI1Bi3G,GAAkBwvB,EAAiB,KAClC,+BAAK7jD,UAAU,8BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,uBACnC4iF,UAAW,+BAAiCi4Y,EAAgB,qBAAuB,KAAQ7na,EAAmC,GAAtB,qBACxG8hH,QAAS,kBAAM0pT,EAAkBjyX,EAAa,EAAAh/F,OAAOkpB,SAC/D,uCACE,0CAAgBgtE,MAAOo3X,EAAgB,EAAAn3X,OAAOC,MAAQ,UAAa3nG,GAAa6wH,YAGpF,gCAAMjqC,UAAU,oCACVkyF,QAAS,kBAAM0pT,EAAkBjyX,EAAa,EAAAh/F,OAAOkpB,SACzD,4CAAkBz2B,GAAG,yBAI1B8J,EAAmBsf,SAClB,+BAAKw5D,UAAU,8BACb,mCAAOwgU,aAAcr/I,EAAiBtgK,MAAM,UAAU4/S,WAAYt/I,GAChE,mCAAYxiB,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAW,+BAAkC5vB,EAAmC,GAAtB,qBAC1D8hH,QAAS,kBAAM81O,EAAgBr+S,KACzC,uCACE,gDAIN,gCAAM3pB,UAAU,oCACVkyF,QAAS,kBAAM81O,EAAgBr+S,KACnC,4CAAkBvsG,GAAG,wBAGvB,e,4GCxJd,MACA,OACA,Q,IAEA,S,IACA,SACA,QACA,Q,IACA,Q,IACA,QACA,S,8DA2Ee,IAAAuoL,aACb,IAAAzkF,UAdsB,SAACxzG,GAIvB,MAAO,CACLmI,SAJiBnI,EAAMgR,YAAlB7I,SAKLqR,mBAJiBxZ,EAAMqN,gBAAlB+B,YAQkB,GAIzB,EA1EqB,SAAC4jG,GAAU,IAI1B,EAFC7qG,EAAyC6qG,EAAzC7qG,SAAUgwL,EAA+BnlF,EAA/BmlF,QAAS3+K,EAAsBw5F,EAAtBx5F,mBAEpB2jc,GAAA,gCAAmB,WAAOvvI,GAAP,8FACK,IAAAD,wBAAuBC,EAAwB,EAAAz8R,gCAAgCuE,mBADpF,WACjBm4R,EADiB,UAEDA,EAAcluU,MAFb,uBAGrBD,QAAQC,MAAM,yCAA0CkuU,GAHnC,mBAId,GAJc,wBAMjB,IAAAC,wBANiB,OAOlBD,EAAc/wT,uBAERtD,EAAmBuf,kBAC5Bo/J,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,aAEpBksF,EAAQ17L,KAAK,EAAAwgB,OAAOuvF,aAJpB2rF,EAAQ17L,KAAK,EAAAwgB,OAAOqvF,iBARC,kDAAnB,6CAgBN,OACE,wCACG,SAACogL,EAAiBkhD,GACjB,IAAM34E,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,+CACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAOC,QAGxB,CACE62N,UAAW,8CACXmhB,QAAS,+CACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAO8uF,gBAGxB,CACEgoI,UAAW,+BACXmhB,QAAS,0CACT1wE,QAAS,kBAAM24R,EAAiBvvI,MAIpC,OACE,+BAAKt7O,UAAU,MACb,+BAAKA,UAAU,WACb,mCAAsBo6L,gBAAiBA,EACjBywL,iBAAkB,kBAAMA,EAAiBvvI,MAC9DzlU,EAAW,+BAAKmqF,UAAU,cAAgB,yCAE5CnqF,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,c,8EChE7F,W,OACA,OACA,O,IACA,M,IAEA,Q,IACA,O,IAEA,Q,IACA,Q,mDAGA,IAAMk5O,EAAuB,SAACn7X,GAAU,IAE/B7qG,EAA+C6qG,EAA/C7qG,SAAUukR,EAAqC15K,EAArC05K,gBAAiBywL,EAAoBnqW,EAApBmqW,iBAElC,OACE,wCACE,mCAAuBv/Z,MAAOz1C,EAAW,gCAAkC,yBACpD0oP,SAAU1oP,EAAW,mCAAqC,8BACjF,mCAAWmqF,UAAU,WACnB,+BAAKA,UAAU,mBACb,+BAAKA,UAAU,yBACb,mCAAehzF,SAAS,QAAQotR,gBAAiBA,KAEnD,+BAAKp6L,UAAU,yBACb,mCAAehzF,SAAS,WAAWotR,gBAAiBA,MAGvDvkR,EAAW,KACV,+BAAKmqF,UAAU,mBACb,+BAAKA,UAAU,yBACf,+BAAKA,UAAU,yBACb,mCAAQA,UAAU,2EAEVkyF,QAAS24R,GACf,4CAAkBztc,GAAG,uCAUrCy+d,EAAqBvkV,UAAY,CAC/B8iI,gBAAiB,UAAU5iI,KAAKnpC,WAChCw8V,iBAAkB,UAAU12R,M,WAUf,IAAAjzE,UAPS,SAACxzG,GAEvB,MAAO,CACLmI,SAFiBnI,EAAMgR,YAAlB7I,YAMM,CAAyBgme,I,8EC1DxC,I,EAAA,O,oCACA,OACA,OACA,QAEA,Q,WA+Ee,IAAAl2S,aACb,IAAAzkF,UAlBsB,SAACxzG,GAAU,IAC1BmI,EAAYnI,EAAMgR,YAAlB7I,SACAiH,EAAYpP,EAAMqN,gBAAlB+B,SAGP,MAAO,CACLjH,WACA2U,uBAJ+B9c,EAAMwc,UAAhCM,uBAKLtD,mBAAoBpK,KAIG,GAMzB,EA7EuB,SAAC4jG,GAAU,IAE3BmlF,EAAiEnlF,EAAjEmlF,QAAS32L,EAAwDwxG,EAAxDxxG,SAAUgY,EAA8Cw5F,EAA9Cx5F,mBAAoBsD,EAA0Bk2F,EAA1Bl2F,uBAExCsxd,GAAW,IAAA5kV,UAAQ,WACvB,MAAO,CAAC,CACNpmI,YAAa,iCACbitF,WAAW,EACXgH,YAAY,EACZv4F,IAAK,EAAA7B,OAAO6uF,WACX,CACD1oF,YAAa,6BACbitF,UAAW72F,EAAmBuf,kBAC9Bs+E,YAAav6F,EACbgC,IAAK,EAAA7B,OAAOgvF,aACX,CACD7oF,YAAa,6BACbitF,WAAW,EACXgH,YAAav6F,EACbgC,IAAK,EAAA7B,OAAOuvF,aACX,CACDppF,YAAa,8BACbitF,UAAW72F,EAAmB7H,YAC9B0lG,YAAav6F,EACbgC,IAAK,EAAA7B,OAAOovF,iBAEb,CAAC7yF,EAAoBsD,IASxB,OACE,+BAAKw1E,UAAU,cACb,8BAAIA,UAAU,oBACX87Y,EAAS5+d,KAAI,SAAAy6G,GACZ,IAAKA,EAAK5Z,UACR,OAAO,KAET,IAAMwwD,EAAW52C,EAAKnrG,MAAQ,EAAA7B,OAAO6uF,UACjCtqG,EAAS+d,WAAa,EAAAtC,OAAO6uF,WAAatqG,EAAS+d,WAAa,EAAAtC,OAAO8uF,aACvEvqG,EAAS+d,WAAa0qG,EAAKnrG,IAC/B,OACE,8BAAIwzE,UAAW,yBAA2BuuE,EAAW,iCAAmC,KACnF52C,EAAK5S,WAAa,mCAAqC,IACxDn4G,IAAK+qH,EAAK7mG,YACVohK,QAAS,kBArBP,SAACv6D,GACf,GAAIA,EAAK5S,WACP,OAAO,EAET8gF,EAAQ17L,KAAKwtH,EAAKnrG,KAiBSiM,CAAQk/F,KACzB,4CAAkBv6G,GAAIu6G,EAAK7mG,yB,iGC1DzC,MACA,O,IAEA,Q,IACA,Q,IACA,S,mDAGA,IA0DM40K,EAAqB,CACzBlnK,eA7DF,MA6DEA,gB,WAGa,IAAA0iF,UAXS,SAACxzG,GAEvB,MAAO,CACL6f,eAFqB7f,EAAMqN,mBAUS2qL,EAAzB,EA9DsB,SAAChlF,GAAU,IAEvC05K,EAAmD15K,EAAnD05K,gBAAiB7sQ,EAAkCmzF,EAAlCnzF,eAAgBiR,EAAkBkiF,EAAlBliF,eAElC45H,EAAc,CAClB,UAAa,iDACb,SAAY,gDACZ,YAAe,oDACf,OAAU,oDACV,SAAY,gDACZ,KAAQ7qI,EAAeG,cAAgB,gDAAkD,4CACzF,OAAUH,EAAeE,QAAU,mDAAqD,8CACxF,MAAa,8CAGTsud,EAAoB,SAAC/ue,EAAUV,GACnCkyB,mBACGxxB,EAAWV,KAIhB,OACE,+BAAK0zF,UAAU,mBACZl2F,OAAOmc,KAAKmyI,GAAal7I,KAAI,SAAAwnZ,GAC5B,OAAQA,GACN,IAAK,cACH,OACE,+BAAK1kU,UAAU,wBAAwBpzF,IAAK83Z,GAC1C,mCAAoB13Z,SAAU03Z,EAAUtqI,gBAAiBA,KAG/D,IAAK,WACH,OACE,+BAAKp6L,UAAU,wBAAwBpzF,IAAK83Z,GAC1C,mCAAkB13Z,SAAU03Z,EACVxkB,cAAe67F,EACf3hN,gBAAiBA,KAGzC,QACE,OACE,+BAAKp6L,UAAU,wBAAwBpzF,IAAK83Z,GAC1C,mCAAe13Z,SAAU03Z,EAAUtqI,gBAAiBA,c,8EClDpE,I,IAAA,MACA,OACA,OACA,Q,IAEA,QAEA,QACA,Q,mDAEA,IAoCM10F,EAAqB,CACzBlnK,iC,WAGa,IAAAmnK,aACb,IAAAzkF,UAZsB,SAACxzG,GAEvB,MAAO,CACLyI,SAFiBzI,EAAMwc,UAAlB/T,YAWkBuvL,EAAzB,EAzCqC,SAAChlF,GAAU,IAEzCvqG,EAAqCuqG,EAArCvqG,SAAUqoB,EAA2BkiF,EAA3BliF,eAAgBqnK,EAAWnlF,EAAXmlF,QAYjC,OACE,6BAAG7lG,UAAU,iBACX,mCACE8qI,QAAS30N,EAAS2wP,cAClB57B,SAdmB,SAACl1H,GACxBx3E,EAAe,CACbsoO,cAAe9wJ,EAAMlqF,OAAOg/M,aAc5B,gCAAM9qI,UAAU,kBACd,4CAAkB5iF,GAAG,4BADvB,IACmD,gCAAM4iF,UAAU,YAAYkyF,QAXjE,WAChB2T,EAAQ17L,KAAK,EAAAwgB,OAAO+uF,aAWd,4CAAkBt8F,GAAG,oC,8EChC/B,W,OACA,OACA,OACA,Q,IAEA,OAEA,Q,OACA,QACA,Q,IACA,Q,IACA,SACA,S,mDAGA,IAoDMsoL,EAAqB,CACzBtzH,sCACAjC,8BACA42G,+C,WAGa,IAAA4e,aACb,IAAAzkF,UAhBsB,SAACxzG,GAGvB,MAAO,CACLmI,SAHiBnI,EAAMgR,YAAlB7I,SAIL0X,eAHqB7f,EAAMqN,mBAcJ2qL,EAAzB,EA3DuB,SAAChlF,GAAU,IAE3BtuC,EAA8FsuC,EAA9FtuC,kBAAmBjC,EAA2EuwC,EAA3EvwC,cAAe01H,EAA4DnlF,EAA5DmlF,QAAShwL,EAAmD6qG,EAAnD7qG,SAAU0X,EAAyCmzF,EAAzCnzF,eAAgBw5J,EAAyBrmE,EAAzBqmE,uBAE5E,IAAAhwD,YAAU,WACRgwD,MACC,CAACA,IAEJ,IAOMpwI,EAAQppB,EAAe6yU,aACvBxpT,EAAQrpB,EAAeqpB,MAEvBolc,EAAsBrlc,GAASC,EACjC,8BACAD,IAAUC,EACR,uCACAA,IAAUD,EACR,uCACA,qCAER,OACE,+BAAKqpD,UAAU,MACb,+BAAKA,UAAU,4BACb,mCAAuB10C,MAAM,2BAA2BizM,SAAUy9O,EAAqBt9O,eAAgB,CAAC9nN,QAAOD,WAC/G,+BAAKqpD,UAAU,eACb,mCAAQA,UAAU,2EACVkyF,QAxB4B,WAC1C,UAAU37I,eAAe,EAAAsI,gCAAgCyE,qCACzD8uB,EAAkB,IAClBjC,GAAc,GACd01H,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAqBZ,4CAAkBh8F,GAAG,sCAGxBmQ,EAAes2H,eAAiB,KAAO,wCACvChuI,EAAW,+BAAKmqF,UAAU,cAAgB,Y,8ECpDnD,I,IAAA,MACA,OACA,OACA,Q,IAEA,OAEA,QACA,QACA,QACA,QACA,QACA,Q,WACA,Q,IACA,Q,IACA,S,mDAGA,IA8EM0lG,EAAqB,CACzBtzH,sCACAjC,8BACA0B,+C,WAGa,IAAAsrF,aACb,IAAAwoC,aAAW,IAAAzkF,UAlBW,SAACxzG,GAIvB,MAAO,CAGL6f,eAJqB7f,EAAMqN,mBAeO2qL,EAAzB,EArFsB,SAAChlF,GAAU,IAErC7wF,EAAkE6wF,EAAlE7wF,KAAMtC,EAA4DmzF,EAA5DnzF,eAAgB6kD,EAA4CsuC,EAA5CtuC,kBAAmBP,EAAyB6uC,EAAzB7uC,sBAE1CjoC,GAAe,IAAA0gE,eACrB,IAAK1gE,EACH,OAAO,KAET,IAAMtZ,GAAS,IAAAC,oBAWf,OACE,kCAAmBytT,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,+BAAK90P,UAAU,cACZp2D,EAAa1sB,KAAI,SAACi/F,GAAgB,IAC1BnqF,EAAgBmqF,EAAhBnqF,aACDqoE,EAAW/pE,EAAOo9E,sBAAsB,CAAC98E,KAAMoB,IACrD,IAAKqoE,EAASxwF,OACZ,OAAO,KAET,IAAM40I,GAAoB,IAAA5B,8BAA6BxiD,GAIjDhwB,GAAmB,IAAAn5C,qBAAoBc,EAAcnC,EAAMtC,GACjE,OACE,mCAASyyE,UAAU,iBAAiBpzF,IAAKuvG,EAAYzgG,QACnD,kCAAQskF,UAAU,0BAChB,+BAAKA,UAAU,+BACb,8BAAIA,UAAU,oBACZ,4CAAkB5iF,GAAG,uCAAuCmO,OAAQ,CAAC8+C,uBAEvE,8BAAI21B,UAAU,wBACZ,4CAAkB5iF,GAAG,0CAA0CmO,OAAQ,CAAC8+C,wBAG5E,+BAAK21B,UAAU,gCACb,mCAAQA,UAAU,gFACVkyF,QAAS,kBAvCd,SAAClgK,EAAc8iU,GACtC,UAAUv+S,eAAe,EAAAsI,gCAAgC0E,2BAA6BvxB,EAAatW,QACnG02D,EAAkB,IAClB0iR,EAAmB9iU,EAAatW,OAAQsW,EAAauJ,eACrDuoE,YAAW,WACTjyB,EAAsB7/C,EAAatW,UAClC,KAiCwCuge,CAAiBjqd,EAAc8iU,KACpD,4CAAkB13U,GAAG,6CAI3B,mCAAgCyT,aAAc4tH,EAAkB50I,OAAS40I,EAAoBpkD,EAAS5sF,MAAM,EAAG,IAC/EqnV,mBAAoBA,qB,6FCzExE,O,WACA,MACA,O,IAEA,S,IACA,S,IACA,O,IAEA,SACA,Q,mDAEA,IAGMonJ,EAAiC,SAACx7X,GAAU,IAEzC7vF,EAA0C6vF,EAA1C7vF,aAAcikU,EAA4Bp0O,EAA5Bo0O,mBAAoBjlU,EAAQ6wF,EAAR7wF,KAFO,GAGJ,IAAA0mI,UAAS,GAHL,qBAGzC4lV,EAHyC,KAGzBC,EAHyB,KAK1CC,EAAmB,SAAChlU,GACxB+kU,EAAkBD,EAAiB9kU,IAK/Bo+T,EAAe5kd,EAAahnB,OAdf,IAc0Csye,GAAoBtrd,EAAahnB,OAd3E,EAeb6re,EAAgB7kd,EAAahnB,OAfhB,IAe0Csye,EAE7D,OACE,+BAAKn8Y,UAAU,0BACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC86E,SAAUw9Y,EACV11Y,UAAU,+FACVkyF,QAAS,kBAAMmqT,EAAiB,KAC1C,yCAEF,8BAAIr8Y,UAAU,wBACXnvE,EAAa3T,KAAI,SAAC6X,GACjB,IAAMghH,EAAYomW,EAAiBA,cA1B1B,IA0BqDA,EAA5C,MAAkE,OACpF,OAAO,mCAAmCvve,IAAKmoB,EAAQnE,KAAK7X,UAAUqE,GAC5BoyE,OAAQ,CAACumD,aACT++M,mBAAoBA,EACpBr8U,QAASsc,EAAQnE,WAG/D,mCAAY+tO,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC86E,SAAUu9Y,EACVz1Y,UAAU,gGACVkyF,QAAS,kBAAMmqT,GAAkB,KAC3C,2CAMRH,EAA+B5kV,UAAY,CACzCzmI,aAAc,UAAUy9F,QAAQ,UAAUt/D,MAAV,qBAChC8lS,mBAAoB,UAAU3gK,KAAK9lE,Y,WAGtB,IAAA8uC,YAAW++U,I,gFC5D1B,I,IAAA,MACA,O,IACA,MACA,QAGA,QACA,Q,IACA,Q,IACA,OACA,Q,WACA,Q,mDAGA,IAAMI,EAAoC,SAAC57X,GAAU,IAE5CjoG,EAAuCioG,EAAvCjoG,QAASq8U,EAA8Bp0O,EAA9Bo0O,mBAAoBtlQ,EAAUkxB,EAAVlxB,OAOpC,OACE,+BAAKwQ,UAAU,0BAA0BkyF,QANtB,WACnB,UAAU37I,eAAe,EAAAsI,gCAAgC2E,2BAA6B,UAAUhM,mBAAmB/+B,IACnHq8U,EAAmBr8U,EAAQiD,OAAQjD,IAI6BgR,MAAO+lE,GAAU,MAC/E,mCAAkBh9D,WAAY/Z,EAASglQ,gBAAgB,IACvD,6BAAGz9K,UAAU,oCACX,mCAAavnF,QAASA,EAAS+U,mBAAmB,KAEpD,+BAAKwyE,UAAU,uEACb,mCAAoBvnF,QAASA,EAAS8oQ,OAAO,OAMrD+6N,EAAkChlV,UAAY,CAC5C7+I,QAAS,UAAUu2C,MAAV,oBACT8lS,mBAAoB,UAAU3gK,KAAK9lE,WACnC7+B,OAAQ,UAAUziF,QAGpB,IAOM24L,EAAqB,CACzBtzH,sCACAjC,+B,WAGa,IAAAw1H,aACb,IAAAzkF,UAbsB,SAACxzG,GAEvB,MAAO,CACLs6Q,oBAF4Bt6Q,EAAM8J,UAA7BwwQ,uBAYkBtiF,EAAzB,CAA6C42S,K,8ECvD/C,I,IAAA,MACA,OACA,OACA,Q,IAEA,OAEA,Q,OACA,Q,IACA,SACA,Q,IACA,Q,IACA,Q,mDAGA,IAuEM52S,EAAqB,CACzBlnK,iC,WAGa,IAAAmnK,aACb,IAAAzkF,UAjBsB,SAACxzG,GAKvB,MAAO,CACL0xB,eALuB1xB,EAAMwc,UAAxBkV,eAMLvpB,SALiBnI,EAAMgR,YAAlB7I,SAMLqR,mBALiBxZ,EAAMqN,gBAAlB+B,YAckB4oL,EAAzB,EA5EqB,SAAChlF,GAAU,IAEzBmlF,EAAyEnlF,EAAzEmlF,QAASrnK,EAAgEkiF,EAAhEliF,eAAgBY,EAAgDshF,EAAhDthF,eAAgBvpB,EAAgC6qG,EAAhC7qG,SAAUqR,EAAsBw5F,EAAtBx5F,mBAEpDq1d,EAAmB,WACvB,UAAUhmc,eAAe,EAAAsI,gCAAgC4E,iBACzDjlB,EAAe,CACbsoO,eAAe,IAEjBjhE,EAAQ17L,KACNi1B,EACIlY,EAAmBuf,kBACjB,EAAA9b,OAAOgvF,YACP,EAAAhvF,OAAOuvF,YACTrkG,EACE,EAAA8U,OAAO8uF,aACP,EAAA9uF,OAAO6uF,YAIXmpJ,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAO8uF,gBAGxB,CACEgoI,UAAW,iBACXmhB,QAAS,oBACT1wE,QAASqqT,IAIb,OACE,+BAAKv8Y,UAAW,MAAQnqF,EAAW,GAAK,eACtC,+BAAKmqF,UAAU,WACb,mCAAuB10C,MAAM,2BAC7B,+BAAK00C,UAAU,YACb,yCAEDnqF,EAAW,+BAAKmqF,UAAU,cACzB,+BAAKA,UAAU,mBACb,+BAAKA,UAAU,yBACf,+BAAKA,UAAU,yBACb,mCAAQA,UAAU,2EACVkyF,QAASqqT,GACf,4CAAkBn/d,GAAG,uBAM9BvH,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,W,8ECrEvF,W,OACA,OACA,OACA,Q,IAEA,S,IACA,S,IACA,O,IACA,OAEA,QACA,Q,IACA,Q,IACA,Q,IACA,S,IACA,S,8DAsFe,IAAAh9D,aACb,IAAAzkF,UAfsB,SAACxzG,GAAU,MACKA,EAAMgR,YAArCkiG,EAD0B,EAC1BA,kBAAmB/qG,EADO,EACPA,SADO,EAEJnI,EAAM8J,UAA5BG,EAF0B,EAE1BA,UAAWoF,EAFe,EAEfA,QACXD,EAAYpP,EAAMqN,gBAAlB+B,SAEP,MAAO,CACLg6G,wBAAyBlW,EAAkB/2G,OAC3CgM,WACA8B,YACAoF,UACAmK,mBAAoBpK,KAKtB,EAAyB,cAnFF,SAAC4jG,GAAU,IAE3BoW,EAAgGpW,EAAhGoW,wBAAyBjhH,EAAuE6qG,EAAvE7qG,SAAU8B,EAA6D+oG,EAA7D/oG,UAAWkuL,EAAkDnlF,EAAlDmlF,QAAS3+K,EAAyCw5F,EAAzCx5F,mBAAoB88Y,EAAqBtjT,EAArBsjT,kBAE5E8E,EAAkB5hZ,EAAmB7H,YAAc,eAAiB,qCAE1E,aAAiBy3G,EAAyBn/G,GAE1C,IAAMo8T,EAAkB,WAClB7sT,EAAmBuf,kBACrBo/J,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,aAEpBksF,EAAQ17L,KAAK,EAAAwgB,OAAOC,OAIlBuzO,GAAqB,IAAA3vJ,iBAAgB72F,GAErCugF,EAAWimK,EAAmBlrP,OAAM,SAAAuI,GAAA,QAAa,IAAAstF,iBAAgBttF,OAClE2iP,EAAmB/hP,QAAO,SAAAZ,GAAA,OAAY,IAAAstF,iBAAgBttF,MAAWvI,OAAM,SAAAuI,GAAA,OAAaA,EAAS+C,YAE5FokP,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS6hJ,GAEX,CACEtyF,UAAWqnL,EACXlmK,QAAS,0CACT1wE,QAAS8xO,EACT9rU,aAIJ,OACE,+BAAK8H,UAAU,MACb,+BAAKA,UAAU,WACb,wCACC82B,EAA0B,wCACzB,+BAAK92B,UAAU,WACb,yCAGHnqF,EACC,wCACE,+BAAKmqF,UAAU,eAIjB,kCAAQA,UAAU,aAChB,+BAAKA,UAAU,yBACb,mCAAqB+zO,gBAAiBA,IACtC,mCAAQ/zO,UAAW,yDACd94E,EAAmB7H,YAAc,sBAAwB,IACtD64E,SAAUA,EACVg6F,QAAS8xO,GACf,4CAAkB5mZ,GAAI0rZ,QAM/BjzZ,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,Y,8EClFvF,I,IAAA,M,IAEA,Q,IACA,S,IACA,S,6DAE+B,WAE7B,OACE,+BAAK3iK,UAAU,sBACb,mCAAuB10C,MAAM,2BAA2BizM,SAAS,gCACjE,+BAAKv+J,UAAU,uBACb,+BAAKA,UAAU,4BACb,yCAEF,+BAAKA,UAAU,6BACb,6C,8EChBV,I,IAAA,MACA,OACA,O,IACA,MACA,QACA,Q,mDAEA,SAASmkT,IACP,OAAO,KAGT,IAAMq4F,EAA0B,SAAC97X,GAAU,IAElCi9B,EAAuCj9B,EAAvCi9B,gBAAiBz2H,EAAsBw5F,EAAtBx5F,mBACnBlQ,EAAqB0pG,EAArB1pG,kBAEL,OAAKkQ,EAAmB7H,aAAgB,EAAD,kBAIlC3B,OAAOC,UAAU3G,KACpBA,GAAoB,IAAA8E,iBAAgB9E,mBAIpC,+BAAKgpF,UAAU,mBACb,gCAAMA,UAAU,yBACd,4CAAkB5iF,GAAG,yCAEvB,+BAAK4iF,UAAU,yBACZ29C,EAAkB,wBAACwmQ,EAAD,MAAkBj9X,EAAmBgC,aAAelS,EAAkBkD,QAAQ,MAb9F,MAmBXsie,EAAwBllV,UAAY,CAClC3Z,gBAAiB,UAAU6Z,KAC3BxgJ,kBAAmB,UAAUg3G,Q,WAWhB,IAAA9M,UARS,SAACxzG,GAGvB,MAAO,CACLwZ,mBAHiBxZ,EAAMqN,gBAAlB+B,YAOM,CAAyB0/d,I,8ECjDxC,W,OACA,OACA,OACA,Q,IACA,S,8DA6De,IAAAr/U,aACb,IAAAwoC,aAAW,IAAAzkF,UAXW,SAACxzG,GAGvB,MAAO,CACLysY,SAHiBzsY,EAAM0xS,aAAlB+6F,YAOkB,GAGd,EA3DgB,SAACz5R,GAAU,IAE/By5R,EAAYz5R,EAAZy5R,SAEP,IAAKA,EAASE,WAAaF,EAASC,WAClC,OAAO,KAGT,IACQtuT,EAYR,OACE,wCACE,+BAAKkU,UAAU,mBACb,gCAAMA,UAAU,yBACd,4CAAkB5iF,GAAG,qCAEvB,+BAAK4iF,UAAU,0BACZ,aAAkBm6S,EAASC,YAAY1iX,KAAO,IAC/C,gCAAMsoE,UAAU,0BACd,4CAAkB5iF,GAAG,6CArBvB0uE,EAAMquT,EAASC,WAAW4oB,WAAW,KAAM,MACrCl3U,EAAIjiF,QAAU,EACjBiiF,EAGcA,EAAIh5E,OAAOg5E,EAAIjiF,OAAS,KAqB7C,+BAAKm2F,UAAU,mBACb,gCAAMA,UAAU,yBACd,4CAAkB5iF,GAAG,yCAEvB,+BAAK4iF,UAAU,yBACZm6S,EAASE,kB,+EC/CpB,I,EAAA,O,8CAEe,CACb,KACE,6BAAGtkQ,UAAU,cACX,gCAAMnqI,EAAE,2rCACR,gCAAMA,EAAE,6JAGZ,WACE,6BAAGmqI,UAAU,cACX,gCAAMnqI,EAAE,sgBACR,gCAAMA,EAAE,4JACR,gCAAMA,EAAE,2JACR,gCAAMA,EAAE,oGACR,gCAAMA,EAAE,qKACR,gCAAMA,EAAE,gyHAGZ,KACE,6BAAGmqI,UAAU,cACX,gCAAMnqI,EAAE,uRACR,mCAASyvD,OAAO,sLAChB,gCAAMzvD,EAAE,0fACR,gCAAM4jB,EAAE,SAASC,EAAE,SAAS1a,MAAM,SAASE,OAAO,WAClD,gCAAMrJ,EAAE,0iBACR,gCAAMA,EAAE,wcACR,mCAASyvD,OAAO,2KAChB,gCAAMzvD,EAAE,qgBACR,gCAAMA,EAAE,khBACR,gCAAMA,EAAE,qyDAGZ,IACE,6BAAGmqI,UAAU,cACX,gCAAMnqI,EAAE,i0DAGZ,SACE,6BAAGmqI,UAAU,cACX,gCAAMnqI,EAAE,8LACR,gCAAMA,EAAE,8GACR,gCAAMA,EAAE,20DAGZ,SACE,6BAAGmqI,UAAU,cACX,gCAAMnqI,EAAE,8HACR,gCAAMA,EAAE,8HACR,gCAAMA,EAAE,+HACR,gCAAMA,EAAE,2GACR,gCAAMA,EAAE,mOACR,gCAAMA,EAAE,4OACR,gCAAMA,EAAE,6OACR,gCAAMA,EAAE,s1OAGZ,OACE,6BAAGmqI,UAAU,cACX,gCAAMnqI,EAAE,2loB,8EC3Dd,I,EAAA,O,oCACA,OAEA,OACA,Q,WA4Ce,IAAAuxJ,aACb,IAAAj8C,UAbsB,SAACxzG,GAAU,IAC1BiK,EAAajK,EAAM8J,UAAnBG,UAD0B,EAEgBjK,EAAMo5B,wBAAhDw4Q,EAF0B,EAE1BA,uBAAwBM,EAFE,EAEFA,eAE/B,MAAO,CACLjoS,YACA4V,eAAgB7f,EAAMqN,gBACtBukS,yBACAM,oBAKF,EA5C0B,SAACl/L,GAAU,IAE9B7wF,EAA2E6wF,EAA3E7wF,KAAMtC,EAAqEmzF,EAArEnzF,eAAgB5V,EAAqD+oG,EAArD/oG,UAAW2nS,EAA0C5+L,EAA1C4+L,uBAAwBM,EAAkBl/L,EAAlBk/L,eAC1D14R,EAAqBqG,EAAezQ,SAE1C,IAAKnF,EAAU9N,SAAWqd,EAAmBkhT,oBAAsBlhT,EAAmBmhT,kBAChF/oB,IAA2BM,EAAerwS,SAAS,OACvD,OAAO,KAgBT,OACE,+BAAKywF,UAAU,iBAEb,+BAAKA,UAAU,yBAAyB0hL,wBAAyB,CAACC,OAhBzC,WAC3B,IAAKp0P,EAAeE,SAAWF,EAAeG,gBAAkBmC,EAAK1C,SAAU,CAC7E,GAAoB,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,uCAC3C,OAAO0C,EAAK1C,SAAS,uCAChB,GAAoB,UAAhB0C,EAAKvC,QAAsBuC,EAAK1C,SAAS,sDAClD,OAAO0C,EAAK1C,SAAS,sDAChB,GAAII,EAAeE,QACxB,6BAGJ,OAAOF,EAAezQ,SAASsrT,kBAM6CG,Y,wGC/BhF,OACA,QACA,Q,8DAiEe,IAAArnN,UAhBS,SAACxzG,GAAU,MACsDA,EAAM0xS,aAAtF+6F,EAD0B,EAC1BA,SAAUt7J,EADgB,EAChBA,WAAY/+E,EADI,EACJA,gBAAiBqkB,EADb,EACaA,eAAgBC,EAD7B,EAC6BA,sBAG9D,MAAO,CACL+1N,WACAt7J,aACA/+E,kBACAqkB,iBACA95J,MAPc3c,EAAMgR,YAAf2L,MAQL+5J,2BAIuB,GAEZ,EA/DW,SAAC1jE,GAAU,IAW7B,EATCk1C,EAA0Gl1C,EAA1Gk1C,SAAUukP,EAAgGz5R,EAAhGy5R,SAAUt7J,EAAsFn+H,EAAtFm+H,WAAY/+E,EAA0Ep/C,EAA1Eo/C,gBAAiBqkB,EAAyDzjE,EAAzDyjE,eAAgBC,EAAyC1jE,EAAzC0jE,sBAAuBuL,EAAkBjvE,EAAlBivE,QAAStlK,EAASq2F,EAATr2F,MACjG+vX,EAAyDD,EAAzDC,WAAYC,EAA6CF,EAA7CE,SAAUC,EAAmCH,EAAnCG,SAAUC,EAAyBJ,EAAzBI,QAASC,EAAgBL,EAAhBK,IAAKrjW,EAAWgjW,EAAXhjW,QAyCrD,OAAOy+G,GAjCD,gCAAgB,2FACpBxoJ,QAAQ4B,IAAI,aAAc6vO,GADN,UAEP,IAAAr3G,eAAc,CACzB37H,KAAMwuY,EACNklD,MAAOnlD,EACPE,WACAC,UACAC,MACA/6O,QAAS0kB,EAAe7sI,OACxBH,UACAz2B,QAfI3J,SACAooH,SADApoH,GAAa,IAAA+E,iBACbqjH,GAAa,IAAA7oH,wBAAuBS,GACnC44K,EAAUnwK,KAAKouE,MAAOuxC,GAAcwwD,EAAU,KAAQ,KAAO,IAAMxwD,GAcxE34C,aAAch4E,SAASC,SAASmC,OAChCyZ,MAAO7b,SAASC,SAAS4b,OAASA,EAClCy1I,gBAAiB,CACfj0J,KAAMi0J,EAAgBt9B,SACtB28B,SAAUW,EAAgBX,SAC1BklB,SAAUvkB,EAAgBukB,SAC1BjlB,KAAMU,EAAgBV,KACtBjjJ,MAAO2jJ,EAAgB3jJ,MACvBmmK,IAAKxiB,EAAgBxoH,QAEvB6sI,eAAgB,CACdt4K,KAAMs4K,EAAe3hD,SACrB28B,SAAUglB,EAAehlB,SACzBklB,SAAUF,EAAeE,SACzBjlB,KAAM+kB,EAAe/kB,KACrBjjJ,MAAOgoK,EAAehoK,MACtBmmK,IAAK6B,EAAe7sI,QAEtB8sI,0BACC,GA9BiB,yEANG,IACjBrtK,EACAooH,IAIc,cAAhB,iD,4GCfR,MACA,OACA,OACA,Q,IAEA,O,IACA,QAEA,Q,OACA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,M,IACA,Q,IACA,Q,8DA8Ee,IAAAwmE,aACb,IAAAzkF,UARsB,SAACxzG,GAEvB,MAAO,CACLmI,SAFiBnI,EAAMgR,YAAlB7I,YAOP,EA7EqB,SAAC6qG,GAAU,IAI1B,EAFCmlF,EAAqBnlF,EAArBmlF,QAAShwL,EAAY6qG,EAAZ7qG,SAEVm9d,GAAA,gCAAkB,WAAO13J,GAAP,oFACtB,UAAU/kS,eAAe,EAAAsI,gCAAgC6E,eADnC,SAEhB43R,IAFgB,UAGhBxzM,EAAS,UAAMvwH,WAAW2S,UAAUyU,gBACtC70B,OAAOmc,KAAK6hH,GAAQj+H,SAAUC,OAAOmc,KAAK6hH,GAC3C1rH,QAAO,SAAAxP,GAAA,MAAe,gBAARA,KACdyI,MAAK,SAAAzI,GAAA,OAAOk7H,EAAOl7H,IAAQk7H,EAAOl7H,GAAK/C,UANpB,0CAOb,GAPa,OAStBg8L,EAAQ17L,KAAK,EAAAwgB,OAAOqvF,iBATE,kDAAlB,6CAYN,OACE,wCACG,SAACogL,EAAiBkhD,GACjB,IAAM34E,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAOC,QAGxB,CACE62N,UAAW,iBACXmhB,QAAS,oBACT1wE,QAAS,kBAAM8gT,EAAgB13J,MAGnC,OACE,+BAAKt7O,UAAU,MACb,+BAAKA,UAAU,WACb,mCAAuB10C,MAAM,yBAAyBizM,SAAS,8BAC/D,mCAAWv+J,UAAU,WACnB,+BAAKA,UAAU,mBACb,+BAAKA,UAAU,yBACb,mCAAoBhzF,SAAU,cAAeotR,gBAAiBA,KAEhE,+BAAKp6L,UAAU,uDACb,mCAAehzF,SAAU,SAAUotR,iBAAiB,IADtD,MAIDvkR,EAAW,KACV,+BAAKmqF,UAAU,mBACb,+BAAKA,UAAU,yBACf,+BAAKA,UAAU,yBACb,mCAAQA,UAAU,2EAEVkyF,QAAS,kBAAM8gT,EAAgB13J,KACrC,4CAAkBl+T,GAAG,qBAM9BvH,EAAW,+BAAKmqF,UAAU,cAAgB,MAE5CnqF,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,c,wGC9E7F,O,OACA,OACA,OACA,Q,IAEA,O,IACA,QAEA,QACA,QACA,Q,IACA,Q,IACA,QACA,SACA,U,0DAGA,IAiFMj9D,EAAqB,CACzBlnK,gCACAs0L,6B,WAGa,IAAA31D,aACb,IAAAwoC,aACE,IAAAzkF,UApBoB,SAACxzG,GAAU,MACaA,EAAMwc,UAA7C/T,EAD0B,EAC1BA,SAAUipB,EADgB,EAChBA,eAAgB2zL,EADA,EACAA,UAC1Bl9M,EAAYnI,EAAMgR,YAAlB7I,SAGP,MAAO,CACLM,WACAipB,iBACAo5W,aALqBzlL,EAAhBylL,aAML3iY,cAWyB6vL,EAAzB,EAxFyB,SAAChlF,GAAU,IAE/BmlF,EAA2EnlF,EAA3EmlF,QAAS1vL,EAAkEuqG,EAAlEvqG,SAAUipB,EAAwDshF,EAAxDthF,eAAgBvpB,EAAwC6qG,EAAxC7qG,SAAU2iY,EAA8B93R,EAA9B83R,aAAc1lL,EAAgBpyG,EAAhBoyG,cAElE,IAAA/7F,YAAU,WACR0lX,MAEC,IAEH,IAAM,EAIA,EAJAA,GAAA,gCAAwB,qGACtB,IAAAt8F,iBAAgB3H,EAAc,EAAA35V,gCAAgC+E,oBAAqBztC,EAAUipB,EAAgB,EAAG0zL,GAD1F,kDAAxB,4CAIAm7P,GAAA,gCAAyB,qGACvB,IAAA9tE,iBAAgB3H,EAAc,EAAA35V,gCAAgCgF,qBAAsB1tC,EAAUipB,EAAgB,EAAG0zL,GAD1F,kDAAzB,4CAIA6vC,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAOsvF,aAGxB,CACEwnI,UAAW,2CACXmhB,QAAS,+CACT1wE,QAASuqT,GAEX,CACEh7P,UAAW,4CACXmhB,QAAS,+CACT1wE,QAAS+7R,IAIb,OACE,+BAAKjuX,UAAU,MACb,+BAAKA,UAAU,WACb,mCAAuB10C,MAAM,yBAAyBizM,SAAS,8BAC/D,mCAAWv+J,UAAU,WACnB,wCACCnqF,EAAW,KACV,+BAAKmqF,UAAU,mBACb,+BAAKA,UAAU,yBACf,+BAAKA,UAAU,yBACb,mCAAQA,UAAU,gFAEVkyF,QAAS+7R,GACf,4CAAkB7wc,GAAG,+CAEvB,mCAAQ4iF,UAAU,gFAEVkyF,QAASuqT,GACf,4CAAkBr/d,GAAG,iDAM9BvH,EAAW,+BAAKmqF,UAAU,cAAgB,MAE5CnqF,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,Y,8EChFvF,W,OACA,OACA,Q,IAEA,S,IACA,O,IACA,S,IACA,S,IACA,QACA,QACA,QACA,Q,IACA,S,IACA,OACA,S,mDAEA,IAmFMj9D,EAAqB,CACzBtzH,sCACAjC,8BACAoC,6C,WAGa,IAAAozH,aACb,IAAAzkF,UArBsB,SAACxzG,GAAU,MACKA,EAAMgR,YAArCkiG,EAD0B,EAC1BA,kBAAmB/qG,EADO,EACPA,SADO,EAEgBnI,EAAMwc,UAAhDkV,EAF0B,EAE1BA,eAAgB5U,EAFU,EAEVA,uBAChB1N,EAAYpP,EAAMqN,gBAAlB+B,SAEP,MAAO,CACLjH,WACAihH,wBAAyBlW,EAAkB/2G,OAC3Cu1B,iBACA5U,yBACAtD,mBAAoBpK,KAWG4oL,EAAzB,EA1FgB,SAAChlF,GAAU,IAEpBoW,EAC+DpW,EAD/DoW,wBAAyBjhH,EACsC6qG,EADtC7qG,SAAUu8D,EAC4BsuC,EAD5BtuC,kBAAmBhzC,EACSshF,EADTthF,eAAgBymK,EACPnlF,EADOmlF,QAAS11H,EAChBuwC,EADgBvwC,cACpFjpD,EAAoEw5F,EAApEx5F,mBAAoBsD,EAAgDk2F,EAAhDl2F,uBAAwB+nD,EAAwBmuC,EAAxBnuC,qBACxCmqa,GAAQ,IAAArnV,UAERsnV,EAA0B,SAACpwF,GAA+B,OAE7B,IAAAruJ,+BAA1Bx0O,EAFuD,EAEvDA,SAAUpd,EAF6C,EAE7CA,MAAOkpB,EAFsC,EAEtCA,MAGxB,GAFA,UAAUghB,mBAAmB,iBAAkB,CAAC9sB,WAAUpd,QAAOkpB,UAE7D+2X,EAEF,OADAh6U,EAAqB,EAAAzgC,cAAckB,cAC5B,EAEL5T,EACElY,EAAmBwuC,QAAUlrC,EAC/Bq7K,EAAQ17L,KAAK,EAAAwgB,OAAOqvF,iBACX9yF,EAAmBuf,kBAC5Bo/J,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,aAEpBksF,EAAQ17L,KAAK,EAAAwgB,OAAOuvF,aAGtB2rF,EAAQ17L,KAAK0L,EAAW,EAAA8U,OAAO8uF,aAAe,EAAA9uF,OAAO6uF,YAIzD,OACE,wCACG,SAAC6yS,EAAoBE,GAEpB,IAAM5pJ,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP9/G,EAAkB,IAClBjC,EAAc,MACd01H,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAGxB,CACEqoI,UAAW,mBACXmhB,QAAS,0CACT1wE,QAAS,kBAAMyqT,EAAwBpwF,MAI3C,OACE,+BAAKvsT,UAAU,KAAKo1D,IAAKsnV,GACvB,+BAAK18Y,UAAU,WACb,yCACE82B,GAA4By1R,IAA+BF,EAC3D,+BAAKrsT,UAAU,WACb,yCAEA,wCACJ,mCAAiB28Y,wBAAyB,kBAAMA,EAAwBpwF,MACvE12Y,EAAW,+BAAKmqF,UAAU,cAAgB,MAE5CnqF,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,c,8EC7E7F,W,OACA,OACA,O,IAEA,QACA,S,8DAyBe,IAAAxlG,aACb,IAAAj8C,UARsB,SAACxzG,GAEvB,MAAO,CACLiK,UAFkBjK,EAAM8J,UAAnBG,aAOP,EAxBsB,SAAC+oG,GAAU,IAE1B/oG,EAAmB+oG,EAAnB/oG,UAAWkY,EAAQ6wF,EAAR7wF,KAEZsxP,GAAkB,IAAAz9E,mBAAkB/rL,EAAWkY,GAErD,OACE,mCAAuBy7B,MAAM,0BAA0BizM,SAAS,6BAA6BE,UAAU,EAAMD,WAC3G,4CACI2iB,EADJ,IACqB,4CAAkB/jQ,GAAG,2BAD1C,Y,8ECfN,I,IAAA,MACA,OACA,O,IACA,M,IAEA,O,IACA,OAEA,QACA,Q,IACA,S,mDAEA,IAAMw/d,EAAkB,SAACl8X,GAAU,IAE1B/oG,EAAwF+oG,EAAxF/oG,UAAW9B,EAA6E6qG,EAA7E7qG,SAAU8me,EAAmEj8X,EAAnEi8X,wBAAyBr9L,EAA0C5+L,EAA1C4+L,uBAAwBM,EAAkBl/L,EAAlBk/L,eAEvEzhD,GAAqB,IAAA3vJ,iBAAgB72F,GAErCugF,EAAWimK,EAAmBlrP,OAAM,SAAAuI,GAAA,QAAa,IAAAstF,iBAAgBttF,OAClE2iP,EAAmB/hP,QAAO,SAAAZ,GAAA,OAAY,IAAAstF,iBAAgBttF,MAAWvI,OAAM,SAAAuI,GAAA,OAAaA,EAAS+C,YAElG,OACE,kCAAQyhF,UAAU,aAChB,mCAAkB+jT,SAAS,IAC1BluY,GAAaypS,IAA2BM,EAAerwS,SAAS,YAAe,KAC9E,+BAAKywF,UAAU,mBACb,mCAAQA,UAAU,2EACV9H,SAAUA,EACV4kN,UAAW,uCAAS,8CACpB5qH,QAASyqT,GACf,4CAAkBv/d,GAAG,yBAQjCw/d,EAAgBtlV,UAAY,CAC1BqlV,wBAAyB,UAAUxoT,KAAK9lE,Y,WAkB3B,IAAAnN,UAfS,SAACxzG,GAAU,IAC1BiK,EAAajK,EAAM8J,UAAnBG,UACA9B,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGgBnI,EAAMo5B,wBAEvD,MAAO,CACLnvB,YACA9B,WACAypS,uBAR+B,EAG1BA,uBAMLM,eAT+B,EAGFA,kBAUN,GAEZ,CAA6Cg9L,I,8ECzD5D,I,IAAA,MACA,OACA,QACA,O,IAEA,OAEA,Q,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,Q,8DAkGe,IAAAj3S,aAAW,IAAAzkF,UArBF,SAACxzG,GAAU,IAC1BmI,EAAYnI,EAAMgR,YAAlB7I,SAD0B,EAEGnI,EAAM0xS,aAAnC+6F,EAF0B,EAE1BA,SAAUr6O,EAFgB,EAEhBA,gBAFgB,EAG0BpyJ,EAAMwc,UAGjE,MAAO,CACLrU,WACAskY,WACAr6O,kBACA3pJ,SAV+B,EAG1BA,SAQLipB,eAX+B,EAGhBA,eASf5U,uBAZ+B,EAGAA,uBAU/BtD,mBATiBxZ,EAAMqN,gBAAlB+B,YAakB,GAID,EA/FD,SAAC4jG,GAAU,IAE3B7qG,EACqB6qG,EADrB7qG,SAAUgwL,EACWnlF,EADXmlF,QAASs0M,EACEz5R,EADFy5R,SAAUhkY,EACRuqG,EADQvqG,SAAU2pJ,EAClBp/C,EADkBo/C,gBAAiB1gI,EACnCshF,EADmCthF,eAAgBlY,EACnDw5F,EADmDx5F,mBAC7EsD,EAA0Bk2F,EAA1Bl2F,uBAEI0tE,EAAWpuF,OAAOmc,KAAKk0X,GAAU9kY,MAAK,SAAAzI,GAAA,OAAQutY,EAASvtY,SACrDuJ,EAASgpJ,UAAYhpJ,EAASmhC,QAAYwoH,EAAgBX,UAAYW,EAAgBxoH,QAUxF07b,EAAkB,WAClB5zc,EACElY,EAAmBwuC,QAAUlrC,EAC/Bq7K,EAAQ17L,KAAK,EAAAwgB,OAAOsvF,WAEpB4rF,EAAQ17L,KAAK,EAAAwgB,OAAOuvF,aAGtB2rF,EAAQ17L,KAAK0L,EAAW,EAAA8U,OAAO8uF,aAAe,EAAA9uF,OAAO6uF,YAInDmpJ,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAOC,QAGxB,CACE62N,UAAW,eACXmhB,QAAS,0CACT1wE,QAAS8gT,EACT96Y,aAIJ,OACE,+BAAK8H,UAAU,MACb,+BAAKA,UAAU,WACb,wCACA,+BAAKA,UAAU,6BACb,yCAEF,+BAAKA,UAAU,6CACb,wCACCnqF,EAAW,KACV,+BAAKmqF,UAAU,mBACb,+BAAKA,UAAU,yBACf,+BAAKA,UAAU,yBACb,mCAAqB+zO,gBAjDX,WAClB30S,EACFymK,EAAQ17L,KAAK,EAAAwgB,OAAOC,MAEpBi7K,EAAQ17L,KAAK0L,EAAW,EAAA8U,OAAO8uF,aAAe,EAAA9uF,OAAO6uF,cA8C3C,mCAAQxZ,UAAU,2EACV9H,SAAUA,EACVg6F,QAAS8gT,GACf,4CAAkB51d,GAAG,qBAM9BvH,EAAW,+BAAKmqF,UAAU,cAAgB,MAE5CnqF,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,W,8ECpFvF,W,OACA,OACA,OACA,Q,IAEA,O,IACA,Q,IAEA,Q,IACA,QACA,SACA,SACA,Q,mDAGA,IA8DMj9D,EAAqB,CACzBg5C,iC,WAGa,IAAA/4C,aACb,IAAAxoC,aACE,IAAAj8C,UAlBoB,SAACxzG,GAKvB,MAAO,CACLmI,SALiBnI,EAAMgR,YAAlB7I,SAMLM,SALiBzI,EAAMwc,UAAlB/T,SAML2pJ,gBALwBpyJ,EAAM0xS,aAAzBt/I,mBAeoB4lC,EAAzB,EApE8B,SAAChlF,GAAU,IAEpCvqG,EAA4DuqG,EAA5DvqG,SAAU2pJ,EAAkDp/C,EAAlDo/C,gBAAiB4+E,EAAiCh+H,EAAjCg+H,eAAgB7uN,EAAiB6wF,EAAjB7wF,KAAMg2K,EAAWnlF,EAAXmlF,QAMlDi6J,EAAY,GAgBlB,OAdIhgM,EAAgBX,UAAYW,EAAgBV,OAC9C0gM,EAAU31V,KAAK,CACbutB,MAAOooI,EAAgBX,SAAYW,EAAgBX,SAAW,IAAO,KAAM,IAAAg7J,sBAAqBr6J,GAChGxzJ,MAAO,KAIP6J,EAASgpJ,UAAYhpJ,EAASipJ,OAChC0gM,EAAU31V,KAAK,CACbutB,MAAOvhB,EAASgpJ,SAAYhpJ,EAASgpJ,SAAW,IAAO,KAAM,IAAAg7J,sBAAqBhkT,GAClF7J,MAAO,IAKT,wCACE,mCAAuBg/C,MAAM,oCACNizM,SAAS,uCACTv+J,UAAU,4BACjC,+BAAKA,UAAU,cACb,mCAAcA,UAAU,YACVu8O,UAAU,EACVH,YAAavsT,EAAKC,cAAc,CAAC1S,GAAI,+BAAiC,IACtE+yM,YAAa2vI,EACb5jB,aAAc4jB,EAAU,GACxB3jB,gBAAiB,SAACrlC,EAAYgmC,GAAb,OAAiCp+F,EAAe,+BAAgCo+F,MAC/G,+BAAK98O,UAAU,sBACb,mCAAQA,UAAU,wEACV88M,UAAW,wCACX5qH,QAnCW,WACzB2T,EAAQ17L,KAAK,EAAAwgB,OAAOkvF,gBAmCZ,4CAAkBz8F,GAChB0iJ,EAAgBX,UAAYW,EAAgBV,KAAO,mCAAqC,+C,8ECxDtG,W,OACA,OACA,OACA,Q,IAEA,O,IACA,Q,IAEA,QACA,SACA,Q,mDAGA,IAkDMsmC,EAAqB,CACzBg5C,iC,WAGa,IAAA/4C,aACb,IAAAxoC,aACE,IAAAj8C,UAhBoB,SAACxzG,GAIvB,MAAO,CACLmI,SAJiBnI,EAAMgR,YAAlB7I,SAKLskY,SAJiBzsY,EAAM0xS,aAAlB+6F,YAcoBz0M,EAAzB,EAxD6B,SAAChlF,GAAU,IAEnCy5R,EAA2Bz5R,EAA3By5R,SAAUtqX,EAAiB6wF,EAAjB7wF,KAAMg2K,EAAWnlF,EAAXmlF,QAMjBg3S,EAAgB1iG,EAASC,WAAa,CAAC,CAC3C1iX,KAAM7H,EAAKC,cAAc,CAAC1S,GAAI,0CAA4C,IAAM+8X,EAASC,WAAWtnY,OAAOqnY,EAASC,WAAWvwY,OAAS,GACxIyC,MAAO,IACJ,GAEL,OACE,wCACE,8BAAI0zF,UAAU,oBACZ,4CAAkB5iF,GAAG,sCAEvB,6BAAG4iF,UAAU,wBACX,4CAAkB5iF,GAAG,yCAEvB,mCAAc4iF,UAAU,YACVu8O,UAAU,EACVH,YAAavsT,EAAKC,cAAc,CAAC1S,GAAI,qCAAuC,IAC5E+yM,YAAa0sR,EACb3gK,aAAc2gK,EAAc,GAC5B1gK,gBAAiB,SAACrlC,EAAYgmC,GAAb,OAAiC,IAAAp+F,gBAAeo+F,MAC/E,+BAAK98O,UAAU,sBACb,mCAAQA,UAAU,wEACV88M,UAAW,wCACX5qH,QA1Ba,WACzB2T,EAAQ17L,KAAK,EAAAwgB,OAAOmvF,eA0Bd,4CAAkB18F,GAChB+8X,EAASC,WAAa,iDAAmD,4D,6FC7CrF,O,OACA,OACA,OACA,Q,IAEA,O,IACA,Q,IACA,Q,IACA,Q,IAEA,QACA,SACA,SACA,Q,mDAGA,IAkFM10M,EAAqB,CACzBg5C,gCACAQ,yC,WAGa,IAAAv5C,aACb,IAAAxoC,aACE,IAAAj8C,UAnBoB,SAACxzG,GAAU,IAC1BmI,EAAYnI,EAAMgR,YAAlB7I,SAD0B,EAEgCnI,EAAM0xS,aAEvE,MAAO,CACLvpS,WACAsuK,eAN+B,EAE1BA,eAKLC,sBAP+B,EAEVA,sBAMrBtkB,gBAR+B,EAEaA,mBAiBnB4lC,EAAzB,EAzF6B,SAAChlF,GAAU,IAEnCyjE,EAA6GzjE,EAA7GyjE,eAAgBu6D,EAA6Fh+H,EAA7Fg+H,eAAgB7uN,EAA6E6wF,EAA7E7wF,KAAMg2K,EAAuEnlF,EAAvEmlF,QAASzhB,EAA8D1jE,EAA9D0jE,sBAAuBtkB,EAAuCp/C,EAAvCo/C,gBAAiBo/E,EAAsBx+H,EAAtBw+H,mBAFpD,GAGc,IAAA3oF,UAAS,MAHvB,qBAGnCumV,EAHmC,KAGbC,EAHa,KAwBpCj9I,EAAY,GASlB,OAPI37K,EAAehlB,UAAYglB,EAAe/kB,OAC5C0gM,EAAU31V,KAAK,CACbutB,MAAOysJ,EAAehlB,SAAYglB,EAAehlB,SAAW,IAAO,KAAM,IAAAg7J,sBAAqBh2I,GAC9F73K,MAAO,IAKT,wCACE,8BAAI0zF,UAAU,oBACZ,4CAAkB5iF,GAAG,sCAEvB,6BAAG4iF,UAAU,wBACX,4CAAkB5iF,GAAG,yCAEvB,mCAAc4iF,UAAU,YACVu8O,UAAU,EACVH,YAAavsT,EAAKC,cAAc,CAAC1S,GAAI,+BAAiC,IACtE+yM,YAAa2vI,EACb5jB,aAAc4jB,EAAU,GACxB3jB,gBAAiB,SAACrlC,EAAYgmC,GAAb,OAAiCp+F,EAAe,8BAA+Bo+F,MAC9G,+BAAK98O,UAAU,sBACb,mCAAQA,UAAU,wEACV88M,UAAW,wCACX5qH,QA7Ca,WACzB2T,EAAQ17L,KAAK,EAAAwgB,OAAOivF,mBA6Cd,4CAAkBx8F,GAChB+mK,EAAehlB,UAAYglB,EAAe/kB,KAAO,mCAAqC,sCAG1F,mCACErpH,MAAOlmB,EAAKC,cAAc,CAAC1S,GAAI,wCAC/B4iF,UAAU,cACVgrI,QACE,mCACEF,QAAS1mD,EACT8mD,SApDwB,WAClC,IAAM8iE,GAAY5pH,EAClBs6D,EAAe,wBAAyBsvD,GACpCA,GACF+uM,EAAwB54T,GACxB+6D,EAAmB,CACjB/6D,eAAgBrkB,KAETg9U,GACT59P,EAAmB,CACjB/6D,eAAgB24T,iB,mHCnCxB,O,OACA,OACA,QACA,O,IAEA,O,IACA,Q,IACA,O,IACA,SAEA,Q,IACA,QACA,S,IAKA,Q,IACA,Q,IACA,QACA,QACA,QACA,Q,IACA,S,IACA,OACA,S,mDAGA,IA6GMp3S,EAAqB,CACzBs5C,kCACAE,wCACAJ,uC,WAGa,IAAAn5C,aAAW,IAAAzkF,UAjBF,SAACxzG,GAAU,IAC1BmI,EAAYnI,EAAMgR,YAAlB7I,SAD0B,EAESnI,EAAM0xS,aAEhD,MAAO,CACLvpS,WACAiqJ,gBAN+B,EAE1BA,gBAKLi/E,eAP+B,EAETA,kBAeyBr5C,EAAzB,EAnHA,SAAChlF,GAAU,IAgB7B,EAdC7qG,EAA8G6qG,EAA9G7qG,SAAUgwL,EAAoGnlF,EAApGmlF,QAAS/lC,EAA2Fp/C,EAA3Fo/C,gBAAiBk/E,EAA0Et+H,EAA1Es+H,gBAAiBE,EAAyDx+H,EAAzDw+H,mBAAoBJ,EAAqCp+H,EAArCo+H,kBAAmBC,EAAkBr+H,EAAlBq+H,eAFhE,GAGX,IAAAxoF,UAASuJ,GAA1Bk9U,GAH4B,wBAID,IAAAzmV,WAAS,GAJR,qBAI5B0yD,EAJ4B,KAIjBi0L,EAJiB,QAKK,IAAA3mP,UAAS,IALd,qBAK5B0mV,EAL4B,KAKdC,EALc,KAO7BhlZ,GAAY4nE,EAAgBX,WAAaW,EAAgBxoH,QAAU,UAAKktI,UAAUu6D,GASlFo+P,GAAA,gCAAqB,4GAEQ,IAAAj/O,+BAA1Bx0O,EAFkB,EAElBA,SAAUpd,EAFQ,EAERA,MAAOkpB,EAFC,EAEDA,MACxB,UAAUghB,mBAAmB,oBAAqB,CAAC9sB,WAAUpd,QAAOkpB,QAClE+nO,OAAQ,GACR6/O,cAAe,KAGjBlgG,GAAa,GARY,UASM,IAAAj+O,mBAAkBa,GATxB,UASnBu9U,EATmB,OAUzBngG,GAAa,IACTmgG,IAAoBA,EAAiBC,aACF,MAAjCD,EAAiBC,aAAwD,MAAjCD,EAAiBC,YAZtC,wBAavBz3S,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,aAbG,mBAchB,GAdgB,eAgBzBujY,EAAgBG,EAAiB/9U,kBAAoB,KAhB5B,mBAiBlB,GAjBkB,mDAArB,4CAoBAqjG,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,eAGxB,CACE8nI,UAAW,mCACXmhB,QAAS,0CACT1wE,QAASirT,EACTjlZ,aAIJ,OACE,+BAAK8H,UAAU,MACb,+BAAKA,UAAU,WACb,mCAAuB10C,MAAM,4BAA4BizM,SAAS,iCAClE,mCAA+Br/F,cAAeY,EACfukQ,eAAgBrlL,EAChBulL,cAAexlL,EACfulL,iBAAkBxlL,IAChDm+P,EACC,mCAAgBj9Y,UAAU,uGACxB,4CAAkB5iF,GAAG,wCACpB,IAAM6/d,GAEP,KACHpne,EAAW,KACV,+BAAKmqF,UAAU,cACb,+BAAKA,UAAU,mBACb,+BAAKA,UAAU,yBACdnqF,EAAW,KACV,+BAAKmqF,UAAU,yBACb,mCAAqB+zO,gBA/Db,WACtB70F,EAAmB,CACjBp/E,gBAAiBk9U,IAEnBn3S,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,gBA4DN,mCAAQ3Z,UAAW,4EACdipH,EAAY,+BAAiC,IAC1C/wH,SAAUA,EACV4kN,UAAW7zF,EACP,mCAAkBjpH,UAAU,kCAAkCv2E,MAAO,CAAC,MAAS,EAAAq3F,OAAOC,SAEtF,uCACE,4CAAkBF,MAAO,EAAAC,OAAOC,SAGtCmxE,QAASirT,GACf,4CAAkB//d,GAAG,yCAOhCvH,EAAW,+BAAKmqF,UAAU,cAAgB,MAE5CnqF,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,W,qHCzHvF,O,OACA,OACA,QACA,O,IAEA,OAEA,Q,IACA,Q,IACA,Q,IACA,S,IACA,Q,IACA,MACA,S,IACA,Q,IACA,Q,IACA,OACA,S,mDAGA,IAuFMj9D,EAAqB,CACzBw5C,yC,WAGa,IAAAv5C,aAAW,IAAAzkF,UAdF,SAACxzG,GAIvB,MAAO,CACLmI,SAJiBnI,EAAMgR,YAAlB7I,SAKLskY,SAJiBzsY,EAAM0xS,aAAlB+6F,YAY0Cz0M,EAAzB,EA3FD,SAAChlF,GAAU,IAc5B,EAZC7qG,EAAmD6qG,EAAnD7qG,SAAUgwL,EAAyCnlF,EAAzCmlF,QAASs0M,EAAgCz5R,EAAhCy5R,SAAUj7J,EAAsBx+H,EAAtBw+H,mBAFF,GAGV,IAAA3oF,UAAS4jP,GAA1B6iG,GAH2B,qBAK5B9kZ,GAAYiiT,EAASC,WAErBrmE,EAAkB,WACtB70F,EAAmB,CACjBi7J,SAAU6iG,IAEZn3S,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,cAGhBwjY,GAAA,gCAAqB,WAAO7hK,GAAP,+FAEQ,IAAAp9E,+BAA1Bx0O,EAFkB,EAElBA,SAAUpd,EAFQ,EAERA,MAAOkpB,EAFC,EAEDA,MACxB,UAAUghB,mBAAmB,mBAAoB,CAAC9sB,WAAUpd,QAAOkpB,QACjE+nO,OAAQ,GACRggP,aAAc,gBALS,SAQnBjiK,IARmB,UASnBxzM,EAAS,UAAMvwH,WAAW6nS,aAAavgE,YACzC,UAAKr6D,UAAU18C,GAVM,0CAWhB,GAXgB,OAazB+9D,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,aAbK,kDAArB,6CAgBN,OACE,wCACG,SAACygL,EAAiBkhD,GAEjB,IAAM34E,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,eAGxB,CACE8nI,UAAW,kCACXmhB,QAAS,0CACT1wE,QAAS,kBAAMirT,EAAmB7hK,IAClCpjP,aAIJ,OACE,+BAAK8H,UAAU,MACb,+BAAKA,UAAU,WACb,mCAAuB10C,MAAM,2BAA2BizM,SAAS,gCACjE,mCAAwB67B,gBAAiBA,IACxCvkR,EAAW,KACV,+BAAKmqF,UAAU,aACb,+BAAKA,UAAU,yBACb,mCAAqB+zO,gBAAiBA,IACtC,mCAAQ/zO,UAAU,uCACV9H,SAAUA,EACVg6F,QAAS,kBAAMirT,EAAmB7hK,KACxC,4CAAkBl+T,GAAG,uCAK5BvH,EAAW,+BAAKmqF,UAAU,cAAgB,MAE5CnqF,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,c,8ECzF7F,I,IAAA,MACA,O,IACA,M,IACA,QACA,O,IAEA,Q,IACA,SACA,SACA,S,IACA,Q,mDAGA,IAAM66O,EAAyB,SAAC98X,GAAU,IAEjCy5R,EAA2Ez5R,EAA3Ey5R,SAAUx7J,EAAiEj+H,EAAjEi+H,YAAay7C,EAAoD15K,EAApD05K,gBAAiBv7C,EAAmCn+H,EAAnCm+H,WAAYD,EAAuBl+H,EAAvBk+H,cAAe/uN,EAAQ6wF,EAAR7wF,KAEpE4td,EAAkB,SAACzwe,EAAUV,GACjCqyO,EAAY3xO,EAAUV,IAElBg4K,EAAsB,SAACt3K,EAAUy3Z,GACrC,IAAMlgP,GAAe,aAAKkgP,GACpB38R,EAAS,GAEf,OAAQ96H,GACN,IAAK,WACH,IAAKu3K,EAEH,OADAz8C,EAAO39H,KAAK,sCACL29H,EAEmB,IAAxBy8C,EAAa16K,OACfi+H,EAAO39H,KAAK,gCACHo6K,EAAa16K,OAAS,IAC/Bi+H,EAAO39H,KAAK,+BAET,wBAAwBwI,KAAK4xK,IAChCz8C,EAAO39H,KAAK,sCAEd,MAEF,IAAK,UACH,IAAKo6K,EAEH,OADAz8C,EAAO39H,KAAK,qCACL29H,EAET,MAEF,IAAK,aACH,IAAKy8C,EAEH,OADAz8C,EAAO39H,KAAK,sCACL29H,EAET,MAEF,IAAK,WACH,IAAKy8C,EAEH,OADAz8C,EAAO39H,KAAK,sCACL29H,EAET,MAEF,IAAK,UACH,IAAKy8C,EAEH,OADAz8C,EAAO39H,KAAK,qCACL29H,EAET,MAEF,IAAK,MACH,IAAKy8C,EAEH,OADAz8C,EAAO39H,KAAK,iCACL29H,EAKb,OAAOA,GAIH41W,EAAe,EAAA9jK,uBAAuB18T,KAAI,SAAAyge,GAC9C,MAAO,CAACjmd,KAAMimd,EAAarxe,MAAOqxe,MAGpC,OACE,mCAAW39Y,UAAU,wBAClBl2F,OAAOmc,KAAKk0X,GAAUj9X,KAAI,SAAAwnZ,GACzB,MAAiB,YAAbA,EAEA,+BAAK1kU,UAAU,wBAAwBpzF,IAAK83Z,GAC1C,+BAAK1kU,UAAU,cACb,mCACEtnF,KAAM,GACN0jU,YAAavsT,EAAKC,cAAc,CAAC1S,GAAI,wBAA0B,IAC/D+yM,YAAautR,EACbxhK,aAAcwhK,EAAax8d,MAAK,SAAA08d,GAAA,OAAeA,EAAYtxe,QAAU6tY,EAAShjW,YAAYumc,EAAa,GACvGvhK,gBAAiB,SAACrlC,GAAD,OAAgB2mM,EAAgB/4E,EAAU5tH,EAAWxqS,QACtEU,SAAU03Z,EACVtqI,gBAAiBA,EACjB31G,aAAco6D,EACdv6D,oBAAqBA,EACrBg4J,mBAAoB19F,MAM5B,+BAAK5+I,UAAU,wBAAwBpzF,IAAK83Z,GAC1C,mCAAW13Z,SAAU03Z,EACVtqI,gBAAiBA,EACjBL,WAAYogH,EAASuqB,GACrBxkB,cAAeu9F,EACfh5T,aAAco6D,EACdv6D,oBAAqBA,EACrBg4J,mBAAoB19F,EACpBvwH,WAAyB,eAAbq2S,UAQnC84E,EAAuBlmV,UAAY,CACjC8iI,gBAAiB,UAAU5iI,MAG7B,IASMkuC,EAAqB,CACzBi5C,0BACAC,+B,WAGa,IAAAzhF,aACb,IAAAj8C,UAfsB,SAACxzG,GAAU,MACFA,EAAM0xS,aAErC,MAAO,CACL+6F,SAJ+B,EAC1BA,SAILt7J,WAL+B,EAChBA,cAcQn5C,EAAzB,CAA6C83S,K,mHC9I/C,O,OACA,OACA,QACA,O,IAEA,O,IACA,Q,IACA,O,IACA,SAEA,Q,IACA,QACA,S,IACA,Q,IACA,QACA,QACA,QACA,Q,IACA,S,mDAGA,IAsGM93S,EAAqB,CACzBu5C,gCACAC,yC,WAGa,IAAAv5C,aAAW,IAAAzkF,UAfF,SAACxzG,GAIvB,MAAO,CACLmI,SAJiBnI,EAAMgR,YAAlB7I,SAKLsuK,eAJuBz2K,EAAM0xS,aAAxBj7H,kBAa0CuhB,EAAzB,EA3GG,SAAChlF,GAAU,IAgBhC,EAdC7qG,EAAyE6qG,EAAzE7qG,SAAUgwL,EAA+DnlF,EAA/DmlF,QAAS1hB,EAAsDzjE,EAAtDyjE,eAAgB86D,EAAsCv+H,EAAtCu+H,eAAgBC,EAAsBx+H,EAAtBw+H,mBAFpB,GAGd,IAAA3oF,UAAS4tB,GAA1B64T,GAH+B,wBAIJ,IAAAzmV,WAAS,GAJL,qBAI/B0yD,EAJ+B,KAIpBi0L,EAJoB,QAKE,IAAA3mP,UAAS,IALX,qBAK/B0mV,EAL+B,KAKjBC,EALiB,KAOhChlZ,GAAYisF,EAAehlB,SAS3Bg+U,GAAA,gCAAqB,iGACzBjgG,GAAa,GADY,UAEM,IAAAj+O,mBAAkBklB,GAFxB,UAEnBk5T,EAFmB,OAGzBngG,GAAa,IACTmgG,IAAoBA,EAAiBC,aACF,MAAjCD,EAAiBC,aAAwD,MAAjCD,EAAiBC,YALtC,uBAMvBz3S,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,aANG,mBAOhB,GAPgB,cASzBujY,EAAgBG,EAAiB/9U,kBAAoB,KAT5B,mBAUlB,GAVkB,mDAArB,4CAaAqjG,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAAS,WACP2T,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,eAGxB,CACE8nI,UAAW,mCACXmhB,QAAS,0CACT1wE,QAASirT,EACTjlZ,aAIJ,OACE,+BAAK8H,UAAU,MACb,+BAAKA,UAAU,WACb,mCAAuB10C,MAAM,kCAAkCizM,SAAS,uCACxE,mCAA+Br/F,cAAeilB,EACfkgP,eAAgBplL,IAI9Cg+P,EACC,mCAAgBj9Y,UAAU,uGACxB,4CAAkB5iF,GAAG,wCACpB,IAAM6/d,GAEP,KACHpne,EAAW,KACV,+BAAKmqF,UAAU,cACb,+BAAKA,UAAU,mBACb,+BAAKA,UAAU,yBACdnqF,EAAW,KACV,+BAAKmqF,UAAU,yBACb,mCAAqB+zO,gBAzDb,WACtB70F,EAAmB,CACjB/6D,eAAgB64T,IAElBn3S,EAAQ17L,KAAK,EAAAwgB,OAAOgvF,gBAsDN,mCAAQ3Z,UAAW,4EACdipH,EAAY,+BAAiC,IAC1C/wH,SAAUA,EACV4kN,UAAW7zF,EACP,mCAAkBjpH,UAAU,kCAAkCv2E,MAAO,CAAC,MAAS,EAAAq3F,OAAOC,SAEtF,uCACE,4CAAkBF,MAAO,EAAAC,OAAOC,SAGtCmxE,QAASirT,GACf,4CAAkB//d,GAAG,yCAOhCvH,EAAW,+BAAKmqF,UAAU,cAAgB,MAE5CnqF,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,W,mHC5GvF,O,OACA,OACA,OACA,Q,IAEA,O,IACA,OAEA,QACA,Q,IAIA,Q,IAEA,Q,IACA,SACA,QACA,S,IACA,S,IACA,SACA,QACA,QACA,S,mDAGA,IAkJMj9D,EAAqB,CACzB5e,kCACAhkJ,2B,WAGa,IAAA6iK,aACb,IAAAzkF,UA5BsB,SAACxzG,GAAU,MACKA,EAAMgR,YAArCkiG,EAD0B,EAC1BA,kBAAmB/qG,EADO,EACPA,SACnB8B,EAAajK,EAAM8J,UAAnBG,UACAmoJ,EAAmBpyJ,EAAM0xS,aAAzBt/I,gBACAhjJ,EAAYpP,EAAMqN,gBAAlB+B,SAEDqhP,GAAqB,IAAA3vJ,iBAAgB72F,GAAW,GAAM,GACtDkme,EAAyB1/O,EAAmBznP,QAAO,SAACmB,EAAO2D,GAC/D,MAA4B,UAApBA,EAASE,OAAsB7D,EAAQA,EAAQ2D,EAAS+C,WAC/D,GAEH,MAAO,CACLu4G,wBAAyBlW,EAAkB/2G,OAC3CgM,WACA8B,YACAmoJ,kBACA54I,mBAAoBpK,EACpBqhP,qBACA0/O,4BAUuBn4S,EAAzB,EAA6C,cAxJrB,SAAChlF,GAAU,IAc7B,EAgBA,EAUA,EAtCCoW,EAC0EpW,EAD1EoW,wBAAyBjhH,EACiD6qG,EADjD7qG,SAAU8B,EACuC+oG,EADvC/oG,UAAWkuL,EAC4BnlF,EAD5BmlF,QAASm+N,EACmBtjT,EADnBsjT,kBAAmBlkQ,EACAp/C,EADAo/C,gBAAiBgnB,EACjBpmE,EADiBomE,gBAChGhkJ,EAA+E49E,EAA/E59E,YAAa5b,EAAkEw5F,EAAlEx5F,mBAAoB22d,EAA8Cn9X,EAA9Cm9X,uBAAwB1/O,EAAsBz9I,EAAtBy9I,mBAHxB,GAKiB,IAAA5nG,WAAS,GAL1B,qBAK5BunV,EAL4B,KAKRC,EALQ,QAMC,IAAAxnV,WAAS,GANV,qBAM5BwxO,EAN4B,KAMhBtvF,EANgB,KAQ7BulM,GAAe,IAAA7oV,aAAY0oV,GAM3BI,GAAA,gCAA6B,qGAC3BC,EAAkB//O,EAAmBjhP,KAAI,SAAA1B,GAAA,MAAa,CAC1D,YAAeA,EAASC,YAAY1C,UAAUqE,GAC9C,UAAa5B,EAASC,YAAY1C,UAAU6M,UAC5C,IAAOpK,EAASC,YAAY1C,UAAU2+B,KAAOl8B,EAASC,YAAY1C,UAAUmF,kBAC5E,SAAY1C,EAAS+C,aAEhB+4B,EAAUwoH,EAAVxoH,OAP0B,UAQF,IAAAooH,4BAA2Bw+U,EAAiB5mc,GAR1C,cAQ3B2oH,EAR2B,OASjC7yJ,QAAQ4B,IAAI,mBAAoBixJ,GAC5BA,GAAoBA,EAAiBM,SAAWvjJ,MAAMC,QAAQgjJ,EAAiBo+F,WACjFv3E,EAAgB7mB,EAAiBo+F,UAXF,kBAa1Bp+F,EAAiBo+F,UAbS,kDAA7B,4CAgBA8/O,GAAA,gCAAgC,2GACL,IAAAt+U,sBAAqBC,EAAiBnoJ,GADjC,UAC9BsoJ,EAD8B,OAEpC7yJ,QAAQ4B,IAAI,4BAA6BixJ,IACrCjjJ,MAAMC,QAAQgjJ,KAAqBA,EAAiBp2J,OAHpB,uBAIlCi9K,EAAgB7mB,GAJkB,kBAK3BA,GAL2B,gCAO7B,IAP6B,kDAAhC,4CAUAm+U,GAAA,gCAAkC,+FACtC3lM,GAAc,GACViG,EAAkB,IAClBx3R,EAAmBynQ,aAHe,gCAIZwvN,IAJY,OAIpCz/L,EAJoC,kCAK3Bx3R,EAAmBuqD,cALQ,kCAMZwsa,IANY,QAMpCv/L,EANoC,eAQhCz+Q,GAAe,IAAAw+Q,sBAAqB9mS,EAAW+mS,GACrDtxS,QAAQ4B,IAAI,6BAA8BixB,GAC1C6C,EAAY,CAACnrB,UAAWsoB,IACxB89c,GAAsB,GACtBtlM,GAAc,GAZwB,mDAAlC,4CAsBN,IAPA,IAAA1hL,YAAU,WACJ8mX,GAA2BG,IAAiBH,GAC9CO,MAGD,CAACP,IAEA/mX,IAA4BqnI,EAAmBt0P,OAEjD,OACE,+BAAKm2F,UAAU,cACb,8BAAIA,UAAU,oCACZ,4CAAkB5iF,GAAG,6BAM7B,IAAM86E,EAAWimK,EAAmBlrP,OAAM,SAAAuI,GAAA,QAAa,IAAAstF,iBAAgBttF,OAClE2iP,EAAmB/hP,QAAO,SAAAZ,GAAA,OAAY,IAAAstF,iBAAgBttF,MAAWvI,OAAM,SAAAuI,GAAA,OAAaA,EAAS+C,YAE5FokP,EAAsB,CAC1B,CACElhB,UAAW,eACXmhB,QAAS,yBACT1wE,QAtEoB,WACtB2T,EAAQ17L,KAAK,EAAAwgB,OAAOuvF,eAuEpB,CACEunI,UAAW,oCACXmhB,QAAS,0CACT1wE,QAAS8xO,EACT9rU,aAIJ,OACE,+BAAK8H,UAAU,MACb,+BAAKA,UAAU,WACb,mCAAuB10C,MAAM,4BAA4BizM,SAAS,iCAClE,+BAAKv+J,UAAU,WACZ82B,GAA2BgnX,EAAqB,wCAA8B,KAC9E/1G,EAAa,wCAAqB,MAEpClyX,EACC,wCACE,+BAAKmqF,UAAU,eAIjB,kCAAQA,UAAU,gCAChB,+BAAKA,UAAU,wBACb,yCAEF,+BAAKA,UAAU,yBAEb,mCAAQA,UAAU,wDACV9H,SAAUA,EACVg6F,QAAS8xO,GACf,4CAAkB5mZ,GAAG,0CAM9BvH,EAAW,mCAAuB8sP,oBAAqBA,IAAyB,Y,8ECjJvF,W,OACA,O,IAEA,SACA,S,8DA4Be,IAAAzhJ,UAPS,SAACxzG,GAEvB,MAAO,CACLiK,UAFkBjK,EAAM8J,UAAnBG,aAMM,EAzBkB,SAAC+oG,GAAU,IAEnC/oG,EAAa+oG,EAAb/oG,UAED0me,GAAqB,IAAApgM,wBAAuBtmS,GAElD,OACE,wCACG0me,EAAmBnhe,KAAI,SAACxF,EAAU4me,GACjC,OAAK5me,EAASC,UAAU9N,OAGjB,mCAA0B+C,IAAK8K,EAAS7L,KAAOyye,EAAe5me,SAAUA,IAFtE,a,8ECjBjB,I,IAAA,MACA,OACA,O,IACA,M,IAEA,SACA,UACA,U,mDAGA,IAAM6me,EAA2B,SAAC79X,GAAU,IAEnChpG,EAAuBgpG,EAAvBhpG,SAAUC,EAAa+oG,EAAb/oG,UAEX6me,EAAoB9me,EAASC,UAChCuF,KAAI,SAAAk8I,GAAA,OAAczhJ,EAAUuJ,MAAK,SAAA1F,GAAA,OAAYA,EAAS4B,KAAOg8I,QAC7Dh9I,QAAO,SAAAZ,GAAA,OAAYA,KAEfije,GAAgB,IAAAC,kBAAiBF,GAAjCC,aAEP,OACE,+BAAKz+Y,UAAU,cACb,8BAAIA,UAAU,sBACZ,4CAAkB5iF,GAAG,mCADvB,KAC4Dqhe,GAE5D,8BAAIz+Y,UAAU,oBACXw+Y,EAAkBthe,KAAI,SAAA1B,GACrB,OAAO,mCAAqBA,SAAUA,EAAU5O,IAAK4O,EAAS4B,GAAIsyU,cAAc,UAO1F6uJ,EAAyBjnV,UAAY,CACnC5/I,SAAU,UAAUs3C,MAAV,8BAA4Cq/D,Y,WAUzC,IAAAnN,UAPS,SAACxzG,GAEvB,MAAO,CACLiK,UAFkBjK,EAAM8J,UAAnBG,aAMM,CAAyB4me,I,yHC7CxC,I,EAAA,U,oCACA,SA6EA,IA3EO,IAAMI,EAAiBA,EAAjBA,eAAiB,CAC5B,UAAa,CACX3uW,IAAK,EACLC,IAAK,GAEP,QAAS,CACPD,IAAK,EACLC,IAAK,GAEP,WAAY,CACVD,IAAK,EACLC,IAAK,GAEP,UAAW,CACTD,IAAK,EACLC,IAAK,GAEP,WAAY,CACVD,IAAK,EACLC,IAAK,GAEP,WAAY,CACVD,IAAK,EACLC,IAAK,GAEP,WAAY,CACVD,IAAK,EACLC,IAAK,GAEP,YAAa,CACXD,IAAK,EACLC,IAAK,IAEP,YAAa,CACXD,IAAK,GACLC,IAAK,IAEP,YAAa,CACXD,IAAK,GACLC,IAAK,IAEP,YAAa,CACXD,IAAK,GACLC,IAAK,IAEP,YAAa,CACXD,IAAK,GACLC,IAAK,IAEP,YAAa,CACXD,IAAK,GACLC,IAAK,IAEP,YAAa,CACXD,IAAK,GACLC,IAAK,IAEP,aAAc,CACZD,IAAK,GACLC,IAAK,IAEP,eAAgB,CACdD,IAAK,EACLC,IAAK,GAEP,cAAe,CACbD,IAAK,EACLC,IAAK,GAEP,2BAA4B,CAC1BD,IAAK,EACLC,IAAK,IAIAtmI,EAAI,EAAGA,EAAI,GAAIA,IACtBg1e,EAAeh1e,EAAI,SAAW,CAC5BqmI,IAAKrmI,EACLsmI,IAAKtmI,GAQuB+0e,EAAnBA,iBAAmB,SAAC/me,GAE/B,IAAIine,EAAU,KACVC,EAAU,KAEdlne,EAAUtC,MAAK,SAAAmG,GACb,IAAMiiJ,GAAe,IAAAn+I,yBAAwB9D,EAAU,gBACvD,SAAIiiJ,IAAgBkhV,EAAelhV,MACjCmhV,EAAUD,EAAelhV,GAAcztB,IACvC6uW,EAAUF,EAAelhV,GAAcxtB,KAChC,MAKXt4H,EAAUnE,SAAQ,SAAAgI,GAChB,IAAMiiJ,GAAe,IAAAn+I,yBAAwB9D,EAAU,gBACvD,GAAKiiJ,EAAL,CAGA,IAAKkhV,EAAelhV,GAAe,CACjC,IAAMqhV,IAAUrhV,GAAgB,IAAItqJ,MAAM,SAAS,GAC/CuK,OAAOC,UAAUmhe,KACnBH,EAAelhV,GAAgB,CAC7BztB,IAAK8uW,EACL7uW,IAAK6uW,IAIPH,EAAelhV,KACbkhV,EAAelhV,GAAcztB,IAAM4uW,IACrCA,EAAUD,EAAelhV,GAAcztB,KAErC2uW,EAAelhV,GAAcxtB,IAAM4uW,IACrCA,EAAUF,EAAelhV,GAAcxtB,UAK7C,IAAIwuW,EAAe,GAUnB,OALEA,EAHI/ge,OAAOC,UAAUihe,IAAalhe,OAAOC,UAAUkhe,KAAalne,EAAU,GAEjEine,IAAYC,GACN,eAAStte,IAAIqte,EAAS,QAAQ/0d,OAAO,iBAElC,eAAStY,IAAIqte,EAAS,QAAQ/0d,OAAO,gBAAvD,OAA4E,eAAStY,IAAIste,EAAS,QAAQh1d,OAAO,gBAJlGlS,EAAU,GAAG8lJ,aAOvB,CAACmhV,UAASC,UAASJ,kB,kHC1I5B,I,EAAA,O,oCAE0CM,EAA7BA,2BAA6B,CACxCnne,MAAO,UAAUo2G,OACjBniH,KAAM,UAAU+rC,OAChBk8M,KAAM,UAAUl8M,OAChBjgC,UAAW,UAAU22G,QAAQ,UAAU12E,U,8ECNzC,W,OACA,OACA,QAEA,Q,IACA,SACA,QACA,Q,IACA,S,IACA,S,IACA,S,mDAEA,IAuDM8tJ,EAAqB,CACzB1sD,2C,WAGa,IAAA2sD,aACb,IAAAzkF,UA/BsB,SAACxzG,EAAOqvP,GAAa,MAC8DrvP,EAAMqY,YAAxGyZ,EADoC,EACpCA,iBAAkB+vE,EADkB,EAClBA,WAAYvpF,EADM,EACNA,iBAAkB+yH,EADZ,EACYA,yBAA0B7yH,EADtC,EACsCA,qBAC1EmuG,EAAkB3mH,EAAMilV,UAAxBt+N,eACAx+G,EAAYnI,EAAMgR,YAAlB7I,SAEA3G,EAAY6tP,EAAZ7tP,SACD8ve,EAAc3qX,GAAkBruG,GAAsB9W,GAAYA,EAAS+d,UAAY/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAO0uF,QAEzH7J,EAAaxpF,IAAoB,IAAAspG,qBAAoB/f,EAAYrgG,GAEnEkyZ,EAAgB/sS,EAAiBruG,EAAmBg5d,GAAcxvY,EAClE35F,GAAY2pB,GAAoB,KACZ,IAAAmwE,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GACzDrc,OAAS,IACzBu3Z,IAAkBroR,IAItB,MAAO,CACL1kB,iBACA+sS,gBACAvrZ,WACA25F,gBASuBk2F,EAAzB,EA5DkB,SAAChlF,GAAU,IAEtB2T,EAAuD3T,EAAvD2T,eAAgB+sS,EAAuC1gT,EAAvC0gT,cAAevrZ,EAAwB6qG,EAAxB7qG,SAAU25F,EAAckR,EAAdlR,WAEhD,OACE,wCACE,mCAASxP,UAAW,8BACfohU,EAAgB,yBAA2B,KAC3C/sS,EAAiB,uBAAyB,KAE5C7kB,EACC,uCACE,+BAAKxP,UAAW,oBAAsBnqF,EAAW,gCAAkC,qCACjF,wCACCA,EAAW,KACV,wCACE,wCACA,2CAKN,MAELA,EAAW,mCAA0BA,UAAU,IAAU,W,6FCpChE,O,OACA,O,IAEA,Q,IACA,S,IACA,S,IACA,S,IACA,SACA,QAIA,Q,IAKA,S,IACA,S,IACA,SACA,S,mDAEA,IA2IM6vL,EAAqB,CACzB5sD,0DACAU,kDACAuzB,8DACA/zB,2C,WAGa,IAAA93B,UAvBS,SAACxzG,GAAU,MAE7BA,EAAMqY,YADHC,EAD0B,EAC1BA,iBAAkBwZ,EADQ,EACRA,iBAAkBtZ,EADV,EACUA,qBAAsB6yH,EADhC,EACgCA,yBAA0B9hB,EAD1D,EAC0DA,oBAD1D,EAGKvpH,EAAMgR,YAE5C,MAAO,CACLsH,mBACAwZ,mBACAtZ,uBACA6yH,2BACAljI,SAV+B,EAG1BA,SAQLihH,wBAX+B,EAGhBlW,kBAQ4B/2G,OAC3CotH,yBAWoCyuE,EAAzB,EAlJY,SAAChlF,GAAU,IAE7B16F,EAEuC06F,EAFvC16F,iBAAkBwZ,EAEqBkhF,EAFrBlhF,iBAAkBtZ,EAEGw6F,EAFHx6F,qBAAsB6yH,EAEnBr4B,EAFmBq4B,yBAA0BljI,EAE7C6qG,EAF6C7qG,SACzFijI,EAC4Cp4B,EAD5Co4B,4BAA6BU,EACe94B,EADf84B,wBAAyBuzB,EACVrsD,EADUqsD,8BAA+Bj2C,EACzCpW,EADyCoW,wBACrFG,EAA4CvW,EAA5CuW,oBAAqB+hB,EAAuBt4B,EAAvBs4B,qBAEvB,IAAAniB,mCAAkC7wG,EAAkB8wG,EAAyB5wG,IAE7E,IAAA6wG,YAAU,WAKR,GAJIgiB,GACFD,GAA4B,GAG1Bt5G,GAAoB,EAAG,CACzB,IAAMszF,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAI3E,GAFA6mJ,GAA8B,IAAA/1C,2BAA0BlE,EAAe5sG,EAAsBsZ,EAAkB,KAAMy3F,IAExF,IAAzBnE,EAAcjpH,SAAiBqc,EAAqBsZ,GAAmB,CACzE,IAAMM,EAAcgzF,EAAc,GAC5B9gG,GAAe,IAAA69E,gCAA+B/vE,GACpD,IAAK9N,EACH,OAGF,IAAMqoE,GAAW,IAAA+5B,0BAAyBluG,EAAsBsZ,EAAkBxZ,EAAkB8Z,EAAa9N,GAGjH,IAAKqoE,EAASxwF,QAAUmoB,EAAaoyM,kCACnC5qF,mBACGh6G,EAAmB,CAClBM,iBAGJk5G,EAAoBx5G,EAAmB,QAClC,GAAIM,EAAYixF,aAAe/zG,MAAMC,QAAQ6iB,EAAYkxF,mBAA8D,IAAxClxF,EAAYkxF,iBAAiBnnH,OACzF,IAApBwwF,EAASxwF,SACXuD,QAAQ4B,IAAI,uCAAwCqrF,EAAS,IAC7Dm/C,mBACGh6G,EAAmB,CAClBM,cACAzZ,gBAAiBg0E,EAAS,GAAGzpE,KAC7BlV,OAAQsW,EAAatW,OACrBu9I,eAAe,KAGnB8T,GAA8B,IAAA/1C,2BAA0BlE,EAAe5sG,EAAsBsZ,EAAkB66D,EAAS,GAAGzpE,KAAMqmG,UAE9H,GAAIA,GAAuBA,EAAoBptH,OAAQ,CAC5D,IAAMo1e,EAAiBhoX,EAAoB76G,QAAO,SAAA2E,GAChD,OAAOA,EAAMtF,aAAesF,EAAMtF,YAAY1C,UAAU6M,aAAeoM,EAAahB,QAAUgB,EAAaf,aAE7G,GAAIgud,EAAep1e,OAAQ,CACzB,IAAMq1e,EAAmB7kZ,EAASn5E,MAAK,SAAA6T,GACrC,OAAOkqd,EAAe5pe,MAAK,SAAA0L,GACzB,OAAOA,EAAMtF,aACPsF,EAAMtF,YAAY1C,UAAUmF,oBAAsB6W,EAAQnE,KAAK7X,UAAUmF,wBAGnF9Q,QAAQ4B,IAAI,yBAA0Bkwe,GAClCA,GACF1lW,mBACGh6G,EAAmB,CAClBM,cACAzZ,gBAAiB64d,EAAiBtud,KAClClV,OAAQsW,EAAatW,gBAUlC,CAAC8jB,IAEJ,IAAI2/c,GAAiB,EAErB,GAAI3/c,GAAoB,EAAG,CACzB,IAAMszF,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAC3E,GAA6B,IAAzB4sG,EAAcjpH,OAAc,CAC9B,IAAMmoB,GAAe,IAAA69E,gCAA+BijB,EAAc,IAClE,GAAI5sG,EAAqBsZ,IAAqBtZ,EAAqBsZ,GAAkBnZ,gBACnF,OAAIysG,EAAc,GAAGxnE,OAASplC,EAAqBsZ,GAAkBy5H,cAC5D,mCAAiCxgJ,QAASyN,EAAqBsZ,GAAkBnZ,gBAChDyZ,YAAagzF,EAAc,KAE9D,mCAA2Br6G,QAASyN,EAAqBsZ,GAAkBnZ,gBAChDyZ,YAAagzF,EAAc,KACxD,GAAI9gG,GAAgBA,EAAauJ,gBAAkBu3F,EAAc,GAAGxnE,MACzE,OAAO,mCAA2B7yC,QAASuZ,EAAauJ,cACtBuE,YAAagzF,EAAc,UAEtDj9G,IAAai9G,EAAcjpH,QAAU21B,GAAoB,IAClE2/c,GAAiB,GAIrB,OACE,+BAAKn/Y,UAAWnqF,EAAW,GAAK,sBAC9B,8BAAImqF,UAAU,gFACZ,yCAEF,6BAAGA,UAAU,kGACX,yCAEDm/Y,EACC,+BAAKn/Y,UAAU,uBACb,wCACA,mCAA0BnqF,UAAU,KAGtC,kCAAmBmoU,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAyBA,YAAaA,Y,8ECzIlD,W,OACA,O,IACA,M,IAEA,Q,IACA,S,IACA,O,IACA,Q,IACA,S,IACA,Q,IACA,Q,IACA,QACA,QACA,QACA,QACA,QACA,Q,IACA,S,IACA,QACA,Q,IACA,S,IACA,Q,IACA,S,mDAEA,IAAMy1X,EAA4B,SAAC1+X,GAAU,IAEpCjoG,EAAsCioG,EAAtCjoG,QAASqnB,EAA6B4gF,EAA7B5gF,YAAa1U,EAAgBs1F,EAAhBt1F,aAEvB21P,GAAkB,IAAAj3P,oBAAmBrR,GAGrC+oI,KADS,IAAAjxH,oBACYw+E,wBAAwBt2F,EAAQiD,QAAQ,GAE7Di7C,GAAe,IAAA0qD,mBAAkB5oG,EAAS2S,GAE1Co7Y,GAAmB,IAAAtvQ,UAAQ,kBAAM,IAAAz6I,WAAUhE,KAAU,CAACA,IAEtD4me,EAAiBv/c,EAAYq4H,mBAAqB3W,IAAc/oI,EAAQM,UAAUipS,aAExF,OACE,+BAAKhiN,UAAW,uCAAyCrpC,GAAgBA,EAAa9sD,OAAS,uCAAyC,KACtI,mCAAkB2oB,WAAY/Z,IAC7BsoQ,EACC,wCAEA,wCACE,+BAAK/gL,UAAU,YACb,8BAAIA,UAAU,kBAAiB,mCAAavnF,QAASA,EAAS+U,mBAAmB,MAEnF,6BAAGwyE,UAAU,6BACX,mCAAgB+N,YAAat1F,IAC7B,mCAAuBs1F,YAAat1F,KAEtC,+BAAKunF,UAAU,mCACb,mCAAoBvnF,QAASA,EAAS+oQ,WAAY,MAEpD,+BAAKxhL,UAAU,qBACb,+BAAKA,UAAU,4BACZlgE,EAAYq4H,mBAAsB3W,GAAc/oI,EAAQM,UAAUipS,aAIrB,KAH1C,mCAAsB9pN,UAAWsuU,EACX/kF,WAAW,EACXhpU,QAASA,EACT0yG,UAAU,IACpC,mCAAsBpd,YAAat1F,IACnC,mCAAwBg6U,cAAeh6U,EAAS+jS,QAAQ,EAAMx8M,UAAU,MAEzEq/Y,EACG,mCAAsBnnZ,UAAWsuU,EAAkB/tZ,QAASA,EAAS0yG,UAAU,IAAU,0CAIlG1yG,EAAQugF,yBAA2B,wCAAiC,KACrE,+BAAKgH,UAAU,+BACb,mCAAoBmrB,UAAU,EACV5vF,cAAe9iB,EACfqnB,YAAaA,IAChCu/c,EAAiB,wCAAgC,MAEpD,mCAAqBl0X,UAAU,EACV5vF,cAAe9iB,EACfqnB,YAAaA,MAMxCs/c,EAA0B9nV,UAAY,CACpC7+I,QAAS,UAAUu2C,MAAV,oBACTlvB,YAAa,UAAUkvB,MAAV,yB,WAcA,IAAAkyD,UAXS,SAACxzG,GAAU,MACgBA,EAAMqY,YAGvD,MAAO,CACLyZ,iBAL+B,EAC1BA,iBAKLtZ,qBAN+B,EACRA,qBAMvBkF,aALqB1d,EAAMyc,YAAtBiB,gBASM,CAAyBg0d,I,+ECtGxC,W,OACA,O,IACA,M,IAEA,S,IACA,Q,IACA,QACA,QACA,QACA,QACA,QACA,Q,IACA,Q,IACA,S,IACA,S,IACA,Q,mDAEA,IAAME,EAAkC,SAAC5+X,GAAU,IAE1CjoG,EAAsCioG,EAAtCjoG,QAASqnB,EAA6B4gF,EAA7B5gF,YAAa1U,EAAgBs1F,EAAhBt1F,aAEvB21P,GAAkB,IAAAj3P,oBAAmBrR,GAErCk+C,GAAe,IAAA0qD,mBAAkB5oG,EAAS2S,GAE1Co7Y,GAAmB,IAAAtvQ,UAAQ,kBAAM,IAAAz6I,WAAUhE,KAAU,CAACA,IAE5D,OACE,+BAAKunF,UAAW,uCAAyCrpC,GAAgBA,EAAa9sD,OAAS,uCAAyC,KACtI,mCAAkB2oB,WAAY/Z,IAC7BsoQ,EACC,wCAEA,wCACE,8BAAI/gL,UAAU,gFACZ,yCAEF,6BAAGA,UAAU,kGACX,0CAIN,+BAAKA,UAAU,+BACb,mCAAoBmrB,UAAU,EACV5vF,cAAe9iB,EACfqnB,YAAaA,IAChCA,EAAYq4H,oBAAsB1/I,EAAQM,UAAUipS,aACjD,mCAAsB9pN,UAAWsuU,EAAkB/tZ,QAASA,EAAS0yG,UAAU,IAC/E,MAEN,mCAAqBA,UAAU,EACV5vF,cAAe9iB,EACfqnB,YAAaA,MAMxCw/c,EAAgChoV,UAAY,CAC1C7+I,QAAS,UAAUu2C,MAAV,oBACTlvB,YAAa,UAAUkvB,MAAV,yB,WAcA,IAAAkyD,UAXS,SAACxzG,GAAU,MACgBA,EAAMqY,YAGvD,MAAO,CACLyZ,iBAL+B,EAC1BA,iBAKLtZ,qBAN+B,EACRA,qBAMvBkF,aALqB1d,EAAMyc,YAAtBiB,gBASM,CAAyBk0d,I,8EC1ExC,I,IAAA,MACA,OACA,Q,IAEA,SACA,Q,IAKA,S,IACA,M,IACA,S,mDAEA,IAAMC,EAAoB,SAAC7+X,GAAU,IAE5B16F,EAAqE06F,EAArE16F,iBAAkBmoK,EAAmDztE,EAAnDytE,WAAYjoK,EAAuCw6F,EAAvCx6F,qBAAsBu6T,EAAiB//N,EAAjB+/N,cAE3D,IAAKz6T,EACH,OAAO,KAGT,IAAM8sG,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBmoK,EAAWhoK,UAAWD,GAC/E,OAAK4sG,EAAcjpH,QAIf,IAAAutH,sCAAqCtE,GAChCA,EAAc51G,KAAI,SAAA6wP,GACvB,IAAM/7O,GAAe,IAAA69E,gCAA+Bk+J,GACpD,OAAO,mCAAwBnhQ,IAAKmhQ,EAAa3wP,GAAI0iB,YAAaiuO,EAAc/7O,aAAcA,OAIhE,WAA9B8gG,EAAc,GAAGljB,SACZ,mCAA0B9vE,YAAagzF,EAAc,KAKvD,mCAAuBhzF,YAAagzF,EAAc,GAAIi+G,gBAAiB5iD,EAAWhoK,UAAWs6T,cAAeA,IAhB1G,MAmBX8+J,EAAkBC,WAAa,CAC7BrxT,WAAY,UAAUphL,OAAOshH,WAC7BoyN,cAAe,UAAUzyN,Q,WAeZ,IAAA23E,aACb,IAAAzkF,UAbsB,SAACxzG,GAAU,MACkCA,EAAMqY,YACzE,MAAO,CACLC,iBAH+B,EAC1BA,iBAGLwZ,iBAJ+B,EACRA,iBAIvBtZ,qBAL+B,EACUA,wBAQlB,GAIzB,CAA6Cq5d,K,uHC7D/C,MACA,O,IACA,M,IAEA,QAEA,QACA,Q,IACA,QACA,QACA,Q,WACA,QACA,QACA,QACA,QACA,QACA,Q,mDAGA,IAAME,EAAyB,SAAC/+X,GAAU,IASlC,EAPC5gF,EACW4gF,EADX5gF,YAAaN,EACFkhF,EADElhF,iBAAkBg6G,EACpB94B,EADoB84B,wBAAyBtzH,EAC7Cw6F,EAD6Cx6F,qBAAsB8L,EACnE0uF,EADmE1uF,aACnF4+C,EAAgB8vC,EAAhB9vC,aACKupD,EAAoCr6F,EAApCq6F,eAAgB49B,EAAoBj4H,EAApBi4H,iBAEjBwW,EAAWroJ,EAAqBsZ,IAAqBtZ,EAAqBsZ,GAAkBM,aAC7F5Z,EAAqBsZ,GAAkBM,YAAY1iB,KAAO0iB,EAAY1iB,GAErEglY,GAAA,gCAAkB,WAAOnlG,GAAP,sFACtB,UAAU1mQ,eAAe,EAAAwB,6BAA6BoG,iBAAmB,UAAUxG,sBAAsB7X,EAAYla,aAEjHq3R,IAHkB,0CAIb,GAJa,YAOhBjrR,GAAe,IAAA69E,gCAA+B/vE,KAE/B9N,EAAaw1E,oBATZ,uBAUpB,IAAAxrE,gBAVoB,UAWd,IAAA+rE,6BAA4B/1E,GAXd,QAYpB,IAAA01E,iBAZoB,OAelB11E,GAAgBA,EAAauJ,gBACH,gBAAxBvJ,EAAatW,QAA4BokB,EAAYi2F,kBACpDj2F,EAAYi2F,iBAAiBxmH,SAAS,YAAcyiB,EAAalc,YAAYsuG,cAC1E9zF,GAAS,IAAAC,oBACT8pE,EAAW/pE,EAAOo9E,sBAAsB,CAAC98E,KAAMoB,KAC/C0td,EAAerlZ,EAASn5E,MAAK,SAAA6T,GAAA,OAAW/X,MAAMC,QAAQ8X,EAAQnE,KAAK1I,SAAb,YAAuC6M,EAAQnE,KAAK1I,SAAb,UAAmC3Y,SAAS,WAE7I,IAAAmsF,iBAAgBgkZ,EAAa9ud,OAE7B,IAAA8qE,iBAAgB1pE,EAAauJ,iBAGjC,IAAAmgE,iBAAgB1pE,EAAauJ,gBAG/Bi+G,mBACGh6G,EAAmB,CAClBM,cACApkB,OAAQsW,EAAeA,EAAatW,OAAS,MAjC3B,mDAAlB,6CAsCN,OACE,wCACG,SAACuhS,GAAD,OACC,8BAAIj9M,UAAW,+BAAiCpvB,GAAgB29F,EAAW,sBAAwB,IAC/F2jB,QAAS,kBAAMkwN,EAAgBnlG,KACjC,+BAAKj9M,UAAU,yBACZuuE,EACC,+BAAKvuE,UAAU,yBACb,mCAAW/nC,SAAS,WAEpB,KACHkiE,GAAkB49B,EACjB,+BAAK/3D,UAAU,oBAAoBv2E,MAAO,CACxC22Y,mBAAmBjmS,GAAkB49B,GAArC,kCAEA,MACF59B,IAAmB49B,GAAoB/lI,GAAgBA,EAAauJ,cACpE,mCAAkB9iB,QAASuZ,EAAauJ,cACtBlP,YAAa2F,EAAauJ,cAAcxiB,UAAUqE,KAClE,MAEN,+BAAK4iF,UAAU,qDACb,gCAAMA,UAAU,4BACblgE,EAAYi2F,kBAAoBj2F,EAAYwrB,OAASxrB,EAAYla,WAEnEka,EAAYg4H,uBACX,6BAAG93D,UAAU,mCAAmClgE,EAAYg4H,wBAC1D,WAQhB2nV,EAAuBnoV,UAAY,CACjCx3H,YAAa,UAAUkvB,MAAV,wBACbh9B,aAAc,UAAUg9B,MAAV,0BAGhB,IAcM02I,EAAqB,CACzBlsD,mD,WAGa,IAAAt4B,UAlBS,SAACxzG,GAAU,IAC1BkjE,EAAgBljE,EAAM0zG,UAAtBxwC,aAD0B,EAEgBljE,EAAMqY,YAGvD,MAAO,CACLyZ,iBAN+B,EAE1BA,iBAKLtZ,qBAP+B,EAERA,qBAMvB0qD,eAEAxlD,aAPqB1d,EAAMyc,YAAtBiB,gBAe+Bs6K,EAAzB,CAA6C+5S,I,mHC5H5D,O,OACA,OACA,O,IACA,MAEA,QACA,QACA,QACA,QACA,QACA,QACA,S,IACA,Q,IACA,S,IACA,SACA,Q,IACA,S,IACA,Q,IACA,Q,IACA,QACA,Q,IACA,S,mDAGA,IAAME,EAAwB,SAACj/X,GAAU,IAEhC5gF,EAA+G4gF,EAA/G5gF,YAAajQ,EAAkG6wF,EAAlG7wF,KAAMtC,EAA4FmzF,EAA5FnzF,eAAgBqjD,EAA4E8vC,EAA5E9vC,aAAc6vQ,EAA8D//N,EAA9D+/N,cAAe5qU,EAA+C6qG,EAA/C7qG,SAAUwkF,EAAqCqmB,EAArCrmB,SAAUy8B,EAA2BpW,EAA3BoW,wBAFpD,GAI2B,IAAAy/B,WAAS,GAJpC,qBAIhC43J,EAJgC,KAILyxL,EAJK,KAMjC5td,GAAe,IAAA69E,gCAA+B/vE,GAG9C82H,GAAiB,IAAAD,oBAAmB3kI,EAAc8kG,GAExD,IAAK9kG,EACH,OAAO,KAGT,IAAK4kI,EACH,OAAO,mCAAyB5kI,aAAcA,EAAcyuT,cAAeA,IAO7E,IAAM,EAAAC,GAAA,gCAAkB,WAAOgU,GAAP,2EAClB1iU,EAAaoyM,oCAAsC,IAAApjC,0BAAyB0zJ,GAD1D,wDAItBkrJ,GAA6B,GAJP,UAKhB,IAAAn4Y,+BAA8Bz1E,GALd,uBAMhB,IAAIxmB,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAN3B,OAQtB+C,SAASg9F,cAAc,2BAA2B6wE,UAAYq4K,EAAar4K,UAAY,GACvFujU,GAA6B,GATP,kDAAlB,6CAYN,OACE,wCACG,EAAA5ue,mBACC,+BAAKgvF,UAAU,uDACb,gCAAMA,UAAU,8BACd,4CAAkB5iF,GAAG,mBADvB,KAC2C,IAAA8T,qBAAoBc,EAAcnC,EAAMtC,KAIrF,8BAAIyyE,UAAU,qBACXlgE,EAAYu4H,aACX,wCACE,4CAAkBj7I,GAAG,mBADvB,KAC2C,IAAA8T,qBAAoBc,EAAcnC,EAAMtC,KAKzF,+BAAKyyE,UAAW,iCAAmCpvB,GAChDypB,EAASxwF,OACR,kCAAmBm0U,SAAnB,MACG,SAACr0N,GAAD,OACC,wCACG,SAACszL,GAAD,OACC,wCACG,SAAC51M,GAAD,OACC,EAAAr2F,mBACI,mCAAsBu/S,WAAYl2N,EACZsvB,YAAaA,EACbszL,qBAAsBA,EACtB51M,mBAAoBA,EACpB8jB,UAAU,EACVrrF,YAAaA,EACb4gT,gBAAiBA,IAEvC,wCACE,mCAAwBrmP,SAAUA,IAClC,mCAAqBomP,cAAeA,EACf92N,YAAaA,EACbszL,qBAAsBA,EACtB51M,mBAAoBA,EACpBkpN,WAAYl2N,EACZxkF,SAAUA,EACVs1G,UAAU,EACVrrF,YAAaA,EACb4gT,gBAAiBA,EACjB9vQ,aAAcA,cASnD,MAELu9O,EAA4B,wCAAsB,OAKzDwxL,EAAsBroV,UAAY,CAChCx3H,YAAa,UAAUkvB,MAAV,wBAAsCq/D,WACnD0iH,gBAAiB,UAAU/iH,OAAOK,WAClCoyN,cAAe,UAAUzyN,QAG3B,IA4CM03E,EAAqB,CACzBjxH,+C,WAGa,IAAA0oF,aACb,IAAAj8C,UAjDsB,SAACxzG,EAAOqvP,GAAa,MACiDrvP,EAAM0zG,UAA3FxwC,EADoC,EACpCA,aAAcylP,EADsB,EACtBA,gBAAiB7kP,EADK,EACLA,kBAAmBF,EADd,EACcA,gCADd,EAEwB5jE,EAAMqY,YAAlEG,EAFoC,EAEpCA,qBAAsBF,EAFc,EAEdA,iBAAkBwZ,EAFJ,EAEIA,iBAFJ,EAGH9xB,EAAMyc,YAAvCiB,EAHoC,EAGpCA,aAAcsI,EAHsB,EAGtBA,gBACd84I,EAA0B9+J,EAAMk4L,WAAhCp5B,uBAJoC,EAKL9+J,EAAMgR,YAArC7I,EALoC,EAKpCA,SAAU+qG,EAL0B,EAK1BA,kBACVyT,EAAkB3mH,EAAMilV,UAAxBt+N,eAEAv0F,EAAgCi9N,EAAhCj9N,YAAaixM,EAAmBgsB,EAAnBhsB,gBACd/+M,GAAe,IAAA69E,gCAA+B/vE,GAGhDu6D,EAAY76D,IAAqBuxM,GACjC,IAAA38G,0BAAyBluG,EAAsB6qN,EAAiB/qN,EAAkB8Z,EAAa9N,EAC/F5G,EAAcohJ,EAAwB94I,EAAiB2gG,GAAgB,GACvE,GAEJh6B,GAAW,IAAAqjD,yCAAwCrjD,EAAUjvE,GAC7D,IAAMy0d,EAAuE,iBAApCvua,EAKzC,GAHA+oB,EAAWroE,GACP,IAAA8qH,mBAAkBziD,EAAWroE,EAAauJ,cAAevJ,EAAatW,OAAQsW,GAAc,GAAM,IAClG,IAAA8qH,mBAAkBziD,EAAW,KAAM,GAAI,MAAM,GAAM,GACnDwlZ,GAA6Brua,EAAmB,CAClD,IAAMwiR,EAAwB35P,EAAStoE,WAAU,SAAAgD,GAAA,OAAWA,EAAQnE,KAAK7X,UAAUmF,oBAAsBszD,EAAkBz4D,UAAUmF,qBACrI,GAAI81U,GAAyB,GAAKA,IAA0B1iR,EAAiC,OACZ,CAAC+oB,EAAS/oB,GAAkC+oB,EAAS25P,IAAnI35P,EAAS25P,GADiF,KACzD35P,EAAS/oB,GADgD,MAK/F,MAAO,CACL/jD,eAAgB7f,EAAMqN,gBACtB61D,eAIAylP,kBACAxgT,WAEAwkF,WACAy8B,wBAAyBlW,EAAkB/2G,UASpB67L,EAAzB,CAA6Ci6S,K,8EC/K/C,I,EAAA,OACA,OACA,QACA,QACA,QACA,O,oCACA,QAGA,IAAMG,EAAyB,SAACp/X,GAAU,IAEjCnzF,EACgBmzF,EADhBnzF,eAAgB8sE,EACAqmB,EADArmB,SAAU7vE,EACVk2F,EADUl2F,uBAAwB0qD,EAClCwrC,EADkCxrC,mBAAoBD,EACtDyrC,EADsDzrC,sBAC3EzC,EAAqBkuC,EAArBluC,kBAoBF,OAjBA,IAAAukD,YAAU,WACR,MAAK18B,IAAaA,EAASxwF,SAAW0jB,EAAezQ,SAASk2B,aAAekiC,EAAmB0oQ,UAC3F1oQ,EAAmBvvC,SACnBnb,GAA2BgoD,GAAsBA,IAAsB,EAAA1gC,cAAcE,OAF1F,CAKA,IAAMkiT,EAAmB75P,EAAStoE,WAAU,SAAAgD,GAAA,OAAW,IAAAjL,oBAAmBiL,EAAQnE,SAC5EujU,EAAqB95P,EAAStoE,WAAU,SAAAgD,GAAA,QAAY,IAAAjL,oBAAmBiL,EAAQnE,SACrFqkD,EAAsB,CACpBtvC,SAAS,EACTyuT,UAAU,EACVF,mBACAC,0BAED,CAAC95P,EAAU9sE,EAAgB/C,EAAwB0qD,EAAoBD,EACxEzC,IAEK,MAITsta,EAAuBxoV,UAAY,CACjCj9D,SAAU,UAAUi0B,QAAQ,UAAUt/D,MAAV,qBAAmCq/D,YAGjE,IAaMq3E,EAAqB,CACzBzwH,+C,WAGa,IAAAisC,UAjBS,SAACxzG,GAAU,MACeA,EAAM0zG,UAA/C5uC,EAD0B,EAC1BA,kBAAmB0C,EADO,EACPA,mBADO,EAEKxnE,EAAMgR,YAArC7I,EAF0B,EAE1BA,SAAU+qG,EAFgB,EAEhBA,kBAEjB,MAAO,CACLrzF,eAAgB7f,EAAMqN,gBACtBlF,WACAihH,wBAAyBlW,EAAkB/2G,OAC3CqrE,qBACA1C,uBAQoCkzH,EAAzB,CAA6Co6S,I,8ECzD5D,W,OACA,OACA,O,IAEA,MACA,Q,IACA,SACA,QACA,Q,mDAGA,IAAMC,EAA2B,SAACr/X,GAAU,IAEnC5gF,EAAgE4gF,EAAhE5gF,YAAa8wC,EAAmD8vC,EAAnD9vC,aAAc6jH,EAAqC/zE,EAArC+zE,gBAAiBzuK,EAAoB06F,EAApB16F,iBACnD5Y,QAAQ4B,IAAI,cAAe8wB,GAE3B,IAAM3U,EAAcspK,EAAgBvzK,MAAK,SAAAmK,GAAA,OAASA,EAAMxf,OAASi0B,EAAYla,aAC7E,IAAKuF,EACH,OAAO,KAGT,IAAMwpG,GAAoB,IAAA5B,8BAA6BjzF,EAAa9Z,GACpE,IAAK2uG,EACH,OAAO,KAGT,IAAM3iG,GAAe,IAAA69E,gCAA+B8kB,GACpD,IAAK3iG,EACH,OAAO,KAGT5kB,QAAQ4B,IAAI,sBAAuBgjB,GAEnC,IAAIhH,EAAeG,EAAYI,OAK/B,OAJIvO,MAAMC,QAAQ6iB,EAAY+3H,mBAC5B7sI,EAAeA,EAAa5O,QAAO,SAAAmZ,GAAA,OAAWuK,EAAY+3H,gBAAgBtoJ,SAASgmB,EAAOnY,QAI1F,wCACG,EAAApM,mBACC,+BAAKgvF,UAAU,yBACb,gCAAMA,UAAU,8BACd,4CAAkB5iF,GAAG,mBADvB,IAC2C+N,EAAYtf,OAIzD,8BAAIm0F,UAAU,qBACZ,4CAAkB5iF,GAAG,mBADvB,IAC2C+N,EAAYtf,MAGzD,+BAAKm0F,UAAW,iCAAmCpvB,GAChD5lD,EAAa9N,KAAI,SAAAoO,GAChB,OAAO,mCAA6B0G,aAAcA,EACd7G,YAAaA,EACbG,YAAaA,EACbwU,YAAaA,EACblzB,IAAK0e,EAAYlO,WAO/D2ie,EAAyBzoV,UAAY,CACnCx3H,YAAa,UAAUkvB,MAAV,wBAAsCq/D,Y,WAoBtC,IAAA8uC,aACb,IAAAj8C,UAlBsB,SAACxzG,GAAU,IAC1BkjE,EAAgBljE,EAAM0zG,UAAtBxwC,aAD0B,EAEOljE,EAAMyc,YAAvCuJ,EAF0B,EAE1BA,gBAAiBtI,EAFS,EAETA,aACjBpF,EAAoBtY,EAAMqY,YAA1BC,iBAEP,MAAO,CACLuH,eAAgB7f,EAAMqN,gBACtB61D,eACAl9C,kBACA+gK,gBAAiBrpK,EACjBpF,sBAIuB,GAIzB,CAA6C+5d,K,iGCtF/C,MACA,O,IACA,MACA,Q,IAEA,Q,IAEA,OACA,QACA,Q,IACA,QACA,QACA,QACA,QACA,Q,WACA,QACA,QACA,QACA,QACA,QACA,S,mDAEA,IAAMC,EAA8B,SAACt/X,GAAU,IAEtCp1F,EACgGo1F,EADhGp1F,YAAaH,EACmFu1F,EADnFv1F,YAAa2U,EACsE4gF,EADtE5gF,YAAa9N,EACyD0uF,EADzD1uF,aAAc4+C,EAC2C8vC,EAD3C9vC,aAAcvoC,EAC6Bq4E,EAD7Br4E,kBAAmBxyB,EACU6qG,EADV7qG,SAAUypB,EACAohF,EADAphF,UACrGnM,EAAqGutF,EAArGvtF,iBAAkBkK,EAAmFqjF,EAAnFrjF,eAAgBnX,EAAmEw6F,EAAnEx6F,qBAAsBsZ,EAA6CkhF,EAA7ClhF,iBAAkBg6G,EAA2B94B,EAA3B84B,wBA8CrEhqD,GAAU,IAAAkkC,kCAAiCpoG,EAAaH,GAAxDqkE,OAED++E,EAAWroJ,EAAqBsZ,IAAqBtZ,EAAqBsZ,GAAkBk1F,gBAC5FxuG,EAAqBsZ,GAAkBk1F,eAAet3G,KAAOkO,EAAYlO,GAE/E,OACE,kCAAmB4gU,SAAnB,MACG,SAACr0N,GAAD,OACC,wCACG,SAACszL,GAAD,OACC,8BAAIj9M,UAAW,+BAAiCpvB,GAAgB29F,EAAW,sBAAwB,IAC/F2jB,QAAS,kBAtDC,SAACvoE,EAAaszL,GAChC,UAAOhnS,aACT7I,QAAQ4B,IAAI,cAAesc,GAE7B,IAAM2yP,EAAiB,EAAAlmO,6BAA6BsG,qBAAuB,UAAU1G,sBAAsBrsB,EAAYmmF,aACvH,UAAUl7D,eAAe0nO,GAEzB,IAAI77C,GAAc,IAAA7uG,8BAA6BvhG,EAAc,CAAC,CAC5DiT,SAAU3Z,EAAYlO,GACtB+kF,cAAeh3E,EAAY/N,MAE7B,GAAI6/R,IACF,OAAO,EAGTzjK,mBACGh6G,EAAmB,CAClBM,cACA40F,eAAgBppG,KAIpB,IAAMgF,GAAS,IAAAC,oBACf,GAAI6xM,KACF,IAAA1mI,iBAAgB0mI,IAChB,IAAAl6H,sBAAqBk6H,EAAa9iM,EAAWnM,GAM7CkV,IACIshF,GAAeA,EAAYC,SAAWD,EAAYC,QAAQC,YAAc,EAAAn1E,gBAAgBnlC,SAAS6yN,EAAY1mN,SAAS,CACxH,IAAMsvG,GAAe,IAAAE,kBAAiBk3G,GAAa,KAAS,IAAAh3G,iBAAgBp5F,GAAgBowM,EAAYtsN,YAAassN,EAAaz4G,EAAYC,QAAQ1vD,QAChJ9S,GAAS,IAAA0/D,gBAAekE,EAAcrB,EAAYC,QAAQ1vD,OAAQrkD,GACpEuxC,IACFuiE,EAAYC,QAAQC,UAAUC,aAAa1iE,EAAQ,GAAG,EAAO92B,EAAOy+E,wBAAwBqzH,EAAY1mN,SACxG2hB,EAAessF,EAAYC,QAAQC,UAAUq2C,QAAQiiE,iBAiBhC89Q,CAAgBt2X,EAAaszL,KAC9C,+BAAKj9M,UAAU,yBACZuuE,EACC,+BAAKvuE,UAAU,yBACb,mCAAW/nC,SAAS,WAEpB,KACJ,+BAAK+nC,UAAU,oBAAoBv2E,MAAO+lE,KAE5C,+BAAKwQ,UAAU,qDACb,gCAAMA,UAAU,4BACb10E,EAAYmmF,sBAW/BuuY,EAA4B1oV,UAAY,CACtChsI,YAAa,UAAU0jC,MAAV,wBACb7jC,YAAa,UAAU6jC,MAAV,wBACbh9B,aAAc,UAAUg9B,MAAV,yBACdlvB,YAAa,UAAUkvB,MAAV,yBAGf,IAmBM02I,EAAqB,CACzBr9J,sCACA/I,sBACAjC,gCACAm8G,mD,WAGa,IAAAmsD,aACb,IAAAzkF,UA3BsB,SAACxzG,GAAU,IAC1BkjE,EAAgBljE,EAAM0zG,UAAtBxwC,aACA/6D,EAAYnI,EAAMgR,YAAlB7I,SAF0B,EAGcnI,EAAMouB,wBAA9Ca,EAH0B,EAG1BA,aAAcH,EAHY,EAGZA,UAAWc,EAHC,EAGDA,YACzBnK,EAAoBzlB,EAAMgsL,QAA1BvmK,iBAJ0B,EAKgBzlB,EAAMqY,YAEvD,MAAO,CACL6qD,eACA/6D,WACA8mB,eACAH,YACArJ,mBACAmK,cACApX,qBAd+B,EAK1BA,qBAULsZ,iBAf+B,EAKJA,oBAsBJkmK,EAAzB,CAA6Cs6S,K,mHC1I/C,O,OACA,OACA,QAEA,U,IAEA,S,IACA,QACA,S,IACA,OACA,QACA,Q,mDAIA,IA6EMt6S,EAAqB,CACzBvO,oBAjFF,OAiFEA,qB,WAGa,IAAAwO,aACb,IAAAzkF,UAdsB,SAACxzG,GAAU,MACaA,EAAMgR,YAA7CkiG,EAD0B,EAC1BA,kBAAmBw2E,EADO,EACPA,iBAE1B,MAAO,CACLtgE,wBAAyBlW,EAAkB/2G,OAC3CutL,sBASuBsO,EAAzB,EAlFsB,SAAChlF,GAAU,IAS3B,EAPCy2E,EAAyCz2E,EAAzCy2E,oBAAqBC,EAAoB12E,EAApB02E,iBAErBuvO,GAAoB,IAAA31I,kBAApB21I,iBACA/1I,EAAyC+1I,EAAzC/1I,mBAAoBC,EAAqB81I,EAArB91I,kBALM,GAMH,IAAAt6H,UAAS,MANN,qBAM1B99I,EAN0B,KAMjByne,EANiB,QAOiB,IAAA3pV,WAAS,GAP1B,qBAO1B4pV,EAP0B,KAOPC,EAPO,KAS3BC,GAAA,gCAAa,mGACZxvN,EADY,oDAIbyvN,GAAiB,IAAAh5E,mBAAkB12I,EAAoBC,GAJ1C,kCAMQ,IAAAn6J,eAAc,KAAM,CAACm6J,IAN7B,YAMTt5K,EANS,UAOCA,EAASluG,KAPV,qBAQPinB,GAAS,IAAAC,qBACRqmG,gBAAgBrf,EAASluG,MAChCi3e,GAAiB,IAAAh5E,mBAAkB12I,EAAoBC,GAV1C,mCAYe,IAAAn6J,eAAc,KAAM,CAACm6J,IAAoB,GAZxD,SAYL0vN,EAZK,SAaQA,EAAYl3e,OAC7BinB,EAAOsmG,gBAAgB2pX,EAAYl3e,MACnCi3e,GAAiB,IAAAh5E,mBAAkB12I,EAAoBC,GAAmB,IAfjE,QAoBjBuvN,GAAqB,GACjBE,GACFJ,EAAWI,GAtBI,mDAAb,4CAkCN,OARA,IAAAvpX,YAAU,WACHqgE,GACHD,GAAoB,GAEtBkpT,MAEC,CAACxvN,EAAmBD,IAElBC,EAKAp4Q,EAcH,wCACG,SAAC4uF,GAAD,OAAwB,mCAAa5uF,QAASA,EAAS4uF,mBAAoBA,OAdzE84Y,EAGE,gFAFE,mCAAiB9oV,aAAa,IANhC,U,8EC3DX,W,WACA,MACA,OACA,O,IAEA,S,IACA,O,IACA,Q,IACA,SACA,Q,IACA,S,IACA,S,IACA,S,IACA,SACA,QACA,QACA,Q,IAEA,S,IACA,S,IACA,S,IACA,SACA,S,IACA,S,mDAKA,IAAMmpV,EAAc,SAAC9/X,GAAU,IAEtBjoG,EAAkDioG,EAAlDjoG,QAAS4uF,EAAyCqZ,EAAzCrZ,mBAAoBh/D,EAAqBq4E,EAArBr4E,kBAE7Bu+X,GAAuB,IAAA51I,kBAAvB41I,oBAcP,OAZA,IAAA7vS,YAAU,YACR,IAAAr7B,iBAAgBjjF,IAChB,IAAAyvF,sBAAqBzvF,GACrB4uF,EAAmB5uF,GACnB4vB,IACAu+X,GAAoB,IAAA11I,mBAAkB,CAACJ,sBAAuBr4Q,OAE7D,CAACA,IAMF,+BAAKunF,UAAU,QACb,+BAAKA,UAAU,2DACb,+BAAKA,UAAU,sBACb,mCAA4BvnF,QAASA,IACrC,mCAAkBA,QAASA,IAC3B,+BAAKunF,UAAU,8BACb,mCAA4BvnF,QAASA,IACrC,mCAAyBA,QAASA,MAGtC,+BAAKunF,UAAU,sBACb,8BAAIA,UAAU,uBACZ,mCAAavnF,QAASA,KAExB,mCAAkBA,QAASA,IAC3B,mCAAqBA,QAASA,IAC9B,mCAAoBA,QAASA,IAE7B,+BAAKunF,UAAU,6BACb,8BAAIA,UAAU,2BACZ,4CAAkB5iF,GAAG,2BAEvB,mCAAgC3E,QAASA,IACzC,yCAEF,+BAAKunF,UAAU,6BACb,8BAAIA,UAAU,2BACZ,4CAAkB5iF,GAAG,8BAEvB,+BAAK4iF,UAAU,kCACb,mCAAoBvnF,QAASA,MAGjC,+BAAKunF,UAAU,6BACb,8BAAIA,UAAU,2BACZ,4CAAkB5iF,GAAG,2BAEvB,+BAAK4iF,UAAU,kCACb,mCAAuBvnF,QAASA,MAGpC,mCAAsBA,QAASA,QAWnCitL,EAAqB,CACzBr9J,uCAGFm4c,EAAYlpV,UAAY,CACtB7+I,QAAS,UAAUu2C,MAAV,qB,WAGI,IAAAkyD,UAZS,WACtB,MAAO,KAW+BwkF,EAAzB,CAA6C86S,I,wGC3G5D,O,WACA,OACA,SACA,QACA,Q,IACA,S,6DAGyB,SAAC9/X,GAAU,IAE3BjoG,EAAWioG,EAAXjoG,QAF2B,GAIA,IAAA89I,WAAS,GAJT,qBAI3B0yD,EAJ2B,KAIhBtrL,EAJgB,QAKQ,IAAA44H,UAAS,IALjB,qBAK3B39D,EAL2B,KAKZ8kL,EALY,QAMc,IAAAnnH,UAAS,GANvB,qBAM3BonH,EAN2B,KAMTC,EANS,KAQ5BO,EAAevlL,EAAc+kL,IAEnC,IAAA5mJ,YAAU,WACR,IAAI8mJ,EAAwBplQ,EAAQM,UAAU+kQ,gBAAkB9gQ,MAAMC,QAAQxE,EAAQM,UAAU6/E,gBAC3FngF,EAAQM,UAAU6/E,cAAc/uF,OAAU4O,EAAQM,UAAU6/E,cAAgB,GACjF8kL,GAAkB,CAChBlxP,KAAK,IAAAhU,qBAAoBC,IAApB,iDACLslQ,SAAS,IAAAvlQ,qBAAoBC,EAAS,EAAAotE,gBAAgBE,UAFxD,qBAIK83L,KAELD,EAAoB,KAEnB,CAACnlQ,IAEJ,IAAMgoe,EAAoB,SAACC,GACrBA,IAAsB/iO,IACxBhgP,GAAa,GACbigP,EAAoB8iO,KAIxB,OACE,wCACE,+BAAK1gZ,UAAU,uBACZipH,IAAck1D,EAAe,wCAAqB,KACnD,+BAAKn+K,UAAU,kCACZm+K,EAAe,+BAAKn+K,UAAW,wBAA0BipH,EAAY,iCAAmC,IAEpF90M,IAAKgqQ,EAAa3xP,IAAK+8L,OAAQ,kBAAM5rL,GAAa,IAAQ2rL,IAAI,KAAO,OAG7F1wH,EAAc/uF,OAAS,EACtB,8BAAIm2F,UAAW,yBAA2BpH,EAAc/uF,OAAS,EAAI,+BAAiC,KACnG+uF,EAAc17E,KAAI,SAACyje,EAAcD,GAChC,OAAO,mCAA6B9ze,IAAK+ze,EAAan0d,KAAO,eAAiBk0d,EAC1CC,aAAcA,EACdD,kBAAmBA,EACnBD,kBAAmBA,QAGzD,Q,8ECzDV,I,IAAA,M,IACA,M,IAEA,OACA,Q,mDAGA,IAAMG,EAA8B,SAAClgY,GAAU,IAEtCigY,EAAsDjgY,EAAtDigY,aAAcD,EAAwChgY,EAAxCggY,kBAAmBD,EAAqB//X,EAArB+/X,kBAElCr5N,GAAS,IAAA9wH,qBAAoBqqV,EAAan0d,KAEhD,OACE,8BAAIwzE,UAAU,6BAA6BpzF,IAAK+ze,EAAan0d,KAAO,eAAiBk0d,EACjFxuT,QAAS,kBAAMuuT,EAAkBC,IACjCj3d,MAAO,CAACy3E,gBAAiBA,QAAOkmL,EAASu5N,EAAan0d,IAAM,MAApD,MACT46P,EAAS,KAAO,0CAKvBw5N,EAA4BtpV,UAAY,CACtCqpV,aAAc,UAAU5ze,OAAOshH,WAC/BqyX,kBAAmB,UAAU1yX,OAAOK,WACpCoyX,kBAAmB,UAAUtsT,KAAK9lE,Y,UAGrBuyX,G,8EC5Bf,I,IAAA,MACA,O,IACA,M,IAEA,O,IACA,O,IAEA,OACA,QACA,OACA,Q,IACA,S,mDAGA,IAAMC,EAA6B,SAACngY,GAAU,IAErCtnG,EAAwBsnG,EAAxBtnG,YAAaX,EAAWioG,EAAXjoG,QAEpB,OAAKA,GAAYA,EAAQM,WAAcN,EAAQM,UAAUixB,WAKvD,mCAA+BvxB,QAASA,IACrC,SAAC+uZ,GAAD,OACC,mCAAQxnU,UAAW,iGACX88M,UACE,uCACE,sCAAYj8L,MAAO,UAAaznG,GAAa6wH,WAGjDioD,QAASs1O,GACf,4CAAkBpqZ,GAAG,sCAbpB,MAoBXyje,EAA2BvpV,UAAY,CACrC7+I,QAAS,UAAUu2C,MAAV,oBAAkCq/D,Y,WAc9B,IAAAnN,UAXS,SAACxzG,GAAU,IAC1B0L,EAAe1L,EAAMgR,YAArBtF,YAD0B,EAEC1L,EAAMouB,wBAExC,MAAO,CACL1iB,cACAujB,aAN+B,EAE1BA,aAKLH,UAP+B,EAEZA,aASR,CAAyBqkd,I,8ECtDxC,I,IAAA,MACA,O,IACA,MAEA,QACA,Q,mDAGA,IAAMC,EAAmB,SAACpgY,GAAU,IAE3BjoG,EAAyCioG,EAAzCjoG,QAAS8F,EAAgCmiG,EAAhCniG,SAAU2I,EAAsBw5F,EAAtBx5F,mBAE1B,IAAKzO,EACH,OAAO,KAGT,IAAM0F,IAAgB,IAAAwD,oBAAmBlJ,EAASiF,OAAOC,UAAUY,GAAYA,EAAW,GAGpFwie,IADa,IAAA3pe,cAAa+G,GACI,IAAIhL,MAAM,KAE9C,OACE,+BAAK6sF,UAAU,uBACb,gCAAMA,UAAU,gCAAgC94E,EAAmBgC,cACnE,gCAAM82E,UAAU,8BAA8B+gZ,EAAc,IAC5D,gCAAM/gZ,UAAU,gCAAgC+gZ,EAAc,MAMpED,EAAiBxpV,UAAY,CAC3B7+I,QAAS,UAAUu2C,MAAV,qB,WAWI,IAAAkyD,UARS,SAACxzG,GAGvB,MAAO,CACLwZ,mBAHiBxZ,EAAMqN,gBAAlB+B,YAOM,CAAyBgke,I,8EC3CxC,I,IAAA,MACA,O,IACA,MACA,O,IAEA,OAEA,QACA,Q,mDAGA,IAAME,EAAsB,SAACtgY,GAAU,IAE9BjoG,EAA+BioG,EAA/BjoG,QAASyO,EAAsBw5F,EAAtBx5F,mBAEhB,OACE,+BAAK84E,UAAU,0BACb,uCACE,kDAEF,gCAAMA,UAAU,+BACd,4CAAkB5iF,GAAI3E,EAAQM,UAAUk1G,aAAe,6BAA+B,+BACrFx1G,EAAQM,UAAUk1G,aACf,IAAM/mG,EAAmBgC,aAAezQ,EAAQM,UAAUk1G,aAC1D,QAMZ+yX,EAAoB1pV,UAAY,CAC9B7+I,QAAS,UAAUu2C,MAAV,qB,WAWI,IAAAkyD,UARS,SAACxzG,GAGvB,MAAO,CACLwZ,mBAHiBxZ,EAAMqN,gBAAlB+B,YAOM,CAAyBkke,I,6FC1CxC,O,OACA,O,IACA,MACA,QAEA,QACA,Q,OACA,Q,IACA,SACA,QACA,Q,IACA,QACA,S,mDAGA,IAAMC,EAAqB,SAACvgY,GAAU,IAE7BjoG,EAAoBioG,EAApBjoG,QAASotL,EAAWnlF,EAAXmlF,QAFoB,GAGI,IAAAtvC,UAAS,MAHb,qBAG7BsxQ,EAH6B,KAGfq5E,EAHe,KAK7Bt6E,GAAuB,IAAA51I,kBAAvB41I,oBAiBP,OACE,wCACG,SAACv/T,GACA,OACE,mCAA0B5uF,QAASA,EACT+9S,mBAAoB,SAAClhO,GAAD,OApB3B,SAACA,EAAQ+R,GAElC,IAAMw1M,EAAe,UAAUrlQ,mBAAmB89C,EAAO78E,SACzD,UAAU89B,eAAe,EAAAsI,gCAAgC0F,mBAAqBs4P,GAE9E+pH,GAAoB,IAAA11I,mBAAkB,CAACL,kBAAmBv7L,EAAO78E,QAAQM,UAAU2+B,KAAO49C,EAAO78E,QAAQM,UAAUmF,qBAEnHgje,EAAgB5rZ,IAChB,IAAAoG,iBAAgBpG,EAAO78E,UACvB,IAAAyvF,sBAAqB5S,EAAO78E,SAC5B4uF,EAAmB/R,EAAO78E,SAE1BotL,EAAQ17L,KAAQ,EAAAwgB,OAAOyvF,KAAvB,IAA+B9kB,EAAO78E,QAAQiD,OAA9C,KAAwD45E,EAAO78E,QAAQM,UAAU2+B,KAAO49C,EAAO78E,QAAQM,UAAUmF,oBAQjDs4S,CAAmBlhO,EAAQ+R,IAC3DsgU,WAAW,EACXE,aAAcA,QAOlDo5E,EAAmB3pV,UAAY,CAC7B7+I,QAAS,UAAUu2C,MAAV,oBAAkCq/D,Y,WAa9B,IAAAs3E,aACb,IAAAzkF,UAXsB,WAEtB,MAAO,KAKkB,GAIzB,CAA6C+/X,K,8EClE/C,W,WACA,MACA,OACA,O,IAEA,O,IACA,OAEA,QACA,SACA,QACA,QACA,QACA,Q,WACA,S,IACA,Q,IACA,SACA,Q,mDAEA,IAAME,EAAiC,SAACzgY,GAAU,IAEzCjoG,EAA4GioG,EAA5GjoG,QAASo0J,EAAmGnsD,EAAnGmsD,6BAA8Bh3J,EAAqE6qG,EAArE7qG,SAAUsd,EAA2DutF,EAA3DvtF,iBAAkBmM,EAAyCohF,EAAzCphF,UAAW0tI,EAA8BtsD,EAA9BssD,2BAE/EliJ,GAAkB,IAAAhB,oBAAmBrR,GACrCy/E,GAAaptE,KAAoB,IAAArO,WAAUhE,GAUjD,OACE,wCACE,+BAAKunF,UAAU,0BACb,mCAAwByyP,cAAeh6U,EAASunF,UAAU,iDAC1D,mCAAsB9H,SAAUA,EAAUz/E,QAASA,EAASgpU,WAAW,KAOzE,+BAAKzhP,UAAU,sBACb,mCAAQA,UAAW,mHACdnqF,EAAW,sBAAwB,qBAChCqiF,SAAUA,EACV4kN,UAAWhyR,EAAkB,KAAO,uCAAS,8CAC7ConK,QAxBmB,WAC/B,UAAU37I,eAAe,EAAAsI,gCAAgC2F,sBAAwB/rC,EAAQM,UAAU2+B,KAAOj/B,EAAQM,UAAUmF,oBAC5H,IAAIsiB,GAAc,IAAAxN,mBAAkBva,EAASu0J,EAA4B75I,GACzEqN,EAAY+8H,kBAAmB,EAC/Bj+H,EAAU,CAACkB,IACXqsI,GAA6B,KAoBvB,4CAAkBzvJ,GAAI0N,EAAkB,oCAAsC,mCAEhF,mCAAqBotE,SAAUA,OAkBjCwtG,EAAqB,CACzB74B,4DACAvtI,uBAGF6hd,EAA+B7pV,UAAY,CACzC7+I,QAAS,UAAUu2C,MAAV,qB,WAGI,IAAAkyD,UArBS,SAACxzG,GAKvB,MAAO,CACLmI,SALiBnI,EAAMgR,YAAlB7I,SAMLsd,iBALyBzlB,EAAMgsL,QAA1BvmK,iBAML65I,2BALmCt/J,EAAMk4L,WAApC54B,8BAkB+B04B,EAAzB,CAA6Cy7S,I,6FChF5D,O,WACA,MACA,OACA,O,IAEA,QAEA,QACA,SACA,Q,mDAEA,IAAMC,EAA4B,SAAC1gY,GAAU,OAET,IAAA61C,WAAS,GAFA,qBAEpCx4C,EAFoC,KAEzBsjY,EAFyB,KAGpCv0U,EAA2DpsD,EAA3DosD,0BAA2BD,EAAgCnsD,EAAhCmsD,6BAC5By0U,GAAiB,IAAAjsV,QAAO,MACxBG,GAAY,IAAAF,gBAmBlB,OAjBA,IAAAv+B,YAAU,WACJ+1C,GACFv/J,OAAOu2F,YAAW,WAChBu9Y,GAAa,GACb9ze,OAAOu2F,YAAW,WACZ0xD,KACF6rV,GAAa,GAEf9ze,OAAOu2F,YAAW,WAChB+oE,GAA6B,KAC5B,OACF,OACF,KAGJ,CAACC,IAECA,EAKH,+BAAK9sE,UAAW,wCAA0C+d,EAAY,kCAAoC,IACrGq3C,IAAKksV,GACR,mCAAWrpb,SAAS,UACpB,gCAAM+nC,UAAU,wBACd,4CAAkB5iF,GAAG,4CARlB,MAsBLsoL,EAAqB,CACzB74B,6DAGFu0U,EAA0B9pV,UAAY,CACpC7+I,QAAS,UAAUu2C,MAAV,qB,WAGI,IAAAkyD,UAhBS,SAACxzG,GAGvB,MAAO,CACLo/J,0BAHkCp/J,EAAMk4L,WAAnC94B,6BAe+B44B,EAAzB,CAA6C07S,I,8EClE5D,I,IAAA,M,IACA,MACA,O,IAEA,S,IACA,OAEA,QACA,QACA,Q,mDAGA,IAAMG,EAAuB,SAAC7gY,GAAU,IAE/BjoG,EAAWioG,EAAXjoG,QAEP,IAAKA,EAAQM,UAAUymZ,YACrB,OAAO,KAGT,IAIIy5E,GAJcxge,EAAQM,UAAU0mZ,cAAgBhnZ,EAAQM,UAAU0mZ,cAAcviZ,KAAI,SAAA/I,GAEtF,OADAA,EAAMA,EAAIJ,QAAQ,oCAAqC,mCAEpD,IACemN,MAAK,SAAAsL,GAAA,OAAOA,EAAIjd,SAAS,WAI7C,OACE,+BAAKywF,UAAU,6BACb,8BAAIA,UAAU,2BACZ,4CAAkB5iF,GAAG,4BAEvB,+BAAK4iF,UAAU,yBACb,mCAAMA,UAAU,qBAAqBl0E,OAAQ,SAAU3c,KAAMsJ,EAAQM,UAAUymZ,aAC7E,uCACE,mDAEF,gCAAMx/T,UAAU,2BACd,4CAAkB5iF,GAAG,6BAI1B67d,IAAO,IAAAx/d,eACN,+BAAKumF,UAAU,yBACb,mCAAMA,UAAU,qBAAqBl0E,OAAQ,SAAU3c,KAAM8pe,GAC3D,uCACE,mDAEF,gCAAMj5Y,UAAU,2BAChB,4CAAkB5iF,GAAG,oCAIvB,OAKVmke,EAAqBjqV,UAAY,CAC/B7+I,QAAS,UAAUu2C,MAAV,qB,UAGIuyb,G,iFC/Df,I,IAAA,M,IACA,MACA,OACA,OACA,QAEA,Q,IACA,S,IACA,S,IACA,OAEA,Q,IACA,S,mDAEA,IAAMC,EAA6B,SAAC9gY,GAAU,IAErCjoG,EAA0CioG,EAA1CjoG,QAASotL,EAAiCnlF,EAAjCmlF,QAASh2K,EAAwB6wF,EAAxB7wF,KAAM8hS,EAAkBjxM,EAAlBixM,eAM/B,OACE,+BAAK3xN,UAAU,wCACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,oEACVkyF,QARQ,WACtB2T,EAAQ17L,KAAQ,EAAAwgB,OAAOyvF,KAAvB,IAA+B3hG,EAAQiD,OAAvC,OAQI,yCAEDi2S,EACC,mCAA+Bl5S,QAASA,IACrC,SAAC+uZ,GAAD,OACC,mCAAY7oK,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,oEACVkyF,QAASs1O,GACnB,4CAIJ,OAgBVg6E,EAA2BlqV,UAAY,CACrC7+I,QAAS,UAAUu2C,MAAV,qB,WAGI,IAAA22I,aACb,IAAAxoC,aACE,IAAAj8C,UAjBoB,SAACxzG,GAEvB,MAAO,CACLikT,eAFuBjkT,EAAMilV,UAAxBhhC,kBAMkB,GAUvB,CAA6C6vL,M,8EC7DjD,I,IAAA,MACA,O,IACA,MACA,O,IAEA,O,IACA,QAEA,QACA,QACA,QACA,Q,mDAGA,IAAMC,EAA0B,SAAC/gY,GAAU,IAElCjoG,EAAkGioG,EAAlGjoG,QAAS+gI,EAAyF94B,EAAzF84B,wBAAyBjqC,EAAgEmR,EAAhEnR,WAAYp/B,EAAoDuwC,EAApDvwC,cAAe0oE,EAAqCn4B,EAArCm4B,oBAAqBl8G,EAAgB+jF,EAAhB/jF,aAEnF+iY,GAAY,IAAA9vS,uBAAsBrgB,EAAY92F,EAAQiD,OAAQihB,KAAiB,IAAAizF,uBAAsBrgB,EAAY92F,EAAQiD,QAE/H,IAAKgkZ,EACH,OAAO,KAUT,OACE,mCAAQ1/T,UAAW,iGACX88M,UAAW,wCACX5qH,QAVmB,WAC3B14C,EAAwB,IAAI,GAE5BrpE,GAAc,GACd0oE,EAAoB6mR,KAOlB,4CAAkBtiZ,GAAG,sBAAsBmO,OAAQ,CAACynU,WAAY0sE,EAAU7zZ,UAKhF41e,EAAwBnqV,UAAY,CAClC7+I,QAAS,UAAUu2C,MAAV,oBAAkCq/D,YAG7C,IAUMq3E,EAAqB,CACzBlsD,kDACAR,0CACA7oE,8BACA0oE,2C,WAGa,IAAA33B,UAjBS,SAACxzG,GAIvB,MAAO,CACL6hG,WAJmB7hG,EAAMqY,YAApBwpF,WAKL5yE,aAJqBjvB,EAAMouB,wBAAtBa,gBAe+B+oK,EAAzB,CAA6C+7S,I,mHC7D5D,O,OACA,O,IAEA,SACA,UACA,SACA,Q,IACA,O,mDAIA,IA4DM/7S,EAAqB,CACzBvO,oBAhEF,OAgEEA,qB,WAGa,IAAAj2E,UAbS,SAACxzG,GAAU,MACaA,EAAMgR,YAA7CkiG,EAD0B,EAC1BA,kBAAmBw2E,EADO,EACPA,iBAE1B,MAAO,CACLtgE,wBAAyBlW,EAAkB/2G,OAC3CutL,sBAQoCsO,EAAzB,EAhEU,SAAChlF,GAAU,IAU5B,EARC02E,EAAkE12E,EAAlE02E,iBAAkBD,EAAgDz2E,EAAhDy2E,oBAAqBrgE,EAA2BpW,EAA3BoW,wBAEvC85J,GADoB,IAAAI,kBAApB21I,iBACA/1I,mBAJ2B,GAKE,IAAAr6H,WAAS,GALX,qBAK3BwxO,EAL2B,KAKftvF,EALe,QAMgB,IAAAliJ,UAAS,MANzB,qBAM3BmrV,EAN2B,KAMRC,EANQ,KAQ5BpwF,GAAgB,IAAAl8P,UAEhBusV,GAAA,gCAAwB,6FACtB5vd,GAAe,IAAAo1Y,wBAAuBx2I,GAE5C+wN,EAAqB3vd,GAEhBA,EALuB,uBAMrBolK,GACHD,GAAoB,GAPI,8BAYxBnlK,GAAiBA,EAAaw1E,oBAZN,wBAa1BixM,GAAc,GAbY,UAcpB,IAAAhxM,+BAA8Bz1E,GAdV,OAe1BymR,GAAc,GAfY,mDAAxB,4CAwBN,OALA,IAAA1hL,YAAU,WACR6qX,MAEC,CAAChxN,EAAoB95J,KAEnB4qX,GAAqB5qX,EACjB,qFAMP,+BAAK92B,UAAU,OAAOo1D,IAAKm8P,GACzB,+BAAKvxT,UAAU,8CACZ+nS,IAAgB25G,IAAsB5qX,EACnC,wCACA,mCAAkB9kG,aAAc0vd,EAAmBnwF,cAAeA,U,mHCxD9E,O,OACA,OACA,Q,IACA,MAEA,QACA,Q,IACA,SACA,SACA,SACA,Q,IACA,S,IACA,S,IACA,S,IACA,O,mDAEA,IAAMswF,EAAgBt0e,OAAO2B,SAASC,KAAKI,SAAS,gBAG9Cuye,EAAmB,SAACphY,GAAU,IAS5B,EAPC1uF,EACoB0uF,EADpB1uF,aAAc5G,EACMs1F,EADNt1F,aAAcsI,EACRgtF,EADQhtF,gBAAiB69X,EACzB7wS,EADyB6wS,cAAel7F,EACxC31M,EADwC21M,gBAAiBxgT,EACzD6qG,EADyD7qG,SAAUkgB,EACnE2qF,EADmE3qF,YAC5FihK,EAAyBt2E,EAAzBs2E,sBAHgC,GAKgC,IAAAzgC,WAAS,GALzC,qBAK3B43J,EAL2B,KAKAyxL,EALA,QAMc,IAAA5uN,kBAAzC21I,EAN2B,EAM3BA,iBAAkBC,EANS,EAMTA,oBAClB1wO,EAAqDywO,EAArDzwO,aAAcw6F,EAAuCi2I,EAAvCj2I,gBAAiBC,EAAsBg2I,EAAtBh2I,mBAEhCoxN,GAAA,gCAAiC,iBAAO9sD,IAAP,mIACrC2qD,GAA6B,IACzB3qD,EAFiC,gCAG7B,IAAIzpb,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QAHd,wBAK/B,IAAAg8F,+BAA8Bz1E,GALC,uBAM/B6hU,IAN+B,WAOjCohG,EAPiC,kCAQ7B,IAAIzpb,SAAQ,SAAAC,GAAA,OAAWq4F,WAAWr4F,EAAS,QARd,QAUrCm0e,GAA6B,GAVQ,mDAAjC,4CAaA/rJ,EAAsB,WAC1B,IAAMvjU,GAAS,IAAAC,oBACXsqE,EAAcvqE,EAAOo9E,sBACvB,CAAC98E,KAAMoB,GACP0B,EACA,GACA1B,EAAauJ,eACb,EACAnQ,EACA,CAACyuE,mBAAmB,IAEtBgB,GAAc,IAAAiiD,mBAAkBjiD,EAAY,KAAM7oE,EAAa5U,GAAI4U,GAEnE,IAAM0+P,EAAkBpgQ,EAAOo9E,sBAC7B,CAAC98E,KAAMoB,GACP,GACA,GACAA,EAAauJ,eACb,EACAnQ,EACA,CAACyuE,mBAAmB,IAGtB+sU,GAAoB,IAAA11I,mBAAkB,CAACh7F,aAAcr7F,EAAa61L,sBAC7DC,GAAsB3+P,EAAaw1E,qBACtCo/T,GAAoB,IAAA11I,mBAAkB,CAACP,oBAAoB,KAExD3+P,EAAaoyM,mCAChBtgI,YAAW,WACL9xE,EAAaw1E,sBAAwBx1E,EAAaoyM,mCAAqCmtL,GAAiBA,EAAc3nS,SACpH2nS,EAAc3nS,QAAQ1C,cAAgBqqS,EAAc3nS,QAAQ+oE,cAC7D3gK,EAAa+uI,oBAAsB,GACtCghV,GAA+B,KAEhC,MASP,IALA,IAAAhrX,YAAU,WACR88N,MAEC,CAAC7hU,EAAc0B,EAAiB2iS,KAE9Bk7F,IAAkBA,EAAc3nS,QACnC,OAAO,KAGT,IAAM,EAAA82N,GAAA,gCAAkB,WAAOgU,GAAP,0EACjB1iU,EADiB,qDAIlBA,EAAaoyM,oCAAsC,IAAApjC,0BAAyB0zJ,GAJ1D,iDAOtBqtJ,IAPsB,kDAAlB,6CAUN,OAAKpxN,EAIAz6F,EAAarsL,SAAU8mR,GAAuBj9P,EAAgB7pB,OAKjE,wCACE,mCAAmBmoB,aAAcA,EAAckkK,aAAcw6F,IAC7D,wCACA,+BAAK1wL,UAAU,gBACb,mCAA6BuwN,WAAYr6H,EACZ2rT,cAAeA,EACftwF,cAAeA,EAAc3nS,QAC7B7zF,YAAaA,EACb2qT,gBACE1pJ,EAAsBznL,SAASf,SAASC,SAASoC,gBAAkB,KAAO6vU,EAE5E7qU,SAAUA,IACtCs4S,EAA4B,mCAAkBnuN,UAAW,kBAAqB,OAhB5E,8BAAIA,UAAU,uCAAd,yBAJA,yCA0BX8hZ,EAAiBxqV,UAAY,CAC3Bi6P,cAAe,UAAUh6P,UAAU,CACjC,UAAU48B,KACV,UAAUmlG,KACV,UAAUtqO,MAAM,CAAC46D,QAAS,UAAUwqE,WAAWy1O,c,WAsBpC,IAAAlkO,aACb,IAAAzkF,UAnBsB,SAACxzG,GAAU,IAC1B2oT,EAAmB3oT,EAAM0zG,UAAzBi1M,gBAD0B,EAEO3oT,EAAMyc,YAAvCuJ,EAF0B,EAE1BA,gBAAiBtI,EAFS,EAETA,aAFS,EAGsB1d,EAAMgR,YAE7D,MAAO,CACL23S,kBACAjrS,eACAsI,kBACA7d,SAT+B,EAG1BA,SAOLkgB,YAV+B,EAGhBA,YAQfihK,sBAX+B,EAGHA,yBAYL,GAIzB,CAA6C8qT,K,8ECxJ/C,W,OACA,S,IACA,MAEA,Q,IACA,S,mDAGA,IAAME,EAA8B,SAACthY,GAAU,IAEtC6vM,EAAoF7vM,EAApF6vM,WAAYx6R,EAAwE2qF,EAAxE3qF,YAAaw7X,EAA2D7wS,EAA3D6wS,cAAe17Y,EAA4C6qG,EAA5C7qG,SAAU6qU,EAAkChgO,EAAlCggO,gBAAiBmhK,EAAiBnhY,EAAjBmhY,cACpEI,GAAc,IAAA5sV,UAEd2lU,EAAgBnld,EAAW,IAAMgse,EAAgB,IAAM,IACvDK,EAAkBnsd,EAAc,IAAM,EAAI,EAE1Cosd,EAAetse,GAAYkgB,EAAc,IAAMmsd,EAAkB,IAEjEE,EAAe5ie,KAAKkI,KAAK6oS,EAAW1mT,OAASq4e,GAM7CG,EAAmB,SAAC,GAAwC,IAAvChhK,EAAuC,EAAvCA,YAAaz0U,EAA0B,EAA1BA,IAAK00U,EAAqB,EAArBA,SAAU73T,EAAW,EAAXA,MAEjDsL,EAAUw7R,EADD2xL,EAAkB5gK,EAAYD,GAE3C,OAAKtsT,EAIH,+BAAKtL,MAAOA,EAAO7c,IAAKA,GACtB,mCAAyBmoB,QAASA,EAAS8sd,cAAeA,KAJrD,MAULS,EAAwB,SAAC,GAOM,IALJC,EAKI,EALJA,UAEAC,EAGI,EAHJA,mBACA3hC,EAEI,EAFJA,WACA4hC,EACI,EADJA,UAE/B,MAAO,CACLC,mBAAoBlje,KAAKywH,IAAI,EAAG4wU,EAAa2hC,GAC7CG,kBAAmBnje,KAAKwwH,IAAIuyW,EAAY,EAAGE,KAI/C,OACE,+BAAKziZ,UAAU,YAAYo1D,IAAK6sV,GAC9B,0CAAgB1wF,cAAeA,IAC5B,gBAAEt8Y,EAAF,EAAEA,OAAQonK,EAAV,EAAUA,UAAV,OAAyBpnK,EACxB,qCAAW2te,eAAA,IACR,kBACC,gCACEC,YAAA,EACAztT,SAAUsrJ,EACVU,aAAcihK,EACdzhK,YAAashK,EACbphK,YAAaqhK,EACbpte,MAAOote,EAAeD,EACtBjte,OAAQA,EACR8rU,SAAUqhK,EACVphK,UAAWg6I,EACX/5I,iBAAkB,EAClB5kK,UAAWA,EACXimU,sBAAuBA,OAI3B,UAMZN,EAA4B1qV,UAAY,CACtCi5J,WAAY,UAAUjiM,QAAQ,UAAUt/D,MAAV,qBAC9BuiW,cAAe,UAAUh6P,UAAU,CAAC,UAAU48B,KAAM,UAAUmlG,KAAM,UAAUllG,WAAWy1O,WACzFnpF,gBAAiB,UAAUvsJ,KAC3B0tT,cAAe,UAAUrqV,M,UAGZwqV,G,8ECvFf,W,OACA,O,IACA,MACA,QACA,OAEA,Q,IACA,OACA,Q,OACA,QACA,Q,IACA,Q,IACA,O,IACA,Q,IACA,SACA,SACA,Q,IACA,Q,mDAGA,IAAMc,EAA0B,SAACpiY,GAAU,IAElC3rF,EAAoG2rF,EAApG3rF,QAASsT,EAA2Fq4E,EAA3Fr4E,kBAAmBw9J,EAAwEnlF,EAAxEmlF,QAAShwL,EAA+D6qG,EAA/D7qG,SAAUga,EAAqD6wF,EAArD7wF,KAAMzE,EAA+Cs1F,EAA/Ct1F,aAAcmC,EAAiCmzF,EAAjCnzF,eAAgBs0d,EAAiBnhY,EAAjBmhY,cACpFppe,EAAUsc,EAAQnE,KAEjBg2Y,GAAuB,IAAA51I,kBAAvB41I,oBAOD1oF,EAAmB,SAACloO,GAExB,IAAIA,EAAMlqF,OAAOuqI,QAAQ,eAAgBrgD,EAAMlqF,OAAOuqI,QAAQ,wBAA9D,CAII,UAAOpgJ,aAAewC,GACxBrL,QAAQ4B,IAAI,qBAAsByJ,GAGpC,IAAMokS,EAAe,UAAUrlQ,mBAAmB/+B,GAC5CwlQ,EAAiB,EAAAp/N,gCAAgC4C,oBAAsBo7P,EAC7E,UAAUtmQ,eAAe0nO,GAEzB,IAAMpyQ,EAAO4M,EAAQM,UAAU2+B,KAAOj/B,EAAQM,UAAUmF,kBAExD0oZ,GAAoB,IAAA11I,mBAAkB,CAACL,kBAAmBhlR,KAE1Dg6L,EAAQ17L,KAAQ,EAAAwgB,OAAOyvF,KAAvB,IAA+B3hG,EAAQiD,OAAvC,IAAiD7P,GACjDw8B,MAGIiyD,GAAiB,IAAAjtE,sBAAqB5U,EAASoX,EAAK1C,SAAU0C,EAAKvC,OAAQC,EAAgBnC,GAAc,GACzGutE,GAAc,IAAAtrE,sBAAqB5U,EAASoX,EAAK1C,SAAU0C,EAAKvC,OAAQC,EAAgBnC,GAAc,GAO5G,OALAhe,QAAQ4B,IAAI,cAAe2pF,GAKvBkpZ,EAEA,+BAAK7hZ,UAAW,gDAAiDkyF,QAASgsJ,GACxE,+BAAKl+O,UAAU,yBACb,mCAAkBvnF,QAASA,EACTq5D,mBAAoBr5D,EAAQiD,OAC5B2Q,YAAa5T,EAAQM,UAAUqE,MAEnD,+BAAK4iF,UAAU,uCACb,gCAAMA,UAAU,sCACd,mCAAavnF,QAASA,MAGzB5C,EAAW,KACV,+BAAKmqF,UAAU,4BACb,mCAAkB+N,YAAat1F,EAASunF,UAAU,gCAQ1D,+BAAKA,UAAW,qBAAsBkyF,QAASgsJ,GAC7C,+BAAKl+O,UAAU,yBACb,mCAAkBvnF,QAASA,EACTq5D,mBAAoBr5D,EAAQiD,OAC5B2Q,YAAa5T,EAAQM,UAAUqE,MAEnD,+BAAK4iF,UAAU,2BACb,gCAAMA,UAAU,sCACd,mCAAavnF,QAASA,EAAS+U,mBAAmB,EAAMyvI,UAAWpnJ,EAAW,GAAK,MAEpFA,EACC,gCAAMmqF,UAAU,4BACd,mCAAkB+N,YAAat1F,EAASunF,UAAU,+BAElDvnF,EAAQM,UAAU2+B,KAAQj/B,EAAQM,UAAU2+B,MAAQ4iD,EACtD,gCAAM0F,UAAU,iCAAiCvnF,EAAQM,UAAU2+B,KACjE,MAEL7hC,EAAW,KACV,wCACI8iF,IAAgB2B,GAAqB7hF,EAAQM,UAAU2+B,KAAQihD,IAAgBlgF,EAAQM,UAAU2+B,IAI9Fj/B,EAAQM,UAAUwb,aAAgB9b,EAAQM,UAAUwb,cAAgB+lE,EACrE,mCAAoB0F,UAAU,kCACsBvnF,QAASA,EACT8oQ,OAAO,EACPC,WAAY,KAChE,6BAAGxhL,UAAU,oCARf,6BAAGA,UAAU,mCACX,mCAAavnF,QAASA,EAASwkJ,UAAW,MAQ9C,+BAAKj9D,UAAU,4BACb,mCAAkB+N,YAAat1F,EAASunF,UAAU,+BAEpD,+BAAKA,UAAU,8BACb,mCAAgCjrE,QAASA,QAQrD+td,EAAwBxrV,UAAY,CAClCviI,QAAS,UAAUi6B,MAAV,oBACTh9B,aAAc,UAAUjlB,OACxBs6F,mBAAoB,UAAU8sF,KAC9B0tT,cAAe,UAAUrqV,MAG3B,IAeMkuC,EAAqB,CACzBr9J,uC,WAGa,IAAA80H,aACb,IAAAwoC,aACE,IAAAzkF,UArBoB,SAACxzG,GAOvB,MAAO,CACLmI,SAPiBnI,EAAMgR,YAAlB7I,SAQL0X,eANqB7f,EAAMqN,gBAO3ByP,uBAN+B9c,EAAMwc,UAAhCM,uBAOLY,aANqB1d,EAAMyc,YAAtBiB,gBAgBoBs6K,EAAzB,CAA6Co9S,M,6FC3JjD,O,WACA,MAEA,QACA,Q,OACA,S,IACA,SACA,Q,mDAGA,IAAMC,EAAiC,SAACriY,GAAU,IAEzC3rF,EAAW2rF,EAAX3rF,QACDtc,EAAUsc,EAAQnE,KAClBoyd,GAAc,IAAA7tV,aAAY18I,GAJgB,GAMR,IAAA89I,UAAS,MAND,qBAMzCsxQ,EANyC,KAM3Bq5E,EAN2B,QAQA,IAAAlwN,kBAAzC21I,EARyC,EAQzCA,iBAAkBC,EARuB,EAQvBA,oBAElB1wO,EAAgBywO,EAAhBzwO,aAwBP,OAPA,IAAAn/D,YAAU,WACJisX,GAAevqe,GAAYuqe,EAAYtne,SAAWjD,EAAQiD,QAC5Dwle,EAAgB,QAGjB,CAACzoe,EAAQiD,SAGV,mCAA0BjD,QAASA,EACTmvZ,eAAgB7yY,EAAQ4hC,aACxB6/P,mBAzBD,SAAClhO,GAE1B,IAAMunN,EAAe,UAAUrlQ,mBAAmB89C,EAAO78E,SACzD,UAAU89B,eAAe,EAAAsI,gCAAgCyF,wBAA0Bu4P,GAEnFqkM,EAAgB5rZ,GAChB,IAAM8rY,EAAclrS,EAAah5K,KAAI,SAAA6X,GACnC,OAAIA,EAAQnE,KAAK7X,UAAUqE,KAAO3E,EAAQM,UAAUqE,GAC3C,CAACwT,KAAM0kE,EAAO78E,SAEhBsc,KAET6xY,GAAoB,IAAA11I,mBAAkB,CAACh7F,aAAckrS,MAc3Bv5D,aAAcA,KAI5Ck7E,EAA+BzrV,UAAY,CACzCviI,QAAS,UAAUi6B,MAAV,oBAAkCq/D,Y,UAG9B00X,G,8ECxDf,I,IAAA,MACA,OACA,Q,IACA,M,IAEA,SACA,QACA,S,IACA,O,mDAGA,IAAME,EAAoB,SAACviY,GAAU,IAE5B1uF,EAAwC0uF,EAAxC1uF,aAAcnc,EAA0B6qG,EAA1B7qG,SAAUqgL,EAAgBx1E,EAAhBw1E,aAEzBK,EAAoBvkK,EAAaw1E,qBAA2B,IAAA2uF,wBAAuBnkK,EAAckkK,GAA1C,GAG7D,OAAIrgL,EACK,KAIP,+BAAKmqF,UAAU,cACb,+BAAKA,UAAU,iCACZu2F,EAAiBr5K,KAAI,SAAAmuY,GACpB,OACE,8BAAIrrT,UAAU,qBAAqBpzF,IAAKy+Y,EAAgBjuY,IACtD,+BAAK4iF,UAAU,mCACb,gCAAMA,UAAU,yBACbqrT,EAAgBtjM,gBAChBsjM,EAAgBnmE,sBAAhB,KAA6CmmE,EAAgBnmE,sBAA7D,IAAwF,MAE1FlzT,EAAa+8J,iBAAmB/8J,EAAa08J,qBAAuB,KAAO,mCAAiBh2K,KAAM,MAErG,+BAAKsnF,UAAU,oBACb,mCAAoBqrT,gBAAiBA,EAAiBr5X,aAAcA,YAUpFixd,EAAkB3rV,UAAY,CAC5B4+B,aAAc,UAAUzqK,OAG1B,IAUMi6K,EAAqB,CACzBnhK,yC,WAGa,IAAAohK,aACb,IAAAzkF,UAfsB,SAACxzG,GAAU,IAC1BmI,EAAYnI,EAAMgR,YAAlB7I,SAD0B,EAEOnI,EAAMyc,YAC9C,MAAO,CACLtU,WACA6d,gBAL+B,EAE1BA,gBAILilX,aAN+B,EAETA,gBAaCjzM,EAAzB,CAA6Cu9S,K,8ECjE/C,I,IAAA,M,IACA,MACA,OACA,OACA,QAEA,Q,IACA,S,IACA,OAEA,QACA,Q,OACA,SACA,Q,mDAEA,IAAMC,EAA8B,SAACxiY,GAAU,IAEtCmlF,EAAiBnlF,EAAjBmlF,QAASh2K,EAAQ6wF,EAAR7wF,KAF6B,GAIG,IAAAmhQ,kBAAzC21I,EAJsC,EAItCA,iBAAkBC,EAJoB,EAIpBA,oBAClB91I,EAAyB61I,EAAzB71I,sBAEP,IAAKA,EACH,OAAO,KAiBT,OACE,+BAAK9wL,UAAU,yCAMb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,4EACVkyF,QAvBQ,WACtB2T,EAAQ17L,KAAQ,EAAAwgB,OAAOyvF,KAAvB,IAA+B02K,EAAsBp1Q,OAArD,KACA,IAAMmhS,EAAe,UAAUrlQ,mBAAmBs5O,GAC5C7S,EAAiB,EAAAp/N,gCAAgC2C,oBAAsBq7P,EAC7E,UAAUtmQ,eAAe0nO,GAEzB,IAAMpyQ,EAAOilR,EAAsB/3Q,UAAU2+B,KAAOo5O,EAAsB/3Q,UAAUmF,kBAEpF0oZ,GAAoB,IAAA11I,mBAAkB,CAACL,kBAAmBhlR,KAE1Dg6L,EAAQ17L,KAAQ,EAAAwgB,OAAOyvF,KAAvB,IAA+B02K,EAAsBp1Q,OAArD,IAA+D7P,IAC/D,IAAAw8B,uBAaI,2CAaFq9J,EAAqB,CACzBr9J,uCAGF66c,EAA4B5rV,UAAY,CACtC7+I,QAAS,UAAUu2C,MAAV,qB,WAGI,IAAA22I,aACb,IAAAxoC,aACE,IAAAj8C,UAjBoB,SAACxzG,GAEvB,MAAO,CACLikT,eAFuBjkT,EAAMilV,UAAxBhhC,kBAgBoBjsH,EAAzB,CAA6Cw9S,M,8ECzEjD,I,IAAA,MACA,OACA,O,IAEA,O,IACA,OAEA,Q,WACA,QACA,Q,IACA,O,8DAkCe,IAAA/lV,aAAW,IAAAj8C,UATF,SAACxzG,GAAU,MACDA,EAAMgR,YAEtC,MAAO,CACL7I,SAJ+B,EAC1BA,SAILuD,YAL+B,EAChBA,eAQO,EAAyB,cA/BvB,SAACsnG,GAAU,IAE9B7wF,EAAiC6wF,EAAjC7wF,KAAMmhS,EAA2BtwM,EAA3BswM,WAAY53S,EAAesnG,EAAftnG,YAOzB,OACE,+BAAK4mF,UAAW,2DACd,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,qDACVkyF,QATa,WAC3B,UAAU37I,eAAe,EAAAsI,gCAAgC4F,cACzDusQ,EAAW1rN,UAQP,uCACE,4CAAkBub,MAAO,UAAaznG,GAAa6wH,mB,8EC5B7D,I,IAAA,MACA,O,IACA,S,8DAoBe,IAAA/oB,UAPS,SAACxzG,GAEvB,MAAO,CACLknE,uBAF+BlnE,EAAM0zG,UAAhCxsC,0BAM+B,KAAzB,EAlBmB,SAAC8rC,GAAU,IAEpC9rC,EAA0B8rC,EAA1B9rC,uBAEP,OACE,mCAASorB,UAAW,8CAAgDprB,EAAuBjvC,QAAU,yBAA2B,KAC9H,mCAA0Bi5W,cAAe,U,8ECV/C,I,IAAA,MACA,OACA,O,IACA,M,IAEA,OAEA,Q,OACA,Q,mDAGA,IAAMukG,EAAkC,SAACziY,GAAU,IAE1C9rC,EAAqD8rC,EAArD9rC,uBAAwBD,EAA6B+rC,EAA7B/rC,0BAEzByua,EAAa,WACjBzua,EAA0B,CACxBhvC,SAAS,EACTs4S,mBAAoB,GACpB7/O,eAAgB,KAChBwoK,cAAe,QAoBnB,OACE,+BAAK5mK,UAAW,uBACd,mCAAQA,UAAW,gFACXkyF,QAnBY,WACtB,UAAU37I,eAAe,EAAAwB,6BAA6B0G,6BACtD2kc,MAkBI,4CAAkBhme,GAAG,oBAEvB,mCAAQ4iF,UAAW,8EACXkyF,QAlBoB,WAC9B,UAAU37I,eAAe,EAAAwB,6BAA6B2G,qCAClDk2B,EAAuBgyL,eAEzBhyL,EAAuBgyL,gBAEzBw8O,MAaI,4CAAkBhme,GAAG,sBAM7B+le,EAAgC7rV,UAAY,CAC1CsnP,cAAe,UAAU7xY,QAG3B,IAQM24L,EAAqB,CACzB/wH,uD,WAGa,IAAAusC,UAZS,SAACxzG,GAAU,MACmBA,EAAM0zG,UAAnDxsC,EAD0B,EAC1BA,uBACP,MAAO,CACLpD,kBAH+B,EACFA,kBAG7BoD,4BAQoC8wH,EAAzB,CAA6Cy9S,I,8ECtE5D,I,IAAA,MACA,OACA,O,IACA,QACA,Q,8DAyEe,IAAAhmV,aACb,IAAAj8C,UAdsB,SAACxzG,GAAU,MACmBA,EAAM0zG,UAAnDxsC,EAD0B,EAC1BA,uBAEP,MAAO,CACLpD,kBAJ+B,EACFA,kBAI7BoD,yBACArnD,eAJqB7f,EAAMqN,mBAQJ,GAIzB,EAvEsC,SAAC2lG,GAAU,IAE1C9rC,EAAgD8rC,EAAhD9rC,uBAAwB/kD,EAAwB6wF,EAAxB7wF,KAAMtC,EAAkBmzF,EAAlBnzF,eAC9B0wT,EAAsBrpQ,EAAtBqpQ,mBAEP,OAAKA,EAKH,+BAAKj+O,UAAU,WACb,+BAAKA,UAAU,iBACb,+BAAKA,UAAU,6CACb,4CAAkB5iF,GAAG,kBAEvB,+BAAK4iF,UAAU,8CACf,+BAAKA,UAAU,6CACb,4CAAkB5iF,GAAG,iBAGzB,8BAAI4iF,UAAU,iBACXi+O,EAAmB/gU,KAAI,SAACmme,EAAqBC,GAC5C,IAAMrwd,EAAcowd,EAAoBx8a,KAClC08a,EAAYF,EAAoB11a,GAChC/gE,EAAMqmB,EACRA,EAAYla,UAAUqE,GACtBmme,EAAYA,EAAUxqe,UAAUqE,GAAK,OAASkme,EAElD,OACE,8BAAItjZ,UAAU,gBAAgBpzF,IAAKA,GACjC,+BAAKozF,UAAU,sBACZ/sE,EACC,mCAAkBxa,QAASwa,EACT6+C,mBAAoB7+C,EAAYvX,OAChC2Q,YAAa4G,EAAYla,UAAUqE,KACnD,+BAAK4iF,UAAU,oEAErB,+BAAKA,UAAU,sBACf,gCAAMA,UAAU,mBACb,IAAA9uE,sBAAqB+B,GAAeswd,GAAWzte,YAAa+Z,EAAMtC,KAGrE,+BAAKyyE,UAAU,sBACZujZ,EACC,mCAAkB9qe,QAAS8qe,EACTzxa,mBAAoByxa,EAAU7ne,OAC9B2Q,YAAak3d,EAAUxqe,UAAUqE,KACjD,+BAAK4iF,UAAU,0EAzCxB,U,8ECbX,W,WAEA,S,IACA,S,IACA,S,IAEA,Q,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,6DAGuB,SAAC0gB,GAAU,IAEzBw2E,EAAgBx2E,EAAhBw2E,aACDvtE,GAAc,IAAA0rC,UAEpB,OACE,kCAAmBmtL,SAAnB,CAA4Bl2U,MAAOq9G,GACjC,+BAAK3pB,UAAU,WACb,mCAAmB2pB,YAAaA,IAC7B,SAACmrO,GAAD,OAAwB,mCAAYnrO,YAAaA,EAAamrO,mBAAoBA,OAErF,yCAGF,wCACA,wCACA,wCACA,wCAEA,mCAAanrO,YAAaA,IAC1B,wCACCutE,EACC,mCAAmBvtE,YAAaA,IAC7B,SAACmrO,GAAD,OAAwB,mCAAanrO,YAAaA,EAAamrO,mBAAoBA,OAEpF,KACJ,2C,8EC3CN,W,OACA,O,IAEA,SACA,Q,IACA,S,IACA,S,IACA,S,8DAmFe,IAAA5zO,UAvBS,SAACxzG,GAAU,IAC1BkhR,EAAsBlhR,EAAMqN,gBAAgB+B,SAA5C8xQ,mBAD0B,EAEalhR,EAAMgR,YAA7CqX,EAF0B,EAE1BA,YAAaO,EAFa,EAEbA,aAAczgB,EAFD,EAECA,SAFD,EAGoEnI,EAAM0zG,UAE3G,MAAO,CACLvrG,WACAu6D,WAP+B,EAG1BA,WAKLG,aAR+B,EAGdA,aAMjBx6C,cACAO,eACAw7C,mBAX+B,EAGAA,mBAS/BG,eAZ+B,EAGoBA,eAUnDoB,UAb+B,EAGoCA,UAWnEb,kBAd+B,EAG+CA,kBAY9Eo8M,wBAIuB,GAIZ,EAjFE,SAACluK,GAAU,IAEnBtwC,EACiBswC,EADjBtwC,WAAYG,EACKmwC,EADLnwC,aAAcj6C,EACToqF,EADSpqF,aAAcP,EACvB2qF,EADuB3qF,YAAak8C,EACpCyuC,EADoCzuC,eAAgBH,EACpD4uC,EADoD5uC,mBAAoBj8D,EACxE6qG,EADwE7qG,SAAUw9D,EAClFqtC,EADkFrtC,UACxGu7M,EAAsBluK,EAAtBkuK,mBAEE40N,EAAY,GAmBhB,GAlBIjza,EACFiza,EAAUzue,MAAQc,EAAWkgB,EAAc,IAAMA,EAAc,EACrDlgB,GAAgC,SAAnBo8D,IACvBuxa,EAAUzue,MAAQ,KAehBq7D,IAAev6D,EAAU,CAC3B,IACM4te,EAAmBntd,EAAe,GACxCktd,EAAUvue,OAASwue,GAFG,IAEiCA,EAFjC,IAGlB70N,IACF40N,EAAUvue,QAAU,IAMxB,OACE,wCACE,+BAAKwU,MAAO5T,EAAW,KAAO2te,EACzBxjZ,UAAW,MACNzvB,EAAe,gBAAkB,KACjCq+M,EAAqB,iBAAmB,KACxCv7M,EAAY,sBAAwB,KACnCA,IAAc,EAAAhgC,iBAAiBK,QAAW79B,EAA4B,GAAhB,gBAC9DA,EACG,wCAEA,+BAAKmqF,UAAW,cAAgBluB,EAAqB,sBAAwB,KAAO1B,EAAa,sBAAwB,KACvH,mCAAkBsza,cAAeF,KAGtC3te,GAAY+4Q,EAAqB,KAAO,yCAE1C/4Q,EAAW,wCAAgB,U,8EC7DlC,I,IAAA,MACA,OACA,OACA,Q,IAEA,O,IACA,S,IACA,O,IACA,SAEA,QAGA,QACA,Q,IACA,SACA,Q,WACA,SACA,QACA,Q,mDAEA,IAuGM6vL,EAAqB,CACzBv1H,8BACAiD,oCACAb,4CACA/B,sCACA8D,oDACAlC,uC,WAGa,IAAAuzH,aACb,IAAAxoC,aACE,IAAAj8C,UA5BoB,SAACxzG,GAAU,IAC1BkzG,EAAqBlzG,EAAMgR,YAA3BkiG,kBAD0B,EAEkClzG,EAAM0zG,UAAlEhxC,EAF0B,EAE1BA,WAAYiD,EAFc,EAEdA,UAAW5C,EAFG,EAEHA,eAAgBe,EAFb,EAEaA,kBACvChnD,EAA0B9c,EAAMwc,UAAhCM,uBACA1N,EAAYpP,EAAMqN,gBAAlB+B,SAEP,MAAO,CACLszD,aACAiD,YACA5C,iBACAe,oBACAslD,wBAAyBlW,EAAkB/2G,OAC3Cqd,mBAAoBpK,EACpB0N,4BAeyBk7K,EAAzB,EAlHe,SAAChlF,GAAU,IAErBtwC,EAEqBswC,EAFrBtwC,WAAYD,EAESuwC,EAFTvwC,cAAeqB,EAENkvC,EAFMlvC,kBAAmB3hD,EAEzB6wF,EAFyB7wF,KAAMg2K,EAE/BnlF,EAF+BmlF,QAASxyH,EAExCqtC,EAFwCrtC,UAAWd,EAEnDmuC,EAFmDnuC,qBAC7EukD,EAC0BpW,EAD1BoW,wBAAyBxiD,EACCosC,EADDpsC,yBAA0BlC,EACzBsuC,EADyBtuC,kBAAmBgB,EAC5CstC,EAD4CttC,iBAAkBlsD,EAC9Dw5F,EAD8Dx5F,mBACxFsD,EAA0Bk2F,EAA1Bl2F,uBAsBEm5d,GAAS,EACP7iO,EAAW55P,EAAmB+qK,cAAgBznK,EA3BxB,GA4BD,IAAAmzH,mBAAtB6D,EA5BuB,EA4BvBA,WA5BuB,EA4BZj0B,SACArmG,EAAmB+qK,aAAezwC,IAChDmiW,EAASn5d,GAA0BtD,EAAmBsf,UAAYtf,EAAmBuf,mBAGvF,IA6BMm9c,KAAoBvwa,GAAcA,IAAc,EAAAhgC,iBAAiBK,QAEvE,OACE,kCAAQssD,UAAW,aAAe5vB,EAAa,qBAAuB,uBACjEA,GAAcoB,EAAoB,yBAA2B,KAChE,mCAAYmtL,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC86E,SAAU0rZ,EACV5jZ,UAAW,8BAAgC5vB,EAAa,sBAAwB,IAChF8hH,QAhEQ,WAMtB,OAJA,UAAU37I,eACR65B,EAAa,EAAAr4B,6BAA6BiB,oBAAsB,EAAAjB,6BAA6BgB,wBAG1F+9E,IAIDzjD,IAAc,EAAAhgC,iBAAiBK,SAInCy8B,EAAcC,EAAa,KAAO,EAAA9+B,kBAAkBC,WAC/C6+B,GACHkE,GAAyB,QAiDvB,yCAEF,+BAAK0rB,UAAU,mBACb,wCACA,mCAAQA,UAAW,mCACX88M,UAAW,wCACX5qH,QA5Cc,WAC1B,UAAU37I,eAAe,EAAAwB,6BAA6BqB,gBAClDi6B,IAAc,EAAAhgC,iBAAiBK,SACjC6+B,EAAqB,KACrB,IAAA42C,qBAAoB,EAAAl2E,mBAAmBC,cAAc,GACrDkgC,EAAiB,EAAA//B,iBAAiBC,UAEhC88B,GACFD,EAAc,MAEZwza,GACFvxa,EAAkB,EAAAznD,OAAOC,MACzBi7K,EAAQ17L,KAAK,EAAAwgB,OAAOC,QAEpBwnD,EAAkB,EAAAznD,OAAOE,MACzBg7K,EAAQ17L,KAAK,EAAAwgB,OAAOE,SA8BhB,4CAAkBzN,GAzBpBume,EACK,oCACE7iO,EACF,6BAEA,wBAuBP,+C,+ECtGN,I,IAAA,MACA,OACA,OAEA,QACA,Q,IAOA,OACA,QACA,QACA,QACA,Q,IACA,S,mDAEA,IA8EMp7E,EAAqB,CACzBv1H,8BACAiD,qC,WAGa,IAAA8tC,UAvBS,SAACxzG,GACvB,IAAM6f,EAAiB7f,EAAMqN,gBACtB+E,EAAoBpS,EAAMsS,oBAA1BF,iBACA8gG,EAAqBlzG,EAAMgR,YAA3BkiG,kBACAztF,EAAoBzlB,EAAMgsL,QAA1BvmK,iBACAolM,EAAe7qN,EAAMouB,wBAArBy8L,YACA/tM,EAA0B9c,EAAMwc,UAAhCM,uBAEP,MAAO,CACL+C,iBACAzN,mBACAg3G,wBAAyBlW,EAAkB/2G,OAC3CspB,mBACAolM,cACA/tM,4BASoCk7K,EAAzB,EAnFU,SAAChlF,GAAU,IAE3B5gG,EAAuG4gG,EAAvG5gG,iBAAkByN,EAAqFmzF,EAArFnzF,eAAgBupG,EAAqEpW,EAArEoW,wBAAyB3jG,EAA4CutF,EAA5CvtF,iBAAkB3I,EAA0Bk2F,EAA1Bl2F,uBAC9EtD,EAAqBqG,EAAezQ,SAE1C,IAAKg6G,EACH,OACE,+BAAK92B,UAAU,wBACb,yCAQN,IAAI/jF,EAAmB,GACjBouF,GAAgB,IAAAC,eAClBD,GACFA,EAAc72F,SAAQ,SAAA+2F,IACf,IAAA3/D,wBAAyB,EAAAC,gBAAgBC,IAAOy/D,EAAav4E,aAAaopE,oBAAsBmP,EAAav4E,aAAaopE,uBAG3HmP,EAAav4E,aAAa6e,eAC5B/mC,OAAOmc,KAAKskF,EAAav4E,aAAa6e,gBAAgBr9B,SAAQ,SAAAs9B,GACxDy5D,EAAav4E,aAAa6e,eAAeC,IAC3C70B,EAAiB9R,MAAK,IAAA6oB,mBAAkBu3E,EAAav4E,aAAa6e,eAAeC,GAAW,EAAG3d,QAGzFo3E,EAAav4E,aAAakmE,UAAYqS,EAAav4E,aAAauJ,eAC1Etf,EAAiB9R,MAAK,IAAA6oB,mBAAkBu3E,EAAav4E,aAAauJ,cAAe,EAAGpI,QAM1F,IAAMpc,GAAa,IAAA+E,eAAc,MAAM,EAAOG,GAC1CkjH,GAAa,IAAA7oH,wBAAuBS,EAAY+I,GArClB,GAuCD,IAAA69H,mBAA5BC,EAvC6B,EAuC7BA,cAAe4D,EAvCc,EAuCdA,UAKpB,OAJIt6H,EAAmB+qK,aAAezwC,IAAch3H,IAClDg3H,GAAY,GAIZ,+BAAKxhD,UAAU,wBACb,gCAAMA,UAAWwhD,EAAY,aAAe,YACzCvlI,EAAiBpS,OADpB,IAC4B,4CAAkBuT,GAAI,sBAEjDokI,EACC,gCAAMxhD,UAAU,YACb49C,EACG,mCAAwBojI,WAAY,0BACpC,IAAAl4P,sBAAqB5B,GAAoB,IAAA9P,cAAa+nH,GAAa,MAAO5xG,EAAe8/F,qBAE7F,U,8EC1EV,W,OACA,OACA,Q,IAEA,S,IACA,SACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,Q,IACA,SACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,IACA,S,8DAwIe,IAAAnM,UA9BS,SAACxzG,GAAU,IAC1BqoB,EAAeroB,EAAMgR,YAArBqX,YAD0B,EAI7BroB,EAAM0zG,UAFH7wC,EAF0B,EAE1BA,aAAciB,EAFY,EAEZA,kBAAmBM,EAFP,EAEOA,mBAAoBG,EAF3B,EAE2BA,eAAgB2C,EAF3C,EAE2CA,uBAAwBM,EAFnE,EAEmEA,mBAOpG,MAAO,CAEL3E,eACAx6C,cAEAy7C,oBACAM,qBACAG,iBACAw0G,qBAZ6B/4K,EAAM8J,UAA9BivK,qBAcLza,cAboBt+J,EAAMyc,YAArBiP,YAcLw7C,yBACAM,qBACAlvD,iBAfyBtY,EAAMqY,YAA1BC,oBAmBkB,GAIZ,EAtIU,SAAC06F,GAAU,IAE3BgjY,EAC2DhjY,EAD3DgjY,cAAelya,EAC4CkvC,EAD5ClvC,kBAAmBS,EACyByuC,EADzBzuC,eAAgBH,EACS4uC,EADT5uC,mBAAoB20G,EACX/lE,EADW+lE,qBAAsBza,EACjCtrD,EADiCsrD,cACjGp3F,EAAgE8rC,EAAhE9rC,uBAAwBM,EAAwCwrC,EAAxCxrC,mBAAoBlvD,EAAoB06F,EAApB16F,iBAExC9W,GAAW,IAAA+vY,eA2BX4kG,EAAgB,CACpB9ue,MAAOk9D,EAAiB,IAAU,KAG9B6xa,GAAyB,IAAAh2Y,2BAA0Bt8B,GACnDwta,EAAa9ve,GAAYA,EAAS+d,UAAY/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAO0uF,QAEtF,OACE,wCACE,kCAAQrZ,UAAU,aACfg/Y,EACG,wCACAlta,EAAqB,wCAAwB,yCAEnD,mCAASkuB,UAAW,cACdxuB,IAAsB,EAAA/8B,WAAWllC,SAASiiE,EAAkB91D,SAAYo2D,GAAsBkta,EAAa,6CAA+C,KAC1Jxta,GAAsBM,GAAuBkta,EAAqC,GAAxB,wBAC9D,+BAAKh/Y,UAAU,iCACb,wCACCymF,EAAqB58K,OAAS,wCAAgC,OAGnE,mCAASm2F,UAAW,oCAAsCluB,GAAsBkta,EAAa,8CAAgD,KAC3I,mCAAkBv+J,cAAeijK,EAAczue,UAEjD,mCAAS+qF,UAAW,0DAEfgsE,IAAkBgzU,EAAa,sBAAwB,wBAC1D,mCAAapgG,cAAeilG,KAE9B,mCAAS7jZ,UAAW,0DAEfprB,EAAuBjvC,QAAU,sBAAwB,wBACzD3f,EAAmB,cAAgB,KACtC,mCAA0B44X,cAAeilG,KAE3C,mCAAS7jZ,UAAW,2DACdxuB,GAAqBwta,EAAa,mDAAqD,KACxF9pa,EAAmBvvC,QAAU,sBAAwB,KACrDm+c,EAAyB,oBAAsB,KAClD,+BAAK9jZ,UAAW,cACVluB,EAAkD,GAA7B,6BACtBk6F,GAAiBp3F,EAAuBjvC,QAAU,0BAA4B,IAC9Elc,MAAOo6d,GASV,wCACE,wCACA,2CAIN,mCAAS7jZ,UAAW,mCAAsCg/Y,EAA6D,GAAhD,gDACpEA,EACC,uCACE,yCAEA,MAEN,mCAAwBv+J,cAAeijK,EAAczue,OAAS,KAC9D,6C,6FCzHN,O,OACA,O,IACA,MACA,O,IAEA,O,IACA,QAEA,Q,IACA,SACA,QACA,Q,mDAEA,IAAM8ue,EAAgC,SAACrjY,GAAU,IAExC7wF,EAA2C6wF,EAA3C7wF,KAAMk+E,EAAqC2S,EAArC3S,YAAa04E,EAAwB/lE,EAAxB+lE,qBACpB05H,GAAY,IAAA9qJ,QAAO,MAHsB,GAIW,IAAAkB,WAAS,GAJpB,qBAIxCytV,EAJwC,KAIjBC,EAJiB,KAM/C,wBACE,OAAO,KAGT,IAAMC,IAAoBz9T,EAAqB58K,QAAU48K,EAAqBpxK,MAAK,SAAAmG,GACjF,OAAQA,EAASE,SAAWqyF,EAAYryF,UAAaqyF,EAAY7lF,SAAS8tE,eACpEx6E,EAASC,YAAYyM,SAAS8tE,gBAAkB+X,EAAY7lF,SAAS8tE,kBAG7E,IAAKkuZ,KAAoB,IAAA17X,kCAAiCza,GAAa,GAAMlkG,OAC3E,OAAO,KAOT,OACE,+BAAKm2F,UAAU,mBAAmBo1D,IAAK+qJ,GACrC,mCAAYxhD,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,+CACVkyF,QARU,WACxB+xT,GAA0BD,KAQtB,yCAEF,mCAAoCzjM,SAAUJ,EACVpyM,YAAaA,EACbi2Y,sBAAuBA,EACvBE,gBAAiBA,EACjBD,yBAA0BA,MAKpEF,EAA8BzsV,UAAY,CACxCvpD,YAAa,UAAU/+C,MAAV,oBAAkCq/D,Y,WAoBlC,IAAA8uC,aACb,IAAAj8C,UAlBsB,SAACxzG,GAAU,MAC+CA,EAAM0zG,UAA/E5vC,EAD0B,EAC1BA,kBAAmBS,EADO,EACPA,eAAgBC,EADT,EACSA,gBAAiBM,EAD1B,EAC0BA,kBAG3D,MAAO,CACLhB,oBACAS,iBACAC,kBACAqmJ,YANoB7qN,EAAMouB,wBAArBy8L,YAOL/lJ,oBACAi0G,qBAP6B/4K,EAAM8J,UAA9BivK,wBAWkB,GAIzB,CAA6Cs9T,K,iGC1E/C,MACA,OACA,O,IACA,M,IACA,O,IAEA,Q,IACA,Q,IACA,Q,IACA,Q,IACA,OACA,QACA,QACA,Q,mDAEA,IAAMI,EAAqC,SAACzjY,GAAU,IAE7CsjY,EACiEtjY,EADjEsjY,sBAAuBC,EAC0CvjY,EAD1CujY,yBAA0B1jM,EACgB7/L,EADhB6/L,SAAUxyM,EACM2S,EADN3S,YAAal8B,EACP6uC,EADO7uC,sBAC7ET,EAAsEsvC,EAAtEtvC,qBAAsBZ,EAAgDkwC,EAAhDlwC,kBAAmB36D,EAA6B6qG,EAA7B7qG,SAAUque,EAAmBxjY,EAAnBwjY,gBAE/CpqM,EAAc,SAAC9jM,GACfuqM,EAAS32L,SAAW22L,EAAS32L,QAAQosC,SAAShgD,EAAMlqF,SAGxDm4d,GAAyB,IAGrBG,EAA4B,SAACpuY,GACjCnkC,EAAsB,MACtBT,EAAqB,MAEhB8ya,GACH1za,GAAkB,IAAA04C,6BAGpBplB,YAAW,WACT,IAAMyrK,GAAc,aAAE,uBAChBkrL,GAAmB,aAAE,iCAAiC1sV,EAAYryF,OAAO,KAC3E6zP,GAAekrL,GAAoBA,EAAiB,GAAGl2J,WACzDh1B,EAAY3sK,QAAQ,CAACy5E,UAAWo+Q,EAAiB,GAAGl2J,WAAY,OAEjE,KACHuV,EAAY9jM,IAiBd,OACE,mCAAQ5J,KAAM43Y,EACNhkZ,UAAU,kBACV5iF,GAAI,cACJmjS,SAAUA,EAAS32L,QACnBw2L,UAAWvqS,EAAW,aAAe,QACrC2qS,YAAA,EACAC,eAAe,IACpB,gBAAGC,EAAH,EAAGA,gBAAH,OACC,mDACMA,EADN,CAEEj3R,MAAO,CAAEk3R,gBAAiB9qS,EAAW,aAAe,iBAEpD,mCAAOmqF,UAAU,4DACf,mCAAmBo4O,YAAat+B,GAC9B,+BAAM95M,UAAU,iCACd,8BAAIA,UAAU,MACZ,4CAAkB5iF,GA9B5B8me,EACK,iCAEF,4BA6BK,iCACE,4CAAkB9me,GA1B5B8me,EACK,gCAEF,2BAyBK,6BAAGlkZ,UAAU,cACX,mCAAQA,UAAW,uDACXkyF,QAASkyT,GACf,4CAAkBhne,GAAG,sCAYzC+me,EAAmC7sV,UAAY,CAC7CvpD,YAAa,UAAU/+C,MAAV,oBAAkCq/D,WAC/C61X,gBAAiB,UAAU1sV,KAAKnpC,YAGlC,IAOMq3E,EAAqB,CACzB7zH,8CACAT,4CACAZ,uC,WAGa,IAAA0wC,UAbS,SAACxzG,GAEvB,MAAO,CACLmI,SAFiBnI,EAAMgR,YAAlB7I,YAY+B6vL,EAAzB,CAA6Cy+S,I,8EClH5D,I,IAAA,MACA,OACA,O,IAEA,O,IACA,Q,IAEA,SACA,Q,IACA,S,8DAmCe,IAAAhnV,aACb,IAAAj8C,UARsB,SAACxzG,GAEvB,MAAO,CACL8jE,kBAF0B9jE,EAAM0zG,UAA3B5vC,qBAOP,EACE,cAlC0B,SAACkvC,GAAU,IAEhC7wF,EAAiD6wF,EAAjD7wF,KAAMwyF,EAA2C3B,EAA3C2B,kBAAmBu+S,EAAwBlgT,EAAxBkgT,qBAEhC,OACE,+BAAK5gU,UAAW,kBAAoB4gU,EAAqB/2Z,OAAS,0BAA4B,KAC5F,+BAAKm2F,UAAU,yBACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,gDACpB,yCAEF,6BAAGA,UAAU,yBACX,4CAAkB5iF,GAAG,mCAGzB,+BAAK4iF,UAAU,4BACb,mCAA+B4gU,qBAAsBA,EACtBv+S,kBAAmBA,EACnBw+S,aAAc,mCACd5iJ,eAAgB,EAAAlmO,6BAA6B8C,yC,8EC/BpF,I,IAAA,MACA,O,IACA,MACA,O,IAEA,O,IACA,SAEA,QACA,QACA,QACA,Q,0DAEA,IAAMwpc,EAA0B,SAAC3jY,GAAU,IAElCnuC,EAAyBmuC,EAAzBnuC,qBAOP,OACE,+BAAKytB,UAAU,sBACb,mCAAQA,UAAW,yEACX88M,UAAW,wCACX5qH,QATc,WACxB,UAAU37I,eAAe,EAAAwB,6BAA6ByC,mBACtD+3B,EAAqB,EAAAzgC,cAAckB,eAQ/B,4CAAkB51B,GAAG,iCAM7Bine,EAAwB/sV,UAAY,CAClCvpD,YAAa,UAAU/+C,MAAV,qBAGf,IAQM02I,EAAqB,CACzBnzH,6C,WAGa,IAAA2uC,UAZS,SAACxzG,GAGvB,MAAO,CACL8jE,kBAH0B9jE,EAAM0zG,UAA3B5vC,qBAW+Bk0H,EAAzB,CAA6C2+S,I,6FCjD5D,O,OACA,OACA,OACA,Q,IAEA,Q,IACA,Q,IAEA,OACA,QACA,Q,IACA,Q,IACA,O,IACA,Q,IACA,Q,IACA,QACA,QACA,QACA,Q,WACA,S,IACA,SACA,Q,IACA,O,IACA,QACA,QACA,Q,mDAEA,IA2HM3+S,EAAqB,CACzB7zH,8CACAgnE,2C,WAGa,IAAA8sD,aACb,IAAAxoC,aACE,IAAAj8C,UAtBoB,SAACxzG,GAAU,MACeA,EAAM0zG,UAA/C5vC,EAD0B,EAC1BA,kBAAmBM,EADO,EACPA,mBADO,EAEQpkE,EAAMgR,YAAxCkiG,EAF0B,EAE1BA,kBAAmBxnG,EAFO,EAEPA,YACnBm2F,EAAc7hG,EAAMqY,YAApBwpF,WAEP,MAAO,CACLz9B,qBACAN,oBACAovC,oBACArzF,eAAgB7f,EAAMqN,gBACtB3B,cACAm2F,gBAWyBm2F,EAAzB,EAlI0B,SAAChlF,GAAU,IAEhC7wF,EAC8B6wF,EAD9B7wF,KAAMiiD,EACwB4uC,EADxB5uC,mBAAoB8uC,EACIF,EADJE,kBAAmBrzF,EACfmzF,EADenzF,eAAgBs4K,EAC/BnlF,EAD+BmlF,QAASzsL,EACxCsnG,EADwCtnG,YAAay4D,EACrD6uC,EADqD7uC,sBACxFgnE,EAAmCn4B,EAAnCm4B,oBAAqBtpC,EAAcmR,EAAdnR,WAHgB,GAKG,IAAAgnD,WAAS,GALZ,qBAKhCrxC,EALgC,KAKjBo/X,EALiB,KAOvC,IAAK1jY,EAAkB/2G,OACrB,OAAO,wCAGT,IAAM06e,EAAwB,UAAOrue,0BAA4B,UAAOD,YAEpEuue,GAAgB,IAAAl6Y,cAAY,GAAO,EAAM4a,GAAe,GAAO,GACnE,IAAKs/X,IAAkBD,EACrB,OAAO,KAGT,IAoBMvjF,EAAgB,SAAChrT,GACrBsuY,EAAiBtuY,EAAMlqF,OAAOg/M,UAGhC,OACE,kCAAmBkzG,SAAnB,MACG,SAACr0N,GAAD,OACC,mCAAmBA,YAAaA,IAC7B,SAACmrO,GAAD,OACC,wCACG,SAACztP,GAAD,OACC,8BAAIrH,UAAU,cACZ,wCACGukZ,EACC,6BAAGvkZ,UAAW,eACZ,mCACEjqD,MAAO,0BACPiqD,UAAU,kBACVgrI,QAAS,mCAAUF,QAAS5lH,EAAegmH,SAAU81L,OAGvD,KACHwjF,EAAgBA,EAActne,KAAI,SAAAkmY,GACjC,IAAM/4U,GAAmB,IAAAn5C,qBAAoBkyX,EAAUpxX,aAAcnC,EAAMtC,GAErEhP,EAAW6kY,EAAUpxX,aAAa6e,eACpC/mC,OAAOmc,KAAKm9X,EAAUpxX,aAAa6e,gBAAgBn6B,QAAO,SAACmB,EAAOi5B,GAClE,OAAOj5B,GAASurY,EAAUpxX,aAAa6e,eAAeC,GAAY,EAAI,KACrE,GACD,EACJ,OACE,8BAAIkvD,UAAU,YACVmgU,WAAU/c,EAAU1nY,OACpB9O,IAAKw2Y,EAAU1nY,OACfw2K,QAAS,kBAtDf,SAACkxN,EAAWtuD,EAAoBztP,GAClD,UAAU9wD,eAAe,EAAAwB,6BAA6B8E,iBAAmBumW,EAAU1nY,QAEnF,IAAM6iZ,GAAuB,IAAAjvT,qCAAoCC,EAAY6zS,EAAU1nY,QACvF,GAAI6iZ,EAGF,OAFA1lR,EAAoB0lR,GACpB14N,EAAQ17L,MAAQ,IAAAw/F,eAAa,GAAS,EAAAh/E,OAAO0uF,OAA7C,IAAuDklT,EAAqBnhZ,KACrE,EAGT03U,EAAmBsuD,EAAU1nY,OAAQ0nY,EAAU3nY,YAAa,MAAM,GAClE4rF,EAAmB+7S,EAAU3nY,aAE7Bo2D,EAAsBuxU,EAAU1nY,QAChC,IAAM8Q,EAAM42X,EAAU3nY,aAChB,IAAAquF,eAAcs5S,EAAU3nY,aAAa,IACrC,IAAA0uF,oBAAmBi5S,EAAU1nY,QACnCmqL,EAAQ17L,KAAKqiB,GAqC0ByzY,CAAY7c,EAAWtuD,EAAoBztP,KAC5D,+BAAKrH,UAAU,yBACZojT,EAAU3nY,YACP,mCAAkBhD,QAAS2qY,EAAU3nY,YACnBq2D,mBAAoBA,EACpBzlD,YAAa+2X,EAAU3nY,YAAY1C,UAAUqE,KAC/D,+BAAK4iF,UAAU,0CACVv2E,OAAO,IAAAywG,2BAA0BkpR,EAAUpxX,aAAc5Y,MAEpE,+BAAK4mF,UAAU,sBACb,gCAAMA,UAAU,4BACb31B,GAEH,6BAAG21B,UAAU,2BACVojT,EAAU3nY,YAAc,mCAAahD,QAAS2qY,EAAU3nY,YAAa+R,mBAAmB,IAAU,MAErG,+BAAKwyE,UAAU,6BACZojT,EAAU3nY,YAAc,mCAAkBsyF,YAAaq1S,EAAU3nY,YAAa8C,SAAUA,IAAc,OAG3G,4CAGD,KACL,yD,8EC3HpB,W,OACA,O,IAEA,S,6DAMuB,WAQrB,OACE,wCACE,gCAAMyhF,UAAU,oBAAmB,4CAAkB5iF,GAAG,iBACxD,+BAAK4iF,UAAU,sBAUb,4C,8EC9BR,I,IAAA,MACA,O,IAEA,O,IACA,Q,8DAmBe,IAAAm9D,aAjBoB,SAACz8C,GAAU,IAErC7wF,EAAQ6wF,EAAR7wF,KAEP,OACE,+BAAKmwE,UAAU,mBACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAU,gDACpB,yCAEF,6BAAGA,UAAU,yBACX,4CAAkB5iF,GAAG,2C,8ECjB7B,W,OACA,OACA,Q,IAEA,SACA,Q,IAMA,S,IACA,MACA,Q,IACA,Q,IACA,S,IACA,S,IACA,S,IACA,SAEA,Q,IACA,QACA,QACA,SACA,Q,IACA,S,mDAGA,IAAMqne,EAAoB,SAAC/jY,GAAU,IAE5B16F,EAC2E06F,EAD3E16F,iBAAkBwZ,EACyDkhF,EADzDlhF,iBAAkBtZ,EACuCw6F,EADvCx6F,qBAAsBmhF,EACiBqZ,EADjBrZ,mBAAoBxxF,EACH6qG,EADG7qG,SAAU8zG,EACbjJ,EADaiJ,YAC7Fv4C,EAAgFsvC,EAAhFtvC,qBAAsB27F,EAA0DrsD,EAA1DqsD,8BAA+Bj2C,EAA2BpW,EAA3BoW,wBAEjD4tX,GAAe,IAAArvV,UAEfviC,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GACvE8L,EAAe,KAEU,IAAzB8gG,EAAcjpH,QAA8C,UAA9BipH,EAAc,GAAGljB,WACjD59E,GAAe,IAAA69E,gCAA+BijB,EAAc,KAG9D,IAAMsiO,EAAkB51T,GAAoB,IAAMszF,EAAcjpH,QAEhE,IAAAktH,YAAU,WACJq+N,GAAmBpvU,EAAiBk4E,YACtC,IAAAo3B,iCAAgCtvG,EAAkBE,GAYpD6mJ,GAA8B,IAAA/1C,2BAA0BlE,EAAe5sG,EAAsBsZ,IAE7F,IAAMmld,EAAoBz+d,EAAqBsZ,IAAqBtZ,EAAqBsZ,GAAkBnZ,gBACvGH,EAAqBsZ,GAAkBnZ,gBACvC,KACJ+qD,EAAqBuza,GAErBt9Y,MAEC,CAAC7nE,KAEJ,IAAAq3F,mCAAkC7wG,EAAkB8wG,EAAyB5wG,EAAsBmhF,GAEnG,IAAMnP,EAAWhyE,EAAqBsZ,IAAqBtZ,EAAqBsZ,GAAkBnZ,mBAC1F,IAAA5J,WAAUyJ,EAAqBsZ,GAAkBnZ,iBAEzD,OACE,+BAAK25E,UAAW,yBAA4B,EAAD,qBAA6C,IAAtBxgE,EAAuD,GAA7B,6BAC1F,+BAAKwgE,UAAW,yBAA2B,EAAAhvF,mBAAqB,kCAAoC,KAC/FokV,EAAkB,oCAAsC,IAExDhgM,IAAKsvV,GACR,mCAAyB/6X,YAAaA,IACrC9zG,EAAW,KAAO,mCAA+B0qS,SAAUmkM,KAE9D,+BAAK1kZ,UAAU,qBACb,yCAEF,+BAAKA,UAAU,2BACb,yCAEF,+BAAKA,UAAU,qBACZhuE,GAAgBA,EAAauJ,eAAiBvJ,EAAaw1E,oBAC1D,wCACE,mCAAoB2jB,UAAU,EACVrrF,YAAagzF,EAAc,KAC/C,mCAAqB3H,UAAU,EACVrrF,YAAagzF,EAAc,MAEhD,KACH56B,EACC,mCAAqBA,SAAUA,IAC7B,KAIHk9P,EAAkB,wCAAiC,MAErDv/U,IAAa,EAAD,mBAAsB,KAAO,0CAKhD4ue,EAAkBntV,UAAY,CAC5BjwD,mBAAoB,UAAU8sF,MAGhC,IAkBMuR,EAAqB,CACzBroK,gCACA+zC,6C,WAGa,IAAAu0H,aACb,IAAAzkF,UAxBsB,SAACxzG,GAAU,MACkCA,EAAMqY,YAAlEC,EAD0B,EAC1BA,iBAAkBwZ,EADQ,EACRA,iBAAkBtZ,EADV,EACUA,qBACpCqyM,EAAe7qN,EAAMouB,wBAArBy8L,YAF0B,EAGK7qN,EAAMgR,YAArC7I,EAH0B,EAG1BA,SAAU+qG,EAHgB,EAGhBA,kBAGjB,MAAO,CACL56F,mBACAwZ,mBACAtZ,uBACAqyM,cACA1iN,WACAwgT,gBARwB3oT,EAAM0zG,UAAzBi1M,gBASLtpJ,8DACAj2C,wBAAyBlW,EAAkB/2G,UAUpB67L,EAAzB,CAA6C++S,K,8EC3I/C,W,OACA,OACA,Q,IAEA,S,IACA,S,IACA,S,IACA,S,IACA,S,IACA,SACA,QACA,Q,8DAkEe,IAAAvjY,UA5BS,SAACxzG,GAAU,MACaA,EAAMgR,YAA7CqX,EAD0B,EAC1BA,YAAaO,EADa,EACbA,aAAczgB,EADD,EACCA,SADD,EAK7BnI,EAAM0zG,UAFH7wC,EAH0B,EAG1BA,aAAciB,EAHY,EAGZA,kBAAmBM,EAHP,EAGOA,mBAAoBG,EAH3B,EAG2BA,eAM5D,MAAO,CACLp8D,WACAu6D,WAX+B,EAG2CA,WAS1EG,eACAx6C,cACAO,eACAk7C,oBACAM,qBACAG,iBACAw0G,qBAZ6B/4K,EAAM8J,UAA9BivK,qBAaLj8J,uBAZ+B9c,EAAMwc,UAAhCM,0BAiBkB,GAIZ,EAhEgB,SAACk2F,GAAU,IAEjCtwC,EAAmEswC,EAAnEtwC,WAAYoB,EAAuDkvC,EAAvDlvC,kBAAmBM,EAAoC4uC,EAApC5uC,mBAAoBx7C,EAAgBoqF,EAAhBpqF,aACpDpnB,GAAW,IAAA+vY,eAEX+/F,EAAa9ve,GAAYA,EAAS+d,UAAY/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAO0uF,QAEhFvuF,GAAkB,IAAAhB,oBAAmB0nD,GAE3C,OACE,wCACE,mCAASwuB,UAAW,eAAgB5vB,GAAgBoB,GAAsBM,GAAwBkta,EAAsC,GAAzB,yBAC7G,+BAAKh/Y,UAAU,iCACb,mCAAqBkjT,iBAAiB,MAG1C,mCAASljT,UAAW,cAAgB5vB,GAAc0B,IAAuBN,IAAsBwta,EAAa,uBAAyB,KACnI,kCAAQh/Y,UAAU,aAChB,yCAEF,mCAAkBygP,cAAenqT,EAAe,MAElD,mCAAS0pE,UAAW,cAAgB5vB,GAAcoB,IAAsBwta,EAAa,uBAAyB,KAC5G,kCAAQh/Y,UAAW,aAAel1E,EAAkB,qBAAuB,KACzE,yCAEF,+BAAKk1E,UAAU,kCACb,0CAGJ,mCAA8BygP,cAAenqT,EAAe,U,8EC3ClE,W,OACA,OACA,OACA,Q,IAEA,O,IACA,QAEA,QACA,Q,IACA,O,IACA,S,mDAEA,IA2CMovK,EAAqB,CACzBv1H,8BACAiB,4CACAS,+C,WAGa,IAAA8zH,aACb,IAAAxoC,aACE,IAAAj8C,UArBoB,SAACxzG,GAAU,MAC2BA,EAAM0zG,UAA3D5vC,EAD0B,EAC1BA,kBAAmBpB,EADO,EACPA,WAE1B,MAAO,CACL0B,mBAJ+B,EACKA,mBAIpCj8D,SAHiBnI,EAAMgR,YAAlB7I,SAIL27D,oBACApB,aACAs8O,gBAAiBl7O,EAAoBA,EAAkBz4D,UAAUqE,GAAK,GACtEmQ,eAAgB7f,EAAMqN,mBAYG2qL,EAAzB,EAnD4B,SAAChlF,GAAU,IAElC7wF,EAAiF6wF,EAAjF7wF,KAAM2hD,EAA2EkvC,EAA3ElvC,kBAAmBq0H,EAAwDnlF,EAAxDmlF,QAASz0H,EAA+CsvC,EAA/CtvC,qBAAsBS,EAAyB6uC,EAAzB7uC,sBAEzDkiQ,EAAkB,WAEtB3iQ,EAAqB,MACrBS,EAAsBL,EAAkB91D,QACxCmqL,EAAQ17L,MAAK,IAAAggG,oBAAmB34B,EAAkB91D,UAGpD,OACE,wCACE,+BAAKskF,UAAU,mBACb,mCAAY2+J,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,oBACnC4iF,UAAW,6BACXkyF,QAAS6hJ,GACnB,yCAEF,gCAAM/zO,UAAU,mBAAmBkyF,QAAS6hJ,GACzCviQ,EAAoB,mCAAa/4D,QAAS+4D,EAAmBhkD,mBAAmB,IAAU,OAG/F,+BAAKwyE,UAAU,sBACb,gD,8ECrCR,W,OACA,OACA,QAEA,Q,IACA,S,IACA,S,IACA,SACA,Q,IACA,S,8DAgDe,IAAAkhB,UAdS,SAACxzG,GAAU,MACkCA,EAAMqY,YAEzE,MAAO,CACLyZ,iBAJ+B,EAC1BA,iBAILxZ,iBAL+B,EACRA,iBAKvBE,qBAN+B,EACUA,wBASlB,GAIZ,EA9CsB,SAACw6F,GAAU,IAEvClhF,EAA2EkhF,EAA3ElhF,iBAAkBxZ,EAAyD06F,EAAzD16F,iBAAkBE,EAAuCw6F,EAAvCx6F,qBAAsBu6T,EAAiB//N,EAAjB+/N,cAC3DvxU,GAAW,IAAA+vY,eAEb7pD,GAAkB,EAChB4pJ,EAAa9ve,GAAYA,EAAS+d,UAAY/d,EAAS+d,SAAS1d,SAAS,EAAAob,OAAO0uF,QACtF,GAAI2lY,EAAY,CACd,IAAMlsX,GAAgB,IAAAnjB,kBAAiB3pF,EAAkBwZ,EAAkBtZ,GAC3EkvU,EAAkB51T,GAAoB,IAAMszF,EAAcjpH,OAG5D,OACE,wCACE,mCAASm2F,UAAW,cAAgBg/Y,KAAqC,IAAtBx/c,GAA2B41T,GAAmB,uBAAyB,KACvH4pJ,EACC,uCACE,yCAEA,MAEN,mCAASh/Y,UAAW,mCAAqCg/Y,GAAcx/c,GAAoB,IAAM41T,EAAkB,uBAAyB,KAC1I,mCAAwB3U,cAAeA,IACvC,+BAAKzgP,UAAU,sBACb,+C,8ECnCV,W,OACA,OACA,Q,IAEA,S,IACA,S,IACA,S,IACA,SACA,QACA,Q,OACA,Q,IACA,S,IACA,S,IACA,S,IACA,S,mDAEA,IAyCM0lG,EAAqB,CACzBtzH,uC,WAGa,IAAAuzH,aACb,IAAAzkF,UAfsB,SAACxzG,GAIvB,MAAO,CACL2kE,eAJuB3kE,EAAM0zG,UAAxB/uC,eAKLykD,wBAJ0BppH,EAAMgR,YAA3BkiG,kBAIsC/2G,UASpB67L,EAAzB,EA9CiB,SAAChlF,GAAU,IAErBtuC,EAAuEsuC,EAAvEtuC,kBAAmBC,EAAoDquC,EAApDruC,eAAgBwzH,EAAoCnlF,EAApCmlF,QAAS/uE,EAA2BpW,EAA3BoW,wBAE7C8tX,GAAS,IAAAvvV,UAQf,OACE,wCACE,wCACA,wCACA,wCACA,+BAAKr1D,UAAW,cAAgB3tB,IAAmB,EAAA1nD,OAAOE,MAAQisG,EAA0B,sBAAwB,KACjHzkD,IAAmB,EAAA1nD,OAAOE,KAAO,mCAAiBmmN,YAZ9B,WACzB,UAAUz6L,eAAe,EAAAwB,6BAA6BmE,qBACtDk2B,EAAkB,IAClByzH,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,SASwE,MAE1F,wCACA,wCACA,wCACA,+BAAKpZ,UAAU,eAAeo1D,IAAKwvV,GACjC,mCAA+BrkM,SAAUqkM,W,8ECxCjD,W,OACA,OACA,OACA,Q,IAEA,S,IACA,OAEA,Q,OACA,QAMA,QACA,QACA,Q,IACA,S,mDAEA,IA4DMl/S,EAAqB,CACzBpxH,oDACAlC,sCACAgB,oCACAb,4CACApC,+B,WAGa,IAAAw1H,aACb,IAAAxoC,aACE,IAAAj8C,UAxBoB,SAACxzG,GAAU,IAC1BkzG,EAAqBlzG,EAAMgR,YAA3BkiG,kBAD0B,EAEelzG,EAAM0zG,UAA/ChxC,EAF0B,EAE1BA,WAAYiD,EAFc,EAEdA,UAAWhB,EAFG,EAEHA,eACvBu8M,EAAsBlhR,EAAMqN,gBAAgB+B,SAA5C8xQ,mBAEP,MAAO,CACLx+M,aACAiC,iBACAgB,YACAyjD,wBAAyBlW,EAAkB/2G,OAC3C+kR,wBAcyBlpF,EAAzB,EAtE2B,SAAChlF,GAAU,IAEjC7wF,EACmG6wF,EADnG7wF,KAAMg2K,EAC6FnlF,EAD7FmlF,QAAS/uE,EACoFpW,EADpFoW,wBAAyB1mD,EAC2DswC,EAD3DtwC,WAAYkE,EAC+CosC,EAD/CpsC,yBAA0BlC,EACqBsuC,EADrBtuC,kBACnFC,EAAwGquC,EAAxGruC,eAAgBE,EAAwFmuC,EAAxFnuC,qBAAsBc,EAAkEqtC,EAAlErtC,UAAWD,EAAuDstC,EAAvDttC,iBAAkBjD,EAAqCuwC,EAArCvwC,cAErE,GAF0GuwC,EAAtBkuK,mBAGlF,OAAO,KA0BT,OACE,wCACE,mCAAYjwB,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAG,qBACnC4iF,UAAW,sCACN3tB,IAAmB,EAAA1nD,OAAOE,MAAQisG,EAA0B,qBAAuB,uBACnFzjD,IAAc,EAAA1/B,wBAAwBD,OAAS,oCAAsC,IAC1Fw+I,QA7BoB,WAGlC,GAFA,UAAU37I,eAAe,EAAAwB,6BAA6BqB,iBAEjD09E,EACH,OAAO,EAGLzjD,IAAc,EAAA1/B,wBAAwBD,SACxC6+B,EAAqB,KACrB,IAAA42C,qBAAoB,EAAAl2E,mBAAmBC,cAAc,GACrDkgC,EAAiB,EAAAz/B,wBAAwBL,UAGtC88B,EAGHD,GAAc,GAFdmE,GAAyB,GAK3BlC,EAAkBC,IAAmB,EAAA1nD,OAAOE,KAAO,GAAK,EAAAF,OAAOE,MAC/Dg7K,EAAQ17L,KAAKkoE,IAAmB,EAAA1nD,OAAOE,KAAO,EAAAF,OAAOyuF,KAAO,EAAAzuF,OAAOE,QAU/D,yCAEF,mCAAuB6uH,YAAa,EAAA/lG,wBAAwBD,gB,8EC7DlE,W,OACA,OACA,Q,IACA,Q,IACA,S,IAEA,Q,IACA,S,8DAwDe,IAAAwtE,UApBS,SAACxzG,GAAU,IAE1B8kE,EAAqB9kE,EAAM0zG,UAA3B5uC,kBACAr1C,EAAoBzvB,EAAMouB,wBAA1BqB,iBAH0B,EAIGzvB,EAAMgR,YAC1C,MAAO,CACL8zD,oBAGAr1C,mBACApH,YAV+B,EAI1BA,YAOLO,aAX+B,EAIbA,gBAYK,GAIZ,EArDG,SAACoqF,GAKjB,OAF4BA,EAArBluC,oBAEmB,EAAA1gC,cAAcE,MAC/B,KAIP,wCACE,wCACG,SAAC+uK,GAAD,OACC,mCAAcA,YAAaA,OAG/B,kCAAmBi9H,SAAnB,MACG,SAACr0N,GAAD,OACC,wCAOE,mCAA6BA,YAAaA,a,6FCnCtD,O,OACA,OACA,O,IACA,MACA,Q,IAEA,OAEA,QACA,QACA,QACA,Q,IAMA,S,IACA,SACA,Q,OACA,QACA,QACA,U,mDAEA,IAgBMk7X,EAAe,SAACnkY,GAAU,IAEvBrtC,EAEsBqtC,EAFtBrtC,UAAWd,EAEWmuC,EAFXnuC,qBAAsBH,EAEXsuC,EAFWtuC,kBAAmByzH,EAE9BnlF,EAF8BmlF,QAASkb,EAEvCrgG,EAFuCqgG,YAAa3tI,EAEpDstC,EAFoDttC,iBAAkBjD,EAEtEuwC,EAFsEvwC,cACjG0B,EAC2B6uC,EAD3B7uC,sBAAuB0B,EACImtC,EADJntC,mBAAoBC,EAChBktC,EADgBltC,YAAa39D,EAC7B6qG,EAD6B7qG,SAAU0X,EACvCmzF,EADuCnzF,eAAgBoP,EACvD+jF,EADuD/jF,aAAc9M,EACrE6wF,EADqE7wF,KAChGinG,EAA2BpW,EAA3BoW,wBAEI5nH,GAAW,IAAA+vY,eANa,GAOc,IAAA1oP,UAAS,IAPvB,qBAOvBuuV,EAPuB,KAOPC,EAPO,MAS9B,IAAAhuX,YAAU,WACRjzB,YAAW,WACTvwB,GAAmB,KAClB,KACCrkE,GAAYA,EAAS+d,UACvB83d,EAAkB71e,EAAS+d,YAG5B,IAEH,IAAM+3d,EAAuB,SAAC/mO,GAC5B,UAAU1nO,eAAe0nO,GACzBl9D,GAAY,WACVxuI,EAAqB,IACrBa,EAAiB,EAAA//B,iBAAiBC,SAC9B/lB,EAAeM,UAAYowP,IAAmB,EAAAlmO,6BAA6BuE,gCAE7E81B,EAAkB,EAAAznD,OAAOkpB,OACzBgyJ,EAAQ17L,KAAK,EAAAwgB,OAAOkpB,YAGxB,IAAAs1E,qBAAoB,EAAAl2E,mBAAmBC,cAAc,GACjD4xc,GAAsC,MAAnBA,GACrBj/S,EAAQ17L,KAAK26e,IAeXG,EAAqBpve,GAAY,CAAC,EAAAw9B,iBAAiBE,gBAAiB,EAAAF,iBAAiBK,QAAQnkC,SAAS8jE,GAEtG4sU,GAAwB,IAAAhpP,0BAAyBt6H,EAAc9mB,EAAUihH,GACzEouX,EAlEmB,SAAC7xa,EAAWx9D,EAAUove,EAAoBhlG,GACnE,OAAI5sU,KAAex9D,EAAW,EAAA89B,wBAAwBC,QAAU,EAAAP,iBAAiBE,kBAAqB0sW,EAMjG5sU,EAGD4xa,EACI,kBAAkB5xa,EAAU,WAE7B,kBAAkBA,EAAU,IAL1B,sBANHx9D,EACK,kCAEF,8BA6Desve,CAAmB9xa,EAAWx9D,EAAUove,EAAoBhlG,GAE9EmlG,GAAqB,IAAAz8E,uBAAsB94Y,EAAMtC,GAEvD,OACE,+BAAKyyE,UAAW,oCAAsC3sB,GAAaG,EAAc,2BAA6B,KAC5G,+BAAKwsB,UAAU,wBACb,mCAAkBigT,sBAAuBA,KAE3C,8BAAIjgT,UAAU,yBACXzyE,EAAe0nI,UAAa5hF,KAAex9D,EAAW,EAAA89B,wBAAwBE,MAAQ,EAAAR,iBAAiBE,mBAAsB0sW,EAC1HmlG,EACA,4CAAkBhoe,GAAI8ne,EAAkB,WAE9C,6BAAGllZ,UAAU,wBACX,4CAAkB5iF,GAAI8ne,EAAkB,OAAQ35d,OAAQ,CACtD1a,gBAAgB,IAAAW,2BAChB8uS,yBAA0BzqS,GAAaw9D,IAAc,EAAA1/B,wBAAwBE,MACzEuxc,EACAA,EAAmB1ze,kBAG1B2hE,EAAY,mCAAmBgya,WAAYL,IAC1C,+BAAKhlZ,UAAU,2BACb,mCAAQA,UAAW,mFACdzyE,EAAe8/F,mBAAqB,wBAA0B,qBAC3D6kE,QAxCa,WAC3B9+G,EAAiBC,EAAY,GAC7BxB,EAAsB,IACtB1B,EAAc,MACdiC,EAAkB,IAClB,UAAU77B,eAAe,EAAAwB,6BAA6BoE,qBAClDjtC,GAAYA,EAAS+d,WAAa,EAAAtC,OAAOyuF,MAC3CysF,EAAQ17L,KAAK,EAAAwgB,OAAOyuF,QAkCd,4CAAkBh8F,GAAG,oCAEvB,gCAAM4iF,UAAU,mBAAmBkyF,QAAS,kBAAM8yT,EAAqB,EAAAjtc,6BAA6BqE,wBAClG,4CAAkBh/B,GAAG,sCAQjCyne,EAAavtV,UAAY,CACvBypD,YAAa,UAAU5sB,KAAK9lE,YAG9B,IAgBMq3E,EAAqB,CACzBnzH,4CACAH,sCACAgB,oCACAvB,8CACA1B,8BACAoD,yC,WAGa,IAAA4pF,aACb,IAAAwoC,aACE,IAAAzkF,UA3BoB,SAACxzG,GAAU,MACAA,EAAM0zG,UAAhC/tC,EAD0B,EAC1BA,UAAWG,EADe,EACfA,YADe,EAEK9lE,EAAMgR,YAArC7I,EAF0B,EAE1BA,SAAU+qG,EAFgB,EAEhBA,kBAIjB,MAAO,CACLvtC,YACAG,cACA39D,WACA0X,eAPqB7f,EAAMqN,gBAQ3B4hB,aAPqBjvB,EAAMouB,wBAAtBa,aAQLm6F,wBAAyBlW,EAAkB/2G,UAelB67L,EAAzB,CAA6Cm/S,M,8EC/JjD,W,WACA,MACA,OACA,O,IAEA,Q,IACA,O,IACA,S,IACA,OAEA,QACA,QACA,Q,0DAGA,IAAMS,EAAoB,SAAC5kY,GAAU,IAE5BrtC,EAAyEqtC,EAAzErtC,UAAWD,EAA8DstC,EAA9DttC,iBAAkBiya,EAA4C3kY,EAA5C2kY,WAAYxve,EAAgC6qG,EAAhC7qG,SAa1Cu8N,EAb0E1xH,EAAtBkuK,mBActD/4Q,EAAW,EAAA89B,wBAAwBE,MAAQ,EAAAR,iBAAiBI,YAC5D59B,EAAW,EAAA89B,wBAAwBD,OAAS,EAAAL,iBAAiBK,OAEjE,OACE,+BAAKssD,UAAU,qBACb,+BAAKA,UAAU,6BACZ3sB,IAAc++J,EACb,mCAAQpyI,UAAU,2EACV6iK,QAAQ,WAAW3wE,QAAS,kBAAMmzT,EAAW,EAAAttc,6BAA6BuE,iCAChF,4CAAkBl/B,GAAG,mCAGvB,wCACE,gCAAM4iF,UAAU,kCAAkCkyF,QAAS,WACzDmzT,EAAW,EAAAttc,6BAA6BsE,cAAgBg3B,KAExD,4CAAkBj2D,GAAG,kBAEvB,gCAAM4iF,UAAU,kCAAkCkyF,QA9BpC,WACtB,IAAMgY,EAAW72H,EAAY,EAC7B,UAAU98B,eAAe,EAAAwB,6BAA6ByE,kBAAoB0tJ,GAC1E92H,EAAiB82H,KA4BP,4CAAkB9sL,GAAG,iBACrB,mCAASqM,MAAO,CAAEwuC,SAAU,KAC1B,4CAMV,+BAAK+nC,UAAU,oBACb,mCAAYi/E,MAAOmzD,EACPlhM,KAAMmiC,EACN36D,KAAK,QACLmqP,QAAQ,WACRhiJ,MAAM,UACNy3X,gBAAA,EACAC,gBAAA,EACArtQ,SAzCY,SAACl1H,EAAO9kE,GACpC,UAAUqF,eAAe,EAAAwB,6BAA6BwE,oBAAsBrL,GAC5EkiC,EAAiBliC,SA6CrBo0c,EAAkBhuV,UAAY,CAC5B+tV,WAAY,UAAUlxT,KAAK9lE,YAG7B,IAYMq3E,EAAqB,CACzBtyH,qC,WAGa,IAAA8tC,UAhBS,SAACxzG,GAKvB,MAAO,CACL2lE,UALkB3lE,EAAM0zG,UAAnB/tC,UAMLx9D,SALiBnI,EAAMgR,YAAlB7I,SAML+4Q,mBAL2BlhR,EAAMqN,gBAAgB+B,SAA5C8xQ,sBAa+BlpF,EAAzB,CAA6C4/S,I,8EC5F5D,I,IAAA,MACA,O,IACA,M,IAEA,O,IACA,Q,IACA,S,IACA,S,IACA,SAEA,Q,IACA,O,mDAIA,IAAMC,EAAmB,SAAC7kY,GAAU,IAE3BrtC,EAA2DqtC,EAA3DrtC,UAAWx9D,EAAgD6qG,EAAhD7qG,SAAUuD,EAAsCsnG,EAAtCtnG,YAAa6mY,EAAyBv/R,EAAzBu/R,sBAEzC,OAAQ5sU,GACN,KAAK,EACL,QACE,OACE,mCAAS5pD,MAAO,CAAEwuC,SAAU,KAC1B,+CAGN,KAAK,EACH,OAAO,wCAOT,KAAK,EACH,OAAKgoV,GAAyBpqY,EAE1B,uCACE,yCAKJ,uCACE,gDAGN,KAAK,EACH,OAAO,wCACT,KAAK,EACH,OAAOA,EACL,uCACE,6CAAmBgrG,MAAO,UAAaznG,GAAa6wH,WAEpD,wCACN,KAAK,EACH,OAAO,0CAKbs7W,EAAiBjuV,UAAY,CAC3B2oP,sBAAuB,UAAUzoP,M,WAapB,IAAAt2C,UAVS,SAACxzG,GAAU,IAC1B2lE,EAAa3lE,EAAM0zG,UAAnB/tC,UAD0B,EAED3lE,EAAMgR,YACtC,MAAO,CACL20D,YACAx9D,SAL+B,EAE1BA,SAILuD,YAN+B,EAEhBA,eAQJ,CAAyBmse,I,wGC5ExC,OACA,O,IACA,MACA,QACA,QACA,Q,mDAEA,IAAMC,EAAwB,SAAC3ve,GAE7B,QADgB,IAAArE,4BAEd,IAAK,UACH,MAAO,CAAC,aAAc,aAAc,iBACtC,IAAK,cACH,MAAO,CAAC,YAAa,aAAc,iBACrC,QACE,OAAOqE,EACH,CAAC,YAAa,iBAAkB,cAChC,CAAC,YAAa,iBAAkB,gBAIpC4ve,EAA8B,SAAC/kY,GAAU,IAKvC,EAHCiJ,EAAoCjJ,EAApCiJ,YAAat2C,EAAuBqtC,EAAvBrtC,UAAWx9D,EAAY6qG,EAAZ7qG,SAC3B+yX,EAAY,KAEV88G,GAAA,gCAAkB,uGAGhBp1d,GAAS,IAAAC,oBACTo1d,EAAqBH,EAAsB3ve,GAE7Cw0F,EAAgB,GACpBs7Y,EAAmBnye,SAAQ,SAAAkI,GACzB,IAAMsW,EAAe1B,EAAOgb,wBAAwB5vB,GAChDsW,GAAgBA,EAAauJ,eAC/B8uE,EAAclgG,KAAK6nB,MAIjB4zd,EAdgB,+CAcS,oIACFv7Y,EADE,yEAClBr4E,EADkB,QAErBwqE,EAASxqE,EAAakqE,oBAAsBlqE,EAAakqE,mBAAmBryF,QAAUmoB,EAAakqE,mBAAmB,GAAGD,MAAMO,OACjIxqE,EAAakqE,mBAAmB,GAAGD,MAAMO,OACzCxqE,EAAauJ,cAAc0gE,MAAMO,OACrCmtB,EAAYC,QAAQ8lH,yBAAyBlzI,EAAQxqE,EAAatW,QALvC,UAMrB,IAAIlQ,SAAQ,SAAAC,GAAA,OAAWm9X,EAAY9kS,WAAWr4F,EAlB/B,QAYM,wQAQ7Bm9X,EAAY9kS,WAAW8hZ,EAAwB,GARlB,8EAdT,8DAyBhBA,IAzBgB,kDAAlB,4CA4CN,OAhBA,IAAA7uX,YAAU,WACR,GAAKpN,GAAgBA,EAAYC,QAGjC,OAAIv2C,IAAc,EAAAhgC,iBAAiBG,eACjCujH,aAAa6xO,QACbj/Q,EAAYC,QAAQs4I,KAAKv4I,EAAYC,QAAQztG,MAAMk5G,UAGrDqwX,IACO,WACL3uV,aAAa6xO,OAGd,CAACv1T,IAEG,MAGToya,EAA4BnuV,UAAY,CACtC3tC,YAAa,UAAU58G,Q,WAqBV,IAAAm0G,UAlBS,SAACxzG,GAAU,MACMA,EAAM0zG,UAAtC/tC,EAD0B,EAC1BA,UAAWb,EADe,EACfA,kBACXr1C,EAAoBzvB,EAAMouB,wBAA1BqB,iBAF0B,EAGazvB,EAAMgR,YACpD,MAAO,CACL8zD,oBACAa,YACAl2C,mBACApH,YAR+B,EAG1BA,YAMLO,aAT+B,EAGbA,aAOlBzgB,SAV+B,EAGCA,YAWT,GAIZ,CAA6C4ve,I,8EC/F5D,I,IAAA,MACA,OACA,O,IAEA,O,IACA,S,IAEA,Q,IACA,SACA,QACA,QACA,Q,mDAGA,IA2DM//S,EAAqB,CACzBnzH,6C,WAGa,IAAA2uC,UAjBS,SAACxzG,GAAU,MACeA,EAAM0zG,UAA/C5vC,EAD0B,EAC1BA,kBAAmB0D,EADO,EACPA,mBAI1B,MAAO,CACLr/D,SAJiBnI,EAAMgR,YAAlB7I,SAKL27D,oBACA0D,qBACA1qD,uBAN+B9c,EAAMwc,UAAhCM,0BAc+Bk7K,EAAzB,EA/DW,SAAChlF,GAAU,IAE5BnuC,EAAyEmuC,EAAzEnuC,qBAAsBf,EAAmDkvC,EAAnDlvC,kBAAmB0D,EAAgCwrC,EAAhCxrC,mBAAoBr/D,EAAY6qG,EAAZ7qG,SAEpE,IAAK27D,EACH,OAAO,KAKT,GAFkB0D,EAAXvvC,QAGL,OAAO,KAKT,KAFwB,IAAA7b,oBAAmB0nD,GAGzC,OAAO,KAGT,IAAMqtV,EAAoB,WACxBtsV,EAAqB,EAAAzgC,cAAckB,cAGrC,OACE,mCAAagtD,UAAU,kBAAkB4gH,eAAe,cAAc1uB,QAAS,kBAAM,QAClF,kBACC,+BAAKlyF,UAAU,eACb,+BAAK5iF,GAAG,UACN,yCAEF,+BAAK4iF,UAAU,qBACb,4CAAkB5iF,GAAG,oCAEvB,mCAAQ4iF,UAAW,kEACdnqF,EAAW,GAAK,uBACbinS,UAAW,wCACX5qH,QAAS2sO,GACf,4CAAkBzhZ,GAAG,8C,8ECpDjC,I,IAAA,M,IACA,SAEYuxc,E,wJAAZ,S,6DAEsC,WAEpC,IAAMxX,EAAiB,CACrByX,MAAM,EACNC,UAAU,EACVF,gBACAG,iBAAkB,CAChBC,oBAAqB,mBAIzB,OACE,mCAAQ7uT,QAASi3S,M,qkPCjBrB,I,IAAA,M,IAEA,S,IACA,S,IACA,SACA,OACA,QACA,Q,8DA6Be,IAAAj2V,UAVS,SAACxzG,GAAU,MACGA,EAAM0zG,UAAnC/uC,EAD0B,EAC1BA,eAAgBgB,EADU,EACVA,UAEvB,MAAO,CACLx9D,SAFiBnI,EAAMgR,YAAlB7I,SAGLw8D,iBACAgB,eAIW,EA1BU,SAACqtC,GAAU,IAE3BruC,EAAuCquC,EAAvCruC,eAAgBx8D,EAAuB6qG,EAAvB7qG,SAAUw9D,EAAaqtC,EAAbrtC,UAE3Bk7F,EAAWl8F,IAAmB,EAAA1nD,OAAOkpB,MACrC+0X,EAAa/yZ,EAAW,EAAA89B,wBAAwBE,MAAQ,EAAAR,iBAAiBE,gBAE/E,OACE,+BAAKysD,UAAW,uBAA0BuuE,GAAal7F,IAAcu1V,EAAe,4BAA8B,KAChH,wCACA,wCACA,6C,8ECrBN,W,OACA,OACA,O,IAEA,O,IACA,OAEA,Q,IACA,OACA,QACA,QACA,QACA,Q,OACA,Q,mDAEA,IA6CMljO,EAAqB,CACzBnzH,6C,WAGa,IAAA4qF,aACb,IAAAj8C,UAlBsB,SAACxzG,GAAU,MACDA,EAAMgR,YAItC,MAAO,CACLtF,YAN+B,EAC1BA,YAMLvD,SAP+B,EACbA,SAOlBw8D,eANuB3kE,EAAM0zG,UAAxB/uC,eAOL9kD,eANqB7f,EAAMqN,mBAeJ2qL,EAAzB,EAlDqB,SAAChlF,GAAU,IAEzBtnG,EAAqFsnG,EAArFtnG,YAAayW,EAAwE6wF,EAAxE7wF,KAAM0iD,EAAkEmuC,EAAlEnuC,qBAAsB18D,EAA4C6qG,EAA5C7qG,SAAUw8D,EAAkCquC,EAAlCruC,eAAgB9kD,EAAkBmzF,EAAlBnzF,eACpE4yR,GAAY,IAAA9qJ,QAAO,MAGzB,MADgB,IAAAj7I,aAAcmT,EAAeggG,WAC5BhgG,EAAeoI,WAC9B,OAAO,KAGT,IAKMkwd,EAAQxza,IAAmB,EAAA1nD,OAAOkpB,OAASh+B,EAEjD,OACE,+BAAKmqF,UAAW,aAAe6lZ,EAAQ,qBAAuB,IACzDzwV,IAAK+qJ,GACR,mCAAYxhD,aAAY9uO,EAAKC,cAAc,CAAC1S,GAAI,oBACpC4iF,UAAU,gDAEVkyF,QAbQ,WACtB,UAAU37I,eAAe,EAAAwB,6BAA6BC,UACtDu6B,EAAqB,EAAAzgC,cAAcC,QAY/B,uCACE,wCAAc8uE,MAAO,UAAaznG,GAAa6wH,kB,8ECxCzD,WACA,OAeMy7D,EAAqB,CACzBrtE,oBAfF,MAeEA,qB,WAGa,IAAAnX,SAAQ,KAAMwkF,EAAd,EAhBe,SAAChlF,GAAU,IAC/B2X,EAAwB3X,EAAxB2X,oBAQR,OAPA,IAAAtB,YAAU,WAER,OADAsB,GAAoB,GACb,WACLA,GAAoB,MAErB,CAACA,IAEG,S,8ECbT,W,OACA,OACA,OACA,QAEA,U,IACA,MACA,QACA,Q,8DA2Ee,IAAAstE,aACb,IAAAxoC,aACE,IAAAj8C,UAXoB,SAACxzG,GACvB,MAAO,CACLkzG,kBAAmBlzG,EAAMgR,YAAYkiG,qBAId,GAKvB,EA3EmC,SAACF,GAAU,IACzCmlF,EAAkBnlF,EAAlBmlF,QAASjsL,EAAS8mG,EAAT9mG,MACVkse,GAAiB,IAAAzwV,QAAO,MACxB19B,EAAO/9G,EAAMs2G,QAAUt2G,EAAMs2G,OAAOyH,KAAO,EAC3Cu6V,EAAY,2CAGZC,EAAS,CACbhnd,EAAG+md,EAAY,SACf59Z,EAAG49Z,EAAY,SACf39Z,EAAG29Z,EAAY,SACf7lD,EAAG6lD,EAAY,SACf5kD,EAAG4kD,EAAY,SACf19Z,EAAG09Z,EAAY,WAGjB,IAAAn7V,YAAU,aACHY,GAAQA,EAAO,IAClBkuE,EAAQ17L,KAAK,0BAEX27e,IACFA,EAAel8X,QAAQ+qS,OACvBmxF,EAAel8X,QAAQm8X,MAAMpxF,OAC7B7wT,YAAW,WACTgiZ,EAAel8X,QAAQ+qS,OACvBmxF,EAAel8X,QAAQm8X,MAAMpxF,SAE5B,QAGJ,CAACmxF,EAAgBnuX,IAYpB,OACE,+BAAK33B,UAAU,uBACb,+BAAKA,UAAU,kBACb,kCACEo1D,IAAK0wV,EACLlxF,aAAA,EACAw9D,MAAO1xW,EAAM3qF,YAAc,IAC3B8+X,UAAA,EACAmxF,OAAA,EACA7xe,IAAKg+c,EAAOx6V,KAEd,kCAAQ33B,UAAW0gB,EAAM3qF,YAAc,IACnC,+CACA,+CACIm8J,QAvBU,WACW,IAA5BxxE,EAAM9mG,MAAMs2G,OAAOyH,MACtBkuE,EAAQ17L,KAAK,mBACb,UAAMkvB,UAAS,IAAAi/F,uBAAsB,EAAAtlE,WAAWE,YAEhD2yI,EAAQ17L,KAAK,0BAA4Bu2G,EAAM9mG,MAAMs2G,OAAOyH,KAAO,MAmB/D,4CAAkBv6G,GAAa,IAATu6G,EAAa,2BAA6B,qC,8ECnE1E,I,IAAA,MACA,OACA,OACA,Q,IACA,SAEA,U,IACA,S,8DAuCe,IAAAguE,aACb,IAAAxoC,aACE,IAAAj8C,UAXoB,SAACxzG,GACvB,MAAO,CACLkzG,kBAAmBlzG,EAAMgR,YAAYkiG,qBAId,GAKvB,EAvCwB,SAACF,GAAU,IAC9B9mG,EAAS8mG,EAAT9mG,MAKD4S,EAAM,iDAJC5S,EAAMs2G,OAASt2G,EAAMs2G,OAAO94F,KAAO,MAIqB,OAYrE,OACE,+BAAK4oE,UAAU,QACb,+BAAKA,UAAU,WAZC,WAClB,QAAQ,IAAAqpT,kBACN,KAAK,EAAAC,YAAYC,QACf,OAAO,mCAAqB/8X,IAAKA,IACnC,KAAK,EAAA88X,YAAYE,IACjB,KAAK,EAAAF,YAAYG,QACf,OAAO,mCAAUj9X,IAAKA,KAQrBk9X","file":"js/bundle.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".min.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// The chunk loading function for additional chunks\n \t// Since all referenced chunks are already included\n \t// in this file, this function is empty here.\n \t__webpack_require__.e = function requireEnsure() {\n \t\treturn Promise.resolve();\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonpQuickQuote\"] = window[\"webpackJsonpQuickQuote\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([2709,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import {createStore, applyMiddleware, compose} from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport {reducers} from './reducers';\r\n\r\n// const reduxDevtoolsExtensionOptions = {\r\n// actionSanitizer: (action) => { // https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md#actionsanitizer--statesanitizer\r\n// console.log('action', action);\r\n// return action\r\n// },\r\n// trace: true,\r\n// traceLimit: 25\r\n// };\r\n\r\nconst createStoreWithMiddleware = compose(\r\n applyMiddleware(\r\n thunk\r\n ),\r\n window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : f => f\r\n // window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__(reduxDevtoolsExtensionOptions) : f => f\r\n)(createStore);\r\n\r\n\r\n// const store = createStore(\r\n// reducers,\r\n// window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()\r\n// );\r\n\r\nconst store = createStoreWithMiddleware(reducers);\r\n\r\nexport default store;\r\n","const __bucketName = 'kv3';\r\nlet _zoomLevel = 0;\r\n\r\nlet _isDemo = null;\r\nlet _isShowroomMode = false;\r\nlet _isTimeoutDisabled = false;\r\nlet _isTabletMode = false;\r\nlet _kioskConfigs = {};\r\nlet _userInfo = {};\r\nlet _kioskStandAlone = document.kvConfig && document.kvConfig.kioskMode && (\r\n// eslint-disable-next-line no-restricted-globals\r\n (parent && parent.window && parent.window.app && parent.window.app.db) ||\r\n// eslint-disable-next-line no-restricted-globals\r\n (parent.parent && parent.parent.window && parent.parent.window.app && parent.parent.window.app.db)\r\n);\r\n// eslint-disable-next-line no-restricted-globals\r\nlet _parent = parent || null;\r\n// eslint-disable-next-line no-restricted-globals\r\nif(_kioskStandAlone && parent && parent.parent && parent.parent.window && parent.parent.window.app)\r\n// eslint-disable-next-line no-restricted-globals\r\n _parent = parent.parent;\r\n\r\ntry {\r\n if(parent && parent.exitEditQuote) { //editing from dashboard\r\n _parent = parent;\r\n }\r\n} catch (e) {\r\n //console.log('Error accessing window.parent.property ', e)\r\n console.log('running in iframe on remote site');\r\n}\r\n\r\nexport const UseFullSizeImages = window.location.href.indexOf('fsi=') !== -1;\r\n\r\nexport const IS_OFFLINE_MODE = document.kvConfig.offlineMode || window.location.href.includes(\"offlineMode\");\r\nexport const USE_SERVER_CACHING = true;\r\nexport const AVAILABLE_VISUALIZERS = {\r\n Bathroom: \"Bathroom\",\r\n Kitchen: \"Kitchen\",\r\n Fireplace: \"Fireplace\",\r\n LaundryRoom: \"LaundryRoom\",\r\n};\r\nexport const BATHROOM_VISUALIZER_TYPES = [\"Bathroom\", \"BV\", \"bvScene\", \"bvLook\"];\r\nexport const AVAILABLE_VISUALIZER_TYPES = {\r\n Bathroom: \"Bathroom\", // toolVersion 4\r\n Kitchen: \"Kitchen\", // toolVersion 4\r\n kvScene: \"kvScene\", // toolVersion 5\r\n bvScene: \"bvScene\", // toolVersion 5\r\n bvLook: \"bvLook\", // toolVersion 5\r\n Fireplace: \"Fireplace\", // toolVersion 6\r\n LaundryRoom: \"LaundryRoom\", // toolVersion 6\r\n};\r\n\r\nexport const NAVIGATION_TYPES = {\r\n qkb: \"qkb\", // regular ui\r\n look: \"look\", // lixil 1\r\n product: \"product\", // lixil 2\r\n};\r\n\r\nexport const IS_LIXIL_SERVERS = window.location.host.includes(\"qkandb\")\r\n || window.location.host.includes(\"kbquote\")\r\n || window.location.host.includes(\"grohe\")\r\n || window.location.host.includes(\"americanstandard-us\")\r\n || (document.kvConfig.domain && document.kvConfig.domain.includes(\"qkandb.net\"))\r\n || (document.kvConfig.domain && document.kvConfig.domain.includes(\"kbquote.com\"));\r\n\r\nexport const IS_LIXIL_PRODUCTION = IS_LIXIL_SERVERS && !window.location.host.includes(\"qkandb\");\r\n\r\nif (IS_LIXIL_SERVERS && !document.kvConfig.devMode) {\r\n // document.kvConfig.toolVersion = 6;\r\n if (document.kvConfig.userId === 140818 && document.kvConfig.visualizerType === \"Kitchen\") {\r\n document.kvConfig.toolVersion = 5;\r\n }\r\n if (!window.location.href.includes(\"nav=\")) {\r\n document.kvConfig.navigationType = \"look\";\r\n }\r\n}\r\n\r\nexport const IS_PRODUCT_JOURNEY = document.kvConfig.navigationType === NAVIGATION_TYPES.product || window.location.href.includes(\"nav=product\");\r\nexport const IS_LOOK_JOURNEY = document.kvConfig.navigationType === NAVIGATION_TYPES.look || window.location.href.includes(\"nav=look\");\r\nexport const IS_LIXIL_UI = IS_PRODUCT_JOURNEY || IS_LOOK_JOURNEY;\r\nexport const IS_QKB_UI = document.kvConfig.navigationType === NAVIGATION_TYPES.qkb || !IS_LIXIL_UI;\r\n\r\nexport const USE_FAB_FILTERS_ONLY = window.location.href.includes(\"ff=1\");\r\n\r\nif (IS_PRODUCT_JOURNEY) {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.product;\r\n // document.body.classList.remove('theme-qc');\r\n document.body.classList.add('bv', 'theme-lixil', 'theme-grohe');\r\n} else if (IS_LOOK_JOURNEY) {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.look;\r\n // document.body.classList.remove('theme-qc');\r\n document.body.classList.add('bv', 'theme-lixil', 'theme-look');\r\n} else {\r\n document.kvConfig.navigationType = NAVIGATION_TYPES.qkb;\r\n document.body.classList.add('bv', 'theme-qc');\r\n}\r\n\r\nexport const getCommonVisualizerType = (visualizerType) => {\r\n const stringToCheck = visualizerType || document.kvConfig.visualizerType;\r\n switch (stringToCheck) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return \"bathroom\";\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n return \"kitchen\";\r\n case \"Fireplace\":\r\n return \"fireplace\";\r\n case \"LaundryRoom\":\r\n return \"laundryroom\";\r\n default:\r\n return (stringToCheck || \"\").toLowerCase()\r\n }\r\n}\r\n\r\nexport const AVAILABLE_LANGUAGES = [\"en-US\",\"en-AU\",\"fr-FR\",\"pl-PL\",\"es-ES\"];\r\nexport const POST_MESSAGES = {\r\n setIframeLanguage: \"SET_IFRAME_LANGUAGE\",\r\n userRegisterTrue: \"analytics_register_success\",\r\n userRegisterFalse: \"analytics_register_error\",\r\n userLoginTrue: \"analytics_login_success\",\r\n userLoginFalse: \"analytics_login_error\",\r\n};\r\n\r\nexport const IS_BATHROOM_OLD_BV_SCENE = window.location.href.includes(\"kitchen8k.quotesflooring\")\r\n || window.location.href.includes(\"bathroom_8k.quotekandb.com\");\r\n\r\nexport const REACT_APP_GOOGLE_API_KEY = \"AIzaSyCU0TUFdkbHi0O4yAUPMPxSC7tzyTy84AY\"; // same as the Solar app\r\n\r\n// export const USE_LIGHT_QT_CAT_REQUEST = (window.location.href.includes(\"quotekandb.com\") // not used anymore, old logic\r\n// || (document.kvConfig.domain === \"https://quotekandb.com\")\r\n// || IS_LIXIL_SERVERS);\r\n\r\n\r\nconst _isQTEmbedded = window.location.href.indexOf('qt=1') !== -1;\r\nconst _isTutorial = window.location.href.indexOf('intro=1') !== -1;\r\nconst _visMgmt = window.location.href.indexOf('visMgmt=1') !== -1;\r\nconst _isDevMode = (window.location.href.indexOf('dev=1') !== -1) || (document.kvConfig.devMode);\r\nconst _showAllVisualizerGroups = (window.location.href.indexOf('all=1') !== -1) || (document.kvConfig.showAllVisualizerGroups);\r\nconst _isMobile = (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4)));\r\n\r\nexport const IS_AS_BATHROOM = (!window.location.href.includes(\"grohe\")\r\n && ([\"dev\", \"bravo2\"].every(subDom => (window.location.host || \"\").split(\".\")[0] !== subDom))) || _isDevMode;\r\n\r\nlet _subdomain = 'demo';\r\n\r\nif (_kioskStandAlone) {\r\n _parent.window.app.db.tables.config.getConfigs((configs) => {\r\n configs.forEach(c => {\r\n _kioskConfigs[c.key] = c.value;\r\n });\r\n console.log('kiosk_configs', _kioskConfigs);\r\n _isShowroomMode = _kioskConfigs['kv-showroom-mode'] || false;\r\n _isTimeoutDisabled = _kioskConfigs['kv-timeout-disabled'] || false;\r\n _isTabletMode = _kioskConfigs['tablet-mode'] || false;\r\n _subdomain = _kioskConfigs['subdomain'];\r\n });\r\n}\r\n\r\nconst Config = {\r\n AmazonS3: {\r\n bucketName: __bucketName,\r\n root: function() {\r\n if(_kioskStandAlone) {\r\n return \"file:///\" + encodeURI(_parent.window.app.userDataPath.replace(/\\\\/g, \"/\")) + \"/resources/\" + __bucketName + \"/\";\r\n }\r\n //return \"https://s3.amazonaws.com/\" + __bucketName + \"/\";\r\n return `http://${__bucketName}.s3.amazonaws.com/`;\r\n }()\r\n },\r\n getScriptPath: function() {\r\n let scripts = document.getElementsByTagName(\"script\");\r\n if(scripts && scripts.length) {\r\n for(let i = 0; i < scripts.length; i++) {\r\n let src = scripts[i].getAttribute('src');\r\n if(src && (src.includes(\"bundle.js\") || src.includes(\"bundle.min.js\"))) {\r\n return src.substring(0, src.lastIndexOf('/'));\r\n }\r\n }\r\n }\r\n },\r\n appRootNode: '.main-wrapper',\r\n layerSize: function () {\r\n return \"1620x1080\";\r\n\r\n //switch (_zoomLevel) {\r\n // case 0: return \"1620x1080\";\r\n // case 1: return \"2419x1613\";\r\n // case 2: return \"3218x2145\";\r\n // case 3: return \"4018x2678\";\r\n // case 4: return \"4817x3211\";\r\n // case 5: return \"\"; // it is actually 5616x3744, but we use the original image which is of this size and doesn't have the size suffix on S3\r\n // default: throw \"Unsupported zoom level: \" + _zoomLevel;\r\n //}\r\n },\r\n\r\n maxZoom: 10,\r\n zoomIn: () => {\r\n if (_zoomLevel < (this.maxZoom - 1)) {\r\n _zoomLevel++;\r\n }\r\n },\r\n\r\n zoomOut: () => {\r\n if (_zoomLevel > 0) {\r\n _zoomLevel--;\r\n }\r\n },\r\n\r\n zoomLevel: () => _zoomLevel,\r\n\r\n /**\r\n * Returns an object of current view size based on zoom level\r\n */\r\n viewSize: () => {\r\n const w = 1620 + (1620 * _zoomLevel / 100.0) * 5;\r\n\r\n return {width: parseInt(w, 10), height: parseInt(w * 0.666667, 10)};\r\n },\r\n demoUserDomains: ['demo', 'cosentino'],\r\n isDemo: function () {\r\n if (_isDemo !== null) {\r\n return _isDemo;\r\n }\r\n\r\n _isDemo = document.kvConfig &&\r\n document.kvConfig.kioskMode &&\r\n this.demoUserDomains.some((d) => document.kvConfig.subdomain.toLowerCase() === d);\r\n return _isDemo;\r\n },\r\n kioskStandAlone: _kioskStandAlone,\r\n kvConfig: document.kvConfig,\r\n isKiosk: document.kvConfig.kioskMode,\r\n isShowroomMode: () => { return _isShowroomMode; },\r\n isTimeoutDisabled: () => { return _isTimeoutDisabled; },\r\n isTabletMode: () => { return _isTabletMode; },\r\n getSubdomain: () => { return _subdomain; },\r\n isMobile: () => _isMobile,\r\n getParent: () => _parent,\r\n isQTEmbedded: () => _isQTEmbedded,\r\n isTutorial: () => _isTutorial,\r\n isDevMode: () => _isDevMode,\r\n showAllVisualizerGroups: () => _showAllVisualizerGroups,\r\n isVisualizerManagement: () => _visMgmt,\r\n parent: _parent,\r\n /**\r\n * Is filled after the customer logins\r\n */\r\n userInfo: () => _userInfo,\r\n /**\r\n * Set user info\r\n * @param userInfo {object}\r\n */\r\n setUserInfo: (userInfo) => _userInfo = userInfo,\r\n\r\n};\r\n\r\nexport default Config\r\n","import forEach from 'lodash/forEach';\r\nimport uniq from \"lodash/uniq\";\r\n\r\nimport {QuotePricing} from 'shared_components';\r\nimport store from '../store';\r\nimport {getInstallationsTotalCost} from \"../reducers/instReducer\";\r\nimport {DISCOUNT_TYPES} from \"../bvcomponents/priceWorksheet/discounstInterface\";\r\nimport {checkIfInCatProperty} from \"./displayLogic\";\r\nimport {PartMenuType} from \"../bvcomponents/visComponents/constants\";\r\nimport {filterFeaturesByValues, isVisualizerRoute, s3FeatureImagePath, splitFeatureName} from \"./utils\";\r\nimport {getCountertopFeatureGroup, getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {\r\n featureIsMatchingQtCatName,\r\n getCurrentQuoteRoomCartItem,\r\n} from \"./categorySwitchingFunctions\";\r\nimport {\r\n BACKSPLASH_LABELS,\r\n CABINET_LABELS, CORNER_LABELS,\r\n COUNTERTOP_LABELS,\r\n EDGE_LABELS,\r\n SQFT_FEATURES\r\n} from \"../bvcomponents/sqft/constants\";\r\nimport sqftConfig from \"../bvcomponents/sqft/components/canvas/store/sqftConfig\";\r\nimport {mm2ToM2, sqInchesToSqFoot} from \"../bvcomponents/sqft/helpers/sqftHelper\";\r\nimport {getBundledFeatures, isInStock} from \"../bvcomponents/look/lookNavigation/lookFunctions2\";\r\nimport {LIXIL_USER_QUERY_PARAMS} from \"../api/look-api\";\r\nimport {CART_ITEM_ADDED_BY} from \"../bvcomponents/shoppingCart/cartItemInterface\";\r\nimport {ROUTES} from \"../routes\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI, IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport {LOOK_WALLS_ONLY} from \"../bvcomponents/look/core/constants\";\r\nimport {getFeaturePriceProperty, numberWithCommas, updatePriceWithMarkUp} from \"./priceFunctions\";\r\nimport {getHardCodedFloFormShopCartCost, isCabinetsFabricator, isCafeCountetops} from \"./fabricatorHardcode\";\r\nimport {getDifferentCurrencyCartItems} from \"./misc2\";\r\nimport {\r\n getCafeCountertopsDeliveryCost,\r\n getCartItemShippingCost\r\n} from \"../bvcomponents/look/grohe/groheCart/groheCartDelivery/deliveryFunctions\";\r\nimport {\r\n getDiscountsForSection,\r\n getFilteredSections,\r\n shouldCalculateDiscount\r\n} from \"../bvcomponents/priceWorksheet/discountFunctions\";\r\n\r\nexport const featureThumbnailUrl = (feature, size) => {\r\n if (feature.menuType === PartMenuType.Complex) {\r\n return feature.partThumbnail\r\n }\r\n return feature.dbFeature.customThumbnail\r\n ? feature.dbFeature.customThumbnail\r\n : feature.dbFeature.thumbnailUrl\r\n ? s3FeatureImagePath(feature.dbFeature.thumbnailUrl, size)\r\n : \"\";\r\n}\r\n\r\nexport const getPartThemeThumbnail = (partThumbnail, activeTheme) => {\r\n if (partThumbnail && partThumbnail.includes(\"/images\") && activeTheme && activeTheme !== \"qc\") {\r\n const splitted = partThumbnail.split(\"/images\");\r\n if (splitted[0] && splitted[1]) {\r\n return splitted[0] + \"/images-\" + activeTheme + splitted[1];\r\n }\r\n }\r\n return partThumbnail\r\n}\r\n\r\nexport const TAX_DISCOUNT_PCT = 25;\r\n\r\nexport const browserIsSafari = () => {\r\n return navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&\r\n navigator.userAgent &&\r\n navigator.userAgent.indexOf('CriOS') === -1 &&\r\n navigator.userAgent.indexOf('FxiOS') === -1;\r\n};\r\nexport const isIOSDevice = () => {\r\n return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\r\n};\r\nexport const isChrome = () => {\r\n return !!navigator.userAgent.match('CriOS');\r\n};\r\nexport const isIphoneX = () => { // https://stackoverflow.com/questions/47226824/iphonex-and-notch-detection\r\n let iPhone = /iPhone/.test(navigator.userAgent) && !window.MSStream;\r\n let aspect = window.screen.width / window.screen.height;\r\n return !!(iPhone && aspect.toFixed(3) === \"0.462\")\r\n};\r\nexport const isAndroid = () => {\r\n return navigator.userAgent && navigator.userAgent.toLowerCase().indexOf(\"android\") > -1;\r\n};\r\nexport const isIframe = () => {\r\n try {\r\n return window.self !== window.top;\r\n } catch (e) {\r\n return true;\r\n }\r\n};\r\nexport const isIE = () => {\r\n return (window.navigator.userAgent.indexOf('MSIE ') > 0)\r\n || (!!window.MSInputMethodContext && !!document.documentMode)\r\n || (window.navigator.userAgent.indexOf('Trident/') > 0)\r\n};\r\nexport const isFirefox = () => navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\r\n\r\nlet __pricingProfiles = null;\r\nlet __pricingProfilesHit = false;\r\nconst pricingProfiles = () => {\r\n if (!__pricingProfilesHit) {\r\n __pricingProfilesHit = true;\r\n __pricingProfiles = QuotePricing(store.getState().fabricatorState.pricingPreset);\r\n }\r\n\r\n console.log(\"__pricingProfiles\", __pricingProfiles);\r\n\r\n return __pricingProfiles;\r\n};\r\n\r\nexport const FEATURE_INSTALLATION = 1;\r\nexport const FEATURE_REGULAR = 2;\r\nexport const FEATURE_STONE = 3;\r\n\r\nexport const getFeatureType = dbFeature => {\r\n if (dbFeature && dbFeature.isInstallation)\r\n return FEATURE_INSTALLATION;\r\n if (dbFeature && (!dbFeature.stonePricingId || dbFeature.stonePricingId.length === 0 || dbFeature.stonePricingId[0] === -1))\r\n return FEATURE_REGULAR;\r\n return FEATURE_STONE;\r\n};\r\n\r\n/**\r\n *\r\n * @param cartItem {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @return {cartItemInterface}\r\n */\r\nexport const detectComplexLaborCartItem = (cartItem) => {\r\n return cartItem.cartFeature && (cartItem.partId === \"installation\")\r\n && cartItem.cartFeature.dbFeature.autoAddToCart && cartItem.cartFeature.dbFeature.complexLogic\r\n}\r\n\r\nconst hardcodedFloformV5Features = [\"Costco Shop Card\", \"Costco Citi Visa Cardholder\", \"Costco Executive Members\"];\r\n\r\n/**\r\n *\r\n * @param forQuote {any} get total prices only for specific quote (number or null)\r\n * @param calculateDiscount {boolean}\r\n * @param cartItemsToCount {array}\r\n * @param withNotInStock {boolean}\r\n * @return {object}\r\n */\r\nexport const getTotalPrice = (forQuote = null, calculateDiscount = true, cartItemsToCount = null, withNotInStock = false) => {\r\n const state = store.getState();\r\n let cartItems = cartItemsToCount || state.cartState.cartItems;\r\n if (IS_LIXIL_UI && !cartItemsToCount) {\r\n cartItems = cartItems.filter(cartItem => {\r\n if ((IS_PRODUCT_JOURNEY && cartItem.addedBy !== CART_ITEM_ADDED_BY.user) || cartItem.isRemoved) {\r\n return false\r\n }\r\n if (withNotInStock) {\r\n return !getBundledFeatures(cartItem.cartFeature).length\r\n }\r\n return isInStock(cartItem.cartFeature) && !getBundledFeatures(cartItem.cartFeature).length\r\n });\r\n }\r\n const instList = state.instState.instList;\r\n const {fabricatorTaxes, settings} = state.fabricatorState;\r\n const {sureTax} = state.cartState;\r\n\r\n let materialPrice = 0;\r\n let materialTaxes = 0;\r\n let totalDeliveryCost = 0;\r\n let priceTaxes = Array.isArray(fabricatorTaxes) ? fabricatorTaxes.map(fabTax => {\r\n const {id, state, materialRate, laborRate, nameIntl} = fabTax;\r\n return {id, state, materialRate, laborRate, nameIntl, materialTax: 0, laborTax: 0}\r\n }) : [];\r\n let installationPrice = getInstallationsTotalCost(instList);\r\n\r\n if (Number.isInteger(forQuote)) { // get total prices only for specific quote\r\n cartItems = cartItems.filter(cartItem => cartItem.currentQuote === forQuote)\r\n }\r\n\r\n let multipliedCostUsed = false;\r\n\r\n cartItems\r\n .sort((a, b) => (a.partId === \"installation\") - (b.partId === \"installation\"))\r\n .forEach(cartItem => {\r\n\r\n if (getDifferentCurrencyCartItems(settings, [cartItem]).length && !cartItemsToCount) {\r\n return false\r\n }\r\n\r\n if (multipliedCostUsed && detectComplexLaborCartItem(cartItem)) {\r\n return false\r\n }\r\n\r\n if (cartItem.cartFeature && hardcodedFloformV5Features.some(name => cartItem.cartFeature.dbFeature.sharedFeatureName === name)) {\r\n // if (cartItem.cartFeature.dbFeature.sharedFeatureName !== \"Costco Shop Card\") {\r\n return false\r\n // }\r\n }\r\n\r\n const dbFeature = cartItem.cartFeature.dbFeature;\r\n let featurePrice = 0;\r\n\r\n if (parseFloat(cartItem.displayFakePrice) === cartItem.displayFakePrice) {\r\n featurePrice = cartItem.displayFakePrice\r\n } else {\r\n const featureType = getFeatureType(dbFeature);\r\n switch (featureType) {\r\n case FEATURE_INSTALLATION:\r\n // installation dbFeature\r\n //installationPrice += calculateFeatureCost(cartItem.cartFeature, cartItem.quantity);\r\n // never gets here\r\n break;\r\n case FEATURE_REGULAR:\r\n // regular dbFeature, part of the total cost\r\n featurePrice = calculateFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItems, cartItem.fromQtCategory, cartItem.currentQuote);\r\n break;\r\n case FEATURE_STONE: {\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n // dbFeature stone related\r\n const stoneCost = calculateStoneCost(\r\n dbFeature,\r\n cartItem.quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n cartItem.partId === SQFT_FEATURES.slabs && state.sqftSlabState.isSlabPricingEnabled, //cartItem.shouldUseSlabPricing, // calculate shouldUseSlabPricing globally and not per cItem\r\n settings,\r\n state.cartState,\r\n );\r\n const multipliedCost = multiplySlabCostForFeature(cartItem.cartFeature, cartItem.quantity, state, cartItem);\r\n if (multipliedCost && cartItem.partId !== \"slabs\") {\r\n featurePrice = multipliedCost;\r\n multipliedCostUsed = true;\r\n } else {\r\n featurePrice = stoneCost || calculateFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItems, cartItem.fromQtCategory, cartItem.currentQuote);\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const productPriceAfterDiscount = calculateDiscount\r\n ? getQuotePriceWithDiscounts({materialPrice:featurePrice}, [], true)\r\n : featurePrice\r\n materialPrice = materialPrice + productPriceAfterDiscount;\r\n if (fabricatorTaxes && !dbFeature.notTaxable && !settings.sureTax) {\r\n if (Array.isArray(fabricatorTaxes)) {\r\n priceTaxes = priceTaxes.map(tax => {\r\n tax.materialTax += productPriceAfterDiscount * tax.materialRate / 100;\r\n return tax\r\n })\r\n } else {\r\n materialTaxes += productPriceAfterDiscount * fabricatorTaxes.materialRate / 100;\r\n }\r\n }\r\n if (settings.useShipping) {\r\n totalDeliveryCost += getCartItemShippingCost(cartItem);\r\n }\r\n });\r\n\r\n if (isCafeCountetops) {\r\n totalDeliveryCost += getCafeCountertopsDeliveryCost(totalDeliveryCost, cartItems, state);\r\n }\r\n\r\n if ((typeof sureTax === \"number\") && sureTax > 0) {\r\n materialTaxes = sureTax;\r\n }\r\n\r\n const result = {\r\n materialPrice: Math.round(materialPrice * 100) / 100,\r\n installationPrice: Math.round(installationPrice * 100) / 100,\r\n materialTaxes: Math.round(materialTaxes * 100) / 100,\r\n totalDeliveryCost: Math.round(totalDeliveryCost * 100) / 100,\r\n priceTaxes,\r\n installationTaxes: 0,\r\n multipliedCostUsed,\r\n };\r\n\r\n if (fabricatorTaxes) {\r\n result.installationTaxes = Array.isArray(fabricatorTaxes)\r\n ? fabricatorTaxes\r\n .filter(fabTax => fabTax.isEnabled)\r\n .reduce((acc, tax) => acc + (result.installationPrice * tax.laborRate / 100.0), 0)\r\n : result.installationPrice * fabricatorTaxes.laborRate / 100.0;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport function getQuotePriceWithDiscounts(totalPriceObject, ignoreDiscounts = [], splitStaticPrice = false) {\r\n const state = store.getState();\r\n let totalPrice = totalPriceObject.materialPrice;\r\n if (state.fabricatorState.settings.priceWorksheetEnabled) {\r\n const discountSections = getFilteredSections(state.priceWorksheetState.discountSections);\r\n discountSections.forEach(discountSection => {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, state.priceWorksheetState.customAddedDiscounts));\r\n allDiscounts.forEach(discount => {\r\n if (shouldCalculateDiscount(discount)\r\n && (!ignoreDiscounts.length || ignoreDiscounts.every(ignoreDiscount => ignoreDiscount.id !== discount.id))) {\r\n totalPrice = (discount.type === DISCOUNT_TYPES.price)\r\n ? totalPrice - (splitStaticPrice ? discount.amount / state.cartState.cartItems.length : discount.amount)\r\n : totalPrice * (1 - discount.amount/100) // total - percent\r\n }\r\n })\r\n })\r\n }\r\n return totalPrice;\r\n}\r\n\r\nexport function getQuotePriceWithTaxes(totalPriceObject) {\r\n const taxes = totalPriceObject.priceTaxes.length\r\n ? totalPriceObject.priceTaxes.reduce((acc, tax) => acc + tax.materialTax, 0)\r\n : totalPriceObject.materialTaxes;\r\n\r\n const totalPrice = totalPriceObject.totalDeliveryCost + totalPriceObject.materialPrice + taxes + totalPriceObject.installationPrice + totalPriceObject.installationTaxes;\r\n return +toFixedPrice(totalPrice);\r\n}\r\n\r\nexport function getDeliveryCost(deliveryList) {\r\n if (!deliveryList) {\r\n deliveryList = store.getState().cartState.deliveryList || [];\r\n }\r\n let deliveryCostArray = [];\r\n deliveryList.forEach(delivery => {\r\n // const activeDelivery = deliveryList.find((del, deliveryIndex) => deliveryIndex === delivery.activeDeliveryIndex);\r\n // if (activeDelivery && !deliveryCostArray.includes(activeDelivery.price)) {\r\n // deliveryCostArray.push(activeDelivery.price)\r\n // }\r\n if (delivery.cartItems.length) {\r\n deliveryCostArray.push(delivery.price)\r\n }\r\n });\r\n return deliveryCostArray.reduce((total, cost) => total + cost, 0);\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param state {object}\r\n * @param cartItemToSkip {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @return {number}\r\n */\r\nconst multiplySlabCostForFeature = (feature, quantity, state, cartItemToSkip) => {\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n const allCartItems = state.cartState.cartItems;\r\n const isSlabPricingEnabled = state.sqftSlabState.isSlabPricingEnabled;\r\n\r\n let allSameFeaturesQuantity = quantity;\r\n const checkCartItems = allCartItems.filter(cItem => {\r\n return cItem.cartFeature && (cItem.cartFeature.dbFeature.sharedFeatureName === feature.dbFeature.sharedFeatureName)\r\n });\r\n checkCartItems.forEach(cItem => {\r\n if (cartItemToSkip && (cartItemToSkip.id === cItem.id)) { // current editing on feature page\r\n return\r\n }\r\n // Skip adding quantity if it's a slab and slab pricing is disabled\r\n if (!(cItem.partId === SQFT_FEATURES.slabs && !isSlabPricingEnabled)) {\r\n allSameFeaturesQuantity += cItem.quantity;\r\n }\r\n });\r\n if ((checkCartItems.length > 1 || (checkCartItems[0] && checkCartItems[0].partId !== feature.partId))\r\n && allSameFeaturesQuantity && (allSameFeaturesQuantity !== quantity)) {\r\n let allStoneCost = calculateStoneCost(\r\n feature.dbFeature,\r\n allSameFeaturesQuantity,\r\n stonePricing,\r\n stoneSupplier,\r\n false,\r\n state.fabricatorState.settings,\r\n state.cartState,\r\n );\r\n const laborExist = allCartItems.find(cItem => detectComplexLaborCartItem(cItem)) // here we check existing auto add to cart feature (which is depending on countertop quantity)\r\n if (laborExist) {\r\n allStoneCost += getFeatureCost(laborExist.cartFeature, laborExist.quantity, laborExist.fromQtCategory);\r\n }\r\n // console.log(\"quantity\", quantity);\r\n // console.log(\"allSameFeaturesQuantity\", allSameFeaturesQuantity);\r\n // console.log(\"allStoneCost\", allStoneCost);\r\n return Math.round((quantity * (allStoneCost / allSameFeaturesQuantity)) * 100) / 100\r\n }\r\n return 0\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param withTotalSlabCost {boolean} this is used to calculate first all same name countertops, than display it's total price / quantity\r\n * @param cartItemToSkip {cartItemInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @param useSlabSqftPricing {boolean} this is used to calculate slab pricing assigned from algorithms, slabSqftValue from backed\r\n * @param forQuoteIndex {number} for complex logic\r\n * @return {number}\r\n */\r\nexport const getFeatureCost = (feature,\r\n quantity,\r\n fromQtCategory,\r\n withTotalSlabCost = false,\r\n cartItemToSkip = null,\r\n useSlabSqftPricing = false,\r\n forQuoteIndex = null,\r\n) => {\r\n switch (getFeatureType(feature.dbFeature)) {\r\n case FEATURE_INSTALLATION: // installation dbFeature\r\n case FEATURE_REGULAR:\r\n // regular feature, part of the total cost\r\n return calculateFeatureCost(feature, quantity, null, fromQtCategory, forQuoteIndex);\r\n case FEATURE_STONE: {\r\n // is a stone, calculate using a different algorithm.\r\n const state = store.getState();\r\n const stonePricing = state.serverState.stonePricing;\r\n const stoneSupplier = state.fabricatorState.stoneSupplier;\r\n // feature stone related\r\n // console.log(\"stonePricing\", stonePricing);\r\n // console.log(\"stoneSupplier\", stoneSupplier);\r\n // console.log(\"feature.dbFeature.stonePricingId\", feature.dbFeature.stonePricingId);\r\n const stoneCost = calculateStoneCost(\r\n feature.dbFeature,\r\n quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n useSlabSqftPricing,\r\n state.fabricatorState.settings,\r\n state.cartState,\r\n );\r\n if (stoneCost && withTotalSlabCost && cartItemToSkip.partId !== SQFT_FEATURES.slabs) {\r\n // console.log(\"stoneCost\", stoneCost);\r\n const multipliedCost = multiplySlabCostForFeature(feature, quantity, state, cartItemToSkip);\r\n if (multipliedCost) {\r\n return multipliedCost\r\n }\r\n }\r\n return stoneCost || calculateFeatureCost(feature, quantity, null, fromQtCategory, forQuoteIndex);\r\n }\r\n }\r\n};\r\n\r\nexport const toFixedPrice = (price, withCommas = false) => {\r\n try {\r\n if (Math.round(price) !== price || IS_LIXIL_UI) {\r\n price = price.toFixed(2);\r\n }\r\n } catch(ex) {\r\n console.log(\"Helpers toFixedPrice failed for \", price, ex);\r\n }\r\n return withCommas ? numberWithCommas(price) : price\r\n};\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param withTotalSlabCost {boolean} this is used to calculate first all same name countertops, than display it's total price / quantity\r\n * @param cartItemToSkip {featureInterface} this is used to calculate first all same name countertops, than display it's total price / quantity, exclude current editing\r\n * @param useSlabSqftPricing {boolean} this is used to calculate slab pricing assigned from algorithms, slabSqftValue from backed\r\n * @param forQuoteIndex {number} for the complex logic\r\n * @return {string}{number}\r\n */\r\nexport const toFixedFeatureCost = (feature,\r\n quantity,\r\n fromQtCategory = \"\",\r\n withTotalSlabCost = false,\r\n cartItemToSkip = null,\r\n useSlabSqftPricing = false,\r\n forQuoteIndex = null,\r\n) => {\r\n let price = getFeatureCost(feature, quantity, fromQtCategory, withTotalSlabCost, cartItemToSkip, useSlabSqftPricing, forQuoteIndex);\r\n return toFixedPrice(price);\r\n};\r\n\r\n/**\r\n *\r\n * @return {number}\r\n */\r\nexport const getSingleSlabArea = () => {\r\n const storeState = store.getState();\r\n const slabImageHeight = storeState.sqftSlabState.slabImageHeight;\r\n const slabImageWidth = storeState.sqftSlabState.slabImageWidth;\r\n const slabArea = slabImageHeight * slabImageWidth;\r\n\r\n return sqftConfig.measureUnit === \"Imperial\"\r\n ? Math.ceil10(sqInchesToSqFoot(slabArea), -2)\r\n : mm2ToM2(slabArea);\r\n};\r\n\r\n/**\r\n *\r\n * @param feature {featureInterface} (object which has dbFeature property)\r\n * @param quantity {int}\r\n * @param cartItems {array}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @param quoteIndex {number}\r\n * @return {number}\r\n */\r\nfunction calculateFeatureCost(feature, quantity, cartItems, fromQtCategory, quoteIndex) {\r\n // is a stone, calculate using a different algorithm.\r\n const storeState = store.getState();\r\n const stonePricing = storeState.serverState.stonePricing;\r\n const stoneSupplier = storeState.fabricatorState.stoneSupplier;\r\n const activeQuoteIndex = Number.isInteger(quoteIndex) ? quoteIndex : storeState.quotesState.activeQuoteIndex;\r\n const dbFeature = feature.dbFeature;\r\n\r\n let featureCost = checkIfInCatProperty(feature, \"inCatPrice\", getFeaturePriceProperty(feature), fromQtCategory);\r\n let featureTotalPrice = 0;\r\n\r\n let material = 0;\r\n let materialPrice = 0;\r\n let backsplashMaterial = 0;\r\n\r\n let quoteMaterial = 0;\r\n let quoteBacksplashMaterial = 0;\r\n\r\n let materials = [];\r\n for(let index in storeState.cartState.cartItems) {\r\n let cartItem = storeState.cartState.cartItems[index];\r\n if(cartItem.cartFeature && cartItem.cartFeature.isStoneFeature) {\r\n switch (cartItem.partId) {\r\n case \"vanity_countertop\":\r\n case \"center_island_countertop\":\r\n case \"countertop\":\r\n case \"front_wall\": {\r\n if (cartItem.partId === \"front_wall\") { // added front_wall to the Fireplace material\r\n const visType = cartItem.fromVisualizerType || document.kvConfig.visualizerType;\r\n if (visType !== \"Fireplace\") {\r\n break;\r\n }\r\n }\r\n material += cartItem.quantity;\r\n // dbFeature stone related\r\n const currentPrice = calculateStoneCost(\r\n cartItem.cartFeature.dbFeature,\r\n cartItem.quantity,\r\n stonePricing,\r\n stoneSupplier,\r\n cartItem.partId === SQFT_FEATURES.slabs && storeState.sqftSlabState.isSlabPricingEnabled, //cartItem.shouldUseSlabPricing,// calculate shouldUseSlabPricing globally and not per cItem\r\n storeState.fabricatorState.settings,\r\n storeState.cartState,\r\n );\r\n materialPrice += currentPrice;\r\n if (cartItem.currentQuote === activeQuoteIndex) {\r\n quoteMaterial += cartItem.quantity;\r\n }\r\n materials.push(cartItem.cartFeature.dbFeature);\r\n break;\r\n }\r\n case \"vanity_backsplash\":\r\n case \"backsplash\": {\r\n backsplashMaterial += cartItem.quantity;\r\n if (cartItem.currentQuote === activeQuoteIndex) {\r\n quoteBacksplashMaterial += cartItem.quantity;\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n \r\n const measureUnit = storeState.sqftState ? storeState.sqftState.measureUnit : null;\r\n if (validateFeaturePrice(dbFeature, quantity, measureUnit)) {\r\n let complexLogic = checkIfInCatProperty(feature, \"complexLogic\", dbFeature.complexLogic, fromQtCategory);\r\n if (dbFeature.comparisonType === 'gte+' && dbFeature.comparisonFor !== 'complex') {\r\n const baseQuantity = feature.baseQuantity - 1;\r\n let fQuantity = quantity;\r\n if (dbFeature.comparisonFor === 'material') {\r\n fQuantity = 0; // no material quantity\r\n }\r\n const plus = dbFeature.maxQuantity;\r\n let cost = baseQuantity * featureCost;\r\n for (let i = baseQuantity + 1; i <= fQuantity; i++) {\r\n cost += plus;\r\n }\r\n\r\n featureTotalPrice = cost;\r\n } else if (hardcodedFloformV5Features.some(name => dbFeature.sharedFeatureName === name)) {\r\n if (dbFeature.sharedFeatureName === \"Costco Shop Card\") {\r\n featureTotalPrice = getHardCodedFloFormShopCartCost(storeState.cartState.cartItems);\r\n } else {\r\n const totalPrice = getTotalPrice();\r\n featureTotalPrice = totalPrice.materialPrice * 0.02;\r\n }\r\n } else if (dbFeature.comparisonFor === 'complex' && complexLogic) {\r\n try {\r\n\r\n const $m = material; // amount of square foot of material the feature is using, probably have to be calculated based on the meta data size of the feature\r\n const $b = backsplashMaterial; // we added a new backsplash property, if we need to calculate both, we should have ($m + $b) in the complex logic\r\n const getSqft = (stonePricingId) => {\r\n const stoneSupplierStone = stonePricing[stonePricingId]; // stone supplier stone\r\n if (!stoneSupplierStone) {\r\n return -1\r\n }\r\n const pricingProfileId = stoneSupplierStone.pricingPreset_id;\r\n const quotePricing = __quotePricing || (__quotePricing = pricingProfiles());\r\n var profile = _.first(quotePricing.pricingProfiles.filter((pp) => {\r\n return (pp.Id || pp.id) === pricingProfileId;\r\n }));\r\n if(profile) {\r\n var ppdList = storeState.fabricatorState.settings.useFabricatorCostPrices\r\n ? profile.pricingProfileCostData\r\n : storeState.fabricatorState.settings.showSalePrices\r\n ? profile.pricingProfileDiscountData\r\n : profile.pricingProfileData;\r\n if (Array.isArray(ppdList) && ppdList.length) {\r\n for(var n = ppdList.length - 1; n >= 0; n--) {\r\n let ppd = ppdList[n];\r\n switch(ppd.type)\r\n {\r\n case \"pricing-presets/set-slab\":\r\n if(ppd.slabSqftValue > 0) {\r\n return ppd.slabSqftValue;\r\n }\r\n else {\r\n return parseFloat(ppd.value) / parseFloat(ppd.end);\r\n }\r\n default:\r\n return -1;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n var materialSqft = -1;\r\n for (const m in materials) {\r\n if (Array.isArray(materials[m].stonePricingId)\r\n && materials[m].stonePricingId.length\r\n && materials[m].stonePricingId[0]) {\r\n const msqft = getSqft(materials[m].stonePricingId[0]);\r\n if (msqft > materialSqft) {\r\n materialSqft = msqft;\r\n }\r\n }\r\n }\r\n\r\n const $mc = materialSqft > -1 ? materialSqft : materialPrice / material; // material cost broken down to square foot\r\n const $p = 1; // the per-quantity value of the selected material of the feature\r\n\r\n const $f = quantity; // the feature quantity of the selected feature\r\n const $c = featureCost; // the feature cost of the selected features\r\n const $fa = storeState.cartState.cartItems ? storeState.cartState.cartItems.map(ci => ({\r\n id: ci.cartFeature.dbFeature.id,\r\n quantity: ci.quantity,\r\n name: ci.cartFeature.dbFeature.customDisplayName || ci.cartFeature.dbFeature.displayName,\r\n sharedFeatureName: ci.cartFeature.dbFeature.sharedFeatureName,\r\n groupName: ci.cartFeature.dbFeature.groupName,\r\n wizardGroupId: ci.fromWizardGroupId,\r\n currentQuote: ci.currentQuote,\r\n partId: ci.partId,\r\n })) : []; // an array of key value pairs with the keys being feature id and value being quantity\r\n\r\n if (storeState.wizardState.wizardActiveItem) { // we need to check wizard current selected values to display prices\r\n Object.keys(storeState.wizardState.wizardSelectedValues).forEach(stepIndex => {\r\n const selectedValue = storeState.wizardState.wizardSelectedValues[stepIndex];\r\n if (selectedValue.selectedFeature && selectedValue.quantity) {\r\n $fa.push({\r\n id: selectedValue.selectedFeature.dbFeature.id,\r\n quantity: selectedValue.quantity,\r\n name: selectedValue.selectedFeature.dbFeature.customDisplayName || selectedValue.selectedFeature.dbFeature.displayName,\r\n groupName: selectedValue.selectedFeature.dbFeature.groupName\r\n })\r\n }\r\n })\r\n }\r\n const $room = {\r\n $i: activeQuoteIndex,\r\n $m: quoteMaterial,\r\n $b: quoteBacksplashMaterial,\r\n }\r\n const $other = { // to prevent creating new parameters, all new properties should go here\r\n $useCostPrices: storeState.fabricatorState.settings.useFabricatorCostPrices,\r\n $useDiscountPrices: storeState.fabricatorState.settings.showSalePrices,\r\n $sharedFeatureName: dbFeature.sharedFeatureName,\r\n }\r\n // const $fs = layout.dataObject.features; // its an array of all the fabricator's features\r\n const $fs = []; // its an array of all the fabricator's features\r\n const logic = new Function('$m', '$mc', '$f', '$c', '$fa', '$fs', '$p', '$b', '$room', '$other', complexLogic);\r\n featureTotalPrice = logic($m, $mc, $f, $c, $fa, $fs, $p, $b, $room, $other);\r\n // console.log(888, 'Complex', feature.complexLogic, featureCost, quantity);\r\n } catch (e) {\r\n console.log('Feature complex logic failed.', e);\r\n }\r\n } else if (dbFeature.comparisonType === \"min\" && dbFeature.comparisonFor !== \"complex\") {\r\n if (quantity < dbFeature.baseQuantity) {\r\n featureTotalPrice = featureCost * dbFeature.baseQuantity;\r\n } else {\r\n featureTotalPrice = quantity * featureCost;\r\n }\r\n } else {\r\n featureTotalPrice = featureCost * quantity;\r\n }\r\n }\r\n\r\n if (isNaN(featureTotalPrice)) {\r\n return 0\r\n }\r\n if (storeState.cartState.markUpLogic) {\r\n return updatePriceWithMarkUp(featureTotalPrice, storeState.cartState.markUpLogic, storeState.fabricatorState.settings);\r\n }\r\n return featureTotalPrice;\r\n}\r\n\r\nlet __stoneSupplierStones = null;\r\nlet __quotePricing = null;\r\n\r\nexport function calculateStoneCost(feature, quantity, stonePricing, stoneSupplier, useSlabSqftPricing, fabricatorSettings, cartState) {\r\n if (!feature || (feature.stonePricingId && feature.stonePricingId.length === 1) && feature.stonePricingId[0] === -1) {\r\n // stone was not found\r\n if (feature) {\r\n const price = getFeaturePriceProperty({dbFeature: feature});\r\n if (price > 0) {\r\n return price\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // only one fabricator here\r\n\r\n let minPrice = -1;\r\n const quotePricing = __quotePricing || (__quotePricing = pricingProfiles());\r\n const stoneSupplierStones = __stoneSupplierStones\r\n || (feature.stonePricingId && feature.stonePricingId.length > 0 ? __stoneSupplierStones = feature.stonePricingId.map(_ => stonePricing[_]) : null);\r\n\r\n if (feature.stonePricingId && feature.stonePricingId.length > 0 && feature.stonePricingId[0]) {\r\n feature.stonePricingId.forEach(id => {\r\n let materialPrice = -1;\r\n const stoneSupplierStone = stonePricing[id]; // stone supplier stone\r\n if (quotePricing && quotePricing.hasPricingProfileAssigned(stoneSupplierStone, fabricatorSettings)) {\r\n const fabPrice = quotePricing.calculatePrice(\r\n stoneSupplierStone.pricingPreset_id,\r\n quantity,\r\n null,\r\n useSlabSqftPricing,\r\n getSingleSlabArea(),\r\n feature,\r\n fabricatorSettings\r\n );\r\n if (materialPrice === -1 || fabPrice < materialPrice) {\r\n materialPrice = fabPrice;\r\n }\r\n if (minPrice === -1 || minPrice > materialPrice) {\r\n minPrice = materialPrice;\r\n }\r\n } else if (stoneSupplierStone) {\r\n let price = stoneSupplierStone.price;\r\n if (stoneSupplierStone.pricePlus > 0) {\r\n price = stoneSupplierStone.pricePlus;\r\n }\r\n let material = quantity;\r\n if (stoneSupplierStone.perQuantity > 1) {\r\n material = Math.ceil(material / stoneSupplierStone.perQuantity);\r\n }\r\n let materialPrice = price * parseFloat(material);\r\n\r\n let baseQuantity;\r\n if (stoneSupplierStone.comparisonType === \"gte+\") {\r\n baseQuantity = parseInt(stoneSupplierStone.baseQuantity) - 1;\r\n if (material > baseQuantity) {\r\n let perUnit = parseFloat(stoneSupplierStone.maxQuantity);\r\n const margin = stoneSupplier.margin;\r\n perUnit = calcPriceWithMargin(perUnit, margin);\r\n materialPrice = baseQuantity * price;\r\n forEach(stoneSupplierStones, function (stoneSupplierStoneInner) {\r\n if (stoneSupplierStoneInner.comparisonType === \"between\" &&\r\n material >= stoneSupplierStoneInner.baseQuantity) {\r\n materialPrice = stoneSupplierStoneInner.price;\r\n for (let n = stoneSupplierStoneInner.maxQuantity + 1; n <= baseQuantity; n++) {\r\n materialPrice += price;\r\n }\r\n }\r\n });\r\n for (let i = baseQuantity + 1; i <= material; i++) {\r\n materialPrice += perUnit;\r\n }\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"min\") {\r\n if (parseFloat(material) < stoneSupplierStone.baseQuantity) {\r\n materialPrice = price * parseFloat(stoneSupplierStone.baseQuantity);\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"lte\") {\r\n baseQuantity = parseInt(stoneSupplierStone.baseQuantity);\r\n if (material <= baseQuantity) {\r\n let bFoundOther = false;\r\n forEach(stoneSupplierStones, function (stoneSupplierStoneInner) {\r\n if (stoneSupplierStoneInner.comparisonType === \"lte\" &&\r\n material <= stoneSupplierStoneInner.baseQuantity\r\n && stoneSupplierStoneInner.baseQuantity < baseQuantity) {\r\n bFoundOther = true;\r\n }\r\n });\r\n if (bFoundOther) {\r\n return;\r\n }\r\n }\r\n } else if (stoneSupplierStone.comparisonType === \"between\") {\r\n materialPrice = stoneSupplierStone.price;\r\n }\r\n\r\n if (validStoneSupplierStonePrice(stoneSupplierStone, material)) {\r\n if (minPrice === -1 || minPrice > materialPrice) {\r\n minPrice = materialPrice;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (cartState.markUpLogic) {\r\n minPrice = updatePriceWithMarkUp(minPrice, cartState.markUpLogic, fabricatorSettings);\r\n }\r\n\r\n return Math.trunc(minPrice * 100) / 100;\r\n}\r\n\r\nfunction calcPriceWithMargin(price, margin) {\r\n const total = parseFloat(price);\r\n return (total + (margin * total));\r\n}\r\n\r\n// function calcPriceWithTax(price, tax) {\r\n// const total = parseFloat(price);\r\n// return (total + (tax / 100.0 * total));\r\n// }\r\n\r\nfunction validStoneSupplierStonePrice(stoneSupplierStone, quantity) {\r\n let ret = false;\r\n let material = quantity;\r\n if (stoneSupplierStone.perQuantity > 1) {\r\n material = Math.ceil(material / stoneSupplierStone.perQuantity);\r\n }\r\n switch (stoneSupplierStone.comparisonType) {\r\n case \"lte\":\r\n if (material <= stoneSupplierStone.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"between\":\r\n if (material >= stoneSupplierStone.baseQuantity\r\n && material <= stoneSupplierStone.maxQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"gte\":\r\n case \"gte+\":\r\n if (material >= stoneSupplierStone.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n default:\r\n ret = true;\r\n }\r\n return ret;\r\n}\r\n\r\nfunction validateFeaturePrice(feature, quantity, measureUnit) {\r\n let ret = false;\r\n switch (feature.comparisonType) {\r\n case \"lte\":\r\n if (quantity <= feature.baseQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"between\":\r\n if (quantity >= feature.baseQuantity && quantity <= feature.maxQuantity) {\r\n ret = true;\r\n }\r\n break;\r\n case \"gte\":\r\n case \"gte+\":\r\n if ((quantity >= feature.baseQuantity) || ((measureUnit === \"Metric\") && (quantity > 0) && (feature.baseQuantity === 1))) {\r\n ret = true;\r\n }\r\n break;\r\n default:\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nexport function parseQuery(queryString = null) {\r\n queryString = queryString || window.location.search;\r\n const query = {};\r\n const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\r\n for (let i = 0; i < pairs.length; i++) {\r\n let pair = pairs[i].split('=');\r\n query[decodeURIComponent(pair[0]).toLowerCase()] = decodeURIComponent(pair[1] || '');\r\n }\r\n return query;\r\n}\r\nexport function metaDataToCamelCase(metaData) {\r\n if (!metaData) {\r\n metaData = {}; // it could be null, so default parameter is not working\r\n }\r\n Object.keys(metaData).forEach(key => { // make all metadata keys CamelCased (dashboard saving issue)\r\n if (key[0] !== key[0].toUpperCase()) {\r\n const value = metaData[key];\r\n const camelCased = key.charAt(0).toUpperCase() + key.slice(1);\r\n metaData[camelCased] = value;\r\n delete metaData[key]; // we don't need lowerCased key anymore\r\n }\r\n });\r\n return metaData;\r\n}\r\n\r\nexport const capitalizeFirstLetters = (str) => {\r\n if (!str) {\r\n return \"\"\r\n }\r\n return str.split(\" \").map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(\" \")\r\n}\r\n\r\n// export const getObjectWithLowerCasedKeys = (obj) => {\r\n// let\r\n// key,\r\n// keys = Object.keys(obj),\r\n// n = keys.length,\r\n// newObj={};\r\n// while (n--) {\r\n// key = keys[n];\r\n// newObj[key.toLowerCase()] = obj[key];\r\n// }\r\n// return newObj\r\n// };\r\n\r\nexport const getCurrencySign = (currencyName, fabricatorSettings) => {\r\n switch (currencyName) {\r\n case \"USD\":\r\n default:\r\n return fabricatorSettings.useDifferentCurrencies ? \"USD\" : \"$\";\r\n case \"SPN\":\r\n case \"EUR\":\r\n return \"€\";\r\n case \"GBP\":\r\n return \"£\";\r\n case \"PAB\":\r\n return \"B/.\";\r\n case \"PLN\":\r\n return \"zł\";\r\n case \"ARS\":\r\n return \"$\";\r\n }\r\n};\r\n\r\nexport const getCurrencyPosition = (currencyName) => {\r\n switch (currencyName) {\r\n case \"USD\":\r\n case \"SPN\":\r\n case \"EUR\":\r\n case \"GBP\":\r\n case \"PAB\":\r\n case \"ARS\":\r\n default:\r\n return \"left\";\r\n case \"PLN\":\r\n return \"right\";\r\n }\r\n};\r\n\r\n/**\r\n *\r\n * @param fabricatorSettings {object} fabricatorSettings\r\n * @param price {string|number}\r\n * @param feature {featureInterface}\r\n * @param withSpace {boolean}\r\n * @param alwaysRound {boolean} // returns $10 -> $10.00\r\n * @return {string}\r\n */\r\nexport const getPriceWithCurrency = (fabricatorSettings, price, feature = null, withSpace = false, alwaysRound = false) => {\r\n if (fabricatorSettings.currencyPosition === \"right\") {\r\n return price + fabricatorSettings.currencySign\r\n }\r\n let currencySign = fabricatorSettings.currencySign;\r\n if (fabricatorSettings.useDifferentCurrencies && feature && feature.getFeatureCurrency) {\r\n const separateCurrency = feature.getFeatureCurrency();\r\n if (separateCurrency) {\r\n currencySign = getCurrencySign(separateCurrency, fabricatorSettings);\r\n }\r\n }\r\n if (fabricatorSettings.useDifferentCurrencies) {\r\n if (currencySign === \"USD\") {\r\n withSpace = true;\r\n }\r\n price = numberWithCommas(price);\r\n }\r\n if (currencySign === \"$\") {\r\n const amount = typeof price === \"string\" ? +(price.replace(\",\", \"\")) : price;\r\n const isExact = !alwaysRound && (Number.isInteger(amount) || amount % 1 === 0);\r\n // Create the formatter\r\n const formatter = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n minimumFractionDigits: isExact ? 0 : 2,\r\n maximumFractionDigits: isExact ? 0 : 2,\r\n });\r\n return formatter.format(amount);\r\n }\r\n return withSpace ? currencySign + \" \" + price : currencySign + price\r\n};\r\n\r\nexport const getFeatureIsLocked = (feature, ignoreLocked = false) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const leadCaptureProperty = isVisualizerRoute() || IS_LIXIL_UI ? \"leadCapture\" : \"leadCaptureOnQuote\";\r\n const {fabricatorState, userState, filterState} = store.getState();\r\n\r\n const fabricatorSettings = fabricatorState.settings;\r\n const {isBackend, jobId, canSaveQuote, visualizerManagement} = document.kvConfig;\r\n const isPhoneNumberValidated = userState.isPhoneNumberValidated;\r\n\r\n if (fabricatorSettings.leadCaptureShoppingCart) {\r\n if (IS_LIXIL_UI && (window.location.hash.includes(ROUTES.cart) || window.location.hash.includes(ROUTES.list))) {\r\n return !isPhoneNumberValidated;\r\n } else {\r\n if (window.location.hash.includes(\"materials\")) {\r\n return false\r\n } else if (window.location.hash.includes(\"shoppingcart\")) {\r\n return !isPhoneNumberValidated;\r\n }\r\n }\r\n }\r\n\r\n let featureIsLocked = !(\r\n ignoreLocked\r\n || !fabricatorSettings[leadCaptureProperty]\r\n || (fabricatorSettings[leadCaptureProperty] && visualizerManagement)\r\n || (fabricatorSettings[leadCaptureProperty] && isPhoneNumberValidated)\r\n || (fabricatorSettings[leadCaptureProperty] && (isBackend && jobId && canSaveQuote)));\r\n if (featureIsLocked) {\r\n featureIsLocked = !((feature.dbFeature && feature.dbFeature.unlocked) || isPhoneNumberValidated);\r\n if (!featureIsLocked && !IS_LIXIL_UI) { // search for locked filters // temporary removed from bvLook\r\n const filterValues = feature.dbFeature && feature.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n featureIsLocked = Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = filterState.filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n }\r\n }\r\n return featureIsLocked\r\n};\r\n\r\nexport const sortByOrder = (array) => {\r\n return array.sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0); // sort by order property\r\n};\r\n\r\nexport const objectWithoutProperties = (obj, keys) => {\r\n let target = {};\r\n for (let i in obj) {\r\n if (keys.indexOf(i) >= 0) continue;\r\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\r\n target[i] = obj[i];\r\n }\r\n return target;\r\n}\r\n\r\n/**\r\n * returns array of Ids, etc. [2313743, 2313335, 2320458]\r\n * @param bvState {object}\r\n * @param checkDifferentVisualizers {boolean}\r\n * @return {[number]}\r\n */\r\nexport const getArrayOfIdsFromBvState = (bvState, checkDifferentVisualizers = false) => {\r\n let arrayOfIds = [];\r\n if (bvState) {\r\n Object.keys(bvState).forEach((key) => {\r\n const bvStateValue = bvState[key];\r\n if (Number.isInteger(bvStateValue) && bvStateValue > 50) { // check for layout_type\r\n if (key === \"presetPrice\") { // it is a number and it is more than 12\r\n return\r\n }\r\n arrayOfIds.push(bvStateValue)\r\n } else if (Array.isArray(bvStateValue)) {\r\n bvStateValue.forEach((bvStateValueArrayItem) => {\r\n if (Number.isInteger(bvStateValueArrayItem)) {\r\n arrayOfIds.push(bvStateValueArrayItem)\r\n }\r\n })\r\n } else if (typeof bvStateValue === 'object' && bvStateValue !== null) {\r\n [\"cartItems\", \"displayLogicCartItems\"].forEach((property) => {\r\n if (bvStateValue[property] && bvStateValue[property].length) {\r\n bvStateValue[property].forEach((cartItem) => {\r\n if (checkDifferentVisualizers && (cartItem.fromVisualizerType !== bvState.visualizerType)) {\r\n return // load only current visualizer features\r\n }\r\n if (cartItem.cartFeature && cartItem.cartFeature.dbFeatureId) {\r\n arrayOfIds.push(cartItem.cartFeature.dbFeatureId)\r\n } else if (cartItem.cartFeature && cartItem.fabFeatId) { // support for old logic\r\n arrayOfIds.push(cartItem.fabFeatId)\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n return uniq(arrayOfIds)\r\n}\r\n\r\nexport const getShareUrl = (jobId) => {\r\n const url = new URL(window.location.href);\r\n console.log(\"url\", url);\r\n let searchParams = new URLSearchParams(decodeURIComponent(url.search || \"\").replace(/amp;/gi, \"\"));\r\n [\"show\", \"jobId\", \"mode\", \"saveQuote\", ...LIXIL_USER_QUERY_PARAMS].forEach(param => {\r\n searchParams.delete(param);\r\n });\r\n searchParams.set(\"design\", jobId);\r\n // const shareUrl = url.href\r\n // .replace(/&show=?\\w*?&/, \"&\")\r\n // .replace(/&jobId=\\d*/gi, \"\")\r\n // .replace(/&mode=\\w*/gi, \"\")\r\n // .replace(/&saveQuote=\\w*/gi, \"\")\r\n // .split(\"#/\")[0]\r\n\r\n let baseHref = url.origin + url.pathname;\r\n if (baseHref[baseHref.length - 1] === \"/\") {\r\n baseHref.slice(0, -1);\r\n }\r\n\r\n // const shareUrl = baseHref + \"?\" + searchParams.toString() + url.hash;\r\n const shareUrl = baseHref + \"?\" + searchParams.toString();\r\n // console.log(\"shareUrl\", shareUrl);\r\n return shareUrl\r\n};\r\n\r\nexport const getDefaultRoomName = (messages, quoteRoomType = \"\") => {\r\n switch (quoteRoomType || document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return messages[\"rooms.Bathroom\"]\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n return messages[\"rooms.Kitchen\"]\r\n default:\r\n return quoteRoomType || document.kvConfig.visualizerType || \"\"\r\n }\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @param filterGroups {array}\r\n * @param useCollectionName {boolean}\r\n * @return {string}\r\n */\r\nexport const getStringFeatureName = (feature,\r\n messages,\r\n locale,\r\n fabricatorData,\r\n filterGroups,\r\n useCollectionName = false) => {\r\n if (!feature) {\r\n return \"\"\r\n }\r\n\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && messages) {\r\n if (locale === \"fr-FR\" && messages[\"transDoc.customDisplayName_FR.\" + feature.dbFeature.sharedFeatureName]) {\r\n return messages[\"transDoc.customDisplayName_FR.\" + feature.dbFeature.sharedFeatureName]\r\n } else if (locale === \"pl-PL\" && messages[\"transDoc.customTranslateName_PL.\" + feature.dbFeature.sharedFeatureName]) {\r\n return messages[\"transDoc.customTranslateName_PL.\" + feature.dbFeature.sharedFeatureName]\r\n }\r\n }\r\n\r\n if ((feature.dbFeature.sharedFeatureName === \"additionalCartItem.minimumCharge\")) {\r\n if (fabricatorData.isCaesarStone) {\r\n return `${messages[feature.dbFeature.sharedFeatureName]} (${feature.fromFeatureName})`\r\n }\r\n return messages[feature.dbFeature.sharedFeatureName]\r\n }\r\n\r\n if (!feature.getFeatureName) {\r\n return feature._customDisplayName || feature.customDisplayName || \"\"\r\n }\r\n\r\n return (useCollectionName && !fabricatorData.isEncore)\r\n ? feature.getCollectionName(filterGroups) || feature.getFeatureName()\r\n : feature.getFeatureName()\r\n}\r\n\r\n/**\r\n * @param quoteIndex {number|string}\r\n * @param cartItems {array}\r\n * @param quotes {array}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @return {string}\r\n */\r\nexport const getRoomName = (quoteIndex, cartItems = [], quotes = [], messages, locale, fabricatorData) => {\r\n\r\n quoteIndex = +quoteIndex;\r\n\r\n const getCurentQuoteRoomItem = (quoteIndexToFind) => {\r\n return cartItems.find(cItem => (cItem.currentQuote === quoteIndexToFind) && (cItem.partId === \"room\"))\r\n };\r\n\r\n const quoteRoomNameToCompare = (currentQuoteIndex) => {\r\n const roomCartItem = getCurentQuoteRoomItem(currentQuoteIndex);\r\n if (roomCartItem && roomCartItem.cartFeature && roomCartItem.cartFeature.getLowerCasedCustomDisplayName) {\r\n return roomCartItem.cartFeature.getLowerCasedCustomDisplayName()\r\n }\r\n const quoteRoomType = quotes[currentQuoteIndex] && quotes[currentQuoteIndex].room ? quotes[currentQuoteIndex].room : \"\";\r\n return (getDefaultRoomName(messages, quoteRoomType) || \"\").toLowerCase();\r\n };\r\n\r\n const upperCaseAlp = [\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\"];\r\n const currentRoomName = quoteRoomNameToCompare(quoteIndex);\r\n const quoteRoomType = quotes[quoteIndex] && quotes[quoteIndex].room ? quotes[quoteIndex].room : \"\";\r\n const roomItem = getCurentQuoteRoomItem(quoteIndex);\r\n const baseRoomName = roomItem && roomItem.cartFeature\r\n ? getStringFeatureName(roomItem.cartFeature, messages, locale, fabricatorData)\r\n : getDefaultRoomName(messages, quoteRoomType);\r\n\r\n if (quotes.some((quote, currentQuoteIndex) => {\r\n return (quoteIndex !== currentQuoteIndex) && (quoteRoomNameToCompare(currentQuoteIndex) === currentRoomName)\r\n })) {\r\n let letterIndex = 0;\r\n for (let i = 0; i <= quotes.length; i++) {\r\n if ((i < quoteIndex) && (quoteRoomNameToCompare(i) === currentRoomName)) {\r\n letterIndex++\r\n }\r\n }\r\n return baseRoomName + upperCaseAlp[letterIndex] || \"\"\r\n }\r\n return baseRoomName || \"\"\r\n};\r\n\r\n/**\r\n * @param quoteIndex {number|string}\r\n * @param cartItems {array}\r\n * @param quotes {array}\r\n * @param messages {object}\r\n * @param locale {string}\r\n * @param fabricatorData {object}\r\n * @return {string}\r\n */\r\nexport const getBaseRoomName = (quoteIndex, cartItems = [], quotes = [], messages, locale, fabricatorData) => {\r\n\r\n quoteIndex = +quoteIndex;\r\n\r\n const getCurentQuoteRoomItem = (quoteIndexToFind) => {\r\n return cartItems.find(cItem => (cItem.currentQuote === quoteIndexToFind) && (cItem.partId === \"room\"))\r\n };\r\n\r\n const quoteRoomType = quotes[quoteIndex] && quotes[quoteIndex].room ? quotes[quoteIndex].room : \"\";\r\n const roomItem = getCurentQuoteRoomItem(quoteIndex);\r\n const baseRoomName = roomItem && roomItem.cartFeature\r\n ? getStringFeatureName(roomItem.cartFeature, messages, locale, fabricatorData)\r\n : getDefaultRoomName(messages, quoteRoomType);\r\n\r\n return baseRoomName || \"\"\r\n};\r\n\r\nexport const getEventPosition = (e) => {\r\n const eventX = e.clientX ? e.clientX : (e.touches[0] ? e.touches[0].clientX : e.changedTouches[0].clientX);\r\n const eventY = e.clientY ? e.clientY : (e.touches[0] ? e.touches[0].clientY : e.changedTouches[0].clientY);\r\n return {\r\n x: parseFloat(eventX).toFixed(2),\r\n y: parseFloat(eventY).toFixed(2)\r\n }\r\n};\r\n\r\nexport const getUrlParam = (queryParam) => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get(queryParam);\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} feature\r\n * @param intl {object} translates provider\r\n * @param fabricatorData {object} fabricator state\r\n * @param quantity {number}\r\n * @return {string}\r\n */\r\nexport const getFeatureUnit = (feature, intl, fabricatorData, quantity) => {\r\n const dbFeature = feature.dbFeature;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.locale === \"fr-FR\" && intl.messages && intl.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]) {\r\n if ((intl.formatMessage({id: \"transDoc.units_FR.\" + dbFeature.sharedFeatureName}) === \"pieds carrés\") && dbFeature.unit === \"Each\") {\r\n return quantity === 1 ? \"unité\" : \"nombre unites\"\r\n }\r\n return intl.formatMessage({id: \"transDoc.units_FR.\" + dbFeature.sharedFeatureName})\r\n }\r\n if (dbFeature.unit) {\r\n let lowercasedUnit = dbFeature.unit.toLowerCase();\r\n return lowercasedUnit === \"each\" || lowercasedUnit === \"unit\"\r\n ? quantity <= 1\r\n ? intl.formatMessage({id: \"quotingTool.featureInfo.defaultQuantity\"})\r\n : intl.formatMessage({id: \"quotingTool.featureInfo.defaultQuantityMultiple\"})\r\n : dbFeature.unit\r\n }\r\n if (feature.isStoneFeature) {\r\n return intl.formatMessage({id: \"shoppingCart.fetureInCartDefaultQuantitySQFT\"})\r\n }\r\n return intl.formatMessage({id: \"shoppingCart.fetureInCartDefaultQuantity\"})\r\n};\r\n\r\n/**\r\n *\r\n * @param cartItem {object}\r\n * @param intl {object} translates provider\r\n * @return {string}\r\n */\r\nexport const getCartItemUnit = (cartItem, intl) => {\r\n return cartItem.displayFakeFeatureGroupName === \"slabs\"\r\n ? getSlabUnit(cartItem.displayFakeQuantity, intl)\r\n : null\r\n};\r\n\r\n/**\r\n *\r\n * @param totalCount {int}\r\n * @param intl {object} translates provider\r\n * @return {string}\r\n */\r\nexport const getSlabUnit = (totalCount, intl) => {\r\n return totalCount === 1\r\n ? intl.formatMessage({id: \"sqftFeaturesPopup.unit.slab\"})\r\n : intl.formatMessage({id: \"sqftFeaturesPopup.unit.slabs\"})\r\n};\r\n\r\n/**\r\n * @returns {DesignNavigationItem}\r\n */\r\nexport const getSlabsFeatureGroup = (layout = getCurrentLayout()) => {\r\n\r\n const countertopFeatureGroup = getCountertopFeatureGroup(layout);\r\n\r\n // create new featureGroup and add it to qtCategories\r\n let slabsFeatureGroup = layout.addNonVisualizerSubPart(\"Slabs\");\r\n if (countertopFeatureGroup) {\r\n slabsFeatureGroup.part.featuresList = countertopFeatureGroup.featuresList;\r\n slabsFeatureGroup.part.translateId = 'visualizer.kitchen.slabs';\r\n slabsFeatureGroup.part.wasCreatedFromGroupName = countertopFeatureGroup.dbName || countertopFeatureGroup.partName;\r\n }\r\n\r\n return slabsFeatureGroup\r\n}\r\n\r\n/**\r\n * todo: this will add slab featureGroup to each category, we need to check what if qtCategories doesn't match room name\r\n * add Slabs FeatureGroup To First qtCategory\r\n * @returns {DesignNavigationItem}\r\n */\r\nexport const getQtCategoriesWithSlabFeatureGroup = (qtCategories) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n if (qtCategories && fabricatorSettings.showSlabMode) {\r\n const cartItems = state.cartState.cartItems;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, activeQuoteIndex);\r\n const selectedQuoteRoomFeature = selectedQuoteRoomCartItem ? selectedQuoteRoomCartItem.cartFeature : null;\r\n const activeCategory = qtCategories.find(qtCategory => featureIsMatchingQtCatName(selectedQuoteRoomFeature, qtCategory.name, true));\r\n let categoryToSearch = activeCategory ? activeCategory : qtCategories[0];\r\n if (categoryToSearch && !categoryToSearch.subParts.some(subPart => subPart.part.partId === 'slabs')) {\r\n let subParts = [...categoryToSearch.subParts];\r\n let slabsFeatureGroup = getSlabsFeatureGroup();\r\n subParts.push(slabsFeatureGroup);\r\n qtCategories[qtCategories.findIndex(qtCategory => qtCategory === categoryToSearch)].subParts = subParts;\r\n }\r\n }\r\n\r\n return qtCategories\r\n}\r\n\r\n/**\r\n *\r\n * @param featureGroup {object} featureGroup\r\n * @param intl {object} translates provider\r\n * @param fabricatorData {object} fabricator state\r\n * @return {string}\r\n */\r\nexport const getFeatureGroupName = (featureGroup, intl, fabricatorData) => {\r\n if (!featureGroup || !intl || !fabricatorData) {\r\n return \"\"\r\n }\r\n const lowerCasedName = featureGroup.partName.toLowerCase();\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.customDisplayName_FR.\" + lowerCasedName]) {\r\n return intl.formatMessage({id: \"transDoc.customDisplayName_FR.\" + lowerCasedName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateName_PL.\" + lowerCasedName]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateName_PL.\" + lowerCasedName})\r\n }\r\n }\r\n if ((intl.locale === \"en-US\" || fabricatorData.isDeStefano) && featureGroup.customGroupDisplayName) {\r\n return featureGroup.customGroupDisplayName\r\n }\r\n if (featureGroup.partName === \"Room\") {\r\n return intl.messages[\"shoppingCart.roomTitle\"]\r\n }\r\n\r\n return intl.messages[featureGroup.translateId] || featureGroup.partName\r\n};\r\n\r\n/**\r\n * Each dbFeature should go through this fixes!\r\n * @param dbFeature {object}\r\n * @return dbFeature {object}\r\n */\r\nexport const fixDbFeatureProperties = (dbFeature) => {\r\n dbFeature.metaData = metaDataToCamelCase(dbFeature.metaData); // make all metadata keys CamelCased(dashboard saving issue)\r\n if (!dbFeature.filterValueIDs) {\r\n dbFeature.filterValueIDs = {}\r\n }\r\n if (!dbFeature.fabFilterValueIDs) {\r\n dbFeature.fabFilterValueIDs = {}\r\n }\r\n if (dbFeature.sharedFeatureName) {\r\n dbFeature.sharedFeatureName = dbFeature.sharedFeatureName.trim();\r\n // if (!dbFeature.sku) {\r\n // dbFeature.sku = dbFeature.sharedFeatureName // bvLook visualizer only has shared feature names, not the sku :(\r\n // }\r\n }\r\n return dbFeature\r\n}\r\n\r\n/**\r\n * @param forFeature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @param checkArray {array}\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftButtonForFeature = (forFeature, fabricatorSettings, checkArray = null) => {\r\n if (!checkArray) {\r\n checkArray = [...Object.keys({...COUNTERTOP_LABELS, ...EDGE_LABELS, ...BACKSPLASH_LABELS, ...CORNER_LABELS}), ...LOOK_WALLS_ONLY];\r\n }\r\n const canShowForCommonIds = checkArray.includes(forFeature.partId) || (\r\n forFeature.dbFeature && (forFeature.dbFeature.sharedFeatureName === \"Xtone Underlayment\") // porcelanosa hardcode, but can be used for all\r\n && checkArray.some(key => key === \"center_island_countertop\") // show it only once, cabinets check\r\n )\r\n switch (getCommonVisualizerType()) {\r\n case \"bathroom\": {\r\n if (fabricatorSettings.enableSqFt) { // fabricatorSettings.enableSqFt - is actually disable\r\n return false\r\n }\r\n return canShowForCommonIds\r\n }\r\n case \"fireplace\": { // enableSqFt doesn't work on the fireplace profile omg\r\n return canShowForCommonIds\r\n }\r\n case \"kitchen\":\r\n default: { // remove default as we have fireplace or other visualizer ready\r\n if (fabricatorSettings.enableSqFt) { // fabricatorSettings.enableSqFt - is actually disable\r\n return false\r\n }\r\n return canShowForCommonIds\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * @param forFeature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftCabinetButtonForFeature = (forFeature, fabricatorSettings) => {\r\n return isCabinetsFabricator()\r\n || canShowSqftButtonForFeature(forFeature, fabricatorSettings, Object.keys({...CABINET_LABELS}))\r\n}\r\n\r\n/**\r\n * @return {boolean}\r\n */\r\nexport const canShowSqftButton = () => {\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n\r\n if (document.kvConfig.userId === 238280) { // solid surface\r\n return true\r\n }\r\n\r\n return (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\" || fabricatorSettings.useCategorySwitching)\r\n && !fabricatorSettings.enableSqFt; // fabricatorSettings.enableSqFt - is actually disable\r\n}\r\n\r\n/**\r\n *\r\n * @param fromFeature {featureInterface}\r\n * @param newQuantity {number}\r\n * @param qtActiveCategory {string}\r\n * @return {cartItemInterface}\r\n */\r\nexport const getCartItemObject = (fromFeature, newQuantity, qtActiveCategory) => {\r\n const subPart = fromFeature.getParent();\r\n const parentName = subPart.getParent ? subPart.getParent().partName : subPart.partName\r\n const cartItemObject = {\r\n selectionGroup: parentName,\r\n quantity: newQuantity,\r\n partId: fromFeature.partId,\r\n cartFeature: fromFeature,\r\n }\r\n // if (fromFeature.inCatProperties) { // added always, to properly switch to feature group and category from cart\r\n cartItemObject.fromQtCategory = qtActiveCategory\r\n // }\r\n return cartItemObject\r\n}\r\n\r\n/**\r\n *\r\n * @param relatedFeatures {array} feature relatedFeatures array\r\n * @param currentFeature {object} feature\r\n * @param searchInputValue\r\n * @return {object}\r\n */\r\nexport const getRelatedFeaturesFromLayout = (relatedFeatures, currentFeature, searchInputValue = \"\", selectedFilters = []) => {\r\n const layout = getCurrentLayout();\r\n const parentParts = Object.values(layout.parts);\r\n let relatedFeaturesFound = [];\r\n let noFeaturesFound = [];\r\n if (!Array.isArray(relatedFeatures)) {\r\n return {noFeaturesFound, relatedFeaturesFound}\r\n }\r\n relatedFeatures.forEach(relatedFeature => {\r\n let featureIsFound = false;\r\n let groupName = relatedFeature.groupName;\r\n if (!groupName) {\r\n groupName = splitFeatureName(relatedFeature.displayName).groupName;\r\n }\r\n groupName = groupName.toLowerCase().trim();\r\n parentParts.forEach(parentPart => {\r\n parentPart.relatedItems.forEach(relItem => {\r\n let edgeCondition = true;\r\n const dbName = (relItem.dbName || relItem.partName).toLowerCase().trim();\r\n // 157699 - hardcode for stone_industries_pan.quotekitchenandbath.com/kitchen - they have back countertop & center island edge\r\n if (groupName === \"edge profile\" && (document.kvConfig.userId !== 157699) && (relItem.partId !== currentFeature.partId)) {\r\n edgeCondition = false; // take edge only for countertop || center_island_countertop\r\n }\r\n if ((dbName === groupName) && edgeCondition) {\r\n let feature = null;\r\n Object.keys(relItem.featuresList).forEach(layoutType => {\r\n feature = feature || relItem.featuresList[layoutType].find(feature => {\r\n return feature.dbFeature.id === relatedFeature.id;\r\n })\r\n });\r\n if (feature) {\r\n if (searchInputValue !== \"\") {\r\n if (feature.getFeatureName().toLowerCase().includes(searchInputValue.trim().toLowerCase())\r\n || (feature.dbFeature && feature.dbFeature.description && feature.dbFeature.description.toLowerCase().includes(searchInputValue.trim().toLowerCase()))\r\n ) {\r\n relatedFeaturesFound.push(feature);\r\n featureIsFound = true;\r\n }\r\n } else {\r\n relatedFeaturesFound.push(feature);\r\n featureIsFound = true;\r\n }\r\n }\r\n }\r\n })\r\n });\r\n if (!featureIsFound) {\r\n noFeaturesFound.push(relatedFeature.id)\r\n }\r\n relatedFeaturesFound = filterFeaturesByValues(relatedFeaturesFound, selectedFilters);\r\n });\r\n return {noFeaturesFound, relatedFeaturesFound}\r\n}\r\n\r\nexport const getFilteredRelatedFeatures = (relatedFeaturesToCheck) => {\r\n // console.log(\"relatedFeaturesToCheck\", relatedFeaturesToCheck);\r\n let relatedFeatures = [];\r\n relatedFeaturesToCheck.forEach((relFeature) => {\r\n const featureAlreadyExistIndex = relatedFeatures.findIndex(currentFeature => {\r\n return currentFeature.getSplittedFeatureName() === relFeature.getSplittedFeatureName()\r\n })\r\n if (featureAlreadyExistIndex > -1) {\r\n if (relFeature.getParent().navigationSubItems().some(navItem => {\r\n return navItem.part.dbFeature.id === relFeature.dbFeature.id\r\n })) {\r\n relatedFeatures.splice(featureAlreadyExistIndex, 1, relFeature)\r\n }\r\n } else {\r\n relatedFeatures.push(relFeature);\r\n }\r\n });\r\n // console.log(\"relatedFeatures\", relatedFeatures);\r\n return relatedFeatures\r\n};\r\n\r\n/**\r\n *\r\n * @param relatedFeatures {array} feature relatedFeatures array\r\n * @param cartItems {array} cartItems array\r\n * @param quoteIndex {number} quoteIndex\r\n * @param intl {object} react-intl instance\r\n * @param fabricatorData {object}\r\n * @return {array}\r\n */\r\nexport const createRelatedGroups = (relatedFeatures, cartItems, quoteIndex, intl, fabricatorData) => {\r\n const relatedGroups = [];\r\n relatedFeatures.forEach(relatedFeature => {\r\n const addedCartItem = cartItems.find(cartItem => {\r\n return cartItem.cartFeature && (cartItem.cartFeature.dbFeature.id === relatedFeature.dbFeature.id)\r\n && cartItem.currentQuote === quoteIndex\r\n })\r\n relatedFeature.cartQuantity = addedCartItem ? addedCartItem.quantity : 0;\r\n const relatedFeatureGroupName = getFeatureGroupName(relatedFeature.getParent(), intl, fabricatorData);\r\n const featureGroup = relatedGroups.find(group => group.name === relatedFeatureGroupName);\r\n if (!featureGroup) {\r\n const name = relatedFeature.getParent\r\n ? relatedFeatureGroupName\r\n : relatedFeature.dbFeature.groupName\r\n relatedGroups.push({\r\n name,\r\n relatedFeatures: [relatedFeature]\r\n })\r\n } else {\r\n featureGroup.relatedFeatures.push(relatedFeature);\r\n }\r\n });\r\n return relatedGroups\r\n}\r\n\r\n/**\r\n *\r\n * @param filterGroup {object}\r\n * @return {array}\r\n */\r\nexport const getAllFilterGroupValuesFromGroup = (filterGroup) => {\r\n const fValues = [];\r\n if (!filterGroup || !filterGroup.values) {\r\n return []\r\n }\r\n filterGroup.values.forEach(fValue => {\r\n fValues.push(fValue);\r\n if (Array.isArray(fValue.items) && fValue.items.length) {\r\n fValue.items.forEach(childValue => {\r\n fValues.push(childValue);\r\n });\r\n }\r\n });\r\n return fValues\r\n};\r\n\r\n/**\r\n *\r\n * @param websiteUrl {string}\r\n */\r\nexport const goToFabricatorUrl = (websiteUrl) => {\r\n websiteUrl = websiteUrl.includes(\"http\") ? websiteUrl : \"//\" + websiteUrl;\r\n if (isIframe()) {\r\n window.parent.location.href = websiteUrl;\r\n } else {\r\n window.location.href = websiteUrl;\r\n }\r\n}\r\n","import * as types from './actionTypes';\r\nimport store from './../store';\r\nimport {loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport * as uuid from \"uuid\";\r\nimport {hashHistory} from \"react-router\";\r\n\r\nimport {showOrderCompletePopup} from \"./shoppingCartFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../bvcomponents/shoppingCart/cartItemInterface\";\r\nimport {\r\n getAvailableSteps, getCorrectedWizardGroupForFeature,\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {\r\n getWizardStepFromCartItemFeature\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {USE_FAB_FILTERS_ONLY} from \"../config\";\r\nimport {getBundledFeatures} from \"../bvcomponents/look/lookNavigation/lookFunctions2\";\r\nimport {IS_QKB_UI} from \"../config\";\r\n// import {showContractSigning} from \"./contractsActions\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {ROUTES} from \"../routes\";\r\n\r\n//****** SERVER & GLOBAL ******//\r\nexport const setWindowWidth = (windowWidth) => ({\r\n type: types.SET_WINDOW_WIDTH,\r\n payload: {\r\n windowWidth\r\n }\r\n});\r\nexport const setJavascriptErrors = (javascriptError) => ({\r\n type: types.SET_JAVASCRIPT_ERRORS,\r\n payload: {javascriptError}\r\n});\r\nexport const setWindowHeight = (windowHeight) => ({\r\n type: types.SET_WINDOW_HEIGHT,\r\n payload: {\r\n windowHeight\r\n }\r\n});\r\nexport const setStonePricing = (stonePricing) => ({\r\n type: types.SET_STONE_PRICING,\r\n payload: {\r\n stonePricing\r\n }\r\n});\r\nexport const setCookieAccepted = (cookieAccepted) => ({\r\n type: types.SET_COOKIE_ACCEPTED,\r\n payload: {\r\n cookieAccepted\r\n }\r\n});\r\nexport const addVisualizersLoaded = (newLoadedVisualizer) => ({\r\n type: types.ADD_VISUALIZERS_LOADED,\r\n payload: {\r\n newLoadedVisualizer\r\n }\r\n});\r\nexport const showSuccessNotification = (successNotification) => ({\r\n type: types.SHOW_SUCCESS_NOTIFICATION,\r\n payload: successNotification\r\n});\r\nexport const addProjectDocument = (file, description, sqftDiagram = false) => {\r\n\r\n let documents = store.getState().serverState.documents;\r\n const newDocument = {\r\n name: file.name,\r\n uid: uuid.v4(),\r\n text: description,\r\n created: new Date(),\r\n uploaded: false,\r\n file: file // the blob file\r\n };\r\n\r\n if (sqftDiagram) {\r\n const existingCalcDiagramIndex = documents.findIndex(doc => doc.name === file.name);\r\n if (existingCalcDiagramIndex > -1) {\r\n documents.splice(existingCalcDiagramIndex, 1);\r\n }\r\n }\r\n\r\n return {\r\n type: types.ADD_PROJECT_DOCUMENT,\r\n payload: [...documents, newDocument]\r\n }\r\n};\r\nexport const setProjectDocumentsIds = (documents) => {\r\n\r\n let oldDocuments = store.getState().serverState.documents;\r\n oldDocuments = oldDocuments.map(oldDoc => {\r\n const responseDoc = documents.find(doc => doc.name === oldDoc);\r\n if (responseDoc) {\r\n oldDoc.uploaded = true;\r\n oldDoc.documentId = responseDoc.documentId;\r\n }\r\n return oldDoc\r\n });\r\n\r\n return {\r\n type: types.SET_PROJECT_DOCUMENTS_IDS,\r\n payload: [...oldDocuments]\r\n }\r\n};\r\n\r\n/**\r\n * @param jobId {int}\r\n */\r\nexport const setJobId = (jobId) => ({type: types.SET_JOB_ID, payload: {jobId}});\r\n\r\n//****** STEPS ******//\r\nexport const setStep = (activeStep) => ({\r\n type: types.SET_STEP,\r\n payload: {\r\n activeStep\r\n }\r\n});\r\nexport const setLayoutDataParts = (layoutParts) => ({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {\r\n layoutParts\r\n }\r\n});\r\nexport const setStepSwitching = (isSwitching) => ({\r\n type: types.SET_STEP_SWITCHING,\r\n payload: {\r\n isSwitching\r\n }\r\n});\r\n\r\n//****** SELECTION ******//\r\nexport const toggleSelectionWindow = (selectionOpened, selectionGroup) => {\r\n\r\n const {filterState} = store.getState();\r\n if (filterState.showFilters) {\r\n store.dispatch(showFilters(false));\r\n }\r\n\r\n return {\r\n type: types.TOGGLE_SELECTION_WINDOW,\r\n payload: {\r\n selectionOpened,\r\n selectionGroup\r\n }\r\n };\r\n};\r\nexport const setDefaultSelectionGroup = (selectionGroup) => ({\r\n type: types.SET_DEFAULT_SELECTION_GROUP,\r\n payload: {selectionGroup}\r\n});\r\nexport const setSelectionWindowView = (selectionWindowView) => ({\r\n type: types.SET_SELECTION_WINDOW_VIEW,\r\n payload: {selectionWindowView}\r\n});\r\nexport const toggleSelectionFeatureInfo = (selectionFeatureInfo) => ({\r\n type: types.TOGGLE_SELECTION_INFO,\r\n payload: {selectionFeatureInfo}\r\n});\r\nexport const updateFeatureInfoCount = () => ({\r\n type: types.UPDATE_FEATURE_INFO_COUNT,\r\n});\r\nexport const setVanityType = (vanityTypeSelected) => ({\r\n type: types.SET_VANITY_TYPE,\r\n payload: {vanityTypeSelected}\r\n});\r\nexport const setShowerType = (showerTypeSelected) => ({\r\n type: types.SET_SHOWER_TYPE,\r\n payload: {showerTypeSelected}\r\n});\r\nexport const changeSelectionInfoQuantity = (selectionInfoQuantity) => ({\r\n type: types.CHANGE_SELECTION_INFO_QUANTITY,\r\n payload: {selectionInfoQuantity}\r\n});\r\nexport const togglePulseFeatureInfoQuantity = (pulseFeatureInfoQuantity) => ({\r\n type: types.TOGGLE_PULSE_FEATURE_INFO_QUANTITY,\r\n payload: {pulseFeatureInfoQuantity}\r\n});\r\nexport const changeMaterialsInfoFeatureModules = (materialsInfoFeatureModules) => ({\r\n type: types.CHANGE_MATERIALS_INFO_FEATURE_MODULES,\r\n payload: {materialsInfoFeatureModules}\r\n});\r\nexport const changeActivePartRelatedItemIndex = (newActivePartRelatedItemIndex) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {activePartRelatedItemIndex} = store.selectionState;\r\n dispatch({\r\n type: types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX,\r\n payload: {\r\n activePartRelatedItemIndex: newActivePartRelatedItemIndex,\r\n isSameStep: newActivePartRelatedItemIndex === activePartRelatedItemIndex\r\n }\r\n });\r\n }\r\n}\r\nexport const setActiveFeature = (activeFeature) => ({\r\n type: types.SET_ACTIVE_FEATURE,\r\n payload: {activeFeature}\r\n});\r\nexport const toggleShowDescriptionCover = (showDescriptionCover) => ({\r\n type: types.TOGGLE_SHOW_DESCRIPTION_COVER,\r\n payload: {showDescriptionCover}\r\n});\r\n\r\n//****** BATHROOM VISUALIZER COMMANDS ******//\r\nexport const toggleBathroomVisualizerOpen = (bvOpened) => {\r\n const {filterState, bathroomVisualizerState} = store.getState();\r\n if (filterState.showFilters) {\r\n store.dispatch(showFilters(false));\r\n }\r\n if (bvOpened && !bathroomVisualizerState.bvVisited) {\r\n loaderEnable();\r\n }\r\n return {\r\n type: types.TOGGLE_BATHROOM_VISUALIZER_OPEN,\r\n payload: {\r\n bvOpened\r\n }\r\n };\r\n};\r\nexport const setBathroomVisualizerVisited = () => {\r\n return {\r\n type: types.SET_BATHROOM_VISUALIZER_VISITED,\r\n payload: {\r\n bvVisited: true\r\n }\r\n };\r\n};\r\nexport const setBathroomVisualizerFeatures = (bvFeatures) => ({\r\n type: types.SET_BV_FEATURES,\r\n payload: {bvFeatures}\r\n});\r\nexport const setBathroomVisualizerPresets = (bvPresets, visualizerType = document.kvConfig.visualizerType) => ({\r\n type: types.SET_BV_PRESETS,\r\n payload: {bvPresets, visualizerType}\r\n});\r\nexport const setActivePreset = (activePreset = 0) => ({\r\n type: types.SET_ACTIVE_PRESET,\r\n payload: {activePreset}\r\n});\r\nexport const setCanvasId = (id) => ({type: types.SET_BV_CANVAS_ID, payload: {id}});\r\nexport const toggleShowRestorePopup = (showRestorePopup) => ({\r\n type: types.TOGGLE_SHOW_RESTORE_POPUP,\r\n payload: {showRestorePopup}\r\n});\r\nexport const setCanvasDimensions = (canvasDimensions = null) => ({\r\n type: types.SET_CANVAS_DIMENSIONS,\r\n payload: {canvasDimensions}\r\n});\r\nexport const setCanvasScale = (canvasScale = 1) => ({\r\n type: types.SET_CANVAS_SCALE,\r\n payload: {canvasScale}\r\n});\r\nexport const setLoadedPresets = (loadedPresets = []) => ({\r\n type: types.SET_LOADED_PRESETS,\r\n payload: {loadedPresets}\r\n});\r\n\r\n//****** LOADER ******//\r\nexport const toggleLoader = (loaderOpened, loaderText = \"loader.defaultText\", loaderTitle = \"loader.defaultTitle\", loaderFullScreen = false) => ({\r\n type: types.TOGGLE_LOADER,\r\n payload: {\r\n loaderOpened,\r\n loaderTitle,\r\n loaderText,\r\n loaderFullScreen,\r\n }\r\n});\r\nexport const setMultiLoader = (multiLoader) => ({\r\n type: types.SET_MULTI_LOADER,\r\n payload: multiLoader\r\n})\r\n\r\n//****** USER COMMANDS ******//\r\nexport const toggleUserPopup = (userPopupState) => ({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n ...userPopupState\r\n }\r\n});\r\nexport const changeUserInfo = (userInfo) => ({\r\n type: types.CHANGE_USER_INFO,\r\n payload: {userInfo}\r\n});\r\nexport const changeUserInfoErrors = (userInfoErrors) => ({\r\n type: types.CHANGE_USER_INFO_ERRORS,\r\n payload: {userInfoErrors}\r\n});\r\nexport const toggleAdditionalFields = (showAdditionalFields) => ({\r\n type: types.TOGGLE_ADDITIONAL_FIELDS,\r\n payload: {showAdditionalFields}\r\n});\r\nexport const setUserPhoneNumberValidated = (validated) => ({\r\n type: types.SET_USER_PHONE_NUMBER_VALIDATED,\r\n payload: {\r\n isPhoneNumberValidated: validated\r\n }\r\n});\r\nexport const unlockPricing = () => {\r\n return (dispatch, getState) => {\r\n const {userState} = getState();\r\n const {userIsLoggedIn, isPhoneNumberValidated} = userState;\r\n if (!userIsLoggedIn || !isPhoneNumberValidated) {\r\n dispatch(toggleUserPopup({\r\n userPopupOpened: true\r\n }));\r\n }\r\n }\r\n};\r\n\r\n//****** CART COMMANDS ******//\r\nexport const addToCart = (cartItems) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, fabricatorState, wizardState, sqftState, cartState} = getState();\r\n\r\n const {wizardIsActive, wizardActiveItem, wizardActiveStep, wizardSelectedValues, allWizardsValues} = wizardState;\r\n let fromWizardId = null;\r\n let fromWizardGroup = null;\r\n let fromWizardStep = null;\r\n let wizardSteps = null;\r\n if (wizardIsActive && wizardActiveItem) {\r\n fromWizardId = wizardState.wizardActiveItem.id;\r\n fromWizardStep = wizardActiveStep;\r\n fromWizardGroup = wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].wizardGroup\r\n ? wizardSelectedValues[wizardActiveStep].wizardGroup : null;\r\n if (sqftState.isSquareFootageEnabled) {\r\n wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true)\r\n }\r\n }\r\n\r\n let newCartItems = cartItems\r\n .map(cartItem => {\r\n cartItem.id = uuid.v4();\r\n cartItem.currentQuote = Number.isInteger(cartItem.currentQuote) ? cartItem.currentQuote : quotesState.activeQuoteIndex;\r\n cartItem.addedBy = cartItem.addedBy || CART_ITEM_ADDED_BY.user;\r\n cartItem.fromVisualizerType = cartItem.fromVisualizerType || document.kvConfig.visualizerType;\r\n if (!cartItem.noteText && cartItem.cartFeature && cartItem.cartFeature.notesList && cartItem.cartFeature.notesList[cartItem.currentQuote]) {\r\n cartItem.noteText = cartItem.cartFeature.notesList[cartItem.currentQuote];\r\n }\r\n if (wizardIsActive && !cartItem.fromWizardId) { // if it is not passed - add it\r\n if (sqftState.isSquareFootageEnabled && wizardSteps) {\r\n const foundStep = getWizardStepFromCartItemFeature(wizardSteps, cartItem);\r\n if (foundStep) {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = foundStep.stepIndex;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(foundStep.stepGroups[0], cartItem.cartFeature).id : \"\";\r\n } else {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = fromWizardStep;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(fromWizardGroup, cartItem.cartFeature).id : \"\";\r\n }\r\n } else {\r\n cartItem.fromWizardId = fromWizardId;\r\n cartItem.fromWizardStep = fromWizardStep;\r\n cartItem.fromWizardGroupId = fromWizardGroup ? getCorrectedWizardGroupForFeature(fromWizardGroup, cartItem.cartFeature).id : \"\";\r\n }\r\n }\r\n return cartItem\r\n })\r\n .filter(newCartItem => {\r\n if (newCartItem.partId === \"room\" && newCartItem.cartFeature && cartState.cartItems.some(oldCartItem => {\r\n return oldCartItem.cartFeature && (oldCartItem.cartFeature.dbFeature.id === newCartItem.cartFeature.dbFeature.id)\r\n && oldCartItem.currentQuote === newCartItem.currentQuote\r\n })) {\r\n return false // do not add duplicate room\r\n }\r\n return !cartState.cartItems.some(oldCartItem => oldCartItem.id === newCartItem.id)\r\n && (newCartItem.quantity > 0 || newCartItem.displayFakeQuantity > 0)\r\n });\r\n\r\n if (IS_QKB_UI) { // on look & product journeys we have another method and relatedProductParent property for bundled features\r\n newCartItems.forEach(newCartItem => {\r\n const bundleFeatures = getBundledFeatures(newCartItem.cartFeature);\r\n if (Array.isArray(bundleFeatures) && bundleFeatures.length) {\r\n bundleFeatures.forEach((bundleFeature) => {\r\n const quantity = newCartItem.cartFeature.dbFeature.bundledFeatureQuantities\r\n ? newCartItem.cartFeature.dbFeature.bundledFeatureQuantities[bundleFeature.dbFeature.id] || 1\r\n : 1;\r\n const cartItem = Object.assign({}, newCartItem, {\r\n id: uuid.v4(),\r\n cartFeature: bundleFeature,\r\n partId: bundleFeature.partId,\r\n noteText: \"\",\r\n bundleParentId: newCartItem.id,\r\n quantity: quantity * newCartItem.quantity,\r\n });\r\n // console.log(\"parent cartItem\", newCartItem);\r\n // console.log(\"bundle cartItem\", cartItem);\r\n newCartItems.push(cartItem);\r\n })\r\n }\r\n });\r\n }\r\n\r\n dispatch({\r\n type: types.ADD_TO_CART,\r\n payload: {\r\n cartItems: newCartItems,\r\n fabricatorState,\r\n allWizardsValues,\r\n }\r\n });\r\n }\r\n};\r\nexport const addDisplayLogicCartItem = (cartItem, fromVisualizerType = document.kvConfig.visualizerType) => ({\r\n type: types.ADD_DISPLAY_LOGIC_CART_ITEM,\r\n payload: {\r\n cartItem: Object.assign({}, cartItem, {\r\n id: uuid.v4(),\r\n isAddedFromDisplayLogic: true,\r\n addedBy: CART_ITEM_ADDED_BY.user,\r\n fromVisualizerType,\r\n })\r\n }\r\n});\r\nexport const changeCartItemQuantity = (cartItem, quantity, removeFakeQuantity = false) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, wizardState} = getState();\r\n dispatch({\r\n type: types.CHANGE_CART_QUANTITY,\r\n payload: { cartItem, quantity, fabricatorState, removeFakeQuantity, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\nexport const removeFromCart = (cartItem) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, wizardState} = getState();\r\n dispatch({\r\n type: types.REMOVE_FROM_CART,\r\n payload: { cartItem, fabricatorState, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\nexport const changeCartFeature = (cartItem, skipOtherRules = false) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState} = getState();\r\n dispatch({\r\n type: types.CHANGE_CART_FEATURE,\r\n payload: {cartItem, fabricatorState, skipOtherRules}\r\n });\r\n }\r\n};\r\nexport const removeInstallationServiceFromCart = installationService => ({\r\n type: types.REMOVE_INSTALLATION_SERVICE_FROM_CART,\r\n payload: {\r\n installationService\r\n }\r\n});\r\nexport const clearCart = () => ({\r\n type: types.CLEAR_CART\r\n});\r\nexport const toggleApplyPopup = (applyPopupOpened, activeApplyPopupItems = []) => ({\r\n type: types.TOGGLE_APPLY_POPUP,\r\n payload: {\r\n applyPopupOpened,\r\n activeApplyPopupItems\r\n }\r\n});\r\nexport const clickQuestionNo = (questionNoClicked) => ({\r\n type: types.CLICK_QUESTION_NO,\r\n payload: {\r\n questionNoClicked\r\n }\r\n});\r\nexport const setCameFromPage = (cameFromPage) => ({\r\n type: types.CAME_FROM_PAGE,\r\n payload: {\r\n cameFromPage\r\n }\r\n});\r\nexport const addToRecentlyViewed = (feature) => ({\r\n type: types.ADD_TO_RECENTLY_VIEWED,\r\n payload: {\r\n feature\r\n }\r\n});\r\nexport const showCheckoutPopup = (show) => ({\r\n type: types.SHOW_CHECKOUT_POPUP,\r\n payload: {\r\n show\r\n }\r\n});\r\nexport const restoreCart = (cartState) => {\r\n return (dispatch, getState) => {\r\n const {fabricatorState, quotesState, wizardState} = getState();\r\n if (cartState && cartState.cartItems) {\r\n cartState.cartItems = cartState.cartItems.map(cartItem => {\r\n cartItem.id = cartItem.id || uuid.v4();\r\n cartItem.currentQuote = Number.isInteger(cartItem.currentQuote) ? cartItem.currentQuote : quotesState.activeQuoteIndex;\r\n cartItem.addedBy = cartItem.addedBy || CART_ITEM_ADDED_BY.user;\r\n return cartItem\r\n })\r\n }\r\n dispatch({\r\n type: types.RESTORE_CART,\r\n payload: { cartState, fabricatorState, allWizardsValues: wizardState.allWizardsValues }\r\n });\r\n }\r\n};\r\n\r\n//****** INSTALLATION COMMANDS ******//\r\nexport const toggleInstOpened = (instOpened) => ({\r\n type: types.TOGGLE_INST_OPENED,\r\n payload: {\r\n instOpened\r\n }\r\n});\r\nexport const setInstList = (instList) => ({\r\n type: types.SET_INST_LIST,\r\n payload: {\r\n instList\r\n }\r\n});\r\nexport const setDefaultInstallations = (defaultInstallations) => ({\r\n type: types.SET_DEFAULT_INST_LIST,\r\n payload: {defaultInstallations}\r\n});\r\n\r\n//****** TOOL STATE ***************//\r\nexport const changeStateToQuote = () => ({\r\n type: types.SET_STATE_TO_QUOTE\r\n});\r\n\r\n//****** FABRICATOR COMMANDS ******//\r\nexport const setFabricatorData = (fabricatorData) => ({\r\n type: types.SET_FABRICATOR_DATA,\r\n payload: {\r\n ...fabricatorData\r\n }\r\n});\r\nexport const setFabricatorTaxes = (fabricatorTaxes) => ({\r\n type: types.SET_FABRICATOR_TAXES,\r\n payload: {fabricatorTaxes}\r\n});\r\n\r\nexport const updateFabricatorSettings = () => ({\r\n type: types.UPDATE_FABRICATOR_SETTINGS,\r\n});\r\n\r\nexport const toggleHideItemsSwitcher = () => ({\r\n type: types.TOGGLE_HIDE_ITEMS_PRICES,\r\n});\r\n\r\nexport const toggleUseFabricatorCostPrices = (useFabricatorCostPrices) => ({\r\n type: types.TOGGLE_USE_FABRICATOR_COST_PRICES,\r\n payload: {useFabricatorCostPrices}\r\n});\r\n\r\n//****** MESSAGEBOX COMMANDS ******//\r\nexport const changeMessageBoxState = (messageBoxState) => ({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n ...messageBoxState\r\n }\r\n});\r\n\r\n//******** FILTER COMMANDS **********//\r\nexport const setSelectedFilters = (selectedFilters) => ({\r\n type: types.SET_SELECTED_FILTERS,\r\n payload: [...selectedFilters]\r\n});\r\n\r\nexport const loadFilters = (filterGroups) => {\r\n\r\n if (USE_FAB_FILTERS_ONLY) {\r\n// console.log(\"fabricator only filterGroups\", filterGroups.map(fg => {\r\n// return Object.assign ({}, fg, {\r\n// values: fg.values.filter(fgValue => fgValue.isFabricatorCustomFilter)\r\n// })\r\n// }).filter(fg => fg.values.length));\r\n filterGroups = filterGroups.filter(fg => {\r\n if (!Array.isArray(fg.values) || !fg.values.length) {\r\n return false\r\n }\r\n fg.values = fg.values.filter(fgValue => fgValue.isFabricatorCustomFilter);\r\n return fg.values.length\r\n })\r\n console.log(\"fabricator only filterGroups\", filterGroups);\r\n }\r\n return {\r\n type: types.LOAD_FILTERS,\r\n payload: filterGroups\r\n }\r\n};\r\n\r\nexport const setExpandedFilters = (expandedFilters) => ({\r\n type: types.SET_EXPANDED_FILTERS,\r\n payload: expandedFilters\r\n});\r\n\r\nexport const showFilters = (show = false, filterId = \"\") => ({\r\n type: types.SHOW_FILTERS,\r\n payload: {show, filterId}\r\n});\r\n\r\nexport const showFiltersIfHidden = (filterId = \"\") => ({\r\n type: types.SHOW_FILTERS_IF_NOT_VISIBLE,\r\n payload: filterId\r\n});\r\n\r\nexport const setFilterVisible = (filter) => ({\r\n type: types.SET_FILTER_VISIBLE,\r\n payload: filter\r\n});\r\n\r\n\r\n//********* MOBILE NAVIGATION COMMANDS *********/\r\nexport const loadMobileNav = (data) => ({\r\n type: types.LOAD_MOBILE_NAV,\r\n payload: data\r\n});\r\n\r\nexport const hideUserPopup = () => ({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n inline: false\r\n }\r\n});\r\n\r\nexport const showSchedulerPopup = show => {\r\n return {\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show}\r\n }\r\n};\r\nexport const toggleConfirmPopup = (confirmPopupOpened, confirmPopupType) => ({\r\n type: types.TOGGLE_CONFIRM_POPUP,\r\n payload: {confirmPopupOpened, confirmPopupType}\r\n});\r\n\r\n//********* DOCU SIGN *********/\r\nexport const showDocuSign = (show, callback = null) => ({\r\n type: types.SHOW_DOCUSIGN,\r\n payload: {show, callback}\r\n});\r\n\r\nexport const showDeposit = (show, callback = null) => ({\r\n type: types.SHOW_DEPOSIT,\r\n payload: {show, callback}\r\n});\r\n\r\nconst _showCheckoutPopup = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n store.dispatch(showCheckoutPopup(true));\r\n store.dispatch(showDocuSign(false, resolve)); // we need only callback from here\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showDeposit = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n const state = store.getState();\r\n console.log(\"state__state\", state);\r\n if (fabricatorSettings.enableDeposit && (!fabricatorSettings.leadCaptureShoppingCart || state.unlockCalculationsState.unlockCalculationsTutorialIsFinished)) {\r\n store.dispatch(showDeposit(true, resolve))\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showDocuSign = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.enableDocuSign) {\r\n store.dispatch(showDocuSign(true, resolve))\r\n } else {\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\nconst _showContractSigning = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (shouldUseContractSigning(fabricatorSettings)) {\r\n // store.dispatch(showContractSigning(true, resolve))\r\n hashHistory.push(ROUTES.contract);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n};\r\n\r\nexport const checkForOrderCompletePopup = (fabricatorSettings) => {\r\n return new Promise((resolve) => {\r\n if (fabricatorSettings.checkout && (!fabricatorSettings.hasPaymentGateway || window.checkoutSuccess)) {\r\n store.dispatch(showOrderCompletePopup(true));\r\n }\r\n resolve();\r\n });\r\n}\r\n\r\nexport const showCheckoutLayout = (fabricatorSettings) => {\r\n let p = _showDeposit(fabricatorSettings)\r\n .then(() => _showDocuSign(fabricatorSettings))\r\n .then(() => _showCheckoutPopup(fabricatorSettings))\r\n .then(() => _showContractSigning(fabricatorSettings))\r\n .then(() => checkForOrderCompletePopup(fabricatorSettings));\r\n // .then(() => printReceipt(fabricatorSettings));\r\n return p.catch(console.error);\r\n}\r\n\r\n//********* QUOTING TOOL COMMANDS *********/\r\nexport const setQtCategoriesRequested = (qtCategoriesRequested) => ({\r\n type: types.SET_QT_CATEGORIES_REQUESTED,\r\n payload: {\r\n qtCategoriesRequested\r\n }\r\n});\r\nexport const setQtCategoriesLoaded = (qtCategoriesLoaded) => ({\r\n type: types.SET_QT_CATEGORIES_LOADED,\r\n payload: {\r\n qtCategoriesLoaded\r\n }\r\n});\r\nexport const setQtActiveCategory = (qtActiveCategory) => ({\r\n type: types.SET_QT_ACTIVE_CATEGORY,\r\n payload: {\r\n qtActiveCategory\r\n }\r\n});\r\n\r\nexport const setIntroVideo = (introVideo) => ({\r\n type: types.SET_INTRO_VIDEO,\r\n payload: introVideo\r\n})\r\n\r\nexport const updateCanvasCount = () => ({\r\n type: types.UPDATE_CANVAS_COUNT\r\n})\r\n\r\nexport const setPresetWasChangedByUser = (presetWasChangedByUser) => ({\r\n type: types.SET_PRESET_WAS_CHANGED_BY_USER,\r\n payload: {presetWasChangedByUser}\r\n})\r\n\r\nexport const setFirstLoadedPreset = (firstLoadedPreset) => ({\r\n type: types.SET_FIRST_LOADED_PRESET,\r\n payload: {firstLoadedPreset}\r\n})\r\n\r\nexport const addLayoutHistory = (layoutState) => ({\r\n type: types.ADD_LAYOUT_HISTORY,\r\n payload: {\r\n layoutState\r\n }\r\n});\r\n\r\nexport const setLayoutHistory = (layoutHistory) => ({\r\n type: types.SET_LAYOUT_HISTORY,\r\n payload: {\r\n layoutHistory\r\n }\r\n});\r\n","import {layout as bvLayout} from \"../bvcomponents/bvComponent/bathroomVisualizer\";\r\nimport {layout as kvLayout} from \"../bvcomponents/kvComponent/kitchenVisualizer\";\r\n// import {layout as kvMasterLayout} from \"../bvcomponents/kvMasterComponent/kvMasterVisualizer\";\r\nimport {layout as kvSceneLayout} from \"../bvcomponents/kvSceneComponent/kvSceneVisualizer\";\r\nimport {layout as bvSceneLayout} from \"../bvcomponents/bvSceneComponent/bvSceneVisualizer\";\r\nimport {layout as bvLookLayout} from \"../bvcomponents/look/lookVisualizer\";\r\nimport {layout as fireplaceLayout} from \"../bvcomponents/fireplace/fireplaceVisualizer\";\r\nimport laundryRoomLayout from \"../bvcomponents/commonVisualizer/core/laundryRoomLayout\";\r\n\r\nimport {Layout as bvLayoutInstance} from \"../bvcomponents/bvComponent/core/layout\";\r\nimport {Layout as kvLayoutInstance} from \"../bvcomponents/kvComponent/core/layout\";\r\n// import {Layout as kvMasterLayoutInstance} from \"../bvcomponents/kvMasterComponent/core/layout\";\r\nimport {Layout as kvSceneLayoutInstance} from \"../bvcomponents/kvSceneComponent/core/layout\";\r\nimport {Layout as bvSceneLayoutInstance} from \"../bvcomponents/bvSceneComponent/core/layout\";\r\nimport {Layout as bvLookLayoutInstance} from \"../bvcomponents/look/core/layout\";\r\nimport {Layout as fireplaceLayoutInstance} from \"../bvcomponents/fireplace/core/layout\";\r\nimport {LaundryRoomLayout as laundryRoomLayoutInstance} from \"../bvcomponents/commonVisualizer/core/laundryRoomLayout\";\r\n\r\nimport ImageCanvasCommon from \"./visComponents/imageCanvasCommon\";\r\nimport ImageCanvasCommonNew from \"./visComponents/imageCanvasCommonNew\";\r\n\r\nimport bvZIndexes from \"../bvcomponents/bvComponent/core/parts/zIndex\";\r\nimport kvZIndexes from \"../bvcomponents/kvComponent/core/zIndex\";\r\n// import kvMasterZIndexes from \"../bvcomponents/kvMasterComponent/core/zIndex\";\r\nimport kvSceneZIndexes from \"../bvcomponents/kvSceneComponent/core/zIndex\";\r\nimport bvSceneZIndexes from \"../bvcomponents/bvSceneComponent/core/zIndex\";\r\nimport bvLookZIndexes from \"../bvcomponents/look/core/zIndex\";\r\nimport fireplaceZIndexes from \"../bvcomponents/fireplace/core/zIndex\";\r\n\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType} from \"../config\";\r\nimport {LOOK_ROOM_TYPES} from \"./look/core/constants\";\r\nimport {COUNTERTOP_LABELS} from \"./sqft/constants\";\r\n\r\nexport const getCurrentLayout = (visualizerType = document.kvConfig.visualizerType) => { // layout should be dynamic (could be switched)\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvLayout;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvLayout;\r\n // case \"kvMaster\":\r\n // return kvMasterLayout;\r\n case \"kvScene\":\r\n case \"KitchenV5\":\r\n return kvSceneLayout;\r\n case \"bvScene\":\r\n case \"BathroomV5\":\r\n return bvSceneLayout;\r\n case \"bvLook\":\r\n case \"BathroomV6\":\r\n return bvLookLayout;\r\n case \"Fireplace\":\r\n return fireplaceLayout;\r\n case \"LaundryRoom\":\r\n return laundryRoomLayout;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\nexport const getCurrentLayoutInstance = (visualizerType = document.kvConfig.visualizerType) => { // is used for creating fake layouts (to show layouts, scenes, etc.), to show thumbnails\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvLayoutInstance;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvLayoutInstance;\r\n // case \"kvMaster\":\r\n // return kvMasterLayoutInstance;\r\n case \"kvScene\":\r\n return kvSceneLayoutInstance;\r\n case \"bvScene\":\r\n return bvSceneLayoutInstance;\r\n case \"bvLook\":\r\n return bvLookLayoutInstance;\r\n case \"Fireplace\":\r\n return fireplaceLayoutInstance;\r\n case \"LaundryRoom\":\r\n return laundryRoomLayoutInstance;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\nexport const getCurrentCanvas = (visualizerType = document.kvConfig.visualizerType) => { // layout should be dynamic (could be switched)\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n return ImageCanvasCommon;\r\n case \"bvLook\":\r\n case \"kvScene\":\r\n case \"Fireplace\":\r\n case \"LaundryRoom\":\r\n default:\r\n return ImageCanvasCommonNew;\r\n }\r\n};\r\n\r\n\r\nexport const getCurrentZIndexes = (visualizerType = document.kvConfig.visualizerType) => {\r\n switch (visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n return kvZIndexes;\r\n case \"Bathroom\":\r\n case \"BV\":\r\n return bvZIndexes;\r\n // case \"kvMaster\":\r\n // return kvMasterZIndexes;\r\n case \"kvScene\":\r\n return kvSceneZIndexes;\r\n case \"bvScene\":\r\n return bvSceneZIndexes;\r\n case \"bvLook\":\r\n return bvLookZIndexes;\r\n case \"Fireplace\":\r\n case \"LaundryRoom\":\r\n return fireplaceZIndexes;\r\n default:\r\n // console.trace(\"Incorrect layout selected (document.kvConfig.visualizerType)\");\r\n return null\r\n }\r\n};\r\n\r\n/**\r\n * Returns the fake created layout,\r\n * @param asLayout {object}\r\n * @param type {number} to filter features for this specific layout\r\n * @param scene {string} to filter features for this specific scene\r\n * @returns {object}\r\n */\r\nexport const createFakeLayout = (asLayout = getCurrentLayout(), type, scene) => {\r\n const LayoutInstance = getCurrentLayoutInstance(asLayout.visualizerType);\r\n const fakeLayout = new LayoutInstance();\r\n fakeLayout.isFakeLayout = true;\r\n const parentGroups = fakeLayout.getFeatures(true);\r\n let needToLoadFeatures = type || scene\r\n ? asLayout.allDbFeatures.filter(dbFeature => {\r\n if (!dbFeature.s3Bindings || !dbFeature.metaData) {\r\n return false\r\n }\r\n if (type && !dbFeature.metaData.RoomLayout || !dbFeature.metaData.RoomLayout.includes(type)) {\r\n return false\r\n }\r\n if (asLayout.isNewLayout && scene && !dbFeature.metaData.RoomScene || !dbFeature.metaData.RoomScene.includes(scene)) {\r\n return false\r\n }\r\n return true\r\n })\r\n : asLayout.allDbFeatures;\r\n // console.log(\"asLayout.allDbFeatures\", asLayout.allDbFeatures);\r\n // console.log(\"needToLoadFeatures\", needToLoadFeatures);\r\n for (let i = 0; i < needToLoadFeatures.length; i++) {\r\n fakeLayout.loadDbFeature(needToLoadFeatures[i], parentGroups)\r\n }\r\n fakeLayout.createCustomConfigurations(); // set shower body first\r\n fakeLayout.setDefaultFeatures();\r\n fakeLayout.initialized = true;\r\n return fakeLayout\r\n};\r\n\r\n/**\r\n * Returns the visualizer type from saved quote\r\n * @param bvScene {object} main object that passed between backend and frontend\r\n // * @param quoteObject {object} not required // main parent quote(room) object that passed between backend and frontend\r\n * @returns {string}\r\n */\r\nexport const getVisualizerTypeFromBvScene = (bvScene) => {\r\n if (bvScene.visualizerType) {\r\n return bvScene.visualizerType // this should be the most common case, but we still need to support old quotes :(\r\n }\r\n if (bvScene.bathroom_floor || bvScene.shower_body) {\r\n switch (document.kvConfig.toolVersion) {\r\n case 6:\r\n return AVAILABLE_VISUALIZER_TYPES.bvLook\r\n case 5:\r\n return AVAILABLE_VISUALIZER_TYPES.bvScene\r\n case 4:\r\n default:\r\n return AVAILABLE_VISUALIZER_TYPES.Bathroom\r\n }\r\n }\r\n if (bvScene.kitchen_floor) {\r\n return document.kvConfig.toolVersion === 5 ? AVAILABLE_VISUALIZER_TYPES.kvScene : AVAILABLE_VISUALIZER_TYPES.Kitchen\r\n }\r\n // return quoteObject ? quoteObject.room : \"\"\r\n return document.kvConfig.visualizerType\r\n};\r\n\r\n/**\r\n * @param layout {object}\r\n */\r\nexport const getCurrentRoomType = (layout = getCurrentLayout()) => {\r\n if (layout.type >= 10) {\r\n return LOOK_ROOM_TYPES.as\r\n }\r\n return LOOK_ROOM_TYPES.grohe\r\n // return IS_AS_BATHROOM ? LOOK_ROOM_TYPES.as : LOOK_ROOM_TYPES.grohe\r\n};\r\n\r\n\r\n/**\r\n * @param layout {object}\r\n * @returns featureGroup {featureGroupInterface}\r\n */\r\nexport const getCountertopFeatureGroup = (layout = getCurrentLayout(), ) => {\r\n let mainNeeded, oppositeNeeded;\r\n switch (getCommonVisualizerType(layout.visualizerType)) {\r\n case \"kitchen\":\r\n mainNeeded = \"center_island_countertop\";\r\n oppositeNeeded = \"countertop\";\r\n break;\r\n case \"bathroom\":\r\n mainNeeded = COUNTERTOP_LABELS.shower_wall;\r\n oppositeNeeded = \"vanity_countertop\";\r\n break;\r\n case \"fireplace\":\r\n mainNeeded = \"front_wall\";\r\n break;\r\n default:\r\n mainNeeded = \"countertop\";\r\n break;\r\n }\r\n let featureGroupCountertop = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroupCountertop && oppositeNeeded) {\r\n featureGroupCountertop = layout.getSubPartFromQtCategories(oppositeNeeded);\r\n }\r\n if (featureGroupCountertop) {\r\n return featureGroupCountertop.part\r\n }\r\n\r\n return layout.getFeatureGroupByPartId(mainNeeded) || (oppositeNeeded ? layout.getFeatureGroupByPartId(oppositeNeeded) : null)\r\n}\r\n","import {ROUTES} from \"../../../routes\";\r\n\r\nexport const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout3: 3,\r\n Layout4: 4,\r\n Layout5: 5,\r\n Layout6: 6,\r\n Layout7: 7,\r\n Layout8: 8,\r\n Layout9: 9,\r\n Layout10: 10,\r\n Layout11: 11,\r\n Layout12: 12,\r\n Layout13: 13,\r\n Layout14: 14,\r\n Layout15: 15,\r\n Layout16: 16,\r\n Layout17: 17,\r\n Layout18: 18,\r\n Layout19: 19,\r\n Layout20: 20,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n Layout7: \"Layout7\",\r\n Layout8: \"Layout8\",\r\n Layout9: \"Layout9\",\r\n Layout10: \"Layout10\",\r\n Layout11: \"Layout11\",\r\n Layout12: \"Layout12\",\r\n Layout13: \"Layout13\",\r\n Layout14: \"Layout14\",\r\n Layout15: \"Layout15\",\r\n Layout16: \"Layout16\",\r\n Layout17: \"Layout17\",\r\n Layout18: \"Layout18\",\r\n Layout19: \"Layout19\",\r\n Layout20: \"Layout20\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout3\",\r\n \"Layout4\",\r\n \"Layout5\",\r\n \"Layout6\",\r\n \"Layout7\",\r\n \"Layout8\",\r\n \"Layout9\",\r\n \"Layout10\",\r\n \"Layout11\",\r\n \"Layout12\",\r\n \"Layout13\",\r\n \"Layout14\",\r\n \"Layout15\",\r\n \"Layout16\",\r\n \"Layout17\",\r\n \"Layout18\",\r\n \"Layout19\",\r\n \"Layout20\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout20\",\r\n \"Layout19\",\r\n \"Layout18\",\r\n \"Layout17\",\r\n \"Layout16\",\r\n \"Layout15\",\r\n \"Layout14\",\r\n \"Layout13\",\r\n \"Layout12\",\r\n \"Layout11\",\r\n \"Layout10\",\r\n \"Layout9\",\r\n \"Layout8\",\r\n \"Layout7\",\r\n \"Layout6\",\r\n \"Layout5\",\r\n \"Layout4\",\r\n \"Layout3\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n NO: \"NO\",\r\n LeftSide: \"L\", // used as side for shower grab bars\r\n RightSide: \"R\", // used as side for shower grab bars\r\n Center: \"C\", // used as side for shower doors and others\r\n Inner: \"T\", // used for sinks & faucets\r\n Outer: \"S\", // used for sinks & faucets,\r\n StandAlone: \"ST\", // used for sinks & faucets,\r\n SingleHole: \"Single Hole Faucets\", // used for sinks & faucets,\r\n WallHungSinks: \"Wall Hung Sinks\", // used for sinks & faucets,\r\n WidespreadFaucets: \"Widespread Faucets\", // used for sinks & faucets,\r\n BathtubWithEnclosures: \"Drop-in\", // used for bathtubs & enclosures,\r\n BathtubWithoutEnclosures: \"StandAlone\", // used for bathtubs & enclosures,\r\n};\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport const ShowerHeadTypes = { // todo we might will change it soon, tbd\r\n shower_arm: \"shower_arm\", // old\r\n shower_head_bundle: \"shower_head_bundle\", // old\r\n shower_trim_kit: \"shower_trim_kit\", // new\r\n shower_fixture: \"shower_fixture\", // new\r\n shower_system: \"shower_system\", // new\r\n};\r\n\r\nexport const ShowerHandTypes = { // https://qc-cdn.s3.amazonaws.com/lixil/shower_hand_logic.png\r\n hand_shower_kit: \"hand_shower_kit\",\r\n hand_shower_holder: \"hand_shower_holder\",\r\n};\r\n\r\nexport const VANITY_TYPES = {\r\n // standAlone: \"standAlone\", // ST\r\n vanity_cabinet: \"vanity_cabinet\", // S, W, A, U\r\n vanity_console: \"vanity_console\", // T\r\n vanity_washstand: \"vanity_washstand\", // T, S, W, A, U\r\n};\r\n\r\nexport const useNewNavLogicPartIds = [\"vanity_sink\", ...Object.keys(VANITY_TYPES)];\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n\r\nexport const COUNTERTOP_GROUP_BATHROOM = [\"vanity_countertop\", \"vanity_backsplash\"];\r\n\r\nexport const CABINET_GROUP_BATHROOM = [\"vanity_cabinet\", \"vanity_mirror\"];\r\n\r\nexport const CORNER_SHELVES_POSITIONS = [\"L1\",\"L2\",\"L3\",\"R1\",\"R2\",\"R3\"];\r\n\r\nexport const SIDE_POSITIONS = [\"L\",\"R\", \"C\"];\r\nexport const createParentPositions = (object) => {\r\n if (!object.layerPositions) {\r\n object.layerPositions = {};\r\n }\r\n SIDE_POSITIONS.forEach(position => {\r\n object.layerPositions[position] = null;\r\n })\r\n}\r\nexport const createPageToLoadArray = (object) => {\r\n object.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n object.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n}\r\n\r\nexport const PAN_POSITIONS = [\"L\",\"C\",\"R\"];\r\n\r\nexport const VANITY_POSITIONS = [\"L\",\"0\",\"R\"];\r\n\r\nexport const LOOK_OPENED_TYPES = {\r\n edit: \"edit\",\r\n featureZoom: \"featureZoom\"\r\n}\r\n\r\nexport const LOOK_FEATURE_CONTENT = {\r\n info: \"info\",\r\n threeD: \"threeD\",\r\n aug: \"aug\",\r\n gallery: \"gallery\", //todo\r\n}\r\n\r\nexport const LOOK_OVERLAYS = {\r\n exit: \"exit\",\r\n intro: \"intro\",\r\n print: \"print\",\r\n reset: \"reset\",\r\n loadingCart: \"loadingCart\",\r\n questionLogin: \"questionLogin\",\r\n questionShare: \"questionShare\",\r\n questionView: \"questionView\",\r\n questionViewUpdated: \"questionViewUpdated\",\r\n questionRemove: \"questionRemove\",\r\n saveSucess: \"saveSucess\",\r\n stylePairing: \"stylePairing\",\r\n styleColor: \"styleColor\",\r\n styleRemove: \"styleRemove\",\r\n styleRemoveBack: \"styleRemoveBack\",\r\n styleRemoveFeature: \"styleRemoveFeature\",\r\n notCompatiblePopup: \"notCompatiblePopup\",\r\n leadCapture: \"leadCapture\",\r\n}\r\n\r\nexport const LOCAL_STORAGE_KEYS = {\r\n introVisited: \"introVisited\",\r\n saveQuoteRequired: \"saveQuoteRequired\", // not used anymore\r\n requiredShareButton: \"requiredShareButton\" // not used anymore\r\n}\r\n\r\nexport const LOOK_INTRO_STEPS = {\r\n welcome: 0,\r\n // edit: 1,\r\n layoutsAndRooms: 1,\r\n wallsAndFloor: 2,\r\n saveAndMore: 3,\r\n review: 4,\r\n}\r\n\r\nexport const LOOK_INTRO_STEPS_MOBILE = {\r\n welcome: 0,\r\n wallsAndFloor: 1,\r\n layouts: 2,\r\n saveAndMore: 3,\r\n rooms: 4,\r\n review: 5,\r\n}\r\n\r\nexport const CONTEXT_MENU_VANITY_ONLY = [...Object.keys(VANITY_TYPES), \"vanity_legs\"];\r\nexport const CONTEXT_MENU_VANITY_BUTTONS = [\"vanity_faucet\", \"vanity_sink\", \"vanity_countertop\", \"vanity_backsplash\", ...CONTEXT_MENU_VANITY_ONLY];\r\nexport const CONTEXT_MENU_BATHTUB_BUTTONS = [\"bathtub_body\", \"bathtub_fixture\"];\r\nexport const CONTEXT_MENU_SPLIT_WALL = [\"split_wall\", \"shower_screen\"];\r\nexport const CONTEXT_MENU_SHOWER_ALL = [\"shower_fixture\", \"shower_arm\", \"shower_head\", \"shower_head_bundle\",\r\n \"hand_shower_kit\", \"shower_wall\", \"shower_door\", \"shower_pan_combo\", \"replacement_tub\"];\r\nexport const CONTEXT_MENU_SHOWER_OTHER = [\"valve_trim\", \"body_spray\", \"wall_union\", \"shower_hose\", \"hand_shower_holder\",\r\n \"hand_shower_only\", \"hand_shower\", \"diverter_trim\"];\r\nexport const CONTEXT_MENU_SHOWER_ACCESSORIES = [\"shower_pod\", \"grab_bar\", \"corner_shelf\", \"large_corner_seat\",\r\n \"shower_seats\", \"soap_dish\", \"shower_rod\"];\r\n\r\nexport const CONTEXT_MENU_KITCHEN_COUNTERTOPS = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\nexport const CONTEXT_MENU_KITCHEN_CENTER_ISLAND = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n\r\nexport const ALL_CONTEXT_MENU = [\r\n ...CONTEXT_MENU_VANITY_BUTTONS,\r\n ...CONTEXT_MENU_BATHTUB_BUTTONS,\r\n ...CONTEXT_MENU_SPLIT_WALL,\r\n ...CONTEXT_MENU_SHOWER_ALL,\r\n ...CONTEXT_MENU_SHOWER_OTHER,\r\n ...CONTEXT_MENU_SHOWER_ACCESSORIES,\r\n];\r\n\r\nexport const ALL_CONTEXT_MENU_KITCHEN = [\r\n ...CONTEXT_MENU_KITCHEN_CENTER_ISLAND,\r\n ...CONTEXT_MENU_KITCHEN_COUNTERTOPS,\r\n];\r\n\r\nexport const DECORS_MAX = 100;\r\n\r\nexport let LOOK_WALLS = [\"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\", \"split_wall\", \"left_wall_splitter\", \"shower_wall\", \"bathroom_floor\"];\r\nfor (let i = 1; i <= DECORS_MAX; i++) {\r\n LOOK_WALLS.push(\"decor_\" + i);\r\n}\r\n\r\nexport const LOOK_WALLS_ONLY = [\"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\", \"split_wall\", \"left_wall_splitter\",\r\n \"shower_wall\", \"wainscoting\", \"enclosure_top\", \"enclosure_bottom\", \"center_wall\", \"shower_floor\", \"shower_curb\", \"pony_wall\"];\r\n\r\nexport const POSSIBLE_ONE_POSITION = [\"towel_bar\", \"robe_hook\"];\r\n\r\nexport const WHITE_PAGE_ROUTES = [ROUTES.view, ROUTES.list, ROUTES.login, ROUTES.register, ROUTES.rooms];\r\n\r\nexport const AVAILABLE_FILTERS = [\"Color\", \"Material\", \"Collection\", \"Size\"];\r\n\r\nexport const WIZARD_STEP_WIDTH = 184; // 176 + 8\r\nexport const WIZARD_STEP_MOBILE_WIDTH = 96; // 88 + 8\r\nexport const WIZARD_STEP_PRODUCT_JOURNEY = 88; // 80 + 8\r\n\r\nexport const LOOK_NAVIGATION_LIST_TYPES = {\r\n regular: \"regular\",\r\n designRec: \"designRec\",\r\n notMatchingMeta: \"notMatchingMeta\"\r\n}\r\n\r\nexport const LOOK_ROOM_TYPES = {\r\n as: \"americanstandard\",\r\n grohe: \"grohe\",\r\n}\r\n","import store from \"./store\";\r\nimport {IS_LIXIL_PRODUCTION} from \"./config\";\r\nimport {isIframe} from \"./misc/helpers\";\r\n\r\nfunction isAnalytics() {\r\n return (typeof window.ga !== 'undefined');\r\n}\r\n\r\nfunction isMixPanel() {\r\n return (typeof window.mixpanel !== 'undefined');\r\n}\r\n\r\nfunction isGtag() {\r\n return (typeof window.gtag !== 'undefined')\r\n}\r\n\r\nconst Analytics = {\r\n sendEvent: function(action, label, data) {\r\n if(window.analyticsDebugging)\r\n console.log('analytics tracking', action, label, data);\r\n if(isAnalytics()) {\r\n ga('send', 'event', 'bathroom-visualizer', action, label);\r\n }\r\n if(isGtag()) {\r\n gtag('event', action, {\r\n 'event_category': 'visualizer',\r\n 'event_label': label\r\n });\r\n }\r\n if(isMixPanel()) {\r\n mixpanel.track(action, {\r\n source: 'bathroom-visualizer',\r\n label: label,\r\n shareUrl: window.shareUrl,\r\n domain: window.location.host,\r\n ...data\r\n });\r\n }\r\n return true;\r\n },\r\n sendPageEvent: function(label, data) {\r\n return this.sendEvent('page-change-to', label, data);\r\n },\r\n sendDataEnteredEvent: function(label, data) {\r\n return this.sendEvent('data-entered', label, data);\r\n },\r\n sendClickEvent: function(label, data) {\r\n const {isMobile} = store.getState().serverState;\r\n if (isMobile) {\r\n label = `mobile-${label}`;\r\n }\r\n console.log(\"label\", label);\r\n return this.sendEvent('clicked-on', label, data);\r\n },\r\n sendEcommerceEvent: function(action, data) {\r\n if (!IS_LIXIL_PRODUCTION) {\r\n return false\r\n }\r\n console.log(\"analytics ecommerce event:\", action, data);\r\n if (window.gtag) {\r\n window.gtag('event', action, data); // https://support.google.com/analytics/answer/9267735#online-sales\r\n }\r\n return true;\r\n },\r\n setUserId: function(userId) {\r\n if(isAnalytics()) {\r\n ga('set', 'userId', userId);\r\n }\r\n },\r\n setMixPanelPerson: function(email, name, phone) {\r\n if(isMixPanel()) {\r\n if(window.analyticsDebugging)\r\n console.log('set mixpanel identity', email, name, phone);\r\n mixpanel.alias(email);\r\n mixpanel.identify(email);\r\n mixpanel.people.set({'$email': email, '$created': new Date(),'$name': name, '$phone':phone});\r\n }\r\n },\r\n setExistingMixPanelPerson: function(email) {\r\n if(isMixPanel()) {\r\n if(window.analyticsDebugging)\r\n console.log(\"set existing mixpanel identity\");\r\n mixpanel.identify(email);\r\n }\r\n },\r\n logOutMixPanel: function() {\r\n if(window.analyticsDebugging)\r\n console.log('reset mixpanel identity', email, name, phone);\r\n if(isMixPanel()) {\r\n mixpanel.reset();\r\n }\r\n },\r\n sendParentPostMessage: function (action) {\r\n if (!isIframe() || !window.parent) {\r\n return\r\n }\r\n const {country, email, firstName, phoneNumber, postal} = store.getState().userState.userInfo;\r\n window.parent.postMessage({\r\n action,\r\n payload: {country, email, firstName, phoneNumber, postal},\r\n }, \"*\");\r\n },\r\n getSkuForAnalytics: function(feature, withPartId = true) {\r\n const sku = feature.dbFeature.sku || feature.dbFeature.sharedFeatureName;\r\n return withPartId\r\n ? feature.partId + \"-\" + sku.replace(/ /gi, \"_\")\r\n : sku.replace(/ /gi, \"_\")\r\n },\r\n getStringForAnalytics: function(string = \"\") {\r\n return string.replace(/ /gi, \"_\")\r\n },\r\n}\r\n\r\nexport const QKB_ANALYTIC_EVENTS = {\r\n quotingToolWizardSwitch: \"quotingtool-wizard-switch-\",\r\n}\r\n\r\nexport const LOOK_JOURNEY_ANALYTIC_EVENTS = {\r\n lookExit: \"look-exit\",\r\n lookCartButton: \"look-cart-button\",\r\n lookSidebarHome: \"look-sidebar-home\",\r\n lookSidebarFilters: \"look-sidebar-filters\",\r\n lookSidebarEdit: \"look-sidebar-edit\",\r\n lookSidebarRooms: \"look-sidebar-rooms\",\r\n lookSidebarPingPilot: \"look-sidebar-ping-pilot\",\r\n lookSidebarSave: \"look-sidebar-save\",\r\n lookSidebarMore: \"look-sidebar-more\",\r\n lookSidebarShare: \"look-sidebar-share\",\r\n lookSidebarReset: \"look-sidebar-reset\",\r\n lookSidebarFacebook: \"look-sidebar-facebook\",\r\n lookSidebarTwitter: \"look-sidebar-twitter\",\r\n lookSidebarPinterest: \"look-sidebar-pinterest\",\r\n lookSidebarFeatureGroup: \"look-sidebar-feature-group-\",\r\n lookFooterExpandMenu: \"look-footer-expand-menu\",\r\n lookFooterCloseMenu: \"look-footer-close-menu\",\r\n lookMenuHeaderClose: \"look-menu-header-close\",\r\n lookMenuHeaderBack: \"look-menu-header-back\",\r\n lookMenuHeaderViewType: \"look-menu-header-view-type-\",\r\n lookFooterList: \"look-footer-your-list\",\r\n lookZoomPlus: \"look-zoom-plus\",\r\n lookZoomMinus: \"look-zoom-minus\",\r\n lookCanvasLayer: \"look-canvas-layer-\",\r\n lookCanvasContextMenu: \"look-canvas-context-menu-\",\r\n lookCanvasContextMenuItem: \"look-canvas-context-menu-item-\",\r\n lookCanvasDemoPoint: \"look-canvas-demo-point-\",\r\n lookFeatureImageChangeLeft: \"look-feature-image-change-left\",\r\n lookFeatureImageChangeRight: \"look-feature-image-change-right\",\r\n lookFeature3dAndArOpen: \"look-feature-3d-and-ar-open\",\r\n lookFeature3dAndArClose: \"look-feature-3d-and-ar-close\",\r\n lookFeatureMoreInfoOpen: \"look-feature-more-info-open\",\r\n lookFeatureMoreInfoClose: \"look-feature-more-info-close\",\r\n lookFeatureInfoContentHeaderClose: \"look-feature-info-content-header-close\",\r\n lookFeatureInfoContent3dAr: \"look-feature-info-content-3d-ar\",\r\n lookFeatureInfoContentSwitch: \"look-feature-info-content-switch-\",\r\n lookFeatureInfoContentFeatureLink: \"look-feature-info-content-feature-link-\",\r\n lookFeatureInfoContentAccordionOpen: \"look-feature-info-content-accordion-open-\",\r\n lookFeatureInfoContentAccordionClose: \"look-feature-info-content-accordion-close-\",\r\n lookFeatureChange: \"look-feature-change\",\r\n lookFeatureUnlock: \"look-feature-unlock\",\r\n lookFeatureRemove: \"look-feature-remove-\",\r\n lookFeatureEnable: \"look-feature-enable-\",\r\n lookFeatureConfirmChange: \"look-feature-confirm-change\",\r\n lookFeatureOptions: \"look-feature-options-\",\r\n lookFeatureMatchColorsCheckbox: \"look-feature-match-colors-checkbox-\",\r\n lookFeatureMobile3dButton: \"look-feature-mobile-3d-button\",\r\n lookFeaturesListDesignRecommended: \"look-features-list-design-recommended-\",\r\n lookFeaturesList: \"look-features-list-\",\r\n lookFeaturesFiltersClose: \"look-features-filters-close\",\r\n lookFeaturesFiltersReset: \"look-features-filters-reset\",\r\n lookFeaturesFiltersAccordionOpen: \"look-features-filters-filter-group-open-\",\r\n lookFeaturesFiltersAccordionClose: \"look-features-filters-filter-group-close-\",\r\n lookFeaturesFiltersValueChecked: \"look-features-filters-filter-value-checked-\",\r\n lookFeaturesFiltersValuerUnChecked: \"look-features-filters-filter-value-unchecked-\",\r\n lookOverlayLeave: \"look-overlay-leave\",\r\n lookOverlaySave: \"look-overlay-save\",\r\n lookPopupLogin: \"look-popup-login\",\r\n lookRoom: \"look-room-\",\r\n lookLeadCapturePopupLogin: \"look-lead-capture-popup-login\",\r\n lookLeadCapturePopupRegister: \"look-lead-capture-popup-register\",\r\n lookLeadCapturePopupForgotPassword: \"look-lead-capture-popup-forgot-password\",\r\n lookLeadCapturePopupTwoFAResendCode: \"look-lead-capture-popup-two-fa-resend-code\",\r\n lookLeadCapturePopupTwoFAReceiveCall: \"look-lead-capture-popup-two-fa-receive-call\",\r\n lookLeadCapturePopupTwoFAUpdatePhone: \"look-lead-capture-popup-two-fa-update-phone\",\r\n lookMobileActiveFeatureButton: \"look-mobile-active-feature-button\",\r\n lookMobileListClose: \"look-mobile-list-close\",\r\n lookIntroLearnToUse: \"look-intro-learn-to-use\",\r\n lookIntroStartDesign: \"look-intro-start-design\",\r\n lookIntroSkip: \"look-intro-skip-on-step-\",\r\n lookIntroFinalStepStartDesign: \"look-intro-final-step-start-design\",\r\n lookIntroPagination: \"look-intro-pagination-\",\r\n lookIntroNextStep: \"look-intro-next-step-\",\r\n lookRoomIdeasOnIntro: \"look-room-ideas-on-intro\",\r\n lookRoomIdeasOpen: \"look-room-ideas-open\",\r\n lookRoomIdeasClose: \"look-room-ideas-close\",\r\n lookRoomIdeasPreset: \"look-room-ideas-preset-\",\r\n lookMainCategory: \"look-main-category-\",\r\n lookCanvasPolicyLinks: \"look-canvas-policy-links-\",\r\n lookListPolicyLinks: \"look-list-policy-links-\",\r\n lookListHeaderSave: \"look-list-header-save\",\r\n lookListBackToCustomize: \"look-list-back-to-customize\",\r\n lookListAddToCart: \"look-list-add-to-cart\",\r\n lookListOpenMiniCart: \"look-list-open-mini-cart\",\r\n lookListSelectAllItems: \"look-list-select-all-items-\",\r\n lookListCartItemSelect: \"look-list-cart-item-\",\r\n lookListCartItemQuantityChange: \"look-list-cart-item-quantity-\",\r\n lookListCartItemRemove: \"look-list-cart-item-remove-\",\r\n lookListCartItemMoreDropdown: \"look-list-cart-item-more-dropdown-\",\r\n lookListCartItemMoreDropdownWishlist: \"look-list-cart-item-more-dropdown-wishlist-\",\r\n lookListCartItemMoreDropdownChange: \"look-list-cart-item-more-dropdown-change-\",\r\n lookStylePopupConfirmRemove: \"look-style-popup-confirm-remove\",\r\n lookStylePopupRemoveBackContinue: \"look-style-popup-remove-back-continue\",\r\n lookStylePopupRemoveBack: \"look-style-popup-remove-back\",\r\n lookStylePopupConfirm: \"look-style-popup-confirm\",\r\n lookPopupSaveSuccessSubmit: \"look-popup-save-success-submit\",\r\n lookPopupSaveResetSubmit: \"look-popup-reset-submit\",\r\n lookPopupChangeViewSubmit: \"look-popup-change-view-submit\",\r\n lookMenuWizard: \"look-menu-wizard-\",\r\n lookWizardParent: \"look-wizard-parent-\",\r\n lookWizardListFeature: \"look-wizard-list-feature-\",\r\n lookWizardListFilter: \"look-wizard-list-filter-\",\r\n lookWizardMatchAll: \"look-wizard-match-all-\",\r\n lookWizardCompletedClose: \"look-wizard-completed-close\",\r\n lookShowCompatabilityAlert: \"look-show-compatability-alert\",\r\n lookCloseCompatabilityAlert: \"look-close-compatability-alert\",\r\n lookCloseAndApplyCompatabilityAlert: \"look-close-and-apply-compatability-alert\",\r\n lookLockedButton: \"look-locked-button\",\r\n lookSidebarRevertCtrlZ: \"look-sidebar-revert-or-ctrl-z\",\r\n}\r\n\r\nexport const PRODUCT_JOURNEY_ANALYTIC_EVENTS = {\r\n productTopButtonsShop: \"product-top-buttons-shop\",\r\n productTopButtonsExit: \"product-top-buttons-exit\",\r\n productTopButtonsMenu: \"product-top-buttons-menu\",\r\n productTopButtonsShare: \"product-top-buttons-share-\",\r\n productTopButtonsPingPilot: \"product-top-buttons-ping-pilot\",\r\n productTopButtonsShareFacebook: \"product-top-buttons-share-facebook\",\r\n productTopButtonsShareTwitter: \"product-top-buttons-share-twitter\",\r\n productTopButtonsSharePinterest: \"product-top-buttons-share-pinterest\",\r\n productTopButtonsSave: \"product-top-buttons-save\",\r\n productCanvasLayer: \"product-canvas-layer-\",\r\n productCanvasContextMenu: \"product-canvas-context-menu-\",\r\n productCanvasContextMenuItem: \"product-canvas-context-menu-item-\",\r\n productCanvasDemoPoint: \"product-canvas-demo-point-\",\r\n productSidebarHeaderAllProducts: \"product-sidebar-header-all-products\",\r\n productSidebarHeaderRoomLayouts: \"product-sidebar-header-room-layouts\",\r\n productSidebarHeaderCart: \"product-sidebar-header-cart\",\r\n productSidebarCategory: \"product-sidebar-category-\",\r\n productFeatureChange: \"product-feature-change\",\r\n productFeatureImageChangeLeft: \"product-feature-image-change-left\",\r\n productFeatureImageChangeRight: \"product-feature-image-change-right\",\r\n productFeatureMoreInfoOpen: \"product-feature-more-info-open\",\r\n productFeatureMoreInfoClose: \"product-feature-more-info-close\",\r\n productFeatureInfoContentAccordionOpen: \"product-feature-info-content-accordion-open-\",\r\n productFeatureInfoContentAccordionClose: \"product-feature-info-content-accordion-close-\",\r\n productFeatureQuantityChange: \"product-feature-quantity-change\",\r\n productFeatureRemove: \"product-feature-remove-\",\r\n productFeatureEnable: \"product-feature-enable-\",\r\n productFeature3dAndArOpen: \"product-feature-3d-and-ar-open\",\r\n productFeature3dAndArClose: \"product-feature-3d-and-ar-close\",\r\n productFeatureInfoContentHeaderClose: \"product-feature-info-content-header-close\",\r\n productFeatureInfoContent3dAr: \"product-feature-info-content-3d-ar\",\r\n productFeatureInfoContentSwitch: \"product-feature-info-content-switch-\",\r\n productFeatureInfoContentFeatureLink: \"product-feature-info-content-feature-link-\",\r\n productFeatureUnlockNow: \"product-feature-unlock-now\",\r\n productFeatureLockedBadge: \"product-feature-locked-badge\",\r\n productFeatureLocked3DButton: \"product-feature-locked-3d-button\",\r\n productFeatureSQFT: \"product-feature-sqft\",\r\n productFeatureAddToCart: \"product-feature-add-to-cart-\",\r\n productFeatureContinueShopping: \"product-feature-continue-shopping\",\r\n productFeatureCloseProductsList: \"product-feature-close-features-list\",\r\n productFeatureOptions: \"product-feature-options-\",\r\n productFeatureMobile3dButton: \"product-feature-mobile-3d-button\",\r\n productFeaturesNext: \"product-features-next-\",\r\n productFeaturesList: \"product-features-list-\",\r\n productFeaturesListViewType: \"product-features-list-view-type-\",\r\n productFeaturesFiltersClose: \"product-features-filters-close\",\r\n productFeaturesFiltersReset: \"product-features-filters-reset\",\r\n productFeaturesFiltersAccordionOpen: \"product-features-filters-filter-group-open-\",\r\n productFeaturesFiltersAccordionClose: \"product-features-filters-filter-group-close-\",\r\n productFeaturesFiltersValueChecked: \"product-features-filters-filter-value-checked-\",\r\n productFeaturesFiltersValuerUnChecked: \"product-features-filters-filter-value-unchecked-\",\r\n productSimilarListClose: \"product-similar-list-close\",\r\n productSimilarListTitle: \"product-similar-list-title\",\r\n productSimilarListFeature: \"product-similar-list-feature-\",\r\n productSimilarListFeatureAddToCart: \"product-similar-list-feature-add-to-cart-\",\r\n productOverlayLeave: \"product-overlay-leave\",\r\n productOverlaySave: \"product-overlay-save\",\r\n productPopupLogin: \"product-popup-login\",\r\n productMatchColorsVisualizeAllCheckbox: \"product-match-colors-visualize-all-checkbox-\",\r\n productRoom: \"product-room-\",\r\n productRoomLayouts: \"product-room-layouts\",\r\n productRoomIdeas: \"product-room-ideas\",\r\n productRoomIdeasPreset: \"product-room-ideas-preset-\",\r\n productFiltersOpen: \"product-filters-open\",\r\n productMenuFooterButton: \"product-menu-footer-button\",\r\n productPopupSaveSuccessSubmit: \"product-popup-save-success-submit\",\r\n productPopupResetSubmit: \"product-popup-reset-submit\",\r\n productPopupChangeViewSubmit: \"product-popup-change-view-submit\",\r\n roomsRoomLayouts: \"rooms-room-layouts\",\r\n roomsRoomIdeas: \"rooms-room-ideas\",\r\n cartCheckoutLogin: \"cart-checkout-login\",\r\n cartCheckoutRegister: \"cart-checkout-register\",\r\n cartCheckoutSuccessContinueShopping: \"cart-checkout-success-continue-shopping\",\r\n cartCheckoutSuccessViewAll: \"cart-checkout-success-view-all-\",\r\n cartCheckoutSuccessFeature: \"cart-checkout-success-feature-\",\r\n cartTermsAccept: \"cart-terms-accept\",\r\n cartTwoFANext: \"cart-two-fa-next\",\r\n cartTwoFAUpdatePhone: \"cart-two-fa-update-phone\",\r\n cartTwoFAResendCode: \"cart-two-fa-resend-code\",\r\n cartTwoFAReceiveCall: \"cart-two-fa-receive-call\",\r\n leadCapturePopupLogin: \"lead-capture-popup-login\",\r\n leadCapturePopupRegister: \"lead-capture-popup-register\",\r\n leadCapturePopupForgotPassword: \"lead-capture-popup-forgot-password\",\r\n leadCapturePopupTwoFAResendCode: \"lead-capture-popup-two-fa-resend-code\",\r\n leadCapturePopupTwoFAReceiveCall: \"lead-capture-popup-two-fa-receive-call\",\r\n leadCapturePopupTwoFAUpdatePhone: \"lead-capture-popup-two-fa-update-phone\",\r\n productLockedButton: \"product-locked-button\",\r\n shopFeaturesList: \"shop-features-list-\",\r\n shopFeaturesListOptions: \"shop-features-list-options-\",\r\n shopFeatureOptions: \"shop-feature-options-\",\r\n shopFeatureAddToCart: \"shop-feature-add-to-cart-\",\r\n shopHelpChat: \"shop-help-chat\",\r\n shopSQFTButton: \"shop-feature-sqft\",\r\n}\r\n\r\nexport default Analytics\r\n","import {\r\n hardCodeIsCaesarStone,\r\n hardCodeIsLowes,\r\n hardCodeIsMcDermott,\r\n hardCodeIsModerno,\r\n hardCodeIsPorcelanosa,\r\n isProd\r\n} from \"../../misc/fabricatorHardcode\";\r\n\r\nexport const isDevMode = () => {\r\n return window.location.href.includes(\"dev=1\") || document.kvConfig.devMode\r\n};\r\n\r\nexport const SQFT_POST_MESSAGE_ACTIONS = {\r\n initialLoad: \"initialLoad\",\r\n setQTData: \"setQTData\",\r\n closeSqFtCalc: \"closeSqFtCalc\",\r\n callResetDataPopup: \"callResetDataPopup\",\r\n callChangeLayoutDataPopup: \"callChangeLayoutDataPopup\",\r\n userIdleResetCounter: \"userIdleResetCounter\",\r\n resetHistory: \"resetHistory\",\r\n saveHistory: \"saveHistory\",\r\n setNewLayoutOnSqft: \"setNewLayoutOnSqft\",\r\n setCanvasCenter: \"setCanvasCenter\",\r\n stopRender: \"stopRender\",\r\n startRender: \"startRender\",\r\n};\r\n\r\nexport const MEASURE_UNITS = {\r\n Metric: \"Metric\",\r\n Imperial: \"Imperial\",\r\n};\r\n\r\n/**\r\n *\r\n * This is used only to take shape part id\r\n * @type {{top_cabinet: string, bottom_cabinet: string, center_island_countertop: string, slabPlaceHolder: string, seamPiece: string, countertop: string, spacer: string, vanity_countertop: string, backsplashPiece: string}}\r\n */\r\nexport const SHAPE_PART_ID = {\r\n edge: 'edge',\r\n seamPiece: 'seamPiece',\r\n backsplashPiece: 'backsplashPiece',\r\n waterfallPiece: 'waterfallPiece',\r\n slabPlaceHolder: 'slabPlaceHolder',\r\n top_cabinet: 'top_cabinet',//\r\n bottom_cabinet: 'bottom_cabinet',//\r\n tall_cabinet: 'tall_cabinet', //\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n countertop: 'countertop',\r\n spacer: 'spacer',\r\n vanity_countertop: 'vanity_countertop',\r\n center_island_countertop: 'center_island_countertop',\r\n dishwasher: \"dishwasher\",\r\n hood: \"hood\",\r\n};\r\n\r\nexport const FEATUREGROUP_PART_ID = {\r\n specialty_cut_and_designs: 'specialty_cut_and_designs'\r\n}\r\n\r\nexport const SHAPE_ROTATE_DIRECTION = {\r\n right: 0,\r\n left: 1,\r\n};\r\n\r\nexport const ALIGN = {\r\n right: 'right',\r\n left: 'left',\r\n center: 'center',\r\n};\r\n\r\nexport const SHAPE_TYPE = {\r\n polygon: \"polygon\",\r\n square: \"square\",\r\n wideangle: \"wideangle\",\r\n horseshoe: \"horseshoe\",\r\n appliances: \"appliances\",\r\n};\r\n\r\nexport const RENDER_TEMPLATES = {\r\n default: \"default\",\r\n linesOnly: \"linesOnly\",\r\n filledPrimary: \"filledPrimary\",\r\n accordingToFeature: \"accordingToFeature\",\r\n filledActive: \"filledActive\",\r\n};\r\n\r\n/**\r\n * NAVIGATION\r\n */\r\nexport const SIDEBAR2_BUTTONS = [\r\n {\r\n menu: \"summary\",\r\n classNames: \"button--parent button--summary\",\r\n text: \"mobile.summary\",\r\n hasMenu: true\r\n },\r\n // {\r\n // menu: \"settings\",\r\n // classNames: \"button--parent button--settings\",\r\n // text: \"settings\",\r\n // hasMenu: true\r\n // }\r\n];\r\n\r\nexport const SIDEBAR_BUTTONS_MENU = {\r\n move: \"move\",\r\n shapes: \"shapes\",\r\n layouts: \"layouts\",\r\n summary: \"summary\",\r\n delete: \"delete\",\r\n cabinetset: \"cabinetset\"\r\n}\r\n\r\nexport const SIDEBAR_SLAB_BUTTONS = {\r\n move: \"move\",\r\n //moveSlab: \"moveSlab\",\r\n rotate: \"rotate\",\r\n loadSlab: \"loadSlab\",\r\n seam: \"seam\",\r\n duplicate: \"duplicate\",\r\n delete: \"delete\",\r\n};\r\n\r\nexport const MOVABLE_IMAGE_TYPES = {\r\n slabImage: \"slabImage\",\r\n};\r\n\r\nexport const SIDEBAR_SLAB_SEAM_BUTTONS = {\r\n //addFreeSeam: \"addFreeSeam\", //todo enable when ready\r\n addSeamHorizontal: \"addSeamHorizontal\",\r\n addSeamVertical: \"addSeamVertical\",\r\n undoSeam: \"undoSeam\",\r\n resetSeams: \"resetSeams\",\r\n};\r\n\r\n/**\r\n * remember to update SIDEBAR_HIDDEN_BUTTONS (names should be the same)\r\n */\r\nexport const SIDEBAR_NAVIGATION_BUTTONS = {\r\n move: \"move\",\r\n freeDraw: \"freeDraw\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n corners: \"corners\",\r\n radius: \"radius\",\r\n edge: \"edge\",\r\n backsplash: \"backsplash\",\r\n end_cap: \"end_cap\",\r\n appliances: \"appliances\", // disable appliances for caes\r\n angle: \"angle\",\r\n bumpout: \"bumpout\",\r\n label: \"label\", // disable appliances for caes\r\n text: \"text\",\r\n ...((!hardCodeIsLowes()) && { mitered: \"mitered\" }),\r\n ...((!hardCodeIsMcDermott() && !hardCodeIsLowes()) && { toolWaterfall: \"toolWaterfall\" }),\r\n ...((!isProd && (hardCodeIsModerno() || hardCodeIsPorcelanosa() || isDevMode())) && { toolUnderlayment: \"toolUnderlayment\" }),\r\n duplicate: \"duplicate\",\r\n};\r\n\r\nexport const SIDEBAR_TYPE_AREA_NAVIGATION_BUTTONS = {\r\n move: \"move\",\r\n freeDraw: \"freeDraw\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n corners: \"corners\",\r\n edge: \"edge\",\r\n bumpout: \"bumpout\",\r\n mitered: \"mitered\",\r\n ...((hardCodeIsModerno() || hardCodeIsPorcelanosa() || isDevMode()) && {toolWaterfall: \"toolWaterfall\"}),\r\n label: \"label\", // disable appliances for caes\r\n text: \"text\",\r\n duplicate: \"duplicate\",\r\n};\r\n\r\nexport const SIDEBAR_NAVIGATION_CABINET_BUTTONS = {\r\n move: \"move\",\r\n resize: \"resize\",\r\n rotate: \"rotate\",\r\n lower: \"lower\",\r\n upper: \"upper\",\r\n tall: \"tall\",\r\n centerIsland: \"centerIsland\",\r\n spacer: \"spacer\",\r\n //style: \"style\",\r\n wall: \"wall\",\r\n //crown: \"crown\",\r\n top_handle: \"top_handle\",\r\n bottom_handle: \"bottom_handle\",\r\n end_panel: \"end_panel\",\r\n appliances: \"appliances\", // disable appliances for caes\r\n text: \"text\",\r\n};\r\n\r\nexport const SIDEBAR_NAVIGATION_BUTTONS_LEVEL3 = {\r\n filters: \"filters\",\r\n};\r\n\r\nexport const SIDEBAR_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.tools\",\r\n shouldHardcodeMessage: true,\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_BUTTONS\r\n }, {\r\n menu: \"shapes\",\r\n message: \"sqft.navigation.menu.shapes\",\r\n hasMenu: true\r\n }, {\r\n menu: \"layouts\",\r\n message: \"sqft.navigation.menu.layouts\",\r\n hasMenu: true\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },\r\n // {\r\n // menu: \"settings\",\r\n // message: \"sqft.navigation.menu.settings\"\r\n // },\r\n];\r\n\r\nexport const SIDEBAR_TYPE_AREA_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.move\",\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_BUTTONS\r\n }, {\r\n menu: \"shapes\",\r\n message: \"sqft.navigation.menu.shapes\",\r\n hasMenu: true\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },\r\n];\r\n\r\nexport const SIDEBAR_CABINET_BUTTONS = [\r\n {\r\n menu: \"move\",\r\n message: \"sqft.navigation.menu.move\",\r\n hasMenu: true,\r\n subMenu: SIDEBAR_NAVIGATION_CABINET_BUTTONS\r\n }, { // disable summary for caes\r\n menu: \"summary\",\r\n message: \"sqft.navigation.menu.summary\",\r\n hasMenu: true\r\n }, {\r\n menu: \"delete\",\r\n message: \"sqft.navigation.menu.delete\",\r\n title: \"Remove an object from the workspace\", //todo translation\r\n additionalClassNames: \"dot-delete\"\r\n },...(isDevMode() ? [{\r\n menu: \"cabinetset\",\r\n message: \"Cabinet Set\",\r\n }] : []),\r\n // {\r\n // menu: \"settings\",\r\n // message: \"sqft.navigation.menu.settings\"\r\n // },\r\n];\r\n\r\nexport const SIDEBAR_WITH_FEATURES_SUBMENU = [\r\n SIDEBAR_NAVIGATION_BUTTONS.end_cap,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS.centerIsland\r\n];\r\n\r\nexport const SIDEBAR_HIDDEN_BUTTONS = {\r\n mitered: \"mitered\",\r\n toolWaterfall: \"toolWaterfall\",\r\n toolUnderlayment: \"toolUnderlayment\",\r\n buttonMitered: \"buttonMitered\",\r\n buttonCustomBacksplash: \"buttonCustomBacksplash\",\r\n edgePeninsulaUnderwrap: \"edgePeninsulaUnderwrap\",\r\n};\r\n\r\nexport const SIDEBAR_SHAPE_BUTTONS = {\r\n square: \"square\",\r\n lshape: \"lshape\",\r\n wideangle: \"wideangle\",\r\n rectangle: \"rectangle\",\r\n dot: \"dot\",\r\n freeDraw: \"freeDraw\",\r\n};\r\n\r\n/*\r\n* Hide shapes after removing them in popup window\r\n*/\r\nexport const isDisabledInPopupShouldBeHidden = () => {\r\n return hardCodeIsCaesarStone() //enabled only for caesarstone\r\n}\r\n\r\nexport const SIDEBAR_LAYOUTS_BUTTONS = [\r\n \"S\", \"SP\", \"SI\", \"SPI\", \"SN\", \"SPN\", \"SNI\", \"SPNI\", \"L\", \"LI\", \"LN\", \"LNI\"\r\n];\r\n\r\nexport const SQFT_APPLIANCES = {\r\n hood: \"hood\",\r\n refrigerator: \"refrigerator\",\r\n range: \"range\",\r\n sink: \"sink\",\r\n doubleSink: \"doubleSink\",\r\n dishwasher: \"dishwasher\",\r\n iceMachine: \"ice machine\",\r\n oven: \"oven\",\r\n stovetop: \"stovetop\",\r\n trashCompactor: \"trash compactor\",\r\n wineFridge: \"wine fridge\"\r\n};\r\n\r\nexport const SQFT_APPLIANCES_CAES = {\r\n hood: \"hood\",\r\n sink: \"sink\",\r\n stovetop: \"stovetop\",\r\n};\r\n\r\nexport const CABINET_LABELS = {\r\n top_cabinet: 'top_cabinet',\r\n bottom_cabinet: 'bottom_cabinet',\r\n tall_cabinet: 'tall_cabinet',\r\n crown_molding: 'crown_molding',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n handle: 'handle',\r\n};\r\n\r\nexport const SQFT_CABINET_APPLIANCES = {\r\n //hood: \"hood\",\r\n //microwave: \"microwave\",\r\n};\r\n\r\nexport const SQFT_APPLIANCES_WITH_SUBMENU = [\r\n SQFT_APPLIANCES.oven,\r\n SQFT_APPLIANCES.hood,\r\n SQFT_APPLIANCES.dishwasher,\r\n SQFT_APPLIANCES.stovetop,\r\n SQFT_APPLIANCES.refrigerator,\r\n SQFT_APPLIANCES.range,\r\n SQFT_CABINET_APPLIANCES.microwave,\r\n //partIds which names are mismatched\r\n 'stove',\r\n 'fridge',\r\n]\r\n\r\nexport const SQFT_SHAPES_THAT_ADD_OVERHANG = [\r\n SQFT_APPLIANCES.oven,\r\n SQFT_APPLIANCES.range,\r\n SQFT_APPLIANCES.hood,\r\n SQFT_APPLIANCES.dishwasher,\r\n SQFT_APPLIANCES.stovetop,\r\n SQFT_APPLIANCES.refrigerator,\r\n CABINET_LABELS.tall_cabinet_boxes,\r\n CABINET_LABELS.lower_cabinet_boxes,\r\n //partIds which names are mismatched\r\n 'stove',\r\n 'fridge',\r\n]\r\n\r\nexport const SQFT_MODE = {\r\n regular: \"regular\",\r\n slab: \"slab\",\r\n};\r\n\r\nexport const SQFT_VIEW_MODE = {\r\n twoDMode: \"2d Mode\",\r\n threeDMode: \"3d Mode\",\r\n threeDModeDoors: \"3d Mode doors\",\r\n augmentedReality: \"Augmented reality\",\r\n augmentedRealityDoors: \"Augmented reality doors\"\r\n}\r\n\r\nexport const MANUAL_CALCULATION_ROW_TYPES = {\r\n countertopRows: \"countertopRows\",\r\n backsplashRows: \"backsplashRows\",\r\n edgeRows: \"edgeRows\",\r\n};\r\n\r\nexport const DIRECTION = {\r\n north: \"north\",\r\n east: \"east\",\r\n south: \"south\",\r\n west: \"west\",\r\n};\r\n\r\nexport const MANUAL_CALCULATION_MEASURE = {\r\n length: \"length\",\r\n height: \"height\",\r\n width: \"width\",\r\n selectedFeature: \"selectedFeature\",\r\n};\r\n\r\nexport const SQFT_BACKSPLASH_TYPES = [\"4\", \"6\", \"18\"];\r\nexport const SQFT_BACKSPLASH_TYPES_METRIC = [\"100\", \"150\", \"600\"];\r\nexport const SQFT_WALL_TYPES = [\"wall\"];\r\nexport const SQFT_MEASURE_UNIT = {\r\n imperial: \"Imperial\",\r\n metric: \"Metric\",\r\n};\r\nexport const FREE_DRAW_TYPE = {\r\n shape: \"shape\",\r\n wall: \"wall\",\r\n};\r\n\r\nexport const CONTEXT_MENU_TYPE = {\r\n list: \"list\",\r\n buttons: \"buttons\",\r\n};\r\n\r\nexport const SQFT_FEATURES = {\r\n bumpouts: 'bumpouts',\r\n countertop: 'countertop',\r\n center_island_countertop: 'center_island_countertop',\r\n slabs: 'slabs',\r\n backsplashes: 'backsplashes',\r\n edges: 'edges',\r\n radius: 'radius',\r\n corners: 'corners',\r\n shower_wall: 'shower_wall',\r\n shower_floor: 'shower_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n vanity_accent: 'vanity_accent',\r\n vanity_countertop: 'vanity_countertop',\r\n vanity_backsplash: 'vanity_backsplash',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n shower_wall_accent: 'shower_wall_accent',\r\n accent_wall: 'accent_wall',\r\n bathroom_floor: 'bathroom_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n front_wall: 'front_wall',\r\n top_cabinet: 'top_cabinet',\r\n bottom_cabinet: 'bottom_cabinet',\r\n lower_cabinet_boxes: 'lower_cabinet_boxes',\r\n upper_cabinet_boxes: 'upper_cabinet_boxes',\r\n tall_cabinet_boxes: 'tall_cabinet_boxes',\r\n crown_molding: 'crown_molding',\r\n handle: 'handle',\r\n top_handle: 'top_handle',\r\n bottom_handle: 'bottom_handle',\r\n underlayment: 'underlayment',\r\n wall_door_end_accessory: 'wall_door_end_accessory',\r\n base_door: 'base_door',\r\n island_panel: 'island_panel',\r\n refridgerator_panel: 'refridgerator_panel',\r\n end_cap: 'end_cap'\r\n};\r\n\r\nexport const PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART = [\r\n 'edges',\r\n 'backsplashes',\r\n 'countertop',\r\n 'center_island_countertop',\r\n 'radius',\r\n 'corners',\r\n 'slabs',\r\n 'vanity_countertop',\r\n 'vanity_backsplash',\r\n 'shower_wall',\r\n 'shower_interior_wall',\r\n 'shower_interior_wall_accent',\r\n 'accent_wall',\r\n 'shower_floor',\r\n 'bathroom_floor',\r\n 'kitchen_floor',\r\n 'wall_a',\r\n 'wall_b',\r\n 'wall_c',\r\n 'front_wall',\r\n];\r\n\r\nexport const END_CAP_CABINETS_PART_IDS = [\r\n SQFT_FEATURES.wall_door_end_accessory,\r\n SQFT_FEATURES.base_door,\r\n SQFT_FEATURES.island_panel,\r\n SQFT_FEATURES.refridgerator_panel,\r\n];\r\n\r\nexport const END_CAP_AREA_PART_IDS = [\r\n SQFT_FEATURES.end_cap,\r\n];\r\n\r\nexport const END_CAP_PART_IDS = [\r\n ...END_CAP_CABINETS_PART_IDS,\r\n ...END_CAP_AREA_PART_IDS,\r\n];\r\n\r\nexport const SQFT_PARENT_FEATURE_GROUP_PART_IDS = {\r\n upper_cabinet_boxes: 'top_cabinet',\r\n tall_cabinet_boxes: 'tall_cabinet',\r\n lower_cabinet_boxes: 'bottom_cabinet',\r\n}\r\n\r\nexport const SQFT_CHILD_FEATURE_GROUP_PART_IDS = {\r\n top_cabinet: 'upper_cabinet_boxes',\r\n tall_cabinet: 'tall_cabinet_boxes',\r\n bottom_cabinet: 'lower_cabinet_boxes',\r\n}\r\n\r\nexport const SQFT_AREA_TYPE_PART_IDS = {\r\n shower_wall: 'shower_wall',\r\n shower_floor: 'shower_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n shower_wall_accent: 'shower_wall_accent',\r\n accent_wall: 'accent_wall',\r\n bathroom_floor: 'bathroom_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n};\r\n\r\nexport const COUNTERTOP_LABELS = {\r\n center_island_countertop: 'center_island_countertop',\r\n countertop: 'countertop',\r\n vanity_countertop: 'vanity_countertop',\r\n vanity_accent: 'vanity_accent',\r\n shower_wall: 'shower_wall',\r\n shower_wall_accent: 'shower_wall_accent',\r\n shower_interior_wall: 'shower_interior_wall',\r\n shower_interior_wall_accent: 'shower_interior_wall_accent',\r\n accent_wall: 'accent_wall',\r\n shower_floor: 'shower_floor',\r\n bathroom_floor: 'bathroom_floor',\r\n kitchen_floor: 'kitchen_floor',\r\n wall_a: 'wall_a',\r\n wall_b: 'wall_b',\r\n wall_c: 'wall_c',\r\n front_wall: 'front_wall',\r\n};\r\n\r\nexport const HANDLE_TO_CABINETS = {\r\n [SQFT_FEATURES.top_handle]: [SQFT_FEATURES.upper_cabinet_boxes],\r\n [SQFT_FEATURES.bottom_handle]: [SQFT_FEATURES.lower_cabinet_boxes],\r\n [SQFT_FEATURES.handle]: [SQFT_FEATURES.upper_cabinet_boxes, SQFT_FEATURES.lower_cabinet_boxes],\r\n};\r\n\r\nexport const CABINET_COMMON_COLOR_PART_IDS = [\r\n SHAPE_PART_ID.top_cabinet,\r\n SHAPE_PART_ID.bottom_cabinet,\r\n SHAPE_PART_ID.tall_cabinet,\r\n SHAPE_PART_ID.tall_cabinet_boxes,\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n];\r\n\r\nexport const FEATURE_QUANTITY_UNITS = [\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n SHAPE_PART_ID.tall_cabinet_boxes\r\n];\r\n\r\nexport const BACKSPLASH_LABELS = {\r\n backsplash: 'backsplash',\r\n backsplashes: 'backsplashes',\r\n vanity_backsplash: 'vanity_backsplash',\r\n};\r\n\r\nexport const EDGE_LABELS = {\r\n edge: 'edge',\r\n edge_profile: 'edge_profile',\r\n center_island_edge: 'center_island_edge',\r\n};\r\n\r\nexport const CORNER_LABELS = {\r\n radius: 'radius',\r\n corner: 'corner',\r\n};\r\n\r\n// export const FEATURES_WITH_0_VALUE_FOR_THE_SLABS = [\r\n// SQFT_FEATURES.backsplashes,\r\n// SQFT_FEATURES.countertop,\r\n// SQFT_FEATURES.center_island_countertop,\r\n// SQFT_FEATURES.shower_wall,\r\n// SQFT_FEATURES.shower_floor,\r\n// SQFT_FEATURES.kitchen_floor,\r\n// SQFT_FEATURES.vanity_countertop,\r\n// SQFT_FEATURES.vanity_backsplash,\r\n// SQFT_FEATURES.shower_interior_wall,\r\n// SQFT_FEATURES.shower_interior_wall_accent,\r\n// SQFT_FEATURES.bathroom_floor,\r\n// SQFT_FEATURES.wall_a,\r\n// SQFT_FEATURES.wall_b,\r\n// SQFT_FEATURES.wall_c\r\n// ];\r\n\r\nexport const SHAPE_PART_IDS_USING_SAME_COLOR = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n waterfallPiece: SHAPE_PART_ID.waterfallPiece,\r\n backsplashPiece: SHAPE_PART_ID.backsplashPiece,\r\n seamPiece: SHAPE_PART_ID.seamPiece,\r\n}\r\n\r\nexport const FEATURES_WITH_0_VALUE_FOR_THE_SLABS = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n}\r\n\r\nexport const ALLOWED_LABEL_NAV_ITEMS = {\r\n ...COUNTERTOP_LABELS,\r\n ...BACKSPLASH_LABELS,\r\n ...CABINET_LABELS,\r\n ...SQFT_AREA_TYPE_PART_IDS,\r\n ...END_CAP_PART_IDS\r\n}\r\n\r\nexport const POINT_PROPERTY = {\r\n angle: 'angle', // 45 degCorner\r\n arcLength: 'arcLength', // Radius\r\n}\r\n\r\nexport const RESOURCE_TYPE = {\r\n attachedToLine: 'attachedToLine',\r\n waterfallSectionsData: 'waterfallSectionsData',\r\n underlaymentSections: 'underlaymentSections',\r\n selectedFeature: null\r\n}\r\n\r\nexport const RESOURCE_ATTACHED_TO_TYPE = {\r\n edge: 'edge',\r\n backsplash: 'backsplash',\r\n wall: 'wall',\r\n mitered: 'mitered',\r\n underlayment: 'underlayment',\r\n bumpout: 'bumpout',\r\n waterfall: 'waterfall',\r\n crown_molding: 'crown_molding',\r\n end_cap: 'end_cap',\r\n}\r\n\r\nexport const RESOURCE_ATTACHED_TO_NAME = {\r\n waterfall: 'Waterfall',\r\n}\r\n\r\nexport const WORKSPACE_RESOURCES = {\r\n spacers: 'spacers',\r\n handles: 'handles',\r\n walls: 'walls',\r\n shapeColors: 'shapeColors',\r\n waterfall: 'waterfall',\r\n removedFeatures: 'removedFeatures',\r\n snappedShapeGroups: 'snappedShapeGroups',\r\n selectedShapes: 'selectedShapes',\r\n images3d: 'images3d',\r\n}\r\n\r\n/**\r\n * Should be unique\r\n * @type {{peninsulaUnderwrap: string, underlayment: string, waterfall: string, cabinetReturn: string, overhangReturn: string}}\r\n */\r\nexport const WATERFALL_SHAPES_KEY = {\r\n cabinetReturn: 'Cabinet Return',\r\n waterfall: 'Waterfall Panel',\r\n overhangReturn: 'Overhang Return',\r\n underlayment: 'Underlayment',\r\n peninsulaUnderwrap: 'Ppeninsula Underwrap',\r\n}\r\n\r\nexport const WATERFALL_SHAPES_NAME = {\r\n cabinetReturn: 'Cabinet Return',\r\n waterfall: 'Waterfall Panel',\r\n overhangReturn: 'Overhang Return',\r\n underlayment: 'Underlayment',\r\n peninsulaUnderwrap: 'Underlayment',\r\n}\r\n\r\nexport const SQFT_GROUP = {\r\n area: 'area',\r\n cabinets: 'cabinets',\r\n default: 'default',\r\n}\r\n\r\nexport const SQFT_AR3D_POPUP_CONTENT_TYPE = {\r\n ar: 'ar',\r\n threeD: 'threeD',\r\n}\r\n\r\nexport const SQFT_AR3D_GLB_VIEWER = {\r\n singleModel: 'singleModel',\r\n separateModels: 'separateModels',\r\n}\r\n\r\nexport const MITER_UNDERWRAP_EDGE_NAMES = [\r\n \"miter underwrap\"\r\n];\r\n\r\nexport const MITER_EDGE_NAMES = [\r\n 'Miter 1 1/2\"',\r\n 'Miter 2\"-3\"',\r\n 'Miter 4\"-6\"',\r\n 'Miter Edge',\r\n 'Mitered Edge',\r\n 'Rimrock - 981',\r\n 'Ingletado',\r\n 'Inglete',\r\n 'Inglete.',\r\n]\r\n\r\nexport const WATERFALL_OVERLAY_TYPE = {\r\n waterfall: 'waterfall',\r\n peninsulaUnderwrap: 'peninsulaUnderwrap',\r\n}\r\n\r\nexport const MITERED_OVERLAY_TYPE = {\r\n mitered: \"mitered\",\r\n underlayment: \"underlayment\",\r\n}\r\n\r\nexport const APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE = [\r\n SQFT_APPLIANCES.sink,\r\n SQFT_APPLIANCES.doubleSink,\r\n SQFT_APPLIANCES.stovetop\r\n]\r\n\r\nexport const CABINET_SET2 = {\r\n \"doors_only\": false,\r\n \"positions\": [\r\n {\r\n \"partId\": \"stove\",\r\n \"x\": 77.99999999999999,\r\n \"y\": 0,\r\n \"z\": -112.66666666666666,\r\n \"rotation\": -90,\r\n \"url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/All-Stove-ZLINE-RA-RG-36.glb\",\r\n \"width\": 36,\r\n \"height\": 12,\r\n \"depth\": 27.7656\r\n },\r\n {\r\n \"partId\": \"lower_cabinet_boxes\",\r\n \"x\": 18,\r\n \"y\": 0,\r\n \"z\": -112.66666666666667,\r\n \"rotation\": 0,\r\n \"url\": \"https://d1mb1i73swc8dz.cloudfront.net/ar-composer/B42 Satin Black.glb\",\r\n \"material_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/All-Bottom Cabinet-Light Italian Walnut-Bryant-12-34.5-3DB.glb\",\r\n \"target_width\": 42,\r\n \"target_depth\": 24,\r\n \"target_height\": 34,\r\n \"width\": 42,\r\n \"height\": 34,\r\n \"depth\": 24,\r\n \"featureId\": 195671726,\r\n \"parentFeatureId\": 195833433,\r\n \"shapeLayout\": \"rectangle\"\r\n },\r\n {\r\n \"partId\": \"lower_cabinet_boxes\",\r\n \"x\": -18,\r\n \"y\": 0,\r\n \"z\": -112.66666666666667,\r\n \"rotation\": 0,\r\n \"url\": \"https://d1mb1i73swc8dz.cloudfront.net/ar-composer/All-Bottom Cabinet-Winter Cape-Bryant-36-34.5-SM-ERB-BER.glb\",\r\n \"material_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/All-Bottom Cabinet-Light Italian Walnut-Bryant-12-34.5-3DB.glb\",\r\n \"target_width\": 36,\r\n \"target_depth\": 36,\r\n \"target_height\": 34,\r\n \"width\": 36,\r\n \"height\": 34,\r\n \"depth\": 24,\r\n \"featureId\": 195671868,\r\n \"parentFeatureId\": 195833433,\r\n \"shapeLayout\": \"lowerLayoutType1\"\r\n },\r\n {\r\n \"partId\": \"countertop\",\r\n \"x\": -18,\r\n \"y\": 34,\r\n \"z\": -112.66666666666667,\r\n \"width\": 78,\r\n \"height\": 36,\r\n \"edge_url\": \"https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb\",\r\n \"texture_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\",\r\n \"contour_points\": [\r\n {\r\n \"x\": -18,\r\n \"y\": -112.666667\r\n },\r\n {\r\n \"x\": 60,\r\n \"y\": -112.666667\r\n },\r\n {\r\n \"x\": 60,\r\n \"y\": -88.666667\r\n },\r\n {\r\n \"x\": 6,\r\n \"y\": -88.666667\r\n },\r\n {\r\n \"x\": -84,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -18,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -18,\r\n \"y\": -112.666667\r\n }\r\n ],\r\n \"overhang\": [\r\n true,\r\n false,\r\n true,\r\n true,\r\n true,\r\n true\r\n ]\r\n },\r\n {\r\n \"partId\": \"countertop\",\r\n \"x\": -84.00000000000003,\r\n \"y\": 34,\r\n \"z\": -100.66666666666664,\r\n \"width\": 36,\r\n \"height\": 24,\r\n \"edge_url\": \"https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb\",\r\n \"texture_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\",\r\n \"contour_points\": [\r\n {\r\n \"x\": -84,\r\n \"y\": -100.666667\r\n },\r\n {\r\n \"x\": -48,\r\n \"y\": -100.666667\r\n },\r\n {\r\n \"x\": -48,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": 6,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -84,\r\n \"y\": -100.666667\r\n }\r\n ],\r\n \"overhang\": [\r\n true,\r\n false,\r\n true,\r\n false\r\n ]\r\n },\r\n {\r\n \"partId\": \"countertop\",\r\n \"x\": -48.00000000000003,\r\n \"y\": 34,\r\n \"z\": -100.66666666666664,\r\n \"width\": 36,\r\n \"height\": 24,\r\n \"edge_url\": \"https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb\",\r\n \"texture_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\",\r\n \"contour_points\": [\r\n {\r\n \"x\": -48,\r\n \"y\": -100.666667\r\n },\r\n {\r\n \"x\": -12,\r\n \"y\": -100.666667\r\n },\r\n {\r\n \"x\": -12,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -48,\r\n \"y\": -76.666667\r\n },\r\n {\r\n \"x\": -48,\r\n \"y\": -100.666667\r\n }\r\n ],\r\n \"overhang\": [\r\n true,\r\n true,\r\n true,\r\n false\r\n ]\r\n }\r\n ]\r\n}\r\n","export const ContentType = {\r\n None: 0,\r\n Layout: 1,\r\n Design: 2,\r\n DisplayRoom: 3,\r\n Loading: 4,\r\n QuotedItems: 5,\r\n RoomScene: 6,\r\n};\r\n\r\nexport const ContentTypeName = {\r\n 1: \"Room Layout\",\r\n 2: \"Design\",\r\n 3: \"Room Ideas\",\r\n 6: \"Room Scene\",\r\n};\r\n\r\nexport const ContentTypeNameTranslate = {\r\n 1: \"desktop.nav.roomLayout\",\r\n 2: \"desktop.nav.designButton\",\r\n 3: \"desktop.nav.roomIdeas\",\r\n 6: \"desktop.nav.roomScene\",\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0,\r\n Complex: 1,\r\n};\r\n\r\nexport const UserPopupTypes = {\r\n Unlock: 1, // simple User Login popup\r\n GetQuote: 2, // Get quote button\r\n NewDesign: 3, // when N clicks happen & Email Design Click\r\n Schedule: 4, // schedule button\r\n};\r\nexport const ConfirmPopupTypes = {\r\n ConsultationRequest: 1,\r\n SqftResetChanges: 2,\r\n SqftUpdateQuestion: 3,\r\n AssignQuoteOnExistingUser: 4,\r\n DeleteCartItemsPopup: 5,\r\n ChangeWizardToPreviousStepSelection: 6,\r\n ReplaceRoomWhenItExistsInCartButWeAddNew: 7,\r\n};\r\n\r\nexport const UserPopupContent = {\r\n register: \"register\",\r\n login: \"login\",\r\n terms: \"terms\",\r\n forgot: \"forgot\",\r\n twoFA: \"twoFA\",\r\n twoFAVerify: \"twoFAVerify\",\r\n};\r\n\r\nexport const QuoteRequestType = {\r\n RequestQuote: 'RequestQuote',\r\n ScheduleAnAppointment: 'ScheduleAnAppointment',\r\n RequestDateTime: 'RequestDateTime',\r\n RegularDesign: 'RegularDesign', //Email Design\r\n RequestConsultation: 'RequestConsultation'\r\n};\r\n\r\nexport const UserAction = {\r\n Login: 1,\r\n Register: 2\r\n};\r\n\r\nexport const SqftUpdateTypes = {\r\n Reset: 1,\r\n UpdateData: 2\r\n};\r\n\r\nexport const dbFeatureRelatedFeaturesProperties = [\"relatedFeatures\", \"bundledFeatures\"];\r\nexport const dbFeatureFilterProperties = [\"fabFilterValueIDs\", \"filterValueIDs\"];\r\nexport const otherMissingProperties = [\"thirdPartyAR3DUrls\", \"thirdPartyAR3DMetaData\",\"lixilAR3DUrls\",\"lixilQRCode\"];\r\n","export default class DesignNavigationItem {\r\n /**\r\n *\r\n * @type {string}\r\n */\r\n text = '';\r\n\r\n /**\r\n *\r\n * @type {featureInterface}\r\n */\r\n part = null;\r\n\r\n /**\r\n *\r\n * @type {boolean}\r\n */\r\n matchesMetaFailed = false;\r\n\r\n /**\r\n *\r\n * @type {[featureInterface]}\r\n */\r\n colorOptions = null;\r\n\r\n constructor(text, feature, colorOptions = null) {\r\n this.text = text;\r\n this.part = feature;\r\n this.matchesMetaFailed = feature.matchesMetaFailed || false;\r\n this.colorOptions = colorOptions;\r\n // this.matchesMetaFailedArray = part.matchesMetaFailedArray || null\r\n }\r\n}\r\n","import COLOR_THEMES from \"./colorThemes\";\r\nimport $ from \"jquery\";\r\nimport {hardCodeIsPorcelanosa} from \"../../../../../misc/fabricatorHardcode\";\r\nimport {SQFT_AR3D_GLB_VIEWER} from \"../../../constants\";\r\n\r\nclass SqftConfig {\r\n constructor() {\r\n // Initialization of properties\r\n this.ctx = null;\r\n this.measureUnit = \"Imperial\";\r\n this.mmDivider = 1000;\r\n this.mm2ToM2Divider = 1000000;\r\n this.millimetersMultiplier = 25.4;\r\n this.inchesToMMultiplier = 1 / 39.37;\r\n this.sqftToMmMultiplier = 92903;\r\n this.sqftToM2Multiplier = 1 / 10.764;\r\n this.lnftToMmMultiplier = 304.8;\r\n this.waterfallImperialHeight = 36;\r\n this.waterfallMetricHeight = 900;\r\n this.miteredEdgeAdditionalImperialArea = hardCodeIsPorcelanosa() ? 1.5 : 0;\r\n this.miteredEdgeAdditionalMetricArea = 0; //40;//38.1;\r\n this.edgeHeightImperial = 1.25;\r\n this.edgeHeightMetric = 30;\r\n this.minApplianceLineLength = 1;\r\n this.maxApplianceLineLength = 150;\r\n this.slab = {\r\n imageWidthMetric: 3200,\r\n imageHeightMetric: 1600,\r\n imageWidthImperial: 120,\r\n imageHeightImperial: 60\r\n };\r\n this.workspace = {\r\n canvas: $('#workspace'),\r\n gridSize: 12,\r\n getScaledGridSize: () => this.getScaledGridSize(this.workspace.gridSize),\r\n getDefaultScaledGridSize: () => this.getScaledGridSize(this.workspace.gridSize, true),\r\n fontSize: $(window).width() <= 1024 ? 14 : 16,\r\n fontSizeMetric: $(window).width() <= 1024 ? 14 : 16,\r\n fontSizeSmallest: $(window).width() <= 1024 ? 11 : 11,\r\n debug: false,\r\n snapToGrid: false,\r\n menuItemActive: null\r\n };\r\n this.defaultScaleExport = 7;\r\n this.zoomSpeed = 5;\r\n this.controls = {\r\n scale: $('#scale-control'),\r\n scaleHoriz: $('#scale-control-horiz'),\r\n snapToGrid: $('#snapToGrid'),\r\n debug: $('#debug'),\r\n delete: $('#delete'),\r\n flipH: $('#flipH'),\r\n flipV: $('#flipV'),\r\n rotateLeft: $('#rotateLeft'),\r\n rotateRight: $('#rotateRight')\r\n };\r\n this.activeClass = 'active';\r\n this.activePalletItemClass = \"pallet-tool-icon-selected\";\r\n this.groups = {\r\n tools: \"tools\"\r\n };\r\n this.filterGroups = [];\r\n this.tutorialIsRunning = false;\r\n this.highlight = {\r\n points: false,\r\n lines: false,\r\n type: '',\r\n id: null,\r\n demoShow: false,\r\n rotateAngle: false,\r\n };\r\n this.activeTheme = Object.keys(COLOR_THEMES)[0];\r\n this.SNAP_OFFSET = 12;\r\n this.activeFontRegular = \"playregular\";\r\n this.activeFontBold = \"playbold\";\r\n this.crownMoldingParams = {\r\n distance: 10\r\n };\r\n this.threeD = {\r\n //glbViewer: SQFT_AR3D_GLB_VIEWER.singleModel,\r\n glbViewer: SQFT_AR3D_GLB_VIEWER.separateModels,\r\n useGoogleModelViewer: false, // this requires singleModel\r\n useStagingDomain: false,\r\n }\r\n\r\n // Initialize dependent properties\r\n this.initializeDependentProperties();\r\n\r\n // Add event listeners\r\n document.addEventListener('DOMContentLoaded', this.initialize);\r\n window.addEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n initializeDependentProperties = () => {\r\n this.fieldWidth = this.getMM() * 13;\r\n this.fieldWidthCabinet = 4;\r\n this.updateDimensions();\r\n this.updateDefaultScale();\r\n this.scale = this.defaultScale;\r\n }\r\n\r\n getMM = () => {\r\n const getDPI = () => {\r\n const div = document.createElement('div');\r\n div.style.height = '1in';\r\n const body = document.getElementsByTagName('body')[0];\r\n body.appendChild(div);\r\n const dpi = div.offsetHeight;\r\n body.removeChild(div);\r\n return dpi === 0 ? 96 : dpi;\r\n }\r\n return getDPI() / 25.4;\r\n }\r\n\r\n isKiosk = (() => {\r\n let isKiosk = false;\r\n try {\r\n isKiosk = (parent && parent.parent && parent.parent.window.app && parent.parent.window.app.db);\r\n } catch (e) {\r\n isKiosk = false;\r\n }\r\n return isKiosk;\r\n })();\r\n\r\n kioskApp = (() => {\r\n if (this.isKiosk) {\r\n return parent.parent.window.app;\r\n }\r\n })();\r\n\r\n initialize = () => {\r\n this.updateDimensions();\r\n this.initializeDependentProperties();\r\n }\r\n\r\n updateDimensions = () => {\r\n this.updateDefaultScale();\r\n this.updateWorkspace(window.innerWidth);\r\n }\r\n\r\n updateDefaultScale = () => {\r\n this.defaultScale = window.innerWidth <= 1024 ? 1.5 : 3.75;\r\n };\r\n\r\n updateWorkspace = (windowWidth) => {\r\n this.workspace.fontSize = windowWidth <= 1024 ? 14 : 16;\r\n this.workspace.fontSizeMetric = windowWidth <= 1024 ? 14 : 16;\r\n this.workspace.fontSizeSmallest = windowWidth <= 1024 ? 11 : 11;\r\n }\r\n\r\n getMeasureMultiplier = () => {\r\n switch (this.measureUnit) {\r\n case \"Metric\":\r\n return this.millimetersMultiplier;\r\n case \"Metric-meters\":\r\n return 1 / 39.37;\r\n case \"Imperial\":\r\n default:\r\n return 1;\r\n }\r\n }\r\n\r\n getMeasureUnitPostfix = (shouldAddWhitespace = false) => {\r\n switch (this.measureUnit) {\r\n case \"Metric\":\r\n return shouldAddWhitespace ? \" mm\" : \"mm\";\r\n case \"Imperial\":\r\n default:\r\n return \"\\\"\";\r\n }\r\n }\r\n\r\n isDevMode = () => window.location.href.includes(\"dev=1\");\r\n\r\n isCabinetGroupInURL = () => window.location.href.includes(\"cabinets=1\");\r\n\r\n isSQFTEnabledInURL = () => window.location.hash.includes(\"sqft\");\r\n\r\n getScaledGridSize = (gridSize, isDefault = false) => {\r\n const scale = isDefault ? this.defaultScale : this.scale;\r\n let scaledGridSize = Math.round(gridSize / scale);\r\n let nearest = (12 % scaledGridSize);\r\n return nearest < scaledGridSize / 2 ?\r\n scaledGridSize - nearest :\r\n scaledGridSize + nearest;\r\n }\r\n}\r\n\r\nexport default new SqftConfig();\r\n","import _ from 'lodash';\r\nimport $ from \"jquery\";\r\n\r\nimport Shape from \"./shapes/sqftShape\";\r\nimport MovableImage from \"./shapes/movableImage\";\r\nimport WorkspaceEvents, {clearAllMenusEvents} from \"./workspace/workspaceEvents\";\r\nimport EventManager from \"./../store/sqftEventManager\";\r\nimport RulerOverlay from \"./workspace/ruler\";\r\nimport history from \"./workspaceHistory\";\r\nimport config from \"./../store/sqftConfig\";\r\nimport {\r\n mmToM,\r\n sqInchesToSqFoot,\r\n mm2ToM2,\r\n getEdgeLength,\r\n getBacksplashArea, getEdgeArea, getPointField\r\n} from \"../../../helpers/sqftHelper\";\r\n//todo sqft-react\r\n// import edges from \"./controls/edges\";\r\n// import Edges from \"./controls/edges\";\r\n// import TranslatesProvider from \"./../../../translatesProvider\";\r\nimport ShapeHelper, {getEdgeFeatures} from \"../../../helpers/shapeHelper\";\r\nimport store from \"../../../../../store\";\r\nimport {getBacksplashLength} from \"../../../helpers/sqftHelper\";\r\nimport {\r\n FEATUREGROUP_PART_ID,\r\n MOVABLE_IMAGE_TYPES,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SHAPE_PART_ID,\r\n SHAPE_TYPE,\r\n WORKSPACE_RESOURCES\r\n} from \"../../../constants\";\r\nimport ResultImages from \"./workspace/resultImages\";\r\nimport sqftShapeManager from \"../store/sqftShapeManager\";\r\nimport sqftImageManager from \"../store/sqftImageManager\";\r\nimport {deleteCroppedSlabImage, setSqftCroppedSlabImages} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport sqftSlabManager from \"../store/sqftSlabManager\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nimport {attachResource, closeSQFTPopup} from \"./controls/resourseCanas\";\r\nimport slabWorkspace from \"./slab/slabWorkspace\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\nimport {checkShapeForAvailablePartId} from \"./shapes/shapeFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../misc/helpers\";\r\nimport {getFeatureGroup} from \"../../../helpers/sqftHelperUi\";\r\nimport {getQtCatName} from \"../../../helpers/sqftQuotesHelper\";\r\nimport cabinetWorkspace from \"./cabinet/cabinetWorkspace\";\r\nimport LineCorner from \"./shapes/lineHooks/lineCorner\";\r\nimport TextBoxManager from \"./workspace/textBoxManager\";\r\nimport {\r\n setShapeIdsWithMissingFeature,\r\n setShouldShowChangeShapeFeatureMissingMessage,\r\n setSQFTPopup\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport {getShapeFeatureId} from \"../../../helpers/featureHelper\";\r\nimport sqftResourcesManager from \"../store/sqftResoursesManager\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../constantsFeature\";\r\nimport workspaceControllers, {importControllersData} from \"../store/workspaceControllers\";\r\nimport {isSFTCabinetsGroup} from \"../../../helpers/sqftNavigationHelper\";\r\nimport sqftShapeIntersectionsManager from \"../store/sqftShapeIntersectionsManager\";\r\nimport {FeatureObjectDTO} from \"../../../dto/FeatureObjectDTO\";\r\nimport SqftStore from \"../store/sqftStore\";\r\n\r\nconst workspace = function() {\r\n //private variables\r\n var canvas = null;\r\n var self = this;\r\n var state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n allowDragEdge: false,\r\n allowDragBumpoutEdge: false,\r\n allowDragMiteredEdge: false,\r\n lineHighlight: true,\r\n loading: false\r\n };\r\n var objIds = 0;\r\n var pos = { //workspace top-left corner position\r\n x: 0,\r\n y: 0\r\n };\r\n var shapes = [];\r\n var nodes = {\r\n appBody : $('body'),\r\n tools: {\r\n designDefault: $('#design-default')\r\n }\r\n };\r\n //public variables\r\n this.name = 'workspace';\r\n this.isInitialized = false;\r\n this.isEdgeFeatureError = false;\r\n this.dataHasBeenImported = false;\r\n this.isLastParent = true; // used to get {x: 0, y:0} position\r\n this.miteredController = null;\r\n this.underlaymentController = null;\r\n this.resultImages = new ResultImages(this);\r\n this.textBoxManager = new TextBoxManager();\r\n this[WORKSPACE_RESOURCES.spacers] = [];\r\n this[WORKSPACE_RESOURCES.handles] = [];\r\n this[WORKSPACE_RESOURCES.walls] = [];\r\n this[WORKSPACE_RESOURCES.shapeColors] = [];\r\n this[WORKSPACE_RESOURCES.waterfall] = [];\r\n this[WORKSPACE_RESOURCES.removedFeatures] = [];\r\n this[WORKSPACE_RESOURCES.snappedShapeGroups] = [];\r\n this[WORKSPACE_RESOURCES.selectedShapes] = [];\r\n this[WORKSPACE_RESOURCES.images3d] = [];\r\n\r\n //private functions\r\n function setCanvas(value) {\r\n canvas = value;\r\n }\r\n var moveWorkspace = function(mousePos) {\r\n var xDiff = mousePos.x - state.mouseDownPosition.x;\r\n var yDiff = mousePos.y - state.mouseDownPosition.y;\r\n\r\n pos.x -= xDiff;\r\n state.mouseDownPosition.x = mousePos.x;\r\n\r\n pos.y -= yDiff;\r\n state.mouseDownPosition.y = mousePos.y;\r\n\r\n slabWorkspace.setPos({\r\n x: slabWorkspace.pos.x += xDiff,\r\n y: slabWorkspace.pos.y += yDiff\r\n }\r\n )\r\n };\r\n //private events\r\n var onMouseDown = function(mousePos, e) {\r\n void e;\r\n //debugger // eslint-disable-line no-debugger\r\n if (!window.lineInputFocused) {\r\n EventManager.stealCursor(true, true);\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n EventManager.setCursor('grabbing', self, false);\r\n //debugger // eslint-disable-line no-debugger\r\n return true;\r\n }\r\n };\r\n\r\n function onMouseUp(mousePos, e) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n // var selectedMenu = $('.pallet-tool-icon-selected');\r\n // if (!(selectedMenu && selectedMenu.attr('data-action') === \"rotate-left\" || selectedMenu.attr('data-action') === \"delete\")) {\r\n // EventManager.resetCursor(self);\r\n // config.highlight.type = '';\r\n // $('.steps-scope-config-button').removeClass('active');\r\n // }\r\n //todo this takes too much time to update\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n\r\n return onMouseMove(mousePos, e);\r\n }\r\n function onMouseMove(mousePos, e) {\r\n //debugger // eslint-disable-line no-debugger\r\n if(e.terminate) {\r\n return false;\r\n }\r\n if(state.mouseDown) {\r\n moveWorkspace(mousePos);\r\n // EventManager.setCursor('grabbing', self);\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n return true;\r\n }\r\n\r\n //public functions\r\n this.getObjIds = function() {\r\n return objIds;\r\n };\r\n this.setObjIds = (value) => {\r\n objIds = value\r\n };\r\n this.stealCursor = function(who) {\r\n EventManager.resetCursor(self);\r\n for(var i = 0; i < shapes.length; i++) {\r\n shapes[i].stealCursor(who);\r\n }\r\n };\r\n this.setAllowEdges = function(allow) {\r\n state.allowDragEdge = allow;\r\n };\r\n this.getAllowEdges = function() {\r\n return state.allowDragEdge\r\n };\r\n this.setAllowBumpoutEdges = function(allow) {\r\n state.allowDragBumpoutEdge = allow;\r\n };\r\n this.getAllowBumpoutEdges = function() {\r\n return state.allowDragBumpoutEdge\r\n };\r\n this.setAllowMiteredEdges = function(allow) {\r\n state.allowDragMiteredEdge = allow;\r\n };\r\n this.getAllowMiteredEdges = function() {\r\n return state.allowDragMiteredEdge\r\n };\r\n this.setAllowLineHighlight = function(allow) {\r\n state.lineHighlight = allow;\r\n };\r\n this.getAllowLineHighlight = function() {\r\n return state.lineHighlight\r\n };\r\n this.getCenter = function() {\r\n return {\r\n x: pos.x * -1,\r\n y: pos.y * -1\r\n }\r\n };\r\n this.setCenter = function(canvasWidth = window.innerWidth, canvasHeight = window.innerHeight) {\r\n pos.x = parseInt(0 - (canvasWidth / 2));\r\n pos.y = parseInt(0 - (canvasHeight / 2));\r\n //console.log(\"pos.x!\", pos.x)\r\n //console.log(\"pos.y!\", pos.y)\r\n };\r\n this.getVisibleCenter = function() {\r\n return {\r\n x: (pos.x + (canvas.width()/2)) / config.scale,\r\n y: (pos.y + (canvas.height()/2)) / config.scale\r\n };\r\n };\r\n this.getAllShapePoints = () => {\r\n let allShapePoints = [];\r\n for (const shape of shapes) {\r\n //allShapePoints.push(...shape.getPointFieldArray());\r\n const shapeCenter = shape.getCenter();\r\n const shapeCenterPointField = getPointField(shapeCenter, shape);\r\n void shapeCenterPointField;\r\n allShapePoints.push(shapeCenter);\r\n }\r\n return allShapePoints\r\n }\r\n this.getShapesCenterPoint = () => {\r\n const allShapePoints = this.getAllShapePoints();\r\n return ShapeHelper.getCenterPoint(allShapePoints);\r\n }\r\n this.getCanvas = function() {\r\n return canvas[0];\r\n };\r\n this.get$Canvas = function() {\r\n return canvas;\r\n };\r\n this.getOffset = function() {\r\n return self.getCenter();\r\n };\r\n this.setPosition = (newPos) => {\r\n slabWorkspace.setPos({\r\n x: slabWorkspace.pos.x += pos.x - newPos.x,\r\n y: slabWorkspace.pos.y += pos.y - newPos.y\r\n }\r\n )\r\n pos = _.clone(newPos);\r\n };\r\n this.getPosition = function() {\r\n return pos;\r\n };\r\n this.getScale = function() {\r\n return config.scale;\r\n };\r\n this.getState = function() {\r\n return state;\r\n };\r\n this.isEmpty = () => {\r\n return this.getShapes().length === 0\r\n }\r\n this.getHoverShape = function() {\r\n for (var i = 0; i < shapes.length; i++) {\r\n var shape = shapes[i];\r\n if (shape.isHovering()) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getHoveredSqftShape = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.isHovering() && shape instanceof sqftShape) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getMovingShape = () => {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getState().mouseDown && shape instanceof sqftShape) {\r\n return shape;\r\n }\r\n }\r\n };\r\n this.getHoverBumpout = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n let lines = shape.getLines ? shape.getLines() : null;\r\n if (lines) {\r\n for (let n = 0; n < lines.length; n++) {\r\n if (lines[n].isWithBumpout && lines[n].isWithBumpout() && lines[n].bumpoutOverlay.isHoveringRect()) {\r\n return lines[n];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getLineWithMovingBumpout = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n let lines = shape.getLines ? shape.getLines() : null;\r\n if (lines) {\r\n for (let n = 0; n < lines.length; n++) {\r\n if (lines[n].isWithBumpout && lines[n].isWithBumpout() && lines[n].bumpoutOverlay.isBumpoutPointMoving()) {\r\n return lines[n];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverPoint = function() {\r\n for(var i = 0; i < shapes.length; i++) {\r\n if(typeof (shapes[i].getHoverPoint) === 'function') {\r\n var point = shapes[i].getHoverPoint();\r\n if(point) {\r\n return point;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverMiteredPoint = function() {\r\n for(let i = 0; i < shapes.length; i++) {\r\n if(typeof (shapes[i].getHoverPoint) === 'function' && shapes[i].isWithMitered()) {\r\n let point = shapes[i].getHoverMiteredPoint();\r\n if(point) {\r\n return point;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoveredLine = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n if (typeof (shapes[i].getHoverSegment) === 'function') {\r\n let hoveredLine = shapes[i].getHoverSegment();\r\n if (hoveredLine) {\r\n return hoveredLine;\r\n }\r\n }\r\n }\r\n };\r\n this.getHoveredLines = (skipShapeIds = []) => {\r\n const iterateShapes = shapes.filter(shp => !skipShapeIds.includes(shp.id));\r\n const hoveredLines = [];\r\n for (let i = 0; i < iterateShapes.length; i++) {\r\n if (typeof (iterateShapes[i].getHoverSegment) === 'function') {\r\n let hoveredLine = iterateShapes[i].getHoverSegmentV2();\r\n if (hoveredLine) {\r\n hoveredLines.push(hoveredLine);\r\n }\r\n }\r\n }\r\n return hoveredLines\r\n };\r\n this.getHoveredLineCorner = function() {\r\n for (let i = 0; i < shapes.length; i++) {\r\n if (typeof (shapes[i].getHoverSegmentOutlineCorner) === 'function') {\r\n let hoveredLine = shapes[i].getHoverSegmentOutlineCorner();\r\n if (hoveredLine) {\r\n return hoveredLine;\r\n }\r\n }\r\n }\r\n };\r\n this.getShapesWithoutAttachedResources = (isWithoutHidden = false) => {\r\n if (isWithoutHidden) {\r\n return shapes.filter(shape => !shape.isHidden);\r\n }\r\n return shapes\r\n }\r\n\r\n this.getShapes = (isWithoutHidden = false) => {\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n\r\n if (isWithoutHidden) {\r\n return shapes.concat(attachedToLineResources).filter(shape => !shape.isHidden);\r\n }\r\n\r\n return shapes.concat(attachedToLineResources);\r\n };\r\n this.getShapeIds = function() {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.map(shape => shape.id);\r\n };\r\n this.getShapesByIds = (ids) => {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.filter(shape => ids.includes(shape.id));\r\n };\r\n this.getShapesBySlabModeCoreParentId = (ids) => {\r\n const shapes = this.getShapes();\r\n\r\n return shapes.filter(shape => ids.includes(shape.slabModeCoreParentId));\r\n };\r\n this.getAttachedToLineResource = (type) => {\r\n const reduxState = store.getState();\r\n return reduxState.sqftResourceState.attachedToLine.filter(attachedToLine => {\r\n return attachedToLine.type === type\r\n });\r\n };\r\n\r\n this.clearWorkspace = () => {\r\n this.removeAllShapes();\r\n objIds = 0;\r\n shapes = [];\r\n this.textBoxManager.removeAllTextBoxes();\r\n sqftImageManager.removeAllSlabImages();\r\n sqftSlabManager.removeAllSlabBacksplashes();\r\n sqftResourcesManager.deleteAllResources();\r\n sqftResourcesManager.deleteAllMiteredSections();\r\n sqftSlabManager.deleteShapeOffset();\r\n }\r\n\r\n this.import = (importData) => {\r\n //todo on cancel click line state.withBumout somehow turns to false\r\n this.clearWorkspace();\r\n clearAllMenusEvents();\r\n SqftStore.edgeFeatures = [];\r\n\r\n console.log(\"importData to SQFT\", importData);\r\n this.dataHasBeenImported = true;\r\n objIds = importData.objIds || 0;\r\n const values = importData.countertops || importData.shapes; // QCDES-1639 \"shapes\" for old compatibility\r\n state.loading = true;\r\n let _images = [];\r\n let _attachedResources = [];\r\n if (values) {\r\n for (let i = values.length - 1; i >= 0; i--) {\r\n let value = values[i];\r\n if (value.lines) {\r\n this.importShape(value);\r\n } else if (Object.keys(RESOURCE_ATTACHED_TO_TYPE).some((key) => key === value.type)) {\r\n _attachedResources.push(value);\r\n } else if (value.image && value.type !== MOVABLE_IMAGE_TYPES.slabImage) {\r\n _images.push(value);\r\n }\r\n }\r\n }\r\n //1) Import additional shapes that are visible only in the slab mode\r\n sqftSlabManager.importSlabBacksplashes(importData.slabAdditionalShapesList || []);\r\n\r\n //2) Add attached resources\r\n //We will skip adding mitered as it was already added when the line was initiated\r\n for (const attachedResource of _attachedResources) {\r\n let lines = this.getLinesAndLineCorners();\r\n lines.forEach((line) => {\r\n if (attachedResource.attachedToId === line.id) {\r\n line.isDisabledInPopup = attachedResource.isDisabledInPopup;\r\n attachResource(line.isLine ? line : null,\r\n line instanceof LineCorner ? line : null,\r\n attachedResource.type,\r\n attachedResource.featureId,\r\n attachedResource.partId,\r\n attachedResource.name,\r\n attachedResource.height ? attachedResource.height : attachedResource.featureId, //support for old quotes, can be removed in future\r\n attachedResource.id,\r\n attachedResource.qtCatName\r\n );\r\n } else if (attachedResource.attachedTo === line.id) {\r\n //old version support\r\n attachResource(line.isLine ? line : null,\r\n line instanceof LineCorner ? line : null,\r\n attachedResource.type,\r\n attachedResource.featureId,\r\n attachedResource.partId,\r\n attachedResource.image.name,\r\n attachedResource.height ? attachedResource.height : attachedResource.featureId, //support for old quotes, can be removed in future\r\n attachedResource.id\r\n );\r\n }\r\n });\r\n }\r\n //Add movable images\r\n\r\n for (let i = 0; i < _images.length; i++) {\r\n this.importImage(_images[i]);\r\n\r\n // if (data.attachedTo) {\r\n // switch(value.type) {\r\n // case \"backsplash\":\r\n // case \"wall\":\r\n // if (value.part === 'lineCorner') {\r\n // data.attachedTo.addBacksplashToCornerLine(value.image.name, value.type, value.image.id);\r\n // } else {\r\n // data.attachedTo.addBacksplashToLine(value.image.name, value.type, value.image.id);\r\n // }\r\n // break;\r\n // case \"edge\":\r\n // if (value.part === 'lineCorner') {\r\n // data.attachedTo.lineCorner.addEdgeToCornerLine(value.image.name, value.image.id);\r\n // } else {\r\n // data.attachedTo.addEdgeToLine(value.image.name, value.image.id);\r\n // }\r\n // break;\r\n // }\r\n // }\r\n }\r\n\r\n this.textBoxManager.setImportedTextBoxes(importData.textBoxes);\r\n sqftImageManager.importSlabImages(importData.slabImages || []);\r\n\r\n const {sqftMenuState} = store.getState();\r\n const {isShapeFeatureMissing} = sqftMenuState;\r\n if (isShapeFeatureMissing) {\r\n this.showChangeShapeColorsMessage();\r\n }\r\n importControllersData(importData.controllers);\r\n\r\n history.rememberShapes();\r\n state.loading = false;\r\n };\r\n this.importImage = (imageData) => {\r\n const image = this.generateImage(imageData.image);\r\n const importedMovableImage = this.addImage(\r\n image,\r\n imageData.size.width,\r\n imageData.size.height,\r\n imageData.attachedTo,\r\n imageData.attachedTo ? imageData.attachedTo.getParent() : null,\r\n imageData.type,\r\n imageData.subtype,\r\n null,\r\n null,\r\n imageData.part,\r\n imageData.id,\r\n imageData.priority,\r\n imageData.featureId\r\n );\r\n // _img.pos.x = imageData.pos.x;\r\n // _img.pos.y = imageData.pos.y;\r\n importedMovableImage.importData(imageData); //import object here\r\n\r\n return importedMovableImage\r\n }\r\n this.generateImage = (imageData) => {\r\n let image = new Image();\r\n for (const imageProperty in imageData) {\r\n if (imageData.hasOwnProperty(imageProperty)) {\r\n image[imageProperty] = imageData[imageProperty];\r\n }\r\n }\r\n return image\r\n };\r\n this.importShape = (shapeData) => {\r\n let shape = new Shape();\r\n shape.import(shapeData);\r\n shapes.push(shape);\r\n\r\n return shape\r\n }\r\n this.showChangeShapeColorsMessage = () => {\r\n const {sqftMenuState} = store.getState();\r\n const {isShapeFeatureMissing, shapeIdsWithMissingFeature} = sqftMenuState;\r\n if (isShapeFeatureMissing) {\r\n store.dispatch(setSQFTPopup(\r\n {\r\n title: this.intl.formatMessage({id: \"sqft.popup.title.systemMessage\"}),\r\n content: this.intl.formatMessage({id: \"sqft.popup.system.shapeFeaturesWasFailed\"}),\r\n isOpened: true,\r\n confirmCallback: () => {\r\n this.removeShapeWithIds(shapeIdsWithMissingFeature);\r\n store.dispatch(setShapeIdsWithMissingFeature([]));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(false));\r\n closeSQFTPopup();\r\n },\r\n confirmText: this.intl.formatMessage({id: \"sqft.popup.button.yes\"}),\r\n cancelCallback: () => {\r\n store.dispatch(setShapeIdsWithMissingFeature([]));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(false));\r\n closeSQFTPopup();\r\n },\r\n cancelText: this.intl.formatMessage({id: \"sqft.popup.button.no\"}),\r\n }\r\n ));\r\n }\r\n }\r\n this.getPointProperty = (property) => {\r\n let arcLengths = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines) {\r\n let lines = shape.getLines();\r\n for (let n = 0; n < lines.length; n++) {\r\n let point = lines[n].from;\r\n if (point[property] > 0) {\r\n arcLengths.push({\r\n id: point.id,\r\n value: point[property],\r\n featureId: point.featureId,\r\n qtCatName: getQtCatName()\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return arcLengths;\r\n };\r\n this.getSink = function() {\r\n var sinks = [];\r\n for(var i = 0; i < shapes.length; i++) {\r\n var shape = shapes[i];\r\n if(shape.getAttachedTo && !shape.getAttachedTo()) { //sink not edging\r\n var img = shape.getImage();\r\n var sinkId = img.dataset.id;\r\n if(sinkId) {\r\n var bExists = false;\r\n for(var n = 0; n < sinks.length; n++) {\r\n if(sinks[n].id === sinkId) {\r\n sinks[n].qty++;\r\n bExists = true;\r\n break;\r\n }\r\n }\r\n if(!bExists) {\r\n sinks.push({\r\n sink: img,\r\n name: img.dataset.name,\r\n id: sinkId,\r\n qty: 1\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return sinks;\r\n };\r\n /**\r\n * get all bumpouts\r\n */\r\n this.getBumpouts = () => {\r\n return shapes\r\n .filter(shape => shape.getLines)\r\n .flatMap(shape =>\r\n shape.getLines()\r\n .filter(line => line.isWithBumpout && line.isWithBumpout())\r\n .map(line => {\r\n const area = config.measureUnit === \"Metric\"\r\n ? line.bumpoutOverlay.getBumpoutTotalArea().millimeters\r\n : line.bumpoutOverlay.getBumpoutTotalArea().inches;\r\n const featureObjectDTO = new FeatureObjectDTO(line.bumpoutOverlay.id, FEATUREGROUP_PART_ID.specialty_cut_and_designs, line.bumpoutOverlay.featureId);\r\n featureObjectDTO.addBumpoutArea(area)\r\n\r\n return featureObjectDTO;\r\n })\r\n );\r\n };\r\n\r\n this.getLines = () => {\r\n let allLines = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines && shape instanceof sqftShape) {\r\n allLines = allLines.concat(shape.getLines());\r\n }\r\n }\r\n\r\n return allLines;\r\n };\r\n\r\n this.getLineCorners = () => {\r\n let allLineCorners = [];\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLineCorners) {\r\n allLineCorners = allLineCorners.concat(shape.getLineCorners());\r\n }\r\n }\r\n\r\n return allLineCorners;\r\n };\r\n\r\n this.getLinesAndLineCorners = () => {\r\n return this.getLines().concat(this.getLineCorners())\r\n }\r\n\r\n this.getLineById = (id) => {\r\n let allLines = this.getLines();\r\n\r\n return allLines.find((line) => line.id === id);\r\n };\r\n\r\n this.getLineCornerById = (id) => {\r\n let allLines = this.getLines();\r\n const line = allLines.find((line) => line.lineCorner !== undefined && line.lineCorner.id === id);\r\n\r\n if (line !== undefined) {\r\n return line.lineCorner\r\n }\r\n };\r\n\r\n this.getLineOrCornerLineById = (id) => {\r\n let lineSegment = this.getLineById(id)\r\n if (lineSegment) {\r\n return lineSegment\r\n }\r\n return this.getLineCornerById(id)\r\n };\r\n\r\n this.getMiteredSections = function() {\r\n // let mitered = [];\r\n // for(let i = 0; i < shapes.length; i++) {\r\n // let shape = shapes[i];\r\n // if(shape.getLines) {\r\n // let lines = shape.getLines();\r\n // for(let n = 0; n < lines.length; n++) {\r\n // if(lines[n].isWithMitered()) {\r\n // mitered.push(lines[n].miteredOverlay);\r\n // }\r\n // }\r\n // }\r\n // }\r\n const reduxState = store.getState();\r\n\r\n return reduxState.sqftMiteredState.miteredSections;\r\n };\r\n\r\n /**\r\n * @deprecated use features from redux store\r\n */\r\n this.getShapeType = (type) => {\r\n let addedEdges = [];\r\n let edgeName;\r\n let isImageShapeType;\r\n let isLabelShapeType;\r\n let backsplashLength = 0;\r\n let area = 0;\r\n let length = 0;\r\n let realLength = 0;\r\n let lineLength = 0;\r\n let unit = null;\r\n const storedShapes = this.getShapes().filter(shp => {\r\n return !SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(shp.partId)\r\n });\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n\r\n for (let i = 0; i < storedShapes.length; i++) {\r\n const shape = storedShapes[i];\r\n isImageShapeType = shape.type && shape.type.includes(type);\r\n isLabelShapeType = shape instanceof sqftShape && shape.partId.includes(type);\r\n if (isImageShapeType && !isLabelShapeType) {\r\n const attachedTo = shape.attachedToId\r\n ? this.getLineOrCornerLineById(shape.attachedToId)\r\n : shape.historyProps\r\n ? shape.historyProps.attachedTo\r\n : null; //old quotes support can be removed in future\r\n\r\n let featureId = +shape.featureId;\r\n length = 0;\r\n area = 0;\r\n\r\n if (type === \"backsplash\") {\r\n length = attachedTo ? getBacksplashArea(attachedTo.getBacksplashHeight(), attachedTo) : 0;\r\n backsplashLength = attachedTo ? getBacksplashLength(attachedTo) : 0;\r\n } else if (type === \"wall\") {\r\n length = realLength = getEdgeLength(attachedTo);\r\n } else {\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (edge && edge.part) {\r\n let edgeFeature = edge.part.dbFeature;\r\n unit = edgeFeature ? edgeFeature.unit : null;\r\n }\r\n // count only one length for \"each\" units\r\n length = (unit ? unit.toLowerCase() : null) === \"each\" ? 1 : getEdgeLength(attachedTo);\r\n realLength = getEdgeLength(attachedTo);\r\n lineLength = config.measureUnit === \"Imperial\" ? attachedTo.getLineLength() : attachedTo.getLineLengthMm();\r\n area = getEdgeArea(attachedTo, lineLength, featureId);\r\n }\r\n // export all edges (combine them after adding to cart from popup)\r\n\r\n // for (let n = 0; n < addedEdges.length; n++) {\r\n // if(addedEdges[n].id === edgeId) {\r\n // addedEdges[n].length += length;\r\n // addedEdges[n].realLength += realLength;\r\n // addedEdges[n].area += area;\r\n // addedEdges[n].pieces.push(backsplashLength);\r\n // addedEdges[n].segments += 1;\r\n // //bExists = true;\r\n // break;\r\n // }\r\n // }\r\n //if(!bExists) {\r\n //todo sqft-react translate\r\n //edgeName = TranslatesProvider.translate('transDoc.customDisplayName_FR.' + img.dataset.sharedFeatureName, img.dataset.name);\r\n edgeName = shape.name; //intl.formatMessage({id: edgeFeature.dbFeature.sharedFeatureName}); //img.dataset.name;\r\n\r\n addedEdges.push({\r\n parentId: attachedTo ? attachedTo.getParent().id : null,\r\n partId: attachedTo ? attachedTo.getParent().partId : null,\r\n fromWizardGroupId: attachedTo ? attachedTo.getParent().fromWizardGroupId : \"\",\r\n edge: featureId,//img,\r\n name: edgeName,\r\n id: featureId,\r\n segments: 1,\r\n pieces: [backsplashLength],\r\n length,\r\n realLength,\r\n unit,\r\n area\r\n });\r\n //}\r\n } else if (isLabelShapeType && shape.getTotalInches) {\r\n area = config.measureUnit === \"Imperial\" ? sqInchesToSqFoot(shape.getTotalInches()) : mm2ToM2(shape.getTotalMillimeters());\r\n length = config.measureUnit === \"Imperial\" ? sqInchesToSqFoot(shape.getTotalInches()) : mm2ToM2(shape.getTotalMillimeters());\r\n let featureGroup = getFeatureGroup(shape.partId);\r\n if (featureGroup && featureGroup.part) {\r\n let featureGroupName = getFeatureGroupName(featureGroup.part, this.intl, fabricatorData);\r\n addedEdges.push({\r\n partId: shape.partId,\r\n fromWizardGroupId: shape.fromWizardGroupId,\r\n //edge: img,\r\n name: featureGroupName,\r\n //id: edgeId,\r\n segments: 1,\r\n length,\r\n area\r\n });\r\n }\r\n }\r\n }\r\n if (type === \"edge\") {\r\n for (let n = 0; n < addedEdges.length; n++) {\r\n addedEdges[n].length = config.measureUnit === \"Imperial\" ? addedEdges[n].length : mmToM(addedEdges[n].length);\r\n }\r\n }\r\n\r\n return addedEdges;\r\n };\r\n\r\n this.addImage = function(\r\n image,\r\n width,\r\n height,\r\n attachedTo,\r\n hoverShape,\r\n type,\r\n subType, // appliance type\r\n historyCallBack,\r\n historyPosition,\r\n part = null,\r\n objId = null,\r\n priority = null,\r\n featureId = null,\r\n hide = false,\r\n ) {\r\n let vc = self.getVisibleCenter(),\r\n newImage = new MovableImage(objId ? objId : ++objIds, priority, subType);\r\n\r\n newImage.onHover = self.onShapeHover;\r\n newImage.onInit = self.onShapeReady;\r\n newImage.attachedToShape = hoverShape;\r\n newImage.type = type;\r\n newImage.part = part;\r\n newImage.featureId = featureId;\r\n newImage.init(\r\n historyPosition || {x: vc.x - (width / 2), y: vc.y - (height/2)},\r\n image,\r\n { width: width, height: height},\r\n attachedTo,\r\n hide\r\n );\r\n attachedTo && (attachedTo.attachedShape = newImage);\r\n newImage.historyProps = {\r\n image: image,\r\n width: width,\r\n height: height,\r\n attachedTo: attachedTo,\r\n attachedToParentId: attachedTo\r\n ? attachedTo.getParent ? attachedTo.getParent().id : null\r\n : null,\r\n hoverShape: hoverShape,\r\n type: type,\r\n subType: subType,\r\n part: part,\r\n historyCallBack: historyCallBack,\r\n featureId: featureId\r\n };\r\n shapes.unshift(newImage);\r\n\r\n return newImage;\r\n };\r\n\r\n this.getAttachedTo = function(attachedTo) {\r\n const state = store.getState();\r\n\r\n return state.sqftResourceState.attachedToLine.find(attachedToLine => attachedToLine.attachedToId === attachedTo.id)\r\n };\r\n this.getImagesAttachedTo = function(attachedTo) {\r\n for (var i = 0; i < shapes.length; i++) {\r\n if(shapes[i].getAttachedTo) {\r\n if(shapes[i].getAttachedTo() === attachedTo) {\r\n return shapes[i];\r\n }\r\n }\r\n }\r\n };\r\n this.onShapeReady = function() {\r\n\r\n };\r\n\r\n this.addShape = function(segments, shapeType, historyPosition, partId, fromLayout = null, shapeParams = {}) {\r\n const realPartId = checkShapeForAvailablePartId(partId);\r\n let vc = self.getVisibleCenter(),\r\n mm = sqftShapeManager.getMinMax(segments),\r\n shapeId = ++objIds,\r\n newShape = new Shape(shapeId, shapes.length, shapeType, realPartId, fromLayout, shapeParams),\r\n openedMobileButton = $('.pallet-wrapper--opened');\r\n\r\n newShape.setQtCatName(getQtCatName())\r\n newShape.onHover = self.onShapeHover;\r\n newShape.onInit = self.onShapeReady;\r\n newShape.init(\r\n historyPosition || {x: vc.x - (mm.width/2), y: vc.y - (mm.height/2)}, //position\r\n segments\r\n );\r\n shapes.unshift(newShape);\r\n !nodes.appBody.hasClass('step--shapes--selected') && nodes.appBody.addClass('step--shapes--selected');\r\n (openedMobileButton.length > 0) && openedMobileButton.removeClass('pallet-wrapper--opened');\r\n if (nodes.appBody.hasClass('tutorial--enabled')) {\r\n this.tutorialShape = newShape;\r\n }\r\n newShape.setFeatureId(getShapeFeatureId(realPartId));\r\n\r\n return shapeId\r\n };\r\n\r\n this.removeTutorialShape = function () {\r\n this.tutorialShape && this.removeShape(this.tutorialShape);\r\n };\r\n\r\n this.removeShapeWithIds = (shapeIds) => {\r\n for (let i = shapeIds.length - 1; i >= 0; i--) {\r\n this.removeShapeById(shapeIds[i]);\r\n }\r\n }\r\n\r\n this.removeShapeById = function(id) {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] && shapes[i].id === id) {\r\n if (shapes[i] instanceof MovableImage && shapes[i].type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n this.removeSlabImage(shapes[i]);\r\n } else {\r\n this.removeShape(shapes[i])\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.removeSlabImage = (movableImage) => {\r\n const reduxState = store.getState();\r\n const croppedSlabImages = reduxState.sqftSlabState.croppedSlabImages || [];\r\n\r\n if (!Array.isArray(croppedSlabImages)) {\r\n console.error('croppedSlabImages is not a valid array');\r\n return;\r\n }\r\n\r\n store.dispatch(deleteCroppedSlabImage(movableImage.id));\r\n this.removeShape(movableImage);\r\n\r\n if (croppedSlabImages.length === 0) {\r\n slabWorkspace.deregisterEvents();\r\n }\r\n };\r\n\r\n this.getShapeById = (id) => {\r\n const combinedShapes = this.getShapes();\r\n for (let i = combinedShapes.length - 1; i >= 0; i--) {\r\n if (combinedShapes[i].id === id) {\r\n return combinedShapes[i]\r\n }\r\n }\r\n\r\n return null\r\n };\r\n\r\n this.removeShape = (shape) => {\r\n console.log(\"----- remove shape-----\");\r\n console.log(\"shapes\", shapes.map(shp => shp.id));\r\n console.log(\"shape.id\", shape.id);\r\n\r\n // Copy shapes array for the safe iteration\r\n const shapesCopy = [...shapes];\r\n\r\n // Iterate a copy of the shapes array from end to beginning\r\n for (let i = shapesCopy.length - 1; i >= 0; i--) {\r\n const currentShape = shapesCopy[i];\r\n\r\n if (currentShape && currentShape.id === shape.id) {\r\n\r\n if (currentShape.shapeType in SHAPE_TYPE) {\r\n currentShape.getLines().forEach((line) => {\r\n if (line.overlay) {\r\n line.overlay.destroy();\r\n }\r\n line.deleteAttachedItem ? line.deleteAttachedItem() : void null;\r\n line.to.removeAttachedItem ? line.to.removeAttachedItem() : void null;\r\n });\r\n }\r\n\r\n if (currentShape) {\r\n currentShape.destroy();\r\n\r\n // Find current shape index in the original array and delete it\r\n const originalIndex = shapes.indexOf(currentShape);\r\n console.log(\"originalIndex\", originalIndex);\r\n if (originalIndex !== -1) {\r\n shapes.splice(originalIndex, 1);\r\n }\r\n console.log(\"shapes after splice\", shapes);\r\n }\r\n }\r\n }\r\n\r\n if (shape.removeShapePieces) {\r\n shape.removeShapePieces();\r\n }\r\n\r\n slabWorkspace.slabAdditionalShapes.removeShapeFromList(shape);\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n\r\n this.updateRemovedFeatures = (shape) => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n || shape.type === MOVABLE_IMAGE_TYPES.slabImage\r\n ) {\r\n workspaceControllers.removedFeatures.addResource(shape.id);\r\n }\r\n };\r\n\r\n this.removeAllShapes = function() {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i]) {\r\n self.removeShape(shapes[i])\r\n }\r\n }\r\n // todo sqft react: lineLength are not equal when going back to sqft\r\n //_.isEqual(sqftEventManager.activeEvents[\"render\"][11].sender, shapes[i].getLines()[3].overlay)\r\n };\r\n this.removeFeatureBySQFTId = (sqftId) => {\r\n //console.log(\"sqftId to remove\", sqftId);\r\n this.removeShapeById(sqftId);\r\n sqftResourcesManager.deleteAttachedItemById(sqftId);\r\n\r\n // sqftImageManager.removeAllSlabImages();\r\n // sqftSlabManager.removeAllSlabBacksplashes();\r\n // sqftResourcesManager.deleteAllResources();\r\n // sqftResourcesManager.deleteAllMiteredSections();\r\n // sqftSlabManager.deleteShapeOffset();\r\n };\r\n this.removeAllBumpouts = function() {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] && shapes[i].removeBumpouts) {\r\n shapes[i].removeBumpouts()\r\n }\r\n }\r\n };\r\n this.removeAllSlabImages = () => {\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] instanceof MovableImage && shapes[i].type === 'slabImage') {\r\n self.removeShape(shapes[i].destroy())\r\n }\r\n }\r\n store.dispatch(setSqftCroppedSlabImages([]));\r\n };\r\n\r\n this.onShapeHover = function() {\r\n };\r\n this.setIntl = (intl) => {\r\n this.intl = intl\r\n };\r\n\r\n this.init = ($canvas = null, intl = null) => {\r\n //set global configuration\r\n this.isInitialized = true;\r\n this.name = config.workspace.name;\r\n setCanvas($canvas);\r\n if (intl) {\r\n this.intl = intl\r\n }\r\n //initialize workspace canvas such that 0x 0y is in the center\r\n pos.x = parseInt(0 - (canvas.width() / 2));\r\n pos.y = parseInt(0 - (canvas.height() / 2));\r\n //connect events\r\n EventManager.init(canvas[0]);\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.WORKSPACE\r\n );\r\n\r\n WorkspaceEvents.init();\r\n RulerOverlay.init();\r\n if (isSFTCabinetsGroup()) {\r\n cabinetWorkspace.initCabinetEvents();\r\n }\r\n };\r\n\r\n this.render = (ctx) => {\r\n this.renderGrid(ctx);\r\n Object.values(workspaceControllers).forEach(workspaceController => {\r\n if (workspaceController.render) {\r\n workspaceController.render();\r\n }\r\n });\r\n };\r\n\r\n this.renderGrid = (ctx) => {\r\n let i;\r\n var scale = config.scale;\r\n var gridSize = config.workspace.gridSize * scale;\r\n var start = {\r\n x: ((pos.x % gridSize) * -1),\r\n y: ((pos.y % gridSize) * -1)\r\n };\r\n var canvasWidth = canvas[0].width;\r\n var canvasHeight = canvas[0].height;\r\n var center = self.getCenter();\r\n var scaledGrid = gridSize / Math.round(config.workspace.gridSize / config.workspace.getScaledGridSize());\r\n //render grid background\r\n ctx.lineWidth = 1;\r\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\r\n // rendering cells\r\n if(scale > 1) {\r\n ctx.beginPath();\r\n for(i = start.x % scaledGrid; i < canvasWidth; i+= scaledGrid) {\r\n ctx.moveTo(i, 0);\r\n ctx.lineTo(i, canvasHeight);\r\n }\r\n for(i = start.y % scaledGrid; i < canvasHeight; i+= scaledGrid) {\r\n ctx.moveTo(0, i);\r\n ctx.lineTo(canvasWidth, i);\r\n }\r\n ctx.strokeStyle = \"#EEEEEE\";\r\n ctx.stroke();\r\n }\r\n //render 12inch grid\r\n ctx.beginPath();\r\n for(i = start.x; i < canvasWidth; i+=gridSize) {\r\n ctx.moveTo(i, 0);\r\n ctx.lineTo(i, canvasHeight);\r\n }\r\n for(i = start.y; i < canvasHeight; i+= gridSize) {\r\n ctx.moveTo(0, i);\r\n ctx.lineTo(canvasWidth, i);\r\n }\r\n ctx.strokeStyle = '#DDDDDD';\r\n ctx.stroke();\r\n //render center lines\r\n ctx.beginPath();\r\n ctx.moveTo(center.x, 0);\r\n ctx.lineTo(center.x, canvasHeight);\r\n ctx.moveTo(0, center.y);\r\n ctx.lineTo(canvasWidth, center.y);\r\n ctx.strokeStyle = '#BBBBBB';\r\n ctx.stroke();\r\n };\r\n};\r\n\r\nexport default new workspace\r\n","//********* NAVIGATION *********//\r\nimport * as types from \"./actionTypes\";\r\nimport {setTrumbleInventoryForFeatures} from \"../api/look-api\";\r\n\r\nexport const setLookOpened = (lookOpened = false) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_OPENED,\r\n payload: {lookOpened, isMobile}\r\n });\r\n }\r\n};\r\n\r\nexport const setLookExpanded = (lookExpanded = false) => ({\r\n type: types.SET_LOOK_OPENED,\r\n payload: {lookExpanded}\r\n});\r\n\r\nexport const setLookParentKeys = (lookParentKeys = []) => ({\r\n type: types.SET_LOOK_PARENT_KEYS,\r\n payload: {lookParentKeys}\r\n});\r\n\r\nexport const setLookViewType = (lookViewType = 1) => ({\r\n type: types.SET_LOOK_VIEW_TYPE,\r\n payload: {lookViewType}\r\n});\r\n\r\nexport const setWishlistPopupOpened = (wishlistPopupOpened = false) => ({\r\n type: types.SET_WISHLIST_POPUP_OPENED,\r\n payload: {wishlistPopupOpened}\r\n});\r\n\r\nexport const setSidebarModalOpened = (sidebarModalOpened = false) => ({\r\n type: types.SET_SIDEBAR_MODAL_OPENED,\r\n payload: {sidebarModalOpened}\r\n});\r\n\r\nexport const setLookActiveFeature = (newLookActiveFeature = null, lookActiveFeaturePositionInList = null) => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_ACTIVE_FEATURE,\r\n payload: {lookActiveFeature: newLookActiveFeature, lookActiveFeaturePositionInList, isMobile}\r\n });\r\n\r\n const {settings} = store.fabricatorState;\r\n if (newLookActiveFeature && settings.useTrumbleApi && !newLookActiveFeature.quantityOptions) {\r\n setTrumbleInventoryForFeatures([newLookActiveFeature]).then(() => {\r\n dispatch({\r\n type: types.UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT,\r\n });\r\n })\r\n }\r\n }\r\n};\r\n\r\nexport const setLookActiveCategory = (lookActiveCategory = \"\") => {\r\n return (dispatch, getState) => {\r\n const store = getState();\r\n const {isMobile} = store.serverState;\r\n dispatch({\r\n type: types.SET_LOOK_ACTIVE_CATEGORY,\r\n payload: {lookActiveCategory, isMobile}\r\n });\r\n }\r\n};\r\n\r\nexport const setLookMoreInfoOpened = (moreInfoOpened = \"\", moreInfoContent = \"\") => ({\r\n type: types.SET_LOOK_MORE_INFO_OPENED,\r\n payload: {moreInfoOpened, moreInfoContent}\r\n});\r\n\r\nexport const setLookPageOpened = (lookPageOpened) => ({\r\n type: types.SET_LOOK_PAGE_OPENED,\r\n payload: {lookPageOpened}\r\n});\r\n\r\nexport const setLookOverlayOpened = (lookOverlayOpened, lookOverlayAction = \"\") => ({\r\n type: types.SET_LOOK_OVERLAY_OPENED,\r\n payload: {lookOverlayOpened, lookOverlayAction}\r\n});\r\n\r\nexport const setLookViewChangeOptions = (lookViewChangeOptions) => ({\r\n type: types.SET_LOOK_VIEW_CHANGE_OPTIONS,\r\n payload: {lookViewChangeOptions}\r\n});\r\n\r\nexport const setLookStylePopup = (lookStylePopup) => ({\r\n type: types.SET_LOOK_STYLE_POPUP,\r\n payload: {lookStylePopup}\r\n});\r\n\r\nexport const setLookRemovePopup = (lookRemovePopup) => ({\r\n type: types.SET_LOOK_REMOVE_POPUP,\r\n payload: {lookRemovePopup}\r\n});\r\n\r\nexport const setLookIntroStep = (introStep) => ({\r\n type: types.SET_LOOK_INTRO_STEP,\r\n payload: {introStep}\r\n});\r\n\r\nexport const setLookIntroHidden = (introHidden) => ({\r\n type: types.SET_LOOK_INTRO_HIDDEN,\r\n payload: {introHidden}\r\n});\r\n\r\nexport const setLookContextMenu = (contextMenu) => ({\r\n type: types.SET_LOOK_CONTEXT_MENU,\r\n payload: {contextMenu}\r\n});\r\n\r\nexport const setLookWallsApplyTo = (lookWallsApplyTo) => ({\r\n type: types.SET_LOOK_WALLS_APPLY_TO,\r\n payload: {lookWallsApplyTo}\r\n});\r\n\r\nexport const setLookAllWallsOpened = (lookAllWallsOpened) => ({\r\n type: types.SET_LOOK_ALL_WALLS_OPENED,\r\n payload: {lookAllWallsOpened}\r\n});\r\n\r\nexport const setLookReturnAction = (lookReturnAction) => ({\r\n type: types.SET_LOOK_RETURN_ACTION,\r\n payload: {lookReturnAction}\r\n});\r\n\r\nexport const setLookDemoPointsClicked = (lookDemoPointsClicked) => ({\r\n type: types.SET_LOOK_DEMO_POINTS_CLICKED,\r\n payload: {lookDemoPointsClicked}\r\n});\r\n\r\nexport const updateNavigationCount = () => ({\r\n type: types.UPDATE_LOOK_NAVIGATION_COUNT,\r\n});\r\n\r\n// export const updateFeatureGroupCount = () => ({\r\n// type: types.UPDATE_LOOK_FEATURE_GROUP_COUNT,\r\n// });\r\n\r\nexport const setLookCompatabilityAlert = (lookCompatabilityAlert) => ({\r\n type: types.SET_LOOK_COMPATABILITY_ALERT,\r\n payload: {lookCompatabilityAlert}\r\n});\r\n\r\nexport const setLookRestoreState = (lookRestoreState) => ({\r\n type: types.SET_LOOK_RESTORE_STATE,\r\n payload: {lookRestoreState}\r\n});\r\n\r\nexport const setLookLockedTutorial = (lookLockedTutorial) => ({\r\n type: types.SET_LOOK_LOCK_TUTORIAL,\r\n payload: {lookLockedTutorial}\r\n});\r\n\r\nexport const setLookAllWallsTutorial = (lookAllWallsTutorial) => ({\r\n type: types.SET_LOOK_ALL_WALLS_TUTORIAL,\r\n payload: {lookAllWallsTutorial}\r\n});\r\n","// STEPS\r\nexport const SET_STEP = 'SET_STEP';\r\nexport const SET_STEP_SWITCHING = 'SET_STEP_SWITCHING';\r\n\r\n// SELECTION(MATERIALS PAGE)\r\nexport const SET_DEFAULT_SELECTION_GROUP = 'SET_DEFAULT_SELECTION_GROUP';\r\nexport const TOGGLE_SELECTION_WINDOW = 'TOGGLE_SELECTION_WINDOW';\r\nexport const SET_SELECTION_WINDOW_VIEW = 'SET_SELECTION_WINDOW_VIEW';\r\nexport const TOGGLE_SELECTION_INFO = 'TOGGLE_SELECTION_INFO';\r\nexport const UPDATE_FEATURE_INFO_COUNT = 'UPDATE_FEATURE_INFO_COUNT';\r\nexport const SET_VANITY_TYPE = 'SET_VANITY_TYPE';\r\nexport const SET_SHOWER_TYPE = 'SET_SHOWER_TYPE';\r\nexport const CHANGE_SELECTION_INFO_QUANTITY = 'CHANGE_SELECTION_INFO_QUANTITY';\r\nexport const TOGGLE_PULSE_FEATURE_INFO_QUANTITY = 'TOGGLE_PULSE_FEATURE_INFO_QUANTITY';\r\nexport const CHANGE_MATERIALS_INFO_FEATURE_MODULES = 'CHANGE_MATERIALS_INFO_FEATURE_MODULES';\r\nexport const CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX = 'CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX';\r\nexport const SET_ACTIVE_FEATURE = 'SET_ACTIVE_FEATURE';\r\nexport const SET_RELATED_GROUPS = 'SET_RELATED_GROUPS';\r\nexport const SET_RELATED_GROUPS_SEARCH = 'SET_RELATED_GROUPS_SEARCH';\r\nexport const TOGGLE_SHOW_DESCRIPTION_COVER = 'TOGGLE_SHOW_DESCRIPTION_COVER';\r\nexport const TOGGLE_GALLERY_VISIBLE = 'TOGGLE_GALLERY_VISIBLE';\r\nexport const SET_GALLERY_ACTIVE_IMAGE_INDEX = 'SET_GALLERY_ACTIVE_IMAGE_INDEX';\r\nexport const SET_MATERIALS_PAGE_SUB_STEPS = 'SET_MATERIALS_PAGE_SUB_STEPS';\r\nexport const SET_MATERIALS_PAGE_ACTIVE_SUB_STEP = 'SET_MATERIALS_PAGE_ACTIVE_SUB_STEP';\r\nexport const TOGGLE_NOT_COMPATIBLE_VIEW = 'TOGGLE_NOT_COMPATIBLE_VIEW';\r\nexport const TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE = 'TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE';\r\nexport const SET_ROW_ITEMS = 'SET_ROW_ITEMS';\r\nexport const SET_MATERIALS_PAGE_CANVAS_CLASS = 'SET_MATERIALS_PAGE_CANVAS_CLASS';\r\n\r\n// SERVER COMMANDS\r\nexport const SET_LAYOUT_DATA_PARTS = 'SET_LAYOUT_DATA_PARTS';\r\nexport const SET_JAVASCRIPT_ERRORS = 'SET_JAVASCRIPT_ERRORS';\r\nexport const SET_WINDOW_WIDTH = 'SET_WINDOW_WIDTH';\r\nexport const SET_WINDOW_HEIGHT = 'SET_WINDOW_HEIGHT';\r\nexport const SET_JOB_ID = 'SET_JOB_ID';\r\nexport const SET_FABRICATOR_DATA = 'SET_FABRICATOR_DATA';\r\nexport const SET_FABRICATOR_TAXES = 'SET_FABRICATOR_TAXES';\r\nexport const UPDATE_FABRICATOR_SETTINGS = 'UPDATE_FABRICATOR_SETTINGS';\r\nexport const TOGGLE_HIDE_ITEMS_PRICES = 'TOGGLE_HIDE_ITEMS_PRICES';\r\nexport const TOGGLE_USE_FABRICATOR_COST_PRICES = 'TOGGLE_USE_FABRICATOR_COST_PRICES';\r\nexport const SET_STONE_PRICING = 'SET_STONE_PRICING';\r\nexport const ADD_VISUALIZERS_LOADED = 'ADD_VISUALIZERS_LOADED';\r\nexport const SET_COOKIE_ACCEPTED = 'SET_COOKIE_ACCEPTED';\r\nexport const SHOW_SUCCESS_NOTIFICATION = 'SHOW_SUCCESS_NOTIFICATION';\r\nexport const SET_LANGUAGE = 'SET_LANGUAGE';\r\nexport const SET_ACTIVE_THEME = 'SET_ACTIVE_THEME';\r\nexport const SET_NETWORK_CONNECTION = 'SET_NETWORK_CONNECTION';\r\nexport const SET_INITIAL_VISUALIZER_TYPE = 'SET_INITIAL_VISUALIZER_TYPE';\r\n\r\n// QUOTINGTOOL CATEGORIES\r\nexport const SET_QT_CATEGORIES_REQUESTED = 'SET_QT_CATEGORIES_REQUESTED';\r\nexport const SET_QT_CATEGORIES_LOADED = 'SET_QT_CATEGORIES_LOADED';\r\nexport const SET_QT_ACTIVE_CATEGORY = 'SET_QT_ACTIVE_CATEGORY';\r\n\r\n// BATHROOM VISUALIZER COMMANDS\r\nexport const TOGGLE_BATHROOM_VISUALIZER_OPEN = 'TOGGLE_BATHROOM_VISUALIZER_OPEN';\r\nexport const SET_BATHROOM_VISUALIZER_VISITED = 'SET_BATHROOM_VISUALIZER_VISITED';\r\nexport const SET_BV_CANVAS_ID = 'SET_BV_CANVAS_ID';\r\nexport const SET_BV_FEATURES = 'SET_BV_FEATURES';\r\nexport const SET_BV_PRESETS = 'SET_BV_PRESETS';\r\nexport const SET_ACTIVE_PRESET = 'SET_ACTIVE_PRESET';\r\nexport const TOGGLE_SHOW_RESTORE_POPUP = 'TOGGLE_SHOW_RESTORE_POPUP';\r\nexport const SET_CANVAS_DIMENSIONS = 'SET_CANVAS_DIMENSIONS';\r\nexport const SET_STATIC_CANVAS_IMAGE = 'SET_STATIC_CANVAS_IMAGE';\r\nexport const SET_CANVAS_SCALE = 'SET_CANVAS_SCALE';\r\nexport const UPDATE_CANVAS_COUNT = 'UPDATE_CANVAS_COUNT';\r\nexport const SET_PRESET_WAS_CHANGED_BY_USER = 'SET_PRESET_WAS_CHANGED_BY_USER';\r\nexport const SET_FIRST_LOADED_PRESET = 'SET_FIRST_LOADED_PRESET';\r\nexport const SET_LOADED_PRESETS = 'SET_LOADED_PRESETS';\r\n\r\n// LOADER\r\nexport const TOGGLE_LOADER = 'TOGGLE_LOADER';\r\nexport const SET_MULTI_LOADER = 'SET_MULTI_LOADER';\r\n\r\n// APPLY POPUP\r\nexport const TOGGLE_APPLY_POPUP = 'TOGGLE_APPLY_POPUP';\r\n// CONFIRM POPUP\r\nexport const TOGGLE_CONFIRM_POPUP = 'TOGGLE_CONFIRM_POPUP';\r\n\r\n// USER COMMANDS\r\nexport const TOGGLE_USER_POPUP = 'TOGGLE_USER_POPUP';\r\nexport const CHANGE_USER_INFO = 'CHANGE_USER_INFO';\r\nexport const CHANGE_USER_INFO_ERRORS = 'CHANGE_USER_INFO_ERRORS';\r\nexport const SET_EMPLOYEES_LIST = 'SET_EMPLOYEES_LIST';\r\nexport const TOGGLE_ADDITIONAL_FIELDS = 'TOGGLE_ADDITIONAL_FIELDS';\r\nexport const SET_USER_PHONE_NUMBER_VALIDATED = 'SET_USER_PHONE_NUMBER_VALIDATED';\r\nexport const RESTORE_USER_STATE = 'RESTORE_USER_STATE';\r\nexport const SET_ALREADY_REGISTERED_USER = 'SET_ALREADY_REGISTERED_USER';\r\nexport const SET_LEAD_CAPTURE_CLICK_COUNT = 'SET_LEAD_CAPTURE_CLICK_COUNT';\r\nexport const SET_USER_POPUP_CONTENT = 'SET_USER_POPUP_CONTENT';\r\nexport const SET_USER_TWO_FA = 'SET_USER_TWO_FA';\r\nexport const SET_USER_OPT_IN = 'SET_USER_OPT_IN';\r\n\r\n// CART COMMANDS\r\nexport const ADD_TO_CART = 'ADD_TO_CART';\r\nexport const ADD_DISPLAY_LOGIC_CART_ITEM = 'ADD_DISPLAY_LOGIC_CART_ITEM';\r\nexport const REMOVE_FROM_CART = 'REMOVE_FROM_CART';\r\nexport const REMOVE_INSTALLATION_SERVICE_FROM_CART = 'REMOVE_INSTALLATION_SERVICE_FROM_CART';\r\nexport const CHANGE_CART_QUANTITY = 'CHANGE_CART_QUANTITY';\r\nexport const CHANGE_CART_FEATURE = 'CHANGE_CART_FEATURE';\r\nexport const CLICK_QUESTION_NO = 'CLICK_QUESTION_NO';\r\nexport const CAME_FROM_PAGE = 'CAME_FROM_PAGE';\r\nexport const CLEAR_CART = 'CLEAR_CART';\r\nexport const RESTORE_CART = 'RESTORE_CART';\r\nexport const ADD_TO_RECENTLY_VIEWED = 'ADD_TO_RECENTLY_VIEWED';\r\nexport const SHOW_CHECKOUT_POPUP = 'SHOW_CHECKOUT_POPUP';\r\nexport const SUBMIT_PAYMENT = 'SUBMIT_PAYMENT';\r\nexport const SUBMIT_PAYMENT_RESPONSE = 'SUBMIT_PAYMENT_RESPONSE';\r\nexport const SHOW_ORDER_COMPLETE_POPUP = 'SHOW_ORDER_COMPLETE_POPUP';\r\nexport const TOGGLE_SHOW_MOBILE_QUOTES = 'TOGGLE_SHOW_MOBILE_QUOTES';\r\nexport const TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST = 'TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST';\r\nexport const SET_AGREE_EMAIL_CHECKBOX = 'SET_AGREE_EMAIL_CHECKBOX';\r\nexport const SET_CART_FOOTER_ACTIVE_BUTTON_INDEX = 'SET_CART_FOOTER_ACTIVE_BUTTON_INDEX';\r\nexport const SET_CART_ITEM_EDIT_FEATURE = 'SET_CART_ITEM_EDIT_FEATURE';\r\nexport const SET_LOOK_REMOVED_CART_ITEMS = 'SET_LOOK_REMOVED_CART_ITEMS';\r\nexport const SET_AMAZON_IMAGE_URL = 'SET_AMAZON_IMAGE_URL';\r\nexport const SET_CART_ITEMS_ADDED_TO_PARENT_CART = 'SET_CART_ITEMS_ADDED_TO_PARENT_CART';\r\nexport const CHANGE_ALL_CART_ITEMS = 'CHANGE_ALL_CART_ITEMS';\r\nexport const SET_SURE_TAX = 'SET_SURE_TAX';\r\nexport const SET_SURE_TAX_LOADING = 'SET_SURE_TAX_LOADING';\r\nexport const SET_MANUAL_TAX = 'SET_MANUAL_TAX';\r\n\r\nexport const SET_MARK_UP_LOGIC = 'SET_MARK_UP_LOGIC';\r\nexport const SET_DELIVERY_LIST = 'SET_DELIVERY_LIST';\r\nexport const SET_ALL_FEATURES_LOADED = 'SET_ALL_FEATURES_LOADED';\r\nexport const SET_ALLOW_ROUTING = 'SET_ALLOW_ROUTING';\r\nexport const SET_ALLOW_MAIN_LOADING = 'SET_ALLOW_MAIN_LOADING';\r\nexport const SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED = 'SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED';\r\nexport const SET_VISUALIZER_TYPE_CHANGING = 'SET_VISUALIZER_TYPE_CHANGING';\r\n\r\n// INSTALLATION COMMANDS\r\nexport const TOGGLE_INST_OPENED = 'TOGGLE_INST_OPENED';\r\nexport const SET_INST_LIST = 'SET_INST_LIST';\r\nexport const SET_DEFAULT_INST_LIST = 'SET_DEFAULT_INST_LIST';\r\n\r\n// QUOTE STATE\r\nexport const SET_STATE_TO_QUOTE = \"SET_STATE_TO_QUOTE\";\r\n\r\n// PRICE WORKSHEET\r\nexport const TOGGLE_PRICE_WORKSHEET_OPENED = 'TOGGLE_PRICE_WORKSHEET_OPENED';\r\nexport const SET_DISCOUNT_SECTIONS = 'SET_DISCOUNT_SECTIONS';\r\nexport const SET_CUSTOM_ADDED_DISCOUNTS = 'SET_CUSTOM_ADDED_DISCOUNTS';\r\nexport const SET_FINANCE_PERCENTAGE = 'SET_FINANCE_PERCENTAGE';\r\nexport const SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE = 'SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE';\r\nexport const SET_DISCOUNT_FINANCE_CELLS_VISIBLE = 'SET_DISCOUNT_FINANCE_CELLS_VISIBLE';\r\n\r\n// MESSAGE BOX COMMANDS\r\nexport const CHANGE_MESSAGE_BOX = 'CHANGE_MESSAGE_BOX';\r\n\r\n// FILTERS\r\nexport const SET_SELECTED_FILTERS = 'SET_SELECTED_FILTERS';\r\nexport const LOAD_FILTERS = 'LOAD_FILTERS';\r\nexport const SET_EXPANDED_FILTERS = 'SET_EXPANDED_FILTERS';\r\nexport const SHOW_FILTERS = 'SHOW_FILTERS';\r\nexport const SHOW_FILTERS_IF_NOT_VISIBLE = \"SHOW_FILTERS_IF_NOT_VISIBLE\";\r\nexport const SET_FILTER_VISIBLE = 'SET_FILTER_VISIBLE';\r\nexport const SET_AVAILABLE_FILTER_VALUES = 'SET_AVAILABLE_FILTER_VALUES';\r\nexport const UPDATE_FILTERS_COUNT = 'UPDATE_FILTERS_COUNT';\r\nexport const SET_COUNTERTOP_FILTERS_RECEIVED = 'SET_COUNTERTOP_FILTERS_RECEIVED';\r\n\r\n// DESKTOP NAVIGATION\r\nexport const TOGGLE_DESKTOP_NAVIGATION = \"TOGGLE_DESKTOP_NAVIGATION\";\r\nexport const SET_ACTIVE_NAVIGATION_NAMES = \"SET_ACTIVE_NAVIGATION_NAMES\";\r\n\r\n// MOBILE MENU NAV\r\nexport const LOAD_MOBILE_NAV = \"LOAD_MOBILE_NAV\";\r\nexport const SHOW_SCHEDULER = \"SHOW_SCHEDULER\";\r\nexport const SCHEDULER_SCHEDULE = \"SCHEDULER_SCHEDULE\";\r\n\r\n// COMMON NAVIGATION\r\nexport const SET_MODULE_CONTEXT_MENU_TYPE = \"SET_MODULE_CONTEXT_MENU_TYPE\";\r\nexport const SET_MODULE_CONTEXT_MENU_MODULE = \"SET_MODULE_CONTEXT_MENU_MODULE\";\r\nexport const SET_MODULE_CONTEXT_MENU_MODULE_PART = \"SET_MODULE_CONTEXT_MENU_MODULE_PART\";\r\nexport const SET_MODULE_CONTEXT_MENU_DIRECTION = \"SET_MODULE_CONTEXT_MENU_DIRECTION\";\r\nexport const SET_NAVIGATION_VIEW_TYPE = \"SET_NAVIGATION_VIEW_TYPE\";\r\nexport const SET_CABINETS_APPLY_TO = \"SET_CABINETS_APPLY_TO\";\r\nexport const SET_CABINETS_APPLY_TO_BATHROOM = \"SET_CABINETS_APPLY_TO_BATHROOM\";\r\nexport const SET_COUNTERTOPS_APPLY_TO = \"SET_COUNTERTOPS_APPLY_TO\";\r\nexport const SET_COUNTERTOPS_APPLY_TO_BATHROOM = \"SET_COUNTERTOPS_APPLY_TO_BATHROOM\";\r\nexport const SET_APPLY_TO_COMMON = \"SET_APPLY_TO_COMMON\";\r\nexport const SET_EDGES_APPLY_TO = \"SET_EDGES_APPLY_TO\";\r\nexport const SET_NAVIGATION_LOADING = \"SET_NAVIGATION_LOADING\";\r\nexport const UPDATE_DISABLE_FEATURE_GROUP_RADIO = \"UPDATE_DISABLE_FEATURE_GROUP_RADIO\";\r\nexport const TOGGLE_NAV_ITEM_POSITION_MODAL = \"TOGGLE_NAV_ITEM_POSITION_MODAL\";\r\nexport const SET_USE_FEATURES_LIGHT_REQUEST = \"SET_USE_FEATURES_LIGHT_REQUEST\";\r\n\r\n// CABINET MODULE FILTERS\r\nexport const SET_ACTIVE_NAVIGATION_FILTER = \"SET_ACTIVE_NAVIGATION_FILTER\";\r\nexport const SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX = \"SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX\";\r\nexport const SET_CABINET_NAVIGATION_FILTER_COMPLETED = \"SET_CABINET_NAVIGATION_FILTER_COMPLETED\";\r\n\r\n//COUNTERTOP WIZARD\r\nexport const SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED = \"SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED\";\r\nexport const SET_COUNTERTOP_WIZARD = \"SET_COUNTERTOP_WIZARD\";\r\n\r\n//NEW DASHBOARD WIZARD\r\nexport const SET_WIZARD_CONFIG = \"SET_WIZARD_CONFIG\";\r\nexport const SET_WIZARD_IS_ACTIVE = \"SET_WIZARD_IS_ACTIVE\";\r\nexport const SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX = \"SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX\";\r\nexport const SET_WIZARD_LIST = \"SET_WIZARD_LIST\";\r\nexport const SET_WIZARD_ACTIVE_ITEM = \"SET_WIZARD_ACTIVE_ITEM\";\r\nexport const SET_WIZARD_SHOW_FEATURE_SECTION = \"SET_WIZARD_SHOW_FEATURE_SECTION\";\r\nexport const SET_WIZARD_ACTIVE_STEP = \"SET_WIZARD_ACTIVE_STEP\";\r\nexport const SET_WIZARD_SELECTED_VALUES = \"SET_WIZARD_SELECTED_VALUES\";\r\nexport const SET_ALL_WIZARD_SELECTED_VALUES = \"SET_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_CONFLICT_POPUP_OPENED = \"SET_WIZARD_CONFLICT_POPUP_OPENED\";\r\nexport const SET_WIZARD_CONFLICT_STEPS = \"SET_WIZARD_CONFLICT_STEPS\";\r\nexport const RESTORE_ALL_WIZARD_SELECTED_VALUES = \"RESTORE_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_MISSING_FEATURES = \"SET_WIZARD_MISSING_FEATURES\";\r\nexport const SET_WIZARD_SQFT_CART_ITEMS = \"SET_WIZARD_SQFT_CART_ITEMS\";\r\n\r\n// SQUARE FOOTAGE TOOL\r\n// export const TOGGLE_SQFT = \"TOGGLE_SQFT\";\r\nexport const ENABLE_SQUARE_FOOTAGE = \"ENABLE_SQUARE_FOOTAGE\";\r\nexport const SET_SQUARE_FOOTAGE_GROUP = \"SET_SQUARE_FOOTAGE_GROUP\";\r\nexport const SET_SQFT_VIEW_MODE = \"SET_SQFT_VIEW_MODE\";\r\nexport const LOAD_SQFT = \"LOAD_SQFT\";\r\nexport const UPDATE_SQFT = \"UPDATE_SQFT\";\r\nexport const UPDATE_SQFT_CALCULATIONS = \"UPDATE_SQFT_CALCULATIONS\";\r\nexport const SET_SQFT_SQUARE_FEET = \"SET_SQFT_SQUARE_FEET\";\r\nexport const TOGGLE_CHANGE_LAYOUT_POPUP = \"TOGGLE_CHANGE_LAYOUT_POPUP\";\r\nexport const SET_NEW_LAYOUT_ON_SQFT = \"SET_NEW_LAYOUT_ON_SQFT\";\r\nexport const SET_SQFT_MEASURE_UNIT = \"SET_SQFT_MEASURE_UNIT\";\r\nexport const CHANGE_SQFT_FEATURES_POPUP = \"CHANGE_SQFT_FEATURES_POPUP\";\r\nexport const SQT_SQFT_FROM_FEATURE = \"SQT_SQFT_FROM_FEATURE\";\r\nexport const SET_CABINETS_GLB = \"SET_CABINETS_GLB\";\r\nexport const SET_CABINETS_AR_BLOB_URL = \"SET_CABINETS_AR_BLOB_URL\";\r\nexport const SET_API_ERROR_MESSAGE = \"SET_API_ERROR_MESSAGE\";\r\nexport const SET_SHAPE_IDS_WITH_MISSING_FEATURES = \"SET_SHAPE_IDS_WITH_MISSING_FEATURES\";\r\nexport const SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE = \"SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE\";\r\nexport const ADD_SHAPE_ID_WITH_MISSING_FEATURES = \"ADD_SHAPE_ID_WITH_MISSING_FEATURES\";\r\nexport const SET_SELECTED_COUNTERTOP = \"SET_SELECTED_COUNTERTOP\";\r\nexport const SET_ABORT_CONTROLLER = \"SET_ABORT_CONTROLLER\";\r\n\r\n// SLAB TOOL\r\nexport const SHOW_SLAB_TOOL = \"SHOW_SLAB_TOOL\";\r\nexport const SET_SLAB_TOOL_VISITED = \"SET_SLAB_TOOL_VISITED\";\r\nexport const ADD_ROOM_WITH_VISITED_SLAB_TOOL = \"ADD_ROOM_WITH_VISITED_SLAB_TOOL\";\r\nexport const SET_ACTIVE_SLAB_ID = \"SET_ACTIVE_SLAB_ID\";\r\nexport const SET_ACTIVE_SLAB_URL = \"SET_ACTIVE_SLAB_URL\";\r\nexport const SET_SQFT_SLAB_ACTIVE_STEP = \"SET_SQFT_SLAB_ACTIVE_STEP\";\r\nexport const SET_SQFT_SLAB_SEARCH_TEXT = \"SET_SQFT_SLAB_SEARCH_TEXT\";\r\nexport const SET_SQFT_SLAB_ASPECT_RATIO = \"SET_SQFT_SLAB_ASPECT_RATIO\";\r\nexport const SET_SQFT_SLAB_IMAGE_WIDTH = \"SET_SQFT_SLAB_IMAGE_WIDTH\";\r\nexport const SET_SQFT_SLAB_IMAGE_HEIGHT = \"SET_SQFT_SLAB_IMAGE_HEIGHT\";\r\nexport const SET_SQFT_SLAB_CROPPER_DATA = \"SET_SQFT_SLAB_CROPPER_DATA\";\r\nexport const SET_SQFT_CROPPED_SLAB_IMAGES = \"SET_SQFT_CROPPED_SLAB_IMAGES\";\r\nexport const ADD_SQFT_CROPPED_SLAB_IMAGE = \"ADD_SQFT_CROPPED_SLAB_IMAGE\";\r\nexport const DELETE_CROPPED_SLAB_IMAGE = \"DELETE_CROPPED_SLAB_IMAGE\";\r\nexport const SET_PRICE_PER_AREA = \"SET_PRICE_PER_AREA\";\r\nexport const SET_SLAB_IMAGE_TYPE = \"SET_SLAB_IMAGE_TYPE\";\r\nexport const SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE = \"SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE\";\r\nexport const SET_IS_SIZE_VALIDATION_FAILED = \"SET_IS_SIZE_VALIDATION_FAILED\";\r\nexport const SET_IS_SLAB_PRICING_ENABLED = \"SET_IS_SLAB_PRICING_ENABLED\";\r\n\r\n// MITERED\r\nexport const SET_MITERED_SECTIONS = \"SET_MITERED_SECTIONS\";\r\nexport const ADD_MITERED_SECTION = \"ADD_MITERED_SECTION\";\r\nexport const CHANGE_MITERED_SECTION = \"CHANGE_MITERED_SECTION\";\r\nexport const DELETE_MITERED_SECTION = \"DELETE_MITERED_SECTION\";\r\nexport const DELETE_ALL_MITERED_SECTIONS = \"DELETE_ALL_MITERED_SECTIONS\";\r\n\r\n// RESOURCE\r\nexport const SET_RESOURCES = \"SET_RESOURCES\";\r\nexport const ADD_RESOURCE = \"ADD_RESOURCE\";\r\nexport const CHANGE_RESOURCE = \"CHANGE_RESOURCE\";\r\nexport const DELETE_RESOURCE = \"DELETE_RESOURCE\";\r\nexport const DELETE_RESOURCE_ATTACHED_TO = \"DELETE_RESOURCE_ATTACHED_TO\";\r\nexport const DELETE_ALL_RESOURCES = \"DELETE_ALL_RESOURCES\";\r\nexport const SET_SELECTED_FEATURE = \"SET_SELECTED_FEATURE\";\r\nexport const SET_SELECTED_PART_IDS = \"SET_SELECTED_PART_IDS\";\r\n\r\n// SQUARE FOOTAGE MENU\r\nexport const SET_SQFT_MENU_OPENED = \"SET_SQFT_MENU_OPENED\";\r\nexport const SET_SQFT_MENU_LOCK = \"SET_SQFT_MENU_LOCK\";\r\nexport const SET_SQFT_MENU_ACTIVE_BUTTON = \"SET_SQFT_MENU_ACTIVE_BUTTON\";\r\nexport const SET_SQFT_SYSTEM_MESSAGE = \"SET_SQFT_SYSTEM_MESSAGE\";\r\nexport const SET_SQFT_AR3D_POPUP = \"SET_SQFT_AR3D_POPUP\";\r\nexport const SET_SQFT_POPUP = \"SET_SQFT_POPUP\";\r\nexport const SET_SQFT_CONTEXT_MENU = \"SET_SQFT_CONTEXT_MENU\";\r\nexport const SET_SQFT_CONTEXT_MENU_V2 = \"SET_SQFT_CONTEXT_MENU_V2\";\r\nexport const SET_SQFT_SYSTEM_DELETE_MESSAGE = \"SET_SQFT_SYSTEM_DELETE_MESSAGE\";\r\nexport const SET_SQFT_ACTIVE_SUB_MENU_BUTTON = \"SET_SQFT_ACTIVE_SUB_MENU_BUTTON\";\r\nexport const SET_SQFT_ACTIVE_LEVEL3_BUTTON = \"SET_SQFT_ACTIVE_LEVEL3_BUTTON\";\r\nexport const SET_SQFT_ROOM_LAYOUTS = \"SET_SQFT_ROOM_LAYOUTS\";\r\nexport const SET_SQFT_ACTIVE_ROOM = \"SET_SQFT_ACTIVE_ROOM\";\r\nexport const SET_SQFT_ACTIVE_ROOM_ID = \"SET_SQFT_ACTIVE_ROOM_ID\";\r\nexport const SET_SQFT_ACTIVE_ROOM_TYPE = \"SET_SQFT_ACTIVE_ROOM_TYPE\";\r\nexport const SET_SQFT_ACTIVE_ROOM_INDEX = \"SET_SQFT_ACTIVE_ROOM_INDEX\";\r\nexport const SET_SQFT_ROOM_SWITCHER_VISIBLE= \"SET_SQFT_ROOM_SWITCHER_VISIBLE\";\r\nexport const SET_FREE_DRAW_MODE = \"SET_FREE_DRAW_MODE\";\r\n\r\nexport const SET_CHANGE_VALUE_POPUPS = \"SET_CHANGE_VALUE_POPUPS\";\r\nexport const ADD_CHANGE_VALUE_POPUP = \"ADD_CHANGE_VALUE_POPUP\";\r\nexport const CHANGE_VALUE_POPUP = \"CHANGE_VALUE_POPUP\";\r\nexport const DELETE_CHANGE_VALUE_POPUP = \"DELETE_CHANGE_VALUE_POPUP\";\r\n\r\nexport const SET_VALIDATION_POPUPS = \"SET_VALIDATION_POPUPS\";\r\nexport const ADD_VALIDATION_POPUP = \"ADD_VALIDATION_POPUP\";\r\nexport const VALIDATION_POPUP = \"VALIDATION_POPUP\";\r\nexport const DELETE_VALIDATION_POPUP = \"DELETE_VALIDATION_POPUP\";\r\n\r\nexport const SET_WALLS_UP_MODE = \"SET_WALLS_UP_MODE\";\r\nexport const SET_WALLS_LOCK_MODE = \"SET_WALLS_LOCK_MODE\";\r\nexport const SET_IS_ITEXT_EDITING = \"SET_IS_ITEXT_EDITING\";\r\nexport const SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES = \"SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES\";\r\nexport const SET_RE_CACHE_MENU_COUNTER = \"SET_RE_CACHE_MENU_COUNTER\";\r\n\r\n// SQUARE FOOTAGE MANUAL CALCULATION\r\nexport const TOGGLE_SHOW_MANUAL_CALCULATION = \"TOGGLE_SHOW_MANUAL_CALCULATION\";\r\nexport const SET_SWITCHER_POSITION = \"SET_SWITCHER_POSITION\";\r\nexport const ADD_MANUAL_CALCULATION_ROW = \"ADD_MANUAL_CALCULATION_ROW\";\r\nexport const UPDATE_MANUAL_CALCULATION_ROW = \"UPDATE_MANUAL_CALCULATION_ROW\";\r\nexport const UPDATE_MANUAL_CALCULATION_ROWS = \"UPDATE_MANUAL_CALCULATION_ROWS\";\r\nexport const DELETE_MANUAL_CALCULATION_ROW = \"DELETE_MANUAL_CALCULATION_ROW\";\r\n\r\n// SQUARE FOOTAGE TUTORIAL\r\nexport const SET_SQFT_TUTORIAL_STEP = 'SET_SQFT_TUTORIAL_STEP';\r\nexport const SET_SQFT_TUTORIAL_SWITCHING = 'SET_SQFT_TUTORIAL_SWITCHING';\r\n\r\n// CHECKOUT DOCUSIGN IFRAME\r\nexport const SHOW_DOCUSIGN = 'SHOW_DOCUSIGN';\r\nexport const SHOW_DEPOSIT = 'SHOW_DEPOSIT';\r\nexport const SHOW_CONTRACT_SIGNING = 'SHOW_CONTRACT_SIGNING';\r\nexport const SET_AFTER_CONTRACT_SIGN_CALLBACK = 'SET_AFTER_CONTRACT_SIGN_CALLBACK';\r\n\r\n// UPLOADS, NOTES & SQFT\r\nexport const ADD_PROJECT_DOCUMENT = 'ADD_PROJECT_DOCUMENT';\r\n// export const EDIT_PROJECT_DOCUMENTS = 'EDIT_PROJECT_DOCUMENTS';\r\nexport const SET_PROJECT_DOCUMENTS_IDS = 'SET_PROJECT_DOCUMENTS_IDS';\r\n\r\n// UPLOADS, NOTES & SQFT\r\nexport const SHOW_MATERIALS_TUTORIAL = 'SHOW_MATERIALS_TUTORIAL';\r\nexport const SET_MATERIALS_TUTORIAL_STEP = 'SET_MATERIALS_TUTORIAL_STEP';\r\nexport const SET_MATERIALS_TUTORIAL_FINISHED = 'SET_MATERIALS_TUTORIAL_FINISHED';\r\nexport const SHOW_MATERIALS_AGENT_TUTORIAL = 'SHOW_MATERIALS_AGENT_TUTORIAL';\r\nexport const SET_MATERIALS_AGENT_TUTORIAL_FINISHED = 'SET_MATERIALS_AGENT_TUTORIAL_FINISHED';\r\nexport const SHOW_VISUALIZER_TUTORIAL = 'SHOW_VISUALIZER_TUTORIAL';\r\nexport const SET_VISUALIZER_TUTORIAL_STEP = 'SET_VISUALIZER_TUTORIAL_STEP';\r\nexport const SET_VISUALIZER_TUTORIAL_FINISHED = 'SET_VISUALIZER_TUTORIAL_FINISHED';\r\n\r\n// CONTRACT SIGNING\r\nexport const CONTRACT_SIGNING_SET_STEP = 'CONTRACT_SIGNING_SET_STEP';\r\nexport const CONTRACT_SIGNING_POST_SIGNATURE = 'CONTRACT_SIGNING_POST_SIGNATURE';\r\nexport const CONTRACT_SIGNING_JOB_DOCUMENT = 'CONTRACT_SIGNING_JOB_DOCUMENT';\r\nexport const CONTRACT_SIGNING_SHOW_SIGNATURE_PAD = 'CONTRACT_SIGNING_SHOW_SIGNATURE_PAD';\r\nexport const CONTRACT_SIGNING_SET_CONTRACTS_VALUES = 'CONTRACT_SIGNING_SET_CONTRACTS_VALUES';\r\nexport const SET_CONTRACT_BLOB = 'SET_CONTRACT_BLOB';\r\nexport const CONTRACT_SIGNING_RESTORE_VALUES = 'CONTRACT_SIGNING_RESTORE_VALUES';\r\nexport const CONTRACT_SIGNING_SET_CONTRACTS_LIST = 'CONTRACT_SIGNING_SET_CONTRACTS_LIST';\r\n\r\n// INITIAL FLOW\r\nexport const SET_FABRICATOR_SUBSCRIPTIONS = 'SET_FABRICATOR_SUBSCRIPTIONS';\r\nexport const SET_INITIAL_FLOW_FINISHED = 'SET_INITIAL_FLOW_FINISHED';\r\nexport const SET_INITIAL_FLOW_ADDITIONAL_ROOMS = 'SET_INITIAL_FLOW_ADDITIONAL_ROOMS';\r\nexport const SET_INITIAL_FLOW_BUTTON = 'SET_INITIAL_FLOW_BUTTON';\r\nexport const SET_INITIAL_FLOW_ROOM = 'SET_INITIAL_FLOW_ROOM';\r\nexport const SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE = 'SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE';\r\nexport const SET_INITIAL_FLOW_ROOM_LAYOUT = 'SET_INITIAL_FLOW_ROOM_LAYOUT';\r\nexport const SET_INITIAL_FLOW_STEP = 'SET_INITIAL_FLOW_STEP';\r\n\r\n// UNLOCK CALCULATIONS TUTORIAL\r\nexport const SET_SHOW_UNLOCK_CALCULATIONS = 'SET_SHOW_UNLOCK_CALCULATIONS';\r\nexport const SET_UNLOCK_CALCULATIONS_STEP = 'SET_UNLOCK_CALCULATIONS_STEP';\r\nexport const SHOW_UNLOCK_CALCULATIONS_CART_ITEM = 'SHOW_UNLOCK_CALCULATIONS_CART_ITEM';\r\nexport const SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM = 'SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM';\r\nexport const SHOW_UNLOCK_CALCULATIONS_TUTORIAL = 'SHOW_UNLOCK_CALCULATIONS_TUTORIAL';\r\nexport const SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP = 'SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP';\r\nexport const SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED = 'SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED';\r\n\r\n// INTRO VIDEO\r\nexport const SET_INTRO_VIDEO = 'SET_INTRO_VIDEO';\r\n\r\n// QUOTES\r\nexport const ADD_NEW_QUOTE = 'ADD_NEW_QUOTE';\r\nexport const SET_QUOTES = 'SET_QUOTES';\r\nexport const UPDATE_QUOTE = 'UPDATE_QUOTE';\r\nexport const SET_ACTIVE_QUOTE_INDEX = 'SET_ACTIVE_QUOTE_INDEX';\r\n\r\n// ADVANCED QUOTING\r\nexport const TOGGLE_SHOW_ADVANCED_QUOTING = 'TOGGLE_SHOW_ADVANCED_QUOTING';\r\nexport const SET_ADVANCED_QUOTING_SEARCH_ITEM = 'SET_ADVANCED_QUOTING_SEARCH_ITEM';\r\n\r\n// ADVANCED QUOTING\r\nexport const TOGGLE_SHOW_ASSIGN_QUOTE_POPUP = 'TOGGLE_SHOW_ASSIGN_QUOTE_POPUP';\r\nexport const SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT = 'SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT';\r\nexport const SET_ASSIGN_QUOTE_POPUP_EMPLOYEE = 'SET_ASSIGN_QUOTE_POPUP_EMPLOYEE';\r\nexport const SET_ASSIGN_QUOTE_POPUP_CUSTOMER = 'SET_ASSIGN_QUOTE_POPUP_CUSTOMER';\r\nexport const SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT = 'SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT';\r\nexport const SET_ASSIGN_QUOTE_CLONE_MODE = 'SET_ASSIGN_QUOTE_CLONE_MODE';\r\nexport const SET_ASSIGN_QUOTE_OFFLINE_DATA = 'SET_ASSIGN_QUOTE_OFFLINE_DATA';\r\n\r\n// RECEIPT\r\nexport const SET_RECEIPT_URL = 'SET_RECEIPT_URL';\r\nexport const SET_RECEIPT_SIGNATURE = 'SET_RECEIPT_SIGNATURE';\r\n\r\n// LOOK ACTIONS\r\nexport const SET_LOOK_OPENED = 'SET_LOOK_OPENED';\r\nexport const SET_LOOK_EXPANDED = 'SET_LOOK_EXPANDED';\r\nexport const SET_LOOK_PARENT_KEY = 'SET_LOOK_PARENT_KEY';\r\nexport const SET_LOOK_PARENT_KEYS = 'SET_LOOK_PARENT_KEYS';\r\nexport const SET_LOOK_VIEW_TYPE = 'SET_LOOK_VIEW_TYPE';\r\nexport const SET_WISHLIST_POPUP_OPENED = 'SET_WISHLIST_POPUP_OPENED';\r\nexport const SET_SIDEBAR_MODAL_OPENED = 'SET_SIDEBAR_MODAL_OPENED';\r\nexport const SET_LOOK_ACTIVE_FEATURE = 'SET_LOOK_ACTIVE_FEATURE';\r\nexport const UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT = 'UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT';\r\nexport const SET_LOOK_ACTIVE_CATEGORY = 'SET_LOOK_ACTIVE_CATEGORY';\r\nexport const SET_LOOK_MORE_INFO_OPENED = 'SET_LOOK_MORE_INFO_OPENED';\r\nexport const SET_LOOK_LAYOUT_OPENED = 'SET_LOOK_LAYOUT_OPENED';\r\nexport const SET_LOOK_PAGE_OPENED = 'SET_LOOK_PAGE_OPENED';\r\nexport const SET_LOOK_OVERLAY_OPENED = 'SET_LOOK_OVERLAY_OPENED';\r\nexport const SET_LOOK_VIEW_CHANGE_OPTIONS = 'SET_LOOK_VIEW_CHANGE_OPTIONS';\r\nexport const SET_LOOK_STYLE_POPUP = 'SET_LOOK_STYLE_POPUP';\r\nexport const SET_LOOK_REMOVE_POPUP = 'SET_LOOK_REMOVE_POPUP';\r\nexport const SET_LOOK_INTRO_STEP = 'SET_LOOK_INTRO_STEP';\r\nexport const SET_LOOK_INTRO_HIDDEN = 'SET_LOOK_INTRO_HIDDEN';\r\nexport const SET_LOOK_CONTEXT_MENU = 'SET_LOOK_CONTEXT_MENU';\r\nexport const SET_LOOK_WALLS_APPLY_TO = 'SET_LOOK_WALLS_APPLY_TO';\r\nexport const SET_LOOK_ALL_WALLS_OPENED = 'SET_LOOK_ALL_WALLS_OPENED';\r\nexport const SET_LOOK_RETURN_ACTION = 'SET_LOOK_RETURN_ACTION';\r\nexport const SET_LOOK_DEMO_POINTS_CLICKED = 'SET_LOOK_DEMO_POINTS_CLICKED';\r\nexport const UPDATE_LOOK_NAVIGATION_COUNT = 'UPDATE_LOOK_NAVIGATION_COUNT';\r\n// export const UPDATE_LOOK_FEATURE_GROUP_COUNT = 'UPDATE_LOOK_FEATURE_GROUP_COUNT';\r\nexport const SET_LOOK_COMPATABILITY_ALERT = 'SET_LOOK_COMPATABILITY_ALERT';\r\nexport const SET_LOOK_RESTORE_STATE = 'SET_LOOK_RESTORE_STATE';\r\nexport const SET_LOOK_LOCK_TUTORIAL = 'SET_LOOK_LOCK_TUTORIAL';\r\nexport const SET_LOOK_ALL_WALLS_TUTORIAL = 'SET_LOOK_ALL_WALLS_TUTORIAL';\r\n\r\n// IFRAME ACTIONS\r\nexport const SET_IFRAME_INTEGRATION_REQUEST = 'SET_IFRAME_INTEGRATION_REQUEST';\r\nexport const SET_IFRAME_INTEGRATION_RESPONSE = 'SET_IFRAME_INTEGRATION_RESPONSE';\r\n\r\n// GROHE ACTIONS\r\n// export const SET_GROHE_CATEGORIES_OPENED = 'SET_GROHE_CATEGORIES_OPENED';\r\nexport const SET_GROHE_FILTERS_OPENED = 'SET_GROHE_FILTERS_OPENED';\r\nexport const SET_GROHE_SIMILAR_FEATURE = 'SET_GROHE_SIMILAR_FEATURE';\r\nexport const SET_GROHE_SIMILAR_PRODUCTS_OPENED = 'SET_GROHE_SIMILAR_PRODUCTS_OPENED';\r\nexport const SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE = 'SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE';\r\nexport const SET_GROHE_FILTERS_SEARCH_TEXT = 'SET_GROHE_FILTERS_SEARCH_TEXT';\r\nexport const SET_GROHE_LAST_OPENED_CATEGORY = 'SET_GROHE_LAST_OPENED_CATEGORY';\r\nexport const SET_GROHE_SUB_CATEGORY_OPENED = 'SET_GROHE_SUB_CATEGORY_OPENED';\r\nexport const SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS = 'SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS';\r\nexport const SET_GROHE_ACTIVE_FEATURE_QUANTITY = 'SET_GROHE_ACTIVE_FEATURE_QUANTITY';\r\nexport const SET_GROHE_SHARE_BUTTONS_OPENED = 'SET_GROHE_SHARE_BUTTONS_OPENED';\r\nexport const SET_GROHE_SAME_COLOR_ACTIVE_FEATURE = 'SET_GROHE_SAME_COLOR_ACTIVE_FEATURE';\r\nexport const SET_GROHE_SAME_COLOR_SECTION_OPENED = 'SET_GROHE_SAME_COLOR_SECTION_OPENED';\r\nexport const SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED = 'SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED';\r\nexport const SET_GROHE_EXISTING_TEMP_ID = 'SET_GROHE_EXISTING_TEMP_ID';\r\n\r\n// GROHE QUOTING TOOL ACTIONS\r\nexport const SET_GROHE_WIZARD_NAME = 'SET_GROHE_WIZARD_NAME';\r\nexport const SET_GROHE_WIZARD_OPENED = 'SET_GROHE_WIZARD_OPENED';\r\nexport const SET_GROHE_WIZARD_STEP = 'SET_GROHE_WIZARD_STEP';\r\n\r\n// GROHE SHOPPING CART PAYMENT\r\nexport const SET_PAYMENT_INFO = 'SET_PAYMENT_INFO';\r\nexport const SET_CARD_INFO = 'SET_CARD_INFO';\r\nexport const SET_CARD_ERRORS = 'SET_CARD_ERRORS';\r\nexport const SET_SHIPPING_ERRORS = 'SET_SHIPPING_ERRORS';\r\nexport const SET_SHIPPING_INFO = 'SET_SHIPPING_INFO';\r\nexport const SET_BILLING_INFO = 'SET_BILLING_INFO';\r\nexport const RESTORE_PAYMENT_INFO = 'RESTORE_PAYMENT_INFO';\r\n\r\n//HISTORY\r\nexport const ADD_LAYOUT_HISTORY = 'ADD_LAYOUT_HISTORY';\r\nexport const SET_LAYOUT_HISTORY = 'SET_LAYOUT_HISTORY';\r\n\r\n//SHOP PAGES\r\nexport const SET_SHOP_PAGE_LOADED = 'SET_SHOP_PAGE_LOADED';\r\nexport const SET_SHOP_PAGE_OPENED = 'SET_SHOP_PAGE_OPENED';\r\nexport const SET_SHOP_LAST_PAGE_VISITED = 'SET_SHOP_LAST_PAGE_VISITED';\r\nexport const SET_SHOP_PAGE_LEAVED = 'SET_SHOP_PAGE_LEAVED';\r\n// export const SET_SHOP_ACTIVE_CATEGORY = 'SET_SHOP_ACTIVE_CATEGORY';\r\n// export const SET_SHOP_ACTIVE_FEATURE = 'SET_SHOP_ACTIVE_FEATURE';\r\n","import config from \"./../components/canvas/store/sqftConfig\";\r\n///todo sqft-reacet//import 'core-js/es/array';\r\nimport workspace from \"./../components/canvas/core/workspace\";\r\nimport line from \"./../components/canvas/core/shapes/line\";\r\nimport $ from \"jquery\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport {isPointInsidePolygon} from \"../lib/pnpoly\";\r\nimport LineCorner from \"../components/canvas/core/shapes/lineHooks/lineCorner\";\r\nimport {getMiterEdgeHeight, isMiterEdge, isWaterfallFeature} from \"./featureHelper\";\r\n\r\nconst S3_FEATURES_Root = 'https://features-thumbnails.s3-accelerate.amazonaws.com/';\r\n\r\nexport const THUMBNAIL_SIZES = {\r\n small: `_100x100`,\r\n medium: `_175x175`,\r\n large: `_400x400`,\r\n};\r\n\r\nexport const featureThumbnailUrl = (dbFeature, size) => {\r\n return dbFeature.customThumbnail\r\n ? dbFeature.customThumbnail\r\n : dbFeature.thumbnailUrl\r\n ? s3FeatureImagePath(dbFeature.thumbnailUrl, size)\r\n : \"\";\r\n};\r\n\r\nexport function s3FeatureImagePath(imageThumbnail, size) {\r\n // const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n const features_root = S3_FEATURES_Root;\r\n return size\r\n ? `${features_root}feature-${imageThumbnail + size}.png`\r\n : `${features_root}feature-${imageThumbnail}.png` // full image path\r\n}\r\n\r\nexport const getUrlSQFTHashParam = (queryParam) => {\r\n let hash = window.location.hash.substr(1);\r\n hash = hash.replace('/sqft?', '');\r\n\r\n const hashParsed = hash.split('&').reduce(function (res, item) {\r\n let parts = item.split('=');\r\n res[parts[0]] = parts[1];\r\n return res;\r\n }, {});\r\n\r\n return hashParsed[queryParam];\r\n}\r\n\r\nexport const isIphoneX = () => { // https://stackoverflow.com/questions/47226824/iphonex-and-notch-detection\r\n let iPhone = /iPhone/.test(navigator.userAgent) && !window.MSStream;\r\n let aspect = window.screen.width / window.screen.height;\r\n return !!(iPhone && aspect.toFixed(3) === \"0.462\")\r\n};\r\nexport const isAndroid = () => {\r\n return navigator.userAgent && navigator.userAgent.toLowerCase().indexOf(\"android\") > -1;\r\n};\r\nexport const isChrome = () => {\r\n return !!navigator.userAgent.match('CriOS');\r\n};\r\nexport const isIOSDevice = () => {\r\n return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\r\n};\r\nexport const isIE = () => {\r\n return (window.navigator.userAgent.indexOf('MSIE ') > 0)\r\n || (!!window.MSInputMethodContext && !!document.documentMode)\r\n || (window.navigator.userAgent.indexOf('Trident/') > 0)\r\n};\r\nexport const isEdge = () => {\r\n return window.navigator.userAgent.indexOf('Edge') > 0\r\n};\r\nexport const isFirefox = () => navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\r\n\r\nexport const hardCodeIsLowes = () => {\r\n const fabricatorId = getParamFromUrl(\"fabricatorId\") || window.fabricatorId || document.kvConfig.userId || 137530; // master countertops2\r\n return fabricatorId === 139043 || window.location.href.includes(\"mdp_surfaces\") || window.location.href.includes(\"lowes_\")\r\n};\r\n\r\nexport const getFontsize = () => {\r\n return config.measureUnit === \"Imperial\" ? config.workspace.fontSize : config.workspace.fontSizeMetric;\r\n};\r\n\r\nexport const getFontsizeSmall = () => {\r\n return $(window).width() <= 1024 ? getFontsize() - 4 : getFontsize() - 4;\r\n};\r\n\r\nexport const rotatePoint = (point, center, angle) => {\r\n angle = angle * (Math.PI/180); // Convert to radians\r\n const rotatedX = Math.cos(angle) * (point.x - center.x) - Math.sin(angle) * (point.y-center.y) + center.x;\r\n const rotatedY = Math.sin(angle) * (point.x - center.x) + Math.cos(angle) * (point.y - center.y) + center.y;\r\n return {x: rotatedX, y: rotatedY}\r\n};\r\n\r\nexport const getPointDistance = (from, to) => {\r\n var pointDistance = Math.sqrt(Math.pow(to.x - from.x, 2) + Math.pow(to.y - from.y, 2));\r\n return Math.round10(pointDistance, -3)\r\n};\r\n\r\nexport const getClosestPoint = (point, points) => {\r\n return points.reduce((a, b) => getPointDistance(point, a) < getPointDistance(point, b) ? a : b);\r\n};\r\n\r\nexport const get45CornerLegDistanceByHypotenuse = (hypotenuseDistance) => {\r\n return Math.sqrt(Math.pow(hypotenuseDistance, 2) / 2)\r\n};\r\n\r\nexport const getMidPoint = (point1, point2) => {\r\n return {\r\n x: (point1.x + point2.x) / 2,\r\n y: (point1.y + point2.y) / 2\r\n };\r\n};\r\n\r\nexport const getSectionPartPoint = (point1, point2, part) => {\r\n return {\r\n x: (point1.x + 1/part * point2.x) / (1 + 1/part),\r\n y: (point1.y + 1/part * point2.y) / (1 + 1/part)\r\n };\r\n};\r\n\r\nexport const getParralelPoint = (pointA, pointB, distanceFromLine = 5) => {\r\n // pointA - closest to the needed point\r\n // pointB - far to the needed point\r\n const midPoint = getPointBetweenPoints(pointA, pointB, distanceFromLine);\r\n const x = pointA.x + (pointA.x - midPoint.x) * 2;\r\n const y = pointA.y + (pointA.y - midPoint.y) * 2;\r\n\r\n return {x, y}\r\n};\r\n\r\nexport const getParallelPoints = (pointA, pointB, distanceFromLine = 5) => {\r\n let vector = {x: pointB.x - pointA.x, y: pointB.y - pointA.y}\r\n let len = Math.sqrt(Math.pow(vector.x, 2) + Math.pow(vector.y, 2));\r\n let ud = {x: vector.x / len, y: vector.y / len};\r\n //let perpendicularVector = {x: -ud.y, y: ud.x };\r\n\r\n let parallelPoint1 = {\r\n x: pointA.x - ud.y * distanceFromLine,\r\n y: pointA.y + ud.x * distanceFromLine\r\n };\r\n let parallelPoint2 = {\r\n x: parallelPoint1.x + vector.x,\r\n y: parallelPoint1.y + vector.y,\r\n };\r\n\r\n return [parallelPoint2, parallelPoint1];\r\n};\r\n\r\nexport const getDistanceFromPointToLine = (x, y, x1, y1, x2, y2) => {\r\n let A = x - x1;\r\n let B = y - y1;\r\n let C = x2 - x1;\r\n let D = y2 - y1;\r\n\r\n let dot = A * C + B * D;\r\n let len_sq = C * C + D * D;\r\n let param = -1;\r\n if (len_sq !== 0) //in case of 0 length line\r\n param = dot / len_sq;\r\n\r\n let xx, yy;\r\n if (param < 0) {\r\n xx = x1;\r\n yy = y1;\r\n } else if (param > 1) {\r\n xx = x2;\r\n yy = y2;\r\n } else {\r\n xx = x1 + param * C;\r\n yy = y1 + param * D;\r\n }\r\n\r\n let dx = x - xx;\r\n let dy = y - yy;\r\n\r\n return Math.sqrt(dx * dx + dy * dy);\r\n}\r\n\r\nexport const getDistanceFromPointToInfiniteLine = (x, y, x1, y1, x2, y2) => {\r\n return Math.abs((y2 - y1) * x - (x2 - x1) * y + x2 * y1 - y2 * x1) /\r\n Math.sqrt( Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2))\r\n}\r\n\r\n/**\r\n * @param pointA closest to the needed point\r\n * @param pointB far to the needed point\r\n * @param distanceFromPointA\r\n * @param decimals\r\n * @return {{x: *, y: *}}\r\n */\r\nexport const getPointBetweenPoints = (pointA, pointB, distanceFromPointA = 5, decimals = null) => {\r\n // Calculate distance between pointA and pointB\r\n const distance = getPointDistance(pointA, pointB);\r\n const Xa = pointA.x;\r\n const Ya = pointA.y;\r\n const Xb = pointB.x;\r\n const Yb = pointB.y;\r\n\r\n // Calculate proportion k\r\n const k = distanceFromPointA / distance;\r\n let Xc = Xa + (Xb - Xa) * k;\r\n let Yc = Ya + (Yb - Ya) * k;\r\n\r\n // Check if decimals is not null and round if needed\r\n if (decimals !== null) {\r\n Xc = parseFloat(Math.round10(Xc, decimals));\r\n Yc = parseFloat(Math.round10(Yc, decimals));\r\n }\r\n\r\n return { x: Xc, y: Yc };\r\n};\r\n\r\nexport const getPointField = (posX, posY, parent = workspace) => {\r\n let scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (posX * scale) + offset.x,\r\n y: (posY * scale) + offset.y\r\n };\r\n};\r\n\r\nexport const getPointOnWorkspace = (posX, posY, parent = workspace) => {\r\n let offset = parent.getOffset();\r\n\r\n return {\r\n x: posX + offset.x,\r\n y: posY + offset.y\r\n };\r\n};\r\n\r\nexport const getMousePositionOnField = (mouseX, mouseY) => {\r\n let wPos = workspace.getPosition();\r\n let scale = config.scale;\r\n\r\n return {\r\n x: (mouseX + wPos.x) / scale,\r\n y: (mouseY + wPos.y) / scale\r\n };\r\n};\r\n\r\nexport const getMousePositionOnShape = (mouseX, mouseY, shape) => {\r\n const pointPosOnShape = getMousePositionOnField(mouseX, mouseY, shape);\r\n const pos = shape.getPosition();\r\n return {\r\n x: pointPosOnShape.x - pos.x,\r\n y: pointPosOnShape.y - pos.y\r\n };\r\n};\r\n\r\nexport const getPointPositionOnShape = (pointPosX, pointPosY, shape) => {\r\n const pos = shape.getPosition();\r\n return {\r\n x: pointPosX - pos.x,\r\n y: pointPosY - pos.y\r\n };\r\n};\r\n\r\n/**\r\n * Return the first two pairs which have the smallest distances\r\n * @param pointsA\r\n * @param pointsB\r\n * @return {*[]}\r\n */\r\nexport const findClosestPointPairs = (pointsA, pointsB) => {\r\n let pairs = [];\r\n\r\n // Find the closest point from pointsB for each point in pointsA\r\n pointsA.forEach(pointA => {\r\n let closestPoint = null;\r\n let minDistance = Number.MAX_VALUE;\r\n\r\n // Iterating over each point in pointsB\r\n pointsB.forEach(pointB => {\r\n let distance = getPointDistance(pointA, pointB);\r\n // Updating the closest point and minimum distance if a closer point is found\r\n if (distance < minDistance) {\r\n closestPoint = pointB;\r\n minDistance = distance;\r\n }\r\n });\r\n\r\n pairs.push({ pointA, pointB: closestPoint, distance: minDistance });\r\n });\r\n\r\n // Sorting the pairs by distance\r\n pairs.sort((a, b) => a.distance - b.distance);\r\n\r\n return pairs.slice(0, 2);\r\n}\r\n\r\nexport const orientation = {\r\n VERTICAL: 0,\r\n HORIZONTAL: 1,\r\n NORTHWEST: 2,\r\n SOUTHEAST: 3,\r\n NORTHEAST: 4,\r\n SOUTHWEST: 5\r\n};\r\n\r\nexport const getParamFromUrl = (name, url = window.location.href) => {\r\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\r\n};\r\n\r\nexport const numToLetter = (num) => {\r\n let mod = num % 26;\r\n let pow = num / 26 | 0;\r\n let out = mod ? String.fromCharCode(64 + mod) : (pow--, 'Z');\r\n\r\n return pow ? numToLetter(pow) + out : out;\r\n};\r\n\r\nexport const letterToNum = (str) => {\r\n let out = 0,\r\n len = str.length,\r\n pos = len;\r\n\r\n while ((pos -= 1) > -1) {\r\n out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - 1 - pos);\r\n }\r\n\r\n return out;\r\n};\r\n\r\n//// CONVERT MEASURE UNIT START ////\r\n\r\nexport const mmToM = (mm) => {\r\n return Math.ceil10(mm / config.mmDivider, -2);\r\n};\r\n\r\nexport const mm2ToM2 = (mm) => {\r\n return Math.ceil10(mm / config.mm2ToM2Divider, -2);\r\n};\r\n\r\nexport const cmToInches = (cm) => {\r\n return Math.ceil10(cm / 2.54, -2);\r\n};\r\n\r\nexport const mmToInches = (mm) => {\r\n return Math.ceil10(mm / 25.4, -3);\r\n};\r\n\r\nexport const cmToMm = (cm) => {\r\n return Math.ceil10(cm * 10, -2);\r\n};\r\n\r\nexport const inchesToMm = (totalInches, shouldCeil = true, shouldRound = false) => {\r\n if (shouldCeil) {\r\n return Math.ceil(totalInches * config.millimetersMultiplier);\r\n } else if (shouldRound) {\r\n return Math.round(totalInches * config.millimetersMultiplier);\r\n }\r\n return totalInches * config.millimetersMultiplier;\r\n};\r\n\r\nexport const inchesToM = (totalInches) => {\r\n return Math.ceil10(totalInches * config.inchesToMMultiplier, -2);\r\n};\r\nexport const inchesToLNFT = (totalInches) => {\r\n return Math.ceil10(totalInches * 0.08333, -2);\r\n};\r\nexport const sqInchesToSqFoot = (totalInches) => {\r\n return Math.ceil10(totalInches / 144, -2);\r\n};\r\n\r\nexport const sqInchesToMM2 = (inches) => {\r\n return Math.ceil10(inches * 645.16, -2);\r\n};\r\n\r\nexport const sqInchesToM2 = (totalInches) => {\r\n return Math.ceil10(totalInches / 1550, -2);\r\n};\r\n\r\nexport const sqftToMM2 = (length) => {\r\n return Math.ceil(length * config.sqftToMmMultiplier);\r\n};\r\n\r\nexport const lnftToMM = (length) => {\r\n return Math.ceil(length * config.lnftToMmMultiplier);\r\n};\r\n\r\nexport const sqftToM2 = (length) => {\r\n return Math.ceil10(length * config.sqftToM2Multiplier, -2);\r\n};\r\n\r\nexport const getTransformedMeasureUnit = (value) => {\r\n return sqftConfig.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n}\r\n\r\n//// CONVERT MEASURE UNIT END ////\r\n\r\n//// MEASURE DISTANCE START ////\r\n\r\n// Reduce a fraction by finding the Greatest Common Divisor and dividing by it.\r\nconst gcd = (a, b) => {\r\n if (b === 0) return a;\r\n return gcd(b, a % b);\r\n};\r\n\r\nconst reduce = (numerator, denominator) => {\r\n const common = gcd(numerator, denominator);\r\n return [numerator / common, denominator / common];\r\n};\r\n\r\nexport const measureDistanceToInches = (distance) => {\r\n let denom = 16;\r\n var total_segments = Math.ceil(distance * denom),\r\n // todo check if calculations are correct\r\n // millimeters = inchesToMm(distance),\r\n millimeters = Math.round(distance * config.millimetersMultiplier),\r\n segmentDistance = total_segments / denom,\r\n fraction = total_segments % denom,\r\n rounded = Math.floor(segmentDistance),\r\n inches = rounded % 12,\r\n feet = (rounded - inches) / 12,\r\n reduced = [0,0],\r\n decimal = 0;\r\n\r\n if(fraction > 0) {\r\n reduced = reduce(fraction, denom);\r\n }\r\n\r\n if(reduced[0] !== 0 && reduced[1] !== 0) {\r\n decimal = Math.floor((reduced[0] * 100) / (reduced[1] * 100)) / 100;\r\n }\r\n\r\n return {\r\n feet: feet,\r\n inches: inches,\r\n millimeters: millimeters,\r\n rounded: rounded,\r\n reduced: reduced,\r\n decimal: decimal\r\n }\r\n};\r\n\r\nexport const getSnappedPos = function(pos) {\r\n let scaledGridSize = sqftConfig.workspace.getScaledGridSize();\r\n let newX = Math.round(pos.x / scaledGridSize) * scaledGridSize;\r\n let newY = Math.round(pos.y / scaledGridSize) * scaledGridSize;\r\n return {\r\n x: newX,\r\n y: newY\r\n };\r\n};\r\n\r\nexport const distanceToInches = (distance) => {\r\n var dist = measureDistanceToInches(distance),\r\n ret = \"\";\r\n\r\n if(dist.feet > 0)\r\n ret = dist.feet + \"'\";\r\n if(dist.inches > 0)\r\n ret += dist.inches + \"\\\"\";\r\n\r\n if(dist.reduced[0] > 0) {\r\n var fraction_text = dist.reduced[0] + \"/\" + dist.reduced[1];\r\n ret = ret.toString().substr(0, ret.length - 1) + \" \" + fraction_text + \"\\\"\";\r\n dist.rounded += \" \" + fraction_text;\r\n }\r\n\r\n ret = dist.rounded + \"\\\"\";\r\n\r\n return ret;\r\n};\r\n\r\nexport const distanceToMillimeters = (distance) => {\r\n var dist = measureDistanceToInches(distance);\r\n\r\n return dist.millimeters + \" mm\";\r\n};\r\n\r\n/*\r\n * edge can be applied to line and to lineCorner\r\n */\r\nexport const getEdgeLength = (attachedTo) => {\r\n let lineBumpoutTotalHeight = 0;\r\n let lineCornerWidth = 0;\r\n let length = 0;\r\n if (attachedTo instanceof LineCorner) {\r\n switch (config.measureUnit) {\r\n case \"Imperial\": length += inchesToLNFT(attachedTo.getLength()); break;\r\n case \"Metric\": length += inchesToM(attachedTo.getLength()); break;\r\n }\r\n } else if (attachedTo instanceof line) {\r\n if (attachedTo.isWithBumpout()) {\r\n lineBumpoutTotalHeight = attachedTo.getLineBumpoutTotalHeight();\r\n }\r\n if (attachedTo.lineCorner) {\r\n lineCornerWidth += attachedTo.get45CornerLegDistance();\r\n }\r\n const prevLine = attachedTo.getParent().getPrevLine(attachedTo);\r\n if (prevLine.lineCorner) {\r\n lineCornerWidth += prevLine.get45CornerLegDistance();\r\n }\r\n if (config.measureUnit === \"Imperial\") {\r\n length = Math.round(( Math.sqrt(\r\n Math.pow(attachedTo.to.x - attachedTo.from.x, 2)\r\n +\r\n Math.pow(attachedTo.to.y - attachedTo.from.y, 2)\r\n ) + lineBumpoutTotalHeight - lineCornerWidth) / 12 * 100) / 100;\r\n } else {\r\n length = inchesToM(\r\n Math.abs(attachedTo.to.x - attachedTo.from.x + attachedTo.to.y - attachedTo.from.y)\r\n + lineBumpoutTotalHeight - lineCornerWidth\r\n )\r\n }\r\n }\r\n\r\n return length;\r\n};\r\n\r\nexport const getEdgeArea = (line, length, featureId) => {\r\n let totalArea = 0;\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n // let edge = edges.edges.find(edge => edge.id === +img.dataset.id);\r\n // let edgeFeature = edges.getFeatureEdgeFilter(edge);\r\n\r\n if (!edge) {\r\n if (!workspace.isEdgeFeatureError) {\r\n console.log('edgeFeature not found', featureId);\r\n workspace.isEdgeFeatureError = true\r\n }\r\n\r\n return totalArea;\r\n }\r\n\r\n // 1.) additional area for waterfall edges\r\n if (isWaterfallFeature(edge.part.dbFeature.id)) { // && !isFeatureUnitUseEach(edge.part)\r\n switch (config.measureUnit) {\r\n case \"Imperial\": totalArea += length * config.waterfallImperialHeight; break;\r\n case \"Metric\": totalArea += length * config.waterfallMetricHeight; break;\r\n }\r\n // additional area for 40mm edges\r\n }\r\n\r\n // 2.) additional area for mitered edges (additional area for the mitered edge tool added separately)\r\n if (isMiterEdge(featureId) && !line.isWithMitered() ) {\r\n // additional area for 40mm edges\r\n const miterEdgeHeight = getMiterEdgeHeight(featureId);\r\n if (miterEdgeHeight) {\r\n totalArea += length * miterEdgeHeight\r\n }\r\n }\r\n\r\n //let edge40mmIds = edges.getEdgeFilterByValue(\"40mm Waterfall\").map(({ id }) => id);\r\n //let is40mmEdge = edge40mmIds.filter(value => edgeFeature.includes(value)).length > 0;\r\n\r\n // else if (is40mmEdge) { // by text: edge.displayName.includes('40mm')\r\n // switch (config.measureUnit) {\r\n // //case \"Imperial\": totalArea += length * config.waterfallImperialHeight; break;\r\n // case \"Metric\": totalArea += length * 40; break;\r\n // }\r\n // }\r\n\r\n return totalArea;\r\n}\r\n\r\nexport const getBacksplashArea = (backsplashValue, attachedTo) => {\r\n backsplashValue = config.measureUnit === \"Imperial\" ? +backsplashValue : mmToInches(+backsplashValue);\r\n const backsplashLength = sqInchesToSqFoot(getBacksplashLength(attachedTo));\r\n const backsplashArea = Math.round10(backsplashValue * backsplashLength, -2)\r\n\r\n return config.measureUnit === \"Imperial\" ? backsplashArea : sqftToM2(backsplashArea);\r\n};\r\n\r\n/*\r\n * backsplash can be applied to line and to lineCorner\r\n * return sqft\r\n */\r\nexport const getBacksplashLength = (attachedTo) => {\r\n let length = 0;\r\n let lineCornerWidth = 0;\r\n\r\n if (attachedTo instanceof LineCorner) {\r\n length += attachedTo.getLength();\r\n } else if(attachedTo instanceof line) {\r\n const prevLine = attachedTo.getParent().getPrevLine(attachedTo);\r\n let lineLength = attachedTo.getLineLength();\r\n\r\n if (attachedTo.isWithBumpout()) {\r\n lineLength += attachedTo.getLineBumpoutTotalHeight();\r\n }\r\n if (attachedTo.lineCorner) {\r\n lineCornerWidth += attachedTo.get45CornerLegDistance();\r\n }\r\n if (prevLine.lineCorner) {\r\n lineCornerWidth += prevLine.get45CornerLegDistance();\r\n }\r\n\r\n length += lineLength - lineCornerWidth;\r\n }\r\n\r\n return length;\r\n};\r\n\r\n//// MEASURE DISTANCE END ////\r\n\r\nexport const truncate = (source, size) => {\r\n let quot = '"';\r\n if(source.slice(0, size - 1 + quot.length).includes(quot)) {\r\n size += quot.length - 1;\r\n }\r\n\r\n return source.length > size ? source.slice(0, size - 1) + \"…\" : source;\r\n};\r\n\r\n//// HTML ////\r\n\r\nexport const setStylesOnElement = (element, styles) => {\r\n Object.assign(element.style, styles);\r\n};\r\n\r\nexport const getMinInArray = (array, attrib) => {\r\n return array.reduce(function(prev, curr) {\r\n return prev[attrib] < curr[attrib] ? prev : curr;\r\n });\r\n};\r\n\r\nexport const getMaxInArray = (array, attrib) =>{\r\n return array.reduce(function(prev, curr) {\r\n return prev[attrib] < curr[attrib] ? prev : curr;\r\n });\r\n};\r\n\r\n/// SLAB ///\r\n\r\nexport const getGCD = function(a, b) {\r\n if (!b) {\r\n return a;\r\n }\r\n\r\n return getGCD(b, a % b);\r\n};\r\n\r\nexport const getAspectRatio = function(height, width) {\r\n let heightGCD = getGCD(height, width);\r\n let aspectHeight = height / heightGCD;\r\n let aspectWidth = width / heightGCD;\r\n\r\n console.log(\"heightGCD\", heightGCD);\r\n console.log(\"aspectHeight\", aspectHeight);\r\n console.log(\"aspectWidth\", aspectWidth);\r\n\r\n return {aspectHeight, aspectWidth, heightGCD};\r\n};\r\n\r\n/**\r\n * If shouldExtend is true this will always return point if segments are not parallel.\r\n * @param {{x: number, y: number}} point1\r\n * @param {{x: number, y: number}} point2\r\n * @param {{x: number, y: number}} point3\r\n * @param {{x: number, y: number}} point4\r\n * @param {boolean} isRounded\r\n * @param {boolean} shouldExtend\r\n * @return {{x: number, y: number}|null} new point on the line\r\n */\r\nexport const getIntersectCordsBetweenLines = (point1, point2, point3, point4, isRounded, shouldExtend = false) => {\r\n const points = [point1.x, point1.y, point2.x, point2.y, point3.x, point3.y, point4.x, point4.y];\r\n if (shouldExtend) {\r\n return getIntersectCordsWithExtendedSegments(...points);\r\n } else {\r\n return getIntersectCords(...points, isRounded)\r\n }\r\n\r\n}\r\n\r\n// line intercept math by Paul Bourke http://paulbourke.net/geometry/pointlineplane/\r\n// Determine the intersection point of two line segments\r\n// Return FALSE if the lines don't intersect\r\nexport const getIntersectCords = function(x1, y1, x2, y2, x3, y3, x4, y4, rounded) {\r\n\r\n // Check if none of the lines are of length 0\r\n if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {\r\n return false\r\n }\r\n let denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\r\n\r\n // Lines are parallel\r\n if (denominator === 0) {\r\n return false\r\n }\r\n\r\n let ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\r\n let ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;\r\n\r\n // is the intersection along the segments\r\n if (ua < 0 || ua > 1 || ub < 0 || ub > 1) {\r\n return false\r\n }\r\n\r\n // Return a object with the x and y coordinates of the intersection\r\n let x = x1 + ua * (x2 - x1);\r\n let y = y1 + ua * (y2 - y1);\r\n if (rounded) {\r\n x = Math.round(x);\r\n y = Math.round(y);\r\n }\r\n\r\n return {x, y}\r\n};\r\n\r\n/**\r\n * We expand two segments and get their intersection point. This will always return point if segments are not parallel.\r\n * @param x1\r\n * @param y1\r\n * @param x2\r\n * @param y2\r\n * @param x3\r\n * @param y3\r\n * @param x4\r\n * @param y4\r\n * @return {{x: number, y: number}|null} new point on the line\r\n **/\r\nconst getIntersectCordsWithExtendedSegments = (x1, y1, x2, y2, x3, y3, x4, y4) => {\r\n const A1 = y2 - y1;\r\n const B1 = x1 - x2;\r\n const C1 = A1 * x1 + B1 * y1;\r\n\r\n const A2 = y4 - y3;\r\n const B2 = x3 - x4;\r\n const C2 = A2 * x3 + B2 * y3;\r\n\r\n const det = A1 * B2 - A2 * B1;\r\n\r\n if (det === 0) {\r\n return null;\r\n } else {\r\n const x = (B2 * C1 - B1 * C2) / det;\r\n const y = (A1 * C2 - A2 * C1) / det;\r\n return { x, y };\r\n }\r\n};\r\n\r\n/**\r\n * get new point on the beam which is at distant from the second point at a certain length distance\r\n * @param {{x: number, y: number}} point1\r\n * @param {{x: number, y: number}} point2\r\n * @param {number} distance\r\n * @return {{x: number, y: number}} new point on the line\r\n */\r\nexport const getPointOnTheLine = (point1, point2, distance) => {\r\n const length = getPointDistance(point1, point2);\r\n const k = 1 + distance / length;\r\n const x = parseFloat(point2.x) + k * (parseFloat(point1.x) - parseFloat(point2.x));\r\n const y = parseFloat(point2.y) + k * (parseFloat(point1.y) - parseFloat(point2.y));\r\n\r\n return {x, y}\r\n}\r\n\r\n/**\r\n * Determines whether a point is inside a shape or on its border.\r\n *\r\n * @param {Object} point - The point to check, with properties x and y.\r\n * @param {Object} shape - The shape object, which has a getLines method returning line segments.\r\n * @param {boolean} [includeBorder=false] - If true, the function also returns true when the point is on the border of the shape.\r\n * @returns {boolean} True if the point is inside the shape or on its border (depending on includeBorder), otherwise false.\r\n */\r\nexport const isPointInsideShape = (point, shape, includeBorder = false) => {\r\n let x = point.x, y = point.y;\r\n let inside = false;\r\n let shapeLines = shape.getLines(true);\r\n\r\n for (let i = 0, j = shapeLines.length - 1; i < shapeLines.length; j = i++) {\r\n const iPosition = getPointField(shapeLines[i].from.x, shapeLines[i].from.y, shapeLines[i]);\r\n const jPosition = getPointField(shapeLines[j].to.x, shapeLines[i].to.y, shapeLines[j]);\r\n\r\n let xi = iPosition.x, yi = iPosition.y;\r\n let xj = jPosition.x, yj = jPosition.y;\r\n\r\n // Check if the point is on the line segment\r\n if (includeBorder && isPointOnLine(point, {x: xi, y: yi}, {x: xj, y: yj})) {\r\n return true;\r\n }\r\n\r\n if (((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi)) {\r\n inside = !inside;\r\n }\r\n }\r\n\r\n return inside;\r\n};\r\n\r\n/**\r\n * Checks if a point is on a line segment defined by two points.\r\n *\r\n * @param {Object} pt - The point to check, with properties x and y.\r\n * @param {Object} linePt1 - The first point of the line segment, with properties x and y.\r\n * @param {Object} linePt2 - The second point of the line segment, with properties x and y.\r\n * @returns {boolean} True if the point is on the line segment, otherwise false.\r\n */\r\nfunction isPointOnLine(pt, linePt1, linePt2) {\r\n const dxc = pt.x - linePt1.x;\r\n const dyc = pt.y - linePt1.y;\r\n const dxl = linePt2.x - linePt1.x;\r\n const dyl = linePt2.y - linePt1.y;\r\n\r\n const cross = dxc * dyl - dyc * dxl;\r\n if (cross !== 0) return false; // Point is not on the line\r\n\r\n // Check if the point is within the line segment bounds\r\n if (Math.abs(dxl) >= Math.abs(dyl))\r\n return dxl > 0 ? linePt1.x <= pt.x && pt.x <= linePt2.x : linePt2.x <= pt.x && pt.x <= linePt1.x;\r\n else\r\n return dyl > 0 ? linePt1.y <= pt.y && pt.y <= linePt2.y : linePt2.y <= pt.y && pt.y <= linePt1.y;\r\n}\r\n\r\nexport const getAreaByShoelaceFormula = (lines) => {\r\n let area = 0;\r\n for (let i = 0; i < lines.length; i++) {\r\n area += lines[i].to.x * (lines[i + 1] ? lines[i + 1].to.y : lines[0].to.y );\r\n area -= lines[i].to.y * (lines[i + 1] ? lines[i + 1].to.x : lines[0].to.x );\r\n }\r\n\r\n return area / 2;\r\n};\r\n\r\nexport const addDecimalToLength = (lineLength) => {\r\n let decimal = 0;\r\n if (lineLength.reduced.length) {\r\n if (lineLength.reduced[0] === 1 && lineLength.reduced[1] === 4) {\r\n decimal = 0.25;\r\n } else if (lineLength.reduced[0] === 1 && lineLength.reduced[1] === 2) {\r\n decimal = 0.5;\r\n } else if (lineLength.reduced[0] === 3 && lineLength.reduced[1] === 4) {\r\n decimal = 0.75;\r\n }\r\n }\r\n\r\n return lineLength.rounded + decimal\r\n};\r\n\r\nexport const getAngleBetweenTwoPoints = (point1, point2) => {\r\n return Math.atan2(point2.y - point1.y, point2.x - point1.x) * 180 / Math.PI;\r\n}\r\n\r\nexport const getAngleRelativeToTheHorizontalAxis = (point1, point2) => {\r\n let dx = point1.x - point2.x;\r\n let dy = point1.y - point2.y;\r\n\r\n return (Math.atan2(dy, dx) * 180 / Math.PI + 360) % 360;\r\n}\r\n\r\nexport const getTanDeg = (deg) => {\r\n let rad = deg * Math.PI/180;\r\n return Math.tan(rad);\r\n}\r\n\r\n/**\r\n * return closest higher number in array than needle\r\n * @param {int} needle\r\n * @param {[int]} array\r\n * @return {*}\r\n */\r\nexport const getClosestHigherNumber = (needle, array) => {\r\n return array.reduce((prev, curr) => {\r\n if (curr <= needle) {\r\n return prev\r\n }\r\n if (prev === null) {\r\n return curr\r\n }\r\n return curr - needle < prev - needle ? curr : prev;\r\n }, null);\r\n}\r\n\r\nexport const isDisabledInPopupWithParents = (item) => {\r\n if (item.isDisabledInPopup) {\r\n return true\r\n }\r\n if (item.getParent && item.getParent()) {\r\n return isDisabledInPopupWithParents(item.getParent());\r\n }\r\n\r\n return false\r\n}\r\n\r\n/**\r\n * Point 1,2,3 is a corner, where 2 is midpoint\r\n * we assume that distance between lines is more than minLineLength\r\n * @param shape\r\n * @param point1\r\n * @param point2\r\n * @param point3\r\n * @param {number} minLineLength\r\n */\r\nexport const isInnerCorner = (shape, point1, point2, point3, minLineLength = 25) => {\r\n const shapePoints = shape.getPointFieldArray();\r\n const closePoint1 = getPointOnTheLine(point2, point1, -minLineLength);\r\n const closePoint2 = getPointOnTheLine(point2, point3, -minLineLength);\r\n const midPoint = getMidPoint(closePoint1, closePoint2);\r\n\r\n // RenderFigures.renderCircle(closePoint1, 12,1, '#63b141');\r\n // RenderFigures.renderCircle(closePoint2, 12,1, '#63b141');\r\n // RenderFigures.renderCircle(midPoint, 10, 1);\r\n // console.log(\"midPoint\", midPoint);\r\n // console.log(\"isPointInsidePolygon\", isPointInsidePolygon(midPoint, shapePoints));\r\n // debugger // eslint-disable-line no-debugger\r\n return !isPointInsidePolygon(midPoint, shapePoints);\r\n}\r\n\r\nexport const parseImperialFractionToDecimal = (input) => {\r\n const sanitizedInput = input.replace(/['\"]/g, \"\");\r\n const [wholePart, fractionPart] = sanitizedInput.split(\" \");\r\n\r\n let decimalValue = parseFloat(wholePart) || 0; // Default to 0 if no whole part\r\n\r\n // If there's a fraction part, convert it to decimal\r\n if (fractionPart && fractionPart.includes(\"/\")) {\r\n const [numerator, denominator] = fractionPart.split(\"/\").map(Number);\r\n if (denominator) {\r\n decimalValue += numerator / denominator;\r\n }\r\n }\r\n\r\n return decimalValue;\r\n};\r\n","import invert from \"lodash/invert\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFilterGroupValues, splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {\r\n LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, SIDE_POSITIONS,\r\n useNewNavLogicPartIds, LOOK_WALLS_ONLY, COUNTERTOP_GROUP_BATHROOM, PAN_POSITIONS\r\n} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {getOptionsFromNavItemsForFeature, navFeatureCLick} from \"../lookNavigation/lookFunctions\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {getSkusDifferences, getSkuWithoutDot} from \"../lookNavigation/lookFunctions2\";\r\nimport {getColorFilterValue} from \"../../../misc/filtersFunctions\";\r\nimport {IS_LIXIL_SERVERS, IS_QKB_UI} from \"../../../config\";\r\nimport {HANDLES_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport {isEncore} from \"../../../misc/fabricatorHardcode\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (this.layerPositions) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : SIDE_POSITIONS[0];\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n const instance = new this.constructor(false, partNumber);\r\n return this.load_(dbFeature, instance, true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"BathroomV5\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // someFeatureInStock(feature, arrayOfFeatures) {\r\n // // console.log(\"someFeatureInStock\", feature);\r\n // return isInStock(feature) || arrayOfFeatures.some(currentFeature => {\r\n // // if ((feature._collectionName === currentFeature._collectionName) && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)) {\r\n // // console.log(\"currentFeature\", currentFeature);\r\n // // }\r\n // if (feature.partId === \"vanity_sink\") {\r\n // return (feature._collectionName === currentFeature._collectionName)\r\n // && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)\r\n // }\r\n // return (feature._collectionName === currentFeature._collectionName)\r\n // && (feature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory)\r\n // && (currentFeature.dbFeature.id !== feature.dbFeature.id) && isInStock(currentFeature)\r\n // })\r\n // }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationSubItemsSimple(filters, searchText) {\r\n const featuresList = this.activeFeature && this.activeFeature.metaData.layerPosition\r\n && this.activeFeature.metaData.layerPosition !== SIDE_POSITIONS[0] ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n // const {firstOpenedFeature, firstOpenedConditions, returnAllFeatures} = restOptions;\r\n const {returnAllFeatures} = restOptions;\r\n const featuresList = this.getFeaturesForNavigationFrom(restOptions);\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = returnAllFeatures\r\n ? filteredAvailableFeatures\r\n : this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n if (this.partId === \"vanity_faucet\" || HANDLES_GROUP_BATHROOM.includes(this.partId) || this.nextFeaturesPageToLoadArray) {\r\n const allConditions = this.getArrayOfConditions();\r\n if (this.partId === \"vanity_faucet\") {\r\n const mountTypeCondition = allConditions.find(cond => cond.propName === \"MountType\");\r\n if (mountTypeCondition) {\r\n featuresToDisplay = featuresToDisplay.sort((a, b) => {\r\n return b.matchesMetaForCondition(mountTypeCondition.propName, mountTypeCondition.propValue)\r\n - a.matchesMetaForCondition(mountTypeCondition.propName, mountTypeCondition.propValue)\r\n })\r\n }\r\n } else { // vanity_backsplash and vanity_countertop should show in visualizer first\r\n featuresToDisplay = featuresToDisplay.sort((a, b) => {\r\n return b.matchesMetaForArrayOfConditions(allConditions) - a.matchesMetaForArrayOfConditions(allConditions)\r\n })\r\n }\r\n }\r\n // console.log(\"filterGroups\", filterGroups);\r\n if (this.layerPositions || this.oneLayerPosition || returnAllFeatures) {\r\n featuresToDisplay = uniqBy(featuresToDisplay, (feature) => feature.getSplittedFeatureName());\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay)\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay) {\r\n let newFeatures = [];\r\n let navItems = [];\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n if (filterGroups && filterGroups.length && (!filters || !Object.keys(filters).length) && !IS_QKB_UI && !isEncore) {\r\n // console.log(\"filteredAvailableFeatures\", filteredAvailableFeatures);\r\n // console.log(\"featuresToDisplay\", featuresToDisplay);\r\n for (let i = 0; i < featuresToDisplay.length; i++) { // 1) take all others\r\n const currentFeature = featuresToDisplay[i];\r\n // if (currentFeature.dbFeature.sharedFeatureName === \"26128EN2\") {\r\n // debugger;//eslint-disable-line\r\n // }\r\n const collectionName = currentFeature.getCollectionName(filterGroups);\r\n const colorName = currentFeature.getColorName(filterGroups);\r\n const matchingOptionsName = currentFeature.getMatchingOptionsName();\r\n const matchByCollection = allowCheckForCollection(currentFeature) ? !newFeatures.some(feature => {\r\n return feature._collectionName === collectionName && feature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory\r\n }) : false;\r\n let conditionPassed = false;\r\n if (useNewNavLogicPartIds.includes(this.partId)) {\r\n const sku = getSkuWithoutDot(currentFeature.dbFeature.sharedFeatureName);\r\n conditionPassed = !collectionName\r\n || matchByCollection\r\n || (!colorName && !newFeatures.some(feature => getSkusDifferences(feature.dbFeature.sharedFeatureName, currentFeature.dbFeature.sharedFeatureName) <= 1))\r\n || (colorName && !newFeatures.some(feature => {\r\n const skuDiff = getSkusDifferences(feature.dbFeature.sharedFeatureName, currentFeature.dbFeature.sharedFeatureName);\r\n if (this.partId === \"vanity_cabinet\" && skuDiff <= 2) {\r\n // case when K-33554-ASB-1WT and K-33555-ASB-0 and K-33555-ASB-1WT should be shown separately\r\n return false\r\n }\r\n return skuDiff <= 1 || getSkuWithoutDot(feature.dbFeature.sharedFeatureName) === sku\r\n }))\r\n } else {\r\n conditionPassed = !collectionName\r\n || !colorName\r\n || matchByCollection\r\n || !newFeatures.some(feature => feature.getMatchingOptionsName() === matchingOptionsName)\r\n || !newFeatures.some(feature => feature.metaData[matchingFeatureProperty] && currentFeature.metaData[matchingFeatureProperty]\r\n && isEqual(feature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n }\r\n if (conditionPassed) {\r\n newFeatures.push(currentFeature);\r\n }\r\n }\r\n // console.log(\"newFeatures\", newFeatures);\r\n navItems = this.returnUniqueNavFeatures(this.getNavItemsWithOptions(forFeature, newFeatures, featuresToDisplay, filterGroups).map(featureObject => {\r\n return new DesignNavigationItem(featureObject.mainFeature.featureName, featureObject.mainFeature, featureObject.otherOptions)\r\n }), false);\r\n }\r\n if (!navItems.length) {\r\n navItems = this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n if (this.filterNavigationItems && forFeature) {\r\n navItems = this.filterNavigationItems(navItems, forFeature)\r\n }\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n }\r\n\r\n /**\r\n * this is almost the same as feature options, it is replacing next nav items with the needed color feature\r\n * @param forFeature {featureInterface} featureInterface\r\n * @param newFeatures {[featureInterface]}\r\n * @param allFeatures {[featureInterface]}\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @returns {array}\r\n */\r\n getNavItemsWithOptions = (forFeature= null,\r\n newFeatures = [],\r\n allFeatures = [],\r\n filterGroups) => {\r\n\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n const neededColorName = forFeature ? forFeature.getColorName(filterGroups) : \"\";\r\n\r\n return newFeatures.map(currentFeature => {\r\n const filterValue = getColorFilterValue(currentFeature, filterGroups);\r\n const otherOptions = getOptionsFromNavItemsForFeature(currentFeature, allFeatures, filterGroups);\r\n\r\n const currentFeatureColor = currentFeature.getColorName(filterGroups);\r\n const customFullDisplayName = currentFeature.getMatchingOptionsName();\r\n const matchByCollection = forFeature && allowCheckForCollection(currentFeature) ? (currentFeature._collectionName === forFeature._collectionName) : true;\r\n let matchForSimilarSku = forFeature && useNewNavLogicPartIds.includes(this.partId) && matchByCollection\r\n && getSkusDifferences(currentFeature.dbFeature.sharedFeatureName, forFeature.dbFeature.sharedFeatureName) <= 1;\r\n if (this.partId === \"vanity_cabinet\" && matchForSimilarSku) {\r\n matchForSimilarSku = customFullDisplayName === forFeature.getMatchingOptionsName() // cases when 48 replaced 24\r\n }\r\n if (forFeature && (currentFeature.dbFeature.id === forFeature.dbFeature.id || matchForSimilarSku || (\r\n (customFullDisplayName === forFeature.getMatchingOptionsName())\r\n && (!forFeature.metaData[matchingFeatureProperty] || isEqual(forFeature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n && matchByCollection\r\n && (forFeature.partId === \"vanity_sink\" ? true : forFeature.dbFeature.lixilProductSubCategory === currentFeature.dbFeature.lixilProductSubCategory)\r\n && (currentFeature.dbFeature.id !== forFeature.dbFeature.id)\r\n && (currentFeatureColor && forFeature.getColorName(filterGroups) && (currentFeatureColor !== forFeature.getColorName(filterGroups)))\r\n ))) {\r\n if (filterValue && !otherOptions.some(option => option.colorValue.id === filterValue.id)) {\r\n otherOptions.push({feature: currentFeature, colorValue: filterValue})\r\n }\r\n return {\r\n mainFeature: forFeature,\r\n otherOptions: otherOptions.filter(option => option.feature.dbFeature.id !== forFeature.dbFeature.id)\r\n };\r\n } else {\r\n // console.log(\"neededColorName\", neededColorName);\r\n // console.log(\"otherOptions\", otherOptions);\r\n if (!filterValue || !otherOptions.length) {\r\n return {mainFeature: currentFeature, otherOptions: []}\r\n }\r\n if (!LOOK_WALLS_ONLY.includes(this.partId) && !COUNTERTOP_GROUP_BATHROOM.includes(this.partId)) {\r\n const allOptions = [{feature: currentFeature, colorValue: filterValue}, ...otherOptions];\r\n const mainOption = (forFeature && neededColorName && allOptions.find(option => option.feature.getColorName(filterGroups) === neededColorName))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"Chrome\"))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"White\"))\r\n || allOptions.find(option => option.feature.getColorName(filterGroups) && option.feature.getColorName(filterGroups).includes(\"rushed\")) // brushed nickel;\r\n // console.log(\"mainOption\", mainOption);\r\n if (mainOption) {\r\n return {\r\n mainFeature: mainOption.feature,\r\n otherOptions: allOptions.filter(option => option.feature.dbFeature.id !== mainOption.feature.dbFeature.id)\r\n }\r\n }\r\n }\r\n return {mainFeature: currentFeature, otherOptions}\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n navigationSubItemsWithSides(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n\r\n let navFeatures = [];\r\n const activePosition = this.activeFeature && this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n ? this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n : SIDE_POSITIONS[0];\r\n navFeatures = featuresToDisplay.filter(feature => {\r\n return feature.dbFeature.metaData[\"layerPosition\"] === activePosition\r\n })\r\n featuresToDisplay.forEach(feature => {\r\n const name1 = feature.getSplittedFeatureName();\r\n if (!navFeatures.some(navFeature => navFeature.getSplittedFeatureName() === name1)) {\r\n navFeatures.push(feature)\r\n }\r\n })\r\n return this.returnUniqueNavFeatures(navFeatures)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if ((key !== \"C\" && activeFeature.metaData.layerPosition === \"C\") || (activeFeature.metaData.layerPosition !== \"C\" && key === \"C\")) {\r\n this.layerPositions[key] = null;\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n if (this.layerPositions) { // just in case\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\",\r\n fromFeature = this.activeFeature,\r\n fromLayout = null,\r\n conditions = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = (conditions || this.getArrayOfConditions()).filter(cond => cond.propName !== \"Side\");\r\n // if (fromFeature.metaData[\"SkuName\"]) {\r\n // arrayOfConditions.push({\r\n // propName: \"SkuName\",\r\n // propValue: fromFeature.metaData[\"SkuName\"]\r\n // })\r\n // }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"walk_in_tub\"];\r\n\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])\r\n || (this.partId === \"grab_bar\" && position === \"C\"))\r\n ? fromLayout ? this.featuresList[fromLayout.getCurrentLayoutName()] : this.features\r\n : fromLayout ? this.featuresPartsList[fromLayout.getCurrentLayoutName()] : this.featuresParts;\r\n\r\n let matchFeature = null;\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n const withSkuNameConditions = [...arrayOfConditions, {\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"][0],\r\n }]\r\n matchFeature = whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(withSkuNameConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n if (!matchFeature) {\r\n matchFeature = whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return matchFeature\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.hideLayerCondition && this.hideLayerCondition()) {\r\n this.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const checkSidesFeatureGroups = [\"shower_door\", \"shower_fixture\", \"grab_bar\", \"large_corner_seat\",\r\n \"replacement_tub\", \"shower_pan_combo\", \"corner_caddie\", \"large_corner_caddie\", \"soap_dish\", \"walk_in_tub\",\r\n \"shower_seats\", \"replacement_tub_fixture\"];\r\n if (checkSidesFeatureGroups.includes(this.partId)) {\r\n const positionsAvailable = PAN_POSITIONS.filter(position => {\r\n return !!this.getMatchingPositionFeature(position, forFeature);\r\n });\r\n return positionsAvailable.length > 1\r\n }\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n navFeatureCLick(this, false, ignoreLocked, false);\r\n // this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n let increase = 0;\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n increase = increase + 0.000001;\r\n feature.layer.zIndex = getZIndex(feature) + increase;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (this.partId === \"attachment\") {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId)\r\n } else {\r\n increase = increase + 0.000001;\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + increase;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName || \"\";\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null || this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n if (LOOK_WALLS_ONLY.includes(this.partId) || COUNTERTOP_GROUP_BATHROOM.includes(this.partId)) {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0];\r\n }\r\n } else if (this.partId === \"shower_pan_combo\") {\r\n this._customDisplayName = !IS_LIXIL_SERVERS && this.metaData && Array.isArray(this.metaData[\"MatchingFeature\"])\r\n && this.metaData[\"MatchingFeature\"][0]\r\n ? this.metaData[\"MatchingFeature\"][0]\r\n : this._customDisplayName.replace(/LHO/g, \"\").replace(/RHO/g, \"\");\r\n }\r\n }\r\n if (this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this.dbFeature.wasUpdatedFromAnotherResponse = false;\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingOptionsName = () => {\r\n if (!this._customMatchingOptionsName) {\r\n switch (this.partId) {\r\n case \"vanity_cabinet\":\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getCustomFullDisplayName()).split(\"-ASB\")[0];\r\n break;\r\n case \"hand_shower_only\": {\r\n this._customMatchingOptionsName = this.getCustomFullDisplayName();\r\n if (this.metaData[\"MatchingFeature\"] && this.metaData[\"MatchingFeature\"][0]) {\r\n this._customMatchingOptionsName += this.metaData[\"MatchingFeature\"][0];\r\n }\r\n break;\r\n }\r\n case \"vanity_backsplash\":\r\n case \"vanity_countertop\":\r\n case \"walk_in_tub_fixture\":\r\n this._customMatchingOptionsName = this.getSplittedFeatureName();\r\n break;\r\n case \"shower_fixture\":\r\n case \"shower_door\":\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getSplittedFeatureName()); // TU105507.243 -> TU105507\r\n break;\r\n case \"body_spray\":\r\n this._customMatchingOptionsName = this.getSplittedFeatureName().substr(0, 5);\r\n break;\r\n default:\r\n this._customMatchingOptionsName = getSkuWithoutDot(this.getCustomFullDisplayName()).substr(0, 5);\r\n break;\r\n }\r\n if (LOOK_WALLS_ONLY.includes(this.partId)) {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customMatchingOptionsName = this._customMatchingOptionsName + manufacturerFilter[0];\r\n }\r\n }\r\n }\r\n return this._customMatchingOptionsName\r\n };\r\n\r\n getSplittedSku = () => {\r\n if (!this._splittedSku) {\r\n this._splittedSku = this.dbFeature.isFromAsRoom\r\n ? getSkuWithoutDot(this.dbFeature.sku || this.dbFeature.sharedFeatureName || \"\") // as rooms should have 8\r\n : (this.dbFeature.sku || this.dbFeature.sharedFeatureName || \"\").substr(0, 5); // grohe rooms should have 5\r\n }\r\n return this._splittedSku\r\n }\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getCustomFullDisplayName = () => {\r\n if (!this._customFullDisplayName) {\r\n this._customFullDisplayName = this.dbFeature.customDisplayName || \"\";\r\n switch (this.partId) {\r\n case \"vanity_faucet\":\r\n this._customFullDisplayName = this._customFullDisplayName\r\n .replace(\" With Lever Handles\", \"\")\r\n .replace(\" With Lever Handle\", \"\");\r\n break;\r\n case \"vanity_sink\":\r\n this._customFullDisplayName = this._customFullDisplayName\r\n .replace(\"4 Inch Centerset \", \"\")\r\n .replace(\"8 Inch Widespread \", \"\")\r\n .replace(\"Center Hole Only \", \"\");\r\n break;\r\n case \"shower_hose\":\r\n this._customFullDisplayName = this._customFullDisplayName.replace(\" Longlife\", \"\")\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n return this._customFullDisplayName\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n if (this.getAdditionalPartsConditions) {\r\n arrayOfConditions = this.getAdditionalPartsConditions(arrayOfConditions); // modify or extend parts conditions\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n let activeFeatureConditions = this.getActiveFeatureConditions();\r\n if (this.getAdditionalPartsConditions) {\r\n activeFeatureConditions = this.getAdditionalPartsConditions(activeFeatureConditions); // modify or extend parts conditions\r\n }\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!this.hasAdditionalParts) {\r\n return []\r\n }\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n\r\n // OLD SHOWER LOGIC\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n if (!this.previouslySelectedFeatures[layoutAbbr]) {\r\n this.previouslySelectedFeatures[layoutAbbr] = {}\r\n }\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId\r\n && this.previouslySelectedFeatures[layoutAbbr]\r\n && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return true\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n canBeEnabled() {\r\n const {wizardActiveItem, wizardSelectedValues, wizardActiveStep} = store.getState().wizardState;\r\n if (wizardActiveItem && wizardActiveItem.hideItems && wizardActiveItem.wizardGroups\r\n && wizardActiveItem.wizardGroups.length\r\n && wizardActiveItem.wizardGroups.some(wizardGroup => wizardGroup.groupName === (this.dbName || this.partName))\r\n && !Object.keys(wizardSelectedValues).some(key => key <= wizardActiveStep && wizardSelectedValues[key].partId === this.partId)) {\r\n return false // do not enable feature group if it uses hide items (shower wizard issue)\r\n }\r\n return true\r\n }\r\n\r\n /**\r\n * @param position {string}\r\n * @param clickedFeature {featureInterface}\r\n * @returns {[featureInterface]}\r\n */\r\n checkConflictingPosition(position, clickedFeature) {\r\n if (!position || !clickedFeature || !this.conflictingPositions\r\n || ((clickedFeature.partId === \"shower_seats\")\r\n && !clickedFeature.dbFeature.sharedFeatureName.includes(\"Comfort Plus\"))) { // hardcode - should be metadata here\r\n return []\r\n }\r\n const accParent = this.getParent();\r\n let conflictingPositions = [];\r\n this.conflictingPositions.forEach(partId => {\r\n const relItem = accParent.layout.getFeatureGroupByPartId(partId);\r\n if (relItem && !relItem.disabled && relItem.layerPositions && relItem.layerPositions[position]) {\r\n if ((clickedFeature.partId === \"valve_trim\")\r\n && !relItem.layerPositions[position].dbFeature.sharedFeatureName.includes(\"Comfort Plus\")) {\r\n // hardcode - should be metadata here. for now only Comfort Plus are conflicting\r\n return\r\n }\r\n conflictingPositions.push(relItem.layerPositions[position])\r\n }\r\n });\r\n return conflictingPositions\r\n }\r\n\r\n applyConflictingPosition(position, clickedFeature) {\r\n const conflictingPositions = this.checkConflictingPosition(position, clickedFeature);\r\n conflictingPositions.forEach(feature => {\r\n const parent = feature.getParent();\r\n parent.layerPositions[position] = null;\r\n })\r\n }\r\n\r\n}\r\n","import imagePolygon from \"./imagePolygon\";\r\nimport {UseFullSizeImages} from \"../config\";\r\n\r\nconst KIOSK_BVR_Root = document.kvConfig.imageServer + \"/brv/\";\r\nconst KIOSK_BV5_Root = document.kvConfig.imageServer + \"/bv5/\";\r\n\r\nconst KIOSK_KV_Root = document.kvConfig.imageServer + \"/kv4/\";\r\nconst KIOSK_KV5_Root = document.kvConfig.imageServer + \"/kv5/\";\r\n\r\nconst S3_BVR_Root = 'https://brv.s3-accelerate.amazonaws.com/';\r\nconst S3_BV5_Root = document.kvConfig.visualizerType === \"bvLook\"\r\n ? 'https://qc-bv5.s3-accelerate.amazonaws.com/'\r\n : 'https://qc-bv5.s3.amazonaws.com/';\r\nconst S3_BV6_Root = 'https://qc-fp5.s3.amazonaws.com/';\r\n\r\nconst S3_KV4_Root = 'https://kv4.s3-accelerate.amazonaws.com/';\r\nconst S3_KV5_Root = 'https://kv5.s3-accelerate.amazonaws.com/';\r\n//const S3_BVR_Root = 'http://s3.gfd.us/';\r\n\r\nconst KIOSK_FEATURES_Root = document.kvConfig.imageServer + \"/features-thumbnails/\";\r\nconst S3_FEATURES_Root = 'https://features-thumbnails.s3-accelerate.amazonaws.com/';\r\nconst S3_FILTERS_Root = 'https://s3.amazonaws.com/';\r\n\r\nexport const THUMBNAIL_SIZES = {\r\n small: `_100x100`,\r\n medium: `_175x175`,\r\n large: `_400x400`,\r\n}\r\nexport const LAYERS_SIZES = {\r\n normal: {\r\n width: 1620,\r\n height: 1080,\r\n },\r\n full_hd: {\r\n width: 1920,\r\n height: 1080,\r\n },\r\n full_hd_large: {\r\n width: 2880,\r\n height: 1620,\r\n },\r\n large: {\r\n width: 3000,\r\n height: 2000,\r\n },\r\n}\r\n\r\n/**\r\n * Case insensitive string inclusion\r\n * @param s3BindingName {string}\r\n * @param visualizer {string}\r\n * @param isCropped {boolean}\r\n * @param bucketName {string}\r\n * @returns {string}\r\n */\r\nexport function s3Path(s3BindingName, visualizer, isCropped = false, bucketName = \"\") {\r\n let bvr_root = document.kvConfig.kioskMode ? KIOSK_BVR_Root : S3_BVR_Root;\r\n let bv5_root = document.kvConfig.kioskMode ? KIOSK_BV5_Root : S3_BV5_Root;\r\n let kv4_root = document.kvConfig.kioskMode ? KIOSK_KV_Root : S3_KV4_Root;\r\n let kv5_root = document.kvConfig.kioskMode ? KIOSK_KV5_Root : S3_KV5_Root;\r\n let bv6_root = document.kvConfig.kioskMode ? KIOSK_KV5_Root : S3_BV6_Root;\r\n // https://brv.s3.amazonaws.com/features/All%20-%20Background%20-%20Default.png\r\n let s3Root = \"\";\r\n switch (visualizer) {\r\n case \"bv\":\r\n s3Root = document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? bv5_root : bvr_root;\r\n break;\r\n case \"kv\":\r\n s3Root = document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? kv5_root : kv4_root;\r\n break;\r\n case \"fireplace\":\r\n s3Root = bv6_root;\r\n break;\r\n default:\r\n s3Root = `https://${bucketName}.s3.amazonaws.com/`\r\n // console.error(\"undefined visualizer\", visualizer, s3BindingName);\r\n break;\r\n }\r\n let url = s3Root + s3BindingName;\r\n switch (document.kvConfig.layersSize) {\r\n case \"full_hd\":\r\n url += UseFullSizeImages || isCropped ? \".png\" : \"_1920x1080.png\"\r\n break;\r\n default:\r\n url+= UseFullSizeImages || isCropped ? \".png\" : \"_1620x1080.png\"\r\n }\r\n return encodeURI(url).replace(new RegExp('#', 'g'), '%23');\r\n}\r\n\r\nexport function s3FilterImagePath(imageThumbnail) {\r\n return imageThumbnail ? `${S3_FILTERS_Root}filter-images/${imageThumbnail.replace(\".png\", \"\")}.png` : \"\";\r\n}\r\n\r\n// export function s3FeatureImagePath(imageThumbnail, smallThumbnail = false, largeThumbnail = false) {\r\n// const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n// const mobileThumbnailPath = `_100x100`;\r\n// const desktopThumbnailPath = `_175x175`;\r\n// return smallThumbnail\r\n// ? `${features_root}feature-${imageThumbnail + mobileThumbnailPath}.png`\r\n// : `${features_root}feature-${largeThumbnail ? imageThumbnail : imageThumbnail + desktopThumbnailPath}.png`;\r\n// }\r\nexport function s3FeatureImagePath(imageThumbnail, size) {\r\n const features_root = document.kvConfig.kioskMode ? KIOSK_FEATURES_Root : S3_FEATURES_Root;\r\n return size\r\n ? `${features_root}feature-${imageThumbnail + size}.png`\r\n : `${features_root}feature-${imageThumbnail}.png` // full image path\r\n}\r\n\r\nexport function className(instance) {\r\n if(instance && instance.constructor)\r\n return instance.constructor.name;\r\n console.log(\"Instance constructor not found\", instance);\r\n return \"\";\r\n}\r\n\r\nexport function ignoreDefault(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n}\r\n\r\n/**\r\n *\r\n * @param hayStack {string}\r\n * @param needle {string}\r\n * @return {boolean}\r\n */\r\nexport function iStartWith(hayStack, needle) {\r\n return hayStack ? hayStack.toLowerCase().startsWith(needle.toLowerCase()) : false\r\n}\r\n\r\n/**\r\n * Case insensitive string inclusion\r\n * @param hayStack {string}\r\n * @param needle {string}\r\n * @returns {boolean}\r\n */\r\nexport function iIncludes(hayStack, needle) {\r\n return hayStack ? hayStack.toLowerCase().includes(needle.toLowerCase()) : false\r\n}\r\n\r\nexport function getNonce(length = 6) {\r\n let text = \"\";\r\n const possible = \"abcdefghijklmnopqrstuvwxyz0123456789\";\r\n for (let i = 0; i < length; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n return text;\r\n}\r\n\r\n/**\r\n * Makes a case-insensitive string compare\r\n * @param s1 {string}\r\n * @param s2 {string}\r\n * @param needToUppercase {boolean}\r\n * @returns {boolean}\r\n */\r\nexport function iCmp(s1, s2, needToUppercase = false) {\r\n if (!s1 && !s2) {\r\n return true;\r\n }\r\n if (!s1 || !s2) {\r\n return false;\r\n }\r\n if (needToUppercase) {\r\n return s1.toUpperCase() === s2.toUpperCase()\r\n }\r\n return s1 === s2;\r\n}\r\n\r\nconst RgFeatureName = /^([\\w\\s\\d]+)\\s*-\\s*([\\w\\d\\s]+)\\s*([\\[\\(][(\\d\\w=;\\s_\\(\\):,]+[\\)\\]]\\s*)*$/i;\r\n\r\n/**\r\n * Split a full feature name into: GroupName, FeatureName\r\n * @param name {string} Full Feature Name GroupName - Name\r\n * @param groupName {string}\r\n * @returns {*}\r\n */\r\nexport function splitFeatureName(name, groupName) {\r\n if (groupName && (groupName !== \"Backsplash\")) {\r\n return {featureName: name, groupName}\r\n }\r\n name = name.replace(/\\\"-/g, \"in \"); // for example Backsplash - 4\"-6\" Backsplash -> Backsplash - 4in 6in Backsplash\r\n name = name.replace(/\\\"/g, \"in\"); // for example Radius - 1\" Radius -> Radius - 1in Radius\r\n const matches = RgFeatureName.exec(name);\r\n if (!matches) {\r\n return {}\r\n }\r\n return {\r\n groupName: matches[1].trim(),\r\n featureName: matches[2].trim(),\r\n }\r\n}\r\n\r\n\r\nexport function styleBkgImage(image) {\r\n return {backgroundImage: `url('${image}')`};\r\n}\r\n\r\nexport function getMetadataByDimensions(dimensions) {\r\n switch (dimensions) {\r\n case \"30X8\":\r\n case \"Full\":\r\n return \"Full\";\r\n case \"15X4\":\r\n case \"Half\":\r\n return \"Half\";\r\n case \"Pony\":\r\n return \"Pony\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Checked wheather an object is NULL, if not, calls the callback method with the object itself\r\n */\r\nexport function NN(obj, cb) {\r\n if (obj)\r\n cb(obj);\r\n}\r\n\r\n/**\r\n * returns clicked canvas coordinates as {x:value, y:value}\r\n */\r\nexport function getMousePos(evt, canvas) {\r\n const rect = canvas.getBoundingClientRect();\r\n return {\r\n x: evt.clientX - rect.left,\r\n y: evt.clientY - rect.top\r\n };\r\n}\r\n\r\nexport function getFilterGroupValues(feature, filterGroup) {\r\n return feature.dbFeature.fabFilterValueIDs[filterGroup.id] || feature.dbFeature.filterValueIDs[filterGroup.id]\r\n}\r\nexport const isFeatureHasFilterValue = (feature, filterValue) => {\r\n let testFabFilter = feature.dbFeature.fabFilterValueIDs[filterValue.filterGroup_id] &&\r\n feature.dbFeature.fabFilterValueIDs[filterValue.filterGroup_id].some(filterValueId => filterValueId === filterValue.id)\r\n let testFilter = feature.dbFeature.filterValueIDs[filterValue.filterGroup_id] &&\r\n feature.dbFeature.filterValueIDs[filterValue.filterGroup_id].some(filterValueId => filterValueId === filterValue.id)\r\n\r\n return testFabFilter || testFilter;\r\n}\r\nexport function getFilterGroupValue(featureFilterValueId, filterGroup) {\r\n return filterGroup.values.find(val => val.id === featureFilterValueId);\r\n}\r\nexport function getFilterGroupValueByName(name, filterGroup) {\r\n return filterGroup.values.find(val => val.value === name);\r\n}\r\n\r\nexport const mergeFilterObjects = (filterValueIDs, fabFilterValueIDs) => {\r\n let unitedFilterValueIds = Object.assign({}, filterValueIDs || {}); // 1st create duplicate object\r\n Object.keys(fabFilterValueIDs || {}).forEach((filterKey) => {\r\n if (unitedFilterValueIds[filterKey]) { // group exist\r\n unitedFilterValueIds[filterKey] = [\r\n ...unitedFilterValueIds[filterKey],\r\n ...fabFilterValueIDs[filterKey]\r\n ];\r\n } else {\r\n unitedFilterValueIds[filterKey] = fabFilterValueIDs[filterKey] // set new key\r\n }\r\n });\r\n return unitedFilterValueIds\r\n}\r\n\r\nexport function getAllFeatureFilters(feature) {\r\n return mergeFilterObjects(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs)\r\n}\r\n\r\n/**\r\n * Filters features according to received filters\r\n * @param feature {featureInterface}\r\n * @param filters {Object} array of objects with filters: [{ 18: 111 }, {5: 12}] etc.\r\n * @returns {Array}\r\n */\r\nexport function featureHasSelectedFilters(feature, filters) {\r\n const featureFilterValueIds = getAllFeatureFilters(feature);\r\n return filters.every(filterObject => {\r\n return featureFilterValueIds[filterObject.filterGroupId]\r\n && featureFilterValueIds[filterObject.filterGroupId].some(filterId => filterObject.filterId === filterId)\r\n })\r\n}\r\n\r\n/**\r\n * Filters features according to received filters\r\n * @param features {Array} Array of features\r\n * @param filters {[navigationFilterValueInterface]} array with filters: {filterId: 9, filterGroupId: 5} // old logic object -> { 18: 111, 5: 12 } etc.\r\n * @returns {Array}\r\n */\r\nexport function filterFeaturesByValues(features, filters) {\r\n return features.filter(feature => {\r\n let unitedFilterValueIds = getAllFeatureFilters(feature);\r\n const newFiltersArray = [];\r\n filters.forEach((filterObject) => {\r\n const existingFilterGroup = newFiltersArray.find(filterGroupObject => {\r\n return filterGroupObject.filterGroupId === filterObject.filterGroupId\r\n });\r\n if (filterObject.filterId) {\r\n if (existingFilterGroup) {\r\n existingFilterGroup.filterValues.push(filterObject.filterId)\r\n } else {\r\n newFiltersArray.push({\r\n filterGroupId: filterObject.filterGroupId,\r\n filterValues: [filterObject.filterId]\r\n })\r\n }\r\n }\r\n });\r\n return newFiltersArray.every(filterObject => {\r\n const existingFeatureFilter = unitedFilterValueIds[filterObject.filterGroupId];\r\n return existingFeatureFilter && existingFeatureFilter.some(filterValue => {\r\n return filterObject.filterValues.some(filVal => filVal === filterValue)\r\n })\r\n })\r\n });\r\n}\r\n\r\nexport function scrollToDivInArea(div, area) {\r\n const divOffset = div.offset();\r\n if (divOffset) {\r\n area.animate({\r\n scrollLeft: divOffset.left - area.offset().left + area.scrollLeft() - area.width()/2 + div.width()/2\r\n }, 600);\r\n }\r\n}\r\n\r\nexport function getTranslateX(myElement) {\r\n const style = window.getComputedStyle(myElement);\r\n const matrix = new window.WebKitCSSMatrix(style.webkitTransform);\r\n return matrix.m41;\r\n}\r\n\r\nexport function reorder(array, indexA, indexB) {\r\n const tmp = array[indexA];\r\n array[indexA] = array[indexB];\r\n array[indexB] = tmp;\r\n return array\r\n}\r\n\r\n/**\r\n * requestAnim shim layer by Paul Irish\r\n */\r\nconst updateRate = 1000 / 60; //ticks per second in miliseconds\r\nexport function requestAnimFrame() {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function(callback){\r\n window.setTimeout(callback, updateRate);\r\n };\r\n}\r\n\r\n/**\r\n * checks for mobile state\r\n */\r\nexport function isTouchDevice() { // https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\r\n const mq = function(query) {\r\n return window.matchMedia(query).matches;\r\n };\r\n\r\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch) {\r\n return true;\r\n }\r\n\r\n // include the 'heartz' as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n const query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\r\n return mq(query);\r\n}\r\n\r\n/**\r\n * creates a layer polygon https://stackoverflow.com/questions/23983461/creating-a-path-from-the-edge-of-an-image\r\n */\r\n\r\nexport function makeLayerPolygon(layer, image, width, height) {\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\");\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n context2D.globalAlpha = 0.5;\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n context2D.drawImage(image, 0, 0);\r\n\r\n const imgData = context2D.getImageData(0,0, width, height);\r\n const layerPolygon = {\r\n layer,\r\n img: image,\r\n polygon: imagePolygon(imgData.data, width, height, layer.image)\r\n };\r\n // console.log('layerPolygon created!', layerPolygon);\r\n return layerPolygon\r\n}\r\n/**\r\n * checks if point is inside the polygon\r\n */\r\nexport function pnpoly(points, test) {\r\n let i, j, c = false;\r\n for (i = 0, j = points.length - 1; i < points.length; j = i++) {\r\n if (((points[i][1] > test.y) !== (points[j][1] > test.y)) &&\r\n (test.x < (points[j][0] - points[i][0]) * (test.y - points[i][1])\r\n / (points[j][1] - points[i][1]) + points[i][0])) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\n\r\nexport function base64ToBlob(base64, mime) {\r\n mime = mime || '';\r\n var sliceSize = 1024;\r\n var byteChars = window.atob(base64);\r\n var byteArrays = [];\r\n for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {\r\n var slice = byteChars.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new window.Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n return new Blob(byteArrays, {type: mime});\r\n}\r\nexport function downloadCanvasImageById(canvasId) {\r\n const canvas = document.getElementById(canvasId);\r\n // console.log('canvasId', canvasId);\r\n // console.log('canvas', canvas);\r\n const imageUrl = canvas.toDataURL();\r\n var base64ImageContent = imageUrl.replace(/^data:image\\/(png|jpg);base64,/, \"\");\r\n var blob = base64ToBlob(base64ImageContent, 'image/png');\r\n var a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style = \"display: none\";\r\n var url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = \"bathroom-visualizer.png\";\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport const toBoolean = (value) => {\r\n if (typeof (value) === 'string') {\r\n value = value.toLowerCase();\r\n }\r\n switch (value) {\r\n case true:\r\n case \"true\":\r\n case 1:\r\n case \"1\":\r\n case \"on\":\r\n case \"yes\":\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\n\r\nexport const capitalizeFirstLetters = (string) => {\r\n return string.replace(/(^\\w|\\s\\w)/g, m => m.toUpperCase()) // ^\\w - first character of the string, | - or, \\s\\w - first character after whitespace, (^\\w|\\s\\w) - Capture the pattern, g - Flag: Match all occurrences\r\n}\r\n\r\nexport const isVisualizerRoute = () => {\r\n return window.location.hash.includes(\"visualizer\") || (document.kvConfig.visualizerOnly && window.location.hash === \"#/\")\r\n}\r\n\r\nexport const convertImgToBase64URL = (url, outputFormat = \"image/jpeg\") => {\r\n return new Promise((resolve) => {\r\n const img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.onerror = (e) => {\r\n console.log(\"couldn't load receipt logo image :(\", e)\r\n resolve(\"\");\r\n };\r\n img.onload = function () {\r\n let canvas = document.createElement('CANVAS');\r\n const ctx = canvas.getContext('2d');\r\n let dataURL = \"\";\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0, img.width, img.height);\r\n if (url && url.includes(\".png\")) {\r\n outputFormat = \"image/png\";\r\n }\r\n dataURL = canvas.toDataURL(outputFormat);\r\n canvas = null;\r\n resolve(dataURL);\r\n };\r\n img.src = url;\r\n });\r\n}\r\n","import takeRight from \"lodash/takeRight\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\nimport {\r\n browserIsSafari,\r\n getCartItemObject,\r\n getFeatureIsLocked,\r\n getRelatedFeaturesFromLayout,\r\n getShareUrl\r\n} from \"../../../misc/helpers\";\r\nimport {checkIfFeatureCanBeAddedToTheCart, getLookList} from \"./lookFunctions\";\r\nimport {shareImage} from \"../../bvComponent/core/assets\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {setAmazonImageUrl} from \"../../../actions/serverFunctions\";\r\nimport {getShareConfig, SHARE_BUTTONS} from \"./lookSideBar/lookSidebarModals/lookSideBarShareButtons\";\r\nimport store from \"../../../store\";\r\nimport {LOOK_ROOM_TYPES, LOOK_WALLS} from \"../core/constants\";\r\nimport {IS_LOOK_JOURNEY, IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\nimport {isFeatureEnabled} from \"../../../misc/displayLogic\";\r\nimport Cabinet from \"../../kvSceneComponent/core/parts/cabinet\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\nimport {getCurrentGroups, getFeatureGroupFromWizardGroup} from \"./lookMain/lookWizard/lookWizardFunctions\";\r\n\r\n/**\r\n * disable Feature common function\r\n * @param feature {featureInterface}\r\n * @param updateLookCartItem {function}\r\n */\r\nexport const disableFeature = async (feature, updateLookCartItem = null) => {\r\n if (!feature) {\r\n return\r\n }\r\n switch (feature.partId) {\r\n case \"hood\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n loaderEnable();\r\n await getAdditionalFeaturesOnScroll(cabinetParent.topCabinet)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"sink\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent\r\n && ((cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived)\r\n || (cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived))) {\r\n loaderEnable();\r\n if (cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n await getAdditionalFeaturesOnScroll(cabinetParent.bottomCabinet)\r\n }\r\n if (cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived) {\r\n await getAdditionalFeaturesOnScroll(cabinetParent.bottomHandle)\r\n }\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"center_island_cabinet\": {\r\n const floorParent = feature.getParent().getParent().layout.parts[\"Floor\"];\r\n if (floorParent && floorParent.floorBody && !floorParent.floorBody.allFeaturesReceived) {\r\n loaderEnable();\r\n await getAdditionalFeaturesOnScroll(floorParent.floorBody)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n case \"fridge\": {\r\n const cabinetParent = feature.getParent().getParent().layout.parts[\"Cabinet\"];\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n loaderEnable();\r\n await checkIfLookFeaturesReceived(cabinetParent.topCabinet)\r\n loaderDisable();\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n // console.log(\"removeFromCartArray\", removeFromCartArray);\r\n const featureGroup = feature.getParent();\r\n if (!featureGroup || !featureGroup.canBeDisabled) {\r\n return;\r\n }\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n featureGroup.disabled = true;\r\n featureGroup.disabledClick();\r\n if (updateLookCartItem && IS_LOOK_JOURNEY) {\r\n updateLookCartItem();\r\n }\r\n const layout = getCurrentLayout();\r\n layout.updateLocalStorage();\r\n}\r\n\r\n/**\r\n * enable Feature common function\r\n * @param feature {object}\r\n * @param addToCart {function}\r\n * @param qtActiveCategory {string}\r\n */\r\nexport const enableRelatedFeature = (feature, addToCart, qtActiveCategory) => {\r\n const featureIsLocked = getFeatureIsLocked(feature);\r\n if (featureIsLocked || feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n let relatedFeaturesToEnable = [];\r\n const layout = getCurrentLayout();\r\n switch (feature.partId) {\r\n case \"vanity_sink\":\r\n case \"vanity_faucet\": {\r\n const relatedPartId = feature.partId === \"vanity_sink\" ? \"vanity_faucet\" : \"vanity_sink\";\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(relatedPartId);\r\n if (relatedFeatureGroup) {\r\n relatedFeatureGroup.disabled = false;\r\n Object.keys(relatedFeatureGroup.layerPositions).forEach(position => {\r\n if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n relatedFeatureGroup.layerPositions[position] = null; // erase sibling positions\r\n return\r\n }\r\n const someFeature = relatedFeatureGroup.getMatchingPositionFeature(position);\r\n if (someFeature) {\r\n relatedFeatureGroup.layerPositions[position] = someFeature;\r\n }\r\n })\r\n // } else if (relatedFeatureGroup && !relatedFeatureGroup.layerPositions[feature.metaData.layerPosition]) {\r\n // const someFeature = relatedFeatureGroup.getMatchingPositionFeature(feature.metaData.layerPosition);\r\n // if (someFeature) {\r\n // relatedFeaturesToEnable.push(someFeature);\r\n // relatedFeatureGroup.disabled = false;\r\n // relatedFeatureGroup.layerPositions[feature.metaData.layerPosition] = someFeature;\r\n // }\r\n }\r\n break;\r\n }\r\n case \"toilet\": {\r\n [\"toilet_brush\", \"paper_holder\"].forEach(partId => {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n relatedFeatureGroup.disabled = false;\r\n relatedFeaturesToEnable.push(relatedFeatureGroup.activeFeature);\r\n }\r\n })\r\n break;\r\n }\r\n case \"bathtub_body\":\r\n case \"bathtub_fixture\": {\r\n const relatedPartId = feature.partId === \"bathtub_body\" ? \"bathtub_fixture\" : \"bathtub_body\";\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(relatedPartId);\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n relatedFeatureGroup.disabled = false;\r\n relatedFeaturesToEnable.push(relatedFeatureGroup.activeFeature);\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n if (relatedFeaturesToEnable.length && addToCart) {\r\n relatedFeaturesToEnable.forEach(relatedFeature => {\r\n if (checkIfFeatureCanBeAddedToTheCart(relatedFeature)) {\r\n addToCart([getCartItemObject(relatedFeature, 1, qtActiveCategory)]);\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * returns use or not lixil stock available quantity\r\n * @param fabricatorSettings {object}\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const shouldUseLixilAvailableQty = (fabricatorSettings, feature) => {\r\n if (!fabricatorSettings || !feature) {\r\n return false;\r\n }\r\n return (fabricatorSettings.enableASInventorySync && feature.dbFeature.isFromAsRoom)\r\n || (fabricatorSettings.enableGInventorySync && !feature.dbFeature.isFromAsRoom)\r\n}\r\n\r\n/**\r\n * returns lixil stock available quantity\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const isInStock = (feature) => {\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n return true\r\n }\r\n const {settings} = store.getState().fabricatorState;\r\n if (shouldUseLixilAvailableQty(settings, feature)) {\r\n const bundledFeatures = getBundledFeatures(feature);\r\n if (bundledFeatures.length > 1) { // fix for ROUGH VALVE BODIES assigned on Shower Fixtures\r\n return bundledFeatures.some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0)\r\n }\r\n return feature.dbFeature.lixilAvailableQty > 0\r\n }\r\n if (settings.useTrumbleApi && feature.quantityOptions && feature.quantityOptions.trumbleQty === \"0\") {\r\n return false\r\n }\r\n return true\r\n}\r\n/**\r\n * returns lixil stock available quantity for cart item\r\n * @param cartItem {cartItemInterface}\r\n * @returns {boolean}\r\n */\r\nexport const cartItemInStock = (cartItem) => {\r\n // return cartItem.relatedProductParent ? isInStock(cartItem.relatedProductParent) : isInStock(cartItem.cartFeature)\r\n return isInStock(cartItem.cartFeature)\r\n}\r\n\r\n/**\r\n * returns lixil sku first part 0328400.222 -> 0328400\r\n * @param sku {string}\r\n * @returns {string}\r\n */\r\nexport const getSkuWithoutDot = (sku) => {\r\n if (!sku) {\r\n return \"\"\r\n }\r\n return sku.split(\".\")[0]\r\n}\r\n\r\n/**\r\n * returns lixil stock available quantity for cart item\r\n * @param sku {string}\r\n * @returns {string}\r\n */\r\nexport const getProductIdFromSku = (sku) => {\r\n if (sku.includes(\".\")) {\r\n return getSkuWithoutDot(sku) // \"7075100.002\" => \"7075100\"\r\n }\r\n if (sku.includes(\"-\")) {\r\n return sku.split(\"-\")[0] // \"A8001L-RHO.020\" => \"A8001L-RHO\"\r\n }\r\n return sku.substr(0, 5) + \"_\" + sku.substr(sku.length - 1); // \"26635GN0\" => \"26635_0\"\r\n}\r\n\r\n/**\r\n * returns a list needed for integration\r\n * @param cartItems {array}\r\n * @param forCart {boolean}\r\n * @returns {array}\r\n */\r\nexport const getPostCartItemsList = (cartItems, forCart = false) => {\r\n return cartItems\r\n .filter(cartItem => {\r\n let match = !(cartItem.cartFeature.dbFeature.sharedFeatureName || \"\").includes(\"undle sku\")\r\n && (!featureIsBundle(cartItem.cartFeature, cartItems) || (forCart && cartItemInStock(cartItem)));\r\n if (match && forCart) {\r\n match = cartItem.quantity > 0 && cartItemInStock(cartItem) && !cartItem.isRemoved;\r\n }\r\n return match\r\n })\r\n .map(cartItem => {\r\n const sku = cartItem.cartFeature.dbFeature.sku || \"\";\r\n const lixilProductId = cartItem.cartFeature.dbFeature.lixilProductId || getProductIdFromSku(sku);\r\n return {\r\n \"VariantId\": sku, // \"26635GN0\"\r\n \"ProductId\": lixilProductId, // \"26635_0\"\r\n \"Quantity\": \"\" + cartItem.quantity // \"1\"\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param cartItems {array}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsBundle = (feature, cartItems) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const relatedFeatures = getBundledFeatures(feature);\r\n return Array.isArray(relatedFeatures) && !!relatedFeatures.length && cartItems.some(cItem => {\r\n return cItem.relatedProductParent && cItem.relatedProductParent.dbFeature.id === feature.dbFeature.id;\r\n })\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getBundledFeatures = (feature) => {\r\n if (Array.isArray(feature.dbFeature.bundledFeatures) && feature.dbFeature.bundledFeatures.length) {\r\n // console.log(\"relatedFeatures\", relatedFeatures);\r\n let {relatedFeaturesFound} = getRelatedFeaturesFromLayout(feature.dbFeature.bundledFeatures, feature);\r\n // console.log(\"relatedFeaturesFound\", relatedFeaturesFound);\r\n return relatedFeaturesFound\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFeatureContent = (feature) => {\r\n if (!feature) {\r\n return []\r\n }\r\n const availableFeatureContent = []; // [\"description\", \"features\", \"reviews\", \"faq\"]\r\n if (feature.dbFeature.description) {\r\n availableFeatureContent.push(\"description\");\r\n }\r\n if (feature.dbFeature.subDescription) {\r\n availableFeatureContent.push(\"features\");\r\n }\r\n return availableFeatureContent\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param activePreset {number}\r\n * @param bvPresets {array}\r\n * @returns lookId {number}\r\n */\r\nexport const getLookId = (activePreset, bvPresets) => {\r\n const room = bvPresets.find(preset => preset.id === activePreset);\r\n return room ? room.lookId : 0\r\n}\r\n\r\n/**\r\n * returns URL start for look and product journeys\r\n * @param withSlash {boolean}\r\n * @returns string {string}\r\n */\r\nexport const getLookIdUrl = (withSlash = true) => {\r\n const {activePreset, bvPresets} = store.getState().bathroomVisualizerState;\r\n const lookId = getLookId(activePreset, bvPresets);\r\n return withSlash ? `/look-${lookId}/` : `/look-${lookId}`\r\n}\r\n\r\n/**\r\n * returns feature url name\r\n * @param feature {featureInterface}\r\n * @param withCategory {boolean}\r\n * @returns string {string}\r\n */\r\nexport const getFeatureUrl = (feature, withCategory = false) => {\r\n if (!feature || !feature.dbFeature) {\r\n return \"\"\r\n }\r\n\r\n let finalUrl = getLookIdUrl();\r\n const urlName = feature.dbFeature.sku || feature.dbFeature.sharedFeatureName; // check sku first! old support\r\n\r\n if (withCategory) {\r\n const urlPartId = feature.partId.replace(/_/gi, \"-\");\r\n return finalUrl + `${urlPartId}/${urlName}`\r\n } else {\r\n return finalUrl + urlName\r\n }\r\n}\r\n\r\n/**\r\n * returns category url\r\n * @param partId {string}\r\n * @returns string {string}\r\n */\r\nexport const getCategoryOnlyUrl = (partId = \"\") => {\r\n let finalUrl = getLookIdUrl();\r\n return finalUrl + partId.replace(/_/gi, \"-\")\r\n}\r\n\r\n/**\r\n * returns bundled features\r\n * @param updateCanvasCount {function}\r\n */\r\nexport const revertFeatureBeforeChange = (updateCanvasCount) => {\r\n if (IS_PRODUCT_JOURNEY) {\r\n return\r\n }\r\n const featureGroups = getLookList();\r\n if (featureGroups) {\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.featureGroup && parentObject.featureGroup.featureBeforeChange\r\n && checkIfFeatureCanBeAddedToTheCart(parentObject.featureGroup.featureBeforeChange)) {\r\n if (parentObject.featureGroup.layerPositions) {\r\n Object.keys(parentObject.featureGroup.layerPositions).forEach(position => {\r\n if (parentObject.featureGroup.layerPositions[position]) {\r\n const sameFeature = parentObject.featureGroup.getMatchingPositionFeature(position, parentObject.featureGroup.featureBeforeChange);\r\n if (sameFeature) {\r\n parentObject.featureGroup.layerPositions[position] = sameFeature;\r\n }\r\n }\r\n })\r\n }\r\n if (!parentObject.featureGroup.disabled) {\r\n parentObject.featureGroup.activeFeature = parentObject.featureGroup.featureBeforeChange;\r\n }\r\n parentObject.featureGroup.featureBeforeChange = null;\r\n updateCanvasCount();\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * returns filtered features by metadata field\r\n * @param navFeatures {object}\r\n * @param matchFeature {object}\r\n * @param metadataField {string}\r\n */\r\nexport const filterFeaturesByMetadata = (navFeatures, matchFeature, metadataField) => {\r\n return navFeatures.filter((navFeature) => {\r\n return navFeature.part.metaData[metadataField] && navFeature.part.metaData[metadataField].some((mType) => {\r\n return matchFeature.metaData[metadataField] &&\r\n matchFeature.metaData[metadataField].includes(mType)\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * returns default camera preset\r\n * @param bvPresets {array}\r\n * @param lookId {string|number}\r\n * @returns lookId {number}\r\n */\r\nexport const getDefaultPresetByLook = (bvPresets, lookId) => {\r\n const numLookId = +lookId;\r\n const allMatchedPresets = bvPresets.filter((preset) => preset.lookId === numLookId);\r\n if (!allMatchedPresets.length) {\r\n return null\r\n }\r\n switch (numLookId) {\r\n case 5:\r\n return allMatchedPresets.find(preset => preset.scene === \"1\" && (preset.id === 22)) || allMatchedPresets[0];\r\n default:\r\n return allMatchedPresets.find(preset => preset.scene === \"1\")\r\n }\r\n}\r\n\r\n/**\r\n * open share link\r\n * @param buttonKey {string}\r\n * @param afterSaveUrl {string}\r\n * @param amazonImageUrl {string}\r\n */\r\nconst createShareUrl = (buttonKey, afterSaveUrl, amazonImageUrl) => {\r\n const shareUrl = afterSaveUrl; // || propsShareUrl;\r\n const shareImageUrl = amazonImageUrl || shareImage[document.kvConfig.visualizerType];\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook: {\r\n const metaTag = document.querySelector('meta[property=\"og:image\"]');\r\n if (metaTag) {\r\n metaTag.setAttribute(\"content\", shareImageUrl);\r\n }\r\n var domain = takeRight(window.location.hostname.split('.'), 2);\r\n if(domain[0] == \"americanstandard-us\") {\r\n domain[0] = \"americanstandard.\" + domain[0];\r\n } else if(domain[0] == \"grohe\") {\r\n domain[0] = \"grohe.\" + domain[0];\r\n }\r\n const fbUrl = \"https://facebook.com/sharer/sharer.php?u=\";\r\n const qfUrl = window.location.protocol + \"//\" + domain.join('.') + \"/url?u=\";\r\n const splittedHost = window.location.host.split(\".\") // ['grohe', 'qkandb', 'net']\r\n const topLevelDomain = \".\" + splittedHost[splittedHost.length - 1]; // \".com\" or \".net\"\r\n\r\n const shareUrlSplitted = shareUrl.split(topLevelDomain)\r\n return fbUrl + qfUrl + shareUrlSplitted[0] + topLevelDomain + encodeURIComponent(shareUrlSplitted[1])\r\n }\r\n case SHARE_BUTTONS.pinterest: {\r\n const imageUrl = encodeURIComponent(shareImageUrl);\r\n return `//pinterest.com/pin/create/button/?url=${encodeURIComponent(shareUrl)}&media=${imageUrl}`\r\n }\r\n case SHARE_BUTTONS.twitter: {\r\n return `//twitter.com/share?url=${encodeURIComponent(shareUrl)}&text=Click Here to Design your Dream Bathroom!`\r\n }\r\n default:\r\n return \"\"\r\n }\r\n}\r\n\r\n/**\r\n * open share link\r\n * @param buttonKey {string}\r\n */\r\nconst getShareWindowReference = (buttonKey) => {\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook: {\r\n // target: facebook-share-dialog\r\n return window.open(\"\", '_blank', getShareConfig({width: 630, height: 420}))\r\n }\r\n case SHARE_BUTTONS.pinterest: {\r\n return window.open(\"\", '_blank', getShareConfig({width: 880, height: 554}))\r\n }\r\n case SHARE_BUTTONS.twitter: {\r\n return window.open(\"\", '_blank', getShareConfig({width: 550, height: 470}))\r\n }\r\n default:\r\n return window.open()\r\n }\r\n}\r\n\r\n/**\r\n * save Quote and open share link\r\n * @param buttonKey {string}\r\n * @param propsShareUrl {string}\r\n * @param saveNeeded {boolean}\r\n * @param imageUrl {string}\r\n */\r\nexport const saveQuoteAndShare = async (buttonKey, propsShareUrl, saveNeeded = true, imageUrl = \"\") => {\r\n if (!propsShareUrl) {\r\n propsShareUrl = store.getState().serverState.shareUrl;\r\n }\r\n let windowReference = null;\r\n const isSafari = browserIsSafari();\r\n if (isSafari) {\r\n windowReference = getShareWindowReference(buttonKey);\r\n }\r\n let responseData = null;\r\n if (saveNeeded) {\r\n loaderEnable();\r\n responseData = await saveQuote({\r\n submit: true,\r\n showReceipt: false\r\n });\r\n if (!responseData) {\r\n return false\r\n }\r\n document.kvConfig.jobId = responseData.jobId;\r\n if (responseData.imageUrl) {\r\n imageUrl = responseData.imageUrl;\r\n store.dispatch(setAmazonImageUrl(responseData.imageUrl));\r\n }\r\n loaderDisable();\r\n }\r\n\r\n if (!isSafari) {\r\n windowReference = getShareWindowReference(buttonKey);\r\n }\r\n\r\n windowReference.location = createShareUrl(buttonKey, getShareUrl(document.kvConfig.jobId) || propsShareUrl, imageUrl);\r\n\r\n}\r\n\r\n/**\r\n * returns cart items array\r\n * @param neededFeature {featureInterface}\r\n * @param quantity {number}\r\n * @param qtActiveCategory {string}\r\n * @param addedBy {string}\r\n * @returns {array}\r\n */\r\nexport const getCartItemsArrayFromFeature = (neededFeature, quantity, qtActiveCategory, addedBy = CART_ITEM_ADDED_BY.user) => {\r\n const firstCartItem = getCartItemObject(neededFeature, quantity, qtActiveCategory);\r\n firstCartItem.addedBy = addedBy;\r\n let itemsToAdd = [firstCartItem];\r\n const relatedFeatures = getBundledFeatures(neededFeature);\r\n if (Array.isArray(relatedFeatures) && relatedFeatures.length) {\r\n relatedFeatures.forEach((relatedFeature) => {\r\n const cartItem = getCartItemObject(relatedFeature, quantity, qtActiveCategory);\r\n cartItem.relatedProductParent = neededFeature;\r\n cartItem.addedBy = addedBy;\r\n itemsToAdd.push(cartItem);\r\n })\r\n }\r\n return itemsToAdd\r\n}\r\n\r\n\r\n/**\r\n * Checks available meta options for feature\r\n * @param lookActiveFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @param metaName {string}\r\n * @returns {array} array of objects\r\n */\r\nexport const getSameFeatureWithAnotherMeta = (lookActiveFeature, filterGroups, metaName = \"MatchingFeature\") => {\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const parent = lookActiveFeature.getParent();\r\n const activeFeatureValue = Array.isArray(lookActiveFeature.metaData[metaName]) ? lookActiveFeature.metaData[metaName][0] : null;\r\n\r\n let optionFeatures = activeFeatureValue ? [{\r\n feature: lookActiveFeature,\r\n metaValue: activeFeatureValue\r\n }] : [];\r\n\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, true);\r\n const activeFeatureCollectionName = lookActiveFeature.getCollectionName(filterGroups);\r\n const customFullDisplayName = lookActiveFeature.getCustomFullDisplayName();\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part;\r\n if ((checkFeature.dbFeature.sharedFeatureName === \"MatchingFeature\") && checkFeature.getCustomFullDisplayName() !== customFullDisplayName) {\r\n continue\r\n }\r\n if ((checkFeature.dbFeature.sharedFeatureName !== \"MatchingFeature\") && getSkusDifferences(checkFeature.dbFeature.sharedFeatureName, lookActiveFeature.dbFeature.sharedFeatureName) > 1) {\r\n continue\r\n }\r\n // // console.log(\"checkFeature\", checkFeature);\r\n const metaValue = Array.isArray(checkFeature.metaData[metaName]) ? checkFeature.metaData[metaName][0] : null;\r\n if (!metaValue) {\r\n continue\r\n }\r\n if (allowCheckForCollection(checkFeature) && (checkFeature.getCollectionName(filterGroups) !== activeFeatureCollectionName)) {\r\n continue\r\n }\r\n if ((metaName === \"MatchingFeature\") && lookActiveFeature.metaData[\"MatchingFeature\"] && !isEqual(lookActiveFeature.metaData[\"MatchingFeature\"], checkFeature.metaData[\"MatchingFeature\"])) {\r\n continue\r\n }\r\n if (optionFeatures.every(optFeature => optFeature.metaValue !== metaValue)) {\r\n optionFeatures.push({\r\n feature: checkFeature,\r\n metaValue\r\n })\r\n }\r\n }\r\n\r\n return optionFeatures\r\n\r\n};\r\n\r\nexport const getFeatureSectionIsHidden = (lookActiveFeature) => {\r\n return !lookActiveFeature || (LOOK_WALLS.includes(lookActiveFeature.partId) && !(\r\n lookActiveFeature.partId === \"front_wall\" && (document.kvConfig.visualizerType === \"Fireplace\")\r\n ))\r\n // const layout = getCurrentLayout();\r\n // return lookActiveFeature && (\r\n // (!layout.partIdExistInQtCategory(lookActiveFeature.partId, true) || LOOK_WALLS.includes(lookActiveFeature.partId)));\r\n}\r\n\r\n/**\r\n * returns parent feature group\r\n * @param lookFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @returns {object} featureGroup\r\n */\r\nexport const getFeatureParent = (lookFeature, lookActiveCategory = \"\") => {\r\n if (lookFeature && lookFeature.getParent) {\r\n return lookFeature.getParent()\r\n }\r\n const layout = getCurrentLayout();\r\n return layout.getFeatureGroupByPartId(lookActiveCategory);\r\n}\r\n\r\n/**\r\n * returns feature property name\r\n * @param lookActiveFeature {featureInterface}\r\n * @returns {string}\r\n */\r\nexport const getPropertyToMatchActiveFeature = (lookActiveFeature) => {\r\n if (lookActiveFeature.dbFeature.sharedFeatureName) {\r\n // keep old logic, some features are missing the sku, so we have to have the code below\r\n return \"sharedFeatureName\"\r\n }\r\n // original check for other tools\r\n return \"sku\"\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param lookFeature {featureInterface}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @param featureGroup {object}\r\n * @returns {boolean}\r\n */\r\nexport const getFeatureIsActive = (lookFeature, lookActiveFeature, lookActiveCategory = \"\", featureGroup) => {\r\n if (!lookFeature) {\r\n return false\r\n }\r\n let checkFeature = lookActiveFeature;\r\n if (!checkFeature && lookActiveCategory) {\r\n const parentFeatureGroup = featureGroup || getFeatureParent(lookFeature, lookActiveCategory);\r\n if (parentFeatureGroup) {\r\n checkFeature = parentFeatureGroup.activeNotInVisualizerFeature || parentFeatureGroup.activeFeature;\r\n }\r\n }\r\n return checkFeature && ((lookFeature.dbFeature.id === checkFeature.dbFeature.id)\r\n || (lookFeature.getSplittedFeatureName() === checkFeature.getSplittedFeatureName())\r\n )\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param parentObject {object}\r\n * @param layoutType {number|string}\r\n * @param scene {number|string}\r\n * @param [position] {string}\r\n * @returns {boolean}\r\n */\r\nexport const removeLookPointFor = (parentObject, layoutType, scene, position) => {\r\n const layout = getCurrentLayout();\r\n if ((layout.type === layoutType) && (layout.scene === scene)) {\r\n if (position) {\r\n return parentObject.layerPosition !== position\r\n }\r\n return false\r\n }\r\n return true\r\n}\r\n\r\n/**\r\n * Checks if two strings are almost the same (to compare SKU\\s, for example 0328400.222 and 0328800.222)\r\n * @param sku1 {string}\r\n * @param sku2 {string}\r\n * @returns {number}\r\n */\r\nexport const getSkusDifferences = (sku1, sku2) => {\r\n if (sku1 === sku2) {\r\n return 0\r\n }\r\n let differences = 0;\r\n sku1.split(\"\").forEach((letter, letterIndex) => {\r\n if (!sku2[letterIndex] || letter !== sku2[letterIndex]) {\r\n differences++;\r\n }\r\n })\r\n return differences\r\n}\r\n\r\n/**\r\n * filters removed cartItems\r\n * @param cartItems {[cartItemInterface]}\r\n * @param withoutNotInStock {boolean}\r\n * @param withoutZeroQuantity {boolean}\r\n * @param parentsOnly {boolean}\r\n * @returns {[cartItemInterface]}\r\n */\r\nexport const filterCartItems = (cartItems, withoutNotInStock = false, withoutZeroQuantity = false, parentsOnly = false) => {\r\n return cartItems.filter(cItem => {\r\n if (withoutZeroQuantity && cItem.quantity < 1) {\r\n return false\r\n }\r\n if (withoutNotInStock) {\r\n // if (cItem.relatedProductParent && !isInStock(cItem.relatedProductParent)) {\r\n // return false\r\n // }\r\n if (!isInStock(cItem.cartFeature) || getBundledFeatures(cItem.cartFeature).length) {\r\n return false\r\n }\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n return cItem.addedBy === CART_ITEM_ADDED_BY.user && !cItem.isRemoved\r\n }\r\n if (parentsOnly) {\r\n return !cItem.relatedProductParent\r\n }\r\n return !cItem.isRemoved\r\n })\r\n}\r\n\r\n/**\r\n * sorts CartItems for List Page\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {[cartItemInterface]}\r\n */\r\nexport const sortCartItemsForListPage = (cartItems) => {\r\n return cartItems\r\n .filter(cItem => !cItem.relatedProductParent)\r\n .sort((a, b) => featureIsBundle(a.cartFeature, cartItems) - featureIsBundle(b.cartFeature, cartItems))\r\n .sort((a, b) => (b.addedBy === CART_ITEM_ADDED_BY.user) - (a.addedBy === CART_ITEM_ADDED_BY.user) || cartItemInStock(b) - cartItemInStock(a))\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param lookOpened {boolean}\r\n * @param lookActiveCategory {string}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookCompatabilityAlert {object}\r\n * @returns {boolean}\r\n */\r\nexport const hideFeatureSection = (lookOpened, lookActiveCategory, lookActiveFeature, lookCompatabilityAlert) => {\r\n const layout = getCurrentLayout();\r\n let showFeaturesOnly = !lookCompatabilityAlert.visible && lookOpened && lookActiveCategory && !layout.partIdExistInQtCategory(lookActiveCategory, true);\r\n if (!showFeaturesOnly && lookActiveFeature && !lookCompatabilityAlert.visible) {\r\n showFeaturesOnly = !isFeatureEnabled(lookActiveFeature, \"quotingTool\");\r\n }\r\n return showFeaturesOnly\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param partId {string}\r\n * @param layout {object}\r\n * @param fabricatorState {object}\r\n * @returns {boolean}\r\n */\r\nexport const hardCodelyRemovedClicking = (partId, layout = getCurrentLayout(), fabricatorState = null) => {\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n return false\r\n }\r\n if (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) {\r\n if (fabricatorState && fabricatorState.isCoburn && partId === \"shower_door\" && layout.parts.Shower) {\r\n const showerDoorFeatureGroup = layout.parts.Shower.showerDoor;\r\n if (showerDoorFeatureGroup && showerDoorFeatureGroup.activeFeature\r\n && (showerDoorFeatureGroup.activeFeature.dbFeature.sharedFeatureName === \"Hinge Door.002\"\r\n || showerDoorFeatureGroup.activeFeature.dbFeature.sharedFeatureName === \"Barn Door.002\")) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n return partId === \"bathtub_body\" || partId === \"vanity_cabinet\"\r\n}\r\n\r\nexport const getWizardWithFirstStepCurrentPartId = (wizardList, partId) => {\r\n return wizardList.find(wizardItem => {\r\n if (!wizardItem.openWizardOnClick) {\r\n return false\r\n }\r\n const firstStepGroups = getCurrentGroups(wizardItem, 0, {});\r\n if (firstStepGroups && firstStepGroups.length === 1 && firstStepGroups[0].nodeType === \"group\") {\r\n const featureGroup = getFeatureGroupFromWizardGroup(firstStepGroups[0]);\r\n if (featureGroup && featureGroup.partId === partId) {\r\n return true\r\n }\r\n }\r\n return false\r\n });\r\n}\r\n","export const LayoutType = {\r\n Small: 0,\r\n SmallWithPopout: 1,\r\n SmallWithPeninsula: 2,\r\n SmallWithIsland: 3,\r\n SmallWithPopoutWithPeninsula: 4,\r\n SmallWithPopoutWithIsland: 5,\r\n SmallWithPeninsulaWithIsland: 6,\r\n SmallWithPopoutWithPeninsulaWithIsland: 7,\r\n LShape: 8,\r\n LShapeWithPeninsula: 9,\r\n LShapeWithIsland: 10,\r\n LShapeWithPeninsulaWithIsland: 11,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Small: \"S\",\r\n SmallWithPopout: \"SP\",\r\n SmallWithPeninsula: \"SN\",\r\n SmallWithIsland: \"SI\",\r\n SmallWithPopoutWithPeninsula: \"SPN\",\r\n SmallWithPopoutWithIsland: \"SPI\",\r\n SmallWithPeninsulaWithIsland: \"SNI\",\r\n SmallWithPopoutWithPeninsulaWithIsland: \"SPNI\",\r\n LShape: \"L\",\r\n LShapeWithPeninsula: \"LN\",\r\n LShapeWithIsland: \"LI\",\r\n LShapeWithPeninsulaWithIsland: \"LNI\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\"S\",\"SP\",\"SN\",\"SI\",\"SPN\",\"SPI\",\"SNI\",\"SPNI\",\"L\",\"LN\",\"LI\",\"LNI\"];\r\nexport const LayoutAbbreviationsToRemove = [\"LSP\",\"LNI\",\"LI\",\"LN\",\"L\",\"SPNI\",\"SNI\",\"SPI\",\"SPN\",\"SI\",\"SN\",\"SP\",\"S\"];\r\n\r\nexport const PLACEMENTS = {\r\n Island: \"Island\",\r\n Countertop: \"Countertop\"\r\n};\r\n\r\nexport const MODULE_CONTEXT_MENU_TYPES = {\r\n Filters: \"Filters\",\r\n SliceButtons: \"SliceButtons\",\r\n};\r\nexport const MODULE_CONTEXT_MENU_DIRECTIONS = {\r\n Vertical: \"Vertical\",\r\n Horizontal: \"Horizontal\"\r\n};\r\n\r\nexport const CABINET_WIZARD_BUTTONS = [{\r\n text: \"All products\",\r\n buttonId: \"all_products\",\r\n},{\r\n text: \"Door style\",\r\n filtersGroupName: \"DoorStyle\",\r\n buttonId: \"door_style\",\r\n},{\r\n text: \"Wood type\",\r\n filtersGroupName: \"WoodType\",\r\n buttonId: \"wood_type\",\r\n},{\r\n text: \"Stain / color\",\r\n filtersGroupName: \"StainColor\",\r\n buttonId: \"stain_color\",\r\n},{\r\n text: \"Inlay type\",\r\n filtersGroupName: \"Inlay Type\",\r\n buttonId: \"inlay_type\",\r\n}];\r\n\r\nexport const COUNTERTOP_WIZARD_BUTTONS = [{\r\n text: \"Stone\",\r\n pluralText: \"Stones\",\r\n buttonId: \"all_products\",\r\n},{\r\n text: \"Color\",\r\n pluralText: \"Color\",\r\n filtersGroupName: \"Stone Color\",\r\n buttonId: \"color\",\r\n},{\r\n text: \"Material\",\r\n pluralText: \"Materials\",\r\n filtersGroupName: \"Stone Material\",\r\n buttonId: \"materials\",\r\n},{\r\n text: \"Edge\",\r\n pluralText: \"Edges\",\r\n filtersGroupName: \"Edge Profile\",\r\n buttonId: \"edges\",\r\n},{\r\n text: \"Backsplash\",\r\n pluralText: \"Backsplash\",\r\n buttonId: \"backsplash\",\r\n}];\r\n\r\nexport const wizardAllButton = {\r\n id: \"All\",\r\n value: \"All\",\r\n displayText: \"All\",\r\n parent_id: null,\r\n icon: \"\",\r\n lockedInWizard: false,\r\n filterGroup_id: 0,\r\n additionalImages: []\r\n};\r\n\r\nexport const BACKSPLASH_TYPES = [\"4in\", \"6in\", \"18in\"];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const COUNTERTOP_GROUP = [\"countertop\", \"center_island_countertop\", \"backsplash\"];\r\nexport const CABINET_GROUP = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\", \"fridge_enclosure\", \"tall_cabinet\"];\r\nexport const EDGE_GROUP = [\"edge\", \"edge_profile\", \"center_island_edge\"];\r\n","import $ from \"jquery\";\r\nimport 'hammerjs';\r\nimport sqftConfig from \"./sqftConfig\";\r\nimport sqftCursorManager from \"./sqftCursorManager\";\r\n\r\nconst sqftEventManager = {\r\n renderEvents: [],\r\n renderEventsSlab: [],\r\n priorities: {\r\n OVERALL: -100,\r\n SLAB_RIGHT_PART_CONTENT: -40,\r\n SLAB_RIGHT_PART_WORKSPACE: -30,\r\n BOX_POINT: -5,\r\n BOX: -1,\r\n OVERLAY: 0,\r\n IMAGE_LINE: 1,\r\n IMAGE: 3,\r\n POINT: 5,\r\n SEGMENT_MEASUREMENTS: 7,\r\n SEGMENT: 10,\r\n SHAPE_LABEL: 12,\r\n SHAPE_UPPER: 14.5,\r\n SHAPE: 15,\r\n SHAPE_SLAB_PLACEHOLDER: 15.5,\r\n WALL: 18,\r\n SLAB_IMAGE: 20,\r\n SLAB_LEFT_PART: 25,\r\n WORKSPACE: 100,\r\n },\r\n events: {\r\n MOUSE_MOVE: \"mousemove\",\r\n MOUSE_DOWN: \"mousedown\",\r\n MOUSE_UP: \"mouseup\",\r\n MOUSE_WHEEL: \"mousewheel\",\r\n WHEEL: \"wheel\",\r\n ON_MOUSE_WHEEL: \"onmousewheel\",\r\n RESIZE: \"resize\",\r\n TOUCH_START: \"touchstart\",\r\n TOUCH_END: \"touchend\",\r\n TOUCH_MOVE: \"touchmove\",\r\n TOUCH_CANCEL: \"touchcancel\",\r\n MOUSE_LEAVE: \"mouseleave\",\r\n CLICK: \"click\",\r\n DBLCLICK: \"dblclick\",\r\n CONTEXTMENU: \"contextmenu\",\r\n KEYDOWN: \"keydown\",\r\n RENDER: \"render\",\r\n DRAG_OVER: \"dragover\",\r\n DROP: \"drop\"\r\n },\r\n keyCode: {\r\n ENTER: \"Enter\",\r\n NumpadEnter: \"NumpadEnter\"\r\n },\r\n self: this,\r\n activeEvents: [],\r\n canvas: null,\r\n $canvas: null,\r\n canvasOffset: null,\r\n ctx: null,\r\n state: {\r\n processing: false\r\n },\r\n eventQueue: [],\r\n G_events: { //events to tie into the Quoting Tool's Global Events for Idle timeout\r\n userIdleStartTimer: 'userIdleStartTimer',\r\n userIdleWarning: 'userIdleWarning',\r\n userIdleTimeOut: 'userIdleTimeOut',\r\n userIdleStopTimer: 'userIdleStopTimer',\r\n userIdleGoHome: 'userIdleGoHome',\r\n userIdleGoHomeCountdown: 'userIdleGoHomeCountdown'\r\n },\r\n hammerMC: null,\r\n LastKnownMousePos: null,\r\n //currentCursorOwner: null,\r\n //currentCursor: null,\r\n //noCursorStealing: false,\r\n zoomLock: null,\r\n resizeHandler: null,\r\n keydownHandler: null,\r\n\r\n getCtx: function() {\r\n return this.ctx\r\n },\r\n eventSort: function (a, b) {\r\n if (a.priority < b.priority)\r\n return -1;\r\n if (a.priority > b.priority)\r\n return 1;\r\n return 0;\r\n },\r\n getMousePos: function (e) {\r\n if (!e) {\r\n return this.LastKnownMousePos;\r\n }\r\n this.LastKnownMousePos = {\r\n x: e.pageX - this.canvasOffset.left,\r\n y: e.pageY - this.canvasOffset.top\r\n };\r\n return this.LastKnownMousePos;\r\n },\r\n getTouchPos: function (e) {\r\n var touch = e.changedTouches[0];\r\n if (!touch) {\r\n return null;\r\n }\r\n this.LastKnownMousePos = {\r\n x: touch.pageX - this.canvasOffset.left,\r\n y: touch.pageY - this.canvasOffset.top\r\n };\r\n return this.LastKnownMousePos;\r\n },\r\n setCanvas: function(value) {\r\n this.canvas = value;\r\n this.$canvas = $(value);\r\n this.ctx = this.canvas.getContext('2d');\r\n sqftCursorManager.init(this.canvas);\r\n },\r\n onMouseMove: function(mousepos, e) {\r\n let mousemove = this.activeEvents[this.events.MOUSE_MOVE] || [];\r\n e.terminate = false;\r\n for (var i = 0; i < mousemove.length; i++) {\r\n if (mousemove[i].event.call(mousemove[i].sender, mousepos, e)) {\r\n e.terminate = true;\r\n }\r\n }\r\n },\r\n onMouseUp: function(mousepos, e) {\r\n var mouseup = this.activeEvents[this.events.MOUSE_UP] || [];\r\n for (var i = 0; i < mouseup.length; i++) {\r\n if (mouseup[i].event.call(mouseup[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n },\r\n onMouseDown: function(mousepos, e, callback) {\r\n var mousedown = this.activeEvents[this.events.MOUSE_DOWN] || [];\r\n for (var i = 0; i < mousedown.length; i++) {\r\n if (mousedown[i].event.call(mousedown[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onMouseLeave: function(mousepos, e, callback) {\r\n var mouseleave = this.activeEvents[this.events.MOUSE_LEAVE] || [];\r\n for (var i = 0; i < mouseleave.length; i++) {\r\n if (mouseleave[i].event.call(mouseleave[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onKeyDown: function (code, e, callback) {\r\n let mouseleave = this.activeEvents[this.events.KEYDOWN] || [];\r\n for (let i = 0; i < mouseleave.length; i++) {\r\n if (mouseleave[i].event.call(mouseleave[i].sender, code, e)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(code, e);\r\n }\r\n },\r\n onDblClick: function(mousepos, e, callback) {\r\n let mousedown = this.activeEvents[this.events.DBLCLICK] || [];\r\n for (let i = 0; i < mousedown.length; i++) {\r\n if (mousedown[i].event.call(mousedown[i].sender, mousepos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousepos, e);\r\n }\r\n },\r\n onWheel: function(mousePos, e, callback) {\r\n let wheel = this.activeEvents[this.events.WHEEL] || [];\r\n for (let i = 0; i < wheel.length; i++) {\r\n if (wheel[i].event.call(wheel[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onResize: function(e) {\r\n let resize = this.activeEvents[this.events.RESIZE] || [];\r\n for (let i = 0; i < resize.length; i++) {\r\n if (resize[i].event.call(resize[i].sender, e)) {\r\n break;\r\n }\r\n }\r\n this.updateOffset(e);\r\n },\r\n onContextmenu: function(mousePos, e, callback) {\r\n let contextmenu = this.activeEvents[this.events.CONTEXTMENU] || [];\r\n for (let i = 0; i < contextmenu.length; i++) {\r\n if (contextmenu[i].event.call(contextmenu[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onDrop: function(mousePos, e, callback) {\r\n let dragEvents = this.activeEvents[this.events.DROP] || [];\r\n for (let i = 0; i < dragEvents.length; i++) {\r\n if (dragEvents[i].event.call(dragEvents[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onDragOver: function(mousePos, e, callback) {\r\n let dragOverEvents = this.activeEvents[this.events.DRAG_OVER] || [];\r\n for (let i = 0; i < dragOverEvents.length; i++) {\r\n if (dragOverEvents[i].event.call(dragOverEvents[i].sender, mousePos, e)) {\r\n break;\r\n }\r\n }\r\n if (callback) {\r\n callback(mousePos, e);\r\n }\r\n },\r\n onTouchCancel: function() {\r\n onMouseUp(this.LastKnownMousePos, {});\r\n this.LastKnownMousePos = {x: 0, y: 0};\r\n onMouseMove(this.LastKnownMousePos, {});\r\n },\r\n onRender: function() {\r\n var render = this.activeEvents[this.events.RENDER] || [];\r\n var triangles = [];\r\n for (var i = render.length - 1; i >= 0; i-- ) {\r\n if (render[i] === undefined) {\r\n continue\r\n }\r\n var result = render[i].event.call(render[i].sender, this.ctx);\r\n if (render[i] !== undefined && render[i].priority === this.priorities.SHAPE) {\r\n triangles.push(result);\r\n }\r\n }\r\n return triangles;\r\n },\r\n updateOffset: function() {\r\n this.canvasOffset = $(this.canvas).offset();\r\n },\r\n trigger: function(event, e) {\r\n let response = null;\r\n switch(event) {\r\n case this.events.MOUSE_MOVE:\r\n case this.events.TOUCH_MOVE:\r\n response = this.onMouseMove(this.getMousePos(e), e);\r\n break;\r\n case this.events.MOUSE_WHEEL:\r\n case this.events.WHEEL:\r\n case this.events.ON_MOUSE_WHEEL:\r\n console.log(\"WHEEL\");\r\n break;\r\n case this.events.MOUSE_UP:\r\n case this.events.TOUCH_END:\r\n response = this.onMouseUp(this.getMousePos(e), e);\r\n break;\r\n case this.events.MOUSE_DOWN:\r\n case this.events.TOUCH_START:\r\n response = this.onMouseDown(this.getMousePos(e), e);\r\n break;\r\n case this.events.TOUCH_CANCEL:\r\n response = this.onTouchCancel();\r\n break;\r\n case this.events.RESIZE:\r\n response = this.onResize(e);\r\n break;\r\n case this.MOUSE_LEAVE:\r\n response = this.onMouseLeave(e);\r\n break;\r\n case this.CONTEXTMENU:\r\n response = this.onContextmenu(this.getMousePos(e), e);\r\n break;\r\n case this.DBLCLICK:\r\n response = this.onDblClick(this.getMousePos(e), e);\r\n break;\r\n case this.events.RENDER:\r\n response = this.onRender();\r\n break;\r\n }\r\n return response;\r\n },\r\n pinchToZoom: function(event) {\r\n let stepSize = 0.04;\r\n let self = this;\r\n if (!this.zoomLock) {\r\n this.zoomLock = window.setTimeout(function() {\r\n self.zoomLock = null;\r\n }, 10);\r\n let scale = sqftConfig.scale,\r\n mod = 0;\r\n if (event.additionalEvent === \"pinchin\") {\r\n mod = -1;\r\n } else if (event.additionalEvent === \"pinchout\") {\r\n mod = 1;\r\n }\r\n if (mod !== 0) {\r\n scale += (mod * stepSize);\r\n if (scale < 1) {\r\n scale = 1;\r\n } else if (scale > 10) {\r\n scale = 10;\r\n }\r\n sqftConfig.scale = scale;\r\n }\r\n }\r\n },\r\n init: function(canvas) {\r\n if (this.canvas && this.canvas.isWithEventManager) {\r\n return;\r\n }\r\n let self = this;\r\n this.setCanvas(canvas);\r\n if (!this.hammerMC) {\r\n this.hammerMC = new Hammer.Manager(canvas);\r\n this.hammerMC.add(new Hammer.Pinch({enable: true}));\r\n this.hammerMC.on('pinch', this.pinchToZoom);\r\n }\r\n\r\n this.resizeHandler = this.onResize.bind(this);\r\n window.addEventListener(this.events.RESIZE, this.resizeHandler);\r\n\r\n this.keydownHandler = function (e) {\r\n // e.preventDefault();\r\n // e.stopPropagation();\r\n if (event.isComposing || event.keyCode === 229) {\r\n return;\r\n }\r\n\r\n //console.log(\"code\", e.code);\r\n //console.log(\"keyCode\", e.keyCode);\r\n this.eventQueue.push([this.events.KEYDOWN, e.code, e]);\r\n this.processEventQueue();\r\n }.bind(this);\r\n window.addEventListener(this.events.KEYDOWN, this.keydownHandler);\r\n\r\n canvas.addEventListener(this.events.MOUSE_MOVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (this.eventQueue.length > 2 &&\r\n this.eventQueue[this.eventQueue.length - 1][0] === self.events.MOUSE_MOVE &&\r\n this.eventQueue[this.eventQueue.length - 2][0] === self.events.MOUSE_MOVE\r\n ) {\r\n this.eventQueue[this.eventQueue.length - 1] = [self.events.MOUSE_MOVE, this.getMousePos(e), e];\r\n } else {\r\n this.eventQueue.push([self.events.MOUSE_MOVE, this.getMousePos(e), e]);\r\n }\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener('dragover', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.DRAG_OVER, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener('drop', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.DROP, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener(self.events.MOUSE_DOWN, function(e){\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.MOUSE_DOWN, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.MOUSE_UP, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.MOUSE_UP, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.TOUCH_START, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.handled = true;\r\n if (e.touches.length === 1) {\r\n let touchPos = self.getTouchPos(e);\r\n this.eventQueue.push([self.events.MOUSE_MOVE, touchPos, e]);\r\n this.eventQueue.push([self.events.TOUCH_START, touchPos, e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_END, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.handled = true;\r\n this.eventQueue.push([self.events.TOUCH_END, this.getTouchPos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_CANCEL, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.TOUCH_CANCEL, this.getTouchPos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.TOUCH_MOVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (self.zoomLock || e.touches.length > 1) //do not move when multi-touch or zoom locked or if the finger-move jumps too far\r\n return;\r\n let touchPos = self.getTouchPos(e);\r\n if (self.eventQueue.length > 2 &&\r\n self.eventQueue[self.eventQueue.length - 1][0] === self.events.TOUCH_MOVE &&\r\n self.eventQueue[self.eventQueue.length - 2][0] === self.events.TOUCH_MOVE\r\n ) {\r\n self.eventQueue[self.eventQueue.length - 1] = [self.events.TOUCH_MOVE, self.getTouchPos(e), e];\r\n } else {\r\n self.eventQueue.push([self.events.TOUCH_MOVE, touchPos, e]);\r\n }\r\n self.processEventQueue();\r\n }.bind(this), { passive: false });\r\n canvas.addEventListener(this.events.MOUSE_LEAVE, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.eventQueue.push([self.events.MOUSE_LEAVE, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }.bind(this));\r\n canvas.addEventListener(this.events.DBLCLICK, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.DBLCLICK, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.WHEEL, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.WHEEL, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n canvas.addEventListener(this.events.CONTEXTMENU, function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!e.handled) {\r\n this.eventQueue.push([self.events.CONTEXTMENU, this.getMousePos(e), e]);\r\n this.processEventQueue();\r\n }\r\n }.bind(this));\r\n this.updateOffset();\r\n this.resetCursor(null);\r\n this.canvas.isWithEventManager = true;\r\n },\r\n clearAll: function() {\r\n window.removeEventListener(this.events.RESIZE, this.resizeHandler);\r\n window.removeEventListener(this.events.KEYDOWN, this.keydownHandler);\r\n\r\n this.activeEvents = [];\r\n this.eventQueue = [];\r\n this.LastKnownMousePos = {\r\n x: -1,\r\n y: -1\r\n };\r\n },\r\n stealCursor: (override, revertBackAfterMouseUp) => {\r\n return sqftCursorManager.stealCursor(override, revertBackAfterMouseUp);\r\n },\r\n releaseStealLock: (owner) => {\r\n return sqftCursorManager.releaseStealLock(owner);\r\n },\r\n setCursor: (cursor, owner, noStealing) => {\r\n return sqftCursorManager.setCursor(cursor, owner, noStealing);\r\n },\r\n setCursorImage: (cursorImage, owner, noStealing) => {\r\n return sqftCursorManager.setCursorImage(cursorImage, owner, noStealing);\r\n },\r\n resetCursor: (owner) => {\r\n return sqftCursorManager.resetCursor(owner);\r\n },\r\n getCursor: () => {\r\n return sqftCursorManager.getCursor();\r\n },\r\n event: function(callback, sender, priority) {\r\n this.event = callback;\r\n this.sender = sender;\r\n this.priority = priority;\r\n },\r\n addEvent: function(event, callback, sender, priority) {\r\n var e = new this.event(callback, sender, priority);\r\n this.activeEvents[event] = this.activeEvents[event] || [];\r\n this.activeEvents[event].unshift(e);\r\n this.activeEvents[event].sort(this.eventSort);\r\n },\r\n removeEvent: function(sender, event) {\r\n let i;\r\n if (typeof(event) === 'undefined') {\r\n event = null;\r\n } else {\r\n event = event.toLowerCase();\r\n }\r\n if (event === null) {\r\n for (var key in this.activeEvents) {\r\n for (i = this.activeEvents[key].length -1; i >= 0; i--) {\r\n // lodash compare variant\r\n // if (_.isEqual(this.activeEvents[key][i].sender, sender)) {\r\n if (this.activeEvents[key][i].sender === sender) {\r\n this.activeEvents[key].splice(i, 1);\r\n }\r\n }\r\n }\r\n } else if (this.activeEvents[event] !== null) {\r\n for (i = this.activeEvents[event].length - 1; i >= 0; i--) {\r\n if (this.activeEvents[event][i].sender === sender) {\r\n this.activeEvents[event].splice(i, 1);\r\n }\r\n }\r\n }\r\n },\r\n removeStuckCursorEvents: function() {\r\n let mouseupEvents = this.activeEvents[this.events.MOUSE_UP] || [];\r\n for (const mouseupEvent of mouseupEvents) {\r\n const isCursorExist = mouseupEvent.sender.cursorImage || mouseupEvent.sender.cursor;\r\n if (isCursorExist && mouseupEvent.sender && mouseupEvent.sender.destroy) {\r\n mouseupEvent.sender.destroy(true, false);\r\n }\r\n }\r\n },\r\n processEventQueue: function() {\r\n if (!this.state.processing) {\r\n this.state.processing = true;\r\n let e;\r\n while( (e = this.eventQueue.shift()) ) {\r\n if (e[1] == null) {\r\n continue;\r\n }\r\n switch(e[0]) {\r\n case this.events.MOUSE_DOWN:\r\n case this.events.TOUCH_START:\r\n this.onMouseDown(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_MOVE:\r\n case this.events.TOUCH_MOVE:\r\n this.onMouseMove(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_UP:\r\n case this.events.TOUCH_END:\r\n this.onMouseUp(e[1], e[2]);\r\n break;\r\n case this.events.DBLCLICK:\r\n this.onDblClick(e[1], e[2]);\r\n break;\r\n case this.events.TOUCH_CANCEL:\r\n this.onTouchCancel();\r\n break;\r\n case this.events.MOUSE_LEAVE:\r\n this.onMouseLeave(e[1], e[2]);\r\n break;\r\n case this.events.RESIZE:\r\n this.onResize(e[1], e[2]);\r\n break;\r\n case this.events.MOUSE_WHEEL:\r\n case this.events.WHEEL:\r\n case this.events.ON_MOUSE_WHEEL:\r\n this.onWheel(e[1], e[2]);\r\n break;\r\n case this.events.KEYDOWN:\r\n this.onKeyDown(e[1], e[2]);\r\n break;\r\n case this.events.CONTEXTMENU:\r\n this.onContextmenu(e[1], e[2]);\r\n break;\r\n case this.events.DRAG_OVER:\r\n this.onDragOver(e[1], e[2]);\r\n break;\r\n case this.events.DROP:\r\n this.onDrop(e[1], e[2]);\r\n break;\r\n }\r\n }\r\n }\r\n this.state.processing = false;\r\n //window.resetIdleTimer(); //todo sqft-react is this needed\r\n }\r\n};\r\n\r\nexport default sqftEventManager\r\n","export const ROUTES = {\r\n home: \"/\",\r\n list: \"/list\",\r\n view: \"/view\",\r\n wizard: \"/wizard\",\r\n login: \"/login\",\r\n register: \"/register\",\r\n rooms: \"/room-ideas\",\r\n // look: \"/look\",\r\n // lookActiveFeature: \"/look/:partId\",\r\n // lookActiveCategory: \"/look/:partId/select\",\r\n // quote: \"/quote\", // wtf? never used that\r\n lookId: \":lookId\",\r\n lookFeatureSku: \":lookId/:skuId\",\r\n // grohe\r\n category: \"/category\",\r\n // product journey\r\n print: \"/print\",\r\n cart: \"/cart\",\r\n cartLogin: \"/cart/login\",\r\n cartRegister: \"/cart/register\",\r\n cartTerms: \"/cart/terms\",\r\n cartBilling: \"/cart/billing\",\r\n cartBillingInfo: \"/cart/billing/info\",\r\n cartShipping: \"/cart/shipping\",\r\n cartPayment: \"/cart/payment\",\r\n cartDelivery: \"/cart/delivery\",\r\n cartTwoFAVerify: \"/cart/twoFA/verify\",\r\n cartTwoFA: \"/cart/twoFA\",\r\n cartConfirm: \"/cart/confirm\",\r\n cartSuccess: \"/cart/success\",\r\n shop: \"/shop\",\r\n shopRoutes: \"/shop/:shopCategoryId/:skuId\",\r\n sqft: \"/sqft\",\r\n sqftCabinetsIntro: \"/sqft-cabinets-intro/:step\",\r\n sqftCabinetsAR: \"/sqft-cabinets-ar/:file\",\r\n sqftCabinetsTutorial: \"/sqft-cabinets-tutorial/:step\",\r\n /// QKB routes\r\n quoting: \"/quoting/:wizardId/:wizardStep\",\r\n quoteDesign: \"/quote-design\",\r\n newscope: \"/newscope\",\r\n shoppingcart: \"/shoppingcart\",\r\n visualizer: \"/visualizer\",\r\n contract: \"/sign\",\r\n};\r\n","import find from 'lodash/find';\r\nimport last from 'lodash/last';\r\n\r\nimport {splitFeatureName, iStartWith} from \"../../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../../store';\r\nimport {LayoutAbbreviation} from \"../constants\";\r\nimport {getFeatureIsLocked} from \"../../../../misc/helpers\";\r\n\r\nconst RgCabinetSize = /[0-9]+/g;\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const {displayName, sharedFeatureName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (iStartWith(displayName, 'Vanity -') || dbFeature.groupName === \"Vanity\") {\r\n if (displayName === \"Vanity - Placeholder D[For=Custom]\") {\r\n part.vanitySize = 72;\r\n } else {\r\n const fromName = sharedFeatureName || displayName || \"\";\r\n const lastDigit = last(fromName.match(RgCabinetSize));\r\n part.vanitySize = lastDigit ? lastDigit.slice(-2) : ''; // take two last digits from the name\r\n }\r\n\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length || !dbFeature.s3Bindings.some(binding => binding.bucketName === \"brv\");\r\n\r\n let arrayOfBindings = [];\r\n if(dbFeature.s3Bindings) {\r\n dbFeature.s3Bindings.forEach((binding) => {\r\n if (!arrayOfBindings.includes(\"Small\")\r\n && (binding.layout === LayoutAbbreviation.All || binding.layout === LayoutAbbreviation.Small)) {\r\n arrayOfBindings.push(\"Small\");\r\n }\r\n if (!arrayOfBindings.includes(\"Large\") &&\r\n (binding.layout === LayoutAbbreviation.All || binding.layout === LayoutAbbreviation.Large)) {\r\n arrayOfBindings.push(\"Large\");\r\n }\r\n });\r\n }\r\n\r\n arrayOfBindings.forEach(layoutName => {\r\n this[features+\"List\"][layoutName].push(part);\r\n });\r\n\r\n if (part.notAvailableInVisualizer || !arrayOfBindings.length) { // features not in visualizer should be shown in the QuotingTool\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutAbbreviation).forEach(layoutName => {\r\n if (layoutName !== \"All\") {\r\n this[features+\"List\"][layoutName].push(part);\r\n }\r\n })\r\n }\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n\r\n let conditionPassed = feature.matchesMetaForCondition(propName, propValue);\r\n if (propName === \"EX L\" && !conditionPassed) {\r\n conditionPassed = feature.matchesMetaForCondition(\"Wall\", propValue);\r\n }\r\n return conditionPassed\r\n\r\n // let {propName, propValue} = conditionObject;\r\n // const excludeProperty = propName.includes('-exclude');\r\n // if (excludeProperty) {\r\n // propName = propName.split('-exclude')[0];\r\n // }\r\n // return excludeProperty\r\n // ? feature.matchesMetaForCondition(propName, propValue)\r\n // : feature.matchesMetaForCondition(propName, propValue)\r\n });\r\n })\r\n }\r\n\r\n // navigationSubItemsWithFilterMultipleConditionsWithInactive(arrayOfConditions, featuresToCheck = this.features) { // shows all items & sets not mathing array\r\n // const refactoredArray = featuresToCheck.map((feature) => {\r\n // feature.matchesMetaFailed = false;\r\n // feature.matchesMetaFailedArray = [];\r\n // arrayOfConditions.forEach((conditionObject) => {\r\n // const {propName, propValue} = conditionObject;\r\n // let conditionPassed = feature.matchesMetaForCondition(propName, propValue);\r\n // if (propName === \"EX L\" && !conditionPassed) {\r\n // conditionPassed = feature.matchesMetaForCondition(\"Wall\", propValue);\r\n // }\r\n // if (!conditionPassed) {\r\n // feature.matchesMetaFailed = true;\r\n // feature.matchesMetaFailedArray.push(propName);\r\n // }\r\n // });\r\n //\r\n // return feature\r\n // });\r\n // return orderBy(refactoredArray, ['matchesMetaFailed'],['asc']).map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n setDefault() {\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n this.activeFeature = this.features && this.features[0] || null;\r\n this.placeholderFeature = this.features && this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n if (this.shadowFeature) {\r\n this.setFeatureLayer(this.shadowFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n setFeatureLayer(currentFeature, layout) {\r\n // console.log('currentFeature', currentFeature);\r\n if (!currentFeature || !currentFeature.dbFeature)\r\n return; //feature no longer exists\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n {entityID: this.featureDefinitionId(currentFeature), layout: layoutAbr});\r\n if (!s3Binding) {\r\n s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n {entityID: this.featureDefinitionId(currentFeature), layout: LayoutAbbreviation.All});\r\n }\r\n // !!! we need to check, either a specific layout or ALL layout only !!!\r\n // if (!s3Binding) {\r\n // s3Binding = find(currentFeature.dbFeature.s3Bindings,\r\n // {entityID: this.featureDefinitionId(currentFeature)});\r\n // }\r\n currentFeature.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures, partName, placeholderName, shadowNeeded = false) {\r\n if (this.activeFeature) {\r\n const activeName = this.activeFeature.getSplittedFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const featureName = feature.getSplittedFeatureName();\r\n return activeName === featureName\r\n }) || null;\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return placeholderName\r\n ? feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n && feature.dbFeature.displayName.includes(placeholderName)\r\n : feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (shadowNeeded) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n setShadowFeature() {\r\n const parentGroup = this.getParent();\r\n let filteredAvailableFeatures = [];\r\n if (parentGroup.shadows && parentGroup.shadows.features && parentGroup.shadows.features.length) {\r\n const layoutAbr = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = parentGroup.shadows.features.filter((shadow) => {\r\n return Array.isArray(shadow.dbFeature.s3Bindings) && shadow.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n })\r\n });\r\n const compatibleFeatures = filteredFeatures.filter(shadowFeature => {\r\n return shadowFeature.partName && this.shadowName && shadowFeature.partName === this.shadowName\r\n });\r\n filteredAvailableFeatures = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), compatibleFeatures);\r\n }\r\n this.shadowFeature = filteredAvailableFeatures.length ? filteredAvailableFeatures[0] : null;\r\n }\r\n\r\n getFeatureWithMeta(featuresArray, metaName, metaValue) {\r\n return featuresArray.find((feature) => {\r\n return feature.metaData[metaName] && feature.metaData[metaName].includes(metaValue);\r\n });\r\n }\r\n\r\n getFeaturesWithMeta(featuresArray, metaName, metaValue) {\r\n return featuresArray.filter((feature) => {\r\n return feature.metaData[metaName] && feature.metaData[metaName].includes(metaValue);\r\n });\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.src = '';\r\n }\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n /**\r\n * Returns matching feature (for example: return Mirrors with the same Color and DoorStyle as current selected Vanity)\r\n * @param feature {object} // current feature\r\n * @param activeFilterValueIDs {object} // current activeFeature filters (that needed to be matched)\r\n * @param filter1 {object} // featureGroup1\r\n * @param filter2 {object} // featureGroup2\r\n */\r\n static featureHasFilters(feature, activeFilterValueIDs, filter1, filter2) {\r\n const filterValueIDs = feature.dbFeature && feature.dbFeature.filterValueIDs;\r\n if (filterValueIDs) {\r\n const hasValues = filterValueIDs[filter1.id]\r\n && filterValueIDs[filter2.id]\r\n && activeFilterValueIDs[filter1.id]\r\n && activeFilterValueIDs[filter2.id]\r\n && filterValueIDs[filter1.id].includes(activeFilterValueIDs[filter1.id][0])\r\n && filterValueIDs[filter2.id].includes(activeFilterValueIDs[filter2.id][0]);\r\n // hasValues ? console.log('match-', feature) : null;\r\n return hasValues || false // false is needed here, because true !> undefined\r\n }\r\n return false\r\n }\r\n\r\n getSplittedFeatureName = () => {\r\n if(this._customDisplayName == null) {\r\n this._customDisplayName = this.getFeatureName()\r\n // .replace(/ 30/g, \"\") // we can't do that since room layout change is broken after that\r\n // .replace(/ 60/g, \"\")\r\n // .replace(/ LG/g, \"\")\r\n // .replace(/ SM/g, \"\");\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n}\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setSQFTMenuOpened = (menuOpened = \"\") => ({\r\n type: types.SET_SQFT_MENU_OPENED,\r\n payload: {menuOpened}\r\n});\r\n\r\nexport const setSQFTMenuOpenedLock = (menuOpenedLock = true) => ({\r\n type: types.SET_SQFT_MENU_LOCK,\r\n payload: {menuOpenedLock}\r\n});\r\n\r\nexport const setSQFTActiveButton = (activeButton) => ({\r\n type: types.SET_SQFT_MENU_ACTIVE_BUTTON,\r\n payload: {activeButton}\r\n});\r\n\r\nexport const setSQFTActiveSubMenuButton = (activeSubMenuButton) => ({\r\n type: types.SET_SQFT_ACTIVE_SUB_MENU_BUTTON,\r\n payload: {activeSubMenuButton}\r\n});\r\n\r\nexport const setSQFTActiveLevel3Button = (activeLevel3Button = \"\") => ({\r\n type: types.SET_SQFT_ACTIVE_LEVEL3_BUTTON,\r\n payload: {activeLevel3Button}\r\n});\r\n\r\nexport const setSQFTActiveRoomIndex = (activeRoomIndex) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_INDEX,\r\n payload: {activeRoomIndex}\r\n});\r\n\r\nexport const setSQFTActiveRoomType = (activeRoomType) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_TYPE,\r\n payload: {activeRoomType}\r\n});\r\n\r\nexport const setSQFTActiveRoomId = (activeRoomId) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM_ID,\r\n payload: {activeRoomId}\r\n});\r\n\r\nexport const setSQFTActiveRoom = (activeRoom) => ({\r\n type: types.SET_SQFT_ACTIVE_ROOM,\r\n payload: {activeRoom}\r\n});\r\n\r\nexport const setIsRoomSwitcherVisible = (isVisible) => ({\r\n type: types.SET_SQFT_ROOM_SWITCHER_VISIBLE,\r\n payload: {isVisible}\r\n});\r\n\r\nexport const setFreeDrawMode = (isFreeDrawMode) => ({\r\n type: types.SET_FREE_DRAW_MODE,\r\n payload: {isFreeDrawMode}\r\n});\r\n\r\nexport const setWallsUpMode = (isWallsUpMode) => ({\r\n type: types.SET_WALLS_UP_MODE,\r\n payload: {isWallsUpMode}\r\n});\r\n\r\nexport const setWallsLockMode = (isWallsLockMode) => ({\r\n type: types.SET_WALLS_LOCK_MODE,\r\n payload: {isWallsLockMode}\r\n});\r\n\r\nexport const setSQFTRoomLayouts = (roomLayouts) => ({\r\n type: types.SET_SQFT_ROOM_LAYOUTS,\r\n payload: {roomLayouts}\r\n});\r\n\r\nexport const setSQFTContextMenu = (contextMenu) => ({\r\n type: types.SET_SQFT_CONTEXT_MENU,\r\n payload: {contextMenu}\r\n});\r\n\r\nexport const setSQFTContextMenuV2 = (contextMenuV2) => ({\r\n type: types.SET_SQFT_CONTEXT_MENU_V2,\r\n payload: {contextMenuV2}\r\n});\r\n\r\nexport const setSQFTSystemMessage = (systemMessage) => ({\r\n type: types.SET_SQFT_SYSTEM_MESSAGE,\r\n payload: {systemMessage}\r\n});\r\n\r\nexport const setSQFTAr3dPopup = (ar3dPopup) => ({\r\n type: types.SET_SQFT_AR3D_POPUP,\r\n payload: {ar3dPopup}\r\n});\r\n\r\nexport const setSQFTSystemDeleteMessage = (systemDeleteMessage) => ({\r\n type: types.SET_SQFT_SYSTEM_DELETE_MESSAGE,\r\n payload: {systemDeleteMessage}\r\n});\r\n\r\nexport const setSQFTPopup = (sqftPopup) => ({\r\n type: types.SET_SQFT_POPUP,\r\n payload: {sqftPopup}\r\n});\r\n\r\n/**\r\n * Change Value Popups\r\n */\r\nexport const setChangeValuePopups = (changeValuePopups) => ({\r\n type: types.SET_CHANGE_VALUE_POPUPS,\r\n payload: {changeValuePopups}\r\n});\r\n\r\nexport const addChangeValuePopup = (changeValuePopup) => ({\r\n type: types.ADD_CHANGE_VALUE_POPUP,\r\n payload: changeValuePopup\r\n});\r\n\r\nexport const changeValuePopup = (changeValuePopup) => ({\r\n type: types.CHANGE_VALUE_POPUP,\r\n payload: changeValuePopup\r\n});\r\n\r\nexport const deleteChangeValuePopup = (id) => ({\r\n type: types.DELETE_CHANGE_VALUE_POPUP,\r\n payload: {id}\r\n});\r\n\r\n/**\r\n * ValidationPopups\r\n */\r\nexport const setValidationPopups = (validationPopups) => ({\r\n type: types.SET_VALIDATION_POPUPS,\r\n payload: {validationPopups}\r\n});\r\n\r\nexport const addValidationPopup = (validationPopup) => ({\r\n type: types.ADD_VALIDATION_POPUP,\r\n payload: validationPopup\r\n});\r\n\r\nexport const validationPopup = (validationPopup) => ({\r\n type: types.VALIDATION_POPUP,\r\n payload: validationPopup\r\n});\r\n\r\nexport const deleteValidationPopup = (id) => ({\r\n type: types.DELETE_VALIDATION_POPUP,\r\n payload: {id}\r\n});\r\n\r\nexport const setShouldShowChangeShapeFeatureMissingMessage = (isShapeFeatureMissing) => ({\r\n type: types.SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE,\r\n payload: {isShapeFeatureMissing}\r\n});\r\n\r\nexport const setShapeIdsWithMissingFeature = (shapeIdsWithMissingFeature) => ({\r\n type: types.SET_SHAPE_IDS_WITH_MISSING_FEATURES,\r\n payload: {shapeIdsWithMissingFeature}\r\n});\r\n\r\nexport const addShapeIdWithMissingFeature = (shapeIdsWithMissingFeature) => ({\r\n type: types.ADD_SHAPE_ID_WITH_MISSING_FEATURES,\r\n payload: shapeIdsWithMissingFeature\r\n});\r\n\r\nexport const setSelectedCountertop = (selectedCountertop) => ({\r\n type: types.SET_SELECTED_COUNTERTOP,\r\n payload: {selectedCountertop}\r\n});\r\n\r\nexport const setAbortController = (abortRequestController) => ({\r\n type: types.SET_ABORT_CONTROLLER,\r\n payload: {abortRequestController}\r\n});\r\n\r\nexport const setIsItextEditing = (isITextEditing) => ({\r\n type: types.SET_IS_ITEXT_EDITING,\r\n payload: {isITextEditing}\r\n});\r\n\r\nexport const setIsSlabPlaceholderOverlapsWithMultipleShapes = (isSlabPlaceholderOverlapsWithMultipleShapes) => ({\r\n type: types.SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES,\r\n payload: {isSlabPlaceholderOverlapsWithMultipleShapes}\r\n});\r\n\r\nexport const setReCacheMenuCounter = (reCacheMenuCounter) => ({\r\n type: types.SET_RE_CACHE_MENU_COUNTER,\r\n payload: {reCacheMenuCounter}\r\n});\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { showLoading, hideLoading } from 'react-redux-loading-bar';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport CircularProgress from '@mui/material/CircularProgress';\r\n\r\nimport LoadingBar from '../../lib/react-redux-loading-bar';\r\nimport store from '../../store';\r\nimport {toggleLoader} from \"../../actions/actionFunctions\";\r\nimport COLOR_THEMES, {COLORS} from \"../../colorThemes\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\n\r\nclass LoaderView extends React.Component {\r\n\r\n\r\n render() {\r\n const {iframe, loaderTitle, loaderText, loaderOpened, lookOpened, loaderFullScreen, activeTheme,\r\n visualizersLoaded, lookOverlayOpened} = this.props;\r\n\r\n if (!loaderOpened) {\r\n return null\r\n }\r\n\r\n if (IS_LIXIL_UI) {\r\n const color = visualizersLoaded.length ? COLORS.white : COLOR_THEMES[activeTheme].active\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n // const {fabricatorData} = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n

\r\n {/*{fabricatorData.received ?

: null}*/}\r\n {/*{fabricatorData.received ?

: null}*/}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {activeTheme, visualizersLoaded} = store.serverState;\r\n const {loaderOpened, loaderTitle, loaderText, loaderFullScreen} = store.loaderState;\r\n const {lookOpened, lookOverlayOpened} = store.lookState;\r\n return {\r\n activeTheme,\r\n visualizersLoaded,\r\n loaderOpened,\r\n loaderTitle,\r\n loaderText,\r\n loaderFullScreen,\r\n lookOpened,\r\n lookOverlayOpened,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {})(LoaderView);\r\n\r\nexport function loaderEnable(loaderText = \"loader.defaultText\", loaderTitle = \"loader.defaultTitle\") {\r\n //null value is passed, and not defaulted with the above, so the below 2 lines handle if null or other falsey value is passed\r\n loaderText = loaderText || \"loader.defaultText\";\r\n loaderTitle = loaderTitle || \"loader.defaultTitle\";\r\n store.dispatch(showLoading());\r\n store.dispatch(toggleLoader(true, loaderText, loaderTitle));\r\n}\r\n\r\nexport function loaderDisable() {\r\n store.dispatch(hideLoading());\r\n store.dispatch(toggleLoader(false));\r\n}\r\n","import groupBy from \"lodash/groupBy\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFilterGroupValue, getFilterGroupValues, s3FilterImagePath} from \"../../../misc/utils\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\nimport {\r\n ALL_CONTEXT_MENU,\r\n CONTEXT_MENU_BATHTUB_BUTTONS,\r\n CONTEXT_MENU_SHOWER_ALL,\r\n CONTEXT_MENU_SHOWER_OTHER,\r\n CONTEXT_MENU_SPLIT_WALL,\r\n CONTEXT_MENU_VANITY_BUTTONS,\r\n POSSIBLE_ONE_POSITION,\r\n VANITY_TYPES,\r\n LOOK_ROOM_TYPES,\r\n ALL_CONTEXT_MENU_KITCHEN,\r\n CONTEXT_MENU_KITCHEN_CENTER_ISLAND,\r\n CONTEXT_MENU_KITCHEN_COUNTERTOPS,\r\n CONTEXT_MENU_VANITY_ONLY, CONTEXT_MENU_SHOWER_ACCESSORIES, METADATA\r\n} from \"../core/constants\";\r\nimport {getCartItemObject, getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {getBundledFeatures, hardCodelyRemovedClicking} from \"./lookFunctions2\";\r\nimport {isVisibleForNavigation} from \"../../../misc/displayLogic\";\r\nimport {allowCheckForCollection} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getCommonVisualizerType, IS_PRODUCT_JOURNEY, IS_QKB_UI} from \"../../../config\";\r\nimport {GROHE_CONFIG} from \"../grohe/groheConfig\";\r\nimport {addLayoutHistory} from \"../../../actions/actionFunctions\";\r\nimport store from \"../../../store\";\r\nimport {getExistingWizardForGroups} from \"./lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getColorFilterValue} from \"../../../misc/filtersFunctions\";\r\nimport {getFeatureCropCoors} from \"../../../misc/metaDataFunctions\";\r\n\r\n\r\n/**\r\n * Checks available color options for reature\r\n * @param lookActiveFeature {object}\r\n * @param filterGroups {array}\r\n * @param returnAllFeatures {boolean}\r\n * @param fromNavItemOptions {array}\r\n * @returns {array} array of objects\r\n */\r\nexport const getFeatureOptions = (lookActiveFeature, filterGroups, returnAllFeatures = false, fromNavItemOptions = null) => {\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n\r\n if (!colorFilterGroup) {\r\n return null\r\n }\r\n\r\n const activeFeatureValues = getFilterGroupValues(lookActiveFeature, colorFilterGroup);\r\n\r\n // console.log(\"activeFeatureValues\", activeFeatureValues);\r\n\r\n if (!Array.isArray(activeFeatureValues) || !activeFeatureValues.length) {\r\n return null\r\n }\r\n\r\n const parent = lookActiveFeature.getParent();\r\n const activeFeatureValue = getFilterGroupValue(activeFeatureValues[0], colorFilterGroup);\r\n\r\n let optionFeatures = activeFeatureValue ? [{\r\n feature: lookActiveFeature,\r\n colorValue: activeFeatureValue\r\n }] : [];\r\n\r\n if (fromNavItemOptions) {\r\n // console.log(\"optionFeatures\", optionFeatures);\r\n return activeFeatureValue && fromNavItemOptions.some(option => option.colorValue.id === activeFeatureValue.id)\r\n ? fromNavItemOptions\r\n : [...optionFeatures, ...fromNavItemOptions]\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n let navItems;\r\n if (returnAllFeatures) {\r\n const layout = getCurrentLayout();\r\n const forSpecificLayout = lookActiveFeature.metaData[\"RoomLayout\"] ? lookActiveFeature.metaData[\"RoomLayout\"][0] : null;\r\n if (forSpecificLayout && (+(forSpecificLayout.replace(\"Layout\", \"\")) !== layout.type)) {\r\n navItems = parent.getFeaturesForNavigationFrom({\r\n returnAllFeatures,\r\n forSpecificLayout: lookActiveFeature.metaData[\"RoomLayout\"] ? lookActiveFeature.metaData[\"RoomLayout\"][0] : null,\r\n forSpecificScene: lookActiveFeature.metaData[\"RoomScene\"] ? lookActiveFeature.metaData[\"RoomScene\"][0] : null\r\n })\r\n } else {\r\n navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, false)\r\n }\r\n } else {\r\n navItems = layout.designNavigationItems({part: parent}, {}, \"\", lookActiveFeature, false)\r\n }\r\n\r\n optionFeatures = getOptionsFromNavItemsForFeature(lookActiveFeature, navItems, filterGroups, optionFeatures);\r\n return optionFeatures\r\n};\r\n\r\nexport const getOptionsFromNavItemsForFeature = (lookActiveFeature, navItems, filterGroups, optionFeatures = []) => {\r\n const activeFeatureCollectionName = lookActiveFeature.getCollectionName(filterGroups);\r\n const matchingOptionsName = lookActiveFeature.getMatchingOptionsName();\r\n const matchingFeatureProperty = lookActiveFeature.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part || navItems[i];\r\n if (checkFeature.dbFeature.id === lookActiveFeature.dbFeature.id) {\r\n continue\r\n }\r\n if (checkFeature.getMatchingOptionsName() !== matchingOptionsName) {\r\n continue\r\n }\r\n // console.log(\"checkFeature\", checkFeature);\r\n const filterValue = getColorFilterValue(checkFeature, filterGroups);\r\n if (!filterValue) {\r\n continue\r\n }\r\n if (lookActiveFeature.metaData[matchingFeatureProperty] && !isEqual(lookActiveFeature.metaData[matchingFeatureProperty], checkFeature.metaData[matchingFeatureProperty])) {\r\n continue\r\n }\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n if (allowCheckForCollection(checkFeature) && (checkFeature.getCollectionName(filterGroups) !== activeFeatureCollectionName)) {\r\n continue\r\n }\r\n if (lookActiveFeature.partId !== \"vanity_sink\" && (lookActiveFeature.dbFeature.lixilProductSubCategory !== checkFeature.dbFeature.lixilProductSubCategory)) {\r\n continue\r\n }\r\n if (lookActiveFeature.partId === \"vanity_cabinet\" && lookActiveFeature.dbFeature.metaData[\"VanitySize\"]\r\n && !isEqual(lookActiveFeature.metaData[\"VanitySize\"], checkFeature.metaData[\"VanitySize\"])) {\r\n continue\r\n }\r\n }\r\n if (optionFeatures.every(optFeature => optFeature.colorValue.id !== filterValue.id)) {\r\n optionFeatures.push({\r\n feature: checkFeature,\r\n colorValue: filterValue\r\n })\r\n } else if (lookActiveFeature.partId === \"vanity_sink\" && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n const alreadyAddedOptionIndex = optionFeatures.findIndex(optFeature => optFeature.colorValue.id === filterValue.id);\r\n if (alreadyAddedOptionIndex > -1\r\n && !isEqual(optionFeatures[alreadyAddedOptionIndex].feature.metaData[\"MountHoles\"], lookActiveFeature.metaData[\"MountHoles\"])\r\n && isEqual(checkFeature.metaData[\"MountHoles\"], lookActiveFeature.metaData[\"MountHoles\"])) {\r\n optionFeatures.splice(alreadyAddedOptionIndex, 1, {\r\n feature: checkFeature,\r\n colorValue: filterValue\r\n })\r\n }\r\n }\r\n }\r\n return optionFeatures\r\n}\r\n\r\n\r\n/**\r\n * returns matching color feature depending on the feature passed\r\n * @param activeFeature {featureInterface}\r\n * @param notMatchingFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @returns featureFound {featureInterface}\r\n */\r\nexport const getMatchingColorFeature = (activeFeature, notMatchingFeature, filterGroups) => {\r\n if (activeFeature) { //just in case\r\n const colorFilterValue = getColorFilterValue(activeFeature, filterGroups);\r\n const currentCollectionName = notMatchingFeature.getCollectionName(filterGroups);\r\n const currentFeatureName = activeFeature.getSplittedFeatureName();\r\n const parent = notMatchingFeature.getParent();\r\n const navItems = parent.navigationSubItems({}, \"\", notMatchingFeature);\r\n\r\n let featureFound = null;\r\n let featureFoundItems = navItems.filter((navItem) => { // 2) match by color filter\r\n const colorValue = getColorFilterValue(navItem.part, filterGroups);\r\n return !!(colorValue && colorFilterValue && (\r\n (colorValue.id === colorFilterValue.id)\r\n || [colorValue,colorFilterValue].every(filterValue => filterValue.displayText && filterValue.displayText.toLowerCase().includes(\"chrome\"))\r\n ));\r\n });\r\n if (featureFoundItems.length) {\r\n featureFound =\r\n featureFoundItems.find(navItem => navItem.part.getSplittedFeatureName() === currentFeatureName) // 2) match by sku\r\n || featureFoundItems.find(navItem => navItem.part.getCollectionName(filterGroups) === currentCollectionName) // 3) match by collection\r\n || featureFoundItems[0]; // 4) return at least something\r\n } else {\r\n featureFound = navItems.find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === currentFeatureName // 2) match by sku\r\n });\r\n }\r\n return featureFound\r\n }\r\n return null\r\n};\r\n\r\n/**\r\n * returns same color features but different feature groups\r\n * @param lookActiveFeature {featureInterface}\r\n * @param filterGroups {array}\r\n * @param sameColorOnly {boolean}\r\n * @returns sameColorFeatures {array}\r\n */\r\nexport const getSameColorFeatures = (lookActiveFeature, filterGroups, sameColorOnly = true) => {\r\n let sameColorFeatures = [];\r\n let differentColorFeatures = [];\r\n const doNotShowStylePopupFor = [\"bathtub_body\", \"vanity_cabinet\", \"vanity_middle\", \"shower_pan_combo\", \"replacement_tub\"];\r\n const isAsBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n\r\n if (lookActiveFeature && (doNotShowStylePopupFor.includes(lookActiveFeature.partId)) && isAsBathroom) {\r\n return {sameColorFeatures, differentColorFeatures}\r\n }\r\n\r\n const featureGroups = getLookList(true);\r\n if (featureGroups) {\r\n const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups);\r\n featureGroups.forEach(parentObject => {\r\n if (activeFilterGroupValue && parentObject.cartFeature && (parentObject.cartFeature.partId !== lookActiveFeature.partId)) {\r\n const colorValue = getColorFilterValue(parentObject.cartFeature, filterGroups);\r\n if (colorValue && (colorValue.id !== activeFilterGroupValue.id)) {\r\n const sameFeatureAsActive = getMatchingColorFeature(lookActiveFeature, parentObject.cartFeature, filterGroups);\r\n const bathroomShowerPanExclude = isAsBathroom\r\n && (sameFeatureAsActive && sameFeatureAsActive.part.partId === \"shower_pan_combo\")\r\n && sameFeatureAsActive.part.getParent().getParent().layout.parts[\"Shower Tub Combo\"]\r\n && sameFeatureAsActive.part.getParent().getParent().layout.parts[\"Shower Tub Combo\"].showerTubComboIsActive;\r\n if (sameFeatureAsActive && !bathroomShowerPanExclude) {\r\n sameColorFeatures.push(sameFeatureAsActive.part);\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n } else if (IS_PRODUCT_JOURNEY && !sameColorOnly) {\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n }\r\n } else if (IS_PRODUCT_JOURNEY && !sameColorOnly) {\r\n differentColorFeatures.push(parentObject.cartFeature);\r\n }\r\n }\r\n })\r\n }\r\n // console.log(\"sameColorFeatures\", sameColorFeatures);\r\n // console.log(\"differentColorFeatures\", differentColorFeatures);\r\n return {sameColorFeatures, differentColorFeatures}\r\n};\r\n\r\n/**\r\n * returns same color features but different feature groups\r\n * @param lookActiveFeature {featureInterface}\r\n * @param fromArray {array}\r\n * @param filterGroups {array}\r\n * @returns displayFeatures {array}\r\n */\r\nexport const getDisplaySameColorGroups = (lookActiveFeature, fromArray, filterGroups) => {\r\n\r\n if (!lookActiveFeature || !fromArray.length || !filterGroups) {\r\n return []\r\n }\r\n\r\n // const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups);\r\n const activeCollectionFilterGroupValue = lookActiveFeature.getCollectionName(filterGroups);\r\n\r\n let displayFeatures = [];\r\n let otherGroup = {\r\n colName: \"other\",\r\n features: []\r\n }\r\n let currentColGroup = {\r\n colName: activeCollectionFilterGroupValue,\r\n features: []\r\n }\r\n if (activeCollectionFilterGroupValue) {\r\n displayFeatures.push(currentColGroup)\r\n }\r\n displayFeatures.push(otherGroup);\r\n\r\n\r\n fromArray.forEach(feature => {\r\n if (displayFeatures.some(sameColorObject => sameColorObject.features.some(addedFeature => addedFeature.partId === feature.partId))) {\r\n return false\r\n }\r\n\r\n const currentCollectionValue = feature.getCollectionName(filterGroups);\r\n\r\n if (currentCollectionValue && activeCollectionFilterGroupValue && (currentCollectionValue === activeCollectionFilterGroupValue)) {\r\n currentColGroup.features.push(feature)\r\n } else {\r\n otherGroup.features.push(feature)\r\n }\r\n });\r\n displayFeatures = displayFeatures\r\n .filter(sameColorObject => sameColorObject.features.length)\r\n .sort((a,b) => (a.colName === \"other\") - (b.colName === \"other\"));\r\n\r\n // console.log(\"displayFeatures\", displayFeatures);\r\n\r\n return displayFeatures\r\n};\r\n\r\n\r\n/**\r\n * returns a list needed for integration\r\n * @param checkFeature {object}\r\n * @param filterGroups {array}\r\n * @returns {array}\r\n */\r\nexport const getSimilarItemsList = (checkFeature, filterGroups) => {\r\n if (!checkFeature) {\r\n return []\r\n }\r\n const featureGroups = getLookList();\r\n if (!featureGroups) {\r\n return []\r\n }\r\n let matchingFeatures = [];\r\n const activeFilterGroupValue = getColorFilterValue(checkFeature, filterGroups);\r\n const collectionName = checkFeature.getCollectionName(filterGroups);\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.partId === checkFeature.partId) {\r\n return\r\n }\r\n const navItems = parentObject.featureGroup.navigationSubItems({}, \"\", checkFeature)\r\n const sameColorItems = navItems.filter((navItem) => { // 2) match by color filter\r\n const colorValue = getColorFilterValue(navItem.part, filterGroups);\r\n return colorValue && activeFilterGroupValue && (colorValue.id === activeFilterGroupValue.id)\r\n });\r\n if (sameColorItems.length) {\r\n const sameCollectionFeature = sameColorItems.find(navItem => {\r\n return navItem.part.getCollectionName(filterGroups) === collectionName\r\n });\r\n matchingFeatures.push(sameCollectionFeature ? sameCollectionFeature.part : sameColorItems[0].part);\r\n } else if (parentObject.cartFeature) {\r\n // tubs, toilets and shower pans? for now let's push all\r\n matchingFeatures.push(parentObject.cartFeature);\r\n }\r\n })\r\n return matchingFeatures\r\n}\r\n\r\nconst setLayerPosition = (position, featureGroup) => {\r\n const sameFeature = featureGroup.getMatchingPositionFeature(position, featureGroup.activeFeature);\r\n // console.log(\"sameFeature\", sameFeature);\r\n if (sameFeature) {\r\n featureGroup.activeFeature = sameFeature;\r\n }\r\n featureGroup.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n}\r\n\r\nconst updateMirrorAndWallsCrop = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n if (!vanityParent || !vanityParent.mirror || !vanityParent.relatedItems || !vanityParent.relatedItems.some(relItem => relItem.partId === feature.partId)) {\r\n return\r\n }\r\n vanityParent.mirror.setLayers(layout);\r\n const wallsParent = layout.parts[\"Walls\"];\r\n if (wallsParent && wallsParent.relatedItems) {\r\n wallsParent.relatedItems.forEach(wallFeatureGroup => {\r\n if (wallFeatureGroup.hasAdditionalParts) {\r\n wallFeatureGroup.checkIfFeaturePartIsMatching(); // update crops after mirror change\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Updates Vanity related items sides\r\n * @param feature {featureInterface}\r\n * @param oldActiveFeature {featureInterface}\r\n */\r\nexport const updateVanitySides = (feature, oldActiveFeature = null) => {\r\n const layout = getCurrentLayout();\r\n const currentSideMeta = oldActiveFeature ? oldActiveFeature.metaData.layerPosition : null;\r\n const nextSideMeta = feature.metaData.layerPosition;\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n if (!vanityParent || !vanityParent.relatedItems || !vanityParent.relatedItems.some(relItem => relItem.partId === feature.partId)\r\n || feature.partId === \"vanity_mirror\") { // vanity mirror is independent! it has Vanity Size and mirror shape meta\r\n return\r\n }\r\n\r\n if (feature.partId === \"vanity_cabinet\") {\r\n const nextVanityIsDouble = vanityParent.isDoubleVanity(feature);\r\n vanityParent.relatedItems.forEach(featureGroup => {\r\n if (feature.partId === featureGroup.partId || featureGroup.partId === \"vanity_mirror\") {\r\n // feature is already applied, no need to do anything\r\n return\r\n }\r\n if (featureGroup.layerPositions) {\r\n const isCountertopOrBacksplash = featureGroup.partId === \"vanity_countertop\" || featureGroup.partId === \"vanity_backsplash\";\r\n\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if (isCountertopOrBacksplash) {\r\n if (position === feature.metaData.layerPosition || (position !== \"C\" && feature.metaData.layerPosition !== \"C\")) {\r\n setLayerPosition(position, featureGroup);\r\n } else {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n }\r\n } else {\r\n if (position === \"C\" && (nextVanityIsDouble && feature.metaData.layerPosition === \"C\"\r\n || (!nextVanityIsDouble && nextSideMeta !== \"C\"))) {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else if (position !== \"C\" && !nextVanityIsDouble && feature.metaData.layerPosition === \"C\") {\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n setLayerPosition(position, featureGroup);\r\n }\r\n }\r\n })\r\n }\r\n })\r\n return\r\n }\r\n\r\n if (nextSideMeta === currentSideMeta) {\r\n return\r\n }\r\n if (!((currentSideMeta !== \"C\" && nextSideMeta === \"C\") || (nextSideMeta !== \"C\" && currentSideMeta === \"C\"))) {\r\n return // no need to change anything\r\n }\r\n\r\n vanityParent.relatedItems.forEach(featureGroup => {\r\n if (feature.partId === featureGroup.partId) {\r\n // feature is already applied, no need to do anything\r\n return\r\n }\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n if (featureGroup.getParent().vanity_type === \"vanity_cabinet\"\r\n && (featureGroup.partId === \"vanity_cabinet\")\r\n && (feature.metaData.layerPosition !== \"C\" && position === \"C\")\r\n && (featureGroup.layerPositions[\"C\"] && !featureGroup.layerPositions[\"L\"] && !featureGroup.layerPositions[\"R\"])\r\n && featureGroup.layerPositions[\"C\"].metaData[\"MatchingFeature\"]\r\n && featureGroup.layerPositions[\"C\"].metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n && featureGroup.layerPositions[\"C\"].metaData[\"VanityWidth\"]\r\n && featureGroup.layerPositions[\"C\"].metaData[\"VanityWidth\"] === 64) {\r\n return; // do not erase 64 vanity if we are trying to apply L sink, it can be used with 64 vanity size\r\n }\r\n featureGroup.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n if (nextSideMeta === position && featureGroup.layerPositions[position]) {\r\n // feature is already applied, no need to search for it\r\n return\r\n }\r\n setLayerPosition(position, featureGroup);\r\n }\r\n })\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Simple navigation feature click\r\n * @param feature {object}\r\n * @param updateLocalStorage {boolean}\r\n * @param forceClick {boolean}\r\n * @param updateVanityPositions {boolean}\r\n // * @param fromUrl {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const navFeatureCLick = (feature, updateLocalStorage = true, forceClick = false, updateVanityPositions = true) => {\r\n const parent = feature.getParent();\r\n const featureIsLocked = getFeatureIsLocked(feature);\r\n if (featureIsLocked && !forceClick) {\r\n feature.handleClick(forceClick); // update active locked feature or active not in visualizer feature\r\n return false\r\n }\r\n\r\n const currentActiveFeature = parent.activeFeature;\r\n const asBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n if (asBathroom) {\r\n if (feature.partId === \"vanity_sink\" && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n feature.handleClick(forceClick, true);\r\n } else if (feature.partId === \"vanity_cabinet\" && (document.kvConfig.visualizerType === \"bvLook\") && !updateVanityPositions) {\r\n feature.handleClick(forceClick, false); // do not click again on the sink, we came from the sink click\r\n } else {\r\n feature.handleClick(forceClick); // first set custom types (for vanity)\r\n }\r\n }\r\n if (!feature.notAvailableInVisualizer && parent.layerPositions && feature.metaData.layerPosition) { // prevent clicking on disabled item if same sku is opened for enabled feature\r\n // if (fromUrl && Object.keys(parent.layerPositions).some(layerPosition => !parent.layerPositions[layerPosition])) {\r\n // return false\r\n // }\r\n Object.keys(parent.layerPositions).forEach(position => {\r\n if (position === feature.metaData.layerPosition) {\r\n parent.layerPositions[position] = feature\r\n } else if ((position !== \"C\" && feature.metaData.layerPosition === \"C\") || (feature.metaData.layerPosition !== \"C\" && position === \"C\")) {\r\n parent.layerPositions[position] = null; // erase sibling positions\r\n } else {\r\n const sameFeature = parent.getMatchingPositionFeature(position, feature, null, parent.getActiveFeatureConditions(feature));\r\n // console.log(\"sameFeature\", sameFeature);\r\n parent.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n }\r\n });\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick();\r\n }\r\n\r\n if (feature.partId === \"vanity_cabinet\" && (document.kvConfig.visualizerType === \"bvLook\") && !updateVanityPositions) {\r\n feature.handleClick(forceClick, false); // do not click again on the sink, we came from the sink click\r\n } else {\r\n feature.handleClick(forceClick); // update active feature or active not in visualizer feature\r\n }\r\n\r\n if (updateLocalStorage) {\r\n const layout = getCurrentLayout();\r\n store.dispatch(addLayoutHistory(layout.getActiveFeaturesAsObject(false, false, true)))\r\n }\r\n if (parent.layerPositions && feature.metaData.layerPosition && updateVanityPositions && !feature.notAvailableInVisualizer) {\r\n updateVanitySides(feature, currentActiveFeature);\r\n updateMirrorAndWallsCrop(feature);\r\n }\r\n}\r\n\r\n/**\r\n * For delete buttons\r\n * @param feature {object}\r\n * @param featureParent {object}\r\n * @param checkDisabledOnly {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const checkIfFeatureDisabled = (feature, featureParent, checkDisabledOnly = false) => {\r\n if (!featureParent) {\r\n featureParent = feature.getParent();\r\n }\r\n const isDisabled = featureParent.layerPositions\r\n ? Object.keys(featureParent.layerPositions).every(pos => !featureParent.layerPositions[pos])\r\n : featureParent.disabled;\r\n return checkDisabledOnly ? isDisabled : isDisabled && featureParent.canBeDisabled\r\n}\r\n\r\n/**\r\n * Returns active features list for\r\n * @param withLayerPositions {boolean} return all positions features\r\n * @param withDisabled {boolean} return feature positions even disabled\r\n * @param showAllGroups {boolean} returns all layout feature groups\r\n * @param showAllQtCategories {boolean} returns quotingTool featureGroups\r\n * @param displayInMenu {boolean} whether to display in look menu\r\n * @returns {array} array of objects\r\n */\r\nexport const getLookList = (withLayerPositions = false,\r\n withDisabled = false,\r\n showAllGroups = false,\r\n showAllQtCategories = false,\r\n displayInMenu = false) => {\r\n const layout = getCurrentLayout();\r\n\r\n let featureGroups = [];\r\n\r\n if (showAllGroups) {\r\n layout.getFeatures().forEach(parent => {\r\n parent.relatedItems.forEach(featureGroup => {\r\n if (!featureGroup.activeFeature) {\r\n featureGroup.setDefault(layout, true);\r\n }\r\n if (!featureGroup.activeFeature) {\r\n return\r\n }\r\n featureGroups.push({\r\n selectionGroup: parent.partName,\r\n partId: featureGroup.partId,\r\n quantity: 0,\r\n cartFeature: featureGroup.activeFeature,\r\n featureGroup,\r\n })\r\n })\r\n });\r\n return featureGroups\r\n }\r\n\r\n if (((document.kvConfig.toolVersion !== 6 || showAllQtCategories) && layout.qtCategories)) {\r\n layout.qtCategories.forEach((qtCategory) => {\r\n qtCategory.defaultSubParts.forEach(subPart => {\r\n if (document.kvConfig.visualizerType === \"kvScene\") {\r\n if ((subPart.part.partId === \"center_island_edge\" && layout.type === 3)\r\n || (subPart.part.partId === \"crown_molding\" && (layout.type !== 1 && layout.type !== 4))) {\r\n return\r\n }\r\n }\r\n if (!featureGroups.some(parentObject => parentObject.partId === subPart.part.partId)) {\r\n featureGroups.push({\r\n selectionGroup: subPart.part.getParent().partName,\r\n partId: subPart.part.partId,\r\n quantity: 0,\r\n cartFeature: subPart.part.activeFeature, // it can be null here! it's ok since we need to show featureGroups from another layouts (for shop)\r\n featureGroup: subPart.part\r\n })\r\n }\r\n })\r\n })\r\n return featureGroups\r\n }\r\n\r\n let featureGroupsObjects = layout.getActiveFeatures(false, withLayerPositions, withDisabled);\r\n // console.log(\"parentGroups before wizard clean\", featureGroupsObjects);\r\n\r\n if (displayInMenu) {\r\n const {wizardList} = store.getState().wizardState;\r\n if (Array.isArray(wizardList) && wizardList.length) {\r\n wizardList.forEach(wizardItem => {\r\n if (wizardItem.hideItems && Array.isArray(wizardItem.wizardGroups) && wizardItem.wizardGroups.length) {\r\n featureGroupsObjects = featureGroupsObjects.filter(parentObject => {\r\n return wizardItem.wizardGroups.every(wizardGroup => {\r\n return (parentObject.featureGroup.dbName || parentObject.featureGroup.partName) !== wizardGroup.groupName\r\n })\r\n })\r\n }\r\n })\r\n }\r\n }\r\n\r\n const parentGroups = groupBy(featureGroupsObjects, 'selectionGroup');\r\n // console.log(\"parentGroups\", parentGroups);\r\n\r\n if (!Object.keys(parentGroups).length) {\r\n return null\r\n }\r\n\r\n const visType = getCommonVisualizerType();\r\n const sortByParents = visType === \"bathroom\"\r\n ? [\"Vanity\", \"Shower\", \"Shower Tub Combo\", \"Shower Accessories\", \"Bathtub\", \"Toilet\", \"Floor\", \"Walls\", \"Window\"]\r\n : visType === \"kitchen\"\r\n ? [\"Countertop\", \"CenterIsland\", \"Cabinet\", \"Appliances\", \"Walls\", \"Floor\"]\r\n : Object.keys(parentGroups);\r\n\r\n sortByParents.forEach(parentKey => {\r\n featureGroups = [...featureGroups, ...(parentGroups[parentKey] || [])]\r\n });\r\n\r\n if (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) {\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n featureGroups = featureGroups.filter(parentObject => {\r\n if (parentObject.partId === \"vanity_ws_towel_bar\" && vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand) {\r\n return false\r\n } else if ((parentObject.partId === \"vanity_middle\" || parentObject.partId === \"vanity_legs\") && vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet) {\r\n return false\r\n }\r\n return !(vanityParent && Object.keys(VANITY_TYPES).includes(parentObject.partId) && vanityParent.vanity_type !== parentObject.partId);\r\n })\r\n }\r\n // console.log(\"featureGroups\", featureGroups);\r\n\r\n // simple hardcoded sort\r\n return featureGroups.filter(parentObject => parentObject.cartFeature)\r\n}\r\n\r\n/**\r\n * Returns look navigation list height\r\n * @param lmFeatureParent {object}\r\n * @param lookViewType {number}\r\n * @param lookParentKeys {array}\r\n * @returns {number}\r\n */\r\nexport const getLookListHeight = (lmFeatureParent, lookViewType, lookParentKeys) => {\r\n const opened = lookParentKeys.includes(lmFeatureParent.partId);\r\n // const featuresLength = parentGroups[parentKey].length;\r\n let featuresLength = 1;\r\n if (lmFeatureParent.layerPositions) {\r\n if (POSSIBLE_ONE_POSITION.includes(lmFeatureParent.partId)) {\r\n featuresLength = 0;\r\n Object.keys(lmFeatureParent.layerPositions).forEach(position => {\r\n if (lmFeatureParent.getMatchingPositionFeature(position)) {\r\n featuresLength += 1;\r\n }\r\n });\r\n } else {\r\n featuresLength = Object.keys(lmFeatureParent.layerPositions).length\r\n }\r\n }\r\n let listHeight = 0;\r\n const styleNotificationIsVisible = getStyleAlertIsVisibleForGroup(lmFeatureParent);\r\n if (opened) {\r\n switch (lookViewType) {\r\n case 1:\r\n default:\r\n listHeight = 104 * featuresLength; // feature height 88 + feature margin 16\r\n break;\r\n case 2:\r\n listHeight = (172 + 22) * Math.ceil(featuresLength / 2); // feature height 156 + feature margin 16 + featureName 22\r\n break;\r\n case 3:\r\n listHeight = (280 + 22 + 16) * featuresLength; // feature height 280 + feature margin 16 + featureName 22\r\n break;\r\n }\r\n if (styleNotificationIsVisible) {\r\n listHeight += 96 // 80 + 8 + 8 margins\r\n }\r\n }\r\n return listHeight\r\n}\r\n\r\nconst disallowedSkus = [\"athtub\"];\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const checkIfFeatureCanBeAddedToTheCart = (feature) => {\r\n return (document.kvConfig.visualizerOnly || isVisibleForNavigation(feature, true)) && !disallowedSkus.some(sku => feature.dbFeature.sharedFeatureName.includes(sku))\r\n}\r\n\r\n/**\r\n * Creates cart items list depending on quotingTool features\r\n * @param qtActiveCategory {string} current active quote category name\r\n * @param loadByTheDefault {object} loadByTheDefault object from localstorage\r\n * @returns {array} array of cart items\r\n */\r\nexport const createCartList = (qtActiveCategory, loadByTheDefault = null) => {\r\n const featureGroups = getLookList(true);\r\n let cartItems = [];\r\n if (featureGroups && featureGroups.length) {\r\n featureGroups.forEach(featureGroup => {\r\n if ((getCurrentRoomType() === LOOK_ROOM_TYPES.as) && featureGroup.featureGroup.hideLayerCondition && featureGroup.featureGroup.hideLayerCondition()) {\r\n return\r\n }\r\n const existingCartItem = cartItems.find(cItem => {\r\n if (!featureGroup.cartFeature) {\r\n return null\r\n }\r\n return (cItem.partId === featureGroup.cartFeature.partId)\r\n && cItem.cartFeature.dbFeature.sharedFeatureName && featureGroup.cartFeature.dbFeature.sharedFeatureName\r\n && (cItem.cartFeature.dbFeature.sharedFeatureName === featureGroup.cartFeature.dbFeature.sharedFeatureName)\r\n });\r\n let quantity = 1;\r\n let loadByTheDefaultCItem = null;\r\n if (loadByTheDefault && loadByTheDefault.cartState && Array.isArray(loadByTheDefault.cartState.cartItems)){\r\n loadByTheDefaultCItem = loadByTheDefault.cartState.cartItems.find(cItem => {\r\n const foundFeature = featureGroup.featureGroup.getFeatureById(cItem.cartFeature.dbFeatureId, true)\r\n if (foundFeature) {\r\n return foundFeature.dbFeature.sharedFeatureName && featureGroup.cartFeature.dbFeature.sharedFeatureName\r\n && (foundFeature.dbFeature.sharedFeatureName === featureGroup.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n return cItem.cartFeature.dbFeatureId === featureGroup.cartFeature.dbFeature.id\r\n })\r\n if (loadByTheDefaultCItem) {\r\n quantity = loadByTheDefaultCItem.quantity;\r\n } else {\r\n quantity = 0\r\n }\r\n }\r\n\r\n if (existingCartItem && quantity) {\r\n if (!loadByTheDefaultCItem) {\r\n existingCartItem.quantity += quantity;\r\n }\r\n } else if (featureGroup.cartFeature && checkIfFeatureCanBeAddedToTheCart(featureGroup.cartFeature) && quantity) {\r\n const newCartItem = getCartItemObject(featureGroup.cartFeature, quantity, qtActiveCategory);\r\n newCartItem.addedBy = CART_ITEM_ADDED_BY.auto;\r\n cartItems.push(newCartItem);\r\n const relatedFeatures = getBundledFeatures(featureGroup.cartFeature);\r\n relatedFeatures.forEach((relatedFeature) => {\r\n let relatedItemQuantity = 1;\r\n if (loadByTheDefault && loadByTheDefault.cartState && Array.isArray(loadByTheDefault.cartState.cartItems)) {\r\n const alreadyAddedRelatedFeature = loadByTheDefault.cartState.cartItems.find(cartItem => {\r\n return cartItem.cartFeature.dbFeatureId === relatedFeature.dbFeature.id\r\n });\r\n if (alreadyAddedRelatedFeature) {\r\n relatedItemQuantity = alreadyAddedRelatedFeature.quantity\r\n }\r\n }\r\n const cartItem = getCartItemObject(relatedFeature, relatedItemQuantity, qtActiveCategory);\r\n cartItem.relatedProductParent = featureGroup.cartFeature;\r\n cartItem.addedBy = CART_ITEM_ADDED_BY.auto;\r\n cartItems.push(cartItem);\r\n })\r\n }\r\n })\r\n }\r\n return cartItems\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @param coords {object} metadata object // {min_x: 0.2109375, min_y: 1.3685185185185185, max_x: 1.9994791666666667, max_y: 2}\r\n * @param canvasElement {$ElementType} canvas\r\n * @param isMobile {boolean} on mobile we have different menu position\r\n * @returns {object}\r\n */\r\nexport const getLayerCenter = (coords, canvasElement, isMobile = false) => {\r\n if (!coords) {\r\n return null\r\n }\r\n let {clientWidth, clientHeight} = canvasElement;\r\n const COORDS_MAX = 1;\r\n // const openedMenuWidth = 712;\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"clientWidth - openedMenuWidth\", openedMenuWidth);\r\n // const threeQuater = clientWidth - (clientWidth / 4);\r\n // const featureViewWidth = (clientWidth - openedMenuWidth) / 2;\r\n let centerXPercentage = ((coords.min_x + ((coords.max_x - coords.min_x) / 2)) * 100) / COORDS_MAX;\r\n const centerYPercentage = ((coords.min_y + ((coords.max_y - coords.min_y) / 2)) * 100) / COORDS_MAX; // 1.5 ⋅ 100 : 2 = 75%\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // let scrollPercentage = 0;\r\n let x = 0;\r\n // if (isMobile) {\r\n //\r\n // const menuWidth = 320;\r\n // const shiftX = clientWidth - (clientWidth * centerXPercentage / 100);\r\n // const containerScrolled = shiftX < menuWidth;\r\n //\r\n // const startZeroPosition = IS_PRODUCT_JOURNEY ? 15 : 13;\r\n //\r\n // scrollPercentage = centerXPercentage < startZeroPosition\r\n // ? 0\r\n // : centerXPercentage > 54\r\n // ? centerXPercentage - ((100 - centerXPercentage) / 3) // 80 + 5 = 85\r\n // // ? centerXPercentage // 80 + 5 = 85\r\n // : centerXPercentage - ((35 - centerXPercentage) - ((centerXPercentage / 100) * (35 - centerXPercentage))) // 1) calculate percent of scroll from 75 2) 61 - 12%;\r\n // if (containerScrolled && (centerXPercentage > 50) && (centerXPercentage < 60)) {\r\n // scrollPercentage = centerXPercentage - ((100 - centerXPercentage) / 5)\r\n // }\r\n // x = (clientWidth * scrollPercentage) / 100;\r\n // } else {\r\n const zoomPercentage = 75;\r\n if (centerXPercentage < zoomPercentage) {\r\n\r\n const openedMenuWidth = IS_PRODUCT_JOURNEY ? 412 : 360;\r\n // const featureViewWidth = IS_PRODUCT_JOURNEY ? clientWidth - openedMenuWidth : (clientWidth - openedMenuWidth - 64); // 64 is sidebar\r\n const featureMinX = (clientWidth * (coords.min_x * 100 / COORDS_MAX)) / 100;\r\n const featureMaxX = (clientWidth * (coords.max_x * 100 / COORDS_MAX)) / 100;\r\n const featureCenter = featureMinX + (featureMaxX - featureMinX) / 2;\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"featureViewWidth\", featureViewWidth);\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // console.log(\"centerXPercentage\", centerXPercentage);\r\n // console.log(\"featureMinX\", featureMinX);\r\n // console.log(\"featureMaxX\", featureMaxX);\r\n const gPointPercent = 40; // don't ask me why, just because it is magic number\r\n const shiftX = clientWidth - (clientWidth * centerXPercentage / 100);\r\n if (IS_PRODUCT_JOURNEY && isMobile && (shiftX > GROHE_CONFIG.sidebarWidth.mobile)) {\r\n x = featureCenter - (clientWidth * (gPointPercent - centerXPercentage)) / 100;\r\n } else {\r\n x = featureCenter - (clientWidth * (gPointPercent - centerXPercentage)) / 100 - (openedMenuWidth / 2);\r\n }\r\n } else {\r\n x = clientWidth;\r\n }\r\n // }\r\n // console.log(\"scrollPercentage\", scrollPercentage);\r\n\r\n const y = (clientHeight * centerYPercentage) / 100; // 1920 ⋅ 75 : 100\r\n\r\n // console.log(\"getLayerCenter\", {x, y});\r\n // console.log(\"getLayerCenter\", {x, y, isMobile, featureX: centerXPercentage, clientWidth});\r\n return {x, y, isMobile, featureX: centerXPercentage, clientWidth}\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @param coords {object} metadata object // {min_x: 0.2109375, min_y: 1.3685185185185185, max_x: 1.9994791666666667, max_y: 2}\r\n * @param canvasElement {$ElementType} canvas\r\n * @returns {object}\r\n */\r\nexport const getCoordsCenter = (coords, canvasElement) => {\r\n let {clientWidth, clientHeight} = canvasElement;\r\n const COORDS_MAX = 1;\r\n let centerXPercentage = ((coords.min_x + ((coords.max_x - coords.min_x) / 2)) * 100) / COORDS_MAX;\r\n const centerYPercentage = ((coords.min_y + ((coords.max_y - coords.min_y) / 2)) * 100) / COORDS_MAX; // 1.5 ⋅ 100 : 2 = 75%\r\n\r\n const x = (clientWidth * centerXPercentage) / 100;\r\n const y = (clientHeight * centerYPercentage) / 100; // 1920 ⋅ 75 : 100\r\n\r\n // console.log(\"getLayerCenter\", {x, y});\r\n return {x, y}\r\n}\r\n\r\n/**\r\n * Returns layer center\r\n * @returns {object}\r\n */\r\nexport const getCropCoordsCenter = (feature) => {\r\n if (feature.metaData[\"CropCoords\"]) {\r\n const parsedCoords = getFeatureCropCoors(feature);\r\n // const {clientWidth, clientHeight} = canvasElement;\r\n const clientWidth = 1920;\r\n const clientHeight = 1080;\r\n\r\n const changed = {\r\n min_x: parsedCoords[0] / clientWidth,\r\n min_y: parsedCoords[1] / clientHeight,\r\n max_x: parsedCoords[2] / clientWidth,\r\n max_y: parsedCoords[3] / clientHeight,\r\n }\r\n // if (feature.partId) {\r\n // console.log(\"original\", feature.metaData[\"Coords\"]);\r\n // console.log(\"changed\", changed);\r\n // }\r\n return changed\r\n }\r\n return feature.metaData[\"Coords\"]\r\n}\r\n\r\n/**\r\n * Returns bool\r\n * @param lookFeature {object} feature\r\n * @param fromStyleAlertIcon {boolean}\r\n * @returns {array} not matching features\r\n */\r\nexport const getStyleAlertNotMatchingFeatures = (lookFeature, fromStyleAlertIcon = false) => {\r\n let notMatchingFeatures = [];\r\n if (lookFeature) {\r\n const featureGroup = lookFeature.getParent();\r\n\r\n if (fromStyleAlertIcon && !featureGroup.confirmedChange) {\r\n return notMatchingFeatures\r\n }\r\n\r\n const currentFeatureName = lookFeature.getSplittedFeatureName();\r\n // console.log(\"currentFeatureName\", currentFeatureName);\r\n const wallsPartIds = [\"left_wall\", \"front_wall\", \"right_wall\"];\r\n if (wallsPartIds.includes(lookFeature.partId)) {\r\n const layout = getCurrentLayout();\r\n wallsPartIds.forEach(wallPartId => {\r\n const wallGroup = layout.getFeatureGroupByPartId(wallPartId);\r\n if (wallGroup && wallGroup.activeFeature && (wallGroup.activeFeature.getSplittedFeatureName() !== currentFeatureName)) {\r\n // console.log(\"wallGroup.activeFeature.getSplittedFeatureName()\", wallGroup.activeFeature.getSplittedFeatureName());\r\n\r\n notMatchingFeatures.push(wallGroup.activeFeature);\r\n }\r\n })\r\n } else if (featureGroup.layerPositions && lookFeature.metaData.layerPosition) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature && (feature.dbFeature.id !== lookFeature.dbFeature.id)\r\n && (feature.getSplittedFeatureName() !== currentFeatureName)) {\r\n notMatchingFeatures.push(feature)\r\n }\r\n })\r\n }\r\n }\r\n return notMatchingFeatures\r\n}\r\n\r\n/**\r\n * Returns bool\r\n * @param featureGroup {object} featureGroup\r\n * @returns {boolean}\r\n */\r\nexport const getStyleAlertIsVisibleForGroup = (featureGroup) => {\r\n let alertIsVisible = false;\r\n if (featureGroup.layerPositions) {\r\n let names = [];\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature) {\r\n const featureName = feature.getSplittedFeatureName();\r\n names.push(featureName)\r\n }\r\n });\r\n alertIsVisible = Object.keys(featureGroup.layerPositions).some(position => {\r\n const feature = featureGroup.layerPositions[position];\r\n if (feature) {\r\n const featureName = feature.getSplittedFeatureName();\r\n return names.some(name => name !== featureName)\r\n }\r\n return false\r\n })\r\n }\r\n return alertIsVisible\r\n}\r\n\r\n/**\r\n * Returns array of not matched features partIds\r\n * @returns {array}\r\n */\r\nexport const getAllNotMatchingPartIds = () => {\r\n const layout = getCurrentLayout();\r\n const allFeatures = layout.getActiveFeatures(false);\r\n return allFeatures\r\n .filter(feature => getStyleAlertNotMatchingFeatures(feature.cartFeature).length)\r\n .map(feature => feature.partId);\r\n}\r\n\r\n/**\r\n * @param key {string} key\r\n * @param value {any}\r\n */\r\nexport const setLocalStorageItem = (key, value) => {\r\n try {\r\n window.localStorage.setItem(key, value);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n}\r\n\r\nexport const getLocalStorageItem = (key) => {\r\n let item = null;\r\n try {\r\n item = JSON.parse(window.localStorage.getItem(key));\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n return item\r\n}\r\n\r\n/**\r\n * zooms canvas to default position\r\n * @param imageCanvas {object}\r\n * @param setCanvasScale {function}\r\n */\r\nexport const zoomCanvasOut = (imageCanvas, setCanvasScale) => {\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(null, 1);\r\n // removed as we don't see crown molding on unzoom, decided not to unzoom to floor\r\n // const scrollCheck = document.body.scrollHeight - document.body.clientHeight;\r\n // if (!scrollCheck || (scrollCheck > (document.documentElement.scrollTop + 1))) {\r\n // $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 1000);\r\n // }\r\n setCanvasScale(1);\r\n }\r\n}\r\n\r\n/**\r\n * creates all available rooms and room scenes\r\n * @param returnAllLayouts {boolean}\r\n * @returns objects {array}\r\n */\r\nexport const getRoomLayouts = (returnAllLayouts = false) => {\r\n const newLooks = [];\r\n const layout = getCurrentLayout();\r\n const layoutNames = Object.keys(layout.layoutNames).filter(key => key !== \"All\");\r\n const parents = layout.getFeatures();\r\n const isAsBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n parents.forEach(parent => {\r\n parent.relatedItems.forEach(relItem => {\r\n layoutNames.forEach(layoutName => {\r\n const features = relItem.featuresList[layoutName];\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n const roomLayout = feature.dbFeature.metaData[\"RoomLayout\"];\r\n const roomScene = feature.dbFeature.metaData[\"RoomScene\"];\r\n if (document.kvConfig.toolVersion === 4) {\r\n if (feature.dbFeature.s3Bindings && Array.isArray(roomLayout) && !newLooks.some(look => look.lookLayout === layoutName)) {\r\n newLooks.push({\r\n lookLayout: layoutName,\r\n lookScene: \"1\",\r\n })\r\n }\r\n } else if (feature.dbFeature.s3Bindings && Array.isArray(roomLayout) && Array.isArray(roomScene) && roomLayout.length && roomScene.length) {\r\n if (!newLooks.some(look => (look.lookLayout === roomLayout[0]) && (look.lookScene === roomScene[0]))\r\n && (!isAsBathroom || (roomScene[0] === \"1\"))) {\r\n newLooks.push({\r\n lookLayout: roomLayout[0],\r\n lookScene: roomScene[0],\r\n })\r\n }\r\n }\r\n }\r\n })\r\n })\r\n });\r\n console.log(\"newLooks\", newLooks);\r\n if (returnAllLayouts || (document.kvConfig.toolVersion === 4) || (\r\n document.kvConfig.userId === 140000\r\n || document.kvConfig.userId === 140001\r\n || window.location.href.includes(\"quote_bathroom_2022\")\r\n || window.location.href.includes(\"qc_main_bathroom_set_2022\"))) {\r\n return newLooks\r\n }\r\n const currentName = layout.getCurrentLayoutName();\r\n // if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n // return newLooks\r\n // }\r\n return newLooks.filter(look => look.lookLayout === currentName)\r\n}\r\n\r\n/**\r\n * parses passed URL, and returns look ID, look category and sku\r\n * @param checkURL {string}\r\n * @returns parsedUrl {object}\r\n */\r\nexport const getParsedLookUrl = (checkURL = window.location.href) => {\r\n const regexForRoomPreset = /\\/look(.*?)$/;\r\n let lookIdFromUrl = checkURL.includes(\"/look\") ? checkURL.match(regexForRoomPreset)[1] : null;\r\n\r\n if (!lookIdFromUrl) {\r\n return {}\r\n }\r\n\r\n let featureGroupFromUrl = \"\";\r\n let skuFromUrl = \"\";\r\n\r\n let splittedLookPath = lookIdFromUrl.split(\"/\");\r\n if (lookIdFromUrl && splittedLookPath.length) {\r\n lookIdFromUrl = +splittedLookPath[0].replace(\"-\", \"\");\r\n featureGroupFromUrl = splittedLookPath[2] ? splittedLookPath[1] : null;\r\n skuFromUrl = splittedLookPath[2] || splittedLookPath[1];\r\n }\r\n // console.log(\"{lookIdFromUrl, featureGroupFromUrl, skuFromUrl}\", {lookIdFromUrl, featureGroupFromUrl, skuFromUrl});\r\n\r\n return {lookIdFromUrl, featureGroupFromUrl, skuFromUrl}\r\n}\r\n\r\n/**\r\n * compares currect and common coords - gives max & min values\r\n * @param currentCoords {object}\r\n * @param commonCoords {object}\r\n * @returns {object}\r\n */\r\nexport const compareCoords = (currentCoords, commonCoords) => {\r\n if (currentCoords) {\r\n [\"min_x\",\"min_y\",].forEach(coordProp => {\r\n if (!commonCoords[coordProp] || (commonCoords[coordProp] > currentCoords[coordProp])) {\r\n commonCoords[coordProp] = currentCoords[coordProp];\r\n }\r\n });\r\n [\"max_x\", \"max_y\"].forEach(coordProp => {\r\n if (!commonCoords[coordProp] || (commonCoords[coordProp] < currentCoords[coordProp])) {\r\n commonCoords[coordProp] = currentCoords[coordProp];\r\n }\r\n });\r\n }\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * compares currect and common coords - gives max & min values\r\n * @param feature {featureInterface}\r\n * @param isWizard {boolean}\r\n * @returns {object}\r\n */\r\nexport const getFeatureCoords = (feature, isWizard = false) => {\r\n if (document.kvConfig.visualizerType === \"kvScene\"\r\n && feature.metaData[\"RoomLayout\"] && feature.metaData[\"RoomLayout\"].includes('Layout1')\r\n && feature.metaData[\"RoomScene\"] && feature.metaData[\"RoomScene\"].includes('1')) {\r\n if ((feature.partId === \"top_cabinet\" || feature.partId === \"bottom_cabinet\")) {\r\n return feature.metaData[\"Coords\"]\r\n ? Object.assign({}, feature.metaData[\"Coords\"], {max_x: 0.2}) // do not zoom to right part of it\r\n : {min_x: 0, min_y: 0, max_x: 0.2, max_y: 0.38}\r\n } else if (feature.partId === \"crown_molding\") {\r\n return isWizard\r\n ? {min_x: 0.5, min_y: 0, max_x: 0.7, max_y: 0.1}\r\n : {min_x: 0.4, min_y: 0, max_x: 0.6, max_y: 0.1} // do not zoom to left part of it\r\n }\r\n\r\n }\r\n if (document.kvConfig.visualizerType === \"bvLook\" && feature.metaData[\"Coords\"]) {\r\n\r\n if (feature.partId === \"shower_wall\") {\r\n if (feature.metaData[\"RoomLayout\"] && feature.metaData[\"RoomLayout\"].includes('Layout18')) {\r\n return Object.assign({}, feature.metaData[\"Coords\"], {max_x: feature.metaData[\"Coords\"].max_x / 1.8})\r\n }\r\n }\r\n }\r\n return feature.metaData[\"Coords\"]\r\n}\r\n\r\n/**\r\n * parses passed URL, and returns look ID, look category and sku\r\n * @param featureGroup {object}\r\n * @param clickedFeature {object}\r\n * @param canvasElement {$ElementType} canvas\r\n * @param layerPosition {string}\r\n * @returns parsedUrl {object}\r\n */\r\nexport const getCommonCoords = (featureGroup, clickedFeature = null, canvasElement = null, layerPosition = \"\") => {\r\n\r\n const layout = getCurrentLayout();\r\n let zoomFeatureGroup;\r\n switch (featureGroup.partId) {\r\n case \"edge_profile\":\r\n zoomFeatureGroup = layout.getFeatureGroupByPartId(\"countertop\") || featureGroup;\r\n break;\r\n case \"center_island_edge\":\r\n zoomFeatureGroup = layout.getFeatureGroupByPartId(\"center_island_countertop\") || featureGroup;\r\n break;\r\n default:\r\n zoomFeatureGroup = featureGroup\r\n break;\r\n }\r\n\r\n let commonCoords = clickedFeature ? clickedFeature.metaData.Coords || {} : {};\r\n if (!clickedFeature && layerPosition) {\r\n clickedFeature = zoomFeatureGroup.getMatchingPositionFeature(layerPosition);\r\n }\r\n\r\n const navItems = layout.designNavigationItems({part: zoomFeatureGroup}, {}, \"\", clickedFeature, true);\r\n\r\n for (let i = 0; i < navItems.length; i++) {\r\n const currentFeature = navItems[i].part;\r\n let currentCoords = getCropCoordsCenter(currentFeature, canvasElement);\r\n commonCoords = compareCoords(currentCoords, commonCoords);\r\n }\r\n if ((getCurrentRoomType() === LOOK_ROOM_TYPES.as) && [\"front_wall\", \"right_wall\"].some(partId => zoomFeatureGroup.partId === partId)) {\r\n commonCoords.min_x = 0.8 // because of the reflection in mirror, it sets min_x to 0.1, so the menu is not scrolling on open\r\n }\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * toggles array val\r\n * @param array {array}\r\n * @param value {any}\r\n * @returns array {array}\r\n */\r\nexport const toggleArrayValue = (array, value) => {\r\n let newArray = [...array];\r\n let index = newArray.indexOf(value);\r\n (index >= 0) ? newArray.splice(index, 1) : newArray.push(value);\r\n return newArray;\r\n};\r\n\r\n/**\r\n * Checks if it is needed to show a context menu\r\n * @param partId {string}\r\n * @param layerPosition {string}\r\n * @param fabricatorData {object}\r\n * @returns object\r\n */\r\nexport const checkForContextMenuCommon = (partId, layerPosition, fabricatorData) => {\r\n const returnObject = {\r\n allButtons: [], // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n showButtons: [] // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n }\r\n if (!partId) {\r\n return returnObject\r\n }\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n if (isBathroom && (fabricatorData && fabricatorData.isEncore)) {\r\n return returnObject\r\n }\r\n const allContextMenus = isBathroom ? ALL_CONTEXT_MENU : ALL_CONTEXT_MENU_KITCHEN;\r\n if (!allContextMenus.includes(partId)) {\r\n return returnObject\r\n }\r\n // if (imageCanvas.current && imageCanvas.current.setHoveredLayer) {\r\n // imageCanvas.current.renderGreenLayerByZindex(hoveredLayer.zIndex);\r\n\r\n let whereToCheck = isBathroom\r\n ? [CONTEXT_MENU_VANITY_BUTTONS, CONTEXT_MENU_BATHTUB_BUTTONS, CONTEXT_MENU_SPLIT_WALL, CONTEXT_MENU_SHOWER_ALL,\r\n CONTEXT_MENU_SHOWER_OTHER]\r\n : [CONTEXT_MENU_KITCHEN_CENTER_ISLAND, CONTEXT_MENU_KITCHEN_COUNTERTOPS];\r\n\r\n if (isBathroom && IS_QKB_UI) {\r\n whereToCheck.push(CONTEXT_MENU_SHOWER_ACCESSORIES);\r\n }\r\n\r\n let checkArray = whereToCheck.find(contextMenuArray => contextMenuArray.includes(partId)) || [];\r\n\r\n if (!checkArray.length) {\r\n return returnObject\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n checkArray.forEach(checkPartId => {\r\n if (checkPartId === \"vanity_legs\" && layout.parts[\"Vanity\"] && layout.parts[\"Vanity\"].vanity_type !== VANITY_TYPES.vanity_cabinet) {\r\n return\r\n } else if (document.kvConfig.visualizerType === \"kvScene\" && checkPartId === \"center_island_edge\" && layout.type === 3) {\r\n return\r\n }\r\n if (layout.disabledClickablePartIds.includes(checkPartId) || hardCodelyRemovedClicking(checkPartId, layout)) {\r\n return;\r\n }\r\n const featureGroup = layout.getFeatureGroupByPartId(checkPartId);\r\n\r\n if (!isBathroom) {\r\n if (featureGroup && featureGroup.features.length > 0) {\r\n returnObject.allButtons.push({\r\n partId: featureGroup.partId,\r\n translateId: featureGroup.translateId,\r\n });\r\n }\r\n return;\r\n }\r\n\r\n const forFeature = featureGroup && layerPosition && featureGroup.layerPositions && featureGroup.layerPositions[layerPosition]\r\n ? featureGroup.layerPositions[layerPosition]\r\n : null;\r\n const withQuotingToolFeatures = layout.partIdExistInQtCategory(checkPartId);\r\n if (featureGroup && layout.hasNavItemsLength({part: featureGroup}, {}, \"\", forFeature, withQuotingToolFeatures)\r\n && ((featureGroup.partId !== \"vanity_countertop\") || featureGroup.activeFeature)) {\r\n returnObject.allButtons.push({\r\n partId: featureGroup.partId,\r\n translateId: featureGroup.translateId,\r\n });\r\n }\r\n });\r\n\r\n if (!returnObject.allButtons.length) {\r\n return returnObject\r\n }\r\n\r\n // wizard item check\r\n const {wizardState, bathroomVisualizerState, fabricatorState} = store.getState();\r\n const {wizardList, wizardIsActive} = wizardState;\r\n const {activePreset} = bathroomVisualizerState;\r\n\r\n returnObject.showButtons = returnObject.allButtons.sort((a) => partId === a.partId ? -1 : 1);\r\n\r\n const activeVanityType = layout.parts[\"Vanity\"] && layout.parts[\"Vanity\"].vanity_type ? layout.parts[\"Vanity\"].vanity_type : VANITY_TYPES.vanity_cabinet;\r\n const isVanity = isBathroom && CONTEXT_MENU_VANITY_BUTTONS.includes(partId);\r\n const isShower = isBathroom && (CONTEXT_MENU_SHOWER_ALL.includes(partId) || CONTEXT_MENU_SHOWER_OTHER.includes(partId));\r\n const isCenterIsland = !isBathroom && CONTEXT_MENU_KITCHEN_CENTER_ISLAND.includes(partId);\r\n let existingWizardItem = null;\r\n\r\n if (isVanity && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as)) {\r\n returnObject.showButtons = returnObject.allButtons.filter(button => {\r\n return !CONTEXT_MENU_VANITY_ONLY.includes(button.partId) || CONTEXT_MENU_VANITY_ONLY.includes(button.partId) && button.partId === partId\r\n });\r\n if (!returnObject.showButtons.some(testBtn => CONTEXT_MENU_VANITY_ONLY.includes(testBtn.partId))) {\r\n returnObject.showButtons.push({\r\n partId: activeVanityType,\r\n translateId: activeVanityType === \"vanity_cabinet\" ? \"visualizer.bathroom.vanity.vanity\" : \"visualizer.bathroom.vanity.\" + activeVanityType,\r\n hasSubMenu: true,\r\n });\r\n }\r\n if (!IS_QKB_UI) {\r\n const sinkIndex = returnObject.showButtons.findIndex(button => button.partId === \"vanity_sink\");\r\n if (sinkIndex > -1) {\r\n const sinkParent = layout.getFeatureGroupByPartId(\"vanity_sink\");\r\n const isPedestal = sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MountType\"] && sinkParent.activeFeature.metaData[\"MountType\"].includes(\"ST\");\r\n returnObject.showButtons.splice(isPedestal ? sinkIndex : sinkIndex + 1, 0, {\r\n partId: \"vanity_pedestal_sink\",\r\n translateId: \"visualizer.bathroom.vanity.vanity_pedestal_sink\",\r\n });\r\n }\r\n }\r\n const backsplashIndex = returnObject.showButtons.findIndex(button => button.partId === \"vanity_backsplash\");\r\n if (backsplashIndex > -1) {\r\n const backsplashParent = layout.getFeatureGroupByPartId(\"vanity_backsplash\");\r\n // console.log(\"backsplashParent\", backsplashParent);\r\n if (backsplashParent && backsplashParent.hideLayerCondition()) {\r\n returnObject.showButtons.splice(backsplashIndex, 1);\r\n }\r\n }\r\n\r\n if (Array.isArray(wizardList) && wizardList.length && (!IS_QKB_UI || wizardIsActive)) {\r\n existingWizardItem = getExistingWizardForGroups(CONTEXT_MENU_VANITY_ONLY, wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const vanityButtonIndex = returnObject.showButtons.findIndex(button => CONTEXT_MENU_VANITY_ONLY.includes(button.partId));\r\n if (vanityButtonIndex > -1) {\r\n const vanityWizardButton = {\r\n partId: \"vanity_wizard-\" + existingWizardItem.id,\r\n translateId: activeVanityType === \"vanity_cabinet\" ? \"visualizer.bathroom.vanity.vanity\" : \"visualizer.bathroom.vanity.\" + activeVanityType,\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n fabricatorState.isAmericanStandard\r\n ? returnObject.showButtons.splice(vanityButtonIndex, 1, vanityWizardButton)\r\n : returnObject.showButtons.unshift(vanityWizardButton)\r\n }\r\n if (fabricatorState.isAmericanStandard) {\r\n returnObject.showButtons = returnObject.showButtons.filter(button => !button.partId.includes(\"sink\")) //LX-791\r\n }\r\n }\r\n }\r\n\r\n } else if (isShower && Array.isArray(wizardList) && wizardList.length) {\r\n existingWizardItem = getExistingWizardForGroups([...CONTEXT_MENU_SHOWER_ALL, ...CONTEXT_MENU_SHOWER_OTHER], wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const showerWizardButton = {\r\n partId: \"shower_wizard-\" + existingWizardItem.id,\r\n translateId: \"visualizer.bathroom.shower.shower\",\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n if (fabricatorState.isLixil) {\r\n returnObject.showButtons = [showerWizardButton]\r\n } else {\r\n returnObject.showButtons.push(showerWizardButton)\r\n }\r\n }\r\n } else if (isCenterIsland && Array.isArray(wizardList) && wizardList.length) {\r\n existingWizardItem = getExistingWizardForGroups(CONTEXT_MENU_KITCHEN_CENTER_ISLAND, wizardList, activePreset);\r\n if (existingWizardItem) {\r\n const counteropWizardButton = {\r\n partId: \"counterop_wizard-\" + existingWizardItem.id,\r\n translateId: \"wizard.contextMenu.wizardBuild\",\r\n isWizard: true,\r\n wizardId: existingWizardItem.id,\r\n };\r\n returnObject.showButtons.push(counteropWizardButton)\r\n }\r\n }\r\n\r\n if (isBathroom && isShower && IS_QKB_UI && CONTEXT_MENU_SHOWER_ACCESSORIES.some(accPartId => {\r\n const accFg = layout.getFeatureGroupByPartId(accPartId);\r\n return accFg && layout.hasNavItemsLength({part: accFg})\r\n })) {\r\n const accessoriesButton = {\r\n partId: \"accessories\",\r\n translateId: \"visualizer.bathroom.accessories\",\r\n hasSubMenu: true,\r\n };\r\n returnObject.showButtons.push(accessoriesButton);\r\n }\r\n\r\n if (IS_QKB_UI && document.kvConfig.visualizerOnly) {\r\n // remove wizard, as we can't jump to the quotingtool\r\n returnObject.showButtons = returnObject.showButtons.filter(button => !button.isWizard)\r\n } else if (existingWizardItem && existingWizardItem.hideContext) {\r\n returnObject.showButtons = returnObject.showButtons.filter(button => button.isWizard) // wizard only\r\n }\r\n\r\n return returnObject;\r\n};\r\n\r\nexport const getOptionStyles = (filterValue) => { // we have the logic with additionalImages in the FeatureWizardBody component\r\n let styles = {};\r\n let thumbnail = (Array.isArray(filterValue.additionalImages) && filterValue.additionalImages.length)\r\n ? filterValue.additionalImages[0].imageUrl\r\n : s3FilterImagePath(filterValue.icon);\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail) {\r\n styles.backgroundColor =\r\n filterValue.value && filterValue.value.includes(\"BLACK\")\r\n ? \"black\"\r\n : filterValue.value && filterValue.value.includes(\"BRONZE\")\r\n ? \"#3f270f\"\r\n : filterValue.value && filterValue.value.includes(\"NICKEL\")\r\n ? \"#727472\"\r\n : filterValue.value;\r\n }\r\n return styles\r\n};\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const dbFeatureInterface = {\r\n id: PropTypes.number, // unique id fro every feature\r\n price: PropTypes.number, // retail price\r\n cost: PropTypes.number, // fabricator price\r\n shippingCost: PropTypes.number, // shippingCost\r\n fabricatorCost: PropTypes.number, // discount price\r\n}\r\n\r\nexport const featureInterface = {\r\n metaData: PropTypes.object,\r\n dbFeature: PropTypes.shape(dbFeatureInterface),\r\n};\r\n\r\nexport const featureCollectionInterface = {\r\n id: PropTypes.number.isRequired,\r\n features: PropTypes.arrayOf(PropTypes.shape(featureInterface)),\r\n};\r\n\r\nexport const featureGroupInterface = {\r\n partName: PropTypes.string.isRequired,\r\n};\r\n\r\nexport const navItemInterface = {\r\n part: PropTypes.shape(featureInterface).isRequired,\r\n}\r\n","import invert from 'lodash/invert';\r\nimport uniqBy from 'lodash/uniqBy';\r\n\r\nimport {getFilterGroupValues, splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return this.load_(dbFeature, new this.constructor(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n if (!dbFeature.s3Bindings && features === \"featuresParts\") { // keep not-in-visualizer features in the main list\r\n features = \"features\"\r\n }\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName, dbFeature.groupName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"KitchenV5\")\r\n if (!dbFeature.metaData[\"CropCoords\"]) {\r\n dbFeature.s3Bindings = dbFeature.s3Bindings.map(object => {\r\n object.path = object.path.replace(\"-copy\", \"\");\r\n return object\r\n })\r\n }\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n let someLayoutFound = false;\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n if (!someLayoutFound) {\r\n someLayoutFound = true;\r\n }\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if (layoutName) {\r\n someLayoutFound = true;\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout || !someLayoutFound) {\r\n part.notAvailableInVisualizer = true;\r\n if (!someLayoutFound) {\r\n // remove old version layers so the feature will be as simple not-in-visualizer feature\r\n part.metaData.RoomLayout = null;\r\n part.dbFeature.metaData.RoomLayout = null;\r\n part.dbFeature.s3Bindings = null;\r\n }\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n // const {firstOpenedFeature, firstOpenedConditions, returnAllFeatures} = restOptions;\r\n const {returnAllFeatures} = restOptions;\r\n const featuresList = this.getFeaturesForNavigationFrom(restOptions);\r\n\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = returnAllFeatures\r\n ? filteredAvailableFeatures\r\n : this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n if (returnAllFeatures) {\r\n featuresToDisplay = uniqBy(featuresToDisplay, (feature) => feature.dbFeature.sharedFeatureName);\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = this.hasNoVisualizerLayers) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.hideLayerCondition && this.hideLayerCondition()) {\r\n this.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n * @param clickFrom {string} // is used for countertop and cabinet switchers, and walls\r\n */\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (clickFrom !== \"all_walls\") {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n }\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId);\r\n if (this.partId === \"bottom_cabinet\" || this.partId === \"bottom_handle\" || (this.activeFeatureParts.length > 3)) {\r\n activeFeaturePart.layer.zIndex = activeFeaturePart.layer.zIndex + (keyIndex + 1);\r\n return\r\n }\r\n activeFeaturePart.layer.zIndex = activeFeaturePart.layer.zIndex + ((keyIndex + 1) * 10);\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName || \"\";\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null || this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n switch (this.partId) {\r\n case \"center_island_countertop\": {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/2 0 /g, \"\")\r\n .replace(/Center Island Countertop 1 /g, \"\");\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0]\r\n }\r\n break;\r\n }\r\n case \"countertop\":\r\n case \"backsplash\": {\r\n const manufacturerFilter = getFilterGroupValues(this, {id: 35});\r\n if (Array.isArray(manufacturerFilter)) {\r\n this._customDisplayName = this._customDisplayName + manufacturerFilter[0]\r\n }\r\n break;\r\n }\r\n case \"sink\":\r\n case \"center_island_sink\": {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/ D/g, \"\")\r\n .replace(/ Countertop/g, \"\")\r\n .replace(/ Island/g, \"\")\r\n break;\r\n }\r\n case \"hood\": {\r\n // cases when LG LSHD3089SS and LG LSHD3089DS should match\r\n this._customDisplayName = this._customDisplayName.substring(0, this._customDisplayName.length - 2);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n if (this.dbFeature.wasUpdatedFromAnotherResponse) {\r\n this.dbFeature.wasUpdatedFromAnotherResponse = false;\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, SIDE_POSITIONS, PAN_POSITIONS} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../config\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"BathroomV5\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithSides(filters, searchText) {\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n\r\n let navFeatures = [];\r\n const activePosition = this.activeFeature && this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n ? this.activeFeature.dbFeature.metaData[\"layerPosition\"]\r\n : SIDE_POSITIONS[0];\r\n navFeatures = featuresToDisplay.filter(feature => {\r\n return feature.dbFeature.metaData[\"layerPosition\"] === activePosition\r\n })\r\n featuresToDisplay.forEach(feature => {\r\n const skuName = feature.metaData[\"SkuName\"] ? feature.metaData[\"SkuName\"][0] : null;\r\n if ((IS_BATHROOM_OLD_BV_SCENE && !skuName) || (skuName && navFeatures.every(navFeature => {\r\n const skuName2 = navFeature.metaData[\"SkuName\"] ? navFeature.metaData[\"SkuName\"][0] : null;\r\n return skuName2 && (skuName2 !== skuName)\r\n }))) {\r\n navFeatures.push(feature)\r\n }\r\n })\r\n return this.returnUniqueNavFeatures(navFeatures)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n }\r\n })\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\", \"replacement_tub\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const conditions = [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }];\r\n if (document.kvConfig.userId === 140045) { // new_bathroom_2021.quotesflooring.com\r\n conditions.push({\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const checkSidesFeatureGroups = [\"shower_door\", \"shower_fixture\", \"grab_bar\", \"large_corner_seat\",\r\n \"replacement_tub\", \"shower_pan_combo\", \"corner_caddie\", \"large_corner_caddie\", \"soap_dish\", \"walk_in_tub\",\r\n \"shower_seats\"];\r\n if (checkSidesFeatureGroups.includes(this.partId)) {\r\n const positionsAvailable = PAN_POSITIONS.filter(position => {\r\n return !!this.getMatchingPositionFeature(position, forFeature);\r\n });\r\n return positionsAvailable.length > 1\r\n }\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName;\r\n if (this.partId ===\"vanity_sink\" || this.partId ===\"vanity_faucet\") {\r\n this._customDisplayName = this._customDisplayName.replace(/ D/g, \"\")\r\n } else if (this.partId === \"shower_interior_wall\") {\r\n // White Acrylic 30in 1 Moment Flat -> White Acrylic\r\n // Grey Garden 48in 1 Solid Surface -> Grey Garden\r\n this._customDisplayName = this._customDisplayName.replace(/ 60in/g, \"\").replace(/ 48in/g, \"\").replace(/ 30in/g, \"\").split(\" 1 \")[0]\r\n } else if (this.partId === \"shower_pan_combo\" && Array.isArray(this.metaData[\"SkuName\"]) && this.metaData[\"SkuName\"][0]) {\r\n this._customDisplayName = this.metaData[\"SkuName\"][0]\r\n }\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n if (this.partId === \"right_wall\") {\r\n arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n\r\n // OLD SHOWER LOGIC\r\n\r\n rememberPreviousSelection(shower, currentActiveFeature) {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n const wallConfiguration = shower.layout.parts[\"Shower Tub Combo\"] && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration;\r\n if (this.currentShowerBodyId !== currentShowerBodyId && currentActiveFeature && !currentActiveFeature.partName.includes(\"laceholder\")) {\r\n if (!this.previouslySelectedFeatures[layoutAbbr]) {\r\n this.previouslySelectedFeatures[layoutAbbr] = {}\r\n }\r\n this.previouslySelectedFeatures[layoutAbbr][this.currentShowerBodyId] = currentActiveFeature; // remember previous active item\r\n if (wallConfiguration\r\n && wallConfiguration.features.some(feature => feature.showerBodyId === this.currentShowerBodyId)) {\r\n wallConfiguration.features.forEach((wallConfigurationFeature) => { // remember previous active item for all wall conf\r\n this.previouslySelectedFeatures[layoutAbbr][wallConfigurationFeature.showerBodyId] = currentActiveFeature;\r\n })\r\n }\r\n }\r\n this.currentShowerBodyId = currentShowerBodyId; // set new shower type\r\n }\r\n\r\n setDefaultAccordingToPreviousSelect(shower, filteredFeatures, hardCodedDefaultName, placeholderDefaultName = \"laceholder\") {\r\n const layoutAbbr = shower.layout.getCurrentLayoutAbbreviation();\r\n const currentShowerBodyId = IntermediatePart.getCurrentShowerBodyId(shower);\r\n // console.log('currentShowerBodyId', currentShowerBodyId);\r\n // console.log('this.previouslySelectedFeatures', this.previouslySelectedFeatures);\r\n\r\n if (this.currentShowerBodyId !== currentShowerBodyId\r\n && this.previouslySelectedFeatures[layoutAbbr]\r\n && this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]\r\n && filteredFeatures.some(f => f.dbFeature.id === this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId].dbFeature.id)) {\r\n this.activeFeature = this.previouslySelectedFeatures[layoutAbbr][currentShowerBodyId]; // restore from previous chosen\r\n } else {\r\n const hardCodedDefault = hardCodedDefaultName && filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName && feature.dbFeature.displayName.includes(hardCodedDefaultName);\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(placeholderDefaultName);\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n /** shower door, fixture methods **/\r\n static getCurrentShowerBodyId(shower) {\r\n let currentShowerBodyId = \"\";\r\n const showerTubComboIsActive = shower.showerTubComboIsActive();\r\n if (!showerTubComboIsActive && shower.showerBody && shower.showerBody.activeFeature) {\r\n currentShowerBodyId = shower.showerBody.activeFeature.showerBodyId;\r\n } else if (showerTubComboIsActive && shower.layout.parts[\"Shower Tub Combo\"]\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration\r\n && shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature) {\r\n currentShowerBodyId = shower.layout.parts[\"Shower Tub Combo\"].wallConfiguration.activeFeature.showerBodyId;\r\n }\r\n return currentShowerBodyId\r\n }\r\n\r\n\r\n}\r\n","import {useEffect} from \"react\";\r\n\r\nimport {compareCoords, getCommonCoords, getFeatureCoords} from \"../../lookFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {featureHasSelectedFilters, s3FilterImagePath} from \"../../../../../misc/utils\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport Misc from \"../../../../../misc/misc\";\r\nimport {getCompressedFeature} from \"../../../../../misc/backendFunctions\";\r\nimport {getBvFeatures} from \"../../../../../api/server-api\";\r\nimport store from \"../../../../../store\";\r\nimport {setWizardMissingFeatures} from \"../../../../../actions/wizardFunctions\";\r\nimport {getFeatureGroupFeaturesQuantity} from \"../../lookNavigationFunctions\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType} from \"../../../../../config\";\r\nimport {isSameVisualizerWizard, selectedWizardGroupIsNotInCurrentStepAnymore} from \"./lookWizardFunctions2\";\r\n\r\nconst regexForWizardId = /\\/wizard\\/(.*?)$/;\r\n\r\n/**\r\n * returns current wizard list for visualizer\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param activePreset {string|number}\r\n * @returns {wizardItemInterface[]}\r\n */\r\nexport const getCurrentWizardList = (wizardList, activePreset) => {\r\n return wizardList.filter(wizardItem => !wizardIsDisabled(wizardItem, activePreset))\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardItem {wizardItemInterface}\r\n * @param activePreset {string|number}\r\n * @returns {boolean}\r\n */\r\nexport const wizardIsDisabled = (wizardItem, activePreset) => {\r\n if (!isSameVisualizerWizard(wizardItem)) {\r\n return true\r\n }\r\n return !wizardItem.disabledScenes || (typeof activePreset !== \"undefined\" && wizardItem.disabledScenes.includes(activePreset))\r\n}\r\n\r\n/**\r\n * checks if we need to show the wizard in the project scope and shoppingcart for the QuotingTool\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param wizardIsActive {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const showWizardInsteadOfQT = (wizardList, wizardIsActive) => {\r\n return wizardIsActive && wizardList.length\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param location {object}\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getActiveWizardItem = (wizardList, location) => {\r\n if (!Array.isArray(wizardList) || !location) {\r\n return null\r\n }\r\n const match = location.pathname.match(regexForWizardId);\r\n if (!Array.isArray(match) || !match[1]) {\r\n return null\r\n }\r\n const stringId = +match[1];\r\n return wizardList.find(wizItem => wizItem.id === stringId);\r\n}\r\n\r\n\r\n/**\r\n * returns layout's featureGroup\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns featureGroup {featureGroupInterface}\r\n */\r\nexport const getFeatureGroupFromWizardGroup = (wizardGroup) => {\r\n if (!wizardGroup) {\r\n return null\r\n }\r\n const layout = getCurrentLayout();\r\n if (layout.visualizerType === AVAILABLE_VISUALIZER_TYPES.Kitchen || layout.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene) {\r\n switch (wizardGroup.groupName) {\r\n case \"Edge Profile\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_edge\" : \"edge_profile\")\r\n case \"Sink\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_sink\" : \"sink\")\r\n case \"Faucet\":\r\n return layout.getFeatureGroupByPartId(wizardGroup.isCenterIslandGroup ? \"center_island_faucet\" : \"faucet\")\r\n default:\r\n break;\r\n }\r\n }\r\n return layout.getFeatureGroupByGroupName(wizardGroup.groupName)\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param partId {string}\r\n * @param activePreset {number|string} // check\r\n * @param firstOnly {boolean} // determines if we need to check only first step featureGroups or all\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const categoryIsInTheWizard = (wizardList, partId = \"\", activePreset, firstOnly = true) => {\r\n if (!Array.isArray(wizardList) || !partId) {\r\n return null\r\n }\r\n return wizardList.find(wizItem => {\r\n if (wizardIsDisabled(wizItem, activePreset)) {\r\n return false\r\n }\r\n let lookWhere = firstOnly ? getCurrentGroupsFromSource(\"0\", wizItem) : wizItem.wizardGroups;\r\n if (firstOnly && Array.isArray(lookWhere) && lookWhere.length && lookWhere.every(wizGroup => wizGroup.nodeType === \"custom\")) {\r\n lookWhere = lookWhere.reduce((total, wizGroup) => {\r\n return [...total, ...getCurrentGroupsFromSource(wizGroup.id, wizItem)]\r\n }, []);\r\n }\r\n return lookWhere.some(wizardGroup => {\r\n if (wizardGroup.nodeType !== \"group\") {\r\n return false;\r\n }\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return false\r\n }\r\n return featureGroup.partId === partId\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param params {object}\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getMaterialsWizardItem = (wizardList, params) => {\r\n if (!Array.isArray(wizardList) || !params) {\r\n return null\r\n }\r\n return wizardList.find(wizItem => {\r\n if (!isSameVisualizerWizard(wizItem)) {\r\n return false\r\n }\r\n return (Misc.getUrlFromString(wizItem.name) === params.partName || wizItem.id === +params.partName)\r\n }) || getDefaultMaterialsWizardItem()\r\n}\r\n\r\n/**\r\n * returns default wizard on switch to page\r\n * @returns wizardActiveItem {wizardItemInterface}\r\n */\r\nexport const getDefaultMaterialsWizardItem = () => {\r\n const {quotesState, wizardState} = store.getState();\r\n const {wizardList, allWizardsValues, wizardActiveItem} = wizardState;\r\n const {activeQuoteIndex} = quotesState;\r\n if (!Array.isArray(wizardList)) {\r\n return null\r\n }\r\n const currentVisType = getCommonVisualizerType();\r\n const lastSelectedWizardInThisQuote = Array.isArray(allWizardsValues) ? allWizardsValues.find(wizItem => {\r\n return wizItem.quoteIndex === activeQuoteIndex && wizItem.isLastActiveWizard\r\n && isSameVisualizerWizard(wizItem, currentVisType)\r\n }) : null;\r\n if (lastSelectedWizardInThisQuote) {\r\n const foundWizItem = wizardList.find(wizItem => wizItem.id === lastSelectedWizardInThisQuote.wizardItemId);\r\n if (foundWizItem) {\r\n return foundWizItem\r\n }\r\n }\r\n if (wizardActiveItem && isSameVisualizerWizard(wizardActiveItem, currentVisType)) {\r\n return wizardActiveItem\r\n }\r\n return wizardList.find(wizItem => isSameVisualizerWizard(wizItem, currentVisType)) || wizardList[0]\r\n}\r\n\r\nlet cachedSiblingFeatures = []; // {wizardId: number, groups: [{}, {}], totalFeatures: [] }\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param source {string}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns array {[wizardGroupInterface]}\r\n */\r\nexport const getCurrentGroupsFromSource = (source, wizardActiveItem) => {\r\n if (!wizardActiveItem) {\r\n return []\r\n }\r\n const siblingGroups = wizardActiveItem.wizardGroups.filter(wizGroup => {\r\n return wizardActiveItem.wizardEdges.some(wizEdge => wizEdge.source === source && wizEdge.target === wizGroup.id)\r\n });\r\n // console.log(\"siblingGroups\", siblingGroups);\r\n const areSameSiblingGroups = siblingGroups.length > 1 && siblingGroups.every(siblingGroup => {\r\n return (siblingGroup.nodeType === WIZARD_GROUP_TYPES.group) && (siblingGroup.groupName === siblingGroups[0].groupName)\r\n });\r\n if (areSameSiblingGroups) {\r\n // console.log(\"cachedSiblingFeatures\", cachedSiblingFeatures);\r\n\r\n if (siblingGroups.every(wizardGroup => wizardGroup.useIncluded && wizardGroup.featuresIncluded)) { // new logic\r\n let featuresIncluded = [];\r\n const alreadyCached = cachedSiblingFeatures.find(cacheObject => {\r\n return (cacheObject.wizardId === wizardActiveItem.id) && (cacheObject.groups.every((wGroup, wGroupIndex) => {\r\n return siblingGroups[wGroupIndex] && (wGroup.id === siblingGroups[wGroupIndex].id)\r\n }))\r\n })\r\n // console.log(\"alreadyCached\", alreadyCached);\r\n if (alreadyCached) {\r\n featuresIncluded = alreadyCached.totalFeatures;\r\n } else {\r\n featuresIncluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresIncluded.forEach(included => {\r\n if (!total.some(exclObj => (exclObj.featureDefinitionId === included.featureDefinitionId))) {\r\n total.push(included)\r\n }\r\n })\r\n return total\r\n }, []);\r\n cachedSiblingFeatures.push({\r\n wizardId: wizardActiveItem.id,\r\n groups: siblingGroups,\r\n totalFeatures: featuresIncluded\r\n })\r\n }\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded: [], // not sure if we need it\r\n featuresIncluded\r\n })\r\n return [newGroup]\r\n }\r\n\r\n const allFeaturesExcluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresExcluded.forEach(excluded => {\r\n if (!excluded) {\r\n return\r\n }\r\n if (typeof excluded === \"object\") { // new logic for excluded\r\n if (!total.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === excluded.featureDefinitionId))) {\r\n total.push(excluded)\r\n }\r\n } else if (!total.includes(excluded)) {\r\n total.push(excluded)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const featuresExcluded = allFeaturesExcluded.filter(exclFeature => {\r\n return siblingGroups.every(siblingGroup => {\r\n if (typeof exclFeature === \"object\") {\r\n return siblingGroup.featuresExcluded.some(exclObj => {\r\n return (exclObj !== null)\r\n && (typeof exclObj === \"object\")\r\n && (exclObj.featureDefinitionId === exclFeature.featureDefinitionId)\r\n })\r\n }\r\n return siblingGroup.featuresExcluded.includes(exclFeature) // reaally old support\r\n })\r\n })\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded\r\n })\r\n return [newGroup]\r\n }\r\n return siblingGroups\r\n}\r\n\r\nexport const getCorrectedWizardGroupId = (stepGroups, stepSelectedValue) => {\r\n if ((stepGroups.length === 1) && stepGroups[0].mergedGroups && stepSelectedValue && stepSelectedValue.wizardGroup\r\n && (stepSelectedValue.wizardGroup.groupName === stepGroups[0].groupName)\r\n && stepGroups[0].mergedGroups.some(wizG => wizG.id === stepSelectedValue.wizardGroup.id)) {\r\n const correctedWizG = Object.assign({}, stepGroups[0], {\r\n id: stepSelectedValue.wizardGroup.id\r\n });\r\n return [correctedWizG]\r\n }\r\n return stepGroups\r\n}\r\n\r\n/**\r\n * returns fixed wizard group for merged groups\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param feature {featureInterface}\r\n * @returns {wizardGroupInterface}\r\n */\r\nexport const getCorrectedWizardGroupForFeature = (wizardGroup, feature) => {\r\n if (wizardGroup.mergedGroups && feature) {\r\n const realWizardGroup = wizardGroup.mergedGroups.find(wizG => !navItemIsExcluded({part: feature}, wizG));\r\n if (realWizardGroup && (realWizardGroup.id !== wizardGroup.id)) {\r\n return Object.assign({}, wizardGroup, {\r\n id: realWizardGroup.id\r\n })\r\n }\r\n }\r\n return wizardGroup\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardActiveStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @param prevStepGroups {[wizardGroupInterface]}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getCurrentGroups = (wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n prevStepGroups = [],\r\n additionalWizardValuesToCheck= null) => {\r\n if (!wizardActiveItem || wizardActiveStep < 0) {\r\n return []\r\n }\r\n const stepStr = \"\" + wizardActiveStep;\r\n\r\n const toCheckValue = wizardSelectedValues[wizardActiveStep] || (additionalWizardValuesToCheck\r\n ? additionalWizardValuesToCheck[wizardActiveStep] : null);\r\n\r\n if (wizardActiveStep === 0) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(stepStr, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (!selectedPrevStep || !selectedPrevStep.wizardGroup\r\n || (prevStepGroups.length && selectedWizardGroupIsNotInCurrentStepAnymore(selectedPrevStep, prevStepGroups))) {\r\n if (prevStepGroups.length && prevStepGroups[0].id) {\r\n if (additionalWizardValuesToCheck) { // here we check also previously selected values to make steps similar to prev choices\r\n let foundPreviouslySelectedGroup = null;\r\n if (prevStepGroups.every(wg => wg.nodeType === \"custom\")) {\r\n Object.keys(additionalWizardValuesToCheck).forEach(key => {\r\n if ((key > Object.keys(wizardSelectedValues).length)\r\n && !additionalWizardValuesToCheck[key].partId\r\n && additionalWizardValuesToCheck[key].wizardGroup) {\r\n prevStepGroups.forEach(wg => {\r\n if (wg.id === additionalWizardValuesToCheck[key].wizardGroup.id) {\r\n foundPreviouslySelectedGroup = wg;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n // here we can add simple feature group, but no need for now\r\n }\r\n if (foundPreviouslySelectedGroup) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(foundPreviouslySelectedGroup.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n }\r\n const suggestedStepGroups = getCurrentGroupsFromSource(prevStepGroups[0].id, wizardActiveItem);\r\n if ((suggestedStepGroups.length === 1 && (suggestedStepGroups[0].nodeType === \"group\") && suggestedStepGroups[0].mergedGroups && suggestedStepGroups[0].mergedGroups.length)\r\n && additionalWizardValuesToCheck && Object.keys(additionalWizardValuesToCheck).length) {\r\n // here we check if there are selections in the old flow that might actually help to select current product\r\n if (toCheckValue && toCheckValue.wizardGroup\r\n && (toCheckValue.wizardGroup.groupName === suggestedStepGroups[0].groupName)\r\n && toCheckValue.selectedFeature\r\n && suggestedStepGroups[0].mergedGroups.some(wizG => !navItemIsExcluded({part: toCheckValue.selectedFeature}, wizG))) {\r\n return [getCorrectedWizardGroupForFeature(\r\n suggestedStepGroups[0],\r\n toCheckValue.selectedFeature\r\n )]\r\n } else if (!toCheckValue || !toCheckValue.wizardGroup || (toCheckValue.wizardGroup.groupName !== suggestedStepGroups[0].groupName)) {\r\n // here we check if there are selections in the old flow that might actually help to select current product\r\n for (let key = Object.keys(wizardSelectedValues).length + 1; key < Object.keys(additionalWizardValuesToCheck).length; key++) {\r\n if (key && (key > Object.keys(wizardSelectedValues).length)\r\n && additionalWizardValuesToCheck[key]\r\n && additionalWizardValuesToCheck[key].wizardGroup\r\n && additionalWizardValuesToCheck[key].selectedFeature\r\n && (additionalWizardValuesToCheck[key].wizardGroup.groupName === suggestedStepGroups[0].groupName)\r\n && suggestedStepGroups[0].mergedGroups.some(wizG => !navItemIsExcluded({part: additionalWizardValuesToCheck[key].selectedFeature}, wizG))) {\r\n return [getCorrectedWizardGroupForFeature(\r\n suggestedStepGroups[0],\r\n additionalWizardValuesToCheck[key].selectedFeature\r\n )]\r\n }\r\n }\r\n }\r\n }\r\n return getCorrectedWizardGroupId(\r\n suggestedStepGroups,\r\n toCheckValue\r\n )\r\n }\r\n // console.log(\"Previous step is not selected! Check selected values --> \", wizardSelectedValues);\r\n return []\r\n }\r\n\r\n if (selectedPrevStep && selectedPrevStep.wizardGroup && selectedPrevStep.wizardGroup.mergedGroups && selectedPrevStep.selectedFeature) {\r\n const wizardGroupWithSelectedFeature = selectedPrevStep.wizardGroup.mergedGroups.find(wizGroup => {\r\n return !navItemIsExcluded({part: selectedPrevStep.selectedFeature}, wizGroup)\r\n });\r\n if (wizardGroupWithSelectedFeature) {\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(wizardGroupWithSelectedFeature.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n }\r\n }\r\n\r\n // const prevStepStr = \"\" + (wizardActiveStep - 1);\r\n // const prevGroups = getCurrentGroupsFromSource(prevStepStr, wizardActiveItem);\r\n // if (prevGroups.length > 1 && wizardActiveStep > 0) {\r\n // return [selectedPrevStep.wizardGroup]\r\n // }\r\n\r\n return getCorrectedWizardGroupId(\r\n getCurrentGroupsFromSource(selectedPrevStep.wizardGroup.id, wizardActiveItem),\r\n toCheckValue\r\n )\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param returnAllSteps {boolean}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getAvailableSteps = (wizardActiveItem, wizardSelectedValues, returnAllSteps, additionalWizardValuesToCheck = null) => {\r\n if (!wizardActiveItem || !wizardActiveItem.wizardGroups || !wizardActiveItem.wizardEdges) {\r\n return []\r\n }\r\n\r\n const maxWizardSteps = 50;\r\n\r\n let stepsArray = [{\r\n stepIndex: 0,\r\n stepGroups: getCorrectedWizardGroupId(getCurrentGroupsFromSource(\"0\", wizardActiveItem), wizardSelectedValues[0]),\r\n }];\r\n\r\n for (let i = 1; i <= maxWizardSteps; i++) {\r\n const prevStepGroups = returnAllSteps && stepsArray[i - 1] ? stepsArray[i - 1].stepGroups : [];\r\n const currentGroups = getCurrentGroups(wizardActiveItem, i, wizardSelectedValues, prevStepGroups, additionalWizardValuesToCheck)\r\n if (!currentGroups.length) {\r\n break;\r\n }\r\n stepsArray.push({\r\n stepIndex: i,\r\n stepGroups: currentGroups\r\n })\r\n }\r\n\r\n return stepsArray\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param currentGroups {[wizardGroupInterface]}\r\n * @returns {array}\r\n */\r\nexport const getWizardStepCommonCoords = (currentGroups) => {\r\n if (!currentGroups.length) {\r\n return []\r\n }\r\n let commonCoords = {};\r\n for (let i = 0; i < currentGroups.length; i++) {\r\n const wizardGroup = currentGroups[i];\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n continue\r\n }\r\n const currentCoords = featureGroup.activeFeature ? getFeatureCoords(featureGroup.activeFeature) : getCommonCoords(featureGroup);\r\n commonCoords = compareCoords(currentCoords, currentCoords);\r\n }\r\n\r\n return commonCoords\r\n}\r\n\r\n/**\r\n * returns closest wizard group with nodeType === group\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns {array}\r\n */\r\nexport const findParentWizardFeatureGroup = (wizardGroup, wizardActiveItem) => {\r\n if (!wizardGroup || !wizardActiveItem) {\r\n return null\r\n }\r\n let wizardFeatureParentGroup = null;\r\n\r\n let maxStack = 5;\r\n let currentTry = 0;\r\n const recursiveFindParent = (checkWizardGroup) => {\r\n const sourceEdge = wizardActiveItem.wizardEdges.find(wizEdge => wizEdge.target === checkWizardGroup.id);\r\n const nextToCheckWizardGroup = wizardActiveItem.wizardGroups.find(wizGroup => wizGroup.id === sourceEdge.source);\r\n if (nextToCheckWizardGroup && nextToCheckWizardGroup.nodeType === \"group\") {\r\n wizardFeatureParentGroup = nextToCheckWizardGroup;\r\n } else if (nextToCheckWizardGroup && currentTry < maxStack) {\r\n currentTry++;\r\n recursiveFindParent(nextToCheckWizardGroup)\r\n }\r\n }\r\n recursiveFindParent(wizardGroup)\r\n\r\n return wizardFeatureParentGroup\r\n}\r\n/**\r\n * returns closest wizard group with nodeType === group\r\n * @param featureGroup {featureGroupInterface}\r\n * @param selectedFilters {array}\r\n * @returns {featureInterface}\r\n */\r\nexport const findFeatureBySelectedFilters = (featureGroup, selectedFilters) => {\r\n if (!featureGroup || !selectedFilters) {\r\n return null\r\n }\r\n if (featureGroup.activeFeature && featureHasSelectedFilters(featureGroup.activeFeature, selectedFilters)) {\r\n return featureGroup.activeFeature\r\n }\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: featureGroup}, selectedFilters);\r\n if (!navItems.length) {\r\n return null\r\n }\r\n if (navItems.length > 1 && featureGroup.activeFeature && featureGroup.activeFeature.dbFeature.sharedFeatureName.includes(\".\")) {\r\n const skuColor = \".\" + featureGroup.activeFeature.dbFeature.sharedFeatureName.split(\".\")[1];\r\n const sameColor = navItems.find(navItem => navItem.part.dbFeature.sharedFeatureName.includes(skuColor));\r\n if (sameColor) {\r\n return sameColor.part\r\n }\r\n }\r\n return navItems[0].part\r\n}\r\n\r\n/**\r\n * @param currentFilterValue {object} filterValueInterface\r\n * @param filterGroup {object} filterGroupInterface\r\n * @returns {object}\r\n */\r\nexport const getFilterValueThumbnailAndStyles = (currentFilterValue, filterGroup) => {\r\n\r\n const getFilterItemThumbnail = () => {\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n }\r\n\r\n let thumbnail = getFilterItemThumbnail();\r\n const isColor = (filterGroup.name || \"\").toLowerCase().includes(\"color\");\r\n\r\n const styles = {\r\n backgroundSize: isColor ? \"cover\" : \"contain\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"center\",\r\n };\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail && currentFilterValue && isColor) {\r\n styles.backgroundColor = currentFilterValue.value;\r\n }\r\n\r\n return {thumbnail, styles}\r\n}\r\n\r\n/**\r\n * @param navItem {navItemInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const navItemIsExcluded = (navItem, wizardGroup) => {\r\n const {sku, featureDefinitionID, customDisplayName} = navItem.part.dbFeature;\r\n const {partName} = navItem.part; // it replaces the {groupName + \"-\"} from the name, same logic as we have in the dashboard\r\n // if (customDisplayName === \"Only Front Edge\") {\r\n // console.log(\"checking excluded from wizardGroup\", wizardGroup);\r\n // debugger;//eslint-disable-line\r\n // }\r\n if (wizardGroup.useIncluded && wizardGroup.featuresIncluded) {\r\n return !wizardGroup.featuresIncluded.some(includedFeature => {\r\n return (includedFeature.sharedFeatureName && (includedFeature.sharedFeatureName === navItem.part.getLowerCasedSharedFeatureName()))\r\n || (includedFeature.featureDefinitionId === featureDefinitionID)\r\n || (!includedFeature.sharedFeatureName && (includedFeature.name === customDisplayName))\r\n || (includedFeature.sku && sku && (includedFeature.sku === sku))\r\n })\r\n }\r\n for (let excluded of wizardGroup.featuresExcluded) {\r\n if (excluded && (typeof excluded === \"object\")) {\r\n if (\r\n (excluded.sharedFeatureName && (excluded.sharedFeatureName === navItem.part.getLowerCasedSharedFeatureName()))\r\n || (excluded.featureDefinitionId === featureDefinitionID)\r\n || (excluded.name === customDisplayName)\r\n || (excluded.sku && sku && (excluded.sku === sku))\r\n ) {\r\n return true\r\n }\r\n // if (excluded.name === customDisplayName || excluded.name === sharedFeatureName || (excluded.sku && sku && (excluded.sku === sku))) {\r\n } else if (excluded) {\r\n // if (excluded === sku || excluded === sharedFeatureName || excluded === partName || excluded === featureDefinitionID) {\r\n if (excluded === sku || excluded === partName || excluded === featureDefinitionID) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * @param navItems {[navItemInterface]}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {[navItemInterface]}\r\n */\r\nexport const filterWizardNavItems = (navItems, wizardGroup) => {\r\n if (!wizardGroup.useIncluded && (!Array.isArray(wizardGroup.featuresExcluded) || !wizardGroup.featuresExcluded.length)) {\r\n return navItems\r\n }\r\n // console.log(\"navItems to filter\", navItems);\r\n return navItems.filter(navItem => !navItemIsExcluded(navItem, wizardGroup));\r\n}\r\n\r\n/**\r\n * @param wizardSelectedValues {object} // selected wizard steps values\r\n * @param wizardActiveStep {number} wizardActiveStep\r\n * @param wizardActiveItem {wizardItemInterface} wizardItemInterface\r\n * @param wizardGroup {wizardGroupInterface} wizardGroupInterface\r\n * @param featureGroup {featureGroupInterface} featureGroupInterface\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @param searchText {string}\r\n * @param filters {object}\r\n * @param shopPageOpened {boolean}\r\n * @param showPrevStepsColorFirst {boolean}\r\n * @returns {array}\r\n */\r\nexport const getCurrentWizardNavItems = (wizardSelectedValues,\r\n wizardActiveStep,\r\n wizardActiveItem,\r\n wizardGroup,\r\n featureGroup = null,\r\n filterGroups = [],\r\n searchText = \"\",\r\n filters = [],\r\n shopPageOpened = false,\r\n showPrevStepsColorFirst = false) => {\r\n\r\n const layout = getCurrentLayout();\r\n featureGroup = featureGroup || getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return []\r\n }\r\n\r\n const selectedStepsReversed = Object.keys(wizardSelectedValues).reverse() // is needed to take last selected steps first\r\n\r\n selectedStepsReversed.forEach(selectedStep => {\r\n const {selectedFilter} = wizardSelectedValues[selectedStep];\r\n if (!selectedFilter || +selectedStep >= wizardActiveStep) {\r\n return\r\n }\r\n const parentWizardGroup = findParentWizardFeatureGroup(wizardSelectedValues[selectedStep].wizardGroup, wizardActiveItem);\r\n if (!parentWizardGroup) {\r\n return null\r\n }\r\n const parentFeatureGroup = getFeatureGroupFromWizardGroup(parentWizardGroup);\r\n if (parentFeatureGroup && parentFeatureGroup.partId === featureGroup.partId) {\r\n filters.push({\r\n filterId: selectedFilter.id,\r\n filterGroupId: selectedFilter.filterGroup_id,\r\n })\r\n }\r\n });\r\n\r\n let navItems = layout.designNavigationItems(\r\n {part: featureGroup},\r\n filters,\r\n searchText,\r\n featureGroup.activeFeature,\r\n \"all\",\r\n filterGroups,\r\n {returnAllFeatures: shopPageOpened}\r\n );\r\n\r\n navItems = filterWizardNavItems(navItems, wizardGroup);\r\n\r\n if (featureGroup.partId === \"vanity_sink\") {\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (selectedPrevStep && selectedPrevStep.partId === \"vanity_faucet\" && selectedPrevStep.selectedFeature) {\r\n const faucetParent = selectedPrevStep.selectedFeature.getParent();\r\n if (selectedPrevStep.selectedFeature.matchesMetaForArrayOfConditions(faucetParent.getArrayOfConditions())) {\r\n const selectedFaucetConditions = faucetParent.getActiveFeatureConditions(selectedPrevStep.selectedFeature)\r\n const filteredNavItems = navItems.filter(navItem => {\r\n return selectedFaucetConditions.every(condition => navItem.part.matchesMetaForCondition(condition.propName, condition.propValue))\r\n });\r\n // console.log(\"navItems left\", filteredNavItems);\r\n return filteredNavItems\r\n }\r\n }\r\n }\r\n\r\n if (showPrevStepsColorFirst && !wizardSelectedValues[wizardActiveStep]) {\r\n const allSelectedColors = selectedStepsReversed.reduce((total, selectedStep) => {\r\n if (wizardSelectedValues[selectedStep] && wizardSelectedValues[selectedStep].selectedFeature) {\r\n const colorName = wizardSelectedValues[selectedStep].selectedFeature.getColorName(filterGroups);\r\n if (colorName && !total.includes(colorName)) {\r\n total.push(colorName)\r\n }\r\n }\r\n return total\r\n }, []);\r\n // console.log(\"navItems222\", navItems);\r\n // console.log(\"allSelectedColors\", allSelectedColors);\r\n // console.log(\"wizardGroup\", wizardGroup);\r\n if (allSelectedColors.length) {\r\n navItems = navItems.map(navItem => {\r\n if (navItem.colorOptions && navItem.colorOptions.length) {\r\n const currentColorOption = navItem.part.getColorName(filterGroups);\r\n if (currentColorOption !== allSelectedColors[0]) {\r\n let optionMatchForPrevSelectedColor = null;\r\n allSelectedColors.forEach(selectedColor => {\r\n if (!optionMatchForPrevSelectedColor && (currentColorOption !== selectedColor)) {\r\n optionMatchForPrevSelectedColor = navItem.colorOptions.find(option => {\r\n return option.feature.getColorName(filterGroups) === selectedColor\r\n })\r\n }\r\n })\r\n if (optionMatchForPrevSelectedColor) {\r\n // console.log(\"replaced! from\", navItem);\r\n // console.log(\"replaced! to\", {part: optionMatchForPrevSelectedColor});\r\n return {part: optionMatchForPrevSelectedColor.feature}\r\n }\r\n }\r\n }\r\n return navItem\r\n })\r\n }\r\n }\r\n\r\n\r\n return navItems\r\n}\r\n\r\n/**\r\n * is used for context menu, to detect vanity wizard or shower wizard\r\n * @param partIdGroups {[string]}\r\n * @param wizardList {[wizardItemInterface]}\r\n * @param activePreset {string|number}\r\n * @returns {wizardItemInterface}\r\n */\r\nexport const getExistingWizardForGroups = (partIdGroups, wizardList, activePreset) => {\r\n return wizardList.find(wizardItem => {\r\n if (wizardIsDisabled(wizardItem, activePreset)) {\r\n return false\r\n }\r\n // const currentGroups = getCurrentGroups(wizardItem, 0, {});\r\n // // console.log(\"currentGroups\", currentGroups);\r\n // if (!currentGroups || !currentGroups.length) {\r\n // return false\r\n // }\r\n return wizardItem.wizardGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup)\r\n return featureGroup && partIdGroups.includes(featureGroup.partId)\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * is used for removing the layers from the canvas which are not selected in the wizard\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param layers {[]}\r\n * @returns partIdGroups {[string]}\r\n */\r\nexport const getFilteredLayersForActiveWizard = (wizardActiveItem, wizardSelectedValues, layers) => {\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n return layers\r\n }\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && !Object.keys(wizardSelectedValues).some(stepIndex => {\r\n return wizardSelectedValues[stepIndex].partId === featureGroup.partId && wizardSelectedValues[stepIndex].selectedFeature\r\n })) {\r\n layers = layers.filter(layer => layer.partId !== featureGroup.partId) // if there is a step and it is not selected - remove it\r\n }\r\n })\r\n return layers\r\n}\r\n\r\n/**\r\n * is used for removing the feature groups to prevent them appear after the wizard is finished\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n */\r\nexport const disableNotSelectedFeatureGroups = (wizardActiveItem, wizardSelectedValues) => {\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && !Object.keys(wizardSelectedValues).some(stepIndex => {\r\n return wizardSelectedValues[stepIndex].partId === featureGroup.partId && wizardSelectedValues[stepIndex].selectedFeature\r\n })) {\r\n featureGroup.disabled = true;\r\n if (featureGroup.layerPositions) { // we need it here to prevent adding to the cart through restore cart on item change\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n if (featureGroup.disabledClick) {\r\n featureGroup.disabledClick()\r\n }\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * is used to compress the data that will be passed in the job data back and force\r\n * @param allWizardsValues {array}\r\n * @param allWizardsValues {array}\r\n */\r\nexport const getCompressedAllWizardValues = (allWizardsValues) => {\r\n const allWizardsValuesToSave = allWizardsValues.map(newWizObject => {\r\n let wizValues = {};\r\n Object.keys(newWizObject.wizardSelectedValues).forEach(stepIndex => {\r\n wizValues[stepIndex] = Object.assign({}, newWizObject.wizardSelectedValues[stepIndex])\r\n if (newWizObject.wizardSelectedValues[stepIndex].wizardGroup) {\r\n wizValues[stepIndex].wizardGroup = Object.assign(\r\n {},\r\n newWizObject.wizardSelectedValues[stepIndex].wizardGroup,\r\n {featuresExcluded: [], featuresIncluded: []} // to keep clean in json\r\n )\r\n if (wizValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizValues[stepIndex].wizardGroup.mergedGroups = wizValues[stepIndex].wizardGroup.mergedGroups.map(wizGroup => {\r\n return {id: wizGroup.id, groupName: wizGroup.groupName}\r\n });\r\n }\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeature) {\r\n wizValues[stepIndex].selectedFeature = getCompressedFeature(\r\n null,\r\n newWizObject.wizardSelectedValues[stepIndex].selectedFeature,\r\n newWizObject.quoteIndex\r\n ); // to keep clean in json\r\n }\r\n })\r\n return Object.assign({}, newWizObject, {wizardSelectedValues: wizValues})\r\n });\r\n // console.log(\"allWizardsValues to save ->\", allWizardsValuesToSave);\r\n return allWizardsValuesToSave\r\n}\r\n\r\n/**\r\n * checks if the following step is disabled\r\n * @param stepIndex {number}\r\n * @param wizardSelectedValues {object}\r\n * @param wizardSteps {array}\r\n * @returns {boolean}\r\n */\r\nexport const getWizardStepIsDisabled = (stepIndex, wizardSelectedValues, wizardSteps) => {\r\n if (stepIndex === 0) {\r\n return false\r\n }\r\n if (wizardSelectedValues[stepIndex - 1] && wizardSelectedValues[stepIndex - 1].wizardGroup) {\r\n return false // prev step is selected, current is not disabled\r\n }\r\n const prevWizardGroup = wizardSelectedValues[stepIndex - 1]\r\n ? wizardSelectedValues[stepIndex - 1].wizardGroup\r\n : wizardSteps[stepIndex - 1] && wizardSteps[stepIndex - 1].stepGroups\r\n ? wizardSteps[stepIndex - 1].stepGroups[0]\r\n : null;\r\n if (prevWizardGroup && prevWizardGroup.notRequired && (stepIndex === 1 || wizardSelectedValues[stepIndex - 2])) {\r\n // added logic for cases when not required goes after not required so you can't jump in the end of the wizard\r\n // you have to have prev prev step selected to jump\r\n return false // if prev is not required - return false, otherwise true\r\n }\r\n return true\r\n}\r\n\r\nexport const getWizardProductGroupName = (wizardGroup) => {\r\n return wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName || \"\"\r\n}\r\n\r\n/**\r\n * checks if we need to request sharedFeatureNames from backend instead of the regular request\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const shouldUseNewWizardFeaturesRequestsLogic = (wizardGroup, featureGroup) => {\r\n if (!wizardGroup || !wizardGroup.useIncluded || !wizardGroup.featuresIncluded || !wizardGroup.featuresIncluded.length\r\n || !featureGroup) {\r\n return false\r\n }\r\n return featureGroup.counts && Object.keys(featureGroup.counts).some(layoutType => {\r\n // if less - we will request features with regular request cause it is faster\r\n // we are checking in all layouts case they might be not uploaded(need to change after feature overhaul)\r\n return featureGroup.counts[layoutType] > 1000\r\n })\r\n}\r\n\r\n\r\n/**\r\n * checks if the following step is disabled\r\n * @param currentNavItems {[navItemInterface]}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const getMissingWizardFeatures = async (currentNavItems,\r\n wizardGroup,\r\n featureGroup) => {\r\n\r\n if (featureGroup.requestInProgress) {\r\n // we will request features with regular request cause it is faster\r\n return false\r\n }\r\n\r\n const {wizardMissingFeatures} = store.getState().wizardState;\r\n\r\n if (wizardMissingFeatures[wizardGroup.groupName] && !wizardMissingFeatures[wizardGroup.groupName].length) {\r\n // already received everything\r\n return false\r\n }\r\n\r\n const missingSkus = (wizardGroup.featuresIncluded || [])\r\n .filter(feature => {\r\n return !currentNavItems.some(navItem => navItem.part.getLowerCasedSharedFeatureName() === feature.sharedFeatureName)\r\n })\r\n .map(feature => feature.sharedFeatureName); // convert to names only array\r\n\r\n console.log(\"current missing skus\", missingSkus);\r\n\r\n if (!missingSkus.length) { // first time we create it with requested features // small chances but let it be\r\n store.dispatch(setWizardMissingFeatures(wizardGroup.groupName, missingSkus));\r\n return\r\n }\r\n\r\n const slicedArray = missingSkus.slice(0, 100); // take first 100 features\r\n const stillMissingArray = missingSkus.slice(100); // from 100 to the end\r\n\r\n // 2) get missing features from the backend;\r\n console.log(\"request more missingSkus\", slicedArray);\r\n console.log(\"stillMissingArray\", stillMissingArray);\r\n // loaderEnable();\r\n featureGroup.requestInProgress = true;\r\n const missingSkusResponse = await getBvFeatures(null, slicedArray, true);\r\n featureGroup.requestInProgress = false;\r\n\r\n store.dispatch(setWizardMissingFeatures(wizardGroup.groupName, stillMissingArray)); // set features that left\r\n\r\n if (missingSkusResponse && missingSkusResponse.data) {\r\n console.log(\"missingSkusResponse\", missingSkusResponse.data);\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(missingSkusResponse.data);\r\n return true\r\n }\r\n\r\n // loaderDisable();\r\n return false\r\n}\r\n\r\n/**\r\n * this hook is disabling feature groups for hide items wizards because they should not be added to the cart\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param visualizersLoadedLength {number}\r\n * @param wizardSelectedValues {object}\r\n * @param updateLookCartItem {function}\r\n * @returns {boolean}\r\n */\r\nexport const useHideItemsDisabledfeatureGroups = (wizardActiveItem, visualizersLoadedLength, wizardSelectedValues, updateLookCartItem = null) => {\r\n useEffect(() => {\r\n if (wizardActiveItem && wizardActiveItem.hideItems && visualizersLoadedLength) {\r\n wizardActiveItem.wizardGroups.forEach(wizardGroup => {\r\n if (Object.keys(wizardSelectedValues).some(key => wizardSelectedValues[key].wizardGroup.groupName === wizardGroup.groupName)) {\r\n return // do not disable already selected in wizard groups (restoring logic)\r\n }\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup) {\r\n featureGroup.disabled = true;\r\n if (featureGroup.layerPositions) {\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n featureGroup.layerPositions[position] = null;\r\n })\r\n }\r\n console.log(\"featureGroup disabled\", featureGroup);\r\n }\r\n })\r\n }\r\n if (updateLookCartItem) {\r\n updateLookCartItem();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [visualizersLoadedLength]);\r\n}\r\n\r\nexport const getNextWizardStepQuantity = (currentGroups, wizardSelectedValues, wizardActiveStep, fromFeature, wizardSqftCartItems = []) => {\r\n let newQuantity = 1\r\n if (currentGroups.length === 1) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(currentGroups[0]);\r\n if (wizardSelectedValues[wizardActiveStep] && Number.isInteger(wizardSelectedValues[wizardActiveStep].quantity)) {\r\n newQuantity = wizardSelectedValues[wizardActiveStep].quantity;\r\n } else if (wizardSqftCartItems.length && (fromFeature || featureGroup)) {\r\n const groupName = fromFeature ? fromFeature.dbFeature.groupName : (featureGroup.dbName || featureGroup.partName);\r\n const addedCartItems = wizardSqftCartItems.filter(cItem => cItem.cartFeature && cItem.cartFeature.dbFeature.groupName === groupName);\r\n // console.log(\"addedCartItems\", addedCartItems);\r\n if (addedCartItems.length) {\r\n newQuantity = addedCartItems.reduce((total, cItem) => total + cItem.quantity, 0);\r\n } else {\r\n newQuantity = getFeatureGroupFeaturesQuantity(fromFeature, featureGroup);\r\n }\r\n } else {\r\n newQuantity = getFeatureGroupFeaturesQuantity(fromFeature, featureGroup);\r\n }\r\n }\r\n return newQuantity\r\n}\r\n\r\n/**\r\n * this returns on qkb wizard custom groups or feature groups as features\r\n * @param currentGroups {[wizardGroupInterface]}\r\n * @returns {boolean}\r\n */\r\nexport const displayMaterialsWizardGroupAsFeature = (currentGroups) => {\r\n return currentGroups.length > 1 || (currentGroups.length === 1 && currentGroups[0].nodeType === WIZARD_GROUP_TYPES.custom)\r\n}\r\n\r\n/**\r\n * this returns on qkb wizard wizardGroup from current steps\r\n * @param wizardItem {wizardItemInterface}\r\n * @param wizardValues {object}\r\n * @param neededWizardGroupId {string}\r\n * @returns {object}\r\n */\r\nexport const getWizardGroupFromCurrentSteps = (wizardItem, wizardValues, neededWizardGroupId) => {\r\n let neededStep, neededWizardGroup;\r\n if (!wizardItem || !wizardValues || !neededWizardGroupId) {\r\n return {neededStep, neededWizardGroup}\r\n }\r\n getAvailableSteps(wizardItem, wizardValues, true).forEach(step => {\r\n if (neededStep) {\r\n return\r\n }\r\n step.stepGroups.forEach(wizGroup => {\r\n if (wizGroup.id === neededWizardGroupId) {\r\n neededStep = step;\r\n neededWizardGroup = wizGroup;\r\n } else if (wizGroup.mergedGroups) {\r\n wizGroup.mergedGroups.forEach(mergedGroup => {\r\n if (mergedGroup.id === neededWizardGroupId) {\r\n neededStep = step;\r\n neededWizardGroup = mergedGroup;\r\n }\r\n })\r\n }\r\n })\r\n });\r\n return {neededStep, neededWizardGroup}\r\n}\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout4: 4,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout4: \"Layout4\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout4\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout4\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n LeftSide: \"L\", // used as side for shower grab bars\r\n RightSide: \"R\", // used as side for shower grab bars\r\n Inner: \"Inner\", // used for sinks & faucets\r\n Outer: \"Outer\", // used for sinks & faucets\r\n};\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n\r\nexport const COUNTERTOP_GROUP_BATHROOM = [\"vanity_countertop\", \"vanity_backsplash\"];\r\n\r\nexport const CABINET_GROUP_BATHROOM = [\"vanity_cabinet\", \"vanity_mirror\"];\r\n\r\nexport const HANDLES_GROUP_BATHROOM = [\"door_handle\", \"drawer_handle\"];\r\n\r\nexport const SHOWER_FLOOR_GROUP_BATHROOM = [\"shower_floor\", \"shower_curb\"];\r\n\r\nexport const CORNER_SHELVES_POSITIONS = [\"L1\",\"L2\",\"L3\",\"R1\",\"R2\",\"R3\"];\r\n\r\nexport const SIDE_POSITIONS = [\"L\",\"R\"];\r\n\r\nexport const PAN_POSITIONS = [\"L\",\"C\",\"R\"];\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType, LayoutAbbreviationsToRemove, COUNTERTOP_GROUP} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n if (!featureName) {\r\n return false\r\n }\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Kitchen\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n } if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n if(!this[featureList][layoutName].some(t => t.dbFeature.sharedFeatureName == part.dbFeature.sharedFeatureName)) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n if (this.shadowFeature) {\r\n this.setFeatureLayer(this.shadowFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n * @param clickFrom {string} // is used for countertop and cabinet switchers, and walls\r\n */\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (clickFrom !== \"all_walls\") {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n }\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.src = '';\r\n }\r\n }\r\n\r\n removeLayoutFromPartName(partName) {\r\n LayoutAbbreviationsToRemove.forEach(abbr => {\r\n const spaceWithLayoutName = \" \"+abbr;\r\n partName = partName.replace(spaceWithLayoutName + \" \", \" \"); // 1) replace \" Agra S Some edge name\" -> \" Agra Some edge name\"\r\n if (partName.slice(-spaceWithLayoutName.length) === spaceWithLayoutName) {\r\n partName = partName.substring(0, partName.length - spaceWithLayoutName.length); // 2) replace \" Agra Some edge name S\" -> \" Agra Some edge name\"\r\n }\r\n });\r\n partName = partName.replace(\" Backsplash\", \"\");\r\n return partName\r\n }\r\n\r\n removeCountertopFromPartName(partName) {\r\n partName = partName.replace(\"Countertop - \", \"\");\r\n return partName\r\n }\r\n\r\n removeBacksplashFromPartName(partName) {\r\n partName = partName.replace(\"Backsplash - \", \"\");\r\n return partName\r\n }\r\n\r\n removeCabinetLayoutFromPartName(partName) {\r\n const possibleLayouts = [\" Layout 1\",\" Layout 2\",\" Layout 3\",\" Layout 4\",\" Layout 5\",\" Layout 6\",\" Layout 7\",\" Layout 8\",\" 1\",\" 2\",\" 3\",\" 4\",\" 5\",\" 6\",\" 7\",\" 8\"];\r\n possibleLayouts.forEach(cabinetLayout => {\r\n partName = partName.replace(cabinetLayout,\"\")\r\n });\r\n return partName\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n if (!this._countertopGroupsCustomDisplayName) {\r\n this._countertopGroupsCustomDisplayName = this.partName || \"\";\r\n this._countertopGroupsCustomDisplayName = this.removeCabinetLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove 1 2\r\n this._countertopGroupsCustomDisplayName = this.removeLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove SP SPNI\r\n this._countertopGroupsCustomDisplayName = this.removeEdgeFromPartName(this._countertopGroupsCustomDisplayName); // remove Bullnose\r\n } else {\r\n this._countertopGroupsCustomDisplayName = this.removeLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove SP SPNI\r\n this._countertopGroupsCustomDisplayName = this._countertopGroupsCustomDisplayName.replace(\" PartN\", \"\");\r\n this._countertopGroupsCustomDisplayName = this.removeEdgeFromPartName(this._countertopGroupsCustomDisplayName); // remove Bullnose\r\n }\r\n if (this.partId === \"backsplash\" && this.removeBacksplashTypeFromPartName) {\r\n this._countertopGroupsCustomDisplayName = this.removeBacksplashTypeFromPartName(this._countertopGroupsCustomDisplayName);\r\n // this._countertopGroupsCustomDisplayName = this.removeCabinetLayoutFromPartName(this._countertopGroupsCustomDisplayName); // remove 1 2\r\n }\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n const cabinetsGroup = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n if(this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName;\r\n if (cabinetsGroup.includes(this.partId)) {\r\n this._customDisplayName = this.removeCabinetLayoutFromPartName(this._customDisplayName)\r\n .replace(/ Microwave/g, \"\")\r\n .replace(/ Hood/g, \"\")\r\n .replace(/ Layout/g, \"\")\r\n .replace(/ Part2/g, \"\")\r\n }\r\n this._customDisplayName = this.removeLayoutFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeEdgeFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeCountertopFromPartName(this._customDisplayName);\r\n this._customDisplayName = this.removeBacksplashFromPartName(this._customDisplayName);\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return COUNTERTOP_GROUP.includes(this.partId)\r\n ? this.getCountertopGroupsSplittedFeatureName()\r\n : this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n const arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n}\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const enableSquareFootage = (isSquareFootageEnabled) => ({\r\n type: types.ENABLE_SQUARE_FOOTAGE,\r\n payload: {isSquareFootageEnabled}\r\n});\r\n\r\nexport const setSquareFootageGroup = (SQFTGroup) => ({\r\n type: types.SET_SQUARE_FOOTAGE_GROUP,\r\n payload: {SQFTGroup}\r\n});\r\n\r\nexport const setSQFTGroup = (SQFTGroup) => ({\r\n type: types.SET_SQUARE_FOOTAGE_GROUP,\r\n payload: {SQFTGroup}\r\n});\r\n\r\nexport const setSQFTViewMode = (SQFTViewMode) => ({\r\n type: types.SET_SQFT_VIEW_MODE,\r\n payload: {SQFTViewMode}\r\n});\r\n\r\nexport const loadSQFT = () => ({\r\n type: types.LOAD_SQFT,\r\n payload: {sqftLoaded: true}\r\n});\r\n\r\nexport const updateSQFT = (sqftUpdateType) => ({\r\n type: types.UPDATE_SQFT,\r\n payload: {sqftUpdateType}\r\n});\r\n\r\nexport const updateSQFTCalculations = (updateCalculations) => ({\r\n type: types.UPDATE_SQFT_CALCULATIONS,\r\n payload: {updateCalculations}\r\n});\r\n\r\nexport const setSquareFeet = (squareFeet) => ({\r\n type: types.SET_SQFT_SQUARE_FEET,\r\n payload: {squareFeet}\r\n});\r\n\r\nexport const toggleChangeLayoutPopup = (changeLayoutPopupOpened = false, layoutToApply = \"\", applyLayoutOnSqft = false) => ({\r\n type: types.TOGGLE_CHANGE_LAYOUT_POPUP,\r\n payload: {changeLayoutPopupOpened, layoutToApply, applyLayoutOnSqft}\r\n});\r\n\r\nexport const sendLayoutChangeOnSqft = (setNewLayoutOnSqft) => ({\r\n type: types.SET_NEW_LAYOUT_ON_SQFT,\r\n payload: {setNewLayoutOnSqft}\r\n});\r\n\r\nexport const setSqftMeasureUnit = (measureUnit) => ({\r\n type: types.SET_SQFT_MEASURE_UNIT,\r\n payload: {measureUnit}\r\n});\r\n\r\nexport const changeSqftFeaturesPopup = (sqftFeaturesPopup) => ({\r\n type: types.CHANGE_SQFT_FEATURES_POPUP,\r\n payload: {sqftFeaturesPopup}\r\n});\r\n\r\nexport const setSqftFromFeature = (sqftFromFeature) => ({\r\n type: types.SQT_SQFT_FROM_FEATURE,\r\n payload: {sqftFromFeature}\r\n});\r\n\r\nexport const setSqftCabinetsGlb = (cabinetsGlb) => ({\r\n type: types.SET_CABINETS_GLB,\r\n payload: {cabinetsGlb}\r\n});\r\n\r\nexport const setCabinetsARBlobUrl = (cabinetsARBlobUrl) => ({\r\n type: types.SET_CABINETS_AR_BLOB_URL,\r\n payload: {cabinetsARBlobUrl}\r\n});\r\n\r\nexport const setAPIErrorMessage = (apiErrorMessage) => ({\r\n type: types.SET_API_ERROR_MESSAGE,\r\n payload: {apiErrorMessage}\r\n});\r\n","import {baseNewImagesPath, baseDashboardImagesPath} from \"../../assets\";\r\n\r\nexport const bathTubThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Bathtub.svg`;\r\nexport const ceilingThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Ceiling.svg`;\r\nexport const floorThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Floor.svg`;\r\nexport const showerThumbnail = `${baseNewImagesPath}images/bv_icons_new/shower_icon_new.svg`;\r\nexport const showerAccessoriesThumbnail = `${baseNewImagesPath}images/bv_icons_new/accesories.svg`;\r\nexport const showerOLDThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Shower.svg`;\r\nexport const showerTubComboThumbnail = `${baseNewImagesPath}images/bv_icons_new/shower-tub_icon.svg`;\r\nexport const custom60in30X8Shower = `${baseNewImagesPath}images/bv_icons_new/custom-a-60in-30x8.svg`;\r\nexport const custom30in30X8Shower = `${baseNewImagesPath}images/bv_icons_new/custom-a-30in-30x8.svg`;\r\nexport const custom60in15X4Shower = `${baseNewImagesPath}images/bv_icons_new/custom-b-60in-15x4.svg`;\r\nexport const custom30in15X4Shower = `${baseNewImagesPath}images/bv_icons_new/custom-b-30in-15x4.svg`;\r\nexport const custom60inPonyShower = `${baseNewImagesPath}images/bv_icons_new/custom-c-60in-pony.svg`;\r\nexport const custom30inPonyShower = `${baseNewImagesPath}images/bv_icons_new/custom-c-30in-pony.svg`;\r\nexport const toiletThumbnail = `${baseNewImagesPath}images/bv_icons_new/toilet_backend.svg`;\r\nexport const vanityThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Vanity-05.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\nexport const windowThumbnail = `${baseNewImagesPath}images/bathroom-icons/Window_Coverings.svg`;\r\nexport const largeLayout = `${baseNewImagesPath}images/bv-assets/thumbnail-config01.png`;\r\nexport const smallLayout = `${baseNewImagesPath}images/bv-assets/thumbnail-config02.png`;\r\nexport const largeLayoutShadow = `${baseNewImagesPath}images/bv-assets/Lg-Global-Shadow.png`;\r\nexport const smallLayoutShadow = `${baseNewImagesPath}images/bv-assets/Sm-Global-Shadow.png`;\r\nexport const shower30inWallShadow = `${baseNewImagesPath}images/bv-assets/Lg-Ex R-Shadow Overlay 30X45[For=LG-Ex-R].png`;\r\nexport const floorPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/All-Floor-Placeholder.png`;\r\nexport const ceilingPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/All-Ceiling-Placeholder.png`;\r\n\r\nexport const showerWallSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-Shower Wall-Placeholder[For=Shower=(Custom_Kit1_Kit3_Steam)=ShowerSize=30in].png`;\r\nexport const showerWallSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-Shower Wall-Placeholder[For=Shower=(Custom_Kit1_Kit3_Steam)=ShowerSize=60in].png`;\r\nexport const showerFloorSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerFloor-Placeholder[For=Shower=(Custom)=ShowerSize=30in].png`;\r\nexport const showerFloorSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerFloor-Placeholder[For=Shower=(Custom)=ShowerSize=60in].png`;\r\nexport const showerPanSmallRoomPlaceholder = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerPan-Placeholder[For=Shower=(Custom)=ShowerSize=30in].png`;\r\nexport const showerPanSmallRoomPlaceholder60in = `${baseNewImagesPath}images/bv-assets/placeholders/SM-ShowerPan-Placeholder[For=Shower=(Custom)=ShowerSize=60in].png`;\r\n\r\nexport const LayoutThumbnails = {\r\n Large: largeLayout,\r\n Small: smallLayout,\r\n};\r\n\r\nexport const homePage = {\r\n vanity_cabinet: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n vanity: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n vanity_countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n vanity_sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n vanity_faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n vanity_mirror: `${baseNewImagesPath}images/home/section-images/mirrors.jpg`,\r\n vanity_backsplash: `${baseNewImagesPath}images/home/section-images/backsplash.png`,\r\n vanity_handle: `${baseNewImagesPath}images/home/section-images/handle.png`,\r\n shower_body: `${baseNewImagesPath}images/home/section-images/shower-glass.jpg`,\r\n shower_fixture: `${baseNewImagesPath}images/home/section-images/shower-fixtures.jpg`,\r\n shower_interior_wall: `${baseNewImagesPath}images/home/section-images/shower-wall.jpg`,\r\n shower_interior_wall_accent: `${baseNewImagesPath}images/home/section-images/shower-accent.png`,\r\n shower_floor: `${baseNewImagesPath}images/home/section-images/shower-flooring.jpg`,\r\n shower_door: `${baseNewImagesPath}images/home/section-images/shower-door.png`,\r\n shower_pan: `${baseNewImagesPath}images/home/section-images/shower-pan.png`,\r\n shower_pan_combo: `${baseNewImagesPath}images/home/section-images/shower-pan.png`,\r\n shower_door_handle: `${baseNewImagesPath}images/home/section-images/shower-handles.jpg`,\r\n threshold: `${baseNewImagesPath}images/home/section-images/threshold.png`,\r\n bathtub: `${baseNewImagesPath}images/home/section-images/bathtubs.jpg`,\r\n bathtub_fixture: `${baseNewImagesPath}images/home/section-images/bathtub-fixtures.jpg`,\r\n toilet: `${baseNewImagesPath}images/home/section-images/toilets.jpg`,\r\n floor: `${baseNewImagesPath}images/home/section-images/flooring.jpg`,\r\n ceiling: `${baseNewImagesPath}images/home/section-images/ceilings.jpg`,\r\n window: `${baseNewImagesPath}images/home/section-images/window-coverings.jpg`,\r\n lighting: `${baseNewImagesPath}images/home/section-images/lighting-fixtures.jpg`,\r\n towel: `${baseNewImagesPath}images/home/section-images/towel-racks.jpg`,\r\n wall_a: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall_b: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall_c: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n left_shower_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n right_shower_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n accent_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n pony_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n walls: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n jetted_tub: `${baseNewImagesPath}images/home/section-images/jetted-tub.png`,\r\n replacement_tub: `${baseNewImagesPath}images/home/section-images/replacement-tub.png`,\r\n bathtub_liner: `${baseNewImagesPath}images/home/section-images/tub-liner.png`,\r\n walk_in_tub: `${baseNewImagesPath}images/home/section-images/walk-in-tub.png`,\r\n //kitchen\r\n dishwasher: `${baseNewImagesPath}images/home/section-images/dishwasher.png`,\r\n hood: `${baseNewImagesPath}images/home/section-images/hood.png`,\r\n fridge: `${baseNewImagesPath}images/home/section-images/fridge.png`,\r\n range: `${baseNewImagesPath}images/home/section-images/range.png`,\r\n microwave: `${baseNewImagesPath}images/home/section-images/microwave.png`,\r\n crown_molding: `${baseNewImagesPath}images/home/section-images/crown-molding.png`,\r\n left_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n right_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n popout_wall: `${baseNewImagesPath}images/home/section-images/walls.jpg`,\r\n backsplash: `${baseNewImagesPath}images/home/section-images/backsplash.png`,\r\n sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n center_island_countertop: `${baseNewImagesPath}images/home/section-images/countertops.jpg`,\r\n center_island_sink: `${baseNewImagesPath}images/home/section-images/sinks.jpg`,\r\n center_island_faucet: `${baseNewImagesPath}images/home/section-images/faucets.jpg`,\r\n center_island_cabinet: `${baseNewImagesPath}images/home/section-images/vanity-bases.jpg`,\r\n center_island_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n center_island_chairs: `${baseNewImagesPath}images/home/section-images/chairs.png`,\r\n top_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n bottom_handle: `${baseNewImagesPath}images/home/section-images/handle-kitchen.png`,\r\n top_cabinet: `${baseNewImagesPath}images/home/section-images/icon-cabinet-upper.png`,\r\n bottom_cabinet: `${baseNewImagesPath}images/home/section-images/icon-cabinet-lower.png`,\r\n cutout: `${baseNewImagesPath}images/home/section-images/cutout.png`,\r\n cutouts: `${baseNewImagesPath}images/home/section-images/cutout.png`,\r\n edge_profile: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n edge_profiles: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n edge: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n center_island_edge: `${baseNewImagesPath}images/home/section-images/edge.png`,\r\n room: `${baseNewImagesPath}images/home/section-images/room.png`,\r\n kitchen_floor: `${baseNewImagesPath}images/home/section-images/flooring.jpg`,\r\n walls_ceiling: `${baseNewImagesPath}images/home/section-images/ceilings.jpg`,\r\n};\r\n\r\nexport const shareImage = {\r\n Bathroom: \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_QC.jpeg\",\r\n bvLook: \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_Lixil.jpg\",\r\n Kitchen: \"https://s3.amazonaws.com/qc-cdn/fabricator-presets-screenshots/cd49f0acc72e40f1a912830cf0385b83.png\"\r\n};\r\nexport const shareImageRebath = \"https://qc-cdn.s3.amazonaws.com/social-networks/BathRoomVisualizer_Facebook_ReBath.jpeg\";\r\n\r\nconst normalizeIconFileName = (featureGroupName) => {\r\n return ((featureGroupName || ''))\r\n .toLowerCase()\r\n .replace(/\\s/g, '-')\r\n .replace(\".svg\", \"\") + '.svg';\r\n};\r\n\r\nconst featureGroupNameToIcon = {\r\n '10 year sealer': 'sealer.svg',\r\n 'cabinet': 'cabinets.svg',\r\n 'top mount sink cutout': 'topmount-sink-cutout.svg',\r\n 'under mount sink cutout': 'undermount-sink-cutout.svg',\r\n 'counter top removal': 'countertop-removal.svg',\r\n 'cooktop cutout': 'range-top-cutout.svg',\r\n 'cutout': 'cutouts.svg',\r\n 'faucet': 'faucets.svg',\r\n 'floor': 'flooring.svg',\r\n 'shower-walls': 'shower-wall.svg',\r\n 'shower walls': 'shower-wall.svg',\r\n 'fixture': 'shower-fixture.svg',\r\n 'range-hood-x': 'range-hood.svg',\r\n 'range-hood-z': 'range-hood.svg',\r\n 'refridgerator': 'refrigerator.svg',\r\n 'removal': 'countertop-removal.svg',\r\n 'room(s) installed': 'room.svg',\r\n 'sink': 'sinks.svg',\r\n 'backsplash-thickness': 'slabs.svg',\r\n 'backsplash thickness': 'slabs.svg',\r\n 'edge': 'edge-profile.svg',\r\n 'island countertop': 'center-island-countertop.svg',\r\n 'hook bag': 'garage-hook.svg',\r\n 'slatwall': 'slat_wall.svg',\r\n 'overhead rack': 'overhead_rack.svg',\r\n 'cabinet leg': 'cabinet_leg.svg',\r\n};\r\n\r\nexport function getFeatureGroupIconURL(featureGroupName) {\r\n const name = ((featureGroupName || '')).toLowerCase();\r\n return (name in featureGroupNameToIcon)\r\n ? baseDashboardImagesPath + featureGroupNameToIcon[name]\r\n : baseDashboardImagesPath + normalizeIconFileName(name);\r\n}\r\n\r\nexport function getFeatureGroupIconStyles(featureGroup, activeTheme) {\r\n let\r\n backgroundImage = \"\",\r\n backgroundSize = \"150%\",\r\n backgroundPosition = \"\";\r\n\r\n if (!featureGroup.customImageUrl) {\r\n backgroundImage = getFeatureGroupIconURL(featureGroup.partName, activeTheme);\r\n } else {\r\n backgroundImage = featureGroup.customImageUrl;\r\n if (featureGroup.customImageUrl.includes(\"backsplash-new\")) {\r\n backgroundSize = \"80%\";\r\n backgroundPosition = \"left 25% center\";\r\n } else if (featureGroup.customImageUrl.includes(\"enabled/countertop.svg\")) {\r\n backgroundSize = \"\" // auto\r\n }\r\n }\r\n if (activeTheme === \"caes\" || activeTheme === \"moderno\" || activeTheme === \"as\"|| activeTheme === \"nhance\") {\r\n backgroundImage = getDashboardThemeIcon(backgroundImage, activeTheme);\r\n }\r\n if (backgroundImage.includes(\"enabled/top-cabinet.svg\")) {\r\n backgroundSize = \"60%\"\r\n } else if (backgroundImage.includes(\"enabled/bottom-cabinet.svg\")) {\r\n backgroundSize = \"80%\"\r\n } else if (backgroundImage.includes(\"enabled/slabs.svg\")) {\r\n backgroundSize = \"90%\"\r\n } else if (backgroundImage.includes(\"enabled/center-island-countertop.svg\")) {\r\n backgroundSize = \"95%\"\r\n } else if (backgroundImage.includes(\"enabled/garage-hook.svg\")) {\r\n backgroundSize = \"65%\"\r\n }\r\n switch (featureGroup.partId) {\r\n case \"cabinet_leg\":\r\n case \"hook_bag\":\r\n case \"overhead_rack\":\r\n case \"slat_wall\":\r\n backgroundSize = null; // we set it in scss\r\n break;\r\n default:\r\n break;\r\n }\r\n return {\r\n backgroundImage: `url(${backgroundImage})`,\r\n backgroundSize,\r\n backgroundPosition,\r\n }\r\n}\r\n\r\nexport function getDashboardThemeIcon(backgroundImage, activeTheme) {\r\n const imageSplitted = backgroundImage.split(\"enabled/\");\r\n if (imageSplitted[1]) {\r\n backgroundImage = `${baseNewImagesPath}images-${activeTheme}/dashboard-icons/${imageSplitted[1]}`\r\n }\r\n return backgroundImage\r\n}\r\n\r\n\r\n","import flatMap from \"lodash/flatMap\";\r\nimport lastIndexOf from \"lodash/lastIndexOf\";\r\nimport trim from \"lodash/trim\";\r\n\r\nimport JsonApi from \"./jsonApi\";\r\nimport store from \"../store\";\r\nimport {\r\n capitalizeFirstLetters,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n} from \"../misc/helpers\";\r\nimport {\r\n setJobId,\r\n setDefaultInstallations,\r\n setFabricatorData,\r\n loadFilters,\r\n setStonePricing,\r\n setBathroomVisualizerPresets,\r\n setProjectDocumentsIds,\r\n loadMobileNav,\r\n setFabricatorTaxes, setLoadedPresets, toggleUseFabricatorCostPrices\r\n} from \"../actions/actionFunctions\";\r\n\r\nimport {renderErrorPopup} from \"./api-popups\";\r\nimport {loaderDisable} from \"../bvcomponents/ui/loaderView\";\r\nimport {QuoteRequestType} from \"../bvcomponents/visComponents/constants\";\r\nimport * as actionTypes from '../actions/actionTypes';\r\nimport Config, {getCommonVisualizerType, IS_OFFLINE_MODE, IS_QKB_UI} from \"../config\";\r\nimport {setFabricatorSubscriptions} from \"../actions/initialFlowFunctions\";\r\nimport {setDiscountSections} from \"../actions/priceWorksheetActions\";\r\nimport {getCurrentReceipt, setReceiptUrl} from \"../actions/printFunctions\";\r\nimport {getEmployees} from \"./user-api\";\r\n// import {getParsedLookUrl} from \"../bvcomponents/look/lookNavigation/lookFunctions\";\r\nimport {setWizardList} from \"../actions/wizardFunctions\";\r\nimport {setAllFeaturesLoaded} from \"../actions/serverFunctions\";\r\nimport {updatePresetsArray} from \"../misc/presetsFunctions\";\r\nimport {getCompressedCartItem} from \"../misc/backendFunctions\";\r\nimport {updateCurrentQuote} from \"../misc/quotesFunctions\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {setMarkUpLogic} from \"../actions/shoppingCartFunctions\";\r\nimport {parseMarkUp} from \"../misc/priceFunctions\";\r\nimport {getMarkUpForFeatures} from \"./features-api\";\r\nimport {setResponseFeaturesMarkUp} from \"../misc/markUpFunctions\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {\r\n getCustomDepositAmount,\r\n getPriceWorkSheetSaveValues,\r\n isSaveOnlyDiscount\r\n} from \"../bvcomponents/priceWorksheet/discountFunctions\";\r\n\r\n\r\nexport const getSaveQuoteFastData = async (forTempSave = false) => {\r\n const state = store.getState();\r\n const {userState, quotesState, instState, serverState, priceWorksheetState, cartState, printState,\r\n contractSigningState, fabricatorState} = state;\r\n let needToRevertBackCostPrices = fabricatorState.settings.useFabricatorCostPrices;\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(false)); // always use retail prices\r\n }\r\n const updatedQuotes = await updateCurrentQuote();\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n const records = updatedQuotes.map((quoteObject, quoteIndex) => {\r\n let record = Object.assign({}, quoteObject);\r\n record.bvImage = record.staticCanvasImage || record.bvImage;\r\n let recordData = Object.assign({}, quoteObject.data, {\r\n activeQuoteIndex: quotesState.activeQuoteIndex,\r\n contractSigningValues: contractSigningState.pagesCustomFieldsValue,\r\n contractsValues: contractSigningState.contractsValues,\r\n savedInvoiceNumberOfPages: contractSigningState.savedInvoiceNumberOfPages,\r\n needToUpdateContract: contractSigningState.needToUpdateContract,\r\n receiptSignature: printState.receiptSignature,\r\n priceWorkSheetLogic: getPriceWorkSheetSaveValues(priceWorksheetState),\r\n })\r\n record.data = forTempSave ? recordData : JSON.stringify(recordData);\r\n record.sqFtCalcImage = quoteObject.sqFtCalcData ? quoteObject.sqFtCalcData.canvasImage : null;\r\n record.sFtCalcDataJson = quoteObject.sqFtCalcData ? JSON.stringify(\r\n Object.assign({}, quoteObject.sqFtCalcData, {\r\n canvasImage: undefined // remove canvasImage as we don't need to pass it twice\r\n })\r\n ) : null;\r\n delete record.sqFtCalcData;\r\n delete record.quoteId;\r\n const recordCartItems = [...cartState.cartItems.filter(ci => ci.cartFeature && ci.cartFeature.dbFeature && (ci.currentQuote === quoteIndex))]\r\n // record.cartItems = recordCartItems; // why do we need it here ??? that doesnt make any sense\r\n record.features = recordCartItems.map(ci => getCompressedCartItem(ci));\r\n if (forTempSave) {\r\n delete record.bvImage\r\n }\r\n return record\r\n });\r\n const discountSections = [...priceWorksheetState.discountSections.map(discountSection => Object.assign({}, discountSection))]\r\n .filter(discountSection => {\r\n discountSection.discounts = [...discountSection.discounts]\r\n .filter(discount => discount.selected)\r\n .map(discount => Object.assign({}, discount, { oldDeleted: undefined }));\r\n return discountSection.discounts.some(discount => discount.selected);\r\n });\r\n const total = {\r\n materialCost: totalPrice.materialPrice,\r\n installationCost: totalPrice.installationPrice,\r\n installationTaxes: totalPrice.installationTaxes, // installation tax amount\r\n materialTaxes: totalPrice.materialTaxes, // material tax amount\r\n priceTaxes: totalPrice.priceTaxes, // all tax amount\r\n totalWithTaxes: getQuotePriceWithTaxes(totalPrice),\r\n customDeposit: getCustomDepositAmount(priceWorksheetState.discountSections, grandTotal),\r\n }\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(true)); // revert back\r\n }\r\n return {\r\n jobId: document.kvConfig.jobId || serverState.jobId,\r\n fromBV: true,\r\n fabricatorId: document.kvConfig.userId,\r\n notes: [],\r\n documents: [],\r\n employeeId: +userState.userInfo.employeeId,\r\n shareUrl: serverState.shareUrl,\r\n discountSections,\r\n installations: flatMap(instState.instList, i => i.services.filter(service => service.selected)),\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n total,\r\n records\r\n };\r\n};\r\n\r\nexport const saveQuoteFast = async () => {\r\n if (document.kvConfig.canSaveQuote === false || document.kvConfig.devMode || window.postMessageIsExecuting) {\r\n return null;\r\n }\r\n const savedFastData = await getSaveQuoteFastData();\r\n //console.log(\"save quote fast request\", savedFastData);\r\n return JsonApi.saveQuoteFast(savedFastData)\r\n};\r\n\r\n/**\r\n * Saves the quote\r\n * @param submit {boolean}\r\n * @param yesNoConsultationRequest {boolean}\r\n * @param quoteRequestType {string}\r\n * @param fromCheckOutPage {boolean}\r\n * @param assignQuotePopupCustomer {object}\r\n * @param assignQuotePopupEmployee {object}\r\n * @param showContractSignOnError {boolean}\r\n * @param showReceipt {boolean}\r\n * @return {*}\r\n */\r\nexport const saveQuote = async ({\r\n submit,\r\n yesNoConsultationRequest = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n fromCheckOutPage = false,\r\n assignQuotePopupCustomer = null,\r\n assignQuotePopupEmployee = null,\r\n showContractSignOnError = false,\r\n showReceipt = true,\r\n }) => {\r\n if (document.kvConfig.canSaveQuote === false) {\r\n return null;\r\n }\r\n const formData = new FormData();\r\n const state = store.getState();\r\n const {userState, serverState, fabricatorState, cartState, contractSigningState, unlockCalculationsState} = state;\r\n const {fabricatorTaxes} = fabricatorState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n let needToRevertBackCostPrices = fabricatorSettings.useFabricatorCostPrices;\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(false)); // always use retail prices\r\n }\r\n const savedFastData = await getSaveQuoteFastData();\r\n if (assignQuotePopupEmployee) {\r\n savedFastData.employeeId = assignQuotePopupEmployee.id;\r\n }\r\n const sendConsumerEmail = serverState.agreeEmailCheckbox && (!fabricatorSettings.sureTax || userState.isPhoneNumberValidated);\r\n const data = {\r\n ...savedFastData,\r\n yesNoConsultationRequest,\r\n submit,\r\n fromCheckOutPage,\r\n sendConsumerEmail,\r\n customerEmail: (assignQuotePopupCustomer ? assignQuotePopupCustomer.email : null) || userState.email || userState.userInfo.email,\r\n salesPerson: assignQuotePopupEmployee ? assignQuotePopupEmployee.fullName : userState.userInfo.salesPersonFullName,\r\n salesPersonEmail: userState.userInfo.salesPersonEmail,\r\n leadOriginatorId: (window.salesPerson ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000)) : 0),\r\n postalCode: userState.userInfo.postal,\r\n isNewUser: !(document.kvConfig.jobId || serverState.jobId),\r\n state: cartState.state,\r\n fromTool: getCommonVisualizerType() === \"kitchen\"\r\n ? document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? \"KV5\" : \"KV4\"\r\n : document.kvConfig.toolVersion === 5 || document.kvConfig.toolVersion === 6 ? \"BV5\" :\"BV\",\r\n toolVersion: document.kvConfig.toolVersion,\r\n visualizerType: capitalizeFirstLetters(getCommonVisualizerType()),\r\n navigationType: document.kvConfig.navigationType,\r\n quoteRequestType,\r\n currency: fabricatorSettings.currency,\r\n installationTaxesRate: (fabricatorTaxes && fabricatorTaxes.laborRate) || 0,\r\n materialTaxesRate: (fabricatorTaxes && fabricatorTaxes.materialRate) || 0,\r\n notes: [],\r\n fromDashboard: document.kvConfig.isBackend,\r\n callFabricator: document.kvConfig.callFabricatorOnSave || false,\r\n language: serverState.language,\r\n documents: serverState.documents.filter(doc => !doc.uploaded).map((d) => {\r\n return {\r\n documentId: d.documentId || 0, // database ID\r\n name: d.name,\r\n text: d.text,\r\n created: d.created,\r\n uid: d.uid,\r\n fileContent: Config.kioskStandAlone ? d.file.dataUri : null\r\n };\r\n }),\r\n markUpLogic: JSON.stringify(cartState.markUpLogic),\r\n };\r\n document.kvConfig.callFabricatorOnSave = false;\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"saveQuote request data:\", data);\r\n }\r\n\r\n serverState.documents.forEach(doc => {\r\n formData.append(\"files\", doc.file, doc.name);\r\n });\r\n\r\n formData.append('json', JSON.stringify(data));\r\n\r\n let employeeSelected = null;\r\n if (data.employeeId) {\r\n const employeesList = userState.employeesListReceived\r\n ? userState.employeesList\r\n : await getEmployees(false) || []; // just in case, we should never reach here, because requests are in both user popups\r\n employeeSelected = employeesList.find(emp => +emp.id === data.employeeId);\r\n }\r\n let receipt = null, receiptCost = null;\r\n if (!document.kvConfig.visualizerOnly) {\r\n const pdfReceipt = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receipt = await pdfReceipt.toBlob();\r\n formData.append(\"receipt\", receipt);\r\n }\r\n if (needToRevertBackCostPrices) {\r\n store.dispatch(toggleUseFabricatorCostPrices(true)); // revert back\r\n const pdfReceipt2 = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receiptCost = await pdfReceipt2.toBlob();\r\n formData.append(\"receiptCost\", receiptCost);\r\n }\r\n\r\n return JsonApi.saveQuote(document.kvConfig.kioskMode ? data : formData)\r\n .then(async (response) => {\r\n const responseData = typeof response.data === 'object' ? response.data : JSON.parse(response.data);\r\n store.dispatch(setJobId(responseData.jobId));\r\n if (responseData.documents && responseData.documents.length) {\r\n store.dispatch(setProjectDocumentsIds(responseData.documents));\r\n }\r\n\r\n const showContractSignPopup = shouldUseContractSigning(fabricatorSettings, contractSigningState.contractsList);\r\n\r\n const showLeadCaptureShoppingCart = fabricatorSettings.leadCaptureShoppingCart && !unlockCalculationsState.unlockCalculationsTutorialIsFinished;\r\n const showDepositPopup = fabricatorSettings.enableDeposit && (!fabricatorSettings.leadCaptureShoppingCart || unlockCalculationsState.unlockCalculationsTutorialIsFinished)\r\n\r\n let receiptUrl = \"\";\r\n if (receipt) {\r\n const pdfReceipt = await getCurrentReceipt(assignQuotePopupCustomer, employeeSelected);\r\n receipt = await pdfReceipt.toBlob();\r\n receiptUrl = URL.createObjectURL(receipt);\r\n }\r\n\r\n if (receipt && showReceipt && !showDepositPopup && !showLeadCaptureShoppingCart\r\n && (!showContractSignPopup || contractSigningState.signedDocumentUrl) && !fabricatorSettings.hasPaymentGateway) {\r\n window.open(receiptUrl, \"_blank\");\r\n responseData.receiptPrinted = true;\r\n }\r\n store.dispatch(setReceiptUrl(receiptUrl)); // always remember the URL (in case it is needed)\r\n\r\n responseData.total = data.total;\r\n\r\n return responseData;\r\n })\r\n .catch(error => {\r\n const retryFunction = saveQuote.bind(this, {\r\n submit,\r\n yesNoConsultationRequest,\r\n quoteRequestType,\r\n fromCheckOutPage,\r\n assignQuotePopupCustomer,\r\n assignQuotePopupEmployee,\r\n });\r\n renderErrorPopup(\"Server \"+new Error(error), \"\", retryFunction, showContractSignOnError);\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const loadFiltersOnly = async () => {\r\n const response = await JsonApi.getFilterGroups();\r\n if (response && Array.isArray(response.data)) {\r\n store.dispatch(loadFilters(response.data));\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const getBathroomVisualizerData = (featuresCount = 30, loadVisualizerOnly = false, forVisualizer) => {\r\n const featuresToReceive = IS_OFFLINE_MODE ? 100000 : featuresCount;\r\n return JsonApi.getBathroomVisualizerData(featuresToReceive, forVisualizer)\r\n .then(responseData => {\r\n // console.log('responseData', responseData.data);\r\n if (!responseData.data || responseData.data.error) {\r\n const errorMessage = !responseData.data ? \"No response data received\" : responseData.data.error;\r\n renderErrorPopup(\"Server error: \"+errorMessage);\r\n loaderDisable();\r\n throw new Error(errorMessage);\r\n } else {\r\n if (!loadVisualizerOnly) {\r\n store.dispatch(loadFilters(responseData.data.filterGroups || []));\r\n // store.dispatch(setFabricatorData(responseData.data.fabricatorData)); // we set it in the subscriptions response\r\n store.dispatch(setDefaultInstallations(responseData.data.installations));\r\n }\r\n store.dispatch(setStonePricing(responseData.data.stonePricing));\r\n if (responseData.data.defaults) {\r\n responseData.data.defaults = updatePresetsArray(responseData.data.defaults, forVisualizer);\r\n // const {lookIdFromUrl} = getParsedLookUrl(); // why do we need that?? set the same lookId on each preset? really?\r\n // if (lookIdFromUrl) {\r\n // presets = presets.map(preset => {\r\n // preset.lookId = lookIdFromUrl;\r\n // return preset\r\n // })\r\n // }\r\n store.dispatch(setBathroomVisualizerPresets(responseData.data.defaults, forVisualizer));\r\n }\r\n if (responseData.data.wizardData || responseData.data.wizardDataV2) {\r\n const wizardList = getParsedWizardList(responseData.data, false, forVisualizer);\r\n store.dispatch(setWizardList(wizardList));\r\n }\r\n //store.dispatch(setBathroomVisualizerFeatures(responseData.data.features));\r\n // this causes bathroomVisualizer to be super slow.... how to store huge arrays in redux store? No answer for now\r\n // for now, features are kept in layout dataObject.... sad, but at least it works much faster\r\n\r\n if (featuresCount === 100000) {\r\n store.dispatch(setAllFeaturesLoaded(document.kvConfig.visualizerType));\r\n store.dispatch(setLoadedPresets(responseData.data.defaults.map(preset => preset.id)));\r\n }\r\n\r\n return responseData.data\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n console.log('getBathroomVisualizerData', error);\r\n });\r\n};\r\n\r\nexport const getBvPresets = () => {\r\n return JsonApi.getDisplayRoom()\r\n .then(responseData => {\r\n // console.log('getBvPresets:', responseData);\r\n if (!responseData.data || responseData.data.error) {\r\n store.dispatch(setBathroomVisualizerPresets([]));\r\n console.error(\"get bvPresets error: No response data received\");\r\n return [];\r\n } else {\r\n const bvPresets = JSON.parse(responseData.data);\r\n store.dispatch(setBathroomVisualizerPresets(bvPresets));\r\n return bvPresets\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n console.log('getDisplayRoom', error);\r\n });\r\n};\r\n\r\nexport const getJobIdPreset = (jobId, editToken) => {\r\n return JsonApi.getBVJobData(jobId, editToken);\r\n};\r\n\r\nconst skipRequestsFor = [\"Attachment\", \"Decor\", \"Decore\"];\r\n\r\nconst updateFeaturesWithMarkUp = async (featuresResponse) => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.settings.useMarkUpFeaturesRequests && featuresResponse\r\n && Array.isArray(featuresResponse) && featuresResponse.length) {\r\n if (skipRequestsFor.some(groupName => {\r\n return featuresResponse.every(dbFeature => dbFeature.groupName === groupName)\r\n })) {\r\n return featuresResponse\r\n }\r\n const markUpResponse = await getMarkUpForFeatures(featuresResponse);\r\n setResponseFeaturesMarkUp(featuresResponse, markUpResponse);\r\n }\r\n return featuresResponse\r\n}\r\n\r\nexport const getBvFeatures = async (arrayOfIds, arrayOfSkus = null, requestSharedFeatureNames = false, forVisualizer) => {\r\n const featuresResponse = await JsonApi.getBathroomVisualizerFeatures(arrayOfIds, arrayOfSkus, requestSharedFeatureNames, forVisualizer);\r\n await updateFeaturesWithMarkUp(featuresResponse ? featuresResponse.data : [])\r\n return featuresResponse\r\n};\r\n\r\nexport const getBvGroups = (visualizerType) => {\r\n return JsonApi.getBathroomVisualizerGroups(visualizerType)\r\n};\r\n\r\n/**\r\n * Main request to get features for feature group\r\n * @param groupName {string}\r\n * @param page {number}\r\n * @param pageSize {number}\r\n * @param filterValues {array}\r\n * @param searchText {string}\r\n * @param layoutAbbreviation {string}\r\n * @param axiosController {object}\r\n * @param requestOldFeatures {boolean}\r\n * @param visualizerType {string}\r\n * @returns {Promise<{data: []}>}\r\n */\r\nexport const getBvGroupFeatures = async (groupName, page, pageSize, filterValues, searchText = \"\", layoutAbbreviation, axiosController, requestOldFeatures, visualizerType) => {\r\n const featuresResponse = await JsonApi.getBathroomVisualizerGroupFeatures(groupName, page, pageSize, filterValues, searchText, layoutAbbreviation, axiosController, requestOldFeatures, visualizerType)\r\n await updateFeaturesWithMarkUp(featuresResponse);\r\n return featuresResponse\r\n};\r\nexport const getBvGroupFilterValues = async (groupName, filterId, withStoneFilters) => {\r\n const filterResponse = await JsonApi.getBathroomVisualizerGroupFilterValues(groupName, filterId, withStoneFilters);\r\n console.log(\"filterResponse\", filterResponse);\r\n if (filterResponse.data.error) {\r\n const {error} = filterResponse.data;\r\n renderErrorPopup(error);\r\n return {data: []}\r\n }\r\n return filterResponse\r\n};\r\n\r\nexport const submitPayment = (paymentInfo, useNewHoc = false) => { // submit is used in the WithPaymentSubmit HOC, all info is there\r\n const state = store.getState();\r\n const {serverState} = state;\r\n return JsonApi.submitPayment(useNewHoc ? paymentInfo : {\r\n ...paymentInfo,\r\n country: paymentInfo.country.name,\r\n fabricatorId: document.kvConfig.userId,\r\n jobId: document.kvConfig.jobId || serverState.jobId\r\n })\r\n .then(response => {\r\n store.dispatch({\r\n type: actionTypes.SUBMIT_PAYMENT_RESPONSE, // why do we need it? not used at all\r\n payload: response.data\r\n });\r\n if (useNewHoc) {\r\n const res = response.data;\r\n if (res.transactionResponse && res.transactionResponse.responseCode === '1') {\r\n // showQuoteSavedNotification();\r\n window.checkoutSuccess = true;\r\n const receiptUrl = store.getState().printState.receiptUrl;\r\n if (receiptUrl) {\r\n window.open(receiptUrl, \"_blank\");\r\n }\r\n } else {\r\n let msg = '';\r\n if (res && (res.transactionResponse && res.transactionResponse.errors && res.transactionResponse.errors.length > 0) || res.error) {\r\n msg = res.transactionResponse.errors[0].errorText || res.error;\r\n } else if (res && res.message && res.message.messageDetails.length > 0) {\r\n msg = res.message.messageDetails[0].text;\r\n }\r\n\r\n let sepIdx = lastIndexOf(msg, '-');\r\n if (sepIdx >= 0) {\r\n msg = trim(msg.substr(sepIdx + 1));\r\n }\r\n\r\n renderErrorPopup(msg, \"Card Error\");\r\n }\r\n }\r\n return response.data;\r\n })\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getQtCategories = (layoutName, visualizerType) => {\r\n return JsonApi.getQtCategories(layoutName, visualizerType)\r\n .then(response => {\r\n if (!response.data || response.data.error || !Array.isArray(response.data)) {\r\n // store.dispatch(setQtCategories([]));\r\n console.error(\"get bvPresets error: No response data received\");\r\n return [];\r\n } else {\r\n const qtCategories = response.data.filter(qtCategory => {\r\n if (qtCategory.useWizard && IS_QKB_UI) {\r\n return true\r\n }\r\n return (qtCategory.name !== \"All\") && Array.isArray(qtCategory.featureGroups) && qtCategory.featureGroups.length\r\n });\r\n if (Config.isDevMode()) {\r\n console.log('qtCategories-->', qtCategories);\r\n }\r\n // store.dispatch(setQtCategories(qtCategories)); // with features inside featureGroups it becomes HUUUGE\r\n return qtCategories\r\n }\r\n })\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getFabricatorSubscriptions = (fabricatorId = document.kvConfig.userId) => {\r\n return JsonApi.getFabricatorSubscriptions(fabricatorId)\r\n .then(response => {\r\n if (!response || !response.data || response.data.error) {\r\n console.error(\"getFabricatorSubscriptions error: No response data received\");\r\n } else {\r\n // console.log(\"response getFabricatorSubscriptions\", response);\r\n if (Array.isArray(response.data.subscriptions)) {\r\n store.dispatch(setFabricatorSubscriptions(response.data.subscriptions));\r\n }\r\n if (response.data.fabricatorTaxes) {\r\n store.dispatch(setFabricatorTaxes(response.data.fabricatorTaxes));\r\n }\r\n if (document.kvConfig.isCaesarStone && response.data.fabricatorData\r\n && response.data.fabricatorData.fabricatorName === \"QC Master Account CAN\") {\r\n response.data.fabricatorData.wasCreatedFromFabricator = \"QC Master Account CAN\";\r\n }\r\n const globalMarkUp = response.data.fabricatorData && response.data.fabricatorData.globalMarkUp\r\n ? parseMarkUp(response.data.fabricatorData.globalMarkUp)\r\n : \"\";\r\n if (globalMarkUp) {\r\n store.dispatch(setMarkUpLogic(globalMarkUp)) // also it can be restored with the cartState on job open\r\n }\r\n store.dispatch(setFabricatorData(response.data.fabricatorData));\r\n }\r\n })\r\n .catch(error => {\r\n // console.error(+new Error(error));\r\n renderErrorPopup(\"Server Error. Check Subscription Status\", \"\", getFabricatorSubscriptions.bind(this, fabricatorId));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n\r\nexport const getDiscounts = (fabricatorId = document.kvConfig.userId) => {\r\n return JsonApi.getFabricatorDiscounts(fabricatorId)\r\n .then(response => {\r\n if (!response || !response.data || response.data.error) {\r\n console.error(\"getFabricatorDiscounts error: No response data received\");\r\n } else {\r\n console.log(\"response getFabricatorDiscounts\", response);\r\n if (Array.isArray(response.data)) {\r\n const discountSections = response.data\r\n .map(discountSection => {\r\n discountSection.discounts = Array.isArray(discountSection.discounts)\r\n ? discountSection.discounts.filter(dis => dis.enabled)\r\n : [];\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n if (isSaveOnlyDiscount(discount)) {\r\n discount.selected = true;\r\n }\r\n return discount\r\n })\r\n return discountSection\r\n })\r\n .filter(discountSection => discountSection.discounts.length)\r\n store.dispatch(setDiscountSections(discountSections));\r\n }\r\n }\r\n });\r\n};\r\n\r\nexport const getNavigationButtons = (testConnection = false) => {\r\n let forTool = \"\";\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n forTool = \"bv\";\r\n break;\r\n case \"Kitchen\":\r\n case \"kvScene\":\r\n forTool = \"kv\";\r\n break;\r\n default:\r\n forTool = document.kvConfig.visualizerType;\r\n break;\r\n }\r\n return JsonApi.getMenuNavigation(forTool, testConnection)\r\n .then(menuData => {\r\n if (document.kvConfig.kioskMode || testConnection) {\r\n return false\r\n }\r\n store.dispatch(loadMobileNav(menuData.data));\r\n return menuData\r\n })\r\n .catch(error => {\r\n if (testConnection) {\r\n renderErrorPopup(error, \"\", getNavigationButtons.bind(this, true));\r\n }\r\n return error\r\n });\r\n};\r\n\r\nexport const copySqftImagesToAnotherJob = (fabricatorId = document.kvConfig.userId, postData) => {\r\n return JsonApi.copySqftImages(fabricatorId, postData)\r\n .then(response => response.data)\r\n .catch(error => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n loaderDisable();\r\n throw new Error(error);\r\n })\r\n};\r\n","export const COLORS = {\r\n red: \"#d0021b\",\r\n // red: \"#FF0012\",\r\n gray: \"#9b9b9b\",\r\n gray2: \"#979797\",\r\n gray3: \"#b8b8b8\",\r\n gray4: \"#5e5e5e\",\r\n light: \"#e1e1e1\",\r\n white: \"#ffffff\",\r\n grohe: \"#292929\",\r\n};\r\n\r\nconst COLOR_THEMES = {\r\n \"qc\": {\r\n primary: \"#4A90E2\",\r\n primary_hover: \"#3483de\", //darken(#4A90E2, 5%),\r\n active: \"#9FC522\",\r\n active_hover: \"#8daf1e\", //darken(#9FC522, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"caes\": {\r\n primary: \"#58595b\",\r\n primary_hover: \"#4b4c4e\", //darken(#58595b, 5%),\r\n active: \"#f46c42\",\r\n active_hover: \"#f3592a\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-caes\",\r\n },\r\n // \"as\": {\r\n // primary: \"#36919B\",\r\n // primary_hover: \"#4CABB5\", //darken(#58595b, 5%),\r\n // active: \"#004D58\",\r\n // active_hover: \"#4CABB5\", //darken(#f46c42, 5%),\r\n // assetsPath: \"../images-caes\",\r\n // },\r\n \"moderno\": {\r\n primary: \"#343434\",\r\n primary_hover: \"#1b1b1b\", //darken(#58595b, 5%),\r\n active: \"#d0021b\",\r\n active_hover: \"#9d0214\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-moderno\",\r\n },\r\n \"look\": {\r\n primary: \"#000000\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#3984BE\",\r\n active_hover: \"#3376aa\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"grohe\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#3984BE\",\r\n active_hover: \"#3376aa\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images\",\r\n },\r\n \"as\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#E70026\",\r\n active_hover: \"#ce0022\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-as\",\r\n },\r\n \"nhance\": {\r\n primary: \"#000000\", // \"#0F2B4C\",\r\n primary_hover: \"#0b1f37\", //darken(#58595b, 5%),\r\n active: \"#ef7038\",\r\n active_hover: \"#ed5f20\", //darken(#f46c42, 5%),\r\n assetsPath: \"../images-nhance\",\r\n },\r\n}\r\n\r\nexport const GROHE_FILTER_COLORS = {\r\n \"GROHE CHROME\": \"#f4f4f3\", // R:244 G:244 B:243\r\n \"GROHE POLISHED NICKEL\": \"#e4e0cb\", // R:228 B:224 G:203\r\n \"GROHE HARD GRAPHITE\": \"#605754\", // R:96 G:87 B:84\r\n \"GROHE BRUSHED NICKEL\": \"#c8beb1\", // R:200 G:190 B:177\r\n \"GROHE BRUSHED COOL SUNRISE\": \"#bb9759\" // R:187 G:151 B:89\r\n};\r\n\r\nexport default COLOR_THEMES\r\n","export const LayoutType = {\r\n Small: 0,\r\n Large: 1\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Small: \"SM\",\r\n Large: \"LG\"\r\n};\r\n\r\nexport const CountsType = {\r\n allLayoutFeaturesCount: \"All\", // not used\r\n largeLayoutFeaturesCount: \"Large\",\r\n smallLayoutFeaturesCount: \"Small\",\r\n totalFeaturesCount: \"Total\" // not used\r\n};\r\n\r\nexport const BathTubType = {\r\n Custom60in: 'Custom60in',\r\n FreeStanding: 'BathTubFreeStanding'\r\n};\r\n\r\nexport const VanityTypes = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n};\r\n\r\nexport const ShowerType = {\r\n Custom: 0,\r\n Complete: 1\r\n};\r\n\r\nexport const ShowerBodyType = {\r\n Glass: 0,\r\n Door: 1\r\n};\r\n\r\nexport const ShowerTypes = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n All: 'All'\r\n};\r\n\r\nexport const PartMenuType = {\r\n Simple: 0, // i.e. Toilet - doesn't have any sub-items\r\n Complex: 1, // i.e. Vanity - has sub-menu items, Sink, Faucet Mirror\r\n};\r\n\r\nexport function bathTubTypeToString(bathTypeType) {\r\n switch (bathTypeType) {\r\n case BathTubType.Custom60in:\r\n return 'Custom';\r\n case BathTubType.FreeStanding:\r\n return 'Complete';\r\n }\r\n}\r\nexport function bathTubStringToType(bathtubString) {\r\n switch (bathtubString) {\r\n case 'custom':\r\n return BathTubType.Custom60in;\r\n case 'complete':\r\n return BathTubType.FreeStanding;\r\n }\r\n}\r\n\r\nexport const ShowerComboTubType = {\r\n bathtub_liner: \"bathtub_liner\",\r\n replacement_tub: \"replacement_tub\",\r\n walk_in_tub: \"walk_in_tub\",\r\n jetted_tub: \"jetted_tub\",\r\n};\r\n\r\nexport const vanityWizardFilters = [\"Size\", \"DoorStyle\", \"Material\", \"Color\"];\r\n\r\nexport const showerWizardFilters = [\"Material\", \"DuraBathColor\", \"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n\r\nexport const NotQCVanityDoorStylesFilters = [\"Centennial\", \"Hudson\", \"Northbrook\", \"Osage\", \"Quebec\", \"Riverside\", \"Villager\", \"Zurich\"];\r\n","const ActionTypes = {\r\n GET_CANVAS_SCALE: \"GET_CANVAS_SCALE\",\r\n CANVAS_SCALE_CHANGED: \"CANVAS_SCALE_CHANGED\",\r\n RESET_CANVAS: \"RESET_CANVAS\",\r\n ENABLE_PINCH_ZOOM: \"ENABLE_PINCH_ZOOM\",\r\n DISABLE_PINCH_ZOOM: \"DISABLE_PINCH_ZOOM\",\r\n CHANGE_LAYOUT: \"CHANGE_LAYOUT\",\r\n UPDATE_ALL_ITEMS: \"UPDATE_ALL_ITEMS\",\r\n USER_IS_LOGGED_IN: \"USER_IS_LOGGED_IN\",\r\n USER_POPUP_CLOSED: \"USER_POPUP_CLOSED\",\r\n REMOVE_GREEN_ZONE_ON_CANVAS: \"REMOVE_GREEN_ZONE_ON_CANVAS\",\r\n FEATURE_IS_CLICKED: \"FEATURE_IS_CLICKED\",\r\n OPEN_MOBILE_NAVIGATION: \"OPEN_MOBILE_NAVIGATION\",\r\n CHANGE_MOBILE_MENU_CONTENT_TYPE: \"CHANGE_MOBILE_MENU_CONTENT_TYPE\",\r\n UPDATE_QUOTING_TOOL: \"UPDATE_QUOTING_TOOL\",\r\n /*** OLD QT ACTIONS***/\r\n SHOW_NUMERIC_KBD: \"SHOW_NUMERIC_KBD\",\r\n OVERLAY_CLICK: \"OVERLAY_CLICK\",\r\n SHOW_SUMMARY: null,\r\n SHOW_DOCUSIGN: 'SHOW_DOCUSIGN'\r\n}\r\nexport default ActionTypes;\r\n","import {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n getDistanceFromPointToInfiniteLine,\r\n getDistanceFromPointToLine,\r\n getIntersectCords,\r\n getMidPoint,\r\n getPointDistance,\r\n getPointField, isPointInsideShape,\r\n orientation\r\n} from \"./sqftHelper\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport sqftShape from \"../components/canvas/core/shapes/sqftShape\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport store from \"../../../store\";\r\nimport {SHAPE_PART_ID} from \"../constants\";\r\nimport {getRoomName} from \"../../../misc/helpers\";\r\nimport NumberText from \"../components/canvas/core/workspace/text/numberText\";\r\nimport SqftStore from \"../components/canvas/store/sqftStore\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\nimport Wall from \"../components/canvas/core/shapes/wall\";\r\nimport sqftImageManager from \"../components/canvas/store/sqftImageManager\";\r\nimport {getNavItemsFromTheWizard} from \"./sqftHelperUi\";\r\nimport {getIntersectionCordsV2} from \"./coordinatesHelper\";\r\nimport sqftEventManager from \"../components/canvas/store/sqftEventManager\";\r\nimport {getFontSizeFromContext} from \"../components/canvas/store/canvasHelper\";\r\nimport EventManager from \"../components/canvas/store/sqftEventManager\";\r\n\r\nexport const DIRECTIONS = {\r\n EAST: \"east\",\r\n WEST: \"west\",\r\n NORTH: \"north\",\r\n SOUTH: \"south\",\r\n NORTHEAST: \"northeast\",\r\n NORTHWEST: \"northwest\",\r\n SOUTHEAST: \"southeast\",\r\n SOUTHWEST: \"southwest\",\r\n UNDEFINED: \"undefined\"\r\n};\r\n\r\nexport default class ShapeHelper {\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getIntersectionsWithOtherShapes(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let shapes = workspace.getShapes();\r\n let intersectionPoints = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden && shape.id !== activeShape.id) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n let pointFieldActiveShapeLineTo = getPointField(activeShapeLine.to.x, activeShapeLine.to.y, activeShapeLine);\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let intersectionCords = getIntersectCords(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldActiveShapeLineTo.x, pointFieldActiveShapeLineTo.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y,\r\n false\r\n );\r\n\r\n if (intersectionCords) {\r\n // ctx.beginPath();\r\n // ctx.arc(intersectionCords.x, intersectionCords.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n //debugger // eslint-disable-line no-debugger\r\n (intersectionPoints[shape.id] = intersectionPoints[shape.id] || []).push(intersectionCords);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return intersectionPoints;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} shape1\r\n * @param {sqftShape} shape2\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getTwoShapesIntersections(shape1, shape2 ) {\r\n let activeShapeLines = shape1.getLines();\r\n let intersectionPoints = {};\r\n let testShapeLines = shape2.getLines();\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n let pointFieldActiveShapeLineTo = getPointField(activeShapeLine.to.x, activeShapeLine.to.y, activeShapeLine);\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let intersectionCords = getIntersectionCordsV2(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldActiveShapeLineTo.x, pointFieldActiveShapeLineTo.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y,\r\n false\r\n );\r\n\r\n if (intersectionCords) {\r\n // const ctx = sqftEventManager.getCtx();\r\n // ctx.beginPath();\r\n // ctx.arc(intersectionCords.x, intersectionCords.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n //debugger // eslint-disable-line no-debugger\r\n (intersectionPoints[shape2.id] = intersectionPoints[shape2.id] || []).push(intersectionCords);\r\n }\r\n });\r\n });\r\n\r\n return intersectionPoints;\r\n }\r\n\r\n static checkIfShapeContainsAnother(shape1, shape2) {\r\n let shape1Pos = shape1.getCenter();\r\n let shape1PosField = getPointField(shape1Pos.x, shape1Pos.y, shape1);\r\n // here will will check only shape center point\r\n for (let vertex of [shape1PosField]) {\r\n if (isPointInsideShape(vertex, shape2)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToShapes(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let shapes = workspace.getShapes();\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden && shape.id !== activeShape.id) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance || distance === 0) {\r\n let lineDirection = shape.getAngleDirection(testShapeLine);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(pointFieldTestShapeLineFrom, pointFieldTestShapeLineTo);\r\n let result = {\r\n shape: shape,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[shape.id] = distances[shape.id] || {};\r\n (distances[shape.id][lineDirection.orientation] = distances[shape.id][lineDirection.orientation] || []).push(result);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToWalls(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let walls = workspaceControllers.walls.getResources();\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n walls.forEach(function(wall) {\r\n if (wall instanceof Wall) {\r\n //todo\r\n let testShapeLines = wall.getBordersOfWallLines();\r\n //let testShapeLines = wall.getLines();\r\n //console.log(\"testShapeLines\", testShapeLines);\r\n activeShape.testShapeLines = testShapeLines;\r\n\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = testShapeLine.from.getPointField();\r\n let pointFieldTestShapeLineTo = testShapeLine.to.getPointField();\r\n\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance) {\r\n const lineOrientation = ShapeHelper.getLineOrientation(testShapeLine.from, testShapeLine.to, true);\r\n //console.log(\"lineOrientation\",lineOrientation);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(pointFieldTestShapeLineFrom, pointFieldTestShapeLineTo);\r\n let result = {\r\n shape: wall,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[wall.id] = distances[wall.id] || {};\r\n (distances[wall.id][lineOrientation] = distances[wall.id][lineOrientation] || []).push(result);\r\n //console.log(\"diff\", diff);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {object} pointFieldActivePoint {x, y}\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToPoint(pointFieldActivePoint) {\r\n let shapes = workspace.getShapes();\r\n let distances = {};\r\n //let pointFieldActivePoint = getPointField(activePoint.x, activePoint.y);\r\n shapes.forEach(function(shape) {\r\n if (shape instanceof sqftShape && !shape.isHidden) {\r\n let testShapeLines = shape.getLines();\r\n testShapeLines.forEach((testShapeLine) => {\r\n let pointFieldTestShapeLineFrom = getPointField(testShapeLine.from.x, testShapeLine.from.y, testShapeLine);\r\n let pointFieldTestShapeLineTo = getPointField(testShapeLine.to.x, testShapeLine.to.y, testShapeLine);\r\n\r\n let distance = getDistanceFromPointToInfiniteLine(\r\n pointFieldActivePoint.x, pointFieldActivePoint.y,\r\n pointFieldTestShapeLineFrom.x, pointFieldTestShapeLineFrom.y,\r\n pointFieldTestShapeLineTo.x, pointFieldTestShapeLineTo.y\r\n );\r\n\r\n if (distance) {\r\n let lineDirection = shape.getAngleDirection(testShapeLine);\r\n let diff = distance;\r\n switch (lineDirection.orientation) {\r\n case 'vertical':\r\n diff = pointFieldActivePoint.x > pointFieldTestShapeLineFrom.x ? distance : -distance\r\n break;\r\n case 'horizontal':\r\n diff = pointFieldActivePoint.y > pointFieldTestShapeLineFrom.y ? distance : -distance\r\n break;\r\n //todo rotated - set diff distance from tested point to line(beam)\r\n default:\r\n break;\r\n }\r\n\r\n if (distance < sqftConfig.SNAP_OFFSET) {\r\n let result = {\r\n shape: shape,\r\n line: testShapeLine,\r\n point: pointFieldActivePoint,\r\n distance,\r\n diff,\r\n }\r\n distances[shape.id] = distances[shape.id] || {};\r\n (distances[shape.id][lineDirection.orientation] = distances[shape.id][lineDirection.orientation] || []).push(result);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToSlabImages(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let croppedSlabImages = store.getState().sqftSlabState.croppedSlabImages;\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n croppedSlabImages.forEach(function(movableImage) {\r\n if (!movableImage.isHidden) {\r\n let testImagePoints = movableImage.getLinePointsPointField();\r\n for (let i = 0; i <= testImagePoints.length - 1; i++) {\r\n let from = testImagePoints[i];\r\n let to = testImagePoints[i === testImagePoints.length - 1 ? 0 : i + 1] ;\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n from.x, from.y,\r\n to.x, to.y,\r\n );\r\n const lineOrientation = ShapeHelper.getLineOrientation(from, to);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(from, to);\r\n let result = {\r\n shape: movableImage,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[movableImage.id] = distances[movableImage.id] || {};\r\n (distances[movableImage.id][lineOrientation] = distances[movableImage.id][lineOrientation] || []).push(result);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n /**\r\n * @param {sqftShape} activeShape\r\n * @return {object} {sqftShape.id: {lineDirection: [{point: point, distance: int}]}}\r\n */\r\n static getDistancesToImages(activeShape) {\r\n let activeShapeLines = activeShape.getLines();\r\n let appliances = sqftImageManager.getAppliances();\r\n let slabImages = sqftImageManager.getSlabImages();\r\n const images = slabImages.concat(appliances);\r\n let distances = {};\r\n activeShapeLines.forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, activeShapeLine);\r\n\r\n images.forEach(function(movableImage) {\r\n if (!movableImage.isHidden && movableImage.id !== activeShape.id) {\r\n let testImagePoints = movableImage.getLinePointsPointField();\r\n for (let i = 0; i <= testImagePoints.length - 1; i++) {\r\n let from = testImagePoints[i];\r\n let to = testImagePoints[i === testImagePoints.length - 1 ? 0 : i + 1] ;\r\n let distance = getDistanceFromPointToLine(\r\n pointFieldActiveShapeLineFrom.x, pointFieldActiveShapeLineFrom.y,\r\n from.x, from.y,\r\n to.x, to.y,\r\n );\r\n const lineOrientation = ShapeHelper.getLineOrientation(from, to);\r\n let diff = Math.abs(distance);\r\n\r\n if (diff < sqftConfig.SNAP_OFFSET) {\r\n let lineMidPoint = getMidPoint(from, to);\r\n let result = {\r\n shape: movableImage,\r\n line: activeShapeLine,\r\n point: pointFieldActiveShapeLineFrom,\r\n distance,\r\n diff,\r\n diffX: pointFieldActiveShapeLineFrom.x - lineMidPoint.x,\r\n diffY: pointFieldActiveShapeLineFrom.y - lineMidPoint.y,\r\n }\r\n distances[movableImage.id] = distances[movableImage.id] || {};\r\n (distances[movableImage.id][lineOrientation] = distances[movableImage.id][lineOrientation] || []).push(result);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n return distances;\r\n }\r\n\r\n static getLineOrientation(point1, point2, usePointsV2 = false) {\r\n const x1 = usePointsV2 ? point1.modelCorePoint.getPosX() : point1.x\r\n const x2 = usePointsV2 ? point2.modelCorePoint.getPosX() : point2.x\r\n const y1 = usePointsV2 ? point1.modelCorePoint.getPosY() : point1.y\r\n const y2 = usePointsV2 ? point2.modelCorePoint.getPosY() : point2.y\r\n let slope = (y1 - y2) / (x1 - x2);\r\n let xDiff = Math.round(Math.abs(x2 - x1));\r\n let yDiff = Math.round(Math.abs(y2 - y1));\r\n if (xDiff === 0) {\r\n return \"vertical\";\r\n } else if (yDiff === 0) {\r\n return \"horizontal\";\r\n } else {\r\n if (slope >= 0) { //southeast and northwest\r\n if (x2 > x1) {\r\n return \"SOUTHEAST\";\r\n } else {\r\n return \"NORTHWEST\";\r\n }\r\n } else {\r\n if (x2 > x1) {\r\n return \"NORTHEAST\";\r\n } else {\r\n return \"SOUTHWEST\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * find all snapping possibilities\r\n * @param {object} itemBounds\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getSnappingPossibilities(itemBounds) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return []\r\n }\r\n let resultV = [], resultH = [];\r\n for (let i in itemBounds) {\r\n if (itemBounds[i].vertical) {\r\n itemBounds[i].vertical.forEach((itemBound) => {\r\n resultV.push({\r\n shape: itemBound.shape,\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n offset: itemBound.distance,\r\n diff: itemBound.diffX,\r\n orientation: \"vertical\",\r\n });\r\n });\r\n }\r\n if (itemBounds[i].horizontal) {\r\n itemBounds[i].horizontal.forEach((itemBound) => {\r\n resultH.push({\r\n shape: itemBound.shape,\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n offset: itemBound.distance,\r\n diff: itemBound.diffY,\r\n orientation: \"horizontal\",\r\n });\r\n });\r\n }\r\n }\r\n\r\n let guides = [];\r\n\r\n // find closest snap\r\n let minV = resultV.sort((a, b) => a.diff - b.diff)[0];\r\n let minH = resultH.sort((a, b) => a.diff - b.diff)[0];\r\n if (minV) {\r\n guides.push(minV);\r\n }\r\n if (minH) {\r\n guides.push(minH);\r\n }\r\n if (guides.length > 0) {\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n return guides;\r\n }\r\n\r\n /**\r\n * Find all snapping possibilities for the same part ID\r\n * @param {object} itemBounds\r\n * @param partId\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getItemBoundsForTheSamePartIdIfExist(itemBounds, partId) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return {};\r\n }\r\n\r\n const newItemBounds = {};\r\n\r\n for (let key in itemBounds) {\r\n if (itemBounds.hasOwnProperty(key)) {\r\n let verticalElements = [];\r\n let horizontalElements = [];\r\n\r\n if (itemBounds[key].vertical) {\r\n verticalElements = itemBounds[key].vertical.filter(verticalElement => verticalElement.shape.partId === partId);\r\n }\r\n\r\n if (itemBounds[key].horizontal) {\r\n horizontalElements = itemBounds[key].horizontal.filter(horizontalElement => horizontalElement.shape.partId === partId);\r\n }\r\n\r\n if (verticalElements.length > 0 || horizontalElements.length > 0) {\r\n newItemBounds[key] = {\r\n vertical: verticalElements.length > 0 ? verticalElements : undefined,\r\n horizontal: horizontalElements.length > 0 ? horizontalElements : undefined\r\n };\r\n }\r\n }\r\n }\r\n\r\n return newItemBounds;\r\n }\r\n\r\n /**\r\n * find all snapping possibilities\r\n * @param {object} itemBounds\r\n * @return {object} {sqftShape.id: [intersectionPoints]}\r\n */\r\n static getSnappingPossibilitiesToLines(itemBounds) {\r\n if (Object.keys(itemBounds).length === 0) {\r\n return []\r\n }\r\n let resultV = [], resultH = [];\r\n for (let i in itemBounds) {\r\n if (itemBounds[i].vertical) {\r\n itemBounds[i].vertical.forEach((itemBound) => {\r\n resultV.push({\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n distance: itemBound.distance,\r\n diff: itemBound.diff,\r\n orientation: \"vertical\",\r\n });\r\n });\r\n }\r\n if (itemBounds[i].horizontal) {\r\n itemBounds[i].horizontal.forEach((itemBound) => {\r\n resultH.push({\r\n line: itemBound.line,\r\n point: itemBound.point,\r\n diff: itemBound.diff,\r\n orientation: \"horizontal\",\r\n });\r\n });\r\n }\r\n }\r\n\r\n let guides = [];\r\n\r\n // find closest snap\r\n let minV = resultV.sort((a, b) => a.distance - b.distance)[0];\r\n let minH = resultH.sort((a, b) => a.distance - b.distance)[0];\r\n if (minV) {\r\n guides.push(minV);\r\n }\r\n if (minH) {\r\n guides.push(minH);\r\n }\r\n\r\n if (guides.length > 0) {\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n return guides;\r\n }\r\n\r\n static getMinLengthToPoints(shape, points) {\r\n let shapeLines = shape.getLines();\r\n let minLength = null;\r\n let pointDistances = [];\r\n points.forEach(function(point) {\r\n shapeLines.forEach(function(line) {\r\n let pointField = getPointField(line.from.x, line.from.y, line)\r\n let pointDistance = getPointDistance(pointField, point);\r\n\r\n pointDistances.push(pointDistance);\r\n if (minLength === null || pointDistance < minLength) {\r\n minLength = pointDistance\r\n }\r\n })\r\n })\r\n pointDistances.sort((a, b) => a - b);\r\n //console.log(\"pointDistances\", pointDistances);\r\n\r\n return pointDistances ? pointDistances : null\r\n }\r\n\r\n static getInnerCornerPoints(shape) {\r\n let lines = shape.getLines(),\r\n points = [];\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].to.angle > 0 || lines[i].to.arcLength > 0) {\r\n let dir = shape.getAngleDirection(lines[i]);\r\n if (this.isAngleInner(dir)) {\r\n points.push(lines[i].to);\r\n }\r\n }\r\n }\r\n\r\n return points\r\n }\r\n\r\n static isAngleInner(dir) {\r\n let isInner = false;\r\n switch(dir.facing) {\r\n case \"nw\":\r\n if (dir.orientation === \"horizontal\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"ne\":\r\n if (dir.orientation === \"vertical\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"se\":\r\n if (dir.orientation === \"horizontal\") {\r\n isInner = true\r\n }\r\n break;\r\n case \"sw\":\r\n if (dir.orientation === \"vertical\") {\r\n isInner = true\r\n }\r\n\r\n break;\r\n }\r\n\r\n return isInner;\r\n }\r\n\r\n //deprecated (old rotation function) use getCenterPoint\r\n static getShapeCenter(lines, isSlabMode) {\r\n let max_x = 0, min_x = 0, max_y = 0, min_y = 0;\r\n for(let i = 0; i < lines.length; i++) {\r\n let rotatePointX = isSlabMode ? lines[i].from.posSlab.x : lines[i].from.x;\r\n let rotatePointY = isSlabMode ? lines[i].from.posSlab.y : lines[i].from.y;\r\n if (max_x < rotatePointX)\r\n max_x = rotatePointX;\r\n if (min_x > rotatePointX)\r\n min_x = rotatePointX;\r\n if (max_y < rotatePointY)\r\n max_y = rotatePointY;\r\n if (min_y > rotatePointY)\r\n min_y = rotatePointY;\r\n }\r\n\r\n return {x: ((max_x - min_x) / 2) + min_x, y: ((max_y - min_y) / 2) + min_y};\r\n }\r\n\r\n static getCenterPoint(points) {\r\n let xCords = points.map (point => point.x);\r\n let yCords = points.map (point => point.y);\r\n let cx = (Math.min (...xCords) + Math.max (...xCords)) / 2;\r\n let cy = (Math.min (...yCords) + Math.max (...yCords)) / 2;\r\n\r\n return {x: cx, y: cy};\r\n }\r\n\r\n static getAbsolutePosFromSnapPossibilities = (snapPossibilities, pos) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftConfig.scale;\r\n let absolutePos = {...pos};\r\n let snapWithShape = null;\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absolutePos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absolutePos.x -= snap.diff / scale\r\n break;\r\n }\r\n snapWithShape = snap.shape;\r\n })\r\n return [absolutePos, snapWithShape]\r\n }\r\n return [null, null]\r\n }\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberText = (pointFrom, pointTo, parent, changeValueCallback) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n //todo line direction\r\n lineDirection = {newDirection: \"west\"},//getPointDirection(pointFrom, pointTo, nextPoint, prevPoint),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n yOffset = lineDirection.newDirection === \"west\" ? 36 + 10 : -36;\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection.newDirection === \"south\" ? 36 + 10 : -36 - 10);\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldRenderFrameBorder: true,\r\n isLength: true\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\nexport const getPointDirection = (aP, bP, cP, lineBeforeFrom) => { // line1.from , line1.to, line2.to, lineBefore.from\r\n var\r\n mAC = getMidPoint(aP, cP),\r\n vDir,\r\n hDir,\r\n orientation = ShapeHelper.getLineOrientation(aP,bP),\r\n newDirection = '',\r\n cornerMargins = {\r\n fromTop : 0,\r\n fromLeft : 0,\r\n fromRight : 0,\r\n fromBottom : 0,\r\n },\r\n dirX = 'forward',\r\n dirY = 'forward';\r\n\r\n if (aP.x > bP.x) {\r\n dirX = 'backward';\r\n }\r\n if (aP.y < bP.y) {\r\n dirY = 'backward';\r\n }\r\n if (bP.y >= mAC.y) {\r\n vDir = \"n\";\r\n } else {\r\n vDir = \"s\";\r\n }\r\n if (bP.x >= mAC.x) { // 155 - 118\r\n hDir = \"w\";\r\n } else {\r\n hDir = \"e\";\r\n }\r\n\r\n var point1X = aP.x - (aP.x % 1),\r\n point1Y = aP.y - (aP.y % 1),\r\n point2X = bP.x - (bP.x % 1),\r\n point2Y = bP.y - (bP.y % 1),\r\n point3X = cP.x - (cP.x % 1),\r\n point3Y = cP.y - (cP.y % 1),\r\n pointBeforeX = lineBeforeFrom.x - (lineBeforeFrom.x % 1),\r\n pointBeforeY = lineBeforeFrom.y - (lineBeforeFrom.y % 1); // remove all after dot for proper compare\r\n\r\n if (orientation === \"horizontal\") {\r\n newDirection = (point1X > point2X) ? \"west\" : \"east\"\r\n }\r\n\r\n if (orientation === \"vertical\") {\r\n newDirection = (point1Y > point2Y) ? \"north\" : \"south\"\r\n }\r\n\r\n if ((point1X === point2X) && (point2Y === point3Y) && (point1X < pointBeforeX) && (newDirection === \"south\")\r\n || (point1X === point2X) && (point2Y === point3Y) && (point2X > cP.x) && (newDirection === \"north\")) {\r\n cornerMargins.fromTop = true\r\n }\r\n if ((point1Y === point2Y) && (point2X === point3X) && (point3Y > point2Y) && (point1X > point2X)\r\n ||(point1Y === point2Y) && (pointBeforeX === point1X) && (pointBeforeY < point1Y) && (point2X > point1X)) {\r\n cornerMargins.fromLeft = true\r\n }\r\n if ((point1Y === point2Y) && (point1X === pointBeforeX) && (pointBeforeY > point1Y) && (point1X > point2X)\r\n ||(point1Y === point2Y) && (point2X === point3X) && (point2Y > point3Y) && (point2X > point1X)) {\r\n cornerMargins.fromRight = true\r\n }\r\n if ((point1X === point2X) && (point2Y === point3Y) && (point1Y < point2Y) && (point3X > point2X)\r\n ||(point1X === point2X) && (point1Y === pointBeforeY) && (point1X > pointBeforeX) && (point1Y > point2Y)) {\r\n cornerMargins.fromBottom = true\r\n }\r\n\r\n return {\r\n facing: vDir + hDir,\r\n direction: {x: dirX, y: dirY},\r\n cornerMargins : cornerMargins,\r\n orientation : orientation,\r\n newDirection : newDirection\r\n }\r\n\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberTextV2 = (pointFrom, pointTo, parent, changeValueCallback) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n lineDirection = getLineDirection(pointFrom, pointTo),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n const ctx = sqftEventManager.getCtx();\r\n const fontSize = getFontSizeFromContext(ctx);\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : -fontSize;\r\n\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection === DIRECTIONS.SOUTH ? + 10 : - 10);\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldRenderFrameBorder: false,\r\n isLength: true,\r\n priority: EventManager.priorities.SEGMENT\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\n/**\r\n * get line length number text from 2 point\r\n */\r\nexport const getLineLengthNumberTextV2ForTheImage = (pointFrom, pointTo, parent, changeValueCallback) => {\r\n const midPoint = getMidPoint(pointFrom.getPosition(), pointTo.getPosition()),\r\n lineOrientation = getLineOrientation(pointFrom, pointTo),\r\n lineDirection = getLineDirection(pointFrom, pointTo),\r\n distance = getPointDistance(pointFrom, pointTo);\r\n\r\n let yOffset = 0,\r\n xOffset = 0;\r\n const ctx = sqftEventManager.getCtx();\r\n const fontSize = getFontSizeFromContext(ctx);\r\n\r\n switch (lineOrientation) {\r\n case orientation.HORIZONTAL: {\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : fontSize;\r\n\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n xOffset = (lineDirection === DIRECTIONS.SOUTH ? - 0 : 0);\r\n yOffset = lineDirection === DIRECTIONS.WEST ? fontSize : fontSize;\r\n\r\n break;\r\n }\r\n //TODO rotation\r\n case orientation.NORTHWEST: { break; }\r\n case orientation.NORTHEAST: { break; }\r\n case orientation.SOUTHWEST: { break; }\r\n case orientation.SOUTHEAST: { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: lineOrientation,\r\n betweenPoints: {\r\n pointFrom: pointFrom,\r\n pointTo: pointTo,\r\n }\r\n };\r\n\r\n let design = {\r\n shouldRenderFrameBorder: false,\r\n isLength: true,\r\n eventsPriority: EventManager.priorities.IMAGE_LINE\r\n };\r\n\r\n return new NumberText(distance, pos, design, parent, changeValueCallback);\r\n}\r\n\r\nexport const getLineDirection = (pointA, pointB, shouldRound = false) => {\r\n let deltaX, deltaY;\r\n if (shouldRound) {\r\n deltaX = Math.round10(pointB.x, -1) - Math.round10(pointA.x, -1);\r\n deltaY = Math.round10(pointB.y, -1) - Math.round10(pointA.y, -1);\r\n } else {\r\n deltaX = pointB.x - pointA.x;\r\n deltaY = pointB.y - pointA.y;\r\n }\r\n\r\n if (deltaX > 0 && deltaY === 0) {\r\n return DIRECTIONS.EAST;\r\n } else if (deltaX < 0 && deltaY === 0) {\r\n return DIRECTIONS.WEST;\r\n } else if (deltaY > 0 && deltaX === 0) {\r\n return DIRECTIONS.SOUTH;\r\n } else if (deltaY < 0 && deltaX === 0) {\r\n return DIRECTIONS.NORTH;\r\n } else if (deltaX > 0 && deltaY < 0) {\r\n return DIRECTIONS.NORTHEAST;\r\n } else if (deltaX < 0 && deltaY < 0) {\r\n return DIRECTIONS.NORTHWEST;\r\n } else if (deltaX > 0 && deltaY > 0) {\r\n return DIRECTIONS.SOUTHEAST;\r\n } else if (deltaX < 0 && deltaY > 0) {\r\n return DIRECTIONS.SOUTHWEST;\r\n } else {\r\n return DIRECTIONS.UNDEFINED;\r\n }\r\n}\r\n\r\n/**\r\n * @Deprecated. Use getLineDirection instead\r\n */\r\nexport const getLineOrientation = (pointFrom, pointTo) => {\r\n let slope = getSlope(pointFrom, pointTo),\r\n xDiff = Math.round(Math.abs(pointTo.x - pointFrom.x)),\r\n yDiff = Math.round(Math.abs(pointTo.y - pointFrom.y));\r\n\r\n if (xDiff === 0) {\r\n return orientation.VERTICAL;\r\n } else if (yDiff === 0) {\r\n return orientation.HORIZONTAL;\r\n } else {\r\n if (slope >= 0) { //southeast and northwest\r\n if (pointTo.x > pointFrom.x) {\r\n return orientation.SOUTHEAST;\r\n } else {\r\n return orientation.NORTHWEST;\r\n }\r\n } else {\r\n if (pointTo.x > pointFrom.x) {\r\n return orientation.NORTHEAST;\r\n } else {\r\n return orientation.SOUTHWEST;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const getSlope = (pointFrom, pointTo) => {\r\n let x1 = pointFrom.x,\r\n x2 = pointTo.x,\r\n y1 = pointFrom.y,\r\n y2 = pointTo.y;\r\n\r\n return (y1 - y2) / (x1 - x2);\r\n}\r\n\r\nexport const getSlopeV2 = (pointFrom, pointTo) => {\r\n if (pointTo.x - pointFrom.x !== 0) {\r\n return (pointTo.y - pointFrom.y) / (pointTo.x - pointFrom.x);\r\n }\r\n return Number.MAX_VALUE;\r\n}\r\n\r\n/**\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line1\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line2\r\n * get angle between two lines https://www.geeksforgeeks.org/angle-between-a-pair-of-lines/\r\n */\r\nexport const getAngleBetweenTwoLines = (line1, line2) => {\r\n const slopeLine1 = getSlopeV2(line1.from, line1.to);\r\n const slopeLine2 = getSlopeV2(line2.from, line2.to);\r\n\r\n return getAngleBetweenTwoSlopes(slopeLine1, slopeLine2);\r\n}\r\n\r\nexport const getAngleBetweenTwoSlopes = (M1, M2) => {\r\n // Store the tan value of the angle\r\n let angle = Math.abs((M2 - M1) / (1 + M1 * M2));\r\n\r\n // Calculate tan inverse of the angle\r\n let ret = Math.atan(angle);\r\n\r\n // Convert the angle from\r\n // radian to degree\r\n\r\n return (ret * 180) / Math.PI;\r\n}\r\n\r\n/**\r\n * @param {{x:number, y: number}} point1\r\n * @param {{x:number, y: number}} point2\r\n */\r\nexport const getVectorByPoints = (point1, point2) => {\r\n return {x: point2.x - point1.x, y: point2.y - point1.y}\r\n}\r\n\r\n/**\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line1\r\n * @param {{from: {x:number, y: number}, to: {x:number, y: number}}} line2\r\n */\r\nexport const getAngleBetweenTwoLinesV2 = (line1, line2) => {\r\n const vector1 = getVectorByPoints(line1.to, line1.from);\r\n const vector2 = getVectorByPoints(line2.from, line2.to);\r\n //const pointDistance = Math.sqrt(Math.pow(vectorLine2.x - vectorLine1.x, 2) + Math.pow(vectorLine2.y - vectorLine1.y, 2));\r\n const cosAngle = (vector1.x + vector2.x + vector1.y + vector2.y)\r\n / Math.sqrt(Math.pow(vector1.x, 2) + Math.pow(vector1.y, 2))\r\n * Math.sqrt(Math.pow(vector2.x, 2) + Math.pow(vector2.y, 2));\r\n\r\n //todo\r\n //console.log(\"cosAngle\", cosAngle);\r\n return Math.acos (cosAngle)\r\n}\r\n\r\n/**\r\n * Calculates the angle ABC ()\r\n *\r\n * A first point, ex: {x: 0, y: 0}\r\n * C second point\r\n * B center point\r\n **/\r\nexport const getAngleBetween3Points = (A, B, C) => {\r\n let AB = Math.sqrt(Math.pow(B.x - A.x,2)+ Math.pow(B.y - A.y,2));\r\n let BC = Math.sqrt(Math.pow(B.x - C.x,2)+ Math.pow(B.y - C.y,2));\r\n let AC = Math.sqrt(Math.pow(C.x - A.x,2)+ Math.pow(C.y - A.y,2));\r\n const angleInRadians = Math.acos((BC*BC+AB*AB-AC*AC)/(2*BC*AB));\r\n\r\n return (angleInRadians * 180) / Math.PI\r\n}\r\n\r\nexport const getEdgeFeatureGroup = () => {\r\n if (!SqftStore.edgeFeatureGroups) {\r\n SqftStore.edgeFeatureGroups = {};\r\n }\r\n\r\n const visualizerType = document.kvConfig.visualizerType;\r\n\r\n // Check if the edgeFeatureGroup for the current visualizerType is already cached\r\n if (!SqftStore.edgeFeatureGroups[visualizerType]) {\r\n const mainNeeded = \"edge_profile\";\r\n const oppositeNeeded = \"center_island_edge\";\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n let featureGroup = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded);\r\n }\r\n if (!featureGroup) {\r\n featureGroup = layout.parts[\"Countertop\"] && layout.parts[\"Countertop\"].edge\r\n ? { part: layout.parts[\"Countertop\"].edge }\r\n : null;\r\n }\r\n if (!featureGroup) {\r\n let fg = layout.getFeatureGroupByPartId(\"edge_profile\");\r\n if (fg) {\r\n featureGroup = {part: fg};\r\n }\r\n }\r\n\r\n // Cache the result for the current visualizerType\r\n SqftStore.edgeFeatureGroups[visualizerType] = featureGroup;\r\n }\r\n\r\n return SqftStore.edgeFeatureGroups[visualizerType];\r\n};\r\n\r\nexport const getEdgeFeatures = (edgeFeatureGroup) => {\r\n if (!edgeFeatureGroup) {\r\n edgeFeatureGroup = getEdgeFeatureGroup();\r\n }\r\n if (!edgeFeatureGroup) {\r\n return []\r\n }\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n\r\n if (SqftStore.edgeFeatures.length === 0) {\r\n let navItems\r\n\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(edgeFeatureGroup);\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(edgeFeatureGroup,\r\n {},\r\n \"\",\r\n false,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n SqftStore.edgeFeatures = edgeFeatureGroup\r\n ? navItems\r\n : [];\r\n }\r\n\r\n return SqftStore.edgeFeatures\r\n};\r\n\r\n\r\n/**\r\n * countertopPartName will be center_island_countertop if it not exists in the room or at all in qtCategories the same\r\n * for center_island_countertop, it will return countertop if center_island_countertop not exists\r\n * @returns {[string, string]} countertopPartName, centerIslandPartName\r\n */\r\nexport const getCountertopPartNames = (intl = null) => {\r\n const state = store.getState();\r\n const {quotes, activeQuoteIndex} = state.quotesState;\r\n const fabricatorData = state.fabricatorState;\r\n const activeRoomId = state.sqftMenuState.activeRoomId;\r\n const cartItems = state.cartState.cartItems;\r\n intl = intl ? intl : workspace.intl;\r\n const roomName = getRoomName(activeQuoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData);\r\n void roomName; //todo remove\r\n const room = activeRoomId ? activeRoomId : document.kvConfig.visualizerType\r\n const layout = getCurrentLayout();\r\n\r\n let countertopNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.countertop, room);\r\n let centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.center_island_countertop, room);\r\n\r\n if (!countertopNavItem && !centerIslandNavItem) {\r\n countertopNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.countertop);\r\n centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.center_island_countertop);\r\n }\r\n\r\n //try to assign vanity countertop if countertop or center_island_countertop not exist\r\n if (!countertopNavItem && !centerIslandNavItem) {\r\n countertopNavItem = centerIslandNavItem = layout.getSubPartFromQtCategories(SHAPE_PART_ID.vanity_countertop);\r\n }\r\n\r\n const countertopPartName = countertopNavItem ? countertopNavItem.part.partId : SHAPE_PART_ID.center_island_countertop;\r\n const centerIslandPartName = centerIslandNavItem ? centerIslandNavItem.part.partId : SHAPE_PART_ID.countertop;\r\n\r\n return [countertopPartName, centerIslandPartName];\r\n}\r\n\r\n/**\r\n * Test if shape part ids are equal, parentPartId is added for the spacers\r\n * @param shape\r\n * @param testShape\r\n * @return {boolean}\r\n */\r\nexport const canShapeBeAutoShifted = (shape, testShape) => {\r\n const isTestShapePlacedOnTheFloor = getIsShapePlacedOnTheFloor(testShape);\r\n const isTestShapePlacedOnTheWall = getIsShapePlacedOnTheWall(testShape);\r\n\r\n return (shape.id !== testShape.id &&\r\n ((shape.partId === SHAPE_PART_ID.upper_cabinet_boxes && isTestShapePlacedOnTheWall)\r\n || (shape.parentPartId === SHAPE_PART_ID.upper_cabinet_boxes && isTestShapePlacedOnTheWall)\r\n || (shape.partId === SHAPE_PART_ID.lower_cabinet_boxes && isTestShapePlacedOnTheFloor)\r\n || (shape.parentPartId === SHAPE_PART_ID.lower_cabinet_boxes && isTestShapePlacedOnTheFloor)\r\n || (shape.partId === SHAPE_PART_ID.tall_cabinet_boxes && isTestShapePlacedOnTheFloor)\r\n || (shape.parentPartId === SHAPE_PART_ID.tall_cabinet_boxes && isTestShapePlacedOnTheFloor)))\r\n}\r\n\r\nexport const getIsShapePlacedOnTheFloor = (shape) => {\r\n return (shape.partId === SHAPE_PART_ID.tall_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.tall_cabinet_boxes\r\n || shape.partId === SHAPE_PART_ID.lower_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.lower_cabinet_boxes\r\n)}\r\n\r\nexport const getIsShapePlacedOnTheWall = (shape) => {\r\n return (shape.partId === SHAPE_PART_ID.upper_cabinet_boxes\r\n || shape.parentPartId === SHAPE_PART_ID.upper_cabinet_boxes\r\n)}\r\n","import React from \"react\";\r\n\r\nexport const SaveIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n};\r\n\r\nexport const ProductsIconAnimated = () => (\r\n \r\n icon-forklift\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const TimingIconAnimated = () => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n);\r\n\r\nexport const EditIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const EyeBallIcon = (props) => (\r\n \r\n icons/EyeEnabledOn\r\n Created with Sketch.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const ScreenshotIcon = (props) => (\r\n \r\n icon-screenshot@2x\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const PlusIcon = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookLayoutIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\n\r\nexport const LookExitIcon = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const LookCoBrowseIcon = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookShareIcons = {\r\n facebook: ,\r\n pinterest: (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n // twitter: ,\r\n};\r\n\r\nexport const LookExpandIcon = () => (\r\n \r\n);\r\n\r\nexport const LookMinimizeIcon = () => (\r\n \r\n);\r\n\r\nexport const LookCartIcon = () => (\r\n \r\n);\r\n\r\nexport const LookRoomIdeasIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const Look3DIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookAugmentRealityIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIconHover = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIconNavigate = () => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const LookIntroIcon = () => (\r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const groheIcon = (\r\n \r\n {/**/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const AmericanStandardIcon = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheListIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheFilterIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheGridIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheArchitectureIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheLockIcon = () => (\r\n // \r\n \r\n // />\r\n // \r\n)\r\n\r\nexport const GroheLockIconSmall = () => (\r\n // \r\n \r\n // \r\n)\r\nexport const GroheNoteAddIcon = () => (\r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheBoxIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheVehicleIcon = () => (\r\n \r\n)\r\n\r\nexport const GroheDownloadIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport const GroheSQFTIcon = () => (\r\n \r\n \r\n \r\n)\r\nexport const GroheInkPenIcon = () => (\r\n \r\n \r\n \r\n)\r\n","import * as types from \"./actionTypes\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getBvFeatures} from \"../api/server-api\";\r\nimport {IS_QKB_UI} from \"../config\";\r\nimport {\r\n changeWizardValuesToUseNewGroups,\r\n getConflictingWizardSteps, getNextWizardSteps,\r\n getWizardVisualizerType, isSameVisualizerWizard, switchCartItemsToNewWizardGroups\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {getUpdatedAllWizardValues} from \"../reducers/wizardReducer\";\r\nimport {changeAllCartItems} from \"./shoppingCartFunctions\";\r\nimport {navItemIsExcluded} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n\r\nexport const setWizardIsActive = (wizardIsActive, visualizerType) => ({\r\n type: types.SET_WIZARD_IS_ACTIVE,\r\n payload: {wizardIsActive, visualizerType}\r\n});\r\n\r\nexport const setWizardConfig = (wizardConfig) => ({\r\n type: types.SET_WIZARD_CONFIG,\r\n payload: {wizardConfig}\r\n});\r\n\r\nexport const setWizardList = (wizardList) => ({\r\n type: types.SET_WIZARD_LIST,\r\n payload: {wizardList}\r\n});\r\n\r\nexport const setWizardActiveItem = (wizardActiveItem, quoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState} = getState();\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_ACTIVE_ITEM,\r\n payload: {\r\n wizardActiveItem,\r\n quoteIndex: Number.isInteger(quoteIndex) ? quoteIndex : quotesState.activeQuoteIndex,\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setWizardShowFeatureSection = (wizardShowFeatureSection) => ({\r\n type: types.SET_WIZARD_SHOW_FEATURE_SECTION,\r\n payload: {wizardShowFeatureSection}\r\n});\r\n\r\nexport const setWizardActiveStep = (wizardActiveStep, currentWizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState} = getState();\r\n\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n const wizardItem = currentWizardItem || wizardState.wizardActiveItem;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n if (!IS_QKB_UI) {\r\n Object.keys(wizardState.wizardSelectedValues).reverse().forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (selectedKeyNumber > wizardActiveStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n }\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizardConflictingSteps = [];\r\n }\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.wizardItemId === wizardItem.id && wizObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizObject)) {\r\n wizObject.lastVisitedStep = wizardActiveStep // keep it up to date to be able to restore\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_ACTIVE_STEP,\r\n payload: {\r\n wizardActiveStep,\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n allWizardsValues,\r\n quoteIndex,\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const clearWizardSelectedValue = (neededStep, currentWizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState} = getState();\r\n\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n const wizardItem = currentWizardItem || wizardState.wizardActiveItem;\r\n\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n Object.keys(wizardState.wizardSelectedValues).forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (+selectedKeyNumber === +neededStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.wizardItemId === wizardItem.id && wizObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizObject)) {\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n quoteIndex,\r\n wizardConflictingSteps: wizardState.wizardConflictingSteps\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setWizardSelectedValues = (wizardSelectedValues, direct = false, wizardItem = null, currentQuoteIndex = null) => {\r\n return (dispatch, getState) => {\r\n const {quotesState, wizardState, cartState, fabricatorState} = getState();\r\n const {cartItems} = cartState;\r\n const wizardActiveItem = wizardItem || wizardState.wizardActiveItem;\r\n const quoteIndex = Number.isInteger(currentQuoteIndex) ? currentQuoteIndex : quotesState.activeQuoteIndex;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n\r\n if (!direct && Object.keys(wizardSelectedValues).length === 1) {\r\n const currentStep = Object.keys(wizardSelectedValues)[0];\r\n if (currentStep) {\r\n const wizardGroup = wizardSelectedValues[currentStep].wizardGroup;\r\n const selectedFeature = wizardSelectedValues[currentStep].selectedFeature;\r\n if (wizardGroup && wizardGroup.mergedGroups && selectedFeature) {\r\n const realWizardGroup = wizardGroup.mergedGroups.find(wizG => !navItemIsExcluded({part: selectedFeature}, wizG));\r\n if (realWizardGroup) {\r\n if ((realWizardGroup.id !== wizardSelectedValues[currentStep].wizardGroup.id)) {\r\n wizardSelectedValues[currentStep].wizardGroup = Object.assign({}, wizardGroup, {\r\n id: realWizardGroup.id\r\n });\r\n // console.log(\"accurateWizardGroup!\", wizardSelectedValues[currentStep].wizardGroup);\r\n }\r\n } else {\r\n console.log(\"how is that possible? wizardGroup.mergedGroups\", wizardGroup.mergedGroups, selectedFeature);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let newWizValues = direct\r\n ? Object.assign({}, wizardSelectedValues)\r\n : Object.assign({}, wizardState.wizardSelectedValues, wizardSelectedValues);\r\n\r\n // console.log(\"newWizValues\", newWizValues);\r\n\r\n if (IS_QKB_UI && fabricatorState.settings.checkout && cartItems.length && !direct\r\n && wizardSelectedValues && Object.keys(wizardSelectedValues).length === 1) {\r\n\r\n const currentStep = +Object.keys(wizardSelectedValues)[0];\r\n const commonObject = {wizardActiveItem, quoteIndex, wizardSelectedValues};\r\n let newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, newWizValues);\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // here we replace cartItems to match new selections! to prevent conflicting\r\n let {updatedWizardValues, shouldReassignValues} = changeWizardValuesToUseNewGroups(newWizValues, newWizardSteps);\r\n if (shouldReassignValues) {\r\n newWizValues = updatedWizardValues;\r\n // create new steps according to new values\r\n newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, newWizValues);\r\n // console.log(\"newWizardSteps2!\", newWizardSteps);\r\n }\r\n // here we replace cartItems to match new selections! to prevent conflicting\r\n let {newCartItems, shouldReassign} = switchCartItemsToNewWizardGroups(\r\n newWizardSteps,\r\n commonObject,\r\n cartItems,\r\n );\r\n if (shouldReassign) {\r\n dispatch(changeAllCartItems([...newCartItems]))\r\n }\r\n\r\n wizardConflictingSteps = getConflictingWizardSteps(\r\n newWizValues,\r\n commonObject,\r\n newCartItems,\r\n newWizardSteps,\r\n );\r\n }\r\n\r\n if (wizardActiveItem) {\r\n // console.log(\"wizardConflictingSteps\", action.payload.wizardConflictingSteps);\r\n // this works for QKB UI only for now, we are not using it on lixil\r\n const allWizardsValues = wizardConflictingSteps.length // do not change them to be able to restore when wizard is closed\r\n ? wizardState.allWizardsValues\r\n : getUpdatedAllWizardValues(wizardState, quoteIndex, wizardActiveItem.id, newWizValues);\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n quoteIndex,\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n wizardConflictingSteps\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: types.SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n // direct,\r\n quoteIndex,\r\n // wizardActiveItem: wizardItem || wizardState.wizardActiveItem,\r\n // fabricatorState,\r\n // cartItems: cartState.cartItems\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setAllWizardSelectedValues = (wizardSelectedValues, quoteIndex, wizardItemId) => ({\r\n type: types.SET_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {wizardSelectedValues, quoteIndex, wizardItemId}\r\n});\r\n\r\nconst getMissingWizardValuesFeatures = async (compressedAllWizardsValues) => {\r\n\r\n const missingFeatures = {};\r\n\r\n // 1) find missing features;\r\n compressedAllWizardsValues.forEach(wizardObject => {\r\n\r\n const visualizerType = getWizardVisualizerType(wizardObject, true);\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n if (!missingFeatures[visualizerType]) {\r\n missingFeatures[visualizerType] = [];\r\n }\r\n\r\n Object.keys(wizardObject.wizardSelectedValues).forEach(stepIndex => {\r\n const compressedFeature = wizardObject.wizardSelectedValues[stepIndex].selectedFeature;\r\n if (compressedFeature) {\r\n const featureGroup = layout.getFeatureGroupByPartId(compressedFeature.partId);\r\n if (!featureGroup && !missingFeatures[visualizerType].includes(compressedFeature.dbFeatureId)) {\r\n missingFeatures[visualizerType].push(compressedFeature.dbFeatureId);\r\n return\r\n }\r\n const loadedFeature = layout.getLoadedFeatureById(compressedFeature.dbFeatureId, featureGroup);\r\n if (!loadedFeature && !missingFeatures[visualizerType].includes(compressedFeature.dbFeatureId)) {\r\n missingFeatures[visualizerType].push(compressedFeature.dbFeatureId);\r\n }\r\n }\r\n });\r\n })\r\n\r\n // 2) get missing features from the backend;\r\n for (let visualizerType of Object.keys(missingFeatures)) {\r\n if (missingFeatures[visualizerType].length) {\r\n // loaderEnable();\r\n const featuresFromJob = await getBvFeatures(missingFeatures[visualizerType]);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const layout = getCurrentLayout(visualizerType);\r\n layout.loadNewFeatures(featuresFromJob.data);\r\n }\r\n // loaderDisable();\r\n }\r\n }\r\n return Promise.resolve()\r\n}\r\nconst getRestoredWizardValues = (compressedAllWizardsValues, wizardList) => {\r\n\r\n // 3) now we can set the values\r\n let allWizardsValues = [];\r\n compressedAllWizardsValues.forEach(wizardObject => {\r\n let wizardValues = {};\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === wizardObject.wizardItemId);\r\n if (!wizardItem) {\r\n console.log(\"hmmm, it looks like the wizard was deleted, but it was active in the job\", wizardObject);\r\n return\r\n }\r\n\r\n const visualizerType = getWizardVisualizerType(wizardObject, true);\r\n const layout = getCurrentLayout(visualizerType);\r\n\r\n Object.keys(wizardObject.wizardSelectedValues).forEach(stepIndex => {\r\n\r\n const selectedWizardObject = Object.assign({}, wizardObject.wizardSelectedValues[stepIndex]);\r\n\r\n //3.1) copy all other values\r\n wizardValues[stepIndex] = selectedWizardObject.wizardGroup ? Object.assign({}, selectedWizardObject, {\r\n wizardGroup: Object.assign({}, selectedWizardObject.wizardGroup, {\r\n mergedGroups: selectedWizardObject.wizardGroup.mergedGroups ? [] : null\r\n })\r\n }) : Object.assign({}, selectedWizardObject)\r\n\r\n //3.2) update wizardGroup with all excluded features\r\n if (selectedWizardObject.wizardGroup) {\r\n const realWizardGroup = wizardItem.wizardGroups.find(wizGroup => wizGroup.id === selectedWizardObject.wizardGroup.id);\r\n if (realWizardGroup) {\r\n wizardValues[stepIndex].wizardGroup = realWizardGroup;\r\n } else {\r\n console.log(\"wizard was changed, wizard group not found\", selectedWizardObject.wizardGroup);\r\n wizardValues[stepIndex] = {};\r\n }\r\n if (selectedWizardObject.wizardGroup.mergedGroups && realWizardGroup) {\r\n selectedWizardObject.wizardGroup.mergedGroups.forEach(compressedWG => {\r\n const foundWg = wizardItem.wizardGroups.find(wizGroup => {\r\n return wizGroup.id === compressedWG.id && wizGroup.groupName === compressedWG.groupName\r\n });\r\n if (foundWg) {\r\n if (!wizardValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizardValues[stepIndex].wizardGroup.mergedGroups = [];\r\n }\r\n wizardValues[stepIndex].wizardGroup.mergedGroups.push(Object.assign({}, foundWg, {mergedGroups: null})); // to prevent circular\r\n } else {\r\n console.log(\"WIZARD WAS CHANGED, merged wizard group can't be found!\", );\r\n }\r\n })\r\n }\r\n }\r\n\r\n //3.3) update selectedFeature\r\n if (selectedWizardObject.selectedFeature) {\r\n const featureGroup = layout.getFeatureGroupByPartId(selectedWizardObject.selectedFeature.partId);\r\n wizardValues[stepIndex].selectedFeature = featureGroup\r\n ? layout.getLoadedFeatureById(selectedWizardObject.selectedFeature.dbFeatureId, featureGroup)\r\n : null;\r\n }\r\n });\r\n allWizardsValues.push(Object.assign({}, wizardObject, {wizardSelectedValues: wizardValues}));\r\n })\r\n console.log(\"restoring allWizardsValues:\", allWizardsValues);\r\n return allWizardsValues\r\n}\r\n\r\nexport const updateAllWizardValues = (allWizardsValues) => ({\r\n type: types.RESTORE_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {allWizardsValues}\r\n})\r\n\r\nexport const restoreAllWizardSelectedValues = (compressedAllWizardsValues) => {\r\n return async (dispatch, getState) => {\r\n const {wizardState} = getState();\r\n await getMissingWizardValuesFeatures(compressedAllWizardsValues);\r\n const valuesToRestore = getRestoredWizardValues(compressedAllWizardsValues, wizardState.wizardList);\r\n dispatch(updateAllWizardValues(valuesToRestore));\r\n }\r\n}\r\n\r\nexport const setWizardMissingFeatures = (groupName = \"\", wizardMissingFeatures = []) => ({\r\n type: types.SET_WIZARD_MISSING_FEATURES,\r\n payload: {\r\n groupName,\r\n wizardMissingFeatures\r\n }\r\n});\r\n\r\nexport const setWizardConflictPopupOpened = (wizardConflictPopupOpened) => ({\r\n type: types.SET_WIZARD_CONFLICT_POPUP_OPENED,\r\n payload: {wizardConflictPopupOpened}\r\n});\r\n\r\nexport const setWizardConflictSteps = (wizardConflictingSteps) => ({\r\n type: types.SET_WIZARD_CONFLICT_STEPS,\r\n payload: {wizardConflictingSteps}\r\n});\r\n\r\nexport const setWizardSqftCartItems = (wizardSqftCartItems) => ({\r\n type: types.SET_WIZARD_SQFT_CART_ITEMS,\r\n payload: {wizardSqftCartItems}\r\n});\r\n","import isEqual from \"lodash/isEqual\";\r\n\r\nimport {getFeatureIsActive, getFeatureParent, getSkuWithoutDot, isInStock} from \"./lookFunctions2\";\r\nimport {LOOK_NAVIGATION_LIST_TYPES, LOOK_WALLS_ONLY, METADATA} from \"../core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getFeatureCost, getFeatureIsLocked, isIframe} from \"../../../misc/helpers\";\r\nimport store from \"../../../store\";\r\nimport {getFilterGroupValue, getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getFeatureOptions} from \"./lookFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {setLookWallsApplyTo} from \"../../../actions/lookFunctions\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {\r\n setCabinetsApplyTo, setCabinetsApplyToBathroom,\r\n setCountertopsApplyTo,\r\n setCountertopsApplyToBathroom, setEdgesApplyTo, setApplyToCommon\r\n} from \"../../../actions/navigationFunctions\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport Config, {getCommonVisualizerType} from \"../../../config\";\r\nimport {\r\n CABINET_GROUP_BATHROOM,\r\n COUNTERTOP_GROUP_BATHROOM,\r\n HANDLES_GROUP_BATHROOM, SHOWER_FLOOR_GROUP_BATHROOM\r\n} from \"../../bvSceneComponent/core/constants\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\n\r\nconst getFeaturePropertyToSort = (navItem, property) => {\r\n if (property === \"name\") {\r\n return navItem.part.getFeatureName()\r\n }\r\n if (property === \"SortPositionNum\") {\r\n return navItem.part.metaData[property] || 99999;\r\n }\r\n return navItem.part[property];\r\n}\r\n\r\nconst getNavItemsSortedByProperty = (navItems, property, property2) => {\r\n const order = \"asc\";\r\n // console.log(\"navItems - navItems\", navItems);\r\n navItems = navItems.sort((a,b) => {\r\n let prop1 = getFeaturePropertyToSort(a, property);\r\n let prop2 = getFeaturePropertyToSort(b, property);\r\n let prop3 = getFeaturePropertyToSort(a, property2);\r\n let prop4 = getFeaturePropertyToSort(b, property2);\r\n return order === \"asc\"\r\n ? (prop1 > prop2) ? 1 : (prop1 < prop2) ? -1 : (prop3 > prop4) ? 1 : (prop3 < prop4) ? -1 : 0\r\n : (prop1 < prop2) ? 1 : (prop1 > prop2) ? -1 : (prop3 < prop4) ? 1 : (prop3 > prop4) ? -1 : 0\r\n })\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n};\r\n\r\n/**\r\n * sorts navItems\r\n * @param navItems {[object]}\r\n * @param isQuotingTool {boolean}\r\n * @returns {[object]}\r\n */\r\nexport const getSortedNavItems = (navItems, isQuotingTool = false) => {\r\n const {fabricatorState, userState} = store.getState();\r\n const {isPhoneNumberValidated} = userState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !isPhoneNumberValidated) {\r\n const unLockedFeatures = navItems\r\n .filter(navItem => !getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n const lockedFeatures = navItems\r\n .filter(navItem => getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n navItems = fabricatorSettings.showPricing ? [\r\n ...getNavItemsSortedByProperty(unLockedFeatures, \"featurePrice\", \"name\"),\r\n ...getNavItemsSortedByProperty(lockedFeatures, \"featurePrice\", \"name\")\r\n ] : [...unLockedFeatures, ...lockedFeatures];\r\n } else if (navItems[0] && navItems[0].part.partId === \"crown_molding\" && navItems[0].part.getParent().sortNavigationItems) {\r\n navItems = navItems[0].part.getParent().sortNavigationItems(navItems);\r\n } else if (fabricatorSettings.showPricing && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser) {\r\n navItems = navItems.map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n navItems = getNavItemsSortedByProperty(navItems, \"featurePrice\", \"name\")\r\n } else {\r\n const propertyToSort = navItems.some(navItem => navItem.part.metaData[\"SortPositionNum\"]) ? \"SortPositionNum\" : \"name\";\r\n navItems = getNavItemsSortedByProperty(navItems, propertyToSort, \"\");\r\n navItems = navItems.sort((a, b) => isInStock(b.part) - isInStock(a.part));\r\n if (!isQuotingTool && navItems.some(navItem => navItem.part.useMatchesFailedNavigation)) {\r\n navItems = getNavItemsSortedByProperty(navItems, \"matchesMetaFailed\");\r\n }\r\n }\r\n if (isQuotingTool) {\r\n // navItems = getNavItemsSortedByProperty(navItems, \"notAvailableInVisualizer\", \"_customDisplayName\")\r\n const inVisFeatures = navItems.filter(navFeature => !navFeature.part.notAvailableInVisualizer);\r\n const notInVisFeatures = navItems.filter(navFeature => navFeature.part.notAvailableInVisualizer);\r\n navItems = [\r\n ...inVisFeatures,\r\n // ...getNavItemsSortedByProperty(notInVisFeatures, \"featurePrice\", \"name\")\r\n ...notInVisFeatures\r\n ];\r\n }\r\n return navItems\r\n};\r\n\r\n/**\r\n * reorder features, places selected and similar walls on the beginning\r\n * @param navItems {[object]}\r\n * @param lookActiveFeature {featureInterface}\r\n * @param lookActiveCategory {string}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param isQuotingTool {boolean}\r\n * @param needToReplaceActiveFeature {boolean}\r\n * @returns {[object]}\r\n */\r\nexport const getReorderedItems = (\r\n navItems,\r\n lookActiveFeature,\r\n lookActiveCategory,\r\n featureGroup,\r\n isQuotingTool,\r\n needToReplaceActiveFeature = true\r\n) => {\r\n\r\n navItems = navItems.filter(feature => feature)//todo not sure why, but we in some cases have [undefined, item, item, item, undefined, undefined] etc... //need to fix this\r\n\r\n // let activeNavItem, activeNavItemIndex;\r\n const parentFeatureGroup = featureGroup || getFeatureParent(lookActiveFeature, lookActiveCategory);\r\n if (!parentFeatureGroup) {\r\n return navItems\r\n }\r\n const navItemsToChange = [];\r\n if (needToReplaceActiveFeature) {\r\n const activeNavItem = navItems.find(navItem => {\r\n if (!navItem) {\r\n return false\r\n }\r\n return getFeatureIsActive(navItem.part, lookActiveFeature, lookActiveCategory, featureGroup)\r\n })\r\n if (activeNavItem) {\r\n navItemsToChange.push(activeNavItem);\r\n }\r\n }\r\n const isWalls = LOOK_WALLS_ONLY.includes(parentFeatureGroup.partId);\r\n if (isWalls) {\r\n const layout = getCurrentLayout();\r\n const stoneFeatures = layout.getStonesActiveFeatures();\r\n // console.log(\"stoneFeatures\", stoneFeatures);\r\n\r\n stoneFeatures.forEach(cartItem => { // yes, the getStonesActiveFeatures method returns cat item objects for some reason :facepalm:\r\n if (cartItem && cartItem.cartFeature) {\r\n const stoneName = cartItem.cartFeature.getSplittedFeatureName();\r\n if (!navItemsToChange.some(navItem => navItem.part.getSplittedFeatureName() === stoneName)) {\r\n const existingInNavItems = navItems.find(navItem => navItem.part.getSplittedFeatureName() === stoneName);\r\n if (existingInNavItems) {\r\n navItemsToChange.unshift(existingInNavItems) // push to beginning\r\n }\r\n }\r\n }\r\n })\r\n }\r\n // console.log(\"navItemsToChange\", navItemsToChange);\r\n const sorted = getSortedNavItems(navItems, isQuotingTool);\r\n navItemsToChange.forEach((nItemToChange) => {\r\n const currentIndex = sorted.findIndex(navItem => navItem.part.dbFeature.id === nItemToChange.part.dbFeature.id)\r\n if (currentIndex > -1) {\r\n sorted.splice(currentIndex, 1);\r\n sorted.splice(0, 0, nItemToChange);\r\n }\r\n });\r\n // console.log(\"sorted\", sorted);\r\n return sorted\r\n\r\n};\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param navItems {[navItemInterface]}\r\n // * @param filterGroups {[filterGroupInterface]}\r\n * @returns {[navItemInterface]}\r\n */\r\nexport const getReplacedNavItemsWithUnlockedFeatures = (navItems) => {\r\n const {pricingLocked} = pricingIsLocked();\r\n if (!pricingLocked) {\r\n return navItems\r\n }\r\n\r\n return navItems.map(navItem => {\r\n if (!getFeatureIsLocked(navItem.part)) {\r\n return navItem\r\n }\r\n // const colorOptions = getFeatureOptions(navItem.part, filterGroups); // removed to optimize running getNavItems function multiple times\r\n // if needed - we can pass navItems to this function\r\n if (!navItem.colorOptions) {\r\n return navItem\r\n }\r\n const unlockedOption = navItem.colorOptions.find(option => {\r\n if (!option.feature) {\r\n return false\r\n }\r\n if (option.feature.dbFeature.id === navItem.part.dbFeature.id) {\r\n return false\r\n }\r\n return !getFeatureIsLocked(option.feature)\r\n })\r\n if (unlockedOption && !navItems.some(nItem => nItem.part.dbFeature.id === navItem.part.dbFeature.id)) {\r\n return {part: unlockedOption.feature}\r\n }\r\n return navItem\r\n })\r\n}\r\n\r\n/**\r\n * Checks if list feature is currently active\r\n * @param navItems {[navItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const getDesignRecommendedNavItems = (navItems) => {\r\n\r\n const {filterState, bathroomVisualizerState} = store.getState();\r\n const {filterGroups} = filterState;\r\n const {activePreset} = bathroomVisualizerState;\r\n\r\n const desRecFilterGroup = filterGroups.find(group => group.name === \"Designer Recommended\");\r\n\r\n if (!desRecFilterGroup) {\r\n return []\r\n }\r\n\r\n return navItems.filter(navItem => {\r\n // if (navItem.part.dbFeature.sharedFeatureName === \"23486BEA\") {\r\n // debugger;//eslint-disable-line\r\n // }\r\n const desRecFeature = getFilterGroupValues(navItem.part, desRecFilterGroup);\r\n const desRecColorFeatures = getFeatureOptions(navItem.part, filterGroups, false, navItem.colorOptions || []);\r\n const desRecValues = [\r\n ...(desRecFeature || []),\r\n ...(desRecColorFeatures || []).map(colorOption => {\r\n return getFilterGroupValues(colorOption.feature, desRecFilterGroup)\r\n })\r\n ];\r\n return desRecValues && desRecValues.some(desRecValue => {\r\n if (Array.isArray(desRecValue)) {\r\n return desRecValue.some(filterId => {\r\n const filterValueObject = getFilterGroupValue(filterId, desRecFilterGroup);\r\n return filterValueObject && (+filterValueObject.value === activePreset)\r\n })\r\n }\r\n const filterValueObject = getFilterGroupValue(desRecValue, desRecFilterGroup);\r\n return filterValueObject && (+filterValueObject.value === activePreset)\r\n })\r\n });\r\n}\r\n\r\n/**\r\n * reorder features, places selected and similar walls on the beginning\r\n * @param navItems {[navItemInterface]}\r\n * @param lookActiveFeature {featureInterface}\r\n * @returns {[navItemsListInterface]}\r\n */\r\nexport const getNavigationItemsLists = (navItems, lookActiveFeature) => {\r\n\r\n if (!navItems.length) {\r\n return [{\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: [],\r\n }]\r\n }\r\n\r\n let navItemsList = [];\r\n\r\n const designRecommended = getDesignRecommendedNavItems(navItems);\r\n if (designRecommended.length) {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.designRec,\r\n navItems: getSortedNavItems(designRecommended),\r\n })\r\n }\r\n\r\n const others = designRecommended.length ? navItems.filter(navItem => {\r\n return designRecommended.every(designNavItem => designNavItem.part.dbFeature.id !== navItem.part.dbFeature.id)\r\n }) : navItems;\r\n\r\n if (!navItems[0]) { // some unexpected case\r\n return navItemsList\r\n }\r\n\r\n const featureGroup = navItems[0].part.getParent();\r\n\r\n switch (featureGroup.partId) {\r\n case \"vanity_faucet\": {\r\n const regularFeatures = {\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: [],\r\n };\r\n const vanityParent = featureGroup.getParent();\r\n const sinkParent = vanityParent.sink;\r\n\r\n others.forEach(navItem => {\r\n if (!sinkParent || !sinkParent.activeFeature || !navItem.part.metaData.MountHoles\r\n || (lookActiveFeature && isEqual(navItem.part.metaData.MountHoles, lookActiveFeature.metaData.MountHoles))) {\r\n if (!regularFeatures.navTranslate && navItem.part.metaData.MountHoles) {\r\n regularFeatures.navTranslate = \"look.features.other.faucet.\" + navItem.part.metaData.MountHoles[0]\r\n }\r\n regularFeatures.navItems.push(navItem);\r\n } else if (navItem.part.metaData.MountHoles) {\r\n const existingNonMatchingList = navItemsList.find(navItemsObject => {\r\n return navItemsObject.type === LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta && navItemsObject.notMatchingMetaName === navItem.part.metaData.MountHoles[0];\r\n });\r\n if (existingNonMatchingList) {\r\n existingNonMatchingList.navItems.push(navItem)\r\n } else {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta,\r\n notMatchingMetaName: navItem.part.metaData.MountHoles[0],\r\n navItems: [navItem],\r\n navTranslate: \"look.features.other.faucet.\" + navItem.part.metaData.MountHoles[0]\r\n });\r\n }\r\n }\r\n })\r\n navItemsList.push(regularFeatures);\r\n break;\r\n }\r\n default: {\r\n navItemsList.push({\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: others,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n return navItemsList\r\n};\r\n\r\nconst getSinksWidth = (nextSink) => {\r\n let maxWidth = 0;\r\n let maxTotalWidth = 0;\r\n if (nextSink.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n const parent = nextSink.getParent();\r\n Object.keys(parent.layerPositions).forEach(position => {\r\n const positionFeature = parent.layerPositions[position];\r\n if (positionFeature && positionFeature.metaData[\"SinkWidth\"]) {\r\n maxTotalWidth += positionFeature.metaData[\"SinkWidth\"];\r\n }\r\n });\r\n if (nextSink.metaData[\"SinkWidth\"]) {\r\n maxWidth = nextSink.metaData[\"SinkWidth\"]\r\n }\r\n }\r\n // console.log(\"maxWidth\", maxWidth, maxTotalWidth);\r\n return {maxWidth, maxTotalWidth}\r\n}\r\n\r\nexport const findNextVanityTypeFeature = (nextSink, nextFeatureGroup) => {\r\n if (!nextSink.metaData[\"MatchingFeature\"] || nextSink.notAvailableInVisualizer) {\r\n return null\r\n }\r\n const nextSinkSku = getSkuWithoutDot(nextSink.dbFeature.sharedFeatureName);\r\n if (nextFeatureGroup && nextFeatureGroup.activeFeature\r\n && nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(nextFeatureGroup.activeFeature.dbFeature.sharedFeatureName))) { // it is already matching! return it\r\n // cases when vanity MatchingFeature - ['0328001', '0328004', '0328008'] and sink - '0329008'\r\n if (!nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"]\r\n || (nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"]\r\n && nextFeatureGroup.activeFeature.metaData[\"MatchingFeature\"].includes(nextSinkSku))) {\r\n return nextFeatureGroup.activeFeature\r\n }\r\n }\r\n\r\n const isQCSink = nextSink.metaData[\"MatchingFeature\"].includes(METADATA.NO);\r\n const {maxWidth, maxTotalWidth} = getSinksWidth(nextSink);\r\n\r\n const allVanities = [...nextFeatureGroup.features, ...nextFeatureGroup.featuresParts];\r\n let matchingVanities = allVanities.filter(testFeature => {\r\n if (!testFeature.metaData[\"MatchingFeature\"]) {\r\n return false\r\n }\r\n if (isQCSink) {\r\n if (!testFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n return false\r\n }\r\n if (!testFeature.metaData[\"VanityWidth\"]) {\r\n return true // just in case\r\n }\r\n if (nextSink.metaData.layerPosition !== \"C\") { // L or R should be only on double vanity or two separate\r\n return testFeature.metaData[\"VanityWidth\"] === 64\r\n || (testFeature.metaData[\"VanityWidth\"] === 24 && testFeature.metaData[\"VanityWidth\"] > maxWidth\r\n && (testFeature.metaData[\"layerPosition\"] !== \"C\"))\r\n }\r\n if (!maxWidth) {\r\n return true\r\n }\r\n return testFeature.metaData[\"VanityWidth\"] > maxWidth\r\n }\r\n return nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName))\r\n && testFeature.metaData[\"MatchingFeature\"].includes(nextSinkSku)\r\n });\r\n // console.log(\"matchingVanities\", matchingVanities);\r\n if (matchingVanities.length > 1 && nextFeatureGroup.activeFeature) {\r\n // console.log(\"matchingVanities\", matchingVanities);\r\n const currentActiveFeature = matchingVanities.find(feature => feature.dbFeature.id === nextFeatureGroup.activeFeature.dbFeature.id);\r\n if (currentActiveFeature) {\r\n return currentActiveFeature\r\n }\r\n const currentSkuFeature = matchingVanities.find(feature => feature.dbFeature.sharedFeatureName === nextFeatureGroup.activeFeature.dbFeature.sharedFeatureName);\r\n if (currentSkuFeature) {\r\n return currentSkuFeature // to test\r\n }\r\n let currentSideFeatures = matchingVanities.filter(feature => isEqual(feature.metaData[\"Side\"], nextSink.metaData[\"Side\"]));\r\n if (!currentSideFeatures.length) {\r\n currentSideFeatures = matchingVanities.filter(feature => isEqual(feature.metaData[\"Side\"], nextFeatureGroup.activeFeature.metaData[\"Side\"]));\r\n }\r\n if (isQCSink && !currentSideFeatures.length && nextSink.metaData[\"Side\"]) {\r\n if (nextSink.metaData[\"Side\"][0] === \"C\") {\r\n console.log(\"NO VANITY FEATURES WITH C METADATA FOUND\", );\r\n } else if (maxTotalWidth) {\r\n currentSideFeatures = matchingVanities.filter(feature => {\r\n return feature.metaData[\"VanityWidth\"] && feature.metaData[\"VanityWidth\"] > maxTotalWidth\r\n });\r\n console.log(\"currentSideFeatures\", currentSideFeatures);\r\n }\r\n }\r\n const sameColors = currentSideFeatures.filter(feature => feature.getColorName() === nextFeatureGroup.activeFeature.getColorName());\r\n return sameColors[0] || currentSideFeatures[0] || matchingVanities[0]\r\n }\r\n return matchingVanities[0];\r\n}\r\n\r\nconst updateNonCompatibleListWithVanity = (nextSink, nonCompatibleList = []) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const currentVanityTypeFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n\r\n if (nextSink.metaData[\"CustomVanityType\"] && nextSink.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n // for example currently we have Studio S vanity Cabinet, but it will be changed to Townsend\r\n if (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.activeFeature && nextSink.metaData[\"MatchingFeature\"]\r\n && !nextSink.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(currentVanityTypeFeatureGroup.activeFeature.dbFeature.sharedFeatureName))) {\r\n const nextVanity = findNextVanityTypeFeature(nextSink, currentVanityTypeFeatureGroup)\r\n // console.log(\"nextVanity\", nextVanity);\r\n if (nextVanity && currentVanityTypeFeatureGroup.activeFeature.dbFeature.id !== nextVanity.dbFeature.id) {\r\n nonCompatibleList.push({\r\n from: currentVanityTypeFeatureGroup.activeFeature,\r\n to: nextVanity,\r\n })\r\n }\r\n }\r\n } else {\r\n // console.log(\"next sink is not compatible, pls check\");\r\n if (nextSink.metaData[\"MountType\"].includes(\"ST\")) {\r\n if (!nonCompatibleList.some(fromToObject => fromToObject.to && fromToObject.to.dbFeature.id === nextSink.dbFeature.id)) {\r\n nonCompatibleList.push({\r\n from: currentVanityTypeFeatureGroup ? currentVanityTypeFeatureGroup.activeFeature : nextSink.getParent().activeFeature,\r\n to: nextSink,\r\n })\r\n }\r\n } else if (nextSink.metaData[\"CustomVanityType\"]) {\r\n const nextFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === nextSink.metaData[\"CustomVanityType\"][0]);\r\n if (nextFeatureGroup) {\r\n const nextVanity = findNextVanityTypeFeature(nextSink, nextFeatureGroup)\r\n // console.log(\"nextVanity\", nextVanity);\r\n const fromFeature = currentVanityTypeFeatureGroup\r\n ? currentVanityTypeFeatureGroup.activeFeature\r\n : nextSink.getParent().activeFeature; // if no vanity_type - it means that standalone sink is selected\r\n if (nextVanity) {\r\n nonCompatibleList.push({\r\n from: fromFeature,\r\n to: nextVanity,\r\n })\r\n }\r\n }\r\n }\r\n }\r\n return nonCompatibleList\r\n}\r\n\r\n/**\r\n * * when clicked on feature - search for same MountHoles sink (to keep selected faucet)\r\n * @param feature {featureInterface}\r\n * @returns {featureInterface}\r\n */\r\nexport const getNextSinkOnWashstandOrConsoleChange = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const sinkParent = vanityParent.sink;\r\n const isQcSink = sinkParent && sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n const forSinkConditions = [{\r\n propName: \"MatchingFeature\",\r\n propValue: isQcSink ? METADATA.NO : getSkuWithoutDot(feature.dbFeature.sharedFeatureName)\r\n }, {\r\n propName: \"FeatureSku\",\r\n propValue: isQcSink ? METADATA.NO : feature.metaData[\"MatchingFeature\"]\r\n }];\r\n if (isQcSink && feature.metaData[\"VanityWidth\"]) {\r\n // QC sink, we should check width\r\n forSinkConditions.push({\r\n propName: \"SinkWidth\",\r\n propValue: feature.metaData[\"VanityWidth\"],\r\n // propData: {\r\n // layerPosition: feature.metaData.layerPosition\r\n // }\r\n })\r\n }\r\n if (sinkParent && sinkParent.activeFeature && !sinkParent.activeFeature.matchesMetaForArrayOfConditions(forSinkConditions)) {\r\n const layout = getCurrentLayout();\r\n const navItems = layout.designNavigationItems({part: sinkParent}, [], \"\", sinkParent.activeFeature);\r\n const nextAvailableSinks = navItems.filter(navItem => navItem.part.matchesMetaForArrayOfConditions(forSinkConditions));\r\n const conditionsToMatch = [{\r\n propName: \"MountHoles\",\r\n propValue: sinkParent.activeFeature.metaData[\"MountHoles\"]\r\n }];\r\n return nextAvailableSinks.length\r\n ? nextAvailableSinks.find(navItem => navItem.part.matchesMetaForArrayOfConditions(conditionsToMatch)) || nextAvailableSinks[0]\r\n : null;\r\n }\r\n return null\r\n}\r\n\r\n/**\r\n * when clicked on washstand or console - search for the same MountHoles sink (to keep selected faucet)\r\n * @param feature {featureInterface}\r\n */\r\nexport const updateSinkWithNewFeature = (feature) => {\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const sinkParent = vanityParent.sink;\r\n\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const nextSink = getNextSinkOnWashstandOrConsoleChange(feature);\r\n if (nextSink) {\r\n const sinkFeature = nextSink.part;\r\n if (sinkParent.layerPositions && nextSink.part.metaData.layerPosition) {\r\n Object.keys(sinkParent.layerPositions).forEach(position => {\r\n if (position === sinkFeature.metaData.layerPosition) {\r\n sinkParent.layerPositions[position] = sinkFeature\r\n } else if (sinkParent.layerPositions[position]) { // only replace existing\r\n const sameFeature = sinkParent.getMatchingPositionFeature(position, sinkFeature);\r\n sinkParent.layerPositions[position] = sameFeature || null; // if no feature found - erase previous\r\n }\r\n })\r\n }\r\n sinkParent.activeFeature = sinkFeature;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * checks if feature needs a compatability alert\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const checkForCompatabilityAlert = (feature) => {\r\n if (feature.notAvailableInVisualizer) {\r\n return []\r\n }\r\n if (document.kvConfig.visualizerType !== \"bvLook\") {\r\n if (getCommonVisualizerType() === \"kitchen\") {\r\n switch (feature.partId) {\r\n case \"edge_profile\":\r\n case \"center_island_edge\": {\r\n const matchCounterTopObject = feature.getParent().getMatchingCounterTop(feature);\r\n if (matchCounterTopObject.matchingFeature && !matchCounterTopObject.hasSameName) {\r\n const countertopParent = feature.getParent().getParent().countertop;\r\n return [{\r\n from: countertopParent.activeFeature,\r\n to: matchCounterTopObject.matchingFeature,\r\n }]\r\n }\r\n return []\r\n }\r\n default:\r\n return []\r\n }\r\n }\r\n return []\r\n }\r\n const layout = getCurrentLayout();\r\n const vanityParent = layout.parts[Vanity.id];\r\n const faucetParent = vanityParent.faucet;\r\n const sinkParent = vanityParent.sink;\r\n let nonCompatibleList = [];\r\n\r\n switch (feature.partId) {\r\n case \"vanity_faucet\": {\r\n if (!sinkParent.activeFeature || !sinkParent.activeFeature.matchesMetaForArrayOfConditions(faucetParent.getActiveFeatureConditions(feature))) {\r\n const nextSink = feature.getSinkToClickFromMatchingSinks(sinkParent.activeFeature);\r\n if (nextSink) {\r\n // console.log(\"sink nextSink\", nextSink);\r\n nonCompatibleList.push({\r\n from: sinkParent.activeFeature,\r\n to: nextSink,\r\n });\r\n nonCompatibleList = updateNonCompatibleListWithVanity(nextSink, nonCompatibleList);\r\n return nonCompatibleList\r\n }\r\n }\r\n return []\r\n }\r\n case \"vanity_sink\": {\r\n const clickedSinkConditions = sinkParent.getActiveFeatureConditions(feature);\r\n if (!faucetParent.activeFeature || !faucetParent.activeFeature.matchesMetaForArrayOfConditions(clickedSinkConditions)) {\r\n const navItems = layout.designNavigationItems({part: faucetParent}, [], \"\", faucetParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedSinkConditions);\r\n });\r\n console.log(\"nextFaucet\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: faucetParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n nonCompatibleList = updateNonCompatibleListWithVanity(feature, nonCompatibleList);\r\n return nonCompatibleList\r\n }\r\n case \"vanity_cabinet\":\r\n case \"vanity_console\":\r\n case \"vanity_washstand\": {\r\n const nextSink = getNextSinkOnWashstandOrConsoleChange(feature);\r\n if (!sinkParent.activeFeature || (nextSink && nextSink.part.dbFeature.id !== sinkParent.activeFeature.dbFeature.id)) {\r\n if (nextSink) {\r\n // console.log(\"sink nextSink\", nextSink);\r\n nonCompatibleList.push({\r\n from: sinkParent.activeFeature,\r\n to: nextSink.part,\r\n });\r\n const clickedSinkConditions = sinkParent.getActiveFeatureConditions(nextSink.part);\r\n if (!faucetParent.activeFeature || !faucetParent.activeFeature.matchesMetaForArrayOfConditions(clickedSinkConditions)) {\r\n const navItems = layout.designNavigationItems({part: faucetParent}, [], \"\", faucetParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedSinkConditions);\r\n });\r\n console.log(\"nextFaucet\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: faucetParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return nonCompatibleList\r\n }\r\n case \"shower_arm\": {\r\n const showerArmFeatureGroup = feature.getParent();\r\n const showerParent = showerArmFeatureGroup.getParent();\r\n const showerHeadParent = showerParent.showerHead;\r\n if (!showerHeadParent || !feature.metaData[\"MountPosition\"]) {\r\n return nonCompatibleList\r\n }\r\n const clickedArmConditions = showerArmFeatureGroup.getArrayOfConditions().map(condition => {\r\n if (condition.propName === \"MountPosition\") {\r\n return {\r\n propName: \"MountPosition\",\r\n propValue: feature.metaData[\"MountPosition\"],\r\n }\r\n }\r\n return condition\r\n })\r\n if (!showerHeadParent.activeFeature || !showerHeadParent.activeFeature.matchesMetaForArrayOfConditions(clickedArmConditions)) {\r\n const navItems = layout.designNavigationItems({part: showerHeadParent}, [], \"\", showerHeadParent.activeFeature);\r\n const nextFaucet = navItems.find(navItem => {\r\n return navItem.part.matchesMetaForArrayOfConditions(clickedArmConditions);\r\n });\r\n console.log(\"next shower head\", nextFaucet);\r\n if (nextFaucet) {\r\n nonCompatibleList.push({\r\n from: showerHeadParent.activeFeature,\r\n to: nextFaucet.part,\r\n });\r\n }\r\n }\r\n return nonCompatibleList\r\n }\r\n default:\r\n return nonCompatibleList\r\n }\r\n};\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @returns {object}\r\n */\r\nexport const pricingIsLocked = () => {\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const {fabricatorState, userState} = store.getState();\r\n const {isPhoneNumberValidated} = userState;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n return {\r\n showPrice: fabricatorSettings.showPricing && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser,\r\n pricingLocked: fabricatorSettings.leadCapture && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated,\r\n clickLeadCapture: fabricatorSettings.clickLeadCapture,\r\n isLixil: isIframe() && fabricatorState.isLixil\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * checks features and downloads by name if they are missing\r\n * @param missingFeatures {array}\r\n * @param updateCanvas {boolean}\r\n * @param originalPartId {string}\r\n */\r\nexport const getMissingFeaturesAndClickThem = async (missingFeatures = [], updateCanvas = false, originalPartId = \"\") => {\r\n if (!missingFeatures.length) {\r\n return Promise.resolve()\r\n }\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n const wallParent = layout.parts[\"Walls\"];\r\n\r\n const pageSize = 9999;\r\n for (let missingFeatureObject of missingFeatures) {\r\n const {relatedItem, navigationItemName, requestFromBackendName} = missingFeatureObject;\r\n const dbName = relatedItem.dbName || relatedItem.partName;\r\n if (relatedItem.additionalPartPartId && wallParent && wallParent.relatedItems.some(relItem => relItem.partId === relatedItem.partId)) {\r\n const cropResponse = await getBvGroupFeatures(dbName + \" Crop\", 0, pageSize, [], requestFromBackendName || navigationItemName);\r\n if (Array.isArray(cropResponse)) {\r\n relatedItem.setGroupFeatures(cropResponse, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n if (relatedItem.partId !== originalPartId) { // we need to check crop for current wall! but no need to request the wall itself\r\n const response = await getBvGroupFeatures(dbName, 0, pageSize, [], requestFromBackendName || navigationItemName);\r\n relatedItem.setGroupFeatures(response, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n for (let missingFeatureObject of missingFeatures) {\r\n const {relatedItem, navigationItemName, setCurrentFeature, requestFromBackendName} = missingFeatureObject;\r\n const featureFound = layout.designNavigationItems({part: relatedItem}).find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === navigationItemName\r\n });\r\n if (featureFound) {\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n featureFound.part.clickFromAllWalls(true)\r\n }\r\n if (relatedItem.partId !== originalPartId) {\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n relatedItem.alreadyRequestedFeatureNames.push(requestFromBackendName || navigationItemName);\r\n }\r\n }\r\n\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n if (updateCanvas) {\r\n store.dispatch(updateCanvasCount());\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const getShowMatchRadio = (lookFeature) => {\r\n if (LOOK_WALLS_ONLY.includes(lookFeature.partId)) {\r\n return true\r\n }\r\n switch (getCommonVisualizerType()) {\r\n case \"kitchen\":\r\n case \"laundryroom\": {\r\n if (EDGE_GROUP.includes(lookFeature.partId)) {\r\n if (lookFeature.partId === \"edge_profile\") { // back countertop\r\n const layout = getCurrentLayout();\r\n return layout.parts[\"CenterIsland\"] && layout.parts[\"CenterIsland\"].countertop\r\n && !layout.parts[\"CenterIsland\"].countertop.disabled\r\n }\r\n return true\r\n }\r\n if (COUNTERTOP_GROUP.includes(lookFeature.partId) && !CountertopSwitchers.checkForTileBacksplash(lookFeature)) {\r\n return true\r\n }\r\n return CABINET_GROUP.includes(lookFeature.partId)\r\n }\r\n case \"bathroom\":\r\n return CABINET_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || COUNTERTOP_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || HANDLES_GROUP_BATHROOM.includes(lookFeature.partId)\r\n || SHOWER_FLOOR_GROUP_BATHROOM.includes(lookFeature.partId)\r\n default:\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param lookFeature {featureInterface}\r\n * @returns {allWallsLogicInterface} object\r\n */\r\nexport const getApplyToLogic = (lookFeature) => {\r\n if (!lookFeature || lookFeature.notAvailableInVisualizer) {\r\n return null\r\n }\r\n if (LOOK_WALLS_ONLY.includes(lookFeature.partId)) {\r\n const {lookState} = store.getState();\r\n return {\r\n type: \"walls\",\r\n translateId: \"look.allWalls\",\r\n setApplyToFunction: setLookWallsApplyTo,\r\n applyToArrayAll: LOOK_WALLS_ONLY,\r\n currentApplyToArray: lookState.lookWallsApplyTo,\r\n }\r\n }\r\n switch (getCommonVisualizerType()) {\r\n case \"kitchen\":\r\n case \"laundryroom\": {\r\n if (CABINET_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"cabinets\",\r\n translateId: \"look.allCabinets\",\r\n setApplyToFunction: setCabinetsApplyTo,\r\n applyToArrayAll: CABINET_GROUP,\r\n currentApplyToArray: navigationState.cabinetsApplyTo,\r\n }\r\n } else if (COUNTERTOP_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"countertops\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setCountertopsApplyTo,\r\n applyToArrayAll: COUNTERTOP_GROUP,\r\n currentApplyToArray: navigationState.countertopsApplyToArray,\r\n }\r\n } else if (EDGE_GROUP.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"edges\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setEdgesApplyTo,\r\n applyToArrayAll: EDGE_GROUP,\r\n currentApplyToArray: navigationState.edgesApplyTo,\r\n }\r\n }\r\n break;\r\n }\r\n case \"bathroom\": {\r\n if (CABINET_GROUP_BATHROOM.includes(lookFeature.partId) && (document.kvConfig.visualizerType !== \"bvLook\")) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"cabinets\",\r\n translateId: \"look.allCabinets\",\r\n setApplyToFunction: setCabinetsApplyToBathroom,\r\n applyToArrayAll: CABINET_GROUP,\r\n currentApplyToArray: navigationState.cabinetsApplyToBathroom,\r\n }\r\n } else if (COUNTERTOP_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"countertops\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setCountertopsApplyToBathroom,\r\n applyToArrayAll: COUNTERTOP_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.countertopsApplyToArrayBathroom,\r\n }\r\n } else if (HANDLES_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"handles\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setApplyToCommon,\r\n applyToArrayAll: HANDLES_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.handlesApplyToBathroom,\r\n }\r\n } else if (SHOWER_FLOOR_GROUP_BATHROOM.includes(lookFeature.partId)) {\r\n const {navigationState} = store.getState();\r\n return {\r\n type: \"showerFloor\",\r\n translateId: \"look.allCountertops\",\r\n setApplyToFunction: setApplyToCommon,\r\n applyToArrayAll: SHOWER_FLOOR_GROUP_BATHROOM,\r\n currentApplyToArray: navigationState.showerFloorApplyToBathroom,\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param wallFeature {featureInterface}\r\n * @param applyToLogic {allWallsLogicInterface}\r\n * @param setCurrentFeature {boolean}\r\n */\r\nexport const clickOnSimilarFeatures = async (wallFeature, applyToLogic, setCurrentFeature = false) => {\r\n const layout = getCurrentLayout();\r\n let {type, applyToArrayAll} = applyToLogic;\r\n\r\n const {navigationState, fabricatorState} = store.getState();\r\n if ((type === \"countertops\" && !navigationState.useFeaturesLightRequest.countertops)\r\n || (type === \"cabinets\" && !navigationState.useFeaturesLightRequest.cabinets)) {\r\n if (setCurrentFeature && !fabricatorState.isSolidSurface) {\r\n store.dispatch(applyToLogic.setApplyToFunction([], true, type));\r\n return Promise.resolve()\r\n }\r\n }\r\n\r\n if (type === \"countertops\") {\r\n const featureIsLocked = getFeatureIsLocked(wallFeature);\r\n return CountertopSwitchers.applyAllCountertops(wallFeature, !featureIsLocked, applyToArrayAll, setCurrentFeature);\r\n } else if (type === \"cabinets\") {\r\n const featureIsLocked = getFeatureIsLocked(wallFeature);\r\n return CabinetSwitchers.applyClickTo(wallFeature, !featureIsLocked, applyToArrayAll, setCurrentFeature)\r\n } else {\r\n const navigationItemName = wallFeature.getSplittedFeatureName();\r\n const requestFromBackendName = layout.isNewLayout ? wallFeature.getCountertopGroupsSplittedFeatureName() : wallFeature.getSplittedFeatureName();\r\n // we are looking and matching splitted feature name, because it includes filters, but we request original sharedFeatureName\r\n let missingFeatures = [];\r\n applyToArrayAll.forEach(wallPartId => {\r\n const subPart = layout.getSubPartByPartId(wallPartId);\r\n if (!subPart || (subPart.part.partId === wallFeature.partId)) {\r\n return null\r\n }\r\n const featureFound = layout.designNavigationItems(subPart).find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === navigationItemName\r\n });\r\n if (featureFound) {\r\n if (setCurrentFeature) {\r\n subPart.part.activeFeatureBeforeAllWalls = subPart.part.activeFeature;\r\n }\r\n featureFound.part.clickFromAllWalls(true)\r\n } else if (!subPart.part.alreadyRequestedFeatureNames || !subPart.part.alreadyRequestedFeatureNames.includes(requestFromBackendName)) {\r\n // @param missingFeaturesArray {featureGroupInterface}\r\n // @param navigationItemName {string}\r\n // @param setCurrentFeature {boolean}\r\n missingFeatures.push({relatedItem: subPart.part, navigationItemName, setCurrentFeature, requestFromBackendName})\r\n }\r\n });\r\n if (missingFeatures.length) {\r\n missingFeatures.push({relatedItem: wallFeature.getParent(), navigationItemName, setCurrentFeature, requestFromBackendName})\r\n // we need to check crop for current wall! but no need to request the wall itself\r\n await getMissingFeaturesAndClickThem(missingFeatures, false, wallFeature.partId)\r\n }\r\n return Promise.resolve()\r\n }\r\n}\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param applyToArray {array}\r\n * @param onlyForOneFeatureGroup {object}\r\n */\r\nexport const setActiveFeaturesBeforeAllWalls = (applyToArray = [], onlyForOneFeatureGroup = null) => {\r\n if (onlyForOneFeatureGroup && onlyForOneFeatureGroup.activeFeature) {\r\n onlyForOneFeatureGroup.activeFeatureBeforeAllWalls = onlyForOneFeatureGroup.activeFeature;\r\n return\r\n }\r\n const layout = getCurrentLayout();\r\n applyToArray.forEach(partId => {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature) {\r\n featureGroup.activeFeatureBeforeAllWalls = featureGroup.activeFeature;\r\n }\r\n })\r\n}\r\n\r\nexport const requestAfterRoomChange = async (layout) => {\r\n let promises = [];\r\n const layoutName = layout.getCurrentLayoutAbbreviation();\r\n layout.getFeatures().forEach(parent => {\r\n if (!Array.isArray(parent.relatedItems) || !parent.relatedItems.length) {\r\n return\r\n }\r\n parent.relatedItems.forEach(featureGroup => {\r\n if (featureGroup.allFeaturesReceived\r\n && featureGroup.nextFeaturesPageToLoadArray\r\n && featureGroup.nextFeaturesPageToLoadArray[layoutName]\r\n && !featureGroup.nextFeaturesPageToLoadArray[layoutName].page) {\r\n promises.push(getAdditionalFeaturesOnScroll(featureGroup))\r\n }\r\n })\r\n });\r\n return Promise.all(promises)\r\n}\r\n\r\n\r\n/**\r\n * returns fabricator settings price logic\r\n * @param roomPreset {object}\r\n * @param loadedPresets {array}\r\n */\r\nexport const applyNewPreset = async (roomPreset, loadedPresets) => {\r\n const layout = getCurrentLayout();\r\n if (loadedPresets.includes(roomPreset.id)) {\r\n layout.setActiveFeaturesFromObject(roomPreset, false, false, true, false);\r\n await requestAfterRoomChange(layout);\r\n } else {\r\n await layout.setItemsFromBvState(roomPreset); // requestAfterRoomChange inside\r\n }\r\n return Promise.resolve()\r\n}\r\n\r\nexport const isRoomLayoutsVisible = () => {\r\n return Config.isVisualizerManagement() || Config.isDevMode()\r\n}\r\n\r\n/**\r\n * returns feature group current items quantity depending on layer positions\r\n * @param lookActiveFeature {featureInterface}\r\n * @param featureGroup {featureGroupInterface}\r\n * @return number {number}\r\n */\r\nexport const getFeatureGroupFeaturesQuantity = (lookActiveFeature, featureGroup = null) => {\r\n let featureQuantity = 1;\r\n if (!featureGroup && lookActiveFeature && lookActiveFeature.getParent) {\r\n featureGroup = lookActiveFeature.getParent()\r\n }\r\n if (featureGroup) {\r\n const currentActiveFeature = lookActiveFeature || featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature\r\n if (currentActiveFeature && currentActiveFeature.dbFeature.defaultQuantity && currentActiveFeature.dbFeature.defaultQuantity !== 1) {\r\n featureQuantity = currentActiveFeature.dbFeature.defaultQuantity;\r\n } else if (featureGroup.layerPositions && (!currentActiveFeature || !currentActiveFeature.notAvailableInVisualizer)) {\r\n // if feature is not available in visualizer > set at least 1 instead of 0 (missing sink in the cart in solid surface wizard issue)\r\n featureQuantity = Object.keys(featureGroup.layerPositions)\r\n .filter(position => !!featureGroup.layerPositions[position]).length\r\n }\r\n }\r\n return featureQuantity\r\n}\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60inPonyShower, custom60in30X8Shower } from '../assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = (document.kvConfig && (document.kvConfig.userId === 133439))\r\n ? ShowerComboTubType.replacement_tub\r\n : ShowerComboTubType.bathtub_liner;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n const wallConfigurations = [\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60inPonyShower,\r\n \"Pony Wall 60in\",\r\n \"Pony\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100000\r\n ),\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = wallConfigurations;\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n let res = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Shower Tub Combo', this)\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_interior_wall\")\r\n || (relItem.partId === \"shower_interior_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n if (this.layout.type === LayoutType.Small) {\r\n const showerParent = this.layout.parts.Shower;\r\n if (showerParent.showerBody && showerParent.showerBody.disabled) { // switch on all Shower features\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick();\r\n this.showerTubComboIsActive = true;\r\n }\r\n }\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n setDefault() {\r\n // this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n}\r\n","// import $ from \"jquery\";\r\n// import sqftShape from \"./../core/shapes/sqftShape\";\r\nimport sqftConfig from \"./../store/sqftConfig\";\r\nimport sqftStore from \"./sqftStore\";\r\nimport workspace from \"../core/workspace\";\r\nimport {\r\n BACKSPLASH_LABELS,\r\n COUNTERTOP_LABELS,\r\n isDisabledInPopupShouldBeHidden,\r\n MOVABLE_IMAGE_TYPES,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SHAPE_PART_ID,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SQFT_CHILD_FEATURE_GROUP_PART_IDS,\r\n SQFT_SHAPES_THAT_ADD_OVERHANG\r\n} from \"../../../constants\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport MovableImage from \"../core/shapes/movableImage\";\r\nimport slabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport {getPointField} from \"../../../helpers/sqftHelper\";\r\nimport ShapeRotatable from \"../core/shapes/shapeParts/shapeRotatable\";\r\nimport ChangeValuePopup from \"../../popup/parts/ChangeValuePopup\";\r\nimport {\r\n addChangeValuePopup,\r\n changeValuePopup,\r\n deleteChangeValuePopup,\r\n //setSQFTActiveButton,\r\n //setSQFTMenuOpened\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport store from \"../../../../../store\";\r\nimport SqftStore from \"./sqftStore\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nimport {isSFTCabinetsGroup} from \"../../../helpers/sqftNavigationHelper\";\r\nimport Rectangle from \"../core/shapes/layouts/rectangle\";\r\nimport {initTitle} from \"../core/controls/labels/labelsHelper\";\r\nimport {SLAB_IMAGE_TYPES} from \"../../../../../reducers/sqftSlabReducer\";\r\nimport sqftShapeIntersectionsManager from \"./sqftShapeIntersectionsManager\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../constantsFeature\";\r\nimport {\r\n areCollinearAndOverlap,\r\n convexHull, removeConsecutiveDuplicates,\r\n roundShapePoints,\r\n unifyShapePoints\r\n} from \"../../../helpers/coordinatesHelper\";\r\n\r\nconst sqftShapeManager = {\r\n shapes: [],\r\n objIds: 0,\r\n addShape: function(segments, shapeType, historyPosition, partId, fromLayout = null, shapeParams = {}) {\r\n const shapeId = workspace.addShape(segments, shapeType, historyPosition, partId, fromLayout, shapeParams);\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n\r\n return shapeId\r\n },\r\n addPlaceholderShape: function(width, height) {\r\n const state = store.getState();\r\n const shouldUseSlabPricing = state.sqftSlabState.isSlabPricingEnabled;\r\n const shapeSegments = new Rectangle(width, height);\r\n const shapeId = sqftShapeManager.addShape(shapeSegments, 'square', null, SHAPE_PART_ID.slabPlaceHolder);\r\n const shape = sqftShapeManager.getShapeById(shapeId);\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n shape.deregisterLineEvents();\r\n shape.setSlabPricing(shouldUseSlabPricing);\r\n initTitle('PLACEHOLDER', SLAB_IMAGE_TYPES.placeholder, shape);\r\n },\r\n getShapeById: function(shapeId) {\r\n return workspace.getShapeById(shapeId);\r\n },\r\n getShapeByIds: function(ids) {\r\n return workspace.getShapes().filter(shape => ids.includes(shape.id));\r\n },\r\n hasSameFeatureId(shapes) {\r\n if (shapes.length === 0) return true;\r\n\r\n const firstFeatureId = shapes[0].featureId;\r\n for (let obj of shapes) {\r\n if (obj.featureId !== firstFeatureId) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n hasSameSharedFeatureName(shapes) {\r\n if (shapes.length === 0) return true;\r\n\r\n const firstFeatureId = shapes[0].featureId;\r\n const layout = getCurrentLayout();\r\n const currentShapeFeature = layout.getFeatureById(firstFeatureId, true);\r\n if (currentShapeFeature) {\r\n const currentShapeFeatureSharedName = currentShapeFeature.dbFeature.sharedFeatureName;\r\n for (let testShape of shapes) {\r\n const testShapeFeature = layout.getFeatureById(testShape.featureId, true);\r\n if (testShapeFeature && testShapeFeature.dbFeature.sharedFeatureName !== currentShapeFeatureSharedName) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n removeShapeById: function(shapeId) {\r\n return workspace.removeShapeById(shapeId);\r\n },\r\n setShapeFeature: function (shapeId, visualizerFeature) {\r\n if (visualizerFeature && visualizerFeature.dbFeature) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.setFeatureId(visualizerFeature.dbFeature.id);\r\n } else if (shape && shape.type === RESOURCE_ATTACHED_TO_TYPE.backsplash) {\r\n const sqftShape = workspace.getShapeById(shape.attachedToParentId);\r\n const line = sqftShape.getLineById(shape.attachedToId);\r\n if (line) {\r\n line.setBacksplashFeatureId(visualizerFeature.dbFeature.id);\r\n }\r\n }\r\n }\r\n },\r\n setShapeFeatureId: function (shapeId, featureId) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.setFeatureId(featureId);\r\n }\r\n },\r\n setShapeRelatedParentFeatureId: function (shapeId, featureId) {\r\n let shape = workspace.getShapeById(shapeId);\r\n\r\n if (shape instanceof sqftShape || shape instanceof MovableImage) {\r\n shape.relatedParentFeatureId = featureId;\r\n }\r\n },\r\n getCounterTopShapes() {\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.filter(function(shape) {\r\n const counterTopLabel = Object.keys(COUNTERTOP_LABELS).find(cLabel => cLabel === shape.type);\r\n if (counterTopLabel) {\r\n return true\r\n }\r\n return !shape.type\r\n && !SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(shape.partId)\r\n });\r\n },\r\n getBacksplashLabeledShapes() {\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.filter(shp => Object.keys(BACKSPLASH_LABELS).includes(shp.partId));\r\n },\r\n hideSeamShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (\r\n shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.hideShapePieces()\r\n }\r\n })\r\n },\r\n restoreSeamShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && !shape.isWithShapePieces()\r\n && shape.isHidden\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitEvents()\r\n }\r\n })\r\n },\r\n hideSlabShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n shape.deregisterEvents();\r\n }\r\n })\r\n },\r\n restoreSlabShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n shape.reInitEvents();\r\n shape.deregisterLineEvents();\r\n shape.reInitLineTitleEvents();\r\n }\r\n })\r\n },\r\n hideMiteredSections: function() {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.deregisterEvents();\r\n }\r\n }\r\n },\r\n restoreMiteredSections: function() {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.reInitEvents();\r\n }\r\n }\r\n },\r\n resetShapeChangesInTheSlabMode: function (shape) {\r\n shape.updateSlabPoints();\r\n shape.removeShapePieces();\r\n shape.setShapePieces([]);\r\n shape.shapeSlab.setRotationDegreesSlab(0);\r\n slabWorkspace.slabAdditionalShapes.removeAllActiveBacksplashesAttachedToShape(shape);\r\n },\r\n checkForUpdateSlabPoints: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n ) {\r\n if (shape.isPointsChanged) {\r\n shape.isPointsChanged = false;\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(shape);\r\n }\r\n }\r\n })\r\n },\r\n checkForUpdateSlabPosition: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n ) {\r\n if (shape.isPositionChanged) {\r\n shape.updateSlabPosition();\r\n shape.isPositionChanged = false;\r\n slabWorkspace.slabAdditionalShapes.removeAllActiveBacksplashesAttachedToShape(shape);\r\n }\r\n }\r\n })\r\n },\r\n hideCorePieceShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && !shape.isHidden\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.deregisterEvents()\r\n }\r\n })\r\n },\r\n restoreCorePieceShapes: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.isWithShapePieces !== undefined\r\n && shape.isWithShapePieces()\r\n && shape.isHidden\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitEvents()\r\n }\r\n })\r\n },\r\n hideShapeParts: function(shouldSkipSlabPlaceHolders = true) {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n && (shouldSkipSlabPlaceHolders && shape.partId !== SHAPE_PART_ID.slabPlaceHolder)\r\n ) {\r\n shape.deregisterPartEvents()\r\n }\r\n })\r\n },\r\n restoreShapeParts: function() {\r\n let shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape instanceof sqftShape\r\n && ![SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.partId)\r\n && (isDisabledInPopupShouldBeHidden() ? !shape.isDisabledInPopup : true)\r\n ) {\r\n shape.reInitPartEvents()\r\n }\r\n })\r\n },\r\n // reInitMeasurementsInTheSlabMode: function() {\r\n // const state = store.getState();\r\n // const isMeasurementVisibleInSlabMode = state.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n // if (isMeasurementVisibleInSlabMode) {\r\n // initAllLineLength()\r\n // }\r\n // },\r\n undoSeam: function() {\r\n let seamHistory = sqftStore.getSeamHistory();\r\n if (seamHistory.length <= 0) {\r\n return\r\n }\r\n let latestShape = seamHistory.pop();\r\n for (let i = latestShape.shapePieces.length - 1; i >= 0; i--) {\r\n let shp = workspace.getShapeById(latestShape.shapePieces[i]);\r\n workspace.removeShape(shp);\r\n }\r\n latestShape.setShapePieces([]);\r\n latestShape.reInitEvents();\r\n },\r\n resetAllSeams: function() {\r\n this.restoreCorePieceShapes();\r\n this.hideShapeParts();\r\n let shapes = workspace.getShapes();\r\n for (let i = shapes.length - 1; i >= 0; i--) {\r\n if (shapes[i] instanceof sqftShape) {\r\n if (shapes[i].partId === SHAPE_PART_ID.seamPiece) {\r\n workspace.removeShape(shapes[i]);\r\n } else if (shapes[i].isWithShapePieces()) {\r\n shapes[i].setShapePieces([])\r\n }\r\n }\r\n }\r\n sqftStore.setSeamHistory([])\r\n },\r\n getVisibleCenter: function () {\r\n // console.log('sqftStore.ctxCenter', sqftStore.ctxCenter);\r\n // console.log('sqftStore.canvas', sqftStore.canvas);\r\n // console.log('sqftStore.scale', sqftConfig.scale);\r\n return {\r\n x: (sqftStore.ctxCenter.x + (sqftStore.canvas.width / 2)) / sqftConfig.scale,\r\n y: (sqftStore.ctxCenter.y + (sqftStore.canvas.height / 2)) / sqftConfig.scale\r\n }\r\n },\r\n getMinMax: (segments) => {\r\n let minX = null, maxX = 0;\r\n let minY = null, maxY = 0;\r\n for (let i = 0; i < segments.length; i++) {\r\n let s = segments[i];\r\n if (minX === null || s.from.x < minX)\r\n minX = s.from.x;\r\n if (s.from.x > maxX)\r\n maxX = s.from.x;\r\n if (minY === null || s.from.y < minY)\r\n minY = s.from.y;\r\n if (s.from.y > maxY)\r\n maxY = s.from.y\r\n }\r\n return {\r\n width: maxX - minX,\r\n height: maxY - minY,\r\n x: {\r\n min: minX,\r\n max: maxX\r\n },\r\n y: {\r\n min: minY,\r\n max: maxY\r\n }\r\n };\r\n },\r\n getMinMaxWorkspacePoints: (workspace, isIncludeBumpout = true) => {\r\n let from;\r\n let to;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n let offset = workspace.getOffset();\r\n let shapes = workspace.getShapes();\r\n for (let i = 0; i < shapes.length; i++) {\r\n let shape = shapes[i];\r\n if (shape.getLines) {\r\n let lines = shape.getLines();\r\n for (let n = 0; n < lines.length; n++) {\r\n from = lines[n].from.getPointField();\r\n to = lines[n].to.getPointField();\r\n\r\n if (minX === null) {\r\n minX = from.x < to.x ? from.x : to.x;\r\n maxX = from.x > to.x ? from.x : to.x;\r\n minY = from.y < to.y ? from.y : to.y;\r\n maxY = from.y > to.y ? from.y : to.y;\r\n }\r\n\r\n if (isIncludeBumpout && lines[n].isWithBumpout && lines[n].isWithBumpout()) {\r\n [minX, maxX, minY, maxY] = sqftShapeManager.getMinMaxBumpoutPoints(lines[n], minX, maxX, minY, maxY);\r\n }\r\n\r\n minX = from.x < minX ? from.x : minX;\r\n maxX = from.x > maxX ? from.x : maxX;\r\n minX = to.x < minX ? to.x : minX;\r\n maxX = to.x > maxX ? to.x : maxX;\r\n\r\n minY = from.y < minY ? from.y : minY;\r\n maxY = from.y > maxY ? from.y : maxY;\r\n minY = to.y < minY ? to.y : minY;\r\n maxY = to.y > maxY ? to.y : maxY;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n minX : minX - offset.x,\r\n maxX : maxX - offset.x,\r\n minY : minY - offset.y,\r\n maxY : maxY - offset.y\r\n }\r\n },\r\n disableRotatableStateForAllShapes: () => {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape && shape.shapeRotatable) {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n }\r\n },\r\n canShapeBeRotated: (shape) => {\r\n const isShapeCanBeRotated = shape instanceof sqftShape\r\n && shape.shapePieces.length === 0\r\n && !shape.isDisabledInPopup\r\n && !(shape.isWithBumpout() || shape.isWithMitered())\r\n ;\r\n const isMovableImageCanBeRotated = shape instanceof MovableImage && shape.type !== MOVABLE_IMAGE_TYPES.slabImage;\r\n return isShapeCanBeRotated || isMovableImageCanBeRotated\r\n },\r\n closeRotatablePopups: () => {\r\n const shapes = workspace.getShapes();\r\n shapes.forEach(shape => {\r\n if (shape.getIsRotatable && shape.getIsRotatable()) {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n })\r\n },\r\n disableRotatableState: (shape) => {\r\n shape.setIsRotatable(false);\r\n shape.shapeRotatable.reInitShapePoints();\r\n shape.shapeRotatable.destroy();\r\n shape.shapeRotatable = null;\r\n store.dispatch(deleteChangeValuePopup('shape' + shape.id));\r\n },\r\n setShapeAsRotatable: (shape) => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n // todo fix rotation of slab images in slab mode\r\n if (shape instanceof MovableImage && shape.type === MOVABLE_IMAGE_TYPES.slabImage && isSlabMode) {\r\n return\r\n }\r\n shape.shapeRotatable = new ShapeRotatable(shape);\r\n shape.setIsRotatable(true);\r\n const shapeOffset = shape.getOffset();\r\n const isCabinet = isSFTCabinetsGroup();\r\n let changeValuePopupPosition;\r\n if (isCabinet) {\r\n const shapeHeight = shape instanceof MovableImage ? shape.getHeight(): shape.shapeCabinet.getShapeHeight();\r\n const shapeWidth = shape instanceof MovableImage ? shape.getWidth() : shape.shapeCabinet.getShapeWidth();\r\n changeValuePopupPosition = {left: shapeOffset.x, top: shapeOffset.y - (shapeHeight + shapeWidth) * sqftConfig.scale / 2}\r\n } else {\r\n changeValuePopupPosition = {left: shapeOffset.x, top: shapeOffset.y}\r\n }\r\n\r\n const changeRotatedDegreeValuePopup = new ChangeValuePopup(\r\n 'shape' + shape.id,\r\n 0,\r\n 360,\r\n () => {\r\n sqftConfig.workspace.menuItemActive = SIDEBAR_NAVIGATION_BUTTONS.move\r\n sqftShapeManager.disableRotatableState(shape);\r\n //store.dispatch(setSQFTMenuOpened(''));\r\n //store.dispatch(setSQFTActiveButton(SIDEBAR_NAVIGATION_BUTTONS.rotate));\r\n },\r\n () => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n shape.rotate(1, shape.Direction.LEFT, isSlabMode);\r\n const newValuePopup = {...valuePopup, value: isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees};\r\n store.dispatch(changeValuePopup(newValuePopup));\r\n },\r\n () => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const value = (isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees) - 1 < 0 ? 359 : -1 ;\r\n shape.rotate(value, shape.Direction.LEFT, isSlabMode);\r\n store.dispatch(changeValuePopup({...valuePopup, value: isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees}));\r\n },\r\n (e) => {\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const value = parseInt(e.target.value);\r\n if (Number.isInteger(value) && 359 > value > 0) {\r\n shape.rotate(value - (isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees), shape.Direction.LEFT, isSlabMode);\r\n isSlabMode ? shape.rotatedDegreesSlab = value : shape.rotatedDegrees = value;\r\n store.dispatch(changeValuePopup({...valuePopup, value: value}));\r\n }\r\n },\r\n isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees,\r\n changeValuePopupPosition\r\n );\r\n store.dispatch(addChangeValuePopup(changeRotatedDegreeValuePopup));\r\n },\r\n\r\n rotateShapeTo90Deg: (shape) => {\r\n // Check if the slab mode is active\r\n const isSlabMode = SqftStore.isSlabMode();\r\n const state = store.getState();\r\n\r\n // Find the corresponding popup for changing shape values\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n\r\n // Determine the current rotation angle\r\n const currentRotation = isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees;\r\n\r\n\r\n if ([0, 90, 180, 270, 360].includes(currentRotation)) {\r\n // Calculate the new rotation angle, adding 90 degrees and ensuring it wraps around after 360\r\n const newRotation = (currentRotation + 90) % 360;\r\n\r\n // Rotate the shape by the difference between the new and current rotation angles\r\n shape.rotate(newRotation - currentRotation, shape.Direction.LEFT, isSlabMode);\r\n\r\n // Update the shape's rotation angle based on whether slab mode is active\r\n if (isSlabMode) {\r\n shape.rotatedDegreesSlab = newRotation;\r\n } else {\r\n shape.rotatedDegrees = newRotation;\r\n }\r\n\r\n store.dispatch(changeValuePopup({...valuePopup, value: newRotation}));\r\n }\r\n },\r\n\r\n getShapeCornerPoints: () => {\r\n //todo\r\n },\r\n getMinMaxBumpoutPoints: (line, minX, maxX, minY, maxY, isPointOnField) => {\r\n let bumpoutPoints = line.bumpoutOverlay.getBumpoutPoints();\r\n let pointField;\r\n if (isPointOnField) {\r\n pointField = getPointField(bumpoutPoints.dragPoint.x, bumpoutPoints.dragPoint.y, line.getParent())\r\n } else {\r\n pointField = bumpoutPoints.dragPoint\r\n }\r\n minX = pointField.x < minX ? pointField.x : minX;\r\n maxX = pointField.x > maxX ? pointField.x : maxX;\r\n minY = pointField.y < minY ? pointField.y : minY;\r\n maxY = pointField.y > maxY ? pointField.y : maxY;\r\n\r\n return [minX, maxX, minY, maxY]\r\n },\r\n getMinMaxShapesPointsOnWorkspace: (shapes, shouldGetRegularPosition = false) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n if (shp.getPointsPosOnWorkspace) {\r\n shapesPoints.push(...shp.getPointsPosOnWorkspace(shouldGetRegularPosition));\r\n }\r\n });\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n //console.log(\"shapesMinMax\", pointsMinMax);\r\n\r\n return [\r\n {x: pointsMinMax.minX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.maxY},\r\n {x: pointsMinMax.minX, y: pointsMinMax.maxY}\r\n ];\r\n }\r\n return []\r\n },\r\n getShapesConvexHullPointsOnWorkspace: (shapes) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPosOnWorkspace());\r\n });\r\n return convexHull(shapesPoints);\r\n }\r\n return []\r\n },\r\n getShapesConvexHullPointsPointField: (shapes) => {\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPointField());\r\n });\r\n return convexHull(shapesPoints);\r\n }\r\n return []\r\n },\r\n getShapesContourPointsOnWorkspace: (shapes, shoudRemoveRepeatingPoints = true) => {\r\n if (shapes.length > 0) {\r\n const shapesPointsOnWorkspace = shapes.map(shp => {\r\n return shp.getPointsPosOnWorkspace();\r\n });\r\n const unifiedPoints = unifyShapePoints(shapesPointsOnWorkspace);\r\n if (shoudRemoveRepeatingPoints) {\r\n removeConsecutiveDuplicates(unifiedPoints);\r\n }\r\n return unifiedPoints\r\n }\r\n return []\r\n },\r\n getShapesOverhangOnWorkspace: (contourPoints, snappedShapes, minOverlap = 2) => {\r\n const shapes = workspace.getShapes();\r\n const overhangShapes = shapes.filter(shp => {\r\n const canShapeCreateOverhang = SQFT_SHAPES_THAT_ADD_OVERHANG.includes(shp.subType) || SQFT_SHAPES_THAT_ADD_OVERHANG.includes(shp.partId);\r\n const isShapeInsideSnappedShapes = snappedShapes.includes(shp);\r\n return canShapeCreateOverhang && !isShapeInsideSnappedShapes\r\n }\r\n );\r\n let results = new Array(contourPoints.length ? contourPoints.length - 1 : 0).fill(true);\r\n\r\n if (overhangShapes.length > 0) {\r\n for (const overhangShape of overhangShapes) {\r\n const pointsPosOnWorkspace = overhangShape.getPointsPosOnWorkspace();\r\n const roundedPoints = roundShapePoints(pointsPosOnWorkspace);\r\n roundedPoints.push(roundedPoints[0]); //close polygon\r\n\r\n for (let i = 0; i < contourPoints.length - 1; i++) {\r\n const cp1 = contourPoints[i];\r\n const cp2 = contourPoints[i + 1];\r\n for (let j = 0; j < roundedPoints.length - 1; j++) {\r\n const rp1 = roundedPoints[j];\r\n const rp2 = roundedPoints[j + 1];\r\n if (areCollinearAndOverlap(cp1, cp2, rp1, rp2, minOverlap)) {\r\n results[i] = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n //debugger // eslint-disable-line no-debugger\r\n return results\r\n },\r\n getShapesContourPointsPointField: (shapes) => {\r\n if (shapes.length > 0) {\r\n const shapesPointField = shapes.map(shp => {\r\n return shp.getPointsPointField();\r\n });\r\n return unifyShapePoints(shapesPointField);\r\n }\r\n return []\r\n },\r\n getMinMaxShapePoints: (shape, isIncludeBumpout = true, isPointOnField = true) => {\r\n let from;\r\n let to;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n let lines = shape.getLines();\r\n //let offset = workspace.getOffset();\r\n\r\n for (let n = 0; n < lines.length; n++) {\r\n if (isPointOnField) {\r\n from = getPointField(lines[n].from.x, lines[n].from.y, shape);\r\n to = getPointField(lines[n].to.x, lines[n].to.y, shape);\r\n } else {\r\n from = lines[n].from;\r\n to = lines[n].to;\r\n }\r\n\r\n if (minX === null) {\r\n minX = from.x < to.x ? from.x : to.x;\r\n maxX = from.x > to.x ? from.x : to.x;\r\n minY = from.y < to.y ? from.y : to.y;\r\n maxY = from.y > to.y ? from.y : to.y;\r\n }\r\n\r\n if (isIncludeBumpout && lines[n].isWithBumpout()) {\r\n [minX, maxX, minY, maxY] = sqftShapeManager.getMinMaxBumpoutPoints(lines[n], minX, maxX, minY, maxY , isPointOnField);\r\n }\r\n\r\n minX = from.x < minX ? from.x : minX;\r\n maxX = from.x > maxX ? from.x : maxX;\r\n minX = to.x < minX ? to.x : minX;\r\n maxX = to.x > maxX ? to.x : maxX;\r\n\r\n minY = from.y < minY ? from.y : minY;\r\n maxY = from.y > maxY ? from.y : maxY;\r\n minY = to.y < minY ? to.y : minY;\r\n maxY = to.y > maxY ? to.y : maxY;\r\n }\r\n\r\n return {\r\n minX : minX,\r\n maxX : maxX,\r\n minY : minY,\r\n maxY : maxY\r\n }\r\n },\r\n getMinMaxPoints: (points, isPointOnField = true) => {\r\n let point;\r\n let minX = null;\r\n let maxX = null;\r\n let minY = null;\r\n let maxY = null;\r\n\r\n for (let n = 0; n < points.length; n++) {\r\n if (isPointOnField) {\r\n point = getPointField(points[n].x, points[n].y, points[n].getGrandParent ? points[n].getGrandParent(): workspace);\r\n } else {\r\n point = points[n];\r\n }\r\n\r\n if (minX === null) {\r\n minX = point.x;\r\n maxX = point.x;\r\n minY = point.y;\r\n maxY = point.y;\r\n }\r\n\r\n minX = point.x < minX ? point.x : minX;\r\n maxX = point.x > maxX ? point.x : maxX;\r\n minY = point.y < minY ? point.y : minY;\r\n maxY = point.y > maxY ? point.y : maxY;\r\n }\r\n\r\n return {\r\n minX : minX,\r\n maxX : maxX,\r\n minY : minY,\r\n maxY : maxY\r\n }\r\n },\r\n setIsDisabledShapeInPopup: (id, isDisabledInPopup) => {\r\n let shape = sqftShapeManager.getShapeById(id);\r\n if (shape) {\r\n shape.isDisabledInPopup = isDisabledInPopup;\r\n if (isDisabledInPopupShouldBeHidden()) {\r\n if (isDisabledInPopup && shape.deregisterEvents) {\r\n shape.deregisterEvents()\r\n shape.shapeSlab.resetShapeSeams();\r\n } else if (shape.reInitEvents) {\r\n shape.reInitEvents();\r\n }\r\n }\r\n }\r\n },\r\n getSnappedShapes: (snappedShapeGroup) => {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => {\r\n return !!(shp.shapeAbsolute && (shp.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n })\r\n },\r\n\r\n changeShapesFeatureIDIfColorWasChanged: (feature) => {\r\n if (feature && feature.partId) {\r\n const shapes = workspace.getShapes();\r\n const partId = Object.keys(SQFT_CHILD_FEATURE_GROUP_PART_IDS).includes(feature.partId)\r\n ? SQFT_CHILD_FEATURE_GROUP_PART_IDS[feature.partId]\r\n : feature.partId;\r\n\r\n //also include spacers\r\n const filteredShapes = shapes.filter(shape => shape.partId === partId || shape.parentPartId === partId );\r\n filteredShapes.forEach((shape) => {\r\n if (shape instanceof sqftShape) {\r\n shape.changeFeatureIdIfColorWasChanged(feature);\r\n }\r\n })\r\n }\r\n },\r\n updateShapeColorSet: (shapeId) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n if (shape instanceof sqftShape) {\r\n shape.updateColorSet();\r\n }\r\n },\r\n updateMinMaxMiteredPoints: (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n if (line.isWithMitered()) {\r\n line.miteredOverlay.updateMinMaxPoints();\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default sqftShapeManager\r\n","//********* NAVIGATION *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleDesktopNavigation = (desktopNavigationOpened = false) => ({\r\n type: types.TOGGLE_DESKTOP_NAVIGATION,\r\n payload: {desktopNavigationOpened}\r\n});\r\n\r\nexport const setNavigationViewType = (navigationViewType = 3) => ({\r\n type: types.SET_NAVIGATION_VIEW_TYPE,\r\n payload: {navigationViewType}\r\n});\r\n\r\nexport const setActiveNavigationNames = (activeNavigationParentName, activeNavigationChildName) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_NAMES,\r\n payload: {activeNavigationParentName, activeNavigationChildName}\r\n});\r\n\r\nexport const setNavigationLoading = (navigationLoadingActive) => ({\r\n type: types.SET_NAVIGATION_LOADING,\r\n payload: {navigationLoadingActive}\r\n});\r\n\r\n// MODULE\r\nexport const setModuleContextMenuType = (moduleContextMenuType) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_TYPE,\r\n payload: {moduleContextMenuType}\r\n});\r\nexport const setModuleContextMenuDirection = (moduleContextMenuDirection) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_DIRECTION,\r\n payload: {moduleContextMenuDirection}\r\n});\r\nexport const setModuleContextMenuModule = (moduleContextMenuModule) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_MODULE,\r\n payload: {moduleContextMenuModule}\r\n});\r\nexport const setModuleContextMenuModulePart = (moduleContextMenuModulePart) => ({\r\n type: types.SET_MODULE_CONTEXT_MENU_MODULE_PART,\r\n payload: {moduleContextMenuModulePart}\r\n});\r\n\r\n// CABINET MODULE FILTERS\r\nexport const setActiveNavigationFilter = (activeNavigationFilter) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_FILTER,\r\n payload: {activeNavigationFilter}\r\n});\r\nexport const setActiveNavigationFilterStepIndex = (activeNavigationFilterStepIndex) => ({\r\n type: types.SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX,\r\n payload: {activeNavigationFilterStepIndex}\r\n});\r\nexport const setCabinetNavigationFilterCompleted = (cabinetNavigationFilterCompleted) => ({\r\n type: types.SET_CABINET_NAVIGATION_FILTER_COMPLETED,\r\n payload: {cabinetNavigationFilterCompleted}\r\n});\r\n\r\n//COUNTERTOP WIZARD\r\nexport const setCountertopNavigationFilterCompleted = (countertopNavigationFilterCompleted) => ({\r\n type: types.SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED,\r\n payload: {countertopNavigationFilterCompleted}\r\n});\r\nexport const setCountertopWizard = (countertopWizard) => ({\r\n type: types.SET_COUNTERTOP_WIZARD,\r\n payload: {countertopWizard}\r\n});\r\nexport const setCabinetsApplyTo = (cabinetsApplyTo) => ({\r\n type: types.SET_CABINETS_APPLY_TO,\r\n payload: {cabinetsApplyTo}\r\n});\r\nexport const setCabinetsApplyToBathroom = (cabinetsApplyToBathroom) => ({\r\n type: types.SET_CABINETS_APPLY_TO_BATHROOM,\r\n payload: {cabinetsApplyToBathroom}\r\n});\r\nexport const setCountertopsApplyTo = (countertopsApplyTo, newArrayLogic = false) => ({\r\n type: types.SET_COUNTERTOPS_APPLY_TO,\r\n payload: {countertopsApplyTo, newArrayLogic}\r\n});\r\nexport const setCountertopsApplyToBathroom = (countertopsApplyToBathroom, newArrayLogic = false) => ({\r\n type: types.SET_COUNTERTOPS_APPLY_TO_BATHROOM,\r\n payload: {countertopsApplyToBathroom, newArrayLogic}\r\n});\r\nexport const setApplyToCommon = (arrayToChange, isNewNotUsed, type) => {\r\n let arrayPropertyToChange = \"test\";\r\n switch (type) {\r\n case \"handles\":\r\n arrayPropertyToChange = \"handlesApplyToBathroom\";\r\n break;\r\n case \"showerFloor\":\r\n arrayPropertyToChange = \"showerFloorApplyToBathroom\";\r\n break;\r\n default:\r\n console.error(\"setApplyTo function no type passed\", type);\r\n break;\r\n }\r\n return {\r\n type: types.SET_APPLY_TO_COMMON,\r\n payload: {\r\n [arrayPropertyToChange]: arrayToChange,\r\n }\r\n }\r\n};\r\nexport const setEdgesApplyTo = (edgesApplyTo) => ({\r\n type: types.SET_EDGES_APPLY_TO,\r\n payload: {edgesApplyTo}\r\n});\r\n\r\n// TOGGLE DISABLED RADIO\r\nexport const toggleUpdateDisableFeatureGroupRadio = (updateDisableFeatureGroupRadio) => ({\r\n type: types.UPDATE_DISABLE_FEATURE_GROUP_RADIO,\r\n payload: {updateDisableFeatureGroupRadio}\r\n});\r\n\r\n// TOGGLE DISABLED RADIO\r\nexport const toggleNavItemPositionModal = (navItemPositionModal) => ({\r\n type: types.TOGGLE_NAV_ITEM_POSITION_MODAL,\r\n payload: {navItemPositionModal}\r\n});\r\n\r\nexport const setUseFeaturesLightRequest = (useFeaturesLightRequest) => ({\r\n type: types.SET_USE_FEATURES_LIGHT_REQUEST,\r\n payload: {useFeaturesLightRequest}\r\n});\r\n","import {getFeatureCost, isIE} from \"./helpers\";\r\nimport Config, {IS_LIXIL_SERVERS} from \"../config\";\r\nimport graniteTransformationUkSubDomains from \"./graniteTransformationUkSubDomains\";\r\n\r\nexport const LOWES_DISCLAIMER_EN = \"This cost includes your selection of material, edge profile, faucet cut-outs, templating, installation plus any other options you have selected. All quotes are subject to changes. No quote shall be final until the time of template. Quotes only reflect the selections, information and the amount of materials you have entered in the estimator tool. After your purchase a certified Contractor will go on site to verify all dimensions and details of your order. Price adjustments will be possible thereafter. All expenses not covered in this quote, like possible extra trip charges, 2nd story fees, oversize piece/difficult access charges,high rise installation charge which are out of program installation costs, permit fees or any other expense not captured in this quote will be added at time of template. Projects under 27 SF incur a surcharge. All quotes are valid for 30 days. ALL 3D DESIGN IMAGES ARE FOR INSPIRATIONAL PURPOSES ONLY. See a kitchen associate or Call 1-844-454-1454 to finalize your purchase.\"\r\n\r\nexport const getFabricatorLogo = (fabricatorData) => {\r\n const hardCodedLogo = `https://qc-cdn.s3.amazonaws.com/Logos/Quote-Kitchen-and-Bath.jpg`;\r\n const hardCodedLowesLogo = `https://qc-cdn.s3.amazonaws.com/Logos/lowes.png`;\r\n const hardCodedRenoDepotLogo = `https://qc-cdn.s3.amazonaws.com/Logos/reno-depot.png`;\r\n const hardCodedRonaLogo = `https://qc-cdn.s3.amazonaws.com/Logos/rona.png`;\r\n\r\n if (isIE()) {\r\n if (fabricatorData.isRenoDepot) {\r\n return hardCodedRenoDepotLogo\r\n } else if (fabricatorData.isRona) {\r\n return hardCodedRonaLogo\r\n } else if (fabricatorData.isLowes) {\r\n return hardCodedLowesLogo\r\n }\r\n return hardCodedLogo\r\n }\r\n\r\n if (Config.isDevMode() && fabricatorData.logoUrl && !fabricatorData.logoUrl.includes(\"http\") && document.kvConfig.domain) {\r\n return document.kvConfig.domain + fabricatorData.logoUrl\r\n }\r\n\r\n return fabricatorData.logoUrl || hardCodedLogo\r\n}\r\n\r\nexport const hardCodeIsLowes = () => {\r\n const subDomains = [\"mdp_surfaces\", \"lowes_\", \"/rona.\", \"rona_\", \"rnodpt\", \"reno_depot\"];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 139043)) {\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsAmericanImport = () => {\r\n const subDomains = ['americanimport', 'americanstandard2020'];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 140460 || document.kvConfig.userId === 155479)) { //American Import //American Standard 2020\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain));\r\n};\r\n\r\nexport const hardCodeIsAmericanStandard = () => {\r\n const subDomains = ['americanstandard'];\r\n if (Config.isDevMode() && (document.kvConfig.userId === 139882 || document.kvConfig.userId === 251108)) { //American Standard 2020 // Cory\r\n return true;\r\n }\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain));\r\n};\r\n\r\nexport const hardCodeIsRona = () => {\r\n const subDomains = [\"/rona.\", \"rona_\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsRenoDepot = () => {\r\n const subDomains = [\"rnodpt\", \"reno_depot\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsCaesarStone = () => {\r\n const domains = [\"quotetops.com\", \"quotekitchencountertops.com\"];\r\n return document.kvConfig.isCaesarStone || domains.some(domain => window.location.href.includes(domain))\r\n};\r\n\r\nexport const hardCodeIsModerno = () => {\r\n const subDomains = [\"moderno\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsPorcelanosa = () => {\r\n const subDomains = [\"porcelanosa\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsMcDermott = () => {\r\n const subDomains = [\"mcdermott_\", \"mts_\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsFlexFinish = () => {\r\n const subDomains = [\"flexfinish\", \"flexfinish2\", \"flex_finish\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsGraniteTransformation = () => {\r\n const subDomains = [\"granite_transformations\", \"trend_transformations\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsGraniteTransformationUK = () => {\r\n return graniteTransformationUkSubDomains.some(subDomain => window.location.href.includes(subDomain))\r\n};\r\n\r\nexport const hardCodeIsLixil = () => {\r\n return [139247, 139616, 139882].some(userId => document.kvConfig.userId === userId) || [\"grohe\", \"grohe2\", \"americanstandard\"].some(subDomain => {\r\n return window.location.host && window.location.host.split && (window.location.host.split('.')[0] === subDomain)\r\n })\r\n}\r\n\r\nexport const hardCodeIsAgent = () => {\r\n return document.kvConfig.userId === 140203 || (\r\n window.location.host && window.location.host.split && (window.location.host.split('.')[0] === \"agent\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsTorrco = () => {\r\n return document.kvConfig.userId === 140298 || document.kvConfig.userId === 140299 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"torrco\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsCoburn = () => {\r\n return document.kvConfig.userId === 140590 || document.kvConfig.userId === 140558 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"coburns_\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsSolidSurface = () => {\r\n return document.kvConfig.userId === 245802 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"solidsurface\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsLakesideSurfaces = () => {\r\n return document.kvConfig.userId === 252014 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"lakeside_surfaces\")\r\n )\r\n}\r\n\r\nexport const hardCodeIsDeStefano = () => {\r\n return document.kvConfig.userId === 260280 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"de_stefano\")\r\n ) || window.location.href.includes(\"fab_subdomain=de_stefano\")\r\n}\r\n\r\nexport const hardCodeIsNhance = () => {\r\n return document.kvConfig.userId === 268895 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"nhance\")\r\n ) || window.location.href.includes(\"fab_subdomain=nhance\")\r\n}\r\n\r\nexport const hardCodeIsEncore = () => {\r\n return document.kvConfig.userId === 267710 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"encore\")\r\n ) || window.location.href.includes(\"fab_subdomain=encore\")\r\n}\r\n\r\nexport const isEncore = hardCodeIsEncore();\r\n\r\nexport const hardCodeIsFloform = () => {\r\n const subDomains = [\"floform\"];\r\n return subDomains.some(subDomain => window.location.href.toLowerCase().includes(subDomain))\r\n}\r\n\r\nexport const hardCodeIsDeluxegarage = () => {\r\n const subDomains = [\"deluxegarage\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const hardCodeIsRenuit = () => {\r\n const subDomains = [\"renuit\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const isCabinetsFabricator = () => {\r\n return [256713, 246203, 256713].some(userId => document.kvConfig.userId === userId)\r\n}\r\n\r\nexport const isProd = () => {\r\n const subDomains = [\"quotekitchenandbath\", \"quotekitchencountertops\"];\r\n return subDomains.some(subDomain => window.location.href.includes(subDomain))\r\n}\r\n\r\nexport const getHardCodedFloFormShopCartCost = (cartItems) => {\r\n let materialTotalCost = 0;\r\n cartItems\r\n .filter(cartItem => {\r\n return cartItem.partId === \"center_island_countertop\"\r\n || cartItem.partId === \"countertop\"\r\n || (cartItem.partId === \"backsplash\" && (\r\n (cartItem.fromWizardGroupId === \"18\")\r\n || (cartItem.fromWizardGroupId === \"12\")\r\n || (cartItem.fromWizardGroupId === \"11\")\r\n || (cartItem.fromWizardGroupId === \"187\")\r\n || (cartItem.fromWizardGroupId === \"196\")\r\n || (cartItem.fromWizardGroupId === \"206\")\r\n ))\r\n })\r\n .forEach(cartItem => {\r\n materialTotalCost += getFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory);\r\n });\r\n // console.log(\"materialTotalCost\", materialTotalCost);\r\n return materialTotalCost * 0.1;\r\n}\r\n\r\nexport const isCafeCountetops = document.kvConfig.userId === 264613 || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(\"cafecounterops\")\r\n);\r\n\r\nexport const hardCodeIsFabricator = (subDomain = \"\", fabId = null) => {\r\n if (!subDomain && !fabId) {\r\n return false\r\n }\r\n return (fabId && (document.kvConfig.userId === fabId)) || (\r\n window.location.host && window.location.host.includes && window.location.host.includes(subDomain)\r\n ) || window.location.href.includes(\"fab_subdomain=\" + subDomain)\r\n}\r\n\r\n\r\nexport const fabricatorsHardcodeObject = {\r\n // isRebath: document.kvConfig.userId === 71520 // removed as we don't use rebath at all\r\n // || window.location.href.includes(\"rebath\")\r\n // || window.location.href.includes(\"re-bath\"),\r\n // isRebath: window.location.href.includes(\"rebath\")\r\n // || window.location.href.includes(\"re-bath\")\r\n // || (action.payload.companyName && (action.payload.companyName.toLowerCase().includes(\"rebath\")\r\n // || action.payload.companyName.toLowerCase().includes(\"re-bath\")))\r\n // || (action.payload.name && (action.payload.name.toLowerCase().includes(\"rebath\")\r\n // || action.payload.name.toLowerCase().includes(\"re-bath\"))),\r\n isLowes: hardCodeIsLowes(),\r\n isRona: hardCodeIsRona(),\r\n isRenoDepot: hardCodeIsRenoDepot(),\r\n isAmericanImport: hardCodeIsAmericanImport(),\r\n isAmericanStandard: hardCodeIsAmericanStandard(),\r\n isCaesarStone: hardCodeIsCaesarStone(),\r\n isGraniteTransformation: hardCodeIsGraniteTransformation(),\r\n isGraniteTransformationUK: hardCodeIsGraniteTransformationUK(),\r\n isModerno: hardCodeIsModerno(),\r\n isMcDermott: hardCodeIsMcDermott(),\r\n isFlexFinish: hardCodeIsFlexFinish(),\r\n isLixil: hardCodeIsLixil(),\r\n isTorrco: hardCodeIsTorrco(),\r\n isCoburn: hardCodeIsCoburn(),\r\n isSolidSurface: hardCodeIsSolidSurface(),\r\n isLakesideSurfaces: hardCodeIsLakesideSurfaces(),\r\n isDeStefano: hardCodeIsDeStefano(),\r\n isNhance: hardCodeIsNhance(),\r\n isEncore: hardCodeIsEncore(),\r\n isGrohe: IS_LIXIL_SERVERS && hardCodeIsFabricator(\"grohe\", 139247),\r\n}\r\n","import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\r\nimport sqftEventManager from \"../bvcomponents/sqft/components/canvas/store/sqftEventManager\";\r\nimport {checkIfLookFeaturesReceived} from \"../api/look-api\";\r\nimport store from \"../store\";\r\nimport {updateNavigationCount} from \"../actions/lookFunctions\";\r\nimport Config from \"../config\";\r\nimport {getRoomLayouts} from \"../bvcomponents/look/lookNavigation/lookFunctions\";\r\nimport {isProd} from \"./fabricatorHardcode\";\r\n\r\nexport const usePrevious = (value) => {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n}\r\n\r\nexport const useIsMounted = () => {\r\n const isMountedRef = useRef(true);\r\n const isMounted = useCallback(() => isMountedRef.current, []);\r\n\r\n useEffect(() => {\r\n return () => void (isMountedRef.current = false);\r\n }, []);\r\n\r\n return isMounted;\r\n}\r\n\r\nexport const IsMountedComponent = (props) => {\r\n const {children} = props;\r\n const isMountedComponent = useIsMounted();\r\n return typeof children === 'function' ? children(isMountedComponent) : children;\r\n}\r\n\r\nexport const useOutsideClick = (ref, callback, useSQFTCanvas = false) => {\r\n const handleClick = e => {\r\n if (ref.current && !ref.current.contains(e.target)) {\r\n callback(e);\r\n }\r\n };\r\n\r\n const handleClickThroughCanvasEvents = (mousePos, e) => {\r\n if (ref.current && !ref.current.contains(e.target)) {\r\n callback(e);\r\n }\r\n return false;\r\n };\r\n\r\n useEffect(() => {\r\n if (useSQFTCanvas) {\r\n const objectName = { name: 'helperOutsideClickHook' };\r\n\r\n document.addEventListener(sqftEventManager.events.CLICK, handleClick);\r\n //document.addEventListener(sqftEventManager.events.TOUCH_START, handleClick);\r\n sqftEventManager.addEvent(\r\n sqftEventManager.events.MOUSE_DOWN,\r\n handleClickThroughCanvasEvents,\r\n objectName,\r\n sqftEventManager.priorities.OVERALL\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(sqftEventManager.events.CLICK, handleClick);\r\n //document.removeEventListener(sqftEventManager.events.TOUCH_START, handleClick);\r\n sqftEventManager.removeEvent(objectName);\r\n };\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ref, callback, useSQFTCanvas]);\r\n};\r\n\r\nexport const useOutsideClickSimple = (ref, callback, excludedClassNames = null) => {\r\n const handleClick = event => {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n if (excludedClassNames && excludedClassNames.some(className => {\r\n return event.target.classList.contains(className) || event.target.closest(\".\"+className)\r\n })) {\r\n return\r\n }\r\n callback(event);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener(\"click\", handleClick);\r\n\r\n return () => {\r\n document.removeEventListener(\"click\", handleClick);\r\n };\r\n });\r\n};\r\n\r\nexport const useProgressiveImage = (imageUrl) => {\r\n\r\n const [thumbnailLoaded, setThumbnailLoaded] = useState(false)\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n const image = new Image();\r\n image.onload = () => {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n };\r\n image.onerror = () => {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n };\r\n try {\r\n image.src = imageUrl;\r\n if (image.complete) {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n }\r\n } catch (e) {\r\n if (isMounted()) {\r\n setThumbnailLoaded(true)\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [imageUrl])\r\n\r\n return thumbnailLoaded\r\n}\r\n\r\nlet requestInProgressTimeoutId = null;\r\n\r\nexport const useFeaturesChecker = (featureGroup, visualizersLoadedLength) => {\r\n\r\n const [featuresLoaded, setFeaturesLoaded] = useState(featureGroup ? featureGroup.allFeaturesReceived : false)\r\n const isMounted = useIsMounted();\r\n\r\n const checkFeatures = () => {\r\n if (!featureGroup.allFeaturesReceived) {\r\n if (featureGroup.requestInProgress) {\r\n const callRecursiveFeaturesCheck = () => {\r\n console.log(\"callRecursiveFeaturesCheck\", featureGroup);\r\n if (featureGroup.allFeaturesReceived) {\r\n clearTimeout(requestInProgressTimeoutId);\r\n store.dispatch(updateNavigationCount());\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n return\r\n }\r\n requestInProgressTimeoutId = setTimeout(callRecursiveFeaturesCheck, 1000); // check every second for response\r\n };\r\n setTimeout(callRecursiveFeaturesCheck, 1000); // first time\r\n } else {\r\n checkIfLookFeaturesReceived(featureGroup).then(() => {\r\n // store.dispatch(updateFeatureGroupCount());\r\n store.dispatch(updateNavigationCount());\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!featureGroup || !visualizersLoadedLength) {\r\n return false\r\n }\r\n if (!featureGroup.allFeaturesReceived) {\r\n checkFeatures()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [featureGroup, visualizersLoadedLength])\r\n\r\n return featuresLoaded\r\n}\r\n\r\nexport const useShowRoomLayoutsButton = (activePreset, isMobile, visualizersLoadedLength) => {\r\n return useMemo(() => {\r\n if (!visualizersLoadedLength) {\r\n return false\r\n }\r\n if (isMobile) {\r\n return false\r\n }\r\n if (Config.isVisualizerManagement()) {\r\n return true\r\n }\r\n if (isProd()) { // hided room scenes for production URLs\r\n return false\r\n }\r\n return getRoomLayouts().length > 1\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activePreset, visualizersLoadedLength, isMobile])\r\n};\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {SIDE_POSITIONS} from \"../../look/core/constants\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n if (this.layerPositions) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : SIDE_POSITIONS[0];\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n const instance = new this.constructor(false, partNumber);\r\n return this.load_(dbFeature, instance, true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Fireplace\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText) {\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + (keyIndex + 1) * 10;\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n if (this.getAdditionalPartsConditions) {\r\n arrayOfConditions = this.getAdditionalPartsConditions(arrayOfConditions); // modify or extend parts conditions\r\n }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\n\r\nimport COLOR_THEMES from \"../../colorThemes\";\r\nimport LoadingBar from '../../lib/react-redux-loading-bar';\r\n\r\nconst MaterialSpinner = (props) => {\r\n const {activeTheme, color, size, withCounter} = props;\r\n\r\n const style = {'color': color || COLOR_THEMES[activeTheme].active}\r\n\r\n if (size) { // in order not to break others with size auto\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n {withCounter ? : null}\r\n \r\n
\r\n )\r\n};\r\n\r\nMaterialSpinner.propTypes = {\r\n color: PropTypes.string,\r\n size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n withCounter: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(MaterialSpinner)\r\n","import * as PropTypes from \"prop-types\";\r\nimport {filterValueInterface} from \"./filterInterface\";\r\nimport {featureInterface} from \"./featureInterface\";\r\n\r\n// ITEM -> GROUP\r\n// ITEM -> GROUP -> SECTION -> STEP // not used\r\n\r\nexport const WIZARD_GROUP_TYPES = {\r\n group: \"group\",\r\n filter: \"filter\",\r\n custom: \"custom\",\r\n}\r\n\r\nexport const wizardGroupInterface = {\r\n id: PropTypes.string.isRequired,\r\n nodeType: PropTypes.oneOf(Object.keys(WIZARD_GROUP_TYPES)).isRequired,\r\n groupName: PropTypes.string.isRequired,\r\n filterGroupId: PropTypes.number,\r\n scopeImageUrl: PropTypes.string,\r\n customDisplayName: PropTypes.string,\r\n enabled: PropTypes.bool.isRequired,\r\n title: PropTypes.string,\r\n description: PropTypes.string,\r\n featuresExcluded: PropTypes.array,\r\n featuresIncluded: PropTypes.array,\r\n useIncluded: PropTypes.bool,\r\n filtersExcluded: PropTypes.array,\r\n productCartTitle: PropTypes.string,\r\n productCartDescription: PropTypes.string,\r\n uploadedImageUrl: PropTypes.string,\r\n noAvailableFilters: PropTypes.bool,\r\n notRequired: PropTypes.bool,\r\n mergedGroups: PropTypes.array, // same parent logic\r\n wizardGroupIcon: PropTypes.string,\r\n hideInCartAndReceipt: PropTypes.bool,\r\n multipleAddToCart: PropTypes.bool,\r\n inputFields: PropTypes.array, // {id: \"\", checked: bool, oneLine: bool}\r\n headerTitle: PropTypes.string, // {id: \"\", checked: bool}\r\n headerSubTitle: PropTypes.string, // {id: \"\", checked: bool}\r\n visibleInVisualizers: PropTypes.array, //[\"kitchen\", \"laundryroom\", etc]\r\n hideForCustomers: PropTypes.bool, // eyeball\r\n skipProductInfo: PropTypes.bool,\r\n};\r\n\r\nexport const wizardNodeInterface = {\r\n id: PropTypes.string.isRequired,\r\n type: PropTypes.string.isRequired,\r\n position: PropTypes.object.isRequired,\r\n style: PropTypes.object,\r\n data: PropTypes.shape({\r\n wizardGroup: PropTypes.shape(wizardGroupInterface)\r\n }),\r\n};\r\n\r\nexport const wizardEdgeInterface = {\r\n id: PropTypes.string.isRequired,\r\n source: PropTypes.string.isRequired,\r\n target: PropTypes.string.isRequired,\r\n disabled: PropTypes.bool,\r\n};\r\n\r\nexport const wizardItemInterface = {\r\n id: PropTypes.number,\r\n visualizer: PropTypes.string,\r\n name: PropTypes.string,\r\n description: PropTypes.string,\r\n customImageUrl: PropTypes.string,\r\n uploadedImageUrl: PropTypes.string,\r\n enabled: PropTypes.bool,\r\n hideItems: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n // wizardSteps: PropTypes.arrayOf(PropTypes.shape(wizardStepInterface)),\r\n // wizardSections: PropTypes.arrayOf(PropTypes.shape(wizardSectionInterface)),\r\n wizardGroups: PropTypes.arrayOf(PropTypes.shape(wizardGroupInterface)),\r\n wizardNodes: PropTypes.arrayOf(PropTypes.shape(wizardNodeInterface)),\r\n wizardEdges: PropTypes.arrayOf(PropTypes.shape(wizardEdgeInterface)),\r\n disabledScenes: PropTypes.arrayOf(PropTypes.number),\r\n startTitle: PropTypes.string,\r\n startDescription: PropTypes.string,\r\n};\r\n\r\nexport const wizardSelectedValueInterface = {\r\n partId: PropTypes.string,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n selectedFilter: PropTypes.shape(filterValueInterface),\r\n selectedFeature: PropTypes.shape(featureInterface),\r\n quantity: PropTypes.number,\r\n singleFeature: PropTypes.bool,\r\n};\r\n\r\nexport const wizardAllObjectInterface = {\r\n quoteIndex: PropTypes.number.isRequired,\r\n lastVisitedStep: PropTypes.number,\r\n isLastActiveWizard: PropTypes.bool,\r\n wizardItemId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n visualizer: PropTypes.string, // common name, same as in the wizard item\r\n wizardSelectedValues: PropTypes.object, // {0: wizardSelectedValueInterface, 1: wizardSelectedValueInterface}\r\n};\r\n\r\nexport const wizardConflictingObjectInterface = {\r\n stepIndex: PropTypes.number.isRequired,\r\n wizardGroupId: PropTypes.string.isRequired,\r\n cartItemId: PropTypes.string.isRequired\r\n}\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {METADATA, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityCabinet from \"../subparts/vanity/vanityCabinet\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\nimport Ptrap from \"../subparts/vanity/pTrap\";\r\nimport VanityWashstand from \"../subparts/vanity/vanityWashstand\";\r\nimport VanityMiddle from \"../subparts/vanity/vanityMiddle\";\r\nimport DrawerPull from \"../subparts/vanity/drawerPull\";\r\nimport WSTowelBar from \"../subparts/vanity/wsTowelBar\";\r\nimport VanityLegs from \"../subparts/vanity/vanityLegs\";\r\nimport VanityConsole from \"../subparts/vanity/vanityConsole\";\r\nimport {getSkuWithoutDot} from \"../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport DoorHandle from \"../subparts/vanity/doorHandle\";\r\nimport DrawerHandle from \"../subparts/vanity/drawerHandle\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.vanityCabinet = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n this.vanityPTrap = null;\r\n this.vanityWashstand = null;\r\n this.vanityMiddle = null;\r\n this.drawerPull = null;\r\n this.wsTowelBar = null;\r\n this.vanityLegs = null;\r\n this.vanityLegs = null;\r\n this.vanityConsole = null;\r\n this.doorHandle = null;\r\n this.drawerHandle = null;\r\n\r\n this.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n this.relatedGroupNames = [\"Sink\", \"Mirror\", \"Countertop\", \"Faucet\", \"VanityBacksplash\", \"Vanity Handle\", \"Vanity\",\r\n \"Ptrap\", \"Washstand\", \"Vanity Middle\", \"Drawer Pull\", \"WS Towel Bar\", \"Vanity Legs\", \"Console\", \"Door Handle\",\r\n \"Drawer Handle\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Countertop\":\r\n case \"Vanitie Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Door Handle\":\r\n relatedItemName = \"doorHandle\";\r\n RelatedItemClass = DoorHandle;\r\n break;\r\n case \"Drawer Handle\":\r\n relatedItemName = \"drawerHandle\";\r\n RelatedItemClass = DrawerHandle;\r\n break;\r\n case \"Vanity\":\r\n case \"Vanitie\": {\r\n relatedItemName = \"vanityCabinet\";\r\n RelatedItemClass = VanityCabinet;\r\n break;\r\n }\r\n case \"Ptrap\": {\r\n relatedItemName = \"vanityPTrap\";\r\n RelatedItemClass = Ptrap;\r\n break;\r\n }\r\n case \"Washstand\": {\r\n relatedItemName = \"vanityWashstand\";\r\n RelatedItemClass = VanityWashstand;\r\n break;\r\n }\r\n case \"Vanity Middle\": {\r\n relatedItemName = \"vanityMiddle\";\r\n RelatedItemClass = VanityMiddle;\r\n break;\r\n }\r\n case \"Drawer Pull\": {\r\n relatedItemName = \"drawerPull\";\r\n RelatedItemClass = DrawerPull;\r\n break;\r\n }\r\n case \"WS Towel Bar\": {\r\n relatedItemName = \"wsTowelBar\";\r\n RelatedItemClass = WSTowelBar;\r\n break;\r\n }\r\n case \"Vanity Legs\": {\r\n relatedItemName = \"vanityLegs\";\r\n RelatedItemClass = VanityLegs;\r\n break;\r\n }\r\n case \"Console\": {\r\n relatedItemName = \"vanityConsole\";\r\n RelatedItemClass = VanityConsole;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"vanityCabinet\") {\r\n this.relatedItems.unshift(this.vanityCabinet); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n subTypes() {\r\n return this.vanityCabinet && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize(forFeatureGroup) {\r\n let vanitySize = this.getCounterTopSize() || \"24\"; // we have left and right mirror for \"L\" & \"R\" or single for \"C\"\r\n if ((vanitySize === \"72\" || (Array.isArray(vanitySize) && vanitySize[0] === (\"72\")))\r\n && forFeatureGroup && !(forFeatureGroup.partId === \"vanity_backsplash\" || forFeatureGroup.partId === \"vanity_countertop\")) {\r\n return [\"64\"]; // use 64 for everything except counterop and backsplash\r\n }\r\n return vanitySize\r\n }\r\n\r\n getCounterTopSize() {\r\n const currentVanityTypeFeatureGroup = this.relatedItems.find(relItem => relItem.partId === this.vanity_type);\r\n if (currentVanityTypeFeatureGroup && !currentVanityTypeFeatureGroup.activeFeature) {\r\n this.vanityCabinet.setDefault()\r\n }\r\n return (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.activeFeature)\r\n ? currentVanityTypeFeatureGroup.activeFeature.dbFeature.metaData[\"VanitySize\"]\r\n : null;\r\n }\r\n\r\n isDoubleVanity(feature = null) {\r\n if (this.vanity_type !== VANITY_TYPES.vanity_cabinet || !this.vanityCabinet) {\r\n return false\r\n }\r\n const checkFeature = feature || this.vanityCabinet.activeFeature;\r\n return checkFeature && checkFeature.metaData[\"VanityWidth\"] && (checkFeature.metaData[\"VanityWidth\"] === 64)\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\" || relItem.partId === \"vanity_backsplash\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n\r\n getActiveSkuFromRelatedItem(partId) {\r\n const relatedItem = this.relatedItems.find(relItem => relItem.partId === partId);\r\n return relatedItem && relatedItem.activeFeature && relatedItem.activeFeature.dbFeature.sharedFeatureName\r\n ? getSkuWithoutDot(relatedItem.activeFeature.dbFeature.sharedFeatureName)\r\n : null\r\n }\r\n\r\n getActiveMatchingMetaFromRelatedItem(partId, metaName = \"MatchingFeature\") {\r\n const relatedItem = this.relatedItems.find(relItem => relItem.partId === partId);\r\n return relatedItem && relatedItem.activeFeature\r\n ? relatedItem.activeFeature.metaData[metaName]\r\n : null\r\n }\r\n\r\n setCustomVanitySinkMetaData = (feature) => {\r\n switch (feature.dbFeature.lixilProductSubCategory) {\r\n case \"Pedestal Bathroom Sinks\":\r\n return \"Pedestal\"\r\n case \"Above Counter Sinks with Vessel\":\r\n case \"Countertop Bathroom Sinks\":\r\n return \"Top Mount\"\r\n case \"Undermount Bathroom Sinks\":\r\n case \"Undermount Sinks\":\r\n return \"Undermount\"\r\n default:\r\n return \"\"\r\n }\r\n }\r\n\r\n setSpecificRules(isAsBathroomState = false) {\r\n console.log(\"setSpecificRules\", isAsBathroomState);\r\n if (getCurrentRoomType(this.layout) === LOOK_ROOM_TYPES.as || isAsBathroomState) {\r\n const sinkFeatureGroup = this.relatedItems.find(relItem => relItem.partId === \"vanity_sink\");\r\n this.relatedItems.forEach(relItem => {\r\n Object.keys(relItem.featuresList).forEach(layoutName => {\r\n [...relItem.featuresList[layoutName], ...relItem.featuresPartsList[layoutName]].map(feature => {\r\n feature.dbFeature.metaData[\"FeatureSku\"] = [getSkuWithoutDot(feature.dbFeature.sharedFeatureName)];\r\n if (relItem.partId === \"vanity_sink\" && Array.isArray(feature.dbFeature.metaData[\"MatchingFeature\"])) {\r\n feature.dbFeature.metaData[\"CustomSinkSubCategory\"] = this.setCustomVanitySinkMetaData(feature);\r\n feature.metaData[\"CustomSinkSubCategory\"] = this.setCustomVanitySinkMetaData(feature);\r\n let sinkTypes = [];\r\n feature.dbFeature.metaData[\"MatchingFeature\"].forEach(currentSku => {\r\n Object.keys(VANITY_TYPES).forEach(partId => {\r\n const featureGroup = this.relatedItems.find(relItem => relItem.partId === partId);\r\n if (featureGroup) {\r\n const feature = [...featureGroup.featuresList[layoutName], ...featureGroup.featuresPartsList[layoutName]].find(testFeature => {\r\n return getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName) === currentSku\r\n });\r\n if (feature) {\r\n sinkTypes.push(feature.partId)\r\n }\r\n } else {\r\n console.log(\"no feature group found to apply sink metadata\", partId);\r\n }\r\n })\r\n });\r\n if (feature.dbFeature.metaData[\"MatchingFeature\"] && feature.dbFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n sinkTypes.push(VANITY_TYPES.vanity_cabinet);\r\n feature.dbFeature.metaData[\"FeatureSku\"] = [METADATA.ALL];\r\n feature.metaData[\"FeatureSku\"] = [METADATA.ALL];\r\n }\r\n // if (!sinkTypes.length && feature.dbFeature.metaData[\"MountType\"] && feature.dbFeature.metaData[\"MountType\"].includes('ST')) {\r\n // sinkTypes.push(METADATA.ALL)\r\n // }\r\n feature.dbFeature.metaData[\"CustomVanityType\"] = sinkTypes; // create custom metadata\r\n feature.metaData[\"CustomVanityType\"] = sinkTypes; // create custom metadata\r\n }\r\n if (relItem.partId === \"vanity_cabinet\" && Array.isArray(feature.dbFeature.metaData[\"MatchingFeature\"]) && sinkFeatureGroup) {\r\n let sinkTypes = [];\r\n feature.dbFeature.metaData[\"MatchingFeature\"].forEach(currentSku => {\r\n const sinkFeature = [...sinkFeatureGroup.featuresList[layoutName], ...sinkFeatureGroup.featuresPartsList[layoutName]].find(testFeature => {\r\n return getSkuWithoutDot(testFeature.dbFeature.sharedFeatureName) === currentSku\r\n });\r\n if (sinkFeature) {\r\n const type = this.setCustomVanitySinkMetaData(sinkFeature);\r\n if (!sinkTypes.includes(type)) {\r\n sinkTypes.push(this.setCustomVanitySinkMetaData(sinkFeature))\r\n }\r\n }\r\n });\r\n feature.dbFeature.metaData[\"CustomSinkSubCategory\"] = sinkTypes; // create custom metadata\r\n feature.metaData[\"CustomSinkSubCategory\"] = sinkTypes; // create custom metadata\r\n }\r\n // console.log(\"feature.metaData[\\\"CustomVanityType\\\"]\", feature.metaData[\"CustomVanityType\"]);\r\n // console.log(\"feature\", feature);\r\n return feature\r\n })\r\n })\r\n })\r\n }\r\n this.needToUpdateCustomMetadata = false;\r\n }\r\n\r\n updateVanityParts() {\r\n if (getCurrentRoomType(this.layout) === LOOK_ROOM_TYPES.as) {\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.hideLayerCondition) {\r\n relatedItem.disabled = relatedItem.hideLayerCondition();\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout3: 3,\r\n Layout4: 4,\r\n Layout5: 5,\r\n Layout6: 6,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout3\",\r\n \"Layout4\",\r\n \"Layout5\",\r\n \"Layout6\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout6\",\r\n \"Layout5\",\r\n \"Layout4\",\r\n \"Layout3\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\",\r\n sinkUTypes: [\"U\", \"ST\", \"FM\", \"SM\"],\r\n FloorWithIsland: \"default\",\r\n NO: \"NO\",\r\n};\r\n\r\nexport const PLACEMENTS = {\r\n Island: \"Island\",\r\n Countertop: \"Countertop\"\r\n};\r\n\r\nexport const KVSCENE_BACKSPLASH_TYPES = [\"4 inch\", \"6 inch\", \"8 inch\", \"Full\"];\r\n\r\nexport const DECORS_MAX = 25;\r\n\r\nconst oldKitchenCabinetsLogicProfiles = [\r\n \"americasdream\",\r\n \"stonely_inc\",\r\n \"215mercury\",\r\n \"sci_surfaces\",\r\n \"lakeside_surfaces_\",\r\n \"true_blue_surfaces_\",\r\n \"bellezza_surfaces\",\r\n \"premier_cabinet_paintin_llc\",\r\n \"premier_cabinet_paintin_llc_v5\",\r\n \"american_kitchen_and_stone\",\r\n \"arizona_granite\",\r\n \"a_granito_world\",\r\n \"stonecraft\",\r\n \"wallstone_cabinetry_countertops\",\r\n \"jg_countertops_llc\",\r\n \"the_granite_guys\",\r\n \"blue_line_construction\",\r\n \"blue_line_construction_2023\",\r\n \"williams_kitchen_bath\",\r\n \"xpresbathshower\",\r\n \"eastern_surfaces\",\r\n \"wallstone_cabinetry_countertops_rebuild\",\r\n \"the_granite_guys_rebuild\",\r\n \"south_florida_remodelers\",\r\n \"artemisa\",\r\n \"kitchen_doctors_kbf\",\r\n \"home_essentials\",\r\n \"amc_building_supply_v5\",\r\n \"amc_countertops_v5\",\r\n \"cafe_countertops\",\r\n \"gmd_surfaces\",\r\n \"colonial_bath\",\r\n \"carpetmart\",\r\n];\r\n\r\nexport const hasOldCabinetLogic = () => {\r\n if (!window.location.host || (typeof window.location.host !== \"string\")) {\r\n return false\r\n }\r\n const subDomain = window.location.host.split('.')[0];\r\n if (window.location.host.includes(\"quotekandb.com\")) {\r\n return subDomain === \"moderno_demo_3011\" || subDomain === \"erpizo\" || subDomain === \"multitool\"\r\n }\r\n return subDomain.includes(\"porcelanosa_\") || window.location.href.includes(\"fab_subdomain=porcelanosa_\")\r\n || oldKitchenCabinetsLogicProfiles.some(profile => {\r\n return (profile === subDomain) || window.location.href.includes(\"fab_subdomain=\" + profile)\r\n })\r\n}\r\n\r\nexport const useOldCabinetLogic = hasOldCabinetLogic();\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {ShowerType, ShowerBodyType} from \"../constants\";\r\nimport {showerThumbnail} from '../assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\nimport Shadow from \"../subparts/shadow\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerInteriorWall from \"../subparts/shower/showerInteriorWall\";\r\nimport ShowerInteriorWallAccent from \"../subparts/shower/showerInteriorWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = ShowerBodyType.Glass;\r\n\r\n this.showerBody = null;\r\n this.showerGlass = null;\r\n this.showerInteriorWall = null;\r\n this.showerInteriorWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n\r\n this.shadows = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n if (!dbFeature.displayName.includes('Neo Angle')) {\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Wall\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerInteriorWall\";\r\n RelatedItemClass = ShowerInteriorWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerInteriorWallAccent\";\r\n RelatedItemClass = ShowerInteriorWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n if (!dbFeature.displayName.includes(\"Neo Angle\")) {\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Shadow\":\r\n if (\r\n dbFeature.displayName.includes(\"Shower Shadow - Interior Wall\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Floor\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pan\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall Cap\")\r\n ) {\r\n relatedItemName = \"shadows\";\r\n RelatedItemClass = Shadow;\r\n relatedItemType = Shower.Type.All;\r\n }\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n const relatedItems = this.getRelatedItems();\r\n // console.log('relatedItems', relatedItems);\r\n relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n });\r\n if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n this.showerDoor.setLayers(layout);\r\n }\r\n if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n this.showerDoorHandle.setLayers(layout);\r\n }\r\n relatedItems.forEach(relatedItem => {\r\n\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n\r\n // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n\r\n if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n })\r\n }\r\n if (relatedItem instanceof ShowerInteriorWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n })\r\n }\r\n\r\n if (relatedItem.shadowFeature && relatedItem.shadowFeature.layer) {\r\n relatedItem.shadowFeature.layer.addTo(res)\r\n }\r\n\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Shower', this)\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return filteredAvailableFeatures.filter(f => this.activeSubType_ === Shower.Type.Complete ? f.type === ShowerType.Complete : f.type !== ShowerType.Complete)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_interior_wall\"\r\n // && relItem.partId !== \"shower_interior_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (!this.showerBody || !this.showerBody.activeFeature) {\r\n return null;\r\n }\r\n let showerSizeValues = this.showerBody.activeFeature.metaData[\"ShowerSize\"];\r\n if (!showerSizeValues || !showerSizeValues.length) {\r\n if (this.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n showerSizeValues = ['30in'];\r\n } else {\r\n console.warn('No Shower size.');\r\n }\r\n } else if (showerSizeValues[0] === \"-\") {\r\n showerSizeValues[0] = this.showerBody.activeFeature.partName.includes(\"60in\") ? \"60in\" : \"30in\"\r\n }\r\n\r\n return showerSizeValues[0];\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature && this.showerBody.activeFeature.showerBodyType !== Shower.Type.Custom;\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n}\r\n\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {getStringFeatureName} from \"../../misc/helpers\";\r\nimport {truncate} from \"../sqft/helpers/sqftHelper\";\r\n\r\nconst FeatureName = (props) => {\r\n const {feature, intl, fabricatorData, maxLength, filterGroups, useCollectionName} = props;\r\n let stringFeatureName = getStringFeatureName(feature, intl.messages, intl.locale, fabricatorData, filterGroups, useCollectionName);\r\n return parseInt(maxLength) === maxLength ? truncate(stringFeatureName, maxLength) : stringFeatureName;\r\n};\r\n\r\nFeatureName.propTypes = {\r\n maxLength: PropTypes.number,\r\n feature: PropTypes.object.isRequired,\r\n useCollectionName: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {filterGroups} = store.filterState;\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureName)\r\n)\r\n\r\n","import PropTypes from \"prop-types\";\r\nimport {featureInterface} from \"../../interfaces/featureInterface\";\r\n\r\nexport const CART_ITEM_ADDED_BY = {\r\n user: \"user\",\r\n auto: \"auto\",\r\n}\r\n\r\nexport const cartItemInterface = {\r\n id: PropTypes.string, // unique id used on frontend\r\n isEmpty: PropTypes.bool,\r\n isMinimumCharge: PropTypes.bool, // is used for lowes, added when countertops sqft is lower than 23\r\n isMinimumChargeItems: PropTypes.bool, // is used for lowes, between 23 and 27 countertops sqft\r\n selectionGroup: PropTypes.string,\r\n partId: PropTypes.string.isRequired,\r\n currentQuote: PropTypes.number,\r\n cartFeature: PropTypes.shape(featureInterface),\r\n quantity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // empty input case\r\n displayFakeQuantity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // for slab (countertop group)\r\n sqftId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // if feature was added from SQFT\r\n unit: PropTypes.string, // was added for SQFT,\r\n qtCatName: PropTypes.string, // was added for SQFT,\r\n relatedProductParent: PropTypes.shape(featureInterface), //\r\n addedBy: PropTypes.oneOf([CART_ITEM_ADDED_BY.auto, CART_ITEM_ADDED_BY.user]), // can be user or auto (if cart list were created by the default(see createCartList function in lookVisualizer.js))\r\n isRemoved: PropTypes.bool,\r\n keepOnLookUpdate: PropTypes.bool, // in case it was added from wizard List - we don't need to remove it on look update cart items logic\r\n shippingName: PropTypes.string,\r\n shippingTime: PropTypes.string,\r\n shippingCost: PropTypes.number,\r\n fromWizardId: PropTypes.number, // wizard item id\r\n fromWizardStep: PropTypes.number, // wizard step (index)\r\n fromWizardGroupId: PropTypes.string, // wizard group\r\n isAddedFromDisplayLogic: PropTypes.bool, // if cart item was added automatically\r\n fromVisualizerType: PropTypes.string,\r\n fromQtCategory: PropTypes.string, // category name (to proper switch)\r\n bundleParentId: PropTypes.string, // parent cart item id (hash)\r\n};\r\n","import {SpacersController} from \"./controllers/SpacersController\";\r\nimport {HandlesController} from \"./controllers/HandlesController\";\r\nimport {WallsController} from \"./controllers/WallsController\";\r\nimport {ShapeColorsController} from \"./controllers/ShapeColorsController\";\r\nimport {WaterfallController} from \"./controllers/line/WaterfallController\";\r\nimport {RemovedFeaturesController} from \"./controllers/RemovedFeaturesController\";\r\nimport {SnappedShapeGroupsController} from \"./controllers/SnappedShapeGroupsController\";\r\nimport {SelectedShapesController} from \"./controllers/SelectedShapesController\";\r\nimport {Images3dController} from \"./controllers/Images3dController\";\r\n\r\nexport const controllersConfig = {\r\n exportableControllers: [\r\n 'snappedShapeGroups',\r\n 'handles'\r\n ],\r\n};\r\n\r\nconst workspaceControllers = {\r\n walls: new WallsController(),\r\n spacer: new SpacersController(),\r\n handles: new HandlesController(),\r\n shapeColors: new ShapeColorsController(),\r\n waterfall: new WaterfallController(),\r\n removedFeatures: new RemovedFeaturesController(),\r\n snappedShapeGroups: new SnappedShapeGroupsController(),\r\n selectedShapes: new SelectedShapesController(),\r\n images3d: new Images3dController(),\r\n};\r\n\r\nexport const getControllersExportData = () => {\r\n const exportData = {};\r\n controllersConfig.exportableControllers.forEach(controllerName => {\r\n const controller = workspaceControllers[controllerName];\r\n if (controller && typeof controller.exportData === 'function') {\r\n exportData[controllerName] = controller.exportData();\r\n }\r\n });\r\n\r\n return exportData;\r\n};\r\n\r\nexport const importControllersData = (data) => {\r\n if (data) {\r\n Object.keys(data).forEach(controllerName => {\r\n const controller = workspaceControllers[controllerName];\r\n if (controller && typeof controller.importData === 'function') {\r\n controller.importData(data[controllerName]);\r\n }\r\n });\r\n }\r\n};\r\n\r\nexport default workspaceControllers\r\n","import JsonApi from \"./jsonApi\";\r\nimport {getBvFeatures, getBvGroupFeatures, getSaveQuoteFastData} from \"./server-api\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../bvcomponents/appLayout\";\r\nimport {COUNTERTOP_GROUP, CABINET_GROUP, EDGE_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport store from \"../store\";\r\nimport {updateNavigationCount} from \"../actions/lookFunctions\";\r\nimport {COUNTERTOP_GROUP_BATHROOM, LOOK_ROOM_TYPES} from \"../bvcomponents/look/core/constants\";\r\nimport {getCommonVisualizerType, IS_LIXIL_SERVERS} from \"../config\";\r\nimport {getFeatureCost} from \"../misc/helpers\";\r\nimport {showWizardInsteadOfQT} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n\r\nexport const LIXIL_USER_QUERY_PARAMS = [\"userid\", \"email\", \"fname\", \"lname\", \"brand\", \"region\"];\r\n\r\nexport const getPassedUserInfo = (searchParams) => {\r\n // {\r\n // userid: {userId from querystring},\r\n // email: {email from querystring},\r\n // fname: {fname from querystring},\r\n // lname: {lname from querystring},\r\n // fabricatorId: {QC Id for Fabricator (same value passed for fabricatorId for the LoginClient API call}\r\n // }\r\n const userData = {\r\n fabricatorId: +document.kvConfig.userId\r\n };\r\n LIXIL_USER_QUERY_PARAMS.forEach(property => {\r\n userData[property] = searchParams.get(property)\r\n ? property === \"userid\" || property === \"lname\"\r\n ? searchParams.get(property).split(\"?userid=\")[0].replace(/ /g, \"+\")\r\n : searchParams.get(property).replace(/ /g, \"+\")\r\n : \"\"\r\n });\r\n console.log(\"request userData\", userData);\r\n return JsonApi.getPassedUserInfo(userData)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error getPassedUserInfo \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const postSaveVisualizerImage = (base64Image) => {\r\n // console.log(\"request postSaveVisualizerImage\", base64Image);\r\n return JsonApi.postSaveVisualizerImage(+document.kvConfig.userId, base64Image)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error postSaveVisualizerImage \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const postSaveTempData = (tempData, id = \"\", expiresIn = \"\", ) => {\r\n return JsonApi.postSaveTempData(tempData, id, expiresIn)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error postSaveTempData \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const getSaveTempData = (id = \"\") => {\r\n return JsonApi.getSaveTempData(id)\r\n .then(response => response.data)\r\n .catch(error => {\r\n debugger;//eslint-disable-line\r\n console.log(\"Server error getSaveTempData \"+new Error(error));\r\n })\r\n};\r\n\r\nexport const getTempIdForPostMessage = async (returnAction = \"\", existingTempId = \"\") => {\r\n const savedFastData = await getSaveQuoteFastData(true);\r\n\r\n savedFastData.records[0].data[\"returnAction\"] = returnAction;\r\n console.log(\"request post temp data before stringify ->\", existingTempId, savedFastData);\r\n const stringifiedSaveData = JSON.stringify(savedFastData);\r\n let receivedTempId = await postSaveTempData(stringifiedSaveData, existingTempId);\r\n if (!receivedTempId) {\r\n receivedTempId = await postSaveTempData(stringifiedSaveData, existingTempId);\r\n }\r\n return receivedTempId\r\n};\r\n\r\nexport const postSureTax = (postData) => {\r\n return JsonApi.postSureTax(postData)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\n\r\nexport const postVerifyAddress = (addressObject) => {\r\n return JsonApi.postVerifyAddress( {\r\n \"Address1\": \"\",\r\n \"Address2\": (addressObject.address1 || \"\").split(\",\")[0],\r\n \"City\" : addressObject.city,\r\n \"State\" : addressObject.stateShort || addressObject.state.slice(0, 2),\r\n \"Zip5\" : (addressObject.postal || \"\").split(\"-\")[0] || null,\r\n \"Zip4\" : (addressObject.postal || \"\").split(\"-\")[1] || null\r\n })\r\n .then(response => {\r\n if (response.data.error) {\r\n return {\r\n errorDescription: response.data.error\r\n }\r\n }\r\n return response.data\r\n })\r\n .catch(error => {\r\n if (error && error.response && error.response.data && error.response.data.error) {\r\n return {\r\n errorDescription: error.response.data.error\r\n }\r\n }\r\n return {\r\n errorDescription: error && error.message ? error.message : \"Server error verifyAddress \"+new Error(error)\r\n }\r\n })\r\n};\r\n\r\nexport const getTrumbleShippingOptions = (skuList, zipCode) => {\r\n return JsonApi.getTrumbleShippingOptions(skuList, zipCode)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\nexport const postTrumbleShippingOptions = (postData, zipCode) => {\r\n return JsonApi.postTrumbleShippingOptions(postData, zipCode)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postSureTax \"+new Error(error)))\r\n};\r\nexport const postTrumbleInventory = (skusArray = []) => {\r\n // https://qc-cdn.s3.amazonaws.com/lixil/image+(8).png\r\n return JsonApi.postTrumbleInventory(skusArray)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error postTrumbleInventory \"+new Error(error)))\r\n};\r\n\r\nexport const postShipperHQOptions = async (shippingAddress, cartItems = []) => {\r\n const {stateShort, state, city, postal} = shippingAddress;\r\n const postData = {\r\n destination: {\r\n \"country\": \"US\", // hardcode for now\r\n \"region\": stateShort || state.slice(0, 2),\r\n \"city\": city,\r\n \"zipcode\": postal,\r\n },\r\n items: cartItems.map(cartItem => ({\r\n \"itemId\": cartItem.cartFeature.dbFeature.id,\r\n \"sku\": cartItem.cartFeature.dbFeature.sku,\r\n \"storePrice\": getFeatureCost(cartItem.cartFeature, 1, cartItem.fromQtCategory),\r\n \"quantity\": cartItem.quantity\r\n }))\r\n }\r\n // https://qc-cdn.s3.amazonaws.com/lixil/image+(10).png\r\n return JsonApi.postShipperHqShipping(postData)\r\n .then(response => {\r\n console.log(\"response postShipperHqShipping\", response && response.data ? response.data : response);\r\n let availableOptions = [];\r\n if (!response.data || !Array.isArray(Object.keys(response.data))) {\r\n return availableOptions\r\n }\r\n availableOptions = Object.keys(response.data).map(dbFeatureId => {\r\n if (!Array.isArray(response.data[dbFeatureId]) || !response.data[dbFeatureId].length) {\r\n return {dbFeatureId: +dbFeatureId, options: []}\r\n }\r\n const options = response.data[dbFeatureId].flatMap(carrier => { // can be several\r\n return carrier.shippingRates.map(shippingRate => {\r\n return {\r\n cost: shippingRate.totalCharges,\r\n title: shippingRate.title,\r\n delivery: shippingRate.delivery || \"-\",\r\n code: shippingRate.code\r\n }\r\n })\r\n })\r\n return {dbFeatureId: +dbFeatureId, options}\r\n })\r\n return availableOptions\r\n })\r\n .catch(error => console.log(\"Server error postShipperHQOptions \"+new Error(error)))\r\n};\r\n\r\n/**\r\n * sets feature quantity properties\r\n * @param featuresArray {featureInterface}\r\n * @returns {promise}\r\n */\r\nexport const setTrumbleInventoryForFeatures = (featuresArray = []) => {\r\n const skusArray = featuresArray.map(feature => feature.dbFeature.sku);\r\n return postTrumbleInventory(skusArray)\r\n .then(responseData => {\r\n // console.log(\"postTrumbleInventory responseData\", responseData);\r\n if (responseData && responseData.success && responseData.inventory) {\r\n Object.keys(responseData.inventory).forEach(sku => {\r\n const featureToUpdate = featuresArray.find(feature => feature.dbFeature.sku === sku);\r\n if (featureToUpdate) {\r\n if (!featureToUpdate.quantityOptions) {\r\n featureToUpdate.quantityOptions = {};\r\n }\r\n featureToUpdate.quantityOptions.trumbleQty = responseData.inventory[sku].inventory;\r\n }\r\n })\r\n }\r\n })\r\n};\r\n\r\nconst requestMoreThanUsualPartIds = [\"vanity_faucet\", \"vanity_sink\", \"shower_head\", \"valve_trim\", \"towel\",\r\n \"towel_towel_bar\", \"towel_towel_hook\", \"towel_towel_ring\", \"shower_fixture\", \"shower_door\"];\r\n\r\n/**\r\n * common function to request features\r\n * @param featureGroup {featureGroupInterface}\r\n * @returns {number}\r\n */\r\nconst request6kFeatures = [...CABINET_GROUP, \"top_handle\", \"bottom_handle\", \"sink\", \"center_island_sink\", \"crown_molding\"];\r\nexport const getFeaturesPageSize = (featureGroup) => {\r\n let pageSize = 1000;\r\n if (document.kvConfig.visualizerType === \"kvScene\" && request6kFeatures.includes(featureGroup.partId)) {\r\n pageSize = 6000 // always for new kitchen (we need all parts)\r\n } else if (COUNTERTOP_GROUP.includes(featureGroup.partId)) {\r\n const {navigationState} = store.getState();\r\n if (document.kvConfig.visualizerType !== \"kvScene\" || navigationState.useFeaturesLightRequest.countertops) {\r\n pageSize = 6000 // always for old Kitchen\r\n }\r\n } else if (\r\n (document.kvConfig.visualizerType === \"bvLook\" && requestMoreThanUsualPartIds.includes(featureGroup.partId))\r\n || (document.kvConfig.visualizerType === \"bvScene\" && (featureGroup.partId === \"shower_wall\" || featureGroup.partId === \"shower_interior_wall\"))\r\n ) {\r\n pageSize = 6000\r\n }\r\n if (featureGroup.allFeaturesReceived && pageSize === 6000) {\r\n pageSize = 2000 // next always 2k, it works correctly on scroll\r\n }\r\n return pageSize\r\n}\r\n\r\nexport const getAdditionalFeaturesOnScroll = async (featureGroup, isCommonRequest = false) => {\r\n if (featureGroup.createdManually || featureGroup.requestInProgress) {\r\n if (featureGroup.createdManually) {\r\n featureGroup.allFeaturesReceived = true;\r\n }\r\n return false\r\n }\r\n\r\n featureGroup.requestInProgress = true;\r\n // console.log(\"propsPageSize\", propsPageSize);\r\n const pageSize = getFeaturesPageSize(featureGroup);\r\n const layout = featureGroup.getParent\r\n ? featureGroup.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n const nextFeaturesPage = featureGroup.getNextPageToLoad(layoutAbbr);\r\n\r\n if (featureGroup.additionalPartPartId) {\r\n const wallParent = layout.parts[\"Walls\"];\r\n const isWallChild = wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n if (isWallChild) {\r\n const cropResponse = await getBvGroupFeatures((featureGroup.dbName || featureGroup.partName) + \" Crop\", nextFeaturesPage, pageSize * 3);\r\n if (Array.isArray(cropResponse)) {\r\n featureGroup.setGroupFeatures(cropResponse, pageSize * 2, false, layoutAbbr, nextFeaturesPage, false, !isCommonRequest);\r\n }\r\n }\r\n }\r\n\r\n const response = await getBvGroupFeatures(featureGroup.dbName || featureGroup.partName, nextFeaturesPage, pageSize);\r\n\r\n let responseArray = Array.isArray(response) ? response : [];\r\n let oldFeatures = [];\r\n if (layout.isNewLayout && featureGroup.nextFeaturesPageToLoadArray && !featureGroup.allFeaturesReceived && !IS_LIXIL_SERVERS\r\n && (CABINET_GROUP.includes(featureGroup.partId) || COUNTERTOP_GROUP.includes(featureGroup.partId)\r\n || COUNTERTOP_GROUP_BATHROOM.includes(featureGroup.partId))) { // we don't need requests for walls\r\n const {wizardList, wizardIsActive} = store.getState().wizardState;\r\n if (!showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const responseWithOldFeatures = await getBvGroupFeatures(featureGroup.dbName || featureGroup.partName, nextFeaturesPage, 6000, [], \"\", \"\", null, true);\r\n if (Array.isArray(responseWithOldFeatures)) {\r\n oldFeatures = responseWithOldFeatures;\r\n }\r\n }\r\n }\r\n\r\n featureGroup.setGroupFeatures(responseArray, pageSize, true, layoutAbbr, nextFeaturesPage, false, !isCommonRequest);\r\n\r\n if (oldFeatures.length) {\r\n featureGroup.setGroupFeatures(oldFeatures, pageSize, false, layoutAbbr, nextFeaturesPage, true, false);\r\n }\r\n featureGroup.requestInProgress = false;\r\n // if (applyCustomConfigurations) { //no need for it right now since we have less than 1000 sinks anf faucets\r\n // const vanityParent = layout.parts[\"Vanity\"];\r\n // const isVanityChild = vanityParent && vanityParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n // if (vanityParent) {\r\n // layout.createCustomConfigurations();\r\n // }\r\n // }\r\n return responseArray\r\n};\r\n\r\nconst allRelatedItemsCheck = (parentGroup, neededParts) => {\r\n parentGroup.relatedItems.forEach(relItem => {\r\n if (!relItem.allFeaturesReceived && !neededParts.some(featureGroup => featureGroup.partId === relItem.partId)) {\r\n neededParts.push(relItem)\r\n }\r\n })\r\n return neededParts\r\n}\r\n\r\n/**\r\n * gets all features depending on the featureGroup\r\n * @param featureGroup {featureGroupInterface}\r\n * @param shouldUpdateNavigation {boolean}\r\n */\r\nexport const checkIfLookFeaturesReceived = async (featureGroup, shouldUpdateNavigation = true) => {\r\n const layout = featureGroup.getParent\r\n ? featureGroup.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n let neededParts = [];\r\n let neededFeatureGroup = null;\r\n if (!featureGroup.allFeaturesReceived\r\n || (featureGroup.nextFeaturesPageToLoadArray && !featureGroup.nextFeaturesPageToLoadArray[layoutAbbr].page)) {\r\n neededParts.push(featureGroup);\r\n }\r\n // const wallParent = layout.parts[\"Walls\"];\r\n const vanityParent = layout.parts[\"Vanity\"];\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n\r\n // const isWallChild = wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n const isVanityChild = vanityParent && vanityParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId);\r\n const isCabinetChild = cabinetParent\r\n && (cabinetParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId)\r\n || featureGroup.partId === \"fridge\"\r\n || featureGroup.partId === \"dishwasher\"\r\n || featureGroup.partId === \"center_island_cabinet\"\r\n || featureGroup.partId === \"stovetop\"\r\n || featureGroup.partId === \"range\"\r\n || featureGroup.partId === \"hood\");\r\n const isCountertop = COUNTERTOP_GROUP.some(partId => partId === featureGroup.partId);\r\n const isEdge = EDGE_GROUP.some(partId => partId === featureGroup.partId);\r\n const visType = getCommonVisualizerType();\r\n const isFaucetOrSink = visType === \"kitchen\" && (featureGroup.partId.includes(\"faucet\") || featureGroup.partId.includes(\"sink\"));\r\n const isShowerHeadOrArm = visType === \"bathroom\" && (featureGroup.partId.includes(\"shower_arm\") || featureGroup.partId.includes(\"shower_head\"));\r\n const isDoorOrShowerPan = visType === \"bathroom\" && (featureGroup.partId.includes(\"shower_door\") || featureGroup.partId.includes(\"shower_pan_combo\"));\r\n // if (isWallChild) {\r\n // neededParts = allRelatedItemsCheck(wallParent, neededParts);\r\n // } else if (isVanityChild) {\r\n if (isVanityChild) {\r\n neededParts = allRelatedItemsCheck(vanityParent, neededParts);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const wallParent = layout.parts[\"Walls\"];\r\n const appliancesParent = layout.parts[\"Appliances\"];\r\n if (wallParent) {\r\n [\"frontWall\", \"rightWall\", \"leftWall\"].forEach(wallId => {\r\n if (wallParent[wallId] && !wallParent[wallId].allFeaturesReceived) {\r\n neededParts.push(wallParent[wallId]);\r\n }\r\n })\r\n }\r\n if (appliancesParent && appliancesParent.fridgeEnclosure && !appliancesParent.fridgeEnclosure.allFeaturesReceived) {\r\n neededParts.push(appliancesParent.fridgeEnclosure);\r\n }\r\n }\r\n } else if (isCabinetChild) {\r\n neededParts = allRelatedItemsCheck(cabinetParent, neededParts);\r\n if (featureGroup.partId !== \"center_island_cabinet\") {\r\n const centerIslandCabinet = layout.getFeatureGroupByPartId(\"center_island_cabinet\");\r\n if (centerIslandCabinet) {\r\n neededParts.push(centerIslandCabinet);\r\n }\r\n }\r\n } else if (isCountertop) {\r\n const countertop = layout.parts[\"Countertop\"] ? layout.parts[\"Countertop\"].countertop : null;\r\n const backsplash = layout.parts[\"Walls\"] ? layout.parts[\"Walls\"].backsplash : null;\r\n const centerCountertop = layout.parts[\"CenterIsland\"] ? layout.parts[\"CenterIsland\"].countertop : null;\r\n const edgeProfile = layout.parts[\"Countertop\"] ? layout.parts[\"Countertop\"].edgeProfile || layout.parts[\"Countertop\"].edge : null;\r\n [countertop, backsplash, centerCountertop, edgeProfile].forEach(relItem => {\r\n if (relItem && (relItem.partId !== featureGroup.partId) && !relItem.allFeaturesReceived) {\r\n neededParts.push(relItem)\r\n }\r\n });\r\n if (featureGroup.partId === \"center_island_countertop\" && layout.parts[\"CenterIsland\"] && layout.parts[\"CenterIsland\"].sink) {\r\n neededParts.push(layout.parts[\"CenterIsland\"].sink)\r\n }\r\n } else if (isFaucetOrSink) {\r\n const parent = featureGroup.getParent();\r\n switch (featureGroup.partId) {\r\n case \"center_island_faucet\":\r\n case \"faucet\":\r\n neededFeatureGroup = parent.sink;\r\n break;\r\n case \"center_island_sink\":\r\n case \"sink\":\r\n neededFeatureGroup = parent.faucet;\r\n break;\r\n default:\r\n break;\r\n }\r\n if ((featureGroup.partId === \"center_island_sink\") && parent.countertop) {\r\n neededParts.push(parent.countertop)\r\n }\r\n } else if (isDoorOrShowerPan) {\r\n neededFeatureGroup = featureGroup.partId.includes(\"shower_door\")\r\n ? featureGroup.getParent().showerPanCombo\r\n : featureGroup.getParent().showerDoor;\r\n } else if (isShowerHeadOrArm) {\r\n neededFeatureGroup = featureGroup.partId.includes(\"shower_arm\")\r\n ? featureGroup.getParent().showerHead\r\n : featureGroup.getParent().showerArm;\r\n } else if (isEdge) {\r\n neededFeatureGroup = featureGroup.getParent().countertop;\r\n } else if (featureGroup.partId === \"stove\" || featureGroup.partId === \"range\") {\r\n if (featureGroup.getParent().hood) {\r\n neededParts.push(featureGroup.getParent().hood);\r\n }\r\n if (featureGroup.getParent().oven) {\r\n neededParts.push(featureGroup.getParent().oven);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet) {\r\n neededParts.push(cabinetParent.bottomCabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomHandle) {\r\n neededParts.push(cabinetParent.bottomHandle);\r\n }\r\n }\r\n if (neededFeatureGroup && !neededFeatureGroup.allFeaturesReceived) {\r\n neededParts.push(neededFeatureGroup)\r\n }\r\n const responses = await Promise.all([\r\n ...neededParts.map(async relatedItem => await getAdditionalFeaturesOnScroll(relatedItem, true)),\r\n ]);\r\n\r\n if (isVanityChild) {\r\n layout.createCustomConfigurations();\r\n }\r\n\r\n if (shouldUpdateNavigation) {\r\n // store.dispatch(updateFeatureGroupCount())\r\n store.dispatch(updateNavigationCount())\r\n }\r\n\r\n return responses\r\n};\r\n\r\nexport const getFeatureFromTheBackendBySku = async (skuFromUrl, featureGroupFromUrl) => {\r\n let featureFound;\r\n const requestFirstSharedFeaturenames = document.kvConfig.visualizerType !== \"bvLook\"; // for bv look skus are first\r\n const response = await getBvFeatures(null, [skuFromUrl], requestFirstSharedFeaturenames);\r\n if (response) {\r\n let featuresLoaded = response.data || [];\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(featuresLoaded);\r\n const featureGroupPartId = featureGroupFromUrl ? featureGroupFromUrl.replace(/-/gi, \"_\") : \"\";\r\n featureFound = layout.getFeatureBySku(skuFromUrl, featureGroupPartId, false, requestFirstSharedFeaturenames);\r\n if (!featuresLoaded.length || !featureFound) {\r\n const response2 = await getBvFeatures(null, [skuFromUrl], !requestFirstSharedFeaturenames);\r\n if (response2 && Array.isArray(response2.data) && response2.data.length) {\r\n layout.loadNewFeatures( response2.data);\r\n featureFound = layout.getFeatureBySku(skuFromUrl, featureGroupPartId, false, !requestFirstSharedFeaturenames);\r\n }\r\n }\r\n }\r\n return featureFound\r\n}\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setRelatedGroups = (relatedGroups) => ({\r\n type: types.SET_RELATED_GROUPS,\r\n payload: { relatedGroups }\r\n});\r\n\r\nexport const setRelatedGroupsSearch = (relatedGroupsSearch) => ({\r\n type: types.SET_RELATED_GROUPS_SEARCH,\r\n payload: { relatedGroupsSearch }\r\n});\r\n\r\nexport const toggleGalleryVisible = (galleryVisible, galleryShowActiveFeature = null) => ({\r\n type: types.TOGGLE_GALLERY_VISIBLE,\r\n payload: { galleryVisible, galleryShowActiveFeature }\r\n});\r\n\r\nexport const setGalleryActiveImageIndex = (galleryActiveImageIndex) => ({\r\n type: types.SET_GALLERY_ACTIVE_IMAGE_INDEX,\r\n payload: { galleryActiveImageIndex }\r\n});\r\n\r\nexport const setMaterialsPageSubSteps = (subSteps) => ({\r\n type: types.SET_MATERIALS_PAGE_SUB_STEPS,\r\n payload: { subSteps }\r\n});\r\n\r\nexport const setMaterialsPageActiveSubStep = (activeSubStep) => ({\r\n type: types.SET_MATERIALS_PAGE_ACTIVE_SUB_STEP,\r\n payload: { activeSubStep }\r\n});\r\n\r\nexport const toggleNotCompatibleView = (showNotCompatibleView) => ({\r\n type: types.TOGGLE_NOT_COMPATIBLE_VIEW,\r\n payload: { showNotCompatibleView }\r\n});\r\n\r\nexport const toggleProductNoteEditorVisible = (productNoteEditorVisible) => ({\r\n type: types.TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE,\r\n payload: { productNoteEditorVisible }\r\n});\r\n\r\nexport const setRowItems = (rowItems) => ({\r\n type: types.SET_ROW_ITEMS,\r\n payload: { rowItems }\r\n});\r\nexport const setMaterialsCanvasClass = (materialsCanvasClass) => ({\r\n type: types.SET_MATERIALS_PAGE_CANVAS_CLASS,\r\n payload: { materialsCanvasClass }\r\n});\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../assets\";\r\n\r\nimport CompleteVanity from \"../subparts/vanity/completeVanity\";\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityPedestal from \"../subparts/vanity/vanityPedestal\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport LightingFixture from \"../subparts/vanity/lightingFixture\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.pedestalSink = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n this.lightingFixture = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Lighting Fixture\":\r\n relatedItemName = \"lightingFixture\";\r\n RelatedItemClass = LightingFixture;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Vanity\": {\r\n const completeVanity = dbFeature.metaData && dbFeature.metaData[\"Vanity\"]\r\n && dbFeature.metaData[\"Vanity\"].includes(\"Complete\");\r\n\r\n relatedItemName = completeVanity ? \"completeVanity\" : \"pedestalSink\";\r\n RelatedItemClass = completeVanity ? CompleteVanity : VanityPedestal;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"pedestalSink\") {\r\n this.relatedItems.unshift(this.pedestalSink); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n this.placeholdersNeeded = true;\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer && relatedItem.activeFeature.layer.src\r\n ? relatedItem.activeFeature.layer.addTo(res)\r\n : relatedItem.placeholderFeature && relatedItem.placeholderFeature.layer && relatedItem.placeholderFeature.layer.src\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : null;\r\n });\r\n return res.length ? res : null;\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Vanity', this);\r\n }\r\n\r\n subTypes() {\r\n return this.pedestalSink && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize() {\r\n return this.getCounterTopSize() || '24in'; // temporary hardcode until we would have meta data finished\r\n }\r\n\r\n getCounterTopSize() {\r\n\r\n if (this.activeSubType_ === Vanity.Types.Custom && this.pedestalSink && !this.pedestalSink.placeholderChanged\r\n && this.pedestalSink.placeholderFeature && +this.pedestalSink.placeholderFeature.vanitySize === 72) {\r\n return '72in' // placeholder hardcode\r\n }\r\n\r\n if (this.activeSubType_ === Vanity.Types.Complete) {\r\n if (!this.completeVanity.activeFeature) {\r\n this.completeVanity.setDefault()\r\n }\r\n return this.completeVanity.activeFeature.vanitySize + \"in\"\r\n } else {\r\n if (this.pedestalSink && !this.pedestalSink.activeFeature) {\r\n this.pedestalSink.setDefault()\r\n }\r\n return (this.pedestalSink && this.pedestalSink.activeFeature)\r\n ? this.pedestalSink.activeFeature.vanitySize + \"in\"\r\n : null;\r\n }\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {showerThumbnail} from '../../../bvComponent/core/assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerWall from \"../subparts/shower/showerWall\";\r\nimport ShowerWallAccent from \"../subparts/shower/showerWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = 1; // Door\r\n\r\n this.showerBody = null;\r\n this.showerGlass = null;\r\n this.showerWall = null;\r\n this.showerWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall\":\r\n case \"Shower Walls\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerInteriorWall\";\r\n RelatedItemClass = ShowerWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerWallAccent\";\r\n RelatedItemClass = ShowerWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n if (!dbFeature.displayName.includes(\"Neo Angle\")) {\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n }\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n // setLayers(layout, placeholdersNeeded) {\r\n // let res = [];\r\n // const relatedItems = this.getRelatedItems();\r\n // // console.log('relatedItems', relatedItems);\r\n // relatedItems.forEach(relatedItem => {\r\n // relatedItem.setLayers(layout);\r\n // });\r\n // if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n // this.showerDoor.setLayers(layout);\r\n // }\r\n // if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n // this.showerDoorHandle.setLayers(layout);\r\n // }\r\n // relatedItems.forEach(relatedItem => {\r\n //\r\n // (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n // ? relatedItem.placeholderFeature.layer.addTo(res)\r\n // : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n //\r\n // // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n //\r\n // if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n // && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n // if (relatedItem instanceof ShowerWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n //\r\n // });\r\n //\r\n // return res.length ? res : null;\r\n // }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_interior_wall\"\r\n // && relItem.partId !== \"shower_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (this.showerTubComboIsActive()) {\r\n const showerTubCombo = this.getActiveShowerGroup();\r\n if (showerTubCombo) {\r\n const activeRelItem = showerTubCombo.relatedItems.find(featureGroup => featureGroup.partId === showerTubCombo.bottomTub)\r\n || showerTubCombo.replacementTub;\r\n if (activeRelItem && activeRelItem.activeFeature && activeRelItem.activeFeature.metaData[\"ShowerSize\"]) {\r\n return activeRelItem.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n }\r\n return null\r\n }\r\n if (!this.showerBody || !this.showerBody.activeFeature) {\r\n return null;\r\n }\r\n let showerSizeValues = this.showerBody.activeFeature.metaData[\"ShowerSize\"];\r\n if (!showerSizeValues || !showerSizeValues.length) {\r\n if (this.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n showerSizeValues = ['30'];\r\n } else {\r\n console.warn('No Shower size.');\r\n }\r\n } else if (showerSizeValues[0] === \"-\") {\r\n showerSizeValues[0] = this.showerBody.activeFeature.partName.includes(\"60in\") ? \"60\" : \"30\"\r\n }\r\n\r\n return showerSizeValues[0];\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n}\r\n\r\n","const COLOR_THEMES = {\r\n \"qc\": {\r\n primary: \"#4A90E2\",\r\n primary_hover: \"#3483de\", // darken(primary, 5%),\r\n primary_transparent8: \"rgba(74,144,226,0.8)\",\r\n primary_transparent: \"rgba(74,144,226,0.5)\", // fade_out(primary, 0.5),\r\n active: \"#9FC522\",\r\n active_hover: \"#8daf1e\", //darken(#9FC522, 5%),\r\n active_disabled: \"rgba(141,175,30,0.5)\", //#dfecb5\",\r\n active_transparent: \"rgba(159,197,34,0.5)\", // fade_out(#9FC522, 0.5),\r\n assetsPath: \"../images\",\r\n },\r\n \"caes\": {\r\n primary: \"#58595b\",\r\n primary_hover: \"#4b4c4e\", //darken(#58595b, 5%),\r\n primary_transparent8: \"rgba(74,144,226,0.8)\",\r\n primary_transparent: \"rgba(88,89,91,0.5)\", // fade_out(primary, 0.5),\r\n active: \"#f46c42\",\r\n active_hover: \"#f3592a\", //darken(#f46c42, 5%),\r\n active_disabled: \"rgba(243,89,42, 0.5)\",\r\n active_transparent: \"rgba(244,108,66,0.5)\", //fade_out(#9FC522, 0.5),\r\n assetsPath: \"../images-caes\",\r\n }\r\n};\r\n\r\nexport const COLOR = {\r\n black: '#000000',\r\n blackLight: '#4a4a4a',\r\n white: '#ffffff',\r\n blue: '#ffffff',\r\n red: '#f11515',\r\n red_transparent: \"rgba(241, 21, 21 , 0.5)\",\r\n}\r\n\r\nexport default COLOR_THEMES\r\n","import store from \"../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../actions/sqftFunctions\";\r\nconst SqftStore = {\r\n viewGL: null,\r\n ctxCenter: {\r\n x: 0,\r\n y: 0,\r\n },\r\n canvas: {\r\n width: 0,\r\n height: 0\r\n },\r\n radius: {\r\n arcLength: 0,\r\n angle: 0,\r\n clickedEdgeButton: null,\r\n featureId: null,\r\n },\r\n edgeFeatureGroup: null,\r\n edgeFeatures: [],\r\n isSlabMode: () => {\r\n const reduxState = store.getState();\r\n return reduxState.sqftSlabState.isShowSlabTool;\r\n },\r\n isRegularMode: () => {\r\n const reduxState = store.getState();\r\n return !reduxState.sqftSlabState.isShowSlabTool;\r\n },\r\n updateCalculations: () => {\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n },\r\n getShapeType: () => {\r\n //todo\r\n },\r\n seamHistory: [],\r\n setSeamHistory: function(seamHistory) {\r\n this.seamHistory = seamHistory\r\n },\r\n addSeamHistory: function(shapeId) {\r\n this.seamHistory.push(shapeId)\r\n },\r\n getSeamHistory: function() {\r\n return this.seamHistory;\r\n }\r\n};\r\n\r\nexport default SqftStore\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const showMaterialsTutorial = (materialsTutorialIsOpened) => ({\r\n type: types.SHOW_MATERIALS_TUTORIAL,\r\n payload: {materialsTutorialIsOpened}\r\n});\r\n\r\nexport const setMaterialsTutorialStep = (materialsTutorialStep) => ({\r\n type: types.SET_MATERIALS_TUTORIAL_STEP,\r\n payload: {materialsTutorialStep}\r\n});\r\n\r\nexport const setMaterialsTutorialFinished = (materialsTutorialFinished) => ({\r\n type: types.SET_MATERIALS_TUTORIAL_FINISHED,\r\n payload: {materialsTutorialFinished}\r\n});\r\n\r\nexport const showMaterialsAgentTutorial = (materialsAgentTutorialIsOpened) => ({\r\n type: types.SHOW_MATERIALS_AGENT_TUTORIAL,\r\n payload: {materialsAgentTutorialIsOpened}\r\n});\r\n\r\nexport const setMaterialsAgentTutorialFinished = (materialsAgentTutorialFinished) => ({\r\n type: types.SET_MATERIALS_AGENT_TUTORIAL_FINISHED,\r\n payload: {materialsAgentTutorialFinished}\r\n});\r\n\r\nexport const showVisualizerTutorial = (visualizerTutorialIsOpened) => ({\r\n type: types.SHOW_VISUALIZER_TUTORIAL,\r\n payload: {visualizerTutorialIsOpened}\r\n});\r\n\r\nexport const setVisualizerTutorialStep = (visualizerTutorialStep) => ({\r\n type: types.SET_VISUALIZER_TUTORIAL_STEP,\r\n payload: {visualizerTutorialStep}\r\n});\r\n\r\nexport const setVisualizerTutorialFinished = (visualizerTutorialFinished) => ({\r\n type: types.SET_VISUALIZER_TUTORIAL_FINISHED,\r\n payload: {visualizerTutorialFinished}\r\n});\r\n","//todo move out of this folder\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport {getParallelPoints, getPointOnTheLine} from \"../../../helpers/sqftHelper\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport sqftEventManager from \"../store/sqftEventManager\";\r\nimport {getMidPoint, getPointBetweenPoints, getPointDistance} from \"../../../helpers/sqftHelper\";\r\nimport workspace from \"../core/workspace\";\r\n\r\nexport default class RenderFigures {\r\n\r\n /**\r\n * Draws a rounded rectangle using the current state of the canvas.\r\n * If you omit the last three params, it will draw a rectangle\r\n * outline with a 5 pixel border radius\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * @param {Number} [radius = 5] The corner radius; It can also be an object\r\n * to specify different radii for corners\r\n * @param {Number} [radius.tl = 0] Top left\r\n * @param {Number} [radius.tr = 0] Top right\r\n * @param {Number} [radius.br = 0] Bottom right\r\n * @param {Number} [radius.bl = 0] Bottom left\r\n * @param {Boolean} [isFilled = false] Whether to fill the rectangle.\r\n * @param {Boolean} [stroke = true] Whether to stroke the rectangle.\r\n */\r\n static roundedRect(ctx, x, y, width, height, radius, isFilled, stroke) {\r\n if (typeof stroke === 'undefined') {\r\n stroke = true;\r\n }\r\n if (typeof radius === 'undefined') {\r\n radius = 5;\r\n }\r\n if (typeof radius === 'number') {\r\n radius = {tl: radius, tr: radius, br: radius, bl: radius};\r\n } else {\r\n let defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};\r\n for (let side in defaultRadius) {\r\n radius[side] = radius[side] || defaultRadius[side];\r\n }\r\n }\r\n ctx.beginPath();\r\n ctx.moveTo(x + radius.tl, y);\r\n ctx.lineTo(x + width - radius.tr, y);\r\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\r\n ctx.lineTo(x + width, y + height - radius.br);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\r\n ctx.lineTo(x + radius.bl, y + height);\r\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\r\n ctx.lineTo(x, y + radius.tl);\r\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\r\n ctx.closePath();\r\n if (isFilled) {\r\n ctx.fill();\r\n }\r\n if (stroke) {\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n static renderOval(ctx, w, h, x, y = 0, fullOval = false) {\r\n let lx = x - w * .5;\r\n let rx = x + w * .5;\r\n let ty = y - h * .5;\r\n let by = y + h * .5;\r\n\r\n let magic = 0.551915024494;\r\n let xMagic = magic * w * 0.5;\r\n let yMagic = h * magic * 0.5;\r\n\r\n ctx.moveTo(x, ty);\r\n ctx.bezierCurveTo(x + xMagic, ty, rx, y - yMagic, rx, y);\r\n ctx.bezierCurveTo(rx, y + yMagic, x + xMagic, by, x, by);\r\n if (fullOval) {\r\n ctx.bezierCurveTo(y - xMagic, by, lx, y + yMagic, lx, y);\r\n ctx.bezierCurveTo(lx, x - yMagic, x - xMagic, ty, x, ty);\r\n }\r\n }\r\n\r\n static drawArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 10, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n static drawRotatedArrow = (context, fromX, fromY, toX, toY, cornerPointX, cornerPointY, rotateAngle) => {\r\n const midpoint = getMidPoint({x: fromX, y: fromY}, {x: toX, y: toY});\r\n const rotateDirectionPoint = getPointBetweenPoints(midpoint, {x: cornerPointX, y: cornerPointY}, rotateAngle);\r\n let headLen = 7, // length of head in pixels\r\n dx = toX - rotateDirectionPoint.x,\r\n dy = toY - rotateDirectionPoint.y,\r\n angle = Math.atan2(dy, dx);\r\n const radius = getPointDistance({x: fromX, y: fromY}, {x: cornerPointX, y: cornerPointY});\r\n context.moveTo(fromX, fromY);\r\n context.arcTo(\r\n cornerPointX,\r\n cornerPointY,\r\n toX,\r\n toY,\r\n radius\r\n );\r\n\r\n //First arrow\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n //Second arrow\r\n dx = rotateDirectionPoint.x - fromX;\r\n dy = rotateDirectionPoint.y - fromY;\r\n angle = Math.atan2(dy, dx);\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n static renderDoubleCircle(ctx, pointField, radius, lineWidth) {\r\n //outside circle\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = lineWidth;\r\n ctx.stroke();\r\n ctx.fill();\r\n\r\n //inside circle\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius - 3,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = lineWidth;\r\n ctx.fill();\r\n }\r\n\r\n static renderCircle(pointField,\r\n radius = 1,\r\n lineWidth = 1,\r\n strokeStyle = '#000000',\r\n fillStyle = null,\r\n ctx = sqftEventManager.getCtx()\r\n ) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.lineWidth = lineWidth;\r\n ctx.stroke();\r\n if (fillStyle) {\r\n ctx.fillStyle = fillStyle;//'#ffffff';\r\n ctx.fill();\r\n }\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n static renderPolygon = (points,\r\n lineWidth = 2,\r\n strokeStyle = 'rgba(0, 0, 0, 0.5)',\r\n ctx = sqftEventManager.getCtx()\r\n ) => {\r\n const firstPoint = points[0];\r\n ctx.beginPath();\r\n ctx.moveTo(firstPoint.x, firstPoint.y);\r\n for (const point of points) {\r\n ctx.lineTo(point.x, point.y);\r\n }\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static renderPolygonArray = (points,\r\n lineWidth = 2,\r\n strokeStyle = 'rgba(0, 0, 0, 0.5)',\r\n ctx = sqftEventManager.getCtx()\r\n ) => {\r\n const firstPoint = points[0];\r\n ctx.beginPath();\r\n ctx.moveTo(firstPoint[0], firstPoint[1]);\r\n for (const point of points) {\r\n ctx.lineTo(point[0], point[1]);\r\n }\r\n ctx.lineTo(firstPoint[0], firstPoint[1]);\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static drawArrowsAround4points = (ctx, points, offset = 10) => {\r\n points.forEach((point, index) => {\r\n const prevPoint = points[index === 0 ? points.length - 1 : index - 1];\r\n const nextPoint = points[\r\n index === points.length - 1 ? 0 : index + 1\r\n ];\r\n const afterNextPoint = points[\r\n index === points.length - 1\r\n ? 1\r\n : index === points.length - 2\r\n ? 0\r\n : index + 2\r\n ];\r\n const offsetPoint1 = getPointOnTheLine(point, prevPoint, offset);\r\n const offsetPoint2 = getPointOnTheLine(nextPoint, afterNextPoint, offset);\r\n const [midPoint, midPoint2] = getParallelPoints(point, nextPoint, - offset);\r\n\r\n ctx.beginPath();\r\n RenderFigures.drawArrow( ctx,\r\n offsetPoint1.x,\r\n offsetPoint1.y,\r\n offsetPoint2.x,\r\n offsetPoint2.y,\r\n );\r\n RenderFigures.drawArrow( ctx,\r\n midPoint.x,\r\n midPoint.y,\r\n midPoint2.x,\r\n midPoint2.y,\r\n );\r\n ctx.lineWidth = 1;\r\n ctx.stroke();\r\n ctx.closePath();\r\n });\r\n };\r\n\r\n static drawArrowsAroundPoints = (ctx, points, offset = 10, minArrowLength = 2) => {\r\n points.forEach((point, index) => {\r\n const nextPoint = points[\r\n index === points.length - 1 ? 0 : index + 1\r\n ];\r\n const pointDistance = getPointDistance(point, nextPoint);\r\n const scale = workspace.getScale();\r\n\r\n if (pointDistance / scale > minArrowLength) {\r\n const [midPoint, midPoint2] = getParallelPoints(point, nextPoint, - offset);\r\n ctx.beginPath();\r\n RenderFigures.drawArrow( ctx,\r\n midPoint.x,\r\n midPoint.y,\r\n midPoint2.x,\r\n midPoint2.y,\r\n );\r\n ctx.lineWidth = 1;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n });\r\n };\r\n\r\n static renderHandle = (ctx, midPoint) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.fillStyle = 'white';\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.arc(midPoint.x, midPoint.y, 10, 0, 2 * Math.PI, false);\r\n ctx.fill();\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(midPoint.x, midPoint.y);\r\n ctx.lineTo(midPoint.x + 5 , midPoint.y);\r\n ctx.lineTo(midPoint.x + 5 , midPoint.y + 3);\r\n\r\n ctx.moveTo(midPoint.x, midPoint.y);\r\n ctx.lineTo(midPoint.x - 5 , midPoint.y);\r\n ctx.lineTo(midPoint.x - 5 , midPoint.y + 3);\r\n ctx.stroke();\r\n\r\n ctx.restore();\r\n }\r\n\r\n /**\r\n * Draws a sink\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * to specify different radii for corners\r\n */\r\n static sink(ctx, x, y, width, height) {\r\n // Proportions of the original SVG\r\n const originalWidth = 340;\r\n const originalHeight = 463;\r\n const innerRectWidth = 284;\r\n const innerRectHeight = 410;\r\n const innerRectX = 29;\r\n const innerRectY = 29;\r\n const circleRadiusBig = 29;\r\n const circleRadiusSmall = 20.7142857;\r\n const circleCenterX = 142 + circleRadiusBig;\r\n const circleCenterY = 203 + circleRadiusBig;\r\n\r\n // Scaling proportions\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n const lineWidth = 1;\r\n const lineColor = COLOR_THEMES[sqftConfig.activeTheme].primary; //\"#4A90E2\";\r\n ctx.lineWidth = lineWidth * scaleX;\r\n ctx.strokeStyle = lineColor;\r\n\r\n // Fill the background with white\r\n ctx.fillStyle = \"#FFFFFF\";\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Drawing the outer rectangle\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Drawing the inner rectangle\r\n const innerX = x + innerRectX * scaleX;\r\n const innerY = y + innerRectY * scaleY;\r\n const innerW = innerRectWidth * scaleX;\r\n const innerH = innerRectHeight * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerY, innerW, innerH);\r\n ctx.stroke();\r\n\r\n // Drawing the circles\r\n const centerX = x + circleCenterX * scaleX;\r\n const centerY = y + circleCenterY * scaleY;\r\n const radiusBig = circleRadiusBig * scaleX;\r\n const radiusSmall = circleRadiusSmall * scaleX;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerX, centerY, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerX, centerY, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n }\r\n\r\n /**\r\n * Draws a doubleSink\r\n * @param {CanvasRenderingContext2D} ctx\r\n * @param {Number} x The top left x coordinate\r\n * @param {Number} y The top left y coordinate\r\n * @param {Number} width The width of the rectangle\r\n * @param {Number} height The height of the rectangle\r\n * to specify different radii for corners\r\n */\r\n static doubleSink(ctx, x, y, width, height) {\r\n // Proportions of the original doubleSink SVG\r\n const originalWidth = 341;\r\n const originalHeight = 511;\r\n const innerRectWidthTop = 282;\r\n const innerRectHeightTop = 153;\r\n const innerRectWidthBottom = 283;\r\n const innerRectHeightBottom = 285;\r\n const innerRectX = 29;\r\n const innerRectYTop = 26;\r\n const innerRectYBottom = 192;\r\n const circleRadiusBig = 29;\r\n const circleRadiusSmall = 20.7142857;\r\n const circleCenterX = 149; // Adjusted for double sink\r\n const circleCenterYTop = 103; // Top circle center\r\n const circleCenterYBottom = 335; // Bottom circle center\r\n\r\n // Scaling proportions based on provided width and height\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n // Line thickness and color for doubleSink\r\n const lineWidth = 1.54 * scaleX; // Adjusted line width\r\n const lineColor = \"#4A90E2\";\r\n\r\n // Fill the background with white\r\n ctx.fillStyle = \"#FFFFFF\";\r\n ctx.fillRect(x, y, width, height);\r\n\r\n // Draw the outer rectangle\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = lineColor;\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.stroke();\r\n\r\n // Draw the top inner rectangle\r\n const innerX = x + innerRectX * scaleX;\r\n const innerYTop = y + innerRectYTop * scaleY;\r\n const innerWTop = innerRectWidthTop * scaleX;\r\n const innerHTop = innerRectHeightTop * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerYTop, innerWTop, innerHTop);\r\n ctx.stroke();\r\n\r\n // Draw the bottom inner rectangle\r\n const innerYBottom = y + innerRectYBottom * scaleY;\r\n const innerWBottom = innerRectWidthBottom * scaleX;\r\n const innerHBottom = innerRectHeightBottom * scaleY;\r\n ctx.beginPath();\r\n ctx.rect(innerX, innerYBottom, innerWBottom, innerHBottom);\r\n ctx.stroke();\r\n\r\n // Draw top circles\r\n const centerXTop = x + circleCenterX * scaleX;\r\n const centerYTop = y + circleCenterYTop * scaleY;\r\n const radiusBig = circleRadiusBig * scaleX;\r\n const radiusSmall = circleRadiusSmall * scaleX;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYTop, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYTop, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n // Draw bottom circles\r\n const centerYBottom = y + circleCenterYBottom * scaleY;\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYBottom, radiusBig, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(centerXTop, centerYBottom, radiusSmall, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n }\r\n\r\n // Function to draw the background pattern\r\n static drawBackgroundWhite(ctx, startPoint, width, height) {\r\n ctx.fillStyle = \"white\";\r\n ctx.fillRect(startPoint.x, startPoint.y, width, height);\r\n }\r\n\r\n // Function to draw the border pattern\r\n static drawBorder(ctx, startPoint, width, height) {\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"#4A90E2\";\r\n ctx.strokeRect(startPoint.x, startPoint.y, width, height);\r\n }\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {showerThumbnail} from '../../../bvComponent/core/assets';\r\n\r\n// import store from \"../../../../store\";\r\n\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\n\r\nimport ShowerFixture from \"../subparts/shower/showerFixture\";\r\nimport ShowerScreen from \"../subparts/shower/showerScreen\";\r\nimport ShowerGlass from \"../subparts/shower/showerGlass\";\r\n// import ShowerOverlay from \"../subparts/shower/showerOverlay\";\r\nimport ShowerBody from \"../subparts/shower/showerBody\";\r\nimport ShowerWall from \"../subparts/shower/showerWall\";\r\nimport ShowerWallAccent from \"../subparts/shower/showerWallAccent\";\r\nimport ShowerDoor from \"../subparts/shower/showerDoor\";\r\nimport ShowerPanCombo from \"../subparts/shower/showerPanCombo\";\r\nimport ShowerDoorHandle from \"../subparts/shower/showerDoorHandle\";\r\nimport PonyWallCap from \"../subparts/shower/ponyWallCap\";\r\nimport PonyWallGlass from \"../subparts/shower/ponyWallGlass\";\r\nimport ShowerFloor from \"../subparts/shower/showerFloor\";\r\nimport Threshold from \"../subparts/shower/threshold\";\r\nimport ShowerDrain from \"../subparts/shower/showerDrain\";\r\nimport ShowerHead from \"../subparts/shower/showerHead\";\r\nimport ShowerArm from \"../subparts/shower/showerArm\";\r\nimport ShowerHeadBundle from \"../subparts/shower/showerHeadBundle\";\r\nimport TubSpout from \"../subparts/shower/tubSpout\";\r\nimport HandShowerKit from \"../subparts/shower/handShowerKit\";\r\n\r\nimport {ShowerHeadTypes, ShowerHandTypes} from \"../constants\";\r\nimport ShowerCurb from \"../subparts/shower/showerCurb\";\r\nimport BodySpray from \"../subparts/showerNew/bodySpray\";\r\nimport DiverterTrim from \"../subparts/showerNew/diverterTrim\";\r\nimport HandShowerHolder from \"../subparts/showerNew/handShowerHolder\";\r\nimport HandShowerOnly from \"../subparts/showerNew/handShowerOnly\";\r\nimport ShowerHose from \"../subparts/showerNew/showerHose\";\r\nimport ShowerSystem from \"../subparts/showerNew/showerSystem\";\r\nimport ShowerTrimKit from \"../subparts/showerNew/showerTrimKit\";\r\nimport ValveTrim from \"../subparts/showerNew/valveTrim\";\r\nimport WallUnion from \"../subparts/showerNew/wallUnion\";\r\n\r\nexport class Shower extends Part {\r\n static id = 'Shower';\r\n\r\n static Type = {\r\n Custom: 'Custom',\r\n Complete: 'Complete',\r\n Combo: 'Combo',\r\n All: 'All'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerThumbnail;\r\n this.partName = 'Shower';\r\n this.translateId = \"visualizer.bathroom.shower\";\r\n this.relatedItems = [];\r\n this.activeSubType_ = Shower.Type.Custom;\r\n\r\n this.customBodyType = 1; // Door\r\n\r\n this.showerBody = null;\r\n this.showerScreen = null;\r\n this.showerGlass = null;\r\n this.showerWall = null;\r\n this.showerWallAccent = null;\r\n\r\n // old\r\n this.showerFloor = null;\r\n this.showerOverlay = null;\r\n // old\r\n\r\n this.showerPanCombo = null;\r\n this.threshold = null;\r\n this.showerFixture = null;\r\n this.showerBodySelectedByUser = false;\r\n this.showerDoor = null;\r\n this.showerDoorHandle = null;\r\n\r\n this.ponyWallCap = null;\r\n this.ponyWallGlass = null;\r\n this.showerHead = null;\r\n this.showerArm = null;\r\n this.showerHeadBundle = null;\r\n this.handShowerKit = null;\r\n this.tubSpout = null;\r\n this.bodySpray = null;\r\n this.diverterTrim = null;\r\n this.handShowerHolder = null;\r\n this.handShowerOnly = null;\r\n this.showerHose = null;\r\n this.showerSystem = null;\r\n this.showerTrimKit = null;\r\n this.valveTrim = null;\r\n this.wallUnion = null;\r\n\r\n this.showerBody = new ShowerBody(true);\r\n this.showerBody.getParent = () => this;\r\n this.showerBody.type = Shower.Type.All;\r\n this.showerBody.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.push(this.showerBody);\r\n\r\n this.showerFloorIsActive = false;\r\n this.shower_head_type = ShowerHeadTypes.shower_fixture;\r\n this.shower_hand_type = ShowerHandTypes.hand_shower_holder;\r\n this.relatedGroupNames = [\"Shower Pan\", \"Shower Wall\", \"Shower Wall Accent\", \"Shower Door\", \"Shower Door Handle\",\r\n \"ShowerPan\", \"ShowerFloor\", \"Shower Fixture\", \"Shower Drain\", \"Shower Head\", \"Shower Arm\", \"Shower Head Bundle\",\r\n \"Pony Wall Cap\", \"Pony Wall Glass\", \"Shower Screen\", \"Shower Glass\", \"Shower Body\", \"Tub Spout\", \"Hand Shower Kit\",\r\n \"Shower Curb\", \"Body Spray\", \"Diverter Trim\", \"Hand Shower Holder\", \"Hand Shower Only\", \"Shower Hose\",\r\n \"Shower System\", \"Shower Trim Kit\", \"Valve Trim\", \"Wall Union\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n relatedItemType = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Shower Pan\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Pans\":\r\n relatedItemName = \"showerPanCombo\";\r\n RelatedItemClass = ShowerPanCombo;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall\":\r\n case \"Shower Walls\":\r\n case \"ShowerInteriorWall\": // OLD\r\n relatedItemName = \"showerWall\";\r\n RelatedItemClass = ShowerWall;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Wall Accent\":\r\n relatedItemName = \"showerWallAccent\";\r\n RelatedItemClass = ShowerWallAccent;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door\":\r\n case \"Shower_Door\":\r\n relatedItemName = \"showerDoor\";\r\n RelatedItemClass = ShowerDoor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Door Handle\":\r\n relatedItemName = \"showerDoorHandle\";\r\n RelatedItemClass = ShowerDoorHandle;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerPan\":\r\n relatedItemName = \"threshold\";\r\n RelatedItemClass = Threshold;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"ShowerFloor\":\r\n case \"Shower Floor\":\r\n relatedItemName = \"showerFloor\";\r\n RelatedItemClass = ShowerFloor;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Fixture\":\r\n relatedItemName = \"showerFixture\";\r\n RelatedItemClass = ShowerFixture;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Drain\":\r\n relatedItemName = \"showerDrain\";\r\n RelatedItemClass = ShowerDrain;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Head\":\r\n relatedItemName = \"showerHead\";\r\n RelatedItemClass = ShowerHead;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Arm\":\r\n relatedItemName = \"showerArm\";\r\n RelatedItemClass = ShowerArm;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Head Bundle\":\r\n relatedItemName = \"showerHeadBundle\";\r\n RelatedItemClass = ShowerHeadBundle;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Cap\":\r\n relatedItemName = \"ponyWallCap\";\r\n RelatedItemClass = PonyWallCap;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Pony Wall Glass\":\r\n relatedItemName = \"ponyWallGlass\";\r\n RelatedItemClass = PonyWallGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Screen\":\r\n relatedItemName = \"showerScreen\";\r\n RelatedItemClass = ShowerScreen;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n case \"Shower Glass\":\r\n if (!this.showerBody) {\r\n this.showerBody = new ShowerBody(true);\r\n this.relatedItems.push(this.showerBody);\r\n }\r\n relatedItemName = \"showerGlass\";\r\n RelatedItemClass = ShowerGlass;\r\n relatedItemType = Shower.Type.All;\r\n break;\r\n // case \"Shower Overlay\":\r\n // relatedItemName = \"showerOverlay\";\r\n // RelatedItemClass = ShowerOverlay;\r\n // relatedItemType = Shower.Type.Custom;\r\n // break;\r\n case \"Shower Body\":\r\n relatedItemName = \"showerBody\";\r\n RelatedItemClass = ShowerBody;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Tub Spout\":\r\n relatedItemName = \"tubSpout\";\r\n RelatedItemClass = TubSpout;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Kit\":\r\n relatedItemName = \"handShowerKit\";\r\n RelatedItemClass = HandShowerKit;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Curb\":\r\n relatedItemName = \"showerCurb\";\r\n RelatedItemClass = ShowerCurb;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Body Spray\":\r\n relatedItemName = \"bodySpray\";\r\n RelatedItemClass = BodySpray;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Diverter Trim\":\r\n case \"Diverter Only Trim\":\r\n relatedItemName = \"diverterTrim\";\r\n RelatedItemClass = DiverterTrim;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Holder\":\r\n relatedItemName = \"handShowerHolder\";\r\n RelatedItemClass = HandShowerHolder;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Hand Shower Only\":\r\n relatedItemName = \"handShowerOnly\";\r\n RelatedItemClass = HandShowerOnly;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Hose\":\r\n relatedItemName = \"showerHose\";\r\n RelatedItemClass = ShowerHose;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower System\":\r\n relatedItemName = \"showerSystem\";\r\n RelatedItemClass = ShowerSystem;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Shower Trim Kit\":\r\n relatedItemName = \"showerTrimKit\";\r\n RelatedItemClass = ShowerTrimKit;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Valve Trim\":\r\n relatedItemName = \"valveTrim\";\r\n RelatedItemClass = ValveTrim;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n case \"Wall Union\":\r\n relatedItemName = \"wallUnion\";\r\n RelatedItemClass = WallUnion;\r\n relatedItemType = Shower.Type.Custom;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].type = relatedItemType;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {}\r\n\r\n // setLayers(layout, placeholdersNeeded) {\r\n // let res = [];\r\n // const relatedItems = this.getRelatedItems();\r\n // // console.log('relatedItems', relatedItems);\r\n // relatedItems.forEach(relatedItem => {\r\n // relatedItem.setLayers(layout);\r\n // });\r\n // if (this.showerDoor && !this.showerDoor.activeFeature) { // we need it cause shower door is relying on shPanCombo\r\n // this.showerDoor.setLayers(layout);\r\n // }\r\n // if (this.showerDoorHandle && !this.showerDoorHandle.activeFeature) {\r\n // this.showerDoorHandle.setLayers(layout);\r\n // }\r\n // relatedItems.forEach(relatedItem => {\r\n //\r\n // (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n // ? relatedItem.placeholderFeature.layer.addTo(res)\r\n // : relatedItem.activeFeature && relatedItem.activeFeature.layer ? relatedItem.activeFeature.layer.addTo(res) : null\r\n //\r\n // // NN(relatedItem.activeFeature, (activeFeature) => activeFeature.layer.addTo(res));\r\n //\r\n // if ((relatedItem instanceof ShowerBody || relatedItem instanceof ShowerInteriorWallAccent)\r\n // && relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n // if (relatedItem instanceof ShowerWall && relatedItem.activeFeatureParts && relatedItem.placeholderChanged && relatedItem.activeFeatureParts.length) {\r\n // relatedItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n // activeFeaturePart && !activeFeaturePart.disabled && activeFeaturePart.layer && activeFeaturePart.layer.addTo(res);\r\n // })\r\n // }\r\n //\r\n // });\r\n //\r\n // return res.length ? res : null;\r\n // }\r\n\r\n subTypes() {\r\n return this.showerBody && (this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 0)\r\n && this.showerBody.features.some(showerBodyFeature => showerBodyFeature.type === 1)) ? [\r\n Shower.Type.Custom,\r\n Shower.Type.Complete,\r\n ] : []\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n handleSubTypeClick(subType, handleNavigationItemClick) {\r\n this.activeSubType_ = subType;\r\n this.showerBody.setDefault(); // set default custom shower\r\n if (handleNavigationItemClick) {\r\n handleNavigationItemClick(this.showerBody.navigationSubItems()[0]) // set default custom shower\r\n }\r\n }\r\n\r\n getRelatedItems() {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n if (this.showerTubComboIsActive()) {\r\n return relatedItems\r\n }\r\n return relatedItems.filter((relatedItem) => {\r\n return relatedItem.type === this.activeSubType_ || relatedItem.type === Shower.Type.All\r\n })\r\n }\r\n\r\n subParts() {\r\n // const activeShowerGroup = this.getActiveShowerGroup();\r\n // const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n // if (item.isPonyWallPart) {\r\n // item.visible = ponyWallIsActive\r\n // }\r\n return item.visible\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n // return filter(this.relatedItems, {visible: true}).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n //\r\n // toggleShowerParts(disabled, keepLeftWall) {\r\n // this.getRelatedItems().forEach((relItem) => {\r\n // console.log('relItem', relItem);\r\n // if (\r\n // relItem.partId !== \"shower_wall\"\r\n // && relItem.partId !== \"shower_wall_accent\"\r\n // && relItem.partId !== \"shower_fixture\"\r\n // && relItem.partId !== \"shower_door\"\r\n // && relItem.partId !== \"shower_door_handle\"\r\n // && relItem.partId !== \"pony_wall\"\r\n // && relItem.partId !== \"pony_wall_cap\"\r\n // && relItem.partId !== \"pony_wall_glass\"\r\n // ) {\r\n // relItem.disabled = disabled;\r\n // }\r\n // });\r\n // if (!keepLeftWall) {\r\n // this.layout.parts.Walls.wallExL.disabled = disabled;\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const relatedItems = orderBy(this.relatedItems, 'layerPriority');\r\n relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n /**\r\n * Gets the current shower size from metaValues.\r\n */\r\n showerSize() {\r\n if (this.showerTubComboIsActive()) {\r\n const showerTubCombo = this.getActiveShowerGroup();\r\n if (showerTubCombo) {\r\n const activeRelItem = showerTubCombo.relatedItems.find(featureGroup => featureGroup.partId === showerTubCombo.bottomTub)\r\n || showerTubCombo.replacementTub;\r\n if (activeRelItem && activeRelItem.activeFeature && activeRelItem.activeFeature.metaData[\"ShowerSize\"]) {\r\n return activeRelItem.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n }\r\n return null\r\n }\r\n if (this.showerPanCombo && this.showerPanCombo.activeFeature && this.showerPanCombo.activeFeature.metaData[\"ShowerSize\"]\r\n && this.showerPanCombo.activeFeature.matchesMetaForArrayOfConditions(this.showerPanCombo.getArrayOfConditions())) {\r\n return this.showerPanCombo.activeFeature.metaData[\"ShowerSize\"][0]\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Gets the current shower dimensions from showerBody\r\n */\r\n showerDimensions() {\r\n if (!this.showerBody)\r\n return \"Full\";\r\n return this.showerBody.activeFeature ? this.showerBody.activeFeature.showerDimensions : null;\r\n // \"Full\" : \"Half\";\r\n }\r\n\r\n isComplete() {\r\n if (!this.showerBody) {\r\n return true;\r\n } else if (this.showerTubComboIsActive()) {\r\n return false;\r\n } else {\r\n return this.showerBody.activeFeature\r\n }\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() { // user for taking sizes, etc...\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this;\r\n }\r\n\r\n setShowerHeadType(showerHeadType, fromPartId = \"\") {\r\n this.shower_head_type = showerHeadType;\r\n\r\n let arrayToDisable = [];\r\n let arrayToEnable = [];\r\n switch (showerHeadType) {\r\n case ShowerHeadTypes.shower_head_bundle:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerTrimKit, this.showerSystem];\r\n arrayToEnable = [this.showerHeadBundle];\r\n break;\r\n case ShowerHeadTypes.shower_arm:\r\n switch (fromPartId) {\r\n case \"shower_arm\":\r\n case \"shower_head\":\r\n arrayToEnable = [this.showerArm, this.showerHead, this.valveTrim];\r\n break;\r\n case \"shower_hose\":\r\n case \"wall_union\":\r\n case \"hand_shower_only\":\r\n case \"hand_shower_holder\":\r\n arrayToEnable = [this.handShowerHolder, this.handShowerOnly, this.wallUnion, this.showerHose];\r\n break;\r\n default:\r\n arrayToEnable = [this.showerArm, this.showerHead, this.wallUnion];\r\n break;\r\n }\r\n arrayToDisable = [this.showerHeadBundle, this.showerFixture, this.showerTrimKit, this.showerSystem];\r\n break;\r\n case ShowerHeadTypes.shower_trim_kit:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerHeadBundle, this.showerSystem, this.wallUnion];\r\n arrayToEnable = [this.valveTrim, this.showerTrimKit];\r\n break;\r\n case ShowerHeadTypes.shower_system:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerFixture, this.showerHeadBundle, this.showerTrimKit, this.wallUnion];\r\n arrayToEnable = [this.showerSystem];\r\n break;\r\n case ShowerHeadTypes.shower_fixture:\r\n arrayToDisable = [this.showerArm, this.showerHead, this.showerHeadBundle, this.showerTrimKit, this.wallUnion, this.showerHose, this.handShowerOnly, this.handShowerHolder];\r\n arrayToEnable = [this.showerFixture];\r\n break;\r\n default:\r\n break;\r\n }\r\n arrayToDisable.forEach(featureGroup => {\r\n if (featureGroup && !featureGroup.disabled) {\r\n featureGroup.disabled = true;\r\n }\r\n });\r\n arrayToEnable.forEach(featureGroup => {\r\n if (featureGroup && featureGroup.disabled && featureGroup.canBeEnabled()) {\r\n featureGroup.disabled = false;\r\n }\r\n });\r\n\r\n }\r\n\r\n setShowerHandType(showerType) {\r\n this.shower_hand_type = showerType;\r\n\r\n let arrayToDisable = [];\r\n let arrayToEnable = [];\r\n switch (showerType) {\r\n case ShowerHandTypes.hand_shower_kit:\r\n arrayToDisable = [this.handShowerHolder, this.handShowerOnly, this.showerHose];\r\n arrayToEnable = [this.handShowerKit];\r\n break;\r\n case ShowerHandTypes.hand_shower_holder:\r\n arrayToDisable = [this.handShowerKit];\r\n arrayToEnable = [this.handShowerHolder, this.handShowerOnly, this.showerHose];\r\n break;\r\n default:\r\n break;\r\n }\r\n arrayToDisable.forEach(featureGroup => {\r\n if (featureGroup && !featureGroup.disabled) {\r\n featureGroup.disabled = true;\r\n }\r\n });\r\n arrayToEnable.forEach(featureGroup => {\r\n if (featureGroup && featureGroup.disabled && featureGroup.canBeEnabled()) {\r\n featureGroup.disabled = false;\r\n }\r\n });\r\n\r\n }\r\n}\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setGroheFiltersOpened = (filtersOpened = false) => ({\r\n type: types.SET_GROHE_FILTERS_OPENED,\r\n payload: {filtersOpened}\r\n});\r\n\r\nexport const setGroheSimilarFeature = (similarFeature = false) => ({\r\n type: types.SET_GROHE_SIMILAR_FEATURE,\r\n payload: {similarFeature}\r\n});\r\n\r\nexport const setGroheSimilarProductsOpened = (similarProductsOpened = false) => ({\r\n type: types.SET_GROHE_SIMILAR_PRODUCTS_OPENED,\r\n payload: {similarProductsOpened}\r\n});\r\n\r\nexport const setGroheRequiredButNotIncludedFeature = (requiredButNotIncludedFeature= false) => ({\r\n type: types.SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE,\r\n payload: {requiredButNotIncludedFeature}\r\n});\r\n\r\nexport const setGroheFiltersSearchText = (groheFiltersSearchText = \"\") => ({\r\n type: types.SET_GROHE_FILTERS_SEARCH_TEXT,\r\n payload: {groheFiltersSearchText}\r\n});\r\n\r\nexport const setLastOpenedCategory = (lastOpenedCategory = \"\") => ({\r\n type: types.SET_GROHE_LAST_OPENED_CATEGORY,\r\n payload: {lastOpenedCategory}\r\n});\r\n\r\nexport const setGroheSubCategoryOpened = (subCategoryOpened = \"\") => ({\r\n type: types.SET_GROHE_SUB_CATEGORY_OPENED,\r\n payload: {subCategoryOpened}\r\n});\r\n\r\nexport const setShowAddedToTheCartSuccess = (showAddedToTheCartSuccess = \"\") => ({\r\n type: types.SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS,\r\n payload: {showAddedToTheCartSuccess}\r\n});\r\n\r\nexport const setGroheActiveFeatureQuantity = (groheActiveFeatureQuantity = \"\") => ({\r\n type: types.SET_GROHE_ACTIVE_FEATURE_QUANTITY,\r\n payload: {groheActiveFeatureQuantity}\r\n});\r\n\r\nexport const setGroheShareButtonsOpened = (groheShareButtonsOpened = \"\") => ({\r\n type: types.SET_GROHE_SHARE_BUTTONS_OPENED,\r\n payload: {groheShareButtonsOpened}\r\n});\r\n\r\nexport const setGroheSameColorActiveFeature = (groheSameColorActiveFeature = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_ACTIVE_FEATURE,\r\n payload: {groheSameColorActiveFeature}\r\n});\r\n\r\nexport const setGroheSameColorSectionOpened = (groheSameColorSectionOpened = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_SECTION_OPENED,\r\n payload: {groheSameColorSectionOpened}\r\n});\r\n\r\nexport const setGroheSameColorCheckboxApplied = (groheSameColorCheckboxApplied = \"\") => ({\r\n type: types.SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED,\r\n payload: {groheSameColorCheckboxApplied}\r\n});\r\n\r\nexport const setExisingTempId = (exisingTempId = \"\") => ({\r\n type: types.SET_GROHE_EXISTING_TEMP_ID,\r\n payload: {exisingTempId}\r\n});\r\n","import polygonClipping from \"polygon-clipping\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\n// import triangle from \"./layouts/triangle\";\r\nimport Line from \"./line\";\r\nimport pnpoly, {pnpolyArray} from \"../../../../lib/pnpoly\";\r\n//import earcut from \"../../../../lib/earcut\";\r\nimport workspace from \"../workspace\";\r\n//import sqftStore from \"../../store/sqftStore\";\r\nimport sqftStore from \"../workspace\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getAreaByShoelaceFormula,\r\n getEdgeArea, getIntersectCordsBetweenLines, getPointDistance, getPointField,\r\n getSnappedPos,\r\n inchesToLNFT,\r\n mm2ToM2,\r\n orientation,\r\n rotatePoint,\r\n sqInchesToMM2,\r\n sqInchesToSqFoot\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {getAngle, getRotationCentrePoint} from \"./rotation\";\r\nimport ShapeHelper, {\r\n getAngleBetween3Points,\r\n getPointDirection\r\n} from \"../../../../helpers/shapeHelper\";\r\nimport $ from \"jquery\";\r\nimport clone from \"lodash/clone\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n FEATURE_QUANTITY_UNITS,\r\n SHAPE_PART_ID, SHAPE_PART_IDS_USING_SAME_COLOR,\r\n SIDEBAR_SLAB_SEAM_BUTTONS, WORKSPACE_RESOURCES,\r\n} from \"../../../../constants\";\r\nimport ShapeSlab from \"./shapeParts/shapeSlab\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport ShapeEditable from \"./shapeParts/shapeEditable\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport ShapeCabinet from \"./shapeParts/shapeCabinet\";\r\nimport ShapeAbsolute from \"./shapeParts/shapeAbsolute\";\r\nimport ShapeSpacer from \"./shapeParts/shapeSpacer\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport {\r\n getFeatureNameById,\r\n shouldChangeCabinetShapePartId\r\n} from \"../../../../helpers/featureHelper\";\r\nimport {\r\n addShapeIdWithMissingFeature,\r\n setShouldShowChangeShapeFeatureMissingMessage,\r\n} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport ShapeIntersections from \"./shapeParts/shapeIntersections\";\r\nimport ShapeMemory from \"./shapeParts/shapeMemory\";\r\nimport ShapeRender from \"./shapeParts/shapeRender\";\r\nimport {SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE} from \"../../../../constantsFeature\";\r\nimport CabinetSwitchers from \"../../../../../kvComponent/navigation/cabinetSwitchers\";\r\nimport ShapeAutoShuffle from \"./shapeParts/shapeAutoShuffle\";\r\nimport {getLinesWithoutAnglePoints} from \"../../helpers/lineHelper\";\r\nimport {SHAPE_DIAMOND_LAYOUTS} from \"../cabinet/cabinetShapes\";\r\nimport {getCabinetSimilarFeatureFromAnotherColor} from \"../../../../helpers/sqft3dArHelper\";\r\nimport {calculatePolygonClippingPolygonArea} from \"../../../../helpers/coordinatesHelper\";\r\n\r\nexport default function(id, totalShapeCount, shapeType, partId, fromLayout, shapeParams = {}) {\r\n //private variables\r\n let self = this,\r\n shape = null,\r\n // debugLineColor = \"rgba(0,255,0,0.3)\",\r\n // debugPointColor = \"rgba(0,0,255,0.3)\",\r\n // fillColor = \"rgba(255,255,255,0)\",\r\n minAngle = -90,\r\n maxAngle = 90,\r\n marginFromShape = SqftStore.isSlabMode() || isSFTCabinetsGroup() ? 0 : 30,\r\n state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n handlerHold: null,\r\n isPointsMovable: false,\r\n isRotatable: false,//true //todo enable on menu click\r\n };\r\n this.design = {\r\n hoverShapeColor: \"rgba(159,197,34,0.47)\",\r\n redHoverShapeColor: \"rgba(208,1,27,0.5)\",\r\n fillColor: \"rgba(74,144,226,0.17)\",\r\n }\r\n this.layout270 = [\"SN\", \"SPN\", \"SNI\", \"SPNI\"];\r\n this.shapeParams = shapeParams; //{shapeCabinet: boolean, canSnap: boolean, isSpacer: boolean}\r\n //public properties\r\n this.pos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.slabPos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.staticCenterPoint = null;\r\n this.testShapeLines = null;\r\n this.linesWithoutAngle = null;\r\n this.shapeSlab = new ShapeSlab(this);\r\n this.shapeCabinet = shapeParams.shapeCabinet ? new ShapeCabinet(this) : null;\r\n //this.shapeAbsolute = shapeParams.canSnap ? new ShapeAbsolute(this) : null;\r\n this.shapeAbsolute = new ShapeAbsolute(this);\r\n this.shapeSpacer = shapeParams.isSpacer ? new ShapeSpacer(this) : null;\r\n this.shapeEditable = new ShapeEditable(this);\r\n this.shapeIntersections = new ShapeIntersections(this);\r\n this.shapeAutoShuffle = new ShapeAutoShuffle(this);\r\n this.shapeMemory = new ShapeMemory(this);\r\n this.shapeRender = new ShapeRender(this);\r\n this.shapeRotatable = null; //new ShapeRotatable(this, fillColor);\r\n this.colorSet = null; //new ColorSet\r\n this.shapePieces = []; // seam parts shape ids (see seam tool)\r\n this.seamCutPoints = [];\r\n this.shapeParent = null;\r\n this.slabModeCoreParentId = null; // shape id (additional backsplash shape parent shape id in the slab mode. See SlabAdditionalShapes)\r\n this.id = id;\r\n this.featureId = null;\r\n this.featureName = null;\r\n this.relatedParentFeatureId = null;\r\n this.shapeType = shapeType;\r\n this.isContextMenuActive = false;\r\n this.labelsMenu = null;\r\n this.partId = partId;\r\n this.parentPartId = null; // this is shape part id that shape was created from. Used for spacer shapes\r\n this.slabParentPartId = null; // this is the shape partId that is hovered the slab. Used for slabs. Or shape part id that shape was created from in the slab mode.\r\n this.qtCatName = null;\r\n this.fromLayout = fromLayout; // layout abbreviation (S, LNI, etc.) is needed to know if to show popup\r\n this.rotatedDegrees = 0;\r\n this.rotatedDegreesSlab = 0;\r\n this.isHidden = false;\r\n this.isPointsMoved = false; // true if any shape points was moved\r\n this.isPointsChanged = true; // used to trigger update points position for the slabMode\r\n this.isPositionChanged = true; // used to trigger update slabPosition for the slabMode\r\n this.isResetSlabModePopupWasDisplayed = false; //used to display reset popup window if shape has pieces\r\n this.Direction = {\r\n RIGHT: 0,\r\n LEFT: 1\r\n };\r\n this.FlipDirection = {\r\n HORIZONTAL: 0,\r\n VERTICAL: 1\r\n };\r\n this.rotateAngleParts = getAngleRotatedParts(shapeType);\r\n this.isDisabledInPopup = false;\r\n this.slabModeWaterfallSegmentId = null;\r\n this.shouldUseSlabPricing = false;\r\n this.originalPointsCoords = false;\r\n\r\n this.getState = () => { return state };\r\n this.getFillColor = () => { return this.design.fillColor };\r\n this.getDesign = () => { return this.design };\r\n this.getColorset = () => { return this.colorSet };\r\n this.getIsPointsMovable = () => { return state.isPointsMovable };\r\n this.setType = (type) => { self.type = type };\r\n this.setProperty = (name, value) => { self[name] = value };\r\n this.setId = (id) => { this.id = id };\r\n this.setPartId = (partId) => {self.partId = partId};\r\n this.getFeatureName = () => { return this.featureName};\r\n this.setFeatureId = (featureId) => {\r\n //console.log(\"cur featureId\", this.featureId);\r\n //console.log(\"new featureId\", featureId);\r\n this.featureId = featureId\r\n this.featureName = getFeatureNameById(featureId);\r\n const isShapeUseTheSameFeatureColor = Object.values(SHAPE_PART_IDS_USING_SAME_COLOR).includes(this.partId);\r\n const isSeamPiece = this.partId === SHAPE_PART_ID.seamPiece;\r\n if (isShapeUseTheSameFeatureColor || isSeamPiece) {\r\n this.updateColorSet();\r\n this.updateRelatedShapes();\r\n this.updateSeamShapes();\r\n }\r\n };\r\n this.setSlabParentPartId = (partId) => { this.slabParentPartId = partId }; // here we will assign shape part id that is hovered the slab\r\n this.setSlabModeCoreParentPartId = (partId) => { this.slabParentPartId = partId }; // here we will assign core shape part id\r\n this.setSlabModeCoreParentId = (id) => { this.slabModeCoreParentId = id };\r\n this.setSlabModeWaterfallSegmentId = (id) => {this.slabModeWaterfallSegmentId = id};\r\n this.setColorSet = (colorSet) => {this.colorSet = colorSet};\r\n this.getColorSet = () => { return this.colorSet};\r\n this.updateColorSet = () => {\r\n this.colorSet = workspaceControllers[WORKSPACE_RESOURCES.shapeColors]\r\n .getOrGenerateNewShapeColorByFeatureId(this.featureId);\r\n };\r\n this.updateRelatedShapes = () => {\r\n const relatedShapes = workspace.getShapesBySlabModeCoreParentId([this.id]);\r\n for (const relatedShape of relatedShapes) {\r\n relatedShape.setFeatureId(this.featureId);\r\n relatedShape.setColorSet(this.colorSet);\r\n }\r\n };\r\n this.updateSeamShapes = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.setFeatureId(this.featureId);\r\n shapePiece.setColorSet(this.colorSet);\r\n });\r\n };\r\n this.updateSeamedShapesPosition = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.setPositionWithoutChange(this.pos);\r\n });\r\n };\r\n this.setQtCatName = (qtCatName) => {this.qtCatName = qtCatName};\r\n this.setIsPointsChanged = (isPointsChanged) => {this.isPointsChanged = isPointsChanged};\r\n this.addCrownMolding = () => {\r\n this.shapeCabinet ? this.shapeCabinet.addCrownMolding() : null;\r\n }\r\n this.setQtCatName = (qtCatName) => { this.qtCatName = qtCatName };\r\n this.getIsRotatable = () => { return state.isRotatable };\r\n this.setIsRotatable = (isRotatable) => { state.isRotatable = isRotatable };\r\n this.setIsPointsMovable = (isPointsMovable) => { state.isPointsMovable = isPointsMovable };\r\n this.setSlabPricing = (value) => { this.shouldUseSlabPricing = value };\r\n\r\n /**\r\n * this will return size for square and rectangles in INCHES\r\n * todo maybe we need to change this and return values in mmm and inches\r\n * @return {{width: *, height: *}}\r\n */\r\n this.getSize = () => {\r\n return {\r\n width: getPointDistance(shape[0].from, shape[0].to),\r\n height: getPointDistance(shape[1].from, shape[1].to),\r\n }\r\n }\r\n this.resetMouseDown = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n // this.getWidth = () => {\r\n // return this.getSize().width\r\n // }\r\n /**\r\n * @param isFromParams this is static initial value\r\n * @return {*}\r\n */\r\n this.getWidth = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.width\r\n }\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this]);\r\n return getPointDistance(thisShapeMeasurementPoints[0], thisShapeMeasurementPoints[1]);\r\n }\r\n this.getHeight = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.height\r\n }\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this]);\r\n return getPointDistance(thisShapeMeasurementPoints[1], thisShapeMeasurementPoints[2]);\r\n }\r\n this.getDepth = (isFromParams = false) => {\r\n if (isFromParams) {\r\n return this.shapeParams.depth\r\n }\r\n }\r\n\r\n //public events\r\n this.onHover = null;\r\n\r\n //private setters\r\n function getAngleRotatedParts(shapeType) {\r\n switch (shapeType) {\r\n case \"horseshoe\":\r\n return [{ // this is the right part: |‾| <- this one\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 1, // right external side\r\n line2: 3, // right internal side\r\n baseConfiguration: null, // is used for keeping all the configuration after rotateAngle is over\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n isPulsing: true, // user has select angle tool\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"right\" // rotate direction (is used for lines, line text, etc.)\r\n }, { // this is the left part: this one -> |‾|\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 7, // left external side\r\n line2: 5, // left internal side\r\n baseConfiguration: 0, // difference between basePointX and secondaryPointX\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n isPulsing: true, // user has select angle tool\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"left\" // rotate direction (is used for lines, line text, etc.)\r\n }];\r\n case \"wideangle\":\r\n return [{ // this is the top part: |‾ <- this one\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 0, // top external side\r\n line2: 2, // top internal side\r\n baseConfiguration: null, // is used for keeping all the configuration after rotateAngle is over\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"right\" // rotate direction (is used for lines, line text, etc.)\r\n }, { // this is the left part: this one -> |‾\r\n rotatedAngleValue: 0, // angle input value\r\n line1: 5, // left external side\r\n line2: 3, // left internal side\r\n baseConfiguration: 0, // difference between basePointX and secondaryPointX\r\n isHovered: false, // user has mouse over this part\r\n isActive: false, // user has clicked on this part\r\n shapeType, // is needed for onChange, different parts have different point changes\r\n angleDirection: \"left\" // rotate direction (is used for lines, line text, etc.)\r\n }];\r\n default:\r\n return []\r\n }\r\n }\r\n\r\n const setFillColor = (red, green, blue, alpha) => {\r\n this.design.fillColor =\r\n \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha + \")\";\r\n }\r\n\r\n this.setPosition = (value) => {\r\n this.pos = value;\r\n this.isPositionChanged = true;\r\n this.updateSeamedShapesPosition();\r\n }\r\n this.setPositionWithoutChange = (value) => {\r\n this.pos = value;\r\n this.updateSeamedShapesPosition();\r\n // if (this.partId !== SHAPE_PART_ID.backsplashPiece && this.partId !== SHAPE_PART_ID.seamPiece) {\r\n // this.isPositionChanged = true;\r\n // }\r\n }\r\n this.setSlabPosition = (value) => {\r\n this.slabPos = clone(value);\r\n }\r\n function setShape(segments) {\r\n shape = segments; // [line, line, line, line]\r\n for (var i = 0; i < shape.length; i++) {\r\n shape[i].init(self);\r\n }\r\n }\r\n function setHovering(value) { state.hovering = value; return value; }\r\n function setHoveringOnlyShape(value) { state.hoveringOnlyShape = value; return value; }\r\n //public getters\r\n this.getPosition = () => {\r\n const reduxState = store.getState();\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n let pos;\r\n\r\n if (isShowSlabTool) {\r\n let slabAbsolutePos = this.getSlabAbsolutePosition()\r\n pos = slabAbsolutePos ? slabAbsolutePos : this.slabPos;\r\n } else if (this.shapeParams !== undefined && this.shapeParams.canSnap) {\r\n let absolutePos = this.shapeAbsolute.getAbsolutePosition();\r\n pos = absolutePos !== null ? absolutePos : this.pos;\r\n } else {\r\n pos = this.pos\r\n }\r\n\r\n return pos;\r\n };\r\n this.getOffset = () => {\r\n const scale = config.scale;\r\n const workspacePos = workspace.getOffset();\r\n let _pos = this.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = this.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n };\r\n this.getRegularPosition = () => { return this.pos; };\r\n this.getSlabPosition = () => { return this.slabPos; };\r\n this.getSlabAbsolutePosition = () => { return this.shapeSlab.getAbsolutePosition(); };\r\n this.getSnappedPosition = () => { return getSnappedPos(this.getPosition()) };\r\n //todo\r\n this.isHovering = function() {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (!isSlabMode) {\r\n for (const line of this.getLines()) {\r\n if (line.isHovering(isSlabMode)) {\r\n return true\r\n }\r\n }\r\n }\r\n return state.hovering === true;\r\n };\r\n this.isHoveringOnlyShape = function() { return state.hoveringOnlyShape === true; };\r\n this.isWithShapePieces = () => {\r\n return this.shapePieces.length > 0;\r\n };\r\n this.setResetSlabModePopupWasDisplayed = (value) => {\r\n return this.isResetSlabModePopupWasDisplayed = value;\r\n };\r\n this.getResetSlabModePopupWasDisplayed = () => {\r\n return this.isResetSlabModePopupWasDisplayed;\r\n };\r\n this.setShapePieces = (shapePieces) => {\r\n this.shapePieces = shapePieces;\r\n };\r\n this.addShapePieceId = (shapeId) => {\r\n this.shapePieces.push(shapeId);\r\n };\r\n this.hideShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n if (shapePiece) {\r\n shapePiece.deregisterEvents()\r\n } else {\r\n console.error(\"shapePiece with Id not found\", shapePieceId);\r\n }\r\n });\r\n };\r\n this.restoreShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n let shapePiece = workspace.getShapeById(shapePieceId);\r\n shapePiece.reInitEvents();\r\n });\r\n };\r\n this.removeShapePieces = () => {\r\n this.shapePieces.forEach(shapePieceId => {\r\n workspace.removeShapeById(shapePieceId);\r\n });\r\n };\r\n\r\n this.export = () => {\r\n let lines = [];\r\n let totalArea = this.getTotalArea();\r\n let squareFeet = sqftConfig.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea), -2) : mm2ToM2(self.getTotalArea(totalArea));\r\n for (let i = 0; i < shape.length; i++) {\r\n lines.push(shape[i].export());\r\n }\r\n let isHidden = [SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(this.partId);\r\n let isQuantityUnits = FEATURE_QUANTITY_UNITS.includes(this.partId);\r\n\r\n return {\r\n pos: this.pos,\r\n slabPos: this.slabPos,\r\n id: this.id,\r\n featureId: this.featureId,\r\n colorSet: this.colorSet,\r\n type: this.type,\r\n isHidden: isHidden,\r\n shapePieces: this.shapePieces,\r\n seamCutPoints: this.seamCutPoints,\r\n shapeParent: this.shapeParent,\r\n lines: lines,\r\n shapeType: this.shapeType,\r\n rotatedDegrees: this.rotatedDegrees,\r\n rotatedDegreesSlab: this.rotatedDegreesSlab,\r\n partId: this.partId,\r\n qtCatName: this.qtCatName,\r\n fromLayout: this.fromLayout,\r\n squareFeet: isQuantityUnits ? 1 : squareFeet,\r\n isDisabledInPopup: this.isDisabledInPopup,\r\n rotateAngleParts: this.rotateAngleParts,\r\n isPointsChanged: this.isPointsChanged,\r\n isPositionChanged: this.isPositionChanged,\r\n isResetSlabModePopupWasDisplayed: this.isResetSlabModePopupWasDisplayed,\r\n shapeSlab: this.shapeSlab.export(),\r\n shapeCabinet: this.shapeCabinet ? this.shapeCabinet.export() : null,\r\n shapeAbsolute: this.shapeAbsolute ? this.shapeAbsolute.export() : null,\r\n shapeParams: this.shapeParams,\r\n relatedParentFeatureId: this.relatedParentFeatureId,\r\n fromWizardGroupId: this.fromWizardGroupId,\r\n slabModeCoreParentId: this.slabModeCoreParentId,\r\n parentPartId: this.parentPartId,\r\n slabParentPartId: this.slabParentPartId,\r\n shouldUseSlabPricing: this.shouldUseSlabPricing,\r\n originalPointsCoords: this.originalPointsCoords,\r\n };\r\n };\r\n this.import = (value) => {\r\n [\"fromLayout\", \"id\", \"partId\", \"shapeType\", \"rotatedDegrees\", \"rotatedDegreesSlab\", \"rotateAngleParts\", \"fromLayout\",\r\n \"type\", \"isHidden\", \"shapePieces\", \"pos\", \"slabPos\", \"featureId\", \"isDisabledInPopup\", \"isPointsChanged\",\r\n \"isPositionChanged\", \"qtCatName\", \"isResetSlabModePopupWasDisplayed\", \"shapeParams\", \"shapeCabinet\", \"shapeAbsolute\",\r\n \"relatedParentFeatureId\", \"colorSet\", \"fromWizardGroupId\", \"slabModeCoreParentId\", \"seamCutPoints\", \"parentPartId\",\r\n \"slabParentPartId\", \"shouldUseSlabPricing\", \"originalPointsCoords\"]\r\n .forEach(key => {\r\n self[key] = value[key]\r\n });\r\n let lines = [];\r\n for (let i = 0; i < value.lines.length; i++) {\r\n let line = new Line();\r\n line.import(value.lines[i], lines);\r\n lines.push(line);\r\n }\r\n shape = lines;\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].init(self);\r\n }\r\n this.init();\r\n this.shapeSlab.import(value.shapeSlab);\r\n if (value.shapeCabinet) {\r\n this.shapeCabinet = new ShapeCabinet(this);\r\n this.shapeCabinet.import(value.shapeCabinet);\r\n }\r\n if (value.shapeAbsolute) {\r\n this.shapeAbsolute = new ShapeAbsolute(this);\r\n this.shapeAbsolute.import(value.shapeAbsolute);\r\n }\r\n if ([SHAPE_PART_ID.slabPlaceHolder, SHAPE_PART_ID.seamPiece].includes(value.partId)) {\r\n this.deregisterEvents();\r\n }\r\n if (isSFTCabinetsGroup) {\r\n const reduxState = store.getState();\r\n const {sqftFromFeature} = reduxState.sqftState;\r\n if (sqftFromFeature && sqftFromFeature.cartFeature) {\r\n //this.changeFeatureIdIfColorWasChanged(sqftFromFeature.cartFeature);\r\n }\r\n }\r\n if (this.shapeParams.isSpacer) {\r\n this.shapeSpacer = new ShapeSpacer(this);\r\n }\r\n };\r\n this.changeFeatureIdIfColorWasChanged = (newFeature= null) => {\r\n const layout = getCurrentLayout();\r\n const relatedParentFeature = layout.getFeatureById(this.relatedParentFeatureId, true);\r\n const currentShapeFeature = layout.getFeatureById(this.featureId, true);\r\n const shouldChangeShapePartId = shouldChangeCabinetShapePartId(relatedParentFeature, newFeature);\r\n if (shouldChangeShapePartId && newFeature.dbFeature && currentShapeFeature) {\r\n const newParent = CabinetSwitchers.getNeededFeatureFromNavItems(newFeature.dbFeature.sharedFeatureName, relatedParentFeature.getParent())\r\n\r\n if (newParent && newParent.dbFeature) {\r\n const featureRelatedFeatures = newParent.getFeatureRelatedFeatures();\r\n const newShapeDbFeature = getCabinetSimilarFeatureFromAnotherColor(featureRelatedFeatures, currentShapeFeature.dbFeature);\r\n\r\n if (newShapeDbFeature) {\r\n //if (newShapeDbFeature && newShapeDbFeature.sharedFeatureName !== 'SW-WBC3630') { // this line is only for debugging\r\n this.relatedParentFeatureId = newParent.dbFeature.id\r\n this.setFeatureId(newShapeDbFeature.id)\r\n } else {\r\n store.dispatch(addShapeIdWithMissingFeature(this.id));\r\n store.dispatch(setShouldShowChangeShapeFeatureMissingMessage(true));\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n this.getHoverSegment = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isHovering()) {\r\n return shape[i];\r\n }\r\n }\r\n };\r\n this.getHoverSegmentV2 = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].updateLineHovering(sqftEventManager.getMousePos())\r\n if (shape[i].isHovering()) {\r\n return shape[i];\r\n }\r\n }\r\n };\r\n this.getHoverSegmentOutlineCorner = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isAngleHovering()) {\r\n return shape[i].lineCorner;\r\n }\r\n }\r\n };\r\n this.getHoverSegmentCorner = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isCornerLineHovering()) {\r\n return shape[i].lineCorner;\r\n }\r\n }\r\n };\r\n this.getHoverPoint = function() {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].to.isHovering()) {\r\n return shape[i].to;\r\n }\r\n }\r\n };\r\n this.getHoverMiteredPoint = function() {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].isWithMitered()) {\r\n for (let point of shape[i].miteredOverlay.getPoints()) {\r\n if (point.isHovering()) {\r\n return point;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.getHoverLabel = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n if (shape[i].labelOverlay && shape[i].labelOverlay.isHovered()) {\r\n return shape[i].labelOverlay\r\n }\r\n }\r\n };\r\n this.getHoverPointOnClick = function() {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].to.isOverPointField()) {\r\n return shape[i].to;\r\n }\r\n }\r\n };\r\n this.getCenter = () => {\r\n if (!this.staticCenterPoint) {\r\n let points = this.getPoints();\r\n\r\n this.staticCenterPoint = ShapeHelper.getCenterPoint(points);\r\n }\r\n return this.staticCenterPoint;\r\n }\r\n /**\r\n * Note changing this value can break display in slabMode\r\n * @param value\r\n */\r\n this.setCenter = (value) => {\r\n this.staticCenterPoint = value;\r\n }\r\n this.getLines = (shouldIncludeBumpoutLines = false) => {\r\n if (shouldIncludeBumpoutLines) {\r\n const linesWithBumpouts = [];\r\n shape.forEach(line => {\r\n if (line.isWithBumpout()) {\r\n linesWithBumpouts.push(...line.bumpoutOverlay.getBumpoutLines())\r\n } else {\r\n linesWithBumpouts.push(line);\r\n }\r\n });\r\n return linesWithBumpouts\r\n }\r\n\r\n return shape;\r\n };\r\n this.createLinesWithoutAngle = () => {\r\n this.linesWithoutAngle = getLinesWithoutAnglePoints(this.getLines());\r\n return this.linesWithoutAngle\r\n }\r\n this.getLinesWithoutAngle = () => {\r\n return this.linesWithoutAngle\r\n }\r\n this.getLineCorners = function() {\r\n const lineCorners = [];\r\n shape.forEach(line => {\r\n if (line.lineCorner !== undefined)\r\n lineCorners.push(line.lineCorner)\r\n });\r\n return lineCorners\r\n };\r\n this.getPoints = () => {\r\n return this.getLines().map(line => line.from);\r\n };\r\n this.getPointsCoords = () => {\r\n return this.getLines().map(line => { return {\r\n x: Math.round10(line.from.x, -4),\r\n y: Math.round10(line.from.y, -4),\r\n id: line.from.id\r\n }});\r\n };\r\n this.setOriginalPointsCoords = (value) => {\r\n this.originalPointsCoords = value;\r\n };\r\n this.getOriginalPointsCoords = () => {\r\n return this.originalPointsCoords;\r\n };\r\n this.getPointsPosOnWorkspace = (shouldGetRegularPosition = false) => {\r\n return this.getLines().map(line => { return {...line.from.getPointPosOnWorkspace(shouldGetRegularPosition), id: line.from.id}});\r\n };\r\n this.getPointsPointField = () => {\r\n return this.getLines().map(line => { return {...getPointField(line.from.x, line.from.y, this), id: line.from.id}});\r\n };\r\n this.getOriginPointOnWorkspace = () => {\r\n // if (shape.shapeParams && shape.shapeParams.shapeLayout !== SHAPE_LAYOUTS.rectangle) {\r\n // let realShapeDepth = shapeDepth;\r\n // if (shape.shapeParams && SHAPE_SQUARE_LAYOUTS.includes(shape.shapeParams.shapeLayout)) {\r\n // realShapeDepth = shapeWidth;\r\n // }\r\n // zeroPointPosOnWorkspace = CabinetsSet.getShapeCorrectedPos(shape.rotatedDegrees, shapePosition, shapeWidth, realShapeDepth);\r\n // }\r\n\r\n // Here we will return intersection between first and last lines\r\n if (this.shapeParams && SHAPE_DIAMOND_LAYOUTS.includes(this.shapeParams.shapeLayout)) {\r\n const pointsOnWorkspace = this.getPointsPosOnWorkspace();\r\n return getIntersectCordsBetweenLines(pointsOnWorkspace[1], pointsOnWorkspace[0], pointsOnWorkspace[pointsOnWorkspace.length - 2], pointsOnWorkspace[pointsOnWorkspace.length - 1], true ,true);\r\n }\r\n\r\n return this.getPoints()[0].getPointPosOnWorkspace();\r\n }\r\n this.getLineById = function(id) {\r\n return this.getLines().find((line) => line.id === id);\r\n };\r\n this.getTotalArea = () => {\r\n let totalArea,\r\n anglesTotalArea;\r\n\r\n //shape area\r\n totalArea = sqftConfig.measureUnit === \"Imperial\" ? this.getTotalInches() : this.getTotalMillimeters();\r\n //shape corners area\r\n totalArea += sqftConfig.measureUnit === \"Imperial\" ? this.getCornersArea() : sqInchesToMM2(this.getCornersArea());\r\n\r\n //console.log(\"countertop\", totalArea);\r\n //additional bumpout area\r\n totalArea += this.getBumpoutTotalArea();\r\n\r\n //additional angles area\r\n anglesTotalArea = this.getAnglesTotalArea();\r\n totalArea += sqftConfig.measureUnit === \"Imperial\" ? anglesTotalArea : sqInchesToMM2(anglesTotalArea);\r\n\r\n //additional edges waterfall area\r\n totalArea += this.getEdgesAdditionalArea();\r\n //console.log(\"edges\", this.getEdgesAdditionalArea());\r\n //additional edges waterfall area\r\n totalArea += this.getWaterfallToolAdditionalArea();\r\n\r\n //additional mitered area\r\n totalArea += this.getMiteredTotalArea();\r\n\r\n //console.log(\"mitered\", this.getMiteredTotalArea());\r\n //console.log(\"total\", totalArea);\r\n\r\n return totalArea;\r\n };\r\n\r\n this.getCornersArea = () => {\r\n const points = this.getPoints();\r\n let cornersAdditionalArea = 0;\r\n\r\n function getRectangle(basePoint1, basePoint2, width) {\r\n const direction = {\r\n x: basePoint2.x - basePoint1.x,\r\n y: basePoint2.y - basePoint1.y,\r\n };\r\n\r\n const length = Math.sqrt(direction.x ** 2 + direction.y ** 2);\r\n const norm = {\r\n x: -direction.y / length,\r\n y: direction.x / length,\r\n };\r\n\r\n const rect = [\r\n [basePoint1.x + norm.x * width / 2, basePoint1.y + norm.y * width / 2],\r\n [basePoint1.x - norm.x * width / 2, basePoint1.y - norm.y * width / 2],\r\n [basePoint2.x - norm.x * width / 2, basePoint2.y - norm.y * width / 2],\r\n [basePoint2.x + norm.x * width / 2, basePoint2.y + norm.y * width / 2],\r\n [basePoint1.x + norm.x * width / 2, basePoint1.y + norm.y * width / 2],\r\n ];\r\n\r\n return [rect];\r\n }\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n const prev = points[(i - 1 + points.length) % points.length];\r\n const current = points[i];\r\n const next = points[(i + 1) % points.length];\r\n\r\n const angle = getAngleBetween3Points(prev, current, next); // Угол между точками\r\n //const distancePrev = getPointDistance(prev, current); // Длина стороны (base)\r\n //const distanceNext = getPointDistance(current, next); // Длина другой стороны\r\n\r\n if (Math.round(angle) !== 0 && (Math.round(angle) > 92 || Math.round(angle) < 88)) {\r\n const RECT_WIDTH = 52; //todo get shape width\r\n //console.log(\"distancePrev\", distancePrev);\r\n //console.log(\"distanceNext\", distanceNext);\r\n const rect1 = getRectangle(prev, current, RECT_WIDTH);\r\n const rect2 = getRectangle(current, next, RECT_WIDTH);\r\n\r\n const intersection = polygonClipping.intersection([rect1], [rect2]);\r\n\r\n if (intersection && intersection.length > 0) {\r\n let totalArea = 0;\r\n intersection.forEach((polygon) => {\r\n totalArea += calculatePolygonClippingPolygonArea(polygon);\r\n });\r\n\r\n cornersAdditionalArea += totalArea;\r\n console.log(\"Area of intersection:\", totalArea);\r\n } else {\r\n console.log(\"No intersection found\");\r\n }\r\n }\r\n }\r\n\r\n return cornersAdditionalArea;\r\n };\r\n\r\n this.getTotalLnft = function() {\r\n return Math.ceil(inchesToLNFT(this.getTotalArea())) ;\r\n };\r\n\r\n this.getAttachedEdges = function() {\r\n const reduxState = store.getState();\r\n return reduxState.sqftResourceState.attachedToLine.filter(attachedToLine => {\r\n return shape.some(line => attachedToLine.attachedToId === line.id)\r\n });\r\n };\r\n\r\n this.getWaterfallToolAdditionalArea = () => {\r\n let totalArea = 0;\r\n const lines = this.getLines();\r\n lines.forEach(line => {\r\n if (line.isWithWaterfallToolEdge && (line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge())) {\r\n const waterfallOverlay = workspaceControllers.waterfall.getResourceByLineId(line.id);\r\n if (waterfallOverlay) {\r\n totalArea += waterfallOverlay.getArea();\r\n }\r\n }\r\n });\r\n\r\n return totalArea\r\n }\r\n\r\n this.getEdgesAdditionalArea = () => {\r\n let totalArea = 0;\r\n //let edges = sqftStore.getShapeType('edge');\r\n const edges = this.getAttachedEdges();\r\n edges.forEach(edge => {\r\n const line = workspace.getLineById(edge.attachedToId);\r\n const lineLength = config.measureUnit === \"Imperial\" ? line.getLineLength() : line.getLineLengthMm();\r\n totalArea += getEdgeArea(line, lineLength, edge.featureId);\r\n });\r\n\r\n return totalArea;\r\n };\r\n\r\n this.getAnglesTotalArea = () => {\r\n let totalArea = 0;\r\n let innerPoints = ShapeHelper.getInnerCornerPoints(this);\r\n innerPoints.forEach(point => {\r\n if (point.angle) {\r\n totalArea += (point.angle * point.angle / 2) * 2\r\n } else if (point.arcLength) {\r\n totalArea += (point.arcLength * point.arcLength / 2) * 2\r\n }\r\n });\r\n\r\n return totalArea\r\n };\r\n\r\n this.getBumpoutTotalArea = () => {\r\n let area = 0;\r\n shape.forEach((line) => {\r\n if (line.isWithBumpout() && line.bumpoutOverlay) {\r\n area += config.measureUnit === \"Imperial\"\r\n ? line.bumpoutOverlay.getBumpoutTotalArea().inches\r\n : line.bumpoutOverlay.getBumpoutTotalArea().millimeters;\r\n }\r\n });\r\n\r\n return area\r\n };\r\n\r\n this.getMiteredTotalArea = () => {\r\n let totalArea = 0;\r\n shape.forEach(line => {\r\n if (line.isWithMitered() && line.miteredOverlay) {\r\n totalArea += line.miteredOverlay.getMiteredTotalArea();\r\n }\r\n });\r\n\r\n return totalArea\r\n };\r\n\r\n this.getTotalInches = function() {\r\n var inchesCount = 0;\r\n // square1 = 0,\r\n // square2 = 0,\r\n // square3 = 0;\r\n // console.log('self.shapeType', self.shapeType);\r\n // console.log('shape', shape);\r\n // todo remove ifs\r\n if (self.shapeType === 'square') {\r\n // inchesCount = ((this.rotatedDegrees === 90) || (this.rotatedDegrees === 270))\r\n // ? shape[1].getLineLength() * shape[2].getLineLength()\r\n // : shape[0].getLineLength() * shape[1].getLineLength();\r\n\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else if (self.shapeType === 'wideangle') {\r\n // square1 = (shape[0].getLineLength() - shape[4].getLineLength()) * shape[1].getLineLength();\r\n // square2 = shape[4].getLineLength() * shape[5].getLineLength();\r\n // inchesCount = square1 + square2\r\n\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else if (self.shapeType === 'horseshoe') {\r\n // square1 = shape[4].getLineLength() * (shape[7].getLineLength() - shape[5].getLineLength());\r\n // square2 = shape[2].getLineLength() * shape[1].getLineLength();\r\n // square3 = shape[6].getLineLength() * shape[7].getLineLength();\r\n // inchesCount = square1 + square2 + square3\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n } else {\r\n inchesCount = this.getAreaByShoelaceFormula();\r\n }\r\n\r\n return inchesCount;\r\n };\r\n\r\n this.getAreaByShoelaceFormula = function () {\r\n return getAreaByShoelaceFormula(shape);\r\n };\r\n\r\n this.isWithBumpout = function () {\r\n return shape.some((line) => {\r\n return line.isWithBumpout();\r\n });\r\n };\r\n\r\n this.isWithMitered = function () {\r\n return shape.some((line) => {\r\n return line.isWithMitered();\r\n });\r\n };\r\n\r\n this.getTotalMillimeters = function() {\r\n return sqInchesToMM2(this.getAreaByShoelaceFormula());\r\n };\r\n\r\n function getRotateAngleRectangle(rotateAnglePart) {\r\n //line 1\r\n const line1 = shape[rotateAnglePart.line1];\r\n let renderFrom = line1.calculateRenderPosition(line1.from);\r\n let renderTo = line1.calculateRenderPosition(line1.to);\r\n //line2\r\n const line2 = shape[rotateAnglePart.line2];\r\n let renderFrom2 = line2.calculateRenderPosition(line2.from);\r\n let renderTo2 = line2.calculateRenderPosition(line2.to);\r\n return [\r\n [renderFrom.x, renderFrom.y],\r\n [renderTo.x, renderTo.y],\r\n [renderFrom2.x, renderFrom2.y],\r\n [renderTo2.x, renderTo2.y],\r\n ]\r\n }\r\n\r\n var handleArrowInputIncrease = (isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine) => {\r\n if (isNegative) {\r\n input.value = +input.value + 1;\r\n } else {\r\n input.value = +input.value - 1;\r\n }\r\n\r\n self.rotateAngleInputChange(input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n };\r\n\r\n const moveShape = (mousePos) => {\r\n let scale = sqftStore.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n let isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n if (this.shapeParams.canSnap || isShowSlabTool) {\r\n const shapeAbsolute = isShowSlabTool ? this.shapeSlab.shapeAbsolute : this.shapeAbsolute;\r\n workspaceControllers.snappedShapeGroups.resetShapeSnappedGroup(shapeAbsolute);\r\n workspaceControllers.snappedShapeGroups.updateShapeSnappedGroup(this, true);\r\n }\r\n\r\n if (isShowSlabTool) {\r\n // this.shapeSlab.setAbsolutePos(null);//reset minLength for correct calculations without stacking\r\n // let distancesToShapes = ShapeHelper.getDistancesToShapes(this);\r\n // let distancesToImages = ShapeHelper.getDistancesToSlabImages(this);\r\n // //console.log(\"distancesToImages\", distancesToImages);\r\n //\r\n // snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n // snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n //\r\n // this.setAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes);\r\n // this.setAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages);\r\n\r\n this.slabPos.x -= xDiff;\r\n this.slabPos.y -= yDiff;\r\n } else {\r\n // this.pos.x -= xDiff;\r\n // this.pos.y -= yDiff;\r\n this.setPosition({\r\n x: this.pos.x - xDiff,\r\n y: this.pos.y - yDiff,\r\n })\r\n }\r\n\r\n state.mouseDownPosition.x = mousePos.x;\r\n state.mouseDownPosition.y = mousePos.y;\r\n // console.log('self.pos', self.pos);\r\n };\r\n\r\n this.setAbsolutePosFromSnapPossibilities = (snapPossibilities) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftStore.getScale();\r\n let absolutePos = {...this.slabPos};\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absolutePos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absolutePos.x -= snap.diff / scale\r\n break;\r\n }\r\n this.shapeSlab.setAbsolutePos(absolutePos)\r\n })\r\n }\r\n }\r\n\r\n const isMouseOverShape = (mousePos) => {\r\n const scale = sqftStore.getScale(),\r\n wp = sqftStore.getOffset(),\r\n pos = self.getPosition(),\r\n offset = {\r\n x: mousePos.x - (pos.x * scale) - wp.x,\r\n y: mousePos.y - (pos.y * scale) - wp.y\r\n },\r\n vertx = [],\r\n verty = [],\r\n vert2x = [],\r\n vert2y = [];\r\n\r\n for (var i = 0; i < shape.length; i++) {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (shape[i].isHovering(isSlabMode) && !isSlabMode //exclude hovering lines in the slab mode\r\n || shape[i].isAngleHovering()\r\n || shape[i].isCornerLineHovering()\r\n ) {\r\n setHoveringOnlyShape(false);\r\n\r\n return setHovering(true);\r\n }\r\n var pointDirection = shape[i].from.getPointDirection();\r\n let pointFromX = shape[i].from.x\r\n let pointFromY = shape[i].from.y\r\n\r\n switch (pointDirection) {\r\n case \"lefttop\":\r\n vertx.push(pointFromX * scale - marginFromShape);\r\n verty.push(pointFromY * scale - marginFromShape);\r\n break;\r\n case \"righttop\":\r\n vertx.push(pointFromX * scale + marginFromShape);\r\n verty.push(pointFromY * scale - marginFromShape);\r\n break;\r\n case \"rightbottom\":\r\n vertx.push(pointFromX * scale + marginFromShape);\r\n verty.push(pointFromY * scale + marginFromShape);\r\n break;\r\n case \"leftbottom\":\r\n vertx.push(pointFromX * scale - marginFromShape);\r\n verty.push(pointFromY * scale + marginFromShape);\r\n break;\r\n default:\r\n vertx.push(pointFromX * scale);\r\n verty.push(pointFromY * scale);\r\n break;\r\n }\r\n vert2x.push(pointFromX * scale);\r\n vert2y.push(pointFromY * scale);\r\n }\r\n var prevState = self.isHovering();\r\n\r\n let isHovering = pnpoly(shape.length, vertx, verty, offset.x, offset.y);\r\n setHovering(isHovering);\r\n setHoveringOnlyShape(pnpoly(shape.length, vert2x, vert2y, offset.x, offset.y));\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if ((self.shapeType === \"wideangle\")\r\n && !rotateAnglePart.rotatedAngleValue\r\n && self.rotateAngleParts.some(rotPart => rotPart.rotatedAngleValue > 0)) {\r\n rotateAnglePart.isHovered = false; // L shape may have only 1 part rotated\r\n } else {\r\n rotateAnglePart.isHovered = pnpolyArray(getRotateAngleRectangle(rotateAnglePart), mousePos);\r\n }\r\n });\r\n if (prevState && !self.isHovering()) {\r\n sqftEventManager.resetCursor(self);\r\n }\r\n return this.isHovering();\r\n };\r\n\r\n //private event handlers\r\n const onMouseMove = (mousePos, e) => {\r\n if (e.terminate && !state.mouseDown) {\r\n setHoveringOnlyShape(false);\r\n return setHovering(false);\r\n }\r\n if (isMouseOverShape(mousePos)) {\r\n //console.log(\"shape id\", this.id);\r\n if (self.onHover) {\r\n self.onHover(self);\r\n }\r\n // todo fix bumpout rotation and remove this\r\n if (sqftConfig.workspace.menuItemActive === \"rotate-left\") {\r\n //sqftEventManager.setCursor(\"rotate-left\", self);\r\n if (self.isWithBumpout() || self.isWithMitered()) {\r\n sqftEventManager.stealCursor(true);\r\n sqftEventManager.setCursor(\"deny\", self);\r\n }\r\n } else if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self, true);\r\n //todo\r\n //console.log(\"state.mouseDown\", state.mouseDown);\r\n moveShape(mousePos);\r\n hideShapeOffsetInTheSlabMode();\r\n } else if (!sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self)\r\n }\r\n return state.mouseDown;\r\n }\r\n //smooth scrolling\r\n if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n sqftEventManager.setCursor('move', self, true);\r\n moveShape(mousePos);\r\n }\r\n // //smooth scrolling\r\n // if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n // sqftEventManager.setCursor('move', self, true);\r\n // moveShape(mousePos);\r\n // console.log(\"333\",);\r\n // }\r\n // //smooth scrolling\r\n // if (state.mouseDown && !sqftStore.getAllowEdges()) {\r\n // sqftEventManager.setCursor('move', self, true);\r\n // moveShape(mousePos);\r\n // }\r\n sqftEventManager.resetCursor(self);\r\n return false;\r\n }\r\n const onDblClick = (mousePos, e) => {\r\n void mousePos; void e;\r\n // if (state.hovering) {\r\n // this.setIsPointsMovable(!state.isPointsMovable);\r\n // }\r\n }\r\n const onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n //debugger // eslint-disable-line no-debugger\r\n sqftEventManager.releaseStealLock(this);\r\n this.setIsPointsMovable(false);\r\n this.preventNegativeArea();\r\n if (this.isHovering()) {\r\n restoreShapeOffsetInTheSlabMode();\r\n this.shapeIntersections.handleSlabPlaceholderIntersections();\r\n if (state.mouseDown) {\r\n this.shapeAutoShuffle.handlePlaceShapeOnTheLine();\r\n }\r\n }\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n\r\n const onMouseDown = (mousePos, e) => {\r\n void e;\r\n //if not then handle event with this object\r\n if (this.isHovering()) {\r\n // remove or add shape to selection\r\n if (e.shiftKey) {\r\n if (workspaceControllers.selectedShapes.isShapeSelected(this)) {\r\n workspaceControllers.selectedShapes.removeShapeFromSelection(this);\r\n } else {\r\n workspaceControllers.selectedShapes.addShapeToSelection(this);\r\n }\r\n }\r\n this.shapeMemory.rememberShapePosition();\r\n setShapeToShapeOffset();\r\n if (sqftEventManager.getCursor().indexOf(\"move\") >= 0) {\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n }\r\n if (sqftConfig.highlight.rotateAngle) {\r\n // todo fix bumpout rotation and remove this\r\n if (self.isWithBumpout() || self.isWithMitered() || this.isPointsMoved || this.rotatedDegrees !== 0) {\r\n return\r\n }\r\n /////////////////////////////////////////\r\n\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if (rotateAnglePart.isHovered) {\r\n //todo\r\n self.setRotateAnglePartActive(rotateAnglePart);\r\n } else {\r\n rotateAnglePart.isActive = false;\r\n }\r\n });\r\n if (!self.rotateAngleParts.some(rotateAnglePart => rotateAnglePart.isActive)) {\r\n self.deActivateRotateAngle();\r\n }\r\n }\r\n\r\n if (this.partId !== SHAPE_PART_ID.slabPlaceHolder) { // seam not allowed to be added on slab placeholders\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamVertical) {\r\n this.shapeSlab.addSeamPieceVertical(mousePos);\r\n this.setIsPointsChanged(false); //prevent creating new backSplash shape if it was seamed\r\n } else if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamHorizontal) {\r\n this.shapeSlab.addSeamPieceHorizontal(mousePos);\r\n this.setIsPointsChanged(false); //prevent creating new backSplash shape if it was seamed\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n const hideShapeOffsetInTheSlabMode = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabShapeOffset = SlabWorkspace.getShapeOffset();\r\n if (slabShapeOffset) {\r\n slabShapeOffset.hide();\r\n }\r\n }\r\n }\r\n\r\n const restoreShapeOffsetInTheSlabMode = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabShapeOffset = SlabWorkspace.getShapeOffset();\r\n if (slabShapeOffset) {\r\n slabShapeOffset.restore();\r\n }\r\n }\r\n }\r\n\r\n const setShapeToShapeOffset = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n\r\n if (isSlabMode && this.partId !== SHAPE_PART_ID.slabPlaceHolder) {\r\n sqftSlabManager.initShapeOffset(this);\r\n }\r\n }\r\n\r\n function hideAngleTooltip() {\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrows = [].slice.call(document.querySelectorAll(\"#angle-tooltip [data-action]\"));\r\n // const inputSubmit = document.querySelectorAll('[data-action=\"angle-input-submit\"]');\r\n\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n //remove event handlers\r\n inputArrows.forEach(function (elem) {\r\n elem.parentNode.replaceChild(elem.cloneNode(true), elem);\r\n });\r\n // inputSubmit[0].removeEventListener('click', self.deActivateRotateAngle);\r\n }\r\n }\r\n\r\n function hideAngleTooltipArrows (value) {\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrowUp = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-up\"]'));\r\n const inputArrowDown = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-down\"]'));\r\n\r\n inputArrowUp.forEach((button) => {\r\n if (value === minAngle) {\r\n button.style.display = \"none\";\r\n clearInterval(state.handlerHold);\r\n } else {\r\n button.style.display = \"block\";\r\n }\r\n });\r\n inputArrowDown.forEach((button) => {\r\n if (value === maxAngle) {\r\n button.style.display = \"none\";\r\n clearInterval(state.handlerHold);\r\n } else {\r\n button.style.display = \"block\";\r\n }\r\n });\r\n }\r\n //public functions\r\n\r\n /**\r\n * return array of getPointField for each point\r\n */\r\n this.getPointFieldArray = () => {\r\n let pointsArray = []\r\n for (const line of shape) {\r\n pointsArray.push(getPointField(line.from.x, line.from.y, line));\r\n }\r\n return pointsArray\r\n }\r\n this.preventNegativeArea = () => {\r\n if (this.getTotalArea() < 0) {\r\n this.reversePoints();\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n }\r\n this.reversePoints = () => {\r\n const reversedPoints = this.getPointCordsArray().reverse();\r\n shape.forEach((line, lineIndex) => {\r\n line.from.setPos({\r\n x: reversedPoints[lineIndex].x,\r\n y: reversedPoints[lineIndex].y\r\n });\r\n line.from.setPosSlab({\r\n x: reversedPoints[lineIndex].x,\r\n y: reversedPoints[lineIndex].y\r\n });\r\n });\r\n }\r\n this.getPointCordsArray = () => {\r\n let pointsArray = []\r\n for (const line of shape) {\r\n pointsArray.push({x: line.from.x, y: line.from.y});\r\n }\r\n return pointsArray\r\n }\r\n this.activateRotateAngle = function () {\r\n shape.forEach((line, lineIndex) => {\r\n for (const rotateAnglePart of self.rotateAngleParts) {\r\n if (this.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n continue;\r\n }\r\n if (lineIndex === rotateAnglePart.line1) {\r\n const parentPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? line.from : line.to;\r\n parentPoint.renderAngleCircle = 18\r\n } else if (lineIndex === rotateAnglePart.line2) {\r\n const secondaryPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? line.to : line.from;\r\n secondaryPoint.renderAngleCircle = 12;\r\n }\r\n // if (lineIndex === 1) { // this is rendering green arc\r\n // line.from.renderAngleArc = line.calculateRenderPosition(line.to).y - line.calculateRenderPosition(line.from).y;\r\n // }\r\n }\r\n })\r\n };\r\n this.deActivateRotateAngle = function() {\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n rotateAnglePart.isActive = false;\r\n rotateAnglePart.isHovered = false;\r\n });\r\n\r\n hideAngleTooltip();\r\n };\r\n this.setRotateAnglePartActive = function (rotateAnglePart) {\r\n hideAngleTooltip(); // 1) deactivate previous anglePart\r\n rotateAnglePart.isActive = true; // 1) always highlight\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const input = document.getElementById(\"angle_input\");\r\n const inputArrowUp = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-up\"]'));\r\n const inputArrowDown = [].slice.call(angleTooltip.querySelectorAll('[data-action=\"angle-input-down\"]'));\r\n const inputArrows = inputArrowUp.concat(inputArrowDown);\r\n const inputSubmit = [].slice.call(angleTooltip.querySelectorAll(\"[data-action=\\\"angle-input-submit\\\"]\"));\r\n\r\n if (this.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n return;\r\n }\r\n input.setAttribute(\"min\", minAngle.toString());\r\n input.setAttribute(\"max\", maxAngle.toString());\r\n angleTooltip.style.display = \"flex\"; // 2) show input in sidebar\r\n\r\n // 3) set input value to current angle\r\n input.value = 90 - rotateAnglePart.rotatedAngleValue; // 90 - is made for displaying 90-0-90 rotation deg for input\r\n\r\n // input.value = getAngleValue(rotateAnglePart.rotatedAngleValue); // 3) set input value to current angle\r\n input.max = (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\" && rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? 90 : maxAngle; // 3.5 set input max\r\n input.min = (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\" && rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? 1 : minAngle; // 3.5 set input max\r\n hideAngleTooltipArrows(+input.value);\r\n\r\n setTimeout(() => {\r\n const expandedSidebar = document.querySelector(\".side.expanded\");\r\n if (expandedSidebar) {\r\n $(expandedSidebar).animate({scrollTop: $(expandedSidebar).height()}, 600); // 4) scroll to added input\r\n }\r\n }, 600);\r\n\r\n // 4) declare base points and bottom(moving) line\r\n const basePoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line1].from : shape[rotateAnglePart.line1].to;\r\n const secondaryPoint = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line2].to : shape[rotateAnglePart.line2].from;\r\n const bottomLine = (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? shape[rotateAnglePart.line1 + 1] : shape[rotateAnglePart.line1 - 1];\r\n const secondaryLineLength = shape[rotateAnglePart.line2].getLineLength();\r\n //const nextLine = self.getNextLine(basePoint.getParent());\r\n var rotated90_1, rotated90_2;\r\n\r\n switch (rotateAnglePart.shapeType) {\r\n default:\r\n case \"wideangle\":\r\n case \"horseshoe\": {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT 90 Orient', bottomLine.getOrientation());\r\n //console.log('RIGHT newDirection', bottomLine.getLineDirection().newDirection);\r\n\r\n if (bottomLine.getLineDirection().newDirection === 'east') {\r\n rotated90_1 = {x: secondaryPoint.x - secondaryLineLength, y: basePoint.y};\r\n rotated90_2 = {x: secondaryPoint.x - secondaryLineLength, y: secondaryPoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'west') {\r\n rotated90_1 = {x: secondaryPoint.x + secondaryLineLength, y: basePoint.y};\r\n rotated90_2 = {x: secondaryPoint.x + secondaryLineLength, y: secondaryPoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'south') {\r\n rotated90_1 = {x: basePoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n rotated90_2 = {x: secondaryPoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n } else if (bottomLine.getLineDirection().newDirection === 'north') {\r\n rotated90_1 = {x: basePoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n rotated90_2 = {x: secondaryPoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n }\r\n\r\n } else {\r\n //console.log('LEFT 90 Orient', bottomLine.getOrientation());\r\n //console.log('LEFT newDirection', bottomLine.getLineDirection().newDirection);\r\n\r\n if (bottomLine.getLineDirection().newDirection === 'east') {\r\n rotated90_1 = {x: secondaryPoint.x + secondaryLineLength, y: secondaryPoint.y};\r\n rotated90_2 = {x: secondaryPoint.x + secondaryLineLength, y: basePoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'west') {\r\n rotated90_1 = {x: secondaryPoint.x - secondaryLineLength, y: secondaryPoint.y};\r\n rotated90_2 = {x: secondaryPoint.x - secondaryLineLength, y: basePoint.y};\r\n } else if (bottomLine.getLineDirection().newDirection === 'south') {\r\n rotated90_1 = {x: secondaryPoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n rotated90_2 = {x: basePoint.x, y: secondaryPoint.y + secondaryLineLength};\r\n } else if (bottomLine.getLineDirection().newDirection === 'north') {\r\n rotated90_1 = {x: secondaryPoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n rotated90_2 = {x: basePoint.x, y: secondaryPoint.y - secondaryLineLength};\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n angleTooltip.style.left = basePoint.getPointField().x + \"px\";\r\n angleTooltip.style.top = basePoint.getPointField().y + \"px\";\r\n const ENTER_KEY = 13;\r\n // 5) set input handlers and focus it\r\n input.oninput = () => self.rotateAngleInputChange(input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n input.focus();\r\n input.onkeydown = function(e) {\r\n if (e.keyCode === ENTER_KEY) {\r\n e.target.blur();\r\n }\r\n };\r\n function blur(e) {\r\n if (!$(e.target).closest('.ui-input')) {\r\n input.blur();\r\n }\r\n }\r\n input.onblur = function () {\r\n // window.lineInputFocused = false;\r\n // input.parentNode.removeChild(input);\r\n // document.removeEventListener(\"click\", blur);\r\n };\r\n\r\n // 6) set input up down and submit handlers\r\n let holdStarter;// This timeout, started on mousedown, triggers the beginning of a hold\r\n let holdDelay = 300; // This is how many milliseconds to wait before recognizing a hold\r\n let holdActive = false; // This flag indicates the user is currently holding the mouse down\r\n inputArrows.forEach(function (arrow) {\r\n let arrowMousedown = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const isNegative = e.currentTarget.dataset.action === 'angle-input-down';\r\n\r\n holdStarter = setTimeout(function () {\r\n holdStarter = null;\r\n holdActive = true;\r\n\r\n state.handlerHold = setInterval(function () {\r\n if (holdActive) {\r\n handleArrowInputIncrease(isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n }\r\n }, 50);\r\n //console.log('Holding...')\r\n }, holdDelay);\r\n }\r\n let arrowMouseup = (e) => {\r\n if (holdStarter) {\r\n clearTimeout(holdStarter);\r\n\r\n const isNegative = e.currentTarget.dataset.action === 'angle-input-down';\r\n handleArrowInputIncrease(isNegative, input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine);\r\n //console.log('Clicked')\r\n }\r\n // Otherwise, if the mouse was being held, end the hold\r\n else if (holdActive) {\r\n holdActive = false;\r\n clearInterval(state.handlerHold);\r\n }\r\n };\r\n arrow.addEventListener('mousedown', arrowMousedown);\r\n arrow.addEventListener('mouseup', arrowMouseup);\r\n });\r\n inputSubmit[0].addEventListener('click', self.deActivateRotateAngle);\r\n\r\n setTimeout(() => {\r\n document.addEventListener(\"click\", blur);\r\n }, 500);\r\n };\r\n this.removeBumpouts = function () {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i].bumpoutOverlay) {\r\n shape[i].deleteBumpout();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * remember base configuration before rotation (we will need it in onchange method, and after blur)\r\n **/\r\n this.setRotateAnglePartBaseConfiguration = (rotateAnglePart, basePoint, secondaryPoint, rotated90_1, rotated90_2, bottomLine) => {\r\n rotateAnglePart.baseConfiguration = {\r\n basePointX: basePoint.x,\r\n basePointX2: secondaryPoint.x,\r\n basePointY: basePoint.y,\r\n basePointY2: secondaryPoint.y,\r\n rotated90_1: rotated90_1,\r\n rotated90_2: rotated90_2,\r\n baseOldX: bottomLine.from.x,\r\n baseOldY: bottomLine.from.y,\r\n baseOldX1: bottomLine.to.x,\r\n baseOldY1: bottomLine.to.y,\r\n widthDiff: Math.abs(basePoint.y - secondaryPoint.y), // difference between basePointX and secondaryPointX, we need it to make bottom line straight\r\n };\r\n }\r\n\r\n /**\r\n * bottomLine - far line, rotating around centerPoint\r\n * basePoint - first point where rotation starts\r\n * secondaryPoint - second point where rotation starts\r\n **/\r\n this.rotateAngleInputChange = (input, rotateAnglePart, basePoint, secondaryPoint, rotated90_1Calc, rotated90_2Calc, bottomLine) => {\r\n if (!rotateAnglePart.baseConfiguration || rotateAnglePart.rotatedAngleValue === 0) {\r\n this.setRotateAnglePartBaseConfiguration(rotateAnglePart, basePoint, secondaryPoint, rotated90_1Calc, rotated90_2Calc, bottomLine)\r\n }\r\n\r\n let {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n if (input.value > +input.max) {\r\n input.value = +input.max;\r\n }\r\n if (input.value < +input.min) {\r\n input.value = +input.min;\r\n }\r\n\r\n // 90 - is set for 90-0-90\r\n let value = 90 - +input.value;\r\n\r\n hideAngleTooltipArrows(+input.value);\r\n\r\n self.rotateAngleParts.forEach((rotateAnglePart) => {\r\n if (rotateAnglePart.isActive) {\r\n rotateAnglePart.rotatedAngleValue = value\r\n }\r\n });\r\n const anglePercentage = Math.round(value * 100 / 90 * 100) / 100; // for example, 20deg = 22.2%\r\n const diffToMinus = Math.round(widthDiff * anglePercentage / 100 * 100) / 100; // for example, 26 * 45 / 100 = 11.7\r\n\r\n const pointToRotate1 = (value < 90) ? {x:baseOldX, y: baseOldY} : rotated90_1;\r\n const pointToRotate2 = (value < 90) ? {x:baseOldX1, y: baseOldY1} : rotated90_2;\r\n const angle = getAngle(rotateAnglePart, value);\r\n\r\n let rotationCenterPoint = getRotationCentrePoint(rotateAnglePart, value, bottomLine, basePoint, secondaryPoint);\r\n\r\n //console.log(angle);\r\n //console.log(rotationCenterPoint);\r\n //console.log(pointToRotate1);\r\n let rotated = rotatePoint(pointToRotate1, rotationCenterPoint, angle);\r\n let rotated2 = rotatePoint(pointToRotate2, rotationCenterPoint, angle);\r\n\r\n bottomLine.from.x = rotated.x;\r\n bottomLine.from.y = rotated.y;\r\n bottomLine.to.x = rotated2.x;\r\n bottomLine.to.y = rotated2.y;\r\n\r\n // change base points positions\r\n // var tempPoint = new point(rotationCenterPoint.x, rotationCenterPoint.y);\r\n // tempPoint.init(bottomLine);\r\n // tempPoint.layout = 'white-circle';\r\n\r\n switch (rotateAnglePart.shapeType) {\r\n case \"wideangle\":\r\n case \"horseshoe\":\r\n default: {\r\n //console.log('diffToMinus', diffToMinus)\r\n if (diffToMinus < widthDiff) {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT bottom Orient',bottomLine.getOrientation())\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: {\r\n basePoint.x = basePointX; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n basePoint.y = basePointY; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHEAST: { basePoint.y = basePointY + diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.NORTHWEST: { basePoint.y = basePointY - diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.NORTHEAST: { basePoint.x = basePointX + diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: { basePoint.x = basePointX - diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n //console.log('LEFT bottom Orient',bottomLine.getOrientation())\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: { basePoint.x = basePointX; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.VERTICAL: { basePoint.y = basePointY; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHEAST: { basePoint.x = basePointX - diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.NORTHWEST: { basePoint.x = basePointX + diffToMinus; secondaryPoint.x = basePointX2;\r\n break;\r\n }\r\n case orientation.NORTHEAST: { basePoint.y = basePointY + diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: { basePoint.y = basePointY - diffToMinus; secondaryPoint.y = basePointY2;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n //console.log('basePoint', basePoint);\r\n //console.log('secondaryPoint', secondaryPoint);\r\n } else {\r\n if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n //console.log('RIGHT 90 Orient', bottomLine.getOrientation());\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n } else {\r\n if (bottomLine.getLineDirection().newDirection === \"east\"){\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n } else {\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 + widthDiff;\r\n }\r\n } else {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n } else {\r\n basePoint.x = basePointX + widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n }\r\n }\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\") {\r\n if (bottomLine.getLineDirection().newDirection === \"north\") {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\") {\r\n basePoint.y = basePointY;\r\n secondaryPoint.y = basePointY2;\r\n } else {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff;\r\n }\r\n } else {\r\n if (self.getPrevLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\") {\r\n basePoint.y = basePointY ;\r\n secondaryPoint.y = basePointY2 ;\r\n } else {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff;\r\n }\r\n }\r\n }\r\n break;\r\n case orientation.SOUTHEAST: {\r\n secondaryPoint.x = basePointX2 - widthDiff + diffToMinus;\r\n basePoint.x = basePointX - widthDiff;\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n secondaryPoint.y = basePointY2 + widthDiff - diffToMinus;\r\n basePoint.y = basePointY + widthDiff;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n secondaryPoint.x = basePointX2;\r\n basePoint.x = basePointX;\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff + diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n secondaryPoint.x = basePointX2 + widthDiff - diffToMinus;\r\n basePoint.x = basePointX + widthDiff;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n //console.log('LEFT 90 Orient', bottomLine.getOrientation());\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"vertical\"){\r\n if (bottomLine.getLineDirection().newDirection === \"west\"){\r\n basePoint.x = basePointX - widthDiff;\r\n secondaryPoint.x = basePointX2 + widthDiff;\r\n } else {\r\n basePoint.x = basePointX + widthDiff;\r\n secondaryPoint.x = basePointX2 - widthDiff;\r\n }\r\n } else {\r\n basePoint.x = basePointX;\r\n secondaryPoint.x = basePointX2;\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n if (self.getNextLine(basePoint.getParent()).getLineDirection().orientation === \"horizontal\"){\r\n if (bottomLine.getLineDirection().newDirection === \"south\") {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff;\r\n } else {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff;\r\n }\r\n }\r\n break;\r\n case orientation.SOUTHEAST: {\r\n basePoint.y = basePointY + widthDiff;\r\n secondaryPoint.y = basePointY2 + widthDiff - diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n secondaryPoint.x = basePointX2 + widthDiff - diffToMinus;\r\n basePoint.x = basePointX + widthDiff;\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n basePoint.x = basePointX - widthDiff ;\r\n secondaryPoint.x = basePointX2 - widthDiff + diffToMinus;\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n basePoint.y = basePointY - widthDiff;\r\n secondaryPoint.y = basePointY2 - widthDiff+ diffToMinus;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // const pointDiff = Math.round(15 * anglePercentage) / 100; // points margin\r\n [basePoint, secondaryPoint].forEach(point => {\r\n if (point.arcLength || point.angle) {\r\n point.arcLength = 0;\r\n point.angle = 0;\r\n }\r\n // disallow points radiuses\r\n point.angleIsChanged = !!value; // keep if false when angle is 0\r\n point.rotateAnglePart = rotateAnglePart; // each point has a link on the whole rotated part\r\n });\r\n bottomLine.from.rotateAnglePart = rotateAnglePart;\r\n bottomLine.to.rotateAnglePart = rotateAnglePart;\r\n // bottomLine.from.pointDiff = pointDiff;\r\n // bottomLine.to.pointDiff = pointDiff;\r\n };\r\n this.getNextLine = (line, index, shouldSearchAmongLinesWithoutAngles) => {\r\n const lines = shouldSearchAmongLinesWithoutAngles ? this.getLinesWithoutAngle() : shape;\r\n index = index || lines.indexOf(line);\r\n let next = index + 1;\r\n if (index === lines.length - 1) {\r\n next = 0;\r\n }\r\n return lines[next];\r\n };\r\n this.getPrevLine = function(line, index) {\r\n index = index || shape.indexOf(line);\r\n var prev = index - 1;\r\n if (index === 0) {\r\n prev = shape.length - 1;\r\n }\r\n return shape[prev];\r\n };\r\n this.getAngleDirection = function(line) {\r\n var index = shape.indexOf(line);\r\n var lines = {\r\n line1: shape[index],\r\n line2: this.getNextLine(line, index),\r\n lineBefore: this.getPrevLine(line, index)\r\n };\r\n return getPointDirection(lines.line1.from, lines.line1.to, lines.line2.to, lines.lineBefore.from);\r\n };\r\n this.flip = function(flipDirection) {\r\n let i;\r\n switch(flipDirection) {\r\n case self.FlipDirection.HORIZONTAL:\r\n var max_y = 0;\r\n for (i = 0; i < shape.length; i++) {\r\n if (max_y < shape[i].from.y) {\r\n max_y = shape[i].from.y;\r\n }\r\n }\r\n for (i = 0; i < shape.length; i++) {\r\n shape[i].from.y = max_y - shape[i].from.y;\r\n }\r\n break;\r\n case self.FlipDirection.VERTICAL:\r\n var max_x = 0;\r\n for (i = 0; i < shape.length; i++) {\r\n if (max_x < shape[i].from.x) {\r\n max_x = shape[i].from.x;\r\n }\r\n }\r\n for (i = 0; i < shape.length; i++) {\r\n shape[i].from.x = max_x - shape[i].from.x;\r\n }\r\n break;\r\n }\r\n };\r\n this.rotate = function(degrees, direction, isSlabMode = false, aroundPoint = null) {\r\n // todo fix bumpout rotation and remove this\r\n // if (self.isWithBumpout() || self.isWithMitered()) {\r\n // return\r\n // }\r\n /////////////////////////////////////////\r\n isSlabMode ? this.rotatedDegreesSlab += degrees : this.rotatedDegrees += degrees;\r\n (this.rotatedDegrees === 360) && (this.rotatedDegrees = 0);\r\n (this.rotatedDegreesSlab === 360) && (this.rotatedDegreesSlab = 0);\r\n\r\n direction = direction || self.Direction.Right;\r\n let angle = (degrees * Math.PI / 180);\r\n if (direction === self.Direction.LEFT)\r\n angle *= -1;\r\n\r\n if (!aroundPoint) {\r\n aroundPoint = this.getCenter();\r\n }\r\n //console.log('degrees', degrees);\r\n //console.log('aroundPoint', aroundPoint);\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].from.rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n for (let i = 0; i < shape.length; i++) {\r\n let line1 = this.getAngleDirection(shape[i]),\r\n count = ((i - 1) < 0) ? shape.length - 1 : i - 1,\r\n line2 = this.getAngleDirection(shape[count]);\r\n\r\n shape[i].from.changeCornerDirection(line1, line2);\r\n }\r\n this.rotateShapeBumpoutPoints(aroundPoint, angle, isSlabMode); //todo\r\n if (this.shapeRotatable) {\r\n this.shapeRotatable.rotateShapeRotatablePoints(aroundPoint, angle, isSlabMode);\r\n }\r\n if (!isSlabMode) {\r\n this.setIsPointsChanged(true);\r\n }\r\n };\r\n this.rotateShapeBumpoutPoints = (aroundPoint, angle, isSlabMode) => {\r\n if (this.isWithBumpout()) {\r\n for (const line of this.getLines()) {\r\n if (line.isWithBumpout()) {\r\n const bumpoutPoints = line.bumpoutOverlay.getBumpoutPoints();\r\n for (const bumpoutPointsKey in bumpoutPoints) {\r\n if (bumpoutPoints.hasOwnProperty(bumpoutPointsKey)) {\r\n bumpoutPoints[bumpoutPointsKey].rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.setRotationDegrees = (rotationDegrees) => {\r\n this.rotatedDegrees = rotationDegrees\r\n }\r\n this.updateSlabPoints = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].from.posSlab.x = JSON.parse(JSON.stringify(shape[i].from.pos.x));\r\n shape[i].from.posSlab.y = JSON.parse(JSON.stringify(shape[i].from.pos.y));\r\n if (shape[i].isWithBumpout()) {\r\n //this is used to reset additional bumpout shape\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(shape[i]);\r\n\r\n //this is used to reset bumpoutPoints if they displayed with the line\r\n const bumpoutPoints = shape[i].bumpoutOverlay.getBumpoutPoints();\r\n for (let point in bumpoutPoints) {\r\n bumpoutPoints[point].posSlab = clone(bumpoutPoints[point].pos);\r\n }\r\n }\r\n }\r\n }\r\n this.updateSlabPosition = () => {\r\n this.setSlabPosition(this.pos);\r\n }\r\n this.init = (position, segments) => {\r\n if (position) {\r\n this.setPositionWithoutChange(position);\r\n this.setSlabPosition(position);\r\n }\r\n if (SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE.includes(this.partId)) {\r\n this.isPositionChanged = false;\r\n }\r\n\r\n if (segments)\r\n setShape(segments);\r\n\r\n // that hook is for resizing, perhaps we should rewrite resizing and remove this\r\n if (self.layout270.indexOf(this.fromLayout) !== -1) {\r\n self.rotatedDegrees = 270;\r\n }\r\n\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n totalShapeCount && setFillColor(getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255), 0.3);\r\n this.initEvents(sqftEventManager);\r\n };\r\n this.getPriority = (eventManager) => {\r\n switch (this.partId) {\r\n case SHAPE_PART_ID.upper_cabinet_boxes: return eventManager.priorities.SHAPE_UPPER\r\n case SHAPE_PART_ID.slabPlaceHolder: return eventManager.priorities.SHAPE_SLAB_PLACEHOLDER\r\n default: return eventManager.priorities.SHAPE\r\n }\r\n }\r\n this.initEvents = (eventManager = sqftEventManager) => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.render,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.DBLCLICK,\r\n onDblClick,\r\n this,\r\n this.getPriority(eventManager)\r\n );\r\n };\r\n this.resetState = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n state.hovering = false;\r\n state.handlerHold = null;\r\n };\r\n this.deregisterEvents = () => {\r\n sqftEventManager.removeEvent(this);\r\n this.resetState();\r\n this.isHidden = true;\r\n this.deregisterLineEvents();\r\n };\r\n this.deregisterLineEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].deregisterEvents();\r\n }\r\n };\r\n this.reInitLineTitleEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitTitleEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents(sqftEventManager);\r\n this.restoreState();\r\n this.isHidden = false;\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitEvents();\r\n }\r\n }\r\n };\r\n this.deregisterPartEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].deregisterPartEvents();\r\n }\r\n };\r\n this.reInitPartEvents = () => {\r\n for (let i = 0; i < shape.length; i++) {\r\n shape[i].reInitPartEvents();\r\n }\r\n };\r\n this.restoreState = () => {\r\n state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n handlerHold: null\r\n };\r\n };\r\n this.destroy = (protect) => {\r\n if (!protect) {\r\n for (var i = 0; i < shape.length; i++) {\r\n shape[i].destroy();\r\n }\r\n if (this.shapeRotatable) {\r\n sqftShapeManager.disableRotatableState(this);\r\n }\r\n sqftEventManager.removeEvent(self);\r\n }\r\n };\r\n this.stealCursor = function(who) {\r\n for (var i = 0; i < shape.length; i++) {\r\n if (shape[i] === who) {\r\n sqftEventManager.resetCursor(self);\r\n }\r\n }\r\n };\r\n this.resetCursor = function() {\r\n sqftEventManager.resetCursor(self);\r\n };\r\n this.isShapeHasIntersections = () => {\r\n return shape.some(line => {\r\n return line.hasIntersections();\r\n })\r\n }\r\n this.renderAnglePartActive = function(rotateAnglePart, ctx) {\r\n ctx.save();\r\n ctx.beginPath();\r\n const rotateShape1 = getRotateAngleRectangle(rotateAnglePart);\r\n ctx.moveTo(rotateShape1[0][0], rotateShape1[0][1]);\r\n ctx.lineTo(rotateShape1[1][0], rotateShape1[1][1]);\r\n ctx.lineTo(rotateShape1[2][0], rotateShape1[2][1]);\r\n ctx.lineTo(rotateShape1[3][0], rotateShape1[3][1]);\r\n ctx.closePath();\r\n ctx.fillStyle = \"rgba(159, 198, 33, 0.5)\";\r\n ctx.fill();\r\n ctx.restore();\r\n };\r\n\r\n this.isAngleRotatedPartsWithCorner = (rotateAnglePart) => {\r\n let line1 = self.getPrevLine(shape[rotateAnglePart.line1]);\r\n let line2 = shape[rotateAnglePart.line2];\r\n\r\n if ((self.shapeType === \"horseshoe\" || self.shapeType === \"wideangle\")\r\n && rotateAnglePart.line1 > rotateAnglePart.line2\r\n ) {\r\n line1 = shape[rotateAnglePart.line1];\r\n line2 = self.getPrevLine(shape[rotateAnglePart.line2]);\r\n }\r\n\r\n return [line1, line2].some((line) => {\r\n return line.to.angle > 0 || line.to.arcLength > 0\r\n });\r\n }\r\n\r\n this.render = (ctx) => {\r\n this.shapeRender.render(ctx)\r\n }\r\n\r\n}\r\n","import $ from 'jquery';\r\nimport Config from '../config';\r\nimport {PhoneNumberUtil} from 'google-libphonenumber';\r\n\r\nexport default {\r\n bgImageUrl: function (imageUrl) {\r\n return 'url(\"' + imageUrl + '\")';\r\n },\r\n splitFilter: function (filter) {\r\n const res = {};\r\n filter.split('&').forEach(function (pair) {\r\n const ar = pair.split('=');\r\n res[ar[0]] = ar[1];\r\n });\r\n return res;\r\n },\r\n keysAndProps: function (obj) {\r\n const res = Object.keys(obj);\r\n console.log(res);\r\n for (let key in res) {\r\n const prop = obj[key];\r\n if (Array.isArray(prop)) {\r\n res.push(prop);\r\n }\r\n }\r\n\r\n return res;\r\n },\r\n isObject: function (val) {\r\n if (val === null) {\r\n return false;\r\n }\r\n return ( (typeof val === 'function') || (typeof val === 'object') );\r\n },\r\n\r\n imagePathCache: {},\r\n imagePath: function (image) {\r\n let path = this.imagePathCache[image];\r\n if (!path) {\r\n path =(Config.kioskStandAlone || document.kvConfig.dev ? './' : '/content/Views/kv/') + image;\r\n this.imagePathCache[image] = path;\r\n }\r\n\r\n return path;\r\n },\r\n /**\r\n * return the path without last part which is supposelly the file name\r\n * @param {string} path\r\n * @param {int} [count=1]\r\n */\r\n pathPrefix: function (path, count) {\r\n count = count || 1;\r\n while (count-- > 0) {\r\n const index = path.lastIndexOf(\"/\");\r\n if (index === -1) {\r\n return path;\r\n }\r\n\r\n path = path.substr(0, index);\r\n }\r\n\r\n return path;\r\n },\r\n\r\n /**\r\n * Converts a string to a boolean value\r\n * @param value\r\n */\r\n toBoolean: function (value) {\r\n if (typeof (value) === 'string') {\r\n value = value.toLowerCase();\r\n }\r\n switch (value) {\r\n case true:\r\n case \"true\":\r\n case 1:\r\n case \"1\":\r\n case \"on\":\r\n case \"yes\":\r\n return true;\r\n default:\r\n return false;\r\n }\r\n },\r\n\r\n convertKeysToCamelCase: function (obj) {\r\n if (!obj || typeof obj !== \"object\") {\r\n return null;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return $.map(obj, function (value) {\r\n return this.convertKeysToCamelCase(value);\r\n });\r\n }\r\n\r\n const newObj = {};\r\n $.each(obj, function (key, value) {\r\n key = key.charAt(0).toLowerCase() + key.slice(1);\r\n newObj[key] = value;\r\n });\r\n\r\n return newObj;\r\n },\r\n toCamel: function (o) {\r\n let build, key, destKey, value;\r\n\r\n if (o instanceof Array) {\r\n build = [];\r\n for (key in o) {\r\n value = o[key];\r\n\r\n if (typeof value === \"object\") {\r\n value = this.toCamel(value);\r\n }\r\n build.push(value);\r\n }\r\n } else {\r\n build = {};\r\n for (key in o) {\r\n if (o.hasOwnProperty(key)) {\r\n destKey = (key.charAt(0).toLowerCase() + key.slice(1) || key).toString();\r\n value = o[key];\r\n if (value !== null && typeof value === \"object\") {\r\n value = this.toCamel(value);\r\n }\r\n\r\n build[destKey] = value;\r\n }\r\n }\r\n }\r\n return build;\r\n },\r\n ignoreDefault: function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n //e.nativeEvent.stopImmediatePropagation();\r\n },\r\n\r\n ignore: function (e, cb) {\r\n this.ignoreDefault(e);\r\n cb();\r\n },\r\n\r\n\r\n playVideo: function (id) {\r\n ///TODO: When Girl videos are updated remove \"|| true\"\r\n if (!document.kvConfig.kioskMode || Config.isQTEmbedded() || true) {\r\n return;\r\n }\r\n const $guide = $(id);\r\n if (!$guide.length) {\r\n return;\r\n }\r\n const guide = $guide[0];\r\n $guide.off('canplaythrough').on('canplaythrough', function () {\r\n $guide.show();\r\n guide.play();\r\n });\r\n guide.load();\r\n },\r\n hideVideo: function (id) {\r\n const $guide = $(id);\r\n if (!$guide.length) {\r\n return;\r\n }\r\n const guide = $guide[0];\r\n $guide.hide();\r\n guide.pause();\r\n },\r\n getIntroVideo: function (view) {\r\n const path = Config.kioskStandAlone ? \"./videos/video_guide/\" : 'https://s3.amazonaws.com/intro-videos/';\r\n switch (view) {\r\n case 'review':\r\n return path + 'Visualizer-Tools-Totals-25M.webm';\r\n case 'intro':\r\n return path + 'Kitchen-Visualizer-25M.webm';\r\n default:\r\n return '';\r\n }\r\n },\r\n exportCanvasAsPNG: function (canvasElement, fileName) {\r\n const MIME_TYPE = \"image/png\";\r\n let imgURL = canvasElement.toDataURL(MIME_TYPE);\r\n\r\n /* Change MIME type to trick the browser to download the file instead of displaying it */\r\n imgURL = imgURL.replace(/^data:image\\/[^;]*/, 'data:application/octet-stream');\r\n /* In addition to 's \"download\" attribute, you can define HTTP-style headers */\r\n //imgURL = imgURL.replace(/^data:application\\/octet-stream/, 'data:application/octet-stream;headers=Content-Disposition%3A%20attachment%3B%20filename=' + fileName);\r\n\r\n const dlLink = document.createElement('a');\r\n dlLink.download = fileName;\r\n dlLink.href = imgURL;\r\n dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');\r\n\r\n document.body.appendChild(dlLink);\r\n dlLink.click();\r\n document.body.removeChild(dlLink);\r\n },\r\n monads: {\r\n ifNotNull: function (o, notNullCallback) {\r\n if (o) {\r\n return notNullCallback(o);\r\n }\r\n\r\n return null;\r\n }\r\n },\r\n pnpoly: function( points, test ) {\r\n var i, j, c = false;\r\n for( i = 0, j = points.length-1; i < points.length; j = i++ ) {\r\n if( ( ( points[i].y > test.y ) != ( points[j].y > test.y ) ) &&\r\n ( test.x < ( points[j].x - points[i].x ) * ( test.y - points[i].y ) / ( points[j].y - points[i].y ) + points[i].x ) ) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n },\r\n isEmail: function (email) {\r\n if (!email || email.indexOf('@') === -1) {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line no-useless-escape\r\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/i;\r\n return re.test(email);\r\n },\r\n isZip: function (zip) {\r\n const regex = /[a-zA-Z0-9][a-zA-Z0-9\\- ]{0,10}[a-zA-Z0-9]/;\r\n // const regex = /(^\\d{5}(?:[\\s]?[-\\s][\\s]?\\d{4})?$)/; // this on can not support H3H 2H2, which is real Quebec code\r\n return regex.test(zip);\r\n },\r\n // isPhoneNumber: function (phone) {\r\n // if (!phone) {\r\n // return false;\r\n // }\r\n // const count = phone.replace(/[^0-9]/g, \"\").length;\r\n // return count === 10 || count === 11;\r\n // },\r\n isPhoneNumber: function (phone, region) {\r\n region = region || \"US\";\r\n const phoneUtil = PhoneNumberUtil.getInstance();\r\n try {\r\n if (phone) {\r\n const parsedPhone = phoneUtil.parse(phone, region);\r\n return phoneUtil.isPossibleNumber(parsedPhone) && phoneUtil.isValidNumberForRegion(parsedPhone, region); // /^\\+?\\d{10,16}$/.test(phone);\r\n }\r\n return false;\r\n } catch(ex) {\r\n return false;\r\n }\r\n },\r\n getPhoneFormatted: (phone, region) => {\r\n region = region || \"US\";\r\n const phoneUtil = PhoneNumberUtil.getInstance();\r\n try {\r\n if (phone) {\r\n const parsedPhone = phoneUtil.parse(phone, region);\r\n return phoneUtil.formatInOriginalFormat(parsedPhone, region);\r\n }\r\n } catch(ex) {\r\n console.log(ex);\r\n }\r\n return phone;\r\n },\r\n getUserPhoneSplitted: (phone, oldCountry = \"\") => {\r\n const googlePhouneUtilInstance = PhoneNumberUtil.getInstance();\r\n if (Config.isDevMode()) {\r\n console.log(\"googlePhouneUtilInstance\", googlePhouneUtilInstance);\r\n }\r\n const allRegions = googlePhouneUtilInstance.getSupportedRegions();\r\n // console.log(\"allRegions\", allRegions);\r\n try {\r\n const parsedPhone = googlePhouneUtilInstance.parse(phone);\r\n // if (Config.isDevMode()) {\r\n // console.log(\"parsedPhone\", parsedPhone);\r\n // }\r\n const phoneCountry = oldCountry && allRegions.includes(oldCountry)\r\n && googlePhouneUtilInstance.isValidNumberForRegion(parsedPhone, oldCountry)\r\n ? oldCountry\r\n : allRegions.find(regionCode => googlePhouneUtilInstance.isValidNumberForRegion(parsedPhone, regionCode)) || \"\"\r\n // console.log(\"phoneCountry\", phoneCountry);\r\n return {\r\n country: {\r\n dialCode: \"\" + parsedPhone.getCountryCode(),\r\n iso2: phoneCountry.toLowerCase()\r\n },\r\n phoneNumber: \"\" + parsedPhone.getNationalNumber() // we keep it as as string\r\n }\r\n } catch (ex) {\r\n if (Config.isDevMode()) {\r\n console.log(\"couldn't parse the phone\", phone);\r\n }\r\n }\r\n const phoneSplitted = phone ? phone.match(/(\\+(\\d.*?)\\s)?(.*)/) : [];\r\n return {\r\n phoneNumber: phoneSplitted[3] || phone || \"\"\r\n }\r\n },\r\n parseUserResponse: function(responseData, oldCountry = \"\") {\r\n const {phoneNumber, country} = this.getUserPhoneSplitted(responseData.values.phone, oldCountry || responseData.values.country || \"\");\r\n const newUserInfo = {\r\n email: responseData.email,\r\n firstName: responseData.values.firstName,\r\n lastName: responseData.values.lastName,\r\n phoneNumber,\r\n postal: responseData.values.postal,\r\n isNew: false,\r\n password: \"\"\r\n };\r\n if (country) {\r\n newUserInfo.country = country;\r\n }\r\n [\"address1\", \"address2\", \"firstName\", \"lastName\", \"postal\", \"city\", \"provence\"].forEach(key => {\r\n if (responseData.values && responseData.values[key]) {\r\n const realKey = (key === \"provence\") ? \"state\" : key;\r\n newUserInfo[realKey] = responseData.values[key] === \"N/A\" ? \"\" : responseData.values[key]\r\n }\r\n })\r\n return newUserInfo\r\n },\r\n parseShippingAndBillingResponse: function(responseData) {\r\n const {billingAddress, shippingAddress, billingSameAsShipping} = responseData;\r\n return {\r\n shippingAddress: {\r\n fullName: shippingAddress ? shippingAddress.name : \"\",\r\n address1: shippingAddress ? shippingAddress.address1 : \"\",\r\n address2: shippingAddress ? shippingAddress.address2 : \"\",\r\n city: shippingAddress ? shippingAddress.city : \"\",\r\n state: shippingAddress ? shippingAddress.state : \"\",\r\n postal: shippingAddress ? shippingAddress.zip : \"\"\r\n },\r\n billingAddress: {\r\n fullName: billingAddress ? billingAddress.name : \"\",\r\n address1: billingAddress ? billingAddress.address1 : \"\",\r\n address2: billingAddress ? billingAddress.address2 : \"\",\r\n city: billingAddress ? billingAddress.city : \"\",\r\n state: billingAddress ? billingAddress.state : \"\",\r\n postal: billingAddress ? billingAddress.zip : \"\"\r\n },\r\n billingSameAsShipping: !!billingSameAsShipping, // in case it comes undefined\r\n }\r\n },\r\n isMobile: () => {\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n // eslint-disable-next-line no-useless-escape\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4)))\r\n },\r\n getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n },\r\n /**\r\n * Checks input value on errors, returns all errors array\r\n * @param currentValue {string|number}\r\n * @param property {string}\r\n * @param fabricatorData {object}\r\n * @returns {array}\r\n */\r\n getValidationErrors(currentValue, property, fabricatorData) {\r\n const errors = [];\r\n\r\n if (fabricatorData.isCaesarStone) {\r\n switch (property) {\r\n case \"lastName\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (currentValue.length === 1) {\r\n errors.push(\"assignPopup.errors.shortName\");\r\n } else if (currentValue.length > 50) {\r\n errors.push(\"assignPopup.errors.longName\");\r\n }\r\n if (!/^[A-Z\\s\\'\\-\\&\\.a-z]+$/.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.nameIsIncorrect\");\r\n }\r\n break;\r\n }\r\n case \"city\":\r\n case \"state\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n break;\r\n }\r\n }\r\n return errors\r\n }\r\n\r\n switch (property) {\r\n case \"firstName\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (currentValue.length === 1) {\r\n errors.push(\"assignPopup.errors.shortName\");\r\n } else if (currentValue.length > 50) {\r\n errors.push(\"assignPopup.errors.longName\");\r\n }\r\n if (!/^[A-Z\\s\\'\\-\\&\\.a-z]+$/.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.nameIsIncorrect\");\r\n }\r\n break;\r\n }\r\n case \"email\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(currentValue)) {\r\n errors.push(\"assignPopup.errors.invalidEmail\");\r\n }\r\n break;\r\n }\r\n case \"phoneNumber\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n // we have another check, isPhoneNumber\r\n // if (!/^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/.test(currentValue)) {\r\n // errors.push(\"assignPopup.errors.invalidEmail\");\r\n // }\r\n break;\r\n }\r\n case \"postal\": {\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.fieldRequired\");\r\n return errors\r\n }\r\n if (!this.isZip(currentValue)) {\r\n errors.push(\"assignPopup.errors.incorrectPostal\");\r\n return errors\r\n }\r\n break;\r\n }\r\n case \"phone2\": {\r\n if (currentValue.length > 20) {\r\n errors.push(\"assignPopup.errors.phoneNumberIsTooLong\");\r\n }\r\n break;\r\n }\r\n }\r\n return errors\r\n },\r\n hasErrors: (errorsObject) => {\r\n return !!(Object.keys(errorsObject).length && Object.keys(errorsObject).some(key => errorsObject[key] && errorsObject[key].length))\r\n },\r\n textSubStringEllipsis: (text, length) => {\r\n if (!text || !length || (text.length < length)) {\r\n return text || \"\"\r\n }\r\n return text.substring(0, length) + \"...\"\r\n },\r\n getUrlFromString: (text) => {\r\n if (!text) {\r\n return \"\"\r\n }\r\n return text.toLowerCase().replace(/ /g, \"-\")\r\n }\r\n};\r\n\r\n","import {hashHistory} from \"react-router\";\r\n\r\nimport store from \"../store\";\r\nimport * as types from \"../actions/actionTypes\";\r\nimport {\r\n hideUserPopup,\r\n changeMessageBoxState,\r\n} from \"../actions/actionFunctions\";\r\nimport {\r\n setAfterContractSignCallback\r\n} from \"../actions/contractsActions\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport JsonApi from \"./jsonApi\";\r\nimport {IS_OFFLINE_MODE} from \"../config\";\r\nimport {shouldUseContractSigning} from \"../bvcomponents/popups/contractSign/contractsFunctions\";\r\nimport {ROUTES} from \"../routes\";\r\n\r\nconst _checkNetworkErrorMessage = (message) => {\r\n // includes, because it can be \"Network Error\" or \"Server Error: Error: Network Error\"\r\n return message && (message === \"Network Error\" || (message.includes && message.includes(\"Network Error\"))\r\n || (message.message && message.message.includes(\"Network Error\"))) && IS_OFFLINE_MODE\r\n}\r\n\r\n/**\r\n * renderErrorPopup can display retry connection and sign contract buttons\r\n * @param message {string}\r\n * @param title {string}\r\n * @param retryConnectionFunction {function}\r\n * @param showContractSignOnError {boolean}\r\n * @param closeButtonCallback {function}\r\n * @param afterContractSignCallback {function}\r\n */\r\nexport const renderErrorPopup = (message,\r\n title = \"messageBox.defaultTitle\",\r\n retryConnectionFunction = null,\r\n showContractSignOnError = false,\r\n closeButtonCallback = null,\r\n afterContractSignCallback = null) => {\r\n if (_checkNetworkErrorMessage(message)) {\r\n message = \"noInternetText\";\r\n title = \"noInternetTitle\";\r\n }\r\n const closeMessageBox = () => {\r\n store.dispatch(changeMessageBoxState({\r\n visible: false,\r\n }));\r\n }\r\n const buttons = [{\r\n text: message === \"noInternetText\" ? \"messageBox.closeButton\" : \"messageBox.buttonOk\",\r\n color: message === \"noInternetText\" ? \"blue\" : \"red\",\r\n click: () => {\r\n closeMessageBox();\r\n if (closeButtonCallback) {\r\n closeButtonCallback()\r\n }\r\n }\r\n }];\r\n if (message === \"noInternetText\") {\r\n if (showContractSignOnError) {\r\n const {fabricatorState, contractSigningState} = store.getState();\r\n const needContractSignDocument = IS_OFFLINE_MODE\r\n && shouldUseContractSigning(fabricatorState.settings, contractSigningState.contractsList);\r\n if (needContractSignDocument) {\r\n buttons.push({\r\n text: \"messageBox.fillContract\",\r\n color: \"green\",\r\n click: () => {\r\n closeMessageBox();\r\n // store.dispatch(showContractSigning(true, () => {}));\r\n if (afterContractSignCallback) {\r\n store.dispatch(setAfterContractSignCallback(afterContractSignCallback))\r\n }\r\n hashHistory.push(ROUTES.contract);\r\n }\r\n })\r\n }\r\n }\r\n if (retryConnectionFunction) {\r\n buttons.push({\r\n text: \"messageBox.retryConnection\",\r\n color: \"green\",\r\n click: () => {\r\n closeMessageBox();\r\n retryConnectionFunction();\r\n }\r\n })\r\n }\r\n }\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title,\r\n message,\r\n error: message !== \"noInternetText\",\r\n newStyles: true,\r\n buttons\r\n }\r\n });\r\n};\r\n\r\nexport const renderMessagePopup = (message) => {\r\n let title = \"messageBox.defaultTitle\";\r\n if (_checkNetworkErrorMessage(message)) {\r\n message = \"noInternetText\";\r\n title = \"noInternetTitle\";\r\n }\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title,\r\n message,\r\n error: false,\r\n inline: false,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n }\r\n });\r\n }\r\n }]\r\n }\r\n });\r\n};\r\n\r\nexport const renderAccountNotActivatedErrorPopup = (message, email) => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n message,\r\n error: true,\r\n inline: false,\r\n buttons: [{\r\n text: \"userPopup.messageBox.resendActivationEmailText\",\r\n color: \"green\",\r\n click: () => {\r\n store.dispatch(hideUserPopup());\r\n loaderEnable(\"loader.resendActivationLinkText\");\r\n JsonApi.resendActivationEmail(email)\r\n .then(() => {\r\n loaderDisable();\r\n renderMessagePopup(\"userPopup.messageBox.resendActivationEmailSuccess\");\r\n });\r\n }\r\n }, {\r\n text: \"messageBox.buttonOk\",\r\n color: \"red\",\r\n click: () => {\r\n store.dispatch(hideUserPopup());\r\n }\r\n }]\r\n }\r\n })\r\n};\r\n\r\nexport const renderConfirmPopup = (confirmPopupType, tag, confirmPopupOpened = true) => {\r\n store.dispatch({\r\n type: types.TOGGLE_CONFIRM_POPUP,\r\n payload: {\r\n confirmPopupOpened,\r\n confirmPopupType,\r\n confirmPopupTag: {...tag}\r\n }\r\n });\r\n};\r\n","import uuid from \"uuid\";\r\n\r\nimport * as types from './actionTypes';\r\nimport {clearCart, setJobId} from \"./actionFunctions\";\r\nimport {setReceiptUrl} from \"./printFunctions\";\r\nimport {setAmazonImageUrl} from \"./serverFunctions\";\r\nimport {setWizardSelectedValues} from \"../visit/wizardLogic/wizardActions\";\r\nimport {setWizardActiveStep, updateAllWizardValues} from \"./wizardFunctions\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"./roomsFunctions\";\r\n\r\nexport const showOrderCompletePopup = (orderCompletePopupVisible) => ({\r\n type: types.SHOW_ORDER_COMPLETE_POPUP,\r\n payload: {orderCompletePopupVisible}\r\n})\r\n\r\nexport const toggleShowMobileQuotes = (showMobileQuotes) => ({\r\n type: types.TOGGLE_SHOW_MOBILE_QUOTES,\r\n payload: {showMobileQuotes}\r\n})\r\n\r\nexport const toggleShowAllQuotesCartItemsList = (showAllQuotesCartItemsList) => ({\r\n type: types.TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST,\r\n payload: {showAllQuotesCartItemsList}\r\n})\r\n\r\nexport const getMinimumChargeCartItem = (fromCartItem, onlyMinimum = false, quantity = 1) => {\r\n const {selectionGroup, partId, currentQuote, } = fromCartItem;\r\n const newDbFeature = Object.assign({}, fromCartItem.cartFeature.dbFeature, {\r\n id: 1,\r\n customDisplayName: \"additionalCartItem.minimumCharge\",\r\n displayName: \"additionalCartItem.minimumCharge\",\r\n sharedFeatureName: \"additionalCartItem.minimumCharge\",\r\n });\r\n if (onlyMinimum) {\r\n newDbFeature.cost = 375;\r\n newDbFeature.costplus = 375;\r\n newDbFeature.stonePricingId = null;\r\n }\r\n let minCartItem = {\r\n id: uuid.v4(),\r\n isEmpty: false,\r\n isMinimumCharge: true,\r\n isMinimumChargeItems: !onlyMinimum,\r\n selectionGroup,\r\n partId,\r\n currentQuote,\r\n quantity,\r\n cartFeature: Object.assign({}, fromCartItem.cartFeature, {\r\n fromFeatureName: fromCartItem.cartFeature.getFeatureName(),\r\n partName: \"additionalCartItem.minimumCharge\",\r\n _customDisplayName: \"additionalCartItem.minimumCharge\",\r\n _countertopGroupsCustomDisplayName: \"additionalCartItem.minimumCharge\",\r\n metaData: {},\r\n notesList: {},\r\n getCountertopGroupsSplittedFeatureName: function () {\r\n return this.partName\r\n },\r\n getSplittedFeatureName: function () {\r\n return this.partName\r\n },\r\n getFeatureName: function () {\r\n return this.partName\r\n },\r\n dbFeature: newDbFeature,\r\n })\r\n }\r\n if (fromCartItem.fromWizardId || minCartItem.fromWizardGroupId) { // just in case fromWizardId is 0\r\n minCartItem.fromWizardId = fromCartItem.fromWizardId; // this is needed to prevent showing minimum cart item ↓\r\n minCartItem.fromWizardStep = fromCartItem.fromWizardStep; // in different wizards in advanced quoting ↓\r\n minCartItem.fromWizardGroupId = fromCartItem.fromWizardGroupId; // for the same groups\r\n }\r\n return minCartItem\r\n};\r\n\r\nexport const setCartFooterActiveButtonIndex = (cartFooterActiveButtonIndex) => ({\r\n type: types.SET_CART_FOOTER_ACTIVE_BUTTON_INDEX,\r\n payload: {cartFooterActiveButtonIndex}\r\n})\r\n\r\nexport const setCartItemEditFeature = (cartItemEditFeature) => ({\r\n type: types.SET_CART_ITEM_EDIT_FEATURE,\r\n payload: {cartItemEditFeature}\r\n})\r\n\r\nexport const setLookRemovedCartItems = (lookRemovedCartItems) => ({\r\n type: types.SET_LOOK_REMOVED_CART_ITEMS,\r\n payload: {lookRemovedCartItems}\r\n})\r\n\r\nexport const setCItemsAddedToParentCart = (cartItems) => ({\r\n type: types.SET_CART_ITEMS_ADDED_TO_PARENT_CART,\r\n payload: {cartItems}\r\n})\r\n\r\nexport const changeAllCartItems = (cartItems) => ({\r\n type: types.CHANGE_ALL_CART_ITEMS,\r\n payload: {cartItems}\r\n})\r\n\r\nexport const setSureTax = (sureTax) => ({\r\n type: types.SET_SURE_TAX,\r\n payload: {sureTax}\r\n});\r\nexport const setSureTaxLoading = (sureTaxLoading) => ({\r\n type: types.SET_SURE_TAX_LOADING,\r\n payload: {sureTaxLoading}\r\n});\r\nexport const setDeliveryList = (deliveryList) => ({\r\n type: types.SET_DELIVERY_LIST,\r\n payload: {deliveryList}\r\n});\r\n\r\nexport const clearCartAndStartOver = (fullClear = false) => {\r\n return (dispatch) => {\r\n if (fullClear) {\r\n dispatch(setWizardSelectedValues({}, true));\r\n dispatch(setWizardActiveStep(0));\r\n dispatch(updateAllWizardValues([]));\r\n dispatch(setActiveQuoteIndex(0));\r\n dispatch(setQuotes([{}]));\r\n }\r\n dispatch(clearCart()); // clear cart\r\n dispatch(setReceiptUrl(\"\")); // clear receipt\r\n dispatch(setAmazonImageUrl(\"\")); // not sure if it is needed here, but let it be\r\n dispatch(setJobId(0)); // erase current job\r\n document.kvConfig.jobId = null; // erase current job\r\n }\r\n};\r\n\r\nexport const setManualTax = (manualTax) => ({\r\n type: types.SET_MANUAL_TAX,\r\n payload: {manualTax}\r\n});\r\n\r\nexport const setMarkUpLogic = (markUpLogic) => ({\r\n type: types.SET_MARK_UP_LOGIC,\r\n payload: {markUpLogic}\r\n});\r\n\r\n","import orderBy from \"lodash/orderBy\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {cabinetThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport CrownMolding from \"../subparts/cabinet/crownMolding\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport TopCabinetShadow from \"../subparts/cabinet/topCabinetShadow\";\r\nimport BottomCabinetShadow from \"../subparts/cabinet/bottomCabinetShadow\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = cabinetThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.topCabinet = null;\r\n this.bottomCabinet = null;\r\n this.crownMolding = null;\r\n this.topHandle = null;\r\n this.bottomHandle = null;\r\n this.topCabinetShadow = null;\r\n this.bottomCabinetShadow = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Crown Molding\":\r\n relatedItemName = \"crownMolding\";\r\n RelatedItemClass = CrownMolding;\r\n // if (dbFeature.metaData && dbFeature.metaData[\"Parts\"]) {\r\n // relatedItemName = \"crownMolding\";\r\n // RelatedItemClass = CrownMolding;\r\n // }\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n case \"Top Cabinet Shadow\":\r\n relatedItemName = \"topCabinetShadow\";\r\n RelatedItemClass = TopCabinetShadow;\r\n break;\r\n case \"Bottom Cabinet Shadow\":\r\n relatedItemName = \"bottomCabinetShadow\";\r\n RelatedItemClass = BottomCabinetShadow;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Cabinet', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n getRelatedItems() {\r\n return orderBy(this.relatedItems, 'layerPriority');\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .filter(item => {\r\n if ((item.partId === \"crown_molding\" || item.partId === \"top_handle\") && hideWithoutFeatures && item.allFeaturesReceived) {\r\n return item.navigationSubItems({}, \"\").length\r\n }\r\n return item\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getTopCabinetType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n // getTopCabinetLayout() {\r\n //\r\n // if (this.topCabinet && this.topCabinet.activeFeature) {\r\n // if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n // return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n // } else {\r\n // // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n // return \"\"\r\n // }\r\n // }\r\n // return \"ALL\"\r\n // }\r\n\r\n getBottomCabinetType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no bottomCabinet metaData!\", this.bottomCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getTopCabinetApplianceType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.topCabinet.activeFeature);\r\n return \"Hood\"\r\n }\r\n }\r\n return \"Hood\"\r\n }\r\n\r\n getTopCabinetShadowLayout() {\r\n if (this.topCabinet && this.topCabinet.activeFeature && this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n return \"\"\r\n }\r\n\r\n getBottomCabinetApplianceType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.bottomCabinet.activeFeature);\r\n return \"Range\"\r\n }\r\n }\r\n return \"Range\"\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport PropTypes from \"prop-types\";\r\nimport MaterialSpinner from \"./materialSpinner\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\n\r\nconst LoadingSpinner = (props) => {\r\n if (IS_LIXIL_UI) {\r\n return \r\n }\r\n const size = props.size || \"small\"; //class modifier\r\n return
\r\n};\r\n\r\nLoadingSpinner.propTypes = {\r\n size: PropTypes.string\r\n}\r\n\r\nLoadingSpinner.displayName = 'LoadingSpinner';\r\n\r\nexport default LoadingSpinner;\r\n","import {getAvailableSteps, getFeatureGroupFromWizardGroup, navItemIsExcluded} from \"./lookWizardFunctions\";\r\nimport Config, {getCommonVisualizerType} from \"../../../../../config\";\r\nimport {fixWizardItem} from \"./wizardFunctionsCommon\";\r\nimport {\r\n getVisualizerTypeFromSubscription,\r\n hasSubscriptionForRoom\r\n} from \"../../../../../misc/visualizerSwitchingFunctions\";\r\n\r\nexport const getWizardGroupName = (wizardGroup) => {\r\n if (!wizardGroup) {\r\n return \"\"\r\n }\r\n return wizardGroup.title || wizardGroup.customDisplayName || wizardGroup.productCartTitle || wizardGroup.groupName || \"\"\r\n // if (stepName === \"Vanitie\") { // it should be renamed on the backend so no need for that\r\n // stepName = \"Vanity\"\r\n // }\r\n}\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param allWizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getNextWizardSteps = (wizardActiveItem, currentStep, allWizardSelectedValues) => {\r\n// const oldWizardSteps = getAvailableSteps(wizardActiveItem, oldWizardSelectedValues, true);\r\n\r\n let newValues = {};\r\n Object.keys(allWizardSelectedValues).forEach(key => {\r\n if (+key <= currentStep) {\r\n newValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n }\r\n });\r\n\r\n const afterCurrentSelectionWizardSteps = getAvailableSteps(wizardActiveItem, newValues, true, allWizardSelectedValues);\r\n // const allWizardSteps = getAvailableSteps(wizardActiveItem, allWizardSelectedValues, true);\r\n\r\n // const nextStep = currentStep + 1;\r\n\r\n // if (\r\n // afterCurrentSelectionWizardSteps[nextStep] && allWizardSteps[nextStep]\r\n // && afterCurrentSelectionWizardSteps[nextStep].stepGroups.every((wizardGroup, wizardGroupIndex) => {\r\n // return allWizardSteps[nextStep].stepGroups[wizardGroupIndex] && wizardGroup.id === allWizardSteps[nextStep].stepGroups[wizardGroupIndex].id\r\n // }) && (allWizardSelectedValues[nextStep] && allWizardSelectedValues[nextStep].wizardGroup\r\n // && afterCurrentSelectionWizardSteps[nextStep].stepGroups.some(wizG => allWizardSelectedValues[nextStep].wizardGroup.id === wizG.id))\r\n // ) {\r\n // return allWizardSteps // keep it, as we didn't change the flow\r\n // }\r\n\r\n return afterCurrentSelectionWizardSteps // use new ones, as the flow was changed\r\n\r\n}\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param allWizardSelectedValues {object}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @param cartItems {[cartItemInterface]}\r\n * @param newWizardSteps {[]}\r\n * @returns {array}\r\n */\r\nexport const getConflictingWizardSteps = (allWizardSelectedValues, actionPayload, cartItems, newWizardSteps) => {\r\n\r\n const {wizardActiveItem, quoteIndex} = actionPayload;\r\n\r\n const currentStep = +Object.keys(actionPayload.wizardSelectedValues)[0];\r\n\r\n let conflictingWizardSteps = [];\r\n\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return false\r\n }\r\n if ((Object.keys(allWizardSelectedValues).length - 1) === cartItem.fromWizardStep\r\n && (cartItem.fromWizardStep === currentStep)) { // we are reselectecting the same (last selected step), it is not conflicting\r\n return false\r\n }\r\n if (conflictingWizardSteps.some(confObject => confObject.cartItemId === cartItem.id)) { // already added\r\n return false\r\n }\r\n // no more step with this cart item\r\n if (!newWizardSteps.some(step => step.stepGroups.some(wizardGroup => wizardGroup.id === cartItem.fromWizardGroupId))\r\n || !newWizardSteps[cartItem.fromWizardStep]) {\r\n conflictingWizardSteps.push({\r\n stepIndex: cartItem.fromWizardStep,\r\n wizardGroupId: cartItem.fromWizardGroupId,\r\n cartItemId: cartItem.id,\r\n });\r\n } else if (newWizardSteps[cartItem.fromWizardStep + 1] && newWizardSteps[cartItem.fromWizardStep + 1].stepGroups) {\r\n // // here we check if some cart item is added, but his next steps are not anymore in the wizard\r\n //\r\n // // we need to get steps only for before current selected item\r\n // let testValues = {};\r\n // Object.keys(allWizardSelectedValues).forEach(key => {\r\n // if (+key <= cartItem.fromWizardStep) {\r\n // testValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n // }\r\n // });\r\n // const testWizardSteps = getNextWizardSteps(wizardActiveItem, cartItem.fromWizardStep, testValues);\r\n //\r\n // const testGroups = testWizardSteps[cartItem.fromWizardStep + 1] ? testWizardSteps[cartItem.fromWizardStep + 1].stepGroups : null;\r\n // const sameGroupsNew = newWizardSteps[cartItem.fromWizardStep + 1] ? newWizardSteps[cartItem.fromWizardStep + 1].stepGroups : null;\r\n //\r\n // if (testGroups && testGroups.length && sameGroupsNew && sameGroupsNew.length && ((sameGroupsNew.length !== testGroups.length)\r\n // || sameGroupsNew.some((wizardGroup, wizardGroupIndex) => wizardGroup.id !== testGroups[wizardGroupIndex].id))) {\r\n // conflictingWizardSteps.push({\r\n // stepIndex: cartItem.fromWizardStep,\r\n // wizardGroupId: cartItem.fromWizardGroupId,\r\n // cartItemId: cartItem.id,\r\n // });\r\n // }\r\n }\r\n });\r\n\r\n // get current selected wizard value and check if the next one is conflicting - then add the current one to, because it cases the issue\r\n const nextStepKey = currentStep + 1;\r\n if (conflictingWizardSteps.some(confObject => confObject.stepIndex === nextStepKey)) {\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return false\r\n }\r\n if (conflictingWizardSteps.some(confObject => confObject.cartItemId === cartItem.id)) { // already added\r\n return false\r\n }\r\n // no more step with this cart item\r\n if (cartItem.fromWizardStep === currentStep) {\r\n conflictingWizardSteps.unshift({\r\n stepIndex: cartItem.fromWizardStep,\r\n wizardGroupId: cartItem.fromWizardGroupId,\r\n cartItemId: cartItem.id,\r\n });\r\n }\r\n });\r\n }\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // console.log(\"conflictingWizardSteps\", conflictingWizardSteps);\r\n\r\n return conflictingWizardSteps\r\n}\r\n\r\n/**\r\n * this changes cart items wizard groups to use new wizard group ids\r\n * @param newWizardSteps {array}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {object}\r\n */\r\nexport const switchCartItemsToNewWizardGroups = (newWizardSteps, actionPayload, cartItems) => {\r\n\r\n const {wizardActiveItem, quoteIndex} = actionPayload;\r\n\r\n let shouldReassign = false;\r\n\r\n const newCartItems = cartItems.map(cartItem => {\r\n if (!cartItem.fromWizardGroupId || (cartItem.currentQuote !== quoteIndex) || (cartItem.fromWizardId !== wizardActiveItem.id)) {\r\n return cartItem\r\n }\r\n // no more step with this cart item\r\n if (!newWizardSteps.some(step => step.stepGroups.some(wizardGroup => wizardGroup.id === cartItem.fromWizardGroupId))\r\n || !newWizardSteps[cartItem.fromWizardStep]) {\r\n // here we check all next steps, if there are some step with the same wizardGroup, and it has the cartFeature navItem\r\n newWizardSteps.forEach(step => {\r\n if (!step.stepGroups || !step.stepGroups[0] || (step.stepGroups.length > 1)) {\r\n return\r\n }\r\n let testWizG = step.stepGroups[0];\r\n if (testWizG.groupName !== cartItem.cartFeature.dbFeature.groupName) {\r\n return;\r\n }\r\n if (testWizG.mergedGroups) {\r\n // check only next wizardGroup selectedFeatures, not all of them (merged)\r\n testWizG = testWizG.mergedGroups.find(mergedGroup => mergedGroup.id === step.stepGroups[0].id)\r\n || testWizG.mergedGroups.find(mergedGroup => !navItemIsExcluded({part: cartItem.cartFeature}, mergedGroup))\r\n }\r\n if ((testWizG.mergedGroups && testWizG) || !navItemIsExcluded({part: cartItem.cartFeature}, testWizG)) {\r\n shouldReassign = true;\r\n cartItem.fromWizardStep = step.stepIndex;\r\n cartItem.fromWizardGroupId = testWizG.id;\r\n console.log(\"cartItem changed!\", cartItem);\r\n }\r\n })\r\n }\r\n return cartItem\r\n });\r\n\r\n return {newCartItems, shouldReassign}\r\n}\r\n\r\nexport const selectedWizardGroupIsNotInCurrentStepAnymore = (selectedWizardValue, currentStepGroups) => {\r\n const stepWizGroup = currentStepGroups[0]; // could be merged\r\n const selectedWizardGroup = selectedWizardValue ? selectedWizardValue.wizardGroup : null;\r\n if (currentStepGroups.length > 1 && stepWizGroup && currentStepGroups.some(wG => wG.id === selectedWizardGroup.id)) {\r\n return false\r\n }\r\n return selectedWizardGroup && stepWizGroup && (selectedWizardGroup.id !== stepWizGroup.id)\r\n && (!stepWizGroup.mergedGroups || !stepWizGroup.mergedGroups.length\r\n || !stepWizGroup.mergedGroups.some(mG => mG.id === selectedWizardGroup.id))\r\n}\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param newWizValues {object}\r\n * @param newWizardSteps {array}\r\n // * @param cartItems {[cartItemInterface]}\r\n * @returns {object}\r\n */\r\nexport const changeWizardValuesToUseNewGroups = (newWizValues, newWizardSteps) => {\r\n\r\n let shouldReassignValues = false;\r\n let updatedWizardValues = Object.assign({}, newWizValues);\r\n\r\n Object.keys(updatedWizardValues).forEach(key => { // here we replace wizard values to match new selections! to prevent conflicting\r\n // if there are no wizardGroup anymore in the next flow, but it was selected earlier - set new wizardGroup\r\n if (updatedWizardValues[key].wizardGroup\r\n && updatedWizardValues[key].selectedFeature\r\n && !newWizardSteps.some(step => (step.stepGroups.length === 1) && (step.stepGroups[0].id === updatedWizardValues[key].wizardGroup.id))\r\n && (newWizardSteps[key] && newWizardSteps[key].stepGroups && (newWizardSteps[key].stepGroups.length === 1)\r\n && (updatedWizardValues[key].wizardGroup.groupName === newWizardSteps[key].stepGroups[0].groupName)\r\n && !navItemIsExcluded({part: updatedWizardValues[key].selectedFeature}, newWizardSteps[key].stepGroups[0])\r\n )) {\r\n shouldReassignValues = true;\r\n updatedWizardValues[key].wizardGroup = newWizardSteps[key].stepGroups[0];\r\n // console.log(\"wizardGroup updated!\", updatedWizardValues[key]);\r\n }\r\n });\r\n\r\n const erasedValues = {};\r\n\r\n // here we go through all new wizard steps - and check old values - if there are something selected and it is not\r\n // anymore in the flow - but there is a step - assign new wizard selected value\r\n newWizardSteps.forEach(newWizardStep => {\r\n if (newWizardStep.stepGroups.length !== 1 || newWizardStep.stepGroups[0].nodeType !== \"group\") {\r\n return\r\n }\r\n const stepWizGroup = newWizardStep.stepGroups[0]; // could be merged\r\n if (!updatedWizardValues[newWizardStep.stepIndex] ||\r\n (updatedWizardValues[newWizardStep.stepIndex]\r\n && updatedWizardValues[newWizardStep.stepIndex].wizardGroup\r\n && (updatedWizardValues[newWizardStep.stepIndex].wizardGroup.groupName !== stepWizGroup.groupName\r\n // we still need to get inside if group is not valid - to erase it as we don't need it! we will assign a new one below if needed\r\n || selectedWizardGroupIsNotInCurrentStepAnymore(updatedWizardValues[newWizardStep.stepIndex], newWizardStep.stepGroups))\r\n )) {\r\n // we have a step and the value selected is incorrect - go ahead and find something similar\r\n let updated = false;\r\n Object.keys(newWizValues).forEach(key => { // here we replace wizard values to match new selections! to prevent conflicting\r\n // if there are no wizardGroup anymore in the next flow, but it was selected earlier - set new wizardGroup\r\n if (newWizValues[key].wizardGroup\r\n && newWizValues[key].selectedFeature\r\n && newWizValues[key].wizardGroup.groupName === stepWizGroup.groupName\r\n && (!newWizardSteps[key] || (newWizardSteps[key].stepGroups.length !== 1) || newWizValues[key].wizardGroup.groupName !== newWizardSteps[key].stepGroups[0].groupName)\r\n && !navItemIsExcluded({part: newWizValues[key].selectedFeature}, stepWizGroup)) {\r\n\r\n shouldReassignValues = true;\r\n erasedValues[newWizardStep.stepIndex] = Object.assign({}, updatedWizardValues[newWizardStep.stepIndex]); // save it first, to restore below\r\n updatedWizardValues[newWizardStep.stepIndex] = Object.assign({}, newWizValues[key], {\r\n wizardGroup: stepWizGroup,\r\n });\r\n updated = true;\r\n // updatedWizardValues[key] = {}; // clear old step\r\n // console.log(\"wizardGroup updated throw all steps search!\", updatedWizardValues[key]);\r\n }\r\n });\r\n if (!updated) {\r\n erasedValues[newWizardStep.stepIndex] = Object.assign({}, updatedWizardValues[newWizardStep.stepIndex]); // save it first, to restore below\r\n updatedWizardValues[newWizardStep.stepIndex] = {};\r\n delete updatedWizardValues[newWizardStep.stepIndex];\r\n }\r\n }\r\n });\r\n\r\n // console.log(\"erasedValues\", erasedValues);\r\n\r\n // 3) here we go through again through steps and check if we erased something but it exist in the next flow\r\n newWizardSteps.forEach(newWizardStep => {\r\n if (newWizardStep.stepGroups.length !== 1 || newWizardStep.stepGroups[0].nodeType !== \"group\") {\r\n return\r\n }\r\n const stepWizGroup = newWizardStep.stepGroups[0]; // could be merged\r\n if (!updatedWizardValues[newWizardStep] || !updatedWizardValues[newWizardStep].wizardGroup) {\r\n Object.keys(erasedValues).forEach(key => {\r\n if (erasedValues[key].wizardGroup && erasedValues[key].selectedFeature\r\n && (erasedValues[key].wizardGroup.groupName === stepWizGroup.groupName)\r\n && !navItemIsExcluded({part: erasedValues[key].selectedFeature}, stepWizGroup)) {\r\n updatedWizardValues[newWizardStep.stepIndex] = Object.assign({}, newWizValues[key], {\r\n wizardGroup: stepWizGroup,\r\n });\r\n // console.log(\"USE ERASED LOGIC\", updatedWizardValues[newWizardStep.stepIndex]);\r\n erasedValues[key] = {}; // use it only once! then delete\r\n }\r\n })\r\n }\r\n });\r\n\r\n // now go again and set missing wizard groups\r\n Object.keys(updatedWizardValues).forEach(key => {\r\n if (!updatedWizardValues[key] || !updatedWizardValues[key].wizardGroup || !newWizardSteps[key]\r\n || !newWizardSteps[key].stepGroups.length || (newWizardSteps[key].stepGroups.length !== 1)) { // we set wizard group only if the next one is selected\r\n return\r\n }\r\n // const nextSelectedValue = updatedWizardValues[key + 1];\r\n // const selectedWizGroup = updatedWizardValues[key].wizardGroup;\r\n const newWizGroup = newWizardSteps[key].stepGroups[0];\r\n\r\n if (selectedWizardGroupIsNotInCurrentStepAnymore(updatedWizardValues[key], newWizardSteps[key].stepGroups)) {\r\n // set wizard group as we might have cart items added to this group, we can't have it disabled\r\n updatedWizardValues[key] = {\r\n wizardGroup: newWizGroup\r\n }\r\n }\r\n });\r\n\r\n //last update - make sure that every wizard group is selected if we have cart item in the group below\r\n // const lastSelectedStep = Object.keys(updatedWizardValues).reverse().find(lastKey => updatedWizardValues[lastKey] && updatedWizardValues[lastKey].wizardGroup);\r\n Object.keys(updatedWizardValues).forEach(key => {\r\n if (!updatedWizardValues[key].wizardGroup && newWizardSteps[key] && newWizardSteps[key].stepGroups.length\r\n && (newWizardSteps[key].stepGroups.length === 1) && updatedWizardValues[+key + 1] && updatedWizardValues[+key + 1].wizardGroup) {\r\n // we set wizard group only if the next one is selected\r\n updatedWizardValues[key] = {\r\n wizardGroup: newWizardSteps[key].stepGroups[0]\r\n }\r\n }\r\n });\r\n\r\n return {updatedWizardValues, shouldReassignValues}\r\n}\r\n\r\n/**\r\n * @param partId {string}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param isBathroom {boolean}\r\n * @returns {boolean}\r\n */\r\nconst checkFeatureGroupForOpposite = (partId, featureGroup, isBathroom) => {\r\n switch (partId) {\r\n case \"backsplash\":\r\n return isBathroom && (featureGroup.partId === \"vanity_backsplash\")\r\n case \"center_island_edge\":\r\n return featureGroup.partId === \"edge_profile\"\r\n case \"edge_profile\":\r\n return featureGroup.partId === \"center_island_edge\"\r\n case \"countertop\":\r\n return (featureGroup.partId === \"center_island_countertop\") || (isBathroom && (featureGroup.partId === \"vanity_countertop\"))\r\n case \"center_island_countertop\":\r\n return (featureGroup.partId === \"countertop\") || (isBathroom && (featureGroup.partId === \"vanity_countertop\"))\r\n case \"corners\":\r\n return featureGroup.partId === \"radius\"\r\n default:\r\n return featureGroup.partId === partId\r\n }\r\n}\r\n\r\n/**\r\n * @param wizardSteps {array}\r\n * @param cartItem {cartItemInterface}\r\n * @returns foundStep {object}\r\n */\r\nexport const getWizardStepFromCartItemFeature = (wizardSteps, cartItem) => {\r\n let foundStep = wizardSteps.find(step => step.stepGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n return featureGroup && featureGroup.partId === cartItem.partId\r\n }));\r\n if (!foundStep) {\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n foundStep = wizardSteps.find(step => step.stepGroups.some(wizardGroup => {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (!featureGroup) {\r\n return false\r\n }\r\n return checkFeatureGroupForOpposite(cartItem.partId, featureGroup, isBathroom)\r\n }));\r\n }\r\n return foundStep\r\n}\r\n\r\n/**\r\n * @param wizardSteps {array}\r\n * @param partId {string}\r\n * @returns {object}\r\n */\r\nexport const getFeatureGroupFromWizardSteps = (wizardSteps, partId) => {\r\n for (const step of wizardSteps) {\r\n for (const wizardGroup of step.stepGroups) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && featureGroup.partId === partId) {\r\n return {part: featureGroup}\r\n }\r\n }\r\n }\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n for (const step of wizardSteps) {\r\n for (const wizardGroup of step.stepGroups) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n if (featureGroup && checkFeatureGroupForOpposite(partId, featureGroup, isBathroom)) {\r\n return {part: featureGroup}\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst parseWizardData = (wizardData) => {\r\n let allItems = typeof wizardData === \"string\" ? JSON.parse(wizardData) : [];\r\n if (typeof wizardData === \"object\" && (wizardData != null)) {\r\n Object.keys(wizardData).forEach(key => {\r\n allItems = [...allItems, ...JSON.parse(wizardData[key])]\r\n });\r\n }\r\n return allItems\r\n}\r\n\r\n/**\r\n * @param mainResponse\r\n * @param parseOnly {boolean}\r\n * @param newVisualizerType {string}\r\n * @returns {array}\r\n */\r\nexport const getParsedWizardList = (mainResponse, parseOnly, newVisualizerType = \"\") => {\r\n const {wizardData, wizardDataV2} = mainResponse;\r\n const allItems = parseWizardData(wizardDataV2 || wizardData); // if we have v2 - use it, else old support\r\n if (Config.isDevMode()) {\r\n console.log(\"all wizardItems \", allItems);\r\n }\r\n if (parseOnly) {\r\n return allItems.filter(wizardItem => wizardItem.enabled)\r\n }\r\n const wizardList = allItems\r\n .filter(wizardItem => wizardItem.enabled)\r\n .map((wizardItem, wizardItemIndex) => {\r\n wizardItem = fixWizardItem(wizardItem, wizardItemIndex, false, newVisualizerType);\r\n if (wizardItem.visualizer === \"all\") {\r\n wizardItem.visualizer = getCommonVisualizerType(newVisualizerType); // we keep same wizard as different\r\n wizardItem.id = wizardItem.id + 100;\r\n }\r\n wizardItem.id = getUpdatedWizardId(wizardItem.visualizer, wizardItem.id);\r\n return wizardItem\r\n });\r\n console.log(\"wizardList\", wizardList);\r\n return wizardList\r\n}\r\n\r\n/**\r\n * same function for wizard item and cart item on parse - it returns new wizard id depending on the visualizer\r\n * @param visualizerType {string}\r\n * @param oldWizardItemId {number}\r\n * @returns {number}\r\n */\r\nexport const getUpdatedWizardId = (visualizerType, oldWizardItemId) => {\r\n switch (getCommonVisualizerType(visualizerType)) {\r\n case \"laundryroom\":\r\n if (oldWizardItemId < 3000) {\r\n return oldWizardItemId + 3000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n case \"fireplace\":\r\n if (oldWizardItemId < 2000) {\r\n return oldWizardItemId + 2000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n case \"bathroom\":\r\n if (oldWizardItemId < 1000) {\r\n return oldWizardItemId + 1000 // increase because we don't want to have same id's\r\n }\r\n break;\r\n default:\r\n return oldWizardItemId // keep as is for kitchen\r\n }\r\n}\r\n\r\n/**\r\n * returns lowercased visualizer (bathroom | kitchen | fireplace) same as in the wizard item depending on wizardItem id\r\n * @param wizardItem {wizardItemInterface | wizardAllObjectInterface}\r\n * @param withToolVersion {boolean}\r\n * @returns {string} bathroom | kitchen | fireplace\r\n */\r\nexport const getWizardVisualizerType = (wizardItem, withToolVersion = false) => {\r\n\r\n let commonName = wizardItem.visualizer;\r\n\r\n if (!commonName) {\r\n commonName = \"kitchen\";\r\n const wizardItemId = wizardItem.id || wizardItem.wizardItemId;\r\n if (wizardItemId > 3000) {\r\n commonName = \"laundryroom\";\r\n } if (wizardItemId > 2000) {\r\n commonName = \"fireplace\";\r\n } else if (wizardItemId > 1000) {\r\n commonName = \"bathroom\";\r\n }\r\n }\r\n\r\n if (withToolVersion) {\r\n const existingSubscription = hasSubscriptionForRoom(commonName);\r\n if (existingSubscription) {\r\n return getVisualizerTypeFromSubscription(existingSubscription);\r\n }\r\n return commonName\r\n }\r\n return commonName\r\n}\r\n\r\n/**\r\n * checks if current wizard can be used in the visualizer\r\n * @param wizardItem {wizardItemInterface | wizardAllObjectInterface}\r\n * @param visualizerType {string}\r\n * @returns {boolean}\r\n */\r\nexport const isSameVisualizerWizard = (wizardItem, visualizerType = getCommonVisualizerType()) => {\r\n if (wizardItem.visualizer === \"all\") { // should not ever be here\r\n return true\r\n }\r\n if (wizardItem.visualizer) {\r\n return wizardItem.visualizer === visualizerType\r\n }\r\n return getWizardVisualizerType(wizardItem) === visualizerType\r\n}\r\n","import React from \"react\";\r\n\r\nexport const PrintDocumentContext = React.createContext({\r\n messages: {}\r\n});\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport {renderMeasurementsAroundSnappedShapes, renderSlabRightPart, renderSlabWorkspace} from \"./sqftSlabDraw\";\r\nimport workspace from \"../workspace\";\r\nimport SlabAdditionalShapes from \"./slabAdditionalShapes\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport StaticImage from \"../workspace/image/StaticImage\";\r\nimport workspaceZoom from \"../workspaceZoom\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport {getClosestHigherNumber} from \"../../../../helpers/sqftHelper\";\r\nimport store from \"../../../../../../store\";\r\n\r\nconst SlabWorkspace = function() {\r\n this.eventManager = EventManager;\r\n this.objectName = {name: 'SlabWorkspace'};\r\n this.leftImagePos = {\r\n x: 0,\r\n y: 0,\r\n };\r\n this.state = {\r\n inEnabled: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isCenterButtonRightPartHovered: false,\r\n isCenterButtonLeftPartHovered: false,\r\n rightPartZoomedShapeId: 1,\r\n leftPartZoomedShapeId: 1,\r\n isSlabPlaceHolderPresent: false,\r\n }\r\n this.pos = {\r\n x: 0,\r\n y: 0,\r\n };\r\n this.slabAdditionalShapes = new SlabAdditionalShapes();\r\n this.measurementPoints = [];\r\n this.shapeOffset = null;\r\n this.centerButtonRightPart = null;\r\n this.centerButtonLeftPart = null;\r\n\r\n this.getOffset = function() {\r\n return this.getCenter()\r\n };\r\n\r\n this.getPos = () => {\r\n return this.pos\r\n };\r\n\r\n this.setPos = function(pos) {\r\n this.pos = {...pos}\r\n };\r\n\r\n this.getCenter = function() {\r\n return this.pos\r\n };\r\n\r\n this.setEnabled = (val) => {\r\n this.state.inEnabled = val\r\n };\r\n\r\n this.setSlabPlaceHolderPresent = (val) => {\r\n this.state.isSlabPlaceHolderPresent = val\r\n };\r\n\r\n this.getRightPartWidth = () => {\r\n return workspace.getCanvas().width / 2\r\n };\r\n\r\n this.getShapeOffset = () => {\r\n return this.shapeOffset\r\n };\r\n\r\n this.init = () => {\r\n this.initRightPart();\r\n this.initLeftPart();\r\n }\r\n\r\n this.initRightPart = () => {\r\n this.centerButtonRightPart = new StaticImage(\r\n 'eyeball',\r\n this.eventManager.getCtx().canvas.width - 40 - sqftSlabManager.centerButton.width,\r\n 30,\r\n sqftSlabManager.centerButton.width,\r\n sqftSlabManager.centerButton.height,\r\n false,\r\n true,\r\n this.beforeRenderCenterButtonRightPart.bind(this)\r\n );\r\n this.centerButtonLeftPart = new StaticImage(\r\n 'eyeball',\r\n this.eventManager.getCtx().canvas.width / 2 - 40 - sqftSlabManager.centerButton.width,\r\n 30,\r\n sqftSlabManager.centerButton.width,\r\n sqftSlabManager.centerButton.height,\r\n false,\r\n true,\r\n this.beforeRenderCenterButtonLeftPart.bind(this)\r\n );\r\n this.initSlabWorkspaceEvents();\r\n }\r\n\r\n this.initLeftPart = () => {\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.renderSlabLeftPartWrapper,\r\n this.objectName,\r\n this.eventManager.priorities.SEGMENT_MEASUREMENTS\r\n );\r\n }\r\n\r\n this.initSlabWorkspaceEvents = function() {\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this.objectName,\r\n EventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this.objectName,\r\n EventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.WHEEL,\r\n this.onWheel,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n renderSlabWorkspace,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_WORKSPACE\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.renderSlabRightPartWrapper,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.centerButtonRightPart.render,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n this.eventManager.addEvent(\r\n this.eventManager.events.RENDER,\r\n this.centerButtonLeftPart.render,\r\n this.objectName,\r\n this.eventManager.priorities.SLAB_RIGHT_PART_CONTENT\r\n );\r\n };\r\n\r\n this.disableSlabImages = () => {\r\n this.eventManager.removeEvent(this.objectName);\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n this.eventManager.removeEvent(this.objectName);\r\n };\r\n\r\n this.onMouseDown = (mousePos, e) => {\r\n void e;\r\n if (this.state.isCenterButtonLeftPartHovered) {\r\n this.eyeballButtonLeftPartClick();\r\n }\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n if (this.state.isCenterButtonRightPartHovered) {\r\n this.eyeballButtonRightPartClick();\r\n }\r\n this.eventManager.stealCursor(true, true);\r\n this.state.mouseDown = true;\r\n this.state.mouseDownPosition = mousePos;\r\n this.eventManager.setCursor('grabbing', this, false);\r\n\r\n return true;\r\n };\r\n\r\n this.onMouseUp = (mousePos, e) => {\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n\r\n return this.onMouseMove(mousePos, e);\r\n }\r\n\r\n this.onMouseMove = (mousePos, e) => {\r\n if (e.terminate) {\r\n return false;\r\n }\r\n this.state.isCenterButtonLeftPartHovered = this.centerButtonLeftPart.isHovered(mousePos);\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n this.state.isCenterButtonRightPartHovered = this.centerButtonRightPart.isHovered(mousePos);\r\n if (this.state.mouseDown) {\r\n this.moveSlabWorkspace(mousePos);\r\n } else {\r\n this.eventManager.resetCursor(this);\r\n }\r\n return true;\r\n }\r\n\r\n this.onWheel = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n\r\n return true;\r\n }\r\n this.moveSlabWorkspace = (mousePos) => {\r\n if (!this.isOverRightPart(mousePos)) {\r\n return false;\r\n }\r\n let xDiff = mousePos.x - this.state.mouseDownPosition.x;\r\n let yDiff = mousePos.y - this.state.mouseDownPosition.y;\r\n\r\n this.pos.x -= xDiff;\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n\r\n this.pos.y -= yDiff;\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n };\r\n\r\n this.beforeRenderCenterButtonRightPart = () => {\r\n this.centerButtonRightPart.x = this.eventManager.getCtx().canvas.width - 40 - sqftSlabManager.centerButton.width;\r\n };\r\n\r\n this.beforeRenderCenterButtonLeftPart = () => {\r\n this.centerButtonLeftPart.x = this.eventManager.getCtx().canvas.width / 2 - 40 - sqftSlabManager.centerButton.width;\r\n };\r\n\r\n this.eyeballButtonRightPartClick = () => {\r\n const shapesIds = workspace.getShapeIds();\r\n const closestHigherNumber = getClosestHigherNumber(this.state.rightPartZoomedShapeId, shapesIds);\r\n const shape = workspace.getShapeById(closestHigherNumber);\r\n\r\n if (shape instanceof sqftShape) {\r\n workspaceZoom.zoomToSlabShape(shape, true);\r\n this.state.rightPartZoomedShapeId = shape.id\r\n } else {\r\n this.state.rightPartZoomedShapeId = closestHigherNumber === null ? 0 : closestHigherNumber;\r\n this.eyeballButtonRightPartClick()\r\n }\r\n return false\r\n };\r\n\r\n this.eyeballButtonLeftPartClick = () => {\r\n const shapesIds = workspace.getShapeIds();\r\n const closestHigherNumber = getClosestHigherNumber(this.state.leftPartZoomedShapeId, shapesIds);\r\n const shape = workspace.getShapeById(closestHigherNumber);\r\n\r\n if (shape instanceof sqftShape) {\r\n workspaceZoom.zoomToShape(shape, true);\r\n this.state.leftPartZoomedShapeId = shape.id\r\n } else {\r\n this.state.leftPartZoomedShapeId = closestHigherNumber === null ? 0 : closestHigherNumber;\r\n this.eyeballButtonLeftPartClick()\r\n }\r\n return false\r\n };\r\n\r\n this.isOverRightPart = (mousePos = {x: 0}) => {\r\n let rpw = this.getRightPartWidth();\r\n\r\n return mousePos.x > rpw\r\n };\r\n\r\n this.renderSlabRightPartWrapper = (ctx, isFullRender = false) => {\r\n //if (this.state.setSlabPlaceHolderPresent) {\r\n return renderSlabRightPart(ctx, isFullRender);\r\n //}\r\n };\r\n this.renderSlabLeftPartWrapper = (ctx) => {\r\n const reduxState = store.getState()\r\n let isMeasurementVisibleInSlabMode = reduxState.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n if (isMeasurementVisibleInSlabMode) {\r\n renderMeasurementsAroundSnappedShapes(ctx, this.measurementPoints);\r\n }\r\n };\r\n};\r\n\r\nexport default new SlabWorkspace;\r\n","import {getCurrentLayout} from \"../../appLayout\";\r\nimport store from \"../../../store\";\r\nimport config from \"../components/canvas/store/sqftConfig\";\r\n//import ManualCalculate from \"../components/canvas/core/controls/manualCalculate\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport history from \"../components/canvas/core/workspaceHistory\";\r\nimport {\r\n enableSquareFootage,\r\n setSQFTViewMode,\r\n setSquareFootageGroup,\r\n updateSQFTCalculations\r\n} from \"../../../actions/sqftFunctions\";\r\nimport {toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {manualCalculateImport} from \"./sqftDataMapper\";\r\nimport {getInitialManualCalcRows} from \"../../../reducers/sqftManualCalculationReducer\";\r\nimport {updateManualCalculateRows} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {hashHistory} from \"react-router\";\r\nimport {\r\n getAvailableSteps,\r\n navItemIsExcluded\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getNextNotCheckedStep} from \"../../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport {setMeasureUnit} from \"./sqftConfigHelper\";\r\nimport {SQFT_VIEW_MODE} from \"../constants\";\r\n\r\nexport const getFeatureGroup = (mainNeeded = \"center_island_countertop\") => {\r\n const layout = getCurrentLayout();\r\n let featureGroup = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroup) {\r\n const foundGroup = layout.getFeatureGroupByPartId(mainNeeded);\r\n if (foundGroup) {\r\n featureGroup = {part: foundGroup}\r\n }\r\n }\r\n if (!featureGroup) {\r\n featureGroup = layout.parts[\"Countertop\"] && layout.parts[\"Countertop\"].countertop\r\n ? {part: layout.parts[\"Countertop\"].countertop}\r\n : null;\r\n }\r\n\r\n return featureGroup\r\n}\r\n\r\nexport const getNavItems = (featureGroup, searchText = \"\", filters= {}, withPlaceholders = true, withQuotingToolFeatures = false) => {\r\n let navItems = [];\r\n if (!featureGroup) {\r\n return navItems\r\n }\r\n let checkFeatureGroup = featureGroup.part ? featureGroup : {part: featureGroup}\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(checkFeatureGroup, searchText, filters);\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(checkFeatureGroup,\r\n filters,\r\n searchText,\r\n withPlaceholders,\r\n withQuotingToolFeatures,\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n return navItems;\r\n}\r\n\r\nexport const onSQFTLoadPrepareData = () => {\r\n const layout = getCurrentLayout();\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const filterGroups = state.filterState.filterGroups;\r\n const fabricatorData = state.fabricatorState;\r\n\r\n //if (this.iframeElement && this.iframeElement.contentWindow) {\r\n const activeQuote = quotes[activeQuoteIndex];\r\n //const {intl, fabricatorData} = this.props;\r\n const measureUnit = fabricatorData.settings.measureUnit;\r\n const payload = {\r\n loadData: (activeQuote && activeQuote.sqFtCalcData) ? activeQuote.sqFtCalcData : null,\r\n measureUnit,\r\n fabricatorId: document.kvConfig.userId,\r\n fabricatorData,\r\n currentLayout: layout.getCurrentLayoutAbbreviation(),\r\n filterGroups: filterGroups,\r\n //language: intl.locale\r\n }\r\n // if (hardCodeIsLowes()) {\r\n // let translates = {}\r\n // Object.keys(intl.messages).forEach(messageKey => {\r\n // if (messageKey.startsWith(\"transDoc.\")) {\r\n // if (!translates[intl.locale]) {\r\n // translates[intl.locale] = {};\r\n // }\r\n // translates[intl.locale][messageKey] = intl.messages[messageKey]\r\n // }\r\n // })\r\n // payload.translates = translates;\r\n // }\r\n console.log(\"sqft postMessage initial load data:\", payload);\r\n\r\n return payload;\r\n //}\r\n};\r\n\r\n//todo is this all needed?\r\nexport const onSQFTLoadImport = (payload) => {\r\n let {fabricatorId, fabricatorData, currentLayout, measureUnit, loadData, filterGroups} = payload;\r\n config.fabricatorData = fabricatorData;\r\n window.fabricatorId = fabricatorId;\r\n window.currentLayout = currentLayout;\r\n config.filterGroups = filterGroups;\r\n //TranslatesProvider.replaceHtml(language, translates);\r\n // config.fabricatorData = fabricatorData; // set if needed\r\n\r\n //todo\r\n //toolbar.setFabricatorButtons(fabricatorData); // specific fabricator rules\r\n if (measureUnit) {\r\n [].slice.call(document.querySelectorAll(\".settings-units [data-value]\")).forEach(element => {\r\n (element.dataset.value === measureUnit)\r\n ? element.classList.add(\"active\")\r\n : element.classList.remove(\"active\")\r\n });\r\n setMeasureUnit(measureUnit);\r\n history.rememberConfig({measureUnit});\r\n //todo\r\n //ManualCalculate.onMeasureUnitChange();\r\n }\r\n if (loadData) {\r\n loadData = (typeof loadData === 'string') ? JSON.parse(loadData) : loadData;\r\n if (loadData.manualCalculate === true) {\r\n manualCalculateImport(loadData);\r\n } else {\r\n workspace.import(loadData);\r\n }\r\n } else if (!config.tutorialIsRunning) {\r\n workspace.import({}); // if new room is opened - clear the previous(but not the first time if tutorial is active)\r\n store.dispatch(updateManualCalculateRows(getInitialManualCalcRows()));\r\n //todo\r\n //ManualCalculate.import({})\r\n } else {\r\n store.dispatch(updateManualCalculateRows(getInitialManualCalcRows()));\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n}\r\n\r\nexport const closeSQFTTool = (redirectToPage, shouldChangeWizardToNextStep, changeWizardStepRoute) => {\r\n const isSQFTinUrl = window.location.hash.includes(\"sqft\");\r\n store.dispatch(setSQFTViewMode(SQFT_VIEW_MODE.twoDMode));\r\n\r\n if (isSQFTinUrl) {\r\n hashHistory.push(redirectToPage);\r\n } else {\r\n store.dispatch(enableSquareFootage(false));\r\n store.dispatch(setSquareFootageGroup(null));\r\n if (shouldChangeWizardToNextStep) {\r\n changeWizardToNextStep(changeWizardStepRoute)\r\n }\r\n }\r\n}\r\n\r\nexport const changeWizardToNextStep = (changeWizardStepRoute) => {\r\n const state = store.getState();\r\n const {wizardIsActive, wizardActiveStep, wizardSelectedValues, wizardActiveItem} = state.wizardState;\r\n const {cartItems} = state.cartState;\r\n const {activeQuoteIndex} = state.quotesState;\r\n const {selectionFeatureInfo} = state.selectionState;\r\n if (wizardIsActive && wizardActiveItem) {\r\n if (selectionFeatureInfo) {\r\n store.dispatch(toggleSelectionFeatureInfo(null));\r\n }\r\n const realNextStep = getNextNotCheckedStep(wizardActiveItem, wizardActiveStep, wizardSelectedValues, cartItems, activeQuoteIndex);\r\n changeWizardStepRoute(realNextStep);\r\n }\r\n}\r\n\r\nexport const getNavItemsFromTheWizard = (subPart, searchText = \"\", filters= {}, wizardGroupId = null, visualizerType = document.kvConfig.visualizerType, withGroupIds = false) => {\r\n\r\n let groupName = subPart.part.wasCreatedFromGroupName || subPart.part.dbName || subPart.part.partName; //assign same stems as for the parent featureGroup (for the slabs)\r\n const wizardSteps = getWizardGroupsFromTheWizard(groupName, wizardGroupId);\r\n const layout = getCurrentLayout(visualizerType);\r\n const navItems = layout.designNavigationItems(subPart, filters, searchText, false, \"all\");\r\n\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n let allNavItems = [];\r\n if (wizardSteps.length) {\r\n if (wizardSteps.length === 1) {\r\n const navItemsFromWizardGroup = navItems.filter(navItem => !navItemIsExcluded(navItem, wizardSteps[0].stepGroups[0]))\r\n if (navItemsFromWizardGroup.length) {\r\n allNavItems = navItemsFromWizardGroup\r\n if (!wizardGroupId && withGroupIds) {\r\n allNavItems = allNavItems.map(navItem => {\r\n return {...navItem, newWizardGroupId: wizardSteps[0].stepGroups[0].id, newWizardStep: wizardSteps[0].stepIndex}\r\n })\r\n }\r\n }\r\n } else {\r\n for (const wizardStep of wizardSteps) {\r\n const navItemsFromWizardGroup = navItems.filter(navItem => !navItemIsExcluded(navItem, wizardStep.stepGroups[0]));\r\n if (navItemsFromWizardGroup.length) {\r\n if (!allNavItems.length) {\r\n allNavItems = navItemsFromWizardGroup;\r\n if (!wizardGroupId && withGroupIds) {\r\n allNavItems = allNavItems.map(navItem => {\r\n return {...navItem, newWizardGroupId: wizardStep.stepGroups[0].id, newWizardStep: wizardStep.stepIndex}\r\n })\r\n }\r\n } else {\r\n navItemsFromWizardGroup.forEach(newNavItem => {\r\n if (!allNavItems.some(navItem => navItem.part.dbFeature.id === newNavItem.part.dbFeature.id)) {\r\n allNavItems.push(\r\n !wizardGroupId && withGroupIds\r\n ? {...newNavItem, newWizardGroupId: wizardStep.stepGroups[0].id, newWizardStep: wizardStep.stepIndex}\r\n : newNavItem\r\n )\r\n }\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return allNavItems\r\n}\r\n\r\n/**\r\n * returns all wizardGroups with current groupName and wizard group id if provided\r\n * @param groupName {string}\r\n * @param wizardGroupId {string|number|null}\r\n * @param forFeature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getWizardGroupsFromTheWizard = (groupName, wizardGroupId = null, forFeature = null) => {\r\n const state = store.getState();\r\n const {wizardActiveItem, wizardSelectedValues} = state.wizardState;\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n\r\n return wizardSteps.filter((wizardStep) => {\r\n if (wizardStep.stepGroups.length !== 1 || (wizardStep.stepGroups[0].groupName !== groupName)) {\r\n return false\r\n }\r\n if (wizardGroupId && (wizardStep.stepGroups[0].id !== wizardGroupId)) {\r\n return false\r\n }\r\n if (forFeature) {\r\n return !navItemIsExcluded({part: forFeature}, wizardStep.stepGroups[0])\r\n }\r\n return true\r\n });\r\n}\r\n\r\nexport const getUnderlaymentFeature = () => {\r\n const underlaymentFeatureGroup = getFeatureGroup('underlayment');\r\n const state = store.getState();\r\n const {wizardIsActive} = state.wizardState;\r\n let navItems;\r\n if (wizardIsActive) {\r\n navItems = getNavItemsFromTheWizard(underlaymentFeatureGroup, \"\", {});\r\n } else {\r\n const layout = getCurrentLayout();\r\n navItems = layout.designNavigationItems(underlaymentFeatureGroup,\r\n {},\r\n \"\",\r\n false,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n }\r\n\r\n const underlaymentFeaureName = 'Xtone Underlayment';\r\n const underlaymentFeaure = navItems.find(navItem => navItem.part.getFeatureName() === underlaymentFeaureName);\r\n if (underlaymentFeaure) {\r\n return underlaymentFeaure\r\n }\r\n\r\n return navItems.length ? navItems[0] : null\r\n}\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n this.confirmedChange = false; // same as firstClick, but fires after someone changes feature and confirms changes\r\n this.featureBeforeChange = null; // feature that sets when menu is opened (to revert it back if user didn't confirm change)\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {boolean}\r\n */\r\n matchesMetaForCondition(name, value) {\r\n if (name === \"WaterLevel\" && this.partId === \"vanity_faucet\") {\r\n return this.metaData[\"Height\"] && this.metaData[\"Height\"] > value\r\n }\r\n if (name === \"SinkWidth\" && this.partId === \"vanity_sink\") {\r\n // if no metadata - return true! back compatability\r\n return !this.metaData[\"SinkWidth\"] || (this.metaData[\"SinkWidth\"] < value)// current sink should be smaller than Vanity\r\n }\r\n if (name === \"MountLevel\" && this.partId === \"vanity_sink\"\r\n && (!Array.isArray(this.metaData[\"MountType\"]) || !this.metaData[\"MountType\"].includes(\"V\"))) {\r\n // sinks without the MountType V should ignore MountLevel metaData, they should be checked my MountType only\r\n return true\r\n }\r\n if (!this.metaData[name]) {\r\n return false\r\n }\r\n if (Array.isArray(this.metaData[name])) {\r\n return this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n return this.metaData[name] === METADATA.ALL\r\n || (Array.isArray(value) ? value.some(val => iCmp(this.metaData[name], val)) : iCmp(this.metaData[name], value))\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n}\r\n\r\n\r\n","import {baseNewImagesPath} from \"../../assets\";\r\n\r\nexport const applianceThumbnail = `${baseNewImagesPath}images/kv-icons/kv-filter-icons-stove.svg`;\r\nexport const cabinetThumbnail = `${baseNewImagesPath}images/kv-icons/top_cabinet.svg`;\r\nexport const centerIslandThumbnail = `${baseNewImagesPath}images/kv-icons/center_island_countertop.svg`;\r\nexport const countertopGroupThumbnail = `${baseNewImagesPath}images/kv-icons/vanity-countertop.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\nexport const floorThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Floor.svg`;\r\n\r\nexport const largeLayoutShadow = `${baseNewImagesPath}images/bv-assets/KV-All-Global-Shadow-Placeholder_L_1620x1080.png`;\r\nexport const SmallLayoutShadow = `${baseNewImagesPath}images/bv-assets/KV-All-Global-Shadow-Placeholder_S_1620x1080.png`;\r\n\r\n/*layouts*/\r\nexport const LayoutThumbnails = {\r\n Small: `${baseNewImagesPath}images/kv-layout-thumbnails/S.png`,\r\n SmallWithPopout: `${baseNewImagesPath}images/kv-layout-thumbnails/SP.png`,\r\n SmallWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/SN.png`,\r\n SmallWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SI.png`,\r\n SmallWithPopoutWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/SPN.png`,\r\n SmallWithPopoutWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SPI.png`,\r\n SmallWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SNI.png`,\r\n SmallWithPopoutWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/SPNI.png`,\r\n LShape: `${baseNewImagesPath}images/kv-layout-thumbnails/L.png`,\r\n LShapeWithPeninsula: `${baseNewImagesPath}images/kv-layout-thumbnails/LN.png`,\r\n LShapeWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/LI.png`,\r\n LShapeWithPeninsulaWithIsland: `${baseNewImagesPath}images/kv-layout-thumbnails/LNI.png`,\r\n};\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60in30X8Shower } from '../../../bvComponent/core/assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = ShowerComboTubType.replacement_tub;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = [\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"RoomLayout\": [layoutType],\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n let res = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n });\r\n\r\n return res.length ? res : null;\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_interior_wall\")\r\n || (relItem.partId === \"shower_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n if (this.layout.type === LayoutType.Small) {\r\n const showerParent = this.layout.parts.Shower;\r\n if (showerParent.showerBody && showerParent.showerBody.disabled) { // switch on all Shower features\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick();\r\n this.showerTubComboIsActive = true;\r\n }\r\n }\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n setDefault() {\r\n // this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n}\r\n","import * as PropTypes from \"prop-types\";\r\n\r\nexport const DISCOUNT_MAIN_TYPES = {\r\n custom: \"custom\",\r\n freeFill: \"freeFill\",\r\n subTotal: \"subTotal\",\r\n nested: \"nested\",\r\n finance: \"finance\",\r\n deposit: \"deposit\",\r\n};\r\n\r\nexport const DISCOUNT_TYPES = {\r\n price: \"Price\",\r\n percent: \"Percent\"\r\n};\r\n\r\nexport const DISCOUNT_MODES = {\r\n and: \"And\",\r\n or: \"Or\"\r\n};\r\n\r\nexport const DISCOUNT_SECTION_TYPES = {\r\n default: \"default\",\r\n finance: \"finance\"\r\n};\r\n\r\nexport const DISCOUNT_FINANCE_CELLS = {\r\n financePercentage: \"Finance Percentage\",\r\n financeMonths: \"Months\",\r\n financeSalesPercentage: \"Sales Person Percentage\",\r\n}\r\n\r\nexport const discountInterFace = {\r\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n order: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n enabled: PropTypes.bool.isRequired,\r\n type: PropTypes.oneOf([DISCOUNT_TYPES.price, DISCOUNT_TYPES.percent]).isRequired,\r\n mode: PropTypes.oneOf([DISCOUNT_MODES.and, DISCOUNT_MODES.or]).isRequired,\r\n amount: PropTypes.number.isRequired,\r\n isRidged: PropTypes.bool.isRequired,\r\n isSubTotal: PropTypes.bool,\r\n selected: PropTypes.bool, // it is not required, since it is not stored on the backend\r\n // specialVisible: PropTypes.bool, // it is not required, since it is not stored on the backend // we don't have it anymore\r\n oldDeleted: PropTypes.bool, // it is not required, since it is not stored on the backend\r\n uuId: PropTypes.string, // for new added nested\r\n nestedParent: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n discountType: PropTypes.oneOf(Object.keys(DISCOUNT_MAIN_TYPES)),\r\n financePercentage: PropTypes.number,\r\n financeMonths: PropTypes.number,\r\n financeSalesPercentage: PropTypes.number,\r\n financeOptions: PropTypes.string, // \"[12345, 12314, 1233]\" JSON\r\n multiSelections: PropTypes.bool,\r\n approveOptions: PropTypes.string, // \"['Some Name', 'Another Name']\"\r\n};\r\n\r\nexport const discountSectionsInterface = {\r\n id: PropTypes.number.isRequired,\r\n order: PropTypes.number.isRequired,\r\n name: PropTypes.string.isRequired,\r\n type: PropTypes.string,\r\n discounts: PropTypes.arrayOf(PropTypes.shape(discountInterFace))\r\n};\r\n","export const baseDashboardImagesPath = document.kvConfig.kioskMode ? './images/dashboard/images/icons/pj-scope-icons/enabled/' : ((location.port === '9007')\r\n ? 'http://quotekandb.com/content/Views/dashboard/images/icons/pj-scope-icons/enabled/'\r\n : '/content/Views/dashboard/images/icons/pj-scope-icons/enabled/');\r\nexport const baseNewImagesPath = (document.kvConfig.kioskMode || document.kvConfig.noInternetMode || location.port === '9007')\r\n ? './'\r\n : '/content/Views/visualizers/';\r\n","import {getPriceWithCurrency} from \"./helpers\";\r\nimport store from \"../store\";\r\n\r\n/**\r\n *\r\n * @param price {string|number|null}\r\n * @param feature {featureInterface}\r\n * @param fabricatorData {object}\r\n * @param messages {object} intl messages object (t obe able to use in the receipt)\r\n * @return {string}\r\n */\r\nexport const getPriceWithIncluded = (price, feature, fabricatorData, messages) => {\r\n if (price) {\r\n return getPriceWithCurrency(fabricatorData.settings, price, feature, false)\r\n }\r\n if (feature && fabricatorData.isLowes && (feature.partId === \"center_island_sink\" || feature.partId === \"sink\")) {\r\n return messages[\"navItem.priceNotIncluded\"]\r\n }\r\n return messages[\"navItem.priceIncluded\"]\r\n}\r\n\r\n/**\r\n * returns actual price property\r\n * @param feature {featureInterface}\r\n * @param fabricatorSettings {object}\r\n * @return {string|number|null}\r\n */\r\nexport const getFeaturePriceProperty = (feature, fabricatorSettings = null) => {\r\n let settings = fabricatorSettings;\r\n if (!settings) {\r\n settings = store.getState().fabricatorState.settings;\r\n }\r\n if (settings.useFabricatorCostPrices) { // show fabricator prices instead of retail prices\r\n return feature.dbFeature.price\r\n }\r\n if (settings.showSalePrices && (typeof feature.dbFeature.fabricatorCost == \"number\") && (feature.dbFeature.fabricatorCost > 0)) {\r\n return feature.dbFeature.fabricatorCost\r\n }\r\n return feature.dbFeature.cost\r\n}\r\n\r\n\r\n/**\r\n *\r\n * @param fabricatorData {object}\r\n * @param forTotal {boolean}\r\n * @return {boolean}\r\n */\r\nexport const getShowPrice = (fabricatorData, forTotal = false) => {\r\n const fabricatorSettings = fabricatorData.settings;\r\n if (forTotal) {\r\n return fabricatorSettings.showPricing && !fabricatorData.hidePricesFromUser;\r\n }\r\n return fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser;\r\n};\r\n\r\nexport function numberWithCommas(x) {\r\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n}\r\n\r\n/**\r\n *\r\n * @param price {number}\r\n * @param markUpValue {number}\r\n * @param markUpType {\"mark_up\"|\"mark_down\"|undefined}\r\n * @return {number}\r\n */\r\nconst getMarkUpPrice = (price, markUpValue, markUpType) => {\r\n const percentCost = price * markUpValue / 100;\r\n return markUpType === \"mark_down\" ? price - percentCost : price + percentCost\r\n}\r\n\r\n/**\r\n *\r\n * @param price {number}\r\n * @param markUpLogic {markUpLogic}\r\n * @param fabricatorSettings {object}\r\n * @return {number}\r\n */\r\nexport const updatePriceWithMarkUp = (price, markUpLogic, fabricatorSettings) => {\r\n if (!price || !markUpLogic) {\r\n return price\r\n }\r\n if (fabricatorSettings && fabricatorSettings.useFabricatorCostPrices) {\r\n if (markUpLogic.cost && markUpLogic.cost.value) {\r\n return getMarkUpPrice(price, markUpLogic.cost.value, markUpLogic.cost.type)\r\n }\r\n } else if (fabricatorSettings && fabricatorSettings.showSalePrices) {\r\n if (markUpLogic.discounts && markUpLogic.discounts.value) {\r\n return getMarkUpPrice(price, markUpLogic.discounts.value, markUpLogic.discounts.type)\r\n }\r\n } else if (markUpLogic.retail && markUpLogic.retail.value) {\r\n return getMarkUpPrice(price, markUpLogic.retail.value, markUpLogic.retail.type)\r\n }\r\n return price\r\n}\r\n\r\nexport const parseMarkUp = (markUpString) => {\r\n if (!markUpString) {\r\n return \"\"\r\n }\r\n let globalMarkUp = JSON.parse(markUpString);\r\n if (typeof globalMarkUp === \"object\" && (globalMarkUp != null)) {\r\n // {retail: {value: \"10\", type: \"mark_up\"}} -> {retail: {value: 10, type: \"mark_up\"}}\r\n Object.keys(globalMarkUp).forEach(key => {\r\n if ((typeof globalMarkUp[key] === \"object\") && globalMarkUp[key].value) {\r\n globalMarkUp[key].value = +globalMarkUp[key].value;\r\n }\r\n });\r\n if (globalMarkUp.isUpdatedInJobBoard) {\r\n delete globalMarkUp.isUpdatedInJobBoard // we don't need this property anymore, once we save the job - it should be erased\r\n }\r\n }\r\n return globalMarkUp\r\n}\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const addNewQuote = () => ({\r\n type: types.ADD_NEW_QUOTE,\r\n payload: {}\r\n});\r\n\r\nexport const setQuotes = (quotes) => ({\r\n type: types.SET_QUOTES,\r\n payload: {quotes}\r\n});\r\n\r\nexport const updateQuote = (quote, updatedQuote) => ({\r\n type: types.UPDATE_QUOTE,\r\n payload: {quote, updatedQuote}\r\n});\r\n\r\nexport const setActiveQuoteIndex = (activeQuoteIndex) => ({\r\n type: types.SET_ACTIVE_QUOTE_INDEX,\r\n payload: {activeQuoteIndex}\r\n});\r\n","import {createContext} from \"react\";\r\n\r\nexport default createContext({});\r\n","import {iCmp} from \"../../../../misc/utils\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport Layer from \"../../../visComponents/layer\";\r\nimport PartCommon from \"../../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {\r\n Large: [],\r\n Small: []\r\n };\r\n this.featuresPartsList = {\r\n Large: [],\r\n Small: []\r\n };\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false // first quote\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n featureClicked() {\r\n this.updateLocalStorage();\r\n // other specific events, for ex. Google Analytics, etc.\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return Array.isArray(value) ? value.some(val => iCmp(condValue, val, true)) : iCmp(condValue, value, true)\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n let conditionPassed = this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n if (condition.propName === \"EX L\" && !conditionPassed) {\r\n conditionPassed = this.matchesMetaForCondition( \"Wall\", condition.propValue);\r\n } else if (condition.propName === \"Size\" && condition.propValue === \"60in\" && Array.isArray(this.metaData[\"Size\"])\r\n && this.metaData[\"Size\"].includes(\"30in\")) {\r\n conditionPassed = false\r\n }\r\n return conditionPassed\r\n })\r\n }\r\n}\r\n\r\n\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport store from \"../../store\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\n\r\nconst LockedView = (props) => {\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n return (\r\n
\r\n \r\n
\r\n
\r\n )\r\n};\r\n\r\nLockedView.displayName = 'LockedView';\r\n\r\nexport default LockedView;\r\n\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n\r\nexport default class MobileMenuSelect extends Component {\r\n\r\n static propTypes = {\r\n // relatedItems: PropTypes.array,\r\n // relatedItemClick: PropTypes.func.isRequired,\r\n onSubPartClick: PropTypes.func.isRequired,\r\n onParentItemClick: PropTypes.func.isRequired,\r\n parentItems: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n activePart: PropTypes.object,\r\n activeSubPart: PropTypes.object,\r\n desktop: PropTypes.bool,\r\n };\r\n\r\n static defaultProps = {\r\n desktop: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n showRelatedItems: true,\r\n translateId: this.props.activeSubPart ? this.props.activeSubPart.translateId : ''\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.desktop) {\r\n this.setShowName(this.props);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('click', this.handleWrapperBlur)\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setShowName(nextProps);\r\n }\r\n\r\n setShowName(props) {\r\n if (props.activeSubPart && (props.activeSubPart.translateId !== this.state.translateId)) {\r\n this.setState({\r\n translateId: props.activeSubPart.translateId\r\n })\r\n }\r\n if (!props.activeSubPart && props.activePart && (props.activePart.partName !== this.state.translateId)) {\r\n this.setState({\r\n translateId: props.activePart.translateId\r\n })\r\n }\r\n }\r\n\r\n handleParentItemClick = (parentItem) => {\r\n Analytics.sendClickEvent(\"parent-item-clicked\");\r\n Analytics.sendClickEvent(\"parent-item-clicked: \" + parentItem.text);\r\n console.log('click parentItem', parentItem);\r\n this.props.onParentItemClick(parentItem);\r\n let showRelatedItems = true;\r\n if ((parentItem.text === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || parentItem.text === \"Floor\" || parentItem.text === \"Window\" || parentItem.text === \"Toilet\") {\r\n showRelatedItems = false;\r\n this.handleToggleDropdown();\r\n }\r\n\r\n this.setState({\r\n showRelatedItems,\r\n translateId: parentItem.part.translateId\r\n });\r\n if (parentItem.text === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (parentItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleBackClick = () => {\r\n this.setState({\r\n showRelatedItems: false,\r\n translateId: this.props.activePart.translateId\r\n });\r\n };\r\n\r\n handleRelatedItemClick = (relatedItem) => {\r\n Analytics.sendClickEvent(\"related-item-clicked\");\r\n Analytics.sendClickEvent(\"related-item-clicked: \" + relatedItem.part.partName);\r\n console.log('relatedItem', relatedItem);\r\n this.props.onSubPartClick(relatedItem);\r\n this.handleToggleDropdown();\r\n this.setState({\r\n translateId: relatedItem.part.translateId\r\n });\r\n if (relatedItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent(this.state.toggle\r\n ? \"mobile-menu-select-dropdown-toggle-closed\"\r\n : \"mobile-menu-select-dropdown-toggle-open\"\r\n );\r\n\r\n this.setState({\r\n toggle: !this.state.toggle\r\n }, () => {\r\n if (this.state.toggle) {\r\n this.setState({\r\n subParts: this.props.activePart.subParts(),\r\n showRelatedItems: this.props.activePart.partName === \"Toilet\" ? false : !!this.props.activeSubPart\r\n });\r\n setTimeout(() => {\r\n window.addEventListener('click', this.handleWrapperBlur);\r\n }, 0)\r\n } else {\r\n window.removeEventListener('click', this.handleWrapperBlur)\r\n }\r\n })\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.menu-select__dropdown-list-item')\r\n && !e.target.closest('.menu-select__dropdown-back') && !e.target.closest('.menu-select__dropdown')) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n handlePrevClick = () => {\r\n Analytics.sendClickEvent('mobile-menu-select-previous');\r\n // console.log('this.state.subParts', this.props.parentItems);\r\n // console.log('this.state.translateId', this.state.translateId);\r\n // console.log('this.state.subParts', this.state.subParts);\r\n // console.log('this.props.activePart', this.props.activePart);\r\n // console.log('this.props.activeSubPart', this.props.activeSubPart);\r\n\r\n let prevItem = null;\r\n if (this.props.activeSubPart) {\r\n const subParts = this.props.activePart.subParts();\r\n const currentChildIndex = subParts.findIndex(childItem => {\r\n return this.props.activeSubPart.partId === childItem.part.partId\r\n });\r\n prevItem = subParts[currentChildIndex - 1];\r\n // console.log('currentChildIndex', currentChildIndex);\r\n // console.log('prevItem', prevItem);\r\n }\r\n if (prevItem) {\r\n this.props.onSubPartClick(prevItem);\r\n this.setState({\r\n translateId: prevItem.part.translateId\r\n });\r\n } else {\r\n const currentParentIndex = this.props.parentItems.findIndex(parentItem => {\r\n const partName = this.props.activePart.partName;\r\n return parentItem.text === partName\r\n });\r\n const prevParentItem = this.props.parentItems[currentParentIndex - 1];\r\n\r\n // console.log('currentParentIndex', currentParentIndex);\r\n // console.log('prevParentItem', prevParentItem);\r\n if (prevParentItem) {\r\n this.props.onParentItemClick(prevParentItem);\r\n const subParts = prevParentItem.part.subParts();\r\n const lastSubPart = subParts[subParts.length - 1];\r\n // console.log('lastSubPart',lastSubPart);\r\n if (prevParentItem.part.menuType === 1) {\r\n setTimeout(() => {\r\n this.props.onSubPartClick(lastSubPart);\r\n this.setState({\r\n translateId: lastSubPart.part.translateId,\r\n });\r\n }, 0)\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n handleNextClick = () => {\r\n Analytics.sendClickEvent('mobile-menu-select-next');\r\n let nextItem = null;\r\n if (this.props.activeSubPart) {\r\n const subParts = this.props.activePart.subParts();\r\n const currentChildIndex = subParts.findIndex(childItem => {\r\n return this.props.activeSubPart.partId === childItem.part.partId\r\n });\r\n nextItem = subParts[currentChildIndex + 1];\r\n }\r\n if (nextItem) {\r\n this.props.onSubPartClick(nextItem);\r\n this.setState({\r\n translateId: nextItem.part.translateId\r\n });\r\n } else {\r\n const currentParentIndex = this.props.parentItems.findIndex(parentItem => {\r\n const partName = this.props.activePart.partName;\r\n return parentItem.text === partName\r\n });\r\n const nextParentItem = this.props.parentItems[currentParentIndex + 1];\r\n if (nextParentItem) {\r\n this.props.onParentItemClick(nextParentItem);\r\n const subParts = nextParentItem.part.subParts();\r\n const lastSubPart = subParts[0];\r\n if (nextParentItem.part.menuType === 1) {\r\n setTimeout(() => {\r\n this.props.onSubPartClick(lastSubPart);\r\n this.setState({\r\n translateId: lastSubPart.part.translateId,\r\n });\r\n }, 0)\r\n }\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const dropDownStyles = this.state.toggle ? { height: this.props.desktop ? 320 : window.innerHeight - 42 } : {};\r\n\r\n return (\r\n
\r\n {/*
*/}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.state.translateId ? : null}\r\n \r\n
\r\n
\r\n {this.state.showRelatedItems\r\n ? \r\n : null}\r\n
    \r\n {this.state.showRelatedItems && this.props.activePart ? this.props.activePart.subParts(true, true).map((subPart, index) => {\r\n if (!subPart.part.translateId) {\r\n console.info(\"Feature Group Translate is missing!\", subPart.part.partId);\r\n }\r\n const layout = getCurrentLayout();\r\n if (!layout.hasNavItemsLength(subPart)) {\r\n return null\r\n }\r\n return (\r\n
  • this.handleRelatedItemClick(subPart)}\r\n className={\"menu-select__dropdown-list-item\"\r\n + (this.props.activeSubPart && (this.props.activeSubPart.partName === subPart.text)\r\n ? \" menu-select__dropdown-list-item--active\" : \"\")\r\n + ` menu-select__dropdown-list-item--${subPart.part.partId}`}>\r\n {subPart.part.translateId ? : null}\r\n
  • \r\n )\r\n }) : this.props.parentItems.map((parentItem, index) => {\r\n if (!parentItem.part.translateId) {\r\n console.info(\"Feature Parent Group translate is missing!\", parentItem.text);\r\n }\r\n return (\r\n
  • this.handleParentItemClick(parentItem)}\r\n className={\"menu-select__dropdown-list-item\"\r\n + (this.props.activePart && (this.props.activePart.partName === parentItem.text)\r\n ? \" menu-select__dropdown-list-item--active\" : \"\")\r\n + ` menu-select__dropdown-list-item--${parentItem.text.toLowerCase().replace(/ /g,\"_\")}`}>\r\n {parentItem.part.translateId ? : null}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {vanityThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport CompleteVanity from \"../subparts/vanity/completeVanity\";\r\nimport VanityHandle from \"../subparts/vanity/vanityHandle\";\r\nimport VanityCabinet from \"../subparts/vanity/vanityCabinet\";\r\nimport VanityCountertop from \"../subparts/vanity/vanityCountertop\";\r\nimport VanityBacksplash from \"../subparts/vanity/vanityBacksplash\";\r\nimport Mirror from \"../subparts/vanity/mirror\";\r\nimport Sink from \"../subparts/vanity/sink\";\r\nimport VanityFaucet from \"../subparts/vanity/faucet\";\r\n\r\nexport class Vanity extends Part {\r\n static id = 'Vanity';\r\n\r\n static Types = {\r\n Complete: 'Complete',\r\n Custom: 'Custom'\r\n };\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity\";\r\n this.partThumbnail = vanityThumbnail;\r\n this.activeSubType_ = Vanity.Types.Custom;\r\n this.relatedItems = [];\r\n this.placeholdersNeeded = false; // only Vanity property\r\n\r\n // vanity parts\r\n this.vanityCabinet = null;\r\n this.completeVanity = null;\r\n this.countertop = null;\r\n this.sink = null;\r\n this.faucet = null;\r\n this.vanityBacksplash = null;\r\n this.vanityHandle = null;\r\n this.mirror = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Mirror\":\r\n relatedItemName = \"mirror\";\r\n RelatedItemClass = Mirror;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = VanityCountertop;\r\n break;\r\n case \"Faucet\":\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = VanityFaucet;\r\n break;\r\n case \"VanityBacksplash\":\r\n case \"BackSplash\":\r\n case \"Backsplash\":\r\n relatedItemName = \"vanityBacksplash\";\r\n RelatedItemClass = VanityBacksplash;\r\n break;\r\n case \"Vanity Handle\":\r\n relatedItemName = \"vanityHandle\";\r\n RelatedItemClass = VanityHandle;\r\n break;\r\n case \"Vanity\": {\r\n const completeVanity = dbFeature.metaData && dbFeature.metaData[\"Vanity\"]\r\n && dbFeature.metaData[\"Vanity\"].includes(\"Complete\");\r\n\r\n relatedItemName = completeVanity ? \"completeVanity\" : \"vanityCabinet\";\r\n RelatedItemClass = completeVanity ? CompleteVanity : VanityCabinet;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName === \"sink\") {\r\n const faucetIndex = this.relatedItems.findIndex(relItem => relItem.partName === 'Faucet');\r\n faucetIndex ? this.relatedItems.splice(faucetIndex, 0, this.sink) : this.relatedItems.push(this.sink);\r\n } else if (relatedItemName === \"completeVanity\") {\r\n this.relatedItems.unshift(this.completeVanity); // cabinet needs to be first in the list.\r\n } else if (relatedItemName === \"vanityCabinet\") {\r\n this.relatedItems.unshift(this.vanityCabinet); // cabinet needs to be first in the list.\r\n } else {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.activeSubType_));\r\n }\r\n\r\n subTypes() {\r\n return this.vanityCabinet && this.completeVanity ? [Vanity.Types.Custom, Vanity.Types.Complete] : [];\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return this.activeSubType_ === Vanity.Types.Complete;\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n subParts() {\r\n const relatedItems = this.getRelatedItems();\r\n const excluded = [];\r\n const vanityPart = relatedItems.find(navItem => navItem.partId === \"vanity_cabinet\");\r\n if (vanityPart && vanityPart.activeFeature\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"]\r\n && vanityPart.activeFeature.metaData[\"VanityHandle\"].includes(\"None\")) {\r\n excluded.push(\"vanity_handle\")\r\n }\r\n return relatedItems\r\n .filter(item => !excluded.includes(item.partId))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n // subPartsWithAccentWall() {\r\n // const vanityAccent = this.layout.parts.Walls.vanityAccent;\r\n // return [new DesignNavigationItem(vanityAccent.partName, vanityAccent),\r\n // ...this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _))];\r\n // }\r\n\r\n handleSubTypeClick(subType) {\r\n this.activeSubType_ = subType;\r\n this.getRelatedItems().forEach((relatedItem) => {\r\n if (!relatedItem.activeFeature) {\r\n relatedItem.setDefault()\r\n }\r\n });\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n counterTopSize() {\r\n return this.getCounterTopSize() || \"24\"; // temporary hardcode until we would have meta data finished\r\n }\r\n\r\n getCounterTopSize() {\r\n if (this.vanityCabinet && !this.vanityCabinet.activeFeature) {\r\n this.vanityCabinet.setDefault()\r\n }\r\n return (this.vanityCabinet && this.vanityCabinet.activeFeature)\r\n ? this.vanityCabinet.activeFeature.dbFeature.metaData[\"VanitySize\"]\r\n : null;\r\n }\r\n\r\n toggleVanityParts(disabled) {\r\n this.getRelatedItems().forEach(relItem => {\r\n if (relItem.partId === \"vanity_sink\" || relItem.partId === \"vanity_faucet\"\r\n || relItem.partId === \"vanity_countertop\" || relItem.partId === \"vanity_cabinet\"\r\n || relItem.partId === \"vanity_handle\" || relItem.partId === \"vanity_backsplash\") {\r\n relItem.disabled = disabled;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import uniq from \"lodash/uniq\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport * as uuid from \"uuid\";\r\n\r\nimport {COUNTERTOP_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport Config, {USE_FAB_FILTERS_ONLY} from \"../config\";\r\nimport {hardCodeIsAmericanImport, hardCodeIsDeStefano, hardCodeIsFloform} from \"./fabricatorHardcode\";\r\nimport {getAllFeatureFilters, getFilterGroupValue, getFilterGroupValues, mergeFilterObjects} from \"./utils\";\r\nimport {getBvGroupFeatures, getBvGroupFilterValues} from \"../api/server-api\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getHardCodedFilterGroups} from \"../bvcomponents/look/filtersHardcode\";\r\nimport store from \"../store\";\r\nimport {updateFiltersCount} from \"../actions/filtersFunctions\";\r\n\r\n\r\n/**\r\n * returns feature' color filter value object\r\n * @param lookActiveFeature {object}\r\n * @param filterGroups {array}\r\n * @param colorFilterGroup {object}\r\n * @returns {object} feature' color filter value object\r\n */\r\nexport const getColorFilterValue = (lookActiveFeature, filterGroups, colorFilterGroup = null) => {\r\n if (!lookActiveFeature || !Array.isArray(filterGroups)) {\r\n return null\r\n }\r\n\r\n if (!colorFilterGroup) {\r\n colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n }\r\n\r\n if (!colorFilterGroup) {\r\n return null\r\n }\r\n\r\n const activeFeatureValues = getFilterGroupValues(lookActiveFeature, colorFilterGroup);\r\n\r\n // console.log(\"activeFeatureValues\", activeFeatureValues);\r\n\r\n if (!Array.isArray(activeFeatureValues) || !activeFeatureValues.length) {\r\n return null\r\n }\r\n\r\n return getFilterGroupValue(activeFeatureValues[0], colorFilterGroup);\r\n}\r\n\r\nexport const setActivePartFilterValues = (filterValuesArray, activePart, filterGroups) => {\r\n console.log(\"filterValuesArray from backend:\", filterValuesArray);\r\n if ((COUNTERTOP_GROUP.includes(activePart.partId) || activePart.partId === \"vanity_countertop\")\r\n && filterValuesArray && !Config.isDevMode() && !USE_FAB_FILTERS_ONLY) {\r\n let availableCountertopGroupFilters = [\"color\", \"stone color\", \"collection\", \"manufacturer\", \"countertop material\", \"stone finish\", \"color group\"]\r\n if (activePart.partId === \"backsplash\") {\r\n availableCountertopGroupFilters.push(\"material\");\r\n }\r\n if (document.kvConfig.userId === 141822) { // https://asw.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters.push(\"material thickness\");\r\n availableCountertopGroupFilters.push(\"promotional discounts\");\r\n availableCountertopGroupFilters.push(\"color group\");\r\n }\r\n if (document.kvConfig.userId === 138452) { // https://cutting_edge_countertops.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters.push(\"price group\");\r\n }\r\n if (document.kvConfig.userId === 252141) { // https://solidsurface.quotekitchenandbath.com/visualizer#/\r\n availableCountertopGroupFilters.push(\"price\");\r\n }\r\n if (window.location.href.includes(\"isfa\")) { // https://isfa.quotekitchenandbath.com/kitchen?mode=dashboard&p=208659&language=en-US#/visualizer\r\n availableCountertopGroupFilters.push(\"color temperature\");\r\n }\r\n if (hardCodeIsDeStefano()) { // https://de_stefano_new.quotekitchenandbath.com/kitchen#/\r\n availableCountertopGroupFilters = availableCountertopGroupFilters.filter(f => {\r\n return f !== \"collection\" && f !== \"manufacturer\"\r\n });\r\n availableCountertopGroupFilters.push(\"material thickness\");\r\n }\r\n if (hardCodeIsFloform()) {\r\n availableCountertopGroupFilters = availableCountertopGroupFilters.filter(f => f !== \"stone color\");\r\n }\r\n const allFilterGroups = filterGroups.filter(filterGroup => {\r\n if (window.location.href.includes(\"porcelanosa\")) { // show all filters on https://porcelanosa_new.quotekitchenandbath.com/kitchen#/ except Edge\r\n return filterGroup.name && !filterGroup.name.includes(\"Edge\")\r\n }\r\n // if (USE_FAB_FILTERS_ONLY) {\r\n // if (!Array.isArray(filterGroup.values) || !filterGroup.values.length) {\r\n // return false\r\n // }\r\n // if (filterGroup.values.filter(fgValue => fgValue.isFabricatorCustomFilter)) {\r\n // return true\r\n // }\r\n // }\r\n return filterGroup && filterGroup.name && availableCountertopGroupFilters.includes(filterGroup.name.trim().toLowerCase())\r\n });\r\n filterValuesArray = filterValuesArray.filter(filterId => {\r\n return allFilterGroups.some(filterGroup => filterGroup.values && filterGroup.values.some(filterValueObject => {\r\n return filterValueObject.id === filterId\r\n }))\r\n });\r\n }\r\n if (activePart.allFeaturesReceived && hardCodeIsAmericanImport()) {\r\n activePart.features.forEach(feature => {\r\n [\"filterValueIDs\", \"fabFilterValueIDs\"].forEach(key => {\r\n if (feature.dbFeature[key]) {\r\n Object.keys(feature.dbFeature[key]).forEach(filterGroupId => {\r\n const filterValues = feature.dbFeature[key][filterGroupId];\r\n if (Array.isArray(filterValues)) {\r\n filterValues.forEach(filterValueId => {\r\n if (!filterValuesArray.includes(filterValueId)) {\r\n filterValuesArray.push(filterValueId)\r\n }\r\n })\r\n }\r\n })\r\n }\r\n })\r\n })\r\n console.log(\"filterValuesArray from features:\", filterValuesArray);\r\n }\r\n activePart.filtersReceived = filterValuesArray;\r\n};\r\n\r\n\r\n\r\n/**\r\n * returns all available filter groups with values for navItems\r\n * @param navItems {array}\r\n * @param allFilterGroups {array}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFiltersForNavItems = (navItems, allFilterGroups) => {\r\n let filterGroups = [];\r\n for (let i = 0; i < navItems.length; i++) {\r\n const checkFeature = navItems[i].part;\r\n let featureFilters = getAllFeatureFilters(checkFeature);\r\n const featureOptions = navItems[i].colorOptions;\r\n if (Array.isArray(featureOptions) && featureOptions.length) {\r\n featureOptions.forEach((option) => {\r\n if (option.feature.dbFeature.id !== checkFeature.dbFeature.id) {\r\n const fOptions = getAllFeatureFilters(option.feature);\r\n featureFilters = mergeFilterObjects(featureFilters, fOptions)\r\n }\r\n });\r\n }\r\n Object.keys(featureFilters).forEach(key => {\r\n let existingFilterGroup = filterGroups.find(group => group.id === +key);\r\n const filterGroupFromAll = allFilterGroups.find(group => group.id === +key);\r\n if (!existingFilterGroup) {\r\n if (filterGroupFromAll) {\r\n existingFilterGroup = Object.assign({}, filterGroupFromAll, {values: []});\r\n filterGroups.push(existingFilterGroup);\r\n }\r\n }\r\n if (existingFilterGroup) {\r\n const currentFilterValues = featureFilters[existingFilterGroup.id];\r\n if (Array.isArray(currentFilterValues)) {\r\n currentFilterValues.forEach(filterValueId => {\r\n if (!existingFilterGroup.values.some(fValue => fValue.id === filterValueId) && filterGroupFromAll) {\r\n const fValue = getFilterGroupValue(filterValueId, filterGroupFromAll);\r\n if (fValue) {\r\n existingFilterGroup.values.push(fValue)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n })\r\n }\r\n return filterGroups\r\n}\r\n\r\n/**\r\n * returns all available filter groups with values for received from backend filters\r\n * @param featureGroup {featureGroupInterface}\r\n * @param allFilterGroups {[filterGroup]}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFiltersForReceivedFilters = (featureGroup, allFilterGroups) => {\r\n let filterGroups = [];\r\n for (let i = 0; i < allFilterGroups.length; i++) {\r\n const filterGroup = allFilterGroups[i];\r\n for (let k = 0; k < filterGroup.values.length; k++) {\r\n const filterValue = filterGroup.values[k];\r\n if (featureGroup.filtersReceived.includes(filterValue.id)) {\r\n let existingFilterGroup = filterGroups.find(group => group.id === filterGroup.id);\r\n if (!existingFilterGroup) {\r\n existingFilterGroup = Object.assign({}, filterGroup, {values: []});\r\n filterGroups.push(existingFilterGroup);\r\n }\r\n if (!existingFilterGroup.values.some(fValue => fValue.id === filterValue.id)) {\r\n existingFilterGroup.values.push(filterValue)\r\n }\r\n }\r\n }\r\n }\r\n return filterGroups\r\n}\r\n\r\nexport const checkIfNeedToReceiveFeaturesIfFiltersApplied = (selectedFilters, currentParent, onScroll = false) => {\r\n let arrayOfNeededFiltersToReceive = uniq( // remove duplicates\r\n selectedFilters.map(filterObj => filterObj.filterId)\r\n );\r\n if (currentParent.filterIdsReceived) {\r\n // make one object with one filter in array (since we don't need to make request with several filters)\r\n arrayOfNeededFiltersToReceive = arrayOfNeededFiltersToReceive.filter((filterValue) => {\r\n return !currentParent.filterIdsReceived.find(filterIdsReceived => {\r\n return filterIdsReceived.filterIds.includes(filterValue)\r\n })\r\n })\r\n }\r\n if (!arrayOfNeededFiltersToReceive.length) {\r\n return false\r\n }\r\n if (!currentParent.filterIdsReceived) {\r\n currentParent.filterIdsReceived = [];\r\n return {\r\n arrayOfNeededFiltersToReceive,\r\n page: 0\r\n };\r\n } else {\r\n const existingFiltersRequest = currentParent.filterIdsReceived.find(filtersReceivedObject => {\r\n return isEqual(filtersReceivedObject.filterIds.sort(), arrayOfNeededFiltersToReceive.sort())\r\n });\r\n if (existingFiltersRequest) {\r\n if (existingFiltersRequest.allFeaturesWithFiltersReceived || !onScroll) { //!onScroll - componentWillReceiveProps request\r\n return false\r\n } else {\r\n return existingFiltersRequest\r\n }\r\n } else {\r\n return {\r\n arrayOfNeededFiltersToReceive,\r\n page: 0\r\n };\r\n }\r\n }\r\n};\r\n\r\nexport const getFeaturesFromBackendWithFilters = (featureGroup, counterTopFiltersIdsReceived, existingFilterObject = null) => {\r\n const filterObject = existingFilterObject || {\r\n uuid: uuid.v4(),\r\n filterIds: counterTopFiltersIdsReceived, // array of arrays, ex. [[56],[1122,1313]] etc.\r\n featuresReceived: 0,\r\n page: 0\r\n };\r\n if (!existingFilterObject) {\r\n featureGroup.filterIdsReceived.push(filterObject);\r\n }\r\n const featuresCountToReceive = 6000;\r\n featureGroup.requestInProgress = true;\r\n return getBvGroupFeatures(\r\n featureGroup.dbName || featureGroup.partName,\r\n filterObject.page,\r\n featuresCountToReceive,\r\n counterTopFiltersIdsReceived\r\n )\r\n .then((response) => {\r\n featureGroup.requestInProgress = false;\r\n if (response && response.length) {\r\n console.log(\"response.data with filters\", response);\r\n featureGroup.setGroupFeatures(response, featuresCountToReceive, false, \"\", null, true);\r\n featureGroup.filterIdsReceived = featureGroup.filterIdsReceived.map((filtersReceivedObject) => {\r\n if (filtersReceivedObject.uuid === filterObject.uuid) {\r\n filtersReceivedObject.featuresReceived += response.length;\r\n if (response.length < featuresCountToReceive) {\r\n filtersReceivedObject.allFeaturesWithFiltersReceived = true;\r\n } else {\r\n filtersReceivedObject.page++;\r\n }\r\n }\r\n return filtersReceivedObject\r\n });\r\n }\r\n return response\r\n });\r\n}\r\n\r\nexport const getSelectedFiltersLength = (filterGroup, selectedFilters) => {\r\n return selectedFilters.reduce((total, selectedFilter) => {\r\n return total + (filterGroup.id === selectedFilter.filterGroupId ? 1 : 0)\r\n }, 0)\r\n}\r\n\r\n\r\n/**\r\n * returns all available filter groups with values for featureGroup's part id\r\n * @param featureGroup {featureGroupInterface}\r\n * @param partId {string}\r\n * @param allFilterGroups {array}\r\n * @param shopNavItems {[navItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const getAvailableFilters = (featureGroup, partId, allFilterGroups, shopNavItems = null) => {\r\n const layout = getCurrentLayout();\r\n if (!featureGroup && partId) {\r\n featureGroup = layout.getFeatureGroupByPartId(partId)\r\n }\r\n if (featureGroup) {\r\n if (featureGroup.filtersReceived) {\r\n return getAvailableFiltersForReceivedFilters(featureGroup, allFilterGroups)\r\n }\r\n const navItems = shopNavItems || layout.designNavigationItems(\r\n {part: featureGroup},\r\n {},\r\n \"\",\r\n null,\r\n false,\r\n allFilterGroups\r\n );\r\n return getAvailableFiltersForNavItems(navItems, allFilterGroups)\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns all available filter groups for featureGroup\r\n * @param featureGroup {featureGroupInterface}\r\n * @param shopNavItems {[navItemInterface]}\r\n * @returns {[filterGroupInterface]}\r\n */\r\nexport const getFeatureGroupFilters = (featureGroup, shopNavItems = null) => {\r\n if (!featureGroup) {\r\n return []\r\n }\r\n const {selectedFilters, filterGroups} = store.getState().filterState;\r\n if (!featureGroup.filtersReceived && !featureGroup.realFeaturesReceived && !featureGroup.filtersRequested) {\r\n // && !featureGroup.realFeaturesReceived\r\n featureGroup.filtersRequested = true;\r\n getBvGroupFilterValues(featureGroup.dbName || featureGroup.partName, null, false)\r\n .then((featureGroupFiltersResponse) => {\r\n setActivePartFilterValues(featureGroupFiltersResponse.data, featureGroup, filterGroups);\r\n store.dispatch(updateFiltersCount());\r\n });\r\n }\r\n const availableFilters = getAvailableFilters(featureGroup, \"\", filterGroups, shopNavItems);\r\n // we are using this in sqft calc\r\n // if (!IS_LIXIL_UI) { // might need to change this, but for now we hardcode filters for all profiles\r\n // return availableFilters\r\n // }\r\n return getHardCodedFilterGroups(availableFilters, featureGroup.partId, selectedFilters)\r\n}\r\n","import * as types from './actionTypes';\r\n\r\nexport const setLanguage = (language) => ({\r\n type: types.SET_LANGUAGE,\r\n payload: {language}\r\n});\r\n\r\nexport const setActiveTheme = (activeTheme) => ({\r\n type: types.SET_ACTIVE_THEME,\r\n payload: {activeTheme}\r\n});\r\n\r\nexport const setAgreeEmailCheckbox = (agreeEmailCheckbox) => ({\r\n type: types.SET_AGREE_EMAIL_CHECKBOX,\r\n payload: {agreeEmailCheckbox}\r\n});\r\n\r\nexport const setInitialVisualizerType = (initialVisualizerType) => ({\r\n type: types.SET_INITIAL_VISUALIZER_TYPE,\r\n payload: {initialVisualizerType}\r\n});\r\n\r\nexport const setNetworkConnection = (networkConnection) => ({\r\n type: types.SET_NETWORK_CONNECTION,\r\n payload: {networkConnection}\r\n});\r\n\r\nexport const setAmazonImageUrl = (amazonImageUrl) => ({\r\n type: types.SET_AMAZON_IMAGE_URL,\r\n payload: {amazonImageUrl}\r\n});\r\n\r\nexport const setAllFeaturesLoaded = (allFeaturesWereLoaded) => ({\r\n type: types.SET_ALL_FEATURES_LOADED,\r\n payload: {allFeaturesWereLoaded}\r\n});\r\n\r\nexport const setAllowRouting = (allowRouting) => ({\r\n type: types.SET_ALLOW_ROUTING,\r\n payload: {allowRouting}\r\n});\r\n\r\nexport const setAllowMainLoading = (allowMainLoading) => ({\r\n type: types.SET_ALLOW_MAIN_LOADING,\r\n payload: {allowMainLoading}\r\n});\r\n\r\nexport const setActionAfterVisualizerTypeIsChanged = (actionAfterRoomChange) => ({\r\n type: types.SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED,\r\n payload: {actionAfterRoomChange}\r\n});\r\n\r\nexport const setVisualizerIsChanging = (visualizerIsChanging) => ({\r\n type: types.SET_VISUALIZER_TYPE_CHANGING,\r\n payload: {visualizerIsChanging}\r\n});\r\n","import store from \"../store\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getImagePromiseFromLayout} from \"./getCanvasImageFromLayout\";\r\nimport {getQuoteVisualizerType, switchToNewVisualizerType} from \"./visualizerSwitchingFunctions\";\r\nimport {getRoomImageFromQtCategory} from \"./categorySwitchingFunctions\";\r\nimport {setQuotes} from \"../actions/roomsFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {getTotalPrice} from \"./helpers\";\r\nimport {setVisualizerIsChanging} from \"../actions/serverFunctions\";\r\nimport {switchToWizardItem} from \"../bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport workspace from \"../bvcomponents/sqft/components/canvas/core/workspace\";\r\nimport {\r\n deleteCartItemsThatAreMissingInSQFTCalcData,\r\n updateQuoteWithSQFTData\r\n} from \"../bvcomponents/sqft/helpers/sqftQuotesHelper\";\r\nimport {prepareSQFTData} from \"../bvcomponents/sqft/components/canvas/core/workspace/workspaceDataMapper\";\r\n\r\n/**\r\n * @param quoteIndex {number}\r\n * @param fakeLayout {object}\r\n * @param forLocalStorage {boolean}\r\n * @param nextVisualizerType {string}\r\n * @param bvImage {string}\r\n * returns updated quote object\r\n */\r\nexport const getQuoteInfo = async (quoteIndex, fakeLayout = null, forLocalStorage = false, nextVisualizerType, bvImage = \"\") => {\r\n const state = store.getState();\r\n const {quotes} = state.quotesState;\r\n const {settings} = state.fabricatorState;\r\n const {canvasDimensions} = state.bathroomVisualizerState;\r\n const quoteTotalPrice = getTotalPrice(quoteIndex);\r\n const quoteId = quotes[quoteIndex] && quotes[quoteIndex].quoteId ? quotes[quoteIndex].quoteId : null;\r\n const imageUrl = quotes[quoteIndex] && quotes[quoteIndex].imageUrl ? quotes[quoteIndex].imageUrl : null;\r\n\r\n const room = getQuoteVisualizerType(quoteIndex, nextVisualizerType);\r\n // keep old compatability without using different layouts\r\n const layout = fakeLayout || getCurrentLayout(settings.allowVisualizerSwitching ? room : document.kvConfig.visualizerType);\r\n\r\n // console.log(\"room\", room);\r\n if (!forLocalStorage && !bvImage) {\r\n if (document.kvConfig.visualizerType !== room && quotes[quoteIndex] && quotes[quoteIndex].bvImage) {\r\n bvImage = quotes[quoteIndex].bvImage;\r\n } else {\r\n bvImage = await new Promise((resolve) => resolve(getImagePromiseFromLayout(layout, canvasDimensions)))\r\n }\r\n }\r\n\r\n return {\r\n quoteId, // quoteId - quoteId is passed from the backend in the getBvJobData response(in dashboard edit mode)\r\n imageUrl, // amazon url\r\n // ...quotes[activeQuoteIndex], no need for it for now\r\n data: layout.getActiveFeaturesAsObject(false, true, true),\r\n leadFeatures: layout.getActiveNames(),\r\n bvImage,\r\n layoutType: layout.type,\r\n room, // prevent overwriting on save\r\n materialCost: quoteTotalPrice.materialPrice,\r\n sqFtCalcData: quotes[quoteIndex] ? quotes[quoteIndex].sqFtCalcData || null : null,\r\n installationCost: quoteTotalPrice.installationPrice,\r\n installationTaxes: quoteTotalPrice.installationTaxes, // installation tax amount\r\n materialTaxes: quoteTotalPrice.materialTaxes, // material tax amount\r\n priceTaxes: quoteTotalPrice.priceTaxes, // material tax amount\r\n staticCanvasImage: getRoomImageFromQtCategory(\"\", quoteIndex),\r\n isCreatedInSQFT: quotes[quoteIndex] ? quotes[quoteIndex].isCreatedInSQFT : false,\r\n isVisibleInSQFT: quotes[quoteIndex] ? quotes[quoteIndex].isVisibleInSQFT : true,\r\n qtCatName: quotes[quoteIndex] ? quotes[quoteIndex].qtCatName : \"\",\r\n }\r\n};\r\n\r\nexport const updateCurrentQuote = async (quoteIndex, nextVisualizerType, forLocalStorage = false) => {\r\n const {quotes, activeQuoteIndex} = store.getState().quotesState;\r\n const indexToUpdate = Number.isInteger(quoteIndex) ? quoteIndex : activeQuoteIndex;\r\n const currentQuoteObject = await getQuoteInfo(indexToUpdate, null, forLocalStorage, nextVisualizerType);\r\n const newQuotes = [...quotes.map((q, qIndex) => (qIndex === indexToUpdate) ? currentQuoteObject : q)];\r\n if (!forLocalStorage) {\r\n store.dispatch(setQuotes(newQuotes));\r\n }\r\n return newQuotes\r\n};\r\n\r\n// /**\r\n// * @param quotes {array}\r\n// * @param activeQuoteIndex {number}\r\n// * returns updated quotes array\r\n// */\r\n// export const updateAllQuotes = async (quotes, activeQuoteIndex) => {\r\n// console.log(\"quotes\", quotes);\r\n// let newQuotes = [];\r\n// for (const [quoteIndex, quoteObject] of quotes.entries()) {\r\n// let newQuote = null;\r\n// if (quoteIndex !== activeQuoteIndex && quoteObject.data) {\r\n// let fakeLayout = null;\r\n// const layout = getCurrentLayout();\r\n// fakeLayout = cloneDeep(layout);\r\n// fakeLayout.type = quoteObject.data.layout_type;\r\n// fakeLayout.scene = quoteObject.data.scene;\r\n// fakeLayout.getFeatures(true).forEach(parentGroup => {\r\n// parentGroup.layout = fakeLayout;\r\n// parentGroup.relatedItems.forEach(relItem => {\r\n// relItem.getParent = () => parentGroup;\r\n// })\r\n// });\r\n// await fakeLayout.selectLayout(layout.type, layout.type, null, layout.scene, null, true);\r\n// newQuote = await getQuoteInfo(quoteIndex, fakeLayout);\r\n// } else {\r\n// newQuote = await getQuoteInfo(quoteIndex);\r\n// }\r\n// newQuotes.push(newQuote);\r\n// }\r\n// console.log(\"newQuotes\", newQuotes);\r\n// store.dispatch(setQuotes(newQuotes));\r\n// return newQuotes\r\n// };\r\n\r\nexport const setNewActiveQuote = async (index, newQuotes) => {\r\n if (!newQuotes) {\r\n newQuotes = store.getState().quotesState.quotes;\r\n }\r\n const newQuote = newQuotes[index];\r\n if (newQuote && (newQuote.layoutType || newQuote.layoutType === 0) && newQuote.data) {\r\n loaderEnable();\r\n if (newQuote.room !== document.kvConfig.visualizerType) {\r\n await switchToNewVisualizerType(newQuote.room, false)\r\n }\r\n const layout = getCurrentLayout();\r\n const bvState = newQuote.data;\r\n const {wizardIsActive} = store.getState().wizardState;\r\n if (wizardIsActive) {\r\n // change selectedWizardValues!\r\n switchToWizardItem(null, null, null, null, false);\r\n }\r\n return layout.setItemsFromBvState(bvState)\r\n .then(() => {\r\n loaderDisable();\r\n store.dispatch(setVisualizerIsChanging(false))\r\n });\r\n }\r\n return Promise.resolve()\r\n};\r\n\r\nexport const deleteCartItemFromSQFTCalcData = async (cItem) => {\r\n if (cItem.sqftIds && cItem.sqftIds.length) {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const cItemQuote = quotes[cItem.currentQuote];\r\n\r\n //create workspace and remove items as if they were removed from sqft\r\n workspace.import(cItemQuote.sqFtCalcData);\r\n [...cItem.sqftIds].forEach(sqftId => {\r\n workspace.removeFeatureBySQFTId(sqftId);\r\n })\r\n\r\n //save sqft calc data to quote\r\n const sqftCalcData = await prepareSQFTData();\r\n updateQuoteWithSQFTData(sqftCalcData, cItem.currentQuote);\r\n\r\n //remove cartItems that was attached features like edges and backsplashes\r\n deleteCartItemsThatAreMissingInSQFTCalcData();\r\n }\r\n}\r\n","export default function ( nvert, vertx, verty, testx, testy ) {\r\n var i, j, c = false;\r\n for( i = 0, j = nvert-1; i < nvert; j = i++ ) {\r\n if( ( ( verty[i] > testy ) != ( verty[j] > testy ) ) &&\r\n ( testx < ( vertx[j] - vertx[i] ) * ( testy - verty[i] ) / ( verty[j] - verty[i] ) + vertx[i] ) ) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\nexport function pnpolyArray(points, test) { // receives pointsArray & mousePos, ex. [[50,100],[70, 100],[70, 200],[50,200]], {x:60, y: 80}\r\n let i, j, c = false;\r\n for (i = 0, j = points.length - 1; i < points.length; j = i++) {\r\n if (((points[i][1] > test.y) !== (points[j][1] > test.y)) &&\r\n (test.x < (points[j][0] - points[i][0]) * (test.y - points[i][1])\r\n / (points[j][1] - points[i][1]) + points[i][0])) {\r\n c = !c;\r\n }\r\n }\r\n return c;\r\n}\r\n\r\n/**\r\n* array of coordinates of each vertex of the polygon\r\n* var polygon = [ [ 1, 1 ], [ 1, 2 ], [ 2, 2 ], [ 2, 1 ] ];\r\n* isPointInsidePolygon([ 1.5, 1.5 ], polygon); // true\r\n*/\r\nexport function isPointInsidePolygon(point, polygon) {\r\n // ray-casting algorithm based on\r\n // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html/pnpoly.html\r\n\r\n let x = point.x, y = point.y;\r\n let inside = false;\r\n\r\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\r\n let xi = polygon[i].x, yi = polygon[i].y;\r\n let xj = polygon[j].x, yj = polygon[j].y;\r\n let intersect = ((yi > y) !== (yj > y))\r\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n\r\n if (intersect) inside = !inside;\r\n }\r\n\r\n return inside;\r\n}\r\n\r\n/**\r\n* array of coordinates of each vertex of the polygon\r\n* var polygon = [ [ 1, 1 ], [ 1, 2 ], [ 2, 2 ], [ 2, 1 ] ];\r\n* isPointInsidePolygon([ 1.5, 1.5 ], polygon); // true\r\n*/\r\nexport function isPointInsidePolygonArray(point, polygon) {\r\n var x = point[0], y = point[1];\r\n\r\n var inside = false;\r\n for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\r\n var xi = polygon[i][0], yi = polygon[i][1];\r\n var xj = polygon[j][0], yj = polygon[j][1];\r\n\r\n var intersect = ((yi > y) != (yj > y))\r\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n if (intersect) inside = !inside;\r\n }\r\n\r\n return inside;\r\n}\r\n","import workspace from \"../components/canvas/core/workspace\";\r\n//import {updateCurrentQuote} from \"../../../../../misc/quotesFunctions\";\r\nimport {\r\n getCurrentQuoteRoomCartItem,\r\n getRoomCartItemForCategoryName\r\n} from \"../../../misc/categorySwitchingFunctions\";\r\nimport store from \"../../../store\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport {addToCart, changeCartFeature, removeFromCart} from \"../../../actions/actionFunctions\";\r\nimport {prepareSQFTData} from \"../components/canvas/core/workspace/workspaceDataMapper\";\r\nimport {getFeatureGroup, getNavItems, onSQFTLoadImport, onSQFTLoadPrepareData} from \"./sqftHelperUi\";\r\nimport {ACTIVE_ROOM_TYPE} from \"../../../reducers/sqftMenuReducer\";\r\nimport {\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType\r\n} from \"../../../actions/sqftMenuFunctions\";\r\nimport {getRoomNameInQuote} from \"../../popups/sqftFeaturesPopup/parseSqftData\";\r\nimport {getQtCategoryName} from \"../../visComponents/qtCategoryName\";\r\nimport {getStringFeatureName} from \"../../../misc/helpers\";\r\nimport {MEASURE_UNITS, PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART} from \"../constants\";\r\n\r\n/**\r\n *\r\n */\r\nexport const getQtCatName = () => {\r\n const reduxState = store.getState();\r\n const {activeRoomType} = reduxState.sqftMenuState;\r\n const {qtActiveCategory} = reduxState.qtState;\r\n const {activeRoomId} = reduxState.sqftMenuState;\r\n const {activeQuoteIndex} = reduxState.quotesState;\r\n const fabricatorData = reduxState.fabricatorState;\r\n const intl = workspace.intl;\r\n\r\n let switcherTitle;\r\n let roomNavItem;\r\n\r\n switch (activeRoomType) {\r\n case ACTIVE_ROOM_TYPE.quote:\r\n switcherTitle = getRoomNameInQuote(activeQuoteIndex);\r\n break;\r\n case ACTIVE_ROOM_TYPE.category:\r\n switcherTitle = getQtCategoryName(qtActiveCategory, intl, fabricatorData)\r\n break;\r\n case ACTIVE_ROOM_TYPE.roomGroup:\r\n roomNavItem = getRoomGroupById(activeRoomId);\r\n if (!roomNavItem) {\r\n switcherTitle = \"\"\r\n } else {\r\n switcherTitle = getStringFeatureName(roomNavItem.part, intl.messages, intl.locale, fabricatorData);\r\n }\r\n break;\r\n }\r\n\r\n return switcherTitle;\r\n}\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const isQuoteByQTCatNameEqualToCurrentQuote = (qtCatName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const activeQuoteIndex = state.quotesState.activeQuoteIndex;\r\n const quote = getQuoteByRoomName(qtCatName);\r\n let newQuoteIndex = quotes.indexOf(quote);\r\n newQuoteIndex = newQuoteIndex < 0 ? 0 : newQuoteIndex\r\n\r\n return activeQuoteIndex === newQuoteIndex\r\n}\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const loadQuoteByQtCatName = async (qtCatName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n const quote = getQuoteByRoomName(qtCatName);\r\n let quoteIndex = quotes.indexOf(quote);\r\n quoteIndex = quoteIndex < 0 ? 0 : quoteIndex\r\n\r\n store.dispatch(setActiveQuoteIndex(quoteIndex));\r\n //await setNewActiveQuote(quoteIndex, quotes);\r\n loadActiveQuoteToSQFT().then();\r\n\r\n //todo fix error if quote is null\r\n store.dispatch(setSQFTActiveRoomId(qtCatName));\r\n store.dispatch(setSQFTActiveRoomIndex(null)); //todo if this is critical (set active room in qtCategory switcher)\r\n store.dispatch(setSQFTActiveRoomType(ACTIVE_ROOM_TYPE.quote));\r\n}\r\n\r\n\r\n/**\r\n * load quotes[activeQuoteIndex] to workspace\r\n */\r\nexport const getQuoteByRoomName = (roomName) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n return quotes.find((quote, index) => {\r\n const quoteByQtCatName = quote.qtCatName === roomName.trim().toLowerCase();\r\n const roomNameInQuote = getRoomNameInQuote(index);\r\n const quoteByRoomName = roomNameInQuote.trim().toLowerCase() === roomName.trim().toLowerCase();\r\n\r\n return quoteByQtCatName || quoteByRoomName\r\n });\r\n}\r\n\r\n/**\r\n * load quotes[activeQuoteIndex] to workspace\r\n */\r\nexport const loadActiveQuoteToSQFT = async () => {\r\n let payload = onSQFTLoadPrepareData();\r\n onSQFTLoadImport(payload);\r\n}\r\n\r\n/**\r\n * Checking type of current room and creates new or updating existing quote\r\n * @param sqftCalcData {object}\r\n */\r\nexport const saveSQFTDataToQuote = async (sqftCalcData = null) => {\r\n const state = store.getState();\r\n const activeRoomType = state.sqftMenuState.activeRoomType;\r\n const qtActiveCategory = state.qtState.qtActiveCategory;\r\n const activeRoomId = state.sqftMenuState.activeRoomId;\r\n const cartItems = state.cartState.cartItems;\r\n const activeRoomIndex = state.sqftMenuState.activeRoomIndex;\r\n\r\n if (activeRoomType === ACTIVE_ROOM_TYPE.category) {\r\n await createQuoteIfNotExistOrUpdateCurrent(qtActiveCategory.trim().toLowerCase());\r\n } else if (activeRoomType === ACTIVE_ROOM_TYPE.roomGroup) {\r\n //const roomNavItem = getRoomGroupById(activeRoomId);\r\n //const roomNavItemName = roomNavItem.part.partName.trim().toLowerCase();\r\n await createQuoteIfNotExistOrUpdateCurrent(activeRoomId);\r\n } else {\r\n if (!sqftCalcData) {\r\n sqftCalcData = await prepareSQFTData();\r\n console.log(\"sqft prepared data\", sqftCalcData);\r\n }\r\n updateActiveQuoteWithSQFTData(sqftCalcData);\r\n const quoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, activeRoomIndex);\r\n if (!quoteRoomCartItem) {\r\n addRoomToCart(getQtCatName());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Update specific quote with sqFtCalcData by given index\r\n */\r\nexport const updateQuoteWithSQFTData = (data, quoteIndex) => {\r\n const state = store.getState();\r\n const { quotes } = state.quotesState;\r\n\r\n const newQuotes = quotes.map((quote, qIndex) => {\r\n if (qIndex === quoteIndex) {\r\n return {\r\n ...quote,\r\n sqFtCalcData: { ...data }\r\n };\r\n }\r\n return quote;\r\n });\r\n\r\n store.dispatch(setQuotes(newQuotes));\r\n};\r\n\r\n/**\r\n * Update active quote with sqFtCalcData\r\n */\r\nexport const updateActiveQuoteWithSQFTData = (data) => {\r\n const state = store.getState();\r\n const { activeQuoteIndex } = state.quotesState;\r\n\r\n updateQuoteWithSQFTData(data, activeQuoteIndex);\r\n};\r\n\r\nexport const getSQFTIdsFromAllParentLists = (parentsLists) => {\r\n const SQFTIds = [];\r\n parentsLists.forEach(parentsList => {\r\n Object.keys(parentsList).forEach(parentKey => {\r\n if (!parentsList[parentKey] || !parentsList[parentKey].features) {\r\n return\r\n }\r\n let sqftFeatures = parentsList[parentKey].features;\r\n if (sqftFeatures && sqftFeatures.length) {\r\n sqftFeatures.forEach(sqftFeature => {\r\n SQFTIds.push(sqftFeature.sqftId)\r\n })\r\n }\r\n })\r\n })\r\n\r\n return SQFTIds\r\n}\r\n\r\n/**\r\n */\r\nexport const deleteCartItemsThatAreMissingInParentLists = (parentsLists, cartItems) => {\r\n const sqftIds = getSQFTIdsFromAllParentLists(parentsLists);\r\n const itemsToRemove = cartItems.filter(cItem => cItem.sqftId && !sqftIds.includes(cItem.sqftId));\r\n\r\n itemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n });\r\n};\r\n\r\n/**\r\n * This will return string ids\r\n * @param SQFTCalcData\r\n * @return {[]}\r\n */\r\nexport const getSQFTIdsFromSQFTCalcData = (SQFTCalcData) => {\r\n if (SQFTCalcData) {\r\n const SQFTIds = [];\r\n SQFTCalcData.countertops.forEach(countertop => {\r\n SQFTIds.push(countertop.id.toString());\r\n })\r\n\r\n return SQFTIds\r\n }\r\n}\r\n\r\n/**\r\n */\r\nexport const deleteCartItemsThatAreMissingInSQFTCalcData = () => {\r\n const state = store.getState();\r\n const cartItems = state.cartState.cartItems;\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n const quotes = state.quotesState.quotes;\r\n\r\n quotes.forEach((quote, quoteIndex) => {\r\n if (quote.sqFtCalcData) {\r\n const sqftIds = getSQFTIdsFromSQFTCalcData(quote.sqFtCalcData);\r\n\r\n cartItems\r\n .filter(cItem => cItem.currentQuote === quoteIndex)\r\n .forEach(cItem => {\r\n if (cItem.sqftQuantities) {\r\n const updatedQuantities = { ...cItem.sqftQuantities };\r\n\r\n // remove sqftIds from sqftQuantities that are not in the SQFTCalcData\r\n Object.keys(updatedQuantities).forEach(sqftId => {\r\n if (!sqftIds.includes(sqftId)) {\r\n delete updatedQuantities[sqftId];\r\n }\r\n });\r\n\r\n let newQuantity = Object.values(updatedQuantities).reduce((sum, qty) => sum + qty, 0);\r\n // The deleteCartItemsThatAreMissingInSQFTCalcData functionality is linked to this section.\r\n // If any changes are needed, ensure to update both places to maintain consistency.\r\n if (PARENT_KEYS_WITH_COMBINED_FEATURES_IN_CART.includes(cItem.partId)) {\r\n newQuantity = fabricatorSettings.measureUnit === MEASURE_UNITS.Metric\r\n ? Math.ceil10(newQuantity, -2)\r\n : Math.ceil(newQuantity);\r\n }\r\n\r\n // Update the cart item\r\n if (Object.keys(updatedQuantities).length > 0) {\r\n store.dispatch(changeCartFeature({\r\n ...cItem,\r\n sqftQuantities: updatedQuantities,\r\n quantity: newQuantity,\r\n }));\r\n } else {\r\n store.dispatch(removeFromCart(cItem));\r\n }\r\n }\r\n });\r\n }\r\n })\r\n};\r\n\r\n/**\r\n * @param qtCatName: string\r\n */\r\nexport const createQuoteIfNotExistOrUpdateCurrent = async (qtCatName) => {\r\n const currentQtCategoryInQuotes = getQuoteForCurrentQtCatName(qtCatName);\r\n const sqftCalcData = await prepareSQFTData();\r\n if (!currentQtCategoryInQuotes) {\r\n await createQuoteFromSqftCalcData(sqftCalcData, qtCatName)\r\n } else {\r\n updateActiveQuoteWithSQFTData(sqftCalcData);\r\n }\r\n}\r\n\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtCatName {string}\r\n */\r\nexport const createQuoteFromSqftCalcData = async (sqftCalcData, qtCatName) => {\r\n if (!workspace.isEmpty() || isManualCalculateNotEmpty(sqftCalcData)) {\r\n await createNewQuoteFromCategory(sqftCalcData, qtCatName);\r\n }\r\n}\r\n\r\n/**\r\n * @param qtCatName string\r\n */\r\nexport const getQuoteForCurrentQtCatName = (qtCatName) => {\r\n const {quotes} = store.getState().quotesState;\r\n return quotes.find(quote =>\r\n quote.qtCatName === qtCatName\r\n && quote.isVisibleInSQFT === false)\r\n}\r\n\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtActiveCategory {string}\r\n */\r\nexport const createNewQuoteFromCategory = async(sqftCalcData, qtActiveCategory) => {\r\n if (!workspace.isEmpty() || isManualCalculateNotEmpty(sqftCalcData)) {\r\n const quotes = await addNewQuote(sqftCalcData, qtActiveCategory);\r\n store.dispatch(setActiveQuoteIndex(quotes.length - 1));\r\n addRoomToCart(qtActiveCategory);\r\n }\r\n}\r\n\r\nexport const isManualCalculateNotEmpty = (sqftCalcData) => {\r\n if (sqftCalcData.manualCalculate) {\r\n return sqftCalcData.countertops.length > 0\r\n || sqftCalcData.backsplashes.length > 0\r\n || sqftCalcData.edges.length > 0\r\n }\r\n\r\n return false\r\n}\r\n/**\r\n * @param sqftCalcData {object}\r\n * @param qtActiveCategory {string}\r\n */\r\nconst addNewQuote = async (sqftCalcData, qtActiveCategory) => {\r\n //const currentQuote = await updateCurrentQuote();\r\n const {quotes} = store.getState().quotesState;\r\n const newQuotes = [...quotes, {\r\n quoteId: null,\r\n isCreatedInSQFT: true,\r\n isVisibleInSQFT: false,\r\n qtCatName: qtActiveCategory.trim().toLowerCase(),\r\n sqFtCalcData: sqftCalcData\r\n }];\r\n store.dispatch(setQuotes(newQuotes));\r\n\r\n return newQuotes\r\n};\r\n\r\n/**\r\n * @param qtCatName {string}\r\n */\r\nexport const addRoomToCart = (qtCatName) => {\r\n const roomCartItem = getRoomCartItemForCategoryName(qtCatName)\r\n if (roomCartItem) {\r\n store.dispatch(addToCart([roomCartItem]))\r\n return roomCartItem\r\n }\r\n}\r\n\r\n/**\r\n * update navItemBy roomIndex\r\n * @param roomName {string}\r\n */\r\nexport const getRoomGroupById = (roomName) => {\r\n const roomsFeatureGroup = getFeatureGroup('room');\r\n const roomsNavItems = getNavItems(roomsFeatureGroup, \"\", {}, false, true);\r\n\r\n return roomsNavItems.find(navItem => {\r\n return navItem.part.getFeatureName().toLowerCase() === roomName.toLowerCase()\r\n });\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.isShowerCommonGroup = true;\r\n }\r\n\r\n setArmHeadType() { // for feature\r\n const parent = this.getParent();\r\n const showerParent = parent.getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm, parent.partId);\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && !showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"0\") && !showerParent.showerFixture.disabled) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n // this.applyFeatureIfNotCompatible();\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); // roomLayout && roomScene\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n isActiveFeatureGroup(featureGroupId = \"\") {\r\n const showerParent = this.getParent();\r\n const featureGroup = showerParent[featureGroupId];\r\n return !!(featureGroup && featureGroup.activeFeature && !featureGroup.disabled)\r\n }\r\n\r\n togglePosition(position, partId) {\r\n const showerArm = this.getParent().relatedItems.find(featureGroup => featureGroup.partId === partId);\r\n if (showerArm && showerArm.layerPositions) {\r\n if (this.layerPositions[position]) {\r\n // if (!showerArm.layerPositions[position]) {\r\n // showerArm.layerPositions[position] = showerArm.getMatchingPositionFeature(position);\r\n // if (showerArm.disabled) {\r\n // showerArm.disabled = false;\r\n // }\r\n // }\r\n // we need always set here in the next line, because we might have another conditions. so update needed\r\n showerArm.layerPositions[position] = showerArm.getMatchingPositionFeature(position);\r\n if (showerArm.disabled) {\r\n showerArm.disabled = false;\r\n }\r\n } else {\r\n showerArm.layerPositions[position] = null;\r\n }\r\n }\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"bv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n}\r\n\r\n\r\n","import invert from 'lodash/invert';\r\n\r\nimport {splitFeatureName} from \"../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {Part} from \"./part\";\r\nimport store from '../../../store';\r\nimport {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\n\r\n/**\r\n * Used for Complex parts such as Vanity, to perform some base functionality for related items\r\n */\r\nexport class IntermediatePart extends Part {\r\n\r\n constructor(isChild) {\r\n super(false, isChild);\r\n this.disabled = false;\r\n this.defaultDisabled = false; // used after reset click\r\n this.canBeDisabled = false;\r\n }\r\n\r\n /**\r\n * This will be called on feature creation\r\n * @param dbFeature\r\n */\r\n load(dbFeature) {\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n\r\n /**\r\n * This will be called by the underlying vanity feature with a concrete instance of the part\r\n * @param dbFeature\r\n * @param part {Part}\r\n * @param setParent {boolean}\r\n * @param features\r\n */\r\n load_(dbFeature, part, setParent = true, features = 'features') {\r\n\r\n const featureList = features + \"List\";\r\n\r\n const {displayName} = dbFeature;\r\n let {featureName} = splitFeatureName(displayName);\r\n if (!featureName && dbFeature.groupName && dbFeature.displayName) {\r\n featureName = dbFeature.displayName.replace(dbFeature.groupName + \" - \", \"\")\r\n }\r\n // console.log('displayName:', displayName);\r\n\r\n if (setParent) {\r\n part.getParent = () => this;\r\n if (dbFeature.galleryImages) {\r\n const featured = dbFeature.galleryImages.find(galImage => galImage.featured);\r\n if (featured) {\r\n this.featuredImage = featured.url\r\n }\r\n dbFeature.galleryImages = dbFeature.galleryImages.sort((a, b) => b.default - a.default)\r\n }\r\n }\r\n\r\n if (!dbFeature.sharedFeatureName) {\r\n console.error(\"No sharedFeatureName property:\", dbFeature);\r\n }\r\n\r\n part.partName = featureName;\r\n part.metaData = dbFeature.metaData || {};\r\n\r\n if (dbFeature.s3Bindings && dbFeature.s3Bindings.length) {\r\n // dbFeature.s3Bindings = dbFeature.s3Bindings.filter(binding => binding.visualizer === \"Fireplace\")\r\n }\r\n\r\n part.dbFeature = dbFeature || {};\r\n if (!part.dbFeature.filterValueIDs) {\r\n part.dbFeature.filterValueIDs = {}\r\n }\r\n part.notAvailableInVisualizer = !dbFeature.s3Bindings || !dbFeature.s3Bindings.length;\r\n\r\n if (part.metaData.RoomLayout) {\r\n const roomLayout = part.metaData.RoomLayout;\r\n if (roomLayout.includes(LayoutAbbreviation.All)) {\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n } else if (Array.isArray(roomLayout) && roomLayout.length) {\r\n roomLayout.forEach(roomLayoutAbbreviation => {\r\n const layoutName = invert(LayoutAbbreviation)[roomLayoutAbbreviation];\r\n if (layoutName) { // Prevent bad roomLayout Metadata\r\n this[featureList][layoutName].push(part);\r\n }\r\n });\r\n } else { // single value\r\n const layoutName = invert(LayoutAbbreviation)[roomLayout];\r\n if(layoutName) {\r\n this[featureList][layoutName].push(part);\r\n }\r\n }\r\n }\r\n\r\n if (part.notAvailableInVisualizer || !part.metaData.RoomLayout) {\r\n part.notAvailableInVisualizer = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this[featureList][layoutName].push(part);\r\n })\r\n }\r\n\r\n // Object.keys(LayoutType).forEach(layoutName => {\r\n // this[features+\"List\"][layoutName].push(part);\r\n // });\r\n\r\n this.loadFeatureCommon(part);\r\n\r\n return part\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, firstOpenedFeature, firstOpenedConditions) { // to do\r\n navigationSubItems(filters, searchText) {\r\n // const featuresList = (forFeature && forFeature.metaData.layerPosition === SIDE_POSITIONS[1]) ? this.featuresParts : this.features;\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n // console.log(\"filterGroups\", filterGroups);\r\n return this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n\r\n navigationSubItemsWithFilter(propName, propValue, featuresToCheck = this.features) {\r\n return featuresToCheck.filter((feature) => {\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n }).map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n navigationSubItemsWithFilterMultipleConditions(arrayOfConditions, featuresToCheck = this.features) {\r\n // console.log('arrayOfConditions', arrayOfConditions);\r\n // console.log('featuresToCheck', featuresToCheck);\r\n return featuresToCheck.filter((feature) => {\r\n return feature.notAvailableInVisualizer || arrayOfConditions.every((conditionObject) => {\r\n const {propName, propValue} = conditionObject;\r\n return feature.matchesMetaForCondition(propName, propValue);\r\n });\r\n })\r\n }\r\n\r\n setDefault(layout, setNotInVisFeature = false) {\r\n this.setFeatureGroupDefault(layout, setNotInVisFeature)\r\n }\r\n\r\n setLayerPositions = (activeFeature = this.activeFeature) => {\r\n if (!activeFeature) {\r\n return\r\n }\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n if (layout && this.defaultLayerLayoutPositions && this.defaultLayerLayoutPositions[layout.type]) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.defaultLayerLayoutPositions[layout.type] === key\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n } else if (activeFeature.dbFeature.metaData[\"layerPosition\"] !== key) {\r\n this.layerPositions[key] = null;\r\n }\r\n })\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (layout.initialized) {\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (this.layerPositions[key] && !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else if (this.layerPositions[key]) { // here we have to change vanity cabinet to console for example\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n } else { // first time we should set everything by the default! // missing layers issue\r\n if ((activeFeature.dbFeature.metaData[\"layerPosition\"] === key)\r\n && (!this.layerPositions[key] || !this.layerPositions[key].matchesMetaForArrayOfConditions(conditions))) {\r\n this.layerPositions[key] = activeFeature;\r\n // } else if (this.setAllLayerPositions) {\r\n } else {\r\n const matchingPositionFeature = this.getMatchingPositionFeature(key);\r\n if (matchingPositionFeature) {\r\n this.layerPositions[key] = matchingPositionFeature;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n toggleLayerPositions() {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = this.disabled ? null : this.getMatchingPositionFeature(key)\r\n })\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", fromFeature = this.activeFeature, fromLayout = null) => {\r\n if (fromFeature) { //just in case\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (fromFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: fromFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n if (fromLayout) {\r\n let roomLayoutMeta = arrayOfConditions.find(condition => condition.propName === \"RoomLayout\");\r\n let roomSceneMeta = arrayOfConditions.find(condition => condition.propName === \"RoomScene\");\r\n if (roomLayoutMeta) {\r\n roomLayoutMeta.propValue = fromLayout.getCurrentLayoutAbbreviation();\r\n }\r\n if (roomSceneMeta) {\r\n roomSceneMeta.propValue = fromLayout.scene;\r\n }\r\n }\r\n const skuNamesPartIds = [\"shower_door\", \"walk_in_tub\", \"shower_pan_combo\"];\r\n const whereToFind = (!this.layerPositions || (position === Object.keys(this.layerPositions)[0])) ? this.features : this.featuresParts;\r\n return whereToFind.find((feature) => {\r\n return (skuNamesPartIds.includes(this.partId) || name1 === feature.getSplittedFeatureName())\r\n && feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'RoomScene',\r\n propValue: layout.scene\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n if (this.hasAdditionalParts) {\r\n this.checkIfFeaturePartIsMatching();\r\n }\r\n return this._setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return this._setLayers(layout);\r\n }\r\n showLayerPositionsModal() {\r\n return false\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (this && this.dbFeature && this.dbFeature.sharedFeatureName) {\r\n console.log(`${this.partId}:`, this.dbFeature.sharedFeatureName);\r\n }\r\n this.handleClick(ignoreLocked, \"all_walls\");\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * @param ignoreLocked {boolean} // false by the default, is used by wizard ONLY\r\n */\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n parent.firstClick[activeQuoteIndex] = true; // allow to show active item\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (featureIsLocked) {\r\n parent.activeLockedFeature = this;\r\n } else {\r\n if (parent.activeLockedFeature) {\r\n parent.activeLockedFeature = null;\r\n }\r\n this.featureClick();\r\n }\r\n }\r\n\r\n featureClick() {\r\n const parent = this.getParent();\r\n parent.placeholderChanged = true;\r\n if (this.notAvailableInVisualizer) {\r\n parent.activeNotInVisualizerFeature = this; // do not change the activeFeature (in order to keep the layer)\r\n } else if (parent.activeNotInVisualizerFeature) {\r\n parent.activeNotInVisualizerFeature = null; // remove it from other searches and so on\r\n parent.activeFeature = this;\r\n } else {\r\n parent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n hideLayers() {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.src = '';\r\n }\r\n })\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = '';\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n })\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n const feature = this.layerPositions[key];\r\n if (feature) {\r\n feature.layer.zIndex = getZIndex(feature) + keyIndex*10;\r\n }\r\n })\r\n } else if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = getZIndex(this.activeFeature);\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, keyIndex) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) + (keyIndex + 1) * 10;\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeEdgeFromPartName(partName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup && edgeFilterGroup.values && edgeFilterGroup.values.length) {\r\n const edgeFilterGroupValues = edgeFilterGroup.values.sort((a,b) => {\r\n return a.value && b.value && (b.value.length - a.value.length)\r\n }); // 1st should be \"Full Bullnose\", then simple \"Bullnose\"\r\n edgeFilterGroupValues.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n partName = partName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return partName\r\n }\r\n\r\n getCountertopGroupsSplittedFeatureName = () => {\r\n if (this._countertopGroupsCustomDisplayName == null) {\r\n this._countertopGroupsCustomDisplayName = this.dbFeature.sharedFeatureName;\r\n }\r\n return this._countertopGroupsCustomDisplayName\r\n };\r\n\r\n getSplittedFeatureName = () => {\r\n if (this._customDisplayName == null) {\r\n this._customDisplayName = this.dbFeature.sharedFeatureName || this.partName || \"\";\r\n if (this.partId === \"center_island_countertop\") {\r\n this._customDisplayName = this._customDisplayName\r\n .replace(/2 0 /g, \"\")\r\n .replace(/Center Island Countertop 1 /g, \"\");\r\n }\r\n }\r\n return this._customDisplayName\r\n };\r\n\r\n getMatchingFeatureName = () => {\r\n return this.getSplittedFeatureName()\r\n };\r\n\r\n getModuleFeatureName = () => {\r\n // return this.partName.split(\" M_\")[0];\r\n return this.partName.split(\" M\")[0];\r\n };\r\n\r\n featureIsMatchingFilters(currentFeature, activeFilters, filters = []) {\r\n return filters.every(filter => {\r\n return activeFilters[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id]\r\n && currentFeature.dbFeature.filterValueIDs[filter.id].includes(activeFilters[filter.id][0])\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n const activeFeatureConditions = this.getActiveFeatureConditions();\r\n const name1 = this.activeFeature.getSplittedFeatureName();\r\n const activeFeaturePart = this.activeFeatureParts[0];\r\n if (!(activeFeaturePart.matchesMetaForArrayOfConditions(activeFeatureConditions)\r\n && name1 === activeFeaturePart.getSplittedFeatureName())) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(this.activeFeature, activeFeatureConditions);\r\n }\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n}\r\n","import {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {featureThumbnailUrl, getCartItemObject} from \"./helpers\";\r\nimport store from \"../store\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {setQtActiveCategory} from \"../actions/actionFunctions\";\r\nimport {getCommonVisualizerType} from \"../config\";\r\nimport {hasSubscriptionForRoom} from \"./visualizerSwitchingFunctions\";\r\nimport {updateCurrentQuote} from \"./quotesFunctions\";\r\nimport {updateAllWizardValues} from \"../actions/wizardFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport { getNavItems } from \"../bvcomponents/sqft/helpers/sqftHelperUi\";\r\n\r\n/**\r\n * @param qtCatName {string}\r\n * @param quoteIndex {number}\r\n * returns {string}\r\n */\r\nexport const getRoomImageFromQtCategory = (qtCatName, quoteIndex) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (!fabricatorState.settings.useCategorySwitching) {\r\n return \"\"\r\n }\r\n const lowerCasedVisualizerType = getCommonVisualizerType().toLowerCase();\r\n if (!qtCatName && cartState.cartItems.length && Number.isInteger(quoteIndex)) {\r\n const {cartItems} = cartState;\r\n const existingAddedCartItem = cartItems.find(cItem => cItem.partId === \"room\" && (cItem.currentQuote === quoteIndex));\r\n if (existingAddedCartItem && !featureIsMatchingQtCatName(existingAddedCartItem.cartFeature, lowerCasedVisualizerType)\r\n && (!fabricatorState.settings.allowVisualizerSwitching || !hasSubscriptionForRoom(getRoomNameToCompare(existingAddedCartItem.cartFeature)))) {\r\n return featureThumbnailUrl(existingAddedCartItem.cartFeature)\r\n }\r\n return \"\"\r\n }\r\n const currentRoomName = qtCatName.trim().toLowerCase();\r\n const layout = getCurrentLayout();\r\n const roomFg = layout.getFeatureGroupByPartId(\"room\");\r\n if (roomFg) {\r\n const fgNavItems = layout.designNavigationItems({part: roomFg}, null, \"\", false, \"all\");\r\n const roomFeatureNavItem = fgNavItems.find(navItem => {\r\n return featureIsMatchingQtCatName(navItem.part, currentRoomName) && !featureIsMatchingQtCatName(navItem.part, lowerCasedVisualizerType)\r\n });\r\n if (roomFeatureNavItem) {\r\n return featureThumbnailUrl(roomFeatureNavItem.part)\r\n }\r\n }\r\n return \"\"\r\n}\r\n\r\n/**\r\n * @param cartItems {[cartItemInterface]}\r\n * @param quoteIndex {number}\r\n * returns {string}\r\n */\r\nexport const getCurrentQuoteRoomCartItem = (cartItems, quoteIndex) => {\r\n return cartItems.find(cItem => cItem.partId === \"room\" && cItem.currentQuote === quoteIndex)\r\n}\r\n\r\n/**\r\n * @param roomFeature {featureInterface}\r\n * returns {string}\r\n */\r\nexport const getRoomNameToCompare = (roomFeature) => {\r\n if (!roomFeature) {\r\n return \"\"\r\n }\r\n if (roomFeature.getLowerCasedCustomDisplayName) {\r\n return roomFeature.getLowerCasedCustomDisplayName() || roomFeature.dbFeature.sharedFeatureName || \"\"\r\n }\r\n return roomFeature.dbFeature.sharedFeatureName || \"\"\r\n}\r\n\r\n/**\r\n * @param cartItems {[cartItemInterface]}\r\n * @param quoteIndex {number}\r\n * @param withVisualizerCheck {boolean}\r\n * returns {string}\r\n */\r\nexport const getCurrentQuoteRoomName = (cartItems, quoteIndex, withVisualizerCheck = false) => {\r\n const quoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, quoteIndex);\r\n if (quoteRoomCartItem && quoteRoomCartItem.cartFeature) {\r\n return getRoomNameToCompare(quoteRoomCartItem.cartFeature)\r\n }\r\n return withVisualizerCheck ? getCommonVisualizerType() : \"\"\r\n}\r\n\r\n/**\r\n * @param qtCategoryName {string}\r\n * @param fabricatorSettings {object}\r\n * returns {object}\r\n */\r\nexport const getRoomCartItemForCategoryName = (qtCategoryName, fabricatorSettings) => {\r\n const currentRoomName = qtCategoryName.trim().toLowerCase();\r\n const layout = getCurrentLayout();\r\n\r\n //1.) get room from qtCategories\r\n if (layout.qtCategories) {\r\n for (let i = 0; i < layout.qtCategories.length; i++) {\r\n const qtCategory = layout.qtCategories[i];\r\n if (qtCategory.subParts) {\r\n const roomFg = qtCategory.subParts.find(subPart => subPart.part.partId === \"room\");\r\n if (roomFg) {\r\n const fgNavItems = layout.designNavigationItems(roomFg, null, \"\", false, true);\r\n let roomFeatureNavItem = fgNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, currentRoomName));\r\n if (!roomFeatureNavItem) {\r\n let settings = fabricatorSettings;\r\n if (!settings) {\r\n settings = store.getState().fabricatorState.settings;\r\n }\r\n if (settings.allowVisualizerSwitching) {\r\n const visualizerRoomName = getCommonVisualizerType(document.kvConfig.visualizerType);\r\n if (visualizerRoomName !== qtCategoryName) {\r\n // QCDES-3163 cases when categories are not the same as room names, but we still need to add Room Cart Item\r\n roomFeatureNavItem = fgNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, visualizerRoomName));\r\n }\r\n }\r\n }\r\n if (roomFeatureNavItem) {\r\n return getCartItemObject(roomFeatureNavItem.part, 1, qtCategory.name)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //2.) get room from room Groups\r\n const roomsFeatureGroup = layout.getSubPartFromQtCategories('room');\r\n const roomsNavItems = getNavItems(roomsFeatureGroup, \"\", {}, false, true);\r\n\r\n if (roomsNavItems) {\r\n const roomFeatureNavItem = roomsNavItems.find(navItem => featureIsMatchingQtCatName(navItem.part, currentRoomName));\r\n if (roomFeatureNavItem) {\r\n return getCartItemObject(roomFeatureNavItem.part, 1, qtCategoryName);\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * @param newCartItems {[cartItemInterface]}\r\n * @param setNewRoomIndex {boolean}\r\n * @param shouldCreateNewQuotes {boolean}\r\n * returns {[cartItemInterface]}\r\n */\r\nexport const updateQuoteRoomsForCartItems = async (newCartItems, setNewRoomIndex = false, shouldCreateNewQuotes = true) => {\r\n const {fabricatorState, qtState, cartState, quotesState, wizardState} = store.getState();\r\n if (!fabricatorState.settings.useCategorySwitching) {\r\n return newCartItems\r\n }\r\n const {qtActiveCategory} = qtState;\r\n const {cartItems} = cartState;\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n const {wizardList, wizardIsActive} = wizardState;\r\n\r\n const createdRoomCartItems = [];\r\n const layout = getCurrentLayout();\r\n\r\n for (const newCartItem of [...newCartItems]) { // here we are changing array to prevent looping each time we add a new cart item below\r\n\r\n const withCreated = [...cartItems, ...createdRoomCartItems];\r\n\r\n const currentRoomName = newCartItem.qtCatName ? newCartItem.qtCatName.trim().toLowerCase() : qtActiveCategory.trim().toLowerCase();\r\n const existingCartRoom = getCurrentQuoteRoomCartItem(withCreated, activeQuoteIndex);\r\n\r\n console.log(\"existingCartRoom\", existingCartRoom);\r\n\r\n if (existingCartRoom && existingCartRoom.cartFeature && (\r\n !showWizardInsteadOfQT(wizardList, wizardIsActive)\r\n && layout.qtCategories && layout.qtCategories.length > 1\r\n && !featureIsMatchingQtCatName(existingCartRoom.cartFeature, currentRoomName)) || (\r\n fabricatorState.settings.allowVisualizerSwitching && existingCartRoom && existingCartRoom.fromVisualizerType && (\r\n existingCartRoom.fromVisualizerType !== document.kvConfig.visualizerType\r\n )\r\n )) {\r\n\r\n if (!getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings)) { // this checks if room is available for current category\r\n break;\r\n }\r\n\r\n const existingAddedCartItem = withCreated.find(cItem => cItem.partId === \"room\" && featureIsMatchingQtCatName(cItem.cartFeature, currentRoomName));\r\n let newActiveQuoteIndex = 0;\r\n if (existingAddedCartItem) {\r\n newActiveQuoteIndex = existingAddedCartItem.currentQuote;\r\n } else if (shouldCreateNewQuotes) { // here we add a new room and add a new room cartItem\r\n const currentQuote = await updateCurrentQuote();\r\n const newQuotes = [...currentQuote, {}];\r\n newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n store.dispatch(setQuotes(newQuotes));\r\n // console.log(\"newCreatedRooms\", newQuotes);\r\n const roomCartItem = getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings);\r\n if (roomCartItem && !newCartItems.some(cItem => {\r\n // QCDES-3901 if we are already adding room to the cart - no need to add another room\r\n return (cItem.currentQuote === roomCartItem.currentQuote)\r\n && (cItem.partId === roomCartItem.partId)\r\n && (cItem.cartFeature.dbFeature.id === roomCartItem.cartFeature.dbFeature.id)\r\n })) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n newCartItems.push(newRoomCartItem);\r\n createdRoomCartItems.push(newRoomCartItem);\r\n }\r\n }\r\n console.log(\"newActiveQuoteIndex\", newActiveQuoteIndex);\r\n newCartItem.currentQuote = newActiveQuoteIndex;\r\n if (setNewRoomIndex) {\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n }\r\n } else if (!existingCartRoom && (newCartItem.partId !== \"room\")) { // we should add room cart item in current quote\r\n const roomCartItem = getRoomCartItemForCategoryName(currentRoomName, fabricatorState.settings);\r\n if (roomCartItem) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: Number.isInteger(newCartItem.currentQuote) ? newCartItem.currentQuote : activeQuoteIndex\r\n })\r\n newCartItems.push(newRoomCartItem);\r\n createdRoomCartItems.push(newRoomCartItem);\r\n }\r\n }\r\n\r\n }\r\n\r\n return newCartItems\r\n}\r\n\r\n\r\n/**\r\n * update isVisibleInSQFT status\r\n */\r\nexport const updateSQFTCreatedStatusForQuotes = async () => {\r\n const {quotes} = store.getState().quotesState;\r\n const updatedQuotes = quotes.map(quote => {\r\n quote.isVisibleInSQFT = true\r\n return {...quote}\r\n })\r\n\r\n store.dispatch(setQuotes(updatedQuotes));\r\n}\r\n\r\n/**\r\n * @param quoteRoomName {string}\r\n * @param feature {featureInterface}\r\n */\r\nexport const getQtCategoryFromQuoteRoomName = (quoteRoomName, feature = null) => {\r\n const layout = getCurrentLayout();\r\n if (!layout.qtCategories) {\r\n return null\r\n }\r\n return layout.qtCategories.find(qtCat => {\r\n if (feature) {\r\n return featureIsMatchingQtCatName(feature, qtCat.name, true)\r\n }\r\n return qtCat.name.trim().toLowerCase() === quoteRoomName\r\n });\r\n}\r\n\r\n/**\r\n * @param feature {featureInterface}\r\n * @param qtCategoryName {string}\r\n * @param needToLowerCaseName {boolean}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsMatchingQtCatName = (feature, qtCategoryName = \"\", needToLowerCaseName = false) => {\r\n if (!feature || !qtCategoryName) {\r\n return false\r\n }\r\n const checkCatName = needToLowerCaseName ? qtCategoryName.trim().toLowerCase() : qtCategoryName;\r\n\r\n // we need to have both compares here because:\r\n // bugfix/fix for comparing room names (customDisplayName is 'A - Kitchen', sharedFeatureName is 'Kitchen')\r\n // bugfix/fix for comparing room names (customDisplayName is 'Shower', sharedFeatureName is 'Bathroom', qtCat - 'Shower')\r\n const customLowerCasedName = feature.getLowerCasedCustomDisplayName ? feature.getLowerCasedCustomDisplayName() : \"\";\r\n const originalLowerCasedName = feature.getLowerCasedSharedFeatureName ? feature.getLowerCasedSharedFeatureName() : \"\";\r\n return (customLowerCasedName === checkCatName) || (originalLowerCasedName === checkCatName)\r\n}\r\n\r\n/**\r\n * update qtActiveCategory if room was selected and qtActiveCategory is not set\r\n * @param quoteIndex {number}\r\n */\r\nexport const checkIfNeedToSetNewCategory = (quoteIndex = 0) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (fabricatorState.settings.useCategorySwitching) {\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartState.cartItems, quoteIndex);\r\n const qtCategory = getQtCategoryFromQuoteRoomName(\"\", selectedQuoteRoomCartItem ? selectedQuoteRoomCartItem.cartFeature : null);\r\n if (qtCategory) {\r\n store.dispatch(setQtActiveCategory(qtCategory.name));\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * here we check if new room is needed if we are adding a new room, but there is already added another room\r\n * @param newCartItems {[cartItemInterface]}\r\n * @returns {cartItemInterface}\r\n */\r\nexport const getOtherRoomCartItemThatIsAddedToCurrentQuote = (newCartItems) => {\r\n if (newCartItems.length !== 1 || newCartItems[0].partId !== \"room\") {\r\n return null\r\n }\r\n const {cartState, quotesState} = store.getState();\r\n const addedRoom = getCurrentQuoteRoomCartItem(cartState.cartItems, quotesState.activeQuoteIndex);\r\n if (addedRoom && (addedRoom.cartFeature.partName !== newCartItems[0].cartFeature.partName)) {\r\n return addedRoom\r\n }\r\n return null\r\n}\r\n\r\n/**\r\n * here we create a new room (quote) and set new cart item quoteIndex\r\n * @param newRoomCartItem {cartItemInterface}\r\n * @param oldRoomCartItem {cartItemInterface}\r\n * @returns {cartItemInterface}\r\n */\r\nexport const addNewQuoteWithNewRoomCartItem = async (newRoomCartItem, oldRoomCartItem) => {\r\n const {quotesState, wizardState, fabricatorState} = store.getState();\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n const currentQuote = await updateCurrentQuote();\r\n const newQuotes = [...currentQuote, {}];\r\n // console.log(\"newCreatedRooms\", newQuotes);\r\n const newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n newRoomCartItem = Object.assign({}, newRoomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n store.dispatch(setQuotes(newQuotes));\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n if (oldRoomCartItem && wizardState && wizardState.allWizardsValues.length && wizardState.wizardActiveItem) {\r\n const newValues = wizardState.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === activeQuoteIndex\r\n && wizObject.isLastActiveWizard\r\n && wizObject.wizardItemId === wizardState.wizardActiveItem.id\r\n && wizObject.wizardSelectedValues\r\n && (Object.keys(wizObject.wizardSelectedValues).length === (wizardState.wizardActiveStep + 1))\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].partId === \"room\"\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].selectedFeature\r\n && wizObject.wizardSelectedValues[wizardState.wizardActiveStep].selectedFeature.dbFeature.id !== oldRoomCartItem.cartFeature.dbFeature.id) {\r\n console.log(\"changing allSelectedWizardValues, we need to make sure they are correctly updated\", );\r\n if (Object.keys(wizObject.wizardSelectedValues).length === 1 && fabricatorState.settings.allowVisualizerSwitching) {\r\n // we don't need to keep one item selected wizard in old quoteIndex\r\n return null\r\n } else {\r\n wizObject.wizardSelectedValues[wizardState.wizardActiveStep] = Object.assign(\r\n {},\r\n wizObject.wizardSelectedValues[wizardState.wizardActiveStep],\r\n {selectedFeature: oldRoomCartItem.cartFeature}\r\n )\r\n }\r\n }\r\n return wizObject\r\n }).filter(wizObject => wizObject)\r\n store.dispatch(updateAllWizardValues(newValues))\r\n }\r\n return newRoomCartItem\r\n}\r\n","import {\r\n CABINET_COMMON_COLOR_PART_IDS,\r\n FEATUREGROUP_PART_ID,\r\n MITER_EDGE_NAMES,\r\n MITER_UNDERWRAP_EDGE_NAMES,\r\n SHAPE_PART_ID,\r\n SHAPE_TYPE,\r\n SQFT_APPLIANCES\r\n} from \"../constants\";\r\nimport store from \"./../../../store\";\r\nimport {getCountertopFeatureGroup, getCurrentLayout} from \"../../appLayout\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport {getStringFeatureName} from \"../../../misc/helpers\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport {isSFTCabinetsGroup} from \"./sqftNavigationHelper\";\r\nimport {getFeatureGroup} from \"./sqftHelperUi\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\n\r\nexport const getShapeFeatureId = (partId) => {\r\n const state = store.getState();\r\n const { sqftFromFeature } = state.sqftState;\r\n const { wizardIsActive, wizardSelectedValues } = state.wizardState;\r\n const layout = getCurrentLayout();\r\n const isCabinetsMode = isSFTCabinetsGroup();\r\n\r\n // 1) Assign feature by sqftFromFeature that was passed from visualizer quoting tool\r\n if (wizardIsActive) {\r\n for (const key in wizardSelectedValues) {\r\n if (wizardSelectedValues.hasOwnProperty(key)) {\r\n const selectedFeature = wizardSelectedValues[key] ? wizardSelectedValues[key].selectedFeature : null;\r\n if (selectedFeature && selectedFeature.partId === partId) {\r\n return selectedFeature.dbFeature.id;\r\n }\r\n }\r\n }\r\n }\r\n\r\n //1.1) For the cabinets we will assign activeFeature from featureGroup\r\n if (!isCabinetsMode && sqftFromFeature && sqftFromFeature.cartFeature.partId === partId) {\r\n console.log(\"new shape featureId from sqftFromFeature\", sqftFromFeature.cartFeature.dbFeature.id);\r\n return sqftFromFeature.cartFeature.dbFeature.id;\r\n }\r\n\r\n //2) Assign default active feature group feature for the part id\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature) {\r\n console.log(\"new shape featureId featureGroup activeFeature\", featureGroup.activeFeature.dbFeature.id);\r\n return featureGroup.activeFeature.dbFeature.id;\r\n }\r\n\r\n //2.5) Assign feature for slab placeholder\r\n if (partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n const countertopFeatureGroup = getCountertopFeatureGroup();\r\n if (sqftFromFeature && sqftFromFeature.cartFeature.partId === countertopFeatureGroup.partId) {\r\n console.log(\"new shape featureId from sqftFromFeature for the slabPlaceHolder\", sqftFromFeature.cartFeature.dbFeature.id);\r\n return sqftFromFeature.cartFeature.dbFeature.id;\r\n }\r\n\r\n if (countertopFeatureGroup && countertopFeatureGroup.activeFeature) {\r\n console.log(\"new shape featureId featureGroup activeFeature for the slabPlaceHolder\", countertopFeatureGroup.activeFeature.dbFeature.id);\r\n return countertopFeatureGroup.activeFeature.dbFeature.id;\r\n }\r\n }\r\n\r\n //3) Assign any feature\r\n //todo\r\n console.log(\"new shape featureId\", null);\r\n return null\r\n}\r\n\r\nexport const getFeatureNameById = (featureId) => {\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(featureId);\r\n const intl = workspace.intl;\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n\r\n return getStringFeatureName(feature, intl.messages, intl.locale, fabricatorData);\r\n}\r\n\r\nexport const shouldChangeCabinetShapePartId = (relatedParentFeature, newFeature) => {\r\n //console.log(\"relatedParentFeature\", relatedParentFeature);\r\n //console.log(\"sqftFromFeature\", sqftFromFeature);\r\n if (!newFeature || !relatedParentFeature) {\r\n return false\r\n }\r\n\r\n const sqftFromFeatureParentGroup = newFeature.getParent();\r\n const relatedParentParentGroup = relatedParentFeature.getParent();\r\n\r\n if ((CABINET_COMMON_COLOR_PART_IDS).includes(sqftFromFeatureParentGroup.partId)\r\n && (CABINET_COMMON_COLOR_PART_IDS).includes(relatedParentParentGroup.partId)\r\n ) {\r\n const sqftFromFeatureFeatureName = newFeature.getFeatureName();\r\n const relatedParentFeatureName = relatedParentFeature.getFeatureName();\r\n //console.log(\"sqftFromFeatureFeatureName\", sqftFromFeatureFeatureName);\r\n //console.log(\"relatedParentFeatureName\", relatedParentFeatureName);\r\n\r\n if (sqftFromFeatureFeatureName !== relatedParentFeatureName) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport const getEdgeFilterByValue = (filterValue = 'Waterfall') => {\r\n const state = store.getState();\r\n const filterGroups = state.filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n\r\n return edgeFilterGroup ? edgeFilterGroup.values.filter(group => group.value === filterValue) : [];\r\n};\r\n\r\nexport const isWaterfallFeature = (edgeFeatureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return false\r\n }\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === edgeFeatureId);\r\n if (!edgeFeature) {\r\n return false\r\n }\r\n\r\n const intl = workspace.intl;\r\n const state = store.getState();\r\n const fabricatorData = state.fabricatorState;\r\n let edgeNameTranslated = getStringFeatureName(edgeFeature.part, intl.messages, intl.locale, fabricatorData);\r\n\r\n return edgeNameTranslated.toLowerCase().includes('waterfall')\r\n}\r\n\r\nexport const isMiterEdge = (featureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return false\r\n }\r\n\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (!edge) {\r\n return false\r\n }\r\n\r\n const edgeName = edge.part.getFeatureName();\r\n\r\n return MITER_EDGE_NAMES.includes(edgeName);\r\n}\r\n\r\nexport const getEdgeByFeatureId = (featureId) => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === featureId);\r\n if (!edge) {\r\n return null\r\n }\r\n\r\n return edge\r\n}\r\n\r\nconst parseNumberFromString = (str) => {\r\n // Convert the string \"1 1/2\" to 1.5\r\n const fractionMatch = str.match(/(\\d+)\\s+(\\d+)\\/(\\d+)/);\r\n if (fractionMatch) {\r\n const [_, whole, numerator, denominator] = fractionMatch;\r\n void _;\r\n return parseFloat(whole) + (parseFloat(numerator) / parseFloat(denominator));\r\n }\r\n\r\n // Convert a string like \"1 1/2\", \"2-3\" into separate numbers\r\n const numberMatch = str.match(/\\d+(\\.\\d+)?/g);\r\n if (numberMatch) {\r\n return Math.max(...numberMatch.map(Number));\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const getMiterEdgeHeight = (featureId = null) => {\r\n //get height from featureName\r\n if (featureId) {\r\n const miterEdgeFeature = getEdgeByFeatureId(featureId);\r\n if (miterEdgeFeature) {\r\n const edgeName = miterEdgeFeature.part.getFeatureName();\r\n\r\n const heightFromFeatureName = parseNumberFromString(edgeName);\r\n\r\n if (edgeName !== 'Rimrock - 981' // don't get height from this edge\r\n && heightFromFeatureName > 0.5\r\n ) {\r\n return heightFromFeatureName\r\n }\r\n }\r\n }\r\n\r\n return sqftConfig.measureUnit === \"Imperial\" ? sqftConfig.miteredEdgeAdditionalImperialArea : sqftConfig.miteredEdgeAdditionalMetricArea;\r\n};\r\n\r\nexport const getMiterEdgeFeature = () => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edgeFeature = navItems.find(edge => {\r\n return MITER_EDGE_NAMES.includes(edge.part.partName);\r\n });\r\n\r\n if (!edgeFeature) {\r\n edgeFeature = navItems.find(edge => edge.part.partName.toLowerCase().includes('miter'));\r\n }\r\n\r\n if (edgeFeature) {\r\n return edgeFeature.part\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getMiterUnderwrap = () => {\r\n const navItems = getEdgeFeatures();\r\n if (!navItems) {\r\n return null\r\n }\r\n\r\n let edgeFeature = navItems.find(edge => {\r\n return MITER_UNDERWRAP_EDGE_NAMES.includes(edge.part.partName.toLowerCase());\r\n });\r\n\r\n if (edgeFeature) {\r\n return edgeFeature.part\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getBumpoutFeature = () => {\r\n const bumpoutFeatureGroup = getFeatureGroup(FEATUREGROUP_PART_ID.specialty_cut_and_designs);\r\n const layout = getCurrentLayout();\r\n\r\n return layout.designNavigationItems(bumpoutFeatureGroup,\r\n {},\r\n 'bumpout',\r\n true,\r\n true,\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n}\r\n\r\nexport const isFeatureUnitUseEach = (feature) => {\r\n return feature.dbFeature.unit === \"Each\"\r\n}\r\n\r\nexport const createApplianceOnTheWorkspace = (itemName, featureId = null, size = null) => {\r\n const getSize = (itemName) => {\r\n switch (itemName) {\r\n case SQFT_APPLIANCES.sink:\r\n return {width: 22, height: 30}\r\n case SQFT_APPLIANCES.doubleSink:\r\n return {width: 22, height: 33}\r\n default:\r\n return {width: 30, height: 26}\r\n }\r\n }\r\n if (!size) {\r\n size = getSize(itemName);\r\n }\r\n\r\n let iconFullName = 'icon-'+ itemName +'-placeholder';\r\n let svg = document.getElementById(iconFullName);\r\n if (!svg) {\r\n console.log('svg not found', 'icon-'+ itemName +'-placeholder');\r\n return\r\n }\r\n console.log('svg', iconFullName);\r\n\r\n let img = new Image(),\r\n xml = new XMLSerializer().serializeToString(svg), // get svg data\r\n svg64 = btoa(xml); // make it base64\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64; // set it as the source of the img element\r\n\r\n const movableImage = workspace.addImage(img, size.width, size.height, null, null, SHAPE_TYPE.appliances, itemName, function () {});\r\n movableImage.setFeatureId(featureId);\r\n\r\n return movableImage;\r\n}\r\n\r\nexport const getDbFeatureName = (dbFeature) => {\r\n return dbFeature.metaData.ActualDisplayedName\r\n ? dbFeature.customDisplayName && (dbFeature.customDisplayName !== dbFeature.sharedFeatureName)\r\n ? dbFeature.customDisplayName\r\n : metaData.ActualDisplayedName[0]\r\n : dbFeature.customDisplayName || dbFeature.displayName || dbFeature.sharedFeatureName;\r\n};\r\n\r\n/**\r\n * Sort features By Width ASC\r\n * @param features\r\n */\r\nexport const getSortedFeatures = (features) => {\r\n features.sort((a, b) => {\r\n const indexA = a.dbFeature.description.indexOf('Width');\r\n const indexB = b.dbFeature.description.indexOf('Width');\r\n\r\n // Check if 'Width' was found in descriptions\r\n if (indexA !== -1 && indexB !== -1) {\r\n const widthA = parseInt(a.dbFeature.description.substr(indexA + 6, 3), 10);\r\n const widthB = parseInt(b.dbFeature.description.substr(indexB + 6, 3), 10);\r\n\r\n return widthB - widthA;\r\n } else if (indexA !== -1) {\r\n // Place items without 'Width' in descriptions below\r\n return -1; // Move item b lower in the list\r\n } else if (indexB !== -1) {\r\n // Place items without 'Width' in descriptions below\r\n return 1; // Move item a lower in the list\r\n } else {\r\n // If neither has 'Width' in description, maintain current order\r\n return 0;\r\n }\r\n })\r\n\r\n return features\r\n}\r\n\r\n// const getSplittedDbFeatureName = (dbFeature) => {\r\n// if (dbFeature.customDisplayName == null) {\r\n// dbFeature.customDisplayName = dbFeature.sharedFeatureName || dbFeature.partName || \"\";\r\n// if (dbFeature.partId === \"center_island_countertop\") {\r\n// dbFeature.customDisplayName = dbFeature.customDisplayName\r\n// .replace(/2 0 /g, \"\")\r\n// .replace(/Center Island Countertop 1 /g, \"\");\r\n// }\r\n// }\r\n// return dbFeature.customDisplayName\r\n// };\r\n//\r\n// export const getFilteredRelatedDbFeatures = (relatedDbFeaturesToCheck) => {\r\n// // console.log(\"relatedFeaturesToCheck\", relatedFeaturesToCheck);\r\n// let relatedDbFeatures = [];\r\n// relatedDbFeaturesToCheck.forEach((relFeature) => {\r\n// const featureAlreadyExistIndex = relatedDbFeatures.findIndex(currentFeature => {\r\n// return getSplittedDbFeatureName(currentFeature) === getSplittedDbFeatureName(relFeature)\r\n// })\r\n// if (featureAlreadyExistIndex > -1) {\r\n// if (relFeature.getParent().navigationSubItems().some(navItem => {\r\n// return navItem.part.dbFeature.id === relFeature.dbFeature.id\r\n// })) {\r\n// relatedDbFeatures.splice(featureAlreadyExistIndex, 1, relFeature)\r\n// }\r\n// } else {\r\n// relatedDbFeatures.push(relFeature);\r\n// }\r\n// });\r\n// // console.log(\"relatedFeatures\", relatedFeatures);\r\n// return relatedDbFeatures\r\n// };\r\n","import invert from \"lodash/invert\";\r\nimport {CountsType} from \"../../bvComponent/core/constants\";\r\nimport {LayoutAbbreviation} from \"../../kvComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport Config from \"../../../config\";\r\n\r\nexport const getActivePartsCounts = (activePart, layoutName) => {\r\n let counts = 0;\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n if (activePart.counts) {\r\n counts = activePart.counts.allLayoutFeaturesCount + activePart.counts[invert(CountsType)[layoutName]];\r\n }\r\n break;\r\n }\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n const excluded = [\r\n \"range\", \"center_island_range\", \"stovetop\", \"center_island_stovetop\", \"faucet\", \"sink\", \"bottom_cabinet\",\r\n \"countertop\", \"center_island_faucet\", \"center_island_sink\", \"center_island_countertop\", \"top_cabinet\",\r\n \"center_island_edge\", \"edge_profile\"\r\n ];\r\n if (!excluded.includes(activePart.partId) && activePart.counts) {\r\n const layoutAbbr = LayoutAbbreviation[layoutName].toLowerCase();\r\n counts = activePart.counts[layoutAbbr];\r\n }\r\n break;\r\n }\r\n }\r\n return counts\r\n};\r\n\r\nexport const getAvailableLayouts = () => {\r\n const layout = getCurrentLayout();\r\n const parents = layout.getFeatures();\r\n\r\n if (document.kvConfig.visualizerType === \"bvScene\") { // removed Layout4 from bvScene as it is really buggy on some profiles (\"userId\": 224022)\r\n return [\"Layout1\"]\r\n }\r\n\r\n return Object.keys(layout.layoutNames)\r\n .filter(key => key !== \"All\" && parents.some(parent => {\r\n const exisitngRelItemWithFeatures = parent.relatedItems && parent.relatedItems.find(relItem => {\r\n return relItem.featuresList[key] && relItem.featuresList[key].length && relItem.featuresList[key].some(feature => {\r\n return feature.dbFeature.s3Bindings\r\n })\r\n })\r\n // console.log(\"exisitngRelItemWithFeatures\", exisitngRelItemWithFeatures);\r\n return exisitngRelItemWithFeatures\r\n }))\r\n}\r\n\r\nexport const getShowOtherLayouts = (fabricatorSettings) => {\r\n if (document.kvConfig.toolVersion >= 5 && !Config.isVisualizerManagement()) {\r\n return false\r\n }\r\n let showOtherLayouts =\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")\r\n ? fabricatorSettings && (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend))\r\n : true;\r\n if (showOtherLayouts) {\r\n showOtherLayouts = getAvailableLayouts().length > 1\r\n }\r\n return showOtherLayouts\r\n};\r\n\r\nexport const getAvailableRoomScenes = () => {\r\n let availableRoomScenes = [];\r\n const layout = getCurrentLayout();\r\n const allFeatures = layout.getAllFeatures();\r\n for (let i = 0; i < allFeatures.length; i++) {\r\n const feature = allFeatures[i];\r\n if (feature.dbFeature.metaData && Array.isArray(feature.dbFeature.metaData[\"RoomScene\"])) {\r\n feature.dbFeature.metaData[\"RoomScene\"].forEach(scene => {\r\n if (!availableRoomScenes.includes(scene)) {\r\n availableRoomScenes.push(scene)\r\n }\r\n })\r\n }\r\n }\r\n return availableRoomScenes.sort()\r\n}\r\n\r\nexport const scrolledVerticalToTheEnd = ({clientHeight, scrollHeight, scrollTop}) => {\r\n const ceilScrollHeight = Math.ceil(scrollHeight);\r\n const floorScrollHeight = Math.floor(scrollHeight);\r\n const ceilScrollTop = Math.ceil(scrollTop);\r\n const floorScrollTop = Math.floor(scrollTop);\r\n const ceilClientHeight = Math.ceil(clientHeight);\r\n const floorClientHeight = Math.floor(clientHeight);\r\n\r\n return (ceilScrollHeight - ceilScrollTop === ceilClientHeight)\r\n || (ceilScrollHeight - floorScrollTop === ceilClientHeight)\r\n || (ceilScrollHeight - ceilScrollTop === floorClientHeight)\r\n || (ceilScrollHeight - floorScrollTop === floorClientHeight)\r\n || (floorScrollHeight - ceilScrollTop === ceilClientHeight)\r\n || (floorScrollHeight - floorScrollTop === ceilClientHeight)\r\n || (floorScrollHeight - floorScrollTop === floorClientHeight)\r\n || (floorScrollHeight - floorScrollTop === floorClientHeight)\r\n}\r\n\r\n/**\r\n * when the new customer is created - the system creates a job for him with only one userState property\r\n * @param parentGroup {object}\r\n // * @param fabricatorData {object}\r\n * @returns {array}\r\n */\r\nexport const getSideBarSubParts = (parentGroup) => {\r\n if (!parentGroup || !parentGroup.subParts || !parentGroup.layout) {\r\n return []\r\n }\r\n let subParts = parentGroup.subParts(true, true) || [];\r\n const layout = parentGroup.layout;\r\n if (!Config.showAllVisualizerGroups()) {\r\n subParts = subParts.filter(subPart => {\r\n return layout.hasNavItemsLength(subPart)\r\n // && !(fabricatorData && fabricatorData.isEncore && Array.isArray(layout.disabledClickablePartIds)\r\n // && layout.disabledClickablePartIds.includes(subPart.part.partId)) // hide if it's not clickable (for encore)\r\n })\r\n }\r\n return subParts\r\n}\r\n","import store from \"../../../store\";\r\nimport {\r\n END_CAP_AREA_PART_IDS,\r\n END_CAP_CABINETS_PART_IDS,\r\n END_CAP_PART_IDS, SHAPE_PART_ID, SIDEBAR_NAVIGATION_BUTTONS,\r\n SQFT_AREA_TYPE_PART_IDS,\r\n SQFT_GROUP\r\n} from \"../constants\";\r\nimport {getUrlSQFTHashParam} from \"./sqftHelper\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport { SIDEBAR_NAVIGATION_CABINET_BUTTONS, SQFT_APPLIANCES } from \"../constants\";\r\nimport endCapCanvas from \"../components/canvas/core/controls/endCapCanvas\";\r\nimport {setSelectedFeature} from \"../../../actions/sqftResourceFunctions\";\r\nimport {setSelectedCountertop} from \"../../../actions/sqftMenuFunctions\";\r\n\r\nexport const getSQFTGroupFromUrl = () => {\r\n return getUrlSQFTHashParam(\"group\")\r\n}\r\n\r\n/**\r\n * Is SQFT in Area Group TYPE\r\n */\r\nexport const getIsSFTAreaGroup = () => {\r\n const isSFTAreaGroupInUrl = getSQFTGroupFromUrl();\r\n const {sqftState} = store.getState();\r\n const {sqftFromFeature} = sqftState;\r\n\r\n return isSFTAreaGroupInUrl || sqftFromFeature && (Object.keys(SQFT_AREA_TYPE_PART_IDS).includes(sqftFromFeature.cartFeature.partId));\r\n}\r\n\r\n/**\r\n * Is SQFT in Cabinets Group TYPE\r\n */\r\nexport const isSFTCabinetsGroup = () => {\r\n const isCabinetGroupInURL = sqftConfig.isCabinetGroupInURL();\r\n const {sqftState} = store.getState();\r\n const {SQFTGroup} = sqftState;\r\n\r\n return isCabinetGroupInURL || SQFTGroup === SQFT_GROUP.cabinets;\r\n}\r\n\r\n/**\r\n * Is SQFT Group Type\r\n */\r\nexport const getSQFTGroup = () => {\r\n const isSFTAreaGroupInUrl = getSQFTGroupFromUrl();\r\n const {sqftState} = store.getState();\r\n const {SQFTGroup} = sqftState;\r\n\r\n if (isSFTAreaGroupInUrl) {\r\n return isSFTAreaGroupInUrl\r\n }\r\n\r\n if (SQFTGroup) {\r\n return SQFTGroup;\r\n }\r\n\r\n return SQFT_GROUP.default\r\n}\r\n\r\nexport const getPartIdsFromMenuOpened = (menuOpened) => {\r\n let partIds = menuOpened ? [menuOpened] : [];\r\n if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.centerIsland) {\r\n partIds = ['countertop'];\r\n } else if (menuOpened === SQFT_APPLIANCES.refrigerator) {\r\n partIds = ['fridge'];\r\n } else if (menuOpened === SQFT_APPLIANCES.stovetop) {\r\n partIds = ['stove'];\r\n } else if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel) {\r\n partIds = END_CAP_CABINETS_PART_IDS;\r\n } else if (menuOpened === SIDEBAR_NAVIGATION_BUTTONS.end_cap) {\r\n partIds = END_CAP_AREA_PART_IDS;\r\n }\r\n return partIds;\r\n};\r\n\r\nexport const getSearchTextFromMenuOpened = (menuOpened) => {\r\n let searchText = \"\";\r\n if (menuOpened === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel) {\r\n searchText = \"\";//'End Panel';\r\n }\r\n return searchText;\r\n};\r\n\r\nexport const getItemClickCallbackForPartId = (partId) => {\r\n let itemClickCallback = new Function();\r\n if (END_CAP_PART_IDS.includes(partId)) {\r\n itemClickCallback = (e, feature) => {\r\n endCapCanvas.setHighlighting(false);\r\n endCapCanvas.setCursorImage();\r\n store.dispatch(setSelectedFeature(feature));\r\n };\r\n } else if (partId === SHAPE_PART_ID.countertop) {\r\n itemClickCallback = (e, feature) => {\r\n store.dispatch(setSelectedCountertop(feature.dbFeature.id));\r\n }\r\n }\r\n\r\n return itemClickCallback;\r\n};\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {applianceThumbnail} from \"../assets\";\r\n\r\nimport Dishwasher from \"../subparts/appliances/dishwasher\";\r\nimport Fridge from \"../subparts/appliances/fridge\";\r\nimport Hood from \"../subparts/appliances/hood\";\r\nimport Microwave from \"../subparts/appliances/microwave\";\r\nimport Range from \"../subparts/appliances/range\";\r\nimport Oven from \"../subparts/appliances/oven\";\r\nimport Stove from \"../subparts/appliances/stove\";\r\nimport FridgeEnclosure from \"../subparts/appliances/fridgeEnclosure\";\r\nimport FridgeEnclosureHandle from \"../subparts/appliances/fridgeEnclosureHandle\";\r\nimport Stovetop from \"../subparts/appliances/stovetop\";\r\n\r\nexport default class Appliance extends Part {\r\n static id = 'Appliances';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Appliances';\r\n this.partThumbnail = applianceThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.appliance\";\r\n\r\n // related items\r\n this.dishwasher = null;\r\n this.fridge = null;\r\n this.hood = null;\r\n this.microwave = null;\r\n this.range = null;\r\n this.stove = null;\r\n this.stovetop = null;\r\n this.fridgeEnclosure = null;\r\n this.fridgeEnclosureHandle = null;\r\n this.oven = null;\r\n this.relatedGroupNames = [\"Dishwasher\", \"Fridge\", \"Fridge Enclosure\", \"Hood\", \"Microwave\", \"Range\", \"Stove\",\r\n \"Stovetop\", \"Oven\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Dishwasher\":\r\n relatedItemName = \"dishwasher\";\r\n RelatedItemClass = Dishwasher;\r\n break;\r\n case \"Fridge\":\r\n relatedItemName = \"fridge\";\r\n RelatedItemClass = Fridge;\r\n break;\r\n case \"Fridge Enclosure Handle\":\r\n relatedItemName = \"fridgeEnclosureHandle\";\r\n RelatedItemClass = FridgeEnclosureHandle;\r\n break;\r\n case \"Fridge Enclosure\":\r\n relatedItemName = \"fridgeEnclosure\";\r\n RelatedItemClass = FridgeEnclosure;\r\n break;\r\n case \"Hood\":\r\n relatedItemName = \"hood\";\r\n RelatedItemClass = Hood;\r\n break;\r\n case \"Microwave\":\r\n relatedItemName = \"microwave\";\r\n RelatedItemClass = Microwave;\r\n break;\r\n case \"Range\":\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n break;\r\n case \"Stove\":\r\n relatedItemName = \"stove\";\r\n RelatedItemClass = Stove;\r\n break;\r\n case \"StoveTop\":\r\n case \"Stovetop\":\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n break;\r\n case \"Oven\":\r\n relatedItemName = \"oven\";\r\n RelatedItemClass = Oven;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerComboTubType, SIDE_POSITIONS} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class AccessoryCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n if (this.partId === \"grab_bar\") {\r\n const showerCondition = showerParent.showerTubComboIsActive() && layout.parts[ShowerTubCombo.id]\r\n && (layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? \"Tub\"\r\n : \"Shower\";\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerCondition\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n checkRelatedFeatureGroupPositions(position) {\r\n const accessoriesParent = this.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id]; // no need for another check\r\n const showerSize = showerParent.showerSize();\r\n let otherFeatureGroup = null;\r\n switch (this.partId) {\r\n case \"grab_bar\":\r\n otherFeatureGroup = accessoriesParent.soapDish;\r\n break;\r\n case \"soap_dish\":\r\n otherFeatureGroup = accessoriesParent.grabBar;\r\n break;\r\n case \"shower_seats\":\r\n otherFeatureGroup = accessoriesParent.largeCornerSeat;\r\n break;\r\n case \"large_corner_seat\":\r\n otherFeatureGroup = accessoriesParent.seats;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (showerSize === \"30\") {\r\n if (otherFeatureGroup && otherFeatureGroup.layerPositions && !this.disabled && Object.keys(this.layerPositions).some(key => this.layerPositions[key])) {\r\n Object.keys(otherFeatureGroup.layerPositions).forEach(key => {\r\n otherFeatureGroup.layerPositions[key] = null\r\n });\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (key !== position) {\r\n this.layerPositions[key] = null; // it can be only on one side on small shower size\r\n }\r\n })\r\n }\r\n } else {\r\n if (this.layerPositions[position] && otherFeatureGroup && otherFeatureGroup.layerPositions[position] && !otherFeatureGroup.disabled) {\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!this.layerPositions[newPosition]) {\r\n const matchingPositionFeature = otherFeatureGroup.getMatchingPositionFeature(newPosition, otherFeatureGroup.layerPositions[position]);\r\n if (matchingPositionFeature) {\r\n otherFeatureGroup.layerPositions[newPosition] = matchingPositionFeature;\r\n }\r\n }\r\n otherFeatureGroup.layerPositions[position] = null; //2) remove old soap dish position\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {getCurrentLayout} from \"../../../appLayout\";\r\nimport {getGroupDescription} from \"../../../selectionWindow/selectionDescriptionCoverTranslates\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../../shoppingCart/cartItemInterface\";\r\nimport {cartItemInStock} from \"../../lookNavigation/lookFunctions2\";\r\nimport {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\nimport {getCartItemUnit, getFeatureUnit} from \"../../../../misc/helpers\";\r\nimport store from \"../../../../store\";\r\n// import {getBvFeatures} from \"../../../../api/server-api\";\r\n\r\n/**\r\n * Returns qtCatProperties\r\n * @param lookActiveFeature {object}\r\n * @returns {object} objects\r\n */\r\nexport const getAvailableWizardList = (lookActiveFeature) => {\r\n if (!lookActiveFeature) {\r\n return {}\r\n }\r\n const parent = lookActiveFeature.getParent();\r\n\r\n return parent.qtCatProperties ? parent.qtCatProperties : {};\r\n}\r\n\r\n/**\r\n * Returns subParts\r\n * @param qtCategoryName {string}\r\n * @returns {array} array of objects\r\n */\r\nexport const getWizardSubParts = (qtCategoryName) => {\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) { // set default if index is not matching\r\n //console.log(\"qtCategories\", layout.qtCategories);//virtualized list //navigation subitems\r\n\r\n let qtCategory = layout.qtCategories.find(qtCat => qtCat.name === qtCategoryName);\r\n if (qtCategory && qtCategory.subParts) {\r\n return qtCategory.subParts\r\n }\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * Returns active features list for\r\n * @param subPart {object}\r\n * @param intl {object}\r\n * @param fabricatorData array\r\n * @returns {array} array of objects\r\n */\r\nexport const getFeatureGroupDescription = (subPart, intl, fabricatorData) => {\r\n const name = (subPart.customGroupDisplayName || subPart.partName || \"\").toLowerCase();\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.description_FR.\" + name]) {\r\n return intl.formatMessage({id: \"transDoc.description_FR.\" + name})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateDescription_PL.\" + name]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateDescription_PL.\" + name})\r\n }\r\n }\r\n return subPart.customDescription || subPart.description\r\n || intl.formatMessage({ id: getGroupDescription(subPart.partName) });\r\n};\r\n\r\n// const getMissingFeatures = (missingFeatures) => {\r\n// getBvFeatures(missingFeatures)\r\n// .then(response => {\r\n// const layout = getCurrentLayout();\r\n// layout.loadNewFeatures(response.data);\r\n// return true\r\n// })\r\n// .catch(() => false)\r\n// }\r\n\r\n/**\r\n * returns bundled features\r\n * @param feature {featureInterface}\r\n * @returns {array}\r\n */\r\nexport const getLixilRequiredNotIncludedFeatures = (feature) => {\r\n if (Array.isArray(feature.dbFeature.lixilRequiredNotIncluded) && feature.dbFeature.lixilRequiredNotIncluded.length) {\r\n // todo remove\r\n //feature.dbFeature.lixilRequiredNotIncluded.push(90068248, 90068237, 90068210, 90074461, 90068828, 90074449,\r\n // 90068281, 90068389, 90069955, 90069948, 90069950, 90071177, 90070070, 90069587 );\r\n // await getMissingFeatures(feature.dbFeature.lixilRequiredNotIncluded);\r\n\r\n const layout = getCurrentLayout();\r\n let allFeatures = layout.getAllFeatures(true);\r\n let lixilRequiredNotIncluded = allFeatures.filter((checkFeature) => {\r\n return feature.dbFeature.lixilRequiredNotIncluded.includes(checkFeature.dbFeature.id)\r\n });\r\n console.log(\"lixilRequiredNotIncluded\", lixilRequiredNotIncluded);\r\n\r\n return lixilRequiredNotIncluded\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * returns formatted string\r\n * @param str {string}\r\n * @returns {string}\r\n */\r\nexport const formatStrToUrl = (str) => {\r\n if (!str) {\r\n return \"\"\r\n }\r\n\r\n return str.replace(/\\s+/g, '-').toLowerCase();\r\n}\r\n\r\n\r\n/**\r\n * removes check collection for specific fabricator\r\n * @param feature {featureInterface}\r\n * @returns {boolean}\r\n */\r\nexport const allowCheckForCollection = (feature) => {\r\n if (!feature) {\r\n return true\r\n }\r\n // For shower fixture we have same customDisplayName, but different collection name (\"Euphoria\" and \"Shower Configuration\").\r\n // But they still should match\r\n // return feature.partId !== \"shower_fixture\"\r\n return true\r\n}\r\n\r\nconst unitsToCountQuantity = [\"unit\", \"units\", \"qty\", \"each\", \"Each\", \"no quantity\"];\r\n\r\n/**\r\n * returns current cart items length (with all quantites or only cart Items)\r\n * @param cartItems {[cartItemInterface]}\r\n * @param intl {object}\r\n * @param forceCheckAllQuantitties {boolean}\r\n * @returns {number}\r\n */\r\nexport const getCartItemsCount = (cartItems, intl = null, forceCheckAllQuantitties = IS_LIXIL_SERVERS) => {\r\n\r\n const fabricatorData = store.getState().fabricatorState;\r\n\r\n return cartItems.reduce((total, cartItem) => {\r\n const shouldBeCounted = !cartItem.relatedProductParent && !cartItem.isRemoved && cartItemInStock(cartItem);\r\n if (!shouldBeCounted || (IS_PRODUCT_JOURNEY && cartItem.addedBy !== CART_ITEM_ADDED_BY.user)) {\r\n return total\r\n }\r\n // || (featureIsBundle(cartItem.cartFeature, cartItems) && getBundledFeatures(cartItem.cartFeature).some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0))\r\n if (forceCheckAllQuantitties) {\r\n return total + cartItem.quantity\r\n } else if (intl) {\r\n const featureUnit = getFeatureUnit(cartItem.cartFeature, intl, fabricatorData, cartItem.quantity);\r\n const cartItemUnit = getCartItemUnit(cartItem, intl);\r\n const unit = cartItemUnit || featureUnit || \"\";\r\n if (unit && unitsToCountQuantity.includes(unit.toLowerCase())) {\r\n return total + cartItem.quantity\r\n }\r\n }\r\n // Items in visualizer should equal total quantity of items minus out of stock (Shower bundle will count as 1 not 7)\r\n return total + 1 // simple return cart items count\r\n }, 0)\r\n}\r\n\r\n","import {\r\n getPriceWithCurrency,\r\n getQuotePriceWithDiscounts,\r\n getTotalPrice, sortByOrder,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_SECTION_TYPES, DISCOUNT_TYPES} from \"./discounstInterface\";\r\nimport {PMT} from \"../../misc/excelFunctions\";\r\nimport {getPercentage} from \"../../misc/misc2\";\r\n\r\nexport const getSubTotalPrice = (discountSections, discountSection, discount, withoutCurrent = false, customAddedDiscounts = []) => {\r\n const totalPrice = getTotalPrice(null, false);\r\n\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n let ignoreDiscounts = allDiscounts.filter(currentDiscount => {\r\n if (!shouldCalculateDiscount(currentDiscount)) {\r\n return false\r\n }\r\n return withoutCurrent\r\n ? currentDiscount.order >= discount.order\r\n : currentDiscount.order > discount.order\r\n });\r\n discountSections.forEach(disSection => {\r\n if (disSection.order > discountSection.order) {\r\n ignoreDiscounts = [...ignoreDiscounts, ...disSection.discounts] // ignore other sections\r\n }\r\n });\r\n customAddedDiscounts.forEach(customDiscount => {\r\n const section = discountSections.find(sec => sec.id === customDiscount.categoryId);\r\n if (!section) {\r\n return\r\n }\r\n if (section.order > discountSection.order) {\r\n ignoreDiscounts = [...ignoreDiscounts, customDiscount] // ignore other custom discounts\r\n }\r\n });\r\n\r\n const grandTotal = getQuotePriceWithDiscounts(totalPrice, ignoreDiscounts);\r\n return toFixedPrice(grandTotal);\r\n};\r\n\r\nexport const getDiscountsForSection = (discountSection, customAddedDiscounts) => {\r\n const customDiscounts = customAddedDiscounts.filter(dis => {\r\n return dis.selected && (dis.categoryId === discountSection.id)\r\n })\r\n return [...discountSection.discounts, ...customDiscounts];\r\n}\r\n\r\nexport const calculateCellValue = ({discountSections, financePercentage, fabricatorSettings}, numberOfMonths = 0, finalPrice = 0) => {\r\n if (!numberOfMonths || !finalPrice) {\r\n return \"N/A\"\r\n }\r\n const fixedDeposit = getCustomDepositAmount(discountSections, finalPrice) || 0;\r\n const rate = financePercentage / 100 / 12; // Converts the annual interest rate into a monthly rate by dividing it by 12\r\n const nper = numberOfMonths; // The number of months in the repayment term\r\n const pv = -(finalPrice - fixedDeposit); // The present value (loan amount to be repaid). This is the negative of:\r\n // finalPrice - Today's final price of the good.\r\n // fixedDeposit - A $1000 deposit applied to the total loan amount.\r\n\r\n // const cellValue = pv * rate / (1 - Math.pow((1 + rate), -nper)); // this works fine, but the func below returns the same\r\n const cellValue = PMT(rate, nper, pv);\r\n\r\n return getPriceWithCurrency(fabricatorSettings, cellValue, null, false, true)\r\n}\r\n\r\nexport const getNextCustomDiscountOrder = (fromDiscount) => {\r\n return +(fromDiscount.order + 0.01).toFixed(2)\r\n}\r\n\r\nexport const getFilteredSections = (discountSections) => {\r\n return discountSections.filter(section => {\r\n return section.type !== DISCOUNT_SECTION_TYPES.finance\r\n })\r\n}\r\n\r\nexport const isSaveOnlyDiscount = (discount) => {\r\n return discount.discountType === DISCOUNT_MAIN_TYPES.finance || discount.discountType === DISCOUNT_MAIN_TYPES.deposit\r\n}\r\n\r\nexport const shouldDisplayDiscount = (discount) => {\r\n return discount.selected && !isSaveOnlyDiscount(discount)\r\n}\r\n\r\nexport const shouldCalculateDiscount = (discount) => {\r\n if (discount.isRidged) {\r\n const approveOptions = discount.approveOptions ? JSON.parse(discount.approveOptions) : null;\r\n if (approveOptions && approveOptions.options && approveOptions.options.length && !approveOptions.selectedOption) {\r\n return false\r\n }\r\n }\r\n return shouldDisplayDiscount(discount) && !discount.isSubTotal\r\n}\r\n\r\nexport const getDepositDiscount = (discountSections) => {\r\n let depositDiscount = null;\r\n discountSections.forEach(discountSection => {\r\n discountSection.discounts.forEach(discount => {\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n depositDiscount = discount;\r\n }\r\n })\r\n });\r\n return depositDiscount\r\n}\r\n\r\n/**\r\n *\r\n * @param discountSections {array}\r\n * @param grandTotal {number}\r\n * @returns {string|number}\r\n */\r\nexport const getCustomDepositAmount = (discountSections, grandTotal = 0) => {\r\n const depositDiscount = getDepositDiscount(discountSections);\r\n if (!depositDiscount) {\r\n return null\r\n }\r\n if (depositDiscount.type === DISCOUNT_TYPES.price) {\r\n return depositDiscount.amount\r\n }\r\n const priceTaken = getPercentage(grandTotal, depositDiscount.amount) // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n}\r\n\r\nexport const getDepositAmount = (discountSections, grandTotal, fabricatorData) => {\r\n const customDeposit = getCustomDepositAmount(discountSections, grandTotal);\r\n if (customDeposit !== null) {\r\n return customDeposit\r\n }\r\n return fabricatorData.settings.deposit\r\n ? Math.floor((grandTotal * (fabricatorData.settings.deposit / 100)) * 100) / 100\r\n : 0\r\n}\r\n\r\nexport const getPriceWorkSheetSaveValues = (priceWorksheetState) => {\r\n const selectedDiscounts = [];\r\n priceWorksheetState.discountSections.forEach(disSection => {\r\n if (disSection.type === DISCOUNT_SECTION_TYPES.finance) {\r\n return\r\n }\r\n disSection.discounts.forEach(discount => {\r\n if (discount.selected) {\r\n selectedDiscounts.push(Object.assign({}, discount, {\r\n categoryId: disSection.id,\r\n }));\r\n }\r\n })\r\n })\r\n return {\r\n selectedDiscounts,\r\n financePercentage: priceWorksheetState.financePercentage,\r\n customAddedDiscounts: priceWorksheetState.customAddedDiscounts, // save as is for now\r\n }\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {addToCart, clearCart, removeFromCart, restoreCart, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\nimport {\r\n createCartList,\r\n getMatchingColorFeature,\r\n navFeatureCLick\r\n} from \"../lookNavigation/lookFunctions\";\r\nimport {setLookRemovedCartItems} from \"../../../actions/shoppingCartFunctions\";\r\nimport {\r\n featureIsBundle,\r\n getCartItemsArrayFromFeature, getFeatureUrl,\r\n} from \"../lookNavigation/lookFunctions2\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../shoppingCart/cartItemInterface\";\r\n\r\nconst WithUpdateLookCartItem = (props) => {\r\n\r\n const {cartItems, removeFromCart, addToCart, qtActiveCategory, lookActiveFeature, history, children, updateCanvasCount,\r\n lookRemovedCartItems, setLookRemovedCartItems, filterGroups, groheActiveFeatureQuantity,\r\n clearCart, restoreCart, fabricatorSettings} = props;\r\n\r\n /**\r\n * Creates cart items list depending on quotingTool features\r\n * @param neededFeature {featureInterface} current active updated feature\r\n * @param withAddToCart {boolean} should we add it to the cart (for product journey) or just update\r\n */\r\n const updateLookCartItem = (neededFeature = lookActiveFeature, withAddToCart = false) => {\r\n // if (!checkIfFeatureCanBeAddedToTheCart(neededFeature)) {\r\n // return false\r\n // }\r\n\r\n return updateLookCartItemsNew(neededFeature, withAddToCart); // temp test, if everything is ok - remove redundant code below\r\n\r\n let itemsToAdd = [];\r\n // const urlPartId = neededFeature.partId.replace(/_/gi, \"-\");\r\n const layout = getCurrentLayout();\r\n const addedCartItems = cartItems.filter(cItem => {\r\n // if (featureGroup.layerPositions) {\r\n // return (cItem.partId === neededFeature.partId)\r\n // && (cItem.cartFeature.metaData.layerPosition === neededFeature.metaData.layerPosition)\r\n // }\r\n const parent = layout.getFeatureGroupByPartId(cItem.partId);\r\n if (!IS_PRODUCT_JOURNEY && parent && parent.disabled) { // remove these cartItems too\r\n return true\r\n }\r\n return cItem.partId === neededFeature.partId\r\n });\r\n if (addedCartItems.length && !IS_PRODUCT_JOURNEY) {\r\n addedCartItems.forEach(addedCartItem => {\r\n removeFromCart(addedCartItem);\r\n if (featureIsBundle(addedCartItem.cartFeature, cartItems)) {\r\n cartItems.forEach(cItem => {\r\n if (cItem.relatedProductParent && cItem.relatedProductParent.dbFeature.id === addedCartItem.cartFeature.dbFeature.id) {\r\n removeFromCart(cItem)\r\n }\r\n })\r\n }\r\n })\r\n }\r\n // let newQuantity = IS_PRODUCT_JOURNEY\r\n // ? groheActiveFeatureQuantity\r\n // : addedCartItems.length ? addedCartItems[0].quantity : 1;\r\n let newQuantity = groheActiveFeatureQuantity;\r\n if (neededFeature.metaData.layerPosition && !IS_PRODUCT_JOURNEY) {\r\n const featureGroup = neededFeature.getParent();\r\n Object.keys(featureGroup.layerPositions).forEach(position => {\r\n if (featureGroup.layerPositions[position]) {\r\n if (position !== neededFeature.metaData.layerPosition) {\r\n if (neededFeature.dbFeature.sharedFeatureName === featureGroup.layerPositions[position].dbFeature.sharedFeatureName) {\r\n if (newQuantity === 1) {\r\n newQuantity += 1\r\n }\r\n } else {\r\n // here we update cart with same partId, but different position (for now it should not be executed since we have all positions same)\r\n itemsToAdd.push(getCartItemObject(featureGroup.layerPositions[position], 1, qtActiveCategory));\r\n if (newQuantity > 1) {\r\n newQuantity--;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n if (neededFeature.partId === \"vanity_faucet\") {\r\n const sinkParent = featureGroup.getParent().sink;\r\n const addedSinkItem = cartItems.find(cItem => {\r\n return cItem.partId === sinkParent.partId\r\n });\r\n if (addedSinkItem && addedSinkItem.cartFeature.dbFeature.sharedFeatureName && sinkParent.activeFeature && sinkParent.activeFeature.dbFeature.sharedFeatureName\r\n && (addedSinkItem.cartFeature.dbFeature.sharedFeatureName !== sinkParent.activeFeature.dbFeature.sharedFeatureName)) {\r\n // here we update cart with automatically changed feature (via the metadata)\r\n itemsToAdd.push(getCartItemObject(sinkParent.activeFeature, addedSinkItem.quantity, qtActiveCategory));\r\n removeFromCart(addedSinkItem);\r\n }\r\n }\r\n }\r\n itemsToAdd = [...itemsToAdd, ...getCartItemsArrayFromFeature(neededFeature, newQuantity, qtActiveCategory)]; // here we update cart with clicked feature\r\n\r\n if (!IS_PRODUCT_JOURNEY) {\r\n const featureGroups = getLookList(true);\r\n if (featureGroups && featureGroups.length) {\r\n let shouldBeAdded = [];\r\n featureGroups.forEach(parentObject => {\r\n if (parentObject.featureGroup.layerPositions) {\r\n Object.keys(parentObject.featureGroup.layerPositions).forEach(position => {\r\n if (parentObject.featureGroup.layerPositions[position]) {\r\n if (position !== neededFeature.metaData.layerPosition) {\r\n if (neededFeature.dbFeature.sharedFeatureName === parentObject.featureGroup.layerPositions[position].dbFeature.sharedFeatureName) {\r\n if (newQuantity === 1) {\r\n newQuantity += 1\r\n }\r\n } else {\r\n // here we update cart with same partId, but different position (for now it should not be executed since we have all positions same)\r\n itemsToAdd.push(getCartItemObject(parentObject.featureGroup.layerPositions[position], 1, qtActiveCategory));\r\n if (newQuantity > 1) {\r\n newQuantity--;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n })\r\n itemsToAdd = [...itemsToAdd, ...shouldBeAdded]; // here we update cart with enabled but not added features\r\n }\r\n }\r\n\r\n addToCart(itemsToAdd);\r\n\r\n updateRemovedCartItems(itemsToAdd);\r\n layout.updateLocalStorage();\r\n }\r\n\r\n const updateRemovedCartItems = (itemsToAdd) => {\r\n if (lookRemovedCartItems.length) {\r\n let newRemovedCartItems = [...lookRemovedCartItems];\r\n itemsToAdd.forEach(cartItem => {\r\n const existingIndex = newRemovedCartItems.findIndex(removedCartItem => {\r\n if (cartItem.cartFeature.metaData.layerPosition) {\r\n return (removedCartItem.partId === cartItem.partId)\r\n && (cartItem.cartFeature.metaData.layerPosition === removedCartItem.cartFeature.metaData.layerPosition)\r\n }\r\n return removedCartItem.partId === cartItem.partId || (\r\n removedCartItem.relatedProductParent && removedCartItem.relatedProductParent.partId === cartItem.partId\r\n )\r\n });\r\n if (existingIndex > -1) {\r\n newRemovedCartItems.splice(existingIndex, 1);\r\n }\r\n });\r\n if (newRemovedCartItems.length !== lookRemovedCartItems.length) {\r\n setLookRemovedCartItems(newRemovedCartItems);\r\n }\r\n }\r\n }\r\n\r\n const updateLookCartItemsNew = (neededFeature, withAddToCart) => {\r\n\r\n clearCart();\r\n let itemsToAdd = createCartList(qtActiveCategory, null);\r\n itemsToAdd.forEach(currentCartItem => {\r\n const oldExistingCartItem = cartItems.find(cItem => cItem.partId === currentCartItem.partId);\r\n if (oldExistingCartItem && !IS_PRODUCT_JOURNEY) {\r\n currentCartItem.addedBy = oldExistingCartItem.addedBy; // if it was changed by user - keep it\r\n if (oldExistingCartItem.quantity > currentCartItem.quantity) {\r\n if (currentCartItem.cartFeature.getParent) {\r\n const parent = currentCartItem.cartFeature.getParent();\r\n if (parent.layerPositions) {\r\n currentCartItem.quantity = Object.keys(parent.layerPositions).filter(positionKey => parent.layerPositions[positionKey]).length\r\n } else {\r\n currentCartItem.quantity = oldExistingCartItem.quantity;\r\n }\r\n } else {\r\n currentCartItem.quantity = oldExistingCartItem.quantity;\r\n }\r\n }\r\n }\r\n if (IS_PRODUCT_JOURNEY && neededFeature && !neededFeature.notAvailableInVisualizer) {\r\n if (currentCartItem.partId === neededFeature.partId\r\n || (currentCartItem.relatedProductParent\r\n && (currentCartItem.relatedProductParent.dbFeature.id === neededFeature.dbFeature.id))) {\r\n currentCartItem.quantity = groheActiveFeatureQuantity;\r\n if (withAddToCart) {\r\n currentCartItem.addedBy = CART_ITEM_ADDED_BY.user;\r\n }\r\n }\r\n }\r\n });\r\n if (neededFeature && neededFeature.notAvailableInVisualizer) {\r\n const newCartItem = getCartItemObject(neededFeature, groheActiveFeatureQuantity, qtActiveCategory);\r\n newCartItem.addedBy = withAddToCart ? CART_ITEM_ADDED_BY.user : CART_ITEM_ADDED_BY.auto;\r\n itemsToAdd.push(newCartItem);\r\n }\r\n if (IS_PRODUCT_JOURNEY && fabricatorSettings.checkout) {\r\n itemsToAdd = [...itemsToAdd, ...cartItems.filter(cItem => cItem.addedBy === CART_ITEM_ADDED_BY.user)]; // keep old added cartItems!\r\n }\r\n if (fabricatorSettings.checkout) {\r\n cartItems.forEach(cItem => {\r\n if (!cItem.keepOnLookUpdate) {\r\n return\r\n }\r\n if (!itemsToAdd.some(itemToAdd => itemToAdd.id === cItem.id)) {\r\n itemsToAdd.push(cItem) // keep old added cartItems! that was added from wizard list for example\r\n }\r\n })\r\n }\r\n restoreCart({cartItems: itemsToAdd});\r\n updateRemovedCartItems(itemsToAdd);\r\n const layout = getCurrentLayout();\r\n layout.updateLocalStorage();\r\n }\r\n\r\n /**\r\n * updates array of features\r\n * @param notMatchingFeatures {array}\r\n * @param fromFeature {featureInterface}\r\n * @param changeUrl {boolean}\r\n * @param directChange {boolean} // if only update\r\n */\r\n const updateAllLookCartItems = (notMatchingFeatures = [],\r\n fromFeature = lookActiveFeature,\r\n changeUrl = true,\r\n directChange = false) => {\r\n let needToBeUpdated = [fromFeature];\r\n if (notMatchingFeatures.length) {\r\n const currentFeatureName = fromFeature.getSplittedFeatureName();\r\n let toiletEnabled = false;\r\n notMatchingFeatures.forEach(notMatchingFeature => {\r\n if (notMatchingFeature.dbFeature.id !== fromFeature.dbFeature.id) {\r\n const sameFeatureAsActive = directChange ? {part: notMatchingFeature} : getMatchingColorFeature(fromFeature, notMatchingFeature, filterGroups)\r\n if (sameFeatureAsActive) {\r\n navFeatureCLick(sameFeatureAsActive.part, false);\r\n needToBeUpdated.push(sameFeatureAsActive.part);\r\n switch (sameFeatureAsActive.part.partId) {\r\n case \"toilet_brush\":\r\n case \"paper_holder\": {\r\n if (!toiletEnabled) {\r\n const layout = getCurrentLayout();\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(\"toilet\");\r\n if (relatedFeatureGroup && relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature && !toiletEnabled) {\r\n navFeatureCLick(relatedFeatureGroup.activeFeature, false);\r\n needToBeUpdated.push(relatedFeatureGroup.activeFeature);\r\n }\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n console.log(\"sameFeatureAsActive not found\", notMatchingFeature.partId, currentFeatureName);\r\n }\r\n }\r\n })\r\n }\r\n needToBeUpdated.forEach(featureToClick => {\r\n navFeatureCLick(featureToClick, false);\r\n });\r\n // console.log(\"needToBeUpdated\", needToBeUpdated);\r\n updateLookCartItem(fromFeature)\r\n updateCanvasCount();\r\n // if (IS_PRODUCT_JOURNEY) {\r\n // setLookActiveCategory(\"\");\r\n // }\r\n // if (changeUrl && IS_PRODUCT_JOURNEY) {\r\n if (changeUrl) {\r\n history.push(getFeatureUrl(fromFeature, true));\r\n }\r\n }\r\n\r\n return children(updateLookCartItem, updateAllLookCartItems)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {cartItems, lookRemovedCartItems} = store.cartState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {filterGroups} = store.filterState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {settings} = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n cartItems,\r\n qtActiveCategory,\r\n lookRemovedCartItems,\r\n filterGroups,\r\n groheActiveFeatureQuantity,\r\n fabricatorSettings: settings,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n addToCart,\r\n updateCanvasCount,\r\n setLookRemovedCartItems,\r\n clearCart,\r\n restoreCart\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithUpdateLookCartItem)\r\n)\r\n","import $ from 'jquery';\r\nimport Config, {\r\n getCommonVisualizerType,\r\n IS_LIXIL_SERVERS, IS_OFFLINE_MODE,\r\n USE_SERVER_CACHING\r\n} from \"../config\";\r\nimport {toBoolean} from \"../misc/utils\";\r\nimport {getCurrentLayout} from '../bvcomponents/appLayout';\r\nimport store from \"../store\";\r\nimport AxiosInstance from \"./axiosInstance\";\r\nimport {renderErrorPopup} from \"./api-popups\";\r\nimport {HOST_NAME} from \"./api\";\r\nimport {fixFeaturesResponse} from \"../misc/backendFunctions\";\r\n\r\n//Axios.defaults.headers.get['Content-Type'] = 'application/json';\r\n\r\nif (!String.prototype.endsWith) {\r\n Object.defineProperty(String.prototype, 'endsWith', {\r\n value: function(searchString, position) {\r\n var subjectString = this.toString();\r\n if (position === undefined || position > subjectString.length) {\r\n position = subjectString.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = subjectString.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n }\r\n });\r\n}\r\n\r\nconst serverConfig = document.kvConfig;\r\nconst __hideFeatures = toBoolean(serverConfig.hide) ? 1 : 0;\r\n\r\nfunction _get(url, axiosController) {\r\n return axiosController ? AxiosInstance.get(url, {\r\n signal: axiosController.signal\r\n }) : AxiosInstance.get(url)\r\n}\r\n\r\nfunction _post(url, data) {\r\n // console.log('_post', url, data);\r\n return AxiosInstance.post(url, data, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n 'x-antiforgery-token': $('input[name=__RequestVerificationToken]').val()\r\n }\r\n });\r\n}\r\n\r\nlet __urlBase = null;\r\n\r\nfunction _getUrlBase() {\r\n if (__urlBase) return __urlBase;\r\n let {subDomain} = document.kvConfig;\r\n // let {domain} = document.kvConfig;\r\n // domain = domain || 'quotesflooring.com';\r\n subDomain = subDomain ? subDomain + '.' : '';\r\n __urlBase = subDomain + HOST_NAME;\r\n return __urlBase;\r\n}\r\n\r\nfunction _urlBase() {\r\n return serverConfig.type === 'Fabricator' ? _getUrlBase() + '/Job/QuickQuote/' + serverConfig.userId : '.';\r\n}\r\n\r\nconst addUrlMode = (baseUrl, visualizerType = \"\") => {\r\n const visType = getCommonVisualizerType(visualizerType);\r\n if (IS_LIXIL_SERVERS && (document.kvConfig.visualizerType === \"bvLook\")) { // temporarily, until the backend is fixed\r\n return baseUrl\r\n }\r\n return baseUrl + (baseUrl.includes(\"?\") ? \"&\" : \"?\") + `mode=${visType}`\r\n}\r\n\r\nconst hardcodeResponsesFolder = () => {\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n return \"node/responses/lixil\"\r\n }\r\n return \"node/responses\"\r\n}\r\n\r\nexport default class JsonApi {\r\n static allAvailableStones(jobId, type) {\r\n jobId = jobId || 0;\r\n type = type || 'Fabricator';\r\n return _get(`${_getUrlBase()}/api/Public/${serverConfig.userId}/AvailableStones?jobId=${jobId}&type=${type}&loadStoneFilters=true`);\r\n // return _get(`${_getUrlBase()}/Job/QuickQuote/${serverConfig.userId}/AvailableStones?jobId=${jobId}&type=${type}`);\r\n }\r\n\r\n static getNewQuoteData(jobId, type) {\r\n jobId = jobId || 0;\r\n type = type || 'Fabricator';\r\n // let url = `${_getUrlBase()}/Job/QuickQuote/${serverConfig.userId}/GetNewQuoteData?jobId=${jobId}&type=${type}&hide=${__hideFeatures}`;\r\n let url = `${_getUrlBase()}/api/Public/${serverConfig.userId}/GetNewQuoteData?jobId=${jobId}&type=${type}&hide=${__hideFeatures}`;\r\n if (Config.isMobile()) {\r\n url += '&w=150';\r\n }\r\n return _get(url);\r\n }\r\n\r\n static getMenuNavigation (forTool) {\r\n if (document.kvConfig.noInternetMode) {\r\n return Promise.resolve({data: []})\r\n }\r\n const url = forTool\r\n ? `${_getUrlBase()}/api/PublicFabricatorVisualizerNavigation/List?FabricatorId=${serverConfig.userId}&forTool=${forTool}`\r\n : `${_getUrlBase()}/api/PublicFabricatorVisualizerNavigation/List?FabricatorId=${serverConfig.userId}`\r\n return _get(url);\r\n }\r\n\r\n static userLogin(data) {\r\n if(document.kvConfig.kioskMode) {\r\n var response = this.saveUserKiosk(data);\r\n return Promise.resolve(response);\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/LoginClient\", data);\r\n }\r\n // return _post(_urlBase() + \"/LoginClient\", {email: email, password: password});\r\n }\r\n\r\n static userRegister(data) {\r\n if(document.kvConfig.kioskMode) {\r\n var response = this.saveUserKiosk(data);\r\n return Promise.resolve(response);\r\n } else {\r\n return _post(`${_getUrlBase()}/api/Public/RegisterClient`, data);\r\n }\r\n // return _post(_urlBase() + \"/RegisterClient\", data);\r\n }\r\n\r\n static saveQuote(data) {\r\n if(document.kvConfig.kioskMode) {\r\n const state = store.getState();\r\n const {serverState, userState} = state;\r\n const userInfo = userState.userInfo;\r\n return this.saveQuoteKiosk(JSON.stringify({\r\n subDomain: document.kvConfig.subDomain,\r\n encodedUserId: userInfo.encodedUserId,\r\n quoteData: JSON.stringify(data),\r\n id: serverState.jobId\r\n }));\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/SaveQuote\", data);\r\n }\r\n // return _post(_urlBase() + \"/SaveMultiQuickQuote\", data);\r\n }\r\n\r\n static submitPayment(data) {\r\n return _post(_getUrlBase() + \"/api/Public/SubmitPayment\", data);\r\n }\r\n\r\n // email must be post-fixed by the /, see here\r\n // https://stackoverflow.com/questions/13298542/apicontroller-returns-404-when-id-contains-period\r\n // the accepted answer\r\n static resetUserPassword(email, language) {\r\n return _post(_getUrlBase() + '/api/Public/SendResetPassword', {\r\n email,\r\n language,\r\n fabricatorId: document.kvConfig.userId,\r\n });\r\n }\r\n\r\n static scheduleCustomer(data) {\r\n if(document.kvConfig.kioskMode) {\r\n return this.saveSchedule(JSON.stringify({\r\n subDomain: document.kvConfig.subDomain,\r\n json: JSON.stringify(data)\r\n }));\r\n } else {\r\n return _post(_getUrlBase() + \"/api/Public/Schedule\", data);\r\n }\r\n }\r\n\r\n static getJobData(jobId) {\r\n return _get(_urlBase() + \"/GetJobDataById?jobId=\" + jobId);\r\n }\r\n\r\n static getBVJobData(jobId, editToken) {\r\n return _get(_getUrlBase() + '/api/Public/getBvJobData/' + jobId + (editToken ? \"?editToken=\" + editToken : \"\"))\r\n }\r\n\r\n static getEmployees() {\r\n if(document.kvConfig.kioskMode) {\r\n return Promise.resolve(this.getKioskApiResponse(document.kvConfig.userId, `/api/Public/getEmployees/${+document.kvConfig.userId}`));\r\n } else {\r\n return _get(`${_getUrlBase()}/api/Public/getEmployees/${+document.kvConfig.userId}`);\r\n }\r\n }\r\n\r\n static generateAuthenticationToken() {\r\n const userState = store.getState().userState;\r\n const {userInfo} = userState;\r\n if (userInfo && userInfo.phoneNumber && userInfo.phoneNumber.indexOf(\"555-555-5555\") === -1) {\r\n return _get(_getUrlBase() + \"/api/TwoFactorAuthentication/GenerateAuthenticationRequest?encodedCustomerId=\" + encodeURIComponent(userState.encodedUserId));\r\n } else if(userInfo && userInfo.phoneNumber && userInfo.phoneNumber.indexOf('555-555-5555') !== -1) {\r\n return Promise.resolve(\"93eacff8-d2cf-488b-b10d-12c81dd806e2\");\r\n } else {\r\n return Promise.reject();\r\n }\r\n }\r\n\r\n static sendAuthenticationRequest(token, to, type) {\r\n if(token !== \"93eacff8-d2cf-488b-b10d-12c81dd806e2\")\r\n return _post(_getUrlBase() + \"/api/TwoFactorAuthentication/SendAuthenticationRequest\", {token, to, type});\r\n else\r\n return Promise.resolve(true);\r\n }\r\n\r\n static validateAuthenticationRequest(token, code, phoneNumber) {\r\n const userState = store.getState().userState;\r\n if(token === \"93eacff8-d2cf-488b-b10d-12c81dd806e2\") {\r\n return Promise.resolve({data: code === \"568127\"});\r\n } else {\r\n return _post(_getUrlBase() + \"/api/TwoFactorAuthentication/ValidateAuthenticationRequest\", {token, code, phoneNumber, encodedCustomerId: userState.encodedUserId});\r\n }\r\n }\r\n\r\n static postDisplayRoom(bvState) {\r\n return _post(`${_getUrlBase()}/api/public/saveDefaults/${+document.kvConfig.userId}/client/bathroomvisualizer`, [bvState]);\r\n }\r\n\r\n static getDisplayRoom() {\r\n return _get(`${_getUrlBase()}/api/public/getDefaults/${+document.kvConfig.userId}/client/bathroomvisualizer`);\r\n }\r\n\r\n static resendActivationEmail(email) {\r\n return _post(`${_getUrlBase()}/api/public/resendActivationEmail`,\r\n {email, fabricatorId: +document.kvConfig.userId});\r\n }\r\n\r\n static async getBathroomVisualizerData(featuresCount, forVisualizerType) {\r\n const visualizerType = forVisualizerType || document.kvConfig.visualizerType;\r\n if (document.kvConfig.noInternetMode) {\r\n const featuresResponse = await _get(hardcodeResponsesFolder() + \"/mainVisualizerResponseFeatures.json\");\r\n let allResponse = await _get(hardcodeResponsesFolder() + \"/mainVisualizerResponse.json\");\r\n allResponse.data.features = featuresResponse.data;\r\n return allResponse\r\n }\r\n let localUrl = addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}`, visualizerType);\r\n let remoteUrl = visualizerType === \"bvLook\"\r\n ? addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}${(featuresCount ? \"?featuresPerGroup=\"+featuresCount : \"\")}`, visualizerType)\r\n : addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}${(featuresCount ? \"/\"+featuresCount : \"\")}`, visualizerType)\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${remoteUrl}`);\r\n }\r\n\r\n static getBathroomVisualizerFeatures(arrayOfIds, arrayOfSkus, requestSharedFeatureNames = false, visualizerType) {\r\n if (document.kvConfig.noInternetMode || IS_OFFLINE_MODE) { // no need to receive features, we already received 50k, all of them\r\n return Promise.resolve({data: []})\r\n }\r\n const baseUrl = addUrlMode(`${_getUrlBase()}/api/public/bvdata/${+document.kvConfig.userId}/features`, visualizerType);\r\n return _post(baseUrl, arrayOfSkus\r\n ? requestSharedFeatureNames ? {sharedFeatureNames: arrayOfSkus} : {skus: arrayOfSkus}\r\n : {Ids: arrayOfIds});\r\n }\r\n\r\n static getBathroomVisualizerGroups(visualizerType) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/featureGroupsCounts.json\")\r\n }\r\n const localUrl = addUrlMode(`/api/public/bvdata/${+document.kvConfig.userId}/groups`, visualizerType);\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static fixGroupName(groupName) {\r\n return groupName.trim().replace(/\\//g,\"%23%23\").replace(/ /g,\"%20\").replace(/&/g,\"%26\");\r\n }\r\n\r\n static async getBathroomVisualizerGroupFeatures(groupName,\r\n page = 0,\r\n pageSize = 1000,\r\n filterValues = [],\r\n searchText = \"\",\r\n layoutAbbreviation = \"\",\r\n axiosController,\r\n requestOldFeatures = false,\r\n visualizerType = document.kvConfig.visualizerType) {\r\n if (IS_OFFLINE_MODE) {\r\n return Promise.resolve({data: []})\r\n }\r\n pageSize = (groupName === \"EX L\") ? 1500 : pageSize;\r\n const fixedGroupName = JsonApi.fixGroupName(groupName);\r\n const layout = getCurrentLayout();\r\n\r\n let localUrl = layout.isNewLayout && (visualizerType === \"kvScene\" && !IS_LIXIL_SERVERS)\r\n ? `/api/public/bvdataR/${+document.kvConfig.userId}/features/${fixedGroupName}`\r\n : `/api/public/bvdata/${+document.kvConfig.userId}/features/${fixedGroupName}`;\r\n\r\n let requestUrl = `${_getUrlBase()}${localUrl}/${page}/${pageSize}/`;\r\n\r\n const searchGroupName = layout.isNewLayout && groupName.includes(\" Crop\") ? groupName.replace(\" Crop\", \"\") : groupName;\r\n const featureGroup = layout.getFeatureGroupByGroupName(searchGroupName);\r\n\r\n if (USE_SERVER_CACHING && (visualizerType === \"KV\" || visualizerType === \"Kitchen\")\r\n || (!requestOldFeatures && featureGroup && featureGroup.nextFeaturesPageToLoadArray)) {\r\n let layoutName = layoutAbbreviation || `${layout.getCurrentLayoutAbbreviation()}/`;\r\n if (layout.isNewLayout) {\r\n layoutName = layoutName.replace(\"Layout\", \"\");\r\n }\r\n requestUrl += layoutName; // should go before filters\r\n }\r\n\r\n requestUrl = addUrlMode(requestUrl, visualizerType);\r\n\r\n if (filterValues.length) {\r\n filterValues.forEach((filterValue) => {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"filterId=\" + filterValue;\r\n });\r\n }\r\n if (searchText) {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"filter=\" + searchText\r\n }\r\n\r\n const fabricatorSettings = store.getState().fabricatorState.settings;\r\n if (fabricatorSettings.leadCapture) {\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"sortBy=unlocked\";\r\n }\r\n if (requestOldFeatures) {\r\n const oldVersion = getCommonVisualizerType(visualizerType) === \"kitchen\" ? \"kv4\" : \"bv4\";\r\n requestUrl += (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"toolVersion=\" + oldVersion; // should go before filters\r\n }\r\n\r\n const response = document.kvConfig.kioskMode\r\n ? await this.getKioskApiResponse(document.kvConfig.userId, localUrl, {filterValues, searchText, page, pageSize, type: \"features\" })\r\n : await _get(requestUrl, axiosController)\r\n if (Config.isDevMode()) {\r\n console.log(requestUrl + \" response\", response);\r\n }\r\n if (!response || !response.data || response.data.error) {\r\n renderErrorPopup(response.data.error);\r\n return []\r\n }\r\n return fixFeaturesResponse(response.data)\r\n }\r\n\r\n static getBathroomVisualizerGroupFilterValues(groupName = \"\", filterId = null, withStoneFilters = true) {\r\n if (document.kvConfig.noInternetMode) { // no need to receive features, we already received 50k, all of them\r\n return Promise.resolve({data: []})\r\n }\r\n const fixedGroupName = JsonApi.fixGroupName(groupName);\r\n var localUrl = `/api/public/bvdata/${+document.kvConfig.userId}/filters/${fixedGroupName}/`;\r\n var featureLocal = `/api/public/bvdata/${+document.kvConfig.userId}/features/${fixedGroupName}`;\r\n // const layout = getCurrentLayout();\r\n if (USE_SERVER_CACHING) {\r\n localUrl += `ALL/`;\r\n }\r\n localUrl = addUrlMode(localUrl);\r\n featureLocal = addUrlMode(featureLocal);\r\n let requestUrl = `${_getUrlBase()}${localUrl}`;\r\n if (filterId) {\r\n requestUrl = requestUrl + filterId\r\n }\r\n if (!withStoneFilters) {\r\n requestUrl = requestUrl + (requestUrl.includes(\"?\") ? \"&\" : \"?\") + \"stoneFilters=false\";\r\n }\r\n\r\n if(document.kvConfig.kioskMode) {\r\n return this.getKioskApiResponse(document.kvConfig.userId, localUrl, {type: 'filters', filterId, featureLocal});\r\n } else {\r\n return _get(requestUrl);\r\n }\r\n }\r\n\r\n static getQtCategories(layoutName, forVisualizerType) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/featureGroupCategories.json\")\r\n }\r\n const featuresPerGroupAmount = window.location.href.includes(\"cutting_edge_countertops\")\r\n || (document.kvConfig.userId === 138452) ? 200 : 50;\r\n const visualizerType = getCommonVisualizerType(forVisualizerType);\r\n // return _get(`${_getUrlBase()}/api/public/featureGroupCategories/${+document.kvConfig.userId}/${visualizerType}/?featuresPerGroup=${featuresPerGroupAmount}&mode=${visualizerType}&layout=${layoutName}`);\r\n\r\n const layout = getCurrentLayout(forVisualizerType);\r\n const localUrl = layout.isNewLayout\r\n ? `/api/public/featureGroupCategoriesLite/${+document.kvConfig.userId}/${visualizerType}/`\r\n : `/api/public/featureGroupCategories/${+document.kvConfig.userId}/${visualizerType}/?featuresPerGroup=${featuresPerGroupAmount}&mode=${visualizerType}&layout=${layoutName}`;\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(document.kvConfig.userId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static saveQuoteFast(data) {\r\n if(document.kvConfig.kioskMode) {\r\n return Promise.resolve(this.getKioskData(\"quickSave\", JSON.stringify({\r\n id: data.jobId,\r\n saveData: data.data\r\n })));\r\n }\r\n else {\r\n return _post(`${_getUrlBase()}/api/public/SaveQuoteFast`, data);\r\n }\r\n }\r\n\r\n static contractSign(data) {\r\n return _post(`${_getUrlBase()}/api/public/replace-and-sign`, data);\r\n }\r\n\r\n static getDocumentForJob(jobId, forceNew = false) {\r\n return _post(`${_getUrlBase()}/api/public/document-for-job/${jobId}/${forceNew}`, {});\r\n }\r\n\r\n static getContractDocuments(fabricatorId = document.kvConfig.userId) {\r\n return _get(`${_getUrlBase()}/api/document-signing/documents/${fabricatorId}`);\r\n }\r\n\r\n static getDocumentForFabricator(fabricatorId = document.kvConfig.userId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/documentsForFabricator.json\")\r\n }\r\n return _post(`${_getUrlBase()}/api/public/document-for-fab/${fabricatorId}/`);\r\n }\r\n\r\n static getFabricatorSubscriptions(fabricatorId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/fabricatorSubscriptions.json\")\r\n }\r\n const localUrl = `/api/public/GetFabricatorSubscriptionInfo/${fabricatorId}`;\r\n return document.kvConfig.kioskMode\r\n ? this.getKioskApiResponse(fabricatorId, localUrl)\r\n : _get(`${_getUrlBase()}${localUrl}`);\r\n }\r\n\r\n static getFabricatorDiscounts(fabricatorId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/fabricatorDiscounts.json\")\r\n }\r\n return _get(`${_getUrlBase()}/api/public/fabricator-discounts/${fabricatorId}`);\r\n }\r\n\r\n static async getKioskApiResponse(fabricatorId, localUrl, otherData = null) {\r\n let data = {\r\n fabricatorId,\r\n localUrl,\r\n additionalInfo: {...otherData}\r\n };\r\n return this.getKioskData(\"getJson\", data);\r\n }\r\n\r\n static async getKioskData(type, data) {\r\n var kioskData = await this.getRawKioskData(type, data);\r\n if(typeof(kioskData) == \"string\") {\r\n kioskData = JSON.parse(kioskData);\r\n }\r\n return {data: kioskData};\r\n }\r\n\r\n static getRawKioskData(type, data) {\r\n var kioskData = KioskApp.PostMessage({\r\n type,\r\n data\r\n });\r\n return kioskData;\r\n }\r\n\r\n static saveQuoteKiosk(data) { return this.getKioskData('saveQuote', data); }\r\n static saveUserKiosk(data) { return this.getKioskData('saveUser', data); }\r\n static saveSchedule(data) { return this.getKioskData('schedule', data); }\r\n\r\n static getCustomersAndEmployees(fabricatorId = document.kvConfig.userId) {\r\n if (document.kvConfig.noInternetMode) {\r\n return _get(hardcodeResponsesFolder() + \"/customersAndEmployees.json\")\r\n }\r\n return _get(`${_getUrlBase()}/api/public/fabricator-customer-employees/${fabricatorId}/`);\r\n }\r\n\r\n static getCustomerById(customerId) {\r\n return _get(`${_getUrlBase()}/api/public/getCustomerData/${customerId}?format=json`);\r\n }\r\n static copySqftImages(fabricatorId, postData) {\r\n return _post(`${_getUrlBase()}/api/public/copySqftImages/${fabricatorId}/`, postData);\r\n }\r\n static getPassedUserInfo(userData) {\r\n return _post(`${_getUrlBase()}/api/public/EncSSOLoginClient/`, userData);\r\n }\r\n static postSaveVisualizerImage(fabricatorId, postData) {\r\n return _post(`${_getUrlBase()}/api/public/saveVisualizerImage/${fabricatorId}`, postData);\r\n }\r\n static postSaveTempData(postData, id = \"\", expiresIn = \"\") {\r\n let postString = `${_getUrlBase()}/api/public/saveTempData`;\r\n if (id) {\r\n postString+= `/${id}`;\r\n }\r\n if (expiresIn) {\r\n postString+= `/${expiresIn}`;\r\n }\r\n return _post(postString, {\"data\": postData});\r\n }\r\n static getSaveTempData(id = \"\") {\r\n return _get(`${_getUrlBase()}/api/public/getTempData/${id}`);\r\n }\r\n static postSureTax(postData, fabricatorId = document.kvConfig.userId) {\r\n return _post(`${_getUrlBase()}/api/public/postSureTaxRequest/${fabricatorId}`, postData);\r\n }\r\n static postVerifyAddress(postData) {\r\n return _post(`${_getUrlBase()}/api/public/verifyAddress`, postData);\r\n }\r\n static getTrumbleShippingOptions(skuList, zipCode) {\r\n return _get(`${_getUrlBase()}/api/public/getTrumbleShippingOptions/${skuList}/${zipCode}`);\r\n }\r\n static postTrumbleShippingOptions(postData, zipCode) {\r\n return _post(`${_getUrlBase()}/api/public/trumbleShippingOptions/${zipCode}`, postData);\r\n }\r\n static postTrumbleInventory(postData) {\r\n return _post(`${_getUrlBase()}/api/public/trumbullInventory`, postData);\r\n }\r\n static postShipperHqShipping(postData) {\r\n return _post(`${_getUrlBase()}/api/public/shipperHqShipping`, postData);\r\n }\r\n static getFilterGroups(fabricatorId = document.kvConfig.userId) {\r\n return _get(`${_getUrlBase()}/api/public/filterGroups/${fabricatorId}`);\r\n }\r\n static getMarkUpForFeatures(featuresArray) {\r\n return _post(`${_getUrlBase()}/api/markup/get-features/`, featuresArray);\r\n }\r\n}\r\n","import {useHistory, useRouteMatch} from \"react-router-dom\";\r\nimport {hashHistory} from \"react-router\"; // omg pls don't kill me for that\r\n\r\nimport {setWizardActiveItem, setWizardActiveStep, setWizardSelectedValues} from \"../../../actions/wizardFunctions\";\r\nimport store from \"../../../store\";\r\nimport {\r\n getAvailableSteps,\r\n getCurrentGroups,\r\n getDefaultMaterialsWizardItem, getFeatureGroupFromWizardGroup, getWizardGroupFromCurrentSteps, navItemIsExcluded\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport Misc from \"../../../misc/misc\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport {\r\n getNextWizardSteps,\r\n isSameVisualizerWizard, selectedWizardGroupIsNotInCurrentStepAnymore\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {showWizardStepDoneCheckMark} from \"./materialsWizardDoneCheckMark\";\r\n\r\nexport const getNextNotCheckedStep = (wizardActiveItem, wizardActiveStep, wizardSelectedValues, cartItems, activeQuoteIndex) => {\r\n let nextStep = wizardActiveStep + 1;\r\n\r\n return nextStep // removed to prevent bugs (per Alan)\r\n\r\n // if (!wizardSelectedValues[nextStep]) { // if the next step is free - just go next, otherwise - let's find where to jump\r\n // changeWizardStepRoute(nextStep);\r\n // return\r\n // }\r\n const wizardSteps = getNextWizardSteps(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n while (nextStep <= wizardSteps.length - 1) {\r\n if (!wizardSteps[nextStep]) {\r\n break;\r\n }\r\n const wizardGroup = wizardSteps[nextStep].stepGroups[0];\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n const showDoneCheckMark = showWizardStepDoneCheckMark(wizardSelectedValues[nextStep], featureGroup, cartItems, activeQuoteIndex, wizardSteps[nextStep].stepGroups);\r\n // console.log(\"showDoneCheckMark\", wizardGroup, featureGroup, showDoneCheckMark);\r\n if (!showDoneCheckMark) {\r\n break;\r\n }\r\n // console.log(\"activePartRelatedItemIndex skipped\", activePartRelatedItemIndex);\r\n nextStep = nextStep + 1;\r\n }\r\n return nextStep\r\n}\r\n\r\nconst getSkippedWizardValues = (nextStep, wizardActiveStep, wizardItem, wizardSelectedValues) => {\r\n if (nextStep > wizardActiveStep) {\r\n\r\n const wizardSteps = getAvailableSteps(wizardItem, wizardSelectedValues, true);\r\n wizardSteps.forEach((step, stepIndex) => {\r\n if ((stepIndex < nextStep) && (!wizardSelectedValues[stepIndex]\r\n || selectedWizardGroupIsNotInCurrentStepAnymore(wizardSelectedValues[stepIndex], step.stepGroups))) {\r\n const wizardGroup = step.stepGroups[0];\r\n if (wizardGroup) {\r\n const skippedValue = {\r\n [stepIndex]: {\r\n wizardGroup,\r\n }\r\n }\r\n store.dispatch(setWizardSelectedValues(skippedValue));\r\n wizardSelectedValues = Object.assign(wizardSelectedValues, skippedValue); // this is needed for code below\r\n }\r\n }\r\n });\r\n }\r\n return wizardSelectedValues\r\n}\r\n\r\n/**\r\n * is used for SQFT to prevent bug when advanced quoting is missing selected value\r\n * @param cartItems {[cartItemInterface]}\r\n */\r\nexport const setWizardValuesFromCartItems = (cartItems) => {\r\n const {wizardSelectedValues, wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !cartItems.length) {\r\n return\r\n }\r\n let shouldUpdate = false;\r\n let wizardValues = Object.assign({}, wizardSelectedValues);\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n // console.log(\"cartItems\", cartItems);\r\n // console.log(\"wizardValues\", wizardValues);\r\n cartItems.forEach((cartItem) => {\r\n if (!cartItem.fromWizardGroupId\r\n || !Number.isInteger(cartItem.fromWizardStep)\r\n || !cartItem.fromWizardId || (cartItem.fromWizardId !== wizardActiveItem.id)\r\n || wizardValues[cartItem.fromWizardStep]) {\r\n return\r\n }\r\n if (wizardSteps[cartItem.fromWizardStep] && wizardSteps[cartItem.fromWizardStep].stepGroups) {\r\n const wizardGroup = wizardSteps[cartItem.fromWizardStep].stepGroups.find(wG => wG.id === cartItem.fromWizardGroupId)\r\n // yes, we added a cart item from the wizard step, we should select it\r\n if (wizardGroup) {\r\n wizardValues[cartItem.fromWizardStep] = {\r\n wizardGroup,\r\n }\r\n if (!navItemIsExcluded({part: cartItem.cartFeature}, wizardGroup)) {\r\n wizardValues[cartItem.fromWizardStep].selectedFeature = cartItem.cartFeature;\r\n wizardValues[cartItem.fromWizardStep].partId = cartItem.partId;\r\n }\r\n shouldUpdate = true;\r\n }\r\n }\r\n });\r\n if (shouldUpdate) {\r\n // console.log(\"shouldUpdate\", wizardValues);\r\n store.dispatch(setWizardSelectedValues(wizardValues, true, wizardActiveItem));\r\n }\r\n}\r\n\r\nexport const switchToWizardItem = (wizardItem, nextStep, quoteIndex, wizardGroupId = null, changeRoute = true) => {\r\n const {quotesState, wizardState} = store.getState();\r\n const {allWizardsValues, wizardActiveStep} = wizardState;\r\n\r\n if (!wizardItem) {\r\n wizardItem = getDefaultMaterialsWizardItem();\r\n }\r\n\r\n let wizardValues = {};\r\n const foundWizardSelectedObject = allWizardsValues.find(wizSelObject => {\r\n return (wizSelObject.quoteIndex === quotesState.activeQuoteIndex) && (wizSelObject.wizardItemId === wizardItem.id)\r\n && isSameVisualizerWizard(wizSelObject)\r\n });\r\n if (foundWizardSelectedObject) {\r\n wizardValues = Object.assign({}, foundWizardSelectedObject.wizardSelectedValues);\r\n wizardValues = getSkippedWizardValues(nextStep, wizardActiveStep, wizardItem, wizardValues);\r\n }\r\n store.dispatch(setWizardActiveItem(wizardItem, quoteIndex));\r\n store.dispatch(setWizardSelectedValues(wizardValues, true, wizardItem));\r\n if (Number.isInteger(nextStep)) {\r\n if (wizardGroupId) {\r\n const {neededStep} = getWizardGroupFromCurrentSteps(wizardItem, wizardValues, wizardGroupId);\r\n if (neededStep && (neededStep.stepIndex !== nextStep)) {\r\n nextStep = neededStep.stepIndex\r\n }\r\n }\r\n store.dispatch(setWizardActiveStep(nextStep));\r\n } else {\r\n nextStep = foundWizardSelectedObject && Number.isInteger(foundWizardSelectedObject.lastVisitedStep)\r\n ? foundWizardSelectedObject.lastVisitedStep // restore last step\r\n : wizardValues ? Object.keys(wizardValues).length : 0 // restore last step (just in case lastVisitedStep is missing)\r\n if (nextStep === 0 && wizardActiveStep !== 0) {\r\n store.dispatch(setWizardActiveStep(0)); // cases when someone changes the wizard\r\n }\r\n }\r\n if (!changeRoute) {\r\n return\r\n }\r\n const urlStepNumber = nextStep + 1; // because we don't want to have 0 in the URL\r\n const nextUrl = \"/materials/\" + Misc.getUrlFromString(wizardItem.name) + \"/\" + urlStepNumber;\r\n const currentHash = window.location.hash.split(\"#\")[1];\r\n if (!currentHash || (currentHash !== nextUrl)) {\r\n hashHistory.push(nextUrl);\r\n }\r\n}\r\n\r\nexport const useChangeWizardStepRoute = () => {\r\n\r\n let history = useHistory();\r\n let routeMatch = useRouteMatch();\r\n // {\r\n // isExact: true,\r\n // params: {partName: 'kitchen-cabinets', subPartName: '1'},\r\n // path: \"/materials/:partName/:subPartName\",\r\n // url: \"/materials/kitchen-cabinets/3/upper-cabinet-boxes\"\r\n // }\r\n // let {partName, subPartName} = routeMatch.params;\r\n let {partName} = routeMatch.params;\r\n\r\n const changeWizardStepRoute = (nextStep, propsWizardItem) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardList} = store.getState().wizardState;\r\n let {wizardSelectedValues} = store.getState().wizardState;\r\n\r\n const currentWizardItem = propsWizardItem || wizardActiveItem;\r\n\r\n wizardSelectedValues = getSkippedWizardValues(nextStep, wizardActiveStep, currentWizardItem, wizardSelectedValues);\r\n\r\n const currentGroups = getCurrentGroups(currentWizardItem, nextStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep > -1 && !currentGroups.length) { // wizard finished! congratulations\r\n const currentWizardIndex = wizardList.findIndex(wizardItem => wizardItem.id === currentWizardItem.id);\r\n\r\n if (nextStep === -1 && wizardActiveStep === 0) { // go to the previous wizard\r\n const prevEnabledWizard = wizardList.find((wizardItem, wizardItemIndex) => {\r\n return (wizardItem.id !== currentWizardItem.id) && (wizardItemIndex < currentWizardIndex)\r\n });\r\n if (prevEnabledWizard) {\r\n switchToWizardItem(prevEnabledWizard);\r\n } else {\r\n history.push(ROUTES.quoteDesign);\r\n }\r\n return;\r\n }\r\n\r\n const nextEnabledWizard = wizardList.find((wizardItem, wizardItemIndex) => {\r\n return (wizardItem.id !== currentWizardItem.id) && (wizardItemIndex > currentWizardIndex)\r\n });\r\n if (nextEnabledWizard) {\r\n switchToWizardItem(nextEnabledWizard);\r\n } else {\r\n history.push(ROUTES.shoppingcart);\r\n }\r\n return;\r\n }\r\n\r\n // console.log(\"nextStep\", nextStep);\r\n store.dispatch(setWizardActiveStep(nextStep));\r\n\r\n if (IS_LIXIL_UI) {\r\n return; // no need to change url\r\n }\r\n\r\n // console.log(\"subPartName\", subPartName);\r\n // console.log(\"partName\", partName);\r\n // console.log(\"history\", history);\r\n\r\n if (!partName) {\r\n partName = Misc.getUrlFromString(currentWizardItem.name)\r\n }\r\n\r\n const wizardGroup = currentGroups[0];\r\n if (!wizardGroup) {\r\n console.info(\"no wizard group found, something is wrong with the wizard\", );\r\n return\r\n }\r\n const stepUrl = Misc.getUrlFromString(wizardGroup.customDisplayName || wizardGroup.groupName || \"\");\r\n\r\n const urlStepNumber = nextStep + 1; // because we don't want to have 0 in the URL\r\n history.push(\"/materials/\" + partName + \"/\" + urlStepNumber + (stepUrl ? \"/\" + stepUrl : \"\"));\r\n }\r\n\r\n return {changeWizardStepRoute}\r\n}\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport point from \"./point\";\r\nimport lineLength from \"./overlays/lineLength\";\r\nimport pnpoly, {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport {\r\n addDecimalToLength,\r\n get45CornerLegDistanceByHypotenuse,\r\n getClosestPoint,\r\n getIntersectCords,\r\n getIntersectCordsBetweenLines,\r\n getMousePositionOnShape,\r\n getParallelPoints,\r\n getPointBetweenPoints,\r\n getPointDistance, getPointField,\r\n getPointOnTheLine, getTanDeg,\r\n isInnerCorner,\r\n measureDistanceToInches,\r\n orientation\r\n} from \"../../../../helpers/sqftHelper\";\r\n//todo sqft-react\r\nimport moveDiagonalLine from \"../../../../lib/moveDiagonalLine\";\r\nimport bumpout from \"./overlays/bumpout\";\r\nimport label from \"./overlays/label\";\r\nimport LineCorner from \"./lineHooks/lineCorner\";\r\n// import Color from \"./core/draw/color\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\nimport Color from \"../workspace/textBox/draw/color\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n RESOURCE_ATTACHED_TO_NAME,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n RESOURCE_TYPE, SHAPE_PART_ID,\r\n SIDEBAR_SLAB_SEAM_BUTTONS,\r\n SQFT_MODE\r\n} from \"../../../../constants\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport sqftSlabManager from \"../../store/sqftSlabManager\";\r\nimport {addMiteredSection} from \"../../../../../../actions/sqftMiteredFunctions\";\r\nimport {addResource, deleteResourceAttachedTo} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {getAngleBetween3Points, getLineDirection, getLineOrientation} from \"../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\nimport {\r\n getLineBordersArrayV2,\r\n updateMiteredLength,\r\n updateShapeWaterfallLength,\r\n updateUnderlaymentLength\r\n} from \"../../helpers/lineHelper\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport MiteredController from \"../controls/mitered\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport sqftResourcesManager from \"../../store/sqftResoursesManager\";\r\nimport BlinkingHighlight from \"../../helpers/commonParts/blink\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {createSlabModeWaterfallShapes} from \"../../store/canvasHelper\";\r\nimport {isMiterEdge, isWaterfallFeature} from \"../../../../helpers/featureHelper\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport LineAttachmentsComposite from \"./lineHooks/lineAttachmentsComposite\";\r\nimport UnderlaymentController from \"../controls/underlayment\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {getClosestPointOnLine} from \"../../../../helpers/coordinatesHelper\";\r\n// import Menu from \"../controls/menu\";\r\n// import MiteredController from \"../controls/mitered\";\r\n\r\nexport default function (from, to, parent = null) {\r\n //private variables\r\n var self = this,\r\n //parent = null,\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHovering: false,\r\n withEdge: false,\r\n withBacksplash: false,\r\n withWall: false,\r\n withBumpout: false,\r\n isWithMitered: false, // mitered tool\r\n isWithUnderlayment: false,\r\n isWithWaterfallEdge: false, // waterfallTool edges\r\n isWithPeninsulaUnderwrapEdge: false, // Peninsula Underwrap Edge edges\r\n isWithFakeEdge: false,\r\n withId: null,\r\n attachedHandleId: null,\r\n attachedHandleUrl: null,\r\n attachedCrownMoldingFeatureId: null,\r\n attachedCrownMoldingUrl: null,\r\n backsplashFeatureId: null,\r\n backsplashHeight: 0, //this is backsplash size\r\n backsplashName: \"\", //this is backsplash size\r\n backsplashType: \"\", //this is backsplash size\r\n attachedItems: {\r\n isWithCrownMolding: false,\r\n isWithEndCap: false,\r\n },\r\n movePointDistance: 0, // is needed for diagonal lines\r\n angleLinePoints: {},\r\n slabModeSkipMiteredEdgeCreation: false,\r\n isHiddenForever: false,\r\n seamCutPoint: null,\r\n },\r\n design = {\r\n aroundLineColor: '#E3E1E3',\r\n cornerGutterSize: 0.1,\r\n outlineWidth: 8,\r\n outlineMargin: 9,\r\n horizontalOutlineMargin: 5,\r\n lineThickness: 4\r\n },\r\n overlayImportData = null,\r\n lineCornerImportData = null,\r\n overlayMiteredData = null,\r\n overlayUnderlaymentData = null,\r\n lineDirection = {};\r\n //public properties\r\n this.id = uuid();\r\n this.from = from;\r\n this.to = to;\r\n this.ctx = null;\r\n this.attachedShape = null;\r\n this.overlay = null;\r\n this.lineCorner = null;\r\n this.bumpoutOverlay = null;\r\n this.miteredOverlay = null;\r\n this.waterfallOverlay = null;\r\n this.labelOverlay = null;\r\n this.titleOverlay = null;\r\n this.staticOffset = null;\r\n this.isLine = true;\r\n this.blink = new BlinkingHighlight();\r\n //todo\r\n this.lineAttachmentsComposite = new LineAttachmentsComposite();\r\n\r\n //private property setters\r\n function setParent(value) { parent = value; }\r\n //public property getters\r\n this.getParent = function() { return parent; };\r\n this.getAttachedShape = () => { return this.attachedShape; };\r\n this.isWithBumpout = function() { return state.withBumpout; };\r\n this.isWithEdge = function() { return state.withEdge; };\r\n this.isWithWaterfallToolEdge = () => { return state.isWithWaterfallEdge; };\r\n this.isWithPeninsulaUnderwrapEdge = () => { return state.isWithPeninsulaUnderwrapEdge; };\r\n this.isWithBacksplash = () => { return state.withBacksplash; };\r\n this.isWithMitered = function() { return state.isWithMitered; };\r\n this.isWithUnderlayment = function() { return state.isWithUnderlayment; };\r\n this.isWithHandle = function() { return state.attachedHandleId; };\r\n this.isWithMiteredPrev = function() {\r\n const prevLine = parent.getPrevLine(self);\r\n return prevLine.isWithMitered();\r\n };\r\n this.isWithMiterEdge = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n if (attachedResource) {\r\n return isMiterEdge(attachedResource.featureId);\r\n }\r\n };\r\n /** this will return if green edge is waterfall (not waterfall tool) */\r\n this.isWithWaterfallEdgeFeature = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n if (attachedResource) {\r\n return isWaterfallFeature(attachedResource.featureId);\r\n }\r\n };\r\n this.isWithCrownMolding = () => {\r\n return state.attachedItems.isWithCrownMolding\r\n }\r\n\r\n this.getAttachedFeature = () => {\r\n const attachedResource = workspace.getAttachedTo(this);\r\n const layout = getCurrentLayout();\r\n\r\n return layout.getFeatureById(attachedResource.featureId, true);\r\n }\r\n this.isHovering = (shouldExcludePoints = false) => {\r\n if (!shouldExcludePoints && this.from.isHovering()) {\r\n return true\r\n }\r\n return state.isHovering;\r\n };\r\n this.isAngleHovering = function() { return this.lineCorner.state.isHovering; };\r\n this.isCornerLineHovering = function() { return this.lineCorner.state.isCornerLineHovering; };\r\n this.getDesign = function() { return design };\r\n this.getWithId = () => { return state.withId };\r\n this.setWithId = (value) => { state.withId = value };\r\n this.getBacksplashHeight = () => { return state.backsplashHeight };\r\n this.setBacksplashHeight = (value) => {\r\n //update resource height\r\n const attachedToResource = {...sqftResourcesManager.getAttachedToLineResource(this)};\r\n attachedToResource.height = value;\r\n sqftResourcesManager.updateAttachedToLineResource(attachedToResource);\r\n\r\n state.backsplashHeight = value\r\n this.overlay.renderBacksplashText(state.backsplashName, state.backsplashType);\r\n };\r\n this.getHandleId = () => { return state.attachedHandleId};\r\n this.setHandleId = (featureId) => { state.attachedHandleId = featureId};\r\n this.getHandle3dURL = () => { return state.attachedHandleUrl};\r\n this.setHandle3dURL = (url) => { state.attachedHandleUrl = url};\r\n this.getCrownMolding3dURL = () => { return state.attachedCrownMoldingUrl};\r\n this.setCrownMolding3dURL = (url) => { state.attachedCrownMoldingUrl = url};\r\n this.getCrownMoldingFeatureId = () => { return state.attachedCrownMoldingFeatureId};\r\n this.setCrownMoldingFeatureId = (url) => { state.attachedCrownMoldingFeatureId = url};\r\n this.getBacksplashFeatureId = () => { return sqftResourcesManager.getAttachedToLineResource(this).backsplashFeatureId };\r\n this.setBacksplashFeatureId = (featureId) => {\r\n state.backsplashFeatureId = featureId\r\n\r\n //update resource feature id\r\n const attachedToResource = {...sqftResourcesManager.getAttachedToLineResource(this)};\r\n attachedToResource.backsplashFeatureId = featureId;\r\n sqftResourcesManager.updateAttachedToLineResource(attachedToResource);\r\n\r\n //update slab shapes feature\r\n SlabWorkspace.slabAdditionalShapes.updateAdditionalShapeFeature(this, featureId);\r\n };\r\n\r\n this.getState = () => { return state };\r\n this.setStateParams = (params) => {\r\n state = {...state, ...params};\r\n };\r\n this.getPointsFeatures = function () {\r\n return {\r\n from: {\r\n arcLength: self.from.arcLength,\r\n angle: self.from.angle,\r\n x: self.from.x,\r\n y: self.from.y,\r\n pointDirection: self.from.pointDirection,\r\n corner: self.from.corner\r\n },\r\n to: {\r\n arcLength: self.to.arcLength,\r\n angle: self.to.angle,\r\n x: self.to.x,\r\n y: self.to.y,\r\n pointDirection: self.to.pointDirection,\r\n corner: self.to.corner\r\n },\r\n }\r\n };\r\n this.getOrientation = () => {\r\n return getLineOrientation(this.from, this.to);\r\n };\r\n this.getAttachedItems = function () {\r\n let isAnyItemsAttached = false;\r\n for (const attachedItemKey in state.attachedItems) {\r\n if (state.attachedItems[attachedItemKey]) {\r\n isAnyItemsAttached = true\r\n }\r\n }\r\n return state.withEdge\r\n || state.withBacksplash\r\n || state.withWall\r\n || state.withBumpout\r\n || state.isWithMitered\r\n || state.isWithUnderlayment\r\n || this.isWithWaterfallToolEdge()\r\n || this.isWithPeninsulaUnderwrapEdge()\r\n || state.withId\r\n || isAnyItemsAttached\r\n };\r\n this.setTutotialImage = function (image) {\r\n self.tutorialImage = image\r\n };\r\n this.isWithFakeEdge = () => { return state.isWithFakeEdge }\r\n this.setFakeEdge = (value) => { state.isWithFakeEdge = value };\r\n this.setHiddenForever = (value) => { state.isHiddenForever = value }; // this is for slab placeholder\r\n\r\n //private functions\r\n this.calculateRenderPosition = (point, sqftMode) => {\r\n const state = store.getState();\r\n const isShowSlabTool = state.sqftSlabState.isShowSlabTool;\r\n let offset = this.staticOffset ? this.staticOffset : this.getOffset();\r\n let scale = config.scale;\r\n let xCord = 0;\r\n let yCord = 0;\r\n if (!isShowSlabTool || sqftMode === SQFT_MODE.regular) {\r\n xCord = point.pos.x;\r\n yCord = point.pos.y;\r\n } else {\r\n if (point.posSlab) {\r\n xCord = point.posSlab.x;\r\n yCord = point.posSlab.y;\r\n } else {\r\n console.error(\"point.posSlab was not set\");\r\n }\r\n }\r\n\r\n return {\r\n x: (xCord * scale) + offset.x,\r\n y: (yCord * scale) + offset.y\r\n };\r\n };\r\n // function calculatePointPosition(renderPoint) {\r\n // var offset = self.getOffset();\r\n // var scale = config.scale;\r\n // return {\r\n // x: (renderPoint.x - offset.x) / scale,\r\n // y: (renderPoint.y - offset.y) / scale\r\n // };\r\n // }\r\n\r\n const getLineField = () => {\r\n var fieldSquares = {\r\n from: null,\r\n to: null,\r\n points: [],\r\n isHovering: state.isHovering,\r\n };\r\n\r\n fieldSquares.from = self.from.getPointField();\r\n fieldSquares.to = self.to.getPointField();\r\n var lineOrientation = getLineOrientation(this.from, this.to);\r\n if (lineOrientation == orientation.HORIZONTAL || lineOrientation == orientation.VERTICAL) {\r\n if (self.from.x > self.to.x) {\r\n var x = fieldSquares.from.x;\r\n fieldSquares.from.x = fieldSquares.to.x;\r\n fieldSquares.to.x = x;\r\n }\r\n if (self.from.y > self.to.y) {\r\n var y = fieldSquares.from.y;\r\n fieldSquares.from.y = fieldSquares.to.y;\r\n fieldSquares.to.y = y;\r\n }\r\n }\r\n\r\n var f = fieldSquares.from;\r\n var t = fieldSquares.to;\r\n var fieldSquareResizeRatio = 2,\r\n squeezeRatio = 0,\r\n marginFromCenter = 10;\r\n\r\n // var windowWidth = $(window).width(),\r\n // fieldSquareResizeRatio = 0;\r\n // if (windowWidth <= 1024) {\r\n // fieldSquareResizeRatio = 10;\r\n // }\r\n // if (windowWidth <= 768) {\r\n // fieldSquareResizeRatio = 15;\r\n // }\r\n\r\n switch(lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"east\") {\r\n squeezeRatio =((t.x + f.width/2) - (f.x + f.width/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + t.height - fieldSquareResizeRatio - marginFromCenter});\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + f.height - fieldSquareResizeRatio - marginFromCenter});\r\n } else if (lineDirection.newDirection === \"west\") {\r\n squeezeRatio =((t.x + f.width/2) - (f.x + f.width/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: t.x + f.width/2 - squeezeRatio, y: t.y + t.height - fieldSquareResizeRatio + marginFromCenter});\r\n fieldSquares.points.push({x: f.x + f.width/2 + squeezeRatio, y: f.y + f.height - fieldSquareResizeRatio + marginFromCenter});\r\n }\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n squeezeRatio =((t.y + t.height/2) - (f.y + t.height/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + fieldSquareResizeRatio + marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: f.x + f.width - fieldSquareResizeRatio + marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: t.x + t.width - fieldSquareResizeRatio + marginFromCenter, y: t.y + t.height/2 - squeezeRatio});\r\n fieldSquares.points.push({x: t.x + fieldSquareResizeRatio + marginFromCenter, y: t.y + t.height/2 - squeezeRatio });\r\n } else if (lineDirection.newDirection === \"north\") {\r\n squeezeRatio =((t.y + t.height/2) - (f.y + t.height/2)) > 80 ? 15 : 0;\r\n fieldSquares.points.push({x: f.x + fieldSquareResizeRatio - marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: f.x + f.width - fieldSquareResizeRatio - marginFromCenter, y: f.y + t.height/2 + squeezeRatio});\r\n fieldSquares.points.push({x: t.x + t.width - fieldSquareResizeRatio - marginFromCenter, y: t.y + t.height/2 - squeezeRatio});\r\n fieldSquares.points.push({x: t.x + fieldSquareResizeRatio - marginFromCenter, y: t.y + t.height/2 - squeezeRatio });\r\n }\r\n break;\r\n }\r\n case \"SOUTHWEST\":\r\n case \"NORTHEAST\":\r\n fieldSquares.points.push({x: f.x, y: f.y });\r\n fieldSquares.points.push({x: t.x, y: t.y });\r\n fieldSquares.points.push({x: t.x + t.width, y: t.y + t.height });\r\n fieldSquares.points.push({x: f.x + f.width, y: f.y + f.height });\r\n break;\r\n case \"NORTHWEST\":\r\n case \"SOUTHEAST\":\r\n fieldSquares.points.push({x: f.x + f.width, y: f.y });\r\n fieldSquares.points.push({x: t.x + t.width, y: t.y });\r\n fieldSquares.points.push({x: t.x, y: t.y + t.height });\r\n fieldSquares.points.push({x: f.x, y: f.y + f.height });\r\n break;\r\n }\r\n return fieldSquares;\r\n }\r\n // function getDistance(point1, point2) {\r\n // var scale = workspace.getScale(),\r\n // xDiff = (point2.x - point1.x),\r\n // yDiff = (point2.y - point1.y),\r\n // distance = Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));\r\n // distance *= (xDiff + yDiff > 0 ? -1 : 1) / scale;\r\n // return distance;\r\n // }\r\n // function isLeft(a, b, c){\r\n // return ((b.x - a.x)*(c.y - a.y) - (b.y - a.y)*(c.x - a.x)) > 0;\r\n // }\r\n // function getDistanceToLine(p1, p2, p3) {\r\n // var scale = workspace.getScale(),\r\n // x0 = p3.x, y0 = p3.y,\r\n // x1 = p1.x, y1 = p1.y,\r\n // x2 = p2.x, y2 = p2.y,\r\n // distanceToLine = Math.abs(\r\n // ((y2 - y1) * x0) - ((x2 - x1) * y0) + (x2 * y1) - (y2 * x1)\r\n // ) / Math.sqrt(\r\n // Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2)\r\n // ),\r\n // xDiff = (x2 - x1),\r\n // yDiff = (y2 - y1);\r\n // distanceToLine *= (isLeft(p1, p2, p3) ? -1 : 1) / scale;\r\n // return distanceToLine;\r\n // }\r\n // function getCanvasDimensions() {\r\n // var canvas = workspace.getCanvas(),\r\n // canvasWidth = canvas.width,\r\n // canvasHeight = canvas.height,\r\n // scale = config.scale,\r\n // gridSize = config.workspace.gridSize * scale,\r\n // adjustedSize = (gridSize / 3),\r\n // rulerSize = adjustedSize + 6;\r\n // return {\r\n // rulerSize: rulerSize,\r\n // canvasWidth: canvasWidth,\r\n // canvasHeight: canvasHeight\r\n // }\r\n // }\r\n // function lockPointToCanvas(point) {\r\n // var dim = getCanvasDimensions(),\r\n // pos = self.calculateRenderPosition(point),\r\n // rulerSize = calculatePointPosition({x: dim.rulerSize, y: dim.rulerSize}),\r\n // heightWidth = calculatePointPosition({x: dim.canvasWidth, y: dim.canvasHeight}),\r\n // drop = false;\r\n //\r\n //\r\n // console.log('dim', dim);\r\n // console.log('pos', pos);\r\n // console.log('rulerSize', rulerSize);\r\n // console.log('heightWidth', heightWidth);\r\n //\r\n // if (pos.x < dim.rulerSize) {\r\n // point.x = rulerSize.x + 1;\r\n // drop = true;\r\n // } else if (pos.x >= dim.canvasWidth) {\r\n // point.x = heightWidth.x - 1;\r\n // drop = true;\r\n // }\r\n // if (pos.y < dim.rulerSize) {\r\n // point.y = rulerSize.y + 1;\r\n // drop = true;\r\n // } else if (pos.y >= dim.canvasHeight) {\r\n // point.y = heightWidth.y - 1;\r\n // drop = true;\r\n // }\r\n // if (drop) {\r\n // state.isHovering = false;\r\n // state.mouseDown = false;\r\n // }\r\n // return point;\r\n // }\r\n\r\n function setMouseOverLine(mousePos) {\r\n var field = getLineField();\r\n var vertx = [];\r\n var verty = [];\r\n for(var i = 0; i < field.points.length; i++) {\r\n vertx.push(field.points[i].x);\r\n verty.push(field.points[i].y);\r\n }\r\n state.isHovering = pnpoly(field.points.length, vertx, verty, mousePos.x, mousePos.y);\r\n\r\n return state.isHovering || state.mouseDown;\r\n }\r\n\r\n /*\r\n * This is more accurate hover area used for cabinets\r\n */\r\n this.getMouseOverLineV2 = (mousePos) => {\r\n this.updateLineHovering(mousePos)\r\n return state.isHovering || state.mouseDown;\r\n }\r\n this.updateLineHovering = (mousePos = sqftEventManager.getMousePos()) => {\r\n state.isHovering = isPointInsidePolygon(mousePos, getLineBordersArrayV2(this.from, this.to, design.lineThickness + design.lineThickness * 0.2));\r\n }\r\n this.getLineHovering = () => {\r\n return state.isHovering\r\n }\r\n\r\n function onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (state.mouseDown) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n self.from.snapToGrid();\r\n self.to.snapToGrid();\r\n }\r\n }\r\n const onMouseDown = (mousePos, e) => {\r\n void e;\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if (( EventManager.getCursor().indexOf(\"n-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"e-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"ne-resize\") >= 0\r\n || EventManager.getCursor().indexOf(\"nw-resize\") >= 0\r\n ) && state.isHovering\r\n ){\r\n state.mouseDown = true;\r\n state.movePointDistance = getPointDistance(self.from, self.to);\r\n state.mouseDownPosition = mousePos;\r\n return true;\r\n }\r\n\r\n //Add free seam cut point in the slabMode\r\n if (activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addFreeSeam && state.isHovering) {\r\n const mousePosOnShape = getMousePositionOnShape(mousePos.x, mousePos.y, this.getParent());\r\n const lineStart = self.from;\r\n const lineEnd = self.to;\r\n const seamCutPoint = getClosestPointOnLine(lineStart, lineEnd, mousePosOnShape);\r\n\r\n const shape = this.getParent();\r\n if (shape.seamCutPoints.length >= 2) {\r\n shape.seamCutPoints.shift(); // Удаляем самую старую точку\r\n }\r\n shape.seamCutPoints.push(seamCutPoint);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n const onMouseMove = (mousePos, e) => {\r\n void e;\r\n // if (e.terminate && !parent.isHovering()) {\r\n // state.isHovering = false;\r\n // return false;\r\n // }\r\n const isCabinet = isSFTCabinetsGroup();\r\n const isSlabMode = SqftStore.isSlabMode();\r\n const isMouseOverLine = isCabinet || isSlabMode ? this.getMouseOverLineV2(mousePos) : setMouseOverLine(mousePos);\r\n if (isMouseOverLine) {\r\n if (workspace.getAllowEdges() && !self.from.angleIsChanged && !self.to.angleIsChanged) {\r\n if (state.mouseDown) {\r\n this.moveLine(mousePos);\r\n }\r\n EventManager.releaseStealLock(parent);\r\n EventManager.stealCursor();\r\n switch(getLineOrientation(this.from, this.to)) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", self);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", self);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", self);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", self);\r\n break;\r\n }\r\n return state.mouseDown;\r\n }\r\n\r\n if (config.highlight.lines && state.isHovering) {\r\n EventManager.releaseStealLock(parent);\r\n EventManager.stealCursor();\r\n return false;\r\n }\r\n // prevent all other mouseover's\r\n if (this.getAttachedItems()) {\r\n return true\r\n }\r\n }\r\n\r\n this.lineCorner.updateCornerHoverState(mousePos);\r\n\r\n if (workspace.getHoverShape() !== parent) {\r\n //state.isHovering = false; // allow hovering multiple shapes\r\n }\r\n EventManager.resetCursor(self);\r\n return false;\r\n }\r\n function onMouseLeave() {\r\n state.isHovering = false;\r\n state.mouseDown = false;\r\n }\r\n\r\n //public functions\r\n this.export = () => {\r\n return {\r\n id: this.id,\r\n from: this.from.export(),\r\n to: this.to.export(),\r\n bumpout: this.bumpoutOverlay ? this.bumpoutOverlay.export() : null,\r\n //todo\r\n mitered: this.miteredOverlay ? this.miteredOverlay.export() : null,\r\n underlayment: this.underlaymentOverlay ? this.underlaymentOverlay.export() : null,\r\n waterfallData: this.waterfallOverlay ? this.waterfallOverlay.export() : null,\r\n label: this.labelOverlay ? this.labelOverlay.export() : null,\r\n titleOverlay: this.titleOverlay ? this.titleOverlay.export() : null,\r\n overlay: this.overlay ? this.overlay.export() : null,\r\n lineCorner: this.lineCorner ? this.lineCorner.export() : null,\r\n state: _.clone(state),\r\n }\r\n };\r\n\r\n this.import = (value, existing) => {\r\n state = value.state;\r\n overlayImportData = value.overlay;\r\n lineCornerImportData = value.lineCorner;\r\n var foundFrom = null, foundTo = null;\r\n for (var i = 0; i < existing.length && !(foundFrom && foundTo); i++) {\r\n if (!foundFrom && existing[i].from.id == value.from.id) {\r\n foundFrom = existing[i].from;\r\n } else if (!foundFrom && existing[i].to.id == value.from.id) {\r\n foundFrom = existing[i].to;\r\n } else if (!foundTo && existing[i].to.id == value.to.id) {\r\n foundTo = existing[i].to;\r\n } else if (!foundTo && existing[i].from.id == value.to.id) {\r\n foundTo = existing[i].from;\r\n }\r\n }\r\n self.id = value.id;\r\n if (foundFrom) {\r\n self.from = foundFrom;\r\n } else {\r\n self.from = new point();\r\n self.from.import(value.from);\r\n }\r\n if (foundTo) {\r\n self.to = foundTo;\r\n } else {\r\n self.to = new point();\r\n self.to.import(value.to);\r\n }\r\n if (value.bumpout) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.bumpoutOverlay = new bumpout();\r\n self.bumpoutOverlay.import(self, value.bumpout);\r\n state.withBumpout = true;\r\n }\r\n if (value.mitered) {\r\n //addMiteredToLine\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.import(self, value.mitered);\r\n overlayMiteredData = value.mitered;\r\n state.isWithMitered = true;\r\n store.dispatch(addMiteredSection(this.miteredOverlay));\r\n }\r\n if (value.underlayment) {\r\n //addMiteredToLine isWithUnderlayment\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n this.underlaymentOverlay = workspace.underlaymentController.createUnderlaymentOverlay(this);\r\n this.underlaymentOverlay.import(this, value.underlayment);\r\n overlayUnderlaymentData = value.underlayment;\r\n state.isWithUnderlayment = true;\r\n store.dispatch(addResource(RESOURCE_TYPE.underlaymentSections, this.underlaymentOverlay));\r\n }\r\n if (value.label) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.labelOverlay = new label();\r\n self.labelOverlay.init(self, value.label.labelText, value.label.partId);\r\n self.labelOverlay.import(value.label);\r\n }\r\n if (value.titleOverlay) {\r\n // self.overlay.setMidpointOffset(value.overlay.midpoint.xOffset, value.overlay.midpoint.yOffset);\r\n self.titleOverlay = new label();\r\n self.titleOverlay.init(self, value.titleOverlay.state.labelText, value.titleOverlay.state.partId);\r\n self.titleOverlay.import(value.titleOverlay);\r\n }\r\n if (value.waterfallData) {\r\n this.waterfallOverlay = workspaceControllers.waterfall.createWaterfallOverlay(this, value.waterfallData);\r\n }\r\n };\r\n this.init = (parent, temp) => {\r\n temp = temp || false;\r\n setParent(parent);\r\n this.lineCorner = new LineCorner(this);\r\n if (lineCornerImportData) {\r\n this.lineCorner.import(lineCornerImportData);\r\n }\r\n if (!temp) {\r\n this.initEvents();\r\n self.from.init(self);\r\n }\r\n if (!temp && !parent.shapeCabinet && parent.partId !== SHAPE_PART_ID.spacer) {\r\n self.overlay = new lineLength();\r\n self.overlay.init(self);\r\n if (overlayImportData) {\r\n self.overlay.import(overlayImportData);\r\n }\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.init(overlayMiteredData); // init after import\r\n //store.dispatch(addMiteredSection(this.miteredOverlay));\r\n //Menu.miteredController.updateInfo();\r\n //this.miteredOverlay.afterImport(overlayMiteredData);\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.init(overlayUnderlaymentData);\r\n }\r\n if (this.isWithWaterfallToolEdge()) {\r\n this.overlay.renderWaterfallText(RESOURCE_ATTACHED_TO_NAME.waterfall, RESOURCE_ATTACHED_TO_TYPE.waterfall);\r\n }\r\n\r\n lineDirection = parent.getAngleDirection(self); // {direction:{x: \"forward\", y: \"forward\"},facing:\"sw\"}, cornerMargins, orientation. newDirection\r\n\r\n if (self.historyPointFeatures) {\r\n self.from.angle = self.historyPointFeatures.from.angle;\r\n self.from.arcLength = self.historyPointFeatures.from.arcLength;\r\n self.from.x = self.historyPointFeatures.from.x;\r\n self.from.y = self.historyPointFeatures.from.y;\r\n self.from.pointDirection = self.historyPointFeatures.from.pointDirection;\r\n self.from.corner = self.historyPointFeatures.from.corner;\r\n\r\n self.to.angle = self.historyPointFeatures.to.angle;\r\n self.to.arcLength = self.historyPointFeatures.to.arcLength;\r\n self.to.x = self.historyPointFeatures.to.x;\r\n self.to.y = self.historyPointFeatures.to.y;\r\n self.to.pointDirection = self.historyPointFeatures.to.pointDirection;\r\n self.to.corner = self.historyPointFeatures.to.corner;\r\n\r\n self.historyPointFeatures = null;\r\n }\r\n\r\n // console.log('lineDirection', lineDirection);\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.from.deregisterEvents();\r\n this.overlay.deregisterEvents();\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.deregisterEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.deregisterEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.deregisterEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n if (state.isHiddenForever) {\r\n return\r\n }\r\n this.initEvents();\r\n this.from.reInitEvents();\r\n if (!this.miteredOverlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.reInitEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n };\r\n this.deregisterPartEvents = () => {\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.deregisterEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.deregisterEvents();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.deregisterEvents();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.deregisterPartEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.deregisterPartEvents();\r\n }\r\n if (this.overlay) {\r\n this.overlay.deregisterEvents();\r\n }\r\n this.from.deregisterPartEvents();\r\n };\r\n this.reInitPartEvents = () => {\r\n if (this.bumpoutOverlay) {\r\n this.bumpoutOverlay.reInitEvents();\r\n }\r\n if (this.miteredOverlay) {\r\n this.miteredOverlay.reInitEvents();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.underlaymentOverlay.deregisterEvents();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.reInitPartEvents();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitPartEvents();\r\n }\r\n if (this.overlay && !this.miteredOverlay) {\r\n this.overlay.reInitEvents();\r\n }\r\n this.from.reInitPartEvents();\r\n };\r\n this.reInitTitleEvents = () => {\r\n if (this.titleOverlay) {\r\n this.titleOverlay.reInitPartEvents();\r\n }\r\n };\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n var image = workspace.getImagesAttachedTo(self);\r\n if (image) {\r\n image.destroy();\r\n }\r\n EventManager.removeEvent(self);\r\n self.from.destroy();\r\n if (self.overlay)\r\n self.overlay.destroy();\r\n if (self.miteredOverlay) {\r\n self.miteredOverlay.destroy();\r\n }\r\n }\r\n };\r\n this.moveLine = (mousePos) => {\r\n\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"self.from.x\", self.from.x);\r\n // console.log(\"self.from.x\", self.to.x);\r\n\r\n var scale = workspace.getScale();\r\n\r\n var xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n var yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n // var slope = -getSlope(); // OLD LOGIC, let's keep it in case we found an issue with this moveDiagonalLine(see git diff)\r\n\r\n var o = getLineOrientation(this.from, this.to);\r\n if (o === orientation.VERTICAL) {\r\n self.from.x -= xDiff;\r\n self.to.x -= xDiff;\r\n if (self.isWithBumpout()) {\r\n self.bumpoutOverlay.moveBumpout(xDiff, 0);\r\n } else if (self.isWithMitered()) {\r\n self.miteredOverlay.moveMitered(xDiff, 0);\r\n } else if (this.isWithUnderlayment()) {\r\n this.underlaymentOverlay.moveMitered(xDiff, 0);\r\n }\r\n state.mouseDownPosition.x = mousePos.x;\r\n } else if (o === orientation.HORIZONTAL) {\r\n self.from.y -= yDiff;\r\n self.to.y -= yDiff;\r\n if (self.isWithBumpout()) {\r\n self.bumpoutOverlay.moveBumpout(0, yDiff);\r\n } else if (self.isWithMitered()) {\r\n self.miteredOverlay.moveMitered(0, yDiff);\r\n } else if (this.isWithUnderlayment()) {\r\n this.underlaymentOverlay.moveMitered(0, yDiff);\r\n }\r\n state.mouseDownPosition.y = mousePos.y;\r\n } else {\r\n const nextLine = parent.getNextLine(self);\r\n const prevLine = parent.getPrevLine(self);\r\n moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n state.mouseDownPosition = mousePos;\r\n }\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n\r\n updateShapeWaterfallLength(this);\r\n updateMiteredLength(this);\r\n updateUnderlaymentLength(this);\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n this.getLineDirection = function() {\r\n return parent.getAngleDirection(self); // line text direction\r\n };\r\n this.getLineDirectionV2 = function() {\r\n return getLineDirection(this.from, this.to); // line text direction\r\n };\r\n this.getPairedLines = function() {\r\n let pairedLines = [];\r\n switch (parent.shapeType) {\r\n case \"horseshoe\": {\r\n const prevLine = parent.getPrevLine(self);\r\n const nextLine = parent.getNextLine(self);\r\n const prevLineStep2 = parent.getPrevLine(prevLine);\r\n const nextLineStep2 = parent.getNextLine(nextLine);\r\n const prevLineStep3 = parent.getPrevLine(prevLineStep2);\r\n const nextLineStep3 = parent.getNextLine(nextLineStep2);\r\n\r\n pairedLines = [nextLineStep3, prevLineStep3];\r\n break;\r\n }\r\n default:\r\n pairedLines = [parent.getPrevLine(self), parent.getNextLine(self)];\r\n break;\r\n }\r\n\r\n return pairedLines;\r\n };\r\n this.getLineLength = function () {\r\n let distance = getPointDistance(self.from, self.to);\r\n\r\n return self.addDecimalToLength(measureDistanceToInches(distance))\r\n };\r\n\r\n this.getLineLengthMm = function () {\r\n let distance = getPointDistance(self.from, self.to);\r\n\r\n return measureDistanceToInches(distance).millimeters\r\n };\r\n\r\n this.getLineDistance = function () {\r\n return getPointDistance(self.from, self.to);\r\n };\r\n\r\n this.getLineBumpoutTotalHeight = function () {\r\n return self.addDecimalToLength(self.bumpoutOverlay.getBumpoutTotalHeight())\r\n };\r\n\r\n this.addDecimalToLength = function(lineLength) {\r\n return addDecimalToLength(lineLength);\r\n };\r\n this.getBiggestXPoint = function() {\r\n return self.from.x > self.to.x ? self.from : self.to\r\n };\r\n this.getBiggestYPoint = function() {\r\n return self.from.y > self.to.y ? self.from : self.to\r\n };\r\n this.getSmallestXPoint = function() {\r\n return self.from.x < self.to.x ? self.from : self.to\r\n };\r\n this.getSmallestYPoint = function() {\r\n return self.from.y < self.to.y ? self.from : self.to\r\n };\r\n /**\r\n * @deprecated use getLinePointsWithoutCorners\r\n * @return {[null, null, (\"default\"|*), (\"default\"|*)]}\r\n */\r\n this.getSmallestAndBiggestPointWithCorners = () => {\r\n let o = getLineOrientation(this.from, this.to),\r\n lineDirection = this.getLineDirection(),\r\n //nextLine = parent.getNextLine(self),\r\n prevLine = parent.getPrevLine(self),\r\n toCornerLength = self.to.getArcLength() || self.get45CornerLegDistance(),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toLinePoint = Object.assign({}, self.to),\r\n fromLinePoint = Object.assign({}, self.from),\r\n biggestLinePoint = null,\r\n smallestLinePoint = null,\r\n toCornerMargin = null,\r\n fromCornerMargin = null;\r\n\r\n if (o === orientation.VERTICAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.getBiggestYPoint());\r\n smallestLinePoint = Object.assign({}, this.getSmallestYPoint());\r\n if (lineDirection.newDirection === \"north\" ) {\r\n toCornerMargin = -fromCornerLength;\r\n fromCornerMargin = +toCornerLength;\r\n toLinePoint.y += fromCornerMargin;\r\n fromLinePoint.y += toCornerMargin;\r\n } else {\r\n toCornerMargin = -toCornerLength;\r\n fromCornerMargin = +fromCornerLength;\r\n toLinePoint.y += toCornerMargin;\r\n fromLinePoint.y += fromCornerMargin;\r\n }\r\n biggestLinePoint.y += toCornerMargin;\r\n smallestLinePoint.y += fromCornerMargin;\r\n } else if (o === orientation.HORIZONTAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.getBiggestXPoint());\r\n smallestLinePoint = Object.assign({}, this.getSmallestXPoint());\r\n if (lineDirection.newDirection === \"east\" ) {\r\n toCornerMargin = -toCornerLength;\r\n fromCornerMargin = +fromCornerLength;\r\n toLinePoint.x += toCornerMargin;\r\n fromLinePoint.x += fromCornerMargin;\r\n } else {\r\n toCornerMargin = -fromCornerLength;\r\n fromCornerMargin = +toCornerLength;\r\n toLinePoint.x += fromCornerMargin;\r\n fromLinePoint.x += toCornerMargin;\r\n }\r\n biggestLinePoint.x += toCornerMargin;\r\n smallestLinePoint.x += fromCornerMargin;\r\n }\r\n\r\n return [smallestLinePoint, biggestLinePoint, toLinePoint, fromLinePoint]\r\n };\r\n this.getLinePointsWithoutCorners = () => {\r\n let toCornerLength = this.to.getArcLength(),\r\n toAngleLength = this.to.getAngle(),\r\n fromCornerLength = this.from.getArcLength(),\r\n fromAngleLength = this.from.getAngle();\r\n\r\n const toPoint = getPointOnTheLine(this.to, this.from, -toCornerLength || -toAngleLength);\r\n const fromPoint = getPointOnTheLine(this.from, this.to, -fromCornerLength || -fromAngleLength);\r\n\r\n return [fromPoint, toPoint]\r\n }\r\n this.getOffset = function() {\r\n var scale = config.scale;\r\n var workspacePos = workspace.getOffset();\r\n if (parent) {\r\n var _pos = parent.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = parent.getSnappedPosition();\r\n }\r\n var offset = {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n } else {\r\n return {x: 0, y: 0};\r\n }\r\n return offset;\r\n };\r\n this.stealCursor = function(who) {\r\n if (self.from === who) {\r\n EventManager.resetCursor(self);\r\n }\r\n };\r\n this.resetState = () => {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n state.isHovering = false;\r\n };\r\n this.hasIntersections = () => {\r\n const lines = parent.getLines();\r\n const fromPosition = getPointField(this.from.x, this.from.y);\r\n const toPosition = getPointField(this.to.x, this.to.y);\r\n\r\n return lines.some(testLine => {\r\n const prevLine = parent.getPrevLine(this);\r\n const nextLine = parent.getNextLine(this);\r\n // skip closest lines\r\n if (testLine.id === this.id || testLine.id === prevLine.id || testLine.id === nextLine.id) {\r\n return false\r\n }\r\n const testLineFromPosition = getPointField(testLine.from.x, testLine.from.y);\r\n const testLineToPosition = getPointField(testLine.to.x, testLine.to.y);\r\n const intersections = getIntersectCordsBetweenLines(\r\n fromPosition, toPosition, testLineFromPosition, testLineToPosition\r\n )\r\n void intersections;\r\n // console.log(\"intersections\", intersections);\r\n // if (intersections) {\r\n // console.log(\"fromPosition\", fromPosition);\r\n // console.log(\"toPosition\", toPosition);\r\n // console.log(\"testLineFromPosition\", testLineFromPosition);\r\n // console.log(\"testLineToPosition\", testLineToPosition);\r\n // }\r\n return intersections\r\n })\r\n }\r\n\r\n /**\r\n * This will render blue shape\r\n * @param ctx\r\n * @param toOnly\r\n * @param sqftMode\r\n */\r\n this.render = (ctx, toOnly, sqftMode) => {\r\n this.renderLineBorder(ctx, toOnly, sqftMode);\r\n }\r\n\r\n /**\r\n * This will render blue shape\r\n * @param ctx\r\n * @param toOnly\r\n * @param sqftMode\r\n */\r\n this.renderLineBorder = (ctx, toOnly, sqftMode) => {\r\n if (workspace && workspace.getState().loading) return;\r\n this.ctx = ctx;\r\n toOnly = toOnly || false;\r\n const renderTo = self.calculateRenderPosition(self.to, sqftMode);\r\n const renderFrom = self.calculateRenderPosition(self.from, sqftMode);\r\n // if (!toOnly) {\r\n // let x = renderFrom.x;\r\n // let y = renderFrom.y;\r\n // if (self.from.arcLength > 0 || self.from.angle > 0) {\r\n // const radius = Math.sqrt(Math.pow(self.from.arcLength || self.from.angle, 2) / 2) * config.scale;\r\n // const o = getLineOrientation(this.from, this.to);\r\n // switch(o) {\r\n // case orientation.HORIZONTAL:\r\n // if (self.from.x < self.to.x)\r\n // x += radius;\r\n // else\r\n // x -= radius;\r\n // break;\r\n // case orientation.VERTICAL:\r\n // if (self.from.y < self.to.y)\r\n // y += radius;\r\n // else\r\n // y -= radius;\r\n // break;\r\n // case orientation.NORTHWEST:\r\n // case orientation.SOUTHEAST:\r\n // case orientation.NORTHEAST:\r\n // case orientation.SOUTHWEST:\r\n // //todo\r\n // break;\r\n // }\r\n // }\r\n // ctx.moveTo(x, y);\r\n // }\r\n\r\n if (state.withBumpout && !SqftStore.isSlabMode() && !this.isDisabledInPopup) {\r\n drawBumpoutLine(ctx);\r\n }\r\n // don't render arc Length and angle in the slab mode\r\n if (self.to.arcLength > 0 && !SqftStore.isSlabMode()) { // changes blue corner if radius or angle exists\r\n this.renderArcLength(ctx, renderFrom, renderTo);\r\n } else if (self.to.angle > 0) {\r\n this.renderAngle(ctx, renderFrom, renderTo);\r\n } else {\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n }\r\n }\r\n\r\n this.renderArcLength = (ctx, renderFrom, renderTo) => {\r\n let radiusMultiplier = this.to.arcLength;\r\n let radius = radiusMultiplier * config.scale;\r\n let dir = parent.getAngleDirection(this);\r\n\r\n switch (dir.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\":\r\n default: {\r\n const nextLine = parent.getNextLine(this);\r\n const nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to);\r\n const angle = getAngleBetween3Points(renderFrom, renderTo, nextLineRenderTo);\r\n const radiusMultiplier = this.to.arcLength * config.scale;\r\n const marginFrom = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2)));\r\n const pointA = getPointBetweenPoints(renderTo, renderFrom, marginFrom); // *2 is made to fit arcTo\r\n const pointB = getPointBetweenPoints(renderTo, self.calculateRenderPosition(nextLine.to), radius);\r\n\r\n ctx.lineTo(pointA.x, pointA.y);\r\n //ctx.lineTo(renderFrom.x, renderFrom.y)\r\n ctx.arcTo(renderTo.x, renderTo.y, pointB.x, pointB.y, radius);\r\n break;\r\n }\r\n }\r\n };\r\n this.renderAngle = (ctx, renderFrom, renderTo) => {\r\n let radiusMultiplier = Math.sqrt( Math.pow(this.to.angle, 2) * 2); //todo\r\n let radius = radiusMultiplier * config.scale;\r\n let dir = parent.getAngleDirection(this);\r\n\r\n switch (dir.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n const nextLine = parent.getNextLine(this);\r\n const nextLineRenderTo = this.calculateRenderPosition(nextLine.to);\r\n const pointA = getPointBetweenPoints(renderTo, renderFrom, radius / 2);\r\n const pointB = getPointBetweenPoints(renderTo, nextLineRenderTo, radius / 2);\r\n ctx.lineTo(pointA.x, pointA.y);\r\n ctx.lineTo(pointB.x, pointB.y);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n this.renderLineOverlay = function(ctx) {\r\n lineLength.render(ctx, self);\r\n };\r\n\r\n const highLightBorder = (color) => {\r\n if (!self.from.angleIsChanged && !self.to.angleIsChanged) {\r\n let [fromPointWithIndent, toPointWithIndent] = this.getLinePointsWithoutCorners(),\r\n renderFrom = getPointField(fromPointWithIndent.x, fromPointWithIndent.y, this),\r\n renderTo = getPointField(toPointWithIndent.x, toPointWithIndent.y, this);\r\n //\r\n // let [smallestLinePoint, biggestLinePoint, to, from] = self.getSmallestAndBiggestPointWithCorners(),\r\n // renderFrom1 = self.calculateRenderPosition(from),\r\n // renderTo1 = self.calculateRenderPosition(to);\r\n //\r\n // void smallestLinePoint;\r\n // void biggestLinePoint;\r\n // console.log(\"renderFrom\", renderFrom);\r\n // console.log(\"renderFrom1\", renderFrom1);\r\n //\r\n // console.log(\"renderTo\", renderTo);\r\n // console.log(\"renderTo1\", renderTo1);\r\n //\r\n // debugger // eslint-disable-line no-debugger\r\n self.ctx.beginPath();\r\n self.ctx.moveTo(renderFrom.x, renderFrom.y);\r\n if (state.withBumpout) {\r\n drawBumpoutLine(self.ctx);\r\n }\r\n self.ctx.lineTo(renderTo.x, renderTo.y);\r\n self.ctx.lineWidth = 4;\r\n self.ctx.strokeStyle = color;\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n\r\n /*var lineField = getLineField();\r\n var field = lineField.points;\r\n self.from.render(self.ctx);\r\n\r\n self.ctx.save();\r\n self.ctx.beginPath();\r\n self.ctx.moveTo(field[0].x, field[0].y);\r\n for(var i = 1; i < field.length; i++) {\r\n var p = field[i];\r\n var x = p.x, y = p.y;\r\n self.ctx.lineTo(x, y);\r\n }\r\n self.ctx.closePath();\r\n self.ctx.fillStyle = 'rgba(159,197,34,0.47)';\r\n self.ctx.fill();\r\n self.ctx.restore();*/ // this is old hovering, m.b. would be needed for tests\r\n }\r\n }\r\n\r\n function drawBumpoutLine(ctx) {\r\n var bumpoutPoints = self.bumpoutOverlay.getBumpoutPoints(),\r\n point1 = self.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = self.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = self.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = self.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n ctx.lineTo(point1.x, point1.y);\r\n ctx.lineTo(point2.x, point2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n }\r\n\r\n const drawResizeCursor = () => {\r\n var\r\n renderFrom = self.calculateRenderPosition(self.from),\r\n renderTo = self.calculateRenderPosition(self.to);\r\n var o = getLineOrientation(this.from, this.to);\r\n const size = +self.tutorialImage.dataset.size;\r\n if (o === orientation.VERTICAL) {\r\n self.ctx.drawImage(self.tutorialImage, 0, 0, size, size, renderFrom.x - size/2, renderFrom.y - (renderFrom.y - renderTo.y)/2 - size/2, size, size);\r\n } else if (o === orientation.HORIZONTAL) {\r\n self.ctx.drawImage(self.tutorialImage, 0, 0, size, size, renderFrom.x - (renderFrom.x - renderTo.x)/2 - size/2, renderFrom.y - size/2, size, size);\r\n }\r\n }\r\n\r\n this.setLinePoints = () => {\r\n let renderFrom = self.calculateRenderPosition(self.from),\r\n renderTo = self.calculateRenderPosition(self.to),\r\n marginFrom = 0,\r\n marginTo = 0,\r\n //len = 0,\r\n afterIntersectionMargin = 9;\r\n const prevLine = parent.getPrevLine(self);\r\n const nextLine = parent.getNextLine(self);\r\n lineDirection = parent.getAngleDirection(self);\r\n\r\n if (this.from.arcLength > 0) {\r\n const prevLineRenderFrom = prevLine.calculateRenderPosition(prevLine.from);\r\n const angle = getAngleBetween3Points(prevLineRenderFrom, renderFrom, renderTo);\r\n const radiusMultiplier = self.from.arcLength * config.scale;\r\n marginFrom = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2))) ;\r\n\r\n // console.clear();\r\n // console.log(\"self.from.arcLength\", self.from.arcLength);\r\n // console.log(\"radiusMultiplier\", radiusMultiplier);\r\n // console.log(\"marginFrom\", marginFrom);\r\n // console.log(\"angle\", angle);\r\n // console.log(\"getTanDeg(Math.round(angle / 2))\", getTanDeg(Math.round(angle / 2)));\r\n // console.log(\"marginFrom < radiusMultiplier\", marginFrom < radiusMultiplier);\r\n } else if (this.from.angle > 0) {\r\n marginFrom = self.from.angle * config.scale / 1.48 + design.outlineMargin; // +design.outlineMargin is to prevent overlapping\r\n }\r\n\r\n if (this.to.arcLength > 0) {\r\n const nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to);\r\n const angle = getAngleBetween3Points(renderFrom, renderTo, nextLineRenderTo);\r\n const radiusMultiplier = this.to.arcLength * config.scale;\r\n marginTo = Math.abs(radiusMultiplier / getTanDeg(Math.round(angle / 2)));\r\n // console.clear();\r\n // console.log(\"self.to.arcLength\", self.to.arcLength);\r\n // console.log(\"radiusMultiplier\", radiusMultiplier);\r\n // console.log(\"marginTo\", marginTo);\r\n // console.log(\"angle\", angle);\r\n // console.log(\"getTanDeg(Math.round(angle / 2))\", getTanDeg(Math.round(angle / 2)));\r\n // console.log(\"marginFrom < radiusMultiplier\", marginTo < radiusMultiplier);\r\n } else if (this.to.angle > 0) {\r\n marginTo = self.to.angle * config.scale / 1.48; // not sure why 1.48\r\n }\r\n\r\n self.drawLineFrom = self.drawLineFrom || null;\r\n self.drawLineTo = self.drawLineTo || null;\r\n if (state.withBumpout) {\r\n var bumpoutPoints = self.bumpoutOverlay.getBumpoutPoints(),\r\n point1 = self.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = self.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = self.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = self.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n self.drawLineBumpoutPoints = self.drawLineBumpoutPoints || null;\r\n }\r\n\r\n //let prevParallelLine, nextParallelLine, rotateAnglePart, rotatedAngleValue;\r\n\r\n\r\n if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n //nextLineDirection = parent.getAngleDirection(nextLine);\r\n //prevLineDirection = parent.getAngleDirection(prevLine);\r\n // prevParallelLine = parent.getPrevLine(prevLine);\r\n // nextParallelLine = parent.getNextLine(nextLine);\r\n // rotateAnglePart = self.from.rotateAnglePart;\r\n // rotatedAngleValue = self.from.rotateAnglePart ? self.from.rotateAnglePart.rotatedAngleValue : 0;\r\n }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n if (lineDirection.newDirection === 'east') {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'south') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'north') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x + marginFrom, y: renderFrom.y - 9};\r\n self.drawLineTo = {x: renderTo.x - marginTo, y: renderTo.y - 9};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x - 9, y: renderTo.y - 9},\r\n point2: {x: point2.x - 9, y: point2.y - 9},\r\n point3: {x: point3.x + 9, y: point3.y - 9},\r\n point4: {x: point4.x + 9, y: point4.y - 9},\r\n } : {\r\n point1: {x: point1.x + 9, y: renderTo.y - 9},\r\n point2: {x: point2.x + 9, y: point2.y - 9},\r\n point3: {x: point3.x - 9, y: point3.y - 9},\r\n point4: {x: point4.x - 9, y: point4.y - 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x + afterIntersectionMargin, y: self.drawLineFrom.y};\r\n self.drawLineTo = {x: self.drawLineTo.x - afterIntersectionMargin, y: self.drawLineTo.y};\r\n } else if (lineDirection.newDirection === \"west\") {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'north') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'south') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x - marginFrom, y: renderFrom.y + 9};\r\n self.drawLineTo = {x: renderTo.x + 1 + marginTo, y: renderTo.y + 9};\r\n\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x + 9, y: renderTo.y + 9},\r\n point2: {x: point2.x + 9, y: point2.y + 9},\r\n point3: {x: point3.x - 9, y: point3.y + 9},\r\n point4: {x: point4.x - 9, y: point4.y + 9},\r\n } : {\r\n point1: {x: point1.x - 9, y: renderTo.y + 9},\r\n point2: {x: point2.x - 9, y: point2.y + 9},\r\n point3: {x: point3.x + 9, y: point3.y + 9},\r\n point4: {x: point4.x + 9, y: point4.y + 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x - afterIntersectionMargin, y: self.drawLineFrom.y};\r\n self.drawLineTo = {x: self.drawLineTo.x + afterIntersectionMargin, y: self.drawLineTo.y};\r\n }\r\n break;\r\n case \"vertical\":\r\n if (lineDirection.newDirection === 'south') {\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'west') ? marginFrom + 18 : marginFrom;\r\n marginTo = (nextLine.getLineDirection().newDirection === 'east') ? marginTo + 18 : marginTo;\r\n self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y + marginFrom};\r\n self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y - marginTo};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x + 9, y: point1.y - 9},\r\n point2: {x: point2.x + 9, y: point2.y - 9},\r\n point3: {x: point3.x + 9, y: point3.y + 9},\r\n point4: {x: point4.x + 9, y: point4.y + 9},\r\n } : {\r\n point1: {x: point1.x + 9, y: point1.y + 9},\r\n point2: {x: point2.x + 9, y: point2.y + 9},\r\n point3: {x: point3.x + 9, y: point3.y - 9},\r\n point4: {x: point4.x + 9, y: point4.y - 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x, y: self.drawLineFrom.y + afterIntersectionMargin};\r\n self.drawLineTo = {x: self.drawLineTo.x, y: self.drawLineTo.y - afterIntersectionMargin};\r\n } else if (lineDirection.newDirection === 'north') {\r\n marginTo = (nextLine.getLineDirection().newDirection === 'west') ? marginTo + 18 : marginTo;\r\n marginFrom = (prevLine.getLineDirection().newDirection === 'east') ? marginFrom + 18 : marginFrom;\r\n self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y - marginFrom};\r\n self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y + marginTo};\r\n if (state.withBumpout) {\r\n self.drawLineBumpoutPoints = this.bumpoutOverlay.bumpoutInOrOut() === 'out' ?\r\n {\r\n point1: {x: point1.x - 9, y: point1.y + 9},\r\n point2: {x: point2.x - 9, y: point2.y + 9},\r\n point3: {x: point3.x - 9, y: point3.y - 9},\r\n point4: {x: point4.x - 9, y: point4.y - 9},\r\n } : {\r\n point1: {x: point1.x - 9, y: point1.y - 9},\r\n point2: {x: point2.x - 9, y: point2.y - 9},\r\n point3: {x: point3.x - 9, y: point3.y + 9},\r\n point4: {x: point4.x - 9, y: point4.y + 9},\r\n }\r\n }\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n self.drawLineFrom = {x: self.drawLineFrom.x, y: self.drawLineFrom.y - afterIntersectionMargin};\r\n self.drawLineTo = {x: self.drawLineTo.x, y: self.drawLineTo.y + afterIntersectionMargin};\r\n }\r\n break;\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\":\r\n default: {\r\n let distanceFromLine = 9;\r\n if (marginFrom) {\r\n const prevLineFrom = this.calculateRenderPosition(prevLine.from);\r\n if (isInnerCorner(parent, renderFrom, renderTo, prevLineFrom)) {\r\n marginFrom = marginFrom + 8;\r\n }\r\n renderFrom = getPointOnTheLine(renderFrom, renderTo, -marginFrom);\r\n }\r\n if (marginTo) {\r\n const nextLineTo = this.calculateRenderPosition(nextLine.to);\r\n if (isInnerCorner(parent, renderFrom, renderTo, nextLineTo)) {\r\n marginTo = marginTo + 8;\r\n }\r\n renderTo = getPointOnTheLine(renderTo, renderFrom, -marginTo);\r\n }\r\n\r\n [this.drawLineFrom, this.drawLineTo] = getParallelPoints(renderTo, renderFrom, distanceFromLine);\r\n setPointsOutlineIntersection(prevLine, nextLine);\r\n }\r\n break;\r\n// case \"SOUTHEAST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(self.calculateRenderPosition(nextLine.from), self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from))\r\n// } else {\r\n// [this.drawLineFrom, this.drawLineTo] = getParallelPoints(renderTo, renderFrom, 9);\r\n//\r\n// RenderFigures.renderCircle(this.drawLineFrom, 12,1, '#63b141');\r\n// RenderFigures.renderCircle(this.drawLineTo, 10, 1);\r\n//\r\n// debugger // eslint-disable-line no-debugger\r\n//\r\n// // self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y - 9};\r\n// // self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y - 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"NORTHEAST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y - 9};\r\n// self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y - 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"SOUTHWEST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// if (rotatedAngleValue < 90 && rotateAnglePart && rotateAnglePart.shapeType !== \"wideangle\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// }\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// self.drawLineFrom = {x: renderFrom.x + 9, y: renderFrom.y + 9};\r\n// self.drawLineTo = {x: renderTo.x + 9, y: renderTo.y + 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n// case \"NORTHWEST\": {\r\n// if (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(prevParallelLine.from));\r\n// } else if (rotateAnglePart && rotateAnglePart.angleDirection === \"left\") {\r\n// if (rotatedAngleValue < 90) {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// } else {\r\n// self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(nextParallelLine.to));\r\n// self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n// }\r\n// } else {\r\n// // self.drawLineFrom = getParralelPoint(renderFrom, self.calculateRenderPosition(prevLine.from));\r\n// // self.drawLineTo = getParralelPoint(renderTo, self.calculateRenderPosition(nextLine.to));\r\n//\r\n// self.drawLineFrom = {x: renderFrom.x - 9, y: renderFrom.y + 9};\r\n// self.drawLineTo = {x: renderTo.x - 9, y: renderTo.y + 9};\r\n// setPointsOutlineIntersection(prevLine, nextLine);\r\n// }\r\n// if (marginFrom) {\r\n// self.drawLineFrom = getPointBetweenPoints(self.drawLineFrom, self.drawLineTo, marginFrom)\r\n// }\r\n// if (marginTo) {\r\n// self.drawLineTo = getPointBetweenPoints(self.drawLineTo, self.drawLineFrom, marginTo)\r\n// }\r\n// break;\r\n// }\r\n //default:\r\n }\r\n };\r\n const setPointsOutlineIntersection = (prevLine, nextLine) => {\r\n const fromBorderIntersectionPoint = getBorderFromIntersection(prevLine);\r\n const fromOutlineIntersectionPoint = getOutlineFromIntersection(prevLine);\r\n if ((fromBorderIntersectionPoint || fromOutlineIntersectionPoint)\r\n && !(this.from.isWithAngle())\r\n && !(this.from.isWithCorner())\r\n ) {\r\n let intersectionPoints = [];\r\n if (fromBorderIntersectionPoint) intersectionPoints.push(fromBorderIntersectionPoint);\r\n if (fromOutlineIntersectionPoint) intersectionPoints.push(fromOutlineIntersectionPoint);\r\n const closestIntersectionPoint = getClosestPoint(self.drawLineTo, intersectionPoints);\r\n\r\n // render dev circles intersection\r\n // if (lineDirection.orientation === \"NORTHWEST\") {\r\n // if (fromBorderIntersectionPoint) RenderFigures.renderCircle(fromBorderIntersectionPoint, 10,1, '#e5bf37')\r\n // if (fromOutlineIntersectionPoint) RenderFigures.renderCircle(fromOutlineIntersectionPoint, 10,1, '#de5f5f')\r\n // RenderFigures.renderCircle(closestIntersectionPoint, 20,1, '#63b141');\r\n // RenderFigures.renderCircle(self.drawLineTo, 25, 1);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n if (closestIntersectionPoint.x && closestIntersectionPoint.y) {\r\n this.drawLineFrom = {x: closestIntersectionPoint.x, y: closestIntersectionPoint.y};\r\n }\r\n }\r\n\r\n const toBorderIntersectionPoint = getBorderToIntersection(nextLine);\r\n const toOutlineIntersectionPoint = getOutlineToIntersection(nextLine);\r\n\r\n if ((toBorderIntersectionPoint || toOutlineIntersectionPoint)\r\n && !(this.to.isWithAngle())\r\n && !(this.to.isWithCorner())\r\n ) {\r\n let intersectionPoints = [];\r\n if (toBorderIntersectionPoint) { intersectionPoints.push(toBorderIntersectionPoint)}\r\n if (toOutlineIntersectionPoint) { intersectionPoints.push(toOutlineIntersectionPoint)}\r\n const closestIntersectionPoint = getClosestPoint(self.drawLineFrom, intersectionPoints);\r\n void RenderFigures.renderCircle;\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // if (toBorderIntersectionPoint) RenderFigures.renderCircle(toBorderIntersectionPoint, 10,1, '#e5bf37')\r\n // if (toOutlineIntersectionPoint) RenderFigures.renderCircle(toOutlineIntersectionPoint, 15,1, '#de5f5f')\r\n // RenderFigures.renderCircle(closestIntersectionPoint, 20, 1, '#63b141');\r\n // RenderFigures.renderCircle(self.drawLineFrom, 25);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n if (closestIntersectionPoint.x && closestIntersectionPoint.y) {\r\n this.drawLineTo = {x: closestIntersectionPoint.x, y: closestIntersectionPoint.y};\r\n }\r\n }\r\n\r\n // todo bumpout\r\n // self.drawLineBumpoutPoints = state.withBumpout ?\r\n // {\r\n // point1: {x: point1.x + 9, y: point1.y - 9},\r\n // point2: {x: point2.x + 9, y: point2.y - 9},\r\n // point3: {x: point3.x + 9, y: point3.y + 9},\r\n // point4: {x: point4.x + 9, y: point4.y + 9},\r\n // } : null;\r\n }\r\n // const getOutlineIntersectionPointWithPrevLine = () => {\r\n // const prevLine = parent.getPrevLine(this);\r\n // if (!prevLine.drawLineTo) {\r\n // debugger // eslint-disable-line no-debugger\r\n // prevLine.setLinePoints();\r\n // }\r\n //\r\n // const pointOnTheLine = getPointOnTheLine(this.drawLineTo, this.drawLineFrom, 300);\r\n // const pointOnThePrevLine = getPointOnTheLine(prevLine.drawLineFrom, prevLine.drawLineTo, 300);\r\n // console.log(\"this\", this);\r\n // debugger // eslint-disable-line no-debugger\r\n // return getIntersectCords(\r\n // this.drawLineFrom.x,\r\n // this.drawLineFrom.y,\r\n // pointOnTheLine.x,\r\n // pointOnTheLine.y,\r\n // pointOnThePrevLine.x,\r\n // pointOnThePrevLine.y,\r\n // prevLine.drawLineFrom.x,\r\n // prevLine.drawLineFrom.y,\r\n // );\r\n // }\r\n\r\n const getOutlineIntersectionPointWithNextTLine = () => {\r\n const nextLine = parent.getNextLine(this);\r\n nextLine.setLinePoints();\r\n const pointOnTheLine = getPointOnTheLine(this.drawLineTo, this.drawLineFrom, 1000);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, 1000);\r\n return getIntersectCords(\r\n this.drawLineFrom.x,\r\n this.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLine.drawLineFrom.x,\r\n nextLine.drawLineFrom.y,\r\n );\r\n }\r\n const getBorderToIntersection = (nextLine) => {\r\n let intersectionCords = false\r\n if (nextLine.drawLineTo) {\r\n const nextLineToPointField = nextLine.to.getPointField(false);\r\n const nextLineFromPointField = nextLine.from.getPointField(false);\r\n const pointOnTheLine = getPointOnTheLine(self.drawLineTo, self.drawLineFrom,25);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLineFromPointField, nextLineToPointField, 25);\r\n\r\n intersectionCords = getIntersectCords(\r\n self.drawLineFrom.x,\r\n self.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLineToPointField.x,\r\n nextLineToPointField.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLine\", pointOnTheLine);\r\n // console.log(\" self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\" self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnTheNextLine\", pointOnTheNextLine);\r\n // console.log(\"nextLine.drawLineFrom\", nextLineFromPointField);\r\n // console.log(\" nextLine.drawLineTo\", nextLineToPointField);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n\r\n return intersectionCords\r\n }\r\n\r\n const getBorderFromIntersection = (prevLine) => {\r\n let intersectionCords = false\r\n\r\n if (prevLine.drawLineFrom) {\r\n const prevLineToPointField = prevLine.to.getPointField(false);\r\n const prevLineFromPointField = prevLine.from.getPointField(false);\r\n const pointOnTheLineBeforeFrom = getPointOnTheLine(this.drawLineFrom, this.drawLineTo,25);\r\n const pointOnThePrevLine = getPointOnTheLine(prevLineToPointField, prevLineFromPointField, 25);\r\n intersectionCords = getIntersectCords(\r\n pointOnTheLineBeforeFrom.x,\r\n pointOnTheLineBeforeFrom.y,\r\n this.drawLineTo.x,\r\n this.drawLineTo.y,\r\n prevLineFromPointField.x,\r\n prevLineFromPointField.y,\r\n pointOnThePrevLine.x,\r\n pointOnThePrevLine.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLineBeforeFrom\", pointOnTheLineBeforeFrom);\r\n // console.log(\"self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\"self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnThePrevLine\", pointOnThePrevLine);\r\n // console.log(\"prevLine.drawLineFrom\", prevLine.drawLineFrom);\r\n // console.log(\"prevLine.drawLineTo\", prevLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n\r\n return intersectionCords\r\n }\r\n\r\n function getOutlineFromIntersection (prevLine) {\r\n let intersectionCords = false\r\n\r\n if (prevLine.drawLineFrom) {\r\n const pointOnTheLineBeforeFrom = getPointOnTheLine(self.drawLineFrom, self.drawLineTo,15);\r\n const pointOnThePrevLine = getPointOnTheLine(prevLine.drawLineTo, prevLine.drawLineFrom, 15);\r\n intersectionCords = getIntersectCords(\r\n pointOnTheLineBeforeFrom.x,\r\n pointOnTheLineBeforeFrom.y,\r\n self.drawLineTo.x,\r\n self.drawLineTo.y,\r\n prevLine.drawLineFrom.x,\r\n prevLine.drawLineFrom.y,\r\n pointOnThePrevLine.x,\r\n pointOnThePrevLine.y,\r\n );\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLineBeforeFrom\", pointOnTheLineBeforeFrom);\r\n // console.log(\"self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\"self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnThePrevLine\", pointOnThePrevLine);\r\n // console.log(\"prevLine.drawLineFrom\", prevLine.drawLineFrom);\r\n // console.log(\"prevLine.drawLineTo\", prevLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n return intersectionCords\r\n }\r\n\r\n function getOutlineToIntersection (nextLine) {\r\n let intersectionCords = false\r\n if (nextLine.drawLineTo) {\r\n const pointOnTheLine = getPointOnTheLine(self.drawLineTo, self.drawLineFrom,12);\r\n const pointOnTheNextLine = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, 12);\r\n intersectionCords = getIntersectCords(\r\n self.drawLineFrom.x,\r\n self.drawLineFrom.y,\r\n pointOnTheLine.x,\r\n pointOnTheLine.y,\r\n pointOnTheNextLine.x,\r\n pointOnTheNextLine.y,\r\n nextLine.drawLineTo.x,\r\n nextLine.drawLineTo.y,\r\n );\r\n\r\n // if (lineDirection.orientation === \"SOUTHWEST\") {\r\n // console.log(\"--------\");\r\n // console.log(\"pointOnTheLine\", pointOnTheLine);\r\n // console.log(\" self.drawLineFrom\", self.drawLineFrom);\r\n // console.log(\" self.drawLineTo\", self.drawLineTo);\r\n // console.log(\"--\");\r\n // console.log(\"pointOnTheNextLine\", pointOnTheNextLine);\r\n // console.log(\"nextLine.drawLineFrom\", nextLine.drawLineFrom);\r\n // console.log(\"nextLine.drawLineTo\", nextLine.drawLineTo);\r\n // console.log(\"intersectionCords\", intersectionCords);\r\n // debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n return intersectionCords\r\n }\r\n\r\n /**\r\n * Draw grey outline\r\n */\r\n const drawLine = (color, border) => {\r\n void border;\r\n self.setLinePoints();// dev remove to hide gray outline border\r\n self.ctx.beginPath();\r\n if (self.drawLineFrom && self.drawLineTo) {\r\n if (state.withBumpout) {\r\n self.ctx.moveTo(self.drawLineFrom.x, self.drawLineFrom.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point1.x, self.drawLineBumpoutPoints.point1.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point1.x, self.drawLineBumpoutPoints.point1.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point2.x, self.drawLineBumpoutPoints.point2.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point2.x, self.drawLineBumpoutPoints.point2.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point3.x, self.drawLineBumpoutPoints.point3.y);\r\n\r\n self.ctx.moveTo(self.drawLineBumpoutPoints.point3.x, self.drawLineBumpoutPoints.point3.y);\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point4.x, self.drawLineBumpoutPoints.point4.y);\r\n\r\n self.ctx.lineTo(self.drawLineBumpoutPoints.point4.x, self.drawLineBumpoutPoints.point4.y);\r\n self.ctx.lineTo(self.drawLineTo.x, self.drawLineTo.y);\r\n } else {\r\n self.ctx.moveTo(self.drawLineFrom.x, self.drawLineFrom.y);\r\n self.ctx.lineTo(self.drawLineTo.x, self.drawLineTo.y);\r\n }\r\n }\r\n self.ctx.lineWidth = 8;\r\n self.ctx.strokeStyle = color;\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n }\r\n\r\n const drawCorner = (color) => {\r\n self.ctx.beginPath();\r\n self.ctx.lineWidth = 8;\r\n self.ctx.strokeStyle = color;\r\n\r\n let\r\n renderTo = self.calculateRenderPosition(self.to),\r\n renderFrom = self.calculateRenderPosition(self.from),\r\n //radius = Math.sqrt(Math.pow(self.to.arcLength, 2) / 2) * config.scale + 18,\r\n radius = self.to.arcLength * config.scale,\r\n nextLine = parent.getNextLine(self);\r\n\r\n lineDirection = parent.getAngleDirection(self);\r\n // var midHyp = getMidPoint(ap.line1, ap.line2);\r\n if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n //prevLine = parent.getPrevLine(self);\r\n //nextLine = parent.getNextLine(self);\r\n //prevParallelLine = parent.getPrevLine(prevLine);\r\n }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n const interSectionPoint = getOutlineIntersectionPointWithNextTLine();\r\n //v1\r\n const nextLineTo = this.calculateRenderPosition(nextLine.to);\r\n if (isInnerCorner(parent, renderFrom, renderTo, nextLineTo)) {\r\n radius = radius - 18\r\n if (radius < -8) { // set minimum radius to display\r\n radius = -8\r\n }\r\n }\r\n this.ctx.moveTo(this.drawLineTo.x, this.drawLineTo.y);\r\n this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y, radius + 9);\r\n\r\n this.ctx.moveTo(nextLine.drawLineFrom.x, nextLine.drawLineFrom.y);\r\n this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, this.drawLineTo.x, this.drawLineTo.y, radius + 9);\r\n //v2\r\n // this.ctx.moveTo(this.drawLineFrom.x, this.drawLineFrom.y);\r\n // this.ctx.arcTo(interSectionPoint.x, interSectionPoint.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y, radius + 9);\r\n // this.ctx.stroke();\r\n // this.ctx.closePath();\r\n //\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = design.aroundLineColor;\r\n // this.ctx.moveTo(this.drawLineFrom.x, this.drawLineFrom.y);\r\n // this.ctx.lineTo(this.drawLineTo.x, this.drawLineTo.y);\r\n\r\n //v3\r\n //this.ctx.moveTo(this.drawLineTo.x, this.drawLineTo.y);\r\n //this.ctx.quadraticCurveTo(renderTo.x, renderTo.y, nextLine.drawLineFrom.x, nextLine.drawLineFrom.y);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n self.ctx.stroke();\r\n self.ctx.closePath();\r\n }\r\n\r\n const drawAngle = (color) => {\r\n let strokeStyle;\r\n\r\n this.ctx.beginPath();\r\n this.ctx.lineWidth = 8;\r\n\r\n this.ctx.strokeStyle = design.aroundLineColor;\r\n this.ctx.lineCap = 'square';\r\n //this.ctx.lineCap = 'round';\r\n\r\n if (this.lineCorner.state.isHovering && EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && (this.lineCorner.state.withEdge || this.lineCorner.state.withBacksplash || this.lineCorner.state.withWall || (this.lineCorner.state.attachedItems && this.lineCorner.state.attachedItems.isWithEndCap))) {\r\n strokeStyle = 'rgba(208,1,27,0.5)';\r\n } else if (this.lineCorner.state.withEdge) {\r\n strokeStyle = Color.getOutlineStrokeStyle('edge');\r\n } else if (this.lineCorner.state.withBacksplash) {\r\n strokeStyle = Color.getOutlineStrokeStyle('backsplash');\r\n } else if (this.lineCorner.state.attachedItems && this.lineCorner.state.attachedItems.isWithEndCap) {\r\n strokeStyle = Color.getOutlineStrokeStyle(RESOURCE_ATTACHED_TO_TYPE.end_cap);\r\n } else if (this.lineCorner.state.withWall) {\r\n strokeStyle = Color.getOutlineStrokeStyle('wall');\r\n } else if (config.highlight.lines && this.lineCorner.state.isHovering) {\r\n strokeStyle = Color.getOutlineHoverStrokeStyle();\r\n this.ctx.strokeStyle = strokeStyle;\r\n } else if (config.highlight.lines && config.highlight.demoShow && (config.highlight.id !== state.withId)) {\r\n strokeStyle = Color.getOutlineHoverStrokeStyle();\r\n }\r\n\r\n let angleLinePoints = this.lineCorner.getAnglePoints();\r\n\r\n this.ctx.strokeStyle = strokeStyle ? strokeStyle : color;\r\n this.ctx.moveTo(angleLinePoints.cord1.x, angleLinePoints.cord1.y);\r\n this.ctx.lineTo(angleLinePoints.cord2.x, angleLinePoints.cord2.y);\r\n this.ctx.lineTo(angleLinePoints.cord3.x, angleLinePoints.cord3.y);\r\n this.ctx.lineTo(angleLinePoints.cord4.x, angleLinePoints.cord4.y);\r\n\r\n this.ctx.moveTo(angleLinePoints.cord4.x, angleLinePoints.cord4.y);\r\n\r\n //this.ctx.moveTo(angleLinePoints.cord2.x, angleLinePoints.cord2.y);\r\n //this.ctx.lineTo(angleLinePoints.cord3.x, angleLinePoints.cord3.y);\r\n this.ctx.stroke();\r\n this.ctx.closePath();\r\n\r\n //purple line v2\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = strokeStyle ? strokeStyle : color;\r\n // this.ctx.moveTo(angleLinePoints.cordCornerFrom.x, angleLinePoints.cordCornerFrom.y);\r\n // this.ctx.lineTo(angleLinePoints.cordCornerTo.x, angleLinePoints.cordCornerTo.y);\r\n\r\n //purple line v3\r\n // this.ctx.beginPath();\r\n // this.ctx.strokeStyle = color;\r\n // this.ctx.moveTo(angleLinePoints.cordCornerFrom.x, angleLinePoints.cordCornerFrom.y);\r\n // this.ctx.lineTo(angleLinePoints.cordCornerTo.x, angleLinePoints.cordCornerTo.y);\r\n\r\n this.ctx.stroke();\r\n this.ctx.closePath();\r\n }\r\n\r\n this.get45CornerLegDistanceScaled = () => {\r\n return get45CornerLegDistanceByHypotenuse(this.to.angle || this.to.arcLength) * config.scale\r\n };\r\n\r\n this.get45CornerLegDistance = () => {\r\n return get45CornerLegDistanceByHypotenuse(this.to.angle || this.to.arcLength)\r\n };\r\n\r\n this.deleteBumpout = () => {\r\n state.withBumpout = false;\r\n this.bumpoutOverlay.destroy();\r\n this.overlay.setMidpointOffset(0, 0);\r\n let bumpoutPoints = this.bumpoutOverlay.getBumpoutPoints();\r\n for (const pointName in bumpoutPoints) {\r\n if (bumpoutPoints.hasOwnProperty(pointName)) {\r\n bumpoutPoints[pointName].destroy();\r\n }\r\n }\r\n this.bumpoutOverlay = null;\r\n };\r\n\r\n this.deleteMitered = () => {\r\n state.isWithMitered = false;\r\n this.miteredOverlay.destroy();\r\n this.miteredOverlay = null;\r\n this.overlay.setMidpointOffset(0, 0);\r\n this.createLineLength();\r\n };\r\n\r\n this.deleteUnderlayment = () => {\r\n state.isWithUnderlayment = false;\r\n this.underlaymentOverlay.destroy();\r\n this.underlaymentOverlay = null;\r\n this.overlay.setMidpointOffset(0, 0);\r\n this.createLineLength();\r\n };\r\n\r\n this.deleteWaterfallTool = () => {\r\n this.waterfallOverlay.destroy();\r\n workspaceControllers.waterfall.destroy(this.waterfallOverlay);\r\n this.waterfallOverlay = null;\r\n };\r\n\r\n this.createLineLength = () => {\r\n this.overlay = new lineLength();\r\n this.overlay.init(self);\r\n };\r\n\r\n this.deleteAttachedItem = () => {\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withBumpout = false;\r\n state.withId = null;\r\n for (const attachedItemsKey in state.attachedItems) {\r\n state.attachedItems[attachedItemsKey] = false\r\n }\r\n this.attachedShape = null;\r\n if (this.overlay) {\r\n this.overlay.removeLineText();\r\n }\r\n\r\n if (this.bumpoutOverlay) {\r\n this.deleteBumpout();\r\n }\r\n if (this.labelOverlay) {\r\n this.labelOverlay.destroy();\r\n }\r\n if (this.titleOverlay) {\r\n this.titleOverlay.destroy();\r\n }\r\n if (this.miteredOverlay) {\r\n this.deleteMitered();\r\n }\r\n if (this.underlaymentOverlay) {\r\n this.deleteUnderlayment();\r\n }\r\n if (this.waterfallOverlay) {\r\n this.deleteWaterfallTool();\r\n }\r\n sqftSlabManager.deleteSlabBacksplashByLine(this);\r\n store.dispatch(deleteResourceAttachedTo(RESOURCE_TYPE.attachedToLine, this));\r\n };\r\n\r\n this.addEdgeToLine = function(edgeName, id) {\r\n state.withEdge = true;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withId = id;\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n self.overlay.renderEdgeText(edgeName);\r\n };\r\n\r\n this.addBacksplashToLine = (backsplashName, type, featureId, backsplashHeight) => {\r\n if (type === \"wall\") {\r\n state.withWall = true;\r\n state.withBacksplash = false;\r\n } else {\r\n state.withBacksplash = true;\r\n state.withWall = false;\r\n }\r\n state.withEdge = false;\r\n state.backsplashName = backsplashName;\r\n state.backsplashType = type;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withId = featureId;\r\n this.setBacksplashHeight(backsplashHeight);\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n self.overlay.renderBacksplashText(backsplashName, type);\r\n };\r\n\r\n this.addCrownMoldingToLine = (crownMoldingName, type, id) => {\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.attachedItems.isWithCrownMolding = true;\r\n state.withId = id;\r\n //this.overlay.renderBacksplashText(crownMoldingName, type);\r\n };\r\n\r\n this.addEndCapToLine = (endCapName, type, id) => {\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n state.isWithWaterfallEdge = false;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.attachedItems.isWithEndCap = true;\r\n state.attachedItems.isWithCrownMolding = false;\r\n state.withId = id;\r\n //this.overlay.renderBacksplashText(crownMoldingName, type);\r\n };\r\n\r\n this.addBumpoutToLine = function(mousePos, pointName, id) {\r\n void mousePos;\r\n void pointName;\r\n void id;\r\n //todo allow add multiple bumpout\r\n if (!state.withBumpout) {\r\n //todo fix rotation\r\n if (self.getOrientation() === orientation.VERTICAL || self.getOrientation() === orientation.HORIZONTAL) {\r\n state.withBumpout = true;\r\n self.bumpoutOverlay = new bumpout();\r\n self.bumpoutOverlay.init(self);\r\n }\r\n }\r\n };\r\n\r\n this.addMiteredToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!state.isWithMitered) {\r\n this.deleteAttachedItem();\r\n state.isWithMitered = true;\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.init();\r\n\r\n return this.miteredOverlay;\r\n }\r\n\r\n return this.miteredOverlay\r\n };\r\n\r\n this.addUnderlaymentToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!state.isWithUnderlayment) {\r\n //todo fix rotation\r\n this.deleteAttachedItem();\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithUnderlayment = true;\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n this.underlaymentOverlay = workspace.underlaymentController.createUnderlaymentOverlay(this);\r\n this.underlaymentOverlay.init();\r\n\r\n return this.underlaymentOverlay;\r\n }\r\n }\r\n\r\n return this.underlaymentOverlay\r\n };\r\n\r\n this.addWaterfallToLine = (name = RESOURCE_ATTACHED_TO_NAME.waterfall) => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.isWithWaterfallToolEdge()) {\r\n this.deleteAttachedItem();\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithWaterfallEdge = true;\r\n state.isWithPeninsulaUnderwrapEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n this.waterfallOverlay = workspaceControllers.waterfall.createWaterfallOverlay(this);\r\n createSlabModeWaterfallShapes();\r\n this.overlay.renderWaterfallText(name, RESOURCE_ATTACHED_TO_TYPE.waterfall);\r\n\r\n return this.waterfallOverlay;\r\n }\r\n }\r\n return this.waterfallOverlay\r\n };\r\n\r\n this.addPeninsulaUnderwrapToLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.isWithPeninsulaUnderwrapEdge()) {\r\n if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n state.isWithPeninsulaUnderwrapEdge = true;\r\n state.isWithWaterfallEdge = false;\r\n state.withBacksplash = false;\r\n state.withWall = false;\r\n state.withEdge = false;\r\n this.waterfallOverlay = workspaceControllers.waterfall.createPeninsulaUnderwrapOverlay(this);\r\n createSlabModeWaterfallShapes();\r\n\r\n return this.waterfallOverlay;\r\n }\r\n }\r\n return this.waterfallOverlay\r\n };\r\n\r\n this.renderLineField = (ctx) => {\r\n\r\n this.ctx = ctx;\r\n\r\n if (config.highlight.tutorial && self.highLightedByTutorial) {\r\n drawLine('#E3E1E3');\r\n highLightBorder('#b263a8');\r\n if (self.tutorialImage) {\r\n drawResizeCursor();\r\n }\r\n } else if (config.highlight.lines && state.isHovering) {\r\n\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].active);\r\n }\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n case RESOURCE_ATTACHED_TO_TYPE.waterfall:\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n break;\r\n case 'wall':\r\n if (config.highlight.id !== state.withId) {\r\n drawLine('rgba(0,0,0,0.5)');\r\n } else {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n if (config.highlight.id !== state.withId) {\r\n drawLine(COLOR.red_transparent);\r\n } else {\r\n drawLine(COLOR.red);\r\n }\r\n break;\r\n default:\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n break;\r\n }\r\n\r\n } else if (config.highlight.lines && config.highlight.demoShow && (config.highlight.id !== state.withId)) {\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n default:\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n break;\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n case RESOURCE_ATTACHED_TO_TYPE.waterfall:\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n break;\r\n case 'wall':\r\n drawLine('rgba(0,0,0,0.5)');\r\n break;\r\n }\r\n } else if (this.blink.isHighlightedLightOn) {\r\n if (state.withEdge || this.isWithPeninsulaUnderwrapEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active_transparent);\r\n } else if (state.withBacksplash || state.withBumpout || this.isWithWaterfallToolEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary_transparent);\r\n } else if (state.withWall) {\r\n drawLine('rgba(0,0,0,0.5)');\r\n } else if (state.attachedItems && state.attachedItems.isWithEndCap) {\r\n drawLine(COLOR.red_transparent);\r\n }\r\n } else {\r\n if (workspace.getAllowEdges() && workspace.getAllowLineHighlight()) {\r\n highLightBorder('#b263a8');\r\n }\r\n\r\n if (config.workspace.debug || state.isHovering && !config.highlight.lines && workspace.getAllowEdges()) {\r\n highLightBorder('#b263a8');\r\n }\r\n\r\n const orientation = this.getLineDirection().orientation;\r\n const isBumpoutHighlighted = workspace.getAllowBumpoutEdges() && workspace.getAllowLineHighlight();\r\n const isMiteredHighlighted = workspace.getAllowMiteredEdges() && workspace.getAllowLineHighlight();\r\n if ((isBumpoutHighlighted || isMiteredHighlighted)\r\n && (orientation === \"vertical\" || orientation === \"horizontal\")\r\n ) {\r\n highLightBorder(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n\r\n if (config.workspace.debug\r\n || state.isHovering && !config.highlight.lines\r\n && (\r\n (workspace.getAllowBumpoutEdges() || workspace.getAllowMiteredEdges())\r\n && (orientation === \"vertical\" || orientation === \"horizontal\")\r\n )\r\n ) {\r\n highLightBorder(COLOR_THEMES[config.activeTheme].primary);\r\n }\r\n\r\n if (state.isHovering && EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && (state.withEdge\r\n || state.withBacksplash\r\n || (state.attachedItems && state.attachedItems.isWithEndCap)\r\n || state.withWall\r\n || this.isWithPeninsulaUnderwrapEdge()\r\n || this.isWithWaterfallToolEdge())\r\n ) {\r\n drawLine('rgba(208,1,27,0.5)');\r\n } else if (state.withEdge || this.isWithPeninsulaUnderwrapEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].active);\r\n if (self.tutorialImage) {\r\n drawResizeCursor();\r\n }\r\n } else if (state.withBacksplash) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n } else if (this.isWithWaterfallToolEdge()) {\r\n drawLine(COLOR_THEMES[config.activeTheme].primary);\r\n } else if (state.withWall) {\r\n drawLine('#000000');\r\n } else if (state.withBumpout) {\r\n drawLine('#E3E1E3'); //todo enable border\r\n } else if (state.attachedItems && state.attachedItems.isWithEndCap) {\r\n drawLine(COLOR.red);\r\n } else {\r\n drawLine('#E3E1E3');\r\n }\r\n\r\n }\r\n\r\n if (self.to.arcLength > 0) {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && !state.isHovering && self.to.isOverPointField()) {\r\n drawCorner('rgba(208,1,27,0.5)');\r\n } else {\r\n drawCorner(\"#b263a8\")\r\n }\r\n }\r\n\r\n //todo move this to lineCorner\r\n if (self.to.angle > 0) {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0\r\n && !state.isHovering\r\n && (self.to.isOverPointField() || self.lineCorner.state.isCornerLineHovering) // todo perhaps hover over Point should be removed?\r\n ) {\r\n drawAngle('rgba(208,1,27,0.5)');\r\n } else {\r\n drawAngle(\"#b263a8\")\r\n }\r\n }\r\n ctx.restore();\r\n\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\n//todo sqft-react\r\nimport EventManager from \"./../../store/sqftEventManager\";\r\nimport PointRadius from \"./overlays/pointRadius\";\r\nimport workspace from \"../workspace\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\n// import Radius from \"../controls/radius\";\r\nimport FitSize from \"../../../../helpers/sqftFitSize\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport store from \"../../../../../../store\";\r\nimport sqftShape from \"./sqftShape\";\r\nimport line from \"./line\";\r\nimport {\r\n getMidPoint,\r\n getPointOnTheLine,\r\n isDisabledInPopupWithParents\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport {isDisabledInPopupShouldBeHidden, SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\nimport MiteredOverlay from \"./overlays/mitered\";\r\nimport {getAngleBetween3Points} from \"../../../../helpers/shapeHelper\";\r\n//import MiteredOverlay from \"../overlays/mitered\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {isSFTCabinetsGroup} from \"../../../../helpers/sqftNavigationHelper\";\r\nimport {renderResetSeamPopup, shouldResetSlabModePopupOnPointMoveBeDisplayed} from \"../../canvasPopup/resetSeam\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\n\r\nexport const allowedNavItemsForMovingPoint = [\r\n SIDEBAR_NAVIGATION_BUTTONS.freeDraw,\r\n SIDEBAR_NAVIGATION_BUTTONS.resize\r\n];\r\n\r\nexport default function (x, y, direction, corner, canBeMoved = true) {\r\n //private variables\r\n let self = this,\r\n parent = null,\r\n state = {\r\n isMovable: false,\r\n mouseDown: false,\r\n mouseDownPosition: {},\r\n selected: false,\r\n isHovering: false,\r\n mousePos: {},\r\n pointWasMoved: false,\r\n canBeMoved,\r\n miteredFeatureId: null,\r\n },\r\n fillStyle = \"#E3E1E3\",\r\n fillStyleEdge = COLOR_THEMES[sqftConfig.activeTheme].active,\r\n fillStyleWhite = \"#FFFFFF\",\r\n fillStyleBlack = \"#4a4a4a\",\r\n fillStyleDelete = \"#e77f8d\", //\"rgba(253,2,33, 0.5)\",\r\n fillStyleBlue = COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n //highlightFillStyle = \"rgba(0,255,0,0.5)\",\r\n //hoverFillStyle = \"#D0011B\",\r\n radiusFillStyle = \"#b263a8\",\r\n translateX,\r\n translateY,\r\n pointRadiusOverlay = null;\r\n //public properties\r\n this.id = uuid();\r\n this.pos = {x, y};\r\n this.posSlab = {\r\n x: x ? JSON.parse(JSON.stringify(x)) : 0,\r\n y: y ? JSON.parse(JSON.stringify(y)) : 0\r\n };\r\n Object.defineProperty(this, \"x\", {\r\n set: (value) => {\r\n setPointWasChangedInRegularMode();\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.x = parseFloat(value) : this.pos.x = parseFloat(value);\r\n },\r\n get: () => {\r\n if (this.pos === undefined) {\r\n console.log(\"point pos not defined\");\r\n return 0;\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.x : this.pos.x;\r\n }\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n set: (value) => {\r\n setPointWasChangedInRegularMode();\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.y = value : this.pos.y = value;\r\n },\r\n get: () => {\r\n if (this.pos === undefined) {\r\n console.log(\"point pos not defined\");\r\n return 0;\r\n }\r\n return SqftStore.isSlabMode() ? this.posSlab.y : this.pos.y;\r\n }\r\n });\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.featureId = null;\r\n this.pointDirection = direction;\r\n this.corner = corner;\r\n this.renderAngleCircle = false;\r\n this.renderAngleArc = false;\r\n this.angleIsChanged = false;\r\n this.layout = null;\r\n this.rotateAnglePart = null; // link to the whole rotation part\r\n this.exportAndImportProperties = [\r\n \"id\", \"x\", \"y\", \"pos\", \"posSlab\", \"arcLength\", \"angle\", \"pointDirection\", \"corner\", \"rotateAnglePart\", \"angleIsChanged\",\r\n \"renderAngleCircle\", \"renderAngleArc\", \"featureId\"\r\n ];\r\n this.isHidden = () => {\r\n const reduxState = store.getState();\r\n let isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n const shape = this.getGrandParent();\r\n\r\n return !!(\r\n isShowSlabTool\r\n || (shape && shape.shapeCabinet)\r\n || (shape && shape.shapeSpacer)\r\n );\r\n }\r\n this.setPos = (value) => {\r\n this.pos = value\r\n }\r\n this.setPosSlab = (value) => {\r\n this.posSlab = value\r\n }\r\n this.isWithAngle = () => {\r\n return this.angle > 0\r\n }\r\n this.isWithCorner = () => {\r\n return this.arcLength > 0\r\n }\r\n //private functions\r\n // var snappedPos = function(pos) {\r\n // var scaledGridSize = sqftConfig.workspace.getScaledGridSize(),\r\n // newX = Math.round(self.x / scaledGridSize) * scaledGridSize,\r\n // newY = Math.round(self.y / scaledGridSize) * scaledGridSize;\r\n //\r\n // return {\r\n // x: newX,\r\n // y: newY\r\n // };\r\n // };\r\n this.getMiteredFeatureId = () => {\r\n return state.miteredFeatureId\r\n }\r\n this.setMiteredFeatureId = (id) => {\r\n state.miteredFeatureId = id\r\n }\r\n const setPointWasChangedInRegularMode = () => {\r\n const regularMode = SqftStore.isRegularMode();\r\n regularMode ? setPointWasChanged() : null;\r\n }\r\n const setPointWasChanged = () => {\r\n let parent = this.getParent();\r\n if (parent && parent.hasOwnProperty('getParent')) {\r\n let shape = parent.getParent();\r\n if (shape instanceof line) {\r\n shape.getParent().setIsPointsChanged(true);\r\n } else if (shape instanceof sqftShape) {\r\n shape.setIsPointsChanged(true);\r\n }\r\n }\r\n }\r\n const setPointWasMoved = () => {\r\n let parent = this.getParent();\r\n if (parent && parent.hasOwnProperty('getParent')) {\r\n let shape = parent.getParent();\r\n if (shape instanceof line) {\r\n shape.getParent().isPointsMoved = true;\r\n } else if (shape instanceof sqftShape) {\r\n shape.isPointsMoved = true;\r\n }\r\n }\r\n }\r\n const isMovable = () => {\r\n let shape = parent.getParent();\r\n\r\n return (state.isMovable || shape.getState().isPointsMovable);\r\n }\r\n\r\n function setTranslates() {\r\n switch (self.pointDirection) {\r\n case \"lefttop\":\r\n translateX = -10;\r\n translateY = -9;\r\n break;\r\n case \"righttop\":\r\n translateX = 9;\r\n translateY = -9;\r\n break;\r\n case \"rightbottom\":\r\n translateX = 9;\r\n translateY = 10;\r\n break;\r\n case \"leftbottom\":\r\n translateX = -10;\r\n translateY = 10;\r\n break;\r\n default:\r\n translateX = 0;\r\n translateY = 0;\r\n break;\r\n }\r\n }\r\n\r\n const onMouseMove = (mousePos, e) => {\r\n state.mousePos = mousePos;\r\n state.isHovering = this.isOverPointField();\r\n if (e.terminate) {\r\n state.isHovering = false;\r\n return false;\r\n }\r\n\r\n if (state.mouseDown) {\r\n EventManager.setCursor('move', this, true);\r\n if (isMovable()) {\r\n if (shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent());\r\n } else {\r\n this.movePosition(mousePos);\r\n }\r\n }\r\n }\r\n\r\n if (sqftConfig.highlight.points && state.isHovering) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor('pointer', self);\r\n return true;\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n return false;\r\n }\r\n\r\n const onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n // if (state.isHovering) {\r\n // let shape = parent.getParent();\r\n // if (shape instanceof sqftShape) {\r\n // shape.setIsPointsMovable(false);\r\n // }\r\n // }\r\n }\r\n const canPointBeMoved = () => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n // const disallowedNavItems = [\r\n // SIDEBAR_NAVIGATION_BUTTONS.edge,\r\n // SIDEBAR_NAVIGATION_BUTTONS.rotate,\r\n // SIDEBAR_NAVIGATION_BUTTONS.text,\r\n // SIDEBAR_NAVIGATION_BUTTONS.angle,\r\n // SIDEBAR_NAVIGATION_BUTTONS.backsplash,\r\n // SIDEBAR_NAVIGATION_BUTTONS.bumpout,\r\n // SIDEBAR_NAVIGATION_BUTTONS.corners,\r\n // SIDEBAR_NAVIGATION_BUTTONS.radius,\r\n // SIDEBAR_NAVIGATION_BUTTONS.resize,\r\n // SIDEBAR_NAVIGATION_BUTTONS.label,\r\n // SIDEBAR_NAVIGATION_BUTTONS.appliances,\r\n // SIDEBAR_NAVIGATION_BUTTONS.mitered,\r\n // SIDEBAR_BUTTONS_MENU.delete\r\n // ];\r\n\r\n const allowedNavItems = allowedNavItemsForMovingPoint;\r\n\r\n const shape = parent.getParent();\r\n let isLineWithBumpout = false;\r\n let isPrevLineWithBumpout = false;\r\n if (shape instanceof sqftShape) {\r\n const prevLine = shape.getPrevLine(parent);\r\n isLineWithBumpout = this.getParent().isWithBumpout();\r\n isPrevLineWithBumpout = prevLine.isWithBumpout();\r\n }\r\n\r\n return state.canBeMoved\r\n //&& !disallowedNavItems.includes(activeButton) // allow move points only when this button is not active\r\n && allowedNavItems.includes(activeButton) // allow move points only when button is active\r\n && !isShowSlabTool\r\n && !isLineWithBumpout\r\n && !isPrevLineWithBumpout\r\n && !this.isWithAngle()\r\n && !this.isWithCorner()\r\n ;\r\n }\r\n\r\n const onMouseDown = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (state.isHovering && canPointBeMoved()) {\r\n let shape = parent.getParent();\r\n if (shape instanceof sqftShape) {\r\n shape.setIsPointsMovable(true);\r\n }\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n //console.log(\"state.mouseDown\", state.mouseDown);\r\n return true;\r\n }\r\n\r\n if (state.isHovering) {\r\n // Set shape point with mitered edge id\r\n if (parent instanceof MiteredOverlay) {\r\n const miteredPoints = parent.getPoints();\r\n if (this.id === miteredPoints[miteredPoints.length - 1].id || this.id === miteredPoints[0].id) {\r\n const hoveredPoint = workspace.getHoverPoint();\r\n hoveredPoint.addEdgeToPoint();\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n this.addEdgeToPoint = () => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.edge) {\r\n const featureId = reduxState.sqftMenuState.activeSubMenuButton;\r\n this.setMiteredFeatureId(featureId);\r\n }\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n this.movePosition = (mousePos) => {\r\n let scale = workspace.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n state.mouseDownPosition.x = mousePos.x;\r\n state.mouseDownPosition.y = mousePos.y;\r\n this.pos.x -= xDiff;\r\n this.pos.y -= yDiff;\r\n this.revertPositionIfHasIntersections(xDiff, yDiff);\r\n setPointWasChangedInRegularMode();\r\n setPointWasMoved();\r\n state.pointWasMoved = true;\r\n }\r\n this.revertPositionIfHasIntersections = (xDiff, yDiff) => {\r\n let shape = parent.getParent();\r\n let isShapeHasIntersections = false;\r\n if (shape instanceof sqftShape) {\r\n isShapeHasIntersections = shape.isShapeHasIntersections();\r\n //console.log(\"isShapeHasIntersections\", isShapeHasIntersections);\r\n if (isShapeHasIntersections) {\r\n this.pos.x += xDiff;\r\n this.pos.y += yDiff;\r\n }\r\n }\r\n }\r\n //private property setters\r\n function setParent(value) { parent = value; }\r\n\r\n //private functions\r\n\r\n //public functions\r\n this.export = () => {\r\n let exportPoint = {};\r\n this.exportAndImportProperties.forEach((property) => {\r\n exportPoint[property] = _.clone(this[property]);\r\n });\r\n return exportPoint;\r\n };\r\n this.import = (importPoint) => {\r\n this.exportAndImportProperties.forEach((property) => {\r\n this[property] = _.clone(importPoint[property]);\r\n });\r\n //compatibility with old visualizer\r\n if (!importPoint[\"pos\"] && importPoint[\"x\"] !== undefined && importPoint[\"y\"] !== undefined ) {\r\n this.pos = { x: _.clone(importPoint[\"x\"]), y: _.clone(importPoint[\"y\"])}\r\n }\r\n };\r\n this.isHovering = function() { return state.isHovering; };\r\n this.getParent = function() { return parent };\r\n this.getGrandParent = () => {\r\n const parent = this.getParent();\r\n if (parent && parent.getParent) {\r\n return parent.getParent();\r\n }\r\n return null\r\n };\r\n this.isOverPointField = () => {\r\n let field = this.getPointField();\r\n\r\n state.isHovering = (\r\n state.mousePos.x >= field.x - this.arcLength - this.angle &&\r\n state.mousePos.x <= field.x + field.width + this.arcLength + this.angle &&\r\n state.mousePos.y >= field.y - this.arcLength - this.angle &&\r\n state.mousePos.y <= field.y + field.height + this.arcLength + this.angle\r\n );\r\n\r\n return state.isHovering;\r\n };\r\n this.getAngle = function () {\r\n return this.angle;\r\n };\r\n this.getArcLength = function () {\r\n return this.arcLength;\r\n };\r\n this.removeAttachedItem = function () {\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.setMiteredFeatureId(null);\r\n sqftShapeManager.updateMinMaxMiteredPoints(this.getGrandParent());\r\n //reset seam shape changes in the slab mode\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(this.getGrandParent());\r\n };\r\n this.rotate = (origin, angle, isSlabMode) => {\r\n let ret = {x: 0, y: 0};\r\n let tr = {x: this.x - origin.x, y: this.y - origin.y};\r\n\r\n ret.x = tr.x * Math.cos(angle) - tr.y * Math.sin(angle);\r\n ret.y = tr.x * Math.sin(angle) + tr.y * Math.cos(angle);\r\n\r\n //console.log(\"isSlabMode in point rotation\", isSlabMode)\r\n const xPos = Math.round10(Math.round10(ret.x, -5) + Math.round10(origin.x, -5), -5);\r\n const yPos = Math.round10(Math.round10(ret.y, -5) + Math.round10(origin.y, -5), -5);\r\n isSlabMode ? this.setPosSlab({x: xPos, y: yPos}) : this.setPos({x: xPos, y: yPos});\r\n };\r\n this.getPointDirection =function () {\r\n return this.pointDirection\r\n };\r\n this.changeCornerDirection = function(line1, line2) {\r\n\r\n // console.log('line1', line1);\r\n // console.log('line2', line2);\r\n\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"north\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"west\") {\r\n this.pointDirection = \"leftbottom\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"east\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"north\") {\r\n this.pointDirection = \"lefttop\";\r\n }\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"south\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"east\") {\r\n this.pointDirection = \"righttop\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"west\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"south\") {\r\n this.pointDirection = \"rightbottom\";\r\n }\r\n\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"north\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"east\") {\r\n this.pointDirection = \"lefttop\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"east\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"south\") {\r\n this.pointDirection = \"righttop\";\r\n }\r\n if (line1.orientation === \"vertical\" && line1.newDirection === \"south\"\r\n && line2.orientation === \"horizontal\" && line2.newDirection === \"west\") {\r\n this.pointDirection = \"rightbottom\";\r\n }\r\n if (line1.orientation === \"horizontal\" && line1.newDirection === \"west\"\r\n && line2.orientation === \"vertical\" && line2.newDirection === \"north\") {\r\n this.pointDirection = \"leftbottom\";\r\n }\r\n\r\n };\r\n this.getPointField = (useFieldWidth = true) => {\r\n const isCabinet = isSFTCabinetsGroup();\r\n let fieldWidth = isCabinet ? sqftConfig.fieldWidthCabinet : sqftConfig.fieldWidth,\r\n center = fieldWidth / 2,\r\n scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (this.x * scale) + offset.x - (useFieldWidth ? center : 0),\r\n y: (this.y * scale) + offset.y - (useFieldWidth ? center : 0),\r\n height: fieldWidth,\r\n width: fieldWidth\r\n };\r\n };\r\n\r\n this.getPointPosOnWorkspace = (shouldGetRegularPosition) => {\r\n const shp = this.getGrandParent();\r\n let position;\r\n if (shp) {\r\n position = shouldGetRegularPosition && shp.pos ? shp.pos : shp.getPosition();\r\n } else {\r\n position = shouldGetRegularPosition && parent.pos ? parent.pos : parent.getPosition();\r\n }\r\n const x = shouldGetRegularPosition ? +this.pos.x : +this.x;\r\n const y = shouldGetRegularPosition ? +this.pos.y : +this.y;\r\n\r\n return {\r\n x: x + position.x,\r\n y: y + position.y,\r\n };\r\n };\r\n\r\n this.getPointCords = () => {\r\n let pointField = this.getPointField();\r\n\r\n return {\r\n x: pointField.x + pointField.width / 2,\r\n y: pointField.y + pointField.width / 2\r\n }\r\n };\r\n\r\n this.snapToGrid = () => {\r\n /*var pos = snappedPos();\r\n this.x = pos.x;\r\n this.y = pos.y;*/\r\n };\r\n\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n pointRadiusOverlay.destroy();\r\n }\r\n };\r\n\r\n this.init = function(parent) {\r\n setParent(parent);\r\n this.initEvents();\r\n pointRadiusOverlay = new PointRadius();\r\n pointRadiusOverlay.init(self);\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n self,\r\n EventManager.priorities.POINT\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents();\r\n };\r\n this.deregisterPartEvents = () => {\r\n if (pointRadiusOverlay) {\r\n pointRadiusOverlay.deregisterPartEvents();\r\n }\r\n };\r\n this.reInitPartEvents = () => {\r\n if (pointRadiusOverlay) {\r\n pointRadiusOverlay.reInitPartEvents();\r\n }\r\n };\r\n // check if corner can be applied to another side of the line\r\n this.isFitSize = function () {\r\n if (parent.isLine) {\r\n let fitSize = new FitSize(parent);\r\n\r\n return fitSize.isFitSize(SqftStore.radius.angle || SqftStore.radius.arcLength);\r\n }\r\n return true\r\n };\r\n\r\n this.isWithoutMitered = function () {\r\n return !(this.getParent() ? this.getParent().isWithMitered() : false)\r\n && !(this.getParent() ? this.getParent().isWithMiteredPrev() : false)\r\n };\r\n this.rememberPos = () => {\r\n this.backupX = this.x;\r\n this.backupY = this.y;\r\n }\r\n this.restorePos = () => {\r\n this.x = this.backupX;\r\n this.y = this.backupY;\r\n }\r\n\r\n this.render = (ctx) => {\r\n if (workspace && workspace.getState().loading) {\r\n return\r\n }\r\n\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n\r\n if (this.isHidden()) { return; }\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const o = parent.getOffset();\r\n let\r\n pointField = self.getPointField(),\r\n scale = sqftConfig.scale,\r\n marginX,\r\n marginY;\r\n\r\n switch (this.pointDirection) {\r\n case \"lefttop\":\r\n marginX = -13;\r\n marginY = -13;\r\n break;\r\n case \"righttop\":\r\n marginX = 5;\r\n marginY = -13;\r\n break;\r\n case \"rightbottom\":\r\n marginX = 5;\r\n marginY = self.pointDiff ? 5 - self.pointDiff : 5;\r\n break;\r\n case \"leftbottom\":\r\n marginX = self.pointDiff ? -13 + self.pointDiff : -13;\r\n marginY = 5;\r\n break;\r\n default:\r\n marginX = 0;\r\n marginY = 0;\r\n break;\r\n }\r\n\r\n let pos = {\r\n x: o.x + (this.x * scale) + marginX,\r\n y: o.y + (this.y * scale) + marginY\r\n };\r\n\r\n let pos2 = {\r\n x: o.x + (this.x * scale),\r\n y: o.y + (this.y * scale)\r\n };\r\n void pos2;\r\n\r\n const shouldHighLightRadius = sqftConfig.highlight.points\r\n && !(this.arcLength > 0 || this.angle > 0)\r\n && !self.angleIsChanged\r\n && this.isFitSize();\r\n\r\n const isNotHighlighted = !(sqftConfig.highlight.points && !(this.arcLength > 0 || this.angle > 0))\r\n || sqftConfig.highlight.points && !this.isFitSize();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n if (this.layout === 'white-circle') {\r\n this.renderCircleLayout(ctx, pointField);\r\n\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && state.isHovering && parent instanceof MiteredOverlay) {\r\n ctx.fillStyle = fillStyleDelete;\r\n } else {\r\n ctx.fillStyle = fillStyleWhite;\r\n }\r\n ctx.fill();\r\n\r\n } else if (this.layout === 'small-white-circle' || state.isHovering && canPointBeMoved()) {\r\n this.renderSmallCircleLayout(ctx, pointField);\r\n\r\n } else if (this.layout === 'black-circle') {\r\n this.renderCircleLayout(ctx, pointField);\r\n ctx.fillStyle = fillStyleBlack;\r\n ctx.fill();\r\n\r\n } else if (this.layout === 'arrow-circle') {\r\n this.renderArrowCircleLayout(ctx, pointField);\r\n\r\n } else if (this.layout === 'blank') {\r\n this.renderBlankLayout(ctx, pos);\r\n\r\n } else if (shouldHighLightRadius) {\r\n this.renderHighlightRadiusLayout(ctx, pointField);\r\n\r\n } else if (sqftConfig.highlight.rotateAngle && this.renderAngleCircle) {\r\n this.renderRotateAngleLayout(ctx, pointField);\r\n\r\n } else {\r\n if (this.getMiteredFeatureId()) {\r\n ctx.fillStyle = fillStyleEdge\r\n } else {\r\n ctx.fillStyle = fillStyle;\r\n }\r\n\r\n if (this.arcLength > 0 || this.angle > 0) {\r\n //this.renderArcLayoutOld(ctx, pointField, pos);\r\n\r\n } else if (isNotHighlighted) {\r\n if (allowedNavItemsForMovingPoint.includes(activeButton)) {\r\n this.renderWhitePointLayout(ctx, pos2);\r\n } else {\r\n // old gray rectangle\r\n //this.renderGrayPointLayoutV2(ctx, pos);\r\n\r\n // gray rectangle version 2\r\n this.renderGrayPointLayoutV2(ctx);\r\n }\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n\r\n this.renderRotateAngleLayout = (ctx, pointField) => {\r\n //todo fix bumpout rotation and remove this\r\n ////////////////////////////////////////////////\r\n if (!parent.getParent().isWithBumpout()\r\n && !parent.getParent().isWithMitered()\r\n && !parent.getParent().isPointsMoved\r\n && parent.getParent().rotatedDegrees === 0\r\n ) {\r\n ///////////////////////////////////\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY - 2 + pointField.width / 2,\r\n this.renderAngleCircle,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fillStyle = \"rgba(159, 197, 34, 0.25)\";\r\n ctx.fill();\r\n ctx.stroke();\r\n ctx.beginPath();\r\n ctx.arc(pointField.x + 45 / 2 + translateX + 2, pointField.y + 45 / 2 + translateY, this.renderAngleCircle / 2, 0, 2 * Math.PI);\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fill();\r\n ctx.closePath();\r\n\r\n if (this.renderAngleArc) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.arc(\r\n pointField.x + translateX + 4 + pointField.width / 2,\r\n pointField.y + pointField.width / 2,\r\n this.renderAngleArc,\r\n 0,\r\n Math.PI / 2\r\n );\r\n ctx.stroke();\r\n }\r\n }\r\n }\r\n\r\n this.renderHighlightRadiusLayout = (ctx, pointField) => {\r\n //todo hide if override\r\n\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n pointField.width / 2,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = radiusFillStyle;\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(pointField.x + 45/2 + translateX + 2, pointField.y + 45/2 + translateY, 8, 0, 2 * Math.PI, false);\r\n ctx.fillStyle = radiusFillStyle;\r\n ctx.fill();\r\n }\r\n\r\n this.renderCircleLayout = (ctx, pointField) => {\r\n setTranslates();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 9,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.closePath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = fillStyleBlack;\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 8,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n }\r\n\r\n this.renderSmallCircleLayout = (ctx, pointField) => {\r\n let arcRadius;\r\n ctx.lineWidth = 2;\r\n if (state.isHovering) {\r\n arcRadius = 6\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = 5\r\n ctx.fillStyle = COLOR.white;\r\n }\r\n\r\n ctx.arc(\r\n pointField.x + pointField.width / 2,\r\n pointField.y + pointField.width / 2,\r\n arcRadius,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n }\r\n\r\n this.renderBlankLayout = (ctx, pos) => {\r\n ctx.rect(pos.x, pos.y, 1, 1); // draw simple rectangle\r\n ctx.fill();\r\n }\r\n\r\n this.renderArrowCircleLayout = (ctx, pointField) => {\r\n setTranslates();\r\n\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x + translateX + pointField.width / 2,\r\n pointField.y + translateY + pointField.width / 2,\r\n 10,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n ctx.fillStyle = fillStyleBlue;\r\n ctx.fill();\r\n }\r\n\r\n this.renderGrayPointLayout = (ctx, pos) => {\r\n ctx.rect(pos.x, pos.y, 8, 8); // draw simple rectangle\r\n ctx.fillStyle = 'rgba(205,202,202,0.5)';\r\n ctx.fill();\r\n ctx.closePath();\r\n }\r\n\r\n this.renderArcLayoutOld = (ctx, pointField, pos) => {\r\n console.log('pointField.x', pointField.x);\r\n console.log('pointField.y', pointField.y);\r\n console.log('radius', this.arcLength);\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 8;\r\n ctx.strokeStyle = radiusFillStyle;\r\n ctx.strokeStyle = \"#b263a8\";\r\n ctx.moveTo(pointField.x + 15, pointField.y + 45); // P0\r\n ctx.arcTo(pointField.x + 15, pointField.y + 15, pointField.x + 45, pointField.y + 15, 30); // P1, P2 and the radius\r\n ctx.stroke();\r\n console.log('stroked2!');\r\n\r\n ctx.moveTo(pos.x, pos.y);\r\n ctx.arcTo(pos.x, pos.y, pos.x + 15, pos.y + 15, this.arcLength); // draw arc radius\r\n ctx.stroke();\r\n console.log('stroked!');\r\n }\r\n\r\n this.renderGrayPointLayoutV2 = (ctx) => {\r\n ctx.beginPath();\r\n const shape = parent.getParent();\r\n const nextLine = shape.getNextLine(parent);\r\n //const prevLine = shape.getPrevLine(parent);\r\n const angleBetweenTwoLines = getAngleBetween3Points(parent.from, parent.to, nextLine.to);\r\n //console.log(\"angleBetweenTwoLines\", angleBetweenTwoLines);\r\n\r\n void angleBetweenTwoLines;\r\n\r\n const pointOnTheLine = getPointOnTheLine(\r\n parent.to.getPointField(false),\r\n parent.from.getPointField(false),\r\n 15\r\n );\r\n const pointOnTheNextLine = getPointOnTheLine(\r\n nextLine.from.getPointField(false),\r\n nextLine.to.getPointField(false),\r\n 15\r\n );\r\n const midpoint = getMidPoint(pointOnTheLine, pointOnTheNextLine);\r\n let posX = midpoint.x; //o.x + (midpoint.x * scale);\r\n let posY = midpoint.y; //o.y + (midpoint.y * scale);\r\n void posX;\r\n void posY;\r\n\r\n ctx.rect(\r\n posX - 4,\r\n posY - 4,\r\n 8, 8\r\n ); // draw simple rectangle\r\n ctx.fillStyle = 'rgba(205,202,202,0.5)';\r\n ctx.fill();\r\n }\r\n\r\n this.renderWhitePointLayout = (ctx, pos2) => {\r\n ctx.arc(\r\n pos2.x,\r\n pos2.y,\r\n 5,\r\n 0,\r\n 2 * Math.PI\r\n );\r\n ctx.fillStyle = 'rgb(255,255,255)';\r\n ctx.fill();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = fillStyleBlue;\r\n ctx.stroke();\r\n }\r\n}\r\n","import SlabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport workspace from \"../core/workspace\";\r\nimport {SHAPE_PART_ID} from \"../../../constants\";\r\nimport SQFTShapeOffset from \"../core/shapes/sqftShapeOffset\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport createEventManager from \"./subscriptionEventManager\";\r\n\r\nconst eventManager = createEventManager();\r\n\r\nconst sqftSlabManager = {\r\n ...eventManager,\r\n\r\n centerButton: {\r\n width: 10,\r\n height: 9,\r\n },\r\n\r\n importSlabBacksplashes: (values) => {\r\n SlabWorkspace.slabAdditionalShapes.resetBacksplashes();\r\n SlabWorkspace.slabAdditionalShapes.importData(values);\r\n },\r\n removeAllSlabBacksplashes: (values) => {\r\n SlabWorkspace.slabAdditionalShapes.resetBacksplashes(values);\r\n },\r\n deleteSlabBacksplashByLine: (line) => {\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(line);\r\n },\r\n getSlabPlaceHolderShapes: () => {\r\n return workspace.getShapes().filter(shp => shp.partId === SHAPE_PART_ID.slabPlaceHolder);\r\n },\r\n deleteShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.delete()\r\n }\r\n SlabWorkspace.shapeOffset = null\r\n },\r\n hideShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.deregisterEvents();\r\n }\r\n },\r\n reInitShapeOffset: () => {\r\n if (SlabWorkspace.shapeOffset) {\r\n SlabWorkspace.shapeOffset.reInitEvents();\r\n }\r\n },\r\n initShapeOffset: function (shape) {\r\n const shapes = workspace.getShapes();\r\n if (shape instanceof sqftShape) {\r\n if (SlabWorkspace.shapeOffset === null) {\r\n SlabWorkspace.shapeOffset = new SQFTShapeOffset(shapes[0]);\r\n SlabWorkspace.shapeOffset.init();\r\n SlabWorkspace.shapeOffset.setParent(shape);\r\n this.emit('shapeOffsetChanged', SlabWorkspace.shapeOffset);\r\n } else {\r\n SlabWorkspace.shapeOffset.animateShapeTransition(\r\n shape,\r\n () => {this.emit('shapeOffsetChanged', SlabWorkspace.shapeOffset)}\r\n );\r\n }\r\n\r\n }\r\n }\r\n}\r\n\r\nexport default sqftSlabManager\r\n","import {baseNewImagesPath} from \"../assets\";\r\n\r\nexport const iconPlusGreen = `${baseNewImagesPath}images/sqft-icons/cursors/plus_green.png`;\r\nexport const iconPlusBlack = `${baseNewImagesPath}images/sqft-icons/cursors/plus_black.png`;\r\nexport const iconPlusBlue = `${baseNewImagesPath}images/sqft-icons/cursors/plus_blue.png`;\r\nexport const iconplusPurple = `${baseNewImagesPath}images/sqft-icons/cursors/plus_purple.png`;\r\nexport const objectFlipVertical = `${baseNewImagesPath}images/sqft-icons/cursors/object_flip_vertical.png`;\r\nexport const objectFlipHorizontal = `${baseNewImagesPath}images/sqft-icons/cursors/object_flip_horizontal.png`;\r\nexport const iconGreenPlus32 = `${baseNewImagesPath}images/sqft-icons/icon-green-plus-32.png`;\r\nexport const iconGreenClip = `${baseNewImagesPath}images/greenclip.svg`;\r\nexport const iconHeight = `${baseNewImagesPath}images/sqft-icons/icon-height.svg`;\r\nexport const iconLength = `${baseNewImagesPath}images/sqft-icons/icon-length.svg`;\r\nexport const iconLink = `${baseNewImagesPath}images/sqft-icons/icon-link.svg`;\r\nexport const iconThickness = `${baseNewImagesPath}images/sqft-icons/icon-thickness.svg`;\r\nexport const iconEyeball = `${baseNewImagesPath}images/sqft-icons/icon-eyeball.svg`;\r\nexport const iconCursorPointer = `${baseNewImagesPath}images/sqft-icons/cursors/pointer.svg`;\r\nexport const iconLibrary = `${baseNewImagesPath}images/sqft-icons/icon-length.svg`;\r\nexport const iconUpload = `${baseNewImagesPath}images/sqft-icons/icon-upload.svg`;\r\nexport const iconImage = `${baseNewImagesPath}images/sqft-icons/icon-image.svg`;\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const showSlabTool = (isShowSlabTool) => ({\r\n type: types.SHOW_SLAB_TOOL,\r\n payload: {isShowSlabTool}\r\n});\r\n\r\nexport const setActiveSlabId = (activeSlabId) => ({\r\n type: types.SET_ACTIVE_SLAB_ID,\r\n payload: {activeSlabId}\r\n});\r\n\r\nexport const setActiveSlabUrl = (activeSlabUrl) => ({\r\n type: types.SET_ACTIVE_SLAB_URL,\r\n payload: {activeSlabUrl}\r\n});\r\n\r\nexport const setActiveStep = (activeStep) => ({\r\n type: types.SET_SQFT_SLAB_ACTIVE_STEP,\r\n payload: {activeStep}\r\n});\r\n\r\nexport const setSlabSearchText = (searchText) => ({\r\n type: types.SET_SQFT_SLAB_SEARCH_TEXT,\r\n payload: {searchText}\r\n});\r\n\r\nexport const setSlabAspectRatio = (slabAspectRatio) => ({\r\n type: types.SET_SQFT_SLAB_ASPECT_RATIO,\r\n payload: {slabAspectRatio}\r\n});\r\n\r\nexport const setSlabImageType = (slabImageType) => ({\r\n type: types.SET_SLAB_IMAGE_TYPE,\r\n payload: {slabImageType}\r\n});\r\n\r\nexport const setSlabImageWidth = (slabImageWidth) => ({\r\n type: types.SET_SQFT_SLAB_IMAGE_WIDTH,\r\n payload: {slabImageWidth}\r\n});\r\n\r\nexport const setSlabImageHeight = (slabImageHeight) => ({\r\n type: types.SET_SQFT_SLAB_IMAGE_HEIGHT,\r\n payload: {slabImageHeight}\r\n});\r\n\r\nexport const setCropperData = (cropperData) => ({\r\n type: types.SET_SQFT_SLAB_CROPPER_DATA,\r\n payload: {cropperData}\r\n});\r\n\r\nexport const setSqftCroppedSlabImages = (croppedSlabImages) => ({\r\n type: types.SET_SQFT_CROPPED_SLAB_IMAGES,\r\n payload: {croppedSlabImages}\r\n});\r\n\r\nexport const addSqftCroppedSlabImage = (croppedSlabImage) => ({\r\n type: types.ADD_SQFT_CROPPED_SLAB_IMAGE,\r\n payload: croppedSlabImage\r\n});\r\n\r\nexport const setSqftSlabToolVisited = (isSlabToolVisited) => ({\r\n type: types.SET_SLAB_TOOL_VISITED,\r\n payload: {isSlabToolVisited}\r\n});\r\n\r\nexport const addRoomWithVisitedSlabTool = (qtCatName) => ({\r\n type: types.ADD_ROOM_WITH_VISITED_SLAB_TOOL,\r\n payload: qtCatName\r\n});\r\n\r\nexport const deleteCroppedSlabImage = (id) => ({\r\n type: types.DELETE_CROPPED_SLAB_IMAGE,\r\n payload: {id}\r\n});\r\n\r\nexport const setPricePerArea = (pricePerArea) => ({\r\n type: types.SET_PRICE_PER_AREA,\r\n payload: {pricePerArea}\r\n});\r\n\r\nexport const setMeasurementVisibleInSlabMode = (isMeasurementVisibleInSlabMode) => ({\r\n type: types.SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE,\r\n payload: {isMeasurementVisibleInSlabMode}\r\n});\r\n\r\nexport const setIsSizeValidationFailed = (isSizeValidationFailed) => ({\r\n type: types.SET_IS_SIZE_VALIDATION_FAILED,\r\n payload: {isSizeValidationFailed}\r\n});\r\n\r\nexport const setIsSlabPricingEnabled = (isSlabPricingEnabled) => ({\r\n type: types.SET_IS_SLAB_PRICING_ENABLED,\r\n payload: {isSlabPricingEnabled}\r\n});\r\n","import {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {LayoutType, ShowerComboTubType} from \"../constants\";\r\nimport { showerTubComboThumbnail, custom60in30X8Shower } from '../../../bvComponent/core/assets';\r\n\r\nimport BathTubLiner from \"../subparts/showerTubCombo/bathtubLiner\";\r\nimport ReplacementTub from \"../subparts/showerTubCombo/replacementTub\";\r\nimport WalkInTub from \"../subparts/showerTubCombo/walkInTub\";\r\nimport JettedTub from \"../subparts/showerTubCombo/jettedTub\";\r\nimport WallConfiguration from \"../subparts/showerTubCombo/wallConfiguration\";\r\nimport {fixDbFeatureProperties} from \"../../../../misc/helpers\";\r\nimport WalkInTubFixture from \"../subparts/showerTubCombo/walkInTubFixture\";\r\nimport ReplacementTubFixture from \"../subparts/showerTubCombo/replacementTubFixture\";\r\n\r\nexport class ShowerTubCombo extends Part {\r\n static id = 'Shower Tub Combo';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.showerTubComboIsActive = false; // param needed to check if shower is still active or not\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerTubComboThumbnail;\r\n this.partName = 'Shower Tub Combo';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo\";\r\n this.relatedItems = [];\r\n this.wallConfiguration = null;\r\n this.bathTubLiner = null;\r\n this.replacementTub = null;\r\n this.replacementTubFixture = null;\r\n this.walkInTub = null;\r\n this.jettedTub = null;\r\n\r\n // Kohler hardcode, they don't have bathtub_liner\r\n this.bottomTub = ShowerComboTubType.replacement_tub;\r\n this.leftShowerWallType = 'Pony';\r\n this.showerComboSize = '60in';\r\n this.relatedGroupNames = [\"Bathtub Liner\", \"Replacement Tub\", \"Walk In Tub\", \"Jetted Tub\", \"Replacement tub Fixture\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub Liner\":\r\n relatedItemName = \"bathTubLiner\";\r\n RelatedItemClass = BathTubLiner;\r\n break;\r\n case \"Replacement Tub\":\r\n relatedItemName = \"replacementTub\";\r\n RelatedItemClass = ReplacementTub;\r\n break;\r\n case \"Walk In Tub Fixture\":\r\n relatedItemName = \"walkInTubFixture\";\r\n RelatedItemClass = WalkInTubFixture;\r\n break;\r\n case \"Replacement tub Fixture\":\r\n case \"Replacement Tub Fixture\":\r\n relatedItemName = \"replacementTubFixture\";\r\n RelatedItemClass = ReplacementTubFixture;\r\n break;\r\n case \"Walk In Tub\":\r\n case \"Walk in Tub\":\r\n relatedItemName = \"walkInTub\";\r\n RelatedItemClass = WalkInTub;\r\n break;\r\n case \"Jetted Tub\":\r\n relatedItemName = \"jettedTub\";\r\n RelatedItemClass = JettedTub;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n setSpecificRules() {\r\n if (!this.wallConfiguration) {\r\n this.wallConfiguration = new WallConfiguration(true);\r\n this.wallConfiguration.counts = {\r\n allLayoutFeaturesCount: 0,\r\n largeLayoutFeaturesCount: 0,\r\n smallLayoutFeaturesCount: 0\r\n };\r\n this.relatedItems.unshift(this.wallConfiguration);\r\n this.wallConfiguration.getParent = () => this;\r\n }\r\n const wallConfigurations = [\r\n // ShowerTubCombo.createCustomWallConfiguration(\r\n // custom60inPonyShower,\r\n // \"Pony Wall 60in\",\r\n // \"Pony\",\r\n // \"60in\",\r\n // {\r\n // \"ShowerSize\": ['60in'],\r\n // \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n // },\r\n // this,\r\n // 100000\r\n // ),\r\n ShowerTubCombo.createCustomWallConfiguration(\r\n custom60in30X8Shower,\r\n \"Full Wall 60in\",\r\n \"30X8\",\r\n \"60in\",\r\n {\r\n \"ShowerSize\": ['60in'],\r\n \"CountertopSize\": [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\", \"72in\"],\r\n },\r\n this,\r\n 100001\r\n ),\r\n ];\r\n Object.keys(LayoutType).forEach(layoutType => {\r\n this.wallConfiguration.featuresList[layoutType] = wallConfigurations;\r\n if (this.wallConfiguration.counts) {\r\n this.wallConfiguration.counts[layoutType.toLowerCase() + \"LayoutFeaturesCount\"]++;\r\n }\r\n });\r\n }\r\n\r\n static createCustomWallConfiguration(customThumbnail, name, leftShowerWallType, showerComboSize, metaData, parent, id) {\r\n const conf = new WallConfiguration();\r\n conf.partName = name;\r\n conf.showerBodyId = name.toLowerCase().replace(/ /gi, \"-\");\r\n conf.dbFeature = {};\r\n conf.featureName = name;\r\n conf.groupName = \"Wall Configuration\";\r\n conf.showerComboSize = showerComboSize;\r\n // conf.parent = parent;\r\n conf.getParent = () => parent.wallConfiguration;\r\n conf.metaData = metaData;\r\n conf.leftShowerWallType = leftShowerWallType;\r\n conf.customThumbnail = customThumbnail;\r\n conf.dbFeature = fixDbFeatureProperties({\r\n metaData,\r\n id,\r\n unlocked: true\r\n });\r\n return conf;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n return super.setLayers(layout, placeholdersNeeded)\r\n }\r\n\r\n subParts() {\r\n\r\n let subParts = [\r\n ...this.getRelatedItems().filter(item => item.visible).map(_ => new DesignNavigationItem(_.partName, _)),\r\n ...this.layout.parts.Shower.subParts().filter(subPart => {\r\n return (subPart.text === \"Fixture\")\r\n || (subPart.text === \"Shower Head\")\r\n || (subPart.text === \"Shower Walls\")\r\n || (subPart.text === \"Shower Walls Accent\")\r\n || (subPart.text === \"Shower Door\")\r\n || (subPart.text === \"Handle\")\r\n || (subPart.text === \"Pony Wall\")\r\n || (subPart.text === \"Pony Wall Cap\")\r\n || (subPart.text === \"Pony Wall Glass\")\r\n })\r\n ];\r\n\r\n if (this.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n subParts = subParts.filter(subPart => {\r\n return subPart.part.partId !== \"shower_door\" && subPart.part.partId !== \"shower_door_handle\" && subPart.part.partId !== \"shower_fixture\"\r\n })\r\n }\r\n\r\n return subParts\r\n }\r\n\r\n getShowerRelatedItems() {\r\n return this.layout.parts.Shower.getRelatedItems().filter(relItem => {\r\n return (relItem.partId === \"shower_fixture\")\r\n || (relItem.partId === \"shower_head\")\r\n || (relItem.partId === \"shower_wall\")\r\n || (relItem.partId === \"shower_wall_accent\")\r\n || (relItem.partId === \"shower_door\")\r\n || (relItem.partId === \"shower_door_handle\")\r\n || (relItem.partId === \"pony_wall\")\r\n || (relItem.partId === \"pony_wall_cap\")\r\n || (relItem.partId === \"pony_wall_glass\")\r\n })\r\n }\r\n\r\n setShowerTubCombo() {\r\n this.showerTubComboIsActive = true;\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if (!this.showerTubComboIsActive) {\r\n return null\r\n }\r\n\r\n if(zIndexes)\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n\r\n setActiveTub(bottomTub) {\r\n this.bottomTub = bottomTub;\r\n }\r\n\r\n showerSize() {\r\n return this.showerComboSize\r\n }\r\n\r\n showerDimensions() {\r\n return this.leftShowerWallType\r\n }\r\n\r\n setShowerSize(leftShowerWallType, showerComboSize) {\r\n this.leftShowerWallType = leftShowerWallType;\r\n this.showerComboSize = showerComboSize;\r\n }\r\n\r\n}\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"kv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {boolean}\r\n */\r\n matchesMetaForCondition(name, value) {\r\n if (!this.metaData[name]) {\r\n return false\r\n }\r\n if (Array.isArray(this.metaData[name])) {\r\n return this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n return this.metaData[name] === METADATA.ALL\r\n || (Array.isArray(value) ? value.some(val => iCmp(this.metaData[name], val)) : iCmp(this.metaData[name], value))\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n}\r\n\r\n\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport $ from \"jquery\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst WithOverlay = (props) => {\r\n\r\n const {children, visible, className, onClick, popupClassName} = props;\r\n\r\n const overlayElement = useRef(null);\r\n\r\n useEffect(() => {\r\n if (overlayElement && overlayElement.current) {\r\n $(overlayElement.current).fadeIn(300)\r\n }\r\n }, [visible]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const hideOverlay = (closePopup) => {\r\n if (overlayElement && overlayElement.current) {\r\n $(overlayElement.current).fadeOut(300, () => {\r\n if (closePopup) {\r\n closePopup();\r\n }\r\n })\r\n }\r\n };\r\n\r\n const onOverlayClick = (event) => {\r\n if (!onClick) {\r\n return;\r\n }\r\n if (popupClassName && event.target.closest(\".\" + popupClassName)) {\r\n return\r\n }\r\n hideOverlay(onClick);\r\n }\r\n\r\n return (\r\n
\r\n {children(hideOverlay)}\r\n
\r\n )\r\n};\r\n\r\nWithOverlay.propTypes = {\r\n children: PropTypes.any,\r\n className: PropTypes.string,\r\n popupClassName: PropTypes.string,\r\n onClick: PropTypes.func,\r\n}\r\n\r\nexport default WithOverlay\r\n","import workspace from \"../workspace\";\r\nimport {v4 as uuidv4} from \"uuid\";\r\nimport store from \"../../../../../../store\";\r\nimport {addResource, changeResource} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {getBacksplashArea, getEdgeArea, getEdgeLength} from \"../../../../helpers/sqftHelper\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE, RESOURCE_TYPE} from \"../../../../constants\";\r\nimport {setSQFTPopup} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\n\r\n/**\r\n * Prepare and attach resourceType(edge, backsplash, bumpout, mitered) to the line or lineCorner\r\n * @param {*} seg\r\n * @param {*} segCorner\r\n * @param {*} resourceType\r\n * @param {number} featureId\r\n * @param {string} partId\r\n * @param {*} featureName\r\n * @param height\r\n * @param {string} resourceId\r\n * @param qtCatName\r\n * @param {boolean} addResourceToStore\r\n * @param {boolean} shouldShowEyeBall\r\n */\r\nexport const attachResource = (\r\n seg,\r\n segCorner,\r\n resourceType,\r\n featureId,\r\n partId,\r\n featureName,\r\n height = 0,\r\n resourceId = null,\r\n qtCatName = null,\r\n addResourceToStore = true,\r\n shouldShowEyeBall = true,\r\n) => {\r\n const attachedToHovered = segCorner || seg;\r\n const attachedToExisting = workspace.getAttachedTo(attachedToHovered);\r\n const attachedToResource = prepareResource(seg, segCorner, resourceType, featureId, partId, featureName, resourceId, qtCatName, height, shouldShowEyeBall);\r\n\r\n attachResourceToLine(seg, segCorner, resourceType, featureId, partId, featureName, height, shouldShowEyeBall);\r\n\r\n if (addResourceToStore) {\r\n createAttachedResourceInStore(attachedToExisting, attachedToResource);\r\n }\r\n\r\n closeSQFTPopup();\r\n}\r\n\r\nconst createAttachedResourceInStore = (shouldChangeExisting, attachedToResource) => {\r\n const action = shouldChangeExisting ? changeResource : addResource;\r\n store.dispatch(action(RESOURCE_TYPE.attachedToLine, attachedToResource));\r\n}\r\n\r\nconst attachResourceToLine = (seg, segCorner, resourceType, featureId, partId, featureName, height) => {\r\n let historyCallBack = () => {};\r\n let newSection;\r\n\r\n const resourceActionMap = {\r\n 'edge': (segCorner) ? segCorner.addEdgeToCornerLine.bind(this, featureName, featureId) : seg.addEdgeToLine.bind(this, featureName, featureId),\r\n 'backsplash': (segCorner) ? segCorner.addBacksplashToCornerLine.bind(this, featureName, resourceType, featureId, height) : seg.addBacksplashToLine.bind(this, featureName, resourceType, featureId, height),\r\n [RESOURCE_ATTACHED_TO_TYPE.bumpout]: () => {\r\n if (seg && !seg.isWithBumpout()) seg.addBumpoutToLine();\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.mitered]: () => {\r\n if (seg && !seg.isWithMitered()) {\r\n newSection = seg.addMiteredToLine();\r\n if (newSection) workspace.miteredController.addSection(newSection);\r\n }\r\n if (segCorner && !segCorner.isWithMitered()) {\r\n newSection = segCorner.addMiteredToCornerLine();\r\n if (newSection) workspace.miteredController.addSection(newSection);\r\n }\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.underlayment]: () => {\r\n if (seg && !seg.isWithMitered()) {\r\n newSection = seg.addUnderlaymentToLine();\r\n if (newSection) workspace.underlaymentController.addSection(newSection);\r\n }\r\n },\r\n [RESOURCE_ATTACHED_TO_TYPE.crown_molding]: () => seg.addCrownMoldingToLine(featureName, featureId),\r\n [RESOURCE_ATTACHED_TO_TYPE.end_cap]: () => seg.addEndCapToLine(featureName, featureId),\r\n };\r\n\r\n if (resourceActionMap[resourceType]) {\r\n historyCallBack = resourceActionMap[resourceType];\r\n }\r\n\r\n historyCallBack();\r\n}\r\n\r\nexport const closeSQFTPopup = () => {\r\n const state = store.getState();\r\n const isSQFTPopupOpened = state.sqftMenuState.sqftPopup.isOpened;\r\n\r\n if (isSQFTPopupOpened) {\r\n store.dispatch(setSQFTPopup({\r\n title: workspace.intl.formatMessage({ id: \"sqft.popup.title.systemMessage\" }),\r\n content: '',\r\n isOpened: false,\r\n confirmCallback: () => {},\r\n confirmText: '',\r\n cancelCallback: () => {},\r\n cancelText: ''\r\n }));\r\n }\r\n}\r\n\r\nconst prepareResource = (seg, segCorner, resourceType, featureId, partId, featureName, resourceId, qtCatName, height, shouldShowEyeBall = true) => {\r\n const attachedToHovered = segCorner || seg;\r\n const id = resourceId || (attachedToHovered && attachedToHovered.id) || uuidv4();\r\n\r\n let attachedToParentId = null;\r\n if (attachedToHovered && attachedToHovered.getParent) {\r\n const parent = attachedToHovered.getParent();\r\n attachedToParentId = parent ? parent.id : null;\r\n }\r\n\r\n return {\r\n id,\r\n type: resourceType,\r\n featureId,\r\n name: featureName,\r\n attachedToId: attachedToHovered ? attachedToHovered.id : null,\r\n partId,\r\n part: segCorner ? 'lineCorner' : 'line',\r\n attachedToParentId,\r\n isDisabledInPopup: attachedToHovered ? attachedToHovered.isDisabledInPopup : null,\r\n qtCatName: qtCatName || getQtCatName(),\r\n shouldShowEyeBall,\r\n height,\r\n\r\n export() {\r\n let length = 0, realLength = 0, lineLength = 0, area = 0;\r\n const line = workspace.getLineOrCornerLineById(this.attachedToId);\r\n\r\n if (line) {\r\n switch (resourceType) {\r\n case RESOURCE_ATTACHED_TO_TYPE.edge: {\r\n const navItems = getEdgeFeatures();\r\n const navItem = navItems.find(edge => edge.part.dbFeature.id === this.featureId);\r\n const feature = navItem ? navItem.part : null;\r\n const unit = feature ? feature.dbFeature.unit : null;\r\n length = (unit && unit.toLowerCase() === \"each\") ? 1 : getEdgeLength(line);\r\n realLength = getEdgeLength(line);\r\n lineLength = sqftConfig.measureUnit === \"Imperial\" ? line.getLineLength() : line.getLineLengthMm();\r\n area = getEdgeArea(line, lineLength, featureId);\r\n break;\r\n }\r\n case RESOURCE_ATTACHED_TO_TYPE.backsplash:\r\n length = getBacksplashArea(line.getBacksplashHeight(), line);\r\n break;\r\n default:\r\n length = realLength = getEdgeLength(line);\r\n break;\r\n }\r\n return { ...this, length, realLength, lineLength, area };\r\n }\r\n\r\n return {};\r\n }\r\n };\r\n};\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setResources = (resourceType, resources) => ({\r\n type: types.SET_RESOURCES,\r\n payload: {resourceType, resources}\r\n});\r\n\r\nexport const addResource = (resourceType, resource) => ({\r\n type: types.ADD_RESOURCE,\r\n payload: {resourceType, resource}\r\n});\r\n\r\nexport const changeResource = (resourceType, resource) => ({\r\n type: types.CHANGE_RESOURCE,\r\n payload: {resourceType, resource}\r\n});\r\n\r\nexport const deleteResource = (resourceType, id) => ({\r\n type: types.DELETE_RESOURCE,\r\n payload: {resourceType, id}\r\n});\r\n\r\nexport const deleteResourceAttachedTo = (resourceType, attachedTo) => ({\r\n type: types.DELETE_RESOURCE_ATTACHED_TO,\r\n payload: {resourceType, attachedTo}\r\n});\r\n\r\nexport const deleteAllResources = () => ({\r\n type: types.DELETE_ALL_RESOURCES,\r\n payload: {}\r\n});\r\n\r\nexport const setSelectedFeature = (selectedFeature) => ({\r\n type: types.SET_SELECTED_FEATURE,\r\n payload: {selectedFeature}\r\n});\r\n\r\nexport const setSelectedPartIds = (selectedPartIds) => ({\r\n type: types.SET_SELECTED_PART_IDS,\r\n payload: {selectedPartIds}\r\n});\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport store from \"../../store\";\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport Analytics from './../../analytics';\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {toggleShowAssignQuotePopup} from \"../../actions/assignPopupFunctions\";\r\n\r\nclass UserLoginButton extends Component {\r\n\r\n static propTypes = {\r\n className: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n userLogoutActive: false\r\n }\r\n }\r\n\r\n static handleLoginClick = ({\r\n toggleUserPopup, toggleMobileButton = null,\r\n saveQuoteAfterLogin = false, userPopupType = UserPopupTypes.Unlock,\r\n checkout = false\r\n }) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n // console.log(\"state.userState.userIsLoggedIn\", state.userState.userIsLoggedIn);\r\n // console.log(\"state.userState.isPhoneNumberValidated:\", state.userState.isPhoneNumberValidated);\r\n // console.log(\"fabricatorSettings.twoFA:\", fabricatorSettings.twoFA);\r\n if (state.userState.userIsLoggedIn) {\r\n if (fabricatorSettings.twoFA) {\r\n if (!state.userState.isPhoneNumberValidated) {\r\n toggleUserPopup({userPopupOpened: true, saveQuoteAfterLogin, userPopupType, checkout});\r\n return false;\r\n } else {\r\n if (toggleMobileButton) {\r\n toggleMobileButton();\r\n return false;\r\n }\r\n }\r\n } else {\r\n if (toggleMobileButton) {\r\n toggleMobileButton();\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } else {\r\n if (document.kvConfig.isBackend) {\r\n store.dispatch(toggleShowAssignQuotePopup(true));\r\n return false;\r\n }\r\n toggleUserPopup({userPopupOpened: true, saveQuoteAfterLogin, userPopupType, checkout});\r\n if (userPopupType !== UserPopupTypes.NewDesign) {\r\n window.allowClickLeadCapturePopup = false;\r\n }\r\n return false;\r\n }\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n Analytics.sendClickEvent('user-login');\r\n UserLoginButton.handleLoginClick({...this.props, toggleMobileButton: this.toggleMobileButton, userPopupType})\r\n };\r\n\r\n toggleMobileButton = () => {\r\n this.setState({\r\n userLogoutActive: !this.state.userLogoutActive\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.userLogoutActive\r\n ? window.addEventListener('click', this.handleDropdownWrapperBlur)\r\n : window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleDropdownWrapperBlur = (e) => {\r\n const questionLogout = e.target.closest('[class*=\"scart-content__question\"]');\r\n if (!questionLogout) {\r\n this.toggleMobileButton();\r\n }\r\n };\r\n\r\n handleLogOutButtonClick = (logout) => {\r\n Analytics.sendClickEvent('user-logout');\r\n if (logout) {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: false,\r\n isPhoneNumberValidated: false\r\n });\r\n }\r\n this.toggleMobileButton()\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n this.handleUserLoginClick()}>\r\n \r\n {this.props.userIsLoggedIn\r\n ? \r\n : }\r\n \r\n \r\n
\r\n
\r\n

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n toggleShowAssignQuotePopup\r\n})(UserLoginButton);\r\n","import workspace from \"../../core/workspace\";\r\n\r\nexport class SQFTResourceController {\r\n resourceName = null\r\n\r\n constructor(resourceName) {\r\n this.resourceName = resourceName\r\n }\r\n\r\n getResources() {\r\n return workspace[this.resourceName];\r\n }\r\n\r\n addResource(resource) {\r\n workspace[this.resourceName].push(resource);\r\n\r\n return workspace[this.resourceName];\r\n }\r\n\r\n destroyResource(resource) {\r\n const index = workspace[this.resourceName].indexOf(resource);\r\n if (index > -1) {\r\n resource.destroy();\r\n workspace[this.resourceName].splice(index, 1);\r\n }\r\n\r\n return workspace[this.resourceName];\r\n }\r\n\r\n removeResource = (resource) => {\r\n const index = workspace[this.resourceName].indexOf(resource);\r\n if (index > -1) {\r\n workspace[this.resourceName].splice(index, 1);\r\n }\r\n\r\n return workspace[this.resourceName];\r\n };\r\n\r\n getResourceById(searchedId) {\r\n return workspace[this.resourceName].find(resource => resource.id === searchedId);\r\n }\r\n\r\n removeAllResources() {\r\n for (let resource of workspace[this.resourceName]) {\r\n resource.destroy()\r\n }\r\n workspace[this.resourceName] = [];\r\n }\r\n\r\n exportData() {\r\n const exportedData = [];\r\n for (let resource of workspace[this.resourceName]) {\r\n exportedData.push(resource.export ? resource.export() : resource);\r\n }\r\n return exportedData\r\n }\r\n\r\n importData(data) {\r\n workspace[this.resourceName] = [];\r\n for (let resource of data) {\r\n workspace[this.resourceName].push(resource.import ? resource.import() : resource);\r\n }\r\n }\r\n}\r\n\r\n","import RenderCabinets from \"./renderCabinets\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {\r\n getParallelPoints,\r\n getPointBetweenPoints,\r\n getPointOnTheLine,\r\n rotatePoint,\r\n getPointDistance,\r\n measureDistanceToInches, addDecimalToLength\r\n} from \"../../../helpers/sqftHelper\";\r\nimport workspace from \"../core/workspace\";\r\nimport {attachResource} from \"../core/controls/resourseCanas\";\r\nimport {MEASURE_UNITS, RESOURCE_ATTACHED_TO_TYPE} from \"../../../constants\";\r\nimport workspaceControllers from \"../store/workspaceControllers\";\r\nimport {areCollinearAndOverlap, calculateLeg, roundShapePoints} from \"../../../helpers/coordinatesHelper\";\r\nimport {DIRECTIONS} from \"../../../helpers/shapeHelper\";\r\nimport Point from \"../core/shapes/point\";\r\nimport Line from \"../core/shapes/line\";\r\n\r\n/**\r\n * @param line {{}}\r\n * @return {PointV2}\r\n */\r\nexport const getLineCrownMoldingPoints = (line) => {\r\n const linePointsIds = [\r\n line.from.id,\r\n line.to.id,\r\n ]\r\n const shapePoints = line.getParent().getPointsPointField();\r\n\r\n return RenderCabinets.getDiagonalPointsForTheLine(shapePoints, sqftConfig.crownMoldingParams.distance, linePointsIds);\r\n}\r\n\r\n/**\r\n * @param point1 {point}\r\n * @param point2 {point}\r\n * @param outlineDistance {int}\r\n * @return {[]}\r\n */\r\nexport const getLineBordersArrayV1 = (point1, point2, outlineDistance) => {\r\n const pointField1 = point1.getPointField(false);//point1 instanceof PointV2 ? point1.getPointField(false) : getPointField(point1.x, point1.y, point1.getParent());\r\n const pointField2 = point2.getPointField(false);//point2 instanceof PointV2 ? point2.getPointField() : getPointField(point2.x, point2.y, point2.getParent());\r\n const pointOnTheLine = getPointOnTheLine(pointField1, pointField2, outlineDistance);\r\n const pointOnTheLine2 = getPointOnTheLine(pointField2, pointField1, outlineDistance);\r\n return [\r\n rotatePoint(pointField1, pointOnTheLine, 90),\r\n rotatePoint(pointField1, pointOnTheLine, -90),\r\n rotatePoint(pointField2, pointOnTheLine2, 90),\r\n rotatePoint(pointField2, pointOnTheLine2, -90)\r\n ];\r\n}\r\n\r\n/**\r\n * @param point1 {point}\r\n * @param point2 {point}\r\n * @param outlineDistance {int}\r\n * @return {[]}\r\n */\r\nexport const getLineBordersArrayV2 = (point1, point2, outlineDistance) => {\r\n const pointField1 = point1.getPointField(false);//point1 instanceof PointV2 ? point1.getPointField(false) : getPointField(point1.x, point1.y, point1.getParent());\r\n const pointField2 = point2.getPointField(false);//point2 instanceof PointV2 ? point2.getPointField() : getPointField(point2.x, point2.y, point2.getParent());\r\n const [parallelPoint1, parallelPoint2] = getParallelPoints(pointField1, pointField2, outlineDistance);\r\n const [parallelPoint4, parallelPoint3] = getParallelPoints(pointField1, pointField2, -outlineDistance);\r\n return [\r\n parallelPoint1,\r\n parallelPoint2,\r\n parallelPoint3,\r\n parallelPoint4\r\n ];\r\n}\r\n\r\n\r\n/**\r\n * @param from {point}\r\n * @param to {point}\r\n * @param lineThickness {int}\r\n * @return {[]}\r\n */\r\nexport const getBordersOfTwoPoints = (from, to, lineThickness) => {\r\n const lineBorderArray = getLineBordersArrayV2(from, to, lineThickness);\r\n\r\n //console.log(\"lineBorderArray\", lineBorderArray);\r\n let virtualLines = [];\r\n for (const borderPointKey in lineBorderArray) {\r\n const len = lineBorderArray.length;\r\n const currentLineBorderPoint = lineBorderArray[+borderPointKey];\r\n //const previousLineBorderPoint = lineBorderArray[(lineBorderPointIndex + len - 1) % len];\r\n const nextLineBorderPoint = lineBorderArray[(+borderPointKey + 1) % len];\r\n let virtualLine = {\r\n from: {\r\n ...currentLineBorderPoint,\r\n modelCorePoint: {\r\n getPosX: function () { return currentLineBorderPoint.x },\r\n getPosY: function () { return currentLineBorderPoint.y }\r\n },\r\n getPointField: function () { return currentLineBorderPoint }\r\n },\r\n to: {\r\n ...nextLineBorderPoint,\r\n modelCorePoint: {\r\n getPosX: function () { return nextLineBorderPoint.x },\r\n getPosY: function () { return nextLineBorderPoint.y }\r\n },\r\n getPointField: function () { return nextLineBorderPoint }\r\n },\r\n getOffset: () => {\r\n return this.getOffset()\r\n }\r\n }\r\n virtualLines.push(virtualLine);\r\n }\r\n\r\n return virtualLines\r\n}\r\n\r\nexport const addEdgeToTheLines = (shapeId, edge, lineNumbers, shouldShowEyeBall = true) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n //line.addEdgeToLine(edge.getFeatureName(), edge.dbFeature.id); // old functional\r\n attachResource(line,\r\n null,\r\n RESOURCE_ATTACHED_TO_TYPE.edge,\r\n edge.dbFeature.id,\r\n null,\r\n edge.getFeatureName(),\r\n 0,\r\n null,\r\n null,\r\n true,\r\n shouldShowEyeBall)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Add Edge Without feature for the slab and material calculation\r\n * @param shapeId\r\n * @param lineNumbers\r\n */\r\nexport const addFakeEdgeToLines = (shapeId, lineNumbers) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n line.setFakeEdge(true);\r\n }\r\n })\r\n}\r\n\r\nexport const setLineParams = (shapeId, lineNumbers, params) => {\r\n const shape = workspace.getShapeById(shapeId);\r\n const lines = shape.getLines();\r\n\r\n lines.forEach((line, index) => {\r\n if (lineNumbers.includes(index)) {\r\n line.setStateParams(params);\r\n }\r\n })\r\n}\r\n\r\nexport const updateShapeWaterfallLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithWaterfallToolEdge() || shapeLine.isWithPeninsulaUnderwrapEdge()) {\r\n workspaceControllers.waterfall.updateWaterfallLength(shapeLine);\r\n }\r\n }\r\n}\r\n\r\nexport const updateMiteredLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithMitered()) {\r\n shapeLine.miteredOverlay.setNewLineWidth();\r\n }\r\n }\r\n}\r\n\r\nexport const updateUnderlaymentLength = (line) => {\r\n const shape = line.getParent();\r\n for (const shapeLine of shape.getLines()) {\r\n if (shapeLine.isWithUnderlayment()) {\r\n shapeLine.underlaymentOverlay.setNewLineWidth();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param points[]\r\n * @return lines[{}]\r\n */\r\nexport const createSimpleLinesFromPoints = (points) => {\r\n let lines = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let line = {\r\n from: points[i],\r\n to: points[(i + 1) % points.length]\r\n };\r\n lines.push(line);\r\n }\r\n\r\n return lines;\r\n};\r\n\r\nexport const initAllLineLength = () => {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.overlay) {\r\n line.overlay.reInitEvents();\r\n }\r\n }\r\n}\r\n\r\nexport const hideAllLineLength = () => {\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.overlay) {\r\n line.overlay.deregisterEvents();\r\n }\r\n }\r\n}\r\n\r\nexport const findCollinearLine = (searchLine) => {\r\n const lines = workspace.getLines();\r\n const roundedSearchLinePoints = roundShapePoints([searchLine.from.getPointPosOnWorkspace(), searchLine.to.getPointPosOnWorkspace()]);\r\n for (const testLine of lines) {\r\n const roundedTestPoints = roundShapePoints([testLine.from.getPointPosOnWorkspace(), testLine.to.getPointPosOnWorkspace()]);\r\n if (areCollinearAndOverlap(roundedSearchLinePoints[0], roundedSearchLinePoints[1], roundedTestPoints[0], roundedTestPoints[1], 1)) {\r\n return testLine\r\n }\r\n }\r\n}\r\n\r\nexport const isHorizontalDirection = (lineDirection) => {\r\n return [DIRECTIONS.WEST, DIRECTIONS.EAST].includes(lineDirection)\r\n}\r\n\r\nexport const isVerticalDirection = (lineDirection) => {\r\n return [DIRECTIONS.NORTH, DIRECTIONS.SOUTH].includes(lineDirection)\r\n}\r\n\r\nexport const isWesternHemisphere = (lineDirection) => {\r\n return [DIRECTIONS.WEST, DIRECTIONS.NORTHWEST, DIRECTIONS.NORTH, DIRECTIONS.NORTHEAST].includes(lineDirection);\r\n}\r\n\r\nexport const isEasternHemisphere = (lineDirection) => {\r\n return [DIRECTIONS.EAST, DIRECTIONS.SOUTHWEST, DIRECTIONS.SOUTH, DIRECTIONS.SOUTHEAST].includes(lineDirection);\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport const getLinesWithoutAnglePoints = (lines) => {\r\n const adjustedLines = [];\r\n\r\n lines.forEach((line) => {\r\n if (line.to.angle > 0 && line.from.angle > 0) {\r\n // Both 'to' and 'from' have angles, adjust both points\r\n const legLengthTo = calculateLeg(line.to.angle);\r\n const legLengthFrom = calculateLeg(line.from.angle);\r\n\r\n // Calculate new points for 'to' and 'from'\r\n const linePosTo = getPointBetweenPoints(line.to, line.from, legLengthFrom, -2);\r\n const linePointTo = new Point(linePosTo.x, linePosTo.y);\r\n\r\n const linePosFrom = getPointBetweenPoints(line.from, line.to, legLengthFrom, -2);\r\n const linePointFrom = new Point(linePosFrom.x, linePosFrom.y);\r\n\r\n // Add current line resized\r\n const cloneLine = { ...line };\r\n cloneLine.to = linePointTo;\r\n cloneLine.from = linePointFrom;\r\n adjustedLines.push(cloneLine);\r\n\r\n // Create adjusted line\r\n const nextLine = line.getParent().getNextLine(line);\r\n const newLinePosFrom = getPointBetweenPoints(nextLine.from, nextLine.to, legLengthTo, -2);\r\n const newLinePointFrom = new Point(newLinePosFrom.x, newLinePosFrom.y);\r\n\r\n adjustedLines.push(new Line(linePointTo, newLinePointFrom, line.getParent()));\r\n\r\n debugger // eslint-disable-line no-debugger\r\n } else if (line.to.angle > 0) {\r\n // Only 'to' has an angle\r\n const legLength = calculateLeg(line.to.angle);\r\n const newLinePosFrom = getPointBetweenPoints(line.to, line.from, legLength, -2);\r\n const newLinePointFrom = new Point(newLinePosFrom.x, newLinePosFrom.y);\r\n\r\n const nextLine = line.getParent().getNextLine(line);\r\n const newLinePosTo = getPointBetweenPoints(nextLine.from, nextLine.to, legLength, -2);\r\n const newLinePointTo = new Point(newLinePosTo.x, newLinePosTo.y);\r\n\r\n // Add current line resized\r\n const cloneLine = { ...line };\r\n cloneLine.to = newLinePointFrom;\r\n adjustedLines.push(cloneLine);\r\n\r\n // Create adjusted line\r\n adjustedLines.push(new Line(newLinePointFrom, newLinePointTo, line.getParent()));\r\n\r\n } else if (line.from.angle > 0) {\r\n // Only 'from' has an angle\r\n const legLength = calculateLeg(line.from.angle);\r\n const newLinePosTo = getPointBetweenPoints(line.from, line.to, legLength, -2);\r\n const newLinePointTo = new Point(newLinePosTo.x, newLinePosTo.y);\r\n\r\n const cloneLine = { ...line };\r\n cloneLine.from = newLinePointTo;\r\n adjustedLines.push(cloneLine);\r\n\r\n } else {\r\n // No angles, add line as is\r\n adjustedLines.push(line);\r\n }\r\n });\r\n\r\n return adjustedLines;\r\n};\r\n\r\n\r\n/**\r\n * Function to find the longest line in an array of lines.\r\n * @param {Array} lines - Array of lines where each line has properties from and to.\r\n * @returns {Object} The longest line object.\r\n */\r\nexport function findLongestLine(lines) {\r\n if (!lines || lines.length === 0) {\r\n return null;\r\n }\r\n\r\n let longestLine = lines[0];\r\n let maxLength = getPointDistance(longestLine.from, longestLine.to);\r\n\r\n lines.forEach(line => {\r\n const length = getPointDistance(line.from, line.to);\r\n if (length > maxLength) {\r\n maxLength = length;\r\n longestLine = line;\r\n }\r\n });\r\n\r\n return longestLine;\r\n}\r\n\r\nexport function getDistanceLength(distance) {\r\n switch (sqftConfig.measureUnit) {\r\n case MEASURE_UNITS.Metric:\r\n return measureDistanceToInches(distance).millimeters\r\n case MEASURE_UNITS.Imperial:\r\n default:\r\n return addDecimalToLength(measureDistanceToInches(distance))\r\n }\r\n}\r\n","import {s3Path} from \"../../misc/utils\";\r\n\r\nexport default class Layer {\r\n zIndex = 0;\r\n\r\n src = '';\r\n\r\n fromS3 = true;\r\n\r\n /**\r\n * @param visualizer {string} bv or kv\r\n * @param zIndex {number}\r\n * @param src {string}\r\n * @param fromS3 {boolean} Whether the layer comes from S3 bucket ir from local resources\r\n */\r\n constructor(visualizer, zIndex = 0, src = '', fromS3 = true) {\r\n this.zIndex = zIndex;\r\n this.src = src;\r\n this.fromS3 = fromS3;\r\n this.visualizer = visualizer;\r\n this.bucketName = \"\";\r\n }\r\n\r\n /**\r\n *\r\n * @returns {{backgroundImage}|*}\r\n */\r\n bgImg(isCropped) {\r\n return this.fromS3 ? s3Path(this.src, this.visualizer, isCropped, this.bucketName) : this.src;\r\n }\r\n\r\n fromS3Binding(s3Binding) {\r\n this.src = s3Binding ? s3Binding.path : null;\r\n this.bucketName = s3Binding ? s3Binding.bucketName : \"\";\r\n }\r\n\r\n /**\r\n *\r\n * @param ar {Array.}\r\n */\r\n addTo(ar) {\r\n if (this.src)\r\n ar.push(this);\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nconst splitWallPartIds = [\"left_wall\", \"right_wall\", \"split_wall\", \"left_wall_splitter\"];\r\nconst shouldCheckAdditionalPartsConditions = [\"front_wall\", \"right_wall\", \"left_wall\"];\r\n\r\nexport default class WallCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as && splitWallPartIds.every(partId => this.partId !== partId)) {\r\n const wallParent = this.getParent();\r\n if (wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n getAdditionalPartsConditions(arrayOfConditions = []) {\r\n if (shouldCheckAdditionalPartsConditions.every(partId => this.partId !== partId)) {\r\n return arrayOfConditions\r\n }\r\n const layout = this.getParent().layout;\r\n if (!layout) {\r\n return arrayOfConditions\r\n }\r\n const vanityParent = layout.parts[Vanity.id];\r\n if (!vanityParent) {\r\n return arrayOfConditions\r\n }\r\n // if (!arrayOfConditions.some(condition => condition.propName === \"VanitySize\")) {\r\n // const vanitySize = vanityParent.counterTopSize(this);\r\n // if (vanitySize) {\r\n // arrayOfConditions.push({\r\n // propName: \"VanitySize\",\r\n // propValue: vanitySize\r\n // })\r\n // }\r\n // }\r\n if (!arrayOfConditions.some(condition => condition.propName === \"MirrorShape\")) {\r\n const mirror = vanityParent.mirror;\r\n if (mirror && mirror.activeFeature && !mirror.disabled && mirror.activeFeature.metaData[\"MirrorShape\"]) {\r\n arrayOfConditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: mirror.activeFeature.metaData[\"MirrorShape\"]\r\n })\r\n }\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\n// import {SIDE_POSITIONS} from \"../../constants\";\r\n\r\nexport default class AccessoryCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n checkRelatedFeatureGroupPositions(position) {\r\n const accessoriesParent = this.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id]; // no need for another check\r\n const showerSize = showerParent.showerSize();\r\n let otherFeatureGroup = null;\r\n switch (this.partId) {\r\n case \"grab_bar\":\r\n otherFeatureGroup = accessoriesParent.soapDish;\r\n break;\r\n case \"soap_dish\":\r\n otherFeatureGroup = accessoriesParent.grabBar;\r\n break;\r\n case \"shower_seats\":\r\n otherFeatureGroup = accessoriesParent.largeCornerSeat;\r\n break;\r\n case \"large_corner_seat\":\r\n otherFeatureGroup = accessoriesParent.seats;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (showerSize === \"30\") {\r\n Object.keys(otherFeatureGroup.layerPositions).forEach(key => {\r\n otherFeatureGroup.layerPositions[key] = null\r\n })\r\n } else {\r\n if (this.layerPositions[position] && otherFeatureGroup && otherFeatureGroup.layerPositions[position] && !otherFeatureGroup.disabled) {\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!this.layerPositions[newPosition]) {\r\n const matchingPositionFeature = otherFeatureGroup.getMatchingPositionFeature(newPosition, otherFeatureGroup.layerPositions[position]);\r\n if (matchingPositionFeature) {\r\n otherFeatureGroup.layerPositions[newPosition] = matchingPositionFeature;\r\n }\r\n }\r\n otherFeatureGroup.layerPositions[position] = null; //2) remove old soap dish position\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from \"lodash/findIndex\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport * as actions from '../../../../actions/actionFunctions';\r\n\r\n// import {DesignNavigationItem, Layout} from \"../core/layout\";\r\n\r\nexport const toggleFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array[index].filterId === filterId ? array.splice(index, 1) : array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nexport const replaceFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nconst setDefaultFilterArrayValue = (array, filterGroupId) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1);\r\n }\r\n return array;\r\n};\r\n\r\nclass FilterSwitchers extends Component {\r\n\r\n static propTypes = {\r\n // layout: PropTypes.instanceOf(Layout),\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object.isRequired,\r\n filterGroupName: PropTypes.string.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.setDefaultFilterValue();\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const availableFilterValues = [];\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === nextProps.filterGroupName);\r\n const fabricatorData = this.props.fabricatorData;\r\n if (filterGroup) {\r\n nextProps.activePart.features.forEach((feature) => {\r\n if (feature.dbFeature.filterValueIDs[filterGroup.id]) {\r\n feature.dbFeature.filterValueIDs[filterGroup.id].forEach((filterValue) => {\r\n if (!availableFilterValues.includes(filterValue)) {\r\n const fValue = filterGroup.values.find(val => val.id === filterValue);\r\n if (fValue.value === \"Slab\") { // we need to look for existing DuraBath Natural Stone features filter\r\n if (!fabricatorData || (fabricatorData && !fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else if (fValue.value === \"DuraBath Natural Stone\") {\r\n if (!fabricatorData || (fabricatorData && fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else {\r\n availableFilterValues.push(filterValue)\r\n }\r\n }\r\n })\r\n }\r\n });\r\n this.setState({\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n }\r\n }\r\n\r\n setActiveFilterValue = (filterId, filterGroupId) => {\r\n this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters], {filterId, filterGroupId}));\r\n };\r\n\r\n setDefaultFilterValue = () => {\r\n this.props.setSelectedFilters(setDefaultFilterArrayValue([...this.props.selectedFilters], this.state.filterGroup.id));\r\n };\r\n\r\n render() {\r\n\r\n // console.log('parentItem', this.props.parentItem);\r\n // console.log('activePart', this.props.activePart);\r\n // console.log('selectedFilters', this.props.selectedFilters);\r\n // console.log('availableFilterValues:', this.state.availableFilterValues);\r\n let activeFilterValueId = null;\r\n if (this.state.availableFilterValues.length && this.state.filterGroup && this.props.selectedFilters.length) {\r\n const appliedFilter = this.props.selectedFilters.find(filterObj => filterObj.filterGroupId === this.state.filterGroup.id);\r\n if (appliedFilter) {\r\n activeFilterValueId = appliedFilter.filterId\r\n }\r\n }\r\n\r\n return this.state.availableFilterValues.length ? (\r\n this.props.isMobile ? (\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n {filterValueObject.value}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n ) : (\r\n
\r\n
    \r\n
  • \r\n \r\n \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n \r\n {filterValueObject.value}\r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n )\r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSelectedFilters: (selectedFilters) => dispatch(actions.setSelectedFilters(selectedFilters)),\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterSwitchers);\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport store from '../../../store';\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"kv\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n setGroupFeatures(dbFeaturesArray, pageSize = 1000, setNextPage = true, layoutAbbr = \"\", loadedPage = null, fromSearch = false) {\r\n\r\n super.setGroupFeatures(dbFeaturesArray, pageSize, setNextPage, layoutAbbr, loadedPage, fromSearch)\r\n\r\n if (this.partId === \"edge_profile\" || this.partId === \"center_island_edge\") {\r\n const countertop = this.getParent().countertop;\r\n // console.log('countertop', countertop);\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeGroup && countertop) {\r\n Object.keys(this.featuresList).forEach(layoutType => {\r\n for (let i = 0; i < this.featuresList[layoutType].length; i++) {\r\n const feature = this.featuresList[layoutType][i];\r\n if (feature.dbFeature.filterValueIDs[edgeGroup.id]) {\r\n const edgeValue = feature.dbFeature.filterValueIDs[edgeGroup.id][0];\r\n const edgeExist = countertop.featuresList[layoutType].some(countertopFeature => {\r\n return countertopFeature.dbFeature.filterValueIDs[edgeGroup.id]\r\n && countertopFeature.dbFeature.filterValueIDs[edgeGroup.id].includes(edgeValue)\r\n });\r\n if (edgeExist) {\r\n feature.notAvailableInVisualizer = false\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val, true)) : iCmp(condValue, value, true))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from \"lodash/findIndex\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport * as actions from '../../../../actions/actionFunctions';\r\n\r\nexport const addFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterGroupId});\r\n if (index >= 0) {\r\n array.splice(index, 1, {filterId, filterGroupId})\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nclass FilterSelection extends Component {\r\n\r\n static propTypes = {\r\n removeFilterSelection: PropTypes.func.isRequired,\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n // this.setDefaultFilterValue();\r\n }\r\n\r\n /**\r\n * Fucntion is needed to find among filterGroups needed group & to return only those filters that has\r\n * at least 1 feature with it assigned\r\n * @param {Array} filterGroups\r\n * @param {String} filterGroupName\r\n * @param {Object} activePart\r\n * @param {Object} fabricatorData\r\n * @param {Array} selectedFilters // example: [{filterId: 1113, filterGroupId: 15}]\r\n * @return {Array} ArrayOf filterIds // example: [1231, 1587, 1596]\r\n */\r\n static getAvailableFilterValues(filterGroups, filterGroupName, activePart, fabricatorData, selectedFilters = []) {\r\n const availableFilterValues = [];\r\n const filterGroup = filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup && activePart.featuresList) {\r\n const featuresToFind = (filterGroup.name === \"Inlay Type\") ? activePart.moduleParts : activePart.features;\r\n // console.log(\"featuresToFind\", featuresToFind);\r\n // let missingFilters = {};\r\n featuresToFind.forEach((feature) => {\r\n if (feature.dbFeature.filterValueIDs[filterGroup.id] && selectedFilters.every(filterObject => {\r\n return feature.dbFeature.filterValueIDs[filterObject.filterGroupId]\r\n && feature.dbFeature.filterValueIDs[filterObject.filterGroupId].includes(filterObject.filterId)\r\n })) {\r\n feature.dbFeature.filterValueIDs[filterGroup.id].forEach((filterValue) => {\r\n if (!availableFilterValues.includes(filterValue)) {\r\n // console.log(\"feature with the filter:\", feature);\r\n const fValue = filterGroup.values.find(val => val.id === filterValue);\r\n if (fValue) {\r\n if (fValue.value === \"Slab\") { // we need to look for existing DuraBath Natural Stone features filter\r\n if (!fabricatorData || (fabricatorData && !fabricatorData.isRebath)) {\r\n // const duraBathNaturalStoneFilter = filterGroup.values.find(val => val.value === \"DuraBath Natural Stone\");\r\n // if (!activePart.features.some(testFeature => {\r\n // return testFeature.dbFeature\r\n // && testFeature.dbFeature.filterValueIDs\r\n // && testFeature.dbFeature.filterValueIDs[filterGroup.id]\r\n // && testFeature.dbFeature.filterValueIDs[filterGroup.id].includes(duraBathNaturalStoneFilter.id)\r\n // })) {\r\n // availableFilterValues.push(filterValue)\r\n // }\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else if (fValue.value === \"DuraBath Natural Stone\") {\r\n if (!fabricatorData || (fabricatorData && fabricatorData.isRebath)) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n // const slabFilter = filterGroup.values.find(val => val.value === \"Slab\");\r\n // if (!activePart.features.some.feature(testFeature => {\r\n // return testFeature.dbFeature && testFeature.dbFeature.filterValueIDs\r\n // && feature.dbFeature.filterValueIDs[duraBathNaturalStoneFilter.id]\r\n // })) {\r\n // availableFilterValues.push(filterValue)\r\n // }\r\n } else {\r\n availableFilterValues.push(filterValue)\r\n }\r\n } else {\r\n // if (!missingFilters[filterValue]) {\r\n // missingFilters[filterValue] = [feature]\r\n // } else {\r\n // missingFilters[filterValue].push(feature)\r\n // }\r\n }\r\n }\r\n })\r\n }\r\n });\r\n // if (Object.keys(missingFilters).length) {\r\n // console.error(\"Filter values are missing or wrong filter assigned!\", missingFilters);\r\n // console.info(\"Existing filters\", filterGroup.values);\r\n // }\r\n }\r\n // console.log(\"availableFilterValues\", availableFilterValues);\r\n return availableFilterValues\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === nextProps.filterGroupName);\r\n const availableFilterValues = FilterSelection.getAvailableFilterValues(\r\n nextProps.filterGroups, nextProps.filterGroupName, nextProps.activePart, this.props.fabricatorData\r\n );\r\n if (filterGroup) {\r\n this.setState({\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n }\r\n }\r\n\r\n setActiveFilterValue = (filterId, filterGroupId) => {\r\n this.props.setSelectedFilters(addFilterArrayValue([...this.props.selectedFilters], {filterId, filterGroupId}));\r\n this.props.removeFilterSelection();\r\n };\r\n\r\n render() {\r\n\r\n // console.log('parentItem', this.props.parentItem);\r\n // console.log('activePart', this.props.activePart);\r\n // console.log('selectedFilters', this.props.selectedFilters);\r\n // console.log('availableFilterValues:', this.state.availableFilterValues);\r\n // let activeFilterValueId = null;\r\n // if (this.state.availableFilterValues.length && this.state.filterGroup && this.props.selectedFilters.length) {\r\n // const appliedFilter = this.props.selectedFilters.find(filterObj => filterObj.filterGroupId === this.state.filterGroup.id);\r\n // if (appliedFilter) {\r\n // activeFilterValueId = appliedFilter.filterId\r\n // }\r\n // }\r\n\r\n return this.state.availableFilterValues.length ? (\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n {this.state.availableFilterValues.map((filterValueId, index) => {\r\n const filterValueObject = this.state.filterGroup.values.find(val => val.id === filterValueId);\r\n return (\r\n
  • this.setActiveFilterValue(filterValueId, this.state.filterGroup.id)}>\r\n \r\n \r\n \r\n
  • \r\n )\r\n })}\r\n
\r\n
\r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSelectedFilters: (selectedFilters) => dispatch(actions.setSelectedFilters(selectedFilters)),\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterSelection);\r\n","import React, {useEffect, useState} from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {featureThumbnailUrl, isIE} from \"../../misc/helpers\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport {THUMBNAIL_SIZES} from \"../../misc/utils\";\r\nimport Config, {IS_LIXIL_UI} from \"../../config\";\r\n\r\nconst FeatureThumbnail = (props) => {\r\n\r\n const {feature, dbFeatureId, isMobile} = props;\r\n const [isLoading, toggleLoader] = useState(true);\r\n const [thumbnailUrl, setThumbnailUrl] = useState(\"\");\r\n const [smallerSizeTried, setSmallerSizeTried] = useState(isIE() || Config.isDevMode()); // if it is ie - set smallerSizeTried to true\r\n\r\n\r\n const setBaseThumbnail = () => {\r\n const size = isMobile && IS_LIXIL_UI\r\n ? THUMBNAIL_SIZES.small\r\n : isIE() || Config.isDevMode() ? THUMBNAIL_SIZES.medium : THUMBNAIL_SIZES.large\r\n const baseThumbnail = featureThumbnailUrl(feature, size) // if it is ie - set small Thumbnails by the default\r\n setThumbnailUrl(baseThumbnail || `${baseNewImagesPath}images/image-not-found.png`);\r\n return baseThumbnail;\r\n }\r\n\r\n useEffect(() => {\r\n toggleLoader(true);\r\n setSmallerSizeTried(isIE() || Config.isDevMode());\r\n setBaseThumbnail();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dbFeatureId])\r\n\r\n const onImageLoadError = () => {\r\n if (isMobile || smallerSizeTried) {\r\n setThumbnailUrl(`${baseNewImagesPath}images/image-not-found.png`);\r\n } else if (!smallerSizeTried) {\r\n toggleLoader(true);\r\n setThumbnailUrl(featureThumbnailUrl(feature, THUMBNAIL_SIZES.medium))\r\n setSmallerSizeTried(true)\r\n }\r\n };\r\n\r\n if (!thumbnailUrl && smallerSizeTried) { // no need to load anything, show not found\r\n return (\r\n
\r\n \"\"/\r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n {thumbnailUrl\r\n ? {\r\n toggleLoader(false);\r\n }}\r\n onError={onImageLoadError}\r\n alt=\"\"/>\r\n : null}\r\n {isLoading ? : null}\r\n
\r\n )\r\n};\r\n\r\nFeatureThumbnail.propTypes = {\r\n feature: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n};\r\n\r\nexport default FeatureThumbnail\r\n","import store from \"../store\";\r\nimport {getCommonVisualizerType} from \"../config\";\r\n\r\n/**\r\n *\r\n * @param feature {featureInterface} (object which has dbFeature property)\r\n * @param cartItems {[cartItemInterface]}\r\n * @param currentQuote {number}\r\n * @param allWizardsValues {array}\r\n * @return {object} // {quantity, isMatching}\r\n */\r\nexport default function featureIsMatchingDisplayLogic(feature, cartItems = [], currentQuote = 0, allWizardsValues) {\r\n\r\n let visible = feature.dbFeature.displayLogic.action === \"show\";\r\n let quantity = 0;\r\n const displayRules = feature.dbFeature.displayRules;\r\n\r\n if (Array.isArray(displayRules) && displayRules.length) {\r\n\r\n const currentQuoteCartItems = cartItems.filter(cItem => cItem.currentQuote === currentQuote);\r\n let visibleUpdated = false; // we need to rewrite this, when we have time\r\n\r\n for (let i = 0; i < displayRules.length; i++) {\r\n const rule = displayRules[i];\r\n let entityVal = 0;\r\n // if (!rule) {\r\n // console.log(\"feature\", feature);\r\n // }\r\n if (rule && rule.entityId) {\r\n if (rule.entityId === -1) { // Material (should look for added Countertops value)\r\n let countertopCount = 0;\r\n currentQuoteCartItems.forEach((cartItem) => {\r\n if (cartItem.partId.includes(\"countertop\")) {\r\n countertopCount += cartItem.quantity;\r\n }\r\n });\r\n entityVal = countertopCount\r\n } else {\r\n const matchingCartItem = currentQuoteCartItems.find((cartItem) => {\r\n return rule.entityId === cartItem.cartFeature.dbFeature.id\r\n });\r\n if (matchingCartItem) {\r\n entityVal = matchingCartItem.quantity\r\n }\r\n }\r\n let result = true;\r\n const\r\n entVal = parseInt(entityVal),\r\n ruleVal = parseInt(rule.value);\r\n switch (rule.comparison) {\r\n case \"<\":\r\n result = (entVal === 0 && ruleVal === 0 ) ? true : entVal < ruleVal;\r\n break;\r\n case \"<=\":\r\n result = entVal <= ruleVal;\r\n break;\r\n case \"=\":\r\n result = entVal === ruleVal;\r\n break;\r\n case \">\":\r\n result = entVal > ruleVal;\r\n break;\r\n case \">=\":\r\n result = entVal >= ruleVal;\r\n break;\r\n case \"wizard\":\r\n result = allWizardsValues && allWizardsValues.some(wizObject => {\r\n return wizObject.quoteIndex === currentQuote && wizObject.wizardSelectedValues\r\n && Object.keys(wizObject.wizardSelectedValues).some(key => {\r\n return wizObject.wizardSelectedValues[key].selectedFeature\r\n && wizObject.wizardSelectedValues[key].selectedFeature.dbFeature.id === rule.entityId\r\n })\r\n });\r\n break;\r\n }\r\n if (!result) {\r\n if (!visibleUpdated) {\r\n visible = !visible;\r\n visibleUpdated = true;\r\n }\r\n quantity = quantity + entityVal;\r\n }\r\n }\r\n }\r\n }\r\n if (visible && !quantity) {\r\n quantity = 1;\r\n }\r\n return {quantity, isMatching: visible};\r\n}\r\n\r\n/**\r\n *\r\n * @param feature {object} (object which has dbFeature property)\r\n * @param propertyName {string}\r\n * @param originalValue {any}\r\n * @param fromQtCategory {string} (cart feature should be calculated from the category it was added)\r\n * @return {number}\r\n */\r\nexport const checkIfInCatProperty = (feature, propertyName, originalValue, fromQtCategory) => {\r\n const finalValue = (typeof originalValue !== \"undefined\") ? originalValue : feature.dbFeature[propertyName];\r\n if (feature.inCatProperties && fromQtCategory && feature.inCatProperties.hasOwnProperty(fromQtCategory)\r\n && feature.inCatProperties[fromQtCategory].hasOwnProperty(propertyName)) {\r\n if (propertyName === \"inCatPrice\") {\r\n const {settings} = store.getState().fabricatorState;\r\n if (settings.showSalePrices && (typeof feature.inCatProperties[fromQtCategory].inCatFabCost == \"number\")) {\r\n return feature.inCatProperties[fromQtCategory].inCatFabCost\r\n }\r\n return (typeof feature.inCatProperties[fromQtCategory].inCatCost === \"number\")\r\n ? feature.inCatProperties[fromQtCategory].inCatCost\r\n : (typeof feature.inCatProperties[fromQtCategory].inCatPrice === \"number\")\r\n ? feature.inCatProperties[fromQtCategory].inCatPrice\r\n : finalValue\r\n }\r\n return feature.inCatProperties[fromQtCategory][propertyName] // inCatValue\r\n }\r\n return finalValue;\r\n}\r\n\r\n/**\r\n * returns old dbFeature property name for displaying/hiding the feature\r\n * @param forPage {string} quotingTool || visualizer\r\n * @param visualizerType {string}\r\n * @return {string}\r\n */\r\nexport const getOldHidePropertyName = (forPage = \"quotingTool\", visualizerType = getCommonVisualizerType()) => {\r\n let hidePropertyName = \"\";\r\n switch (visualizerType) {\r\n case \"kitchen\":\r\n hidePropertyName = (forPage === \"quotingTool\") ? \"hideFromFrontEnd\" : \"hideFromKitchenVisualizer\";\r\n break;\r\n case \"bathroom\":\r\n hidePropertyName = (forPage === \"quotingTool\") ? \"hideFromBVQT\" : \"hideFromBathroomVisualizer\";\r\n break;\r\n default:\r\n break;\r\n }\r\n return hidePropertyName\r\n}\r\n\r\n/**\r\n * common function for displaying/hiding the feature\r\n * @param feature {featureInterface}\r\n * @param forPage {string} quotingTool || visualizer\r\n * @param fromQtCategory {string} for specific category\r\n * @param visualizerType {string} for specific visualizerType\r\n * @return {boolean}\r\n */\r\nexport const isFeatureEnabled = (feature, forPage = \"quotingTool\", fromQtCategory = \"\", visualizerType = getCommonVisualizerType()) => {\r\n\r\n // if (feature.dbFeature.sharedFeatureName === \"53010 1 American Standard Ceramic\") { // for testing\r\n // debugger;//eslint-disable-line\r\n // }\r\n\r\n const hidePropertyName = getOldHidePropertyName(forPage, visualizerType);\r\n\r\n if (feature.inCatProperties && fromQtCategory && feature.inCatProperties.hasOwnProperty(fromQtCategory)\r\n && feature.inCatProperties[fromQtCategory].hasOwnProperty(hidePropertyName)) {\r\n return !feature.inCatProperties[fromQtCategory][hidePropertyName]\r\n }\r\n\r\n const toolSettings = feature.dbFeature.toolSettings;\r\n if (Array.isArray(toolSettings) && toolSettings.length) {\r\n const checkProperty = forPage === \"quotingTool\" ? \"enableQuotingTool\" : \"enableVisualizer\";\r\n return toolSettings.some(toolSettingsObject => toolSettingsObject.tool === visualizerType && toolSettingsObject[checkProperty])\r\n }\r\n\r\n return !feature.dbFeature[hidePropertyName]\r\n}\r\n\r\nconst setFabricatorFeatureCategoriesProperties = (feature) => {\r\n if (Array.isArray(feature.dbFeature.fabricatorFeatureCategories) && feature.dbFeature.fabricatorFeatureCategories.length && !feature.fabricatorFeatureCategoriesPropertiesAreSet) {\r\n const parent = feature.getParent();\r\n const layout = parent.layout || parent.getParent().layout; // Floor & ceiling doesn't have getParent() function\r\n if (layout.qtCategoriesList && parent.qtCategoryName) { // do not change to qtCategory since there will be a Maximum call stack\r\n if (!feature.inCatProperties) {\r\n feature.inCatProperties = {};\r\n }\r\n Object.keys(parent.qtCatProperties).forEach(qtCatName => {\r\n const inCat = layout.qtCategoriesList.find(qtCat => qtCat.name === qtCatName);\r\n if (!inCat) {\r\n return\r\n }\r\n for (let i = 0; i < feature.dbFeature.fabricatorFeatureCategories.length; i++) {\r\n const currentFabricatorFeatureCategory = feature.dbFeature.fabricatorFeatureCategories[i];\r\n if (currentFabricatorFeatureCategory.fabricatorFeatureCategoryId === inCat.id) {\r\n if (!feature.inCatProperties[qtCatName]) {\r\n feature.inCatProperties[qtCatName] = {};\r\n }\r\n if (currentFabricatorFeatureCategory.price !== null) {\r\n feature.inCatProperties[qtCatName].inCatPrice = currentFabricatorFeatureCategory.price;\r\n }\r\n if (currentFabricatorFeatureCategory.cost !== null) {\r\n feature.inCatProperties[qtCatName].inCatCost = currentFabricatorFeatureCategory.cost;\r\n }\r\n if (currentFabricatorFeatureCategory.fabricatorCost !== null) {\r\n feature.inCatProperties[qtCatName].inCatFabCost = currentFabricatorFeatureCategory.fabricatorCost; // not used for now\r\n }\r\n if (currentFabricatorFeatureCategory.displayName !== null) {\r\n feature.inCatProperties[qtCatName].inCatName = currentFabricatorFeatureCategory.displayName;\r\n }\r\n if (currentFabricatorFeatureCategory.complexLogic) {\r\n feature.inCatProperties[qtCatName].complexLogic = currentFabricatorFeatureCategory.complexLogic;\r\n }\r\n if (Array.isArray(currentFabricatorFeatureCategory.toolSettings) && currentFabricatorFeatureCategory.toolSettings.length) {\r\n const bvSetting = currentFabricatorFeatureCategory.toolSettings.find(setting => setting.tool === \"bathroom\");\r\n const kvSetting = currentFabricatorFeatureCategory.toolSettings.find(setting => setting.tool === \"kitchen\");\r\n if (bvSetting) {\r\n feature.inCatProperties[qtCatName].hideFromBathroomVisualizer = !bvSetting.enableVisualizer;\r\n feature.inCatProperties[qtCatName].hideFromBVQT = !bvSetting.enableQuotingTool;\r\n }\r\n if (kvSetting) {\r\n feature.inCatProperties[qtCatName].hideFromKitchenVisualizer = !kvSetting.enableVisualizer;\r\n feature.inCatProperties[qtCatName].hideFromFrontEnd = !kvSetting.enableQuotingTool;\r\n }\r\n } else { // old logic\r\n // feature.inCatProperties[qtCatName].hideFromBathroomVisualizer = currentFabricatorFeatureCategory.hideFromBV;\r\n feature.inCatProperties[qtCatName].hideFromBathroomVisualizer\r\n = feature.dbFeature.fabricatorFeatureCategories.every(fCat => fCat.hideFromBV) && feature.dbFeature.hideFromBV; // hide feature from visualizer only if it is disabeld everywhere\r\n feature.inCatProperties[qtCatName].hideFromBVQT = currentFabricatorFeatureCategory.hideFromBVQT;\r\n // feature.inCatProperties[qtCatName].hideFromKitchenVisualizer = currentFabricatorFeatureCategory.hideFromKV;\r\n feature.inCatProperties[qtCatName].hideFromKitchenVisualizer =\r\n feature.dbFeature.fabricatorFeatureCategories.every(fCat => fCat.hideFromKV) && feature.dbFeature.hideFromKV; // hide feature from visualizer only if it is disabeld everywhere\r\n feature.inCatProperties[qtCatName].hideFromFrontEnd = currentFabricatorFeatureCategory.hideFromKVQT;\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n feature.fabricatorFeatureCategoriesPropertiesAreSet = true;\r\n }\r\n }\r\n return feature\r\n}\r\n\r\nexport const isVisibleForNavigation = (feature, withQuotingToolFeatures, forActiveQTCategory = \"\") => {\r\n\r\n if (!feature || !feature.dbFeature) { // 1) check for something unexpected (just in case)\r\n return false\r\n }\r\n\r\n feature = setFabricatorFeatureCategoriesProperties(feature); // 2) set properties from fabricatorFeatureCategories\r\n\r\n if (feature.dbFeature.autoAddToCart) {\r\n return document.kvConfig.userId === 157678 //hardcode https://tshopinc.quotekitchenandbath.com/kitchen?mode=dashboard they should have labor feature displayed\r\n } else if (withQuotingToolFeatures && (withQuotingToolFeatures !== \"all\") // for look and product journey - we show all features\r\n && !isFeatureEnabled(feature, \"quotingTool\", forActiveQTCategory)) {\r\n return false\r\n } else if (withQuotingToolFeatures && (withQuotingToolFeatures === \"all\") // for look and product journey - we show all features (enabled)\r\n && !isFeatureEnabled(feature, \"quotingTool\", forActiveQTCategory)\r\n && !isFeatureEnabled(feature, \"visualizer\", forActiveQTCategory)) {\r\n return false\r\n } else if (feature.dbFeature.displayLogic) {\r\n const storeState = store.getState();\r\n return featureIsMatchingDisplayLogic(\r\n feature,\r\n storeState.cartState.cartItems,\r\n storeState.quotesState.activeQuoteIndex,\r\n storeState.wizardState.allWizardsValues,\r\n )\r\n }\r\n return true\r\n};\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport store from \"../../store\";\r\nimport {showSuccessNotification} from \"../../actions/actionFunctions\";\r\n\r\nclass SuccessNotification extends React.Component {\r\n\r\n state = {\r\n opened: false,\r\n isHiding: false\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.successNotification.show && !this.props.successNotification.show) {\r\n setTimeout(() => { // let it render first\r\n this.setState({\r\n opened: true\r\n })\r\n }, 0)\r\n } else if (!nextProps.successNotification.show && this.props.successNotification.show) {\r\n this.setState({\r\n isHiding: true,\r\n opened: false\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n isHiding: false\r\n })\r\n }, 500)\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const {show, icon, title, message} = this.props.successNotification;\r\n\r\n return show || this.state.isHiding ? (\r\n
\r\n
\r\n
\r\n
\r\n

\r\n

\r\n \r\n

\r\n
\r\n
\r\n
\r\n ) : null;\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n successNotification: store.serverState.successNotification,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {})(SuccessNotification);\r\n\r\nexport const showQuoteSavedNotification = (title = \"successNotification.titleQuoteSaved\") => {\r\n if (document.kvConfig.visualizerOnly && (title === \"successNotification.titleQuoteSaved\")) {\r\n title = \"successNotification.titleDesignSaved\";\r\n }\r\n if (store.getState().serverState.successNotification) {\r\n window.clearTimeout(window.saveQuoteTimeoutId);\r\n store.dispatch(showSuccessNotification({\r\n show: false\r\n }));\r\n }\r\n store.dispatch(showSuccessNotification({\r\n show: true,\r\n icon: \"calculate\",\r\n title,\r\n message: \"successNotification.messageQuoteSaved\"\r\n }));\r\n window.saveQuoteTimeoutId = setTimeout(() => {\r\n store.dispatch(showSuccessNotification({\r\n show: false\r\n }));\r\n }, 3000)\r\n}\r\n","import store from \"../store\";\r\nimport enhanceCanvas from \"../bvcomponents/visComponents/canvasEnhancements\";\r\nimport Misc from \"./misc\";\r\nimport {IS_LIXIL_UI} from \"../config\";\r\n\r\nconst createCanvas = (width, height) => {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n let backCtx = canvas.getContext('2d');\r\n // backCtx.fillStyle = \"#FFFFFF\";\r\n // backCtx.fillRect(0, 0, canvas.width, canvas.height);\r\n return {canvas, backCtx}\r\n}\r\n\r\nconst finishDraw = async (images, errorImages, layers, size = null, backgroundLayers = [], quality, useNewEnhance = false) => {\r\n\r\n //0) delete images that couldn't be loaded\r\n if (errorImages && errorImages.length) {\r\n images = images.filter(image => image && image.src && !errorImages.includes(image.src));\r\n }\r\n\r\n const width = size ? size.width : 720; // 1920\r\n const height = size ? size.height : 405; // 1080\r\n const maxWidth = 1920;\r\n const maxHeight = 1080;\r\n\r\n // 1) create canvas\r\n const canvasObject1 = createCanvas(width, height);\r\n canvasObject1.backCtx.fillStyle = \"#FFFFFF\";\r\n canvasObject1.backCtx.fillRect(0, 0, canvasObject1.canvas.width, canvasObject1.canvas.height);\r\n const canvasObject3 = createCanvas(maxWidth, maxHeight); // for crops\r\n\r\n // 2) put all background layout layers\r\n if (backgroundLayers.length) {\r\n const canvasObject2 = createCanvas(width, height);\r\n canvasObject2.backCtx.globalCompositeOperation = \"lighten\";\r\n images.forEach((imageObject) => {\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n if (layer.cropCoords && (document.kvConfig.visualizerType !== \"kvScene\")) {\r\n canvasObject3.backCtx.clearRect(0, 0, maxWidth, maxHeight);\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasObject3.backCtx.drawImage(imageObject, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n canvasObject3.backCtx.drawImage(canvasObject3.canvas, 0, 0, maxWidth, maxHeight,0, 0, width, height);\r\n } else if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n canvasObject2.backCtx.drawImage(imageObject, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else {\r\n imageObject.width = width;\r\n imageObject.height = height;\r\n canvasObject2.backCtx.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n }\r\n });\r\n enhanceCanvas(canvasObject2.canvas, useNewEnhance);\r\n canvasObject1.backCtx.drawImage(canvasObject2.canvas, 0, 0, width, height, 0, 0, width, height);\r\n }\r\n\r\n // 3) put all layout layers\r\n for (const loadedImage of images) {\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && backgroundLayers.every(layer => layer.image !== loadedImage.src)) {\r\n if (layer.cropCoords) {\r\n canvasObject3.backCtx.clearRect(0, 0, maxWidth, maxHeight);\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasObject3.backCtx.drawImage(loadedImage, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n await canvasObject1.backCtx.drawImage(canvasObject3.canvas, 0, 0, maxWidth, maxHeight,0, 0, width, height);\r\n // } else if (loadedImage.layerDimensions) {\r\n // console.log(\"loadedImage layerDimensions\", loadedImage.layerDimensions, loadedImage.src);\r\n // const dim = loadedImage.layerDimensions;\r\n // // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // canvasObject1.backCtx.drawImage(loadedImage, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // } else if (loadedImage.coords) {\r\n // const min_x = width*loadedImage.coords.min_x;\r\n // const min_y = height*loadedImage.coords.min_y;\r\n // canvasObject1.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } else {\r\n loadedImage.width = width;\r\n loadedImage.height = height;\r\n await canvasObject1.backCtx.drawImage(loadedImage, 0, 0, width, height);\r\n }\r\n if (Misc.isMobile() && IS_LIXIL_UI) { // we have to add some time for mobile safari, because of the process stuck\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n }\r\n }\r\n }\r\n // return canvas.toDataURL('image/png') // the size is 5.8Mb -- too much, let's use jpeg - it's only 600Kb\r\n return canvasObject1.canvas.toDataURL(\"image/jpeg\", quality)\r\n};\r\n\r\nconst getSubscriptionThumbnail = () => {\r\n const fabricatorState = store.getState().fabricatorState;\r\n if (fabricatorState.fabricatorSubscriptions) {\r\n let thumbnail = \"\";\r\n fabricatorState.fabricatorSubscriptions.forEach((subscription) => {\r\n if (subscription.thumbnail) {\r\n thumbnail = subscription.thumbnail\r\n }\r\n });\r\n return thumbnail\r\n }\r\n return \"\"\r\n}\r\n\r\n/**\r\n * A PROMISE! Returns the whole canvas image\r\n * @param layout\r\n * @param size\r\n * @param quality {number}\r\n * @param useNewEnhance {boolean}\r\n */\r\nexport const getImagePromiseFromLayout = (layout, size = null, quality = 0.7, useNewEnhance = false) => {\r\n if (!layout) {\r\n return Promise.resolve(getSubscriptionThumbnail())\r\n }\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n\r\n const layers = layout.getLayers(showPlaceHolders, true);\r\n if (!layers.length) {\r\n return Promise.resolve(getSubscriptionThumbnail())\r\n }\r\n\r\n const backGroundLayers = getBackgroundLayers(layers, layout);\r\n let imagesPromise = new Promise((resolve) => {\r\n let cnt = 0;\r\n const images = [];\r\n const errorImages = [];\r\n layers.forEach((layer) => {\r\n const image = new Image();\r\n image.crossOrigin = 'Anonymous';\r\n image.layerDimensions = layer.layerDimensions || null;\r\n image.coords = layer.coords || null;\r\n images.push(image);\r\n image.onload = () => {\r\n cnt++;\r\n if (cnt === layers.length) {\r\n resolve(finishDraw(images, errorImages, layers, size, backGroundLayers, quality, useNewEnhance))\r\n }\r\n };\r\n image.onerror = () => {\r\n //display error\r\n console.error('Coudn\\'t load image:', image.src);\r\n cnt++;\r\n errorImages.push(image.src);\r\n if (cnt === layers.length) {\r\n resolve(finishDraw(images, errorImages, layers, size, backGroundLayers, quality, useNewEnhance))\r\n }\r\n };\r\n try {\r\n image.src = layer.image;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply image src', layer.image);\r\n }\r\n });\r\n });\r\n return imagesPromise.then(response => response)\r\n};\r\n\r\n/**\r\n * @param layers {array}\r\n * @param layout {object}\r\n * @param newLayoutType {boolean}\r\n * @returns layersArray {array}\r\n */\r\nexport const getBackgroundLayers = (layers, layout, newLayoutType = false) => {\r\n if ((layout && layout.isNewLayout) || newLayoutType) {\r\n return layers.filter((layer) => layer.zIndex >= 50000)\r\n }\r\n if (!layout) { // just in case\r\n return []\r\n }\r\n const name = layout.getCurrentLayoutName();\r\n return layers.filter((layer) => {\r\n return layout.zIndexes[name] && layout.zIndexes[name].Background &&\r\n Object.values(layout.zIndexes[name].Background).some(zIndex => zIndex === layer.zIndex);\r\n })\r\n};\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {setCountertopsApplyTo, setCountertopsApplyToBathroom} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport Navigation from \"../../visComponents/navigation/navigation\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport store from \"../../../store\";\r\nimport {COUNTERTOP_GROUP} from \"../core/constants\";\r\nimport UiSelect from \"../../ui/select\";\r\nimport Analytics from '../../../analytics';\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {featureHasSelectedFilters, getAllFeatureFilters, getFilterGroupValues} from \"../../../misc/utils\";\r\n\r\nconst getIsBathroom = () => {\r\n return getCommonVisualizerType() === \"bathroom\"\r\n};\r\n\r\nclass CountertopSwitchers extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n isMaterials: PropTypes.bool,\r\n showAsDropdown: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n this.setToggledByUserProperty(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeSubPart.partId !== this.props.activeSubPart.partId) {\r\n this.setToggledByUserProperty(nextProps);\r\n }\r\n }\r\n\r\n setToggledByUserProperty = (props) => {\r\n const currentCategoryPartId = props.activeSubPart.partId;\r\n\r\n const isBathroom = getIsBathroom();\r\n\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n\r\n COUNTERTOPGROUPS.forEach(partId => {\r\n if (partId === currentCategoryPartId) {\r\n if (COUNTERTOPGROUPS.some(newPartId => {\r\n return (newPartId !== currentCategoryPartId) && !applyTo[newPartId].includes(currentCategoryPartId)\r\n })) {\r\n props.activeSubPart.toggleSwitchedOffByUser = true;\r\n }\r\n } else {\r\n if (!applyTo[partId].includes(currentCategoryPartId)) {\r\n const neededSubPart = getCurrentLayout().getSubPartByPartId(partId);\r\n if (neededSubPart) {\r\n neededSubPart.part.toggleSwitchedOffByUser = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n getUpdatedCountertopSwitcherButtons = (partId) => {\r\n const applyTo = getIsBathroom() ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n let countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n countertopsApplyTo.push(partId)\r\n }\r\n let countertopsApplyTo2 = applyTo[partId];\r\n const existingIndex2 = countertopsApplyTo2.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === this.props.activeSubPart.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo2.splice(existingIndex2, 1)\r\n } else {\r\n countertopsApplyTo2.push(this.props.activeSubPart.partId)\r\n }\r\n this.setToggleOffProperies(partId, countertopsApplyTo, countertopsApplyTo2);\r\n return {\r\n [this.props.activeSubPart.partId]: countertopsApplyTo,\r\n [partId]: countertopsApplyTo2\r\n }\r\n };\r\n\r\n static updateCountertopSwitcherButtons = (partId, currentGroupPartId, propsCountertopsApplyTo = {}) => {\r\n let countertopsApplyTo = propsCountertopsApplyTo[currentGroupPartId];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n countertopsApplyTo.push(partId)\r\n }\r\n let countertopsApplyTo2 = propsCountertopsApplyTo[partId];\r\n const existingIndex2 = countertopsApplyTo2.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === currentGroupPartId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo2.splice(existingIndex2, 1)\r\n } else {\r\n countertopsApplyTo2.push(currentGroupPartId)\r\n }\r\n const setApplyTo = getIsBathroom() ? setCountertopsApplyToBathroom : setCountertopsApplyTo;\r\n store.dispatch(setApplyTo({\r\n [currentGroupPartId]: countertopsApplyTo,\r\n [partId]: countertopsApplyTo2\r\n }));\r\n };\r\n\r\n setToggleOffProperies = (partId, countertopsApplyTo, countertopsApplyTo2) => {\r\n this.props.activeSubPart.toggleSwitchedOffByUser = !countertopsApplyTo.includes(partId);\r\n const neededSubPart = getCurrentLayout().getSubPartByPartId(partId);\r\n if (neededSubPart) {\r\n neededSubPart.part.toggleSwitchedOffByUser = !countertopsApplyTo2.includes(this.props.activeSubPart.partId);\r\n }\r\n };\r\n\r\n toggleCountertopsApplyTo = (partId) => {\r\n Analytics.sendClickEvent('countertop-apply-to-' + partId);\r\n const setApplyTo = getIsBathroom() ? this.props.setCountertopsApplyToBathroom : this.props.setCountertopsApplyTo;\r\n setApplyTo(this.getUpdatedCountertopSwitcherButtons(partId));\r\n };\r\n\r\n getButtonName = (partId, layout) => {\r\n const {intl, fabricatorData} = this.props;\r\n if (intl.locale !== \"en-EN\") {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n return getFeatureGroupName(featureGroup, intl, fabricatorData)\r\n }\r\n }\r\n switch (partId) {\r\n case \"countertop\":\r\n case \"vanity_countertop\":\r\n return \"countertop\";\r\n case \"backsplash\":\r\n case \"vanity_backsplash\":\r\n return \"backsplash\";\r\n case \"center_island_countertop\":\r\n return \"center island\";\r\n default:\r\n return \"\"\r\n }\r\n };\r\n\r\n static checkForTileBacksplash = (clickedFeature) => {\r\n if (getIsBathroom() || (clickedFeature.partId !== \"backsplash\")) {\r\n return false\r\n }\r\n const {filterState} = store.getState();\r\n if (!filterState || !Array.isArray(filterState.filterGroups)) {\r\n return false\r\n }\r\n const typeGroup = filterState.filterGroups.find(group => group.name === \"Type\");\r\n if (!typeGroup || !typeGroup.id || !typeGroup.values) {\r\n return false\r\n }\r\n const featureFilters = getAllFeatureFilters(clickedFeature);\r\n if (!featureFilters || !Array.isArray(featureFilters[typeGroup.id])) {\r\n return false\r\n }\r\n return [\"Tile\", \"Mosaic\", \"Linear Mosaic\", \"Mosaic Tiles\"].some(filterName => {\r\n const tileFilterValue = typeGroup.values.find(val => val.value === filterName);\r\n return tileFilterValue && featureFilters[typeGroup.id].includes(tileFilterValue.id)\r\n })\r\n }\r\n\r\n static applyAllCountertops = (navigationItemPart, ignoreLocked, passedArrayApplyTo = null, setCurrentFeature = false) => {\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const propsCountertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n const clickedPartId = navigationItemPart.partId;\r\n const layout = getCurrentLayout();\r\n const countertopsApplyTo = passedArrayApplyTo\r\n || propsCountertopsApplyTo[clickedPartId] ? [...propsCountertopsApplyTo[clickedPartId]] : [];\r\n const existingIndex = countertopsApplyTo.findIndex(countertopsApplyToPartId => countertopsApplyToPartId === clickedPartId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo.splice(existingIndex, 1); // remove already clicked partId\r\n }\r\n const missingFeatures = [];\r\n layout.getFeatures().forEach(parentGroup => {\r\n let relatedItems = parentGroup.relatedItems;\r\n relatedItems.forEach((relatedItem) => {\r\n const currentPartId = relatedItem.partId;\r\n if (COUNTERTOPGROUPS.includes(currentPartId) && (currentPartId !== clickedPartId)\r\n && (countertopsApplyTo.includes(relatedItem.partId) || !relatedItem.toggleSwitchedOffByUser)) {\r\n const navigationItemName = navigationItemPart.getCountertopGroupsSplittedFeatureName();\r\n if (document.kvConfig.toolVersion !== 4) {\r\n const {navigationState} = store.getState();\r\n if (!navigationState.useFeaturesLightRequest.countertops\r\n && (!Array.isArray(relatedItem.alreadyRequestedFeatureNames) || !relatedItem.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n // we should request every time! yes, because they have different manufacturers, and the same name\r\n missingFeatures.push({relatedItem, navigationItemName, ignoreLocked, fromFeature: navigationItemPart});\r\n return false\r\n }\r\n }\r\n let neededFeature = CountertopSwitchers.getNeededFeatureFromNavItems(navigationItemPart, relatedItem);\r\n if (!neededFeature && (document.kvConfig.visualizerType === \"Kitchen\")\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\") && (currentPartId === \"center_island_countertop\")) {\r\n neededFeature = relatedItem.featuresList[\"LShapeWithPeninsulaWithIsland\"]\r\n && relatedItem.featuresList[\"LShapeWithPeninsulaWithIsland\"].find((feature) => {\r\n const featureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return featureName === navigationItemName\r\n });\r\n if (neededFeature) {\r\n neededFeature = {part: neededFeature}\r\n }\r\n }\r\n if (neededFeature && !neededFeature.part.notAvailableInVisualizer) {\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n neededFeature.part.clickFromAllWalls(ignoreLocked);\r\n if (!relatedItem.toggleSwitchedOffByUser && !countertopsApplyTo.includes(currentPartId)) {\r\n CountertopSwitchers.updateCountertopSwitcherButtons(currentPartId, clickedPartId, propsCountertopsApplyTo);\r\n }\r\n } else {\r\n if (CountertopSwitchers.checkForTileBacksplash(navigationItemPart)) {\r\n return false\r\n }\r\n missingFeatures.push({relatedItem, navigationItemName, ignoreLocked, fromFeature: navigationItemPart})\r\n }\r\n }\r\n })\r\n });\r\n return CountertopSwitchers.getMissingFeaturesAndClickThem(missingFeatures, navigationItemPart, setCurrentFeature);\r\n };\r\n\r\n static getNeededFeatureFromNavItems = (fromFeature, featureGroup) => {\r\n let navItems;\r\n const isNewKitchen = (document.kvConfig.toolVersion !== 4);\r\n const isNewKitchenBacksplash = featureGroup.partId === \"backsplash\" && isNewKitchen;\r\n navItems = featureGroup.navigationSubItems();\r\n const navigationItemName = fromFeature.getCountertopGroupsSplittedFeatureName();\r\n let matchingFeatures = navItems.filter(navFeature => {\r\n if (navFeature.part.notAvailableInVisualizer) {\r\n return false\r\n }\r\n const featureName = navFeature.part.getSplittedFeatureName();\r\n const featureName2 = navFeature.part.getCountertopGroupsSplittedFeatureName();\r\n return featureName && (featureName === navigationItemName || featureName2 === navigationItemName)\r\n });\r\n if (matchingFeatures.length > 1 && isNewKitchen) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const manufacturerFilterGroup = filterGroups.find(group => (group.name || \"\").trim() === \"Manufacturer\");\r\n if (manufacturerFilterGroup) {\r\n const featureManValues = getFilterGroupValues(fromFeature, manufacturerFilterGroup);\r\n if (featureManValues && featureManValues.length) {\r\n const withSameManufacturerFeatures = matchingFeatures.filter(navItem => featureHasSelectedFilters(navItem.part, [{\r\n filterGroupId: manufacturerFilterGroup.id,\r\n filterId: featureManValues[0],\r\n }]));\r\n if (withSameManufacturerFeatures.length) {\r\n console.log(\"withSameManufacturerFeatures FOUBD!!\", withSameManufacturerFeatures);\r\n matchingFeatures = withSameManufacturerFeatures;\r\n }\r\n }\r\n }\r\n }\r\n if (isNewKitchenBacksplash) {\r\n const currentHeight = featureGroup.getCurrentActiveFeatureType();\r\n if (currentHeight) {\r\n const sameHeight = matchingFeatures.filter(navItem => featureGroup.getFeatureBacksplashType(navItem.part) === currentHeight);\r\n if (sameHeight.length) {\r\n console.log(\"Same Height Found\", sameHeight);\r\n return sameHeight[0]\r\n }\r\n }\r\n }\r\n return matchingFeatures[0] || null\r\n }\r\n\r\n static getMissingFeaturesAndClickThem = (missingFeatures, navigationItemPart, setCurrentFeature = false) => {\r\n if (missingFeatures.length) {\r\n const isBathroom = getIsBathroom();\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const promises = missingFeatures.map((missingFeatureObject) => {\r\n const relatedItem = missingFeatureObject.relatedItem;\r\n return Navigation.searchFeaturesByName(relatedItem, missingFeatureObject.navigationItemName)\r\n .then(response => {\r\n function turnOffToggles() { // turn off the toggles if feature isn't found\r\n const navItemParent = navigationItemPart.getParent();\r\n if (!navItemParent.toggleSwitchedOffByUser) { // current category\r\n let countertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n const existingIndex = countertopsApplyTo[navigationItemPart.partId].findIndex(countertopsApplyToPartId => countertopsApplyToPartId === relatedItem.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo[navigationItemPart.partId].splice(existingIndex, 1);\r\n }\r\n if (!relatedItem.toggleSwitchedOffByUser) { // turn off the toggles if feature isn't found (mirrored category)\r\n const existingIndex = countertopsApplyTo[relatedItem.partId].findIndex(countertopsApplyToPartId => countertopsApplyToPartId === navigationItemPart.partId);\r\n if (existingIndex > -1) {\r\n countertopsApplyTo[relatedItem.partId].splice(existingIndex, 1);\r\n }\r\n }\r\n const setApplyTo = isBathroom ? setCountertopsApplyToBathroom : setCountertopsApplyTo;\r\n store.dispatch(setApplyTo(countertopsApplyTo));\r\n }\r\n }\r\n if (response && response.length) {\r\n let neededFeature = CountertopSwitchers.getNeededFeatureFromNavItems(missingFeatureObject.fromFeature, relatedItem);\r\n if (neededFeature) {\r\n let countertopsApplyTo = store.getState().navigationState[\r\n isBathroom ? \"countertopsApplyToBathroom\" : \"countertopsApplyTo\"\r\n ];\r\n if (setCurrentFeature) {\r\n relatedItem.activeFeatureBeforeAllWalls = relatedItem.activeFeature;\r\n }\r\n neededFeature.part.clickFromAllWalls(missingFeatureObject.ignoreLocked);\r\n if (!relatedItem.toggleSwitchedOffByUser && !countertopsApplyTo[navigationItemPart.partId].includes(relatedItem.partId)) {\r\n CountertopSwitchers.updateCountertopSwitcherButtons(relatedItem.partId, navigationItemPart.partId, countertopsApplyTo, false);\r\n }\r\n } else {\r\n turnOffToggles()\r\n }\r\n } else {\r\n turnOffToggles()\r\n }\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n relatedItem.alreadyRequestedFeatureNames.push(missingFeatureObject.navigationItemName);\r\n return response\r\n });\r\n });\r\n return Promise.all(promises)\r\n .then(() => {\r\n window.requestInProcess = false;\r\n if (document.kvConfig.toolVersion !== 4) {\r\n loaderDisable();\r\n return\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n store.dispatch(updateCanvasCount());\r\n setTimeout(() => {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n loaderDisable();\r\n }, 0)\r\n // forceUpdate if needed\r\n });\r\n }\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.activeSubPart.partId === \"backsplash\") {\r\n if (this.props.windowWidth < 900) {\r\n return \r\n } else {\r\n return \r\n }\r\n } else {\r\n if (this.props.windowWidth < 620) {\r\n return \r\n } else if (this.props.windowWidth < 680) {\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n };\r\n\r\n buttonIsDisabled = (partId) => {\r\n const layout = getCurrentLayout();\r\n return this.props.activeSubPart.partId === partId\r\n || (document.kvConfig.visualizerType === \"Kitchen\" && partId === \"center_island_countertop\"\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\"));\r\n }\r\n\r\n renderDropDown = () => {\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n const countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n\r\n if (!countertopsApplyTo) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n \r\n {COUNTERTOPGROUPS.map(partId => {\r\n const disabledButton = this.buttonIsDisabled(partId);\r\n return (\r\n
  • \r\n disabledButton ? false : this.toggleCountertopsApplyTo(partId)}/>\r\n disabledButton ? false : this.toggleCountertopsApplyTo(partId)}>\r\n {this.getButtonName(partId, layout)}\r\n \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n\r\n if (this.props.showAsDropdown) {\r\n return this.renderDropDown()\r\n }\r\n\r\n const isBathroom = getIsBathroom();\r\n const COUNTERTOPGROUPS = isBathroom ? COUNTERTOP_GROUP_BATHROOM : COUNTERTOP_GROUP;\r\n const applyTo = isBathroom ? this.props.countertopsApplyToBathroom : this.props.countertopsApplyTo;\r\n const countertopsApplyTo = applyTo[this.props.activeSubPart.partId];\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n
    \r\n
    Apply to
    \r\n
      \r\n {COUNTERTOPGROUPS.map(partId => {\r\n const hideButton = this.buttonIsDisabled(partId);\r\n return hideButton ? null : (\r\n
    • this.toggleCountertopsApplyTo(partId)}>\r\n \r\n {this.getButtonName(partId, layout)}\r\n
      \r\n \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n countertopsApplyToBathroom: store.navigationState.countertopsApplyToBathroom,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setCountertopsApplyTo,\r\n setCountertopsApplyToBathroom\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(CountertopSwitchers)\r\n)\r\n","import React, {PureComponent} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { setExpandedFilters, setSelectedFilters, showFilters } from \"../../../../actions/actionFunctions\";\r\nimport FiltersBody from \"./filtersBody\";\r\n\r\nclass FiltersClass extends PureComponent {\r\n\r\n static propTypes = {\r\n id: PropTypes.string.isRequired,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n childItem: PropTypes.object\r\n };\r\n\r\n blurClickSet = false;\r\n\r\n componentDidMount() {\r\n this.props.setSelectedFilters([]); // reset filters on stones & color step\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.childItem && (!this.props.childItem\r\n || (this.props.childItem && nextProps.childItem.text !== this.props.childItem.text))) {\r\n this.props.setSelectedFilters([]);\r\n this.props.setExpandedFilters([]);\r\n }\r\n if (nextProps.visible && !this.blurClickSet) {\r\n this.blurClickSet = true;\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n }\r\n }\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('[class*=\"filters\"]') && !e.target.closest(\".materials-button--search\") && this.props.id === this.props.activeFilterId) {\r\n this.props.showFilters(false);\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n this.blurClickSet = false;\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.props.visible && this.props.childItem ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeFilterId: store.filterState.filterId,\r\n visible: store.filterState.showFilters,\r\n filterVisible: store.filterState.filterVisible,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setExpandedFilters,\r\n showFilters,\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FiltersClass);\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n Layout2: 2,\r\n Layout41: 41,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n Layout2: \"Layout2\",\r\n Layout41: \"Layout41\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n \"Layout2\",\r\n \"Layout41\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout41\",\r\n \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const DECORS_MAX = 10;\r\n\r\nexport const SLAT_WALL_POSITIONS = [\"S1\",\"S2\",\"S3\",\"S4\"];\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setEmployeesList = (employeesList) => ({\r\n type: types.SET_EMPLOYEES_LIST,\r\n payload: {employeesList}\r\n});\r\n\r\nexport const setAlreadyRegisteredUserInfo = (alreadyRegisteredUserInfo) => ({\r\n type: types.SET_ALREADY_REGISTERED_USER,\r\n payload: {alreadyRegisteredUserInfo}\r\n});\r\n\r\nexport const setLeadCaptureClickCount = (leadCaptureClickCount) => ({\r\n type: types.SET_LEAD_CAPTURE_CLICK_COUNT,\r\n payload: {leadCaptureClickCount}\r\n});\r\n\r\nexport const setUserPopupContent = (userPopupContent) => ({\r\n type: types.SET_USER_POPUP_CONTENT,\r\n payload: {userPopupContent}\r\n});\r\n\r\nexport const setUserTwoFa = (userTwoFa) => ({\r\n type: types.SET_USER_TWO_FA,\r\n payload: {userTwoFa}\r\n});\r\n\r\nexport const setUserOptIn = (optIn) => ({\r\n type: types.SET_USER_OPT_IN,\r\n payload: {optIn}\r\n});\r\n","import {getIntersectCordsBetweenLines, getMidPoint, getPointDistance} from \"./sqftHelper\";\r\nimport polygonClipping from \"polygon-clipping\";\r\n\r\n/**\r\n * Get point position left or right from the line\r\n * if D = 0 - then searchedPoint is on the line\r\n * if D < 0 - then searchedPoint is on the left from the line\r\n * if D > 0 - then searchedPoint is on the right from the line\r\n * @param linePoint1 {{x: int, y: int}}\r\n * @param linePoint2 {{x: int, y: int}}\r\n * @param searchedPoint {{x: int, y: int}}\r\n */\r\nexport const getThePositionOfAPointToTheLeftOrRightOfALine = (linePoint1, linePoint2, searchedPoint) => {\r\n return (searchedPoint.x - linePoint1.x) * (linePoint2.y - linePoint1.y) - (searchedPoint.y - linePoint1.y) * (linePoint2.x - linePoint1.x)\r\n}\r\n\r\nfunction crossProduct(ax, ay, bx, by) {\r\n return ax * by - ay * bx;\r\n}\r\n\r\nfunction direction(ax, ay, bx, by, cx, cy) {\r\n return crossProduct(cx - ax, cy - ay, bx - ax, by - ay);\r\n}\r\n\r\nfunction onSegment(ax, ay, bx, by, cx, cy) {\r\n const withinX = (ax <= cx && cx <= bx) || (ax >= cx && cx >= bx);\r\n const withinY = (ay <= cy && cy <= by) || (ay >= cy && cy >= by);\r\n return withinX && withinY;\r\n}\r\n\r\n/**\r\n * Tests if line a-b intersects with line c-d, allow overlap will return false if lines are over each other\r\n * @param ax\r\n * @param ay\r\n * @param bx\r\n * @param by\r\n * @param cx\r\n * @param cy\r\n * @param dx\r\n * @param dy\r\n * @param allowOverlap\r\n */\r\nexport const getIntersectionCordsV2 = (ax, ay, bx, by, cx, cy, dx, dy, allowOverlap = true) => {\r\n const d1 = direction(ax, ay, bx, by, cx, cy);\r\n const d2 = direction(ax, ay, bx, by, dx, dy);\r\n const d3 = direction(cx, cy, dx, dy, ax, ay);\r\n const d4 = direction(cx, cy, dx, dy, bx, by);\r\n\r\n if (d1 * d2 < 0 && d3 * d4 < 0) {\r\n const A1 = by - ay;\r\n const B1 = ax - bx;\r\n const C1 = A1 * ax + B1 * ay;\r\n const A2 = dy - cy;\r\n const B2 = cx - dx;\r\n const C2 = A2 * cx + B2 * cy;\r\n\r\n const det = A1 * B2 - A2 * B1;\r\n if (det === 0) { // Collinear lines\r\n return null;\r\n } else {\r\n const x = (B2 * C1 - B1 * C2) / det;\r\n const y = (A1 * C2 - A2 * C1) / det;\r\n return [x, y];\r\n }\r\n }\r\n\r\n if (!allowOverlap && d1 === 0 && d2 === 0 && (onSegment(ax, ay, bx, by, cx, cy) || onSegment(ax, ay, bx, by, dx, dy))) {\r\n return null; //overlap each other\r\n }\r\n\r\n if ((d1 === 0 && onSegment(ax, ay, bx, by, cx, cy)) ||\r\n (d2 === 0 && onSegment(ax, ay, bx, by, dx, dy)) ||\r\n (d3 === 0 && onSegment(cx, cy, dx, dy, ax, ay)) ||\r\n (d4 === 0 && onSegment(cx, cy, dx, dy, bx, by))) {\r\n return null; //overlap only in one point\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Define a function to calculate the cross product of two vectors in 2D.\r\nexport function crossProduct2D(vectorA, vectorB) {\r\n // Calculate the cross product. Since the vectors are in 2D, the cross product will be a scalar.\r\n // vectorA.x * vectorB.y - vectorA.y * vectorB.x gives the Z component of the 3D cross product.\r\n return vectorA.x * vectorB.y - vectorA.y * vectorB.x;\r\n}\r\n\r\n/**\r\n * Finds the line in the `lines` array that is closest to referenceLine\r\n * and intersects the perpendicular line drawn from midpoint of referenceLine.\r\n *\r\n * @param {Line} referenceLine The line from which the perpendicular is drawn.\r\n * @param {Line[]} lines The array of lines to search in.\r\n * @return {{Line, point} | null} The found line or null if no line is found.\r\n */\r\nexport function findClosestIntersectingPointAndLine(referenceLine, lines) {\r\n // Find the perpendicular line to referenceLine\r\n const perpendicularVector = getPerpendicularMidpointVector(referenceLine);\r\n\r\n // Find all intersection points of the perpendicular line with the lines in the array\r\n const intersectionPointsAndLines = [];\r\n for (const line of lines) {\r\n // skip referenceLine\r\n if (line.id === referenceLine.id) {\r\n continue\r\n }\r\n //const intersectionPoint = getVectorIntersectionPoint(perpendicularVector, line);\r\n const intersectionPoint = getIntersectCordsBetweenLines(perpendicularVector.from, perpendicularVector.to, line.from, line.to, true ,true);\r\n\r\n if (intersectionPoint) {\r\n intersectionPointsAndLines.push({\r\n line,\r\n point: intersectionPoint,\r\n });\r\n }\r\n }\r\n\r\n return getClosestLineAndIntersectionPoint(referenceLine, intersectionPointsAndLines)\r\n}\r\n\r\n/**\r\n * Finds the line in the `lines` array that is closest to referenceLine\r\n * and intersects the perpendicular line drawn from midpoint of referenceLine.\r\n *\r\n * @return {{Line, point} | null} The found line or null if no line is found.\r\n * @param line\r\n * @param intersectionPointsAndLines\r\n */\r\nexport const getClosestLineAndIntersectionPoint = (line, intersectionPointsAndLines) => {\r\n let closestIntersectionPointAndLine = null;\r\n let minDistance = Infinity;\r\n for (const intersection of intersectionPointsAndLines) {\r\n const midPoint = getMidPoint(line.from, line.to);\r\n const distance = getPointDistance(midPoint, intersection.point);\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closestIntersectionPointAndLine = intersection;\r\n }\r\n }\r\n\r\n return closestIntersectionPointAndLine;\r\n}\r\n\r\nexport const getPerpendicularMidpointVector = (line) => {\r\n const midPoint = getMidPoint(line.from, line.to);\r\n const vector = {\r\n x: line.from.y - line.to.y, // Изменение координат Y для получения перпендикуляра\r\n y: line.to.x - line.from.x, // Изменение координат X для получения перпендикуляра\r\n };\r\n\r\n // Вектор, начинающийся в серединной точке и проходящий через нее\r\n return {\r\n from: midPoint,\r\n to: {\r\n x: midPoint.x + vector.x,\r\n y: midPoint.y + vector.y,\r\n },\r\n };\r\n}\r\n\r\n// Function to find the convex hull using Graham's algorithm\r\nexport const convexHull = (points) => {\r\n // Sort points by Y (ascending) and then by X\r\n points.sort((a, b) => a.y === b.y ? a.x - b.x : a.y - b.y);\r\n // Function for calculating rotation: >0 if CCW, <0 if CW, 0 if collinear\r\n const cross = (o, a, b) => (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);\r\n\r\n const lower = [];\r\n for (let i = 0; i < points.length; i++) {\r\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) {\r\n lower.pop();\r\n }\r\n lower.push(points[i]);\r\n }\r\n\r\n const upper = [];\r\n for (let i = points.length - 1; i >= 0; i--) {\r\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) {\r\n upper.pop();\r\n }\r\n upper.push(points[i]);\r\n }\r\n\r\n // Deleting the last point of each half-shell (it is duplicated)\r\n lower.pop();\r\n upper.pop();\r\n\r\n // Concatenation of lower and upper shell\r\n return lower.concat(upper);\r\n}\r\n\r\n/////////////////////////////////////////////////////////////\r\n// function buildGraph(shapes) {\r\n// const graph = new Map();\r\n//\r\n// // Создаем узлы графа для каждой уникальной точки\r\n// for (const shape of shapes) {\r\n// for (let point of shape) {\r\n// point = roundPoint(point); // округляем точку\r\n// const key = `${point.x},${point.y}`;\r\n// if (!graph.has(key)) {\r\n// graph.set(key, {\r\n// ...point,\r\n// edges: new Set()\r\n// });\r\n// }\r\n// }\r\n// }\r\n//\r\n// // Добавляем рёбра между точками каждого шейпа\r\n// for (const shape of shapes) {\r\n// for (let i = 0; i < shape.length; i++) {\r\n// const current = roundPoint(shape[i]);\r\n// const next = roundPoint(shape[(i + 1) % shape.length]); // замкнутый контур\r\n// const currentKey = `${current.x},${current.y}`;\r\n// const nextKey = `${next.x},${next.y}`;\r\n//\r\n// graph.get(currentKey).edges.add(nextKey);\r\n// graph.get(nextKey).edges.add(currentKey);\r\n// }\r\n// }\r\n//\r\n// return graph;\r\n// }\r\n//\r\n// function findLeftBottomVertex(graph) {\r\n// let minVertex = null;\r\n// let minKey = null;\r\n// graph.forEach((value, key) => {\r\n// if (minVertex === null || value.y < minVertex.y || (value.y === minVertex.y && value.x < minVertex.x)) {\r\n// minVertex = value;\r\n// minKey = key;\r\n// }\r\n// });\r\n// return minKey;\r\n// }\r\n//\r\n// function findContours(shapes) {\r\n// const graph = buildGraph(shapes);\r\n// const startKey = findLeftBottomVertex(graph);\r\n// let currentKey = startKey;\r\n// let previousKey = null;\r\n// const result = [];\r\n//\r\n// do {\r\n// result.push(currentKey.split(',').map(Number)); // Добавляем текущую точку в контур\r\n// const currentVertex = graph.get(currentKey);\r\n// let nextKey = null;\r\n// let maxAngle = -Infinity;\r\n//\r\n// // Перебираем возможные следующие вершины\r\n// currentVertex.edges.forEach(key => {\r\n// if (key !== previousKey) { // Исключаем вернуться назад\r\n// const angle = calculateAngle(currentVertex, graph.get(previousKey), graph.get(key));\r\n// if (angle > maxAngle) {\r\n// maxAngle = angle;\r\n// nextKey = key;\r\n// }\r\n// }\r\n// });\r\n//\r\n// previousKey = currentKey;\r\n// currentKey = nextKey;\r\n// } while (currentKey !== startKey);\r\n//\r\n// return result.map(([x, y]) => ({ x, y }));\r\n// }\r\n//\r\n// function calculateAngle(current, previous, next) {\r\n// if (!previous) return 0; // Если предыдущая точка не задана, угол не вычисляется\r\n//\r\n// const vectorA = { x: current.x - previous.x, y: current.y - previous.y };\r\n// const vectorB = { x: next.x - current.x, y: next.y - current.y };\r\n// const dotProduct = vectorA.x * vectorB.x + vectorA.y * vectorB.y;\r\n// const magnitudeA = Math.sqrt(vectorA.x ** 2 + vectorA.y ** 2);\r\n// const magnitudeB = Math.sqrt(vectorB.x ** 2 + vectorB.y ** 2);\r\n//\r\n// // Косинус угла между векторами\r\n// const cosTheta = dotProduct / (magnitudeA * magnitudeB);\r\n//\r\n// // Возвращаем угол в радианах\r\n// return Math.acos(cosTheta);\r\n// }\r\n\r\n/**\r\n * Returns rounded shape points\r\n * @param {Array} shapesPoints shapes array\r\n * @returns {Array} shapes array with rounded points\r\n */\r\nexport const roundShapesPoints = (shapesPoints) => {\r\n return shapesPoints.map(shape =>\r\n roundShapePoints(shape)\r\n );\r\n};\r\n\r\nexport const roundShapePoints = (shapePoints) => {\r\n return shapePoints.map(point => roundPoint(point));\r\n};\r\n\r\nconst roundPoint = (point) => {\r\n const precision = 1000000; // Round to 6 digits after comma\r\n return {\r\n x: Math.round(point.x * precision) / precision,\r\n y: Math.round(point.y * precision) / precision,\r\n id: point.id\r\n };\r\n};\r\n\r\n// Convert shapes to polygon-clipping format\r\nexport function convertShapesToPolygons(shapesPoints) {\r\n return shapesPoints.map(shapePoints => [convertShapeToPolygon(shapePoints)]);\r\n}\r\n\r\nexport function convertShapeToPolygon(shapePoints) {\r\n return shapePoints.map(point => [point.x, point.y]);\r\n}\r\n\r\n// Convert points from polygon-clipping format to shapes format\r\nexport function convertFromPolygon(polygons) {\r\n if (Array.isArray(polygons) && polygons.length) {\r\n return polygons[0][0].map(coord => ({ x: coord[0], y: coord[1] }));\r\n }\r\n return []\r\n}\r\n\r\n/**\r\n * Function to calculate the outline of multiple shapes.\r\n * Each shape is defined by an array of points, which are connected together.\r\n * The function rounds the coordinates to a certain precision to handle slight mismatches.\r\n *\r\n * @param {Array} shapes - Array of shapes, each shape is an array of points.\r\n * @returns {Array} - Array of points forming the unified outline of the shapes.\r\n */\r\nexport const unifyShapePoints = (shapes) => {\r\n const roundedPoints = roundShapesPoints(shapes);\r\n const polygons = convertShapesToPolygons(roundedPoints);\r\n const result = polygonClipping.union(polygons);\r\n\r\n // console.log(\"roundedPoints\",roundedPoints);\r\n // console.log(\"polygons\",polygons);\r\n // console.log(\"result\",result);\r\n // console.log(\"convertFromPolygon(result);\",convertFromPolygon(result));\r\n return convertFromPolygon(result);\r\n}\r\n\r\n// Function to remove consecutive duplicate points\r\nexport function removeConsecutiveDuplicates(points) {\r\n // Filter the points array to remove consecutive duplicates\r\n return points.filter((point, index, array) => {\r\n // Check if the current point is different from the previous one\r\n if (index === 0) {\r\n return true; // Always include the first point\r\n }\r\n const prevPoint = array[index - 1];\r\n return point.x !== prevPoint.x || point.y !== prevPoint.y;\r\n });\r\n}\r\n\r\nexport function areCollinear(p1, p2, p3, p4) {\r\n // Check that the vector products (p2-p1) and (p4-p3) are equal to zero\r\n return (p2.x - p1.x) * (p4.y - p3.y) === (p4.x - p3.x) * (p2.y - p1.y) &&\r\n ((Math.min(p1.x, p2.x) <= Math.max(p3.x, p4.x) && Math.max(p1.x, p2.x) >= Math.min(p3.x, p4.x)) &&\r\n (Math.min(p1.y, p2.y) <= Math.max(p3.y, p4.y) && Math.max(p1.y, p2.y) >= Math.min(p3.y, p4.y)));\r\n}\r\n\r\nexport function getSegmentIntersectionPoint(seg1, seg2) {\r\n const a1 = seg1.end.y - seg1.start.y;\r\n const b1 = seg1.start.x - seg1.end.x;\r\n const c1 = a1 * seg1.start.x + b1 * seg1.start.y;\r\n\r\n const a2 = seg2.end.y - seg2.start.y;\r\n const b2 = seg2.start.x - seg2.end.x;\r\n const c2 = a2 * seg2.start.x + b2 * seg2.start.y;\r\n\r\n const determinant = a1 * b2 - a2 * b1;\r\n\r\n if (determinant === 0) {\r\n return null;\r\n } else {\r\n const x = (c1 * b2 - c2 * b1) / determinant;\r\n const y = (a1 * c2 - a2 * c1) / determinant;\r\n return { x, y };\r\n }\r\n}\r\n\r\nexport function isPointOnSegment(pt, seg) {\r\n return Math.min(seg.start.x, seg.end.x) <= pt.x && pt.x <= Math.max(seg.start.x, seg.end.x) &&\r\n Math.min(seg.start.y, seg.end.y) <= pt.y && pt.y <= Math.max(seg.start.y, seg.end.y);\r\n}\r\n\r\n/**\r\n * Return the length of the overlap of the segments\r\n */\r\nfunction getOverlapLength(seg1, seg2) {\r\n if (seg1.start.x === seg1.end.x && seg1.start.x === seg2.start.x) {\r\n const sortedY1 = [seg1.start.y, seg1.end.y].sort((a, b) => a - b);\r\n const sortedY2 = [seg2.start.y, seg2.end.y].sort((a, b) => a - b);\r\n\r\n if (sortedY1[1] < sortedY2[0] || sortedY2[1] < sortedY1[0]) {\r\n return 0;\r\n }\r\n\r\n const overlapY = Math.min(sortedY1[1], sortedY2[1]) - Math.max(sortedY1[0], sortedY2[0]);\r\n return overlapY;\r\n }\r\n\r\n if (seg1.start.y === seg1.end.y && seg1.start.y === seg2.start.y) {\r\n const sortedX1 = [seg1.start.x, seg1.end.x].sort((a, b) => a - b);\r\n const sortedX2 = [seg2.start.x, seg2.end.x].sort((a, b) => a - b);\r\n\r\n if (sortedX1[1] < sortedX2[0] || sortedX2[1] < sortedX1[0]) {\r\n return 0;\r\n }\r\n\r\n const overlapX = Math.min(sortedX1[1], sortedX2[1]) - Math.max(sortedX1[0], sortedX2[0]);\r\n return overlapX;\r\n }\r\n\r\n const intersection = getSegmentIntersectionPoint(seg1, seg2);\r\n if (intersection && isPointOnSegment(intersection, seg1) && isPointOnSegment(intersection, seg2)) {\r\n return Math.sqrt(Math.pow(intersection.x - seg1.start.x, 2) + Math.pow(intersection.y - seg1.start.y, 2));\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nexport function areCollinearAndOverlap(p1, p2, p3, p4, minOverlap) {\r\n // Check the collinearity of the segments\r\n if (areCollinear(p1, p2, p3, p4)) {\r\n // If they are collinear, check for minimum overlap\r\n const seg1 = { start: p1, end: p2 };\r\n const seg2 = { start: p3, end: p4 };\r\n const overlapLength = getOverlapLength(seg1, seg2);\r\n\r\n return overlapLength >= minOverlap;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Function for finding a point that is below and to the right of all other points\r\n * @param {Array} points {x, y}\r\n * @returns {Object} Point that is below and to the right of all others\r\n */\r\nexport function findLowestRightmostPoint(points) {\r\n if (!points.length) {\r\n return null;\r\n }\r\n\r\n let resultPoint = points[0];\r\n\r\n for (let i = 1; i < points.length; i++) {\r\n if (points[i].x > resultPoint.x) {\r\n resultPoint = points[i]; // Finding a new point to the right\r\n } else if (points[i].x === resultPoint.x && points[i].y < resultPoint.y) {\r\n resultPoint = points[i]; // If x are equal, choose a lower point\r\n }\r\n }\r\n\r\n return resultPoint;\r\n}\r\n\r\n/**\r\n * Calculate the length of the legs in an isosceles right triangle given the hypotenuse.\r\n * @param {number} hypotenuse - The length of the hypotenuse.\r\n * @returns {number} The length of each leg.\r\n */\r\nexport function calculateLeg(hypotenuse) {\r\n // Calculate the leg length using the relationship derived from Pythagoras' theorem\r\n return hypotenuse / Math.sqrt(2);\r\n}\r\n\r\n\r\n/**\r\n * Get closest point on the line\r\n * @returns {number} The length of each leg.\r\n * @param lineStart\r\n * @param lineEnd\r\n * @param mousePos\r\n */\r\nexport function getClosestPointOnLine(lineStart, lineEnd, mousePos) {\r\n const lineVec = {\r\n x: lineEnd.x - lineStart.x,\r\n y: lineEnd.y - lineStart.y\r\n };\r\n\r\n const lineLen = getPointDistance(lineStart, lineEnd);\r\n const lineUnitVec = {\r\n x: lineVec.x / lineLen,\r\n y: lineVec.y / lineLen\r\n };\r\n\r\n const mouseVec = {\r\n x: mousePos.x - lineStart.x,\r\n y: mousePos.y - lineStart.y\r\n };\r\n\r\n const dotProduct = mouseVec.x * lineUnitVec.x + mouseVec.y * lineUnitVec.y;\r\n const clampedDotProduct = Math.max(0, Math.min(dotProduct, lineLen));\r\n const x = lineStart.x + lineUnitVec.x * clampedDotProduct;\r\n const y = lineStart.y + lineUnitVec.y * clampedDotProduct;\r\n\r\n return {\r\n x: x,\r\n y: y,\r\n };\r\n}\r\n\r\nexport const findTopLeftPoint = (points) => {\r\n return points.reduce((topLeft, point) => {\r\n if (point.y < topLeft.y || (point.y === topLeft.y && point.x < topLeft.x)) {\r\n return point;\r\n }\r\n return topLeft;\r\n }, points[0]);\r\n};\r\n\r\nexport const adjustPointsRelativeToTopLeft = (points, topLeft) => {\r\n return points.map(point => ({\r\n x: point.x - topLeft.x,\r\n y: point.y - topLeft.y\r\n }));\r\n};\r\n\r\nexport const sortPointsClockwise = (points) => {\r\n let topLeft, topRight, bottomLeft, bottomRight;\r\n\r\n // Функция для округления координат\r\n const roundCoordinate = (value, precision = 10) => {\r\n const factor = Math.pow(10, precision); // precision — количество знаков после запятой\r\n return Math.round(value * factor) / factor;\r\n };\r\n\r\n // Округляем координаты точек\r\n const roundedPoints = points.map(point => ({\r\n x: roundCoordinate(point.x),\r\n y: roundCoordinate(point.y)\r\n }));\r\n\r\n // Находим крайние значения для округленных координат\r\n const minX = Math.min(...roundedPoints.map(p => p.x));\r\n const maxX = Math.max(...roundedPoints.map(p => p.x));\r\n const minY = Math.min(...roundedPoints.map(p => p.y));\r\n const maxY = Math.max(...roundedPoints.map(p => p.y));\r\n\r\n // Разделяем точки по их координатам\r\n roundedPoints.forEach(point => {\r\n if (point.x === minX && point.y === minY) {\r\n topLeft = point;\r\n } else if (point.x === maxX && point.y === minY) {\r\n topRight = point;\r\n } else if (point.x === minX && point.y === maxY) {\r\n bottomLeft = point;\r\n } else if (point.x === maxX && point.y === maxY) {\r\n bottomRight = point;\r\n }\r\n });\r\n\r\n // Проверяем, что все точки определены, чтобы не было undefined\r\n if (!topLeft || !topRight || !bottomLeft || !bottomRight) {\r\n console.error(\"Points\", points);\r\n console.error(\"One or more points are undefined\", {topLeft, topRight, bottomLeft, bottomRight});\r\n return null;\r\n }\r\n\r\n // Возвращаем точки в порядке: верхняя левая, верхняя правая, нижняя правая, нижняя левая\r\n return [topLeft, topRight, bottomRight, bottomLeft];\r\n};\r\n\r\nexport function calculatePolygonClippingPolygonArea(polygon) {\r\n if (!polygon || polygon.length === 0) return 0;\r\n\r\n let area = 0;\r\n const coordinates = polygon[0];\r\n\r\n for (let i = 0; i < coordinates.length - 1; i++) {\r\n const [x1, y1] = coordinates[i];\r\n const [x2, y2] = coordinates[i + 1];\r\n area += x1 * y2 - x2 * y1;\r\n }\r\n\r\n return Math.abs(area / 2);\r\n}\r\n\r\nexport function findNearestPoint (targetPoint, points) {\r\n let nearestPoint = null;\r\n let minDistance = Infinity;\r\n\r\n for (const point of points) {\r\n const distance = Math.sqrt(\r\n Math.pow(point.x - targetPoint.x, 2) + Math.pow(point.y - targetPoint.y, 2)\r\n );\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n nearestPoint = point;\r\n }\r\n }\r\n\r\n return nearestPoint;\r\n}\r\n\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../../analytics\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport LookFeatureRemoveButton from \"../../../look/lookNavigation/lookMain/lookFeatureRemoveButton\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport {disableFeature} from \"../../../look/lookNavigation/lookFunctions2\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\n\r\nclass BodyPanelRadio extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n quotingTool: PropTypes.bool,\r\n refreshItems: PropTypes.func,\r\n };\r\n\r\n // componentWillReceiveProps(nextProps) {\r\n // if (nextProps.updateDisableFeatureGroupRadio && !this.props.updateDisableFeatureGroupRadio) {\r\n // this.forceUpdate();\r\n // }\r\n // }\r\n\r\n radioClick = async () => {\r\n const activeSubPart = this.props.activeSubPart;\r\n Analytics.sendClickEvent('disable-toggle-' + activeSubPart.partId);\r\n const layout = getCurrentLayout();\r\n if (!activeSubPart.disabled && activeSubPart.activeFeature && layout.isNewLayout) {\r\n await disableFeature(activeSubPart.activeFeature)\r\n } else {\r\n activeSubPart.disabled = !activeSubPart.disabled;\r\n activeSubPart.disabledClick();\r\n activeSubPart.updateLocalStorage();\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n if (this.props.refreshItems) {\r\n this.props.refreshItems();// update navigation (non compatible)\r\n }\r\n this.forceUpdate();\r\n this.props.updateCanvasCount();\r\n setTimeout(() => {\r\n this.forceUpdate(); // for slow udpates\r\n }, 0)\r\n };\r\n\r\n render() {\r\n const activeSubPart = this.props.activeSubPart;\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n if (this.props.quotingTool) {\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n\r\n const layout = getCurrentLayout();\r\n if (layout.isNewLayout) {\r\n if (!activeSubPart || !activeSubPart.activeFeature) {\r\n return null\r\n }\r\n const text = this.props.isMobile && activeSubPart.partId === \"center_island_cabinet\" && this.props.windowWidth < 800\r\n ? \"radioButton.on\"\r\n : \"radioButtonDisableFeatueGroup1\";\r\n return \r\n }\r\n\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {updateDisableFeatureGroupRadio} = store.navigationState;\r\n const {windowWidth} = store.serverState;\r\n const {canvasCount} = store.bathroomVisualizerState; // to update component when feature is changed\r\n\r\n return {\r\n updateDisableFeatureGroupRadio,\r\n windowWidth,\r\n canvasCount,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanelRadio);\r\n\r\n","import {hashHistory} from \"react-router\";\r\nimport {changeQTRoutePath} from \"../../misc/changeRoutePath\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport store from \"./../../store\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionWindow\r\n} from \"../../actions/actionFunctions\";\r\nimport Config from \"../../config\";\r\nimport {switchToWizardItem} from \"../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport default (cameFromPage, firstCat = false, subPart = null, qtCategoryName = \"\", wizardAllObject = null, stepIndex = 0) => {\r\n const layout = getCurrentLayout();\r\n const state = store.getState();\r\n const {selectionGroup, activePartRelatedItemIndex} = state.selectionState;\r\n const layoutParts = state.stepsState.layoutParts;\r\n const qtActiveCategory = qtCategoryName || (subPart && subPart.part ? subPart.part.qtCategoryName : state.qtState.qtActiveCategory);\r\n\r\n store.dispatch(toggleSelectionWindow(true, selectionGroup || layoutParts[0]));\r\n store.dispatch(toggleBathroomVisualizerOpen(false));\r\n store.dispatch(setCameFromPage(cameFromPage));\r\n\r\n const {wizardList, wizardIsActive} = state.wizardState;\r\n if (wizardAllObject) {\r\n const {wizardItemId, quoteIndex} = wizardAllObject;\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === wizardItemId); // if not found - set default\r\n switchToWizardItem(wizardItem, stepIndex, quoteIndex);\r\n return\r\n } else if (wizardIsActive) {\r\n switchToWizardItem();\r\n return\r\n }\r\n\r\n if (layout.qtCategories) { // set default if index is not matching\r\n let currentActiveCategory = layout.qtCategories.find(qtCat => qtCat.name === qtActiveCategory);\r\n if (subPart) {\r\n if (!currentActiveCategory) { // edge profile cases\r\n currentActiveCategory = layout.qtCategories.find(qtCat => qtCat.subParts.some(sPart => sPart.part.partId === subPart.part.partId));\r\n }\r\n if (!currentActiveCategory) { // edge profile cases\r\n if (Config.isDevMode()) {\r\n console.log(\"NO CATEGORY for feature\", );\r\n }\r\n if (layout.qtCategories.length) {\r\n store.dispatch(setQtActiveCategory(layout.qtCategories[0].name));\r\n store.dispatch(changeActivePartRelatedItemIndex(0));\r\n changeQTRoutePath(layout.qtCategories[0].name, 0);\r\n } else {\r\n if (!window.location.href.includes('materials')) {\r\n hashHistory.push('materials');\r\n }\r\n }\r\n return;\r\n }\r\n const relatedItemIndex = currentActiveCategory.subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partId === subPart.part.partId\r\n });\r\n store.dispatch(setQtActiveCategory(currentActiveCategory.name));\r\n store.dispatch(changeActivePartRelatedItemIndex(relatedItemIndex > -1 ? relatedItemIndex : 0));\r\n changeQTRoutePath(currentActiveCategory.name, relatedItemIndex);\r\n } else if (!currentActiveCategory || !currentActiveCategory.subParts[activePartRelatedItemIndex] || firstCat) {\r\n const qtCategory = layout.qtCategories[0];\r\n store.dispatch(setQtActiveCategory(qtCategory.name));\r\n store.dispatch(changeActivePartRelatedItemIndex(0));\r\n changeQTRoutePath(qtCategory.name, 0);\r\n }\r\n }\r\n\r\n if (!window.location.href.includes('materials')) {\r\n hashHistory.push('materials');\r\n }\r\n\r\n};\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer();\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import * as types from \"./actionTypes\";\r\n\r\n//********** CONTRACT SIGNING *************/\r\nexport const showContractSigning = (show, callback = null) => ({\r\n type: types.SHOW_CONTRACT_SIGNING,\r\n payload: {show, callback}\r\n});\r\n\r\nexport const setAfterContractSignCallback = (afterContractSignCallback) => ({\r\n type: types.SET_AFTER_CONTRACT_SIGN_CALLBACK,\r\n payload: {afterContractSignCallback}\r\n});\r\n\r\nexport const contractSignPostSignature = (contractSignData) => ({\r\n type: types.CONTRACT_SIGNING_POST_SIGNATURE,\r\n payload: contractSignData\r\n});\r\n\r\nexport const showSignaturePad = (show, tag) => ({\r\n type: types.CONTRACT_SIGNING_SHOW_SIGNATURE_PAD,\r\n payload: {show, tag}\r\n});\r\n\r\nexport const setContractsValues = ({contractId, pageIndex, fieldIndex, name, value}) => {\r\n return (dispatch, getState) => {\r\n let {contractsValues} = getState().contractSigningState;\r\n if (!contractId) {\r\n return\r\n }\r\n if (!contractsValues[contractId]) {\r\n contractsValues[contractId] = {}\r\n }\r\n if (!contractsValues[contractId][pageIndex]) {\r\n contractsValues[contractId][pageIndex] = {}\r\n }\r\n contractsValues[contractId][pageIndex][fieldIndex] = {name, value};\r\n dispatch({\r\n type: types.CONTRACT_SIGNING_SET_CONTRACTS_VALUES,\r\n payload: {\r\n contractsValues: {...contractsValues}\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setContractSigningStep = step => ({\r\n type: types.CONTRACT_SIGNING_SET_STEP,\r\n payload: {step}\r\n});\r\n\r\nexport const setContractDocumentForJob = (documentData) => ({\r\n type: types.CONTRACT_SIGNING_JOB_DOCUMENT,\r\n payload: {...documentData}\r\n});\r\n\r\nexport const setContractBlob = (contractBlob) => ({\r\n type: types.SET_CONTRACT_BLOB,\r\n payload: {contractBlob}\r\n});\r\n\r\nexport const restoreContractValues = (pagesCustomFieldsValue, savedInvoiceNumberOfPages, needToUpdateContract, contractsValues = {}) => ({\r\n type: types.CONTRACT_SIGNING_RESTORE_VALUES,\r\n payload: {pagesCustomFieldsValue, savedInvoiceNumberOfPages, needToUpdateContract, contractsValues}\r\n});\r\n\r\nexport const setContractsList = (contractsList) => ({\r\n type: types.CONTRACT_SIGNING_SET_CONTRACTS_LIST,\r\n payload: {contractsList}\r\n});\r\n","import JsonApi from \"../../../api/jsonApi\";\r\nimport {getLocalStorageItem} from \"../../look/lookNavigation/lookFunctions\";\r\nimport store from \"../../../store\";\r\nimport {setContractsList} from \"../../../actions/contractsActions\";\r\n\r\nexport const getContracts = async () => {\r\n const {contractSigningState, fabricatorState} = store.getState();\r\n if (contractSigningState.contractsReceived || !fabricatorState.settings.useContractSigning) {\r\n if (!contractSigningState.contractsReceived) {\r\n store.dispatch(setContractsList([])); // set received property true\r\n }\r\n return\r\n }\r\n try {\r\n const response = await JsonApi.getContractDocuments();\r\n console.log(\"response\", response);\r\n if (response && Array.isArray(response.data)) {\r\n const savedContracts = getLocalStorageItem(\"activeContracts\");\r\n let newOrderedList = response.data\r\n .sort((a, b) => (a.order > b.order) ? 1 : -1)\r\n .map((contract, contractIndex) => {\r\n contract.selected = false; // this is used in the checkbox\r\n contract.order = contractIndex;\r\n if (document.kvConfig.isBackend) {\r\n const fabId = document.kvConfig.userId || \"noFabUser\";\r\n if (savedContracts && savedContracts[fabId] && Array.isArray(savedContracts[fabId])\r\n && savedContracts[fabId].length > 0 && savedContracts[fabId].includes(contract.id)) {\r\n contract.selected = true;\r\n }\r\n } else if (contract.isDefault) { // default is for customer, if it is unchecked - then do not use contract at all\r\n contract.selected = true;\r\n }\r\n if (response.data.length === 1 || (fabricatorState.isAmericanStandard && contractIndex === 0)) {\r\n // We need to always have the spec sheet loading for American standard as the first doc without selecting it\r\n // If there is only one contract - it should be selected by the default\r\n contract.selected = true;\r\n }\r\n return contract;\r\n });\r\n store.dispatch(setContractsList(newOrderedList))\r\n return newOrderedList\r\n } else {\r\n store.dispatch(setContractsList([])); // set received property true\r\n return []\r\n }\r\n } catch (error) {\r\n console.log(\"error\", error);\r\n store.dispatch(setContractsList([])); // set received property true\r\n return []\r\n }\r\n};\r\n\r\nexport const getSelectedContracts = (contractsList) => {\r\n if (!Array.isArray(contractsList) || !contractsList.length) {\r\n return []\r\n }\r\n return contractsList.filter(contract => contract.selected)\r\n}\r\n\r\nexport const shouldUseContractSigning = (fabricatorSettings, allContractsList, withoutContractsCheck = false) => {\r\n if (!fabricatorSettings.useContractSigning) {\r\n return false;\r\n }\r\n if (withoutContractsCheck) {\r\n return true\r\n }\r\n if (!allContractsList) {\r\n const {contractsList} = store.getState().contractSigningState;\r\n allContractsList = contractsList;\r\n }\r\n return getSelectedContracts(allContractsList).length\r\n}\r\n\r\nexport const setContractBlobs = async (contractsList, receiptPagesLength = 0, isOfflineFirstLoad = false) => {\r\n let pagesCount = receiptPagesLength || 1; // start from 1 if receipt is broken\r\n let updatedContractsList = contractsList;\r\n for (const contract of updatedContractsList) {\r\n contract.pagesFrom = 0;\r\n contract.pagesTo = 0;\r\n if (contract.selected || isOfflineFirstLoad) {\r\n const useDocument = contract.documentWithoutTagsUrl || contract.documentUrl; // use without tags! but if not at least something\r\n if (useDocument && !contract.blobUrl) {\r\n const responseFetch = await fetch(useDocument);\r\n const blob = await responseFetch.blob();\r\n contract.blobUrl = URL.createObjectURL(blob);\r\n }\r\n contract.pagesFrom = pagesCount + (receiptPagesLength ? 1 : 0);\r\n pagesCount = pagesCount + contract.pagesCount;\r\n contract.pagesTo = pagesCount + (receiptPagesLength ? 1 : 0);\r\n }\r\n }\r\n if (isOfflineFirstLoad) {\r\n store.dispatch(setContractsList(updatedContractsList))\r\n }\r\n // console.log(\"contractsList\", contractsList);\r\n return {updatedContractsList, totalPages: pagesCount}\r\n}\r\n\r\nexport const getActiveContract = (contractsList, globalContractPage) => {\r\n return contractsList.find(contract => {\r\n return globalContractPage >=contract.pagesFrom && globalContractPage < contract.pagesTo\r\n })\r\n}\r\n\r\nexport const getAllContractsValues = (contractsList, context) => {\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n const activeContract = getActiveContract(selectedContracts, context.globalContractPage);\r\n const activeContractPage = activeContract\r\n ? context.globalContractPage + 1 - activeContract.pagesFrom\r\n : 1;\r\n return {\r\n ...context,\r\n selectedContracts,\r\n activeContract,\r\n activeContractPage\r\n }\r\n}\r\n\r\nexport const changeContractsPage = (newPage, contractsList, context, changeContext) => {\r\n const {receiptPages, activeContract, globalContractPage} = context;\r\n const allValues = getAllContractsValues(contractsList, {...context, globalContractPage: newPage});\r\n // here we set false to show loader while the blob is reloading\r\n const showPage = (allValues.activeContract && activeContract && (allValues.activeContract.blobUrl === activeContract.blobUrl))\r\n || (receiptPages && (newPage <= receiptPages) && (globalContractPage <= receiptPages));\r\n\r\n changeContext({...context, globalContractPage: newPage, showPage});\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport store from \"../store\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {\r\n addToCart, removeFromCart,\r\n setCanvasDimensions,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n updateFabricatorSettings\r\n} from \"../actions/actionFunctions\";\r\nimport ActionTypes from \"./actionTypes\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, getCommonVisualizerType, IS_BATHROOM_OLD_BV_SCENE} from \"../config\";\r\nimport {setVisualizerIsChanging} from \"../actions/serverFunctions\";\r\nimport {\r\n getCurrentQuoteRoomCartItem,\r\n getRoomCartItemForCategoryName,\r\n getRoomNameToCompare\r\n} from \"./categorySwitchingFunctions\";\r\nimport {updateCurrentQuote} from \"./quotesFunctions\";\r\nimport loadVisualizer from \"./loadVisualizer\";\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {\r\n getCorrectedWizardGroupForFeature,\r\n getCurrentGroups,\r\n getDefaultMaterialsWizardItem, getFeatureGroupFromWizardGroup,\r\n showWizardInsteadOfQT\r\n} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {setWizardActiveItem, setWizardIsActive, setWizardSelectedValues} from \"../actions/wizardFunctions\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {getCartItemObject} from \"./helpers\";\r\n\r\nexport const fixVisualizerType = () => {\r\n if (document.kvConfig.toolVersion > 4 || IS_BATHROOM_OLD_BV_SCENE || (document.kvConfig.visualizerType === \"Fireplace\")) {\r\n document.kvConfig.layersSize = \"full_hd\";\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n document.kvConfig.visualizerType = document.kvConfig.toolVersion === 6 ? \"bvLook\" : \"bvScene\";\r\n break;\r\n case \"Kitchen\":\r\n document.kvConfig.visualizerType = \"kvScene\";\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n document.kvConfig.layersSize = \"normal\";\r\n }\r\n}\r\n\r\nexport const hasSubscriptionForRoom = (room) => {\r\n const {fabricatorState} = store.getState();\r\n const neededSubscriptionName = getCommonVisualizerType(room);\r\n return fabricatorState.fabricatorSubscriptions\r\n && fabricatorState.fabricatorSubscriptions.find(subscription => subscription && subscription.service.toLowerCase() === neededSubscriptionName);\r\n}\r\n\r\n/**\r\n * @param newVisualizerType {string}\r\n * @param subscription {object} // subscriptionInterface\r\n * @returns number {number}\r\n */\r\nexport const getToolVersionByVisualizerType = (newVisualizerType, subscription = null) => {\r\n if (newVisualizerType === AVAILABLE_VISUALIZER_TYPES.Fireplace) {\r\n return 5\r\n }\r\n if (subscription && Number.isInteger(subscription.toolVersion)) {\r\n return subscription.toolVersion\r\n }\r\n switch (newVisualizerType) {\r\n case AVAILABLE_VISUALIZER_TYPES.Bathroom:\r\n case AVAILABLE_VISUALIZER_TYPES.Kitchen: {\r\n return 4\r\n }\r\n case AVAILABLE_VISUALIZER_TYPES.bvScene:\r\n case AVAILABLE_VISUALIZER_TYPES.kvScene: {\r\n return 5\r\n }\r\n case AVAILABLE_VISUALIZER_TYPES.bvLook: {\r\n return 6\r\n }\r\n default:\r\n return 4\r\n }\r\n}\r\n\r\n\r\n/**\r\n * @param room {string} roomName\r\n * @param disableLoader {boolean} whether to remove loader or wait on anything else\r\n */\r\nexport const switchToNewVisualizerType = async (room, disableLoader = true) => {\r\n const {fabricatorState, serverState, quotesState, wizardState} = store.getState();\r\n if (!fabricatorState.settings.allowVisualizerSwitching) {\r\n return false\r\n }\r\n const {visualizersLoaded} = serverState;\r\n\r\n const existingSubscription = hasSubscriptionForRoom(room);\r\n if (!existingSubscription) {\r\n return false\r\n }\r\n let oldLayout = getCurrentLayout();\r\n oldLayout.initialized = false; // stop updating old canvas!\r\n loaderEnable();\r\n\r\n const newVisualizerType = getVisualizerTypeFromSubscription(existingSubscription);\r\n\r\n store.dispatch(setVisualizerIsChanging(true));\r\n\r\n await updateCurrentQuote(quotesState.activeQuoteIndex, newVisualizerType, false); // create quote with correct room before switching\r\n\r\n console.log(\"newVisualizerType\", newVisualizerType);\r\n\r\n if (!visualizersLoaded.includes(newVisualizerType)) {\r\n const loaded = await loadVisualizer(newVisualizerType, true);\r\n if (!loaded) {\r\n return false\r\n }\r\n }\r\n if (wizardState.wizardIsActiveObject.hasOwnProperty(newVisualizerType)\r\n && (wizardState.wizardIsActiveObject[newVisualizerType] !== wizardState.wizardIsActive)) {\r\n store.dispatch(setWizardIsActive(wizardState.wizardIsActiveObject[newVisualizerType]));\r\n }\r\n\r\n document.kvConfig.visualizerType = newVisualizerType;\r\n document.kvConfig.toolVersion = getToolVersionByVisualizerType(newVisualizerType, existingSubscription);\r\n fixVisualizerType(); // set new bathroom or kitchen\r\n store.dispatch(setCanvasDimensions()); // update canvas height and width (version 4 <> 5 switch)\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.initialized) {\r\n layout.initialized = true; // start updating the canvas in if was stopped earlier\r\n }\r\n const layoutParts = layout.getFeatures()\r\n .filter(parentGroup => parentGroup.categoryEnabled)\r\n .map((parentGroup) => parentGroup.partName);\r\n\r\n const roomFeatureGroup = layout.getFeatureGroupByPartId(\"room\");\r\n if (roomFeatureGroup) {\r\n const newActiveFeature = roomFeatureGroup.features.find(feature => getRoomNameToCompare(feature).toLowerCase() === existingSubscription.service);\r\n if (newActiveFeature) {\r\n roomFeatureGroup.activeFeature = newActiveFeature; // set it because it will be set in the materials page after switch\r\n\r\n const {quotesState, wizardState, advancedQuotingState, cartState} = store.getState();\r\n const {wizardList, wizardIsActive, allWizardsValues, wizardActiveItem} = wizardState;\r\n const {showAdvancedQuoting} = advancedQuotingState;\r\n const {cartItems} = cartState;\r\n\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const nextWizard = getDefaultMaterialsWizardItem();\r\n if (nextWizard) {\r\n if (!wizardActiveItem || (wizardActiveItem.id !== nextWizard.id)) {\r\n store.dispatch(setWizardActiveItem(nextWizard, quotesState.activeQuoteIndex));\r\n }\r\n const lastSelectedWizardInThisQuote = allWizardsValues.find(wizObject => {\r\n return wizObject.quoteIndex === quotesState.activeQuoteIndex && wizObject.isLastActiveWizard\r\n && nextWizard.id === wizObject.wizardItemId\r\n });\r\n if (!lastSelectedWizardInThisQuote || (Object.keys(lastSelectedWizardInThisQuote.wizardSelectedValues).length <= 1)) {\r\n const wizardActiveStep = 0;\r\n const currentGroups = getCurrentGroups(nextWizard, wizardActiveStep, {});\r\n if (currentGroups[0]) {\r\n const featureGroup = getFeatureGroupFromWizardGroup(currentGroups[0]);\r\n if (featureGroup && (featureGroup.partId === \"room\")) {\r\n store.dispatch(setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup: getCorrectedWizardGroupForFeature(currentGroups[0], newActiveFeature),\r\n selectedFeature: newActiveFeature,\r\n partId: \"room\",\r\n }\r\n }, quotesState.activeQuoteIndex, nextWizard.id));\r\n if (showAdvancedQuoting) {\r\n const selectedQuoteRoomCartItem = getCurrentQuoteRoomCartItem(cartItems, quotesState.activeQuoteIndex);\r\n if (selectedQuoteRoomCartItem) {\r\n store.dispatch(removeFromCart(selectedQuoteRoomCartItem));\r\n }\r\n const roomCartItem = getCartItemObject(newActiveFeature, 1, \"\");\r\n roomCartItem.currentQuote = quotesState.activeQuoteIndex;\r\n roomCartItem.fromWizardId = nextWizard.id;\r\n roomCartItem.fromWizardStep = wizardActiveStep;\r\n roomCartItem.fromWizardGroupId = currentGroups[0].id;\r\n store.dispatch(addToCart([roomCartItem]));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n store.dispatch(setLayoutDataParts(layoutParts));\r\n store.dispatch(setDefaultSelectionGroup(layoutParts[0]));\r\n store.dispatch(updateFabricatorSettings());\r\n\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n\r\n console.log(\"finish visualizer change\", document.kvConfig.visualizerType);\r\n\r\n setTimeout(() => {\r\n store.dispatch(setVisualizerIsChanging(false));\r\n }, 300) // prevent materials page canvas jumping\r\n\r\n if (disableLoader) {\r\n loaderDisable();\r\n } // else we wait in server reducer, when it is added to loaded\r\n return true\r\n}\r\n\r\nexport const getVisualizerTypeFromSubscription = (subscription) => {\r\n const toolVersionToCheck = subscription.toolVersion || 4;\r\n switch (subscription.service) {\r\n case \"Bathroom\":\r\n case \"bathroom\":\r\n return toolVersionToCheck === 6\r\n ? \"bvLook\"\r\n : toolVersionToCheck === 5 ? \"bvScene\" : \"Bathroom\"\r\n case \"Kitchen\":\r\n case \"kitchen\":\r\n return toolVersionToCheck === 5 ? \"kvScene\" : \"Kitchen\"\r\n case \"Fireplace\":\r\n case \"fireplace\":\r\n return \"Fireplace\"\r\n default:\r\n return subscription.service\r\n }\r\n}\r\n\r\n/**\r\n * @param quoteIndex {number}\r\n * @param nextVisualizerType {string}\r\n * @returns {string}\r\n */\r\nexport const getQuoteVisualizerType = (quoteIndex, nextVisualizerType) => {\r\n const {quotesState, cartState, fabricatorState, serverState} = store.getState();\r\n const {cartItems} = cartState;\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n if (fabricatorState.settings.allowVisualizerSwitching) {\r\n const roomCartItem = getCurrentQuoteRoomCartItem(cartItems, quoteIndex);\r\n if (roomCartItem) {\r\n const existingSubscription = hasSubscriptionForRoom(getRoomNameToCompare(roomCartItem.cartFeature));\r\n if (existingSubscription) {\r\n return getVisualizerTypeFromSubscription(existingSubscription);\r\n }\r\n }\r\n const quoteCartItems = cartItems.filter(cartItem => {\r\n return (cartItem.currentQuote === quoteIndex) && !(cartItem.cartFeature && cartItem.cartFeature.dbFeature.autoAddToCart)\r\n && !(cartItem.cartFeature\r\n && cartItem.cartFeature.dbFeature.displayLogic\r\n && Array.isArray(cartItem.cartFeature.dbFeature.displayRules)\r\n && cartItem.cartFeature.dbFeature.displayRules.some(rule => rule))\r\n });\r\n if (quoteCartItems.length && quoteCartItems[0].fromVisualizerType\r\n && quoteCartItems.every(cartItem => cartItem.fromVisualizerType === quoteCartItems[0].fromVisualizerType)) {\r\n return quoteCartItems[0].fromVisualizerType\r\n }\r\n if (nextVisualizerType) { // if we don't have any cart items or room cart item and we are switching visualizer -> set it's type\r\n return nextVisualizerType\r\n }\r\n if (quoteIndex === activeQuoteIndex && !serverState.visualizerIsChanging) {\r\n return document.kvConfig.visualizerType\r\n }\r\n }\r\n if (quotes && quotes[quoteIndex] && quotes[quoteIndex].room) {\r\n return quotes[quoteIndex].room\r\n }\r\n return document.kvConfig.visualizerType\r\n}\r\n\r\n\r\n/**\r\n * @param featureClicked {featureInterface}\r\n * @param roomName {string}\r\n * @param fabricatorSettings {object}\r\n * @param visualizerIsChanging {boolean}\r\n * @returns {string|boolean}\r\n */\r\nexport const shouldSwitchVisualizer = (featureClicked, roomName, fabricatorSettings, visualizerIsChanging) => {\r\n if (!fabricatorSettings.allowVisualizerSwitching || visualizerIsChanging) {\r\n return false\r\n }\r\n\r\n let room = roomName || getRoomNameToCompare(featureClicked);\r\n\r\n // 2) if user clicked on unavailable visualizer -> go and set initial visualizer!\r\n const hasSubscription = hasSubscriptionForRoom(room);\r\n\r\n // 3) set main config visualizer type\r\n const newVisualizerType = hasSubscription ? getVisualizerTypeFromSubscription(hasSubscription) : null;\r\n if (newVisualizerType && (document.kvConfig.visualizerType !== newVisualizerType)) {\r\n return newVisualizerType\r\n }\r\n return false\r\n}\r\n\r\n\r\n/**\r\n * not used for now! but let it be\r\n * @param newRoomName {string}\r\n * @param needToAddRoomToCart {boolean}\r\n * @returns {Promise}\r\n */\r\nexport const createNewQuoteAfterVisualizerChange = async (newRoomName = \"\", needToAddRoomToCart = true) => {\r\n const {fabricatorState, quotesState} = store.getState();\r\n const {quotes, activeQuoteIndex} = quotesState;\r\n\r\n const currentQuote = await updateCurrentQuote(activeQuoteIndex);\r\n const newQuotes = [...currentQuote, {}];\r\n const newActiveQuoteIndex = quotes.length; // for example, if length is 2 (we are adding 2 index(0 and 1 already exist))\r\n store.dispatch(setQuotes(newQuotes));\r\n store.dispatch(setActiveQuoteIndex(newActiveQuoteIndex));\r\n if (needToAddRoomToCart) {\r\n const roomCartItem = getRoomCartItemForCategoryName(newRoomName, fabricatorState.settings);\r\n if (roomCartItem) {\r\n const newRoomCartItem = Object.assign({}, roomCartItem, {\r\n currentQuote: newActiveQuoteIndex\r\n })\r\n store.dispatch(addToCart([newRoomCartItem]));\r\n }\r\n }\r\n return Promise.resolve(true)\r\n}\r\n","export const replaceIncorrectSymbols = (string) => {\r\n return string.replace(/â€\\x9D/, \"\").replace(/\\//, \"\").replace(\"”\", \"\")\r\n}\r\n\r\n/**\r\n * @param value {number}\r\n * @param percent {number}\r\n * @returns {number}\r\n */\r\nexport const getPercentage = (value, percent) => {\r\n return (value / 100) * percent;\r\n}\r\n\r\n/**\r\n * @param value {number}\r\n * @param fromTotal {number}\r\n * @returns {number} %\r\n */\r\nexport const getPercentAmount = (value, fromTotal) => {\r\n if (!value) {\r\n return 0\r\n }\r\n return (fromTotal / value) * 100;\r\n}\r\n\r\n/**\r\n * common func for checking if need to show\r\n * @param fabricatorSettings {object}\r\n * @param forCartItems {array}\r\n * @return {array} // {currency: \"USD\", cartItems: []}\r\n */\r\nexport const getDifferentCurrencyCartItems = (fabricatorSettings, forCartItems = []) => {\r\n let totalArray = [];\r\n if (!fabricatorSettings.useDifferentCurrencies || !forCartItems.length) {\r\n return totalArray\r\n }\r\n forCartItems.forEach(cartItem => {\r\n if (cartItem.cartFeature && cartItem.cartFeature.getFeatureCurrency) {\r\n const featureCurrency = cartItem.cartFeature.getFeatureCurrency();\r\n if (featureCurrency && (featureCurrency !== fabricatorSettings.currency)) {\r\n const existingGroup = totalArray.find(filterGroupObject => {\r\n return filterGroupObject.currency === featureCurrency\r\n });\r\n if (existingGroup) {\r\n existingGroup.cartItems.push(cartItem);\r\n } else {\r\n totalArray.push({\r\n currency: featureCurrency,\r\n cartItems: [cartItem]\r\n })\r\n }\r\n }\r\n }\r\n });\r\n // console.log(\"totalArray\", totalArray);\r\n return totalArray\r\n}\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport store from \"./../../../../../../store\";\r\nimport {\r\n setSQFTActiveButton, setSQFTActiveLevel3Button, setSQFTActiveSubMenuButton, setSQFTContextMenu,\r\n setSQFTMenuOpened,\r\n setSQFTMenuOpenedLock, setSQFTSystemDeleteMessage\r\n} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {\r\n SIDEBAR_SHAPE_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS,\r\n SIDEBAR_SLAB_BUTTONS, SHAPE_PART_ID,\r\n} from \"../../../../constants\";\r\nimport {getMousePositionOnField} from \"../../../../helpers/sqftHelper\";\r\nimport TextBox from \"./textBox\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {clearRotateAngles} from \"../../store/canvasHelper\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport FreeDraw from \"../controls/freeDraw\";\r\nimport Duplicate from \"../controls/duplicate\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport MovableImage from \"../shapes/movableImage\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport MiteredController from \"../controls/mitered\";\r\nimport {showFilters} from \"../../../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../../../actions/groheFunctions\";\r\n\r\nconst WorkspaceEvents = function() {\r\n let self = this;\r\n this.workspace_onClick = (mousePos) => {\r\n let tookAction = false;\r\n const state = store.getState();\r\n const activeButton = state.sqftMenuState.activeButton;\r\n const isShowSlabTool = state.sqftSlabState.isShowSlabTool;\r\n const isWallsLockMode = state.sqftMenuState.isWallsLockMode;\r\n const isITextEditing = state.sqftMenuState.isITextEditing;\r\n //const shapes = workspace.getShapes();\r\n const shape = workspace.getHoverShape();\r\n const bumpoutLine = workspace.getHoverBumpout();\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n let cursor = EventManager.getCursor();\r\n\r\n if (activeButton === SIDEBAR_SHAPE_BUTTONS.freeDraw\r\n && !workspace.getHoverPoint()\r\n ) {\r\n FreeDraw.initDraw(isWallsLockMode);\r\n FreeDraw.drawShape(mousePos);\r\n return false;\r\n }\r\n\r\n if (workspaceControllers.spacer.isJustCreated) {\r\n workspaceControllers.spacer.setIsJustCreated(false);\r\n return false;\r\n }\r\n\r\n if (shape || workspace.getLineWithMovingBumpout()) {\r\n const sideOpened = state.sqftMenuState.menuOpened;\r\n\r\n if (!sideOpened\r\n && !isShowSlabTool\r\n && activeButton !== \"move\"\r\n && activeButton !== \"label\"\r\n && activeButton !== \"rotate\"\r\n && activeButton !== \"angle\"\r\n && activeButton !== \"freeDraw\"\r\n && activeButton !== \"resize\"\r\n && activeButton !== \"waterfall\"\r\n && cursor && (cursor[0] === \"move\" || cursor[0] === \"grab\")\r\n ) {\r\n store.dispatch(setSQFTMenuOpened(\"move\"));\r\n store.dispatch(setSQFTActiveButton(\"move\"));\r\n resetEvents();\r\n config.workspace.menuItemActive = \"move\";\r\n //this.sideBarButtonClick(nodes.sidebar.mainNavButton, !config.highlight.rotateAngle);\r\n }\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n } else {\r\n //1) close opened menus\r\n // todo sqft-react\r\n // this.hideSidebarSide();\r\n // this.hideSideBarContent();\r\n this.hideAngleTooltip();\r\n //2) remove active class from main button\r\n\r\n // todo sqft-react\r\n //this.removeActiveClassFromMainButton()\r\n //nodes.sidebar.mainNavButton.classList.remove(classes.buttonActiveClass);\r\n }\r\n\r\n if (activeButton) { //if (config.workspace.menuItemActive) {\r\n //tookAction = true;\r\n let resetCursor = false;\r\n if (shape) {\r\n let line;\r\n switch(activeButton) { // switch(config.workspace.menuItemActive) {\r\n case \"delete\":\r\n //todo priority\r\n if (textBoxes.length > 0) {\r\n for (let textBox of textBoxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n //box.delete();\r\n return;\r\n }\r\n }\r\n }\r\n if (shape.type === \"appliances\") {\r\n workspace.removeShape(shape);\r\n } else if (shape.type === \"slabImage\" || shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n workspace.updateRemovedFeatures(shape);\r\n workspace.removeSlabImage(shape);\r\n } else {\r\n const line = shape.getHoverSegment() || shape.getHoverSegmentOutlineCorner();\r\n const point = shape.getHoverPointOnClick(mousePos);\r\n const cornerLine = shape.getHoverSegmentCorner();\r\n const miteredPoint = shape.getHoverMiteredPoint();\r\n const label = shape.getHoverLabel();\r\n\r\n if (cornerLine) {\r\n if (cornerLine.getAttachedItems()) {\r\n cornerLine.deleteAttachedItem();\r\n } else {\r\n cornerLine.line.to.removeAttachedItem();\r\n }\r\n } else if (point && (point.getArcLength() || point.getAngle() || point.getMiteredFeatureId())) {\r\n point.removeAttachedItem();\r\n tookAction = false;\r\n } else if (miteredPoint && line) {\r\n line.miteredOverlay.deletePoint(miteredPoint);\r\n line.miteredOverlay.resetHoveredPoint();\r\n } else if (line && line.getAttachedItems()) {\r\n //workspace.removeShape(line.getAttachedShape());\r\n line.deleteAttachedItem();\r\n } else if (label) {\r\n const lineWithTheLabel = label.getParent();\r\n lineWithTheLabel.labelOverlay.destroy();\r\n lineWithTheLabel.labelOverlay = null;\r\n } else if (!isShowSlabTool) {\r\n // shapeToDelete = shape;\r\n // self.callConfirmPopup(mousePos);\r\n store.dispatch(setSQFTSystemDeleteMessage({isOpened: true, shape: shape}));\r\n tookAction = false;\r\n } else {\r\n tookAction = false;\r\n }\r\n }\r\n //config.controls.delete.removeClass(config.activeClass);\r\n //nodes.designPatterns.delete.removeClass(config.activeClass);\r\n break;\r\n case \"flip-h\":\r\n shape.flip(shape.FlipDirection.HORIZONTAL);\r\n config.controls.flipH.removeClass(config.activeClass);\r\n resetCursor = true;\r\n break;\r\n case \"flip-v\":\r\n shape.flip(shape.FlipDirection.VERTICAL);\r\n config.controls.flipV.removeClass(config.activeClass);\r\n resetCursor = true;\r\n break;\r\n case \"rotate-right\":\r\n // rotate v1 disabled\r\n // shape.rotate(90, shape.Direction.RIGHT);\r\n //config.controls.rotateRight.removeClass(config.activeClass);\r\n //nodes.designPatterns.rotateRight.removeClass(config.activeClass);\r\n break;\r\n case \"rotate-left\":\r\n // activated from activeButton\r\n //shape.rotate(90, shape.Direction.LEFT);\r\n\r\n //config.controls.rotateLeft.removeClass(config.activeClass);\r\n //nodes.designPatterns.rotateLeft.removeClass(config.activeClass);\r\n break;\r\n case SIDEBAR_NAVIGATION_BUTTONS.label:\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n\r\n if (store.getState().sqftMenuState.contextMenu.isOpened) {\r\n store.dispatch(setSQFTContextMenu({isOpened: false}));\r\n }\r\n store.dispatch(setSQFTContextMenu({isOpened: true, activeMenu: \"labels\", pos: mousePos, parent: shape}));\r\n tookAction = false;\r\n\r\n break;\r\n default:\r\n tookAction = false;\r\n break;\r\n }\r\n switch(activeButton) {\r\n case SIDEBAR_SLAB_BUTTONS.rotate:\r\n //rotate in slab and regular mode\r\n //rotate v2\r\n //shape.rotate(90, shape.Direction.LEFT, isShowSlabTool);\r\n //todo shape rotation with bumpout disabled\r\n if (sqftShapeManager.canShapeBeRotated(shape)) {\r\n if (!shape.getIsRotatable()) {\r\n sqftShapeManager.closeRotatablePopups(shape);\r\n sqftShapeManager.setShapeAsRotatable(shape);\r\n sqftShapeManager.rotateShapeTo90Deg(shape);\r\n } else {\r\n sqftShapeManager.disableRotatableState(shape);\r\n }\r\n }\r\n tookAction = false;\r\n break;\r\n case SIDEBAR_NAVIGATION_BUTTONS.duplicate:\r\n if (shape instanceof sqftShape && !isShowSlabTool\r\n || shape instanceof sqftShape && shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n Duplicate.cloneShape(shape);\r\n } else if (shape instanceof MovableImage) {\r\n Duplicate.cloneMovableImage(shape);\r\n }\r\n\r\n tookAction = false;\r\n\r\n break;\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.crown:\r\n //crown molding displayed as edges and backsplashes\r\n //shape.addCrownMolding();\r\n break\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel:\r\n case SIDEBAR_NAVIGATION_BUTTONS.end_cap:\r\n //crown molding displayed as edges and backsplashes\r\n //shape.addCrownMolding();\r\n break;\r\n case SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer:\r\n //line = shape.getHoverSegment(true);\r\n line = workspace.getHoveredLine();\r\n if (line) {\r\n workspaceControllers.spacer.createSpacer(line.from, line.to, shape.getPosition());\r\n line.resetState();\r\n shape.resetState();\r\n tookAction = false // see QCDES-4731 we need to call mouseUp on each shape\r\n }\r\n //store.dispatch(setSQFTActiveButton(SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer));\r\n //store.dispatch(setSQFTMenuOpened(false));\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n } else if (bumpoutLine) {\r\n switch(activeButton) {\r\n case \"delete\":\r\n //workspace.removeShape(bumpoutLine.getAttachedShape());\r\n bumpoutLine.deleteAttachedItem();\r\n tookAction = false;\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n if (activeButton === \"rotate-left\") {\r\n //EventManager.stealCursor(true);\r\n //EventManager.setCursor(\"rotate-left\", self, true);\r\n } else if (activeButton === \"delete\") {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor(\"delete\", self, true);\r\n } else if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.text) {\r\n if (!workspace.textBoxManager.isBoxActive()\r\n && !isITextEditing\r\n ) {\r\n let pos = getMousePositionOnField(mousePos.x, mousePos.y);\r\n let textBox = new TextBox(pos);\r\n textBox.init();\r\n\r\n console.log(config.workspace.menuItemActive);\r\n\r\n //this.navButtonClick(nodes.sidebar.navButtons[0]); // change icon\r\n config.workspace.menuItemActive = null; // reset action\r\n }\r\n }\r\n tookAction = false;\r\n resetCursor = false;\r\n //$('#design-default').click();\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n if (resetCursor) {\r\n EventManager.resetCursor(self);\r\n config.workspace.menuItemActive = null;\r\n }\r\n }\r\n\r\n return tookAction;\r\n };\r\n\r\n this.init = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n self.workspace_onClick,\r\n self,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.hideAngleTooltip = () => {\r\n // const input = document.getElementById(\"angle_input\");\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n const inputArrows = [].slice.call(document.querySelectorAll(\"#angle-tooltip [data-action]\"));\r\n const inputSubmit = [].slice.call(document.querySelectorAll('[data-action=\"angle-input-submit\"]'));\r\n\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n inputArrows.forEach(function (elem) {\r\n elem.parentNode.replaceChild(elem.cloneNode(true), elem);\r\n });\r\n inputSubmit[0].removeEventListener('click', self.deActivateRotateAngle);\r\n }\r\n }\r\n};\r\n\r\n//todo\r\nconst resetEvents = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n workspace.setAllowEdges(false);\r\n workspace.setAllowBumpoutEdges(false);\r\n config.workspace.menuItemActive = null\r\n};\r\n\r\nexport const clearAllMenusEvents = () => {\r\n sqftEventManager.stealCursor(true); // making cursor default\r\n sqftEventManager.resetCursor(sqftEventManager.currentCursorOwner); // ??\r\n sqftConfig.workspace.menuItemActive = null; // out of resize, rotate, delete\r\n // let zz= sqftEventManager;\r\n // console.log(zz)\r\n // debugger // eslint-disable-line no-debugger\r\n\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing sizing lines\r\n workspace.setAllowMiteredEdges(false); // removing mitered lines\r\n\r\n if (workspace.miteredController instanceof MiteredController) {\r\n workspace.miteredController.deregisterEvents();\r\n }\r\n clearRotateAngles();\t// remove rotateAngle\r\n sqftConfig.highlight.points = false;\t// remove radiuses\r\n sqftConfig.highlight.lines = false; // disable lines highlighting\r\n sqftConfig.highlight.type = ''; // disable lines highlighting\r\n sqftConfig.highlight.id = null; // disable lines highlighting\r\n sqftEventManager.removeStuckCursorEvents();\r\n\r\n store.dispatch(setSQFTContextMenu({isOpened: false}));\r\n store.dispatch(setSQFTActiveButton(\"\"));\r\n store.dispatch(setSQFTActiveSubMenuButton(\"\"));\r\n store.dispatch(setSQFTActiveLevel3Button(null));\r\n store.dispatch(setGroheFiltersSearchText(\"\"));\r\n store.dispatch(showFilters(false));\r\n FreeDraw.drawFinish();\r\n FreeDraw.destroy();\r\n sqftShapeManager.disableRotatableStateForAllShapes();\r\n};\r\n\r\n\r\n\r\nexport default new WorkspaceEvents();\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nclass FeatureWizardSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n allProducts: PropTypes.bool,\r\n allStepsCompleted: PropTypes.bool,\r\n finishClicked: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n };\r\n\r\n setFeatureWizardStep = (nextStep, disabled) => {\r\n\r\n if (disabled) {\r\n return false;\r\n }\r\n\r\n switch (nextStep) {\r\n case \"back\":\r\n nextStep = this.props.featureWizardStep === 0 ? 0 : this.props.featureWizardStep - 1;\r\n break;\r\n case \"next\":\r\n if (this.props.featureWizardStep === (this.props.availableSteps.length - 1)) {\r\n this.props.exitFeatureWizard(this.props.availableSteps);\r\n return;\r\n } else {\r\n nextStep = this.props.featureWizardStep + 1;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n const currentStep = this.props.availableSteps[nextStep - 1];\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n if ((nextStep > this.props.featureWizardStep) && currentStep && !this.props.allStepsCompleted\r\n && (!currentStep.selectedValueId || (fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated))) {\r\n return\r\n }\r\n if (this.props.showFeatureWizard) {\r\n this.props.setFeatureWizardStep(nextStep);\r\n if (nextStep === 0) {\r\n this.props.toggleWizardFilterSelection(false);\r\n }\r\n } else {\r\n this.props.enableFeatureWizard(nextStep);\r\n }\r\n };\r\n\r\n render() {\r\n // console.log('features top', this.props.features);\r\n const currentStep = this.props.availableSteps[this.props.featureWizardStep];\r\n // const nextStep = this.props.availableSteps[this.props.featureWizardStep + 1];\r\n const isLastStep = this.props.featureWizardStep === this.props.availableSteps.length - 1;\r\n\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const nextStepIsLocked = currentStep && !this.props.allStepsCompleted && fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated;\r\n\r\n const lastStepIsDisabled = currentStep && (!currentStep.selectedValueId || nextStepIsLocked);\r\n\r\n return (\r\n
    \r\n {this.props.showFeatureWizard && (this.props.allProducts || !this.props.allStepsCompleted || (this.props.allStepsCompleted && !this.props.finishClicked)) ? (\r\n
    this.setFeatureWizardStep(\"back\")}>\r\n \r\n
    \r\n ) : null}\r\n
      \r\n {this.props.allProducts || (this.props.showFeatureWizard && this.props.finishClicked) ? (\r\n
    • this.props.exitFeatureWizard(this.props.availableSteps)}>\r\n \r\n
    • \r\n ) : null}\r\n {this.props.availableSteps.map((wizardButton, index) => {\r\n const prevStep = this.props.availableSteps[index - 1];\r\n const disabled = index && (!prevStep.selectedValueId\r\n || (fabricatorSettings.leadCapture && prevStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated));\r\n const buttonName = this.props.getFilterDisplayName(wizardButton.filterName);\r\n const displayName = this.props.getFilterDisplayName(wizardButton.filterName, this.props.intl);\r\n return (\r\n
    • this.setFeatureWizardStep(index, disabled)}>\r\n {displayName}\r\n {this.props.availableSteps[index].selectedValueId && index !== this.props.featureWizardStep\r\n ? \r\n : null\r\n }\r\n
    • \r\n )\r\n })}\r\n
    \r\n {this.props.showFeatureWizard && (this.props.allProducts || !this.props.allStepsCompleted || (this.props.allStepsCompleted && !this.props.finishClicked)) ? (\r\n
    this.setFeatureWizardStep(\"next\", lastStepIsDisabled)}>\r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorSettings: store.fabricatorState.settings,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureWizardSteps)\r\n);\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowAssignQuotePopup = (showAssignQuotePopup, assignQuotePopupSaveButtons = \"all\") => ({\r\n type: types.TOGGLE_SHOW_ASSIGN_QUOTE_POPUP,\r\n payload: {showAssignQuotePopup, assignQuotePopupSaveButtons}\r\n});\r\n\r\nexport const setAssignQuotePopupSearchText = (assignQuotePopupSearchText) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT,\r\n payload: {assignQuotePopupSearchText}\r\n});\r\n\r\nexport const setAssignQuotePopupEmployee = (assignQuotePopupEmployee) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_EMPLOYEE,\r\n payload: {assignQuotePopupEmployee}\r\n});\r\n\r\nexport const setAssignQuotePopupCustomer = (assignQuotePopupCustomer) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_CUSTOMER,\r\n payload: {assignQuotePopupCustomer}\r\n});\r\n\r\nexport const setAssignQuotePopupSuccessText = (assignQuotePopupSuccessText) => ({\r\n type: types.SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT,\r\n payload: {assignQuotePopupSuccessText}\r\n});\r\n\r\nexport const setAssignQuoteCloneMode = (assignQuoteCloneMode) => ({\r\n type: types.SET_ASSIGN_QUOTE_CLONE_MODE,\r\n payload: {assignQuoteCloneMode}\r\n});\r\n\r\nexport const setAssignQuoteOfflineData = (offlineData) => ({\r\n type: types.SET_ASSIGN_QUOTE_OFFLINE_DATA,\r\n payload: offlineData\r\n});\r\n","import {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\n\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick} from \"../lookNavigation/lookFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n setLookActiveCategory,\r\n setLookActiveFeature,\r\n setLookDemoPointsClicked,\r\n setLookOpened, setLookPageOpened\r\n} from \"../../../actions/lookFunctions\";\r\nimport store from \"../../../store\";\r\nimport {LOOK_OPENED_TYPES, LOOK_WALLS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\nimport {\r\n enableRelatedFeature,\r\n getCategoryOnlyUrl,\r\n getFeatureUrl,\r\n hideFeatureSection\r\n} from \"../lookNavigation/lookFunctions2\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP} from \"../../kvComponent/core/constants\";\r\n\r\nexport const doNotZoomPartIds = [\"kitchen_floor\", \"left_wall\", \"right_wall\", \"front_wall\", \"back_wall\",\r\n \"split_wall\", \"left_wall_splitter\", \"bathroom_floor\", \"shower_floor\", \"shower_curb\"];\r\n\r\nexport const shouldZoomPartId = (partId, isMobile) => {\r\n if (!partId) {\r\n return false\r\n }\r\n if (!isMobile && (CABINET_GROUP.includes(partId) || COUNTERTOP_GROUP.includes(partId) || EDGE_GROUP.includes(partId))) {\r\n return false\r\n }\r\n return (!doNotZoomPartIds.includes(partId) || (\r\n partId === \"front_wall\" && document.kvConfig.visualizerType === \"Fireplace\"\r\n ))\r\n}\r\n\r\nexport const shouldZoomToTheBottom = (partId) => {\r\n if (!partId) {\r\n return false\r\n }\r\n return partId === \"kitchen_floor\" || partId === \"bathroom_floor\"\r\n}\r\n\r\nexport const getCorrectedCenter = (center, scale = 1.75, clickedFeature, imageCanvas, isMobile) => {\r\n const {activePreset} = store.getState().bathroomVisualizerState;\r\n if ((clickedFeature.partId === \"shower_fixture\" || clickedFeature.partId === \"crown_molding\")\r\n && imageCanvas.current.pinchZoom.zoomFactor === 1) {\r\n if (activePreset !== 4) {\r\n scale = 1.5;\r\n }\r\n switch (activePreset) {\r\n case 3:\r\n center.y = center.y - 40;\r\n break;\r\n case 6:\r\n center.y = center.y + 40;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!isMobile) {\r\n $(\"html, body\").animate({scrollTop: 0}, 500);\r\n }\r\n }\r\n return {scale, center}\r\n}\r\n\r\nconst WithZoomToFeature = (props) => {\r\n\r\n const {history, children, imageCanvas, isMobile, setLookActiveCategory, setLookActiveFeature, lookOpened,\r\n setLookOpened, addToCart, qtActiveCategory, setCanvasScale, updateCanvasCount, lookActiveFeature,\r\n setLookDemoPointsClicked, lookPageOpened, setLookPageOpened, lookActiveCategory, lookCompatabilityAlert} = props;\r\n\r\n /**\r\n * Checks if list feature is currently active\r\n * @param partId {string}\r\n * @param zoomToFeature {featureInterface}\r\n * @param zoomToPostion {string}\r\n * @param changeUrl {boolean}\r\n * @param setActiveFeature {boolean}\r\n * @param closeOpenedCategory {boolean}\r\n * @param clickOnFeature {boolean}\r\n * @returns {featureInterface} clickedFeature\r\n */\r\n const zoomToFeatureGroup = (partId,\r\n zoomToFeature,\r\n zoomToPostion,\r\n changeUrl = true,\r\n setActiveFeature = true,\r\n closeOpenedCategory = true,\r\n clickOnFeature = true) => {\r\n let lookUrl = ROUTES.home;\r\n let clickedFeature;\r\n if (partId) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = zoomToFeature ? zoomToFeature.getParent() : layout.getFeatureGroupByPartId(partId);\r\n clickedFeature = zoomToFeature || (featureGroup ? featureGroup.activeFeature : null);\r\n if (featureGroup && featureGroup.layerPositions && !zoomToFeature) {\r\n if (zoomToPostion) {\r\n clickedFeature = featureGroup.getMatchingPositionFeature(zoomToPostion);\r\n if (clickedFeature && !featureGroup.layerPositions[zoomToPostion]) {\r\n featureGroup.layerPositions[zoomToPostion] = clickedFeature;\r\n addToCart([getCartItemObject(clickedFeature, 1, qtActiveCategory)]);\r\n } else if (!clickedFeature) {\r\n clickedFeature = featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature; // show at least something\r\n }\r\n } else {\r\n Object.keys(featureGroup.layerPositions).forEach((position) => {\r\n if (featureGroup.layerPositions[position] && document.hoveredLayer\r\n && featureGroup.layerPositions[position].layer.zIndex === document.hoveredLayer.zIndex) {\r\n clickedFeature = featureGroup.layerPositions[position];\r\n }\r\n })\r\n }\r\n } else if (featureGroup && !featureGroup.layerPositions && !clickedFeature) {\r\n clickedFeature = featureGroup.activeFeature || featureGroup.activeNotInVisualizerFeature; // show at least something\r\n }\r\n if (clickedFeature) {\r\n console.log('clickedFeature', clickedFeature);\r\n if (clickOnFeature) {\r\n enableRelatedFeature(clickedFeature, addToCart, qtActiveCategory);\r\n navFeatureCLick(clickedFeature); // is needed for context menu vanity type switch\r\n }\r\n // console.log('Coords', clickedFeature.metaData.Coords);\r\n if (setActiveFeature) {\r\n setLookActiveFeature(clickedFeature);\r\n }\r\n featureGroup.featureBeforeChange = clickedFeature;\r\n const featureExistInQuotingTool = layout.partIdExistInQtCategory(partId);\r\n const allowFeatureScreen = featureExistInQuotingTool && !hideFeatureSection(true, partId, clickedFeature, lookCompatabilityAlert);\r\n\r\n if (!IS_PRODUCT_JOURNEY && isMobile && !setActiveFeature) {\r\n lookUrl = getCategoryOnlyUrl(clickedFeature.partId);\r\n setLookActiveCategory(clickedFeature.partId);\r\n } else if (featureExistInQuotingTool && (!IS_PRODUCT_JOURNEY || !lookActiveCategory || closeOpenedCategory)\r\n && (!IS_PRODUCT_JOURNEY || allowFeatureScreen)) {\r\n lookUrl = getFeatureUrl(clickedFeature);\r\n } else {\r\n lookUrl = getFeatureUrl(clickedFeature, true);\r\n setLookActiveCategory(clickedFeature.partId);\r\n }\r\n // if (!isMobile && imageCanvas.current && imageCanvas.current.setHoveredLayer && event) {\r\n // imageCanvas.current.setHoveredLayer(event);\r\n // }\r\n const commonCoords = getFeatureCoords(clickedFeature) || getCommonCoords(featureGroup, clickedFeature, imageCanvas.current.canvas);\r\n const shouldZoomCanvas = imageCanvas.current && imageCanvas.current.pinchZoom && commonCoords && Object.keys(commonCoords).length\r\n && !clickedFeature.notAvailableInVisualizer && shouldZoomPartId(clickedFeature.partId, isMobile);\r\n if (shouldZoomCanvas) {\r\n // const moreZoomFeatureGroups = [\"bathtub_fixture\"];\r\n const {center, scale} = getCorrectedCenter(\r\n getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile),\r\n null, clickedFeature, imageCanvas, isMobile\r\n );\r\n // const zoomFactor = (moreZoomFeatureGroups.includes(clickedFeature.partId)\r\n // && imageCanvas.current.pinchZoom.zoomFactor === 1 ) ? 3 : null // if null - it will be set in zoom to center func\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, scale, false, allowFeatureScreen);\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor);\r\n } else if (shouldZoomToTheBottom(clickedFeature.partId)) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n if (!lookOpened) {\r\n setLookOpened(LOOK_OPENED_TYPES.featureZoom);\r\n setLookDemoPointsClicked(true);\r\n }\r\n if (IS_PRODUCT_JOURNEY && lookPageOpened) {\r\n setLookPageOpened(\"\");\r\n }\r\n }\r\n }\r\n if (changeUrl) {\r\n history.push(lookUrl);\r\n }\r\n return clickedFeature\r\n }\r\n\r\n const zoomToFeatureGroupByFeature = (zoomFeature) => {\r\n const featureGroup = zoomFeature.getParent();\r\n const isEmpty = (!zoomFeature && position) || (featureGroup && featureGroup.disabled);\r\n if (isEmpty) {\r\n if (!lookActiveFeature && position) {\r\n zoomFeature = featureGroup.getMatchingPositionFeature(position);\r\n if (zoomFeature) {\r\n featureGroup.layerPositions[position] = zoomFeature;\r\n }\r\n }\r\n if (zoomFeature) {\r\n featureGroup.activeFeature = zoomFeature;\r\n }\r\n console.log(\"zoomFeature featureGroup\", zoomFeature, featureGroup);\r\n }\r\n const layout = getCurrentLayout();\r\n if (zoomFeature) {\r\n if (!lookActiveFeature) {\r\n const parent = zoomFeature.getParent();\r\n parent.featureBeforeChange = zoomFeature;\r\n }\r\n setLookActiveFeature(zoomFeature);\r\n navFeatureCLick(zoomFeature);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n\r\n if (isMobile) {\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId) && !LOOK_WALLS.includes(zoomFeature.partId);\r\n const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId);\r\n if (closeOnly) {\r\n //history.push(getFeatureUrl(zoomFeature, true));\r\n } else {\r\n setLookActiveCategory(\"\");\r\n //history.push(getFeatureUrl(zoomFeature)); // always go to feature screen on mobile\r\n }\r\n } else {\r\n // history.push(getFeatureUrl(zoomFeature, !!lookActiveCategory))\r\n }\r\n\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS.includes(zoomFeature.partId)) {\r\n const commonCoords = getFeatureCoords(zoomFeature) || getCommonCoords(featureGroup || zoomFeature.getParent(), zoomFeature, imageCanvas.current.canvas);\r\n const center = getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile);\r\n const scale = imageCanvas.current.pinchZoom.options.tapZoomFactor;\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, scale, true, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(scale)\r\n }\r\n }\r\n }\r\n\r\n return children(zoomToFeatureGroup, zoomToFeatureGroupByFeature)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookOpened, lookActiveFeature, lookActiveCategory, lookCompatabilityAlert} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {qtActiveCategory} = store.qtState;\r\n return {\r\n lookOpened,\r\n lookActiveFeature,\r\n isMobile,\r\n qtActiveCategory,\r\n lookActiveCategory,\r\n lookCompatabilityAlert,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookActiveFeature,\r\n setLookOpened,\r\n addToCart,\r\n setCanvasScale,\r\n updateCanvasCount,\r\n setLookDemoPointsClicked,\r\n setLookPageOpened,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithZoomToFeature)\r\n)\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const togglePriceWorksheetOpened = (priceWorksheetOpened) => ({\r\n type: types.TOGGLE_PRICE_WORKSHEET_OPENED,\r\n payload: {\r\n priceWorksheetOpened\r\n }\r\n});\r\n\r\n// export const setDiscountSections = (discountSections) => {\r\n// return (dispatch, getState) => {\r\n// const {financeCellsVisible} = getState().priceWorksheetState;\r\n// // if (currentSection) {\r\n// // const discounts = sortByOrder(currentSection.discounts).filter((disc) => !disc.nestedParent);\r\n// // }\r\n// const payload = {\r\n// discountSections,\r\n// }\r\n// if (financeCellsVisible.length !== Object.keys(DISCOUNT_FINANCE_CELLS).length) {\r\n// const sectionWithFinance = discountSections.find(sec => {\r\n// return sec.type !== DISCOUNT_SECTION_TYPES.finance && sec.discounts.some(discount => {\r\n// return discount.discountType === DISCOUNT_SECTION_TYPES.finance\r\n// })\r\n// });\r\n// if (sectionWithFinance) {\r\n// sectionWithFinance.discounts\r\n// }\r\n// }\r\n// dispatch({\r\n// type: types.SET_DISCOUNT_SECTIONS,\r\n// payload\r\n// })\r\n// }\r\n// };\r\nexport const setDiscountSections = (discountSections) => ({\r\n type: types.SET_DISCOUNT_SECTIONS,\r\n payload: {\r\n discountSections,\r\n }\r\n});\r\n\r\nexport const setCustomAddedDiscounts = (customAddedDiscounts) => ({\r\n type: types.SET_CUSTOM_ADDED_DISCOUNTS,\r\n payload: {customAddedDiscounts}\r\n})\r\n\r\nexport const setFinancePercentage = (financePercentage) => ({\r\n type: types.SET_FINANCE_PERCENTAGE,\r\n payload: {financePercentage}\r\n});\r\n\r\nexport const setAllFinanceOptionsPopupVisible = (allFinanceOptionsPopupVisible) => ({\r\n type: types.SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE,\r\n payload: {allFinanceOptionsPopupVisible}\r\n});\r\n\r\nexport const setFinanceCellsVisible = (financeCellsVisible) => ({\r\n type: types.SET_DISCOUNT_FINANCE_CELLS_VISIBLE,\r\n payload: {financeCellsVisible}\r\n});\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {setCabinetsApplyTo, setCabinetsApplyToBathroom} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport UiSelect from \"../../ui/select\";\r\nimport {CABINET_GROUP} from \"../core/constants\";\r\nimport Analytics from '../../../analytics';\r\nimport {CABINET_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport store from \"../../../store\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\nimport {getMissingFeaturesAndClickThem} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\n\r\nclass CabinetSwitchers extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const setCabinetsApplyTo = this.getSetCabinetsApplyTo();\r\n if (!cabinetsApplyTo.includes(this.props.activeSubPart.partId)) {\r\n cabinetsApplyTo.push(this.props.activeSubPart.partId);\r\n setCabinetsApplyTo(cabinetsApplyTo);\r\n }\r\n }\r\n\r\n toggleCabinetsApplyTo = (partId) => {\r\n Analytics.sendClickEvent('cabinets-apply-to-' + partId);\r\n let cabinetsApplyTo = [...this.getCabinetsApplyTo()];\r\n const setCabinetsApplyTo = this.getSetCabinetsApplyTo();\r\n const existingIndex = cabinetsApplyTo.findIndex(cabinetsApplyToPartId => cabinetsApplyToPartId === partId);\r\n if (existingIndex > -1) {\r\n cabinetsApplyTo.splice(existingIndex, 1)\r\n } else {\r\n cabinetsApplyTo.push(partId)\r\n }\r\n setCabinetsApplyTo(cabinetsApplyTo);\r\n };\r\n\r\n getButtonName = (partId, layout) => {\r\n const {intl, fabricatorData} = this.props;\r\n if (intl.locale !== \"en-EN\") {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n return getFeatureGroupName(featureGroup, intl, fabricatorData)\r\n }\r\n }\r\n switch (partId) {\r\n case \"top_cabinet\":\r\n return this.props.showAsDropdown ? \"upper cabinet\" : \"upper\";\r\n case \"bottom_cabinet\":\r\n return this.props.showAsDropdown ? \"lower cabinet\" : \"lower\";\r\n case \"center_island_cabinet\":\r\n return \"center island\";\r\n case \"vanity_cabinet\":\r\n return \"Cabinet\";\r\n case \"vanity_mirror\":\r\n return \"Mirror\";\r\n default:\r\n return \"\"\r\n }\r\n };\r\n\r\n static getFeatureDoorStyleFilter = (feature, filterName = \"DoorStyle\") => {\r\n if (!feature) {\r\n return null\r\n }\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const doorStyleFilterGroup = filterGroups.find(group => group.name === filterName);\r\n return doorStyleFilterGroup && (feature.dbFeature.fabFilterValueIDs[doorStyleFilterGroup.id] || feature.dbFeature.filterValueIDs[doorStyleFilterGroup.id])\r\n };\r\n\r\n static getNeededFeatureFromNavItems = (navigationItemName, featureGroup) => {\r\n return featureGroup.features.find((feature) => {\r\n const featureName = feature.getSplittedFeatureName().replace(`${feature.dbFeature.groupName} - `, \"\");\r\n return featureName && navigationItemName && (featureName === navigationItemName)\r\n });\r\n }\r\n\r\n static applyClickTo = async (navigationItemPart, ignoreLocked, cabinetsApplyTo, setCurrentFeature = false) => {\r\n const layout = getCurrentLayout();\r\n let missingFeatures = [];\r\n for (const neededPartId of cabinetsApplyTo) {\r\n const featureGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (!featureGroup) {\r\n continue;\r\n }\r\n let neededFeature;\r\n if (document.kvConfig.visualizerType === \"bvScene\") {\r\n const doorStyles = CabinetSwitchers.getFeatureDoorStyleFilter(navigationItemPart, \"DoorStyle\");\r\n const materials = CabinetSwitchers.getFeatureDoorStyleFilter(navigationItemPart, \"Material\");\r\n neededFeature = doorStyles && featureGroup.features.find((feature) => {\r\n const featureDoorStyles = CabinetSwitchers.getFeatureDoorStyleFilter(feature, \"DoorStyle\");\r\n const featureMaterials = CabinetSwitchers.getFeatureDoorStyleFilter(feature, \"Material\");\r\n return doorStyles && featureDoorStyles && materials && featureMaterials\r\n && (featureDoorStyles.some(ds => doorStyles.includes(ds)))\r\n && (featureMaterials.some(mat => materials.includes(mat)))\r\n });\r\n } else {\r\n const navigationItemName = navigationItemPart.getSplittedFeatureName().replace(`${navigationItemPart.dbFeature.groupName} - `, \"\");\r\n neededFeature = CabinetSwitchers.getNeededFeatureFromNavItems(navigationItemName, featureGroup);\r\n if (!neededFeature\r\n && (!featureGroup.alreadyRequestedFeatureNames || !featureGroup.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n missingFeatures.push({relatedItem: featureGroup, navigationItemName, setCurrentFeature: true})\r\n }\r\n }\r\n if (neededFeature) {\r\n if (setCurrentFeature) {\r\n featureGroup.activeFeatureBeforeAllWalls = featureGroup.activeFeature;\r\n }\r\n neededFeature.clickFromAllWalls(ignoreLocked);\r\n }\r\n }\r\n if (missingFeatures.length) {\r\n await getMissingFeaturesAndClickThem(missingFeatures, true)\r\n }\r\n return Promise.resolve()\r\n }\r\n\r\n static applyAllCabinets = (navigationItemPart, ignoreLocked) => {\r\n const propsCabinetsApplyTo = store.getState().navigationState[\r\n document.kvConfig.visualizerType === \"bvScene\" ? \"cabinetsApplyToBathroom\" : \"cabinetsApplyTo\"\r\n ];\r\n const cabinetsApplyTo = [...propsCabinetsApplyTo];\r\n const existingIndex = cabinetsApplyTo.findIndex(cabinetsApplyToPartId => cabinetsApplyToPartId === navigationItemPart.partId);\r\n if (existingIndex > -1) {\r\n cabinetsApplyTo.splice(existingIndex, 1); // remove already clicked partId\r\n }\r\n return CabinetSwitchers.applyClickTo(navigationItemPart, ignoreLocked, cabinetsApplyTo)\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.windowWidth < 720) {\r\n return \r\n } else if (this.props.windowWidth < 800) {\r\n return \r\n } else {\r\n return \r\n }\r\n };\r\n\r\n buttonIsDisabled = (partId) => {\r\n const layout = getCurrentLayout();\r\n return this.props.activeSubPart.partId === partId\r\n || (document.kvConfig.visualizerType === \"Kitchen\" && partId === \"center_island_cabinet\"\r\n && !layout.getCurrentLayoutAbbreviation().includes(\"I\"));\r\n }\r\n\r\n renderDropDown = () => {\r\n const CABINETGROUPS = this.getCabinetGroups();\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n \r\n {CABINETGROUPS.map(partId => {\r\n const disabledButton = this.buttonIsDisabled(partId);\r\n return (\r\n
  • \r\n disabledButton ? false : this.toggleCabinetsApplyTo(partId)}/>\r\n disabledButton ? false : this.toggleCabinetsApplyTo(partId)}>\r\n {this.getButtonName(partId, layout)}\r\n \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n getCabinetGroups = () => {\r\n if (document.kvConfig.visualizerType === \"bvScene\") {\r\n return CABINET_GROUP_BATHROOM\r\n }\r\n return [...CABINET_GROUP].filter(partId => partId !== \"fridge_enclosure\");\r\n };\r\n\r\n getCabinetsApplyTo = () => {\r\n return document.kvConfig.visualizerType === \"bvScene\" ? this.props.cabinetsApplyToBathroom : this.props.cabinetsApplyTo;\r\n };\r\n\r\n getSetCabinetsApplyTo = () => {\r\n return document.kvConfig.visualizerType === \"bvScene\" ? this.props.setCabinetsApplyToBathroom : this.props.setCabinetsApplyTo;\r\n };\r\n\r\n render() {\r\n const CABINETGROUPS = this.getCabinetGroups();\r\n if (this.props.showAsDropdown) {\r\n return this.renderDropDown()\r\n }\r\n const cabinetsApplyTo = this.getCabinetsApplyTo();\r\n const layout = getCurrentLayout();\r\n return (\r\n
    \r\n
    Apply to
    \r\n
      \r\n {CABINETGROUPS.map(partId => {\r\n const hideButton = this.buttonIsDisabled(partId);\r\n return hideButton ? null : (\r\n
    • this.toggleCabinetsApplyTo(partId)}>\r\n \r\n {this.getButtonName(partId, layout)}\r\n
      \r\n \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n cabinetsApplyTo: store.navigationState.cabinetsApplyTo,\r\n cabinetsApplyToBathroom: store.navigationState.cabinetsApplyToBathroom,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setCabinetsApplyTo,\r\n setCabinetsApplyToBathroom\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(CabinetSwitchers)\r\n);\r\n","import isEmpty from \"lodash/isEmpty\";\r\nimport trim from \"lodash/trim\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport DesignNavigationItem from \"./designNavigationItem\";\r\nimport {Exception} from \"../common/exception\";\r\nimport {\r\n filterFeaturesByValues,\r\n getAllFeatureFilters,\r\n getFilterGroupValue,\r\n getFilterGroupValues\r\n} from \"../../misc/utils\";\r\nimport store from \"../../store\";\r\nimport featureIsMatchingDisplayLogic, {checkIfInCatProperty} from \"../../misc/displayLogic\";\r\nimport {addDisplayLogicCartItem, addToCart} from \"../../actions/actionFunctions\";\r\nimport {capitalizeFirstLetters} from \"../../misc/helpers\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport {getOptionsFromNavItemsForFeature} from \"../look/lookNavigation/lookFunctions\";\r\nimport {getColorFilterValue} from \"../../misc/filtersFunctions\";\r\nimport {loadRelatedFeatures, setRoomNotInVisualizerProperty} from \"./featuresFunctions\";\r\nimport {getFeatureCropCoors} from \"../../misc/metaDataFunctions\";\r\n\r\nexport default class PartCommon { // Common Class for KV & BV common methods (Feature -> IntermediatePart -> Part -> PartCommon)\r\n\r\n loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature = true, shouldLoadInDifferentGroups = false) {\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n if (loadFeature) {\r\n this[relatedItemName].load(dbFeature);\r\n }\r\n return !shouldLoadInDifferentGroups\r\n }\r\n return false\r\n }\r\n\r\n createRelatedItems() {\r\n if (this.relatedGroupNames) {\r\n this.relatedGroupNames.forEach(groupName => {\r\n this.load({groupName}, false)\r\n })\r\n }\r\n }\r\n\r\n navigationNoMetaSubItems(filters, searchText) {\r\n return this.returnUniqueNavFeatures(this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, this.features), searchText))\r\n }\r\n\r\n /**\r\n * Returns an array of navigation items related to the given parent item\r\n * i.e. Floor - will return all Floor features\r\n * @returns {Array.}\r\n */\r\n navigationSubItems(filters, searchText) {\r\n return this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText)\r\n .map(_ => new DesignNavigationItem(_.featureName, _)); // 1) filter them by filters 2) filter them by search\r\n }\r\n\r\n navigationSubItemsWithFilterWithInactive(propName, propValue, featuresToCheck = this.features) {\r\n const refactoredArray = featuresToCheck.map((feature) => {\r\n feature.matchesMetaFailed = !(feature.matchesMetaForCondition(propName, propValue));\r\n return feature\r\n });\r\n return refactoredArray.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n /**\r\n * Called before setLayers, so that each Feature can set the zIndex for its layers\r\n * @param zIndexes {object}\r\n */\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n this.getRelatedItems().forEach(_ => _.setZIndex(zIndexes));\r\n }\r\n }\r\n\r\n /**\r\n * Each feature will load its data from teh data object which comes from REST\r\n * @param dbFeature {object}\r\n * @return boolean // needed for break logic\r\n */\r\n load(dbFeature) {\r\n console.log('exception load', this, dbFeature);\r\n Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Will return the list of sub-parts if any, i.e. for Vanity it will be Mirror, Toilet, Sink, ...\r\n * !@param withHidden {boolean}\r\n * @returns {Array.}\r\n */\r\n subParts(withHidden = true) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n filterRelatedItem(relatedItem, withHidden) {\r\n return withHidden\r\n ? relatedItem.visible && relatedItem.featureGroupEnabled\r\n : relatedItem.visible\r\n && relatedItem.featureGroupEnabled\r\n && (relatedItem.featureGroupVisible || (!relatedItem.featureGroupVisible && document.kvConfig.isBackend))\r\n }\r\n\r\n /**\r\n * Returns the navigation item to be displayed in navigation bar\r\n */\r\n navigationItem() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n /**\r\n * In case of Vanity is Custom & Complete.\r\n * Usually called for Complex parts, such as Vanities\r\n */\r\n subTypes() {\r\n // Exception.NotImplementedBaseClass(this);\r\n return []\r\n }\r\n\r\n /**\r\n * Converts a given sub-type to string\r\n // * @param subType\r\n * @returns {null}\r\n */\r\n subTypeToString() {\r\n return null;\r\n }\r\n\r\n /**\r\n * Checked whether the given sub-type has items, i.e. Vanity.Complete has\r\n */\r\n isSubTypeWithItems() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n activeSubType() {\r\n Exception.NotImplementedBaseClass(this);\r\n }\r\n\r\n getFilteredFeaturesByFilters(filters, featuresArray = this.features) {\r\n return !isEmpty(filters) ? filterFeaturesByValues(featuresArray, filters) : (featuresArray || []);\r\n }\r\n\r\n getFeaturesBySearchText(arrayToFilter, searchText) {\r\n if (!searchText) {\r\n return arrayToFilter\r\n }\r\n if (IS_LIXIL_UI) {\r\n return this.getFeaturesBySearchTextLixil(arrayToFilter, searchText)\r\n }\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return arrayToFilter.filter(feature => {\r\n const _searchText = trim(searchText.toLowerCase());\r\n let res = (!!feature);\r\n if (res) {\r\n const featureFilterValueIds = Object.assign(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs);\r\n let isPartName = feature.getFeatureName && feature.getFeatureName().toLowerCase().includes(_searchText);\r\n let isFilterName = false;\r\n\r\n if(!isPartName) {\r\n for(let filterGroupId in featureFilterValueIds) {\r\n let filterGroupIds = featureFilterValueIds[filterGroupId];\r\n for(let filterIndex in filterGroupIds) {\r\n let filterId = filterGroupIds[filterIndex];\r\n if(filterGroups[filterGroupId] && filterGroups[filterGroupId].values) {\r\n let filterGroup = filterGroups.find(fg => fg.id === filterGroupId);\r\n if (filterGroup && filterGroup.values) {\r\n let filter = filterGroup.values.find( fgv => fgv.id === filterId);\r\n if (filter) {\r\n isFilterName = (isFilterName || filter.displayText.toLowerCase().includes(_searchText) || filter.value.toLowerCase().includes(_searchText));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n res = isPartName || isFilterName;\r\n }\r\n return res;\r\n })\r\n }\r\n\r\n getFeaturesBySearchTextLixil(arrayToFilter, searchText) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const collectionFilterGroup = filterGroups.find(group => group.name === \"Collection\");\r\n const _searchText = searchText.trim().toLowerCase();\r\n\r\n return arrayToFilter.filter(feature => {\r\n const featureFilterValueIds = getAllFeatureFilters(feature);\r\n const sku = (feature.getSplittedFeatureName() || \"\").toLowerCase();\r\n const customDisplayName = (feature.dbFeature.customDisplayName || \"\").toLowerCase();\r\n\r\n let res = (!!feature);\r\n if (res) {\r\n let matchByName = (sku && sku.includes(_searchText)) || (customDisplayName && customDisplayName.includes(_searchText));\r\n let isFilterName = false;\r\n\r\n if (!matchByName && collectionFilterGroup && Array.isArray(featureFilterValueIds[collectionFilterGroup.id])) {\r\n matchByName = featureFilterValueIds[collectionFilterGroup.id].some(filterId => {\r\n return collectionFilterGroup.values.some(fValue => {\r\n return (fValue.id === filterId) && fValue.displayText && fValue.displayText.toLowerCase().includes(_searchText)\r\n })\r\n })\r\n }\r\n\r\n if (!matchByName) {\r\n for(let filterGroupId in featureFilterValueIds) {\r\n let filterGroupIds = featureFilterValueIds[filterGroupId];\r\n for(let filterIndex in filterGroupIds) {\r\n let filterId = filterGroupIds[filterIndex];\r\n if(filterGroups[filterGroupId] && filterGroups[filterGroupId].values) {\r\n let filterGroup = filterGroups.find(fg => fg.id === filterGroupId);\r\n if (filterGroup && filterGroup.values) {\r\n let filter = filterGroup.values.find(fgv => fgv.id === filterId);\r\n if (filter) {\r\n isFilterName = (isFilterName || filter.displayText.toLowerCase().includes(_searchText) || filter.value.toLowerCase().includes(_searchText));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n res = matchByName || isFilterName;\r\n }\r\n return res;\r\n })\r\n }\r\n\r\n /**\r\n * Returns the fabricator feature id\r\n * @returns {int}\r\n */\r\n id() {\r\n return this.dbFeature.id;\r\n }\r\n\r\n /**\r\n * Returns the fabricator feature id\r\n * @param featureId {number}\r\n * @param partsToo {boolean}\r\n * @returns {feature}\r\n */\r\n getFeatureById(featureId, partsToo = false) {\r\n const neededId = +featureId;\r\n if (!this.features && (!partsToo || !this.featuresParts)) {\r\n console.error(\"This featureGroup has no features array:\", this)\r\n return null\r\n }\r\n // if (partsToo) {\r\n // return this.features.find(f => f.dbFeature.id === neededId) || this.featuresParts.find(f => f.dbFeature.id === neededId)\r\n // }\r\n // return this.features.find(f => f.dbFeature.id === neededId)\r\n const allFeatures = partsToo ? [...this.features, ...this.featuresParts] : this.features;\r\n for (let i = 0; i < allFeatures.length; i++) {\r\n if (allFeatures[i].dbFeature.id === neededId) {\r\n return allFeatures[i];\r\n }\r\n }\r\n return null\r\n }\r\n\r\n getFeatureByPartName(partName, inParts = false) {\r\n if (!partName) {\r\n return null\r\n }\r\n partName = partName.split(\" \").join(\"\").toLowerCase(); // for example, \"Natural Stone Sofitel Gold\" & \"Natural Stone Sofitel Gold\" - different names\r\n const arrayToFind = inParts && this.featureParts ? this.featureParts.map(feature => { return {part: feature} }) : this.navigationSubItems();\r\n const matchingItem = arrayToFind.find(navFeature => {\r\n const feature = navFeature.part;\r\n if (!feature.partName || feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n if (!feature._partNameWithoutSpaces) {\r\n feature._partNameWithoutSpaces = feature.getMatchingFeatureName().split(\" \").join(\"\").toLowerCase();\r\n }\r\n return partName === feature._partNameWithoutSpaces\r\n });\r\n return matchingItem ? matchingItem.part : null\r\n }\r\n\r\n getDefaultFeature() {\r\n\r\n }\r\n\r\n /**\r\n * Returns the active feature id\r\n * @param placeholdersNeeded\r\n * @returns {int}\r\n */\r\n activeFeatureId(placeholdersNeeded = false) {\r\n return placeholdersNeeded && this.placeholderFeature && !this.placeholderChanged\r\n ? this.placeholderFeature.dbFeature.id\r\n : this.activeFeature.dbFeature.id\r\n }\r\n\r\n /**\r\n * @param feature {Part}\r\n * @returns {*}\r\n */\r\n featureDefinitionId(feature = null) {\r\n const dbFeature = feature ? feature.dbFeature : this.dbFeature;\r\n return dbFeature.featureDefinitionID;\r\n }\r\n\r\n handleClick() {}\r\n\r\n disabledClick() {}\r\n\r\n /**\r\n * Used for metaData conditions\r\n * @returns Array\r\n */\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n updateLocalStorage() {\r\n const layout = this.layout || this.getParent().layout || this.getParent().getParent().layout;\r\n layout.updateLocalStorage();\r\n }\r\n\r\n /**\r\n * Used for complex parts, i.e. Vanity - Complex, Custom\r\n // * @param subType\r\n */\r\n handleSubTypeClick() {\r\n Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Handles the click on sub-part buttons, i.e. for Vanity on its buttons such as Toilet, Sink...\r\n // * @param subPart\r\n */\r\n handleSubPartClick() {\r\n // Exception.NotImplementedBaseClass();\r\n }\r\n\r\n /**\r\n * Returns first value Id from a specific group\r\n * @param groupId\r\n */\r\n filterValue(groupId) {\r\n return this.dbFeature.filterValueIDs[groupId][0];\r\n }\r\n\r\n /**\r\n * Do something specific after layer changes\r\n // * @param layoutType\r\n */\r\n changeLayout() {\r\n\r\n }\r\n\r\n /**\r\n * Do something specific after Type Changed (returns null by default for all Parts)\r\n */\r\n setDefaultPartAfterSubTypeClick() {\r\n return null\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems\r\n }\r\n\r\n /**\r\n * Set default layer for each relatedItem of the group.\r\n * @param layout {Layout}\r\n */\r\n setDefault(layout) {\r\n this.relatedItems.forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n setFeatureGroupDefault(layout, setNotInVisFeature = this.hasNoVisualizerLayers) {\r\n const conditions = this.getArrayOfConditions ? this.getArrayOfConditions() : null;\r\n let filteredFeatures = conditions ? this.features.filter(feature => {\r\n return setNotInVisFeature\r\n ? feature.matchesMetaForArrayOfConditions(conditions)\r\n : feature.dbFeature.s3Bindings && feature.matchesMetaForArrayOfConditions(conditions)\r\n }) : this.features;\r\n\r\n if (document.kvConfig.visualizerType === \"bvLook\" && !filteredFeatures.length\r\n && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && !(this.partId.includes(\"_wall\") && this.hasAdditionalParts)) {\r\n filteredFeatures = this.getArrayOfConditions\r\n ? this.featuresParts.filter(f => f.dbFeature.s3Bindings && f.matchesMetaForArrayOfConditions(conditions))\r\n : this.featuresParts;\r\n }\r\n\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n const features = this.features;\r\n if (IS_LIXIL_UI && !this.activeFeature && !this.activeNotInVisualizerFeature && Array.isArray(features)\r\n && features.length && features.every(feature => feature.notAvailableInVisualizer)) {\r\n this.activeNotInVisualizerFeature = features[0];\r\n }\r\n // this.placeholderFeature = this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n // });\r\n if (this.hasAdditionalParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n if (this.layerPositions) {\r\n if (this.activeFeature) {\r\n this.setLayerPositions()\r\n } else {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n this.layerPositions[key] = null;\r\n })\r\n }\r\n }\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n const currentActiveFeature = this.activeFeature;\r\n if (currentActiveFeature && currentActiveFeature.partName) {\r\n let splittedFromTheLayoutName = partName && this.removeLayoutFromPartName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n if (!this.activeFeature) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilterValue = getColorFilterValue(currentActiveFeature, filterGroups);\r\n if (colorFilterValue) {\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const currentColorFilterValue = getColorFilterValue(feature, filterGroups);\r\n return currentColorFilterValue && currentColorFilterValue.id === colorFilterValue.id\r\n });\r\n }\r\n }\r\n }\r\n if (!this.activeFeature && this.selectedFeaturesHistory) {\r\n for (let featureName of this.selectedFeaturesHistory.slice(0, 5)) { // check first five, no need to go further\r\n const foundFeature = this.getFeatureByPartName(featureName);\r\n if (foundFeature) {\r\n const prevFeatureMatchingName = foundFeature.getMatchingFeatureName();\r\n const foundFinally = filteredFeatures.find(feature => {\r\n return feature.getMatchingFeatureName() === prevFeatureMatchingName\r\n });\r\n if (foundFinally) {\r\n this.activeFeature = foundFinally;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return !!this.activeFeature\r\n }\r\n\r\n getFeatureName = () => {\r\n const originalName = this.metaData.ActualDisplayedName\r\n ? this.dbFeature.customDisplayName && (this.dbFeature.customDisplayName !== this.dbFeature.sharedFeatureName)\r\n ? this.dbFeature.customDisplayName\r\n : this.metaData.ActualDisplayedName[0]\r\n : this.dbFeature.customDisplayName || this.partName || \"\";\r\n const checkedCatName = checkIfInCatProperty(this, \"inCatName\", originalName) || originalName || \"\";\r\n const parent = this.getParent();\r\n return checkedCatName.replace((this.dbFeature.customGroupName || parent.dbName || parent.partName) + \" - \", \"\");\r\n };\r\n\r\n getLowerCasedCustomDisplayName = () => {\r\n if (!this._lowercaseCustomDisplayName) {\r\n this._lowercaseCustomDisplayName = (this.dbFeature.customDisplayName || this.partName || '')\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return this._lowercaseCustomDisplayName;\r\n };\r\n\r\n getLowerCasedSharedFeatureName = () => {\r\n if (!this._lowercaseSharedFeatureName) {\r\n this._lowercaseSharedFeatureName = (this.dbFeature.sharedFeatureName || this.partName || '')\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return this._lowercaseSharedFeatureName;\r\n };\r\n\r\n /**\r\n * @param dbFeaturesArray {[dbFeatureInterface]}\r\n * @param pageSize {number}\r\n * @param setNextPage {boolean}\r\n * @param layoutAbbr {string}\r\n * @param loadedPage {number|null}\r\n * @param fromSearch {boolean}\r\n * @param setCustomConfigurationsAfter {boolean}\r\n */\r\n setGroupFeatures(dbFeaturesArray,\r\n pageSize = 1000,\r\n setNextPage = true,\r\n layoutAbbr = \"\",\r\n loadedPage = null,\r\n fromSearch = false,\r\n setCustomConfigurationsAfter = true) {\r\n\r\n const layout = this.layout || this.getParent().layout;\r\n const layoutToSet = layoutAbbr || layout.getCurrentLayoutAbbreviation();\r\n\r\n if (setNextPage) {\r\n // this.nextFeaturesPageToLoad += 1;\r\n let nextFeaturesPageToLoad = 1;\r\n const addFromPageSize = pageSize === 6000 ? 3 : 1;\r\n if (this.nextFeaturesPageToLoadArray) {\r\n nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n ? this.nextFeaturesPageToLoadArray[layoutToSet].page + addFromPageSize\r\n : this.nextFeaturesPageToLoadArray[layoutToSet].page + 1\r\n } else {\r\n nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n ? this.nextFeaturesPageToLoad + addFromPageSize\r\n : this.nextFeaturesPageToLoad + 1;\r\n }\r\n // let nextFeaturesPageToLoad = Number.isInteger(loadedPage)\r\n // ? this.nextFeaturesPageToLoad + (pageSize === 6000 ? 3 : 1)\r\n // : this.nextFeaturesPageToLoadArray ? this.nextFeaturesPageToLoadArray[layoutToSet].page + 1 : this.nextFeaturesPageToLoad + 1;\r\n // if ((pageSize / 1000 - 1) === 1) {\r\n // nextFeaturesPageToLoad += 1\r\n // }\r\n this.nextFeaturesPageToLoad = nextFeaturesPageToLoad;\r\n if (this.nextFeaturesPageToLoadArray) {\r\n this.nextFeaturesPageToLoadArray[layoutToSet].page = nextFeaturesPageToLoad;\r\n }\r\n this.allFeaturesReceived = true;\r\n }\r\n if (!fromSearch) {\r\n if (this.nextFeaturesPageToLoadArray) {\r\n this.nextFeaturesPageToLoadArray[layoutToSet].allReceived = dbFeaturesArray.length < pageSize;\r\n const {bvPresets} = store.getState().bathroomVisualizerState;\r\n if (bvPresets && bvPresets.length) {\r\n const uniqueLayoutsTypes = bvPresets.reduce((total, preset) => {\r\n if (!total.some(layoutType => layoutType === preset.layout_type)) {\r\n total.push(preset.layout_type)\r\n }\r\n return total\r\n }, []);\r\n this.realFeaturesReceived = uniqueLayoutsTypes.every(layoutNumber => {\r\n const layoutName = layout.getCurrentLayoutName(layoutNumber);\r\n return this.nextFeaturesPageToLoadArray[layoutName] && this.nextFeaturesPageToLoadArray[layoutName].allReceived\r\n });\r\n } else {\r\n this.realFeaturesReceived = dbFeaturesArray.length < pageSize;\r\n }\r\n } else {\r\n this.realFeaturesReceived = dbFeaturesArray.length < pageSize;\r\n }\r\n }\r\n\r\n layout.loadNewFeatures(dbFeaturesArray, this, setCustomConfigurationsAfter);\r\n\r\n }\r\n\r\n getRealFeaturesReceivedProperty = () => {\r\n const layout = this.layout || this.getParent().layout;\r\n const currentLayoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n return this.nextFeaturesPageToLoadArray\r\n ? this.nextFeaturesPageToLoadArray[currentLayoutAbbr].allReceived\r\n : this.realFeaturesReceived\r\n }\r\n\r\n getNextPageToLoad = (currentLayoutAbbr) => {\r\n // intermediatePart\r\n if (this.nextFeaturesPageToLoadArray) {\r\n if (!currentLayoutAbbr) {\r\n const layout = this.layout || this.getParent().layout;\r\n currentLayoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n }\r\n return this.nextFeaturesPageToLoadArray[currentLayoutAbbr].page\r\n }\r\n return this.nextFeaturesPageToLoad\r\n }\r\n\r\n getCollectionName = (filterGroups) => {\r\n if (this._collectionName) {\r\n return this._collectionName\r\n }\r\n const collectionFg = filterGroups ? filterGroups.find(fGroup => fGroup.name === \"Collection\") : null;\r\n if (collectionFg) {\r\n const featureCollectionValue = getFilterGroupValues(this, collectionFg);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], collectionFg);\r\n if (featureCollectionValueObject) {\r\n this._collectionName = capitalizeFirstLetters(featureCollectionValueObject.displayText);\r\n return this._collectionName\r\n }\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getColorName = (filterGroups) => {\r\n if (this._colorName) {\r\n return this._colorName\r\n }\r\n const colorFilterGroup = filterGroups ? filterGroups.find(fGroup => fGroup.name === \"Color\") : null;\r\n\r\n if (colorFilterGroup) {\r\n const featureCollectionValue = getFilterGroupValues(this, colorFilterGroup);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], colorFilterGroup);\r\n if (featureCollectionValueObject) {\r\n this._colorName = capitalizeFirstLetters(featureCollectionValueObject.displayText);\r\n return this._colorName\r\n }\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getCustomFullDisplayName = () => {\r\n return this.getSplittedFeatureName() // is different in bvLook visualizer\r\n }\r\n\r\n getMatchingOptionsName = () => {\r\n return this.getSplittedFeatureName() // is different in bvLook visualizer\r\n }\r\n\r\n /**\r\n * Update visibility for all layers.\r\n * Each feature decides on its own what layers are needed.\r\n * In case when feature must be invisible it must return null, not an empty array\r\n * @param layout {Layout}\r\n * @param placeholdersNeeded {boolean}\r\n */\r\n setLayers(layout, placeholdersNeeded) {\r\n let layers = [];\r\n this.getRelatedItems()\r\n .filter(relItem => relItem.featureGroupEnabled)\r\n .forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n let activeFeatures = [];\r\n if (relatedItem.layerPositions) {\r\n Object.keys(relatedItem.layerPositions).forEach(key => {\r\n if (relatedItem.layerPositions[key]) {\r\n activeFeatures.push(relatedItem.layerPositions[key])\r\n }\r\n })\r\n } else {\r\n if (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature) {\r\n activeFeatures.push(relatedItem.placeholderFeature)\r\n } else if (relatedItem.activeFeature && relatedItem.partId !== \"attachment\") {\r\n activeFeatures.push(relatedItem.activeFeature)\r\n }\r\n }\r\n if (relatedItem.activeFeatureParts && relatedItem.activeFeatureParts.length) {\r\n activeFeatures = [...activeFeatures, ...relatedItem.activeFeatureParts]\r\n }\r\n activeFeatures.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer.src) {\r\n // cabinetActiveFeature.layer.partId = cabinetActiveFeature.partId;\r\n activeFeaturePart.layer.coords = activeFeaturePart.metaData[\"Coords\"];\r\n activeFeaturePart.layer.partId = activeFeaturePart.partId;\r\n activeFeaturePart.layer.layerPosition = activeFeaturePart.metaData.layerPosition;\r\n activeFeaturePart.layer.cropCoords = getFeatureCropCoors(activeFeaturePart);\r\n layers.push(activeFeaturePart.layer);\r\n }\r\n });\r\n });\r\n return layers.length ? layers : null;\r\n }\r\n\r\n // setPrevioslySelected(featureGroup) { // featureGroup is current active featureGroup from the click\r\n setPrevioslySelected() { // parent scope\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.activeFeatureBeforeAllWalls = !relatedItem.placeholderChanged\r\n ? \"placeholder\"\r\n : relatedItem.activeFeature;\r\n });\r\n }\r\n\r\n getFeaturesFromLayout = (layoutName, forSpecificScene, allFeatures) => {\r\n let currentLayoutFeatures = this.layerPositions\r\n ? [...(this.featuresList[layoutName] || []), ...(this.featuresPartsList[layoutName] || [])]\r\n : (this.featuresList[layoutName] || []);\r\n for (let i = 0; i < currentLayoutFeatures.length; i++) {\r\n const feature = currentLayoutFeatures[i];\r\n if (forSpecificScene && feature.metaData[\"RoomScene\"] && !feature.metaData[\"RoomScene\"].includes(forSpecificScene)) {\r\n continue\r\n }\r\n const featureName = feature.getSplittedFeatureName();\r\n if (!allFeatures.some(addedFeature => addedFeature.getSplittedFeatureName() === featureName)) {\r\n allFeatures.push(feature);\r\n }\r\n }\r\n return allFeatures\r\n }\r\n\r\n getFeaturesForNavigationFrom = (restOptions = {}) => {\r\n const {returnAllFeatures, forSpecificLayout, forSpecificScene} = restOptions;\r\n if (returnAllFeatures) {\r\n const layout = this.getParent().layout;\r\n let allFeatures = [];\r\n // 1) first add current layout features or specific layout features\r\n allFeatures = this.getFeaturesFromLayout(forSpecificLayout || (\"Layout\" + layout.type), forSpecificScene, allFeatures)\r\n if (forSpecificLayout) {\r\n return allFeatures\r\n }\r\n // 2) if we need all features - check another layouts\r\n const {bvPresets} = store.getState().bathroomVisualizerState;\r\n // const checkLayouts = layoutNames.filter(layoutName => {\r\n // if (forSpecificLayout) {\r\n // return forSpecificLayout === layoutName\r\n // }\r\n // return bvPresets.some(bvPreset => bvPreset.layout_type === +(layoutName.replace(\"Layout\", \"\")))\r\n // })\r\n\r\n // 2) next popular rooms are 11 for AS and 3 for grohe, check them\r\n if (layout.type !== 11 && (document.kvConfig.visualizerType === \"bvLook\")) {\r\n allFeatures = this.getFeaturesFromLayout(\"Layout11\", \"1\", allFeatures);\r\n }\r\n // if (layout.type !== 3) {\r\n // allFeatures = this.getFeaturesFromLayout(\"Layout3\", \"1\", allFeatures);\r\n // }\r\n // 3) select all features from scene 1\r\n bvPresets.forEach(bvPreset => {\r\n if (bvPreset.layout_type === layout.type) {\r\n return;\r\n }\r\n const stringifiedLayout = \"Layout\" + bvPreset.layout_type;\r\n allFeatures = this.getFeaturesFromLayout(stringifiedLayout, \"1\", allFeatures);\r\n });\r\n // 4) check skipped layouts to get all other features another room scenes features\r\n const layoutNames = Object.keys(layout.layoutNames).filter(key => key !== \"All\");\r\n layoutNames.forEach((layoutType) => {\r\n allFeatures = this.getFeaturesFromLayout(layoutType, null, allFeatures);\r\n });\r\n // console.log(\"allFeatures\", allFeatures);\r\n return allFeatures\r\n }\r\n return this.layerPositions ? [...this.features, ...this.featuresParts] : this.features\r\n }\r\n\r\n checkAutoAddToCart = (feature) => {\r\n //intermediatePart\r\n if (!feature.dbFeature.autoAddToCart) {\r\n return;\r\n }\r\n const parentGroup = this.getParent ? this.getParent() : null;// parent, for ex. \"Appliance\"\r\n if (parentGroup && parentGroup.layout && parentGroup.layout.isFakeLayout) {\r\n return;\r\n }\r\n const cartItem = {\r\n selectionGroup: (parentGroup && parentGroup.menuType) ? parentGroup.partName : this.partName,\r\n quantity: 1,\r\n partId: this.partId,\r\n cartFeature: feature\r\n };\r\n if (feature.dbFeature.displayLogic) {\r\n const storeState = store.getState();\r\n const {quantity, isMatching} = featureIsMatchingDisplayLogic(\r\n feature,\r\n storeState.cartState.cartItems,\r\n storeState.quotesState.activeQuoteIndex,\r\n storeState.wizardState.allWizardsValues\r\n );\r\n if (isMatching && (!storeState.cartState.cartItems.some(cItem => {\r\n return cItem.cartFeature && cItem.cartFeature.dbFeature && (cItem.cartFeature.dbFeature.id === feature.dbFeature.id)\r\n }))) {\r\n cartItem.quantity = quantity;\r\n store.dispatch(addToCart([cartItem]));\r\n }\r\n store.dispatch(addDisplayLogicCartItem(cartItem, this.getParent().layout.visualizerType));\r\n } else {\r\n store.dispatch(addToCart([cartItem]));\r\n }\r\n }\r\n\r\n loadFeatureCommon = (feature) => { // other logic\r\n this.checkAutoAddToCart(feature);\r\n if (feature.dbFeature.groupName === \"Room\") {\r\n feature = setRoomNotInVisualizerProperty(feature);\r\n }\r\n if (IS_LIXIL_UI && !feature.dbFeature.clickable) {\r\n const layout = this.getParent().layout;\r\n if (layout && layout.disabledClickablePartIds && !layout.disabledClickablePartIds.includes(this.partId)) {\r\n layout.disabledClickablePartIds.push(this.partId);\r\n }\r\n }\r\n // const layout = this.getParent().layout;\r\n // if (feature.dbFeature.isRelatedDbFeature) {\r\n // if (!Array.isArray(layout.allRelatedDbFeatures)) {\r\n // layout.allRelatedDbFeatures = [];\r\n // }\r\n // if (!layout.allRelatedDbFeatures.some(addedDbFeature => addedDbFeature.id === feature.dbFeature.id)) {\r\n // layout.allRelatedDbFeatures.push(feature.dbFeature);\r\n // }\r\n // }\r\n // loadRelatedFeatures(feature.dbFeature, layout);\r\n };\r\n\r\n _setLayers(layout) {\r\n //intermediatePart\r\n if (!this.disabled) {\r\n if (!this.activeFeature) {\r\n this.setDefault(layout);\r\n }\r\n if (this.layerPositions) {\r\n Object.keys(this.layerPositions).forEach(key => {\r\n if (this.layerPositions[key]) {\r\n if (this.layerPositions[key].matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n this.setFeatureLayer(this.layerPositions[key], layout);\r\n } else {\r\n this.layerPositions[key].layer.src = '';\r\n }\r\n }\r\n })\r\n } else if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer) {\r\n if (this.partId !== \"attachment\") { // remove activeFeature layer to prevent duplicate, it has parts\r\n this.setFeatureLayer(this.activeFeature, layout);\r\n }\r\n if (this.hasAdditionalParts && (document.kvConfig.visualizerType === \"kvScene\")) {\r\n this.activeFeatureParts = this.setActiveFeatureParts(); // we have to set them each time because we need to react on disabled clicks (bottom cabinet - appliances)\r\n }\r\n if (Array.isArray(this.activeFeatureParts) && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n this.setFeatureLayer(activeFeaturePart, layout);\r\n })\r\n }\r\n }\r\n if (this.placeholderFeature) {\r\n this.setFeatureLayer(this.placeholderFeature, layout);\r\n }\r\n } else {\r\n this.hideLayers();\r\n }\r\n }\r\n\r\n setFeatureLayer(currentFeature, layout) {\r\n //intermediatePart\r\n // console.log('currentFeature', currentFeature);\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (!currentFeature || !currentFeature.dbFeature || !currentFeature.dbFeature.s3Bindings\r\n || (!(currentFeature.dbFeature.metaData[\"RoomLayout\"]) || !currentFeature.dbFeature.metaData[\"RoomLayout\"].includes(layoutAbr))) {\r\n if (currentFeature) {\r\n currentFeature.layer.src = \"\";\r\n }\r\n return;\r\n }\r\n const s3Binding = currentFeature.dbFeature.s3Bindings.find(binding => binding.visualizer === layout.layersBinding);\r\n currentFeature.layer.src = s3Binding ? s3Binding.path : null;\r\n currentFeature.layer.bucketName = s3Binding ? s3Binding.bucketName : null;\r\n }\r\n\r\n featureClicked() {\r\n const featuresHistory = this.activeFeature ? this.selectedFeaturesHistory : this.getParent().selectedFeaturesHistory;\r\n const partName = this.activeFeature ? this.activeFeature.partName : this.partName;\r\n if (Array.isArray(featuresHistory) && (featuresHistory[0] !== partName)) {\r\n featuresHistory.unshift(partName); // add in the beggining\r\n if (featuresHistory.length > 10) {\r\n featuresHistory.pop() // remove last element, no need to keep huge arrays\r\n }\r\n }\r\n this.updateLocalStorage();\r\n // other specific events, for ex. Google Analytics, etc.\r\n }\r\n\r\n\r\n // navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions) { // to do\r\n navigationItemsWithOptions(filters, forFeature, filterGroups, featuresToDisplay) {\r\n // intermediate part\r\n let newFeatures = [];\r\n let navItems = [];\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n\r\n if (filterGroups && filterGroups.length && (!filters || !Object.keys(filters).length)) {\r\n // console.log(\"filteredAvailableFeatures\", filteredAvailableFeatures);\r\n // console.log(\"featuresToDisplay\", featuresToDisplay);\r\n for (let i = 0; i < featuresToDisplay.length; i++) { // 1) take all others\r\n const currentFeature = featuresToDisplay[i];\r\n const colorName = currentFeature.getColorName(filterGroups);\r\n const matchingOptionsName = currentFeature.getMatchingOptionsName();\r\n let conditionPassed = !colorName\r\n || !newFeatures.some(feature => feature.getMatchingOptionsName() === matchingOptionsName)\r\n || (currentFeature.metaData[matchingFeatureProperty] && !newFeatures.some(feature => feature.metaData[matchingFeatureProperty]\r\n && isEqual(feature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty])))\r\n if (conditionPassed) {\r\n newFeatures.push(currentFeature);\r\n }\r\n }\r\n navItems = this.returnUniqueNavFeatures(this.getNavItemsWithOptions(forFeature, newFeatures, featuresToDisplay, filterGroups).map(featureObject => {\r\n return new DesignNavigationItem(featureObject.mainFeature.featureName, featureObject.mainFeature, featureObject.otherOptions)\r\n }), false);\r\n }\r\n if (!navItems.length) {\r\n navItems = this.returnUniqueNavFeatures(featuresToDisplay)\r\n }\r\n // if (this.filterNavigationItems && forFeature) {\r\n // navItems = this.filterNavigationItems(navItems, forFeature)\r\n // }\r\n return navItems\r\n }\r\n\r\n /**\r\n * this is almost the same as feature options, it is replacing next nav items with the needed color feature\r\n * @param forFeature {featureInterface} featureInterface\r\n * @param newFeatures {[featureInterface]}\r\n * @param allFeatures {[featureInterface]}\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @returns {array}\r\n */\r\n getNavItemsWithOptions = (forFeature= null,\r\n newFeatures = [],\r\n allFeatures = [],\r\n filterGroups) => {\r\n\r\n const matchingFeatureProperty = this.useMatchingFeatureReplacement || \"MatchingFeature\";\r\n const neededColorName = forFeature ? forFeature.getColorName(filterGroups) : \"\";\r\n\r\n return newFeatures.map(currentFeature => {\r\n const filterValue = getColorFilterValue(currentFeature, filterGroups);\r\n let otherOptions = getOptionsFromNavItemsForFeature(currentFeature, allFeatures, filterGroups);\r\n\r\n const currentFeatureColor = currentFeature.getColorName(filterGroups);\r\n const customFullDisplayName = currentFeature.getMatchingOptionsName();\r\n\r\n if (forFeature && (currentFeature.dbFeature.id === forFeature.dbFeature.id || (\r\n (customFullDisplayName === forFeature.getMatchingOptionsName())\r\n && (!forFeature.metaData[matchingFeatureProperty] || isEqual(forFeature.metaData[matchingFeatureProperty], currentFeature.metaData[matchingFeatureProperty]))\r\n && (currentFeatureColor && forFeature.getColorName(filterGroups) && (currentFeatureColor !== forFeature.getColorName(filterGroups)))\r\n ))) {\r\n if (filterValue && !otherOptions.some(option => option.colorValue.id === filterValue.id)) {\r\n otherOptions.push({feature: currentFeature, colorValue: filterValue})\r\n }\r\n return {\r\n mainFeature: forFeature,\r\n otherOptions: otherOptions.filter(option => option.feature.dbFeature.id !== forFeature.dbFeature.id)\r\n };\r\n } else {\r\n if (!filterValue) {\r\n return {mainFeature: currentFeature, otherOptions: []}\r\n }\r\n const allOptions = [{feature: currentFeature, colorValue: filterValue}, ...otherOptions];\r\n const mainOption = (forFeature && neededColorName && allOptions.find(option => option.feature.getColorName(filterGroups) === neededColorName))\r\n // console.log(\"mainOption\", mainOption);\r\n if (mainOption) {\r\n return {\r\n mainFeature: mainOption.feature,\r\n otherOptions: allOptions.filter(option => option.feature.dbFeature.id !== mainOption.feature.dbFeature.id)\r\n }\r\n }\r\n return {mainFeature: currentFeature, otherOptions}\r\n }\r\n });\r\n }\r\n\r\n returnUniqueNavFeatures(featuresToDisplay, createNavItems = true) {\r\n const navItems = createNavItems ? this.returnNavItemsFromFeatures(featuresToDisplay) : featuresToDisplay;\r\n if (document.kvConfig.visualizerType === \"bvScene\" && (this.partId ===\"sink\" || this.partId ===\"center_island_sink\"\r\n || this.partId ===\"vanity_sink\" || this.partId ===\"vanity_faucet\")) {\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id && navItem.part.getSplittedFeatureName());\r\n }\r\n if (document.kvConfig.toolVersion >= 5) { // not sure if we can do that for old visualizers\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id && navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n return uniqBy(navItems, (navItem) => navItem.part.dbFeature.id);\r\n }\r\n\r\n returnNavItemsFromFeatures(featuresToDisplay) {\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n}\r\n\r\nPartCommon.prototype.getFeatureCurrency = function (propsFilterGroups) {\r\n if (Object.hasOwnProperty(this._useCurrency)) {\r\n return this._useCurrency\r\n }\r\n this._useCurrency = null;\r\n const filterGroups = propsFilterGroups || store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Currency\");\r\n if (!filterGroup) {\r\n return this._useCurrency\r\n }\r\n const featureCollectionValue = getFilterGroupValues(this, filterGroup);\r\n if (Array.isArray(featureCollectionValue)) {\r\n const featureCollectionValueObject = getFilterGroupValue(featureCollectionValue[0], filterGroup);\r\n if (featureCollectionValueObject) {\r\n this._useCurrency = featureCollectionValueObject.value\r\n }\r\n }\r\n return this._useCurrency\r\n}\r\n\r\nPartCommon.prototype.getFeatureRelatedFeatures = function () {\r\n if (!this._relatedFeaturesSet) {\r\n // console.log(\"loadRelatedFeatures\", this.dbFeature);\r\n loadRelatedFeatures(this.dbFeature, this.getParent().getParent().layout);\r\n this._relatedFeaturesSet = true;\r\n }\r\n return this.dbFeature.relatedFeatures\r\n}\r\n","import {Component} from 'react';\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getBvGroupFeatures, getBvGroupFilterValues} from \"../../../api/server-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {IS_OFFLINE_MODE, USE_SERVER_CACHING} from \"../../../config\";\r\nimport {\r\n COUNTERTOP_GROUP,\r\n LayoutAbbreviations,\r\n LayoutType as LayoutTypes\r\n} from \"../../kvComponent/core/constants\";\r\nimport {setActivePartFilterValues} from \"../../../misc/filtersFunctions\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll, getFeaturesPageSize} from \"../../../api/look-api\";\r\nimport store from \"../../../store\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\n\r\nexport default class NavigationRequests extends Component {\r\n\r\n getBvPartFeatures = async (item, navigationItem, callBack = null) => {\r\n if (!item.part.createdManually && !item.part.requestInProgress) {\r\n const itemPart = item.part;\r\n const layout = itemPart && itemPart.getParent\r\n ? itemPart.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n let responseArray;\r\n if (layout.isNewLayout) {\r\n responseArray = await getAdditionalFeaturesOnScroll(itemPart, false);\r\n } else {\r\n const pageSize = getFeaturesPageSize(itemPart);\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n const nextFeaturesPage = itemPart.getNextPageToLoad(layoutAbbr);\r\n itemPart.requestInProgress = true;\r\n const response = await getBvGroupFeatures(itemPart.dbName || itemPart.partName, nextFeaturesPage, pageSize);\r\n\r\n responseArray = Array.isArray(response) ? response : [];\r\n\r\n itemPart.requestInProgress = false;\r\n // if (location.port === '9007' || document.kvConfig.kioskMode) {\r\n // console.log('response', response.data);\r\n // }\r\n itemPart.setGroupFeatures(responseArray, pageSize, true, layoutAbbr, nextFeaturesPage);\r\n }\r\n if (navigationItem) {\r\n this.setState({\r\n [navigationItem]: item,\r\n render: false,\r\n showFilterSelection: true\r\n }, () => {\r\n this.setState({\r\n render: true,\r\n });\r\n this.forceUpdate()\r\n });\r\n }\r\n if (callBack) {\r\n callBack()\r\n }\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n\r\n return responseArray\r\n }\r\n };\r\n\r\n getRelatedItemFeatures = (relatedItem) => {\r\n return this.getBvPartFeatures({\r\n part: relatedItem,\r\n text: relatedItem.partName\r\n }, \"\");\r\n };\r\n\r\n checkIfAllFeaturesReceived = (item, navigationItem, callBack, materialsPage) => {\r\n if (IS_OFFLINE_MODE) {\r\n return false\r\n }\r\n const itemPart = item.part;\r\n const layout = itemPart && itemPart.getParent\r\n ? itemPart.getParent().layout || getCurrentLayout()\r\n : getCurrentLayout();\r\n const layoutAbbr = layout.getCurrentLayoutAbbreviation();\r\n if (!(layout.isNewLayout && (itemPart && (itemPart.partId === \"range\" || itemPart.partId === \"stove\")))\r\n && (!itemPart.allFeaturesReceived || (itemPart.nextFeaturesPageToLoadArray && !itemPart.nextFeaturesPageToLoadArray[layoutAbbr].page))) {\r\n this.getBvPartFeatures(item, navigationItem, callBack);\r\n }\r\n if (layout.isNewLayout) {\r\n checkIfLookFeaturesReceived(itemPart, true).then(() => {\r\n if (materialsPage) {\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n } else {\r\n callBack ? callBack() : this.forceUpdate();\r\n }\r\n }); // it has all needed feature groups already there\r\n }\r\n const showerParent = layout.parts[\"Shower\"];\r\n const wallParent = layout.parts[\"Walls\"];\r\n const showerComboParent = layout.parts[\"Shower Tub Combo\"];\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const centerIslandParent = layout.parts[\"CenterIsland\"];\r\n const countertopParent = layout.parts[\"Countertop\"];\r\n const applianceParent = layout.parts[\"Appliances\"];\r\n\r\n if (this.isWallItem(itemPart)) {\r\n wallParent.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(relatedItem);\r\n }\r\n });\r\n } else if (itemPart.partId === \"vanity_cabinet\") {\r\n const vanityParent = itemPart.getParent();\r\n vanityParent.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(relatedItem);\r\n }\r\n });\r\n if (!layout.isNewLayout) {\r\n const navItem = {\r\n part: showerParent.showerBody,\r\n text: showerParent.showerBody.partName\r\n };\r\n this.checkIfAllFeaturesReceived(navItem, \"\");\r\n if (wallParent.vanityAccent && !wallParent.vanityAccent.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.vanityAccent);\r\n }\r\n }\r\n } else if (itemPart.partId === \"shower_door\") {\r\n if (showerParent && showerParent.showerDoorHandle && !showerParent.showerDoorHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(showerParent.showerDoorHandle);\r\n }\r\n } else if (itemPart.partId === \"top_cabinet\") { /*** KITCHEN TOP CABINETS REQUIRE CROWN_MOLDING AND HOOD AND HANDLES AND CABINETS***/\r\n if (cabinetParent && cabinetParent.crownMolding && !cabinetParent.crownMolding.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.crownMolding);\r\n }\r\n if (cabinetParent && cabinetParent.topHandle && !cabinetParent.topHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topHandle);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomCabinet);\r\n }\r\n if (centerIslandParent && centerIslandParent.cabinet && !centerIslandParent.cabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.cabinet);\r\n }\r\n if (applianceParent && applianceParent.hood && !applianceParent.hood.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(applianceParent.hood);\r\n }\r\n } else if (itemPart.partId === \"bottom_cabinet\") { /*** KITCHEN BOTTOM CABINETS REQUIRE TOP CABINETS & CENTER ISLAND ***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n if (centerIslandParent && centerIslandParent.cabinet && !centerIslandParent.cabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.cabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomHandle && !cabinetParent.bottomHandle.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomHandle);\r\n }\r\n } else if (itemPart.partId === \"center_island_cabinet\") { /*** KITCHEN CENTER ISLAND CABINETS REQUIRE TOP CABINETS & BOTTOM CABINETS***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n if (cabinetParent && cabinetParent.bottomCabinet && !cabinetParent.bottomCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.bottomCabinet);\r\n }\r\n } else if (itemPart.partId === \"countertop\") {\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n if (wallParent && wallParent.backsplash && !wallParent.backsplash.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.backsplash);\r\n }\r\n } else if (itemPart.partId === \"center_island_countertop\") {\r\n if (countertopParent && countertopParent.countertop && (!countertopParent.countertop.allFeaturesReceived\r\n || !(centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived))) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n if (wallParent && wallParent.backsplash && !wallParent.backsplash.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(wallParent.backsplash);\r\n }\r\n } else if (itemPart.partId === \"backsplash\") {\r\n if (countertopParent && countertopParent.countertop && !countertopParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"edge_profile\") {\r\n if (countertopParent && countertopParent.countertop && !countertopParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(countertopParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"center_island_edge\") {\r\n if (centerIslandParent && centerIslandParent.countertop && !centerIslandParent.countertop.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(centerIslandParent.countertop);\r\n }\r\n } else if (itemPart.partId === \"microwave\" || itemPart.partId === \"hood\") { /*** KITCHEN APPLIANCE REQUIRE TOP CABINETS ***/\r\n if (cabinetParent && cabinetParent.topCabinet && !cabinetParent.topCabinet.allFeaturesReceived) {\r\n this.getRelatedItemFeatures(cabinetParent.topCabinet);\r\n }\r\n } else if (itemPart.createdManually) { // shower_body || wall_configuration\r\n const neededParts = [\"pony_wall\", \"left_shower_wall\", \"right_shower_wall\"];\r\n if (callBack) {\r\n neededParts.push(\"wall_c\");\r\n }\r\n const getData = async () => {\r\n return await Promise.all([...showerParent.relatedItems.map(async relatedItem => {\r\n if (relatedItem.partId !== itemPart.partId && !relatedItem.allFeaturesReceived) {\r\n return await this.getRelatedItemFeatures(relatedItem)\r\n }\r\n }), ...wallParent.relatedItems.map(async relatedItem => {\r\n if (neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived) {\r\n return await this.getRelatedItemFeatures(relatedItem);\r\n }\r\n })])\r\n };\r\n getData() // after we receive all shower related items we can switch shower body\r\n .then(() => {\r\n showerParent.showerBody.allFeaturesReceived = true;\r\n showerComboParent.wallConfiguration.allFeaturesReceived = true;\r\n if (materialsPage) {\r\n if (this._isMounted) {\r\n this.forceUpdate()\r\n }\r\n } else {\r\n callBack ? callBack() : this.forceUpdate();\r\n }\r\n });\r\n }\r\n };\r\n\r\n checkIfAllFiltersReceived = (activeSubPart, allFilterGroups) => {\r\n return getBvGroupFilterValues(activeSubPart.dbName || activeSubPart.partName)\r\n .then((response) => {\r\n setActivePartFilterValues(response.data, activeSubPart, allFilterGroups);\r\n return true\r\n });\r\n };\r\n\r\n isWallItem = (itemPart) => {\r\n let wallsPartIds = [];\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n wallsPartIds = [\"wall_a\", \"wall_b\", \"wall_c\", \"right_shower_wall\", \"left_shower_wall\",\"pony_wall\"];\r\n break;\r\n case \"Kitchen\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"popout_wall\"];\r\n break;\r\n case \"kvScene\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\", \"front_wall\", \"popout_wall\"];\r\n break;\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\", \"shower_interior_wall\"];\r\n break;\r\n default:\r\n wallsPartIds = [\"left_wall\", \"right_wall\", \"center_wall\"];\r\n }\r\n return wallsPartIds.includes(itemPart.partId);\r\n };\r\n\r\n static searchFeaturesByName = (relatedItem, searchName, pageSize = 9999) => {\r\n if (Array.isArray(relatedItem.alreadyRequestedFeatureNames)\r\n && relatedItem.alreadyRequestedFeatureNames.includes(searchName)) {\r\n return Promise.resolve()\r\n }\r\n const dbName = relatedItem.dbName || relatedItem.partName;\r\n return getBvGroupFeatures(dbName, 0, pageSize, [], searchName)\r\n .then(response => {\r\n if (response && response.length) {\r\n relatedItem.setGroupFeatures(response, 0, false);\r\n if (!relatedItem.alreadyRequestedFeatureNames) {\r\n relatedItem.alreadyRequestedFeatureNames = [];\r\n }\r\n if (searchName) {\r\n relatedItem.alreadyRequestedFeatureNames.push(searchName);\r\n }\r\n }\r\n return response\r\n })\r\n };\r\n\r\n changeLayout = (layoutType, firstChange = false) => {\r\n if (!firstChange) {\r\n loaderEnable();\r\n }\r\n window.requestInProcess = true;\r\n const layout = getCurrentLayout();\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const applianceParent = layout.parts[\"Appliances\"];\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const countertopParent = layout.parts[\"Countertop\"];\r\n const neededParts = [\"left_wall\", \"fridge\", \"top_cabinet\", \"top_handle\", \"bottom_cabinet\", \"bottom_handle\",\r\n \"popout_wall\", \"backsplash\", \"countertop\"];\r\n let relatedArray = [];\r\n [cabinetParent, applianceParent, wallsParent, countertopParent].forEach(parent => {\r\n if (parent) {\r\n relatedArray = [...relatedArray, ...parent.relatedItems]\r\n }\r\n });\r\n relatedArray = relatedArray.filter((relatedItem) => {\r\n return neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived\r\n });\r\n const countertopPageChanges = this.getSubPartLayoutPageChanges(countertopParent, \"countertop\", layoutType);\r\n const backsplashPageChanges = this.getSubPartLayoutPageChanges(wallsParent, \"backsplash\", layoutType);\r\n if (relatedArray.length\r\n || countertopPageChanges.requestNeeded\r\n || countertopPageChanges.requestNameNeeded\r\n || backsplashPageChanges.requestNeeded\r\n || backsplashPageChanges.requestNameNeeded\r\n ) {\r\n return this.getNeeededKvPartsOnLayoutChange(layoutType, relatedArray, [countertopPageChanges, backsplashPageChanges], firstChange);\r\n } else {\r\n this.finishChangeLayout(layoutType);\r\n }\r\n break;\r\n }\r\n // case \"kvScene\": {\r\n case \"bvScene\": {\r\n this.getBvSceneParts(layoutType);\r\n break;\r\n }\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n const showerParent = layout.parts[\"Shower\"];\r\n if (showerParent && showerParent.showerBody && !showerParent.showerBody.allFeaturesReceived) {\r\n const navItem = {\r\n part: showerParent.showerBody,\r\n text: showerParent.showerBody.partName\r\n };\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n this.forceUpdate();\r\n this.checkIfAllFeaturesReceived(navItem, \"\", () => {\r\n this.finishChangeLayout(layoutType, oldType);\r\n });\r\n } else {\r\n this.finishChangeLayout(layoutType);\r\n }\r\n break;\r\n }\r\n default:\r\n this.finishChangeLayout(layoutType, null, null, firstChange);\r\n break;\r\n }\r\n };\r\n\r\n finishChangeLayout = (layoutType, oldType, currentState, firstChange = false) => {\r\n const layout = getCurrentLayout();\r\n if (Number.isInteger(oldType)) {\r\n loaderEnable();\r\n layout.type = oldType;\r\n layout.selectLayout(layoutType, oldType, currentState);\r\n } else {\r\n layout.selectLayout(layoutType);\r\n }\r\n window.requestInProcess = false;\r\n if (!layout.initialized && !firstChange) {\r\n layout.initialized = true;\r\n }\r\n if (this.props.refreshCB && !firstChange) {\r\n this.props.refreshCB();\r\n }\r\n if (!firstChange) {\r\n this.forceUpdate();\r\n store.dispatch(updateCanvasCount()); // update canvas\r\n loaderDisable();\r\n }\r\n return true\r\n };\r\n\r\n getBvSceneParts = (layoutType) => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const showerParent = layout.parts[\"Shower\"];\r\n const neededParts = [\"left_wall\", \"right_wall\", \"shower_interior_wall\", \"shower_fixture\"];\r\n let promises = [];\r\n [wallsParent, showerParent].forEach(parent => {\r\n if (parent && parent.relatedItems) {\r\n parent.relatedItems.forEach(relatedItem => {\r\n if (neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived) {\r\n promises.push(this.getRelatedItemFeatures(relatedItem))\r\n }\r\n })\r\n }\r\n })\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n Promise.all(promises).then(() => this.finishChangeLayout(layoutType, oldType))\r\n };\r\n\r\n getSubPartLayoutPageChanges = (parent, childName, layoutType) => {\r\n let\r\n requestNeeded = false,\r\n requestNameNeeded = false,\r\n nextLayoutFeaturesPage = 0,\r\n maxCurrentFeaturesPage = 0;\r\n if (parent && parent[childName]) {\r\n if (USE_SERVER_CACHING && parent[childName].nextFeaturesPageToLoadArray) {\r\n maxCurrentFeaturesPage = Math.max(...Object.values(parent[childName].nextFeaturesPageToLoadArray).map(obj => obj.page))\r\n nextLayoutFeaturesPage = (parent[childName].nextFeaturesPageToLoadArray[LayoutAbbreviations[layoutType]]).page;\r\n if (nextLayoutFeaturesPage < maxCurrentFeaturesPage) {\r\n requestNeeded = true;\r\n }\r\n }\r\n if (parent[childName].activeFeature) {\r\n const currentActiveName = parent[childName].activeFeature.getSplittedFeatureName();\r\n const neededLayoutName = invert(LayoutTypes)[layoutType];\r\n const neededFeature = parent[childName].featuresList[neededLayoutName].find((feature) => {\r\n const featureName = feature.getSplittedFeatureName();\r\n return featureName && currentActiveName && (featureName === currentActiveName)\r\n });\r\n if (!neededFeature) {\r\n requestNameNeeded = currentActiveName.split(\" \")[0]\r\n }\r\n }\r\n }\r\n return {\r\n requestNeeded,\r\n requestNameNeeded,\r\n nextLayoutFeaturesPage,\r\n maxCurrentFeaturesPage,\r\n relatedItem: parent ? parent[childName] : null\r\n }\r\n };\r\n\r\n getNeeededKvPartsOnLayoutChange = (layoutType, relatedPartsToReceive, relatedPartsToReceiveForLayouts, firstChange = false) => {\r\n const layout = getCurrentLayout();\r\n const currentState = layout.getActiveFeaturesAsObject(true, false, true);\r\n const oldType = layout.type;\r\n layout.type = layoutType;\r\n if (!firstChange) {\r\n this.forceUpdate();\r\n }\r\n const promises = relatedPartsToReceive.map((relatedItem) => {\r\n const size = COUNTERTOP_GROUP.includes(relatedItem.partId) ? 2000 : 1000;\r\n return getBvGroupFeatures(relatedItem.dbName || relatedItem.partName, 0, size).then(response => {\r\n relatedItem.setGroupFeatures(Array.isArray(response) ? response : [], size);\r\n return response\r\n })\r\n });\r\n relatedPartsToReceiveForLayouts.forEach((pageChanges) => {\r\n if (pageChanges.requestNeeded) { // here we receive all the same features for new layout type (cause client already received them in another layout)\r\n const nextLayoutName = LayoutAbbreviations[layoutType];\r\n const featuresSize = 1000 * (pageChanges.maxCurrentFeaturesPage - pageChanges.nextLayoutFeaturesPage);\r\n promises.push(getBvGroupFeatures(pageChanges.relatedItem.partName, pageChanges.nextLayoutFeaturesPage, featuresSize, [], \"\", nextLayoutName)\r\n .then(response => {\r\n pageChanges.relatedItem.nextFeaturesPageToLoadArray[nextLayoutName].page = pageChanges.maxCurrentFeaturesPage - 1; // 1 will be added in setGroupFeatures method\r\n pageChanges.relatedItem.setGroupFeatures(Array.isArray(response) ? response : []);\r\n return response\r\n }))\r\n }\r\n if (pageChanges.requestNameNeeded) { // here we receive current active itm to set it\r\n promises.push(NavigationRequests.searchFeaturesByName(pageChanges.relatedItem, pageChanges.requestNameNeeded))\r\n }\r\n });\r\n return Promise.all(promises).then(() => this.finishChangeLayout(layoutType, oldType, currentState, firstChange));\r\n };\r\n\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setLeadCaptureClickCount} from \"../../../actions/userFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\n\r\n\r\nconst WithClickCount = (props) => {\r\n\r\n const {fabricatorSettings, isPhoneNumberValidated, leadCaptureClickCount, setLeadCaptureClickCount, children,\r\n setLookOverlayOpened} = props;\r\n\r\n const maxClickCountReached = () => {\r\n if (!isPhoneNumberValidated && fabricatorSettings.clickLeadCapture) {\r\n const newLeadCount = leadCaptureClickCount + 1;\r\n if (newLeadCount >= fabricatorSettings.clickLeadCount) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return true;\r\n } else {\r\n setLeadCaptureClickCount(newLeadCount);\r\n }\r\n }\r\n return false\r\n }\r\n\r\n\r\n return children(maxClickCountReached)\r\n};\r\n\r\nWithClickCount.propTypes = {\r\n children: PropTypes.any.isRequired\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n const {isPhoneNumberValidated, leadCaptureClickCount} = store.userState;\r\n return {\r\n fabricatorSettings: settings,\r\n isPhoneNumberValidated,\r\n leadCaptureClickCount,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLeadCaptureClickCount,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithClickCount)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\n\r\nimport Switch from '@mui/material/Switch';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\n\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n// import COLOR_THEMES, {COLORS} from \"../../../../colorThemes\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\nimport {clickOnSimilarFeatures, getApplyToLogic} from \"../lookNavigationFunctions\";\r\nimport {IS_QKB_UI} from \"../../../../config\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport LookAllWallsRadioButtonSmall from \"./lookAllWallsRadioButtonSmall\";\r\n\r\n\r\nconst LookAllWallsRadioButton = (props) => {\r\n\r\n const {lookFeature, lookActiveFeature, intl, updateCanvasCount, dispatch, showColumnCheckbox, type, viewType,\r\n showTutorialToolTip, fabricatorData} = props;\r\n\r\n const wallFeature = lookFeature || lookActiveFeature;\r\n\r\n if (!wallFeature || fabricatorData.isEncore) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n const applyToLogic = getApplyToLogic(wallFeature);\r\n if (!applyToLogic) {\r\n return null\r\n }\r\n\r\n const {translateId, setApplyToFunction, applyToArrayAll, currentApplyToArray} = applyToLogic;\r\n const checked = currentApplyToArray.includes(wallFeature.partId);\r\n\r\n const updateCanvas = () => {\r\n if (IS_QKB_UI) {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n } else {\r\n updateCanvasCount();\r\n }\r\n }\r\n\r\n const allWallsCheckboxClick = async () => {\r\n if (checked) { // already enabled\r\n if (currentApplyToArray.length) {\r\n dispatch(setApplyToFunction([], true, applyToLogic.type))\r\n }\r\n applyToArrayAll.forEach(wallPartId => {\r\n const subPart = layout.getSubPartByPartId(wallPartId);\r\n if (!subPart || (subPart.part.partId === wallFeature.partId) || !subPart.part.activeFeatureBeforeAllWalls) {\r\n return null\r\n }\r\n subPart.part.activeFeatureBeforeAllWalls.clickFromAllWalls(true);\r\n });\r\n updateCanvas();\r\n return\r\n } // already enabled end\r\n\r\n if (applyToArrayAll.length !== currentApplyToArray.length) {\r\n dispatch(setApplyToFunction([...applyToArrayAll], true, applyToLogic.type)) // update checkbox\r\n }\r\n await clickOnSimilarFeatures(wallFeature, applyToLogic);\r\n updateCanvas();\r\n };\r\n\r\n if (showColumnCheckbox) {\r\n return (\r\n
    \r\n :\r\n \r\n
    \r\n )\r\n }\r\n\r\n if (type === \"small\") {\r\n return \r\n }\r\n\r\n return (\r\n \r\n }\r\n />\r\n )\r\n};\r\n\r\nLookAllWallsRadioButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n showColumnCheckbox: PropTypes.bool,\r\n showTutorialToolTip: PropTypes.bool,\r\n type: PropTypes.string,\r\n viewType: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookWallsApplyTo} = store.lookState;\r\n const {activeTheme} = store.serverState;\r\n const {countertopsApplyToArray, cabinetsApplyTo, cabinetsApplyToBathroom, edgesApplyTo, handlesApplyToBathroom,\r\n countertopsApplyToArrayBathroom, showerFloorApplyToBathroom} = store.navigationState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n activeTheme,\r\n countertopsApplyToArray, cabinetsApplyTo, lookWallsApplyTo, cabinetsApplyToBathroom, edgesApplyTo,\r\n countertopsApplyToArrayBathroom, handlesApplyToBathroom, showerFloorApplyToBathroom, // update radio button on click\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n updateCanvasCount: () => dispatch(updateCanvasCount()),\r\n dispatch,\r\n }\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookAllWallsRadioButton)\r\n)\r\n","import React from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport isObject from \"lodash/isObject\";\r\nimport WithOverlay from \"./withOverlayHoc\";\r\nimport ExclamationMarkIcon from \"../ui/icons/exclamationMarkIcon\";\r\nimport {COLORS} from \"../../colorThemes\";\r\n\r\nclass MessageBox extends React.Component {\r\n\r\n displayName = 'MessageBox';\r\n\r\n getMessage = () => {\r\n const {intl} = this.props;\r\n const props = this.props.state || this.props;\r\n const message = props.message;\r\n // console.log(\"message\", message);\r\n if (Array.isArray(message)) {\r\n return message.map((msg, msgIndex) =>

    \r\n {intl.messages[msg] ? : msg}\r\n

    )\r\n } else if (isObject(message)) {\r\n return message.id\r\n ? \r\n : message.message\r\n ? message.message\r\n : message.toString ? message.toString() : null\r\n } else if (message) { //string\r\n return intl.messages[message] ? : message.replace(\"Zip\", \"Postal\")\r\n } else {\r\n return \"Error\";\r\n }\r\n };\r\n\r\n render() {\r\n const props = this.props.state || this.props;\r\n\r\n if (!props.visible) {\r\n return null\r\n }\r\n\r\n const bClass = props.error ? 'message-red-lable' : 'message-blue-lable';\r\n const hClass = props.error ? 'message-error-message-title' : 'message-system-message-title';\r\n const messageClass = (props.error ? 'message-system-text-red' : 'message-system-text-blue') +\r\n (props.inline ? ' message-system-text-inline' : '');\r\n let buttonsElements = [];\r\n if (props.buttons && props.buttons.length) {\r\n buttonsElements = props.buttons.map((b) => {\r\n return ;\r\n });\r\n } else {\r\n buttonsElements.push(\r\n {\r\n //TODO[Artem] add default close logic\r\n }\r\n }}/>\r\n );\r\n }\r\n\r\n if (props.newStyles) {\r\n return (\r\n \r\n {(hideOverlay) => (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {this.getMessage()}\r\n
    \r\n
    \r\n {props.buttons && props.buttons.length ? props.buttons.map((button) => {\r\n return (\r\n \r\n )\r\n }) : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {this.getMessage()}
    \r\n
    {buttonsElements}
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst MessageBoxButton = ({button}) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default injectIntl(MessageBox);\r\n","import {PartMenuType} from \"../../visComponents/constants\";\r\nimport {iCmp} from \"../../../misc/utils\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {LayoutType, METADATA} from \"./constants\";\r\nimport PartCommon from \"../../visComponents/partCommon\";\r\n\r\nexport class Part extends PartCommon {\r\n\r\n constructor(isParent, isChild, menuType) {\r\n super();\r\n if (isChild || (isParent && menuType === PartMenuType.Simple)) {\r\n this.featuresList = {};\r\n this.featuresPartsList = {};\r\n this.modulePartsList = {};\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.featuresList[layoutName] = [];\r\n this.featuresPartsList[layoutName] = [];\r\n this.modulePartsList[layoutName] = [];\r\n });\r\n this.allFeaturesReceived = false;\r\n this.realFeaturesReceived = false; // this prop is need on Scroll (if features count more that 1000)\r\n this.nextFeaturesPageToLoad = 0;\r\n this.activeFeature = null;\r\n this.placeholderFeature = null;\r\n this.shadowFeature = null;\r\n this.placeholderChanged = false;\r\n this.firstClick = {\r\n \"0\": false\r\n };\r\n this.activeLockedFeature = null;\r\n this.activeNotInVisualizerFeature = null; // is needed to display in the QT selected activeNotInVisualizerFeature, but render proper activeFeature layer(for example, countertop)\r\n // name = \"\";\r\n this.visible = true;\r\n this.categoryEnabled = false;\r\n this.layout = null;\r\n this.featureGroupVisible = true; // dashboard's feature group eye ball logic\r\n this.featureGroupEnabled = true; // dashboard's feature group checkbox logic\r\n this.selectedFeaturesHistory = []; // array of strings(names). updated every time item is selected\r\n this.filtersReceived = null; // array of filters values, comes from BE, for ex [1221, 347, 1124]\r\n }\r\n if (isParent) {\r\n this.partThumbnail = '';\r\n this.relatedItems = [];\r\n }\r\n if (!isChild && !isParent) {\r\n this.dbFeature = null;\r\n this.layer = new Layer(\"fireplace\");\r\n this._customDisplayName = null;\r\n this.notesList = {};\r\n }\r\n this.partName = \"\";\r\n }\r\n\r\n set features(featuresList) {\r\n // features can't be set directly, we need to change featuresList array\r\n }\r\n get features() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresList[layout.getCurrentLayoutName()]\r\n }\r\n set featuresParts(featuresList) {\r\n // featuresParts can't be set directly, we need to change featuresPartsList array\r\n }\r\n get featuresParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.featuresPartsList[layout.getCurrentLayoutName()]\r\n }\r\n get moduleParts() {\r\n const layout = this.layout || this.getParent().layout;\r\n return this.modulePartsList[layout.getCurrentLayoutName()]\r\n }\r\n\r\n /**\r\n * Checks whether a given for condition matches the needed value (or array of values)\r\n * @param name {string}\r\n * @param value {string || array}\r\n * @returns {int} -1 - no such for condition, 0 - no match, 1 - matches\r\n */\r\n matchesMetaForCondition(name, value) {\r\n return this.metaData[name] && this.metaData[name].some(condValue => {\r\n return condValue === METADATA.ALL || (Array.isArray(value) ? value.some(val => iCmp(condValue, val)) : iCmp(condValue, value))\r\n });\r\n }\r\n\r\n matchesMetaForArrayOfConditions(arrayOfConditions) {\r\n return arrayOfConditions.every((condition) => {\r\n return this.matchesMetaForCondition(condition.propName, condition.propValue);\r\n })\r\n }\r\n}\r\n\r\n\r\n","import _ from 'lodash';\r\n\r\nimport workspace from \"../core/workspace\";\r\nimport {\r\n SHAPE_PART_ID,\r\n} from \"../../../constants\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport ShapeHelper from \"../../../helpers/shapeHelper\";\r\nimport sqftShapeManager from \"./sqftShapeManager\";\r\nimport sqftSlabManager from \"./sqftSlabManager\";\r\nimport {renderErrorPopup} from \"../../../../../api/api-popups\";\r\n\r\nconst sqftShapeIntersectionsManager = {\r\n resetShapesIntersections() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n shape.shapeIntersections.setOverlappedWithShapeIds([]);\r\n }\r\n }\r\n },\r\n updateShapesIntersections() {\r\n this.resetShapesIntersections();\r\n\r\n const shapes = workspace.getShapes();\r\n //console.log(\"----------------------\");\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n for (const testShape of shapes) {\r\n if (testShape instanceof sqftShape\r\n && shape.id !== testShape.id\r\n ) {\r\n const shapeIntersections = ShapeHelper.getTwoShapesIntersections(shape, testShape);\r\n const shapeIds = Object.keys(shapeIntersections);\r\n if (shapeIds.length) {\r\n shape.shapeIntersections.addOverlappedWithShape(+shapeIds[0]);\r\n } else if (ShapeHelper.checkIfShapeContainsAnother(shape, testShape)) {\r\n //console.log(\"shapeId\", shape.id);\r\n //console.log(\"testShapeId\", testShape.id);\r\n testShape.shapeIntersections.addOverlappedWithShape(shape.id);\r\n shape.shapeIntersections.addOverlappedWithShape(testShape.id);\r\n }\r\n }\r\n }\r\n //console.log(\"shapeId\", shape.id);\r\n //console.log(\"shape.shapeIntersections.overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n }\r\n }\r\n //this.logShapeFeatureIds()\r\n },\r\n logShapeFeatureIds() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n console.log(\"shape id\", shape.id);\r\n console.log(\"shape feature id\", shape.featureId);\r\n console.log(\"shape shapeIntersections overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n }\r\n },\r\n logSnappedShapeGroups() {\r\n const shapes = workspace.getShapes();\r\n console.log(\"------\");\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n console.log(\"shape id\", shape.id);\r\n console.log(\"shape area\", shape.getTotalArea());\r\n console.log(\"shape getSnappedShapeGroup\", shape.shapeAbsolute.getSnappedShapeGroup());\r\n console.log(\"shape shapeSlab getSnappedShapeGroup\", shape.shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n }\r\n }\r\n console.log(\"------\");\r\n },\r\n updateSlabPlaceholderFeatureId() {\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape\r\n && shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n //console.log(\"update feature shape.shapeIntersections.overlappedWithShapeIds\", shape.shapeIntersections.overlappedWithShapeIds);\r\n if (shape.shapeIntersections.overlappedWithShapeIds.length >= 1) {\r\n const intersectedShape = sqftShapeManager.getShapeById(shape.shapeIntersections.overlappedWithShapeIds[0]);\r\n shape.setFeatureId(_.clone(intersectedShape.featureId));\r\n shape.setSlabParentPartId(_.clone(intersectedShape.slabParentPartId ? intersectedShape.slabParentPartId : intersectedShape.partId));\r\n }\r\n }\r\n }\r\n },\r\n\r\n showSlabPlaceHolderErrorMessage (\r\n slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes(),\r\n callback = new Function()\r\n ) {\r\n for (const slabPlaceHolderShape of slabPlaceHolderShapes) {\r\n //console.log(\"slabPlaceHolderShape.overlappedWithShapeIds\", slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds);\r\n if (slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds.length >= 2) {\r\n const shapes = sqftShapeManager.getShapeByIds(slabPlaceHolderShape.shapeIntersections.overlappedWithShapeIds);\r\n if (\r\n !sqftShapeManager.hasSameSharedFeatureName(shapes)\r\n && !sqftShapeManager.hasSameFeatureId(shapes)\r\n ) {\r\n\r\n renderErrorPopup(workspace.intl.formatMessage({id: \"sqft.popup.system.slabPlaceholderMultipleOverlap\"}));\r\n callback();\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default sqftShapeIntersectionsManager\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Navigation from \"./navigation\";\r\nimport Config from \"../../../config\";\r\nimport {ignoreDefault} from \"../../../misc/utils\";\r\nimport Sidebar from './desktop/sidebar';\r\nimport Body from './desktop/body';\r\nimport {ContentType, ContentTypeName, ContentTypeNameTranslate, PartMenuType} from \"../constants\";\r\nimport FeatureWizard from \"./featureWizard/featureWizard\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {CABINET_WIZARD_BUTTONS, BACKSPLASH_TYPES, COUNTERTOP_WIZARD_BUTTONS} from \"../../kvComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport RoomSceneNavigation from \"./roomSceneNavigation\";\r\nimport {getAvailableRoomScenes, getShowOtherLayouts, getSideBarSubParts} from \"./navUtils\";\r\nimport DesktopNavigationLayoutsContent from \"./desktopNavigationLayoutsContent\";\r\n\r\nexport default class DesktopNavigationCommon extends Navigation {\r\n\r\n static propTypes = {\r\n refreshCB: PropTypes.func.isRequired,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n changeMessageBoxState: PropTypes.func,\r\n setHoveredLayer: PropTypes.func,\r\n userIsLoggedIn: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n setActiveFeature: PropTypes.func,\r\n setDemoPointClicked: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n fabricatorSettings: PropTypes.object,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.navWrapper = null;\r\n this.navigationIsClosing = false;\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n navWidth: $(this.navWrapper).width()\r\n });\r\n this.props.setNavigationViewType(3);\r\n this._componentDidMount();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n handleContextMenuClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.state.showNavigation) {\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const isBacksplash = BACKSPLASH_TYPES.some(bType => bType === menuItem.text);\r\n if (menuItem.text === \"Edge Profile\") {\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n }\r\n } else if (isBacksplash) {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.relatedItems.find(relItem => relItem.partId === \"backsplash\");\r\n clickedParent = \"Walls\";\r\n clickedButton = \"Backsplash\";\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n const applyBacksplash = () => {\r\n const featureToClick = backsplashSubPart.getFeatureByBacksplashType(menuItem.text);\r\n if (featureToClick) {\r\n console.log(\"featureToClick\", featureToClick);\r\n featureToClick.handleClick();\r\n this.props.setActiveFeature(featureToClick);\r\n const parentItem = this.state.parentNavigationItem;\r\n this.setState({\r\n parentNavigationItem: null\r\n }, () => {\r\n this.setState({\r\n parentNavigationItem: parentItem\r\n })\r\n })\r\n }\r\n }\r\n if (!backsplashSubPart.allFeaturesReceived) {\r\n this.checkIfAllFeaturesReceived({part: backsplashSubPart}, null, applyBacksplash);\r\n } else {\r\n applyBacksplash()\r\n }\r\n }\r\n if (!isBacksplash) {\r\n clickedButton = menuItem.text;\r\n clickedParent = menuItem.subMenuParent || this.state.contextMenuOpen;\r\n }\r\n if (clickedParent && clickedParent.module) {\r\n clickedParent = \"Cabinet\"\r\n }\r\n //\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n // console.log('menuItem', menuItem);\r\n if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n this.ponyWallAndLeftWallClick(menuItem);\r\n }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (menuItem.clickFeature && !isBacksplash) {\r\n const featureToClick = menuItem.part.features.find(feature => feature.partName === menuItem.subMenuText);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n handleNavTabClick = (contentType) => (e) => {\r\n Analytics.sendClickEvent('nav-tab-click-' + contentType);\r\n // console.log('e', e);\r\n // console.log('contentType', contentType);\r\n ignoreDefault(e);\r\n if (this.state.contentType === contentType) {\r\n this.closeNavigation(e);\r\n } else if (!this.navigationIsClosing) {\r\n this.setContentType(contentType);\r\n }\r\n };\r\n\r\n openLayoutMenu = (callBack) => {\r\n const contentType = document.querySelector(\".tab.tab--room-layout\")\r\n ? ContentType.Layout\r\n : document.querySelector(\".tab.tab--room-ideas\")\r\n ? ContentType.DisplayRoom\r\n : ContentType.Layout;\r\n this.setState({\r\n showNavigation: true,\r\n contentType,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n $(document).on('click', this.handleWrapperBlur);\r\n callBack();\r\n });\r\n };\r\n\r\n menuOpened = () => {\r\n this._menuOpened();\r\n };\r\n\r\n setContentType = (contentType) => {\r\n this.setState({\r\n showNavigation: true,\r\n contentType,\r\n contextMenuOpen: false,\r\n hoveredLayer: {},\r\n activeDefaultPreset: null\r\n }, () => {\r\n this.menuOpened();\r\n $(document).on('click', this.handleWrapperBlur);\r\n if (contentType === ContentType.Design) {\r\n this.setNewActiveFeature();\r\n }\r\n });\r\n };\r\n\r\n closeNavigation = (e) => {\r\n Analytics.sendClickEvent('close-nav');\r\n if (e) {\r\n ignoreDefault(e);\r\n }\r\n this.props.setActiveFeature(null);\r\n this.navigationIsClosing = true;\r\n this.setState({\r\n showNavigation: false,\r\n showFilterSelection: false,\r\n showerWallWizardGroupsSelected: true,\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n contentType: ContentType.None,\r\n showFilterSelection: true,\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.navigationIsClosing = false;\r\n })\r\n }, 500);\r\n $(document).off('click', this.handleWrapperBlur);\r\n });\r\n if (this.props.setActiveNavigationNames) {\r\n this.props.setActiveNavigationNames(\"\", \"\")\r\n }\r\n setTimeout(() => {\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(false)\r\n }\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n }\r\n }, 500);\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const overlayClick = e.target.closest('.nav-overlay');\r\n const navClick = e.target.closest('.nav');\r\n const lockClick = e.target.closest('[class*=\"lock\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n if (overlayClick && !navClick && !lockClick && !userPopupClick && !e.target.closest('.nav-pos')) {\r\n this.closeNavigation(e);\r\n }\r\n };\r\n\r\n handleHeaderBackClick = () => {\r\n this.resetNavigation();\r\n };\r\n\r\n updateSideBar = () => {\r\n this.setState({\r\n updateSidebarItems: true\r\n }, () => {\r\n this.setState({\r\n updateSidebarItems: false\r\n })\r\n })\r\n };\r\n\r\n handleSubPartClick = (childNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = childNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n if (Config.isDevMode() && this.state.childNavigationItem && (this.state.childNavigationItem.text === childNavigationItem.text || subItemPart.disabled)) {\r\n if (subItemPart.canBeDisabled) {\r\n subItemPart.disabled = !subItemPart.disabled;\r\n subItemPart.disabledClick();\r\n this.props.refreshCB();\r\n }\r\n }\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollAsideToMenuItem(childNavigationItem.text);\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(childNavigationItem, \"childNavigationItem\");\r\n });\r\n this.setNewActiveFeature(childNavigationItem);\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(childNavigationItem);\r\n\r\n if (this.props.setActiveNavigationNames\r\n && this.state.parentNavigationItem && this.state.parentNavigationItem.text\r\n && childNavigationItem && childNavigationItem.part\r\n ) {\r\n this.props.setActiveNavigationNames(\r\n this.state.parentNavigationItem.text.toLowerCase().replace(/ /g,\"_\"),\r\n childNavigationItemPartId\r\n )\r\n }\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n if (childNavigationItem.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n\r\n };\r\n\r\n scrollAsideToMenuItem = (menuItemText) => {\r\n const parent = $(document.querySelector('.customize-list'));\r\n const child = parent.find('.customize-list__item[data-text=\"'+ menuItemText +'\"]');\r\n if (parent && child) {\r\n const needToScroll = +child.data('index') >= 5;\r\n parent.animate({\r\n scrollTop: needToScroll ? parent.height() : 0 // -30 this is one nav item height\r\n }, 500);\r\n }\r\n };\r\n\r\n handleSubPartHover = childNavigationItem => {\r\n const activeFeature = childNavigationItem.part.activeFeature;\r\n if (activeFeature) {\r\n const zIndex = activeFeature.layer.zIndex;\r\n zIndex && this.props.renderGreenLayerByZindex(zIndex);\r\n }\r\n };\r\n\r\n scrollToDefault = () => {\r\n const featuresList = document.getElementsByClassName('categories-list');\r\n if (featuresList.length) {\r\n featuresList[0].scrollLeft = 0;\r\n }\r\n };\r\n\r\n handleMobileSelectClick = (e) => {\r\n if (!this.state.showNavigation || !this.state.parentNavigationItem) {\r\n e.stopPropagation();\r\n if (!this.state.parentNavigationItem) {\r\n this.setState({\r\n childNavigationItem: null\r\n })\r\n }\r\n }\r\n if (this.state.contentType !== ContentType.Design && !this.navigationIsClosing) {\r\n this.setContentType(ContentType.Design);\r\n }\r\n };\r\n\r\n navigationItemClickCommon = (item) => {\r\n if (!this.state.parentNavigationItem) {\r\n if (item.part.menuType === PartMenuType.Simple) {\r\n this.checkIfAllFeaturesReceived(item, \"parentNavigationItem\");\r\n }\r\n this.setState({\r\n parentNavigationItem: item,\r\n showFilterSelection: item.text === \"Floor\" && item.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n }, () => {\r\n const featuresList = document.getElementsByClassName('categories-list');\r\n if (featuresList.length) {\r\n featuresList[0].scrollLeft = 0;\r\n }\r\n // let activeFeature = item.part.activeFeature;\r\n const subParts = getSideBarSubParts(this.state.parentNavigationItem.part);\r\n if (subParts[0] && (subParts[0].part.menuType !== PartMenuType.Simple)) {\r\n this.handleSubPartClick(subParts[0])\r\n } else {\r\n setTimeout(() => {\r\n this.setNewActiveFeature({part: item.part});\r\n }, 0)\r\n }\r\n if (this.props.setActiveNavigationNames && this.state.parentNavigationItem && this.state.parentNavigationItem.text) {\r\n this.props.setActiveNavigationNames(\r\n this.state.parentNavigationItem.text.toLowerCase().replace(/ /g,\"_\"), \"\"\r\n )\r\n }\r\n });\r\n this.props.setDefaultSelectionGroup(item.part.partName);\r\n } else {\r\n this.props.setActiveFeature(item.part);\r\n }\r\n if (Config.isDevMode() || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n if (item.part.dbFeature) {\r\n console.log('sharedFeatureName:', item.part.dbFeature.sharedFeatureName);\r\n }\r\n }\r\n };\r\n\r\n content = (useWizard, wizardGroups, useFilters) => {\r\n let content = null;\r\n switch (this.state.contentType) {\r\n case ContentType.Design:\r\n return this.contentDesign(useWizard, wizardGroups, useFilters);\r\n case ContentType.Layout:\r\n return ;\r\n case ContentType.DisplayRoom:\r\n return this.contentRoom();\r\n case ContentType.Loading:\r\n return this.contentLoading();\r\n case ContentType.RoomScene:\r\n return ;\r\n default:\r\n return content;\r\n }\r\n };\r\n\r\n contentDesignBody = (useWizard, wizardGroups, useFilters = false) => {\r\n return (\r\n \r\n )\r\n };\r\n\r\n contentDesignWizard = () => {\r\n const wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n return (\r\n \r\n )\r\n };\r\n\r\n contentDesign = (useWizard, wizardGroups, useFilters) => {\r\n\r\n // activePart = activePart || {\r\n // text: ''\r\n // };\r\n /*const filters = this.state.filters[activePart.text] || {};\r\n const filterValuesIDs = [];\r\n each(filters, (value) => {\r\n filterValuesIDs.push(value);\r\n });*/\r\n\r\n return (\r\n
    \r\n {this.state.parentNavigationItem\r\n ? \r\n : null}\r\n {this.state.showFeatureWizard ? (\r\n useWizard && this.state.childNavigationItem && this.state.childNavigationItem.part && this.state.parentNavigationItem\r\n ? this.contentDesignWizard()\r\n : this.contentDesignBody(false, wizardGroups, useFilters)\r\n ) : this.contentDesignBody(useWizard, wizardGroups, useFilters)}\r\n {/*{this.state.parentNavigationItem*/}\r\n {/*? */}\r\n {/*: null}*/}\r\n
    \r\n )\r\n };\r\n\r\n contentRoom = () => {\r\n let presets = this.checkedForLockedPresets();\r\n return (\r\n
    \r\n {presets.length ? (\r\n
      \r\n {presets.map((preset, index) => {\r\n return (\r\n
    • this.handleDefaultPresetClick(index, preset.presetIsLocked)}\r\n style={{backgroundImage: `url(${preset.bv_screen})`}}/>\r\n )\r\n })}\r\n
    \r\n ) :

    }\r\n
    \r\n )\r\n };\r\n\r\n contentLoading = () => {\r\n return
    \r\n }\r\n\r\n navigationMenuButtons = (availableNavButtons) => {\r\n return (\r\n
    \r\n {availableNavButtons.map((contentType) => {\r\n if (ContentTypeName[contentType] === \"Room Layout\") {\r\n const showOtherLayouts = getShowOtherLayouts(this.props.fabricatorSettings);\r\n if (!showOtherLayouts) {\r\n return null\r\n }\r\n }\r\n if (ContentTypeName[contentType] === \"Room Scene\") {\r\n const showOtherLayouts = getAvailableRoomScenes();\r\n if (!showOtherLayouts || !showOtherLayouts.length || (showOtherLayouts.length === 1)) {\r\n return null\r\n }\r\n }\r\n if (ContentTypeName[contentType] === \"Room Scene\" && (document.kvConfig.visualizerType === \"kvScene\" && !Config.isDevMode())) {\r\n return null\r\n }\r\n const tabClassName = ContentTypeName[contentType].toLowerCase().replace(\" \",\"-\")\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setCabinetNavigationFilterCompleted,\r\n setCountertopNavigationFilterCompleted, setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\n\r\nclass NavigationFiltersSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n showFeatureWizard: PropTypes.bool,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n mounted: false\r\n };\r\n this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n setTimeout(() => {\r\n if (this._isMounted) {\r\n this.setState({\r\n mounted: true\r\n });\r\n }\r\n }, 0)\r\n }\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n exitFeatureWizard = () => {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n const cabinetPartIds = [\"top_cabinet\", \"bottom_cabinet\"];\r\n const countertopPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n if (cabinetPartIds.includes(this.props.activePart.partId)) {\r\n this.props.setCabinetNavigationFilterCompleted(true);\r\n } else if (countertopPartIds.includes(this.props.activePart.partId)) {\r\n this.props.setCountertopNavigationFilterCompleted(true);\r\n }\r\n };\r\n\r\n getAvailableSteps = () => {\r\n let wizardButtons = [];\r\n switch (this.props.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n wizardButtons = CABINET_WIZARD_BUTTONS.filter(wizardButton => {\r\n if (wizardButton.buttonId === \"all_products\") {\r\n return this.props.isMobile\r\n }\r\n return wizardButton.buttonId !== \"inlay_type\"\r\n });\r\n break;\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n case \"backsplash\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS;\r\n break;\r\n case \"center_island_countertop\":\r\n case \"center_island_edge\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS.slice(0, 4);\r\n break;\r\n }\r\n return wizardButtons;\r\n };\r\n\r\n setFeatureWizardStep = (nextStepIndex, disabled = false, lastStep) => {\r\n\r\n if (disabled) {\r\n return false;\r\n }\r\n const availableSteps = this.getAvailableSteps();\r\n if (lastStep) {\r\n this.exitFeatureWizard();\r\n } else {\r\n this.props.setActiveNavigationFilter(availableSteps[nextStepIndex].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(nextStepIndex);\r\n }\r\n const commonView = (this.props.windowWidth < 991) ? 4 : 3;\r\n const buttonId = availableSteps[nextStepIndex].buttonId;\r\n if (buttonId === COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setNavigationViewType(2)\r\n } else if (this.props.navigationViewType !== commonView) {\r\n this.props.setNavigationViewType(commonView)\r\n }\r\n if (buttonId !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setSelectedFilters([]); // reset filters on finish filters\r\n }\r\n };\r\n\r\n render() {\r\n const availableSteps = this.getAvailableSteps();\r\n const currentActiveIndex = this.props.activeNavigationFilterStepIndex;\r\n\r\n const firstStepIsActive = currentActiveIndex === 0;\r\n const lastStepIsActive = currentActiveIndex === availableSteps.length - 1;\r\n\r\n const cabinetNavigationFilterCompleted = this.props.isMobile && this.props.cabinetNavigationFilterCompleted && (\r\n this.props.activePart.partId === \"top_cabinet\" || this.props.activePart.partId === \"bottom_cabinet\"\r\n );\r\n // const countertopNavigationFilterCompleted = this.props.isMobile && this.props.countertopNavigationFilterCompleted && (\r\n // this.props.activePart.partId === \"countertop\" || this.props.activePart.partId === \"center_island_countertop\"\r\n // );\r\n\r\n const countertopWizardPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n const isCountertopWizard = countertopWizardPartIds.includes(this.props.activePart.partId);\r\n\r\n return (\r\n
    \r\n {this.props.isMobile ? null : (\r\n
    \r\n \r\n {availableSteps[currentActiveIndex]\r\n ? `Select a ${availableSteps[currentActiveIndex].text} for your ${this.props.activePart.partName}.`\r\n : null}\r\n \r\n {isCountertopWizard ? null : }\r\n
    \r\n )}\r\n
    \r\n {cabinetNavigationFilterCompleted ? null : (\r\n
    this.setFeatureWizardStep(currentActiveIndex - 1, firstStepIsActive)}>\r\n \r\n
    \r\n )}\r\n
      \r\n {availableSteps.map((wizardButton, index) => {\r\n const disabled = false;\r\n const buttonIcon = isCountertopWizard && wizardButton.buttonId === \"all_products\" ? \"stones\" : wizardButton.buttonId;\r\n return (\r\n
    • this.setFeatureWizardStep(index, disabled)}>\r\n {wizardButton.text}\r\n
    • \r\n )\r\n })}\r\n
    \r\n {cabinetNavigationFilterCompleted ? null : (\r\n
    this.setFeatureWizardStep(\r\n currentActiveIndex + 1,\r\n lastStepIsActive && isCountertopWizard,\r\n lastStepIsActive && !isCountertopWizard\r\n )}>\r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n activeNavigationFilterStepIndex: store.navigationState.activeNavigationFilterStepIndex,\r\n cabinetNavigationFilterCompleted: store.navigationState.cabinetNavigationFilterCompleted,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n windowWidth: store.serverState.windowWidth,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setCabinetNavigationFilterCompleted,\r\n setCountertopNavigationFilterCompleted,\r\n setNavigationViewType,\r\n setSelectedFilters\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavigationFiltersSteps);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\n\r\nimport Navigation from \"./navigation\";\r\nimport {ContentType, PartMenuType} from \"../constants\";\r\nimport MobileNavigationBodyNew from './mobile/mobileNavigationBodyNew';\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport SelectionMobileViewSwitchers from './mobile/selectionMobileViewSwitchers';\r\nimport FeatureWizard from \"./featureWizard/featureWizard\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {BACKSPLASH_TYPES, COUNTERTOP_WIZARD_BUTTONS} from \"../../kvComponent/core/constants\";\r\nimport MobileParentNavigationItems from \"./mobileParentNavigationItems\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport BacksplashSelect from \"../../selectionWindow/backsplashSelect\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport LayoutNavigationItem from \"../layoutNavigationItem\";\r\nimport {getAvailableLayouts, getSideBarSubParts} from \"./navUtils\";\r\n\r\nexport default class MobileNavigationCommon extends Navigation {\r\n\r\n static propTypes = {\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n goToMaterialsInfo: PropTypes.func,\r\n setCanvasClass: PropTypes.func,\r\n canvasId: PropTypes.string,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n setActiveFeature: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n fabricatorSettings: PropTypes.object,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n setDemoPointClicked: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state.render = true;\r\n this.state.searchInputFocused = false;\r\n }\r\n\r\n componentDidMount() {\r\n $(document).on(ActionTypes.OPEN_MOBILE_NAVIGATION, this.openMobileMenu);\r\n $(document).on(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, (event, contentType) => {\r\n this.handleChangeContentType(contentType, true);\r\n });\r\n this.props.setNavigationViewType(4);\r\n this._componentDidMount();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n const layout = getCurrentLayout();\r\n if (!this.state.designNavigationItems || !this.state.designNavigationItems.length) {\r\n this.setState({designNavigationItems: layout.designNavigationItems()});\r\n }\r\n if (nextProps.filterGroups.length) {\r\n let updateComponent = false;\r\n if (nextProps.filterGroups.length === this.props.filterGroups.length) {\r\n updateComponent = nextProps.filterGroups.some((filter, index) => {\r\n return filter.filterId !== this.props.filterGroups[index].filterId\r\n || filter.filterGroupId !== this.props.filterGroups[index].filterGroupId\r\n });\r\n }\r\n if (updateComponent) {\r\n this.reRenderComponent();\r\n }\r\n }\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && (\r\n this.state.parentNavigationItem.part.partName === \"Countertop\"\r\n || this.state.parentNavigationItem.part.partName === \"CenterIsland\"\r\n )) {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"countertop\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"countertop\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = (this.state.parentNavigationItem.part.partName === \"Countertop\")\r\n ? subParts.find(sPart => sPart.part.partId === \"edge_profile\")\r\n : subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n reRenderComponent = () => {\r\n this.setState({\r\n render: false\r\n }, () => {\r\n this.setState({\r\n render: true\r\n })\r\n })\r\n };\r\n\r\n parentCategoryClick = (parentItemText) => {\r\n const clickedParent = this.state.designNavigationItems.find(item => item.text === parentItemText);\r\n if (clickedParent.part.menuType === PartMenuType.Simple) {\r\n this.triggerOpenNavigationMenu(clickedParent.text);\r\n } else {\r\n const firstChild = getSideBarSubParts(clickedParent.part)[0];\r\n if (firstChild) {\r\n this.triggerOpenNavigationMenu(firstChild.text, clickedParent.text);\r\n }\r\n }\r\n if (parentItemText === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (parentItemText === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n openMobileMenu = () => {\r\n // $(window).trigger(ActionTypes.SET_CANVAS_SCALE);\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = true;\r\n $(window).trigger(ActionTypes.DISABLE_PINCH_ZOOM);\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n });\r\n };\r\n\r\n scrollContentToTop = () => {\r\n const listContainer = document.querySelector('.menu-body__content');\r\n if (listContainer) {\r\n listContainer.scrollTop = 0;\r\n }\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"menu\"]');\r\n const messageBoxClick = e.target.closest('[class*=\"message\"]');\r\n const lockClick = e.target.closest('[class*=\"lock\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n const twoFactorPopup = e.target.closest('[class*=\"TwoFactorAuth-popup\"]');\r\n const countryList = e.target.closest('[class*=\"country\"]');\r\n const searchClick = e.target.closest('[class*=\"search\"]');\r\n const wizardClick = e.target.closest('[class*=\"wiz\"]');\r\n const loadingClick = e.target.closest('[class*=\"full-screen-wrapper\"]');\r\n if (!navClick && !messageBoxClick && !searchClick && !lockClick && !userPopupClick && !twoFactorPopup\r\n && !countryList && !loadingClick && !window.touchMove\r\n && !wizardClick && !window.canvasIsDragging && document.body.classList.contains('body--bv')) {\r\n this.closeNavigation();\r\n }\r\n };\r\n\r\n closeNavigation = () => {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass('none', true);\r\n }\r\n this.setState({\r\n showNavigation: false,\r\n showFilterSelection: false,\r\n showerWallWizardGroupsSelected: true,\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n contentType: ContentType.None,\r\n searchText: \"\",\r\n showFilterSelection: true,\r\n showerWallWizardGroupsSelected: false,\r\n });\r\n this.props.setActiveFeature(null);\r\n // this.resetWizardSteps(); // after wizard unmounts\r\n }, 500);\r\n $(document).off('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = false;\r\n $(window).trigger(ActionTypes.ENABLE_PINCH_ZOOM);\r\n });\r\n };\r\n\r\n handleContextMenuBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"contextmenu\"]');\r\n // console.log('blur');\r\n if (!navClick && !window.touchMove) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n });\r\n }\r\n };\r\n\r\n handleChangeContentType = (contentType, resetNav = false) => {\r\n this.setState({\r\n contentType,\r\n parentNavigationItem: resetNav ? null : this.state.parentNavigationItem,\r\n childNavigationItem: resetNav ? null : this.state.childNavigationItem,\r\n });\r\n if (contentType === ContentType.Design) {\r\n this.setNewActiveFeature();\r\n }\r\n };\r\n\r\n /* start oldNav methods */\r\n\r\n scrollToDefault = (item) => {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(item.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.scrollContentToTop();\r\n };\r\n\r\n /* end oldNav methods */\r\n\r\n resetEverything = () => {\r\n this.props.resetEverything();\r\n this.closeNavigation();\r\n setTimeout(() => {\r\n this.resetWizardSteps(); // after wizard unmounts\r\n }, 300)\r\n };\r\n\r\n menuOpened = () => {\r\n this.scrollContentToTop();\r\n this.setNewActiveFeature();\r\n this._menuOpened();\r\n };\r\n\r\n handleContextMenuClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.state.showNavigation) {\r\n\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const isBacksplash = BACKSPLASH_TYPES.some(bType => bType === menuItem.text);\r\n\r\n if (menuItem.text === \"Edge Profile\") {\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n }\r\n } else if (isBacksplash) {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n const featureToClick = backsplashSubPart.part.getFeatureByBacksplashType(menuItem.text);\r\n // console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n clickedParent = \"Walls\";\r\n clickedButton = \"Backsplash\";\r\n\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId); // set active navigation filter\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n\r\n }\r\n if (!isBacksplash) {\r\n clickedButton = menuItem.text;\r\n clickedParent = menuItem.subMenuParent || this.state.contextMenuOpen;\r\n }\r\n\r\n if (clickedParent && clickedParent.module) {\r\n clickedParent = \"Cabinet\"\r\n }\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(clickedParent.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n this.ponyWallAndLeftWallClick(menuItem);\r\n }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n window.mobileMenuOpened = true;\r\n $(window).trigger(ActionTypes.DISABLE_PINCH_ZOOM);\r\n $(document).off('click', this.handleContextMenuBlur);\r\n if (menuItem.clickFeature && !isBacksplash) {\r\n const featureToClick = menuItem.part.features.find(feature => feature.partName === menuItem.subMenuText);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n }\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n getDisplayRoomContent = () => {\r\n let presets = this.checkedForLockedPresets();\r\n return (\r\n
    \r\n {presets.length ? (\r\n
      \r\n {presets.map((preset, index) => ( //\r\n
    • Analytics.sendClickEvent(\"default-preset-clicked-\" + index) && this.handleDefaultPresetClick(index, preset.presetIsLocked)}\r\n key={index}>\r\n
      \r\n \"item.type\"/\r\n
      \r\n
    • \r\n ))}\r\n
    \r\n ) : (\r\n

    No display room found

    \r\n )}\r\n
    \r\n )\r\n };\r\n\r\n contentDesignWizard = () => {\r\n const wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n return (\r\n \r\n )\r\n };\r\n\r\n toggleSearchInputFocus = () => {\r\n this.setState({\r\n searchInputFocused: !this.state.searchInputFocused\r\n })\r\n };\r\n\r\n getFeatures = (layout) => {\r\n const parentItem = this.state.parentNavigationItem;\r\n const childItem = this.state.childNavigationItem;\r\n const currentParent = (parentItem && (parentItem.part.menuType === PartMenuType.Simple)) ? parentItem : childItem;\r\n if (!currentParent) {\r\n return []\r\n }\r\n let features = layout.designNavigationItems(currentParent, this.props.selectedFilters, this.state.searchText);\r\n return features\r\n };\r\n\r\n contentBody = (features, useWizard, useFilters, activePart, activeSubPart, filterSelectionHasValues, allFeaturesReceived) => {\r\n const {intl} = this.props;\r\n const layout = getCurrentLayout();\r\n const layoutNames = getAvailableLayouts();\r\n return (\r\n
    \r\n {this.state.contentType === ContentType.Design && activePart ? (\r\n
    \r\n \r\n {activeSubPart && activeSubPart.partId === \"backsplash\" && getCommonVisualizerType() === \"kitchen\" ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n {activePart.menuType === PartMenuType.Complex && activePart.subTypes().length\r\n ? activePart.subTypes().map(subType => (\r\n \r\n )) : (\r\n 12 ? \" search-input--with-close\" : \"\")\r\n }\r\n value={this.state.searchText}\r\n onFocus={this.toggleSearchInputFocus}\r\n onBlur={this.toggleSearchInputFocus}\r\n onChange={this.handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n id=\"main-search\"\r\n />\r\n )}\r\n {this.state.searchText\r\n ?
    \r\n
    \r\n ) : null}\r\n \r\n {this.state.contentType === ContentType.Layout ? (\r\n
    \r\n
      \r\n {layoutNames.map(key => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n {this.state.contentType === ContentType.Design ? (\r\n
    \r\n {this.state.parentNavigationItem ? (\r\n this.state.render ? (\r\n \r\n ) :
    \r\n ) : }\r\n
    \r\n ) : null}\r\n {this.state.contentType === ContentType.DisplayRoom ? this.getDisplayRoomContent() : null}\r\n {this.state.contentType === ContentType.Loading ? (\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n };\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport store from \"../../../../store\";\r\nimport * as actions from \"../../../../actions/actionFunctions\";\r\nimport UserLoginButton from \"../../../ui/userLoginButton\";\r\n\r\nimport {ContentType} from \"../../constants\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport HomeMenu from \"../../../common/homeMenu\";\r\nimport ScheduleButton from \"../../../common/scheduleButton\";\r\nimport Config from \"../../../../config\";\r\nimport {getShowOtherLayouts} from \"../navUtils\";\r\n\r\nclass MobileNavigationButtons extends Component {\r\n\r\n static propTypes = {\r\n handleChangeContentType: PropTypes.func.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n contentType: PropTypes.number.isRequired,\r\n searchText: PropTypes.string,\r\n parentNavigationItem: PropTypes.object,\r\n canvasId: PropTypes.string,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n designNavigationOpened: ''\r\n }\r\n }\r\n\r\n handleDropDownButtonClick = (type) => {\r\n Analytics.sendClickEvent('mobile-' + type + '-button-clicked');\r\n this.setState({\r\n designNavigationOpened: this.state.designNavigationOpened === type ? '' : type\r\n }, () => {\r\n this.state.designNavigationOpened\r\n ? window.addEventListener('click', this.handleDropdownWrapperBlur)\r\n : window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n })\r\n };\r\n\r\n handleResetButtonClick = () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.resetVisualizerState\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-no\");\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"mobile-nav-reset-button-yes\");\r\n this.props.changeMessageBoxState({visible:false});\r\n setTimeout(() => {\r\n this.setState({\r\n designNavigationOpened: ''\r\n });\r\n this.props.resetEverything();\r\n }, 500);\r\n }\r\n }]\r\n });\r\n };\r\n\r\n changeContentType = (contentType) => {\r\n this.props.handleChangeContentType(contentType);\r\n this.resetDropDown();\r\n };\r\n\r\n resetDropDown = () => {\r\n this.setState({\r\n designNavigationOpened: ''\r\n }, () => {\r\n window.removeEventListener('click', this.handleDropdownWrapperBlur)\r\n })\r\n };\r\n\r\n handleDisplayRoomClick = () => {\r\n Analytics.sendClickEvent('mobile-navigation-display-room-button');\r\n this.changeContentType(ContentType.DisplayRoom);\r\n this.resetDropDown();\r\n };\r\n\r\n handleDropdownWrapperBlur = (e) => {\r\n const newButtonClick = e.target.closest('.menu-header__right-button');\r\n const dropDownClick = e.target.closest('[class*=\"menu-dropdown\"]');\r\n const userPopupClick = e.target.closest('[class*=\"user-popup\"]');\r\n if (!newButtonClick && !dropDownClick && !userPopupClick) {\r\n this.resetDropDown();\r\n }\r\n };\r\n\r\n handleFiltersClick = () => {\r\n Analytics.sendClickEvent('mobile-show-filters');\r\n store.dispatch(actions.showFiltersIfHidden('mobileNavigation'));\r\n };\r\n\r\n render() {\r\n const {intl} = this.props;\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n let showOtherLayouts = getShowOtherLayouts(fabricatorSettings);\r\n\r\n return (\r\n
    \r\n {this.props.mobileNav.length && this.props.windowWidth < 991 ? (\r\n \r\n ) : null}\r\n {this.props.parentNavigationItem ? (\r\n \r\n ) : null}\r\n {/*this.props.parentNavigationItem ? (\r\n \r\n ) : null*/}\r\n {dashboardFramed ? null : }\r\n \r\n
    \r\n {this.state.designNavigationOpened === 'menu' ? (\r\n
      \r\n
    • Analytics.sendClickEvent('menu-option-clicked-design') && this.changeContentType(ContentType.Design)}>\r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n {/*
    • Quoted Items
    • */}\r\n {showOtherLayouts ? (\r\n
    • Analytics.sendClickEvent('menu-option-clicked-roomLayout') && this.changeContentType(ContentType.Layout)}>\r\n \r\n
    • \r\n ) : null}\r\n
    • \r\n \r\n
    \r\n ) : null}\r\n {this.state.designNavigationOpened === 'search' ? (\r\n
    \r\n \r\n {this.props.searchText ? (\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n mobileNav: store.navigationState.mobileNav,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n selectedFilters: store.filterState.selectedFilters,\r\n});\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigationButtons)\r\n)\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Analytics from \"../../../../analytics\";\r\n\r\nexport default class MobileNavigationAllWallsCheckbox extends Component {\r\n\r\n static propTypes = {\r\n parentNavigationItem: PropTypes.instanceOf(DesignNavigationItem).isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func.isRequired,\r\n };\r\n\r\n allWallsClick = () => {\r\n Analytics.sendClickEvent('all-walls-toggled');\r\n this.props.toggleApplyWallsCheckbox();\r\n setTimeout(() => {\r\n this.forceUpdate();\r\n }, 0)\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ShareButton from './shareButton';\r\n// import { downloadCanvasImageById } from \"../misc/utils\";\r\nimport HomeMenu from \"./homeMenu\";\r\nimport Analytics from \"./../../analytics\";\r\nimport {showSchedulerPopup, toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport SaveButton from \"./saveButton\";\r\nimport QuoteButton from \"./quoteButton\";\r\nimport DesignButton from \"./designButton\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport ScheduleButton from \"./scheduleButton\";\r\nimport MinimizeButton from \"./minimizeButton\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {renderMessagePopup} from \"../../api/api-popups\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport Config from \"../../config\";\r\nimport NavigationRequests from \"../visComponents/navigation/navigationRequests\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {downloadCSV} from \"../../misc/downloadCSV\";\r\nimport PingPilotButton from \"../visComponents/pingPilotButton\";\r\n\r\nclass MainButtons extends NavigationRequests {\r\n\r\n static propTypes = {\r\n goBack: PropTypes.func,\r\n goToCart: PropTypes.func,\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n resetEverything: PropTypes.func.isRequired,\r\n canvasId: PropTypes.string,\r\n };\r\n\r\n handleResetButtonClick = () => {\r\n Analytics.sendClickEvent(\"reset-quote-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.resetTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"reset-quote-cancel\");\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"reset-quote-yes\");\r\n this.props.changeMessageBoxState({visible: false});\r\n this.props.resetEverything();\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleLoginButtonClick = (userPopupType) => {\r\n Analytics.sendClickEvent(\"main-login-button\");\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n };\r\n\r\n handleLogOutButtonClick = () => {\r\n Analytics.sendClickEvent(\"main-logout-button-question\");\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.logoutTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"main-logout-button-no\");\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n Analytics.sendClickEvent(\"main-logout-button-yes\");\r\n this.props.changeMessageBoxState({visible: false});\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: false,\r\n isPhoneNumberValidated: false\r\n });\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleScheduleButtonClick = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n Analytics.sendClickEvent('schedule-appointment-main-button');\r\n if (!this.props.isPhoneNumberValidated) {\r\n this.handleLoginButtonClick(UserPopupTypes.Schedule);\r\n return;\r\n }\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n this.props.showSchedulerPopup(true)\r\n } else {\r\n saveQuote({submit: true, quoteRequestType: QuoteRequestType.ScheduleAnAppointment})\r\n .then(() => {\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n });\r\n }\r\n };\r\n\r\n getAllFeatures = () => {\r\n const layout = getCurrentLayout();\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n parents.forEach((parent) => {\r\n parent.relatedItems.forEach(async relItem => {\r\n await this.checkIfAllFeaturesReceived({part: relItem});\r\n })\r\n });\r\n };\r\n\r\n consoleTableAllFeatures = async () => {\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n // console.log(\"Active Features:\", layout.getActiveFeatures(true));\r\n // console.log(\"layout.getActiveFeaturesAsObject:\", JSON.stringify(layout.getActiveFeaturesAsObject(false, true, true)));\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n // console.log(\"go\");\r\n await this.getAllFeatures();\r\n // console.log(\"stop\");\r\n let allFeatures = [\r\n [\"groupName\", \"sharedFeatureName\", \"customDisplayName\", \"metaData\", \"filters\"]\r\n ];\r\n parents.forEach((parent) => {\r\n parent.relatedItems.forEach(relItem => {\r\n for (let i = 0; i <= relItem.features.length; i++) {\r\n const feature = relItem.features[i];\r\n if (feature && allFeatures.every(f => (f.sharedFeatureName !== feature.dbFeature.sharedFeatureName)\r\n || (f.groupName !== feature.dbFeature.groupName))) {\r\n allFeatures.push([\r\n feature.dbFeature.groupName,\r\n feature.dbFeature.sharedFeatureName,\r\n feature.dbFeature.customDisplayName,\r\n JSON.stringify(feature.dbFeature.metaData),\r\n JSON.stringify(feature.dbFeature.filters)\r\n ])\r\n }\r\n }\r\n })\r\n });\r\n console.log(allFeatures);\r\n loaderDisable();\r\n downloadCSV(allFeatures);\r\n }\r\n\r\n consoleActiveFeatures = () => {\r\n const layout = getCurrentLayout();\r\n console.log(\"Active Features:\", layout.getActiveFeatures(true));\r\n console.log(\"Active Lead Features:\", layout.getActiveNames());\r\n console.log(\"layout.getActiveFeaturesAsObject:\", JSON.stringify(layout.getActiveFeaturesAsObject(false, true, true)));\r\n this.consoleTableAllFeatures();\r\n }\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n const quoteEnabled = fabricatorSettings.enableQuote;\r\n return (\r\n
    \r\n {this.props.windowWidth < 991 ? (\r\n \r\n ) : null}\r\n {this.props.windowWidth < 991 || dashboardFramed || (this.props.fabricatorData.checkout && this.props.goToCart && allPagesEnabled) ? null : (\r\n \r\n )}\r\n {quoteEnabled ? : null}\r\n \r\n \r\n {(fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId)) ? (\r\n \r\n ) : null}\r\n {Config.isDevMode() ? (\r\n \r\n ) : null}\r\n {(fabricatorSettings.showPricing) && this.props.goToCart && allPagesEnabled ? (\r\n \r\n ) : null}\r\n {fabricatorSettings.enableSharing && !dashboardFramed ? : null }\r\n \r\n {allPagesEnabled ? : null}\r\n {this.props.mobileNav.length && this.props.windowWidth >= 991 ? : null}\r\n {document.kvConfig.jobId ?
    : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n mobileNav: store.navigationState.mobileNav,\r\n cartItems: store.cartState.cartItems,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n showSchedulerPopup,\r\n toggleUserPopup\r\n})(MainButtons);\r\n","import PropTypes from 'prop-types';\r\nimport uuid from 'uuid';\r\nimport {hashHistory} from \"react-router\";\r\nimport $ from \"jquery\";\r\n\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {getJobIdPreset, getQtCategories, saveQuote} from \"../../api/server-api\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport JsonApi from \"../../api/jsonApi\";\r\nimport NavigationRequests from \"./navigation/navigationRequests\";\r\nimport Config, {\r\n // getCommonVisualizerType,\r\n IS_LIXIL_UI,\r\n IS_LOOK_JOURNEY, IS_OFFLINE_MODE,\r\n IS_QKB_UI\r\n} from \"../../config\";\r\nimport {isNewlyCreatedJob, parseJobIdResponse} from \"../../api/parseResponse\";\r\nimport {getImagePromiseFromLayout} from \"../../misc/getCanvasImageFromLayout\";\r\nimport {createCartList, getLocalStorageItem, getParsedLookUrl} from \"../look/lookNavigation/lookFunctions\";\r\nimport {getDefaultPresetByLook, saveQuoteAndShare} from \"../look/lookNavigation/lookFunctions2\";\r\nimport store from \"../../store\";\r\nimport {GROHE_ON_OPEN_ACTION} from \"../look/iframeIntegration\";\r\nimport {addToCart} from \"../../actions/actionFunctions\";\r\n// import {setContractBlob} from \"../../actions/contractsActions\";\r\nimport {setAllowRouting} from \"../../actions/serverFunctions\";\r\nimport {renderErrorPopup} from \"../../api/api-popups\";\r\nimport {updatePresetRoomLayout} from \"../../misc/presetsFunctions\";\r\nimport {setShopPageLoaded} from \"../../actions/shopFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {setAssignQuoteOfflineData} from \"../../actions/assignPopupFunctions\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../api/look-api\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../misc/constants\";\r\nimport {parseWizardResponse} from \"../../misc/loadVisualizer\";\r\nimport {LOCAL_STORAGE_KEYS, LOOK_OVERLAYS} from \"../look/core/constants\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport {getContracts, setContractBlobs, shouldUseContractSigning} from \"../popups/contractSign/contractsFunctions\";\r\nimport {getOfflineReceiptImages} from \"../../actions/printFunctions\";\r\n// import {setUseFeaturesLightRequest} from \"../../actions/navigationFunctions\";\r\n\r\nexport default class Visualizer extends NavigationRequests {\r\n\r\n static defaultProps = {\r\n useMouseHovering: true,\r\n useTouchZoom: true,\r\n };\r\n\r\n static propTypes = {\r\n toggleUserPopup: PropTypes.func,\r\n cartItems: PropTypes.array,\r\n useMouseHovering: PropTypes.bool,\r\n useTouchZoom: PropTypes.bool,\r\n userIsLoggedIn: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n handleToggleFeatureInfo: PropTypes.func,\r\n jobId: PropTypes.number,\r\n mobileNav: PropTypes.array,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.imageCanvas = null;\r\n this.navBar = null;\r\n this.loadByTheDefault = null;\r\n this.needToSaveQuote = false;\r\n this.state = {\r\n messageBoxState: {\r\n visible: false\r\n },\r\n canvasId: uuid.v4(),\r\n lockedView: false,\r\n activeFeature: null,\r\n demoPointClicked: false,\r\n allowRouting: false,\r\n };\r\n // if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n // loaderEnable()\r\n // }\r\n if (IS_LIXIL_UI) { // temporary removed because of additional rooms loading\r\n loaderEnable();\r\n }\r\n }\r\n\r\n setSubscribers() {\r\n $(window).on(ActionTypes.CHANGE_LAYOUT, this.handleRefresh);\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n $(window).on(ActionTypes.CANVAS_SCALE_CHANGED, this.canvasScaleChanged);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.bvOpened && !this.props.bvOpened) {\r\n this.handleRefresh();\r\n if (IS_QKB_UI && !this.props.visualizerTutorialFinished && this.props.showVisualizerTutorial) {\r\n this.props.showVisualizerTutorial(true);\r\n }\r\n }\r\n if (!nextProps.showRestorePopup && this.props.showRestorePopup) {\r\n this.changeMessageBoxState({visible:false});\r\n try {\r\n window.localStorage.removeItem(this.layout.localStorageKey);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n if (IS_QKB_UI && nextProps.initialFlowRoom && (nextProps.initialFlowRoom !== this.props.initialFlowRoom)) {\r\n this.tryToSetSelectedRoom()\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.CHANGE_LAYOUT, this.handleRefresh);\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n $(window).off(ActionTypes.CANVAS_SCALE_CHANGED, this.canvasScaleChanged);\r\n }\r\n\r\n shouldComponentUpdate() {\r\n return !window.requestInProcess\r\n }\r\n\r\n applyStoredItems = () => {\r\n loaderEnable();\r\n this.changeMessageBoxState({visible:false});\r\n try {\r\n const bvState = JSON.parse(window.localStorage.getItem(this.layout.localStorageKey));\r\n this.layout.setItemsFromBvState(bvState, true);\r\n } catch (ex) { console.log(\"applyStoredItems localStorage exception\", ex); }\r\n loaderDisable();\r\n };\r\n\r\n setIframeMessaging = () => {\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", (event) => {\r\n if (event.data && (event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.getState\r\n || event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.checkState)) {\r\n setTimeout(() => {\r\n getImagePromiseFromLayout(this.layout)\r\n .then(response => {\r\n const bvState = this.layout.getActiveFeaturesAsObject(false, false, true);\r\n bvState.bv_screen = response;\r\n // console.log('bvState.bv_screen:', bvState.bv_screen);\r\n window.parent.postMessage({\r\n action: event.data.action,\r\n payload: bvState\r\n }, \"*\");\r\n })\r\n }, 0)\r\n }\r\n if (event.data && event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.setState) {\r\n if ((document.kvConfig.visualizerType === \"bvLook\")) {\r\n event.data.bvState = updatePresetRoomLayout(event.data.bvState);\r\n console.log(\"applying new state...\", event.data.bvState);\r\n }\r\n this.layout.setItemsFromBvState(event.data.bvState);\r\n }\r\n });\r\n }\r\n\r\n if (window.parent) {\r\n window.parent.postMessage({\r\n action: VISUALIZER_MANAGEMENT_ACTIONS.visualizerIsLoaded,\r\n }, \"*\");\r\n }\r\n\r\n };\r\n\r\n canvasScaleChanged = (event, canvas_scale) => {\r\n if (canvas_scale !== 1) {\r\n this.setDemoPointClicked();\r\n $(window).off(ActionTypes.CANVAS_SCALE_CHANGED);\r\n }\r\n }\r\n\r\n async setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, layoutTypes, userIsLoggedIn, savedTempData) {\r\n if (Config.isDevMode() || document.kvConfig.kioskMode) {\r\n console.log('mainResponse-->', mainResponse);\r\n if (mainResponse) {\r\n console.log('mainResponse features-->', mainResponse.features);\r\n }\r\n console.log('bvGroupsResponse-->', bvGroupsResponse);\r\n console.log('savedTempData-->', savedTempData);\r\n }\r\n parseWizardResponse(mainResponse, qtCategories, this.layout.visualizerType); // lixil ui enable routing\r\n if (qtCategories.length) {\r\n this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups\r\n }\r\n this.layout.createCustomConfigurations(); // set shower body first\r\n this.layout.setGroupsItemsCount(bvGroupsResponse);\r\n // if (bvGroupsResponse && getCommonVisualizerType() === \"kitchen\") { // removed this logic, download countertops always as usual\r\n // toggles to request all features at once or each feature separately\r\n // store.dispatch(setUseFeaturesLightRequest({\r\n // countertops: !(bvGroupsResponse[\"countertop\"] && bvGroupsResponse[\"countertop\"].totalFeaturesCount > 8000), //increased for nhance\r\n // cabinets: !(bvGroupsResponse[\"top Cabinet\"] && bvGroupsResponse[\"top Cabinet\"].totalFeaturesCount > 6000),\r\n // }))\r\n // }\r\n this.layout.setDefaultFeatures();\r\n if (qtCategories.length) {\r\n this.layout.setQtCategoriesSubparts(qtCategories); // set QtCategories subParts(wait until defaults are set)\r\n this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups second time!!\r\n // after qtCategories are set (because we need partIdExistInQtCategory logic)\r\n }\r\n\r\n // 2) check what to set next\r\n const {lookIdFromUrl} = getParsedLookUrl();\r\n\r\n const presets = mainResponse.defaults || [];\r\n console.log(\"presets\", presets);\r\n\r\n let loadByTheDefault = null;\r\n let isCartAndUserStatedUpdateNeeded = false;\r\n\r\n let recoverFromTempId = savedTempData && Array.isArray(savedTempData.records);\r\n if (recoverFromTempId) {\r\n console.log(\"recoverFromTempId savedTempData\", savedTempData);\r\n this.loadByTheDefault = savedTempData.records[0].data;\r\n this.loadByTheDefault.alreadyRestored = true;\r\n loadByTheDefault = savedTempData.records[0].data;\r\n await parseJobIdResponse(savedTempData);\r\n }\r\n console.log(\"userIsLoggedIn\", userIsLoggedIn);\r\n\r\n if (!loadByTheDefault) {\r\n loadByTheDefault = lookIdFromUrl ? getDefaultPresetByLook(presets, lookIdFromUrl) : null;\r\n console.log(\"loadByTheDefault by lookIdFromUrl\", loadByTheDefault);\r\n console.log(\"lookIdFromUrl\", lookIdFromUrl);\r\n }\r\n if (!loadByTheDefault) {\r\n loadByTheDefault = presets.find(preset => preset.loadByTheDefault);\r\n console.log(\"loadByTheDefault by mainResponse\", loadByTheDefault);\r\n }\r\n const editJobId = document.kvConfig.jobId && document.kvConfig.jobId > 0;\r\n console.log('editJobId', editJobId);\r\n\r\n const editToken = store.getState().userState.editToken;\r\n console.log('editToken', editToken);\r\n\r\n if (editJobId || editToken) {\r\n //console.log('resetting', document.kvConfig.jobId);\r\n const jobResponse = await getJobIdPreset(document.kvConfig.jobId, editToken);\r\n if (jobResponse && jobResponse.data && !jobResponse.data.error) {\r\n if (Array.isArray(jobResponse.data.records) && jobResponse.data.records.length) {\r\n this.loadByTheDefault = jobResponse.data.records[0].data;\r\n if (this.loadByTheDefault && this.loadByTheDefault.bvStateVersion) { // for old quotes we are keeping old create cart list logic\r\n this.loadByTheDefault.alreadyRestored = true;\r\n }\r\n }\r\n await parseJobIdResponse(jobResponse.data);\r\n if (loadByTheDefault && isNewlyCreatedJob(jobResponse.data)) {\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes);\r\n await updateCurrentQuote(0);\r\n }\r\n } else if (loadByTheDefault) {\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes)\r\n }\r\n if (IS_QKB_UI && !document.kvConfig.visualizerOnly\r\n && (!window.location.href.includes(\"#/\") || !window.location.href.split(\"#/\")[1].length)) {\r\n if (this.props.fabricatorSettings.checkout) {\r\n this.goToCart()\r\n } else {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n if (!window.location.href.includes(\"visualizer\")) {\r\n hashHistory.push(\"visualizer\");\r\n }\r\n }\r\n }\r\n return true\r\n } else if (loadByTheDefault) {\r\n if (!recoverFromTempId) { // temp id data is recovered in parse response\r\n await this.setFirstPreset(loadByTheDefault, layoutTypes, isCartAndUserStatedUpdateNeeded);\r\n }\r\n // 3) restore share button or save quote click\r\n if (loadByTheDefault.returnAction) {\r\n this.needToSaveQuote = false;\r\n if (!userIsLoggedIn) {\r\n console.info(`Sorry, can't share to ${loadByTheDefault.returnAction}, the user is not logged in, so the quote can not be saved.`);\r\n return\r\n }\r\n if (loadByTheDefault.returnAction === GROHE_ON_OPEN_ACTION.saveQuote) {\r\n setTimeout(() => {$(\"button[data-id='save-button']\").trigger('click')}, 0);\r\n } else if ([\r\n GROHE_ON_OPEN_ACTION.shareFacebook,\r\n GROHE_ON_OPEN_ACTION.sharePinterest,\r\n GROHE_ON_OPEN_ACTION.shareTwitter].some(action => loadByTheDefault.returnAction === action)) {\r\n setTimeout(() => {\r\n const {shareUrl} = store.getState().serverState;\r\n saveQuoteAndShare(loadByTheDefault.returnAction, shareUrl);\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n setFirstPreset = async (roomPreset, layoutTypes, isCartAndUserStatedUpdateNeeded= false) => {\r\n if (!layoutTypes || layoutTypes[roomPreset.layout_type]) {\r\n // this.setNewBvState(roomPreset, true);\r\n console.log(\"roomPreset\", roomPreset);\r\n const layout_type = +roomPreset.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +this.layout.type);\r\n if (needToChangeLayout) {\r\n await this.changeLayout(layout_type, true)\r\n }\r\n if (this.props.setFirstLoadedPreset) {\r\n this.props.setFirstLoadedPreset(roomPreset.id);\r\n }\r\n await this.layout.setItemsFromBvState(\r\n roomPreset, isCartAndUserStatedUpdateNeeded, (bvState) => bvState, true\r\n )\r\n }\r\n }\r\n\r\n getQtCategoriesCommon = () => {\r\n return (this.props.qtCategoriesRequested && this.props.qtCategoriesRequested.includes(this.layout.visualizerType))\r\n ? Promise.resolve([])\r\n : getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n }\r\n\r\n setNewBvState = (bvState, firstLoad = false) => {\r\n this.layout.initialized = false;\r\n if (!firstLoad) {\r\n loaderEnable();\r\n }\r\n this.layout.setActiveFeaturesFromObject(bvState, false, false, true, true);\r\n if (!firstLoad) {\r\n this.handleRefresh();\r\n loaderDisable();\r\n }\r\n };\r\n\r\n resetEverything = () => {\r\n this.layout.resetEverything();\r\n if (this.navBar && this.navBar.resetWizardSteps) {\r\n this.navBar.resetWizardSteps()\r\n }\r\n this.handleRefresh();\r\n };\r\n\r\n goToCart = () => {\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n this.props.setCameFromPage('visualizer');\r\n if (!window.location.href.includes('shoppingcart')) {\r\n hashHistory.push('shoppingcart');\r\n }\r\n };\r\n\r\n onBvLoad = () => {\r\n this.props.setCanvasId(this.state.canvasId);\r\n if (IS_QKB_UI && document.kvConfig.visualizerOnly) {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n if (!window.location.href.includes(\"visualizer\")) {\r\n hashHistory.push(\"visualizer\");\r\n }\r\n } else {\r\n const layoutParts = this.layout.getFeatures()\r\n .filter(parentGroup => parentGroup.categoryEnabled)\r\n .map((parentGroup) => parentGroup.partName);\r\n this.props.setLayoutDataParts(layoutParts);\r\n this.props.setDefaultSelectionGroup(layoutParts[0]);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n }\r\n if (IS_QKB_UI && !(document.kvConfig.jobId && document.kvConfig.jobId > 0) && !Config.isVisualizerManagement()) {\r\n this.askToRestore(this.layout.localStorageKey);\r\n }\r\n };\r\n\r\n checkShareUrl = async () => {\r\n let design = new URLSearchParams(window.location.search).get(\"design\");\r\n if (design && (design[design.length - 1] === \"/\")) {\r\n design = design.slice(0, -1);\r\n }\r\n if (design) {\r\n const jobResponse = await getJobIdPreset(design);\r\n console.log(\"jobResponse for share URL design #\" + design, jobResponse);\r\n if (jobResponse && jobResponse.data && Array.isArray(jobResponse.data.records) && jobResponse.data.records.length) {\r\n this.loadByTheDefault = jobResponse.data.records[0].data;\r\n await parseJobIdResponse(jobResponse.data, true);\r\n }\r\n }\r\n };\r\n\r\n handleRefresh = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex) => {\r\n this.imageCanvas.renderGreenLayerByZindex(zIndex)\r\n };\r\n\r\n setHoveredLayer = (event) => {\r\n this.imageCanvas.setHoveredLayer(event)\r\n };\r\n\r\n setCanvasClass = (canvasClass, removeAllClasses) => {\r\n if (this.imageCanvas) {\r\n this.imageCanvas.imageCanvasScroll(canvasClass, removeAllClasses, this.layout.type, this.layout.scene);\r\n }\r\n };\r\n\r\n changeMessageBoxState = (newMessageBoxState) => {\r\n this.setState({\r\n messageBoxState: {...this.state.messageBoxState, ...newMessageBoxState}\r\n })\r\n };\r\n\r\n setActiveFeature = (activeFeature) => { // this is needed for lock screen. we can't get rid of that\r\n this.setState({\r\n activeFeature\r\n })\r\n };\r\n\r\n setDemoPointClicked = () => {\r\n this.setState({\r\n demoPointClicked: true\r\n })\r\n };\r\n\r\n loadQtCategoriesFeatures = (qtCategories) => {\r\n const featureGroupsWithoutFeatures = this.layout.loadFeatureGroupFeatures(qtCategories);\r\n // console.log(\"featureGroupsWithoutFeatures\", featureGroupsWithoutFeatures);\r\n const {wizardList, wizardIsActive} = store.getState().wizardState;\r\n if (featureGroupsWithoutFeatures.length && !IS_LIXIL_UI && !showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n if (this.layout.isNewLayout) {\r\n const toRequestFeatureGroups = featureGroupsWithoutFeatures.filter(subPart => !subPart.part.nextFeaturesPageToLoadArray);\r\n // prevent requesting countertops and backsplashes since the preset is not applied yet!\r\n Promise.all(toRequestFeatureGroups.map(subPart => {\r\n return getAdditionalFeaturesOnScroll(subPart.part, true)\r\n })).then(() => {\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS)\r\n })\r\n } else featureGroupsWithoutFeatures.forEach(sPart => {\r\n this.checkIfAllFeaturesReceived(sPart, null, () => {\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n }, false)\r\n })\r\n }\r\n };\r\n\r\n finishLoading = async () => {\r\n store.dispatch(setShopPageLoaded(true)); // lixil ui don't do any requests on the shop page\r\n store.dispatch(setAllowRouting(true)); // lixil ui enable routing\r\n await this.getContractSignDocument(); // no need for now, we are keeping existing structure (first save, then - contract)\r\n await this.getAssignQuoteCustomersAndEmployees(); // no need for now, we are keeping existing structure (first save, then - contract)\r\n\r\n if (IS_LOOK_JOURNEY) {\r\n let loadByTheDefault = this.loadByTheDefault && this.loadByTheDefault.id === this.props.activePreset ? this.loadByTheDefault : null\r\n if (!loadByTheDefault || !loadByTheDefault.alreadyRestored) {\r\n setTimeout(() => {\r\n const {qtActiveCategory} = store.getState().qtState;\r\n const cartItems = createCartList(qtActiveCategory, loadByTheDefault);\r\n if (cartItems.length) {\r\n store.dispatch(addToCart(cartItems))\r\n }\r\n }, 1000) // is needed to finish render routing first (to create cart list from already selected features)\r\n }\r\n }\r\n\r\n if (this.props.initialFlowStep === 3) {\r\n this.changeLayout(this.props.initialFlowRoomLayout);\r\n this.tryToSetSelectedRoom();\r\n } else {\r\n console.log('initialized', this.layout);\r\n this.layout.initialized = true;\r\n this.handleRefresh();\r\n if (!this.props.bvOpened || IS_LIXIL_UI || !this.layout.getLayers().length) {\r\n loaderDisable();\r\n }\r\n }\r\n this.setIframeMessaging();\r\n this.props.addVisualizersLoaded(this.layout.visualizerType);\r\n if (this.needToSaveQuote || window.location.href.includes(\"saveOnLoad=true\")) {\r\n setTimeout(() => {\r\n saveQuote({submit: true, showReceipt: false})\r\n .then((saveJobResponse) => {\r\n if (this.props.updateCanvasCount) {\r\n this.props.updateCanvasCount(); // this is fixing the bug on mobile, after return from Grohe Register page the canvas is empty(white)\r\n }\r\n if (window.location.href.includes(\"saveOnLoad=true\") && window.parent) {\r\n window.parent.postMessage({\r\n action: VISUALIZER_MANAGEMENT_ACTIONS.visualizerIsSaved,\r\n saveJobResponse,\r\n }, \"*\");\r\n }\r\n });\r\n }, 0)\r\n }\r\n setTimeout(() => {\r\n if (!this.layout.allDbFeatures.length) {\r\n loaderDisable();\r\n renderErrorPopup(\"No Features Available\");\r\n }\r\n }, 1000)\r\n if (IS_LOOK_JOURNEY && (!document.kvConfig.isBackend || !getLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited))\r\n && this.layout.isNewLayout && !document.kvConfig.jobId) { // always for client mode\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.intro));\r\n }\r\n };\r\n\r\n getContractSignDocument = async () => {\r\n\r\n const contractsList = await getContracts(); // set empty array to show sign route\r\n\r\n if (IS_OFFLINE_MODE && shouldUseContractSigning(this.props.fabricatorSettings, null, true)) {\r\n await getOfflineReceiptImages(); // cache images from the receipt\r\n await setContractBlobs(contractsList, 0, true);\r\n // const documentResult = await JsonApi.getDocumentForFabricator();\r\n // if (documentResult && documentResult.data && documentResult.data.base64PDF) {\r\n // const responseFetch = await fetch(\"data:application/pdf;base64,\" + documentResult.data.base64PDF);\r\n // const blob = await responseFetch.blob();\r\n // // console.log(\"responseFetch\", blob);\r\n // const jobDocumentUrl = URL.createObjectURL(blob);\r\n // // console.log(\"createdBlobDocument\", jobDocumentUrl);\r\n // store.dispatch(setContractBlob(jobDocumentUrl));\r\n // }\r\n }\r\n }\r\n\r\n getAssignQuoteCustomersAndEmployees = async () => {\r\n if (IS_OFFLINE_MODE && document.kvConfig.isBackend && !document.kvConfig.visualizerOnly) {\r\n const custAndEmpResponse = await JsonApi.getCustomersAndEmployees();\r\n if (custAndEmpResponse && custAndEmpResponse.data && (custAndEmpResponse.data.clients || custAndEmpResponse.data.employees)) {\r\n store.dispatch(setAssignQuoteOfflineData({\r\n assignQuoteOfflineCustomers: (custAndEmpResponse.data.clients || []).filter(client => client.fullName && client.email),\r\n assignQuoteOfflineEmployees: (custAndEmpResponse.data.employees || []).filter(employee => employee.fullName),\r\n }));\r\n }\r\n }\r\n }\r\n\r\n tryToSetSelectedRoom = () => {\r\n const roomChosen = store.getState().initialFlowState.initialFlowRoom;\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n if (this.layout.qtCategories && roomChosen) {\r\n this.layout.qtCategories.forEach((qtCategory => {\r\n if (qtCategory.subParts) {\r\n qtCategory.subParts.forEach((subPart) => {\r\n if (subPart.part.partName === \"Room\") {\r\n if (subPart.part.features) {\r\n const selectedRoomFeature = subPart.part.features.find(feature => feature.partName === roomChosen);\r\n if (selectedRoomFeature) {\r\n subPart.part.activeFeature = selectedRoomFeature;\r\n subPart.part.firstClick[activeQuoteIndex] = true;\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }))\r\n }\r\n };\r\n\r\n askToRestore = (localStorageKey) => {\r\n try {\r\n const bvState = JSON.parse(window.localStorage.getItem(localStorageKey));\r\n if (bvState) {\r\n this.changeMessageBoxState({\r\n visible: true,\r\n message: \"messageBox.restoreSessionTitle\",\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.changeMessageBoxState({visible:false});\r\n window.localStorage.removeItem(localStorageKey);\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: this.applyStoredItems\r\n }]\r\n });\r\n }\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n };\r\n\r\n checkToShowTutorial = () => {\r\n return (this.props.bvOpened || this.props.bvVisited) && this.props.visualizerTutorialIsOpened\r\n && this.layout.initialized && !this.props.visualizerTutorialFinished && this.props.cookieAccepted\r\n && !this.state.messageBoxState.visible;\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setMaterialsTutorialFinished,\r\n setVisualizerTutorialFinished, setVisualizerTutorialStep,\r\n showMaterialsTutorial,\r\n showVisualizerTutorial\r\n} from \"../../actions/tutorialFunctions\";\r\nimport Tutorial from \"./tutorial\";\r\n// import ActionTypes from \"../../misc/actionTypes\";\r\n// import {ContentType} from \"../visComponents/constants\";\r\n\r\nclass VisualizerTutorial extends Tutorial {\r\n\r\n static propTypes = {\r\n isMobile: PropTypes.bool.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n ringStyles: {\r\n left: 0,\r\n top: 0,\r\n }\r\n };\r\n }\r\n\r\n componentDidMount = () => {\r\n let nextStep = this.props.visualizerTutorialStep;\r\n if (document.kvConfig.visualizerOnly && !this.props.visualizerTutorialStep) {\r\n this.props.setVisualizerTutorialStep(1);\r\n nextStep = 1;\r\n } else if (nextStep === 2 && !this.props.isMobile) {\r\n this.props.setVisualizerTutorialStep(3);\r\n nextStep = 3;\r\n }\r\n if (nextStep === 3) {\r\n if (this.props.fabricatorSettings.enableSharing) {\r\n $(\".tutorial-overlay--visualizer\").fadeIn(300);\r\n this.showTutorialStep(nextStep);\r\n } else {\r\n this.exitTutorial(true);\r\n }\r\n } else {\r\n $(\".tutorial-overlay--visualizer\").fadeIn(300);\r\n this.showTutorialStep(nextStep);\r\n }\r\n };\r\n\r\n showTutorialStep = (nextStep = this.props.visualizerTutorialStep) => {\r\n switch (nextStep) {\r\n case 0: {\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--back-to-quote\");\r\n break;\r\n }\r\n case 1: {\r\n if (this.props.isMobile) {\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--design\", 0);\r\n } else {\r\n $(\"html, body\").animate({scrollTop: 0}, 500, () => {\r\n const roomLayoutsOrIdeas = this.getRoomLayoutsOrIdeasStepLogic();\r\n if (roomLayoutsOrIdeas.selector) {\r\n this.changeHighlightRingPosition(roomLayoutsOrIdeas.selector);\r\n }\r\n $(\".tutorial-step\").fadeIn(300)\r\n });\r\n }\r\n break;\r\n }\r\n case 3: {\r\n // if (this.props.isMobile) {\r\n // $(document).trigger(ActionTypes.OPEN_MOBILE_NAVIGATION); // open navigation\r\n // $(document).trigger(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, [ContentType.Layout]); // set navigation type\r\n // } else {\r\n // this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--share\");\r\n // }\r\n this.scrollAndHighLightRing(\".mainbuttons .mobilebutton--share\");\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n scrollAndHighLightRing = (selector, scrollTop = document.body.scrollHeight) => {\r\n $(\"html, body\").animate({scrollTop}, 500, () => {\r\n this.changeHighlightRingPosition(selector);\r\n $(\".tutorial-step__ring, .tutorial-step\").fadeIn(300, () => {\r\n if (this.props.isMobile) {\r\n setTimeout(() => {\r\n this.changeHighlightRingPosition(selector);\r\n }, 300)\r\n }\r\n })\r\n });\r\n };\r\n\r\n handleNextStepClick = () => {\r\n const nextStep = this.props.visualizerTutorialStep + 1;\r\n this.props.setVisualizerTutorialStep(nextStep);\r\n switch (nextStep) {\r\n case 1:\r\n this.exitTutorial();\r\n break;\r\n case 2: {\r\n if (this.props.isMobile) {\r\n setTimeout(() => {\r\n this.changeHighlightRingPosition(\".des .mobilebutton--layout\");\r\n }, 500)\r\n } else {\r\n this.exitTutorial();\r\n }\r\n break;\r\n }\r\n case 3: {\r\n if (this.props.isMobile) {\r\n this.changeHighlightRingPosition(\".mainbuttons .mobilebutton--share\");\r\n } else {\r\n this.exitTutorial(true);\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n\r\n exitTutorial = (forever) => {\r\n $(\".tutorial-overlay--visualizer\").fadeOut(300, () => {\r\n this.props.showVisualizerTutorial(false);\r\n if (forever) {\r\n this.props.setMaterialsTutorialFinished(true);\r\n this.props.setVisualizerTutorialFinished(true);\r\n try {\r\n window.localStorage.setItem(\"materials_tutorial_finished\", true);\r\n window.localStorage.setItem(\"visualizer_tutorial_finished\", true);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n });\r\n };\r\n\r\n getHighLightButton = () => {\r\n switch (this.props.visualizerTutorialStep) {\r\n case 0: {\r\n return (\r\n \r\n )\r\n }\r\n case 1: {\r\n if (this.props.isMobile) {\r\n return (\r\n \r\n )\r\n }\r\n return this.getRoomLayoutsOrIdeasStepLogic().buttonComponent\r\n }\r\n case 2: {\r\n return (this.props.isMobile) ? (\r\n \r\n ) : null\r\n }\r\n case 3: {\r\n return (\r\n \r\n )\r\n }\r\n default:\r\n return null\r\n }\r\n };\r\n\r\n getRoomLayoutsOrIdeasStepLogic = () => {\r\n const existingRoomLayout = document.querySelector(\".tab.tab--room-layout\");\r\n if (existingRoomLayout) {\r\n return {\r\n selector: \".nav-wrapper__tabs .tab.tab--room-layout\",\r\n buttonComponent: (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ),\r\n mainTranslate: \"roomLayout\",\r\n }\r\n }\r\n const existingRoomIdeas = document.querySelector(\".tab.tab--room-ideas\");\r\n if (existingRoomIdeas) {\r\n return {\r\n selector: \".nav-wrapper__tabs .tab.tab--room-ideas\",\r\n buttonComponent: (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ),\r\n mainTranslate: \"roomIdeas\",\r\n }\r\n }\r\n return {\r\n selector: \"\",\r\n mainTranslate: null,\r\n buttonComponent: null\r\n }\r\n }\r\n\r\n render() {\r\n const ringStyles = this.state.ringStyles;\r\n const texts = (this.props.isMobile) ? \"mobile\" : \"desktop\";\r\n const highlightButton = this.getHighLightButton();\r\n const mainTextId = ((this.props.visualizerTutorialStep === 1) && !this.props.isMobile\r\n && this.getRoomLayoutsOrIdeasStepLogic().mainTranslate === \"roomIdeas\")\r\n ? `tutorials.visualizerPage.${texts}.step${this.props.visualizerTutorialStep}b`\r\n : `tutorials.visualizerPage.${texts}.step${this.props.visualizerTutorialStep}`;\r\n const showText = !(this.props.visualizerTutorialStep === 2 && !this.props.isMobile);\r\n const showNextButton = this.props.visualizerTutorialStep < 3 && showText;\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n {showText ? : null}\r\n

    \r\n
    \r\n {showText ? (\r\n \r\n ) : null}\r\n {showNextButton ? (\r\n \r\n ) : null}\r\n
    \r\n
    \r\n \r\n {highlightButton ? (\r\n
    \r\n {highlightButton}\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n showMaterialsTutorial,\r\n setMaterialsTutorialFinished,\r\n showVisualizerTutorial,\r\n setVisualizerTutorialFinished,\r\n setVisualizerTutorialStep\r\n})(VisualizerTutorial);\r\n","import React from \"react\";\r\nimport {FormattedHTMLMessage} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nconst Copyright = (props) => {\r\n\r\n const {fabricatorData} = props;\r\n const date = new Date();\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Copyright)\r\n","import {pdf} from '@react-pdf/renderer';\r\nimport PrintDocument from \"../bvcomponents/popups/printPopup/printDocument\";\r\n\r\nimport store from './../store';\r\nimport * as types from \"./actionTypes\";\r\nimport {convertImgToBase64URL, THUMBNAIL_SIZES} from \"../misc/utils\";\r\nimport {getFabricatorLogo} from \"../misc/fabricatorHardcode\";\r\nimport {featureThumbnailUrl} from \"../misc/helpers\";\r\nimport {WIZARD_GROUP_TYPES} from \"../interfaces/wizardItemInterface\";\r\nimport {baseNewImagesPath} from \"../bvcomponents/assets\";\r\n\r\nlet printLogo = \"\";\r\nlet notFoundImage = \"\";\r\n\r\nexport const getCurrentReceipt = async (assignQuotePopupNewCustomer, newEmployeeSelected, onRender, isContractSign) => {\r\n\r\n const {userState, serverState, fabricatorState, cartState, quotesState, priceWorksheetState,\r\n filterState, assignQuoteState, wizardState, sqftSlabState, printState} = store.getState();\r\n\r\n const {assignQuotePopupCustomer, assignQuotePopupEmployee} = assignQuoteState;\r\n\r\n printLogo = printLogo || await convertImgToBase64URL(getFabricatorLogo(fabricatorState));\r\n let cartItemsThumbnails = {};\r\n if (fabricatorState.receiptSettings && fabricatorState.receiptSettings.showThumbnailsAndDescriptions) {\r\n cartItemsThumbnails = await getCartItemThumbnails(cartState.cartItems, wizardState);\r\n }\r\n\r\n return pdf(PrintDocument({\r\n fabricatorData: fabricatorState,\r\n userInfo: userState.userInfo,\r\n quotes: quotesState.quotes,\r\n cartItems: cartState.cartItems,\r\n priceWorksheetState,\r\n assignQuotePopupCustomer: assignQuotePopupNewCustomer || assignQuotePopupCustomer,\r\n employeeSelected: newEmployeeSelected || assignQuotePopupEmployee,\r\n locale: serverState.language,\r\n filterGroups: filterState.filterGroups,\r\n activeTheme: serverState.activeTheme,\r\n jobId: serverState.jobId,\r\n printLogo,\r\n wizardState,\r\n sqftSlabState,\r\n cartItemsThumbnails,\r\n printState,\r\n onRender,\r\n isContractSign,\r\n }))\r\n}\r\n\r\n// export const getCurrentReceiptPages = async (withReceiptUrl) => {\r\n// try {\r\n// const pdfReceipt = await getCurrentReceipt();\r\n// if (pdfReceipt && pdfReceipt.container && pdfReceipt.container.render) {\r\n// await pdfReceipt.container.render();\r\n// if (pdfReceipt.container.document && pdfReceipt.container.document.getLayoutData) {\r\n// const layoutData = pdfReceipt.container.document.getLayoutData();\r\n// if (layoutData && Array.isArray(layoutData.children) && layoutData.children.length) {\r\n// if (withReceiptUrl) {\r\n// const receipt = await pdfReceipt.toBlob();\r\n// const receiptUrl = URL.createObjectURL(receipt);\r\n// return {receiptUrl, receiptPages: layoutData.children.length};\r\n// }\r\n// return layoutData.children.length\r\n// }\r\n// }\r\n// }\r\n// if (withReceiptUrl) {\r\n// return {receiptUrl: \"\", receiptPages: 0};\r\n// }\r\n// return 0\r\n// } catch (e) {\r\n// console.log(\"error rendering pdf receipt\", e);\r\n// if (withReceiptUrl) {\r\n// return {receiptUrl: \"\", receiptPages: 0};\r\n// }\r\n// return 0\r\n// }\r\n// }\r\n\r\nexport const getCurrentReceiptPages = async (withReceiptUrl) => {\r\n try {\r\n let imagesPromise = new Promise(async (resolve) => {\r\n const onRender = (onRenObj) => {\r\n // console.log(\"onRender!!\", onRenObj);\r\n const receiptLayout = onRenObj ? onRenObj._INTERNAL__LAYOUT__DATA_ : null;\r\n const receiptPages = receiptLayout && receiptLayout.children ? receiptLayout.children.length : 1;\r\n const receiptUrl = URL.createObjectURL(onRenObj.blob);\r\n\r\n resolve({receiptUrl, receiptLayout, receiptPages})\r\n };\r\n const pdfReceipt2 = await getCurrentReceipt(null, null, onRender, true)\r\n await pdfReceipt2.toBlob();\r\n })\r\n if (withReceiptUrl) {\r\n return imagesPromise.then(response => response)\r\n }\r\n return 0\r\n } catch (e) {\r\n console.log(\"error rendering pdf receipt\", e);\r\n if (withReceiptUrl) {\r\n return {receiptUrl: \"\", receiptPages: 0};\r\n }\r\n return 0\r\n }\r\n}\r\n\r\nexport const getCartItemThumbnails = async (cartItems, wizardState) => {\r\n let cartItemsThumbnails = {};\r\n for (const cartItem of cartItems) {\r\n try {\r\n const thumbnailUrl = featureThumbnailUrl(cartItem.cartFeature, THUMBNAIL_SIZES.small);\r\n cartItemsThumbnails[cartItem.id] = await convertImgToBase64URL(thumbnailUrl);\r\n if (!cartItemsThumbnails[cartItem.id]) {\r\n if (!notFoundImage) {\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`);\r\n }\r\n cartItemsThumbnails[cartItem.id] = notFoundImage\r\n }\r\n } catch (e) {\r\n cartItemsThumbnails[cartItem.id] = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n }\r\n for (const wizard of wizardState.allWizardsValues) {\r\n for (const key of Object.keys(wizard.wizardSelectedValues)) {\r\n if (wizard.wizardSelectedValues[key].wizardGroup\r\n && (wizard.wizardSelectedValues[key].wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom)\r\n && wizard.wizardSelectedValues[key].wizardGroup.customImageUrl) {\r\n try {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n `https://corsproxy.io/?url=${encodeURIComponent(wizard.wizardSelectedValues[key].wizardGroup.customImageUrl)}`\r\n );\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n `https://proxy.corsfix.com/?${wizard.wizardSelectedValues[key].wizardGroup.customImageUrl}`\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n wizard.wizardSelectedValues[key].wizardGroup.customImageUrl\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = await convertImgToBase64URL(\r\n wizard.wizardSelectedValues[key].wizardGroup.customImageUrl + \"?not-from-cache-please\"\r\n );\r\n }\r\n if (!cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id]) {\r\n if (!notFoundImage) {\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`);\r\n }\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = notFoundImage\r\n }\r\n } catch (e) {\r\n cartItemsThumbnails[wizard.wizardSelectedValues[key].wizardGroup.id] = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n }\r\n }\r\n }\r\n return cartItemsThumbnails\r\n}\r\n\r\nexport const getOfflineReceiptImages = async () => {\r\n const {fabricatorState} = store.getState();\r\n notFoundImage = await convertImgToBase64URL(`${baseNewImagesPath}images/image-not-found.png`)\r\n printLogo = await convertImgToBase64URL(getFabricatorLogo(fabricatorState));\r\n await getCurrentReceiptPages(true);\r\n return true\r\n}\r\n\r\nexport const printReceipt = async () => {\r\n const pdfReceipt = await getCurrentReceipt();\r\n const receipt = await pdfReceipt.toBlob();\r\n const fileURL = URL.createObjectURL(receipt);\r\n window.open(fileURL, \"_blank\");\r\n}\r\n\r\nexport const setReceiptUrl = (receiptUrl) => ({\r\n type: types.SET_RECEIPT_URL,\r\n payload: {receiptUrl}\r\n})\r\n\r\nexport const setReceiptSignature = (receiptSignature) => ({\r\n type: types.SET_RECEIPT_SIGNATURE,\r\n payload: {receiptSignature}\r\n})\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setPaymentInfo = (name, value) => ({\r\n type: types.SET_PAYMENT_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setCardInfo = (name, value) => ({\r\n type: types.SET_CARD_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setCardErrors = (cardErrors) => ({\r\n type: types.SET_CARD_ERRORS,\r\n payload: {cardErrors}\r\n});\r\n\r\nexport const setShippingErrors = (shippingErrors) => ({\r\n type: types.SET_SHIPPING_ERRORS,\r\n payload: {shippingErrors}\r\n});\r\n\r\nexport const setShippingInfo = (name, value) => ({\r\n type: types.SET_SHIPPING_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setBillingInfo = (name, value) => ({\r\n type: types.SET_BILLING_INFO,\r\n payload: {name, value}\r\n});\r\n\r\nexport const restorePaymentInfo = (someValues) => ({\r\n type: types.RESTORE_PAYMENT_INFO,\r\n payload: someValues\r\n});\r\n","import {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport _ from 'lodash';\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n distanceToInches,\r\n distanceToMillimeters,\r\n getAngleBetweenTwoPoints, getMidPoint,\r\n isDisabledInPopupWithParents,\r\n measureDistanceToInches,\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\nimport {DIRECTIONS, getLineDirection} from \"../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\n\r\nexport default class NumberText {\r\n id = null;\r\n design = {\r\n fontColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n fontFamily: 'playbold',\r\n fontHeight: 16,\r\n isLength: false,\r\n valuePrefix: '',\r\n valuePostfix: '',\r\n shouldRenderFrameBorder: false,\r\n eventsPriority: EventManager.priorities.SEGMENT\r\n };\r\n value = 0;\r\n callback = null;\r\n pos = {\r\n x: 0,\r\n y: 0,\r\n xOffset: 0,\r\n yOffset: 0,\r\n angle: 0,\r\n orientation: DIRECTIONS.EAST,\r\n betweenPoints: {\r\n pointFrom: null,\r\n pointTo: null,\r\n }\r\n };\r\n state = {\r\n isHovered: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHidden: true\r\n };\r\n\r\n constructor(value, pos, design, parent = workspace, callback = Function(), isInit = true) {\r\n this.value = value;\r\n Object.assign(this.pos, pos);\r\n Object.assign(this.design, design);\r\n this.parent = parent;\r\n this.callback = callback;\r\n this.id = uuidv4();\r\n\r\n if (isInit) {\r\n this.initEventListeners();\r\n }\r\n }\r\n getParent() {\r\n return this.parent\r\n }\r\n\r\n get orientation () {\r\n return this.pos.orientation\r\n }\r\n\r\n initEventListeners() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n this.design.eventsPriority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n }\r\n\r\n hideEvents() {\r\n if (!this.state.isHidden) {\r\n this.deregisterEvents();\r\n this.state.isHidden = true;\r\n }\r\n }\r\n\r\n revealEvents() {\r\n if (this.state.isHidden) {\r\n this.initEventListeners();\r\n this.state.isHidden = false;\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents() {\r\n this.initEventListeners();\r\n }\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n this.state.isHovered = this.isMouseOverText(mousePos);\r\n\r\n if (this.state.isHovered) {\r\n EventManager.stealCursor();\r\n //todo rotated cursor\r\n EventManager.setCursor(([DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation)) ? \"text\" : \"text-vertical\", this);\r\n } else {\r\n EventManager.resetCursor(this);\r\n return false;\r\n }\r\n };\r\n\r\n isMouseOverText = (mousePos) => {\r\n return pnpolyArray(this.getTextPointsArea(), mousePos);\r\n };\r\n\r\n getTextPointsArea = () => {\r\n const mText = EventManager.getCtx().measureText(this.design.valuePrefix + this.value + this.design.valuePostfix );\r\n const {x, y} = this.getPos();\r\n\r\n let pointsArray = [];\r\n\r\n if ([DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation)) {\r\n pointsArray = [\r\n [x - Math.ceil10(mText.width,-2) / 2, y - this.design.fontHeight / 2],\r\n [x + Math.ceil10(mText.width,-2) / 2, y - this.design.fontHeight / 2],\r\n [x + Math.ceil10(mText.width,-2) / 2, y + this.design.fontHeight / 2],\r\n [x - Math.ceil10(mText.width,-2) / 2, y + this.design.fontHeight / 2],\r\n ]\r\n } else if ([DIRECTIONS.NORTH, DIRECTIONS.SOUTH].includes(this.pos.orientation)) {\r\n pointsArray = [\r\n [x - this.design.fontHeight / 2, y - Math.ceil10(mText.width,-2) / 2],\r\n [x + this.design.fontHeight / 2, y - Math.ceil10(mText.width,-2) / 2],\r\n [x + this.design.fontHeight / 2, y + Math.ceil10(mText.width,-2) / 2],\r\n [x - this.design.fontHeight / 2, y + Math.ceil10(mText.width,-2) / 2],\r\n ]\r\n } else {\r\n // todo horizontal\r\n }\r\n\r\n return pointsArray;\r\n };\r\n\r\n onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n }\r\n };\r\n\r\n onMouseDown = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if (this.state.isHovered && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n\r\n const maxLength = this.parent.getMaxLength ? this.parent.getMaxLength() : 1000 * sqftConfig.getMeasureMultiplier();\r\n const pos = this.getPos();\r\n const initialValue = this.design.isLength\r\n ? sqftConfig.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(this.value).millimeters\r\n : this.value\r\n : this.value;\r\n\r\n const inputWrapper = createAdjustableInput({\r\n position: pos,\r\n initialValue: initialValue.toString(),\r\n min: 1,\r\n max: maxLength,\r\n orientation: [DIRECTIONS.WEST, DIRECTIONS.EAST].includes(this.pos.orientation) ? \"horizontal\" : \"vertical\",\r\n onChange: this.onInputChange, // Trigger onInputChange when value changes\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n this.state.isHovered = false;\r\n },\r\n step: 1,\r\n });\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n }\r\n\r\n return false;\r\n };\r\n\r\n onInputChange = (value) => {\r\n const valueBeforeUpdate = this.value;\r\n this.value = value;\r\n this.callback(value, this, valueBeforeUpdate);\r\n };\r\n\r\n onMouseLeave = () => {\r\n this.state.isHoveringPoint = false;\r\n this.state.mouseDown = false;\r\n this.state.hoveredPoint = null;\r\n this.state.isHoveredOverText = false;\r\n };\r\n\r\n setValue = (value) => {\r\n this.value = value\r\n }\r\n\r\n setPos = (pos) => {\r\n this.pos.x = pos.x\r\n this.pos.y = pos.y\r\n }\r\n\r\n setAngle = (angle) => {\r\n this.pos.angle = angle\r\n }\r\n\r\n setBetweenPoints = (pointFrom, pointTo) => {\r\n this.pos.betweenPoints.pointFrom = pointFrom;\r\n this.pos.betweenPoints.pointTo = pointTo;\r\n }\r\n\r\n getPos = () => {\r\n const parentOffset = this.parent.getOffset() ? this.parent.getOffset() : { x: 0, y: 0 };\r\n const scale = _.clone(sqftConfig.scale);\r\n let angle = this.pos.angle;\r\n\r\n //if this in the NumberText between lines than we override angle\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n }\r\n\r\n const angleRad = angle * (Math.PI / 180);\r\n\r\n // calculate offset position according to offset point\r\n const calculatedXOffset = this.pos.xOffset * Math.cos(angleRad) - this.pos.yOffset * Math.sin(angleRad);\r\n const calculatedYOffset = this.pos.xOffset * Math.sin(angleRad) + this.pos.yOffset * Math.cos(angleRad);\r\n\r\n return {\r\n x: this.pos.x * scale + calculatedXOffset + parentOffset.x,\r\n y: this.pos.y * scale + calculatedYOffset + parentOffset.y\r\n }\r\n };\r\n\r\n getValue = (isString, withSuffixes = false) => {\r\n let value = this.value;\r\n if (this.design.isLength) {\r\n value = sqftConfig.measureUnit === \"Metric\"\r\n ? distanceToMillimeters(value)\r\n : distanceToInches(value)\r\n } else if (isString) {\r\n value = value.toString();\r\n }\r\n if (withSuffixes) {\r\n value = this.design.valuePrefix + value.toString() + this.design.valuePostfix;\r\n }\r\n\r\n return value\r\n };\r\n\r\n updateOrientation = () => {\r\n if (this.pos.betweenPoints.pointFrom) {\r\n this.pos.orientation = getLineDirection(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo, true);\r\n }\r\n }\r\n\r\n updatePositionBetweenPoints = () => {\r\n if (this.pos.betweenPoints.pointFrom) {\r\n const pointBetweenPoints = getMidPoint(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n\r\n this.pos.x = pointBetweenPoints.x\r\n this.pos.y = pointBetweenPoints.y\r\n }\r\n }\r\n\r\n render = (ctx) => {\r\n if ((isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this))\r\n || (this.pos.x === 0 && this.pos.y === 0) // this is for Free Draw. see https://qcquotecountertops.atlassian.net/browse/QCDES-2064\r\n ) {\r\n return\r\n }\r\n\r\n this.updateOrientation();\r\n this.updatePositionBetweenPoints();\r\n if (this.design.shouldRenderFrameBorder) {\r\n this.renderFrameBorder(ctx);\r\n }\r\n this.renderText(ctx);\r\n }\r\n\r\n renderFrameBorder = (ctx) => {\r\n ctx.beginPath();\r\n const pos = this.getPos();\r\n const value = this.getValue(true, true);\r\n const mText = ctx.measureText(value);\r\n let angle = 0;\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n //this will help to rotate upside down text\r\n if ([DIRECTIONS.NORTHWEST, DIRECTIONS.SOUTHWEST].includes(this.pos.orientation)) {\r\n angle += 180;\r\n }\r\n }\r\n\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR.white\r\n\r\n ctx.save();\r\n ctx.translate(\r\n pos.x ,\r\n pos.y\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n RenderFigures.roundedRect(ctx,\r\n - mText.width / 2, // / sqftConfig.scale * sqftConfig.defaultScale,\r\n - this.design.fontHeight / 1.5,\r\n mText.width * 1.5, /// sqftConfig.scale * sqftConfig.defaultScale,\r\n this.design.fontHeight + 6,\r\n 5,\r\n true,\r\n true\r\n );\r\n\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n\r\n renderText = (ctx) => {\r\n const //scale = sqftConfig.scale,\r\n fontHeight = this.design.fontHeight, //getFontsizeSmall(),\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n value = this.getValue(true, true),//this.value.toString(),\r\n\r\n mText = ctx.measureText(value),\r\n pos = this.getPos();\r\n let angle = this.pos.angle;\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n if (this.pos.betweenPoints.pointFrom) {\r\n angle = getAngleBetweenTwoPoints(this.pos.betweenPoints.pointFrom, this.pos.betweenPoints.pointTo);\r\n }\r\n\r\n switch (this.orientation) {\r\n case DIRECTIONS.EAST:\r\n case DIRECTIONS.WEST:\r\n case DIRECTIONS.SOUTH:\r\n case DIRECTIONS.NORTH:\r\n case DIRECTIONS.SOUTHEAST:\r\n case DIRECTIONS.SOUTHWEST:\r\n case DIRECTIONS.NORTHEAST:\r\n case DIRECTIONS.NORTHWEST: {\r\n //this will help to rotate upside down text\r\n if (this.pos.betweenPoints.pointFrom) {\r\n if ([DIRECTIONS.NORTHWEST, DIRECTIONS.SOUTHWEST, DIRECTIONS.WEST].includes(this.pos.orientation)) {\r\n angle += 180;\r\n }\r\n }\r\n\r\n ctx.save();\r\n ctx.translate(pos.x, pos.y);\r\n ctx.rotate(angle * (Math.PI / 180));\r\n ctx.wrapText(value, fontHeight / 2, fontHeight / 3, mText, fontHeight);\r\n ctx.restore();\r\n\r\n //ctx.wrapText(value, pos.x, pos.y, mText, fontHeight);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport {\r\n getBacksplashArea,\r\n getEdgeLength,\r\n getPointField,\r\n isPointInsideShape,\r\n mmToM\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport ShapeHelper, {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\n//import $ from \"jquery\";\r\nimport {\r\n APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE,\r\n MOVABLE_IMAGE_TYPES,\r\n SIDEBAR_SLAB_BUTTONS\r\n} from \"../../../../constants\";\r\nimport store from \"../../../../../../store\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"./pointV2\";\r\nimport RenderMovableImage from \"./imageParts/renderMovableImage\";\r\nimport sqftShape from \"./sqftShape\";\r\nimport ShapeAbsolute from \"./shapeParts/shapeAbsolute\";\r\n//import point from \"./point\";\r\nimport {createImageLinesFromPoints, getImagePoint} from \"../../helpers/movableImageHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {hardCodeIsCaesarStone} from \"../../../../../../misc/fabricatorHardcode\";\r\n//import LineImage from \"./imageParts/lineImage\";\r\n\r\nclass MovableImage {\r\n image = null;\r\n initialSize = {\r\n width: 12,\r\n height: 12, // depth in 3d mode\r\n thickness: 12 // height in 3d (this is not visible param for the cabinets)\r\n };\r\n size = {\r\n width: 12,\r\n height: 12,\r\n thickness: 12,\r\n };\r\n hoverColor = \"#6495ED\";\r\n // debugLineColor = \"rgba(0,255,0,0.3)\",\r\n // debugPointColor = \"rgba(0,0,255,0.3)\",\r\n //fillColor = \"rgba(255,255,255,0)\",\r\n attachedTo = null;\r\n type;\r\n part;\r\n shapeRotatable;\r\n shapeType = \"square\";\r\n renderMovableImage = null; //new RenderMovableImage(this);\r\n\r\n constructor(id, priority = null, subType) {\r\n this.id = id;\r\n this.priority = priority;\r\n this.subType = subType;\r\n this.pos = { x: 0, y: 0 };\r\n this._state = {\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n mouseDownSize: null,\r\n hovering: false,\r\n isRotatable: false,\r\n minimumHeight: 1,\r\n minimumWidth: 1,\r\n };\r\n this.rotatedDegrees = 0;\r\n this.rotatedDegreesSlab = 0;\r\n this.featureId = id;\r\n this.pricePerArea = 0;\r\n this.isHidden = false;\r\n this.isDisabledInPopup = false;\r\n this.Direction = {\r\n RIGHT: 0,\r\n LEFT: 1\r\n };\r\n this.FlipDirection = {\r\n HORIZONTAL: 0,\r\n VERTICAL: 1\r\n };\r\n this.resizablePoint = null;\r\n this.onClicked = null;\r\n this.onHover = null;\r\n this.shapeAbsolute = new ShapeAbsolute(this); // this is used to snap images\r\n this.params = {\r\n canSnap: true\r\n }\r\n\r\n //this.initEvents();\r\n }\r\n\r\n //private methods\r\n _setFillColor = (red, green, blue, alpha) => {\r\n let fillColor =\r\n \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha + \")\";\r\n void fillColor;\r\n }\r\n _setImage = (value) => { this.image = value; }\r\n _setAttachedTo = (value) => {\r\n if (value) {\r\n this.attachedTo = value;\r\n }\r\n }\r\n _setHovering = (value) => {\r\n this._state.hovering = value;\r\n return value;\r\n }\r\n _snappedPos = () => {\r\n let scaledGridSize = config.workspace.getScaledGridSize();\r\n\r\n let newX = Math.round(this.pos.x / scaledGridSize) * scaledGridSize;\r\n let newY = Math.round(this.pos.y / scaledGridSize) * scaledGridSize;\r\n return {\r\n x: newX,\r\n y: newY\r\n };\r\n }\r\n\r\n _moveImage = (mousePos) => {\r\n const scale = workspace.getScale();\r\n let xDiff = (this._state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this._state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n this.updateSnappedPos();\r\n\r\n this.pos.x -= xDiff;\r\n this._state.mouseDownPosition.x = mousePos.x;\r\n\r\n this.pos.y -= yDiff;\r\n this._state.mouseDownPosition.y = mousePos.y;\r\n };\r\n\r\n resetAbsolutePos = () => {\r\n if (this.params.canSnap) {\r\n this.shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n this.shapeAbsolute.setSnappedWithShape(null);\r\n this.shapeAbsolute.setSnappedShapeGroup(null);\r\n }\r\n }\r\n\r\n updateLinesLength = () => {\r\n for (const line of this.getLines()) {\r\n line.updateLineLength();\r\n }\r\n }\r\n\r\n updateSnappedPos = () => {\r\n if (this.params.canSnap) {\r\n this.shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n this.shapeAbsolute.setSnappedWithShape(null);\r\n this.shapeAbsolute.setSnappedShapeGroup(null);\r\n\r\n //let distancesToWalls = ShapeHelper.getDistancesToWalls(this);\r\n let distancesToShapes = ShapeHelper.getDistancesToShapes(this);\r\n let distancesToImages = ShapeHelper.getDistancesToImages(this);\r\n //console.log(\"distancesToWalls\", distancesToWalls);\r\n //console.log(\"distancesToShapes\", distancesToShapes);\r\n //console.log(\"distancesToImages\", distancesToImages);\r\n\r\n let snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n let snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n //let snapPossibilitiesToWalls = ShapeHelper.getSnappingPossibilities(distancesToWalls);\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n\r\n //walls\r\n // let [absolutePosToWalls, snappedWithWalls] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToWalls, this.pos);\r\n // if (absolutePosToWalls) {\r\n // this.shapeAbsolute.setAbsolutePos(absolutePosToWalls);\r\n // void snappedWithWalls;\r\n // //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n // }\r\n\r\n //shapes\r\n let [absolutePosToShapes, snappedWithShape] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes, this.pos);\r\n if (absolutePosToShapes) {\r\n this.shapeAbsolute.setAbsolutePos(absolutePosToShapes);\r\n snappedWithShape.shapeAbsolute.setSnappedWithShape(this);\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this, snappedWithShape);\r\n }\r\n\r\n //images\r\n let [absolutePosToImages, snappedWithImage] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages, this.pos);\r\n if (absolutePosToImages) {\r\n this.shapeAbsolute.setAbsolutePos(absolutePosToImages);\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this, snappedWithImage);\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n }\r\n }\r\n\r\n _isMouesOverImage = (mousePos) => {\r\n let scale = workspace.getScale();\r\n let offset = workspace.getOffset();\r\n let realPos = {\r\n x: (this.pos.x * scale) + offset.x,\r\n y: (this.pos.y * scale) + offset.y\r\n };\r\n let realSize = {\r\n width: this.size.width * scale,\r\n height: this.size.height * scale\r\n };\r\n let axis = {\r\n x: realPos.x + (realSize.width / 2),\r\n y: realPos.y + (realSize.height / 2)\r\n }\r\n let points = [\r\n this._getRotatedPoint({x: realPos.x, y: realPos.y}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x + realSize.width, y: realPos.y}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x + realSize.width, y: realPos.y + realSize.height}, axis, this.rotatedDegrees),\r\n this._getRotatedPoint({x: realPos.x, y: realPos.y + realSize.height}, axis, this.rotatedDegrees)\r\n ];\r\n\r\n let maxX = points[0].x;\r\n let maxY = points[0].y;\r\n let minX = points[0].x;\r\n let minY = points[0].y;\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let point = points[i];\r\n if (maxX < point.x)\r\n maxX = point.x;\r\n if (minX > point.x)\r\n minX = point.x;\r\n if (maxY < point.y)\r\n maxY = point.y;\r\n if (minY > point.y)\r\n minY = point.y;\r\n }\r\n\r\n const isHovering = mousePos.x > minX && mousePos.y > minY && mousePos.x < maxX && mousePos.y < maxY;\r\n this._setHovering(isHovering);\r\n\r\n return isHovering;\r\n };\r\n\r\n _getRotatedPoint(point, around, angle) {\r\n let s = Math.sin(angle);\r\n let c = Math.cos(angle);\r\n point.x -= around.x;\r\n point.y -= around.y;\r\n\r\n let newPoint = {\r\n x: point.x * c - point.y * s,\r\n y: point.x * s + point.y * c\r\n };\r\n\r\n return {\r\n x: newPoint.x + around.x,\r\n y: newPoint.y + around.y\r\n };\r\n }\r\n\r\n //private event handles\r\n _onMouseMove(mousePos, e) {\r\n if (e.terminate) {\r\n this._setHovering(false);\r\n return false;\r\n }\r\n if (this._isMouesOverImage(mousePos)) {\r\n if (this.onHover) {\r\n this.onHover(this);\r\n }\r\n if (this._state.mouseDown) {\r\n EventManager.setCursor('move', this, true);\r\n this._moveImage(mousePos);\r\n }\r\n else {\r\n EventManager.setCursor('move', this)\r\n }\r\n return true;\r\n }\r\n //smooth scrolling\r\n if (this._state.mouseDown) {\r\n this._moveImage(mousePos);\r\n }\r\n EventManager.resetCursor(this);\r\n return false;\r\n }\r\n\r\n _onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n EventManager.releaseStealLock(this);\r\n this._state.mouseDown = false;\r\n this._state.mouseDownPosition = null;\r\n this._state.mouseDownSize = null;\r\n }\r\n\r\n _onMouseDown = (mousePos, e) => {\r\n void e;\r\n //if not then handle event with this object\r\n if (this.isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n //Delete this\r\n if (activeButton === SIDEBAR_SLAB_BUTTONS.delete && isShowSlabTool) {\r\n workspace.removeSlabImage(this);\r\n }\r\n\r\n //Move self\r\n if (EventManager.getCursor().indexOf(\"move\") >= 0) {\r\n\r\n this._state.mouseDown = true;\r\n this._state.mouseDownPosition = mousePos;\r\n this._state.mouseDownSize = this.getSize();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //public methods\r\n setPricePerArea = (val) => { this.pricePerArea = _.clone(val) };\r\n setPosition = (value) => { this.pos = value; }\r\n setId = (id) => { this.id = id };\r\n setFeatureId = (featureId) => { this.featureId = featureId };\r\n getIsRotatable = () => { return this._state.isRotatable };\r\n getState = () => { return this._state };\r\n setIsRotatable = (isRotatable) => { this._state.isRotatable = isRotatable};\r\n setRotationDegrees = (rotationDegrees) => {\r\n this.rotatedDegrees = rotationDegrees\r\n }\r\n getCenter = () => {\r\n return {\r\n x: this.size.width / 2,\r\n y: this.size.height / 2\r\n }\r\n }\r\n getCenterPosition = () => {\r\n const center = this.getCenter();\r\n const position = this.getPosition();\r\n\r\n return {\r\n x: position.x + center.x,\r\n y: position.y + center.y\r\n }\r\n }\r\n\r\n setSize = (value) => {\r\n this.size.width = value.width;\r\n this.size.height = value.height;\r\n }\r\n\r\n setInitialSize = (value) => {\r\n this.initialSize.width = value.width;\r\n this.initialSize.height = value.height;\r\n }\r\n\r\n getPosition = () => {\r\n let absolutePos = this.shapeAbsolute.getAbsolutePosition();\r\n\r\n return absolutePos !== null ? absolutePos : this.pos;\r\n };\r\n getSnappedPosition = () => { return this._snappedPos(); };\r\n getPosField = () => {\r\n let position = this.getPosition();\r\n let offset = workspace.getOffset();\r\n const scale = workspace.getScale();\r\n\r\n return {\r\n x: ((position.x + (this.size.width / 2)) * scale) + offset.x,\r\n y: ((position.y + (this.size.height / 2)) * scale) + offset.y\r\n }\r\n };\r\n isHovering = () => {\r\n //console.log(\"this._state.hovering\", this._state.hovering);\r\n return this._state.hovering === true;\r\n };\r\n getAttachedTo = () => { return this.attachedTo; };\r\n getImage = () => { return this.image; };\r\n getSize = () => { return this.size; };\r\n getWidth = () => { return this.getSize().width; };\r\n getHeight = () => { return this.getSize().height; };\r\n getThickness = () => { return this.getSize().thickness; };\r\n getRotation = () => { return this.rotatedDegrees; };\r\n export = () => {\r\n let linesData = [];\r\n const Lines = this.getLines();\r\n for (const lineIndex in Lines) {\r\n if (Lines.hasOwnProperty(lineIndex)) {\r\n linesData.push({lineIndex, ...Lines[lineIndex].exportData()});\r\n }\r\n }\r\n\r\n let exportData = {\r\n pos: this.pos,\r\n id: this.id,\r\n featureId: this.featureId ? this.featureId : this.image.dataset.id, // this.image.dataset.id old support\r\n image: {\r\n src: this.image.currentSrc || $(this.image).attr('src'),\r\n id: this.image.dataset.id,\r\n name: this.image.dataset.name,\r\n nameMetric: this.image.dataset.nameMetric,\r\n width: this.image.width,\r\n height: this.image.height\r\n },\r\n type: this.type,\r\n subType: this.subType,\r\n part: this.part,\r\n size: this.size,\r\n rotatedDegrees: this.rotatedDegrees,\r\n rotatedDegreesSlab: this.rotatedDegreesSlab,\r\n attachedTo: this.attachedTo ? this.attachedTo.id : null,\r\n attachedToParentId: this.attachedTo\r\n ? this.attachedTo.getParent\r\n ? this.attachedTo.getParent().id\r\n : null\r\n : null,\r\n isDisabledInPopup: this.isDisabledInPopup,\r\n pricePerArea: this.pricePerArea,\r\n priority: this.priority,\r\n shapeAbsoluteData: this.shapeAbsolute ? this.shapeAbsolute.export() : null,\r\n linesData: linesData,\r\n };\r\n if (this.attachedTo && this.attachedTo.getLineLength){\r\n exportData.lineLength = config.measureUnit === \"Metric\" ? mmToM(this.attachedTo.getLineLengthMm()) : this.attachedTo.getLineLength();\r\n exportData.partId = this.attachedTo.getParent().partId;\r\n }\r\n if (this.type === \"edge\") {\r\n const navItems = getEdgeFeatures();\r\n let edge = navItems.find(edge => edge.part.dbFeature.id === +this.image.dataset.id);\r\n let unit = edge ? edge.unit : null;\r\n exportData.length = (unit ? unit.toLowerCase() : null) === \"each\"\r\n ? 1\r\n : config.measureUnit === \"Imperial\" ? getEdgeLength(this.attachedTo) : mmToM(getEdgeLength(this.attachedTo));\r\n } else if (this.type === \"backsplash\") {\r\n exportData.length = getBacksplashArea(this.attachedTo.getBacksplashHeight(), this.attachedTo);\r\n } else if (this.type === \"wall\") {\r\n exportData.length = exportData.lineLength;\r\n }\r\n\r\n return exportData;\r\n };\r\n importData = (importData) => {\r\n const skipImportProps = ['image', 'shapeAbsolute', 'linesData'];\r\n Object.keys(importData).forEach(key => {\r\n if (importData.hasOwnProperty(key)) {\r\n if (!skipImportProps.includes(key)) {\r\n this[key] = importData[key];\r\n }\r\n }\r\n });\r\n if (importData.shapeAbsoluteData) {\r\n this.shapeAbsolute.import(importData.shapeAbsoluteData);\r\n }\r\n if (importData.linesData) {\r\n for (const lineData of importData.linesData) {\r\n const line = this.lines.find(line => line.lineIndex === +lineData.lineIndex);\r\n if (line) {\r\n line.importData(lineData);\r\n }\r\n }\r\n }\r\n }\r\n //todo sqft-react is this needed?\r\n // generateImage = (value, shapes) => {\r\n // let domImg = document.createElement('img');\r\n // domImg.crossOrigin = \"Anonymous\";\r\n // let $img = $(domImg);\r\n // $img.css({\r\n // position: 'absolute',\r\n // width: '1px',\r\n // height: '1px'\r\n // });\r\n // $img.attr({\r\n // 'data-id': value.image.id,\r\n // 'data-name': value.image.name,\r\n // });\r\n // let attachedTo = null;\r\n // if (value.attachedTo) {\r\n // for (let i = 0; i < shapes.length; i++) {\r\n // let shape = shapes[i];\r\n // if (shape.getLines && !attachedTo) {\r\n // let lines = shape.getLines();\r\n // for(let n = 0; n < lines.length; n++) {\r\n // let line = lines[n];\r\n // if ( line.id == value.attachedTo && !attachedTo ) {\r\n // attachedTo = line;\r\n // }\r\n // }\r\n // }\r\n // }\r\n // }\r\n // $img.appendTo($('body'));\r\n // $img.attr('src', (config.isKiosk || value.image.src.includes('data:image') ? '' : '/api/SqFtCalc/GetImage?url=') + value.image.src);\r\n // return {\r\n // image: domImg,\r\n // attachedTo: this.attachedTo\r\n // };\r\n // };\r\n getTotalInches = function() {\r\n return 0;\r\n };\r\n\r\n /**\r\n * Public functions\r\n * @param flipDirection\r\n */\r\n flip = function(flipDirection) {\r\n void flipDirection\r\n };\r\n rotate = (degrees, direction) => {\r\n //todo slab rotation QCDES-1358\r\n if (this.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n return\r\n }\r\n const isSlabMode = store.getState().sqftSlabState.isShowSlabTool;\r\n isSlabMode ? this.rotatedDegreesSlab += degrees : this.rotatedDegrees += degrees;\r\n (this.rotatedDegrees === 360) && (this.rotatedDegrees = 0);\r\n (this.rotatedDegreesSlab === 360) && (this.rotatedDegreesSlab = 0);\r\n\r\n direction = direction || this.Direction.Right;\r\n let angle = (degrees * Math.PI / 180);\r\n if (direction === this.Direction.LEFT)\r\n angle *= -1;\r\n if (this.shapeRotatable) {\r\n this.shapeRotatable.rotateShapeRotatablePoints(this.getCenter(), angle, isSlabMode);\r\n }\r\n this.rotateBorderPoints(angle);\r\n };\r\n rotateBorderPoints = (angle) => {\r\n const center = this.getCenter();\r\n for (const linePoint of this.getLinePoints()) {\r\n linePoint.rotate(center, angle);\r\n }\r\n }\r\n init = (position, image, size, attachedTo, isHidden) => {\r\n this.setPosition(position);\r\n this._setImage(image);\r\n this.setSize(size);\r\n this.setInitialSize(size);\r\n this._setAttachedTo(attachedTo);\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n this._setFillColor(getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255), 0.3);\r\n if (isHidden) {\r\n this.isHidden = true;\r\n } else {\r\n this.initEvents();\r\n //this.initResizablePoint(position);\r\n }\r\n this.lines = this.createLines();\r\n //hide lines for slab images\r\n if (this.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n this.deregisterLineEvents();\r\n }\r\n\r\n this.renderMovableImage = new RenderMovableImage(this);\r\n };\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this._onMouseMove,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this._onMouseDown,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this._onMouseUp,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this._render,\r\n this,\r\n this.priority ? this.priority : EventManager.priorities.IMAGE - (this.attachedTo ? 1 : 0)\r\n );\r\n };\r\n\r\n initResizablePoint = () => {\r\n let pointParams = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isVisibleOnHover: true,\r\n moveCallback: (mousePos, movable) => {\r\n //const movablePoint = movable.parent;\r\n const movableImage = movable.grandParent;\r\n //const size = movableImage.getSize();\r\n const state = movableImage.getState();\r\n let scale = workspace.getScale();\r\n let xDiff = (movable.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (movable.state.mouseDownPosition.y - mousePos.y) / scale;\r\n // const newWidth = movable.state.mouseDownSize.width - xDiff;\r\n // const newHeight = movable.state.mouseDownSize.height - yDiff;\r\n const newWidth = (movable.state.mouseDownSize.width - xDiff + movable.state.mouseDownSize.height - yDiff) / 2;\r\n const newHeight = (movable.state.mouseDownSize.height - yDiff + movable.state.mouseDownSize.width - xDiff) / 2;\r\n\r\n if (newHeight >= state.minimumHeight && newWidth >= state.minimumWidth ) {\r\n movableImage.setSize({\r\n width: newWidth,\r\n height: newHeight\r\n });\r\n movable.posX = newWidth;\r\n movable.posY = newHeight;\r\n }\r\n },\r\n mouseUpCallback: (mousePos, movable) => {\r\n movable.state.mouseDownSize = null\r\n },\r\n mouseDownCallback: (mousePos, movable) => {\r\n const movableImage = movable.grandParent;\r\n movable.state.mouseDownSize = {...movableImage.getSize()};\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.resize\r\n };\r\n //const position = this.getPosition();\r\n const size = this.getSize();\r\n const pointPositionX = size.width;\r\n const pointPositionY = size.height;\r\n this.resizablePoint = new PointV2(pointPositionX, pointPositionY, this, pointParams, pointDesign);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.deregisterLineEvents()\r\n };\r\n\r\n deregisterLineEvents = () => {\r\n const lines = this.getLines();\r\n for (const line of lines) {\r\n line.deregisterEvents();\r\n }\r\n };\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n this.reInitLineEvents();\r\n }\r\n };\r\n\r\n reInitLineEvents = () => {\r\n //hide lines for slab images\r\n if (this.type !== MOVABLE_IMAGE_TYPES.slabImage) {\r\n for (const line of this.getLines()) {\r\n line.reInitEvents();\r\n }\r\n }\r\n };\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n for (const line of this.getLines()) {\r\n line.destroy();\r\n }\r\n if (this.resizablePoint) {\r\n this.resizablePoint.destroy();\r\n }\r\n }\r\n };\r\n\r\n stealCursor = function(who) {\r\n if (this === who) {\r\n EventManager.resetCursor(this);\r\n }\r\n };\r\n\r\n resetCursor = function(who) {\r\n void who;\r\n EventManager.resetCursor(this);\r\n };\r\n\r\n // getMidPoint(from, to) {\r\n // return {\r\n // x: from.x + (to.x - from.x)/2,\r\n // y: from.y + (to.y - from.y)/2\r\n // };\r\n // }\r\n\r\n isIE = function() {\r\n return (/Trident/i).test(window.navigator.appVersion);\r\n };\r\n\r\n getSrc = function(img) {\r\n if (img) {\r\n let src = img.getAttribute('src');\r\n if (src) {\r\n return src;\r\n }\r\n src = img.getAttribute(\"style\");\r\n if (src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n };\r\n\r\n isSVG = (img) => {\r\n return (/data:image\\/svg\\+xml;base64,/).test(this.getSrc(img));\r\n };\r\n\r\n getLinePointsPointField = () => {\r\n const points = this.getLines().map(line => line.from);\r\n return points.map(point => getPointField(point.x, point.y, this))\r\n }\r\n\r\n getPointsPointField = () => {\r\n return this.getLinePointsPointField()\r\n }\r\n\r\n getBorderPointsOnWorkspace = () => {\r\n const posField = this.getPosition();\r\n const points = this.getLines().map(line => line.from);\r\n return points.map(point => {\r\n return {\r\n x: posField.x + point.x,\r\n y: posField.y + point.y\r\n }\r\n })\r\n }\r\n\r\n getPointsPosOnWorkspace = () => {\r\n return this.getBorderPointsOnWorkspace();\r\n };\r\n\r\n createBorderPointsPosition = () => {\r\n return [\r\n getImagePoint(0, 0, this),\r\n getImagePoint(this.size.width, 0, this),\r\n getImagePoint(this.size.width, this.size.height, this),\r\n getImagePoint(0, this.size.height, this),\r\n ]\r\n\r\n // return [\r\n // new point(0, 0, this),\r\n // new point(this.size.width, 0, this),\r\n // new point(this.size.width, this.size.height, this),\r\n // new point(0, this.size.height, this),\r\n // ]\r\n }\r\n\r\n getLines = () => {\r\n return this.lines\r\n }\r\n\r\n getPrevLine = (line) => {\r\n const index = this.lines.indexOf(line);\r\n if (index === -1) return null; // Line not found\r\n\r\n return this.lines[(index - 1 + this.lines.length) % this.lines.length]; // Loop back if it's the first line\r\n }\r\n\r\n getNextLine = (line) => {\r\n const index = this.lines.indexOf(line);\r\n if (index === -1) return null; // Line not found\r\n\r\n return this.lines[(index + 1) % this.lines.length]; // Loop back if it's the last line\r\n }\r\n\r\n getLinePoints = () => {\r\n return this.lines.map(line => line.from)\r\n }\r\n\r\n revealMeasurementsInsideShape = () => {\r\n for (const imageLine of this.getLines()) {\r\n imageLine.measurementInsideShape.revealEvents();\r\n }\r\n }\r\n\r\n hideMeasurementsInsideShape = () => {\r\n for (const imageLine of this.getLines()) {\r\n imageLine.measurementInsideShape.hideEvents();\r\n }\r\n }\r\n\r\n isAnyLineHovering = () => {\r\n const lines = this.getLines();\r\n for (const line of lines) {\r\n if (line.isHovering()) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n createLines = () => {\r\n return createImageLinesFromPoints(this.createBorderPointsPosition(), this);\r\n }\r\n\r\n getOffset = () => {\r\n const scale = config.scale;\r\n const workspacePos = workspace.getOffset();\r\n let _pos = this.getPosition();\r\n if (config.workspace.snapToGrid) {\r\n _pos = this.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n };\r\n\r\n shouldRenderMeasurementsInsideTheShape = () => {\r\n return APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE.includes(this.subType)\r\n && !hardCodeIsCaesarStone(); //CAES-547 remove measurements for the CaesarStone\r\n }\r\n\r\n getOuterShape = () => {\r\n const centerPos = this.getCenter();\r\n const centerPosOnField = getPointField(centerPos.x, centerPos.y, this);\r\n const shapes = workspace.getShapes(true);\r\n //let countInsidePoints;\r\n for (let shape of shapes) {\r\n //countInsidePoints = 0;\r\n if (shape instanceof sqftShape) {\r\n // for (let borderPoint of borderPoints) {\r\n // if (isPointInsideShape(borderPoint, shape, true)) {\r\n // countInsidePoints += 1\r\n // }\r\n // }\r\n const isCenterInsideShape = isPointInsideShape(centerPosOnField, shape, true);\r\n if (isCenterInsideShape) {\r\n return shape\r\n }\r\n // if (countInsidePoints >= 2) {\r\n // return shape\r\n // }\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n _render = (ctx) => {\r\n this.renderMovableImage.render(ctx);\r\n }\r\n}\r\n\r\nexport default MovableImage;\r\n","import * as uuid from \"uuid\";\r\nimport Movable from \"../workspace/mixin/movable\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport ModelCorePoint from \"../workspace/textBox/model/modelCorePoint\";\r\nimport workspace from \"../workspace\";\r\nimport {getPointField, getPointOnWorkspace} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport DrawImage from \"../workspace/textBox/draw/drawImage\";\r\nimport COLOR_THEMES, {COLOR} from \"../../store/colorThemes\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\n\r\nexport const CORE_POINT_LAYOUTS = {\r\n black: 'black',\r\n white: 'white',\r\n green: 'green',\r\n ear: 'ear',\r\n resize: 'resize',\r\n}\r\n\r\nexport default class PointV2 {\r\n _modelCorePoint;\r\n id;\r\n parent;\r\n design = {\r\n radius: 12,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.white\r\n };\r\n params = {\r\n priority: EventManager.priorities.POINT,\r\n movable: false,\r\n isCentered: false,\r\n\r\n isCenteredByY: false,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false,\r\n shouldRotateShape: false,\r\n };\r\n\r\n constructor(x, y, parent, pointPrams = {}, design = {}) {\r\n this.params = Object.assign(this.params, pointPrams);\r\n this.design = Object.assign(this.design, design);\r\n let mixins = {\r\n movable : this.params.movable\r\n ? new Movable(x,\r\n y,\r\n this.design.radius,\r\n this.design.radius,\r\n this.params.priority,\r\n this,\r\n parent,\r\n this.params.moveCallback,\r\n this.params.mouseUpCallback,\r\n this.params.mouseDownCallback\r\n )\r\n : null,\r\n };\r\n this._modelCorePoint = new ModelCorePoint(x, y, parent, mixins);\r\n this.parent = parent;\r\n this.id = uuid.v4();\r\n this.initEvents();\r\n }\r\n\r\n get x() {\r\n return this._modelCorePoint.getPosX();\r\n }\r\n\r\n get y() {\r\n return this._modelCorePoint.getPosY();\r\n }\r\n\r\n set x(value) {\r\n return this._modelCorePoint.setPosX(value);\r\n }\r\n\r\n set y(value) {\r\n return this._modelCorePoint.setPosY(value);\r\n }\r\n\r\n get modelCorePoint() {\r\n return this._modelCorePoint;\r\n }\r\n\r\n set modelCorePoint(value) {\r\n this._modelCorePoint = value;\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n x: this.x,\r\n y: this.y,\r\n design: this.design,\r\n params: this.params,\r\n }\r\n }\r\n\r\n importData = (pointData) => {\r\n this.id = pointData.id;\r\n this.x = pointData.x;\r\n this.y = pointData.y;\r\n this.design = pointData.design;\r\n this.params = pointData.params;\r\n }\r\n\r\n getPointField = () => {\r\n return getPointField(this.modelCorePoint.getPosX(), this.modelCorePoint.getPosY(), this.modelCorePoint.parent);\r\n }\r\n\r\n getPointPosOnWorkspace = () => {\r\n return getPointOnWorkspace(this.modelCorePoint.getPosX(), this.modelCorePoint.getPosY(), this.modelCorePoint.parent);\r\n };\r\n\r\n getParent = () => {\r\n return this.parent;\r\n }\r\n\r\n getPosition = () => {\r\n return {\r\n x: this.modelCorePoint.getPosX(),\r\n y: this.modelCorePoint.getPosY()\r\n }\r\n }\r\n\r\n setPosition(value) {\r\n this.modelCorePoint.setPosX(value.x);\r\n this.modelCorePoint.setPosY(value.y);\r\n }\r\n\r\n rotate(origin, angle, isSlabMode) {\r\n this._modelCorePoint.rotate(origin, angle, isSlabMode);\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n }\r\n\r\n onMouseMove() {\r\n }\r\n\r\n onMouseUp() {\r\n }\r\n\r\n onMouseDown() {\r\n }\r\n\r\n delete() {\r\n this.deregisterEvents();\r\n }\r\n\r\n destroy() {\r\n this.delete();\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this.modelCorePoint.mixins.movable);\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n if (this.modelCorePoint.mixins.movable) {\r\n this.modelCorePoint.mixins.movable.reInitEvents();\r\n }\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n // display only hovered or when mouse is down\r\n if (this.params.isVisibleOnHover && !this.isHoveredWithParent() && !this.isMouseDownWithParent()) {\r\n return\r\n }\r\n\r\n let pointField = this.getPointField();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n switch (this.design.layout) {\r\n case CORE_POINT_LAYOUTS.black: {\r\n let arcRadius = 0;\r\n if (this.isHoveredWithParent()) {\r\n arcRadius = this.design.radius\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = this.design.radius / 2\r\n ctx.fillStyle = COLOR.white;\r\n }\r\n\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n arcRadius,\r\n 0,\r\n 2 * Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.white: {\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius,\r\n 0,\r\n Math.PI,\r\n false\r\n );\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.stroke();\r\n ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.green: {\r\n let arcRadius = 0;\r\n if (this.modelCorePoint.mixins.movable\r\n && this.modelCorePoint.mixins.movable.state.hovering\r\n ) {\r\n arcRadius = this.design.radius + 5;\r\n ctx.strokeStyle = COLOR.blackLight;\r\n ctx.fillStyle = COLOR.blackLight;\r\n } else {\r\n arcRadius = this.design.radius;\r\n ctx.strokeStyle = 'rgba(159,197,34,0.47)';\r\n ctx.fillStyle = 'rgba(159,197,34, 1)';\r\n }\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n arcRadius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.lineWidth = 2;\r\n ctx.fill();\r\n\r\n // RenderFigures.drawRotatedArrow(ctx,\r\n // pointField.x - 20, pointField.y,\r\n // pointField.x, pointField.y - 20,\r\n // pointField.x - 20, pointField.y - 20,\r\n // 10\r\n // )\r\n\r\n ctx.stroke();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.ear: {\r\n let subLineWidth = 10;\r\n let subLineHeight = this.design.radius;\r\n ctx.moveTo(pointField.x, pointField.y - subLineHeight);\r\n ctx.lineTo(pointField.x + subLineWidth, pointField.y - subLineHeight);\r\n RenderFigures.renderOval(ctx, this.design.radius * 2 , this.design.radius * 2, pointField.x+ subLineWidth, pointField.y);\r\n ctx.moveTo(pointField.x + subLineWidth, pointField.y + subLineHeight);\r\n ctx.lineTo(pointField.x, pointField.y + subLineHeight);\r\n\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = this.design.lineWidth;\r\n ctx.stroke();\r\n //ctx.fill();\r\n break;\r\n }\r\n case CORE_POINT_LAYOUTS.resize: {\r\n //outside circle\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.fillStyle = '#ffffff';\r\n ctx.lineWidth = this.design.lineWidth + 1;\r\n ctx.stroke();\r\n ctx.fill();\r\n\r\n //inside circle\r\n ctx.beginPath();\r\n ctx.arc(\r\n pointField.x,\r\n pointField.y,\r\n this.design.radius - 3,\r\n 0,\r\n Math.PI * 2,\r\n false\r\n );\r\n\r\n ctx.fillStyle = COLOR_THEMES[config.activeTheme].primary;\r\n ctx.lineWidth = this.design.lineWidth + 1;\r\n ctx.fill();\r\n\r\n // arrows\r\n DrawImage.renderImage('resizeArrows', ctx,\r\n pointField.x - this.design.radius / 2 + 1.5,\r\n pointField.y - this.design.radius / 2 + 1.5,\r\n 2.5,\r\n 2.5,\r\n true,\r\n true\r\n );\r\n break;\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n\r\n isHoveredWithParent() {\r\n const isParentMovableHovered = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.hovering\r\n : false;\r\n const isParentHovered = this.modelCorePoint.parent && this.modelCorePoint.parent.state\r\n ? this.modelCorePoint.parent.state.hovering\r\n : false;\r\n const isParentChildrenHovered = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.hoveringWithChildren\r\n : false;\r\n const isHovered = this.modelCorePoint.mixins.movable\r\n ? this.modelCorePoint.mixins.movable.state.hovering\r\n : false;\r\n\r\n return isParentHovered || isParentMovableHovered || isParentChildrenHovered || isHovered\r\n }\r\n\r\n isMouseDownWithParent() {\r\n const isParentMouseDown = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.mouseDown\r\n : false;\r\n const isParentChildrenMouseDown = this.modelCorePoint.parent.mixin\r\n ? this.modelCorePoint.parent.mixin.movable.state.mouseDownWithChildren\r\n : false;\r\n const isMouseDown = this.modelCorePoint.mixins.movable\r\n ? this.modelCorePoint.mixins.movable.state.mouseDown\r\n : false;\r\n\r\n return isParentMouseDown || isParentChildrenMouseDown || isMouseDown\r\n }\r\n}\r\n","import {\r\n getFontsizeSmall,\r\n getMidPoint,\r\n getPointDistance, getPointField, getPointOnTheLine,\r\n} from \"../../../helpers/sqftHelper\";\r\nimport ShapeHelper from \"../../../helpers/shapeHelper\";\r\n//import COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport COLOR_THEMES from \"../store/colorThemes\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\n//import workspace from \"../core/workspace\";\r\nimport {\r\n RENDER_TEMPLATES,\r\n SIDEBAR_BUTTONS_MENU,\r\n} from \"../../../constants\";\r\nimport {getDistanceLength, getLineCrownMoldingPoints} from \"./lineHelper\";\r\nimport RenderCabinets from \"./renderCabinets\";\r\nimport RenderFigures from \"./renderFigures\";\r\nimport {COLORS as Colors} from \"../../../../../colorThemes\";\r\nimport store from \"../../../../../store\";\r\nimport config from \"../store/sqftConfig\";\r\nimport workspace from \"../core/workspace\";\r\n\r\nexport default class RenderParts {\r\n static drawMeasurementAroundPoints = (ctx, points, minLength = 3) => {\r\n points.forEach((point, index) => {\r\n const nextPoint = points[index + 1] ? points[index + 1] : points[0];\r\n const midPoint = getMidPoint(point, nextPoint);\r\n const distance = getPointDistance(point, nextPoint);\r\n const scale = workspace.getScale();\r\n if (distance / scale > minLength) {\r\n //const length = addDecimalToLength(measureDistanceToInches(distance / sqftConfig.scale));\r\n const length = getDistanceLength(distance / sqftConfig.scale);\r\n //debugger // eslint-disable-line no-debugger\r\n const lineOrientation = ShapeHelper.getLineOrientation(point, nextPoint);\r\n const mText = ctx.measureText(length);\r\n let fontSize = getFontsizeSmall(),\r\n font = (fontSize).toString() + \"px \" + sqftConfig.activeFontBold,\r\n xMargin = 0,\r\n yMargin = 0,\r\n pos = midPoint\r\n ;\r\n\r\n //todo change index logic\r\n switch (lineOrientation) {\r\n case \"horizontal\": {\r\n yMargin = index === 0\r\n ? -fontSize + sqftConfig.scale / sqftConfig.defaultScale\r\n : +fontSize + sqftConfig.scale / sqftConfig.defaultScale + 10;\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMargin = index === 1 ? mText.width + 5 : -mText.width;\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n pos.x += xMargin;\r\n pos.y += yMargin;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\"; //todo\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.wrapText(length.toString(), pos.x, pos.y, mText.width, font);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n })\r\n }\r\n\r\n static drawShapeBorders = (ctx, staticOffset, strokeTemplate, fillTemplate, shape) => {\r\n if (sqftConfig.isDevMode()) {\r\n RenderParts.renderDevMode(ctx, shape);\r\n }\r\n let lines = shape.getLines();\r\n const reduxState = store.getState();\r\n const isShowSlabTool = reduxState.sqftSlabState.isShowSlabTool;\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n lines[i].render(ctx, i > 0);\r\n lines[i].staticOffset = null;\r\n }\r\n\r\n //set fillStyle and strokeStyle colors\r\n const isShapeHovering = shape.isHoveringOnlyShape();\r\n let shapeColorSet;\r\n\r\n function renderColorSetTemplate(shapeColorSet, isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = shapeColorSet.primary_border;\r\n ctx.fillStyle = shapeColorSet.primary_hover;\r\n } else {\r\n ctx.strokeStyle = shapeColorSet.primary_border;\r\n ctx.fillStyle = shapeColorSet.primary;\r\n }\r\n }\r\n\r\n function renderFilledPrimaryTemplate(isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_transparent;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent;\r\n }\r\n }\r\n\r\n function renderFilledActiveTemplate(isShapeHovering) {\r\n if (isShapeHovering) {// && workspace.getHoverShape() === shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_transparent;\r\n }\r\n }\r\n\r\n switch (fillTemplate) {\r\n case RENDER_TEMPLATES.accordingToFeature:\r\n shapeColorSet = shape.getColorSet();\r\n if (shapeColorSet) {\r\n renderColorSetTemplate(shapeColorSet, isShapeHovering)\r\n } else {\r\n renderFilledPrimaryTemplate(isShapeHovering)\r\n }\r\n break;\r\n case RENDER_TEMPLATES.filledPrimary:\r\n renderFilledPrimaryTemplate(isShapeHovering)\r\n break;\r\n case RENDER_TEMPLATES.filledActive:\r\n renderFilledActiveTemplate(isShapeHovering)\r\n break;\r\n }\r\n\r\n //set hover style colors\r\n if (isShapeHovering) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n && !isShowSlabTool\r\n ) {\r\n ctx.fillStyle = Colors.red\r\n }\r\n }\r\n\r\n //set lineWidth\r\n switch (strokeTemplate) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n ctx.fill();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n }\r\n\r\n static getBoundingBoxFromShape = (shape) => {\r\n let minX = Infinity;\r\n let minY = Infinity;\r\n let maxX = -Infinity;\r\n let maxY = -Infinity;\r\n\r\n const lines = shape.getLines();\r\n for (let line of lines) {\r\n const renderTo = line.calculateRenderPosition(line.to);\r\n const renderFrom = line.calculateRenderPosition(line.from);\r\n\r\n minX = Math.min(minX, renderFrom.x, renderTo.x);\r\n minY = Math.min(minY, renderFrom.y, renderTo.y);\r\n maxX = Math.max(maxX, renderFrom.x, renderTo.x);\r\n maxY = Math.max(maxY, renderFrom.y, renderTo.y);\r\n }\r\n\r\n return {\r\n x: minX,\r\n y: minY,\r\n width: maxX - minX,\r\n height: maxY - minY\r\n };\r\n };\r\n\r\n /**\r\n * Функция для рисования прямоугольника с полосами под углом.\r\n *\r\n * @param ctx\r\n * @param {Number} x - координата x верхнего левого угла прямоугольника\r\n * @param {Number} y - координата y верхнего левого угла прямоугольника\r\n * @param {Number} width - ширина прямоугольника\r\n * @param {Number} height - высота прямоугольника\r\n * @param {Number} lineWidth - ширина полосы\r\n * @param {Number} angle - угол наклона полос в градусах\r\n * @param {String} color1 - первый цвет\r\n * @param {String} color2 - второй цвет\r\n */\r\n static drawStripedRectangle = (ctx,\r\n x,\r\n y,\r\n width,\r\n height,\r\n lineWidth= 3 * 3.5,\r\n angle= 3 * 1000,\r\n color1 = \"white\",\r\n color2= \"#E6E4E6\") => {\r\n //const scale = sqftConfig.scale;\r\n //const lineWidth = 2 * scale;\r\n //const lineGap = 5 * scale;\r\n const lineGap = 6 * 3.5;\r\n\r\n ctx.save();\r\n\r\n // Define clipping area (visible rectangle)\r\n ctx.beginPath();\r\n ctx.rect(x, y, width, height);\r\n ctx.fillStyle = color1;\r\n ctx.fill();\r\n ctx.clip();\r\n\r\n // Draw diagonal lines across the entire canvas\r\n ctx.beginPath();\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeStyle = color2;\r\n\r\n // The pattern should cover the entire canvas\r\n for (let i = -ctx.canvas.width * 2; i < ctx.canvas.width; i += lineGap) {\r\n ctx.moveTo(i, -ctx.canvas.height);\r\n ctx.lineTo(i + lineGap + angle, ctx.canvas.height * 2);\r\n }\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n\r\n /**\r\n *\r\n * @param ctx\r\n * @param {Number} x - координата x верхнего левого угла прямоугольника\r\n * @param {Number} y - координата y верхнего левого угла прямоугольника\r\n * @param {Number} width - ширина прямоугольника\r\n * @param {Number} height - высота прямоугольника\r\n */\r\n static fillStripedRectangle = (ctx, x, y, width, height) => {\r\n let gradient = ctx.createLinearGradient(x, y, width, height);\r\n gradient.addColorStop(0.25, '#868d91');\r\n gradient.addColorStop(0.25, '#7b8185');\r\n gradient.addColorStop(0.5, '#7b8185');\r\n gradient.addColorStop(0.5, '#868d91');\r\n gradient.addColorStop(0.75, '#868d91');\r\n gradient.addColorStop(0.75, '#7b8185');\r\n gradient.addColorStop(1, '#7b8185');\r\n\r\n // Заливка шейпа градиентом\r\n ctx.fillStyle = gradient;\r\n ctx.fill();\r\n }\r\n\r\n static drawDiagonalStripesV2 = (ctx, shape, lineWidth = 2, rotationAngle = -Math.PI / 4) => {\r\n const bbox = RenderParts.getBoundingBoxFromShape(shape);\r\n void rotationAngle;\r\n void lineWidth;\r\n\r\n ctx.save();\r\n let lines = shape.getLines();\r\n\r\n //draw border\r\n ctx.beginPath();\r\n ctx.rect(bbox.x, bbox.y, bbox.width, bbox.height);\r\n ctx.lineWidth = 2;\r\n ctx.stroke();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n //lines[i].render(ctx, i > 0);\r\n }\r\n const pointPos = lines[1].calculateRenderPosition(lines[1].to);\r\n\r\n RenderParts.fillStripedRectangle(ctx, bbox.x, bbox.y, pointPos.x, pointPos.y);\r\n ctx.closePath();\r\n\r\n ctx.restore();\r\n };\r\n\r\n static drawDiagonalStripes = (ctx, shape, lineWidth = 2, rotationAngle = -Math.PI / 4) => {\r\n const bbox = RenderParts.getBoundingBoxFromShape(shape);\r\n // const lightGray = '#80848a';\r\n // const darkGray = '#787c82';\r\n const lightGray = '#5a5c61';\r\n const darkGray = '#54575b';\r\n void rotationAngle;\r\n\r\n // ctx.save();\r\n // let lines = shape.getLines();\r\n // // ctx.beginPath();\r\n // // ctx.rect(bbox.x, bbox.y, bbox.width, bbox.height);\r\n // ctx.beginPath();\r\n // for (let i = 0; i < lines.length; i++) {\r\n // lines[i].render(ctx, i > 0);\r\n // }\r\n // ctx.closePath();\r\n // ctx.clip();\r\n //\r\n // ctx.lineWidth = 2;\r\n // ctx.stroke();\r\n //\r\n // for (let i = 0; i < lines.length; i++) {\r\n // lines[i].render(ctx, i > 0);\r\n // }\r\n // ctx.closePath();\r\n // ctx.clip();\r\n\r\n const scale = config.scale;\r\n const scaledLineWidth = lineWidth * scale;\r\n\r\n RenderParts.drawStripedRectangle(\r\n ctx,\r\n bbox.x,\r\n bbox.y,\r\n bbox.width,\r\n bbox.height,\r\n scaledLineWidth,\r\n 3 * 1000,\r\n lightGray,\r\n darkGray\r\n );\r\n\r\n ctx.restore();\r\n };\r\n\r\n\r\n static drawHoveredBorders = (ctx,\r\n staticOffset,\r\n shape,\r\n style = {\r\n lineWidth: 3,\r\n strokeStyle: COLOR_THEMES[sqftConfig.activeTheme].primary_hover,\r\n shadowBlur: 4,\r\n extendHoveredLine: 0\r\n }\r\n ) => {\r\n let lines = shape.getLines();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].getState().isHovering) {\r\n ctx.save();\r\n ctx.beginPath();\r\n lines[i].staticOffset = staticOffset;\r\n ctx.lineWidth = style.lineWidth;\r\n ctx.shadowColor = ctx.strokeStyle = style.strokeStyle;\r\n ctx.shadowBlur = style.shadowBlur;\r\n\r\n let pointTo = {...lines[i].to};\r\n let pointFrom = {...lines[i].from};\r\n if (style.extendHoveredLine > 0) {\r\n pointFrom = {pos: getPointOnTheLine(lines[i].from, lines[i].to, 5)};\r\n pointTo = {pos: getPointOnTheLine(lines[i].to, lines[i].from, 5)};\r\n }\r\n const renderTo = lines[i].calculateRenderPosition(pointTo);\r\n const renderFrom = lines[i].calculateRenderPosition(pointFrom);\r\n\r\n ctx.moveTo(renderTo.x, renderTo.y);\r\n ctx.lineTo(renderFrom.x, renderFrom.y);\r\n lines[i].staticOffset = null;\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n\r\n static drawSpacerBorders = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_transparent8;\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n if (i === 0) {\r\n const renderFrom = lines[i].calculateRenderPosition(lines[i].from);\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n }\r\n const renderTo = lines[i].calculateRenderPosition(lines[i].to);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n\r\n lines[i].staticOffset = null;\r\n }\r\n\r\n //set hover style colors\r\n if (shape.isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.fillStyle = Colors.red\r\n }\r\n }\r\n\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n\r\n static drawShapeCrownMoldings = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n //ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n if (lines[i].getState().attachedItems.isWithCrownMolding) {\r\n const crownMoldingPoints = getLineCrownMoldingPoints(lines[i]);\r\n ctx.save();\r\n if (lines[i].isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.strokeStyle = Colors.red\r\n }\r\n }\r\n RenderCabinets.renderCrownMolding(ctx, crownMoldingPoints);\r\n ctx.restore();\r\n }\r\n lines[i].staticOffset = null;\r\n }\r\n }\r\n\r\n static drawShapeEndCap = (ctx, staticOffset, shape) => {\r\n let lines = shape.getLines();\r\n //ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n const lineState = lines[i].getState();\r\n if (lineState.attachedItems && lineState.attachedItems.isWithEndCap) {\r\n ctx.save();\r\n if (lines[i].isHovering()) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n ctx.strokeStyle = Colors.red\r\n }\r\n }\r\n RenderCabinets.renderEndCap(ctx, lines[i]);\r\n ctx.restore();\r\n }\r\n lines[i].staticOffset = null;\r\n }\r\n }\r\n\r\n static drawHandles = (ctx, shape) => {\r\n let lines = shape.getLines();\r\n for (let i = 0; i < lines.length; i++) {\r\n if (lines[i].isWithHandle()) {\r\n const midPoint = getMidPoint(lines[i].from, lines[i].to);\r\n const renderPosition = getPointField(midPoint.x, midPoint.y, shape);\r\n RenderFigures.renderHandle(ctx, renderPosition);\r\n }\r\n }\r\n }\r\n\r\n static renderDevMode = (ctx, shape) => {\r\n // render __intersectionPoints\r\n const intersectionPoints = shape.shapeAbsolute.getIntersectionPoints()\r\n if (intersectionPoints) {\r\n for (let i in intersectionPoints) {\r\n intersectionPoints[i].forEach(intPoint => {\r\n ctx.beginPath();\r\n ctx.arc(intPoint.x, intPoint.y, 20, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n })\r\n }\r\n }\r\n // render slabPos\r\n ctx.beginPath();\r\n let pf = getPointField(shape.slabPos.x, shape.slabPos.y);\r\n ctx.arc(pf.x, pf.y, 10, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n // render absolutePos\r\n const absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n if (absolutePos) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = '#a02f2f';\r\n pf = getPointField(absolutePos.x, absolutePos.y)\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n}\r\n","import store from \"../../../../../store\";\r\nimport workspace from \"../core/workspace\";\r\nimport {setSqftCroppedSlabImages} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport sqftEventManager from \"./sqftEventManager\";\r\nimport MovableImage from \"../core/shapes/movableImage\";\r\nimport {APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE, SHAPE_TYPE} from \"../../../constants\";\r\n\r\nconst sqftImageManager = {\r\n getAppliances: function() {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => shp.type === SHAPE_TYPE.appliances);\r\n },\r\n getSlabImages: function() {\r\n const state = store.getState();\r\n return state.sqftSlabState.croppedSlabImages;\r\n },\r\n getAppliancesThatShouldRenderMeasurementsInsideTheShape: function() {\r\n const shapes = workspace.getShapes();\r\n return shapes.filter(shp => shp.type === SHAPE_TYPE.appliances\r\n && APPLIANCES_THAT_SHOULD_RENDER_MEASUREMENTS_INSIDE_THE_SHAPE.includes(shp.subType));\r\n },\r\n hideSlabImages: function() {\r\n let movableImages = store.getState().sqftSlabState.croppedSlabImages;\r\n for (let i = movableImages.length - 1; i >= 0; i--) {\r\n movableImages[i].deregisterEvents();\r\n }\r\n },\r\n restoreSlabImages: function() {\r\n let movableImages = store.getState().sqftSlabState.croppedSlabImages;\r\n for (let i = movableImages.length - 1; i >= 0; i--) {\r\n movableImages[i].reInitEvents();\r\n }\r\n },\r\n getExportedSlabImages: function () {\r\n let slabState = store.getState().sqftSlabState;\r\n let croppedImages = slabState.croppedSlabImages;\r\n let exportData = [];\r\n for(let croppedImage of croppedImages) {\r\n exportData.push(croppedImage.export());\r\n }\r\n\r\n return exportData;\r\n },\r\n\r\n removeAllSlabImages: function () {\r\n const state = store.getState();\r\n let slabImages = state.sqftSlabState.croppedSlabImages;\r\n if (slabImages.length > 0) {\r\n store.dispatch(setSqftCroppedSlabImages([]));\r\n }\r\n },\r\n\r\n /**\r\n * @param {[]} data\r\n */\r\n importSlabImages: function (data) {\r\n if (data.length === 0) {\r\n sqftImageManager.removeAllSlabImages();\r\n return\r\n }\r\n let workspaceImages = [];\r\n for(let movableImageData of data) {\r\n let image = new Image();\r\n image.src = movableImageData.image.src;\r\n\r\n let workspaceImage = workspace.addImage(\r\n image,\r\n movableImageData.size.width,\r\n movableImageData.size.height,\r\n null,\r\n null,\r\n \"slabImage\",\r\n null,\r\n function () {},\r\n movableImageData.pos,\r\n null,\r\n movableImageData.id,\r\n sqftEventManager.priorities.SLAB_IMAGE,\r\n movableImageData.featureId,\r\n true\r\n );\r\n\r\n workspaceImage.importData({isDisabledInPopup: movableImageData.isDisabledInPopup});\r\n workspaceImages.push(workspaceImage)\r\n }\r\n\r\n store.dispatch(setSqftCroppedSlabImages(workspaceImages));\r\n },\r\n hideImages: function() {\r\n const shapes = workspace.getShapes();\r\n for (let shape of shapes) {\r\n if (shape instanceof MovableImage && shape.type !== 'slabImage') {\r\n shape.deregisterEvents();\r\n }\r\n }\r\n },\r\n restoreImages: function() {\r\n const shapes = workspace.getShapes();\r\n for (let shape of shapes) {\r\n if (shape instanceof MovableImage && shape.type !== 'slabImage') {\r\n shape.reInitEvents();\r\n }\r\n }\r\n },\r\n hideTextBoxes: function() {\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n for (let textBox of textBoxes) {\r\n textBox.deregisterEvents();\r\n }\r\n },\r\n restoreTextBoxes: function() {\r\n const textBoxes = workspace.textBoxManager.getTextBoxes();\r\n for (let textBox of textBoxes) {\r\n textBox.reInitEvents();\r\n }\r\n },\r\n getMinMaxShapePoints: function(movableImage) {\r\n let size = movableImage.getSize();\r\n return {\r\n minX : 0,\r\n maxX : size.width,\r\n minY : 0,\r\n maxY : size.height\r\n }\r\n },\r\n};\r\n\r\nexport default sqftImageManager\r\n","import sqftConfig from \"./sqftConfig\";\r\nimport sqftImageManager from \"./sqftImageManager\";\r\nimport sqftShapeManager from \"./sqftShapeManager\";\r\nimport workspace from \"../core/workspace\";\r\nimport slabWorkspace from \"../core/slab/slabWorkspace\";\r\nimport store from \"../../../../../store\";\r\nimport {setIsRoomSwitcherVisible} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport sqftSlabManager from \"./sqftSlabManager\";\r\nimport sqftShapeIntersectionsManager from \"./sqftShapeIntersectionsManager\";\r\nimport workspaceControllers from \"./workspaceControllers\";\r\n\r\nexport const enableRegularMode = () => {\r\n store.dispatch(setIsRoomSwitcherVisible(true));\r\n //sqftConfig.workspace.snapToGrid = true;\r\n slabWorkspace.disableSlabImages();\r\n slabWorkspace.deregisterEvents();\r\n sqftImageManager.hideSlabImages();\r\n sqftShapeManager.hideSeamShapes();\r\n sqftShapeManager.hideSlabShapes();\r\n\r\n sqftSlabManager.deleteShapeOffset();\r\n\r\n sqftImageManager.restoreTextBoxes();\r\n sqftImageManager.restoreImages();\r\n sqftShapeManager.restoreCorePieceShapes();\r\n sqftShapeManager.restoreShapeParts();\r\n\r\n slabWorkspace.slabAdditionalShapes.hideAdditionalShapes(); //this should go last\r\n};\r\n\r\nexport const enableSlabMode = (shouldUpdatePlaceholderFeatureIds = false) => {\r\n store.dispatch(setIsRoomSwitcherVisible(false));\r\n sqftConfig.workspace.snapToGrid = false;\r\n sqftImageManager.restoreSlabImages();\r\n sqftShapeManager.checkForUpdateSlabPoints();\r\n sqftShapeManager.checkForUpdateSlabPosition();\r\n sqftShapeManager.restoreSeamShapes();\r\n sqftShapeManager.restoreSlabShapes();\r\n\r\n sqftSlabManager.reInitShapeOffset();\r\n\r\n slabWorkspace.slabAdditionalShapes.initWaterfallToolShapes(); // 1\r\n slabWorkspace.slabAdditionalShapes.initBacksplashAndEdgeShapes();\r\n slabWorkspace.slabAdditionalShapes.initMiteredToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.initUnderlaymentToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.initBumpoutShapes();\r\n slabWorkspace.slabAdditionalShapes.restoreBacksplashShapes();\r\n slabWorkspace.initLeftPart();\r\n\r\n sqftImageManager.hideImages();\r\n sqftImageManager.hideTextBoxes();\r\n sqftShapeManager.hideShapeParts();\r\n sqftShapeManager.hideCorePieceShapes();\r\n\r\n if (shouldUpdatePlaceholderFeatureIds) {\r\n window.setTimeout(() => { // first we need to enable slab mode to get slab mode coordinates for the shape\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n }, 0)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n};\r\n\r\nexport const createSlabModeWaterfallShapes = () => {\r\n slabWorkspace.slabAdditionalShapes.initWaterfallToolShapes(); // 1\r\n slabWorkspace.slabAdditionalShapes.initMiteredToolShapes(); // 2\r\n slabWorkspace.slabAdditionalShapes.hideAdditionalShapes(); //this should go last\r\n}\r\n\r\nexport const clearRotateAngles = () => {\r\n sqftConfig.highlight.rotateAngle = false;\r\n const angleTooltip = document.getElementById(\"angle-tooltip\");\r\n if (angleTooltip) {\r\n angleTooltip.style.display = \"none\";\r\n }\r\n\r\n workspace.getShapes().forEach((shape) => {\r\n if (Array.isArray(shape.rotateAngleParts) && shape.rotateAngleParts.length) {\r\n shape.deActivateRotateAngle();\r\n }\r\n });\r\n}\r\n\r\nexport const getDimensionsDependingOnShapePositions = (workspace) => {\r\n const {minX, maxX, minY, maxY} = sqftShapeManager.getMinMaxWorkspacePoints(workspace, true);\r\n let maxCordX = Math.abs(minX) > Math.abs(maxX) ? Math.abs(minX) : Math.abs(maxX);\r\n let maxCordY = Math.abs(minY) > Math.abs(maxY) ? Math.abs(minY) : Math.abs(maxY);\r\n\r\n let imageWidth = maxCordX / sqftConfig.scale * Math.pow(sqftConfig.defaultScale, 2) + 500 / sqftConfig.scale * sqftConfig.defaultScale;\r\n let imageHeight = maxCordY / sqftConfig.scale * Math.pow(sqftConfig.defaultScale, 2) + 500 / sqftConfig.scale * sqftConfig.defaultScale;\r\n\r\n //todo re-wright this\r\n if (window.innerWidth < 1024) {\r\n imageWidth *= 3.75\r\n imageHeight *= 3.75\r\n }\r\n\r\n return [imageWidth, imageHeight]\r\n}\r\n\r\nexport const getFontSizeFromContext = (ctx) => {\r\n const fontSizeMatch = ctx.font.match(/\\d+/);\r\n return fontSizeMatch ? Number(fontSizeMatch[0]) : null;\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n// import store from \"../../../../../store\";\r\n// import {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n// import {LOOK_OVERLAYS} from \"../../constants\";\r\n// import {Shower} from \"../../parts/shower\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.bottomTubId);\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n // const showerTubComboParent = this.getParent().getParent();\r\n // const currentBottomTub = showerTubComboParent.bottomTub;\r\n //\r\n // const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n // (!showerTubComboParent.showerTubComboIsActive || (\r\n // (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n // ));\r\n //\r\n // if (showNotCompatibleViewConditions) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n // }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const layout = this.getParent().layout;\r\n // const showerParent = layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerParent && showerSize) {\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerSize\r\n // });\r\n // }\r\n return conditions\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerTubComboParent = this.getParent();\r\n return !showerTubComboParent.showerTubComboIsActive || showerTubComboParent.bottomTub !== this.bottomTubId\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return !this.hideLayerCondition()\r\n }\r\n\r\n}\r\n","import QRCode from 'qrcode';\r\nimport store from \"../../../store\";\r\nimport {CabinetsSet} from \"./sqftCabinetsDataMapper\";\r\nimport SqftJsonApi from \"../api/sqftJsonApi\";\r\nimport {setAPIErrorMessage, setSqftCabinetsGlb} from \"../../../actions/sqftFunctions\";\r\nimport {setAbortController} from \"../../../actions/sqftMenuFunctions\";\r\nimport {groupUrlsByVersion, similarityByWords} from \"./dataHelper\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {SQFT_AR3D_GLB_VIEWER} from \"../constants\";\r\n\r\nexport const generateQRCode = async (url) => {\r\n // Generate the QR code data as a string\r\n const qrData = await QRCode.toDataURL(url);\r\n\r\n // Create a canvas element to draw the QR code image on\r\n const canvas = document.createElement(\"canvas\");//createCanvas(300, 300);\r\n canvas.width = 300;\r\n canvas.height = 300;\r\n const ctx = canvas.getContext('2d');\r\n\r\n // Load the QR code image data into an Image object\r\n const img = new Image();\r\n img.src = qrData;\r\n\r\n // Draw the QR code image onto the canvas\r\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n // Return the canvas as an image data URL\r\n return canvas.toDataURL();\r\n}\r\n\r\nexport const getThirdPartyAR3DMetaData = (dbFeature, thirdPartyAR3DUrl) => {\r\n if (dbFeature && dbFeature.thirdPartyAR3DMetaData && thirdPartyAR3DUrl) {\r\n const metadataString = dbFeature.thirdPartyAR3DMetaData[thirdPartyAR3DUrl];\r\n\r\n // Check if the metadata string is present\r\n if (metadataString) {\r\n try {\r\n // Parse the metadata string as JSON\r\n return JSON.parse(metadataString);\r\n } catch (error) {\r\n // Handle JSON parsing error\r\n console.log(\"JSON parsing error:\", error.message);\r\n console.log(\"JSON metadataString\", metadataString);\r\n console.log(\"dbFeature\", dbFeature.sharedFeatureName);\r\n return null;\r\n }\r\n } else {\r\n console.log(\"dbFeature missing metadata\", dbFeature.id);\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const getDepthFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Depth) && thirdPartyAR3DMetaData.Depth.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Depth[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Width) && thirdPartyAR3DMetaData.Width.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Width[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getHeightFromAR3DMetaData = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Height) && thirdPartyAR3DMetaData.Height.length) {\r\n return parseFloat(thirdPartyAR3DMetaData.Height[0]);\r\n }\r\n return null;\r\n};\r\n\r\nexport const getSpecialShape = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.SpecialShape) && thirdPartyAR3DMetaData.SpecialShape.length) {\r\n return thirdPartyAR3DMetaData.SpecialShape[0];\r\n }\r\n return null;\r\n};\r\n\r\nexport const getCategoryFromMetadata = (thirdPartyAR3DMetaData) => {\r\n if (thirdPartyAR3DMetaData && Array.isArray(thirdPartyAR3DMetaData.Category) && thirdPartyAR3DMetaData.Category.length) {\r\n return thirdPartyAR3DMetaData.Category[0];\r\n }\r\n return null;\r\n};\r\n\r\nexport const getDepthFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Depth');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Width');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getHeightFromDescription = (dbFeature) => {\r\n if (dbFeature.description) {\r\n const extractDimension = (dim) => parseInt(dbFeature.description.substr(dbFeature.description.indexOf(dim) + dim.length + 1, 3), 10);\r\n return extractDimension('Height');\r\n }\r\n return null;\r\n};\r\n\r\nexport const getWidthFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let width = getWidthFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!width) {\r\n width = getWidthFromDescription(dbFeature);\r\n }\r\n return width\r\n};\r\n\r\nexport const getDepthFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let depth = getDepthFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!depth) {\r\n depth = getDepthFromDescription(dbFeature);\r\n }\r\n return depth\r\n};\r\n\r\nexport const getHeightFromDbFeature = (dbFeature, thirdPartyAR3DMetaData) => {\r\n let height = getHeightFromAR3DMetaData(thirdPartyAR3DMetaData);\r\n if (!height) {\r\n height = getHeightFromDescription(dbFeature);\r\n }\r\n return height\r\n};\r\n\r\nexport const findGLBLink = (links) => {\r\n const glbLink = links.find(link => link.endsWith('.glb'));\r\n return glbLink || null;\r\n};\r\n\r\n// Function to normalize strings for comparison\r\nexport const normalizeString = (str) => {\r\n return str.toLowerCase().replace(/[\\W_]+/g, ''); // Remove non-alphanumeric characters and convert to lowercase\r\n}\r\n\r\n// Function to split and normalize feature name or URL part for comparison\r\nexport const splitAndNormalize = (str) => {\r\n // Split by spaces and dashes, then normalize each part\r\n return str.split(/[\\s\\-]+/).map(normalizeString);\r\n}\r\n\r\n// Function to split and normalize feature name or URL part for comparison\r\nexport const getUrlByName = (nameSearch, thirdPartyAR3DUrls) => {\r\n const featureNameParts = splitAndNormalize(nameSearch);\r\n\r\n // 1.urlBySharedFeatureName - Enhanced Matching\r\n return thirdPartyAR3DUrls.find(url => {\r\n const urlParts = splitAndNormalize(url.toLowerCase().split('/').pop().split('.')[0]);\r\n return featureNameParts.every(part => urlParts.includes(part));\r\n });\r\n}\r\n\r\n// Function to get 3D URLs for a feature\r\nexport const get3dURLsForFeature = (feature) => {\r\n // Check if feature, feature.getFeatureName, and feature.dbFeature are defined\r\n if (!feature || !feature.getFeatureName || typeof feature.getFeatureName !== 'function' || !feature.dbFeature) {\r\n console.log('Invalid feature or feature properties');\r\n return null;\r\n }\r\n\r\n const featureNameParts = splitAndNormalize(feature.getFeatureName());\r\n\r\n // Check if thirdPartyAR3DUrls is defined and is an array\r\n if (!Array.isArray(feature.dbFeature.thirdPartyAR3DUrls)) {\r\n console.log('thirdPartyAR3DUrls is not defined or not an array. Id:', feature.dbFeature.id);\r\n return null;\r\n }\r\n\r\n const thirdPartyAR3DUrls = feature.dbFeature.thirdPartyAR3DUrls.filter(url => url.endsWith('.glb'));\r\n\r\n // Enhanced Matching\r\n const urlByFeatureName = thirdPartyAR3DUrls.find(url => {\r\n const urlParts = splitAndNormalize(url.toLowerCase().split('/').pop().split('.')[0]);\r\n // Check if all parts of the feature name are present in the URL segment\r\n return featureNameParts.every(part => urlParts.includes(part));\r\n });\r\n\r\n console.log(\"urlByFeatureName\", urlByFeatureName);\r\n if (urlByFeatureName) {\r\n return urlByFeatureName;\r\n }\r\n\r\n return null;\r\n};\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const containsHEBeforeExtension = (url) => {\r\n // Regular expression to match \"-HE\" right before the file extension\r\n const pattern = /-HE\\.[^/.]+$/;\r\n return pattern.test(url);\r\n}\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const startsFromH = (str) => {\r\n return str.charAt(0) === 'H';\r\n}\r\n\r\n// Function to check if a URL contains \"-HE\" right before the file extension\r\nexport const isHoodShape = (shape) => {\r\n const layout = getCurrentLayout();\r\n const relatedParentFeature = layout.getFeatureById(shape.relatedParentFeatureId, true);\r\n if (relatedParentFeature) {\r\n let shapeDbFeature = relatedParentFeature.dbFeature.relatedFeatures.find(relatedFeature => relatedFeature.id === shape.featureId);\r\n if (!shapeDbFeature) {\r\n const shapeFeature = layout.getFeatureById(shape.featureId, true);\r\n if (shapeFeature) {\r\n shapeDbFeature = shapeFeature.dbFeature\r\n }\r\n }\r\n const url = getUrlMatchingByColor(shapeDbFeature, relatedParentFeature).replace(/\\s+\\.glb$/, '.glb');\r\n\r\n const metaData = getThirdPartyAR3DMetaData(shapeDbFeature, url);\r\n const category = getCategoryFromMetadata(metaData);\r\n const shapeHeight = shape.shapeCabinet ? shape.shapeCabinet.getShapeHeight() : shape.getHeight();\r\n\r\n return category === \"Hood\" || containsHEBeforeExtension(url) || shapeHeight <= 18;\r\n }\r\n}\r\n\r\nexport const setCabinetGLBFromCabinetsSet = async(displayDoorsOnly = false) => {\r\n const cabinetsData = CabinetsSet.prepareCabinetsSet(displayDoorsOnly);\r\n console.log(\"prepared cabinetsData\", cabinetsData);\r\n\r\n if (sqftConfig.threeD.glbViewer === SQFT_AR3D_GLB_VIEWER.singleModel) {\r\n await setUrlToCabinetGLB(cabinetsData);\r\n } else {\r\n await setCabinetsSetToCabinetGLB(cabinetsData);\r\n }\r\n}\r\n\r\nexport const setCabinetsSetToCabinetGLB = async(cabinetsData) => {\r\n store.dispatch(setSqftCabinetsGlb(cabinetsData));\r\n}\r\n\r\nexport const setUrlToCabinetGLB = async(cabinetsData) => {\r\n const state = store.getState();\r\n if (state.sqftState.abortRequestController) {\r\n state.sqftState.abortRequestController.abort();\r\n }\r\n\r\n let cabinetSet;\r\n try {\r\n store.dispatch(setAPIErrorMessage(null));\r\n const abortController = new AbortController();\r\n store.dispatch(setAbortController(abortController));\r\n cabinetSet = await SqftJsonApi.postCabinetSet(cabinetsData, { signal: abortController.signal });\r\n } catch (e) {\r\n if (e.name !== 'AbortError') {\r\n store.dispatch(setAPIErrorMessage(e));\r\n }\r\n }\r\n console.log(\"response cabinetSet from api\", cabinetSet );\r\n\r\n //URL needs to be here to display it in AR https://s3.amazonaws.com/qc-3dfiles/composed/ to override it check SquareFootageToolAR\r\n //glbUrl = \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/W3030.glb\"\r\n //glbUrl = \"/images/sqft-icons/3d/Chair.glb\"\r\n //store.dispatch(setSqftCabinetsGlb(\"/video/3d/cabinet.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://quoteremodel.com/video/sqft/cabinets/cabinet.glb\"));\r\n //glbUrl = \"/images/sqft-icons/3d/DCW2430 Summer Flame.glb\"\r\n //glbUrl = \"/images/sqft-icons/3d/hood/Hood Oven GLB/Appliances/Hood_0_0_0_30_0_0_Collection/All-Hood ZLINE 8654SNZ CB-30-25.6.glb\"\r\n //glbUrl = \"https://discoverthreejs.com/examples/assets/models/Parrot.glb\"\r\n //glbUrl = \"https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb\"\r\n //setSqftCabinetsGlb(\"https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb\");\r\n //store.dispatch(setSqftCabinetsGlb(\"https://master_new_1512.quoteremodel.com/content/Views/visualizers/images/sqft-icons/3d/cabinet.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://d1mb1i73swc8dz.cloudfront.net/ar-composer/All-Bottom Cabinet-Light Italian Walnut-Bryant-30-34.5-SB.glb\"));\r\n //store.dispatch(setSqftCabinetsGlb(\"https://s3.amazonaws.com/qc-3dfiles/composed/5dd7954e-ed43-4489-8260-93eeaade08c5.glb\"));\r\n store.dispatch(setSqftCabinetsGlb(cabinetSet ? cabinetSet.s3Url : null));\r\n}\r\n\r\nexport function getUrlMatchingByColor(dbFeature, relatedParentFeature) {\r\n //console.log(\"relatedParentFeature.getFeatureName()\", relatedParentFeature.getFeatureName());\r\n //console.log(\"relatedParentFeature.sharedFeatureName\", relatedParentFeature.dbFeature.sharedFeatureName);\r\n\r\n if (!dbFeature || !relatedParentFeature) {\r\n console.log('Invalid feature or feature properties');\r\n return null;\r\n }\r\n\r\n if (!Array.isArray(dbFeature.thirdPartyAR3DUrls)) {\r\n console.log('thirdPartyAR3DUrls is not defined or not an array. Id:', dbFeature.id);\r\n return null;\r\n }\r\n\r\n const relatedParentFeatureName = relatedParentFeature.getFeatureName();\r\n\r\n // Sort URLs by version in descending order\r\n const sortedUrls = groupUrlsByVersion(dbFeature.thirdPartyAR3DUrls);\r\n\r\n // Try to find a URL by the shared feature name\r\n const urlBySharedFeatureName = getUrlByName(relatedParentFeature.dbFeature.sharedFeatureName, sortedUrls);\r\n if (urlBySharedFeatureName) {\r\n return urlBySharedFeatureName;\r\n }\r\n\r\n // Try to find a URL by the parent feature name\r\n const urlByFeatureName = getUrlByName(relatedParentFeatureName, sortedUrls);\r\n if (urlByFeatureName) {\r\n return urlByFeatureName;\r\n }\r\n\r\n // Try to find a URL by similarity based on the shared feature name\r\n const urlBySimilarity = similarityByWords(sortedUrls, relatedParentFeature.dbFeature.sharedFeatureName);\r\n if (urlBySimilarity) {\r\n return urlBySimilarity;\r\n }\r\n\r\n // Try to find a URL by similarity based on the parent feature name\r\n const urlBySimilarityFromFeatureName = similarityByWords(sortedUrls, relatedParentFeatureName);\r\n if (urlBySimilarityFromFeatureName) {\r\n return urlBySimilarityFromFeatureName;\r\n }\r\n\r\n // Check if URL contains the feature name\r\n let matchingUrl = sortedUrls.find(url => url.includes(relatedParentFeatureName));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n\r\n // Check if URL contains the color name\r\n const color = relatedParentFeature.getColorName();\r\n if (color && color.length > 3) {\r\n matchingUrl = sortedUrls.find(url => url.includes(color));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n }\r\n\r\n // If no specific color, fallback to checking for 'black' in URL\r\n matchingUrl = sortedUrls.find(url => url.toLowerCase().includes('black'));\r\n if (matchingUrl) {\r\n return matchingUrl;\r\n }\r\n\r\n // If no match was found, return the first URL as a fallback\r\n return sortedUrls[0] || null;\r\n}\r\n\r\nexport function getRelatedFeatureMetadata (relatedFeature, parentFeature) {\r\n const url = getUrlMatchingByColor(relatedFeature.dbFeature, parentFeature);\r\n return getThirdPartyAR3DMetaData(relatedFeature.dbFeature, url);\r\n}\r\n\r\nexport function getCabinetDimensions (relatedFeature, parentFeature) {\r\n const thirdPartyAR3DMetaData = getRelatedFeatureMetadata(relatedFeature, parentFeature);\r\n const width = getWidthFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n const depth = getDepthFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n const height = getHeightFromDbFeature(relatedFeature.dbFeature, thirdPartyAR3DMetaData);\r\n\r\n return { width: width, height: height, depth: depth };\r\n}\r\n\r\nexport function getCabinetSimilarFeatureFromAnotherColor (featuresListToSearchForNewFeature, currentShapeDbFeature) {\r\n const getCabinetBoxName = (str) => {\r\n if (str.includes('/')) {\r\n const parts = str.split('/');\r\n return parts[0].trim();\r\n } else {\r\n return str.trim();\r\n }\r\n }\r\n const cabinetBoxName = getCabinetBoxName(currentShapeDbFeature.sharedFeatureName);\r\n let newShapeDbFeature = featuresListToSearchForNewFeature.find(relatedFeature =>\r\n relatedFeature.sharedFeatureName === cabinetBoxName\r\n );\r\n\r\n // If no exact match found, search for an 'includes' match\r\n if (!newShapeDbFeature) {\r\n newShapeDbFeature = featuresListToSearchForNewFeature.find(relatedFeature =>\r\n relatedFeature.sharedFeatureName.includes(cabinetBoxName)\r\n );\r\n }\r\n\r\n return newShapeDbFeature\r\n}\r\n","import {getWizardListFromBackend} from \"../api/wizard-api\";\r\nimport {setLeadPopup} from \"../globalLogic/globalActions\";\r\nimport {getErrorPopupObject} from \"../components/helpers/popupFunctions\";\r\nimport {getConflictingWizardSteps, getUpdatedAllWizardValues} from \"./wizardLogicOld\";\r\n\r\nexport const SET_WIZARD_LIST = \"SET_WIZARD_LIST\";\r\nexport const SET_WIZARD_ACTIVE_ITEM = \"SET_WIZARD_ACTIVE_ITEM\";\r\nexport const SET_WIZARD_ACTIVE_STEP = \"SET_WIZARD_ACTIVE_STEP\";\r\nexport const SET_WIZARD_SELECTED_VALUES = \"SET_WIZARD_SELECTED_VALUES\";\r\nexport const SET_ALL_WIZARD_SELECTED_VALUES = \"SET_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const RESTORE_ALL_WIZARD_SELECTED_VALUES = \"RESTORE_ALL_WIZARD_SELECTED_VALUES\";\r\nexport const SET_WIZARD_MISSING_FEATURES = \"SET_WIZARD_MISSING_FEATURES\";\r\n\r\nexport const getWizardList = () => {\r\n return async (dispatch) => {\r\n const {wizardList, error} = await getWizardListFromBackend();\r\n if (error) {\r\n dispatch(setLeadPopup(getErrorPopupObject(error)));\r\n } else if (!wizardList.length) {\r\n dispatch(setLeadPopup(getErrorPopupObject(\"No wizards found\")));\r\n }\r\n if (document.kvConfig.devMode) {\r\n console.log(\"wizardList\", wizardList);\r\n }\r\n const wizardsArray = Array.isArray(wizardList.wizardList) ? wizardList.wizardList : wizardList;\r\n const nextActiveItem = document.kvConfig.wizardId\r\n ? wizardsArray.find(wizItem => wizItem.id === document.kvConfig.wizardId) || wizardsArray[0]\r\n : wizardsArray[0];\r\n dispatch(setWizardActiveItem(nextActiveItem));\r\n dispatch(setWizardList(wizardList));\r\n }\r\n};\r\n\r\nexport const setWizardList = (wizardList) => ({\r\n type: SET_WIZARD_LIST,\r\n payload: {wizardList}\r\n});\r\n\r\n// export const setWizardActiveItem = (wizardActiveItem, quoteIndex = null) => {\r\nexport const setWizardActiveItem = (wizardActiveItem) => {\r\n return (dispatch) => {\r\n // return (dispatch, getState) => {\r\n // const {quotesState} = getState();\r\n\r\n dispatch({\r\n type: SET_WIZARD_ACTIVE_ITEM,\r\n payload: {\r\n wizardActiveItem,\r\n // quoteIndex: Number.isInteger(quoteIndex) ? quoteIndex : quotesState.activeQuoteIndex,\r\n quoteIndex: 0,\r\n }\r\n })\r\n }\r\n};\r\n\r\nexport const setWizardActiveStep = (wizardActiveStep) => {\r\n return (dispatch, getState) => {\r\n // const {quotesState, wizardState} = getState();\r\n const {wizardState} = getState();\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n let newWizValues = Object.assign({}, wizardState.wizardSelectedValues);\r\n if (wizardState.wizardConflictingSteps.length) {\r\n Object.keys(wizardState.wizardSelectedValues).reverse().forEach(selectedKeyNumber => { // erase conflicting selected steps!\r\n if (selectedKeyNumber >= wizardActiveStep) {\r\n delete newWizValues[selectedKeyNumber]\r\n }\r\n });\r\n wizardConflictingSteps = [];\r\n }\r\n let allWizardsValues = wizardState.allWizardsValues;\r\n if (wizardState.wizardActiveItem) {\r\n allWizardsValues = wizardState.allWizardsValues.map(wizObject => {\r\n // if (wizObject.wizardItemId === wizardState.wizardActiveItem.id && wizObject.quoteIndex === quotesState.activeQuoteIndex) {\r\n if (wizObject.wizardItemId === wizardState.wizardActiveItem.id && wizObject.quoteIndex === 0) {\r\n wizObject.lastVisitedStep = wizardActiveStep // keep it up to date to be able to restore\r\n if (wizardState.wizardConflictingSteps.length) {\r\n wizObject.wizardSelectedValues = Object.assign({}, newWizValues)\r\n }\r\n }\r\n return wizObject\r\n })\r\n }\r\n\r\n dispatch({\r\n type: SET_WIZARD_ACTIVE_STEP,\r\n payload: {\r\n wizardActiveStep,\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n allWizardsValues,\r\n // quoteIndex: quotesState.activeQuoteIndex,\r\n quoteIndex: 0,\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setWizardSelectedValues = (wizardSelectedValues, direct = false, wizardItem = null) => {\r\n return (dispatch, getState) => {\r\n const {wizardState} = getState();\r\n const wizardActiveItem = wizardItem || wizardState.wizardActiveItem;\r\n\r\n let wizardConflictingSteps = wizardState.wizardConflictingSteps;\r\n\r\n let newWizValues = direct\r\n ? Object.assign({}, wizardSelectedValues)\r\n : Object.assign({}, wizardState.wizardSelectedValues, wizardSelectedValues);\r\n\r\n if (!direct && wizardSelectedValues && Object.keys(wizardSelectedValues).length === 1) {\r\n wizardConflictingSteps = getConflictingWizardSteps(\r\n newWizValues,\r\n {wizardActiveItem, quoteIndex: 0, wizardSelectedValues},\r\n );\r\n }\r\n\r\n if (wizardActiveItem) {\r\n // console.log(\"wizardConflictingSteps\", action.payload.wizardConflictingSteps);\r\n // this works for QKB UI only for now, we are not using it on lixil\r\n const allWizardsValues = wizardConflictingSteps.length // do not change them to be able to restore when wizard is closed\r\n ? wizardState.allWizardsValues\r\n : getUpdatedAllWizardValues(wizardState, 0, wizardActiveItem.id, newWizValues);\r\n\r\n dispatch({\r\n type: SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n quoteIndex: 0,\r\n wizardSelectedValues: newWizValues,\r\n allWizardsValues,\r\n wizardConflictingSteps\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n dispatch({\r\n type: SET_WIZARD_SELECTED_VALUES,\r\n payload: {\r\n wizardSelectedValues: newWizValues,\r\n wizardConflictingSteps,\r\n // direct,\r\n quoteIndex: 0,\r\n // wizardActiveItem: wizardItem || wizardState.wizardActiveItem,\r\n // fabricatorState,\r\n // cartItems: cartState.cartItems\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const setAllWizardSelectedValues = (wizardSelectedValues, quoteIndex, wizardItemId) => ({\r\n type: SET_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {wizardSelectedValues, quoteIndex, wizardItemId}\r\n});\r\n\r\nexport const updateAllWizardValues = (allWizardsValues) => ({\r\n type: RESTORE_ALL_WIZARD_SELECTED_VALUES,\r\n payload: {allWizardsValues}\r\n})\r\n","import {postLixilCalendar, postLixilGetSalesRep} from \"../api/lixil-api\";\r\nimport {defaultTimeValue} from \"./appointmentReducer\";\r\nimport {getLixilCampaignInfo, LIXIL_PRODUCT_TYPES} from \"../lixilLogic/lixilActions\";\r\n\r\nexport const SET_APPOINTMENT_DATE = \"SET_APPOINTMENT_DATE\";\r\nexport const SET_APPOINTMENT_TIME = \"SET_APPOINTMENT_TIME\";\r\nexport const SET_APPOINTMENT_TIME_STEP_ACTIVE = \"SET_APPOINTMENT_TIME_STEP_ACTIVE\";\r\nexport const SET_AVAILABLE_APPOINTMENTS = \"SET_AVAILABLE_APPOINTMENTS\";\r\nexport const SET_APPOINTMENTS_NOT_AVAILABLE = \"SET_APPOINTMENTS_NOT_AVAILABLE\";\r\nexport const SET_SALES_REP_ID = \"SET_SALES_REP_ID\";\r\nexport const setAppointmentDate = (date) => ({\r\n type: SET_APPOINTMENT_DATE,\r\n payload: date\r\n});\r\n\r\nexport const setAppointmentTime = (time = \"\", timeSlot = \"\") => ({\r\n type: SET_APPOINTMENT_TIME,\r\n payload: {time, timeSlot}\r\n});\r\n\r\nexport const setAppointmentTimeStepActive = (timeStepIsActive) => ({\r\n type: SET_APPOINTMENT_TIME_STEP_ACTIVE,\r\n payload: timeStepIsActive\r\n});\r\n\r\nexport const setAvailableAppointments = (availableAppointmentDates) => {\r\n return (dispatch, getState) => {\r\n const {appointmentDate, appointmentTimeSlot} = getState().appointmentState;\r\n let payload = {\r\n availableAppointmentDates\r\n };\r\n if (appointmentDate) {\r\n const formattedToMatchApiDate = formatCalendarDateToMatchAvailableDate(new Date(appointmentDate));\r\n const selectedLixilDateObject = availableAppointmentDates.find(dateObject => {\r\n return dateObject.salesRepAppointmentDate === formattedToMatchApiDate\r\n });\r\n if (!selectedLixilDateObject) {\r\n payload.appointmentDate = \"\";\r\n payload.appointmentTimeSlot = defaultTimeValue;\r\n } else if (!selectedLixilDateObject.salesRepsInSlots.some(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)) {\r\n payload.appointmentTimeSlot = defaultTimeValue;\r\n }\r\n }\r\n dispatch({\r\n type: SET_AVAILABLE_APPOINTMENTS,\r\n payload\r\n });\r\n }\r\n};\r\n\r\nexport const setAppointmentsNotAvailable = (appointmentsNotAvailable) => ({\r\n type: SET_APPOINTMENTS_NOT_AVAILABLE,\r\n payload: {appointmentsNotAvailable}\r\n});\r\n\r\nexport const setSalesRepId = (salesRepID) => ({\r\n type: SET_SALES_REP_ID,\r\n payload: {salesRepID}\r\n});\r\n\r\nconst getCommonLixilPostData = (store) => {\r\n const {userState, wizardState} = store;\r\n const {userInfo, userLocation} = userState;\r\n\r\n const productId = wizardState.wizardSelectedValues\r\n && wizardState.wizardSelectedValues[1]\r\n && wizardState.wizardSelectedValues[1].selectedFeature\r\n ? wizardState.wizardSelectedValues[1].selectedFeature.id\r\n : 1;\r\n\r\n const productName = getLixilCampaignInfo(store).Product === LIXIL_PRODUCT_TYPES.srBathing\r\n ? LIXIL_PRODUCT_TYPES.srBathing\r\n : \"BR\";\r\n\r\n return {\r\n contactData: {\r\n email: userInfo.email,\r\n firstName: userInfo.firstName,\r\n installationAddress: userInfo.address,\r\n lastName: userInfo.lastName,\r\n phone: userInfo.phone,\r\n zipcode: userLocation.postal || userInfo.postal,\r\n \"city\": userLocation.city,\r\n \"direction\": userLocation.direction,\r\n \"state\": userLocation.state,\r\n \"streetName\": userLocation.streetName,\r\n \"streetNumber\": userLocation.streetNumber,\r\n },\r\n productInfo: {\r\n productId,\r\n productName,\r\n }\r\n }\r\n}\r\n\r\n export const checkLixilCalendar = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const postCalendarData = getCommonLixilPostData(getState());\r\n\r\n // 1) register user\r\n const postCalendarResponse = await postLixilCalendar(postCalendarData);\r\n console.log(\"postCalendarResponse\", postCalendarResponse);\r\n\r\n if (postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability) {\r\n // dispatch(setAppointmentsNotAvailable(false)); // faraday reponse not available for this address\r\n // removed, it should be set when user submitted the form, if they opened calendar and left - it should be noAppt\r\n dispatch(setAvailableAppointments(postCalendarResponse.data.salesRepAvailability.availableSalesReps));\r\n return true\r\n }\r\n\r\n // dispatch(setAvailableAppointments([\r\n // {\r\n // \"salesRepAppointmentDate\": \"2024-03-18\",\r\n // \"salesRepsInSlots\": [\r\n // {\r\n // \"slotEndTime\": \"string\",\r\n // \"slotStartTime\": \"string\",\r\n // \"timeSlot\": \"string\"\r\n // }\r\n // ]\r\n // }\r\n // ]));\r\n\r\n // return !(postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability)\r\n return false\r\n }\r\n }\r\n\r\nexport const getLixilSalesRep = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const store = getState();\r\n const {appointmentState} = store;\r\n\r\n let postData = getCommonLixilPostData(store);\r\n\r\n postData.date = formatCalendarDateToMatchAvailableDate(appointmentState.appointmentDate);\r\n // postData.consultationTime = appointmentState.appointmentTime;\r\n // postData.timeSlotId = 1;\r\n postData.timeSlot = appointmentState.appointmentTimeSlot;\r\n\r\n // 1) register user\r\n const postSalesRepResponse = await postLixilGetSalesRep(postData);\r\n console.log(\"postSalesRepResponse\", postSalesRepResponse);\r\n\r\n if (postSalesRepResponse && postSalesRepResponse.data && postSalesRepResponse.data.salesRepID) {\r\n dispatch(setSalesRepId(postSalesRepResponse.data.salesRepID));\r\n }\r\n\r\n // return !(postCalendarResponse && postCalendarResponse.data && postCalendarResponse.data.salesRepAvailability)\r\n return false\r\n }\r\n}\r\n\r\nexport const formatCalendarDateToMatchAvailableDate = (calendarDate, withSlashes = false) => {\r\n\r\n let day = \"\"+calendarDate.getDate();\r\n let month = \"\"+(calendarDate.getMonth() + 1); // +1 because getMonth returns starting from 0 (January is 0)\r\n let year = \"\"+calendarDate.getFullYear();\r\n\r\n day = day.length === 1 ? \"0\" + day : day;\r\n month = month.length === 1 ? \"0\" + month : month;\r\n\r\n if (withSlashes) {\r\n return month + \"/\" + day + \"/\" + year\r\n }\r\n\r\n return year + \"-\" + month + \"-\" + day\r\n}\r\n\r\nexport const getSelectedLixilDateObject = (appDate, availableAppointmentDates) => {\r\n const formattedToMatchApiDate = formatCalendarDateToMatchAvailableDate(appDate);\r\n const selectedLixilDateObject = availableAppointmentDates.find(dateObject => {\r\n return dateObject.salesRepAppointmentDate === formattedToMatchApiDate\r\n });\r\n if (!selectedLixilDateObject) {\r\n console.log(\"no selected day? try better search, something is incorrect\", );\r\n return null\r\n }\r\n return selectedLixilDateObject\r\n}\r\n","import invert from \"lodash/invert\";\r\nimport {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {pnpoly} from \"../../../misc/utils\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Walls: {\r\n Ceiling: 1000,\r\n RightWall: 2000,\r\n LeftWall: 3000,\r\n PopoutWall: 6000,\r\n Backsplash: 4000,\r\n BacksplashRightWall: 4050,\r\n BacksplashLeftWall: 4100,\r\n RightWallBacksplash: 4150,\r\n LeftWallBacksplash: 4200,\r\n // FourInchBacksplash: 12000,\r\n // FullHeightBacksplash: 13000,\r\n // SixHeightBacksplash: 14000,\r\n },\r\n Floor: 5000,\r\n Globals: {\r\n GlobalShadow: 7000,\r\n Baseboard: 8000,\r\n CeilingLights: 9000,\r\n CeilingHighlights: 10000,\r\n Decor1: 25000,\r\n Decor2: 32000,\r\n Decor3: 36500, // center island decor\r\n Decor4: 41000,\r\n },\r\n Cabinet: {\r\n TopCabinetShadow: 15000,\r\n TopCabinetShadowPart2: 15005,\r\n BottomCabinetShadow: 15500,\r\n TopCabinet: 16000,\r\n TopCabinetModuleBox: 16050,\r\n CrownMolding: 17000,\r\n TopCabinet2: 19000, //Crown Molding should be higher than Top cabinet (c) Nikita\r\n TopCabinetModuleBox2: 219050, //Crown Molding should be higher than Top cabinet (c) Nikita\r\n CrownMolding2: 20000,\r\n BottomCabinet: 22000,\r\n BottomCabinetModuleBox: 22050,\r\n BottomCabinet2: 27000,\r\n BottomCabinetModuleBox2: 27050,\r\n TopHandle: 28000,\r\n TopHandle2: 28100,\r\n BottomHandle: 28500,\r\n BottomHandle2: 28750,\r\n Peninsula: 29250,\r\n TopCabinetModules: {},\r\n BottomCabinetModules: {},\r\n },\r\n Appliances: {\r\n Microwave: 21000,\r\n Hood: 18000,\r\n Dishwasher: 23000,\r\n Range: 26000,\r\n Fridge: 29000,\r\n FridgeShadow: 29050,\r\n },\r\n CountertopGroup: {\r\n Countertop: 24000,\r\n Countertop2: 30000,\r\n Sink: 43000,\r\n Faucet: 44000,\r\n Stovetop: 45000,\r\n // Countertop3: 42000,\r\n },\r\n CenterIsland: {\r\n CenterIslandShadow: 29500,\r\n Cabinet: 31000,\r\n Countertop: 36000,\r\n Sink: 37000,\r\n Faucet: 38000,\r\n Stovetop: 38500,\r\n Range: 38750,\r\n ChairsShadow: 35000,\r\n Chairs: 39000,\r\n Handle: 40000,\r\n },\r\n };\r\n});\r\n\r\nlayouts[\"Small\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithPeninsula\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithIsland\"].Appliances.Fridge = 15750;\r\nlayouts[\"SmallWithPeninsulaWithIsland\"].Appliances.Fridge = 15750;\r\nlayouts[\"Small\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithPeninsula\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithIsland\"].Appliances.FridgeShadow = 15800;\r\nlayouts[\"SmallWithPeninsulaWithIsland\"].Appliances.FridgeShadow = 15800;\r\n\r\nlet startTopCabinetZIndex = 17100;\r\nlet startTopCabinetZIndex2 = 21100;\r\n\r\nlet startBottomCabinetZIndex = 22100;\r\nlet startBottomCabinetZIndex2 = 27100;\r\n\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n let moduleTopNumber = 1, moduleBottomNumber = 1;\r\n for (let i = 1; i <= 8; i++) { // 8 modules\r\n for (let k = 1; k <= 64; k++) { // 64 module parts\r\n const module_modulePart = i + \"_\" + k;\r\n layouts[layoutName].Cabinet.TopCabinetModules[module_modulePart] = (i <= 5)\r\n ? startTopCabinetZIndex + (i*100)+ k\r\n : startTopCabinetZIndex2 + (moduleTopNumber*100)+ k;\r\n layouts[layoutName].Cabinet.BottomCabinetModules[module_modulePart] = (i <= 6)\r\n ? startBottomCabinetZIndex + (i*100)+ k\r\n : startBottomCabinetZIndex2 + (moduleBottomNumber*100)+ k;\r\n }\r\n if (i > 5) {\r\n moduleTopNumber++;\r\n }\r\n if (i > 6) {\r\n moduleBottomNumber++;\r\n }\r\n }\r\n});\r\n\r\nconst getLayerDimensions = (zIndex, currentLayout) => {\r\n const fullImagesFactor = UseFullSizeImages ? 185.1851851851852 : 100;\r\n\r\n if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_64\"])) {\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*400],[0,(fullImagesFactor/100)*400]],\r\n width: (fullImagesFactor/100)*290,\r\n height: (fullImagesFactor/100)*160\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"2_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"2_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*260,(fullImagesFactor/100)*270],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*270],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*260,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*240\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"3_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"3_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*470,(fullImagesFactor/100)*300],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*300],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*470,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*160,\r\n height: (fullImagesFactor/100)*210\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"4_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"4_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*620,(fullImagesFactor/100)*310],[(fullImagesFactor/100)*770,(fullImagesFactor/100)*310],[(fullImagesFactor/100)*770,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*620,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*150,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*750,(fullImagesFactor/100)*280],[(fullImagesFactor/100)*930,(fullImagesFactor/100)*280],[(fullImagesFactor/100)*930,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*750,(fullImagesFactor/100)*280]],\r\n width: (fullImagesFactor/100)*180,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*260],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*260],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*510],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*510]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*250\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"7_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"7_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1120,(fullImagesFactor/100)*220],[(fullImagesFactor/100)*1400,(fullImagesFactor/100)*220],[(fullImagesFactor/100)*1400,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*1120,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*280,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*190],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*190],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_64\"])) {\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*240],[(fullImagesFactor/100)*290,(fullImagesFactor/100)*400],[0,(fullImagesFactor/100)*400]],\r\n width: (fullImagesFactor/100)*290,\r\n height: (fullImagesFactor/100)*160\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"2_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"2_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*280,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*480,(fullImagesFactor/100)*850],[(fullImagesFactor/100)*280,(fullImagesFactor/100)*850]],\r\n width: (fullImagesFactor/100)*200,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"3_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"3_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*470,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*800],[(fullImagesFactor/100)*470,(fullImagesFactor/100)*800]],\r\n width: (fullImagesFactor/100)*160,\r\n height: (fullImagesFactor/100)*190\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"4_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"4_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*630,(fullImagesFactor/100)*600],[(fullImagesFactor/100)*760,(fullImagesFactor/100)*600],[(fullImagesFactor/100)*760,(fullImagesFactor/100)*800],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*800]],\r\n width: (fullImagesFactor/100)*130,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"5_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"5_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*750,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*750,(fullImagesFactor/100)*840]],\r\n width: (fullImagesFactor/100)*170,\r\n height: (fullImagesFactor/100)*220\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*880],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*880]],\r\n width: (fullImagesFactor/100)*220,\r\n height: (fullImagesFactor/100)*240\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1110,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*1390,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*1390,(fullImagesFactor/100)*940],[(fullImagesFactor/100)*1110,(fullImagesFactor/100)*940]],\r\n width: (fullImagesFactor/100)*280,\r\n height: (fullImagesFactor/100)*280\r\n };\r\n } else if ((zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_1\"])\r\n && (zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_64\"])) {\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*990],[(fullImagesFactor/100)*1380,(fullImagesFactor/100)*990]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n }\r\n\r\n switch (zIndex) {\r\n case layouts[currentLayout].Floor:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[0,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n\r\n //*** Walls ***//\r\n case layouts[currentLayout].Walls.LeftWall:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*100],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*100],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*900],[0,(fullImagesFactor/100)*900]],\r\n width: (fullImagesFactor/100)*740,\r\n height: (fullImagesFactor/100)*800\r\n };\r\n case layouts[currentLayout].Walls.LeftWallBacksplash:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*210,(fullImagesFactor/100)*500],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*500],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*210,(fullImagesFactor/100)*590]],\r\n };\r\n case layouts[currentLayout].Walls.RightWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*600,(fullImagesFactor/100)*45],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*45],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*970],[(fullImagesFactor/100)*600,(fullImagesFactor/100)*970]],\r\n width: (fullImagesFactor/100)*1020,\r\n height: (fullImagesFactor/100)*925\r\n };\r\n case layouts[currentLayout].Walls.RightWallBacksplash:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*630,(fullImagesFactor/100)*330],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*630,(fullImagesFactor/100)*580]],\r\n };\r\n case layouts[currentLayout].Walls.Ceiling:\r\n return {\r\n polygonArray: [[0,0],[(fullImagesFactor/100)*1620,0],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*260],[0,(fullImagesFactor/100)*260]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*260\r\n };\r\n case layouts[currentLayout].Walls.PopoutWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*200,(fullImagesFactor/100)*120],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*120],[(fullImagesFactor/100)*740,(fullImagesFactor/100)*880],[(fullImagesFactor/100)*200,(fullImagesFactor/100)*880]],\r\n width: (fullImagesFactor/100)*540,\r\n height: (fullImagesFactor/100)*760\r\n };\r\n case layouts[currentLayout].Walls.Backsplash:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*200],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*700],[0,(fullImagesFactor/100)*700]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*500\r\n };\r\n case layouts[currentLayout].Walls.BacksplashLeftWall:\r\n return {\r\n polygonArray: [\r\n [(fullImagesFactor/100)*200,(fullImagesFactor/100)*280],\r\n [(fullImagesFactor/100)*632,(fullImagesFactor/100)*336],\r\n [(fullImagesFactor/100)*632,(fullImagesFactor/100)*600],\r\n [(fullImagesFactor/100)*200,(fullImagesFactor/100)*640]],\r\n };\r\n case layouts[currentLayout].Walls.BacksplashRightWall:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*633,(fullImagesFactor/100)*336],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*210],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*680],[(fullImagesFactor/100)*633,(fullImagesFactor/100)*600]],\r\n };\r\n\r\n //*** Cabinet ***//\r\n case layouts[currentLayout].Cabinet.BottomCabinet:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*590],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*860],[0,(fullImagesFactor/100)*860]],\r\n width: (fullImagesFactor/100)*1000,\r\n height: (fullImagesFactor/100)*270\r\n };\r\n case layouts[currentLayout].Cabinet.BottomCabinet2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*530,\r\n height: (fullImagesFactor/100)*480\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*160],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*160],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*350],[0,(fullImagesFactor/100)*350]],\r\n width: (fullImagesFactor/100)*1620,\r\n height: (fullImagesFactor/100)*190\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding2:\r\n return {\r\n polygonArray: [\r\n [(fullImagesFactor/100)*900,(fullImagesFactor/100)*110],\r\n [(fullImagesFactor/100)*1620,(fullImagesFactor/100)*110],\r\n [(fullImagesFactor/100)*1620,(fullImagesFactor/100)*280],\r\n [(fullImagesFactor/100)*900,(fullImagesFactor/100)*280]\r\n ],\r\n width: (fullImagesFactor/100)*720,\r\n height: (fullImagesFactor/100)*170\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*180],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*180],[(fullImagesFactor/100)*1000,(fullImagesFactor/100)*520],[0,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*1000,\r\n height: (fullImagesFactor/100)*340\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*910,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*530],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*530]],\r\n width: (fullImagesFactor/100)*710,\r\n height: (fullImagesFactor/100)*400\r\n };\r\n case layouts[currentLayout].Cabinet.Peninsula:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*430,\r\n height: (fullImagesFactor/100)*430\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*230],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*230],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*550],[0,(fullImagesFactor/100)*550]],\r\n width: (fullImagesFactor/100)*990,\r\n height: (fullImagesFactor/100)*320\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*990,(fullImagesFactor/100)*150],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*150],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*990,(fullImagesFactor/100)*550]],\r\n width: (fullImagesFactor/100)*630,\r\n height: (fullImagesFactor/100)*400\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*620],[(fullImagesFactor/100)*910,(fullImagesFactor/100)*920],[0,(fullImagesFactor/100)*920]],\r\n width: (fullImagesFactor/100)*910,\r\n height: (fullImagesFactor/100)*300\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1100,(fullImagesFactor/100)*670],[(fullImagesFactor/100)*1100,(fullImagesFactor/100)*670],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1000],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1000]],\r\n width: (fullImagesFactor/100)*520,\r\n height: (fullImagesFactor/100)*330\r\n };\r\n\r\n //*** Appliances ***//\r\n case layouts[currentLayout].Appliances.Dishwasher:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*650,(fullImagesFactor/100)*610],[(fullImagesFactor/100)*840,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*840,(fullImagesFactor/100)*840],[(fullImagesFactor/100)*650,(fullImagesFactor/100)*610]],\r\n width: (fullImagesFactor/100)*190,\r\n height: (fullImagesFactor/100)*230\r\n };\r\n case layouts[currentLayout].Appliances.Fridge:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*400],[(fullImagesFactor/100)*880,(fullImagesFactor/100)*400],[(fullImagesFactor/100)*880,(fullImagesFactor/100)*1080],[0,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*880,\r\n height: (fullImagesFactor/100)*680\r\n };\r\n case layouts[currentLayout].Appliances.Hood:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*870,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*130],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*870,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*320,\r\n height: (fullImagesFactor/100)*390\r\n };\r\n case layouts[currentLayout].Appliances.Microwave:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*890,(fullImagesFactor/100)*370],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*370],[(fullImagesFactor/100)*1130,(fullImagesFactor/100)*520],[(fullImagesFactor/100)*890,(fullImagesFactor/100)*520]],\r\n width: (fullImagesFactor/100)*240,\r\n height: (fullImagesFactor/100)*150\r\n };\r\n case layouts[currentLayout].Appliances.Range:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*890,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*1200,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*1200,(fullImagesFactor/100)*910],[(fullImagesFactor/100)*890,(fullImagesFactor/100)*910]],\r\n width: (fullImagesFactor/100)*310,\r\n height: (fullImagesFactor/100)*360\r\n };\r\n\r\n //*** CountertopGroup ***//\r\n case layouts[currentLayout].CountertopGroup.Countertop:\r\n return {\r\n polygonArray: [[0,(fullImagesFactor/100)*570],[(fullImagesFactor/100)*1020,(fullImagesFactor/100)*570],[(fullImagesFactor/100)*1020,(fullImagesFactor/100)*650],[0,(fullImagesFactor/100)*650]],\r\n width: (fullImagesFactor/100)*1020,\r\n height: (fullImagesFactor/100)*80\r\n };\r\n case layouts[currentLayout].CountertopGroup.Countertop2:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*1070],[(fullImagesFactor/100)*1090,(fullImagesFactor/100)*1070]],\r\n width: (fullImagesFactor/100)*530,\r\n height: (fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CountertopGroup.Sink:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*630],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*720],[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*720]],\r\n width: (fullImagesFactor/100)*380,\r\n height: (fullImagesFactor/100)*90\r\n };\r\n case layouts[currentLayout].CountertopGroup.Faucet:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*580],[(fullImagesFactor/100)*1620,(fullImagesFactor/100)*720],[(fullImagesFactor/100)*1240,(fullImagesFactor/100)*720]],\r\n width: (fullImagesFactor/100)*380,\r\n height: (fullImagesFactor/100)*140\r\n };\r\n case layouts[currentLayout].CountertopGroup.Stovetop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n\r\n //*** CenterIsland ***//\r\n case layouts[currentLayout].CenterIsland.Cabinet:\r\n case layouts[currentLayout].CenterIsland.Handle:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*250,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*910,\r\n height: (fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CenterIsland.Countertop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*110,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*640],[(fullImagesFactor/100)*1190,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*110,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1080,\r\n height: (fullImagesFactor/100)*(fullImagesFactor/100)*440\r\n };\r\n case layouts[currentLayout].CenterIsland.Chairs:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*90,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*690],[(fullImagesFactor/100)*1160,(fullImagesFactor/100)*1080],[(fullImagesFactor/100)*90,(fullImagesFactor/100)*1080]],\r\n width: (fullImagesFactor/100)*1070,\r\n height: (fullImagesFactor/100)*390\r\n };\r\n case layouts[currentLayout].CenterIsland.Sink:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*650],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*750]],\r\n width: (fullImagesFactor/100)*370,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n case layouts[currentLayout].CenterIsland.Faucet:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*550],[(fullImagesFactor/100)*900,(fullImagesFactor/100)*750],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*750]],\r\n width: (fullImagesFactor/100)*370,\r\n height: (fullImagesFactor/100)*200\r\n };\r\n case layouts[currentLayout].CenterIsland.Stovetop:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n case layouts[currentLayout].CenterIsland.Range:\r\n return {\r\n polygonArray: [[(fullImagesFactor/100)*530,(fullImagesFactor/100)*660],[(fullImagesFactor/100)*920,(fullImagesFactor/100)*660],[(fullImagesFactor/920)*1200,(fullImagesFactor/100)*760],[(fullImagesFactor/100)*530,(fullImagesFactor/100)*760]],\r\n width: (fullImagesFactor/100)*390,\r\n height: (fullImagesFactor/100)*100\r\n };\r\n default:\r\n return null\r\n }\r\n};\r\nconst checkForCanvasScale = (canvas, polygonArray) => {\r\n if (canvas && ((canvas.width !== canvas.offsetWidth) || (canvas.height !== canvas.offsetHeight))) {\r\n return polygonArray.map(point => {\r\n point = point.map(dot => Math.round(dot*canvas.offsetWidth/canvas.width));\r\n return point\r\n })\r\n }\r\n return polygonArray\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer, canvas) => {\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n if ((\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"1_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"5_64\"])\r\n ) || (\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.TopCabinetModules[\"6_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.TopCabinetModules[\"8_64\"])\r\n )) {\r\n return {\r\n contextMenuPartId: \"top_cabinet\",\r\n module: invert(layouts[currentLayout].Cabinet.TopCabinetModules)[layer.zIndex],\r\n };\r\n } else if ((\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"1_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"6_64\"])\r\n ) || (\r\n (layer.zIndex >= layouts[currentLayout].Cabinet.BottomCabinetModules[\"7_1\"])\r\n && (layer.zIndex <= layouts[currentLayout].Cabinet.BottomCabinetModules[\"8_64\"])\r\n )) {\r\n return {\r\n contextMenuPartId: \"bottom_cabinet\",\r\n module: invert(layouts[currentLayout].Cabinet.BottomCabinetModules)[layer.zIndex],\r\n };\r\n }\r\n switch (layer.zIndex) {\r\n case layouts[currentLayout].Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Walls.LeftWall: {\r\n let leftWallBacksplash = getLayerDimensions(layouts[currentLayout].Walls.LeftWallBacksplash, currentLayout);\r\n leftWallBacksplash.polygonArray = checkForCanvasScale(canvas, leftWallBacksplash.polygonArray);\r\n if (pnpoly(leftWallBacksplash.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"left_wall_custom\"\r\n };\r\n } else {\r\n return {\r\n parent: \"Walls\",\r\n child: \"Left Wall\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.RightWall: {\r\n let rightWallBacksplash = getLayerDimensions(layouts[currentLayout].Walls.RightWallBacksplash, currentLayout);\r\n rightWallBacksplash.polygonArray = checkForCanvasScale(canvas, rightWallBacksplash.polygonArray);\r\n if (pnpoly(rightWallBacksplash.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"right_wall_custom\"\r\n };\r\n } else {\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Wall\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.PopoutWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Popout Wall\"\r\n };\r\n case layouts[currentLayout].Walls.Backsplash: {\r\n let backsplashLeftWall = getLayerDimensions(layouts[currentLayout].Walls.BacksplashLeftWall, currentLayout);\r\n let backsplashRightWall = getLayerDimensions(layouts[currentLayout].Walls.BacksplashRightWall, currentLayout);\r\n backsplashLeftWall.polygonArray = checkForCanvasScale(canvas, backsplashLeftWall.polygonArray);\r\n backsplashRightWall.polygonArray = checkForCanvasScale(canvas, backsplashRightWall.polygonArray);\r\n if (pnpoly(backsplashLeftWall.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"backsplash_custom_left\"\r\n };\r\n } else if (pnpoly(backsplashRightWall.polygonArray, document.hoveredMousePos)) {\r\n return {\r\n contextMenuPartId: \"backsplash_custom_right\"\r\n };\r\n } else {\r\n return {\r\n contextMenuPartId: \"backsplash_custom\"\r\n };\r\n }\r\n }\r\n case layouts[currentLayout].Walls.Ceiling:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Ceiling\"\r\n };\r\n case layouts[currentLayout].Cabinet.TopCabinet:\r\n case layouts[currentLayout].Cabinet.TopCabinet2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Top Cabinet\"\r\n };\r\n case layouts[currentLayout].Cabinet.BottomCabinet:\r\n case layouts[currentLayout].Cabinet.BottomCabinet2:\r\n case layouts[currentLayout].Cabinet.Peninsula:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Bottom Cabinet\"\r\n };\r\n case layouts[currentLayout].Cabinet.CrownMolding:\r\n case layouts[currentLayout].Cabinet.CrownMolding2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Crown Molding\"\r\n };\r\n case layouts[currentLayout].Cabinet.TopHandle:\r\n case layouts[currentLayout].Cabinet.TopHandle2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Top Handle\"\r\n };\r\n case layouts[currentLayout].Cabinet.BottomHandle:\r\n case layouts[currentLayout].Cabinet.BottomHandle2:\r\n return {\r\n parent: \"Cabinet\",\r\n child: \"Bottom Handle\"\r\n };\r\n case layouts[currentLayout].Appliances.Range:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Range\"\r\n };\r\n case layouts[currentLayout].Appliances.Fridge:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Fridge\"\r\n };\r\n case layouts[currentLayout].Appliances.Hood:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Hood\"\r\n };\r\n case layouts[currentLayout].Appliances.Microwave:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Microwave\"\r\n };\r\n case layouts[currentLayout].Appliances.Dishwasher:\r\n return {\r\n parent: \"Appliance\",\r\n child: \"Dishwasher\"\r\n };\r\n case layouts[currentLayout].CountertopGroup.Edge:\r\n return {\r\n parent: \"Countertop\",\r\n child: \"Edge\"\r\n };\r\n // case layouts[currentLayout].CountertopGroup.Countertop2:\r\n case layouts[currentLayout].CountertopGroup.Sink:\r\n case layouts[currentLayout].CountertopGroup.Faucet:\r\n case layouts[currentLayout].CountertopGroup.Countertop:\r\n case layouts[currentLayout].CountertopGroup.Countertop2:\r\n return {\r\n contextMenuPartId: \"countertop_group_custom\"\r\n };\r\n case layouts[currentLayout].CountertopGroup.Stovetop:\r\n return {\r\n parent: \"Countertop\",\r\n child: \"Stovetop\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Chairs:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Chairs\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Cabinet:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Cabinet\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Edge:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Edge\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Faucet:\r\n case layouts[currentLayout].CenterIsland.Sink:\r\n case layouts[currentLayout].CenterIsland.Stovetop:\r\n case layouts[currentLayout].CenterIsland.Range:\r\n case layouts[currentLayout].CenterIsland.Countertop:\r\n return {\r\n contextMenuPartId: \"center_island_custom\"\r\n };\r\n case layouts[currentLayout].CenterIsland.Handle:\r\n return {\r\n parent: \"Center Island\",\r\n child: \"Handle\"\r\n };\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {centerIslandThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Cabinet from \"../subparts/centerIsland/cabinet\";\r\nimport Faucet from \"../subparts/centerIsland/faucet\";\r\nimport Sink from \"../subparts/centerIsland/sink\";\r\nimport Edge from \"../subparts/centerIsland/edge\";\r\nimport Countertop from \"../subparts/centerIsland/countertop\";\r\nimport IslandHood from \"../subparts/centerIsland/islandHood\";\r\nimport Stovetop from \"../subparts/centerIsland/stovetop\";\r\nimport Pendants from \"../subparts/centerIsland/pendants\";\r\nimport RightIsland from \"../subparts/centerIsland/rightIsland\";\r\nimport {setActiveFeaturesBeforeAllWalls} from \"../../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\n\r\n// () = ()\r\n\r\nexport default class CenterIsland extends Part {\r\n static id = 'CenterIsland';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'CenterIsland';\r\n this.partThumbnail = centerIslandThumbnail;\r\n this.translateId = \"visualizer.kitchen.center_island\";\r\n\r\n // related items\r\n this.cabinet = null;\r\n this.countertop = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n this.edge = null;\r\n this.islandHood = null;\r\n this.relatedGroupNames = [\"Center Island\", \"Center Island Countertop\", \"Faucet\", \"Sink\", \"Edge Profile\",\r\n \"Island Hood\", \"Stovetop\", \"Pendants\", \"Right Island\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Center Island\":\r\n case \"Cabinets Center Island\":\r\n case \"Center Island Cabinet\":\r\n relatedItemName = \"cabinet\";\r\n RelatedItemClass = Cabinet;\r\n break;\r\n case \"Center Island Countertop\":\r\n case \"Countertop Center Island\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Faucet\":\r\n if (loadFeature && ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || (!dbFeature.metaData[\"Placement\"] && !dbFeature.s3Bindings))) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if (loadFeature && ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || (!dbFeature.metaData[\"Placement\"] && !dbFeature.s3Bindings))) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Edge Profile\":\r\n case \"Edge\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = Edge;\r\n break;\r\n case \"Island hood\":\r\n case \"Island Hood\":\r\n relatedItemName = \"islandHood\";\r\n RelatedItemClass = IslandHood;\r\n break;\r\n case \"Island Stove\":\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n break;\r\n case \"Pendants\":\r\n relatedItemName = \"pendants\";\r\n RelatedItemClass = Pendants;\r\n break;\r\n case \"Right Island\":\r\n relatedItemName = \"rightIsland\";\r\n RelatedItemClass = RightIsland;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature, shouldLoadInDifferentGroups)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"center_island_handle\") {\r\n item.visible = item.features.filter(f => f.matchesMetaForArrayOfConditions(item.getArrayOfConditions())).length;\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getCabinetType() {\r\n return this.cabinet && this.cabinet.activeFeature\r\n ? this.cabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]\r\n : \"\"\r\n }\r\n\r\n getChairType() {\r\n return this.chairs && this.chairs.activeFeature\r\n ? this.chairs.activeFeature.dbFeature.metaData[\"Chair\"]\r\n : \"\"\r\n }\r\n\r\n setSpecificRules() {\r\n if (this.edge) {\r\n this.edge.setEdgeNotInVisualizer()\r\n }\r\n }\r\n\r\n setPrevioslySelected(featureGroup) {\r\n setActiveFeaturesBeforeAllWalls(featureGroup.partId === \"center_island_cabinet\" ? CABINET_GROUP : COUNTERTOP_GROUP);\r\n }\r\n\r\n}\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport NavItemPositionModalButton from \"./navItemPositionModalButton\";\r\nimport {toggleNavItemPositionModal} from \"../../../actions/navigationFunctions\";\r\nimport {CORNER_SHELVES_POSITIONS, PAN_POSITIONS, SIDE_POSITIONS} from \"../../bvSceneComponent/core/constants\";\r\n// import {SLAT_WALL_POSITIONS} from \"../../commonVisualizer/core/constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\nimport NavItemPositionModalSlatWall from \"./navItemPositionModalSlatWall\";\r\n// import NavItemPositionModalSlatWallButton from \"./navItemPositionModalSlatWallButton\";\r\n\r\nconst disallowBlurClasses = [\".nav-pos\", \".feature\", \".menu-list__item\", \".m-feature\"];\r\n\r\nconst getPositionsArray = (partId) => {\r\n switch (partId) {\r\n case \"corner_shelf\":\r\n return CORNER_SHELVES_POSITIONS\r\n // case \"slat_wall\":\r\n // return SLAT_WALL_POSITIONS\r\n case \"shower_pan_combo\":\r\n case \"shower_fixture\":\r\n case \"grab_bar\":\r\n case \"soap_dish\":\r\n return PAN_POSITIONS\r\n default:\r\n return document.kvConfig.visualizerType === \"bvState\" ? SIDE_POSITIONS : [\"L\",\"R\", \"C\"]\r\n // return [\"L\",\"R\", \"C\"]\r\n }\r\n}\r\n\r\nconst NavItemPositionModal = (props) => {\r\n\r\n const {navItemPositionModal, toggleNavItemPositionModal, activePartId, windowWidth, windowHeight, isWizard,\r\n activeFeature} = props;\r\n const [parent, setParent] = useState(null);\r\n const [checkboxesUpdated, setCheckboxesUpdated] = useState(true);\r\n const left = navItemPositionModal.popupPosition.left;\r\n const top = navItemPositionModal.popupPosition.top;\r\n\r\n const contextMenuBlur = (e) => {\r\n if (!disallowBlurClasses.some(cls => e.target.closest(cls)) && navItemPositionModal.popupOpened) {\r\n toggleNavItemPositionModal({\r\n popupOpened: false,\r\n activePartId: \"\"\r\n })\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener('click', contextMenuBlur);\r\n return () => {\r\n document.removeEventListener('click', contextMenuBlur)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [navItemPositionModal]);\r\n\r\n useEffect(() => {\r\n const layout = getCurrentLayout();\r\n setParent(layout.getFeatureGroupByPartId(activePartId))\r\n }, [activePartId]);\r\n\r\n const updateCheckboxes = () => {\r\n setCheckboxesUpdated(!checkboxesUpdated);\r\n };\r\n\r\n useEffect(() => {\r\n updateCheckboxes();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [left, top, activePartId]);\r\n\r\n if (!navItemPositionModal.popupOpened || !parent) { // added !parent because the buttons were transitioning the modal width after the parent is set\r\n return null\r\n }\r\n\r\n const isMobile = windowWidth < 991;\r\n const maxRight = left > windowWidth - 200;\r\n const fixedTop = top > (windowHeight - 130) ? windowHeight - 130 : top;\r\n //\r\n // console.log(\"windowHeight\", windowHeight);\r\n // console.log(\"top\", top);\r\n // console.log(\"fixedTop\", fixedTop);\r\n\r\n const styles = isMobile ? {\r\n left: maxRight ? \"auto\" : left + \"px\",\r\n top: fixedTop + \"px\",\r\n right: maxRight ? 0 : \"auto\"\r\n } : {\r\n transform: `translate(${maxRight ? left - 200 : left}px, ${fixedTop}px)`,\r\n }\r\n\r\n const triangleStyles = isMobile ? {\r\n left: left + \"px\",\r\n top: fixedTop + \"px\",\r\n position: \"fixed\",\r\n marginTop: 10,\r\n } : maxRight ? {\r\n left: \"auto\",\r\n right: \"40px\"\r\n } : {}\r\n\r\n const isShelf = activePartId === \"corner_shelf\";\r\n const isSlatWall = activePartId === \"slat_wall\";\r\n\r\n if (isSlatWall) {\r\n return \r\n }\r\n\r\n let positionsArray = getPositionsArray(activePartId);\r\n\r\n positionsArray = positionsArray.filter(pos => {\r\n return parent && parent.getMatchingPositionFeature(pos, activeFeature);\r\n });\r\n\r\n return (\r\n
    3 ? \" nav-pos--shelf\" : \"\")\r\n + (positionsArray.length === 3 ? \" nav-pos--three\" : \"\") + (isWizard ? \" nav-pos--wizard\" : \"\")}\r\n style={styles}>\r\n \r\n
    \r\n
    \r\n

    {isShelf ? \"Left\" : \"Side\"}

    \r\n
    \r\n {positionsArray.slice(0, 3).map((shelf, shelfIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n {isShelf && (positionsArray.length > 3) ? (\r\n
    \r\n

    Right

    \r\n
    \r\n {positionsArray.slice(3, 6).map((shelf, shelfIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavItemPositionModal.propTypes = {\r\n // feature: PropTypes.object.isRequired\r\n activeFeature: PropTypes.shape(featureInterface),\r\n isWizard: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {windowHeight, windowWidth} = store.serverState;\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n activeFeature: ownProps.activeFeature || store.selectionState.activeFeature,\r\n activePartId: store.navigationState.navItemPositionModal.activePartId,\r\n windowHeight,\r\n windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModal)\r\n","import {getQuotePriceWithTaxes, getTotalPrice, toFixedFeatureCost} from \"./misc/helpers\";\r\nimport store from \"./store\";\r\nimport {getAllFeatureFilters, getFilterGroupValue} from \"./misc/utils\";\r\nimport {filterCartItems} from \"./bvcomponents/look/lookNavigation/lookFunctions2\";\r\n\r\n\r\nexport const getAnalyticsEcommerceItem = (feature, quantity = 1, index = 0) => {\r\n if (!feature) {\r\n return false\r\n }\r\n const {fabricatorState, filterState} = store.getState();\r\n const {filterGroups} = filterState;\r\n\r\n let item_brand = \"\";\r\n const manufacturerFilterGroup = filterGroups.find(filterGroup => filterGroup.name.trim() === \"Manufacturer\");\r\n if (manufacturerFilterGroup) {\r\n const featureFilters = getAllFeatureFilters(feature);\r\n if (featureFilters && Array.isArray(featureFilters[manufacturerFilterGroup.id]) && featureFilters[manufacturerFilterGroup.id].length) {\r\n const filterValueObject = getFilterGroupValue(featureFilters[manufacturerFilterGroup.id][0], manufacturerFilterGroup)\r\n if (filterValueObject) {\r\n item_brand = filterValueObject.displayText;\r\n }\r\n }\r\n }\r\n\r\n const featureGroup = feature.getParent();\r\n const itemQuantity = Number.isInteger(quantity) ? quantity : 1;\r\n\r\n return {\r\n item_id: feature.dbFeature.sku, // \"SKU_12345\"\r\n item_name: feature.getCustomFullDisplayName(), // \"Stan and Friends Tee\",\r\n affiliation: fabricatorState.companyName || \"\", // \"Google Merchandise Store\",\r\n coupon: \"\", // \"SUMMER_FUN\", // we never have any\r\n discount: 0.00, // 2.22 // we are not using them yet\r\n index,\r\n item_brand, // \"Google\", // Manufacturer filter\r\n item_category: feature.dbFeature.lixilProductCategory || \"\", // \"Apparel\",\r\n item_category2: feature.dbFeature.lixilProductSubCategory || \"\", // \"Adult\",\r\n item_category3: feature.getCollectionName(filterGroups), // \"Shirts\",\r\n item_category4: \"\", // \"Crew\",\r\n item_category5: \"\", // \"Short sleeve\",\r\n item_list_id: feature.partId, // \"related_products\",\r\n item_list_name: featureGroup.dbName || featureGroup.partName || \"\", //\"Related Products\",\r\n item_variant: feature.getColorName(filterGroups), // \"green\",\r\n location_id: \"\", // \"ChIJIQBpAG2ahYAR_6128GcTUEo\",\r\n price: +toFixedFeatureCost(feature, itemQuantity),\r\n quantity: itemQuantity\r\n }\r\n}\r\n\r\nexport const getAnalyticsEcommerceValues = (cartItemsToCount) => {\r\n const {cartState, fabricatorState} = store.getState();\r\n const cartItems = cartItemsToCount || cartState.cartItems;\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n const cartItemsToInclude = filterCartItems(cartItems);\r\n const totalPrice = getTotalPrice(null, false, cartItemsToInclude);\r\n\r\n const tax = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes.reduce((acc, tax) => acc + tax.materialTax, 0)\r\n : totalPrice.materialTaxes\r\n\r\n return {\r\n currency: fabricatorSettings.currency,\r\n value: getQuotePriceWithTaxes(totalPrice),\r\n items: cartItemsToInclude.map((cartItem, cartItemIndex) => {\r\n return getAnalyticsEcommerceItem(cartItem.cartFeature, cartItem.quantity, cartItemIndex)\r\n }),\r\n tax: tax || 0,\r\n shipping: totalPrice.totalDeliveryCost || 0,\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl, FormattedHTMLMessage} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport LookListContentHeaderRightSide from \"../../list/lookListContentHeaderRightSide\";\r\nimport {setLookOpened, setLookPageOpened} from \"../../../../actions/lookFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport GroheCartStepper from \"./groheCartStepper\";\r\n\r\nconst GroheCartHeaderCommon = (props) => {\r\n\r\n const {title, subTitle, afterTitle, withSave, intl, history, location, isMobile, setLookPageOpened, setLookOpened,\r\n className, subTitleValues} = props;\r\n\r\n const closeCartClick = () => {\r\n setLookPageOpened(\"\");\r\n setLookOpened(null);\r\n history.push(ROUTES.home);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {isMobile ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n

    \r\n {afterTitle}\r\n

    \r\n {subTitle ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n
    \r\n {location && (location.pathname !== ROUTES.cartSuccess) ? (\r\n
    \r\n \r\n {withSave ? null : }\r\n
    \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nGroheCartHeaderCommon.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n subTitle: PropTypes.string,\r\n className: PropTypes.string,\r\n afterTitle: PropTypes.any,\r\n withSave: PropTypes.bool,\r\n subTitleValues: PropTypes.object,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n return {\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookPageOpened,\r\n setLookOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheCartHeaderCommon)\r\n )\r\n)\r\n","//********* SQFT *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowManualCalculation = (showManualCalculation) => ({\r\n type: types.TOGGLE_SHOW_MANUAL_CALCULATION,\r\n payload: {showManualCalculation}\r\n});\r\n\r\nexport const setSwitcherPosition = (switcherPosition) => ({\r\n type: types.SET_SWITCHER_POSITION,\r\n payload: {switcherPosition}\r\n});\r\n\r\nexport const addManualCalculateRow = (type) => ({\r\n type: types.ADD_MANUAL_CALCULATION_ROW,\r\n payload: {type}\r\n});\r\n\r\nexport const updateManualCalculateRow = (type, row, updatedRowValue) => ({\r\n type: types.UPDATE_MANUAL_CALCULATION_ROW,\r\n payload: {type, row, updatedRowValue}\r\n});\r\n\r\nexport const updateManualCalculateRows = (manualCalculationRows) => ({\r\n type: types.UPDATE_MANUAL_CALCULATION_ROWS,\r\n payload: manualCalculationRows\r\n});\r\n\r\nexport const deleteManualCalculateRow = (type, id) => ({\r\n type: types.DELETE_MANUAL_CALCULATION_ROW,\r\n payload: {type, id}\r\n});\r\n","import { hashHistory } from 'react-router';\r\nimport store from '../store';\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {switchToWizardItem} from \"../bvcomponents/qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport const changeRoutePath = (activePart, nextRelatedItemIndex, withHidden = true) => {\r\n let selectionGroup = store.getState().selectionState.selectionGroup;\r\n if (!selectionGroup) {\r\n return\r\n }\r\n const partName = selectionGroup.toLowerCase();\r\n // console.log('activePart', activePart);\r\n if (!activePart) {\r\n return\r\n }\r\n if (activePart.menuType === 0 || activePart.partName === \"Toilet\") {\r\n const nextPath = 'materials/'+partName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n } else {\r\n const part = activePart.subParts(withHidden)[nextRelatedItemIndex];\r\n if (part) {\r\n const subPartName = part.part.partName.toLowerCase().replace(\" \",\"-\");\r\n const nextPath = 'materials/'+partName+'/'+subPartName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const getMaterialsFixedName = (qtCategoryName = \"\") => {\r\n return qtCategoryName.replace(/ /g,\"-\").replace(/\\//g,\"-\").toLowerCase()\r\n}\r\n\r\nexport const changeQTRoutePath = (qtCategoryName, nextRelatedItemIndex) => {\r\n\r\n const {wizardIsActive, wizardActiveItem} = store.getState().wizardState;\r\n if (wizardIsActive) {\r\n switchToWizardItem(wizardActiveItem);\r\n return\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!qtCategoryName) {\r\n qtCategoryName = store.getState().qtState.qtActiveCategory || layout.qtCategories[0].name;\r\n }\r\n if (!nextRelatedItemIndex && (nextRelatedItemIndex !== 0)) {\r\n nextRelatedItemIndex = store.getState().selectionState.activePartRelatedItemIndex;\r\n }\r\n let qtCategory = layout.qtCategories.find(qtCat => qtCat.name === qtCategoryName);\r\n if (!qtCategory) { //cases when we switched visualizer type and qtCategoryName is still an old one\r\n qtCategory = layout.qtCategories[0];\r\n }\r\n let partName = getMaterialsFixedName(qtCategoryName);\r\n let nextSubPart = qtCategory.subParts[nextRelatedItemIndex] || qtCategory.subParts[0];\r\n if (!nextSubPart) {\r\n console.log(\"ERROR, no subparts exist in the category\", qtCategory);\r\n if (layout.qtCategories[0] && layout.qtCategories[0].subParts.length) {\r\n hashHistory.push('materials/'+partName);\r\n return\r\n } else {\r\n for (let i = 0; i < layout.qtCategories.length; i++) {\r\n // here we check at least some category which has featureGroup with features!\r\n if (layout.qtCategories[i] && layout.qtCategories[i].subParts.length) {\r\n partName = getMaterialsFixedName(layout.qtCategories[i].name);\r\n nextSubPart = layout.qtCategories[i].subParts[0];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!nextSubPart) {\r\n hashHistory.push(\"/materials\");\r\n return;\r\n }\r\n const subPartName = getMaterialsFixedName(nextSubPart.part.partName);\r\n const nextPath = 'materials/'+partName+'/'+subPartName;\r\n if (!window.location.href.includes(nextPath)) {\r\n hashHistory.push(nextPath);\r\n }\r\n\r\n return nextSubPart\r\n\r\n};\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from 'jquery';\r\nimport {connect} from \"react-redux\";\r\n\r\nimport DemoPoint from \"./demoPoint\";\r\nimport Config from \"../../../config\";\r\n\r\nclass DemoPoints extends React.Component {\r\n\r\n static propTypes = {\r\n layoutFeatures: PropTypes.array.isRequired,\r\n layoutType: PropTypes.number.isRequired,\r\n canvasId: PropTypes.string.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n points: [],\r\n currentLayoutType: null,\r\n dimensions: {\r\n width: this.props.canvasDimensions.width,\r\n height: this.props.canvasDimensions.height\r\n },\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setPoints(this.props);\r\n this.handleResize();\r\n $(window).on('resize', this.handleResize);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.state.currentLayoutType !== nextProps.layoutType) {\r\n this.setPoints(nextProps);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off('resize', this.handleResize);\r\n }\r\n\r\n setPoints = (nextProps) => {\r\n const points = [];\r\n nextProps.layoutFeatures.forEach((parentGroup) => {\r\n // console.log(\"parentGroup\", parentGroup);\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n if (parentGroup.partName === \"Walls\") {\r\n const pointB = this.getBathroomPointPositionByPartName(\"Wall B\");\r\n const pointC = this.getBathroomPointPositionByPartName(\"Wall C\");\r\n points.push(pointB, pointC);\r\n } else if (parentGroup.partName === \"Vanity\") {\r\n const vanity = this.getBathroomPointPositionByPartName(\"Vanity\");\r\n const mirror = this.getBathroomPointPositionByPartName(\"Mirror\");\r\n points.push(vanity, mirror);\r\n } else if (!(nextProps.layoutType === 0 &&\r\n (parentGroup.partName === \"Window\" || parentGroup.partName === \"Bathtub\"))) {\r\n const point = this.getBathroomPointPositionByPartName(parentGroup.partName, nextProps);\r\n if (point.left || point.top) {\r\n points.push(point);\r\n }\r\n }\r\n break;\r\n }\r\n case \"bvScene\": {\r\n const bvScenePoints = [\r\n {\r\n partId: \"shower_head\",\r\n left: 925,\r\n top: 400,\r\n },\r\n {\r\n partId: \"toilet\",\r\n left: 380,\r\n top: 820,\r\n },\r\n {\r\n partId: \"vanity_sink\",\r\n left: 530,\r\n top: 670,\r\n },\r\n {\r\n partId: \"bathtub_body\",\r\n left: 1520,\r\n top: 760,\r\n },\r\n ]\r\n parentGroup.relatedItems.forEach(relItem => {\r\n const relPoint = bvScenePoints.find(bvScenePoint => {\r\n return bvScenePoint.partId === relItem.partId && !relItem.disabled\r\n })\r\n if (relPoint) {\r\n points.push(relPoint)\r\n }\r\n });\r\n break;\r\n }\r\n case \"Kitchen\":\r\n case \"KV\": {\r\n switch (parentGroup.partName) {\r\n case \"Walls\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"left_wall\"),\r\n this.getKitchenPointPosition(\"right_wall\"),\r\n this.getKitchenPointPosition(\"ceiling\")\r\n );\r\n break;\r\n }\r\n case \"Appliances\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"hood\"),\r\n this.getKitchenPointPosition(\"range\"),\r\n this.getKitchenPointPosition(\"fridge\"),\r\n this.getKitchenPointPosition(\"dishwasher\")\r\n );\r\n break;\r\n }\r\n case \"Countertop\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"countertop3\"),\r\n this.getKitchenPointPosition(\"sink1\")\r\n );\r\n break;\r\n }\r\n case \"Cabinet\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"top_cabinet\"),\r\n this.getKitchenPointPosition(\"top_cabinet2\"),\r\n this.getKitchenPointPosition(\"bottom_cabinet\")\r\n );\r\n break;\r\n }\r\n case \"CenterIsland\": {\r\n points.push(\r\n this.getKitchenPointPosition(\"center_island_counterop\"),\r\n this.getKitchenPointPosition(\"center_island_cabinet\"),\r\n this.getKitchenPointPosition(\"center_island_chairs\")\r\n );\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n this.setState({\r\n points,\r\n currentLayoutType: nextProps.layoutType\r\n });\r\n };\r\n\r\n handleResize = () => {\r\n const canvas = $(document.getElementById(this.props.canvasId));\r\n this.setState({\r\n dimensions: {\r\n width: canvas.width(),\r\n height: canvas.height()\r\n }\r\n });\r\n };\r\n\r\n getBathroomPointPositionByPartName = (partName, nextProps = this.props) => {\r\n switch (partName) {\r\n case \"Vanity\":\r\n return {\r\n left: 356,\r\n top: 720,\r\n };\r\n case \"Mirror\":\r\n return {\r\n left: 318,\r\n top: 422,\r\n };\r\n case \"Toilet\":\r\n return {\r\n left: 625,\r\n top: 740,\r\n };\r\n case \"Floor\":\r\n return {\r\n left: nextProps.layoutType === 0 ? 762 : 990,\r\n top: 990,\r\n };\r\n case \"Window\":\r\n return {\r\n left: 1290,\r\n top: 475,\r\n };\r\n case \"Bathtub\":\r\n return {\r\n left: 1450,\r\n top: 915,\r\n };\r\n case \"Shower\":\r\n return {\r\n left: 930,\r\n top: 600,\r\n };\r\n case \"Wall B\":\r\n return {\r\n left: 600,\r\n top: 440,\r\n };\r\n case \"Wall C\":\r\n return {\r\n left: 1480,\r\n top: 580,\r\n };\r\n default :\r\n return {\r\n left: 0,\r\n top: 0,\r\n }\r\n }\r\n };\r\n\r\n getKitchenPointPosition = (partId, nextProps = this.props) => {\r\n nextProps === 12 ? null : false;\r\n switch (partId) {\r\n case \"left_wall\":\r\n return {\r\n left: 450,\r\n top: 550,\r\n };\r\n case \"right_wall\":\r\n return {\r\n left: 1050,\r\n top: 550,\r\n };\r\n case \"ceiling\":\r\n return {\r\n left: 740,\r\n top: 120,\r\n };\r\n case \"hood\":\r\n return {\r\n left: 1020,\r\n top: 400,\r\n };\r\n case \"range\":\r\n return {\r\n left: 1000,\r\n top: 680,\r\n };\r\n case \"fridge\":\r\n return {\r\n left: 175,\r\n top: 600,\r\n };\r\n case \"dishwasher\":\r\n return {\r\n left: 720,\r\n top: 655,\r\n };\r\n case \"top_cabinet\":\r\n return {\r\n left: 740,\r\n top: 410,\r\n };\r\n case \"top_cabinet2\":\r\n return {\r\n left: 1380,\r\n top: 370,\r\n };\r\n case \"bottom_cabinet\":\r\n return {\r\n left: 1260,\r\n top: 780,\r\n };\r\n case \"center_island_counterop\":\r\n return {\r\n left: 600,\r\n top: 750,\r\n };\r\n case \"center_island_cabinet\":\r\n return {\r\n left: 1040,\r\n top: 890,\r\n };\r\n case \"center_island_chairs\":\r\n return {\r\n left: 390,\r\n top: 870,\r\n };\r\n case \"sink1\":\r\n return {\r\n left: 1430,\r\n top: 670,\r\n };\r\n case \"countertop3\":\r\n return {\r\n left: 1450,\r\n top: 930,\r\n };\r\n default :\r\n return {\r\n left: 0,\r\n top: 0,\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n return this.state.dimensions.width && this.state.dimensions.height && !dashboardFramed ? (\r\n
    \r\n {this.state.points.map((point, index) => {\r\n const pointResponsive = {\r\n left: point.left * (this.state.dimensions.width / this.props.canvasDimensions.width),\r\n top: point.top * (this.state.dimensions.height / this.props.canvasDimensions.height),\r\n };\r\n return \r\n })}\r\n
    \r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasDimensions} = store.bathroomVisualizerState;\r\n return {\r\n canvasDimensions,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DemoPoints)\r\n","import React from \"react\";\r\n\r\nimport Misc from './../../misc/misc';\r\nimport {getMousePos, requestAnimFrame, isTouchDevice} from \"../../misc/utils\";\r\nimport {isIE} from \"../../misc/helpers\";\r\nimport {loaderDisable} from \"../ui/loaderView\";\r\nimport enhanceCanvas from \"./canvasEnhancements\";\r\n// import {UseFullSizeImages} from \"../../config\";\r\nimport {getBackgroundLayers} from \"../../misc/getCanvasImageFromLayout\";\r\nimport ImageCanvasCommon from \"./imageCanvasCommon\";\r\n\r\n// import { getHoverZonesForPreset, getHoveringZone, hoverImages } from \"./imageCanvasTouchZones\";\r\n\r\nexport default class ImageCanvasCommonNew extends ImageCanvasCommon {\r\n\r\n finishDraw = (images, layers, alreadyRenderedImages, errorImages, callback) => {\r\n clearTimeout(this.id);\r\n this.id = 0;\r\n let copyImages = null;\r\n\r\n const {width, height} = this.props;\r\n\r\n // const fullImagesFactor = UseFullSizeImages ? 100 : 54;\r\n\r\n if (this.props.useMouseHovering && (this.shouldUpdateGreenZone || !this.state.layersHoverings.length)) {\r\n copyImages = [...images];\r\n }\r\n\r\n const backgroundLayers = getBackgroundLayers(layers, null, true);\r\n\r\n // console.log(\"layers\", layers);\r\n\r\n if (backgroundLayers.length) { // draw backgrounds first\r\n this.backCtxBg.clearRect(0, 0, width, height); // clear previous\r\n\r\n images.forEach((imageObject) => {\r\n if (imageObject.src.includes(\"data:image\") || errorImages.includes(imageObject.src)) {\r\n return\r\n }\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n this.drawImage(layer, imageObject, this.backCtxBg, width, height)\r\n }\r\n imageObject = null;\r\n });\r\n enhanceCanvas(this.canvasBg);\r\n this.backCtx.drawImage(this.canvasBg, 0, 0, width, height, 0, 0, width, height);\r\n const greenImage = images.find((imageObject) => imageObject.src.includes(\"data:image\"));\r\n if (greenImage) {\r\n const layer = backgroundLayers.find(layer => layer.image === greenImage.src);\r\n if (layer) {\r\n this.drawImage(layer, greenImage, this.backCtx, width, height)\r\n }\r\n }\r\n }\r\n\r\n images.forEach((loadedImage) => {\r\n if (errorImages.includes(loadedImage.src)) {\r\n return\r\n }\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && (!backgroundLayers.length || (layer.zIndex < backgroundLayers[backgroundLayers.length - 1].zIndex))) {\r\n this.drawImage(layer, loadedImage, this.backCtx, width, height)\r\n }\r\n loadedImage = null;\r\n });\r\n\r\n // this.ctx.drawImage(this.backCtx.canvas, 0, 0);\r\n requestAnimFrame(this.ctx.drawImage(this.backCtx.canvas, 0, 0));\r\n\r\n if (this.props.useMouseHovering) {\r\n const isMobile = Misc.isMobile() || isTouchDevice();\r\n if (!isMobile && !isIE() && !this.state.mouseMoveSet && this.canvas) {\r\n this.setOnMouseMove();\r\n }\r\n this.setState({\r\n alreadyRenderedImages\r\n });\r\n if (this.shouldUpdateGreenZone || !this.state.layersHoverings.length) {\r\n this.setLayersHoverings(layers, copyImages, errorImages)\r\n }\r\n }\r\n\r\n if (!window.requestInProcess) {\r\n if (this.props.setShowCanvasLoader) {\r\n this.props.setShowCanvasLoader(false)\r\n } else {\r\n this.props.disableLoader ? this.props.disableLoader() : loaderDisable();\r\n }\r\n }\r\n\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n\r\n if (callback) {\r\n callback()\r\n }\r\n };\r\n\r\n getGliaImage = () => {\r\n return (\r\n
    \r\n this.canvasImg = el} alt=\"\" id={this.props.canvasId + \"Img\"}\r\n className=\"canvas-co-image blurred\" />\r\n
    \r\n )\r\n };\r\n\r\n nonTransparentPixelHovered = (mousePosArray, layerHovering) => {\r\n const x1 = layerHovering.layer.cropCoords ? layerHovering.layer.cropCoords[0] : layerHovering.layerDimensions.polygonArray[0][0];\r\n const y1 = layerHovering.layer.cropCoords ? layerHovering.layer.cropCoords[1] : layerHovering.layerDimensions.polygonArray[0][1];\r\n return mousePosArray.some(mousePos => {\r\n let pixelHovered = null;\r\n try {\r\n pixelHovered = layerHovering.context2D.getImageData(\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - x1,\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - y1,\r\n 1,\r\n 1,\r\n {willReadFrequently: true}).data[3]\r\n } catch (e) {\r\n console.log(\"can't find hovered pixel\",\r\n layerHovering.context2D,\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - x1,\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - y1\r\n );\r\n }\r\n return pixelHovered > 120\r\n })\r\n }\r\n\r\n setHoveredLayer = (evt) => {\r\n\r\n if (window.touchMove) {\r\n return false\r\n }\r\n\r\n if (this.pinchZoom) {\r\n this.canvas_scale = this.pinchZoom.getScale();\r\n if (this.canvas_scale !== 1) {\r\n return false\r\n }\r\n }\r\n\r\n const {layout} = this.props;\r\n const canvas = this.canvas;\r\n let mousePos = getMousePos(evt, canvas);\r\n let hovered = false;\r\n\r\n // console.log('mousePos', mousePos);\r\n\r\n if (this.pinchZoom) {\r\n this.canvas_scale = this.pinchZoom.getScale();\r\n }\r\n\r\n if (mousePos && (window.innerWidth < 480)) { // rotated version\r\n let temp = mousePos.x;\r\n // noinspection JSSuspiciousNameCombination\r\n mousePos.x = mousePos.y;\r\n mousePos.y = this.canvas.offsetHeight - temp;\r\n // console.log('mousePos2', mousePos);\r\n }\r\n\r\n if (this.state.layersHoverings.length) {\r\n let i = 0;\r\n for (i; i < this.state.layersHoverings.length; i++) {\r\n const layerHovering = this.state.layersHoverings[i];\r\n if ( mousePos\r\n && layerHovering\r\n && layerHovering.layerDimensions\r\n && !this.layerIsExcludedFromHover(layerHovering.layer, layout)\r\n // && pnpoly(layerHovering.layerDimensions.polygonArray, mousePos)\r\n ) {\r\n let mousePosArray = [mousePos];\r\n if (layout.checkMorePointsPartIds && layout.checkMorePointsPartIds.includes(layerHovering.layer.partId)) {\r\n for (let k = 1; k <= 20; k++) {\r\n mousePosArray = [\r\n ...mousePosArray,\r\n {x: mousePos.x - k, y: mousePos.y - k},\r\n {x: mousePos.x + k, y: mousePos.y - k},\r\n {x: mousePos.x - k, y: mousePos.y + k},\r\n {x: mousePos.x + k, y: mousePos.y + k},\r\n {x: mousePos.x - k, y: mousePos.y},\r\n {x: mousePos.x + k, y: mousePos.y},\r\n {x: mousePos.x, y: mousePos.y - k},\r\n {x: mousePos.x, y: mousePos.y + k},\r\n ]\r\n }\r\n }\r\n // console.log(\"checkMorePointsPartIds\", mousePosArray);\r\n if (this.nonTransparentPixelHovered(mousePosArray, layerHovering)) {\r\n hovered = true;\r\n document.hoveredLayer = layerHovering.layer;\r\n document.hoveredMousePos = mousePos;\r\n if (!isIE() && (this.activeGreenZoneIndex !== layerHovering.layer.zIndex)) {\r\n // console.log('layerHovering active = ', layerHovering);\r\n this.activeGreenZoneIndex = layerHovering.layer.zIndex;\r\n this.renderGreenLayer(layerHovering);\r\n }\r\n\r\n break; // break for...of loop\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!hovered) {\r\n document.hoveredLayer = null;\r\n this.draw(this.state.layers); // reload all layers without hovered\r\n }\r\n\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex, partId) => {\r\n if (!isIE()) {\r\n const neededLayerHovering = this.state.layersHoverings.find((layerHovering) => {\r\n if (partId) {\r\n return layerHovering.layer.zIndex === zIndex && layerHovering.layer.partId === partId\r\n }\r\n return layerHovering.layer.zIndex === zIndex\r\n });\r\n neededLayerHovering ? this.renderGreenLayer(neededLayerHovering, true) : this.draw(this.state.layers)\r\n }\r\n };\r\n\r\n drawImage = (layer, imageObject, canvasContext, width, height) => {\r\n try {\r\n if (layer.cropCoords) {\r\n let layerWidth = layer.cropCoords[2] - layer.cropCoords[0];\r\n let layerHeight = layer.cropCoords[3] - layer.cropCoords[1];\r\n canvasContext.drawImage(imageObject, 0, 0, layerWidth, layerHeight, layer.cropCoords[0], layer.cropCoords[1], layerWidth, layerHeight);\r\n } else if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n const firstX = layer.isGreenHovering ? 0 : dim.polygonArray[0][0]; // green is already cropped\r\n const firstY = layer.isGreenHovering ? 0 : dim.polygonArray[0][1]; // green is already cropped\r\n canvasContext.drawImage(imageObject, firstX, firstY, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n // } else if (loadedImage.coords) {\r\n // loadedImage.width = loadedImage.width*fullImagesFactor/100;\r\n // loadedImage.height = loadedImage.height*fullImagesFactor/100;\r\n // const max_x = loadedImage.coords.max_x*fullImagesFactor/100;\r\n // const min_x = this.props.width*loadedImage.coords.min_x;\r\n // const min_y = this.props.height*loadedImage.coords.min_y;\r\n // const max_y = loadedImage.coords.max_y*fullImagesFactor/100;\r\n // const width = max_x - min_x;\r\n // const height = max_y - min_y;\r\n // console.log('width', width);\r\n // console.log('height', height);\r\n // console.log('min_x', min_x);\r\n // console.log('min_y', min_y);\r\n // console.log('max_x', max_x);\r\n // console.log('max_y', max_y);\r\n // this.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } else {\r\n // imageObject.width = width;\r\n // imageObject.height = height;\r\n canvasContext.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n } catch (e) {\r\n console.log(\"canvas context cant draw image\", imageObject);\r\n }\r\n }\r\n\r\n onMouseDown = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseDown) {\r\n this.pinchZoom.onMouseDown(event)\r\n }\r\n }\r\n\r\n onMouseMove = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseMove) {\r\n this.pinchZoom.onMouseMove(event)\r\n }\r\n }\r\n\r\n onMouseUp = (event) => {\r\n if (this.pinchZoom && this.pinchZoom.onMouseUp) {\r\n this.pinchZoom.onMouseUp(event, this.props.lookCanvasClick) // we should be here always // callback is passed to execute after drag n drop\r\n } else if (this.props.lookCanvasClick) {\r\n this.props.lookCanvasClick()\r\n }\r\n }\r\n\r\n render() {\r\n const style = {};\r\n if (this.props.transform) {\r\n style.transform = this.props.transform\r\n }\r\n return (\r\n //
    \r\n
    \r\n {/*
    */}\r\n {/* {this.pinchZoom ? this.pinchZoom.el.style.transform + \" // \" + this.pinchZoom.container.style.transform : null}*/}\r\n {/*
    */}\r\n {this.props.useMouseHovering ? this.getGliaImage() : null}\r\n this.canvas = el}\r\n className={\"canvas-el\" + (this.props.useMouseHovering ? \" canvas-el--pointer\" : \"\")}\r\n onMouseDown={this.onMouseDown}\r\n onMouseMove={this.onMouseMove}\r\n onMouseUp={this.onMouseUp}\r\n onDoubleClick={null}\r\n id={this.props.canvasId}\r\n width={this.props.width}\r\n height={this.props.height}\r\n // onTouchStart={this.moveStart}\r\n // onTouchMove={this.move}\r\n // onTouchEnd={this.moveEnd}\r\n data-mobile={Misc.isMobile() || isTouchDevice()}\r\n style={style} />\r\n
    \r\n );\r\n }\r\n\r\n}\r\n","import React from \"react\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst GroheCartStickyFooter = (props) => {\r\n\r\n const {stickyFooterButtons} = props;\r\n\r\n return (\r\n
    \r\n {stickyFooterButtons.map(button => (\r\n \r\n ))}\r\n
    \r\n )\r\n};\r\n\r\nexport default GroheCartStickyFooter\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nexports.showLoading = exports.resetLoading = exports.loadingBarReducer = exports.loadingBarMiddleware = exports.LoadingBar = exports.ImmutableLoadingBar = exports.hideLoading = undefined;\r\n\r\nvar _loading_bar = require('./loading_bar');\r\n\r\nvar _loading_bar2 = _interopRequireDefault(_loading_bar);\r\n\r\nvar _loading_bar_middleware = require('./loading_bar_middleware');\r\n\r\nvar _loading_bar_middleware2 = _interopRequireDefault(_loading_bar_middleware);\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar _immutable = require('./immutable');\r\n\r\nvar _immutable2 = _interopRequireDefault(_immutable);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\r\n\r\nexports.hideLoading = _loading_bar_ducks.hideLoading;\r\nexports.ImmutableLoadingBar = _immutable2.default;\r\nexports.LoadingBar = _loading_bar.LoadingBar;\r\nexports.loadingBarMiddleware = _loading_bar_middleware2.default;\r\nexports.loadingBarReducer = _loading_bar_ducks.loadingBarReducer;\r\nexports.resetLoading = _loading_bar_ducks.resetLoading;\r\nexports.showLoading = _loading_bar_ducks.showLoading;\r\nexports.default = _loading_bar2.default;","import {getFeatureCost} from \"./helpers\";\r\nimport {BATHROOM_VISUALIZER_TYPES} from \"../config\";\r\n\r\n/**\r\n * returns feature compressed object that can be passed on the backend (without redundant info)\r\n * @param fromCartItem {cartItemInterface}\r\n * @param fromFeature {featureInterface}\r\n * @param quoteIndex {number}\r\n * @returns {object}\r\n */\r\nexport const getCompressedFeature = (fromCartItem, fromFeature, quoteIndex = 0) => {\r\n if (!fromFeature || !fromFeature.dbFeature) {\r\n return null\r\n }\r\n const currentQuote = fromCartItem && Number.isInteger(fromCartItem.currentQuote) ? fromCartItem.currentQuote : quoteIndex;\r\n const compressedDbFeature = {\r\n partName: fromFeature.partName,\r\n sharedFeatureName: fromFeature.dbFeature.sharedFeatureName,\r\n dbFeatureId: fromFeature.dbFeature.id,\r\n sku: fromFeature.dbFeature.sku,\r\n partId: fromFeature.partId,\r\n featureDefinitionID: fromFeature.dbFeature.featureDefinitionID,\r\n noteText: fromFeature.notesList[currentQuote], // we don't restore noteText from here, we take it from getCompressedCartItem\r\n }\r\n if (fromFeature.dbFeature.priceWasChanged) {\r\n compressedDbFeature.customCost = fromFeature.dbFeature.cost; // to restore job feature prices\r\n compressedDbFeature.customPrice = fromFeature.dbFeature.price; // to restore job feature prices\r\n }\r\n if (fromFeature.dbFeature.markUpString) {\r\n compressedDbFeature.markUpString = fromFeature.dbFeature.markUpString; // to be able to compare! not needed for now\r\n }\r\n return compressedDbFeature\r\n}\r\n\r\n/**\r\n * returns cart item compressed object that can be passed on the backend // IS NOT USED IN PARSE RESPONSE ! ONLY NOTE TEXT IS USED\r\n * @param fromCartItem {cartItemInterface}\r\n // * @param fromFeature {featureInterface}\r\n // * @param quoteIndex {number}\r\n * @returns {object}\r\n */\r\nexport const getCompressedCartItem = (fromCartItem) => {\r\n if (!fromCartItem) {\r\n return null\r\n }\r\n const compressedCartItem = {\r\n partId: fromCartItem.partId,\r\n featureId: fromCartItem.cartFeature.dbFeature.featureDefinition_id,\r\n sku: fromCartItem.cartFeature.dbFeature.sku,\r\n quantity: fromCartItem.quantity,\r\n fabricatorFeatureId: fromCartItem.cartFeature.dbFeature.id,\r\n calculatedCost: getFeatureCost(fromCartItem.cartFeature, fromCartItem.quantity, fromCartItem.fromQtCategory),\r\n noteText: fromCartItem.noteText,\r\n addedBy: fromCartItem.addedBy,\r\n isRemoved: fromCartItem.isRemoved,\r\n }\r\n if (fromCartItem.cartFeature.dbFeature.priceWasChanged) {\r\n compressedCartItem.customCost = fromCartItem.cartFeature.dbFeature.cost; // to restore job feature prices\r\n compressedCartItem.customPrice = fromCartItem.cartFeature.dbFeature.price; // to restore job feature prices\r\n }\r\n if (fromCartItem.cartFeature.dbFeature.markUpString) {\r\n compressedCartItem.markUpString = fromCartItem.cartFeature.dbFeature.markUpString; // to be able to compare! not needed for now\r\n }\r\n return compressedCartItem\r\n}\r\n\r\n/**\r\n * returns cart items compressed objects\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const getCompressedCartItems = (cartItems) => {\r\n return cartItems.map(ci => {\r\n if (!ci.cartFeature || !ci.cartFeature.dbFeature) {\r\n return null\r\n }\r\n const cartItem = Object.assign({}, ci, {\r\n cartFeature: getCompressedFeature(ci, ci.cartFeature),\r\n });\r\n if (ci.relatedProductParent) {\r\n cartItem.relatedProductParent = getCompressedFeature(ci, ci.relatedProductParent);\r\n }\r\n if (ci.bundleParentId) {\r\n cartItem.bundleParentId = ci.bundleParentId;\r\n }\r\n return cartItem\r\n }).filter(cartItem => !!cartItem)\r\n}\r\n\r\n\r\n/**\r\n * adds cookie to request data\r\n * @param data {object}\r\n * @returns {object}\r\n */\r\nexport const addGACookie = (data) => {\r\n try {\r\n if (!document.cookie) {\r\n return data\r\n }\r\n const getCookie = name => {\r\n const splitted = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));\r\n return splitted ? splitted[2] : \"\"\r\n };\r\n data.cookiesAll = document.cookie;\r\n data.cookie_ga = getCookie(\"_ga\");\r\n } catch (error) {\r\n console.log(\"can't access cookie\", error);\r\n }\r\n return data\r\n}\r\n\r\nexport const getCartItemPartIdFix = (partId) => {\r\n if ((partId !== \"shower_wall\") && (partId !== \"shower_interior_wall\")) {\r\n return partId\r\n }\r\n const isBathroom = BATHROOM_VISUALIZER_TYPES.includes(document.kvConfig.visualizerType);\r\n if (isBathroom) {\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n return \"shower_wall\"\r\n }\r\n return \"shower_interior_wall\"\r\n }\r\n return partId // just in case\r\n}\r\n\r\nexport const fixFeaturesResponse = (response) => {\r\n if (!response) {\r\n return []\r\n }\r\n if (Array.isArray(response)) {\r\n return response;\r\n }\r\n if (Array.isArray(response.features)) {\r\n if (Array.isArray(response.relatedFeatures) && response.relatedFeatures.length) {\r\n // for (let i = 0; i < response.relatedFeatures.length; i++) {\r\n // response.relatedFeatures[i].isRelatedDbFeature = true;\r\n // }\r\n // console.log(\"response.relatedFeatures\", response.relatedFeatures);\r\n return [...response.relatedFeatures, ...response.features] // we should always be here // related goes first\r\n }\r\n return response.features; // keep it as an array\r\n }\r\n return [];\r\n}\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setFabricatorSubscriptions = (fabricatorSubscriptions) => ({\r\n type: types.SET_FABRICATOR_SUBSCRIPTIONS,\r\n payload: {fabricatorSubscriptions}\r\n});\r\n\r\nexport const setInitialFlowAdditionalRooms = (initialFlowAdditionalRooms) => ({\r\n type: types.SET_INITIAL_FLOW_ADDITIONAL_ROOMS,\r\n payload: {initialFlowAdditionalRooms}\r\n});\r\n\r\nexport const setInitialFlowType = (initialFlowType) => ({\r\n type: types.SET_INITIAL_FLOW_BUTTON,\r\n payload: {initialFlowType}\r\n});\r\n\r\nexport const setInitialFlowRoom = (initialFlowRoom) => ({\r\n type: types.SET_INITIAL_FLOW_ROOM,\r\n payload: {initialFlowRoom}\r\n});\r\n\r\nexport const setInitialFlowVisualizerNotAvailable = (visualizerNotAvailable) => ({\r\n type: types.SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE,\r\n payload: {visualizerNotAvailable}\r\n});\r\n\r\nexport const setInitialFlowFinished = (initialFlowFinished) => ({\r\n type: types.SET_INITIAL_FLOW_FINISHED,\r\n payload: {initialFlowFinished}\r\n});\r\n\r\nexport const setInitialFlowRoomLayout = (initialFlowRoomLayout) => ({\r\n type: types.SET_INITIAL_FLOW_ROOM_LAYOUT,\r\n payload: {initialFlowRoomLayout}\r\n});\r\nexport const setInitialFlowStep = (initialFlowStep) => ({\r\n type: types.SET_INITIAL_FLOW_STEP,\r\n payload: {initialFlowStep}\r\n});\r\n","import $ from 'jquery';\r\n\r\nimport JsonApi from \"./jsonApi\";\r\nimport store from \"../store\";\r\nimport {loaderEnable, loaderDisable} from \"../bvcomponents/ui/loaderView\";\r\nimport * as types from \"../actions/actionTypes\";\r\nimport Misc from \"../misc/misc\";\r\nimport Config, {IS_LIXIL_UI, IS_OFFLINE_MODE, POST_MESSAGES} from \"../config\";\r\nimport Analytics from '../analytics';\r\nimport {saveQuote} from \"./server-api\";\r\nimport {\r\n renderErrorPopup,\r\n renderAccountNotActivatedErrorPopup,\r\n renderConfirmPopup,\r\n renderMessagePopup\r\n} from \"./api-popups\";\r\nimport {ConfirmPopupTypes, QuoteRequestType, UserAction} from \"../bvcomponents/visComponents/constants\";\r\nimport {setJobId, showCheckoutLayout, toggleUserPopup} from \"../actions/actionFunctions\";\r\nimport {showQuoteSavedNotification} from \"../bvcomponents/ui/successNotification\";\r\nimport ActionTypes from \"../misc/actionTypes\";\r\nimport {setAlreadyRegisteredUserInfo, setEmployeesList} from \"../actions/userFunctions\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport {addGACookie} from \"../misc/backendFunctions\";\r\n\r\n\r\nexport const scheduleCustomer = (data) => {\r\n loaderEnable(\"loader.scheduleCustomerText\", \"loader.scheduleCustomerTitle\");\r\n const state = store.getState();\r\n const {serverState} = state;\r\n let {time} = data;\r\n let am = true;\r\n if (time > 1200) {\r\n am = false;\r\n time -= 1200;\r\n }\r\n const scheduleData = {\r\n scheduleEntryData: {\r\n date: data.date,\r\n time: `${time / 100}:00`,\r\n am: am,\r\n duration: 60,\r\n alert: 30,\r\n appointmentType: 'Quote'\r\n },\r\n jobId: serverState.jobId,\r\n jobIdType: 'JobQuote'\r\n };\r\n\r\n JsonApi.scheduleCustomer(scheduleData)\r\n .then(response => {\r\n console.log('Schedule answer', response);\r\n loaderDisable();\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: false}\r\n })\r\n });\r\n};\r\n\r\nexport const setUserLoginResponse = (responseData,\r\n fromConfirmationDialog = false,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n showSchedule,\r\n checkout,\r\n userPopupType) => {\r\n console.log(responseData);\r\n // const saveQuoteAfterLogin = state.userState.saveQuoteAfterLogin;\r\n // if (!saveQuoteAfterLogin) {\r\n // loaderDisable();\r\n // }\r\n const state = store.getState();\r\n\r\n if (responseData.error) {\r\n Analytics.sendClickEvent(\"user-login-failure\");\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginFalse);\r\n }\r\n const {error} = responseData;\r\n loaderDisable();\r\n if (responseData.error.indexOf('has not been activated yet') !== -1) {\r\n const userInfo = store.getState().userState.userInfo;\r\n renderAccountNotActivatedErrorPopup(error, userInfo.email);\r\n } else {\r\n renderErrorPopup(responseData.error);\r\n }\r\n if (fromConfirmationDialog) {\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n }));\r\n }\r\n return false;\r\n }\r\n\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n\r\n // const docuSignObj = fabricatorSettings.docuSignAuth ? JSON.parse(fabricatorSettings.docuSignAuth) : null;\r\n // Config.setUserInfo(responseData);\r\n Analytics.sendClickEvent(\"user-login-success\");\r\n Analytics.setUserId(responseData.encodedUserId);\r\n Analytics.setExistingMixPanelPerson(responseData.email);\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginTrue);\r\n }\r\n const updatedUserInfo = Misc.parseUserResponse(responseData);\r\n // const isPhoneNumberValidated = responseData.isPhoneNumberValidated || !responseData.pendingPhoneVerification;\r\n const isPhoneNumberValidated = !fabricatorSettings.twoFA || responseData.isPhoneNumberValidated || !responseData.pendingPhoneVerification;\r\n\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false,\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated,\r\n userInfo: updatedUserInfo,\r\n // email: responseData.email,\r\n encodedUserId: responseData.encodedUserId,\r\n // phoneNumber: responseData.phoneNumber,\r\n // values: responseData.values\r\n }\r\n });\r\n\r\n if (responseData.billingAddress || responseData.shippingAddress) { // update user state\r\n store.dispatch(restorePaymentInfo(Misc.parseShippingAndBillingResponse(responseData)));\r\n }\r\n\r\n if (IS_LIXIL_UI) { // we don't go below, as we already have save in the lixil logic\r\n return {...responseData, isPhoneNumberValidated: isPhoneNumberValidated || !fabricatorSettings.twoFA}\r\n }\r\n\r\n if (fabricatorSettings.twoFA && responseData.pendingPhoneVerification) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {userPopupOpened: true}\r\n });\r\n } else {\r\n saveQuote({\r\n submit: true,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n fromCheckOutPage: window.location.href.includes('shoppingcart'),\r\n showContractSignOnError: true,\r\n showReceipt: false\r\n })\r\n .then((response) => {\r\n $(document).trigger(ActionTypes.USER_IS_LOGGED_IN); // click on the active item it the navigation\r\n if (response) {\r\n let responseDataBase = response;\r\n if (responseData) {\r\n responseDataBase = responseData;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);\r\n store.dispatch(setJobId(responseData.jobId));\r\n }\r\n if (showSchedule) {\r\n loaderDisable();\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup('userPopup.messageBox.appointmentRequested');\r\n }\r\n } else {\r\n loaderDisable();\r\n showQuoteSavedNotification(\r\n quoteRequestType === QuoteRequestType.RequestQuote\r\n ? \"successNotification.titleQuoteRequested\"\r\n : \"successNotification.titleQuoteSaved\"\r\n );\r\n // console.log('DS - login', fabricatorSettings.showPricing, docuSignObj);\r\n // if (fabricatorSettings.showPricing && docuSignObj && docuSignObj.isEnabled)\r\n // store.dispatch(showDocuSign(true));\r\n if (checkout && fabricatorSettings.checkout) {\r\n showCheckoutLayout(fabricatorSettings);\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n }\r\n\r\n if (showSchedule) {\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup('userPopup.messageBox.appointmentRequested');\r\n }\r\n }\r\n}\r\n\r\nexport const userLogin = ({\r\n showConfirmationPopup = false,\r\n showSchedule = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n yesNoConsultationRequest = false,\r\n userPopupType,\r\n fromConfirmationDialog = false,\r\n checkout = false\r\n } = {}) => {\r\n if (showConfirmationPopup) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false\r\n }\r\n });\r\n renderConfirmPopup(ConfirmPopupTypes.ConsultationRequest, {\r\n userAction: UserAction.Login,\r\n userPopupType\r\n });\r\n return;\r\n }\r\n const state = store.getState();\r\n const userInfo = state.userState.userInfo;\r\n const showAdditionalFields = state.userState.showAdditionalFields;\r\n if (!IS_LIXIL_UI) {\r\n loaderEnable();\r\n }\r\n let data = {\r\n email: userInfo.email,\r\n password: userInfo.password,\r\n employeeId: showAdditionalFields ? +userInfo.employeeId : 0,\r\n fabricatorId: document.kvConfig.userId,\r\n }\r\n data = addGACookie(data);\r\n\r\n return JsonApi.userLogin(data)\r\n .then((response) => {\r\n return setUserLoginResponse(\r\n response.data,\r\n fromConfirmationDialog,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n showSchedule,\r\n checkout,\r\n userPopupType\r\n )\r\n })\r\n .catch((error) => {\r\n console.log('User login error:', error);\r\n loaderDisable();\r\n renderErrorPopup(\"Login \"+new Error(error.message || error));\r\n if (state.fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userLoginFalse);\r\n }\r\n });\r\n};\r\n\r\nconst callUserRegisterErrorPopup = (responseData,\r\n userPopupType,\r\n fromConfirmationDialog,\r\n assignQuote = false,\r\n withCheckoutLogic = false,\r\n noInternetCallBack = null,\r\n afterContractSignCallback = null,\r\n executeAfterRegisterIfUserExist = null) => {\r\n Analytics.sendClickEvent(\"user-register-failure\");\r\n\r\n if (responseData.isEmailTaken && responseData.errorUserMatch) {\r\n store.dispatch(setAlreadyRegisteredUserInfo({...responseData.errorUserMatch, assignQuote, withCheckoutLogic, userId: responseData.userId}));\r\n renderConfirmPopup(ConfirmPopupTypes.AssignQuoteOnExistingUser, {applyFunction: executeAfterRegisterIfUserExist}, true)\r\n return\r\n }\r\n\r\n renderErrorPopup(responseData.error, \"\", noInternetCallBack, withCheckoutLogic, null, afterContractSignCallback);\r\n\r\n if (fromConfirmationDialog) {\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n }));\r\n }\r\n\r\n}\r\n\r\nexport const userRegister = async ({\r\n showConfirmationPopup = false,\r\n showSchedule = false,\r\n quoteRequestType = QuoteRequestType.RegularDesign,\r\n yesNoConsultationRequest = false,\r\n userPopupType,\r\n fromConfirmationDialog = false,\r\n // checkout = false,\r\n assignQuote = false,\r\n withCheckoutLogic = false,\r\n noInternetCallBack = null,\r\n afterContractSignCallback = null,\r\n executeAfterRegisterIfUserExist = null,\r\n } = {}) => {\r\n //console.log('register', quoteRequestType);\r\n if (showConfirmationPopup) {\r\n store.dispatch({\r\n type: types.TOGGLE_USER_POPUP,\r\n payload: {\r\n userPopupOpened: false\r\n }\r\n });\r\n renderConfirmPopup(ConfirmPopupTypes.ConsultationRequest, {\r\n userAction: UserAction.Register,\r\n userPopupType,\r\n quoteRequestType\r\n });\r\n return;\r\n }\r\n\r\n const {userState, serverState, fabricatorState} = store.getState();\r\n const userInfo = userState.userInfo;\r\n // userInfo.phone = userInfo.phoneNumber;\r\n // if (!store.getState().userState.showAdditionalFields) {\r\n // userInfo.employeeId = \"\"\r\n // }\r\n if (!IS_LIXIL_UI) {\r\n loaderEnable();\r\n }\r\n let data = {\r\n email: userInfo.email,\r\n firstName: userInfo.firstName,\r\n phone: `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`,\r\n agreedToTerms: userInfo.agreedToTerms,\r\n subscribeToNewsletter: userInfo.subscribeToNewsletter,\r\n isNew: true,\r\n postal: userInfo.postal,\r\n salesPersonFullName: userInfo.salesPersonFullName,\r\n salesPersonEmail: userInfo.salesPersonEmail,\r\n employeeId: +userInfo.employeeId,\r\n fabricatorId: Config.kvConfig.userId || 61986,\r\n quoteRequestType,\r\n yesNoConsultationRequest,\r\n lastName: userInfo.lastName,\r\n address1: userInfo.address1,\r\n address2: userInfo.address2,\r\n city: userInfo.city,\r\n state: userInfo.state,\r\n country: userInfo.country.iso2,\r\n preferredCommunicationMethod: userInfo.preferredCommunicationMethod,\r\n howDidYouHearAboutUs: userInfo.howDidYouHearAboutUs,\r\n phone2: userInfo.phone2,\r\n language: serverState.language,\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n };\r\n\r\n data = addGACookie(data);\r\n\r\n if (assignQuote) {\r\n [\"lastName\", \"phone2\", \"address1\", \"address2\", \"city\", \"preferredCommunicationMethod\", \"howDidYouHearAboutUs\"]\r\n .forEach((property) => {\r\n data[property] = userInfo[property] // new fields added in new assign quote popup\r\n })\r\n }\r\n\r\n let registerResponse;\r\n\r\n try {\r\n registerResponse = await JsonApi.userRegister(data);\r\n } catch (error) {\r\n if (error && (error.message === \"Network Error\") && IS_OFFLINE_MODE) {\r\n registerResponse = {data: {error: \"Network Error\"}}\r\n }\r\n }\r\n\r\n if (!IS_LIXIL_UI) {\r\n loaderDisable();\r\n }\r\n\r\n if (registerResponse.data.error) {\r\n callUserRegisterErrorPopup(registerResponse.data, userPopupType, fromConfirmationDialog, assignQuote, withCheckoutLogic, noInternetCallBack, afterContractSignCallback, executeAfterRegisterIfUserExist);\r\n if (fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userRegisterFalse);\r\n }\r\n return;\r\n }\r\n\r\n Analytics.sendClickEvent(\"user-register-success\");\r\n // Config.setUserInfo(registerResponse.data);\r\n Analytics.setUserId(registerResponse.data.encodedUserId);\r\n Analytics.setMixPanelPerson(registerResponse.data.email, registerResponse.data.firstName, registerResponse.data.phoneNumber);\r\n if (fabricatorState.isNhance) {\r\n Analytics.sendParentPostMessage(POST_MESSAGES.userRegisterTrue);\r\n }\r\n\r\n if (assignQuote) {\r\n return registerResponse.data\r\n }\r\n const fabricatorSettings = fabricatorState.settings;\r\n\r\n if (IS_LIXIL_UI) {\r\n store.dispatch(toggleUserPopup({\r\n userIsLoggedIn: true,\r\n encodedUserId: registerResponse.data.encodedUserId,\r\n isPhoneNumberValidated: !fabricatorSettings.twoFA,\r\n }));\r\n return registerResponse.data\r\n }\r\n\r\n // const docuSignObj = fabricatorSettings.docuSignAuth ? JSON.parse(fabricatorSettings.docuSignAuth) : null;\r\n store.dispatch(toggleUserPopup({\r\n userPopupOpened: fabricatorSettings.twoFA,\r\n schedulerPending: fabricatorSettings.twoFA,\r\n userIsLoggedIn: true,\r\n // when user first register we need to check whether the fabricator requires to validate the phone number\r\n isPhoneNumberValidated: !fabricatorSettings.twoFA, // if 2FA is required we consider user is still NOT logged in\r\n ...registerResponse.data,\r\n userInfo: {\r\n email: registerResponse.data.email\r\n }\r\n }));\r\n\r\n const submit = window.location.href.includes('shoppingcart');\r\n const saveQuoteResponse = await saveQuote({\r\n submit,\r\n yesNoConsultationRequest,\r\n quoteRequestType,\r\n fromCheckOutPage: submit,\r\n showReceipt: false\r\n });\r\n\r\n if (fabricatorSettings.twoFA)\r\n return;\r\n\r\n $(document).trigger(ActionTypes.USER_IS_LOGGED_IN); // click on the active item it the navigation\r\n if (saveQuoteResponse) {\r\n let responseDataBase = saveQuoteResponse;\r\n if (saveQuoteResponse.data) {\r\n responseDataBase = saveQuoteResponse.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n //console.log('saveQuote response:', responseData);\r\n store.dispatch(setJobId(responseData.jobId));\r\n }\r\n if (showSchedule) {\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n store.dispatch({\r\n type: types.SHOW_SCHEDULER,\r\n payload: {show: true}\r\n })\r\n } else {\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n }\r\n } else {\r\n // store.dispatch({\r\n // type: types.CHANGE_MESSAGE_BOX,\r\n // payload: {\r\n // visible: true,\r\n // error: false,\r\n // inline: false,\r\n // message: \"userPopup.messageBox.designSavedSuccess\",\r\n // buttons: [{\r\n // text: \"messageBox.buttonOk\",\r\n // color: \"green\",\r\n // click: () => {\r\n // store.dispatch({\r\n // type: types.CHANGE_MESSAGE_BOX,\r\n // payload: {\r\n // visible: false,\r\n // }\r\n // });\r\n //\r\n // // console.log('DS - register', fabricatorSettings.showPricing, docuSignObj);\r\n // // if (fabricatorSettings.showPricing && docuSignObj && docuSignObj.isEnabled)\r\n // // store.dispatch(showDocuSign(true));\r\n //\r\n // if (checkout && fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n // showCheckoutLayout(fabricatorSettings);\r\n // }\r\n // }\r\n // }]\r\n // }\r\n // });\r\n }\r\n\r\n if (saveQuoteResponse.error || saveQuoteResponse.data && saveQuoteResponse.data.error) {\r\n loaderDisable();\r\n renderErrorPopup(saveQuoteResponse.error || saveQuoteResponse.data.error, \"\", noInternetCallBack);\r\n }\r\n return null\r\n};\r\n\r\nexport const resetUserPassword = () => {\r\n const state = store.getState();\r\n const email = state.userState.userInfo.email;\r\n const language = state.serverState.language;\r\n loaderEnable();\r\n JsonApi.resetUserPassword(email, language)\r\n .then((response) => {\r\n loaderDisable();\r\n console.log('resetUserPassword response:', response);\r\n if (response.data.error) {\r\n renderErrorPopup(response.data.error);\r\n } else if (IS_LIXIL_UI) {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n title: \"leadCapturePopup.forgot.successPopup.title\",\r\n message: \"leadCapturePopup.forgot.successPopup.text\",\r\n }\r\n })\r\n } else {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: true,\r\n message: \"userPopup.messageBox.passwordHasBeenSent\",\r\n error: false,\r\n inline: false,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n store.dispatch({\r\n type: types.CHANGE_MESSAGE_BOX,\r\n payload: {\r\n visible: false,\r\n }\r\n });\r\n }\r\n }]\r\n }\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n loaderDisable();\r\n renderErrorPopup(error);\r\n });\r\n};\r\n\r\nexport const getEmployees = (withLoader = true) => {\r\n if (withLoader) {\r\n loaderEnable();\r\n }\r\n return JsonApi.getEmployees()\r\n .then((response) => {\r\n if (withLoader) {\r\n loaderDisable();\r\n }\r\n //console.log('getEmployees response:', response);\r\n const emplList = response && response.data ? [...response.data] : [];\r\n store.dispatch(setEmployeesList(emplList));\r\n return emplList\r\n })\r\n .catch((error) => {\r\n if (withLoader) {\r\n loaderDisable();\r\n }\r\n console.log('getEmployees error:', error);\r\n return []\r\n // renderErrorPopup(error);\r\n });\r\n};\r\n\r\nexport const getCustomerById = ({customerId,\r\n showContractOnError = false,\r\n noInternetCallBack,\r\n afterContractSignCallback}) => {\r\n loaderEnable();\r\n return JsonApi.getCustomerById(customerId)\r\n .then(response => response.data)\r\n .catch((error) => {\r\n loaderDisable();\r\n renderErrorPopup(error, \"\", noInternetCallBack, showContractOnError, null, afterContractSignCallback);\r\n });\r\n};\r\n\r\nexport const generateTwoFaAuthenticationToken = () => {\r\n return JsonApi.generateAuthenticationToken()\r\n .then(response => response.data || response)\r\n .catch(error => console.log(\"Server error validateAuthentication \"+new Error(error)))\r\n};\r\n\r\nexport const validateTwoFaAuthentication = (token, authCode, phone) => {\r\n return JsonApi.validateAuthenticationRequest(token, authCode, phone)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error validateAuthentication \"+new Error(error)))\r\n};\r\n\r\nexport const sendAuthenticationRequest = (token, to, type) => {\r\n return JsonApi.sendAuthenticationRequest(token, to, type)\r\n .then(response => response.data)\r\n .catch(error => console.log(\"Server error sendAuthenticationRequest \"+new Error(error)))\r\n};\r\n","import $ from \"jquery\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport Cursor from \"./cursor\";\r\nimport MiteredOverlay from \"../shapes/overlays/mitered\";\r\nimport {\r\n inchesToMm,\r\n measureDistanceToInches,\r\n mmToInches,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport store from \"../../../../../../store\";\r\nimport {\r\n addMiteredSection,\r\n changeMiteredSection,\r\n deleteMiteredSection\r\n} from \"../../../../../../actions/sqftMiteredFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {\r\n EDGE_LABELS,\r\n MITERED_OVERLAY_TYPE,\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SIDEBAR_BUTTONS_MENU, SIDEBAR_HIDDEN_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS\r\n} from \"../../../../constants\";\r\nimport {setSQFTMenuOpened, setSQFTMenuOpenedLock} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {getMiterEdgeFeature, getMiterUnderwrap} from \"../../../../helpers/featureHelper\";\r\n\r\nexport default class MiteredController {\r\n cursor;\r\n design = {\r\n imgSrc: iconPlusBlue\r\n };\r\n nodes = {\r\n miteredSectionsHTML: $('#mitered-sections'),\r\n };\r\n miteredSections = [];\r\n\r\n createCursor = () => {\r\n this.cursor = new Cursor();\r\n this.cursor.setCursorImage(this.design.imgSrc);\r\n eventManager.setCursor('mitered-select', this, true);\r\n };\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n attachMiteredEdge = (seg) => {\r\n if (seg && !seg.isWithMitered() && !seg.isWithBumpout()) {\r\n //add tool\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.mitered, null, null, '', 0, null, null, false);\r\n\r\n //add green edge\r\n const miterEdgeFeature = getMiterEdgeFeature();\r\n if (miterEdgeFeature) {\r\n const name = miterEdgeFeature.getFeatureName();\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.edge, miterEdgeFeature.dbFeature.id, null, name);\r\n }\r\n }\r\n };\r\n\r\n attachMiteredUnderwrapEdge = (seg) => {\r\n if (seg && !seg.isWithMitered() && !seg.isWithBumpout()) {\r\n //add tool\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.mitered, null, null, '', 0, null, null, false);\r\n\r\n //add green edge\r\n const miterEdgeFeature = getMiterUnderwrap();\r\n if (miterEdgeFeature) {\r\n const name = miterEdgeFeature.getFeatureName();\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.edge, miterEdgeFeature.dbFeature.id, null, name);\r\n }\r\n }\r\n };\r\n\r\n onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n const activeSubMenuButton = reduxState.sqftMenuState.activeSubMenuButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.mitered || activeSubMenuButton === SIDEBAR_HIDDEN_BUTTONS.buttonMitered) {\r\n let seg = hoverShape.getHoverSegment();\r\n if (seg && seg.isWithMitered() && reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n seg.deleteMitered();\r\n } else if (seg && seg.isWithMitered()) {\r\n void 0;\r\n } else {\r\n this.attachMiteredEdge(seg, this.cursor.cursorImage);\r\n }\r\n }\r\n }\r\n\r\n this.cursor.checkForRestoreCursor();\r\n };\r\n\r\n addSection = (miteredSection) => {\r\n const reduxState = store.getState();\r\n store.dispatch(addMiteredSection(miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.mitered));\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n updateSection = (miteredSection) => {\r\n store.dispatch(changeMiteredSection(miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.mitered));\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n deleteSection = (miteredOverlay) => {\r\n store.dispatch(deleteMiteredSection(miteredOverlay.id));\r\n };\r\n\r\n createMiteredOverlay = (line) => {\r\n const reduxState = store.getState();\r\n const miteredSections = reduxState.sqftMiteredState.miteredSections;\r\n\r\n return new MiteredOverlay(line, miteredSections.length + 1, MITERED_OVERLAY_TYPE.mitered)\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n //this.hide();\r\n };\r\n\r\n deregisterEvents() {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n this.cursor ? this.cursor.deregisterEvents() : null;\r\n Config.highlight.lines = false;\r\n }\r\n\r\n static getTotalArea = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n miteredSectionsArea += miteredSections[i] ? miteredSections[i].getMiteredToolTotalArea() : null;\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n onMeasureUnitChange = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n let segments = miteredSections[i].getSegments();\r\n\r\n segments.map((segment) => {\r\n segment.height = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.height)\r\n : mmToInches(segment.height);\r\n\r\n if (segment.thickness) {\r\n segment.thickness.value = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.thickness.value)\r\n : mmToInches(segment.thickness.value)\r\n }\r\n });\r\n\r\n miteredSections[i].heightNumberText.value = segments[0].height\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n getTransformedMeasureUnit = (value) => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n };\r\n\r\n getEdgesLength = () => {\r\n let additionalLength = 0;\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.from.getMiteredFeatureId()) {\r\n additionalLength += this.getEdgeLengthValue();\r\n }\r\n }\r\n\r\n return additionalLength\r\n }\r\n\r\n getEdgeLengthValue = () => {\r\n return Config.measureUnit === \"Imperial\"\r\n ? (2 * 33) / 40\r\n : (2 * 900) / 1000;\r\n }\r\n\r\n getExportedMiteredEdges = () => {\r\n let addedEdges = [];\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n const miteredFeatureId = line.from.getMiteredFeatureId();\r\n if (miteredFeatureId) {\r\n const edgeLengthValue = this.getEdgeLengthValue();\r\n const navItems = getEdgeFeatures();\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === miteredFeatureId);\r\n\r\n addedEdges.push({\r\n partId: EDGE_LABELS.edge,\r\n type: EDGE_LABELS.edge,\r\n name: edgeFeature ? workspace.intl.formatMessage({id: edgeFeature.part.dbFeature.sharedFeatureName}) : \"\",\r\n featureId: miteredFeatureId,\r\n segments: 1,\r\n length: edgeLengthValue,\r\n area: edgeLengthValue\r\n });\r\n }\r\n }\r\n\r\n return addedEdges\r\n }\r\n}\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setMiteredSections = (miteredSections) => ({\r\n type: types.SET_MITERED_SECTIONS,\r\n payload: {miteredSections}\r\n});\r\n\r\nexport const addMiteredSection = (miteredSection) => ({\r\n type: types.ADD_MITERED_SECTION,\r\n payload: miteredSection\r\n});\r\n\r\nexport const changeMiteredSection = (miteredSection) => ({\r\n type: types.CHANGE_MITERED_SECTION,\r\n payload: miteredSection\r\n});\r\n\r\nexport const deleteMiteredSection = (id) => ({\r\n type: types.DELETE_MITERED_SECTION,\r\n payload: {id}\r\n});\r\n\r\nexport const deleteAllMiteredSections = () => ({\r\n type: types.DELETE_ALL_MITERED_SECTIONS,\r\n payload: {}\r\n});\r\n","import {SHAPE_PART_ID} from \"./constants\";\r\n\r\nexport const SHAPE_HARDCODED_PART_IDS = [\r\n SHAPE_PART_ID.seamPiece,\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n SHAPE_PART_ID.slabPlaceHolder,\r\n SHAPE_PART_ID.upper_cabinet_boxes,\r\n SHAPE_PART_ID.lower_cabinet_boxes,\r\n SHAPE_PART_ID.tall_cabinet_boxes,\r\n];\r\n\r\nexport const SHAPE_PART_IDS_VISIBLE_ONLY_IN_THE_SLAB_MODE = [\r\n SHAPE_PART_ID.seamPiece,\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n SHAPE_PART_ID.slabPlaceHolder,\r\n];\r\n\r\nexport const SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST = [\r\n SHAPE_PART_ID.backsplashPiece,\r\n SHAPE_PART_ID.waterfallPiece,\r\n];\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport BackWall from \"../subparts/walls/backWall\";\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport SplitWall from \"../subparts/walls/splitWall\";\r\nimport LeftWallSplitter from \"../subparts/walls/leftWallSplitter\";\r\nimport CeilingPanels from \"../subparts/walls/ceilingPanels\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.popoutWall = null;\r\n this.backWall = null;\r\n this.ceiling = null;\r\n this.ceilingPanels = null;\r\n this.splitWall = null;\r\n this.leftWallSplitter = null;\r\n\r\n this.allWallsApplied = true;\r\n this.relatedGroupNames = [\"Backsplash\", \"Left Wall Splitter\", \"Left Wall\", \"Right Wall\", \"Center Wall\",\r\n \"Front Wall\", \"Back Wall\", \"Ceiling\", \"Ceiling Panels\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n case \"Left Wall Crop\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n case \"Right Wall Crop\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n case \"Front Wall Crop\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Back Wall\":\r\n case \"Beack Wall\":\r\n relatedItemName = \"backWall\";\r\n RelatedItemClass = BackWall;\r\n break;\r\n case \"Split Wall\":\r\n relatedItemName = \"splitWall\";\r\n RelatedItemClass = SplitWall;\r\n break;\r\n case \"Left Wall Splitter\":\r\n relatedItemName = \"leftWallSplitter\";\r\n RelatedItemClass = LeftWallSplitter;\r\n break;\r\n case \"Ceiling Panels\":\r\n relatedItemName = \"ceilingPanels\";\r\n RelatedItemClass = CeilingPanels;\r\n break;\r\n case \"Ceiling\":\r\n case \"Cealing\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n getSplitWallType() {\r\n if (!this.splitWall) {\r\n return null\r\n }\r\n if (!this.splitWall.disabled && this.splitWall.activeFeature && this.splitWall.activeFeature.metaData[\"SplitWallType\"]\r\n && this.splitWall.activeFeature.matchesMetaForArrayOfConditions(this.splitWall.getArrayOfConditions())) {\r\n return this.splitWall.activeFeature.metaData[\"SplitWallType\"]\r\n } else {\r\n return [\"NW\", \"0\"]\r\n }\r\n }\r\n\r\n}\r\n","import debounce from \"lodash/debounce\";\r\nimport $ from 'jquery';\r\n\r\nimport {getMetadataByDimensions, scrollToDivInArea} from \"../../../misc/utils\";\r\nimport {getEventPosition, getFeatureIsLocked, isIframe} from \"../../../misc/helpers\";\r\nimport {vanityWizardFilters, showerWizardFilters, NotQCVanityDoorStylesFilters} from '../../bvComponent/core/constants';\r\nimport {\r\n CABINET_GROUP,\r\n CABINET_WIZARD_BUTTONS, COUNTERTOP_GROUP,\r\n COUNTERTOP_WIZARD_BUTTONS, LayoutAbbreviations,\r\n MODULE_CONTEXT_MENU_TYPES\r\n} from '../../kvComponent/core/constants';\r\nimport {ContentType, PartMenuType, UserPopupTypes} from \"../constants\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport Analytics from './../../../analytics';\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport NavigationRequests from \"./navigationRequests\";\r\nimport {toggleUpdateDisableFeatureGroupRadio} from \"../../../actions/navigationFunctions\";\r\nimport store from \"../../../store\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../../bvSceneComponent/core/constants\";\r\nimport Config from \"../../../config\";\r\nimport {\r\n // checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {navFeatureCLick} from \"../../look/lookNavigation/lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../../misc/constants\";\r\nimport {searchProductRequest} from \"../../../api/search-api\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../../look/bathroomFunctions\";\r\nimport {getSideBarSubParts} from \"./navUtils\";\r\n// import {setLookCompatabilityAlert} from \"../../../actions/lookFunctions\";\r\n\r\nexport default class Navigation extends NavigationRequests { // this class is used for both Desktop & Mobile navigations to avoid method's duplicating\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showNavigation: false,\r\n contentType: ContentType.None,\r\n parentNavigationItem: null, // coming from main menu, Vanity, Floor, ...\r\n childNavigationItem: null, // coming from a complex part's sub part, such as Vanity/Toilet\r\n searchText: \"\",\r\n designNavigationItems: [],\r\n contextMenuOpen: false,\r\n hoveredLayer: {},\r\n navWidth: 0,\r\n contextMenuPosition: {\r\n top: 0,\r\n left: 0\r\n },\r\n contextMenuPonyWall: false,\r\n filters: {},\r\n activeDefaultPreset: null,\r\n updateSidebarItems: false,\r\n vanityWizardGroups: vanityWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: filterName === \"Material\"\r\n }\r\n }),\r\n showerWallWizardGroups: showerWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n const wizardFilters = [\"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: wizardFilters.includes(filterName)\r\n }\r\n }),\r\n showerWallWizardGroupsSelected: false,\r\n showFeatureWizard: true,\r\n wizardStepIndex: 0,\r\n wizardActiveItemIsLocked: false,\r\n showFilterSelection: false\r\n };\r\n\r\n this.shouldRecoverWalls = false;\r\n this.navigationIsClosing = false;\r\n this.defaultPresetIndexToClick = null;\r\n }\r\n\r\n _componentDidMount() {\r\n const layout = getCurrentLayout();\r\n this.setState({\r\n designNavigationItems: layout.designNavigationItems(),\r\n });\r\n this.setIframeMessaging();\r\n document.getElementById(this.props.canvasId).addEventListener('click', this.bindCanvasClick);\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n if (window.innerWidth < 480) { // workarounds for screens without the rotate icon\r\n // if (!window.rotatedCanvasTranslateIsSet) { // making canvas scroll to center\r\n // setTimeout(() => {\r\n // const $canvas = $('.canvas');\r\n // $canvas.css(\"transform\", `translateY(${window.innerWidth - $canvas.height()}px`);\r\n // window.rotatedCanvasTranslateIsSet = true;\r\n // }, 500);\r\n // }\r\n $(\".room .menu\").hide();\r\n setTimeout(() => {\r\n $(\".room .menu\").show(); // fix for menu blocking the main canvas\r\n }, 0)\r\n }\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n document.getElementById(this.props.canvasId).removeEventListener('click', this.bindCanvasClick);\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n $(document).off('click', this.handleWrapperBlur);\r\n $(document).off(ActionTypes.OPEN_MOBILE_NAVIGATION);\r\n $(document).off(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE);\r\n if (Config.isVisualizerManagement()) {\r\n window.removeEventListener(\"message\", this.messageListening);\r\n }\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(false)\r\n }\r\n if (this.props.setActiveNavigationNames) {\r\n this.props.setActiveNavigationNames(\"\", \"\")\r\n }\r\n }\r\n\r\n _componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 2 && (this.props.visualizerTutorialStep === 1)\r\n && this.props.setVisualizerTutorialStep\r\n && this.props.showVisualizerTutorial) {\r\n this.openLayoutMenu(() => {\r\n const $scrollList = $(\".layout-list\");\r\n if (!$scrollList || !$scrollList.find(\".active\") || !$scrollList.find(\".active\").offset()) {\r\n return false\r\n }\r\n $scrollList.animate({scrollLeft: $scrollList.find(\".active\").offset().left}, 800, () => {\r\n // $(\"html, body\").animate({scrollTop: document.body.scrollHeight/4}, 500);\r\n setTimeout(() => {\r\n setTimeout(() => {\r\n this.closeNavigation();\r\n this.props.setVisualizerTutorialStep(3);\r\n this.props.showVisualizerTutorial(true);\r\n }, 300)\r\n }, 600)\r\n });\r\n });\r\n }\r\n const layout = getCurrentLayout();\r\n if(!this.state.designNavigationItems || !this.state.designNavigationItems.length) {\r\n this.setState({designNavigationItems: layout.designNavigationItems()});\r\n }\r\n }\r\n\r\n updateComponent = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n userHasLoggedIn = () => { // click on current active item after unlock\r\n const layout = getCurrentLayout();\r\n if (this.props.activeFeature && this.state.showNavigation && this.state.contentType === ContentType.Design) {\r\n if (this.state.childNavigationItem) {\r\n const navItemToClick = layout.designNavigationItems(this.state.childNavigationItem, {}, \"\", true)\r\n .find(navItem => {\r\n return this.props.activeFeature.dbFeature.id === navItem.part.dbFeature.id;\r\n });\r\n if (navItemToClick) {\r\n this.handleNavigationItemClick(navItemToClick);\r\n }\r\n } else {\r\n this.handleNavigationItemClick({\r\n part: this.props.activeFeature\r\n });\r\n }\r\n this.props.refreshCB();\r\n } else if (this.state.contentType === ContentType.DisplayRoom && (this.defaultPresetIndexToClick || this.defaultPresetIndexToClick === 0)\r\n && (!this.props.fabricatorSettings.twoFA || (this.props.fabricatorSettings.twoFA && this.props.isPhoneNumberValidated))) {\r\n this.handleDefaultPresetClick(this.defaultPresetIndexToClick)\r\n }\r\n this.forceUpdate(); // update react virtualized grid for Safari mobile\r\n };\r\n\r\n setIframeMessaging = () => {\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", this.messageListening);\r\n }\r\n };\r\n\r\n messageListening = (event) => {\r\n if (event.data && event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.closeVisualizerNavigation) {\r\n this.closeMobileNavigationMenu();\r\n }\r\n };\r\n\r\n closeMobileNavigationMenu = () => {};\r\n\r\n triggerOpenNavigationMenu = (hoveredZone, clickedParent, activeNavigationFilter = null) => {\r\n const layout = getCurrentLayout();\r\n const designNavigationItems = layout.designNavigationItems();\r\n const menuItemToShow = clickedParent\r\n ? designNavigationItems.find(item => item.text === clickedParent)\r\n : designNavigationItems.find(item => item.text === hoveredZone);\r\n\r\n if (menuItemToShow) {\r\n this.setState({\r\n parentNavigationItem: menuItemToShow,\r\n childNavigationItem: null\r\n }, () => {\r\n\r\n if (menuItemToShow.part.menuType === PartMenuType.Simple) {\r\n this.checkIfAllFeaturesReceived(menuItemToShow, \"parentNavigationItem\");\r\n }\r\n\r\n if (menuItemToShow.part.handleClick) {\r\n menuItemToShow.part.handleClick();\r\n }\r\n // this.props.refreshCB(); // this refresh canvas (making redraw), but we need green zone to be shown! if needed - make settimeout 2 secs\r\n\r\n if (clickedParent) {\r\n const subMenuItemToShow = this.state.parentNavigationItem.part.subParts().find(item => {\r\n return item.text === hoveredZone\r\n });\r\n if (subMenuItemToShow) {\r\n this.handleSubPartClick(subMenuItemToShow, activeNavigationFilter);\r\n }\r\n }\r\n\r\n });\r\n this.props.setDefaultSelectionGroup(menuItemToShow.part.partName);\r\n }\r\n if (hoveredZone === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (hoveredZone === \"Ceiling\" || hoveredZone === \"Window\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n };\r\n\r\n handleParentItemClick = (item) => {\r\n this.setState({\r\n parentNavigationItem: item,\r\n showFilterSelection: item.text === \"Floor\" && item.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n }, () => {\r\n // if (subParts[0] && (subParts[0].part.menuType !== PartMenuType.Simple)) {\r\n // this.handleSubPartClick(subParts[0])\r\n // }\r\n if (item.text === \"Walls\" || item.text === \"Shower\" || item.text === \"Bathtub\" || item.text === \"Vanity\" || item.text === \"Toilet\"\r\n || (item.menuType === PartMenuType.Complex)) {\r\n const subParts = getSideBarSubParts(this.state.parentNavigationItem.part);\r\n if (subParts.length) {\r\n this.handleSubPartClick(subParts[0])\r\n }\r\n }\r\n if ((item.text === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")) || item.text === \"Window\") {\r\n this.setState({\r\n childNavigationItem: null\r\n });\r\n this.checkIfAllFeaturesReceived(item, \"parentNavigationItem\");\r\n }\r\n this.scrollToDefault(item);\r\n });\r\n this.props.setDefaultSelectionGroup(item.part.partName);\r\n };\r\n\r\n handleLayoutItemClick = layoutType => {\r\n const layout = getCurrentLayout();\r\n if (document.kvConfig.visualizerType === \"Kitchen\" && layout.getCurrentLayoutAbbreviation().includes(\"I\")\r\n && !LayoutAbbreviations[layoutType].includes(\"I\")) {\r\n this.resetNavigation();\r\n }\r\n if (layout.type !== layoutType) {\r\n this.changeLayout(layoutType)\r\n }\r\n };\r\n\r\n resetNavigation = () => {\r\n this.setState({\r\n parentNavigationItem: null,\r\n childNavigationItem: null,\r\n searchText: \"\"\r\n });\r\n this.props.setActiveFeature(null);\r\n if (this.props.setActiveNavigationFilter) {\r\n this.props.setActiveNavigationFilter(CABINET_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n }\r\n };\r\n\r\n getSearchProducts = (searchText) => {\r\n if (searchText && searchText.length > 2) {\r\n this.props.setNavigationLoading(true);\r\n const childItem = this.state.childNavigationItem ? this.state.childNavigationItem.part : this.state.parentNavigationItem.part;\r\n const promises = [searchProductRequest(childItem, searchText)];\r\n if (COUNTERTOP_GROUP.includes(childItem.partId) && document.kvConfig.visualizerType !== \"kvScene\") {\r\n // we have requests on click\r\n const layout = getCurrentLayout();\r\n COUNTERTOP_GROUP.forEach(neededPartId => {\r\n if (neededPartId !== childItem.partId) {\r\n const featureGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (featureGroup) {\r\n promises.push(Navigation.searchFeaturesByName(featureGroup, searchText, 1000));\r\n }\r\n }\r\n });\r\n }\r\n Promise.all(promises)\r\n .then(() => {\r\n this.props.setNavigationLoading(false); // for loading & desktop update\r\n this.setState({ // for mobile update\r\n render: false,\r\n }, () => {\r\n this.setState({\r\n render: true,\r\n });\r\n });\r\n })\r\n }\r\n };\r\n\r\n searchAPIDebounced = debounce(this.getSearchProducts, 500);\r\n\r\n handleSearchInputChange = async (event) => {\r\n const searchText = event.target.value;\r\n this.setState({\r\n searchText\r\n });\r\n await this.searchAPIDebounced(searchText);\r\n };\r\n\r\n ponyWallAndLeftWallClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n if (!this.props.fabricatorSettings.leadCapture || (this.props.fabricatorSettings.leadCapture && this.props.userIsLoggedIn)) {\r\n if (menuItem.part.partId === \"shower_body\" && (menuItem.text === \"Left Shower Wall\" || menuItem.text === \"Pony Wall\")) {\r\n const shower = layout.parts.Shower;\r\n const activeShower = shower.getActiveShowerGroup();\r\n const dimensions = getMetadataByDimensions(activeShower.showerDimensions());\r\n const wallParent = layout.parts.Walls;\r\n if (menuItem.text === \"Left Shower Wall\" && dimensions === \"Pony\" && wallParent.ponyWall.placeholderChanged) { // switch from Pony -> to Left Shower Wall\r\n const name1 = wallParent.ponyWall.activeFeature.getSplittedFeatureName();\r\n this.receiveAllFeaturesAndClickFeatureByName(wallParent, \"left_shower_wall\", name1);\r\n } else if (menuItem.text === \"Pony Wall\" && dimensions !== \"Pony\" && wallParent.wallExL.placeholderChanged) {\r\n const name1 = wallParent.wallExL.activeFeature.getSplittedFeatureName();\r\n this.receiveAllFeaturesAndClickFeatureByName(wallParent, \"pony_wall\", name1);\r\n }\r\n }\r\n }\r\n };\r\n\r\n receiveAllFeaturesAndClickFeatureByName = (parent, partId, name1) => {\r\n const exLSubPart = parent.getRelatedItems().find(relItem => relItem.partId === partId);\r\n const findAndClick = () => {\r\n const wallExLFeature = parent.wallExL.navigationSubItems().find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === name1\r\n });\r\n if (wallExLFeature) {\r\n wallExLFeature.part.handleClick(true);\r\n this.props.refreshCB();\r\n }\r\n };\r\n findAndClick(); // first try without the request\r\n this.checkIfAllFeaturesReceived({part: exLSubPart}, null, findAndClick); // then receive all walls\r\n };\r\n\r\n _menuOpened = () => {\r\n if (isIframe() && window.parent) {\r\n window.parent.postMessage({\r\n action: 'menu_opened',\r\n payload: {}\r\n }, \"*\");\r\n }\r\n if (this.props.setDemoPointClicked && !this.props.visualizerTutorialIsOpened) {\r\n this.props.setDemoPointClicked()\r\n }\r\n if (this.props.toggleDesktopNavigation) {\r\n this.props.toggleDesktopNavigation(true)\r\n }\r\n if (this.props.setModuleContextMenuType) {\r\n this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.Filters)\r\n }\r\n };\r\n\r\n renderErrorPopup(message) {\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n error: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonOk\",\r\n color: 'red',\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n\r\n itemClick = async (item, ignoreLocked) => {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (item && item.text === \"Floor\") {\r\n $('html, body').animate({scrollTop: document.body.scrollHeight}, 800);\r\n } else if (item && item.text === \"Ceiling\") {\r\n $('html, body').animate({scrollTop: 0}, 800);\r\n }\r\n\r\n if (layout.visualizerType === \"bvScene\") {\r\n await searchForSameNameWallsBeforeFeatureApply(item.part);\r\n }\r\n\r\n if (layout.isNewLayout && !item.part.relatedItems) {\r\n\r\n const applyFeature = async (feature) => {\r\n\r\n if (featureCanChangeShowerSize(feature)) {\r\n await searchForSameNameWallsBeforeFeatureApply(feature);\r\n }\r\n\r\n navFeatureCLick(feature, true, ignoreLocked);\r\n\r\n const applyToLogic = getApplyToLogic(item.part);\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(item.part, applyToLogic, true);\r\n }\r\n }\r\n\r\n // const compatabilityLogic = checkForCompatabilityAlert(item.part);\r\n // if (compatabilityLogic.length) {\r\n // store.dispatch(setLookCompatabilityAlert({\r\n // visible: true,\r\n // compatabilityLogic,\r\n // clickedFeature: item.part,\r\n // applyFunction: applyFeature.bind(this, item.part) // always apply features from this popup\r\n // }));\r\n // return false\r\n // }\r\n\r\n await applyFeature(item.part);\r\n\r\n } else {\r\n\r\n await item.part.handleClick(ignoreLocked);\r\n\r\n if (this.isWallItem(item.part) && item.part.getParent().getParent().allWallsApplied) {\r\n this.applyAllWalls(item.part, ignoreLocked);\r\n }\r\n if (CABINET_GROUP.includes(item.part.partId) || CABINET_GROUP_BATHROOM.includes(item.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n CabinetSwitchers.applyAllCabinets(item.part, !featureIsLocked || ignoreLocked);\r\n } else if (COUNTERTOP_GROUP.includes(item.part.partId) || COUNTERTOP_GROUP_BATHROOM.includes(item.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n CountertopSwitchers.applyAllCountertops(item.part, !featureIsLocked || ignoreLocked);\r\n }\r\n }\r\n\r\n if (item.part.getParent && item.part.getParent().disabled) {\r\n const itemParent = item.part.getParent();\r\n const itemIsLocked = getFeatureIsLocked(item.part, ignoreLocked);\r\n let exLAndBathtubAndSmallRoom = false;\r\n if (itemParent.partId === \"left_shower_wall\" && layout.type === 0) {\r\n const showerBody = layout.parts.Shower.showerBody;\r\n if (showerBody && showerBody.disabled) {\r\n exLAndBathtubAndSmallRoom = true\r\n }\r\n }\r\n if (itemParent.disabled && !exLAndBathtubAndSmallRoom && !itemIsLocked) {\r\n itemParent.disabled = false;\r\n itemParent.disabledClick(); // disable also related parts\r\n store.dispatch(toggleUpdateDisableFeatureGroupRadio(true));\r\n store.dispatch(toggleUpdateDisableFeatureGroupRadio(false));\r\n }\r\n }\r\n if (item.part.getParent && item.part.getParent().getParent) { // enable shower if child is clicked\r\n const parent = item.part.getParent().getParent();\r\n if (parent.partName === \"Shower\" && parent.showerBody.disabled) {\r\n parent.showerBody.disabled = false;\r\n parent.showerBody.disabledClick(); // enable also related parts\r\n }\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n store.dispatch(updateCanvasCount()); // for look remove button\r\n };\r\n\r\n callMetaMathesFailedPopup = (item, nonCompatibleWith) => {\r\n // console.log('item.matchesMetaFailedArray', item.matchesMetaFailedArray);\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n if (!featureIsLocked) {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: item.part.getParent().partName.toLowerCase(),\r\n featureName: item.part.getFeatureName(),\r\n nonCompatibleWith\r\n };\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n item.part.handleChangeParent(nonCompatibleWith); // change parent(vanity size)\r\n item.part.handleClick(); // set active\r\n const childNavigationItem = this.state.childNavigationItem;\r\n this.setState({ // update component & navigation\r\n childNavigationItem: null,\r\n },() => {\r\n this.setState({\r\n childNavigationItem\r\n })\r\n });\r\n setTimeout(() => {\r\n scrollToDivInArea($('.feature.active'), $('.categories-list'));\r\n }, 1000);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n };\r\n\r\n callToiletFailPopup = (clickFrom, item, ignoreLocked = false) => {\r\n const featureIsLocked = getFeatureIsLocked(item.part, ignoreLocked);\r\n if (!featureIsLocked) {\r\n const message = (clickFrom === 'toilet') ? \"messageBox.toiletMetaDataFailed\" : \"messageBox.toiletMetaDataFailedVanity\";\r\n const buttons = (clickFrom === 'toilet')\r\n ? [{\r\n text: \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n : [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n this.itemClick(item, ignoreLocked);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }];\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons\r\n });\r\n }\r\n };\r\n\r\n toggleApplyWallsCheckbox = () => {\r\n const wallParent = this.state.parentNavigationItem.part;\r\n wallParent.allWallsApplied = !wallParent.allWallsApplied;\r\n if (!wallParent.allWallsApplied && this.shouldRecoverWalls) {\r\n wallParent.recoverPrevioslySelected(this.state.childNavigationItem.part)\r\n } else if (\r\n wallParent.allWallsApplied\r\n && this.state.childNavigationItem\r\n && this.state.childNavigationItem.part\r\n && this.state.childNavigationItem.part.activeFeature\r\n && this.state.childNavigationItem.part.placeholderChanged) {\r\n this.applyAllWalls(this.state.childNavigationItem.part.activeFeature, false);\r\n }\r\n this.props.refreshCB();\r\n };\r\n\r\n rememberWallsSelection = () => { // this is set when new Wall Navigation Item is clicked\r\n const featureGroup = this.state.childNavigationItem.part;\r\n if ((this.isWallItem(featureGroup) || featureGroup.allWallsCanBeApplied)\r\n && this.state.parentNavigationItem.part.setPrevioslySelected) {\r\n this.state.parentNavigationItem.part.setPrevioslySelected(featureGroup);\r\n }\r\n this.shouldRecoverWalls = false;\r\n };\r\n\r\n applyAllWalls = (navigationItemPart, ignoreLocked) => {\r\n // console.log('navigationItem', navigationItem);\r\n const layout = getCurrentLayout();\r\n const wallParent = this.state.parentNavigationItem.part;\r\n const allWalls = wallParent.relatedItems;\r\n\r\n if (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\") {\r\n allWalls.forEach((relatedItem) => {\r\n if (this.isWallItem(relatedItem) && (relatedItem.partId !== navigationItemPart.partId)) {\r\n const wallsPartIds = [\"right_shower_wall\", \"left_shower_wall\", \"pony_wall\"];\r\n let featuresAvailableToClick = wallsPartIds.includes(relatedItem.partId)\r\n ? relatedItem.getAvailableFeatures()\r\n : relatedItem.features; // for other walls we don't have filters\r\n const navigationItemName = navigationItemPart.dbFeature.sharedFeatureName;\r\n const neededFeature = featuresAvailableToClick.find((feature) => {\r\n const featureName = feature.dbFeature.sharedFeatureName;\r\n return navigationItemName === featureName\r\n });\r\n // console.log('neededFeature', neededFeature);\r\n neededFeature && neededFeature.clickFromAllWalls(ignoreLocked);\r\n } else if (relatedItem.partId === \"accent_wall\" && !relatedItem.placeholderChanged) {\r\n relatedItem.disabled = true;\r\n }\r\n });\r\n const vanity = layout.parts[\"Vanity\"];\r\n if (vanity.vanityBacksplash && !vanity.vanityBacksplash.placeholderChanged) {\r\n vanity.vanityBacksplash.disabled = true;\r\n }\r\n } else if (document.kvConfig.visualizerType !== \"Bathroom\") {\r\n allWalls.forEach((relatedItem) => {\r\n if (this.isWallItem(relatedItem) && (relatedItem.partId !== navigationItemPart.partId)) {\r\n const navigationItemName = navigationItemPart.dbFeature.sharedFeatureName;\r\n const neededFeature = relatedItem.features.find((feature) => {\r\n const featureName = feature.dbFeature.sharedFeatureName;\r\n return featureName === navigationItemName\r\n });\r\n // console.log('neededFeature', neededFeature);\r\n neededFeature && neededFeature.clickFromAllWalls(ignoreLocked);\r\n }\r\n });\r\n }\r\n\r\n this.shouldRecoverWalls = true;\r\n this.props.refreshCB();\r\n };\r\n\r\n removeChoosingView = (partName) => {\r\n // console.log('partName', partName);\r\n switch (partName) {\r\n case \"Vanity\":\r\n this.props.setVanityType(true);\r\n break;\r\n case \"Shower\":\r\n this.props.setShowerType(true);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n handleSubTypeClick = subType => { // sidebar radio button click\r\n Analytics.sendClickEvent('sub-type-clicked-' + subType);\r\n this.removeChoosingView(this.state.parentNavigationItem.part.partName);\r\n if (this.props.changeActivePartRelatedItemIndex) {\r\n this.props.changeActivePartRelatedItemIndex(0); // set first item on materials page\r\n }\r\n this.state.parentNavigationItem.part.handleSubTypeClick(subType, this.handleNavigationItemClick);\r\n const childNavigationItem = this.state.parentNavigationItem.part.setDefaultPartAfterSubTypeClick();\r\n this.setState({\r\n childNavigationItem,\r\n showFilterSelection: childNavigationItem.part.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n },() => {\r\n this.setNewActiveFeature();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(childNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(childNavigationItem);\r\n this.props.refreshCB();\r\n };\r\n\r\n setActivePartRelatedItemIndex = (childNavigationItem) => {\r\n const layout = getCurrentLayout();\r\n let nextSubPartIndex = 0;\r\n if (this.state.parentNavigationItem && !layout.qtCategories) { // we don't need to set for qtCategories\r\n const subParts = childNavigationItem.part.getParent().subParts(false);\r\n nextSubPartIndex = subParts.findIndex(currentSubPart => {\r\n return currentSubPart.part.partId === childNavigationItem.part.partId;\r\n });\r\n }\r\n setTimeout(() => {\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex); // setTimeout is needed cause it needs parent to be updated\r\n }, 0);\r\n };\r\n\r\n setNewActiveFeature = (subNavigationItem) => {\r\n if (!subNavigationItem) {\r\n subNavigationItem = this.state.childNavigationItem || this.state.parentNavigationItem || null;\r\n }\r\n\r\n if (subNavigationItem) {\r\n const featureToSet = ((this.props.fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && !this.props.userIsLoggedIn && subNavigationItem.part.activeLockedFeature)\r\n || ((this.props.fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && this.props.userIsLoggedIn\r\n && subNavigationItem.part.activeLockedFeature\r\n && !subNavigationItem.part.placeholderChanged)\r\n ? subNavigationItem.part.activeLockedFeature\r\n : subNavigationItem.part.activeFeature;\r\n this.props.setActiveFeature(featureToSet);\r\n }\r\n };\r\n\r\n handleDefaultPresetClick = (index, presetIsLocked) => {\r\n const layout = getCurrentLayout();\r\n Analytics.sendClickEvent('preset-selected-' + index);\r\n if (presetIsLocked) {\r\n this.defaultPresetIndexToClick = index;\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true\r\n });\r\n return\r\n }\r\n this.defaultPresetIndexToClick = null;\r\n this.setState({\r\n activeDefaultPreset: index\r\n }, () => {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const defaultPreset = this.props.bvPresets[index];\r\n console.log('defaultPreset', defaultPreset);\r\n const cabinetParent = layout.parts[\"Cabinet\"];\r\n const noCabinets = (cabinetParent && cabinetParent.topCabinet\r\n && !cabinetParent.topCabinet.allFeaturesReceived) || (cabinetParent && cabinetParent.bottomCabinet\r\n && !cabinetParent.bottomCabinet.allFeaturesReceived);\r\n if (noCabinets && (document.kvConfig.visualizerType !== \"kvScene\")) {\r\n const neededParts = [\"top_cabinet\", \"bottom_cabinet\"];\r\n const allRelated = cabinetParent.relatedItems.filter((relatedItem) => {\r\n return neededParts.includes(relatedItem.partId) && !relatedItem.allFeaturesReceived\r\n });\r\n const promises = allRelated.map((relatedItem) => {\r\n return getBvGroupFeatures(relatedItem.dbName || relatedItem.partName).then(response => {\r\n relatedItem.setGroupFeatures(Array.isArray(response) ? response : []);\r\n return response\r\n })\r\n });\r\n Promise.all(promises)\r\n .then(() => this.finishPresetLoading(layout, defaultPreset))\r\n } else {\r\n loaderEnable();\r\n this.finishPresetLoading(layout, defaultPreset);\r\n }\r\n });\r\n };\r\n\r\n finishPresetLoading = (layout, preset) => {\r\n layout.setItemsFromBvState(preset)\r\n .then(() => {\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n });\r\n }\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n };\r\n\r\n currentActiveItemIsLocked = (useWizard) => {\r\n\r\n const {visualizerManagement, isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const {fabricatorSettings, isPhoneNumberValidated, activeFeature, filterGroups, activeQuoteIndex} = this.props;\r\n const {showFeatureWizard, wizardActiveItemIsLocked} = this.state;\r\n\r\n if (!fabricatorSettings.leadCapture\r\n || (fabricatorSettings.leadCapture && visualizerManagement)\r\n || (fabricatorSettings.leadCapture && isPhoneNumberValidated)\r\n || (fabricatorSettings.leadCapture && (isBackend && jobId && canSaveQuote))){\r\n return false\r\n }\r\n\r\n const itemHasLockedFilters = () => {\r\n let lockedFilters = false;\r\n const filterValues = activeFeature && activeFeature.dbFeature && activeFeature.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n lockedFilters = Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n return lockedFilters\r\n };\r\n\r\n return (\r\n activeFeature\r\n && activeFeature.getParent().firstClick[activeQuoteIndex]\r\n && activeFeature.dbFeature\r\n && !activeFeature.dbFeature.unlocked\r\n && !activeFeature.notAvailableInVisualizer\r\n && !(useWizard && showFeatureWizard)\r\n ) || (useWizard && showFeatureWizard && wizardActiveItemIsLocked) || itemHasLockedFilters()\r\n };\r\n\r\n checkedForLockedPresets = () => {\r\n // const layout_typelayout_type: 1\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const showSmallRoomLayout = fabricatorSettings &&\r\n (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend));\r\n return Array.isArray(this.props.bvPresets) && this.props.bvPresets.length\r\n ? this.props.bvPresets\r\n .filter(preset => {\r\n if (!showSmallRoomLayout && (document.kvConfig.visualizerType === \"Bathroom\"\r\n || document.kvConfig.visualizerType === \"BV\")) {\r\n return preset.layout_type !== 0\r\n }\r\n return preset\r\n })\r\n .map((preset) => {\r\n if (preset.presetUnlocked) {\r\n preset.presetIsLocked = false\r\n } else {\r\n preset.presetIsLocked = this.props.fabricatorSettings.leadCapture\r\n && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)\r\n && !this.props.isPhoneNumberValidated && (!preset.presetUnlocked || layout.bvStateHasLockedItems(preset))\r\n }\r\n // console.log(\"preset.presetIsLocked\", preset.presetIsLocked);\r\n return preset\r\n }).sort((a, b) => a.presetIsLocked !== b.presetIsLocked ? a.presetIsLocked < b.presetIsLocked ? -1 : 1 : 0) // sort by presetIsLocked\r\n : []\r\n };\r\n\r\n closeContextMenu = () => {\r\n this.setState({\r\n contextMenuOpen: false,\r\n })\r\n };\r\n\r\n /*** WIZARD ***/\r\n\r\n exitFeatureWizard = (wizardGroups, partId) => {\r\n this.setState({\r\n wizardStepIndex: 0,\r\n showFeatureWizard: false,\r\n wizardActiveItemIsLocked: false,\r\n searchText: \"\"\r\n });\r\n this.setWizardGroups(wizardGroups, partId);\r\n };\r\n\r\n enableFeatureWizard = (wizardStepIndex) => {\r\n this.setState({\r\n wizardStepIndex,\r\n showerWallWizardGroupsSelected: wizardStepIndex !== 0\r\n }, () => {\r\n this.setState({\r\n showFeatureWizard: true,\r\n })\r\n });\r\n };\r\n\r\n setWizardStepIndex = (wizardStepIndex) => {\r\n this.setState({\r\n wizardStepIndex\r\n })\r\n };\r\n\r\n setWizardGroups = (wizardGroups, partId) => {\r\n const wizardGroupsName = this.getWizardGroupsByPartId(partId);\r\n this.setState({\r\n [wizardGroupsName]: this.state[wizardGroupsName].map((wizardGroup) => {\r\n const currentGroup = wizardGroups.find(wGroup => wGroup.filterName === wizardGroup.filterName);\r\n if (currentGroup) {\r\n wizardGroup.selectedValueId = currentGroup.selectedValueId;\r\n wizardGroup.selectedValueName = currentGroup.selectedValueName;\r\n wizardGroup.hidden = currentGroup.hidden;\r\n wizardGroup.values = currentGroup.values;\r\n }\r\n return wizardGroup\r\n })\r\n })\r\n };\r\n\r\n setWizardLockedItem = (itemIsLocked) => {\r\n this.setState({\r\n wizardActiveItemIsLocked: itemIsLocked\r\n })\r\n };\r\n\r\n resetActiveFeature = () => {\r\n this.props.setActiveFeature(null);\r\n this.setState({\r\n wizardActiveItemIsLocked: false\r\n })\r\n };\r\n\r\n resetWizardSteps = () => {\r\n this.setState({\r\n vanityWizardGroups: vanityWizardFilters.map((filterName) => { // filterGroupsId's & their selected values\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: filterName === \"Material\"\r\n }\r\n }),\r\n showerWallWizardGroups: showerWizardFilters.map((filterName) => {\r\n const wizardFilters = [\"SlabColor\", \"TileColor\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n return {\r\n filterName,\r\n selectedValueId: null,\r\n selectedValueName: \"\",\r\n hidden: wizardFilters.includes(filterName)\r\n }\r\n }),\r\n showFeatureWizard: true,\r\n wizardStepIndex: 0,\r\n wizardActiveItemIsLocked: false,\r\n })\r\n };\r\n\r\n getWizardGroupsByPartId = (partId) => {\r\n switch (partId) {\r\n case \"vanity_cabinet\":\r\n return \"vanityWizardGroups\";\r\n case \"shower_interior_wall\":\r\n return \"showerWallWizardGroups\";\r\n default:\r\n return \"\";\r\n }\r\n };\r\n\r\n getFilterDisplayName = (filterName, intl = null) => {\r\n switch (filterName) {\r\n case \"DoorStyle\":\r\n return intl ? intl.formatMessage({id: \"Door Style\"}) : \"Door Style\"\r\n case \"Material\":\r\n return intl\r\n ? intl.formatMessage({id: this.state.childNavigationItem.part.partId === \"vanity_cabinet\" ? \"WoodType\" : \"Material\"})\r\n : this.state.childNavigationItem.part.partId === \"vanity_cabinet\" ? \"Wood Type\" : \"Material\";\r\n case \"AcrylicColor\":\r\n case \"DuraBathColor\":\r\n case \"SlabColor\":\r\n case \"TileColor\":\r\n return intl ? intl.formatMessage({id: \"Color\"}) : \"Color\";\r\n case \"AcrylicPattern\":\r\n return intl ? intl.formatMessage({id: \"Pattern\"}) : \"Pattern\";\r\n default:\r\n return intl ? intl.formatMessage({id: filterName}) : filterName\r\n }\r\n };\r\n\r\n removeFilterSelection = () => {\r\n this.setState({\r\n showFilterSelection: false\r\n })\r\n };\r\n\r\n toggleWizardFilterSelection = (showerWallWizardGroupsSelected) => {\r\n this.setState({\r\n showerWallWizardGroupsSelected\r\n })\r\n };\r\n\r\n setWizardFiltersFromActiveItem = (activeFeature) => {\r\n\r\n const {fabricatorSettings} = this.props;\r\n const useWizard = fabricatorSettings && (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n if (useWizard) {\r\n const currentActiveFilters = activeFeature.dbFeature.filterValueIDs;\r\n const partId = this.state.childNavigationItem.part.partId;\r\n const wizardGroupsName = this.getWizardGroupsByPartId(partId);\r\n\r\n let wizardGroups = this.state[wizardGroupsName].map((wizardGroup) => {\r\n if (partId === \"vanity_cabinet\") {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.name === wizardGroup.filterName\r\n });\r\n let filterGroupValue = {};\r\n if (filterGroup && currentActiveFilters[filterGroup.id]) {\r\n const selectedFilterValueId = currentActiveFilters[filterGroup.id][0];\r\n filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === selectedFilterValueId\r\n });\r\n }\r\n // console.log('filterGroupValue', filterGroupValue);\r\n if (wizardGroup.filterName === \"Material\") { // check for existing BV filters\r\n const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n if (doorStyleFilter) {\r\n const doorStyleActiveValue = currentActiveFilters[doorStyleFilter.id];\r\n const doorStyleFilterValue = doorStyleFilter.values.find(filterObj => {\r\n return doorStyleActiveValue && filterObj.id === doorStyleActiveValue[0]\r\n });\r\n // console.log('doorStyleFilterValue', doorStyleFilterValue);\r\n wizardGroup.hidden = filterGroupValue && doorStyleFilterValue && !NotQCVanityDoorStylesFilters.includes(doorStyleFilterValue.value);\r\n }\r\n }\r\n } else if (partId === \"shower_interior_wall\") {\r\n const stepName = wizardGroup.filterName.toLowerCase();\r\n const materialFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"Material\");\r\n if (Object.keys(currentActiveFilters).length && materialFilter && currentActiveFilters[materialFilter.id]) { // check for existing BV filters\r\n const materialValueId = currentActiveFilters[materialFilter.id][0];\r\n const materialValue = materialFilter.values.find(val => val.id === materialValueId);\r\n // console.log('materialValue.value', materialValue.value);\r\n wizardGroup.hidden = (materialValue && (\r\n (materialValue.value !== \"DuraBath\" && stepName === \"durabathcolor\")\r\n || (materialValue.value !== \"DuraBath\" && materialValue.value !== \"Tile\" && stepName === \"tilepattern\")\r\n || (materialValue.value !== \"Acrylic\" && stepName === \"acrylicpattern\")\r\n || (materialValue.value !== \"Acrylic\" && stepName === \"acryliccolor\")\r\n || (materialValue.value !== \"Tile\" && stepName === \"tilecolor\")\r\n || (materialValue.value !== \"Slab\" && stepName === \"slabcolor\")\r\n ))\r\n }\r\n }\r\n return wizardGroup\r\n });\r\n\r\n this.setState({\r\n [wizardGroupsName]: wizardGroups\r\n });\r\n }\r\n };\r\n\r\n /*** WIZARD END ***/\r\n\r\n setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter) {\r\n if (this.props.setActiveNavigationFilter && !activeNavigationFilter) {\r\n if (childNavigationItemPartId === \"edge_profile\"\r\n || childNavigationItemPartId === \"center_island_edge\"\r\n && this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[3].buttonId) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[3].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(3);\r\n } else if (childNavigationItemPartId === \"countertop\"\r\n || childNavigationItemPartId === \"center_island_countertop\"\r\n && (\r\n this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[0].buttonId\r\n || this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n )){\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[0].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(0);\r\n } else if (childNavigationItemPartId === \"backsplash\"\r\n && !(this.props.activeNavigationFilter !== COUNTERTOP_WIZARD_BUTTONS[4].buttonId)) {\r\n this.props.setActiveNavigationFilter(COUNTERTOP_WIZARD_BUTTONS[4].buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(4);\r\n }\r\n }\r\n }\r\n\r\n showPositionsPopup = (item, event) => {\r\n const itemParent = item.part.getParent ? item.part.getParent() : null;\r\n const featureIsLocked = getFeatureIsLocked(item.part);\r\n if (itemParent && !item.part.notAvailableInVisualizer && !featureIsLocked\r\n && this.props.toggleNavItemPositionModal && itemParent.showLayerPositionsModal\r\n && itemParent.showLayerPositionsModal(item.part) && event) {\r\n const eventPosition = getEventPosition(event);\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: true,\r\n popupPosition: {\r\n left: eventPosition.x,\r\n top: eventPosition.y\r\n },\r\n activePartId: item.part.partId,\r\n });\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update buttons\r\n return true\r\n } else if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {countertopGroupThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Sink from \"../subparts/countertop/sink\";\r\nimport Faucet from \"../subparts/countertop/faucet\";\r\nimport Countertop from \"../subparts/countertop/countertop\";\r\nimport EdgeProfile from \"../subparts/countertop/edgeProfile\";\r\nimport Cutouts from \"../subparts/countertop/cutouts\";\r\nimport Radius from \"../subparts/countertop/radius\";\r\nimport {PLACEMENTS} from \"../../../kvComponent/core/constants\";\r\n\r\nexport default class CountertopGroup extends Part {\r\n static id = 'Countertop';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Countertop';\r\n this.partThumbnail = countertopGroupThumbnail;\r\n this.translateId = \"visualizer.kitchen.countertop\";\r\n\r\n // related items\r\n this.sink = null;\r\n this.faucet = null;\r\n this.countertop = null;\r\n this.edgeProfile = null;\r\n this.relatedGroupNames = [\"Faucet\", \"Sink\", \"Countertop\", \"Edge Profile\", \"Cutouts\", \"Radius\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Sink\":\r\n case \"Farnhousesink\":\r\n if (loadFeature && dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n break;\r\n }\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n break;\r\n case \"Faucet\":\r\n if (loadFeature && dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n break;\r\n }\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n break;\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Edge Profile\":\r\n case \"Edge\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edgeProfile\";\r\n RelatedItemClass = EdgeProfile;\r\n break;\r\n case \"Cutouts\":\r\n case \"cutouts\":\r\n relatedItemName = \"cutouts\";\r\n RelatedItemClass = Cutouts;\r\n break;\r\n case \"Radius\":\r\n relatedItemName = \"radius\";\r\n RelatedItemClass = Radius;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature, shouldLoadInDifferentGroups)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (hideWithoutFeatures && (item.partId === \"cutouts\" || item.partId === \"radius\")) {\r\n return false\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setSpecificRules() {\r\n if (this.edgeProfile) {\r\n this.edgeProfile.setEdgeNotInVisualizer()\r\n }\r\n }\r\n\r\n}\r\n","import {getSaveJobData} from \"./saveJobData\";\r\nimport {postSaveJob, postScheduleAppointment} from \"../api/job-api\";\r\nimport {getSaveAppointmentData} from \"./saveAppointmentData\";\r\nimport {registerUser, updateUser} from \"../api/user\";\r\nimport {setRegisteredUserData, setUserInfo} from \"../userLogic/userActions\";\r\n\r\nexport const SET_LOADING = \"SET_LOADING\";\r\nexport const EXPAND_FOOTER_INFO = \"EXPAND_FOOTER_INFO\";\r\nexport const SET_LEAD_POPUP = \"SET_LEAD_POPUP\";\r\nexport const ALLOW_SAVING_JOB_ON_INPUT_STEP = \"ALLOW_SAVING_JOB_ON_INPUT_STEP\";\r\nexport const SET_JOB_SAVED = \"SET_JOB_SAVED\";\r\nexport const SET_FOOTER_INFO_BUTTON_TEXT = \"SET_FOOTER_INFO_BUTTON_TEXT\";\r\nexport const setLoading = (isLoading, faradayLoading = false) => ({\r\n type: SET_LOADING,\r\n payload: {isLoading, faradayLoading}\r\n});\r\nexport const expandFooterInfo = (footerInfoExpanded = false) => ({\r\n type: EXPAND_FOOTER_INFO,\r\n payload: {footerInfoExpanded}\r\n});\r\nexport const setFooterInfoButtonText = (footerInfoButtonText = \"\") => ({\r\n type: EXPAND_FOOTER_INFO,\r\n payload: {footerInfoButtonText}\r\n});\r\nexport const setLeadPopup = (leadPopup) => ({\r\n type: SET_LEAD_POPUP,\r\n payload: leadPopup\r\n});\r\n\r\nexport const setJobSaved = (jobData) => ({\r\n type: SET_JOB_SAVED,\r\n payload: jobData\r\n});\r\n\r\nexport const setAllowJobSavingOnInputStep = () => ({\r\n type: ALLOW_SAVING_JOB_ON_INPUT_STEP,\r\n});\r\n\r\nconst someUserInfoIsDifferent = (userInfo, registeredUser) => {\r\n return Object.keys(registeredUser).some(key => registeredUser[key] !== userInfo[key])\r\n}\r\n\r\nexport const saveJobAction = (isDelayedSave = false) => {\r\n return async (dispatch, getState) => {\r\n const store = getState();\r\n const {appointmentDate} = store.appointmentState;\r\n const {userInfo, registeredUser} = store.userState;\r\n\r\n if (!userInfo.isLoggedIn) {\r\n // 1) register user\r\n const registered = await registerUser(store);\r\n console.log(\"registered\", registered);\r\n if (registered && registered.data) {\r\n dispatch(setRegisteredUserData(registered.data.email, registered.data.authToken));\r\n }\r\n dispatch(setUserInfo(\"isLoggedIn\", true));\r\n } else if (someUserInfoIsDifferent(userInfo, registeredUser)) {\r\n // 1.5) update user info\r\n const updatedCustomer = await updateUser(store);\r\n if (updatedCustomer && updatedCustomer.data && updatedCustomer.data.success) {\r\n dispatch(setRegisteredUserData(store.userState.userInfo.email, updatedCustomer.data.token));\r\n }\r\n }\r\n\r\n // 2) save job\r\n // getState() needed here to have registered email\r\n const saveJobResponse = await postSaveJob(getSaveJobData(getState(), isDelayedSave));\r\n\r\n if (!saveJobResponse || !saveJobResponse.data) {\r\n console.error(\"job wasn't saved\", saveJobResponse);\r\n return\r\n }\r\n\r\n // 3) set appointment\r\n if (appointmentDate && saveJobResponse.data.jobId) { // check fab setting here if needed\r\n await postScheduleAppointment(getSaveAppointmentData(store, saveJobResponse.data.jobId));\r\n }\r\n\r\n dispatch(setJobSaved({jobId: saveJobResponse.data.jobId}));\r\n }\r\n}\r\n\r\n// if (registered.data && registered.data.isEmailTaken && registered.data.errorUserMatch) {\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {\r\n// visible: true,\r\n// text: \"This email already exists in the system. Would you like to add your quote to this customer?\",\r\n// buttons: [{\r\n// text: \"No\",\r\n// onClick: () => {\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {visible: false})\r\n// }));\r\n// }\r\n// }, {\r\n// text: \"Yes\",\r\n// onClick: () => {\r\n// // here we can take some info from already registered user\r\n// visitContextDispatch(visitContextAction({\r\n// popup: Object.assign({}, visitContextState.popup, {visible: false})\r\n// }));\r\n// visitContextDispatch(visitContextChangeFormAction(\"isLoggedIn\", true, \"contact\"));\r\n// switchToAppointmentPage();\r\n// }\r\n// }],\r\n// })\r\n// }))\r\n// return false\r\n// }\r\n","import {getNextWizardSteps} from \"./wizardLogicOld\";\r\n\r\nexport const LEAD_WIZARD_GROUP_TYPES = {\r\n group: \"group\",\r\n filter: \"filter\",\r\n custom: \"custom\",\r\n inputs: \"inputs\",\r\n contact: \"contact\",\r\n appointment: \"appointment\",\r\n review: \"review\",\r\n success: \"success\",\r\n}\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getLeadFormSteps = (wizardActiveItem, currentStep, wizardSelectedValues) => {\r\n const wizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n let leadFormSteps = [];\r\n wizardSteps.forEach(step => {\r\n if (step.stepGroups.length && step.stepGroups[0].leadStep) {\r\n let existingLeadStepObject = leadFormSteps.find(leadStepObject => {\r\n return leadStepObject.leadStepName === step.stepGroups[0].leadStep\r\n });\r\n if (!existingLeadStepObject) {\r\n existingLeadStepObject = {\r\n leadStepName: step.stepGroups[0].leadStep,\r\n leadStepUrl: step.stepGroups[0].leadStepUrl,\r\n leadSubSteps: []\r\n }\r\n leadFormSteps.push(existingLeadStepObject);\r\n }\r\n existingLeadStepObject.leadSubSteps.push({\r\n stepIndex: step.stepIndex,\r\n wizardGroup: step.stepGroups[0], // not needed for now\r\n });\r\n }\r\n })\r\n // const leadFormSteps = wizardSteps.reduce((total, step) => {\r\n // if (step.stepGroups.length && step.stepGroups[0].leadStep && !total.includes(step.stepGroups[0].leadStep)) {\r\n // total.push(step.stepGroups[0].leadStep)\r\n // }\r\n // return total\r\n // }, []);\r\n return leadFormSteps\r\n}\r\n\r\n/**\r\n * this returns lowercased url\r\n * @param leadStepName {string}\r\n * @returns {string}\r\n */\r\nexport const getUrlLeadStepName = (leadStepName = \"\") => {\r\n if (!leadStepName) {\r\n return \"\"\r\n }\r\n return leadStepName.toLowerCase().replace(/ /g,\"-\")\r\n}\r\n","import React from \"react\";\r\nimport orderBy from \"lodash/orderBy\";\r\nimport throttle from \"lodash/throttle\";\r\nimport clone from \"lodash/clone\";\r\nimport $ from 'jquery';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Misc from './../../misc/misc';\r\nimport ActionTypes from \"./../../misc/actionTypes\";\r\nimport {getMousePos, getTranslateX, requestAnimFrame, isTouchDevice} from \"../../misc/utils\";\r\nimport {makeHoveringLayer} from \"../../misc/imageHovering\";\r\nimport {getEventPosition, isIE} from \"../../misc/helpers\";\r\nimport PinchZoom from \"../../lib/pinch-zoom\";\r\nimport {loaderEnable, loaderDisable} from \"../ui/loaderView\";\r\nimport enhanceCanvas from \"./canvasEnhancements\";\r\nimport Config, {IS_LIXIL_UI} from \"../../config\";\r\nimport {checkForLayerParts} from \"./canvasCheckForLayerParts\";\r\nimport {hardCodelyRemovedClicking} from \"../look/lookNavigation/lookFunctions2\";\r\nimport {VISUALIZER_MANAGEMENT_ACTIONS} from \"../../misc/constants\";\r\n// import {UseFullSizeImages} from \"../../config\";\r\n\r\n// import { getHoverZonesForPreset, getHoveringZone, hoverImages } from \"./imageCanvasTouchZones\";\r\n\r\nexport default class ImageCanvasCommon extends React.Component {\r\n static propTypes = {\r\n layers: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n layoutType: PropTypes.string.isRequired,\r\n width: PropTypes.number.isRequired,\r\n height: PropTypes.number.isRequired,\r\n canvasId: PropTypes.string.isRequired,\r\n useMouseHovering: PropTypes.bool,\r\n useTouchZoom: PropTypes.bool,\r\n enableLoader: PropTypes.func,\r\n disableLoader: PropTypes.func,\r\n setShowCanvasLoader: PropTypes.func,\r\n lookCanvasClick: PropTypes.func,\r\n transform: PropTypes.string,\r\n fabricatorData: PropTypes.object,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.canvas = null;\r\n this.state = {\r\n mouseMoveSet: false,\r\n dimensions: {\r\n width: props.width,\r\n height: props.height\r\n },\r\n hoverZones: {},\r\n layers: [],\r\n layersHoverings: [],\r\n // layersHoveringsCached: [],\r\n imagesRendered: [],\r\n backgroundLayers: [],\r\n backgroundImages: [],\r\n allowPropsLayers: true,\r\n };\r\n this.id = 0;\r\n this.ctx = null;\r\n this.backCtx = null;\r\n this.resizedCanvas = null;\r\n this.resizedContext = null;\r\n this.timeout = 0;\r\n this.canvas_scale = 1;\r\n this.shouldUpdateGreenZone = false;\r\n this.pinchZoom = null;\r\n this.x = 0;\r\n this.y = 0;\r\n this.delta = 0;\r\n this.statusSwipe = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.currentTranslate = 0;\r\n this.navBreakPoint = 991;\r\n this.activeGreenZoneIndex = null;\r\n /*** background canvas ***/\r\n this.canvasBg = null;\r\n this.backCtxBg = null;\r\n /*** background canvas end ***/\r\n }\r\n\r\n componentDidMount() {\r\n const {width, height} = this.props;\r\n this.ctx = this.canvas.getContext('2d');\r\n const c = document.createElement('canvas');\r\n c.width = width;\r\n c.height = height;\r\n this.backCtx = c.getContext('2d');\r\n this.resizedCanvas = document.createElement(\"canvas\");\r\n this.resizedContext = this.resizedCanvas.getContext(\"2d\");\r\n\r\n /*** background canvas ***/\r\n this.canvasBg = document.createElement('canvas');\r\n this.canvasBg.width = width;\r\n this.canvasBg.height = height;\r\n this.backCtxBg = this.canvasBg.getContext('2d');\r\n this.backCtxBg.globalCompositeOperation = \"lighten\";\r\n /*** background canvas end ***/\r\n\r\n $(window).on('resize', this.handleOrientationChange);\r\n this.handleOrientationChange();\r\n $(window).on('setPinchZoom', this.createPinchZoom);\r\n if (window.setPinchZoom || IS_LIXIL_UI) {\r\n this.createPinchZoom();\r\n }\r\n $(window).on(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, (event, callback) => {\r\n this.draw(this.state.layers, callback);\r\n });\r\n\r\n if (Config.isVisualizerManagement()) {\r\n window.addEventListener(\"message\", (event) => {\r\n if (event.data && (event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.getState\r\n || event.data.action === VISUALIZER_MANAGEMENT_ACTIONS.checkState)) {\r\n this.draw(this.state.layers)\r\n }\r\n })\r\n }\r\n if (this.props.layers.length && this.state.allowPropsLayers) {\r\n this.drawPropsLayers();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off('resize', this.handleOrientationChange);\r\n $(window).off('setPinchZoom', this.createPinchZoom);\r\n $(window).off(ActionTypes.GET_CANVAS_SCALE);\r\n $(window).off(ActionTypes.RESET_CANVAS);\r\n $(window).off(ActionTypes.ENABLE_PINCH_ZOOM);\r\n $(window).off(ActionTypes.DISABLE_PINCH_ZOOM);\r\n $(window).off(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS);\r\n }\r\n\r\n drawPropsLayers = () => {\r\n this.setState({\r\n layers: this.props.layers\r\n });\r\n this.shouldUpdateGreenZone = true;\r\n this.draw(this.props.layers, this.props.useMouseHovering ? this.updateGliaCanvasImage : null);\r\n };\r\n\r\n createPinchZoom = () => {\r\n if ((Misc.isMobile() || isTouchDevice() || Config.isVisualizerManagement() || IS_LIXIL_UI) && this.props.useTouchZoom && !this.pinchZoom) {\r\n this.pinchZoom = new PinchZoom(this.canvas, {canUseUpdate: this.props.useTouchZoom});\r\n $(window).on(ActionTypes.RESET_CANVAS, () => {\r\n // $('.canvas-text').html('xxx');\r\n this.pinchZoom.reset();\r\n });\r\n $(window).on(ActionTypes.ENABLE_PINCH_ZOOM, () => {\r\n this.pinchZoom.enable();\r\n });\r\n $(window).on(ActionTypes.DISABLE_PINCH_ZOOM, () => {\r\n this.pinchZoom.disable();\r\n });\r\n if (this.props.updateLookCanvas) {\r\n this.props.updateLookCanvas();\r\n }\r\n }\r\n // const dashboardFramed = Config.isVisualizerManagement();\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n const onlyLayers = nextProps.layers.filter((layer) => {\r\n return !layer.image.includes(\"/static\")\r\n });\r\n const onlyStateLayers = this.state.layers.filter((layer) => {\r\n return !layer.image.includes(\"/static\")\r\n });\r\n\r\n let needToUpdateCanvas = onlyLayers.length !== onlyStateLayers.length,\r\n i = 0;\r\n\r\n if (!needToUpdateCanvas && onlyLayers.length && onlyStateLayers.length) {\r\n for (i; i < onlyLayers.length; i++) {\r\n if (onlyLayers[i].zIndex !== onlyStateLayers[i].zIndex || onlyLayers[i].image !== onlyStateLayers[i].image) {\r\n needToUpdateCanvas = true;\r\n // console.log('break on ' + i + ' element');\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (nextProps.layers.length && this.state.allowPropsLayers) {\r\n this.setState({\r\n layers: nextProps.layers\r\n });\r\n // if (this.state.mouseMoveSet) {\r\n // this.setLayersHoverings(nextProps.layers);\r\n // }\r\n }\r\n\r\n if (needToUpdateCanvas && this.state.allowPropsLayers) {\r\n this.shouldUpdateGreenZone = true;\r\n this.draw(nextProps.layers, this.props.useMouseHovering ? this.updateGliaCanvasImage : null);\r\n }\r\n }\r\n\r\n handleOrientationChange = () => {\r\n const canvas = $(this.canvas);\r\n const canvasWidth = canvas.width();\r\n const canvasHeight = canvas.height();\r\n const fromDesktopToMobile = this.state.dimensions.width > this.navBreakPoint && canvasWidth < this.navBreakPoint;\r\n const fromMobileToDesktop = this.state.dimensions.width < this.navBreakPoint && canvasWidth > this.navBreakPoint;\r\n this.setState({\r\n dimensions: {\r\n width: canvasWidth,\r\n height: canvasHeight,\r\n layersHoverings: (fromDesktopToMobile || fromMobileToDesktop) ? [] : this.state.layersHoverings, // recreate layersHoverings\r\n }\r\n });\r\n };\r\n\r\n imageCanvasScroll = (canvasClass, removeAllClasses) => {\r\n if (!window.canvasIsDragging && this.pinchZoom) {\r\n this.pinchZoom.reset();\r\n // $('.canvas-text').html($('.canvas-text').html() + canvasClass);\r\n this.pinchZoom.imageCanvasScroll(\r\n canvasClass.toLowerCase().replace(\" \", \"-\"),\r\n removeAllClasses,\r\n this.props.layoutType,\r\n this.props.layoutScene\r\n );\r\n }\r\n };\r\n\r\n layerIsExcludedFromHover = (layer) => {\r\n const {layout} = this.props;\r\n if (Array.isArray(layout.disabledClickablePartIds) && layout.disabledClickablePartIds.includes(layer.partId)) {\r\n return true\r\n }\r\n if (hardCodelyRemovedClicking(layer.partId, layout, this.props.fabricatorData)) {\r\n return true\r\n }\r\n return layout.excludedPartIdsFromHover\r\n ? layer.partId && layout.excludedPartIdsFromHover.some(partId => partId === layer.partId || layer.partId.indexOf(partId) > -1)\r\n : layout.excludedIndexesFromHover\r\n ? layout.excludedIndexesFromHover(this.props.layoutType).includes(layer.zIndex)\r\n : false\r\n }\r\n\r\n setLayersHoverings = (layers, images, errorImages) => {\r\n\r\n let layersHoverings = this.state.layersHoverings, i;\r\n // console.log('this.state.layersHoverings-->', this.state.layersHoverings);\r\n // console.log('layers', layers);\r\n\r\n const {layout} = this.props;\r\n\r\n layers.forEach((layer, index) => {\r\n\r\n // console.log('setLayersHovering:', layer);\r\n\r\n const excludedLayer = this.layerIsExcludedFromHover(layer, layout);\r\n\r\n if (!layer.isGreenHovering && !excludedLayer) {\r\n // search for current layer zIndex\r\n const existingGreenLayerHoveringIndex = layersHoverings.findIndex((layerHovering) => {\r\n return layerHovering ? layerHovering.layer.zIndex === layer.zIndex : 0\r\n });\r\n\r\n const getHoveringLayer = () => {\r\n return makeHoveringLayer(layer, images[index], this.props.layoutType, {\r\n width: this.props.width,\r\n height: this.props.height\r\n }, this.props.fabricatorData)\r\n }\r\n\r\n // if it exist & name is different - change it(simple layer replace)\r\n if (existingGreenLayerHoveringIndex > -1) {\r\n if (layer.image !== this.state.layersHoverings[existingGreenLayerHoveringIndex].layer.image\r\n && images[index] && !errorImages.includes(images[index].src)) {\r\n const hoveringLayer = getHoveringLayer();\r\n if (hoveringLayer) {\r\n layersHoverings.splice(existingGreenLayerHoveringIndex, 1, hoveringLayer)\r\n }\r\n }\r\n } else {\r\n if (images[index] && !errorImages.includes(images[index].src)) {\r\n const hoveringLayer = getHoveringLayer();\r\n if (hoveringLayer) {\r\n layersHoverings.push(hoveringLayer) // simple push\r\n }\r\n } else {\r\n console.info(\"makeHoveringLayer failed! no image for layer\", index);\r\n }\r\n }\r\n }\r\n });\r\n\r\n for (i = 0; i < layersHoverings.length; ++i) { // go over new green layers, and remove redundant\r\n const notNeededMoreLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layersHoverings[i].layer.zIndex\r\n });\r\n if (notNeededMoreLayerIndex === -1) {\r\n layersHoverings.splice(i, 1);\r\n --i; // Correct the index value\r\n }\r\n }\r\n\r\n this.setState({\r\n layersHoverings: orderBy(layersHoverings, 'layer.zIndex', layout.isNewLayout ? 'asc' : 'desc')\r\n // order by zIndex (top go last in new layouts)\r\n }, () => {\r\n this.shouldUpdateGreenZone = false;\r\n });\r\n };\r\n\r\n draw = (layers, callback) => {\r\n\r\n let cnt = 0;\r\n const images = [];\r\n\r\n // if (!window.count) {\r\n // window.count = 1;\r\n // }\r\n // console.log('draw!', window.count);\r\n // window.count++;\r\n\r\n this.id = setTimeout(() => {\r\n if (!this.id) {\r\n return;\r\n }\r\n clearTimeout(this.id);\r\n if (this.props.setShowCanvasLoader) {\r\n if (!window.requestInProcess) {\r\n this.props.setShowCanvasLoader(true)\r\n }\r\n } else if (layers.length) {\r\n this.props.enableLoader\r\n ? this.props.enableLoader()\r\n : loaderEnable(\"loader.canvasLoadingText\");\r\n }\r\n }, 500);\r\n\r\n this.backCtx.fillStyle = 'white';\r\n this.backCtx.fillRect(0, 0, this.props.width, this.props.height);\r\n // this.backCtx.clearRect(0, 0, this.props.width, this.props.height);\r\n\r\n // console.log('layers', layers);\r\n\r\n const alreadyRenderedImages = this.state.imagesRendered;\r\n const errorImages = [];\r\n\r\n // if (this.state.errorImages.length) {\r\n // layers = layers.filter(layer => !this.state.errorImages.includes(layer.image))\r\n // }\r\n\r\n layers.forEach((layer) => {\r\n const alreadyRenderedImage = alreadyRenderedImages.find((imageRendered) => {\r\n return layer.image === imageRendered.src\r\n });\r\n let image;\r\n if (layer.isGreenHovering) {\r\n image = layer.hoveringImage;\r\n } else if (alreadyRenderedImage && this.state.allowPropsLayers) {\r\n image = alreadyRenderedImage.image;\r\n if (!isIE()) { // IE11 doesn't like when someone is making empty src\r\n image.src = \"\"; // https://bugs.chromium.org/p/chromium/issues/detail?id=7731#c12\r\n }\r\n } else {\r\n image = new Image();\r\n image.crossOrigin = 'Anonymous';\r\n alreadyRenderedImages.push({\r\n image,\r\n src: layer.image\r\n });\r\n }\r\n image.layerDimensions = layer.layerDimensions || null;\r\n image.coords = layer.coords || null;\r\n images.push(image);\r\n image.onload = () => {\r\n cnt++;\r\n if (cnt === layers.length) {\r\n this.finishDraw(images, layers, alreadyRenderedImages, errorImages, callback)\r\n }\r\n };\r\n image.onerror = () => {\r\n //display error\r\n console.info('Coudn\\'t load image:', image.src);\r\n cnt++;\r\n errorImages.push(image.src);\r\n if (cnt === layers.length) {\r\n this.finishDraw(images, layers, alreadyRenderedImages, errorImages, callback);\r\n }\r\n };\r\n try {\r\n image.src = layer.image;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply image src', layer.image);\r\n }\r\n\r\n });\r\n };\r\n\r\n getBackgroundLayers = (layers = this.state.layers) => {\r\n const {layoutType, layout} = this.props;\r\n return layers.filter((layer) => {\r\n return layout.zIndexes[layoutType] && layout.zIndexes[layoutType].Background &&\r\n Object.values(layout.zIndexes[layoutType].Background).some(zIndex => zIndex === layer.zIndex);\r\n })\r\n };\r\n\r\n finishDraw = (images, layers, alreadyRenderedImages, errorImages, callback) => {\r\n clearTimeout(this.id);\r\n this.id = 0;\r\n\r\n const {width, height} = this.props;\r\n\r\n // const fullImagesFactor = UseFullSizeImages ? 100 : 54;\r\n\r\n const backgroundLayers = this.getBackgroundLayers(layers);\r\n\r\n if (backgroundLayers.length) { // draw backgrounds first\r\n this.backCtxBg.clearRect(0, 0, width, height); // clear previous\r\n\r\n const greenImage = images.find((imageObject) => imageObject.src.includes(\"data:image\"));\r\n if (greenImage) {\r\n const layer = backgroundLayers.find(layer => layer.image === greenImage.src);\r\n if (layer && layer.zIndex !== 500) {\r\n const greenImageIndex = images.findIndex((imageObject) => imageObject.src.includes(\"data:image\"));\r\n images.splice(greenImageIndex - 1, 1); // remove regular layer, draw only green one\r\n }\r\n }\r\n\r\n images.forEach((imageObject) => {\r\n if (errorImages.includes(imageObject.src)) {\r\n return\r\n }\r\n const layer = backgroundLayers.find(layer => layer.image === imageObject.src);\r\n if (layer) {\r\n if (layer.layerDimensions) {\r\n const dim = layer.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n this.backCtxBg.drawImage(imageObject, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else {\r\n // imageObject.width = width;\r\n // imageObject.height = height;\r\n this.backCtxBg.drawImage(imageObject, 0, 0, width, height);\r\n }\r\n }\r\n imageObject = null;\r\n });\r\n enhanceCanvas(this.canvasBg);\r\n this.backCtx.drawImage(this.canvasBg, 0, 0, width, height, 0, 0, width, height);\r\n }\r\n\r\n images.forEach((loadedImage) => {\r\n if (errorImages.includes(loadedImage.src)) {\r\n return\r\n }\r\n const layer = layers.find(layers => layers.image === loadedImage.src);\r\n if (layer && (!backgroundLayers.length || (layer.zIndex > backgroundLayers[backgroundLayers.length - 1].zIndex))) {\r\n if (loadedImage.layerDimensions) {\r\n const dim = loadedImage.layerDimensions;\r\n // console.log('yep', dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n this.backCtx.drawImage(loadedImage, 0, 0, dim.width, dim.height, dim.polygonArray[0][0], dim.polygonArray[0][1], dim.width, dim.height);\r\n } else if (loadedImage.coords) {\r\n // loadedImage.width = loadedImage.width*fullImagesFactor/100;\r\n // loadedImage.height = loadedImage.height*fullImagesFactor/100;\r\n // const max_x = loadedImage.coords.max_x*fullImagesFactor/100;\r\n const min_x = this.props.width*loadedImage.coords.min_x;\r\n const min_y = this.props.height*loadedImage.coords.min_y;\r\n // const max_y = loadedImage.coords.max_y*fullImagesFactor/100;\r\n // const width = max_x - min_x;\r\n // const height = max_y - min_y;\r\n // console.log('width', width);\r\n // console.log('height', height);\r\n // console.log('min_x', min_x);\r\n // console.log('min_y', min_y);\r\n // console.log('max_x', max_x);\r\n // console.log('max_y', max_y);\r\n try {\r\n this.backCtx.drawImage(loadedImage, 0, 0, loadedImage.width, loadedImage.height, min_x, min_y, loadedImage.width, loadedImage.height);\r\n } catch (e) {\r\n console.log(e, 'Can\\'t draw image with coords on the canvas', loadedImage.src);\r\n }\r\n } else {\r\n try {\r\n this.backCtx.drawImage(loadedImage, 0, 0, width, height, 0, 0, width, height);\r\n } catch (e) {\r\n console.log(e, 'Can\\'t draw image on the canvas', loadedImage.src);\r\n }\r\n }\r\n }\r\n loadedImage = null;\r\n });\r\n\r\n // this.ctx.drawImage(this.backCtx.canvas, 0, 0);\r\n requestAnimFrame(this.ctx.drawImage(this.backCtx.canvas, 0, 0));\r\n\r\n if (this.props.useMouseHovering) {\r\n const isMobile = Misc.isMobile() || isTouchDevice();\r\n if (!isMobile && !isIE() && !this.state.mouseMoveSet && this.canvas) {\r\n this.setOnMouseMove();\r\n }\r\n this.setState({\r\n alreadyRenderedImages\r\n });\r\n if (this.shouldUpdateGreenZone || !this.state.layersHoverings.length) {\r\n this.setLayersHoverings(layers, images, errorImages)\r\n }\r\n }\r\n\r\n if (!window.requestInProcess) {\r\n this.props.disableLoader ? this.props.disableLoader() : loaderDisable();\r\n }\r\n\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n\r\n if (callback) {\r\n callback()\r\n }\r\n };\r\n\r\n getGliaImage = () => {\r\n return this.canvasImg = el} alt=\"\" id={this.props.canvasId + \"Img\"}\r\n className=\"canvas-co-image\" />\r\n };\r\n\r\n updateGliaCanvasImage = () => {\r\n // if (this.pinchZoom && this.pinchZoom.containerScrolled && layers.some(layer => layer.image.includes('data:image/png;base64'))) {\r\n // return\r\n // }\r\n if (this.resizedContext && this.canvas) {\r\n this.resizedCanvas.height = this.canvas.height / 2;\r\n this.resizedCanvas.width = this.canvas.width / 2;\r\n const backgroundCanvas = document.getElementById(\"canvasBackgrounds\");\r\n if (backgroundCanvas) {\r\n this.resizedContext.drawImage(backgroundCanvas, 0, 0, this.resizedCanvas.width, this.resizedCanvas.height);\r\n }\r\n this.resizedContext.drawImage(this.canvas, 0, 0, this.resizedCanvas.width, this.resizedCanvas.height);\r\n this.canvasImg.src = this.resizedCanvas.toDataURL(\"image/jpeg\", 0.7);\r\n }\r\n };\r\n\r\n setOnMouseMove = () => {\r\n this.setState({\r\n mouseMoveSet: true\r\n });\r\n const delayBetweenUpdates = 50;\r\n this.canvas.addEventListener('mousemove', throttle(this.setHoveredLayer, delayBetweenUpdates), false);\r\n };\r\n\r\n setHoveredLayer = (evt) => {\r\n\r\n const {layoutType, layout} = this.props;\r\n const canvas = this.canvas;\r\n let mousePos = getMousePos(evt, canvas);\r\n let hovered = false;\r\n\r\n // console.log('mousePos', mousePos);\r\n\r\n if (Misc.isMobile() || isTouchDevice() || isIE()) {\r\n if (this.props.useTouchZoom) {\r\n $(window).trigger(ActionTypes.GET_CANVAS_SCALE);\r\n }\r\n }\r\n\r\n if (mousePos && (window.innerWidth < 480)) { // rotated version\r\n let temp = mousePos.x;\r\n // noinspection JSSuspiciousNameCombination\r\n mousePos.x = mousePos.y;\r\n mousePos.y = this.canvas.offsetHeight - temp;\r\n // console.log('mousePos2', mousePos);\r\n }\r\n\r\n if (this.state.layersHoverings.length) {\r\n let i = 0;\r\n for (i; i < this.state.layersHoverings.length; i++) {\r\n const layerHovering = this.state.layersHoverings[i];\r\n if ( mousePos\r\n && layerHovering\r\n && layerHovering.layerDimensions\r\n && !this.layerIsExcludedFromHover(layerHovering.layer, layout)\r\n // && pnpoly(layerHovering.layerDimensions.polygonArray, mousePos)\r\n && layerHovering.context2D.getImageData(\r\n (((mousePos.x / this.canvas_scale) / this.state.dimensions.width * this.props.width)) - layerHovering.layerDimensions.polygonArray[0][0],\r\n (((mousePos.y / this.canvas_scale) / this.state.dimensions.height * this.props.height)) - layerHovering.layerDimensions.polygonArray[0][1],\r\n 1,\r\n 1,\r\n {willReadFrequently: true}).data[3] > 120) {\r\n hovered = true;\r\n document.hoveredLayer = layerHovering.layer;\r\n document.hoveredMousePos = mousePos;\r\n if (!isIE() && (this.activeGreenZoneIndex !== layerHovering.layer.zIndex)) {\r\n // console.log('layerHovering active = ', layerHovering);\r\n const windowHover = layerHovering.layer.zIndex === layout.zIndexes[layoutType].Window_Default;\r\n let windowLayerHovering = '';\r\n if (windowHover) {\r\n windowLayerHovering = this.state.layersHoverings.find(layersHovering => {\r\n return layersHovering.layer.zIndex === layout.zIndexes[layoutType].Window_Covering\r\n });\r\n }\r\n this.activeGreenZoneIndex = layerHovering.layer.zIndex;\r\n this.renderGreenLayer(windowHover && windowLayerHovering ? windowLayerHovering : layerHovering);\r\n }\r\n\r\n break; // break for...of loop\r\n }\r\n }\r\n }\r\n\r\n if (!hovered) {\r\n document.hoveredLayer = null;\r\n this.draw(this.state.layers); // reload all layers without hovered\r\n }\r\n\r\n };\r\n\r\n renderGreenLayerByZindex = (zIndex) => {\r\n if (!isIE()) {\r\n const neededLayerHovering = this.state.layersHoverings.find((layerHovering) => {\r\n return layerHovering.layer.zIndex === zIndex\r\n });\r\n neededLayerHovering ? this.renderGreenLayer(neededLayerHovering) : this.draw(this.state.layers)\r\n }\r\n };\r\n\r\n renderGreenLayer = (layerHovering, allLayers = false) => {\r\n let layers = clone(this.state.layers);\r\n\r\n clearTimeout(this.timeout); // timeout for updating layers\r\n\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n if (this.props.layout && this.props.layout.isNewLayout && layerHovering) {\r\n return (layer.zIndex === layerHovering.layer.zIndex) && (layerHovering.layer.partId === layer.partId)\r\n }\r\n return layer.zIndex === layerHovering.layer.zIndex\r\n });\r\n\r\n if (hoveredLayerIndex > -1) {\r\n const layersToRender = checkForLayerParts(this, layers, hoveredLayerIndex, layerHovering, allLayers);\r\n // console.log('layersToRender', layersToRender);\r\n this.draw(layersToRender);\r\n this.timeout = setTimeout(() => { // remove green layer\r\n this.activeGreenZoneIndex = null;\r\n if (this.canvas) {\r\n this.draw(this.state.layers);\r\n }\r\n }, 2000);\r\n }\r\n };\r\n\r\n moveStart = (event) => {\r\n const eventPosition = getEventPosition(event);\r\n const thisX = parseFloat(eventPosition.x).toFixed(2);\r\n const thisY = parseFloat(eventPosition.y).toFixed(2);\r\n setTimeout(() => {\r\n if (window.mobileMenuOpened && !window.imageCanvasScroll && !window.imageCanvasScroll2) {\r\n this.x = thisX;\r\n this.y = thisY;\r\n this.statusSwipe = true;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.currentTranslate = getTranslateX(this.canvas);\r\n $('.canvas-text').html(this.currentTranslate);\r\n }\r\n }, 100);\r\n };\r\n\r\n move = (event) => {\r\n\r\n if (this.statusSwipe && window.mobileMenuOpened) {\r\n\r\n window.canvasIsDragging = true;\r\n\r\n const eventPosition = getEventPosition(event);\r\n\r\n let\r\n x = parseFloat(eventPosition.x).toFixed(2),\r\n y = parseFloat(eventPosition.y).toFixed(2),\r\n tX = parseFloat((x - this.x).toFixed(2)),\r\n tY = parseFloat((y - this.y).toFixed(2));\r\n\r\n if (!this.detectedSwipeRight || !this.detectedSwipeLeft) {\r\n if (Math.abs(parseFloat(tX)) >= this.delta) {\r\n if (parseFloat(tX) > this.delta) {\r\n this.detectedSwipeRight = true;\r\n } else if (parseFloat(tX) < -this.delta) {\r\n this.detectedSwipeLeft = true;\r\n }\r\n }\r\n }\r\n\r\n if ((this.detectedSwipeLeft || this.detectedSwipeRight) && Math.abs(tX) > Math.abs(tY)) {\r\n // console.log('Math.abs(tX)', Math.abs(tX));\r\n\r\n const nextPosition = Math.round((this.currentTranslate + tX)*100)/100;\r\n const percentage = this.state.dimensions.width < 680 ? 60 : 50;\r\n // const percentage = 50;\r\n const visibleCanvasWidth = (percentage / 100) * this.state.dimensions.width; // percentage of number\r\n\r\n // console.log('nextPosition', nextPosition);\r\n // $('.canvas-text').html(nextPosition);\r\n // console.log('visibleCanvasWidth', visibleCanvasWidth);\r\n\r\n if (Math.abs(nextPosition) < visibleCanvasWidth && nextPosition < 0) {\r\n const transform2d = 'translateX(' + nextPosition + 'px)';\r\n this.canvas.style.webkitTransform = transform2d;\r\n this.canvas.style.mozTransform = transform2d;\r\n this.canvas.style.msTransform = transform2d;\r\n this.canvas.style.oTransform = transform2d;\r\n this.canvas.style.transform = transform2d;\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n moveEnd = () => {\r\n\r\n // let\r\n // x = getEventPosition(e).x,\r\n // tX = parseFloat((x - this.x).toFixed(2));\r\n\r\n this.x = 0;\r\n this.y = 0;\r\n this.statusSwipe = false;\r\n if (this.pinchZoom) {\r\n $(window).trigger(ActionTypes.CANVAS_SCALE_CHANGED, [this.pinchZoom.getScale()]);\r\n }\r\n\r\n if (this.detectedSwipeLeft || this.detectedSwipeRight) {\r\n this.currentTranslate = getTranslateX(this.canvas);\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n window.canvasIsDragging = false;\r\n this.pinchZoom.enable();\r\n // $(this.canvas).css({\r\n // transform: `none`\r\n // });\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {/*
    */}\r\n {this.getGliaImage()}\r\n this.canvas = el}\r\n className={\"canvas-el\" + (this.props.useMouseHovering ? \" canvas-el--pointer\" : \"\")}\r\n id={this.props.canvasId}\r\n width={this.props.width}\r\n height={this.props.height}\r\n onTouchStart={this.moveStart}\r\n onTouchMove={this.move}\r\n onTouchEnd={this.moveEnd}\r\n style={{position: \"relative\"}} />\r\n
    \r\n );\r\n }\r\n}\r\n","const layouts = {\r\n Large: {\r\n Background: 100,\r\n Floor: 600,\r\n Ceiling: 200,\r\n Wall_A: 300,\r\n Wall_B: 400,\r\n Wall_C: 500,\r\n Wall_A_Accent_Mask: 700,\r\n Global_Shadow_Overlay: 800,\r\n Window_Default: 900,\r\n Window_Covering: 1000,\r\n Ceiling_Lights: 1100,\r\n Wall_Lights: 1300,\r\n Towel_Rack: 1400,\r\n Shower: {\r\n Custom60in: {\r\n Body: 2000,\r\n Floor: 2004,\r\n ShowerDrain: 2005,\r\n FloorShadow: 2006,\r\n ExtrusionWallRight: 2010,\r\n ExtrusionWallRightShadow: 2011,\r\n Wall: 2020,\r\n Wall2: 2021,\r\n WallAccent: 2022,\r\n WallAccent2: 2023,\r\n WallShadow: 2024,\r\n LargeCornerCaddie: 2025,\r\n Fixture: 2031,\r\n ShowerHead: 2032,\r\n ShowerPanCombo: 2033,\r\n LargeCornerSeat: 2034,\r\n CornerCaddie: 2035,\r\n SoapDish: 2036,\r\n SmallCornerShelf: 2038,\r\n GrabBar: 2039,\r\n ExtrusionWallLeftHalfWall: 2041,\r\n ExtrusionWallLeftShadowHalfWall: 2042,\r\n Threshold: 2043,\r\n ThresholdShadow: 2044,\r\n ShowerDoor: 2045,\r\n ShowerDoorHandle: 2046,\r\n ExtrusionWallLeft: 2047,\r\n ExtrusionWallLeftShadow: 2048,\r\n Overlay: 2050,\r\n Glass: 2060,\r\n PonyWall: 2070,\r\n PonyWallShadow: 2071,\r\n PonyWallCap: 5025,\r\n PonyWallCapShadow: 5026,\r\n PonyWallGlass: 5027,\r\n },\r\n Steam60in: {\r\n ExtrusionWallLeft: 2500,\r\n Body: {\r\n 0: 2550, // default body (no parts)\r\n 1: 2520, // Part = 1\r\n 2: 2530, // Part = 2\r\n },\r\n Fixture: 2525,\r\n Overlay: 2600\r\n },\r\n TubCombo: {\r\n WallConfiguration: 2065,\r\n Liner: 2027,\r\n ReplacementTub: 2028,\r\n WalkInTub: 2029,\r\n JettedTub: 2030,\r\n },\r\n },\r\n BathTub: {\r\n FreeStanding: {\r\n FixtureFloorMount: 3000,\r\n Base: 3005,\r\n Fixture: 3010,\r\n },\r\n Custom60in: {\r\n FixtureFloorMount: 3500,\r\n Base: 3505,\r\n Spa: 3515,\r\n Top: 3525,\r\n Fixture: 3530\r\n }\r\n },\r\n Toilet: 4000,\r\n Vanity: {\r\n Custom: {\r\n Cabinet: 5000,\r\n Handle: 5010,\r\n VanityBacksplash: 5020,\r\n CounterTop: 5030,\r\n Mirror: 5040,\r\n Faucet: 5050,\r\n Sink: 5060,\r\n },\r\n Complete: {\r\n VanityBacksplash: 5500,\r\n Faucet: 5510,\r\n Cabinet: 5520,\r\n Mirror: 5530,\r\n }\r\n }\r\n },\r\n Small: {\r\n Background: 100,\r\n Floor: 450,\r\n Ceiling: 200,\r\n Wall_A: 300,\r\n Wall_B: 400,\r\n Wall_C: 500,\r\n Wall_A_Accent_Mask: 700,\r\n Global_Shadow_Overlay: 800,\r\n Window_Default: 900,\r\n Window_Covering: 1000,\r\n Ceiling_Lights: 1100,\r\n Wall_Lights: 1300,\r\n Towel_Rack: 1400,\r\n Shower: {\r\n Custom60in: {\r\n Body: 2000,\r\n Floor: 2004,\r\n ShowerDrain: 2005,\r\n FloorShadow: 2006,\r\n ExtrusionWallRight: 2010,\r\n ExtrusionWallRightShadow: 2011,\r\n Wall: 2020,\r\n Wall2: 2021,\r\n WallAccent: 2022,\r\n WallAccent2: 2023,\r\n WallShadow: 2024,\r\n LargeCornerCaddie: 2025,\r\n Fixture: 2031,\r\n ShowerHead: 2032,\r\n ShowerPanCombo: 2033,\r\n LargeCornerSeat: 2034,\r\n CornerCaddie: 2035,\r\n SoapDish: 2036,\r\n SmallCornerShelf: 2038,\r\n GrabBar: 2039,\r\n ExtrusionWallLeftHalfWall: 2041,\r\n ExtrusionWallLeftShadowHalfWall: 2042,\r\n Threshold: 2043,\r\n ThresholdShadow: 2044,\r\n ShowerDoor: 2045,\r\n ShowerDoorHandle: 2046,\r\n ExtrusionWallLeft: 2047,\r\n ExtrusionWallLeftShadow: 2048,\r\n Overlay: 2050,\r\n Glass: 2060,\r\n PonyWall: 2070,\r\n PonyWallShadow: 2071,\r\n PonyWallCap: 5025,\r\n PonyWallCapShadow: 5026,\r\n PonyWallGlass: 5027,\r\n },\r\n Steam60in: {\r\n ExtrusionWallLeft: 2500,\r\n Body: {\r\n 0: 2550, // default body (no parts)\r\n 1: 2520, // Part = 1\r\n 2: 2530, // Part = 2\r\n },\r\n Fixture: 2525,\r\n Overlay: 2600\r\n },\r\n TubCombo: {\r\n WallConfiguration: 2065,\r\n Liner: 2027,\r\n ReplacementTub: 2028,\r\n WalkInTub: 2029,\r\n JettedTub: 2030,\r\n },\r\n },\r\n BathTub: {\r\n FreeStanding: {\r\n FixtureFloorMount: 3000,\r\n Base: 3005,\r\n Fixture: 3010,\r\n },\r\n Custom60in: {\r\n FixtureFloorMount: 3500,\r\n Base: 3505,\r\n Spa: 3515,\r\n Top: 3525,\r\n Fixture: 3530\r\n }\r\n },\r\n Toilet: 4000,\r\n Vanity: {\r\n Custom: {\r\n Cabinet: 5000,\r\n Handle: 5010,\r\n VanityBacksplash: 5020,\r\n CounterTop: 5030,\r\n Mirror: 5040,\r\n Faucet: 5050,\r\n Sink: 5060,\r\n },\r\n Complete: {\r\n VanityBacksplash: 5500,\r\n Faucet: 5510,\r\n Cabinet: 5520,\r\n Mirror: 5530,\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer) => {\r\n\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n\r\n switch (layer.zIndex) {\r\n\r\n // General\r\n case layouts[currentLayout].Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Ceiling:\r\n return \"Ceiling\";\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Toilet\"\r\n };\r\n case layouts[currentLayout].Window_Default:\r\n return \"Window\";\r\n\r\n // case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n // case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n // case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n // return {\r\n // parent: \"Shower\",\r\n // child: \"Shower Body\"\r\n // };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall A\"\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall C\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallRight:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Shower Wall\"\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Mirror:\r\n return {\r\n parent: \"Vanity\",\r\n child: \"Mirror\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeftHalfWall:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWall:\r\n return \"left_wall_custom\";\r\n case layouts[currentLayout].Vanity.Custom.VanityBacksplash:\r\n case layouts[currentLayout].Wall_A_Accent_Mask:\r\n case layouts[currentLayout].Wall_B:\r\n return \"wall_b_custom\";\r\n case layouts[currentLayout].Vanity.Complete.Cabinet:\r\n case layouts[currentLayout].Vanity.Custom.Handle:\r\n case layouts[currentLayout].Vanity.Custom.CounterTop:\r\n case layouts[currentLayout].Vanity.Custom.Faucet:\r\n case layouts[currentLayout].Vanity.Custom.Sink:\r\n case layouts[currentLayout].Vanity.Custom.Cabinet:\r\n return \"vanity_custom\";\r\n\r\n case layouts[currentLayout].Shower.Custom60in.Threshold:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Threshold\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent2:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Shower Walls Accent\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.CornerCaddie:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerCaddie:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerSeat:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Seat\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.SoapDish:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Soap Dish\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.SmallCornerShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Small Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.GrabBar:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Grab Bar\"\r\n };\r\n case layouts[currentLayout].Shower.Custom60in.Glass:\r\n case layouts[currentLayout].Shower.Custom60in.Floor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerPanCombo:\r\n case layouts[currentLayout].Shower.Custom60in.Wall:\r\n case layouts[currentLayout].Shower.Custom60in.Wall2:\r\n case layouts[currentLayout].Shower.Custom60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerHead:\r\n case layouts[currentLayout].Shower.Custom60in.Body:\r\n case layouts[currentLayout].Shower.Custom60in.Overlay:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n return \"shower_custom\";\r\n // BathTub\r\n case layouts[currentLayout].BathTub.Custom60in.Top:\r\n case layouts[currentLayout].BathTub.Custom60in.Spa:\r\n case layouts[currentLayout].BathTub.Custom60in.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Fixture:\r\n case layouts[currentLayout].BathTub.FreeStanding.FixtureFloorMount:\r\n case layouts[currentLayout].BathTub.Custom60in.Fixture:\r\n case layouts[currentLayout].BathTub.Custom60in.FixtureFloorMount:\r\n return \"bathtub_custom\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return \"shower_combo\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallCap:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallGlass:\r\n return \"shower_pony_wall\";\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions: (zIndex, currentLayout) => {\r\n switch (zIndex) {\r\n // General\r\n case layouts[currentLayout].Floor:\r\n return {\r\n polygonArray: [[80,770],[1620,770],[1620,1080],[80,1080]],\r\n width: 1540,\r\n height: 310\r\n };\r\n case layouts[currentLayout].Ceiling:\r\n return {\r\n polygonArray: [[0,0],[1620,0],[1620,320],[0,320]],\r\n width: 1620,\r\n height: 320\r\n };\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n polygonArray: [[500,640],[820,640],[820,960],[500,960]],\r\n width: 320,\r\n height: 320\r\n };\r\n case layouts[currentLayout].Window_Default:\r\n case layouts[currentLayout].Window_Covering:\r\n return {\r\n polygonArray: [[1200,240],[1400,240],[1400,780],[1200,780]],\r\n width: 200,\r\n height: 540\r\n };\r\n case layouts[currentLayout].Shower.Steam60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"1\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Body[\"2\"]:\r\n case layouts[currentLayout].Shower.Steam60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallRight:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Custom60in.ExtrusionWallLeftHalfWall:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWall:\r\n case layouts[currentLayout].Shower.Custom60in.Threshold:\r\n case layouts[currentLayout].Shower.Custom60in.Glass:\r\n case layouts[currentLayout].Shower.Custom60in.Floor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerPanCombo:\r\n case layouts[currentLayout].Shower.Custom60in.Wall:\r\n case layouts[currentLayout].Shower.Custom60in.Wall2:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent:\r\n case layouts[currentLayout].Shower.Custom60in.WallAccent2:\r\n case layouts[currentLayout].Shower.Custom60in.Fixture:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerHead:\r\n case layouts[currentLayout].Shower.Custom60in.Body:\r\n case layouts[currentLayout].Shower.Custom60in.Overlay:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoor:\r\n case layouts[currentLayout].Shower.Custom60in.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallCap:\r\n case layouts[currentLayout].Shower.Custom60in.PonyWallGlass:\r\n case layouts[currentLayout].Shower.Custom60in.SoapDish:\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerSeat:\r\n case layouts[currentLayout].Shower.Custom60in.LargeCornerCaddie:\r\n case layouts[currentLayout].Shower.Custom60in.CornerCaddie:\r\n case layouts[currentLayout].Shower.Custom60in.SmallCornerShelf:\r\n case layouts[currentLayout].Shower.Custom60in.GrabBar:\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return {\r\n polygonArray: [[570,0],[1500,0],[1540,1080],[570,1080]],\r\n width: 970,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n polygonArray: [[0,0],[130,0],[130,1080],[0,1080]],\r\n width: 130,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_A_Accent_Mask:\r\n return {\r\n polygonArray: [[90,120],[700,120],[700,690],[90,690]],\r\n width: 610,\r\n height: 570\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n polygonArray: [[900,0],[1620,0],[1620,1080],[900,1080]],\r\n width: 720,\r\n height: 1080\r\n };\r\n case layouts[currentLayout].Wall_B:\r\n return {\r\n polygonArray: [[80,140],[1080,140],[1080,990],[80,990]],\r\n width: 1000,\r\n height: 850\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Mirror:\r\n return {\r\n polygonArray: [[80,170],[700,170],[700,630],[80,630]],\r\n width: 620,\r\n height: 460\r\n };\r\n case layouts[currentLayout].Vanity.Custom.VanityBacksplash:\r\n return {\r\n polygonArray: [[80,580],[700,580],[700,680],[80,680]],\r\n width: 620,\r\n height: 100\r\n };\r\n case layouts[currentLayout].Vanity.Custom.CounterTop:\r\n return {\r\n polygonArray: [[80,610],[770,610],[770,710],[80,710]],\r\n width: 690,\r\n height: 100\r\n };\r\n case layouts[currentLayout].Vanity.Custom.Faucet:\r\n case layouts[currentLayout].Vanity.Custom.Sink:\r\n return {\r\n polygonArray: [[80,500],[700,500],[700,710],[80,710]],\r\n width: 620,\r\n height: 210\r\n };\r\n case layouts[currentLayout].Vanity.Complete.Cabinet:\r\n case layouts[currentLayout].Vanity.Custom.Handle:\r\n case layouts[currentLayout].Vanity.Custom.Cabinet:\r\n return {\r\n polygonArray: [[80,500],[780,500],[780,1070],[80,1070]],\r\n width: 700,\r\n height: 570\r\n };\r\n // BathTub\r\n case layouts[currentLayout].BathTub.Custom60in.Top:\r\n case layouts[currentLayout].BathTub.Custom60in.Spa:\r\n case layouts[currentLayout].BathTub.Custom60in.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Base:\r\n case layouts[currentLayout].BathTub.FreeStanding.Fixture:\r\n case layouts[currentLayout].BathTub.FreeStanding.FixtureFloorMount:\r\n case layouts[currentLayout].BathTub.Custom60in.Fixture:\r\n case layouts[currentLayout].BathTub.Custom60in.FixtureFloorMount:\r\n return {\r\n polygonArray: [[750,580],[1620,580],[1620,1080],[750,1080]],\r\n width: 870,\r\n height: 500\r\n };\r\n default:\r\n return null\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Background: {\r\n BackgroundBG: 100,\r\n Floor: 200,\r\n LeftWall: 300,\r\n ShowerWall: 400,\r\n RightWall: 550,\r\n CenterWall: 600,\r\n },\r\n ShowerWallAccent: 1000,\r\n Accessories: {\r\n WindowBody: 1000,\r\n WindowKits: 1100,\r\n LargeCornerCaddie: 2010,\r\n LargeCornerCaddie2: 2020,\r\n Fixture: 2100,\r\n LargeCornerSeat: 3330,\r\n LargeCornerSeat2: 3340,\r\n CornerCaddie: 2410,\r\n CornerCaddie2: 2420,\r\n SoapDish: 2500,\r\n SoapDish2: 2510,\r\n SoapDish3: 2520,\r\n SmallCornerShelf: 2600,\r\n GrabBar: 3500, // more that the fixture\r\n GrabBar2: 3510,\r\n GrabBar3: 3520,\r\n CornerShelf1: 2810,\r\n CornerShelf2: 2820,\r\n CornerShelf3: 2830,\r\n CornerShelf4: 2840,\r\n CornerShelf5: 2850,\r\n CornerShelf6: 2860,\r\n ShowerPod: 2900,\r\n LargeShelf: 2905,\r\n ShampooShelf: 2902,\r\n Seats: 3320,\r\n ShowerRod: 4200,\r\n TowelBar: 4250,\r\n },\r\n Shower: {\r\n ShowerPan: 3200,\r\n ShowerPanCombo: 3300,\r\n ShowerHead: 3350,\r\n ShowerFixture: 3410,\r\n ShowerFixture2: 3420,\r\n ShowerDoorHandle: 3600,\r\n // Threshold\r\n TubCombo: {\r\n WallConfiguration: 3600,\r\n Liner: 3700,\r\n ReplacementTub: 3800,\r\n WalkInTub: 3900,\r\n JettedTub: 4000,\r\n },\r\n ShowerDoor: 4100,\r\n ShowerDoor2: 4110,\r\n },\r\n Walls: {\r\n LeftWall: 4800,\r\n CeilingPanels: 4050, // less than shower doors\r\n RightWall: 4900,\r\n },\r\n Toilet: 5000,\r\n PaperHolder: 5050,\r\n Vanity: {\r\n Cabinet: 6000,\r\n Handle: 6100,\r\n CounterTop: 6200,\r\n VanityBacksplash: 6300,\r\n Mirror: 6400,\r\n Faucet: 6500,\r\n Sink: 6600,\r\n },\r\n Globals: {\r\n ToiletPaper: 8000,\r\n ToiletPaperHolder: 8050,\r\n Towel: 8100,\r\n LightFixture: 8200,\r\n LampFixture: 8250,\r\n DecorWindow: 8300,\r\n DecorSeat: 8400,\r\n },\r\n Bathtub: {\r\n BathTubFixture: 9000,\r\n BathTubBody: 9100,\r\n }\r\n };\r\n});\r\n\r\nlayouts[\"Layout4\"].Vanity = {\r\n Cabinet: 10000,\r\n Handle: 10100,\r\n CounterTop: 10200,\r\n VanityBacksplash: 10300,\r\n Mirror: 10400,\r\n Faucet: 10500,\r\n Sink: 10600,\r\n};\r\nlayouts[\"Layout4\"].Globals.DecorWindow = 1200;\r\nlayouts[\"Layout4\"].Toilet = 15000;\r\nlayouts[\"Layout4\"].Globals.DecorSeat = 18000;\r\nlayouts[\"Layout4\"].Globals.LightFixture = 19000;\r\nlayouts[\"Layout4\"].Globals.LampFixture = 19100;\r\nlayouts[\"Layout4\"].Globals.ToiletPaperHolder = 20000;\r\nlayouts[\"Layout4\"].PaperHolder = 20000;\r\n\r\n\r\nconst getLayerDimensions = (zIndex, currentLayout) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n switch (zIndex) {\r\n // case layouts[currentLayout].Background.ShowerWall:\r\n // return {\r\n // polygonArray: [[sizeFactor*350,sizeFactor*50],[sizeFactor*950,sizeFactor*50],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n // width: sizeFactor*600,\r\n // height: sizeFactor*900\r\n // };\r\n case layouts[currentLayout].Shower.ShowerFixture:\r\n case layouts[currentLayout].Shower.ShowerFixture2:\r\n case layouts[currentLayout].Shower.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.ShowerHead:\r\n case layouts[currentLayout].ShowerWallAccent:\r\n case layouts[currentLayout].Accessories.Fixture:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat2:\r\n case layouts[currentLayout].Accessories.CornerCaddie:\r\n case layouts[currentLayout].Accessories.CornerCaddie2:\r\n case layouts[currentLayout].Accessories.SoapDish:\r\n case layouts[currentLayout].Accessories.SoapDish2:\r\n case layouts[currentLayout].Accessories.SoapDish3:\r\n case layouts[currentLayout].Accessories.SmallCornerShelf:\r\n case layouts[currentLayout].Accessories.GrabBar:\r\n case layouts[currentLayout].Accessories.GrabBar2:\r\n case layouts[currentLayout].Accessories.GrabBar3:\r\n case layouts[currentLayout].Accessories.CornerShelf1:\r\n case layouts[currentLayout].Accessories.CornerShelf2:\r\n case layouts[currentLayout].Accessories.CornerShelf3:\r\n case layouts[currentLayout].Accessories.CornerShelf4:\r\n case layouts[currentLayout].Accessories.CornerShelf5:\r\n case layouts[currentLayout].Accessories.CornerShelf6:\r\n case layouts[currentLayout].Accessories.ShowerPod:\r\n case layouts[currentLayout].Accessories.LargeShelf:\r\n case layouts[currentLayout].Accessories.Seats:\r\n case layouts[currentLayout].Accessories.ShowerRod:\r\n case layouts[currentLayout].Accessories.WindowBody:\r\n case layouts[currentLayout].Accessories.WindowKits: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*130],[sizeFactor*950,sizeFactor*130],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*800\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.ShowerDoor:\r\n case layouts[currentLayout].Shower.ShowerDoor2: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*950,0],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*800\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie:\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie2: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*30],[sizeFactor*950,sizeFactor*30],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*900\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.Shower:\r\n case layouts[currentLayout].Shower.ShowerPanCombo: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,sizeFactor*730],[sizeFactor*950,sizeFactor*730],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*200\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,sizeFactor*730],[sizeFactor*1260,sizeFactor*730],[sizeFactor*1260,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*700,\r\n height: sizeFactor*200\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n return {\r\n polygonArray: [[sizeFactor*300,sizeFactor*280],[sizeFactor*1000,sizeFactor*280],[sizeFactor*1000,sizeFactor*1080],[sizeFactor*300,sizeFactor*1080]],\r\n width: sizeFactor*700,\r\n height: sizeFactor*800\r\n };\r\n case layouts[currentLayout].Toilet:\r\n case layouts[currentLayout].PaperHolder: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*700,sizeFactor*500],[sizeFactor*1250,sizeFactor*500],[sizeFactor*1250,sizeFactor*1080],[sizeFactor*700,sizeFactor*1080]],\r\n width: sizeFactor*550,\r\n height: sizeFactor*580\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*100,sizeFactor*500],[sizeFactor*600,sizeFactor*500],[sizeFactor*600,sizeFactor*1080],[sizeFactor*100,sizeFactor*1080]],\r\n width: sizeFactor*500,\r\n height: sizeFactor*580\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Vanity.Cabinet:\r\n return {\r\n polygonArray: [[sizeFactor*920,sizeFactor*530],[sizeFactor*1920,sizeFactor*530],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*920,sizeFactor*1080]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*550\r\n };\r\n case layouts[currentLayout].Vanity.CounterTop:\r\n return {\r\n polygonArray: [[sizeFactor*900,sizeFactor*500],[sizeFactor*1920,sizeFactor*500],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*900,sizeFactor*1080]],\r\n width: sizeFactor*1020,\r\n height: sizeFactor*580\r\n };\r\n case layouts[currentLayout].Vanity.Faucet:\r\n case layouts[currentLayout].Vanity.Sink:\r\n case layouts[currentLayout].Vanity.VanityBacksplash: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*900,sizeFactor*400],[sizeFactor*1900,sizeFactor*400],[sizeFactor*1900,sizeFactor*830],[sizeFactor*800,sizeFactor*830]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*430\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*300,sizeFactor*400],[sizeFactor*730,sizeFactor*400],[sizeFactor*730,sizeFactor*930],[sizeFactor*300,sizeFactor*930]],\r\n width: sizeFactor*430,\r\n height: sizeFactor*530\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Vanity.Mirror:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*1100,0],[sizeFactor*1900,0],[sizeFactor*1900,sizeFactor*640],[sizeFactor*1100,sizeFactor*640]],\r\n width: sizeFactor*800,\r\n height: sizeFactor*640\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*130,100],[sizeFactor*600,100],[sizeFactor*600,sizeFactor*540],[sizeFactor*130,sizeFactor*540]],\r\n width: sizeFactor*470,\r\n height: sizeFactor*440\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Walls.CenterWall:\r\n case layouts[currentLayout].Background.CenterWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return null;\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*360,0],[sizeFactor*760,0],[sizeFactor*760,sizeFactor*880],[sizeFactor*360,sizeFactor*880]],\r\n width: sizeFactor*400,\r\n height: sizeFactor*880\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*750,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*750,sizeFactor*1080]],\r\n width: sizeFactor*1170,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*120,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*930],[sizeFactor*120,sizeFactor*930]],\r\n width: sizeFactor*1900,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.LeftWall:\r\n case layouts[currentLayout].Background.LeftWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.CeilingPanels:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*300,0],[sizeFactor*950,0],[sizeFactor*950,sizeFactor*100],[sizeFactor*300,sizeFactor*100]],\r\n width: sizeFactor*650,\r\n height: sizeFactor*100\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*560,0],[sizeFactor*1240,0],[sizeFactor*1240,sizeFactor*930],[sizeFactor*560,sizeFactor*930]],\r\n width: sizeFactor*580,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Background.Floor: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*100,sizeFactor*800],[sizeFactor*1300,sizeFactor*800],[sizeFactor*1300,sizeFactor*1080],[sizeFactor*100,sizeFactor*1080]],\r\n width: sizeFactor*1200,\r\n height: sizeFactor*280\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,sizeFactor*740],[sizeFactor*1920,740],[sizeFactor*1920,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*1920,\r\n height: sizeFactor*340\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Background.ShowerWall:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*1650,0],[sizeFactor*1650,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*1300,\r\n height: sizeFactor*930\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*250,0],[sizeFactor*1250,0],[sizeFactor*1250,sizeFactor*930],[sizeFactor*250,sizeFactor*930]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n case layouts[currentLayout].Bathtub.BathTubBody:\r\n return {\r\n polygonArray: [[sizeFactor*800,sizeFactor*580],[sizeFactor*1920,sizeFactor*580],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*800,sizeFactor*1080]],\r\n width: sizeFactor*1120,\r\n height: sizeFactor*500\r\n };\r\n case layouts[currentLayout].Bathtub.BathTubFixture:\r\n return {\r\n polygonArray: [[sizeFactor*1380,sizeFactor*370],[sizeFactor*1660,sizeFactor*370],[sizeFactor*1660,sizeFactor*1000],[sizeFactor*1380,sizeFactor*1000]],\r\n width: sizeFactor*280,\r\n height: sizeFactor*730\r\n };\r\n default:\r\n return null\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer: (currentLayout, layer) => {\r\n // console.log('currentLayout', currentLayout);\r\n // console.log('layer', layer);\r\n switch (layer.zIndex) {\r\n // General\r\n case layouts[currentLayout].Ceiling:\r\n return \"Ceiling\";\r\n case layouts[currentLayout].Toilet:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Toilet\"\r\n };\r\n case layouts[currentLayout].PaperHolder:\r\n return {\r\n parent: \"Toilet\",\r\n child: \"Paper Holder\"\r\n };\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.Body[\"1\"]:\r\n // case layouts[currentLayout].Shower.Body[\"2\"]:\r\n // case layouts[currentLayout].Shower.Fixture:\r\n // return {\r\n // parent: \"Shower\",\r\n // child: \"Shower Body\"\r\n // };\r\n case layouts[currentLayout].Wall_A:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall A\"\r\n };\r\n case layouts[currentLayout].Wall_C:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Wall C\"\r\n };\r\n case layouts[currentLayout].Vanity.Mirror:\r\n return {\r\n parent: \"Vanity\",\r\n child: \"Mirror\"\r\n };\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n // case layouts[currentLayout].Shower.ExtrusionWallLeftHalfWall:\r\n // case layouts[currentLayout].Shower.PonyWall:\r\n // return \"left_wall_custom\";\r\n case layouts[currentLayout].Vanity.VanityBacksplash:\r\n case layouts[currentLayout].Wall_B:\r\n return \"wall_b_custom\";\r\n case layouts[currentLayout].Vanity.Handle:\r\n case layouts[currentLayout].Vanity.CounterTop:\r\n case layouts[currentLayout].Vanity.Faucet:\r\n case layouts[currentLayout].Vanity.Sink:\r\n case layouts[currentLayout].Vanity.Cabinet:\r\n return \"vanity_custom\";\r\n\r\n case layouts[currentLayout].Shower.Threshold:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Threshold\"\r\n };\r\n case layouts[currentLayout].Accessories.CornerCaddie:\r\n case layouts[currentLayout].Accessories.CornerCaddie2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie:\r\n case layouts[currentLayout].Accessories.LargeCornerCaddie2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Caddie\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeCornerSeat:\r\n case layouts[currentLayout].Accessories.LargeCornerSeat2:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Corner Seat\"\r\n };\r\n case layouts[currentLayout].Accessories.SoapDish:\r\n case layouts[currentLayout].Accessories.SoapDish2:\r\n case layouts[currentLayout].Accessories.SoapDish3:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Soap Dish\"\r\n };\r\n case layouts[currentLayout].Accessories.SmallCornerShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Small Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.GrabBar:\r\n case layouts[currentLayout].Accessories.GrabBar2:\r\n case layouts[currentLayout].Accessories.GrabBar3:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Grab Bar\"\r\n };\r\n case layouts[currentLayout].Accessories.CornerShelf1:\r\n case layouts[currentLayout].Accessories.CornerShelf2:\r\n case layouts[currentLayout].Accessories.CornerShelf3:\r\n case layouts[currentLayout].Accessories.CornerShelf4:\r\n case layouts[currentLayout].Accessories.CornerShelf5:\r\n case layouts[currentLayout].Accessories.CornerShelf6:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Corner Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.ShowerPod:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shower Pod\"\r\n };\r\n case layouts[currentLayout].Accessories.LargeShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Large Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.ShampooShelf:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shampoo Shelf\"\r\n };\r\n case layouts[currentLayout].Accessories.Seats:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Seats\"\r\n };\r\n case layouts[currentLayout].Accessories.ShowerRod:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Shower Rod\"\r\n };\r\n case layouts[currentLayout].Accessories.TowelBar:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Towel Bar\"\r\n };\r\n case layouts[currentLayout].Accessories.WindowBody:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Window\"\r\n };\r\n case layouts[currentLayout].Accessories.WindowKits:\r\n return {\r\n parent: \"Shower Accessories\",\r\n child: \"Window Kits\"\r\n };\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Right Wall\"\r\n };\r\n case layouts[currentLayout].Background.LeftWall:\r\n case layouts[currentLayout].Walls.LeftWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Left Wall\"\r\n };\r\n case layouts[currentLayout].Background.CenterWall:\r\n case layouts[currentLayout].Walls.CenterWall:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Center Wall\"\r\n };\r\n case layouts[currentLayout].Walls.CeilingPanels:\r\n return {\r\n parent: \"Walls\",\r\n child: \"Ceiling Panels\"\r\n };\r\n case layouts[currentLayout].Shower.ShowerHead:\r\n return {\r\n parent: \"Shower\",\r\n child: \"Shower Head\"\r\n };\r\n case layouts[currentLayout].Background.Floor:\r\n return {\r\n parent: \"Floor\",\r\n child: \"Floor\"\r\n };\r\n case layouts[currentLayout].Shower.Glass:\r\n case layouts[currentLayout].Shower.Floor:\r\n case layouts[currentLayout].Shower.ShowerPanCombo:\r\n case layouts[currentLayout].Background.ShowerWall:\r\n case layouts[currentLayout].Shower.Body:\r\n case layouts[currentLayout].Shower.Overlay:\r\n case layouts[currentLayout].Shower.ShowerDoor:\r\n case layouts[currentLayout].Shower.ShowerDoor2:\r\n case layouts[currentLayout].Shower.ShowerDoorHandle:\r\n case layouts[currentLayout].Shower.ExtrusionWallLeft:\r\n case layouts[currentLayout].Shower.Fixture:\r\n case layouts[currentLayout].Shower.ShowerFixture:\r\n case layouts[currentLayout].Shower.ShowerFixture2:\r\n case layouts[currentLayout].ShowerWallAccent:\r\n return \"shower_custom\";\r\n case layouts[currentLayout].Shower.TubCombo.Liner:\r\n case layouts[currentLayout].Shower.TubCombo.ReplacementTub:\r\n case layouts[currentLayout].Shower.TubCombo.WalkInTub:\r\n case layouts[currentLayout].Shower.TubCombo.JettedTub:\r\n case layouts[currentLayout].Shower.TubCombo.WallConfiguration:\r\n return \"shower_combo\";\r\n // BathTub\r\n case layouts[currentLayout].Shower.PonyWallCap:\r\n case layouts[currentLayout].Shower.PonyWallGlass:\r\n return \"shower_pony_wall\";\r\n case layouts[currentLayout].Bathtub.BathTubBody:\r\n case layouts[currentLayout].Bathtub.BathTubFixture:\r\n return \"bathtub_custom\";\r\n default:\r\n return \"\"\r\n }\r\n },\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\nimport CornerShelf from \"../subparts/showerAccessories/cornerShelf\";\r\nimport ShowerPod from \"../subparts/showerAccessories/showerPod\";\r\nimport Seats from \"../subparts/showerAccessories/seats\";\r\nimport ShowerRod from \"../subparts/showerAccessories/showerRod\";\r\nimport WindowBody from \"../subparts/showerAccessories/windowBody\";\r\nimport WindowKits from \"../subparts/showerAccessories/windowKits\";\r\nimport LargeShelf from \"../subparts/showerAccessories/largeShelf\";\r\nimport TowelBar from \"../subparts/showerAccessories/towelBar\";\r\nimport ShampooShelf from \"../subparts/showerAccessories/shampooShelf\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n this.showerPod = null;\r\n this.seats = null;\r\n this.windowBody = null;\r\n this.windowKits = null;\r\n this.largeShelf = null;\r\n this.shampooShelf = null;\r\n this.towelBar = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"corner_shelf\";\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n case \"Shower Rod\":\r\n relatedItemName = \"showerRod\";\r\n RelatedItemClass = ShowerRod;\r\n break;\r\n case \"Corner Shelf\":\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"cornerShelf\";\r\n RelatedItemClass = CornerShelf;\r\n break;\r\n case \"Shower Pod\":\r\n case \"Storage Pod\":\r\n case \"Storage Pods\":\r\n relatedItemName = \"showerPod\";\r\n RelatedItemClass = ShowerPod;\r\n break;\r\n case \"Large Shelf\":\r\n relatedItemName = \"largeShelf\";\r\n RelatedItemClass = LargeShelf;\r\n break;\r\n case \"Shampoo Shelf\":\r\n relatedItemName = \"shampooShelf\";\r\n RelatedItemClass = ShampooShelf;\r\n break;\r\n case \"Seats\":\r\n case \"flip-Up Seat\":\r\n case \"Flip-Up Seat\":\r\n relatedItemName = \"seats\";\r\n RelatedItemClass = Seats;\r\n break;\r\n case \"Window Kit\":\r\n case \"Window Kits\": {\r\n relatedItemName = \"windowKits\";\r\n RelatedItemClass = WindowKits;\r\n break;\r\n }\r\n case \"Window\": {\r\n relatedItemName = \"decorWindow\";\r\n RelatedItemClass = WindowBody;\r\n break;\r\n }\r\n case \"Towel Bar\": {\r\n relatedItemName = \"towelBar\";\r\n RelatedItemClass = TowelBar;\r\n break;\r\n }\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n}\r\n\r\n","export const LayoutType = {\r\n Layout1: 1,\r\n // Layout2: 2,\r\n Layout31: 31,\r\n};\r\n\r\nexport const LayoutAbbreviation = {\r\n All: \"ALL\",\r\n Layout1: \"Layout1\",\r\n // Layout2: \"Layout2\",\r\n Layout31: \"Layout31\",\r\n};\r\n\r\nexport const LayoutAbbreviations = [\r\n \"Layout1\",\r\n // \"Layout2\",\r\n \"Layout31\",\r\n];\r\nexport const LayoutAbbreviationsToRemove = [\r\n \"Layout31\",\r\n // \"Layout2\",\r\n \"Layout1\",\r\n];\r\n\r\nexport const METADATA = {\r\n ALL: \"ALL\"\r\n};\r\n\r\nexport const DECORS_MAX = 10;\r\n","import React, {useEffect, useState} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\n\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport {THUMBNAIL_SIZES} from \"../../../../../misc/utils\";\r\nimport {featureThumbnailUrl} from \"../../../../../misc/helpers\";\r\nimport {baseNewImagesPath} from \"../../../../assets\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nconst LookFeatureImage = (props) => {\r\n\r\n const {lookActiveFeature, intl, withoutGallery, featureIsLocked, setLookOverlayOpened} = props;\r\n const [isLoading, toggleLoader] = useState(true);\r\n const [galleryImages, setGalleryImages] = useState([]);\r\n const [activeImageIndex, setActiveImageIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n let featureGalleryImages = (lookActiveFeature.dbFeature.galleryEnabled && Array.isArray(lookActiveFeature.dbFeature.galleryImages)\r\n && lookActiveFeature.dbFeature.galleryImages.length) ? lookActiveFeature.dbFeature.galleryImages : [];\r\n setGalleryImages([{\r\n url: featureThumbnailUrl(lookActiveFeature) || `${baseNewImagesPath}images/image-not-found.png`,\r\n preview: featureThumbnailUrl(lookActiveFeature, THUMBNAIL_SIZES.medium)\r\n }, // main image thumbnail\r\n ...featureGalleryImages\r\n ]);\r\n setActiveImageIndex(0);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeature]);\r\n\r\n const arrowClick = (analyticsLabel, nextIndex) => {\r\n Analytics.sendClickEvent(analyticsLabel);\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n if (nextIndex !== activeImageIndex) {\r\n toggleLoader(true);\r\n setActiveImageIndex(nextIndex)\r\n }\r\n }\r\n\r\n const backButtonClick = () => {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureImageChangeLeft\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureImageChangeLeft;\r\n const nextIndex = galleryImages[activeImageIndex - 1] ? activeImageIndex - 1 : galleryImages.length - 1\r\n arrowClick(analyticsLabel, nextIndex)\r\n };\r\n\r\n const nextButtonClick = () => {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureImageChangeRight\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureImageChangeRight;\r\n const nextIndex = galleryImages[activeImageIndex + 1] ? activeImageIndex + 1 : 0\r\n arrowClick(analyticsLabel, nextIndex)\r\n };\r\n //\r\n // const thumbnailClick = (index) => {\r\n // props.toggleGalleryVisible(true);\r\n // props.setGalleryActiveImageIndex(index);\r\n // };\r\n\r\n // console.log(\"galleryImages\", galleryImages);\r\n const mainImageUrl = galleryImages[activeImageIndex];\r\n\r\n return (\r\n
    \r\n {withoutGallery ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n {isLoading || !mainImageUrl ? : null}\r\n
    \r\n {mainImageUrl ? thumbnailClick(activeImageIndex)}\r\n src={mainImageUrl.url} onLoad={() => toggleLoader(false)} alt=\"\"/> : null}\r\n
    \r\n
    \r\n {withoutGallery ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookFeatureImage.propTypes = {\r\n withoutGallery: PropTypes.bool,\r\n forFeature: PropTypes.shape(featureInterface),\r\n featureIsLocked: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n return {\r\n lookActiveFeature: ownProps.forFeature || lookActiveFeature,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureImage)\r\n);\r\n","import * as types from '../actions/actionTypes';\r\nexport const ACTIVE_ROOM_TYPE = {\r\n category: 'category',\r\n roomGroup: 'roomGroup',\r\n quote: 'quote',\r\n}\r\n\r\nconst initialState = {\r\n menuOpened: \"\",\r\n menuOpenedLock: false,\r\n activeButton: null,\r\n activeSubMenuButton: null,\r\n activeLevel3Button: null,\r\n activeRoom: null,\r\n activeRoomId: null,\r\n activeRoomIndex: null,\r\n activeRoomType: null,\r\n isFreeDrawMode: false,\r\n isWallsUpMode: true,\r\n isWallsLockMode: true,\r\n roomSwitcher: {\r\n isVisible: false\r\n },\r\n roomLayouts: [],\r\n contextMenu: {\r\n isOpened: false,\r\n activeMenu: \"\",\r\n pos: {},\r\n parent: null\r\n },\r\n contextMenuV2: {\r\n isOpened: false,\r\n menuItems: [],\r\n position: {}\r\n },\r\n systemMessage: {\r\n isOpened: false,\r\n title: \"\",\r\n text: \"\"\r\n },\r\n ar3dPopup: {\r\n isOpened: false,\r\n contentType: false\r\n },\r\n systemDeleteMessage: {\r\n isOpened: false,\r\n shape: null\r\n },\r\n sqftPopup: {\r\n title: \"\",\r\n content: \"\",\r\n isOpened: false,\r\n confirmCallback: new Function (),\r\n confirmText: \"\",\r\n cancelCallback: new Function (),\r\n cancelText: \"\"\r\n },\r\n changeValuePopups: [],\r\n validationPopups: [],\r\n shapeIdsWithMissingFeature: [],\r\n isShapeFeatureMissing: false,\r\n isITextEditing: false,\r\n isSlabPlaceholderOverlapsWithMultipleShapes: false,\r\n validationMessage: {},\r\n reCacheMenuCounter: 0,\r\n cabinetRelatedItems: [],\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n let changeValuePopups;\r\n let validationPopups;\r\n switch (action.type) {\r\n case types.SET_SQFT_MENU_OPENED:\r\n case types.SET_SQFT_MENU_LOCK:\r\n case types.SET_SQFT_MENU_ACTIVE_BUTTON:\r\n case types.SET_SQFT_ACTIVE_SUB_MENU_BUTTON:\r\n case types.SET_SQFT_ACTIVE_LEVEL3_BUTTON:\r\n case types.SET_SQFT_ACTIVE_ROOM:\r\n case types.SET_SQFT_ACTIVE_ROOM_ID:\r\n case types.SET_SQFT_ROOM_LAYOUTS:\r\n case types.SET_SQFT_ACTIVE_ROOM_TYPE:\r\n case types.SET_SQFT_ACTIVE_ROOM_INDEX:\r\n case types.SET_FREE_DRAW_MODE:\r\n case types.SET_WALLS_UP_MODE:\r\n case types.SET_WALLS_LOCK_MODE:\r\n case types.SET_SHAPE_IDS_WITH_MISSING_FEATURES:\r\n case types.SET_CHANGE_SHAPE_FEATURE_MISSING_MESSAGE:\r\n case types.SET_IS_ITEXT_EDITING:\r\n case types.SET_SLAB_PLACEHOLDER_OVERLAPS_WITH_MULTIPLE_SHAPES:\r\n case types.SET_RE_CACHE_MENU_COUNTER:\r\n case types.SET_CABINET_RELATED_ITEMS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.ADD_SHAPE_ID_WITH_MISSING_FEATURES:\r\n return Object.assign({}, state, {\r\n shapeIdsWithMissingFeature: [...state.shapeIdsWithMissingFeature, action.payload]\r\n });\r\n case types.SET_SQFT_ROOM_SWITCHER_VISIBLE:\r\n return Object.assign({}, state, {\r\n roomSwitcher: {...state.roomSwitcher, ...{isVisible: action.payload.isVisible}}\r\n });\r\n case types.SET_SQFT_CONTEXT_MENU:\r\n return Object.assign({}, state, {\r\n contextMenu: {...state.contextMenu, ...action.payload.contextMenu}\r\n });\r\n case types.SET_SQFT_SYSTEM_MESSAGE:\r\n return Object.assign({}, state, {\r\n systemMessage: {...state.systemMessage, ...action.payload.systemMessage}\r\n });\r\n case types.SET_SQFT_AR3D_POPUP:\r\n return Object.assign({}, state, {\r\n ar3dPopup: {...state.ar3dPopup, ...action.payload.ar3dPopup}\r\n });\r\n case types.SET_SQFT_POPUP:\r\n return Object.assign({}, state, {\r\n sqftPopup: {...state.sqftPopup, ...action.payload.sqftPopup}\r\n });\r\n case types.SET_SQFT_CONTEXT_MENU_V2:\r\n return Object.assign({}, state, {\r\n contextMenuV2: {...state.contextMenuV2, ...action.payload.contextMenuV2}\r\n });\r\n case types.SET_SQFT_SYSTEM_DELETE_MESSAGE:\r\n return Object.assign({}, state, {\r\n systemDeleteMessage: {...state.systemDeleteMessage, ...action.payload.systemDeleteMessage}\r\n });\r\n\r\n case types.SET_CHANGE_VALUE_POPUPS:\r\n state = {...state, changeValuePopups: action.payload.changeValuePopups};\r\n break;\r\n case types.ADD_CHANGE_VALUE_POPUP:\r\n return Object.assign({}, state, {\r\n changeValuePopups: [...state.changeValuePopups, action.payload]\r\n });\r\n case types.CHANGE_VALUE_POPUP:\r\n changeValuePopups = state.changeValuePopups.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n return Object.assign({}, state, {changeValuePopups: changeValuePopups });\r\n case types.DELETE_CHANGE_VALUE_POPUP:\r\n changeValuePopups = state.changeValuePopups.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n changeValuePopups: changeValuePopups\r\n });\r\n\r\n case types.SET_VALIDATION_POPUPS:\r\n state = {...state, validationPopups: action.payload.validationPopups};\r\n break;\r\n case types.ADD_VALIDATION_POPUP:\r\n return Object.assign({}, state, {\r\n validationPopups: [...state.validationPopups, action.payload]\r\n });\r\n case types.VALIDATION_POPUP:\r\n validationPopups = state.validationPopups.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n return Object.assign({}, state, {validationPopups: validationPopups });\r\n case types.DELETE_VALIDATION_POPUP:\r\n validationPopups = state.validationPopups.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n validationPopups: validationPopups\r\n });\r\n default:\r\n return state\r\n }\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {hardCodeIsModerno} from \"../misc/fabricatorHardcode\";\r\n\r\nexport const DEFAULT_SLAB_IMAGE_PART = 60;\r\nexport const SLAB_IMAGE_TYPES = {\r\n placeholder: \"placeholder\",\r\n upload: \"upload\"\r\n}\r\nconst isModerno = hardCodeIsModerno();\r\n\r\nconst initialState = {\r\n isShowSlabTool: false,\r\n isSlabToolVisited: false,\r\n isMeasurementVisibleInSlabMode: false,\r\n roomsWithVisitedSlabTool: [],\r\n searchText: \"\",\r\n activeSlabId: 0,\r\n selectedImage: \"\",\r\n activeStep: 1,\r\n slabImageType: null,\r\n slabImageHeight: isModerno ? 0 : 60,\r\n slabImageWidth: isModerno ? 0 : 126,\r\n slabAspectRatio: 0,\r\n croppedSlabImages: [],\r\n pricePerArea: 0,\r\n cropperData: {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n rotate: 0,\r\n scaleX: 0,\r\n scaleY: 0\r\n },\r\n activeSlabUrl: \"\",\r\n isSizeValidationFailed: false,\r\n isSlabPricingEnabled: true,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n let filteredImages;\r\n switch(action.type) {\r\n case types.SHOW_SLAB_TOOL:\r\n case types.SET_SLAB_TOOL_VISITED:\r\n case types.SET_ACTIVE_SLAB_ID:\r\n case types.SET_ACTIVE_SLAB_URL:\r\n case types.SET_SQFT_SLAB_SEARCH_TEXT:\r\n case types.SET_SQFT_SLAB_ASPECT_RATIO:\r\n case types.SET_SQFT_SLAB_IMAGE_WIDTH:\r\n case types.SET_SQFT_SLAB_IMAGE_HEIGHT:\r\n case types.SET_SQFT_SLAB_ACTIVE_STEP:\r\n case types.SET_SQFT_SLAB_CROPPER_DATA:\r\n case types.SET_PRICE_PER_AREA:\r\n case types.SET_SLAB_IMAGE_TYPE:\r\n case types.SET_IS_MEASUREMENT_VISIBLE_IN_SLAB_MODE:\r\n case types.SET_IS_SIZE_VALIDATION_FAILED:\r\n case types.SET_IS_SLAB_PRICING_ENABLED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_SQFT_CROPPED_SLAB_IMAGES:\r\n state = {...state, croppedSlabImages: action.payload.croppedSlabImages};\r\n break;\r\n case types.ADD_SQFT_CROPPED_SLAB_IMAGE:\r\n return Object.assign({}, state, {\r\n croppedSlabImages: [...state.croppedSlabImages, action.payload]\r\n });\r\n case types.ADD_ROOM_WITH_VISITED_SLAB_TOOL:\r\n if (!state.roomsWithVisitedSlabTool.includes(action.payload)) {\r\n return Object.assign({}, state, {\r\n roomsWithVisitedSlabTool: [...state.roomsWithVisitedSlabTool, action.payload]\r\n });\r\n }\r\n return state\r\n case types.DELETE_CROPPED_SLAB_IMAGE:\r\n filteredImages = state.croppedSlabImages.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n croppedSlabImages: filteredImages\r\n });\r\n\r\n }\r\n\r\n return state;\r\n}\r\n","import axios from \"axios\";\r\n\r\nexport const AxiosInstance = axios.create({\r\n baseURL: document.kvConfig.domain || \"\",\r\n // timeout: 120000,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n});\r\n\r\n// AxiosInstance.interceptors.response.use((response) => {\r\n// const {serverState} = store.getState();\r\n// if (!serverState.networkConnection) {\r\n// store.dispatch(setNetworkConnection(true))\r\n// }\r\n// return response;\r\n// }, (error) => {\r\n// // Do something with response error\r\n// if (error && error.toJSON && error.toJSON().message === \"Network Error\") {\r\n// store.dispatch(setNetworkConnection(false))\r\n// }\r\n// return Promise.reject(error);\r\n// });\r\n\r\nexport const leadApiGet = (url) => {\r\n return AxiosInstance.get(url)\r\n};\r\n\r\nexport const leadApiPost = (url, data, headers = null) => {\r\n return AxiosInstance.post(url, data, headers ? {headers} : null);\r\n}\r\n","export const VISIT_ROUTES = {\r\n home: \"/\",\r\n // personal: \"/personal/:activeSubStep?\",\r\n // project: \"/project/:activeSubStep?\",\r\n // contact: \"/contact\",\r\n // appointment: \"/appointment/:activeSubStep?\",\r\n wizard: \"/wizard/:wizardId?/:leadStepName?/:activeSubStep?\",\r\n contact: \"/contact\",\r\n thanks: \"/thanks\",\r\n review: \"/review\",\r\n success: \"/success\",\r\n};\r\n\r\n// export const VISIT_ROUTES = {\r\n// home: \"/:wizardId?\",\r\n// product: \"/:wizardId?/product/:activeSubStep?\",\r\n// personal: \"/:wizardId?/personal/:activeSubStep?\",\r\n// contact: \"/:wizardId?/contact\",\r\n// appointment: \"/:wizardId?/appointment/:activeSubStep?\",\r\n// review: \"/:wizardId?/review\",\r\n// success: \"/:wizardId?/success\",\r\n// };\r\n\r\nexport const VISIT_STEPS = {\r\n wizard: \"/wizard\",\r\n personal: \"/personal\",\r\n project: \"/project\",\r\n contact: \"/contact\",\r\n appointment: \"/appointment\",\r\n review: \"/review\",\r\n success: \"/success\",\r\n}\r\n\r\nexport const IS_DEV_MODE = window.location.href.indexOf('dev=1') !== -1 || document.kvConfig.devMode;\r\nexport const SKIP_CALENDAR = window.location.href.indexOf('skip=1') !== -1;\r\n","export const SET_USER_VALUE = \"SET_USER_VALUE\";\r\nexport const SET_USER_LOCATION = \"SET_USER_LOCATION\";\r\nexport const SET_USER_ERRORS = \"SET_USER_ERRORS\";\r\nexport const SET_REGISTERED_USER_DATA = \"SET_REGISTERED_USER_DATA\";\r\n\r\nexport const setUserInfo = (name, value) => ({\r\n type: SET_USER_VALUE,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setUserLocation = (name, value) => ({\r\n type: SET_USER_LOCATION,\r\n payload: {name, value}\r\n});\r\n\r\nexport const setUserErrors = (name, errors = []) => ({\r\n type: SET_USER_ERRORS,\r\n payload: {name, errors}\r\n});\r\n\r\nexport const setRegisteredUserData = (registeredUserEmail, registeredUserAuthToken) => ({\r\n type: SET_REGISTERED_USER_DATA,\r\n payload: {registeredUserEmail, registeredUserAuthToken}\r\n});\r\n\r\nexport const replacePhoneToMatchMask = (phone) => {\r\n\r\n // return phone.replace(/^\\(?(\\d{3})\\)?\\s?(\\d{3})\\-?(\\d+)$/, \"($1) $2-$3\") old mask, not replacing while typing\r\n\r\n // Remove all non-digit characters\r\n let cleaned = phone.replace(/\\D/g, '');\r\n\r\n // Format as (xxx) xxx-xxxx as the user types\r\n if (cleaned.length > 0) {\r\n cleaned = `(${cleaned}`;\r\n }\r\n if (cleaned.length > 4) {\r\n cleaned = `${cleaned.slice(0, 4)}) ${cleaned.slice(4)}`;\r\n }\r\n if (cleaned.length > 9) {\r\n cleaned = `${cleaned.slice(0, 9)}-${cleaned.slice(9)}`;\r\n }\r\n\r\n // Update the input value with the formatted number\r\n return cleaned.slice(0, 14); // Maximum length is 14 including the formatting characters\r\n}\r\nexport const replaceMaskToPassPhoneOnTheBackend = (phone) => {\r\n if (!phone) {\r\n return \"\"\r\n }\r\n return phone\r\n .replace(/ /g,\"\")\r\n .replace(/-/g,\"\")\r\n .replace(/\\(/g,\"\")\r\n .replace(/\\)/g,\"\")\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {countertopGroupThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Countertop from \"../subparts/countertop/countertop\";\r\nimport Faucet from \"../subparts/countertop/faucet\";\r\nimport Sink from \"../subparts/countertop/sink\";\r\nimport Stovetop from \"../subparts/countertop/stovetop\";\r\n\r\nimport Cutouts from \"../subparts/countertop/cutouts\";\r\nimport EdgeProfile from \"../subparts/countertop/edgeProfile\";\r\nimport Radius from \"../subparts/countertop/radius\";\r\n\r\nexport default class CountertopGroup extends Part {\r\n static id = 'Countertop';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Countertop';\r\n this.partThumbnail = countertopGroupThumbnail;\r\n this.translateId = \"visualizer.kitchen.countertop\";\r\n\r\n // related items\r\n this.countertop = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n\r\n this.edge = null;\r\n this.cutouts = null;\r\n this.radius = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Edge Profile\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = EdgeProfile;\r\n break;\r\n case \"Cutouts\":\r\n relatedItemName = \"cutouts\";\r\n RelatedItemClass = Cutouts;\r\n break;\r\n case \"Radius\":\r\n relatedItemName = \"radius\";\r\n RelatedItemClass = Radius;\r\n break;\r\n case \"Faucet\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Stovetop\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Countertop', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => {\r\n if (hideWithoutFeatures && (item.partId === \"cutouts\" || item.partId === \"radius\")) {\r\n return false\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n}\r\n","export const GROHE_POST_MESSAGES_ACTIONS = {\r\n exit: \"EXIT\",\r\n save: \"SAVE\",\r\n addToCart: \"ADDTOCART\",\r\n signIn: \"SIGNIN\",\r\n openMiniCart: \"OPENMINICART\",\r\n}\r\n\r\nexport const GROHE_ON_OPEN_ACTION = {\r\n shareFacebook: \"facebook\",\r\n shareTwitter: \"twitter\",\r\n sharePinterest: \"pinterest\",\r\n saveQuote: \"saveQuote\",\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n getFeatureIsLocked,\r\n getFeatureUnit,\r\n getPriceWithCurrency,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../../../../misc/helpers\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {isVisibleForNavigation} from \"../../../../../misc/displayLogic\";\r\nimport LookFeaturePriceLocked from \"./lookFeaturePriceLocked\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\nimport {getCartItemsCount} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport FeaturePriceInput from \"../../../../selectionWindow/selectionFeatureInfo/featurePriceInput\";\r\n\r\nconst LookFeaturePrice = (props) => {\r\n\r\n const {lookFeature, quantity, fabricatorData, intl, withUnit, isBundleChild, className, listPage, mainContentPrice,\r\n isPhoneNumberValidated, showPriceAlways} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (!lookFeature) {\r\n return null;\r\n }\r\n\r\n const getQuote = fabricatorSettings.enableQuote && !isPhoneNumberValidated;\r\n\r\n let showPriceLocked = !showPriceAlways && getFeatureIsLocked(lookFeature);\r\n if (!showPriceLocked && listPage) {\r\n showPriceLocked = getQuote;\r\n }\r\n const {showPrice} = pricingIsLocked();\r\n\r\n if (showPriceLocked) {\r\n if (!showPrice && listPage) {\r\n return null\r\n }\r\n let lockedText = ;\r\n // if (getQuote) { // we already have icon and locked, we dont need $,icon,locked\r\n // lockedText = (\r\n // \r\n // {fabricatorSettings.currencySign}\r\n // {lockedText}\r\n // \r\n // )\r\n // }\r\n return className ?
    {lockedText}
    : lockedText\r\n }\r\n\r\n if (!showPrice || !isVisibleForNavigation(lookFeature, true)) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.initialized) {\r\n return \r\n }\r\n if (!listPage && !layout.partIdExistInQtCategory(lookFeature.partId, true) && !isBundleChild) {\r\n return null;\r\n }\r\n\r\n const featurePrice = +toFixedFeatureCost(lookFeature, Number.isInteger(quantity) ? quantity : 1);\r\n\r\n if (!featurePrice && !lookFeature.dbFeature.priceEditable) { // if it is zero - we are hiding the price, no need to show included\r\n return null\r\n }\r\n\r\n let unit = \"\";\r\n if (withUnit) {\r\n unit = getFeatureUnit(lookFeature, intl, fabricatorData);\r\n }\r\n\r\n if (mainContentPrice && document.kvConfig.isBackend && lookFeature.dbFeature.priceEditable) {\r\n const price = toFixedPrice(featurePrice);\r\n return \r\n }\r\n\r\n const finalText = withUnit\r\n ? `${unit}: ${getPriceWithCurrency(fabricatorSettings, toFixedPrice(featurePrice), lookFeature)}`\r\n : getPriceWithCurrency(fabricatorSettings, toFixedPrice(featurePrice), lookFeature)\r\n\r\n return className ?
    {finalText}
    : finalText\r\n\r\n};\r\n\r\nLookFeaturePrice.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n withUnit: PropTypes.bool,\r\n quantity: PropTypes.number,\r\n className: PropTypes.string,\r\n listPage: PropTypes.bool,\r\n showPriceAlways: PropTypes.bool,\r\n mainContentPrice: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n const {cartItems} = store.cartState; // to update component when user is logged in\r\n const cartItemsLength = getCartItemsCount(cartItems, ownProps.intl, true);\r\n const {qtCategoriesLoaded} = store.qtState; // to update price after categories are loaded\r\n\r\n // we need force here to check every time count is updated, it is just for update\r\n\r\n // const featureInfoCount = ownProps.lookFeature && ownProps.lookFeature.dbFeature\r\n // && ownProps.lookFeature.dbFeature.priceEditable && ownProps.mainContentPrice\r\n // ? store.selectionState.featureInfoCount\r\n // : null;\r\n\r\n const featureInfoCount = store.selectionState.featureInfoCount;\r\n\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated,\r\n cartItemsLength, // we need to reload item price if quantity is changed (complex logic dependency)\r\n qtCategoriesLoadedLength: qtCategoriesLoaded.length,\r\n featureInfoCount,\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(LookFeaturePrice)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nconst FeatureDescription = (props) => {\r\n\r\n const {feature, intl, fabricatorData, brief, className, textLength} = props;\r\n\r\n let desc = \"\";\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.description_FR.\" + feature.dbFeature.sharedFeatureName]) {\r\n desc = intl.formatMessage({id: \"transDoc.description_FR.\" + feature.dbFeature.sharedFeatureName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateDescription_PL.\" + feature.dbFeature.sharedFeatureName]) {\r\n desc = intl.formatMessage({id: \"transDoc.customTranslateDescription_PL.\" + feature.dbFeature.sharedFeatureName})\r\n } else {\r\n desc = feature.dbFeature.description;\r\n }\r\n } else {\r\n desc = feature.dbFeature.description;\r\n }\r\n\r\n if (!desc) {\r\n return null\r\n }\r\n\r\n if (textLength && desc.length > textLength) {\r\n desc = desc.substring(0, textLength) + \"...\"\r\n } else if (brief && desc && desc.length > 200) {\r\n desc = desc.substring(0, 200) + \"...\"\r\n }\r\n\r\n return

    \r\n};\r\n\r\nFeatureDescription.propTypes = {\r\n feature: PropTypes.object.isRequired,\r\n className: PropTypes.string,\r\n brief: PropTypes.bool,\r\n textLength: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureDescription)\r\n)\r\n\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n\r\nexports.showLoading = showLoading;\r\nexports.hideLoading = hideLoading;\r\nexports.resetLoading = resetLoading;\r\nexports.loadingBarReducer = loadingBarReducer;\r\n\r\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\r\n\r\nvar SHOW = exports.SHOW = 'loading-bar/SHOW';\r\nvar HIDE = exports.HIDE = 'loading-bar/HIDE';\r\nvar RESET = exports.RESET = 'loading-bar/RESET';\r\n\r\nvar DEFAULT_SCOPE = exports.DEFAULT_SCOPE = 'default';\r\n\r\nfunction showLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: SHOW,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction hideLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: HIDE,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction resetLoading() {\r\n var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SCOPE;\r\n\r\n return {\r\n type: RESET,\r\n payload: {\r\n scope: scope\r\n }\r\n };\r\n}\r\n\r\nfunction loadingBarReducer() {\r\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n var _ref = action.payload || {},\r\n _ref$scope = _ref.scope,\r\n scope = _ref$scope === undefined ? DEFAULT_SCOPE : _ref$scope;\r\n\r\n switch (action.type) {\r\n case SHOW:\r\n return _extends({}, state, _defineProperty({}, scope, (state[scope] || 0) + 1));\r\n case HIDE:\r\n return _extends({}, state, _defineProperty({}, scope, Math.max(0, (state[scope] || 1) - 1)));\r\n case RESET:\r\n return _extends({}, state, _defineProperty({}, scope, 0));\r\n default:\r\n return state;\r\n }\r\n}","import _ from 'lodash';\r\n\r\nimport workspace from \"../workspace\";\r\nimport {POINT_PROPERTY} from \"../../../../constants\";\r\nimport {\r\n getCountertopArea,\r\n //getExportedManualCalculateBacksplashes,\r\n getExportedManualCalculateCountertops,\r\n //getExportedManualCalculateEdges,\r\n getSlabImagesAreaGrouped,\r\n manualCalculationsCountertopArea\r\n} from \"../../../../helpers/sqftCalculations\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport store from \"./../../../../../../store\";\r\nimport sqftImageManager from \"../../store/sqftImageManager\";\r\nimport slabWorkspace from \"../slab/slabWorkspace\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../../ui/loaderView\";\r\nimport html2canvas from \"html2canvas\";\r\nimport workspaceControllers, {getControllersExportData} from \"../../store/workspaceControllers\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\nimport {\r\n SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST,\r\n} from \"../../../../constantsFeature\";\r\n\r\nexport const prepareSQFTData = async () => {\r\n const state = store.getState();\r\n const roomsWithVisitedSlabTool = state.sqftSlabState.roomsWithVisitedSlabTool;\r\n const showManualCalculation = state.sqftManualCalculationState.showManualCalculation;\r\n const slabImages = state.sqftSlabState.croppedSlabImages;\r\n const measureUnit = state.sqftState.measureUnit;\r\n const miteredEdges = workspace.miteredController ? workspace.miteredController.getExportedMiteredEdges() : [];\r\n let shapesList = workspace.getShapes()\r\n .filter(shp => { return shp.export &&\r\n !SHAPE_PART_IDS_FROM_ADDITIONAL_SHAPES_LIST.includes(shp.partId)\r\n })\r\n .map(shp => shp.export())\r\n .concat(miteredEdges);\r\n\r\n const totalSQFTArea = getCountertopArea();\r\n const qtCatName = getQtCatName();\r\n\r\n let workspaceCenter = _.clone(workspace.getCenter());\r\n const sqftApplianceImages = workspace.resultImages.getCanvasApplianceImages();\r\n\r\n const sqFtSlabImage = roomsWithVisitedSlabTool.includes(qtCatName) && slabImages && slabImages.length > 0 ? workspace.resultImages.getSlabResultImage(config.defaultScaleExport) : \"\";\r\n const sqFtSlabCalcImage = roomsWithVisitedSlabTool.includes(qtCatName) ? workspace.resultImages.getSlabCalcImage(config.defaultScaleExport) : \"\";\r\n const sqftCanvasImage = await getCanvasImage(showManualCalculation);\r\n const images3D = workspaceControllers.images3d.getResources();\r\n\r\n workspace.setCenter(workspaceCenter.x * 2 , workspaceCenter.y * 2);\r\n\r\n //save images local (for dev purposes)\r\n\r\n // const link = document.createElement(\"a\");\r\n // link.href = sqFtSlabImage.replace(\"image/png\", \"image/octet-stream\");\r\n // link.download = 'slabImage' + Date.now() + '.png';\r\n // document.body.appendChild(link);\r\n // link.click();\r\n // document.body.removeChild(link);\r\n\r\n return {\r\n bumpouts: workspace.getBumpouts(),\r\n canvasImage: sqftCanvasImage,\r\n sqFtSlabImage: sqFtSlabImage,\r\n sqFtSlabCalcImage: sqFtSlabCalcImage,\r\n sqftApplianceImages: sqftApplianceImages,\r\n images3D: images3D,\r\n slabImages: sqftImageManager.getExportedSlabImages(),\r\n measureUnit: measureUnit,\r\n sinks: workspace.getSink(),\r\n radii: workspace.getPointProperty(POINT_PROPERTY.arcLength),\r\n corners: workspace.getPointProperty(POINT_PROPERTY.angle),\r\n //walls: workspace.getShapeType('wall'),\r\n totalInches: totalSQFTArea.totalArea,\r\n shapeLength: totalSQFTArea.shapeLength,\r\n objIds: workspace.getObjIds(),\r\n removedFeatures: workspaceControllers.removedFeatures.getResources(),\r\n textBoxes: workspace.textBoxManager.getExportedTextBoxes(),\r\n slabAdditionalShapesList: slabWorkspace.slabAdditionalShapes.exportData(),\r\n slabImagesTotalArea: getSlabImagesAreaGrouped(),\r\n squareFeet: showManualCalculation ? manualCalculationsCountertopArea(): totalSQFTArea.totalAreaToMeasureUnit,\r\n //edges: showManualCalculation ? getExportedManualCalculateEdges() : workspace.getShapeType('edge').concat(miteredEdges),\r\n //backsplashes: showManualCalculation ? getExportedManualCalculateBacksplashes() : workspace.getShapeType('backsplash'),\r\n countertops: showManualCalculation ? getExportedManualCalculateCountertops() : shapesList,\r\n manualCalculate: showManualCalculation,\r\n controllers: getControllersExportData(),\r\n underlayment: workspace.underlaymentController ? workspace.underlaymentController.exportData() : []\r\n }\r\n};\r\n\r\nconst getCanvasImage = async (showManualCalculation) => {\r\n if (showManualCalculation) {\r\n const manualDiv = document.querySelector(\".manual-window\");\r\n if (manualDiv) {\r\n loaderEnable(\"loader.savingQuoteText\");\r\n manualDiv.classList.add(\"manual-window--screenshot\");\r\n try {\r\n const canvasElement = await html2canvas(manualDiv);\r\n manualDiv.classList.remove(\"manual-window--screenshot\");\r\n loaderDisable();\r\n if (canvasElement && canvasElement.toDataURL) {\r\n return canvasElement.toDataURL(\"image/jpeg\", 0.7) // we don't need super quality here\r\n }\r\n } catch (e) {\r\n loaderDisable();\r\n }\r\n }\r\n }\r\n return workspace.resultImages.getCanvasImageScaled(config.defaultScaleExport);\r\n};\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\n\r\nconst Polygon = (pointsCords, clonePoint = false, canPointsBeMoved = false) => {\r\n let points = [];\r\n let lines = [];\r\n\r\n for (let pointCord of pointsCords) {\r\n let newPoint = new point(pointCord.x, pointCord.y, undefined, undefined, canPointsBeMoved)\r\n if (clonePoint && pointCord instanceof point) {\r\n newPoint.import(pointCord.export());\r\n }\r\n points.push(newPoint);\r\n }\r\n for (let i in points) {\r\n if (points[+i + 1]) {\r\n lines.push(new line(points[i], points[+i + 1]))\r\n } else {\r\n lines.push(new line(points[i], points[0]))\r\n }\r\n }\r\n\r\n return lines;\r\n};\r\n\r\nexport default Polygon\r\n","import flatMap from 'lodash/flatMap';\r\n\r\nimport store from \"./../../store\";\r\nimport * as types from \"../../actions/actionTypes\";\r\nimport LayoutCommon from \"./layoutCommon\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {getSlabsFeatureGroup} from \"../../misc/helpers\";\r\nimport {setActivePreset} from \"../../actions/actionFunctions\";\r\n// import {getBvGroupFeatures} from \"../../api/server-api\";\r\n\r\nexport default class LayoutCommonNew extends LayoutCommon {\r\n\r\n isNewLayout = true;\r\n\r\n // /**\r\n // * Returns feature\r\n // * @param neededId {number}\r\n // * @param withOtherGroups {boolean}\r\n // * @returns feature {object}\r\n // */\r\n // getFeatureById(neededId, withOtherGroups = false) {\r\n // let allFeatures = this.getAllFeatures(withOtherGroups);\r\n // for (let i = 0; i < allFeatures.length; i++) {\r\n // if (allFeatures[i].dbFeature.id === neededId) {\r\n // return allFeatures[i];\r\n // }\r\n // }\r\n // return null\r\n // }\r\n\r\n // /**\r\n // * Returns feature\r\n // * @param skuNumber {string}\r\n // * @param featureGroupPartId {string}\r\n // * @returns feature {object}\r\n // */\r\n // getFeatureBySku(skuNumber, featureGroupPartId= \"\") {\r\n // if (featureGroupPartId) {\r\n // const featureGroupFound = this.getFeatureGroupByPartId(featureGroupPartId);\r\n // if (featureGroupFound) {\r\n // for (let i = 0; i < featureGroupFound.features.length; i++) {\r\n // if (featureGroupFound.features[i].dbFeature.sku === skuNumber) {\r\n // return featureGroupFound.features[i];\r\n // }\r\n // }\r\n // }\r\n // }\r\n // let allFeatures = this.getAllFeatures();\r\n // for (let i = 0; i < allFeatures.length; i++) {\r\n // if (allFeatures[i].dbFeature.sku === skuNumber) {\r\n // return allFeatures[i];\r\n // }\r\n // }\r\n // return null\r\n // }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param compressedFeature {object}\r\n * @param featuresToLoad {Array} // only if layout is changed - we need to load features to changed feature group\r\n * @return featureLoaded {featureInterface}\r\n */\r\n getFeatureFromAllLayouts = (partId, compressedFeature, featuresToLoad) => {\r\n const {dbFeatureId} = compressedFeature;\r\n const parentItems = this.getFeatures(true);\r\n let childSubPart = null;\r\n let featureLoaded = null;\r\n parentItems.forEach(parentGroup => {\r\n if (childSubPart) {\r\n return\r\n }\r\n if (partId === SQFT_FEATURES.slabs) {\r\n childSubPart = getSlabsFeatureGroup(this)\r\n } else if (parentGroup) {\r\n childSubPart = parentGroup.subParts().find(subPart => subPart.part.partId === partId);\r\n }\r\n if (childSubPart && childSubPart.part.features) {\r\n featureLoaded = childSubPart.part.getFeatureById(dbFeatureId, true);\r\n if (!featureLoaded) { // if feature isn't found in the current layout, let's find it in another layouts\r\n let allFeatures = [];\r\n Object.keys(this.layoutNames).forEach((layoutType) => {\r\n if (layoutType !== \"All\") {\r\n allFeatures = [...allFeatures, ...childSubPart.part.featuresList[layoutType]]\r\n }\r\n });\r\n featureLoaded = allFeatures.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded\r\n && (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\")\r\n && this.qtCategories && this.qtCategories.some(qtCat => qtCat.qtCategoryHasBeenChanged)\r\n && featuresToLoad.length\r\n ) {\r\n // console.info(\"Cart feature is not loaded, trying in change categories:\", dbFeatureId);\r\n this.qtCategories.forEach(qtCat => {\r\n const changedSubPart = qtCat.subParts.find(subPart => subPart.part.partId === partId);\r\n if (changedSubPart) {\r\n // console.info(\"Cart feature is not loaded, found subpart:\", cartItem);\r\n const needToLoadFeature = featuresToLoad.find(dbFeature => dbFeature.id === dbFeatureId);\r\n if (needToLoadFeature) {\r\n changedSubPart.part.setGroupFeatures([needToLoadFeature], 0, false)\r\n }\r\n featureLoaded = childSubPart.part.features.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n // if (featureLoaded) {\r\n // console.info(\"Cart feature is not loaded, it's ok, we found it:\", dbFeatureId, featureLoaded);\r\n // }\r\n }\r\n })\r\n }\r\n if (!featureLoaded) {\r\n if ((partId === \"slabs\") && compressedFeature && compressedFeature.partId) {\r\n const featureGroup = this.getFeatureGroupByPartId(compressedFeature.partId);\r\n if (featureGroup) {\r\n featureLoaded = featureGroup.getFeatureById(dbFeatureId, true);\r\n }\r\n }\r\n }\r\n if (!featureLoaded) {\r\n console.error(\"Cart feature is not loaded:\", partId, dbFeatureId);\r\n }\r\n }\r\n // console.log('featureLoaded', featureLoaded);\r\n }\r\n });\r\n return featureLoaded\r\n }\r\n\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param isCartAndUserStatedUpdateNeeded {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n * @param isFake {boolean}\r\n */\r\n setActiveFeaturesFromObject(\r\n bvState,\r\n isCartAndUserStatedUpdateNeeded = false,\r\n useNames = false,\r\n needToChangeLayout = true,\r\n firstLoad = false,\r\n isFake = false\r\n ) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n this.scene = bvState.scene || this.scene;\r\n\r\n console.log(\"bvState===>\", bvState);\r\n console.log(\"bvState firstLoad\", firstLoad);\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (!bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = false\r\n }\r\n if (useNames) {\r\n const matchingFeature = (partId === \"backsplash\" && bvState[\"backsplash_type\"])\r\n ? subPart.getFeatureByBacksplashType(bvState[\"backsplash_type\"], bvState[\"backsplash\"])\r\n : subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId], true) || parentGroup.getDefaultFeature();\r\n }\r\n if (subPart.layerPositions && subPart.activeFeature) {\r\n // subPart.setLayerPositions(); // enabled // we have to set vanity on its layerPosition, grohe vanities have different sku so can not be found in the code below\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n const partIdPosition = partId + \"_\" + position;\r\n if (bvState.disabled_parts.includes(partIdPosition)) {\r\n subPart.layerPositions[position] = null;\r\n } else if (bvState[partIdPosition]) {\r\n subPart.layerPositions[position] = useNames\r\n ? subPart.getMatchingPositionFeature(position, subPart.activeFeature, isFake ? this : null)\r\n : subPart.getFeatureById(bvState[partIdPosition], true)\r\n } else if (!((position !== \"C\" && subPart.activeFeature.metaData.layerPosition === \"C\") || (subPart.activeFeature.metaData.layerPosition !== \"C\" && position === \"C\"))) {\r\n subPart.layerPositions[position] = subPart.getMatchingPositionFeature(position, subPart.activeFeature, isFake ? this : null)\r\n }\r\n })\r\n // } else if (subPart.hasAdditionalParts && (subPart.activeFeatureParts == null || !subPart.activeFeatureParts.length)) {\r\n // subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n if (!subPart.activeFeature) {\r\n // we might have features uploaded only for one room layout as in case of replacement tub on american_standard_master\r\n subPart.setDefault()\r\n }\r\n if (!subPart.disabled && subPart.layerPositions && Object.values(subPart.layerPositions).every(feature => !feature)) {\r\n subPart.setLayerPositions(); // mirror cases\r\n }\r\n if (subPart.activeFeature && firstLoad) {\r\n if (!subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (subPart.layerPositions[position]) {\r\n subPart.layerPositions[position].dbFeature.unlocked = true;\r\n }\r\n })\r\n }\r\n if (subPart.hasAdditionalParts && subPart.activeFeatureParts && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts.forEach(additionalFeature => {\r\n additionalFeature.dbFeature.unlocked = true;\r\n })\r\n }\r\n }\r\n })\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (isCartAndUserStatedUpdateNeeded) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n store.dispatch({\r\n type: types.UPDATE_CANVAS_COUNT\r\n });\r\n\r\n if (bvState.id) {\r\n store.dispatch(setActivePreset(bvState.id));\r\n }\r\n\r\n }\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n // if (Array.isArray(dbFeature.metaData.CropCoords) && !dbFeature.metaData.CropCoords[1] && dbFeature.metaData.CropCoords[0]) {\r\n // dbFeature.metaData.CropCoords = dbFeature.metaData.CropCoords[0].split(\",\"); // ['0, 460, 1060, 574'] -> ['0', ' 460', ' 1060', ' 574']\r\n // }\r\n if (!Array.isArray(dbFeature.metaData.RoomLayout) || !dbFeature.metaData.RoomLayout.length) {\r\n dbFeature.metaData.RoomLayout = [\"Layout1\"];\r\n } else {\r\n // console.log(\"dbFeature.metaData.RoomLayout\", dbFeature.metaData.RoomLayout);\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n if (typeof mValue !== \"string\" || !mValue.includes(\"Layout\")) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n return mValue\r\n })\r\n }\r\n Object.keys(dbFeature.metaData).forEach(key => {\r\n if (Array.isArray(dbFeature.metaData[key]) && (key !== \"CropCoords\")) {\r\n dbFeature.metaData[key] = flatMap(dbFeature.metaData[key], (metaValue => {\r\n if (typeof metaValue === \"string\") {\r\n if (metaValue.includes(\", \")) {\r\n return metaValue.split(\", \")\r\n } else if (metaValue.includes(\",\")) {\r\n return metaValue.split(\",\")\r\n }\r\n }\r\n return metaValue\r\n }));\r\n if (key === \"SortPosition\") {\r\n dbFeature.metaData[\"SortPositionNum\"] = +(dbFeature.metaData[key][0])\r\n }\r\n }\r\n });\r\n return dbFeature\r\n }\r\n\r\n}\r\n\r\n","import $ from 'jquery';\r\n\r\nimport values from 'lodash/values';\r\nimport find from 'lodash/find';\r\nimport orderBy from 'lodash/orderBy';\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nimport store from \"./../../store\";\r\nimport {\r\n fixDbFeatureProperties,\r\n getArrayOfIdsFromBvState,\r\n getSlabsFeatureGroup,\r\n} from \"../../misc/helpers\";\r\nimport {baseDashboardImagesPath} from \"../assets\";\r\nimport DesignNavigationItem from \"./designNavigationItem\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport {isFeatureEnabled, isVisibleForNavigation} from \"../../misc/displayLogic\";\r\nimport * as types from \"../../actions/actionTypes\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../../actions/roomsFunctions\";\r\nimport {\r\n restoreCart,\r\n setQtCategoriesLoaded,\r\n // toggleUseFabricatorCostPrices\r\n} from \"../../actions/actionFunctions\";\r\nimport {restoreContractValues} from \"../../actions/contractsActions\";\r\nimport {getBvFeatures} from \"../../api/server-api\";\r\nimport {dbFeatureRelatedFeaturesProperties, PartMenuType} from \"./constants\";\r\nimport {changeSqftFeaturesPopup} from \"../../actions/sqftFunctions\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {getLookId} from \"../look/lookNavigation/lookFunctions2\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, IS_LIXIL_UI, IS_OFFLINE_MODE} from \"../../config\";\r\n// import {getBvGroupFeatures} from \"../../api/server-api\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\nimport {getCurrentLayout, getCurrentZIndexes} from \"../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport Config from \"../../config\";\r\nimport {fixFeaturesResponse, getCartItemPartIdFix, getCompressedCartItems} from \"../../misc/backendFunctions\";\r\nimport {\r\n getAvailableSteps,\r\n getCompressedAllWizardValues\r\n} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {restoreAllWizardSelectedValues} from \"../../actions/wizardFunctions\";\r\nimport {replaceIncorrectSymbols} from \"../../misc/misc2\";\r\nimport {requestAfterRoomChange} from \"../look/lookNavigation/lookNavigationFunctions\";\r\nimport {updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport {\r\n getFeatureGroupFromWizardSteps,\r\n getUpdatedWizardId\r\n} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {updateExistingFeature} from \"./featuresFunctions\";\r\nimport {setReceiptSignature} from \"../../actions/printFunctions\";\r\n\r\nexport default class LayoutCommon {\r\n initialized = false;\r\n selectedLayoutFeatures = {};\r\n disabledClickablePartIds = [];\r\n allDbFeatures = []; // is used for creating fake layouts\r\n\r\n /**\r\n * An hash-table of parts, so we can find easily needed part by its ID\r\n * @type {Object.}\r\n */\r\n parts = {};\r\n constructor() {}\r\n\r\n hasNavItemsLength(...props) {\r\n const subPart = props[0];\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (this.type === 3) && (subPart.part.partId === \"center_island_edge\")) {\r\n return false\r\n }\r\n if (!subPart || !this.isNewLayout || (this.type === 2 && (subPart.part.partId === \"oven\"))\r\n || (subPart.part.partId === \"shower_door\")) { // not sure if we can enable it on old kitchen and bathroom\r\n // added oven because it depends on the stove and should be recalculated each time on layout 2\r\n // added shower door as we need to calculate for current showersize\r\n return this.designNavigationItems(...props).length > 0\r\n }\r\n const propName = IS_LIXIL_UI\r\n ? \"all\"\r\n : props[4] ? \"qt\" : \"vis\"; // forQuotingTool or forVisualizer\r\n if (IS_LIXIL_UI) {\r\n props[4] = \"all\"\r\n }\r\n if (!subPart.part._navItemsCount) {\r\n subPart.part._navItemsCount = {}\r\n }\r\n if (!subPart.part._navItemsCount[this.type]) {\r\n subPart.part._navItemsCount[this.type] = {}\r\n }\r\n if (subPart.part._navItemsCount[this.type][propName] > 0) {\r\n return true\r\n }\r\n if (!subPart.part.allFeaturesReceived\r\n || !Number.isInteger(subPart.part._navItemsCount[this.type][propName])\r\n || !subPart.part._navItemsCount.checkedAfterReceived\r\n || (subPart.part.nextFeaturesPageToLoadArray && subPart.part.partId === \"vanity_countertop\")) {\r\n // added vanity_countertop because of the matching feature omggg\r\n subPart.part._navItemsCount[this.type][propName] = this.designNavigationItems(...props).length\r\n }\r\n if (subPart.part.allFeaturesReceived && !subPart.part._navItemsCount.checkedAfterReceived) {\r\n // stop calling navItems func after all features received and it is calculated\r\n subPart.part._navItemsCount.checkedAfterReceived = true;\r\n }\r\n return subPart.part._navItemsCount[this.type][propName] > 0\r\n }\r\n\r\n /**\r\n * Returns the designNavigationItems for the navigation bar\r\n * @param parentItem {DesignNavigationItem} if null is supplied will return the major designNavigationItems,\r\n * otherwise the children of the given parent item\r\n * @param filters {[navigationFilterValueInterface]}\r\n * @param searchText {string}\r\n * @param forFeature {object|boolean} // for new kitchen and bathroom it is forFeature, for old - withPlaceholders\r\n * @param withQuotingToolFeatures {boolean|string}\r\n * @param filterGroups {array}\r\n * @param restOptions {object} // firstOpenedFeature = null, firstOpenedConditions = null, returnAllFeatures = false, forActiveQTCategory = \"\"\r\n * @returns {Array.}\r\n */\r\n designNavigationItems(\r\n parentItem = null,\r\n filters = [],\r\n searchText = \"\",\r\n forFeature = null,\r\n withQuotingToolFeatures = false, // could be false(visualizer only), true(quotingtool only), or \"all\" - all features\r\n filterGroups = [],\r\n restOptions= {}\r\n ) {\r\n const {forActiveQTCategory, returnAllFeatures} = restOptions;\r\n //console.log('parentItem', parentItem);\r\n if (parentItem == null) {\r\n let partsToShow = this.enabledParts();\r\n if (!this.type) { // disable window on the small room layout\r\n partsToShow = partsToShow.filter(parentGroup => parentGroup.partName !== \"Window\");\r\n }\r\n if (document.kvConfig.visualizerType === \"KV\" || document.kvConfig.visualizerType === \"Kitchen\") {\r\n // disable center island\r\n const layoutAbbreviation = this.getCurrentLayoutAbbreviation();\r\n if (!layoutAbbreviation.includes(\"I\")) {\r\n partsToShow = partsToShow.filter(parentGroup => parentGroup.partName !== \"CenterIsland\");\r\n }\r\n }\r\n return orderBy(partsToShow, ['sortOrder']).map(parentGroup => parentGroup.navigationItem());\r\n }\r\n\r\n const thirdParam = this.isNewLayout ? forFeature || parentItem.part.activeFeature : forFeature // withPlaceholders\r\n\r\n const nItems = parentItem.part.navigationSubItems(\r\n filters,\r\n searchText,\r\n thirdParam,\r\n filterGroups,\r\n restOptions\r\n )\r\n // console.log(\"nItems\", nItems);\r\n const navItems = nItems\r\n .filter(feature => {\r\n if (!feature || !feature.part) {\r\n return false\r\n }\r\n if (!this.isNewLayout && !thirdParam && feature.part.partName\r\n && (feature.part.partName.includesCI('placeholder') || feature.part.partName.includesCI('Demo Model'))) {\r\n return false // exclude placeholders;\r\n }\r\n return isVisibleForNavigation(feature.part, withQuotingToolFeatures, forActiveQTCategory)\r\n });\r\n\r\n return withQuotingToolFeatures || returnAllFeatures\r\n ? this.getNotAvailableInVisualizerFeatures(navItems, parentItem.part, filters, searchText, forActiveQTCategory)\r\n : navItems.filter(item => !item.part.notAvailableInVisualizer && isFeatureEnabled(item.part, \"visualizer\"))\r\n }\r\n\r\n setGroupsItemsCount(bvGroups) {\r\n const features = this.getFeatures(true);\r\n const groupKeys = {};\r\n Object.keys(bvGroups).map(key => {\r\n groupKeys[key.toLowerCase()] = key;\r\n });\r\n // console.log(groupKeys);\r\n features.forEach(parentGroup => {\r\n if (parentGroup.menuType === PartMenuType.Simple) {\r\n const dbName = (parentGroup.dbName || parentGroup.partName).toLowerCase();\r\n parentGroup.counts = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].counts\r\n : null;\r\n parentGroup.totalFeaturesCount = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].totalFeaturesCount\r\n : null\r\n if (IS_OFFLINE_MODE) {\r\n parentGroup.allFeaturesReceived = true;\r\n parentGroup.realFeaturesReceived = true;\r\n }\r\n } else {\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n const dbName = (relatedItem.dbName || relatedItem.partName).toLowerCase();\r\n if (relatedItem.partId !== \"wall_configuration\") {\r\n relatedItem.counts = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].counts\r\n : null;\r\n }\r\n relatedItem.totalFeaturesCount = (groupKeys[dbName] && bvGroups[groupKeys[dbName]])\r\n ? bvGroups[groupKeys[dbName]].totalFeaturesCount\r\n : null;\r\n if (!relatedItem.counts && !relatedItem.partId.includes(\"decor\")) {\r\n console.log(\"no relatedItem.counts\", relatedItem)\r\n }\r\n if (IS_OFFLINE_MODE) {\r\n relatedItem.allFeaturesReceived = true;\r\n relatedItem.realFeaturesReceived = true;\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n getNotAvailableInVisualizerFeatures = (filteredAvailableFeatures, subPart, filters, searchText, forActiveQTCategory = \"\") => {\r\n if (subPart.getParent && subPart.getParent().partName === \"Other\") { // not in visualizer features, they don't need another check\r\n return filteredAvailableFeatures\r\n }\r\n const notInVisualizerFeaturesThatLeft = subPart.features.filter(feature => {\r\n if (feature.partName && feature.partName.includes(\"laceholder\")) {\r\n return false\r\n }\r\n const featureSplittedName = feature.getSplittedFeatureName();\r\n return feature.notAvailableInVisualizer && isVisibleForNavigation(feature, true, forActiveQTCategory)\r\n && !filteredAvailableFeatures.some(countertop => {\r\n return countertop.part.getSplittedFeatureName() === featureSplittedName\r\n })\r\n })\r\n\r\n let allNotAvailableFeatures = subPart.getFeaturesBySearchText(subPart.getFilteredFeaturesByFilters(filters, notInVisualizerFeaturesThatLeft), searchText);\r\n allNotAvailableFeatures = subPart.returnUniqueNavFeatures\r\n ? subPart.returnUniqueNavFeatures(allNotAvailableFeatures)\r\n : allNotAvailableFeatures.map(_ => new DesignNavigationItem(_.featureName, _));\r\n\r\n return [\r\n ...filteredAvailableFeatures,\r\n ...allNotAvailableFeatures\r\n ]\r\n }\r\n\r\n /**\r\n * returns enabled parts\r\n */\r\n enabledParts(withShadow) {\r\n return this.getFeatures(withShadow).filter(parentGroup => parentGroup.categoryEnabled);\r\n }\r\n\r\n async selectLayout(type, oldType, currentState = null, scene = this.scene, callBack, isFake = false) {\r\n const firstLoad = false; // change if needed\r\n const features = this.getFeatures(true); // true here cause we need backgrounds also to set default!\r\n const currentType = oldType || this.type; // 1) remember previous selection\r\n\r\n // 2) save the current state using feature names, then restore it after the layout has changed\r\n currentState = currentState || this.getActiveFeaturesAsObject(true, false, true);\r\n\r\n if (getCurrentRoomType(this) === LOOK_ROOM_TYPES.as || Config.isVisualizerManagement()) {\r\n currentState.disabled_parts = [];\r\n }\r\n\r\n // 3) save selected features to recover them after layout change back (if they were not found after current set)\r\n this.selectedLayoutFeatures[currentType] = currentState;\r\n\r\n this.type = type; // 4) apply new Layout\r\n this.scene = currentType !== type ? \"1\" : scene; // 4) apply new scene // set first scene if layout is changed\r\n currentState.scene = this.scene; // 4) apply new scene\r\n currentState.layout_type = type; // 4) apply new layout_type\r\n\r\n features.forEach(parentGroup => {\r\n parentGroup.setDefault(this); // setting default after\r\n });\r\n\r\n this.setActiveFeaturesFromObject(currentState, false, true, false, firstLoad, isFake); // 6) set the layers from previous layout\r\n this.changeLayout(this.getFeatures()); // 7) set specific rules for each part\r\n if (!isFake) {\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // 8) refresh canvas\r\n this.updateLocalStorage();\r\n }\r\n if (callBack) {\r\n callBack()\r\n }\r\n console.log(\"this fake\", this);\r\n return Promise.resolve()\r\n }\r\n\r\n setItemsFromBvState = async (bvState,\r\n isCartAndUserStatedUpdateNeeded= false,\r\n additionalSet = (bvState) => bvState,\r\n firstLoad = false,\r\n forVisualizer\r\n ) => {\r\n const neededDbFeatures = getArrayOfIdsFromBvState(bvState).filter(dbFeatureId => {\r\n return !this.allDbFeatures.some(feature => feature.id === dbFeatureId)\r\n });\r\n const response = neededDbFeatures.length\r\n ? await getBvFeatures(neededDbFeatures, null, false, forVisualizer)\r\n : {data: []}\r\n\r\n // console.log('getBvFeatures response->', responseFeatures);\r\n\r\n // this code is needed because we need to loadNewFeatures for already setted layout type\r\n bvState = bvState || {};\r\n const layout_type = +bvState.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n this.loadNewFeatures(response.data);\r\n if (typeof additionalSet === \"function\") {\r\n bvState = additionalSet(bvState);\r\n }\r\n this.setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, false, true, firstLoad);\r\n if (this.isNewLayout && firstLoad) {\r\n this.createCustomConfigurations();\r\n }\r\n await requestAfterRoomChange(this);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS);\r\n return response\r\n };\r\n\r\n changeLayout(features) {\r\n features.forEach(parentGroup => {\r\n parentGroup.changeLayout(this.type);\r\n parentGroup.relatedItems.forEach(ri => ri.changeLayout(this.type));\r\n });\r\n }\r\n\r\n getFeatures(withShadow = false) {\r\n return withShadow ? values(this.parts) : values(this.parts).filter(part => {\r\n return [\"Global Shadow\", \"Globals\", \"Other\", \"Background\", \"Backgrounds\"].every(groupName => part.partName !== groupName)\r\n });\r\n }\r\n\r\n fixFeatureBeforeLoad(dbFeature) {\r\n dbFeature = fixDbFeatureProperties(dbFeature);\r\n if (Array.isArray(dbFeature.metaData.RoomLayout)) {\r\n dbFeature = this.fixFeatureMetaData(dbFeature)\r\n }\r\n return dbFeature\r\n }\r\n\r\n loadNewFeatures(dbFeatures = [], forParentGroup = null, applyCustomConfigurations = true, forNextBvState = null) {\r\n //features could be also loaded directly to the part, check part.js -> setGroupFeatures method\r\n\r\n //dbFeatures can be an object! {features:[], relatedFeatures: []}\r\n const dbFeaturesArray = fixFeaturesResponse(dbFeatures);\r\n\r\n const parentGroups = this.getFeatures(true);\r\n let relatedFeatures = [];\r\n\r\n for (let i = 0; i < dbFeaturesArray.length; i++) {\r\n let dbFeature = dbFeaturesArray[i];\r\n if (!dbFeature) {\r\n continue;\r\n }\r\n dbFeatureRelatedFeaturesProperties.forEach(property => {\r\n if (Array.isArray(dbFeature[property]) && dbFeature[property].length) {\r\n dbFeature[property].forEach(relatedFeature => {\r\n if (relatedFeatures.some(relFeature => relFeature.id === relatedFeature.id)) {\r\n return\r\n }\r\n relatedFeatures.push(relatedFeature)\r\n });\r\n // console.log(\"dbFeature.relatedFeatures\", dbFeature.relatedFeatures);\r\n }\r\n })\r\n this.loadDbFeature(dbFeature, parentGroups, forParentGroup)\r\n }\r\n\r\n if (relatedFeatures.length) {\r\n for (let i = 0; i < relatedFeatures.length; i++) {\r\n this.loadDbFeature(relatedFeatures[i], parentGroups)\r\n }\r\n }\r\n\r\n if (document.kvConfig.visualizerType === \"bvLook\" && applyCustomConfigurations) {\r\n const isAsBathroomState = forNextBvState && forNextBvState.visualizerType === \"bvLook\" && forNextBvState.layout_type >= 10;\r\n this.createCustomConfigurations(isAsBathroomState);\r\n }\r\n\r\n return true\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n // it is needed only for bvScene - it has it's own method\r\n // dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n // Object.values(LayoutType).map(val => val + \"\").forEach(stringNum => {\r\n // if (mValue === stringNum) {\r\n // mValue = \"Layout\" + mValue\r\n // }\r\n // })\r\n // return mValue\r\n // })\r\n return dbFeature\r\n }\r\n\r\n loadDbFeature(dbFeature, parentGroups, forParentGroup = null) {\r\n if (!dbFeature || (dbFeature.employeesOnly && !document.kvConfig.isBackend)) {\r\n return;\r\n }\r\n for (let i = 0; i < this.allDbFeatures.length; i++) {\r\n if (this.allDbFeatures[i].id === dbFeature.id) {\r\n // console.log(\"featureFound\", featureFound);\r\n updateExistingFeature(dbFeature, this.allDbFeatures[i], this);\r\n return;\r\n }\r\n }\r\n dbFeature = this.fixFeatureBeforeLoad(dbFeature);\r\n let loaded = false;\r\n if (forParentGroup && !(document.kvConfig.visualizerType === \"bvLook\" && forParentGroup.partName === \"Towel\") // they should be in separate groups\r\n && (forParentGroup.dbName === dbFeature.groupName || forParentGroup.partName === dbFeature.groupName)) {\r\n loaded = forParentGroup.load(dbFeature);\r\n }\r\n if (!loaded) {\r\n for (let i = 0; i < parentGroups.length; i++) {\r\n const parentGroup = parentGroups[i];\r\n loaded = parentGroup.load(dbFeature);\r\n if (loaded) {\r\n break;\r\n }\r\n }\r\n if (!loaded && this.parts[\"Other\"]) {\r\n this.parts[\"Other\"].load(dbFeature);\r\n }\r\n }\r\n // dbFeature.isRelatedDbFeature ? this.allDbFeatures.unshift(dbFeature) : this.allDbFeatures.push(dbFeature);\r\n this.allDbFeatures.push(dbFeature);\r\n }\r\n\r\n createCustomConfigurations(isAsBathroomState = null) {\r\n // after load callBack for each part(to set specific rules)\r\n this.getFeatures().forEach(parentGroup => {\r\n parentGroup.setSpecificRules ? parentGroup.setSpecificRules(isAsBathroomState) : null;\r\n });\r\n }\r\n\r\n setDefaultFeatures() {\r\n this.getFeatures(true).forEach(parentGroup => {\r\n parentGroup.setDefault(this);\r\n });\r\n }\r\n\r\n /**\r\n * Returns all features by text\r\n */\r\n\r\n getAllFeaturesByText(searchText) {\r\n let allFeatures = [];\r\n this.getFeatures().forEach((parentGroup) => {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n allFeatures = [...allFeatures, ...subPart.part.features.filter(feature => feature.partName && feature.partName.toLowerCase().includes(searchText.toLowerCase()))]\r\n })\r\n });\r\n // console.log('allFeatures', allFeatures);\r\n return allFeatures\r\n }\r\n\r\n /**\r\n * Returns all features\r\n * @param withOtherGroups {boolean}\r\n */\r\n\r\n getAllFeatures(withOtherGroups = false) {\r\n let allFeatures = [];\r\n this.getFeatures(withOtherGroups).forEach((parentGroup) => {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n allFeatures = [...allFeatures, ...subPart.part.features]\r\n })\r\n });\r\n // console.log('allFeatures', allFeatures);\r\n return allFeatures\r\n }\r\n\r\n /**\r\n * Returns feature\r\n * @param neededId {number}\r\n * @param withOtherGroups {boolean}\r\n * @returns feature {object}\r\n */\r\n getFeatureById(neededId, withOtherGroups = false) {\r\n let feature = null;\r\n this.getFeatures(withOtherGroups).forEach((parentGroup) => {\r\n if (!feature) {\r\n let subParts = parentGroup.subParts();\r\n subParts.forEach((subPart) => {\r\n if (!feature) {\r\n feature = subPart.part.getFeatureById(neededId, true);\r\n }\r\n })\r\n }\r\n });\r\n return feature\r\n }\r\n\r\n /**\r\n * Returns feature\r\n * @param skuNumber {string}\r\n * @param featureGroupPartId {string}\r\n * @param allLayouts {boolean}\r\n * @param withSharedFeatureName {boolean}\r\n * @returns feature {object}\r\n */\r\n getFeatureBySku(skuNumber, featureGroupPartId= \"\", allLayouts = false, withSharedFeatureName = false) {\r\n const propToSearch = withSharedFeatureName ? \"sharedFeatureName\" : \"sku\";\r\n if (featureGroupPartId) {\r\n const featureGroupFound = this.getFeatureGroupByPartId(featureGroupPartId);\r\n if (featureGroupFound) {\r\n if (featureGroupFound && featureGroupFound.activeFeature && featureGroupFound.activeFeature.dbFeature[propToSearch] === skuNumber) {\r\n return featureGroupFound.activeFeature\r\n }\r\n const searchFrom = featureGroupFound.getFeaturesForNavigationFrom\r\n ? featureGroupFound.getFeaturesForNavigationFrom({returnAllFeatures: allLayouts})\r\n : featureGroupFound.features;\r\n for (let i = 0; i < searchFrom.length; i++) {\r\n if (searchFrom[i].dbFeature[propToSearch] === skuNumber) {\r\n return searchFrom[i];\r\n }\r\n }\r\n }\r\n }\r\n const allParents = this.getFeatures();\r\n for (let i = 0; i < allParents.length; i++) {\r\n const subParts = allParents[i].subParts();\r\n for (let j = 0; j < subParts.length; j++) {\r\n const featureGroup = subParts[j].part;\r\n if (featureGroup.activeFeature) {\r\n if (featureGroup.activeFeature.dbFeature[propToSearch] === skuNumber) {\r\n return featureGroup.activeFeature\r\n }\r\n const features = [...featureGroup.features, ...featureGroup.featuresParts];\r\n const sameSkuFeatures = features.filter(feature => feature.dbFeature[propToSearch] === skuNumber);\r\n if (!sameSkuFeatures.length) {\r\n continue;\r\n }\r\n if (featureGroup.activeFeature.metaData[\"Side\"]) {\r\n const sameSide = sameSkuFeatures.find(feature => {\r\n return isEqual(feature.metaData[\"Side\"], featureGroup.activeFeature.metaData[\"Side\"])\r\n });\r\n if (sameSide) {\r\n return sameSide\r\n }\r\n }\r\n return sameSkuFeatures[0]\r\n } else {\r\n for (let k = 0; k < featureGroup.features.length; k++) {\r\n if (featureGroup.features[k].dbFeature[propToSearch] === skuNumber) {\r\n return featureGroup.features[k];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Returns active installations\r\n */\r\n getActiveInstallations() {\r\n const {instState} = store.getState();\r\n return Object.assign({}, instState, {instOpened: false});\r\n }\r\n\r\n addCartAndUserStatesToLocalStorage(bvState) {\r\n const {cartState, userState, sqftState, bathroomVisualizerState, wizardState, fabricatorState} = store.getState();\r\n\r\n bvState.cartState = Object.assign({}, cartState, {\r\n recentlyViewedItems: [],\r\n cartItems: getCompressedCartItems(cartState.cartItems),\r\n displayLogicCartItems: getCompressedCartItems(cartState.displayLogicCartItems),\r\n });\r\n\r\n const lookId = getLookId(bathroomVisualizerState.activePreset, bathroomVisualizerState.bvPresets);\r\n bvState.userState = userState;\r\n bvState.id = bathroomVisualizerState.activePreset;\r\n bvState.lookId = lookId;\r\n bvState.useSqftCartPopup = sqftState ? sqftState.sqftFeaturesPopup.enabled : false;\r\n bvState.useFabricatorCostPrices = fabricatorState.settings.useFabricatorCostPrices;\r\n if (wizardState.wizardIsActive) {\r\n bvState.allWizardsValues = getCompressedAllWizardValues(wizardState.allWizardsValues);\r\n }\r\n return bvState\r\n }\r\n\r\n /**\r\n * Returns activeFeatures object\r\n */\r\n\r\n getStonesActiveFeatures() {\r\n return this.getActiveFeatures(true).filter(activeFeature => activeFeature.cartFeature && activeFeature.cartFeature.isStoneFeature)\r\n }\r\n\r\n addDisabledPartsToLocalStorage(bvState) {\r\n const disabledPartIds = this.getDisabledFeatures();\r\n if (disabledPartIds.length) {\r\n bvState.disabled_parts = disabledPartIds;\r\n }\r\n return bvState\r\n }\r\n\r\n /**\r\n * @param useNames {boolean}\r\n * @param returnAllData {boolean}\r\n * @param returnAllFeatures {boolean}\r\n */\r\n getActiveFeaturesAsObject(useNames = false, returnAllData = true, returnAllFeatures = false) {\r\n let bvState = {};\r\n let activeFeatures = this.getActiveFeatures(returnAllFeatures, false, true);\r\n // console.log('activeFeatures', activeFeatures);\r\n activeFeatures.forEach((activeFeature) => {\r\n if (!activeFeature.cartFeature) {\r\n return\r\n }\r\n bvState[activeFeature.partId] = useNames\r\n ? activeFeature.cartFeature.getMatchingFeatureName()\r\n : activeFeature.cartFeature.dbFeature.id;\r\n });\r\n\r\n bvState.visualizerType = this.visualizerType; // to apply correct visualizer on quote open after save\r\n bvState.toolVersion = document.kvConfig.toolVersion; // to apply correct visualizer on quote open after save\r\n bvState.navigationType = document.kvConfig.navigationType; // to open in dashboard correct UI;\r\n\r\n bvState = this.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures);\r\n bvState = this.addDisabledPartsToLocalStorage(bvState);\r\n bvState.bvStateVersion = 2; //todo to test\r\n\r\n if (returnAllData) {\r\n bvState.installations = this.getActiveInstallations();\r\n bvState = this.addCartAndUserStatesToLocalStorage(bvState);\r\n }\r\n\r\n return bvState\r\n }\r\n\r\n /**\r\n * @param dbFeatureId {number}\r\n * @param featureGroup {featureGroupInterface}\r\n * @param featuresToLoad {array}\r\n * @return {featureInterface}\r\n */\r\n getLoadedFeatureById = (dbFeatureId, featureGroup, featuresToLoad = []) => {\r\n let featureLoaded = featureGroup.features.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded && featureGroup.featuresParts) {\r\n featureLoaded = featureGroup.featuresParts.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n }\r\n if (!featureLoaded) { // if feature isn't found in the current layout, let's find it in another layouts\r\n let allFeatures = [];\r\n Object.keys(this.layoutNames).forEach((layoutType) => {\r\n if (layoutType !== \"All\") {\r\n allFeatures = [...allFeatures, ...featureGroup.featuresList[layoutType]]\r\n }\r\n });\r\n featureLoaded = allFeatures.find((feature) => feature.dbFeature.id === dbFeatureId);\r\n if (!featureLoaded\r\n && (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\")\r\n && this.qtCategories && this.qtCategories.some(qtCat => qtCat.qtCategoryHasBeenChanged)\r\n && featuresToLoad.length\r\n ) {\r\n // console.info(\"Cart feature is not loaded, trying in change categories:\", dbFeatureId);\r\n this.qtCategories.forEach(qtCat => {\r\n const changedSubPart = qtCat.subParts.find(subPart => {\r\n return subPart.part.partId === featureGroup.partId\r\n });\r\n if (changedSubPart) {\r\n // console.info(\"Cart feature is not loaded, found subpart:\", ci);\r\n const needToLoadFeature = featuresToLoad.find(dbFeature => dbFeature.id === dbFeatureId);\r\n if (needToLoadFeature) {\r\n changedSubPart.part.setGroupFeatures([needToLoadFeature], 0, false)\r\n }\r\n featureLoaded = featureGroup.features.find((feature) => {\r\n return feature.dbFeature.id === dbFeatureId\r\n });\r\n // if (featureLoaded) {\r\n // console.info(\"Cart feature is not loaded, it's ok, we found it:\", dbFeatureId, featureLoaded);\r\n // }\r\n }\r\n })\r\n }\r\n // console.log('featureLoaded', featureLoaded);\r\n if (!featureLoaded) {\r\n console.error(\"Cart feature is not loaded:\", dbFeatureId);\r\n }\r\n }\r\n return featureLoaded\r\n }\r\n\r\n /**\r\n * Get Cart Items From BvState\r\n * @param cartItems {Array}\r\n * @param featuresToLoad {Array} // only if layout is changed - we need to load features to changed feature group\r\n * @param checkAllLayouts {boolean}\r\n * @return {Array}\r\n */\r\n getCartItemsFromBvState(cartItems = [], featuresToLoad = [], checkAllLayouts = false) {\r\n // const slabGroup = getSimilarFeatureGroup(SQFT_FEATURES.slabs, SQFT_FEATURES.slabs);\r\n // parentItems.push(slabGroup);\r\n\r\n const setCustomPrices = (feature, fromCartItem) => {\r\n if (feature && feature.dbFeature && fromCartItem && fromCartItem.cartFeature && fromCartItem.cartFeature.hasOwnProperty(\"customCost\")) {\r\n feature.dbFeature.priceWasChanged = true;\r\n feature.dbFeature.cost = fromCartItem.cartFeature.customCost;\r\n feature.dbFeature.fabricatorCost = fromCartItem.cartFeature.customCost;\r\n feature.dbFeature.price = fromCartItem.cartFeature.customPrice;\r\n }\r\n }\r\n\r\n return cartItems\r\n .map(ci => {\r\n\r\n const layout = checkAllLayouts && ci.fromVisualizerType ? getCurrentLayout(ci.fromVisualizerType) : this;\r\n if (layout.isNewLayout) {\r\n const partId = getCartItemPartIdFix(ci.partId);\r\n let cartFeature = layout.getFeatureFromAllLayouts(ci.partId, ci.cartFeature, featuresToLoad);\r\n setCustomPrices(cartFeature, ci);\r\n let newCartItem = Object.assign({}, ci, {\r\n partId,\r\n currentQuote: ci.currentQuote || 0,\r\n cartFeature: cartFeature\r\n });\r\n if (ci.relatedProductParent) {\r\n newCartItem.relatedProductParent = layout.getFeatureFromAllLayouts(ci.relatedProductParent.partId, ci.relatedProductParent, featuresToLoad);\r\n }\r\n if (ci.bundleParentId) {\r\n newCartItem.bundleParentId = ci.bundleParentId;\r\n }\r\n if (Number.isInteger(newCartItem.fromWizardId)) {\r\n newCartItem.fromWizardId = getUpdatedWizardId(newCartItem.fromVisualizerType, newCartItem.fromWizardId)\r\n }\r\n if (cartFeature && cartFeature.dbFeature) { //if we couldn't find feature then we will try to restore it from old layout\r\n return newCartItem\r\n }\r\n }\r\n\r\n const parentItems = layout.getFeatures(true);\r\n const dbFeatureId = ci.cartFeature.dbFeatureId || ci.fabFeatId || (ci.cartFeature.dbFeature ? ci.cartFeature.dbFeature.id : null); //old logic support\r\n if (!dbFeatureId) {\r\n console.log(\"NO DB FEATURE ID\", ci);\r\n }\r\n const ciFeature = ci.cartFeature; // we have to remember what has come from backend to be able to restore custom price\r\n ci.cartFeature = ci.cartFeature || {};\r\n ci.partId = getCartItemPartIdFix(ci.partId);\r\n ci.currentQuote = ci.currentQuote || 0;\r\n let childSubPart = null;\r\n parentItems.forEach(parentGroup => {\r\n if (childSubPart || !parentGroup) {\r\n return\r\n }\r\n if (ci.partId === SQFT_FEATURES.slabs) {\r\n childSubPart = getSlabsFeatureGroup(layout);\r\n childSubPart = childSubPart.part ? childSubPart.part : childSubPart\r\n } else {\r\n //changed subParts() to relatedItems because on this task QCDES-2593\r\n childSubPart = parentGroup.relatedItems.find(relItem => relItem.partId === ci.partId);\r\n }\r\n if (childSubPart && childSubPart.features) {\r\n ci.cartFeature = layout.getLoadedFeatureById(dbFeatureId, childSubPart, featuresToLoad);\r\n }\r\n });\r\n setCustomPrices(ci.cartFeature, {cartFeature: ciFeature});\r\n if (Number.isInteger(ci.fromWizardId)) {\r\n ci.fromWizardId = getUpdatedWizardId(ci.fromVisualizerType, ci.fromWizardId)\r\n }\r\n if (!ci.cartFeature || !ci.cartFeature.dbFeature) {\r\n console.error(\"cartFeature not loaded!\", ci);\r\n }\r\n return ci\r\n })\r\n .filter(ci => ci.cartFeature && ci.cartFeature.dbFeature); //prevent error's that are caused by missing feature\r\n }\r\n\r\n bvStateHasLockedItems(bvState) {\r\n return this.getFeatures().some((parentGroup) => {\r\n let partDataHasLockedItems = false;\r\n if (parentGroup.menuType === 0 && parentGroup.partName !== \"Toilet\") {\r\n const partId = parentGroup.partId;\r\n if (bvState.hasOwnProperty(partId)) {\r\n const feature = parentGroup.getFeatureById(bvState[partId]);\r\n if (feature && !feature.dbFeature.unlocked) {\r\n // console.log('found!', feature);\r\n partDataHasLockedItems = true;\r\n }\r\n }\r\n } else {\r\n let subParts = parentGroup.relatedItems;\r\n subParts.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n if (bvState.hasOwnProperty(partId)) {\r\n const feature = subPart.getFeatureById(bvState[partId]);\r\n if (feature && !feature.dbFeature.unlocked) {\r\n // console.log('found!', feature, index);\r\n partDataHasLockedItems = true;\r\n }\r\n // if (partId === \"shower_body\") {\r\n // }\r\n }\r\n })\r\n }\r\n return partDataHasLockedItems\r\n });\r\n }\r\n\r\n /**\r\n * @param qtCategories {array}\r\n * @return void // creates array of featureGroups features and loads them. skips already loaded\r\n */\r\n loadFeatureGroupFeatures = (qtCategories) => {\r\n let featureGroupFeatures = [];\r\n let needToLoadFeatureGroupsFeatures = [];\r\n // qtCategories.forEach(qtCategory => {\r\n // qtCategory.featureGroups.forEach(featureGroup => {\r\n // if (featureGroup.features && featureGroup.features.length) {\r\n // featureGroup.features.forEach(dbFeature => {\r\n // if (!dbFeature.metaData) {\r\n // console.log(\"no metadata found\", dbFeature);\r\n // }\r\n // })\r\n // }\r\n // });\r\n // });\r\n const parentParts = this.getFeatures();\r\n qtCategories\r\n .filter(qtCategory => {\r\n return qtCategory.enabled && qtCategory.featureGroups.some(featureGroup => featureGroup.enabled)\r\n })\r\n .forEach(qtCategory => {\r\n qtCategory.featureGroups\r\n .filter(featureGroup => {\r\n const groupName = featureGroup.groupName.toLowerCase();\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.subParts();\r\n const item = subPartItems.find(subPartItem => {\r\n const dbName = (subPartItem.part.dbName || subPartItem.part.partName).toLowerCase();\r\n return groupName === dbName\r\n });\r\n if (item) {\r\n const navItems = this.designNavigationItems(item, {}, \"\", false, true);\r\n if (!navItems.length && !needToLoadFeatureGroupsFeatures.some(sPart => sPart.part.partId === item.part.partId)) {\r\n needToLoadFeatureGroupsFeatures.push(item);\r\n }\r\n // console.log(\"features already exist:\", groupName);\r\n return false\r\n }\r\n }\r\n return true\r\n })\r\n .forEach(featureGroup => {\r\n if (featureGroup.features && featureGroup.features.length) {\r\n featureGroupFeatures = [...featureGroupFeatures, ...featureGroup.features]\r\n }\r\n });\r\n });\r\n this.loadNewFeatures(featureGroupFeatures, null, false);\r\n return needToLoadFeatureGroupsFeatures\r\n };\r\n\r\n addSubPartProperties(subPart, featureGroup, qtCategory, isComplex = false) {\r\n subPart.part.qtCategoryName = qtCategory.name;\r\n subPart.part.featureGroupVisible = featureGroup.visible;\r\n subPart.part.featureGroupEnabled = featureGroup.enabled;\r\n subPart.part.displayType = featureGroup.displayType || 3;\r\n subPart.part.featureGroupEnabled = featureGroup.enabled;\r\n subPart.part.unitText = featureGroup.unitText;\r\n subPart.hasFeatures = featureGroup.hasFeatures;\r\n if (!isComplex) {\r\n subPart.part.customGroupDisplayName = featureGroup.customDisplayName;\r\n subPart.part.description = featureGroup.description;\r\n subPart.part.customDescription = featureGroup.customDescription;\r\n subPart.part.customImageUrl = featureGroup.customImageUrl ? baseDashboardImagesPath + featureGroup.customImageUrl : \"\";\r\n if ((this.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene)) {\r\n if (subPart.part.partId === \"center_island_sink\") {\r\n const anotherFg = this.getFeatureGroupByPartId(\"sink\");\r\n if (anotherFg) {\r\n anotherFg.customGroupDisplayName = subPart.part.customGroupDisplayName;\r\n anotherFg.description = subPart.part.description;\r\n anotherFg.customDescription = subPart.part.customDescription;\r\n anotherFg.customImageUrl = subPart.part.customImageUrl;\r\n }\r\n } else if (subPart.part.partId === \"center_island_faucet\") {\r\n const anotherFg = this.getFeatureGroupByPartId(\"faucet\");\r\n if (anotherFg) {\r\n anotherFg.customGroupDisplayName = subPart.part.customGroupDisplayName;\r\n anotherFg.description = subPart.part.description;\r\n anotherFg.customDescription = subPart.part.customDescription;\r\n anotherFg.customImageUrl = subPart.part.customImageUrl;\r\n }\r\n }\r\n }\r\n }\r\n /*** HERE WE SET SAME PROPERTIES FOR SPECIFIC QT Category ***/\r\n let qtCatProperties = {\r\n qtCategoryId: qtCategory.id,\r\n qtCategoryName: qtCategory.name,\r\n featureGroupVisible: featureGroup.visible,\r\n featureGroupEnabled: featureGroup.enabled,\r\n // hasFeatures: featureGroup.hasFeatures, // NOT SURE WHERE WE NEED THAT\r\n }\r\n if (!isComplex) {\r\n qtCatProperties.customGroupDisplayName = featureGroup.customDisplayName;\r\n qtCatProperties.description = featureGroup.description;\r\n qtCatProperties.customDescription = featureGroup.customDescription;\r\n qtCatProperties.customImageUrl = featureGroup.customImageUrl ? baseDashboardImagesPath + featureGroup.customImageUrl : \"\";\r\n }\r\n if (!subPart.part.qtCatProperties) {\r\n subPart.part.qtCatProperties = {};\r\n }\r\n subPart.part.qtCatProperties[qtCategory.name] = qtCatProperties;\r\n }\r\n\r\n get qtCategories() {\r\n //NOTA BENE !!! kitchen layout has it's own get qtCategories() method\r\n return this.qtCategoriesList\r\n }\r\n\r\n setQtCategoriesSubparts(qtCategories) {\r\n const parentParts = [...this.getFeatures(), this.parts[\"Other\"]];\r\n // console.log('parentParts', parentParts);\r\n let hasFeaturePropertyName = getCommonVisualizerType(this.visualizerType);\r\n this.qtCategoriesList = qtCategories\r\n .map(qtCategory => { //todo remove this after we push staging backend\r\n if (Array.isArray(qtCategory.featureGroups)) {\r\n qtCategory.featureGroups = qtCategory.featureGroups.map((featureGroup) => {\r\n if (this.isNewLayout) { // ignoreHasFeaturesProperty\r\n featureGroup.hasFeatures = {\r\n bathroom: true,\r\n kitchen: true,\r\n fireplace: true,\r\n laundryroom: true,\r\n }\r\n } else if (!featureGroup.hasFeatures) {\r\n featureGroup.hasFeatures = {\r\n bathroom: featureGroup.hasBVFeatures,\r\n kitchen: featureGroup.hasKVFeatures,\r\n fireplace: true,\r\n laundryroom: true,\r\n }\r\n }\r\n if (featureGroup.hasFeatures[hasFeaturePropertyName] && Array.isArray(featureGroup.features)\r\n && (featureGroup.features.length > 0 && featureGroup.features.length < 50)\r\n && !featureGroup.features.some(dbFeature => isFeatureEnabled({dbFeature}, \"quotingTool\", \"\", hasFeaturePropertyName))) {\r\n // this is a fix we need to do on the backend! if features.length is more than 50 and they all are disabled\r\n // for QuotingTool - hasFeatures.bathroom should be false!\r\n featureGroup.hasFeatures[hasFeaturePropertyName] = false\r\n }\r\n return featureGroup\r\n })\r\n }\r\n return qtCategory\r\n })\r\n .filter(qtCategory => {\r\n return qtCategory.enabled // 1) remove disabled qtCategories\r\n && Array.isArray(qtCategory.featureGroups) && qtCategory.featureGroups.some((featureGroup) => {\r\n return featureGroup.hasFeatures && featureGroup.hasFeatures[hasFeaturePropertyName] // 1) remove qtCategories without visualizerTypeFeatures\r\n })\r\n })\r\n .sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0) // sort by order\r\n .map((qtCategory) => {\r\n let subParts = [];\r\n qtCategory.featureGroups\r\n .filter(featureGroup => {\r\n const featureGroupName = featureGroup.groupName.toLowerCase();\r\n return featureGroupName !== \"walls\"\r\n }) // remove walls featureGroup // clone.quotesflooring.com/visualizer#/ issue\r\n .sort((a, b) => a.order !== b.order ? a.order < b.order ? -1 : 1 : 0) // sort by order\r\n .forEach(featureGroup => {\r\n let subPart = null;\r\n const featureGroupName = featureGroup.groupName.toLowerCase();\r\n // if (featureGroupName === \"walls\") {\r\n // const wallsParent = parentParts.find(parentPart => parentPart.partName === \"Walls\");\r\n // if (wallsParent) {\r\n // subParts = [...subParts, ...wallsParent.subParts().map(wallsSubPart => {\r\n // this.addSubPartProperties(wallsSubPart, featureGroup, qtCategory, false);\r\n // return wallsSubPart\r\n // })];\r\n // }\r\n // } else {\r\n //\r\n // }\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n const item = subPartItems.find(subPartItem => {\r\n if (featureGroupName === \"shower pan\" && document.kvConfig.visualizerType === \"bvScene\") {\r\n const dbName = (subPartItem.part.dbName || \"\").toLowerCase();\r\n const dbName2 = (subPartItem.part.partName || \"\").toLowerCase();\r\n return featureGroupName === dbName || featureGroupName === dbName2\r\n } else if (featureGroupName === \"vanity\" && document.kvConfig.visualizerType === \"bvLook\") {\r\n return subPartItem.part.partId === 'vanity_cabinet'\r\n }\r\n const dbName = (subPartItem.part.dbName || subPartItem.part.partName).toLowerCase();\r\n // if (featureGroupName === dbName && (this.visualizerType === AVAILABLE_VISUALIZER_TYPES.kvScene)) {\r\n // if (dbName === \"sink\" && (subPartItem.part.partId === \"center_island_sink\")) {\r\n // return false // we should show back countertop sink instead of sink on the new Kitchen\r\n // } else if (dbName === \"faucet\" && (subPartItem.part.partId === \"center_island_faucet\")) {\r\n // return false // we should show back countertop faucet instead of faucet on the new Kitchen\r\n // }\r\n // }\r\n return featureGroupName === dbName\r\n });\r\n if (item) {\r\n subPart = item;\r\n this.addSubPartProperties(subPart, featureGroup, qtCategory, false);\r\n break;\r\n }\r\n }\r\n if (!subPart) { // add it to Other group\r\n subPart = this.addNonVisualizerSubPart(featureGroup.groupName);\r\n this.addSubPartProperties(subPart, featureGroup, qtCategory, false);\r\n }\r\n subParts.push(subPart)\r\n });\r\n\r\n const self = this;\r\n\r\n const defaultSubParts = subParts.filter(subPart => {\r\n return subPart && subPart.part.featureGroupEnabled\r\n && (subPart.part.featureGroupVisible || (!subPart.part.featureGroupVisible && document.kvConfig.isBackend))\r\n && subPart.hasFeatures && subPart.hasFeatures[hasFeaturePropertyName]\r\n });\r\n\r\n return {\r\n id: qtCategory.id,\r\n name: qtCategory.name,\r\n order: qtCategory.order,\r\n bgImageUrl: qtCategory.bgImageUrl,\r\n defaultSubParts, // is used for center island replacing\r\n _subParts: defaultSubParts, // remove featureGroups that are !enabled && !visible (eye ball) && has features\r\n get subParts() {\r\n return this._subParts.filter((subPart) => {\r\n const restOptions = window.location.hash.includes(\"#/materials\") ? {forActiveQTCategory: qtCategory.name} : {};\r\n return self.hasNavItemsLength(subPart, {}, \"\", null, true, [], restOptions)\r\n });\r\n },\r\n set subParts(newSubParts) {\r\n this._subParts = newSubParts\r\n }\r\n }\r\n })\r\n .filter(qtCategory => qtCategory.defaultSubParts.length); // this filter is added in case someone added wrong featureGroup\r\n\r\n if (!this.qtCategoriesList.length) {\r\n this.qtCategoriesList = null;\r\n }\r\n\r\n if (this.qtCategoriesList) {\r\n // here we set for every subPart if it is available in the QuotingTool(exist in some qtCategory)\r\n for (let i = 0; i < parentParts.length; i++) {\r\n const parentPart = parentParts[i];\r\n const subPartItems = parentPart.subParts();\r\n subPartItems.forEach(subPartItem => {\r\n subPartItem.part.existInQtCategory = this.qtCategoriesList.some(qtCategory => {\r\n return qtCategory.subParts.some(qtCategorySubPartNavItem => {\r\n return qtCategorySubPartNavItem.part.partId === subPartItem.part.partId\r\n })\r\n });\r\n // console.log(\"subPartItem.part.existInQtCategory\", subPartItem.part.partId, subPartItem.part.existInQtCategory);\r\n });\r\n }\r\n }\r\n\r\n store.dispatch(setQtCategoriesLoaded(this.visualizerType))\r\n\r\n }\r\n\r\n /**\r\n * Returns the actual value of the filter by its group and id\r\n * @param groupId {number}\r\n * @param filterValueId {number}\r\n */\r\n static filterValue(groupId, filterValueId) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n if (!filterGroups.length)\r\n return null;\r\n const group = find(filterGroups, {id: groupId});\r\n if (!group)\r\n return null;\r\n const valueObj = find(group.values, {id: filterValueId});\r\n return valueObj ? valueObj.value.trim() : null;\r\n }\r\n\r\n /**\r\n * Returns the actual id of the filter by its group and name(filterValue)\r\n * @param groupId {number}\r\n * @param filterValue {string}\r\n */\r\n static getfilterValueIdByValue(groupId, filterValue) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n if (!filterGroups.length)\r\n return null;\r\n const group = find(filterGroups, {id: groupId});\r\n if (!group)\r\n return null;\r\n const valueObj = find(group.values, {value: filterValue});\r\n return valueObj ? valueObj.id : null;\r\n }\r\n\r\n /**\r\n * Returns the child subPart according to passed partId\r\n * @param partId {string}\r\n */\r\n getSubPartByPartId(partId) {\r\n const parentItems = this.getFeatures(true);\r\n for (let i = 0; i < parentItems.length; i++) {\r\n const subParts = parentItems[i].subParts();\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n return neededSubPart\r\n }\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * stores to localStorage object, for example {vanity_cabinet:12,shower_floor:74}\r\n */\r\n async updateLocalStorage() {\r\n if (IS_LIXIL_UI && !document.kvConfig.isWordpressPlugin) {\r\n return false // we are not restoring the state from the locale storage on lixil ui, so why do we keep it there\r\n }\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n const quotes = await updateCurrentQuote(null, undefined, true);\r\n if (!document.kvConfig.jobId) {\r\n try {\r\n window.localStorage.setItem(this.localStorageKey, JSON.stringify({\r\n ...quotes[activeQuoteIndex].data,\r\n quotes,\r\n activeQuoteIndex\r\n }));\r\n // console.log(\"updated LocalStorage\", window.localStorage);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n }\r\n\r\n setCartStateAndUserStateFromBvState(bvState, featuresToLoad = []) {\r\n const {isLixil, settings} = store.getState().fabricatorState;\r\n if (bvState.cartState && Array.isArray(bvState.cartState.cartItems)) {\r\n bvState.cartState.cartItems = this.getCartItemsFromBvState(bvState.cartState.cartItems, featuresToLoad, settings.allowVisualizerSwitching);\r\n if (Array.isArray(bvState.cartState.displayLogicCartItems) && bvState.cartState.displayLogicCartItems.length) {\r\n bvState.cartState.displayLogicCartItems = this.getCartItemsFromBvState(bvState.cartState.displayLogicCartItems, featuresToLoad, settings.allowVisualizerSwitching)\r\n .filter(ci => ci.cartFeature && ci.cartFeature.dbFeature && ci.cartFeature.dbFeature.displayLogic);\r\n }\r\n if (bvState.cartState.cartItems.length) {\r\n store.dispatch(restoreCart(bvState.cartState));\r\n }\r\n if (Array.isArray(bvState.cartState.allWizardsValues) && bvState.cartState.allWizardsValues.length) {\r\n store.dispatch(restoreAllWizardSelectedValues(bvState.cartState.allWizardsValues)); // after cart state\r\n }\r\n }\r\n if (bvState.userState && (!IS_LIXIL_UI || !isLixil || bvState.userState.userInfo.email)) { // if no email passed - we don't recover anything (guest checkout issue)\r\n store.dispatch({\r\n type: types.RESTORE_USER_STATE,\r\n payload: bvState.userState\r\n });\r\n }\r\n if (bvState.installations) {\r\n store.dispatch({\r\n type: types.SET_INST_LIST,\r\n payload: bvState.installations\r\n });\r\n }\r\n if (bvState.quotes) {\r\n store.dispatch(setQuotes(bvState.quotes));\r\n store.dispatch(setActiveQuoteIndex(bvState.activeQuoteIndex || 0));\r\n }\r\n if (!bvState.useSqftCartPopup && bvState.cartState && !bvState.cartState.cartItems.some(cartItem => cartItem.sqftId)) {\r\n store.dispatch(changeSqftFeaturesPopup({\r\n enabled: false\r\n }));\r\n }\r\n if (((typeof bvState.contractSigningValues === \"object\") && Object.keys(bvState.contractSigningValues).length)\r\n || ((typeof bvState.contractsValues === \"object\") && Object.keys(bvState.contractsValues).length)) {\r\n store.dispatch(restoreContractValues(\r\n bvState.contractSigningValues,\r\n bvState.savedInvoiceNumberOfPages,\r\n bvState.needToUpdateContract,\r\n bvState.contractsValues,\r\n ));\r\n }\r\n if (bvState.receiptSignature) {\r\n store.dispatch(setReceiptSignature(bvState.receiptSignature));\r\n }\r\n // if (bvState.useFabricatorCostPrices) { // per Alan, even if we saved with the cost price - we should see the retail prices on edit\r\n // store.dispatch(toggleUseFabricatorCostPrices(true));\r\n // }\r\n }\r\n\r\n resetEverything() {\r\n this.initialized = false;\r\n this.type = this.defaultType;\r\n const features = this.getFeatures();\r\n const currentState = store.getState();\r\n const {activeQuoteIndex} = currentState.quotesState;\r\n features.forEach(parentGroup => {\r\n if (parentGroup.relatedItems && parentGroup.relatedItems.length) {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n subPart.activeFeature = null;\r\n subPart.placeholderChanged = false;\r\n subPart.firstClick[activeQuoteIndex] = false;\r\n subPart.disabled = subPart.defaultDisabled;\r\n if (Array.isArray(subPart.activeFeatureParts) && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n });\r\n }\r\n parentGroup.activeFeature = null;\r\n parentGroup.placeholderChanged = false;\r\n if (!parentGroup.firstClick) {\r\n parentGroup.firstClick = {};\r\n }\r\n parentGroup.firstClick[activeQuoteIndex] = false;\r\n parentGroup.setDefault(this);\r\n });\r\n this.changeLayout(features);\r\n const bvPresets = currentState.bathroomVisualizerState.bvPresets\r\n const loadByTheDefault = bvPresets && bvPresets.find(preset => preset.loadByTheDefault);\r\n if (loadByTheDefault) {\r\n this.setActiveFeaturesFromObject(loadByTheDefault);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Returns all of the layers, based on current configuration\r\n * @param placeholdersNeeded {boolean}\r\n * @param forceReturn {boolean}\r\n */\r\n getLayers(placeholdersNeeded, forceReturn= false) {\r\n if (!this.initialized && !forceReturn) {\r\n return [];\r\n }\r\n\r\n const features = this.enabledParts(true);\r\n let res = [];\r\n\r\n // console.log('features', features);\r\n\r\n features.forEach(parentGroup => {\r\n const layers = parentGroup.setLayers(this, placeholdersNeeded); // setLayers first! then set z-index\r\n // console.log('layers', layers);\r\n\r\n parentGroup.setZIndex(this.zIndexes[this.getCurrentLayoutName()]); // set zIndexes\r\n\r\n if (layers && layers.length) {\r\n res = res.concat(layers);\r\n }\r\n });\r\n\r\n if (this.addCustomLayers) {\r\n res = this.addCustomLayers(res);\r\n }\r\n\r\n const {canvasDimensions} = store.getState().bathroomVisualizerState;\r\n\r\n const zSort = this.isNewLayout ? \"desc\" : \"asc\";\r\n\r\n res = orderBy(res, ['zIndex'], [zSort]).map(layer => {\r\n // console.log('layer', layer);\r\n let layerToReturn = {\r\n zIndex: layer.zIndex,\r\n image: layer.bgImg(!!layer.cropCoords),\r\n coords: layer.coords || null,\r\n partId: layer.partId || \"\",\r\n layerPosition: layer.layerPosition || \"\",\r\n cropCoords: layer.cropCoords || null,\r\n }\r\n if (this.isNewLayout && layer.zIndex < 50000) {\r\n const zIndexesObject = getCurrentZIndexes(this.visualizerType);\r\n layerToReturn.layerDimensions = zIndexesObject.getLayerDimensions(layer, this.getCurrentLayoutName(), canvasDimensions)\r\n }\r\n return layerToReturn\r\n });\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Returns {array} activeFeatures objects\r\n */\r\n getActiveFeatures(returnAllFeatures, withLayerPositions = false, withDisabled = false) {\r\n let activeFeatures = [];\r\n const receiveAllFeatures = returnAllFeatures || !!(this.qtCategories && this.qtCategories.length);\r\n this.getFeatures(receiveAllFeatures).forEach((parentGroup) => {\r\n // let subParts = parentGroup.subParts().filter(subPart => !subPart.part.disabled); // we need to store every item!\r\n\r\n if (parentGroup.menuType === 0) { // old logic for BV visualizer\r\n if (!parentGroup.disabled && parentGroup.placeholderChanged && parentGroup.activeFeature) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: parentGroup.partId,\r\n quantity: 0,\r\n cartFeature: parentGroup.activeFeature,\r\n featureGroup: parentGroup\r\n });\r\n }\r\n }\r\n\r\n let subItems = parentGroup.relatedItems;\r\n const excluded = [\"fridge_shadow\"];\r\n if (!returnAllFeatures) {\r\n subItems = subItems.filter(subItem => {\r\n if (document.kvConfig.visualizerType === \"Bathroom\" && subItem.partId === \"shower_body\" && subItem.features.length) { // shower_body should always be!\r\n return true\r\n }\r\n return !excluded.includes(subItem.partId) && subItem.activeFeature && subItem.activeFeature.partName\r\n && !subItem.activeFeature.partName.includes(\"laceholder\")\r\n });\r\n }\r\n subItems.forEach((subItem) => {\r\n if (withLayerPositions && subItem.layerPositions) {\r\n Object.keys(subItem.layerPositions).forEach(position => {\r\n if (subItem.layerPositions[position] || withDisabled) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: subItem.partId,\r\n quantity: 0,\r\n cartFeature: subItem.layerPositions[position] || null,\r\n featureGroup: subItem,\r\n layerPosition: position,\r\n });\r\n }\r\n })\r\n } else if (subItem.activeFeature && (withDisabled || !subItem.disabled)) {\r\n activeFeatures.push({\r\n selectionGroup: parentGroup.partName,\r\n partId: subItem.partId,\r\n quantity: 0,\r\n cartFeature: subItem.activeFeature || null,\r\n featureGroup: subItem\r\n });\r\n }\r\n })\r\n });\r\n // console.log('activeFeatures', activeFeatures);\r\n const qtCategories = this.qtCategories;\r\n if (!returnAllFeatures && qtCategories && qtCategories.length) {\r\n const subPartsObject = {};\r\n activeFeatures = activeFeatures.filter(activeFeature => {\r\n return qtCategories.some((qtCategory, qtCategoryIndex) => {\r\n if (!subPartsObject[qtCategoryIndex]) {\r\n subPartsObject[qtCategoryIndex] = qtCategory.subParts; // caching here, cause subParts requires to call getNavItems\r\n }\r\n return subPartsObject[qtCategoryIndex].some(subPart => {\r\n return subPart.part.partId === activeFeature.partId\r\n })\r\n })\r\n })\r\n }\r\n return activeFeatures\r\n }\r\n\r\n getActiveNames() {\r\n const allFeatures = this.getActiveFeatures(true);\r\n const excludedGroups = [\"Background\", \"Globals\", \"Other\", \"Others\"];\r\n const resultFeatures = allFeatures\r\n .filter(featureObject => {\r\n return featureObject.cartFeature && excludedGroups.every(excludedGroupName => featureObject.selectionGroup !== excludedGroupName)\r\n })\r\n .map(featureObject => {\r\n return {\r\n featureId: featureObject.cartFeature.dbFeature.id,\r\n parentName: featureObject.selectionGroup,\r\n groupName: featureObject.cartFeature.dbFeature.groupName,\r\n featureName: featureObject.cartFeature.getFeatureName()\r\n }\r\n })\r\n // console.log(\"resultFeatures\", resultFeatures);\r\n return resultFeatures\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n\r\n console.log(\"bvState===>\", bvState);\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // parentGroup.firstClick = !!parentGroup.activeFeature;\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n parentGroup.disabled = true\r\n }\r\n } else {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (!bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = false\r\n }\r\n if (useNames) {\r\n const matchingFeature = subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n if (subPart.layerPositions && subPart.activeFeature) {\r\n // subPart.setLayerPositions()\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n const partIdPosition = partId + \"_\" + position;\r\n if (bvState[partIdPosition]) {\r\n subPart.layerPositions[position] = useNames\r\n ? subPart.getMatchingPositionFeature(position)\r\n : subPart.getFeatureById(bvState[partIdPosition], true)\r\n }\r\n })\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n if (subPart.selectedFeaturesHistory) {\r\n subPart.selectedFeaturesHistory.push(subPart.activeFeature.partName)\r\n }\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n })\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n console.log('restoring bvState from url...', bvState);\r\n return bvState\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @param returnAllFeatures {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false, returnAllFeatures = false) {\r\n bvState.layout_type = this.type;\r\n bvState.scene = this.scene;\r\n if (this.isNewLayout) {\r\n bvState.bvStateVersion = 2;\r\n }\r\n this.getFeatures(returnAllFeatures).forEach((parentGroup) => {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (subPart.layerPositions[position]) {\r\n bvState[subPart.partId + \"_\" + position] = useNames\r\n ? subPart.layerPositions[position].getSplittedFeatureName()\r\n : subPart.layerPositions[position].dbFeature.id\r\n }\r\n })\r\n }\r\n // this is used for adding these features to array of needed features form the backend on preset apply\r\n if (subPart.activeFeatureParts && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts.forEach((feature, featureIndex) => {\r\n bvState[subPart.partId + \"_part_\" + featureIndex] = useNames\r\n ? feature.getSplittedFeatureName()\r\n : feature.dbFeature.id\r\n })\r\n }\r\n if (subPart.partId === \"backsplash\" && subPart.getCurrentActiveFeatureType) {\r\n bvState[\"backsplash_type\"] = subPart.getCurrentActiveFeatureType();\r\n }\r\n })\r\n })\r\n // console.log('bvState', bvState);\r\n return bvState\r\n }\r\n\r\n getDisabledFeatures() {\r\n const disabledPartIds = [];\r\n this.getFeatures().forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n if (parentGroup.disabled) {\r\n if (document.kvConfig.visualizerType === \"Bathroom\" && parentGroup.partName !== \"Toilet\") {\r\n disabledPartIds.push(parentGroup.partId);\r\n } else {\r\n disabledPartIds.push(parentGroup.partId);\r\n }\r\n }\r\n } else {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n if (subPart.disabled) {\r\n disabledPartIds.push(subPart.partId);\r\n } else if (subPart.layerPositions) {\r\n Object.keys(subPart.layerPositions).forEach(position => {\r\n if (!subPart.layerPositions[position]) {\r\n disabledPartIds.push(subPart.partId + \"_\" + position);\r\n }\r\n })\r\n }\r\n })\r\n }\r\n });\r\n // console.log('disabledPartIds', disabledPartIds);\r\n return disabledPartIds\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @returns featureGroup {object}\r\n */\r\n getFeatureGroupByPartId(partId) {\r\n if (!partId) {\r\n return null\r\n }\r\n let featureGroup = null;\r\n this.getFeatures(true).forEach(parentGroup => {\r\n if (featureGroup) {\r\n return\r\n }\r\n let relatedItems = parentGroup.relatedItems;\r\n relatedItems.forEach((relatedItem) => {\r\n if (featureGroup) {\r\n return\r\n }\r\n if (partId === relatedItem.partId) {\r\n featureGroup = relatedItem\r\n }\r\n })\r\n });\r\n return featureGroup\r\n }\r\n\r\n /**\r\n * @param groupName {string}\r\n * @returns featureGroup {object}\r\n */\r\n getFeatureGroupByGroupName(groupName) {\r\n if (!groupName) {\r\n return null\r\n }\r\n const strippedGroupName = replaceIncorrectSymbols(groupName || \"\").toLowerCase();\r\n let featureGroup = null;\r\n this.getFeatures(true).forEach(parentGroup => {\r\n if (featureGroup) {\r\n return\r\n }\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n const strippedCurrentName = replaceIncorrectSymbols(relatedItem.dbName || relatedItem.partName || \"\").toLowerCase();\r\n if (strippedGroupName === strippedCurrentName\r\n || (strippedGroupName === \"vanity\" && strippedCurrentName === \"vanitie\")\r\n || (strippedGroupName === \"corner shelf\" && relatedItem.dbName === \"Small Corner Shelf\" && relatedItem.partName === \"Corner Shelf\")\r\n || (strippedGroupName === \"shower pan\"\r\n && ((relatedItem.dbName === \"Shower Pans\" && relatedItem.partName === \"Shower Pan\") || relatedItem.partName === \"ShowerPan\"))\r\n ) {\r\n featureGroup = relatedItem\r\n }\r\n })\r\n });\r\n return featureGroup\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param inGeneral {boolean} // this prevents asking .subParts with asks navigation items which is redundant calculations\r\n * @returns {boolean}\r\n */\r\n partIdExistInQtCategory(partId, inGeneral = false) {\r\n if ((getCurrentRoomType(this) === LOOK_ROOM_TYPES.as) && partId === \"shower_door\" && (this.type === 3 || this.type === 6)) {\r\n return false\r\n }\r\n if (inGeneral) {\r\n return this.qtCategoriesList && this.qtCategoriesList.some(qtCat => {\r\n return qtCat.defaultSubParts && qtCat.defaultSubParts.some(sPart => sPart.part && sPart.part.partId === partId)\r\n })\r\n }\r\n return this.qtCategories && this.qtCategories.some(qtCat => {\r\n return qtCat.subParts && qtCat.subParts.some(sPart => sPart.part && sPart.part.partId === partId)\r\n })\r\n }\r\n\r\n /**\r\n * @param partId {string}\r\n * @param qtCategoryToSearch {string | null}\r\n * @param searchPartOfId {boolean | null}\r\n * @returns designNavigationItems {object}\r\n */\r\n getSubPartFromQtCategories(partId, qtCategoryToSearch = null, searchPartOfId = false) {\r\n\r\n const {wizardIsActive, wizardActiveItem, wizardSelectedValues} = store.getState().wizardState;\r\n if (wizardIsActive && wizardActiveItem) {\r\n const wizardSteps = getAvailableSteps(wizardActiveItem, wizardSelectedValues, true);\r\n return getFeatureGroupFromWizardSteps(wizardSteps, partId);\r\n }\r\n\r\n let countertopExist = null;\r\n let qtCategories = this.qtCategories;\r\n if (qtCategories) {\r\n if (qtCategoryToSearch) {\r\n qtCategories = qtCategories.filter(qtCategory => {\r\n return qtCategory.name.trim().toLowerCase() === qtCategoryToSearch.trim().toLowerCase()\r\n })\r\n //search in all qtCategories if wasn't found by qtCategoryToSearch\r\n if (qtCategories.length === 0) {\r\n qtCategories = this.qtCategories\r\n }\r\n }\r\n qtCategories.forEach(qtCategory => {\r\n if (!countertopExist) {\r\n const subParts = qtCategory.subParts;\r\n let neededSubPart;\r\n if (searchPartOfId) {\r\n neededSubPart = subParts.find(subPart => subPart.part.partId.includes(partId));\r\n } else {\r\n neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n }\r\n if (neededSubPart) {\r\n countertopExist = neededSubPart;\r\n }\r\n }\r\n });\r\n }\r\n return countertopExist\r\n }\r\n\r\n}\r\n\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport CabinetShapes from \"./cabinetShapes\";\r\nimport store from \"../../../../../../store\";\r\nimport { setSQFTContextMenuV2 } from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport workspace from \"../workspace\";\r\nimport { renderMeasurementsAroundSnappedShapes } from \"../slab/sqftSlabDraw\";\r\nimport CabinetShapesLayout from \"./cabinetShapesLayout\";\r\nimport { getMousePositionOnField } from \"../../../../helpers/sqftHelper\";\r\nimport { SHAPE_PART_ID } from \"../../../../constants\";\r\nimport { getCurrentLayout } from \"../../../../../appLayout\";\r\n\r\nclass CabinetWorkspace {\r\n constructor() {\r\n this.eventManager = EventManager;\r\n this.objectName = { name: 'CabinetWorkspace' };\r\n this.state = {};\r\n this.cabinetShapes = new CabinetShapes();\r\n this.cabinetShapesLayout = new CabinetShapesLayout();\r\n this.measurementPoints = [];\r\n this.__crownMoldingParams = {\r\n distance: 10\r\n };\r\n\r\n this.initCabinetEvents();\r\n }\r\n\r\n initCabinetEvents() {\r\n EventManager.addEvent(EventManager.events.CONTEXTMENU, this.onRightClick, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.DROP, this.handleDrop, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.DRAG_OVER, this.handleDrag, this, EventManager.priorities.OVERLAY);\r\n EventManager.addEvent(EventManager.events.RENDER, this.render, this, EventManager.priorities.OVERLAY);\r\n }\r\n\r\n render(ctx) {\r\n renderMeasurementsAroundSnappedShapes(ctx);\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n onRightClick(mousePos, e) {\r\n store.dispatch(setSQFTContextMenuV2({\r\n isOpened: true,\r\n title: workspace.intl.formatMessage({ id: \"sqft.contextmenu.properties.title\" }),\r\n menuItems: [\r\n {\r\n title: 'Change Cabinet Style',\r\n callback: new Function()\r\n },\r\n {\r\n title: 'Generate Countertop',\r\n callback: new Function()\r\n },\r\n {\r\n title: 'Generate Backsplash',\r\n callback: new Function()\r\n },\r\n ],\r\n position: { left: mousePos.x, top: mousePos.y }\r\n }));\r\n document.addEventListener('click', this.closeContextMenu);\r\n void e;\r\n }\r\n\r\n closeContextMenu(e) {\r\n const navClick = e.target.closest('[class*=\"contextmenu2\"]');\r\n if (!navClick && !window.touchMove) {\r\n store.dispatch(setSQFTContextMenuV2({\r\n isOpened: false,\r\n title: '',\r\n menuItems: [],\r\n position: {}\r\n }));\r\n }\r\n }\r\n\r\n handleDrop(mousePos, e) {\r\n e.preventDefault();\r\n const featureId = JSON.parse(e.dataTransfer.getData('featureId'));\r\n const parentFeatureId = JSON.parse(e.dataTransfer.getData('parentFeatureId'));\r\n const partId = JSON.parse(e.dataTransfer.getData('partId'));\r\n\r\n if ([SHAPE_PART_ID.upper_cabinet_boxes, SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.tall_cabinet_boxes,\r\n SHAPE_PART_ID.top_cabinet, SHAPE_PART_ID.bottom_cabinet, SHAPE_PART_ID.tall_cabinet\r\n ].includes(partId)) {\r\n\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(featureId, true);\r\n const parentFeature = layout.getFeatureById(parentFeatureId, true);\r\n let shapeId = null;\r\n const mousePosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n shapeId = this.cabinetShapes.addShape(feature, parentFeature, mousePosOnField);\r\n\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.shapeAutoShuffle.handlePlaceShapeOnTheLine();\r\n }\r\n }\r\n\r\n handleDrag(mousePos, e) {\r\n e.preventDefault();\r\n // update hovered lines for rendering auto shuffle possibilities\r\n const hoveredLines = workspace.getHoveredLines();\r\n void hoveredLines;\r\n }\r\n}\r\n\r\nexport default new CabinetWorkspace();\r\n","import {baseNewImagesPath} from \"../../assets\";\r\n\r\nexport const applianceThumbnail = `${baseNewImagesPath}images/kv-icons/kv-filter-icons-stove.svg`;\r\nexport const centerIslandThumbnail = `${baseNewImagesPath}images/kv-icons/center_island_countertop.svg`;\r\nexport const countertopGroupThumbnail = `${baseNewImagesPath}images/kv-icons/vanity-countertop.svg`;\r\nexport const wallsThumbnail = `${baseNewImagesPath}images/bv_icons_new/Icons_Wall.svg`;\r\n\r\n/*layouts*/\r\nexport const LayoutThumbnails = {\r\n Layout1: `${baseNewImagesPath}images/kv-layout-thumbnails/SI.png`,\r\n Layout2: `${baseNewImagesPath}images/kv-layout-thumbnails/SNI.png`,\r\n Layout3: \"Layout3\",\r\n Layout4: \"Layout4\",\r\n Layout5: \"Layout5\",\r\n Layout6: \"Layout6\",\r\n Layout7: \"Layout7\",\r\n Layout8: \"Layout8\",\r\n Layout9: \"Layout9\",\r\n Layout10: \"Layout10\",\r\n Layout11: \"Layout11\",\r\n Layout12: \"Layout12\",\r\n Layout13: \"Layout13\",\r\n Layout14: \"Layout14\",\r\n Layout15: \"Layout15\",\r\n Layout16: \"Layout16\",\r\n Layout17: \"Layout17\",\r\n Layout18: \"Layout18\",\r\n};\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.partId);\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerTubComboParent = this.getParent().getParent();\r\n const currentBottomTub = showerTubComboParent.bottomTub;\r\n\r\n const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n (!showerTubComboParent.showerTubComboIsActive || (\r\n (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n ));\r\n\r\n if (showNotCompatibleViewConditions) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerSize = this.getParent().showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().bottomTub !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions, iIncludes} from \"../../../../../misc/utils\";\r\n\r\nexport default class ExternallWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.visible = true;\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.selectedByUser = false;\r\n this.allWallsApplied = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const featuresToDisplay = super.getFeaturesBySearchText(this.getAvailableFeatures(filters), searchText);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getAvailableFeatures(filters) {\r\n const conditions = this.getArrayOfConditions();\r\n // console.log('condtitions', condtitions);\r\n const filteredAvailableFeatures = super.getFilteredFeaturesByFilters(filters);\r\n return super.navigationSubItemsWithFilterMultipleConditions(conditions, filteredAvailableFeatures);\r\n }\r\n\r\n setLayers(layout) {\r\n // this.wallName === \"ExtrusionWallLeft\" && console.log('this.getArrayOfConditions()', this.getArrayOfConditions());\r\n const shower = layout.parts[Shower.id];\r\n const wallParent = this.getParent();\r\n const conditions = this.getArrayOfConditions();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (this.activeFeature) {\r\n if (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature) {\r\n super.setLayers(layout)\r\n } else if (shower.isComplete()) {\r\n if (this.wallName === \"ExtrusionWallLeft\" || !shower.showerBody.activeFeature.partName.includes(\"Complete\")) {\r\n super.hideLayers();\r\n return;\r\n } else if (this.activeFeature && !this.activeFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n this.setDefault(layout) // set new default layer\r\n }\r\n } else if (!this.activeFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n this.setDefault(layout) // set new default layer\r\n }\r\n if (this.wallName === \"ExtrusionWallLeft\") {\r\n const activeShower = wallParent.getActiveShowerGroup();\r\n const showerDimensions = activeShower.showerDimensions();\r\n if (showerDimensions === \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (!shower.isComplete()) {\r\n this.setShadowFeature();\r\n }\r\n }\r\n }\r\n if (this.shadowFeature) {\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.shadowFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (!this.shadowFeature.matchesMetaForArrayOfConditions(this.getShadowConditions()) || !matchesByBindings) {\r\n this.setShadowFeature();\r\n }\r\n }\r\n super.setLayers(layout)\r\n }\r\n\r\n setDefault(layout) {\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const shower = layout.parts[Shower.id];\r\n if (!shower) {\r\n console.log('Ex Wall - no Shower');\r\n return null;\r\n }\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n if ((shower.isComplete() && this.wallName === \"ExtrusionWallLeft\")\r\n || !shower.showerBody || !shower.showerBody.activeFeature\r\n || (shower.isComplete() && !shower.showerBody.activeFeature.partName.includes(\"Complete\"))) {\r\n return null;\r\n }\r\n }\r\n const filteredFeatures = this.getAvailableFeatures();\r\n // console.log('Ex Wall - setDefault', filteredFeatures);\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, null, true)) {\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Rafter';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Sahara Autumn Porcelain Tile';\r\n break;\r\n }\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, hardCodedName);\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, \" - placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const shower = zIndexes.Shower;\r\n const wallParent = this.getParent();\r\n\r\n if (zIndexes && this.wallName === \"ExtrusionWallLeft\") {\r\n // console.warn(`${this.wallName}: no wall, because we have a complete shower.`);\r\n if (wallParent.layout.parts[Shower.id].isComplete()) {\r\n return false;\r\n } else if (this.activeFeature) {\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n const zIndex = showerDimensions === \"Half\"\r\n ? shower.Custom60in[this.wallName + \"HalfWall\"]\r\n : shower.Custom60in[this.wallName];\r\n const zIndexShadow = showerDimensions === \"Half\"\r\n ? shower.Custom60in[this.wallName + \"ShadowHalfWall\"]\r\n : shower.Custom60in[this.wallName + \"Shadow\"];\r\n this.activeFeature.layer.zIndex = zIndex;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndexShadow;\r\n }\r\n }\r\n } else {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = shower.Custom60in[this.wallName];\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = shower.Custom60in[this.wallName];\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = shower.Custom60in[this.wallName + \"Shadow\"];\r\n }\r\n }\r\n }\r\n\r\n clickFromAllWalls(ignoreLocked) {\r\n if (!this.getParent().selectedByUser) {\r\n this.handleClick(ignoreLocked, 'all_walls')\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom) {\r\n const parent = this.getParent();\r\n if (!parent.getParent().allWallsApplied && clickFrom !== 'all_walls') {\r\n parent.selectedByUser = true;\r\n }\r\n if (clickFrom !== 'context' && clickFrom !== 'all_walls') {\r\n const wallParent = this.getParent().getParent();\r\n const ponyWallFeature = wallParent.ponyWall && wallParent.ponyWall.features.find(feature => {\r\n return feature.partName === this.partName\r\n });\r\n if (ponyWallFeature) {\r\n ponyWallFeature.handleClick(ignoreLocked, 'context');\r\n }\r\n }\r\n super.handleClick(ignoreLocked);\r\n\r\n // if (parent.wallName === \"ExtrusionWallLeft\") {\r\n // const wallB = parent.getParent().layout.parts[\"Walls\"].part[\"wallB\"];\r\n // if (wallB.placeholderChanged && wallB.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // } else {\r\n // const wallC = parent.getParent().layout.parts[\"Walls\"].part[\"wallC\"];\r\n // if (wallC.placeholderChanged && wallC.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // }\r\n }\r\n\r\n // unCheckAllWalls(clickFrom) {\r\n // if (clickFrom === 'showerWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // const tempSelectedByUser = this.selectedByUser;\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // this.selectedByUser = tempSelectedByUser;\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n}\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n center_island_faucet: 3200,\r\n oven: 4900,\r\n dishwasher: 5000,\r\n fridge: 5100,\r\n hood: 5200,\r\n microwave: 5300,\r\n range: 5400,\r\n decor: 11111,\r\n sink: 18000,\r\n faucet: 19000,\r\n center_island_countertop: 59000,\r\n center_island_cabinet: 60000,\r\n countertop: 61000,\r\n bottom_cabinet: 62000,\r\n top_cabinet: 63000,\r\n backsplash: 64000,\r\n center_wall: 65000,\r\n front_wall: 66000,\r\n left_wall: 67000,\r\n right_wall: 68000,\r\n kitchen_floor: 69000,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n // const isWallMobile = window.innerWidth <= 1024 && layer.partId.includes(\"wall\");\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n // if (!isWallMobile) { // make layer bigger (to add some semi-transparent pixels)\r\n // x1 = x1 - 100;\r\n // x2 = x2 + 100;\r\n // y1 = y1 - 100;\r\n // y2 = y2 + 100;\r\n // }\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (currentLayout, layer) => {\r\n const layout = getCurrentLayout();\r\n switch (layer.partId) {\r\n case \"sink\":\r\n case \"faucet\":\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n return {\r\n contextMenuPartId: \"countertop_group_custom\"\r\n };\r\n case \"center_island_sink\":\r\n case \"center_island_faucet\":\r\n case \"center_island_edge\":\r\n case \"center_island_countertop\":\r\n case \"center_island_stovetop\":\r\n return {\r\n contextMenuPartId: \"center_island_custom\"\r\n };\r\n default: {\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (!featureGroup) {\r\n return \"\"\r\n }\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class TubCommon extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n }\r\n\r\n disabledClick() {}\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setActiveTub(this.partId);\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom, clickLogic = null) {\r\n super.handleClick(ignoreLocked);\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerTubComboParent = this.getParent().getParent();\r\n const currentBottomTub = showerTubComboParent.bottomTub;\r\n\r\n const showNotCompatibleViewConditions = !window.location.hash.includes(\"visualizer\") &&\r\n (!showerTubComboParent.showerTubComboIsActive || (\r\n (this.partId === \"walk_in_tub\" && currentBottomTub !== \"walk_in_tub\") || (this.partId !== \"walk_in_tub\" && currentBottomTub === \"walk_in_tub\")\r\n ));\r\n\r\n if (showNotCompatibleViewConditions && !(clickLogic && clickLogic.skipNotCompatible)) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().bottomTub !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (layer) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (featureGroup) {\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n return \"\"\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {getCurrencyPosition, getCurrencySign} from \"../misc/helpers\";\r\nimport {MEASURE_UNITS} from \"../bvcomponents/sqft/constants\";\r\nimport {getCommonVisualizerType, IS_LIXIL_SERVERS} from \"../config\";\r\nimport * as fabricatorHardcode from \"../misc/fabricatorHardcode\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\n\r\nconst checkMeasureUnit = (mUnit) => {\r\n return (mUnit === \"metric\" || mUnit === MEASURE_UNITS.Metric) ? MEASURE_UNITS.Metric : MEASURE_UNITS.Imperial\r\n};\r\n\r\nconst initialState = {\r\n received: false,\r\n fabricatorSubscriptions: [],\r\n settings: { // current active\r\n currency: \"USD\",\r\n currencySign: \"$\",\r\n currencyPosition: \"left\",\r\n measureUnit: null, // Imperial(default) || Metric\r\n useCategorySwitching: false,\r\n useShipperHQ: false,\r\n useFabricatorCostPrices: false,\r\n hideYourListButton: false,\r\n useMarkUpFeaturesRequests: false,\r\n },\r\n kitchenSettings: {},\r\n bathroomSettings: {},\r\n fabricatorTaxes: null,\r\n ...fabricatorHardcode.fabricatorsHardcodeObject,\r\n hidePricesFromUser: Array.isArray(document.dashboardUserPermissions) && document.dashboardUserPermissions.some(permission => {\r\n return permission.ProtectedAreaId === 9000 && permission.AccessRights === 0\r\n }),\r\n wasCreatedFromFabricator: \"\",\r\n useIMEAPI: false,\r\n useIMEAPI_PartnerId: 0,\r\n receiptSettings: {}, // \"{signIsRequired, showThumbnailsAndDescriptions, hideSignatureField, doNotFillNameAndDate}\"\r\n};\r\n\r\nconst getDashboardModeSettings = (settings) => {\r\n const dashboardProps = [\"twoFA\", \"leadCapture\", \"leadCaptureProduct\", \"clickLeadCapture\", \"enableQuote\",\r\n \"enableScheduling\", \"leadCaptureShoppingCart\", \"leadCaptureOnQuote\", \"clickLeadCaptureOnQuote\",\r\n \"showVisualizerTutorial\", \"showSqftTutorial\", \"showSlabMode\", \"useShipping\", \"sureTax\", \"hideSku\", \"showSalePrices\"];\r\n dashboardProps.forEach(property => {\r\n if (settings && settings[property] && !settings[property + \"Dashboard\"] && document.kvConfig.isBackend) {\r\n settings[property] = false // disable property in the dashboard mode if it is disabled\r\n } else if (settings && !settings[property] && settings[property + \"Dashboard\"] && document.kvConfig.isBackend) {\r\n settings[property] = true // enable simple property in dashboard mode (to simplify code)\r\n }\r\n })\r\n return settings\r\n}\r\n\r\nexport const parseFabricatorSettingsOLD = (payload) => { //todo remove this after we push staging backend\r\n const actionPayload = cloneDeep(payload); // this is needed to other reducers! Object assign doesn't deeply cloning\r\n let bathroomSettings = actionPayload.settings || {};\r\n let kitchenSettings = actionPayload.settings || {};\r\n let fireplaceSettings = actionPayload.settings || {};\r\n let laundryRoomSettings = actionPayload.settings || {};\r\n if (kitchenSettings.kitchenToggles) {\r\n Object.keys(kitchenSettings.kitchenToggles).forEach((oldKey) => {\r\n const ignoreProperties = [\"showSqftTutorial\", \"showSlabMode\"];\r\n if (!ignoreProperties.some(prop => oldKey.includes(prop))) {\r\n const newKey = oldKey.split(\"Kitchen\")[0]\r\n delete Object.assign(kitchenSettings.kitchenToggles, {[newKey]: kitchenSettings.kitchenToggles[oldKey] })[oldKey];\r\n }\r\n })\r\n kitchenSettings.kitchenToggles.checkout = kitchenSettings.kitchenToggles.checkout || kitchenSettings.kitchenToggles.checkOut; // fix for incorrect property name\r\n kitchenSettings = Object.assign({}, actionPayload.settings, kitchenSettings.kitchenToggles);\r\n delete kitchenSettings.checkOut; // we don't need to keep it not to use it in future\r\n delete kitchenSettings.kitchenToggles; // we don't need to keep it not to use it in future\r\n kitchenSettings = getDashboardModeSettings(kitchenSettings);\r\n }\r\n bathroomSettings = getDashboardModeSettings(bathroomSettings);\r\n delete bathroomSettings.kitchenToggles; // we don't need to keep it not to use it in future\r\n return {\r\n settings: (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\") ? kitchenSettings : bathroomSettings, // current active\r\n kitchenSettings,\r\n bathroomSettings,\r\n fireplaceSettings,\r\n laundryRoomSettings,\r\n }\r\n}\r\n\r\nconst generalProperties = [\"deposit\", \"depositDisclaimer\", \"depositMessage\", \"docuSignAuth\", \"enableDeposit\",\r\n \"enableDisclaimer\", \"enableDocuSign\", \"hasPaymentGateway\", \"language\", \"masterContractFields\", \"masterContractFullUrl\",\r\n \"measurement\", \"useContractSigning\"];\r\n\r\nexport const parseFabricatorSettings = (payload) => {\r\n if (IS_LIXIL_SERVERS) {\r\n //todo remove this after we push backend on Lixil\r\n return parseFabricatorSettingsOLD(payload);\r\n }\r\n let settingsObject = {\r\n settings: {},\r\n kitchenSettings: {},\r\n bathroomSettings: {},\r\n fireplaceSettings: {},\r\n laundryRoomSettings: {},\r\n };\r\n if (!payload.settings.toolSettings) {\r\n return settingsObject\r\n }\r\n const actionPayload = cloneDeep(payload); // this is needed to other reducers! Object assign doesn't deeply cloning\r\n Object.keys(actionPayload.settings.toolSettings).forEach(visType => {\r\n settingsObject[visType + \"Settings\"] = Object.assign(\r\n {},\r\n getDashboardModeSettings(actionPayload.settings.toolSettings[visType]),\r\n {\r\n checkout: actionPayload.settings.toolSettings[visType].checkout ||actionPayload.settings.toolSettings[visType].checkOut // fix for incorrect property name\r\n });\r\n delete settingsObject[visType + \"Settings\"].checkOut; // we don't need to keep it not to use it in future\r\n generalProperties.forEach(property => { // here we set the same property into each room fabricator settings\r\n // to prevent all components changing to take data from fabricatorData instead of fabricatorData.settings\r\n settingsObject[visType + \"Settings\"][property] = actionPayload.settings[property];\r\n })\r\n });\r\n const currentSettingsProperty = getCommonVisualizerType() + \"Settings\";\r\n settingsObject.settings = settingsObject[currentSettingsProperty]; // current settings\r\n return settingsObject\r\n}\r\n\r\nconst getFinalSettings = (settings, stateSettings, fabricatorResponse) => {\r\n\r\n if (IS_PRODUCT_JOURNEY && window.location.href.includes(\"colonial_\")) {\r\n settings[\"leadCaptureShoppingCart\"] = false;\r\n settings[\"enableQuote\"] = false;\r\n }\r\n\r\n const isCaesarStone = fabricatorHardcode.hardCodeIsCaesarStone();\r\n const isDeStefano = fabricatorHardcode.hardCodeIsDeStefano();\r\n return Object.assign({}, stateSettings, {\r\n ...settings,\r\n leadCapture: IS_PRODUCT_JOURNEY ? settings.leadCaptureProduct : settings.leadCapture,\r\n measureUnit: checkMeasureUnit(settings.measurement),\r\n currencySign: getCurrencySign(settings.currency, (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings : settings),\r\n currencyPosition: getCurrencyPosition(settings.currency),\r\n priceWorksheetEnabled: true,\r\n enableSharing: isCaesarStone ? false : settings.enableSharing,\r\n showLanguageSelect: isCaesarStone || isDeStefano ? false : settings.showLanguageSelect,\r\n useCategorySwitching: true,\r\n allowVisualizerSwitching: fabricatorResponse.useVisualizerSwitching || window.location.href.includes(\"allowRooms\"),\r\n callForPricing: settings.callForPricing || fabricatorHardcode.hardCodeIsAgent() || fabricatorHardcode.hardCodeIsTorrco(),\r\n enableASInventorySync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableASInventorySync : false,\r\n enableASProductSync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableASProductSync : false,\r\n enableGInventorySync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableGInventorySync : false,\r\n enableGProductSync: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.enableGProductSync : false,\r\n useTrumbleApi: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useTrumbleApi : false,\r\n useShipperHQ: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useShipperHQ : false,\r\n useDifferentCurrencies: (fabricatorResponse && fabricatorResponse.settings) ? fabricatorResponse.settings.useDifferentCurrencies : false,\r\n hideYourListButton: fabricatorResponse ? fabricatorResponse.hideYourListButton : false,\r\n useMarkUpFeaturesRequests: fabricatorResponse ? fabricatorResponse.useMarkUpFeaturesRequests : false,\r\n useFabricatorCostPrices: false,\r\n });\r\n}\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_FABRICATOR_DATA: {\r\n const {settings, kitchenSettings, bathroomSettings, fireplaceSettings, laundryRoomSettings} = parseFabricatorSettings(action.payload);\r\n document.kvConfig.visualizerOnly = settings.visualizerOnly;\r\n if (document.kvConfig.isBackend && document.kvConfig.visualizerOnly) {\r\n document.kvConfig.visualizerOnly = !(settings.checkout && settings.showPricing) // if they are enabled - enable all pages\r\n }\r\n const finalSettings = getFinalSettings(settings, state.settings, action.payload);\r\n const finalKvSettings = getFinalSettings(kitchenSettings, state.settings, action.payload);\r\n const finalBvSettings = getFinalSettings(bathroomSettings, state.settings, action.payload);\r\n const finalFPSettings = getFinalSettings(fireplaceSettings, state.settings, action.payload);\r\n const finalLRSettings = getFinalSettings(laundryRoomSettings, state.settings, action.payload);\r\n\r\n console.log(\"finalSettings: \", finalSettings);\r\n // console.log(\"finalKvSettings\", finalKvSettings);\r\n // console.log(\"finalBvSettings\", finalBvSettings);\r\n return Object.assign({}, state, {\r\n received: true,\r\n ...action.payload,\r\n city: action.payload.city ? action.payload.city.trim() : \"\",\r\n ...fabricatorHardcode.fabricatorsHardcodeObject,\r\n settings: finalSettings,\r\n kitchenSettings: finalKvSettings,\r\n bathroomSettings: finalBvSettings,\r\n fireplaceSettings: finalFPSettings,\r\n laundryRoomSettings: finalLRSettings,\r\n wasCreatedFromFabricator: action.payload.wasCreatedFromFabricator,\r\n useIMEAPI: action.payload.useIMEAPI,\r\n useIMEAPI_PartnerId: action.payload.useIMEAPI_PartnerId,\r\n receiptSettings: action.payload.receiptSettings ? JSON.parse(action.payload.receiptSettings) : {\r\n showThumbnailsAndDescriptions: fabricatorHardcode.hardCodeIsFabricator(\"customfitbath\", 259554)\r\n || fabricatorHardcode.hardCodeIsAmericanStandard()\r\n },\r\n });\r\n }\r\n case types.SET_FABRICATOR_SUBSCRIPTIONS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n });\r\n case types.SET_FABRICATOR_TAXES:\r\n return Object.assign({}, state, {\r\n fabricatorTaxes: action.payload.fabricatorTaxes || [],\r\n });\r\n case types.SET_SQFT_MEASURE_UNIT: {\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, {\r\n measureUnit: action.payload.measureUnit,\r\n }),\r\n kitchenSettings: Object.assign({}, state.settings, {\r\n measureUnit: action.payload.measureUnit,\r\n })\r\n });\r\n }\r\n case types.UPDATE_FABRICATOR_SETTINGS: {\r\n const currentSettingsProperty = getCommonVisualizerType() + \"Settings\";\r\n const nextSettings = state[currentSettingsProperty]; // current settings\r\n // console.log(\"nextSettings\", nextSettings);\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, nextSettings)\r\n });\r\n }\r\n case types.TOGGLE_HIDE_ITEMS_PRICES: {\r\n return Object.assign({}, state, {\r\n hideCheckoutBreakdownCost: !state.hideCheckoutBreakdownCost\r\n });\r\n }\r\n case types.TOGGLE_USE_FABRICATOR_COST_PRICES: {\r\n const nextSettings = {useFabricatorCostPrices: action.payload.useFabricatorCostPrices}\r\n return Object.assign({}, state, {\r\n settings: Object.assign({}, state.settings, nextSettings)\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nexport const INITIAL_FLOW_BUTTON_TYPES = {\r\n Quote: \"Quote\",\r\n Design: \"Design\",\r\n};\r\n\r\nconst initialState = {\r\n initialFlowFinished: false, // is set only once to true (to load visualizer)\r\n initialFlowAdditionalRooms: [],\r\n initialFlowType: null,\r\n initialFlowRoom: null,\r\n initialFlowRoomLayout: null,\r\n initialFlowStep: 0,\r\n visualizerNotAvailable: false\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_INITIAL_FLOW_FINISHED:\r\n case types.SET_INITIAL_FLOW_BUTTON:\r\n case types.SET_INITIAL_FLOW_ROOM:\r\n case types.SET_INITIAL_FLOW_ROOM_LAYOUT:\r\n case types.SET_INITIAL_FLOW_STEP:\r\n case types.SET_INITIAL_FLOW_ADDITIONAL_ROOMS:\r\n case types.SET_INITIAL_FLOW_VISUALIZER_NOT_AVAILABLE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n return state;\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport NavigationRequests from \"./navigation/navigationRequests\";\r\nimport {IS_LIXIL_UI} from \"../../config\";\r\nimport MaterialSpinner from \"../ui/materialSpinner\";\r\nimport {COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\n\r\nclass AllFeaturesChecker extends NavigationRequests {\r\n\r\n static propTypes = {\r\n subPart: PropTypes.object.isRequired,\r\n callBack: PropTypes.func,\r\n loaderOnly: PropTypes.bool,\r\n withFiltersRequest: PropTypes.bool,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this._filtersRequestsMade = [];\r\n }\r\n\r\n componentDidMount() {\r\n const {subPart, callBack, withFiltersRequest, filterGroups} = this.props;\r\n if (withFiltersRequest && !this._filtersRequestsMade.includes(subPart.part.partId) && COUNTERTOP_GROUP.includes(subPart.part.partId)\r\n && !subPart.part.filtersReceived) {\r\n this._filtersRequestsMade.push(subPart.part.partId);\r\n this.checkIfAllFiltersReceived(subPart.part, filterGroups)\r\n .then(() => {\r\n if (callBack) {\r\n callBack()\r\n }\r\n });\r\n }\r\n this.checkIfAllFeaturesReceived(subPart, \"\", callBack);\r\n }\r\n\r\n render() {\r\n const {loaderOnly} = this.props;\r\n if (loaderOnly) {\r\n return IS_LIXIL_UI\r\n ? \r\n :

    \r\n }\r\n\r\n return (\r\n
  • \r\n
    \r\n
  • \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n filterGroups: store.filterState.filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AllFeaturesChecker);\r\n","import {createContext, useContext} from \"react\";\r\n\r\nexport const initialShopContextValues = {\r\n shopNavItems: [],\r\n shopAllNavItems: [],\r\n shopNavItemsLoaded: false,\r\n shopActiveCategory: \"\",\r\n shopActiveFeature: \"\",\r\n shopLastActiveFeature: \"\",\r\n};\r\n\r\nconst shopAction = \"CHANGE_SHOP_CONTEXT\";\r\n\r\nconst ShopContext = createContext({});\r\n\r\nexport const useShopContext = () => {\r\n return useContext(ShopContext);\r\n}\r\n\r\nexport const shopContextAction = (payload) => {\r\n return {\r\n type: shopAction,\r\n payload\r\n }\r\n}\r\n\r\nexport const shopContextReducer = (state = initialShopContextValues, action) => {\r\n switch (action.type) {\r\n case shopAction:\r\n return {...state, ...action.payload};\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default ShopContext;\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\n\r\n\r\nconst UiIcon = (props) => {\r\n\r\n const {activeTheme, icon, color} = props;\r\n\r\n switch (icon) {\r\n case \"checkmark\":\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n default:\r\n return null\r\n }\r\n}\r\n\r\nUiIcon.propTypes = {\r\n icon: PropTypes.string.isRequired,\r\n color: PropTypes.string\r\n}\r\n\r\nconst mapStateToProps = store => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n activeTheme\r\n }\r\n};\r\n\r\nexport default connect(mapStateToProps)(UiIcon)\r\n","import store from \"./../../../store\";\r\nimport config from \"../components/canvas/store/sqftConfig\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport {\r\n getBacksplashArea,\r\n getEdgeLength,\r\n inchesToLNFT,\r\n inchesToMm,\r\n mm2ToM2,\r\n mmToM,\r\n sqInchesToSqFoot\r\n} from \"./sqftHelper\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE, SQFT_FEATURES} from \"../constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport MiteredController from \"../components/canvas/core/controls/mitered\";\r\nimport sqftSlabManager from \"../components/canvas/store/sqftSlabManager\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\n\r\nexport function manualCalculationsCheckForChangesApplied() {\r\n return manualCalculationsCountertopArea() > 0 || manualCalculationsEdgesLength() > 0 || manualCalculationsBacksplashArea() > 0\r\n}\r\n\r\n//TODO include edges length\r\nexport function manualCalculationsCountertopArea() {\r\n const state = store.getState();\r\n\r\n let totalArea = state.sqftManualCalculationState.countertopRows.reduce((sum, row) => {\r\n if (!row.length || !row.width || isNaN(row.length) || isNaN(row.width)) {\r\n return sum\r\n }\r\n\r\n return config.measureUnit === \"Imperial\"\r\n ? sum + Math.ceil(sqInchesToSqFoot(row.length * row.width))\r\n : sum + mm2ToM2(row.length * row.width)\r\n }, 0);\r\n\r\n return Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function manualCalculationsEdgesLength() {\r\n const state = store.getState();\r\n let totalArea = state.sqftManualCalculationState.edgeRows.reduce((sum, row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return sum\r\n }\r\n\r\n return sum + manualCalculationsEdgeLength(row.selectedFeature, row.length)\r\n }, 0);\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(totalArea) : Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function manualCalculationsEdgeLength(selectedFeature, length) {\r\n return selectedFeature.dbFeature.unit.toLowerCase() === \"each\"\r\n ? 1\r\n : config.measureUnit === \"Imperial\" ? Math.ceil10(inchesToLNFT(length)) : Math.ceil10(mmToM(length), -2);\r\n}\r\n\r\nexport function manualCalculationsBacksplashArea() {\r\n const state = store.getState();\r\n\r\n return getRowSum(state.sqftManualCalculationState.backsplashRows);\r\n}\r\nconst getRowSum = (row) => {\r\n let totalArea = row.reduce((sum, row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return sum\r\n }\r\n\r\n return config.measureUnit === \"Imperial\"\r\n ? sum + Math.ceil(sqInchesToSqFoot(row.length * row.height))\r\n : sum + mm2ToM2(row.length * row.height)\r\n }, 0);\r\n\r\n return Math.ceil10(totalArea, -2);\r\n}\r\n\r\nexport function getCountertopArea() {\r\n let totalArea = 0;\r\n const shapes = sqftShapeManager.getCounterTopShapes();\r\n //console.log(\"-------------------------\",);\r\n shapes\r\n .sort((a, b) => a.id - b.id)\r\n .forEach(function(shape) {\r\n totalArea += shape.getTotalArea();\r\n });\r\n //console.log(\"-------------------------\",);\r\n //console.log(\"total sqInchesToSqFoot(totalArea)\", sqInchesToSqFoot(totalArea));\r\n return {\r\n totalAreaToMeasureUnit: config.measureUnit === \"Imperial\" ? Math.ceil(sqInchesToSqFoot(totalArea)) : mm2ToM2(totalArea),\r\n totalArea: totalArea,\r\n shapeLength: shapes.length\r\n }\r\n}\r\n\r\nexport function getEdgesArea() {\r\n let edgeCount = 0;\r\n //let edges = workspace.getShapeType('edge');\r\n const edges = workspace.getAttachedToLineResource(RESOURCE_ATTACHED_TO_TYPE.edge);\r\n\r\n for (const edge of edges) {\r\n const attachedTo = workspace.getLineOrCornerLineById(edge.attachedToId);\r\n edgeCount += getEdgeLength(attachedTo);\r\n }\r\n\r\n if (workspace.miteredController instanceof MiteredController) {\r\n edgeCount += workspace.miteredController.getEdgesLength();\r\n }\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil(edgeCount) : Math.ceil10(edgeCount, -2);\r\n}\r\n\r\nexport function getBacksplashTotalArea() {\r\n let backsplashesArea = 0;\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n const backsplashes = attachedToLineResources.filter(attachedToLineResources => attachedToLineResources.type === RESOURCE_ATTACHED_TO_TYPE.backsplash)\r\n for (let i = 0; i < backsplashes.length; i++) {\r\n const line = workspace.getLineOrCornerLineById(backsplashes[i].attachedToId)\r\n if (line) {\r\n backsplashesArea += getBacksplashArea(line.getBacksplashHeight(), line);\r\n }\r\n }\r\n\r\n const backsplashLabeledShapes = sqftShapeManager.getBacksplashLabeledShapes()\r\n backsplashLabeledShapes.forEach(function(shape) {\r\n if (shape.getTotalArea) {\r\n const shapeArea = shape.getTotalArea();\r\n backsplashesArea += config.measureUnit === \"Imperial\" ? Math.ceil(sqInchesToSqFoot(shapeArea)) : mm2ToM2(shapeArea)\r\n }\r\n });\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(backsplashesArea) : Math.ceil10(backsplashesArea, -2);\r\n}\r\n\r\nexport const getConvertedMultipliedValue = (length, height) => {\r\n return config.measureUnit === \"Imperial\"\r\n ? Math.ceil(sqInchesToSqFoot(length * height))\r\n : mm2ToM2(length * height)\r\n}\r\n\r\nexport const getExportedManualCalculateBacksplashes = () => {\r\n const state = store.getState();\r\n let backsplashes = [];\r\n\r\n state.sqftManualCalculationState.backsplashRows.forEach((row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return\r\n }\r\n let area = getConvertedMultipliedValue(row.length, row.height);\r\n let linearFeet = Math.ceil(inchesToLNFT(row.length)); // / 12\r\n let M = mmToM(row.length);\r\n backsplashes.push({\r\n id: row.id,\r\n partId: \"backsplashes\",\r\n length: area,\r\n squareFeet: area,\r\n realLength: config.measureUnit === \"Imperial\" ? linearFeet : M,\r\n inputLength: row.length,\r\n inputHeight: row.height,\r\n });\r\n });\r\n\r\n return backsplashes;\r\n}\r\n\r\nexport const getExportedManualCalculateEdges = () => {\r\n const state = store.getState();\r\n let selectedEdges = [];\r\n\r\n state.sqftManualCalculationState.edgeRows.forEach((row) => {\r\n if (!row.length || !row.height || isNaN(row.length) || isNaN(row.height)) {\r\n return\r\n }\r\n if (!row.selectedFeature) {\r\n console.log(\"edge was not selected in manual calculations\");\r\n return\r\n }\r\n selectedEdges.push({\r\n id: row.id,\r\n featureId: row.selectedFeature.dbFeature.id,\r\n partId: \"edges\",\r\n length: manualCalculationsEdgeLength(row.selectedFeature, row.length),\r\n unit: row.selectedFeature.dbFeature.unit,\r\n inputLength: row.length,\r\n inputHeight: row.height,\r\n name: row.type,\r\n segments: 1,\r\n });\r\n });\r\n\r\n return selectedEdges;\r\n}\r\n\r\n/**\r\n * @returns string\r\n */\r\nexport const getCountertopQtCategory = () => {\r\n const layout = getCurrentLayout();\r\n const mainNeeded = \"center_island_countertop\";\r\n const oppositeNeeded = \"countertop\";\r\n let featureGroupCountertop = layout.getSubPartFromQtCategories(mainNeeded);\r\n if (!featureGroupCountertop) {\r\n return oppositeNeeded\r\n }\r\n\r\n return mainNeeded\r\n}\r\n\r\n/**\r\n * @returns countertops[]\r\n */\r\nexport const getExportedManualCalculateCountertops = () => {\r\n const state = store.getState();\r\n let countertops = [];\r\n\r\n state.sqftManualCalculationState.countertopRows.forEach((row) => {\r\n if (!row.length || !row.width || isNaN(row.length) || isNaN(row.width)) {\r\n return\r\n }\r\n countertops.push({\r\n id: row.id,\r\n partId: getCountertopQtCategory(),\r\n inputLength: row.length,\r\n inputWidth: row.width,\r\n area: getConvertedMultipliedValue(row.length, row.width)\r\n });\r\n });\r\n\r\n return countertops;\r\n}\r\n\r\n/**\r\n * This will return area for slabImages and slab placeHolder shapes\r\n * @return {Number|*|number}\r\n */\r\nexport function getSlabTotalArea() {\r\n const state = store.getState();\r\n let slabImages = state.sqftSlabState.croppedSlabImages;\r\n let slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n if (slabImages.length === 0 && slabPlaceHolderShapes.length === 0) {\r\n return 0\r\n }\r\n let totalArea = [...slabImages, ...slabPlaceHolderShapes].reduce((previousValue, slabImage) => {\r\n let imageSize = slabImage.getSize()\r\n previousValue += imageSize.width * imageSize.height\r\n\r\n return previousValue\r\n }, 0)\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea)) : Math.ceil10(mmToM(totalArea), -2);\r\n}\r\n\r\nexport function getSlabImagesAreaGrouped() {\r\n const state = store.getState();\r\n const slabImages = state.sqftSlabState.croppedSlabImages;\r\n const slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n const slabImagesAndPlaceHolders = [...slabImages, ...slabPlaceHolderShapes];\r\n\r\n let slabImagesPrepared = [];\r\n for (let movableImage of slabImagesAndPlaceHolders) {\r\n let preparedSlabImage = slabImagesPrepared.find(prepared =>\r\n prepared.featureId === movableImage.featureId\r\n );\r\n\r\n if (preparedSlabImage) {\r\n preparedSlabImage.isDisabledInPopup = preparedSlabImage.isDisabledInPopup && movableImage.isDisabledInPopup;\r\n continue;\r\n }\r\n\r\n let totalArea = getSlabSameTypeArea(movableImage.featureId, slabImagesAndPlaceHolders);\r\n let totalSlabs = getSlabSameType(movableImage.featureId, slabImagesAndPlaceHolders).length;\r\n\r\n slabImagesPrepared.push({\r\n id: movableImage.id,\r\n partId: SQFT_FEATURES.slabs,\r\n slabParentPartId: movableImage.slabParentPartId,\r\n featureId: movableImage.featureId,\r\n totalSlabs: totalSlabs,\r\n totalArea: totalArea,\r\n pricePerArea: movableImage.pricePerArea,\r\n shouldUseSlabPricing: movableImage.shouldUseSlabPricing,\r\n isDisabledInPopup: movableImage.isDisabledInPopup\r\n });\r\n }\r\n\r\n return slabImagesPrepared;\r\n}\r\n\r\nexport function getSlabSameTypeArea(featureId, croppedSlabImages) {\r\n let totalArea = croppedSlabImages\r\n .filter(croppedSlabImage => croppedSlabImage.featureId === featureId)\r\n .reduce((previousValue, slabImage) => {\r\n const imageSize = slabImage.getSize();\r\n const width = config.measureUnit === \"Imperial\" ? imageSize.width : inchesToMm(imageSize.width);\r\n const height = config.measureUnit === \"Imperial\" ? imageSize.height : inchesToMm(imageSize.height);\r\n previousValue += width * height;\r\n\r\n return previousValue\r\n }, 0)\r\n\r\n return config.measureUnit === \"Imperial\" ? Math.ceil10(sqInchesToSqFoot(totalArea)) : Math.ceil10(mm2ToM2(totalArea), -2);\r\n}\r\n\r\nexport function getSlabSameType(featureId, croppedSlabImages) {\r\n return croppedSlabImages.filter(croppedSlabImage => croppedSlabImage.featureId === featureId);\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {MANUAL_CALCULATION_ROW_TYPES} from \"../bvcomponents/sqft/constants\";\r\nimport sqftConfig from \"../bvcomponents/sqft/components/canvas/store/sqftConfig\";\r\n\r\nexport const DEFAULT_MANUAL_CALC_ROW = {\r\n id: \"\",\r\n length: sqftConfig.getMeasureUnitPostfix(),\r\n height: sqftConfig.getMeasureUnitPostfix(),\r\n width: sqftConfig.getMeasureUnitPostfix(),\r\n selectedFeature: \"\",\r\n isShowTypesList: false,\r\n};\r\n\r\nexport const getEdgesPlaceholder = () => {\r\n return sqftConfig.measureUnit === \"Imperial\"\r\n ? sqftConfig.edgeHeightImperial //+ sqftConfig.getMeasureUnitPostfix()\r\n : sqftConfig.edgeHeightMetric //+ sqftConfig.getMeasureUnitPostfix()\r\n}\r\n\r\nexport const getDefaultManualCalcRowEdge = () => Object.assign({}, DEFAULT_MANUAL_CALC_ROW, { height: getEdgesPlaceholder() })\r\n\r\nexport const getInitialManualCalcRows = () => {\r\n return {\r\n [MANUAL_CALCULATION_ROW_TYPES.countertopRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...DEFAULT_MANUAL_CALC_ROW, id: index + 1})),\r\n [MANUAL_CALCULATION_ROW_TYPES.edgeRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...getDefaultManualCalcRowEdge(), id: index + 1})),\r\n [MANUAL_CALCULATION_ROW_TYPES.backsplashRows]: new Array(6).fill(null)\r\n .map((value, index) => ({...DEFAULT_MANUAL_CALC_ROW, id: index + 1})),\r\n }\r\n}\r\n\r\nconst initialState = {\r\n showManualCalculation: false,\r\n switcherPosition: {\r\n rect: {x:0, y:0}\r\n },\r\n ...getInitialManualCalcRows()\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n let filteredRows,\r\n newRow,\r\n lastRow,\r\n lastRowId;\r\n\r\n switch (action.type) {\r\n case types.TOGGLE_SHOW_MANUAL_CALCULATION:\r\n case types.SET_SWITCHER_POSITION:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.UPDATE_MANUAL_CALCULATION_ROWS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.ADD_MANUAL_CALCULATION_ROW:\r\n lastRow = state[action.payload.type][state[action.payload.type].length - 1];\r\n lastRowId = lastRow ? lastRow.id : 0;\r\n switch (action.payload.type) {\r\n case MANUAL_CALCULATION_ROW_TYPES.edgeRows:\r\n newRow = {...getDefaultManualCalcRowEdge(), id: lastRowId + 1};\r\n break;\r\n default:\r\n newRow = {...DEFAULT_MANUAL_CALC_ROW, id: lastRowId + 1};\r\n }\r\n\r\n return {\r\n ...state,\r\n [action.payload.type] : [...state[action.payload.type], newRow]\r\n };\r\n case types.DELETE_MANUAL_CALCULATION_ROW:\r\n filteredRows = state[action.payload.type].filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {\r\n [action.payload.type]: filteredRows\r\n });\r\n case types.UPDATE_MANUAL_CALCULATION_ROW: {\r\n const newList = state[action.payload.type].map((item) => {\r\n if (item.id === action.payload.row.id) {\r\n\r\n return Object.assign({}, item, {\r\n ...action.payload.updatedRowValue\r\n });\r\n }\r\n\r\n return item;\r\n });\r\n return Object.assign({}, state, {\r\n [action.payload.type]: newList\r\n });\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n","import workspace from \"../workspace\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport Rectangle from \"../shapes/layouts/rectangle\";\r\nimport {CABINET_LABELS, SHAPE_PART_ID} from \"../../../../constants\";\r\nimport Polygon from \"../shapes/layouts/polygon\";\r\nimport SlabAdditionalShape from \"../slab/slabAdditionalShape\";\r\nimport {createIroningBoardShape} from \"./cabinetShapesSpecialLayouts\";\r\nimport {getCabinetDimensions, getRelatedFeatureMetadata, getSpecialShape} from \"../../../../helpers/sqft3dArHelper\";\r\n\r\nexport const SHAPE_LAYOUTS = {\r\n rectangle: \"rectangle\",\r\n upperLayoutType5: \"upperLayoutType5\",\r\n upperLayoutType2: \"upperLayoutType2\",\r\n upperLayoutType4: \"upperLayoutType4\",\r\n\r\n lowerLayoutType1: \"lowerLayoutType1\",\r\n lowerLayoutType2: \"lowerLayoutType2\",\r\n lowerLayoutType3: \"lowerLayoutType3\",\r\n lowerLayoutType4: \"lowerLayoutType4\",\r\n lowerLayoutType5: \"lowerLayoutType5\",\r\n LowerIroningBoardRight: \"LowerIroningBoardRight\",\r\n LowerIroningBoardLeft: \"LowerIroningBoardLeft\",\r\n};\r\n\r\nexport const SHAPE_UPPER_LAYOUTS = [\r\n SHAPE_LAYOUTS.upperLayoutType5,\r\n SHAPE_LAYOUTS.upperLayoutType2,\r\n SHAPE_LAYOUTS.upperLayoutType4,\r\n];\r\n\r\nexport const SHAPE_LOWER_LAYOUTS = [\r\n SHAPE_LAYOUTS.lowerLayoutType1,\r\n SHAPE_LAYOUTS.lowerLayoutType2,\r\n SHAPE_LAYOUTS.lowerLayoutType3,\r\n SHAPE_LAYOUTS.lowerLayoutType4,\r\n SHAPE_LAYOUTS.lowerLayoutType5,\r\n SHAPE_LAYOUTS.LowerIroningBoardRight,\r\n SHAPE_LAYOUTS.LowerIroningBoardLeft,\r\n];\r\nexport const SHAPE_DIAMOND_LAYOUTS = [\r\n SHAPE_LAYOUTS.lowerLayoutType5,\r\n SHAPE_LAYOUTS.upperLayoutType4,\r\n];\r\n\r\nexport const SHAPE_SQUARE_LAYOUTS = [\r\n SHAPE_LAYOUTS.upperLayoutType2,\r\n SHAPE_LAYOUTS.upperLayoutType4,\r\n SHAPE_LAYOUTS.upperLayoutType5,\r\n\r\n SHAPE_LAYOUTS.lowerLayoutType1,\r\n SHAPE_LAYOUTS.lowerLayoutType2,\r\n SHAPE_LAYOUTS.lowerLayoutType4,\r\n SHAPE_LAYOUTS.lowerLayoutType5,\r\n];\r\n\r\nexport const IRONING_BOARD_DIRECTION = {\r\n left: 'left',\r\n right: 'right'\r\n}\r\n\r\n// const LAYOUT_TYPES = {\r\n// upper: SHAPE_UPPER_LAYOUTS,\r\n// lower: SHAPE_LOWER_LAYOUTS,\r\n// };\r\n\r\nclass CabinetShapes {\r\n constructor() {\r\n this.upperShapes = [];\r\n this.lowerShapes = [];\r\n this.otherShapes = [];\r\n this.additionalShapes = [];\r\n this.shapes = {\r\n /**\r\n * |‾‾‾‾|\r\n * | /\r\n * |__/\r\n */\r\n upperLayoutType5: [\r\n 'SM-DCW2436', 'SW-DCW2430', 'SM-DCW2442',\r\n 'Providence Cabinets Shaker White 27\" W, 36\" H Diagonal Corner Wall Cabinet',\r\n 'Providence Cabinets Shaker White 27\" W, 42\" H Diagonal Corner Wall Cabinet',\r\n 'SW-W1230', 'SM-W1236', 'SM-W1242',\r\n ],\r\n /**\r\n * |‾‾‾‾|\r\n * | _|\r\n * |__|\r\n */\r\n upperLayoutType2: [\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 36\" H',\r\n 'Providence Cabinets Shaker White 24\" W, 30\" H Diagonal Corner Wall Cabinet',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 30\"H',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 42\"H',\r\n 'Providence Cabinets Shaker White Corner Wall Cabinet 24\"W 42\" H',\r\n ],\r\n /**\r\n * |‾‾‾‾‾|\r\n * | __|\r\n * |__|\r\n */\r\n lowerLayoutType1: ['SM-ERB36/BER36', 'Providence Cabinets Shaker White 33\" Lazy Susan'],\r\n /**\r\n * |‾‾‾/\r\n * | >\r\n * |/\r\n */\r\n lowerLayoutType2: ['SW-BEC24'],\r\n /**\r\n * |‾‾‾|\r\n * | |\r\n * | )\r\n */\r\n lowerLayoutType3: ['SW-BES12'],\r\n LowerIroningBoardRight: ['SW-BES12'],\r\n /**\r\n * |‾‾‾‾|\r\n * | /\r\n * |__/\r\n */\r\n lowerLayoutType4: [],\r\n };\r\n this.specialShapes = {\r\n LowerLCorner: SHAPE_LAYOUTS.lowerLayoutType1,\r\n LowerDullangle: SHAPE_LAYOUTS.lowerLayoutType2,\r\n LowerDualangle: SHAPE_LAYOUTS.lowerLayoutType2,\r\n LowerIroningBoard: SHAPE_LAYOUTS.lowerLayoutType3,\r\n LowerDimondShape: SHAPE_LAYOUTS.lowerLayoutType4,\r\n LowerDimondCorner: SHAPE_LAYOUTS.lowerLayoutType5,\r\n LowerIroningBoardRight: SHAPE_LAYOUTS.LowerIroningBoardRight,\r\n LowerIroningBoardLeft: SHAPE_LAYOUTS.LowerIroningBoardLeft,\r\n\r\n UpperDimondShape: SHAPE_LAYOUTS.upperLayoutType4,\r\n UpperDimondCorner: SHAPE_LAYOUTS.upperLayoutType5,\r\n UpperLCorner: SHAPE_LAYOUTS.upperLayoutType2,\r\n }\r\n }\r\n\r\n addShape = (feature, parentFeature, position = null) => {\r\n const dimensions = getCabinetDimensions(feature, parentFeature);\r\n if (feature.partId === CABINET_LABELS.upper_cabinet_boxes) {\r\n return this.addShapeHelper(\r\n this.upperShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n } else if (feature.partId === CABINET_LABELS.lower_cabinet_boxes) {\r\n return this.addShapeHelper(\r\n this.lowerShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n } else {\r\n return this.addShapeHelper(\r\n this.otherShapes, 'square', feature.partId,\r\n this.getShapeLayout(feature, parentFeature), dimensions, position, feature, parentFeature\r\n );\r\n }\r\n };\r\n\r\n addShapeHelper = (shapeArray, shapeType, partId, shapeLayout, dimensions, position, feature, parentFeature) => {\r\n const shapeLines = this.getShapeLines(shapeLayout, dimensions);\r\n const shapeParams = { shapeCabinet: true, canSnap: true, ...dimensions, shapeLayout };\r\n const shapeId = sqftShapeManager.addShape(shapeLines, shapeType, position, partId, null, shapeParams);\r\n const shape = workspace.getShapeById(shapeId);\r\n sqftShapeManager.setShapeFeatureId(shapeId, feature.dbFeature.id);\r\n sqftShapeManager.setShapeRelatedParentFeatureId(shapeId, parentFeature.dbFeature.id);\r\n shape.setOriginalPointsCoords(shape.getPointsCoords());\r\n shapeArray.push(shapeId);\r\n console.log(\"Feature SharedFeatureName\", feature.dbFeature.sharedFeatureName);\r\n console.log(\"Feature Metadata\", getRelatedFeatureMetadata(feature, parentFeature));\r\n return shapeId;\r\n };\r\n\r\n getShapeLayout = (feature, parentFeature) => {\r\n const thirdPartyAR3DMetaData = getRelatedFeatureMetadata(feature, parentFeature);\r\n const specialShape = getSpecialShape(thirdPartyAR3DMetaData);\r\n if (specialShape) {\r\n const specialLayoutName = specialShape.replace(/\\s/g, \"\");\r\n if (this.specialShapes[specialLayoutName]) {\r\n return this.specialShapes[specialLayoutName]\r\n }\r\n }\r\n\r\n // Hardcoded Layouts\r\n for (const layout of Object.keys(SHAPE_LAYOUTS)) {\r\n if (this.shapes[layout] && feature.dbFeature && this.shapes[layout].includes(feature.dbFeature.sharedFeatureName) ||\r\n (feature.part && this.shapes[layout].includes(feature.part.dbFeature.sharedFeatureName))) {\r\n return layout;\r\n }\r\n }\r\n\r\n return SHAPE_LAYOUTS.rectangle;\r\n };\r\n\r\n getShapeLines = (shapeLayout, { width, height, depth }) => {\r\n void height;\r\n let cathetus = depth / Math.sqrt(2);\r\n switch (shapeLayout) {\r\n case SHAPE_LAYOUTS.lowerLayoutType1:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType2:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width - 8, y: depth - 8 },\r\n { x: 0, y: depth }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType3:\r\n case SHAPE_LAYOUTS.LowerIroningBoardRight:\r\n return createIroningBoardShape(width, depth, width, IRONING_BOARD_DIRECTION.right);\r\n case SHAPE_LAYOUTS.LowerIroningBoardLeft:\r\n return createIroningBoardShape(width, depth, width, IRONING_BOARD_DIRECTION.left);\r\n case SHAPE_LAYOUTS.lowerLayoutType4:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.lowerLayoutType5:\r\n return new Polygon(this.createPoints([\r\n { x: width - depth, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width },\r\n { x: 0, y: width - depth }\r\n ]), true, true);\r\n\r\n // UPPER\r\n case SHAPE_LAYOUTS.upperLayoutType4:\r\n return new Polygon(this.createPoints([\r\n { x: cathetus, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width },\r\n { x: 0, y: cathetus }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.upperLayoutType5:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: width - depth },\r\n { x: width - depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n case SHAPE_LAYOUTS.upperLayoutType2:\r\n return new Polygon(this.createPoints([\r\n { x: 0, y: 0 },\r\n { x: width, y: 0 },\r\n { x: width, y: depth },\r\n { x: depth, y: depth },\r\n { x: depth, y: width },\r\n { x: 0, y: width }\r\n ]), true, true);\r\n default:\r\n return new Rectangle(width, depth);\r\n }\r\n };\r\n\r\n createPoints = (coords) => coords;\r\n\r\n resetUpperShapes = () => {\r\n this.upperShapes = [];\r\n };\r\n\r\n importData = (data) => {\r\n //this.resetBacksplashes();\r\n data.forEach(activeBacksplashData => {\r\n const shape = workspace.importShape(activeBacksplashData.backsplashShape);\r\n shape.deregisterEvents();\r\n const line = workspace.getLineById(activeBacksplashData.line.id);\r\n const slabAdditionalShape = new SlabAdditionalShape(line, shape.id);\r\n this.addActiveBacksplash(slabAdditionalShape);\r\n });\r\n };\r\n\r\n exportData = () => {\r\n return this.additionalShapes\r\n .filter(slab => workspace.getShapeById(slab.backsplashShapeId).partId !== SHAPE_PART_ID.seamPiece)\r\n .map(slab => ({\r\n backsplashShape: workspace.getShapeById(slab.backsplashShapeId).export(),\r\n line: slab.line.export(),\r\n }));\r\n };\r\n\r\n addActiveBacksplash = (slabAdditionalShape) => {\r\n this.additionalShapes.push(slabAdditionalShape);\r\n };\r\n\r\n findAdditionalShapeByLine = (line) => {\r\n return this.additionalShapes.find(additionalShape => additionalShape.line.id === line.id);\r\n };\r\n\r\n removeActiveBacksplashByLine = (line) => {\r\n this.additionalShapes = this.additionalShapes.filter(shape => {\r\n if (shape.line.id === line.id) {\r\n workspace.removeShapeById(shape.backsplashShapeId);\r\n return false;\r\n }\r\n return true;\r\n });\r\n };\r\n\r\n removeShapeFromList = (shapeToRemove) => {\r\n this.additionalShapes = this.additionalShapes.filter(additionalShape => additionalShape.backsplashShapeId !== shapeToRemove.id);\r\n };\r\n}\r\n\r\nexport default CabinetShapes;\r\n","import $ from 'jquery';\r\nimport PropTypes from \"prop-types\";\r\nimport 'jquery-ui/ui/core';\r\nimport 'jquery-ui/ui/widgets/draggable';\r\nimport React, {Fragment} from \"react\";\r\nimport uuid from \"uuid\";\r\n\r\nimport ActionTypes from \"./../../../misc/actionTypes\";\r\nimport KeyboardKey from \"./keyboardKey\";\r\nimport Config from \"./../../../config\"; // kioskStandAlone\r\nimport Analytics from './../../../analytics';\r\n\r\n\r\nexport default class OnScreenKeyboard extends React.Component {\r\n\r\n static propTypes = {\r\n rightSide: PropTypes.bool,\r\n inputId: PropTypes.string.isRequired,\r\n getValue: PropTypes.func,\r\n setValue: PropTypes.func.isRequired,\r\n onClose: PropTypes.func,\r\n onShow: PropTypes.func,\r\n type: PropTypes.string.isRequired,\r\n prependTo: PropTypes.string,\r\n appendTo: PropTypes.string,\r\n top: PropTypes.string,\r\n left: PropTypes.string,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.keyboardFrame = null;\r\n this.state = {\r\n value: '',\r\n hidden: true,\r\n selectionStart: 0,\r\n selectionEnd: 0,\r\n type: this.props.type || \"standard\",\r\n oskInputId: uuid.v4(),\r\n isUpperCase: false,\r\n osk: document.kvConfig.osk,\r\n parentNode: null\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.tryBindToParent();\r\n this.setState({parentNode: $(this.keyboardFrame).parent()}, () => {\r\n if(this.props.prependTo)\r\n $(this.keyboardFrame).detach().prependTo(this.props.prependTo);\r\n else if(this.props.appendTo)\r\n $(this.keyboardFrame).detach().appendTo(this.props.appendTo);\r\n });\r\n\r\n const $keyboardFrame = $(this.keyboardFrame);\r\n const lightbox = $keyboardFrame.parents('.lightbox-options-wrapper');\r\n if (lightbox) {\r\n lightbox.on('scroll', this.setKBPosition.bind(this, $keyboardFrame, lightbox));\r\n this.setKBPosition($keyboardFrame, lightbox);\r\n }\r\n\r\n $(document).on(ActionTypes.SHOW_NUMERIC_KBD, this.handleShowKeyboard);\r\n $(document).on(ActionTypes.OVERLAY_CLICK, this.handleShowKeyboard);\r\n $(document).on('click', this.handleOutsideClick);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tryBindToParent();\r\n const fields = this.getFields();\r\n if (!this.state.hidden) {\r\n const selStart = this.state.selectionStart,\r\n selEnd = this.state.selectionEnd;\r\n if (fields.input) {\r\n fields.input.value = this.passwordify(this.state.value);\r\n fields.$input.focus();\r\n fields.input.setSelectionRange(selStart, selEnd);\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) { // we need to update this state when parent passes new value\r\n nextProps.value && nextProps.value !== this.state.value && this.setState({\r\n value: nextProps.value\r\n });\r\n }\r\n\r\n componentWillUnmount = () => {\r\n $(this.keyboardFrame).detach().appendTo(this.state.parentNode);\r\n $('.lightbox-options-wrapper').off('scroll');\r\n $(document).off(ActionTypes.SHOW_NUMERIC_KBD, this.handleShowKeyboard);\r\n $(document).off(ActionTypes.OVERLAY_CLICK, this.handleShowKeyboard);\r\n $(document).off('click', this.handleOutsideClick);\r\n };\r\n\r\n getFields = () => {\r\n const $parent = $('#' + (this.props.inputId ? this.props.inputId : this.props.parentId)),\r\n $parentInput = (this.props.inputId ? $('#' + this.props.inputId) : $parent.find('input[type=text]:not(\".osk-input\")')),\r\n parentInput = $parent[0],\r\n $input = $('#' + this.state.oskInputId),\r\n input = $input[0];\r\n return {\r\n $input: $input,\r\n input: input,\r\n $parent: $parent,\r\n $parentInput: $parentInput,\r\n parentInput: parentInput\r\n };\r\n };\r\n\r\n tryBindToParent = () => {\r\n if (!this.state.osk) {\r\n return;\r\n }\r\n\r\n let fields = this.getFields();\r\n if (!fields || !fields.parentInput || fields.parentInput === undefined) {\r\n console.log('could not bind, fields is null');\r\n return;\r\n }\r\n\r\n //console.log('bound to parent', this.props.inputId, fields.$parentInput, fields.parentInput);\r\n $(fields.parentInput).off('focus').on('focus', this.show);\r\n $(fields.parentInput).off('click').on('click', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n };\r\n\r\n setKBPosition = (self, lightbox) => {\r\n if (lightbox.is(\":visible\")) {\r\n const parent = self.parent();\r\n const offset = parent.offset();\r\n self.css({\r\n top: offset.top + 60,\r\n left: offset.left + 50,\r\n position: 'fixed'\r\n });\r\n }\r\n };\r\n\r\n handleShowKeyboard = (e, data) => {\r\n if (this.state.hidden) {\r\n return;\r\n }\r\n\r\n if (!data || data.sender !== this.state.oskInputId) {\r\n this.hide();\r\n }\r\n };\r\n\r\n show = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const fields = this.getFields(),\r\n val = fields.$parentInput.val();\r\n //console.log('Show', fields);\r\n\r\n $(document).trigger(ActionTypes.SHOW_NUMERIC_KBD, {sender: this.state.oskInputId});\r\n $('.keyboard-main-frame, .keyboard-main-frame-extended').draggable({handle: '.keyboard-header-bar'});\r\n this.setState({value: val, hidden: false, selectionStart: val.length, selectionEnd: val.length, blockOutsideClick: true});\r\n window.setTimeout(() => {\r\n this.setState({blockOutsideClick: false});\r\n }, 500);\r\n if(this.props.onShow) {\r\n console.log('onShowShowing');\r\n this.props.onShow();\r\n }\r\n };\r\n\r\n\r\n handleOutsideClick = (e) => {\r\n if(this.state.blockOutsideClick) {\r\n return;\r\n }\r\n if($(e.target).parents('.keyboard-container').length <= 0) {\r\n this.hide();\r\n }\r\n };\r\n\r\n hide = () => {\r\n this.setState({hidden: true});\r\n setTimeout(() => {\r\n document.inputFocused = false;\r\n }, 20);\r\n if(this.props.onClose) {\r\n this.props.onClose(this.state.value);\r\n }\r\n };\r\n passwordify = (value) => {\r\n if (this.props.password) {\r\n for (let i = 0; i < value.length - 1; i++) {\r\n value = value.substring(0, i) + '*' + value.substring(i + 1);\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n changeValue = (e) => {\r\n this.setState({value: e.target.value});\r\n };\r\n\r\n runKeyStroke = (key) => {\r\n document.inputFocused = true;\r\n if (key && key.length > 0) {\r\n const fields = this.getFields();\r\n let val = (this.props.getValue ? this.props.getValue() : this.state.value),\r\n start = val,\r\n end = \"\",\r\n input = fields.parentInput,\r\n $input = fields.$input,\r\n $parentInput = fields.$parentInput,\r\n selStart = (this.props.getValue ? val.length : input.selectionStart),\r\n selEnd = (this.props.getValue ? val.length : input.selectionEnd);\r\n //const ss = input.selectionStart, se = input.selectionEnd;\r\n // if (ss && ss !== selStart) {\r\n // selStart = ss;\r\n // }\r\n // if (se && se !== selEnd) {\r\n // selEnd = se;\r\n // }\r\n //console.log('>>', selStart, selEnd, key);\r\n if (selStart < val.length) {\r\n start = val.substring(0, selStart);\r\n end = val.substring(selEnd);\r\n }\r\n let inc = key.length;\r\n switch (key.toLowerCase()) {\r\n case \"backspace\":\r\n inc = -1;\r\n if (selStart < val.length) {\r\n if (selStart === selEnd) {\r\n start = start.substring(0, start.length - 1);\r\n } else {\r\n inc = 0;\r\n selEnd = selStart;\r\n }\r\n val = start + end;\r\n } else if (val.length > 0) {\r\n val = val.substring(0, val.length - 1);\r\n }\r\n break;\r\n case '|<':\r\n case '|>':\r\n if (key === '|<') {\r\n inc = -1;\r\n } else {\r\n if (selStart < selEnd) {\r\n inc = 0;\r\n selStart = selEnd;\r\n } else {\r\n inc = 1;\r\n }\r\n }\r\n break;\r\n case \"space bar\":\r\n case \"space\":\r\n val = start + \" \" + end;\r\n break;\r\n case \"caps\":\r\n case \"shift\":\r\n this.setState({isUpperCase: !this.state.isUpperCase});\r\n break;\r\n default:\r\n if (!this.state.isUpperCase) {\r\n key = key.toLowerCase();\r\n } else {\r\n key = key.toUpperCase();\r\n }\r\n val = start + key + end;\r\n selStart = start.length;\r\n selEnd = selStart;\r\n break;\r\n }\r\n //console.log('\\t>> ', selStart, selEnd, val, val.length, inc);\r\n if (selStart + inc > val.length) {\r\n selStart = val.length;\r\n selEnd = val.length;\r\n } else {\r\n selStart += inc;\r\n if (selEnd + inc > val.length) {\r\n selEnd = val.length;\r\n } else {\r\n selEnd += inc;\r\n }\r\n }\r\n if (selStart < 0) {\r\n selStart = 0;\r\n }\r\n if (selEnd < selStart) {\r\n selEnd = selStart;\r\n }\r\n\r\n this.setState({value: val, select: false}, () => {\r\n input.setSelectionRange(selStart, selEnd);\r\n if($input.length > 0)\r\n $input.focus();\r\n else\r\n $parentInput.focus();\r\n });\r\n // if ($input) {\r\n // console.log('\\t\\t>>', selStart, selEnd);\r\n // input.setSelectionRange(selStart, selEnd);\r\n // $input.val(val);\r\n // $input.focus();\r\n // }\r\n\r\n this.setParentValue(val);\r\n }\r\n };\r\n setParentValue = (value) => {\r\n Analytics.sendDataEnteredEvent('osk-update-parent-textbox');\r\n //console.log('setValue', value, this.props);\r\n if (this.props.setValue) {\r\n if (this.props.prop) {\r\n this.props.setValue(this.props.prop, value);\r\n } else {\r\n this.props.setValue(value);\r\n }\r\n }\r\n };\r\n\r\n done = () => {\r\n this.setParentValue(this.state.value);\r\n this.hide();\r\n };\r\n\r\n mouseUp = () => {\r\n const fields = this.getFields();\r\n this.setState({\r\n selectionStart: fields.input.selectionStart,\r\n selectionEnd: fields.input.selectionEnd\r\n });\r\n };\r\n\r\n render() {\r\n const visible = {\r\n display: this.state.hidden ? \"none\" : \"block\",\r\n //transition: \"all 0.5s ease-in-out\",\r\n top: this.props.top,\r\n left: this.props.left\r\n };\r\n if (this.props.type === \"numeric\") {\r\n return this.renderNumericKeyboard(visible);\r\n }\r\n\r\n const arrowKeys = {\r\n left: (Config.kioskStandAlone || location.port === '9007' || document.kvConfig.kioskMode ? '.' : '/Content/Views/quickquote-v3') + '/images/buttons/KeyboardLeftArrow.svg',\r\n right: (Config.kioskStandAlone || location.port === '9007' || document.kvConfig.kioskMode ? '.' : '/Content/Views/quickquote-v3') + '/images/buttons/KeyboardRightArrow.svg'\r\n };\r\n\r\n const mainFrameClass = \"keyboard-container \" + (this.props.type === 'email' ? 'keyboard-main-frame-extended' : 'keyboard-main-frame');\r\n\r\n return (\r\n
    this.keyboardFrame = node} onClick={(e) => e.stopPropagation()}>\r\n
    \r\n
    Drag to Move
    \r\n {this.state.hidden ? null : (\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \" image={arrowKeys.right}\r\n runKeyStroke={this.runKeyStroke}/>\r\n
    \r\n {this.renderEmailPanel()}\r\n
    \r\n )}\r\n
    \r\n );\r\n }\r\n\r\n renderEmailPanel = () => {\r\n if (this.props.type !== 'email') {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n @gmail.com\r\n @yahoo.com\r\n @hotmail.com\r\n @aol.com\r\n @msn.com\r\n @me.com\r\n @icloud.com\r\n .com\r\n .net\r\n
    \r\n );\r\n };\r\n\r\n renderNumericKeyboard = (visible) => {\r\n //
    \r\n return (\r\n\r\n
    this.keyboardFrame = node}>\r\n {this.state.hidden ? null : (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
    \r\n\r\n );\r\n //
    \r\n }\r\n}\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport IntlTelInput from \"react-intl-tel-input\";\r\n\r\nimport Config, {IS_QKB_UI} from './../../../config';\r\nimport Misc from \"../../../misc/misc\";\r\nimport {changeUserInfo, changeUserInfoErrors} from \"../../../actions/actionFunctions\";\r\nimport {useIsMounted} from \"../../../misc/helperHooks\";\r\nimport {getPreferredCountries} from \"../../common/twoFactorAuthView\";\r\nimport UserFieldErrors from \"../../popups/userPopup/userFieldsErrors\";\r\nimport OnScreenKeyboard from \"../../common/OnScreenKeyboard/keyboard\";\r\n\r\nconst replaceDialCode = (dialCode, inputValue) => {\r\n const dialWithPlus = \"+\" + dialCode;\r\n if (dialWithPlus.length > 1) {\r\n const charLength = dialWithPlus.length;\r\n if (dialWithPlus === inputValue.slice(0,charLength)) {\r\n inputValue = inputValue.slice(charLength);\r\n }\r\n }\r\n inputValue = inputValue.split(\" \").join(\"\").split(\"-\").join(\"\");\r\n return inputValue\r\n}\r\n\r\nconst LookUserPhoneInput = (props) => {\r\n\r\n const {property, userInfo, changeUserInfo, intl, userInfoErrors, changeUserInfoErrors, placeholder, isUserPopup,\r\n isActive, inputsValidated, fabricatorData} = props;\r\n // const isLowes = fabricatorData.isLowes;\r\n\r\n const inputRef = useRef();\r\n const [defaultValue, ] = useState(userInfo[property]);\r\n const [blurred, setBlurred] = useState(false);\r\n const [focused, setFocused] = useState(false);\r\n const [wasChanged, setWasChanged] = useState(false);\r\n const isMounted = useIsMounted();\r\n const utilsScript = Config.getScriptPath() + \"/libphonenumber.js\";\r\n\r\n // const handleInputBlur = (isValid, value, _this.selectedCountryData, fullNumber, _this.getExtension(value), e) => { // all input tel props params\r\n const handleInputBlur = (isValid, inputValue, ...rest) => {\r\n\r\n let restartInput = false;\r\n setFocused(false);\r\n\r\n const event = rest[3];\r\n if (event && event.relatedTarget && event.relatedTarget.className.includes(\"keyboard-container\")) { // blur from osk keyboard\r\n return\r\n }\r\n\r\n if (!blurred) {\r\n setBlurred(true);\r\n }\r\n const replacedValue = replaceDialCode(userInfo.country.dialCode, inputValue);\r\n if (replacedValue !== inputValue) {\r\n inputValue = replacedValue;\r\n restartInput = true;\r\n }\r\n\r\n const fullNumber = `+${userInfo.country.dialCode} ${inputValue}`;\r\n const errors = getValidationErrors(fullNumber, userInfo.country.iso2.toUpperCase());\r\n // if (!errors.length && !isValid) {\r\n // errors.push(\"assignPopup.errors.phoneIncorrect\")\r\n // }\r\n if (errors.length) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n } else if (!errors.length && userInfoErrors[property]) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n // removed this formatting due to incorrect validation ex.(+447862073603)\r\n const formattedPhone = errors[property]\r\n ? Misc.getPhoneFormatted(inputValue, userInfo.country.iso2.toUpperCase())\r\n : inputValue;\r\n console.log(\"handleInputBlur formattedPhone\", formattedPhone);\r\n changeUserInfo({\r\n [property]: formattedPhone\r\n });\r\n if (restartInput && inputRef && inputRef.current && inputRef.current.setInitialState) {\r\n setTimeout(() => {\r\n inputRef.current.setFlag(userInfo.country.iso2, true);\r\n inputRef.current.setNumber(fullNumber);\r\n // inputRef.current.setInitialState();\r\n }, 0)\r\n }\r\n // console.log(\"blur number\", isValid, inputValue);\r\n };\r\n\r\n useEffect(() => {\r\n if (IS_QKB_UI) {\r\n if (isMounted() && isActive) {\r\n handleInputBlur(true, userInfo[property]);\r\n }\r\n } else if (!inputsValidated) {\r\n handleInputBlur(true, userInfo[property]);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n\r\n const getValidationErrors = (currentValue, region) => {\r\n if (fabricatorData.isCaesarStone) {\r\n return []\r\n }\r\n region = region || \"US\";\r\n const errors = [];\r\n if (!currentValue) {\r\n errors.push(\"assignPopup.errors.phoneRequired\");\r\n return errors\r\n }\r\n if (!Misc.isPhoneNumber(currentValue, region)) {\r\n errors.push(\"assignPopup.errors.phoneIncorrect\");\r\n }\r\n return errors\r\n }\r\n\r\n const handleInputFocus = () => {\r\n setFocused(true);\r\n }\r\n\r\n /**\r\n * 5 arguments passed to this callback\r\n * @param a {boolean} // isValid\r\n * @param b {string} // newNumber\r\n * @param c {Object} // countryData\r\n * @param phoneNumber {string} // fullNumber\r\n * @param forceCarrot {boolean} // isExtension\r\n */\r\n const handleChangeNumber = (a, b, c, phoneNumber, forceCarrot = false) => {\r\n phoneNumber = phoneNumber.replace(/[^0-9\\-\\(\\)\\s]/gi, \"\");\r\n /*let prefix = `+${c.dialCode}`;\r\n phoneNumber = phoneNumber.replace(prefix, '');\r\n if(country !== \"auto\" && country.dialCode) {\r\n prefix = `+${country.dialCode}`;\r\n }\r\n if (startsWith(phoneNumber, prefix + ' ') || trim(phoneNumber).length == 0) {\r\n let hasPrefix = phoneNumber.substring(0, prefix.length) == prefix;\r\n if (hasPrefix) phoneNumber = trim(phoneNumber.substring(prefix.length));\r\n phoneNumber = `${prefix} ${phoneNumber}`;\r\n }*/\r\n if (forceCarrot) {\r\n const forceCarrotFunc = () => {\r\n let p = document.getElementById('phone');\r\n p.selectionStart = phoneNumber.length;\r\n p.selectionEnd = phoneNumber.length;\r\n }\r\n window.setTimeout(forceCarrotFunc, 10);\r\n }\r\n if (!c) {\r\n return\r\n }\r\n if ((userInfo.phoneNumber !== phoneNumber) && (userInfo.country.iso2 !== c.iso2) && isMounted()) {\r\n // console.log(\"handleChangeNumber formattedPhone\", c);\r\n // console.log(\"userInfo.phoneNumber\", userInfo.phoneNumber);\r\n // console.log(\"phoneNumber\", phoneNumber);\r\n changeUserInfo({country: c});\r\n }\r\n if (userInfoErrors[property] || blurred || !focused || !wasChanged) {\r\n const errors = getValidationErrors(`+${c.dialCode} ${b}`, c.iso2.toUpperCase());\r\n if (!errors.length || blurred) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n if (!focused || !wasChanged) { // autofill\r\n const replacedValue = replaceDialCode(c.dialCode, b);\r\n if (replacedValue !== b) {\r\n b = replacedValue;\r\n const fullNumber = `+${c.dialCode} ${b}`;\r\n inputRef.current.setNumber(fullNumber);\r\n }\r\n changeUserInfo({\r\n [property]: b\r\n });\r\n console.log(\"change number when it is not focused\", b, phoneNumber);\r\n }\r\n if (!wasChanged) {\r\n setWasChanged(true);\r\n }\r\n };\r\n\r\n const handleChangeFlag = (currentNumber, selectedCountryData) => {\r\n /*const matches = currentNumber.match(/(\\+\\d{1,4}\\s)/gi);\r\n currentNumber = currentNumber.replace(/\\+\\d{1,4}\\s/gi, '');\r\n\r\n const numberSplitted = currentNumber.split(\"+\"+selectedCountryData.dialCode);\r\n const number = numberSplitted[numberSplitted.length - 1] || \"\";\r\n\r\n currentNumber = (matches && matches.length > 1)\r\n ? `${matches[1]}${currentNumber}`\r\n : `+${selectedCountryData.dialCode} ${number}`;*/\r\n\r\n let newUserInfo = {};\r\n if (currentNumber !== userInfo.phoneNumber) {\r\n newUserInfo.phoneNumber = currentNumber\r\n }\r\n if (selectedCountryData && selectedCountryData.iso2) {\r\n newUserInfo.country = selectedCountryData\r\n }\r\n if (Object.keys(newUserInfo).length) {\r\n // console.log(\"handleChangeFlag!!\", newUserInfo);\r\n changeUserInfo(newUserInfo);\r\n }\r\n if ((userInfoErrors[property] || blurred) && (selectedCountryData && selectedCountryData.iso2)) {\r\n const fullNumber = `+${selectedCountryData.dialCode} ${currentNumber}`;\r\n const errors = getValidationErrors(fullNumber, selectedCountryData.iso2.toUpperCase());\r\n if (!errors.length) {\r\n changeUserInfoErrors({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n };\r\n\r\n const errorsExist = Array.isArray(userInfoErrors[property]) && userInfoErrors[property].length;\r\n\r\n const renderScreenKeyboard = () => {\r\n if (!document.kvConfig.osk) {\r\n return null\r\n }\r\n const keyboardNumberClick = (value) => {\r\n // console.log(\"keyboardNumberChange\", value);\r\n // console.log(\"inputRef\", inputRef);\r\n if (value && value.includes(\".\")) { // phone number can't include dots\r\n return\r\n }\r\n changeUserInfo({ // 1) set redux value\r\n [property]: value\r\n });\r\n // handleChangeNumber(true, value, userInfo.country, value, true); // 2) change flag? not sure if we need this on number click\r\n if (inputRef && inputRef.current) { // 3) set input value by passing fake event\r\n inputRef.current.handleInputChange({\r\n target: {\r\n selectionStart: value.length,\r\n target: inputRef.current.tel,\r\n value,\r\n }\r\n });\r\n }\r\n }\r\n return userInfo.phoneNumber}\r\n setValue={keyboardNumberClick}\r\n onClose={(v) => {\r\n if (!blurred) {\r\n handleInputBlur(true, v)\r\n }\r\n }}\r\n left=\"100%\"\r\n top=\"-57px\"\r\n type=\"numeric\"/>\r\n }\r\n\r\n const IntlInputComponent = (\r\n \r\n )\r\n\r\n if (IS_QKB_UI) {\r\n return (\r\n
    \r\n {IntlInputComponent}\r\n {fabricatorData.isCaesarStone || (isUserPopup && !errorsExist) ? null : *}\r\n \r\n {renderScreenKeyboard()}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {IntlInputComponent}\r\n
    \r\n \r\n *\r\n \r\n
    \r\n
    \r\n {errorsExist ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n {renderScreenKeyboard()}\r\n
    \r\n )\r\n};\r\n\r\nLookUserPhoneInput.propTypes = {\r\n property: PropTypes.string.isRequired,\r\n inputsValidated: PropTypes.bool.isRequired,\r\n shrink: PropTypes.bool,\r\n restartPhoneInput: PropTypes.func,\r\n placeholder: PropTypes.string,\r\n isUserPopup: PropTypes.bool,\r\n isActive: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, userInfoErrors} = store.userState;\r\n return {\r\n userInfo,\r\n userInfoErrors,\r\n fabricatorData: store.fabricatorState\r\n // assignQuotePopupSearchText: store.assignQuoteState.assignQuotePopupSearchText\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n changeUserInfoErrors\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookUserPhoneInput)\r\n)\r\n","import React, {Fragment} from 'react';\r\n\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_MODES, DISCOUNT_TYPES} from \"./discounstInterface\";\r\nimport {\r\n getPriceWithCurrency,\r\n getQuotePriceWithDiscounts, getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n sortByOrder,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport {\r\n getCustomDepositAmount,\r\n getDiscountsForSection,\r\n getSubTotalPrice,\r\n shouldDisplayDiscount\r\n} from \"./discountFunctions\";\r\nimport TextInput from \"../ui/textInput\";\r\n\r\nexport default class DiscountCommon extends React.Component {\r\n\r\n handleDiscountSelectClick = () => {\r\n if (this.isDiscountDisabled()) {\r\n return false\r\n }\r\n const currentDiscount = this.props.discount;\r\n currentDiscount.selected = !currentDiscount.selected;\r\n this.updateDiscount(currentDiscount);\r\n };\r\n\r\n setDiscountProperty = (property, value) => {\r\n const currentDiscount = this.props.discount;\r\n currentDiscount[property] = value;\r\n this.updateDiscount(currentDiscount);\r\n };\r\n\r\n updateDiscount = (currentDiscount) => {\r\n this.props.setDiscountSections(this.props.discountSections.map((discountSection) => {\r\n if (discountSection.order === this.props.discountSection.order) {\r\n discountSection.discounts.map(discount => {\r\n if (currentDiscount.order === discount.order) {\r\n return currentDiscount\r\n }\r\n return discount\r\n });\r\n if (currentDiscount.selected && currentDiscount.mode === DISCOUNT_MODES.or && !currentDiscount.isSubTotal) {\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n if ((currentDiscount.order !== discount.order) && (discount.mode === DISCOUNT_MODES.or) && !discount.isSubTotal) {\r\n discount.selected = false\r\n }\r\n return discount\r\n });\r\n }\r\n }\r\n return discountSection\r\n }));\r\n };\r\n\r\n getGrandTotal = (withoutDiscount = null) => {\r\n const totalPrice = getTotalPrice(null, false);\r\n return getQuotePriceWithDiscounts(totalPrice, withoutDiscount ? [withoutDiscount] : []);\r\n }\r\n\r\n isDiscountDisabled = (forDiscount = this.props.discount) => {\r\n const {discountSection, customAddedDiscounts} = this.props;\r\n const discount = forDiscount;\r\n if (discount.selected) {\r\n return false\r\n }\r\n const grandTotal = this.getGrandTotal();\r\n const discountAmount = discount.type === DISCOUNT_TYPES.price ? discount.amount : grandTotal * discount.amount / 100;\r\n let disabled = (grandTotal - discountAmount) < 0;\r\n if (disabled && discount.mode === DISCOUNT_MODES.or) {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n if (allDiscounts.some(currentDiscount => {\r\n return (currentDiscount.order !== discount.order) // take othere discounts from this section\r\n && (currentDiscount.mode === DISCOUNT_MODES.or) // with OR mode\r\n && shouldDisplayDiscount(currentDiscount) // already selected\r\n && (this.getGrandTotal(currentDiscount) - discountAmount) > 0\r\n // price without this discount minus current discount amount still more than 0\r\n })) {\r\n disabled = false\r\n }\r\n }\r\n return disabled\r\n }\r\n\r\n getDiscountPercentageAmount = () => {\r\n const grandTotal = getSubTotalPrice(this.props.discountSections, this.props.discountSection, this.props.discount, true, this.props.customAddedDiscounts);\r\n const priceTaken = grandTotal * this.props.discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n };\r\n\r\n setAmountValue = (value) => {\r\n // console.log(\"value\", value);\r\n if ((this.props.discount.discountType === DISCOUNT_MAIN_TYPES.deposit) && (this.props.discount.type === DISCOUNT_TYPES.percent)) {\r\n this.setDiscountProperty(\"type\", DISCOUNT_TYPES.price);\r\n }\r\n this.setDiscountProperty(\"amount\", +value)\r\n };\r\n\r\n getMaxDiscountValue = () => {\r\n return (this.props.discount.type === DISCOUNT_TYPES.percent) ? 100 : this.getGrandTotal(this.props.discount)\r\n }\r\n\r\n getDiscountAmount = () => {\r\n const {discount, fabricatorSettings} = this.props;\r\n return discount.type === DISCOUNT_TYPES.price\r\n ? \"-\" + getPriceWithCurrency(fabricatorSettings, discount.amount)\r\n : \"-\" + getPriceWithCurrency(fabricatorSettings, this.getDiscountPercentageAmount())\r\n }\r\n\r\n getInputValue = () => {\r\n const {discount, fabricatorSettings, discountSections} = this.props;\r\n if (!discount.amount) {\r\n return \"0\"\r\n }\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n if (discount.type === DISCOUNT_TYPES.price) {\r\n return getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n }\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n const customDepositAmount = getCustomDepositAmount(discountSections, grandTotal);\r\n return getPriceWithCurrency(fabricatorSettings, customDepositAmount);\r\n }\r\n // return \"-\" + (discount.type === DISCOUNT_TYPES.price) // we can't have percentages free fill discounts\r\n // ? fabricatorSettings.currencySign + discount.amount\r\n // : discount.amount + \"%\"\r\n return \"-\" + getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n }\r\n\r\n renderAmountInput = () => {\r\n const {discount, fabricatorData} = this.props;\r\n const isDiscount = discount.discountType === DISCOUNT_MAIN_TYPES.deposit;\r\n return discount.selected || isDiscount ? (\r\n \r\n {/**/}\r\n {/* -{discount.type === DISCOUNT_TYPES.percent ? \"%\" : fabricatorData.settings.currencySign}*/}\r\n {/**/}\r\n \r\n {/*{discount.type === DISCOUNT_TYPES.percent*/}\r\n {/* ? {this.getDiscountAmount()}*/}\r\n {/* : null}*/}\r\n \r\n ) : null\r\n }\r\n\r\n}\r\n","export const getFeatureUnit = (cartFeature, fabricatorData, printContext, locale, quantity) => {\r\n const dbFeature = cartFeature.dbFeature;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && locale === \"fr-FR\" && printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]) {\r\n if ((printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName] === \"pieds carrés\") && dbFeature.unit === \"Each\") {\r\n return \"unité\"\r\n }\r\n return printContext.messages[\"transDoc.units_FR.\" + dbFeature.sharedFeatureName]\r\n }\r\n if (dbFeature.unit) {\r\n let lowercasedUnit = dbFeature.unit.toLowerCase();\r\n return lowercasedUnit === \"each\" || lowercasedUnit === \"unit\"\r\n ? quantity === 1\r\n ? printContext.messages[\"quotingTool.featureInfo.defaultQuantity\"]\r\n : printContext.messages[\"quotingTool.featureInfo.defaultQuantityMultiple\"]\r\n : dbFeature.unit\r\n }\r\n if (cartFeature.isStoneFeature) {\r\n return printContext.messages[\"shoppingCart.fetureInCartDefaultQuantitySQFT\"]\r\n }\r\n return printContext.messages[\"shoppingCart.fetureInCartDefaultQuantity\"]\r\n};\r\n\r\nexport const getCartItemName = (cartFeature, fabricatorData, printContext, locale) => {\r\n const dbFeature = cartFeature.dbFeature;\r\n if (fabricatorData.isLowes || fabricatorData.isCaesarStone) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.customDisplayName_FR.\"+ dbFeature.sharedFeatureName]) {\r\n return printContext.messages[\"transDoc.customDisplayName_FR.\"+ dbFeature.sharedFeatureName]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateName_PL.\"+ dbFeature.sharedFeatureName]) {\r\n return printContext.messages[\"transDoc.customTranslateName_PL.\"+ dbFeature.sharedFeatureName]\r\n }\r\n }\r\n\r\n if ((dbFeature.sharedFeatureName === \"additionalCartItem.minimumCharge\")) {\r\n if (fabricatorData.isCaesarStone) {\r\n return `${printContext.messages[dbFeature.sharedFeatureName]} (${cartFeature.fromFeatureName})`\r\n }\r\n return printContext.messages[dbFeature.sharedFeatureName]\r\n }\r\n\r\n if (!cartFeature.getFeatureName) {\r\n return cartFeature._customDisplayName || cartFeature.customDisplayName || \"\"\r\n }\r\n\r\n return cartFeature.getFeatureName()\r\n};\r\n","import {getFilterGroupValue, getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getTotalPrice, toFixedFeatureCost, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {isProd} from \"../../../misc/fabricatorHardcode\";\r\n\r\nexport const SIMILAR_FILTER_GROUP_NAME = \"Collection\";\r\n\r\n/**\r\n * @param cartItem {object}\r\n * @param filterGroups {array}\r\n * @returns {array} // [featureCollectionInterface] or null\r\n */\r\nexport const getFeaturesCollectionsList = (cartItem, filterGroups) => {\r\n\r\n if (!cartItem || !cartItem.cartFeature || !cartItem.partId.includes(\"countertop\") || isProd() || !filterGroups.length) {\r\n return null\r\n }\r\n\r\n const parent = cartItem.cartFeature.getParent ? cartItem.cartFeature.getParent() : null;\r\n if (!parent) {\r\n return null\r\n }\r\n\r\n const filterGroup = filterGroups.find(fGroup => fGroup.name === SIMILAR_FILTER_GROUP_NAME);\r\n if (!filterGroup) {\r\n return null\r\n }\r\n\r\n const cartFeatureFilters = getFilterGroupValues(cartItem.cartFeature, filterGroup) || [];\r\n\r\n let featuresCollectionsList = [];\r\n\r\n const layout = getCurrentLayout();\r\n const navFeatures = layout.designNavigationItems({part: parent}, {}, \"\", false, true);\r\n for (let i = 0; i < navFeatures.length; i++) {\r\n const navFeature = navFeatures[i];\r\n const featureFilters = getFilterGroupValues(navFeature.part, filterGroup);\r\n if (Array.isArray(featureFilters)) {\r\n featureFilters.forEach(filterValueId => {\r\n if (!cartFeatureFilters.some(cartFeatureFilter => cartFeatureFilter === filterValueId)) {\r\n let collectionObject = featuresCollectionsList.find(colObject => colObject.id === filterValueId);\r\n if (collectionObject) {\r\n collectionObject.features.push(navFeature.part)\r\n } else {\r\n collectionObject = {id: filterValueId, features: [navFeature.part]};\r\n featuresCollectionsList.push(collectionObject);\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n featuresCollectionsList = featuresCollectionsList.sort((a, b) => a.id - b.id); // sort by collection id\r\n console.log(\"featuresCollectionsList\", featuresCollectionsList);\r\n\r\n return featuresCollectionsList\r\n\r\n}\r\n\r\n/**\r\n * @param cartItem {cartItemInterface}\r\n * @param addedCountertops {[cartItemInterface]}\r\n * @param featureCollection {object}\r\n * @param totalCountertopsQuantity {number}\r\n * @param quoteIndex {number}\r\n * @param filterGroups {array}\r\n * @returns {similarItemObjectInterface} // or null\r\n */\r\nexport const getSimilarItemInfoObject = (\r\n cartItem,\r\n addedCountertops,\r\n featureCollection,\r\n totalCountertopsQuantity,\r\n quoteIndex,\r\n filterGroups,\r\n) => {\r\n let feature = null;\r\n const fromCartItemName = cartItem.cartFeature.getSplittedFeatureName();\r\n // console.log(\"fromCartItemName\", fromCartItemName);\r\n if (fromCartItemName) {\r\n // if (\r\n // (fromCartItemName.includes(\"2cm\") && addedCountertops.some(cItem => cItem.cartFeature && cItem.cartFeature.getSplittedFeatureName().includes(\"3cm\")))\r\n // || (fromCartItemName.includes(\"3cm\") && addedCountertops.some(cItem => cItem.cartFeature && cItem.cartFeature.getSplittedFeatureName().includes(\"2cm\")))\r\n // ) {\r\n // feature = featureCollection.features.find(currentFeature => [\"2cm\", \"3cm\"].some(inName => currentFeature.getSplittedFeatureName().includes(inName)))\r\n // } else\r\n if (fromCartItemName.includes(\"2cm\")) {\r\n feature = featureCollection.features.find(currentFeature => currentFeature.getSplittedFeatureName().includes(\"2cm\"))\r\n } else if (fromCartItemName.includes(\"3cm\")) {\r\n feature = featureCollection.features.find(currentFeature => currentFeature.getSplittedFeatureName().includes(\"3cm\"))\r\n }\r\n }\r\n if (!feature) {\r\n feature = featureCollection.features[0]; // take first collection feature\r\n }\r\n\r\n const totalPrice = +toFixedFeatureCost(feature, totalCountertopsQuantity, \"\");\r\n\r\n const countertopTotalPrice = +toFixedFeatureCost(cartItem.cartFeature, totalCountertopsQuantity, \"\");\r\n\r\n let subTotalPrice = getTotalPrice(quoteIndex, false).materialPrice;\r\n subTotalPrice = toFixedPrice(subTotalPrice - countertopTotalPrice + totalPrice);\r\n\r\n const filterGroup = filterGroups.find(fGroup => fGroup.name === SIMILAR_FILTER_GROUP_NAME);\r\n const filterGroupValue = getFilterGroupValue(featureCollection.id, filterGroup);\r\n if (!filterGroupValue || !filterGroupValue.displayText) {\r\n return null\r\n }\r\n const filterValueName = filterGroupValue.displayText.replace(\" \" + SIMILAR_FILTER_GROUP_NAME, \"\");\r\n\r\n return {\r\n filterValueName,\r\n feature,\r\n subTotalPrice,\r\n }\r\n}\r\n","import vert from '!raw-loader!./vertex.glsl';\r\nimport frag from '!raw-loader!./fragment.glsl';\r\n\r\nfunction loadTexture(gl, oc) {\r\n const texture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, oc); // This is the important line!\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n return texture;\r\n}\r\n\r\nfunction setArrays(gl, prog) {\r\n let vertex_buffer = gl.createBuffer();\r\n const vertices = [-1.0, -1.0, 1.0, -1.0, -1.0, 1.0,\r\n 1.0, 1.0, 1.0, -1.0, -1.0, 1.0,\r\n ];\r\n gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);\r\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);\r\n let coord = gl.getAttribLocation(prog, \"coords\");\r\n gl.vertexAttribPointer(coord, 2, gl.FLOAT, false, 0, 0);\r\n gl.enableVertexAttribArray(coord);\r\n return [coord, vertex_buffer];\r\n}\r\n\r\nfunction prepareWebGL(gl, width, height) {\r\n let vertSh = gl.createShader(gl.VERTEX_SHADER);\r\n gl.shaderSource(vertSh, vert);\r\n gl.compileShader(vertSh);\r\n let fragSh = gl.createShader(gl.FRAGMENT_SHADER);\r\n gl.shaderSource(fragSh, frag);\r\n gl.compileShader(fragSh);\r\n let prog = gl.createProgram();\r\n gl.attachShader(prog, vertSh);\r\n gl.attachShader(prog, fragSh);\r\n gl.linkProgram(prog);\r\n gl.useProgram(prog);\r\n gl.viewport(0,0, width, height);\r\n return prog;\r\n}\r\n\r\nlet webglCanvas = document.createElement(\"canvas\");\r\n\r\nconst enhanceCanvas = (canvasElement, useNewCanvas = false) => {\r\n\r\n let wgl = useNewCanvas ? document.createElement('canvas') : webglCanvas;\r\n\r\n if (!wgl.gl || useNewCanvas) {\r\n wgl.width = canvasElement.width;\r\n wgl.height = canvasElement.height;\r\n wgl.gl = wgl.getContext(\"webgl\");\r\n wgl.prog = prepareWebGL(wgl.gl, canvasElement.width, canvasElement.height);\r\n setArrays(wgl.gl, wgl.prog);\r\n const uSampler = wgl.gl.getUniformLocation(wgl.prog, 'uSampler');\r\n wgl.gl.uniform1i(uSampler, 0);\r\n }\r\n\r\n let gl = wgl.gl;\r\n const texture = loadTexture(gl, canvasElement);\r\n let ctx = canvasElement.getContext('2d');\r\n\r\n // render\r\n gl.activeTexture(gl.TEXTURE0);\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n gl.clearColor(0.0, 0.0, 0.0, 1.0);\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n gl.drawArrays(gl.TRIANGLES, 0, 6);\r\n ctx.drawImage(wgl, 0, 0, wgl.width, wgl.height, 0, 0, canvasElement.width, canvasElement.height);\r\n // render end\r\n\r\n}\r\n\r\nexport default enhanceCanvas\r\n","/**\r\n * Moves an element to a new position with a specified speed and returns a Promise that resolves when the animation is complete.\r\n * @param {HTMLElement} element - The element to move.\r\n * @param {number} newX - The new X-coordinate of the element.\r\n * @param {number} newY - The new Y-coordinate of the element.\r\n * @param {number} speed - The speed in pixels per second.\r\n * @returns {Promise} A Promise that resolves when the animation is complete.\r\n */\r\nimport {distanceToInches, parseImperialFractionToDecimal} from \"./sqftHelper\";\r\nimport EventManager from \"../components/canvas/store/sqftEventManager\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../constants\";\r\n\r\nexport const moveElement = (element, newX, newY, speed) => {\r\n return new Promise(resolve => {\r\n // Get the current coordinates of the element\r\n const oldX = element.offsetLeft;\r\n const oldY = element.offsetTop;\r\n\r\n // Calculate the distance between the old and new coordinates\r\n const distanceX = newX - oldX;\r\n const distanceY = newY - oldY;\r\n\r\n // Calculate the duration of the animation based on the speed\r\n const duration = Math.sqrt(distanceX ** 2 + distanceY ** 2) / speed;\r\n\r\n // Set the element to the initial position\r\n element.style.position = \"absolute\";\r\n element.style.left = oldX + \"px\";\r\n element.style.top = oldY + \"px\";\r\n\r\n // Animate the element to the new position\r\n const startTime = performance.now();\r\n function animate(currentTime) {\r\n const elapsedTime = currentTime - startTime;\r\n const progress = Math.min(elapsedTime / duration, 1);\r\n const x = oldX + distanceX * progress;\r\n const y = oldY + distanceY * progress;\r\n element.style.left = x + \"px\";\r\n element.style.top = y + \"px\";\r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n resolve(); // Animation complete, resolve the Promise\r\n }\r\n }\r\n requestAnimationFrame(animate);\r\n });\r\n}\r\n\r\nexport const delay = (time) => {\r\n return new Promise(resolve => setTimeout(resolve, time));\r\n}\r\n\r\nexport function createAdjustableInput({\r\n position = { x: 0, y: 0 },\r\n initialValue = \"\",\r\n min = 1,\r\n max = 1000,\r\n orientation = \"horizontal\",\r\n onChange = () => {},\r\n onClose = () => {},\r\n step = 1,\r\n longPressInterval = 50,\r\n longPressDelay = 200,\r\n }) {\r\n const objectName = { name: 'lineInput' }; // Unique identifier for EventManager\r\n let isClosed = false; // Flag to prevent duplicate close calls\r\n\r\n const inputWrapper = document.createElement(\"div\"); // Wrapper for input and buttons\r\n inputWrapper.className = \"line-input\";\r\n inputWrapper.style.position = \"absolute\";\r\n inputWrapper.style.left = `${position.x}px`;\r\n inputWrapper.style.top = `${position.y}px`;\r\n\r\n // Set orientation class\r\n if (orientation === \"horizontal\") {\r\n inputWrapper.classList.add(\"line-input-horizontal\");\r\n } else if (orientation === \"vertical\") {\r\n inputWrapper.classList.add(\"line-input-vertical\");\r\n }\r\n\r\n // Create input field\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.className = \"line-input-field\";\r\n input.setAttribute(\"min\", min.toString());\r\n input.setAttribute(\"max\", max.toString());\r\n input.value = initialValue;\r\n\r\n // Adjust input value within [min, max] bounds and trigger onChange\r\n const adjustInputValue = (step) => {\r\n let currentValue = parseImperialFractionToDecimal(input.value);\r\n currentValue += step;\r\n currentValue = Math.max(min, Math.min(currentValue, max)); // Ensure within bounds\r\n input.value = currentValue;\r\n onChange(currentValue);\r\n input.dispatchEvent(new Event(\"change\")); // Trigger change event for UI updates\r\n\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Imperial) {\r\n input.value = distanceToInches(currentValue).replace(\"\\\"\", \"\");\r\n } else {\r\n input.value = currentValue;\r\n }\r\n };\r\n\r\n let longPressTimeout;\r\n let delayTimeout;\r\n const startLongPress = (step) => {\r\n adjustInputValue(step);\r\n delayTimeout = setTimeout(() => {\r\n longPressTimeout = setInterval(() => adjustInputValue(step), longPressInterval);\r\n }, longPressDelay);\r\n };\r\n const stopLongPress = () => {\r\n clearInterval(longPressTimeout);\r\n clearTimeout(delayTimeout);\r\n input.focus();\r\n };\r\n\r\n // Create increment button with long press functionality\r\n const incrementButton = document.createElement(\"button\");\r\n incrementButton.className = \"increment-button\";\r\n incrementButton.textContent = \"▲\";\r\n incrementButton.onmousedown = () => startLongPress(step);\r\n incrementButton.onmouseup = stopLongPress;\r\n incrementButton.onmouseleave = stopLongPress;\r\n\r\n // Create decrement button with long press functionality\r\n const decrementButton = document.createElement(\"button\");\r\n decrementButton.className = \"decrement-button\";\r\n decrementButton.textContent = \"▼\";\r\n decrementButton.onmousedown = () => startLongPress(-step);\r\n decrementButton.onmouseup = stopLongPress;\r\n decrementButton.onmouseleave = stopLongPress;\r\n\r\n // Append elements to wrapper\r\n inputWrapper.appendChild(input);\r\n inputWrapper.appendChild(incrementButton);\r\n inputWrapper.appendChild(decrementButton);\r\n\r\n // Use onchange instead of input for final validation after user finishes typing\r\n input.onchange = (event) => {\r\n let value = parseImperialFractionToDecimal(event.target.value);\r\n value = Math.max(min, Math.min(value, max)); // Ensure within bounds\r\n input.value = value;\r\n onChange(value);\r\n };\r\n\r\n // Close input when pressing Enter or if blurred outside of increment/decrement buttons\r\n const closeInput = () => {\r\n if (isClosed) return; // Prevent duplicate calls\r\n isClosed = true;\r\n\r\n onClose();\r\n inputWrapper.remove();\r\n EventManager.removeEvent(objectName);\r\n document.removeEventListener(\"mousedown\", handleOutsideClick);\r\n };\r\n\r\n input.addEventListener(\"keydown\", (event) => {\r\n if (event.key === \"Enter\") {\r\n input.blur(); // Explicitly trigger blur to ensure onchange fires\r\n closeInput();\r\n }\r\n });\r\n\r\n const handleOutsideClick = (event) => {\r\n if (!inputWrapper.contains(event.target)) {\r\n closeInput();\r\n }\r\n };\r\n\r\n // Add event to close input on MOUSE_DOWN outside, unless the input is focused\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n closeInput,\r\n objectName,\r\n EventManager.priorities.OVERALL\r\n );\r\n document.addEventListener(\"mousedown\", handleOutsideClick);\r\n\r\n return inputWrapper;\r\n}\r\n","import {SHAPE_PART_ID, SHAPE_TYPE} from \"../constants\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\nimport Polygon from \"../components/canvas/core/shapes/layouts/polygon\";\r\nimport {getAreaByShoelaceFormula} from \"./sqftHelper\";\r\nimport Wall from \"../components/canvas/core/shapes/wall\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\n\r\nexport const enableFreeDrawMode = () => {\r\n\r\n}\r\n\r\nexport const disableFreeDrawMode = () => {\r\n\r\n}\r\n\r\n/**\r\n * @param pointCords array\r\n * @param partId string\r\n * @param isClonePointRequired boolean\r\n * @param historyPosition\r\n * @param canPointsBeMoved\r\n * @param fromLayout\r\n * @param shapeParams\r\n * @param shapeCreationParams\r\n */\r\nexport const createShapeFromPoints = (\r\n pointCords,\r\n partId = SHAPE_PART_ID.seamPiece,\r\n isClonePointRequired = false,\r\n historyPosition = null,\r\n canPointsBeMoved = false,\r\n fromLayout = null,\r\n shapeParams = {},\r\n shapeCreationParams = {}\r\n) => {\r\n let polygonLines = new Polygon(pointCords, isClonePointRequired, canPointsBeMoved);\r\n let polygonArea = getAreaByShoelaceFormula(polygonLines);\r\n if (polygonArea < 0) {\r\n //create counterclockwise shape\r\n polygonLines = new Polygon(pointCords.reverse(), isClonePointRequired, canPointsBeMoved);\r\n polygonArea = getAreaByShoelaceFormula(polygonLines);\r\n }\r\n\r\n if (shapeCreationParams.minimumShapeArea && polygonArea < shapeCreationParams.minimumShapeArea) {\r\n console.log(\"polygon area is too small\");\r\n console.log(\"polygon area\", polygonArea);\r\n console.log(\"minimum polygon Area\", shapeCreationParams.minimumShapeArea);\r\n return null\r\n }\r\n if (shapeCreationParams.maximumShapeArea && polygonArea > shapeCreationParams.maximumShapeArea) {\r\n console.log(\"polygon area is too big\");\r\n console.log(\"polygon area\", polygonArea);\r\n console.log(\"maximum shape area\", shapeCreationParams.maximumShapeArea);\r\n return null\r\n }\r\n if (shapeCreationParams.maximumLineDistance) {\r\n for (const polygonLine of polygonLines) {\r\n if (polygonLine.getLineDistance() > shapeCreationParams.maximumLineDistance) {\r\n console.log(\"polygon line is too big\");\r\n console.log(\"polygon line distance\", polygonLine.getLineDistance());\r\n console.log(\"maximum line Distance\", shapeCreationParams.maximumLineDistance);\r\n return null\r\n }\r\n }\r\n }\r\n\r\n return sqftShapeManager.addShape(\r\n polygonLines, SHAPE_TYPE.polygon, historyPosition, partId, fromLayout, shapeParams\r\n );\r\n};\r\n\r\n/**\r\n *\r\n * @param points {array}\r\n * @param centerPoint {object}\r\n * @param lockedAngleStep\r\n */\r\nexport const createWallFromPointsV2 = (points, centerPoint, lockedAngleStep) => {\r\n const wall = new Wall(points, centerPoint, lockedAngleStep);\r\n workspaceControllers.walls.addResource(wall);\r\n return wall\r\n}\r\n\r\n/**\r\n *\r\n * @param points array\r\n */\r\nexport const createShapeFromCorePoints = (points) => {\r\n void points;\r\n}\r\n\r\n/**\r\n *\r\n * @param points array\r\n */\r\nexport const createPolygonFromCorePoints = (points) => {\r\n void points;\r\n //return new SQFTShapeFigure(points);\r\n}\r\n","import config from \"../../../../store/sqftConfig\";\r\nimport {isIE} from \"../../../../../../helpers/sqftHelper\";\r\n\r\nexport default class DrawImage {\r\n\r\n static renderImage = (svgImageId, ctx, x, y, width, height, isCentered = true, isScale = true) => {\r\n let scale = config.scale;\r\n let svg = document.getElementById(svgImageId);\r\n if (!svg) {\r\n console.error(\"svg with id not found\", svgImageId);\r\n return\r\n }\r\n let img = new Image(),\r\n xml = new XMLSerializer().serializeToString(svg), // get svg data\r\n svg64 = btoa(xml); // make it base64\r\n let posX = x;\r\n let posY = y;\r\n let svgImageDataURI = \"\";\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64; // set it as the source of the img element\r\n if (isScale) {\r\n width = width / config.scale * config.defaultScale;\r\n height = height / config.scale * config.defaultScale;\r\n }\r\n if (isCentered) {\r\n posX -= width / 2 ;\r\n posY -= height / 2;\r\n }\r\n\r\n if (isIE()) {\r\n svgImageDataURI = atob(this.getSrc(img).replace(/data:image\\/svg\\+xml;base64,/, ''));\r\n }\r\n if (!isIE()) {\r\n ctx.drawImage(img, posX, posY , width * scale, height * scale);\r\n } else if(svgImageDataURI) {\r\n ctx.drawSvg(svgImageDataURI, posX, posY + 1, 0, 0);\r\n }\r\n };\r\n\r\n // static isIE() {\r\n // return(/Trident/i).test(window.navigator.appVersion);\r\n // }\r\n\r\n static getSrc(htmlImg) {\r\n if(htmlImg) {\r\n let src = htmlImg.getAttribute('src');\r\n if(src) {\r\n return src;\r\n }\r\n src = htmlImg.getAttribute(\"style\");\r\n if(src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n }\r\n}\r\n","import {getClosestPoint, getIntersectCords, getMousePositionOnField} from \"../../../../../../helpers/sqftHelper\";\r\nimport store from \"../../../../../../../../store\";\r\n\r\nexport const getHorizontalLineIntersectionPoints = (mousePos, shape, lines = shape.getLines()) => {\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const serverState = store.getState().serverState;\r\n const pos = shape.getPosition();\r\n\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n let verticalLinePoint1 = {x: -serverState.windowWidth, y: Math.round10(mousePosOnShape.y, -1)};\r\n let verticalLinePoint2 = {x: serverState.windowWidth, y: Math.round10(mousePosOnShape.y, -1)};\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n lines, verticalLinePoint1, verticalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n intersectionXPointAndLine1.intersectionCords = {x: Math.round10(intersectionXPointAndLine1.intersectionCords.x, -1), y: Math.round10(mousePosOnFiled.y - pos.y, -1)};\r\n intersectionXPointAndLine2.intersectionCords = {x: Math.round10(intersectionXPointAndLine2.intersectionCords.x, -1), y: Math.round10(mousePosOnFiled.y - pos.y, -1)};\r\n\r\n return [intersectionXPointAndLine1, intersectionXPointAndLine2]\r\n }\r\n\r\n return []\r\n}\r\n\r\nexport const getVerticalLineIntersectionPoints = (mousePos, shape, lines = shape.getLines()) => {\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const serverState = store.getState().serverState;\r\n const pos = shape.getPosition();\r\n\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n //let verticalLinePoint1 = {x: -serverState.windowWidth, y: mousePosOnShape.y};\r\n //let verticalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n\r\n let verticalLinePoint1 = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: -serverState.windowHeight};\r\n let verticalLinePoint2 = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: serverState.windowHeight};\r\n // let verticalLinePoint1 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: -serverState.windowHeight};\r\n // let verticalLinePoint2 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: serverState.windowHeight};\r\n\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getClosestIntersectionPoints(\r\n lines, verticalLinePoint1, verticalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n intersectionPointAndLine1.intersectionCords = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: Math.round10(intersectionPointAndLine1.intersectionCords.y, -1)};\r\n intersectionPointAndLine2.intersectionCords = {x: Math.round10(mousePosOnFiled.x - pos.x, -1), y: Math.round10(intersectionPointAndLine2.intersectionCords.y, -1)};\r\n // let intersectionPoint1 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: intersectionXPoint1.y};\r\n // let intersectionPoint2 = {x: Math.ceil10(mousePosOnFiled.x - pos.x, 2), y: intersectionXPoint2.y};\r\n\r\n return [intersectionPointAndLine1, intersectionPointAndLine2]\r\n }\r\n\r\n return []\r\n}\r\n\r\n/**\r\n * Return only two closest points from the array of intersectionPointsAndLines\r\n * @param {*} lines\r\n * @param {*} intersectionPoint1\r\n * @param {*} intersectionPoint2\r\n * @param {*} closestPont\r\n * @return {array} [{intersectionPoint, line}]\r\n */\r\nexport const getClosestIntersectionPoints = (lines, intersectionPoint1, intersectionPoint2, closestPont) => {\r\n let intersectionPointsAndLines = getIntersectionPointsAndLines(lines, intersectionPoint1, intersectionPoint2)\r\n if (intersectionPointsAndLines.length >= 1) {\r\n let intersectionPoints = intersectionPointsAndLines.map(pointAndLine => pointAndLine.intersectionCords);\r\n let closestPont1 = getClosestPoint(closestPont, intersectionPoints);\r\n let intersectionPointsAndLinesWithout1Point = intersectionPointsAndLines.filter(pointAndLine => pointAndLine.intersectionCords !== closestPont1);\r\n intersectionPoints = intersectionPointsAndLinesWithout1Point.map(pointAndLine => pointAndLine.intersectionCords);\r\n\r\n let closestPont2 = getClosestPoint(closestPont, intersectionPoints);\r\n\r\n return intersectionPointsAndLines.filter(pointAndLine => {\r\n return pointAndLine.intersectionCords === closestPont1 || pointAndLine.intersectionCords === closestPont2\r\n });\r\n }\r\n\r\n return intersectionPointsAndLines\r\n}\r\n\r\n/**\r\n * Return all intersectionsPointsAndLines between lines and two coords\r\n * @param {*} lines\r\n * @param {*} intersectionPoint1\r\n * @param {*} intersectionPoint2\r\n * @return {array} [{intersectionPoint, line}]\r\n */\r\nexport const getIntersectionPointsAndLines = (lines, intersectionPoint1, intersectionPoint2) => {\r\n let intersectionPoints = [];\r\n\r\n lines.forEach((line) => {\r\n let intersectionCords = getIntersectCords(\r\n Math.round10(line.from.x, -1), Math.round10(line.from.y, -1),\r\n Math.round10(line.to.x, -1), Math.round10(line.to.y, -1),\r\n Math.round10(intersectionPoint1.x, -1), Math.round10(intersectionPoint1.y, -1),\r\n Math.round10(intersectionPoint2.x, -1), Math.round10(intersectionPoint2.y, -1),\r\n false\r\n );\r\n if (intersectionCords) {\r\n intersectionPoints.push({intersectionCords, line});\r\n }\r\n });\r\n\r\n return intersectionPoints\r\n}\r\n\r\n/**\r\n *\r\n * @param circleX {int}\r\n * @param circleY {int}\r\n * @param circleRadius {int}\r\n * @param lineX1 {int}\r\n * @param lineY1 {int}\r\n * @param lineX2 {int}\r\n * @param lineY2 {int}\r\n * @return {null|{y1: *, x1: *, y2: *, x2: *}|{x: *, y: *}}\r\n */\r\nexport const getCircleLineIntersection = (circleX, circleY, circleRadius, lineX1, lineY1, lineX2, lineY2) => {\r\n const dx = lineX2 - lineX1;\r\n const dy = lineY2 - lineY1;\r\n const a = dx * dx + dy * dy;\r\n const b = 2 * (dx * (lineX1 - circleX) + dy * (lineY1 - circleY));\r\n const c = circleX * circleX + circleY * circleY + lineX1 * lineX1 + lineY1 * lineY1\r\n - 2 * (circleX * lineX1 + circleY * lineY1) - circleRadius * circleRadius;\r\n const delta = b * b - 4 * a * c;\r\n\r\n if (delta < 0) {\r\n return null; // no intersection\r\n } else if (delta === 0) {\r\n // the line is tangent to the circle\r\n const t = -b / (2 * a);\r\n const intersectionX = lineX1 + t * dx;\r\n const intersectionY = lineY1 + t * dy;\r\n return { x: intersectionX, y: intersectionY };\r\n } else {\r\n // the line intersects the circle at two points\r\n const t1 = (-b + Math.sqrt(delta)) / (2 * a);\r\n const t2 = (-b - Math.sqrt(delta)) / (2 * a);\r\n const intersection1X = lineX1 + t1 * dx;\r\n const intersection1Y = lineY1 + t1 * dy;\r\n const intersection2X = lineX1 + t2 * dx;\r\n const intersection2Y = lineY1 + t2 * dy;\r\n return { x1: intersection1X, y1: intersection1Y, x2: intersection2X, y2: intersection2Y };\r\n }\r\n}\r\n","import {\r\n getMidPoint,\r\n getPointOnTheLine,\r\n} from \"../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\n\r\nexport default class RenderCabinets {\r\n\r\n /**\r\n * @param points {[{x:int, y:int}]}\r\n * @param distance {int}\r\n * @return {[DiagonalPointsForTheSquareInterface]}\r\n */\r\n static getDiagonalPointsForTheSquare = (points, distance) => {\r\n let returnPoints = [];\r\n for (const pointIndex in points) {\r\n if (points.hasOwnProperty(pointIndex)) {\r\n const len = points.length;\r\n const current = points[+pointIndex];\r\n const previous = points[(+pointIndex + len - 1) % len];\r\n const next = points[(+pointIndex + 1) % len];\r\n\r\n const linePoint1 = getPointOnTheLine(current, previous, distance);\r\n const linePoint2 = getPointOnTheLine(current, next, distance);\r\n const diagonalPoint = getMidPoint(linePoint1, linePoint2);\r\n\r\n returnPoints.push({\r\n currentPoint: current,\r\n diagonalPoint: diagonalPoint\r\n });\r\n }\r\n }\r\n\r\n return returnPoints\r\n }\r\n\r\n /**\r\n * @param points {[{x:int, y:int}]}\r\n * @param distance {int}\r\n * @param linePointsIds {[]}\r\n * @return {[DiagonalPointsForTheSquareInterface]}\r\n */\r\n static getDiagonalPointsForTheLine = (points, distance, linePointsIds) => {\r\n const diagonalSquarePoint = RenderCabinets.getDiagonalPointsForTheSquare(points, distance);\r\n\r\n return diagonalSquarePoint.filter(squarePoint => {\r\n return linePointsIds.some(linePointId => {\r\n return linePointId === squarePoint.currentPoint.id\r\n });\r\n })\r\n }\r\n\r\n static renderCrownMolding = (ctx, crownMoldingPoints) => {\r\n //render diagonal lines\r\n ctx.beginPath();\r\n ctx.moveTo(crownMoldingPoints[0].diagonalPoint.x, crownMoldingPoints[0].diagonalPoint.y);\r\n for (const crownMoldingPoint of crownMoldingPoints) {\r\n ctx.lineWidth = 2;\r\n ctx.lineTo(crownMoldingPoint.diagonalPoint.x, crownMoldingPoint.diagonalPoint.y);\r\n }\r\n ctx.lineTo(crownMoldingPoints[0].diagonalPoint.x, crownMoldingPoints[0].diagonalPoint.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n //render border\r\n for (const crownMoldingPoint of crownMoldingPoints) {\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.moveTo(crownMoldingPoint.currentPoint.x, crownMoldingPoint.currentPoint.y);\r\n ctx.lineTo(crownMoldingPoint.diagonalPoint.x, crownMoldingPoint.diagonalPoint.y);\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n static renderEndCap = (ctx, line) => {\r\n //render thick line\r\n const fromPointField = line.from.getPointField();\r\n const toPointField = line.to.getPointField();\r\n ctx.beginPath();\r\n ctx.moveTo(fromPointField.x, fromPointField.y);\r\n ctx.lineWidth = 6;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n ctx.lineTo(toPointField.x, toPointField.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport $ from \"jquery\";\r\n\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport Config from \"../../../store/sqftConfig\";\r\nimport {\r\n getAngleBetweenTwoPoints,\r\n getMidPoint, getMinInArray, getParallelPoints,\r\n getPointDistance, getPointField, getSectionPartPoint, isDisabledInPopupWithParents,\r\n measureDistanceToInches, numToLetter,\r\n orientation\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport point from \"../point\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\n//import TranslatesProvider from \"../../../../../translatesProvider\";\r\nimport MiteredSegment from \"../shapeParts/mitered/miteredSegment\";\r\nimport NumberText from \"../../workspace/text/numberText\";\r\nimport DrawImage from \"../../workspace/textBox/draw/drawImage\";\r\nimport store from \"../../../../../../../store\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n isDisabledInPopupShouldBeHidden, MITERED_OVERLAY_TYPE,\r\n SIDEBAR_BUTTONS_MENU,\r\n SIDEBAR_NAVIGATION_BUTTONS\r\n} from \"../../../../../constants\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport sqftSlabManager from \"../../../store/sqftSlabManager\";\r\nimport {getQtCatName} from \"../../../../../helpers/sqftQuotesHelper\";\r\n\r\nexport default class MiteredOverlay {\r\n id;\r\n sectionIndex;\r\n line;\r\n self = this;\r\n qtCatName = null;\r\n featureId = null;\r\n type = null; //mitered || underlayment\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHoveringPoint: false,\r\n hoveredPoint: null,\r\n isHoveredOverText: false,\r\n hoveredText: {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n },\r\n height: 1.5,\r\n heightMetric: 40,\r\n thickness: 4,\r\n thicknessMetric: 40,\r\n maxSegmentPriority: 0\r\n };\r\n design = {\r\n //initialSize: 30,\r\n minMiteredSize: 1,\r\n measurementMargin: 30, //11,\r\n dragPointMargin: 28,\r\n rulerMargin: 33,\r\n heightMargin: 60,\r\n sectionIndexMargin: 95,\r\n sectionArrowWidth: 30,\r\n letterMargin: 18,\r\n thicknessMargin: -18,\r\n movePointOffset: 15,\r\n lineTextColor: COLOR_THEMES[Config.activeTheme].primary,\r\n fontColor: COLOR_THEMES[Config.activeTheme].primary,\r\n deleteFillStyle: \"#e77f8d\", //\"rgba(253,2,33, 0.5)\",\r\n fontFamily: 'playbold',\r\n fontHeight: 16\r\n };\r\n miteredPoints = []; // array of points\r\n _segments = []; // array of MiteredSegments\r\n miteredTextParameters = []; //array of objects\r\n heightNumberText = {}; //array of objects\r\n\r\n constructor(line, sectionIndex, type) {\r\n this.line = line;\r\n this.sectionIndex = sectionIndex;\r\n this.type = type;\r\n this.id = uuid();\r\n this.qtCatName = getQtCatName();\r\n }\r\n\r\n setMiteredPoints = (value) => { this.miteredPoints = value; }\r\n getSegments = () => { return this._segments; }\r\n getParent = () => { return this.line; }\r\n setSegments = (value) => { this._segments = value; }\r\n setFeatureId = (value) => { this.featureId = value; }\r\n\r\n movePointInOrStop = (point1, axis, diff, biggestLineCord, smallestLineCord, stopPointLeft, stopPointRight, moveStopPoints) => {\r\n //stop on other move points\r\n let smallestPointStopped = null;\r\n let biggestPointStopped = null;\r\n if (point1[axis] - diff < stopPointLeft[axis]) {\r\n smallestLineCord = stopPointLeft[axis] + this.design.minMiteredSize;\r\n smallestPointStopped = stopPointLeft;\r\n if(moveStopPoints) {\r\n let lengthDiff = point1[axis] - stopPointLeft[axis] - diff;\r\n this.movePoint(-lengthDiff, point1[axis] - diff, stopPointLeft, true);\r\n this.moveMeasurements(stopPointLeft);\r\n smallestLineCord = stopPointLeft[axis];\r\n }\r\n } else if (point1[axis] - diff > stopPointRight[axis]) {\r\n biggestLineCord = stopPointRight[axis] - this.design.minMiteredSize;\r\n biggestPointStopped = stopPointRight;\r\n if(moveStopPoints) {\r\n let lengthDiff = point1[axis] - stopPointRight[axis] - diff;\r\n this.movePoint(-lengthDiff, lengthDiff, stopPointRight, true);\r\n this.moveMeasurements(stopPointRight);\r\n biggestLineCord = stopPointRight[axis];\r\n }\r\n }\r\n\r\n // keep inside line\r\n if (point1[axis] - diff >= biggestLineCord) {\r\n point1[axis] = biggestLineCord;\r\n } else if (point1[axis] - diff <= smallestLineCord) {\r\n point1[axis] = smallestLineCord;\r\n } else {\r\n point1[axis] -= diff;\r\n }\r\n\r\n return [smallestPointStopped, biggestPointStopped]\r\n };\r\n\r\n getMousePosPointDiff = (diff, point, mousePos, sameOrientation = false) => {\r\n if(Config.measureUnit === \"Metric\") {\r\n let offset = 0;\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n offset = sameOrientation ? mousePos.x - point.getPointField().x : mousePos.y - point.getPointField().y;\r\n break;\r\n case orientation.VERTICAL:\r\n offset = sameOrientation? mousePos.y - point.getPointField().y : mousePos.x - point.getPointField().x;\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n if(!(-this.design.movePointOffset / 2 > offset || offset > 3 * this.design.movePointOffset)) {\r\n diff = diff / Config.millimetersMultiplier;\r\n }\r\n }\r\n\r\n return diff\r\n };\r\n\r\n getPoints = () => { return this.miteredPoints; };\r\n getMiteredTextParameter = () => { return this.miteredTextParameters; };\r\n isMiteredPointMoving = () => { return this.state.mouseDown};\r\n\r\n destroy = (protect) => {\r\n if(!protect) {\r\n EventManager.removeEvent(this);\r\n this.miteredPoints.forEach((point) => point.destroy());\r\n this._segments.forEach((segment) => {\r\n segment.length.destroy();\r\n if (segment.thickness) {\r\n segment.thickness.destroy();\r\n }\r\n });\r\n this.heightNumberText.destroy();\r\n\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.deleteSection(this);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.deleteSection(this);\r\n }\r\n }\r\n };\r\n\r\n init = (importData = null) => {\r\n if (this.line.overlay) {\r\n this.line.overlay.destroy();\r\n }\r\n if(!importData) {\r\n this.preparePoints(false);\r\n }\r\n this.prepareMeasurements(importData);\r\n this.prepareHeight(importData);\r\n this.initEvents();\r\n\r\n //points\r\n this.miteredPoints.forEach((point, index) => {\r\n if (index === 0 || index === this.miteredPoints.length - 1) {\r\n this.initPoint(point, 'blank');\r\n } else {\r\n this.initPoint(point, 'white-circle');\r\n }\r\n });\r\n\r\n // todo fix bumpout rotation and remove this\r\n $('.button--angle').addClass('button--disabled');\r\n /////////////////////////////////////////\r\n };\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n //todo priority\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.heightNumberText.deregisterEvents();\r\n for (let segment of this._segments ) {\r\n segment.length.deregisterEvents();\r\n if (segment.thickness) {\r\n segment.thickness.deregisterEvents();\r\n }\r\n }\r\n };\r\n reInitEvents = () => {\r\n this.initEvents();\r\n this.heightNumberText.reInitEvents();\r\n for (let segment of this._segments ) {\r\n segment.length.reInitEvents();\r\n if (segment.thickness) {\r\n segment.thickness.reInitEvents();\r\n }\r\n }\r\n };\r\n\r\n getMiteredTotalArea = () => {\r\n let totalArea = 0,\r\n lineLength = Config.measureUnit === \"Metric\" ? this.line.getLineLengthMm() : this.line.getLineLength(),\r\n height = Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n //segmentsLength = 0,\r\n //minThicknessToCount = Config.measureUnit === \"Metric\" ? 40 : 1;\r\n\r\n // for (let segment of this._segments) {\r\n // if (segment instanceof MiteredSegment) {\r\n // if(segment.thickness.value >= minThicknessToCount ) {\r\n // let segmentLength = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(segment.length.value)\r\n // : this.line.addDecimalToLength(measureDistanceToInches(segment.length.value));\r\n //\r\n // segmentsLength += +segment.thickness.value + +segmentLength\r\n // }\r\n // }\r\n // }\r\n\r\n //totalArea = height * (lineLength + segmentsLength);\r\n totalArea = height * (lineLength);\r\n\r\n return totalArea;\r\n };\r\n\r\n export = () => {\r\n return {\r\n miteredPoints : this.miteredPoints.map((point) => {\r\n return point.export();\r\n }),\r\n state: this.state,\r\n _segments: this._segments.map((segment) => {\r\n return segment.exportSegment()\r\n }),\r\n }\r\n };\r\n\r\n import = (line, importMitered) => {\r\n for (const importPoint of importMitered.miteredPoints) {\r\n const preparePoint = new point();\r\n preparePoint.import(importPoint);\r\n\r\n this.miteredPoints.push(preparePoint);\r\n }\r\n this.state = importMitered.state;\r\n this.state = importMitered.state;\r\n };\r\n\r\n preparePoints = (shouldAddTwoPointsInTheMiddle = false) => {\r\n let point33 = getSectionPartPoint(this.line.from, this.line.to, 2),\r\n point66 = getSectionPartPoint(this.line.from, this.line.to, 1/2);\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners();\r\n const miteredPoints = [\r\n new point(fromPointWithIndent.x, fromPointWithIndent.y),\r\n ...(shouldAddTwoPointsInTheMiddle ? [new point(point33.x, point33.y), new point(point66.x, point66.y)] : []),\r\n new point(toPointWithIndent.x, toPointWithIndent.y)\r\n ];\r\n\r\n this.setMiteredPoints(miteredPoints);\r\n };\r\n\r\n prepareMeasurements = (importData = null) => {\r\n this.miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if(this.miteredPoints[next]) {\r\n this.addMeasurementBetweenPoints(point, this.miteredPoints[next], importData ? importData._segments[index] : null);\r\n }\r\n });\r\n };\r\n\r\n prepareHeight = (importData = null) => {\r\n const midPoint = getMidPoint(this.line.from, this.line.to),\r\n lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight;\r\n\r\n let xMarginHeight = 0,\r\n yMarginHeight = -this.design.heightMargin - fontHeight,\r\n angle = getAngleBetweenTwoPoints(this.line.from, this.line.to);\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"west\") {\r\n angle += 180\r\n yMarginHeight = this.design.heightMargin + fontHeight;\r\n }\r\n break;\r\n }\r\n case \"vertical\": {\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n let posHeight = {\r\n // betweenPoints: {\r\n // pointFrom: this.line.from,\r\n // pointTo: this.line.to\r\n // },\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xMarginHeight,\r\n yOffset: yMarginHeight,\r\n orientation: this.line.getLineDirectionV2(),\r\n angle: angle\r\n };\r\n let design = {\r\n valuePrefix: workspace.intl.formatMessage({id: \"sqft.navigation.mitered.height\"}) + \": \",\r\n };\r\n\r\n let heightValue = importData\r\n ? importData._segments[0]\r\n ? importData._segments[0].height\r\n : null\r\n : Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n\r\n this.heightNumberText = new NumberText(heightValue, posHeight, design, this, this.setSegmentHeightFromNumberValue);\r\n };\r\n\r\n updateMinMaxPoints = () => {\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners();\r\n // Minimum and maximum values for limiting points\r\n const minX = Math.min(fromPointWithIndent.x, toPointWithIndent.x);\r\n const minY = Math.min(fromPointWithIndent.y, toPointWithIndent.y);\r\n const maxX = Math.max(fromPointWithIndent.x, toPointWithIndent.x);\r\n const maxY = Math.max(fromPointWithIndent.y, toPointWithIndent.y);\r\n\r\n // Limiting points within specified boundaries\r\n for (const miteredPoint of this.miteredPoints) {\r\n miteredPoint.x = Math.max(minX, Math.min(maxX, miteredPoint.x));\r\n miteredPoint.y = Math.max(minY, Math.min(maxY, miteredPoint.y));\r\n }\r\n\r\n // Move the nearest points to the specified minimum and maximum values\r\n let startPoint = this.miteredPoints[0],\r\n endPoint = this.miteredPoints[this.miteredPoints.length - 1];\r\n\r\n startPoint.x = fromPointWithIndent.x;\r\n startPoint.y = fromPointWithIndent.y;\r\n endPoint.x = toPointWithIndent.x;\r\n endPoint.y = toPointWithIndent.y;\r\n\r\n this.updateSegmentsLength();\r\n this.updateSegmentThicknessPos();\r\n }\r\n\r\n addMeasurementBetweenPoints = (point1, point2, importSegment = null) => {\r\n let angle = getAngleBetweenTwoPoints(this.line.from, this.line.to);\r\n const midPoint = getMidPoint(point1, point2),\r\n lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight,\r\n // distance = Config.measureUnit === \"Metric\"\r\n // ? distanceToMillimeters(getPointDistance(point1, point2))\r\n // : getPointDistance(point1, point2)\r\n\r\n distance = getPointDistance(point1, point2),\r\n point1Index = this.miteredPoints.indexOf(point1),\r\n point2Index = this.miteredPoints.indexOf(point2);\r\n\r\n void point2Index;\r\n let yOffset = -this.design.measurementMargin - fontHeight,\r\n xOffset = 0;\r\n // thicknessXOffsetValue = 0,\r\n // xMarginLine = 0,\r\n // yMarginLine = 0,\r\n // thicknessYOffsetValue = 0;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"west\") {\r\n angle += 180\r\n yOffset = this.design.heightMargin - fontHeight;\r\n }\r\n //yOffset = lineDirection.newDirection === \"west\" ? this.design.measurementMargin + fontHeight : -this.design.measurementMargin -fontHeight;\r\n\r\n // yMarginLine = (lineDirection.newDirection === \"west\" ? this.design.thicknessMargin : -this.design.thicknessMargin);\r\n //\r\n // thicknessXOffsetValue = (lineDirection.newDirection === \"east\" ? 15 : 15);\r\n // thicknessYOffsetValue = (lineDirection.newDirection === \"east\" ? 16 : -14);\r\n break;\r\n }\r\n case \"vertical\": {\r\n //xOffset = (lineDirection.newDirection === \"south\" ? this.design.measurementMargin + 10 : -this.design.measurementMargin - 10);\r\n\r\n // xMarginLine = (lineDirection.newDirection === \"south\" ? this.design.thicknessMargin: -this.design.thicknessMargin);\r\n //\r\n // thicknessXOffsetValue = (lineDirection.newDirection === \"north\" ? 35 : -16);\r\n // thicknessYOffsetValue = (lineDirection.newDirection === \"north\" ? 5 : 6);\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": { break; }\r\n case \"NORTHEAST\": { break; }\r\n case \"SOUTHWEST\": { break; }\r\n case \"SOUTHEAST\": { break; }\r\n default: break;\r\n }\r\n\r\n let pos = {\r\n x: midPoint.x,\r\n y: midPoint.y,\r\n xOffset: xOffset,\r\n yOffset: yOffset,\r\n orientation: this.line.getLineDirectionV2(),\r\n angle: angle,\r\n };\r\n\r\n // let posThickness = {\r\n // x: midPoint.x,\r\n // y: midPoint.y,\r\n // xOffset: thicknessXOffsetValue + xMarginLine,\r\n // yOffset: thicknessYOffsetValue + yMarginLine,\r\n // orientation: this.line.getLineDirectionV2()\r\n // };\r\n\r\n let design = {\r\n isLength: true\r\n };\r\n\r\n let lengthText = new NumberText(distance, pos, design, this, this.setSegmentLengthFromNumberValue);\r\n let height = importSegment\r\n ? importSegment.height && importSegment.height\r\n : Config.measureUnit === \"Metric\" ? this.state.heightMetric : this.state.height;\r\n // let thicknessValue = importSegment && importSegment.thickness\r\n // ? importSegment.thickness\r\n // : Config.measureUnit === \"Metric\" ? this.state.thicknessMetric : this.state.thickness;\r\n //let thickness = new NumberText(thicknessValue, posThickness, {}, this, this.setSegmentThicknessFromNumberValue);\r\n let segment = new MiteredSegment(lengthText, height, null);\r\n // todo logic combining miteredPoints and segments\r\n this._segments.splice(point1Index, 0, segment);\r\n };\r\n\r\n getPointDistance(point, pos) {\r\n let pointField = point.getPointField();\r\n\r\n return Math.sqrt(Math.pow(pointField.x - pos.x, 2) + Math.pow(pointField.y - pos.y, 2))\r\n }\r\n\r\n getMaxLength = () => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(this.line.getLineLength()).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : this.line.getLineLength();\r\n }\r\n\r\n getPointBetweenCords = (mousePos) => {\r\n const closest = this.miteredPoints.reduce((a, b) => {\r\n return this.getPointDistance(a, mousePos) < this.getPointDistance(b, mousePos) ? a : b\r\n });\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n let secondPoint = null;\r\n let isPrev = false;\r\n let lineDirection = this.line.getLineDirection();\r\n\r\n if(!this.miteredPoints[closestIndex + 1]) {\r\n secondPoint = this.miteredPoints[closestIndex - 1];\r\n isPrev = true;\r\n } else if(!this.miteredPoints[closestIndex - 1]) {\r\n secondPoint = this.miteredPoints[closestIndex + 1];\r\n isPrev = false;\r\n } else {\r\n let prevPoint = this.miteredPoints[closestIndex - 1];\r\n let nextPoint = this.miteredPoints[closestIndex + 1];\r\n let closestPointField = closest.getPointField();\r\n\r\n // todo logic\r\n //isPrev = this.getPointDistance(prevPoint, mousePos) < this.getPointDistance(nextPoint, mousePos);\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n isPrev = lineDirection.newDirection === \"east\" ? mousePos.x < closestPointField.x : mousePos.x > closestPointField.x;\r\n break;\r\n }\r\n case \"vertical\": {\r\n isPrev = lineDirection.newDirection === \"north\" ? mousePos.y > closestPointField.y : mousePos.y < closestPointField.y;\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": { break; }\r\n case \"NORTHEAST\": { break; }\r\n case \"SOUTHWEST\": { break; }\r\n case \"SOUTHEAST\": { break; }\r\n default: break;\r\n }\r\n\r\n secondPoint = isPrev ? prevPoint : nextPoint;\r\n }\r\n\r\n return [closest, secondPoint, isPrev];\r\n };\r\n\r\n addPointBetweenPoints = (closest, secondPoint, isPrev) => {\r\n const midPoint = getMidPoint(closest, secondPoint);\r\n const newPoint = new point(midPoint.x, midPoint.y);\r\n this.initPoint(newPoint);\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n\r\n this.miteredPoints.splice(isPrev ? closestIndex : closestIndex + 1, 0, newPoint);\r\n\r\n return newPoint;\r\n };\r\n\r\n getSegmentBetweenPoints = (point1, point2) => {\r\n const point1Index = this.miteredPoints.indexOf(point1);\r\n const point2Index = this.miteredPoints.indexOf(point2);\r\n\r\n return this._segments[point2Index > point1Index ? point1Index : point2Index];\r\n };\r\n\r\n getSegmentPointsBySegment = (segment) => {\r\n const segmentIndex = this._segments.indexOf(segment);\r\n\r\n return [this.miteredPoints[segmentIndex], this.miteredPoints[segmentIndex + 1]];\r\n };\r\n\r\n removeMeasurementBetweenPoints = (closest, secondPoint, isPrev) => {\r\n const closestIndex = this.miteredPoints.indexOf(closest);\r\n const removeIndex = isPrev ? closestIndex - 2: closestIndex + 2;\r\n\r\n this._segments[removeIndex].length.destroy();\r\n if (this._segments[removeIndex].thickness) {\r\n this._segments[removeIndex].thickness.destroy();\r\n }\r\n this._segments.splice(removeIndex, 1);\r\n };\r\n\r\n deletePoint = (point) => {\r\n const pointIndex = this.miteredPoints.indexOf(point);\r\n\r\n //add new segment\r\n this.addMeasurementBetweenPoints(this.miteredPoints[pointIndex -1], this.miteredPoints[pointIndex +1]);\r\n\r\n //remove previous and next segment\r\n this._segments[pointIndex ].length.destroy();\r\n this._segments[pointIndex +1].length.destroy();\r\n if (this._segments[pointIndex].thickness) {\r\n this._segments[pointIndex].thickness.destroy();\r\n }\r\n if (this._segments[pointIndex + 1].thickness) {\r\n this._segments[pointIndex + 1].thickness.destroy();\r\n }\r\n this._segments.splice(pointIndex, 1);\r\n this._segments.splice(pointIndex, 1);\r\n\r\n //remove point\r\n this.miteredPoints.splice(pointIndex, 1);\r\n\r\n point.destroy();\r\n };\r\n\r\n resetHoveredPoint = () => {\r\n this.state.hoveredPoint = null;\r\n this.state.mouseDown = false;\r\n };\r\n\r\n\r\n moveMeasurements = (point) => {\r\n const pointIndex = this.miteredPoints.indexOf(point);\r\n\r\n // let length = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(getPointDistance(point, this.miteredPoints[pointIndex + 1 ]))\r\n // : getPointDistance(point, this.miteredPoints[pointIndex + 1 ]);\r\n //\r\n // let length2 = Config.measureUnit === \"Metric\"\r\n // ? inchesToMm(getPointDistance(point, this.miteredPoints[pointIndex - 1 ]))\r\n // : getPointDistance(point, this.miteredPoints[pointIndex - 1 ]);\r\n\r\n //move left and right measurements if they exist\r\n if (this.miteredPoints[pointIndex - 1 ]) {\r\n const midPoint2 = getMidPoint(point, this.miteredPoints[pointIndex - 1 ]);\r\n let length2 = getPointDistance(point, this.miteredPoints[pointIndex - 1 ]);\r\n this._segments[pointIndex - 1].length.pos.x = midPoint2.x;\r\n this._segments[pointIndex - 1].length.pos.y = midPoint2.y;\r\n this._segments[pointIndex - 1].length.value = length2;\r\n if (this._segments[pointIndex - 1].thickness) {\r\n this._segments[pointIndex - 1].thickness.pos.x = midPoint2.x;\r\n this._segments[pointIndex - 1].thickness.pos.y = midPoint2.y;\r\n }\r\n }\r\n if (this.miteredPoints[pointIndex + 1 ]) {\r\n const midPoint = getMidPoint(point, this.miteredPoints[pointIndex + 1 ]);\r\n let length = getPointDistance(point, this.miteredPoints[pointIndex + 1 ]);\r\n this._segments[pointIndex].length.pos.x = midPoint.x;\r\n this._segments[pointIndex].length.pos.y = midPoint.y;\r\n this._segments[pointIndex].length.value = length;\r\n if (this._segments[pointIndex].thickness) {\r\n this._segments[pointIndex].thickness.pos.x = midPoint.x;\r\n this._segments[pointIndex].thickness.pos.y = midPoint.y;\r\n }\r\n }\r\n };\r\n\r\n initPoint = (point, layout = 'white-circle') => {\r\n point.init(this);\r\n point.layout = layout;\r\n };\r\n\r\n getOffset = () => {\r\n return this.line.getOffset();\r\n };\r\n\r\n moveMitered = (xDiff = 0, yDiff = 0) => {\r\n for (let miteredPoint of this.miteredPoints ) {\r\n miteredPoint.x -= xDiff;\r\n miteredPoint.y -= yDiff;\r\n }\r\n this.heightNumberText.pos.x -= xDiff;\r\n this.heightNumberText.pos.y -= yDiff;\r\n for (let segment of this._segments ) {\r\n segment.length.pos.x -= xDiff;\r\n segment.length.pos.y -= yDiff;\r\n if (segment.thickness) {\r\n segment.thickness.pos.x -= xDiff;\r\n segment.thickness.pos.y -= yDiff;\r\n }\r\n }\r\n };\r\n\r\n setNewLineWidth = () => {\r\n this.updateCornerPoints();\r\n this.updateSectionHeightPos();\r\n this.updateSegmentsLength();\r\n this.updateSegmentThicknessPos();\r\n };\r\n\r\n updateCornerPoints = () => {\r\n this.miteredPoints[0].x = this.line.from.x\r\n this.miteredPoints[0].y = this.line.from.y\r\n this.miteredPoints[this.miteredPoints.length - 1].x = this.line.to.x\r\n this.miteredPoints[this.miteredPoints.length - 1].y = this.line.to.y\r\n };\r\n\r\n updateSectionHeightPos = () => {\r\n const midPoint = getMidPoint(this.line.from, this.line.to);\r\n this.heightNumberText.pos.x = midPoint.x;\r\n this.heightNumberText.pos.y = midPoint.y;\r\n };\r\n\r\n updateSegmentsLength = () => {\r\n for (let segmentIndex in this._segments ) {\r\n if (this._segments.hasOwnProperty(segmentIndex)) {\r\n const midPoint = getMidPoint(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n let length = getPointDistance(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n this._segments[+segmentIndex].length.pos.x = midPoint.x;\r\n this._segments[+segmentIndex].length.pos.y = midPoint.y;\r\n this._segments[+segmentIndex].length.value = length;\r\n this.setSegmentLength(length, this._segments[segmentIndex], this);\r\n }\r\n }\r\n };\r\n\r\n updateSegmentThicknessPos = () => {\r\n for (let segmentIndex in this._segments ) {\r\n if (this._segments.hasOwnProperty(segmentIndex) && this.miteredPoints[+segmentIndex + 1]) {\r\n const midPoint = getMidPoint(this.miteredPoints[+segmentIndex], this.miteredPoints[+segmentIndex + 1]);\r\n if (this._segments[+segmentIndex].thickness) {\r\n this._segments[+segmentIndex].thickness.pos.x = midPoint.x;\r\n this._segments[+segmentIndex].thickness.pos.y = midPoint.y;\r\n }\r\n }\r\n }\r\n };\r\n\r\n setSegmentLengthFromNumberValue = (value, numberText) => {\r\n value = Math.round10(+value / Config.getMeasureMultiplier(), -3);\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.length === numberText);\r\n\r\n this.setSegmentLength(value, miteredSegment, miteredSection);\r\n };\r\n\r\n setSegmentLength = (value, segment, miteredSection) => {\r\n //update segment and maxSegment priority\r\n segment.setPriority(++this.state.maxSegmentPriority);\r\n this.resizeMiteredSegment(value, segment);\r\n\r\n // we need to recreate slab shape so we delete existing it\r\n sqftSlabManager.deleteSlabBacksplashByLine(this.line);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n };\r\n\r\n setSegmentHeightFromNumberValue = (value, numberText) => {\r\n const newValue = +value\r\n let miteredSection = numberText.parent;\r\n this.setSegmentHeight(newValue, miteredSection);\r\n };\r\n\r\n setSegmentHeight = (newValue, miteredSection) => {\r\n let segments = miteredSection.getSegments();\r\n sqftConfig.measureUnit === \"Metric\"\r\n ? miteredSection.state.heightMetric = newValue\r\n : miteredSection.state.height = newValue;\r\n\r\n miteredSection.heightNumberText.value = newValue;\r\n segments.map((segment) => {\r\n segment.height = newValue\r\n });\r\n\r\n // we need to recreate slab shape so we delete existing it\r\n sqftSlabManager.deleteSlabBacksplashByLine(this.line);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n }\r\n\r\n setSegmentThicknessFromNumberValue = (value, numberText) => {\r\n const newValue = +value\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.thickness === numberText);\r\n\r\n this.setSegmentThickness(newValue, miteredSegment, miteredSection);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n };\r\n\r\n setSegmentThickness = (newValue, miteredSegment, miteredSection) => {\r\n sqftConfig.measureUnit === \"Metric\"\r\n ? miteredSection.state.thicknessMetric = newValue\r\n : miteredSection.state.thickness = newValue;\r\n miteredSegment.thickness.value = newValue;\r\n\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(miteredSection);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(miteredSection);\r\n }\r\n }\r\n\r\n getSegmentByNumberText = (numberText) => {\r\n let segmentIndex = this._segments.map(seg => seg.length).indexOf(numberText);\r\n\r\n return this._segments[segmentIndex];\r\n };\r\n\r\n getResizedSegmentsWithoutPriority = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let closestLeft = this._segments[segmentIndex -1 ]\r\n ? this._segments[segmentIndex -1 ].priority === 0\r\n : null;\r\n let closestRight = this._segments[segmentIndex +1 ]\r\n ? this._segments[segmentIndex +1 ].priority === 0\r\n : null;\r\n\r\n return {closestLeft, closestRight};\r\n };\r\n\r\n getResizedSegmentsFreeSpace = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let closestLeft = this._segments[segmentIndex -1 ];\r\n let closestRight = this._segments[segmentIndex +1 ];\r\n\r\n return {closestLeft, closestRight};\r\n };\r\n\r\n getResizedSegmentsByPriority = (segment) => {\r\n let segmentIndex = this._segments.indexOf(segment);\r\n let minPrevSegment = null;\r\n let minNextSegment = null;\r\n if(this._segments[segmentIndex -1 ]) {\r\n let prevSegments = this._segments.slice(0, segmentIndex);\r\n minPrevSegment = getMinInArray(prevSegments, 'priority');\r\n }\r\n if(this._segments[segmentIndex +1 ]) {\r\n let nextSegments = this._segments.slice(segmentIndex + 1);\r\n minNextSegment = getMinInArray(nextSegments.reverse(), 'priority'); // reverse array to get closest element\r\n }\r\n\r\n return {minPrevSegment, minNextSegment};\r\n };\r\n\r\n movePointWithMouse = (mousePos, point1) => {\r\n let scale = workspace.getScale();\r\n let xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n //debugger\r\n yDiff = this.getMousePosPointDiff(yDiff, point1, mousePos, true);\r\n xDiff = this.getMousePosPointDiff(xDiff, point1, mousePos, true);\r\n\r\n this.movePoint(xDiff, yDiff, point1);\r\n this.moveMeasurements(point1);\r\n\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n // first resize free space then segments without and with priority\r\n resizeMiteredSegment = (value, segment) => {\r\n if (!this.resizeMiteredSegmentFreeSpace(value, segment)){\r\n if (!this.resizeMiteredSegmentWithoutPriority(value, segment)) {\r\n this.resizeMiteredSegmentWithPriority(value, segment);\r\n }\r\n }\r\n };\r\n\r\n resizeMiteredSegmentWithPriority = (value, segment) => {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n {minPrevSegment, minNextSegment} = this.getResizedSegmentsByPriority(segment),\r\n segmentIndex = this._segments.indexOf(segment),\r\n minNextSegmentIndex = this._segments.indexOf(minNextSegment),\r\n minPrevSegmentIndex = this._segments.indexOf(minPrevSegment),\r\n\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n // move only to one side with lowest priority\r\n if (minPrevSegment ? minPrevSegment.priority : 0 > minNextSegment ? minNextSegment.priority : 0) {\r\n minPrevSegment = null\r\n } else if(minPrevSegment ? minPrevSegment.priority : 0 < minNextSegment ? minNextSegment.priority : 0) {\r\n minNextSegment = null\r\n }\r\n\r\n let moveAllNextPoints = (xDiff, yDiff) => {\r\n let index = segmentIndex;\r\n while(minNextSegmentIndex > index) {\r\n let [segmentBetweenPoint1, segmentBetweenPoint2] = this.getSegmentPointsBySegment(this._segments[index]);\r\n this.movePoint(xDiff, yDiff, segmentBetweenPoint2, true);\r\n this.moveMeasurements(segmentBetweenPoint2);\r\n index++\r\n\r\n void segmentBetweenPoint1;\r\n }\r\n };\r\n\r\n let moveAllPrevPoints = (xDiff, yDiff) => {\r\n let index = segmentIndex;\r\n while(minPrevSegmentIndex < index) {\r\n let [segmentBetweenPoint1, segmentBetweenPoint2] = this.getSegmentPointsBySegment(this._segments[index]);\r\n this.movePoint(xDiff, yDiff, segmentBetweenPoint1, true);\r\n this.moveMeasurements(segmentBetweenPoint1);\r\n index--\r\n\r\n void segmentBetweenPoint2;\r\n }\r\n };\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if (minPrevSegment && minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n moveAllPrevPoints(xDiff / 2);\r\n\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff / 2);\r\n } else if(minPrevSegment && !minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n moveAllPrevPoints(xDiff);\r\n } else if(!minPrevSegment && minNextSegment) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if (minPrevSegment && minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? value - pointDistance : -value + pointDistance;\r\n moveAllPrevPoints(xDiff, yDiff / 2);\r\n\r\n yDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff, yDiff / 2);\r\n } else if(minPrevSegment && !minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? value - pointDistance : -value + pointDistance;\r\n moveAllPrevPoints(xDiff, yDiff);\r\n } else if(!minPrevSegment && minNextSegment) {\r\n yDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n moveAllNextPoints(xDiff, yDiff);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n };\r\n\r\n resizeMiteredSegmentWithoutPriority = (value, segment) => {\r\n let {closestLeft, closestRight} = this.getResizedSegmentsWithoutPriority(segment);\r\n //resize segments only if they are without priority\r\n if(!closestLeft && !closestRight) {\r\n return false\r\n }\r\n\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if(closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(!closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if(closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(!closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n\r\n return true\r\n };\r\n\r\n resizeMiteredSegmentFreeSpace = (value, segment) => {\r\n let {closestLeft, closestRight} = this.getResizedSegmentsFreeSpace(segment);\r\n //if segments exist skip resizing\r\n if (!closestLeft || !closestRight) {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n lineDirection = this.line.getLineDirection(),\r\n [segmentPoint1, segmentPoint2] = this.getSegmentPointsBySegment(segment),\r\n [smallestLinePoint, biggestLinePoint] = this.line.getLinePointsWithoutCorners(),\r\n pointDistance = getPointDistance(segmentPoint1, segmentPoint2);\r\n\r\n // todo move skip into function\r\n switch(this.line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n if(!closestLeft && closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? value - pointDistance: -value + pointDistance;\r\n // skip if there is no whitespace\r\n if(lineDirection.newDirection === \"east\" ){\r\n if(segmentPoint1.x - xDiff <= smallestLinePoint.x || segmentPoint1.x === smallestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint1.x) === smallestLinePoint.x){\r\n segmentPoint1.x = smallestLinePoint.x;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint1.x - xDiff >= biggestLinePoint.x || segmentPoint1.x === biggestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint1.x) === biggestLinePoint.x){\r\n segmentPoint1.x = biggestLinePoint.x;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n xDiff = lineDirection.newDirection === \"east\" ? -value + pointDistance: value - pointDistance;\r\n if(lineDirection.newDirection === \"east\" ){\r\n if(segmentPoint2.x - xDiff >= biggestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint2.x) === biggestLinePoint.x){\r\n segmentPoint2.x = biggestLinePoint.x;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint2.x - xDiff <= smallestLinePoint.x){\r\n return false\r\n } else if(Math.round(segmentPoint2.x) === smallestLinePoint.x){\r\n segmentPoint2.x = smallestLinePoint.x;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n\r\n break;\r\n case orientation.VERTICAL:\r\n if(!closestLeft && closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? -value + pointDistance: value - pointDistance;\r\n // skip if there is no whitespace\r\n if(lineDirection.newDirection === \"north\" ){\r\n if(segmentPoint1.y - yDiff >= biggestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint1.y) === biggestLinePoint.y){\r\n segmentPoint1.y = biggestLinePoint.y;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint1.y - yDiff <= smallestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint1.y) === smallestLinePoint.y){\r\n segmentPoint1.y = smallestLinePoint.y;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint1, true);\r\n this.moveMeasurements(segmentPoint1);\r\n\r\n } else if(closestLeft && !closestRight) {\r\n yDiff = lineDirection.newDirection === \"north\" ? value - pointDistance : -value + pointDistance;\r\n // skip if there is no whitespace and fix round position\r\n if(lineDirection.newDirection === \"north\" ){\r\n if(segmentPoint2.y - yDiff <= smallestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint2.y) === smallestLinePoint.y){\r\n segmentPoint2.y = smallestLinePoint.y;\r\n return false\r\n }\r\n } else {\r\n if(segmentPoint2.y - yDiff >= biggestLinePoint.y){\r\n return false\r\n } else if(Math.round(segmentPoint2.y) === biggestLinePoint.y){\r\n segmentPoint2.y = biggestLinePoint.y;\r\n return false\r\n }\r\n }\r\n this.movePoint(xDiff, yDiff, segmentPoint2, true);\r\n this.moveMeasurements(segmentPoint2);\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n }\r\n\r\n return false\r\n };\r\n\r\n /**\r\n * @deprecated\r\n */\r\n getLeftRightStopPoint = (point1) => {\r\n let o = this.line.getOrientation(),\r\n lineDirection = this.line.getLineDirection(),\r\n toCornerLength = this.line.to.getArcLength() || this.line.get45CornerLegDistance(),\r\n prevLine = this.line.getParent().getPrevLine(this.line),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toCornerMargin = 0,\r\n fromCornerMargin = 0,\r\n axis = null,\r\n index = this.miteredPoints.indexOf(point1),\r\n stopPointLeft = null,\r\n stopPointRight = null,\r\n biggestLinePoint = null,\r\n smallestLinePoint = null;\r\n\r\n if (o === orientation.VERTICAL) {\r\n toCornerMargin = lineDirection.newDirection === \"north\" ? -fromCornerLength : -toCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"north\" ? +toCornerLength : +fromCornerLength;\r\n biggestLinePoint = this.line.getBiggestYPoint().y + toCornerMargin;\r\n smallestLinePoint = this.line.getSmallestYPoint().y + fromCornerMargin;\r\n axis = y;\r\n } else if(o === orientation.HORIZONTAL) {\r\n toCornerMargin = lineDirection.newDirection === \"east\" ? -toCornerLength : -fromCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"east\" ? +fromCornerLength : +toCornerLength;\r\n biggestLinePoint = this.line.getBiggestXPoint().x + toCornerMargin;\r\n smallestLinePoint = this.line.getSmallestXPoint().x + fromCornerMargin;\r\n axis = x;\r\n } else {\r\n //todo\r\n }\r\n\r\n void axis; void biggestLinePoint; void smallestLinePoint;\r\n void index; void stopPointLeft; void stopPointRight;\r\n };\r\n\r\n movePoint = (xDiff, yDiff, point1, moveStopPoints = false) => {\r\n let o = this.line.getOrientation(),\r\n lineDirection = this.line.getLineDirection(),\r\n // toCornerLength = this.line.to.getArcLength() || this.line.get45CornerLegDistance(),\r\n // prevLine = this.line.getParent().getPrevLine(this.line),\r\n // fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n pointIndex = this.miteredPoints.indexOf(point1),\r\n //toCornerMargin = 0,\r\n //fromCornerMargin = 0,\r\n stopPointLeft = null,\r\n stopPointRight = null,\r\n smallestPointStopped = null,\r\n biggestPointStopped = null,\r\n biggestLinePoint = null,\r\n smallestLinePoint = null\r\n ;\r\n\r\n //do'nt move first and las point\r\n if (pointIndex === 0 || pointIndex === this.miteredPoints.length - 1) {\r\n return []\r\n }\r\n\r\n if (o === orientation.VERTICAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.line.getBiggestYPoint().pos);\r\n smallestLinePoint = Object.assign({}, this.line.getSmallestYPoint().pos);\r\n // stop point on overline move\r\n if (lineDirection.newDirection === \"north\" ) {\r\n //toCornerMargin = -fromCornerLength;\r\n //fromCornerMargin = +toCornerLength;\r\n //biggestLinePoint.y += toCornerMargin;\r\n //smallestLinePoint.y += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : biggestLinePoint;\r\n } else {\r\n //toCornerMargin = -toCornerLength;\r\n //fromCornerMargin = +fromCornerLength;\r\n //biggestLinePoint.y += toCornerMargin;\r\n //smallestLinePoint.y += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : biggestLinePoint;\r\n }\r\n\r\n [smallestPointStopped, biggestPointStopped] = this.movePointInOrStop(\r\n point1, 'y', yDiff,\r\n biggestLinePoint.y,\r\n smallestLinePoint.y,\r\n stopPointLeft,\r\n stopPointRight,\r\n moveStopPoints\r\n );\r\n } else if (o === orientation.HORIZONTAL) {\r\n //line biggest and smallest points\r\n biggestLinePoint = Object.assign({}, this.line.getBiggestXPoint().pos);\r\n smallestLinePoint = Object.assign({}, this.line.getSmallestXPoint().pos);\r\n // stop point on overline move if it is not mitered then it should'nt go overline\r\n if (lineDirection.newDirection === \"east\" ) {\r\n //toCornerMargin = -toCornerLength;\r\n //fromCornerMargin = +fromCornerLength;\r\n //biggestLinePoint.x += toCornerMargin;\r\n //smallestLinePoint.x += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : biggestLinePoint;\r\n } else {\r\n //toCornerMargin = -fromCornerLength;\r\n //fromCornerMargin = +toCornerLength;\r\n //biggestLinePoint.x += toCornerMargin;\r\n //smallestLinePoint.x += fromCornerMargin;\r\n stopPointLeft = this.miteredPoints[pointIndex + 1] ? this.miteredPoints[pointIndex + 1] : smallestLinePoint;\r\n stopPointRight = this.miteredPoints[pointIndex - 1] ? this.miteredPoints[pointIndex - 1] : biggestLinePoint;\r\n }\r\n // stop point on overline move\r\n [smallestPointStopped, biggestPointStopped] = this.movePointInOrStop(\r\n point1, 'x', xDiff,\r\n biggestLinePoint.x,\r\n smallestLinePoint.x,\r\n stopPointLeft,\r\n stopPointRight,\r\n moveStopPoints\r\n );\r\n } else {\r\n //todo rotation\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n // this.state.mouseDownPosition = mousePos;\r\n }\r\n\r\n return [smallestPointStopped, biggestPointStopped]\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n };\r\n\r\n render = (ctx) => {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n this.renderTopBlueLine(ctx);\r\n this.renderRuler(ctx);\r\n this.renderLetter(ctx);\r\n //this.renderThickness(ctx);\r\n this.renderHeight(ctx);\r\n this.renderSectionIndex(ctx);\r\n // this.renderMeasurements(ctx);\r\n };\r\n\r\n //blue line between middle points\r\n renderTopBlueLine = (ctx) => {\r\n let renderFrom = this.line.calculateRenderPosition(this.miteredPoints[0]),\r\n renderTo = this.line.calculateRenderPosition(this.miteredPoints[this.miteredPoints.length - 1]);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n ctx.lineWidth = 8;\r\n if(EventManager.getCursor().indexOf(\"delete\") >= 0 && this.line.isHovering() && !this.state.isHoveringPoint) {\r\n ctx.strokeStyle = this.design.deleteFillStyle;\r\n } else {\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n }\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderRuler = (ctx) => {\r\n const pointsToRender = this.miteredPoints.map((point) => {\r\n return this.line.calculateRenderPosition(point);\r\n });\r\n\r\n ctx.beginPath();\r\n pointsToRender.forEach((point, index) => {\r\n let next = index + 1;\r\n if (pointsToRender[next]) {\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(point, pointsToRender[next], -this.design.rulerMargin);\r\n this.drawArrow( ctx,\r\n parallelPointFrom.x,\r\n parallelPointFrom.y,\r\n parallelPointTo.x,\r\n parallelPointTo.y\r\n );\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n // text is rendered from number text\r\n renderHeight = (ctx) => {\r\n let [fromPointWithIndent, toPointWithIndent] = this.line.getLinePointsWithoutCorners(),\r\n renderFrom = getPointField(fromPointWithIndent.x, fromPointWithIndent.y, this),\r\n renderTo = getPointField(toPointWithIndent.x, toPointWithIndent.y, this);\r\n\r\n ctx.beginPath();\r\n\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(renderFrom, renderTo, -this.design.heightMargin);\r\n this.drawFlatArrow( ctx,\r\n parallelPointFrom.x,\r\n parallelPointFrom.y,\r\n parallelPointTo.x,\r\n parallelPointTo.y\r\n );\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderLetter = (ctx) => {\r\n let fontHeight = this.design.fontHeight,\r\n font = fontHeight + \"px \" + this.design.fontFamily;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n const pointsToRender = this.miteredPoints.map((point) => {\r\n return this.line.calculateRenderPosition(point);\r\n });\r\n\r\n pointsToRender.forEach((point, index) => {\r\n let next = index + 1;\r\n if (pointsToRender[next]) {\r\n const [parallelPointFrom, parallelPointTo] = getParallelPoints(point, pointsToRender[next], -this.design.letterMargin);\r\n let letter = numToLetter(next);\r\n let midPoint = getMidPoint(parallelPointFrom, parallelPointTo);\r\n let mText = ctx.measureText(letter);\r\n ctx.wrapText(letter, midPoint.x, midPoint.y, mText, fontHeight);\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderThickness = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n fontHeight = this.design.fontHeight,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMarginLine = 0,\r\n yMarginLine = 0,\r\n xMarginImage = 0,\r\n yMarginImage = 0,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n pointField = {};\r\n void xMarginValue;\r\n void yMarginValue;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yMarginLine = (lineDirection.newDirection === \"west\" ? this.design.thicknessMargin : -this.design.thicknessMargin);\r\n\r\n xMarginImage = (lineDirection.newDirection === \"east\" ? -20 : -20);\r\n yMarginImage = (lineDirection.newDirection === \"east\" ? 0 : -30);\r\n\r\n xMarginValue = (lineDirection.newDirection === \"east\" ? 15 : 15);\r\n yMarginValue = (lineDirection.newDirection === \"east\" ? 16 : -14);\r\n\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMarginLine = (lineDirection.newDirection === \"south\" ? this.design.thicknessMargin: -this.design.thicknessMargin);\r\n\r\n xMarginImage = (lineDirection.newDirection === \"north\" ? 0 : -50);\r\n yMarginImage = (lineDirection.newDirection === \"north\" ? -10 : -10);\r\n\r\n xMarginValue = (lineDirection.newDirection === \"north\" ? 35 : -16);\r\n yMarginValue = (lineDirection.newDirection === \"north\" ? 5 : 6);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n this.miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if(this.miteredPoints[next]) {\r\n let midPoint = getMidPoint(\r\n this.line.calculateRenderPosition(point),\r\n this.line.calculateRenderPosition(this.miteredPoints[next])\r\n );\r\n let segment = this.getSegmentBetweenPoints(point, this.miteredPoints[next]);\r\n let thicknessValue = segment.thickness.value;\r\n let mText = ctx.measureText(thicknessValue.toString());\r\n\r\n void mText;\r\n //debugger\r\n pointField.x = midPoint.x + xMarginLine;\r\n pointField.y = midPoint.y + yMarginLine;\r\n\r\n // blue line\r\n ctx.moveTo(pointField.x, pointField.y);\r\n ctx.lineTo(pointField.x - xMarginLine, pointField.y - yMarginLine);\r\n\r\n // thickness image\r\n DrawImage.renderImage('thickness', ctx,\r\n pointField.x + xMarginImage,\r\n pointField.y + yMarginImage,\r\n 8,\r\n 8,\r\n true,\r\n true\r\n );\r\n\r\n // thickness value rendered from NumberText\r\n // ctx.wrapText(\r\n // thicknessValue.toString(),\r\n // pointField.x + xMarginValue,\r\n // pointField.y + yMarginValue,\r\n // mText,\r\n // fontHeight\r\n // );\r\n }\r\n });\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderSectionIndexOld = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n renderTo = this.line.calculateRenderPosition(this.line.to),\r\n renderFrom = this.line.calculateRenderPosition(this.line.from),\r\n fontHeight = this.design.fontHeight - 3,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMargin = 0,\r\n yMargin = 0,\r\n xOffset = 15,\r\n yOffset = 15,\r\n xWidth = 0,\r\n yWidth = 0,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n renderPos;\r\n\r\n const scale = Config.scale;\r\n let text = ('0' + this.sectionIndex).slice(-2);\r\n let mText = ctx.measureText(text);\r\n\r\n void xMargin;\r\n void yMargin;\r\n void scale;\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n //measurement arrow offset\r\n yWidth = -this.design.sectionArrowWidth / 2;\r\n yMargin = (lineDirection.newDirection === \"east\" ? -this.design.sectionArrowWidth : this.design.sectionArrowWidth);\r\n yOffset = 0;\r\n\r\n // text and value\r\n xMarginValue = (lineDirection.newDirection === \"east\" ? -this.design.sectionIndexMargin: -this.design.sectionIndexMargin);\r\n renderPos = (lineDirection.newDirection === \"east\" ? renderFrom: renderTo);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.save();\r\n ctx.translate(renderPos.x + xMarginValue, renderPos.y + yMarginValue);\r\n ctx.rotate(-Math.PI / 2);\r\n ctx.fillStyle = \"#fff\";\r\n ctx.wrapText(text, 2, 4, mText, fontHeight); // (text, x, y - additional offset\r\n ctx.restore();\r\n break;\r\n }\r\n case \"vertical\": {\r\n //measurement arrow offset\r\n xWidth = -this.design.sectionArrowWidth / 2;\r\n xMargin = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin: this.design.sectionIndexMargin);\r\n xOffset = 0;\r\n\r\n // text and value\r\n yMarginValue = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin : -this.design.sectionIndexMargin);\r\n renderPos = (lineDirection.newDirection === \"north\" ? renderTo: renderFrom);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx,\r\n {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue },\r\n 12,\r\n 2\r\n );\r\n\r\n //render value\r\n ctx.fillStyle = \"#fff\";\r\n // (text, +1, +4 - additional number offset\r\n ctx.wrapText(text, renderPos.x + xMarginValue + 1, renderPos.y + yMarginValue + 4, mText, fontHeight);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n //render measurement arrow\r\n this.drawFlatArrow( ctx,\r\n renderPos.x + xMarginValue - xWidth + xOffset,\r\n renderPos.y + yMarginValue - yWidth + yOffset,\r\n renderPos.x + xMarginValue + xWidth + xOffset,\r\n renderPos.y + yMarginValue + yWidth + yOffset\r\n );\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n renderSectionIndex = (ctx) => {\r\n let lineDirection = this.line.getLineDirection(),\r\n midPoint = getMidPoint(this.line.to, this.line.from),\r\n fontHeight = this.design.fontHeight - 3,\r\n font = fontHeight + \"px \" + this.design.fontFamily,\r\n xMarginValue = 0,\r\n yMarginValue = 0,\r\n renderPos = this.line.calculateRenderPosition({\r\n pos: {x: midPoint.x, y: midPoint.y}\r\n });\r\n\r\n const scale = Config.scale;\r\n void scale;\r\n\r\n let text = ('0' + this.sectionIndex).slice(-2);\r\n let mText = ctx.measureText(text);\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = this.design.fontColor;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n // text and value\r\n yMarginValue = (lineDirection.newDirection === \"east\" ? -this.design.sectionIndexMargin: this.design.sectionIndexMargin);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.fillStyle = \"#fff\";\r\n // (text, +1, +4 - additional number offset\r\n ctx.wrapText(text, renderPos.x + xMarginValue + 1, renderPos.y + yMarginValue + 4, mText, fontHeight);\r\n break;\r\n }\r\n case \"vertical\": {\r\n // text and value\r\n xMarginValue = (lineDirection.newDirection === \"north\" ? -this.design.sectionIndexMargin : this.design.sectionIndexMargin + fontHeight);\r\n\r\n //render double circle\r\n RenderFigures.renderDoubleCircle(ctx, {x: renderPos.x + xMarginValue, y: renderPos.y + yMarginValue }, 12, 2);\r\n\r\n //render value\r\n ctx.save();\r\n ctx.translate(renderPos.x + xMarginValue, renderPos.y + yMarginValue);\r\n ctx.rotate(-Math.PI / 2);\r\n ctx.fillStyle = \"#fff\";\r\n ctx.wrapText(text, 2, 4, mText, fontHeight); // (text, x, y - additional offset\r\n ctx.restore();\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = this.design.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n };\r\n\r\n drawArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 10, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n };\r\n\r\n drawFlatArrow = (context, fromX, fromY, toX, toY) => {\r\n let headLen = 5, // length of head in pixels\r\n dx = toX - fromX,\r\n dy = toY - fromY,\r\n angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 2), toY - headLen * Math.sin(angle - Math.PI / 2));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 2), toY - headLen * Math.sin(angle + Math.PI / 2));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 2), fromY + headLen * Math.sin(angle - Math.PI / 2));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 2), fromY + headLen * Math.sin(angle + Math.PI / 2));\r\n };\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n for (const point of this.miteredPoints) {\r\n if(this.isMouseOverPoint(mousePos, point)) {\r\n if (this.state.mouseDown) {\r\n this.movePointWithMouse(mousePos, point);\r\n if (this.type === MITERED_OVERLAY_TYPE.mitered) {\r\n workspace.miteredController.updateSection(this);\r\n } else if (this.type === MITERED_OVERLAY_TYPE.underlayment) {\r\n workspace.underlaymentController.updateSection(this);\r\n }\r\n }\r\n\r\n return this.state.mouseDown;\r\n }\r\n }\r\n };\r\n\r\n isMouseOverPoint = (mousePos, point) => {\r\n this.state.isHoveringPoint = !!point.isOverPointField();\r\n // console.log(\"point\", point.id);\r\n // console.log(\"this.state.hoveredPoint\", this.state.hoveredPoint.id);\r\n // console.log(\"mousePos\", this.state.isHoveringPoint);\r\n return this.state.isHoveringPoint || this.state.mouseDown && this.state.hoveredPoint && point.id === this.state.hoveredPoint.id;\r\n };\r\n\r\n onMouseUp = (mousePos, e) => {\r\n void mousePos;\r\n void e;\r\n if(this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n }\r\n };\r\n\r\n onMouseDown = (mousePos, e) => {\r\n void e;\r\n const reduxState = store.getState();\r\n const menuOpened = reduxState.sqftMenuState.menuOpened;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if (activeButton === SIDEBAR_NAVIGATION_BUTTONS.edge\r\n || activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ) {\r\n //do nothing if we want to remove or add edge\r\n } else if (this.state.isHoveringPoint) {\r\n this.state.mouseDown = true;\r\n // this.state.movePointDistance = getPointDistance(this.from, this.to);\r\n //todo move point\r\n this.state.mouseDownPosition = mousePos;\r\n for (const point in this.miteredPoints) {\r\n if (this.miteredPoints[point].isOverPointField(mousePos)) {\r\n this.state.hoveredPoint = this.miteredPoints[point]\r\n }\r\n }\r\n\r\n return true;\r\n } else if (this.line.isHovering() && menuOpened === SIDEBAR_NAVIGATION_BUTTONS.mitered) {\r\n //console.log('line is hovering');\r\n let [closest, secondPoint, isPrev] = this.getPointBetweenCords(mousePos);\r\n let newPoint = this.addPointBetweenPoints(closest, secondPoint, isPrev);\r\n if (isPrev) {\r\n this.addMeasurementBetweenPoints(newPoint, secondPoint);\r\n this.addMeasurementBetweenPoints(closest, newPoint);\r\n } else {\r\n this.addMeasurementBetweenPoints(closest, newPoint);\r\n this.addMeasurementBetweenPoints(newPoint, secondPoint);\r\n }\r\n this.removeMeasurementBetweenPoints(closest, secondPoint, isPrev);\r\n\r\n workspace.miteredController.updateSection(this);\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n onMouseLeave = () => {\r\n this.state.isHoveringPoint = false;\r\n this.state.mouseDown = false;\r\n this.state.hoveredPoint = null;\r\n }\r\n}\r\n","import workspace from \"../../core/workspace\";\r\nimport store from \"./../../../../../../store\";\r\nimport SlabWorkspace from \"./slabWorkspace\";\r\nimport {getPointField} from \"../../../../helpers/sqftHelper\";\r\nimport sqftShape from \"../shapes/sqftShape\";\r\nimport {isDisabledInPopupShouldBeHidden, SHAPE_PART_ID, SQFT_MODE} from \"../../../../constants\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport RenderFigures from \"../../helpers/renderFigures\";\r\nimport RenderParts from \"../../helpers/renderParts\";\r\n\r\nexport const renderSlabRightPart = (ctx, isFullRender = false) => {\r\n let slabState = store.getState().sqftSlabState;\r\n let croppedImages = slabState.croppedSlabImages;\r\n let scale = workspace.getScale();\r\n let slabWorkspacePos = SlabWorkspace.getCenter();\r\n let shapes = workspace.getShapes();\r\n\r\n //this will render shapes without rotation\r\n shapes.forEach((shape) => {\r\n if (!(shape instanceof sqftShape)\r\n || shape.rotatedDegreesSlab !== 0\r\n || (isDisabledInPopupShouldBeHidden() && shape.isDisabledInPopup)\r\n || shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n return\r\n }\r\n let pos = shape.getRegularPosition();\r\n //let posSlab = shape.shapeSlab.__absolutePos ? shape.getSlabAbsolutePosition() : shape.getSlabPosition();\r\n let posSlab = shape.shapeSlab.getPosition();\r\n let shapeRegularPointField = getPointField(pos.x, pos.y, workspace);\r\n let shapeSlabPointField = getPointField(posSlab.x, posSlab.y, SlabWorkspace);\r\n\r\n let staticOffset = {\r\n x: shapeRegularPointField.x - slabWorkspacePos.x + ctx.canvas.width / 2,\r\n y: shapeRegularPointField.y - slabWorkspacePos.y\r\n };\r\n ctx.save();\r\n !isFullRender ? clearSlabLeftPart(ctx) : null;\r\n\r\n //render borders only for core shapes\r\n ctx.beginPath();\r\n if (shape.partId === SHAPE_PART_ID.seamPiece) {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, staticOffset, SQFT_MODE.regular);\r\n ctx.lineWidth = 0;\r\n ctx.strokeStyle = 'rgba(0,0,0,0.0)';\r\n } else {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, staticOffset, SQFT_MODE.regular);\r\n //if (isFullRender) {\r\n // console.log(\"scale\", scale);\r\n // console.log(\"ctx.canvas.width / 2\", ctx.canvas.width / 2);\r\n // console.log(\"pos\", pos);\r\n // console.log(\"slabWorkspacePos2\", slabWorkspacePos);\r\n // console.log(\"offset = workspace.getOffset();\", workspace.getOffset());\r\n // console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n // console.log(\"staticOffset\", staticOffset);\r\n //}\r\n }\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //do not clip shapes with seam (clip only children)\r\n if (shape.isWithShapePieces()) {\r\n ctx.restore();\r\n return\r\n }\r\n ctx.clip();\r\n for (let slabIndex in croppedImages) {\r\n let movableImage = croppedImages[slabIndex];\r\n const movableImagePosition = movableImage.getPosition();\r\n let movableImagePointField = getPointField(movableImagePosition.x, movableImagePosition.y, SlabWorkspace);\r\n let movableImageSize = movableImage.getSize();\r\n\r\n // ctx.translate(\r\n // staticOffset.x + (movableImagePointField.x - shapeSlabPointField.x),\r\n // staticOffset.y + (movableImagePointField.y - shapeSlabPointField.y)\r\n // );\r\n // console.log(\"movableImagePosition\", movableImagePosition);\r\n // console.log(\"movableImage pos\", movableImage.pos);\r\n // console.log(\"posSlab\", posSlab);\r\n // console.log(\"pos\", pos);\r\n // console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n // console.log(\"movableImagePointField\", movableImagePointField);\r\n // console.log(\"shapeSlabPointField\", shapeSlabPointField);\r\n\r\n // debugger // eslint-disable-line no-debugger\r\n // ctx.rotate(90 * Math.PI / 180);\r\n\r\n ctx.drawImage(\r\n movableImage.getImage(),\r\n //shape.pos.x * scale, shape.pos.y * scale,\r\n ctx.canvas.width / 2 + (movableImagePointField.x - shapeSlabPointField.x + shapeRegularPointField.x) - slabWorkspacePos.x,\r\n (movableImagePointField.y - shapeSlabPointField.y + shapeRegularPointField.y) - slabWorkspacePos.y,\r\n movableImageSize.width * scale,\r\n movableImageSize.height * scale\r\n );\r\n }\r\n ctx.restore();\r\n });\r\n\r\n //this will render shapes with rotation ( it is translate point field to shape center and rotate it with images)\r\n shapes.forEach((shape) => {\r\n if (!(shape instanceof sqftShape)\r\n || shape.rotatedDegreesSlab === 0\r\n || (isDisabledInPopupShouldBeHidden() && shape.isDisabledInPopup)\r\n || shape.partId === SHAPE_PART_ID.slabPlaceHolder\r\n ) {\r\n return\r\n }\r\n let pos = shape.getRegularPosition();\r\n let posSlab = shape.shapeSlab.getPosition();\r\n let shapeRegularPointField = getPointField(pos.x, pos.y, workspace);\r\n let shapeSlabPointField = getPointField(posSlab.x, posSlab.y, SlabWorkspace);\r\n\r\n let staticOffset = {\r\n x: shapeRegularPointField.x - slabWorkspacePos.x + ctx.canvas.width / 2,\r\n y: shapeRegularPointField.y - slabWorkspacePos.y\r\n };\r\n\r\n let shapeCenter = shape.getCenter();\r\n //todo check if this can be used instead of shapeCenter()\r\n //let shapeCenterSlab = ShapeHelper.getCenterPoint(points, true);\r\n //void shapeCenterSlab;\r\n\r\n let shapeCenterOffset = {x: 0, y: 0};\r\n shapeCenterOffset.x = shapeCenter.x * scale\r\n shapeCenterOffset.y = shapeCenter.y * scale\r\n\r\n //console.log(\"pos\", pos);\r\n //console.log(\"shapeRegularPointField\", shapeRegularPointField);\r\n //console.log(\"shapeSlabPointField\", shapeSlabPointField);\r\n //console.log(\"shapeCenter\", shapeCenter);\r\n //console.log(\"staticOffset\", staticOffset);\r\n //console.log(\"shapeCenterOffset\", shapeCenterOffset);\r\n ctx.save();\r\n !isFullRender ? clearSlabLeftPart(ctx) : null;\r\n ctx.translate(staticOffset.x + shapeCenterOffset.x, staticOffset.y + shapeCenterOffset.y);\r\n ctx.rotate(shape.rotatedDegreesSlab * Math.PI / 180);\r\n //render borders only for core shapes\r\n ctx.beginPath();\r\n if (shape.partId === SHAPE_PART_ID.seamPiece) {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, {x: -shapeCenterOffset.x, y: -shapeCenterOffset.y}, SQFT_MODE.slab);\r\n ctx.lineWidth = 0;\r\n ctx.strokeStyle = 'rgba(0,0,0,0.0)';\r\n //ctx.lineWidth = 3; //test mode\r\n //ctx.strokeStyle = 'rgba(0,0,0)'; //test mode\r\n } else {\r\n shape.shapeSlab.renderLinesWithoutStroke(ctx, {x: -shapeCenterOffset.x, y: -shapeCenterOffset.y}, SQFT_MODE.slab);\r\n }\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //do not clip shapes with seam (clip only children)\r\n if (shape.isWithShapePieces()) {\r\n ctx.restore();\r\n return\r\n }\r\n ctx.clip();\r\n for (let slabIndex in croppedImages) {\r\n let movableImage = croppedImages[slabIndex];\r\n const movableImagePosition = movableImage.getPosition();\r\n let movableImagePointField = getPointField(movableImagePosition.x, movableImagePosition.y, SlabWorkspace);\r\n let movableImageSize = movableImage.getSize();\r\n\r\n ctx.drawImage(\r\n movableImage.getImage(),\r\n -shapeCenterOffset.x + (movableImagePointField.x - shapeSlabPointField.x),\r\n -shapeCenterOffset.y + (movableImagePointField.y - shapeSlabPointField.y),\r\n movableImageSize.width * scale,\r\n movableImageSize.height * scale\r\n // ctx.canvas.width / 2 + (movableImagePointField.x - shapeSlabPointField.x + shapeRegularPointField.x) - slabWorkspacePos.x,\r\n // (movableImagePointField.y - shapeSlabPointField.y + shapeRegularPointField.y) - slabWorkspacePos.y,\r\n // movableImage.pos.x * scale,\r\n // movableImage.pos.y * scale,\r\n );\r\n }\r\n ctx.restore();\r\n renderDevMode(ctx, shape);\r\n });\r\n};\r\n\r\nconst clearSlabLeftPart = (ctx) => {\r\n ctx.beginPath();\r\n ctx.rect(ctx.canvas.width / 2, 0, ctx.canvas.width, ctx.canvas.height);\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.clip();\r\n}\r\n\r\nexport const renderSlabWorkspace = (ctx) => {\r\n drawSlabRightPart(ctx);\r\n drawSlabMidDivider(ctx);\r\n};\r\n\r\nconst drawSlabMidDivider = (ctx) => {\r\n ctx.beginPath();\r\n ctx.strokeStyle = '#d5d5d5';\r\n ctx.lineWidth = 1;\r\n ctx.moveTo(SlabWorkspace.getRightPartWidth(ctx), 0);\r\n ctx.lineTo(SlabWorkspace.getRightPartWidth(ctx), ctx.canvas.height);\r\n ctx.stroke();\r\n};\r\n\r\nconst drawSlabRightPart = (ctx) => {\r\n ctx.fillStyle = '#ffffff';\r\n ctx.rect(SlabWorkspace.getRightPartWidth(ctx), 0, ctx.canvas.width, ctx.canvas.height);\r\n ctx.fill();\r\n};\r\n\r\nconst renderDevMode = (ctx, shape) => {\r\n if (config.isDevMode()) {\r\n // render pos\r\n ctx.save();\r\n ctx.beginPath();\r\n let pf = getPointField(shape.pos.x, shape.pos.y);\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n //render shape center\r\n ctx.beginPath();\r\n let shapeCenter = shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this);\r\n ctx.arc(pos.x, pos.y, 12, 0, 2 * Math.PI);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n}\r\n\r\nexport const renderMeasurementsAroundSnappedShapes = (ctx) => {\r\n for (const snappedShapeGroup of workspaceControllers.snappedShapeGroups.getResources()) {\r\n const shapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (shapes.length > 1) { //we will render only shape group if it has two shapes\r\n const measurementPoints = workspaceControllers.snappedShapeGroups.getMeasurementPoints(snappedShapeGroup);\r\n renderMeasurementArrows(ctx, measurementPoints);\r\n renderMeasurementLength(ctx, measurementPoints);\r\n //console.log(\"measurementPoints\", measurementPoints);\r\n\r\n //this is for the test purposes\r\n // const measurementPoints2 = sqftShapeManager.getShapesContourPointsPointField(shapes);\r\n // console.log(\"measurementPoints2\", measurementPoints2);\r\n // renderMeasurementArrows(ctx, measurementPoints2);\r\n // renderMeasurementLength(ctx, measurementPoints2);\r\n }\r\n }\r\n}\r\n\r\nexport const renderMeasurementArrows = (ctx, measurementPoints) => {\r\n RenderFigures.drawArrowsAroundPoints(ctx, measurementPoints);\r\n}\r\n\r\nexport const renderMeasurementLength = (ctx, measurementPoints) => {\r\n RenderParts.drawMeasurementAroundPoints(ctx, measurementPoints);\r\n}\r\n","class SlabAdditionalShape {\r\n line;\r\n backsplashShapeId;\r\n\r\n constructor(line, backsplashShapeId) {\r\n this.line = line;\r\n this.backsplashShapeId = backsplashShapeId;\r\n }\r\n}\r\n\r\nexport default SlabAdditionalShape;\r\n","import store from \"../../../../../store\";\r\nimport {changeResource, deleteAllResources} from \"../../../../../actions/sqftResourceFunctions\";\r\nimport {deleteAllMiteredSections} from \"../../../../../actions/sqftMiteredFunctions\";\r\nimport workspace from \"../core/workspace\";\r\nimport {RESOURCE_TYPE} from \"../../../constants\";\r\n\r\nconst sqftResourcesManager = {\r\n deleteAllResources: () => {\r\n store.dispatch(deleteAllResources());\r\n },\r\n deleteAllMiteredSections: () => {\r\n const reduxState = store.getState();\r\n const miteredSections = reduxState.sqftMiteredState.miteredSections;\r\n if (miteredSections.length) {\r\n store.dispatch(deleteAllMiteredSections());\r\n }\r\n },\r\n getAttachedToLineResource: (line) => {\r\n return workspace.getAttachedTo(line)\r\n },\r\n updateAttachedToLineResource: (attachedToResource) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.attachedToLine, attachedToResource));\r\n },\r\n getLineByAttachedItemId: (id) => {\r\n const state = store.getState();\r\n const attachedToLineResources = state.sqftResourceState.attachedToLine;\r\n const attachedItem = attachedToLineResources.find(attachedToLine => attachedToLine.id === id);\r\n if (attachedItem) {\r\n return workspace.getLineById(attachedItem.attachedToId);\r\n }\r\n },\r\n deleteAttachedItemById: (id) => {\r\n const line = sqftResourcesManager.getLineByAttachedItemId(id);\r\n\r\n if (line) {\r\n line.deleteAttachedItem();\r\n }\r\n }\r\n}\r\n\r\nexport default sqftResourcesManager\r\n","import workspace from \"../../workspace\";\r\n\r\nclass ShapeAbsolute {\r\n __shape;\r\n __intersectionPoints = [];\r\n __minLengthToIntersectionPoints;\r\n __absolutePos = null;\r\n __snappedWithShape = null;\r\n __snappedShapeGroup = null;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n setParentId(parentId) {\r\n this.__shape.shapeParent = parentId\r\n }\r\n setRotationDegreesSlab(rotationDegrees) {\r\n this.__shape.rotatedDegreesSlab = rotationDegrees\r\n }\r\n setAbsolutePos = (pos) => {\r\n this.__absolutePos = pos;\r\n };\r\n getAbsolutePosition = () => {\r\n return this.__absolutePos;\r\n };\r\n getIntersectionPoints = () => { return this.__intersectionPoints; };\r\n setIntersectionsPoints = (points) => { this.__intersectionPoints = points; };\r\n\r\n setSnappedWithShape = (shape) => { this.__snappedWithShape = shape}\r\n getSnappedWithShape = () => { return this.__snappedWithShape }\r\n\r\n setSnappedShapeGroup = (shapeGroup) => { this.__snappedShapeGroup = shapeGroup}\r\n getSnappedShapeGroup = () => { return this.__snappedShapeGroup }\r\n\r\n setMinLengthToIntersectionPoints = (length) => {\r\n this.__minLengthToIntersectionPoints = length;\r\n };\r\n\r\n import = (data) => {\r\n if (data.snappedWithShape && data.snappedWithShape.id) {\r\n const snappedWithShape = workspace.getShapeById(data.snappedWithShape.id);\r\n this.setSnappedWithShape(snappedWithShape);\r\n }\r\n\r\n this.setAbsolutePos(data ? data.absolutePosition : null);\r\n this.setIntersectionsPoints(data ? data.intersectionPoints : null);\r\n this.setSnappedShapeGroup(data ? data.snappedShapeGroup : null);\r\n }\r\n export = () => {\r\n const snappedWithShape = this.getSnappedWithShape();\r\n\r\n return {\r\n absolutePosition: this.getAbsolutePosition(),\r\n intersectionPoints: this.getIntersectionPoints(),\r\n snappedWithShape: snappedWithShape ? snappedWithShape.id : null,\r\n snappedShapeGroup: this.getSnappedShapeGroup(),\r\n }\r\n }\r\n}\r\n\r\nexport default ShapeAbsolute\r\n","import {getPointBetweenPoints, getPointDistance, orientation} from \"../helpers/sqftHelper\";\r\n\r\nconst setLinePoints = (movingLine, newFrom, newTo) => {\r\n movingLine.from.x = newFrom.x;\r\n movingLine.from.y = newFrom.y;\r\n movingLine.to.x = newTo.x;\r\n movingLine.to.y = newTo.y;\r\n};\r\n\r\n/**\r\n * Given a three lines detects moving points and sets correct new points X and Y values.\r\n * @param {Object} movingLine current moving line\r\n * @param {Object} nextLine\r\n * @param {Object} prevLine\r\n * @param {number} baseLineDistance -state value, that is overwritten on each mouseDown event\r\n * @param {number} yDiff Y difference of mouse move\r\n * @param {number} lineOrientation movingLine orientation\r\n */\r\nexport default function (\r\n movingLine,\r\n nextLine,\r\n prevLine,\r\n baseLineDistance,\r\n yDiff,\r\n lineOrientation\r\n) {\r\n let newFrom = {}, newTo = {}, diff;\r\n\r\n // 1) move line\r\n switch(lineOrientation) {\r\n case orientation.SOUTHEAST:\r\n case orientation.NORTHEAST:\r\n diff = -yDiff;\r\n break;\r\n case orientation.SOUTHWEST:\r\n case orientation.NORTHWEST:\r\n diff = yDiff;\r\n break;\r\n }\r\n newFrom = getPointBetweenPoints(movingLine.from, prevLine.from, diff);\r\n newTo = getPointBetweenPoints(movingLine.to, nextLine.to, diff);\r\n setLinePoints(movingLine, newFrom, newTo);\r\n const pointDistance2 = getPointDistance(newFrom, newTo);\r\n\r\n // 2) fix points corrections\r\n if (baseLineDistance !== pointDistance2) {\r\n switch(lineOrientation) {\r\n case orientation.SOUTHWEST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y + delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y - delta};\r\n }\r\n break;\r\n case orientation.SOUTHEAST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y + delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y - delta};\r\n }\r\n break;\r\n case orientation.NORTHEAST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y - delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y + delta};\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n if (pointDistance2 < baseLineDistance) {\r\n const delta = (baseLineDistance - pointDistance2) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x + delta, y: movingLine.from.y + delta};\r\n newTo = {x: movingLine.to.x - delta, y: movingLine.to.y - delta};\r\n } else {\r\n const delta = (pointDistance2 - baseLineDistance) / 4; //for ex. 26 - 25.4 = 0.6\r\n newFrom = {x: movingLine.from.x - delta, y: movingLine.from.y - delta};\r\n newTo = {x: movingLine.to.x + delta, y: movingLine.to.y + delta};\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n setLinePoints(movingLine, newFrom, newTo);\r\n }\r\n}\r\n","import {getPointOnTheLine} from \"../../../../../helpers/sqftHelper\";\r\n\r\nexport const mathRound = (value) => Math.round(value * 100) / 100;\r\n\r\nfunction horizontalEastLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff/2);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff/2);\r\n nextLine.from.x = mathRound(nextLine.from.x + diff/2);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(-diff / 2, 0);\r\n }\r\n if(prevLine.isWithMitered()) {\r\n prevLine.miteredOverlay.moveMitered(diff / 2, 0);\r\n }\r\n if(nextLine.isWithMitered()) {\r\n nextLine.miteredOverlay.moveMitered(-diff / 2, 0);\r\n }\r\n}\r\nfunction horizontalWestLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff/2);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff/2);\r\n nextLine.from.x = mathRound(nextLine.from.x - diff/2);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(-diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(diff / 2, 0);\r\n }\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.miteredOverlay.moveMitered(-diff / 2, 0);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.miteredOverlay.moveMitered(diff / 2, 0);\r\n }\r\n}\r\nfunction verticalSouthLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff/2);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff/2);\r\n nextLine.from.y = mathRound(nextLine.from.y + diff/2);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(0, diff / 2);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(0,-diff / 2);\r\n }\r\n}\r\nfunction verticalNorthLineExpand(prevLine, nextLine, diff) {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff/2);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff/2);\r\n nextLine.from.y = mathRound(nextLine.from.y - diff/2);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff/2);\r\n if(prevLine.isWithBumpout()) {\r\n prevLine.bumpoutOverlay.moveBumpout(0,-diff / 2);\r\n }\r\n if(nextLine.isWithBumpout()) {\r\n nextLine.bumpoutOverlay.moveBumpout(0,diff / 2);\r\n }\r\n}\r\nexport default function(line, diff, isWallsLockMode) {\r\n // console.log(\"line\", line, diff);\r\n const lineDirection = line.getLineDirection();\r\n const shape = line.getParent();\r\n const prevLine = shape.getPrevLine(line);\r\n const nextLine = shape.getNextLine(line);\r\n switch (shape.shapeType) {\r\n case \"square\":\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n } else if (lineDirection.newDirection === \"west\") {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n } else if (lineDirection.newDirection === \"north\") {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n }\r\n }\r\n break;\r\n case \"wideangle\": {\r\n const rotatedDegrees = line.getParent().rotatedDegrees;\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n if (rotatedDegrees === 180 || rotatedDegrees === 270) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff);\r\n } else {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n }\r\n } else if (lineDirection.newDirection === \"west\") {\r\n const nextLineDirection = nextLine.getLineDirection();\r\n if (nextLineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n } else if (rotatedDegrees === 180 || rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n }\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n const prevLineDirection = prevLine.getLineDirection();\r\n if (prevLineDirection.newDirection === \"west\") {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n } else {\r\n if (rotatedDegrees === 90 || rotatedDegrees === 180) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff);\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n } else {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n }\r\n }\r\n } else if (lineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90 || rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff);\r\n }\r\n }\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n break;\r\n }\r\n case \"horseshoe\": {\r\n const rotatedDegrees = line.getParent().rotatedDegrees;\r\n const prevLineDirection = prevLine.getLineDirection();\r\n const nextLineDirection = nextLine.getLineDirection();\r\n\r\n console.log(\"-------------------------------\");\r\n console.log(\"line\", line);\r\n console.log(\"diff\", diff);\r\n console.log(\"shape.shapeType\", shape.shapeType);\r\n console.log(\"lineDirection.orientation\", lineDirection.orientation);\r\n console.log(\"lineDirection.newDirection\", lineDirection.newDirection);\r\n console.log(\"prevLineDirection.newDirection\", prevLineDirection.newDirection);\r\n console.log(\"nextLineDirection.newDirection\", nextLineDirection.newDirection);\r\n console.log(\"rotatedDegrees\", rotatedDegrees);\r\n if (lineDirection.orientation === \"horizontal\") {\r\n if (lineDirection.newDirection === \"east\") {\r\n if (prevLineDirection.newDirection === \"north\") {\r\n if (rotatedDegrees === 90) {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n } else if (rotatedDegrees === 180) {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n } else if (rotatedDegrees === 270) {\r\n prevLine.from.x = mathRound(prevLine.from.x - diff);\r\n prevLine.to.x = mathRound(prevLine.to.x - diff);\r\n } else {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n horizontalWestLineExpand(...line.getPairedLines(), diff);\r\n }\r\n } else if (rotatedDegrees === 90) {\r\n nextLine.from.x = mathRound(nextLine.from.x + diff);\r\n nextLine.to.x = mathRound(nextLine.to.x + diff);\r\n } else {\r\n horizontalEastLineExpand(prevLine, nextLine, diff);\r\n horizontalWestLineExpand(...line.getPairedLines(), diff);\r\n }\r\n } else if (lineDirection.newDirection === \"west\") {\r\n if (prevLineDirection.newDirection === \"south\") {\r\n if (rotatedDegrees === 90) {\r\n prevLine.from.x = mathRound(prevLine.from.x + diff);\r\n prevLine.to.x = mathRound(prevLine.to.x + diff);\r\n } else if (rotatedDegrees === 180) {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n horizontalEastLineExpand(...line.getPairedLines(), diff);\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n }\r\n } else if (rotatedDegrees === 270) {\r\n nextLine.from.x = mathRound(nextLine.from.x - diff);\r\n nextLine.to.x = mathRound(nextLine.to.x - diff);\r\n } else {\r\n horizontalWestLineExpand(prevLine, nextLine, diff);\r\n horizontalEastLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n if (rotatedDegrees === 180) {\r\n prevLine.from.y = mathRound(prevLine.from.y - diff);\r\n prevLine.to.y = mathRound(prevLine.to.y - diff);\r\n } else {\r\n if (nextLineDirection.newDirection === \"west\") {\r\n if (rotatedDegrees === 270) {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n verticalNorthLineExpand(...line.getPairedLines(), diff);\r\n } else {\r\n nextLine.from.y = mathRound(nextLine.from.y + diff);\r\n nextLine.to.y = mathRound(nextLine.to.y + diff);\r\n }\r\n } else {\r\n verticalSouthLineExpand(prevLine, nextLine, diff);\r\n verticalNorthLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else if (lineDirection.newDirection === \"north\") {\r\n if (prevLineDirection.newDirection === \"west\") {\r\n if (rotatedDegrees === 90) {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n verticalSouthLineExpand(...line.getPairedLines(), diff);\r\n } else if (rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n prevLine.from.y = mathRound(prevLine.from.y + diff);\r\n prevLine.to.y = mathRound(prevLine.to.y + diff);\r\n }\r\n } else if (rotatedDegrees === 180) {\r\n nextLine.from.y = mathRound(nextLine.from.y - diff);\r\n nextLine.to.y = mathRound(nextLine.to.y - diff);\r\n } else {\r\n verticalNorthLineExpand(prevLine, nextLine, diff);\r\n verticalSouthLineExpand(...line.getPairedLines(), diff);\r\n }\r\n }\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (isWallsLockMode) {\r\n const prevPrevLine = shape.getPrevLine(prevLine);\r\n const nextNextLine = shape.getNextLine(nextLine);\r\n const prevPrevLineDirection = prevPrevLine.getLineDirection();\r\n const nextNextLineDirection = nextNextLine.getLineDirection();\r\n\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n const deltaX = pointOnTheLineFrom.x - line.from.x;\r\n const deltaY = pointOnTheLineFrom.y - line.from.y;\r\n\r\n //move line point\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n\r\n //move prevLine point\r\n prevLine.from.x += deltaX;\r\n prevLine.from.y += deltaY;\r\n // return prevLine coordinate back to its axis if the line was\r\n if (prevPrevLineDirection.orientation === \"horizontal\") {\r\n prevLine.from.y -= deltaY;\r\n }\r\n if (prevPrevLineDirection.orientation === \"vertical\") {\r\n prevLine.from.x -= deltaX;\r\n }\r\n\r\n // move nextLine point\r\n nextLine.to.x -= deltaX;\r\n nextLine.to.y -= deltaY;\r\n // return nextLine coordinate back to its axis if the line was\r\n if (nextNextLineDirection.orientation === \"horizontal\") {\r\n nextLine.to.y += deltaY;\r\n }\r\n if (nextNextLineDirection.orientation === \"vertical\") {\r\n nextLine.to.x += deltaX;\r\n }\r\n\r\n } else {\r\n const pointOnTheLineFrom = getPointOnTheLine(line.from, line.to, diff / 2);\r\n const pointOnTheLineTo = getPointOnTheLine(line.to, line.from, diff / 2);\r\n line.to.x = pointOnTheLineTo.x;\r\n line.to.y = pointOnTheLineTo.y;\r\n line.from.x = pointOnTheLineFrom.x;\r\n line.from.y = pointOnTheLineFrom.y;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const getMaxResizeWidth = (line) => {\r\n const shape = line.getParent();\r\n switch (shape.shapeType) {\r\n case \"square\":\r\n case \"wideangle\":\r\n default:\r\n break;\r\n case \"horseshoe\":\r\n // const prevLineDirection = prevLine.getLineDirection();\r\n // const nextLineDirection = nextLine.getLineDirection();\r\n // const rotatedDegrees = line.getParent().rotatedDegrees;\r\n // if (lineDirection.orientation === \"horizontal\") {\r\n // if (lineDirection.newDirection === \"east\") {\r\n // if (prevLineDirection.orientation === \"vertical\" && prevLineDirection.newDirection === \"south\"\r\n // && nextLineDirection.orientation === \"vertical\" && nextLineDirection.newDirection === \"north\"\r\n // //&& rotatedDegrees !== 180\r\n // ) {\r\n // const maxRightX = shape.getNextLine(nextLine).to.x;\r\n // const maxLeftX = shape.getPrevLine(prevLine).from.x;\r\n // return maxRightX - maxLeftX - 2; // 1 per each line, line can't be 0\r\n // }\r\n // } else if (lineDirection.newDirection === \"west\") {\r\n // if (prevLineDirection.orientation === \"vertical\" && prevLineDirection.newDirection === \"north\"\r\n // && nextLineDirection.orientation === \"vertical\" && nextLineDirection.newDirection === \"south\"\r\n // //&& rotatedDegrees !== 0\r\n // ) {\r\n // const maxRightX = shape.getPrevLine(prevLine).from.x;\r\n // const maxLeftX = shape.getNextLine(nextLine).to.x;\r\n // return maxRightX - maxLeftX - 2; // 1 per each line, line can't be 0\r\n // }\r\n // }\r\n // } else if (lineDirection.orientation === \"vertical\") {\r\n // if (lineDirection.newDirection === \"south\") {\r\n // if (prevLineDirection.orientation === \"horizontal\" && prevLineDirection.newDirection === \"west\"\r\n // && nextLineDirection.orientation === \"horizontal\" && nextLineDirection.newDirection === \"east\"\r\n // //&& rotatedDegrees !== 90\r\n // ) {\r\n // const maxTopY = shape.getPrevLine(prevLine).from.y;\r\n // const maxBottomY = shape.getNextLine(nextLine).to.y;\r\n // return maxBottomY - maxTopY - 2; // 1 per each line, line can't be 0\r\n // }\r\n // } else if (lineDirection.newDirection === \"north\") {\r\n // if (prevLineDirection.orientation === \"horizontal\" && prevLineDirection.newDirection === \"east\"\r\n // && nextLineDirection.orientation === \"horizontal\" && nextLineDirection.newDirection === \"west\"\r\n // // && rotatedDegrees !== 270\r\n // ) {\r\n // const maxTopY = shape.getNextLine(nextLine).to.y;\r\n // const maxBottomY = shape.getPrevLine(prevLine).from.y;\r\n // return maxBottomY - maxTopY - 2; // 1 per each line, line can't be 0\r\n // }\r\n // }\r\n // }\r\n break;\r\n }\r\n return \"9999\";\r\n};\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst RECTANGLE_WIDTH = 150;\r\nconst RECTANGLE_HEIGHT = 26;\r\nconst RECTANGLE_HEIGHT_METRIC = 23.62;\r\n\r\nexport default function(rectangleWidth = RECTANGLE_WIDTH, rectangleHeight = 0) {\r\n let points;\r\n if (rectangleHeight === 0) {\r\n rectangleHeight = config.measureUnit === \"Imperial\" ? RECTANGLE_HEIGHT : RECTANGLE_HEIGHT_METRIC;\r\n }\r\n\r\n points = [\r\n new point(0, 0, \"lefttop\"),\r\n new point(rectangleWidth, 0, \"righttop\"),\r\n new point(rectangleWidth, rectangleHeight, \"rightbottom\"),\r\n new point(0, rectangleHeight, \"leftbottom\")\r\n ];\r\n\r\n return [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[0])\r\n ];\r\n}\r\n","import Label from \"../../shapes/overlays/label\";\r\nimport {getShapeFeatureId} from \"../../../../../helpers/featureHelper\";\r\n\r\nconst SHAPE_LABELS = ['center_island_countertop', 'countertop'];\r\nexport const updateShape = (partId, shape, wizardGroup = null) => {\r\n shape.setPartId(partId);\r\n shape.setFeatureId(getShapeFeatureId(partId));\r\n if (!SHAPE_LABELS.includes(partId)) {\r\n shape.setType(partId);\r\n } else {\r\n shape.setType(undefined);\r\n }\r\n if (wizardGroup) {\r\n shape.setProperty(\"fromWizardGroupId\", wizardGroup.id);\r\n }\r\n};\r\n\r\nexport const initLabel = (labelText, partId, shape) => {\r\n let firstShapeLine = shape.getLines()[0];\r\n\r\n if(firstShapeLine.labelOverlay !== null) {\r\n firstShapeLine.labelOverlay.setLabelText(labelText);\r\n } else {\r\n firstShapeLine.labelOverlay = new Label();\r\n firstShapeLine.labelOverlay.init(firstShapeLine, labelText, partId);\r\n }\r\n};\r\n\r\nexport const initTitle = (labelText, partId, shape) => {\r\n let thirdShapeLine = shape.getLines()[2];\r\n thirdShapeLine.titleOverlay = new Label({\r\n labelTextColor: 'rgba(165, 174, 183, 0.66)',\r\n isTitle: true,\r\n lineOffset: 20\r\n });\r\n thirdShapeLine.titleOverlay.init(thirdShapeLine, labelText, partId);\r\n};\r\n","import EventManager from \"../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {\r\n getAngleRelativeToTheHorizontalAxis,\r\n getMousePositionOnField,\r\n getPointDistance\r\n} from \"../../../helpers/sqftHelper\";\r\n\r\n/**\r\n * @return {PointV2}\r\n */\r\nexport const getFreeDrawPoint = (pos) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n let wPos = workspace.getPosition();\r\n let scale = sqftConfig.scale;\r\n let offset = {\r\n x: (pos.x + wPos.x) / scale,\r\n y: (pos.y + wPos.y) / scale\r\n };\r\n\r\n return new PointV2(offset.x, offset.y, workspace, pointState, pointDesign);\r\n}\r\n\r\nexport const getLockedPoint = (existingPoint, pos, lockedAngleStep) => {\r\n const newPoint = getFreeDrawPoint(pos);\r\n const lockedPosition = getLockPointPos(existingPoint, lockedAngleStep);\r\n const lockedPositionOnField = getMousePositionOnField(lockedPosition.x, lockedPosition.y);\r\n newPoint.setPosition(lockedPositionOnField);\r\n\r\n return newPoint\r\n}\r\n\r\n/**\r\n * works only for 90 deg angle\r\n * @param pointV2\r\n * @param angleStep\r\n * @param mousePos\r\n * @return {{x: int, y: int}}\r\n */\r\nexport const getLockPointPos = (pointV2, angleStep = 90, mousePos = EventManager.LastKnownMousePos) => {\r\n const pointV2PointField = pointV2.getPointField();\r\n\r\n let rotateToMouseAngle = getAngleRelativeToTheHorizontalAxis(mousePos, pointV2PointField);\r\n let lineLength = getPointDistance(pointV2PointField, mousePos);\r\n const closestAngle = Math.round(rotateToMouseAngle / angleStep) * angleStep;\r\n const angleRad = (closestAngle * Math.PI) / 180;\r\n\r\n return {\r\n x: pointV2PointField.x + lineLength * Math.cos(angleRad),\r\n y: pointV2PointField.y + lineLength * Math.sin(angleRad)\r\n };\r\n};\r\n","import uuid from \"uuid\";\r\nimport _ from 'lodash';\r\n\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport {\r\n getParallelPoints,\r\n getPointBetweenPoints, getPointOnTheLine, isInnerCorner,\r\n measureDistanceToInches\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport store from \"../../../../../../../store\";\r\nimport {deleteResourceAttachedTo} from \"../../../../../../../actions/sqftResourceFunctions\";\r\nimport {RESOURCE_TYPE} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport MiteredController from \"../../controls/mitered\";\r\nimport {addMiteredSection} from \"../../../../../../../actions/sqftMiteredFunctions\";\r\n\r\nexport default class LineCorner {\r\n\r\n line;\r\n id;\r\n _state = {\r\n mouseDown: false,\r\n isHovering: false,\r\n isCornerLineHovering: false,\r\n withEdge: false,\r\n withBacksplash: false,\r\n withWall: false,\r\n withId: null,\r\n backsplashHeight: null,\r\n isWithMitered: false,\r\n };\r\n attachedShape = null;\r\n miteredOverlay = null;\r\n design = {\r\n additionalOutlineHoverWidth: 3,\r\n };\r\n\r\n constructor(line) {\r\n this.line = line;\r\n this.id = uuid.v4(); //line.id;\r\n }\r\n\r\n get state() {\r\n return this._state;\r\n }\r\n\r\n set state(value) {\r\n this._state = value;\r\n }\r\n\r\n isWithMitered = () => {\r\n return this.state.isWithMitered\r\n }\r\n\r\n getAttachedShape() {\r\n return this.attachedShape;\r\n }\r\n\r\n getAttachedItems() {\r\n let isAnyItemsAttached = false;\r\n for (const attachedItemKey in this._state.attachedItems) {\r\n if (this._state.attachedItems[attachedItemKey]) {\r\n isAnyItemsAttached = true\r\n }\r\n }\r\n return this._state.withEdge\r\n || this._state.withBacksplash\r\n || this._state.withWall\r\n || this._state.withId\r\n || isAnyItemsAttached\r\n }\r\n\r\n deleteAttachedItem = () => {\r\n this.state.withEdge = false;\r\n this.state.withBacksplash = false;\r\n this.state.withWall = false;\r\n this.state.withId = null;\r\n this.state.attachedShape = null;\r\n store.dispatch(deleteResourceAttachedTo(RESOURCE_TYPE.attachedToLine, this));\r\n //this.state.overlay.removeLineText(); // todo\r\n };\r\n\r\n getLength(){\r\n return this.line.to.angle\r\n }\r\n\r\n getLineLength() {\r\n return this.line.addDecimalToLength(measureDistanceToInches(this.line.to.angle));\r\n }\r\n\r\n getLineLengthMm() {\r\n return measureDistanceToInches(this.line.to.angle).millimeters;\r\n }\r\n\r\n getParent() {\r\n return this.line.getParent()\r\n }\r\n\r\n addEdgeToCornerLine = (edgeName, id) => {\r\n this.state.withEdge = true;\r\n this.state.withBacksplash = false;\r\n this.state.withWall = false;\r\n this.state.withId = id;\r\n\r\n //self.overlay.renderEdgeText(edgeName); //todo\r\n };\r\n\r\n addBacksplashToCornerLine = (backsplashName, type, featureId, backsplashHeight) => {\r\n if (type === \"wall\") {\r\n this.state.withWall = true;\r\n this.state.withBacksplash = false;\r\n } else {\r\n this.state.withBacksplash = true;\r\n this.state.withWall = false;\r\n }\r\n this.state.withEdge = false;\r\n this.state.withId = featureId;\r\n this.state.backsplashHeight = backsplashHeight;\r\n //self.overlay.renderBacksplashText(backsplashName, type); //todo\r\n };\r\n\r\n addMiteredToCornerLine = () => {\r\n for (const attachedItemKey in state.attachedItems) {\r\n this.state.attachedItems[attachedItemKey] = false\r\n }\r\n if (!this.state.isWithMitered) {\r\n this.deleteAttachedItem();\r\n //if (this.getOrientation() === orientation.VERTICAL || this.getOrientation() === orientation.HORIZONTAL) {\r\n this.state.isWithMitered = true;\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.init();\r\n\r\n return this.miteredOverlay;\r\n }\r\n\r\n return this.miteredOverlay\r\n };\r\n\r\n updateCornerHoverState(mousePos){\r\n this.state.isHovering = false;\r\n this.state.isCornerLineHovering = false;\r\n\r\n if(this.line.to.angle > 0 && this.isMouseOverAngle(mousePos)) {\r\n //console.log('mouse over outline angle');\r\n this.state.isHovering = true;\r\n }\r\n\r\n if(this.line.to.angle > 0 && this.isMouseOverCornerLine(mousePos)) {\r\n //console.log('mouse over angle purple line');\r\n this.state.isCornerLineHovering = true;\r\n }\r\n }\r\n\r\n export() {\r\n return {\r\n id: this.id,\r\n _state: _.clone(this._state),\r\n miteredOverlay: this.miteredOverlay ? this.miteredOverlay.export() : null,\r\n }\r\n }\r\n\r\n import(data) {\r\n this.id = data.id;\r\n this._state = data._state;\r\n if (data.miteredOverlay) {\r\n //addMiteredToLine\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n this.miteredOverlay = workspace.miteredController.createMiteredOverlay(this);\r\n this.miteredOverlay.import(this, data.mitered);\r\n this.state.isWithMitered = true;\r\n store.dispatch(addMiteredSection(this.miteredOverlay));\r\n }\r\n }\r\n\r\n isMouseOverAngle(mousePos) {\r\n //console.log('state.angleLinePoints', state.angleLinePoints);\r\n let field = this.getOutlineAngleLineField();\r\n let isHovering = pnpolyArray(field, mousePos)\r\n || pnpolyArray([field[0], field[2], field[1], field[3]], mousePos);\r\n\r\n return isHovering || this.state.mouseDown;\r\n }\r\n\r\n isMouseOverCornerLine(mousePos) {\r\n let field = this.getAngleLineField();\r\n let isHovering = pnpolyArray(field, mousePos)\r\n || pnpolyArray([field[0], field[2], field[1], field[3]], mousePos);\r\n\r\n return isHovering || this.state.mouseDown ;\r\n }\r\n\r\n getAngleLineField() {\r\n const angleLinePoints = this.getAnglePoints();\r\n const design = this.line.getDesign();\r\n let lineField;\r\n\r\n if( angleLinePoints.cordCornerFrom === undefined ) {\r\n return {}\r\n }\r\n\r\n let outlineMargin = design.outlineWidth + this.design.additionalOutlineHoverWidth;\r\n\r\n // line /\r\n if(angleLinePoints.cordCornerFrom.y < angleLinePoints.cordCornerTo.y && angleLinePoints.cordCornerFrom.x > angleLinePoints.cordCornerTo.x\r\n || angleLinePoints.cordCornerFrom.y > angleLinePoints.cordCornerTo.y && angleLinePoints.cordCornerFrom.x < angleLinePoints.cordCornerTo.x\r\n ){\r\n lineField = [\r\n [angleLinePoints.cordCornerFrom.x + outlineMargin, angleLinePoints.cordCornerFrom.y + outlineMargin],\r\n [angleLinePoints.cordCornerTo.x + outlineMargin, angleLinePoints.cordCornerTo.y + outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x - outlineMargin, angleLinePoints.cordCornerFrom.y - outlineMargin],\r\n [angleLinePoints.cordCornerTo.x - outlineMargin, angleLinePoints.cordCornerTo.y - outlineMargin],\r\n ];\r\n // line \\\r\n } else {\r\n lineField = [\r\n [angleLinePoints.cordCornerTo.x + outlineMargin, angleLinePoints.cordCornerTo.y - outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x + outlineMargin, angleLinePoints.cordCornerFrom.y - outlineMargin],\r\n [angleLinePoints.cordCornerTo.x - outlineMargin, angleLinePoints.cordCornerTo.y + outlineMargin],\r\n [angleLinePoints.cordCornerFrom.x - outlineMargin, angleLinePoints.cordCornerFrom.y + outlineMargin],\r\n ];\r\n }\r\n\r\n return lineField\r\n }\r\n\r\n getOutlineAngleLineField() {\r\n const angleLinePoints = this.getAnglePoints();\r\n const design = this.line.getDesign();\r\n let lineField;\r\n\r\n if( angleLinePoints.cord1 === undefined ) {\r\n return {}\r\n }\r\n\r\n let outlineMargin = design.outlineWidth + this.design.additionalOutlineHoverWidth;\r\n\r\n // line /\r\n if(angleLinePoints.cord2.y < angleLinePoints.cord3.y && angleLinePoints.cord2.x > angleLinePoints.cord3.x\r\n || angleLinePoints.cord2.y > angleLinePoints.cord3.y && angleLinePoints.cord2.x < angleLinePoints.cord3.x\r\n ){\r\n lineField = [\r\n [angleLinePoints.cord2.x + outlineMargin, angleLinePoints.cord2.y + outlineMargin],\r\n [angleLinePoints.cord3.x + outlineMargin, angleLinePoints.cord3.y + outlineMargin],\r\n [angleLinePoints.cord2.x - outlineMargin, angleLinePoints.cord2.y - outlineMargin],\r\n [angleLinePoints.cord3.x - outlineMargin, angleLinePoints.cord3.y - outlineMargin],\r\n ];\r\n // line \\\r\n } else {\r\n lineField = [\r\n [angleLinePoints.cord3.x + outlineMargin, angleLinePoints.cord3.y - outlineMargin],\r\n [angleLinePoints.cord2.x + outlineMargin, angleLinePoints.cord2.y - outlineMargin],\r\n [angleLinePoints.cord3.x - outlineMargin, angleLinePoints.cord3.y + outlineMargin],\r\n [angleLinePoints.cord2.x - outlineMargin, angleLinePoints.cord2.y + outlineMargin],\r\n ];\r\n }\r\n\r\n return lineField\r\n }\r\n\r\n getAnglePoints() {\r\n const lineDirection = this.line.getParent().getAngleDirection(this.line),\r\n renderTo = this.line.calculateRenderPosition(this.line.to),\r\n renderFrom = this.line.calculateRenderPosition(this.line.from),\r\n nextLine = this.line.getParent().getNextLine(this.line),\r\n nextLineRenderTo = nextLine.calculateRenderPosition(nextLine.to),\r\n design = this.line.getDesign();\r\n\r\n let angleLinePoints = {};\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\":\r\n case \"vertical\":\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n nextLine.setLinePoints();\r\n if (this.line.drawLineTo === undefined || this.line.drawLineFrom === undefined) {\r\n this.line.setLinePoints();\r\n }\r\n\r\n const cord1 = this.line.drawLineTo;\r\n const cord4 = getPointOnTheLine(nextLine.drawLineFrom, nextLine.drawLineTo, design.outlineMargin); // +design.outlineMargin is to prevent overlapping\r\n\r\n // purple corner line\r\n // const renderTo = this.line.calculateRenderPosition(this.line.to);\r\n // const renderFrom = this.line.calculateRenderPosition(this.line.from);\r\n // const radiusMultiplier = Math.sqrt( Math.pow(this.getLength(), 2) * 2) * sqftConfig.scale;\r\n // const nextLineRenderTo = this.line.calculateRenderPosition(nextLine.to);\r\n\r\n const radiusMultiplier = Math.sqrt( Math.pow(this.line.to.angle, 2) * 2);\r\n const radius = radiusMultiplier * sqftConfig.scale;\r\n const isLineCornerInner = isInnerCorner(this.line.getParent(), renderFrom, renderTo, nextLineRenderTo);\r\n const pointIndent = isLineCornerInner ? 4 : -4;\r\n const pointOnTheBlueLine = getPointBetweenPoints(renderTo, renderFrom, radius / 2 + pointIndent);\r\n const pointOnTheBlueNextLine = getPointBetweenPoints(renderTo, nextLineRenderTo, radius / 2 + pointIndent);\r\n const [cord2] = getParallelPoints(renderFrom, pointOnTheBlueLine,-design.outlineMargin);\r\n const [cord3] = getParallelPoints(nextLineRenderTo, pointOnTheBlueNextLine, design.outlineMargin);\r\n\r\n const cordCornerIndent = isLineCornerInner && this.line.to.angle < design.outlineMargin\r\n ? 0\r\n : -3;\r\n const cordCornerFrom = getPointOnTheLine(cord2, cord3, cordCornerIndent * sqftConfig.scale); // set offset from corner\r\n const cordCornerTo = getPointOnTheLine(cord3, cord2, cordCornerIndent * sqftConfig.scale); // set offset from corner\r\n // v2\r\n //let [cordCornerTo, cordCornerFrom] = getParallelPoints(pointOnTheBlueLine, pointOnTheBlueNextLine, -9);\r\n\r\n angleLinePoints = {\r\n cord1: {\r\n x: cord1.x,\r\n y: cord1.y\r\n },\r\n cord2: {\r\n x: cord2.x,\r\n y: cord2.y\r\n },\r\n cord3: {\r\n x: cord3.x,\r\n y: cord3.y\r\n },\r\n cord4: {\r\n x: cord4.x,\r\n y: cord4.y\r\n },\r\n cordCornerFrom: {\r\n x: cordCornerFrom.x,\r\n y: cordCornerFrom.y\r\n },\r\n cordCornerTo: {\r\n x: cordCornerTo.x,\r\n y: cordCornerTo.y\r\n }\r\n };\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n //wtf?\r\n angleLinePoints.cord2.width = sqftConfig.fieldWidth;\r\n angleLinePoints.cord3.width = sqftConfig.fieldWidth;\r\n angleLinePoints.cord2.height = sqftConfig.fieldWidth;\r\n angleLinePoints.cord3.height = sqftConfig.fieldWidth;\r\n\r\n return angleLinePoints;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nclass UiSelect extends Component {\r\n\r\n static propTypes = {\r\n type: PropTypes.number,\r\n selectItems: PropTypes.array.isRequired,\r\n itemClick: PropTypes.func,\r\n valueText: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\r\n value: PropTypes.any,\r\n withCheckboxes: PropTypes.bool,\r\n className: PropTypes.string,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n\r\n handleToggleDropdown = () => {\r\n this.setState({\r\n toggle: !this.state.toggle\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.toggle\r\n ? window.addEventListener('click', this.handleWrapperBlur)\r\n : window.removeEventListener('click', this.handleWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleItemClick = (selectItem) => {\r\n this.handleToggleDropdown();\r\n this.props.itemClick(selectItem);\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".ui-checkbox, .ui-checkbox__label\", \".ui-select2__dropdown\",\r\n \".ui-select2__dropdown-back\", \".ui-select2__dropdown-list-item\", \".ui-select__dropdown\",\r\n \".ui-select__dropdown-back\", \".ui-select__dropdown-list-item\"];\r\n if (this.state.toggle && !disallowClasses.some(cls => e.target.closest(cls))) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n getSelectText = (itemText) => {\r\n switch (itemText) {\r\n case \"4in\":\r\n case \"6in\":\r\n case \"18in\":\r\n case \"Full\":\r\n return \r\n default:\r\n return itemText\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const baseClass = this.props.type === 1 ? \"ui-select\" : \"ui-select\"+this.props.type;\r\n const dropDownStyles = this.state.toggle\r\n ? { height: this.props.selectItems.length * (this.props.withCheckboxes ? 40 : 34)}\r\n : {};\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.valueText}\r\n {this.props.value ? (\r\n {this.getSelectText(this.props.value)}\r\n ) : null}\r\n
    \r\n
    \r\n
      \r\n {this.props.children || this.props.selectItems.map((selectItem, index) => {\r\n return (\r\n
    • this.handleItemClick(selectItem)}\r\n className={baseClass+\"__dropdown-list-item\"}>\r\n {this.getSelectText(selectItem.text || selectItem)}\r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n})(UiSelect);\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\n\r\nimport {LayoutType, LayoutAbbreviation, METADATA, ShowerHeadTypes} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\n\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport {Toilet} from \"./parts/toilet\";\r\nimport {WindowParent} from \"./parts/windowParent\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport Globals from \"./parts/globals\";\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport {Accessories} from \"./parts/accessories\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.bvLook;\r\n localStorageKey = \"bvLookState\";\r\n layersBinding = \"BathroomV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"background_bg\", \"walls_ceiling\", \"front_wall_crop\", \"left_wall_crop\",\r\n \"right_wall_crop\", \"shower_wall_mirror\", \"window_body\", \"shower_screen\", \"skirting_board\"];\r\n checkMorePointsPartIds = [\"vanity_faucet\", \"vanity_sink\", \"shower_fixture\", \"bathtub_fixture\", \"towel_bar\",\r\n \"robe_hook\", \"towel_ring\", \"soap_dish\", \"corner_shelf\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Accessories.id] = new Accessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[WindowParent.id] = new WindowParent();\r\n // this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n mValue = (mValue || \"\").replace(\"Look \", \"\").replace(\"Layout\", \"\");\r\n if (+mValue >= 10) {\r\n if (document.kvConfig.userId === 140067) {\r\n mValue = (+mValue - 10) + \"\"\r\n } else {\r\n dbFeature.isFromAsRoom = true;\r\n }\r\n }\r\n if (!mValue.includes(\"Layout\")) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n return mValue\r\n });\r\n // [\"ShowerSize\", \"SplitWallType\"].forEach(metaName => { // splitWallType should not use 0 as all\r\n [\"ShowerSize\"].forEach(metaName => {\r\n if (Array.isArray(dbFeature.metaData[metaName])) {\r\n if (dbFeature.metaData[metaName].includes(\"0\")) {\r\n dbFeature.metaData[metaName] = [METADATA.ALL]\r\n } else if (dbFeature.metaData[metaName].includes(\"30\")) {\r\n dbFeature.metaData[metaName] = dbFeature.metaData[metaName].map(metaValue => {\r\n if (metaValue === \"30\") { // we have 30 and 36, but they should be the same. we decided to make all 36 as the shower body\r\n return \"36\"\r\n }\r\n return metaValue\r\n })\r\n }\r\n }\r\n });\r\n if (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"].length) {\r\n dbFeature.metaData.layerPosition = dbFeature.metaData[\"Side\"][0]\r\n }\r\n Object.keys(dbFeature.metaData).forEach(key => {\r\n if (Array.isArray(dbFeature.metaData[key]) && (key !== \"CropCoords\")) {\r\n dbFeature.metaData[key] = dbFeature.metaData[key].flatMap(metaValue => {\r\n if (typeof metaValue === \"string\") {\r\n if (metaValue.includes(\", \")) {\r\n return metaValue.split(\", \")\r\n } else if (metaValue.includes(\",\")) {\r\n return metaValue.split(\",\")\r\n }\r\n }\r\n return metaValue\r\n })\r\n }\r\n });\r\n return dbFeature\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures= false) {\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n bvState[\"shower_head_type\"] = shower ? shower[\"shower_head_type\"] : \"\";\r\n bvState[\"shower_hand_type\"] = shower ? shower[\"shower_hand_type\"] : \"\";\r\n const vanityParent = this.parts[Vanity.id];\r\n bvState[\"vanity_type\"] = vanityParent ? vanityParent[\"vanity_type\"] : \"\";\r\n bvState.shower_tub_combo_is_active = shower.showerTubComboIsActive();\r\n bvState.bottom_tub = showerTubCombo.bottomTub;\r\n bvState.shower_floor_is_active = shower.showerFloorIsActive;\r\n return super.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures)\r\n }\r\n\r\n setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, useNames,\r\n needToChangeLayout, firstLoad, isFake) {\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n\r\n if (shower && bvState && bvState[\"shower_head_type\"]) {\r\n if (bvState[\"shower_head_type\"] === ShowerHeadTypes.shower_arm && !bvState[\"shower_arm\"] && bvState[\"shower_fixture\"]) {\r\n bvState[\"shower_head_type\"] = ShowerHeadTypes.shower_fixture; // fix for existing logic\r\n }\r\n shower.setShowerHeadType(bvState[\"shower_head_type\"]);\r\n }\r\n if (shower && bvState && bvState[\"shower_hand_type\"]) {\r\n shower.setShowerHandType(bvState[\"shower_hand_type\"]);\r\n }\r\n const vanityParent = this.parts[Vanity.id];\r\n vanityParent[\"vanity_type\"] = bvState[\"vanity_type\"]; // set it in any case! for standalone sink we are disabling vanity_type\r\n if (bvState[\"shower_tub_combo_is_active\"]) {\r\n showerTubCombo.setShowerTubCombo();\r\n if (bvState.bottom_tub) {\r\n showerTubCombo.bottomTub = bvState.bottom_tub\r\n }\r\n } else if (showerTubCombo.showerTubComboIsActive) {\r\n showerTubCombo.showerTubComboIsActive = false\r\n }\r\n if (bvState[\"shower_floor_is_active\"]) {\r\n shower.showerFloorIsActive = bvState[\"shower_floor_is_active\"];\r\n }\r\n return super.setActiveFeaturesFromObject(bvState, isCartAndUserStatedUpdateNeeded, useNames, needToChangeLayout, firstLoad, isFake)\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\nimport CornerShelf from \"../subparts/showerAccessories/cornerShelf\";\r\nimport ShowerPod from \"../subparts/showerAccessories/showerPod\";\r\nimport Seats from \"../subparts/showerAccessories/seats\";\r\nimport ShowerRod from \"../subparts/showerAccessories/showerRod\";\r\nimport ToiletBrush from \"../subparts/showerAccessories/toiletBrush\";\r\nimport PaperHolder from \"../subparts/showerAccessories/paperHolder\";\r\nimport RobeHook from \"../subparts/showerAccessories/robeHook\";\r\nimport TowelBar from \"../subparts/showerAccessories/towelBar\";\r\nimport TowelRing from \"../subparts/showerAccessories/towelRing\";\r\nimport GlassHolder from \"../subparts/showerAccessories/glassHolder\";\r\nimport TowelRack from \"../subparts/showerAccessories/towelRack\";\r\nimport Wainscoting from \"../subparts/showerAccessories/wainscoting\";\r\nimport Towel from \"../subparts/showerAccessories/towel\";\r\nimport TowelTowelRing from \"../subparts/showerAccessories/towelTowelRing\";\r\nimport TowelTowelBar from \"../subparts/showerAccessories/towelTowelBar\";\r\nimport TowelTowelHook from \"../subparts/showerAccessories/towelTowelHook\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n this.showerPod = null;\r\n this.seats = null;\r\n this.showerRod = null;\r\n this.robeHook = null;\r\n this.paperHolder = null;\r\n this.toiletBrush = null;\r\n this.towelBar = null;\r\n this.towel = null;\r\n this.towelTowelRing = null;\r\n this.towelTowelBar = null;\r\n this.towelTowelHook = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"corner_shelf\";\r\n this.relatedGroupNames = [\"Soap Dish\", \"Large Corner Seat\", \"Large Corner Caddie\", \"Corner Caddie\", \"Grab Bar\",\r\n \"Robe Hook\", \"Paper Holder\", \"Toilet Brush\", \"Shower Rod\", \"Corner Shelf\", \"Shower Pod\", \"Seats\", \"Towel Bar\",\r\n \"Towel Rack\", \"Towel Ring\", \"Glass Holder\", \"Wainscoting\"];\r\n }\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n case \"Robe Hook\":\r\n relatedItemName = \"robeHook\";\r\n RelatedItemClass = RobeHook;\r\n break;\r\n case \"Paper Holder\":\r\n relatedItemName = \"paperHolder\";\r\n RelatedItemClass = PaperHolder;\r\n break;\r\n case \"Toilet Brush\":\r\n relatedItemName = \"toiletBrush\";\r\n RelatedItemClass = ToiletBrush;\r\n break;\r\n case \"Shower Rod\":\r\n relatedItemName = \"showerRod\";\r\n RelatedItemClass = ShowerRod;\r\n break;\r\n case \"Corner Shelf\":\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"cornerShelf\";\r\n RelatedItemClass = CornerShelf;\r\n break;\r\n case \"Shower Pod\":\r\n case \"Storage Pod\":\r\n case \"Storage Pods\":\r\n relatedItemName = \"showerPod\";\r\n RelatedItemClass = ShowerPod;\r\n break;\r\n case \"Seats\":\r\n case \"flip-Up Seat\":\r\n case \"Flip-Up Seat\":\r\n relatedItemName = \"seats\";\r\n RelatedItemClass = Seats;\r\n break;\r\n case \"Towel Bar\":\r\n relatedItemName = \"towelBar\";\r\n RelatedItemClass = TowelBar;\r\n break;\r\n case \"Towel Rack\":\r\n relatedItemName = \"towelRack\";\r\n RelatedItemClass = TowelRack;\r\n break;\r\n case \"Towel Ring\":\r\n relatedItemName = \"towelRing\";\r\n RelatedItemClass = TowelRing;\r\n break;\r\n case \"Towel\":\r\n case \"towel\":\r\n case \"Towels\": {\r\n if (dbFeature.metaData && Array.isArray(dbFeature.metaData[\"MountPosition\"]) && dbFeature.metaData[\"MountPosition\"].length) {\r\n if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelRing\") {\r\n relatedItemName = \"towelTowelRing\";\r\n RelatedItemClass = TowelTowelRing;\r\n } else if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelBar\" || dbFeature.metaData[\"MountPosition\"][0] === \"TowelTowelBar\") {\r\n relatedItemName = \"towelTowelBar\";\r\n RelatedItemClass = TowelTowelBar;\r\n } else if (dbFeature.metaData[\"MountPosition\"][0] === \"TowelHook\") {\r\n relatedItemName = \"towelTowelHook\";\r\n RelatedItemClass = TowelTowelHook;\r\n } else {\r\n relatedItemName = \"towel\";\r\n RelatedItemClass = Towel;\r\n }\r\n } else {\r\n relatedItemName = \"towel\";\r\n RelatedItemClass = Towel;\r\n }\r\n break;\r\n }\r\n case \"Glass Holder\":\r\n relatedItemName = \"glassHolder\";\r\n RelatedItemClass = GlassHolder;\r\n break;\r\n case \"Wainscoting\":\r\n relatedItemName = \"wainscoting\";\r\n RelatedItemClass = Wainscoting;\r\n break;\r\n\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class EnclosureCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithEnclosures]; // remove enclosure top and bottom\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const bathParent = this.getParent();\r\n if (bathParent[\"bathTubBody\"]) {\r\n bathParent[\"bathTubBody\"].disabled = this.disabled || !bathParent[\"bathTubBody\"].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n [\"enclosureTop\", \"enclosureBottom\"].forEach(relName => {\r\n if (bathParent[relName] && (bathParent[relName].partId !== this.partId)) {\r\n bathParent[relName].disabled = this.disabled;\r\n }\r\n })\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.partId === \"skirting_board\") {\r\n return super.setLayers(layout);\r\n }\r\n const bathtubParent = this.getParent();\r\n if (!bathtubParent || !bathtubParent.bathTubBody || !bathtubParent.bathTubBody.activeFeature\r\n || !bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"]\r\n || !bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"].includes(METADATA.BathtubWithEnclosures)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const bathtubParent = this.getParent();\r\n conditions.push({\r\n propName: \"BathType\",\r\n propValue: bathtubParent && bathtubParent.bathTubBody && bathtubParent.bathTubBody.activeFeature\r\n ? bathtubParent.bathTubBody.activeFeature.metaData[\"BathType\"]\r\n : METADATA.BathtubWithoutEnclosures // remove Enclosure Top\r\n });\r\n if (this.partId === \"skirting_board\") {\r\n const layout = bathtubParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const vanityParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n let vanitySize = vanityParent.counterTopSize(this);\r\n if (this.partId === \"vanity_mirror\") {\r\n const currentVanityTypeFeatureGroup = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (currentVanityTypeFeatureGroup && currentVanityTypeFeatureGroup.layerPositions) {\r\n if (vanitySize === \"24\" || (Array.isArray(vanitySize) && vanitySize.includes(\"24\"))) {\r\n if (currentVanityTypeFeatureGroup.layerPositions[\"L\"] && currentVanityTypeFeatureGroup.layerPositions[\"R\"]) {\r\n conditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: \"24D\"\r\n });\r\n } else if (currentVanityTypeFeatureGroup.layerPositions[\"C\"]) {\r\n conditions.push({\r\n propName: \"MirrorShape\",\r\n propValue: \"24S\"\r\n });\r\n }\r\n }\r\n }\r\n }\r\n if (this.partId === \"vanity_backsplash\") {\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n if (vanitySize && (getCurrentRoomType() === LOOK_ROOM_TYPES.as)\r\n && !(this.partId === \"vanity_countertop\" && vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet)) {\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanitySize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","export const VISUALIZER_MANAGEMENT_ACTIONS = {\r\n getState: \"getState\",\r\n checkState: \"checkState\",\r\n setState: \"setState\",\r\n visualizerIsLoaded: \"visualizerIsLoaded\",\r\n closeVisualizerNavigation: \"closeVisualizerNavigation\",\r\n visualizerIsSaved: \"visualizerIsSaved\",\r\n}\r\n","import {getBvGroupFeatures} from \"./server-api\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\n\r\nlet axiosController;\r\n\r\n/**\r\n * renderErrorPopup can display retry connection and sign contract buttons\r\n * @param featureGroup {object}\r\n * @param searchText {string}\r\n * @param setShowLoader {function}\r\n */\r\nexport const searchProductRequest = async (featureGroup, searchText, setShowLoader = () => {}) => {\r\n if (!searchText || !featureGroup || featureGroup.getRealFeaturesReceivedProperty()\r\n || (Array.isArray(featureGroup.alreadyRequestedFeatureNames) && featureGroup.alreadyRequestedFeatureNames.includes(searchText))\r\n ) {\r\n return false\r\n }\r\n setShowLoader(true);\r\n if (axiosController) {\r\n axiosController.abort();\r\n }\r\n if (AbortController) {\r\n axiosController = new AbortController();\r\n }\r\n const dbName = featureGroup.dbName || featureGroup.partName;\r\n const pageSize = 9999;\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n const layout = getCurrentLayout();\r\n const wallParent = layout.parts[\"Walls\"];\r\n if (featureGroup.additionalPartPartId && wallParent && wallParent.relatedItems.some(relItem => relItem.partId === featureGroup.partId)) {\r\n const cropResponse = await getBvGroupFeatures(dbName + \" Crop\", 0, pageSize, [], searchText, null, axiosController);\r\n if (Array.isArray(cropResponse)) {\r\n featureGroup.setGroupFeatures(cropResponse, pageSize, false, \"\", null, true, false);\r\n }\r\n }\r\n }\r\n const response = await getBvGroupFeatures(dbName, 0, pageSize, [], searchText, null, axiosController)\r\n if (response) {\r\n featureGroup.setGroupFeatures(response, pageSize, false, \"\", null, true);\r\n }\r\n if (!featureGroup.alreadyRequestedFeatureNames) {\r\n featureGroup.alreadyRequestedFeatureNames = [];\r\n }\r\n featureGroup.alreadyRequestedFeatureNames.push(searchText);\r\n setShowLoader(false);\r\n return response ? response.data : []\r\n}\r\n","import flatten from \"lodash/flatten\";\r\n\r\nimport {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {getBathroomVisualizerData, getBvGroupFeatures, getBvGroups, getQtCategories} from \"../api/server-api\";\r\nimport Config from \"../config\";\r\nimport store from \"../store\";\r\nimport {setWizardIsActive} from \"../actions/wizardFunctions\";\r\nimport {addVisualizersLoaded, updateCanvasCount} from \"../actions/actionFunctions\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nexport const loadAdditionalVisualizerGroups = async (visualizerType) => {\r\n switch (visualizerType) {\r\n case \"bvLook\": {\r\n const additionalFeatures = await Promise.all([\r\n getBvGroupFeatures(\"Decor\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n getBvGroupFeatures(\"Attachment\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n getBvGroupFeatures(\"Towel\", 0, 2000, [], \"\", \"\", null, false, visualizerType),\r\n ]);\r\n // console.log(\"additionalFeatures\", flatten(additionalFeatures));\r\n return flatten(additionalFeatures)\r\n }\r\n // to do add here Kitchen ? not sure\r\n default:\r\n return []\r\n }\r\n}\r\n\r\nexport const parseWizardResponse = (mainResponse, qtCategoriesResponse, visualizerType = null) => {\r\n const useWizard = (Array.isArray(qtCategoriesResponse) && qtCategoriesResponse.some(qtCat => qtCat.useWizard))\r\n // || !Array.isArray(qtCategoriesResponse) || !qtCategoriesResponse.length)\r\n && mainResponse && (mainResponse.wizardData || mainResponse.wizardDataV2)\r\n && getParsedWizardList(mainResponse, true).length > 0;\r\n store.dispatch(setWizardIsActive(useWizard, visualizerType));\r\n}\r\n\r\nconst loadVisualizer = async (visualizerType) => {\r\n try {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const layout = getCurrentLayout(visualizerType);\r\n const mainResponse = await Promise.all([\r\n getBathroomVisualizerData(30, true, visualizerType),\r\n getQtCategories(layout.getCurrentLayoutAbbreviation(), visualizerType)\r\n ]);\r\n if (Config.isDevMode()) {\r\n console.log('loadVisualizer mainResponse-->', mainResponse);\r\n }\r\n const groupsResponse = await getBvGroups(visualizerType);\r\n if (Config.isDevMode()) {\r\n console.log('loadVisualizer groupsResponse-->', groupsResponse);\r\n }\r\n const additionalFeatures = await loadAdditionalVisualizerGroups(visualizerType);\r\n layout.loadNewFeatures(Object.assign({}, mainResponse[0], {\r\n features: [...mainResponse[0].features, ...additionalFeatures]\r\n }));\r\n layout.setGroupsItemsCount(groupsResponse.data);\r\n // if (qtCategories.length) { //todo the most painful part // reactivate needed\r\n // this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups\r\n // }\r\n layout.createCustomConfigurations();\r\n layout.setGroupsItemsCount(groupsResponse.data); // not sure why we need it two items but ok, let it be\r\n layout.setDefaultFeatures();\r\n if (Array.isArray(mainResponse[1]) && mainResponse[1].length) {\r\n layout.setQtCategoriesSubparts(mainResponse[1]); // set QtCategories subParts(wait until defaults are set)\r\n // this.loadQtCategoriesFeatures(qtCategories); // load features from feature groups second time!!\r\n // after qtCategories are set (because we need partIdExistInQtCategory logic)\r\n }\r\n parseWizardResponse(mainResponse[0], mainResponse[1], visualizerType);\r\n // const needToLoadDefaultPreset = !document.kvConfig.jobId; // we should apply saved preset, we don't need the default one\r\n const needToLoadDefaultPreset = true; // we should apply this preset because if it's the first time - then it should apply\r\n if (needToLoadDefaultPreset && Array.isArray(mainResponse[0].defaults)) {\r\n const roomPreset = mainResponse[0].defaults.find(preset => preset.loadByTheDefault);\r\n if (roomPreset) {\r\n const layout_type = +roomPreset.layout_type;\r\n const needToChangeLayout = (layout_type || layout_type === 0) && (layout_type !== +layout.type);\r\n if (needToChangeLayout) {\r\n // await this.changeLayout(layout_type, true)\r\n }\r\n await layout.setItemsFromBvState(\r\n roomPreset, false, (bvState) => bvState, true, visualizerType\r\n )\r\n }\r\n }\r\n\r\n layout.initialized = true;\r\n console.log(\"new layout initialized\", layout);\r\n window.requestInProcess = false;\r\n store.dispatch(addVisualizersLoaded(layout.visualizerType));\r\n store.dispatch(updateCanvasCount());\r\n\r\n return true\r\n\r\n } catch (error) {\r\n loaderDisable();\r\n console.log(\"error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport default loadVisualizer\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport MenuList from '@mui/material/MenuList';\r\nimport ListItemIcon from '@mui/material/ListItemIcon';\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport TwitterIcon from '@mui/icons-material/Twitter';\r\n\r\nimport {LookShareIcons} from \"../../../../common/icons\";\r\nimport {setLookOverlayOpened, setLookReturnAction} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {saveQuoteAndShare} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\n\r\nexport const SHARE_BUTTONS = {\r\n facebook: \"facebook\",\r\n pinterest: \"pinterest\",\r\n twitter: \"twitter\",\r\n}\r\n\r\nexport const getShareConfig = ({height, width}) => {\r\n const left = window.outerWidth / 2 + (window.screenX || window.screenLeft || 0) - width / 2;\r\n const top = window.outerHeight / 2 + (window.screenY || window.screenTop || 0) - height / 2;\r\n const config = {\r\n height: height,\r\n width: width,\r\n left: left,\r\n top: top,\r\n location: 'no',\r\n toolbar: 'no',\r\n status: 'no',\r\n directories: 'no',\r\n menubar: 'no',\r\n scrollbars: 'yes',\r\n resizable: 'no',\r\n centerscreen: 'yes',\r\n chrome: 'yes'\r\n }\r\n return Object.keys(config).map(key => key + '=' + config[key]).join(', ');\r\n};\r\n\r\nconst LookSideBarShareButtons = (props) => {\r\n\r\n const {handleClose, userIsLoggedIn, propsShareUrl, setLookOverlayOpened, setLookReturnAction} = props;\r\n\r\n const shareClickButton = (buttonKey) => {\r\n switch (buttonKey) {\r\n case SHARE_BUTTONS.facebook:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarFacebook);\r\n break;\r\n case SHARE_BUTTONS.twitter:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarTwitter);\r\n break;\r\n case SHARE_BUTTONS.pinterest:\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookSidebarPinterest);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!userIsLoggedIn) {\r\n const {isLixil} = pricingIsLocked();\r\n if (isLixil) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.questionShare);\r\n setLookReturnAction(buttonKey);\r\n } else {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, buttonKey);\r\n }\r\n return false;\r\n }\r\n\r\n handleClose();\r\n // if (jobId) {\r\n // shareLogic(buttonKey)\r\n // } else {\r\n saveQuoteAndShare(buttonKey, propsShareUrl);\r\n // }\r\n }\r\n\r\n return (\r\n \r\n {Object.keys(SHARE_BUTTONS).map(buttonKey => {\r\n const icon = (buttonKey === \"twitter\") ? : {LookShareIcons[buttonKey]};\r\n return (\r\n shareClickButton(buttonKey)}>\r\n {icon}\r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n};\r\n\r\nLookSideBarShareButtons.propTypes = {\r\n handleClose: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userIsLoggedIn} = store.userState;\r\n const {shareUrl} = store.serverState;\r\n return {\r\n userIsLoggedIn,\r\n propsShareUrl: shareUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setLookReturnAction,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookSideBarShareButtons)\r\n","import orderBy from \"lodash/orderBy\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {cabinetThumbnail} from \"../../../kvComponent/core/assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Handle from \"../subparts/cabinet/handle\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport TallCabinet from \"../subparts/cabinet/tallCabinet\";\r\nimport CrownMolding from \"../subparts/cabinet/crownMolding\";\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport {setActiveFeaturesBeforeAllWalls} from \"../../../look/lookNavigation/lookNavigationFunctions\";\r\nimport {CABINET_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport DoorHandle from \"../subparts/cabinet/doorHandle\";\r\nimport DrawerHandle from \"../subparts/cabinet/drawerHandle\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = cabinetThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.handle = null;\r\n this.bottomHandle = null;\r\n this.topHandle = null;\r\n this.topCabinet = null;\r\n this.doorHandle = null;\r\n this.drawerHandle = null;\r\n this.crownMolding = null;\r\n this.relatedGroupNames = [\"Handle\", \"Bottom Handle\", \"Top Handle\", \"Bottom Cabinet\", \"Top Cabinet\", \"Crown Molding\",\r\n \"Door Handle\", \"Drawer Handle\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Handle\":\r\n relatedItemName = \"handle\";\r\n RelatedItemClass = Handle;\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Tall Cabinet\":\r\n relatedItemName = \"tallCabinet\";\r\n RelatedItemClass = TallCabinet;\r\n break;\r\n case \"Crown Molding\":\r\n relatedItemName = \"crownMolding\";\r\n RelatedItemClass = CrownMolding;\r\n break;\r\n case \"Door Handle\":\r\n relatedItemName = \"doorHandle\";\r\n RelatedItemClass = DoorHandle;\r\n break;\r\n case \"Drawer Handle\":\r\n relatedItemName = \"drawerHandle\";\r\n RelatedItemClass = DrawerHandle;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n getRelatedItems() {\r\n return orderBy(this.relatedItems, 'layerPriority');\r\n }\r\n\r\n subParts(withHidden = true, hideWithoutFeatures = false) {\r\n return this.getRelatedItems()\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .filter(item => {\r\n if ((item.partId === \"crown_molding\" || item.partId === \"top_handle\") && hideWithoutFeatures && item.allFeaturesReceived) {\r\n return item.navigationSubItems({}, \"\").length\r\n }\r\n return item\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getTopCabinetType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n // getTopCabinetLayout() {\r\n //\r\n // if (this.topCabinet && this.topCabinet.activeFeature) {\r\n // if (this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n // return this.topCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n // } else {\r\n // // console.log(\"no topCabinet metaData!\", this.topCabinet.activeFeature);\r\n // return \"\"\r\n // }\r\n // }\r\n // return \"ALL\"\r\n // }\r\n\r\n getBottomCabinetType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Cabinet\"][0]\r\n } else {\r\n // console.log(\"no bottomCabinet metaData!\", this.bottomCabinet.activeFeature);\r\n return \"\"\r\n }\r\n }\r\n return \"\"\r\n }\r\n\r\n getTopCabinetApplianceType() {\r\n if (this.topCabinet && this.topCabinet.activeFeature) {\r\n if (this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.topCabinet.activeFeature);\r\n return \"Hood\"\r\n }\r\n }\r\n return \"Hood\"\r\n }\r\n\r\n getTopCabinetShadowLayout() {\r\n if (this.topCabinet && this.topCabinet.activeFeature && this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"]) {\r\n return this.topCabinet.activeFeature.dbFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n return \"\"\r\n }\r\n\r\n getBottomCabinetApplianceType() {\r\n if (this.bottomCabinet && this.bottomCabinet.activeFeature) {\r\n if (this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"]) {\r\n return this.bottomCabinet.activeFeature.dbFeature.metaData[\"Appliance\"][0]\r\n } else {\r\n // console.log(\"no Appliance metaData!\", this.bottomCabinet.activeFeature);\r\n return \"Range\"\r\n }\r\n }\r\n return \"Range\"\r\n }\r\n\r\n setPrevioslySelected() {\r\n setActiveFeaturesBeforeAllWalls(CABINET_GROUP);\r\n }\r\n\r\n}\r\n","\r\nimport {postSignInAuth} from \"../api/lixil-api\";\r\n\r\n// export const SET_APP_JWT_TOKEN = \"SET_APP_JWT_TOKEN\";\r\n//\r\n// export const setAppJwtToken = (jwtToken) => ({\r\n// type: SET_APP_JWT_TOKEN,\r\n// payload: {jwtToken}\r\n// });\r\n\r\nexport const setLixilAuthorizationToken = () => {\r\n return async (dispatch, getState) => {\r\n\r\n const {useLixilCalendar} = getState().fabricatorState;\r\n if (!useLixilCalendar) {\r\n return\r\n }\r\n const postAuthResponse = await postSignInAuth();\r\n console.log(\"postAuthResponse\", postAuthResponse);\r\n // if (postAuthResponse && postAuthResponse.data && postAuthResponse.data.data && postAuthResponse.data.data.jwtToken) {\r\n // dispatch(setAppJwtToken(postAuthResponse.data.data.jwtToken)); // just in case, we don't need it anymore\r\n // }\r\n return false\r\n }\r\n}\r\n\r\nexport const LIXIL_PRODUCT_TYPES = {\r\n srBathing: \"SR BATHING\",\r\n bathRemodel: \"Bath Remodel\",\r\n}\r\n\r\nconst lixilTermsText = \"By clicking “Let's Review” above, I consent to receive from American Standard and any party on its behalf at any time emails, telemarketing calls using an autodialer, artificial voices or pre-recordings and SMS text messages, which could result in wireless charges, at the number provided above. I understand that consent is not a condition of purchase. I also agree to the Terms of Use and Privacy policy, which are also linked at the bottom of this page.\";\r\n\r\nexport const getLixilCampaignInfo = (store) => {\r\n\r\n const {wizardState, appointmentState, globalState} = store;\r\n\r\n // const isShowerRemodel = wizardState.wizardSelectedValues\r\n // && wizardState.wizardSelectedValues[1]\r\n // && wizardState.wizardSelectedValues[1].selectedFeature && (\r\n // (wizardState.wizardSelectedValues[1].selectedFeature.customDisplayName === \"Replace Shower\")\r\n // || (wizardState.wizardSelectedValues[1].selectedFeature.sharedFeatureName === \"Replace Shower\")\r\n // || (\r\n // (wizardState.wizardActiveItem && (wizardState.wizardActiveItem.id === 2)) && (\r\n // (wizardState.wizardSelectedValues[1].selectedFeature.customDisplayName === \"Convert Tub to A Shower\")\r\n // || (wizardState.wizardSelectedValues[1].selectedFeature.sharedFeatureName === \"Convert Tub to A Shower\")\r\n // )\r\n // )\r\n // );\r\n\r\n const textWithUpdatedButton = globalState.footerInfoButtonText\r\n ? lixilTermsText.replace(\"Let's Review\", globalState.footerInfoButtonText)\r\n : lixilTermsText;\r\n\r\n const isSrBathing = wizardState.wizardActiveItem && (wizardState.wizardActiveItem.id === 2);\r\n\r\n const addressIsNotSupported = appointmentState && appointmentState.appointmentsNotAvailable;\r\n\r\n if (isSrBathing) {\r\n return {\r\n \"Campaign\": \"SOCIAL\",\r\n \"SubID\": addressIsNotSupported ? \"8087\" : \"8077\",\r\n \"PubID\": addressIsNotSupported ? \"SB-Social-OnlineForm-NoAppt\" : \"Social-SB-OnlineApptForm\",\r\n \"DNIS\": \"855-254-7620\",\r\n \"Product\": LIXIL_PRODUCT_TYPES.srBathing,\r\n \"terms_stc\": textWithUpdatedButton,\r\n \"promoter_id_stc\": addressIsNotSupported ? \"\" : \"3846\",\r\n }\r\n }\r\n return {\r\n \"Campaign\": \"SOCIAL\",\r\n \"SubID\": addressIsNotSupported ? \"8088\" : \"8079\",\r\n \"PubID\": addressIsNotSupported ? \"BR-Social-OnlineForm-NoAppt\" : \"BR-Social-OnlineApptForm\",\r\n \"DNIS\": \"855-254-7623\",\r\n \"Product\": LIXIL_PRODUCT_TYPES.bathRemodel,\r\n \"terms_stc\": textWithUpdatedButton,\r\n \"promoter_id_stc\": addressIsNotSupported ? \"\" : \"3846\",\r\n }\r\n}\r\n","import * as types from \"./appointmentActions\";\r\n\r\nexport const defaultTimeValue = \"Select time...\";\r\n\r\nconst initialState = {\r\n appointmentDate: \"\",\r\n appointmentTime: defaultTimeValue,\r\n appointmentTimeSlot: defaultTimeValue,\r\n timeStepIsActive: false,\r\n availableAppointmentDates: [],\r\n salesRepID: \"\", // lixil reponse sales id\r\n appointmentsNotAvailable: true, // lixil faraday reponse not available for this address\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_APPOINTMENT_DATE:\r\n return {...state, appointmentDate: action.payload, appointmentTime: defaultTimeValue, appointmentTimeSlot: defaultTimeValue}\r\n case types.SET_APPOINTMENT_TIME:\r\n return {...state,\r\n appointmentTime: action.payload.time,\r\n appointmentTimeSlot: action.payload.timeSlot\r\n }\r\n case types.SET_APPOINTMENT_TIME_STEP_ACTIVE:\r\n return {...state, timeStepIsActive: action.payload}\r\n case types.SET_AVAILABLE_APPOINTMENTS:\r\n case types.SET_SALES_REP_ID:\r\n case types.SET_APPOINTMENTS_NOT_AVAILABLE:\r\n return {...state, ...action.payload}\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {LEAD_WIZARD_GROUP_TYPES} from \"./wizardLogic\";\r\n\r\n/**\r\n * @param dbFeature {dbFeatureInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {boolean}\r\n */\r\nexport const featureIsExcluded = (dbFeature, wizardGroup) => {\r\n const {sku, featureDefinitionID, customDisplayName, matchingName} = dbFeature;\r\n if (wizardGroup.useIncluded && wizardGroup.featuresIncluded) {\r\n return !wizardGroup.featuresIncluded.some(includedFeature => {\r\n return (includedFeature.sharedFeatureName && (includedFeature.sharedFeatureName === matchingName))\r\n || (includedFeature.featureDefinitionId === featureDefinitionID)\r\n || (!includedFeature.sharedFeatureName && (includedFeature.name === customDisplayName))\r\n || (includedFeature.sku && sku && (includedFeature.sku === sku))\r\n })\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param features {featureInterface}\r\n * @param wizardGroup {wizardGroupInterface}\r\n * @returns {array}\r\n */\r\nexport const getFilteredNavItems = (features, wizardGroup) => {\r\n return features.filter(feature => !featureIsExcluded(feature, wizardGroup))\r\n};\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardActiveStep {number}\r\n * @param wizardSelectedValues {object}\r\n * @param prevStepGroups {[wizardGroupInterface]}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getCurrentGroups = (wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n prevStepGroups = [],\r\n additionalWizardValuesToCheck= null) => {\r\n if (!wizardActiveItem || wizardActiveStep < 0) {\r\n return []\r\n }\r\n const stepStr = \"\" + wizardActiveStep;\r\n\r\n if (wizardActiveStep === 0) {\r\n return getCurrentGroupsFromSource(stepStr, wizardActiveItem)\r\n }\r\n\r\n const selectedPrevStep = wizardSelectedValues[wizardActiveStep - 1];\r\n if (!selectedPrevStep || !selectedPrevStep.wizardGroup) {\r\n if (prevStepGroups.length && prevStepGroups[0].id) {\r\n if (additionalWizardValuesToCheck) { // here we check also previously selected values to make steps similar to prev choices\r\n let foundPreviouslySelectedGroup = null;\r\n if (prevStepGroups.every(wg => wg.nodeType === \"custom\")) {\r\n Object.keys(additionalWizardValuesToCheck).forEach(key => {\r\n if ((key > Object.keys(wizardSelectedValues).length)\r\n && !additionalWizardValuesToCheck[key].partId\r\n && additionalWizardValuesToCheck[key].wizardGroup) {\r\n prevStepGroups.forEach(wg => {\r\n if (wg.id === additionalWizardValuesToCheck[key].wizardGroup.id) {\r\n foundPreviouslySelectedGroup = wg;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n // here we can add simple feature group, but no need for now\r\n }\r\n if (foundPreviouslySelectedGroup) {\r\n return getCurrentGroupsFromSource(foundPreviouslySelectedGroup.id, wizardActiveItem)\r\n }\r\n }\r\n return getCurrentGroupsFromSource(prevStepGroups[0].id, wizardActiveItem)\r\n }\r\n // console.log(\"Previous step is not selected! Check selected values --> \", wizardSelectedValues);\r\n return []\r\n }\r\n\r\n if (selectedPrevStep && selectedPrevStep.wizardGroup && selectedPrevStep.wizardGroup.mergedGroups && selectedPrevStep.selectedFeature) {\r\n const wizardGroupWithSelectedFeature = selectedPrevStep.wizardGroup.mergedGroups.find(wizGroup => {\r\n return !featureIsExcluded(selectedPrevStep.selectedFeature, wizGroup)\r\n });\r\n if (wizardGroupWithSelectedFeature) {\r\n return getCurrentGroupsFromSource(wizardGroupWithSelectedFeature.id, wizardActiveItem);\r\n }\r\n }\r\n\r\n // const prevStepStr = \"\" + (wizardActiveStep - 1);\r\n // const prevGroups = getCurrentGroupsFromSource(prevStepStr, wizardActiveItem);\r\n // if (prevGroups.length > 1 && wizardActiveStep > 0) {\r\n // return [selectedPrevStep.wizardGroup]\r\n // }\r\n\r\n return getCurrentGroupsFromSource(selectedPrevStep.wizardGroup.id, wizardActiveItem);\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param source {string}\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @returns array {[wizardGroupInterface]}\r\n */\r\nexport const getCurrentGroupsFromSource = (source, wizardActiveItem) => {\r\n if (!wizardActiveItem) {\r\n return []\r\n }\r\n const siblingGroups = wizardActiveItem.wizardGroups.filter(wizGroup => {\r\n return wizardActiveItem.wizardEdges.some(wizEdge => wizEdge.source === source && wizEdge.target === wizGroup.id && wizGroup.enabled)\r\n });\r\n // console.log(\"siblingGroups\", siblingGroups);\r\n const areSameSiblingGroups = siblingGroups.length > 1 && siblingGroups.every(siblingGroup => {\r\n return (siblingGroup.nodeType === LEAD_WIZARD_GROUP_TYPES.group) && (siblingGroup.groupName === siblingGroups[0].groupName)\r\n });\r\n if (areSameSiblingGroups) {\r\n // console.log(\"areSameSiblingGroups\", areSameSiblingGroups);\r\n\r\n if (siblingGroups.every(wizardGroup => wizardGroup.useIncluded && wizardGroup.featuresIncluded)) { // new logic\r\n const featuresIncluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresIncluded.forEach(included => {\r\n if (!total.some(exclObj => (exclObj.featureDefinitionId === included.featureDefinitionId))) {\r\n total.push(included)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded: [], // not sure if we need it\r\n featuresIncluded\r\n })\r\n return [newGroup]\r\n }\r\n\r\n const allFeaturesExcluded = siblingGroups.reduce((total, wizardGroup) => {\r\n wizardGroup.featuresExcluded.forEach(excluded => {\r\n if (!excluded) {\r\n return\r\n }\r\n if (typeof excluded === \"object\") { // new logic for excluded\r\n if (!total.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === excluded.featureDefinitionId))) {\r\n total.push(excluded)\r\n }\r\n } else if (!total.includes(excluded)) {\r\n total.push(excluded)\r\n }\r\n })\r\n return total\r\n }, []);\r\n const featuresExcluded = allFeaturesExcluded.filter(exclFeature => {\r\n return siblingGroups.every(siblingGroup => {\r\n if (typeof exclFeature === \"object\") {\r\n return siblingGroup.featuresExcluded.some(exclObj => (typeof exclObj === \"object\") && (exclObj.featureDefinitionId === exclFeature.featureDefinitionId))\r\n }\r\n return siblingGroup.featuresExcluded.includes(exclFeature)\r\n })\r\n })\r\n const newGroup = Object.assign({}, siblingGroups[0], {\r\n mergedGroups: siblingGroups,\r\n featuresExcluded\r\n })\r\n return [newGroup]\r\n }\r\n return siblingGroups\r\n}\r\n\r\n/**\r\n * returns current wizard step section items\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param wizardSelectedValues {object}\r\n * @param returnAllSteps {boolean}\r\n * @param additionalWizardValuesToCheck {object}\r\n * @returns {array}\r\n */\r\nexport const getAvailableSteps = (wizardActiveItem, wizardSelectedValues, returnAllSteps, additionalWizardValuesToCheck = null) => {\r\n if (!wizardActiveItem || !wizardActiveItem.wizardGroups || !wizardActiveItem.wizardEdges) {\r\n return []\r\n }\r\n\r\n const maxWizardSteps = 50;\r\n\r\n let stepsArray = [{\r\n stepIndex: 0,\r\n stepGroups: getCurrentGroupsFromSource(\"0\", wizardActiveItem),\r\n }];\r\n\r\n for (let i = 1; i <= maxWizardSteps; i++) {\r\n const prevStepGroups = returnAllSteps && stepsArray[i - 1] ? stepsArray[i - 1].stepGroups : [];\r\n const currentGroups = getCurrentGroups(wizardActiveItem, i, wizardSelectedValues, prevStepGroups, additionalWizardValuesToCheck)\r\n if (!currentGroups.length) {\r\n break;\r\n }\r\n stepsArray.push({\r\n stepIndex: i,\r\n stepGroups: currentGroups\r\n })\r\n }\r\n\r\n return stepsArray\r\n}\r\n\r\n\r\n/**\r\n * this returns new wizard steps depending on the current selection\r\n * @param wizardActiveItem {wizardItemInterface}\r\n * @param currentStep {number}\r\n * @param allWizardSelectedValues {object}\r\n * @returns {object}\r\n */\r\nexport const getNextWizardSteps = (wizardActiveItem, currentStep, allWizardSelectedValues) => {\r\n// const oldWizardSteps = getAvailableSteps(wizardActiveItem, oldWizardSelectedValues, true);\r\n\r\n let newValues = {};\r\n Object.keys(allWizardSelectedValues).forEach(key => {\r\n if (+key <= currentStep) {\r\n newValues[key] = allWizardSelectedValues[key] // here we create values object just until the current selected value\r\n }\r\n });\r\n\r\n const afterCurrentSelectionWizardSteps = getAvailableSteps(wizardActiveItem, newValues, true, allWizardSelectedValues);\r\n const allWizardSteps = getAvailableSteps(wizardActiveItem, allWizardSelectedValues, true);\r\n\r\n const nextStep = currentStep + 1;\r\n\r\n if (\r\n afterCurrentSelectionWizardSteps[nextStep] && allWizardSteps[nextStep]\r\n && afterCurrentSelectionWizardSteps[nextStep].stepGroups.every((wizardGroup, wizardGroupIndex) => {\r\n return allWizardSteps[nextStep].stepGroups[wizardGroupIndex] && wizardGroup.id === allWizardSteps[nextStep].stepGroups[wizardGroupIndex].id\r\n }) && (allWizardSelectedValues[nextStep] && allWizardSelectedValues[nextStep].wizardGroup\r\n && afterCurrentSelectionWizardSteps[nextStep].stepGroups.some(wizG => allWizardSelectedValues[nextStep].wizardGroup.id === wizG.id))\r\n ) {\r\n return allWizardSteps // keep it, as we didn't change the flow\r\n }\r\n\r\n return afterCurrentSelectionWizardSteps // use new ones, as the flow was changed\r\n\r\n}\r\n\r\n\r\n/**\r\n * this returns conflicting with the current selections steps\r\n * @param allWizardSelectedValues {object}\r\n * @param actionPayload {object} // {wizardActiveItem, quoteIndex}\r\n * @returns {array}\r\n */\r\nexport const getConflictingWizardSteps = (allWizardSelectedValues, actionPayload) => {\r\n\r\n const {wizardActiveItem} = actionPayload;\r\n\r\n const currentStep = +Object.keys(actionPayload.wizardSelectedValues)[0];\r\n\r\n let conflictingWizardSteps = [];\r\n const newWizardSteps = getNextWizardSteps(wizardActiveItem, currentStep, allWizardSelectedValues);\r\n\r\n Object.keys(allWizardSelectedValues).forEach(stepIndex => {\r\n if (allWizardSelectedValues[stepIndex] && allWizardSelectedValues[stepIndex].wizardGroup && (!newWizardSteps[stepIndex]\r\n || !newWizardSteps[stepIndex].stepGroups.some(wizardGroup => wizardGroup.id === allWizardSelectedValues[stepIndex].wizardGroup.id))) {\r\n conflictingWizardSteps.push({\r\n stepIndex,\r\n wizardGroupId: allWizardSelectedValues[stepIndex].wizardGroup.id,\r\n });\r\n }\r\n })\r\n\r\n // console.log(\"newWizardSteps\", newWizardSteps);\r\n // console.log(\"allWizardSelectedValues\", allWizardSelectedValues);\r\n // console.log(\"conflictingWizardSteps\", conflictingWizardSteps);\r\n\r\n return conflictingWizardSteps\r\n}\r\n\r\n\r\nexport const getUpdatedAllWizardValues = (state, quoteIndex, wizardItemId, wizardSelectedValues) => {\r\n const newWizObject = {\r\n quoteIndex,\r\n wizardItemId,\r\n lastVisitedStep: state.wizardActiveStep,\r\n wizardSelectedValues: Object.assign({}, wizardSelectedValues)\r\n };\r\n const existingIndex = state.allWizardsValues.findIndex(wizSelObject => {\r\n return wizSelObject.wizardItemId === newWizObject.wizardItemId && wizSelObject.quoteIndex === newWizObject.quoteIndex\r\n });\r\n existingIndex > -1\r\n ? state.allWizardsValues.splice(existingIndex, 1, newWizObject)\r\n : state.allWizardsValues.push(newWizObject);\r\n\r\n state.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === quoteIndex) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === wizardItemId // to return back and force correctly\r\n }\r\n return wizObject\r\n });\r\n\r\n return [...state.allWizardsValues]\r\n}\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport FloorNew from \"./parts/floorNew\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {Window} from \"./parts/window\";\r\nimport {Ceiling} from \"./parts/ceiling\";\r\nimport {Toilet} from \"./parts/toilet\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport GlobalShadow from \"./parts/globalShadow\";\r\nimport {Wall} from \"./parts/wall\";\r\nimport ExternallWall from \"./subparts/wall/externallWall\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport Z from './parts/zIndex';\r\nimport {LayoutType, LayoutAbbreviation, bathTubTypeToString, ShowerComboTubType}\r\n from \"./constants\";\r\n\r\nimport {\r\n largeLayoutShadow,\r\n smallLayoutShadow,\r\n shower30inWallShadow,\r\n LayoutThumbnails\r\n} from './assets';\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport store from \"../../../store\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Large;\r\n type = this.defaultType;\r\n localStorageKey = \"bvState\";\r\n layersBinding = \"Bathroom\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Bathroom;\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = LayoutThumbnails;\r\n zIndexes = Z.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Wall.id] = new Wall(); // wall should render it's layers only after vanity & shower\r\n this.parts[FloorNew.id] = new FloorNew();\r\n this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Window.id] = new Window();\r\n this.parts[GlobalShadow.id] = new GlobalShadow();\r\n this.parts[Other.id] = new Other();\r\n\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n resetEverything() {\r\n const features = this.getFeatures();\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n features.forEach(parentGroup => {\r\n if (parentGroup instanceof Shower) {\r\n parentGroup.activeSubType_ = \"Custom\";\r\n } else if (parentGroup instanceof ShowerTubCombo) {\r\n parentGroup.showerTubComboIsActive = false;\r\n parentGroup.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n parentGroup.setDefault(this);\r\n parentGroup.placeholderChanged = false;\r\n parentGroup.firstClick[activeQuoteIndex] = false;\r\n // if (parentGroup instanceof Shower && parentGroup.showerBody.featuresParts) {\r\n // parentGroup.showerBody.featuresParts = {};\r\n // }\r\n if (parentGroup.relatedItems && parentGroup.relatedItems.length) {\r\n parentGroup.relatedItems.forEach((subPart) => {\r\n if (subPart.partId !== 'shower_body') {\r\n subPart.placeholderChanged = false;\r\n subPart.firstClick[activeQuoteIndex] = false;\r\n }\r\n subPart.disabled = subPart.defaultDisabled;\r\n if (Array.isArray(subPart.activeFeatureParts) && subPart.activeFeatureParts.length) {\r\n subPart.activeFeatureParts = subPart.setActiveFeatureParts();\r\n }\r\n if (subPart instanceof ExternallWall) {\r\n subPart.selectedByUser = false\r\n }\r\n });\r\n }\r\n });\r\n this.changeLayout(features);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addCustomLayers = (res) => {\r\n // add global shadow\r\n const globalShadowParent = this.parts[GlobalShadow.id]; // if no global shadow uploaded - take the hardcoded one\r\n if (!globalShadowParent.categoryEnabled || (globalShadowParent.activeFeature\r\n && (!globalShadowParent.activeFeature.layer || !globalShadowParent.activeFeature.layer.src))) {\r\n if (this.type === LayoutType.Large) {\r\n res.push(new Layer(\"bv\", Z.layouts.Large.Global_Shadow_Overlay, largeLayoutShadow, false));\r\n } else if (this.type === LayoutType.Small) {\r\n res.push(new Layer(\"bv\", Z.layouts.Small.Global_Shadow_Overlay, smallLayoutShadow, false));\r\n }\r\n }\r\n\r\n // add right ex wall shadow for complete showers\r\n const shower = this.parts[Shower.id];\r\n if (shower.showerSize() === \"30in\" && shower.activeSubType_ === \"Complete\" && !shower.showerTubComboIsActive() && this.type === LayoutType.Large) {\r\n res.push(new Layer(\"bv\", Z.layouts.Large.Shower.Custom60in.ExtrusionWallRightShadow, shower30inWallShadow, false));\r\n }\r\n return res\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n if (bvState.shower_floor_is_active) {\r\n bvState.shower_floor_is_active = bvState.shower_floor_is_active === \"true\"\r\n }\r\n if (bvState.shower_tub_combo_is_active) {\r\n bvState.shower_tub_combo_is_active = bvState.shower_tub_combo_is_active === \"true\"\r\n }\r\n if (bvState.shower_interior_wall_accent_parts) {\r\n bvState.shower_interior_wall_accent_parts = Number.isInteger(bvState.shower_interior_wall_accent_parts)\r\n ? [bvState.shower_interior_wall_accent_parts]\r\n : bvState.shower_interior_wall_accent_parts.split(\",\")\r\n }\r\n if (bvState.shower_interior_wall_parts) {\r\n bvState.shower_interior_wall_parts = Number.isInteger(bvState.shower_interior_wall_parts)\r\n ? [bvState.shower_interior_wall_parts]\r\n : bvState.shower_interior_wall_parts.split(\",\")\r\n }\r\n if (bvState.left_shower_wall_type) {\r\n switch (bvState.left_shower_wall_type) {\r\n case 30:\r\n case \"30\":\r\n case \"30X8\":\r\n bvState.left_shower_wall_type = \"30X8\";\r\n break;\r\n case 15:\r\n case \"15\":\r\n case \"15X4\":\r\n bvState.left_shower_wall_type = \"15X4\";\r\n break;\r\n case \"Pony\":\r\n bvState.left_shower_wall_type = \"Pony\";\r\n break;\r\n }\r\n }\r\n if (bvState[\"caddie_type\"] && this.parts[ShowerAccessories.id]) {\r\n this.parts[ShowerAccessories.id].caddie_type = bvState[\"caddie_type\"];\r\n }\r\n return bvState\r\n // console.log('restoring bvState from url...', bvState);\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean}\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n const vanity = this.parts[Vanity.id];\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n // const bathtub = this.parts[Bathtub.id];\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0 && parentGroup.partName !== \"Toilet\") {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // parentGroup.firstClick[activeQuoteIndex] = !!parentGroup.activeFeature; // this makes steps selected! removed\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n parentGroup.disabled = bvState.disabled_parts.includes(partId)\r\n } else {\r\n let subParts = parentGroup.relatedItems;\r\n subParts.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n subPart.activeFeature = subPart.getFeatureByPartName(bvState[partId]);\r\n if (!subPart.activeFeature && hasPreviouslySavedItem) {\r\n subPart.activeFeature = subPart.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // subPart.firstClick[activeQuoteIndex] = !!subPart.activeFeature // this makes steps selected! removed\r\n if (partId === \"shower_body\") {\r\n subPart.showerBodySelectedByUser = true\r\n }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (firstLoad) {\r\n subPart.placeholderChanged = true;\r\n }\r\n subPart.disabled = bvState.disabled_parts.includes(partId);\r\n })\r\n }\r\n });\r\n\r\n const partPredicate = (part, value) => useNames ? part.partName === value : +part.dbFeature.id === +value;\r\n Object.keys(bvState)\r\n .forEach((bvStateKey) => {\r\n if (bvStateKey === \"vanity_type\") {\r\n vanity.activeSubType_ = bvState.vanity_type.charAt(0).toUpperCase() + bvState.vanity_type.substr(1);\r\n }\r\n if (bvStateKey === \"shower_type\") {\r\n shower.activeSubType_ = bvState.shower_type.charAt(0).toUpperCase() + bvState.shower_type.substr(1);\r\n if (bvState.shower_type === \"complete\" && bvState.shower_parts.length) {\r\n shower.showerBody.activeFeatureParts = bvState.shower_parts.map(shower_part_id => {\r\n return shower.showerBody.featuresParts.find(_ => partPredicate(_, shower_part_id));\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_interior_wall_parts\") {\r\n if (bvState.shower_interior_wall_parts.length && shower.showerInteriorWall) {\r\n shower.showerInteriorWall.activeFeatureParts = bvState.shower_interior_wall_parts\r\n .map((shower_accent_wall_part_id) => {\r\n let accordingPart = shower.showerInteriorWall.featuresParts.find(_ => partPredicate(_, shower_accent_wall_part_id));\r\n if (!accordingPart) {\r\n const showerFeature = shower.showerInteriorWall.features.find(_ => partPredicate(_, bvState.shower_interior_wall));\r\n if (showerFeature) {\r\n const availableParts = shower.showerInteriorWall.setActiveFeatureParts(showerFeature);\r\n if (availableParts.length) {\r\n accordingPart = availableParts[0]\r\n }\r\n }\r\n }\r\n return accordingPart;\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_interior_wall_accent_parts\") {\r\n if (bvState.shower_interior_wall_accent_parts.length && shower.showerInteriorWallAccent) {\r\n shower.showerInteriorWallAccent.activeFeatureParts = bvState.shower_interior_wall_accent_parts\r\n .map((shower_accent_wall_part_id) => {\r\n return shower.showerInteriorWallAccent.featuresParts.find(_ => partPredicate(_, shower_accent_wall_part_id));\r\n });\r\n }\r\n }\r\n if (bvStateKey === \"shower_floor_is_active\") {\r\n shower.showerFloorIsActive = bvState[bvStateKey];\r\n }\r\n if (bvStateKey === \"shower_tub_combo_is_active\") {\r\n showerTubCombo.showerTubComboIsActive = bvState[bvStateKey];\r\n if (bvState[bvStateKey] && bvState.bottom_tub) {\r\n showerTubCombo.bottomTub = bvState.bottom_tub\r\n }\r\n if (bvState[bvStateKey] && bvState.left_shower_wall_type) {\r\n showerTubCombo.leftShowerWallType = bvState.left_shower_wall_type\r\n }\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false) {\r\n\r\n const bathTub = this.parts[Bathtub.id];\r\n const shower = this.parts[Shower.id];\r\n const showerTubCombo = this.parts[ShowerTubCombo.id];\r\n\r\n bvState.layout_type = this.type;\r\n\r\n Object.keys(bvState).forEach((bvStateKey) => {\r\n // console.log('bvStateKey', bvStateKey);\r\n if (bvStateKey === 'bathtub') {\r\n bvState.bathtub_type = bathTubTypeToString(bathTub.activeSubType_).toLowerCase();\r\n }\r\n if (bvStateKey === 'shower_body') {\r\n bvState.shower_type = shower.activeSubType_.toLowerCase();\r\n bvState.shower_floor_is_active = shower.showerFloorIsActive;\r\n if (bvState.shower_type === \"complete\") {\r\n bvState.shower_parts = shower.showerBody.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n bvState.shower_tub_combo_is_active = shower.showerTubComboIsActive();\r\n if (bvState.shower_tub_combo_is_active) {\r\n bvState.bottom_tub = showerTubCombo.bottomTub;\r\n bvState.left_shower_wall_type = showerTubCombo.leftShowerWallType;\r\n }\r\n }\r\n if (bvStateKey === 'shower_interior_wall') {\r\n bvState.shower_interior_wall_parts = shower.showerInteriorWall.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n if (bvStateKey === 'shower_interior_wall_accent') {\r\n bvState.shower_interior_wall_accent_parts = shower.showerInteriorWallAccent.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.dbFeature)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n }\r\n if (bvStateKey === 'vanity') {\r\n bvState.vanity_type = this.parts[Vanity.id].activeSubType_.toLowerCase();\r\n }\r\n });\r\n // console.log('bvState', bvState);\r\n if (bvState[\"pony_wall\"]) {\r\n if (!bvState[\"pony_wall_glass\"] && shower.ponyWallGlass\r\n && shower.ponyWallGlass.activeFeature && shower.ponyWallGlass.activeFeature.dbFeature.id) {\r\n const feature = shower.ponyWallGlass.activeFeature;\r\n bvState[\"pony_wall_glass\"] = useNames ? feature.partName : feature.dbFeature.id\r\n }\r\n }\r\n if (bvState[\"large_corner_caddie\"] || bvState[\"corner_caddie\"] || bvState[\"small_corner_shelf\"]) {\r\n const showerAccessoriesParent = this.parts[ShowerAccessories.id];\r\n if (showerAccessoriesParent) {\r\n bvState.caddie_type = this.parts[ShowerAccessories.id].caddie_type;\r\n }\r\n }\r\n return bvState\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Global_Shadow_Overlay, // exclude Global Shadow\r\n this.zIndexes[layoutType].Window_Covering, // exclude Window Coverings\r\n this.zIndexes[layoutType].Ceiling_Lights, // exclude Ceiling_Lights\r\n // this.zIndexes[layoutType].Shower.Custom60in.Wall, // exclude Shower Wall\r\n this.zIndexes[layoutType].Shower.Custom60in.Glass, // exclude Shower Glass\r\n // && layerHovering.layer.zIndex !== Z.this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallRight // exclude Shower ExtrusionWallRight\r\n // && layerHovering.layer.zIndex !== Z.this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeft // exclude Shower ExtrusionWallLeft\r\n this.zIndexes[layoutType].Shower.Custom60in.Overlay, // exclude Shower Overlay\r\n this.zIndexes[layoutType].Shower.Steam60in.Overlay, // exclude Shower Overlay\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallRightShadow, // exclude Right Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeftShadow, // exclude Left Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ExtrusionWallLeftShadowHalfWall, // exclude Left Shower Wall Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.ShowerDrain, // exclude Shower Drain\r\n this.zIndexes[layoutType].Shower.Custom60in.PonyWallCapShadow, // exclude Pony Wall Cap Shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.WallShadow, // exclude Shower Interior shadow\r\n this.zIndexes[layoutType].Shower.Custom60in.PonyWallShadow, // exclude Pony Wall Overlay\r\n this.zIndexes[layoutType].Shower.Custom60in.ThresholdShadow, // exclude ThresholdShadow\r\n this.zIndexes[layoutType].Shower.Custom60in.FloorShadow, // exclude ThresholdShadow\r\n ]\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {setNavigationViewType} from \"../../../../actions/navigationFunctions\";\r\n\r\nclass SelectionMobileViewSwitchers extends Component {\r\n\r\n static propTypes = {\r\n switchers: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.props.switchers.includes(2) ? (\r\n \r\n ) : null}\r\n {this.props.switchers.includes(3) ? (\r\n \r\n ) : null}\r\n {this.props.switchers.includes(4) ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n navigationViewType: store.navigationState.navigationViewType,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionMobileViewSwitchers);","import React, {useCallback} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Button from \"@mui/material/Button\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport DeleteForeverIcon from \"@mui/icons-material/DeleteForever\";\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Switch from '@mui/material/Switch';\r\n\r\nimport {checkIfFeatureDisabled, navFeatureCLick} from \"../lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {disableFeature, enableRelatedFeature} from \"../lookFunctions2\";\r\nimport {setLookOverlayOpened, setLookStylePopup} from \"../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../core/constants\";\r\nimport {IS_LIXIL_UI, IS_PRODUCT_JOURNEY, IS_QKB_UI} from \"../../../../config\";\r\n\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {getFeatureIsLocked} from \"../../../../misc/helpers\";\r\nimport WithUpdateLookCartItem from \"../../hocs/withUpdateLookCartItem\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\n\r\nconst LookFeatureRemoveButton = (props) => {\r\n\r\n const {lookFeature, updateCanvasCount, isIcon, isList, isToggle, intl, setLookOverlayOpened, setLookStylePopup,\r\n text, updateLookCartItem, refreshItems} = props;\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent);\r\n const featureIsLocked = getFeatureIsLocked(lookFeature);\r\n\r\n const updateForOldUI = useCallback(() => {\r\n if (!IS_QKB_UI) {\r\n return\r\n }\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n if (refreshItems) {\r\n refreshItems();// update navigation (non compatible)\r\n }\r\n }, [refreshItems]);\r\n\r\n const deleteButtonClick = async () => {\r\n if (alreadyDisabled) {\r\n return false\r\n }\r\n\r\n if (IS_LIXIL_UI) {\r\n const featureLabel = Analytics.getSkuForAnalytics(lookFeature);\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureRemove + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureRemove + featureLabel\r\n );\r\n\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (document.kvConfig.visualizerType === \"bvLook\") {\r\n switch (lookFeature.partId) {\r\n case \"vanity_faucet\":\r\n case \"vanity_sink\": {\r\n if (IS_PRODUCT_JOURNEY) {\r\n if (lookFeature.partId === \"vanity_sink\") {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(\"vanity_faucet\");\r\n if (relatedFeatureGroup && !relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature\r\n && (!relatedFeatureGroup.activeFeature.metaData[\"MountType\"] || !relatedFeatureGroup.activeFeature.metaData[\"MountType\"].includes('U'))) {\r\n // Turning off the faucet should not turn off the sink or countertop, but turning of the sink should turn off the faucet (*unless it’s a wall mount faucet)\r\n disableFeature(relatedFeatureGroup.activeFeature, updateLookCartItem);\r\n }\r\n }\r\n break;\r\n }\r\n const parent = layout.getSubPartByPartId(lookFeature.partId === \"vanity_faucet\" ? \"vanity_sink\" : \"vanity_faucet\");\r\n if (IS_LIXIL_UI && parent && lookFeature.metaData[\"layerPosition\"] && parent.part.layerPositions[lookFeature.metaData.layerPosition]) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.styleRemoveFeature);\r\n // setLookRemovePopup({\r\n // fromFeature: lookFeature\r\n // });\r\n setLookStylePopup({\r\n notMatchingFeatures: [parent.part.layerPositions[lookFeature.metaData.layerPosition]]\r\n });\r\n return false\r\n }\r\n break;\r\n }\r\n case \"toilet\": {\r\n [\"toilet_brush\", \"paper_holder\"].forEach(partId => {\r\n const relatedFeatureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (relatedFeatureGroup && !relatedFeatureGroup.disabled && relatedFeatureGroup.activeFeature) {\r\n disableFeature(relatedFeatureGroup.activeFeature, updateLookCartItem);\r\n }\r\n })\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n await disableFeature(lookFeature, updateLookCartItem);\r\n updateCanvasCount(); // update canvas and self component\r\n updateForOldUI(); // update canvas with jquery ommmg\r\n };\r\n\r\n const turnOnClick = () => {\r\n const featureLabel = Analytics.getSkuForAnalytics(lookFeature);\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureEnable + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureEnable + featureLabel\r\n );\r\n\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick();\r\n }\r\n navFeatureCLick(lookFeature);\r\n enableRelatedFeature(lookFeature, null, null);\r\n updateCanvasCount(); // update canvas and self component\r\n updateForOldUI(); // update canvas with jquery ommmg\r\n }\r\n\r\n if (isIcon) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (isToggle) {\r\n return (\r\n \r\n }\r\n label={intl.formatMessage({id: text || \"grohe.mobile.feature.enableButton\"})}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nLookFeatureRemoveButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n updateLookCartItem: PropTypes.func.isRequired,\r\n isList: PropTypes.bool,\r\n isIcon: PropTypes.bool,\r\n isToggle: PropTypes.bool,\r\n text: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n canvasCount,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n // setLookRemovePopup,\r\n setLookStylePopup,\r\n updateCanvasCount,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport UiSelect from \"../ui/select\";\r\nimport {BACKSPLASH_TYPES} from \"../kvComponent/core/constants\";\r\nimport {KVSCENE_BACKSPLASH_TYPES} from \"../kvSceneComponent/core/constants\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {\r\n setActiveFeature,\r\n toggleSelectionFeatureInfo,\r\n toggleShowDescriptionCover,\r\n updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\nimport WithClickCount from \"../look/hocs/withClickCount\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport Navigation from \"../visComponents/navigation/navigation\";\r\nimport {setLookActiveFeature} from \"../../actions/lookFunctions\";\r\nimport {featureInterface} from \"../../interfaces/featureInterface\";\r\n\r\nclass BacksplashSelect extends Component {\r\n\r\n static propTypes = {\r\n // activePart: PropTypes.object.isRequired // Backsplash\r\n updateParent: PropTypes.func,\r\n useButtons: PropTypes.bool,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n };\r\n\r\n handleBacksplashItemClick = async (type, maxClickCountReached) => {\r\n Analytics.sendClickEvent(\"backsplash-type-selected-\" + type);\r\n if (maxClickCountReached && maxClickCountReached()) {\r\n return false\r\n }\r\n const backsplashSubPart = this.getBacksplashPart();\r\n const currentActiveName = backsplashSubPart.activeFeature ? backsplashSubPart.activeFeature.getCountertopGroupsSplittedFeatureName() : \"\";\r\n let featureToClick = backsplashSubPart.getFeatureByBacksplashType(type);\r\n // console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick && currentActiveName && (featureToClick.getCountertopGroupsSplittedFeatureName() !== currentActiveName)) {\r\n loaderEnable();\r\n await Navigation.searchFeaturesByName(backsplashSubPart, currentActiveName);\r\n loaderDisable();\r\n featureToClick = backsplashSubPart.getFeatureByBacksplashType(type);\r\n // console.log(\"featureToClick2\", featureToClick);\r\n }\r\n console.log(\"featureToClick\", featureToClick);\r\n if (featureToClick) {\r\n featureToClick.handleClick();\r\n this.props.setActiveFeature(featureToClick);\r\n // this.props.toggleShowDescriptionCover(false);\r\n this.forceUpdate();\r\n if (this.props.updateParent) {\r\n this.props.updateParent(featureToClick);\r\n }\r\n this.props.updateCanvasCount();\r\n }\r\n if (this.props.useButtons) {\r\n this.props.setLookActiveFeature(featureToClick);\r\n }\r\n };\r\n\r\n getBacksplashPart = () => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n return wallsParent.relatedItems.find(relItem => relItem.partId === \"backsplash\");\r\n };\r\n\r\n getValueText = () => {\r\n if (this.props.bvOpened) { // visualizer\r\n return \r\n } else {\r\n if (this.props.windowWidth < 1160) {\r\n return \r\n } else if (this.props.windowWidth < 1600) {\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n };\r\n\r\n getBackplashTypes = () => {\r\n if (document.kvConfig.visualizerType === \"Kitchen\") {\r\n return BACKSPLASH_TYPES\r\n }\r\n if (this.props.fabricatorData.isEncore) {\r\n const backsplashSubPart = this.getBacksplashPart();\r\n if (backsplashSubPart) {\r\n return KVSCENE_BACKSPLASH_TYPES.filter(type => {\r\n return !!backsplashSubPart.getFeatureByBacksplashType(type, \"\", true)\r\n })\r\n }\r\n }\r\n return KVSCENE_BACKSPLASH_TYPES\r\n };\r\n\r\n renderButtons = (currentType) => {\r\n return (\r\n \r\n {(maxClickCountReached) => (\r\n
    \r\n \r\n \r\n \r\n
    \r\n {this.getBackplashTypes().map(backsplashType => {\r\n const isActive = currentType === backsplashType;\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n const backsplashSubPart = this.getBacksplashPart();\r\n const currentType = backsplashSubPart.getCurrentActiveFeatureType();\r\n if (this.props.useButtons) {\r\n return this.renderButtons(currentType)\r\n }\r\n // console.log(\"backsplashSubPart\", );\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const fabricatorData = store.fabricatorState;\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n return {\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n windowWidth: store.serverState.windowWidth,\r\n lookActiveFeature: ownProps.activeFeature || lookActiveFeature, // update active button\r\n fabricatorData, // update active button\r\n canvasCount,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover,\r\n updateCanvasCount,\r\n setLookActiveFeature,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BacksplashSelect)\r\n","import {MODULE_CONTEXT_MENU_DIRECTIONS} from \"../../constants\";\r\n\r\nexport const topCabinetModuleSystem = [\r\n [\"18_18_25\", \"18_18_26\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"36_36_1\"],\r\n [\"18_36_4\", \"18_18_26\", \"18_18_28\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"18_18_25\", \"18_18_26\"],\r\n [\"18_36_4\", \"18_36_5\"],\r\n [\"36_36_1\"]\r\n];\r\n\r\nexport const bottomCabinetModuleSystem = [\r\n [],\r\n [\"36_12_41\", \"36_24_10\"],\r\n [\"24_12_44\", \"12_36_8\", \"24_12_46\", \"24_12_48\"],\r\n [\"12_36_6\", \"24_36_3\"],\r\n [\"12_36_6\", \"24_12_45\", \"24_24_18\"],\r\n [\"36_36_1\"],\r\n [\"36_12_41\", \"36_24_10\"],\r\n [\"36_12_41\", \"36_12_42\", \"36_12_43\"]\r\n];\r\n\r\nexport const getModuleCombinations = (moduleContextMenuModulePart, direction = MODULE_CONTEXT_MENU_DIRECTIONS.Vertical) => {\r\n // width-height-id\r\n switch (moduleContextMenuModulePart) {\r\n case \"1\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_6-12_36_7-12_36_8\", \"18_36_4-18_36_5\", \"24_36_2-12_36_8\", \"12_36_6-24_36_3\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_41-36_12_42-36_12_43\", \"36_18_19-36_18_20\", \"36_24_9-36_12_43\", \"36_12_41-36_24_10\"];\r\n default:\r\n return []\r\n }\r\n case \"2\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_6-12_36_7\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"24_24_15-24_12_48\", \"24_24_17-24_12_44\", \"24_18_21-24_18_23\", \"24_12_44-24_12_46-24_12_48\"];\r\n default:\r\n return []\r\n }\r\n case \"3\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"12_36_7-12_36_8\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"24_24_16-24_12_49\", \"24_24_18-24_12_45\", \"24_18_22-24_18_24\", \"24_12_45-24_12_47-24_12_49\"];\r\n default:\r\n return []\r\n }\r\n case \"4\":\r\n return [\"18_24_11-18_12_54\", \"18_24_13-18_12_50\", \"18_18_25-18_18_27\", \"18_12_50-18_12_52-18_12_54\"];\r\n case \"5\":\r\n return [\"18_24_12-18_12_55\", \"18_24_14-18_12_51\", \"18_18_26-18_18_28\", \"18_12_51-18_12_53-18_12_55\"];\r\n case \"6\": // left 18\r\n return [\"12_18_29-12_18_32\", \"12_24_35-12_12_62\", \"12_24_38-12_12_56\", \"12_12_56-12_12_59-12_12_62\"];\r\n case \"7\": // center 18\r\n return [\"12_18_30-12_18_33\", \"12_24_36-12_12_63\", \"12_24_39-12_12_57\", \"12_12_57-12_12_60-12_12_63\"];\r\n case \"8\": // right 18\r\n return [\"12_18_31-12_18_34\", \"12_24_37-12_12_64\", \"12_24_40-12_12_58\", \"12_12_58-12_12_61-12_12_64\"];\r\n case \"9\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"18_24_11-18_24_12\", \"24_24_15-12_24_37\", \"24_24_16-12_24_35\", \"12_24_35-12_24_36-12_24_37\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_41-36_12_42\"];\r\n default:\r\n return []\r\n }\r\n case \"10\":\r\n switch (direction) {\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Vertical:\r\n return [\"18_24_13-18_24_14\", \"24_24_17-12_24_40\", \"24_24_18-12_24_38\", \"12_24_38-12_24_39-12_24_40\"];\r\n case MODULE_CONTEXT_MENU_DIRECTIONS.Horizontal:\r\n return [\"36_12_42-36_12_43\"];\r\n default:\r\n return []\r\n }\r\n case \"11\":\r\n return [\"18_12_50-18_12_52\"];\r\n case \"12\":\r\n return [\"18_12_51-18_12_53\"];\r\n case \"13\":\r\n return [\"18_12_52-18_12_54\"];\r\n case \"14\":\r\n return [\"18_12_53-18_12_55\"];\r\n case \"15\":\r\n return [\"12_24_35-12_24_36\", \"24_12_44-24_12_46\"];\r\n case \"16\":\r\n return [\"12_24_36-12_24_37\", \"24_12_45-24_12_47\"];\r\n case \"17\":\r\n return [\"12_24_38-12_24_39\", \"24_12_46-24_12_48\"];\r\n case \"18\":\r\n return [\"12_24_39-12_24_40\", \"24_12_47-24_12_49\"];\r\n case \"19\":\r\n return [\"24_18_21-12_18_31\", \"24_18_22-12_18_29\", \"18_18_25-18_18_26\", \"12_18_29-12_18_30-12_18_31\"];\r\n case \"20\":\r\n return [\"24_18_23-12_18_34\", \"24_18_24-12_18_32\", \"18_18_27-18_18_28\", \"12_18_32-12_18_33-12_18_34\"];\r\n case \"21\":\r\n return [\"12_18_29-12_18_30\"];\r\n case \"22\":\r\n return [\"12_18_30-12_18_31\"];\r\n case \"23\":\r\n return [\"12_18_32-12_18_33\"];\r\n case \"24\":\r\n return [\"12_18_33-12_18_34\"];\r\n case \"35\":\r\n return [\"12_12_56-12_12_59\"];\r\n case \"36\":\r\n return [\"12_12_57-12_12_60\"];\r\n case \"37\":\r\n return [\"12_12_58-12_12_61\"];\r\n case \"38\":\r\n return [\"12_12_59-12_12_62\"];\r\n case \"39\":\r\n return [\"12_12_60-12_12_63\"];\r\n case \"40\":\r\n return [\"12_12_61-12_12_64\"];\r\n case \"41\":\r\n return [\"24_12_44-12_12_58\", \"24_12_45-12_12_56\", \"12_12_56-12_12_57-12_12_58\"];\r\n case \"42\":\r\n return [\"24_12_46-12_12_61\", \"24_12_47-12_12_59\", \"12_12_59-12_12_60-12_12_61\"];\r\n case \"43\":\r\n return [\"24_12_48-12_12_64\", \"24_12_49-12_12_62\", \"12_12_62-12_12_63-12_12_64\"];\r\n case \"44\":\r\n return [\"12_12_56-12_12_57\"];\r\n case \"45\":\r\n return [\"12_12_57-12_12_58\"];\r\n case \"46\":\r\n return [\"12_12_59-12_12_60\"];\r\n case \"47\":\r\n return [\"12_12_60-12_12_61\"];\r\n case \"48\":\r\n return [\"12_12_62-12_12_63\"];\r\n case \"49\":\r\n return [\"12_12_63-12_12_64\"];\r\n case \"50\":\r\n case \"51\":\r\n case \"52\":\r\n case \"53\":\r\n case \"54\":\r\n case \"55\":\r\n case \"56\":\r\n case \"57\":\r\n case \"58\":\r\n case \"59\":\r\n case \"60\":\r\n case \"61\":\r\n case \"62\":\r\n case \"63\":\r\n case \"64\": // no where to split more!\r\n default:\r\n return []\r\n }\r\n};","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {applianceThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Fridge from \"../subparts/appliances/fridge\";\r\nimport FridgeShadow from \"../subparts/appliances/fridgeShadow\";\r\nimport Hood from \"../subparts/appliances/hood\";\r\nimport Dishwasher from \"../subparts/appliances/dishwasher\";\r\nimport Microwave from \"../subparts/appliances/microwave\";\r\nimport Range from \"../subparts/appliances/range\";\r\n\r\nexport default class Appliance extends Part {\r\n static id = 'Appliances';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Appliances';\r\n this.partThumbnail = applianceThumbnail;\r\n this.partThumbnailSize = \"70%\";\r\n this.translateId = \"visualizer.kitchen.appliance\";\r\n\r\n // related items\r\n this.fridge = null;\r\n this.fridgeShadow = null;\r\n this.hood = null;\r\n this.microwave = null;\r\n this.range = null;\r\n this.dishwasher = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Fridge\":\r\n relatedItemName = \"fridge\";\r\n RelatedItemClass = Fridge;\r\n break;\r\n case \"Fridge Shadow\":\r\n relatedItemName = \"fridgeShadow\";\r\n RelatedItemClass = FridgeShadow;\r\n break;\r\n case \"Hood\":\r\n relatedItemName = \"hood\";\r\n RelatedItemClass = Hood;\r\n break;\r\n case \"Dishwasher\":\r\n relatedItemName = \"dishwasher\";\r\n RelatedItemClass = Dishwasher;\r\n break;\r\n case \"Microwave\":\r\n relatedItemName = \"microwave\";\r\n RelatedItemClass = Microwave;\r\n break;\r\n case \"Range\":\r\n // we still need to keep NotInVisualizer Ranges here\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Appliance', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {centerIslandThumbnail} from \"../assets\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PLACEMENTS} from \"../constants\";\r\n\r\nimport Cabinet from \"../subparts/centerIsland/cabinet\";\r\nimport Countertop from \"../subparts/centerIsland/countertop\";\r\nimport Chairs from \"../subparts/centerIsland/chairs\";\r\nimport Faucet from \"../subparts/centerIsland/faucet\";\r\nimport Sink from \"../subparts/centerIsland/sink\";\r\nimport Handle from \"../subparts/centerIsland/handle\";\r\nimport CenterIslandShadow from \"../subparts/centerIsland/centerIslandshadow\";\r\nimport Stovetop from \"../subparts/centerIsland/stovetop\";\r\nimport Range from \"../subparts/centerIsland/range\";\r\nimport Edge from \"../subparts/centerIsland/edge\";\r\nimport ChairsShadow from \"../subparts/centerIsland/chairsShadow\";\r\n\r\nexport default class CenterIsland extends Part {\r\n static id = 'CenterIsland';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'CenterIsland';\r\n this.partThumbnail = centerIslandThumbnail;\r\n this.translateId = \"visualizer.kitchen.center_island\";\r\n\r\n // related items\r\n this.cabinet = null;\r\n this.countertop = null;\r\n this.chairs = null;\r\n this.edge = null;\r\n this.faucet = null;\r\n this.sink = null;\r\n this.range = null;\r\n this.centerIslandshadow = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n shouldLoadInDifferentGroups = false,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Center Island\":\r\n relatedItemName = \"cabinet\";\r\n RelatedItemClass = Cabinet;\r\n break;\r\n case \"Center Island Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Center Island Handle\":\r\n relatedItemName = \"handle\";\r\n RelatedItemClass = Handle;\r\n break;\r\n case \"Chair Shadow\":\r\n relatedItemName = \"chairsShadow\";\r\n RelatedItemClass = ChairsShadow;\r\n break;\r\n case \"Chair\":\r\n relatedItemName = \"chairs\";\r\n RelatedItemClass = Chairs;\r\n break;\r\n case \"Center Island Shadow\":\r\n relatedItemName = \"centerIslandshadow\";\r\n RelatedItemClass = CenterIslandShadow;\r\n break;\r\n case \"Faucet\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"faucet\";\r\n RelatedItemClass = Faucet;\r\n }\r\n break;\r\n case \"Sink\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"sink\";\r\n RelatedItemClass = Sink;\r\n }\r\n break;\r\n case \"Stovetop\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"stovetop\";\r\n RelatedItemClass = Stovetop;\r\n }\r\n break;\r\n case \"Range\":\r\n if ((dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n if (!dbFeature.metaData[\"Placement\"]) {\r\n shouldLoadInDifferentGroups = true;\r\n }\r\n relatedItemName = \"range\";\r\n RelatedItemClass = Range;\r\n }\r\n break;\r\n case \"Edge Profile\":\r\n shouldLoadInDifferentGroups = true;\r\n relatedItemName = \"edge\";\r\n RelatedItemClass = Edge;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return !shouldLoadInDifferentGroups;\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Center Island', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"center_island_handle\") {\r\n item.visible = item.features.filter(f => f.matchesMetaForArrayOfConditions(item.getArrayOfConditions())).length;\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n getCabinetType() {\r\n return this.cabinet && this.cabinet.activeFeature\r\n ? this.cabinet.activeFeature.dbFeature.metaData[\"Cabinet\"]\r\n : \"\"\r\n }\r\n\r\n getChairType() {\r\n return this.chairs && this.chairs.activeFeature\r\n ? this.chairs.activeFeature.dbFeature.metaData[\"Chair\"]\r\n : \"\"\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup, changeMessageBoxState, showSchedulerPopup} from \"../../actions/actionFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {QuoteRequestType, UserPopupTypes} from \"../visComponents/constants\";\r\nimport {renderMessagePopup} from \"../../api/api-popups\";\r\n\r\nclass ScheduleButton extends Component {\r\n\r\n static propTypes = {\r\n buttonLayoutId: PropTypes.oneOf([\"mobileButton\", \"designButtonMenu\", \"mobileNavigationMenu\"]).isRequired,\r\n scheduleButtonOnClick: PropTypes.func\r\n };\r\n\r\n handleScheduleButtonClick = () => {\r\n if (this.props.scheduleButtonOnClick) {\r\n this.props.scheduleButtonOnClick(); // close design button list, etc.\r\n }\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n Analytics.sendClickEvent(this.getAnalyticsEvent());\r\n if (!this.props.isPhoneNumberValidated) {\r\n UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n userPopupType: UserPopupTypes.Schedule\r\n });\r\n return;\r\n }\r\n if (fabricatorSettings.enableCalendarForScheduling) {\r\n this.props.showSchedulerPopup(true)\r\n } else {\r\n loaderEnable(\"loader.appointmentText\", \"loader.appointmentTitle\");\r\n saveQuote({submit: true, quoteRequestType: QuoteRequestType.ScheduleAnAppointment})\r\n .then(() => {\r\n loaderDisable();\r\n renderMessagePopup(\"userPopup.messageBox.appointmentRequested\");\r\n });\r\n }\r\n };\r\n\r\n getAnalyticsEvent = () => {\r\n switch (this.props.buttonLayoutId) {\r\n case \"mobileButton\":\r\n default:\r\n return \"schedule-appointment-main-button\";\r\n case \"designButtonMenu\":\r\n return \"design-buttons-schedule-button\";\r\n case \"mobileNavigationMenu\":\r\n return \"menu-option-clicked-design-consultation\";\r\n }\r\n };\r\n\r\n getSchedulingButton =() => {\r\n switch (this.props.buttonLayoutId) {\r\n case \"mobileButton\":\r\n default:\r\n return (\r\n \r\n );\r\n case \"designButtonMenu\":\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n case \"mobileNavigationMenu\":\r\n return (\r\n
  • \r\n )\r\n }\r\n };\r\n\r\n render() {\r\n return this.props.fabricatorSettings.enableScheduling ? this.getSchedulingButton() : null\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorSettings: store.fabricatorState.settings\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState,\r\n showSchedulerPopup\r\n})(ScheduleButton);\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\n\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport {ShowerAccessories} from \"./parts/showerAccessories\";\r\nimport {Toilet} from \"./parts/toilet\";\r\n// import {WindowParent} from \"./parts/windowParent\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {Shower} from \"./parts/shower\";\r\nimport {Vanity} from \"./parts/vanity\";\r\nimport {ShowerTubCombo} from \"./parts/showerTubCombo\";\r\nimport Globals from \"./parts/globals\";\r\nimport {Bathtub} from \"./parts/bathtub\";\r\nimport {AVAILABLE_VISUALIZER_TYPES, IS_BATHROOM_OLD_BV_SCENE} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.bvScene;\r\n localStorageKey = \"bvSceneState\";\r\n layersBinding = IS_BATHROOM_OLD_BV_SCENE ? \"Bathroom\" : \"BathroomV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Vanity.id] = new Vanity();\r\n this.parts[Shower.id] = new Shower();\r\n this.parts[ShowerTubCombo.id] = new ShowerTubCombo();\r\n this.parts[ShowerAccessories.id] = new ShowerAccessories();\r\n this.parts[Bathtub.id] = new Bathtub();\r\n this.parts[Toilet.id] = new Toilet();\r\n this.parts[Floor.id] = new Floor();\r\n // this.parts[WindowParent.id] = new WindowParent();\r\n // this.parts[Ceiling.id] = new Ceiling();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n fixFeatureMetaData(dbFeature) {\r\n dbFeature.metaData.RoomLayout = dbFeature.metaData.RoomLayout.map((mValue) => {\r\n Object.values(LayoutType).map(val => val + \"\").forEach(stringNum => {\r\n if (mValue === stringNum) {\r\n mValue = \"Layout\" + mValue\r\n }\r\n })\r\n return mValue\r\n })\r\n return dbFeature\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Background.BackgroundBG, // exclude Globals\r\n ...Object.keys(this.zIndexes[layoutType].Globals).map(key => this.zIndexes[layoutType].Globals[key])\r\n ]\r\n }\r\n\r\n}\r\n","import {COUNTERTOP_GROUP} from \"../../../../kvComponent/core/constants\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../../../core/constants\";\r\nimport {filterCartItems, sortCartItemsForListPage} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\n/**\r\n * @param cartItem {cartItemInterface}\r\n * @param property {string}\r\n * @returns {number|string}\r\n */\r\nexport const getCartItemShippingCost = (cartItem, property = \"shippingCost\") => {\r\n if (property !== \"shippingCost\") {\r\n return cartItem[property] || cartItem.cartFeature.dbFeature[property]\r\n }\r\n return (typeof cartItem.shippingCost === \"number\")\r\n ? cartItem.shippingCost\r\n : (typeof cartItem.cartFeature.dbFeature.shippingCost === \"number\")\r\n ? cartItem.cartFeature.dbFeature.shippingCost\r\n : 0\r\n}\r\n\r\n/**\r\n * returns array of deliveries\r\n * @param cartItems {[cartItemInterface]}\r\n * @returns {array}\r\n */\r\nexport const createDeliverySections = (cartItems) => {\r\n\r\n const cartItemsToInclude = filterCartItems(cartItems, true, true);\r\n const cartItemsList = sortCartItemsForListPage(cartItemsToInclude);\r\n\r\n let deliveries = [];\r\n cartItemsList.forEach(cartItem => {\r\n const cartItemShippingCost = getCartItemShippingCost(cartItem) || 0;\r\n const cartItemShippingName = getCartItemShippingCost(cartItem, \"shippingName\") || \"Free\";\r\n const cartItemShippingTime = getCartItemShippingCost(cartItem, \"shippingTime\") || \"-\";\r\n const cartItemShippingCode = getCartItemShippingCost(cartItem, \"shippingCode\") || \"-\";\r\n const existingDelivery = deliveries.find(delivery => {\r\n return delivery.price === cartItemShippingCost && delivery.name === cartItemShippingName\r\n });\r\n if (existingDelivery) {\r\n existingDelivery.cartItems.push(cartItem.id)\r\n } else {\r\n deliveries.push({\r\n price: cartItemShippingCost,\r\n name: cartItemShippingName,\r\n time: cartItemShippingTime,\r\n code: cartItemShippingCode,\r\n cartItems: [cartItem.id],\r\n // activeDeliveryIndex: deliveries.length,\r\n })\r\n }\r\n })\r\n return deliveries\r\n}\r\n\r\nexport const setCartItemsShipping = (cartItems, shippingOptions = []) => {\r\n return cartItems.map(cartItem => {\r\n if (!cartItem.cartFeature || !cartItem.cartFeature.dbFeature) {\r\n return cartItem // no need to add a delivery\r\n }\r\n const shippingForItem = shippingOptions.find(shippingObject => shippingObject.dbFeatureId === cartItem.cartFeature.dbFeature.id);\r\n if (shippingForItem && shippingForItem.options && shippingForItem.options.length) {\r\n if (cartItem.shippingName && shippingForItem.options.some(option => option.title === cartItem.shippingName)) {\r\n return cartItem // already assigned, we already have been here\r\n }\r\n const firstOption = shippingForItem.options[0];\r\n return Object.assign({}, cartItem, {\r\n shippingCost: Math.trunc(firstOption.cost * 100) / 100,\r\n shippingName: firstOption.title,\r\n shippingTime: firstOption.delivery,\r\n shippingCode: firstOption.code,\r\n })\r\n } else if (cartItem.shippingName) {\r\n return cartItem // already assigned, we already have been here\r\n } else if (cartItem.cartFeature.dbFeature.shippingCost || cartItem.cartFeature.dbFeature.shippingName) {\r\n return Object.assign({}, cartItem, {\r\n shippingCost: cartItem.cartFeature.dbFeature.shippingCost || 0,\r\n shippingName: getCartItemShippingCost(cartItem, \"shippingName\") || \"Free\",\r\n shippingTime: getCartItemShippingCost(cartItem, \"shippingTime\") || \"-\",\r\n shippingCode: getCartItemShippingCost(cartItem, \"shippingCode\") || \"-\",\r\n })\r\n } else {\r\n return Object.assign({}, cartItem, {\r\n shippingCost: 0,\r\n shippingName: \"Free\",\r\n shippingTime: \"-\",\r\n shippingCode: \"-\",\r\n })\r\n }\r\n })\r\n}\r\n\r\nconst area2Codes = [\"MN\", \"WI\", \"MI\", \"NY\", \"VT\", \"NH\", \"ME\", \"MA\", \"RI\", \"CT\", \"NJ\"];\r\nconst area3Codes = [\"WA\", \"OR\", \"CA\", \"AZ\", \"NV\", \"ID\", \"MT\", \"WY\", \"UT\", \"NM\", \"CO\", \"SD\", \"ND\"];\r\n\r\nconst getAreaCost = (postalCode) => {\r\n if (area3Codes.includes(postalCode)) {\r\n return 295\r\n } else if (area2Codes.includes(postalCode)) {\r\n return 245\r\n }\r\n return 225\r\n}\r\n\r\n/**\r\n * @param deliveryCost {number}\r\n * @param cartItems {{cartItemInterface}}\r\n * @param storeState {object}\r\n * @returns {number}\r\n */\r\nexport const getCafeCountertopsDeliveryCost = (deliveryCost = 0, cartItems, storeState) => {\r\n let materialsQuantity = cartItems.reduce(((totalQuantity, cartItem) => {\r\n if (COUNTERTOP_GROUP.includes(cartItem.partId) || COUNTERTOP_GROUP_BATHROOM.includes(cartItem.partId)) {\r\n totalQuantity = totalQuantity + cartItem.quantity;\r\n }\r\n return totalQuantity\r\n }), 0)\r\n if (materialsQuantity === 0) {\r\n return deliveryCost\r\n }\r\n if (materialsQuantity < 10) {\r\n deliveryCost = deliveryCost + (95 * 2)\r\n } else if (materialsQuantity < 25) {\r\n const {stateShort, state} = storeState.paymentState.shippingAddress;\r\n const postalCode = stateShort || (state || \"\").slice(0, 2) || storeState.userState.userInfo.stateShort || (storeState.userState.userInfo.state || \"\").slice(0, 2);\r\n deliveryCost = deliveryCost + (getAreaCost(postalCode) * 2)\r\n } else {\r\n deliveryCost = deliveryCost + ((materialsQuantity * 6) * 2) // $6/sqft of material\r\n }\r\n return deliveryCost\r\n}\r\n","//INITIAL FLOW\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setShowUnlockCalculations = (showUnlockCalculations) => ({\r\n type: types.SET_SHOW_UNLOCK_CALCULATIONS,\r\n payload: {showUnlockCalculations}\r\n});\r\n\r\nexport const setUnlockCalculationsStep = (unlockCalculationsStep) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_STEP,\r\n payload: {unlockCalculationsStep}\r\n});\r\n\r\nexport const showUnlockCalculationsCartItems = (showCartItems) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_CART_ITEM,\r\n payload: {showCartItems}\r\n});\r\n\r\nexport const showUnlockCalculationsTotalItems = (showTotalItems) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM,\r\n payload: {showTotalItems}\r\n});\r\n\r\nexport const setShowUnlockCalculationsTutorial = (showUnlockCalculationsTutorial) => ({\r\n type: types.SHOW_UNLOCK_CALCULATIONS_TUTORIAL,\r\n payload: {showUnlockCalculationsTutorial}\r\n});\r\n\r\nexport const setUnlockCalculationsTutorialStep = (unlockCalculationsTutorialStep) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP,\r\n payload: {unlockCalculationsTutorialStep}\r\n});\r\n\r\nexport const setUnlockCalculationsTutorialFinished = (unlockCalculationsTutorialIsFinished) => ({\r\n type: types.SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED,\r\n payload: {unlockCalculationsTutorialIsFinished}\r\n});\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n// import Button from \"@mui/material/Button\";\r\n// import ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\n\r\n// import {setLookIntroStep, setLookOverlayOpened} from \"../../../../actions/lookFunctions\";\r\n// import {setLocalStorageItem} from \"../lookFunctions\";\r\n// import {LOOK_INTRO_STEPS} from \"../../core/constants\";\r\n// import {LookIconNavigate} from \"../../../common/icons\";\r\n\r\nconst LookIntroPopper = (props) => {\r\n\r\n const {introStep, anchorRef, currentStep, placement, toolTipText = \"\", className, roomIdeasButtonTranslate} = props;\r\n\r\n // const nextButtonClick = () => {\r\n // if (currentStep === LOOK_INTRO_STEPS.review) {\r\n // setLookIntroStep(introStep + 2); // go to exit, skip rooms\r\n // } else if (currentStep === LOOK_INTRO_STEPS.exit) { // exit button - finish\r\n // setLookOverlayOpened(\"\");\r\n // setLookIntroStep(LOOK_INTRO_STEPS.disabled);\r\n // setLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited, true);\r\n // } else {\r\n // setLookIntroStep(introStep + 1);\r\n // }\r\n // };\r\n\r\n return (\r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n {/**/}\r\n {/* */}\r\n {/**/}\r\n \r\n \r\n {/*{lastMobileSteps ? null : (*/}\r\n {/* */}\r\n {/*)}*/}\r\n
    \r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookIntroPopper.propTypes = {\r\n // anchorRef: PropTypes.oneOfType([\r\n // PropTypes.func,\r\n // PropTypes.shape({ current: PropTypes.elementType })\r\n // ]).isRequired,\r\n anchorRef: PropTypes.object.isRequired,\r\n currentStep: PropTypes.number.isRequired,\r\n placement: PropTypes.string,\r\n toolTipText: PropTypes.string,\r\n roomIdeasButtonTranslate: PropTypes.string,\r\n className: PropTypes.string,\r\n}\r\n\r\nLookIntroPopper.defaultProps = {\r\n placement: \"right\"\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {introStep} = store.lookState;\r\n // const {isMobile} = store.serverState;\r\n return {\r\n introStep,\r\n // isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n // setLookIntroStep,\r\n // setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookIntroPopper)\r\n","import React from \"react\";\r\n\r\nexport const initialContext = {\r\n activeContract: null,\r\n globalContractPage: 1, // pager\r\n activeContractPage: 1, // for current doc\r\n selectedContracts: [],\r\n totalPages: 1,\r\n receiptUrl: \"\", //blobUrl\r\n receiptPages: 0, // if 0 - contracts will start from 1\r\n receiptLayout: null, // for receipt sign\r\n // doc props\r\n showPage: false,\r\n pageRendered: false,\r\n selectedFieldIndex: -1,\r\n}\r\n\r\nconst ContractsContext = React.createContext(initialContext)\r\nexport default ContractsContext;\r\n","import flatMap from 'lodash/flatMap';\r\nimport find from 'lodash/find';\r\nimport some from 'lodash/some';\r\nimport findIndex from 'lodash/findIndex';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\n\r\nimport * as types from '../actions/actionTypes';\r\n//import instList from '../bvcomponents/installation/instHardCode';\r\n\r\nconst initialState = {\r\n instOpened: false,\r\n instList: [],\r\n defaultInstallations: [],\r\n};\r\n\r\nlet __installations = [];\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n case types.ADD_TO_CART:\r\n return __tryAddToInstallation(state, action.payload.cartItems);\r\n case types.REMOVE_FROM_CART:\r\n return __tryRemoveFromInstallations(state, action.payload.cartItem);\r\n case types.TOGGLE_INST_OPENED:\r\n case types.SET_INST_LIST:\r\n case types.SET_DEFAULT_INST_LIST:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.REMOVE_INSTALLATION_SERVICE_FROM_CART:\r\n return __toggleInstallationServiceUsage(state, action.payload);\r\n }\r\n\r\n return state;\r\n\r\n}\r\n\r\nexport function getInstallationsTotalCost(instList) {\r\n let cost = 0;\r\n flatMap(instList, group => group.services)\r\n .forEach(s => {\r\n if (s.selected) {\r\n cost += getInstallationCost(s);\r\n }\r\n });\r\n\r\n return cost;\r\n}\r\n\r\nexport function getInstallationCost(installationService) {\r\n return installationService.hourly * installationService.price;\r\n}\r\n\r\nfunction __toggleInstallationServiceUsage(state, {installationService}) {\r\n const {instList} = state;\r\n for (let i = 0; i < instList.length; i++){\r\n for (let j = 0; j < instList[i].services.length; j++) {\r\n const service = instList[i].services[j];\r\n if ((service.fabricatorFeature_id === installationService.fabricatorFeature_id)\r\n && (service.fabricatorInstallation_id === installationService.fabricatorInstallation_id)){\r\n service.selected = !service.selected;\r\n return {...state, instList: cloneDeep(instList)};\r\n }\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n\r\nfunction __tryAddToInstallation(state, cartItems) {\r\n let hasChanges = false;\r\n const {instList} = state;\r\n\r\n cartItems.filter(cartItem => cartItem.quantity).forEach(cartItem => {\r\n const ID = cartItem.cartFeature.dbFeature.id;\r\n const allInstallations = __getInstallations(state.defaultInstallations);\r\n const installations = allInstallations.filter(inst => {\r\n return inst && (inst.fabricatorFeature_id === ID)\r\n });\r\n\r\n if (installations.length) {\r\n let instGroup = find(instList, {title: cartItem.selectionGroup});\r\n if (!instGroup) {\r\n instGroup = {\r\n title: cartItem.selectionGroup,\r\n services: [],\r\n description: 'Do you wand to add installation for ' + cartItem.selectionGroup,\r\n enabled: false\r\n };\r\n instList.push(instGroup);\r\n }\r\n\r\n installations.forEach(installation => {\r\n const service = some(instGroup.services, {\r\n // fabricatorFeature_id: id, // removed this check cause they are different, but we need to remove duplicates\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id\r\n });\r\n if (!service) {\r\n const selected = installation.autoAddWithProduct;\r\n instGroup.services.push({\r\n fabricatorFeature_id: cartItem.cartFeature.dbFeature.id,\r\n title: installation.installationName,\r\n hourly: installation.defaultQuantity || 1,\r\n price: installation.price,\r\n description: installation.description,\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id,\r\n selected,\r\n autoAddWithProduct: installation.autoAddWithProduct,\r\n defaultQuantity: installation.defaultQuantity,\r\n hideQuantity: installation.hideQuantity,\r\n unit: installation.unit\r\n });\r\n if (selected) {\r\n instGroup.enabled = true;\r\n }\r\n hasChanges = true;\r\n }\r\n });\r\n }\r\n });\r\n\r\n return hasChanges ? {...state, instList: cloneDeep(instList)} : state;\r\n}\r\n\r\nfunction __tryRemoveFromInstallations(state, cartItem) {\r\n const {instList} = state;\r\n const ID = cartItem.cartFeature.dbFeature.id;\r\n const allInstallations = __getInstallations(state.defaultInstallations);\r\n const installations = allInstallations.filter(inst => {\r\n return inst.fabricatorFeature_id === ID\r\n });\r\n if (installations.length) {\r\n installations.forEach(installation => {\r\n let instGroupIdx = findIndex(instList, {title: cartItem.selectionGroup});\r\n if (instGroupIdx !== -1) {\r\n const serviceIdx = findIndex(instList[instGroupIdx].services, {\r\n fabricatorFeature_id: cartItem.cartFeature.dbFeature.id,\r\n fabricatorInstallation_id: installation.fabricatorInstallation_id\r\n });\r\n if (serviceIdx !== -1) {\r\n instList[instGroupIdx].services.splice(serviceIdx, 1);\r\n if (!instList[instGroupIdx].services.length) {\r\n // remove group as well\r\n instList.splice(instGroupIdx, 1);\r\n return {...state, instList: cloneDeep(instList)};\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n return {...state, instList: cloneDeep(instList)};\r\n}\r\n\r\nfunction __getInstallations(defaultInstallations) {\r\n if (defaultInstallations && defaultInstallations.length && __installations && !__installations.length) {\r\n __installations = flatMap(defaultInstallations, i => i.installations);\r\n __installations = __installations.filter(i => {\r\n return i && (i.autoAddWithProduct || i.customerAdd || (i.employeesOnly && document.kvConfig.isBackend));\r\n })\r\n }\r\n\r\n return __installations;\r\n}\r\n\r\n","export const GROHE_CONFIG = {\r\n sidebarWidth: {\r\n desktop: 306.5,\r\n mobile: 360,\r\n },\r\n similarProductsWidth: {\r\n desktop: 307.5,\r\n // mobile: 360,\r\n },\r\n mainBarWidth: {\r\n desktop: 412,\r\n }\r\n};\r\n","import 'whatwg-fetch';\r\n\r\nconst shouldUseKvConfigDomain = document.location.hostname === 'localhost'\r\n || document.location.hostname.includes(\"192.168\")\r\n || window.location.href.includes(\"testprod\")\r\n || document.kvConfig.isWordpressPlugin;\r\n\r\nexport const HOST_NAME = document.kvConfig.domain && shouldUseKvConfigDomain\r\n ? document.kvConfig.domain : \"\";\r\n\r\nexport function handleHttpError(response) {\r\n if (response.status === 400) { // bad request\r\n return response.json()\r\n .then(json => {\r\n checkApiError(json);\r\n //console.log(400, json);\r\n return Promise.resolve({__error__: true});\r\n });\r\n }\r\n\r\n if (!response.ok) {\r\n return response.json()\r\n .then(json => Promise.reject(json ? json.message : response.statusMessage));\r\n }\r\n\r\n return response;\r\n}\r\n\r\nfunction checkApiError(response) {\r\n let errorMessage = response.error || response.errorMessage\r\n || (response.errors && Array.isArray(response.errors) ? response.errors.join(',') : null);\r\n if (!errorMessage) {\r\n return;\r\n }\r\n\r\n //dispatch({type: ActionTypes.HTTP_ERROR, payload: errorMessage});\r\n}\r\n\r\nexport function getResponse(response) {\r\n if (!response)\r\n return null;\r\n if (response.json)\r\n return response.json();\r\n return response;\r\n}\r\n\r\n\r\nexport const get = (url) => {\r\n return fetch(HOST_NAME + url, {\r\n // return fetch('http://localhost:3000/localdata', {\r\n headers: {\r\n 'Accept': 'application/json'\r\n }\r\n })\r\n .then(handleHttpError)\r\n .then(response => getResponse(response))\r\n .catch(reason => Promise.reject(reason));\r\n};\r\n\r\nexport const post = (url, data, { signal, domain } = {}) => {\r\n const isFormData = Object.prototype.toString.call(data) === '[object FormData]';\r\n const headers = {\r\n 'Accept': 'application/json'\r\n };\r\n if (!isFormData) {\r\n headers['Content-Type'] = 'application/json';\r\n }\r\n\r\n return fetch(domain ? domain + url : HOST_NAME + url, {\r\n method: 'post',\r\n body: isFormData ? data : JSON.stringify(data),\r\n headers: new Headers(headers),\r\n signal: signal,\r\n })\r\n .then(handleHttpError)\r\n .then(response => getResponse(response))\r\n .catch(reason => {\r\n if (reason.name === 'AbortError') {\r\n console.log('Fetch aborted');\r\n } else {\r\n return Promise.reject(reason);\r\n }\r\n });\r\n};\r\n","// do not use imports in this file!! we are trying to keep lead form bundle js clean\r\n\r\nimport {getCommonVisualizerType} from \"../../../../../config\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {getFeatureFromTheBackendBySku} from \"../../../../../api/look-api\";\r\n\r\nexport const fixStringEncoding = (string) => {\r\n return string && (typeof string === \"string\")\r\n ? string\r\n .replace(\"â€�\", \"”\")\r\n .replace(\"”\", \"”\")\r\n .replace(\"’\", \"’\")\r\n .replace(\"
\", \" \")\r\n .replace(\"
\", \"\") // not sure what it is\r\n : string\r\n}\r\n\r\nexport const fixWizardItem = (wizardItem, wizardItemIndex, forLeadForm = false, newVisualizerType) => {\r\n wizardItem.wizardNodes = []; // we don't use them in the visualizer! why do we keep them then\r\n Object.keys(wizardItem).forEach(property => {\r\n if (typeof wizardItem[property] === \"string\") {\r\n wizardItem[property] = fixStringEncoding(wizardItem[property]);\r\n }\r\n });\r\n if (!wizardItem.name) {\r\n wizardItem.name = \"wizard\" + (wizardItemIndex > 0 ? \"-\" + wizardItemIndex + 1 : \"\");\r\n }\r\n const currentVisType = getCommonVisualizerType(newVisualizerType);\r\n if (wizardItem.wizardGroups) {\r\n wizardItem.wizardGroups = wizardItem.wizardGroups.filter(wizGroup => {\r\n if (!wizGroup.enabled || (wizGroup.hideForCustomers && !document.kvConfig.isBackend)) {\r\n return false\r\n }\r\n if (wizardItem.visualizer === \"all\") {\r\n return (wizGroup.groupName === \"Room\") || !Array.isArray(wizGroup.visibleInVisualizers)\r\n || !wizGroup.visibleInVisualizers.length || wizGroup.visibleInVisualizers.includes(currentVisType)\r\n }\r\n return true\r\n }).map(wizGroup => {\r\n if (forLeadForm) {\r\n //getUrlLeadStepName\r\n wizGroup.leadStepUrl = wizGroup.leadStep\r\n ? wizGroup.leadStep.toLowerCase().replace(/ /g,\"-\")\r\n : \"project\"\r\n }\r\n if (wizGroup.nodeType === \"inputs\" && Array.isArray(wizGroup.inputFields)) {\r\n wizGroup.inputFields = wizGroup.inputFields.filter(inputObject => inputObject.checked)\r\n }\r\n Object.keys(wizGroup).forEach(property => {\r\n if (typeof wizGroup[property] === \"string\") {\r\n wizGroup[property] = fixStringEncoding(wizGroup[property]);\r\n }\r\n });\r\n [\"featuresIncluded\", \"featuresExcluded\"].forEach(property => {\r\n if (Array.isArray(wizGroup[property]) && wizGroup[property].length) {\r\n wizGroup[property] = wizGroup[property].map(excluded => {\r\n if (excluded && (typeof excluded === \"object\") && excluded.sharedFeatureName) {\r\n excluded.sharedFeatureName = excluded.sharedFeatureName\r\n .trim()\r\n .toLowerCase()\r\n .replace('room - ', '')\r\n }\r\n return excluded\r\n })\r\n }\r\n });\r\n return wizGroup\r\n })\r\n }\r\n return wizardItem\r\n}\r\n\r\nexport const getWizardFeatureAsync = async (feature, groupName) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByGroupName(groupName);\r\n if (featureGroup) {\r\n const nameToCompare = feature.sharedFeatureName; //lowercased already\r\n if (featureGroup.activeFeature && featureGroup.activeFeature.getLowerCasedSharedFeatureName() === nameToCompare) {\r\n return featureGroup.activeFeature\r\n }\r\n const navItems = layout.designNavigationItems({part: featureGroup}, null, \"\", false, \"all\");\r\n for (let i = 0; i < navItems.length; i++) {\r\n if (navItems[i].part.getLowerCasedSharedFeatureName() === nameToCompare) {\r\n return navItems[i].part;\r\n }\r\n }\r\n }\r\n return await getFeatureFromTheBackendBySku(feature.sku || feature.sharedFeatureName, featureGroup ? featureGroup.partId : \"\");\r\n}\r\n","import workspace from \"./workspace\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\n//todo sqft-react\r\n// import {setDataToQt} from \"../postMessage\";\r\n\r\nexport default new function() {\r\n\r\n var _self = this;\r\n\r\n this.store = {\r\n shapes: [],\r\n cfg: {},\r\n exportData: null\r\n };\r\n\r\n this.init = function() {\r\n // $('#saveHistory').click(_self.rememberShapes);\r\n // $('#restoreHistory').click(_self.restoreShapesFromHistory);\r\n // $('#consoleShapesFromHistory').click(_self.consoleShapesFromHistory);\r\n window.clearHistory = function() {\r\n this.store.shapes = [];\r\n this.store.exportData = null;\r\n }\r\n };\r\n // this.addEvent = function(eventName, eventData) {\r\n // switch (eventName) {\r\n // case \"newShape\":\r\n // _self.store.shapes.push(eventData);\r\n // break;\r\n // }\r\n // };\r\n this.getHistoryStore = function () {\r\n return _self.store\r\n };\r\n this.rememberShapes = function() {\r\n _self.store.shapes = [];\r\n workspace.getShapes().forEach(function (shape) {\r\n if (!shape.attachedToShape && shape.type !== \"appliances\" && shape.getLines) {\r\n shape.lines = [];\r\n shape.getLines().forEach(function (line) {\r\n line.historyPointFeatures = line.getPointsFeatures();\r\n shape.lines.push(line);\r\n });\r\n }\r\n shape.historyPosition = shape.pos;\r\n _self.store.shapes.push(shape);\r\n });\r\n // console.log('saved', _self.store.shapes);\r\n _self.store.exportData = window.exportData;\r\n };\r\n this.rememberConfig = function(cfg) {\r\n _self.store.cfg = cfg;\r\n };\r\n this.restoreShapesFromHistory = function() {\r\n // console.log('_self.store.shapes', _self.store.shapes);\r\n workspace.removeAllShapes();\r\n _self.store.shapes.forEach(function (newShape) {\r\n if (newShape.lines) {\r\n workspace.addShape(newShape.lines, newShape.shapeType, newShape.historyPosition, newShape.partId, newShape.layoutName);\r\n } else {\r\n workspace.addImage(\r\n newShape.historyProps.image,\r\n newShape.historyProps.width,\r\n newShape.historyProps.height,\r\n newShape.historyProps.attachedTo,\r\n newShape.historyProps.hoverShape,\r\n newShape.historyProps.type,\r\n newShape.historyProps.subType,\r\n newShape.historyProps.historyCallBack,\r\n newShape.historyPosition\r\n );\r\n }\r\n });\r\n _self.store.shapes.forEach(function (newShape) { // go again through all attached shapes and render lines text\r\n if (!newShape.lines) {\r\n newShape.historyProps.historyCallBack()\r\n }\r\n });\r\n // console.log('setted!', workspace.getShapes());\r\n Object.assign(_self.store.exportData, _self.store.cfg);\r\n setDataToQt(_self.store.exportData, true);\r\n setTimeout(function () {\r\n _self.store.exportData = window.exportData;\r\n }, 0);\r\n };\r\n // this.consoleShapesFromHistory = function() {\r\n // console.log('_self.store.shapes', _self.store.shapes);\r\n // };\r\n this.checkForChangesApplied = function () { // this is called after cancel click\r\n // console.log('_self.store.exportData', _self.store.exportData);\r\n // console.log('window.exportData',window.exportData);\r\n let currentShapes = workspace.getShapes();\r\n\r\n //if (_self.store.exportData && (JSON.stringify(_self.store.exportData) !== JSON.stringify(window.exportData))) {\r\n // return true; // check for exportData\r\n //}\r\n\r\n if (currentShapes.length !== _self.store.shapes.length) {\r\n return true; // check for appliances, etc.\r\n }\r\n\r\n let shapesChanged = false;\r\n\r\n workspace.getShapes().forEach(function (shape) { // go through each shape && check for its changes\r\n //if (!shape.attachedToShape && shape.type !== \"appliances\") {\r\n if (shape instanceof sqftShape) {\r\n\r\n var historyShape = _self.store.shapes.find(function (historyShapetoFind) {\r\n return historyShapetoFind.id === shape.id\r\n });\r\n\r\n if (!historyShape) {\r\n shapesChanged = true\r\n }\r\n\r\n shape.getLines().forEach(function (line, index) {\r\n if (historyShape && historyShape.lines && historyShape.lines[index] && JSON.stringify(line.getPointsFeatures()) !== JSON.stringify(historyShape.lines[index].historyPointFeatures)) {\r\n shapesChanged = true\r\n }\r\n });\r\n }\r\n });\r\n\r\n return shapesChanged || false\r\n }\r\n};\r\n","import {\r\n ALLOWED_LABEL_NAV_ITEMS, COUNTERTOP_LABELS,\r\n FEATURES_WITH_0_VALUE_FOR_THE_SLABS,\r\n MEASURE_UNITS,\r\n SHAPE_PART_ID,\r\n SQFT_FEATURES\r\n} from \"../../sqft/constants\";\r\nimport {\r\n FEATURE_STONE,\r\n getFeatureType,\r\n getFeatureUnit,\r\n getSlabUnit,\r\n calculateStoneCost,\r\n getRoomName, getSlabsFeatureGroup\r\n} from \"../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport store from \"../../../store\";\r\nimport sqftShapeManager from \"../../sqft/components/canvas/store/sqftShapeManager\";\r\nimport workspace from \"../../sqft/components/canvas/core/workspace\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {getNavItemsFromTheWizard, getWizardGroupsFromTheWizard} from \"../../sqft/helpers/sqftHelperUi\";\r\n//import {isFeatureUnitUseEach} from \"../../sqft/helpers/featureHelper\";\r\n\r\n/**\r\n * @param parentKey {string}\r\n * @param partId {string}\r\n * @param quoteIndex {number || null}\r\n * @returns featureGroup {object}\r\n */\r\nexport const getSimilarFeatureGroup = (parentKey, partId, quoteIndex = null) => {\r\n const state = store.getState();\r\n const quotes = state.quotesState.quotes;\r\n let room;\r\n let qtCategoryName;\r\n if (quoteIndex !== null && quotes[quoteIndex].room) {\r\n const activeQuote = quotes[quoteIndex];\r\n room = activeQuote.room;\r\n qtCategoryName = quotes[quoteIndex].qtCatName ? quotes[quoteIndex].qtCatName : getRoomNameInQuote(quoteIndex);\r\n }\r\n const layout = getCurrentLayout(room);\r\n if (!layout) {\r\n return null\r\n }\r\n\r\n let featureGroup = null;\r\n let neededPartId = partId;\r\n switch (parentKey) {\r\n case \"backsplashes\": {\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n featureGroup = layout.getSubPartFromQtCategories(\"backsplash\", qtCategoryName, true);\r\n if (!featureGroup && isBathroom) {\r\n featureGroup = layout.getSubPartFromQtCategories(SQFT_FEATURES.vanity_backsplash, qtCategoryName);\r\n }\r\n neededPartId = isBathroom ? SQFT_FEATURES.vanity_backsplash : \"backsplash\";\r\n break;\r\n }\r\n case \"edges\": {\r\n const mainNeeded = parentKey === \"center_island_countertop\" ? \"center_island_edge\" : \"edge_profile\";\r\n const oppositeNeeded = mainNeeded === \"center_island_edge\" ? \"edge_profile\" : \"center_island_edge\";\r\n featureGroup = layout.getSubPartFromQtCategories(mainNeeded, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded, qtCategoryName);\r\n }\r\n neededPartId = mainNeeded;\r\n break;\r\n }\r\n case SQFT_FEATURES.slabs: {\r\n featureGroup = getSlabsFeatureGroup();\r\n // let countertopsCategory = layout.qtCategories.find(qtCategory => {\r\n // return qtCategory.name === \"Countertops\" || qtCategory.name === \"Countertop\"\r\n // });\r\n //countertopsCategory = countertopsCategory === undefined ? layout.qtCategories[0] : countertopsCategory;\r\n\r\n //let subParts = countertopsCategory.subParts;\r\n //const subPartSlab = subParts.find(designNavigationItem => designNavigationItem.part.partId === SQFT_FEATURES.slabs);\r\n //if (!subPartSlab) {\r\n //subParts.splice(2, 0, featureGroup);\r\n //countertopsCategory.subParts = subParts;\r\n //}\r\n\r\n break;\r\n }\r\n case \"countertop\":\r\n case \"center_island_countertop\": {\r\n const oppositeNeeded = partId === \"center_island_countertop\" ? \"countertop\" : \"center_island_countertop\";\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories(oppositeNeeded, qtCategoryName);\r\n }\r\n break;\r\n }\r\n case \"corners\": {\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n if (!featureGroup) {\r\n featureGroup = layout.getSubPartFromQtCategories('radius', qtCategoryName);\r\n }\r\n break;\r\n }\r\n default:\r\n featureGroup = layout.getSubPartFromQtCategories(partId, qtCategoryName);\r\n break;\r\n }\r\n if (!featureGroup) {\r\n const foundGroup = layout.getFeatureGroupByPartId(neededPartId);\r\n if (foundGroup) {\r\n featureGroup = {part: foundGroup}\r\n }\r\n }\r\n return featureGroup\r\n};\r\n\r\n/**\r\n * @returns {string}\r\n */\r\nexport const getRoomNameInQuote = (quoteIndex) => {\r\n const state = store.getState();\r\n const {quotes} = state.quotesState;\r\n const fabricatorData = state.fabricatorState;\r\n const cartItems = state.cartState.cartItems;\r\n const intl = workspace.intl;\r\n\r\n return getRoomName(quoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData);\r\n}\r\n\r\n/**\r\n * @param {{}} parentsList\r\n * @returns {boolean}\r\n */\r\nexport const isRecalculateSlabNeeded = (parentsList) => {\r\n const useStonePricing = Object.keys(parentsList).some(parentKey => {\r\n if (!parentsList[parentKey] || !parentsList[parentKey].features) {\r\n return false\r\n }\r\n return parentsList[parentKey].features.some((sqftFeature) => {\r\n if (sqftFeature.feature && (FEATURE_STONE === getFeatureType(sqftFeature.feature.dbFeature))) { // dbFeature stone pricing algorithms related\r\n const {serverState, fabricatorState, cartState} = store.getState();\r\n // here we are checking if we should calculate algorithm or not\r\n // (if not - it should be counted as a regular feature, so it should be no grouping and included logic then)\r\n const stoneCost = calculateStoneCost(\r\n sqftFeature.feature.dbFeature,\r\n sqftFeature.initialQuantity,\r\n serverState.stonePricing,\r\n fabricatorState.stoneSupplier,\r\n false,\r\n fabricatorState.settings,\r\n cartState,\r\n );\r\n return !!stoneCost;\r\n }\r\n return false\r\n })\r\n })\r\n const useSlabImagePricing = parentsList.slabs.features.length > 0;\r\n\r\n return useStonePricing || useSlabImagePricing\r\n}\r\n\r\n/**\r\n * @param parentList {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const recalculateSlabs = (parentList, firstOpen = false) => {\r\n const state = store.getState();\r\n const fabricatorSettings = state.fabricatorState.settings;\r\n let updatedParentList;\r\n if (fabricatorSettings.useCategorySwitching) {\r\n updatedParentList = splitPriceBetweenSlabsMaterial(parentList); // will divide total price between shapes\r\n } else {\r\n updatedParentList = setPriceIntoSingleFeature(parentList, firstOpen); // will display included price\r\n }\r\n\r\n return updatedParentList;\r\n};\r\n\r\n/**\r\n * @param sqftFeatures {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const setPriceIntoSingleFeature = (sqftFeatures, firstOpen = false) => {\r\n let commonSharedFeatureNames = getCommonSharedFeatureNames(sqftFeatures); // {sharedName: \"\", totalQuantity: 0, biggestFeature, sqftFeatures: []}\r\n if (commonSharedFeatureNames.length) { // 2) set each feature new fake quantity\r\n commonSharedFeatureNames.forEach(sharedObject => {\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.isCaesarStone) {\r\n if (firstOpen) {\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.sortOrder = 1;\r\n } else {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n } else {\r\n //QCDES-1507 calculates slab algorithm pricing\r\n sqftFeature.displayFakeQuantity = sqftFeature.initialQuantity; // removed for CAESARSTONE, don't know about the others\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.quantity = sharedObject.totalQuantity; // removed for CAESARSTONE, don't know about the others\r\n if (firstOpen) {\r\n sqftFeature.sortOrder = 1;\r\n }\r\n sqftFeature.isBiggestFeature = true;\r\n } else {\r\n // removed for CAESARSTONE, don't know about the others\r\n sqftFeature.quantityRounded = 0;\r\n sqftFeature.quantity = 0;\r\n sqftFeature.isQuantityAddedToBiggestFeature = true;\r\n if (firstOpen) {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n }\r\n });\r\n });\r\n if (firstOpen) {\r\n sqftFeatures = sortSqftFeatures(sqftFeatures);\r\n }\r\n }\r\n console.log(\"commonSharedFeatureNames\", commonSharedFeatureNames);\r\n return sqftFeatures\r\n};\r\n\r\nconst createSqftFeaturesObj = () => {\r\n let sqftFeaturesObj = {};\r\n for (const availablePartIdsKey in SQFT_FEATURES) {\r\n sqftFeaturesObj[availablePartIdsKey] = {\r\n subPart: null,\r\n features: []\r\n }\r\n }\r\n\r\n return sqftFeaturesObj;\r\n}\r\n\r\n/**\r\n * @param sqftFeatures {object}\r\n * @param firstOpen {boolean}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport const splitPriceBetweenSlabsMaterial = (sqftFeatures, firstOpen = false) => {\r\n let commonSharedFeatureNames = getCommonSharedFeatureNames(sqftFeatures);\r\n if (commonSharedFeatureNames.length) {\r\n commonSharedFeatureNames.forEach(sharedObject => {\r\n sharedObject = sortSharedObject(sharedObject, firstOpen);\r\n updateSharedObjectWithGroupQuantity(sharedObject);\r\n });\r\n if (firstOpen) {\r\n sqftFeatures = sortSqftFeatures(sqftFeatures);\r\n }\r\n }\r\n console.log(\"commonSharedFeatureNames\", commonSharedFeatureNames);\r\n return sqftFeatures\r\n};\r\n\r\nconst sortSqftFeatures = (sqftFeatures) => {\r\n Object.keys(sqftFeatures).forEach(parentKey => {\r\n if (sqftFeatures[parentKey]\r\n && sqftFeatures[parentKey].features\r\n && parentKey !== \"edges\"\r\n ) {\r\n sqftFeatures[parentKey].features = sqftFeatures[parentKey].features.sort((a, b) => b.sortOrder - a.sortOrder);\r\n }\r\n })\r\n\r\n return sqftFeatures\r\n}\r\n/**\r\n * @return array of objects [{sharedName: string, totalQuantity: number, biggestFeature: feature, sqftFeatures: []}]\r\n */\r\nconst getCommonSharedFeatureNames = (sqftFeatures) => {\r\n let commonSharedFeatureNames = [];\r\n Object.keys(sqftFeatures).forEach(parentKey => { // 1) create common objects and find the biggest feature\r\n if (sqftFeatures[parentKey]\r\n && sqftFeatures[parentKey].features\r\n && parentKey !== \"edges\"\r\n && parentKey !== \"slabs\"\r\n ) {\r\n sqftFeatures[parentKey].features.forEach(sqftFeature => {\r\n if (sqftFeature.feature && Array.isArray(sqftFeature.feature.dbFeature.stonePricingId)\r\n && sqftFeature.feature.dbFeature.stonePricingId.length) {\r\n const alreadyAdded = commonSharedFeatureNames.find(sharedObject => {\r\n return sharedObject.sharedName === sqftFeature.feature.dbFeature.sharedFeatureName\r\n });\r\n if (!alreadyAdded) {\r\n commonSharedFeatureNames.push({\r\n sharedName: sqftFeature.feature.dbFeature.sharedFeatureName,\r\n totalQuantity: sqftFeature.disabled ? 0 : sqftFeature.initialQuantity,\r\n sqftFeatures: [sqftFeature],\r\n biggestFeature: sqftFeature.disabled ? null : sqftFeature,\r\n })\r\n } else {\r\n alreadyAdded.sqftFeatures.push(sqftFeature);\r\n if (!sqftFeature.disabled) {\r\n alreadyAdded.totalQuantity += sqftFeature.initialQuantity;\r\n if (!alreadyAdded.biggestFeature) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n } else if (sqftFeature.feature.partId === \"countertop\") {\r\n if (alreadyAdded.biggestFeature.partId !== \"countertop\" || (alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity)) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n } else if (sqftFeature.feature.partId === \"center_island_countertop\") {\r\n if ((alreadyAdded.biggestFeature.partId !== \"countertop\" && alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n || (alreadyAdded.biggestFeature.partId === \"center_island_countertop\" && alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity)) {\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n } else if ((alreadyAdded.biggestFeature.partId !== \"countertop\") && (alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n && alreadyAdded.biggestFeature.initialQuantity < sqftFeature.initialQuantity) { // backsplash\r\n alreadyAdded.biggestFeature = sqftFeature;\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n });\r\n\r\n return commonSharedFeatureNames\r\n}\r\n/**\r\n * set group price foreach sqftFeature inside sharedObject\r\n * @param sharedObject {object}\r\n * @returns sharedObject {object}\r\n */\r\nconst updateSharedObjectWithGroupQuantity = (sharedObject) => {\r\n const quantityPerFeature = sharedObject.totalQuantity / sharedObject.sqftFeatures.length;\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n const {fabricatorState} = store.getState();\r\n if (!fabricatorState.isCaesarStone) {\r\n sqftFeature.group = {\r\n quantityPerFeature: quantityPerFeature,\r\n totalFeaturesInGroup: sharedObject.sqftFeatures.filter(sqftFeature => !sqftFeature.disabled).length,\r\n totalQuantity: sharedObject.totalQuantity,\r\n }\r\n }\r\n });\r\n\r\n return sharedObject\r\n}\r\n\r\n/**\r\n * Returns sorted sharedObject\r\n * @param sharedObject {object}\r\n * @param firstOpen {boolean}\r\n * @returns sharedObject {object}\r\n */\r\nconst sortSharedObject = (sharedObject, firstOpen) => {\r\n sharedObject.sqftFeatures.forEach(sqftFeature => {\r\n if (firstOpen) {\r\n if (sharedObject.biggestFeature && (sqftFeature.sqftId === sharedObject.biggestFeature.sqftId)) {\r\n sqftFeature.sortOrder = 1;\r\n } else {\r\n sqftFeature.sortOrder = 0;\r\n }\r\n }\r\n });\r\n\r\n return sharedObject\r\n}\r\n\r\n/**\r\n * Returns needed for popup data\r\n * @param sqftPassedData {object} // it has sqftCalcData - data that comes from sqft\r\n * @param previouslyAddedSqftFeatures {object}\r\n * @param intl {object} // react intl instance\r\n * @param fabricatorData {object}\r\n * @param cartItems {array}\r\n * @param sqftFromFeature {object}\r\n * @param quoteIndex {number}\r\n * @param visualizerType {string}\r\n * @param stonePricing {object}\r\n * @returns sqftFeatures {object}\r\n */\r\nexport function getParsedSqftData (\r\n sqftPassedData,\r\n previouslyAddedSqftFeatures,\r\n intl,\r\n fabricatorData,\r\n cartItems,\r\n sqftFromFeature,\r\n quoteIndex,\r\n visualizerType,\r\n stonePricing,\r\n) {\r\n let sqftFeatures = createSqftFeaturesObj();\r\n\r\n if (!sqftPassedData || !sqftPassedData.countertops) {\r\n return sqftFeatures\r\n }\r\n\r\n const layout = getCurrentLayout(visualizerType);\r\n // const firstEdge = sqftPassedData.countertops ? sqftPassedData.countertops.filter(shape => shape.type === \"edge\")[0] : null\r\n // if (firstEdge) {\r\n // const featureGroup = getSimilarFeatureGroup(\"edges\", firstEdge.partId);\r\n // if (featureGroup) {\r\n // let navRequests = NavigationRequests();\r\n // await navRequests.checkIfAllFeaturesReceived(featureGroup, \"\", null)\r\n // }\r\n // }\r\n let isFromCartFeatureAdded = false;\r\n let feature = null;\r\n\r\n const state = store.getState();\r\n const isSlabPricingEnabled = state.sqftSlabState.isSlabPricingEnabled;\r\n\r\n Object.keys(sqftFeatures).forEach(parentKey => {\r\n const isCountertop = parentKey === \"countertop\" || parentKey === \"center_island_countertop\";\r\n let featuresPassed = [];\r\n\r\n // Skip adding slab features if slab pricing is disabled;\r\n if (parentKey === SQFT_FEATURES.slabs && !isSlabPricingEnabled) {\r\n return;\r\n }\r\n if (isCountertop) {\r\n featuresPassed = prepareCountertopFeaturesPassed(sqftPassedData, layout, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.slabs) {\r\n featuresPassed = prepareSlabFeaturesPassed(sqftPassedData.slabImagesTotalArea);\r\n } else if (parentKey === SQFT_FEATURES.edges || parentKey === SQFT_FEATURES.backsplashes) {\r\n let shapeType;\r\n switch (parentKey) {\r\n case \"edges\":\r\n shapeType = \"edge\";\r\n break;\r\n case \"backsplashes\":\r\n shapeType = \"backsplash\"\r\n break;\r\n default:\r\n shapeType = parentKey\r\n break;\r\n }\r\n\r\n if (sqftPassedData.manualCalculate) {\r\n featuresPassed = prepareEdgesAndBacksplashesManual(sqftPassedData, shapeType, featuresPassed);\r\n } else {\r\n featuresPassed = prepareEdgesAndBacksplashes(sqftPassedData, shapeType, featuresPassed);\r\n }\r\n\r\n // console.log(\"featuresPassed edges\", featuresPassed);\r\n // } else {\r\n // featuresPassed = sqftPassedData[parentKey]\r\n } else if (parentKey === SQFT_FEATURES.crown_molding) {\r\n featuresPassed = prepareCrownMoldings(sqftPassedData, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.handle && sqftPassedData.controllers && sqftPassedData.controllers.handles) {\r\n featuresPassed = prepareHandles(sqftPassedData.controllers.handles, parentKey);\r\n } else if (Object.values(ALLOWED_LABEL_NAV_ITEMS).includes(parentKey)) {\r\n featuresPassed = prepareOtherCountertops(sqftPassedData.countertops, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.radius) {\r\n featuresPassed = prepareRadius(sqftPassedData.radii, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.corners) {\r\n featuresPassed = prepareCorners(sqftPassedData.corners, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.underlayment && sqftPassedData.underlayment && sqftPassedData.underlayment.sections) {\r\n featuresPassed = prepareUnderlayment(sqftPassedData.underlayment.sections, parentKey);\r\n } else if (parentKey === SQFT_FEATURES.bumpouts && sqftPassedData.bumpouts) {\r\n featuresPassed = sqftPassedData.bumpouts\r\n }\r\n\r\n if (featuresPassed && featuresPassed.length) {\r\n featuresPassed.forEach(featurePassed => {\r\n const featureGroup = getSimilarFeatureGroup(parentKey, featurePassed.partId, quoteIndex);\r\n let isSqftFromFeature = false;\r\n let fromWizardGroupId = \"\";\r\n if (featureGroup) {\r\n if (!sqftFeatures[parentKey].subPart) {\r\n sqftFeatures[parentKey].subPart = featureGroup;\r\n }\r\n const quantity = getQuantityFromCalculator(parentKey, featurePassed, sqftPassedData);\r\n const displayFakePrice = getFakePriceFromCalculator(parentKey, featurePassed, sqftPassedData, cartItems, quoteIndex);\r\n //const displayFakeQuantity = getFakeQuantityFromCalculator(parentKey, featurePassed, sqftPassedData);\r\n [feature, isSqftFromFeature, isFromCartFeatureAdded, fromWizardGroupId] = getFeatureFromSQFT(\r\n featurePassed,\r\n previouslyAddedSqftFeatures,\r\n featureGroup,\r\n parentKey,\r\n quoteIndex,\r\n isCountertop,\r\n sqftFromFeature,\r\n cartItems,\r\n layout,\r\n isFromCartFeatureAdded,\r\n );\r\n\r\n let displayFakeQuantity = parentKey === SQFT_FEATURES.slabs ? featurePassed.totalSlabs : null;\r\n let displayFakeFeatureGroupName = parentKey === SQFT_FEATURES.slabs ? SQFT_FEATURES.slabs : null;\r\n const featureToCheckUnit = feature || featureGroup.part.features[0];\r\n const featureUnit = featureToCheckUnit ? getFeatureUnit(featureToCheckUnit, intl, fabricatorData, quantity) : \"\";\r\n const unit = parentKey === SQFT_FEATURES.slabs ? getSlabUnit(featurePassed.totalSlabs, intl) : featureUnit;\r\n\r\n sqftShapeManager.setShapeFeature(featurePassed.id, feature);\r\n sqftFeatures[parentKey].features.push({\r\n disabled: featurePassed.isDisabledInPopup || false, //previouslyAddedSqftFeature ? previouslyAddedSqftFeature.disabled : false,\r\n feature,\r\n displayFakeFeatureGroupName,\r\n partId: featurePassed.partId,\r\n unit,\r\n subPart: featureGroup,\r\n //quantity: isFeatureUnitUseEach(feature) ? 1 : quantity,\r\n quantity: quantity,\r\n quantityRounded: Math.ceil(quantity),\r\n displayFakeQuantity: displayFakeQuantity,\r\n displayFakePrice,\r\n initialQuantity: quantity,\r\n sqftId: featurePassed.id,\r\n qtCatName: featurePassed.qtCatName,\r\n isSqftFromFeature,\r\n fromWizardGroupId,\r\n shouldShowEyeBall: featurePassed.shouldShowEyeBall !== undefined ? featurePassed.shouldShowEyeBall : true,\r\n shouldUseSlabPricing: featurePassed.shouldUseSlabPricing,\r\n })\r\n } else {\r\n console.log(\"No feature group added to the QuotingTool\", parentKey, featurePassed.partId);\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (isSlabPricingEnabled && isRecalculateSlabNeeded(sqftFeatures)) {\r\n sqftFeatures = recalculateSlabs(sqftFeatures, true);\r\n console.log(\"stonePricing\", stonePricing);\r\n console.log(\"fabricatorData.pricingPreset\", fabricatorData.pricingPreset);\r\n }\r\n\r\n console.log(\"sqftFeatures\", sqftFeatures);\r\n return sqftFeatures\r\n}\r\n\r\n/**\r\n * Returns prepared slabFeatures that comes from sqft\r\n * @param slabImagesGrouped {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareSlabFeaturesPassed = (slabImagesGrouped) => {\r\n let featuresPassed = [];\r\n slabImagesGrouped\r\n .forEach(slabImagesGroup => {\r\n const quantity = Math.ceil(slabImagesGroup.totalArea);\r\n featuresPassed.push(Object.assign({...slabImagesGroup}, {\r\n partId: SQFT_FEATURES.slabs,\r\n squareFeet: quantity,\r\n pricePerArea: slabImagesGroup.pricePerArea,\r\n shouldUseSlabPricing: slabImagesGroup.shouldUseSlabPricing,\r\n }));\r\n });\r\n\r\n return featuresPassed;\r\n}\r\n\r\n/**\r\n * Returns prepared countertops that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param layout {object} // layout\r\n * @param parentKey {string} // parentKey\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareCountertopFeaturesPassed = (sqftPassedData, layout, parentKey) => {\r\n const countertopExist = layout.getSubPartFromQtCategories(\"countertop\");\r\n const centerIslandExist = layout.getSubPartFromQtCategories(\"center_island_countertop\");\r\n let featuresPassed = []\r\n if (sqftPassedData.manualCalculate) {\r\n featuresPassed = sqftPassedData.countertops\r\n .filter(manCountertopObject => manCountertopObject.partId === parentKey)\r\n .map(manCountertopObject => {\r\n return {\r\n id: manCountertopObject.id,\r\n squareFeet: manCountertopObject.area,\r\n partId: manCountertopObject.partId\r\n }\r\n })\r\n } else if (sqftPassedData.countertops && sqftPassedData.countertops.length) {\r\n featuresPassed = sqftPassedData.countertops.filter(shape => {\r\n if (shape.partId === \"countertop\" || shape.partId === \"center_island_countertop\") {\r\n if (countertopExist && !centerIslandExist) {\r\n shape.partId = countertopExist.part.partId;\r\n } else if (centerIslandExist && !countertopExist) {\r\n shape.partId = centerIslandExist.part.partId;\r\n }\r\n }\r\n\r\n return shape.shapeType && (shape.partId === parentKey)\r\n && ![\"backsplash\", SHAPE_PART_ID.seamPiece, SHAPE_PART_ID.slabPlaceHolder].includes(shape.type)\r\n })\r\n }\r\n\r\n return featuresPassed;\r\n}\r\n\r\n/**\r\n * Returns other prepared countertops that comes from sqft\r\n * @param sqftPassedDataCountertops {object} // data that comes from sqft\r\n * @param parentKey {string} // parentKey\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareOtherCountertops = (sqftPassedDataCountertops, parentKey) => {\r\n return sqftPassedDataCountertops\r\n .filter(manCountertopObject => manCountertopObject.partId === parentKey)\r\n .map(manCountertopObject => {\r\n return {\r\n id: manCountertopObject.id,\r\n squareFeet: manCountertopObject.squareFeet,\r\n partId: manCountertopObject.partId,\r\n qtCatName: manCountertopObject.qtCatName,\r\n featureId: manCountertopObject.featureId,\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other prepared radius's that comes from sqft\r\n * @param sqftPassedDataRadius {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareRadius = (sqftPassedDataRadius) => {\r\n return sqftPassedDataRadius\r\n .filter(radiusObject => radiusObject.featureId !== null)\r\n .map(radiusObject => {\r\n return {\r\n id: radiusObject.id,\r\n qtCatName: radiusObject.qtCatName,\r\n partId: SQFT_FEATURES.radius,\r\n featureId: radiusObject.featureId,\r\n quantity: 1\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other prepared Handlers that comes from sqft\r\n * @param sqftPassedDataHandler {object} // data that comes from sqft\r\n * @param parentKey {string}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareHandles = (sqftPassedDataHandler, parentKey) => {\r\n return sqftPassedDataHandler\r\n .filter(handlerObject => handlerObject.featureId !== null)\r\n .map(radiusObject => {\r\n return {\r\n id: radiusObject.id,\r\n qtCatName: radiusObject.qtCatName,\r\n partId: parentKey,\r\n featureId: radiusObject.featureId,\r\n quantity: 1\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other prepared corner's that comes from sqft\r\n * @param sqftPassedDataRadius {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareCorners = (sqftPassedDataRadius) => {\r\n return sqftPassedDataRadius\r\n .filter(radiusObject => radiusObject.featureId !== null)\r\n .map(radiusObject => {\r\n return {\r\n id: radiusObject.id,\r\n qtCatName: radiusObject.qtCatName,\r\n partId: SQFT_FEATURES.corners,\r\n featureId: radiusObject.featureId,\r\n quantity: 1\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns other prepared corner's that comes from sqft\r\n * @param sqftPassedDataUnderlayment {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareUnderlayment = (sqftPassedDataUnderlayment) => {\r\n return sqftPassedDataUnderlayment\r\n //.filter(passedData => passedData.featureId !== null)\r\n .map(passedData => {\r\n return {\r\n id: passedData.id,\r\n partId: SQFT_FEATURES.underlayment,\r\n featureId: passedData.featureId,\r\n qtCatName: passedData.qtCatName,\r\n quantity: passedData.quantity\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Parse quantity from sqft // todo rewrite and remove this\r\n * @param parentKey {object} // data that comes from sqft\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @returns featuresPassed [array]\r\n */\r\nconst getQuantityFromCalculator = (parentKey, featurePassed, sqftPassedData) => {\r\n let quantity;\r\n switch (parentKey) {\r\n case \"edges\":\r\n case \"backsplashes\":\r\n case SQFT_FEATURES.crown_molding:\r\n quantity = sqftPassedData.measureUnit === MEASURE_UNITS.Metric\r\n ? +(+(featurePassed.length).toFixed(3)).toFixed(2)\r\n : featurePassed.length\r\n break\r\n case SQFT_FEATURES.radius:\r\n case SQFT_FEATURES.corners:\r\n case SQFT_FEATURES.handle:\r\n case SQFT_FEATURES.underlayment:\r\n quantity = featurePassed.quantity;\r\n break\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"slabs\":\r\n quantity = featurePassed.squareFeet;\r\n break\r\n default:\r\n if (Object.keys(COUNTERTOP_LABELS).includes(parentKey)) {\r\n quantity = featurePassed.squareFeet;\r\n } else {\r\n quantity = featurePassed.quantity ? featurePassed.quantity : featurePassed.squareFeet;\r\n }\r\n }\r\n\r\n return quantity\r\n}\r\n\r\n/**\r\n * Prepare Edges and Backsplashes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @param featuresPassed {array}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareEdgesAndBacksplashes = (sqftPassedData, shapeType, featuresPassed) => {\r\n sqftPassedData.countertops\r\n .filter(shape => shape.type === shapeType)\r\n .forEach(edge => {\r\n const length = edge.length || edge.squareFeet;\r\n featuresPassed.push(Object.assign(\r\n edge, {\r\n partId: edge.partId || shapeType,\r\n fromWizardGroupId: edge.fromWizardGroupId, //todo[Anton] this one is not passing here\r\n length: length,\r\n qtCatName: edge.qtCatName,\r\n featureId: edge.backsplashFeatureId ? edge.backsplashFeatureId : edge.featureId,\r\n shouldShowEyeBall: edge.shouldShowEyeBall !== undefined ? edge.shouldShowEyeBall : true,\r\n }));\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * Prepare CrownMoldings from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareCrownMoldings = (sqftPassedData, shapeType) => {\r\n const featuresPassed = [];\r\n sqftPassedData.countertops\r\n .filter(shape => shape.type === shapeType)\r\n .forEach(crownMolding => {\r\n const length = crownMolding.length || crownMolding.squareFeet;\r\n featuresPassed.push(Object.assign(\r\n crownMolding, {\r\n partId: crownMolding.partId || shapeType,\r\n length: length,\r\n qtCatName: crownMolding.qtCatName,\r\n }));\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * Prepare Edges and Backsplashes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param shapeType {string}\r\n * @param featuresPassed {array}\r\n * @returns featuresPassed [array]\r\n */\r\nconst prepareEdgesAndBacksplashesManual = (sqftPassedData, shapeType, featuresPassed) => {\r\n let sqftData = [];\r\n switch (shapeType) {\r\n case \"edge\":\r\n sqftData = sqftPassedData.edges;\r\n break\r\n case \"backsplash\":\r\n sqftData = sqftPassedData.backsplashes;\r\n break\r\n }\r\n sqftData\r\n .forEach(edge => {\r\n const edgeLength = edge.length;\r\n const alreadyAdded = featuresPassed.find(addedEdge => {\r\n return addedEdge.attachedToParentId && (addedEdge.featureId === edge.featureId)\r\n });\r\n if (alreadyAdded) {\r\n alreadyAdded.length += edgeLength;\r\n } else {\r\n featuresPassed.push(Object.assign(edge, {featureId: edge.featureId, partId: edge.partId, length: edgeLength}));\r\n }\r\n });\r\n\r\n return featuresPassed\r\n}\r\n\r\n/**\r\n * //todo it is better to rewrite this fake price logic and calculate the price right in the cart\r\n * Get fake price for display\r\n * @param parentKey {object} // data that comes from sqft\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param sqftPassedData {object} // data that comes from sqft\r\n * @param cartItems\r\n * @param quoteIndex\r\n * @returns featuresPassed [array]\r\n */\r\nconst getFakePriceFromCalculator = (parentKey, featurePassed, sqftPassedData, cartItems, quoteIndex) => {\r\n let fakePrice ;\r\n /** If the number of slabs is greater than one, set the price of all other materials to zero, as only the cost of slabs will be calculated. */\r\n if (FEATURES_WITH_0_VALUE_FOR_THE_SLABS[parentKey]) {\r\n const slabAlreadyInTheCart = cartItems.find(cartItem => {\r\n return (cartItem.sqftId) && (cartItem.partId === SQFT_FEATURES.slabs) && (cartItem.currentQuote === quoteIndex)\r\n })\r\n if (sqftPassedData.slabImagesTotalArea.length > 0 || slabAlreadyInTheCart) {\r\n const activeSlabsExist = sqftPassedData.slabImagesTotalArea.some(slabImageAreaGroup => !slabImageAreaGroup.isDisabledInPopup);\r\n if (activeSlabsExist) {\r\n fakePrice = 0;\r\n }\r\n }\r\n /** Applying the hardcoded price for slabs, which was set in the slab popup. */\r\n } else if (parentKey === SQFT_FEATURES.slabs) {\r\n if (featurePassed.pricePerArea) {\r\n fakePrice = parseFloat(featurePassed.pricePerArea) * getQuantityFromCalculator(parentKey, featurePassed, sqftPassedData);\r\n }\r\n }\r\n\r\n return fakePrice\r\n}\r\n\r\n/**\r\n * Returns parse sqft passed feature id and returns feature or null\r\n * @param featurePassed {object} // data that comes from sqft\r\n * @param parentKey {string} //\r\n * @param featureGroup {object} featureGroup\r\n * @param layout {object}\r\n * @returns feature {object}\r\n */\r\nconst getFeatureFromCalculatorPassedId = (featurePassed, parentKey, featureGroup, layout) => {\r\n let feature = null;\r\n let idToFind = null;\r\n switch (parentKey) {\r\n case \"edges\":\r\n case \"backsplashes\":\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"slabs\":\r\n case SHAPE_PART_ID.slabPlaceHolder:\r\n idToFind = +featurePassed.featureId;\r\n break\r\n default:\r\n idToFind = featurePassed.featureId ? featurePassed.featureId: null;\r\n }\r\n if (idToFind) {\r\n feature = layout.getFeatureById(idToFind, true);\r\n if (!feature && featurePassed.slabParentPartId) {\r\n const slabParentFeatureGroup = layout.getFeatureGroupByPartId(featurePassed.slabParentPartId);\r\n if (slabParentFeatureGroup) {\r\n feature = slabParentFeatureGroup.getFeatureById(featurePassed.featureId, true);\r\n }\r\n }\r\n if (!feature && featurePassed.partId) {\r\n const slabParentFeatureGroup = layout.getFeatureGroupByPartId(featurePassed.partId);\r\n if (slabParentFeatureGroup) {\r\n feature = slabParentFeatureGroup.getFeatureById(featurePassed.featureId, true);\r\n }\r\n }\r\n // const navFeatures = getNavItems(featureGroup);//layout.designNavigationItems(featureGroup, {}, \"\", false, true);\r\n //\r\n // const navFeature = navFeatures.find(navItem => navItem.part.dbFeature.id === idToFind);\r\n // if (navFeature) {\r\n // feature = navFeature.part;\r\n // } else if (parentKey === \"slabs\") {\r\n // feature = layout.getFeatureById(idToFind);\r\n // } else if (parentKey === \"top_cabinet\" || parentKey === \"bottom_cabinet\") {\r\n // feature = layout.getFeatureById(idToFind, true);\r\n // }\r\n }\r\n\r\n return feature;\r\n}\r\n\r\n/**\r\n * Returns parse sqft passed feature id and returns feature or null\r\n * @param featurePassed {object} // data that comes from sqft\r\n // * @param previouslyAddedSqftFeatures {object} //\r\n * @param previouslyAddedSqftFeatures\r\n * @param featureGroup {object} //\r\n * @param parentKey {string} //\r\n * @param activeQuoteIndex {number} //\r\n * @param isCountertop {boolean} //\r\n * @param sqftFromFeature {object} //\r\n * @param cartItems {object} //\r\n * @param layout {object} //\r\n * @param isFromCartFeatureAdded {boolean} //\r\n * @returns feature {object}\r\n */\r\nconst getFeatureFromSQFT = (\r\n featurePassed,\r\n previouslyAddedSqftFeatures,\r\n featureGroup,\r\n parentKey,\r\n activeQuoteIndex,\r\n isCountertop,\r\n sqftFromFeature,\r\n cartItems,\r\n layout,\r\n isFromCartFeatureAdded,\r\n) => {\r\n let isSqftFromFeature = false;\r\n const previouslyAddedSqftFeature = previouslyAddedSqftFeatures.find(existing => {\r\n return featurePassed.id && (existing.sqftId === featurePassed.id) && (existing.currentQuote === activeQuoteIndex)\r\n });\r\n let feature = getFeatureFromCalculatorPassedId(featurePassed, parentKey, featureGroup, layout);\r\n\r\n if (cartItems.length && !feature) {\r\n const alreadyAdded = cartItems.find(cartItem => {\r\n return (cartItem.sqftId) && (cartItem.sqftId === featurePassed.id) && (cartItem.currentQuote === activeQuoteIndex)\r\n })\r\n const hasSamePartIdWithCartFeature = alreadyAdded && featureGroup.part.partId === alreadyAdded.cartFeature.partId\r\n if (hasSamePartIdWithCartFeature) {\r\n feature = alreadyAdded.cartFeature;\r\n }\r\n }\r\n\r\n const hasSamePartIdWithPreviouslyAddedFeature = previouslyAddedSqftFeature && previouslyAddedSqftFeature.partId === featureGroup.part.partId\r\n if (!feature && hasSamePartIdWithPreviouslyAddedFeature) {\r\n feature = previouslyAddedSqftFeature.feature;\r\n }\r\n if (!feature && (isCountertop || parentKey === \"backsplashes\") && sqftFromFeature\r\n && (sqftFromFeature.cartFeature.partId === featureGroup.part.partId)) {\r\n feature = sqftFromFeature.cartFeature;\r\n if (!isFromCartFeatureAdded) {\r\n isSqftFromFeature = true;\r\n }\r\n isFromCartFeatureAdded = true;\r\n }\r\n\r\n const state = store.getState();\r\n const {wizardActiveItem, wizardIsActive} = state.wizardState;\r\n\r\n let fromWizardGroupId = featurePassed.fromWizardGroupId;\r\n\r\n if (!fromWizardGroupId && wizardIsActive && wizardActiveItem) {\r\n const featureGroup = layout.getFeatureGroupByPartId(featurePassed.partId);\r\n if (featureGroup) {\r\n const wizardSteps = getWizardGroupsFromTheWizard(featureGroup.dbName || featureGroup.partName);\r\n if (wizardSteps.length) {\r\n // we don't set it to featurePassed, as we need to have all navItems in the dropdown, here we just find\r\n // at least something from the wizard\r\n fromWizardGroupId = wizardSteps[0].stepGroups[0].id;\r\n }\r\n }\r\n }\r\n\r\n const allNavItems = fromWizardGroupId\r\n ? getNavItemsFromTheWizard(featureGroup, \"\", {}, fromWizardGroupId)\r\n : layout.designNavigationItems(featureGroup, {}, \"\", false, true);\r\n\r\n // console.log(\"allNavItems\", allNavItems);\r\n\r\n if (!feature && sqftFromFeature && (\r\n ((parentKey === \"backsplashes\") && sqftFromFeature.cartFeature.partId.includes(\"countertop\"))\r\n || (isCountertop && sqftFromFeature.cartFeature.partId.includes(\"backsplash\"))\r\n || (isCountertop && sqftFromFeature.cartFeature.partId.includes(\"countertop\")\r\n && featureGroup.part.partId !== sqftFromFeature.cartFeature.partId) // case if 2 countertops\r\n )) {\r\n const name1 = sqftFromFeature.cartFeature.getSplittedFeatureName();\r\n const navItem = allNavItems.find(navItem => {\r\n return navItem.part.getSplittedFeatureName() === name1;\r\n });\r\n if (navItem) {\r\n feature = navItem.part;\r\n }\r\n }\r\n if (!feature && featureGroup.part.activeFeature && (!fromWizardGroupId || allNavItems.some(navItem => {\r\n return navItem.part.dbFeature.sharedFeatureName === featureGroup.part.activeFeature.dbFeature.sharedFeatureName\r\n }))) {\r\n feature = featureGroup.part.activeFeature;\r\n }\r\n if (!feature && featurePassed.featureId) {\r\n // we added a real feature with id - go and find it - cases when we load feature from different visualizer\r\n const allNavItems2 = layout.designNavigationItems(featureGroup, {}, \"\", false, \"all\", [], {returnAllFeatures: true});\r\n const foundNavItem = allNavItems2.find(nItem => nItem.part.dbFeature.id === featurePassed.featureId);\r\n if (foundNavItem) {\r\n feature = foundNavItem.part;\r\n }\r\n }\r\n if (!feature && allNavItems.length) {\r\n feature = allNavItems[0].part;\r\n }\r\n\r\n return [feature, isSqftFromFeature, isFromCartFeatureAdded, featurePassed.fromWizardGroupId];\r\n}\r\n","import {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nconst QtCategoryName = (props) => {\r\n\r\n const {qtCategoryName, intl, fabricatorData} = props;\r\n\r\n return getQtCategoryName(qtCategoryName, intl, fabricatorData)\r\n};\r\n\r\nQtCategoryName.propTypes = {\r\n qtCategoryName: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(QtCategoryName)\r\n)\r\n\r\nexport const getQtCategoryName = (qtCategoryName, intl, fabricatorData) => {\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.customDisplayName_FR.\" + qtCategoryName]) {\r\n return intl.formatMessage({id: \"transDoc.customDisplayName_FR.\" + qtCategoryName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customTranslateName_PL.\" + qtCategoryName]) {\r\n return intl.formatMessage({id: \"transDoc.customTranslateName_PL.\" + qtCategoryName})\r\n }\r\n }\r\n\r\n return qtCategoryName\r\n}\r\n","//********* FILTERS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const setAvailableFilterValues = (availableFilterValues) => ({\r\n type: types.SET_AVAILABLE_FILTER_VALUES,\r\n payload: {availableFilterValues}\r\n});\r\n\r\nexport const updateFiltersCount = () => ({\r\n type: types.UPDATE_FILTERS_COUNT\r\n})\r\n","import workspace from \"../workspace\";\r\n//import Point from \"../shapes/point\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getIntersectCordsBetweenLines,\r\n getMidPoint,\r\n getMousePositionOnField,\r\n getPointDistance,\r\n getPointOnTheLine, inchesToMm, mmToInches, parseImperialFractionToDecimal,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport ShapeHelper, {getCountertopPartNames, getLineLengthNumberText} from \"../../../../helpers/shapeHelper\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport {createShapeFromPoints, createWallFromPointsV2} from \"../../../../helpers/freeDrawHelper\";\r\nimport NumberText from \"../workspace/text/numberText\";\r\nimport store from \"../../../../../../store\";\r\nimport {setSQFTActiveButton, setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport RenderFreeDraw from \"../../helpers/renderFreeDraw\";\r\nimport COLOR_THEMES, {COLORS} from \"../../../../../../colorThemes\";\r\nimport {FREE_DRAW_TYPE, MEASURE_UNITS, SIDEBAR_NAVIGATION_CABINET_BUTTONS} from \"../../../../constants\";\r\nimport {getWallLockedPoint, getWallPoint} from \"../../helpers/wallHelper\";\r\nimport {getFreeDrawPoint, getLockedPoint, getLockPointPos} from \"../../helpers/freeDrawHelper\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {\r\n isBackspaceKeyCode,\r\n isDeleteKeyCode,\r\n isLengthKeyCode,\r\n} from \"../../../../helpers/keyboardHelper\";\r\n\r\nconst MIN_DISTANCE_BETWEEN_POINTS = 1\r\n\r\nconst FreeDraw = function() {\r\n let state = {\r\n isDrawFinished: false,\r\n addedPoints: [],\r\n dimensions: [],\r\n dimensionToMouse: null,\r\n drawLineToMouse: false,\r\n lineWidth: 2,\r\n lineColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n outlineColor: COLOR_THEMES[sqftConfig.activeTheme].primary,\r\n minLineLength: 15,\r\n drawType: FREE_DRAW_TYPE.shape,\r\n useLockedPoints: true,\r\n currentNumericInput: \"\",\r\n lockedAngleStep: 45\r\n };\r\n\r\n this.clickedBackSplashButton = null;\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n this.getState = () => state\r\n\r\n const onMouseMove = (mousePos, e) => {\r\n void e;\r\n\r\n if (state.addedPoints.length > 0) {\r\n state.drawLineToMouse = true;\r\n\r\n if (!state.dimensionToMouse) {\r\n this.createDimensionToMouse();\r\n }\r\n this.updateMeasurementToMousePosition(mousePos);\r\n }\r\n\r\n if (state.currentNumericInput.length >= 1 ) {\r\n state.currentNumericInput = \"\";\r\n }\r\n }\r\n\r\n const onKeyDown = (code, e) => {\r\n if (window.lineInputFocused) {\r\n return false;\r\n }\r\n\r\n if (isLengthKeyCode(e)) {\r\n const newValue = state.currentNumericInput + e.key;\r\n\r\n if (newValue !== null) {\r\n state.currentNumericInput = newValue;\r\n state.dimensionToMouse.value = newValue;\r\n }\r\n console.log(\"currentNumericInput\", state.currentNumericInput);\r\n return true;\r\n }\r\n\r\n if (isBackspaceKeyCode(e) || isDeleteKeyCode(e)) {\r\n state.currentNumericInput = state.currentNumericInput.slice(0, -1);\r\n state.dimensionToMouse.value = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? mmToInches(state.currentNumericInput)\r\n : state.currentNumericInput;\r\n console.log(\"currentNumericInput\", state.currentNumericInput);\r\n return true;\r\n }\r\n\r\n if (code === EventManager.keyCode.ENTER || code === EventManager.keyCode.NumpadEnter) {\r\n if (state.addedPoints.length > 0 && state.currentNumericInput) {\r\n this.createPointFromCurrentNumericInput();\r\n } else {\r\n state.isDrawFinished = true;\r\n this.drawFinish();\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const onMouseDown = (mousePos) => {\r\n // var hoverPoint = workspace.getHoverPoint();\r\n // var hoverShape = workspace.getHoverShape();\r\n // if (hoverPoint || hoverShape) {\r\n // return true; // return true; // block all mouse-down events // we need dragging workspace\r\n // }\r\n state.currentNumericInput = \"\";\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n //todo pointV2 priority should be higher\r\n // const hoverPoint = workspace.getHoverPointV2();\r\n // const wall = WallsManager.getWallByPoint(hoverPoint);\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n this.drawWall(mousePos);\r\n return true;\r\n }\r\n };\r\n\r\n const onMouseUp = (mousePos) => {\r\n void mousePos;\r\n\r\n // this.checkForRestoreCursor();\r\n //\r\n // var hoverPoint = workspace.getHoverPoint();\r\n // var hoverShape = workspace.getHoverShape();\r\n // if (hoverPoint && !hoverPoint.angleIsChanged) {\r\n //\r\n // if (this.arcLength) {\r\n // hoverPoint.arcLength = this.arcLength;\r\n // hoverPoint.angle = 0;\r\n // } else if (this.angle) {\r\n // hoverPoint.angle = this.angle;\r\n // hoverPoint.arcLength = 0;\r\n // }\r\n // return true;\r\n // } else if (hoverShape) {\r\n // Menu.openMenu();\r\n // return true; // if click on shape, block reseting cursor, because we still need it http://jira.mozidev.com/browse/QC-956\r\n // }/* else {\r\n // deregisterEvents();\r\n // elements.designDefault.click();\r\n // }*/\r\n };\r\n\r\n this.createPointFromCurrentNumericInput = () => {\r\n const mousePos = sqftEventManager.getMousePos();\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n let distance = parseImperialFractionToDecimal(state.currentNumericInput);\r\n distance = config.measureUnit === \"Imperial\" ? distance : mmToInches(distance);\r\n let newPoint;\r\n if (state.useLockedPoints && this.isPointExist()) {\r\n newPoint = getLockedPoint(lastPoint, mousePos, state.lockedAngleStep);\r\n } else {\r\n newPoint = getFreeDrawPoint(mousePos);\r\n }\r\n\r\n //we take full distance and subtract existing point distance from it.\r\n const segmentLength = getPointDistance(newPoint, lastPoint);\r\n const newCordsAtDistance = getPointOnTheLine(newPoint, lastPoint, distance - segmentLength);\r\n newPoint.setPosition(newCordsAtDistance);\r\n this.drawStart(mousePos, newPoint);\r\n }\r\n\r\n this.updateMeasurementToMousePosition = (mousePos) => {\r\n if (state.addedPoints.length > 0) {\r\n const mPosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n const distance = getPointDistance(mPosOnField, lastPoint);\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n let midPoint;\r\n\r\n if (isWallsLockMode && activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n const lockedPointPos = getLockPointPos(lastPoint);\r\n const lockPointOnField = getMousePositionOnField(lockedPointPos.x, lockedPointPos.y);\r\n midPoint = getMidPoint(lockPointOnField, lastPoint);\r\n state.dimensionToMouse.pos.betweenPoints.pointTo = lockPointOnField\r\n } else {\r\n if (state.useLockedPoints) {\r\n const lockedPointPos = getLockPointPos(lastPoint, state.lockedAngleStep);\r\n const lockPointOnField = getMousePositionOnField(lockedPointPos.x, lockedPointPos.y);\r\n midPoint = getMidPoint(lockPointOnField, lastPoint);\r\n } else {\r\n midPoint = getMidPoint(mPosOnField, lastPoint);\r\n }\r\n\r\n state.dimensionToMouse.pos.betweenPoints.pointTo = getMousePositionOnField(mousePos.x, mousePos.y);\r\n }\r\n state.dimensionToMouse.pos.betweenPoints.pointFrom = lastPoint;\r\n state.dimensionToMouse.pos.x = midPoint.x;\r\n state.dimensionToMouse.pos.y = midPoint.y;\r\n state.dimensionToMouse.value = sqftConfig.measureUnit === MEASURE_UNITS.Metric ? inchesToMm(distance) : distance;\r\n\r\n // console.log(\"state.dimensionToMouse\", state.dimensionToMouse);\r\n // debugger // eslint-disable-line no-debugger\r\n }\r\n }\r\n\r\n this.init = function() {\r\n if (!state.isInited) {\r\n state.isInited = true;\r\n this.createDimensionToMouse();\r\n this.registerEvents();\r\n }\r\n };\r\n\r\n this.createDimensionToMouse = () => {\r\n state.dimensionToMouse = new NumberText(\r\n 0,\r\n {x: 0, y: 0},\r\n {shouldRenderFrameBorder: true, isLength: false},\r\n workspace,\r\n Function(),\r\n true\r\n );\r\n }\r\n\r\n this.registerEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SHAPE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.IMAGE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.KEYDOWN,\r\n onKeyDown,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.hide = function(e) {\r\n if (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n EventManager.resetCursor(this);\r\n EventManager.removeEvent(this);\r\n state.isInited = false\r\n }\r\n\r\n this.destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n EventManager.removeEvent(this, EventManager.events.RENDER);\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n this.hide();\r\n };\r\n\r\n const checkIfFirstPointHovered = () => {\r\n return state.addedPoints.length > 2 && state.addedPoints[0].modelCorePoint.mixins.movable.isHovering();\r\n }\r\n // const checkIfLastPointHovered = () => {\r\n // return state.addedPoints.length > 2 && state.addedPoints[state.addedPoints.length - 1].modelCorePoint.mixins.movable.isHovering();\r\n // }\r\n const checkIfThisIsSecondPoint = () => {\r\n return state.addedPoints.length === 1;\r\n }\r\n\r\n this.isPointExist = () => {\r\n return state.addedPoints.length >= 1;\r\n }\r\n\r\n this.isFitDistanceWithLastPoint = (point) => {\r\n if (state.addedPoints.length < 1) {\r\n return true\r\n }\r\n const distance = getPointDistance(point, state.addedPoints[state.addedPoints.length - 1]);\r\n\r\n return distance > MIN_DISTANCE_BETWEEN_POINTS\r\n }\r\n this.isMousePosFitDistanceWithLastPoint = (mousePos) => {\r\n const mousePosOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n return this.isFitDistanceWithLastPoint(mousePosOnField);\r\n }\r\n this.isFitDistanceWithLastPoint = (point) => {\r\n if (state.addedPoints.length < 1) {\r\n return true\r\n }\r\n const distance = getPointDistance(point, state.addedPoints[state.addedPoints.length - 1]);\r\n\r\n return distance > MIN_DISTANCE_BETWEEN_POINTS\r\n }\r\n\r\n this.initDraw = (useLockedPoints) => {\r\n state.useLockedPoints = useLockedPoints\r\n }\r\n\r\n this.drawShape = (mousePos) => {\r\n if (checkIfFirstPointHovered()) {\r\n this.drawFinish();\r\n return;\r\n }\r\n\r\n let point;\r\n if (state.useLockedPoints && this.isPointExist()) {\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n point = getLockedPoint(lastPoint, mousePos, state.lockedAngleStep);\r\n } else {\r\n point = getFreeDrawPoint(mousePos);\r\n }\r\n\r\n this.drawStart(mousePos, point);\r\n }\r\n\r\n this.drawWall = (mousePos) => {\r\n state.lineWidth = 10;\r\n state.lineColor = COLORS.gray;\r\n state.outlineColor = COLORS.gray4;\r\n state.drawType = FREE_DRAW_TYPE.wall\r\n if (checkIfThisIsSecondPoint()) {\r\n const wallPointLocked = getWallLockedPoint(state.addedPoints[0], mousePos, state.lockedAngleStep);\r\n this.drawStart(mousePos, wallPointLocked);\r\n this.drawFinish();\r\n } else {\r\n const wallPoint = getWallPoint(mousePos);\r\n this.drawStart(mousePos, wallPoint);\r\n }\r\n };\r\n\r\n this.drawStart = (mousePos, pointV2) => {\r\n if (state.isDrawFinished || !this.isMousePosFitDistanceWithLastPoint(mousePos)) {\r\n return\r\n }\r\n\r\n if (state.addedPoints.length > 0) {\r\n this.addLineDimensions(pointV2);\r\n }\r\n state.addedPoints.push(pointV2);\r\n state.dimensionToMouse ? state.dimensionToMouse.destroy() : null;\r\n state.dimensionToMouse = null;\r\n };\r\n\r\n this.addLineDimensions = (pointTo) => {\r\n //const prevPoint = state.addedPoints[state.addedPoints.length - 2];\r\n const pointFrom = state.addedPoints[state.addedPoints.length - 1];\r\n const numberText = getLineLengthNumberText(pointFrom, pointTo, workspace, this.setSegmentLengthFromNumberValue);//new NumberText(thicknessValue, posThickness, {}, this, this.setSegmentThicknessFromNumberValue);\r\n\r\n state.dimensions.push(numberText);\r\n };\r\n\r\n this.setSegmentLengthFromNumberValue = (value, numberText) => {\r\n value = Math.round10(+value / Config.getMeasureMultiplier(), -3);\r\n let miteredSection = numberText.parent;\r\n let miteredSegments = miteredSection.getSegments();\r\n let miteredSegment = miteredSegments.find(seg => seg.length === numberText);\r\n\r\n this.setSegmentLength(value, miteredSegment, miteredSection);\r\n };\r\n\r\n this.resetState = (shouldResetPoints = true) => {\r\n state.isDrawFinished = false;\r\n state.currentNumericInput = \"\";\r\n if (shouldResetPoints) {\r\n for (const addedPoint of state.addedPoints) {\r\n addedPoint.destroy();\r\n }\r\n }\r\n for (const dimension of state.dimensions) {\r\n dimension.destroy();\r\n }\r\n if (state.dimensionToMouse) {\r\n state.dimensionToMouse.destroy();\r\n }\r\n\r\n state.addedPoints = [];\r\n state.dimensions = [];\r\n };\r\n\r\n this.drawFinish = () => {\r\n //this.addLineDimensions(state.addedPoints[0], state.addedPoints[1]);\r\n //const reduxState = store.getState();\r\n //const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (state.addedPoints.length > 2 || state.drawType === FREE_DRAW_TYPE.wall && state.addedPoints.length === 2) {\r\n const shapeCenter = ShapeHelper.getCenterPoint(state.addedPoints);\r\n let preparedPoints = [];\r\n switch (state.drawType) {\r\n case FREE_DRAW_TYPE.wall:\r\n this.createWall(state.addedPoints, shapeCenter);\r\n break;\r\n case FREE_DRAW_TYPE.shape:\r\n if (state.useLockedPoints) {\r\n this.changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint();\r\n }\r\n for (const addedPoint of state.addedPoints) {\r\n addedPoint.x -= shapeCenter.x;\r\n addedPoint.y -= shapeCenter.y;\r\n preparedPoints.push(addedPoint);\r\n }\r\n\r\n this.createShape(preparedPoints, shapeCenter);\r\n store.dispatch(setSQFTMenuOpened(\"\"));\r\n store.dispatch(setSQFTActiveButton(\"\"));\r\n config.workspace.menuItemActive = \"\";\r\n this.deregisterEvents();\r\n break;\r\n }\r\n\r\n state.dimensionToMouse ? state.dimensionToMouse.destroy() : null;\r\n state.dimensionToMouse = null;\r\n }\r\n\r\n this.resetState(!(state.drawType === FREE_DRAW_TYPE.wall));\r\n // this.deregisterEvents();\r\n //\r\n // if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n // this.init();\r\n // }\r\n };\r\n\r\n this.changeFirstPointCoordinatesToCreate45or90DegAngleWithTheLastPoint = () => {\r\n if (state.addedPoints.length >= 2) {\r\n const firstPoint = state.addedPoints[0];\r\n const secondPoint = state.addedPoints[1];\r\n const lastPoint = state.addedPoints[state.addedPoints.length - 1];\r\n //const penultimatePoint = state.addedPoints[state.addedPoints.length - 2];\r\n const lockPointPos = getLockPointPos(lastPoint, state.lockedAngleStep, firstPoint.getPointField());\r\n const intersectionPoint = getIntersectCordsBetweenLines(\r\n firstPoint.getPointField(),\r\n secondPoint.getPointField(),\r\n lastPoint.getPointField(),\r\n lockPointPos,\r\n true,\r\n true\r\n );\r\n\r\n if (intersectionPoint) {\r\n const intersectionPointOnField = getMousePositionOnField(intersectionPoint.x, intersectionPoint.y);\r\n state.addedPoints[0].setPosition(intersectionPointOnField);\r\n }\r\n }\r\n }\r\n\r\n this.createShape = (preparedPoints, shapeCenter) => {\r\n const [countertopPartName] = getCountertopPartNames();\r\n const shapeId = createShapeFromPoints(\r\n preparedPoints,\r\n countertopPartName,\r\n false,\r\n shapeCenter,\r\n true,\r\n null,\r\n {},\r\n {\r\n minimumShapeArea: 25,\r\n maximumShapeArea: 100000,\r\n maximumLineDistance: 1000,\r\n }\r\n );\r\n void shapeId;\r\n }\r\n\r\n this.createWall = (preparedPoints, centerPoint) => {\r\n createWallFromPointsV2(preparedPoints, centerPoint, state.lockedAngleStep);\r\n }\r\n\r\n this.getOffset = function() {\r\n // //return {x: 0, y: 0};\r\n // var scale = sqftConfig.scale;\r\n // var workspacePos = workspace.getOffset();\r\n // debugger\r\n // if (parent) {\r\n // var _pos = parent.getPosition();\r\n // // if (sqftConfig.workspace.snapToGrid){\r\n // // _pos = parent.getSnappedPosition();\r\n // // }\r\n // var offset = {\r\n // x: workspacePos.x + (_pos.x * scale),\r\n // y: workspacePos.y + (_pos.y * scale)\r\n // }\r\n // } else {\r\n // return {x: 0, y: 0};\r\n // }\r\n // return offset;\r\n };\r\n this.render = (ctx) => RenderFreeDraw.render(ctx, this.getState())\r\n\r\n};\r\n\r\nexport default new FreeDraw()\r\n","import {AxiosInstance, leadApiGet, leadApiPost} from \"./api\";\r\nimport {IS_DEV_MODE} from \"../constants\";\r\n\r\nconst baseUrl = IS_DEV_MODE\r\n ? \"https://calendar.staging.labs.lixil.com\"\r\n : \"https://calendar.prod.labs.lixil.com\";\r\n\r\nconst postAuthData = {\r\n \"password\": \"QC@123\",\r\n \"username\": \"QC\"\r\n}\r\n\r\nexport const postSignInAuth = async () => {\r\n // return await leadApiPost(\"https://calendar.prod.labs.lixil.com/v1/sign-in\", postData);\r\n const postAuthResponse = await leadApiPost(baseUrl + \"/v1/sign-in\", postAuthData);\r\n if (postAuthResponse && postAuthResponse.data && postAuthResponse.data.data && postAuthResponse.data.data.jwtToken) {\r\n // dispatch(setAppJwtToken(postAuthResponse.data.data.jwtToken)); // just in case, we don't need it anymore\r\n AxiosInstance.defaults.headers.post['Authorization'] = postAuthResponse.data.data.jwtToken;\r\n AxiosInstance.defaults.headers.get['Authorization'] = postAuthResponse.data.data.jwtToken;\r\n }\r\n // console.log(\"AxiosInstance\", AxiosInstance);\r\n return postAuthResponse\r\n}\r\n\r\nconst withSignInRetryRequest = async (request) => {\r\n let mainResponse;\r\n\r\n const retryFunction = async () => {\r\n console.log(\"session expired, trying one more time...\", );\r\n // delete AxiosInstance.defaults.headers.post['Authorization']; // prevent status 400 bad request\r\n // delete AxiosInstance.defaults.headers.get['Authorization']; // prevent status 400 bad request\r\n await postSignInAuth();\r\n return await request();\r\n }\r\n\r\n try {\r\n mainResponse = await request();\r\n if (mainResponse && mainResponse.status === 401) {\r\n mainResponse = await retryFunction();\r\n }\r\n return mainResponse\r\n } catch (error) {\r\n if ((typeof error === \"object\") && error.response && (error.response.status === 401)) {\r\n mainResponse = await retryFunction();\r\n return mainResponse\r\n }\r\n console.log(\"response error\", error);\r\n return new Error(error)\r\n }\r\n}\r\n\r\n\r\nexport const checkLixilPostalCode = async (zipCode) => {\r\n try {\r\n const url = `${baseUrl}/availability/${zipCode}`;\r\n const request = leadApiGet.bind(this, url);\r\n const mainResponse = await withSignInRetryRequest(request);\r\n return mainResponse && mainResponse.data && mainResponse.data.serviceAvailable\r\n } catch (error) {\r\n console.log(\"availability/postalCode error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport const postLixilCalendar = async (postCalendarData) => {\r\n try {\r\n const url = `${baseUrl}/availability/calendar`;\r\n const request = leadApiPost.bind(this, url, postCalendarData);\r\n return await withSignInRetryRequest(request);\r\n } catch (error) {\r\n console.log(\"availability/calendar error\", error);\r\n return false\r\n }\r\n}\r\n\r\nexport const postLixilGetSalesRep = async (postData) => {\r\n try {\r\n const url = `${baseUrl}/availability/getSalesRep`;\r\n const request = leadApiPost.bind(this, url, postData);\r\n return await withSignInRetryRequest(request);\r\n } catch (error) {\r\n console.log(\"availability/getSalesRep error\", error);\r\n return false\r\n }\r\n}\r\n","import React from 'react';\r\nimport * as uuid from \"uuid\";\r\n\r\nimport NavigationItem from \"./navigationItem\";\r\nimport {UserPopupTypes} from \"../constants\";\r\nimport {getFeatureCost, getFeatureIsLocked, isIE} from \"../../../misc/helpers\";\r\nimport Walls from \"../../kvComponent/core/parts/walls\";\r\nimport Cabinet from \"../../kvComponent/core/parts/cabinet\";\r\nimport CountertopGroup from \"../../kvComponent/core/parts/countertopGroup\";\r\nimport CenterIsland from \"../../kvComponent/core/parts/centerIsland\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getBvGroupFeatures} from \"../../../api/server-api\";\r\nimport LoadingBar from '../../../lib/react-redux-loading-bar';\r\nimport CommonFeatureItemsMethods from \"../commonFeatureItemsMethods\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../misc/filtersFunctions\";\r\nimport {\r\n displayMaterialsWizardGroupAsFeature,\r\n getMissingWizardFeatures\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getAdditionalFeaturesOnScroll} from \"../../../api/look-api\";\r\nimport Config from \"../../../config\";\r\n\r\nexport default class NavigationItemsList extends CommonFeatureItemsMethods { // this class is used for both Desktop & Mobile navigations to avoid method's duplicating\r\n\r\n constructor(props) {\r\n window.itemClickCount = window.itemClickCount || 0;\r\n window.allowClickLeadCapturePopup = true;\r\n super(props);\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n const childItem = this.props.childItem && this.props.childItem.part;\r\n if (childItem && childItem.partId.includes(\"countertop\") && this.props.selectedFilters.length && !this.props.activeNavigationFilter) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(childItem, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n itemClick = (item, featureIsLocked, event) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if( !this.props.userIsLoggedIn && fabricatorSettings.clickLeadCapture && (++window.itemClickCount >= fabricatorSettings.clickLeadCount) && window.allowClickLeadCapturePopup) {\r\n this.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n this.props.onItemClick(item, false, featureIsLocked, event);\r\n this.forceUpdate();\r\n };\r\n\r\n getActiveFeatureName = (uniquePartNamesArray, parentId, childName, isCabinet = false) => {\r\n const layout = getCurrentLayout();\r\n const parent = layout.parts[parentId];\r\n const activeFeature = parent && parent[childName] && parent[childName].activeFeature;\r\n if (activeFeature) {\r\n uniquePartNamesArray.unshift(activeFeature.getSplittedFeatureName(isCabinet))\r\n }\r\n return uniquePartNamesArray\r\n };\r\n\r\n getSelectedWallIndexes = (childItem, features, selectedFirstItemIndex) => {\r\n if (this.props.isWizard && this.props.currentGroups && displayMaterialsWizardGroupAsFeature(this.props.currentGroups)) {\r\n return []\r\n }\r\n const layout = getCurrentLayout();\r\n let otherSelectedWallsIndexes = [];\r\n let uniquePartNamesArray = [];\r\n const kitchenCabinetPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n if (childItem && childItem.part && childItem.part.isStoneFeature) {\r\n uniquePartNamesArray = layout.getStonesActiveFeatures().map((activeFeature) => {\r\n return activeFeature.cartFeature.getSplittedFeatureName()\r\n });\r\n switch (childItem.part.partId) {\r\n case \"backsplash\": {\r\n const parentItem = childItem.part.getParent();\r\n const rightWall = parentItem && parentItem.rightWall;\r\n if (rightWall && rightWall.activeFeature) {\r\n uniquePartNamesArray.unshift(rightWall.activeFeature.getSplittedFeatureName())\r\n }\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"countertop\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CountertopGroup.id, \"countertop\");\r\n break;\r\n }\r\n case \"countertop\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Walls.id, \"backsplash\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"countertop\");\r\n break;\r\n }\r\n case \"center_island_countertop\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Walls.id, \"backsplash\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CountertopGroup.id, \"countertop\");\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else if (childItem && childItem.part && (kitchenCabinetPartIds.includes(childItem.part.partId))) {\r\n switch (childItem.part.partId) {\r\n case \"top_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"cabinet\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"bottomCabinet\", true);\r\n break;\r\n }\r\n case \"bottom_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, CenterIsland.id, \"cabinet\");\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"topCabinet\", true);\r\n break;\r\n }\r\n case \"center_island_cabinet\": {\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"topCabinet\", true);\r\n uniquePartNamesArray = this.getActiveFeatureName(uniquePartNamesArray, Cabinet.id, \"bottomCabinet\", true);\r\n break;\r\n }\r\n }\r\n }\r\n // console.log(\"uniquePartNamesArray\", uniquePartNamesArray);\r\n if (uniquePartNamesArray.length) {\r\n uniquePartNamesArray = isIE()\r\n ? uniquePartNamesArray.reduce(function(a,b){if(a.indexOf(b)<0)a.push(b);return a;},[])\r\n : [...uniquePartNamesArray.reduce((p,c) => p.set(c,true),new Map()).keys()]; //remove duplicates\r\n // console.log('uniquePartNamesArray', uniquePartNamesArray);\r\n uniquePartNamesArray.forEach((uniquePartName) => {\r\n let foundIndex = features.findIndex(feature => feature.part && (feature.part.getSplittedFeatureName() === uniquePartName));\r\n if (foundIndex < 0) {\r\n foundIndex = features.findIndex(feature => {\r\n if (!feature.part) {\r\n return false\r\n }\r\n if (childItem.part.partId === \"backsplash\") {\r\n // example: countertop - \"Dymo White 12X24 Glossy\", backsplash - \"Dymo White 12X24 Glossy 4in l\"\r\n return feature.part.partName.includes(uniquePartName)\r\n }\r\n return feature.part.partName === uniquePartName\r\n });\r\n }\r\n if (foundIndex > -1 && selectedFirstItemIndex !== foundIndex) {\r\n otherSelectedWallsIndexes.push(foundIndex);\r\n }\r\n });\r\n }\r\n // console.log(\"otherSelectedWallsIndexes\", otherSelectedWallsIndexes);\r\n return otherSelectedWallsIndexes\r\n };\r\n\r\n getLockedFeature = (activeFeature) => {\r\n const filterValues = activeFeature.part.dbFeature && activeFeature.part.dbFeature.filterValueIDs;\r\n if (filterValues) {\r\n return Object.keys(filterValues).some((filterKey) => {\r\n const filterGroup = this.props.filterGroups.find(group => group.id === +filterKey);\r\n const filterValue = filterGroup && filterGroup.values && filterGroup.values.find(value => value.id === filterValues[filterKey][0]);\r\n return filterValue && filterValue.lockedInWizard\r\n });\r\n }\r\n return false\r\n };\r\n\r\n getActiveItemIndex = (props) => {\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n let isActiveItemIndex = null;\r\n if (props.childItem && props.childItem.part.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n if(item && item.part)\r\n return props.childItem.part.activeFeatureId(showPlaceHolders) === item.part.id()\r\n })\r\n } else if (props.parentItem.part.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n if(item && item.part)\r\n return props.parentItem.part.activeFeatureId(showPlaceHolders) === item.part.id()\r\n })\r\n }\r\n return isActiveItemIndex\r\n };\r\n\r\n getReorderedItems = (indexesToReplace, props, selectedExist = false, isQuotingTool = false) => {\r\n let reOrderedFeatures = props.features;\r\n const featuresToPlaceFirst = indexesToReplace.map(index => reOrderedFeatures[index]).reverse();\r\n const sorted = this.getSortedFeatures(reOrderedFeatures, selectedExist, isQuotingTool);\r\n featuresToPlaceFirst.forEach((navItemToReplace) => {\r\n const currentIndex = sorted.findIndex(navItem => navItem.part.dbFeature.id === navItemToReplace.part.dbFeature.id)\r\n if (currentIndex > -1) {\r\n sorted.splice(currentIndex, 1);\r\n sorted.splice(0, 0, navItemToReplace);\r\n }\r\n });\r\n // console.log(\"sorted\", sorted);\r\n return sorted\r\n };\r\n\r\n checkForSelectedAccessories = (activeFeature, selected) => {\r\n const accessories = [\"large_corner_caddie\", \"corner_caddie\", \"small_corner_shelf\", \"large_corner_seat\"];\r\n if (accessories.includes(activeFeature.partId)) {\r\n if (activeFeature.partId === \"large_corner_seat\") {\r\n if (activeFeature.getParent().getParent().caddie_type === \"large_corner_caddie\") {\r\n selected = false\r\n }\r\n } else if (activeFeature.getParent().getParent().caddie_type !== activeFeature.partId) {\r\n selected = false\r\n }\r\n }\r\n return selected\r\n };\r\n\r\n getFeaturePropertyToSort = (navItem, property) => {\r\n if (property === \"name\") {\r\n return navItem.part.getFeatureName()\r\n }\r\n if (property === \"SortPositionNum\") {\r\n return navItem.part.metaData[property] || 99999;\r\n }\r\n return navItem.part[property];\r\n }\r\n\r\n getNavItemsSortedByProperty = (navItems, property, property2) => {\r\n const order = \"asc\";\r\n // console.log(\"navItems - navItems\", navItems);\r\n navItems = navItems.sort((a,b) => {\r\n let prop1 = this.getFeaturePropertyToSort(a, property);\r\n let prop2 = this.getFeaturePropertyToSort(b, property);\r\n let prop3 = this.getFeaturePropertyToSort(a, property2);\r\n let prop4 = this.getFeaturePropertyToSort(b, property2);\r\n return order === \"asc\"\r\n ? (prop1 > prop2) ? 1 : (prop1 < prop2) ? -1 : (prop3 > prop4) ? 1 : (prop3 < prop4) ? -1 : 0\r\n : (prop1 < prop2) ? 1 : (prop1 > prop2) ? -1 : (prop3 < prop4) ? 1 : (prop3 > prop4) ? -1 : 0\r\n })\r\n // console.log(\"navItems\", navItems);\r\n return navItems\r\n };\r\n\r\n getSortedFeatures = (features, selectedExist = false, isQuotingTool = false) => {\r\n if (this.props.isWizard && this.props.currentGroups && displayMaterialsWizardGroupAsFeature(this.props.currentGroups)) {\r\n return features\r\n }\r\n const {fabricatorData} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n let newFeatures = [...features.filter(feature => feature && feature.part && feature.part.dbFeature)];\r\n let selectedFeature = null;\r\n if (selectedExist && (!isQuotingTool || (newFeatures[0] && this.checkIfFeatureSelected(newFeatures[0].part, newFeatures[0].part.getParent())))) {\r\n selectedFeature = newFeatures[0];\r\n newFeatures.splice(0, 1);\r\n }\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated) {\r\n const unLockedFeatures = newFeatures\r\n .filter(navItem => !getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n const lockedFeatures = newFeatures\r\n .filter(navItem => getFeatureIsLocked(navItem.part))\r\n .map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n newFeatures = fabricatorSettings.showPricing ? [\r\n ...this.getNavItemsSortedByProperty(unLockedFeatures, \"featurePrice\", \"name\"),\r\n ...this.getNavItemsSortedByProperty(lockedFeatures, \"featurePrice\", \"name\")\r\n ] : [...unLockedFeatures, ...lockedFeatures];\r\n } else if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n newFeatures = newFeatures.map(navItem => {\r\n navItem.part.featurePrice = getFeatureCost(navItem.part, 1);\r\n return navItem\r\n })\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"featurePrice\", \"name\")\r\n } else {\r\n const propertyToSort = newFeatures.some(navItem => navItem.part.metaData[\"SortPositionNum\"]) ? \"SortPositionNum\" : \"name\";\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, propertyToSort, \"\");\r\n if (!isQuotingTool && newFeatures.some(navItem => navItem.part.useMatchesFailedNavigation)) {\r\n newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"matchesMetaFailed\");\r\n }\r\n }\r\n if (isQuotingTool) {\r\n // newFeatures = this.getNavItemsSortedByProperty(newFeatures, \"notAvailableInVisualizer\", \"_customDisplayName\")\r\n const inVisFeatures = newFeatures.filter(navFeature => !navFeature.part.notAvailableInVisualizer);\r\n const notInVisFeatures = newFeatures.filter(navFeature => navFeature.part.notAvailableInVisualizer);\r\n newFeatures = [\r\n ...inVisFeatures,\r\n // ...this.getNavItemsSortedByProperty(notInVisFeatures, \"featurePrice\", \"name\")\r\n ...notInVisFeatures\r\n ];\r\n }\r\n if (selectedExist && selectedFeature) {\r\n newFeatures.unshift(selectedFeature)\r\n }\r\n return newFeatures\r\n };\r\n\r\n getNavItemsList = (isMobile) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const elements = [];\r\n\r\n const features = this.state.reorderedFeatures.filter(feature => feature);\r\n // console.log('features', features);\r\n\r\n for (let i = 0; i < features.length; i++ ) {\r\n const currentFeature = features[i];\r\n const currentParent = this.props.childItem || this.props.parentItem;\r\n\r\n let isActive = false;\r\n if (((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated)\r\n || (showPlaceHolders && currentParent.part.placeholderFeature && !currentParent.part.placeholderChanged)) {\r\n isActive = currentFeature && this.props.activeFeature && currentParent\r\n && currentParent.part.firstClick[this.props.activeQuoteIndex]\r\n && this.props.activeFeature.dbFeature.id === currentFeature.part.id();\r\n } else {\r\n isActive = currentFeature && this.props.activeFeature && this.props.activeFeature.dbFeature.id === currentFeature.part.id();\r\n }\r\n\r\n if (isActive) {\r\n isActive = this.checkForSelectedAccessories(this.props.activeFeature, isActive);\r\n }\r\n\r\n let isPulsating = false;\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated\r\n && currentFeature && currentFeature.part.dbFeature.unlocked\r\n && (!this.props.activeFeature || (this.props.childItem && (!this.props.childItem.part.firstClick[this.props.activeQuoteIndex] || !this.props.activeFeature.dbFeature.unlocked)))) {\r\n isPulsating = true\r\n }\r\n\r\n let currentFeatureCartItemsCount = 0;\r\n const currentFeatureId = currentFeature && currentFeature.part.dbFeature.id;\r\n const matchingCartItem = this.props.cartItems.find((cartItem) => {\r\n return currentFeatureId === (cartItem.cartFeature.dbFeature && cartItem.cartFeature.dbFeature.id)\r\n && (cartItem.currentQuote === this.props.activeQuoteIndex);\r\n });\r\n if (matchingCartItem) {\r\n currentFeatureCartItemsCount = matchingCartItem.quantity\r\n }\r\n\r\n elements.push(\r\n this.switchToFeatureInfo(\r\n currentFeature, \"nav-item-info-clicked\", \"visualizer\"\r\n )}\r\n fabricatorData={this.props.fabricatorData}\r\n largeThumbnail={!isMobile && (this.props.navigationViewType === 2)}\r\n currentFeatureCartItemsCount={currentFeatureCartItemsCount}\r\n existInQtCategory={this.props.existInQtCategory}\r\n />\r\n );\r\n }\r\n\r\n return elements\r\n\r\n };\r\n\r\n getLoadingFeatures = () => (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n\r\n // onDesktopNavigationScroll = ({clientHeight, clientWidth, scrollHeight, scrollLeft, scrollTop, scrollWidth}) => {\r\n onDesktopNavigationScroll = ({clientWidth, scrollLeft, scrollWidth}) => {\r\n // console.log(\"clientHeight\", clientHeight);\r\n // console.log(\"clientWidth\", clientWidth);\r\n // console.log(\"scrollHeight\", scrollHeight);\r\n // console.log(\"scrollLeft\", scrollLeft);\r\n // console.log(\"scrollTop\", scrollTop);\r\n // console.log(\"scrollWidth\", scrollWidth);\r\n // console.log(\"=================\");\r\n if ((scrollWidth - Math.ceil(scrollLeft) === clientWidth) || (scrollWidth - Math.floor(scrollLeft) === clientWidth)) {\r\n this.getNewFeaturesOnScroll(scrollLeft);\r\n }\r\n };\r\n\r\n onMobileNavigationScroll = ({clientHeight, scrollHeight, scrollTop}) => {\r\n if ((scrollHeight - Math.ceil(scrollTop) === clientHeight) || (scrollHeight - Math.floor(scrollTop) === clientHeight)) {\r\n this.getNewFeaturesOnScroll(scrollTop)\r\n }\r\n };\r\n\r\n getFeaturesFromBackendWithFilters = (childItem, counterTopFiltersIdsReceived, finalScrollPosition = 1, existingFilterObject = null) => {\r\n const filterObject = existingFilterObject || {\r\n uuid: uuid.v4(),\r\n filterIds: counterTopFiltersIdsReceived, // array of arrays, ex. [[56],[1122,1313]] etc.\r\n featuresReceived: 0,\r\n page: 0\r\n };\r\n if (!existingFilterObject) {\r\n childItem.filterIdsReceived.push(filterObject);\r\n }\r\n\r\n const featuresCountToReceive = 5000;\r\n\r\n if (!this.featureReceivingStarted) {\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n this.featureReceivingStarted = true;\r\n getBvGroupFeatures(\r\n childItem.dbName || childItem.partName,\r\n filterObject.page,\r\n featuresCountToReceive,\r\n counterTopFiltersIdsReceived\r\n )\r\n .then((response) => {\r\n if (response && response.length) {\r\n console.log(\"response.data with filters\", response);\r\n childItem.setGroupFeatures(response, featuresCountToReceive, false);\r\n childItem.filterIdsReceived = childItem.filterIdsReceived.map((filtersReceivedObject) => {\r\n if (filtersReceivedObject.uuid === filterObject.uuid) {\r\n filtersReceivedObject.featuresReceived += response.length;\r\n if (response.length < featuresCountToReceive) {\r\n filtersReceivedObject.allFeaturesWithFiltersReceived = true;\r\n } else {\r\n filtersReceivedObject.page++;\r\n }\r\n }\r\n return filtersReceivedObject\r\n });\r\n }\r\n this.finishScrollRequest(finalScrollPosition);\r\n });\r\n }\r\n };\r\n\r\n finishScrollRequest = (finalScrollPosition, shouldUpdateNavItems = true) => {\r\n this.setState({\r\n additionalFeaturesLoading: false\r\n }, () => {\r\n if (shouldUpdateNavItems) {\r\n this.needToUpdate = finalScrollPosition;\r\n this.props.parentUpdate();\r\n }\r\n this.featureReceivingStarted = false;\r\n });\r\n }\r\n\r\n getNewFeaturesOnScroll = async (finalScrollPosition, parentItemPassed = null) => {\r\n\r\n const {useNewWizardFeaturesRequestsLogic, wizardGroup, currentParent} = this.props;\r\n\r\n if (useNewWizardFeaturesRequestsLogic) {\r\n if (this.featureReceivingStarted || currentParent.requestInProgress) {\r\n return;\r\n }\r\n this.featureReceivingStarted = true;\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n getMissingWizardFeatures(this.state.reorderedFeatures, wizardGroup, currentParent)\r\n .then(shouldUpdateNavItems => this.finishScrollRequest(finalScrollPosition, shouldUpdateNavItems));\r\n return;\r\n }\r\n\r\n const parentItem = parentItemPassed || this.props.childItem || this.props.parentItem;\r\n if (!parentItem.part) {\r\n return\r\n }\r\n if (this.props.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, parentItem.part, true);\r\n console.log(\"checkPassed\", checkPassed);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(parentItem.part, checkPassed.filterIds, finalScrollPosition, checkPassed);\r\n }\r\n return\r\n }\r\n if (!parentItem.part.getRealFeaturesReceivedProperty() && !this.featureReceivingStarted) {\r\n this.featureReceivingStarted = true;\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n });\r\n\r\n const additionalFeaturesOnScroll = await getAdditionalFeaturesOnScroll(parentItem.part);\r\n if (Config.isDevMode()) {\r\n console.log(\"additionalFeaturesOnScroll\", additionalFeaturesOnScroll);\r\n }\r\n\r\n this.finishScrollRequest(finalScrollPosition);\r\n }\r\n };\r\n\r\n}\r\n","import {Component} from 'react';\r\nimport $ from \"jquery\";\r\n\r\nimport Analytics from \"../../analytics\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport store from \"../../store\";\r\nimport {featureIsMatchingQtCatName} from \"../../misc/categorySwitchingFunctions\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {switchToWizardItem} from \"../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\n\r\nexport default class CommonFeatureItemsMethods extends Component {\r\n\r\n // this method is NOT used by SelectionMainList, only visualizers desktop & mobile navigations\r\n switchToFeatureInfo = (feature, analyticsLabel, setCameFromPage = \"shoppingcart\", scrollToRelatedFeatureId = null, fromCartItem = null) => {\r\n\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const featureInfo = feature.part || feature;\r\n const featureParent = featureInfo.getParent();\r\n const selectionGroup = featureParent.getParent ? featureParent.getParent().partName : featureParent.partName;\r\n const {fabricatorState, wizardState} = store.getState();\r\n const {wizardList, wizardIsActive} = wizardState;\r\n\r\n const visType = fabricatorState.settings.allowVisualizerSwitching && fromCartItem && fromCartItem.fromVisualizerType\r\n ? fromCartItem.fromVisualizerType\r\n : document.kvConfig.visualizerType;\r\n const layout = getCurrentLayout(visType);\r\n\r\n const setCommonStuff = () => {\r\n this.props.toggleSelectionWindow(true, selectionGroup);\r\n this.props.toggleSelectionFeatureInfo(featureInfo, true);\r\n if (setCameFromPage === \"visualizer\") {\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n }\r\n this.props.setCameFromPage(setCameFromPage);\r\n }\r\n\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n if (fromCartItem && fromCartItem.fromWizardId) {\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === fromCartItem.fromWizardId);\r\n if (wizardItem) {\r\n setCommonStuff();\r\n switchToWizardItem(wizardItem, fromCartItem.fromWizardStep, fromCartItem.currentQuote, fromCartItem.fromWizardGroupId);\r\n return;\r\n }\r\n }\r\n const wizardItem = wizardList[0];\r\n if (wizardItem) {\r\n setCommonStuff();\r\n switchToWizardItem(wizardItem);\r\n }\r\n return\r\n }\r\n\r\n let nextCatName = \"\";\r\n\r\n // /* set new index*/\r\n let nextSubPartIndex = 0;\r\n if (featureParent.getParent) {\r\n if (layout.qtCategories\r\n && fabricatorState.settings.useCategorySwitching\r\n && layout.qtCategories.filter(qtCat => qtCat.subParts.some(subPart => subPart.part.partId === featureInfo.partId)).length > 1\r\n && fromCartItem\r\n && layout.qtCategories.find(qtCategory => featureIsMatchingQtCatName(fromCartItem.cartFeature, qtCategory.name, true))) {\r\n const neededCat = layout.qtCategories.find(qtCategory => featureIsMatchingQtCatName(fromCartItem.cartFeature, qtCategory.name, true));\r\n nextCatName = neededCat.name;\r\n nextSubPartIndex = neededCat.subParts.findIndex(subPart => subPart.part.partId === featureInfo.partId);\r\n } else if (layout.qtCategories && fromCartItem && fromCartItem.fromQtCategory\r\n && layout.qtCategories.find(qtCategory => qtCategory.name === fromCartItem.fromQtCategory)) {\r\n nextCatName = fromCartItem.fromQtCategory;\r\n this.props.setQtActiveCategory(fromCartItem.fromQtCategory);\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === fromCartItem.fromQtCategory);\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => {\r\n return (subPart.part.dbName === featureParent.partName) || (subPart.part.partName === featureParent.partName)\r\n });\r\n if ((!nextSubPartIndex || nextSubPartIndex < 0) && qtActiveCategory.qtCategoryHasBeenChanged) {\r\n [\"countertop\", \"edge\", \"faucet\", \"sink\", \"stovetop\"].forEach(partId => {\r\n if (featureParent.partId.includes(partId)) {\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => subPart.part.partId.includes(partId));\r\n }\r\n })\r\n }\r\n } else if (layout.qtCategories && featureParent.qtCategoryName) {\r\n this.props.setQtActiveCategory(featureParent.qtCategoryName);\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === featureParent.qtCategoryName);\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => {\r\n return (subPart.part.dbName === featureParent.partName) || (subPart.part.partName === featureParent.partName)\r\n });\r\n if ((!nextSubPartIndex || nextSubPartIndex < 0) && qtActiveCategory.qtCategoryHasBeenChanged) {\r\n [\"countertop\", \"edge\", \"faucet\", \"sink\", \"stovetop\"].forEach(partId => {\r\n if (featureParent.partId.includes(partId)) {\r\n nextSubPartIndex = qtActiveCategory.subParts.findIndex(subPart => subPart.part.partId.includes(partId));\r\n }\r\n })\r\n }\r\n } else {\r\n const subParts = featureParent.getParent().subParts(false); // we don't need not visible subParts on the materials page\r\n const featureParentName = featureParent.partName.replace(/ /g,\"-\").toLowerCase();\r\n nextSubPartIndex = subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partName.replace(/ /g,\"-\").toLowerCase() === featureParentName\r\n });\r\n }\r\n }\r\n\r\n if (!nextSubPartIndex || nextSubPartIndex < 0) {\r\n nextSubPartIndex = 0;\r\n }\r\n\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex);\r\n setCommonStuff();\r\n if (!window.location.href.includes('materials')) {\r\n if (layout.qtCategories && nextCatName) {\r\n changeQTRoutePath(nextCatName, nextSubPartIndex);\r\n } else if (layout.qtCategories && featureParent.qtCategoryName) {\r\n changeQTRoutePath(featureParent.qtCategoryName, nextSubPartIndex);\r\n } else {\r\n changeRoutePath(featureParent.getParent ? featureParent.getParent() : featureParent, nextSubPartIndex)\r\n }\r\n }\r\n if (scrollToRelatedFeatureId) {\r\n setTimeout(() => {\r\n const $scrollableDiv = $(\".selection-main__info-scrollable\");\r\n const scrollToArea = document.querySelector(\".prod-associated\");\r\n const scrollToDiv = document.querySelector('[data-feature-id=\"'+scrollToRelatedFeatureId+'\"]');\r\n if ($scrollableDiv && scrollToArea && scrollToDiv) {\r\n const scrollTop = scrollToArea.offsetTop + scrollToDiv.offsetTop;\r\n // console.log(\"scrolling to div\", scrollTop);\r\n $scrollableDiv.animate({scrollTop}, 800);\r\n }\r\n }, 0);\r\n }\r\n };\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {getEventPosition} from \"../../../../misc/helpers\";\r\n\r\nclass BodySwipable extends React.Component {\r\n\r\n static propTypes = {\r\n className: PropTypes.string,\r\n scrollableSelector: PropTypes.string.isRequired,\r\n children: PropTypes.any.isRequired,\r\n }\r\n\r\n static defaultProps = {\r\n className: \"\",\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n // this.swipableElement = null;\r\n this.scrollableElement = null;\r\n this._isMounted = false;\r\n this.currentScrollLeft = 0;\r\n this.x = 0;\r\n this.y = 0;\r\n this.delta = 0;\r\n this.swipeActive = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.state = {\r\n swipeActive: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n this.scrollableElement = this.getScrolllableElement();\r\n }\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n getScrolllableElement = () => {\r\n return this.props.scrollableRef && this.props.scrollableRef.current\r\n ? this.props.scrollableRef.current\r\n : document.querySelector(this.props.scrollableSelector);\r\n }\r\n\r\n handleOnMouseDown = (event) => {\r\n const {x, y} = getEventPosition(event);\r\n setTimeout(() => {\r\n if (!this._isMounted) {\r\n return false\r\n }\r\n this.x = x;\r\n this.y = y;\r\n this.swipeActive = true;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.setState({\r\n swipeActive: true\r\n });\r\n if (!this.scrollableElement) {\r\n this.scrollableElement = this.getScrolllableElement();\r\n }\r\n this.currentScrollLeft = this.scrollableElement.scrollLeft;\r\n }, 0);\r\n };\r\n\r\n handleOnMouseMove = (event) => {\r\n if (this.swipeActive) {\r\n const {x, y} = getEventPosition(event);\r\n const tX = parseFloat((x - this.x).toFixed(2));\r\n const tY = parseFloat((y - this.y).toFixed(2));\r\n // console.log('tX', tX);\r\n\r\n if (!this.detectedSwipeRight || !this.detectedSwipeLeft) {\r\n if (Math.abs(parseFloat(tX)) >= this.delta) {\r\n if (parseFloat(tX) > this.delta) {\r\n this.detectedSwipeRight = true;\r\n } else if (parseFloat(tX) < -this.delta) {\r\n this.detectedSwipeLeft = true;\r\n }\r\n }\r\n }\r\n\r\n if ((this.detectedSwipeLeft || this.detectedSwipeRight) && Math.abs(tX) > Math.abs(tY)) {\r\n // console.log(\"this.detectedSwipeLeft\", this.detectedSwipeLeft);\r\n // console.log(\"this.detectedSwipeRight\", this.detectedSwipeRight);\r\n // console.log('Math.abs(tX)', Math.abs(tX));\r\n const scrollLeft = this.detectedSwipeLeft\r\n ? this.currentScrollLeft + Math.abs(tX)\r\n : this.currentScrollLeft - Math.abs(tX);\r\n // this.$scrollableElement.animate({scrollLeft}, 500);\r\n this.scrollableElement.scrollLeft = scrollLeft;\r\n }\r\n }\r\n };\r\n\r\n handleOnMouseUp = () => {\r\n setTimeout(() => {\r\n if (!this._isMounted) {\r\n return false\r\n }\r\n this.x = 0;\r\n this.y = 0;\r\n this.swipeActive = false;\r\n this.detectedSwipeLeft = false;\r\n this.detectedSwipeRight = false;\r\n this.setState({\r\n swipeActive: false\r\n })\r\n }, 0)\r\n };\r\n\r\n render() {\r\n // const disallowSwipe = this.$scrollableElement && this.$scrollableElement[0] &&\r\n // (this.$scrollableElement[0].scrollWidth < this.$scrollableElement[0].clientWidth);\r\n if (this.props.isMobile) {\r\n return
    {this.props.children}
    \r\n }\r\n return (\r\n this.swipableElement = node}\r\n className={this.props.className + \" swipable\" + (this.state.swipeActive ? \" swipable--active\" : \"\")}\r\n onMouseDown={this.handleOnMouseDown}\r\n onMouseMove={this.handleOnMouseMove}\r\n onMouseLeave={this.handleOnMouseUp}\r\n onMouseUp={this.handleOnMouseUp}>\r\n {this.props.children}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n isMobile: store.serverState.isMobile,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodySwipable);\r\n","import React, {useEffect, useState} from \"react\"\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getImagePromiseFromLayout} from \"../../misc/getCanvasImageFromLayout\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {useIsMounted} from \"../../misc/helperHooks\";\r\nimport {createFakeLayout} from \"../appLayout\";\r\n\r\nconst LayoutNavigationItem = (props) => {\r\n\r\n const {keyType, layout, handleLayoutItemClick, isMobile, imageOnly} = props;\r\n const type = layout.layoutTypes[keyType];\r\n const [thumbnailUrl, setThumbnailUrl] = useState(\r\n layout.layoutThumbnails && layout.layoutThumbnails[keyType] ? layout.layoutThumbnails[keyType] : \"\"\r\n );\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n if (!thumbnailUrl) {\r\n const getLayoutThumbnail = async () => {\r\n const fakeLayout = layout.type === type ? layout : createFakeLayout(layout, keyType, layout.scene);\r\n if (layout.type !== type) {\r\n const currentState = layout.getActiveFeaturesAsObject(true, false, true); // get current selected features\r\n await fakeLayout.selectLayout(type, layout.type, currentState, layout.scene, null, true);\r\n }\r\n getImagePromiseFromLayout(fakeLayout)\r\n .then(response => {\r\n // console.log(\"response\", response);\r\n if (isMounted()) {\r\n setThumbnailUrl(response);\r\n }\r\n })\r\n\r\n }\r\n getLayoutThumbnail();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n if (imageOnly) {\r\n return \"item.type\"/\r\n }\r\n\r\n if (isMobile) {\r\n const layoutItemWidth = (window.innerWidth / 4 - 10);\r\n const persentageOfWidth = layoutItemWidth * 100 / 720;\r\n const height = 405 * persentageOfWidth / 100;\r\n\r\n return (\r\n
  • handleLayoutItemClick(type)}\r\n >\r\n
    \r\n {thumbnailUrl ? \"item.type\"/ : }\r\n
    \r\n
  • \r\n )\r\n }\r\n\r\n return (\r\n
  • handleLayoutItemClick ? handleLayoutItemClick(type) : null}\r\n style={{backgroundImage: `url(${thumbnailUrl})`}}>\r\n {thumbnailUrl ? null : }\r\n
  • \r\n );\r\n}\r\n\r\nLayoutNavigationItem.propTypes = {\r\n keyType: PropTypes.string.isRequired,\r\n layout: PropTypes.object.isRequired,\r\n handleLayoutItemClick: PropTypes.func,\r\n isMobile: PropTypes.bool,\r\n imageOnly: PropTypes.bool,\r\n}\r\n\r\nexport default LayoutNavigationItem\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {\r\n // FacebookShareButton,\r\n TwitterShareButton,\r\n // PinterestShareButton,\r\n} from 'react-share';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {shareImageRebath, shareImage} from \"../bvComponent/core/assets\";\r\nimport SaveButton from \"./saveButton\";\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport Config from \"../../config\";\r\n\r\nexport class ShareButton extends Component {\r\n\r\n static propTypes = {\r\n renderList: PropTypes.bool\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n shareListOpened: false,\r\n };\r\n this.clickShareAfterLogin = null;\r\n this.elements = {\r\n email: React.createRef(),\r\n facebook: React.createRef(),\r\n twitter: React.createRef(),\r\n pinterest: React.createRef(),\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, async () => { // click on current active item after unlock\r\n if (this.clickShareAfterLogin) {\r\n console.log('this.clickShareAfterLogin', this.clickShareAfterLogin);\r\n const shareButton = this.elements[this.clickShareAfterLogin];\r\n if (shareButton) {\r\n shareButton.current.click();\r\n }\r\n this.clickShareAfterLogin = null;\r\n }\r\n });\r\n $(window).on(ActionTypes.USER_POPUP_CLOSED, () => { // reset saved\r\n if (this.clickShareAfterLogin) {\r\n this.clickShareAfterLogin = null;\r\n }\r\n });\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 3 && this.props.visualizerTutorialStep === 2) {\r\n this.toggleShareList();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN);\r\n $(window).off(ActionTypes.USER_POPUP_CLOSED);\r\n }\r\n\r\n renderImage = () => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n // const imageUrl = canvas.toDataURL();\r\n const imageUrl = this.props.fabricatorData.isRebath\r\n ? encodeURIComponent(shareImageRebath)\r\n : encodeURIComponent(shareImage[document.kvConfig.visualizerType]);\r\n Analytics.sendClickEvent('share-button-pinterest');\r\n window.open(`//pinterest.com/pin/create/button/?url=${encodeURIComponent(this.props.shareUrl)}&media=${imageUrl}`, '_blank')\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.share-list__item .mobilebutton') && !e.target.closest('.share') && !this.clickShareAfterLogin) {\r\n this.toggleShareList();\r\n }\r\n };\r\n\r\n toggleShareList = () => {\r\n Analytics.sendClickEvent(this.state.shareListOpened ? 'share-list-toggle-closed' : 'share-list-toggle-opened');\r\n this.setState({\r\n shareListOpened: !this.state.shareListOpened\r\n }, () => {\r\n if (this.state.shareListOpened) {\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n } else {\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n })\r\n };\r\n\r\n checkForLoggedIn = (e) => {\r\n Analytics.sendClickEvent('share-button-' + e.target.dataset.share);\r\n if (!UserLoginButton.handleLoginClick({...this.props})) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.clickShareAfterLogin = e.target.closest(this.props.renderList ? \".menu-dropdown__list-item\" : \".mobilebutton\").dataset.share;\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n faceBookButtonClick = (event) => {\r\n if (this.checkForLoggedIn(event)) {\r\n // const fbUrl = (Config.isMobile() || this.props.windowWidth < 991)\r\n // ? \"https://m.facebook.com/sharer/sharer.php?u=\"\r\n // : \"https://www.facebook.com/sharer/sharer.php?&p[url]=\";\r\n const fbUrl = \"https://facebook.com/sharer/sharer.php?u=\";\r\n const qfUrl = location.protocol + \"//\" + _.takeRight(window.location.hostname.split('.'), 2).join('.') + \"/url?u=\";\r\n const shareUrlSplitted = this.props.shareUrl.split(\".com\")\r\n if (Config.isDevMode()) {\r\n console.log(\"this.props.shareUrl\", this.props.shareUrl);\r\n console.log(\"shareUrlSplitted\", shareUrlSplitted);\r\n }\r\n window.open(\r\n fbUrl + qfUrl + shareUrlSplitted[0] + \".com\" + encodeURIComponent(shareUrlSplitted[1]),\r\n 'facebook-share-dialog',\r\n 'width=630,height=420'\r\n );\r\n\r\n // 'https://www.facebook.com/dialog/share?\\n' +\r\n // ' app_id=402959133605207&display=page&href='+this.props.shareUrl +\r\n // ' app_id=402959133605207&display=page&href=https%3A%2F%2Ffacebook.com%2Fdocs%2F&redirect_uri=https%3A%2F%2Fdevelopers.facebook.com%2Ftools%2Fexplorer',\r\n\r\n return false;\r\n }\r\n };\r\n\r\n getShareButtons = () => {\r\n const dashboardFramed = Config.isVisualizerManagement();\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n return (\r\n
      \r\n
    • \r\n \r\n email\r\n \r\n
    • \r\n
    • \r\n \r\n {/**/}\r\n {/**/}\r\n {/**/}\r\n
    • \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n \r\n \r\n
    • \r\n {this.props.windowWidth >= 991 || dashboardFramed\r\n || (this.props.fabricatorData.checkout && this.props.goToCart && allPagesEnabled) ? null : (\r\n
    • \r\n \r\n
    • \r\n )}\r\n {/*
    • */}\r\n {/**/}\r\n {/*
    • */}\r\n
    \r\n )\r\n };\r\n\r\n getShareList = () => {\r\n return (\r\n
      \r\n
    • \r\n Email\r\n
    • \r\n
    • \r\n facebook\r\n
    • \r\n
    • \r\n pinterest\r\n
    • \r\n \r\n
    • \r\n Twitter\r\n
    • \r\n
      \r\n {/*
    • */}\r\n {/*Houzz
    • */}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n {this.props.renderList ? this.getShareList() : this.getShareButtons()}\r\n
    \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n windowWidth: store.serverState.windowWidth,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n shareUrl: store.serverState.shareUrl,\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup\r\n})(ShareButton);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {setMaterialsAgentTutorialFinished, showMaterialsAgentTutorial} from \"../../actions/tutorialFunctions\";\r\nimport WithPingPilotCheck from \"../look/hocs/withPingPilotCheck\";\r\n\r\nconst PingPilotButton = (props) => {\r\n\r\n const {design, showMaterialsAgentTutorial, setMaterialsAgentTutorialFinished, materialsAgentTutorialIsOpened,\r\n materialsAgentTutorialFinished, pingButton} = props;\r\n\r\n const pingButtonClick = () => {\r\n pingButton.click();\r\n if (materialsAgentTutorialIsOpened) {\r\n showMaterialsAgentTutorial(false);\r\n }\r\n if (!materialsAgentTutorialFinished) {\r\n setMaterialsAgentTutorialFinished(true);\r\n }\r\n }\r\n\r\n if (design === \"mainButton\") {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n
    \r\n ) : null}\r\n \r\n \r\n \r\n {/**/}\r\n
    \r\n ) : null}\r\n {this.props.fabricatorData.received ? (\r\n
    \r\n {hideLogo ? null : \"logo\"}\r\n
    \r\n ) : null}\r\n {this.props.fabricatorData.received && !this.props.hideTopButtons ? (\r\n
    \r\n {fabricatorSettings.enableSharing ? : null }\r\n \r\n \r\n {this.props.mobileNav && this.props.mobileNav.length\r\n ? \r\n : initialFlowIsRunning\r\n ? null\r\n : \r\n }\r\n {/*{(fabricatorSettings.leadCaptureOnQuote && !initialFlowIsRunning && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) ? : null}*/}\r\n {fabricatorSettings.showPricing && !initialFlowIsRunning ? : null}\r\n {/*{true*/}\r\n {/* ? */}\r\n {/* : null}*/}\r\n {showInstallations && isShoppingCartPage && !initialFlowIsRunning ? : null}\r\n {isShoppingCartPage && !initialFlowIsRunning ? : null}\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n
      \r\n {this.renderSubNav(this.props.mobileNav)}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n renderSubNav = (nav) => {\r\n var _nav = sortBy(nav, n => n.displayOrder);\r\n return _nav.map(n => (\r\n
  • \r\n {n.name}\r\n
  • \r\n ));\r\n }\r\n}\r\n\r\nconst DesktopHeaderWithRouter = withRouter(props => );\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionState, cartState, instState} = store;\r\n return {\r\n selectionGroup: selectionState.selectionGroup,\r\n selectionFeatureInfo: selectionState.selectionFeatureInfo,\r\n selectionInfoQuantity: selectionState.selectionInfoQuantity,\r\n cartItems: cartState.cartItems,\r\n instList: instState.instList,\r\n mobileNav: store.navigationState.mobileNav,\r\n fabricatorData: store.fabricatorState,\r\n initialFlowStep: store.initialFlowState.initialFlowStep,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n unlockCalculationsStep: store.unlockCalculationsState.unlockCalculationsStep,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeStateToQuote\r\n})(DesktopHeaderWithRouter);\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setLookActiveFeature, updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport {getFeatureOptions, getOptionStyles, navFeatureCLick} from \"../../lookFunctions\";\r\nimport {updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport {allowCheckForCollection} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport Config, {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nimport WithClickCount from \"../../../hocs/withClickCount\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {enableRelatedFeature} from \"../../lookFunctions2\";\r\nimport PropTypes from \"prop-types\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport {getColorFilterValue} from \"../../../../../misc/filtersFunctions\";\r\n\r\nconst LookFeatureOptions = (props) => {\r\n\r\n const {lookActiveFeature, filterGroups, setLookActiveFeature, lookActiveFeatureCustomName, updateCanvasCount,\r\n lookActiveFeatureCollection, lookActiveFeatureMatchingFeature, lookActiveFeatureMountType, lookActiveFeatureMountHoles,\r\n lookActiveFeatureLixilSubCategory, isWizard, wizardActiveStep, wizardGroup, setWizardSelectedValues, fabricatorData,\r\n updateNavigationCount, navigationCount, lookActiveFeaturePositionInList} = props;\r\n const [availableOptions, setAvailableOptions] = useState([]);\r\n\r\n const checkCollectionName = lookActiveFeature && !allowCheckForCollection(lookActiveFeature) ? \"\" : lookActiveFeatureCollection;\r\n\r\n useEffect(() => {\r\n if (fabricatorData.isEncore) {\r\n return\r\n }\r\n const colorOptions = getFeatureOptions(lookActiveFeature, filterGroups, \"Color\");\r\n setAvailableOptions(colorOptions || [])\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeatureCustomName, checkCollectionName, lookActiveFeatureMatchingFeature,\r\n lookActiveFeatureMountType, lookActiveFeatureLixilSubCategory, lookActiveFeatureMountHoles, navigationCount]);\r\n\r\n if (!availableOptions.length || fabricatorData.isEncore) {\r\n return null\r\n }\r\n\r\n const activeFilterGroupValue = getColorFilterValue(lookActiveFeature, filterGroups)\r\n\r\n const optionsButtonClick = (option, maxClickCountReached, updateLookCartItem) => {\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(lookActiveFeature);\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureOptions + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureOptions + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"option.feature\", option.feature);\r\n }\r\n\r\n if (isWizard) {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: option.feature,\r\n partId: option.feature.partId\r\n }\r\n });\r\n }\r\n\r\n setLookActiveFeature(option.feature, lookActiveFeaturePositionInList);\r\n navFeatureCLick(option.feature);\r\n enableRelatedFeature(option.feature);\r\n updateLookCartItem(option.feature);\r\n updateNavigationCount();\r\n updateCanvasCount();\r\n };\r\n\r\n return (\r\n
    \r\n \r\n :\r\n {/*{IS_PRODUCT_JOURNEY ? \":\" : null}*/}\r\n {/*{activeFilterGroupValue && (IS_PRODUCT_JOURNEY) ? (*/}\r\n \r\n {activeFilterGroupValue ? (activeFilterGroupValue.displayText || activeFilterGroupValue.value).replace(\"GROHE \", \"\") : null}\r\n \r\n {/*) : null}*/}\r\n \r\n {/*{activeFilterGroupValue && !IS_PRODUCT_JOURNEY ? (*/}\r\n {/* */}\r\n {/* ({activeFilterGroupValue.displayText.replace(\"GROHE \", \"\")})*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n \r\n {(maxClickCountReached) => (\r\n \r\n {(updateLookCartItem) => (\r\n
      \r\n {availableOptions.map(option => {\r\n const isActive = activeFilterGroupValue && (option.colorValue.id === activeFilterGroupValue.id);\r\n const styles = getOptionStyles(option.colorValue);\r\n return (\r\n
    • optionsButtonClick(option, maxClickCountReached, updateLookCartItem)}\r\n style={styles}/>\r\n )\r\n })}\r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n
    \r\n\r\n )\r\n};\r\n\r\nLookFeatureOptions.propTypes = {\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {navigationCount, lookActiveFeaturePositionInList} = store.lookState;\r\n const storeActiveFeature = store.lookState.lookActiveFeature;\r\n const {filterGroups} = store.filterState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const lookActiveFeature = ownProps.activeFeature || storeActiveFeature;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookActiveFeature,\r\n lookActiveFeaturePositionInList,\r\n filterGroups,\r\n wizardActiveStep,\r\n lookActiveFeatureCustomName: lookActiveFeature ? lookActiveFeature.getMatchingOptionsName() : null,\r\n lookActiveFeatureMountHoles: lookActiveFeature && lookActiveFeature.partId === \"vanity_sink\"\r\n && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MountHoles\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MountHoles\"].join(\",\") : null,\r\n lookActiveFeatureLixilSubCategory: lookActiveFeature ? lookActiveFeature.dbFeature.lixilProductSubCategory : null,\r\n lookActiveFeatureMatchingFeature: lookActiveFeature && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MatchingFeature\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MatchingFeature\"].join(\",\")\r\n : null,\r\n lookActiveFeatureMountType: lookActiveFeature && Array.isArray(lookActiveFeature.dbFeature.metaData[\"MountType\"])\r\n ? lookActiveFeature.dbFeature.metaData[\"MountType\"].join(\",\")\r\n : null,\r\n lookActiveFeatureCollection: lookActiveFeature ? lookActiveFeature.getCollectionName(filterGroups) : null,\r\n navigationCount, // to update options after all features received\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n updateCanvasCount,\r\n setWizardSelectedValues,\r\n updateNavigationCount,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookFeatureOptions)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport GroheFeatureOptionsType from \"./groheFeatureOptionsType\";\r\nimport {VANITY_TYPES} from \"../../../core/constants\";\r\nimport GroheFeatureOptionsShelfSide from \"./groheFeatureOptionsShelfSide\";\r\nimport GroheFeatureOptionsSide from \"./groheFeatureOptionsSide\";\r\nimport GroheFeatureOptionsShowerPan from \"./groheFeatureOptionsShowerPan\";\r\nimport BacksplashSelect from \"../../../../selectionWindow/backsplashSelect\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport GroheFeatureOptionsCabinetSide from \"./groheFeatureOptionsCabinetSide\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport GroheFeatureOptionsBodySpray from \"./groheFeatureOptionsBodySpray\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport GroheFeatureOptionsSlatWall from \"./groheFeatureOptionsSlatWall\";\r\n\r\nconst GroheFeatureOptions = (props) => {\r\n\r\n const {lookActiveFeature, isWizard, wizardGroup, setWizardSelectedValues, wizardActiveStep, isLixil,\r\n groheActiveFeatureQuantity, updateLookCartItem} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const wizardOptionClick = (optionFeature) => {\r\n if (!isWizard || !optionFeature) {\r\n return\r\n }\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: optionFeature,\r\n partId: optionFeature.partId,\r\n quantity: groheActiveFeatureQuantity,\r\n }\r\n });\r\n updateLookCartItem();\r\n }\r\n\r\n return (\r\n \r\n \r\n {lookActiveFeature.partId === \"vanity_cabinet\" && !(isLixil && isWizard) ? : null}\r\n \r\n {Object.keys(VANITY_TYPES).includes(lookActiveFeature.partId) ? : null}\r\n {lookActiveFeature.partId === \"vanity_sink\" && !(isLixil && isWizard) ? : null}\r\n {lookActiveFeature.partId === \"corner_shelf\" || (lookActiveFeature.partId === \"body_spray\" && !isWizard)\r\n ? \r\n : null}\r\n {lookActiveFeature.partId === \"shower_pan_combo\" ? : null}\r\n {/*{lookActiveFeature.partId === \"shower_head\" ? : null}*/}\r\n {lookActiveFeature.partId === \"backsplash\" ? : null}\r\n {lookActiveFeature.partId === \"body_spray\" && isWizard\r\n ? \r\n : null}\r\n {lookActiveFeature.partId === \"slat_wall\"\r\n ? \r\n : null}\r\n \r\n )\r\n};\r\n\r\nGroheFeatureOptions.propTypes = {\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const {isLixil} = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n\r\n return {\r\n lookActiveFeature: ownProps.activeFeature || lookActiveFeature,\r\n wizardActiveStep,\r\n isLixil,\r\n groheActiveFeatureQuantity,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardSelectedValues,\r\n}\r\n\r\nexport default (\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nexports.default = exports.LoadingBar = exports.TERMINATING_ANIMATION_DURATION = exports.ANIMATION_DURATION = exports.PROGRESS_INCREASE = exports.MAX_PROGRESS = exports.UPDATE_TIME = undefined;\r\n\r\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n\r\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\r\n\r\nvar _react = require('react');\r\n\r\nvar _react2 = _interopRequireDefault(_react);\r\n\r\nvar _reactLifecyclesCompat = require('react-lifecycles-compat');\r\n\r\nvar _propTypes = require('prop-types');\r\n\r\nvar _reactRedux = require('react-redux');\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\r\n\r\nvar UPDATE_TIME = exports.UPDATE_TIME = 200;\r\nvar MAX_PROGRESS = exports.MAX_PROGRESS = 100;\r\nvar PROGRESS_INCREASE = exports.PROGRESS_INCREASE = 3;\r\nvar ANIMATION_DURATION = exports.ANIMATION_DURATION = UPDATE_TIME * 4;\r\nvar TERMINATING_ANIMATION_DURATION = exports.TERMINATING_ANIMATION_DURATION = UPDATE_TIME / 2;\r\n\r\nvar initialState = {\r\n percent: 0,\r\n status: 'hidden'\r\n};\r\n\r\nvar LoadingBar = function (_Component) {\r\n _inherits(LoadingBar, _Component);\r\n\r\n function LoadingBar() {\r\n var _ref;\r\n\r\n var _temp, _this, _ret;\r\n\r\n _classCallCheck(this, LoadingBar);\r\n\r\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\r\n args[_key] = arguments[_key];\r\n }\r\n\r\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = LoadingBar.__proto__ || Object.getPrototypeOf(LoadingBar)).call.apply(_ref, [this].concat(args))), _this), _this.state = _extends({}, initialState), _this.reset = function () {\r\n _this.terminatingAnimationTimeoutId = null;\r\n _this.setState(initialState);\r\n }, _this.newPercent = function (percent, progressIncrease) {\r\n // Use cosine as a smoothing function\r\n // It could be any function to slow down progress near the ending 100%\r\n var smoothedProgressIncrease = progressIncrease * Math.cos(percent * (Math.PI / 2 / 100));\r\n\r\n return percent + smoothedProgressIncrease;\r\n }, _this.simulateProgress = function () {\r\n _this.setState(function (prevState, _ref2) {\r\n var maxProgress = _ref2.maxProgress,\r\n progressIncrease = _ref2.progressIncrease;\r\n var percent = prevState.percent;\r\n\r\n var newPercent = _this.newPercent(percent, progressIncrease);\r\n\r\n if (newPercent <= maxProgress) {\r\n percent = newPercent;\r\n }\r\n\r\n return { percent: percent };\r\n });\r\n }, _temp), _possibleConstructorReturn(_this, _ret);\r\n }\r\n\r\n _createClass(LoadingBar, [{\r\n key: 'componentDidMount',\r\n value: function componentDidMount() {\r\n if (this.state.status === 'starting') {\r\n this.start();\r\n }\r\n }\r\n }, {\r\n key: 'componentDidUpdate',\r\n value: function componentDidUpdate(prevProps, prevState) {\r\n if (prevState.status !== this.state.status) {\r\n if (this.state.status === 'starting') {\r\n this.start();\r\n }\r\n\r\n if (this.state.status === 'stopping') {\r\n this.stop();\r\n }\r\n }\r\n }\r\n }, {\r\n key: 'componentWillUnmount',\r\n value: function componentWillUnmount() {\r\n clearInterval(this.progressIntervalId);\r\n clearTimeout(this.terminatingAnimationTimeoutId);\r\n }\r\n }, {\r\n key: 'start',\r\n value: function start() {\r\n this.progressIntervalId = setInterval(this.simulateProgress, this.props.updateTime);\r\n this.setState({ status: 'running' });\r\n }\r\n }, {\r\n key: 'stop',\r\n value: function stop() {\r\n clearInterval(this.progressIntervalId);\r\n this.progressIntervalId = null;\r\n\r\n var terminatingAnimationDuration = this.isShown() || this.props.showFastActions ? TERMINATING_ANIMATION_DURATION : 0;\r\n\r\n this.terminatingAnimationTimeoutId = setTimeout(this.reset, terminatingAnimationDuration);\r\n\r\n this.setState({ percent: 100 });\r\n }\r\n }, {\r\n key: 'isShown',\r\n value: function isShown() {\r\n return this.state.percent > 0 && this.state.percent <= 100;\r\n }\r\n }, {\r\n key: 'buildStyle',\r\n value: function buildStyle() {\r\n var animationDuration = this.state.status === 'stopping' ? TERMINATING_ANIMATION_DURATION : ANIMATION_DURATION;\r\n\r\n var style = {\r\n opacity: '1',\r\n transform: 'scaleX(' + this.state.percent / 100 + ')',\r\n transformOrigin: 'left',\r\n transition: 'transform ' + animationDuration + 'ms linear',\r\n width: '100%',\r\n willChange: 'transform, opacity'\r\n\r\n // Use default styling if there's no CSS class applied\r\n };if (!this.props.className) {\r\n style.height = '3px';\r\n style.backgroundColor = 'red';\r\n style.position = 'absolute';\r\n }\r\n\r\n if (this.isShown()) {\r\n style.opacity = '1';\r\n } else {\r\n style.opacity = '0';\r\n }\r\n\r\n return _extends({}, style, this.props.style);\r\n }\r\n }, {\r\n key: 'render',\r\n value: function render() {\r\n if (this.state.status === 'hidden') {\r\n return _react2.default.createElement('div', null);\r\n } else if (this.props.renderComponent) {\r\n return this.props.renderComponent(Math.round(this.state.percent))\r\n }\r\n\r\n return _react2.default.createElement(\r\n 'div',\r\n { className: this.props.className },\r\n Math.round(this.state.percent)\r\n );\r\n }\r\n }], [{\r\n key: 'shouldStart',\r\n value: function shouldStart(props, state) {\r\n return props.loading > 0 && ['hidden', 'stopping'].indexOf(state.status) >= 0;\r\n }\r\n }, {\r\n key: 'shouldStop',\r\n value: function shouldStop(props, state) {\r\n return props.loading === 0 && ['starting', 'running'].indexOf(state.status) >= 0;\r\n }\r\n }, {\r\n key: 'getDerivedStateFromProps',\r\n value: function getDerivedStateFromProps(nextProps, prevState) {\r\n if (LoadingBar.shouldStart(nextProps, prevState)) {\r\n return { status: 'starting' };\r\n }\r\n\r\n if (LoadingBar.shouldStop(nextProps, prevState)) {\r\n return { status: 'stopping' };\r\n }\r\n\r\n return null;\r\n }\r\n }]);\r\n\r\n return LoadingBar;\r\n}(_react.Component);\r\n\r\nLoadingBar.propTypes = {\r\n className: _propTypes.string,\r\n loading: _propTypes.number,\r\n maxProgress: _propTypes.number,\r\n progressIncrease: _propTypes.number,\r\n showFastActions: _propTypes.bool,\r\n updateTime: _propTypes.number,\r\n scope: _propTypes.string,\r\n style: _propTypes.object,\r\n renderComponent: _propTypes.func\r\n};\r\nLoadingBar.defaultProps = {\r\n className: '',\r\n loading: 0,\r\n maxProgress: MAX_PROGRESS,\r\n progressIncrease: PROGRESS_INCREASE,\r\n showFastActions: false,\r\n style: {},\r\n updateTime: UPDATE_TIME,\r\n scope: _loading_bar_ducks.DEFAULT_SCOPE,\r\n renderComponent: null,\r\n};\r\n\r\n\r\nvar mapStateToProps = function mapStateToProps(state, ownProps) {\r\n return {\r\n loading: state.loadingBar[ownProps.scope || _loading_bar_ducks.DEFAULT_SCOPE]\r\n };\r\n};\r\n\r\n(0, _reactLifecyclesCompat.polyfill)(LoadingBar);\r\nvar ConnectedLoadingBar = (0, _reactRedux.connect)(mapStateToProps)(LoadingBar);\r\n\r\nexports.LoadingBar = LoadingBar;\r\nexports.default = ConnectedLoadingBar;\r\n","import React, {useContext} from \"react\";\r\nimport {Text, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PrintDocumentInfoFabricator from \"./printDocumentInfoFabricator\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nexport const getAddressFromObject = (userInfo) => {\r\n let displayAddress = \"\";\r\n [userInfo.city, userInfo.state, userInfo.postal].forEach(addressPart => { // 1) city 2) provence 3) postal\r\n if (addressPart) {\r\n if (displayAddress) {\r\n displayAddress += \", \"\r\n }\r\n displayAddress += addressPart\r\n }\r\n });\r\n return displayAddress\r\n}\r\n\r\nconst PrintDocumentInfo = (props) => {\r\n const {styles, userInfo, fabricatorData, assignQuotePopupCustomer, employeeSelected} = props;\r\n const customerName = assignQuotePopupCustomer\r\n ? assignQuotePopupCustomer.fullName\r\n : userInfo.firstName + (userInfo.lastName ? (\" \" + userInfo.lastName) : \"\")\r\n const customerEmail = assignQuotePopupCustomer ? assignQuotePopupCustomer.email : userInfo.email || \"\"\r\n const customerPhone = userInfo.phoneNumber\r\n ? userInfo.country && !userInfo.phoneNumber.includes(`+${userInfo.country.dialCode} `)\r\n ? `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`\r\n : userInfo.phoneNumber\r\n : \"\";\r\n const customerAddress = getAddressFromObject(userInfo);\r\n const customerHasShippingAddress = userInfo.shipping && ([\"address1\", \"city\", \"postal\"].some(key => {\r\n return userInfo.shipping[key] && (userInfo[key] !== userInfo.shipping[key])\r\n }));\r\n let shippingAddress = \"\";\r\n if (customerHasShippingAddress) {\r\n shippingAddress = getAddressFromObject(userInfo.shipping);\r\n }\r\n const threeColumns = (employeeSelected || (customerHasShippingAddress && !fabricatorData.isCaesarStone))\r\n && !fabricatorData.isAmericanStandard;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"receipt.mainInfo.customerInformation\"]}\r\n {customerName}\r\n {userInfo.address1 ? {userInfo.address1} : null}\r\n {customerAddress ? {customerAddress} : null}\r\n {customerEmail}\r\n {customerPhone}\r\n \r\n {threeColumns ? (\r\n \r\n {!fabricatorData.isCaesarStone && (shippingAddress || userInfo.shipping.address1)\r\n ? {printContext.messages[\"receipt.mainInfo.billingAddress\"]}\r\n : null}\r\n {!fabricatorData.isCaesarStone && userInfo.shipping.address1\r\n ? {userInfo.shipping.address1}\r\n : null}\r\n {!fabricatorData.isCaesarStone && shippingAddress\r\n ? {shippingAddress}\r\n : null}\r\n {employeeSelected ? (\r\n \r\n {printContext.messages[\"receipt.mainInfo.salesPerson\"]}\r\n \r\n ) : null}\r\n {employeeSelected ? {employeeSelected.fullName} : null}\r\n \r\n ) : null}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentInfo.propTypes = {\r\n userInfo: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentInfo\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text, Image} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n detectComplexLaborCartItem,\r\n getPriceWithCurrency,\r\n getTotalPrice,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {getCartItemName, getFeatureUnit} from \"./printDocumentFunctions\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithIncluded, getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport PrintDocumentBodyBundledCartItems from \"./printDocumentBodyBundledCartItems\";\r\nimport {SQFT_FEATURES} from \"../../sqft/constants\";\r\n\r\nconst PrintDocumentBodyCartItem = (props) => {\r\n const {styles, cartItem, fabricatorData, locale, cartItems, sqftSlabState, cartItemsThumbnails} = props;\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const isComplexMultipliedUsed = detectComplexLaborCartItem(cartItem) && getTotalPrice().multipliedCostUsed;\r\n //const shouldUseSlabPricing = cartItem.shouldUseSlabPricing; // calculate shouldUseSlabPricing per cItem:\r\n const shouldUseSlabPricing = cartItem.partId === SQFT_FEATURES.slabs && sqftSlabState.isSlabPricingEnabled; // calculate shouldUseSlabPricing globally\r\n const priceTotal = isComplexMultipliedUsed || cartItem.displayFakePrice === 0\r\n ? null\r\n : toFixedFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory, true, cartItem, shouldUseSlabPricing, cartItem.currentQuote);\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const getFeatureQuantity = () => {\r\n return printContext.messages[\"receipt.content.featureQuantity\"] || \"\"\r\n };\r\n\r\n const getPrice = () => {\r\n const showPrice = getShowPrice(fabricatorData);\r\n if (!showPrice) {\r\n return null\r\n }\r\n return getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, printContext.messages)\r\n };\r\n\r\n const featurePrice = toFixedFeatureCost(cartItem.cartFeature, 1, cartItem.fromQtCategory, false, null, shouldUseSlabPricing, cartItem.currentQuote);\r\n const price = getPrice();\r\n const hideUnitPrice = (cartItem.partId === \"room\" && !featurePrice) || !price;\r\n const isMinimumCharge = cartItem.isMinimumCharge && !cartItem.isMinimumChargeItems;\r\n const displayFake = cartItem.displayFakeQuantity && (typeof cartItem.displayFakeQuantity === \"number\") && (cartItem.displayFakeQuantity > 0);\r\n\r\n const bundleProducts = cartItems ? cartItems.filter(cItem => {\r\n return cItem.bundleParentId && (cItem.bundleParentId === cartItem.id)\r\n }) : [];\r\n\r\n const withThumbnail = fabricatorData.receiptSettings && fabricatorData.receiptSettings.showThumbnailsAndDescriptions\r\n && cartItemsThumbnails\r\n && cartItemsThumbnails[cartItem.id];\r\n\r\n if (withThumbnail) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {getCartItemName(cartItem.cartFeature, fabricatorData, printContext, locale)}\r\n \r\n {cartItem.cartFeature.dbFeature.sku && !fabricatorSettings.hideSku ? (\r\n \r\n {`${printContext.messages[\"receipt.content.featureSKU\"]}: ${cartItem.cartFeature.dbFeature.sku}`}\r\n \r\n ) : null}\r\n {cartItem.cartFeature.dbFeature.description ? (\r\n \r\n {cartItem.cartFeature.dbFeature.description}\r\n \r\n ) : null}\r\n \r\n {isMinimumCharge\r\n ? null\r\n : (\r\n \r\n {`${getFeatureQuantity()}: ${toFixedPrice(displayFake ? cartItem.displayFakeQuantity : cartItem.quantity)}`}\r\n \r\n )}\r\n \r\n {hideUnitPrice || isMinimumCharge\r\n ? null\r\n : `${getFeatureUnit(cartItem.cartFeature, fabricatorData, printContext, locale, cartItem.quantity)}: ${getPriceWithCurrency(fabricatorSettings, featurePrice, cartItem.cartFeature)}`}\r\n \r\n {price}\r\n \r\n {cartItem.noteText ? {cartItem.noteText} : null}\r\n \r\n \r\n {bundleProducts.length ? : null}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {getCartItemName(cartItem.cartFeature, fabricatorData, printContext, locale)}\r\n \r\n \r\n {cartItem.cartFeature.dbFeature.sku && !fabricatorSettings.hideSku ? (\r\n \r\n {`${printContext.messages[\"receipt.content.featureSKU\"]}: ${cartItem.cartFeature.dbFeature.sku}`}\r\n \r\n ) : null}\r\n {isMinimumCharge\r\n ? null\r\n : (\r\n \r\n {`${getFeatureQuantity()}: ${toFixedPrice(displayFake ? cartItem.displayFakeQuantity : cartItem.quantity)}`}\r\n \r\n )}\r\n \r\n {hideUnitPrice || isMinimumCharge\r\n ? null\r\n : `${getFeatureUnit(cartItem.cartFeature, fabricatorData, printContext, locale, cartItem.quantity)}: ${getPriceWithCurrency(fabricatorSettings, featurePrice, cartItem.cartFeature)}`}\r\n \r\n {price}\r\n \r\n {cartItem.noteText ? {cartItem.noteText} : null}\r\n \r\n \r\n {bundleProducts.length ? : null}\r\n \r\n\r\n )\r\n};\r\n\r\nPrintDocumentBodyCartItem.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyCartItem\r\n\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const filterGroupInterface = {\r\n id: PropTypes.number.isRequired,\r\n name: PropTypes.string,\r\n type: PropTypes.string,\r\n values: PropTypes.array,\r\n visualType: PropTypes.string,\r\n}\r\n\r\nexport const filterValueInterface = {\r\n id: PropTypes.number.isRequired,\r\n additionalImages: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\r\n displayText: PropTypes.string,\r\n filterGroup_id: PropTypes.number,\r\n icon: PropTypes.string,\r\n lockedInWizard: PropTypes.bool,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n}\r\n\r\nexport const navigationFilterValueInterface = {\r\n filterId: PropTypes.number.isRequired,\r\n filterGroupId: PropTypes.number.isRequired,\r\n}\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getMousePositionOnField} from \"../../../../../helpers/sqftHelper\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\n\r\nexport default class Movable {\r\n\r\n state = {\r\n hoveringOnlyShape: false,\r\n mouseDown: false,\r\n mouseDownWithChildren: false,\r\n mouseDownPosition: null,\r\n hovering: false,\r\n hoveringWithChildren: false,\r\n handlerHold: null\r\n };\r\n _posX;\r\n _posY;\r\n _width;\r\n _height;\r\n isResizedByPoint = false;\r\n priority;\r\n parent;\r\n grandParent;\r\n moveCallback = null;\r\n mouseUpCallback = null;\r\n mouseDownCallback = null;\r\n\r\n constructor(posX,\r\n posY,\r\n width,\r\n height,\r\n priority = EventManager.priorities.IMAGE,\r\n parent = null,\r\n grandParent = null,\r\n moveCallback = null,\r\n mouseUpCallback = null,\r\n mouseDownCallback = null\r\n ) {\r\n this.priority = priority;\r\n this.parent = parent;\r\n this.grandParent = grandParent;\r\n this.moveCallback = moveCallback;\r\n this.mouseUpCallback = mouseUpCallback;\r\n this.mouseDownCallback = mouseDownCallback;\r\n\r\n this.initEvents();\r\n this._posX = posX;\r\n this._posY = posY;\r\n this._width = width;\r\n this._height = height;\r\n }\r\n\r\n get posX() {\r\n return this._posX;\r\n }\r\n\r\n set posX(value) {\r\n this._posX = value;\r\n }\r\n\r\n get posY() {\r\n return this._posY;\r\n }\r\n\r\n set posY(value) {\r\n this._posY = value;\r\n }\r\n\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n set width(value) {\r\n this._width = value;\r\n }\r\n\r\n get height() {\r\n return this._height;\r\n }\r\n\r\n set height(value) {\r\n this._height = value;\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.priority\r\n );\r\n }\r\n\r\n deregisterEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n }\r\n\r\n onMouseMove(mousePos, e) {\r\n if (e.terminate && !this.state.mouseDown) {\r\n this.setHoveringOnlyShape(false);\r\n\r\n return this.setHovering(false);\r\n }\r\n\r\n if (this.state.mouseDown) {\r\n EventManager.setCursor('move', this, true);\r\n if (this.moveCallback) {\r\n this.moveCallback(mousePos, this);\r\n } else {\r\n this.movePosition(mousePos);\r\n }\r\n }\r\n\r\n if (this.isMouseOverArea(mousePos)) {\r\n this.setHovering(true);\r\n\r\n EventManager.setCursor('move', this);\r\n return this.state.mouseDown;\r\n }\r\n if (this.parent.points !== undefined) { // todo this should be children not points\r\n for (const point in this.parent.points) {\r\n if (this.parent.points.hasOwnProperty(point)) {\r\n if (this.parent.points[point].modelCorePoint.mixins.movable.state.hovering) {\r\n this.setHoveringWithChildren(true);\r\n\r\n return this.state.hoveringWithChildren\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setHovering(false);\r\n this.setHoveringWithChildren(false);\r\n EventManager.resetCursor(this);\r\n\r\n return false;\r\n }\r\n\r\n onMouseUp(mousePos) {\r\n EventManager.releaseStealLock(self);\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n if (this.mouseUpCallback) {\r\n this.mouseUpCallback(mousePos, this);\r\n }\r\n }\r\n\r\n onMouseDown(mousePos, e) {\r\n void e;\r\n if (this.isHovering()) {\r\n //if (EventManager.getCursor().indexOf(\"move\") >= 0) {\r\n this.state.mouseDown = true;\r\n this.state.mouseDownPosition = mousePos;\r\n //}\r\n if (this.mouseDownCallback) {\r\n this.mouseDownCallback(mousePos, this);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n isHovering () { return this.state.hovering === true; }\r\n setHoveringOnlyShape(value) { this.state.hoveringOnlyShape = value; return value; }\r\n setHovering(value) { this.state.hovering = value; return value; }\r\n setHoveringWithChildren(value) { this.state.hoveringWithChildren = value; return value; }\r\n\r\n movePosition(mousePos) {\r\n let scale = workspace.getScale();\r\n let xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n\r\n //todo this should be outside of the class\r\n if (this.parent.params.isResizedByPoint) {\r\n // 0 point\r\n // this.grandParent.posX -= xDiff;\r\n // this.grandParent.posY -= yDiff;\r\n\r\n //3 point\r\n // this.grandParent.posX -= xDiff;\r\n // this.grandParent.mixin.movable.width += xDiff;\r\n // this.posX -= xDiff;\r\n\r\n //4 point\r\n if (this.grandParent.width - xDiff >= this.grandParent.design.minimumWidth) {\r\n this.grandParent.width -= xDiff;\r\n this.grandParent.mixin.movable.width -= xDiff;\r\n this.posX -= xDiff;\r\n\r\n // change p7 x cord\r\n // todo grandParent setter\r\n this.grandParent.points.p7.modelCorePoint.mixins.movable.posX -= xDiff;\r\n\r\n // update textarea width\r\n // todo get from the parent class\r\n\r\n let textarea = document.querySelector('.i-text');\r\n if (textarea) {\r\n let width = textarea.offsetWidth;\r\n width -= xDiff * 4;\r\n textarea.style.width = width + 'px';\r\n }\r\n }\r\n } else if (this.parent.params.isScaledByPoint) {\r\n // 7 point (scaled)\r\n if (this.grandParent.height - (xDiff + yDiff) / 2 >= this.grandParent.design.minimumHeight\r\n && this.grandParent.width - (xDiff + yDiff) / 2 >= this.grandParent.design.minimumWidth\r\n ) {\r\n this.grandParent.width -= (xDiff + yDiff) / 2;\r\n this.grandParent.height -= (xDiff + yDiff) / 2;\r\n this.grandParent.mixin.movable.width -= (xDiff + yDiff) / 2;\r\n this.grandParent.mixin.movable.height -= (xDiff + yDiff) / 2;\r\n\r\n this.posX -= (xDiff + yDiff) / 2;\r\n this.posY -= (xDiff + yDiff) / 2;\r\n\r\n //change point 4 x cord\r\n //todo grandParent setter\r\n this.grandParent.points.p4.modelCorePoint.mixins.movable.posX -= (xDiff + yDiff) / 2;\r\n }\r\n } else {\r\n this.posX -= xDiff;\r\n this.posY -= yDiff;\r\n }\r\n }\r\n\r\n isMouseOverArea (mousePos) {\r\n let offset = this.grandParent && this.grandParent.getPosition && this.grandParent.isLastParent !== true\r\n ? this.grandParent.getPosition()\r\n : {x: 0, y: 0};\r\n\r\n let pointsArray;\r\n\r\n if (this.parent.design !== undefined && this.parent.design.layout === \"resize\") { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x - this.parent.design.radius / 2, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x + this.parent.design.radius / 2, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x + this.parent.design.radius / 2, this.posY + offset.y + this.parent.design.radius / 2],\r\n [this.posX + offset.x - this.parent.design.radius / 2, this.posY + offset.y + this.parent.design.radius / 2],\r\n ];\r\n } else if (this.parent.params && this.parent.params.isCenteredByY) { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + this.width + offset.x, this.posY + offset.y - this.parent.design.radius / 2],\r\n [this.posX + this.width + offset.x, this.posY + this.height + offset.y - this.parent.design.radius / 2],\r\n [this.posX + offset.x, this.posY + this.height + offset.y - this.parent.design.radius / 2],\r\n ];\r\n } else if (this.parent.params && this.parent.params.isCentered) { // centered cords for points\r\n pointsArray = [\r\n [this.posX + offset.x - this.width / 2, this.posY + offset.y - this.height / 2],\r\n [this.posX + offset.x + this.width / 2, this.posY + offset.y - this.height / 2],\r\n [this.posX + offset.x + this.width / 2, this.posY + offset.y + this.height / 2],\r\n [this.posX + offset.x - this.width / 2, this.posY + offset.y + this.height / 2],\r\n ];\r\n } else {\r\n pointsArray = [\r\n [this.posX + offset.x, this.posY + offset.y],\r\n [this.posX + this.width + offset.x, this.posY + offset.y],\r\n [this.posX + this.width + offset.x, this.posY + this.height + offset.y],\r\n [this.posX + offset.x, this.posY + this.height + offset.y],\r\n ];\r\n }\r\n\r\n let posOnField = getMousePositionOnField(mousePos.x, mousePos.y);\r\n\r\n return pnpolyArray(pointsArray, posOnField);\r\n }\r\n\r\n isMouseOverAreaByMousePOs (mousePos) {\r\n let scale = config.scale;\r\n let pointsArray = [\r\n [this.posX, this.posY],\r\n [this.posX + this.width * scale, this.posY],\r\n [this.posX + this.width * scale, this.posY + this.height * scale],\r\n [this.posX, this.posY + this.height * scale],\r\n ];\r\n\r\n return pnpolyArray(pointsArray, mousePos);\r\n }\r\n}\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport $ from \"jquery\";\r\n\r\nexport default class Cursor {\r\n cursorName = null;\r\n addedImages = [];\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n onMouseUp = () => {\r\n this.checkForRestoreCursor();\r\n };\r\n\r\n setCursorImage = (imgSrc) => {\r\n const alreadyAddedImage = this.addedImages.find(image => image.dataset.id === this.clickedEdgeButton.attr(\"data-id\"));\r\n if (alreadyAddedImage) {\r\n this.cursorImage = { image: alreadyAddedImage, width: alreadyAddedImage.width, height: alreadyAddedImage.height };\r\n eventManager.setCursor('edge-select', this, true);\r\n this.registerEvents();\r\n } else {\r\n this.addCursorImage(imgSrc);\r\n }\r\n };\r\n\r\n addCursorImage = (imgSrc) => {\r\n let item = this.clickedBackSplashButton, // remember it to restore after moving canvas cursor switch\r\n bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n void item;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n domImg.dataset.name = \"cursor\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n // $img.attr({\r\n // 'data-id': item.attr('data-id'),\r\n // 'data-name': item.attr('data-name').trim(),\r\n // 'data-name-metric': item.attr('data-name-metric').trim(),\r\n // });\r\n let imgOnLoad = () => {\r\n let bounds = 18, ratio;\r\n if (imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', this, true);\r\n this.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n this.registerEvents(); // only after image is load!\r\n };\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n\r\n config.highlight.type = 'backsplash';\r\n //todo\r\n $img.attr('src', imgSrc);\r\n\r\n // config.highlight.id = item.attr('data-id');\r\n };\r\n\r\n checkForRestoreCursor = () => {\r\n if (this.isWaitingToRestoreCursor) {\r\n this.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(this, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n\r\n //todo\r\n // this.setHighlighting();\r\n this.setCursorImage();\r\n }\r\n };\r\n\r\n renderCursor = function(ctx) {\r\n if(this.cursorImage.image && ($(window).width() > 768)) {\r\n let mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, 18, 18);\r\n }\r\n }\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n //remove render only, but wait for mouse up to set cursor again\r\n //eventManager.removeEvent(this, eventManager.events.RENDER);\r\n\r\n //full remove event\r\n this.deregisterEvents();\r\n this.cursorImage = null;\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n this.cursorImage = null\r\n }\r\n this.hide();\r\n };\r\n\r\n hide = function(e) {\r\n if(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n };\r\n\r\n deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'lodash';\r\n\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport {inchesToMm} from \"../../../../helpers/sqftHelper\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {iconplusPurple} from \"../../../../assetsSQFT\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\n//import TranslatesProvider from \"./../../translatesProvider\";\r\n\r\nexport default new function() {\r\n //private variables\r\n var self = this,\r\n //cursorImage = null,\r\n elements = {\r\n navRadius: $('#nav_radius'),\r\n overlay: $('#radius-overlay'),\r\n arcButtons: $('.lightbox-option-rectangular[data-arc]'),\r\n angleButtons: $('.lightbox-option-rectangular[data-angle]'),\r\n designDefault: $('#design-default'),\r\n closeButton: $('#radius-overlay .lightbox-cancel-button'),\r\n cornerContainer: $('#corner'),\r\n radiusContainer: $('#radius'),\r\n measure: $('[data-measure]')\r\n },\r\n maxRadius = 18,\r\n corners = 60;\r\n\r\n this.clickedBackSplashButton = null;\r\n this.cursorImage = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n //public variables\r\n this.arcLength = 0;\r\n this.angle = 0;\r\n //private events\r\n\r\n this.angleButton_onClick = function() {\r\n self.deregisterEvents();\r\n SqftStore.radius.arcLength = 0;\r\n SqftStore.radius.angle = $(this).attr('data-angle');\r\n self.handleButtonClick($(this));\r\n $('.lightbox-option-selected').removeClass('lightbox-option-selected');\r\n $(this).addClass('lightbox-option-selected');\r\n };\r\n this.arcButton_onClick = function() {\r\n this.deregisterEvents();\r\n SqftStore.radius.angle = 0;\r\n SqftStore.radius.arcLength = $(this).attr('data-arc');\r\n self.handleButtonClick($(this));\r\n $('.lightbox-option-selected').removeClass('lightbox-option-selected');\r\n $(this).addClass('lightbox-option-selected');\r\n };\r\n\r\n this.handleButtonClick = function(item) {\r\n\r\n self.setHighlighting();\r\n self.clickedEdgeButton = item;\r\n self.setCursorImage();\r\n\r\n if (window.innerWidth < 991 && !config.tutorialIsRunning) {\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n }\r\n\r\n // elements.overlay.hide();\r\n };\r\n\r\n this.deregisterEvents = function() {\r\n eventManager.resetCursor(self);\r\n eventManager.removeEvent(self);\r\n elements.navRadius.removeClass('steps-scope-config-button-selected');\r\n // QCDES-1139 fix\r\n //SqftStore.radius.arcLength = 0;\r\n //SqftStore.radius.angle = 0;\r\n config.highlight.points = false;\r\n };\r\n\r\n function createRadiusElements() {\r\n let html = '';\r\n for (let i = 1; i <= maxRadius; i++) {\r\n html +=\r\n ('
    \\n' +\r\n '
    \\n' +\r\n ' \\n' +\r\n '
    ' +\r\n ' '+ i +'\" ' +\r\n ' '+ TranslatesProvider.translate(\"sqft.navigation.radius.radiusItem\") + '' +\r\n '
    \\n' +\r\n '
    ');\r\n }\r\n elements.radiusContainer.html(html);\r\n elements.arcButtons = $('.lightbox-option-rectangular[data-arc]');\r\n }\r\n\r\n function createCornerElements() {\r\n let html = '';\r\n for (let i = 3; i <= corners; i += 3) {\r\n html += ('
    \\n' +\r\n '
    \\n' +\r\n ' \\n' +\r\n ' \\n' +\r\n '
    \\n' +\r\n '
    '+ i +'\"
    \\n' +\r\n '
    ');\r\n }\r\n elements.cornerContainer.html(html);\r\n elements.angleButtons = $('.lightbox-option-rectangular[data-angle]');\r\n }\r\n this.onMeasureUnitChange = () => {\r\n //nodes.buttons.radius\r\n elements.arcButtons.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).find('[data-value=\"radius\"]').html(inchesToMm(+this.dataset.arc) + config.getMeasureUnitPostfix());\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).find('[data-value=\"radius\"]').html(+this.dataset.arc + config.getMeasureUnitPostfix());\r\n }\r\n });\r\n\r\n // nodes.buttons.corner\r\n elements.angleButtons.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).find('[data-value=\"corner\"]').html(inchesToMm(+this.dataset.angle) + config.getMeasureUnitPostfix());\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).find('[data-value=\"corner\"]').html(+this.dataset.angle + config.getMeasureUnitPostfix());\r\n }\r\n });\r\n\r\n elements.measure.each(function () {\r\n switch(config.measureUnit) {\r\n case \"Metric\":\r\n $(this).html($(this).data('metric'));\r\n break;\r\n case \"Imperial\":\r\n default:\r\n $(this).html($(this).data('imperial'));\r\n }\r\n });\r\n };\r\n\r\n this.setCursorImage = function () {\r\n var item = self.clickedEdgeButton, // remember it to restore after moving canvas cursor switch\r\n bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n var domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n var $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n $img.attr({\r\n 'data-id': item//.attr('data-id')\r\n });\r\n $img.on('load', function() {\r\n setImage(domImg);\r\n });\r\n $img.appendTo($('body'));\r\n $img.attr('src', iconplusPurple);\r\n\r\n function setImage(domImg) {\r\n var bounds = 18;\r\n let ratio;\r\n if(imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', self, true);\r\n self.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n self.registerEvents();\r\n }\r\n };\r\n\r\n this.setHighlighting = function () {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n workspace.setAllowMiteredEdges(false); // removing mitered lines\r\n config.highlight.lines = false; // disable lines highlighting\r\n config.highlight.type = ''; // disable lines highlighting\r\n config.highlight.id = null; // disable lines highlighting\r\n };\r\n\r\n this.registerEvents = function() {\r\n eventManager.setCursor('radius-select', self, true);\r\n config.highlight.points = true;\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n self.renderCursor,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n self.onMouseDown,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n self.onMouseUp,\r\n self,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n this.onMouseDown = function() {\r\n let hoverPoint = workspace.getHoverPoint();\r\n //let hoverShape = workspace.getHoverShape();\r\n let hoverMiteredPoint = workspace.getHoverMiteredPoint();\r\n\r\n //update hoverPoint from miteredHoverPoint\r\n if(hoverMiteredPoint) {\r\n let miteredOverlay = hoverMiteredPoint.getParent();\r\n if(\r\n miteredOverlay && miteredOverlay.line && miteredOverlay.line.to\r\n && (miteredOverlay.line.to.isOverPointField()\r\n || miteredOverlay.line.from.isOverPointField())\r\n ){\r\n hoverPoint = miteredOverlay.line.to.isOverPointField() || miteredOverlay.line.from.isOverPointField()\r\n }\r\n }\r\n\r\n if (hoverPoint) {\r\n return true; // return true; // block all mouse-down events // we need dragging workspace\r\n }\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (self.isWaitingToRestoreCursor) {\r\n self.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(self, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n self.setHighlighting();\r\n self.setCursorImage();\r\n }\r\n };\r\n this.onMouseUp = function(mousePos) {\r\n void mousePos;\r\n self.checkForRestoreCursor();\r\n\r\n let hoverPoint = workspace.getHoverPoint(),\r\n hoverShape = workspace.getHoverShape(),\r\n hoverSegmentCorner;\r\n\r\n //click on purple line\r\n if (hoverShape) {\r\n hoverSegmentCorner = hoverShape.getHoverSegmentCorner();\r\n if (hoverSegmentCorner) {\r\n hoverPoint = hoverSegmentCorner.line.to\r\n }\r\n }\r\n\r\n if (hoverPoint && !hoverPoint.angleIsChanged && hoverPoint.isFitSize()) {\r\n if (SqftStore.radius.arcLength) {\r\n hoverPoint.arcLength = SqftStore.radius.arcLength;\r\n hoverPoint.featureId = _.clone(SqftStore.radius.featureId);\r\n hoverPoint.angle = 0;\r\n\r\n } else if (SqftStore.radius.angle) {\r\n hoverPoint.angle = SqftStore.radius.angle;\r\n hoverPoint.featureId = _.clone(SqftStore.radius.featureId);\r\n hoverPoint.arcLength = 0;\r\n }\r\n //update mitered points\r\n sqftShapeManager.updateMinMaxMiteredPoints(hoverShape);\r\n //reset seam shape changes in the slab mode\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(hoverShape);\r\n //update hoverMiteredPoint position\r\n let hoverMiteredPoint = workspace.getHoverMiteredPoint();\r\n if (hoverMiteredPoint) {\r\n hoverMiteredPoint.getParent().movePoint(0, 0, hoverMiteredPoint);\r\n hoverMiteredPoint.getParent().moveMeasurements(hoverMiteredPoint);\r\n //todo sqft-react\r\n //Menu.miteredController.updateInfo();\r\n }\r\n return false;\r\n } else if (hoverShape) {\r\n //Menu.openMenu();\r\n //return true; // if click on shape, block reseting cursor, because we still need it http://jira.mozidev.com/browse/QC-956\r\n }/* else {\r\n deregisterEvents();\r\n elements.designDefault.click();\r\n }*/\r\n\r\n };\r\n this.destroy = function(protect, revertBackAfterMouseUp) {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n this.hide();\r\n };\r\n this.hide = function(e) {\r\n if(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n //Menu.hideSideBarContent(); // hide sidebar menu\r\n };\r\n\r\n //public functions\r\n this.init = function() {\r\n // elements.navRadius.click(navRadius_onClick);\r\n createRadiusElements();\r\n createCornerElements();\r\n\r\n elements.arcButtons.click(self.arcButton_onClick);\r\n elements.angleButtons.click(self.angleButton_onClick);\r\n };\r\n\r\n this.renderCursor = function(ctx) {\r\n // if((this.arcLength > 0) && ($(window).width() > 768)) {\r\n // var mPos = eventManager.LastKnownMousePos;\r\n // if(mPos) {\r\n // ctx.save();\r\n // ctx.font = \"18px \" + config.activeFontBold;\r\n // ctx.fillStyle = \"#B263A8\";\r\n // ctx.fillText(\"r\" + new Fraction(this.arcLength) + \"\\\"\", mPos.x + (12 * config.scale), mPos.y + 9);\r\n // ctx.restore();\r\n // }\r\n // }\r\n if(self.cursorImage && self.cursorImage.image && (this.arcLength > 0 || this.angle > 0) && ($(window).width() > 768)) {\r\n var mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(self.cursorImage.image, mPos.x + 10, mPos.y + 10, self.cursorImage.width, self.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {\r\n getPointDistance,\r\n measureDistanceToInches,\r\n getFontsize, getAngleBetweenTwoPoints, getParallelPoints, getPointField\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport store from \"../../../../../../../store\";\r\nimport {setSQFTContextMenu} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport {iconGreenClip} from \"../../../../../assetsSQFT\";\r\nimport sqftShape from \"../sqftShape\";\r\nimport {SIDEBAR_BUTTONS_MENU} from \"../../../../../constants\";\r\nimport {COLOR} from \"../../../store/colorThemes\";\r\n\r\nexport default function(initialState = {}) {\r\n let self = this,\r\n state = {\r\n ...{\r\n labelText: '',\r\n labelTextColor: '#3e3e3e',\r\n textWidth: 0,\r\n isHovered: false,\r\n imageSrc: iconGreenClip,\r\n lineOffset: 13,\r\n flagMargin: 2,\r\n partId: undefined,\r\n isTitle: false,\r\n midPoint: {\r\n x: 0,\r\n y: 0\r\n }\r\n },\r\n ...initialState\r\n },\r\n line = null,\r\n shape = null;\r\n\r\n const svgCache = {};\r\n\r\n function setLine(value) { line = value; }\r\n function setShape(value) { shape = value; }\r\n function getMidPoint(from, to) {\r\n return {\r\n x: from.x + (to.x - from.x)/2,\r\n y: from.y + (to.y - from.y)/2\r\n };\r\n }\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n const {isHovered, orientation} = isMouseOverText(mousePos);\r\n state.isHovered = isHovered;\r\n if (state.isHovered) {\r\n if (EventManager.getCursor().indexOf(\"move\") >= 0) {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor((orientation === \"horizontal\") ? \"text\" : \"text-vertical\", self);\r\n }\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n }\r\n function onMouseDown(mousePos, e) {\r\n if (state.isHovered) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n //Delete label\r\n if (activeButton !== SIDEBAR_BUTTONS_MENU.delete) {\r\n void e;\r\n window.lineInputFocused = false;\r\n EventManager.stealCursor();\r\n EventManager.resetCursor(self);\r\n\r\n store.dispatch(setSQFTContextMenu({isOpened: true, activeMenu: \"labels\", pos: mousePos, parent: shape}));\r\n }\r\n\r\n return true\r\n }\r\n }\r\n function isMouseOverText(mousePos) {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n let lineOffset = [];\r\n if (lineDirection.orientation === \"horizontal\") {\r\n lineOffset = lineDirection.newDirection === \"west\" ? -state.lineOffset : state.lineOffset;\r\n pointsArray = [\r\n [state.midPoint.x - state.textWidth/2 - 10, state.midPoint.y - 15 + lineOffset],\r\n [state.midPoint.x + state.textWidth/2 + 10, state.midPoint.y - 15 + lineOffset],\r\n [state.midPoint.x + state.textWidth/2 + 10, state.midPoint.y + 10 + lineOffset],\r\n [state.midPoint.x - state.textWidth/2 - 10, state.midPoint.y + 10 + lineOffset],\r\n ]\r\n // pointsArray.forEach(p => {\r\n // var tempPoint = new point(p[0], p[1]);\r\n // tempPoint.init(line);\r\n // tempPoint.layout = 'white-circle';\r\n // debugger\r\n // })\r\n } else if (lineDirection.orientation === \"vertical\") {\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [state.midPoint.x + 40, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y + state.textWidth/2 - 5],\r\n [state.midPoint.x + 40, state.midPoint.y + state.textWidth/2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [state.midPoint.x - 40, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y - state.textWidth/2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y + state.textWidth/2 - 5],\r\n [state.midPoint.x - 40, state.midPoint.y + state.textWidth/2 - 5],\r\n ];\r\n }\r\n } else {\r\n // todo rotation hover\r\n }\r\n return {isHovered: pnpolyArray(pointsArray, mousePos), orientation: lineDirection.orientation};\r\n }\r\n\r\n this.getState = () => { return state }\r\n this.isHovered = () => { return state.isHovered }\r\n this.destroy = function(protect) {\r\n if(!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n };\r\n this.getParent = () => {\r\n return line\r\n }\r\n this.setLabelText = (value) => {\r\n state.labelText = value;\r\n };\r\n this.setPartId = (value) => {\r\n state.partId = value;\r\n };\r\n this.import = function(data) {\r\n state = data.state;\r\n };\r\n this.export = function() {\r\n return { state: cloneDeep(state) }\r\n };\r\n this.init = function(line, text, partId) {\r\n setLine(line);\r\n //todo sqft-react\r\n setShape(line.getParent());\r\n void shape;\r\n\r\n this.setPartId(partId);\r\n this.setLabelText(text);\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.initEvents = (editable = true) => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n if (editable) {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SHAPE_LABEL\r\n );\r\n }\r\n }\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.deregisterPartEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitPartEvents = () => {\r\n this.initEvents(!state.isTitle);\r\n };\r\n this.getLineLength = function () {\r\n var distance = getPointDistance(line.from, line.to);\r\n return measureDistanceToInches(distance);\r\n };\r\n this.isIE = function() {\r\n return(/Trident/i).test(window.navigator.appVersion);\r\n };\r\n this.getSrc = function(img) {\r\n if(img) {\r\n let src = img.getAttribute('src');\r\n if(src) {\r\n return src;\r\n }\r\n src = img.getAttribute(\"style\");\r\n if(src) {\r\n return src.replace(/background-image: url\\(\"\\/api\\/SqFtCalc\\/GetImage\\?url=/g, \"\").replace(/\"\\);/g, \"\");\r\n }\r\n }\r\n return \"\";\r\n };\r\n\r\n this.renderImage = (ctx, x, y) => {\r\n if (state.isTitle) return;\r\n\r\n let scale = config.scale;\r\n let size = { width: 5, height: 5 };\r\n let posX = x - size.width * scale;\r\n let posY = y - size.height * scale;\r\n\r\n if (svgCache['iconGreenClip']) {\r\n let img = svgCache['iconGreenClip'];\r\n ctx.drawImage(img, posX, posY, size.width * scale, size.height * scale);\r\n } else {\r\n let img = new Image();\r\n let svg = document.getElementById('icon-label-flag');\r\n\r\n if (svg) {\r\n let xml = new XMLSerializer().serializeToString(svg);\r\n let svg64 = btoa(xml);\r\n\r\n img.src = 'data:image/svg+xml;base64,' + svg64;\r\n\r\n img.onload = () => {\r\n svgCache['iconGreenClip'] = img;\r\n ctx.drawImage(img, posX, posY, size.width * scale, size.height * scale);\r\n };\r\n\r\n img.onerror = () => {\r\n console.warn(\"Failed to load SVG image, using fallback.\");\r\n // ctx.fillStyle = '#FF0000'; // Фолбек в виде красного квадрата\r\n // ctx.fillRect(x - 10, y - 10, 20, 20);\r\n };\r\n }\r\n }\r\n };\r\n\r\n this.render = function(ctx) {\r\n let scale = config.scale,\r\n fontSize = getFontsize(),\r\n font = (fontSize).toString() + \"px \" + config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n offset = line.getOffset(),\r\n dString = state.labelText,\r\n midPoint = getMidPoint(line.from, line.to),\r\n mText,\r\n lineOffset = 0,\r\n xOffset = 0,\r\n marginTo = 0;\r\n\r\n ctx.beginPath();\r\n\r\n ctx.font = font;\r\n mText = ctx.measureText(dString);\r\n state.textWidth = Math.round(mText.width * 100) / 100;\r\n midPoint.y = midPoint.y * scale + offset.y;\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n state.midPoint.x = midPoint.x;\r\n state.midPoint.y = midPoint.y;\r\n ctx.textAlign = \"center\";\r\n midPoint.y += fontSize / 2;\r\n\r\n ctx.beginPath();\r\n ctx.fillStyle = state.isHovered ? COLOR.red : state.labelTextColor;\r\n\r\n let moveFrom, moveTo;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n lineOffset = lineDirection.newDirection === \"west\" ? -state.lineOffset : state.lineOffset;\r\n ctx.wrapText(dString, midPoint.x, midPoint.y + lineOffset, mText, fontSize);\r\n this.renderImage(ctx,midPoint.x - mText.width / 2 - state.flagMargin, midPoint.y + lineOffset);\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n marginTo = (lineDirection.cornerMargins.fromBottom) ? marginTo + 9 : marginTo;\r\n } else if (lineDirection.newDirection === \"north\") {\r\n marginTo = (lineDirection.cornerMargins.fromTop) ? marginTo + 9 : marginTo;\r\n }\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y - 5 : midPoint.y - 10\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n lineOffset = lineDirection.newDirection === \"south\" ? state.lineOffset : state.lineOffset ;\r\n\r\n ctx.wrapText(dString, marginTo,lineOffset + fontSize, mText, fontSize);\r\n this.renderImage(ctx,marginTo - mText.width / 2, lineOffset + fontSize);\r\n break;\r\n }\r\n //todo\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n ctx.save();\r\n const mText = ctx.measureText(dString);\r\n const angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n [moveFrom, moveTo] = getParallelPoints(line.from, line.to, 6);\r\n const midPoint = getMidPoint(moveFrom, moveTo);\r\n //todo not sure why shape here becomes null after clicking on eyeball\r\n if (!(shape instanceof(sqftShape))) {\r\n shape = line.getParent();\r\n }\r\n const midPointPointField = getPointField(midPoint.x, midPoint.y, shape);\r\n ctx.save();\r\n ctx.translate(\r\n midPointPointField.x,\r\n midPointPointField.y,\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n\r\n ctx.wrapText(dString, 0, 0, mText, fontSize);\r\n this.renderImage(ctx,0 - mText.width / 2, 0);\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n ctx.restore();\r\n };\r\n}\r\n","import * as uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {FREE_DRAW_TYPE, SIDEBAR_BUTTONS_MENU, SIDEBAR_NAVIGATION_CABINET_BUTTONS} from \"../../../../constants\";\r\nimport RenderFreeDraw from \"../../helpers/renderFreeDraw\";\r\nimport {COLORS} from \"../../../../../../colorThemes\";\r\nimport NumberText from \"../workspace/text/numberText\";\r\nimport workspace from \"../workspace\";\r\nimport {getPointField} from \"../../../../helpers/sqftHelper\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport store from \"../../../../../../store\";\r\nimport {getWallLockedPoint} from \"../../helpers/wallHelper\";\r\nimport {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport {getBordersOfTwoPoints, getLineBordersArrayV2} from \"../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\n\r\nexport default class Wall {\r\n dimensionToMouse = null;\r\n id;\r\n state = {\r\n addedPoints: [],\r\n dimensions: [],\r\n drawLineToMouse: false,\r\n lineThickness: 10,\r\n lineColor: COLORS.gray,\r\n outlineColor: COLORS.gray4,\r\n minLineLength: 15,\r\n drawType: FREE_DRAW_TYPE.wall,\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n lockedAngleStep: 45,\r\n };\r\n editState = {\r\n editPoint: null,\r\n isInEditState: false,\r\n }\r\n\r\n getPoints() { return this.state.addedPoints }\r\n setEditMode(value) { this.editState.isInEditState = value}\r\n setEditPoint(point) { this.editState.editPoint = point}\r\n getOffset() { return workspace.getOffset() }\r\n getWallThickness() { return workspace.getOffset() }\r\n\r\n constructor(points, centerPoint, lockedAngleStep = 45) {\r\n this.id = uuid.v4();\r\n this.state.addedPoints = points\r\n this.state.centerPoint = centerPoint\r\n this.state.lockedAngleStep = lockedAngleStep\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n this.destroyPoints();\r\n }\r\n\r\n destroyPoints() {\r\n for (const addedPoints of this.state.addedPoints) {\r\n addedPoints.destroy()\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n eventManager.removeEvent(this);\r\n }\r\n\r\n editWall(point) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall) {\r\n this.setEditMode(true);\r\n this.setEditPoint(point);\r\n }\r\n }\r\n\r\n disableEditingWall() {\r\n this.setEditMode(false);\r\n this.setEditPoint(null);\r\n }\r\n\r\n createDimensionToMouse() {\r\n this.dimensionToMouse = new NumberText(\r\n 0,\r\n {x: 0, y: 0},\r\n {shouldRenderFrameBorder: true, isLength: true},\r\n workspace,\r\n Function(),\r\n true\r\n );\r\n }\r\n\r\n onMouseDown(mousePos) {\r\n if (this.editState.editPoint && this.editState.isInEditState) {\r\n this.addPoint(mousePos);\r\n this.disableEditingWall();\r\n return true\r\n }\r\n if (this.state.isHovering) {\r\n const reduxState = store.getState();\r\n if (reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n workspaceControllers.walls.destroyResource(this)\r\n }\r\n }\r\n }\r\n\r\n onMouseMove(mousePos) {\r\n this.state.isHovering = this.isMouseOverWall(mousePos) || this.state.mouseDown;\r\n }\r\n\r\n isMouseOverWall(mousePos) {\r\n for (const addedPointKey in this.state.addedPoints) {\r\n const nextPoint = this.state.addedPoints[+addedPointKey +1];\r\n if (nextPoint) {\r\n const currentPoint = this.state.addedPoints[+addedPointKey];\r\n const lineFieldArray = getLineBordersArrayV2(currentPoint, nextPoint, this.state.lineThickness + this.state.lineThickness * 0.1);\r\n if (isPointInsidePolygon(mousePos, lineFieldArray)) {\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n }\r\n\r\n addPoint(mousePos) {\r\n const wallLockedPoint = getWallLockedPoint(this.editState.editPoint, mousePos, this.state.lockedAngleStep);\r\n if (this.state.addedPoints.length > 0) {\r\n //todo\r\n //this.addLineDimensions(point, mousePos);\r\n }\r\n if (this.editState.editPoint.id === this.state.addedPoints[0].id) {\r\n this.state.addedPoints.unshift(wallLockedPoint);\r\n } else {\r\n this.state.addedPoints.push(wallLockedPoint);\r\n }\r\n }\r\n\r\n getLines() {\r\n let lines = [];\r\n const points = this.getPoints();\r\n for (const pointIndex in points) {\r\n const len = points.length;\r\n const current = points[+pointIndex];\r\n //const previous = points[(pointIndex + len - 1) % len];\r\n const next = points[(pointIndex + 1) % len];\r\n let line = {\r\n from: current,\r\n to: next,\r\n getOffset: () => {\r\n return this.getOffset()\r\n }\r\n }\r\n lines.push(line);\r\n }\r\n\r\n return lines\r\n }\r\n\r\n getBordersOfWallLines() {\r\n let virtualLines = [];\r\n const points = this.getPoints();\r\n for (const addedPointKey in points) {\r\n const nextPoint = points[+addedPointKey +1];\r\n if (nextPoint) {\r\n const currentPoint = points[+addedPointKey];\r\n virtualLines.push(...getBordersOfTwoPoints(currentPoint, nextPoint, this.state.lineThickness / 2));\r\n }\r\n }\r\n return virtualLines\r\n }\r\n\r\n render(ctx) {\r\n ctx.save();\r\n this.renderLines(ctx);\r\n ctx.restore();\r\n //this.updateDimensionToMouse(ctx);\r\n if (this.editState.editPoint && this.editState.isInEditState) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouse(ctx, this.editState.editPoint, true);\r\n }\r\n }\r\n\r\n renderLines(ctx) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n ctx.lineWidth = this.state.lineThickness + 2;\r\n ctx.strokeStyle = this.state.outlineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, this.state);\r\n\r\n ctx.lineWidth = this.state.lineThickness;\r\n ctx.strokeStyle = this.state.isHovering && activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ? COLORS.red\r\n : this.state.lineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, this.state);\r\n }\r\n\r\n renderDimensionToMouseFromPoint = (ctx, point) => {\r\n let posX = point.modelCorePoint.mixins.movable.posX;\r\n let posY = point.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n const mPos = EventManager.LastKnownMousePos;\r\n ctx.lineTo(mPos.x, mPos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n}\r\n","import {getPointField} from \"../../../helpers/sqftHelper\";\r\nimport EventManager from \"../store/sqftEventManager\";\r\nimport {FREE_DRAW_TYPE, SIDEBAR_NAVIGATION_CABINET_BUTTONS, SIDEBAR_SHAPE_BUTTONS} from \"../../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport {getLockPointPos} from \"./freeDrawHelper\";\r\n\r\nexport default class RenderFreeDraw {\r\n\r\n static drawLines = (ctx, state) => {\r\n for (let i = 0; i < state.addedPoints.length; i++) {\r\n if (state.addedPoints[i + 1] !== undefined) {\r\n let posX = state.addedPoints[i].modelCorePoint.mixins.movable.posX;\r\n let posY = state.addedPoints[i].modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n\r\n posX = state.addedPoints[i + 1].modelCorePoint.mixins.movable.posX;\r\n posY = state.addedPoints[i + 1].modelCorePoint.mixins.movable.posY;\r\n let nextPointField = getPointField(posX, posY);\r\n // let pointField = state.addedPoints[i].getPointCords();\r\n // let nextPointField = state.addedPoints[i + 1].getPointCords();\r\n if (i === 0) {\r\n ctx.moveTo(pointField.x, pointField.y);\r\n }\r\n ctx.lineTo(nextPointField.x, nextPointField.y);\r\n }\r\n }\r\n }\r\n\r\n static drawLastLine = (ctx, state) => {\r\n let posX = state.addedPoints[0].modelCorePoint.mixins.movable.posX;\r\n let posY = state.addedPoints[0].modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n\r\n ctx.lineTo(pointField.x, pointField.y);\r\n }\r\n\r\n static drawLineFromPointV2ToMouse = (ctx, pointV2, shouldUseLockedMode = false) => {\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n\r\n if ((shouldUseLockedMode && isWallsLockMode && activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.wall)\r\n || (shouldUseLockedMode && activeButton === SIDEBAR_SHAPE_BUTTONS.freeDraw)\r\n ) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouseLocked(ctx, pointV2);\r\n } else {\r\n RenderFreeDraw.drawLineFromPointV2ToMouseFree(ctx, pointV2);\r\n }\r\n }\r\n\r\n static drawLineFromPointV2ToMouseFree = (ctx, pointV2) => {\r\n ctx.beginPath();\r\n let posX = pointV2.modelCorePoint.mixins.movable.posX;\r\n let posY = pointV2.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n const mousePos = EventManager.LastKnownMousePos;\r\n ctx.lineTo(mousePos.x, mousePos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n static drawLineFromPointV2ToMouseLocked = (ctx, pointV2, lockedAngleStep = 45 ) => {\r\n const lockPointPos = getLockPointPos(pointV2, lockedAngleStep);\r\n\r\n ctx.beginPath();\r\n let posX = pointV2.modelCorePoint.mixins.movable.posX;\r\n let posY = pointV2.modelCorePoint.mixins.movable.posY;\r\n let pointField = getPointField(posX, posY);\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n ctx.lineTo(lockPointPos.x, lockPointPos.y);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n // static renderCursor = (ctx) => {\r\n // if (RenderFreeDraw.cursorImage && this.cursorImage.image && (this.arcLength > 0 || this.angle > 0) && ($(window).width() > 768)) {\r\n // let mPos = EventManager.LastKnownMousePos;\r\n // if (mPos) {\r\n // ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, this.cursorImage.width, this.cursorImage.height);\r\n // }\r\n // }\r\n // };\r\n\r\n static renderLinesBetweenPoints = (ctx, state) => {\r\n ctx.beginPath();\r\n RenderFreeDraw.drawLines(ctx, state);\r\n ctx.stroke();\r\n // if (state.isDrawFinished) {\r\n // RenderFreeDraw.drawLastLine(ctx, state);\r\n // } else\r\n if (state.drawLineToMouse && state.addedPoints.length !== 0 ) {\r\n RenderFreeDraw.drawLineFromPointV2ToMouse(ctx, state.addedPoints[state.addedPoints.length -1], state.useLockedPoints)\r\n }\r\n };\r\n\r\n static render = (ctx, state) => {\r\n RenderFreeDraw.renderLines(ctx, state);\r\n //RenderFreeDraw.updateDimensionToMouse(ctx, state);\r\n };\r\n\r\n static renderLines = (ctx, state) => {\r\n //RenderFreeDraw.renderCursor(ctx);\r\n if (state.drawType === FREE_DRAW_TYPE.wall) {\r\n ctx.lineWidth = state.lineWidth + 2;\r\n ctx.strokeStyle = state.outlineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, state);\r\n }\r\n ctx.lineWidth = state.lineWidth;\r\n ctx.strokeStyle = state.lineColor;\r\n RenderFreeDraw.renderLinesBetweenPoints(ctx, state);\r\n };\r\n\r\n // static renderDimensionToMouse = (ctx, state) => {\r\n // if (state.dimensionToMouse.value > state.minLineLength) {\r\n // state.dimensionToMouse.pos.betweenPoints.pointFrom = state.addedPoints[state.addedPoints.length - 1]\r\n // state.dimensionToMouse.pos.betweenPoints.pointTo = getMousePositionOnField(\r\n // EventManager.LastKnownMousePos.x,\r\n // EventManager.LastKnownMousePos.y\r\n // );\r\n // //state.dimensionToMouse.render(ctx);\r\n // }\r\n // };\r\n}\r\n","import EventManager from \"../store/sqftEventManager\";\r\nimport store from \"../../../../../store\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftConfig from \"../store/sqftConfig\";\r\nimport {getLockPointPos} from \"./freeDrawHelper\";\r\nimport {getMousePositionOnField} from \"../../../helpers/sqftHelper\";\r\nimport workspaceControllers from \"../store/workspaceControllers\";\r\n\r\n/**\r\n * @param pos {{x: int, y: int}}\r\n * @return {PointV2}\r\n */\r\nexport const getWallPoint = (pos) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: true,\r\n moveCallback: (mousePos, movablePoint, xDiff, yDiff) => {\r\n void yDiff;\r\n const reduxState = store.getState();\r\n const isWallsUpMode = reduxState.sqftMenuState.isWallsUpMode;\r\n if (!isWallsUpMode) {\r\n movablePoint.movePosition(mousePos);\r\n }\r\n },\r\n mouseUpCallback: (mousePos, movablePoint) => {\r\n void mousePos;\r\n void movablePoint;\r\n //console.log('mousePos', mousePos);\r\n //console.log('movablePoint', movablePoint);\r\n },\r\n mouseDownCallback: (mousePos, movablePoint) => {\r\n //console.log('mouseDownCallback mousePos', mousePos);\r\n //console.log('mouseDownCallback movablePoint', movablePoint);\r\n void mousePos; void movablePoint;\r\n const reduxState = store.getState();\r\n const isWallsUpMode = reduxState.sqftMenuState.isWallsUpMode;\r\n if (isWallsUpMode) {\r\n const wall = workspaceControllers.walls.getWallByPoint(movablePoint.parent);\r\n wall.editWall(movablePoint.parent);\r\n return true\r\n }\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 10,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n\r\n let wPos = workspace.getPosition();\r\n let scale = sqftConfig.scale;\r\n let offset = {\r\n x: (pos.x + wPos.x) / scale,\r\n y: (pos.y + wPos.y) / scale\r\n };\r\n\r\n return new PointV2(offset.x, offset.y, workspace, pointState, pointDesign);\r\n}\r\n\r\n/**\r\n * @param existingWallPoint {PointV2}\r\n * @param mousePos {{x: int, y: int}}\r\n * @param lockedAngleStep\r\n * @return {PointV2}\r\n */\r\nexport const getWallLockedPoint = (existingWallPoint, mousePos, lockedAngleStep = 45) => {\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n const newWallPoint = getWallPoint(mousePos);\r\n if (isWallsLockMode) {\r\n const lockedPosition = getLockPointPos(existingWallPoint, lockedAngleStep);\r\n const lockedPositionOnField = getMousePositionOnField(lockedPosition.x, lockedPosition.y);\r\n newWallPoint.setPosition(lockedPositionOnField);\r\n }\r\n\r\n return newWallPoint\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {\r\n RENDER_TEMPLATES,\r\n SIDEBAR_BUTTONS_MENU, SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS\r\n} from \"../../../../../constants\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport store from \"../../../../../../../store\";\r\nimport RenderCabinets from \"../../../helpers/renderCabinets\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport Config from \"../../../../../../../config\";\r\nimport {\r\n canShapeBeAutoShifted,\r\n getIsShapePlacedOnTheFloor,\r\n getIsShapePlacedOnTheWall\r\n} from \"../../../../../helpers/shapeHelper\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\n\r\nclass ShapeCabinet {\r\n __shape;\r\n __crownMoldingFeatureId = null;\r\n __crownMoldingParams = {\r\n distance: 10\r\n }\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data\r\n }\r\n\r\n export = () => {\r\n return {\r\n width: this.getShapeWidth(),\r\n height: this.getShapeHeight(),\r\n depth: this.getShapeDepth(),\r\n }\r\n }\r\n\r\n getShapeWidth = () => {\r\n return this.__shape.getWidth(true);\r\n }\r\n\r\n getShapeDepth = () => {\r\n return this.__shape.getDepth(true);\r\n }\r\n\r\n getShapeHeight = () => {\r\n return this.__shape.getHeight(true);\r\n }\r\n\r\n addCrownMolding = () => {\r\n const state = store.getState();\r\n const selectedFeature = state.sqftResourceState.selectedFeature;\r\n this.__crownMoldingFeatureId = selectedFeature ? selectedFeature.part.dbFeature.id : null\r\n console.log(\"this.__crownMoldingFeatureId\", this.__crownMoldingFeatureId);\r\n }\r\n\r\n render = (ctx, staticOffset = null, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n const fillTemplate = this.getFillColor(ctx);\r\n this.renderBorders(ctx, staticOffset, template, fillTemplate);\r\n this.renderDimensionsInsideShape(ctx);\r\n RenderParts.drawShapeCrownMoldings(ctx, staticOffset, this.__shape);\r\n RenderParts.drawShapeEndCap(ctx, staticOffset, this.__shape);\r\n this.renderHandles(ctx);\r\n //if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n if (this.__shape.shapeAbsolute.getSnappedShapeGroup() === null) {\r\n //this.renderCrownMolding(ctx);\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n if (Config.isDevMode()) {\r\n this.renderTestShapeLines(ctx, staticOffset, template);\r\n this.renderShapeSnappedGroup(ctx, staticOffset, template);\r\n }\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10);\r\n }\r\n\r\n renderTestShapeLines = (ctx) => {\r\n if (this.__shape.testShapeLines) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLORS.gray;\r\n for (const testShapeLine of this.__shape.testShapeLines) {\r\n ctx.moveTo(testShapeLine.from.x, testShapeLine.from.y);\r\n ctx.lineTo(testShapeLine.to.x, testShapeLine.to.y);\r\n }\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n }\r\n\r\n renderShapeSnappedGroup = (ctx) => {\r\n // render shape group\r\n let shapeCenter = this.__shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n const renderText = this.__shape.shapeAbsolute.getSnappedShapeGroup() + \".gr\";\r\n const mText = ctx.measureText(renderText);\r\n ctx.wrapText(renderText, pos.x, pos.y, mText, 22);\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n renderDimensionsInsideShape = (ctx) => {\r\n const shapeWidth = this.getShapeWidth();\r\n const shapeHeight = this.getShapeHeight();\r\n const textWidth = 'W: ' + shapeWidth;\r\n const textHeight = 'H: ' + shapeHeight;\r\n const fontSize = config.workspace.fontSizeSmallest;// * config.scale / config.defaultScale;\r\n const font = fontSize + \"px \" + config.activeFontRegular;\r\n const mTextWidth = ctx.measureText(textWidth);\r\n const mTextHeight = ctx.measureText(textWidth);\r\n const {minX, maxX, minY, maxY} = sqftShapeManager.getMinMaxShapePoints(this.__shape,true, true);\r\n void minY;\r\n //middle of the bottom line\r\n let pos = {\r\n x: minX + (maxX - minX) / 2 - mTextWidth.width / 2,\r\n y: maxY - fontSize\r\n };\r\n\r\n // center position\r\n // let shapeCenter = ShapeHelper.getCenterPoint(points);\r\n // let shapeCenterOnField = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n // let pos = {\r\n // x: shapeCenterOnField.x - mTextWidth.width / 2,\r\n // y: shapeCenterOnField.y\r\n // };\r\n\r\n ctx.textAlign = \"start\";\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n\r\n const lineHeight = config.workspace.fontSizeSmallest;\r\n ctx.wrapText(textWidth, pos.x, pos.y - (fontSize / 2), mTextWidth, lineHeight, font);\r\n ctx.wrapText(textHeight, pos.x + 2, pos.y + (fontSize / 2), mTextHeight, lineHeight, font);\r\n }\r\n\r\n getFillColor = () => {\r\n // highlight shape on eyeball click\r\n if (this.__shape.shapeRender.blink.isHighlightedLightOn) {\r\n return RENDER_TEMPLATES.filledActive;\r\n } else {\r\n return RENDER_TEMPLATES.filledPrimary;\r\n }\r\n }\r\n\r\n renderBorders = (ctx,\r\n staticOffset = null,\r\n strokeTemplate= RENDER_TEMPLATES.default,\r\n fillTemplate = RENDER_TEMPLATES.filledPrimary\r\n ) => {\r\n RenderParts.drawShapeBorders(ctx, staticOffset, strokeTemplate, fillTemplate, this.__shape);\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.handles\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.spacer\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.crown\r\n || activeButton === SIDEBAR_NAVIGATION_BUTTONS.end_cap\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.resize\r\n || activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n ) {\r\n RenderParts.drawHoveredBorders(ctx, staticOffset, this.__shape);\r\n\r\n // Highlight possibility to insert shape between lines\r\n } else if (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.upper\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.lower\r\n || activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.tall\r\n || workspace.getMovingShape()\r\n ) {\r\n const movingShape = workspace.getMovingShape();\r\n const isTestShapePlacedOnTheFloor = getIsShapePlacedOnTheFloor(this.__shape);\r\n const isTestShapePlacedOnTheWall = getIsShapePlacedOnTheWall(this.__shape);\r\n //1. Highlight moving shape if their part ids are equal\r\n //2. Highlight upper shapes if we are dragging new upper cabinet shape\r\n //3. Highlight lower shapes if we are dragging new lower cabinet shape\r\n //4. Highlight lower shapes if we are dragging new tall cabinet shape\r\n if ((movingShape && canShapeBeAutoShifted(workspace.getMovingShape(), this.__shape))\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.upper && isTestShapePlacedOnTheWall)\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.lower && isTestShapePlacedOnTheFloor)\r\n || (activeButton === SIDEBAR_NAVIGATION_CABINET_BUTTONS.tall && isTestShapePlacedOnTheFloor)\r\n ) {\r\n const style = {\r\n lineWidth: 4,\r\n strokeStyle: COLOR.red,\r\n shadowBlur: 2,\r\n extendHoveredLine: 5\r\n };\r\n RenderParts.drawHoveredBorders(ctx, staticOffset, this.__shape, style);\r\n }\r\n }\r\n };\r\n\r\n renderHandles = (ctx) => {\r\n RenderParts.drawHandles(ctx, this.__shape)\r\n };\r\n\r\n getCrownMoldingPoints = () => {\r\n const points = this.__shape.getPointsPointField();\r\n\r\n return RenderCabinets.getDiagonalPointsForTheSquare(points, this.__crownMoldingParams.distance)\r\n }\r\n\r\n // renderCrownMolding = (ctx) => {\r\n // if (this.__crownMoldingFeatureId) {\r\n // const crownMoldingPoints = this.getCrownMoldingPoints();\r\n // RenderCabinets.renderCrownMolding(ctx, crownMoldingPoints);\r\n // }\r\n // };\r\n}\r\n\r\nexport default ShapeCabinet\r\n","import {renderErrorPopup} from \"../../../../../api/api-popups\";\r\nimport workspace from \"../core/workspace\";\r\nimport sqftShape from \"../core/shapes/sqftShape\";\r\nimport sqftShapeManager from \"../store/sqftShapeManager\";\r\n\r\nexport const renderResetSeamPopup = (shape) => {\r\n if (shape instanceof sqftShape) {\r\n shape.setResetSlabModePopupWasDisplayed(true);\r\n sqftShapeManager.resetShapeChangesInTheSlabMode(shape);\r\n\r\n //state.mouseDown = false;\r\n //state.mouseDownPosition = null;\r\n shape.setIsPointsMovable(false);\r\n }\r\n renderErrorPopup(workspace.intl.formatMessage({id: \"sqft.popup.slab.resetChangesMessage\"}))\r\n}\r\n\r\nexport const shouldResetSlabModePopupOnPointMoveBeDisplayed = (shape) => {\r\n if (shape instanceof sqftShape\r\n && (shape.isWithShapePieces()) //|| SlabWorkspace.slabAdditionalShapes.getShapeAdditionalShapes(shape).length > 0\r\n ) {\r\n return !shape.getResetSlabModePopupWasDisplayed();\r\n }\r\n\r\n return false;\r\n}\r\n","export default class BlinkingHighlight {\r\n isHighlighted = false;\r\n isHighlightedLightOn = false;\r\n timer = true;\r\n highliteBlinkTime = 400;\r\n highliteBlinkTimeTotal = 2400;\r\n\r\n constructor() {\r\n }\r\n\r\n setHighlighting = (value) => {\r\n if (!this.isHighlighted && value) {\r\n this.startHighlightingLoop();\r\n } else if (this.isHighlighted && !value) {\r\n this.stopHighlightingLoop();\r\n }\r\n this.isHighlighted = value;\r\n setTimeout( () => {\r\n document.addEventListener(\"click\", this.stopHighlightingLoop)\r\n }, 50);\r\n setTimeout( () => {\r\n this.stopHighlightingLoop();\r\n }, this.highliteBlinkTimeTotal);\r\n };\r\n\r\n startHighlightingLoop = () => {\r\n this.isHighlightedLightOn = true;\r\n setTimeout( () => {\r\n this.isHighlightedLightOn = false\r\n }, this.highliteBlinkTime);\r\n this.timer = setTimeout( () => {\r\n this.startHighlightingLoop();\r\n }, this.highliteBlinkTime * 2);\r\n }\r\n\r\n stopHighlightingLoop = () => {\r\n clearTimeout(this.timer);\r\n this.isHighlighted = false;\r\n //this.isHighlightedLightOn = false; // this will be done in startHighlightingLoop\r\n document.removeEventListener(\"click\", this.stopHighlightingLoop);\r\n }\r\n}\r\n","import isEmpty from \"lodash/isEmpty\";\r\n\r\nimport {getCommonVisualizerType} from \"../../config\";\r\nimport store from \"../../store\";\r\nimport {dbFeatureFilterProperties, dbFeatureRelatedFeaturesProperties, otherMissingProperties} from \"./constants\";\r\n\r\n\r\n/**\r\n * Checks whether to show room feature as in visualizer in the navigation\r\n * @param feature {featureInterface}\r\n * @returns {featureInterface}\r\n */\r\nexport const setRoomNotInVisualizerProperty = (feature) => {\r\n const fabricatorSubscriptions = store.getState().fabricatorState.fabricatorSubscriptions;\r\n if (!feature || !feature.dbFeature || !feature.dbFeature.sharedFeatureName) {\r\n return feature\r\n }\r\n const name = feature.dbFeature.sharedFeatureName.toLowerCase();\r\n const visType = getCommonVisualizerType();\r\n if (name === visType) {\r\n feature.notAvailableInVisualizer = false;\r\n feature.dbFeature.unlocked = true;\r\n return feature\r\n }\r\n if (!Array.isArray(fabricatorSubscriptions)) {\r\n return feature\r\n }\r\n const subscription = fabricatorSubscriptions.find(subscr => subscr.service.toLowerCase() === name);\r\n if (subscription) {\r\n feature.notAvailableInVisualizer = false;\r\n feature.dbFeature.unlocked = true;\r\n if (subscription.thumbnail) {\r\n feature.customThumbnail = subscription.thumbnail\r\n }\r\n }\r\n return feature\r\n}\r\n\r\n/**\r\n * updates existing dbFeature\r\n * @param dbFeature {dbFeatureInterface} // new\r\n * @param existingDbFeature {dbFeatureInterface} // old (existing)\r\n * @param layout {object} // layout\r\n */\r\nexport const updateExistingFeature = (dbFeature, existingDbFeature, layout) => {\r\n if (!existingDbFeature[\"relatedFeatureIds\"] && Array.isArray(dbFeature[\"relatedFeatureIds\"])) {\r\n existingDbFeature[\"relatedFeatureIds\"] = dbFeature[\"relatedFeatureIds\"];\r\n }\r\n // loadRelatedFeatures(dbFeature, layout);\r\n dbFeatureRelatedFeaturesProperties.forEach(property => {\r\n if (!existingDbFeature[property] && Array.isArray(dbFeature[property])) {\r\n existingDbFeature[property] = dbFeature[property];\r\n const parentGroups = layout.getFeatures(true);\r\n dbFeature[property].forEach(dbFeature => {\r\n layout.loadDbFeature(dbFeature, parentGroups)\r\n })\r\n }\r\n })\r\n if ((!Array.isArray(existingDbFeature.stonePricingId) || !existingDbFeature.stonePricingId.length || existingDbFeature.stonePricingId[0] === -1)\r\n && (Array.isArray(dbFeature.stonePricingId) && dbFeature.stonePricingId.length && dbFeature.stonePricingId[0] !== -1)) {\r\n existingDbFeature.stonePricingId = dbFeature.stonePricingId\r\n }\r\n dbFeatureFilterProperties.forEach((key) => {\r\n if ((!existingDbFeature[key] || isEmpty(existingDbFeature[key])) && dbFeature[key] && !isEmpty(dbFeature[key])) {\r\n existingDbFeature[key] = dbFeature[key];\r\n dbFeature.wasUpdatedFromAnotherResponse = true; // to erase ._customDisplayName, because we need filters to create it again!\r\n existingDbFeature.wasUpdatedFromAnotherResponse = true; // to erase ._customDisplayName, because we need filters to create it again!\r\n }\r\n });\r\n otherMissingProperties.forEach((key) => {\r\n if ((!existingDbFeature[key] || isEmpty(existingDbFeature[key])) && dbFeature[key] && !isEmpty(dbFeature[key])) {\r\n existingDbFeature[key] = dbFeature[key];\r\n }\r\n });\r\n if (dbFeature.markUpString) {\r\n existingDbFeature.markUpString = dbFeature.markUpString;\r\n existingDbFeature.price = dbFeature.price;\r\n existingDbFeature.cost = dbFeature.cost;\r\n existingDbFeature.discount = dbFeature.discount;\r\n existingDbFeature.shippingCost = dbFeature.shippingCost;\r\n }\r\n}\r\n\r\n\r\nexport const loadRelatedFeatures = (dbFeature, layout) => {\r\n if (!Array.isArray(dbFeature.relatedFeatureIds) || !dbFeature.relatedFeatureIds.length) {\r\n return\r\n }\r\n dbFeature.relatedFeatureIds.forEach(relFeatureId => {\r\n if (!dbFeature.relatedFeatures) {\r\n dbFeature.relatedFeatures = [];\r\n }\r\n if (dbFeature.relatedFeatures.some(relFeature => relFeature.id === relFeatureId)) {\r\n return // already loaded\r\n }\r\n let loadedDbFeature = null;\r\n for (let i = 0; i < layout.allDbFeatures.length; i++) {\r\n if (layout.allDbFeatures[i].id === relFeatureId) {\r\n loadedDbFeature = layout.allDbFeatures[i];\r\n break;\r\n }\r\n }\r\n if (loadedDbFeature) {\r\n dbFeature.relatedFeatures.push(loadedDbFeature);\r\n } else {\r\n console.log(\"related feature wasn't loaded\"); // it it fires - then something is wrong, we should load related before main features\r\n }\r\n })\r\n // console.log(\"dbFeature.relatedFeatures\", dbFeature.relatedFeatures);\r\n}\r\n","export const getFeatureCropCoors = (feature) => {\r\n if (!feature.metaData[\"CropCoords\"]) {\r\n return null\r\n }\r\n if (!feature.metaData[\"ParsedCropCoords\"]) {\r\n if ((feature.metaData[\"CropCoords\"].length === 1) && (typeof feature.metaData[\"CropCoords\"][0] === \"string\")) {\r\n if (feature.metaData[\"CropCoords\"][0].includes(\", \")) {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"][0].split(\", \").map(coor => +coor)\r\n } else if (feature.metaData[\"CropCoords\"][0].includes(\",\")) {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"][0].split(\",\").map(coor => +coor)\r\n }\r\n } else {\r\n feature.metaData[\"ParsedCropCoords\"] = feature.metaData[\"CropCoords\"];\r\n }\r\n }\r\n return feature.metaData[\"ParsedCropCoords\"]\r\n}\r\n","import {LayoutAbbreviation, LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n Background: {\r\n ShowerWall: 50100,\r\n CenterWall: 50300,\r\n BackWall: 50600,\r\n Floor: 50700,\r\n BackgroundBG: 50800,\r\n },\r\n ShowerWallAccent: 1000,\r\n Window: {\r\n WindowBody: 45000,\r\n WindowKits: 1100\r\n },\r\n Accessories: {\r\n LargeCornerCaddie: 2010,\r\n LargeCornerCaddie2: 2020,\r\n Fixture: 2100,\r\n LargeCornerSeat: 2310,\r\n LargeCornerSeat2: 2320,\r\n CornerCaddie: 2410,\r\n CornerCaddie2: 2420,\r\n SoapDish: 2500,\r\n SoapDish2: 2510,\r\n SmallCornerShelf: 2600,\r\n GrabBar: 2700,\r\n GrabBar2: 2710,\r\n CornerShelf1: 2810,\r\n CornerShelf2: 2820,\r\n CornerShelf3: 2830,\r\n CornerShelf4: 2840,\r\n CornerShelf5: 2850,\r\n CornerShelf6: 2860,\r\n ShowerPod: 2900,\r\n Seats: 2950,\r\n ShowerRod: 4200,\r\n },\r\n Shower: {\r\n ShowerPan: 3200,\r\n ShowerFixture: 3410,\r\n ShowerFixture2: 3420,\r\n ShowerDoorHandle: 3600,\r\n // Threshold\r\n TubCombo: {\r\n WallConfiguration: 3600,\r\n Liner: 3700,\r\n WalkInTub: 3900,\r\n JettedTub: 4000,\r\n },\r\n },\r\n Walls: {\r\n LeftWall: 40120,\r\n },\r\n Globals: {\r\n ToiletPaper: 8000,\r\n ToiletPaperHolder: 8050,\r\n Towel: 8100,\r\n LightFixture: 8200,\r\n LampFixture: 8250,\r\n DecorWindow: 8300,\r\n DecorSeat: 8400,\r\n },\r\n Bathtub: {\r\n BathTubFixture: 9000,\r\n BathTubBody: 9100,\r\n },\r\n decor: 11111,\r\n skirting_board: 2500,\r\n shower_curb: 3000,\r\n bathtub_body: 5304,\r\n bathtub_fixture: 5300,\r\n window: 45000,\r\n vanity_cabinet: 6100,\r\n vanity_countertop: 6000,\r\n shower_arm: 7315,\r\n shower_head_bundle: 7456,\r\n split_wall: 7000,\r\n towel_bar: 2617,\r\n towel_ring: 2615,\r\n shower_glass: 3549,\r\n grab_bar: 2700,\r\n robe_hook: 5059,\r\n vanity_handle: 5200,\r\n vanity_backsplash: 5500,\r\n vanity_mirror: 5600,\r\n vanity_faucet: 5700,\r\n vanity_sink: 5800,\r\n shower_pan_combo: 6743,\r\n window_body: 7301,\r\n toilet_brush: 9816,\r\n toilet: 9960,\r\n paper_holder: 10004,\r\n shower_wall: 40020,\r\n left_wall_splitter: 40000,\r\n left_wall_crop: 40150,\r\n right_wall_crop: 48030,\r\n front_wall_crop: 49075,\r\n walls_ceiling: 50900,\r\n shower_wall_mirror: 50050,\r\n back_wall: 50100,\r\n front_wall: 50200,\r\n left_wall: 50500,\r\n right_wall: 54000,\r\n };\r\n});\r\n\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n\r\n if (layer.coords) {\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (layer.coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (layer.coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (layer.coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (layer.coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n }\r\n\r\n // console.log(\"layer without coords\", layer);\r\n\r\n const {zIndex} = layer;\r\n switch (zIndex) {\r\n // case layouts[currentLayout].Background.ShowerWall:\r\n // return {\r\n // polygonArray: [[sizeFactor*350,sizeFactor*50],[sizeFactor*950,sizeFactor*50],[sizeFactor*950,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n // width: sizeFactor*600,\r\n // height: sizeFactor*900\r\n // };\r\n case layouts[currentLayout].Walls.CenterWall:\r\n case layouts[currentLayout].Background.CenterWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return null;\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*360,0],[sizeFactor*760,0],[sizeFactor*760,sizeFactor*880],[sizeFactor*360,sizeFactor*880]],\r\n width: sizeFactor*400,\r\n height: sizeFactor*880\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.RightWall:\r\n case layouts[currentLayout].Background.RightWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*750,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*1080],[sizeFactor*750,sizeFactor*1080]],\r\n width: sizeFactor*1170,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*120,0],[sizeFactor*1920,0],[sizeFactor*1920,sizeFactor*930],[sizeFactor*120,sizeFactor*930]],\r\n width: sizeFactor*1900,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Walls.LeftWall:\r\n case layouts[currentLayout].Background.LeftWall: {\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[0,0],[sizeFactor*600,0],[sizeFactor*600,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*600,\r\n height: sizeFactor*1080\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n case layouts[currentLayout].Background.Floor: {\r\n switch (currentLayout) {\r\n default: {\r\n // case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[0,sizeFactor*600],[sizeFactor*1920,sizeFactor*600],[sizeFactor*1920,sizeFactor*1080],[0,sizeFactor*1080]],\r\n width: sizeFactor*1920,\r\n height: sizeFactor*480\r\n };\r\n }\r\n }\r\n }\r\n case layouts[currentLayout].Background.ShowerWall:\r\n switch (currentLayout) {\r\n case LayoutAbbreviation.Layout1: {\r\n return {\r\n polygonArray: [[sizeFactor*350,0],[sizeFactor*1650,0],[sizeFactor*1650,sizeFactor*930],[sizeFactor*350,sizeFactor*930]],\r\n width: sizeFactor*1300,\r\n height: sizeFactor*930\r\n };\r\n }\r\n case LayoutAbbreviation.Layout4: {\r\n return {\r\n polygonArray: [[sizeFactor*250,0],[sizeFactor*1250,0],[sizeFactor*1250,sizeFactor*930],[sizeFactor*250,sizeFactor*930]],\r\n width: sizeFactor*1000,\r\n height: sizeFactor*930\r\n };\r\n }\r\n }\r\n return null;\r\n default:\r\n return null\r\n }\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {toiletThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {removeLookPointFor} from \"../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n this.relatedGroupNames = [\"Toilet\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n if (dbFeature.groupName === \"Toilet\") {\r\n if (!this.toilet) {\r\n this.toilet = new ToiletBody(true);\r\n this.relatedItems.push(this.toilet);\r\n this.toilet.getParent = () => this;\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n if (loadFeature) {\r\n this.toilet.load(dbFeature);\r\n }\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const layout = this.getParent().layout;\r\n // const showerParent = layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerParent && showerSize && !IS_BATHROOM_OLD_BV_SCENE) {\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerSize\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return true\r\n }\r\n}\r\n\r\n\r\n","import {getMissingFeaturesAndClickThem} from \"./lookNavigation/lookNavigationFunctions\";\r\n\r\nexport const featureCanChangeShowerSize = (feature) => {\r\n if (!feature) {\r\n return false\r\n }\r\n return feature.partId === \"shower_pan_combo\" || feature.partId === \"walk_in_tub\" || feature.partId === \"shower_body\"\r\n}\r\n\r\nconst neededFeatureGroupsToCheckOnShowerSizeChange = document.kvConfig.toolVersion === 5\r\n ? [\"shower_pan_combo\", \"shower_interior_wall\", \"left_wall\", \"right_wall\", \"bathroom_floor\", \"shower_fixture\"]\r\n : [\"shower_wall\", \"split_wall\", \"left_wall_splitter\", \"bathroom_floor\", \"front_wall\", \"shower_fixture\"];\r\n\r\n/**\r\n * Checks needed features on ShowerSize change\r\n * @param clickedFeature {object}\r\n * @returns {promise}\r\n */\r\nexport const searchForSameNameWallsBeforeFeatureApply = async (clickedFeature) => {\r\n if (!clickedFeature.getParent) {\r\n return\r\n }\r\n const showerPanComboParent = clickedFeature.getParent();\r\n if (clickedFeature.metaData[\"ShowerSize\"] && clickedFeature.metaData[\"ShowerSize\"][0] && showerPanComboParent.activeFeature\r\n && showerPanComboParent.activeFeature.metaData[\"ShowerSize\"]\r\n && (showerPanComboParent.activeFeature.metaData[\"ShowerSize\"][0] !== clickedFeature.metaData[\"ShowerSize\"][0])) {\r\n\r\n const showerParent = showerPanComboParent.getParent();\r\n const layout = showerParent.layout;\r\n\r\n let missingFeatures = [];\r\n const newSizeCondition = {\r\n propName: \"ShowerSize\",\r\n propValue: clickedFeature.metaData[\"ShowerSize\"][0]\r\n };\r\n neededFeatureGroupsToCheckOnShowerSizeChange.forEach((partId) => {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup && featureGroup.activeFeature && !featureGroup.activeFeature.matchesMetaForCondition(newSizeCondition)) {\r\n const navigationItemName = featureGroup.activeFeature.getSplittedFeatureName();\r\n const newConditions = featureGroup.getArrayOfConditions().map(condition => {\r\n if (condition.propName === \"ShowerSize\") {\r\n return newSizeCondition\r\n }\r\n return condition\r\n });\r\n const featureFound = featureGroup.features.find(feature => {\r\n return (feature.getSplittedFeatureName() === navigationItemName) && feature.matchesMetaForArrayOfConditions(newConditions)\r\n });\r\n if (!featureFound &&\r\n !(featureGroup && featureGroup.alreadyRequestedFeatureNames && featureGroup.alreadyRequestedFeatureNames.includes(navigationItemName))) {\r\n missingFeatures.push({\r\n relatedItem: featureGroup,\r\n navigationItemName,\r\n setCurrentFeature: false\r\n })\r\n }\r\n }\r\n });\r\n if (missingFeatures.length) {\r\n await getMissingFeaturesAndClickThem(missingFeatures, true)\r\n }\r\n }\r\n\r\n return Promise.resolve();\r\n}\r\n","import {sqftPost} from \"./sqftApi\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\n\r\nconst HARDCODED_DOMAIN = sqftConfig.threeD.useStagingDomain ? \"https://quotekandb.com\" : null; //\r\n\r\nexport default class SqftJsonApi {\r\n static postCabinetSet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer\", data, {...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getCountertops(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/countertop\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getResizedCabinet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/cabinet_resize\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getResizedCornerCabinet(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/corner_cabinet_resize\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n\r\n static getWall(data, options = {}) {\r\n return sqftPost(\"/api/AR/Composer/wall\", data,{...options, domain: HARDCODED_DOMAIN});\r\n }\r\n}\r\n","import workspace from \"../workspace\";\r\nimport Box from \"./textBox/box\";\r\nimport IText from \"./textBox/iText\";\r\n\r\nexport default class TextBox {\r\n // holds all our labels\r\n _posOnField = {};\r\n _placeholder = '';\r\n _design = {\r\n width: 50,\r\n height: 20,\r\n fillStyle: 'rgba(255,255,255, 0.7)', // transparent\r\n };\r\n box = null;\r\n text = null;\r\n\r\n //Initialize a new Box, add it, and invalidate the canvas\r\n addRect() {\r\n this.box = new Box(this._posOnField, this._design);\r\n this.text = new IText(this._placeholder, 'playregular', 0, 0, 100, 25, 0, this.box);\r\n }\r\n\r\n constructor(posOnField, placeholder, design) {\r\n this._posOnField = posOnField;\r\n this._placeholder = placeholder ? placeholder : this._placeholder;\r\n this._design = design ? design : this._design;\r\n }\r\n\r\n init() {\r\n this.addRect(this._design);\r\n workspace.textBoxManager.addTextBox(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n this.box.deregisterEvents();\r\n this.text.deregisterEvents();\r\n }\r\n\r\n reInitEvents = () => {\r\n this.box.reInitEvents();\r\n this.text.reInitEvents();\r\n }\r\n\r\n export() {\r\n return {\r\n posOnField: {\r\n x: this.box.posX,\r\n y: this.box.posY,\r\n },\r\n placeholder: this.text.modelText.txt,\r\n design: this.box.design\r\n }\r\n }\r\n\r\n import() {\r\n\r\n }\r\n}\r\n\r\n\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {isSameVisualizerWizard} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI} from \"../config\";\r\n\r\nconst initialState = {\r\n wizardIsActive: false, // is used on the materials page instead of the quotingtool\r\n wizardIsActiveObject: [], // is used for visualizer switching {\"kvScene\": false, \"bvLook\": true}\r\n wizardConfig: [], // arrayOf wizardObjectInterface // this is not used for now, it is a regular quoting tool filters wizard\r\n// {\r\n// id: 1,\r\n// name: \"Count wiz\",\r\n// description: \"some desc\",\r\n// enableForVisualizer: false,\r\n// enableForQuoting: true,\r\n// featureGroupName: \"Countertop\", // empty input case\r\n// isFinished: false, // frontend property\r\n// filterGroups: [\r\n// {\r\n// id: 43,\r\n// name: \"Countertop Material\",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ListWithCheckBoxes\"\r\n// },\r\n// {\r\n// id: 35,\r\n// name: \"Manufacturer \",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ImageList\",\r\n// },\r\n// {\r\n// id: 15,\r\n// name: \"Stone Color\",\r\n// type: \"Single\",\r\n// values: [],\r\n// visualType: \"ColorsWithColumns\"\r\n// },\r\n// ]\r\n// }\r\n // wizardActiveFilterGroupIndex: 0\r\n wizardList: [],\r\n wizardActiveItem: null,\r\n // wizardActiveStep: 0, // was -1 do not show the welcome screen on QKB and Lixil too\r\n wizardActiveStep: IS_LIXIL_UI ? -1 : 0, // do not show the welcome screen on QKB // reverted per solid surface request\r\n wizardSelectedValues: {},\r\n allWizardsValues: [], // [wizardAllObjectInterface]\r\n wizardShowFeatureSection: null,\r\n wizardMissingFeatures: {}, // \"groupName\": [\"string1\", \"string2\", ...]\r\n wizardWasRestored: false, // for complete popup\r\n wizardConflictingSteps: [], // we need to show the flow was changed popup, {wizardConflictingObjectInterface}\r\n wizardConflictPopupOpened: false,\r\n wizardSqftCartItems: [], // we can't set cart items directly, but we need to set them in wizard\r\n};\r\n\r\nexport const getUpdatedAllWizardValues = (state, quoteIndex, wizardItemId, wizardSelectedValues) => {\r\n const newWizObject = {\r\n quoteIndex,\r\n wizardItemId,\r\n lastVisitedStep: state.wizardActiveStep,\r\n visualizer: getCommonVisualizerType(),\r\n wizardSelectedValues: Object.assign({}, wizardSelectedValues)\r\n };\r\n const existingIndex = state.allWizardsValues.findIndex(wizSelObject => {\r\n return wizSelObject.wizardItemId === newWizObject.wizardItemId\r\n && (wizSelObject.quoteIndex === newWizObject.quoteIndex) && isSameVisualizerWizard(wizSelObject)\r\n });\r\n existingIndex > -1\r\n ? state.allWizardsValues.splice(existingIndex, 1, newWizObject)\r\n : state.allWizardsValues.push(newWizObject);\r\n\r\n state.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === quoteIndex && isSameVisualizerWizard(wizObject)) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === wizardItemId // to return back and force correctly\r\n }\r\n return wizObject\r\n });\r\n\r\n return [...state.allWizardsValues]\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_WIZARD_IS_ACTIVE: {\r\n const newState = Object.assign({}, state, {wizardIsActive: action.payload.wizardIsActive});\r\n if (action.payload.visualizerType && !state.wizardIsActiveObject[action.payload.visualizerType]) {\r\n newState.wizardIsActiveObject = {\r\n ...state.wizardIsActiveObject,\r\n [action.payload.visualizerType]: action.payload.wizardIsActive\r\n }\r\n }\r\n return newState;\r\n }\r\n case types.SET_WIZARD_ACTIVE_FILTER_GROUP_INDEX: // NOT USED!\r\n case types.SET_WIZARD_CONFIG:\r\n case types.SET_WIZARD_SHOW_FEATURE_SECTION:\r\n case types.RESTORE_ALL_WIZARD_SELECTED_VALUES:\r\n case types.SET_WIZARD_CONFLICT_POPUP_OPENED:\r\n case types.SET_WIZARD_SQFT_CART_ITEMS:\r\n case types.SET_WIZARD_CONFLICT_STEPS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_WIZARD_LIST:\r\n return Object.assign({}, state, {\r\n wizardList: uniqBy([...state.wizardList, ...action.payload.wizardList], wizItem => wizItem.id)\r\n });\r\n case types.SET_WIZARD_ACTIVE_ITEM:\r\n if (action.payload.wizardActiveItem) {\r\n const alreadySelectedWizard = state.allWizardsValues.find(wizard => {\r\n return wizard.wizardItemId === action.payload.wizardActiveItem.id && (wizard.quoteIndex === action.payload.quoteIndex)\r\n });\r\n if (alreadySelectedWizard) {\r\n action.payload.wizardSelectedValues = Object.assign({}, alreadySelectedWizard.wizardSelectedValues); // restore added data\r\n action.payload.wizardActiveStep = Number.isInteger(alreadySelectedWizard.lastVisitedStep)\r\n ? alreadySelectedWizard.lastVisitedStep // restore last step\r\n : Object.keys(alreadySelectedWizard.wizardSelectedValues).length // restore last step (just in case lastVisitedStep is missing)\r\n action.payload.wizardWasRestored = true // for complete popup\r\n } else if ((state.wizardActiveStep === -1) && action.payload.wizardActiveItem.skipStartStep) {\r\n action.payload.wizardActiveStep = 0;\r\n }\r\n action.payload.allWizardsValues = state.allWizardsValues.map(wizObject => {\r\n if (wizObject.quoteIndex === action.payload.quoteIndex && isSameVisualizerWizard(wizObject)) {\r\n wizObject.isLastActiveWizard = wizObject.wizardItemId === action.payload.wizardActiveItem.id // to return back and force correctly\r\n }\r\n return wizObject\r\n })\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n });\r\n case types.SET_WIZARD_ACTIVE_STEP: {\r\n return Object.assign({}, state, {\r\n wizardActiveStep: action.payload.wizardActiveStep,\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps,\r\n wizardWasRestored: false,\r\n });\r\n }\r\n case types.SET_WIZARD_SELECTED_VALUES: {\r\n if (action.payload.allWizardsValues) {\r\n return Object.assign({}, state, {\r\n allWizardsValues: action.payload.allWizardsValues,\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n wizardSelectedValues: action.payload.wizardSelectedValues,\r\n wizardConflictingSteps: action.payload.wizardConflictingSteps\r\n });\r\n }\r\n case types.SET_WIZARD_MISSING_FEATURES: {\r\n const wizardMissingFeatures = {\r\n ...state.wizardMissingFeatures,\r\n [action.payload.groupName]: action.payload.wizardMissingFeatures\r\n }\r\n return Object.assign({}, state, {wizardMissingFeatures});\r\n }\r\n case types.SET_ALL_WIZARD_SELECTED_VALUES: {\r\n const {wizardSelectedValues, quoteIndex, wizardItemId} = action.payload;\r\n const existingAllObject = state.allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItemId && wizSelObject.quoteIndex === quoteIndex\r\n });\r\n const existingValues = existingAllObject ? existingAllObject.wizardSelectedValues : {};\r\n const updatedValues = Object.assign({}, existingValues, wizardSelectedValues)\r\n const allWizardsValues = getUpdatedAllWizardValues(state, quoteIndex, wizardItemId, updatedValues);\r\n return Object.assign({}, state, {allWizardsValues});\r\n }\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened && state.wizardActiveItem) {\r\n return Object.assign({}, state, { wizardActiveItem: null });\r\n }\r\n break;\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {LOOK_ROOM_TYPES} from \"../bvcomponents/look/core/constants\";\r\n\r\n/**\r\n * @param preset {object} visualizer management preset\r\n * @param forVisualizerType {string} visualizer type\r\n * @return {object} visualizer management preset\r\n */\r\nexport const updatePresetRoomLayout = (preset, forVisualizerType = document.kvConfig.visualizerType) => {\r\n if (!preset.lookId) {\r\n preset.lookId = 0;\r\n }\r\n if ((forVisualizerType === \"bvLook\")) {\r\n if (preset.roomType === LOOK_ROOM_TYPES.as) {\r\n preset.layout_type = preset.layout_type > 20\r\n ? preset.layout_type - 10\r\n : preset.layout_type < 10\r\n ? preset.layout_type + 10\r\n : preset.layout_type;\r\n } else {\r\n preset.layout_type = preset.layout_type >= 10\r\n ? preset.layout_type - 10\r\n : preset.layout_type;\r\n }\r\n }\r\n return preset\r\n}\r\n\r\nexport const updatePresetsArray = (responseDefaults, forVisualizerType) => {\r\n let bvPresets = JSON.parse(responseDefaults) || [];\r\n const noPresetsAtAll = bvPresets.every(preset => !preset.id);\r\n return bvPresets.map((preset, presetIndex) => {\r\n if (noPresetsAtAll) {\r\n preset.id = presetIndex + 1;\r\n } else if (!Number.isInteger(preset.id)) {\r\n preset.id = presetIndex + 100 // 100 is to make id's really unique\r\n }\r\n preset = updatePresetRoomLayout(preset, forVisualizerType);\r\n return preset\r\n });\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {LayoutAbbreviations, METADATA} from \"../../constants\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n this.fixEdgeMeta(dbFeature);\r\n if (dbFeature.metaData[\"MountType\"] && dbFeature.metaData[\"MountType\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.ALL]\r\n }\r\n if (dbFeature.metaData[\"MountWidth\"] && dbFeature.metaData[\"MountWidth\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountWidth\"] = [METADATA.ALL]\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new Countertop(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta && (sinkMeta !== \"0\") && !sinkMeta.includes(\"0\")) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n const mountWidthMeta = sinkParent.activeFeature.metaData[\"MountWidth\"];\r\n if (mountWidthMeta && (mountWidthMeta !== \"0\") && !mountWidthMeta.includes(\"0\")) { // if 0 - we are showing all faucets\r\n metaObject[\"MountWidth\"] = mountWidthMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountWidth\"].forEach(propName => {\r\n if (currentSinkMetaData[propName]) {\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const conditionsWithoutSink = arrayOfConditions.filter(condition => {\r\n return condition.propName !== \"MountType\" && condition.propName !== \"MountWidth\"\r\n })\r\n\r\n const countertopParent = this.getParent();\r\n const applianceParent = countertopParent.layout.parts[Appliance.id];\r\n // const sink = countertopParent.sink;\r\n\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n // if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n // && sink && !sink.disabled && sink.activeFeature && sink.activeFeature.metaData[\"MountType\"] && sink.activeFeature.metaData[\"MountType\"].includes(\"ST\")\r\n // && !feature.matchesMetaForCondition(\"MountType\", \"ST\")) {\r\n // return false\r\n // }\r\n if (feature.metaData[\"Part\"] && (feature.metaData[\"Part\"].includes(\"2\") || feature.metaData[\"Part\"].includes(\"3\"))) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(conditionsWithoutSink)\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\n\r\nexport default class CountertopCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n fixEdgeMeta(dbFeature) {\r\n if (dbFeature.metaData[\"Edge\"]) {\r\n const metaValue = Array.isArray(dbFeature.metaData[\"Edge\"]) ? dbFeature.metaData[\"Edge\"][0] : dbFeature.metaData[\"Edge\"];\r\n switch (metaValue) {\r\n case \"European Edge\":\r\n dbFeature.metaData[\"Edge\"] = \"Eased\";\r\n break;\r\n case \"Polished Edge\":\r\n dbFeature.metaData[\"Edge\"] = \"Pencil\";\r\n break;\r\n case \"Waterfall Edge\":\r\n dbFeature.metaData[\"Edge\"] = \"Waterfall\";\r\n break;\r\n default:\r\n dbFeature.metaData[\"Edge\"] = metaValue.split(\" Edge\")[0];\r\n break;\r\n }\r\n } else {\r\n // console.log(\"No Edge Metadata\", dbFeature);\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n\r\n let newFeatures = uniqBy(this.getSameEdgesFeatures(featuresToDisplay), (feature) => {\r\n return feature.dbFeature.id && feature.getSplittedFeatureName()\r\n });\r\n\r\n for (let i = 0; i < featuresToDisplay.length; i++) {\r\n const currentFeature = featuresToDisplay[i];\r\n const currentFeatureName = currentFeature.getSplittedFeatureName();\r\n if (!newFeatures.some(addedFeature => {\r\n return addedFeature.dbFeature.id === currentFeature.dbFeature.id\r\n || addedFeature.getSplittedFeatureName() === currentFeatureName\r\n })) {\r\n newFeatures.push(currentFeature)\r\n }\r\n }\r\n\r\n return this.returnNavItemsFromFeatures(newFeatures)\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!this.hasAdditionalParts) {\r\n return []\r\n }\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n return activeFeatureParts\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n if (this.activeFeature) {\r\n return [...this.getArrayOfConditions(), {\r\n propName: \"Edge\",\r\n propValue: this.activeFeature.metaData[\"Edge\"]\r\n }]\r\n }\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getSameEdgesFeatures(featuresToDisplay) {\r\n let currentEdgeMetaData = \"\";\r\n if (this.activeFeature && this.activeFeature.metaData[\"Edge\"]) {\r\n currentEdgeMetaData = Array.isArray(this.activeFeature.metaData[\"Edge\"]) ? this.activeFeature.metaData[\"Edge\"][0] : this.activeFeature.metaData[\"Edge\"];\r\n }\r\n if (!currentEdgeMetaData) {\r\n const edgeFeatureGroup = this.getParent().edge;\r\n if (edgeFeatureGroup && edgeFeatureGroup.activeFeature) {\r\n currentEdgeMetaData = edgeFeatureGroup.activeFeature.dbFeature.sharedFeatureName;\r\n }\r\n }\r\n if (currentEdgeMetaData) {\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n return !feature.notAvailableInVisualizer && feature.metaData[\"Edge\"] && (\r\n Array.isArray(feature.metaData[\"Edge\"])\r\n ? feature.metaData[\"Edge\"].includes(currentEdgeMetaData)\r\n : feature.metaData[\"Edge\"] === currentEdgeMetaData\r\n )\r\n });\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n getFeatureEdgeFilter = (feature, edgeFilterGroup) => {\r\n if (!feature) {\r\n return null\r\n }\r\n if (!edgeFilterGroup) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n }\r\n return feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id] || feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n };\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n const allEdgesCountertops = filteredFeatures.filter(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n const sameEdgeCountertops = this.getSameEdgesFeatures(allEdgesCountertops);\r\n this.activeFeature = sameEdgeCountertops[0] || allEdgesCountertops[0] || null\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {mergeFilterObjects} from \"../../../../misc/utils\";\r\nimport store from \"../../../../store\";\r\nimport {hardCodeIsCaesarStone} from \"../../../../misc/fabricatorHardcode\";\r\n\r\n// EDGE features:\r\n//\r\n// Full Bullnose\r\n// Triple Pencil\r\n// Eased\r\n// Half Bullnose\r\n// Quarter Bevel\r\n// Waterfall\r\n// Ogee\r\n//\r\n//\r\n// Ogee Bull\r\n// Pencil\r\n// Bevel Top and Bottom\r\n//\r\n// Caes hardcode - Bevel Top and Bottom - is Quarter Bevel\r\n//\r\n// ========================\r\n//\r\n// Countertop features:\r\n//\r\nconst countertopMetaDataValues = [\"Full Bullnose\", \"Triple Pencil\", \"Eased\", \"Half Bullnose\", \"Quarter Bevel\",\r\n \"Waterfall\", \"Ogee\"];\r\n//\r\n// Top and Bottom Round\r\n\r\n\r\nexport default class EdgeCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Edge\"] || (Array.isArray(dbFeature.metaData[\"Edge\"]) && !dbFeature.metaData[\"Edge\"].length)) {\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const assignedEdgeFilter = this.getEdgeFilterGroupFilters({dbFeature}, edgeFilterGroup);\r\n dbFeature.metaData[\"Edge\"] = (dbFeature.sharedFeatureName || \"\").split(\" Edge\")[0];\r\n if (Array.isArray(assignedEdgeFilter) && assignedEdgeFilter[0] && edgeFilterGroup && edgeFilterGroup.values) {\r\n const fValue = edgeFilterGroup.values.find(filter => filter.id === assignedEdgeFilter[0]);\r\n if (fValue && fValue.value) {\r\n const metaDataMatchName = fValue.value.split(\" Edge\")[0];\r\n if (countertopMetaDataValues.includes(metaDataMatchName)) {\r\n dbFeature.metaData[\"Edge\"] = metaDataMatchName;\r\n }\r\n }\r\n }\r\n if (document.kvConfig.isCaesarStone || hardCodeIsCaesarStone()) {\r\n if (dbFeature.metaData[\"Edge\"] === \"Edge Profile – Ogee (Linear Feet)\") {\r\n dbFeature.metaData[\"Edge\"] = \"Ogee\"\r\n } else if (dbFeature.metaData[\"Edge\"] === \"Bevel Top and Bottom\") {\r\n dbFeature.metaData[\"Edge\"] = \"Quarter Bevel\"\r\n }\r\n }\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const parentGroup = this.getParent();\r\n const countertop = parentGroup.countertop;\r\n\r\n // here we check if some countertop has the same name as currently active countertop & it has edge filter\r\n if (edgeFilterGroup && countertop && countertop.activeFeature) {\r\n if (this.partId === \"center_island_edge\" && parentGroup.layout.type === 3) {\r\n return []\r\n }\r\n featuresToDisplay = featuresToDisplay.map((feature) => {\r\n feature.notAvailableInVisualizer = !(this.getMatchingCounterTop(feature)).matchingFeature;\r\n return feature\r\n });\r\n }\r\n\r\n return featuresToDisplay.map(_ => {\r\n const featurePart = new DesignNavigationItem(_.featureName, _);\r\n featurePart.notAvailableInVisualizer = featurePart.part.notAvailableInVisualizer;\r\n return featurePart\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active edge feature\r\n const matchCounterTopObject = this.getMatchingCounterTop();\r\n console.log(\"matchCounterTopObject\", matchCounterTopObject);\r\n if (matchCounterTopObject.matchingFeature) {\r\n matchCounterTopObject.matchingFeature.handleClick(true);\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n /***\r\n * @returns {object}\r\n * **/\r\n getMatchingCounterTop = (feature = this) => {\r\n const parent = feature.getParent();\r\n const countertop = parent.getParent().countertop;\r\n\r\n if (!countertop) {\r\n return {matchingFeature: null, hasSameName: false}\r\n }\r\n\r\n if (countertop.activeFeature && (countertop.activeFeature.metaData[\"Edge\"] === feature.metaData[\"Edge\"])) {\r\n return {matchingFeature: countertop.activeFeature, hasSameName: true} // no need to do anything\r\n }\r\n\r\n let matchingByName = [];\r\n let matchingFeatures = [];\r\n const allCountertopFeatures = countertop.features;\r\n let currentActiveName = countertop.activeFeature ? countertop.activeFeature.getCountertopGroupsSplittedFeatureName() : \"\";\r\n for (let i = 0; i < allCountertopFeatures.length; i++) {\r\n const countertopFeature = allCountertopFeatures[i];\r\n if (countertopFeature.notAvailableInVisualizer) {\r\n continue;\r\n }\r\n if (countertopFeature.metaData[\"Edge\"] === feature.metaData[\"Edge\"]) {\r\n matchingFeatures.push(countertopFeature);\r\n if (currentActiveName && (currentActiveName === countertopFeature.getCountertopGroupsSplittedFeatureName())) {\r\n matchingByName.push(countertopFeature);\r\n }\r\n }\r\n }\r\n if (matchingByName.length) {\r\n return {matchingFeature: matchingByName[0], hasSameName: true}\r\n }\r\n return {matchingFeature: matchingFeatures[0] || null, hasSameName: false}\r\n };\r\n\r\n getEdgeFilterGroupFilters = (feature, edgeFilterGroup) => {\r\n if (!feature._allEdgeFilters) {\r\n const allEdgeFilters = mergeFilterObjects(feature.dbFeature.filterValueIDs, feature.dbFeature.fabFilterValueIDs);\r\n feature._allEdgeFilters = allEdgeFilters && edgeFilterGroup ? allEdgeFilters[edgeFilterGroup.id] : [];\r\n }\r\n return feature._allEdgeFilters;\r\n };\r\n\r\n getMatchingCounterTopFeaturesBySplittedName = (countertop, matchingFeatures = []) => { // array of sorted by filter features\r\n if (!countertop.activeFeature) {\r\n return []\r\n }\r\n let currentActiveName = countertop.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n return matchingFeatures.filter(feature => {\r\n const currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureName === currentActiveName\r\n })\r\n };\r\n\r\n getEdgeFilterGroup = () => {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n };\r\n\r\n getArrayOfConditions(forNavigation = false) {\r\n const countertop = this.getParent().countertop;\r\n if (!forNavigation && countertop && countertop.activeFeature && countertop.activeFeature.metaData[\"Edge\"]) {\r\n return [{\r\n propName: \"Edge\",\r\n propValue: countertop.activeFeature.metaData[\"Edge\"]\r\n }]\r\n }\r\n return [];\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (!this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.setDefault(layout);\r\n }\r\n return false\r\n }\r\n\r\n setZIndex() {\r\n return false\r\n }\r\n\r\n setEdgeNotInVisualizer = () => {\r\n // console.log(\"setEdgeNotInVisualizer\", );\r\n const countertop = this.getParent().countertop;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeGroup && countertop) {\r\n Object.keys(this.featuresList).forEach(layoutType => {\r\n for (let i = 0; i < this.featuresList[layoutType].length; i++) {\r\n const feature = this.featuresList[layoutType][i];\r\n if (feature.dbFeature.filterValueIDs[edgeGroup.id]) {\r\n const edgeValue = feature.dbFeature.filterValueIDs[edgeGroup.id][0];\r\n const edgeExist = countertop.featuresList[layoutType].some(countertopFeature => {\r\n return countertopFeature.dbFeature.filterValueIDs[edgeGroup.id]\r\n && countertopFeature.dbFeature.filterValueIDs[edgeGroup.id].includes(edgeValue)\r\n });\r\n if (edgeExist) {\r\n feature.notAvailableInVisualizer = false\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text, Image} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {LOWES_DISCLAIMER_EN} from \"../../../misc/fabricatorHardcode\";\r\n\r\nconst warningIcon = `https://qc-cdn.s3.amazonaws.com/receipt/icon-warning-red.jpg`;\r\n\r\nconst PrintDocumentDisclaimer = (props) => {\r\n const {fabricatorData, locale, styles, withTotal} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (!fabricatorSettings.depositDisclaimer || !fabricatorSettings.enableDisclaimer) {\r\n return null\r\n }\r\n if (withTotal && fabricatorSettings.depositDisclaimer.length >= 1500\r\n || !withTotal && fabricatorSettings.depositDisclaimer.length < 1500) {\r\n return null\r\n }\r\n\r\n const getDisclaimerMessage = () => {\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone)) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.description_FR._disclaimer\"]) {\r\n return printContext.messages[\"transDoc.description_FR._disclaimer\"]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateDescription_PL._disclaimer\"]) {\r\n return printContext.messages[\"transDoc.customTranslateDescription_PL._disclaimer\"]\r\n } else if (printContext.messages[\"transDoc.customDisplayName_FR._disclaimer\"]) { // it is actually EN ! hardcoded for lowes profiles\r\n return printContext.messages[\"transDoc.customDisplayName_FR._disclaimer\"]\r\n } else if (fabricatorData.isLowes) {\r\n return LOWES_DISCLAIMER_EN\r\n }\r\n }\r\n return fabricatorSettings.depositDisclaimer\r\n }\r\n\r\n const disclaimerMessage = getDisclaimerMessage();\r\n\r\n // if (withTotal) {\r\n // return (\r\n // \r\n // \r\n // {disclaimerMessage}\r\n // \r\n // )\r\n // }\r\n\r\n return (\r\n \r\n \r\n {disclaimerMessage}\r\n \r\n )\r\n\r\n};\r\n\r\nPrintDocumentDisclaimer.propTypes = {\r\n fabricatorData: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n withTotal: PropTypes.bool,\r\n};\r\n\r\nexport default PrintDocumentDisclaimer\r\n","import React, {useEffect, useState} from 'react';\r\nimport axios from \"axios\";\r\nimport {connect} from \"react-redux\";\r\nimport {IntlProvider} from 'react-intl';\r\n// import en from \"react-intl/locale-data/en\";\r\nimport Papa from \"papaparse\";\r\nimport Config, {AVAILABLE_LANGUAGES, IS_LIXIL_SERVERS} from \"./config\";\r\nimport {baseNewImagesPath} from \"./bvcomponents/assets\";\r\nimport {\r\n hardCodeIsAmericanImport, hardCodeIsAmericanStandard,\r\n hardCodeIsCaesarStone,\r\n hardCodeIsEncore,\r\n hardCodeIsGraniteTransformationUK,\r\n hardCodeIsLowes, hardCodeIsMcDermott, hardCodeIsModerno\r\n} from \"./misc/fabricatorHardcode\";\r\nimport {usePrevious} from \"./misc/helperHooks\";\r\n// addLocaleData([...en]);\r\n\r\nexport let TRANSLATES = {};\r\n\r\nexport const isEnglish = (locale) => {\r\n return (locale !== \"fr-FR\") && (locale !== \"pl-PL\") && (locale !== \"es-ES\")\r\n}\r\n\r\nconst getCustomJson = async (fileName = \"\") => {\r\n try {\r\n const customJsonResponse = await axios.get(`${baseNewImagesPath}/translates/custom/${fileName}.json?v=1.0.0`);\r\n if (customJsonResponse && customJsonResponse.data) {\r\n return customJsonResponse.data\r\n }\r\n return {}\r\n } catch (e) {\r\n console.log(\"couldn't set translate\", e);\r\n return {}\r\n }\r\n}\r\n\r\nconst TranslatesProvider = (props) => {\r\n const {language, children, wasCreatedFromFabricator} = props;\r\n const [translations, setTranslations] = useState(null);\r\n const [renderLanguage, setRenderLanguage] = useState(language);\r\n\r\n const prevLanguage = usePrevious(language);\r\n const prevWasCreatedFromFabricator = usePrevious(wasCreatedFromFabricator);\r\n\r\n const parseTranslatesResponse = (response) => {\r\n // handle success\r\n let trans = {}\r\n Papa.parse(response.data, {\r\n complete: (results) => {\r\n // console.log(\"Finished:\", results.data);\r\n results.data[0].forEach((locale) => {\r\n if (locale !== \"key\") {\r\n trans[locale] = {}; // simple create an empty objects for each locale\r\n }\r\n });\r\n results.data.forEach((translatesArray, translatesArrayIndex) => { // vertical forEach\r\n if (translatesArrayIndex) { // not 0 (the first key line)\r\n const key = translatesArray[0]; // key, for ex. login.email\r\n translatesArray.forEach((translateValue, translateValueIndex) => { // horizontal forEach\r\n if (translateValueIndex) { // skip first key\r\n const locale = results.data[0][translateValueIndex]; // get first line and locale index\r\n trans[locale][key] = translateValue || translatesArray[1] // translate from column or english column\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n return trans\r\n }\r\n\r\n const getCustomTranslates = (transDoc, localeString) => {\r\n let trans = {};\r\n Object.keys(transDoc)\r\n .filter(key => key.includes(localeString))\r\n .forEach(key => {\r\n Object.keys(transDoc[key]).forEach((sharedName) => {\r\n if (sharedName) {\r\n trans[`transDoc.${key}.${sharedName.trim()}`] = transDoc[key][sharedName]\r\n }\r\n })\r\n });\r\n return trans\r\n };\r\n\r\n const loadTranslates = async () => {\r\n const responseMain = await axios.get(baseNewImagesPath+'/translates/translates.csv?v=2.0.1');\r\n let trans = parseTranslatesResponse(responseMain);\r\n let customTranslates = {};\r\n if (language === \"en-AU\") {\r\n trans[\"en-AU\"] = {...trans[\"en-US\"]}\r\n customTranslates = await getCustomJson( \"en-AU\");\r\n }\r\n if (hardCodeIsLowes()) {\r\n customTranslates = await getCustomJson( \"Lowes\");\r\n const responseLowes = await axios.get(baseNewImagesPath+'/translates/translates_lowes.csv?v=1.13.1')\r\n const doc = parseTranslatesResponse(responseLowes);\r\n trans[\"fr-FR\"] = {...trans[\"fr-FR\"], ...getCustomTranslates(doc, \"_FR\")};\r\n trans[\"pl-PL\"] = {...trans[\"pl-PL\"], ...getCustomTranslates(doc, \"_PL\")};\r\n } else if (hardCodeIsCaesarStone()) {\r\n console.log(\"fabricatorData.wasCreatedFromFabricator\", wasCreatedFromFabricator);\r\n const jsonFile = wasCreatedFromFabricator === \"QC Master Account CAN\" ? \"Caesarstone(CAN)\" : \"Caesarstone\";\r\n customTranslates = await getCustomJson( jsonFile);\r\n const responseCaes = await axios.get(baseNewImagesPath + 'translates/translates_caes_v1.csv')\r\n const doc = parseTranslatesResponse(responseCaes);\r\n trans[\"fr-FR\"] = {...trans[\"fr-FR\"], ...getCustomTranslates(doc, \"_FR\")};\r\n } else if (hardCodeIsAmericanImport() || hardCodeIsAmericanStandard() || IS_LIXIL_SERVERS) {\r\n customTranslates = await getCustomJson( \"Lixil\");\r\n } else if (hardCodeIsGraniteTransformationUK()) {\r\n customTranslates = await getCustomJson( \"GT_UK\");\r\n } else if (hardCodeIsModerno()) {\r\n customTranslates = await getCustomJson( \"Moderno\");\r\n } else if (hardCodeIsMcDermott()) {\r\n customTranslates = await getCustomJson( \"McDermott\");\r\n } else if (hardCodeIsEncore()) {\r\n customTranslates = await getCustomJson( \"Encore\");\r\n }\r\n const responseSqft = await axios.get(baseNewImagesPath+'/translates/translates_sqft_v1.csv?ver=1.1.0');\r\n const transSqft = parseTranslatesResponse(responseSqft);\r\n for (let columnName in trans) {\r\n trans[columnName] = {...trans[columnName], ...transSqft[columnName]}\r\n }\r\n // delete trans[\"Location\"];\r\n // delete trans[\"Description & Context\"];\r\n TRANSLATES = {...trans[language], ...customTranslates[language]};\r\n setTranslations(TRANSLATES);\r\n if (Config.isDevMode()) {\r\n console.log(\"all translates:\", trans);\r\n console.log(\"current translates:\", trans[language]);\r\n }\r\n setRenderLanguage(language); // change frontend after load\r\n }\r\n\r\n useEffect(() => {\r\n if ((language && (prevLanguage !== language)) || (wasCreatedFromFabricator && (prevWasCreatedFromFabricator !== wasCreatedFromFabricator))) {\r\n if(document.kvConfig.kioskMode) {\r\n KioskApp.PostMessage({type: 'getTranslates'}).then(res => loadTranslates({data: res})).catch(console.error);\r\n } else {\r\n loadTranslates().catch(console.error);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [language, wasCreatedFromFabricator])\r\n\r\n return translations ? (\r\n console.info(error)}>\r\n {children}\r\n \r\n ) : null\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n wasCreatedFromFabricator: store.fabricatorState.wasCreatedFromFabricator,\r\n language: store.serverState.language,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TranslatesProvider)\r\n","import {IntermediatePart} from \"../parts/intermediatePart\";\r\n\r\nexport default class Shadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'part_shadow';\r\n this.visible = false;\r\n this.partName = 'Part Shadow';\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Shadow());\r\n }\r\n}","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {wallsThumbnail} from \"../assets\";\r\n\r\nimport {Shower} from \"./shower\";\r\nimport {ShowerTubCombo} from \"./showerTubCombo\";\r\nimport Shadow from \"../subparts/shadow\";\r\nimport PonyWall from \"../subparts/wall/ponyWall\";\r\n\r\nimport WallA from \"../subparts/wall/wallA\";\r\nimport WallB from \"../subparts/wall/wallB\";\r\nimport WallC from \"../subparts/wall/wallC\";\r\nimport WallExR from \"../subparts/wall/wallExR\";\r\nimport WallExL from \"../subparts/wall/wallExL\";\r\nimport ExternallWall from \"../subparts/wall/externallWall\";\r\nimport VanityAccent from \"../subparts/wall/vanityAccent\";\r\nimport store from \"../../../../store\";\r\n\r\nexport class Wall extends Part {\r\n static id = 'Walls';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.vanityAccent = null;\r\n this.wallExR = null;\r\n this.wallExL = null;\r\n this.wallA = null;\r\n this.wallB = null;\r\n this.wallC = null;\r\n this.ponyWall = null;\r\n this.allWallsApplied = true;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"VanityAccent\":\r\n relatedItemName = \"vanityAccent\";\r\n RelatedItemClass = VanityAccent;\r\n break;\r\n case \"WallExtrusion\":\r\n case \"EX R\":\r\n relatedItemName = \"wallExR\";\r\n RelatedItemClass = WallExR;\r\n break;\r\n case \"ShowerDivider\":\r\n case \"EX L\":\r\n relatedItemName = \"wallExL\";\r\n RelatedItemClass = WallExL;\r\n break;\r\n case \"Wall A\":\r\n relatedItemName = \"wallA\";\r\n RelatedItemClass = WallA;\r\n break;\r\n case \"Wall B\":\r\n relatedItemName = \"wallB\";\r\n RelatedItemClass = WallB;\r\n break;\r\n case \"Wall C\":\r\n relatedItemName = \"wallC\";\r\n RelatedItemClass = WallC;\r\n break;\r\n case \"Pony Wall\":\r\n relatedItemName = \"ponyWall\";\r\n RelatedItemClass = PonyWall;\r\n break;\r\n case \"Shower Shadow\":\r\n if (\r\n dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n ) {\r\n relatedItemName = \"shadows\";\r\n RelatedItemClass = Shadow;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n if (relatedItemName === \"ponyWall\") {\r\n this[relatedItemName].type = Shower.Type.Custom;\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n let res = [];\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(res)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(res) : null;\r\n if (relatedItem.shadowFeature) {\r\n relatedItem.shadowFeature.layer.addTo(res)\r\n }\r\n });\r\n return res.length ? res : null;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n\r\n const activeShowerGroup = this.getActiveShowerGroup();\r\n const ponyWallIsActive = activeShowerGroup.showerDimensions() === \"Pony\";\r\n\r\n const shower = this.layout.parts[Shower.id];\r\n // const vanityAccent = this.layout.parts[Vanity.id].vanityAccent;\r\n return this.relatedItems.filter(item => {\r\n if (item.isPonyWallPart) {\r\n item.visible = ponyWallIsActive\r\n }\r\n return item.visible\r\n }).filter(item => item && item.visible).filter((relatedItem) => {\r\n return !(shower.isComplete() &&\r\n (relatedItem instanceof WallExL\r\n || (relatedItem instanceof WallExR && shower.showerBody && !shower.showerBody.activeFeature.partName.includes(\"Complete\"))))\r\n }).map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n if (relatedItem instanceof ExternallWall) { // there shouldn't be cases for this, but nevertheless, just in case\r\n relatedItem.selectedByUser = false\r\n }\r\n } else {\r\n if (!(relatedItem instanceof ExternallWall && relatedItem.selectedByUser)) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n showerTubComboIsActive() {\r\n const comboPart = this.layout.parts[ShowerTubCombo.id];\r\n return comboPart && comboPart.showerTubComboIsActive\r\n }\r\n\r\n getActiveShowerGroup() {\r\n return this.showerTubComboIsActive() ? this.layout.parts[ShowerTubCombo.id] : this.layout.parts[Shower.id];\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../parts/intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = super.navigationSubItems(filters, searchText)\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n}\r\n","import {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../assets';\r\nimport LargeCornerSeat from \"../subparts/showerAccessories/largeCornerSeat\";\r\nimport SoapDish from \"../subparts/showerAccessories/soapDish\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport SmallCornerShelf from \"../subparts/showerAccessories/smallCornerShelf\";\r\nimport CornerCaddie from \"../subparts/showerAccessories/cornerCaddie\";\r\nimport LargeCornerCaddie from \"../subparts/showerAccessories/largeCornerCaddie\";\r\nimport GrabBar from \"../subparts/showerAccessories/grabBar\";\r\n\r\nexport class ShowerAccessories extends Part {\r\n static id = 'Shower Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Shower Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.soapDish = null;\r\n this.largeCornerSeat = null;\r\n this.largeCornerCaddie = null;\r\n this.cornerCaddie = null;\r\n this.smallCornerShelf = null;\r\n this.grabBar = null;\r\n\r\n //current active caddie type\r\n this.caddie_type = \"large_corner_caddie\";\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Soap Dish\":\r\n relatedItemName = \"soapDish\";\r\n RelatedItemClass = SoapDish;\r\n break;\r\n case \"Large Corner Seat\":\r\n relatedItemName = \"largeCornerSeat\";\r\n RelatedItemClass = LargeCornerSeat;\r\n break;\r\n case \"Large Corner Caddie\":\r\n relatedItemName = \"largeCornerCaddie\";\r\n RelatedItemClass = LargeCornerCaddie;\r\n break;\r\n case \"Corner Caddie\":\r\n relatedItemName = \"cornerCaddie\";\r\n RelatedItemClass = CornerCaddie;\r\n break;\r\n case \"Small Corner Shelf\":\r\n relatedItemName = \"smallCornerShelf\";\r\n RelatedItemClass = SmallCornerShelf;\r\n break;\r\n case \"Grab Bar\":\r\n relatedItemName = \"grabBar\";\r\n RelatedItemClass = GrabBar;\r\n break;\r\n\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n subParts() {\r\n return this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this)\r\n }\r\n\r\n}\r\n\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import {Layout} from \"../../core/layout\";\r\n// import {PartMenuType} from \"../../constants\";\r\nimport SelectionMobileViewSwitchers from '../mobile/selectionMobileViewSwitchers';\r\nimport BodyPanelRadio from \"./bodyPanelRadio\";\r\nimport BodyPanelCheckbox from \"./bodyPanelCheckbox\";\r\nimport BodyPanelWizardSteps from \"./bodyPanelWizardSteps\";\r\n// import Analytics from \"../../../../analytics\";\r\nimport FilterSwitchers from \"../newFilters/filterSwitchers\";\r\nimport BodyPanelNavigationFiltersSteps from \"./bodyPanelNavigationFiltersSteps\";\r\nimport BacksplashSelect from \"../../../selectionWindow/backsplashSelect\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport CountertopSwitchers from \"../../../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../../../kvComponent/navigation/cabinetSwitchers\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../../../bvSceneComponent/core/constants\";\r\nimport LookAllWallsRadioButton from \"../../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\n\r\nclass BodyPanel extends Component {\r\n\r\n static propTypes = {\r\n // layout: PropTypes.instanceOf(Layout),\r\n activePart: PropTypes.object.isRequired,\r\n activeSubPart: PropTypes.object,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n useWizard: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n exitFeatureWizard: PropTypes.func,\r\n enableFeatureWizard: PropTypes.func,\r\n wizardGroups: PropTypes.array,\r\n filters: PropTypes.array,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n refreshCB: PropTypes.func,\r\n showFilterSelection: PropTypes.bool,\r\n showWizardGroupsSelection: PropTypes.bool,\r\n setStateActiveFeature: PropTypes.func,\r\n };\r\n\r\n backsplashSelectClick = (feature) => {\r\n this.props.refreshCB(); // update canvas\r\n this.props.refreshItems(); // update nav items\r\n if (this.props.setStateActiveFeature) {\r\n this.props.setStateActiveFeature(feature);\r\n }\r\n };\r\n\r\n renderAllWallsCheckbox = (showFilterSelection) => {\r\n const layout = getCurrentLayout();\r\n if (layout.isNewLayout) {\r\n return \r\n } else if (!showFilterSelection && this.props.activeSubPart && this.props.isWallItem(this.props.activeSubPart)\r\n && this.props.activeSubPart.partName !== \"Accent Wall\") {\r\n return \r\n }\r\n return null\r\n }\r\n\r\n render() {\r\n\r\n const showFilterSelection = this.props.showFilterSelection || this.props.showWizardGroupsSelection;\r\n const activeNavPart = this.props.activeSubPart || this.props.activePart;\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const useWizard = fabricatorSettings &&\r\n (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n let showNavigationFilters = useWizard && this.props.activeNavigationFilter\r\n && (this.props.activeNavigationFilter !== \"inlay_type\") && activeNavPart\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n if (useWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFilters = true;\r\n }\r\n\r\n const isCountertop = this.props.activeSubPart && (\r\n COUNTERTOP_GROUP.includes(this.props.activeSubPart.partId)\r\n || ((document.kvConfig.visualizerType === \"bvScene\" || document.kvConfig.visualizerType === \"Bathroom\")\r\n && COUNTERTOP_GROUP_BATHROOM.includes(this.props.activeSubPart.partId))\r\n );\r\n\r\n const isCabinet = this.props.activeSubPart && (CABINET_GROUP.includes(this.props.activeSubPart.partId)\r\n || (document.kvConfig.visualizerType === \"bvScene\" && CABINET_GROUP_BATHROOM.includes(this.props.activeSubPart.partId)));\r\n\r\n const layout = getCurrentLayout();\r\n\r\n return (\r\n
    \r\n

    {activeNavPart ? : null}

    \r\n
    \r\n {!showFilterSelection && this.props.activeSubPart && this.props.activeSubPart.canBeDisabled\r\n ? \r\n : null}\r\n {this.renderAllWallsCheckbox(showFilterSelection)}\r\n
    \r\n {/*{this.props.activePart.menuType === PartMenuType.Complex && this.props.activePart.subTypes().length && !showFilterSelection*/}\r\n {/* ? (*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/* {this.props.activePart.subTypes().map(subType => (*/}\r\n {/* */}\r\n {/* ))}*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/* ) : null}*/}\r\n {!showFilterSelection ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {this.props.useWizard && !this.props.showWizardGroupsSelection ? (\r\n \r\n ) : null}\r\n {activeNavPart.partId === \"backsplash\" ? : null}\r\n {isCountertop && !layout.isNewLayout ? : null}\r\n {isCabinet && !layout.isNewLayout ? : null}\r\n {showNavigationFilters ? (\r\n \r\n ) : null}\r\n {this.props.useFilters && !showFilterSelection ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanel);\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport PopoutWall from \"../subparts/walls/popoutWall\";\r\nimport Backsplash from \"../subparts/walls/backsplash\";\r\nimport store from \"../../../../store\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = wallsThumbnail;\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.popoutWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Popout Wall\":\r\n relatedItemName = \"popoutWall\";\r\n RelatedItemClass = PopoutWall;\r\n break;\r\n case \"Backsplash\":\r\n case \"backsplash\":\r\n relatedItemName = \"backsplash\";\r\n RelatedItemClass = Backsplash;\r\n break;\r\n case \"Ceiling\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"popout_wall\") {\r\n item.visible = item.getParent().layout.getCurrentLayoutAbbreviation().includes(\"P\")\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class CountertopCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n\r\n let newFeatures = this.getSameEdgesFeatures(featuresToDisplay);\r\n\r\n const featuresThatLeft = featuresToDisplay.filter(feature => {\r\n return !newFeatures.some(newFeature => newFeature.dbFeature.customDisplayName === feature.dbFeature.customDisplayName)\r\n });\r\n\r\n featuresThatLeft.forEach(feature => {\r\n let currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n if (newFeatures.every(countertopFeature => {\r\n let customDisplayName = countertopFeature.getCountertopGroupsSplittedFeatureName();\r\n return customDisplayName !== currentFeatureName\r\n })) {\r\n newFeatures.push(feature);\r\n }\r\n });\r\n\r\n return uniqBy(newFeatures, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getSameEdgesFeatures(featuresToDisplay) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n if (edgeFilterGroup) {\r\n let activeFeatureEdgeFilter = this.getFeatureEdgeFilter(this.activeFeature, edgeFilterGroup); // 1) take edge filter from active feature\r\n if (!activeFeatureEdgeFilter) { // 2) try to set it from active edge feature group active feature\r\n const edgeFeatureGroup = this.getParent().edge;\r\n if (edgeFeatureGroup && edgeFeatureGroup.activeFeature) {\r\n activeFeatureEdgeFilter = this.getFeatureEdgeFilter(edgeFeatureGroup.activeFeature, edgeFilterGroup);\r\n }\r\n }\r\n if (!activeFeatureEdgeFilter) { // 3) find at least some feature with edge filter\r\n for (let i = 0; i < featuresToDisplay.length; i++) {\r\n const edgeFilters = this.getFeatureEdgeFilter(featuresToDisplay[i], edgeFilterGroup);\r\n if (edgeFilters) {\r\n activeFeatureEdgeFilter = edgeFilters;\r\n break;\r\n }\r\n }\r\n }\r\n if (activeFeatureEdgeFilter) {\r\n const activeEdgeFilter = activeFeatureEdgeFilter[0];\r\n const activeEdgeFilter2 = activeFeatureEdgeFilter[1];\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n if (feature.notAvailableInVisualizer) {\r\n return false\r\n }\r\n const currentFeatureFilters = this.getFeatureEdgeFilter(feature, edgeFilterGroup);\r\n return currentFeatureFilters && (currentFeatureFilters.includes(activeEdgeFilter) || (\r\n activeEdgeFilter2 && currentFeatureFilters.includes(activeEdgeFilter2)\r\n ))\r\n });\r\n }\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n getFeatureEdgeFilter = (feature, edgeFilterGroup) => {\r\n if (!feature) {\r\n return null\r\n }\r\n if (!edgeFilterGroup) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n }\r\n return feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id] || feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n };\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n let splittedFromTheLayoutName = partName\r\n ? this.removeLayoutFromPartName(partName)\r\n : this.activeFeature.getMatchingFeatureName();\r\n const allEdgesCountertops = filteredFeatures.filter(feature => {\r\n return feature.getMatchingFeatureName() === splittedFromTheLayoutName\r\n });\r\n const sameEdgeCountertops = this.getSameEdgesFeatures(allEdgesCountertops);\r\n this.activeFeature = sameEdgeCountertops[0] || allEdgesCountertops[0] || null\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getArrayOfConditions\r\n ? this.features.filter(f => f.dbFeature.s3Bindings && f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n : this.features;\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n const edge = this.getParent().edge;\r\n let matchingEdgeFeature = null;\r\n if (edge && edge.activeFeature) {\r\n matchingEdgeFeature = edge.getMatchingCounterTop(edge.activeFeature, filteredFeatures);\r\n }\r\n this.activeFeature = matchingEdgeFeature || filteredFeatures[0];\r\n }\r\n if (this.setActiveFeatureParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\nimport store from \"../../../../store\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {getFilterGroupValueByName, getFilterGroupValues} from \"../../../../misc/utils\";\r\n\r\nexport default class EdgeCommon extends IntermediatePart {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const edgeFilterGroup = this.getEdgeFilterGroup();\r\n const countertop = this.getParent().countertop;\r\n\r\n // here we check if some countertop has the same name as currently active countertop & it has edge filter\r\n if (edgeFilterGroup && countertop && countertop.activeFeature) {\r\n featuresToDisplay = featuresToDisplay.map((feature) => {\r\n feature.notAvailableInVisualizer = !this.getMatchingCounterTop(feature);\r\n return feature\r\n });\r\n }\r\n\r\n if (edgeFilterGroup && (this.partId === \"edge_profile\")) { // Waterfall check for back countertop\r\n const waterFallFilter = getFilterGroupValueByName(\"Waterfall\", edgeFilterGroup);\r\n if (waterFallFilter) {\r\n featuresToDisplay = featuresToDisplay.filter(feature => {\r\n const edgeFilters = getFilterGroupValues(feature, edgeFilterGroup)\r\n return !edgeFilters || !edgeFilters.includes(waterFallFilter.id)\r\n })\r\n }\r\n }\r\n\r\n return featuresToDisplay.map(_ => {\r\n const featurePart = new DesignNavigationItem(_.featureName, _);\r\n featurePart.notAvailableInVisualizer = featurePart.part.notAvailableInVisualizer;\r\n return featurePart\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active edge feature\r\n this.matchingCounterTop = this.getMatchingCounterTop();\r\n console.log(\"this.matchingCounterTop\", this.matchingCounterTop);\r\n if (this.matchingCounterTop) {\r\n this.matchingCounterTop.handleClick(true);\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getMatchingCounterTop = (feature = this, countertopFeatures) => {\r\n const parent = feature.getParent();\r\n const countertop = parent.getParent().countertop;\r\n const edgeFilterGroup = feature.getEdgeFilterGroup();\r\n\r\n if (countertop && edgeFilterGroup) {\r\n const edgeFilterValue = feature.getEdgeFilterGroupFilters(feature, edgeFilterGroup);\r\n if (edgeFilterValue) {\r\n let matchingFeatures = (countertopFeatures || countertop.features).filter((feature) => {\r\n return (feature.dbFeature.filterValueIDs[edgeFilterGroup.id]\r\n && feature.dbFeature.filterValueIDs[edgeFilterGroup.id].some(edgeFilterId => {\r\n return edgeFilterValue.some(currentEdgeFilterId => currentEdgeFilterId === edgeFilterId)\r\n })) ||\r\n (feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id]\r\n && feature.dbFeature.fabFilterValueIDs[edgeFilterGroup.id].some(edgeFilterId => {\r\n return edgeFilterValue.some(currentEdgeFilterId => currentEdgeFilterId === edgeFilterId)\r\n }))\r\n });\r\n matchingFeatures = matchingFeatures.filter(feature => !feature.notAvailableInVisualizer)\r\n let matchingByName = feature.getMatchingCounterTopFeaturesBySplittedName(countertop, matchingFeatures);\r\n return matchingByName.length\r\n ? matchingByName[0]\r\n : matchingFeatures.length\r\n ? matchingFeatures[0]\r\n : null\r\n }\r\n }\r\n return null\r\n };\r\n\r\n getEdgeFilterGroupFilters = (feature, edgeFilterGroup) => {\r\n edgeFilterGroup = edgeFilterGroup || this.getEdgeFilterGroup();\r\n return getFilterGroupValues(feature, edgeFilterGroup)\r\n };\r\n\r\n getMatchingCounterTopFeaturesBySplittedName = (countertop, matchingFeatures = []) => { // array of sorted by filter features\r\n if (!countertop.activeFeature) {\r\n return []\r\n }\r\n let currentActiveName = countertop.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n return matchingFeatures.filter(feature => {\r\n const currentFeatureName = feature.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureName === currentActiveName\r\n })\r\n };\r\n\r\n getEdgeFilterGroup = () => {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n return filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n };\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n setLayers() {\r\n return false\r\n }\r\n\r\n setZIndex() {\r\n return false\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport FilterSelection from \"./filterSelection\";\r\nimport PropTypes from \"prop-types\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setCountertopWizard,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {wizardAllButton} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport {replaceFilterArrayValue, toggleFilterArrayValue} from \"./filterSwitchers\";\r\nimport {getBvGroupFilterValues} from \"../../../../api/server-api\";\r\nimport {setAvailableFilterValues} from \"../../../../actions/filtersFunctions\";\r\nimport {s3FilterImagePath} from \"../../../../misc/utils\";\r\nimport {getAllFilterGroupValuesFromGroup} from \"../../../../misc/helpers\";\r\n\r\nclass NavigationFilters extends Component {\r\n\r\n static propTypes = {\r\n isMobile: PropTypes.bool,\r\n activePart: PropTypes.object.isRequired,\r\n onItemClick: PropTypes.func.isRequired,\r\n refreshCB: PropTypes.func.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n availableFilterValues: [],\r\n isLoading: false,\r\n filterGroup: {}\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setAvailableFiltersValues(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if ((nextProps.activePart && this.props.activePart && nextProps.activePart.partName !== this.props.activePart.partName)\r\n || (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter)) {\r\n this.setAvailableFiltersValues(nextProps);\r\n }\r\n this.resetFilters(nextProps);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.removeNavigationFiltersAndSetCommonView();\r\n }\r\n\r\n resetFilters(nextProps) {\r\n if ((nextProps.activeNavigationFilter !== this.props.activeNavigationFilter)\r\n && (nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId)\r\n && nextProps.selectedFilters.length\r\n ) {\r\n this.props.setSelectedFilters([]); // reset filters on color step\r\n }\r\n }\r\n\r\n getFilterGroupNameByButtonId(nextProps) {\r\n let activeButton = null;\r\n switch (nextProps.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n activeButton = CABINET_WIZARD_BUTTONS.find(button => button.buttonId === nextProps.activeNavigationFilter);\r\n break;\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n activeButton = COUNTERTOP_WIZARD_BUTTONS.find(button => button.buttonId === nextProps.activeNavigationFilter);\r\n break;\r\n default:\r\n break;\r\n }\r\n return activeButton ? activeButton.filtersGroupName : \"\";\r\n }\r\n\r\n setAvailableFiltersValues(nextProps = this.props) {\r\n const filterGroupName = this.getFilterGroupNameByButtonId(nextProps);\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup) {\r\n const selectedFilters = (filterGroup.name === COUNTERTOP_WIZARD_BUTTONS[2].filtersGroupName)\r\n ? nextProps.selectedFilters : []; // filter by selected filters only on 2nd(Material step)\r\n const availableFilterValues = FilterSelection.getAvailableFilterValues(\r\n nextProps.filterGroups, filterGroupName, nextProps.activePart, this.props.fabricatorData, selectedFilters\r\n );\r\n // console.log(\"availableFilterValues::\", availableFilterValues);\r\n const reorderedFilterValues = this.reorderFilterItems(nextProps, availableFilterValues);\r\n const countertopMaterialOrColor = (\r\n nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || nextProps.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n );\r\n if (countertopMaterialOrColor ) {\r\n if (this.props.availableFilterValues[filterGroup.id]) {\r\n this.setToStateFilterValues([\"All\", ...this.props.availableFilterValues[filterGroup.id]], filterGroup);\r\n } else {\r\n this.setState({\r\n isLoading: true\r\n });\r\n getBvGroupFilterValues(nextProps.activePart.dbName || nextProps.activePart.partName, filterGroup.id)\r\n .then((response) => {\r\n this.props.setAvailableFilterValues({\r\n [filterGroup.id]: response.data\r\n });\r\n this.setToStateFilterValues([\"All\", ...response.data], filterGroup);\r\n })\r\n }\r\n } else {\r\n this.setToStateFilterValues(reorderedFilterValues, filterGroup);\r\n }\r\n }\r\n }\r\n\r\n setToStateFilterValues = (availableFilterValues, filterGroup) => {\r\n this.setState({\r\n isLoading: false,\r\n availableFilterValues,\r\n filterGroup\r\n })\r\n };\r\n\r\n setParentFilterValues = (filterValues) => {\r\n const nextProps = this.props;\r\n const filterGroupName = this.getFilterGroupNameByButtonId(nextProps);\r\n const filterGroup = nextProps.filterGroups.find(group => group.name === filterGroupName);\r\n const selectedFilters = (filterGroup.name === COUNTERTOP_WIZARD_BUTTONS[2].filtersGroupName)\r\n ? nextProps.selectedFilters : []; // filter by selected filters only on 2nd(Material step)\r\n\r\n let availableFilterValues = [];\r\n if (selectedFilters.length) {\r\n const colorFilterName = COUNTERTOP_WIZARD_BUTTONS[1].filtersGroupName;\r\n const colorFilterGroup = nextProps.filterGroups.find(group => {\r\n return group.name === colorFilterName\r\n });\r\n if (colorFilterGroup) {\r\n const selectedColorFilter = selectedFilters.find(filterG => filterG.filterGroupId === colorFilterGroup.id);\r\n const selectedColorValue = selectedColorFilter && selectedColorFilter.filterId;\r\n if (selectedColorValue || selectedColorValue === 0) {\r\n filterValues.forEach(filterValue => {\r\n if (nextProps.activePart.features.some(feature => {\r\n return feature.dbFeature\r\n && feature.dbFeature.filterValueIDs[filterGroup.id]\r\n && feature.dbFeature.filterValueIDs[filterGroup.id].includes(filterValue)\r\n && feature.dbFeature.filterValueIDs[colorFilterGroup.id]\r\n && feature.dbFeature.filterValueIDs[colorFilterGroup.id].includes(selectedColorValue)\r\n })) {\r\n availableFilterValues.push(filterValue)\r\n }\r\n })\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n } else {\r\n availableFilterValues = filterValues;\r\n }\r\n const reorderedFilterValues = this.reorderFilterItems(this.props, availableFilterValues);\r\n this.setState({\r\n availableFilterValues: reorderedFilterValues\r\n })\r\n };\r\n\r\n reorderFilterItems = (nextProps, availableFilterValues) => {\r\n const currentActiveFilters = nextProps.activePart.activeFeature\r\n ? nextProps.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n // console.log(\"currentActiveFilters\", currentActiveFilters);\r\n return availableFilterValues.sort((a,b) => {\r\n const activeA = this.filterValueIsActive(currentActiveFilters, a);\r\n const activeB = this.filterValueIsActive(currentActiveFilters, b);\r\n return activeA !== activeB ? activeA < activeB ? -1 : 1 : 0;\r\n })\r\n };\r\n\r\n getFeatureBodyItemThumbnail = (currentFilterValue) => { // we have the logic with additionalImages in the FeatureWizardBody component\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n };\r\n\r\n filterValueIsActive = (currentActiveFilters, currentFilterValue) => {\r\n const activeNavigationFilter = this.props.activeNavigationFilter;\r\n const countertopMaterialOrColor = (\r\n activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[1].buttonId\r\n || activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId\r\n );\r\n if (countertopMaterialOrColor) {\r\n return false\r\n }\r\n if (activeNavigationFilter === \"inlay_type\" && this.state.filterGroup && this.state.filterGroup.values) {\r\n const modulePartJoined = this.props.moduleContextMenuModule + \"_\" + this.props.moduleContextMenuModulePart; //\"2_3\"\r\n for (let i = 0; i <= this.props.activePart.inlayTypes.length - 1; i++) {\r\n const inlayTypeObject = this.props.activePart.inlayTypes[i];\r\n const existingMJoined = inlayTypeObject.moduleParts.find(mJoined => mJoined === modulePartJoined);\r\n if (existingMJoined) { // not default!\r\n const fValue = this.state.filterGroup.values.find(val => val.value === inlayTypeObject.name);\r\n return fValue.id === currentFilterValue.id\r\n }\r\n }\r\n return currentFilterValue.value === this.props.activePart.defaultInlayType\r\n // } else if ((activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId)\r\n // || (activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[3].buttonId)) {\r\n // // return this.props.counterTopWizard[activeNavigationFilter] === currentFilterValue.id\r\n // const selectedFilter = this.props.selectedFilters.find(selectedF => {\r\n // return selectedF.filterGroupId === this.state.filterGroup.id\r\n // });\r\n // return (currentFilterValue.id === \"All\")\r\n // ? !selectedFilter\r\n // : selectedFilter && (selectedFilter.filterId === currentFilterValue.id)\r\n }\r\n\r\n return this.state.filterGroup && currentActiveFilters[this.state.filterGroup.id]\r\n && currentActiveFilters[this.state.filterGroup.id].includes(currentFilterValue.id);\r\n };\r\n\r\n removeNavigationFiltersAndSetCommonView = () => {\r\n const commonView = (this.props.windowWidth < 991) ? 4 : 3;\r\n if ((this.props.activeNavigationFilter === COUNTERTOP_WIZARD_BUTTONS[2].buttonId)\r\n && this.props.navigationViewType !== commonView) {\r\n this.props.setNavigationViewType(commonView);\r\n }\r\n this.props.setActiveNavigationFilter(null);\r\n };\r\n\r\n handleFilterValueClick = (currentFilterValue) => {\r\n // if (isActive) {\r\n // return // we don't need to do anything on active item click\r\n // }\r\n // console.log(\"currentFilterValue\", currentFilterValue);\r\n switch (this.props.activeNavigationFilter) {\r\n case \"inlay_type\": {\r\n const modulePartJoined = this.props.moduleContextMenuModule + \"_\" + this.props.moduleContextMenuModulePart; //\"2_3\"\r\n let neededInlayTypesObject = this.props.activePart.inlayTypes.find(obj => obj.name === currentFilterValue.value);\r\n if (currentFilterValue.value !== this.props.activePart.defaultInlayType) {\r\n if (!neededInlayTypesObject) {\r\n neededInlayTypesObject = {name: currentFilterValue.value, moduleParts: []}; // create new & push\r\n this.props.activePart.inlayTypes.push(neededInlayTypesObject);\r\n }\r\n if (!neededInlayTypesObject.moduleParts.includes(modulePartJoined)) {\r\n neededInlayTypesObject.moduleParts.push(modulePartJoined);\r\n this.props.activePart.activeFeatureParts = this.props.activePart.setActiveFeatureParts();\r\n this.props.refreshCB();\r\n }\r\n } else { // it is default type, we need to remove it from the not-default inlayTypes\r\n this.props.activePart.inlayTypes.forEach(inlayTypeObj => {\r\n const existingMJoinedIndex = inlayTypeObj.moduleParts.findIndex(mJoined => mJoined === modulePartJoined);\r\n if (existingMJoinedIndex > -1) {\r\n inlayTypeObj.moduleParts.splice(existingMJoinedIndex, 1);\r\n this.props.activePart.activeFeatureParts = this.props.activePart.setActiveFeatureParts();\r\n this.props.refreshCB();\r\n }\r\n });\r\n }\r\n this.forceUpdate(); // re-render to set new active item\r\n break;\r\n }\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId: {\r\n // this.props.setCountertopWizard({ // not needed for now, but probably we would need this logic in future\r\n // [this.props.activeNavigationFilter] : currentFilterValue.id\r\n // });\r\n if (currentFilterValue.id === \"All\") {\r\n const selectedFilter = this.props.selectedFilters.find(selectedF => {\r\n return selectedF.filterGroupId === this.state.filterGroup.id\r\n });\r\n if (selectedFilter) { // should work always, but just in case\r\n this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters], {\r\n filterId: selectedFilter.filterId,\r\n filterGroupId: this.state.filterGroup.id\r\n })); // remove selected filter\r\n }\r\n this.removeNavigationFiltersAndSetCommonView();\r\n } else if (Array.isArray(currentFilterValue.items) && currentFilterValue.items.length) {\r\n this.setParentFilterValues(currentFilterValue.items.map(fValue => fValue.id))\r\n } else {\r\n this.props.setSelectedFilters(replaceFilterArrayValue([...this.props.selectedFilters], {\r\n filterId: currentFilterValue.id,\r\n filterGroupId: this.state.filterGroup.id\r\n }));\r\n this.removeNavigationFiltersAndSetCommonView();\r\n }\r\n break;\r\n }\r\n default: {\r\n let matchingFeatures = this.props.activePart.features.filter((feature) => {\r\n return this.state.filterGroup && feature.dbFeature.filterValueIDs[this.state.filterGroup.id]\r\n && feature.dbFeature.filterValueIDs[this.state.filterGroup.id].includes(currentFilterValue.id)\r\n });\r\n if (this.props.activePart.partId === \"top_cabinet\" && this.props.activePart.activeFeature.metaData[\"Module\"]) {\r\n const activeFeatureNameSplitted = this.props.activePart.activeFeature.partName.split(\" M \");\r\n matchingFeatures = matchingFeatures.filter((feature) => {\r\n const featureNameSplitted = feature.partName.split(\" M \");\r\n return (featureNameSplitted.length > 1) && (activeFeatureNameSplitted.length > 1)\r\n && featureNameSplitted[1] === activeFeatureNameSplitted[1]\r\n })\r\n } else if (this.props.activePart.partId === \"bottom_cabinet\" && this.props.activePart.activeFeature.metaData[\"Module\"]) {\r\n matchingFeatures = matchingFeatures.filter((feature) => feature.metaData[\"Appliance\"]\r\n && feature.metaData[\"Appliance\"].includes(\"Range\"))\r\n } else if (this.props.activePart.partId === \"countertop\" || this.props.activePart.partId === \"center_island_countertop\") {\r\n matchingFeatures = this.getMatchingFeaturesBySplittedName(matchingFeatures);\r\n }\r\n if (matchingFeatures.length) {\r\n this.props.onItemClick({part:matchingFeatures[0]}, true);\r\n this.forceUpdate(); // re-render to set new active item\r\n }\r\n break;\r\n }\r\n }\r\n\r\n };\r\n\r\n getMatchingFeaturesBySplittedName = (matchingFeatures = []) => { // array of sorted by filter features\r\n let currentActiveName = this.props.activePart.activeFeature.partName;\r\n const filterGroupName = this.getFilterGroupNameByButtonId(this.props);\r\n const filterGroup = this.props.filterGroups.find(group => group.name === filterGroupName);\r\n if (filterGroup && filterGroup.values && filterGroup.values.length) {\r\n filterGroup.values.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n currentActiveName = currentActiveName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n }\r\n return matchingFeatures.filter(feature => {\r\n let featureName = feature.partName;\r\n filterGroup.values.forEach((filterGroupValue) => { // arrayOf {id: 293, value: \"Eased\", displayText: \"Eased\", parent_id: null, icon: \"\", …}\r\n featureName = featureName.split(\" \"+filterGroupValue.value).join(\"\");\r\n });\r\n return featureName === currentActiveName\r\n })\r\n };\r\n\r\n getFilterFeatureItem = (filterValue, currentIndex, currentActiveFilters) => {\r\n const currentFilterValue = filterValue === \"All\"\r\n ? wizardAllButton\r\n : getAllFilterGroupValuesFromGroup(this.state.filterGroup).find(val => val.id === filterValue); // Object\r\n if (!currentFilterValue) {\r\n // console.log(\"NO filterValue!\", filterValue, currentIndex, this.state.availableFilterValues);\r\n return;\r\n }\r\n let thumbnail = this.getFeatureBodyItemThumbnail(currentFilterValue);\r\n\r\n const styles = {\r\n backgroundSize: this.props.activeNavigationFilter === \"color\" ? \"cover\" : \"inherit\"\r\n };\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail && currentFilterValue && this.props.activeNavigationFilter === \"color\") {\r\n styles.backgroundColor = currentFilterValue.value;\r\n }\r\n if (filterValue === \"All\") {\r\n styles.backgroundSize = (this.props.windowWidth < 991) ? \"70%\" : \"50%\";\r\n styles.backgroundPosition = \"top 30% center\";\r\n }\r\n const isActive = this.filterValueIsActive(currentActiveFilters, currentFilterValue);\r\n\r\n return this.props.isMobile ? (\r\n
  • \r\n
    this.handleFilterValueClick(currentFilterValue)}\r\n style={styles}>\r\n
    \r\n {currentFilterValue.displayText}\r\n
    \r\n
    \r\n
  • \r\n ) : (\r\n
    this.handleFilterValueClick(currentFilterValue)}\r\n style={styles}>\r\n
    \r\n {currentFilterValue.displayText}\r\n
    \r\n
    \r\n )\r\n };\r\n\r\n renderMobileFiltersList = () => {\r\n\r\n if (this.state.isLoading) {\r\n return this.renderLoadingList();\r\n }\r\n\r\n const currentActiveFilters = this.props.activePart.activeFeature\r\n ? this.props.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n\r\n if (!this.state.filterGroup || !this.state.filterGroup.values) {\r\n return [];\r\n }\r\n\r\n return this.state.availableFilterValues.map((filterValue, filterValueIndex) => {\r\n return this.getFilterFeatureItem(filterValue, filterValueIndex, currentActiveFilters)\r\n })\r\n };\r\n\r\n renderFiltersList = () => {\r\n\r\n const currentActiveFilters = this.props.activePart.activeFeature\r\n ? this.props.activePart.activeFeature.dbFeature.filterValueIDs\r\n : {};\r\n\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n const elements = [];\r\n for (let i = 0; i <= Math.ceil(this.state.availableFilterValues.length - 1 / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n const currentIndex = j+(i*navigationViewType);\r\n // console.log(\"currentIndex\", currentIndex);\r\n const filterValue = this.state.availableFilterValues[currentIndex]; // Number, for example 1031\r\n if (!this.state.filterGroup || !this.state.filterGroup.values) {\r\n break;\r\n }\r\n innerElements.push(this.getFilterFeatureItem(filterValue, currentIndex, currentActiveFilters));\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n renderLoadingList() {\r\n return
    \r\n }\r\n\r\n render() {\r\n return this.props.isMobile ? this.renderMobileFiltersList() : (\r\n
      \r\n {this.state.isLoading ? this.renderLoadingList() : this.renderFiltersList()}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n moduleContextMenuModule: store.navigationState.moduleContextMenuModule,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n counterTopWizard: store.navigationState.counterTopWizard,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n selectedFilters: store.filterState.selectedFilters,\r\n availableFilterValues: store.filterState.availableFilterValues,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCountertopWizard,\r\n setSelectedFilters,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setAvailableFilterValues,\r\n})(NavigationFilters);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport SelectionMobileViewSwitchers from '../mobile/selectionMobileViewSwitchers';\r\nimport FeatureWizardSteps from './featureWizardSteps';\r\nimport FeatureWizardBody from './featureWizardBody';\r\nimport UserLoginButton from './../../../ui/userLoginButton';\r\nimport BodyPanel from \"../desktop/bodyPanel\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\nimport {NotQCVanityDoorStylesFilters} from \"../../../bvComponent/core/constants\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\n\r\nclass FeatureWizard extends Component {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n exitFeatureWizard: PropTypes.func.isRequired,\r\n handleNavigationItemClick: PropTypes.func.isRequired,\r\n isMobile: PropTypes.bool.isRequired,\r\n wizardGroups: PropTypes.array.isRequired,\r\n setWizardGroups: PropTypes.func.isRequired,\r\n changeMessageBoxState: PropTypes.func.isRequired,\r\n setWizardLockedItem: PropTypes.func,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n userIsLoggedIn: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n searchText: PropTypes.string,\r\n // bodyPanelNeededProps\r\n activePart: PropTypes.object,\r\n activeSubPart: PropTypes.object,\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func,\r\n showerWallWizardGroupsSelected: PropTypes.bool,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n handleSearchInputChange: PropTypes.func,\r\n // bodyPanelNeededProps end\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n window.itemClickCount = window.itemClickCount || 0;\r\n window.allowClickLeadCapturePopup = true;\r\n this.state = {\r\n availableSteps: [],\r\n defaultSteps: [],\r\n featureWizardStep: 0,\r\n showMobileGroups: false,\r\n mounted: false,\r\n finishClicked: true,\r\n filteredFeatures: [],\r\n reload: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n let availableSteps = [];\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n const filteredFeatures = this.getFilteredFeatures();\r\n const itemIsSelected = this.activeItemIsSelected();\r\n\r\n filteredFeatures.forEach((feature) => {\r\n this.props.wizardGroups.forEach((wizardGroup) => {\r\n // console.log('wizardGroup', wizardGroup);\r\n const filter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === wizardGroup.filterName);\r\n if (filter) {\r\n const filterId = filter.id;\r\n\r\n let currentFilter = availableSteps.find(step => step.filterName === wizardGroup.filterName);\r\n if (!currentFilter) {\r\n currentFilter = {\r\n filterName: wizardGroup.filterName,\r\n values: wizardGroup.values || [],\r\n id: filterId,\r\n selectedValueId: wizardGroup.selectedValueId,\r\n selectedValueName: wizardGroup.selectedValueName,\r\n hidden: this.checkStepForHidden(filter.name),\r\n hasValues: false\r\n };\r\n availableSteps.push(currentFilter);\r\n }\r\n\r\n const sizeIds = feature.dbFeature.filterValueIDs[filterId];\r\n if (sizeIds) {\r\n if (!currentFilter.hasValues) {\r\n currentFilter.hasValues = true;\r\n }\r\n sizeIds.forEach(filterValue => {\r\n const filterValueExist = currentFilter.values.find(wizardValueObject => +wizardValueObject.filterValue === +filterValue);\r\n if (!filterValueExist) {\r\n let doNotPush = false;\r\n if (currentFilter.filterName === \"DoorStyle\" || currentFilter.filterName === \"Material\") {\r\n const fValue = filter.values.find(val => val.id === filterValue);\r\n if (fValue) {\r\n if (fValue.value === \"QC Hermosa\" || (fValue.value === \"Slab\" && this.props.fabricatorData.isRebath)) {\r\n doNotPush = true\r\n }\r\n }\r\n }\r\n if (!doNotPush) {\r\n currentFilter.values.push({\r\n selectionAvailable: true,\r\n filterValue\r\n })\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n });\r\n\r\n availableSteps = availableSteps.filter(currentFilter => currentFilter.hasValues); // we might have no filter values\r\n\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n if (itemIsSelected && this.props.activeSubPart.activeFeature) { // set active filters from the active item\r\n // if (this.props.activeSubPart.activeFeature && this.props.activeSubPart.firstClick[this.props.activeQuoteIndex] && this.props.activeSubPart.placeholderChanged) {\r\n const currentActiveFilters = this.props.activeSubPart.activeFeature.dbFeature.filterValueIDs;\r\n availableSteps = availableSteps.map(step => {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.id === step.id\r\n });\r\n let filterGroupValue = {};\r\n if (currentActiveFilters[step.id]) {\r\n const selectedFilterValueId = currentActiveFilters[step.id][0];\r\n filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === selectedFilterValueId\r\n });\r\n }\r\n if (filterGroupValue) {\r\n step.selectedValueName = filterGroupValue.displayText;\r\n step.selectedValueId = filterGroupValue.id;\r\n }\r\n step.selectedItemIsLocked = this.getLockedPropertyValueObjectById(filterGroupValue, filterGroupValue.id, step.id, filteredFeatures);\r\n return step\r\n })\r\n }\r\n\r\n this.setState({\r\n filteredFeatures,\r\n defaultSteps: availableSteps.map(a => Object.assign({}, a)), // they need to be different\r\n availableSteps: availableSteps.map(b => Object.assign({}, b)),\r\n // showMobileGroups: allStepsCompleted,\r\n featureWizardStep: this.props.wizardStepIndex <= availableSteps.filter(step => !step.hidden).length - 1 ? this.props.wizardStepIndex : 0,\r\n finishClicked: allStepsCompleted\r\n }, () => {\r\n if (this.activeItemIsSelected()) {\r\n this.updateStepValues(availableSteps);\r\n }\r\n this.setLockedView();\r\n setTimeout(() => {\r\n this.setState({\r\n mounted: true\r\n });\r\n }, 0)\r\n });\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.props.setWizardGroups(this.state.availableSteps, this.props.activeSubPart.partId);\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN, this.userHasLoggedIn);\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeSubPart && this.props.activeSubPart && (nextProps.activeSubPart.partId !== this.props.activeSubPart.partId)) {\r\n this.componentDidMount();\r\n }\r\n }\r\n\r\n updateStepValues = (availableSteps = this.state.availableSteps, forceClick = false) => {\r\n this.setState({\r\n reload: forceClick,\r\n availableSteps: availableSteps.map((step, stepIndex) => {\r\n step.values = this.setStepValues(step, stepIndex);\r\n return step\r\n })\r\n }, () => {\r\n if (forceClick) {\r\n this.setState({\r\n reload: false\r\n })\r\n }\r\n })\r\n };\r\n\r\n getFilteredFeatures = () => {\r\n const activePart = this.props.activeSubPart;\r\n if (activePart.partId === \"shower_interior_wall\") {\r\n return activePart.navigationSubItemsWithFilterMultipleConditions(activePart.getArrayOfConditions())\r\n }\r\n return this.props.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"Hermosa\")\r\n })\r\n };\r\n\r\n getLockedPropertyValueObjectById = (currentFilterValue, filterValueId, stepId, filteredFeatures = this.state.filteredFeatures) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n filteredFeatures = filteredFeatures.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n let itemIsLocked = false;\r\n if (fabricatorSettings.leadCapture && !this.props.isPhoneNumberValidated && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) {\r\n if (currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[stepId];\r\n return filterToFind && filterToFind.includes(filterValueId) && feature.dbFeature.unlocked;\r\n })) {\r\n itemIsLocked = true\r\n }\r\n }\r\n return itemIsLocked\r\n };\r\n\r\n userHasLoggedIn = () => {\r\n const currentStep = this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep];\r\n if (currentStep.selectedValueId) {\r\n const selectedValue = currentStep.values.find(val => val.filterValue === currentStep.selectedValueId);\r\n if (selectedValue) { // just in case, we might remove this check\r\n this[selectedValue.selectionAvailable ? \"onItemClick\" : \"onItemClickDisabled\"](\r\n {\r\n id:currentStep.selectedValueId,\r\n value: currentStep.selectedValueName,\r\n displayText: currentStep.selectedValueName\r\n },\r\n false,\r\n currentStep.filterName\r\n )\r\n }\r\n }\r\n };\r\n\r\n activeItemIsSelected = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const activeSubPart = this.props.activeSubPart;\r\n return (!fabricatorSettings.leadCapture\r\n || (activeSubPart.activeFeature && !activeSubPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n };\r\n\r\n checkStepForHidden = (filterGroupName) => {\r\n let hidden = false;\r\n filterGroupName = filterGroupName.trim().toLowerCase();\r\n if (this.activeItemIsSelected() && this.props.activeSubPart.activeFeature) {\r\n\r\n const currentActiveFilters = this.props.activeSubPart.activeFeature.dbFeature.filterValueIDs;\r\n\r\n if (this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n const materialFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"Material\");\r\n if (materialFilter && currentActiveFilters[materialFilter.id]) { // check for existing BV filters\r\n const materialValueId = currentActiveFilters[materialFilter.id][0];\r\n const materialValue = materialFilter.values.find(val => val.id === materialValueId);\r\n if (materialValue && (\r\n (materialValue.value !== \"DuraBath\" && filterGroupName === \"durabathcolor\")\r\n || (materialValue.value !== \"DuraBath\" && materialValue.value !== \"Tile\" && filterGroupName === \"tilepattern\")\r\n || (materialValue.value !== \"Acrylic\" && filterGroupName === \"acrylicpattern\")\r\n || (materialValue.value !== \"Acrylic\" && filterGroupName === \"acryliccolor\")\r\n || (materialValue.value !== \"Tile\" && filterGroupName === \"tilecolor\")\r\n || (materialValue.value !== \"Slab\" && materialValue.value !== \"DuraBath Natural Stone\" && filterGroupName === \"slabcolor\")\r\n )) {\r\n hidden = true;\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n if (doorStyleFilter && currentActiveFilters[doorStyleFilter.id]) { // check for existing BV filters\r\n const doorStyleValueId = currentActiveFilters[doorStyleFilter.id][0];\r\n const doorStyleValue = doorStyleFilter.values.find(val => val.id === doorStyleValueId);\r\n if (doorStyleValue && (\r\n (!NotQCVanityDoorStylesFilters.includes(doorStyleValue.value) && filterGroupName === \"material\")\r\n )) {\r\n hidden = true;\r\n }\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n const wizardFilters = [\"slabcolor\", \"tilecolor\", \"tilepattern\", \"acrylicpattern\", \"acryliccolor\"];\r\n hidden = wizardFilters.includes(filterGroupName);\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n hidden = filterGroupName === \"material\"\r\n }\r\n return hidden\r\n };\r\n\r\n setLockedView = () => {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n\r\n const currentStep = this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep];\r\n if (currentStep && currentStep.selectedValueId && fabricatorSettings.leadCapture && !this.props.isPhoneNumberValidated) {\r\n const currentGroup = this.props.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === currentStep.id\r\n });\r\n const currentFilterValue = currentGroup.values.find(currentGroupValue => {\r\n return currentGroupValue.id === currentStep.selectedValueId\r\n });\r\n const filteredFeatures = this.state.filteredFeatures.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n\r\n let itemIsLocked = false;\r\n if (currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[currentStep.id];\r\n return filterToFind && filterToFind.includes(currentStep.selectedValueId) && feature.dbFeature.unlocked;\r\n })) {\r\n itemIsLocked = true\r\n }\r\n\r\n this.props.setWizardLockedItem(itemIsLocked);\r\n }\r\n };\r\n\r\n // getCurrentFilterObject = (stepIndex) => {\r\n getCurrentFilterObject = () => {\r\n const selectedFilterObject = {};\r\n // const availableSteps = (stepIndex || stepIndex === 0)\r\n // ? this.state.availableSteps.slice(0, stepIndex) // we need to get only previous selected values if index is passed\r\n // : this.state.availableSteps;\r\n this.state.availableSteps.filter(step => !step.hidden).forEach((availableStep) => {\r\n if (availableStep.selectedValueId) {\r\n selectedFilterObject[availableStep.id] = availableStep.selectedValueId\r\n }\r\n });\r\n return selectedFilterObject\r\n };\r\n\r\n setFeatureWizardStep = (featureWizardStep) => {\r\n const availableSteps = !featureWizardStep && !this.state.availableSteps[0].selectedValueId\r\n ? this.state.defaultSteps\r\n : this.state.availableSteps.map((availableStep, index) => {\r\n availableStep.values = this.setStepValues(availableStep, index);\r\n return availableStep\r\n });\r\n this.setState({\r\n featureWizardStep: availableSteps.filter(step => !step.hidden)[featureWizardStep] ? featureWizardStep : 0,\r\n showMobileGroups: false,\r\n availableSteps\r\n }, () => {\r\n this.setLockedView();\r\n });\r\n this.props.handleSearchInputChange({target: {value: ''}});\r\n };\r\n\r\n setStepValues = (step, stepIndex) => {\r\n const selectedFilterObject = this.getCurrentFilterObject(stepIndex); // get only previous selected values\r\n // console.log('selectedFilterObject111', selectedFilterObject);\r\n return this.state.defaultSteps[stepIndex].values.map((wizardValueObject) => {\r\n let allFiltersObject = Object.assign({}, selectedFilterObject);\r\n\r\n // if (this.props.activeSubPart.partId === \"vanity_cabinet\" && step.filterName === \"Color\" && selectedFilterObject) {\r\n // const doorStyleFilter = this.props.filterGroups.find(filterGroup => filterGroup.name.trim() === \"DoorStyle\");\r\n // if (doorStyleFilter && selectedFilterObject[doorStyleFilter.id] === 661) {\r\n // selectedFilterObject[doorStyleFilter.id] = 660 // TODO[Artem] REMOVE THIS HARDCODE (QC HERMOZA HAS WRONG FILTER ID!)\r\n // }\r\n // }\r\n\r\n allFiltersObject[step.id] = +wizardValueObject.filterValue;\r\n // console.log('allFiltersObject', allFiltersObject);\r\n wizardValueObject.selectionAvailable = this.state.filteredFeatures.some(feature => {\r\n const featureFilters = feature.dbFeature.filterValueIDs;\r\n if (featureFilters && Object.keys(allFiltersObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey].includes(allFiltersObject[filterKey])\r\n })) {\r\n // console.log('feature', feature);\r\n return true\r\n }\r\n return false\r\n });\r\n return wizardValueObject\r\n });\r\n };\r\n\r\n getFilterValue = (step, filterValue) => {\r\n const filterGroup = this.props.filterGroups.find(filterGroup => {\r\n return filterGroup.id === this.state.availableSteps.filter(step => !step.hidden)[step].id\r\n });\r\n const filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === +filterValue.id\r\n });\r\n return filterGroupValue\r\n };\r\n\r\n onItemClick = (filterValue, itemIsLocked, currentStepFilterName, forceClick = false) => {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if( !this.props.userIsLoggedIn && fabricatorSettings.clickLeadCapture\r\n && ++window.itemClickCount >= fabricatorSettings.clickLeadCount && window.allowClickLeadCapturePopup) {\r\n this.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n\r\n let resetStepValues = false;\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && (currentStepFilterName === \"Size\") && !itemIsLocked) {\r\n resetStepValues = true\r\n }\r\n\r\n /*** 1) just set new filter value ***/\r\n const availableSteps = this.state.availableSteps.map((availableStep) => {\r\n if (availableStep.filterName === currentStepFilterName) {\r\n availableStep.selectedValueId = filterValue.id;\r\n const filterGroupValue = this.getFilterValue(this.state.featureWizardStep, filterValue);\r\n availableStep.selectedValueName = filterGroupValue ? filterGroupValue.displayText : \"\";\r\n availableStep.selectedItemIsLocked = itemIsLocked;\r\n }\r\n /*** 2) add for filter steps hidden values & clear selected values ***/\r\n availableStep = this.setHiddenStateToStep(availableStep, currentStepFilterName, filterValue, forceClick || resetStepValues);\r\n // if (availableStep.needToRefresh) {\r\n // forceReload = true;\r\n // delete availableStep.needToRefresh\r\n // }\r\n return availableStep\r\n });\r\n\r\n /*** 3) if it is SelectionNotAvailableClick & clicked on a DoorStyle - check if current Vanity support it ***/\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && forceClick && currentStepFilterName === \"DoorStyle\") {\r\n\r\n const sizeStep = this.state.availableSteps.find(step => step.filterName === \"Size\");\r\n const doorStyleStep = this.state.availableSteps.find(step => step.filterName === currentStepFilterName);\r\n\r\n let existingIdeallyFeature = this.state.filteredFeatures.find(feature => {\r\n const doorStyleMatch = feature.dbFeature.filterValueIDs[doorStyleStep.id]\r\n && feature.dbFeature.filterValueIDs[doorStyleStep.id][0] === filterValue.id;\r\n const sizeMatch = sizeStep.selectedValueId && feature.dbFeature.filterValueIDs[sizeStep.id]\r\n && feature.dbFeature.filterValueIDs[sizeStep.id][0] === sizeStep.selectedValueId;\r\n return doorStyleMatch && sizeMatch\r\n });\r\n if (!existingIdeallyFeature) {\r\n existingIdeallyFeature = this.state.filteredFeatures.find(feature => {\r\n const doorStyleMatch = feature.dbFeature.filterValueIDs[doorStyleStep.id]\r\n && feature.dbFeature.filterValueIDs[doorStyleStep.id][0] === filterValue.id;\r\n return doorStyleMatch\r\n });\r\n }\r\n // console.log('existingIdeallyFeature', existingIdeallyFeature);\r\n if (existingIdeallyFeature) {\r\n const sizeValue = existingIdeallyFeature.dbFeature.filterValueIDs[sizeStep.id][0];\r\n if (sizeValue && sizeStep.selectedValueId !== sizeValue) {\r\n sizeStep.selectedValueId = sizeValue;\r\n const filterGroup = this.props.filterGroups.find(filterGroup => filterGroup.id === sizeStep.id);\r\n const filterGroupValue = filterGroup && filterGroup.values.find(filterGroupValue => {\r\n return filterGroupValue.id === sizeValue\r\n });\r\n sizeStep.selectedValueName = filterGroupValue ? filterGroupValue.displayText : \"\";\r\n sizeStep.selectedItemIsLocked = sizeStep.values.find(val => val.filterValue === sizeValue.itemIsLocked);\r\n }\r\n }\r\n } else if (this.props.activeSubPart.partId === \"shower_interior_wall\" && !itemIsLocked) {\r\n if (currentStepFilterName === \"DuraBathColor\") {\r\n const patternStep = this.state.availableSteps.find(step => step.filterName === \"TilePattern\");\r\n if (!patternStep.selectedValueId) {\r\n const patternGroup = this.props.filterGroups.find(filterGroup => filterGroup.id === patternStep.id);\r\n const patternGroupSlabValue = patternGroup.values.find(step => step.value === \"Smooth\");\r\n if (patternGroupSlabValue) {\r\n patternStep.selectedValueId = patternGroupSlabValue.id;\r\n patternStep.selectedValueName = patternGroupSlabValue.displayText;\r\n const smoothFilterObject = patternStep.values.find(val => val.filterValue === patternGroupSlabValue.id);\r\n patternStep.selectedItemIsLocked = smoothFilterObject ? smoothFilterObject.itemIsLocked : false\r\n }\r\n }\r\n }\r\n }\r\n this.setState({\r\n availableSteps,\r\n }, () => {\r\n this.tryToClickOnMatchingFiltersItem(itemIsLocked, forceClick)\r\n });\r\n };\r\n\r\n setHiddenStateToStep = (availableStep, currentStepFilterName, filterValue, resetStepValues) => {\r\n const filterValueName = filterValue.value.toLowerCase();\r\n const stepName = availableStep.filterName.toLowerCase();\r\n if (this.state.featureWizardStep === 0 && this.props.activeSubPart.partId === \"shower_interior_wall\") {\r\n availableStep.hidden =\r\n (filterValueName !== \"durabath\" && stepName === \"durabathcolor\")\r\n || (filterValueName !== \"durabath\" && filterValueName !== \"tile\" && stepName === \"tilepattern\")\r\n || (filterValueName !== \"acrylic\" && stepName === \"acrylicpattern\")\r\n || (filterValueName !== \"acrylic\" && stepName === \"acryliccolor\")\r\n || (filterValueName !== \"slab\" && filterValueName !== \"durabath natural stone\" && stepName === \"slabcolor\")\r\n || (filterValueName !== \"tile\" && stepName === \"tilecolor\")\r\n } else if (this.props.activeSubPart.partId === \"vanity_cabinet\") {\r\n if (currentStepFilterName === \"DoorStyle\") { // clicked on a door style step value\r\n const withoutDoorStyle = !NotQCVanityDoorStylesFilters.includes(filterValue.value);\r\n availableStep.hidden = (withoutDoorStyle && stepName === \"material\");\r\n\r\n const wizardIsFinished = this.state.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n\r\n if ((stepName === \"material\" || stepName === \"color\") && (resetStepValues || !wizardIsFinished)) {\r\n availableStep.selectedValueId = null;\r\n availableStep.selectedValueName = \"\";\r\n availableStep.selectedItemIsLocked = false;\r\n // availableStep.needToRefresh = true;\r\n }\r\n } else if (resetStepValues && currentStepFilterName === \"Size\" && stepName !== \"size\") { // clicked on a Size step value\r\n availableStep.selectedValueId = null;\r\n availableStep.selectedValueName = \"\";\r\n availableStep.selectedItemIsLocked = false;\r\n }\r\n }\r\n return availableStep\r\n };\r\n\r\n getPlaceholdersFeatures = () => {\r\n return this.state.filteredFeatures.filter(feature => feature.dbFeature.displayName.includes(\"WizardPlaceholder\"));\r\n };\r\n\r\n tryToClickOnMatchingFiltersItem = (itemIsLocked, forceClick) => {\r\n this.props.setWizardLockedItem(itemIsLocked);\r\n\r\n const selectedFilterObject = this.getCurrentFilterObject();\r\n // console.log('selectedFilterObject', selectedFilterObject);\r\n // console.log('=========');\r\n const arrayOfSelectedKeys = Object.keys(selectedFilterObject);\r\n const wizardIsFinished = this.state.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n const filteredFeatures = wizardIsFinished ? this.state.filteredFeatures : this.getPlaceholdersFeatures();\r\n\r\n const foundFeaturesFromFilters = filteredFeatures.filter(feature => {\r\n const featureFilters = feature.dbFeature.filterValueIDs;\r\n const arrayOfCurrentKeys = Object.keys(featureFilters);\r\n // console.log('featureFilters', featureFilters, feature.dbFeature.displayName);\r\n if (wizardIsFinished) {\r\n if (Object.keys(selectedFilterObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey].includes(selectedFilterObject[filterKey])\r\n })) {\r\n // console.log('feature', feature);\r\n return true\r\n }\r\n return false\r\n } else {\r\n if ((arrayOfCurrentKeys.length === arrayOfSelectedKeys.length) && Object.keys(selectedFilterObject).every((filterKey) => {\r\n return featureFilters[filterKey] && featureFilters[filterKey][0] === selectedFilterObject[filterKey]\r\n })) {\r\n // console.log('feature found', feature);\r\n return true\r\n }\r\n return false\r\n }\r\n });\r\n let foundFeature = null;\r\n if (Array.isArray(foundFeaturesFromFilters) && foundFeaturesFromFilters.length) {\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && foundFeaturesFromFilters.length > 1) {\r\n foundFeature = foundFeaturesFromFilters.find(feature => feature.metaData[\"VanityHandle\"]);\r\n }\r\n if (!foundFeature) {\r\n foundFeature = foundFeaturesFromFilters[0];\r\n }\r\n }\r\n if (foundFeature && !itemIsLocked) {\r\n this.props.handleNavigationItemClick({part:foundFeature}, true);\r\n }\r\n this.updateStepValues(this.state.availableSteps, forceClick);\r\n };\r\n\r\n onItemClickDisabled = (filterValue, itemIsLocked, currentStepFilterName) => {\r\n if (itemIsLocked) {\r\n this.onItemClick(filterValue, itemIsLocked, currentStepFilterName);\r\n return;\r\n }\r\n // Size is unreachable code since it is always enabled // Alan wants to show them !disabled (26.02.2019)\r\n const askQuestion = this.props.activeSubPart.partId === \"vanity_cabinet\"\r\n && (currentStepFilterName === \"DoorStyle\" || currentStepFilterName === \"Size\");\r\n\r\n const message = {\r\n id: askQuestion ? \"messageBox.wizard.itemIsNotAvailableWithQuestion\" : \"messageBox.wizard.itemIsNotAvailable\",\r\n filterValueClicked: filterValue.displayText,\r\n filterName: this.state.availableSteps.filter(step => !step.hidden)[this.state.featureWizardStep].filterName\r\n };\r\n const buttons = [{\r\n text: askQuestion ? \"messageBox.buttonNo\" : \"messageBox.buttonOk\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n }];\r\n if (askQuestion) {\r\n buttons.push({\r\n text: \"messageBox.buttonYes\",\r\n color: \"green\",\r\n click: () => {\r\n this.onItemClick(filterValue, itemIsLocked, currentStepFilterName, true);\r\n this.props.changeMessageBoxState({visible:false});\r\n }\r\n })\r\n }\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n UserLoginButton.handleLoginClick({...this.props, userPopupType});\r\n };\r\n\r\n exitFeatureWizard = () => {\r\n if (this.props.isMobile) {\r\n this.props.exitFeatureWizard(\r\n this.state.availableSteps,\r\n this.props.activeSubPart.partId\r\n )\r\n } else {\r\n this.setState({\r\n mounted: false,\r\n finishClicked: true\r\n });\r\n setTimeout(() => {\r\n this.props.exitFeatureWizard(\r\n this.state.availableSteps,\r\n this.props.activeSubPart.partId\r\n )\r\n }, 300);\r\n }\r\n };\r\n\r\n render() {\r\n // console.log('features top', this.state.filteredFeatures);\r\n // console.log('this.state.availableSteps', this.state.availableSteps);\r\n const availableSteps = this.state.availableSteps.filter(step => !step.hidden);\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n const interiorShowerWallWizard = this.props.activeSubPart.partId === \"shower_interior_wall\";\r\n const itemIsSelected = this.activeItemIsSelected();\r\n\r\n return this.props.isMobile ?\r\n this.state.showMobileGroups ? (\r\n
    \r\n
      \r\n {availableSteps.map((wizardStep, wizardStepIndex) => {\r\n const name = wizardStep.filterName.replace(/ /g,\"\").toLowerCase();\r\n return (\r\n
    • this.setFeatureWizardStep(wizardStepIndex)}\r\n key={\"wizardStepIndex\"+wizardStepIndex}>\r\n {wizardStep.filterName}\r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n ) : (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {availableSteps.length && !this.state.reload ? (\r\n \r\n ) :
    }\r\n
    \r\n
    \r\n {!(interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected) ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n : ( // desktop\r\n
    \r\n \r\n {availableSteps.length && !this.state.reload ? (\r\n \r\n ) :
    }\r\n {interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected ? null : (\r\n
    \r\n
    \r\n \r\n {availableSteps[this.state.featureWizardStep]\r\n ? `Select a ${this.props.getFilterDisplayName(availableSteps[this.state.featureWizardStep].filterName, this.props.intl)} for your ${this.props.activeSubPart.partId === \"shower_interior_wall\" ? \"Wall\" : \"Vanity\"}.`\r\n : null}\r\n \r\n \r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureWizard)\r\n);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport Z from \"../core/parts/zIndex\";\r\nimport {ShowerTubCombo} from \"../core/parts/showerTubCombo\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {Shower} from \"../core/parts/shower\";\r\nimport {Wall} from \"../core/parts/wall\";\r\nimport {BathTubType, VanityTypes, ShowerTypes, ShowerComboTubType} from \"../core/constants\";\r\nimport {getMetadataByDimensions, reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {ShowerAccessories} from \"../core/parts/showerAccessories\";\r\n\r\nclass ContextMenu extends Component {\r\n\r\n static propTypes = {\r\n designNavigationItems: PropTypes.array,\r\n contextMenuOpen: PropTypes.string,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setShowerBodySelectionButtons = () => {\r\n const layout = getCurrentLayout();\r\n const shower = layout.parts[Shower.id];\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n\r\n const showerSubParts = shower.subParts();\r\n const showerBody = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n const currentShowerSize = shower.showerSize();\r\n let contextMenuButtons = [];\r\n\r\n if (showerTubCombo.showerTubComboIsActive) {\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n showerTubCombo.wallConfiguration.features.forEach((wallConfigurationFeature) => {\r\n contextMenuButtons.push(Object.assign({}, wallConfiguration, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallConfigurationFeature.partName,\r\n intlTranslate: this.props.intl.formatMessage({id: showerTubCombo.wallConfiguration.translateId}),\r\n bgImageText: wallConfigurationFeature.partName,\r\n clickFeature: true,\r\n text: wallConfigurationFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n })\r\n } else if (showerBody && showerBody.part.features.length) {\r\n showerBody.part.features.forEach((showerBodyFeature) => {\r\n if (showerBodyFeature.partName.includes(currentShowerSize)) {\r\n // console.log('showerBodyFeature.partName', showerBodyFeature.partName);\r\n if (!(counterTopSize === \"72in\" && layout.type === 1 && showerBodyFeature.partName.includes(\"15X4\"))) {\r\n const isPony = showerBodyFeature.partName.includes(\"Pony\");\r\n contextMenuButtons.push(Object.assign({}, showerBody, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: showerBodyFeature.partName,\r\n intlTranslate: this.props.intl.formatMessage({id: isPony\r\n ? \"visualizer.bathroom.walls.pony_wall\"\r\n : \"visualizer.bathroom.walls.left_shower_wall\"\r\n }),\r\n bgImageText: showerBodyFeature.partName,\r\n clickFeature: true,\r\n text: isPony ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n }\r\n }\r\n })\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return showerTubCombo.showerTubComboIsActive\r\n ? item.subMenuText === showerTubCombo.wallConfiguration.activeFeature.partName\r\n : item.subMenuText === showerBody.part.activeFeature.partName\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setWallBButtons = () => {\r\n const layout = getCurrentLayout();\r\n let contextMenuButtons = [];\r\n\r\n const wallParent = layout.parts[Wall.id];\r\n const wallParts = wallParent.subParts().filter((menuItem) => {\r\n return (menuItem.part.partId === \"wall_b\") || (menuItem.part.partId === \"accent_wall\")\r\n });\r\n wallParts.forEach((wallPart) => {\r\n contextMenuButtons.push(Object.assign({}, wallPart, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallPart.part.partName,\r\n bgImageText: wallPart.part.partName,\r\n text: wallPart.text,\r\n intlTranslate: this.props.intl.formatMessage({id: wallPart.part.translateId})\r\n }));\r\n });\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n const vanityBacksplash = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_backsplash\"\r\n });\r\n if (vanityBacksplash) {\r\n contextMenuButtons.push(Object.assign({}, vanityBacksplash, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityBacksplash.part.partName,\r\n bgImageText: vanityBacksplash.part.partName,\r\n text: vanityBacksplash.text,\r\n intlTranslate: this.props.intl.formatMessage({id: vanityBacksplash.part.translateId})\r\n }));\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n\r\n const clickedItem = contextMenuButtons.find(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n if (clickedItem && clickedItem.part && clickedItem.part.partId === \"vanity_backsplash\") {\r\n const vanityFaucet = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_faucet\"\r\n });\r\n if (vanityFaucet) {\r\n contextMenuButtons.push(Object.assign({}, vanityFaucet, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityFaucet.part.partName,\r\n bgImageText: vanityFaucet.part.partName,\r\n text: vanityFaucet.text,\r\n intlTranslate: this.props.intl.formatMessage({id: vanityFaucet.part.translateId})\r\n }));\r\n }\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setContextMenuButtons() {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (this.props.contextMenuOpen === \"Shower Body Selection\") {\r\n this.setShowerBodySelectionButtons();\r\n return\r\n } else if (this.props.contextMenuOpen === \"wall_b_custom\") {\r\n this.setWallBButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === this.props.contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n relatedItems = [...hoveredParent.part.relatedItems, ...hoveredParent.part.getShowerRelatedItems()]\r\n }\r\n\r\n const clickedItem = this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Steam60in.Body[\"2\"]\r\n ? relatedItems[0]\r\n : relatedItems.find((item) => {\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n if (this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.Wall2) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.Wall\r\n }\r\n if (\r\n this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.WallAccent2\r\n ) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Custom60in.WallAccent\r\n }\r\n return item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n const layout = getCurrentLayout();\r\n let itemsToRender = hoveredParent.part.subParts();\r\n\r\n if ((this.props.contextMenuOpen === \"Shower\" || this.props.contextMenuOpen === \"Shower Tub Combo\") && hoveredParent.text !== \"Shower Accessories\") {\r\n itemsToRender = itemsToRender.filter(menuButton => {\r\n return this.props.contextMenuPonyWall\r\n ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\"\r\n : !menuButton.part.isPonyWallPart\r\n });\r\n const accessoriesParent = layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent && accessoriesParent.categoryEnabled && !this.props.contextMenuPonyWall) {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_interior_wall_accent\");\r\n itemsToRender.push({\r\n text: \"Accessories\",\r\n part: {},\r\n subNav: true,\r\n intlTranslate: this.props.intl.formatMessage({id: \"visualizer.bathroom.accessories\"})\r\n })\r\n }\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_head\");\r\n if (layout.parts[ShowerTubCombo.id] && !this.props.contextMenuPonyWall) {\r\n itemsToRender.push({\r\n text: \"Configure Layout\",\r\n part: {},\r\n subNav: true,\r\n intlTranslate: this.props.intl.formatMessage({id: \"visualizer.bathroom.contextmenu.configureLayout\"})\r\n })\r\n }\r\n }\r\n\r\n if (this.props.contextMenuOpen === \"Shower\") {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"threshold\");\r\n }\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n itemsToRender = this.removeNotUsedTubItemsFromContextMenu(itemsToRender, hoveredParent.part.bottomTub);\r\n }\r\n if (this.props.contextMenuOpen === \"Vanity\") {\r\n itemsToRender = itemsToRender.filter((itemToRender) => {\r\n return itemToRender.part.partId !== \"vanity_mirror\" && itemToRender.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n return itemsToRender\r\n };\r\n\r\n removeNotUsedTubItemsFromContextMenu = (itemsToRender, activeTub) => {\r\n return itemsToRender.filter((itemToRender) => {\r\n let keepThisItem = true;\r\n Object.keys(ShowerComboTubType).forEach((key) => {\r\n if (itemToRender.part.partId === ShowerComboTubType[key] && itemToRender.part.partId !== activeTub\r\n && itemToRender.part.partId !== ShowerComboTubType.replacement_tub\r\n && itemToRender.part.partId !== ShowerComboTubType.bathtub_liner\r\n ) {\r\n keepThisItem = false\r\n }\r\n });\r\n if (itemToRender.text === \"Wall Configuration\") {\r\n keepThisItem = false\r\n }\r\n return keepThisItem\r\n });\r\n };\r\n\r\n handleSubNavClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n\r\n if (menuItem.text === \"Accessories\") {\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower Accessories\"\r\n });\r\n this.setState({\r\n contextMenuButtons: this.getItemsToRender(hoveredParent)\r\n .map(button => {\r\n button.subMenuParent = \"Shower Accessories\";\r\n return button\r\n })\r\n });\r\n return false\r\n }\r\n\r\n const showerSubParts = layout.parts[Shower.id].subParts();\r\n\r\n const shower = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n shower.subMenuText = \"Shower\";\r\n shower.subMenuParent = \"Shower\";\r\n shower.intlTranslate = this.props.intl.formatMessage({id: \"visualizer.bathroom.shower\"});\r\n\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n\r\n const activeTubMenuItems = showerTubComboSubParts.filter(menuItem => menuItem.part.bottomTubId);\r\n activeTubMenuItems.forEach(menuItem => menuItem.subMenuParent = \"Shower Tub Combo\");\r\n\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n wallConfiguration.subMenuText = \"Shower Tub Combo\";\r\n wallConfiguration.subMenuParent = \"Shower Tub Combo\";\r\n wallConfiguration.intlTranslate = this.props.intl.formatMessage({id: \"visualizer.bathroom.shower_tub_combo\"});\r\n\r\n this.setState({\r\n contextMenuButtons: [\r\n shower,\r\n wallConfiguration,\r\n ...activeTubMenuItems,\r\n ]\r\n })\r\n };\r\n\r\n handleContextMenuHover = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n const hoveredButton = menuItem.text === \"Countertop\" ? \"CounterTop\" : menuItem.text;\r\n const hoveredParent = menuItem.subMenuParent || this.props.contextMenuOpen;\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n // console.log('hoveredButton', hoveredButton);\r\n // console.log('hoveredParent', hoveredParent);\r\n\r\n if (hoveredButton && hoveredParent) {\r\n\r\n let hoveredZindex = \"\";\r\n\r\n if (hoveredParent === \"Shower\") {\r\n const shower = layout.parts.Shower;\r\n if (shower.activeSubType_ === ShowerTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Steam60in[hoveredButton];\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Steam60in.Body[\"1\"]; // 1st part of shower\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.Wall;\r\n break;\r\n case \"Shower Body\":\r\n if (shower.showerDoor && shower.showerDoor.features.length) {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoor;\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.Glass;\r\n }\r\n break;\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoor;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerDoorHandle;\r\n break;\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.ShowerPanCombo;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in.WallAccent;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallCap;\r\n break;\r\n case \"Floor\":\r\n hoveredZindex = shower.showerFloorIsActive\r\n ? Z.layouts[layoutType][hoveredParent].Custom60in[hoveredButton]\r\n : Z.layouts[layoutType][hoveredParent].Custom60in.ShowerPanCombo;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Custom60in[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Shower Tub Combo\") {\r\n switch (hoveredButton) {\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.ShowerDoor;\r\n break;\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.Wall;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.WallAccent;\r\n break;\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.Fixture;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.ShowerDoorHandle;\r\n break;\r\n case \"Wall Configuration\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.ShowerDoor;\r\n break;\r\n case \"Jetted Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.JettedTub;\r\n break;\r\n case \"Tub Liner\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.Liner;\r\n break;\r\n case \"Walk In Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.WalkInTub;\r\n break;\r\n case \"Replacement Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.ReplacementTub;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Custom60in.PonyWallCap;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo[hoveredButton.replace(/ /g, \"\")];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Vanity\") { // Vanity\r\n if (layout.parts.Vanity.activeSubType_ === VanityTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Vanity\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Complete.Cabinet;\r\n break;\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton]; // Mirror\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n case \"Backsplash\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom.VanityBacksplash;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Bathtub\") { // Bathtub\r\n if (layout.parts.Bathtub.activeSubType_ === BathTubType.FreeStanding) {\r\n if (hoveredButton === \"Bathtub\") {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.FreeStanding.Base\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.FreeStanding[hoveredButton]\r\n }\r\n } else {\r\n if (hoveredButton === \"Rim\") {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.Custom60in.Top\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].BathTub.Custom60in[hoveredButton]\r\n }\r\n }\r\n } else if (hoveredParent === \"Walls\") { // Bathtub\r\n switch (hoveredButton) {\r\n case \"Pony Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Custom60in.PonyWall;\r\n break;\r\n case \"Left Shower Wall\": {\r\n const wallParent = layout.parts[hoveredParent];\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n hoveredZindex = showerDimensions === \"Half\"\r\n ? Z.layouts[layoutType].Shower.Custom60in.ExtrusionWallLeftHalfWall\r\n : Z.layouts[layoutType].Shower.Custom60in.ExtrusionWallLeft;\r\n break;\r\n }\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Custom[hoveredButton];\r\n break;\r\n }\r\n }\r\n\r\n this.props.renderGreenLayerByZindex(hoveredZindex);\r\n }\r\n\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n return menuItem ? (\r\n \r\n ) : null\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default injectIntl(ContextMenu)\r\n","import React, { Component } from 'react';\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from './../../analytics';\r\n\r\nexport class HomeMenu extends Component {\r\n\r\n static propTypes = {\r\n mobileNav: PropTypes.array\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off('click', this.handleMobileBlur);\r\n }\r\n\r\n handleItemClick = () => {\r\n\r\n };\r\n\r\n handleBack = () => {\r\n this.handleToggleDropdown();\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent('home-button-dropdown', !this.state.toggle);\r\n this.setState({\r\n toggle: !this.state.toggle,\r\n }, () => {\r\n this.state.toggle\r\n ? $(document).on('click', this.handleMobileBlur)\r\n : $(document).off('click', this.handleMobileBlur)\r\n })\r\n };\r\n\r\n handleMobileBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"mobile-home-menu\"]');\r\n const backButtonClick = e.target.closest('.ui-back');\r\n if (!navClick && !backButtonClick) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n render() {\r\n // let menu = [{\r\n // name: \"Return to Website\",\r\n // url: document.referrer || document.location.href\r\n // }, ...this.props.mobileNav];\r\n\r\n return (\r\n
    \r\n {this.props.windowWidth >= 991 ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n mobileNav: store.navigationState.mobileNav,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n})(HomeMenu);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup, changeMessageBoxState} from \"../../actions/actionFunctions\";\r\nimport {SaveIcon} from \"./icons\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\n\r\nexport class SaveButton extends Component {\r\n\r\n saving = false;\r\n\r\n handleSaveQuote = () => {\r\n if (!UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n saveQuoteAfterLogin: true,\r\n userPopupType: UserPopupTypes.NewDesign\r\n })) {\r\n Analytics.sendClickEvent(\"save-button-show-login\");\r\n } else if (!this.saving) {\r\n Analytics.sendClickEvent(\"save-button\");\r\n this.saveQuoteSubmit();\r\n }\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n // if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated) {\r\n // Analytics.sendClickEvent(\"save-button-show-login\");\r\n // this.props.toggleUserPopup({\r\n // userPopupOpened: true,\r\n // saveQuoteAfterLogin: true\r\n // });\r\n // } else {\r\n // Analytics.sendClickEvent(\"save-button\");\r\n // this.saveQuoteSubmit();\r\n // }\r\n };\r\n\r\n saveQuoteSubmit = () => {\r\n $(document).trigger(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, () => {\r\n if (!this.saving) {\r\n this.saving = true;\r\n loaderEnable(\"loader.savingQuoteText\");\r\n saveQuote(true)\r\n .then((response) => {\r\n if (response) {\r\n let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveButton saveQuote response:', responseData);\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification();\r\n this.saving = false;\r\n // downloadCanvasImageById(this.props.canvasId);\r\n })\r\n .catch((error) => {\r\n console.log('saveButton saveQuote error:', error);\r\n loaderDisable();\r\n this.saving = false;\r\n })\r\n }\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState\r\n})(SaveButton);\r\n","import {Component} from 'react';\r\n\r\nexport default class Tutorial extends Component {\r\n\r\n changeHighlightRingPosition = (selector, stateProperty = \"ringStyles\") => {\r\n const highlightElement = document.querySelector(selector);\r\n if (highlightElement) {\r\n const rect = highlightElement.getBoundingClientRect();\r\n this.setState({\r\n [stateProperty]: {\r\n left: rect.left,\r\n top: rect.top,\r\n }\r\n })\r\n }\r\n };\r\n\r\n}\r\n","import values from 'lodash/values';\r\nimport invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommon from \"../../visComponents/layoutCommon\";\r\n\r\nimport Appliance from \"./parts/appliance\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport CenterIsland from \"./parts/centerIsland\";\r\nimport CountertopGroup from \"./parts/countertopGroup\";\r\nimport Walls from \"./parts/walls\";\r\nimport FloorNew from \"./parts/floorNew\";\r\nimport Globals from \"./parts/globals\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport {LayoutThumbnails} from \"./assets\";\r\nimport Z from \"./zIndex\";\r\nimport store from \"../../../store\";\r\nimport * as types from \"../../../actions/actionTypes\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Layer from \"../../visComponents/layer\";\r\nimport {largeLayoutShadow, SmallLayoutShadow} from \"./assets\";\r\n// import {featureThumbnailUrl} from \"../../../misc/helpers\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommon {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.LShapeWithPeninsulaWithIsland;\r\n type = this.defaultType;\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Kitchen;\r\n localStorageKey = \"kvState\";\r\n layersBinding = \"Kitchen\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = LayoutThumbnails;\r\n zIndexes = Z.layouts;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Appliance.id] = new Appliance();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[CenterIsland.id] = new CenterIsland();\r\n this.parts[CountertopGroup.id] = new CountertopGroup();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[FloorNew.id] = new FloorNew();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n\r\n values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n addCustomLayers = (res) => {\r\n // add global shadow\r\n const globalShadowParent = this.parts[Globals.id]; // if no global shadow uploaded - take the hardcoded one\r\n if (!globalShadowParent.categoryEnabled || !globalShadowParent.globalShadow || !globalShadowParent.globalShadow.activeFeature) {\r\n if (this.getCurrentLayoutAbbreviation().includes(\"L\")) {\r\n res.push(new Layer(\"kv\", Z.layouts.LShape.Globals.GlobalShadow, largeLayoutShadow, false));\r\n } else if (this.type === LayoutType.Small) {\r\n res.push(new Layer(\"kv\", Z.layouts.Small.Globals.GlobalShadow, SmallLayoutShadow, false));\r\n }\r\n }\r\n return res\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n // getActiveFeatures(returnAllFeatures) { // removed, we have common now\r\n // let activeFeatures = [];\r\n // const receiveAllFeatures = returnAllFeatures || !!(this.qtCategories && this.qtCategories.length);\r\n // this.getFeatures(receiveAllFeatures).forEach((parentGroup) => {\r\n // // let subParts = parentGroup.subParts().filter(subPart => !subPart.part.disabled); // we need to store every item!\r\n // if (parentGroup.menuType === 0) { // FLOOR\r\n // if (!parentGroup.disabled && parentGroup.activeFeature\r\n // && !parentGroup.activeFeature.partName.includes(\"laceholder\")) {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: parentGroup.partId,\r\n // quantity: 0,\r\n // cartFeature: parentGroup.activeFeature\r\n // });\r\n // }\r\n // } else {\r\n // let subItems = parentGroup.relatedItems;\r\n // const excluded = [\"fridge_shadow\"];\r\n // if (!returnAllFeatures) {\r\n // subItems = subItems.filter(subItem => !excluded.includes(subItem.partId) && subItem.activeFeature\r\n // && subItem.activeFeature.partName && !subItem.activeFeature.partName.includes(\"laceholder\"));\r\n // }\r\n // subItems.forEach((subItem) => {\r\n // //adding top cabinet parts to cart features //Alan 25.07.2019\r\n // if (subItem.partId === \"top_cabinet\" && subItem.activeFeature && subItem.activeFeature.metaData[\"Module\"]) {\r\n // let uniqueModuleParts = []; // arrayOf: {width: \"\", height: \"\", inlayTypeName: \"\", quantity: 0}\r\n // for (let i = 1; i <= subItem.moduleSystem.length; i++ ) {\r\n // const currentModuleSystemNumber = i - 1;\r\n // for (let k = 0; k <= subItem.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n // const modulePart = subItem.moduleSystem[currentModuleSystemNumber][k];\r\n // const modulePartSplitted = modulePart.split(\"_\");\r\n //\r\n // let inlayTypeName = subItem.defaultInlayType;\r\n // subItem.inlayTypes.forEach(inlayType => {\r\n // if (inlayType.moduleParts.includes(i + \"_\" + modulePartSplitted[2])) {\r\n // inlayTypeName = inlayType.name\r\n // }\r\n // });\r\n //\r\n // const existingModulePart = uniqueModuleParts.find((uniqueModulePart) => {\r\n // return uniqueModulePart.width === modulePartSplitted[0]\r\n // && uniqueModulePart.height === modulePartSplitted[1]\r\n // && uniqueModulePart.inlayTypeName === inlayTypeName\r\n // });\r\n // if (existingModulePart) {\r\n // existingModulePart.quantity++;\r\n // } else {\r\n // const cartFeature = subItem.findFeatureByModuleAndModulePart(modulePart, inlayTypeName);\r\n // if (cartFeature) {\r\n // uniqueModuleParts.push({\r\n // width: modulePartSplitted[0],\r\n // height: modulePartSplitted[1],\r\n // inlayTypeName,\r\n // cartFeature,\r\n // quantity: 1,\r\n // partName: subItem.activeFeature.partName\r\n // })\r\n // }\r\n // }\r\n // }\r\n // }\r\n // // console.log(\"uniqueModuleParts\", uniqueModuleParts);\r\n // uniqueModuleParts.forEach((uniqueModulePart, uniqueModulePartIndex) => {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: subItem.partId + \"_module_\" + uniqueModulePartIndex,\r\n // // partId: subItem.partId,\r\n // cartFeature: uniqueModulePart.cartFeature,\r\n // thumbnail: featureThumbnailUrl(subItem.activeFeature),\r\n // partName: uniqueModulePart.partName,\r\n // description: `Width: ${uniqueModulePart.width} Height: ${uniqueModulePart.height} Inlay Type: ${uniqueModulePart.inlayTypeName}`,\r\n // quantity: uniqueModulePart.quantity\r\n // });\r\n // });\r\n // }\r\n // if (subItem.activeFeature) {\r\n // activeFeatures.push({\r\n // selectionGroup: parentGroup.partName,\r\n // partId: subItem.partId,\r\n // quantity: 0,\r\n // cartFeature: subItem.activeFeature\r\n // });\r\n // }\r\n // })\r\n // }\r\n // });\r\n // // console.log('activeFeatures', activeFeatures);\r\n // if (!returnAllFeatures && this.qtCategories && this.qtCategories.length) {\r\n // activeFeatures = activeFeatures.filter(activeFeature => {\r\n // return this.qtCategories.some(qtCategory => qtCategory.subParts.some(subPart => {\r\n // return subPart.part.partId === activeFeature.partId\r\n // }))\r\n // })\r\n // }\r\n // return activeFeatures\r\n // }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param setCartAndUserState {boolean | array} // only in the parseResponse function (when job is opened in the dashboard)\r\n * @param useNames {boolean}\r\n * @param needToChangeLayout {boolean}\r\n * @param firstLoad {boolean}\r\n */\r\n setActiveFeaturesFromObject(bvState, setCartAndUserState = false, useNames = false, needToChangeLayout = true, firstLoad = false) {\r\n if (bvState) {\r\n\r\n const cabinetParent = this.parts[Cabinet.id];\r\n const countertopGroupParent = this.parts[CountertopGroup.id];\r\n\r\n const layout_type = +bvState.layout_type;\r\n needToChangeLayout = needToChangeLayout && (layout_type || layout_type === 0) && (layout_type !== +this.type);\r\n\r\n if (needToChangeLayout) {\r\n this.type = layout_type;\r\n }\r\n\r\n // to avoid checks below\r\n bvState.disabled_parts = bvState.disabled_parts || [];\r\n\r\n this.getFeatures()\r\n .forEach((parentGroup) => {\r\n if (parentGroup.menuType === 0) {\r\n const partId = parentGroup.partId;\r\n const hasPreviouslySavedItem = this.selectedLayoutFeatures[layout_type]\r\n && this.selectedLayoutFeatures[layout_type][partId];\r\n if (bvState.hasOwnProperty(partId) || hasPreviouslySavedItem) {\r\n if (useNames) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(bvState[partId]);\r\n if (!parentGroup.activeFeature && hasPreviouslySavedItem) {\r\n parentGroup.activeFeature = parentGroup.getFeatureByPartName(hasPreviouslySavedItem);\r\n }\r\n } else {\r\n parentGroup.activeFeature = parentGroup.getFeatureById(bvState[partId])\r\n || parentGroup.getDefaultFeature();\r\n }\r\n parentGroup.placeholderChanged = !!parentGroup.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // parentGroup.firstClick[activeQuoteIndex] = !!parentGroup.activeFeature;\r\n }\r\n if (parentGroup.activeFeature && firstLoad && !parentGroup.activeFeature.notAvailableInVisualizer) { // Leave non in vis features locked\r\n parentGroup.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n parentGroup.disabled = true\r\n }\r\n } else {\r\n let relatedItems = parentGroup.getRelatedItems();\r\n relatedItems.forEach((subPart) => {\r\n const partId = subPart.partId;\r\n let previouslySelectedItem = null;\r\n subPart.selectedFeaturesHistory.some(featureName => {\r\n previouslySelectedItem = subPart.getFeatureByPartName(featureName);\r\n return previouslySelectedItem\r\n });\r\n if (bvState.hasOwnProperty(partId) || previouslySelectedItem) {\r\n if (useNames) {\r\n const matchingFeature = (partId === \"backsplash\" && bvState[\"backsplash_type\"])\r\n ? subPart.getFeatureByBacksplashType(bvState[\"backsplash_type\"], bvState[\"backsplash\"])\r\n : subPart.getFeatureByPartName(bvState[partId]);\r\n if (matchingFeature) {\r\n subPart.activeFeature = matchingFeature;\r\n } else if (previouslySelectedItem) {\r\n subPart.activeFeature = previouslySelectedItem;\r\n }\r\n } else {\r\n subPart.activeFeature = subPart.getFeatureById(bvState[partId]) || parentGroup.getDefaultFeature();\r\n }\r\n subPart.placeholderChanged = !!subPart.activeFeature;\r\n // const {activeQuoteIndex} = store.getState().quotesState;\r\n // subPart.firstClick[activeQuoteIndex] = !!subPart.activeFeature;\r\n // if (subPart.firstClick) {\r\n // console.log(\"subPart.firstClick\", subPart);\r\n // }\r\n }\r\n if (subPart.activeFeature && firstLoad && !subPart.activeFeature.notAvailableInVisualizer) {\r\n subPart.activeFeature.dbFeature.unlocked = true;\r\n }\r\n if (bvState.disabled_parts.includes(partId)) {\r\n subPart.disabled = true\r\n }\r\n })\r\n }\r\n });\r\n\r\n const partPredicate = (part, value) => useNames ? part.partName === value : +part.dbFeature.id === +value;\r\n Object.keys(bvState)\r\n .forEach((bvStateKey) => {\r\n let partId, parent, relatedName;\r\n switch(bvStateKey) {\r\n case \"top_cabinet_parts\":\r\n partId = \"top_cabinet_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"topCabinet\";\r\n break;\r\n case \"bottom_cabinet_parts\":\r\n partId = \"bottom_cabinet_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"bottomCabinet\";\r\n break;\r\n case \"crown_molding\":\r\n partId = \"crown_molding_parts\";\r\n parent = cabinetParent;\r\n relatedName = \"crownMolding\";\r\n break;\r\n case \"countertop_parts\":\r\n partId = \"countertop_parts\";\r\n parent = countertopGroupParent;\r\n relatedName = \"countertop\";\r\n break;\r\n default:\r\n break;\r\n }\r\n if (parent && bvState[partId] && bvState[partId].length && parent[relatedName]) {\r\n const relatedItem = parent[relatedName];\r\n // if (bvStateKey === \"top_cabinet_parts\" || bvStateKey === \"bottom_cabinet_parts\") {\r\n // bvState[partId] = Array.isArray(bvState[bvStateKey])\r\n // ? bvState[bvStateKey]\r\n // : JSON.parse(decodeURIComponent(bvState[bvStateKey]));\r\n // }\r\n const matchingParts = bvState[partId]\r\n .map((featureId) => {\r\n const arrayOfItems = (relatedItem.moduleParts)\r\n ? [...relatedItem.featuresParts, ...relatedItem.moduleParts]\r\n : relatedItem.featuresParts;\r\n return arrayOfItems.find(_ => partPredicate(_, featureId));\r\n })\r\n .filter((featuresPart) => {\r\n return featuresPart && featuresPart.matchesMetaForArrayOfConditions(relatedItem.getArrayOfConditions());\r\n });\r\n if (matchingParts.length) {\r\n relatedItem.activeFeatureParts = matchingParts\r\n }\r\n if (bvStateKey === \"top_cabinet_parts\" && bvState[\"top_module_system\"]) {\r\n relatedItem.moduleSystem = Array.isArray(bvState[\"top_module_system\"])\r\n ? bvState[\"top_module_system\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"top_module_system\"]));\r\n if (bvState[\"inlay_types\"]) {\r\n relatedItem.inlayTypes = Array.isArray(bvState[\"inlay_types\"])\r\n ? bvState[\"inlay_types\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"inlay_types\"]));\r\n }\r\n relatedItem.activeFeatureParts = relatedItem.setActiveFeatureParts();\r\n } else if (bvStateKey === \"bottom_cabinet_parts\" && bvState[\"bottom_module_system\"]) {\r\n relatedItem.moduleSystem = Array.isArray(bvState[\"bottom_module_system\"])\r\n ? bvState[\"bottom_module_system\"]\r\n : JSON.parse(decodeURIComponent(bvState[\"bottom_module_system\"]));\r\n relatedItem.activeFeatureParts = relatedItem.setActiveFeatureParts();\r\n }\r\n }\r\n });\r\n\r\n if (needToChangeLayout) {\r\n this.changeLayout(this.getFeatures());\r\n }\r\n\r\n if (setCartAndUserState) {\r\n this.setCartStateAndUserStateFromBvState(bvState, setCartAndUserState);\r\n }\r\n\r\n const layoutParts = this.designNavigationItems()\r\n .filter(parentGroup => parentGroup.part.categoryEnabled)\r\n .map((parentGroup) => parentGroup.part.partName);\r\n\r\n if (!this.isFakeLayout) {\r\n store.dispatch({\r\n type: types.SET_LAYOUT_DATA_PARTS,\r\n payload: {layoutParts}\r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Sets bv features from url\r\n */\r\n\r\n parseUrl(bvState) {\r\n if (bvState.disabled_parts) {\r\n bvState.disabled_parts = bvState.disabled_parts.split(\",\");\r\n }\r\n if (bvState.top_cabinet_parts) {\r\n bvState.top_cabinet_parts = Number.isInteger(bvState.top_cabinet_parts)\r\n ? [bvState.top_cabinet_parts]\r\n : bvState.top_cabinet_parts.split(\",\")\r\n // bvState.top_cabinet_parts = JSON.parse(decodeURIComponent(bvState.top_cabinet_parts));\r\n }\r\n if (bvState.bottom_cabinet_parts) {\r\n bvState.bottom_cabinet_parts = Number.isInteger(bvState.bottom_cabinet_parts)\r\n ? [bvState.bottom_cabinet_parts]\r\n : bvState.bottom_cabinet_parts.split(\",\")\r\n // bvState.bottom_cabinet_parts = JSON.parse(decodeURIComponent(bvState.bottom_cabinet_parts));\r\n }\r\n if (bvState.crown_molding_parts) {\r\n bvState.crown_molding_parts = Number.isInteger(bvState.crown_molding_parts)\r\n ? [bvState.crown_molding_parts]\r\n : bvState.crown_molding_parts.split(\",\")\r\n }\r\n if (bvState.countertop_parts) {\r\n bvState.countertop_parts = Number.isInteger(bvState.countertop_parts)\r\n ? [bvState.countertop_parts]\r\n : bvState.countertop_parts.split(\",\")\r\n }\r\n if (bvState.top_module_system) {\r\n bvState.top_module_system = JSON.parse(decodeURIComponent(bvState.top_module_system))\r\n }\r\n if (bvState.inlay_types) {\r\n bvState.inlay_types = JSON.parse(decodeURIComponent(bvState.inlay_types))\r\n }\r\n if (bvState.bottom_module_system) {\r\n bvState.bottom_module_system = JSON.parse(decodeURIComponent(bvState.bottom_module_system))\r\n }\r\n console.log('restoring bvState from url...', bvState);\r\n return bvState\r\n }\r\n\r\n /**\r\n *\r\n * @param bvState {object}\r\n * @param useNames {boolean}\r\n * @returns bvState {object}\r\n */\r\n addSpecificPropertiesToLocalStorage(bvState, useNames = false) {\r\n const cabinetParent = this.parts[Cabinet.id];\r\n const countertopGroupParent = this.parts[CountertopGroup.id];\r\n const wallsParent = this.parts[Walls.id];\r\n\r\n bvState.layout_type = this.type;\r\n Object.keys(bvState).forEach((bvStateKey) => {\r\n // console.log('bvStateKey', bvStateKey);\r\n switch(bvStateKey) {\r\n case \"top_cabinet\":\r\n // bvState[\"top_cabinet_parts\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart)\r\n // .map(activeFeaturePart => {\r\n // return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n // })));\r\n if (!cabinetParent.topCabinet || !cabinetParent.topCabinet.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"top_cabinet_parts\"] = cabinetParent.topCabinet.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n if (cabinetParent.topCabinet.features.some(feature => feature.metaData[\"Module\"])) { // disabled for now, but in case they are needed - change this condition!\r\n bvState[\"top_module_system\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.moduleSystem));\r\n bvState[\"inlay_types\"] = encodeURIComponent(JSON.stringify(cabinetParent.topCabinet.inlayTypes));\r\n }\r\n break;\r\n case \"bottom_cabinet\":\r\n if (!cabinetParent.bottomCabinet || !cabinetParent.bottomCabinet.activeFeatureParts) {\r\n break;\r\n }\r\n // bvState[\"bottom_cabinet_parts\"] = encodeURIComponent(JSON.stringify(cabinetParent.bottomCabinet.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart)\r\n // .map(activeFeaturePart => {\r\n // return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n // })));\r\n bvState[\"bottom_cabinet_parts\"] = cabinetParent.bottomCabinet.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n if (cabinetParent.bottomCabinet.features.some(feature => feature.metaData[\"Module\"])) {\r\n bvState[\"bottom_module_system\"] = encodeURIComponent(JSON.stringify(cabinetParent.bottomCabinet.moduleSystem));\r\n }\r\n break;\r\n case \"crown_molding\":\r\n if (!cabinetParent.crownMolding || !cabinetParent.crownMolding.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"crown_molding_parts\"] = cabinetParent.crownMolding.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n break;\r\n case \"countertop\":\r\n if (!countertopGroupParent.countertop || !countertopGroupParent.countertop.activeFeatureParts) {\r\n break;\r\n }\r\n bvState[\"countertop_parts\"] = countertopGroupParent.countertop.activeFeatureParts\r\n .filter(activeFeaturePart => activeFeaturePart)\r\n .map(activeFeaturePart => {\r\n return useNames ? activeFeaturePart.partName : activeFeaturePart.dbFeature.id\r\n });\r\n break;\r\n case \"backsplash\":\r\n if (!wallsParent.backsplash) {\r\n break;\r\n }\r\n bvState[\"backsplash_type\"] = wallsParent.backsplash.getCurrentActiveFeatureType();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n // console.log('bvState', bvState);\r\n return bvState\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n get qtCategories() {\r\n\r\n if (!(Array.isArray(this.qtCategoriesList) && this.qtCategoriesList.length)) {\r\n return this.qtCategoriesList\r\n }\r\n\r\n // if (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\") { // no need\r\n const currentLayoutAbbreviation = this.getCurrentLayoutAbbreviation();\r\n if (!currentLayoutAbbreviation.includes(\"I\")) {\r\n const countertopParent = this.parts[CountertopGroup.id];\r\n const countertopSubParts = countertopParent && countertopParent.subParts();\r\n return this.qtCategoriesList.map(qtCategory => {\r\n let qtCategoryHasBeenChanged = false;\r\n const changedSubParts = qtCategory._subParts\r\n .map(subPart => {\r\n if (countertopSubParts) {\r\n switch (subPart.part.partId) {\r\n case \"center_island_countertop\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"countertop\");\r\n case \"center_island_sink\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"sink\");\r\n case \"center_island_faucet\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"faucet\");\r\n case \"center_island_edge\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"edge_profile\");\r\n case \"center_island_stovetop\":\r\n qtCategoryHasBeenChanged = true;\r\n return this.getChangedSubPart(countertopSubParts, subPart, \"stovetop\");\r\n default:\r\n return subPart\r\n }\r\n }\r\n return subPart\r\n })\r\n .filter((subPart) => {\r\n return subPart && this.designNavigationItems(subPart, {}, \"\", false, true).length\r\n });\r\n if (qtCategoryHasBeenChanged) {\r\n qtCategory.subParts = changedSubParts;\r\n qtCategory.qtCategoryHasBeenChanged = true;\r\n }\r\n return qtCategory\r\n });\r\n }\r\n return this.qtCategoriesList.map((qtCategory) => {\r\n if (qtCategory.qtCategoryHasBeenChanged) {\r\n qtCategory.subParts = [...qtCategory.defaultSubParts];\r\n qtCategory.qtCategoryHasBeenChanged = false;\r\n }\r\n return qtCategory\r\n })\r\n }\r\n\r\n getChangedSubPart(allSubParts, currentSubPart, partId) {\r\n const newSubPart = allSubParts.find(cPart => cPart.part.partId === partId);\r\n if (!newSubPart) {\r\n return currentSubPart\r\n }\r\n // newSubPart.part.customGroupDisplayName = newSubPart.part.customGroupDisplayName || currentSubPart.part.customGroupDisplayName;\r\n return newSubPart\r\n }\r\n\r\n excludedIndexesFromHover = (layoutType) => {\r\n return [\r\n this.zIndexes[layoutType].Globals.Baseboard, // exclude Globals\r\n this.zIndexes[layoutType].Globals.CeilingHighlights, // exclude Globals\r\n this.zIndexes[layoutType].Globals.CeilingLights, // exclude Globals\r\n this.zIndexes[layoutType].Globals.GlobalShadow, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor1, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor2, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor3, // exclude Globals\r\n this.zIndexes[layoutType].Globals.Decor4, // exclude Globals\r\n this.zIndexes[layoutType].Cabinet.TopCabinetShadow, // exclude TopCabinetShadow\r\n this.zIndexes[layoutType].Cabinet.TopCabinetShadowPart2, // exclude TopCabinetShadow\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetShadow, // exclude BottomCabinetShadow\r\n this.zIndexes[layoutType].CenterIsland.CenterIslandShadow, // exclude CenterIslandShadow\r\n this.zIndexes[layoutType].CenterIsland.ChairsShadow, // exclude CenterIslandShadow\r\n this.zIndexes[layoutType].Appliances.FridgeShadow, // exclude FridgeShadow\r\n this.zIndexes[layoutType].Cabinet.TopCabinetModuleBox, // exclude TopCabinetModuleBox\r\n this.zIndexes[layoutType].Cabinet.TopCabinetModuleBox2, // exclude TopCabinetModuleBox2\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetModuleBox, // exclude BottomCabinetModuleBox\r\n this.zIndexes[layoutType].Cabinet.BottomCabinetModuleBox2, // exclude BottomCabinetModuleBox2\r\n ]\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = super.navigationSubItems(filters, searchText)\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName);\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Z from \"../core/zIndex\";\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport {BACKSPLASH_TYPES} from \"../core/constants\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n const currentLayoutName = layout.getCurrentLayoutName();\r\n if (zIndexToFind === Z.layouts[currentLayoutName].CountertopGroup.Countertop2) {\r\n return item.partId === \"countertop\"\r\n }\r\n return item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === \"Island Countertop\") {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case \"Center Island\":\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => availablePartIds.includes(menuButton.part.partId));\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"18in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from 'react-redux';\r\n\r\nimport Analytics from \"../../../analytics\";\r\nimport {getModuleCombinations} from \"../core/subparts/cabinet/cabinetModuleSystem\";\r\nimport {MODULE_CONTEXT_MENU_TYPES, MODULE_CONTEXT_MENU_DIRECTIONS, CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport Cabinet from \"../core/parts/cabinet\";\r\nimport {\r\n setModuleContextMenuType,\r\n setModuleContextMenuDirection,\r\n setModuleContextMenuModule,\r\n setModuleContextMenuModulePart,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass CabinetContextMenu extends Component {\r\n\r\n static propTypes = {\r\n updateCanvas: PropTypes.func,\r\n contextMenuOpen: PropTypes.object,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: [],\r\n };\r\n\r\n componentDidMount() {\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n this.props.setModuleContextMenuModule(moduleSplitted[0]);\r\n this.props.setModuleContextMenuModulePart(moduleSplitted[1]);\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.contextmenu-slice')\r\n && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n resetModule = () => {\r\n const layout = getCurrentLayout();\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n const arrayNumber = +moduleSplitted[0] - 1;\r\n cabinetParent.topCabinet.moduleSystem[arrayNumber] = (arrayNumber === 0 || arrayNumber === 5)\r\n ? [\"36_18_19\"] // copy array since it might be overwritten\r\n : [\"36_36_1\"];\r\n cabinetParent.topCabinet.activeFeatureParts = cabinetParent.topCabinet.setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n } else if (this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n const arrayNumber = +moduleSplitted[0] - 1;\r\n cabinetParent.bottomCabinet.moduleSystem[arrayNumber] = [\"36_36_1\"];\r\n cabinetParent.bottomCabinet.activeFeatureParts = cabinetParent.bottomCabinet.setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n }\r\n this.props.closeContextMenu();\r\n };\r\n\r\n setCabinetModule = (buttonId) => {\r\n const layout = getCurrentLayout();\r\n console.log(\"buttonId\", buttonId);\r\n console.log(\"this.props.contextMenuOpen\", this.props.contextMenuOpen);\r\n const moduleParts = buttonId.split(\"-\"); // example: \"12_36_4-12_36_57-12_36_58\" // width-height-id\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n let subPartName = \"\";\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n subPartName = \"topCabinet\";\r\n } else if (this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n subPartName = \"bottomCabinet\";\r\n }\r\n if (this.props.contextMenuOpen.contextMenuPartId === \"top_cabinet\"\r\n || this.props.contextMenuOpen.contextMenuPartId === \"bottom_cabinet\") {\r\n const moduleSplitted = this.props.contextMenuOpen.module.split(\"_\"); // example: \"4_4\"\r\n cabinetParent[subPartName].inlayTypes.forEach(inlayTypeObj => {\r\n const existingMJoinedIndex = inlayTypeObj.moduleParts.findIndex(mJoined => {\r\n return mJoined === this.props.contextMenuOpen.module\r\n });\r\n if (existingMJoinedIndex > -1) { // it is not a default! push new spliced\r\n // inlayTypeObj.moduleParts.splice(existingMJoinedIndex, 1);\r\n moduleParts.forEach((modulePart) => {\r\n inlayTypeObj.moduleParts.push(moduleSplitted[0] + \"_\" + modulePart.split(\"_\")[2]);\r\n });\r\n }\r\n });\r\n const moduleSystemPart = cabinetParent[subPartName].moduleSystem[+moduleSplitted[0] - 1];\r\n // 1) remove old\r\n const oldIndex = moduleSystemPart.findIndex(modulePart => {\r\n // example: \"12_36_4-12_36_57-12_36_58\" // width-height-id\r\n return modulePart.split(\"_\")[2] === this.props.moduleContextMenuModulePart\r\n });\r\n moduleSystemPart.splice(oldIndex,1);\r\n // 2) add new ones\r\n moduleParts.forEach((modulePart) => {\r\n moduleSystemPart.push(modulePart);\r\n });\r\n cabinetParent[subPartName].activeFeatureParts = cabinetParent[subPartName].setActiveFeatureParts();\r\n this.props.updateCanvas();\r\n layout.updateLocalStorage();\r\n }\r\n\r\n };\r\n\r\n getSliceButtons = () => {\r\n const availableSplitButtons = getModuleCombinations(this.props.moduleContextMenuModulePart, this.props.moduleContextMenuDirection);\r\n return availableSplitButtons.map(buttonId => {\r\n return {\r\n text: \"\",\r\n buttonId,\r\n onClick: () => {\r\n this.setCabinetModule(buttonId);\r\n this.props.closeContextMenu();\r\n }\r\n }\r\n })\r\n };\r\n getResetButton = () => {\r\n return {\r\n text: \"Reset Module\",\r\n buttonId: \"reset\",\r\n onClick: this.resetModule\r\n }\r\n };\r\n getExitButton = () => {\r\n return {\r\n text: \"Exit config\",\r\n buttonId: \"exit_config\",\r\n onClick: () => this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.Filters)\r\n }\r\n };\r\n openNavigationMenu = (e) => {\r\n const layout = getCurrentLayout();\r\n const cabinetParent = layout.parts[Cabinet.id];\r\n const subParts = cabinetParent.subParts();\r\n const subPart = subParts.find(menuItem => menuItem.part.partId === this.props.contextMenuOpen.contextMenuPartId);\r\n this.props.handleContextMenuClick(subPart); // top cabinet\r\n this.props.setActiveNavigationFilter(e.target.dataset.id);\r\n this.props.setActiveNavigationFilterStepIndex(e.target.dataset.index);\r\n this.props.closeContextMenu();\r\n };\r\n getCabinetConfigurationButtons = () => {\r\n const cabinetConfigurationButtons = CABINET_WIZARD_BUTTONS\r\n .filter(wizardButton => wizardButton.buttonId !== CABINET_WIZARD_BUTTONS[0].buttonId)\r\n .map((wizardButton) => {\r\n wizardButton.onClick = this.openNavigationMenu;\r\n return wizardButton\r\n });\r\n const availableModuleCombinations = getModuleCombinations(this.props.moduleContextMenuModulePart);\r\n if (availableModuleCombinations && availableModuleCombinations.length) {\r\n cabinetConfigurationButtons.push({\r\n text: \"Door config\",\r\n buttonId: \"door_config\",\r\n onClick: () => this.props.setModuleContextMenuType(MODULE_CONTEXT_MENU_TYPES.SliceButtons)\r\n })\r\n }\r\n return cabinetConfigurationButtons\r\n };\r\n getContextMenuButtons = () => {\r\n switch (this.props.moduleContextMenuType) {\r\n case MODULE_CONTEXT_MENU_TYPES.Filters:\r\n return (this.props.moduleContextMenuModulePart === \"1\") //remove reset button if there is nowhere to split\r\n ? this.getCabinetConfigurationButtons()\r\n : [...this.getCabinetConfigurationButtons(), this.getResetButton()];\r\n case MODULE_CONTEXT_MENU_TYPES.SliceButtons:\r\n default: {\r\n const sliceButtons = this.getSliceButtons();\r\n return sliceButtons.length\r\n ? [...sliceButtons, this.getExitButton(), this.getResetButton()]\r\n : [...this.getCabinetConfigurationButtons(), this.getResetButton()]\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = (this.props.windowWidth > 991 && this.props.contextMenuPosition)\r\n ? this.props.contextMenuPosition\r\n : {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n const availableHorizontalAndVertical = [\"1\", \"2\", \"3\", \"9\", \"10\"]; // show buttons for available splits\r\n const firstSliceIsActve = (this.props.moduleContextMenuType === MODULE_CONTEXT_MENU_TYPES.SliceButtons)\r\n && availableHorizontalAndVertical.includes(this.props.moduleContextMenuModulePart);\r\n\r\n return (\r\n
    \r\n {firstSliceIsActve ? (\r\n
    \r\n {Object.keys(MODULE_CONTEXT_MENU_DIRECTIONS).map((direction) => (\r\n \r\n ))}\r\n
    \r\n ) : null}\r\n
    \r\n {this.getContextMenuButtons().map((contextButton, contextButtonIndex) => {\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n moduleContextMenuType: store.navigationState.moduleContextMenuType,\r\n moduleContextMenuDirection: store.navigationState.moduleContextMenuDirection,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n windowWidth: store.serverState.windowWidth,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setModuleContextMenuType,\r\n setModuleContextMenuDirection,\r\n setModuleContextMenuModule,\r\n setModuleContextMenuModulePart,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CabinetContextMenu);\r\n","import snakeCase from 'lodash/snakeCase';\r\nimport invert from 'lodash/invert';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\n\r\nimport Globals from \"./parts/globals\";\r\n\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Appliance from \"./parts/appliance\";\r\nimport CountertopGroup from \"./parts/countertopGroup\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport CenterIsland from \"./parts/centerIsland\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout1;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.kvScene;\r\n localStorageKey = \"kvSceneState\";\r\n layersBinding = \"KitchenV5\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"walls_ceiling\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Background.id] = new Background();\r\n this.parts[CenterIsland.id] = new CenterIsland();\r\n this.parts[CountertopGroup.id] = new CountertopGroup();\r\n this.parts[Appliance.id] = new Appliance();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {BACKSPLASH_TYPES} from \"../../kvComponent/core/constants\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n return item.activeFeature && (item.partId === this.props.hoveredLayer.partId)\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === CenterIsland.id) {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case CenterIsland.id:\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => {\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (menuButton.part.partId === \"center_island_edge\")) {\r\n const layout = getCurrentLayout();\r\n if (layout.type === 3) {\r\n return false\r\n }\r\n }\r\n if ((document.kvConfig.visualizerType === \"kvScene\") && (menuButton.part.partId === \"center_island_stovetop\")) {\r\n const layout = getCurrentLayout();\r\n if (layout.type === 6) {\r\n return false\r\n }\r\n }\r\n // return availablePartIds.includes(menuButton.part.partId) && hoveredParent.part.layout.hasNavItemsLength(menuButton)\r\n return availablePartIds.includes(menuButton.part.partId)\r\n });\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"Full\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n const {intl, fabricatorData} = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n)\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport CeilingPanels from \"../subparts/walls/ceilingPanels\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.translateId = \"visualizer.bathroom.walls\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.popoutWall = null;\r\n this.ceiling = null;\r\n this.ceilingPanels = null;\r\n\r\n this.allWallsApplied = true;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Ceiling Panels\":\r\n relatedItemName = \"ceilingPanels\";\r\n RelatedItemClass = CeilingPanels;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => {\r\n if (item.partId === \"popout_wall\") {\r\n item.visible = item.getParent().layout.getCurrentLayoutAbbreviation().includes(\"P\")\r\n }\r\n return this.filterRelatedItem(item, withHidden)\r\n })\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Z from \"../core/zIndex\";\r\nimport {ShowerTubCombo} from \"../core/parts/showerTubCombo\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport {Shower} from \"../core/parts/shower\";\r\nimport Walls from \"../core/parts/walls\";\r\nimport {VanityTypes, ShowerComboTubType} from \"../core/constants\";\r\nimport {getMetadataByDimensions, reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {ShowerAccessories} from \"../core/parts/showerAccessories\";\r\n\r\nexport default class ContextMenu extends Component {\r\n\r\n static propTypes = {\r\n designNavigationItems: PropTypes.array,\r\n contextMenuOpen: PropTypes.string,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n getShowerBodySelectionButtons = () => {\r\n const shower = this.state.designNavigationItems.find(desItem => desItem.text === \"Shower\");\r\n const currentShowerSize = shower.part.showerSize();\r\n const showerBody = shower && shower.part.showerBody;\r\n return (showerBody && showerBody.features.length) ? showerBody.features.filter((showerBodyFeature) => {\r\n return showerBodyFeature.partName.includes(currentShowerSize);\r\n }) : [1]\r\n };\r\n\r\n setShowerBodySelectionButtons = () => {\r\n const layout = getCurrentLayout();\r\n const shower = layout.parts[Shower.id];\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n\r\n const showerSubParts = shower.subParts();\r\n const showerBody = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n const currentShowerSize = shower.showerSize();\r\n let contextMenuButtons = [];\r\n\r\n if (showerTubCombo.showerTubComboIsActive) {\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n showerTubCombo.wallConfiguration.features.forEach((wallConfigurationFeature) => {\r\n contextMenuButtons.push(Object.assign({}, wallConfiguration, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallConfigurationFeature.partName,\r\n bgImageText: wallConfigurationFeature.partName,\r\n clickFeature: true,\r\n text: wallConfigurationFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n })\r\n } else if (showerBody && showerBody.part.features.length) {\r\n showerBody.part.features.forEach((showerBodyFeature) => {\r\n if (showerBodyFeature.partName.includes(currentShowerSize)) {\r\n // console.log('showerBodyFeature.partName', showerBodyFeature.partName);\r\n if (!(counterTopSize === \"72in\" && layout.type === 1 && showerBodyFeature.partName.includes(\"15X4\"))) {\r\n contextMenuButtons.push(Object.assign({}, showerBody, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: showerBodyFeature.partName,\r\n bgImageText: showerBodyFeature.partName,\r\n clickFeature: true,\r\n text: showerBodyFeature.partName.includes(\"Pony\") ? \"Pony Wall\" : \"Left Shower Wall\"\r\n }))\r\n }\r\n }\r\n })\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return showerTubCombo.showerTubComboIsActive\r\n ? item.subMenuText === showerTubCombo.wallConfiguration.activeFeature.partName\r\n : item.subMenuText === showerBody.part.activeFeature.partName\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setWallBButtons = () => {\r\n const layout = getCurrentLayout();\r\n let contextMenuButtons = [];\r\n\r\n const wallParent = layout.parts[Walls.id];\r\n const wallParts = wallParent.subParts().filter((menuItem) => menuItem.part.partId === \"right_wall\");\r\n wallParts.forEach((wallPart) => {\r\n contextMenuButtons.push(Object.assign({}, wallPart, {\r\n subMenuParent: \"Walls\",\r\n subMenuText: wallPart.part.partName,\r\n bgImageText: wallPart.part.partName,\r\n text: wallPart.text\r\n }));\r\n });\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n const vanityBacksplash = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_backsplash\"\r\n });\r\n if (vanityBacksplash) {\r\n contextMenuButtons.push(Object.assign({}, vanityBacksplash, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityBacksplash.part.partName,\r\n bgImageText: vanityBacksplash.part.partName,\r\n text: vanityBacksplash.text\r\n }));\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n\r\n const clickedItem = contextMenuButtons.find(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n if (clickedItem && clickedItem.part && clickedItem.part.partId === \"vanity_backsplash\") {\r\n const vanityFaucet = vanity.subParts().find((menuItem) => {\r\n return menuItem.part.partId === \"vanity_faucet\"\r\n });\r\n if (vanityFaucet) {\r\n contextMenuButtons.push(Object.assign({}, vanityFaucet, {\r\n subMenuParent: \"Vanity\",\r\n subMenuText: vanityFaucet.part.partName,\r\n bgImageText: vanityFaucet.part.partName,\r\n text: vanityFaucet.text\r\n }));\r\n }\r\n }\r\n\r\n const clickedItemIndex = contextMenuButtons.findIndex(item => {\r\n return item.part.activeFeature && item.part.activeFeature.layer && item.part.activeFeature.layer.zIndex === zIndexToFind;\r\n });\r\n\r\n if (clickedItemIndex > 0) {\r\n contextMenuButtons = reorder(contextMenuButtons, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n setContextMenuButtons() {\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if (this.props.contextMenuOpen === \"Shower Body Selection\") {\r\n this.setShowerBodySelectionButtons();\r\n return\r\n } else if (this.props.contextMenuOpen === \"wall_b_custom\") {\r\n this.setWallBButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === this.props.contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n relatedItems = [...hoveredParent.part.relatedItems, ...hoveredParent.part.getShowerRelatedItems()]\r\n }\r\n\r\n let zIndexToFind = this.props.hoveredLayer.zIndex;\r\n if (this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.Wall2) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.Wall\r\n }\r\n if (\r\n this.props.hoveredLayer.zIndex === Z.layouts[layout.getCurrentLayoutName()].Shower.WallAccent2\r\n ) {\r\n zIndexToFind = Z.layouts[layout.getCurrentLayoutName()].Shower.WallAccent\r\n }\r\n const clickedItem = relatedItems.find((item) => {\r\n return (item.activeFeature && item.activeFeature.layer.zIndex === zIndexToFind)\r\n || (item.layerPositions && Object.keys(item.layerPositions).some(key => {\r\n return item.layerPositions[key] && item.layerPositions[key].layer && (item.layerPositions[key].layer.zIndex === zIndexToFind)\r\n }))\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n const layout = getCurrentLayout();\r\n let itemsToRender = hoveredParent.part.subParts().filter(subPart => layout.designNavigationItems(subPart).length);\r\n\r\n if ((this.props.contextMenuOpen === \"Shower\" || this.props.contextMenuOpen === \"Shower Tub Combo\") && hoveredParent.text !== \"Shower Accessories\") {\r\n itemsToRender = itemsToRender.filter(menuButton => {\r\n return this.props.contextMenuPonyWall\r\n ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\"\r\n : !menuButton.part.isPonyWallPart\r\n });\r\n const accessoriesParent = layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent && accessoriesParent.categoryEnabled && !this.props.contextMenuPonyWall\r\n && accessoriesParent.subParts().some(subPart => layout.designNavigationItems(subPart).length)) {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_wall_accent\");\r\n itemsToRender.push({\r\n text: \"Accessories\",\r\n part: {},\r\n subNav: true\r\n })\r\n }\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"shower_head\");\r\n if (layout.parts[ShowerTubCombo.id] && !this.props.contextMenuPonyWall) {\r\n itemsToRender.push({\r\n text: \"Configure Layout\",\r\n part: {},\r\n subNav: true\r\n })\r\n }\r\n }\r\n\r\n if (this.props.contextMenuOpen === \"Shower\") {\r\n itemsToRender = itemsToRender.filter(menuButton => menuButton.part.partId !== \"threshold\");\r\n }\r\n if (this.props.contextMenuOpen === \"Shower Tub Combo\") {\r\n itemsToRender = this.removeNotUsedTubItemsFromContextMenu(itemsToRender, hoveredParent.part.bottomTub);\r\n }\r\n if (this.props.contextMenuOpen === \"Vanity\") {\r\n itemsToRender = itemsToRender.filter((itemToRender) => {\r\n return itemToRender.part.partId !== \"vanity_mirror\" && itemToRender.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n return itemsToRender\r\n };\r\n\r\n removeNotUsedTubItemsFromContextMenu = (itemsToRender, activeTub) => {\r\n return itemsToRender.filter((itemToRender) => {\r\n let keepThisItem = true;\r\n Object.keys(ShowerComboTubType).forEach((key) => {\r\n if (itemToRender.part.partId === ShowerComboTubType[key] && itemToRender.part.partId !== activeTub\r\n && itemToRender.part.partId !== ShowerComboTubType.replacement_tub\r\n && itemToRender.part.partId !== ShowerComboTubType.bathtub_liner\r\n ) {\r\n keepThisItem = false\r\n }\r\n });\r\n if (itemToRender.text === \"Wall Configuration\") {\r\n keepThisItem = false\r\n }\r\n return keepThisItem\r\n });\r\n };\r\n\r\n handleSubNavClick = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n\r\n if (menuItem.text === \"Accessories\") {\r\n const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower Accessories\"\r\n });\r\n this.setState({\r\n contextMenuButtons: this.getItemsToRender(hoveredParent)\r\n .map(button => {\r\n button.subMenuParent = \"Shower Accessories\";\r\n return button\r\n })\r\n });\r\n return false\r\n }\r\n\r\n const showerSubParts = layout.parts[Shower.id].subParts();\r\n\r\n const shower = showerSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"shower_body\"\r\n });\r\n shower.subMenuText = \"Shower\";\r\n shower.subMenuParent = \"Shower\";\r\n\r\n const showerTubCombo = layout.parts[ShowerTubCombo.id];\r\n const showerTubComboSubParts = showerTubCombo.subParts();\r\n\r\n const activeTubMenuItems = showerTubComboSubParts.filter(menuItem => menuItem.part.bottomTubId);\r\n activeTubMenuItems.forEach(menuItem => menuItem.subMenuParent = \"Shower Tub Combo\");\r\n\r\n const wallConfiguration = showerTubComboSubParts.find((menuItem) => {\r\n return menuItem.part.partId === \"wall_configuration\"\r\n });\r\n wallConfiguration.subMenuText = \"Shower Tub Combo\";\r\n wallConfiguration.subMenuParent = \"Shower Tub Combo\";\r\n\r\n this.setState({\r\n contextMenuButtons: [\r\n shower,\r\n wallConfiguration,\r\n ...activeTubMenuItems,\r\n ]\r\n })\r\n };\r\n\r\n handleContextMenuHover = (menuItem) => {\r\n const layout = getCurrentLayout();\r\n const hoveredButton = menuItem.text === \"Countertop\" ? \"CounterTop\" : menuItem.text;\r\n const hoveredParent = menuItem.subMenuParent || this.props.contextMenuOpen;\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n // console.log('hoveredButton', hoveredButton);\r\n // console.log('hoveredParent', hoveredParent);\r\n\r\n if (hoveredButton && hoveredParent) {\r\n\r\n let hoveredZindex = \"\";\r\n\r\n if (hoveredParent === \"Shower\") {\r\n const shower = layout.parts.Shower;\r\n switch (hoveredButton) {\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Wall;\r\n break;\r\n case \"Shower Body\":\r\n if (shower.showerDoor && shower.showerDoor.features.length) {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoor;\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].Glass;\r\n }\r\n break;\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoor;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerDoorHandle;\r\n break;\r\n case \"Shower Pan\":\r\n case \"Shower Pans\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].ShowerPanCombo;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent].WallAccent;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallCap;\r\n break;\r\n case \"Floor\":\r\n hoveredZindex = shower.showerFloorIsActive\r\n ? Z.layouts[layoutType][hoveredParent][hoveredButton]\r\n : Z.layouts[layoutType][hoveredParent].ShowerPanCombo;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][hoveredParent][hoveredButton];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Shower Tub Combo\") {\r\n switch (hoveredButton) {\r\n case \"Shower Door\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.ShowerDoor;\r\n break;\r\n case \"Shower Walls\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.Wall;\r\n break;\r\n case \"Shower Walls Accent\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.WallAccent;\r\n break;\r\n case \"Fixture\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].Fixture;\r\n break;\r\n case \"Handle\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].ShowerDoorHandle;\r\n break;\r\n case \"Wall Configuration\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].ShowerDoor;\r\n break;\r\n case \"Jetted Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.JettedTub;\r\n break;\r\n case \"Tub Liner\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.Liner;\r\n break;\r\n case \"Walk In Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.WalkInTub;\r\n break;\r\n case \"Replacement Tub\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo.ReplacementTub;\r\n break;\r\n case \"Pony Wall Glass\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallGlass;\r\n break;\r\n case \"Pony Wall Cap\":\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].PonyWallCap;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType][\"Shower\"].TubCombo[hoveredButton.replace(/ /g, \"\")];\r\n break;\r\n }\r\n } else if (hoveredParent === \"Vanity\") { // Vanity\r\n if (layout.parts.Vanity.activeSubType_ === VanityTypes.Complete) {\r\n switch (hoveredButton) {\r\n case \"Vanity\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.Complete.Cabinet;\r\n break;\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton]; // Mirror\r\n break;\r\n }\r\n } else {\r\n switch (hoveredButton) {\r\n case \"Accent Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Wall_A_Accent_Mask;\r\n break;\r\n case \"Backsplash\":\r\n hoveredZindex = Z.layouts[layoutType].Vanity.VanityBacksplash;\r\n break;\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton];\r\n break;\r\n }\r\n }\r\n } else if (hoveredParent === \"Bathtub\") { // Bathtub\r\n if (hoveredButton === \"Bathtub\") {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub.BathTubBody\r\n } else if (hoveredButton === \"Fixture\") {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub.BathTubFixture\r\n } else {\r\n hoveredZindex = Z.layouts[layoutType].Bathtub[hoveredButton]\r\n }\r\n } else if (hoveredParent === \"Walls\") { // Bathtub\r\n switch (hoveredButton) {\r\n case \"Pony Wall\":\r\n hoveredZindex = Z.layouts[layoutType].Shower.PonyWall;\r\n break;\r\n case \"Left Shower Wall\": {\r\n const wallParent = layout.parts[hoveredParent];\r\n const activeShowerGroup = wallParent.getActiveShowerGroup();\r\n const showerDimensions = getMetadataByDimensions(activeShowerGroup.showerDimensions());\r\n hoveredZindex = showerDimensions === \"Half\"\r\n ? Z.layouts[layoutType].Shower.ExtrusionWallLeftHalfWall\r\n : Z.layouts[layoutType].Shower.ExtrusionWallLeft;\r\n break;\r\n }\r\n default:\r\n hoveredZindex = Z.layouts[layoutType].Vanity[hoveredButton];\r\n break;\r\n }\r\n }\r\n\r\n this.props.renderGreenLayerByZindex(hoveredZindex);\r\n }\r\n\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length === 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n return menuItem ? (\r\n \r\n ) : null\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport {ALL_CONTEXT_MENU} from \"../core/constants\";\r\n\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport ContextMenuQKBButtons from \"./contextMenuQKBButtons\";\r\n\r\n\r\nconst getContextMenuPosition = (contextMenu, position, isMobile) => {\r\n const {partId, layerPosition} = contextMenu;\r\n const {showButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n\r\n let left = isMobile ? '50%' : position.x - 50;\r\n let top = isMobile ? '50%' : position.y - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = showButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (showButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (showButtons.length >= 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (showButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (showButtons.length >= 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n\r\n return {left, top, right}\r\n}\r\n\r\nconst ContextMenuQKB = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, isMobile, handleContextMenuClick, renderGreenLayerByZindex} = props;\r\n const {opened, position} = contextMenu;\r\n const [styles, setStyles] = useState({left: 0, top: 0, right: 0});\r\n const [buttons, setButtons] = useState([]);\r\n const anchorRef = useRef(null);\r\n\r\n const handleClose = (event) => {\r\n if (document.hoveredLayer && event.target.closest(\".canvas-el\") && ALL_CONTEXT_MENU.includes(document.hoveredLayer.partId)) {\r\n return\r\n }\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!contextMenu.opened) {\r\n return null\r\n }\r\n setStyles(getContextMenuPosition(contextMenu, position, isMobile));\r\n const {showButtons} = checkForContextMenuCommon(contextMenu.partId, contextMenu.layerPosition);\r\n setButtons(showButtons);\r\n }, [contextMenu, position, isMobile]);\r\n\r\n // console.log(\"styles\", styles);\r\n\r\n let contextStyles = styles;\r\n if (buttons.length <= 4) {\r\n contextStyles = Object.assign({}, styles, {maxWidth: \"210px\"});\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKB.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n contextMenu,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKB)\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport FireplaceParent from \"./parts/fireplaceParent\";\r\nimport Globals from \"./parts/globals\";\r\nimport {hardCodeIsModerno} from \"../../../misc/fabricatorHardcode\";\r\n\r\nexport class Layout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = hardCodeIsModerno() ? LayoutType.Layout1 : LayoutType.Layout31;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.Fireplace;\r\n localStorageKey = \"FireplaceState\";\r\n layersBinding = \"Fireplace\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = {};\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Background.id] = new Background();\r\n this.parts[FireplaceParent.id] = new FireplaceParent();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {reorder} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {BACKSPLASH_TYPES} from \"../../kvComponent/core/constants\";\r\n\r\nclass ContextMenuSimple extends Component {\r\n\r\n static propTypes = {\r\n contextMenuOpen: PropTypes.string.isRequired,\r\n hoveredLayer: PropTypes.object,\r\n handleContextMenuClick: PropTypes.func,\r\n contextMenuPosition: PropTypes.object,\r\n contextMenuPonyWall: PropTypes.bool,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n closeContextMenu: PropTypes.func,\r\n };\r\n\r\n state = {\r\n contextMenuButtons: []\r\n };\r\n\r\n componentDidMount() {\r\n this.setContextMenuButtons();\r\n if (this.props.closeContextMenu) {\r\n document.addEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n contextMenuBlur = (e) => {\r\n if (!e.target.closest('.contextmenu-buttons')\r\n && !e.target.closest('.contextmenu-buttons__button')\r\n && !e.target.closest('.sprocket-container') && !e.target.closest('.canvas')) {\r\n this.props.closeContextMenu();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n if (this.props.closeContextMenu) {\r\n document.removeEventListener('click', this.contextMenuBlur)\r\n }\r\n }\r\n\r\n setContextMenuButtons() {\r\n const layout = getCurrentLayout();\r\n const contextMenuOpen = this.props.contextMenuOpen;\r\n if (contextMenuOpen === \"backsplash_custom\"\r\n || contextMenuOpen === \"backsplash_custom_left\"\r\n || contextMenuOpen === \"backsplash_custom_right\"\r\n || contextMenuOpen === \"right_wall_custom\"\r\n || contextMenuOpen === \"left_wall_custom\") {\r\n this.setBacksplashButtons();\r\n return\r\n }\r\n\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n\r\n let relatedItems = hoveredParent.part.relatedItems;\r\n\r\n const clickedItem = relatedItems.find((item) => {\r\n return item.activeFeature && (item.partId === this.props.hoveredLayer.partId)\r\n });\r\n\r\n let itemsToRender = this.getItemsToRender(hoveredParent);\r\n\r\n // console.log('clickedItem', clickedItem);\r\n // console.log('relatedItems', relatedItems);\r\n // console.log('itemsToRender', itemsToRender);\r\n\r\n const clickedItemIndex = itemsToRender.findIndex(item => item.text === clickedItem.partName);\r\n if (clickedItemIndex > 0) {\r\n itemsToRender = reorder(itemsToRender, clickedItemIndex, 0); // swap items in array start\r\n }\r\n\r\n itemsToRender = itemsToRender.map(item => {\r\n if (item.text === \"Island Countertop\") {\r\n // item.subMenuText = \"Countertop\";\r\n item.bgImageText = \"Countertop\";\r\n }\r\n return item\r\n });\r\n\r\n this.setState({\r\n contextMenuButtons: itemsToRender\r\n })\r\n }\r\n\r\n getItemsToRender = (hoveredParent) => {\r\n let itemsToRender = hoveredParent.part.subParts();\r\n let availablePartIds = [];\r\n switch (this.props.contextMenuOpen) {\r\n case \"Center Island\":\r\n availablePartIds = [\"center_island_sink\", \"center_island_faucet\", \"center_island_countertop\",\r\n \"center_island_stovetop\", \"center_island_range\", \"center_island_edge\"];\r\n break;\r\n case \"Countertop\":\r\n availablePartIds = [\"countertop\", \"faucet\", \"sink\", \"edge_profile\"];\r\n break;\r\n case \"Walls\":\r\n availablePartIds = [\"right_wall\", \"backsplash\"];\r\n break;\r\n default:\r\n break;\r\n }\r\n return itemsToRender.filter(menuButton => availablePartIds.includes(menuButton.part.partId));\r\n };\r\n\r\n getBackSplashButtons = () => {\r\n return BACKSPLASH_TYPES.map(bType => {\r\n const button = {\r\n text: bType,\r\n };\r\n switch (bType) {\r\n case \"4in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.4in\"\r\n break;\r\n case \"6in\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.6in\"\r\n break;\r\n case \"Full\":\r\n button.subMenuText = \"visualizer.kitchen.contextmenu.backsplash.18in\"\r\n break;\r\n }\r\n return button\r\n })\r\n };\r\n\r\n setBacksplashButtons = () => {\r\n const layout = getCurrentLayout();\r\n const hoveredParent = layout.designNavigationItems().find(navItem => {\r\n return navItem.text === \"Walls\"\r\n });\r\n const subParts = hoveredParent.part.subParts();\r\n\r\n let contextMenuButtons = [];\r\n const backSplashButtons = this.getBackSplashButtons();\r\n const rightWall = subParts.find(menuButton => menuButton.part.partId === \"right_wall\");\r\n const leftWall = subParts.find(menuButton => menuButton.part.partId === \"left_wall\");\r\n if (rightWall) {\r\n rightWall.subMenuParent = \"Walls\";\r\n }\r\n if (leftWall) {\r\n leftWall.subMenuParent = \"Walls\";\r\n }\r\n switch (this.props.contextMenuOpen) {\r\n case \"right_wall_custom\": {\r\n contextMenuButtons = rightWall ? [rightWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"left_wall_custom\": {\r\n contextMenuButtons = leftWall ? [leftWall, ...backSplashButtons] : backSplashButtons;\r\n break;\r\n }\r\n case \"backsplash_custom_left\": {\r\n contextMenuButtons = [...backSplashButtons, leftWall];\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n contextMenuButtons = [...backSplashButtons, rightWall];\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n contextMenuButtons = backSplashButtons; // just in case, we should not have these cases\r\n break;\r\n }\r\n }\r\n this.setState({\r\n contextMenuButtons\r\n })\r\n };\r\n\r\n handleContextMenuHover = () => {\r\n //TODO[Artem] add here rendering green zones on hover\r\n };\r\n\r\n render() {\r\n\r\n let contextMenuStyles = this.props.contextMenuPosition || {};\r\n if (this.state.contextMenuButtons.length <= 4) {\r\n contextMenuStyles = Object.assign({}, contextMenuStyles, {maxWidth:\"210px\"} )\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {this.state.contextMenuButtons.map((menuItem) => {\r\n if (!menuItem) {\r\n return null\r\n }\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuSimple)\r\n","import {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class NonVisualizerSubPart extends IntermediatePart {\r\n constructor(isChild, partId, partName) {\r\n super(isChild);\r\n this.partId = partId;\r\n this.visible = true;\r\n this.partName = partName;\r\n // this.allFeaturesReceived = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new NonVisualizerSubPart(false, this.partId, dbFeature.groupName));\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationNoMetaSubItems(filters, searchText)\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport featureIsMatchingDisplayLogic from \"../misc/displayLogic\";\r\nimport {COUNTERTOP_GROUP} from \"../bvcomponents/kvComponent/core/constants\";\r\nimport {getMinimumChargeCartItem} from \"../actions/shoppingCartFunctions\";\r\nimport {FEATURE_STONE, getFeatureType} from \"../misc/helpers\";\r\nimport {IS_LIXIL_UI} from \"../config\";\r\nimport {getFeaturePriceProperty} from \"../misc/priceFunctions\";\r\nimport {SQFT_FEATURES} from \"../bvcomponents/sqft/constants\";\r\n\r\nconst initialState = {\r\n cartItems: [],\r\n displayLogicCartItems: [], // read only (is needed to check them every time cart is changed)\r\n applyPopupOpened: false,\r\n activeApplyPopupItems: [],\r\n questionNoClicked: false,\r\n cameFromPage: '',\r\n recentlyViewedItems: [],\r\n checkoutPopupVisible: false,\r\n orderCompletePopupVisible: false,\r\n depositVisible: false,\r\n depositCallback: null,\r\n state: 'design',\r\n showMobileQuotes: false,\r\n showAllQuotesCartItemsList: true,\r\n cartFooterActiveButtonIndex: 0,\r\n cartItemEditFeature: null,\r\n lookRemovedCartItems: [],\r\n cItemsAddedToParentCart: [], // ArrayOf {id: \"string\", quantity: number}\r\n sureTax: 0, // comes in response of sureTax API\r\n sureTaxLoading: false, // shows loader in columns section\r\n manualTaxEntered: false, // if it is true - show always the same manual tax\r\n deliveryList: [], // calculates depending on features shipping cost // {cost, title: \"\", delivery: \"\", code: \"\"}\r\n markUpLogic: \"\", // {retail: {value: 10, type: \"mark_up\"}, cost: {value: 10, type: \"mark_down\"}, discount: {}}\r\n};\r\n\r\nexport const supportedCountries = [{\r\n name: 'USA',\r\n zipCodeRg: /^\\d{5}([ \\-]\\d{4})?$/\r\n}, {\r\n name: 'Canada',\r\n zipCodeRg: /^[ABCEGHJKLMNPRSTVXY]\\\\d[ABCEGHJ-NPRSTV-Z][ ]?\\\\d[ABCEGHJ-NPRSTV-Z]\\\\d$/\r\n}, {\r\n name: 'UK',\r\n zipCodeRg: /^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4}$/\r\n}];\r\nexport const supportedCountriesList = [\"USA\", \"Canada\", \"UK\"];\r\n\r\nfunction checkForAddToCartFeaturesWithDisplayLogic(cartItems, displayLogicCartItems, currentQuote = 0, allWizardsValues) {\r\n cartItems = cartItems.filter(cartItem => {\r\n return !displayLogicCartItems.some(displayLogicCartItem => {\r\n return (cartItem.cartFeature.dbFeature.id === displayLogicCartItem.cartFeature.dbFeature.id)\r\n && (cartItem.currentQuote === currentQuote)\r\n })\r\n }); // clear existing display logic items for this quote, we will add them below\r\n displayLogicCartItems.forEach((displayLogicCartItem) => {\r\n const {quantity, isMatching} = featureIsMatchingDisplayLogic(displayLogicCartItem.cartFeature, cartItems, currentQuote, allWizardsValues);\r\n if (isMatching) {\r\n cartItems = [...cartItems, Object.assign({}, displayLogicCartItem, {\r\n quantity,\r\n currentQuote,\r\n id: uuid.v4(), // to make sure we have different cart items in different quotes\r\n })]\r\n }\r\n });\r\n return cartItems\r\n}\r\n\r\nfunction removeFakePriceFromCartItems(cartItems) {\r\n cartItems = cartItems.map((cartItem) => {\r\n if (cartItem.displayFakePrice === 0) {\r\n cartItem.displayFakePrice = null\r\n }\r\n return cartItem\r\n });\r\n return cartItems\r\n}\r\n\r\nconst checkLowesHardcodedRulesItems = (cartItems, fabricatorSettings) => {\r\n cartItems = cartItems.filter(cItem => !cItem.isMinimumCharge); // 1) remove already added, and calculate again\r\n const countertopItems = cartItems.filter(cItem => COUNTERTOP_GROUP.includes(cItem.partId)); // 2) countertop group only\r\n\r\n const MINIMUM_SQFT = 23;\r\n const MINIMUM_SQFT_2 = 27;\r\n\r\n if (countertopItems.length) {\r\n const totalQuantity = countertopItems.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0); // 3) get all quantities\r\n if (totalQuantity <= MINIMUM_SQFT) {\r\n cartItems.push(getMinimumChargeCartItem(countertopItems[0], true)) // 4) add hardcoded 300$\r\n } else if ((totalQuantity >= (MINIMUM_SQFT + 1)) && (totalQuantity <= (MINIMUM_SQFT_2 -1))) { // 5) between 23 and 27 - add additional countertops\r\n let theMostValuableCartItem = countertopItems[0];\r\n countertopItems.forEach(cItem => {\r\n let currentMostFeatureCost = getFeaturePriceProperty(theMostValuableCartItem.cartFeature, fabricatorSettings) * theMostValuableCartItem.quantity;\r\n let cartItemCost = getFeaturePriceProperty(cItem.cartFeature, fabricatorSettings) * cItem.quantity;\r\n if (cartItemCost > currentMostFeatureCost) { // 6) find with the biggest price added\r\n theMostValuableCartItem = cItem\r\n }\r\n });\r\n cartItems.push(getMinimumChargeCartItem(theMostValuableCartItem, false, MINIMUM_SQFT_2 - totalQuantity)) // 7) add hardcoded items\r\n }\r\n }\r\n // console.log(\"cartItems2\", cartItems);\r\n return cartItems\r\n}\r\n\r\nconst checkCaesHardcodedRulesItems = (cartItems) => {\r\n // console.log(\"cartItems before\", cartItems);\r\n cartItems = cartItems.filter(cItem => !cItem.isMinimumCharge); // 1) remove already added, and calculate again\r\n const countertopItems = cartItems.filter(cItem => COUNTERTOP_GROUP.includes(cItem.partId)); // 2) countertop group only\r\n let uniqueSharedNames = [];\r\n countertopItems.forEach(cItem => {\r\n if (!uniqueSharedNames.includes(cItem.cartFeature.dbFeature.sharedFeatureName)) {\r\n uniqueSharedNames.push(cItem.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n });\r\n const MINIMUM_CAES_SQFT = 25;\r\n\r\n if (uniqueSharedNames.length) {\r\n uniqueSharedNames.forEach(uniqueSharedName => {\r\n const matchingItems = countertopItems.filter(cItem => cItem.cartFeature.dbFeature.sharedFeatureName === uniqueSharedName);\r\n const totalQuantity = matchingItems.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0); // 3) get all quantities\r\n if (totalQuantity < MINIMUM_CAES_SQFT) {\r\n cartItems.push(getMinimumChargeCartItem(matchingItems[0], false, MINIMUM_CAES_SQFT - totalQuantity))\r\n }\r\n })\r\n }\r\n // console.log(\"cartItems2\", cartItems);\r\n return cartItems\r\n}\r\n\r\nconst allowMinimumChargeConditions = (fabricatorState) => {\r\n return fabricatorState && fabricatorState.settings.showPricing\r\n && !fabricatorState.hideCheckoutBreakdownCost && !fabricatorState.hidePricesFromUser\r\n && document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"kvScene\"\r\n}\r\n\r\nconst checkHardcodedRulesItems = (fabricatorState, cartItems) => {\r\n if (allowMinimumChargeConditions(fabricatorState)) {\r\n // console.log(\"cartItems\", cartItems);\r\n // console.log(\"fabricatorState\", fabricatorState);\r\n // console.log(\"fabricatorState.settings.language\", fabricatorState.settings.language);\r\n if (fabricatorState.isLowes) {\r\n cartItems = checkLowesHardcodedRulesItems(cartItems, fabricatorState.settings);\r\n } else if (fabricatorState.isCaesarStone && (fabricatorState.settings.language !== \"en-AU\")) {\r\n cartItems = checkCaesHardcodedRulesItems(cartItems)\r\n }\r\n }\r\n return cartItems\r\n}\r\n\r\n/**\r\n * Recalculate slab in cart\r\n * @param {{}} cartItems\r\n * return bool\r\n */\r\nexport const isRecalculateSlabsInCartNeeded = (cartItems) => {\r\n return cartItems.some(cartItem => {\r\n return cartItem.cartFeature && FEATURE_STONE === getFeatureType(cartItem.cartFeature.dbFeature)\r\n });\r\n}\r\n\r\n/**\r\n * Recalculate slab in cart\r\n * @param cartItems {object}\r\n * @returns cartItems {object}\r\n */\r\nconst recalculateSlabsInCart = (cartItems) => {\r\n for (const cartItem of cartItems) {\r\n if (FEATURE_STONE !== getFeatureType(cartItem.cartFeature.dbFeature)) {\r\n continue;\r\n }\r\n const similarFeatures = cartItems.filter((cItem) => {\r\n const isSameNameFeature = cItem.cartFeature.getFeatureName() === cartItem.cartFeature.getFeatureName();\r\n const isBiggestFeature = cItem.isBiggestFeature;\r\n const isQuantityAddedToBiggestFeature = cItem.isQuantityAddedToBiggestFeature;\r\n return isSameNameFeature && (isBiggestFeature || isQuantityAddedToBiggestFeature) // select only features from sqft\r\n });\r\n let biggestFeature = similarFeatures.find(cartItem => cartItem.isBiggestFeature);\r\n if (!biggestFeature && cartItem.isQuantityAddedToBiggestFeature) {\r\n cartItem.isBiggestFeature = true;\r\n }\r\n if (cartItem.isBiggestFeature) {\r\n cartItem.quantity = similarFeatures.reduce((sum, cItem) => {\r\n return cItem.displayFakeQuantity !== undefined\r\n ? cItem.displayFakeQuantity + sum\r\n : cItem.quantity + sum\r\n }, 0);\r\n }\r\n }\r\n return cartItems\r\n}\r\n// const checkStonePricingLogic = (cartItems) => { //TODO[Artem] edit features not working :(\r\n// if (cartItems.some(cartItem => {\r\n// return cartItem.cartFeature && Array.isArray(cartItem.cartFeature.dbFeature.stonePricingId) && cartItem.cartFeature.dbFeature.stonePricingId.length\r\n// })) {\r\n// let commonSharedFeatureNames = []; // {sharedName: \"\", totalQuantity: 0, biggestFeature, sqftFeatures: []}\r\n// cartItems.forEach(cartItem => {\r\n// if (!cartItem.initialQuantity) {\r\n// cartItem.initialQuantity = cartItem.quantity;\r\n// }\r\n// if (cartItem.cartFeature && Array.isArray(cartItem.cartFeature.dbFeature.stonePricingId)\r\n// && cartItem.cartFeature.dbFeature.stonePricingId.length) {\r\n// const alreadyAdded = commonSharedFeatureNames.find(sharedObject => {\r\n// return sharedObject.sharedName === cartItem.cartFeature.dbFeature.sharedFeatureName\r\n// });\r\n// if (!alreadyAdded) {\r\n// commonSharedFeatureNames.push({\r\n// sharedName: cartItem.cartFeature.dbFeature.sharedFeatureName,\r\n// totalQuantity: cartItem.initialQuantity,\r\n// sqftFeatures: [cartItem],\r\n// biggestFeature: cartItem,\r\n// })\r\n// } else {\r\n// alreadyAdded.sqftFeatures.push(cartItem);\r\n// alreadyAdded.totalQuantity += cartItem.initialQuantity;\r\n// if (!alreadyAdded.biggestFeature) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// } else if (cartItem.cartFeature.partId === \"countertop\") {\r\n// if (alreadyAdded.biggestFeature.partId !== \"countertop\" || (alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity)) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// } else if (cartItem.cartFeature.partId === \"center_island_countertop\") {\r\n// if ((alreadyAdded.biggestFeature.partId !== \"countertop\" && alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n// || (alreadyAdded.biggestFeature.partId === \"center_island_countertop\" && alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity)) {\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// } else if ((alreadyAdded.biggestFeature.partId !== \"countertop\") && (alreadyAdded.biggestFeature.partId !== \"center_island_countertop\")\r\n// && alreadyAdded.biggestFeature.initialQuantity < cartItem.initialQuantity) { // backsplash\r\n// alreadyAdded.biggestFeature = cartItem;\r\n// }\r\n// }\r\n// }\r\n// });\r\n// if (commonSharedFeatureNames.length) { // 2) set each feature new fake quantity\r\n// commonSharedFeatureNames.forEach(sharedObject => {\r\n// sharedObject.sqftFeatures.forEach(cartItem => {\r\n// cartItem.displayFakeQuantity = cartItem.initialQuantity;\r\n// if (sharedObject.biggestFeature && (cartItem.id === sharedObject.biggestFeature.id)) {\r\n// cartItem.quantity = sharedObject.totalQuantity;\r\n// } else {\r\n// cartItem.quantity = 0;\r\n// }\r\n// });\r\n// });\r\n// }\r\n// }\r\n// return cartItems\r\n// }\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ADD_TO_CART: {\r\n const actionCartItems = action.payload.cartItems;\r\n let stateCartItems = state.cartItems;\r\n if (IS_LIXIL_UI) {\r\n stateCartItems = stateCartItems.map(stateCartItem => {\r\n const sameCartItemIndex = actionCartItems.findIndex(newCartItem => {\r\n return newCartItem.cartFeature && stateCartItem.cartFeature &&\r\n (newCartItem.cartFeature.dbFeature.sku && stateCartItem.cartFeature.dbFeature.sku\r\n ? (newCartItem.cartFeature.dbFeature.sku === stateCartItem.cartFeature.dbFeature.sku)\r\n : (newCartItem.cartFeature.dbFeature.sharedFeatureName\r\n && stateCartItem.cartFeature.dbFeature.sharedFeatureName\r\n && (newCartItem.cartFeature.dbFeature.sharedFeatureName === stateCartItem.cartFeature.dbFeature.sharedFeatureName)))\r\n })\r\n if (sameCartItemIndex > -1) {\r\n if (stateCartItem.addedBy !== actionCartItems[sameCartItemIndex].addedBy) {\r\n stateCartItem.quantity = actionCartItems[sameCartItemIndex].quantity || 1;\r\n stateCartItem.addedBy = actionCartItems[sameCartItemIndex].addedBy;\r\n } else {\r\n stateCartItem.quantity += actionCartItems[sameCartItemIndex].quantity || 1;\r\n }\r\n actionCartItems.splice(sameCartItemIndex, 1);\r\n }\r\n return stateCartItem\r\n })\r\n }\r\n let newCartItems = [...stateCartItems, ...actionCartItems];\r\n\r\n if (state.displayLogicCartItems.length) {\r\n const currentQuote = actionCartItems.length\r\n ? actionCartItems[0].currentQuote\r\n : newCartItems.length\r\n ? newCartItems[0].currentQuote\r\n : 0;\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, currentQuote, action.payload.allWizardsValues);\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n case types.SET_STATE_TO_QUOTE:\r\n return Object.assign({}, state, {\r\n state: \"quote\"\r\n });\r\n\r\n case types.ADD_DISPLAY_LOGIC_CART_ITEM:\r\n return Object.assign({}, state, {\r\n displayLogicCartItems: [...state.displayLogicCartItems.filter((oldCartItem) => {\r\n return (oldCartItem.cartFeature.dbFeature.id !== action.payload.cartItem.cartFeature.dbFeature.id)\r\n // && (oldCartItem.currentQuote !== action.payload.cartItem.currentQuote)\r\n // removed, why it is added? we can have different add to cart features in the same quote\r\n }), action.payload.cartItem]\r\n });\r\n\r\n case types.ADD_TO_RECENTLY_VIEWED:\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n return Object.assign({}, state, {\r\n recentlyViewedItems: (state.recentlyViewedItems.every(oldItem => oldItem.dbFeature.id !== action.payload.feature.dbFeature.id))\r\n ? [...state.recentlyViewedItems, action.payload.feature]\r\n : [...state.recentlyViewedItems]\r\n });\r\n\r\n case types.CHANGE_CART_QUANTITY: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n let newCartItems = [...state.cartItems.map((cartItem) => {\r\n if (cartItem.id === action.payload.cartItem.id) {\r\n cartItem.quantity = action.payload.quantity;\r\n if (action.payload.removeFakeQuantity && Number.isInteger(cartItem.displayFakeQuantity)) {\r\n cartItem.displayFakeQuantity = null;\r\n }\r\n } else if (cartItem.bundleParentId && (cartItem.bundleParentId === action.payload.cartItem.id)) {\r\n const quantity = action.payload.cartItem.cartFeature.dbFeature.bundledFeatureQuantities\r\n ? action.payload.cartItem.cartFeature.dbFeature.bundledFeatureQuantities[cartItem.cartFeature.dbFeature.id] || 1\r\n : 1;\r\n cartItem.quantity = quantity * action.payload.quantity;\r\n }\r\n return cartItem\r\n })];\r\n if (state.displayLogicCartItems.length) {\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.cartItem.currentQuote, action.payload.allWizardsValues)\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.CHANGE_CART_FEATURE: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n let newCartItems = [...state.cartItems.map((cartItem) => {\r\n return (cartItem.id === action.payload.cartItem.id) ? action.payload.cartItem : cartItem\r\n })];\r\n if (!action.payload.skipOtherRules) { // if we change note text for example, we don't need to recalculate other cart items\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n }\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.REMOVE_FROM_CART: {\r\n // console.log('action.payload.cartItem', action.payload.cartItem);\r\n // console.log('state.cartItems', state.cartItems);\r\n const cartItemToDeleteIndex = state.cartItems.findIndex((cartItem) => cartItem.id === action.payload.cartItem.id);\r\n if (cartItemToDeleteIndex > -1) {\r\n state.cartItems.splice(cartItemToDeleteIndex, 1);\r\n }\r\n let newCartItems = [...state.cartItems];\r\n if (state.displayLogicCartItems.length) {\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.cartItem.currentQuote, action.payload.allWizardsValues)\r\n }\r\n newCartItems = checkHardcodedRulesItems(action.payload.fabricatorState, newCartItems);\r\n if (isRecalculateSlabsInCartNeeded(state.cartItems)) {\r\n newCartItems = recalculateSlabsInCart(newCartItems);\r\n }\r\n\r\n // removeFakePriceFromCartItems if we have slabs\r\n if (action.payload.cartItem && action.payload.cartItem.partId === SQFT_FEATURES.slabs) {\r\n const isSlabsStillExistInCart = newCartItems.some(newCartItem => newCartItem.partId === SQFT_FEATURES.slabs)\r\n if (!isSlabsStillExistInCart) {\r\n newCartItems = removeFakePriceFromCartItems(newCartItems);\r\n }\r\n }\r\n\r\n newCartItems = newCartItems.filter((cartItem) => {\r\n return !cartItem.bundleParentId || newCartItems.some(cI => cI.id === cartItem.bundleParentId)\r\n })\r\n // newCartItems = checkStonePricingLogic(newCartItems);\r\n return Object.assign({}, state, {\r\n cartItems: newCartItems\r\n });\r\n }\r\n\r\n case types.TOGGLE_APPLY_POPUP:\r\n return Object.assign({}, state, {\r\n applyPopupOpened: action.payload.applyPopupOpened,\r\n activeApplyPopupItems: action.payload.activeApplyPopupItems.map((activeApplyPopupItem) => {\r\n const existingCartItemIndex = state.cartItems.findIndex(cartItem => {\r\n return cartItem.cartFeature.dbFeature.id === activeApplyPopupItem.cartFeature.dbFeature.id\r\n });\r\n if (existingCartItemIndex > -1) {\r\n activeApplyPopupItem.quantity = state.cartItems[existingCartItemIndex].quantity; // if cart already have item, return it's quantity\r\n }\r\n return activeApplyPopupItem\r\n }).filter(item => {\r\n return !(item.partId === \"top_cabinet\"\r\n && action.payload.activeApplyPopupItems.some(item => item.partId === \"top_cabinet_module_0\"));\r\n\r\n })\r\n });\r\n\r\n case types.CLICK_QUESTION_NO:\r\n case types.CAME_FROM_PAGE:\r\n case types.SHOW_ORDER_COMPLETE_POPUP:\r\n case types.TOGGLE_SHOW_MOBILE_QUOTES:\r\n case types.TOGGLE_SHOW_ALL_QUOTES_CART_ITEMS_LIST:\r\n case types.SET_CART_FOOTER_ACTIVE_BUTTON_INDEX:\r\n case types.SET_CART_ITEM_EDIT_FEATURE:\r\n case types.SET_LOOK_REMOVED_CART_ITEMS:\r\n case types.CHANGE_ALL_CART_ITEMS:\r\n case types.SET_SURE_TAX:\r\n case types.SET_DELIVERY_LIST:\r\n case types.SET_SURE_TAX_LOADING:\r\n case types.SET_MARK_UP_LOGIC:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.RESTORE_CART: {\r\n if (action.payload.cartState && action.payload.cartState.cartItems) {\r\n action.payload.cartState.cartItems = checkHardcodedRulesItems(action.payload.fabricatorState, action.payload.cartState.cartItems);\r\n // action.payload.cartState.cartItems = checkStonePricingLogic(action.payload.cartState.cartItems);\r\n }\r\n let displayLogicCartItems = action.payload.cartState && action.payload.cartState.displayLogicCartItems\r\n ? action.payload.cartState.displayLogicCartItems\r\n : [];\r\n if ((displayLogicCartItems && displayLogicCartItems.length) || state.displayLogicCartItems.length) {\r\n action.payload.cartState.displayLogicCartItems = [...displayLogicCartItems, ...state.displayLogicCartItems.filter((oldCartItem) => {\r\n return !displayLogicCartItems.some(newCi => newCi.cartFeature.dbFeature.id === oldCartItem.cartFeature.dbFeature.id)\r\n })];\r\n // cases when someone loaded display logic in bathroom, then saved kitchen quote, and when the kitchen is restored they are loaded to kitchen\r\n action.payload.cartState.cartItems = checkForAddToCartFeaturesWithDisplayLogic(action.payload.cartState.cartItems, action.payload.cartState.displayLogicCartItems, 0, action.payload.allWizardsValues)\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload.cartState,\r\n checkoutPopupVisible: false,\r\n orderCompletePopupVisible: false,\r\n });\r\n }\r\n case types.CLEAR_CART:\r\n return {...state, cartItems: []};\r\n case types.SHOW_CHECKOUT_POPUP:\r\n return {...state, checkoutPopupVisible: action.payload.show};\r\n case types.SHOW_DEPOSIT:\r\n return {...state, depositVisible: action.payload.show, depositCallback: action.payload.callback};\r\n case types.SET_CART_ITEMS_ADDED_TO_PARENT_CART: {\r\n const cItemsAddedToParentCart = [...state.cItemsAddedToParentCart];\r\n action.payload.cartItems.forEach(cartItem => {\r\n const existing = cItemsAddedToParentCart.find(cItem => cItem.id === cartItem.id);\r\n if (existing) {\r\n existing.quantity += cartItem.quantity;\r\n } else {\r\n cItemsAddedToParentCart.push({\r\n id: cartItem.id,\r\n quantity: cartItem.quantity,\r\n })\r\n }\r\n });\r\n return {...state, cItemsAddedToParentCart};\r\n }\r\n case types.SET_LOOK_OPENED:\r\n case types.SET_LOOK_PAGE_OPENED:\r\n return state.cartItemEditFeature ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n return (state.cartItemEditFeature && !action.payload.lookActiveCategory && !action.payload.isMobile)\r\n ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_LOOK_ACTIVE_FEATURE:\r\n return (state.cartItemEditFeature && !action.payload.lookActiveFeature) ? {...state, cartItemEditFeature: null} : state\r\n case types.TOGGLE_SELECTION_WINDOW:\r\n // exit editing on change route\r\n return (state.cartItemEditFeature && !action.payload.selectionOpened) ? {...state, cartItemEditFeature: null} : state\r\n case types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX:\r\n // exit editing on change step\r\n return state.cartItemEditFeature && !action.payload.isSameStep ? {...state, cartItemEditFeature: null} : state\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n case types.SET_WIZARD_SELECTED_VALUES: {\r\n let newState = state;\r\n if (state.displayLogicCartItems.length) {\r\n let newCartItems = state.cartItems;\r\n newCartItems = checkForAddToCartFeaturesWithDisplayLogic(newCartItems, state.displayLogicCartItems, action.payload.quoteIndex, action.payload.allWizardsValues)\r\n newState = {...state, cartItems: newCartItems}\r\n }\r\n if ((action.type === types.SET_WIZARD_ACTIVE_STEP) && state.cartItemEditFeature) {\r\n newState = {...state, cartItemEditFeature: null}\r\n }\r\n return newState\r\n }\r\n case types.SET_MANUAL_TAX: {\r\n if (!state.manualTaxEntered) {\r\n state.manualTaxEntered = true;\r\n }\r\n state.sureTax = +action.payload.manualTax;\r\n return state\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Analytics from './../../analytics';\r\nimport * as uuid from \"uuid\";\r\n\r\nexport default class Quantity extends Component {\r\n\r\n static propTypes = {\r\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n title: PropTypes.string,\r\n label: PropTypes.string,\r\n size: PropTypes.string,\r\n changeValue: PropTypes.func.isRequired,\r\n minValue: PropTypes.number,\r\n maxValue: PropTypes.number,\r\n defaultQuantity: PropTypes.number,\r\n hideQuantity: PropTypes.bool,\r\n pulseFeatureInfoQuantity: PropTypes.bool,\r\n squared: PropTypes.bool,\r\n allowDecimals: PropTypes.bool\r\n };\r\n\r\n static defaultProps = {\r\n hideQuantity: false,\r\n pulseFeatureInfoQuantity: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n value: props.defaultQuantity || props.value,\r\n inputId: uuid.v4()\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.value !== this.state.value) {\r\n this.setState({\r\n value: nextProps.value\r\n })\r\n }\r\n }\r\n\r\n getMinMax = () => {\r\n const min = this.props.minValue !== undefined ? this.props.minValue : 0;\r\n const max = this.props.maxValue !== undefined ? this.props.maxValue : 99999;\r\n\r\n return {min, max};\r\n };\r\n\r\n handleOnKeyDown = (event) => {\r\n if (event.key==='.' && !this.props.allowDecimals) {\r\n event.preventDefault();\r\n return false\r\n }\r\n };\r\n\r\n handleChangeValue = (event, button) => {\r\n let value = \"\" + (button ? this.state.value + event : +event.target.value);\r\n if (value.includes(\".\")) {\r\n if (!this.props.allowDecimals) {\r\n return false\r\n }\r\n if (value.split(\".\")[1].length > 2) {\r\n value = +value.substring(0, value.length - 1); //round to 2 decimals\r\n }\r\n }\r\n value = +value;\r\n Analytics.sendDataEnteredEvent(\"quantity-value\", value);\r\n const {min, max} = this.getMinMax();\r\n if (value >= min && value <= max) {\r\n value = value === 0 ? \"\" : value;\r\n this.setState({value});\r\n this.props.changeValue(value);\r\n }\r\n };\r\n\r\n handleInputBlur = (e,) => {\r\n const value = +e.target.value;\r\n const {min, max} = this.getMinMax();\r\n if (value >= min) {\r\n this.setState({value});\r\n this.props.changeValue(value);\r\n } else {\r\n this.setState({value: 0});\r\n this.props.changeValue(0);\r\n }\r\n if (value > max) {\r\n this.setState({value: max});\r\n this.props.changeValue(max);\r\n }\r\n };\r\n\r\n getColor = () => {\r\n\r\n if (this.props.pulseFeatureInfoQuantity) {\r\n return \"pulsing-red\"\r\n }\r\n\r\n const {min, max} = this.getMinMax();\r\n return (this.state.value > min && this.state.value <= max) ? \"green\" : \"blue\"\r\n };\r\n\r\n render() {\r\n const {hideQuantity, squared} = this.props;\r\n const color = this.getColor();\r\n return (\r\n
    \r\n {this.props.title ? {this.props.title} : null}\r\n {this.props.label ? : null}\r\n
    \r\n {hideQuantity\r\n ? null\r\n : ()}\r\n \r\n {hideQuantity\r\n ? null\r\n : ()}\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import {loaderDisable, loaderEnable} from \"../bvcomponents/ui/loaderView\";\r\nimport store from \"../store\";\r\nimport Analytics from \"../analytics\";\r\nimport {getCustomerById, resetUserPassword, userLogin, userRegister} from \"../api/user-api\";\r\nimport {showQuoteSavedNotification} from \"../bvcomponents/ui/successNotification\";\r\nimport {saveQuote} from \"../api/server-api\";\r\nimport {getAnalyticsEcommerceValues} from \"../analyticsEcommerceParams\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport Misc from \"./misc\";\r\nimport {changeUserInfo, toggleUserPopup} from \"../actions/actionFunctions\";\r\n\r\nexport const loginButtonCommonClick = async (updateInputValidations, analyticsLabel) => {\r\n await updateInputValidations();\r\n const errors = store.getState().userState.userInfoErrors;\r\n if (Object.keys(errors).length && Object.keys(errors)\r\n .filter(key => key === \"email\" || key === \"password\")\r\n .some(key => errors[key] && errors[key].length)) {\r\n return false\r\n }\r\n loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const {currency, value} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"generate_lead\", {currency, value});\r\n\r\n const loginResponse = await userLogin();\r\n loaderDisable();\r\n return loginResponse\r\n}\r\n\r\nexport const saveQuoteAfterSignIn = async () => {\r\n loaderEnable();\r\n const savedSuccess = await saveQuote({submit: true, showReceipt: false});\r\n if (savedSuccess) {\r\n showQuoteSavedNotification();\r\n document.kvConfig.jobId = savedSuccess.jobId;\r\n }\r\n loaderDisable();\r\n return savedSuccess\r\n}\r\n\r\nexport const registerButtonCommonClick = async (updateInputValidations, analyticsLabel, executeAfterRegisterIfUserExist) => {\r\n await updateInputValidations();\r\n const {userState} = store.getState();\r\n const errors = userState.userInfoErrors;\r\n if (Object.keys(errors).length && Object.keys(errors)\r\n .filter(key => key !== \"password\")\r\n .some(key => errors[key] && errors[key].length)) {\r\n return false\r\n }\r\n if (userState.userInfo) {\r\n store.dispatch(restorePaymentInfo({ // on register - fill in also shipping, why not\r\n shippingAddress: {\r\n address1: userState.userInfo.address1,\r\n address2: userState.userInfo.address2,\r\n fullName: userState.userInfo.firstName + \" \" + userState.userInfo.lastName,\r\n city: userState.userInfo.city,\r\n state: userState.userInfo.state,\r\n postal: userState.userInfo.postal,\r\n }\r\n }))\r\n }\r\n loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const {currency, value} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"generate_lead\", {currency, value});\r\n\r\n const registeredResponse = await userRegister({executeAfterRegisterIfUserExist});\r\n console.log(\"successfully registered\", registeredResponse);\r\n loaderDisable();\r\n return registeredResponse\r\n}\r\n\r\nexport const remindPasswordCommonClick = async (updateInputValidations, analyticsLabel) => {\r\n await updateInputValidations();\r\n const fullStore = store.getState();\r\n // const {language} = fullStore.serverState;\r\n // const {userInfo, userInfoErrors} = fullStore.userState;\r\n const {userInfoErrors} = fullStore.userState;\r\n\r\n if (userInfoErrors.email && userInfoErrors.email.length) {\r\n return false\r\n }\r\n // loaderEnable();\r\n Analytics.sendClickEvent(analyticsLabel);\r\n await resetUserPassword();\r\n // loaderDisable();\r\n}\r\n\r\nexport const getUpdatedUserInfoFromTheResponse = (newUserInfo, responseCustomer, onLoad = false) => {\r\n if (onLoad) {\r\n if (responseCustomer.email) {\r\n newUserInfo.email = responseCustomer.email;\r\n }\r\n if (responseCustomer.fullName) {\r\n newUserInfo.firstName = responseCustomer.fullName;\r\n }\r\n }\r\n if (responseCustomer.phone) {\r\n const oldCountry = responseCustomer.country || responseCustomer.shipping ? responseCustomer.shipping.country : \"\";\r\n const {phoneNumber, country} = Misc.getUserPhoneSplitted(responseCustomer.phone, oldCountry);\r\n newUserInfo.phoneNumber = phoneNumber;\r\n newUserInfo.phone = phoneNumber;\r\n if (country) {\r\n newUserInfo.country = country;\r\n }\r\n }\r\n if (responseCustomer.address) {\r\n [\"address1\", \"address2\", \"postal\", \"city\", \"provence\"].forEach(key => { // removed country, cause it is a string, and we keep object now\r\n if (responseCustomer.address[key]) {\r\n const realKey = (key === \"provence\") ? \"state\" : key;\r\n newUserInfo[realKey] = responseCustomer.address[key];\r\n }\r\n })\r\n }\r\n newUserInfo.shipping = responseCustomer.shipping;\r\n return newUserInfo\r\n}\r\n\r\nexport const tryToSetUserFromUrl = async (url) => {\r\n if (!url || !url.searchParams) {\r\n return\r\n }\r\n const userId = url.searchParams.get(\"u\");\r\n if (!userId) {\r\n return\r\n }\r\n try {\r\n const customerId = +(userId.split(\"/\")[0]);\r\n const responseCustomer = await getCustomerById({\r\n customerId,\r\n });\r\n if (!responseCustomer) {\r\n return\r\n }\r\n const newUserInfo = getUpdatedUserInfoFromTheResponse({}, responseCustomer, true);\r\n store.dispatch(changeUserInfo(newUserInfo));\r\n store.dispatch(toggleUserPopup({\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated: true\r\n }));\r\n } catch (e) {\r\n console.log(\"couldn't log in customer\", userId);\r\n }\r\n}\r\n","import React, {Fragment, useEffect, useRef, useState} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n// import {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport {useOutsideClick} from \"../../../misc/helperHooks\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst LookDropdown = (props) => {\r\n\r\n const {selectItems, selectedItem, selectItemClick, selectLabel, maxItems, errorsObject, changeErrorsObject, getValidationErrors,\r\n inputsValidated, property, size, textOnly} = props;\r\n const [opened, setOpened] = useState(false);\r\n const selectElement = useRef(null);\r\n\r\n useOutsideClick(selectElement, () => {\r\n setOpened(false);\r\n });\r\n\r\n const handleSelectItemClick = (selectItem, selectItemIndex) => {\r\n selectItemClick(selectItem, selectItemIndex);\r\n setOpened(false);\r\n checkForError();\r\n };\r\n\r\n const checkForError = () => {\r\n if (errorsObject && getValidationErrors && changeErrorsObject) {\r\n const errors = getValidationErrors(property, selectedItem.value);\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!inputsValidated) {\r\n checkForError();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n\r\n const selectItemHeight = size || 36;\r\n const styles = {\r\n height: opened\r\n ? maxItems && (selectItems.length > maxItems)\r\n ? (maxItems * selectItemHeight) + \"px\"\r\n : (selectItems.length * selectItemHeight) + \"px\"\r\n : 0\r\n }\r\n\r\n const errorsExist = errorsObject && Array.isArray(errorsObject[property]) && !!errorsObject[property].length;\r\n\r\n return (\r\n
    \r\n {textOnly ? (\r\n
    \r\n \r\n {selectedItem && selectedItem.preText ? {selectedItem.preText} : null}\r\n {selectLabel ? {selectLabel} : null}\r\n {selectedItem ? selectedItem.text : \"-\"}\r\n \r\n
    \r\n ) : (\r\n \r\n )}\r\n {textOnly ? null : (\r\n
    \r\n
      \r\n {selectItems.map((selectItem, selectItemIndex) => {\r\n const isSelected = selectItem.value === selectedItem.value;\r\n return (\r\n
    • \r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )}\r\n {errorsExist ? (\r\n
    \r\n \r\n
    \r\n ) : \"\"}\r\n
    \r\n )\r\n};\r\n\r\nLookDropdown.propTypes = {\r\n selectItems: PropTypes.arrayOf(PropTypes.shape({\r\n text: PropTypes.string.isRequired, // intlKey\r\n value: PropTypes.any.isRequired,\r\n preText: PropTypes.string,\r\n })).isRequired,\r\n selectItemClick: PropTypes.func.isRequired,\r\n selectedItem: PropTypes.object,\r\n selectLabel: PropTypes.string,\r\n className: PropTypes.string,\r\n maxItems: PropTypes.number,\r\n size: PropTypes.number,\r\n textOnly: PropTypes.bool,\r\n // validation below\r\n property: PropTypes.string,\r\n inputsValidated: PropTypes.bool,\r\n errorsObject: PropTypes.object, // userInfoErrorsLike\r\n changeErrorsObject: PropTypes.func,\r\n getValidationErrors: PropTypes.func,\r\n};\r\n\r\nexport default LookDropdown\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\n\r\nconst LookFeatureSku = (props) => {\r\n\r\n const {lookFeature, fabricatorSettings, isList} = props;\r\n\r\n if (!lookFeature.dbFeature.sku || fabricatorSettings.hideSku) {\r\n return null\r\n }\r\n\r\n if (isList) {\r\n return (\r\n \r\n {lookFeature.dbFeature.sku}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n {lookFeature.dbFeature.sku}\r\n \r\n )\r\n};\r\n\r\nLookFeatureSku.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n isList: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeatureSku)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {postMessageToParent} from \"../lookMessaging\";\r\nimport {GROHE_POST_MESSAGES_ACTIONS} from \"../iframeIntegration\";\r\nimport {getLookId, getPostCartItemsList} from \"../lookNavigation/lookFunctions2\";\r\nimport {setIframeIntegrationRequest} from \"../../../actions/iframeIntegrationFunctions\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {setAmazonImageUrl} from \"../../../actions/serverFunctions\";\r\nimport {getTempIdForPostMessage, postSaveVisualizerImage} from \"../../../api/look-api\";\r\nimport {getQuotePriceWithTaxes, getTotalPrice, isIframe} from \"../../../misc/helpers\";\r\n// import {getCurrentLayout} from \"../../appLayout\";\r\n// import Config from \"../../../config\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\nimport {setExisingTempId} from \"../../../actions/groheFunctions\";\r\nimport {renderErrorPopup} from \"../../../api/api-popups\";\r\nimport {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../analyticsEcommerceParams\";\r\nimport {updateCurrentQuote} from \"../../../misc/quotesFunctions\";\r\n\r\nconst WithAddToCartPostMessage = (props) => {\r\n\r\n const {cartItems, jobId, children, activePreset, bvPresets, setIframeIntegrationRequest, isPhoneNumberValidated,\r\n activeQuoteIndex, setAmazonImageUrl, setLookOverlayOpened, exisingTempId, setExisingTempId, userIsLoggedIn,\r\n fabricatorData} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n\r\n const withoutCheckout = !isLixil && !fabricatorSettings.checkout;\r\n if (withoutCheckout && IS_PRODUCT_JOURNEY) { // we keep this button on the look list page\r\n return null\r\n }\r\n\r\n const addToCartPostMessage = async (sendFeatures= null) => {\r\n\r\n // const layout = getCurrentLayout();\r\n // await layout.updateLocalStorage();\r\n\r\n if (!isLixil || !fabricatorSettings.checkout) {\r\n if (!isPhoneNumberValidated) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return\r\n }\r\n if (withoutCheckout) {\r\n // we should just save the quote, everything is correct below\r\n }\r\n if (fabricatorSettings.checkout && IS_PRODUCT_JOURNEY) { // this should never execute, but let it be\r\n return false\r\n }\r\n setLookOverlayOpened(LOOK_OVERLAYS.loadingCart);\r\n return saveQuote({\r\n submit: true,\r\n showReceipt: false\r\n })\r\n .then((responseData) => {\r\n document.kvConfig.jobId = responseData.jobId;\r\n if (responseData.imageUrl) {\r\n setAmazonImageUrl(responseData.imageUrl)\r\n }\r\n setLookOverlayOpened(\"\");\r\n showQuoteSavedNotification(\r\n fabricatorSettings.checkout ? \"successNotification.titleQuoteCreated\" : \"successNotification.titleQuoteSaved\"\r\n );\r\n })\r\n .catch((error) => {\r\n renderErrorPopup(\"Server \"+new Error(error));\r\n setLookOverlayOpened(\"\");\r\n })\r\n }\r\n\r\n const totalPrice = getTotalPrice(null, false, cartItems);\r\n\r\n Analytics.sendEcommerceEvent(\"add_to_cart\", {\r\n currency: fabricatorSettings.currency,\r\n value: getQuotePriceWithTaxes(totalPrice),\r\n items: cartItems.map((cartItem, cartItemIndex) => {\r\n return getAnalyticsEcommerceItem(cartItem.cartFeature, cartItem.quantity, cartItemIndex)\r\n })\r\n });\r\n\r\n setLookOverlayOpened(LOOK_OVERLAYS.loadingCart);\r\n\r\n let lookImage = \"\";\r\n\r\n if (!userIsLoggedIn && !IS_PRODUCT_JOURNEY) {\r\n const updatedQuotes = await updateCurrentQuote();\r\n lookImage = await postSaveVisualizerImage({\r\n base64Image: updatedQuotes[activeQuoteIndex].bvImage\r\n });\r\n }\r\n\r\n // const useRedirect = !IS_PRODUCT_JOURNEY\r\n // || (Array.isArray(sendFeatures) && sendFeatures.length > 1 && !sendFeatures.some(cartItem => featureIsBundle(cartItem.cartFeature)))\r\n\r\n let lookId = getLookId(activePreset, bvPresets);\r\n\r\n let postData = {\r\n \"EventType\": GROHE_POST_MESSAGES_ACTIONS.addToCart,\r\n \"LookImage\": lookImage ? lookImage : \"No image created\",\r\n \"LookId\": lookId + \"\",\r\n \"LookSkus\": Array.isArray(sendFeatures)\r\n ? getPostCartItemsList(sendFeatures, true)\r\n : getPostCartItemsList(cartItems, true),\r\n \"UseRedirect\": \"\" + !IS_PRODUCT_JOURNEY,\r\n }\r\n\r\n if(jobId) {\r\n postData[\"VisualizerId\"] = jobId + \"\"\r\n }\r\n\r\n if (!isIframe()) {\r\n console.log(\"Not an iframe, can't post cart data:\", postData);\r\n }\r\n\r\n setIframeIntegrationRequest(postData);\r\n if (userIsLoggedIn) {\r\n saveQuote({\r\n submit: true,\r\n })\r\n .then((responseData) => {\r\n document.kvConfig.jobId = responseData.jobId;\r\n if(responseData.jobId) {\r\n postData[\"VisualizerId\"] = responseData.jobId + \"\";\r\n }\r\n postData[\"LookImage\"] = responseData.imageUrl || lookImage || \"No image created\";\r\n if (responseData.imageUrl) {\r\n setAmazonImageUrl(responseData.imageUrl)\r\n }\r\n window.postMessageIsExecuting = true;\r\n postMessageToParent(postData);\r\n })\r\n } else {\r\n postData[\"tempID\"] = await getTempIdForPostMessage(\"\", exisingTempId);\r\n if (IS_PRODUCT_JOURNEY) {\r\n setExisingTempId(postData[\"tempID\"]);\r\n }\r\n postMessageToParent(postData);\r\n }\r\n }\r\n\r\n return children(addToCartPostMessage)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n const {jobId} = store.serverState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {exisingTempId} = store.groheState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n cartItems,\r\n activePreset,\r\n bvPresets,\r\n jobId,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n // quotes,\r\n activeQuoteIndex,\r\n exisingTempId,\r\n fabricatorData,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setIframeIntegrationRequest,\r\n setAmazonImageUrl,\r\n setLookOverlayOpened,\r\n setExisingTempId,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithAddToCartPostMessage)\r\n","import React, {useMemo, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport AddIcon from '@mui/icons-material/Add';\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport LookFeaturePrice from \"./lookFeaturePrice\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\n// import LookListFeatureActions from \"./lookListFeatureActions\";\r\nimport {\r\n setLookActiveCategory,\r\n setLookActiveFeature, setLookAllWallsTutorial,\r\n setLookCompatabilityAlert,\r\n setLookDemoPointsClicked,\r\n setLookOverlayOpened,\r\n // setLookAllWallsOpened\r\n} from \"../../../../../actions/lookFunctions\";\r\nimport Config from \"../../../../../config\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick} from \"../../lookFunctions\";\r\nimport LookListFeatureCheckmark from \"./lookListFeatureCheckmark\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport LookCanvasContext from \"../../../lookCanvasContext\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {LOOK_WALLS_ONLY} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getCartItemObject, getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {\r\n enableRelatedFeature,\r\n getFeatureIsActive,\r\n getFeatureUrl,\r\n hideFeatureSection\r\n} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport WithClickCount from \"../../../hocs/withClickCount\";\r\nimport LookListActiveFeatureMobileButton from \"./lookListActiveFeatureMobileButton\";\r\nimport LookAllWallsRadioButton from \"../lookAllWallsRadioButton\";\r\nimport {\r\n checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n getShowMatchRadio\r\n} from \"../../lookNavigationFunctions\";\r\nimport LookFeatureItemLocked from \"./lookFeatureItemLocked\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {shouldZoomPartId} from \"../../../hocs/withZoomToFeature\";\r\nimport LookListFeatureName from \"./lookListFeatureName\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../../../bathroomFunctions\";\r\n\r\n\r\n\r\nconst LookListFeature = (props) => {\r\n\r\n const {style, lookFeature, lookExpanded, lookViewType, lookActiveFeature, setLookActiveFeature, history, position,\r\n featureGroup, updateCanvasCount, lookActiveCategory, isMobile, isPhoneNumberValidated, canvasCount,\r\n addToCart, qtActiveCategory, setCanvasScale, canvasScale, navItems, updateLookCartItem,\r\n setLookDemoPointsClicked, lookDemoPointsClicked, viewType, fromDesignRecommended, setLookAllWallsTutorial,\r\n setLookCompatabilityAlert, fabricatorData, lookCompatabilityAlert, lookLockedTutorial, lookAllWallsTutorial,\r\n // setLookAllWallsOpened, lookAllWallsOpened,\r\n isAllWallsTutorialItem,\r\n } = props;\r\n\r\n const featureElement = useRef();\r\n\r\n const noFeatureSection = useMemo(() => {\r\n return hideFeatureSection(true, lookFeature.partId, lookFeature, lookCompatabilityAlert)\r\n }, [lookFeature, lookCompatabilityAlert]);\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const showPriceLocked = useMemo(() => getFeatureIsLocked(lookFeature), [lookFeature, isPhoneNumberValidated]);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost\r\n && !showPriceLocked && !fabricatorData.hidePricesFromUser && !noFeatureSection;\r\n const featureIsLocked = showPriceLocked;\r\n\r\n // const [canRender, setCanRender] = useState(false);\r\n const isEmpty = (!lookFeature && position) || (featureGroup && featureGroup.disabled);\r\n const currentType = viewType || lookViewType;\r\n\r\n // useEffect(() => {\r\n // if (lookExpanded) {\r\n // setTimeout(() => { // preventing thumbnail jumping\r\n // setCanRender(true)\r\n // }, 200)\r\n // } else {\r\n // setCanRender(false)\r\n // }\r\n // }, [lookExpanded])\r\n\r\n const showMatchRadio = useMemo(() => getShowMatchRadio(lookFeature), [lookFeature]);\r\n\r\n const applyFeature = async (zoomFeature, imageCanvas, forceClick = false) => {\r\n const layout = getCurrentLayout();\r\n const parent = zoomFeature.getParent();\r\n Analytics.sendEcommerceEvent(\"select_item\", {\r\n item_list_id: zoomFeature.partId,\r\n item_list_name: parent.dbName || parent.partName || \"\",\r\n items: [getAnalyticsEcommerceItem(zoomFeature, 1)],\r\n });\r\n\r\n if (!lookActiveFeature) {\r\n parent.featureBeforeChange = zoomFeature;\r\n }\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n if (!IS_PRODUCT_JOURNEY && (!isMobile || featureIsLocked)) {\r\n setLookActiveFeature(zoomFeature, positionInList);\r\n }\r\n if ((layout.isNewLayout || (layout.visualizerType === \"bvScene\")) && featureCanChangeShowerSize(zoomFeature)) {\r\n await searchForSameNameWallsBeforeFeatureApply(zoomFeature);\r\n }\r\n\r\n // setLookActiveCategory(zoomFeature.partId);\r\n if (showMatchRadio) { // before nav feature click\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n // const parent = zoomFeature.getParent();\r\n // setActiveFeaturesBeforeAllWalls([], parent); // we don't need it here, as we have remembering logic below\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(zoomFeature, applyToLogic, true);\r\n // if (!lookAllWallsOpened) {\r\n // setLookAllWallsOpened(true);\r\n // }\r\n }\r\n }\r\n navFeatureCLick(zoomFeature, true, forceClick);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n // const parent = zoomFeature.getParent();\r\n // if (parent.disabled) {\r\n // parent.disabled = false;\r\n // parent.disabledClick();\r\n // }\r\n if (updateLookCartItem) {\r\n updateLookCartItem(zoomFeature) // removed since we have select button on look journey\r\n }\r\n if (isMobile) {\r\n if (IS_PRODUCT_JOURNEY || featureIsLocked) {\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId) && !showMatchRadio;\r\n // const closeOnly = zoomFeature && !layout.partIdExistInQtCategory(zoomFeature.partId);\r\n // if (closeOnly) {\r\n // history.push(getFeatureUrl(zoomFeature, true))\r\n // } else {\r\n // setLookActiveCategory(\"\");\r\n // history.push(getFeatureUrl(zoomFeature)) // always go to feature screen on mobile\r\n // }\r\n history.push(getFeatureUrl(zoomFeature, true));\r\n }\r\n } else {\r\n history.push(getFeatureUrl(zoomFeature, !!lookActiveCategory));\r\n }\r\n // here we can update the navigation list, but I removed it since it is sorting features and confusing customers\r\n // if (lookFeature.getColorName(filterGroups) !== lookActiveFeature.getColorName(filterGroups)) {\r\n // updateNavigationCount();\r\n // }\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS_ONLY.includes(zoomFeature.partId)\r\n && shouldZoomPartId(zoomFeature.partId, isMobile) && (canvasScale === 1)) {\r\n const commonCoords = getFeatureCoords(zoomFeature) || getCommonCoords(featureGroup || zoomFeature.getParent(), zoomFeature, imageCanvas.current.canvas);\r\n const center = commonCoords && Object.keys(commonCoords).length\r\n ? getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile)\r\n : null;\r\n if (center) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, 0, false, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor)\r\n }\r\n }\r\n if (!lookDemoPointsClicked) {\r\n setLookDemoPointsClicked(true);\r\n }\r\n if (!lookAllWallsTutorial.finished && showMatchRadio && !featureIsLocked && !lookFeature.notAvailableInVisualizer\r\n && featureElement && featureElement.current && !fabricatorData.isEncore && (currentType === 1)) {\r\n setLookAllWallsTutorial({\r\n visible: true,\r\n // withGrid: navItems.length === 1,\r\n // positionInList,\r\n lookFeature,\r\n top: featureElement.current.getBoundingClientRect().top,\r\n left: featureElement.current.getBoundingClientRect().left,\r\n height: style.height,\r\n // firstLockedIndex,\r\n // firstUnlockedIndex,\r\n });\r\n }\r\n }\r\n\r\n const listFeatureClick = (event, imageCanvas, maxClickCountReached) => {\r\n if (event.target.closest(\".look-icon--delete\") || event.target.closest(\".gm-ios-checkbox\") || lookLockedTutorial.visible) {\r\n return\r\n }\r\n if (Config.isDevMode() && lookFeature) {\r\n console.log(\"lookFeature\", lookFeature, lookFeature.metaData);\r\n }\r\n if (lookExpanded) {\r\n document.querySelector(\".lm\").style.transition = \"none\";\r\n setTimeout(() => {\r\n document.querySelector(\".lm\").style.transition = \"all 0.3s ease\";\r\n }, 300)\r\n }\r\n let zoomFeature = lookFeature;\r\n if (isEmpty) {\r\n if (!lookFeature && position) {\r\n zoomFeature = featureGroup.getMatchingPositionFeature(position);\r\n if (zoomFeature) {\r\n featureGroup.layerPositions[position] = zoomFeature;\r\n }\r\n }\r\n if (zoomFeature) {\r\n featureGroup.activeFeature = zoomFeature;\r\n addToCart([getCartItemObject(zoomFeature, 1, qtActiveCategory)]);\r\n }\r\n console.log(\"zoomFeature featureGroup\", zoomFeature, featureGroup);\r\n }\r\n\r\n if (!zoomFeature || maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(zoomFeature);\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesList + featureLabel\r\n : fromDesignRecommended\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesListDesignRecommended + featureLabel\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesList + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n if (featureIsLocked) {\r\n if (!IS_PRODUCT_JOURNEY) {\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n setLookActiveFeature(zoomFeature, positionInList);\r\n history.push(getFeatureUrl(zoomFeature, true));\r\n }\r\n return false\r\n }\r\n\r\n const compatabilityLogic = checkForCompatabilityAlert(zoomFeature);\r\n if (compatabilityLogic.length) {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookShowCompatabilityAlert);\r\n setLookCompatabilityAlert({\r\n visible: true,\r\n compatabilityLogic,\r\n clickedFeature: zoomFeature,\r\n applyFunction: applyFeature.bind(this, zoomFeature, imageCanvas, true) // always apply features from this popup\r\n });\r\n return false\r\n }\r\n\r\n // if (featureIsLocked && !fabricatorSettings.clickLeadCapture && !(isIframe() && fabricatorData.isLixil)) {\r\n // window.clearTimeout(window.leadCaptureTimeoutId);\r\n // window.leadCaptureTimeoutId = setTimeout(() => {\r\n // setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n // }, 500)\r\n // }\r\n\r\n applyFeature(zoomFeature, imageCanvas);\r\n }\r\n\r\n const isActive = useMemo(() => {\r\n return getFeatureIsActive(lookFeature, lookActiveFeature, lookActiveCategory, featureGroup)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookFeature, lookActiveFeature, lookActiveCategory, featureGroup, canvasCount]);\r\n\r\n // const showYellowNotice = !IS_PRODUCT_JOURNEY && (getStyleAlertNotMatchingFeatures(lookFeature).length && !lookActiveCategory)\r\n // || (lookFeature && lookRemovedCartItems.length && lookRemovedCartItems.some(cartItem => {\r\n // return (cartItem.partId === lookFeature.partId) && cartItem.cartFeature.metaData.layerPosition\r\n // && (cartItem.cartFeature.metaData.layerPosition === lookFeature.metaData.layerPosition)\r\n // }));\r\n\r\n const showAllWalls = isActive && showMatchRadio && !featureIsLocked;\r\n const viewTypeFour = +currentType === 4;\r\n const isLockedAndViewTypeFour = showPriceLocked && viewTypeFour;\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n \r\n {(maxClickCountReached) => (\r\n
  • listFeatureClick(event, imageCanvas, maxClickCountReached)}>\r\n {isEmpty ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n
    \r\n {isMobile && !IS_PRODUCT_JOURNEY\r\n ? lookAllWallsTutorial.visible ? null : \r\n : }\r\n \r\n {showAllWalls ? : null}\r\n
    \r\n )}\r\n {isEmpty ? (\r\n
    \r\n \r\n
    \r\n ) : (\r\n
    \r\n {viewTypeFour || ((currentType === 2) && showPriceLocked) ? null : (\r\n \r\n \r\n {/*{showYellowNotice ? : null}*/}\r\n \r\n )}\r\n {showPriceLocked ? \r\n : viewTypeFour\r\n ? null\r\n : }\r\n {!lookExpanded && !isLockedAndViewTypeFour ? (\r\n
    \r\n {!lookExpanded && !isLockedAndViewTypeFour && !noFeatureSection && !showPriceLocked ? (\r\n \r\n ) : null}\r\n {viewTypeFour && !featureIsLocked ? : null}\r\n
    \r\n ) : null}\r\n
    \r\n )}\r\n {/*{lookFeature && lookExpanded && canRender ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n {/*{lookFeature && lookExpanded && canRender ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n
  • \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListFeature.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n fromDesignRecommended: PropTypes.bool,\r\n style: PropTypes.object,\r\n featureGroup: PropTypes.object,\r\n position: PropTypes.string,\r\n navItems: PropTypes.array,\r\n updateLookCartItem: PropTypes.func,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n isAllWallsTutorialItem: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookExpanded, lookViewType, lookActiveCategory, lookActiveFeature, lookDemoPointsClicked, lookCompatabilityAlert,\r\n // lookAllWallsOpened\r\n lookLockedTutorial, lookAllWallsTutorial} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {canvasScale, canvasCount} = store.bathroomVisualizerState;\r\n const {qtActiveCategory} = store.qtState;\r\n // const {filterGroups} = store.filterState;\r\n // const {lookRemovedCartItems} = store.cartState;\r\n const fabricatorData = store.fabricatorState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n lookActiveFeature,\r\n lookExpanded,\r\n lookViewType,\r\n lookActiveCategory,\r\n isMobile,\r\n qtActiveCategory,\r\n // lookRemovedCartItems,\r\n lookDemoPointsClicked,\r\n canvasScale,\r\n // filterGroups,\r\n // lookAllWallsOpened,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n lookCompatabilityAlert,\r\n canvasCount,\r\n lookLockedTutorial,\r\n lookAllWallsTutorial,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n updateCanvasCount,\r\n setLookActiveCategory,\r\n addToCart,\r\n setCanvasScale,\r\n setLookDemoPointsClicked,\r\n setLookCompatabilityAlert,\r\n setLookOverlayOpened,\r\n setLookAllWallsTutorial,\r\n // updateNavigationCount,\r\n // setLookAllWallsOpened,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListFeature)\r\n)\r\n","import React from 'react';\r\nimport UserLoginButton from \"../ui/userLoginButton\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {showCheckoutLayout} from \"../../actions/actionFunctions\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\nimport Analytics from '../../analytics';\r\n\r\nexport default class ShoppingCart extends React.Component {\r\n\r\n getRecentlyViewedItems = () => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"layout.getActiveFeatures()\", layout.getActiveFeatures());\r\n const activeFeatures = layout.getActiveFeatures()\r\n .filter(feature => {\r\n if (!feature.cartFeature || !feature.cartFeature.dbFeature\r\n || (feature.cartFeature.partName && feature.cartFeature.partName.includes(\"laceholder\")) || feature.partId === \"shower_body\") {\r\n return false\r\n }\r\n if (feature.partId.includes(\"pony_wall\") && feature.cartFeature.getParent) {\r\n const showerParent = feature.cartFeature.getParent().getParent().layout.parts.Shower;\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n return false\r\n }\r\n }\r\n const featureId = feature.cartFeature.dbFeature.id;\r\n return !feature.partId.includes(\"top_cabinet_module\") && this.props.cartItems.every((cartItem) => {\r\n return cartItem.cartFeature.dbFeature.id !== featureId\r\n })\r\n });\r\n const recentlyViewedItems = (Array.isArray(this.props.recentlyViewedItems) && this.props.recentlyViewedItems.length)\r\n ? this.props.recentlyViewedItems\r\n .filter(recentItem => {\r\n const recentItemId = recentItem.dbFeature.id;\r\n return activeFeatures.every(cartItem => cartItem.cartFeature.dbFeature.id !== recentItemId)\r\n && this.props.cartItems.every((cartItem) => cartItem.cartFeature.dbFeature.id !== recentItemId)\r\n })\r\n .map(recentItem => {\r\n return {\r\n selectionGroup: recentItem.getParent().getParent().partName,\r\n partId: recentItem.partId,\r\n quantity: 0,\r\n cartFeature: recentItem\r\n };\r\n })\r\n : [];\r\n return [...activeFeatures, ...recentlyViewedItems]\r\n };\r\n\r\n getFinalButton = () => {\r\n if (document.kvConfig.canSaveQuote !== false) { // if document.kvConfig.canSaveQuote is null it is ok, we are checking only for false\r\n let intlText = \"\";\r\n let onClick = () => {};\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if (fabricatorSettings.checkout) {\r\n if (fabricatorSettings.sureTax && !this.props.isPhoneNumberValidated) {\r\n return {\r\n intlText: \"quotingTool.featureInfo.priceLockedTitle\",\r\n onClick: () => this.handleCheckOut(\"updateTax\"),\r\n }\r\n }\r\n onClick = this.handleCheckOut;\r\n intlText = (fabricatorSettings.enableDocuSign || fabricatorSettings.hasPaymentGateway || document.kvConfig.showBackToDashboard)\r\n ? \"shoppingCart.checkoutButtonCheckoutNow\"\r\n : !fabricatorSettings.leadCaptureOnQuote // leadCaptureOnQuote is OFF\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : !fabricatorSettings.twoFA // leadCaptureOnQuote is ON\r\n ? this.props.isPhoneNumberValidated || document.kvConfig.isBackend\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : \"shoppingCart.checkoutButtonUnlockPrice\"\r\n : this.props.userIsLoggedIn || document.kvConfig.isBackend\r\n ? \"shoppingCart.checkoutButtonBuyNow\"\r\n : \"shoppingCart.checkoutButtonUnlockPrice\"\r\n } else if (fabricatorSettings.leadCaptureOnQuote) {\r\n intlText = \"shoppingCart.checkoutButtonEmailQuote\";\r\n onClick = this.handleSaveClick;\r\n } else {\r\n intlText = \"shoppingCart.checkoutButtonStartOver\";\r\n onClick = this.handleStartOverClick;\r\n }\r\n if (this.props.fabricatorData.isLakesideSurfaces) {\r\n intlText = \"buttons.submit\"\r\n }\r\n return {\r\n intlText,\r\n onClick,\r\n }\r\n }\r\n return null\r\n };\r\n\r\n handleCheckOut = async (assignButtonsToShow) => {\r\n\r\n if (document.kvConfig.isBackend && this.props.toggleShowAssignQuotePopup && !this.props.editToken) {\r\n this.props.toggleShowAssignQuotePopup(true, assignButtonsToShow); // assignButtonsToShow should be \"checkout\" and come only from the button group\r\n return;\r\n }\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n Analytics.sendClickEvent(\"checkout-buy-now-button\");\r\n if (!UserLoginButton.handleLoginClick({...this.props, checkout: true}))\r\n return ;\r\n\r\n loaderEnable(\"loader.savingQuoteText\");\r\n\r\n saveQuote({\r\n submit: true,\r\n showContractSignOnError: true\r\n })\r\n .then((response) => {\r\n if (response) {\r\n /*let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);*/\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification();\r\n showCheckoutLayout(fabricatorSettings);\r\n }).catch((error) => {\r\n console.log('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n };\r\n\r\n}\r\n","import {getSelectedContracts} from \"./contractsFunctions\";\r\n\r\nexport const getFirstUnfilledCustomField = (\r\n contractsValues,\r\n contractsList,\r\n fabricatorData,\r\n receiptSignature = \"\",\r\n contractsContext\r\n) => {\r\n // need to find first un-filled custom field and change the document page to it\r\n if (fabricatorData && fabricatorData.receiptSettings && fabricatorData.receiptSettings.signIsRequired\r\n && contractsContext.showReceiptInContract && contractsContext.receiptPages && !receiptSignature) {\r\n return { page: contractsContext.receiptPages, fieldIndex: 0 }\r\n }\r\n let customFieldInfo = { page: -1, fieldIndex: -1 };\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n for (const contract of selectedContracts) {\r\n let {fields, pagesFrom} = contract;\r\n if (!contractsValues[contract.id]) {\r\n contractsValues[contract.id] = {};\r\n }\r\n const fieldsNeeded = fields.filter(field => {\r\n return field.isEditable && field.isRequired && field.coords && field.coords.length && !field.isCheckBox // why checkboxes are not required? old support\r\n })\r\n for (let i = 0; i <= contract.pagesCount; i++) {\r\n if (customFieldInfo.page === -1) {\r\n fieldsNeeded.forEach(field => {\r\n if (customFieldInfo.page === -1) {\r\n const sortedFields = field.coords.sort((a, b) => {\r\n // return (a.fieldIndexOnPage > b.fieldIndexOnPage) ? 1 : -1 // no we need to sort by top because this is incorrect\r\n const top1 = a.pageRect.height - a.rectangle.ury;\r\n const top2 = b.pageRect.height - b.rectangle.ury;\r\n return top1 > top2 ? 1 : -1\r\n });\r\n sortedFields.forEach(coord => {\r\n if (customFieldInfo.page === -1 && (i === coord.page)\r\n && (!contractsValues[contract.id][coord.page]\r\n || !contractsValues[contract.id][coord.page][coord.fieldIndexOnPage]\r\n || !contractsValues[contract.id][coord.page][coord.fieldIndexOnPage].value)) {\r\n customFieldInfo = { page: pagesFrom + coord.page - 1, fieldIndex: coord.fieldIndexOnPage };\r\n }\r\n })\r\n }\r\n })\r\n }\r\n }\r\n }\r\n return customFieldInfo;\r\n}\r\n\r\nexport const getFieldValue = (pageIndex, fieldIndex, activeContract, contractsValues) => {\r\n if (contractsValues[activeContract.id]\r\n && contractsValues[activeContract.id][pageIndex]\r\n && contractsValues[activeContract.id][pageIndex][fieldIndex]) {\r\n return contractsValues[activeContract.id][pageIndex][fieldIndex].value\r\n }\r\n return \"\"\r\n};\r\n\r\nexport const getFieldCoords = (contractFields, selectedFieldIndex) => {\r\n let fieldsCoords = [];\r\n contractFields.forEach(field => {\r\n if (!field.isEditable) {\r\n return;\r\n }\r\n field.coords.forEach((coord) => {\r\n const { fieldIndexOnPage, isRequired } = coord;\r\n if (field.isCustom) {\r\n const isSelected = fieldIndexOnPage === selectedFieldIndex;\r\n if (!isSelected && isRequired) {\r\n fieldsCoords.push({ coords: fieldCoords, idx: fieldIndexOnPage });\r\n }\r\n }\r\n })\r\n })\r\n return fieldsCoords\r\n}\r\n\r\nexport const getAlreadyFilledSignatureField = (fieldName, contractsValues, contractsList) => {\r\n let signatureValue = \"\";\r\n const selectedContracts = getSelectedContracts(contractsList);\r\n const withoutRequiredSignatureName = getFieldNameWithoutRequired(fieldName);\r\n for (const contract of selectedContracts) {\r\n let {fields} = contract;\r\n fields.forEach(field => {\r\n if (signatureValue || !field.isEditable || !field.isSignature) {\r\n return;\r\n }\r\n field.coords.forEach((coord) => {\r\n if (signatureValue || !coord.fieldName\r\n || (getFieldNameWithoutRequired(coord.fieldName) !== withoutRequiredSignatureName)) {\r\n return\r\n }\r\n signatureValue = getFieldValue(coord.page, coord.fieldIndexOnPage, contract, contractsValues);\r\n })\r\n })\r\n }\r\n return signatureValue;\r\n}\r\n\r\nexport const getFieldNameWithoutRequired = (fieldName = \"\") => {\r\n if (!fieldName || typeof fieldName !== \"string\") {\r\n return \"\"\r\n }\r\n return fieldName.replace(\"@\", \"\")\r\n}\r\n","import React from \"react\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {Grid} from \"react-virtualized\";\r\n\r\nimport LookListFeature from \"../lookListFeature/lookListFeature\";\r\nimport LookWizardSectionListFeature from \"../lookWizard/lookWizardSectionListFeature\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookVirtualizedListLoadingItem from \"./lookVirtualizedListLoadingItem\";\r\n// import LoadingSpinner from \"../../ui/loadingSpinner\";\r\n\r\nexport const getLookRowHeight = (lookViewType) => {\r\n return lookViewType === 1\r\n ? 104\r\n : lookViewType === 4\r\n ? 128\r\n : lookViewType === 2\r\n ? 171\r\n : 340\r\n}\r\n\r\nconst LookVirtualizedList = (props) => {\r\n\r\n const {renderList, contentHeight, lookViewType, isMobile, updateLookCartItem, isWizard, wizardGroup, onScrollHandler,\r\n imageCanvas, maxClickCountReached, loadingCount} = props;\r\n\r\n if (!contentHeight || isNaN(contentHeight)) {\r\n return null\r\n }\r\n\r\n const width = isWizard ? 312 : 320;\r\n const columnWidth = lookViewType === 2\r\n ? width / 2\r\n : lookViewType === 4 ? width / 3 : width;\r\n const columnCount = lookViewType === 2\r\n ? 2\r\n : lookViewType === 4 ? 3 : 1;\r\n const rowCount = Math.ceil((loadingCount || renderList.length) / columnCount);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height: isMobile ? contentHeight - 16 : contentHeight - 116, // 52 header + 16 padding from bottom\r\n rowHeight: getLookRowHeight(lookViewType),\r\n overscanRowCount: 2,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n if (loadingCount) {\r\n return \r\n }\r\n const navItem = renderList[(listSettings.columnCount * rowIndex) + columnIndex];\r\n if (!navItem) {\r\n return null\r\n }\r\n if (isWizard) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n listSettings.height\r\n ? \" virtualized-grid--with-scroll\"\r\n : \" virtualized-grid--without-scroll\")}\r\n width={listSettings.width}\r\n height={listSettings.height}\r\n overscanRowCount={listSettings.overscanRowCount}\r\n rowCount={listSettings.rowCount}\r\n columnCount={listSettings.columnCount}\r\n columnWidth={listSettings.columnWidth}\r\n rowHeight={listSettings.rowHeight}\r\n onScroll={onScrollHandler}\r\n cellRenderer={cellRenderer}\r\n noRowsRenderer={noRowsRenderer}\r\n />\r\n )\r\n};\r\n\r\nLookVirtualizedList.propTypes = {\r\n imageCanvas: PropTypes.object,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n renderList: PropTypes.array,\r\n contentHeight: PropTypes.number,\r\n lookViewType: PropTypes.number.isRequired,\r\n isMobile: PropTypes.bool,\r\n onScrollHandler: PropTypes.func,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n loadingCount: PropTypes.number,\r\n}\r\n\r\nexport default injectIntl(LookVirtualizedList)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport TextField from \"@mui/material/TextField\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\nimport AddIcon from '@mui/icons-material/Add';\r\n\r\nimport {setGroheActiveFeatureQuantity} from \"../../../../../actions/groheFunctions\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getFeatureUnit} from \"../../../../../misc/helpers\";\r\nimport {pricingIsLocked} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nconst GroheFeatureQuantity = (props) => {\r\n const {intl, isMobile, disabled, groheActiveFeatureQuantity, setGroheActiveFeatureQuantity, lookActiveFeature, feature,\r\n hideTitle, isWizard, fabricatorData} = props;\r\n const MAX = 99999;\r\n const MIN = isWizard ? 0 : 1;\r\n\r\n const allowDecimals = isWizard;\r\n\r\n const updateQuantity = (quan) => {\r\n setGroheActiveFeatureQuantity(quan);\r\n };\r\n\r\n const handleInputChange = (e, fromButton = \"\") => {\r\n let value = \"\" + e.target.value;\r\n\r\n if (value.includes(\".\")) {\r\n if (!allowDecimals) {\r\n return false\r\n }\r\n if (value.split(\".\")[1].length > 3) {\r\n value = +value.substring(0, value.length - 1); //round to 3 decimals\r\n }\r\n }\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(feature || lookActiveFeature);\r\n const analyticsAdjust = fromButton ? fromButton + \"-\" + value : \"input-\" + value;\r\n Analytics.sendClickEvent(`${PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureQuantityChange + featureLabel}-${analyticsAdjust}`);\r\n\r\n value = +value;\r\n\r\n if (value <= MIN) {\r\n value = MIN;\r\n } else if (value > MAX) {\r\n value = MAX;\r\n }\r\n\r\n updateQuantity(value);\r\n };\r\n\r\n const handleOnKeyDown = (event) => {\r\n if (event.key==='.' && !allowDecimals) {\r\n event.preventDefault();\r\n return false\r\n }\r\n };\r\n\r\n const {isLixil} = pricingIsLocked();\r\n\r\n return (\r\n
    \r\n
    \r\n {hideTitle ? null : (\r\n
    \r\n {isLixil\r\n ? \r\n : getFeatureUnit(feature || lookActiveFeature, intl, fabricatorData, groheActiveFeatureQuantity)}\r\n
    \r\n )}\r\n
    \r\n {\r\n handleInputChange({target: {value: groheActiveFeatureQuantity - 1}}, \"minus\")\r\n }}\r\n disabled={disabled}\r\n className={\"look-icon grohe-look__icon--small\"\r\n + (isMobile || !IS_PRODUCT_JOURNEY ? \" look-icon--tiny look-icon--semi\" : \" look-icon--small\")}>\r\n \r\n \r\n \r\n {\r\n handleInputChange({target: {value: groheActiveFeatureQuantity + 1}}, \"plus\")\r\n }}\r\n disabled={disabled}\r\n className={\"look-icon grohe-look__icon--small\"\r\n + (isMobile || !IS_PRODUCT_JOURNEY ? \" look-icon--tiny look-icon--semi\" : \" look-icon--small\")}>\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nGroheFeatureQuantity.propTypes = {\r\n disabled: PropTypes.bool,\r\n hideTitle: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n feature: PropTypes.shape(featureInterface)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {lookActiveFeature} = store.lookState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n isMobile,\r\n groheActiveFeatureQuantity,\r\n lookActiveFeature,\r\n fabricatorData,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheActiveFeatureQuantity\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureQuantity)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport InfoIcon from \"@mui/icons-material/Info\";\r\n\r\nimport {setLookActiveCategory, setLookMoreInfoOpened, setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_FEATURE_CONTENT, LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getAvailableFeatureContent} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\nconst GroheFeatureMoreInfoButton = (props) => {\r\n\r\n const {featureIsLocked, setLookMoreInfoOpened, moreInfoOpened, moreInfoContent, lookActiveCategory, lookActiveFeature,\r\n setLookOverlayOpened} = props;\r\n\r\n const moreInfoClick = () => {\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(moreInfoOpened\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureMoreInfoClose\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureMoreInfoOpen\r\n );\r\n } else {\r\n Analytics.sendClickEvent(moreInfoOpened\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureMoreInfoClose\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureMoreInfoOpen\r\n );\r\n }\r\n if (featureIsLocked) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n return false\r\n }\r\n const moreInfoType = moreInfoOpened && (moreInfoContent === LOOK_FEATURE_CONTENT.info)\r\n ? \"\"\r\n : lookActiveCategory && !IS_PRODUCT_JOURNEY ? \"select\" : \"main\";\r\n //setLookActiveCategory(\"\");\r\n setLookMoreInfoOpened(moreInfoType, LOOK_FEATURE_CONTENT.info);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {moreInfoOpened, moreInfoContent} = store.lookState;\r\n const {lookActiveCategory, lookActiveFeature} = store.lookState;\r\n return {\r\n moreInfoOpened,\r\n moreInfoContent,\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookMoreInfoOpened,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(GroheFeatureMoreInfoButton)\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\n\r\nconst GroheCartBackButton = (props) => {\r\n const {backButtonClick} = props;\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheCartBackButton.propTypes = {\r\n backButtonClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default GroheCartBackButton\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState, addVisualizersLoaded\r\n} from \"../../actions/actionFunctions\";\r\n// import './assets/css/styles.css';\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\n// import MobileRotateButton from './common/mobileRotateButton';\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass BathroomVisualizer extends Visualizer {\r\n\r\n static displayName = 'BathRoom visualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const bvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n this.layout.loadNewFeatures(mainResponse); // 1) set default (placeholders)\r\n this.layout.setGroupsItemsCount(bvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showOtherLayouts =\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\")\r\n ? fabricatorSettings && (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend))\r\n : true;\r\n const showTutorial = this.checkToShowTutorial() && showOtherLayouts;\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {/**/}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n addVisualizersLoaded,\r\n showVisualizerTutorial\r\n})(BathroomVisualizer);\r\n","import React from \"react\";\r\nimport {Page, Text, Document} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport getPrintColors from \"./printDocumentStyles\";\r\nimport PrintDocumentHeader from \"./printDocumentHeader\";\r\nimport PrintDocumentInfo from \"./printDocumentInfo\";\r\nimport PrintDocumentBody from \"./printDocumentBody\";\r\nimport PrintDocumentTotal from \"./printDocumentTotal\";\r\nimport PrintDocumentSignature from \"./printDocumentSignature\";\r\nimport PrintDocumentDiscountsList from \"./printDocumentDiscountsList\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {TRANSLATES} from \"../../../translatesProvider\";\r\nimport PrintDocumentDisclaimer from \"./printDocumentDisclaimer\";\r\nimport PrintDocumentAsCentralText from \"./printDocumentAsCentralText\";\r\n\r\n// import PropTypes from \"prop-types\";\r\n// import {FormattedMessage} from \"react-intl\";\r\n\r\nconst PrintDocument = (props) => {\r\n const {fabricatorData, userInfo, quotes, cartItems, priceWorksheetState, jobId, assignQuotePopupCustomer,\r\n employeeSelected, locale, filterGroups, activeTheme, printLogo, wizardState, sqftSlabState, cartItemsThumbnails,\r\n printState, onRender, isContractSign} = props;\r\n\r\n const styles = getPrintColors(activeTheme);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {fabricatorData.isAmericanStandard ? : null}\r\n \r\n {priceWorksheetState.discountSections.length ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n (\r\n `${pageNumber} / ${totalPages}`\r\n )} fixed />\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocument.propTypes = {\r\n quotes: PropTypes.array.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n userInfo: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n jobId: PropTypes.number,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n employeeSelected: PropTypes.object,\r\n locale: PropTypes.string.isRequired,\r\n activeTheme: PropTypes.string,\r\n printLogo: PropTypes.string,\r\n wizardState: PropTypes.object.isRequired,\r\n isContractSign: PropTypes.bool,\r\n printState: PropTypes.object,\r\n};\r\n\r\nexport default PrintDocument\r\n","import React from \"react\";\r\nimport UiIcon from \"../../ui/icons/uiIcon\";\r\n\r\nexport const showWizardStepDoneCheckMark = (wizardSelectedValue, featureGroup, cartItems, activeQuoteIndex, stepGroups) => {\r\n return stepGroups.some(stepGroup => {\r\n return (wizardSelectedValue && wizardSelectedValue.wizardGroup && (stepGroup.id === wizardSelectedValue.wizardGroup.id))\r\n || (featureGroup && cartItems.some(cartItem => {\r\n return stepGroup.id === cartItem.fromWizardGroupId\r\n && (cartItem.partId === featureGroup.partId)\r\n && (cartItem.currentQuote === activeQuoteIndex)\r\n && !cartItem.cartFeature.dbFeature.autoAddToCart\r\n }))\r\n })\r\n}\r\n\r\nconst MaterialsWizardDoneCheckMark = () => {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\nexport default MaterialsWizardDoneCheckMark\r\n","import _ from 'lodash';\r\n\r\nimport {updateManualCalculateRows} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {MANUAL_CALCULATION_ROW_TYPES} from \"../constants\";\r\nimport store from \"../../../store\";\r\nimport {DEFAULT_MANUAL_CALC_ROW} from \"../../../reducers/sqftManualCalculationReducer\";\r\nimport {getEdgeFeatures} from \"./shapeHelper\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\n\r\nexport const manualCalculateImport = (data) => {\r\n console.log(\"import manualcalc data\", data);\r\n let manualCalculationRows = prepareData(data);\r\n store.dispatch(updateManualCalculateRows(manualCalculationRows));\r\n}\r\n\r\nconst prepareData = (data) => {\r\n return {\r\n [MANUAL_CALCULATION_ROW_TYPES.countertopRows] : prepareCountertopRows(data.countertops),\r\n [MANUAL_CALCULATION_ROW_TYPES.backsplashRows] : prepareBacksplashRows(data.backsplashes),\r\n [MANUAL_CALCULATION_ROW_TYPES.edgeRows] : prepareEdgeRows(data.edges),\r\n }\r\n}\r\n\r\nconst prepareCountertopRows = (dataCountertops) => {\r\n let preparedData = [];\r\n dataCountertops.forEach((dataCountertop, index) => {\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataCountertop.id ? dataCountertop.id : index;\r\n row.length = dataCountertop.inputLength;\r\n row.width = dataCountertop.inputWidth;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nconst prepareBacksplashRows = (dataBacksplashes) => {\r\n let preparedData = [];\r\n dataBacksplashes.forEach((dataBacksplash, index) => {\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataBacksplash.id ? dataBacksplash.id : index;\r\n row.length = dataBacksplash.inputLength;\r\n row.height = dataBacksplash.inputHeight;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nconst prepareEdgeRows = (dataEdges) => {\r\n let preparedData = [];\r\n dataEdges.forEach((dataEdge, index) => {\r\n const navItems = getEdgeFeatures();\r\n const navItem = navItems.find(edge => edge.part.dbFeature.id === dataEdge.featureId);\r\n let row = _.clone(DEFAULT_MANUAL_CALC_ROW);\r\n row.id = dataEdge.id ? dataEdge.id : index;\r\n row.length = dataEdge.inputLength;\r\n row.height = dataEdge.inputHeight;\r\n row.selectedFeature = navItem.part;\r\n preparedData.push(row);\r\n })\r\n\r\n return preparedData;\r\n}\r\n\r\nexport const clearManualCalcData = () => {\r\n for (const manualCalculationRowType in MANUAL_CALCULATION_ROW_TYPES) {\r\n store.dispatch(updateManualCalculateRows({[manualCalculationRowType]: []}));\r\n }\r\n}\r\n\r\nexport const getGroupedShapesByColor = () => {\r\n const shapes = workspace.getShapes();\r\n return shapes.flatMap(shp => {\r\n if (shp.getColorSet) {\r\n const colorSet = shp.getColorSet();\r\n return colorSet ? colorSet : [];\r\n }\r\n return [];\r\n })\r\n}\r\n\r\nexport const getFeatureGlb = (feature) => {\r\n const threeDSrc = feature.dbFeature.thirdPartyAR3DUrls.map(src => {\r\n src = src.replace(\"s3.amazonaws.com/qc-lixil-3dfiles\", \"dv84u4f1bblk2.cloudfront.net\");\r\n return src\r\n })\r\n return threeDSrc.find(url => url.includes(\".glb\"));\r\n}\r\n","import store from \"./../../../store\";\r\nimport {onMeasureUnitChange} from \"./sqftMeasureUnitsHelper\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {setSqftMeasureUnit} from \"../../../actions/sqftFunctions\";\r\n\r\nexport const setMeasureUnit = (value) => {\r\n sqftConfig.measureUnit = value\r\n store.dispatch(setSqftMeasureUnit(value));\r\n onMeasureUnitChange();\r\n}\r\n","import sqftShapeManager from \"../store/sqftShapeManager\";\r\nimport workspace from \"./workspace\";\r\nimport config from \"../store/sqftConfig\";\r\nimport $ from \"jquery\";\r\nimport sqftShape from \"./shapes/sqftShape\";\r\nimport {getMidPoint} from \"../../../helpers/sqftHelper\";\r\nimport slabWorkspace from \"./slab/slabWorkspace\";\r\n\r\nconst workspaceZoom = function () {\r\n this.zoomToFeature = (sqftFeature) => {\r\n let shape = sqftShapeManager.getShapeById(sqftFeature.sqftId);\r\n if (shape && shape.part === 'line') {\r\n const line = workspace.getLineById(shape.attachedToId);\r\n this.zoomToLine(line);\r\n\r\n return;\r\n }\r\n\r\n if (!(shape instanceof(sqftShape))) {\r\n return\r\n }\r\n\r\n this.zoomToShape(shape);\r\n }\r\n\r\n this.zoomToLine = (line) => {\r\n let shape = line.getParent();\r\n let shapePos = shape.getPosition();\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n const midPoint = getMidPoint(line.from, line.to);\r\n\r\n let newWorkspacePos = {\r\n x: (shapePos.x + midPoint.x) * scale - (canvas.width - popUpWidth) / 2,\r\n y: (shapePos.y + midPoint.y) * scale - canvas.height / 2,\r\n }\r\n\r\n line.blink.setHighlighting(true);\r\n this.zoomTo(newWorkspacePos);\r\n }\r\n\r\n this.zoomToShape = (shape, isHalfScreen = false) => {\r\n let shapePos = shape.getPosition();\r\n let shapeMinMax = sqftShapeManager.getMinMax(shape.getLines());\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n let newWorkspacePos = {\r\n x: shapePos.x * scale - (canvas.width - popUpWidth) / 2 + shapeMinMax.width / 2 * scale,\r\n y: shapePos.y * scale - canvas.height / 2 + shapeMinMax.height / 2 * scale,\r\n }\r\n if (isHalfScreen) {\r\n newWorkspacePos.x = newWorkspacePos.x + canvas.width / 4;\r\n }\r\n\r\n this.zoomTo(newWorkspacePos);\r\n shape.shapeRender.blink.setHighlighting(true);\r\n }\r\n\r\n this.zoomToSlabShape = (shape, isHalfScreen = false) => {\r\n let shapePos = shape.getPosition();\r\n let workspacePos = workspace.getPosition();\r\n let shapeMinMax = sqftShapeManager.getMinMax(shape.getLines());\r\n const scale = config.scale;\r\n const canvas = workspace.getCanvas();\r\n const sqftPoup = $(\".sqft-popupv2\");\r\n const popUpWidth = sqftPoup[0] ? sqftPoup[0].offsetWidth : 0;\r\n\r\n let newWorkspacePos = {\r\n x: shapePos.x * scale - (canvas.width - popUpWidth) / 2 + shapeMinMax.width / 2 * scale - workspacePos.x,\r\n y: shapePos.y * scale - canvas.height / 2 + shapeMinMax.height / 2 * scale - workspacePos.y,\r\n }\r\n if (isHalfScreen) {\r\n newWorkspacePos.x = newWorkspacePos.x + canvas.width / 4;\r\n }\r\n\r\n this.zoomToInSlab(newWorkspacePos);\r\n }\r\n\r\n this.zoomTo = (newWorkspacePos) => {\r\n let workspacePos = workspace.getPosition();\r\n let isXIncrementUp = newWorkspacePos.x >= workspacePos.x;\r\n let isYIncrementUp = newWorkspacePos.y >= workspacePos.y;\r\n\r\n let updateWorkspacePos = () => {\r\n if (Math.ceil(workspacePos.x) === Math.ceil(newWorkspacePos.x)\r\n && Math.ceil( workspacePos.y) === Math.ceil(newWorkspacePos.y)\r\n ) {\r\n clearInterval(refreshIntervalId);\r\n }\r\n\r\n let incrementX = Math.abs((Math.abs(newWorkspacePos.x) + Math.abs(workspacePos.x)) / newWorkspacePos.x * config.zoomSpeed);\r\n let incrementY = Math.abs((Math.abs(newWorkspacePos.y) + Math.abs(workspacePos.y)) / newWorkspacePos.y * config.zoomSpeed);\r\n\r\n workspacePos = {\r\n x: isXIncrementUp\r\n ? workspacePos.x >= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x + incrementX\r\n : workspacePos.x <= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x - incrementX,\r\n y: isYIncrementUp\r\n ? workspacePos.y >= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y + incrementY\r\n : workspacePos.y <= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y - incrementY,\r\n }\r\n\r\n workspace.setPosition(workspacePos);\r\n };\r\n let refreshIntervalId = setInterval(updateWorkspacePos, 1);\r\n }\r\n\r\n this.zoomToInSlab = (newWorkspacePos) => {\r\n let workspacePos = slabWorkspace.getPos();\r\n let isXIncrementUp = newWorkspacePos.x >= workspacePos.x;\r\n let isYIncrementUp = newWorkspacePos.y >= workspacePos.y;\r\n\r\n let updateWorkspacePos = () => {\r\n if (Math.ceil(workspacePos.x) === Math.ceil(newWorkspacePos.x)\r\n && Math.ceil( workspacePos.y) === Math.ceil(newWorkspacePos.y)\r\n ) {\r\n clearInterval(refreshIntervalId);\r\n }\r\n\r\n let incrementX = Math.abs((Math.abs(newWorkspacePos.x) + Math.abs(workspacePos.x)) / newWorkspacePos.x * config.zoomSpeed);\r\n let incrementY = Math.abs((Math.abs(newWorkspacePos.y) + Math.abs(workspacePos.y)) / newWorkspacePos.y * config.zoomSpeed);\r\n\r\n workspacePos = {\r\n x: isXIncrementUp\r\n ? workspacePos.x >= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x + incrementX\r\n : workspacePos.x <= newWorkspacePos.x ? newWorkspacePos.x : workspacePos.x - incrementX,\r\n y: isYIncrementUp\r\n ? workspacePos.y >= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y + incrementY\r\n : workspacePos.y <= newWorkspacePos.y ? newWorkspacePos.y : workspacePos.y - incrementY,\r\n }\r\n\r\n slabWorkspace.setPos(workspacePos);\r\n };\r\n let refreshIntervalId = setInterval(updateWorkspacePos, 1);\r\n }\r\n};\r\n\r\nexport default new workspaceZoom\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport Config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport Cursor from \"./cursor\";\r\nimport MiteredOverlay from \"../shapes/overlays/mitered\";\r\nimport {\r\n inchesToMm,\r\n measureDistanceToInches, mm2ToM2,\r\n mmToInches, sqInchesToSqFoot,\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport store from \"../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {\r\n EDGE_LABELS, MITERED_OVERLAY_TYPE,\r\n RESOURCE_ATTACHED_TO_TYPE, RESOURCE_TYPE,\r\n SIDEBAR_BUTTONS_MENU,\r\n SIDEBAR_HIDDEN_BUTTONS,\r\n} from \"../../../../constants\";\r\nimport {setSQFTMenuOpened, setSQFTMenuOpenedLock} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {getEdgeFeatures} from \"../../../../helpers/shapeHelper\";\r\nimport {addResource, changeResource, deleteResource} from \"../../../../../../actions/sqftResourceFunctions\";\r\nimport {getUnderlaymentFeature} from \"../../../../helpers/sqftHelperUi\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\n\r\nexport default class UnderlaymentController {\r\n cursor;\r\n design = {\r\n imgSrc: iconPlusBlue\r\n };\r\n miteredSections = [];\r\n\r\n createCursor = () => {\r\n this.cursor = new Cursor();\r\n this.cursor.setCursorImage(this.design.imgSrc);\r\n eventManager.setCursor('mitered-select', this, true);\r\n };\r\n\r\n registerEvents = () => {\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton !== SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment) {\r\n return\r\n }\r\n\r\n let seg = hoverShape.getHoverSegment();\r\n if (seg && seg.isWithUnderlayment() && reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n seg.deleteMitered();\r\n } else if(seg && seg.isWithUnderlayment()) {\r\n void 0;\r\n } else if (seg && !seg.isWithUnderlayment() && !seg.isWithBumpout() && this.cursor.cursorImage) {\r\n attachResource(seg, null, RESOURCE_ATTACHED_TO_TYPE.underlayment, null, null,'', 0, null, null, false);\r\n } else {\r\n // Menu.openMenu();\r\n // deregisterEvents();\r\n // elements.designDefault.click();\r\n }\r\n }\r\n\r\n //todo\r\n this.cursor.checkForRestoreCursor();\r\n };\r\n\r\n addSection = (miteredSection) => {\r\n const reduxState = store.getState();\r\n store.dispatch(addResource(RESOURCE_TYPE.underlaymentSections, miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment));\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n updateSection = (miteredSection) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.underlaymentSections, miteredSection));\r\n store.dispatch(setSQFTMenuOpened(SIDEBAR_HIDDEN_BUTTONS.toolUnderlayment));\r\n store.dispatch(setSQFTMenuOpenedLock(true));\r\n\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n\r\n deleteSection = (miteredOverlay) => {\r\n store.dispatch(deleteResource(RESOURCE_TYPE.underlaymentSections, miteredOverlay.id));\r\n };\r\n\r\n createUnderlaymentOverlay = (line) => {\r\n const reduxState = store.getState();\r\n const underlaymentSections = reduxState.sqftResourceState.underlaymentSections;\r\n const underlaymentOverlay = new MiteredOverlay(line, underlaymentSections.length + 1, MITERED_OVERLAY_TYPE.underlayment);\r\n const feature = getUnderlaymentFeature();\r\n if (feature) {\r\n underlaymentOverlay.setFeatureId(feature.part.dbFeature.id)\r\n }\r\n\r\n return underlaymentOverlay\r\n };\r\n\r\n destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n //this.hide();\r\n };\r\n\r\n deregisterEvents() {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n this.cursor ? this.cursor.deregisterEvents() : null;\r\n Config.highlight.lines = false;\r\n }\r\n\r\n static getTotalArea = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n miteredSectionsArea += miteredSections[i] ? miteredSections[i].getMiteredToolTotalArea() : null;\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n onMeasureUnitChange = () => {\r\n let miteredSections = workspace.getMiteredSections();\r\n let miteredSectionsArea = 0;\r\n for (let i = 0; i < miteredSections.length; i++) {\r\n let segments = miteredSections[i].getSegments();\r\n\r\n segments.map((segment) => {\r\n segment.height = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.height)\r\n : mmToInches(segment.height);\r\n if (segment.thickness) {\r\n segment.thickness.value = Config.measureUnit === \"Metric\"\r\n ? inchesToMm(segment.thickness.value)\r\n : mmToInches(segment.thickness.value)\r\n }\r\n });\r\n\r\n miteredSections[i].heightNumberText.value = segments[0].height\r\n }\r\n\r\n return miteredSectionsArea;\r\n };\r\n\r\n getTransformedMeasureUnit = (value) => {\r\n return Config.measureUnit === \"Metric\"\r\n ? measureDistanceToInches(value).millimeters // ? distanceToMillimeters(inchesToMm(segment.length.value))\r\n : value;\r\n };\r\n\r\n getEdgesLength = () => {\r\n let additionalLength = 0;\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n if (line.from.getMiteredFeatureId()) {\r\n additionalLength += this.getEdgeLengthValue();\r\n }\r\n }\r\n\r\n return additionalLength\r\n }\r\n\r\n getEdgeLengthValue = () => {\r\n return Config.measureUnit === \"Imperial\"\r\n ? (2 * 33) / 40\r\n : (2 * 900) / 1000;\r\n }\r\n\r\n getExportedMiteredEdges = () => {\r\n let addedEdges = [];\r\n const lines = workspace.getLines();\r\n for (const line of lines) {\r\n const miteredFeatureId = line.from.getMiteredFeatureId();\r\n if (miteredFeatureId) {\r\n const edgeLengthValue = this.getEdgeLengthValue();\r\n const navItems = getEdgeFeatures();\r\n let edgeFeature = navItems.find(edge => edge.part.dbFeature.id === miteredFeatureId);\r\n\r\n addedEdges.push({\r\n partId: EDGE_LABELS.edge,\r\n type: EDGE_LABELS.edge,\r\n name: workspace.intl.formatMessage({id: edgeFeature.part.dbFeature.sharedFeatureName}),\r\n featureId: miteredFeatureId,\r\n segments: 1,\r\n length: edgeLengthValue,\r\n area: edgeLengthValue\r\n });\r\n }\r\n }\r\n\r\n return addedEdges\r\n }\r\n\r\n exportData = () => {\r\n const reduxState = store.getState();\r\n const underlaymentSections = reduxState.sqftResourceState.underlaymentSections;\r\n\r\n //return {quantity: underlaymentSections.reduce((acc, current) => acc + current.getMiteredToolTotalArea(), 0)};\r\n return {sections: underlaymentSections.map((section) => ({\r\n id: section.id,\r\n qtCatName: section.qtCatName,\r\n featureId: section.featureId,\r\n quantity: sqftConfig.measureUnit === \"Imperial\"\r\n ? Math.ceil10(sqInchesToSqFoot(section.getMiteredToolTotalArea()), -2)\r\n : mm2ToM2(section.getMiteredToolTotalArea())\r\n }))\r\n };\r\n }\r\n}\r\n","import {capitalizeFirstLetters} from \"../../misc/helpers\";\r\nimport {getSelectedFiltersLength} from \"../../misc/filtersFunctions\";\r\n\r\nconst changeMaterialToColorArray = [\"vanity_faucet\", \"paper_holder\", \"robe_hook\", \"towel_bar\", \"towel_ring\",\r\n \"bathtub_body\", \"vanity_console\", \"replacement_tub\", \"bathtub_fixture\", \"vanity_ptrap\", \"vanity_legs\", \"vanity_middle\",\r\n \"toilet\", \"vanity_ws_towel_bar\", \"vanity_washstand\", \"vanity_cabinet\"];\r\n\r\n/**\r\n * updated Names per Lixil requirements\r\n * @param filterGroup {filterGroupInterface}\r\n * @param partId {string}\r\n * @returns {string|null}\r\n */\r\nexport const getHardCodedFilterGroupName = (filterGroup, partId = \"\") => {\r\n switch (filterGroup.name) {\r\n case \"Material\": {\r\n if (changeMaterialToColorArray.includes(partId)) {\r\n return \"Color\"\r\n }\r\n break;\r\n }\r\n case \"GPF_Max\": {\r\n return \"GPF\"\r\n }\r\n case \"LixilProductSubCategory\": {\r\n switch (partId) {\r\n case \"vanity_faucet\":\r\n case \"bathtub_fixture\":\r\n return \"Faucet Type\"\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n return (filterGroup.name || \"\").replace(/_/gi, \" \")\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterGroup {filterGroupInterface}\r\n * @param partId {string}\r\n * @returns {boolean}\r\n */\r\nexport const weShouldHideFilterGroup = (filterGroup, partId) => {\r\n switch ((filterGroup.name || \"\").trim()) {\r\n case \"Product_Width\":\r\n case \"LixilProductCategory\":\r\n case \"LixilProductSuperCategory\":\r\n case \"Bath_Accessory_Mount_Type\":\r\n case \"Designer Recommended\":\r\n case \"EA_Each_Weight\":\r\n case \"Small_Parcel_Postable_SAP_YN\":\r\n case \"Volume_SAP\":\r\n case \"Bath_Accessory_No_of_Hooks\":\r\n case \"Bath_Accessory_No_of_Bars\":\r\n case \"Fitting_Mount_Type\":\r\n case \"Fitting_Handle_Type\":\r\n case \"ADA_YN\":\r\n case \"Fitting_Touchless_Touch_On\":\r\n case \"Product_Height\":\r\n case \"Faucet_Type_from_Classification\":\r\n case \"Product_Length\":\r\n case \"Tub_Product_Type\":\r\n case \"Bath_Therapy_Type\":\r\n case \"Drain_Location\":\r\n case \"Hand_Shower_Included_YN\":\r\n case \"Rough_In_Size\":\r\n case \"Toilet_Type_from_Classification\":\r\n case \"Fitting_No_of_Holes_Required\":\r\n return true\r\n case \"Color\": {\r\n return changeMaterialToColorArray.includes(partId);\r\n }\r\n case \"Brand\": {\r\n switch (partId) {\r\n case \"vanity_console\":\r\n case \"vanity_ptrap\":\r\n case \"vanity_cabinet\":\r\n case \"vanity_legs\":\r\n case \"vanity_middle\":\r\n case \"vanity_ws_towel_bar\":\r\n case \"vanity_washstand\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"Collection\": {\r\n switch (partId) {\r\n case \"vanity_ptrap\":\r\n case \"vanity_legs\":\r\n case \"vanity_middle\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"Size\":\r\n case \"Manufacturer\": {\r\n switch (partId) {\r\n case \"vanity_cabinet\":\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n case \"LixilProductSubCategory\": {\r\n switch (partId) {\r\n case \"vanity_faucet\":\r\n case \"bathtub_fixture\":\r\n return false\r\n default:\r\n return true\r\n }\r\n }\r\n default:\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterValue {filterValueInterface}\r\n * @returns {boolean}\r\n */\r\nexport const weShouldHideFilterValue = (filterValue) => {\r\n // console.log(\"filterValue\", filterValue);\r\n return (filterValue.id === 10446 && filterValue.value === \"Town Square® S\")\r\n || (filterValue.id === 10415 && filterValue.value === \"Cadet®\")\r\n || (filterValue.id === 10445 && filterValue.value === \"Princeton™\")\r\n || (filterValue.id === 10448 && filterValue.value === \"Colony®\")\r\n || (filterValue.id === 10416 && filterValue.value === \"Eurocube®\")\r\n || (filterValue.id === 10410 && filterValue.value === \"Concetto™\")\r\n || (filterValue.id === 9950 && filterValue.value === \"LINEARE™\")\r\n}\r\n\r\n/**\r\n * filters hardcode LX-827 - LX-839 tasks in Jira\r\n * @param filterGroups {[filterGroupInterface]}\r\n * @param partId {string}\r\n * @param selectedFilters {array}\r\n * @returns {[filterGroupInterface]}\r\n */\r\nexport const getHardCodedFilterGroups = (filterGroups, partId, selectedFilters) => {\r\n return filterGroups\r\n .filter(filterGroup => !weShouldHideFilterGroup(filterGroup, partId))\r\n .map(filterGroup => {\r\n const selectedFiltersLength = getSelectedFiltersLength(filterGroup, selectedFilters);\r\n const filterGroupName = getHardCodedFilterGroupName(filterGroup, partId);\r\n filterGroup.values = filterGroup.values.sort((a, b) => a.id - b.id);\r\n return Object.assign({}, filterGroup, {filterGroupName, selectedFiltersLength})\r\n })\r\n .sort((a, b) => a.id - b.id);\r\n}\r\n\r\n\r\n/**\r\n * updated Names per Lixil requirements\r\n * @param filterValue {filterValueInterface}\r\n * @returns {string}\r\n */\r\nexport const getFixedFilterValueName = (filterValue) => {\r\n switch (filterValue.value) {\r\n // case \"StarLight Chrome\":\r\n // case \"Starlight Chrome\":\r\n // case \"Starlight chrome\":\r\n // return window.location.href.includes(\"grohe\") ? \"Starlight Chrome\" : \"Polished Chrome\"\r\n case \"Grohe\":\r\n case \"grohe\":\r\n return \"GROHE\"\r\n case \"Centerset Bathroom Faucets\":\r\n return \"Centerset\"\r\n case \"Single Hole Bathroom Faucets\":\r\n return \"Single Hole\"\r\n case \"Widespread Bathroom Faucets\":\r\n return \"Widespread\"\r\n case \"Vessel Bathroom Faucets\":\r\n return \"Vessel\"\r\n default:\r\n return capitalizeFirstLetters(filterValue.displayText || filterValue.value || \"\")\r\n .replace(/_/gi, \" \")\r\n }\r\n}\r\n","import {SHAPE_PART_ID, SQFT_APPLIANCES} from \"../constants\";\r\nimport store from \"../../../store\";\r\nimport workspace from \"../components/canvas/core/workspace\";\r\nimport sqftShape from \"../components/canvas/core/shapes/sqftShape\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport MovableImage from \"../components/canvas/core/shapes/movableImage\";\r\nimport {\r\n containsHEBeforeExtension,\r\n findGLBLink,\r\n get3dURLsForFeature, getCategoryFromMetadata, getThirdPartyAR3DMetaData,\r\n getUrlMatchingByColor, isHoodShape,\r\n} from \"./sqft3dArHelper\";\r\n//import {SHAPE_SQUARE_LAYOUTS} from \"../components/canvas/core/cabinet/cabinetShapes\";\r\nimport workspaceControllers from \"../components/canvas/store/workspaceControllers\";\r\nimport sqftShapeManager from \"../components/canvas/store/sqftShapeManager\";\r\nimport {featureThumbnailUrl} from \"../../../misc/helpers\";\r\n\r\nexport const DEFAULT_COUNTERTOP_HEIGHT = 34;\r\nexport const DEFAULT_BACKSPLASH_HEIGHT = 18;\r\n\r\nexport class CabinetsSet {\r\n\r\n static prepareCabinetsSet(displayDoorsOnly = false) {\r\n const cabinetPositions = CabinetsSet.prepareCabinetsPositions();\r\n const countertopPositions = CountertopPositions.prepareCountertopPositions();\r\n const wallPositions = WallPositions.prepareWallPositions();\r\n const cabinetSet = {\r\n \"doors_only\": displayDoorsOnly,\r\n \"positions\": [...cabinetPositions, ...countertopPositions, ...wallPositions]\r\n }\r\n\r\n // add countertop if bottom_cabinets exist\r\n // if (cabinetSet.positions.some(position => position.partId === SHAPE_PART_ID.lower_cabinet_boxes)) {\r\n // let texture = \"https://static6.depositphotos.com/1031174/647/i/450/depositphotos_6477080-stock-photo-grungy-background.jpg\";\r\n // const state = store.getState();\r\n // if (state.sqftState.selectedCountertop) {\r\n // const layout = getCurrentLayout();\r\n // const countertopFeature = layout.getFeatureById(state.sqftState.selectedCountertop, true);\r\n // if (countertopFeature && countertopFeature.dbFeature.thirdPartyAR3DUrls) {\r\n // const URLByFeatureName = get3dURLsForFeature(countertopFeature);\r\n // texture = URLByFeatureName ? URLByFeatureName : countertopFeature.dbFeature.thirdPartyAR3DUrls[0]\r\n // }\r\n // }\r\n //\r\n // cabinetSet.countertop = {\r\n // \"main\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Main Body.glb\",\r\n // \"edge\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Edge.glb\",\r\n // \"corner\": \"https://quotecountertops.com/video/sqft/cabinets/Quarter Round_Corner.glb\",\r\n // \"texture\": texture\r\n // }\r\n // }\r\n\r\n return cabinetSet\r\n }\r\n\r\n static prepareCabinetsPositions() {\r\n const layout = getCurrentLayout();\r\n const shapes = workspace.getShapes();\r\n\r\n return shapes.map((shape) => {\r\n if (shape instanceof sqftShape) {\r\n let absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n let shapePosition = absolutePos ? absolutePos : shape.getPosition();\r\n\r\n const relatedParentFeature = layout.getFeatureById(shape.relatedParentFeatureId, true);\r\n if (relatedParentFeature) {\r\n let shapeDbFeature = relatedParentFeature.getFeatureRelatedFeatures().find(relatedFeature => relatedFeature.id === shape.featureId);\r\n if (!shapeDbFeature) {\r\n const shapeFeature = layout.getFeatureById(shape.featureId, true);\r\n if (shapeFeature) {\r\n shapeDbFeature = shapeFeature.dbFeature\r\n }\r\n }\r\n return CabinetsSet.prepareRegularCabinetSet(shape, shapePosition, shapeDbFeature, relatedParentFeature);\r\n } else {\r\n console.log(\"3d model cannot be prepared its parent not found shape.relatedParentFeatureId:\", shape.relatedParentFeatureId);\r\n }\r\n } if (shape instanceof MovableImage) {\r\n let absolutePos = shape.shapeAbsolute.getAbsolutePosition();\r\n const shapePosition = absolutePos ? absolutePos : shape.getPosition();\r\n const shapeFeature = layout.getFeatureById(shape.featureId);\r\n\r\n if (shapeFeature) {\r\n return CabinetsSet.prepareImageCabinetSet(shape, shapePosition, shapeFeature);\r\n }\r\n }\r\n return null\r\n }).filter(cabinetSet => {\r\n return cabinetSet !== null\r\n })\r\n }\r\n\r\n /**\r\n * Adjust model position based on shape position, dimensions, and rotation.\r\n * @returns {Object} Updated model position.\r\n * @param shapePosition\r\n * @param shapeWidth\r\n * @param shapeDepth\r\n * @param rotatedDegrees\r\n */\r\n static adjustApplianceModelPosition(shapePosition, shapeWidth, shapeDepth, rotatedDegrees) {\r\n // Convert degrees to radians and account for the model's initial -90 degree rotation offset\r\n const radians = (Math.PI / 180) * (rotatedDegrees - 90);\r\n\r\n // Calculate the center of the shape, used as the base point for rotation\r\n const centerX = shapePosition.x + shapeWidth / 2;\r\n const centerZ = shapePosition.y + shapeDepth / 2;\r\n\r\n // Calculate the offsets for X and Z axes based on the current rotation angle\r\n const offsetX = (shapeWidth / 2) * Math.cos(radians);\r\n const offsetZ = (shapeDepth / 2) * Math.sin(radians);\r\n\r\n // Apply Z-axis correction dynamically based on the sine of the rotation angle\r\n const zCorrection = shapeDepth * Math.sin(radians);\r\n\r\n // Return the updated position of the model\r\n return {\r\n x: centerX - offsetX, // Corrected X position after rotation\r\n y: shapePosition.y, // Y position remains unchanged (fixed height)\r\n z: centerZ - offsetZ + zCorrection // Corrected Z position with dynamic adjustment\r\n };\r\n }\r\n\r\n /**\r\n * This function corrects shape position because shape rotation in sqft is made around shape center\r\n * while baking models script rotates shapes around top left corner, so we need to move shape a bit.\r\n * @param rotatedDegrees\r\n * @param position\r\n * @param width\r\n * @param height\r\n * @return {{x: *, y: *}}\r\n */\r\n static getShapeCorrectedPos = (rotatedDegrees, position, width, height) => {\r\n // get radians\r\n let thetaRad = -(rotatedDegrees * Math.PI / 180);\r\n\r\n // left top corner pos (shape pos)\r\n let xInit = position.x;\r\n let yInit = position.y;\r\n\r\n // shape center after rotation\r\n let xCenterBAfterRotation = xInit + width / 2 * Math.cos(thetaRad) - height / 2 * Math.sin(thetaRad);\r\n let yCenterBAfterRotation = yInit + width / 2 * Math.sin(thetaRad) + height / 2 * Math.cos(thetaRad);\r\n\r\n // initial shape center\r\n let xCenterBInitial = xInit + width / 2;\r\n let yCenterBInitial = yInit + height / 2;\r\n\r\n // shape center - shape center after rotation\r\n let deltaX = xCenterBInitial - xCenterBAfterRotation;\r\n let deltaY = yCenterBInitial - yCenterBAfterRotation;\r\n\r\n return {\r\n x: rotatedDegrees > 0\r\n ? position.x + deltaX\r\n : position.x,\r\n y: rotatedDegrees > 0\r\n ? position.y + deltaY\r\n : position.y\r\n }\r\n }\r\n\r\n static prepareRegularCabinetSet = (shape, shapePosition, shapeDbFeature, relatedParentFeature) => {\r\n if (shapeDbFeature) {\r\n //console.log(\"shapeDbFeatureFeature.thirdPartyAR3DUrls\", shapeDbFeature.thirdPartyAR3DUrls);\r\n }\r\n\r\n if (!shapeDbFeature || !shapeDbFeature.thirdPartyAR3DUrls) {\r\n return null\r\n }\r\n\r\n const shapeWidth = shape.shapeCabinet ? shape.shapeCabinet.getShapeWidth() : shape.getWidth();\r\n //if it is cube then we can set target width and resize it\r\n const targetWidth = shape.getLines().length === 4 ? shape.getSize().width : shape.getWidth();\r\n const shapeHeight = shape.shapeCabinet ? shape.shapeCabinet.getShapeHeight() : shape.getHeight();\r\n const shapeDepth = shape.shapeCabinet ? shape.shapeCabinet.getShapeDepth() : shape.getDepth();\r\n const targetDepth = shape.getLines().length === 4 ? shape.getSize().height : shape.getHeight();\r\n\r\n //We are sending top left corner position.\r\n const originPointOnWorkspace = shape.getOriginPointOnWorkspace();\r\n const url = getUrlMatchingByColor(shapeDbFeature, relatedParentFeature).replace(/\\s+\\.glb$/, '.glb'); //todo remove\r\n const material_url = getUrlMatchingByColor(relatedParentFeature.dbFeature, relatedParentFeature); //todo remove\r\n const posY = CabinetsHelper.getCabinetPosY(shape, shapeDbFeature, url, shapeHeight);\r\n const shapeLayout = shape.shapeParams.shapeLayout;\r\n const threeDPos = { x: originPointOnWorkspace.x, y: posY, z: originPointOnWorkspace.y };\r\n const handles = CabinetsHelper.getHandles(shape, threeDPos, shape.rotatedDegrees, targetWidth, targetDepth, shapeHeight);\r\n\r\n // log parent feature material\r\n // if (!material_url) {\r\n // console.log(\"material wasn't found for the feature\", shapeDbFeature.id);\r\n // console.log(\"relatedParentFeature.dbFeature.id\", relatedParentFeature.dbFeature.id);\r\n // console.log(\"relatedParentFeature.dbFeature.thirdPartyAR3DUrls\", relatedParentFeature.dbFeature.thirdPartyAR3DUrls);\r\n // }\r\n\r\n return {\r\n \"partId\": shape.parentPartId ? shape.parentPartId : shape.partId,\r\n \"is_filler\": shape.shapeParams.isSpacer,\r\n \"x\": threeDPos.x,\r\n \"y\": threeDPos.y, // height between floor and roof. 0 is floor\r\n \"z\": threeDPos.z,\r\n \"rotation\": shape.rotatedDegrees,\r\n \"url\": url,\r\n \"material_url\": material_url,\r\n //\"url\": \"https://master_new_1512.quoteremodel.com/content/Views/visualizers/images/sqft-icons/3d/cabinet.glb\",\r\n\r\n \"target_width\": targetWidth,\r\n \"target_depth\": targetDepth,\r\n \"target_height\": shapeHeight,\r\n \"width\": shapeWidth,\r\n \"height\": shapeHeight, //in sqft wee cabinets from top so we can see this value\r\n \"depth\": shapeDepth,\r\n \"contour_points\": shape.getPointsCoords(),\r\n \"original_points\": shape.getOriginalPointsCoords(),\r\n \"featureId\": shapeDbFeature.id,\r\n \"parentFeatureId\": relatedParentFeature.dbFeature.id,\r\n \"shapeLayout\": shapeLayout,\r\n \"handles\": handles,\r\n // \"url\": shapeDbFeatureFeature && shapeDbFeatureFeature.thirdPartyAR3DUrls\r\n // ? shapeDbFeatureFeature.thirdPartyAR3DUrls[0]\r\n // : \"https://qc-3dfiles.s3.amazonaws.com/ar-composer/W3030.glb\" //localGlb\r\n //: \"https://dv84u4f1bblk2.cloudfront.net/6cp14aef9e7rfg6gds5orh1cej7ctlvq.glb\"\r\n }\r\n }\r\n\r\n static prepareImageCabinetSet = (shape, shapePosition, shapeFeature) => {\r\n if (!shapeFeature || !shapeFeature.dbFeature || !shapeFeature.dbFeature.thirdPartyAR3DUrls) {\r\n return null\r\n }\r\n //console.log(\"shapeDbFeatureFeature.thirdPartyAR3DUrls\", shapeFeature.dbFeature.thirdPartyAR3DUrls);\r\n\r\n const shapeWidth = +shape.getWidth();\r\n const shapeHeight = +shape.getThickness();\r\n const shapeDepth = +shape.getHeight();\r\n const applianceRotatedDegrees = shape.rotatedDegrees - 90;\r\n\r\n let appliancePosition = CabinetsSet.adjustApplianceModelPosition(shapePosition, shapeWidth, shapeDepth, shape.rotatedDegrees);\r\n const url = findGLBLink(shapeFeature.dbFeature.thirdPartyAR3DUrls);\r\n\r\n //rise hood to the level of top cabinets\r\n const yPos = shapeFeature.partId === SQFT_APPLIANCES.hood ? DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT : 0;\r\n\r\n // hardcode to create countertop over the dishwasher\r\n const partId = shapeFeature.partId === SHAPE_PART_ID.dishwasher ? SHAPE_PART_ID.lower_cabinet_boxes: shapeFeature.partId;\r\n // we need to hide the hood behind the top cabinet\r\n //const zPos = shapeFeature.partId === SHAPE_PART_ID.hood ? appliancePosition.y - 0.5 : appliancePosition.y;\r\n\r\n return {\r\n \"partId\": partId,\r\n \"x\": appliancePosition.x,\r\n \"y\": yPos, //todo (shape bottom cabinet height + distance between bottom and top cabinets)\r\n \"z\": appliancePosition.z,\r\n \"rotation\": applianceRotatedDegrees,\r\n \"url\": url,\r\n \"width\": shapeWidth,\r\n \"height\": shapeHeight, //in sqft wee cabinets from top so we can see this value\r\n \"depth\": shapeDepth,\r\n }\r\n }\r\n}\r\n\r\nexport class CountertopPositions {\r\n\r\n static prepareCountertopPositions() {\r\n const countertopPositions = [];\r\n const partIdsCoveredByCountertop = [SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.dishwasher];\r\n\r\n /**\r\n * This function will search and return texture in thirdPartyAR3DUrls\r\n * and if it is not found will return large thumbnail\r\n * @return {string}\r\n */\r\n const getCountertopTexture = () => {\r\n let textureUrl = \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\";\r\n const state = store.getState();\r\n if (state.sqftState.selectedCountertop) {\r\n const layout = getCurrentLayout();\r\n const countertopFeature = layout.getFeatureById(state.sqftState.selectedCountertop, true);\r\n if (countertopFeature) {\r\n if (countertopFeature.dbFeature.thirdPartyAR3DUrls) {\r\n const URLByFeatureName = get3dURLsForFeature(countertopFeature);\r\n textureUrl = URLByFeatureName ? URLByFeatureName : countertopFeature.dbFeature.thirdPartyAR3DUrls[0];\r\n } else {\r\n textureUrl = featureThumbnailUrl(countertopFeature);\r\n }\r\n }\r\n }\r\n return textureUrl;\r\n };\r\n\r\n const textureUrl = getCountertopTexture();\r\n const snappedShapeGroups = workspaceControllers.snappedShapeGroups.getResources();\r\n\r\n // Function to group shapes by partId, height, and handle gaps\r\n const groupShapes = (shapes) => {\r\n let currentGroup = [];\r\n let lastHeight = null;\r\n\r\n for (const shape of shapes) {\r\n const shapeHeight = shape.shapeCabinet && shape.shapeCabinet.getShapeHeight\r\n ? shape.shapeCabinet.getShapeHeight()\r\n : DEFAULT_COUNTERTOP_HEIGHT;\r\n const isDishwasher = shape.subType === SHAPE_PART_ID.dishwasher;\r\n const isValidShape = partIdsCoveredByCountertop.includes(shape.partId) ||\r\n partIdsCoveredByCountertop.includes(shape.parentPartId) ||\r\n partIdsCoveredByCountertop.includes(shape.subType)\r\n\r\n if (!isValidShape) {\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n currentGroup = [];\r\n }\r\n lastHeight = null;\r\n continue;\r\n }\r\n\r\n if (shapeHeight !== lastHeight && !isDishwasher) {\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n currentGroup = [];\r\n }\r\n }\r\n\r\n lastHeight = shapeHeight;\r\n currentGroup.push(shape);\r\n }\r\n\r\n if (currentGroup.length > 0) {\r\n CountertopPositions.prepareCountertopForGroup(currentGroup, textureUrl, countertopPositions, lastHeight);\r\n }\r\n };\r\n\r\n // Prepare countertops for the snapped lower_cabinet_boxes\r\n for (const snappedShapeGroup of snappedShapeGroups) {\r\n let shapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n\r\n //shapes = shapes.filter(shp => shp.partId !== SHAPE_PART_ID.upper_cabinet_boxes);\r\n // shapes = shapes.filter(shp =>\r\n // partIdsCoveredByCountertop.includes(shp.partId)\r\n // || partIdsCoveredByCountertop.includes(shp.parentPartId)\r\n // || partIdsCoveredByCountertop.includes(shp.subType)\r\n // );\r\n\r\n shapes.sort((a, b) => {\r\n const posA = a.getPosition();\r\n const posB = b.getPosition();\r\n const tolerance = 15; // x tolerance for defining \"one line\"\r\n\r\n if (Math.abs(posA.x - posB.x) <= tolerance) {\r\n return posA.y - posB.y;\r\n }\r\n\r\n return posA.x - posB.x;\r\n });\r\n\r\n if (shapes.length > 0) {\r\n groupShapes(shapes);\r\n }\r\n }\r\n\r\n // Prepare countertops for the single cabinets\r\n const shapes = workspace.getShapes();\r\n const countertopCabinets = shapes.filter(shp =>\r\n partIdsCoveredByCountertop.includes(shp.partId)\r\n || partIdsCoveredByCountertop.includes(shp.parentPartId)\r\n || partIdsCoveredByCountertop.includes(shp.subType)\r\n );\r\n\r\n for (const countertopCabinet of countertopCabinets) {\r\n if (countertopCabinet.shapeAbsolute.getSnappedShapeGroup() === null) {\r\n const countertopCabinetHeight = countertopCabinet.shapeCabinet && countertopCabinet.shapeCabinet.getShapeHeight\r\n ? countertopCabinet.shapeCabinet.getShapeHeight()\r\n : DEFAULT_COUNTERTOP_HEIGHT;\r\n\r\n CountertopPositions.prepareCountertopForGroup(\r\n [countertopCabinet],\r\n textureUrl,\r\n countertopPositions,\r\n countertopCabinetHeight\r\n );\r\n }\r\n }\r\n\r\n return countertopPositions;\r\n }\r\n\r\n static prepareCountertopForGroup = (snappedShapes, textureUrl, countertopPositions, shapeHeight) => {\r\n const measurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(snappedShapes);\r\n const contourPoints = sqftShapeManager.getShapesContourPointsOnWorkspace(snappedShapes, true);\r\n const overhang = sqftShapeManager.getShapesOverhangOnWorkspace(contourPoints, snappedShapes);\r\n\r\n if (measurementPoints.length > 0) {\r\n const width = measurementPoints[1].x - measurementPoints[0].x;\r\n const height = measurementPoints[2].y - measurementPoints[1].y;\r\n countertopPositions.push({\r\n 'partId': 'countertop',\r\n 'x': contourPoints[0].x,\r\n 'y': shapeHeight, // Using the shapeHeight parameter instead of hardcoded value\r\n 'z': contourPoints[0].y,\r\n 'width': width,\r\n 'height': height,\r\n 'edge_url': 'https://quotecountertops.com/video/sqft/countertop_edges/Eased Countertop.glb',\r\n 'texture_url': textureUrl,\r\n 'contour_points': contourPoints,\r\n 'overhang': overhang\r\n });\r\n } else {\r\n console.error(\"contourPoints is empty\");\r\n }\r\n }\r\n}\r\n\r\nexport class WallPositions {\r\n static prepareWallPositions() {\r\n const walls = workspaceControllers.walls.getResources();\r\n return walls.map(wall => {\r\n return {\r\n \"partId\": \"wall\",\r\n \"texture_url\": \"https://qc-3dfiles.s3.amazonaws.com/ar-textures/Absolute White - MSI - Marble - color - 1 - 0.16 - 0.33.png\",\r\n \"height\": 100.0,\r\n \"contour_points\": wall.getPoints().map(point => point.getPosition())\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport class CabinetsHelper {\r\n static getHighestCabinetValue(partId = SHAPE_PART_ID.upper_cabinet_boxes) {\r\n const shapes = workspace.getShapes();\r\n if (shapes.length === 0) {\r\n return 0;\r\n }\r\n\r\n return shapes.reduce((acc, current) => {\r\n let currentShapeHeight = 0;\r\n\r\n if (current.partId === partId) {\r\n if (current instanceof sqftShape) {\r\n currentShapeHeight = current.shapeCabinet.getShapeHeight();\r\n } else if (current instanceof MovableImage) {\r\n currentShapeHeight = current.getThickness();\r\n }\r\n }\r\n\r\n if (currentShapeHeight > acc) {\r\n return currentShapeHeight;\r\n }\r\n\r\n return acc;\r\n }, 0);\r\n }\r\n\r\n static getCabinetPosY(shape, shapeDbFeature, url, shapeHeight) {\r\n let posY = 0\r\n const metaData = getThirdPartyAR3DMetaData(shapeDbFeature, url);\r\n const category = getCategoryFromMetadata(metaData);\r\n\r\n if (shape.partId === SHAPE_PART_ID.upper_cabinet_boxes || shape.parentPartId === SHAPE_PART_ID.upper_cabinet_boxes) {\r\n // //todo (shape bottom cabinet height + distance between bottom and top cabinets)\r\n posY = DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT;\r\n\r\n //set hood cabinet height to the level of highest upper_cabinet value\r\n const isHoodCabinet = category === \"Hood\" || containsHEBeforeExtension(url) || shapeHeight <= DEFAULT_BACKSPLASH_HEIGHT;\r\n if (isHoodCabinet) {\r\n const snappedWithShape = shape.shapeAbsolute.getSnappedWithShape();\r\n\r\n //const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(shape.shapeAbsolute.snappedShapeGroup);\r\n let upperCabinetHighestCabinetValue;\r\n //todo might be issues here, it is better to search for the closest cabinet\r\n if (snappedWithShape && !isHoodShape(snappedWithShape) && snappedWithShape.partId === SHAPE_PART_ID.upper_cabinet_boxes) {\r\n upperCabinetHighestCabinetValue = parseFloat(snappedWithShape.shapeCabinet.getShapeHeight());\r\n } else {\r\n upperCabinetHighestCabinetValue = parseFloat(CabinetsHelper.getHighestCabinetValue(SHAPE_PART_ID.upper_cabinet_boxes));\r\n }\r\n posY = DEFAULT_COUNTERTOP_HEIGHT + DEFAULT_BACKSPLASH_HEIGHT + upperCabinetHighestCabinetValue - shapeHeight;\r\n //upper cabinets was raised in 3d models\r\n // hardcode for cabinets that is raised in the model\r\n // if (startsFromH(shapeDbFeature.sharedFeatureName)) {\r\n // posY = posY - 30 + shapeHeight\r\n // }\r\n }\r\n\r\n //set upper cabinet height to the level of tall cabinets\r\n const tallCabinetHighestCabinetValue = parseFloat(CabinetsHelper.getHighestCabinetValue(SHAPE_PART_ID.tall_cabinet_boxes));\r\n if (tallCabinetHighestCabinetValue) {\r\n posY = tallCabinetHighestCabinetValue - shapeHeight;\r\n }\r\n }\r\n return posY\r\n }\r\n\r\n static getHandles(shape) {\r\n for (const line of shape.getLines()) {\r\n const handleId = line.getHandleId()\r\n if (handleId) {\r\n const handle3dURL = line.getHandle3dURL();\r\n //todo we need to create handle for each of the position in ar3dFile\r\n return [\r\n {\r\n handle3dURL,\r\n partId: shape.partId,\r\n // pos: {\r\n // x: pos.x + targetWidth / 2,\r\n // y: pos.y + targetHeight / 2,\r\n // z: pos.z + targetDepth,\r\n // }\r\n }\r\n // ,\r\n // {\r\n // handle3dURL,\r\n // partId: shape.partId,\r\n // }, {\r\n // handle3dURL,\r\n // partId: shape.partId,\r\n // }\r\n ]\r\n }\r\n }\r\n }\r\n}\r\n","export function similarity(s1, s2) {\r\n let longer = s1;\r\n let shorter = s2;\r\n if (s1.length < s2.length) {\r\n longer = s2;\r\n shorter = s1;\r\n }\r\n const longerLength = longer.length;\r\n if (longerLength === 0) {\r\n return 1.0;\r\n }\r\n return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength);\r\n}\r\n\r\n/*\r\n * Track the highest number of matching words\r\n */\r\nexport function similarityByWords(arrayToSearch, nameSearch) {\r\n let highestMatchCount = 0;\r\n let phraseBySimilarity = null;\r\n\r\n arrayToSearch.forEach(url => {\r\n const urlName = url.toLowerCase().split('/').pop().split('.')[0];\r\n const searchWords = nameSearch.toLowerCase().split(' ');\r\n const urlWords = urlName.split('-').join(' ').split(' '); // Adjusted splitting logic for your URLs\r\n\r\n let matchCount = searchWords.reduce((count, word) => {\r\n return count + (urlWords.includes(word) ? 1 : 0);\r\n }, 0);\r\n\r\n //console.log(\"urlName\", urlName);\r\n //console.log(\"matchCount\", matchCount);\r\n if (matchCount > highestMatchCount) {\r\n phraseBySimilarity = url;\r\n highestMatchCount = matchCount;\r\n }\r\n });\r\n\r\n return phraseBySimilarity\r\n}\r\n\r\nfunction editDistance(s1, s2) {\r\n s1 = s1.toLowerCase();\r\n s2 = s2.toLowerCase();\r\n\r\n const costs = [];\r\n for (let i = 0; i <= s1.length; i++) {\r\n let lastValue = i;\r\n for (let j = 0; j <= s2.length; j++) {\r\n if (i === 0) costs[j] = j;\r\n else {\r\n if (j > 0) {\r\n let newValue = costs[j - 1];\r\n if (s1.charAt(i - 1) !== s2.charAt(j - 1)) newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\r\n costs[j - 1] = lastValue;\r\n lastValue = newValue;\r\n }\r\n }\r\n }\r\n if (i > 0) costs[s2.length] = lastValue;\r\n }\r\n return costs[s2.length];\r\n}\r\n\r\nexport const isSqftPassedDataEmpty = (sqftPassedData) => {\r\n if (sqftPassedData && sqftPassedData.manualCalculate === false) {\r\n return sqftPassedData.countertops.length === 0\r\n } else if (sqftPassedData && sqftPassedData.manualCalculate === true) {\r\n return sqftPassedData.countertops.length === 0\r\n || sqftPassedData.backsplashes.length === 0\r\n || sqftPassedData.edges.length === 0\r\n }\r\n return false\r\n}\r\n\r\n// Function to group URLs by version and sort them in descending order by version number\r\nexport function groupUrlsByVersion(urls) {\r\n // Create an array to store versioned URLs\r\n const versionedUrls = [];\r\n\r\n urls.forEach(url => {\r\n // Extract the version number from the URL (if present)\r\n const versionMatch = url.match(/ar-composer(?:-v(\\d+))?/);\r\n // If no version is present, default to version 1\r\n const version = versionMatch && versionMatch[1] ? parseInt(versionMatch[1], 10) : 1;\r\n\r\n // Add the version and URL to the array as an object\r\n versionedUrls.push({ version, url });\r\n });\r\n\r\n // Sort the array by version in descending order\r\n versionedUrls.sort((a, b) => b.version - a.version);\r\n\r\n // Return an array of sorted URLs based on version\r\n return versionedUrls.map(item => item.url);\r\n}\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport findIndex from 'lodash/findIndex';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport CheckBox from './../../../common/checkBox';\r\nimport Analytics from './../../../../analytics';\r\nimport {\r\n setExpandedFilters,\r\n setFilterVisible,\r\n setSelectedFilters,\r\n showFilters\r\n} from \"../../../../actions/actionFunctions\";\r\n// import FilterSelection from \"./filterSelection\";\r\nimport FiltersSearch from \"./filtersSearch\";\r\nimport NavigationRequests from \"../navigationRequests\";\r\n\r\nconst toggleArrayValue = (array, value) => {\r\n let index = array.indexOf(value);\r\n (index >= 0) ? array.splice(index, 1) : array.push(value);\r\n return array;\r\n};\r\n\r\nexport const toggleFilterArrayValue = (array, {filterId, filterGroupId}) => {\r\n let index = findIndex(array, {filterId});\r\n if (index >= 0) {\r\n array.splice(index, 1);\r\n } else {\r\n array.push({filterId, filterGroupId});\r\n }\r\n return array;\r\n};\r\n\r\nconst arrayHasValue = (array, value) => {\r\n return (array.indexOf(value) >= 0);\r\n};\r\n\r\nclass FiltersBody extends NavigationRequests {\r\n static propTypes = {\r\n id: PropTypes.string.isRequired,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n childItem: PropTypes.object\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isLoading: false,\r\n filterButtons: [\"Others\", \"Materials\", \"Brand\", \"Color\"]\r\n };\r\n this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n this.setAvailableFiltersValues();\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n setAvailableFiltersValues() {\r\n const activePart = this.props.childItem && this.props.childItem.part;\r\n if (activePart.filtersReceived) {\r\n this.setState({\r\n isLoading: false,\r\n })\r\n } else {\r\n this.setState({\r\n isLoading: true\r\n });\r\n this.checkIfAllFiltersReceived(activePart, this.props.allFilterGroups)\r\n .then(() => {\r\n if (this._isMounted) {\r\n this.setState({\r\n isLoading: false,\r\n })\r\n }\r\n });\r\n }\r\n }\r\n\r\n isFilterSelected = (filter) => findIndex(this.props.selectedFilters, {filterId:filter}) !== -1;\r\n isFilterExpanded = (filter) => arrayHasValue(this.props.expandedFilters, filter);\r\n\r\n handleExpandFilter = (filter) => Analytics.sendClickEvent('filter-expand-' + filter) && this.props.setExpandedFilters(toggleArrayValue([...this.props.expandedFilters], filter));\r\n handleSelectFilter = (filterId, filterGroupId) => Analytics.sendClickEvent('filter-selected-' + filterId) && this.props.setSelectedFilters(toggleFilterArrayValue([...this.props.selectedFilters],\r\n {filterId, filterGroupId}));\r\n\r\n handleGroupClick = (filterName) => {\r\n Analytics.sendClickEvent('show-filter-group-' + filterName);\r\n if (this.props.filterVisible === filterName) {\r\n this.props.showFilters(false);\r\n } else {\r\n this.props.setFilterVisible(filterName);\r\n this.setAvailableFiltersValues(this.props, filterName);\r\n }\r\n };\r\n\r\n handleReset = () => {\r\n this.props.setSelectedFilters([]);\r\n this.props.setExpandedFilters([]);\r\n this.props.handleSearchInputChange({target: {value: ''}});\r\n };\r\n\r\n render() {\r\n const activePart = this.props.childItem.part;\r\n return (\r\n \r\n
    \r\n {this.state.filterButtons.map((filterName) => {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === filterName);\r\n const buttonText = (filterName === \"Others\") ? \"+Filters\" : filterName;\r\n const filterNameLowerCased = filterName.toLowerCase();\r\n let buttonEnabled = false;\r\n if (filterName === \"Others\") {\r\n buttonEnabled = Array.isArray(activePart.filtersReceived) && this.props.allFilterGroups.some(filterGroup => {\r\n return ![\"Materials\", \"Brand\", \"Color\"].includes(filterGroup.name) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n });\r\n } else {\r\n buttonEnabled = filterGroup && (Array.isArray(activePart.filtersReceived) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n }));\r\n }\r\n return (\r\n
    this.handleGroupClick(filterName)}\r\n className={\"filters-header-icon filters-header-icon--\"+filterNameLowerCased\r\n + (this.props.filterVisible === filterName ? \" filters-header-icon--active filters-header-icon--active--\"+filterNameLowerCased : \"\")\r\n + (!buttonEnabled ? \" filters-header-icon--disabled\" : \"\")}>\r\n \r\n
    \r\n )\r\n })}\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n {this.state.isLoading || !activePart.filtersReceived\r\n ?
    \r\n :
    {this.renderFiltersBody()}
    \r\n }\r\n \r\n )\r\n }\r\n\r\n renderFiltersBody = () => {\r\n const activePart = this.props.childItem.part;\r\n switch (this.props.filterVisible) {\r\n case \"Others\": {\r\n const otherFilterGroups = this.props.allFilterGroups.filter(filterGroup => {\r\n return ![\"Materials\", \"Brand\", \"Color\"].includes(filterGroup.name) && filterGroup.values.some(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n });\r\n const availableOtherFilterGroups = otherFilterGroups.map(fg => {\r\n return {\r\n id: fg.id,\r\n displayText: fg.name,\r\n items: fg.values.filter(filterValue => activePart.filtersReceived.includes(filterValue.id)),\r\n }\r\n });\r\n return this.renderGenericFilters(availableOtherFilterGroups, true);\r\n }\r\n case \"Materials\": {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === \"Materials\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderGenericFilters(filterGroup.values, false, filterGroup.id);\r\n }\r\n break;\r\n }\r\n case \"Brand\": {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === \"Brand\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderBrand(filterGroup);\r\n }\r\n break;\r\n }\r\n case \"Color\": {\r\n const filterGroup = this.props.allFilterGroups.find(group => group.name === \"Color\");\r\n if (this.checkFilterGroupForAvailableFilterValues(filterGroup).length) {\r\n return this.renderColor(filterGroup);\r\n }\r\n break;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n checkFilterGroupForAvailableFilterValues = (filterGroup) => {\r\n if (!filterGroup || !filterGroup.values) {\r\n return []\r\n }\r\n const activePart = this.props.childItem.part;\r\n return filterGroup.values.filter(filterValue => {\r\n return activePart.filtersReceived.includes(filterValue.id);\r\n })\r\n };\r\n\r\n /**\r\n *\r\n * @param filterList {Array}\r\n * @param groupsFirst {boolean}\r\n * @param groupId {any}\r\n * @return {*}\r\n */\r\n renderGenericFilters = (filterList, groupsFirst = false, groupId) => {\r\n // console.log('filterList', filterList);\r\n const fabricatorData = this.props.fabricatorData;\r\n let filterOptions = filterList\r\n .filter(f => !(fabricatorData && ((f.value === \"Slab\" && fabricatorData.isRebath)\r\n || (f.value === \"DuraBath Natural Stone\" && !fabricatorData.isRebath)\r\n )))\r\n .map(f => {\r\n const sortedItems = (f.displayText === \"Size\")\r\n ? f.items.sort((a, b) => {\r\n const name1 = +a.value.split(\"X\")[0].split(\"in\")[0];\r\n const name2 = +b.value.split(\"X\")[0].split(\"in\")[0];\r\n return name1 !== name2 ? name1 < name2 ? -1 : 1 : 0\r\n })\r\n : f.items;\r\n let items = sortedItems.map(i => {\r\n return (\r\n
  • \r\n this.handleSelectFilter(i.id, groupId || f.id)}/>\r\n
  • \r\n );\r\n });\r\n\r\n return (\r\n
  • \r\n this.handleSelectFilter(f.id, groupId || f.id)}/>\r\n\r\n {(f.items && f.items.length > 0)\r\n ? this.handleExpandFilter(f.id)} />\r\n : null}\r\n
      \r\n {items}\r\n
    \r\n
  • \r\n );\r\n });\r\n\r\n return (\r\n
    \r\n
      \r\n {filterOptions}\r\n
    \r\n
    \r\n );\r\n };\r\n\r\n renderBrand = (brandFilterGroup) => {\r\n return (\r\n
    \r\n
      \r\n {this.checkFilterGroupForAvailableFilterValues(brandFilterGroup).map(f => (\r\n
    • this.handleSelectFilter(f.id, brandFilterGroup.id)}>\r\n {f.icon ? null : f.displayText}\r\n
    • \r\n ))}\r\n
    \r\n
    \r\n );\r\n };\r\n\r\n renderColor = (colorFilterGroup) => {\r\n return (\r\n
    \r\n
      \r\n {this.checkFilterGroupForAvailableFilterValues(colorFilterGroup).map(f => (\r\n
    • \r\n this.handleSelectFilter(f.id, colorFilterGroup.id)}\r\n text={f.displayText}/>\r\n \r\n
    • \r\n ))}\r\n
    \r\n
    \r\n );\r\n };\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n selectedFilters: store.filterState.selectedFilters,\r\n expandedFilters: store.filterState.expandedFilters,\r\n filterVisible: store.filterState.filterVisible,\r\n fabricatorData: store.fabricatorState,\r\n allFilterGroups: store.filterState.filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setExpandedFilters,\r\n showFilters,\r\n setFilterVisible,\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FiltersBody)\r\n);\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Analytics from './../../analytics';\r\nimport COLOR_THEMES from \"../../colorThemes\";\r\n\r\nconst CheckBox = (props) => {\r\n const {checked, text, onChecked, disabled, textOnly, activeTheme} = props;\r\n return (\r\n
    !disabled && !textOnly && Analytics.sendClickEvent(\"checkbox - \" + text, checked) && onChecked(!checked)}>\r\n
    \r\n {textOnly ? null :\r\n \r\n \r\n \r\n }\r\n {checked ?\r\n
    \r\n :
    }\r\n
    \r\n
    {text}
    \r\n
    \r\n );\r\n};\r\n\r\nCheckBox.displayName = 'CheckBox';\r\n\r\nCheckBox.propTypes = {\r\n checked: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n textOnly: PropTypes.bool,\r\n text: PropTypes.any,\r\n onChecked: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CheckBox)\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getBvGroupFeatures,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport CountertopGroup from \"./core/parts/countertopGroup\";\r\nimport Cabinet from \"./core/parts/cabinet\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass KitchenVisualizer extends Visualizer {\r\n\r\n static displayName = 'Kitchen Visualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n getBvGroupFeatures(\"Countertop\", 0, 200),\r\n getBvGroupFeatures(\"Crown Molding\", 0, 500),\r\n getBvGroupFeatures(\"Top Cabinet\", 0, 200),\r\n getBvGroupFeatures(\"Bottom Cabinet\", 0, 200),\r\n getBvGroupFeatures(\"Top Handle\", 0, 200),\r\n getBvGroupFeatures(\"Bottom Handle\", 0, 200),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[8];\r\n\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n\r\n // 2) set counterTop features\r\n const countertopParent = this.layout.parts[CountertopGroup.id];\r\n if (countertopParent && countertopParent.countertop && allResponse[2]) {\r\n countertopParent.countertop.setGroupFeatures(allResponse[2], 200, false)\r\n }\r\n\r\n // 3) set counterTop features\r\n const cabinetParent = this.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.crownMolding && allResponse[3]) {\r\n cabinetParent.crownMolding.setGroupFeatures(allResponse[3], 500, false)\r\n }\r\n\r\n // 4) set top cabinet features\r\n if (cabinetParent && cabinetParent.topCabinet && allResponse[4]) {\r\n cabinetParent.topCabinet.setGroupFeatures(allResponse[4], 200, false)\r\n }\r\n\r\n // 5) set bottom cabinet features\r\n if (cabinetParent && cabinetParent.bottomCabinet && allResponse[5]) {\r\n cabinetParent.bottomCabinet.setGroupFeatures(allResponse[5], 200, false)\r\n }\r\n\r\n // 6) set top handle features\r\n if (cabinetParent && cabinetParent.topHandle && allResponse[6]) {\r\n cabinetParent.topHandle.setGroupFeatures(allResponse[6], 200, false)\r\n }\r\n\r\n // 7) set bottom handle features\r\n if (cabinetParent && cabinetParent.bottomHandle && allResponse[7]) {\r\n cabinetParent.bottomHandle.setGroupFeatures(allResponse[7], 200, false)\r\n }\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories);\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {(this.props.bvOpened || this.props.bvVisited) ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(KitchenVisualizer);\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n // getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass KvSceneVisualizer extends Visualizer {\r\n\r\n static displayName = 'KvSceneVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n console.log(\"kvScene loaded\", );\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n this.getQtCategoriesCommon(),\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n // getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const layoutScene = this.layout.scene;\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {(this.props.bvOpened || this.props.bvVisited) ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n layoutScene={layoutScene}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n const {qtCategoriesRequested} = store.qtState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n qtCategoriesRequested,\r\n canvasCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(KvSceneVisualizer);\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommon from \"../visComponents/imageCanvasCommon\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {LayoutType} from \"./core/constants\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass BvSceneVisualizer extends Visualizer {\r\n\r\n static displayName = 'BvSceneVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1]),\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const bvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n this.layout.loadNewFeatures(mainResponse); // 1) set default (placeholders)\r\n this.layout.setGroupsItemsCount(bvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, bvGroupsResponse, qtCategories, invert(LayoutType));\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons();\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(BvSceneVisualizer);\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport invert from \"lodash/invert\";\r\n\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded, addToCart, setFirstLoadedPreset, updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\nimport {getBathroomVisualizerData, getBvGroups} from \"../../api/server-api\";\r\nimport {Layout} from \"./core/layout\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\nimport {LayoutType, LOCAL_STORAGE_KEYS} from \"./core/constants\";\r\nimport {setLocalStorageItem} from \"./lookNavigation/lookFunctions\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {getPassedUserInfo, getSaveTempData} from \"../../api/look-api\";\r\nimport Misc from \"../../misc/misc\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation.js\";\r\nimport MessageBox from \"../popups/messageBox\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {loadAdditionalVisualizerGroups} from \"../../misc/loadVisualizer\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass LookVisualizer extends Visualizer {\r\n\r\n static displayName = 'BvLookVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n if (!IS_QKB_UI) {\r\n this.props.toggleBathroomVisualizerOpen(true);\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n loadAdditionalVisualizerGroups(\"bvLook\"),\r\n this.getQtCategoriesCommon(),\r\n ]).then(baseResponse => {\r\n let otherData = [\r\n Promise.resolve(baseResponse[0]),\r\n Promise.resolve(baseResponse[1]),\r\n Promise.resolve(baseResponse[2]),\r\n getBvGroups(),\r\n ];\r\n const searchParams = new URLSearchParams(\r\n (window.location.search).replace(/amp;/g, \"\")\r\n || (window.location.hash).replace(/(.*)\\?/g, \"\")\r\n || \"\"\r\n );\r\n // console.log(\"searchParams\", searchParams.toString());\r\n if (searchParams && searchParams.get(\"userid\")) {\r\n otherData.push(getPassedUserInfo(searchParams))\r\n }\r\n if (searchParams && (searchParams.get(\"tempID\") || searchParams.get(\"TempID\"))) {\r\n otherData.push(getSaveTempData(searchParams.get(\"tempID\") || searchParams.get(\"TempID\")))\r\n }\r\n Promise.all(otherData)\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const decorAndAttachmentResponses = Array.isArray(allResponse[1]) ? allResponse[1] : [];\r\n const qtCategories = allResponse[2];\r\n const bvGroupsResponse = allResponse[3];\r\n const userDataResponse = allResponse[4];\r\n const savedTempData = JSON.parse(searchParams && searchParams.get(\"userid\") ? allResponse[5] || null : allResponse[4] || null);\r\n this.layout.loadNewFeatures(Object.assign({}, mainResponse, {\r\n features: [...mainResponse.features, ...decorAndAttachmentResponses]\r\n })); // 1) set default (placeholders)\r\n // this.layout.setGroupsItemsCount(mainResponse);\r\n let userIsLoggedIn = false;\r\n if (userDataResponse && userDataResponse.email) {\r\n userIsLoggedIn = true;\r\n this.needToSaveQuote = !document.kvConfig.jobId;\r\n console.log(\"userDataResponse\", userDataResponse);\r\n const updatedUserInfo = Misc.parseUserResponse(userDataResponse)\r\n setLocalStorageItem(LOCAL_STORAGE_KEYS.introVisited, true);\r\n\r\n this.props.toggleUserPopup({\r\n userPopupOpened: false,\r\n userIsLoggedIn: true,\r\n isPhoneNumberValidated: userDataResponse.isPhoneNumberValidated || !userDataResponse.pendingPhoneVerification,\r\n userInfo: updatedUserInfo,\r\n // email: userDataResponse.email,\r\n encodedUserId: userDataResponse.encodedUserId,\r\n // phoneNumber: userDataResponse.phoneNumber,\r\n // values: userDataResponse.values\r\n })\r\n }\r\n return this.setVisualizerInfo(\r\n mainResponse,\r\n bvGroupsResponse ? bvGroupsResponse.data : {},\r\n qtCategories,\r\n invert(LayoutType),\r\n userIsLoggedIn,\r\n savedTempData\r\n );\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n }\r\n\r\n render() {\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const layoutScene = this.layout.scene;\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n layoutScene={layoutScene}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {windowWidth, cookieAccepted, visualizersLoaded} = store.serverState;\r\n const {canvasId} = store.bathroomVisualizerState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {activePreset} = store.bathroomVisualizerState;\r\n\r\n if (!IS_QKB_UI) {\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n activePreset,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n visualizersLoaded,\r\n };\r\n }\r\n\r\n const {bvOpened, bvVisited, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n const {qtCategoriesRequested} = store.qtState;\r\n\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n activePreset,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n //** qkb ui ** //\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n qtCategoriesRequested,\r\n canvasCount,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n addVisualizersLoaded,\r\n addToCart,\r\n setLookOverlayOpened,\r\n setFirstLoadedPreset,\r\n updateCanvasCount,\r\n showVisualizerTutorial,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookVisualizer)\r\n","import React, {Fragment} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {\r\n toggleUserPopup, setCanvasId, setLayoutDataParts, setDefaultSelectionGroup, loadFilters, setCameFromPage,\r\n toggleBathroomVisualizerOpen, toggleSelectionFeatureInfo, changeMessageBoxState,\r\n addVisualizersLoaded } from \"../../actions/actionFunctions\";\r\nimport {\r\n getBathroomVisualizerData,\r\n getBvGroups,\r\n getQtCategories,\r\n getNavigationButtons\r\n} from \"../../api/server-api\";\r\nimport ImageCanvasCommonNew from \"../visComponents/imageCanvasCommonNew\";\r\nimport {Layout} from \"./core/layout\";\r\nimport DesktopNavigation from \"./navigation/desktopNavigation\";\r\nimport MobileNavigation from \"./navigation/mobileNavigation\";\r\nimport MainButtons from \"../common/mainButtons\";\r\nimport DemoPoints from \"../common/demoPoints/demoPoints\";\r\nimport MessageBox from \"../popups/messageBox\";\r\n\r\nimport Visualizer from \"../visComponents/visualizer\";\r\nimport VisualizerTutorial from \"../tutorials/visualizerTutorial\";\r\nimport {showVisualizerTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Copyright from \"../ui/copyright\";\r\nimport {IS_QKB_UI} from \"../../config\";\r\n\r\nexport const layout = new Layout();\r\n\r\nclass FireplaceVisualizer extends Visualizer {\r\n\r\n static displayName = 'FireplaceVisualizer';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.layout = layout;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.visualizersLoaded.includes(this.layout.visualizerType)) {\r\n this.setSubscribers();\r\n return false\r\n }\r\n loaderEnable();\r\n Promise.all([\r\n getBathroomVisualizerData(),\r\n getQtCategories(this.layout.getCurrentLayoutAbbreviation())\r\n ]).then(baseResponse => {\r\n Promise.all([\r\n Promise.resolve(baseResponse[0]),\r\n getBvGroups(),\r\n Promise.resolve(baseResponse[1])\r\n ])\r\n .then((allResponse) => {\r\n const mainResponse = allResponse[0];\r\n const kvGroupsResponse = allResponse[1].data;\r\n const qtCategories = allResponse[2];\r\n // 1) set default (placeholders)\r\n this.layout.loadNewFeatures(mainResponse);\r\n this.layout.setGroupsItemsCount(kvGroupsResponse); // should be loaded before & after all features are received\r\n return this.setVisualizerInfo(mainResponse, kvGroupsResponse, qtCategories);\r\n })\r\n .then(this.checkShareUrl)\r\n .then(this.onBvLoad)\r\n .then(this.finishLoading);\r\n });\r\n\r\n this.setSubscribers();\r\n getNavigationButtons(\"kv\");\r\n }\r\n\r\n render() {\r\n\r\n if (!IS_QKB_UI) {\r\n return null\r\n }\r\n\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const layers = this.layout.getLayers(showPlaceHolders);\r\n const layoutType = this.layout.getCurrentLayoutName();\r\n const isMobile = this.props.windowWidth < 991;\r\n const showTutorial = this.checkToShowTutorial();\r\n\r\n return (\r\n
    \r\n
    \r\n {this.props.bvOpened || this.props.bvVisited ? (\r\n \r\n this.imageCanvas = node}\r\n layoutType={layoutType}\r\n layout={this.layout}\r\n width={this.props.canvasDimensions.width}\r\n height={this.props.canvasDimensions.height}\r\n useMouseHovering={this.props.useMouseHovering}\r\n useTouchZoom={this.props.useTouchZoom}\r\n />\r\n \r\n \r\n ) : null}\r\n \r\n {!this.state.demoPointClicked && this.props.canvasId ? (\r\n \r\n ) : null}\r\n
    \r\n {(this.layout.initialized && this.props.bvVisited) ? ( // keep navigation opened if someone got to QT and back\r\n isMobile ? (\r\n \r\n ) : (\r\n this.navBar = node}\r\n refreshCB={this.handleRefresh}\r\n setHoveredLayer={this.setHoveredLayer}\r\n canvasId={this.state.canvasId}\r\n renderGreenLayerByZindex={this.renderGreenLayerByZindex}\r\n toggleUserPopup={this.props.toggleUserPopup}\r\n changeMessageBoxState={this.changeMessageBoxState}\r\n setActiveFeature={this.setActiveFeature}\r\n activeFeature={this.state.activeFeature}\r\n fabricatorSettings={fabricatorSettings}\r\n setDemoPointClicked={this.setDemoPointClicked}\r\n />\r\n )\r\n ) : null}\r\n {this.props.cookieAccepted ? : null}\r\n {showTutorial ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cookieAccepted, windowWidth, visualizersLoaded} = store.serverState;\r\n const {bvOpened, bvVisited, canvasId, showRestorePopup, canvasDimensions, canvasCount} = store.bathroomVisualizerState;\r\n const {mobileNav, desktopNavigationOpened, activeNavigationParentName, activeNavigationChildName} = store.navigationState;\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialIsOpened, visualizerTutorialFinished} = store.tutorialState;\r\n const {initialFlowRoomLayout, initialFlowRoom, initialFlowStep} = store.initialFlowState;\r\n return {\r\n bvOpened,\r\n bvVisited,\r\n mobileNav,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n windowWidth,\r\n canvasId,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n desktopNavigationOpened,\r\n activeNavigationParentName,\r\n activeNavigationChildName,\r\n showRestorePopup,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialFinished,\r\n initialFlowRoomLayout,\r\n initialFlowRoom,\r\n initialFlowStep,\r\n cookieAccepted,\r\n canvasDimensions,\r\n visualizersLoaded,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n setCameFromPage,\r\n toggleBathroomVisualizerOpen,\r\n setDefaultSelectionGroup,\r\n setLayoutDataParts,\r\n toggleUserPopup,\r\n setCanvasId,\r\n loadFilters,\r\n toggleSelectionFeatureInfo,\r\n changeMessageBoxState,\r\n showVisualizerTutorial,\r\n addVisualizersLoaded\r\n})(FireplaceVisualizer);\r\n","import invert from 'lodash/invert';\r\nimport snakeCase from 'lodash/snakeCase';\r\n\r\nimport LayoutCommonNew from \"../../visComponents/layoutCommonNew\";\r\nimport {LayoutType, LayoutAbbreviation} from \"./constants\";\r\nimport zIndexes from \"./zIndex\";\r\nimport Other from \"./parts/other\";\r\nimport NonVisualizerSubPart from \"./subparts/nonVisualizerSubPart\";\r\nimport DesignNavigationItem from \"../../visComponents/designNavigationItem\";\r\nimport Background from \"./parts/background\";\r\nimport Floor from \"./parts/floor\";\r\nimport Walls from \"./parts/walls\";\r\nimport {AVAILABLE_VISUALIZER_TYPES} from \"../../../config\";\r\nimport Globals from \"./parts/globals\";\r\nimport Cabinet from \"./parts/cabinet\";\r\nimport Accessories from \"./parts/accessories\";\r\n\r\nexport class LaundryRoomLayout extends LayoutCommonNew {\r\n\r\n /**\r\n * @type {int}\r\n */\r\n defaultType = LayoutType.Layout41;\r\n type = this.defaultType;\r\n scene = \"1\";\r\n visualizerType = AVAILABLE_VISUALIZER_TYPES.LaundryRoom;\r\n localStorageKey = \"LaundryRoomState\";\r\n layersBinding = \"LaundryRoom\";\r\n layoutNames = LayoutAbbreviation;\r\n layoutTypes = LayoutType;\r\n layoutThumbnails = {};\r\n zIndexes = zIndexes.layouts;\r\n excludedPartIdsFromHover = [\"decor_\", \"background_bg\", \"walls_ceiling\", \"attachment\"];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.parts[Globals.id] = new Globals();\r\n this.parts[Background.id] = new Background();\r\n this.parts[Cabinet.id] = new Cabinet();\r\n this.parts[Walls.id] = new Walls();\r\n this.parts[Floor.id] = new Floor();\r\n this.parts[Accessories.id] = new Accessories();\r\n this.parts[Other.id] = new Other();\r\n Object.values(this.parts).forEach(part => part.layout = this);\r\n }\r\n\r\n getCurrentLayoutName(type = this.type) {\r\n return invert(LayoutType)[type];\r\n }\r\n\r\n getCurrentLayoutAbbreviation() {\r\n return LayoutAbbreviation[this.getCurrentLayoutName()]\r\n }\r\n\r\n addNonVisualizerSubPart(featureGroupName){\r\n const otherParent = this.parts[Other.id];\r\n const partId = snakeCase(featureGroupName);\r\n let relatedItem = otherParent.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, featureGroupName);\r\n relatedItem.getParent = () => otherParent;\r\n otherParent.relatedItems.push(relatedItem);\r\n }\r\n return new DesignNavigationItem(relatedItem.partName, relatedItem)\r\n }\r\n\r\n addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures= false) {\r\n const cabinet = this.parts[Cabinet.id];\r\n if (cabinet && cabinet.slatWall) {\r\n bvState.slatWallType = cabinet.slatWall.slatWallType;\r\n }\r\n return super.addSpecificPropertiesToLocalStorage(bvState, useNames, returnAllFeatures)\r\n }\r\n\r\n setActiveFeaturesFromObject(...props) {\r\n const cabinet = this.parts[Cabinet.id];\r\n if (cabinet && cabinet.slatWall && props.slatWallType) {\r\n cabinet.slatWall.slatWallType = props.slatWallType;\r\n }\r\n return super.setActiveFeaturesFromObject(...props)\r\n }\r\n\r\n}\r\n\r\nexport default new LaundryRoomLayout()\r\n","import React, {Component} from 'react';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {BathTubType} from \"../bvComponent/core/constants\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\n\r\nexport default class ProjectScopeFunctions extends Component {\r\n\r\n goToMaterialsPageCommon = (subPart, parentName) => {\r\n const layout = getCurrentLayout();\r\n let nextSubPartIndex = 0;\r\n // console.log('subPart', subPart);\r\n if (subPart.partId === \"bathtub\") {\r\n // console.log('subPart', subPart.getParent());\r\n subPart.getParent().handleSubTypeClick(BathTubType.FreeStanding)\r\n }\r\n const subPartName = subPart.partName.replace(/ /g,\"-\").toLowerCase();\r\n if (layout.qtCategories) {\r\n const qtCategory = layout.qtCategories.find(qtCategory => qtCategory.name === parentName);\r\n nextSubPartIndex = qtCategory.subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partId === subPart.partId\r\n });\r\n this.props.setQtActiveCategory(parentName);\r\n } else if (subPart.getParent) {\r\n const subParts = subPart.getParent().subParts(false);\r\n nextSubPartIndex = subParts.findIndex(subPartItem => {\r\n return subPartItem.part.partName.replace(/ /g,\"-\").toLowerCase() === subPartName\r\n });\r\n }\r\n this.props.changeActivePartRelatedItemIndex(nextSubPartIndex);\r\n const parentSimple = (subPart.partName === \"Floor\" && subPart.partId !== \"shower_floor\")\r\n || subPart.partName === \"Toilet\"\r\n || (subPart.partName === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || subPart.partName === \"Window\";\r\n this.props.toggleSelectionWindow(true, parentSimple ? subPart.partName : subPart.getParent().partName);\r\n this.props.setCameFromPage('quote-design');\r\n if (layout.qtCategories) {\r\n changeQTRoutePath(parentName, nextSubPartIndex);\r\n } else {\r\n changeRoutePath(subPart.getParent ? subPart.getParent() : subPart, nextSubPartIndex, false);\r\n }\r\n };\r\n\r\n getBathroomHomeSections = () => {\r\n const layout = getCurrentLayout();\r\n let\r\n vanityItems = [],\r\n showerAndBathTubItems = [],\r\n otherItems = [];\r\n\r\n if (layout.qtCategories) {\r\n // console.log(\"parentParts\", parentParts);\r\n return layout.qtCategories.map((qtCategory) => {\r\n return {\r\n title: qtCategory.name,\r\n // items: this.checkForWallsComplexGroup(qtCategory)\r\n items: qtCategory.subParts\r\n }\r\n });\r\n }\r\n\r\n layout.getFeatures().forEach((parentGroup) => {\r\n // console.log(partData);\r\n let subParts = parentGroup.subParts();\r\n if (parentGroup) {\r\n if (parentGroup.partName === \"Vanity\") {\r\n subParts.forEach((subPart) => {\r\n if (subPart.part.partId !== \"accent_wall\") {\r\n vanityItems.push(subPart)\r\n }\r\n });\r\n } else if (parentGroup.partName === \"Shower\") {\r\n subParts.forEach((subPart) => {\r\n showerAndBathTubItems.push(subPart)\r\n });\r\n } else if (parentGroup.partName === \"Shower Tub Combo\") {\r\n const excluded = [\"wall_configuration\", \"shower_interior_wall\", \"shower_interior_wall_accent\", \"shower_fixture\", \"shower_door\", \"shower_door_handle\"];\r\n subParts.forEach((subPart) => {\r\n if (!excluded.includes(subPart.part.partId)) {\r\n showerAndBathTubItems.push(subPart)\r\n }\r\n });\r\n } else if (parentGroup.partName === \"Bathtub\") {\r\n // console.log(parentGroup);\r\n if (parentGroup.bathTubBody) {\r\n showerAndBathTubItems.push({\r\n text: parentGroup.bathTubBody.partName,\r\n part: parentGroup.bathTubBody\r\n });\r\n }\r\n if (parentGroup.bathTubFixture) {\r\n showerAndBathTubItems.push({\r\n text: parentGroup.bathTubFixture.partName,\r\n part: parentGroup.bathTubFixture\r\n });\r\n }\r\n } else {\r\n subParts.forEach((subPart) => {\r\n if ((!subPart.part.partId.includes(\"wall\") || subPart.part.partId === \"wall_c\")\r\n && subPart.part.partId !== \"shower_fixture\" && !subPart.part.disableOnHomeSections) {\r\n otherItems.push(subPart)\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n return [\r\n {\r\n title: ,\r\n items: vanityItems,\r\n },\r\n {\r\n title: ,\r\n items: showerAndBathTubItems,\r\n },\r\n {\r\n title: ,\r\n items: otherItems,\r\n },\r\n\r\n ]\r\n };\r\n\r\n getKitchenHomeSections = () => {\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) {\r\n // console.log(\"parentParts\", parentParts);\r\n return layout.qtCategories.map((qtCategory) => {\r\n return {\r\n title: qtCategory.name,\r\n // items: this.checkForWallsComplexGroup(qtCategory)\r\n items: qtCategory.subParts\r\n }\r\n });\r\n } else {\r\n const parentParts = layout.getFeatures();\r\n return parentParts.map((parentGroup) => {\r\n return {\r\n title: parentGroup.partName,\r\n items: parentGroup.subParts(false)\r\n }\r\n });\r\n }\r\n };\r\n\r\n getSections = () => {\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Kitchen\":\r\n case \"KV\":\r\n case \"kvMaster\":\r\n case \"kvScene\":\r\n default:\r\n return this.getKitchenHomeSections();\r\n case \"Bathroom\":\r\n case \"BV\":\r\n case \"bvScene\":\r\n case \"bvLook\":\r\n return this.getBathroomHomeSections();\r\n }\r\n };\r\n\r\n}\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {\r\n changeSqftFeaturesPopup,\r\n setSqftFromFeature,\r\n setSqftMeasureUnit,\r\n setSquareFeet\r\n} from \"../../../actions/sqftFunctions\";\r\nimport {setMaterialsPageSubSteps} from \"../../../actions/selectionFunctions\";\r\nimport {MEASURE_UNITS, SQFT_POST_MESSAGE_ACTIONS} from \"../constants\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\nimport {toggleShowManualCalculation} from \"../../../actions/sqftManualCalculationFunctions\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport {prepareSQFTData} from \"../components/canvas/core/workspace/workspaceDataMapper\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\nimport sqftShapeIntersectionsManager from \"../components/canvas/store/sqftShapeIntersectionsManager\";\r\nimport {saveSQFTDataToQuote} from \"../helpers/sqftQuotesHelper\";\r\n\r\nconst WithAddToQuote = (props) => {\r\n const {activeQuoteIndex} = props;\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n const handleAddToQuoteClick = async () => {\r\n props.changeSqftFeaturesPopup({\r\n opened: true,\r\n sqftPassedData: null,\r\n })\r\n //update slabs features just in case they wasn't changed\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n\r\n let sqftCalcData = await prepareSQFTData();\r\n clearAllMenusEvents();\r\n await saveSQFTDataToQuote(sqftCalcData);\r\n setDataToQt(sqftCalcData, true);\r\n };\r\n\r\n const setDataToQt = (data, stayOnSqft = false) => {\r\n if (data) {\r\n Analytics.sendDataEnteredEvent(\"square-foot-calc-data-entered\");\r\n //this.props.setSqftMeasureUnit(data.measureUnit);\r\n const sqftPassedData = Object.assign({}, data, {\r\n canvasImage: \"\",\r\n sqFtSlabImage: \"\",\r\n sqFtSlabCalcImage:\"\",\r\n sqftApplianceImages: \"\",\r\n images3D: \"\"\r\n });\r\n console.log(\"sqft passedData\", sqftPassedData);\r\n let isLocationNotUsesPopup = false; //always use new popup\r\n // (\r\n // window.location.href.includes(\"quotekitchenandbath\")\r\n // //|| window.location.href.includes(\"quotekandb\")\r\n // //|| window.location.href.includes(\"quotesflooring\")\r\n // //|| window.location.href.includes(\"localhost\")\r\n // )\r\n // && !window.location.href.includes(\"use_sqft_popup=1\");\r\n\r\n if (isLocationNotUsesPopup || !props.useSqftCartPopup) {\r\n setEdgesQuantity(data);\r\n setRadiusQuantity(data);\r\n setBacksplashesQuantity(data);\r\n setCountertopsQuantity(data);\r\n stayOnSqft = false;\r\n } else {\r\n props.changeSqftFeaturesPopup({\r\n opened: true,\r\n sqftPassedData,\r\n })\r\n }\r\n\r\n // this.addSQFTCanvasImageToDocuments(data); // not used anymore! we keep sqFtCalcImage in the quote\r\n\r\n // we already saving data on handleAddToQuoteClick\r\n // // set backup data\r\n // if (!isSqftPassedDataEmpty(data)) {\r\n // updateActiveQuoteWithSQFTData(data);\r\n // }\r\n\r\n // set squareFeet\r\n props.setSquareFeet(data.squareFeet); // param needed to be set to call confirm popup\r\n // set quoting tool sub steps (only if minimum 2 items added)\r\n props.setMaterialsPageSubSteps({\r\n edges: data.edges && data.edges.length > 1 ? data.edges : [],\r\n backsplashes: data.backsplashes && data.backsplashes.length > 1 ? data.backsplashes : [],\r\n });\r\n }\r\n\r\n if (!stayOnSqft) {\r\n closeSQFTCalc();\r\n }\r\n\r\n saveSQFTHistory();\r\n };\r\n\r\n // const saveSQFTData = (data) => {\r\n // const {quotes, activeQuoteIndex} = store.getState().quotesState;\r\n // const newQuotes = [...quotes.map((quote, qIndex) => {\r\n // if (qIndex === activeQuoteIndex) {\r\n // quote.sqFtCalcData = Object.assign({}, data)\r\n // }\r\n // return quote\r\n // })];\r\n //\r\n // setQuotes(newQuotes);\r\n // };\r\n\r\n const setEdgesQuantity = (data) => {\r\n const dataEdges = data.edges;\r\n const edgesIdsObject = {};\r\n dataEdges.forEach((edge) => { // here we need to check all added edges with the same it and plus their length\r\n const edgeLength = data.measureUnit === MEASURE_UNITS.Metric ? edge.length : Math.ceil(edge.length);\r\n const edgeId = +edge.id;\r\n edgesIdsObject[edgeId] = edgesIdsObject[edgeId] ? edgesIdsObject[edgeId] + edgeLength : edgeLength;\r\n });\r\n Object.keys(edgesIdsObject).forEach(edgeId => {\r\n if (data.measureUnit === MEASURE_UNITS.Metric) {\r\n edgesIdsObject[edgeId] = +(edgesIdsObject[edgeId]).toFixed(2)\r\n }\r\n [\"center_island_edge\", \"edge_profile\"].forEach(partId => {\r\n setSubPartQuantity(partId, edgesIdsObject[edgeId], +edgeId)\r\n })\r\n })\r\n };\r\n\r\n const setRadiusQuantity = (data) => {\r\n const radiusCount = [...data.radii, ...data.angles].length;\r\n // let quantity = 0;\r\n // dataRadiuses.forEach(radius => {\r\n // quantity += +radius;\r\n // });\r\n if (radiusCount) {\r\n setSubPartQuantity(\"radius\", radiusCount)\r\n }\r\n };\r\n\r\n const setBacksplashesQuantity = (data) => {\r\n const dataBacksplashes = data.backsplashes;\r\n let quantity = 0;\r\n dataBacksplashes.forEach(backsplash => {\r\n quantity += backsplash.length;\r\n });\r\n if (quantity) {\r\n const backsplashLength = data.measureUnit === MEASURE_UNITS.Metric ? quantity : Math.ceil(quantity);\r\n setSubPartQuantity(\"backsplash\", backsplashLength)\r\n }\r\n };\r\n\r\n const setCountertopsQuantity = (data) => {\r\n const layout = getCurrentLayout();\r\n if (data.manualCalculate && data.squareFeet) { // manual calculate\r\n setSubPartQuantity(\"countertop\", data.squareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", data.squareFeet);\r\n } else {\r\n let countertopSquareFeet = 0;\r\n let centerIslandCountertopSquareFeet = 0;\r\n data.countertops.forEach(shape => {\r\n if (shape.squareFeet) { // countertop & center_island_countertop\r\n (shape.partId === \"countertop\")\r\n ? countertopSquareFeet += shape.squareFeet\r\n : centerIslandCountertopSquareFeet += shape.squareFeet;\r\n }\r\n });\r\n if (layout.qtCategories) {\r\n const countertopIsAdded = countertopIsAddedToQtCategory(\"countertop\");\r\n const centerIslandCountertopIsAdded = countertopIsAddedToQtCategory(\"center_island_countertop\");\r\n if (countertopIsAdded && centerIslandCountertopIsAdded) { // both\r\n setSubPartQuantity(\"countertop\", countertopSquareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", centerIslandCountertopSquareFeet);\r\n } else if (countertopIsAdded && !centerIslandCountertopIsAdded) { // only countertop is added to QTCategories\r\n setSubPartQuantity(\"countertop\", data.squareFeet);\r\n } else if (!countertopIsAdded && centerIslandCountertopIsAdded) {\r\n setSubPartQuantity(\"center_island_countertop\", data.squareFeet);\r\n }\r\n } else {\r\n setSubPartQuantity(\"countertop\", countertopSquareFeet);\r\n setSubPartQuantity(\"center_island_countertop\", centerIslandCountertopSquareFeet);\r\n }\r\n }\r\n };\r\n\r\n const countertopIsAddedToQtCategory = (partId) => {\r\n let countertopExist = false;\r\n const layout = getCurrentLayout();\r\n layout.qtCategories.forEach(qtCategory => {\r\n const subParts = qtCategory.subParts;\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n countertopExist = true;\r\n }\r\n });\r\n return countertopExist\r\n };\r\n\r\n const setSubPartQuantity = (partId, quantity, dbFeatureId = null) => {\r\n /*** if dbFeatureId is passed - we need to set to the Feature quantity, not the feature group! ***/\r\n const layout = getCurrentLayout();\r\n // 1) update cart items quantity\r\n const cartItem = props.cartItems.find(cartItem => {\r\n return (dbFeatureId\r\n ? cartItem.cartFeature.dbFeature.id === dbFeatureId\r\n : cartItem.partId === partId) && cartItem.currentQuote === activeQuoteIndex;\r\n });\r\n if (cartItem) {\r\n props.changeCartItemQuantity(cartItem, quantity);\r\n }\r\n // 2) update feature info (current) quantity\r\n const activeFeature = props.selectionFeatureInfo;\r\n const updateCurrentFeature = dbFeatureId\r\n ? activeFeature && activeFeature.dbFeature.id === dbFeatureId\r\n : activeFeature && activeFeature.partId === partId\r\n if (updateCurrentFeature) {\r\n props.changeSelectionInfoQuantity(quantity)\r\n }\r\n // 3) update not current quantities\r\n if (layout.qtCategories) {\r\n layout.qtCategories.forEach(qtCategory => {\r\n setFeatureGroupSqftQuantity(qtCategory.subParts, partId, quantity, dbFeatureId)\r\n })\r\n } else {\r\n layout.getFeatures().forEach(parentItem => {\r\n setFeatureGroupSqftQuantity(parentItem.subParts(), partId, quantity, dbFeatureId)\r\n })\r\n }\r\n };\r\n\r\n const setSqftQuantityToSubPartFinal = (dbFeatureId, neededSubPart, quantity) => {\r\n if (dbFeatureId) {\r\n const navItems = neededSubPart.part.navigationSubItems();\r\n const neededFeature = navItems.find(navItem => navItem.part.dbFeature.id === dbFeatureId);\r\n if (neededFeature) {\r\n if (!neededFeature.part.sqftQuantity) {\r\n neededFeature.part.sqftQuantity = {};\r\n }\r\n neededFeature.part.sqftQuantity[activeQuoteIndex] = quantity\r\n } else {\r\n // console.log(\"feature not found, what should we do?\");\r\n }\r\n } else {\r\n if (!neededSubPart.part.sqftQuantity) {\r\n neededSubPart.part.sqftQuantity = {};\r\n }\r\n neededSubPart.part.sqftQuantity[activeQuoteIndex] = quantity\r\n }\r\n };\r\n\r\n const setFeatureGroupSqftQuantity = (subParts, partId, quantity, dbFeatureId) => {\r\n const neededSubPart = subParts.find(subPart => subPart.part.partId === partId);\r\n if (neededSubPart) {\r\n if (!neededSubPart.part.allFeaturesReceived && neededSubPart.part.partId.includes(\"edge\")) {\r\n //todo sqftReact\r\n //this.checkIfAllFeaturesReceived(neededSubPart, \"\", () => {\r\n setSqftQuantityToSubPartFinal(dbFeatureId, neededSubPart, quantity)\r\n //})\r\n } else {\r\n setSqftQuantityToSubPartFinal(dbFeatureId, neededSubPart, quantity)\r\n }\r\n }\r\n };\r\n\r\n // const closeSQFTCalc = (payload) => {\r\n // sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.stopRender);\r\n // clearAllMenusEvents();\r\n // setSqftFromFeature(null);\r\n // Analytics.sendClickEvent('sqft-close');\r\n // if (payload && payload.measureUnit) {\r\n // props.setSqftMeasureUnit(payload.measureUnit);\r\n // }\r\n // const leaveSqft = () => {\r\n // const redirectToPage = cameFromPage && cameFromPage !== \"sqft\" ? cameFromPage : \"materials\"\r\n // closeSQFTTool(redirectToPage, changeWizardStepRoute);\r\n // if (isObject(cameFromPage) && cameFromPage.partId) {\r\n // props.toggleSelectionFeatureInfo(cameFromPage);\r\n // }\r\n // props.setCameFromPage(\"sqft\");\r\n // };\r\n // if (isFirefox()) {\r\n // setTimeout(() => {\r\n // leaveSqft();\r\n // }, 0)\r\n // } else {\r\n // leaveSqft();\r\n // }\r\n // };\r\n\r\n const sendPostMessageToSqft = () => {\r\n // if (this.iframeElement && this.iframeElement.contentWindow) {\r\n // this.iframeElement.contentWindow.postMessage({action, payload}, window.location.href);\r\n // }\r\n };\r\n // const resetData() {\r\n // closeSQFTCalc();\r\n // sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.resetHistory);\r\n // }\r\n const saveSQFTHistory = () => {\r\n sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.saveHistory);\r\n };\r\n\r\n return children(handleAddToQuoteClick, prepareSQFTData);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n measureUnit: store.sqftState.measureUnit,\r\n quotes: store.quotesState.quotes,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n activeRoomType: store.sqftMenuState.activeRoomType,\r\n cartItems: store.cartState.cartItems,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n sqftVisited: store.sqftState.sqftFeaturesPopup.visited,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n useSqftCartPopup: store.sqftState.sqftFeaturesPopup.enabled,\r\n cameFromPage: store.cartState.cameFromPage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setQuotes,\r\n setSquareFeet,\r\n setMaterialsPageSubSteps,\r\n changeSqftFeaturesPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setSqftMeasureUnit,\r\n toggleShowManualCalculation,\r\n setSqftFromFeature,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithAddToQuote);\r\n","import EventManager from \"../canvas/store/sqftEventManager\";\r\nimport workspace from \"../canvas/core/workspace\";\r\nimport config from \"../canvas/store/sqftConfig\";\r\nimport MiteredController from \"../canvas/core/controls/mitered\";\r\nimport FreeDraw from \"../canvas/core/controls/freeDraw\";\r\nimport UnderlaymentController from \"../canvas/core/controls/underlayment\";\r\n\r\nexport const resetEvents = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n workspace.setAllowEdges(false);\r\n workspace.setAllowBumpoutEdges(false);\r\n};\r\n\r\nexport const handleResizeClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(this);\r\n workspace.setAllowEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n};\r\n\r\nexport const handleSpacerClick = function () {\r\n // EventManager.stealCursor(true);\r\n // EventManager.resetCursor(this);\r\n // workspace.setAllowEdges(true);\r\n // workspace.setAllowLineHighlight(true);\r\n // setTimeout(function () {\r\n // workspace.setAllowLineHighlight(false)\r\n // }, 1000)\r\n};\r\n\r\nexport const handleRotateClick = function () {\r\n //EventManager.stealCursor(true);\r\n //EventManager.setCursor(\"rotate-left\", this, true);\r\n EventManager.stealCursor(true);\r\n config.workspace.menuItemActive = \"rotate-left\";\r\n};\r\n\r\nexport const handleWallClick = function () {\r\n EventManager.stealCursor(true);\r\n config.workspace.menuItemActive = \"wall\";\r\n FreeDraw.init();\r\n};\r\n\r\nexport const handleDuplicateClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.setCursor(\"duplicate\", this, true);\r\n config.workspace.menuItemActive = \"duplicate\";\r\n};\r\n\r\nexport const handleAngleClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n config.highlight.rotateAngle = true;\r\n workspace.getShapes().forEach((shape) => {\r\n if (Array.isArray(shape.rotateAngleParts) && shape.rotateAngleParts.length) {\r\n // todo fix bumpout rotation and remove this\r\n if (shape.isWithBumpout()) return;\r\n /////////////////////////////////////////\r\n shape.activateRotateAngle();\r\n }\r\n });\r\n};\r\n\r\nexport const handleTextClick = function () {\r\n};\r\n\r\nexport const handleResetClick = function () {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n};\r\n\r\n//todo sqft-react\r\nexport const handleMiteredClick = () => {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor(self);\r\n\r\n // let cursor = new Cursor();\r\n // cursor.setCursorImage('./images/cursors/plus_blue.png');\r\n\r\n if (workspace.miteredController === null) {\r\n workspace.miteredController = new MiteredController();\r\n }\r\n workspace.miteredController.createCursor();\r\n workspace.miteredController.registerEvents();\r\n\r\n workspace.setAllowMiteredEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n\r\n //Bumpout.addBumpout_onClick();\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n}\r\n\r\n//todo sqft-react\r\nexport const handleUnderlaymentClick = () => {\r\n EventManager.stealCursor(true);\r\n EventManager.resetCursor();\r\n\r\n // let cursor = new Cursor();\r\n // cursor.setCursorImage('./images/cursors/plus_blue.png');\r\n\r\n if (workspace.underlaymentController === null) {\r\n workspace.underlaymentController = new UnderlaymentController();\r\n }\r\n workspace.underlaymentController.createCursor();\r\n workspace.underlaymentController.registerEvents();\r\n\r\n workspace.setAllowMiteredEdges(true);\r\n workspace.setAllowLineHighlight(true);\r\n\r\n //Bumpout.addBumpout_onClick();\r\n setTimeout(function () {\r\n workspace.setAllowLineHighlight(false)\r\n }, 1000)\r\n}\r\n","import React, {Fragment} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport SearchIcon from '@mui/icons-material/Search';\r\n\r\nimport LookViewTypeSwitcher from \"../../../../../../../look/lookNavigation/lookMain/lookViewTypeSwitcher\";\r\nimport {\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_BUTTONS_LEVEL3\r\n} from \"../../../../../../constants\";\r\nimport {\r\n setSQFTActiveButton,\r\n setSQFTActiveLevel3Button,\r\n setSQFTMenuOpened\r\n} from \"../../../../../../../../actions/sqftMenuFunctions\";\r\nimport {setLookActiveCategory} from \"../../../../../../../../actions/lookFunctions\";\r\nimport {showFilters} from \"../../../../../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../../../../../actions/groheFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../../../../../../appLayout\";\r\n\r\nconst SQFTFeaturesHeader = (props) => {\r\n const { headerTitle, partId } = props;\r\n //const {searchInputValue , setSearchInput} = props;\r\n const { intl, setSQFTActiveButton, setSQFTMenuOpened, activeLevel3Button, setSQFTActiveLevel3Button,\r\n setLookActiveCategory, showFilters, isFiltersOpened, setGroheFiltersSearchText, fabricatorData } = props;\r\n\r\n const handleClose = () => {\r\n setSQFTMenuOpened(SIDEBAR_NAVIGATION_BUTTONS.move);\r\n setSQFTActiveButton(SIDEBAR_NAVIGATION_BUTTONS.move);\r\n }\r\n\r\n const handleSearchClick = (e) => {\r\n void e;\r\n if (activeLevel3Button === SIDEBAR_NAVIGATION_BUTTONS_LEVEL3.filters) {\r\n setSQFTActiveLevel3Button(null);\r\n setGroheFiltersSearchText(\"\");\r\n showFilters(false);\r\n } else {\r\n setLookActiveCategory(partId); // set filters featureGroup\r\n showFilters(!isFiltersOpened);\r\n setSQFTActiveLevel3Button(SIDEBAR_NAVIGATION_BUTTONS_LEVEL3.filters);\r\n }\r\n }\r\n\r\n // const handleInputChange = (e) => {\r\n // setSearchInput(e.target.value);\r\n // }\r\n let featureGroupName = \"\";\r\n if (partId) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n featureGroupName = getFeatureGroupName(featureGroup, intl, fabricatorData);\r\n }\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n { headerTitle ? headerTitle : featureGroupName }\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/* /!**!/*/}\r\n {/*
    */}\r\n
    \r\n )\r\n}\r\n\r\nSQFTFeaturesHeader.protoTypes = {\r\n featureTitleId: PropTypes.string,\r\n partId: PropTypes.string\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeLevel3Button: store.sqftMenuState.activeLevel3Button,\r\n isFiltersOpened: store.filterState.showFilters,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened,\r\n setSQFTActiveLevel3Button,\r\n setLookActiveCategory,\r\n showFilters,\r\n setGroheFiltersSearchText\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SQFTFeaturesHeader)\r\n);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst ENTER_KEY = 13;\r\nconst rgx = /^[0-9]*\\.?[0-9]*$/;\r\n\r\nexport default class TextInput extends React.Component {\r\n\r\n inputElement = React.createRef();\r\n\r\n state = {\r\n value: this.props.value,\r\n editing: false,\r\n numberInput: false\r\n };\r\n\r\n static propTypes = {\r\n onChange: PropTypes.func.isRequired,\r\n onRealChange: PropTypes.func,\r\n onBlur: PropTypes.func,\r\n className: PropTypes.string,\r\n numberInput: PropTypes.bool,\r\n id: PropTypes.string,\r\n autoComplete: PropTypes.string,\r\n maxValue: PropTypes.number,\r\n };\r\n\r\n onChange = (event) => {\r\n let value = event.target.value;\r\n\r\n if (!value.match(rgx) && this.props.numberInput) {\r\n return false;\r\n }\r\n if (this.props.numberInput && this.props.maxValue && (this.getUpdatedValue(value) >= this.props.maxValue)) {\r\n value = this.props.maxValue;\r\n }\r\n this.setState({\r\n value\r\n });\r\n if (this.props.onRealChange) {\r\n this.props.onRealChange(value);\r\n }\r\n };\r\n\r\n onBlur = (event) => {\r\n let value = event.target.value;\r\n this.finishEditing(value);\r\n if (this.props.onBlur) {\r\n this.props.onBlur();\r\n }\r\n };\r\n\r\n getUpdatedValue = (value) => {\r\n if (!this.props.numberInput) {\r\n return value\r\n }\r\n if (value.indexOf('.') === 0) {\r\n value = +(\"0\"+value); // dot on the beginning\r\n }\r\n if (value.toString().indexOf(\".\") === (value.toString().length - 1)) {\r\n value = value.substring(0, value.length - 1); // dot on the end\r\n }\r\n if (this.props.maxValue && (+value > this.props.maxValue)) {\r\n value = this.props.maxValue;\r\n }\r\n return +value || 0\r\n }\r\n\r\n finishEditing = (value) => {\r\n value = this.getUpdatedValue(value);\r\n this.setState({\r\n editing: false\r\n }, () => {\r\n this.props.onChange(value);\r\n })\r\n };\r\n\r\n onFocus = () => {\r\n let value = this.props.numberInput && this.props.currencySing\r\n ? this.props.value.replace(this.props.currencySing,\"\").replace(\"%\",\"\").replace(\",\",\"\")\r\n : this.props.value;\r\n value = (value === \"Included\" ? \"\" : value);\r\n this.setState({\r\n editing: true,\r\n value\r\n })\r\n };\r\n\r\n handleKeyDown = e => {\r\n if (e.keyCode === ENTER_KEY) {\r\n // this.finishEditing(this.state.value);\r\n e.target.blur();\r\n }\r\n };\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n","import * as types from './actionTypes';\r\n\r\nexport const setIframeIntegrationRequest = (iframeIntegrationRequest) => ({\r\n type: types.SET_IFRAME_INTEGRATION_REQUEST,\r\n payload: {iframeIntegrationRequest}\r\n})\r\n\r\nexport const setIframeIntegrationResponse = (iframeIntegrationResponse) => ({\r\n type: types.SET_IFRAME_INTEGRATION_RESPONSE,\r\n payload: {iframeIntegrationResponse}\r\n})\r\n","import React, {useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ExpandMore from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport LookFeaturePrice from \"../lookNavigation/lookMain/lookListFeature/lookFeaturePrice\";\r\nimport LookListMainFeatureActions from \"./listFeatureActions/lookListMainFeatureActions\";\r\nimport LookFeatureQuantity from \"./lookFeatureQuantity\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport LookListBundleFeatures from \"./lookListBundleFeatures\";\r\nimport {cartItemInStock, featureIsBundle, getBundledFeatures} from \"../lookNavigation/lookFunctions2\";\r\nimport {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport GroheCartItemActions from \"../grohe/groheCart/groheCartItemActions\";\r\nimport LookListMainFeatureCheckbox from \"./lookListMainFeatureCheckbox\";\r\nimport LookListMainFeatureShipping from \"./lookListMainFeatureShipping\";\r\nimport {getFeatureGroupName, getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport LookFeatureSku from \"../lookNavigation/lookMain/lookFeature/lookFeatureSku\";\r\n\r\nconst LookListMainFeature = (props) => {\r\n\r\n const {intl, cartItem, quantity, cartItems, isBundleChild, showUnlockCalculations, showCartItems, cItemsAddedToParentCart,\r\n isMobile, withShipping, isPhoneNumberValidated, fabricatorData} = props;\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const {cartFeature} = cartItem;\r\n const [bundleExpanded, setBundleExpanded] = useState(true);\r\n\r\n const outOfStock = (\r\n \r\n \r\n \r\n );\r\n\r\n const expandBundleButton = (\r\n setBundleExpanded(!bundleExpanded)}>\r\n \r\n \r\n );\r\n\r\n const relatedFeatures = getBundledFeatures(cartFeature);\r\n const isBundle = featureIsBundle(cartFeature, cartItems);\r\n const inStock = cartItemInStock(cartItem);\r\n const isBundleParent = isBundle && cartFeature.partId === \"shower_fixture\" && relatedFeatures.length > 1;\r\n\r\n const showPriceLocked = getFeatureIsLocked(cartFeature) || (fabricatorSettings.enableQuote && !isPhoneNumberValidated);\r\n\r\n return (\r\n
  • \r\n
    \r\n {withShipping ? null : }\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {isBundle\r\n ? : null}\r\n \r\n

    \r\n {IS_LIXIL_SERVERS\r\n ? \r\n : cartFeature.getParent ? getFeatureGroupName(cartFeature.getParent(), intl, fabricatorData) : null}\r\n

    \r\n {!withShipping ? (\r\n

    \r\n \r\n {/*{isInStock(lookActiveFeature) ? null : (*/}\r\n {/* */}\r\n {/* */}\r\n {/**/}\r\n {/*)}*/}\r\n

    \r\n ) : null}\r\n {withShipping ? : null}\r\n
    \r\n {(isMobile && withShipping) || !fabricatorSettings.showPricing ? null : (\r\n
    \r\n {isBundleParent ? null : (\r\n inStock ? : outOfStock\r\n )}\r\n
    \r\n )}\r\n {isBundle ? (\r\n
    \r\n {expandBundleButton}\r\n
    \r\n ) : null}\r\n {isBundleParent ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {(isMobile && withShipping) || !fabricatorSettings.showPricing ? null\r\n : IS_PRODUCT_JOURNEY\r\n ? \r\n : }\r\n
    \r\n {isBundle && bundleExpanded ? : null}\r\n
  • \r\n )\r\n};\r\n\r\nLookListMainFeature.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface).isRequired,\r\n withShipping: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {cartItems, cItemsAddedToParentCart} = store.cartState;\r\n const {showUnlockCalculations, showCartItems} = store.unlockCalculationsState;\r\n const {isMobile} = store.serverState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n lookExpanded,\r\n lookViewType,\r\n quantity: ownProps.cartItem.quantity,\r\n cartItems,\r\n showUnlockCalculations,\r\n showCartItems,\r\n cItemsAddedToParentCart,\r\n isMobile,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListMainFeature)\r\n)\r\n","import React, {PureComponent} from 'react';\r\nimport { hashHistory } from \"react-router\";\r\nimport classnames from 'classnames';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nclass HomeButton extends PureComponent {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeButton\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n toggleSelectionWindow, setCameFromPage, setQtActiveCategory, changeActivePartRelatedItemIndex\r\n} from \"../../actions/actionFunctions\";\r\nimport Analytics from './../../analytics';\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport ProjectScopeFunctions from '../projectScope/projectScopeFunctions';\r\n\r\nclass MobileMenu extends ProjectScopeFunctions {\r\n\r\n static propTypes = {\r\n smallButton: PropTypes.bool,\r\n smallButtonClassName: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n toggle: false,\r\n showRelatedItems: false,\r\n showSubNav: false\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off('click', this.handleMobileBlur);\r\n }\r\n\r\n handleItemClick = (bvDataPart) => {\r\n Analytics.sendClickEvent(\"mobile-menu-item\");\r\n const layout = getCurrentLayout();\r\n if(bvDataPart === \"Return to Website\") {\r\n this.setState({showSubNav: true});\r\n } else {\r\n $(document).off('click', this.handleMobileBlur);\r\n if (layout.qtCategories) {\r\n const qtCategory = layout.qtCategories.find(qtCategory => qtCategory.name === bvDataPart);\r\n this.goToMaterialsPageCommon(qtCategory.subParts[0].part, bvDataPart);\r\n } else {\r\n this.goToMaterialsPageCommon(layout.parts[bvDataPart].subParts(false)[0].part, bvDataPart);\r\n }\r\n }\r\n };\r\n\r\n handleBack = () => {\r\n if(this.state.showSubNav) {\r\n this.setState({showSubNav: false});\r\n } else {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n handleToggleDropdown = () => {\r\n Analytics.sendClickEvent(\"mobile-menu-toggle-\" + (this.state.toggle ? 'show': 'hide'));\r\n this.setState({\r\n toggle: !this.state.toggle,\r\n showSubNav: false\r\n }, () => {\r\n this.state.toggle\r\n ? $(document).on('click', this.handleMobileBlur)\r\n : $(document).off('click', this.handleMobileBlur)\r\n })\r\n };\r\n\r\n handleMobileBlur = (e) => {\r\n const navClick = e.target.closest('[class*=\"mobmenu\"]');\r\n const backButtonClick = e.target.closest('.ui-back');\r\n if (!navClick && !backButtonClick) {\r\n this.handleToggleDropdown();\r\n }\r\n };\r\n\r\n getMenuItems = () => {\r\n const layout = getCurrentLayout();\r\n if (!layout) {\r\n return []\r\n }\r\n if (this.props.mobileNav && this.props.mobileNav.length > 0 && window.location.href.includes(\"materials\")) {\r\n return [\"Return to Website\"]\r\n }\r\n let menu = (layout.qtCategories)\r\n ? layout.qtCategories.map(qtCategory => qtCategory.name)\r\n : [...this.props.layoutParts]\r\n if (this.props.mobileNav && this.props.mobileNav.length > 0) {\r\n menu.unshift(\r\n \"Return to Website\"\r\n );\r\n }\r\n return menu\r\n };\r\n\r\n render() {\r\n\r\n const menuItems = this.getMenuItems();\r\n\r\n return menuItems.length ? (\r\n
    \r\n {this.props.smallButton ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n {this.props.mobileNav && this.props.mobileNav.length > 0 ?\r\n \r\n : null }\r\n \r\n
    \r\n
    \r\n ) : null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n layoutParts: store.stepsState.layoutParts,\r\n mobileNav: store.navigationState.mobileNav\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleSelectionWindow,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex\r\n})(MobileMenu);\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {toFixedFeatureCost, TAX_DISCOUNT_PCT, getFeatureUnit, getPriceWithCurrency} from \"../../../misc/helpers\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\nimport FeaturePriceInput from \"./featurePriceInput\";\r\n\r\nconst FeatureInfoPrice = (props) => {\r\n\r\n let {\r\n mainFeaturePrice = false,\r\n selectionFeatureInfo,\r\n showDiscount = false,\r\n fabricatorData,\r\n isPhoneNumberValidated,\r\n intl,\r\n unitAfter,\r\n withTotalSlabCost,\r\n cartItemEditFeature,\r\n qtActiveCategory,\r\n showPrice,\r\n } = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (mainFeaturePrice && fabricatorSettings.leadCaptureShoppingCart && !isPhoneNumberValidated) {\r\n return null\r\n }\r\n\r\n if ((typeof showPrice !== 'undefined') && !showPrice && !(document.kvConfig.isBackend && selectionFeatureInfo && selectionFeatureInfo.dbFeature\r\n && selectionFeatureInfo.dbFeature.priceEditable)) {\r\n return null\r\n }\r\n\r\n selectionFeatureInfo = props.feature || selectionFeatureInfo;\r\n\r\n let quantity = 1;\r\n if (mainFeaturePrice) { // price is changing depending on quantity\r\n quantity = (props.accItemQuantity || (props.accItemQuantity === 0))\r\n ? props.accItemQuantity\r\n : props.selectionInfoQuantity || 1\r\n }\r\n const price = toFixedFeatureCost(selectionFeatureInfo, quantity, qtActiveCategory, withTotalSlabCost, cartItemEditFeature);\r\n const salePercentage = TAX_DISCOUNT_PCT;\r\n const priceOld = Math.trunc((price + price*salePercentage/100) * 100) / 100;\r\n\r\n if (mainFeaturePrice) {\r\n return (\r\n
    \r\n
    \r\n {getPriceWithIncluded(price, selectionFeatureInfo, fabricatorData, intl.messages)}\r\n
    \r\n {/*
    (${selectionFeatureInfo.dbFeature.unit || \"Each\"})
    */}\r\n
    \r\n )\r\n }\r\n\r\n const unit = getFeatureUnit(selectionFeatureInfo, intl, fabricatorData, quantity);\r\n\r\n const getPriceSection = () => {\r\n\r\n // if unitAfter then it is row item, we don't need it to show in row view\r\n if (!unitAfter && document.kvConfig.isBackend && selectionFeatureInfo && selectionFeatureInfo.dbFeature\r\n && selectionFeatureInfo.dbFeature.priceEditable) {\r\n return \r\n }\r\n\r\n return (\r\n
    \r\n \r\n {!price\r\n ? getPriceWithIncluded(price, selectionFeatureInfo, fabricatorData, intl.messages)\r\n : unitAfter\r\n ? getPriceWithCurrency(fabricatorSettings, price, selectionFeatureInfo)\r\n : `${getPriceWithCurrency(fabricatorSettings, price, selectionFeatureInfo)} (${unit})`}\r\n \r\n {price && unitAfter ? ({unit}) : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n {showDiscount && price ? {getPriceWithCurrency(fabricatorSettings, priceOld, selectionFeatureInfo)} : null}\r\n {getPriceSection()}\r\n {showDiscount && price ? (\r\n \r\n {`${intl.formatMessage({id: \"quotingTool.featureInfo.discountSavePercent\"})} ${getPriceWithCurrency(fabricatorSettings, Math.trunc((priceOld - price) * 100) / 100, selectionFeatureInfo)} (${salePercentage}%)`}\r\n \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n featureInfoCount: store.selectionState.featureInfoCount, // to update component when price is changed\r\n fabricatorData: store.fabricatorState,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n selectionInfoQuantity: store.selectionState.selectionInfoQuantity,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nFeatureInfoPrice.propTypes = {\r\n feature: PropTypes.object,\r\n mainFeaturePrice: PropTypes.bool,\r\n accItemQuantity: PropTypes.number,\r\n size: PropTypes.string,\r\n unitAfter: PropTypes.bool,\r\n withTotalSlabCost: PropTypes.bool,\r\n showPrice: PropTypes.bool,\r\n cartItemEditFeature: PropTypes.shape(cartItemInterface),\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfoPrice)\r\n);\r\n","export const getListItemHeight = (props) => {\r\n\r\n const {isMobile, selectionWindowView, itemsList} = props;\r\n\r\n // console.log(\"itemsList\", itemsList);\r\n\r\n if (isMobile || !itemsList || !itemsList.current) {\r\n return 0\r\n }\r\n let widthPercentage = 32.3;\r\n switch(selectionWindowView) {\r\n case 1:\r\n widthPercentage = 32.3;\r\n break;\r\n case 2:\r\n widthPercentage = 24;\r\n break;\r\n case 3:\r\n widthPercentage = 19;\r\n break;\r\n default:\r\n break;\r\n }\r\n return Math.round(itemsList.current.clientWidth*widthPercentage/100);\r\n\r\n};\r\n\r\nexport const shouldReplaceSelectionInfoFeature = (selectedFeature) => {\r\n if ((document.kvConfig.visualizerType === \"bvScene\" || document.kvConfig.visualizerType === \"bvLook\")\r\n && selectedFeature.getParent) {\r\n const featureG = selectedFeature.getParent();\r\n if (featureG && featureG.oneLayerPosition && featureG.activeFeature\r\n && (featureG.activeFeature.dbFeature.id !== selectedFeature.dbFeature.id)\r\n && featureG.activeFeature.getMatchingFeatureName && selectedFeature.getMatchingFeatureName\r\n && (featureG.activeFeature.getMatchingFeatureName() === selectedFeature.getMatchingFeatureName())) {\r\n selectedFeature = featureG.activeFeature; // we changed left change to right in nav position modal\r\n }\r\n }\r\n return selectedFeature\r\n}\r\n","import React, {Component, Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\n\r\nimport {UserPopupTypes} from \"../../visComponents/constants\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getFeatureIsLocked, toFixedFeatureCost} from '../../../misc/helpers';\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport FeatureCartItemsCount from \"../featureCartItemsCount\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\nimport Config from \"../../../config\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {shouldReplaceSelectionInfoFeature} from \"../../qkbPages/materialsCommon/materialsCommonFunctions\";\r\n// import MaterialsWizardAddToCartAndSkipButton\r\n// from \"../../qkbPages/materialsWizard/materialsWizardAddToCartAndSkipButton\";\r\n\r\nclass SelectionGridItem extends Component {\r\n\r\n static propTypes = {\r\n currentFeature: PropTypes.object.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n checkIfFeatureSelected: PropTypes.func.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n handleUserLoginClick: PropTypes.func.isRequired,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n };\r\n\r\n // handleInfoClick = () => {\r\n // const {isPhoneNumberValidated, fabricatorData, currentFeature, handleUserLoginClick} = this.props;\r\n // const fabricatorSettings = fabricatorData.settings;\r\n //\r\n // if ((fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && (!currentFeature.part.dbFeature.unlocked && !isPhoneNumberValidated)){\r\n // handleUserLoginClick();\r\n // } else {\r\n // toggleSelectionFeatureInfo(currentFeature.part);\r\n // }\r\n // };\r\n\r\n goToFeatureInfo = () => {\r\n const selectedFeature = shouldReplaceSelectionInfoFeature(this.props.currentFeature.part);\r\n this.props.toggleSelectionFeatureInfo(selectedFeature);\r\n this.props.setCameFromPage(\"materials\"); // no more visualizer or shoppingcart switch\r\n };\r\n\r\n render() {\r\n\r\n const {currentFeature, fabricatorData, isPhoneNumberValidated, styles, showAdvancedQuoting, qtActiveCategory, intl,\r\n language, isWizard, wizardGroup} = this.props;\r\n const selected = this.props.checkIfFeatureSelected(currentFeature.part);\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const featureIsLocked = getFeatureIsLocked(currentFeature.part);\r\n\r\n const wizardSkipAndAddToCartButtonVisible = isWizard && wizardGroup && wizardGroup.skipProductInfo;\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote && !featureIsLocked;\r\n const quoteOrUnlockButtonVisible = (featureIsLocked || (getQuoteEnabled && !isPhoneNumberValidated))\r\n && !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !featureIsLocked && !fabricatorData.hidePricesFromUser;\r\n\r\n const isAddToCartButtonVisible = selected && fabricatorSettings.showPricing && !featureIsLocked && !quoteOrUnlockButtonVisible && !showAdvancedQuoting\r\n && !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const infoButtonVisible = !wizardSkipAndAddToCartButtonVisible;\r\n\r\n const price = toFixedFeatureCost(currentFeature.part, 1, qtActiveCategory);\r\n\r\n return (\r\n
    this.props.handleFeatureClick(currentFeature, event)}\r\n onDoubleClick={infoButtonVisible ? this.goToFeatureInfo : null}>\r\n \r\n {currentFeature.part.vanitySize ?\r\n {currentFeature.part.vanitySize}\" : null\r\n }\r\n \r\n {selected ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {/*{wizardSkipAndAddToCartButtonVisible*/}\r\n {/* ? */}\r\n {/* : null}*/}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {infoButtonVisible ? : null}\r\n
    \r\n ) : null}\r\n {/*{currentFeature.part.notAvailableInVisualizer ? (*/}\r\n {/*Not in Visualizer*/}\r\n {/*) : null}*/}\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature.part, fabricatorData, intl.messages)}\r\n \r\n ) : null}\r\n {featureIsLocked ? null : }\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {language} = store.serverState;\r\n return {\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n filterGroups: store.filterState.filterGroups,\r\n showAdvancedQuoting: store.advancedQuotingState.showAdvancedQuoting,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n language,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SelectionGridItem)\r\n);\r\n","import PropTypes from \"prop-types\";\r\n\r\nexport const shiftFilterTitleInterface = {\r\n shiftTitleIndex: PropTypes.number,\r\n filterValue: PropTypes.object.isRequired,\r\n elementIndex: PropTypes.number,\r\n positionTop: PropTypes.number,\r\n columnPosition: PropTypes.number,\r\n type: PropTypes.string\r\n};\r\n","import React, {useEffect} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {setStaticCanvasImage} from \"../../actions/visualizerFunctions\";\r\nimport {getRoomImageFromQtCategory} from \"../../misc/categorySwitchingFunctions\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\n\r\nconst HardcodedCanvasImage = (props) => {\r\n\r\n const {disableLoader, enableLoader, staticCanvasImage, fabricatorData, qtActiveCategory, setStaticCanvasImage,\r\n activePartRelatedItemIndex, activeQuoteIndex, cartItems, visualizerIsChanging} = props;\r\n\r\n useEffect(() => {\r\n // console.log(\"qtActiveCategory\", qtActiveCategory);\r\n if (!fabricatorData.settings.useCategorySwitching || !qtActiveCategory || !window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n if (!layout.qtCategories) {\r\n return null\r\n }\r\n const currentRoomName = qtActiveCategory.trim().toLowerCase();\r\n const currentQtCat = layout.qtCategories.find(qtCategory => qtCategory.name === qtActiveCategory);\r\n\r\n const {fabricatorSubscriptions} = fabricatorData;\r\n\r\n if (currentRoomName !== getCommonVisualizerType().toLowerCase()\r\n && currentQtCat\r\n && currentQtCat.subParts[activePartRelatedItemIndex]\r\n && currentQtCat.subParts[activePartRelatedItemIndex].part.partId !== \"room\"\r\n && (!fabricatorData.settings.allowVisualizerSwitching || !fabricatorSubscriptions.some(subscription => subscription && subscription.service.toLowerCase() === currentRoomName))) {\r\n // allowVisualizerSwitching is turned off - show image, or check, if there are no available visualizers with clicked room\r\n setStaticCanvasImage(getRoomImageFromQtCategory(qtActiveCategory, fabricatorData.settings));\r\n } else if (staticCanvasImage) {\r\n setStaticCanvasImage(\"\");\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [qtActiveCategory])\r\n\r\n useEffect(() => {\r\n if (visualizerIsChanging) {\r\n return\r\n }\r\n setStaticCanvasImage(getRoomImageFromQtCategory(\"\", activeQuoteIndex));\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeQuoteIndex, cartItems, visualizerIsChanging]) // update when visualizer is switched\r\n\r\n if (!staticCanvasImage) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n disableLoader ? disableLoader() : null}\r\n onLoadStart={() => enableLoader ? enableLoader() : null}\r\n alt=\"\"\r\n src={staticCanvasImage} />\r\n
    \r\n )\r\n};\r\n\r\nHardcodedCanvasImage.propTypes = {\r\n enableLoader: PropTypes.func,\r\n disableLoader: PropTypes.func,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {staticCanvasImage} = store.bathroomVisualizerState;\r\n const fabricatorData = store.fabricatorState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {activePartRelatedItemIndex} = store.selectionState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {cartItems} = store.cartState;\r\n const {visualizerIsChanging} = store.serverState;\r\n\r\n return {\r\n staticCanvasImage,\r\n fabricatorData,\r\n qtActiveCategory,\r\n activePartRelatedItemIndex,\r\n activeQuoteIndex,\r\n cartItems,\r\n visualizerIsChanging,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setStaticCanvasImage\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(HardcodedCanvasImage);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {loaderDisable, loaderEnable} from \"./loaderView\";\r\nimport {getNavigationButtons} from \"../../api/server-api\";\r\nimport NoInternetIcon from \"./icons/noInternetIcon\";\r\n\r\nconst NoInternetOverlay = (props) => {\r\n\r\n // const {networkConnection, showAdvancedQuoting, isMobile} = props;\r\n const {networkConnection} = props;\r\n\r\n if (networkConnection) { // show only if internet is offline\r\n return null\r\n }\r\n\r\n const retryConnectionClick = async () => {\r\n loaderEnable();\r\n await getNavigationButtons(true);\r\n loaderDisable();\r\n }\r\n\r\n return (\r\n //
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {networkConnection, isMobile} = store.serverState;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n return {\r\n networkConnection,\r\n isMobile,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(NoInternetOverlay)\r\n","import React, {Fragment} from \"react\";\r\n\r\nexport default {\r\n \"vanity_faucet\": (\r\n \r\n ),\r\n \"bathtub_fixture\": (\r\n \r\n ),\r\n \"bathtub_body\": (\r\n \r\n ),\r\n // \"shower_fixture\": (\r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // ),\r\n \"shower_fixture\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_head\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_arm\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_head_bundle\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_door\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_wall\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_pan_combo\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"hand_shower_kit\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"replacement_tub\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"toilet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_pedestal_sink\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_countertop\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"submenu_accessories\": (\r\n \r\n \r\n \r\n ),\r\n \"vanity_cabinet\": (\r\n \r\n ),\r\n \"vanity_console\": (\r\n \r\n \r\n \r\n ),\r\n \"vanity_legs\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_middle\": (\r\n \r\n ),\r\n \"vanity_washstand\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_ptrap\": (\r\n \r\n ),\r\n \"soap_dish\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"glass_holder\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"paper_holder\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"robe_hook\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"towel_bar\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"towel_ring\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"corner_shelf\": (\r\n \r\n ),\r\n \"grab_bar\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"shower_seats\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n //*** KITCHEN ICONS ***//\r\n \"faucet\": (\r\n \r\n ),\r\n \"backsplash\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"top_cabinet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"bottom_cabinet\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"hood\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"countertop\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"crown_molding\": (\r\n \r\n ),\r\n \"range\": (\r\n \r\n \r\n \r\n ),\r\n \"oven\": (\r\n \r\n \r\n \r\n ),\r\n \"fridge\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"handle\": (\r\n \r\n ),\r\n \"stove\": (\r\n \r\n ),\r\n \"center_island_stovetop\": (\r\n \r\n ),\r\n \"center_island_countertop\": (\r\n \r\n ),\r\n \"center_island_faucet\": (\r\n \r\n ),\r\n \"center_island_sink\": (\r\n \r\n \r\n \r\n \r\n ),\r\n \"floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"bathroom_floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"kitchen_floor\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"edge_profile\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"center_island_edge\": (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"vanity_backsplash\": (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n \"wall_union\": (\r\n \r\n ),\r\n};\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getPriceWithCurrency, toFixedPrice} from \"../../../../../misc/helpers\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport LookFeaturePrice from \"./lookFeaturePrice\";\r\n\r\nconst LookFeaturePairPrice = (props) => {\r\n\r\n const {lookFeature, fabricatorSettings} = props;\r\n\r\n if (fabricatorSettings.showSalePrices && (typeof lookFeature.dbFeature.fabricatorCost == \"number\")\r\n && (lookFeature.dbFeature.fabricatorCost !== lookFeature.dbFeature.cost)) {\r\n return (\r\n
    \r\n \r\n {/* old price is cost property, the new one is fabricatorCost*/}\r\n {getPriceWithCurrency(fabricatorSettings, toFixedPrice(lookFeature.dbFeature.cost), lookFeature)}\r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n return \r\n};\r\n\r\nLookFeaturePairPrice.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n return {\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeaturePairPrice)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {enableSquareFootage, setSqftFromFeature, setSquareFootageGroup} from \"../../../../../actions/sqftFunctions\";\r\nimport {setCameFromPage} from \"../../../../../actions/actionFunctions\";\r\nimport {GroheSQFTIcon} from \"../../../../common/icons\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {canShowSqftButtonForFeature, canShowSqftCabinetButtonForFeature} from \"../../../../../misc/helpers\";\r\nimport {SQFT_GROUP} from \"../../../../sqft/constants\";\r\n\r\nconst GroheFeatureSQFTButton = (props) => {\r\n\r\n const {featureOpened, shopPageOpened, setCameFromPage, setSqftFromFeature, className, isIcon, intl,\r\n fabricatorSettings, enableSquareFootage, setSquareFootageGroup} = props;\r\n\r\n if (featureOpened) {\r\n if (!canShowSqftButtonForFeature(featureOpened, fabricatorSettings) && !canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings)) {\r\n return null\r\n }\r\n }\r\n\r\n const handleSQFTButtonClick = () => {\r\n Analytics.sendClickEvent(shopPageOpened\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.shopSQFTButton\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureSQFT);\r\n if (featureOpened) {\r\n setSqftFromFeature({cartFeature: featureOpened});\r\n setCameFromPage(featureOpened);\r\n }\r\n // change url to get cabinets group\r\n // const sqftUrl = (featureOpened && canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings))\r\n // ? ROUTES.sqft + \"?cabinets=1\"\r\n // : ROUTES.sqft\r\n // history.push(sqftUrl);\r\n\r\n // use redux to get cabinets group\r\n if (featureOpened && canShowSqftCabinetButtonForFeature(featureOpened, fabricatorSettings)) {\r\n setSquareFootageGroup(SQFT_GROUP.cabinets)\r\n }\r\n enableSquareFootage(true);\r\n };\r\n\r\n if (isIcon) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheFeatureSQFTButton.propTypes = {\r\n featureOpened: PropTypes.shape(featureInterface),\r\n className: PropTypes.string,\r\n isIcon: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {shopPageOpened} = store.shopState;\r\n const {settings} = store.fabricatorState;\r\n return {\r\n shopPageOpened,\r\n fabricatorSettings: settings,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n setSqftFromFeature,\r\n setSquareFootageGroup,\r\n enableSquareFootage,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureSQFTButton)\r\n )\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\n\r\nconst GroheFeatureSoldOut = (props) => {\r\n const {disabled, intl, fabricatorData} = props;\r\n if (!disabled) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n {fabricatorData.isAmericanStandard ? null : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nGroheFeatureSoldOut.propTypes = {\r\n disabled: PropTypes.bool\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFeatureSoldOut)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import FeatureDescription from \"../../../../visComponents/featureDescription\";\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\n\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport {GroheLockIcon} from \"../../../../common/icons\";\r\nimport Analytics, {PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\n\r\nconst GroheFeatureLockedBadge = (props) => {\r\n\r\n const {lookActiveFeature, setLookOverlayOpened} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const lockedButtonClick = () => {\r\n Analytics.sendClickEvent(PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureLockedBadge);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n \r\n

    \r\n {/*{lookActiveFeature.dbFeature.sku ? (*/}\r\n {/*

    */}\r\n {/* \r\n {/*

    */}\r\n {/*) : null}*/}\r\n {/*{lookActiveFeature.dbFeature.description ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n
    \r\n \r\n
    \r\n

    \r\n \r\n

    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n\r\n return {\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(GroheFeatureLockedBadge)\r\n","import * as types from \"./actionTypes\";\r\n\r\nexport const setGroheWizardOpened = (wizardOpened = false) => ({\r\n type: types.SET_GROHE_WIZARD_OPENED,\r\n payload: {wizardOpened}\r\n});\r\n\r\nexport const setGroheWizardName = (wizardName = false) => ({\r\n type: types.SET_GROHE_WIZARD_NAME,\r\n payload: {wizardName}\r\n});\r\n\r\nexport const setGroheWizardStep = (wizardStep = false) => ({\r\n type: types.SET_GROHE_WIZARD_STEP,\r\n payload: {wizardStep}\r\n});\r\n","import React, {useEffect, useState, Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\nimport LookVirtualizedList from \"./lookVirtualizedList\";\r\nimport {useIsMounted, usePrevious} from \"../../../../../misc/helperHooks\";\r\nimport GroheVirtualizedList from \"../../../grohe/groheNavigation/groheFeatures/groheVirtualizedList\";\r\nimport {getFeatureGroupName, getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {LOOK_NAVIGATION_LIST_TYPES, LOOK_OVERLAYS} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getLixilRequiredNotIncludedFeatures} from \"../../../grohe/groheNavigation/groheFunctions\";\r\nimport {setGroheRequiredButNotIncludedFeature} from \"../../../../../actions/groheFunctions\";\r\nimport LookFeatureRemoveButton from \"../lookFeatureRemoveButton\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport LookListFeature from \"../lookListFeature/lookListFeature\";\r\nimport LookFiltersReset from \"../../lookFilters/lookFiltersReset\";\r\nimport {\r\n getReorderedItems,\r\n getNavigationItemsLists,\r\n getSortedNavItems,\r\n pricingIsLocked, getReplacedNavItemsWithUnlockedFeatures\r\n} from \"../../lookNavigationFunctions\";\r\nimport {setLookLockedTutorial} from \"../../../../../actions/lookFunctions\";\r\nimport {scrolledVerticalToTheEnd} from \"../../../../visComponents/navigation/navUtils\";\r\nimport {checkIfLookFeaturesReceived, getAdditionalFeaturesOnScroll} from \"../../../../../api/look-api\";\r\nimport NavigationLoader from \"../../../ui/navigationLoader\";\r\n// import {COUNTERTOP_GROUP} from \"../../../../kvComponent/core/constants\";\r\nimport {\r\n checkIfNeedToReceiveFeaturesIfFiltersApplied,\r\n getFeaturesFromBackendWithFilters\r\n} from \"../../../../../misc/filtersFunctions\";\r\nimport LookMainCategoryLoading from \"./lookMainCategoryLoading\";\r\nimport Analytics from \"../../../../../analytics\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {setNavigationLoading} from \"../../../../../actions/navigationFunctions\";\r\n\r\n\r\nconst LookMainCategory = (props) => {\r\n\r\n const {lookActiveFeature, lookViewType, lookActiveCategory, contentHeight, isMobile, filterGroups, intl,\r\n fabricatorData, groheFiltersSearchText, selectedFilters, requiredButNotIncludedFeature, navigationCount,\r\n setGroheRequiredButNotIncludedFeature, lookActiveFeaturePositionInList, lookViewTypeWasChanged, lookLockedTutorial,\r\n setLookLockedTutorial, allFeaturesWereLoaded, contextMenu, wizardActiveItem, navigationLoadingActive,\r\n setNavigationLoading, isPhoneNumberValidated, lookOverlayOpened} = props;\r\n\r\n const [navItemsLists, setNavItemsLists] = useState([]);\r\n const [firstOpenedFeature, setFirstOpenedFeature] = useState(null);\r\n const [firstOpenedConditions, setFirstOpenedConditions] = useState(null);\r\n\r\n const [shouldRunAnalytics, setShouldRunAnalytics] = useState(false);\r\n\r\n const isMounted = useIsMounted();\r\n const prevActiveCategory = usePrevious(lookActiveCategory);\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n // const [, forceUpdate] = useReducer(x => x + 1, 0);\r\n\r\n const setReceivedFeatures = async () => {\r\n if (lookActiveCategory && isMounted()) {\r\n let forFeature = lookActiveFeature;\r\n if (featureGroup && !featureGroup.allFeaturesReceived && !featureGroup.requestInProgress) {\r\n setShouldRunAnalytics(true);\r\n checkIfLookFeaturesReceived(featureGroup);\r\n return // we will update this component when navigationCount is changed\r\n }\r\n if (Array.isArray(selectedFilters) && selectedFilters.length && featureGroup && !featureGroup.requestInProgress) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(selectedFilters, featureGroup);\r\n if (checkPassed) {\r\n setNavigationLoading(true);\r\n await getFeaturesFromBackendWithFilters(featureGroup, checkPassed.arrayOfNeededFiltersToReceive);\r\n if (!isMounted()) {\r\n return\r\n }\r\n setNavigationLoading(false);\r\n }\r\n }\r\n if (!forFeature && featureGroup && isMobile && !IS_PRODUCT_JOURNEY) {\r\n forFeature = featureGroup.activeFeature\r\n }\r\n let navFeatures;\r\n if (requiredButNotIncludedFeature) {\r\n navFeatures = getLixilRequiredNotIncludedFeatures(requiredButNotIncludedFeature).map((feature) => ({part: feature}))\r\n setNavItemsLists([{\r\n type: LOOK_NAVIGATION_LIST_TYPES.regular,\r\n navItems: navFeatures\r\n }]);\r\n } else if (featureGroup) {\r\n const firstFeature = firstOpenedFeature && firstOpenedFeature.partId === lookActiveCategory ? firstOpenedFeature : null;\r\n const firstConditions = firstOpenedFeature && firstOpenedFeature.partId === lookActiveCategory ? firstOpenedConditions : null;\r\n navFeatures = layout.designNavigationItems(\r\n {part: featureGroup},\r\n selectedFilters,\r\n groheFiltersSearchText,\r\n forFeature,\r\n \"all\", // added for non lixil fabricators to display not in visualizer features\r\n filterGroups,\r\n {firstFeature, firstConditions},\r\n );\r\n\r\n if (featureGroup.partId === \"vanity_sink\" && contextMenu.clickedOnItem) {\r\n if (contextMenu.clickedOnItem === \"vanity_pedestal_sink\") {\r\n navFeatures = navFeatures.filter(navItem => {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n })\r\n } else if (contextMenu.clickedOnItem === \"vanity_sink\") {\r\n navFeatures = navFeatures.filter(navItem => {\r\n return !navItem.part.metaData[\"MountType\"] || !navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n })\r\n }\r\n }\r\n\r\n navFeatures = getReplacedNavItemsWithUnlockedFeatures(navFeatures, filterGroups);\r\n\r\n // here we sort features\r\n navFeatures = getReorderedItems(navFeatures, lookActiveFeature, lookActiveCategory, featureGroup);\r\n\r\n if (!wizardActiveItem && lookActiveCategory\r\n && (!prevActiveCategory || (prevActiveCategory !== lookActiveCategory) || shouldRunAnalytics)) {\r\n if (shouldRunAnalytics) {\r\n setShouldRunAnalytics(false);\r\n }\r\n Analytics.sendEcommerceEvent(\"view_item_list\", {\r\n item_list_id: featureGroup.partId,\r\n item_list_name: featureGroup.dbName || featureGroup.partName || \"\",\r\n items: navFeatures.map((navItem, navItemIndex) => getAnalyticsEcommerceItem(navItem.part, 1, navItemIndex))\r\n });\r\n }\r\n\r\n if (typeof lookActiveFeaturePositionInList === \"number\") { // swap places with clicked position (is used only for cases when 1) option click 2) navigation item click)\r\n const currentPositionInList = navFeatures.findIndex(navItem => navItem.part.dbFeature.id === lookActiveFeature.dbFeature.id);\r\n if (currentPositionInList >= 0 && currentPositionInList !== lookActiveFeaturePositionInList) {\r\n [navFeatures[currentPositionInList], navFeatures[lookActiveFeaturePositionInList]] = [navFeatures[lookActiveFeaturePositionInList], navFeatures[currentPositionInList]]\r\n }\r\n }\r\n\r\n const nItemsLists = getNavigationItemsLists(navFeatures, lookActiveFeature);\r\n\r\n if (fabricatorData.settings.leadCapture && !lookLockedTutorial.finished && !isPhoneNumberValidated\r\n && !IS_PRODUCT_JOURNEY && featureGroup.allFeaturesReceived && !(isMobile && lookActiveFeature)\r\n && !wizardActiveItem && !(lookOverlayOpened && (lookOverlayOpened === LOOK_OVERLAYS.intro))) {\r\n let firstLockedIndex, firstUnlockedIndex;\r\n if (nItemsLists.length === 1) {\r\n firstLockedIndex = nItemsLists[0].navItems.findIndex(navItem => getFeatureIsLocked(navItem.part));\r\n firstUnlockedIndex = nItemsLists[0].navItems.findIndex(navItem => !getFeatureIsLocked(navItem.part));\r\n }\r\n setLookLockedTutorial({\r\n visible: true,\r\n withGrid: nItemsLists.length === 1,\r\n firstLockedIndex,\r\n firstUnlockedIndex,\r\n })\r\n }\r\n\r\n setNavItemsLists(nItemsLists);\r\n }\r\n //console.log(\"navItems\", navItems);\r\n // forceUpdate(1);\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 500)\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 1500)\r\n // setTimeout(() => {\r\n // if (isMounted()) {\r\n // forceUpdate(1);\r\n // }\r\n // }, 3000)\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n setReceivedFeatures();\r\n return () => {\r\n if (requiredButNotIncludedFeature && lookActiveFeature) {\r\n let reqFeatures = getLixilRequiredNotIncludedFeatures(requiredButNotIncludedFeature);\r\n reqFeatures.push(requiredButNotIncludedFeature);\r\n if (!reqFeatures.find(navItem => navItem.dbFeature.id === lookActiveFeature.dbFeature.id)) {\r\n setGroheRequiredButNotIncludedFeature(null);\r\n }\r\n } else if(requiredButNotIncludedFeature && !lookActiveFeature) {\r\n setGroheRequiredButNotIncludedFeature(null);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveCategory, groheFiltersSearchText, selectedFilters, requiredButNotIncludedFeature,\r\n setGroheRequiredButNotIncludedFeature, navigationCount, lookOverlayOpened]);\r\n\r\n useEffect(() => {\r\n if (lookActiveCategory) {\r\n setFirstOpenedFeature(lookActiveFeature);\r\n if (lookActiveFeature && lookActiveFeature.getParent) {\r\n setFirstOpenedConditions(lookActiveFeature.getParent().getArrayOfConditions(true))\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveCategory]);\r\n\r\n // if (!visualizersLoadedLength) {\r\n // return \r\n // }\r\n\r\n if (wizardActiveItem) { // why we need this render? not sure. probably because of the useEffect, didn't removed for now\r\n return null\r\n }\r\n\r\n if (IS_PRODUCT_JOURNEY && !lookActiveFeature) {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n\r\n if (featureGroup && !featureGroup.allFeaturesReceived) {\r\n return \r\n }\r\n\r\n let featureGroupName = \"\";\r\n if (IS_PRODUCT_JOURNEY) {\r\n featureGroupName = getFeatureGroupName(featureGroup, intl, fabricatorData);\r\n }\r\n\r\n const showFeaturesOnly = lookActiveCategory && !layout.partIdExistInQtCategory(lookActiveCategory, true); // to prevent calculating features on each render\r\n // const showAllWallsCheckbox = lookActiveFeature && showFeaturesOnly && LOOK_WALLS_ONLY.includes(lookActiveFeature.partId);\r\n\r\n const desRecNavItemList = navItemsLists.find(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.designRec);\r\n const regularNavItemList = navItemsLists.find(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.regular);\r\n const notMatchingNavItemList = navItemsLists.filter(navItemList => navItemList.type === LOOK_NAVIGATION_LIST_TYPES.notMatchingMeta);\r\n\r\n if (!regularNavItemList) {\r\n return null\r\n }\r\n\r\n const onScrollHandler = async (scrollObject) => {\r\n if (!featureGroup || allFeaturesWereLoaded.includes(document.kvConfig.visualizerType)) {\r\n return;\r\n }\r\n if (featureGroup.getRealFeaturesReceivedProperty() || !scrolledVerticalToTheEnd(scrollObject)) {\r\n return\r\n }\r\n setNavigationLoading(true);\r\n await getAdditionalFeaturesOnScroll(featureGroup);\r\n await setReceivedFeatures();\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n setNavigationLoading(false);\r\n }\r\n\r\n const onEventScrollHandler = (event) => {\r\n onScrollHandler(event.target)\r\n }\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n let allProducts = regularNavItemList.navItems;\r\n if (desRecNavItemList && desRecNavItemList.navItems) {\r\n allProducts = [...desRecNavItemList.navItems, ...regularNavItemList.navItems];\r\n }\r\n if (notMatchingNavItemList && notMatchingNavItemList.length) {\r\n notMatchingNavItemList.forEach(navItemList => {\r\n allProducts = [...allProducts, ...navItemList.navItems];\r\n })\r\n }\r\n const {isLixil, pricingLocked} = pricingIsLocked();\r\n if (!isLixil && pricingLocked) {\r\n allProducts = getSortedNavItems(allProducts);\r\n }\r\n return (\r\n \r\n {isMobile ? null : (\r\n \r\n
    \r\n {featureGroupName} ({regularNavItemList.navItems.length})\r\n {/*{showAllWallsCheckbox ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n {/*{!showAllWallsCheckbox && lookActiveFeature && lookActiveFeature.getParent().canBeDisabled && showFeaturesOnly ? (*/}\r\n {lookActiveFeature && lookActiveFeature.getParent().canBeDisabled && showFeaturesOnly ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n {(updateLookCartItem) => {\r\n\r\n if (!selectedFilters.length && !desRecNavItemList && !notMatchingNavItemList.length && regularNavItemList) {\r\n // simple list, react virtualized, all as usual\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n
    \r\n {desRecNavItemList || selectedFilters.length ? (\r\n \r\n

    \r\n \r\n

    \r\n {selectedFilters.length && (!desRecNavItemList || !desRecNavItemList.navItems.length) ? (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n ) : null}\r\n {desRecNavItemList ? (\r\n
    \r\n {desRecNavItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n ) : null}\r\n
    \r\n ) : null}\r\n {regularNavItemList.navItems.length ? (\r\n \r\n

    \r\n {regularNavItemList.navTranslate && notMatchingNavItemList.length ? : null}\r\n {regularNavItemList.navTranslate && notMatchingNavItemList.length ? \" \" : null}\r\n \r\n

    \r\n
    \r\n {regularNavItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n
    \r\n ) : null}\r\n {notMatchingNavItemList.length ? notMatchingNavItemList.map((navItemList) => {\r\n return (\r\n \r\n

    \r\n \r\n

    \r\n
    \r\n {navItemList.navItems.map(navItem => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n }) : null}\r\n
    \r\n {navigationLoadingActive ? : null}\r\n
    \r\n )\r\n }}\r\n
    \r\n )\r\n};\r\n\r\nLookMainCategory.propTypes = {\r\n contentHeight: PropTypes.number\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookViewType, lookActiveCategory, lookActiveFeaturePositionInList, lookViewTypeWasChanged,\r\n navigationCount, lookLockedTutorial, contextMenu, lookOverlayOpened} = store.lookState;\r\n const {visualizersLoaded, isMobile, allFeaturesWereLoaded} = store.serverState;\r\n const partId = lookActiveFeature ? lookActiveFeature.getParent().partId : \"\";\r\n const {selectedFilters, filterGroups} = store.filterState;\r\n const {groheFiltersSearchText, requiredButNotIncludedFeature} = store.groheState;\r\n const {wizardActiveItem} = store.wizardState;\r\n const {navigationLoadingActive} = store.navigationState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n // const {activePreset} = store.bathroomVisualizerState;\r\n\r\n return {\r\n isMobile,\r\n lookActiveFeature,\r\n lookViewType,\r\n lookActiveCategory,\r\n lookViewTypeWasChanged,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n partId,\r\n fabricatorData: store.fabricatorState,\r\n filterGroups,\r\n groheFiltersSearchText,\r\n selectedFilters,\r\n requiredButNotIncludedFeature,\r\n lookActiveFeaturePositionInList,\r\n navigationCount,\r\n lookLockedTutorial,\r\n allFeaturesWereLoaded,\r\n contextMenu,\r\n wizardActiveItem,\r\n navigationLoadingActive,\r\n isPhoneNumberValidated,\r\n lookOverlayOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheRequiredButNotIncludedFeature,\r\n setLookLockedTutorial,\r\n setNavigationLoading,\r\n};\r\n\r\nexport default injectIntl (\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainCategory)\r\n);\r\n","import React, {Fragment, useEffect, useRef} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ReplayIcon from '@mui/icons-material/Replay';\r\nimport {setLookRestoreState, updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport WithZoomToFeature from \"../../../hocs/withZoomToFeature\";\r\nimport LookCanvasContext from \"../../../lookCanvasContext\";\r\n// import LookFeatureRevertButtonModal from \"./lookFeatureRevertButtonModal\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\n\r\nconst LookFeatureRevertButton = (props) => {\r\n\r\n const {lookActiveFeature, intl, updateNavigationCount, lookRestoreState, setLookRestoreState, isMobile,\r\n lookActiveCategory, currentActiveFeature} = props;\r\n const anchorRef = useRef(null);\r\n // const [showRevertModal, setShowRevertModal] = useState(false);\r\n\r\n useEffect(() => {\r\n if (((!isMobile && lookActiveFeature) || (isMobile && lookActiveCategory)) && !lookRestoreState) {\r\n const layout = getCurrentLayout();\r\n setLookRestoreState(layout.getActiveFeaturesAsObject(false, false, true));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookActiveFeature, lookActiveCategory])\r\n\r\n if (!isMobile && !lookActiveFeature) {\r\n return null\r\n }\r\n\r\n if (isMobile && !lookActiveCategory) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n if (!featureGroup) {\r\n return null\r\n }\r\n\r\n const revertButtonClick = (zoomToFeatureGroup, updateLookCartItem) => {\r\n if (!lookRestoreState) {\r\n return false\r\n }\r\n const layout = getCurrentLayout();\r\n layout.setActiveFeaturesFromObject(lookRestoreState);\r\n if (!isMobile) {\r\n zoomToFeatureGroup(featureGroup.partId);\r\n setLookRestoreState(null);\r\n }\r\n updateNavigationCount();\r\n updateLookCartItem(featureGroup.lookActiveFeature, true);\r\n };\r\n\r\n const disabled = !lookRestoreState\r\n || !lookRestoreState[featureGroup.partId]\r\n || (currentActiveFeature && (lookRestoreState[featureGroup.partId] === currentActiveFeature.dbFeature.id))\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n \r\n {(zoomToFeatureGroup) => (\r\n \r\n {(updateLookCartItem) => {\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n return isMobile ? (\r\n revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n ) : (\r\n
    \r\n setShowRevertModal(true)}\r\n // onMouseLeave={() => setShowRevertModal(false)}\r\n onClick={() => revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n setShowRevertModal(true)}\r\n // onMouseLeave={() => setShowRevertModal(false)}\r\n onClick={() => revertButtonClick(zoomToFeatureGroup, updateLookCartItem)}>\r\n \r\n \r\n {/*{isMobile ? null : (*/}\r\n {/* */}\r\n {/*)}*/}\r\n \r\n )\r\n }}\r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookFeatureRevertButton.propTypes = {\r\n // lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookRestoreState, lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n\r\n let currentActiveFeature = lookActiveFeature;\r\n if (isMobile && lookActiveCategory) {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(lookActiveCategory);\r\n currentActiveFeature = featureGroup ? featureGroup.activeFeature : null;\r\n }\r\n\r\n return {\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n lookRestoreState,\r\n isMobile,\r\n currentActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateNavigationCount,\r\n setLookRestoreState,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureRevertButton)\r\n)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\n\r\nimport {\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setWizardShowFeatureSection\r\n} from \"../../../../../actions/wizardFunctions\";\r\nimport {getCurrentGroups, getCurrentWizardNavItems} from \"./lookWizardFunctions\";\r\nimport LookWizardContentFinalPrice from \"./lookWizardContentFinalPrice\";\r\nimport GroheWizardCompletedButtons from \"../../../grohe/groheNavigation/groheWizard/groheWizardCompletedButtons\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport GroheMobileFooterFiltersButton from \"../../../grohe/groheMobile/groheMobileFooterFiltersButton\";\r\nimport GroheMobileFooterViewButton from \"../../../grohe/groheMobile/groheMobileFooterViewButton\";\r\nimport WithUpdateLookCartItem from \"../../../hocs/withUpdateLookCartItem\";\r\n\r\nconst LookWizardContentButtons = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, setWizardActiveStep, wizardSelectedValues, setWizardSelectedValues,\r\n isMobile, intl, filterGroups, wizardShowFeatureSection, setWizardShowFeatureSection,\r\n groheActiveFeatureQuantity} = props;\r\n\r\n if (!wizardActiveItem) {\r\n return null\r\n }\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n const wizardGroup = currentGroups[0];\r\n\r\n const onSkipClick = () => {\r\n // const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n // if (featureGroup && featureGroup.activeFeature) {\r\n // disableFeature(featureGroup.activeFeature, updateLookCartItem);\r\n // updateCanvasCount();\r\n // }\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n }\r\n });\r\n setWizardActiveStep(wizardActiveStep + 1);\r\n }\r\n\r\n const startAgain = () => {\r\n setWizardSelectedValues({}, true);\r\n setWizardActiveStep(0);\r\n }\r\n\r\n const previousClick = () => {\r\n // const newValues = Object.assign({}, wizardSelectedValues);\r\n // delete newValues[wizardActiveStep];\r\n // delete newValues[wizardActiveStep - 1];\r\n // setWizardSelectedValues(newValues, true);\r\n setWizardActiveStep(wizardActiveStep - 1)\r\n }\r\n\r\n const nextClick = () => {\r\n if (!wizardSelectedValues[wizardActiveStep]) {\r\n onSkipClick();\r\n } else {\r\n if (IS_PRODUCT_JOURNEY) {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n ...(wizardSelectedValues[wizardActiveStep] || {}),\r\n quantity: groheActiveFeatureQuantity,\r\n }\r\n });\r\n }\r\n setWizardActiveStep(wizardActiveStep + 1);\r\n }\r\n }\r\n\r\n const returnClick = () => {\r\n setWizardShowFeatureSection(false);\r\n }\r\n\r\n // const closeWizardClick = () => {\r\n // Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardCompletedClose);\r\n // history.push(getLookIdUrl());\r\n // };\r\n\r\n const skipEnabled = wizardActiveStep > -1 && currentGroups.length === 1 && wizardGroup.notRequired;\r\n const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n\r\n let nextDisabled = !wizardSelectedValues[wizardActiveStep];\r\n if (nextDisabled && currentGroups.length === 1 && wizardGroup.nodeType === \"group\") {\r\n const navItems = getCurrentWizardNavItems(wizardSelectedValues, wizardActiveStep, wizardActiveItem, wizardGroup, null, filterGroups);\r\n nextDisabled = !!navItems.length;\r\n }\r\n\r\n if (isMobile) {\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n\r\n if (wizardActiveStep === -1) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n if (isCompletedStep) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {isCompletedStep || currentGroups.length > 1 ? null : (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {wizardShowFeatureSection ? null : (\r\n \r\n {skipEnabled ? (\r\n \r\n ) : null}\r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n {(wizardActiveStep > -1 && currentGroups.length) ? (\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {skipEnabled ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n
    \r\n {(wizardActiveStep === -1) ? (\r\n \r\n ) : null}\r\n {(wizardActiveStep > -1 && currentGroups.length) ? (\r\n \r\n \r\n \r\n \r\n ) : null}\r\n {isCompletedStep && IS_PRODUCT_JOURNEY ? (\r\n \r\n ) : null}\r\n {isCompletedStep && !IS_PRODUCT_JOURNEY ? (\r\n \r\n ) : null}\r\n
    \r\n
    \r\n {skipEnabled ? (\r\n \r\n \r\n \r\n \r\n ) : null}\r\n {isCompletedStep && IS_PRODUCT_JOURNEY ? : null}\r\n {/*{isCompletedStep ? (*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/*) : null}*/}\r\n
    \r\n
    \r\n )\r\n\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n // const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues, wizardShowFeatureSection} = store.wizardState;\r\n const {isMobile} = store.serverState;\r\n const {filterGroups} = store.filterState;\r\n // const fabricatorData = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n\r\n return {\r\n // activePreset,\r\n // bvPresets,\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n isMobile,\r\n filterGroups,\r\n wizardShowFeatureSection,\r\n // fabricatorData,\r\n groheActiveFeatureQuantity,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setWizardShowFeatureSection\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)((props) => {\r\n return (\r\n \r\n {(updateLookCartItem) => }\r\n \r\n )\r\n })\r\n)\r\n","import { combineReducers } from 'redux';\r\nimport { loadingBarReducer } from 'react-redux-loading-bar';\r\n\r\nimport stepsReducer from \"./stepsReducer\";\r\nimport selectionReducer from \"./selectionReducer\";\r\nimport serverReducer from \"./serverReducer\";\r\nimport bathroomVisualizerReducer from \"./bathroomVisualizerReducer\";\r\nimport loaderReducer from \"./loaderReducer\";\r\nimport userReducer from \"./userReducer\";\r\nimport cartReducer from \"./cartReducer\";\r\nimport instReducer from \"./instReducer\";\r\nimport messageBoxReducer from \"./messageBoxReducer\";\r\nimport filterReducer from './filterReducer';\r\nimport navigationReducer from './navigationReducer';\r\nimport fabricatorReducer from './fabricatorReducer';\r\nimport sqftReducer from './sqftReducer';\r\nimport docuSignReducer from './docuSignReducer';\r\nimport qtReducer from './qtReducer';\r\nimport tutorialReducer from './tutorialReducer';\r\nimport contractSigningReducer from \"./contractSigningReducer\";\r\nimport initialFlowReducer from \"./initialFlowReducer\";\r\nimport priceWorksheetReducer from \"./priceWorksheetReducer\";\r\nimport unlockCalculationsReducer from \"./unlockCalculationsReducer\";\r\nimport quotesReducer from \"./quotesReducer\";\r\nimport advancedQuotingReducer from \"./advancedQuotingReducer\";\r\nimport assignQuoteReducer from \"./assignQuoteReducer\";\r\nimport printReducer from \"./printReducer\";\r\nimport wizardReducer from \"./wizardReducer\";\r\nimport sqftMenuReducer from \"./sqftMenuReducer\";\r\nimport sqftManualCalculationReducer from \"./sqftManualCalculationReducer\";\r\nimport sqftSlabReducer from \"./sqftSlabReducer\";\r\nimport sqftResourcesReducer from \"./sqftResourcesReducer\";\r\nimport sqftMiteredReducer from \"./sqftMiteredReducer\";\r\nimport lookReducer from \"./lookReducer\";\r\nimport groheReducer from \"./groheReducer\";\r\nimport iframeIntegrationReducer from \"./iframeIntegrationReducer\";\r\nimport groheQuotingToolReducer from \"./groheQuotingToolReducer\";\r\nimport paymentReducer from \"./paymentReducer\";\r\nimport historyReducer from \"./historyReducer\";\r\nimport shopReducer from \"./shopReducer\";\r\nimport sqftTutorialReducer from \"./sqftTutorialReducer\";\r\n\r\n// Combine Reducers\r\nexport const reducers = combineReducers({\r\n advancedQuotingState: advancedQuotingReducer,\r\n assignQuoteState: assignQuoteReducer,\r\n bathroomVisualizerState: bathroomVisualizerReducer,\r\n cartState: cartReducer,\r\n contractSigningState: contractSigningReducer,\r\n docuSignState: docuSignReducer,\r\n fabricatorState: fabricatorReducer,\r\n filterState: filterReducer,\r\n groheQuotingToolState: groheQuotingToolReducer,\r\n groheState: groheReducer,\r\n historyState: historyReducer,\r\n iframeIntegrationState: iframeIntegrationReducer,\r\n initialFlowState: initialFlowReducer,\r\n instState: instReducer,\r\n loaderState: loaderReducer,\r\n loadingBar: loadingBarReducer,\r\n lookState: lookReducer,\r\n messageBoxState: messageBoxReducer,\r\n navigationState: navigationReducer,\r\n paymentState: paymentReducer,\r\n priceWorksheetState: priceWorksheetReducer,\r\n printState: printReducer,\r\n qtState: qtReducer,\r\n quotesState: quotesReducer,\r\n selectionState: selectionReducer,\r\n serverState: serverReducer,\r\n shopState: shopReducer,\r\n sqftManualCalculationState: sqftManualCalculationReducer,\r\n sqftMenuState: sqftMenuReducer,\r\n sqftMiteredState: sqftMiteredReducer,\r\n sqftResourceState: sqftResourcesReducer,\r\n sqftSlabState: sqftSlabReducer,\r\n sqftState: sqftReducer,\r\n sqftTutorialState: sqftTutorialReducer,\r\n stepsState: stepsReducer,\r\n tutorialState: tutorialReducer,\r\n unlockCalculationsState: unlockCalculationsReducer,\r\n userState: userReducer,\r\n wizardState: wizardReducer\r\n});\r\n\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n isSwitching : false,\r\n activeStep: 0,\r\n layoutParts: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_STEP:\r\n\r\n if (state.isSwitching) {\r\n return Object.assign({}, state) // don't do anything until animation will finish\r\n }\r\n\r\n if (action.payload.activeStep > state.layoutParts.length - 1) {\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep - 1\r\n })\r\n } else {\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep <= 0 ? 0 : action.payload.activeStep\r\n });\r\n }\r\n\r\n case types.SET_STEP_SWITCHING:\r\n case types.SET_LAYOUT_DATA_PARTS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n selectionOpened: false,\r\n selectionGroup: \"\",\r\n activePartRelatedItemIndex: 0,\r\n selectionWindowView: 3,\r\n selectionInfoQuantity: 1,\r\n pulseFeatureInfoQuantity: false,\r\n materialsInfoFeatureModules: [], // arrayOf {partId: 123, quantity: 1}\r\n selectionFeatureInfo: null,\r\n vanityTypeSelected: false,\r\n showerTypeSelected: false,\r\n activeFeature: null,\r\n updateFeatureCount: 0, // counter - is used for update footer items\r\n relatedGroups: [],\r\n relatedGroupsSearch: \"\",\r\n showDescriptionCover: true,\r\n galleryVisible: false,\r\n galleryShowActiveFeature: false, // show related product gallery\r\n galleryActiveImageIndex: 0,\r\n subSteps: {\r\n edges: [],\r\n backsplashes: [],\r\n },\r\n activeSubStep: 0,\r\n showNotCompatibleView: false,\r\n productNoteEditorVisible: false,\r\n rowItems: [],\r\n materialsCanvasClass: \"\",\r\n featureInfoCount: 0, // is used to update feature info page\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SELECTION_WINDOW:\r\n case types.SET_SELECTION_WINDOW_VIEW:\r\n case types.TOGGLE_SELECTION_INFO:\r\n case types.SET_VANITY_TYPE:\r\n case types.CHANGE_SELECTION_INFO_QUANTITY:\r\n case types.TOGGLE_PULSE_FEATURE_INFO_QUANTITY:\r\n case types.CHANGE_MATERIALS_INFO_FEATURE_MODULES:\r\n case types.SET_DEFAULT_SELECTION_GROUP:\r\n case types.SET_SHOWER_TYPE:\r\n case types.CHANGE_SELECTION_ACTIVE_PART_RELATED_INDEX:\r\n case types.SET_RELATED_GROUPS_SEARCH:\r\n case types.TOGGLE_SHOW_DESCRIPTION_COVER:\r\n case types.TOGGLE_GALLERY_VISIBLE:\r\n case types.SET_GALLERY_ACTIVE_IMAGE_INDEX:\r\n case types.SET_MATERIALS_PAGE_ACTIVE_SUB_STEP:\r\n case types.TOGGLE_NOT_COMPATIBLE_VIEW:\r\n case types.TOGGLE_PRODUCT_NOTE_EDITOR_VISIBLE:\r\n case types.SET_ROW_ITEMS:\r\n case types.SET_MATERIALS_PAGE_CANVAS_CLASS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_RELATED_GROUPS:\r\n return Object.assign({}, state, {\r\n relatedGroups: [...action.payload.relatedGroups]\r\n });\r\n case types.SET_MATERIALS_PAGE_SUB_STEPS:\r\n state = {...state, subSteps: Object.assign({}, state.subSteps, action.payload.subSteps)};\r\n break;\r\n case types.SET_ACTIVE_FEATURE:\r\n return Object.assign({}, state, {\r\n activeFeature: action.payload.activeFeature || null,\r\n updateFeatureCount: ++state.updateFeatureCount\r\n });\r\n case types.UPDATE_FEATURE_INFO_COUNT:\r\n return Object.assign({}, state, {\r\n featureInfoCount: ++state.featureInfoCount\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import uniq from \"lodash/uniq\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {getShareUrl, getUrlParam} from \"../misc/helpers\";\r\nimport {AVAILABLE_LANGUAGES, IS_LOOK_JOURNEY, IS_PRODUCT_JOURNEY, IS_LIXIL_UI} from \"../config\";\r\nimport COLOR_THEMES from \"../colorThemes\";\r\nimport {\r\n parseFabricatorSettings\r\n} from \"./fabricatorReducer\";\r\nimport {WHITE_PAGE_ROUTES} from \"../bvcomponents/look/core/constants\";\r\nimport {\r\n hardCodeIsAmericanStandard,\r\n hardCodeIsAmericanImport,\r\n hardCodeIsCaesarStone,\r\n hardCodeIsModerno,\r\n hardCodeIsNhance\r\n} from \"../misc/fabricatorHardcode\";\r\nimport {isTouchDevice} from \"../misc/utils\";\r\nimport Misc from \"../misc/misc\";\r\n\r\nconst urlLanguage = (getUrlParam(\"language\") || \"\").replace(\"/\", \"\");\r\nconst urlTheme = (getUrlParam(\"theme\") || \"\").replace(\"/\", \"\");\r\n\r\nconst getDefaultTheme = () => {\r\n if (hardCodeIsCaesarStone()) {\r\n return \"caes\"\r\n } else if (hardCodeIsAmericanImport() || hardCodeIsAmericanStandard()) {\r\n return \"as\"\r\n } else if (hardCodeIsModerno()) {\r\n return \"moderno\"\r\n } else if (hardCodeIsNhance()) {\r\n return \"nhance\"\r\n } else if (IS_PRODUCT_JOURNEY || window.location.href.includes(\"nav=product\")) {\r\n return \"grohe\"\r\n } else if (IS_LOOK_JOURNEY || window.location.href.includes(\"nav=look\")) {\r\n return \"look\"\r\n }\r\n return Object.keys(COLOR_THEMES)[0];\r\n}\r\n\r\nconst activeTheme = urlTheme && COLOR_THEMES[urlTheme] ? urlTheme : getDefaultTheme();\r\n\r\nconst initialState = {\r\n bvData: {\r\n features: []\r\n },\r\n newQuoteData: {},\r\n groupedFeatures: {},\r\n groupedFeaturesDescriptions: {},\r\n windowWidth: window.innerWidth || 0,\r\n windowHeight: window.innerHeight || 0,\r\n isMobile: false,\r\n jobId: 0,\r\n stonePricing: {},\r\n documents: [],\r\n visualizersLoaded: [],\r\n cookieAccepted: false,\r\n successNotification: {\r\n show: false,\r\n icon: \"calculate\",\r\n title: \"\",\r\n message: \"\"\r\n },\r\n introVideo: {\r\n introVideoStarted: false,\r\n introVideoFinished: false,\r\n },\r\n shareUrl: \"\",\r\n javascriptErrors: [],\r\n language: urlLanguage && AVAILABLE_LANGUAGES.includes(urlLanguage) ? urlLanguage : \"en-US\",\r\n agreeEmailCheckbox: true,\r\n networkConnection: true,\r\n activeTheme,\r\n amazonImageUrl: \"\",\r\n allFeaturesWereLoaded: [], // to check for lixil room layouts // includes kvState, bvLook, so on\r\n initialVisualizerType: \"\",\r\n allowRouting: false,\r\n allowMainLoading: !(window.location.hash === \"#/shop\" || window.location.hash.startsWith(\"#/shop/\")),\r\n actionAfterRoomChange: null, // a function that runs after visualizer is changed\r\n visualizerIsChanging: false, // a boolean which is true when visualizer type is changing (from bathroom to kitchen fo example)\r\n initialRoute: window.location.hash,\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n case types.SET_WINDOW_WIDTH: {\r\n if (IS_LIXIL_UI && action.payload.windowWidth >= 1024 && document.body.style.overflow === \"hidden\"\r\n && !(WHITE_PAGE_ROUTES.some(route => window.location.href.includes(\"#\" + route)))) {\r\n document.body.style.overflow = \"\";\r\n }\r\n const isMobile = action.payload.windowWidth <= (IS_PRODUCT_JOURNEY || IS_LOOK_JOURNEY ? 1023 : 991);\r\n const isTouch = isMobile || Misc.isMobile() || isTouchDevice();\r\n isTouch ? document.body.classList.add(\"bv--touch\") : document.body.classList.remove(\"bv--touch\");\r\n return Object.assign({}, state, {\r\n isMobile,\r\n isTouch,\r\n ...action.payload,\r\n })\r\n }\r\n case types.SET_WINDOW_HEIGHT:\r\n case types.SET_COOKIE_ACCEPTED:\r\n case types.SET_LANGUAGE:\r\n case types.SET_AGREE_EMAIL_CHECKBOX:\r\n case types.SET_ACTIVE_THEME:\r\n case types.SET_NETWORK_CONNECTION:\r\n case types.SET_INITIAL_VISUALIZER_TYPE:\r\n case types.SET_AMAZON_IMAGE_URL:\r\n case types.SET_ALLOW_ROUTING:\r\n case types.SET_ALLOW_MAIN_LOADING:\r\n case types.SET_ACTION_AFTER_VISUALIZER_TYPE_CHANGED:\r\n case types.SET_VISUALIZER_TYPE_CHANGING:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_STONE_PRICING:\r\n return Object.assign({}, state, {\r\n stonePricing: Object.assign({}, state.stonePricing, action.payload.stonePricing)\r\n });\r\n case types.SET_ALL_FEATURES_LOADED:\r\n if (state.allFeaturesWereLoaded.includes(action.payload.allFeaturesWereLoaded)) {\r\n return state\r\n }\r\n return Object.assign({}, state, {\r\n allFeaturesWereLoaded: [...state.allFeaturesWereLoaded, action.payload.allFeaturesWereLoaded]\r\n });\r\n case types.SET_JAVASCRIPT_ERRORS:\r\n return Object.assign({}, state, {\r\n javascriptErrors: uniq([...state.javascriptErrors, action.payload.javascriptError])\r\n });\r\n case types.SET_JOB_ID: {\r\n const shareUrl = getShareUrl(action.payload.jobId)\r\n window.shareUrl = shareUrl; // analytics only, we can't use getState() there\r\n return {\r\n ...state,\r\n shareUrl,\r\n jobId: action.payload.jobId,\r\n };\r\n }\r\n case types.TOGGLE_USER_POPUP:\r\n return handleToggleUserPopup(state, action.payload);\r\n case types.ADD_PROJECT_DOCUMENT:\r\n case types.SET_PROJECT_DOCUMENTS_IDS:\r\n return Object.assign({}, state, {\r\n documents: [...action.payload]\r\n });\r\n case types.ADD_VISUALIZERS_LOADED:\r\n return Object.assign({}, state, {\r\n visualizersLoaded: [...state.visualizersLoaded, action.payload.newLoadedVisualizer],\r\n });\r\n case types.SHOW_SUCCESS_NOTIFICATION:\r\n return Object.assign({}, state, {\r\n ...state, successNotification: {...state.successNotification, ...action.payload}\r\n });\r\n case types.SET_INTRO_VIDEO:\r\n return Object.assign({}, state, {\r\n ...state, introVideo: {...state.introVideo, ...action.payload}\r\n });\r\n case types.SET_FABRICATOR_DATA: {\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n const language = settings.language;\r\n return Object.assign({}, state, {\r\n ...state, language: urlLanguage || (language && AVAILABLE_LANGUAGES.includes(language) ? language : state.language)\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n\r\nfunction handleToggleUserPopup(state, {userIsLoggedIn}) {\r\n if (typeof(userIsLoggedIn) != 'undefined' && !userIsLoggedIn) {\r\n return {...state, jobId: 0};\r\n }\r\n\r\n return state;\r\n}\r\n","// this is a \"marching ants\" algorithm used to calc the outline path\r\nexport default function(data, width, height, imgUrl, start) {\r\n // d3-plugin for calculating outline paths\r\n // License: https://github.com/d3/d3-plugins/blob/master/LICENSE\r\n //\r\n // Copyright (c) 2012-2014, Michael Bostock\r\n // All rights reserved.\r\n //\r\n // Redistribution and use in source and binary forms, with or without\r\n // modification, are permitted provided that the following conditions are met:\r\n //* Redistributions of source code must retain the above copyright notice, this\r\n // list of conditions and the following disclaimer.\r\n //* Redistributions in binary form must reproduce the above copyright notice,\r\n // this list of conditions and the following disclaimer in the documentation\r\n // and/or other materials provided with the distribution.\r\n //* The name Michael Bostock may not be used to endorse or promote products\r\n // derived from this software without specific prior written permission.\r\n // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\r\n // lookup tables for marching directions\r\n var d3_geom_contourDx = [1, 0, 1, 1,-1, 0,-1, 1,0, 0,0,0,-1, 0,-1,NaN],\r\n d3_geom_contourDy = [0,-1, 0, 0, 0,-1, 0, 0,1,-1,1,1, 0,-1, 0,NaN];\r\n\r\n function d3_geom_contourStart(grid) {\r\n var x = 0,\r\n y = 0;\r\n\r\n // search for a starting point; begin at origin\r\n // and proceed along outward-expanding diagonals\r\n while (true) {\r\n if (grid(x,y)) {\r\n return [x,y];\r\n }\r\n if ((x === width) && (y === height)) {\r\n console.error('image is empty, can\\'t create polygon -> ', imgUrl);\r\n return false\r\n }\r\n if (x === 0) {\r\n x = y + 1;\r\n y = 0;\r\n } else {\r\n x = x - 1;\r\n y = y + 1;\r\n }\r\n }\r\n }\r\n\r\n function grid(x,y){\r\n const a=data[(y*width+x)*4+3];\r\n return(a>20);\r\n }\r\n\r\n var s = start || d3_geom_contourStart(grid); // starting point\r\n if (!s) {\r\n return [] // return empty array of points if layer is empty\r\n }\r\n var\r\n c = [], // contour polygon\r\n x = s[0], // current x position\r\n y = s[1], // current y position\r\n dx = 0, // next x direction\r\n dy = 0, // next y direction\r\n pdx = NaN, // previous x direction\r\n pdy = NaN, // previous y direction\r\n i = 0;\r\n\r\n do {\r\n // determine marching squares index\r\n i = 0;\r\n if (grid(x-1, y-1)) i += 1;\r\n if (grid(x, y-1)) i += 2;\r\n if (grid(x-1, y )) i += 4;\r\n if (grid(x, y )) i += 8;\r\n\r\n // determine next direction\r\n if (i === 6) {\r\n dx = pdy === -1 ? -1 : 1;\r\n dy = 0;\r\n } else if (i === 9) {\r\n dx = 0;\r\n dy = pdx === 1 ? -1 : 1;\r\n } else {\r\n dx = d3_geom_contourDx[i];\r\n dy = d3_geom_contourDy[i];\r\n }\r\n\r\n // update contour polygon\r\n if (dx != pdx && dy != pdy) {\r\n c.push([x, y]);\r\n pdx = dx;\r\n pdy = dy;\r\n }\r\n\r\n x += dx;\r\n y += dy;\r\n } while (s[0] != x || s[1] != y);\r\n\r\n return c;\r\n\r\n}","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _slicedToArray = function () {\r\n function sliceIterator(arr, i) {\r\n var _arr = [];\r\n var _n = true;\r\n var _d = false;\r\n var _e = undefined;\r\n try {\r\n for (var _i = arr[window.Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\r\n _arr.push(_s.value);\r\n if (i && _arr.length === i) break;\r\n }\r\n } catch (err) {\r\n _d = true;\r\n _e = err;\r\n } finally {\r\n try {\r\n if (!_n && _i[\"return\"]) _i[\"return\"]();\r\n } finally {\r\n if (_d) throw _e;\r\n }\r\n }\r\n return _arr;\r\n }\r\n\r\n return function (arr, i) {\r\n if (Array.isArray(arr)) {\r\n return arr;\r\n } else if (window.Symbol.iterator in Object(arr)) {\r\n return sliceIterator(arr, i);\r\n } else {\r\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\r\n }\r\n };\r\n}();\r\n\r\nexports.default = loadingBarMiddleware;\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar defaultTypeSuffixes = ['PENDING', 'FULFILLED', 'REJECTED'];\r\n\r\nfunction loadingBarMiddleware() {\r\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n var promiseTypeSuffixes = config.promiseTypeSuffixes || defaultTypeSuffixes;\r\n var scope = config.scope || _loading_bar_ducks.DEFAULT_SCOPE;\r\n\r\n return function (_ref) {\r\n var dispatch = _ref.dispatch;\r\n return function (next) {\r\n return function (action) {\r\n if (action.type) {\r\n var _promiseTypeSuffixes = _slicedToArray(promiseTypeSuffixes, 3),\r\n PENDING = _promiseTypeSuffixes[0],\r\n FULFILLED = _promiseTypeSuffixes[1],\r\n REJECTED = _promiseTypeSuffixes[2];\r\n\r\n var isPending = new RegExp(PENDING + '$', 'g');\r\n var isFulfilled = new RegExp(FULFILLED + '$', 'g');\r\n var isRejected = new RegExp(REJECTED + '$', 'g');\r\n\r\n var actionScope = action.meta && action.meta.scope || action.scope || scope;\r\n\r\n if (action.type.match(isPending)) {\r\n dispatch((0, _loading_bar_ducks.showLoading)(actionScope));\r\n } else if (action.type.match(isFulfilled) || action.type.match(isRejected)) {\r\n dispatch((0, _loading_bar_ducks.hideLoading)(actionScope));\r\n }\r\n }\r\n\r\n return next(action);\r\n };\r\n };\r\n };\r\n}","'use strict';\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _reactRedux = require('react-redux');\r\n\r\nvar _loading_bar = require('./loading_bar');\r\n\r\nvar _loading_bar_ducks = require('./loading_bar_ducks');\r\n\r\nvar mapImmutableStateToProps = function mapImmutableStateToProps(state, ownProps) {\r\n return {\r\n loading: state.get('loadingBar')[ownProps.scope || _loading_bar_ducks.DEFAULT_SCOPE]\r\n };\r\n};\r\n\r\nexports.default = (0, _reactRedux.connect)(mapImmutableStateToProps)(_loading_bar.LoadingBar);","import {Font, StyleSheet} from '@react-pdf/renderer';\r\nimport {baseNewImagesPath} from \"../../assets\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport styleHelpers from \"./styles/printDocumentStylesHelpers\";\r\nimport printDocumentStylesDiscounts from \"./styles/printDocumentStylesDiscounts\";\r\n\r\ntry {\r\n Font.register({\r\n family: \"Play\",\r\n src: `${baseNewImagesPath}fonts/play-regular.ttf`\r\n });\r\n Font.register({\r\n family: \"PlayBold\",\r\n src: `${baseNewImagesPath}fonts/play-bold.ttf`\r\n });\r\n Font.register({\r\n family: \"FrutigerLTStd-Light\",\r\n src: `${baseNewImagesPath}fonts/frutiger/FrutigerLTStd-Light.ttf`\r\n });\r\n Font.register({\r\n family: \"Frutiger-Roman\",\r\n src: `${baseNewImagesPath}fonts/frutiger/Frutiger-Roman.ttf`\r\n });\r\n Font.register({\r\n family: \"Roboto\",\r\n src: `${baseNewImagesPath}fonts/Roboto/Roboto-Regular.ttf`\r\n });\r\n Font.register({\r\n family: \"Roboto500\",\r\n src: `${baseNewImagesPath}fonts/Roboto/Roboto-Medium.ttf`\r\n });\r\n} catch (error) {\r\n console.log(\"error registering fonts\", error);\r\n}\r\n\r\nexport default function getPrintColors(activeTheme) {\r\n\r\n const COLORS = {\r\n black: \"#000000\",\r\n red: \"#d0021b\",\r\n gray: \"#828282\",\r\n gray2: \"#7e7e7e\",\r\n gray3: \"#9f9f9f\",\r\n light: \"#c8c8c8\",\r\n white: \"#ffffff\",\r\n };\r\n\r\n switch (activeTheme) {\r\n case \"qc\":\r\n default: {\r\n COLORS.green = IS_LIXIL_UI ? \"#000000\" : \"#9FC522\";\r\n COLORS.blue = IS_LIXIL_UI ? \"#000000\" : \"#4a90e2\";\r\n COLORS.lightBlue = \"#98C3FA\";\r\n COLORS.regular = IS_LIXIL_UI ? \"Roboto\" : \"Play\";\r\n COLORS.bold = IS_LIXIL_UI ? \"Roboto500\" : \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"caes\": {\r\n COLORS.green = \"#f46c42\";\r\n COLORS.blue = \"#58595b\";\r\n COLORS.lightBlue = \"#717275\"; // lighten primary 10%\r\n COLORS.regular = \"FrutigerLTStd-Light\";\r\n COLORS.bold = \"Frutiger-Roman\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"moderno\": {\r\n COLORS.green = \"#d0021b\";\r\n COLORS.blue = \"#1b1b1b\";\r\n COLORS.lightBlue = \"#444444\"; // lighten primary 10%\r\n COLORS.regular = \"Play\";\r\n COLORS.bold = \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n case \"as\": {\r\n COLORS.green = \"#E70026\";\r\n COLORS.blue = \"#000000\";\r\n COLORS.lightBlue = \"#292929\"; // lighten primary 10%\r\n COLORS.regular = \"Play\";\r\n COLORS.bold = \"PlayBold\";\r\n COLORS.black = \"#000000\";\r\n break;\r\n }\r\n }\r\n\r\n return getStyles(COLORS)\r\n\r\n}\r\n\r\nconst getStyles = (COLORS) => StyleSheet.create({\r\n ...styleHelpers,\r\n page: {\r\n paddingTop: 35,\r\n paddingBottom: 65,\r\n paddingHorizontal: 35,\r\n fontFamily: COLORS.regular,\r\n color: COLORS.gray,\r\n fontSize: 10,\r\n },\r\n pageAS: {\r\n paddingTop: 100,\r\n paddingBottom: 65,\r\n paddingHorizontal: 35,\r\n fontFamily: COLORS.regular,\r\n color: COLORS.gray,\r\n fontSize: 10,\r\n },\r\n bold: {\r\n fontFamily: COLORS.bold,\r\n },\r\n black: {\r\n color: COLORS.black,\r\n },\r\n gray: {\r\n color: COLORS.gray,\r\n },\r\n primary: {\r\n color: COLORS.blue,\r\n },\r\n active: {\r\n color: COLORS.green,\r\n },\r\n header: {\r\n // borderColor: \"#fff000\",\r\n // borderStyle: \"solid\",\r\n // borderWidth: 2,\r\n maxHeight: 60,\r\n minHeight: 40,\r\n marginBottom: 25,\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"flex-start\",\r\n justifyContent: \"space-between\",\r\n },\r\n headerInfo: {\r\n // textAlign: \"right\",\r\n },\r\n headerLogo: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n marginTop: 3,\r\n flex: 1,\r\n },\r\n headerLogoAS: {\r\n marginTop: -35,\r\n paddingLeft: 70,\r\n paddingRight: 70,\r\n },\r\n headerLogoImage: {\r\n maxWidth: \"100%\",\r\n maxHeight: \"100%\",\r\n alignSelf: \"center\",\r\n objectFit : \"contain\",\r\n },\r\n headerText: {\r\n width: \"100%\",\r\n flexDirection: \"row\",\r\n justifyContent: \"flex-end\"\r\n },\r\n headerTextBold: {\r\n fontFamily: COLORS.bold,\r\n },\r\n specSheet: {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n paddingTop: 35,\r\n paddingHorizontal: 35,\r\n height: 100,\r\n // width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n headerTextASSheet: {\r\n width: \"20%\",\r\n flex: \"0 0 20%\",\r\n fontSize: 15,\r\n color: COLORS.gray3,\r\n },\r\n headerTextASInfo: {\r\n width: \"20%\",\r\n flex: \"0 0 20%\",\r\n },\r\n headerTextValue: {\r\n paddingLeft: 5,\r\n // width: 50,\r\n // textAlign: \"right\",\r\n },\r\n main: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n section: {\r\n width: \"33%\",\r\n flex: \"0 0 33%\"\r\n },\r\n sectionTwo: {\r\n width: \"45%\",\r\n flex: \"0 0 45%\"\r\n },\r\n sectionLeft: {\r\n paddingRight: 10\r\n },\r\n sectionCenter: {\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n },\r\n sectionRight: {\r\n paddingLeft: 10\r\n },\r\n mainTitle: {\r\n fontFamily: COLORS.bold,\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.gray2,\r\n paddingBottom: 3,\r\n marginBottom: 5,\r\n },\r\n mainText: {\r\n marginBottom: 2,\r\n },\r\n mainTextEmail: {\r\n marginTop: 10,\r\n },\r\n room: {\r\n borderLeftColor: COLORS.light,\r\n borderLeftWidth: 1,\r\n borderLeftStyle: \"solid\",\r\n marginTop: 30,\r\n borderBottomColor: COLORS.light,\r\n borderBottomWidth: 1,\r\n },\r\n roomTitle: {\r\n color: COLORS.gray2,\r\n padding: 5,\r\n backgroundColor: COLORS.light,\r\n fontSize: 11,\r\n textTransform: \"uppercase\",\r\n fontFamily: COLORS.bold,\r\n },\r\n roomBody: {\r\n paddingLeft: 20\r\n },\r\n subPartTitle: {\r\n color: COLORS.blue,\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.blue,\r\n padding: 2,\r\n marginRight: 2,\r\n marginBottom: 10,\r\n marginTop: 10,\r\n marginLeft: -10\r\n },\r\n cartItem: {\r\n borderBottomWidth: 1,\r\n borderBottomColor: COLORS.light,\r\n paddingBottom: 2,\r\n marginBottom: 5,\r\n },\r\n cartItemWithThumbnail: {\r\n flexDirection: \"row\",\r\n paddingBottom: 5,\r\n },\r\n cartItemWithThumbnailBody: {\r\n flex: 1,\r\n overflow: \"hidden\",\r\n },\r\n cartItemThumbnail: {\r\n borderWidth: 1,\r\n borderColor: COLORS.light,\r\n borderRadius: 5,\r\n padding: 8,\r\n marginRight: 5,\r\n width: 64,\r\n height: 64,\r\n flexBasis: 64,\r\n },\r\n cartItemThumbnailImage: {\r\n width: 48,\r\n height: 48,\r\n flexBasis: 48,\r\n objectFit: \"contain\",\r\n },\r\n cartItemSkuFullWidth: {\r\n flex: 1,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n marginBottom: 10,\r\n },\r\n cartItemDescription: {\r\n marginTop: 4,\r\n marginBottom: 4,\r\n },\r\n cartItemName: {\r\n fontFamily: COLORS.bold,\r\n color: COLORS.gray,\r\n },\r\n cartItemNameBig: {\r\n fontSize: 11,\r\n },\r\n cartItemNameCentered: {\r\n marginTop: 10,\r\n },\r\n cartItemInfo: {\r\n flexDirection: \"row\",\r\n justifyContent: \"space-around\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n color: COLORS.gray,\r\n marginTop: 5,\r\n },\r\n cartItemUnit: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n flexBasis: 40,\r\n width: 40,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n },\r\n wizardItemDescription: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n color: COLORS.gray,\r\n fontSize: 9,\r\n },\r\n cartItemUnitSKU: {\r\n flexBasis: 80,\r\n width: 80,\r\n },\r\n cartItemUnitItem: {},\r\n cartItemPrice: {\r\n flexGrow: 5,\r\n flexShrink: 5,\r\n flexBasis: 100,\r\n width: 100,\r\n justifyContent: \"flex-end\",\r\n alignSelf: \"flex-end\",\r\n textAlign: \"right\",\r\n fontFamily: COLORS.bold,\r\n },\r\n cartItemNote: {\r\n marginTop: 3,\r\n marginBottom: 3,\r\n padding: 5,\r\n borderColor: COLORS.light,\r\n borderStyle: \"solid\",\r\n borderWidth: 1,\r\n borderRadius: 5,\r\n color: COLORS.blue\r\n },\r\n cartItemSimilar: {\r\n width: \"100%\",\r\n marginTop: 10,\r\n // marginBottom: 10,\r\n // paddingLeft: 10,\r\n },\r\n cartItemSimilarTitle: {\r\n padding: 5,\r\n color: COLORS.white,\r\n backgroundColor: COLORS.lightBlue,\r\n fontSize: 10,\r\n marginBottom: 10,\r\n },\r\n cartItemSimilarTitleBundled: {\r\n marginBottom: 5,\r\n },\r\n cartItemBundled: {\r\n marginBottom: 10,\r\n },\r\n cartItemSimilarTitlePadding: {\r\n marginLeft: 10\r\n },\r\n cartItemSimilarContent: {\r\n width: \"100%\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n },\r\n cartItemSimilarContentCell: {\r\n width: \"50%\",\r\n flex: \"0 0 50%\"\r\n },\r\n cartItemSimilarItem: {\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n borderBottomWidth: 1,\r\n borderBottomStyle: \"dashed\",\r\n borderBottomColor: COLORS.light,\r\n paddingBottom: 2,\r\n marginBottom: 5,\r\n // alignItems: \"center\", places price to center\r\n },\r\n cartItemSimilarItemNoBorder: {\r\n borderBottomWidth: 0,\r\n },\r\n cartItemSimilarItemBlock: {\r\n },\r\n cartItemSimilarItemName: {\r\n color: COLORS.blue,\r\n fontSize: 10,\r\n },\r\n cartItemSimilarItemLabel: {\r\n textTransform: \"uppercase\",\r\n fontFamily: COLORS.bold,\r\n color: COLORS.gray2,\r\n fontSize: 8,\r\n },\r\n cartItemSimilarItemPrice: {\r\n fontSize: 12,\r\n color: COLORS.blue\r\n },\r\n cartItemSimilarItemExample: {\r\n fontSize: 8,\r\n color: COLORS.gray\r\n },\r\n roomTotal: {\r\n marginVertical: 10,\r\n textAlign: \"right\",\r\n },\r\n roomTotalSecond: {\r\n marginTop: 0,\r\n marginBottom: 10,\r\n textAlign: \"right\",\r\n },\r\n roomTotalText: {\r\n fontFamily: COLORS.bold,\r\n },\r\n roomTotalAmount: {\r\n fontSize: 12,\r\n color: COLORS.blue,\r\n },\r\n footer: {\r\n marginTop: 20,\r\n flexDirection: \"row\",\r\n justifyContent: \"space-around\",\r\n alignSelf: \"stretch\",\r\n width: \"100%\",\r\n },\r\n footerLeft: {\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n textAlign: \"center\"\r\n },\r\n notification: {\r\n padding: 20,\r\n borderColor: COLORS.red,\r\n borderStyle: \"solid\",\r\n borderWidth: 1,\r\n borderRadius: 5,\r\n },\r\n notificationMargin: {\r\n marginTop: 20,\r\n },\r\n notificationImage: {\r\n width: 25,\r\n height: 21,\r\n marginTop: -5,\r\n marginBottom: 10,\r\n marginHorizontal: \"auto\"\r\n },\r\n notificationText: {\r\n color: COLORS.red,\r\n width: \"66.5%\",\r\n },\r\n total: {\r\n flexBasis: 160,\r\n textAlign: \"right\",\r\n },\r\n totalSectionFirst: {\r\n textAlign: \"right\",\r\n },\r\n totalSection: {\r\n marginTop: 15,\r\n textAlign: \"right\",\r\n },\r\n totalSectionText: {\r\n fontFamily: COLORS.bold,\r\n },\r\n totalSectionAmount: {\r\n fontSize: 14,\r\n color: COLORS.blue,\r\n },\r\n totalSectionFinal: {\r\n marginTop: 30,\r\n textAlign: \"right\",\r\n },\r\n totalSectionAmountFinal: {\r\n fontSize: 22,\r\n color: COLORS.green,\r\n },\r\n pageNumber: {\r\n position: \"absolute\",\r\n fontSize: 13,\r\n bottom: 30,\r\n left: 0,\r\n right: 0,\r\n textAlign: \"center\",\r\n color: COLORS.gray,\r\n },\r\n signature: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"flex-end\",\r\n marginTop: 30,\r\n height: 50,\r\n },\r\n signatureText: {\r\n width: \"100%\",\r\n borderTopWidth: 1,\r\n borderTopColor: COLORS.light,\r\n borderTopStyle: \"solid\",\r\n textAlign: \"center\"\r\n },\r\n signatureValue: {\r\n textAlign: \"center\",\r\n marginBottom: 5,\r\n },\r\n signatureImage: {\r\n maxWidth: \"100%\",\r\n width: \"auto\",\r\n marginHorizontal: \"auto\",\r\n },\r\n discountSection: {\r\n marginTop: 10,\r\n marginLeft: 10, // to remove negative margin of subTitle\r\n },\r\n ...printDocumentStylesDiscounts,\r\n});\r\n","export default {\r\n width100: {\r\n width: \"100%\",\r\n },\r\n flex: {\r\n display: \"flex\",\r\n },\r\n flexRow: {\r\n flexDirection: \"row\",\r\n },\r\n flexColumn: {\r\n flexDirection: \"column\",\r\n },\r\n flexCenter: {\r\n alignItems: \"center\",\r\n },\r\n marginT5: {\r\n marginTop: 5\r\n },\r\n marginT8: {\r\n marginTop: 8\r\n },\r\n marginT10: {\r\n marginTop: 10\r\n },\r\n marginT16: {\r\n marginTop: 16\r\n },\r\n marginT20: {\r\n marginTop: 20\r\n },\r\n marginT30: {\r\n marginTop: 30\r\n },\r\n marginT40: {\r\n marginTop: 40\r\n },\r\n marginB5: {\r\n marginBottom: 5\r\n },\r\n marginB8: {\r\n marginBottom: 8\r\n },\r\n marginB10: {\r\n marginBottom: 10\r\n },\r\n marginB16: {\r\n marginBottom: 16\r\n },\r\n marginB20: {\r\n marginBottom: 20\r\n },\r\n marginB30: {\r\n marginBottom: 30\r\n },\r\n marginB40: {\r\n marginBottom: 40\r\n },\r\n marginL10: {\r\n marginLeft: 10\r\n },\r\n marginL20: {\r\n marginLeft: 20\r\n },\r\n marginR10: {\r\n marginRight: 10\r\n },\r\n marginR20: {\r\n marginRight: 20\r\n },\r\n}\r\n","export default {\r\n discountDeposit: {\r\n backgroundColor: \"#d8d8d8\",\r\n padding: 8,\r\n marginTop: 0,\r\n marginBottom: 5\r\n },\r\n discountPercent: {\r\n paddingLeft: 10,\r\n },\r\n financeCell: {\r\n flexGrow: 1,\r\n borderWidth: 1,\r\n borderColor: \"#d8d8d8\",\r\n borderStyle: \"solid\",\r\n borderRadius: 5,\r\n padding: 5,\r\n },\r\n financeCellMonths: {\r\n fontSize: 11,\r\n },\r\n financeCellText: {\r\n fontSize: 15,\r\n }\r\n}\r\n","import React, {useContext} from \"react\";\r\nimport {Text, Image, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentHeader = (props) => {\r\n const {styles, jobId, fabricatorData, printLogo} = props;\r\n\r\n const date = new Date();\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const logoView = printLogo ? (\r\n \r\n \r\n \r\n ) : null;\r\n\r\n const jobInfoView = (\r\n \r\n {document.kvConfig.jobId || jobId ? (\r\n \r\n {printContext.messages[\"receipt.header.quoteNumber\"]}\r\n {document.kvConfig.jobId || jobId}\r\n \r\n ) : null}\r\n \r\n {printContext.messages[\"receipt.header.date\"]}\r\n {date.toLocaleDateString().replace(/\\//gi, \"-\")}\r\n \r\n \r\n {printContext.messages[\"receipt.header.time\"]}\r\n {date.toLocaleTimeString()}\r\n \r\n \r\n )\r\n\r\n if (fabricatorData.isAmericanStandard) {\r\n return (\r\n \r\n \r\n Specification Sheet\r\n \r\n {logoView}\r\n {jobInfoView}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n {logoView}\r\n {jobInfoView}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentHeader.propTypes = {\r\n fabricatorData: PropTypes.object,\r\n jobId: PropTypes.number,\r\n styles: PropTypes.object.isRequired,\r\n printLogo: PropTypes.string,\r\n};\r\n\r\nexport default PrintDocumentHeader\r\n","import React, {useContext, Fragment} from \"react\";\r\nimport {Text, View} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {ADDRESSES_TYPES} from \"./constants\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\n\r\nconst PrintDocumentInfoFabricator = (props) => {\r\n const {styles, fabricatorData, threeColumns} = props;\r\n\r\n const mainAddress = Array.isArray(fabricatorData.addresses) && fabricatorData.addresses.find(adr => {\r\n return adr.addressType === ADDRESSES_TYPES.Shipping\r\n })\r\n\r\n const city = mainAddress && mainAddress.city ? mainAddress.city : fabricatorData.city || \"\";\r\n const address = mainAddress && mainAddress.address1 ? mainAddress.address1 : fabricatorData.address1 || fabricatorData.address2 || \"\";\r\n const postal = mainAddress && mainAddress.postal ? mainAddress.postal : fabricatorData.postal || \"\";\r\n const provence = mainAddress && mainAddress.provence ? mainAddress.provence : fabricatorData.provence || \"\";\r\n let displayAddress = \"\";\r\n [city, provence, postal].forEach(addressPart => { // 1) city 2) provence 3) postal\r\n if (addressPart) {\r\n if (displayAddress) {\r\n displayAddress += \", \"\r\n }\r\n displayAddress += addressPart\r\n }\r\n });\r\n const contactEmail = fabricatorData.contactEmail || \"\";\r\n const emails = contactEmail.includes(\",\") ? contactEmail.split(\",\") : [];\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n return (\r\n \r\n {printContext.messages[\"receipt.mainInfo.fabricatorInformation\"]}\r\n {fabricatorData.companyName}\r\n {address ? {address} : null}\r\n {displayAddress ? {displayAddress} : null}\r\n {fabricatorData.isCaesarStone ? null : (\r\n \r\n {emails ? emails.map((email, emailIndex) => {\r\n return (\r\n \r\n {email}\r\n \r\n )\r\n }) : {contactEmail}}\r\n {fabricatorData.phone || \"\"}\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentInfoFabricator.propTypes = {\r\n fabricatorData: PropTypes.object.isRequired,\r\n threeColumns: PropTypes.bool,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentInfoFabricator\r\n","export const ADDRESSES_TYPES = {\r\n Billing: \"Billing\",\r\n Shipping: \"Shipping\",\r\n}\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getCurrencySign, getPriceWithCurrency, getRoomName, getTotalPrice, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport PrintDocumentBodyCartItem from \"./printDocumentBodyCartItem\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport PrintSimilarProducts from \"./similarProducts/printSimilarProducts\";\r\nimport {filterCartItems} from \"../../look/lookNavigation/lookFunctions2\";\r\nimport {getCommonVisualizerType, IS_LIXIL_UI} from \"../../../config\";\r\nimport {getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport {\r\n getFeatureGroupFromWizardGroup,\r\n showWizardInsteadOfQT\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../interfaces/wizardItemInterface\";\r\nimport PrintDocumentBodyWizardItem from \"./printDocumentBodyWizardItem\";\r\nimport {getDifferentCurrencyCartItems} from \"../../../misc/misc2\";\r\nimport {\r\n getWizardGroupName,\r\n isSameVisualizerWizard\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nconst PrintDocumentBody = (props) => {\r\n let {styles, quotes, cartItems, fabricatorData, locale, filterGroups, wizardState, sqftSlabState,\r\n cartItemsThumbnails} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (IS_LIXIL_UI) {\r\n cartItems = filterCartItems(cartItems, true, true);\r\n }\r\n\r\n const getGroupName = (featureGroup) => {\r\n const lowerCasedName = featureGroup.partName.toLowerCase();\r\n if (fabricatorData.isLowes || fabricatorData.isCaesarStone) {\r\n if (locale === \"fr-FR\" && printContext.messages[\"transDoc.customDisplayName_FR.\"+ lowerCasedName]) {\r\n return printContext.messages[\"transDoc.customDisplayName_FR.\"+ lowerCasedName]\r\n } else if (locale === \"pl-PL\" && printContext.messages[\"transDoc.customTranslateName_PL.\"+ lowerCasedName]) {\r\n return printContext.messages[\"transDoc.customTranslateName_PL.\"+ lowerCasedName]\r\n }\r\n }\r\n return featureGroup.customGroupDisplayName || featureGroup.partName\r\n };\r\n\r\n const showPrice = getShowPrice(fabricatorData, true);\r\n\r\n return quotes.map((quote, quoteIndex) => {\r\n\r\n const layout = getCurrentLayout(fabricatorSettings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n const visType = getCommonVisualizerType(fabricatorSettings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n\r\n const quoteTotalPrice = getTotalPrice(quoteIndex, false);\r\n // const subTotalPrice = getQuotePriceWithTaxes(quoteTotalPrice);\r\n const subTotalPrice = quoteTotalPrice.materialPrice;\r\n const fixedPrice = toFixedPrice(subTotalPrice);\r\n\r\n let uniqueCartItemIds = [];\r\n const quoteCartItems = cartItems.filter((cartItem) => cartItem.cartFeature && (cartItem.currentQuote === quoteIndex));\r\n\r\n const {wizardList, wizardIsActive, allWizardsValues} = wizardState;\r\n const showWizardSteps = showWizardInsteadOfQT(wizardList, wizardIsActive);\r\n\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, quoteCartItems);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"receipt.content.roomTitle\"]} {getRoomName(quoteIndex, cartItems, quotes, printContext.messages, locale, fabricatorData)}\r\n \r\n \r\n {showWizardSteps ? wizardList.map(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizSelObject, visType)\r\n });\r\n if (!existingAllObject || !existingAllObject.wizardSelectedValues) {\r\n return null\r\n }\r\n return Object.keys(existingAllObject.wizardSelectedValues).map(key => {\r\n const wizardGroup = existingAllObject.wizardSelectedValues[key].wizardGroup;\r\n if (wizardGroup && wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom && !wizardGroup.hideInCartAndReceipt) {\r\n return \r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (wizardGroup && cartItem.fromWizardGroupId\r\n ? (wizardGroup.id === cartItem.fromWizardGroupId)\r\n : +key === cartItem.fromWizardStep)\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n const slabsCartItems = currentCartItems.filter(cartItem => cartItem.partId === \"slabs\");\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n const mainCartItems = (\r\n \r\n \r\n {featureGroup ? getGroupName(featureGroup) || getWizardGroupName(wizardGroup) : getWizardGroupName(wizardGroup)}\r\n \r\n {currentCartItems.map((cartItem, cartItemIndex) => {\r\n if (cartItem.partId === \"slabs\") {\r\n return null\r\n }\r\n return \r\n })}\r\n \r\n )\r\n return slabsCartItems.length ? (\r\n \r\n {mainCartItems}\r\n \r\n \r\n {printContext.messages[\"sqftFeaturesPopup.title.slabs\"]}\r\n \r\n {slabsCartItems.map((cartItem, cartItemIndex) => {\r\n return \r\n })}\r\n \r\n \r\n ) : mainCartItems\r\n // } else if (wizardGroup && existingAllObject.wizardSelectedValues[key].selectedFeature && !wizardGroup.hideInCartAndReceipt) {\r\n // return \r\n }\r\n })\r\n }) : null}\r\n {layout.qtCategories && !showWizardSteps ? (\r\n layout.qtCategories.map(qtCategory => {\r\n return qtCategory.subParts.map((subPart, subPartIndex) => {\r\n let currentCartItems = quoteCartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return (subPart.part.partId === cartItem.partId || (cartItem.relatedProductParent && subPart.part.partId === cartItem.relatedProductParent.partId))\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (!currentCartItems.length) {\r\n return null\r\n }\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n return (\r\n \r\n {getGroupName(subPart.part)}\r\n {currentCartItems.map((cartItem, cartItemIndex) => {\r\n return \r\n })}\r\n \r\n )\r\n })\r\n })\r\n ) : null}\r\n {quoteCartItems.map((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n return (\r\n \r\n \r\n {cartItem.displayFakeFeatureGroupName\r\n ? printContext.messages[\"sqftFeaturesPopup.title.\" + cartItem.displayFakeFeatureGroupName]\r\n : cartItem.cartFeature.dbFeature.customGroupName || cartItem.selectionGroup\r\n || (cartItem.cartFeature && cartItem.cartFeature.getParent ? getGroupName(cartItem.cartFeature.getParent()) : null)}\r\n \r\n \r\n \r\n )\r\n }\r\n return null\r\n })}\r\n \r\n {showPrice ? (\r\n \r\n \r\n {printContext.messages[\"shoppingCart.totalColumnsSubTotal\"]}: \r\n \r\n {getPriceWithCurrency(fabricatorSettings, fixedPrice)}\r\n \r\n \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(quoteIndex, false, currObject.cartItems);\r\n return (\r\n \r\n {printContext.messages[\"shoppingCart.totalColumnsSubTotal\"]}: \r\n \r\n {getCurrencySign(currObject.currency, fabricatorSettings) + toFixedPrice(currentTotal.materialPrice, true)}\r\n \r\n \r\n )\r\n }) : null}\r\n \r\n \r\n ) : null}\r\n \r\n )\r\n })\r\n};\r\n\r\nPrintDocumentBody.propTypes = {\r\n quotes: PropTypes.array.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n filterGroups: PropTypes.array,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBody\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {cartItemInterface} from \"../../shoppingCart/cartItemInterface\";\r\nimport PrintDocumentBodyCartItem from \"./printDocumentBodyCartItem\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\n\r\n\r\nconst PrintDocumentBodyBundledCartItems = (props) => {\r\n const {styles, cartItem, fabricatorData, locale, cartItems} = props;\r\n // const fabricatorSettings = fabricatorData.settings;\r\n\r\n const bundleProducts = cartItems ? cartItems.filter(cItem => {\r\n return cItem.bundleParentId && (cItem.bundleParentId === cartItem.id)\r\n }) : [];\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (fabricatorData.isAmericanStandard && !IS_LIXIL_UI) {\r\n // the quoting tool needs to have the bundled products hidden (only for American standard) in the cart and receipt,\r\n // but still send items through the API to LP.\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"shoppingCart.bundledItems\"]}\r\n \r\n \r\n {bundleProducts.map(bundleCartItem => {\r\n return \r\n })}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentBodyBundledCartItems.propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyBundledCartItems\r\n","export default [\r\n \"granite_transformations_of_cambridge\",\r\n \"granite_transformations_of_watford\",\r\n \"granite_transformations_of_norwich\",\r\n \"granite_transformations_of_holt\",\r\n \"granite_transformations_of_newcastle\",\r\n \"granite_transformations_of_newark\",\r\n \"granite_transformations_of_nottingham\",\r\n \"granite_transformations_of_wakefield\",\r\n \"granite_transformations_of_york\",\r\n \"granite_transformations_north_leeds\",\r\n \"granite_transformations_of_ipswich\",\r\n \"granite_transformations_of_colchester\",\r\n \"granite_transformations_of_belfast\",\r\n \"granite_transformations_of_hinckley\",\r\n \"granite_transformations_of_tees_valley\",\r\n \"granite_transformations_of_tunbridge_wells\",\r\n \"granite_transformations_of_ruxley\",\r\n \"granite_transformations_of_sevenoaks\",\r\n \"granite_transformations_of_derby\",\r\n \"granite_transformations_of_bridgemere\",\r\n \"granite_transformations_congleton\",\r\n \"granite_transformations_of_cheltenham\",\r\n \"granite_transformations_of_bristol\",\r\n \"granite_transformations_of_banbury\",\r\n \"granite_transformations_of_warwick\",\r\n \"granite_transformations_of_rugby\",\r\n \"granite_transformations_of_gyle\",\r\n \"granite_transformations_of_exeter\",\r\n \"trend_transformations_of_bolton\",\r\n \"trend_transformations_of_kutsford\",\r\n \"trend_transformations_of_maidstone\",\r\n \"trend_transformations_of_ellesmere_port\",\r\n \"trend_transformations_of_burton\",\r\n \"trend_transformations_of_speke\",\r\n \"trend_transformations_of_perth\",\r\n \"trend_transformations_of_plymouth\",\r\n \"trend_transformations_of_birmingham_east\",\r\n \"trend_transformations_of_milton_keynes\",\r\n \"trend_transformations_of_eastbourne\",\r\n \"trend_transformations_uk\"\r\n];\r\n","import React, {useContext} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\n\r\nimport PrintSimilarProductsListItem from \"./printSimilarProductsListItem\";\r\nimport {PrintDocumentContext} from \"../printDocumentContext\";\r\nimport {getFeaturesCollectionsList} from \"../../../shoppingCart/similarProducts/similarProductsFunctions\";\r\n\r\nconst PrintSimilarProducts = (props) => {\r\n\r\n const {styles, cartItems, fabricatorData, filterGroups, locale, quoteIndex} = props;\r\n const similarOpened = true;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const insideQuote = Number.isInteger(quoteIndex);\r\n\r\n const addedCountertops = insideQuote\r\n ? cartItems.filter(cItem => cItem.currentQuote === quoteIndex && cItem.partId.includes(\"countertop\"))\r\n : cartItems.filter(cItem => cItem.partId.includes(\"countertop\"));\r\n\r\n const cartItem = addedCountertops[0];\r\n\r\n if (!cartItem) {\r\n return null\r\n }\r\n\r\n const featuresCollectionsList = getFeaturesCollectionsList(cartItem, filterGroups);\r\n if (!featuresCollectionsList || !featuresCollectionsList.length) {\r\n return null\r\n }\r\n\r\n const totalCountertopsQuantity = addedCountertops.reduce(((accumulator, cItem) => accumulator + cItem.quantity), 0);\r\n\r\n return (\r\n \r\n \r\n {printContext.messages[\"similar.title\"]}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {printContext.messages[\"similar.filterName\"]}\r\n \r\n \r\n {printContext.messages[\"similar.product.priceProject\"]}\r\n \r\n \r\n {similarOpened ? featuresCollectionsList.map((featureCollection, featureCollectionIndex) => {\r\n return \r\n }) : null}\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintSimilarProducts.propTypes = {\r\n quoteIndex: PropTypes.number,\r\n cartItems: PropTypes.array.isRequired,\r\n filterGroups: PropTypes.array,\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintSimilarProducts\r\n","import React, {useContext} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {View, Text} from \"@react-pdf/renderer\";\r\n\r\nimport {cartItemInterface} from \"../../../shoppingCart/cartItemInterface\";\r\nimport {getPriceWithCurrency} from \"../../../../misc/helpers\";\r\nimport {PrintDocumentContext} from \"../printDocumentContext\";\r\nimport {getCartItemName} from \"../printDocumentFunctions\";\r\nimport {getSimilarItemInfoObject} from \"../../../shoppingCart/similarProducts/similarProductsFunctions\";\r\nimport {featureCollectionInterface} from \"../../../../interfaces/featureInterface\";\r\n\r\nconst PrintSimilarProductsListItem = (props) => {\r\n\r\n const {styles, cartItem, addedCountertops, fabricatorData, locale, featureCollection, filterGroups, quoteIndex, lastItem,\r\n totalCountertopsQuantity} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const {filterValueName, feature, subTotalPrice} = getSimilarItemInfoObject(\r\n cartItem,\r\n addedCountertops,\r\n featureCollection,\r\n totalCountertopsQuantity,\r\n quoteIndex,\r\n filterGroups\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {filterValueName}\r\n \r\n \r\n {printContext.messages[\"similar.product.example\"]} {getCartItemName(feature, fabricatorData, printContext, locale)}\r\n \r\n \r\n \r\n {getPriceWithCurrency(fabricatorSettings, subTotalPrice, feature)}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintSimilarProductsListItem.propTypes = {\r\n quoteIndex: PropTypes.number.isRequired,\r\n cartItem: PropTypes.shape(cartItemInterface),\r\n addedCountertops: PropTypes.arrayOf(PropTypes.shape(cartItemInterface)),\r\n featureCollection: PropTypes.shape(featureCollectionInterface),\r\n fabricatorData: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n filterGroups: PropTypes.array.isRequired,\r\n lastItem: PropTypes.bool.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n totalCountertopsQuantity: PropTypes.number.isRequired,\r\n};\r\n\r\n\r\nexport default PrintSimilarProductsListItem\r\n","export const getGroupDescription = (groupName) => {\r\n groupName = (groupName || '').toLowerCase();\r\n // console.log(\"groupName\", groupName);\r\n switch (groupName) {\r\n case 'material':\r\n return \"quotingTool.featureGroupDescription.material\";\r\n case \"room\":\r\n return \"quotingTool.featureGroupDescription.room\";\r\n case \"edge profile\":\r\n case \"edge\":\r\n return \"quotingTool.featureGroupDescription.edgeProfile\";\r\n case \"cutouts\":\r\n return \"quotingTool.featureGroupDescription.cutouts\";\r\n case \"faucets\":\r\n case \"faucet\":\r\n return \"quotingTool.featureGroupDescription.faucet\";\r\n case \"sinks\":\r\n case \"sink\":\r\n return \"quotingTool.featureGroupDescription.sink\";\r\n case \"counter top removal\":\r\n case \"countertop removal\":\r\n return \"quotingTool.featureGroupDescription.countertopRemoval\";\r\n case \"counter top disposal\":\r\n case \"countertop disposal\":\r\n return \"quotingTool.featureGroupDescription.countertopDisposal\";\r\n case \"radius\":\r\n return \"quotingTool.featureGroupDescription.radius\";\r\n case \"plumbing\":\r\n return \"quotingTool.featureGroupDescription.plumbing\";\r\n case \"backsplash\":\r\n return \"quotingTool.featureGroupDescription.backsplash\";\r\n case \"sealer\":\r\n return \"quotingTool.featureGroupDescription.sealer\";\r\n case \"hourly labor\":\r\n return \"quotingTool.featureGroupDescription.hourly\";\r\n case \"trip charge\":\r\n return \"quotingTool.featureGroupDescription.tripCharge\";\r\n case \"milling down\":\r\n return \"quotingTool.featureGroupDescription.millingDown\";\r\n case \"template\":\r\n return \"quotingTool.featureGroupDescription.template\";\r\n case \"15 year sealer\":\r\n return \"quotingTool.featureGroupDescription.15YearsSealer\";\r\n case \"10 year sealer\":\r\n return \"quotingTool.featureGroupDescription.10YearsSealer\";\r\n case \"finishes\":\r\n return \"quotingTool.featureGroupDescription.finishes\";\r\n case \"flat metal support brackets\":\r\n return \"quotingTool.featureGroupDescription.flatMetalSupportBrackets\";\r\n case \"bump out\":\r\n return \"quotingTool.featureGroupDescription.bumpOut\";\r\n case \"inside corner\":\r\n return \"quotingTool.featureGroupDescription.insideCorner\";\r\n case \"45 degree inside corner\":\r\n return \"quotingTool.featureGroupDescription.45DegreeInsideCorner\";\r\n case \"arch\":\r\n return \"quotingTool.featureGroupDescription.arch\";\r\n case \"cooktop type\":\r\n return \"quotingTool.featureGroupDescription.cooktopType\";\r\n case \"sink type\":\r\n return \"quotingTool.featureGroupDescription.sinkType\";\r\n case 'stove type':\r\n return 'quotingTool.featureGroupDescription.stoveType';\r\n case 'protection plan':\r\n return 'quotingTool.featureGroupDescription.protectionPlan';\r\n default:\r\n return 'quotingTool.featureGroupDescription.default';\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport store from \"../store\";\r\nimport {setNetworkConnection} from \"../actions/serverFunctions\";\r\n\r\nconst headers = {\r\n \"Content-Type\": \"application/json\"\r\n};\r\n\r\nconst AxiosInstance = axios.create({\r\n // baseURL: process.env.REACT_APP_API_BASE_URL + '/api/',\r\n // timeout: 120000,\r\n headers\r\n});\r\n\r\nAxiosInstance.interceptors.response.use((response) => {\r\n const {serverState} = store.getState();\r\n if (!serverState.networkConnection) {\r\n store.dispatch(setNetworkConnection(true))\r\n }\r\n return response;\r\n}, (error) => {\r\n // Do something with response error\r\n if (error && error.toJSON && error.toJSON().message === \"Network Error\") {\r\n store.dispatch(setNetworkConnection(false))\r\n }\r\n return Promise.reject(error);\r\n});\r\n\r\nexport default AxiosInstance;\r\n\r\n\r\nexport const apiResponseError = response => {\r\n // console.log(\"apiResponseError\", response);\r\n if (response && response.data && response.data.errors) {\r\n return Object.keys(response.data.errors)\r\n .map(k => `${k} - ${response.data.errors[k]}`)\r\n .join('
    ');\r\n }\r\n if (response && response.error) {\r\n return response.error;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const apiGet = async url => {\r\n try {\r\n const response = await AxiosInstance.get(url);\r\n return {data: {...response.data}, error: apiResponseError(response)};\r\n } catch (error) {\r\n return {error: apiResponseError(error)};\r\n }\r\n};\r\n\r\nexport const apiPost = async (url, data) => {\r\n console.log(\"url to post\", url);\r\n console.log(\"data to post\", data);\r\n try {\r\n const response = await AxiosInstance.post(url, data);\r\n console.log(\"response1\", response);\r\n return {data: {...response.data}, error: apiResponseError(response)};\r\n } catch (error) {\r\n console.log(\"response1 error\", error);\r\n return {error: apiResponseError(error)};\r\n }\r\n}\r\n\r\n","export default \"// This is our input from js world\\r\\nattribute vec2 coords;\\r\\n// This is output for the fragment shader\\r\\n// varying variables are a little special\\r\\n// you will see why later\\r\\nvarying highp vec2 vTextureCoord;\\r\\n\\r\\nvoid main (void) {\\r\\n // Texture and verticies have different coordinate spaces\\r\\n // we do this to invert Y axis\\r\\n vTextureCoord = -coords;\\r\\n\\r\\n // Setting vertix position for shape assembler\\r\\n // GLSL has many convenient vector functions\\r\\n // here we extending 2D coords vector to 4D with 2 values\\r\\n // 0.0 is a Z coordinate\\r\\n // 1.1 is a W, special value needed for 3D math\\r\\n // just leave it 1 for now\\r\\n gl_Position = vec4(coords, 0.0, 1.0);\\r\\n}\";","export default \"precision mediump float;\\r\\nvarying highp vec2 vTextureCoord;\\r\\nuniform sampler2D uSampler;\\r\\n\\r\\nvec2 coords;\\r\\nfloat x;\\r\\nfloat y;\\r\\nfloat l;\\r\\nfloat a;\\r\\nvec4 color;\\r\\nvec4 color2;\\r\\n\\r\\nfloat to_srgb(float v) {\\r\\n float result = 0.0;\\r\\n if (v < 0.003) {\\r\\n result = v * 12.920;\\r\\n } else {\\r\\n result = pow(v, 0.417);\\r\\n result = result * 1.055;\\r\\n result = result - 0.055;\\r\\n }\\r\\n return result;\\r\\n}\\r\\n\\r\\nvec4 vec_to_srgb(vec4 v) {\\r\\n vec4 result;\\r\\n result.r = to_srgb(v.r);\\r\\n result.g = to_srgb(v.g);\\r\\n result.b = to_srgb(v.b);\\r\\n result.a = v.a;\\r\\n return result;\\r\\n}\\r\\n\\r\\nfloat from_srgb(float v) {\\r\\n float result = 0.0;\\r\\n if (v < 0.040) {\\r\\n result = v / 12.920;\\r\\n } else {\\r\\n result = v + 0.055;\\r\\n result = result / 1.055;\\r\\n result = pow(result, 2.4);\\r\\n }\\r\\n return result;\\r\\n}\\r\\n\\r\\nvec4 vec_from_srgb(vec4 v) {\\r\\n vec4 result;\\r\\n result.r = from_srgb(v.r);\\r\\n result.g = from_srgb(v.g);\\r\\n result.b = from_srgb(v.b);\\r\\n result.a = v.a;\\r\\n return result;\\r\\n}\\r\\n\\r\\nvoid main(void){\\r\\n float gamma = 2.4;\\r\\n float out_gamma = 0.41666;\\r\\n x = vTextureCoord[0];\\r\\n y = vTextureCoord[1];\\r\\n coords[0] = (1.0 - x) / 2.0;\\r\\n coords[1] = (y + 1.0) / 2.0;\\r\\n color = vec_from_srgb(texture2D(uSampler, coords));\\r\\n a = color.a;\\r\\n color2 = vec4(8, 8, 8, 0) * color + vec4(1, 1, 1, 0);\\r\\n color2 = vec4(8, 8, 8, 0) * color / color2;\\r\\n color2.a = a;\\r\\n gl_FragColor = vec_to_srgb(color2);\\r\\n}\";","import $ from \"jquery\";\r\n\r\nconst sqftCursorManager = {\r\n canvas: null,\r\n currentCursor: null,\r\n currentCursorOwner: null,\r\n noCursorStealing: false,\r\n\r\n init(canvas) {\r\n this.canvas = canvas;\r\n this.resetCursor(null);\r\n },\r\n\r\n setCursor(cursor, owner, noStealing = false) {\r\n this.noCursorStealing = noStealing || this.noCursorStealing;\r\n\r\n if (this.currentCursorOwner === null || this.currentCursorOwner === owner) {\r\n if (this.currentCursor !== cursor) {\r\n const prefix = \"cursor-\";\r\n const classes = this.canvas.className.split(\" \").filter(c => c.lastIndexOf(prefix, 0) !== 0);\r\n this.canvas.className = classes.join(\" \").trim();\r\n $(this.canvas).addClass(`cursor-${cursor}`);\r\n $(this.canvas).css({ cursor: null });\r\n this.currentCursorOwner = owner;\r\n this.currentCursor = cursor;\r\n }\r\n }\r\n },\r\n\r\n setCursorImage(cursorImage, owner, noStealing = false) {\r\n this.setCursor(\"image\", owner, noStealing);\r\n $(this.canvas).css({ cursor: `url(${cursorImage}), default !important` });\r\n },\r\n\r\n resetCursor(owner) {\r\n if (this.currentCursorOwner === owner) {\r\n this.currentCursorOwner = null;\r\n this.setCursor(\"grab\", null);\r\n this.releaseStealLock(owner);\r\n }\r\n },\r\n\r\n getCursor() {\r\n const prefix = \"cursor-\";\r\n const classes = this.canvas.className.split(\" \").filter(c => c.lastIndexOf(prefix, 0) === 0);\r\n return classes.map(c => c.replace(prefix, \"\"));\r\n },\r\n\r\n stealCursor(override = false, revertBackAfterMouseUp = false) {\r\n if (override && this.currentCursorOwner) {\r\n if (this.currentCursorOwner.destroy) {\r\n this.currentCursorOwner.destroy(true, revertBackAfterMouseUp);\r\n }\r\n }\r\n\r\n if (!this.noCursorStealing || override) {\r\n this.resetCursor(this.currentCursorOwner);\r\n }\r\n },\r\n\r\n releaseStealLock(owner) {\r\n if (this.currentCursorOwner === owner) {\r\n this.noCursorStealing = false;\r\n }\r\n }\r\n};\r\n\r\nexport default sqftCursorManager;\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getFontsize, inchesToMm, isDisabledInPopupWithParents, isInnerCorner} from \"../../../../../helpers/sqftHelper\";\r\n//import shapeHelper from \"../../../../../helpers/shapeHelper\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\n\r\nexport default function() {\r\n var self = this,\r\n point = null;\r\n\r\n function setPoint(value) { point = value; }\r\n\r\n this.destroy = function(protect) {\r\n if(!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n };\r\n\r\n this.init = function(point) {\r\n setPoint(point);\r\n this.initEvents();\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.OVERLAY\r\n );\r\n }\r\n this.deregisterPartEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n this.reInitPartEvents = () => {\r\n this.initEvents();\r\n };\r\n this.render = (ctx) => {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(point)) {\r\n return\r\n }\r\n\r\n if (point.arcLength > 0 || point.angle > 0) {\r\n const line = point.getParent(),\r\n shape = line.getParent(),\r\n //nextLine = shape.getNextLine(line),\r\n //nextLineTo = nextLine.calculateRenderPosition(nextLine.to),\r\n prevLine = shape.getPrevLine(line),\r\n prevLineFrom = prevLine.calculateRenderPosition(prevLine.from),\r\n renderTo = line.calculateRenderPosition(line.to),\r\n renderFrom = line.calculateRenderPosition(line.from),\r\n isInner = isInnerCorner(shape, prevLineFrom, renderFrom, renderTo);\r\n\r\n let fontSize = getFontsize(),\r\n font = (config.measureUnit === \"Imperial\" ? fontSize : fontSize - 5).toString() + \"px \" + config.activeFontBold,\r\n radius = point.arcLength || point.angle,\r\n //dir = shape.getAngleDirection(shape.getPrevLine(line)),\r\n //isInner = shapeHelper.isAngleInner(dir),\r\n pointCorner = point.corner ? point.corner : isInner,\r\n cornerMargin = pointCorner\r\n ? point.arcLength ? +point.arcLength - 8 : +point.angle\r\n : point.arcLength ? -point.arcLength + 8 : -point.angle,\r\n radiusLetter = point.arcLength ? \"r\" : \"\",\r\n dstring = config.measureUnit === \"Metric\"\r\n ? radiusLetter + new Fraction(inchesToMm(radius)) + \"mm\"\r\n : radiusLetter + new Fraction(radius) + \"\\\"\",\r\n mtext = ctx.measureText(dstring),\r\n tLen = mtext.width,\r\n offset = point.getPointField(),\r\n renderPos = {\r\n x: offset.x + offset.width,\r\n y: offset.y + (offset.height / 2)\r\n };\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n renderPos.y += fontSize / 2;\r\n // ctx.fillStyle = \"rgb(178, 99, 168)\";\r\n // ctx.fillRect(offset.x - 4, offset.y + 2 + (fontSize * 2), tLen + 6, fontSize + 4);\r\n ctx.beginPath();\r\n ctx.fillStyle = \"#b263a8\";\r\n\r\n //todo correct positions\r\n switch (point.pointDirection) {\r\n case \"lefttop\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x - offset.width + tLen,//- (tLen + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y - (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"righttop\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x + cornerMargin * config.scale / config.defaultScale,\r\n renderPos.y - (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"rightbottom\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x + (fontSize + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y + (fontSize + cornerMargin) * config.scale / config.defaultScale, mtext, fontSize\r\n );\r\n break;\r\n case \"leftbottom\":\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x - (60 + cornerMargin) * config.scale / config.defaultScale,\r\n renderPos.y + (fontSize + cornerMargin) * config.scale / config.defaultScale,\r\n mtext, fontSize\r\n );\r\n break;\r\n default:\r\n ctx.wrapText(\r\n dstring,\r\n renderPos.x,\r\n renderPos.y - (fontSize / 2) + (fontSize * 2), mtext, fontSize\r\n );\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport Spacer from \"../../core/shapes/spacer\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class SpacersController extends SQFTResourceController {\r\n isJustCreated: false;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.spacers;\r\n }\r\n\r\n setIsJustCreated(value) {\r\n this.isJustCreated = value\r\n }\r\n\r\n createSpacer(point1, point2, pos) {\r\n if (!this.isNotCreatedSpacerExist()) {\r\n this.addResource(new Spacer([point1, point2], pos));\r\n }\r\n }\r\n\r\n /**\r\n * Used to skip mouse up in workspace events\r\n **/\r\n isNotCreatedSpacerExist() {\r\n const resources = this.getResources();\r\n return resources.some(spacer => !spacer.getIsCreated())\r\n }\r\n}\r\n\r\n","import * as uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {SHAPE_PART_ID, SIDEBAR_BUTTONS_MENU} from \"../../../../constants\";\r\nimport COLOR_THEMES from \"../../../../../../colorThemes\";\r\nimport eventManager from \"../../store/sqftEventManager\";\r\nimport store from \"../../../../../../store\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {\r\n getDistanceFromPointToLine,\r\n getMousePositionOnShape,\r\n getParallelPoints,\r\n getPointField\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport {\r\n adjustPointsRelativeToTopLeft,\r\n findTopLeftPoint,\r\n getThePositionOfAPointToTheLeftOrRightOfALine, sortPointsClockwise\r\n} from \"../../../../helpers/coordinatesHelper\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {createShapeFromPoints} from \"../../../../helpers/freeDrawHelper\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport ShapeCabinet from \"./shapeParts/shapeCabinet\";\r\n\r\nexport default class Spacer {\r\n id;\r\n state = {\r\n centerPoint: {x: 0, y: 0},\r\n betweenPoints: [],\r\n isCreated: false,\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n };\r\n\r\n constructor(points, centerPoint) {\r\n this.id = uuid.v4();\r\n this.state.betweenPoints = points\r\n this.state.centerPoint = centerPoint\r\n this.initEvents();\r\n }\r\n\r\n getIsCreated() { return this.state.isCreated }\r\n setCreated(value) { this.state.isCreated = value}\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.WALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n destroy() {\r\n this.deregisterEvents();\r\n this.destroyPoints();\r\n }\r\n\r\n destroyPoints() {\r\n for (const addedPoints of this.state.betweenPoints) {\r\n addedPoints.destroy()\r\n }\r\n }\r\n\r\n deregisterEvents() {\r\n eventManager.removeEvent(this);\r\n }\r\n\r\n onMouseDown(mousePos) {\r\n void mousePos;\r\n if (this.state.isHovering) {\r\n const reduxState = store.getState();\r\n if (reduxState.sqftMenuState.activeButton === SIDEBAR_BUTTONS_MENU.delete) {\r\n workspaceControllers.spacer.destroyResource(this)\r\n return true\r\n }\r\n }\r\n\r\n if (!this.state.isCreated) {\r\n this.createShapeFromSpacerPoints()\r\n this.setCreated(true);\r\n workspaceControllers.spacer.destroyResource(this);\r\n workspaceControllers.spacer.setIsJustCreated(true);\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n createShapeFromSpacerPoints = () => {\r\n const [point3, point4] = this.getPointsToTheMouse();\r\n const shape = this.state.betweenPoints[0].getParent().getParent();\r\n\r\n // Получаем позиции точек на шейпе\r\n const point3PointField = getMousePositionOnShape(point3.x, point3.y, shape);\r\n const point4PointField = getMousePositionOnShape(point4.x, point4.y, shape);\r\n\r\n // Собираем точки шейпа\r\n const shapePoints = [\r\n this.state.betweenPoints[1],\r\n point3PointField,\r\n point4PointField,\r\n this.state.betweenPoints[0]\r\n ];\r\n\r\n const topLeftPoint = findTopLeftPoint(shapePoints);\r\n const adjustedShapePoints = adjustPointsRelativeToTopLeft(shapePoints, topLeftPoint);\r\n const sortedPoints = sortPointsClockwise(adjustedShapePoints);\r\n if (!sortedPoints) {\r\n console.warn(\"Shape creation skipped due to undefined points.\");\r\n return;\r\n }\r\n\r\n const shapePosition = shape.getPosition();\r\n const newShapePosition = {\r\n x: topLeftPoint.x + shapePosition.x,\r\n y: topLeftPoint.y + shapePosition.y\r\n };\r\n\r\n const shapeParams = {\r\n ...shape.shapeParams,\r\n isSpacer: true,\r\n canSnap: true,\r\n };\r\n\r\n const spacerShapeId = createShapeFromPoints(sortedPoints, SHAPE_PART_ID.spacer,\r\n false,\r\n newShapePosition,\r\n false,\r\n null,\r\n shapeParams\r\n );\r\n\r\n let spacerShape = sqftShapeManager.getShapeById(spacerShapeId);\r\n spacerShape.featureId = shape.featureId;\r\n spacerShape.relatedParentFeatureId = shape.relatedParentFeatureId;\r\n spacerShape.parentPartId = shape.partId;\r\n spacerShape.featureName = shape.featureName;\r\n spacerShape.colorSet = shape.colorSet;\r\n if (shape.shapeCabinet) {\r\n spacerShape.shapeCabinet = new ShapeCabinet(spacerShape)\r\n }\r\n }\r\n\r\n onMouseMove(mousePos) {\r\n void mousePos\r\n //this.state.isHovering = this.isMouseOverWall(mousePos) || this.state.mouseDown;\r\n }\r\n\r\n render(ctx) {\r\n if (this.state.isCreated) {\r\n //this.renderLines(ctx);\r\n } else {\r\n this.renderLinesToMouse(ctx);\r\n }\r\n }\r\n\r\n getPointsToTheMouse() {\r\n const betweenPoint1 = this.state.betweenPoints[0];\r\n const betweenPoint2 = this.state.betweenPoints[1];\r\n let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n let mousePos = sqftEventManager.LastKnownMousePos;\r\n const distanceFromMouseToTheLine = getDistanceFromPointToLine(\r\n mousePos.x,\r\n mousePos.y,\r\n pointField1.x,\r\n pointField1.y,\r\n pointField2.x,\r\n pointField2.y,\r\n )\r\n const pointLeftRightPosition = getThePositionOfAPointToTheLeftOrRightOfALine(pointField1, pointField2, mousePos);\r\n const parallelPoints = getParallelPoints(\r\n pointField1,\r\n pointField2,\r\n pointLeftRightPosition > 0\r\n ? -distanceFromMouseToTheLine\r\n : distanceFromMouseToTheLine\r\n );\r\n void parallelPoints;\r\n // console.log(\"pointField1\", pointField1);\r\n // console.log(\"pointField2\", pointField2);\r\n // console.log(\"distanceFromMouseToTheLine\", distanceFromMouseToTheLine);\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"parallelPoints0\", parallelPoints[0]);\r\n // console.log(\"parallelPoints1\", parallelPoints[1]);\r\n // console.log(\"pointLeftRightPosition\", pointLeftRightPosition);\r\n return parallelPoints\r\n }\r\n\r\n renderLinesToMouse(ctx) {\r\n const [point3, point4] = this.getPointsToTheMouse();\r\n ctx.lineWidth = this.state.lineWidth;\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.strokeStyle = this.state.lineColor;\r\n\r\n const betweenPoint1 = this.state.betweenPoints[0];\r\n const betweenPoint2 = this.state.betweenPoints[1];\r\n let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n ctx.beginPath()\r\n ctx.moveTo(pointField1.x, pointField1.y);\r\n ctx.lineTo(pointField2.x, pointField2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n\r\n // renderLines(ctx) {\r\n // const reduxState = store.getState();\r\n // const activeButton = reduxState.sqftMenuState.activeButton;\r\n // ctx.lineWidth = this.state.lineWidth;\r\n // ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n // ctx.strokeStyle = this.state.isHovering && activeButton === SIDEBAR_BUTTONS_MENU.delete\r\n // ? COLORS.red\r\n // : this.state.lineColor;\r\n //\r\n // const betweenPoint1 = this.state.betweenPoints[0];\r\n // const betweenPoint2 = this.state.betweenPoints[1];\r\n // const betweenPoint3 = this.state.betweenPoints[3];\r\n // const betweenPoint4 = this.state.betweenPoints[4];\r\n // let pointField1 = getPointField(betweenPoint1.x, betweenPoint1.y, betweenPoint1.getParent().getParent());\r\n // let pointField2 = getPointField(betweenPoint2.x, betweenPoint2.y, betweenPoint1.getParent().getParent());\r\n // let pointField3 = getPointField(betweenPoint3.x, betweenPoint3.y, betweenPoint1.getParent().getParent());\r\n // let pointField4 = getPointField(betweenPoint4.x, betweenPoint4.y, betweenPoint1.getParent().getParent());\r\n //\r\n // ctx.beginPath()\r\n // ctx.moveTo(pointField1.x, pointField1.y);\r\n // ctx.lineTo(pointField2.x, pointField2.y);\r\n // ctx.lineTo(pointField3.x, pointField3.y);\r\n // ctx.lineTo(pointField4.x, pointField4.y);\r\n // ctx.fill();\r\n // ctx.closePath();\r\n // ctx.stroke();\r\n // }\r\n}\r\n","import sqftConfig from \"../../../../store/sqftConfig\";\r\nimport workspace from \"../../../workspace\";\r\n\r\nexport default class ModelCorePoint {\r\n _x;\r\n _y;\r\n _parent;\r\n _mixins = {\r\n movable: null\r\n };\r\n\r\n constructor(x, y, parent, mixins) {\r\n this._x = x;\r\n this._y = y;\r\n this._parent = parent;\r\n this._mixins = mixins;\r\n }\r\n\r\n get x() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this._x;\r\n }\r\n\r\n set x(value) {\r\n this.mixins.movable ? this.mixins.movable.posX = value : this._x = value;\r\n }\r\n\r\n get y() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this._y;\r\n }\r\n\r\n set y(value) {\r\n this.mixins.movable ? this.mixins.movable.posY = value : this._y = value;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n set parent(value) {\r\n this._parent = value;\r\n }\r\n\r\n get mixins() {\r\n return this._mixins;\r\n }\r\n\r\n set mixins(value) {\r\n this._mixins = value;\r\n }\r\n\r\n getPosX() {\r\n return this.mixins.movable ? this.mixins.movable.posX : this.x;\r\n }\r\n\r\n getPosY() {\r\n return this.mixins.movable ? this.mixins.movable.posY : this.y;\r\n }\r\n\r\n setPosX(value) {\r\n return this.mixins.movable ? this.mixins.movable.posX = value : this.x = value;\r\n }\r\n\r\n setPosY(value) {\r\n return this.mixins.movable ? this.mixins.movable.posY = value : this.y = value;\r\n }\r\n\r\n rotate = (origin, angle, isSlabMode) => {\r\n let ret = {x: 0, y: 0};\r\n let tr = {x: this.getPosX() - origin.x, y: this.getPosY() - origin.y};\r\n\r\n ret.x = tr.x * Math.cos(angle) - tr.y * Math.sin(angle);\r\n ret.y = tr.x * Math.sin(angle) + tr.y * Math.cos(angle);\r\n\r\n //console.log(\"isSlabMode in point rotation\", isSlabMode)\r\n if (isSlabMode) {\r\n //todo rotation in slab mode\r\n this.setPosX(Math.round10(ret.x, -5) + Math.round10(origin.x, -1));\r\n this.setPosY(Math.round10(ret.y, -5) + Math.round10(origin.y, -1));\r\n } else {\r\n this.setPosX(Math.round10(ret.x, -5) + Math.round10(origin.x, -1));\r\n this.setPosY(Math.round10(ret.y, -5) + Math.round10(origin.y, -1));\r\n }\r\n };\r\n\r\n getPointField = () => {\r\n let fieldWidth = sqftConfig.fieldWidth,\r\n center = fieldWidth / 2,\r\n scale = workspace.getScale(),\r\n offset = parent.getOffset();\r\n\r\n return {\r\n x: (this.x * scale) - center + offset.x,\r\n y: (this.y * scale) - center + offset.y,\r\n width: fieldWidth\r\n };\r\n };\r\n\r\n getPointCords = () => {\r\n let pointField = this.getPointField();\r\n\r\n return {\r\n x: pointField.x + pointField.width / 2,\r\n y: pointField.y + pointField.width / 2\r\n }\r\n };\r\n}\r\n","import RenderMeasurementsInsideShape from \"./renderMeasurementsInsideShape\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport RenderSVG from \"./renderSVG\";\r\n\r\nclass RenderMovableImage {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n this.renderMeasurementsInsideShape = new RenderMeasurementsInsideShape(movableImage);\r\n this.renderSVG = new RenderSVG(movableImage);\r\n }\r\n\r\n destroy = () => {\r\n //this.renderMeasurementsInsideShape.destroy();\r\n }\r\n\r\n setOuterShape = (value) => {\r\n this.renderMeasurementsInsideShape.outerShape = value\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n if (this.movableImage.getIsRotatable()) {\r\n this.movableImage.shapeRotatable.render(ctx);\r\n }\r\n\r\n if (this.movableImage.attachedTo) {\r\n //this.renderSVG.renderAttachedTo(ctx);\r\n } else {\r\n this.renderSVG.render(ctx);\r\n\r\n //render measurements inside the shape\r\n const outerShape = this.movableImage.getOuterShape();\r\n if (this.movableImage.shouldRenderMeasurementsInsideTheShape() && outerShape) {\r\n this.movableImage.revealMeasurementsInsideShape();\r\n this.setOuterShape(outerShape);\r\n this.renderMeasurementsInsideShape.render(ctx);\r\n } else {\r\n this.movableImage.hideMeasurementsInsideShape();\r\n }\r\n }\r\n\r\n //render lines in dev mode\r\n if (sqftConfig.isDevMode()) {\r\n this.movableImage.getLines().forEach((activeShapeLine) => {\r\n let pointFieldActiveShapeLineFrom = getPointField(activeShapeLine.from.x, activeShapeLine.from.y, this.movableImage);\r\n RenderFigures.renderCircle(pointFieldActiveShapeLineFrom, 20, 1, '#63b141');\r\n });\r\n }\r\n return []; //no triangles for images\r\n }\r\n}\r\n\r\nexport default RenderMovableImage\r\n","import store from \"../../../../../../../store\";\r\nimport {\r\n rotatePoint,\r\n getPointDistance,\r\n getPointField,\r\n findClosestPointPairs, inchesToMm,\r\n} from \"../../../../../helpers/sqftHelper\";\r\n// import ShapeHelper from \"../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {getClosestIntersectionPoints, getIntersectionPointsAndLines} from \"../shapeParts/slabParts/seamToolHelper\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nclass RenderMeasurementsInsideShape {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n this.outerShape = null;\r\n this.lineOffset = 1;\r\n\r\n const serverState = store.getState().serverState;\r\n this.lineStartVertical = { x: -serverState.windowWidth, y: 0 };\r\n this.lineEndVertical = { x: serverState.windowWidth, y: 0 };\r\n this.lineStartHorizontal = { x: 0, y: -serverState.windowHeight };\r\n this.lineEndHorizontal = { x: 0, y: serverState.windowHeight };\r\n }\r\n\r\n setOuterShape = (value) => {\r\n this.outerShape = value\r\n }\r\n\r\n updateLinePoints() {\r\n const serverState = store.getState().serverState;\r\n const imageCenter = this.movableImage.getCenter();\r\n const angle = this.movableImage.rotatedDegrees;\r\n const imagePosOnField = this.movableImage.getCenterPosition();\r\n const pos = this.outerShape.getPosition();\r\n const imagePosOnShape = {x: imagePosOnField.x - pos.x, y: imagePosOnField.y - pos.y};\r\n void imagePosOnShape;\r\n void imageCenter;\r\n\r\n this.lineStartVertical = rotatePoint({ x: -serverState.windowWidth, y: imagePosOnShape.y }, imagePosOnShape, -angle);\r\n this.lineEndVertical = rotatePoint( { x: serverState.windowWidth, y: imagePosOnShape.y }, imagePosOnShape, -angle);\r\n this.lineStartVerticalOnImage = rotatePoint( { x: -serverState.windowWidth, y: imageCenter.y }, imageCenter, -angle);\r\n this.lineEndVerticalOnImage = rotatePoint({ x: serverState.windowWidth, y: imageCenter.y }, imageCenter, -angle);\r\n\r\n this.lineStartHorizontal = rotatePoint( { x: imagePosOnShape.x, y: -serverState.windowHeight }, imagePosOnShape, -angle);\r\n this.lineEndHorizontal = rotatePoint({ x: imagePosOnShape.x, y: serverState.windowHeight }, imagePosOnShape, -angle);\r\n this.lineStartHorizontalOnImage = rotatePoint( { x: imageCenter.x, y: -serverState.windowHeight }, imageCenter, -angle);\r\n this.lineEndHorizontalOnImage = rotatePoint({ x: imageCenter.x, y: serverState.windowHeight }, imageCenter, -angle);\r\n }\r\n\r\n render = (ctx) => {\r\n this.updateLinePoints();\r\n const imageCenterPosOnField = this.movableImage.getCenterPosition();\r\n const pos = this.outerShape.getPosition();\r\n const imageCenterPosOnShape = {x: imageCenterPosOnField.x - pos.x, y: imageCenterPosOnField.y - pos.y};\r\n const imagePosOnField = this.movableImage.getPosition();\r\n const imagePosOnShape = {x: imagePosOnField.x - pos.x, y: imagePosOnField.y - pos.y};\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = COLORS.red; //COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n\r\n // horizontal line\r\n const sideImagePoints = this.getImageSidePoints(this.lineStartVerticalOnImage, this.lineEndVerticalOnImage);\r\n const sideShapePoints = this.getShapeSidePoints(this.lineStartVertical, this.lineEndVertical);\r\n this.renderLineToBorder(ctx, sideShapePoints, sideImagePoints, imagePosOnShape);\r\n\r\n // vertical line\r\n this.renderArrowLineToCenter(ctx, imageCenterPosOnShape);\r\n }\r\n\r\n getImageSidePoints = (verticalLinePoint1, verticalLinePoint2) => {\r\n const lines = this.movableImage.getLines();\r\n\r\n return getIntersectionPointsAndLines(\r\n lines, verticalLinePoint1, verticalLinePoint2\r\n );\r\n }\r\n\r\n getShapeSidePoints = (verticalLinePoint1, verticalLinePoint2) => {\r\n return getIntersectionPointsAndLines(\r\n this.outerShape.getLines(true), verticalLinePoint1, verticalLinePoint2\r\n );\r\n }\r\n\r\n renderLineToBorder = (ctx, sideShapePoints, sideImagePoints, imagePosOnShape) => {\r\n if (!sideShapePoints.length) {\r\n return\r\n }\r\n const shapePos = this.outerShape.getPosition();\r\n const intersectionsWithShape = sideShapePoints.map(sideShapePoint => {\r\n return sideShapePoint.intersectionCords;\r\n });\r\n\r\n const intersectionsWithImage = sideImagePoints.map(sideImagePoint => {\r\n return {\r\n x: sideImagePoint.intersectionCords.x + imagePosOnShape.x,\r\n y: sideImagePoint.intersectionCords.y + imagePosOnShape.y,\r\n imageLine: sideImagePoint.line\r\n };\r\n });\r\n\r\n const closestPointPairs = findClosestPointPairs(intersectionsWithShape, intersectionsWithImage);\r\n\r\n for (const [index, closestPointPair] of closestPointPairs.entries()) {\r\n if (closestPointPair.pointA && closestPointPair.pointB) {\r\n const startPointField = getPointField(closestPointPair.pointA.x, closestPointPair.pointA.y, this.outerShape);\r\n const endPointField = getPointField(closestPointPair.pointB.x, closestPointPair.pointB.y, this.outerShape);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(startPointField.x, startPointField.y);\r\n ctx.lineTo(endPointField.x, endPointField.y);\r\n\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //const fontSize = getFontSizeFromContext(ctx);\r\n //let midPoint = getMidPoint(closestPointPair.pointA, closestPointPair.pointB);\r\n //midPoint = {x: midPoint.x + shapePos.x, y: midPoint.y + shapePos.y - fontSize / 2 / scale}\r\n const length = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(closestPointPair.distance, false, true)\r\n : closestPointPair.distance;\r\n\r\n // this.renderLineMeasurement(ctx,\r\n // midPoint,\r\n // length < 0.3 ? '' : length,\r\n // )\r\n const betweenPointFrom = {\r\n x: closestPointPair.pointA.x + shapePos.x,\r\n y: closestPointPair.pointA.y + shapePos.y\r\n }\r\n const betweenPointTo = {\r\n x: closestPointPair.pointB.x + shapePos.x,\r\n y: closestPointPair.pointB.y + shapePos.y\r\n }\r\n\r\n //closestPointPair.pointB.imageLine.measurementInsideShape.setPos(midPoint);\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setPos({x: 1, y: 1}); // this is needed to render measurements\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setValue(length);\r\n\r\n void index;\r\n if (closestPointPair.pointB.imageLine.lineIndex === 1) {\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setBetweenPoints(betweenPointTo, betweenPointFrom); // this will override pos value\r\n } else {\r\n closestPointPair.pointB.imageLine.measurementInsideShape.setBetweenPoints(betweenPointFrom, betweenPointTo); // this will override pos value\r\n }\r\n }\r\n }\r\n }\r\n\r\n renderArrowLineToCenter = (ctx, imageCenterPosOnShape) => {\r\n let imageCenterPosOnShapePointField = getPointField(imageCenterPosOnShape.x, imageCenterPosOnShape.y, this.outerShape);\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n this.outerShape.getLines(true), this.lineStartHorizontal, this.lineEndHorizontal, imageCenterPosOnShape\r\n );\r\n\r\n // we need only image lines that was intersected with the center line that supposed to be lines with the index 0 and 2\r\n let [intersectionXPointAndLine1WithImage, intersectionXPointAndLine2WithImage] = getClosestIntersectionPoints(\r\n this.movableImage.getLines(true), this.lineStartHorizontalOnImage, this.lineEndHorizontalOnImage, this.movableImage.getCenterPosition()\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n let intersectionXPoint1 = intersectionXPointAndLine1.intersectionCords;\r\n let intersectionXPoint2 = intersectionXPointAndLine2.intersectionCords;\r\n let intersectionXPoint1PointField = getPointField(intersectionXPoint1.x, intersectionXPoint1.y, this.outerShape);\r\n let intersectionXPoint2PointField = getPointField(intersectionXPoint2.x, intersectionXPoint2.y, this.outerShape);\r\n\r\n ctx.beginPath();\r\n RenderFigures.drawArrow(ctx,\r\n intersectionXPoint1PointField.x,\r\n intersectionXPoint1PointField.y + this.lineOffset,\r\n imageCenterPosOnShapePointField.x,\r\n imageCenterPosOnShapePointField.y - this.lineOffset\r\n );\r\n\r\n RenderFigures.drawArrow(ctx,\r\n imageCenterPosOnShapePointField.x,\r\n imageCenterPosOnShapePointField.y + this.lineOffset,\r\n intersectionXPoint2PointField.x,\r\n intersectionXPoint2PointField.y - this.lineOffset\r\n );\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n //const scale = sqftConfig.scale;\r\n let measurement1Distance = getPointDistance(intersectionXPoint1, imageCenterPosOnShape);\r\n measurement1Distance = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(measurement1Distance, false, true)\r\n : measurement1Distance;\r\n\r\n const shapePos = this.outerShape.getPosition();\r\n const betweenPointTo = {\r\n x: intersectionXPoint1.x + shapePos.x,\r\n y: intersectionXPoint1.y + shapePos.y\r\n }\r\n const betweenPointFrom = {\r\n x: imageCenterPosOnShape.x + shapePos.x,\r\n y: imageCenterPosOnShape.y + shapePos.y\r\n }\r\n if (intersectionXPointAndLine1WithImage) {\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setPos({x: 1, y: 1});\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setValue(measurement1Distance);\r\n intersectionXPointAndLine1WithImage.line.measurementInsideShape.setBetweenPoints(betweenPointFrom, betweenPointTo);\r\n }\r\n\r\n // THIS CALCULATIONS WAS USED TO GET POS WITHOUT USING BETWEEN POINTS\r\n //const measurement1Midpoint = getMidPoint(intersectionXPoint1, imageCenterPosOnShape);\r\n //const metrics1Point = ctx.measureText(measurement1Distance);\r\n //const shapePos = this.outerShape.getPosition();\r\n // const offsetPoint1 = {\r\n // x: measurement1Midpoint.x + shapePos.x + metrics1Point.width / 2 / scale,\r\n // y: measurement1Midpoint.y + shapePos.y\r\n // }\r\n //const measurement1angle = getAngleBetweenTwoPoints(intersectionXPoint2, imageCenterPosOnShape);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setAngle(measurement1angle);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setPos(offsetPoint2);\r\n //intersectionXPointAndLine1WithImage.line.measurementInsideShape.setBetweenPoints(null, null);\r\n\r\n // THIS CALCULATIONS WAS USED TO GET POS WITHOUT USING BETWEEN POINTS\r\n // const measurement2Midpoint = getMidPoint(intersectionXPoint2, imageCenterPosOnShape);\r\n // const metrics2Point = ctx.measureText(measurement2Distance);\r\n // const offsetPoint2 = {\r\n // x: measurement2Midpoint.x + shapePos.x + metrics2Point.width / 2 / scale,\r\n // y: measurement2Midpoint.y + shapePos.y\r\n // }\r\n // const measurement2angle = getAngleBetweenTwoPoints(intersectionXPoint2, imageCenterPosOnShape);\r\n // intersectionXPointAndLine2WithImage.line.measurementInsideShape.setPos(offsetPoint2);\r\n // intersectionXPointAndLine2WithImage.line.measurementInsideShape.setAngle(measurement2angle);\r\n\r\n let measurement2Distance = getPointDistance(intersectionXPoint2, imageCenterPosOnShape);\r\n measurement2Distance = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? inchesToMm(measurement2Distance, false, true)\r\n : measurement2Distance;\r\n\r\n const measurement2BetweenPointTo = {\r\n x: intersectionXPoint2.x + shapePos.x,\r\n y: intersectionXPoint2.y + shapePos.y\r\n }\r\n const measurement2BetweenPointFrom = {\r\n x: imageCenterPosOnShape.x + shapePos.x,\r\n y: imageCenterPosOnShape.y + shapePos.y\r\n }\r\n if (intersectionXPointAndLine1WithImage) {\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setPos({x: 1, y: 1});\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setValue(measurement2Distance);\r\n intersectionXPointAndLine2WithImage.line.measurementInsideShape.setBetweenPoints(measurement2BetweenPointFrom, measurement2BetweenPointTo);\r\n }\r\n }\r\n }\r\n\r\n // renderLineMeasurement = (ctx, measurementPos, measurementDistance) => {\r\n // this.__measurement.pos.x = measurementPos.x;\r\n // this.__measurement.pos.y = measurementPos.y;\r\n // this.__measurement.value = measurementDistance;\r\n //\r\n // this.__measurement.render(ctx);\r\n // }\r\n}\r\n\r\nexport default RenderMeasurementsInsideShape\r\n","import sqftConfig from \"../../../store/sqftConfig\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {SQFT_APPLIANCES} from \"../../../../../constants\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\n\r\nclass RenderSVG {\r\n constructor(movableImage) {\r\n this.movableImage = movableImage;\r\n }\r\n\r\n render = (ctx) => {\r\n let svgImageDataURI = \"\";\r\n const scale = sqftConfig.scale;\r\n\r\n if (this.movableImage.isIE() && this.movableImage.isSVG(this.movableImage.image)) {\r\n svgImageDataURI = atob(this.movableImage.getSrc(this.movableImage.image).replace(/data:image\\/svg\\+xml;base64,/, ''));\r\n }\r\n\r\n //let canvas = workspace.getCanvas();\r\n\r\n ctx.save();\r\n let posField = this.movableImage.getPosField();\r\n ctx.translate(posField.x, posField.y);\r\n ctx.rotate(-this.movableImage.rotatedDegrees * Math.PI / 180);\r\n let imgOffset = {\r\n x: this.movableImage.size.width / -2 * scale,\r\n y: this.movableImage.size.height / -2 * scale\r\n };\r\n\r\n this.renderHovering(ctx, imgOffset);\r\n\r\n if (!this.movableImage.isIE()) {\r\n if (this.movableImage.subType === SQFT_APPLIANCES.sink) {\r\n RenderFigures.sink(ctx, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n } else if (this.movableImage.subType === SQFT_APPLIANCES.doubleSink) {\r\n RenderFigures.doubleSink(ctx, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n } else {\r\n const containerSize = {width: this.movableImage.size.width * scale, height: this.movableImage.size.height * scale}\r\n const size = this.getContainSize();\r\n RenderParts.drawStripedRectangle(ctx, imgOffset.x, imgOffset.y, containerSize.width, containerSize.height);\r\n RenderFigures.drawBorder(ctx, imgOffset, containerSize.width, containerSize.height);\r\n ctx.drawImage(this.movableImage.image, imgOffset.x, imgOffset.y, size.width, size.height);\r\n }\r\n } else if (svgImageDataURI) {\r\n ctx.drawSvg(svgImageDataURI, imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n }\r\n ctx.restore();\r\n\r\n //render border points in dev mode\r\n if (sqftConfig.isDevMode()) {\r\n //dev movable point\r\n // ctx.beginPath();\r\n // ctx.strokeStyle = '#000'\r\n // ctx.arc(imgOffset.x, imgOffset.y, 20, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n //\r\n // //dev border points\r\n // let testImagePoints = this.movableImage.getLinePointsPointField();\r\n // for (let testPoint of testImagePoints) {\r\n // ctx.beginPath();\r\n // ctx.strokeStyle = '#a02f2f';\r\n // ctx.lineWidth = 1;\r\n // ctx.arc(testPoint.x, testPoint.y, 10, 0, 2 * Math.PI);\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n // //debugger // eslint-disable-line no-debugger\r\n // }\r\n }\r\n }\r\n\r\n getContainSize = () => {\r\n const aspectRatio = this.movableImage.initialSize.width / this.movableImage.initialSize.height;\r\n const scale = sqftConfig.scale;\r\n let newWidth, newHeight;\r\n if (this.movableImage.size.width / this.movableImage.size.height > aspectRatio) {\r\n // The width is larger than needed by the aspect ratio, so we base it on the height\r\n newHeight = this.movableImage.size.height;\r\n newWidth = newHeight * aspectRatio;\r\n } else {\r\n // The height is larger than needed based on the aspect ratio, so we base it on the width\r\n newWidth = this.movableImage.size.width;\r\n newHeight = newWidth / aspectRatio;\r\n }\r\n\r\n return {width: newWidth * scale, height: newHeight * scale}\r\n }\r\n\r\n renderHovering = (ctx, imgOffset) => {\r\n let scale = sqftConfig.scale;\r\n\r\n if (this.movableImage.isHovering() && !this.movableImage.isAnyLineHovering()) {\r\n ctx.beginPath();\r\n ctx.rect(imgOffset.x, imgOffset.y, this.movableImage.size.width * scale, this.movableImage.size.height * scale);\r\n ctx.strokeStyle = this.movableImage.hoverColor;\r\n ctx.lineWidth = 5;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n\r\n renderAttachedTo = () => {\r\n // if (this.movableImage.image) {\r\n // let midPoint = getMidPoint(this.movableImage.attachedTo.from, this.movableImage.attachedTo.to);\r\n // let lineOffset = this.movableImage.attachedTo.getOffset();\r\n // let imgOffset = {\r\n // x: 0,\r\n // y: -32\r\n // },\r\n // pointData = {\r\n // x: (midPoint.x * scale) + lineOffset.x - 4,\r\n // y: (midPoint.y * scale) + lineOffset.y - (size.height * scale) - 4,\r\n // radius: size.width * scale / 2 + 8,\r\n // arcStart: 0,\r\n // arcEnd: 2 * Math.PI\r\n // };\r\n // if (this.movableImage.attachedTo.getOrientation) {\r\n // if (this.movableImage.attachedTo.getOrientation() == 1) { //horizontal\r\n // pointData.x -= 64;\r\n // pointData.y += 5 * scale;\r\n // } else {\r\n // // console.log(scale);\r\n // if (scale >= 6) {\r\n // pointData.y -= ((6 - scale) * scale / 2);\r\n // } else {\r\n // pointData.y += (6 - scale) * 6;\r\n // }\r\n // }\r\n // }\r\n // if (!this.movableImage.isIE() || !this.movableImage.isSVG()) {\r\n // ctx.drawImage(this.movableImage.image, pointData.x - (size.width * scale / 2) + imgOffset.x, (midPoint.y * scale) + lineOffset.y - (size.height * scale / 2) - 4 + imgOffset.y + (this.movableImage.attachedTo.getOrientation() == 1 ? 32 : 0), size.width * scale, size.height * scale);\r\n // } else {\r\n // ctx.drawSvg(svgImageDataURI, pointData.x - (size.width * scale / 2) + imgOffset.x, (midPoint.y * scale) + lineOffset.y - (size.height * scale / 2) - 4 + imgOffset.y + (this.movableImage.attachedTo.getOrientation() == 1 ? 32 : 0), size.width * scale, size.height * scale);\r\n // }\r\n // ctx.save();\r\n // ctx.beginPath();\r\n // ctx.arc(pointData.x, pointData.y, pointData.radius, pointData.arcStart, pointData.arcEnd);\r\n // ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n // ctx.lineWidth = 4;\r\n // ctx.stroke();\r\n // ctx.fillStyle = \"RGBA(0,0,192,0.1)\";\r\n // ctx.fill();\r\n // ctx.closePath();\r\n // ctx.restore();\r\n // }\r\n }\r\n}\r\n\r\nexport default RenderSVG\r\n","import { v4 as uuidv4 } from 'uuid';\r\n\r\nexport default class MiteredSegment {\r\n id;\r\n _length = {}; /* NumberText */\r\n height; /* int */\r\n thickness = {}; /* NumberText */\r\n priority; /* int */\r\n\r\n\r\n constructor(length, height, thickness) {\r\n this.id = uuidv4();\r\n this._length = length;\r\n this.height = height;\r\n this.thickness = thickness;\r\n this.priority = 0;\r\n }\r\n\r\n set length(length) {\r\n this._length = length;\r\n }\r\n\r\n get length() {\r\n return this._length;\r\n }\r\n\r\n setPriority = (priority) => {\r\n this.priority = priority\r\n };\r\n\r\n exportSegment = () => ({\r\n height: this.height,\r\n thickness: this.thickness ? this.thickness.value : this.thickness,\r\n length: this.length.value,\r\n })\r\n}\r\n","import workspace from \"../workspace\";\r\nimport {getBacksplashesPos, getBumpoutPointCords, getShapePosAndPoints} from \"./slabHelper\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport {SHAPE_PART_ID, WATERFALL_SHAPES_KEY} from \"../../../../constants\";\r\nimport SlabAdditionalShape from \"./slabAdditionalShape\";\r\nimport Polygon from \"../shapes/layouts/polygon\";\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport {\r\n getParallelPoints,\r\n getPointOnTheLine,\r\n mmToInches\r\n} from \"../../../../helpers/sqftHelper\";\r\nimport {addEdgeToTheLines, addFakeEdgeToLines, setLineParams} from \"../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../store/workspaceControllers\";\r\nimport {getMiterEdgeFeature, getMiterEdgeHeight, isFeatureUnitUseEach} from \"../../../../helpers/featureHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport sqftResourcesManager from \"../../store/sqftResoursesManager\";\r\n\r\nclass SlabAdditionalShapes {\r\n additionalShapes = [];\r\n\r\n initBacksplashAndEdgeShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (!this.isInited(line)) {\r\n let posOnField, pointsCords;\r\n const parentShape = line.getParent();\r\n const attachedToLineResource = sqftResourcesManager.getAttachedToLineResource(line);\r\n const miterEdgeHeight = getMiterEdgeHeight(attachedToLineResource ? attachedToLineResource.featureId : null);\r\n\r\n // 1.) init backsplash shapes\r\n if (line.isWithBacksplash()) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, +line.getBacksplashHeight());\r\n\r\n // 2.) init mitered edgeShapes for waterfall tool\r\n } else if ((line.isWithMiterEdge() || line.isWithFakeEdge())\r\n && parentShape.partId === SHAPE_PART_ID.waterfallPiece\r\n ) {\r\n // skip creation for one mitered edge shape that was created with waterfall tool\r\n if (line.getState().slabModeSkipMiteredEdgeCreation) {\r\n return;\r\n }\r\n const segment = workspaceControllers.waterfall.getSegmentById(parentShape.slabModeWaterfallSegmentId);\r\n if (!segment) {\r\n //todo fix missing segment\r\n return;\r\n }\r\n [posOnField, pointsCords] = getBacksplashesPos(line, segment.thickness);\r\n // 3.) init mitered edgeShapes but skip mitered tool\r\n } else if (line.isWithMiterEdge() && !line.isWithMitered() && miterEdgeHeight > 0.5) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, miterEdgeHeight);\r\n\r\n // 4.) init waterfall edgeShapes but skip mitered tool\r\n } else if (line.isWithWaterfallEdgeFeature() && !isFeatureUnitUseEach(line.getAttachedFeature())) {\r\n [posOnField, pointsCords] = getBacksplashesPos(line, sqftConfig.waterfallImperialHeight);\r\n } else {\r\n return; // Skip the current iteration if neither condition is met\r\n }\r\n\r\n // create shape\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnField, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n\r\n // set shape additional params\r\n shape.setIsPointsChanged(false);\r\n shape.setSlabModeCoreParentId(\r\n line.getParent().slabModeCoreParentId ? line.getParent().slabModeCoreParentId : line.getParent().id\r\n );\r\n shape.setSlabModeCoreParentPartId(\r\n line.getParent().slabParentPartId ? line.getParent().slabParentPartId : line.getParent().partId\r\n )\r\n //set shape feature id\r\n let featureId\r\n if (line.isWithBacksplash()) {\r\n featureId = line.getBacksplashFeatureId();\r\n featureId = featureId ? featureId : line.getParent().featureId;\r\n } else {\r\n featureId = line.getParent().featureId;\r\n }\r\n shape.setFeatureId(featureId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n };\r\n\r\n initBumpoutShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithBumpout() && !this.isInited(line)) {\r\n let pointsCords = getBumpoutPointCords(line);\r\n let posOnFiled = line.getParent().getPosition();//ShapeHelper.getCenterPoint(pointsCords);\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n };\r\n\r\n initMiteredToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithMitered() && !this.isInited(line)) {\r\n const miteredPoints = line.miteredOverlay.getPoints();\r\n miteredPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if (miteredPoints[next]) {\r\n let segment = line.miteredOverlay.getSegmentBetweenPoints(point, miteredPoints[next]);\r\n //let widthValue = segment.width.value;\r\n let heightValue = segment.height / sqftConfig.getMeasureMultiplier();\r\n if (heightValue > 0.005) {\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), point, miteredPoints[next], heightValue);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n initUnderlaymentToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if (line.isWithUnderlayment() && !this.isInited(line)) {\r\n const underlaymentPoints = line.underlaymentOverlay.getPoints();\r\n underlaymentPoints.forEach((point, index) => {\r\n let next = index + 1;\r\n if (underlaymentPoints[next]) {\r\n let segment = line.underlaymentOverlay.getSegmentBetweenPoints(point, underlaymentPoints[next]);\r\n //let widthValue = segment.width.value;\r\n let heightValue = segment.height;\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), point, underlaymentPoints[next], heightValue);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords), 'square', posOnFiled, SHAPE_PART_ID.backsplashPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n initWaterfallToolShapes = () => {\r\n let lines = workspace.getLines();\r\n lines.forEach((line) => {\r\n if ((line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge())\r\n && !this.isInited(line)\r\n ) {\r\n const waterfallSegments = line.waterfallOverlay.getSegments();\r\n\r\n waterfallSegments.forEach((segment) => {\r\n const [from, to] = this.getWaterfallPoints(line, segment);\r\n if (from && to) {\r\n const height = config.measureUnit === \"Imperial\" ? segment.height : mmToInches(segment.height);\r\n let [posOnFiled, pointsCords] = getShapePosAndPoints(line.getParent(), from, to, height);\r\n\r\n let shapeId = sqftShapeManager.addShape(new Polygon(pointsCords.reverse()), 'square', posOnFiled, SHAPE_PART_ID.waterfallPiece);\r\n const shape = workspace.getShapeById(shapeId);\r\n shape.setIsPointsChanged(false);\r\n shape.setFeatureId(line.getParent().featureId);\r\n shape.setColorSet(line.getParent().colorSet);\r\n shape.setSlabModeCoreParentId(line.getParent().id);\r\n shape.setSlabModeCoreParentPartId(line.getParent().partId);\r\n shape.setSlabModeWaterfallSegmentId(segment.id);\r\n\r\n this.addMiteredEdgesToWaterfallShape(shapeId, segment);\r\n\r\n this.addActiveBacksplash(new SlabAdditionalShape(line, shapeId));\r\n\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n addMiteredEdgesToWaterfallShape = (shapeId, segment) => {\r\n const miteredEdge = getMiterEdgeFeature();\r\n\r\n const waterfallShapes = WATERFALL_SHAPES_KEY;\r\n const edgeParams = {\r\n [waterfallShapes.cabinetReturn]: [3],\r\n [waterfallShapes.waterfall]: [1, 2, 3],\r\n [waterfallShapes.overhangReturn]: [1],\r\n [waterfallShapes.underlayment]: [0]\r\n };\r\n if (edgeParams[segment.name]) {\r\n if (miteredEdge) {\r\n addEdgeToTheLines(shapeId, miteredEdge, edgeParams[segment.name], false);\r\n } else {\r\n addFakeEdgeToLines(shapeId, edgeParams[segment.name]);\r\n }\r\n }\r\n\r\n if (segment.name === waterfallShapes.waterfall) {\r\n setLineParams(shapeId, [1, 2, 3], { slabModeSkipMiteredEdgeCreation: true });\r\n }\r\n };\r\n\r\n getWaterfallPoints = (line, segment) => {\r\n const key = segment.key;\r\n const length = config.measureUnit === \"Imperial\" ? segment.length : mmToInches(segment.length);\r\n if (segment.isDisabled) {\r\n return [null, null]\r\n }\r\n switch (key) {\r\n case WATERFALL_SHAPES_KEY.cabinetReturn: {\r\n const secondPoint = getPointOnTheLine(line.to, line.from, -length);\r\n return [secondPoint, line.to]\r\n }\r\n case WATERFALL_SHAPES_KEY.waterfall: {\r\n const distanceFromLine = -segment.height * 2 / sqftConfig.getMeasureMultiplier();\r\n const [firstPoint, secondPoint] = getParallelPoints(line.from, line.to, distanceFromLine);\r\n return [firstPoint, secondPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.overhangReturn: {\r\n const secondPoint = getPointOnTheLine(line.from, line.to, -length);\r\n return [line.from, secondPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.underlayment: {\r\n const nextLine = line.getParent().getNextLine(line);\r\n //const secondPoint = getPointOnTheLine(nextLine.to, line.from, -segment.length);\r\n //return [nextLine.from, nextLine.to]\r\n const miteredEdgeDistance = -getMiterEdgeHeight();\r\n const [firstPoint, secondPoint] = getParallelPoints(nextLine.from, nextLine.to, miteredEdgeDistance);\r\n return [secondPoint, firstPoint]\r\n }\r\n case WATERFALL_SHAPES_KEY.peninsulaUnderwrap: {\r\n const [firstPoint, secondPoint] = getParallelPoints(line.from, line.to, -segment.height);\r\n return [firstPoint, secondPoint]\r\n }\r\n default:\r\n return [null, null]\r\n }\r\n }\r\n\r\n isInited = (line) => {\r\n return this.additionalShapes.some( SlabAdditionalShape => {\r\n return SlabAdditionalShape.line.id === line.id\r\n })\r\n }\r\n\r\n getShapeAdditionalShapes = (shape) => {\r\n return this.additionalShapes.filter( SlabAdditionalShape => {\r\n return SlabAdditionalShape.line.getParent().id === shape.id\r\n })\r\n }\r\n\r\n updateAdditionalShapeFeature = (line, featureId) => {\r\n const additionalShape = this.findAdditionalShapeByLine(line);\r\n if (additionalShape) {\r\n const backsplashShape = workspace.getShapeById(additionalShape.backsplashShapeId);\r\n backsplashShape.setFeatureId(featureId);\r\n }\r\n }\r\n\r\n resetBacksplashes = () => {\r\n this.additionalShapes = [];\r\n }\r\n\r\n importData = (data) => {\r\n for (let activeBacksplashData of data) {\r\n let shape = workspace.importShape(activeBacksplashData.backsplashShape);\r\n shape.deregisterEvents();\r\n let line = workspace.getLineById(activeBacksplashData.line.id);\r\n let slabAdditionalShape = new SlabAdditionalShape(line, shape.id);\r\n this.addActiveBacksplash(slabAdditionalShape);\r\n }\r\n }\r\n\r\n exportData = () => {\r\n return this.additionalShapes\r\n .filter( SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n return backsplashShape.partId !== SHAPE_PART_ID.seamPiece;\r\n })\r\n .map( SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n\r\n return {\r\n backsplashShape: backsplashShape.export(),\r\n line: SlabAdditionalShape.line.export()\r\n }\r\n })\r\n }\r\n\r\n addActiveBacksplash = (SlabAdditionalShape) => {\r\n this.additionalShapes.push(SlabAdditionalShape);\r\n }\r\n\r\n findAdditionalShapeByLine = (line) => {\r\n return this.additionalShapes.find(additionalShape => additionalShape.line.id === line.id);\r\n }\r\n\r\n removeActiveBacksplashByLine = (line) => {\r\n for (let i = this.additionalShapes.length - 1; i >= 0; i--) {\r\n if (this.additionalShapes[i].line.id === line.id) {\r\n const shape = workspace.getShapeById(this.additionalShapes[i].backsplashShapeId);\r\n this.removeAllActiveBacksplashesAttachedToShape(shape);\r\n workspace.removeShapeById(this.additionalShapes[i].backsplashShapeId);\r\n }\r\n }\r\n }\r\n\r\n findOneByBacksplashShapeId = (backsplashShapeId) => {\r\n return this.additionalShapes.find(activeBacksplash => {\r\n return activeBacksplash.backsplashShapeId === backsplashShapeId\r\n })\r\n };\r\n\r\n /**\r\n * This will hide all additional shapes that was created for mitered edges, backsplashes and mitered segments\r\n */\r\n hideAdditionalShapes = () => {\r\n this.additionalShapes.forEach(SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n if (backsplashShape) {\r\n backsplashShape.deregisterEvents();\r\n } else {\r\n console.error(\"SlabAdditionalShape not found, backsplashShapeId:\", SlabAdditionalShape.backsplashShapeId);\r\n }\r\n });\r\n };\r\n\r\n removeAllActiveBacksplashesAttachedToShape = (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n this.removeActiveBacksplashByLine(line);\r\n }\r\n };\r\n\r\n restoreBacksplashShapes = () => {\r\n this.additionalShapes.forEach(SlabAdditionalShape => {\r\n let backsplashShape = workspace.getShapeById(SlabAdditionalShape.backsplashShapeId);\r\n if (backsplashShape.isHidden && backsplashShape.shapePieces.length === 0) {\r\n backsplashShape.reInitEvents();\r\n }\r\n });\r\n };\r\n\r\n removeShapeFromList = (shapeToRemove) => {\r\n this.additionalShapes = this.additionalShapes.filter(additionalShape => additionalShape.backsplashShapeId !== shapeToRemove.id);\r\n }\r\n}\r\n\r\nexport default SlabAdditionalShapes;\r\n","import {getParallelPoints, mmToInches} from \"../../../../helpers/sqftHelper\";\r\nimport config from \"../../store/sqftConfig\";\r\n\r\nexport const getBacksplashesPos = (line, thickness = -5) => {\r\n thickness = config.measureUnit === \"Imperial\" ? thickness : mmToInches(thickness);\r\n const shape = line.getParent();\r\n let shapePoints = [];\r\n const parallelPoints = getParallelPoints(line.from, line.to, -thickness);\r\n shapePoints.push(...parallelPoints);\r\n shapePoints.push(line.from);\r\n shapePoints.push(line.to);\r\n\r\n return [shape.pos, shapePoints]\r\n}\r\n\r\nexport const getShapePosAndPoints = (parent, from, to, thickness = -5) => {\r\n const shape = parent;\r\n let shapePoints = [];\r\n const parallelPoints = getParallelPoints(from, to, -thickness);\r\n shapePoints.push(...parallelPoints);\r\n shapePoints.push(from);\r\n shapePoints.push(to);\r\n\r\n return [shape.pos, shapePoints]\r\n}\r\n\r\nexport const getBumpoutPointCords = (line) => {\r\n return line.bumpoutOverlay.getBumpoutPointCords()\r\n}\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport store from \"../../../../../../store\";\r\nimport {setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport $ from \"jquery\";\r\nimport {iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport {\r\n RESOURCE_ATTACHED_TO_TYPE,\r\n SIDEBAR_NAVIGATION_BUTTONS,\r\n SIDEBAR_NAVIGATION_CABINET_BUTTONS,\r\n SQFT_GROUP\r\n} from \"../../../../constants\";\r\n\r\nconst endCapCanvas = function() {\r\n this.cursorImage = null;\r\n this.addedImages = null; //like in edges\r\n this.img = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n this.setHighlighting = (disallowDemo) => {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n config.highlight.points = false;\t// remove radiuses\r\n config.highlight.lines = true; // enable lines highlighting\r\n config.highlight.type = RESOURCE_ATTACHED_TO_TYPE.end_cap;\r\n\r\n if (!disallowDemo) {\r\n config.highlight.demoShow = true;\r\n }\r\n setTimeout(function () {\r\n config.highlight.demoShow = false;\r\n }, 1000);\r\n };\r\n\r\n this.setCursorImage = () => {\r\n let bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n\r\n const imgOnLoad = () => {\r\n let bounds = 18;\r\n let ratio;\r\n if (imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', this, true);\r\n this.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n this.registerEvents(); // only after image is load!\r\n }\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n $img.attr('src', iconPlusBlue);\r\n\r\n this.img = $img;\r\n };\r\n\r\n this.registerEvents = () => {\r\n eventManager.setCursor('radius-select', this, true);\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n\r\n this.deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n }\r\n this.destroy = (protect, revertBackAfterMouseUp) => {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(this, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n }\r\n };\r\n\r\n this.onMouseUp = (mousePos) => {\r\n void mousePos;\r\n let hoveredLine = workspace.getHoveredLine();\r\n let hoveredLineCorner = workspace.getHoveredLineCorner();\r\n if (hoveredLine) {\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n const SQFTGroup = state.sqftMenuState.SQFTGroup;\r\n const button = SQFTGroup === SQFT_GROUP.cabinets ? SIDEBAR_NAVIGATION_CABINET_BUTTONS.end_panel : SIDEBAR_NAVIGATION_BUTTONS.end_cap;\r\n const selectedFeature = state.sqftResourceState.selectedFeature;\r\n const featureNameTranslated = selectedFeature.getFeatureName();\r\n\r\n if (hoveredLine || hoveredLineCorner) {\r\n attachResource(hoveredLine, hoveredLineCorner, RESOURCE_ATTACHED_TO_TYPE.end_cap, selectedFeature.dbFeature.id, selectedFeature.partId, featureNameTranslated);\r\n } else {\r\n store.dispatch(setSQFTMenuOpened(button));\r\n }\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n this.checkForRestoreCursor();\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (this.isWaitingToRestoreCursor) {\r\n this.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(this, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n this.setHighlighting(true);\r\n this.setCursorImage();\r\n }\r\n };\r\n this.renderCursor = (ctx) => {\r\n if (this.cursorImage.image && ($(window).width() > 768)) {\r\n let mPos = eventManager.LastKnownMousePos;\r\n if (mPos) {\r\n ctx.drawImage(this.cursorImage.image, mPos.x + 10, mPos.y + 10, this.cursorImage.width, this.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default new endCapCanvas();\r\n","import store from \"../../../store\";\r\nimport sqftConfig from \"../components/canvas/store/sqftConfig\";\r\nimport {setSlabImageHeight, setSlabImageWidth} from \"../../../actions/sqftSlabFunctions\";\r\nimport Radius from \"../components/canvas/core/controls/radius\";\r\n\r\nexport const onMeasureUnitChange = () => {\r\n Radius.onMeasureUnitChange();\r\n\r\n switch(sqftConfig.measureUnit) {\r\n case \"Metric\":\r\n store.dispatch(setSlabImageWidth(sqftConfig.slab.imageWidthMetric));\r\n store.dispatch(setSlabImageHeight(sqftConfig.slab.imageHeightMetric));\r\n break;\r\n case \"Imperial\":\r\n default:\r\n store.dispatch(setSlabImageWidth(sqftConfig.slab.imageWidthImperial));\r\n store.dispatch(setSlabImageHeight(sqftConfig.slab.imageHeightImperial));\r\n }\r\n}\r\n","import sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport DrawImage from \"../textBox/draw/drawImage\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass StaticImage {\r\n svgImageId;\r\n ctx;\r\n x;\r\n y;\r\n width;\r\n height;\r\n isCentered = true;\r\n isScale = true;\r\n beforeRenderCallback = function (){};\r\n\r\n /**\r\n * returns a list needed for integration\r\n * @param svgImageId {string}\r\n * @param x {int}\r\n * @param y {int}\r\n * @param width {int}\r\n * @param height {int}\r\n * @param isCentered {boolean}\r\n * @param isScale {boolean}\r\n * @param beforeRenderCallback {function}\r\n */\r\n constructor(svgImageId, x, y, width, height, isCentered, isScale, beforeRenderCallback) {\r\n this.svgImageId = svgImageId;\r\n this.ctx = sqftEventManager.getCtx();\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n this.isCentered = isCentered;\r\n this.isScale = isScale;\r\n this.beforeRenderCallback = beforeRenderCallback ? beforeRenderCallback : function (){};\r\n }\r\n\r\n isHovered = (mousePos) => {\r\n return pnpolyArray(this.getHoverArray(), mousePos);\r\n }\r\n\r\n getHoverArray = () => {\r\n const width = this.width * config.defaultScale;\r\n const height = this.height * config.defaultScale;\r\n\r\n if (this.isCentered) {\r\n return [\r\n [this.x - width / 2, this.y - height / 2],\r\n [this.x + width / 2, this.y - height / 2],\r\n [this.x + width / 2, this.y + height / 2],\r\n [this.x - width / 2, this.y + height / 2],\r\n ];\r\n } else {\r\n return [\r\n [this.x, this.y],\r\n [this.x + width, this.y],\r\n [this.x + width, this.y + height],\r\n [this.x, this.y + height],\r\n ];\r\n }\r\n }\r\n\r\n render = () => {\r\n this.beforeRenderCallback();\r\n DrawImage.renderImage(this.svgImageId,\r\n this.ctx,\r\n this.x,\r\n this.y,\r\n this.width,\r\n this.height,\r\n this.isCentered,\r\n this.isScale\r\n );\r\n if (sqftConfig.isDevMode()) {\r\n RenderFigures.renderPolygonArray(this.getHoverArray());\r\n }\r\n }\r\n}\r\n\r\nexport default StaticImage\r\n","import * as uuid from \"uuid\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\n\r\nexport default class SQFTShapeOffset {\r\n id;\r\n parent;\r\n animationPoints = [];\r\n state = {\r\n isHidden: false\r\n };\r\n params = {\r\n priority: EventManager.priorities.SEGMENT,\r\n };\r\n design = {\r\n lineWidth: 1,\r\n strokeStyle: 'rgba(137,137,137,0.6)',\r\n };\r\n\r\n constructor(parent, state = {}, params = {}, design = {}) {\r\n this.state = Object.assign(this.state, state);\r\n this.params = Object.assign(this.params, params);\r\n this.design = Object.assign(this.design, design);\r\n this.parent = parent;\r\n this.id = uuid.v4();\r\n this.initEvents();\r\n }\r\n\r\n getParent = () => {\r\n return this.parent;\r\n }\r\n\r\n setParent = (value) => {\r\n this.parent = value;\r\n }\r\n\r\n getPosition = () => {\r\n return this.parent.getPosition();\r\n }\r\n\r\n init = () => {\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n this.params.priority\r\n );\r\n }\r\n\r\n onMouseMove() {\r\n }\r\n\r\n onMouseUp() {\r\n }\r\n\r\n onMouseDown() {\r\n }\r\n\r\n delete() {\r\n this.deregisterEvents();\r\n }\r\n\r\n destroy() {\r\n this.delete();\r\n }\r\n\r\n hide() {\r\n if (!this.state.isHidden) {\r\n this.deregisterEvents();\r\n this.state.isHidden = true\r\n }\r\n }\r\n\r\n restore() {\r\n if (this.state.isHidden) {\r\n this.reInitEvents();\r\n this.state.isHidden = false\r\n }\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n }\r\n\r\n animateShapeTransition(newShape, callback, duration = 0.75 * 1000) { // 10 seconds = 10000 milliseconds\r\n if (!newShape) {\r\n console.error(\"Invalid new shape.\");\r\n return;\r\n }\r\n\r\n if (newShape.id === this.parent.id) {\r\n return;\r\n }\r\n\r\n const originalShapePoints = this.calculateOutlineV2(this.parent.getPointsPointField(), 10);\r\n const newShapePoints = this.calculateOutlineV2(newShape.getPointsPointField(), 10);\r\n\r\n // Animation start time\r\n const startTime = new Date().getTime();\r\n\r\n const animate = () => {\r\n const elapsed = new Date().getTime() - startTime;\r\n const t = Math.min(elapsed / duration, 1);\r\n\r\n let interpolatedShape = [];\r\n for (let i = 0; i < Math.max(originalShapePoints.length, newShapePoints.length); i++) {\r\n // if we have less points in new shape\r\n const pointNew = newShapePoints[i % newShapePoints.length];\r\n // if we have less points in original shape\r\n const pointOriginal = originalShapePoints[i % originalShapePoints.length];\r\n\r\n interpolatedShape.push({\r\n x: pointOriginal.x + t * (pointNew.x - pointOriginal.x),\r\n y: pointOriginal.y + t * (pointNew.y - pointOriginal.y)\r\n });\r\n }\r\n\r\n this.animationPoints = interpolatedShape;\r\n\r\n if (t < 1) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n this.animationPoints = [];\r\n this.setParent(newShape);\r\n callback();\r\n }\r\n };\r\n // begin animation\r\n animate();\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let offsetPoints;\r\n\r\n // if we have animation points the we will render them otherwise we will render shape points\r\n if (this.animationPoints.length > 0) {\r\n offsetPoints = this.calculateOutlineV2(this.animationPoints, 10);\r\n } else {\r\n const parentPoints = this.parent.getPointsPointField();\r\n offsetPoints = this.calculateOutlineV2(parentPoints, 10);\r\n }\r\n\r\n //console.log(\"parentPoints\", parentPoints);\r\n //console.log(\"offsetPoints\", offsetPoints);\r\n\r\n // let tempPoints = [\r\n // {x: 50, y: 50},\r\n // {x: 150, y: 50},\r\n // {x: 150, y: 150},\r\n // {x: 50, y: 150}\r\n // ];\r\n //let tempPointsOffset = this.calculateOffsetPoints(tempPoints, 10);\r\n //console.log(\"tempPoints\", tempPoints);\r\n //console.log(\"tempPointsOffset\", tempPointsOffset);\r\n\r\n //debugger // eslint-disable-line no-debugger\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.setLineDash([7, 5]);\r\n offsetPoints.forEach((p, i) => {\r\n if (i === 0) ctx.moveTo(p.x, p.y);\r\n else ctx.lineTo(p.x, p.y);\r\n });\r\n ctx.strokeStyle = this.design.strokeStyle;\r\n ctx.lineWidth = 1;\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.restore();\r\n };\r\n\r\n calculateOutlineV2(points, offset) {\r\n let outlinePoints = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n let A = points[i];\r\n let B = points[(i + 1) % points.length];\r\n\r\n // Вектор AB\r\n let dx = B.x - A.x;\r\n let dy = B.y - A.y;\r\n\r\n // Вектор нормали (-dy, dx) или (dy, -dx)\r\n // В зависимости от того, в каком направлении идут точки\r\n let nx = dy;\r\n let ny = -dx;\r\n\r\n // Нормализуем вектор нормали\r\n let length = Math.sqrt(nx * nx + ny * ny);\r\n nx /= length;\r\n ny /= length;\r\n\r\n // Добавляем точки обводки с учетом смещения\r\n outlinePoints.push({\r\n x: A.x + nx * offset,\r\n y: A.y + ny * offset\r\n });\r\n outlinePoints.push({\r\n x: B.x + nx * offset,\r\n y: B.y + ny * offset\r\n });\r\n }\r\n\r\n return outlinePoints;\r\n }\r\n\r\n calculateOffsetPoints = (points, offsetDistance) => {\r\n let offsetPoints = [];\r\n\r\n points = [points[points.length-1], ...points, points[0], points[1]];\r\n\r\n for (let i = 1; i < points.length-2; i++) {\r\n let prev = points[i-1];\r\n let curr = points[i];\r\n let next = points[i+1];\r\n\r\n let dir1 = {x: curr.x - prev.x, y: curr.y - prev.y};\r\n let dir2 = {x: next.x - curr.x, y: next.y - curr.y};\r\n\r\n let norm1 = {x: dir1.y, y: -dir1.x};\r\n let norm2 = {x: dir2.y, y: -dir2.x};\r\n\r\n // Проверка острого угла\r\n let dotProduct = norm1.x * norm2.x + norm1.y * norm2.y;\r\n let avgNorm;\r\n if (dotProduct < 0) {\r\n avgNorm = i === 1 ? norm1 : norm2; // Использование нормали для более \"плоского\" отрезка\r\n } else {\r\n avgNorm = {x: (norm1.x + norm2.x) / 2, y: (norm1.y + norm2.y) / 2};\r\n }\r\n\r\n let length = Math.sqrt(avgNorm.x * avgNorm.x + avgNorm.y * avgNorm.y);\r\n let unitNorm = {x: avgNorm.x / length, y: avgNorm.y / length};\r\n\r\n offsetPoints.push({\r\n x: curr.x + unitNorm.x * offsetDistance,\r\n y: curr.y + unitNorm.y * offsetDistance\r\n });\r\n }\r\n return offsetPoints;\r\n }\r\n\r\n // offsetLine = (points, distance) => {\r\n // let offsetPoints = [];\r\n //\r\n // for (let i = 0; i < points.length - 1; i++) {\r\n // let p0 = points[i];\r\n // let p1 = points[i + 1];\r\n //\r\n // // Вычислить направление отрезка\r\n // let dx = p1.x - p0.x;\r\n // let dy = p1.y - p0.y;\r\n //\r\n // // Вычислить длину вектора\r\n // let len = Math.sqrt(dx * dx + dy * dy);\r\n //\r\n // // Нормализовать вектор\r\n // dx /= len;\r\n // dy /= len;\r\n //\r\n // // Вычислить нормаль (перпендикуляр)\r\n // //let nx = -dy;\r\n // //let ny = dx;\r\n // let nx = dy;\r\n // let ny = -dx;\r\n //\r\n // // Создать офсетную точку\r\n // offsetPoints.push({\r\n // x: p0.x + nx * distance,\r\n // y: p0.y + ny * distance\r\n // });\r\n // }\r\n //\r\n // // Добавить последнюю точку\r\n // let p0 = points[points.length - 2];\r\n // let p1 = points[points.length - 1];\r\n //\r\n // // Вычислить направление отрезка\r\n // let dx = p1.x - p0.x;\r\n // let dy = p1.y - p0.y;\r\n //\r\n // // Вычислить длину вектора\r\n // let len = Math.sqrt(dx * dx + dy * dy);\r\n //\r\n // // Нормализовать вектор\r\n // dx /= len;\r\n // dy /= len;\r\n //\r\n // // Вычислить нормаль (перпендикуляр)\r\n // //let nx = -dy;\r\n // //let ny = dx;\r\n // let nx = dy;\r\n // let ny = -dx;\r\n //\r\n // offsetPoints.push({\r\n // x: p1.x + nx * distance,\r\n // y: p1.y + ny * distance\r\n // });\r\n // //console.log(\"offsetPoints\", offsetPoints);\r\n // return offsetPoints;\r\n // }\r\n}\r\n","export default function createEventManager() {\r\n const listeners = {};\r\n\r\n return {\r\n on(eventName, callback) {\r\n if (!listeners[eventName]) {\r\n listeners[eventName] = [];\r\n }\r\n listeners[eventName].push(callback);\r\n },\r\n off(eventName, callback) {\r\n if (!listeners[eventName]) return;\r\n const index = listeners[eventName].indexOf(callback);\r\n if (index !== -1) {\r\n listeners[eventName].splice(index, 1);\r\n }\r\n },\r\n emit(eventName, data) {\r\n if (!listeners[eventName]) return;\r\n listeners[eventName].forEach(callback => callback(data));\r\n },\r\n };\r\n}\r\n","import LineImage from \"../core/shapes/imageParts/lineImage\";\r\nimport EventManager from \"../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../core/shapes/pointV2\";\r\n//import line from \"../core/shapes/line\";\r\n\r\n/**\r\n *\r\n * @param points[]\r\n * @param parent\r\n * @return lines[{}]\r\n */\r\nexport const createImageLinesFromPoints = (points, parent) => {\r\n let lines = [];\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n const shapeLine = new LineImage(\r\n points[i],\r\n points[(i + 1) % points.length],\r\n parent,\r\n i\r\n );\r\n // const shapeLine = new line([i], points[(i + 1) % points.length]);\r\n // void parent;\r\n\r\n lines.push(shapeLine);\r\n }\r\n\r\n return lines;\r\n};\r\n\r\n\r\n/**\r\n * @param x\r\n * @param y\r\n * @param parent\r\n * @return {PointV2}\r\n */\r\nexport const getImagePoint = (x, y, parent) => {\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: false,\r\n isCentered: true,\r\n isResizedByPoint: false,\r\n isScaledByPoint: false,\r\n isVisibleOnHover: false,\r\n };\r\n let pointDesign = {\r\n radius: 0, // hide corner points\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.black\r\n };\r\n\r\n return new PointV2(x, y, parent, pointState, pointDesign);\r\n}\r\n","import SimpleLine from \"../simpleLine\";\r\nimport NumberText from \"../../workspace/text/numberText\";\r\nimport {COLORS} from \"../../../../../../../colorThemes\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {DIRECTIONS, getLineDirection, getLineOrientation} from \"../../../../../helpers/shapeHelper\";\r\nimport {mmToInches, orientation} from \"../../../../../helpers/sqftHelper\";\r\nimport moveDiagonalLine from \"../../../../../lib/moveDiagonalLine\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nclass LineImage extends SimpleLine {\r\n constructor(from, to, parent, lineIndex) {\r\n super(from, to, parent)\r\n\r\n this.movableImage = parent;\r\n this.lineIndex = lineIndex;\r\n const design = {fontColor: COLORS.red, eventsPriority: sqftEventManager.priorities.IMAGE_LINE};\r\n let xOffset = 0;\r\n let yOffset = 0;\r\n switch (lineIndex) {\r\n case 0:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n case 1:\r\n xOffset = 0;\r\n yOffset = -15;\r\n break;\r\n case 2:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n case 3:\r\n xOffset = 0;\r\n yOffset = 15;\r\n break;\r\n }\r\n // const xOffset = lineIndex === 0 || lineIndex === 2 ? 0 : 15;\r\n // const yOffset = lineIndex === 0 || lineIndex === 2 ? 15 : 0;\r\n this.measurementInsideShape = new NumberText(0, {xOffset: xOffset, yOffset}, design, workspace, this.updatePosInsideShape, false);\r\n }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.from.destroy(protect);\r\n this.lineLengthText.destroy();\r\n this.measurementInsideShape.destroy();\r\n }\r\n };\r\n\r\n deregisterEvents = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.from.deregisterEvents();\r\n this.lineLengthText.deregisterEvents();\r\n this.measurementInsideShape.deregisterEvents();\r\n }\r\n };\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n\r\n this.from.reInitEvents();\r\n this.lineLengthText.reInitEvents();\r\n\r\n if (this.movableImage.shouldRenderMeasurementsInsideTheShape()) {\r\n const outerShape = this.movableImage.getOuterShape();\r\n if (outerShape) {\r\n this.measurementInsideShape.reInitEvents();\r\n }\r\n }\r\n }\r\n }\r\n\r\n updatePosInsideShape = (val, numberText, prevValue) => {\r\n let diff = prevValue - val;\r\n diff = sqftConfig.measureUnit === MEASURE_UNITS.Metric\r\n ? mmToInches(diff)\r\n : diff;\r\n\r\n const angleInRadians = this.movableImage.rotatedDegrees * Math.PI / 180; // Предполагая, что rotationAngle - это угол вращения в градусах\r\n\r\n // Calculate the offset taking into account the rotation angle\r\n const deltaX = diff * Math.cos(angleInRadians);\r\n const deltaY = diff * Math.sin(angleInRadians);\r\n\r\n const movableImage = this.from.parent;\r\n const lineIndex = this.lineIndex;\r\n let posXDiff = 0;\r\n let posYDiff = 0;\r\n switch (lineIndex) {\r\n case 0:\r\n posXDiff = -deltaY;\r\n posYDiff = -deltaX;\r\n break;\r\n case 1:\r\n posXDiff = +deltaX;\r\n posYDiff = +deltaY;\r\n break;\r\n case 2:\r\n posXDiff = +deltaY;\r\n posYDiff = +deltaX;\r\n break;\r\n case 3:\r\n posXDiff = -deltaX;\r\n posYDiff = -deltaY;\r\n break;\r\n }\r\n\r\n const newPosition = {x: movableImage.pos.x + posXDiff, y: movableImage.pos.y + posYDiff}\r\n movableImage.setPosition(newPosition);\r\n movableImage.shapeAbsolute.setAbsolutePos(newPosition);\r\n };\r\n\r\n /**\r\n * parent method override\r\n * @param xDiff\r\n * @param yDiff\r\n */\r\n moveLine = (xDiff, yDiff) => {\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n //set min and max line length\r\n let testNewImageValue = newImageWidth - xDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageWidth = testNewImageValue;\r\n this.from.x -= xDiff;\r\n this.to.x -= xDiff;\r\n }\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n let testNewImageValue = newImageWidth + xDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageWidth = testNewImageValue;\r\n this.parent.setPosition({x: this.parent.pos.x - xDiff, y: this.parent.pos.y});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += xDiff;\r\n parallelLine.to.x += xDiff;\r\n\r\n //console.log(\"newImageWidth\", testNewImageValue);\r\n //console.log(\"parallelLine.from.y\", parallelLine.to.x);\r\n //console.log(\"parallelLine.to.y\", parallelLine.to.x);\r\n //console.log(\"xDiff\", xDiff);\r\n }\r\n }\r\n } else if (o === orientation.HORIZONTAL) {\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n let testNewImageValue = newImageHeight - yDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageHeight = testNewImageValue;\r\n this.from.y -= yDiff;\r\n this.to.y -= yDiff;\r\n }\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n let testNewImageValue = newImageHeight + yDiff;\r\n if (sqftConfig.maxApplianceLineLength > testNewImageValue\r\n && sqftConfig.minApplianceLineLength < testNewImageValue\r\n ) {\r\n newImageHeight = testNewImageValue;\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - yDiff});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += yDiff;\r\n parallelLine.to.y += yDiff;\r\n }\r\n }\r\n } else {\r\n const nextLine = this.parent.getNextLine(this);\r\n const prevLine = this.parent.getPrevLine(this);\r\n moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n getMaxLength = () => sqftConfig.maxApplianceLineLength * sqftConfig.getMeasureMultiplier()\r\n}\r\n\r\nexport default LineImage;\r\n","import * as uuid from \"uuid\";\r\n\r\nimport sqftConfig from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport EventManager from \"../../store/sqftEventManager\";\r\nimport {getMidPoint, getPointDistance, getPointField, orientation} from \"../../../../helpers/sqftHelper\";\r\nimport {\r\n DIRECTIONS,\r\n getLineDirection,\r\n getLineLengthNumberTextV2ForTheImage,\r\n getLineOrientation,\r\n getPointDirection\r\n} from \"../../../../helpers/shapeHelper\";\r\nimport {isPointInsidePolygon} from \"../../../../lib/pnpoly\";\r\nimport {getLineBordersArrayV2} from \"../../helpers/lineHelper\";\r\nimport moveDiagonalLine from \"../../../../lib/moveDiagonalLine\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport COLOR_THEMES from \"../../../../../../colorThemes\";\r\nimport store from \"../../../../../../store\";\r\nimport {SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\nimport resizeLine from \"./overlays/resizeLine\";\r\n\r\nclass SimpleLine {\r\n id;\r\n from;\r\n to;\r\n parent;\r\n lineLengthText;\r\n\r\n constructor(from, to, parent) {\r\n this.id = uuid.v4();\r\n this.from = from;\r\n this.to = to;\r\n this.parent = parent;\r\n this.design = {\r\n lineThickness: 1,\r\n lineHoveredArea: 10\r\n };\r\n this.state = {\r\n isHovering: false,\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n movePointDistance: null\r\n };\r\n this.initLineLength();\r\n this.initEvents();\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n from: this.from.exportData(),\r\n to: this.to.exportData()\r\n }\r\n }\r\n\r\n importData = (lineData) => {\r\n this.id = lineData.id;\r\n this.from.importData(lineData.from);\r\n this.to.importData(lineData.to);\r\n }\r\n\r\n isHovering = () => {\r\n return this.state.isHovering\r\n }\r\n\r\n getParent = () => {\r\n return this.parent\r\n }\r\n\r\n initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n this.onMouseMove,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n this.onMouseDown,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n this.onMouseLeave,\r\n this,\r\n EventManager.priorities.OVERALL\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.IMAGE_LINE\r\n );\r\n };\r\n\r\n initLineLength = () => {\r\n this.lineLengthText = getLineLengthNumberTextV2ForTheImage(this.from, this.to, this, this.setLineLengthFromNumberValue, true);\r\n }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.from.destroy(protect);\r\n this.lineLengthText.destroy();\r\n }\r\n };\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n this.from.deregisterEvents();\r\n this.lineLengthText.deregisterEvents();\r\n }\r\n\r\n reInitEvents = () => {\r\n if (this.isHidden) {\r\n this.initEvents();\r\n this.isHidden = false;\r\n\r\n this.from.reInitEvents();\r\n this.lineLengthText.reInitEvents();\r\n }\r\n }\r\n\r\n onMouseLeave() {\r\n this.state.isHovering = false;\r\n this.state.mouseDown = false;\r\n }\r\n\r\n onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (this.state.mouseDown) {\r\n this.state.mouseDown = false;\r\n this.state.mouseDownPosition = null;\r\n //this.from.snapToGrid();\r\n //this.to.snapToGrid();\r\n }\r\n }\r\n onMouseDown(mousePos, e) {\r\n void e;\r\n if (this.state.isHovering) {\r\n this.state.mouseDown = true;\r\n this.state.movePointDistance = getPointDistance(this.from, this.to);\r\n this.state.mouseDownPosition = mousePos;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isMouseOverLineV2 = (mousePos) => {\r\n const lineBordersArray = getLineBordersArrayV2(this.from,\r\n this.to,\r\n this.design.lineHoveredArea\r\n )\r\n //this.state.isHovering\r\n return isPointInsidePolygon(mousePos, lineBordersArray);// || this.state.mouseDown;\r\n }\r\n\r\n onMouseMove = (mousePos, e) => {\r\n void e;\r\n // if (e.terminate && !parent.isHovering()) {\r\n // this.state.isHovering = false;\r\n // return false;\r\n // }\r\n const isMouseOverLine = this.isMouseOverLineV2(mousePos);\r\n this.state.isHovering = isMouseOverLine;\r\n\r\n if (this.state.mouseDown || isMouseOverLine) {\r\n if (workspace.getAllowEdges() && !this.from.angleIsChanged && !this.to.angleIsChanged) {\r\n if (this.state.mouseDown) {\r\n this.moveLineWithMouse(mousePos);\r\n }\r\n EventManager.releaseStealLock(this.parent);\r\n EventManager.stealCursor();\r\n switch(getLineOrientation(this.from, this.to)) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", this);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", this);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", this);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", this);\r\n break;\r\n }\r\n return this.state.mouseDown;\r\n }\r\n\r\n if (sqftConfig.highlight.lines && this.state.isHovering) {\r\n EventManager.releaseStealLock(this.parent);\r\n EventManager.stealCursor();\r\n return false;\r\n }\r\n // prevent all other mouseover's\r\n }\r\n\r\n if (workspace.getHoverShape() !== this.parent) {\r\n this.state.isHovering = false;\r\n }\r\n EventManager.resetCursor(this);\r\n return false;\r\n }\r\n\r\n setLineLengthFromNumberValue = (newValue) => {\r\n newValue = newValue / sqftConfig.getMeasureMultiplier()\r\n const currentDistance = getPointDistance(this.from, this.to);\r\n const diff = newValue - currentDistance;\r\n resizeLine(this, diff, false);\r\n\r\n //adjust parent size\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - diff / 2});\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n newImageHeight = newValue;\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n newImageHeight = newValue;\r\n }\r\n this.from.y += diff / 2;\r\n this.to.y += diff / 2;\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += diff / 2;\r\n parallelLine.to.y += diff / 2;\r\n } else if (o === orientation.HORIZONTAL) {\r\n this.parent.setPosition({x: this.parent.pos.x - diff / 2, y: this.parent.pos.y});\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n newImageWidth = newValue;\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n newImageWidth = newValue;\r\n }\r\n\r\n this.from.x += diff / 2;\r\n this.to.x += diff / 2;\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += diff / 2;\r\n parallelLine.to.x += diff / 2;\r\n } else {\r\n // const nextLine = this.parent.getNextLine(this);\r\n // const prevLine = this.parent.getPrevLine(this);\r\n // moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n\r\n moveLineWithMouse = (mousePos) => {\r\n\r\n // console.log(\"mousePos\", mousePos);\r\n // console.log(\"this.from.x\", this.from.x);\r\n // console.log(\"this.from.x\", this.to.x);\r\n\r\n const scale = workspace.getScale();\r\n const xDiff = (this.state.mouseDownPosition.x - mousePos.x) / scale;\r\n const yDiff = (this.state.mouseDownPosition.y - mousePos.y) / scale;\r\n const o = getLineOrientation(this.from, this.to);\r\n if (o === orientation.VERTICAL) {\r\n this.state.mouseDownPosition.x = mousePos.x;\r\n } else if (o === orientation.HORIZONTAL) {\r\n this.state.mouseDownPosition.y = mousePos.y;\r\n } else {\r\n this.state.mouseDownPosition = mousePos;\r\n }\r\n\r\n // console.log(\"xDiff\", xDiff);\r\n // console.log(\"yDiff\", yDiff);\r\n // console.log(\"this.state.mouseDownPosition\", this.state.mouseDownPosition);\r\n // console.log(\"mousePos\", mousePos);\r\n this.moveLine(xDiff, yDiff);\r\n };\r\n\r\n moveLine = (xDiff, yDiff) => {\r\n const currentSize = this.parent.getSize();\r\n let newImageWidth = currentSize.width;\r\n let newImageHeight = currentSize.height;\r\n\r\n const o = getLineOrientation(this.from, this.to);\r\n const lineDirection = getLineDirection(this.from, this.to);\r\n\r\n if (o === orientation.VERTICAL) {\r\n if (lineDirection === DIRECTIONS.SOUTH) {\r\n newImageWidth -= xDiff;\r\n this.from.x -= xDiff;\r\n this.to.x -= xDiff;\r\n } else if (lineDirection === DIRECTIONS.NORTH) {\r\n newImageWidth += xDiff;\r\n this.parent.setPosition({x: this.parent.pos.x - xDiff, y: this.parent.pos.y});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.x += xDiff;\r\n parallelLine.to.x += xDiff;\r\n }\r\n } else if (o === orientation.HORIZONTAL) {\r\n if (lineDirection === DIRECTIONS.WEST) {\r\n newImageHeight -= yDiff;\r\n this.from.y -= yDiff;\r\n this.to.y -= yDiff;\r\n } else if (lineDirection === DIRECTIONS.EAST) {\r\n newImageHeight += yDiff;\r\n this.parent.setPosition({x: this.parent.pos.x, y: this.parent.pos.y - yDiff});\r\n this.parent.updateSnappedPos(); //resolve snapping v1\r\n //this.parent.resetAbsolutePos(); //resolve snapping v2\r\n\r\n //move points for the parallel line\r\n const parallelLine = this.getParallelLine();\r\n parallelLine.from.y += yDiff;\r\n parallelLine.to.y += yDiff;\r\n }\r\n } else {\r\n const nextLine = this.parent.getNextLine(this);\r\n const prevLine = this.parent.getPrevLine(this);\r\n moveDiagonalLine(this, nextLine, prevLine, this.state.movePointDistance, yDiff, o);\r\n //newImageWidth += xDiff;\r\n //newImageHeight += yDiff;\r\n }\r\n\r\n this.parent.updateLinesLength();\r\n this.updatePrentSize(newImageWidth, newImageHeight);\r\n }\r\n\r\n updatePrentSize = (newImageWidth, newImageHeight) => {\r\n const imageState = this.parent.getState();\r\n if (newImageHeight >= imageState.minimumHeight && newImageWidth >= imageState.minimumWidth ) {\r\n this.parent.setSize({\r\n width: +newImageWidth,\r\n height: +newImageHeight\r\n });\r\n }\r\n\r\n SqftStore.updateCalculations();\r\n }\r\n\r\n updateLineLength = () => {\r\n const midPoint = getMidPoint(this.from, this.to);\r\n const distance = getPointDistance(this.from, this.to);\r\n this.lineLengthText.pos.x = midPoint.x;\r\n this.lineLengthText.pos.y = midPoint.y;\r\n this.lineLengthText.value = distance;\r\n }\r\n\r\n getLineDirection = () => {\r\n const prevLine = this.parent.getPrevLine(this);\r\n const nextLine = this.parent.getNextLine(this);\r\n\r\n return getPointDirection(this.from, this.to, nextLine.to, prevLine.from);\r\n }\r\n\r\n render = (ctx) => {\r\n this.renderHovering(ctx);\r\n }\r\n\r\n renderHovering = (ctx) => {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (this.state.isHovering && activeButton === SIDEBAR_NAVIGATION_BUTTONS.resize) {\r\n let pointFieldFrom = getPointField(this.from.x, this.from.y, this.parent);\r\n let pointFieldTo = getPointField(this.to.x, this.to.y, this.parent);\r\n void pointFieldFrom;\r\n void pointFieldTo;\r\n void ctx;\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 3;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.moveTo(pointFieldFrom.x, pointFieldFrom.y);\r\n ctx.lineTo(pointFieldTo.x, pointFieldTo.y);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n\r\n getParallelLine = () => {\r\n const lines = this.parent.getLines();\r\n const lineIndex = lines.indexOf(this);\r\n const parallelLineIndex = (lineIndex + 2) % 4;\r\n\r\n return lines[parallelLineIndex];\r\n }\r\n\r\n getOffset = () => {\r\n let scale = sqftConfig.scale;\r\n let workspacePos = workspace.getOffset();\r\n if (this.parent) {\r\n let _pos = this.parent.getPosition();\r\n if (sqftConfig.workspace.snapToGrid) {\r\n _pos = this.parent.getSnappedPosition();\r\n }\r\n return {\r\n x: workspacePos.x + (_pos.x * scale),\r\n y: workspacePos.y + (_pos.y * scale)\r\n }\r\n } else {\r\n return {x: 0, y: 0};\r\n }\r\n };\r\n\r\n deleteAttachedItem = () => {\r\n return true\r\n }\r\n\r\n isWithBumpout = () => {\r\n return false\r\n }\r\n\r\n isWithMitered = () => {\r\n return false\r\n }\r\n}\r\n\r\nexport default SimpleLine;\r\n","import {RENDER_TEMPLATES} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../pointV2\";\r\nimport {getParallelPoints, getPointField, getPointOnTheLine} from \"../../../../../helpers/sqftHelper\";\r\nimport {getAngleBetween3Points} from \"../../../../../helpers/shapeHelper\";\r\nimport {changeValuePopup} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport sqftImageManager from \"../../../store/sqftImageManager\";\r\nimport sqftShape from \"../sqftShape\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nexport default class ShapeRotatable {\r\n __shape;\r\n __cornerPoints = [];\r\n rotateToPointAngle = null; // angle between shape center, hovered point and zero shape point\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n //this.__shape.setCenter(ShapeHelper.getCenterPoint(shape.getLines().map(line => line.from)));\r\n this.initCornerBorderPoints();\r\n if (shape instanceof sqftShape) {\r\n this.hideShapePoints();\r\n }\r\n }\r\n\r\n getCornerPoint() {\r\n return this.__shape.staticCenterPoint\r\n }\r\n\r\n getCornerPoints() {\r\n return this.__cornerPoints\r\n }\r\n\r\n reInitShapePoints() {\r\n if (this.__shape instanceof sqftShape) {\r\n const lines = this.__shape.getLines();\r\n for (const line of lines) {\r\n line.from.initEvents();\r\n }\r\n }\r\n }\r\n\r\n hideShapePoints() {\r\n const lines = this.__shape.getLines();\r\n for (const line of lines) {\r\n line.from.deregisterEvents();\r\n }\r\n }\r\n\r\n initCornerBorderPoints = () => {\r\n let minMaxPoints;\r\n if (this.__shape instanceof sqftShape) {\r\n minMaxPoints = sqftShapeManager.getMinMaxShapePoints(this.__shape, true, false)\r\n } else {\r\n minMaxPoints = sqftImageManager.getMinMaxShapePoints(this.__shape, true, false);\r\n }\r\n const {minX, maxX, minY, maxY} = minMaxPoints;\r\n console.log(\"minX, maxX, minY, maxY\", minX, maxX, minY, maxY);\r\n\r\n let pointParams = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCentered: true,\r\n // isCenteredByY: pointParams.isCenteredByY,\r\n // isResizedByPoint: pointParams.isResizedByPoint,\r\n // isScaledByPoint: pointParams.isScaledByPoint,\r\n isVisibleOnHover: false,\r\n\r\n // Move point callback\r\n moveCallback: (mousePos, movablePoint) => {\r\n // get angles\r\n const isSlabMode = store.getState().sqftSlabState.isShowSlabTool;\r\n const shape = movablePoint.grandParent;\r\n const shapeCenter = shape.getCenter();\r\n const shapeCenterOnField = getPointField(shapeCenter.x, shapeCenter.y, shape);\r\n const movablePointOnField = getPointField(movablePoint.posX, movablePoint.posY, shape);\r\n const shapeZeroAnglePoint = {x: shapeCenterOnField.x, y: shapeCenterOnField.y - 50};\r\n let rotateToMouseAngle = getAngleBetween3Points(mousePos, shapeCenterOnField, shapeZeroAnglePoint);\r\n let rotatedDegrees;\r\n isSlabMode ? rotatedDegrees = shape.rotatedDegreesSlab : rotatedDegrees = shape.rotatedDegrees;\r\n\r\n if (!shape.shapeRotatable) {\r\n return;\r\n }\r\n\r\n // remember rotateToPointAngle angle (it is always the same)\r\n if (!shape.shapeRotatable.rotateToPointAngle) {\r\n shape.shapeRotatable.rotateToPointAngle = getAngleBetween3Points(movablePointOnField, shapeCenterOnField, shapeZeroAnglePoint);\r\n shape.shapeRotatable.rotateToPointAngle = mousePos.x < shapeCenterOnField.x ? 360 - shape.shapeRotatable.rotateToPointAngle : shape.shapeRotatable.rotateToPointAngle;\r\n //shape.shapeRotatable.rotateToPointAngle -= rotatedDegrees;\r\n }\r\n\r\n // ROTATE TO LEFT\r\n const rotateToAngleIn360 = mousePos.x < shapeCenterOnField.x ? 360 - rotateToMouseAngle : rotateToMouseAngle;\r\n const rotateToAngleWithoutHoveredPointAngle = shape.shapeRotatable.rotateToPointAngle - rotateToAngleIn360 - rotatedDegrees;\r\n const rotateToDegreesValue = Math.round(rotateToAngleWithoutHoveredPointAngle);\r\n\r\n // Normalize angle to range [0, 360)\r\n const normalizedRotateToDegreesValue = (rotateToDegreesValue % 360 + 360) % 360;\r\n\r\n if (normalizedRotateToDegreesValue) {\r\n this.__shape.rotate(normalizedRotateToDegreesValue, shape.Direction.LEFT, isSlabMode, this.getCornerPoint());\r\n\r\n // ROTATE TO RIGHT\r\n // const rotateToAngleWithoutHoveredPointAngle = rotateToAngle - shape.shapeRotatable.rotateToPointAngle - rotatedDegrees;\r\n // const rotateToDegreesValue = Math.round(rotateToAngleWithoutHoveredPointAngle);\r\n // this.__shape.rotate(rotateToDegreesValue, shape.Direction.RIGHT, isSlabMode, this.getCornerPoint());\r\n\r\n isSlabMode\r\n ? shape.rotatedDegreesSlab = (shape.rotatedDegreesSlab % 360 + 360) % 360\r\n : shape.rotatedDegrees = (shape.rotatedDegrees % 360 + 360) % 360;\r\n\r\n // update valuePopup\r\n const state = store.getState();\r\n const valuePopup = state.sqftMenuState.changeValuePopups.find(valuePopup => valuePopup.id === 'shape' + shape.id);\r\n const displayValueInPopup = isSlabMode ? shape.rotatedDegreesSlab : shape.rotatedDegrees;\r\n store.dispatch(changeValuePopup({\r\n ...valuePopup,\r\n value: displayValueInPopup\r\n }));\r\n }\r\n\r\n\r\n // Debugging information\r\n // console.log(\"rotateToDegreesValue\", rotateToDegreesValue);\r\n // console.log(\"normalizedRotateToDegreesValue\", normalizedRotateToDegreesValue);\r\n // console.log(\"shape.rotatedDegrees2\", shape.rotatedDegrees);\r\n // console.log('movablePointOnField', movablePointOnField);\r\n // console.log(\"mousePos.x < shapeCenter.x\", mousePos.x < shapeCenter.x);\r\n // console.log('rotatePointAngle', shape.shapeRotatable.rotateToPointAngle);\r\n // console.log('rotateToMouseAngle', rotateToMouseAngle);\r\n // console.log('rotateToAngle', rotateToAngle);\r\n // console.log(\"rotateToAngleWithoutHoveredPointAngle\", rotateToAngleWithoutHoveredPointAngle);\r\n // console.log('shapeCenterOnField', shapeCenterOnField);\r\n // console.log('mousePos', mousePos);\r\n // console.log('movablePoint', movablePoint);\r\n // console.log('-------------------------------');\r\n },\r\n mouseUpCallback: (mousePos, movablePoint) => {\r\n const shape = movablePoint.grandParent;\r\n shape.shapeRotatable.rotateToPointAngle = null;\r\n }\r\n };\r\n let pointDesign = {\r\n radius: 5,\r\n lineWidth: 1,\r\n layout: CORE_POINT_LAYOUTS.green\r\n };\r\n this.__cornerPoints = [\r\n new PointV2(minX, minY, this.__shape, pointParams, pointDesign),\r\n new PointV2(maxX, minY, this.__shape, pointParams, pointDesign),\r\n new PointV2(maxX, maxY, this.__shape, pointParams, pointDesign),\r\n new PointV2(minX, maxY, this.__shape, pointParams, pointDesign),\r\n ];\r\n }\r\n\r\n destroy = () => {\r\n for (const cornerPoint of this.__cornerPoints) {\r\n cornerPoint.destroy()\r\n }\r\n }\r\n\r\n rotateShapeRotatablePoints = (aroundPoint, angle, isSlabMode) => {\r\n if (this.__shape) {\r\n for (const cornerPoint of this.getCornerPoints()) {\r\n cornerPoint.rotate(aroundPoint, angle, isSlabMode);\r\n }\r\n }\r\n }\r\n\r\n getCornerPointsPointField = () => {\r\n let cornerPointsPointField = [];\r\n for (const currentPoint of this.__cornerPoints) {\r\n cornerPointsPointField.push(\r\n getPointField( currentPoint.modelCorePoint.getPosX(), currentPoint.modelCorePoint.getPosY(), this.__shape)\r\n );\r\n }\r\n\r\n return cornerPointsPointField;\r\n }\r\n\r\n render = (ctx, template= RENDER_TEMPLATES.default) => {\r\n //this.updatePointCords();\r\n this.renderFrameBorder(ctx, this.__shape);\r\n this.renderFramePoints(ctx, this.__shape);\r\n if (this.__shape instanceof sqftShape) {\r\n this.renderLines(ctx, template);\r\n }\r\n };\r\n\r\n renderLines = (ctx, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let lines = this.__shape.getLines();\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n }\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_disabled;\r\n switch (template) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.fill();\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n ctx.fillStyle = isSlabMode ? COLOR_THEMES[sqftConfig.activeTheme].active_disabled : this.__shape.getFillColor();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n void sqftMenuState;\r\n }\r\n };\r\n\r\n renderFrameBorder = (ctx) => {\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n\r\n let pointField = getPointField(\r\n this.__cornerPoints[0].modelCorePoint.getPosX(),\r\n this.__cornerPoints[0].modelCorePoint.getPosY(),\r\n this.__shape\r\n );\r\n ctx.moveTo(pointField.x, pointField.y);\r\n\r\n for (const cornerPoint of this.__cornerPoints) {\r\n pointField = getPointField(\r\n cornerPoint.modelCorePoint.getPosX(),\r\n cornerPoint.modelCorePoint.getPosY(),\r\n this.__shape\r\n );\r\n ctx.lineTo(pointField.x, pointField.y);\r\n }\r\n\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n ctx.closePath();\r\n ctx.stroke();\r\n }\r\n\r\n renderFramePoints = (ctx) => {\r\n let len = this.__cornerPoints.length;\r\n const cornerPointsPointField = this.getCornerPointsPointField();\r\n for (const index in cornerPointsPointField) {\r\n //cornerPoint.render(ctx);\r\n if (cornerPointsPointField.hasOwnProperty(index)) {\r\n let current = cornerPointsPointField[+index];\r\n let previous = cornerPointsPointField[(+index + len - 1) % len];\r\n let next = cornerPointsPointField[(+index + 1) % len];\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n // ctx.translate(\r\n // cornerPointsPointField[index].x,\r\n // cornerPointsPointField[index].y,\r\n // );\r\n //ctx.rotate(90 * cornerPointIndex * (Math.PI / 180));\r\n // RenderFigures.drawRotatedArrow(ctx,\r\n // - 20, 0,\r\n // 0, - 20,\r\n // - 20, - 20,\r\n // 10\r\n // )\r\n const from = getPointOnTheLine(current, previous, 20);\r\n const to = getPointOnTheLine(current, next, 20);\r\n const [midPoint, midPoint2] = getParallelPoints(from, current,20);\r\n void midPoint;\r\n RenderFigures.drawRotatedArrow(ctx,\r\n from.x, from.y,\r\n to.x, to.y,\r\n midPoint2.x, midPoint2.y,\r\n 10\r\n )\r\n\r\n //console.log(\"from\", from);\r\n //console.log(\"to\", to);\r\n //debugger // eslint-disable-line no-debugger\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = 'rgba(159,197,34,0.47)';\r\n ctx.fillStyle = 'rgba(159,197,34,0.47)';\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n\r\n //RenderFigures.renderCircle(from, 5,1, '#63b141');\r\n //RenderFigures.renderCircle(to, 8,1, '#63b141');\r\n //RenderFigures.renderCircle({x:to.x, y: from.y}, 12,1, '#63b141');\r\n }\r\n }\r\n }\r\n\r\n\r\n // renderLinesBetweenPoints = (ctx) => {\r\n // ctx.beginPath();\r\n // ctx.lineWidth = lineWidth;\r\n // ctx.strokeStyle = color;\r\n // drawLines(ctx);\r\n //\r\n // ctx.stroke();\r\n // };\r\n}\r\n","export default class ChangeValuePopup {\r\n id;\r\n min;\r\n max;\r\n confirmCallback;\r\n increaseCallback;\r\n decreaseCallback;\r\n inputChangeCallback;\r\n value;\r\n position;\r\n\r\n constructor(id, min, max, confirmCallback, increaseCallback, decreaseCallback, inputChangeCallback, value, position) {\r\n this.id = id;\r\n this.min = min;\r\n this.max = max;\r\n this.confirmCallback = confirmCallback;\r\n this.increaseCallback = increaseCallback;\r\n this.decreaseCallback = decreaseCallback;\r\n this.inputChangeCallback = inputChangeCallback;\r\n this.value = value;\r\n this.position = position;\r\n }\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport store from \"../../../../../../store\";\r\nimport workspace from \"../../core/workspace\";\r\nimport {LineHandlesModel} from \"../models/LineHandlesModel\";\r\n\r\nexport class HandlesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.handles;\r\n }\r\n\r\n generateHandles() {\r\n const reduxState = store.getState();\r\n const selectedPartIds = reduxState.sqftResourceState.selectedPartIds\r\n const shapes = workspace.getShapes();\r\n for (const shape of shapes) {\r\n if (selectedPartIds.includes(shape.partId)) {\r\n this.addHandleToTheShape(shape);\r\n }\r\n }\r\n }\r\n\r\n addHandleToTheShape(shape) {\r\n const reduxState = store.getState();\r\n const selectedFeature = reduxState.sqftResourceState.selectedFeature\r\n const lines = shape.getLines();\r\n for (const lineIndex in lines) {\r\n if (+lineIndex === 2) {\r\n if (lines.hasOwnProperty(lineIndex)) {\r\n lines[lineIndex].setHandleId(selectedFeature.part.dbFeature.id);\r\n const handle3dURL = this.findGLBModel(selectedFeature.part.dbFeature.thirdPartyAR3DUrls, 'V')\r\n lines[lineIndex].setHandle3dURL(handle3dURL);\r\n this.addResource(new LineHandlesModel(lines[lineIndex].id, selectedFeature.part.dbFeature.id));\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Function to find a .glb model in the array based on H or V suffix.\r\n * If the parameter is not passed or no matching model is found, it returns the first .glb model found.\r\n *\r\n * @param {Array} urls - Array of URLs.\r\n * @param {String} [suffix] - Optional. Suffix 'H' or 'V' to search for in the URL.\r\n * @returns {String} - The found .glb model URL or the first .glb model in the array.\r\n */\r\n findGLBModel(urls, suffix) {\r\n if (!urls) {\r\n return null\r\n }\r\n\r\n const glbModels = urls.filter(url => url.endsWith('.glb'));\r\n\r\n if (!glbModels.length) {\r\n return null;\r\n }\r\n\r\n // If suffix is provided (either 'H' or 'V'), search for a model with that suffix\r\n if (suffix) {\r\n const modelWithSuffix = glbModels.find(url => url.endsWith(`-${suffix}.glb`));\r\n if (modelWithSuffix) {\r\n return modelWithSuffix;\r\n }\r\n }\r\n\r\n return glbModels[0];\r\n }\r\n\r\n exportHandles() {\r\n return this.export()\r\n }\r\n}\r\n\r\n","import * as uuid from \"uuid\";\r\nimport {getQtCatName} from \"../../../../helpers/sqftQuotesHelper\";\r\n\r\nexport class LineHandlesModel {\r\n lineId;\r\n id;\r\n featureId;\r\n qtCatName;\r\n\r\n constructor(lineId, handleId, qtCatName = null, id = uuid.v4()) {\r\n this.id = id;\r\n this.lineId = lineId;\r\n this.featureId = handleId;\r\n this.qtCatName = qtCatName ? qtCatName : getQtCatName();\r\n }\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport workspace from \"../../core/workspace\";\r\n\r\n\r\nexport class WallsController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.walls;\r\n }\r\n\r\n getWallByPoint(searchPoint) {\r\n return workspace.walls.find(wall => {\r\n for (const wallPoint of wall.getPoints()) {\r\n if (wallPoint.id === searchPoint.id) {\r\n return wall\r\n }\r\n }\r\n })\r\n }\r\n\r\n}\r\n\r\n","import * as uuid from \"uuid\";\r\nimport {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport {ShapeColorModel} from \"../models/ShapeColor\";\r\nimport {getFeatureNameById} from \"../../../../helpers/featureHelper\";\r\n\r\nexport class ShapeColorsController extends SQFTResourceController {\r\n\r\n defaultColorSets = [\r\n {\r\n id: uuid.v4(),\r\n primary: 'rgba(74, 144, 226, 0.17)',\r\n primary_border: '#4a90e2',\r\n primary_hover: 'rgba(61,115,173,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(159, 197, 34, 0.17)',\r\n primary_border: '#9fc522',\r\n primary_hover: 'rgba(138,173,30,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 28, 123, 0.17)',\r\n primary_border: '#c91c7b',\r\n primary_hover: 'rgba(146,20,91, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 201, 0.17)',\r\n primary_border: '#1cc9c9',\r\n primary_hover: 'rgba(28, 201, 201, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(175, 201, 28, 0.17)',\r\n primary_border: '#afc91c',\r\n primary_hover: 'rgba(175, 201, 28, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 158, 28, 0.17)',\r\n primary_border: '#c99e1c',\r\n primary_hover: 'rgba(201, 158, 28,0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(201, 109, 28, 0.17)',\r\n primary_border: '#c96d1c',\r\n primary_hover: 'rgba(201, 109, 28, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 146, 0.17)',\r\n primary_border: '#1cc992',\r\n primary_hover: 'rgba(28, 201, 146, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(28, 201, 86, 0.17)',\r\n primary_border: '#1cc956',\r\n primary_hover: 'rgba(28, 201, 86, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(94, 201, 28, 0.17)',\r\n primary_border: '#5ec91c',\r\n primary_hover: 'rgba(94, 201, 28, 0.33)',\r\n },{\r\n id: uuid.v4(),\r\n primary: 'rgba(169, 28, 201, 0.17)',\r\n primary_border: '#a91cc9',\r\n primary_hover: 'rgba(169, 28, 201, 0.33)',\r\n }, {\r\n id: uuid.v4(),\r\n primary: 'rgba(94, 28, 201, 0.17)',\r\n primary_border: '#5e1cc9',\r\n primary_hover: 'rgba(94, 28, 201,0.33)',\r\n },\r\n ]\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.shapeColors;\r\n }\r\n\r\n getShapeColorByFeatureId(featureId) {\r\n return this.getResources().find(resource => resource.featureId === featureId);\r\n }\r\n\r\n getOrGenerateNewShapeColorByFeatureId(featureId) {\r\n let colorSet = this.getShapeColorByFeatureId(featureId);\r\n if (!colorSet) {\r\n return this.createShapeColor(featureId);\r\n }\r\n return colorSet;\r\n }\r\n\r\n generateRandomRGB() {\r\n return {\r\n r: Math.floor(Math.random() * 256),\r\n g: Math.floor(Math.random() * 256),\r\n b: Math.floor(Math.random() * 256)\r\n };\r\n }\r\n\r\n darkenColor({r, g, b}, factor = 0.9) {\r\n return {\r\n r: Math.floor(r * factor),\r\n g: Math.floor(g * factor),\r\n b: Math.floor(b * factor)\r\n };\r\n }\r\n\r\n createShapeColor(featureId) {\r\n let colorSet = this.defaultColorSets.find(set => !this.getResourceById(set.id));\r\n if (!colorSet) {\r\n const baseColor = this.generateRandomRGB();\r\n const hoverColor = baseColor//this.darkenColor(baseColor);\r\n\r\n colorSet = {\r\n id: uuid.v4(),\r\n primary: `rgba(${baseColor.r}, ${baseColor.g}, ${baseColor.b}, 0.17)`,\r\n primary_border: `rgb(${baseColor.r}, ${baseColor.g}, ${baseColor.b})`,\r\n primary_hover: `rgb(${hoverColor.r}, ${hoverColor.g}, ${hoverColor.b}, 0.33)`\r\n };\r\n } else {\r\n this.defaultColorSets = this.defaultColorSets.filter(set => set.id !== colorSet.id);\r\n }\r\n\r\n const featureName = getFeatureNameById(featureId);\r\n\r\n const shapeColorModel = new ShapeColorModel(\r\n colorSet.id,\r\n featureId,\r\n featureName,\r\n colorSet.primary,\r\n colorSet.primary_border,\r\n colorSet.primary_hover\r\n );\r\n\r\n this.addResource(shapeColorModel);\r\n\r\n return shapeColorModel\r\n }\r\n}\r\n","export class ShapeColorModel {\r\n id;\r\n featureId;\r\n primary;\r\n primary_border;\r\n primary_hover;\r\n\r\n constructor(id, featureId, featureName, primary, primary_border, primary_hover) {\r\n this.id = id;\r\n this.featureId = featureId;\r\n this.featureName = featureName;\r\n this.primary = primary;\r\n this.primary_border = primary_border;\r\n this.primary_hover = primary_hover;\r\n }\r\n}\r\n","import {SQFTResourceController} from \"../SQFTResourceController\";\r\nimport {\r\n RESOURCE_TYPE,\r\n WATERFALL_OVERLAY_TYPE,\r\n WATERFALL_SHAPES_KEY,\r\n WORKSPACE_RESOURCES\r\n} from \"../../../../../constants\";\r\nimport store from \"../../../../../../../store\";\r\nimport WaterfallOverlay from \"../../../core/shapes/overlays/waterfallOverlay\";\r\nimport {addResource, changeResource, deleteResource} from \"../../../../../../../actions/sqftResourceFunctions\";\r\nimport workspace from \"../../../core/workspace\";\r\nimport {WaterfallSegmentController} from \"./WaterfallSegmentController\";\r\n\r\nexport class WaterfallController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.waterfall;\r\n this.segmentController = new WaterfallSegmentController(this);\r\n }\r\n\r\n createWaterfallOverlay = (line, waterfallData = null) => {\r\n const reduxState = store.getState();\r\n const waterfallSectionsData = reduxState.sqftResourceState.waterfallSectionsData;\r\n const waterfallOverlay = new WaterfallOverlay(line, waterfallSectionsData.length + 1, waterfallData);\r\n\r\n this.addResource(waterfallOverlay);\r\n this.addWaterfallToStore(waterfallOverlay);\r\n\r\n return waterfallOverlay\r\n }\r\n\r\n createPeninsulaUnderwrapOverlay = (line, waterfallData = null) => {\r\n const reduxState = store.getState();\r\n const waterfallSectionsData = reduxState.sqftResourceState.waterfallSectionsData;\r\n\r\n const sectionIndex = waterfallSectionsData.length + 1;\r\n const waterfallOverlay = new WaterfallOverlay(line, sectionIndex, waterfallData, WATERFALL_OVERLAY_TYPE.peninsulaUnderwrap);\r\n\r\n this.addResource(waterfallOverlay);\r\n this.addWaterfallToStore(waterfallOverlay);\r\n\r\n return waterfallOverlay\r\n }\r\n\r\n getResources = () => {\r\n return workspace[this.resourceName]\r\n }\r\n\r\n getResourceByLineId = (id) => {\r\n return workspace[this.resourceName].find(waterFallOverlay => waterFallOverlay.line.id === id);\r\n }\r\n\r\n getSegmentById = (id) => {\r\n for (const overlay of this.getResources()) {\r\n for (const segment of overlay.getSegments()) {\r\n if (segment.id === id) {\r\n return segment\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateWaterfallLength = (line) => {\r\n if (line.isWithWaterfallToolEdge() || line.isWithPeninsulaUnderwrapEdge()) {\r\n const waterfallOverlay = this.getResourceByLineId(line.id);\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.waterfall) {\r\n waterfallOverlaySegment.length = line.getLineLength();\r\n }\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.underlayment) {\r\n const nextLine = line.getParent().getNextLine(line);\r\n waterfallOverlaySegment.length = nextLine.getLineLength();\r\n }\r\n }\r\n this.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n }\r\n }\r\n\r\n changeWaterfallSectionInStore = (waterfallSectionData) => {\r\n store.dispatch(changeResource(RESOURCE_TYPE.waterfallSectionsData, waterfallSectionData));\r\n }\r\n\r\n addWaterfallToStore = (waterfallOverlay) => {\r\n store.dispatch(addResource(RESOURCE_TYPE.waterfallSectionsData, waterfallOverlay.exportData()));\r\n }\r\n\r\n destroy = (waterfallOverlay) => {\r\n store.dispatch(deleteResource(RESOURCE_TYPE.waterfallSectionsData, waterfallOverlay.id));\r\n this.destroyResource(waterfallOverlay);\r\n }\r\n}\r\n","import uuid from \"uuid\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport WaterfallSegment from \"../shapeParts/models/waterfallSegment\";\r\nimport {WATERFALL_OVERLAY_TYPE, WATERFALL_SHAPES_KEY, WATERFALL_SHAPES_NAME} from \"../../../../../constants\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {isWesternHemisphere} from \"../../../helpers/lineHelper\";\r\n\r\nexport default class WaterfallOverlay {\r\n id;\r\n sectionIndex;\r\n line;\r\n type; // WATERFALL_OVERLAY_TYPE\r\n state = {\r\n };\r\n design = {\r\n };\r\n segments = []; // array of WaterfallSegments\r\n\r\n constructor(line, sectionIndex, importData, type = WATERFALL_OVERLAY_TYPE.waterfall) {\r\n this.line = line;\r\n this.sectionIndex = sectionIndex;\r\n this.id = uuid();\r\n this.type = type;\r\n if (importData) {\r\n this.importData(importData)\r\n } else {\r\n switch (type) {\r\n case WATERFALL_OVERLAY_TYPE.peninsulaUnderwrap:\r\n this.createPeninsulaUnderwrapSections();\r\n break;\r\n case WATERFALL_OVERLAY_TYPE.waterfall:\r\n default:\r\n this.createWaterfallSections();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n getSegments = () => { return this.segments; }\r\n getEnabledSegments = () => { return this.segments.filter(segment => !segment.isDisabled) }\r\n getParent = () => { return this.line; }\r\n setSegments = (value) => { this.segments = value; }\r\n addSegment = (segment) => { this.segments.push(segment); }\r\n\r\n destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(this);\r\n this.segments.forEach((segment) => {\r\n segment.destroy();\r\n });\r\n }\r\n };\r\n\r\n initEvents = () => {\r\n };\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n };\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n };\r\n\r\n export = () => {\r\n return this.exportData();\r\n }\r\n\r\n exportData = () => {\r\n return {\r\n id: this.id,\r\n lineId: this.line.id,\r\n state: this.state,\r\n type: this.type,\r\n segments: this.segments.map((segment) => {\r\n return segment.exportData()\r\n }),\r\n }\r\n };\r\n\r\n importData = (importData) => {\r\n this.state = importData.state;\r\n for (const segmentData of importData.segments) {\r\n this.addSegment(new WaterfallSegment(\r\n segmentData.key,\r\n segmentData.name,\r\n segmentData.length,\r\n segmentData.height,\r\n segmentData.thickness,\r\n this,\r\n segmentData.isDisabled\r\n ));\r\n }\r\n };\r\n\r\n createWaterfallSections = () => {\r\n const nextLine = this.line.getParent().getNextLine(this.line);\r\n const thickness = config.measureUnit === \"Imperial\" ? 1.5 : 40;\r\n const height = config.measureUnit === \"Imperial\" ? 36 : 900;\r\n const waterfallLength = config.measureUnit === \"Imperial\" ? this.line.getLineLength() : this.line.getLineLengthMm();\r\n const underlaymentLength = config.measureUnit === \"Imperial\" ? nextLine.getLineLength() : nextLine.getLineLengthMm();\r\n\r\n //place mirror shape in the slab mode\r\n const lineDirection = this.line.getLineDirectionV2();\r\n const isLineInWesternHemisphere = isWesternHemisphere(lineDirection) ;\r\n const defaultCabinetReturnLength = config.measureUnit === \"Imperial\" ? 4 : 60;\r\n const defaultOverhangReturnLength = config.measureUnit === \"Imperial\" ? 20 : 300;\r\n const cabinetReturnLength = isLineInWesternHemisphere ? defaultCabinetReturnLength : defaultOverhangReturnLength;\r\n const overhangReturnLength = isLineInWesternHemisphere ? defaultOverhangReturnLength : defaultCabinetReturnLength;\r\n\r\n const segments = [\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.waterfall, WATERFALL_SHAPES_NAME.waterfall, waterfallLength, height, thickness, this),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.cabinetReturn, WATERFALL_SHAPES_NAME.cabinetReturn, cabinetReturnLength, height, thickness, this, true),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.overhangReturn, WATERFALL_SHAPES_NAME.overhangReturn,overhangReturnLength, height, thickness, this, true),\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.underlayment, WATERFALL_SHAPES_NAME.underlayment, underlaymentLength, height, thickness, this, true),\r\n ];\r\n this.setSegments(segments);\r\n }\r\n\r\n createPeninsulaUnderwrapSections = () => {\r\n const segments = [\r\n new WaterfallSegment(WATERFALL_SHAPES_KEY.peninsulaUnderwrap, WATERFALL_SHAPES_NAME.peninsulaUnderwrap, this.line.getLineLength(), 36, 1.5, this, false),\r\n ];\r\n this.setSegments(segments);\r\n }\r\n\r\n getArea = () => {\r\n return this.segments.reduce((sum, segment) => sum + segment.getArea(), 0)\r\n }\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport {WATERFALL_SHAPES_KEY} from \"../../../../../../constants\";\r\n\r\nexport default class WaterfallSegment {\r\n id;\r\n key; /* string */\r\n name; /* string */\r\n length; /* int */\r\n height; /* int */\r\n thickness; /* int */\r\n parentSection; /* object */\r\n isDisabled; /* bool */\r\n COMMON_HEIGHT = [\r\n // WATERFALL_SHAPES_KEY.waterfall,\r\n // WATERFALL_SHAPES_KEY.cabinetReturn,\r\n // WATERFALL_SHAPES_KEY.overhangReturn,\r\n ];\r\n USE_DEPTH_INSTEAD_OF_HEIGHT = [\r\n WATERFALL_SHAPES_KEY.underlayment,\r\n WATERFALL_SHAPES_KEY.peninsulaUnderwrap\r\n ];\r\n USE_LINE_LENGTH = [\r\n WATERFALL_SHAPES_KEY.underlayment,\r\n WATERFALL_SHAPES_KEY.waterfall\r\n ];\r\n\r\n constructor(key, name, length, height, thickness, parentSection, isDisabled = false) {\r\n this.id = uuidv4();\r\n this.key = key;\r\n this.name = name;\r\n this.length = length;\r\n this.height = height;\r\n this.thickness = thickness;\r\n this.parentSection = parentSection;\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n exportData = () => ({\r\n id: this.id,\r\n overlayId: this.getParent().id,\r\n key: this.key,\r\n name: this.name,\r\n height: this.height,\r\n thickness: this.thickness,\r\n length: this.length,\r\n isDisabled: this.isDisabled,\r\n })\r\n\r\n setIsDisabled = (value) => {\r\n this.isDisabled = value\r\n }\r\n\r\n getParent = () => {\r\n return this.parentSection\r\n }\r\n\r\n getArea = () => {\r\n if (this.isDisabled) {\r\n return 0\r\n }\r\n\r\n let area = 0;\r\n\r\n // this will add mitered edge area\r\n if (this.key === WATERFALL_SHAPES_KEY.overhangReturn) {\r\n area += this.height * this.thickness\r\n } else if (this.key === WATERFALL_SHAPES_KEY.waterfall) {\r\n area += (this.height * this.thickness) * 2 //we have two mitered edges from sides\r\n } else if (this.key === WATERFALL_SHAPES_KEY.cabinetReturn) {\r\n area += this.height * this.thickness\r\n }\r\n\r\n // shape area\r\n area += this.height * this.length\r\n\r\n return area\r\n }\r\n\r\n destroy = () => {\r\n\r\n }\r\n}\r\n","import {WATERFALL_SHAPES_KEY} from \"../../../../../constants\";\r\nimport SqftStore from \"../../sqftStore\";\r\nimport SlabWorkspace from \"../../../core/slab/slabWorkspace\";\r\nimport {createSlabModeWaterfallShapes} from \"../../canvasHelper\";\r\n\r\nexport class WaterfallSegmentController {\r\n\r\n constructor(parentController) {\r\n this.parentController = parentController;\r\n }\r\n\r\n updateWaterfallLength = (line) => {\r\n if (!line.isWithWaterfallToolEdge() || !line.isWithPeninsulaUnderwrapEdge()) {\r\n return\r\n }\r\n const waterfallOverlay = this.parentController.getResourceByLineId(line.id);\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.waterfall\r\n || waterfallOverlaySegment.name === WATERFALL_SHAPES_KEY.underlayment\r\n ) {\r\n waterfallOverlaySegment.length = line.getLineLength();\r\n }\r\n }\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n }\r\n\r\n changeSegmentLength = (segmentId, newValue) => {\r\n const segment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = segment.getParent();\r\n segment.length = +newValue\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentHeight = (segmentId, newValue) => {\r\n const updatedSegment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = updatedSegment.getParent();\r\n\r\n if (updatedSegment.COMMON_HEIGHT.includes(updatedSegment.name)) {\r\n for (const waterfallOverlaySegment of waterfallOverlay.getSegments()) {\r\n if (waterfallOverlaySegment.COMMON_HEIGHT.includes(waterfallOverlaySegment.name)) {\r\n waterfallOverlaySegment.height = +newValue;\r\n }\r\n }\r\n } else {\r\n updatedSegment.height = +newValue;\r\n }\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentThickness = (segmentId, newValue) => {\r\n const segment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = segment.getParent();\r\n segment.thickness = +newValue\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n changeSegmentIsDisabled = (segmentId, newValue) => {\r\n const waterfallSegment = this.parentController.getSegmentById(segmentId);\r\n const waterfallOverlay = waterfallSegment.getParent();\r\n waterfallSegment.setIsDisabled(newValue);\r\n\r\n this.parentController.changeWaterfallSectionInStore(waterfallOverlay.exportData());\r\n this.postChangeValue(waterfallOverlay.id);\r\n }\r\n\r\n postChangeValue = (overlayId) => {\r\n // remove all slab shapes\r\n const overlay = this.parentController.getResourceById(overlayId);\r\n SlabWorkspace.slabAdditionalShapes.removeActiveBacksplashByLine(overlay.line);\r\n\r\n //reCreate Slab Shapes\r\n createSlabModeWaterfallShapes();\r\n\r\n // update calculations\r\n SqftStore.updateCalculations();\r\n }\r\n\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class RemovedFeaturesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.walls;\r\n }\r\n\r\n}\r\n\r\n","import sqftShapeManager from \"../sqftShapeManager\";\r\nimport workspace from \"../../core/workspace\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\nimport {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport ShapeHelper from \"../../../../helpers/shapeHelper\";\r\nimport workspaceControllers from \"../workspaceControllers\";\r\nimport store from \"../../../../../../store\";\r\nimport sqftShape from \"../../core/shapes/sqftShape\";\r\nimport MovableImage from \"../../core/shapes/movableImage\";\r\n//import sqftShapeIntersectionsManager from \"../sqftShapeIntersectionsManager\";\r\n\r\nexport class SnappedShapeGroupsController extends SQFTResourceController {\r\n //snappedShapeGroups = [];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.snappedShapeGroups;\r\n }\r\n\r\n addNewSnappedShapeGroupNumber = () => {\r\n const snappedShapeGroups = this.getResources();\r\n const newNumber = snappedShapeGroups.length > 0\r\n ? snappedShapeGroups[snappedShapeGroups.length - 1] + 1\r\n : 0;\r\n this.addResource(newNumber);\r\n\r\n return newNumber\r\n }\r\n\r\n setSameSnappedShapesGroup = (snappedShape, snappedWithShape) => {\r\n const snappedShapeGroup = snappedShape.shapeAbsolute.getSnappedShapeGroup();\r\n const snappedWithShapeGroup = snappedWithShape.shapeAbsolute.getSnappedShapeGroup();\r\n if (snappedWithShapeGroup !== null) {\r\n snappedShape.shapeAbsolute.setSnappedShapeGroup(snappedWithShapeGroup);\r\n } else if (snappedShapeGroup !== null) {\r\n snappedWithShape.shapeAbsolute.setSnappedShapeGroup(snappedShapeGroup);\r\n } else {\r\n const groupNumber = this.addNewSnappedShapeGroupNumber();\r\n snappedShape.shapeAbsolute.setSnappedShapeGroup(groupNumber);\r\n snappedWithShape.shapeAbsolute.setSnappedShapeGroup(groupNumber);\r\n }\r\n }\r\n\r\n // isShapeGroupConsistsOfOnlyCabinetShapes = (snappedShapeGroup) => {\r\n // const shapes = this.getSnappedShapes(snappedShapeGroup);\r\n // return !shapes.some(shape => shape.shapeCabinet === null);\r\n // }\r\n\r\n getMeasurementPoints = (snappedShapeGroup) => {\r\n const shapes = this.getSnappedShapes(snappedShapeGroup);\r\n if (shapes.length > 0) {\r\n let shapesPoints = [];\r\n shapes.forEach(shp => {\r\n shapesPoints.push(...shp.getPointsPointField());\r\n });\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n //console.log(\"shapesMinMax\", pointsMinMax);\r\n\r\n return [\r\n {x: pointsMinMax.minX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.minY},\r\n {x: pointsMinMax.maxX, y: pointsMinMax.maxY},\r\n {x: pointsMinMax.minX, y: pointsMinMax.maxY}\r\n ];\r\n }\r\n return []\r\n }\r\n\r\n getSnappedShapes = (snappedShapeGroup) => {\r\n const shapes = workspace.getShapes(true);\r\n return shapes.filter(shp => {\r\n return !!(shp.shapeAbsolute && (shp.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n || !!(shp.shapeSlab && shp.shapeSlab.shapeAbsolute && (shp.shapeSlab.shapeAbsolute.getSnappedShapeGroup() === snappedShapeGroup))\r\n })\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n updateShapesSnappedGroups = (shouldUpdateAbsolutePos = false) => {\r\n // Sort shapes by their position\r\n const shapes = workspace.getShapes(true)\r\n .filter(shp => shp instanceof MovableImage || shp instanceof sqftShape)\r\n .sort((a, b) => {\r\n let aPos = a.getPosition();\r\n let bPos = b.getPosition();\r\n return aPos.x - bPos.x || aPos.y - bPos.y;\r\n });\r\n //const shapesPosition = shapes.map(shp => {return {id: shp.id, ...shp.getPosition()}});\r\n //sqftShapeIntersectionsManager.logSnappedShapeGroups();\r\n //console.log(\"shapesPosition\", shapesPosition);\r\n const visitedShapes = new Set(); // To keep track of already processed shapes\r\n\r\n this.resetShapesSnappedGroups();\r\n\r\n for (const shape of shapes) {\r\n if ((shape instanceof sqftShape || shape instanceof MovableImage) && !visitedShapes.has(shape)) {\r\n this.updateGroupForShapeAndConnected(shape, visitedShapes, shouldUpdateAbsolutePos);\r\n }\r\n }\r\n\r\n //sqftShapeIntersectionsManager.logSnappedShapeGroups();\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n resetShapesSnappedGroups = () => {\r\n const isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n const shapes = workspace.getShapes(true);\r\n\r\n for (const shape of shapes) {\r\n if (shape instanceof sqftShape) {\r\n const shapeAbsolute = isShowSlabTool ? shape.shapeSlab.shapeAbsolute : shape.shapeAbsolute;\r\n this.resetShapeSnappedGroup(shapeAbsolute);\r\n } else if (shape instanceof MovableImage) {\r\n this.resetShapeSnappedGroup(shape.shapeAbsolute);\r\n }\r\n }\r\n }\r\n\r\n // Updates the groups of snapped shapes in the workspace\r\n resetShapeSnappedGroup = (shapeAbsolute) => {\r\n shapeAbsolute.setSnappedWithShape(null);\r\n shapeAbsolute.setSnappedShapeGroup(null);\r\n }\r\n\r\n // Recursive function to update groups for a shape and all connected shapes\r\n updateGroupForShapeAndConnected = (shape, visitedShapes, shouldUpdateAbsolutePos) => {\r\n visitedShapes.add(shape);\r\n const connectedShapes = this.updateShapeSnappedGroup(shape, shouldUpdateAbsolutePos); // Update group for the current shape\r\n\r\n //console.log(\"shape id\", shape.id);\r\n //console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", shape.shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // if (connectedShapes[0]) {\r\n // console.log(\"connectedShapes 0 id\", connectedShapes[0].id);\r\n // console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", connectedShapes[0].shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // }\r\n // if (connectedShapes[1]) {\r\n // console.log(\"connectedShapes 1 id\", connectedShapes[1].id);\r\n // console.log(\"shape shapeSlab.shapeAbsolute.getSnappedShapeGroup()\", connectedShapes[1].shapeSlab.shapeAbsolute.getSnappedShapeGroup());\r\n // }\r\n //debugger // eslint-disable-line no-debugger\r\n\r\n // Retrieve connected shapes (this logic might vary based on your application)\r\n //const connectedShapes = ShapeHelper.getConnectedShapes(shape);\r\n\r\n for (const connectedShape of connectedShapes) {\r\n if (!visitedShapes.has(connectedShape)) {\r\n this.updateGroupForShapeAndConnected(connectedShape, visitedShapes);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update absolute shape position in regular or in slab mode. Also updates snapped shape group.\r\n * @param shape\r\n * @param shouldUpdateAbsolutePos\r\n * @return {*[]}\r\n */\r\n updateShapeSnappedGroup = (shape, shouldUpdateAbsolutePos) => {\r\n let isShowSlabTool = store.getState().sqftSlabState.isShowSlabTool;\r\n let snapPossibilitiesToShapes = [];\r\n let snapPossibilitiesToImages = [];\r\n let snapPossibilitiesToWalls = [];\r\n let shapeAbsolute;\r\n let pos;\r\n\r\n if (shape instanceof sqftShape) {\r\n shapeAbsolute = isShowSlabTool ? shape.shapeSlab.shapeAbsolute : shape.shapeAbsolute;\r\n pos = isShowSlabTool ? shape.slabPos : shape.pos;\r\n } else if (shape instanceof MovableImage) {\r\n shapeAbsolute = shape.shapeAbsolute;\r\n pos = shape.pos;\r\n }\r\n\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(null); //reset minLength for correct calculations without stacking\r\n }\r\n // shapeAbsolute.setSnappedWithShape(null);\r\n // shapeAbsolute.setSnappedShapeGroup(null);\r\n\r\n let distancesToWalls = ShapeHelper.getDistancesToWalls(shape);\r\n let distancesToShapes = ShapeHelper.getDistancesToShapes(shape);\r\n let distancesToImages = ShapeHelper.getDistancesToImages(shape);\r\n //console.log(\"distancesToWalls\", distancesToWalls);\r\n //console.log(\"distancesToShapes\", distancesToShapes);\r\n //console.log(\"distancesToImages\", distancesToImages);\r\n\r\n const itemBoundsWithSamePartId = ShapeHelper.getItemBoundsForTheSamePartIdIfExist(distancesToShapes, shape.partId);\r\n snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(itemBoundsWithSamePartId);\r\n if (snapPossibilitiesToShapes.length === 0) {\r\n snapPossibilitiesToShapes = ShapeHelper.getSnappingPossibilities(distancesToShapes);\r\n }\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n snapPossibilitiesToImages = ShapeHelper.getSnappingPossibilities(distancesToImages);\r\n snapPossibilitiesToWalls = ShapeHelper.getSnappingPossibilities(distancesToWalls);\r\n //console.log(\"snapPossibilitiesToShapes\", snapPossibilitiesToShapes);\r\n\r\n //walls\r\n let [absolutePosToWalls, snappedWithWalls] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToWalls, pos);\r\n if (absolutePosToWalls) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToWalls);\r\n }\r\n void snappedWithWalls;\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n\r\n //shapes\r\n let [absolutePosToShapes, snappedWithShape] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToShapes, pos);\r\n if (absolutePosToShapes) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToShapes);\r\n }\r\n if (isShowSlabTool) {\r\n if (snappedWithShape.shapeSlab && snappedWithShape.shapeSlab.shapeAbsolute) {\r\n snappedWithShape.shapeSlab.shapeAbsolute.setSnappedWithShape(shape.shapeSlab);\r\n }\r\n if (shape.shapeSlab && shape.shapeSlab.shapeAbsolute) {\r\n shape.shapeSlab.shapeAbsolute.setSnappedWithShape(snappedWithShape);\r\n }\r\n } else {\r\n snappedWithShape.shapeAbsolute.setSnappedWithShape(shape);\r\n shape.shapeAbsolute.setSnappedWithShape(snappedWithShape);\r\n }\r\n\r\n // set same snapped shape group for all shapes\r\n const snappedShape = isShowSlabTool && shape.shapeSlab ? shape.shapeSlab : shape;\r\n const snappedShapeIds = Object.keys(distancesToShapes);\r\n for (const shapeId of snappedShapeIds) {\r\n const snappedShapeFromAllPossibilities = workspace.getShapeById(parseInt(shapeId));\r\n const shapeSlab = snappedShapeFromAllPossibilities.shapeSlab\r\n snappedWithShape = isShowSlabTool && shapeSlab ? shapeSlab : snappedShapeFromAllPossibilities;\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(snappedShape, snappedWithShape);\r\n }\r\n }\r\n\r\n //images\r\n let [absolutePosToImages, snappedWithImage] = ShapeHelper.getAbsolutePosFromSnapPossibilities(snapPossibilitiesToImages, pos);\r\n if (absolutePosToImages) {\r\n if (shouldUpdateAbsolutePos) {\r\n shapeAbsolute.setAbsolutePos(absolutePosToImages);\r\n }\r\n void snappedWithImage;\r\n //snappedWithImage.shapeAbsolute.setSnappedWithImage(this);\r\n }\r\n\r\n //allSnappedPossibilities\r\n return [\r\n ...snapPossibilitiesToShapes.map(snapPossibility => snapPossibility.shape),\r\n ...snapPossibilitiesToImages.map(snapPossibility => snapPossibility.shape)\r\n ];\r\n }\r\n}\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class SelectedShapesController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.selectedShapes;\r\n }\r\n\r\n addShapeToSelection = (shape) => {\r\n this.addResource(shape);\r\n };\r\n\r\n removeShapeFromSelection = (shape) => {\r\n this.removeResource(shape);\r\n };\r\n\r\n clearSelection = () => {\r\n this.removeAllResources();\r\n };\r\n\r\n isShapeSelected = (shape) => {\r\n return this.getResources().includes(shape);\r\n };\r\n\r\n render = (ctx) => {\r\n void ctx\r\n // for (const ctx1 of ctx) {\r\n //\r\n // }\r\n\r\n }\r\n}\r\n\r\n","import {SQFTResourceController} from \"./SQFTResourceController\";\r\nimport {WORKSPACE_RESOURCES} from \"../../../../constants\";\r\n\r\nexport class Images3dController extends SQFTResourceController {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.resourceName = WORKSPACE_RESOURCES.images3d;\r\n }\r\n}\r\n\r\n","import {getDistanceFromPointToLine} from \"./sqftHelper\";\r\nimport {getAngleBetween3Points} from \"./shapeHelper\";\r\n\r\nexport default class FitSize {\r\n\r\n shape;\r\n line;\r\n nextLine;\r\n prevLine;\r\n outlineDistance = 0;\r\n\r\n constructor(line) {\r\n this.line = line;\r\n this.shape = line.getParent();\r\n this.nextLine = this.shape.getNextLine(line);\r\n this.prevLine = this.shape.getPrevLine(line);\r\n }\r\n\r\n isFitSize = (additionalLength) => {\r\n return [\r\n this.isFitLineLength(additionalLength),\r\n this.isFitSiblingLineCorner(additionalLength),\r\n this.isFitBumpout(additionalLength),\r\n this.isFitPontDistancesToCornerLine(additionalLength),\r\n this.isFitByAngleBetweenLines(additionalLength)\r\n ]\r\n .every(isFit => isFit)\r\n };\r\n\r\n isFitPontDistancesToCornerLine = (additionalLength) => {\r\n const prevPointToCurrentLineLength = getDistanceFromPointToLine(\r\n this.prevLine.from.x,\r\n this.prevLine.from.y,\r\n this.line.from.x,\r\n this.line.from.y,\r\n this.line.to.x,\r\n this.line.to.y,\r\n )\r\n const nextPointToCurrentLineLength = getDistanceFromPointToLine(\r\n this.line.to.x,\r\n this.line.to.y,\r\n this.prevLine.from.x,\r\n this.prevLine.from.y,\r\n this.prevLine.to.x,\r\n this.prevLine.to.y,\r\n )\r\n\r\n return [prevPointToCurrentLineLength, nextPointToCurrentLineLength].every((lineLength) => {\r\n return additionalLength + this.outlineDistance <= lineLength\r\n })\r\n }\r\n\r\n isFitLineLength = (additionalLength) => {\r\n return [this.line.getLineLength(), this.prevLine.getLineLength()].every((lineLength) => {\r\n return additionalLength <= lineLength\r\n })\r\n };\r\n\r\n isFitSiblingLineCorner = (additionalLength) => {\r\n let siblingCornerLength = 0;\r\n let cornerTotalLength = 0;\r\n\r\n if (this.nextLine.from.arcLength > 0 || this.nextLine.from.angle > 0) {\r\n siblingCornerLength = this.nextLine.from.getArcLength() || this.nextLine.from.getAngle();\r\n cornerTotalLength = +siblingCornerLength + +additionalLength;\r\n if(cornerTotalLength >= this.line.getLineLength()) {\r\n return false\r\n }\r\n }\r\n if (this.prevLine.from.arcLength > 0 || this.prevLine.from.angle > 0) {\r\n siblingCornerLength = this.prevLine.from.getArcLength() || this.prevLine.from.getAngle();\r\n cornerTotalLength = +siblingCornerLength + +additionalLength;\r\n if(cornerTotalLength >= this.prevLine.getLineLength() ) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n };\r\n\r\n isFitBumpout = (additionalLength) => {\r\n if(this.line.isWithBumpout()){\r\n let bumpoutTextParameters = this.line.bumpoutOverlay.getBumpoutTextParameter();\r\n\r\n if(additionalLength >= bumpoutTextParameters.length4to.pointsDistance) {\r\n return false\r\n }\r\n } else if(this.prevLine.isWithBumpout()){\r\n let bumpoutTextParameters = this.prevLine.bumpoutOverlay.getBumpoutTextParameter();\r\n\r\n if(additionalLength >= bumpoutTextParameters.length4to.pointsDistance) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n };\r\n\r\n isFitByAngleBetweenLines = (radius) => {\r\n const angle = getAngleBetween3Points(\r\n this.prevLine.from, this.line.from, this.line.to\r\n );\r\n\r\n // d = r/tan(α/2)\r\n const minDistanceNeeded = radius / Math.tan((angle / 2) * (Math.PI / 180));\r\n\r\n const prevLineLength = this.prevLine.getLineLength();\r\n const lineLength = this.line.getLineLength();\r\n\r\n return prevLineLength >= minDistanceNeeded && lineLength >= minDistanceNeeded;\r\n };\r\n}\r\n","import cloneDeep from \"lodash/cloneDeep\";\r\nimport uuid from \"uuid\";\r\n\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport resizeLine, {getMaxResizeWidth} from \"./resizeLine\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {\r\n getPointDistance,\r\n orientation,\r\n measureDistanceToInches,\r\n distanceToMillimeters,\r\n distanceToInches,\r\n getFontsize,\r\n get45CornerLegDistanceByHypotenuse,\r\n getAngleBetweenTwoPoints,\r\n getParallelPoints,\r\n getPointField,\r\n rotatePoint,\r\n mmToInches,\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport Config from \"../../../../../../../config\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport {updateMiteredLength, updateShapeWaterfallLength, updateUnderlaymentLength} from \"../../../helpers/lineHelper\";\r\nimport workspace from \"../../workspace\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\nimport {MEASURE_UNITS} from \"../../../../../constants\";\r\n\r\nexport default function() {\r\n var self = this,\r\n state = {\r\n isHovered: false,\r\n isEditInputDisplayed: false,\r\n hoveredColor: \"#FF9844\",\r\n textWidth: 0,\r\n withBumpout: false,\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n xOffset: 0,\r\n yOffset: 0\r\n },\r\n originalLineText: '',\r\n lineTextResized: '',\r\n lineText: '',\r\n },\r\n line = null,\r\n lineType = 'edge', // by default\r\n lineTextColor = COLOR_THEMES[config.activeTheme].primary;\r\n this.id = uuid();\r\n this.isInited = false;\r\n this.design = {\r\n offsetFromLineEnd: 15\r\n }\r\n\r\n function setLine(value) { line = value; }\r\n this.getLine = () => { return line; }\r\n function getMidPoint(from, to) {\r\n return {\r\n x: from.x + (to.x - from.x)/2,\r\n y: from.y + (to.y - from.y)/2\r\n };\r\n }\r\n\r\n const isMouseOverText = (mousePos) => {\r\n const lineDirection = line.getLineDirection();\r\n const pointsArray = this.getHoveredArea();\r\n\r\n return {isHovered: pnpolyArray(pointsArray, mousePos), orientation: lineDirection.orientation};\r\n }\r\n\r\n this.getHoveredArea = () => {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n //console.log(\"lineDirection.orientation\", lineDirection.orientation);\r\n switch (lineDirection.orientation) {\r\n case \"vertical\":\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [state.midPoint.x + 40, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x + 15, state.midPoint.y + state.textWidth / 2 - 5],\r\n [state.midPoint.x + 40, state.midPoint.y + state.textWidth / 2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [state.midPoint.x - 40, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y - state.textWidth / 2 - 10],\r\n [state.midPoint.x - 15, state.midPoint.y + state.textWidth / 2 - 5],\r\n [state.midPoint.x - 40, state.midPoint.y + state.textWidth / 2 - 5],\r\n ];\r\n }\r\n break;\r\n case \"horizontal\": {\r\n pointsArray = [\r\n [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y - 15],\r\n [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y - 15],\r\n [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y + 10],\r\n [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y + 10],\r\n ]\r\n break;\r\n }\r\n case \"northeast\":\r\n case \"northwest\":\r\n case \"southeast\":\r\n case \"southwest\":\r\n default: {\r\n let angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n let pointToRotate1 = {x: state.midPoint.x - state.textWidth / 2 - 10, y: state.midPoint.y - 15};\r\n let rotatedPoint1 = rotatePoint(pointToRotate1, state.midPoint, angle);\r\n let pointToRotate2 = {x: state.midPoint.x + state.textWidth / 2 + 10, y: state.midPoint.y - 15};\r\n let rotatedPoint2 = rotatePoint(pointToRotate2, state.midPoint, angle);\r\n let pointToRotate3 = {x: state.midPoint.x + state.textWidth / 2 + 10, y: state.midPoint.y + 10};\r\n let rotatedPoint3 = rotatePoint(pointToRotate3, state.midPoint, angle);\r\n let pointToRotate4 = {x: state.midPoint.x - state.textWidth / 2 - 10, y: state.midPoint.y + 10};\r\n let rotatedPoint4 = rotatePoint(pointToRotate4, state.midPoint, angle);\r\n pointsArray = [\r\n [rotatedPoint1.x, rotatedPoint1.y],\r\n [rotatedPoint2.x, rotatedPoint2.y],\r\n [rotatedPoint3.x, rotatedPoint3.y],\r\n [rotatedPoint4.x, rotatedPoint4.y],\r\n // [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y - 15],\r\n // [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y - 15],\r\n // [state.midPoint.x + state.textWidth / 2 + 10, state.midPoint.y + 10],\r\n // [state.midPoint.x - state.textWidth / 2 - 10, state.midPoint.y + 10],\r\n ]\r\n break\r\n }\r\n }\r\n return pointsArray\r\n }\r\n\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n const {isHovered, orientation} = isMouseOverText(mousePos);\r\n state.isHovered = isHovered;\r\n if (state.isHovered) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor((orientation === \"horizontal\") ? \"text\" : \"text-vertical\", self);\r\n } else {\r\n EventManager.resetCursor(self);\r\n }\r\n }\r\n\r\n const onMouseDown = () => {\r\n if (state.isHovered && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n state.isEditInputDisplayed = true;\r\n\r\n const maxLength = Math.round(getMaxResizeWidth(line) * config.getMeasureMultiplier());\r\n let initialValue;\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Imperial) {\r\n initialValue = Math.round10(self.getLineDistanceFull() * config.getMeasureMultiplier(), -6);\r\n initialValue = distanceToInches(initialValue).replace(\"\\\"\", \"\");\r\n } else if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n initialValue = Math.round10(self.getLineDistanceFull() * config.getMeasureMultiplier());\r\n }\r\n //console.log(\"initialValue\", initialValue);\r\n //const pointDistance = Math.sqrt(Math.pow(line.to.x - line.from.x, 2) + Math.pow(line.to.y - line.from.y, 2));\r\n //console.log(\"pointDistance\", pointDistance);\r\n\r\n\r\n const pos = { x: state.midPoint.x, y: state.midPoint.y };\r\n\r\n const inputWrapper = createAdjustableInput({\r\n position: pos,\r\n initialValue: initialValue.toString(),\r\n min: 1,\r\n max: maxLength,\r\n orientation: \"horizontal\",\r\n onChange: (value) => {\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n value = mmToInches(value);\r\n }\r\n setNewLineWidth(value - self.getAdditionalLineDistance())\r\n }, // Update line width on change\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n state.isEditInputDisplayed = false;\r\n },\r\n step: 1,\r\n });\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n }\r\n };\r\n\r\n function setNewLineWidth(lineWidth) {\r\n const distance = getPointDistance(line.from, line.to);\r\n const diff = lineWidth - distance;\r\n const roundedDiff = Math.round10(diff, -4)\r\n //console.log(\"setNewLineWidth roundedDiff\", roundedDiff);\r\n const reduxState = store.getState();\r\n const isWallsLockMode = reduxState.sqftMenuState.isWallsLockMode;\r\n resizeLine(line, roundedDiff, isWallsLockMode);\r\n updateShapeWaterfallLength(line);\r\n updateMiteredLength(line);\r\n updateUnderlaymentLength(line);\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n function getCtxColor(ctx, lineType) {\r\n return (lineType === \"wall\")\r\n ? state.isHovered ? state.hoveredColor : ctx.fillStyle\r\n : state.isHovered ? state.hoveredColor : COLOR_THEMES[config.activeTheme].primary;\r\n }\r\n this.destroy = (protect) => {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n this.isInited = false\r\n }\r\n };\r\n this.import = (data) => {\r\n state = data.state;\r\n this.id = data.id\r\n };\r\n this.export = () => {\r\n return { id: this.id, state: cloneDeep(state) }\r\n };\r\n this.init = function(line) {\r\n setLine(line);\r\n this.initEvents();\r\n };\r\n this.initEvents = () => {\r\n this.isInited = true;\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render,\r\n this,\r\n EventManager.priorities.OVERLAY\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isInited = false;\r\n };\r\n this.reInitEvents = () => {\r\n if (!this.isInited) {\r\n this.initEvents();\r\n }\r\n };\r\n this.removeLineText = function () {\r\n state.originalLineText = '';\r\n lineType = 'edge'; // by default\r\n lineTextColor = COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.renderEdgeText = (edgeName) => {\r\n state.originalLineText = edgeName;\r\n lineType = 'edge';\r\n lineTextColor = COLOR_THEMES[config.activeTheme].active;\r\n };\r\n this.renderBacksplashText = (backsplashName, type) => {\r\n //lineText = backsplashName;\r\n state.originalLineText = line.getBacksplashHeight() + sqftConfig.getMeasureUnitPostfix() +\" \" + workspace.intl.formatMessage({id: \"sqft.navigation.submenu.backsplash\"});\r\n lineType = type;\r\n lineTextColor = (type === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.renderWaterfallText = (name, type) => {\r\n state.originalLineText = name;\r\n lineType = type;\r\n lineTextColor = (type === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n };\r\n this.getMidpoint = function () {\r\n return state.midPoint;\r\n };\r\n this.setMidpointOffset = function (xOffset, yOffset) {\r\n state.midPoint.xOffset = xOffset;\r\n state.midPoint.yOffset = yOffset;\r\n };\r\n this.getLineLength = function () {\r\n var distance = getPointDistance(line.from, line.to);\r\n\r\n return measureDistanceToInches(distance);\r\n };\r\n this.getLineLengthText = function () {\r\n let distance = this.getLineDistanceFull();\r\n\r\n return config.measureUnit === \"Metric\" ? distanceToMillimeters(distance) : distanceToInches(distance);\r\n };\r\n this.getLineDistanceFull = function () {\r\n return getPointDistance(line.from, line.to) + this.getAdditionalLineDistance();\r\n };\r\n this.getLineDistanceFullInPixels = function () {\r\n const lineLengthInPx = getPointDistance(line.calculateRenderPosition(line.from), line.calculateRenderPosition(line.to));\r\n const scale = config.scale;\r\n let additionalLineDistance = this.getAdditionalLineDistance() * scale;\r\n if (additionalLineDistance < 0) {\r\n additionalLineDistance -= this.design.offsetFromLineEnd; // add gray line margin\r\n } else if (additionalLineDistance > 0) {\r\n additionalLineDistance += this.design.offsetFromLineEnd; // add gray line margin\r\n }\r\n\r\n return lineLengthInPx + additionalLineDistance;\r\n };\r\n this.getAdditionalLineDistance = function () {\r\n let additionalDistance = 0;\r\n const prevLine = line.getParent().getPrevLine(line);\r\n if (line.to.angle > 0 || line.to.arcLength > 0) {\r\n additionalDistance -= get45CornerLegDistanceByHypotenuse(line.to.angle || line.to.arcLength);\r\n }\r\n\r\n if (prevLine.to.angle > 0 || prevLine.to.arcLength > 0 ) {\r\n additionalDistance -= get45CornerLegDistanceByHypotenuse(prevLine.to.angle || prevLine.to.arcLength);\r\n }\r\n\r\n return +additionalDistance;\r\n };\r\n\r\n this.render = function(ctx) {\r\n if (state.isEditInputDisplayed) {\r\n return;\r\n }\r\n\r\n let scale = config.scale,\r\n fontSize = getFontsize(),\r\n font = (fontSize).toString() + \"px \" + config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n offset = line.getOffset(),\r\n distance = this.getLineDistanceFullInPixels(),\r\n dstring = this.getLineLengthText(),\r\n midPoint = getMidPoint(line.from, line.to),\r\n orientationValue = line.getOrientation(),\r\n space,\r\n mtext,\r\n medgeText,\r\n xOffset = 0,\r\n yOffset = 0,\r\n lineCornerWidth = 0,\r\n fromPosOnField = getPointField(line.from.x, line.from.y, line),\r\n prevLine;\r\n\r\n state.lineTextResized = _.clone(state.originalLineText);\r\n const parent = line.getParent();\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n\r\n mtext = ctx.measureText(dstring);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n space = ctx.measureText(' ');\r\n state.textWidth = Math.round(mtext.width * 100) / 100;\r\n\r\n let marginTotal = 0;\r\n\r\n for (let i in lineDirection.cornerMargins) {\r\n marginTotal += lineDirection.cornerMargins[i];\r\n }\r\n\r\n if (medgeText.width + ctx.measureText(dstring).width > distance) {\r\n fontSize = 14;\r\n ctx.font = \"14px \" + config.activeFontBold;\r\n mtext = ctx.measureText(dstring);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n space = ctx.measureText(' ');\r\n\r\n // Adjust text size based on distance\r\n if (distance < 20 * config.scale + marginTotal * 40) {\r\n state.lineTextResized = '';\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n } else {\r\n if (state.originalLineText && (medgeText.width + ctx.measureText(dstring).width > distance - marginTotal * 40)) {\r\n while (medgeText.width && (medgeText.width + ctx.measureText(dstring).width > distance - marginTotal * 40)) {\r\n state.lineTextResized = state.lineTextResized.slice(0, -1);\r\n medgeText = ctx.measureText(state.lineTextResized);\r\n }\r\n }\r\n }\r\n }\r\n\r\n lineCornerWidth += line.get45CornerLegDistance() / 2 * scale;\r\n prevLine = parent.getPrevLine(line);\r\n lineCornerWidth -= prevLine.get45CornerLegDistance() / 2 * scale;\r\n\r\n midPoint.y = midPoint.y * scale + offset.y;\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n ctx.textAlign = \"center\";\r\n //midPoint.y += fontSize / 2;\r\n // ctx.fillStyle = \"rgba(255,255,255,0)\";\r\n // ctx.fillRect(midPoint.x - tLen/2 - 4, midPoint.y - (fontSize), tLen + 4, fontSize + 4);\r\n ctx.beginPath();\r\n ctx.fillStyle = state.isHovered\r\n ? state.hoveredColor\r\n : (lineType === \"wall\") ? \"#000000\" : COLOR_THEMES[config.activeTheme].primary;\r\n\r\n let marginFrom = 0,\r\n marginTo = 0;\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n if (lineDirection.newDirection === \"east\") {\r\n midPoint.x -= lineCornerWidth;\r\n marginFrom = (lineDirection.cornerMargins.fromLeft) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromRight) ? marginTo + 9 : marginTo;\r\n } else if (lineDirection.newDirection === \"west\") {\r\n midPoint.x += lineCornerWidth;\r\n marginFrom = (lineDirection.cornerMargins.fromRight) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromLeft) ? marginTo + 9 : marginTo;\r\n }\r\n yOffset = (lineDirection.newDirection === \"west\" ? 33 : -20) + (state.midPoint.yOffset * scale);\r\n if (state.lineTextResized) {\r\n ctx.fillStyle = lineTextColor;\r\n ctx.wrapText(state.lineTextResized, midPoint.x - mtext.width / 2 - marginFrom + marginTo, midPoint.y + yOffset, medgeText, fontSize);\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n state.midPoint.x = midPoint.x + medgeText.width / 2 + space.width - marginFrom + marginTo;\r\n state.midPoint.y = midPoint.y + yOffset;\r\n } else {\r\n state.midPoint.x = midPoint.x - marginFrom + marginTo;\r\n state.midPoint.y = midPoint.y + yOffset;\r\n }\r\n ctx.wrapText(dstring, state.midPoint.x, state.midPoint.y, mtext, fontSize);\r\n break;\r\n }\r\n case \"vertical\": {\r\n if (lineDirection.newDirection === \"south\") {\r\n marginFrom = (lineDirection.cornerMargins.fromTop) ? marginFrom + 9 : marginFrom;\r\n marginTo = (lineDirection.cornerMargins.fromBottom) ? marginTo + 9 : marginTo;\r\n midPoint.y -= lineCornerWidth;\r\n } else if (lineDirection.newDirection === \"north\") {\r\n marginTo = (lineDirection.cornerMargins.fromTop) ? marginTo + 9 : marginTo;\r\n marginFrom = (lineDirection.cornerMargins.fromBottom) ? marginFrom + 9 : marginFrom;\r\n midPoint.y += lineCornerWidth;\r\n }\r\n xOffset += state.midPoint.xOffset * scale;\r\n state.midPoint.x = midPoint.x + xOffset;\r\n state.midPoint.y = midPoint.y + yOffset\r\n ? lineDirection.newDirection === \"south\"\r\n ? midPoint.y + medgeText.width / 2 + space.width\r\n : midPoint.y - medgeText.width / 2 + space.width\r\n : midPoint.y;\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y - 5 : midPoint.y - 10\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n if (state.lineTextResized) {\r\n ctx.fillStyle = lineTextColor;\r\n ctx.wrapText(state.lineTextResized, 0 - mtext.width / 2 + marginFrom - marginTo, -fontSize, medgeText, fontSize);\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n ctx.wrapText(dstring, 0 + medgeText.width / 2 + space.width + marginFrom - marginTo, -fontSize - yOffset, mtext, fontSize);\r\n } else {\r\n ctx.wrapText(dstring, 0 + marginFrom - marginTo, -fontSize, mtext, fontSize);\r\n }\r\n break;\r\n }\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n ctx.save();\r\n if (state.lineTextResized) {\r\n dstring = state.lineTextResized + ' ' + dstring;\r\n }\r\n //this.renderFrameBorder(ctx, dstring, fontSize, midPoint, orientationValue);\r\n const [parallelPoint1] = getParallelPoints(fromPosOnField, midPoint, -30);\r\n state.midPoint.x = parallelPoint1.x;\r\n state.midPoint.y = parallelPoint1.y;\r\n this.renderText(ctx, dstring, state.midPoint, fontSize, orientationValue);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n ctx.restore();\r\n\r\n if (Config.isDevMode()) {\r\n this.renderHoveredArea(ctx);\r\n }\r\n };\r\n\r\n this.renderHoveredArea = (ctx) => {\r\n //console.log(\"state.midPoint.\", state.midPoint);\r\n const hoveredArea = this.getHoveredArea();\r\n ctx.beginPath();\r\n ctx.moveTo(hoveredArea[0][0], hoveredArea[0][1]);\r\n ctx.lineTo(hoveredArea[1][0], hoveredArea[1][1]);\r\n ctx.lineTo(hoveredArea[2][0], hoveredArea[2][1]);\r\n ctx.lineTo(hoveredArea[3][0], hoveredArea[3][1]);\r\n ctx.lineTo(hoveredArea[0][0], hoveredArea[0][1]);\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = 'rgba(0, 0, 0, 0.5)';\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n this.getFrameBorderPosition = (ctx, pos, value, fontHeight, orientationValue) => {\r\n const mText = ctx.measureText(value);\r\n let position = {\r\n x: pos.x,\r\n y: pos.y\r\n };\r\n\r\n switch (orientationValue) {\r\n case orientation.HORIZONTAL: {\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n break;\r\n }\r\n case orientation.NORTHWEST: {\r\n position = {\r\n x: pos.x - mText.width,\r\n y: pos.y - this.design.offsetFromLineEnd\r\n };\r\n break;\r\n }\r\n case orientation.NORTHEAST: {\r\n position = {\r\n x: pos.x - mText.width,\r\n y: pos.y - this.design.offsetFromLineEnd\r\n };\r\n break;\r\n }\r\n case orientation.SOUTHWEST: {\r\n\r\n break;\r\n }\r\n case orientation.SOUTHEAST: {\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n return position\r\n }\r\n\r\n this.renderFrameBorder = (ctx, value, fontHeight, pos, orientationValue) => {\r\n ctx.beginPath();\r\n const mText = ctx.measureText(value);\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = COLOR.white\r\n\r\n const angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n let position = this.getFrameBorderPosition(ctx, pos, value, fontHeight, orientationValue);\r\n\r\n ctx.save();\r\n ctx.translate(\r\n position.x,\r\n position.y,\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n RenderFigures.roundedRect(ctx,\r\n 0, // absolute pos: //pos.x - mText.width / 1.25 / sqftConfig.scale * sqftConfig.defaultScale,\r\n 0, // absolute pos: //pos.y - fontHeight,\r\n mText.width * 1.5 + sqftConfig.scale / sqftConfig.defaultScale,\r\n fontHeight + 6,\r\n 5,\r\n true,\r\n true\r\n );\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n\r\n this.renderText = (ctx, value, pos, fontHeight, orientationValue) => {\r\n const //scale = sqftConfig.scale,\r\n font = fontHeight + \"px \" + config.activeFontBold,\r\n mText = ctx.measureText(value);\r\n\r\n //let position = this.getTextPosition(ctx, pos, value, fontHeight, orientationValue);\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = getCtxColor(ctx, lineType);\r\n\r\n let angle = getAngleBetweenTwoPoints(line.from, line.to);\r\n //this will help to rotate upside down text\r\n if ([orientation.NORTHWEST, orientation.SOUTHWEST].indexOf(orientationValue) !== -1) {\r\n angle += 180;\r\n }\r\n ctx.save();\r\n //RenderFigures.renderCircle(pos, 5,1, '#284da8');\r\n ctx.translate(\r\n pos.x,\r\n pos.y\r\n );\r\n ctx.rotate(angle * (Math.PI / 180));\r\n //ctx.wrapText(value, fontHeight / 2, mText.width / ( 2 * scale), mText, fontHeight);\r\n ctx.wrapText(value, 0, 0, mText, fontHeight);\r\n ctx.restore();\r\n ctx.closePath();\r\n }\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\nimport {\r\n distanceToInches,\r\n distanceToMillimeters, getFontsize, getFontsizeSmall, getIntersectCordsBetweenLines,\r\n getMidPoint,\r\n getPointDistance, isDisabledInPopupWithParents,\r\n measureDistanceToInches,\r\n mmToInches,\r\n orientation\r\n} from \"../../../../../helpers/sqftHelper\";\r\nimport point from \"../point\";\r\nimport shapeLine from \"../line\";\r\nimport {getMaxResizeWidth} from \"./resizeLine\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport Config from \"../../../store/sqftConfig\";\r\nimport configGlobal from \"../../../store/sqftConfig\";\r\nimport EventManager from \"../../../store/sqftEventManager\";\r\nimport {pnpolyArray} from \"../../../../../lib/pnpoly\";\r\nimport workspace from \"../../workspace\";\r\nimport $ from \"jquery\";\r\nimport store from \"../../../../../../../store\";\r\nimport {updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport {isDisabledInPopupShouldBeHidden, MEASURE_UNITS} from \"../../../../../constants\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport {renderResetSeamPopup, shouldResetSlabModePopupOnPointMoveBeDisplayed} from \"../../../canvasPopup/resetSeam\";\r\nimport {crossProduct2D} from \"../../../../../helpers/coordinatesHelper\";\r\nimport {getBumpoutFeature} from \"../../../../../helpers/featureHelper\";\r\nimport {createAdjustableInput} from \"../../../../../helpers/uiHelper\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\n\r\nexport default function() {\r\n var self = this,\r\n state = {\r\n mousePos: {},\r\n mouseDown: false,\r\n mouseDownPosition: null,\r\n isHoveringRect: false,\r\n isHoveringPoint: false,\r\n hoveredPoint: null,\r\n isHoveredOverText: false,\r\n hoveredText: {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n midPoint: {\r\n x: 0,\r\n y: 0,\r\n }\r\n },\r\n config = {\r\n initialSize: 30,\r\n minBumpoutSize: 1,\r\n dragPointMargin: 28,\r\n rulerMargin: 25,\r\n movePointOffset: 100,\r\n lineTextColor: COLOR_THEMES[Config.activeTheme].primary\r\n },\r\n bumpoutPoints = {\r\n point1: null,\r\n point2: null,\r\n point3: null,\r\n point4: null,\r\n dragPoint: null\r\n },\r\n bumpoutTextParameters = {\r\n lengthFrom1 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length14 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length34 : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n length4to : {\r\n area:[],\r\n midPoint: {x: 0, y: 0},\r\n pointsDistance: 0,\r\n points: {point1: null, point2: null},\r\n orientation: 0\r\n },\r\n },\r\n deleteFillStyle = \"rgba(253,2,33, 0.5)\",\r\n line = null,\r\n bumpoutLines = null;\r\n\r\n this.id = uuidv4(); // sqftId (this is not attached resource id)\r\n this.featureId = null; // will be assigned on init\r\n\r\n //private property setters\r\n function setLine(value) { line = value; }\r\n function setBumpoutPoints(value) { bumpoutPoints = value; }\r\n\r\n //private functions\r\n function preparePoints() {\r\n var midPoint = getMidPoint(line.from, line.to),\r\n point1,\r\n point2,\r\n point3,\r\n point4,\r\n dragPoint,\r\n dragPointMargin,\r\n flipPoints = false;\r\n\r\n const lineDirection = line.getLineDirection();\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n flipPoints = lineDirection.newDirection === \"west\";\r\n dragPointMargin = flipPoints ? config.dragPointMargin : -config.dragPointMargin;\r\n point1 = new point(midPoint.x - config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point2 = new point(midPoint.x - config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point3 = new point(midPoint.x + config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n point4 = new point(midPoint.x + config.initialSize / 2, midPoint.y, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x, midPoint.y + dragPointMargin, undefined, undefined, false);\r\n\r\n break;\r\n }\r\n case \"vertical\": {\r\n flipPoints = lineDirection.newDirection === \"north\";\r\n dragPointMargin = flipPoints ? -config.dragPointMargin : config.dragPointMargin;\r\n point1 = new point(midPoint.x, midPoint.y - config.initialSize / 2, undefined, undefined, false);\r\n point2 = new point(midPoint.x, midPoint.y - config.initialSize / 2, undefined, undefined, false);\r\n point3 = new point(midPoint.x, midPoint.y + config.initialSize / 2, undefined, undefined, false);\r\n point4 = new point(midPoint.x, midPoint.y + config.initialSize / 2, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x + dragPointMargin, midPoint.y, undefined, undefined, false);\r\n break;\r\n }\r\n case \"NORTHWEST\":\r\n case \"NORTHEAST\":\r\n case \"SOUTHWEST\":\r\n case \"SOUTHEAST\": {\r\n //todo rotation\r\n point1 = new point(midPoint.x, midPoint.y - bumpoutPoints.initialSize / 2, undefined, undefined, false);\r\n point4 = new point(midPoint.x, midPoint.y + bumpoutPoints.initialSize / 2, undefined, undefined, false);\r\n dragPoint = new point(midPoint.x, midPoint.y, undefined, undefined, false);\r\n\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n setBumpoutPoints ({\r\n point1: flipPoints ? point4 : point1,\r\n point2: flipPoints ? point3 : point2,\r\n point3: flipPoints ? point2 : point3,\r\n point4: flipPoints ? point1 : point4,\r\n dragPoint: dragPoint\r\n });\r\n }\r\n\r\n function movePointInOrStop(point1, point2, axis, diff, biggestPoint, smallestPoint, stopPoint) {\r\n // stop on other bumpout move point\r\n if (point1[axis] > stopPoint[axis]) {\r\n smallestPoint = stopPoint[axis] + config.minBumpoutSize;\r\n } else {\r\n biggestPoint = stopPoint[axis] - config.minBumpoutSize;\r\n }\r\n\r\n if (point1[axis] - diff >= biggestPoint) {\r\n point1[axis] = point2[axis] = biggestPoint;\r\n } else if (point1[axis] - diff <= smallestPoint) {\r\n point1[axis] = point2[axis] = smallestPoint;\r\n } else {\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n }\r\n }\r\n\r\n function movePointOutOrStop(point1, point2, axis, diff, biggestPoint, smallestPoint) {\r\n let direction = line.getLineDirection().newDirection;\r\n let dragPointMargin;\r\n let lengthMidPoint;\r\n\r\n if (point1[axis] - diff > smallestPoint && (direction === \"east\" || direction === \"north\")) {\r\n dragPointMargin = -config.dragPointMargin;\r\n point1[axis] = point2[axis] = smallestPoint;\r\n bumpoutPoints.dragPoint[axis] = smallestPoint + dragPointMargin\r\n } else if (point1[axis] - diff < biggestPoint && (direction === \"west\" || direction === \"south\")) {\r\n dragPointMargin = +config.dragPointMargin;\r\n point1[axis] = point2[axis] = biggestPoint;\r\n bumpoutPoints.dragPoint[axis] = smallestPoint + dragPointMargin\r\n } else {\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n bumpoutPoints.dragPoint[axis] -= diff;\r\n lengthMidPoint = line.overlay.getMidpoint();\r\n line.overlay.setMidpointOffset(lengthMidPoint.xOffset - diff, lengthMidPoint.yOffset - diff);\r\n }\r\n }\r\n\r\n function move23Point(point1, point2, axis, diff) {\r\n // Check for intersection with all lines in the parent shape\r\n point1[axis] -= diff;\r\n point2[axis] -= diff;\r\n let intersects = line.getParent().getLines().some(parentLine => {\r\n // Don't check against itself\r\n if (parentLine === line) return false;\r\n\r\n // Check if bumpoutPoints {from: point1, to: point2} line would intersect this parent line\r\n return getIntersectCordsBetweenLines(\r\n { x: parentLine.from.x, y: parentLine.from.y },\r\n { x: parentLine.to.x, y: parentLine.to.y },\r\n { x: bumpoutPoints.point1.x, y: bumpoutPoints.point1.y },\r\n { x: bumpoutPoints.point2.x, y: bumpoutPoints.point2.y }\r\n );\r\n });\r\n\r\n // Only move points if no intersection detected\r\n if (!intersects) {\r\n let lengthMidPoint = line.overlay.getMidpoint();\r\n bumpoutPoints.dragPoint[axis] -= diff;\r\n line.overlay.setMidpointOffset(lengthMidPoint.xOffset - diff, lengthMidPoint.yOffset - diff);\r\n } else {\r\n // rollback points if intersection was found\r\n point1[axis] += diff;\r\n point2[axis] += diff;\r\n }\r\n }\r\n\r\n function getMousePosPointDiff(diff, point, mousePos, sameOrientation = false) {\r\n if (configGlobal.measureUnit === \"Metric\") {\r\n var offset = 0;\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n offset = sameOrientation ? mousePos.x - point.getPointField().x : mousePos.y - point.getPointField().y;\r\n break;\r\n case orientation.VERTICAL:\r\n offset = sameOrientation? mousePos.y - point.getPointField().y : mousePos.x - point.getPointField().x;\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n\r\n if (-config.movePointOffset < offset && offset < config.movePointOffset) {\r\n diff = diff / configGlobal.millimetersMultiplier;\r\n }\r\n }\r\n\r\n return diff\r\n }\r\n\r\n //public property getters\r\n\r\n this.getParent = () => { return line; };\r\n this.getGrandParent = () => {\r\n const parent = this.getParent();\r\n if (parent && parent.getParent) {\r\n return parent.getParent();\r\n }\r\n return null\r\n };\r\n this.getBumpoutPoints = function() { return bumpoutPoints; };\r\n this.getBumpoutLines = () => {\r\n if (bumpoutLines) {\r\n return bumpoutLines\r\n }\r\n return this.createBumpoutLines();\r\n };\r\n this.createBumpoutLines = () => {\r\n const points = this.getBumpoutPoints();\r\n bumpoutLines = [\r\n new shapeLine(line.from, points.point1, line.getParent()),\r\n new shapeLine(points.point1, points.point2, line.getParent()),\r\n new shapeLine(points.point2, points.point3, line.getParent()),\r\n new shapeLine(points.point3, points.point4, line.getParent()),\r\n new shapeLine(points.point4, line.to, line.getParent()),\r\n ];\r\n\r\n return bumpoutLines\r\n };\r\n this.getBumpoutPointCords = function() {\r\n let bumpoutPointsCords = [];\r\n for (const bumpoutPointsKey in bumpoutPoints) {\r\n if (bumpoutPointsKey !== 'dragPoint') {\r\n bumpoutPointsCords.push(bumpoutPoints[bumpoutPointsKey]);\r\n }\r\n }\r\n return bumpoutPointsCords\r\n };\r\n this.getBumpoutTextParameter = function() { return bumpoutTextParameters; };\r\n\r\n this.destroy = function(protect) {\r\n if (!protect) {\r\n EventManager.removeEvent(self);\r\n }\r\n const reduxState = store.getState();\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n this.init = (line, importPoints = null, featureId = null) => {\r\n setLine(line);\r\n if (!importPoints) {\r\n preparePoints();\r\n }\r\n this.featureId = featureId\r\n if (!featureId) {\r\n const bumpoutFeature = getBumpoutFeature();\r\n const isFeatureExist = Array.isArray(bumpoutFeature)\r\n && bumpoutFeature.length\r\n && bumpoutFeature[0].part\r\n && bumpoutFeature[0].part.dbFeature\r\n\r\n this.featureId = isFeatureExist ? bumpoutFeature[0].part.dbFeature.id : null;\r\n }\r\n this.initEvents();\r\n\r\n //points\r\n bumpoutPoints.point1.init(self);\r\n bumpoutPoints.point1.layout = 'white-circle';\r\n\r\n bumpoutPoints.point2.init(self);\r\n bumpoutPoints.point2.layout = 'blank';\r\n\r\n bumpoutPoints.point3.init(self);\r\n bumpoutPoints.point3.layout = 'blank';\r\n\r\n bumpoutPoints.point4.init(self);\r\n bumpoutPoints.point4.layout = 'white-circle';\r\n\r\n bumpoutPoints.dragPoint.init(self);\r\n bumpoutPoints.dragPoint.layout = 'arrow-circle';\r\n\r\n // set line overlay length offset\r\n if (!importPoints) {\r\n var xOffset = 0;\r\n var yOffset = 0;\r\n var lineDirection = line.getLineDirection();\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yOffset = (lineDirection.newDirection === \"west\" ? config.dragPointMargin - 15 : -config.dragPointMargin + 15);\r\n break;\r\n }\r\n case \"vertical\": {\r\n xOffset = (lineDirection.newDirection === \"south\" ? config.dragPointMargin - 15 : -config.dragPointMargin + 15);\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n line.overlay.setMidpointOffset(xOffset, yOffset)\r\n }\r\n\r\n // todo fix bumpout rotation and remove this\r\n $('.button--angle').addClass('button--disabled');\r\n /////////////////////////////////////////\r\n };\r\n this.initEvents = () => {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n //todo priority\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_MOVE,\r\n onMouseMove,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_DOWN,\r\n onMouseDown,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n onMouseUp,\r\n self,\r\n EventManager.priorities.SEGMENT\r\n );\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_LEAVE,\r\n onMouseLeave,\r\n self,\r\n EventManager.priorities.OVERALL\r\n );\r\n }\r\n this.deregisterEvents = () => {\r\n sqftEventManager.removeEvent(this);\r\n this.isHidden = true;\r\n for (let i = 0; i < bumpoutPoints.length; i++) {\r\n bumpoutPoints[i].deregisterEvents();\r\n }\r\n };\r\n this.reInitEvents = () => {\r\n this.initEvents();\r\n this.isHidden = false;\r\n for (let i = 0; i < bumpoutPoints.length; i++) {\r\n bumpoutPoints[i].reInitEvents();\r\n }\r\n };\r\n this.export = function() {\r\n return {\r\n bumpoutPoints : {\r\n point1: bumpoutPoints.point1.export(),\r\n point2: bumpoutPoints.point2.export(),\r\n point3: bumpoutPoints.point3.export(),\r\n point4: bumpoutPoints.point4.export(),\r\n dragPoint: bumpoutPoints.dragPoint.export()\r\n },\r\n overlay: {\r\n midpoint: line.overlay.getMidpoint(),\r\n id: this.id\r\n }\r\n }\r\n };\r\n this.import = (line, bumpoutData) => {\r\n for (let bumpoutPoint in bumpoutData.bumpoutPoints) {\r\n bumpoutPoints[bumpoutPoint] = new point();\r\n bumpoutPoints[bumpoutPoint].import(bumpoutData.bumpoutPoints[bumpoutPoint])\r\n }\r\n this.init(line, bumpoutData.bumpoutPoints, bumpoutData.overlay.id);\r\n };\r\n this.getOffset = function() {\r\n return line.getOffset();\r\n };\r\n this.getBumpoutLength = function () {\r\n var bumpoutDistance = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2);\r\n\r\n return measureDistanceToInches(bumpoutDistance);\r\n };\r\n this.getBumpoutTotalHeight = function () {\r\n var bumpoutDistance = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2);\r\n\r\n return measureDistanceToInches(bumpoutDistance * 2);\r\n };\r\n this.getBumpoutTotalArea = () => {\r\n if (this.bumpoutInOrOut() === 'in') {\r\n return {\r\n inches: 0,\r\n millimeters: 0\r\n }\r\n }\r\n\r\n var lineLengthInches = line.getLineLength(),\r\n lineLengthMm = line.getLineLengthMm(),\r\n\r\n bumpoutLength = this.getBumpoutLength(),\r\n bumpoutLengthInches = line.addDecimalToLength(bumpoutLength),\r\n bumpoutLengthMM = bumpoutLength.millimeters;\r\n\r\n return {\r\n inches : lineLengthInches * bumpoutLengthInches,\r\n millimeters : lineLengthMm * bumpoutLengthMM\r\n }\r\n };\r\n\r\n this.isHoveringRect = () => { return state.isHoveringRect };\r\n\r\n this.moveBumpout = function(xDiff = 0, yDiff = 0) {\r\n for (let bumpoutPoint in bumpoutPoints ) {\r\n bumpoutPoints[bumpoutPoint].x -= xDiff;\r\n bumpoutPoints[bumpoutPoint].y -= yDiff;\r\n }\r\n };\r\n\r\n this.moveLineWithMouse = function(mousePos) {\r\n let scale = workspace.getScale();\r\n let xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n let yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n yDiff = getMousePosPointDiff(yDiff, bumpoutPoints.dragPoint, mousePos);\r\n xDiff = getMousePosPointDiff(xDiff, bumpoutPoints.dragPoint, mousePos);\r\n\r\n this.moveLine(xDiff, yDiff);\r\n\r\n state.mouseDownPosition.y = mousePos.y;\r\n state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n this.isBumpoutPointMoving = () => { return state.mouseDown};\r\n this.moveLine = function(xDiff, yDiff) {\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n\r\n var o = line.getOrientation();\r\n\r\n if (o === orientation.VERTICAL) {\r\n move23Point(bumpoutPoints.point2, bumpoutPoints.point3, 'x', xDiff);\r\n void movePointOutOrStop\r\n //movePointOutOrStop(bumpoutPoints.point2, bumpoutPoints.point3, 'x', xDiff, line.getBiggestXPoint().x, line.getSmallestXPoint().x, false);\r\n } else if (o === orientation.HORIZONTAL) {\r\n // let distance = line.getSmallestYPoint().y;\r\n // const closetParallelLineAndPoint = findClosestIntersectingPointAndLine(line, line.getParent().getLines());\r\n // if (closetParallelLineAndPoint) {\r\n // const midPoint = getMidPoint(line.from, line.to);\r\n // distance = getPointDistance(midPoint, closetParallelLineAndPoint.point);\r\n // }\r\n // movePointOutOrStop(bumpoutPoints.point2, bumpoutPoints.point3, 'y', yDiff, distance, distance, false);\r\n\r\n move23Point(bumpoutPoints.point2, bumpoutPoints.point3, 'y', yDiff);\r\n } else {\r\n //todo\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n }\r\n\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n };\r\n\r\n this.movePointWithMouse = function(mousePos, point1, point2, stopPoint) {\r\n var scale = workspace.getScale();\r\n var xDiff = (state.mouseDownPosition.x - mousePos.x) / scale;\r\n var yDiff = (state.mouseDownPosition.y - mousePos.y) / scale;\r\n\r\n yDiff = getMousePosPointDiff(yDiff, point1, mousePos, true);\r\n xDiff = getMousePosPointDiff(xDiff, point1, mousePos, true);\r\n\r\n this.movePoint(xDiff, yDiff, point1, point2, stopPoint);\r\n\r\n state.mouseDownPosition.y = mousePos.y;\r\n state.mouseDownPosition.x = mousePos.x;\r\n };\r\n\r\n this.resizeBumpoutPart = function(value, hoveredText) {\r\n let yDiff = 0,\r\n xDiff = 0,\r\n pointDistance = getPointDistance(hoveredText.points.point1, hoveredText.points.point2),\r\n lineDirection = line.getLineDirection();\r\n\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n\r\n switch (hoveredText.part) {\r\n case \"lengthFrom1\":\r\n xDiff = lineDirection.newDirection === \"west\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length4to\":\r\n xDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance : value - pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n break;\r\n case \"length14\":\r\n xDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n\r\n xDiff = lineDirection.newDirection === \"west\" ? value - pointDistance: -value + pointDistance;\r\n this.movePoint(xDiff / 2, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n\r\n break;\r\n case \"length34\":\r\n pointDistance = this.bumpoutInOrOut() === \"in\" ? -pointDistance : pointDistance;\r\n yDiff = lineDirection.newDirection === \"west\" ? -value + pointDistance: value - pointDistance;\r\n this.moveLine(xDiff, yDiff);\r\n break;\r\n }\r\n break;\r\n case orientation.VERTICAL:\r\n switch (hoveredText.part) {\r\n case \"lengthFrom1\":\r\n yDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length4to\":\r\n yDiff = lineDirection.newDirection === \"south\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n break;\r\n case \"length14\":\r\n yDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.movePoint(xDiff, yDiff / 2, bumpoutPoints.point3, bumpoutPoints.point4, bumpoutPoints.point1);\r\n\r\n yDiff = lineDirection.newDirection === \"south\" ? value - pointDistance : -value + pointDistance;\r\n this.movePoint(xDiff, yDiff / 2, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n break;\r\n case \"length34\":\r\n pointDistance = this.bumpoutInOrOut() === \"in\" ? -pointDistance : pointDistance;\r\n xDiff = lineDirection.newDirection === \"south\" ? -value + pointDistance: value - pointDistance;\r\n this.moveLine(xDiff, yDiff);\r\n break;\r\n }\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n break;\r\n }\r\n };\r\n\r\n this.movePoint = function(xDiff, yDiff, point1, point2, stopPoint) {\r\n if (SqftStore.isRegularMode() && shouldResetSlabModePopupOnPointMoveBeDisplayed(this.getGrandParent())) {\r\n renderResetSeamPopup(this.getGrandParent())\r\n }\r\n let o = line.getOrientation(),\r\n midPoint,\r\n dragPointMargin,\r\n lineDirection = line.getLineDirection(),\r\n toCornerLength = line.to.getArcLength() || line.get45CornerLegDistance(),\r\n prevLine = line.getParent().getPrevLine(line),\r\n fromCornerLength = prevLine.to.getArcLength() || prevLine.get45CornerLegDistance(),\r\n toCornerMargin = 0,\r\n fromCornerMargin = 0;\r\n\r\n if (o === orientation.VERTICAL) {\r\n midPoint = getMidPoint(bumpoutPoints.point2, bumpoutPoints.point3);\r\n dragPointMargin = lineDirection.newDirection === \"north\" ? -config.dragPointMargin : +config.dragPointMargin;\r\n bumpoutPoints.dragPoint.x = midPoint.x + dragPointMargin;\r\n bumpoutPoints.dragPoint.y = midPoint.y;\r\n toCornerMargin = lineDirection.newDirection === \"north\" ? -fromCornerLength : -toCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"north\" ? +toCornerLength : +fromCornerLength;\r\n\r\n // stop point on overline move\r\n movePointInOrStop(\r\n point1, point2, 'y', yDiff,\r\n line.getBiggestYPoint().y + toCornerMargin,\r\n line.getSmallestYPoint().y + fromCornerMargin,\r\n stopPoint\r\n );\r\n } else if (o === orientation.HORIZONTAL) {\r\n midPoint = getMidPoint(bumpoutPoints.point2, bumpoutPoints.point3);\r\n dragPointMargin = lineDirection.newDirection === \"east\" ? -config.dragPointMargin : +config.dragPointMargin;\r\n bumpoutPoints.dragPoint.x = midPoint.x;\r\n bumpoutPoints.dragPoint.y = midPoint.y + dragPointMargin;\r\n toCornerMargin = lineDirection.newDirection === \"east\" ? -toCornerLength : -fromCornerLength;\r\n fromCornerMargin = lineDirection.newDirection === \"east\" ? +fromCornerLength : +toCornerLength;\r\n\r\n // stop point on overline move\r\n movePointInOrStop(\r\n point1, point2, 'x', xDiff,\r\n line.getBiggestXPoint().x + toCornerMargin,\r\n line.getSmallestXPoint().x + fromCornerMargin,\r\n stopPoint\r\n );\r\n } else {\r\n //todo rotation\r\n // const nextLine = parent.getNextLine(self);\r\n // const prevLine = parent.getPrevLine(self);\r\n // moveDiagonalLine(self, nextLine, prevLine, state.movePointDistance, yDiff, o);\r\n // state.mouseDownPosition = mousePos;\r\n }\r\n\r\n\r\n // self.from = lockPointToCanvas(self.from); // removed locking because of this issue http://jira.mozidev.com/browse/QC-802\r\n // self.to = lockPointToCanvas(self.to);\r\n };\r\n\r\n\r\n\r\n // Define a function to determine if the bumpout is in or out.\r\n this.bumpoutInOrOut = (pointA = line.from, pointB = line.to, dragPoint = bumpoutPoints.point2) => {\r\n // Calculate vectors.\r\n const vectorAB = { x: pointB.x - pointA.x, y: pointB.y - pointA.y };\r\n const vectorADrag = { x: dragPoint.x - pointA.x, y: dragPoint.y - pointA.y };\r\n\r\n // Calculate the cross product of vectorAB and vectorADrag.\r\n const crossProdZ = crossProduct2D(vectorAB, vectorADrag);\r\n\r\n // Determine if the bumpout is in or out based on the cross product.\r\n if (crossProdZ > 0) {\r\n // Positive Z component indicates an outward bumpout (peak).\r\n return 'in';\r\n } else {\r\n // Negative Z component indicates an inward bumpout (valley).\r\n return 'out';\r\n }\r\n }\r\n\r\n this.drawBumpoutRect = (ctx) => {\r\n var point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = line.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = line.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4);\r\n //bumpoutHeight = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point2),\r\n //bumpoutLength = getPointDistance(bumpoutPoints.point1, bumpoutPoints.point4);\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.moveTo(point1.x, point1.y);\r\n ctx.lineTo(point2.x, point2.y);\r\n ctx.lineTo(point3.x, point3.y);\r\n ctx.lineTo(point4.x, point4.y);\r\n ctx.closePath();\r\n ctx.fillStyle = deleteFillStyle;\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.restore();\r\n };\r\n\r\n this.render = function(ctx) {\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(line)) {\r\n return\r\n }\r\n renderTopBlueLine(ctx);\r\n renderRuler(ctx);\r\n renderMeasurements(ctx);\r\n };\r\n\r\n //blue line between middle points\r\n function renderTopBlueLine(ctx) {\r\n var renderFrom = line.calculateRenderPosition(bumpoutPoints.point2),\r\n renderTo = line.calculateRenderPosition(bumpoutPoints.point3);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(renderFrom.x, renderFrom.y);\r\n ctx.lineTo(renderTo.x, renderTo.y);\r\n ctx.lineWidth = 8;\r\n ctx.strokeStyle = config.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n const renderRuler = (ctx) => {\r\n let\r\n //toCornerLength = line.to.getAngle() || line.to.getArcLength(),\r\n //prevLine = line.getParent().getPrevLine(line),\r\n //fromCornerLength = prevLine.to.getAngle() || prevLine.to.getArcLength(),\r\n lineDirection = line.getLineDirection(),\r\n renderTo = line.calculateRenderPosition(line.to),\r\n renderFrom = line.calculateRenderPosition(line.from),\r\n point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4),\r\n xMargin = 0,\r\n yMargin = 0,\r\n xOffset = 3,\r\n yOffset = 3,\r\n bumpoutXOffset = 0,\r\n bumpoutYOffset = 0,\r\n scale = configGlobal.scale,\r\n pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n yMargin = (lineDirection.newDirection === \"west\" ? config.rulerMargin : -config.rulerMargin);\r\n bumpoutYOffset = (lineDirection.newDirection === \"west\" ? pointDistance34 * scale : -(pointDistance34 * scale));\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n bumpoutYOffset = -bumpoutYOffset\r\n }\r\n xOffset = (lineDirection.newDirection === \"west\") ? -xOffset : xOffset;\r\n yOffset = 0;\r\n break;\r\n }\r\n case \"vertical\": {\r\n xMargin = (lineDirection.newDirection === \"south\" ? config.rulerMargin: -config.rulerMargin);\r\n bumpoutXOffset = (lineDirection.newDirection === \"south\" ? pointDistance34 * scale: -(pointDistance34 * scale));\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n bumpoutXOffset = -bumpoutXOffset\r\n }\r\n yOffset = (lineDirection.newDirection === \"south\") ? yOffset : -yOffset;\r\n xOffset = 0;\r\n break;\r\n }\r\n // todo rotation\r\n case \"NORTHWEST\": { break;}\r\n case \"NORTHEAST\": { break;}\r\n case \"SOUTHWEST\": { break;}\r\n case \"SOUTHEAST\": { break;}\r\n default:\r\n break;\r\n }\r\n\r\n ctx.beginPath();\r\n drawArrow(ctx, renderFrom.x + xMargin, renderFrom.y + yMargin, point1.x + xMargin, point1.y + yMargin);\r\n drawArrow( ctx,\r\n point1.x + xMargin + xOffset + bumpoutXOffset,\r\n point1.y + yMargin + yOffset + bumpoutYOffset,\r\n point4.x + xMargin - xOffset + bumpoutXOffset,\r\n point4.y + yMargin - yOffset + bumpoutYOffset\r\n );\r\n drawArrow(ctx, point4.x + xMargin, point4.y + yMargin, renderTo.x + xMargin, renderTo.y + yMargin);\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = config.lineTextColor;\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n\r\n const renderMeasurements = (ctx) => {\r\n var scale = configGlobal.scale,\r\n fontSize = getFontsizeSmall(),\r\n font = (fontSize).toString() + \"px \" + Config.activeFontBold,\r\n lineDirection = line.getLineDirection(),\r\n lineTextColor = config.lineTextColor,\r\n xOffset = 0,\r\n yOffset = 0;\r\n\r\n ctx.beginPath();\r\n ctx.font = font;\r\n ctx.textAlign = \"center\";\r\n ctx.fillStyle = lineTextColor;\r\n\r\n //todo rotation\r\n // const rotateAnglePart = line.from.rotateAnglePart;\r\n // const rotatedAngleValue = line.from.rotateAnglePart ? line.from.rotateAnglePart.rotatedAngleValue : 0;\r\n // const parent = line.getParent();\r\n // let moveFrom, moveTo, prevLine, nextLine, prevParallelLine, nextParallelLine;\r\n // if (lineDirection.orientation !== \"horizontal\" && lineDirection.orientation !== \"vertical\") {\r\n // prevLine = parent.getPrevLine(line);\r\n // nextLine = parent.getNextLine(line);\r\n // prevParallelLine = parent.getPrevLine(prevLine);\r\n // nextParallelLine = parent.getNextLine(nextLine);\r\n // }\r\n\r\n switch (lineDirection.orientation) {\r\n case \"horizontal\": {\r\n // renderTextBetweenPoints34\r\n xOffset = (lineDirection.newDirection === \"west\" ? -45 : 45);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 60 : -60);\r\n renderHorizontalText(bumpoutPoints.point3, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length34, 'length34');\r\n\r\n //renderTextBetweenPoints14\r\n let pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n pointDistance34 = -pointDistance34\r\n }\r\n xOffset = (lineDirection.newDirection === \"west\" ? -10 : 10);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 + (pointDistance34 * scale) : -45 - (pointDistance34 * scale));\r\n renderHorizontalText(bumpoutPoints.point1, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length14, 'length14');\r\n\r\n // renderTextBetweenPointsFrom1\r\n xOffset = (lineDirection.newDirection === \"west\" ? 40 : -30);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 : -45);\r\n renderHorizontalText(line.from, bumpoutPoints.point1, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.lengthFrom1, 'lengthFrom1');\r\n\r\n //renderTextBetweenPoints4To\r\n xOffset = (lineDirection.newDirection === \"west\" ? -40 : 40);\r\n yOffset = (lineDirection.newDirection === \"west\" ? 45 : -45);\r\n renderHorizontalText(bumpoutPoints.point4, line.to, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length4to, 'length4to');\r\n\r\n //ctx.wrapText(dstring, state.midPoint.x, state.midPoint.y, medgeText, fontSize);\r\n break;\r\n }\r\n case \"vertical\": {\r\n //renderTextBetweenPoints34\r\n yOffset = (lineDirection.newDirection === \"south\" ? 25 : -25 );\r\n xOffset = (lineDirection.newDirection === \"south\" ? 80 : -80 );\r\n\r\n renderHorizontalText(bumpoutPoints.point3, bumpoutPoints.point4, xOffset, yOffset, fontSize, ctx, bumpoutTextParameters.length34, 'length34');\r\n\r\n xOffset = (lineDirection.newDirection === \"south\" ? 35 : -35);\r\n yOffset = (lineDirection.newDirection === \"south\" ? -45 : 30 );\r\n\r\n // renderTextBetweenPointsFrom1\r\n renderRotatedText(ctx, line.from, bumpoutPoints.point1, fontSize, xOffset, yOffset, bumpoutTextParameters.lengthFrom1, 'lengthFrom1');\r\n\r\n yOffset = (lineDirection.newDirection === \"south\" ? 30 : -45 );\r\n // renderTextBetweenPoints4To\r\n renderRotatedText(ctx, bumpoutPoints.point4, line.to, fontSize, xOffset, yOffset, bumpoutTextParameters.length4to, 'length4to');\r\n\r\n // renderTextBetweenPoints14\r\n let pointDistance34 = getPointDistance(bumpoutPoints.point3, bumpoutPoints.point4);\r\n // we need to change sign of bumpoutYOffset if it is bumoutIN\r\n if (this.bumpoutInOrOut(line.from, line.to, bumpoutPoints.point2) === \"in\") {\r\n pointDistance34 = -pointDistance34\r\n }\r\n xOffset = (lineDirection.newDirection === \"south\" ? 35 + (pointDistance34 * scale) : -35 - (pointDistance34 * scale));\r\n yOffset = 0;\r\n renderRotatedText(ctx, bumpoutPoints.point1, bumpoutPoints.point4, fontSize, xOffset, yOffset, bumpoutTextParameters.length14, 'length14');\r\n\r\n break;\r\n }\r\n //TODO rotation\r\n case \"NORTHWEST\": {\r\n break;\r\n }\r\n case \"NORTHEAST\": {\r\n break;\r\n }\r\n case \"SOUTHWEST\": {\r\n break;\r\n }\r\n case \"SOUTHEAST\": {\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // private functions\r\n function renderHorizontalText(point1, point2, xOffset, yOffset, fontSize, ctx, bumpoutTextParameter, part) {\r\n let scale = configGlobal.scale,\r\n midPoint = getMidPoint(point1, point2),\r\n offset = line.getOffset(),\r\n pointsDistance = getPointDistance(point1, point2),\r\n renderText = configGlobal.measureUnit === \"Metric\" ? distanceToMillimeters(pointsDistance.toString()) : distanceToInches(pointsDistance.toString()),\r\n mText = ctx.measureText(renderText);\r\n\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n midPoint.y = midPoint.y * scale + offset.y + fontSize / 2;\r\n ctx.wrapText(renderText, midPoint.x + xOffset, midPoint.y + yOffset, mText, fontSize);\r\n\r\n bumpoutTextParameter.area = getTextPointsArea(midPoint.x + xOffset, midPoint.y + yOffset, mText, orientation.HORIZONTAL);\r\n bumpoutTextParameter.midPoint = {x: midPoint.x + xOffset, y: midPoint.y + yOffset};\r\n bumpoutTextParameter.pointsDistance = pointsDistance;\r\n bumpoutTextParameter.points = { point1: point1, point2: point2 };\r\n bumpoutTextParameter.part = part;\r\n bumpoutTextParameter.orientation = orientation.HORIZONTAL;\r\n }\r\n\r\n function renderRotatedText(ctx, point1, point2, fontSize, xOffset, yOffset, bumpoutTextParameter, part) {\r\n let scale = configGlobal.scale,\r\n midPoint = getMidPoint(point1, point2),\r\n offset = line.getOffset(),\r\n pointsDistance = getPointDistance(point1, point2),\r\n textToRender = configGlobal.measureUnit === \"Metric\" ? distanceToMillimeters(pointsDistance.toString()) : distanceToInches(pointsDistance.toString()),\r\n mText = ctx.measureText(textToRender),\r\n lineDirection = line.getLineDirection();\r\n\r\n midPoint.x = midPoint.x * scale + offset.x;\r\n midPoint.y = midPoint.y * scale + offset.y + fontSize / 2;\r\n\r\n ctx.save();\r\n ctx.translate(\r\n lineDirection.newDirection === \"south\" ? midPoint.x + xOffset : midPoint.x + xOffset,\r\n lineDirection.newDirection === \"south\" ? midPoint.y + yOffset : midPoint.y + yOffset\r\n );\r\n ctx.rotate(lineDirection.newDirection === \"south\" ? Math.PI / 2 : -Math.PI / 2);\r\n ctx.wrapText(textToRender, 0, 0, ctx.measureText(textToRender), fontSize);\r\n ctx.restore();\r\n\r\n bumpoutTextParameter.area = getTextPointsArea(midPoint.x + xOffset, midPoint.y + yOffset, mText, orientation.VERTICAL);\r\n bumpoutTextParameter.midPoint = {x: midPoint.x + xOffset, y: midPoint.y + yOffset};\r\n bumpoutTextParameter.pointsDistance = pointsDistance;\r\n bumpoutTextParameter.points = { point1: point1, point2: point2 };\r\n bumpoutTextParameter.part = part;\r\n bumpoutTextParameter.orientation = orientation.VERTICAL;\r\n }\r\n\r\n function drawArrow(context, fromX, fromY, toX, toY) {\r\n var headLen = 10; // length of head in pixels\r\n var dx = toX - fromX;\r\n var dy = toY - fromY;\r\n var angle = Math.atan2(dy, dx);\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle - Math.PI / 6), toY - headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(toX, toY);\r\n context.lineTo(toX - headLen * Math.cos(angle + Math.PI / 6), toY - headLen * Math.sin(angle + Math.PI / 6));\r\n\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle - Math.PI / 6), fromY + headLen * Math.sin(angle - Math.PI / 6));\r\n context.moveTo(fromX, fromY);\r\n context.lineTo(fromX + headLen * Math.cos(angle + Math.PI / 6), fromY + headLen * Math.sin(angle + Math.PI / 6));\r\n }\r\n\r\n function onMouseMove(mousePos, e) {\r\n void e;\r\n state.isHoveredOverText = false;\r\n state.isHoveringRect = false;\r\n\r\n for (const property in bumpoutTextParameters) {\r\n if (isMouseOverText(bumpoutTextParameters[property].area, mousePos)) {\r\n state.isHoveredOverText = true;\r\n state.hoveredText = bumpoutTextParameters[property];\r\n break;\r\n }\r\n }\r\n\r\n if (isMouseOverRect(mousePos)) {\r\n state.isHoveringRect = true;\r\n }\r\n\r\n if (isMouseOverPoint(mousePos, bumpoutPoints.dragPoint)) {\r\n // todo angle\r\n // if (workspace.getAllowBumpoutEdges() && !line.from.angleIsChanged && !line.to.angleIsChanged) {\r\n\r\n if (state.mouseDown) {\r\n self.moveLineWithMouse(mousePos);\r\n }\r\n EventManager.releaseStealLock(parent); //TODO Cursor\r\n EventManager.stealCursor(true, true);\r\n switch(line.getOrientation()) {\r\n case orientation.HORIZONTAL:\r\n EventManager.setCursor(\"n-resize\", self);\r\n break;\r\n case orientation.VERTICAL:\r\n EventManager.setCursor(\"e-resize\", self);\r\n break;\r\n case orientation.NORTHWEST:\r\n case orientation.SOUTHEAST:\r\n EventManager.setCursor(\"ne-resize\", self);\r\n break;\r\n case orientation.NORTHEAST:\r\n case orientation.SOUTHWEST:\r\n EventManager.setCursor(\"nw-resize\", self);\r\n break;\r\n }\r\n\r\n return state.mouseDown;\r\n\r\n\r\n // if (configGlobal.highlight.lines && state.isHoveringPoint) {\r\n // EventManager.releaseStealLock(line.parent);\r\n // EventManager.stealCursor();\r\n // return false;\r\n // }\r\n\r\n } else if (isMouseOverPoint(mousePos, bumpoutPoints.point1)) {\r\n // todo angle\r\n // if (workspace.getAllowBumpoutEdges() && !line.from.angleIsChanged && !line.to.angleIsChanged) {\r\n if (state.mouseDown) {\r\n self.movePointWithMouse(mousePos, bumpoutPoints.point1, bumpoutPoints.point2, bumpoutPoints.point4);\r\n }\r\n return state.mouseDown;\r\n\r\n } else if (isMouseOverPoint(mousePos, bumpoutPoints.point4)) {\r\n if (state.mouseDown) {\r\n self.movePointWithMouse(mousePos, bumpoutPoints.point4, bumpoutPoints.point3, bumpoutPoints.point1);\r\n }\r\n return state.mouseDown;\r\n\r\n } else if (state.isHoveredOverText) {\r\n EventManager.stealCursor();\r\n EventManager.setCursor((state.hoveredText.orientation === orientation.HORIZONTAL) ? \"text\" : \"text-vertical\", self);\r\n\r\n } else {\r\n EventManager.resetCursor(self);\r\n return false;\r\n }\r\n\r\n // if (workspace.getHoverShape() !== parent) {\r\n // state.isHoveringPoint = false;\r\n // }\r\n\r\n }\r\n\r\n function isMouseOverPoint(mousePos, point) {\r\n state.isHoveringPoint = !!point.isOverPointField();\r\n // console.log(\"point\", point.id);\r\n // console.log(\"state.hoveredPoint\", state.hoveredPoint.id);\r\n // console.log(\"mousePos\", state.isHoveringPoint);\r\n return state.isHoveringPoint || state.mouseDown && state.hoveredPoint && point.id === state.hoveredPoint.id;\r\n }\r\n\r\n function isMouseOverText(pointArea, mousePos) {\r\n return pnpolyArray(pointArea, mousePos);\r\n }\r\n\r\n function isMouseOverRect(mousePos) {\r\n let point1 = line.calculateRenderPosition(bumpoutPoints.point1),\r\n point2 = line.calculateRenderPosition(bumpoutPoints.point2),\r\n point3 = line.calculateRenderPosition(bumpoutPoints.point3),\r\n point4 = line.calculateRenderPosition(bumpoutPoints.point4);\r\n\r\n let pointArea = [\r\n [point1.x, point1.y],\r\n [point2.x, point2.y],\r\n [point3.x, point3.y],\r\n [point4.x, point4.y]\r\n ];\r\n\r\n return pnpolyArray(pointArea, mousePos);\r\n }\r\n\r\n function getTextPointsArea(x, y, mtext, textOrientation) {\r\n const lineDirection = line.getLineDirection();\r\n let pointsArray = [];\r\n if (textOrientation === orientation.HORIZONTAL) {\r\n pointsArray = [\r\n [x - Math.ceil10(mtext.width ,-2)/2 - 10, y - 15],\r\n [x + Math.ceil10(mtext.width ,-2)/2 + 10, y - 15],\r\n [x + Math.ceil10(mtext.width ,-2)/2 + 10, y + 10],\r\n [x - Math.ceil10(mtext.width ,-2)/2 - 10, y + 10],\r\n ]\r\n } else if (textOrientation === orientation.VERTICAL) {\r\n if (lineDirection.newDirection === \"south\") {\r\n pointsArray = [\r\n [x + 25, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x + 5, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x + 5, y + Math.ceil10(mtext.width ,-2)/2 - 5],\r\n [x + 25, y + Math.ceil10(mtext.width ,-2)/2 - 5],\r\n ];\r\n } else if (lineDirection.newDirection === \"north\") {\r\n pointsArray = [\r\n [x - 25, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x - 5, y - Math.ceil10(mtext.width ,-2)/2 - 10],\r\n [x - 5, y + Math.ceil10(mtext.width ,-2)/2 + 5],\r\n [x - 25, y + Math.ceil10(mtext.width ,-2)/2 + 5],\r\n ];\r\n }\r\n } else {\r\n // debugger;//eslint-disable-line\r\n }\r\n\r\n return pointsArray;\r\n }\r\n\r\n function onMouseUp(mousePos, e) {\r\n void mousePos;\r\n void e;\r\n if (state.mouseDown) {\r\n state.mouseDown = false;\r\n state.mouseDownPosition = null;\r\n }\r\n }\r\n\r\n function onMouseDown(mousePos, e) {\r\n void e;\r\n if (state.isHoveringPoint) {\r\n state.mouseDown = true;\r\n state.mouseDownPosition = mousePos;\r\n for (const point in bumpoutPoints) {\r\n if (bumpoutPoints[point].isOverPointField(mousePos)) {\r\n state.hoveredPoint = bumpoutPoints[point];\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n if (state.isHoveredOverText && !document.querySelector(\".line-input\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n\r\n const maxLength = Math.round(getMaxResizeWidth(line) * configGlobal.getMeasureMultiplier());\r\n const fontSize = getFontsize();\r\n const parent = line.getParent();\r\n const nextLine = parent.getNextLine(line);\r\n const minValue = -nextLine.getLineDistance();\r\n const inputPosition = { x: state.hoveredText.midPoint.x, y: state.hoveredText.midPoint.y };\r\n\r\n // Set orientation and position adjustments based on line direction\r\n let inputClass = \"line-input\";\r\n if (state.hoveredText.orientation === orientation.HORIZONTAL) {\r\n inputClass = \"line-input\";\r\n } else if (state.hoveredText.orientation === orientation.VERTICAL) {\r\n const lineDirection = line.getLineDirection();\r\n if (lineDirection.newDirection === \"south\") {\r\n inputClass = \"line-input line-input--vertical-rotated\";\r\n inputPosition.x -= fontSize;\r\n } else {\r\n inputClass = \"line-input line-input--vertical\";\r\n inputPosition.x += fontSize;\r\n }\r\n }\r\n\r\n const inputValue = self.bumpoutInOrOut() === \"in\"\r\n ? -Math.round(state.hoveredText.pointsDistance * configGlobal.getMeasureMultiplier())\r\n : Math.round(state.hoveredText.pointsDistance * configGlobal.getMeasureMultiplier());\r\n\r\n const hoveredText = state.hoveredText;\r\n // Create adjustable input\r\n const inputWrapper = createAdjustableInput({\r\n position: inputPosition,\r\n initialValue: inputValue.toString(),\r\n min: minValue,\r\n max: maxLength,\r\n orientation: inputClass.includes(\"vertical\") ? \"vertical\" : \"horizontal\",\r\n onChange: (value) => {\r\n if (sqftConfig.measureUnit === MEASURE_UNITS.Metric) {\r\n value = mmToInches(value);\r\n }\r\n let scaledValue = Math.round10(value / configGlobal.getMeasureMultiplier(), -2);\r\n self.resizeBumpoutPart(scaledValue, hoveredText);\r\n },\r\n onClose: () => {\r\n window.lineInputFocused = false;\r\n EventManager.removeEvent({ name: 'lineInput' });\r\n },\r\n step: 1,\r\n });\r\n\r\n // Append the input wrapper to the DOM\r\n document.querySelector(\".sqft-main-grid\").appendChild(inputWrapper);\r\n // Focus and select input on creation\r\n const input = inputWrapper.querySelector(\".line-input-field\");\r\n input.focus();\r\n\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function onMouseLeave() {\r\n state.isHoveringPoint = false;\r\n state.mouseDown = false;\r\n state.hoveredPoint = null;\r\n state.isHoveredOverText = false;\r\n state.hoveredText = {};\r\n }\r\n}\r\n","import config from \"../../../../store/sqftConfig\";\r\nimport COLOR_THEMES, {COLOR} from \"../../../../store/colorThemes\";\r\nimport {RESOURCE_ATTACHED_TO_TYPE} from \"../../../../../../constants\";\r\n\r\nexport default class Color {\r\n static getOutlineHoverStrokeStyle() {\r\n switch (config.highlight.type) {\r\n case 'edge':\r\n default:\r\n return COLOR_THEMES[config.activeTheme].active_transparent;\r\n case 'backsplash':\r\n return COLOR_THEMES[config.activeTheme].primary_hover;\r\n case 'wall':\r\n return 'rgba(0,0,0,0.5)';\r\n }\r\n }\r\n\r\n static getOutlineStrokeStyle(type) {\r\n switch (type) {\r\n case 'edge':\r\n return COLOR_THEMES[config.activeTheme].active;\r\n case 'backsplash':\r\n return COLOR_THEMES[config.activeTheme].primary;\r\n case 'wall':\r\n return '#000000';\r\n case RESOURCE_ATTACHED_TO_TYPE.end_cap:\r\n return COLOR.red;\r\n default:\r\n return COLOR_THEMES[config.activeTheme].active_transparent;\r\n }\r\n }\r\n}\r\n","class LineAttachmentsComposite {\r\n constructor() {\r\n this.children = [];\r\n }\r\n\r\n add(component) {\r\n this.children.push(component);\r\n }\r\n\r\n execute() {\r\n this.children.forEach(child => child.execute());\r\n }\r\n}\r\n\r\nexport default LineAttachmentsComposite\r\n","import {orientation} from \"../../../../helpers/sqftHelper\";\r\nimport point from \"./point\";\r\n\r\nexport const getAngle = (rotateAnglePart, angleValue) => {\r\n return (rotateAnglePart && rotateAnglePart.angleDirection === \"right\")\r\n ? (angleValue < 90) ? -angleValue : 90 - angleValue\r\n : (angleValue < 90) ? angleValue : angleValue - 90;\r\n};\r\n\r\nexport const getRotationCentrePoint = (rotateAnglePart, angleValue, bottomLine, basePoint, secondaryPoint) => {\r\n let {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n\r\n void baseOldX; void baseOldY; void baseOldX1; void baseOldY1; void rotated90_1; void rotated90_2;\r\n let rotationCenterPoint;\r\n let line;\r\n let newDirection;\r\n widthDiff = Math.round(widthDiff);\r\n\r\n if (rotateAnglePart && rotateAnglePart.shapeType === \"horseshoe\" || rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\") {\r\n if(angleValue < 90) {\r\n rotationCenterPoint = {\r\n x: basePointX2,\r\n y: basePointY2\r\n };\r\n } else {\r\n if(rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n line = secondaryPoint.getParent();\r\n newDirection = line.getLineDirection().newDirection;\r\n\r\n switch (line.getOrientation()) {\r\n case orientation.HORIZONTAL:{\r\n if (newDirection === \"east\") { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }}\r\n if (newDirection === \"west\") { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY }}\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n if (newDirection === \"north\") { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff }}\r\n if (newDirection === \"south\") { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }}\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else {\r\n line = basePoint.getParent();\r\n newDirection = line.getLineDirection().newDirection;\r\n\r\n switch (line.getOrientation()) {\r\n case orientation.HORIZONTAL:{\r\n if (newDirection === \"east\") { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }}\r\n if (newDirection === \"west\") { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY }}\r\n break;\r\n }\r\n case orientation.VERTICAL: {\r\n if (newDirection === \"north\") { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff }}\r\n if (newDirection === \"south\") { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }}\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (rotationCenterPoint === undefined) {\r\n var tempLinePointFrom = new point(line.from.x, line.from.y);\r\n var tempLinePointTo = new point(line.to.x, line.to.y);\r\n tempLinePointFrom.init(bottomLine);\r\n tempLinePointFrom.layout = 'white-circle';\r\n\r\n tempLinePointTo.init(bottomLine);\r\n tempLinePointTo.layout = 'white-circle';\r\n\r\n rotationCenterPoint = getRotationCentrePointByBottomLine(rotateAnglePart, angleValue, bottomLine);\r\n }\r\n\r\n return rotationCenterPoint\r\n};\r\n\r\nexport const getRotationCentrePointByBottomLine = (rotateAnglePart, angleValue, bottomLine) => {\r\n const {\r\n basePointX, basePointX2, basePointY, basePointY2, baseOldX, baseOldY, baseOldX1, baseOldY1, widthDiff, rotated90_1, rotated90_2\r\n } = rotateAnglePart.baseConfiguration;\r\n void baseOldX; void baseOldY; void baseOldX1; void baseOldY1; void rotated90_1; void rotated90_2;\r\n\r\n let rotationCenterPoint;\r\n if (rotateAnglePart && rotateAnglePart.shapeType === \"wideangle\") {\r\n rotationCenterPoint = {\r\n x: angleValue < 90 ? basePointX2 : (rotateAnglePart && rotateAnglePart.angleDirection === \"right\") ? basePointX - widthDiff : basePointX + widthDiff,\r\n y: angleValue < 90 ? basePointY2 : basePointY,\r\n };\r\n } else if (rotateAnglePart && rotateAnglePart.shapeType === \"horseshoe\") {\r\n if(angleValue < 90) {\r\n rotationCenterPoint = {\r\n x: basePointX2,\r\n y: basePointY2\r\n };\r\n } else {\r\n if(rotateAnglePart && rotateAnglePart.angleDirection === \"right\") {\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL:{ rotationCenterPoint = { x: basePointX, y: basePointY }; break;}\r\n case orientation.VERTICAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break;}\r\n case orientation.SOUTHEAST: { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY}; break;}\r\n case orientation.NORTHEAST: { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff }; break; }\r\n case orientation.SOUTHWEST: { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff}; break; }\r\n case orientation.NORTHWEST: { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY }; break; }\r\n default:\r\n break;\r\n }\r\n } else {\r\n switch (bottomLine.getOrientation()) {\r\n case orientation.HORIZONTAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break; }\r\n case orientation.VERTICAL: { rotationCenterPoint = { x: basePointX, y: basePointY }; break; }\r\n case orientation.SOUTHEAST: { rotationCenterPoint = { x: basePointX, y: basePointY + widthDiff}; break; }\r\n case orientation.NORTHEAST: { rotationCenterPoint = { x: basePointX + widthDiff, y: basePointY}; break; }\r\n case orientation.SOUTHWEST: { rotationCenterPoint = { x: basePointX - widthDiff, y: basePointY}; break; }\r\n case orientation.NORTHWEST: { rotationCenterPoint = { x: basePointX, y: basePointY - widthDiff}; break; }\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return rotationCenterPoint\r\n};\r\n","import workspace from \"../../workspace\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport store from \"../../../../../../../store\";\r\nimport SeamTool from \"./slabParts/seamTool\";\r\nimport {RENDER_TEMPLATES, SHAPE_PART_ID, SIDEBAR_SLAB_SEAM_BUTTONS} from \"../../../../../constants\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport ShapeMeasurementArrows from \"./shapeMeasurementArrows\";\r\nimport ShapeAbsolute from \"./shapeAbsolute\";\r\nimport workspaceControllers from \"../../../store/workspaceControllers\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass ShapeSlab {\r\n __shape;\r\n __seamTool;\r\n __intersectionPoints = [];\r\n __minLengthToIntersectionPoints;\r\n __absolutePos = null; //not used?\r\n shapeAbsolute = new ShapeAbsolute(this);\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n this.__seamTool = new SeamTool(shape);\r\n this.__measurementArrows = new ShapeMeasurementArrows(shape);\r\n }\r\n setSlabPos(pos) {\r\n this.__shape.slabPos = pos\r\n }\r\n setParentId(parentId) {\r\n this.__shape.shapeParent = parentId\r\n }\r\n setRotationDegreesSlab(rotationDegrees) {\r\n this.__shape.rotatedDegreesSlab = rotationDegrees\r\n }\r\n addSeamPieceVertical = (mousePos) => {\r\n this.__seamTool.addSeamPieceVertical(mousePos);\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n };\r\n addSeamPieceHorizontal = (mousePos) => {\r\n this.__seamTool.addSeamPieceHorizontal(mousePos);\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(false);\r\n };\r\n setAbsolutePos = (pos) => {\r\n //this.__absolutePos = pos;\r\n this.shapeAbsolute.setAbsolutePos(pos);\r\n };\r\n getAbsolutePosition = () => {\r\n //return this.__absolutePos;\r\n return this.shapeAbsolute.getAbsolutePosition();\r\n };\r\n getPosition = () => {\r\n let absolutePos = this.getAbsolutePosition();\r\n\r\n if (absolutePos) {\r\n return absolutePos\r\n }\r\n\r\n return this.__shape.slabPos;\r\n };\r\n setIntersectionsPoints = (points) => {\r\n this.__intersectionPoints = points;\r\n };\r\n setMinLengthToIntersectionPoints = (length) => {\r\n this.__minLengthToIntersectionPoints = length;\r\n };\r\n resetShapeSeams = () => {\r\n for (let i = this.__shape.shapePieces.length - 1; i >= 0; i--) {\r\n let shp = workspace.getShapeById(this.__shape.shapePieces[i]);\r\n if (shp.shapePieces) {\r\n shp.shapeSlab.resetShapeSeams();\r\n }\r\n workspace.removeShape(shp);\r\n }\r\n this.__shape.shapePieces.splice(0, this.__shape.shapePieces.length);\r\n };\r\n import = (data) => {\r\n this.shapeAbsolute.setAbsolutePos(data ? data.absolutePosition : null);\r\n }\r\n export = () => {\r\n return {\r\n absolutePosition: this.getAbsolutePosition()\r\n }\r\n }\r\n\r\n render = (ctx,\r\n staticOffset = null,\r\n strokeTemplate= RENDER_TEMPLATES.default,\r\n fillTemplate = RENDER_TEMPLATES.accordingToFeature\r\n ) => {\r\n if (workspace && workspace.getState().loading) return;\r\n if (this.__shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n RenderParts.drawDiagonalStripes(ctx, this.__shape, 2);\r\n } else {\r\n RenderParts.drawShapeBorders(ctx, staticOffset, strokeTemplate, fillTemplate, this.__shape);\r\n }\r\n const reduxState = store.getState()\r\n let isMeasurementVisibleInSlabMode = reduxState.sqftSlabState.isMeasurementVisibleInSlabMode;\r\n if (isMeasurementVisibleInSlabMode) {\r\n this.renderMeasurementArrows(ctx);\r\n }\r\n this.renderSeamLinesOnHover(ctx);\r\n this.renderSeamCutPoints(ctx);\r\n };\r\n\r\n renderSeamLinesOnHover = (ctx) => {\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n if (sqftMenuState.activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamVertical) {\r\n this.__seamTool.seamToolRender.renderSeamVerticalIntersection(ctx);\r\n } else if (sqftMenuState.activeButton === SIDEBAR_SLAB_SEAM_BUTTONS.addSeamHorizontal) {\r\n this.__seamTool.seamToolRender.renderSeamHorizontalIntersection(ctx);\r\n }\r\n }\r\n }\r\n\r\n renderSeamCutPoints = (ctx) => {\r\n const strokeStyle = '#e01333';\r\n for (const seamCutPoint of this.__shape.seamCutPoints) {\r\n const seamCutPointOnField = getPointField(seamCutPoint.x, seamCutPoint.y, this.__shape);\r\n RenderFigures.renderCircle(seamCutPointOnField, 4, 1, strokeStyle, strokeStyle);\r\n RenderFigures.renderCircle(seamCutPointOnField, 7, 1, strokeStyle);\r\n }\r\n if (this.__shape.seamCutPoints.length === 2) {\r\n const startPoint = this.__shape.seamCutPoints[0];\r\n const endPoint = this.__shape.seamCutPoints[1];\r\n const startPointOnField = getPointField(startPoint.x, startPoint.y, this.__shape);\r\n const endPointOnField = getPointField(endPoint.x, endPoint.y, this.__shape);\r\n ctx.moveTo(startPointOnField.x, startPointOnField.y);\r\n ctx.lineTo(endPointOnField.x, endPointOnField.y);\r\n ctx.strokeStyle = strokeStyle;\r\n ctx.stroke();\r\n }\r\n }\r\n\r\n renderLinesWithoutStroke = (ctx, staticOffset = null, sqftMode) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let lines = this.__shape.getLines();\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].staticOffset = staticOffset;\r\n lines[i].render(ctx, i > 0, sqftMode);\r\n lines[i].staticOffset = null;\r\n }\r\n };\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const snappedShapeGroup = this.shapeAbsolute.getSnappedShapeGroup();\r\n //We will render measurement arrows only if there are no shapes snaps to the current shape;\r\n if (snappedShapeGroup !== null) {\r\n const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (snappedShapes.length > 1) {\r\n return\r\n }\r\n }\r\n\r\n this.__measurementArrows.render(ctx);\r\n };\r\n}\r\n\r\nexport default ShapeSlab\r\n","import _ from 'lodash';\r\n\r\nimport {\r\n getPointField,\r\n} from \"../../../../../../helpers/sqftHelper\";\r\nimport sqftShapeManager from \"../../../../store/sqftShapeManager\";\r\nimport {SHAPE_PART_ID, SHAPE_ROTATE_DIRECTION} from \"../../../../../../constants\";\r\nimport SqftStore from \"../../../../store/sqftStore\";\r\nimport ShapeHelper from \"../../../../../../helpers/shapeHelper\";\r\nimport SeamToolRender from \"./seamToolRender\";\r\nimport SlabWorkspace from \"../../../slab/slabWorkspace\";\r\nimport SlabAdditionalShape from \"../../../slab/slabAdditionalShape\";\r\nimport {getHorizontalLineIntersectionPoints, getVerticalLineIntersectionPoints} from \"./seamToolHelper\";\r\nimport {createShapeFromPoints} from \"../../../../../../helpers/freeDrawHelper\";\r\n\r\nclass SeamTool {\r\n __shape;\r\n seamToolRender;\r\n\r\n constructor(_shape) {\r\n this.__shape = _shape;\r\n this.seamToolRender = new SeamToolRender(this);\r\n }\r\n\r\n getMaxLength = () => {\r\n //todo\r\n return 10\r\n }\r\n //todo\r\n addSeamPieceHorizontal = (mousePos) => {\r\n // const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n // const serverState = store.getState().serverState;\r\n // const pos = this.__shape.getPosition();\r\n //let intersectionPoint1 = {x: -serverState.windowWidth, y: mousePosOnFiled.y - pos.y};\r\n //let intersectionPoint2 = {x: serverState.windowWidth, y: mousePosOnFiled.y - pos.y};\r\n\r\n let absoluteLinePoint1Pos = this.seamToolRender.absoluteLinePoint1Pos;\r\n let toPoint = {...mousePos};\r\n if (absoluteLinePoint1Pos && absoluteLinePoint1Pos.y) {\r\n let pf = getPointField(absoluteLinePoint1Pos.x, absoluteLinePoint1Pos.y, this.__shape);\r\n toPoint.y = pf.y;\r\n }\r\n const lines = this.__shape.getLines();\r\n console.log(\"linesPoints\", lines.map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n\r\n const linesWithoutAnglePoints = this.__shape.createLinesWithoutAngle();\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getHorizontalLineIntersectionPoints(toPoint, this.__shape, linesWithoutAnglePoints);\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n let seamShapesPoints = this.splitShape(linesWithoutAnglePoints, intersectionPointAndLine1, intersectionPointAndLine2, 'vertical');\r\n console.log(\"intersectionPoint1\", intersectionPointAndLine1);\r\n console.log(\"intersectionPoint2\", intersectionPointAndLine2);\r\n\r\n console.log(\"linesWithoutAnglePoints\", linesWithoutAnglePoints.map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n console.log(\"piece1Points\", seamShapesPoints[0].map(point => { return {x: point.x, y: point.y}}));\r\n console.log(\"piece2Points\", seamShapesPoints[1].map(point => { return {x: point.x, y: point.y}}));\r\n this.createShapesFromSeamPointsAndSetSlabRotation(seamShapesPoints);\r\n\r\n this.__shape.deregisterEvents();\r\n //this.__shape.shapeSlab.setRotationDegreesSlab(0); //? not needed\r\n SqftStore.addSeamHistory(this.__shape);\r\n } else {\r\n console.log(\"getHorizontalLineIntersectionPoints error missing intersections\");\r\n }\r\n }\r\n\r\n createShapesFromSeamPointsAndSetSlabRotation = (seamShapesPoints) => {\r\n let parentShapeCenter = this.__shape.getCenter();\r\n\r\n for (let seamPoints of seamShapesPoints) {\r\n let isBacksplashPiece = [SHAPE_PART_ID.backsplashPiece, SHAPE_PART_ID.waterfallPiece].includes(this.__shape.partId);\r\n let partId = SHAPE_PART_ID.seamPiece;\r\n seamPoints = this.preparePointCords(seamPoints);\r\n let shapePieceId = createShapeFromPoints(seamPoints, partId, true);\r\n let shapePiece = sqftShapeManager.getShapeById(shapePieceId);\r\n shapePiece.featureId = this.__shape.featureId;\r\n shapePiece.featureName = this.__shape.featureName;\r\n shapePiece.colorSet = this.__shape.colorSet;\r\n shapePiece.deregisterPartEvents();\r\n let rotatedDiffPos = {x: 0, y: 0};\r\n\r\n if (isBacksplashPiece) {\r\n //add additional backsplash to slabWorkspace\r\n let parentSlabAdditionalShape = SlabWorkspace.slabAdditionalShapes.findOneByBacksplashShapeId(this.__shape.id);\r\n let newSlabAdditionalShape = new SlabAdditionalShape(parentSlabAdditionalShape.line, shapePieceId);\r\n SlabWorkspace.slabAdditionalShapes.addActiveBacksplash(newSlabAdditionalShape);\r\n }\r\n\r\n shapePiece.shapeSlab.setSlabPos(Object.assign({}, this.__shape.slabPos));\r\n if (this.__shape.rotatedDegreesSlab !== 0) {\r\n\r\n // this will rotate sqft and slab shape points to 0 it is required for correct rotation and drawing images in the right part\r\n let shapePieceCenterPointBeforeRotation = ShapeHelper.getCenterPoint(shapePiece.getLines().map(line => line.from));\r\n let reqRotatedDegreesToZero = 360 - this.__shape.rotatedDegreesSlab;\r\n //console.log(\"piece before rotate1\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.rotate(reqRotatedDegreesToZero, SHAPE_ROTATE_DIRECTION.left, true, parentShapeCenter);\r\n //console.log(\"piece rotate2\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.rotate(360, SHAPE_ROTATE_DIRECTION.left, false, parentShapeCenter);\r\n //console.log(\"piece rotate3\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n shapePiece.setRotationDegrees(0);\r\n shapePiece.shapeSlab.setRotationDegreesSlab(0);\r\n\r\n //rotate shape and move it to diff position (this is for correct displaying right part)\r\n shapePiece.rotate(this.__shape.rotatedDegreesSlab, SHAPE_ROTATE_DIRECTION.left, true);\r\n let shapePieceCenterPointAfterRotation = ShapeHelper.getCenterPoint(shapePiece.getLines().map(line => line.from));\r\n this.__shape.setIsPointsChanged(false); // prevent points change after rotation\r\n console.log(\"piece rotate4\", shapePiece.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n\r\n rotatedDiffPos = {\r\n x: shapePieceCenterPointBeforeRotation.x - shapePieceCenterPointAfterRotation.x,\r\n y: shapePieceCenterPointBeforeRotation.y - shapePieceCenterPointAfterRotation.y,\r\n }\r\n }\r\n let coreShapeAbsolutePosition = this.__shape.getSlabAbsolutePosition()\r\n let slabAbsolutePosition = coreShapeAbsolutePosition ? coreShapeAbsolutePosition : this.__shape.getSlabPosition();\r\n shapePiece.slabPos = {\r\n x: slabAbsolutePosition.x + rotatedDiffPos.x,\r\n y: slabAbsolutePosition.y + rotatedDiffPos.y,\r\n }\r\n\r\n shapePiece.shapeSlab.setParentId(this.__shape.id); //this is not needed maybe in future\r\n shapePiece.setPosition(Object.assign({}, this.__shape.getRegularPosition()));\r\n\r\n this.__shape.addShapePieceId(shapePiece.id);\r\n }\r\n };\r\n\r\n addSeamPieceVertical = (mousePos) => {\r\n // const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n // const serverState = store.getState().serverState;\r\n // const pos = this.__shape.getPosition();\r\n //\r\n // let intersectionPoint1 = {x: mousePosOnFiled.x - pos.x, y: -serverState.windowHeight};\r\n // let intersectionPoint2 = {x: mousePosOnFiled.x - pos.x, y: serverState.windowHeight};\r\n let absoluteLinePoint1Pos = this.seamToolRender.absoluteLinePoint1Pos;\r\n let toPoint = {...mousePos};\r\n if (absoluteLinePoint1Pos && absoluteLinePoint1Pos.x) {\r\n let pf = getPointField(absoluteLinePoint1Pos.x, absoluteLinePoint1Pos.y, this.__shape);\r\n toPoint.x = pf.x;\r\n }\r\n const linesWithoutAnglePoints = this.__shape.createLinesWithoutAngle();\r\n let [intersectionPointAndLine1, intersectionPointAndLine2] = getVerticalLineIntersectionPoints(toPoint, this.__shape, linesWithoutAnglePoints);\r\n\r\n if (intersectionPointAndLine1 && intersectionPointAndLine2) {\r\n let seamShapesPoints = this.splitShape(linesWithoutAnglePoints, intersectionPointAndLine1, intersectionPointAndLine2, 'horizontal');\r\n // console.log(\"intersectionPoint1\", intersectionPointAndLine1);\r\n // console.log(\"intersectionPoint2\", intersectionPointAndLine2);\r\n // console.log(\"shapePoints\", this.__shape.getLines().map((line) => { return {x: line.from.x, y: line.from.y}}));\r\n // console.log(\"piece1Points\", seamShapesPoints[0].map(point => { return {x: point.x, y: point.y}}));\r\n // console.log(\"piece2Points\", seamShapesPoints[1].map(point => { return {x: point.x, y: point.y}}));\r\n this.createShapesFromSeamPointsAndSetSlabRotation(seamShapesPoints);\r\n\r\n this.__shape.deregisterEvents();\r\n //this.__shape.shapeSlab.setRotationDegreesSlab(0); //? not needed\r\n SqftStore.addSeamHistory(this.__shape);\r\n } else {\r\n console.log(\"getVerticalLineIntersectionPoints error missing intersections\");\r\n }\r\n };\r\n\r\n preparePointCords = (seamPoints) => {\r\n return seamPoints.map((seamPoint) => {\r\n seamPoint.x = Math.round10(seamPoint.x, -1);\r\n seamPoint.y = Math.round10(seamPoint.y, -1);\r\n return seamPoint\r\n })\r\n };\r\n\r\n /**\r\n * @param {[]} lines\r\n * @param {*} intersectionPointAndLine1\r\n * @param {*} intersectionPointAndLine2\r\n * @param {string} splitOnlyOrientation\r\n */\r\n splitShape = (lines, intersectionPointAndLine1, intersectionPointAndLine2, splitOnlyOrientation) => {\r\n let piece1Points = [];\r\n let piece2Points = [];\r\n let intersectionNumber = 1;\r\n let lastPoint;\r\n let intersectionPoint1 = intersectionPointAndLine1.intersectionCords\r\n let intersectionPoint2 = intersectionPointAndLine2.intersectionCords\r\n\r\n lines.forEach((line) => {\r\n let intersectionCords = null;\r\n void splitOnlyOrientation;\r\n\r\n // version 1.0 search cords again\r\n //if (line.getLineDirection().orientation === splitOnlyOrientation || !splitOnlyOrientation) {\r\n // intersectionCords = getIntersectCords(\r\n // Math.round10(line.from.x, -1), Math.round10(line.from.y, -1),\r\n // Math.round10(line.to.x, -1), Math.round10(line.from.y, -1),\r\n // Math.round10(intersectionPoint1.x, -1), Math.round10(intersectionPoint1.y, -1),\r\n // Math.round10(intersectionPoint2.x, -1), Math.round10(intersectionPoint2.y,-1),\r\n // false\r\n // )\r\n //}\r\n\r\n // version 2.0 use existing intersection cords\r\n if ((line === intersectionPointAndLine1.line || line === intersectionPointAndLine2.line)) {\r\n intersectionCords = line === intersectionPointAndLine1.line\r\n ? intersectionPointAndLine1.intersectionCords\r\n : intersectionPointAndLine2.intersectionCords\r\n }\r\n\r\n if (intersectionCords) {\r\n let ip = (Math.round10(intersectionCords.x, -1) === Math.round10(intersectionPoint1.x, -1)\r\n && Math.round10(intersectionCords.y, -1) === Math.round10(intersectionPoint1.y, -1))\r\n ? intersectionPoint1 : intersectionPoint2\r\n if (piece2Points.length === 1) { // triangle shape\r\n piece2Points.push(line.from);\r\n }\r\n const nextLine = line.getParent().getNextLine(line, undefined, true);\r\n if (piece1Points.length === 1\r\n && (nextLine.id === intersectionPointAndLine1.line.id || nextLine.id === intersectionPointAndLine2.line.id)\r\n ) {\r\n piece1Points.push(line.to); // triangle shape\r\n }\r\n piece1Points.push(ip);\r\n piece2Points.push(ip);\r\n } else {\r\n if (intersectionNumber % 2 !== 0) {\r\n lastPoint = piece1Points[piece1Points.length - 1];\r\n if (!lastPoint || !lastPoint.id || lastPoint.id !== line.from.id) {\r\n piece1Points.push(line.from);\r\n }\r\n if (piece1Points[0] !== line.to) {\r\n piece1Points.push(line.to);\r\n }\r\n }\r\n if (intersectionNumber % 2 === 0) {\r\n lastPoint = piece2Points[piece2Points.length - 1];\r\n if (!lastPoint || !lastPoint.id || lastPoint.id !== line.from.id) {\r\n piece2Points.push(line.from);\r\n }\r\n if (piece2Points[0] !== line.to) {\r\n piece2Points.push(line.to);\r\n }\r\n }\r\n }\r\n\r\n if (intersectionCords) {\r\n intersectionNumber += 1;\r\n }\r\n //console.log(\"intersectionCords\", intersectionCords);\r\n });\r\n //console.log(\"piece1Points before filter\", piece1Points.map(point => { return {x: point.x, y: point.y}}));\r\n //console.log(\"piece2Points before filter\", piece2Points.map(point => { return {x: point.x, y: point.y}}));\r\n\r\n function filterEqualAndPointsOnTheSameLine(pointsArray) {\r\n return pointsArray.filter((point, index, array) => {\r\n let prev = array[index - 1];\r\n let next = array[index + 1];\r\n if (!prev) { // include first point\r\n prev = array[array.length - 1];\r\n }\r\n if (!next) {\r\n next = array[0]; // next point for the last point in array is the first point in array\r\n }\r\n const isEqual = _.isEqual({x: point.x, y: point.y}, {x: prev.x, y: prev.y});\r\n const isOnTheSameLine = point.x === prev.x && point.x === next.x || point.y === prev.y && point.y === next.y\r\n return !isEqual && !isOnTheSameLine\r\n })\r\n }\r\n\r\n return [filterEqualAndPointsOnTheSameLine(piece1Points), filterEqualAndPointsOnTheSameLine(piece2Points)]\r\n }\r\n}\r\n\r\nexport default SeamTool\r\n","import store from \"../../../../../../../../store\";\r\nimport sqftEventManager from \"../../../../store/sqftEventManager\";\r\nimport {\r\n getMidPoint,\r\n getMousePositionOnField,\r\n getPointDistance,\r\n getPointField\r\n} from \"../../../../../../helpers/sqftHelper\";\r\nimport COLOR_THEMES from \"../../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../../store/sqftConfig\";\r\nimport NumberText from \"../../../workspace/text/numberText\";\r\nimport workspace from \"../../../workspace\";\r\nimport {\r\n getClosestIntersectionPoints,\r\n getIntersectionPointsAndLines,\r\n} from \"./seamToolHelper\";\r\nimport ShapeHelper from \"../../../../../../helpers/shapeHelper\";\r\nimport RenderFigures from \"../../../../helpers/renderFigures\";\r\nimport config from \"../../../../store/sqftConfig\";\r\n\r\nclass SeamToolRender {\r\n __measurement1 = new NumberText(0, {}, {}, workspace, Function(), false);\r\n __measurement2 = new NumberText(0, {}, {}, workspace, Function(), false);\r\n seamTool;\r\n absoluteLinePoint1Pos = {};\r\n absoluteLinePoint2Pos = {};\r\n\r\n constructor(seamTool) {\r\n this.seamTool = seamTool;\r\n }\r\n\r\n renderSeamHorizontalIntersection = (ctx) => {\r\n const serverState = store.getState().serverState;\r\n const mousePos = sqftEventManager.getMousePos();\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const pos = this.seamTool.__shape.getPosition();\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n this.absoluteLinePoint1Pos = null; //reset minLength for correct calculations without stacking\r\n this.absoluteLinePoint2Pos = null; //reset minLength for correct calculations without stacking\r\n\r\n // vertical line\r\n let verticalLinePoint1 = {x: -serverState.windowWidth, y: mousePosOnShape.y};\r\n let verticalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n let distancesToLines = ShapeHelper.getDistancesToPoint(mousePos);\r\n let snappingPossibilitiesToLines = ShapeHelper.getSnappingPossibilitiesToLines(distancesToLines);\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n //console.log(\"distancesToLines\", distancesToLines);\r\n //console.log(\"getSnappingPossibilitiesToLines\", snappingPossibilitiesToLines);\r\n this.setAbsolutePosFromSnapPossibilities(snappingPossibilitiesToLines, verticalLinePoint1, verticalLinePoint2);\r\n verticalLinePoint1 = this.absoluteLinePoint1Pos;\r\n verticalLinePoint2 = this.absoluteLinePoint2Pos;\r\n }\r\n this.renderSeamDashedLine(ctx, verticalLinePoint1, verticalLinePoint2);\r\n\r\n // horizontal line\r\n let horizontalLinePoint1 = {x: mousePosOnShape.x , y: -serverState.windowHeight};\r\n let horizontalLinePoint2 = {x: mousePosOnShape.x, y: serverState.windowHeight};\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n mousePosOnShape.y = this.absoluteLinePoint1Pos.y\r\n }\r\n this.renderSeamArrowLine(ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape);\r\n }\r\n\r\n renderSeamVerticalIntersection = (ctx) => {\r\n const serverState = store.getState().serverState;\r\n const mousePos = sqftEventManager.getMousePos();\r\n const mousePosOnFiled = getMousePositionOnField(mousePos.x, mousePos.y);\r\n const pos = this.seamTool.__shape.getPosition();\r\n const mousePosOnShape = {x: mousePosOnFiled.x - pos.x, y: mousePosOnFiled.y - pos.y};\r\n this.absoluteLinePoint1Pos = null; //reset minLength for correct calculations without stacking\r\n this.absoluteLinePoint2Pos = null; //reset minLength for correct calculations without stacking\r\n\r\n // vertical line\r\n let verticalLinePoint1 = {x: mousePosOnShape.x, y: -serverState.windowHeight};\r\n let verticalLinePoint2 = {x: mousePosOnShape.x, y: serverState.windowHeight};\r\n let distancesToLines = ShapeHelper.getDistancesToPoint(mousePos);\r\n let snappingPossibilitiesToLines = ShapeHelper.getSnappingPossibilitiesToLines(distancesToLines);\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n //console.log(\"distancesToLines\", distancesToLines);\r\n //console.log(\"getSnappingPossibilitiesToLines\", snappingPossibilitiesToLines);\r\n this.setAbsolutePosFromSnapPossibilities(snappingPossibilitiesToLines, verticalLinePoint1, verticalLinePoint2);\r\n verticalLinePoint1 = this.absoluteLinePoint1Pos;\r\n verticalLinePoint2 = this.absoluteLinePoint2Pos;\r\n }\r\n this.renderSeamDashedLine(ctx, verticalLinePoint1, verticalLinePoint2);\r\n\r\n // horizontal line\r\n let horizontalLinePoint1 = {x: -serverState.windowWidth , y: mousePosOnShape.y};\r\n let horizontalLinePoint2 = {x: serverState.windowWidth, y: mousePosOnShape.y};\r\n if (snappingPossibilitiesToLines.length > 0) {\r\n mousePosOnShape.x = this.absoluteLinePoint1Pos.x\r\n }\r\n this.renderSeamArrowLine(ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape);\r\n };\r\n\r\n setAbsolutePosFromSnapPossibilities = (snapPossibilities, verticalLinePoint1, verticalLinePoint2) => {\r\n if (snapPossibilities.length > 0) {\r\n let scale = sqftConfig.scale;\r\n let absoluteLinePoint1Pos = {...verticalLinePoint1};\r\n let absoluteLinePoint2Pos = {...verticalLinePoint2};\r\n snapPossibilities.forEach((snap) => {\r\n switch (snap.orientation) {\r\n case \"horizontal\":\r\n absoluteLinePoint1Pos.y -= snap.diff / scale\r\n absoluteLinePoint2Pos.y -= snap.diff / scale\r\n break;\r\n case \"vertical\":\r\n absoluteLinePoint1Pos.x -= snap.diff / scale\r\n absoluteLinePoint2Pos.x -= snap.diff / scale\r\n break;\r\n }\r\n this.absoluteLinePoint1Pos = absoluteLinePoint1Pos;\r\n this.absoluteLinePoint2Pos = absoluteLinePoint2Pos;\r\n })\r\n }\r\n }\r\n\r\n renderSeamDashedLine = (ctx, verticalLinePoint1, verticalLinePoint2) => {\r\n let [intersection1, intersection2] = getIntersectionPointsAndLines(\r\n this.seamTool.__shape.getLines(), verticalLinePoint1, verticalLinePoint2\r\n );\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n\r\n if (intersection1 && intersection2) {\r\n let intersectionYPoint1 = intersection1.intersectionCords;\r\n let intersectionYPoint2 = intersection2.intersectionCords;\r\n let intersectionYPoint1PointField = getPointField(intersectionYPoint1.x, intersectionYPoint1.y, this.seamTool.__shape);\r\n let intersectionYPoint2PointField = getPointField(intersectionYPoint2.x, intersectionYPoint2.y, this.seamTool.__shape);\r\n ctx.beginPath();\r\n ctx.setLineDash([10, 10]);\r\n ctx.moveTo(intersectionYPoint1PointField.x , intersectionYPoint1PointField.y);\r\n ctx.lineTo(intersectionYPoint2PointField.x, intersectionYPoint2PointField.y);\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.setLineDash([0]);\r\n }\r\n }\r\n\r\n renderSeamArrowLine = (ctx, horizontalLinePoint1, horizontalLinePoint2, mousePos, mousePosOnShape) => {\r\n let mousePosOnShapePointField = getPointField(mousePosOnShape.x, mousePosOnShape.y, this.seamTool.__shape);\r\n let [intersectionXPointAndLine1, intersectionXPointAndLine2] = getClosestIntersectionPoints(\r\n this.seamTool.__shape.getLines(), horizontalLinePoint1, horizontalLinePoint2, mousePosOnShape\r\n );\r\n\r\n if (intersectionXPointAndLine1 && intersectionXPointAndLine2) {\r\n let intersectionXPoint1 = intersectionXPointAndLine1.intersectionCords;\r\n let intersectionXPoint2 = intersectionXPointAndLine2.intersectionCords;\r\n let intersectionXPoint1PointField = getPointField(intersectionXPoint1.x, intersectionXPoint1.y, this.seamTool.__shape);\r\n let intersectionXPoint2PointField = getPointField(intersectionXPoint2.x, intersectionXPoint2.y, this.seamTool.__shape);\r\n ctx.beginPath();\r\n RenderFigures.drawArrow(ctx,\r\n intersectionXPoint1PointField.x,\r\n intersectionXPoint1PointField.y,\r\n mousePosOnShapePointField.x,\r\n mousePosOnShapePointField.y\r\n );\r\n let measurement1Midpoint = getMidPoint(mousePosOnShapePointField, intersectionXPoint1PointField);\r\n let measurement1Distance = getPointDistance(intersectionXPoint1, mousePosOnShape);\r\n RenderFigures.drawArrow(ctx,\r\n mousePosOnShapePointField.x,\r\n mousePosOnShapePointField.y,\r\n intersectionXPoint2PointField.x,\r\n intersectionXPoint2PointField.y\r\n );\r\n let measurement2Midpoint = getMidPoint(mousePosOnShapePointField, intersectionXPoint2PointField);\r\n let measurement2Distance = getPointDistance(intersectionXPoint2, mousePosOnShape);\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n this.renderMeasurements(ctx, measurement1Midpoint, measurement1Distance, measurement2Midpoint, measurement2Distance)\r\n }\r\n }\r\n\r\n renderMeasurements = (ctx, measurement1Midpoint, measurement1Distance, measurement2Midpoint, measurement2Distance) => {\r\n let measurement1Pos = getMousePositionOnField(measurement1Midpoint.x, measurement1Midpoint.y);\r\n let measurement2Pos = getMousePositionOnField(measurement2Midpoint.x, measurement2Midpoint.y);\r\n\r\n this.__measurement1.pos.x = measurement1Pos.x;\r\n this.__measurement1.pos.y = measurement1Pos.y;\r\n this.__measurement1.value = Math.round(config.getMeasureMultiplier() * measurement1Distance);\r\n\r\n this.__measurement2.pos.x = measurement2Pos.x;\r\n this.__measurement2.pos.y = measurement2Pos.y;\r\n this.__measurement2.value = Math.round(config.getMeasureMultiplier() * measurement2Distance);\r\n\r\n this.__measurement1.render(ctx);\r\n this.__measurement2.render(ctx);\r\n }\r\n}\r\n\r\nexport default SeamToolRender\r\n","import workspace from \"../../workspace\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nclass ShapeMeasurementArrows {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data\r\n }\r\n\r\n render = (ctx) => {\r\n if (workspace && workspace.getState().loading) return;\r\n //this.renderDimensionsInsideShape(ctx);\r\n if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10)\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n}\r\n\r\nexport default ShapeMeasurementArrows\r\n","import {RENDER_TEMPLATES} from \"../../../../../constants\";\r\nimport workspace from \"../../workspace\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport store from \"../../../../../../../store\";\r\n\r\nexport default class ShapeEditable {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n render = (ctx, template= RENDER_TEMPLATES.default) => {\r\n if (workspace && workspace.getState().loading) return;\r\n let lines = this.__shape.getLines();\r\n\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape ) {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active_hover;\r\n } else {\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].active;\r\n }\r\n ctx.fillStyle = COLOR_THEMES[sqftConfig.activeTheme].active_disabled;\r\n switch (template) {\r\n case RENDER_TEMPLATES.linesOnly:\r\n ctx.lineWidth = 0;\r\n ctx.closePath();\r\n break;\r\n case RENDER_TEMPLATES.default:\r\n default:\r\n //ctx.fill();\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n break;\r\n }\r\n\r\n if (this.__shape.isHovering() && workspace.getHoveredSqftShape() === this.__shape ) {\r\n let sqftMenuState = store.getState().sqftMenuState;\r\n void sqftMenuState;\r\n }\r\n };\r\n\r\n // renderLinesBetweenPoints = (ctx) => {\r\n // ctx.beginPath();\r\n // ctx.lineWidth = lineWidth;\r\n // ctx.strokeStyle = color;\r\n // drawLines(ctx);\r\n //\r\n // ctx.stroke();\r\n // };\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport RenderParts from \"../../../helpers/renderParts\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\n\r\nclass ShapeSpacer {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n import = (data) => {\r\n void data\r\n }\r\n\r\n export = () => {\r\n return {\r\n }\r\n }\r\n\r\n render = (ctx, staticOffset = null) => {\r\n if (workspace && workspace.getState().loading) return;\r\n\r\n this.renderBorders(ctx, staticOffset);\r\n if (!this.__shape.shapeAbsolute.getAbsolutePosition() && !this.__shape.shapeAbsolute.getSnappedWithShape()) {\r\n //this.renderCrownMolding(ctx);\r\n this.renderDimensionsOutsideShape(ctx);\r\n }\r\n }\r\n\r\n renderBorders = (ctx,\r\n staticOffset = null,\r\n ) => {\r\n RenderParts.drawSpacerBorders(ctx, staticOffset, this.__shape);\r\n };\r\n\r\n renderDimensionsOutsideShape = (ctx) => {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.strokeStyle = COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n this.renderMeasurementArrows(ctx);\r\n this.renderMeasurementLength(ctx);\r\n ctx.closePath();\r\n ctx.restore();\r\n }\r\n\r\n renderMeasurementArrows = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n void ctx; void points;\r\n RenderFigures.drawArrowsAroundPoints(ctx, points, 10)\r\n }\r\n\r\n renderMeasurementLength = (ctx) => {\r\n const points = this.__shape.getPointsPointField();\r\n RenderParts.drawMeasurementAroundPoints(ctx, points);\r\n }\r\n\r\n}\r\n\r\nexport default ShapeSpacer\r\n","import SqftStore from \"../../../store/sqftStore\";\r\nimport sqftSlabManager from \"../../../store/sqftSlabManager\";\r\nimport sqftShapeIntersectionsManager from \"../../../store/sqftShapeIntersectionsManager\";\r\n\r\nexport default class ShapeIntersections {\r\n __shape;\r\n overlappedWithShapeIds = [];\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n setOverlappedWithShapeIds = (ids) => {\r\n this.overlappedWithShapeIds = ids\r\n }\r\n\r\n addOverlappedWithShape = (id) => {\r\n if (!this.overlappedWithShapeIds.includes(id)) {\r\n this.overlappedWithShapeIds.push(id);\r\n }\r\n }\r\n\r\n removeOverlappedWithShape = (id) => {\r\n if (this.overlappedWithShapeIds.includes(id)) {\r\n this.overlappedWithShapeIds = this.overlappedWithShapeIds.filter(overlappedId => id !== overlappedId);\r\n }\r\n }\r\n\r\n handleSlabPlaceholderIntersections = () => {\r\n if (SqftStore.isSlabMode()) {\r\n const slabPlaceHolderShapes = sqftSlabManager.getSlabPlaceHolderShapes();\r\n if (slabPlaceHolderShapes.length) {\r\n\r\n // if (this.__shape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n // this.onSlabPlaceHolderMove();\r\n // } else {\r\n // this.onCountertopShapeMove(slabPlaceHolderShapes);\r\n // }\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n sqftShapeIntersectionsManager.updateSlabPlaceholderFeatureId();\r\n\r\n const errorCallback = () => {\r\n this.__shape.shapeMemory.restoreShapePosition();\r\n this.__shape.resetMouseDown();\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n }\r\n\r\n sqftShapeIntersectionsManager.showSlabPlaceHolderErrorMessage(slabPlaceHolderShapes, errorCallback);\r\n }\r\n }\r\n }\r\n\r\n // onSlabPlaceHolderMove = () => {\r\n // const counterTopShapes = sqftShapeManager.getCounterTopShapes();\r\n // let overlapsWithIds = [];\r\n // this.setOverlappedWithShapeIds([]);\r\n //\r\n // for (const counterTopShape of counterTopShapes) {\r\n // const shapeIntersections = ShapeHelper.getTwoShapesIntersections(this.__shape, counterTopShape);\r\n // const shapeIds = Object.keys(shapeIntersections);\r\n // if (shapeIds.length) {\r\n // this.__shape.setFeatureId(_.clone(counterTopShape.featureId))\r\n // overlapsWithIds.push(shapeIds[0]);\r\n // }\r\n // //console.log(\"shapeIntersections\", shapeIntersections);\r\n // }\r\n // this.setOverlappedWithShapeIds(overlapsWithIds);\r\n // }\r\n //\r\n // onCountertopShapeMove = (slabPlaceHolderShapes) => {\r\n // for (const slabPlaceHolderShape of slabPlaceHolderShapes) {\r\n // slabPlaceHolderShape.shapeIntersections.removeOverlappedWithShape(this.__shape.id);\r\n // const shapeIntersections = ShapeHelper.getTwoShapesIntersections(slabPlaceHolderShape, this.__shape);\r\n // //console.log(\"shapeIntersections\", shapeIntersections);\r\n // const shapeIds = Object.keys(shapeIntersections);\r\n // if (shapeIds.length) {\r\n // slabPlaceHolderShape.setFeatureId(_.clone(this.__shape.featureId));\r\n // slabPlaceHolderShape.shapeIntersections.addOverlappedWithShape(+shapeIds[0]);\r\n // }\r\n // }\r\n // }\r\n\r\n\r\n}\r\n","import _ from 'lodash';\r\n\r\nexport default class ShapeMemory {\r\n __shape;\r\n memory = {\r\n pos: {x: 0, y: 0},\r\n slabPos: {x: 0, y: 0},\r\n absolutePos: {x: 0, y: 0}\r\n };\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n rememberShapePosition = () => {\r\n this.memory = {\r\n pos: _.clone(this.__shape.pos),\r\n slabPos: _.clone(this.__shape.slabPos),\r\n shapeSlabAbsolutePos: _.clone(this.__shape.shapeSlab.getAbsolutePosition()),\r\n shapeAbsolutePos: _.clone(this.__shape.shapeAbsolute.getAbsolutePosition())\r\n }\r\n }\r\n\r\n restoreShapePosition = () => {\r\n this.__shape.pos = _.clone(this.memory.pos)\r\n this.__shape.slabPos = _.clone(this.memory.slabPos)\r\n this.__shape.shapeSlab.setAbsolutePos( _.clone(this.memory.shapeSlabAbsolutePos));\r\n this.__shape.shapeAbsolute.setAbsolutePos( _.clone(this.memory.shapeAbsolutePos));\r\n }\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport {isDisabledInPopupShouldBeHidden} from \"../../../../../constants\";\r\nimport {getPointField, isDisabledInPopupWithParents} from \"../../../../../helpers/sqftHelper\";\r\nimport SqftStore from \"../../../store/sqftStore\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport sqftConfig from \"../../../store/sqftConfig\";\r\nimport sqftEventManager from \"../../../store/sqftEventManager\";\r\nimport BlinkingHighlight from \"../../../helpers/commonParts/blink\";\r\n\r\nexport default class ShapeRender {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n this.blink = new BlinkingHighlight;\r\n }\r\n\r\n render(ctx) {\r\n // if (sqftStore && sqftStore.getState().loading) return;\r\n if (workspace && workspace.getState().loading) {\r\n return\r\n }\r\n if (isDisabledInPopupShouldBeHidden() && isDisabledInPopupWithParents(this)) {\r\n return\r\n }\r\n\r\n const isShowSlabTool = SqftStore.isSlabMode();\r\n const shapeState = this.__shape.getState();\r\n this.renderDevMode(ctx);\r\n\r\n if (isShowSlabTool) {\r\n return this.__shape.shapeSlab.render(ctx);\r\n } else if (shapeState.isPointsMovable) {\r\n return this.__shape.shapeEditable.render(ctx);\r\n } else if (shapeState.isRotatable) {\r\n return this.__shape.shapeRotatable.render(ctx);\r\n } else if (this.__shape.shapeParams !== undefined && this.__shape.shapeParams.shapeCabinet && !this.__shape.shapeParams.isSpacer) {\r\n return this.__shape.shapeCabinet.render(ctx);\r\n } else if (this.__shape.shapeParams !== undefined && this.__shape.shapeParams.isSpacer && this.__shape.shapeSpacer) {\r\n return this.__shape.shapeSpacer.render(ctx);\r\n }\r\n\r\n this.renderRegularShape(ctx);\r\n }\r\n\r\n renderDevMode = (ctx) => {\r\n if (config.isDevMode()) {\r\n // render center pos\r\n ctx.save();\r\n ctx.beginPath();\r\n let pf = getPointField(this.__shape.pos.x, this.__shape.pos.y);\r\n ctx.arc(pf.x, pf.y, 5, 0, 2 * Math.PI);\r\n ctx.stroke();\r\n ctx.closePath();\r\n\r\n ctx.beginPath();\r\n let shapeCenter = this.__shape.getCenter();\r\n const pos = getPointField(shapeCenter.x, shapeCenter.y, this.__shape);\r\n ctx.arc(pos.x, pos.y, 12, 0, 2 * Math.PI);\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.restore();\r\n\r\n // render shape group\r\n if (this.__shape.getSnappedShapeGroup) {\r\n const renderText = this.__shape.getSnappedShapeGroup() + \".group\";\r\n const mText = ctx.measureText(renderText);\r\n ctx.wrapText(renderText, pos.x, pos.y, mText, 16);\r\n }\r\n\r\n // render shape center\r\n // ctx.beginPath();\r\n // let position = this.__shape.getOffset();\r\n // ctx.arc(position.x, position.y, 50, 0, 2 * Math.PI);\r\n //\r\n // ctx.stroke();\r\n // ctx.closePath();\r\n }\r\n }\r\n\r\n renderRegularShape = (ctx) => {\r\n // const scale = sqftConfig.scale;\r\n // const canvas = sqftStore.getCanvas();\r\n const lines = this.__shape.getLines();\r\n const shapeDesign = this.__shape.getDesign();\r\n const shapeColorSet = this.__shape.getColorset();\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].render(ctx, i > 0);\r\n }\r\n if (this.__shape.isHovering() && workspace.getHoverShape() === this.__shape) {\r\n ctx.strokeStyle = shapeColorSet ? shapeColorSet.primary_border : COLOR_THEMES[sqftConfig.activeTheme].primary_hover;\r\n } else {\r\n ctx.strokeStyle = shapeColorSet ? shapeColorSet.primary_border : COLOR_THEMES[sqftConfig.activeTheme].primary;\r\n }\r\n ctx.lineWidth = 2; // Math.ceil(scale);\r\n ctx.closePath();\r\n ctx.stroke();\r\n\r\n if (this.__shape.isHoveringOnlyShape()\r\n && workspace.getHoverShape()\r\n && !sqftConfig.highlight.rotateAngle\r\n && ( sqftEventManager.getCursor().indexOf(\"move\") >= 0\r\n || sqftEventManager.getCursor().indexOf(\"rotate-left\") >= 0\r\n || sqftEventManager.getCursor().indexOf(\"delete\") >= 0\r\n )\r\n ) {\r\n if (sqftEventManager.getCursor().indexOf(\"delete\") >= 0\r\n && !workspace.textBoxManager.isBoxActive()\r\n && !this.__shape.getHoverLabel()\r\n ) {\r\n const hoverLine = this.__shape.getHoverSegment(),\r\n hoverPoint = this.__shape.getHoverPointOnClick();\r\n\r\n // if ((hoverLine && hoverLine.getAttachedItems()) || (hoverPoint && (hoverPoint.getAngle() || hoverPoint.getArcLength()))) {\r\n if (hoverLine || hoverPoint) {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.fillColor;\r\n } else {\r\n ctx.fillStyle = shapeDesign.redHoverShapeColor;\r\n }\r\n } else {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.hoverShapeColor;\r\n }\r\n } else {\r\n if (this.blink.isHighlightedLightOn) {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary_hover : shapeDesign.fillColor;\r\n } else {\r\n ctx.fillStyle = shapeColorSet ? shapeColorSet.primary : shapeDesign.fillColor;\r\n }\r\n }\r\n ctx.fill();\r\n ctx.restore();\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i].renderLineField(ctx); // renderLineField should be called after render method and ctx.fill()\r\n }\r\n\r\n // red highlight bumpout\r\n lines.forEach((line) => {\r\n if (line.isWithBumpout()) {\r\n if (sqftEventManager.getCursor().indexOf(\"delete\") >= 0 && line.bumpoutOverlay.isHoveringRect() && !workspace.textBoxManager.isBoxActive()) {\r\n line.bumpoutOverlay.drawBumpoutRect(ctx);\r\n }\r\n }\r\n });\r\n\r\n //green highlight selected part\r\n if (sqftConfig.highlight.rotateAngle) {\r\n // todo fix bumpout rotation and remove this\r\n if (!this.__shape.isWithBumpout() && !this.__shape.isWithBumpout() && !this.__shape.isPointsMoved && this.__shape.rotatedDegrees === 0) {\r\n /////////////////////////////////////////\r\n for (const rotateAnglePart of this.__shape.rotateAngleParts) {\r\n if (this.__shape.isAngleRotatedPartsWithCorner(rotateAnglePart)) {\r\n continue;\r\n }\r\n if (rotateAnglePart.isActive || rotateAnglePart.isHovered) {\r\n this.__shape.renderAnglePartActive(rotateAnglePart, ctx);\r\n }\r\n if (rotateAnglePart.isPulsing) { //green highlight selected part intro\r\n this.__shape.renderAnglePartActive(rotateAnglePart, ctx);\r\n setTimeout(() => {\r\n rotateAnglePart.isPulsing = false;\r\n }, 1000);\r\n }\r\n }\r\n }\r\n }\r\n\r\n //render counter?\r\n // var vertices = [];\r\n // for (var i = 0; i < lines.length; i++) {\r\n // var s = lines[i];\r\n // vertices.push([s.from.x, s.from.y]);\r\n // }\r\n //var newTriangles = earcut([vertices]);\r\n\r\n if (sqftConfig.workspace.debug) {\r\n ctx.beginPath();\r\n // for (var n = 0; n < newTriangles.length; n+=3) {\r\n // var lines = new triangle(newTriangles[n], newTriangles[n+1], newTriangles[n+2]);\r\n // for (let i = 0; i < lines.length; i++) {\r\n // var l = lines[i];\r\n // l.init(this.__shape, true); //initialize as temporary line\r\n // l.render(ctx, false); //render temp line\r\n // }\r\n // }\r\n ctx.lineWidth = 1;\r\n ctx.closePath();\r\n ctx.strokeStyle = \"#FF0000\";\r\n ctx.stroke();\r\n }\r\n //return newTriangles;\r\n };\r\n}\r\n","import {className} from \"../../misc/utils\";\r\n\r\nexport class Exception {\r\n message = '';\r\n\r\n /**\r\n *\r\n * @param message {string}\r\n */\r\n constructor(message) {\r\n this.message = message;\r\n }\r\n\r\n static NotImplemented(message) {\r\n console.error(message || \"Not implemented.\");\r\n }\r\n\r\n static NotImplementedBaseClass(instance) {\r\n console.error(`Not implemented in base class ${className(instance)}`);\r\n }\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n conditions.push({\r\n propName: \"CabinetStyle\",\r\n propValue: vanityParent.vanityCabinet && vanityParent.vanityCabinet.activeFeature\r\n && vanityParent.vanityCabinet.activeFeature.metaData[\"CabinetStyle\"]\r\n ? vanityParent.vanityCabinet.activeFeature.metaData[\"CabinetStyle\"]\r\n : \"No handles\" // if no cabinet style - hide handles\r\n });\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Vanity Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanitie\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName === \"Vanitie\") {\r\n dbFeature.groupName = \"Vanity\"\r\n }\r\n if (!dbFeature.metaData[\"MatchingFeature\"]) {\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n }\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"VanitySize\"]) && dbFeature.metaData[\"VanitySize\"][0]) {\r\n dbFeature.metaData[\"VanityWidth\"] = +dbFeature.metaData[\"VanitySize\"][0];\r\n if (dbFeature.metaData[\"VanityWidth\"] === 72) {\r\n dbFeature.metaData[\"VanityWidth\"] = 64;\r\n }\r\n } else if (dbFeature.metaData[\"VanitySize\"]) {\r\n console.log(\"dbFeature.metaData[\\\"VanitySize\\\"] should be an array!\", dbFeature.metaData[\"VanitySize\"]);\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const vanityParent = this.getParent();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n this.toggleLayerPositions();\r\n [\"drawerPull\", \"vanityLegs\", \"vanityMiddle\"].forEach(name => {\r\n if (vanityParent && vanityParent[name]) {\r\n vanityParent[name].disabled = this.disabled || !vanityParent[name].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n });\r\n if (this.activeFeature && this.activeFeature.metaData[\"MatchingFeature\"] && this.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)) {\r\n [\"sink\", \"countertop\", \"vanityPTrap\", \"faucet\"].forEach(name => {\r\n if (vanityParent && vanityParent[name]) {\r\n vanityParent[name].disabled = this.disabled || !vanityParent[name].canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, updateSink = true) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n super.handleClick(ignoreLocked);\r\n if (updateSink) {\r\n updateSinkWithNewFeature(this);\r\n }\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize(this));\r\n // }\r\n\r\n // disabledClick() {\r\n // this.getParent().toggleVanityParts(this.disabled);\r\n // }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) && (vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet)\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize(this));\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as && parentObject.layerPosition === SIDE_POSITIONS[0]) {\r\n return false\r\n }\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n this.relatedGroupNames = [\"Background\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Background\":\r\n switch (true) {\r\n case (!loadFeature || (dbFeature.displayName && dbFeature.displayName.includes(\"Background - BG\"))):\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n this.windowNeededLayouts = [1];\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const windowParent = layout.parts[WindowParent.id];\r\n const showerParent = layout.parts[Shower.id];\r\n\r\n // const windowBody = windowParent.windowBody;\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type)) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n\r\n if (showerParent && showerParent.showerSize() && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Background.BackgroundBG;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.canBeDisabled = IS_LIXIL_SERVERS; // request by Lixil\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {getSkuWithoutDot} from \"../../../lookNavigation/lookFunctions2\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (dbFeature.metaData[\"ActualDisplayedName\"] && dbFeature.metaData[\"ActualDisplayedName\"][0]) {\r\n dbFeature.metaData[\"ActualDisplayedName\"] = getSkuWithoutDot(dbFeature.metaData[\"ActualDisplayedName\"][0]);\r\n } else {\r\n dbFeature.metaData[\"ActualDisplayedName\"] = getSkuWithoutDot(dbFeature.sharedFeatureName);\r\n }\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex() {}\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTubFixture extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub_fixture';\r\n this.visible = true;\r\n this.partName = 'Walk In Tub Fixture';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub_fixture\";\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerComboParent = this.getParent();\r\n if (showerComboParent.walkInTub && showerComboParent.walkInTub.activeFeature\r\n && !showerComboParent.walkInTub.disabled) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: showerComboParent.walkInTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions, LOOK_ROOM_TYPES, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class ReplacementTubFixture extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub_fixture';\r\n this.visible = true;\r\n this.partName = 'Replacement Tub Fixture';\r\n this.dbName = 'Replacement tub Fixture';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub_fixture\";\r\n this.bottomTubId = \"replacement_tub\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"].includes(\"0\")) {\r\n dbFeature.metaData[\"ShowerSize\"] = [METADATA.ALL];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n const showerTubComboParent = this.getParent().getParent();\r\n const showerParent = showerTubComboParent.layout.parts[\"Shower\"];\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n if (Array.isArray(this.metaData[\"MountType\"]) && this.metaData[\"MountType\"].includes(\"S\")\r\n && ((showerParent.shower_head_type === ShowerHeadTypes.shower_arm && showerParent.showerArm && !showerParent.showerArm.disabled)\r\n || (showerParent.shower_head_type === ShowerHeadTypes.shower_head_bundle && showerParent.showerHeadBundle && !showerParent.showerHeadBundle.disabled))) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n }\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerArm) {\r\n showerParent.showerArm.disabled = true;\r\n }\r\n if (showerParent.showerHead) {\r\n showerParent.showerHead.disabled = true;\r\n }\r\n if (showerParent.showerHeadBundle) {\r\n showerParent.showerHeadBundle.disabled = true;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerTubComboParent = this.getParent();\r\n const showerParent = showerTubComboParent.layout.parts[\"Shower\"];\r\n if (!showerTubComboParent.showerTubComboIsActive || showerTubComboParent.bottomTub === \"walk_in_tub\") { // they don't have repl tub fixture\r\n return false\r\n }\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_fixture && this.activeFeature\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const showerComboParent = this.getParent();\r\n // if (showerComboParent.replacementTub && showerComboParent.replacementTub.activeFeature\r\n // && !showerComboParent.replacementTub.disabled) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: showerComboParent.replacementTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n // });\r\n // } else if (showerComboParent.walkInTub && showerComboParent.walkInTub.activeFeature\r\n // && !showerComboParent.walkInTub.disabled) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: showerComboParent.walkInTub.activeFeature.metaData[\"ActualDisplayedName\"]\r\n // });\r\n // }\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA, LOOK_ROOM_TYPES, ShowerHeadTypes, createParentPositions, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n// import {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n// import store from \"../../../../../store\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n if (dbFeature.isFromAsRoom) {\r\n // Eugene Balan: добавил для Shower Fixture в метадату MountType значения для бандлов\r\n // S - прячем эти группы Shower Arm, Shower Head (т.к. они уже включены в набор)\r\n // T - показываем только если включен Replacement Tub + тоже что и S + прячем Tub Spout\r\n // 0 - можем показывать группы Shower Arm, Shower Head, Tub Spout (если включен Replacement Tub)\r\n // 0 - Hand Shower Kit должен показываться вместе с shower fixture у которых MountType: 0\r\n // if (Array.isArray(dbFeature.metaData[\"MountType\"]) && !dbFeature.metaData[\"MountType\"].includes(\"T\")) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.ALL)\r\n // }\r\n if (!Array.isArray(dbFeature.metaData[\"MountType\"])) {\r\n console.log(\"alarm, alarm , this shower fixture has no MountType metadata!\", dbFeature);\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"].includes(\"0\")) {\r\n dbFeature.metaData[\"ShowerSize\"] = [METADATA.ALL];\r\n }\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n if (Array.isArray(this.metaData[\"MountType\"]) && this.metaData[\"MountType\"].includes(\"S\")\r\n && ((showerParent.shower_head_type === ShowerHeadTypes.shower_arm && showerParent.showerArm && !showerParent.showerArm.disabled)\r\n || (showerParent.shower_head_type === ShowerHeadTypes.shower_head_bundle && showerParent.showerHeadBundle && !showerParent.showerHeadBundle.disabled))) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n }\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n const showerTubComboParent = showerParent.layout.parts[\"Shower Tub Combo\"];\r\n if (showerTubComboParent && showerTubComboParent.showerTubComboIsActive\r\n && showerTubComboParent.bottomTub !== \"walk_in_tub\" && !IS_LIXIL_SERVERS) { // they don't have repl tub fixture\r\n return true\r\n }\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_fixture && this.activeFeature\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerArm) {\r\n showerParent.showerArm.disabled = true;\r\n }\r\n if (showerParent.showerHead) {\r\n showerParent.showerHead.disabled = true;\r\n }\r\n if (showerParent.showerHeadBundle) {\r\n showerParent.showerHeadBundle.disabled = true;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as) {\r\n const showerComboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: (showerComboParent && showerParent.showerTubComboIsActive()\r\n && showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) ? \"T\" : \"S\"\r\n })\r\n return conditions\r\n }\r\n return super.getArrayOfConditions()\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Walls from \"../../parts/walls\";\r\n\r\nexport default class ShowerScreen extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_screen';\r\n this.partName = 'Shower Screen';\r\n this.translateId = \"visualizer.bathroom.shower.shower_screen\";\r\n this.layerPriority = 12;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick() {\r\n const wallParent = this.getParent().getParent().layout.parts[Walls.id];\r\n if (wallParent && wallParent.splitWall) {\r\n wallParent.splitWall.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n const wallParent = layout.parts[Walls.id];\r\n if (wallParent && wallParent.splitWall && wallParent.splitWall.activeFeature && !wallParent.splitWall.disabled) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class LeftWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.dbName = 'Left Wall';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"left_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new LeftWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class RightWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.dbName = 'Right Wall';\r\n this.translateId = \"visualizer.bathroom.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"right_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new RightWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class CenterWall extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.CenterWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class BackWall extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'back_wall';\r\n this.partName = 'Back Wall';\r\n this.translateId = \"visualizer.bathroom.walls.back_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\n\r\nexport default class Ceiling extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class FrontWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.dbName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.hasAdditionalParts = true;\r\n this.additionalPartPartId = \"front_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = dbFeature.groupName === this.dbName ? 1 : 2;\r\n return super.load_(dbFeature, new FrontWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n}\r\n","import WallCommon from \"./wallCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class SplitWall extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'split_wall';\r\n this.partName = 'Split Wall';\r\n this.translateId = \"visualizer.bathroom.walls.split_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n // this.hasAdditionalParts = true;\r\n // this.additionalPartPartId = \"split_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerScreen) {\r\n showerParent.showerScreen.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n // setLayers(layout) { // we can't enable it since nothing will be selected on the very first load\r\n // const wallParent = layout.parts[Shower.id];\r\n // if (wallParent && wallParent.showerScreen && !wallParent.showerScreen.disabled) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\nimport {createPageToLoadArray} from \"../../constants\";\r\n\r\nexport default class LeftWallSplitter extends WallCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall_splitter';\r\n this.partName = 'Left Wall Splitter';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall_splitter\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n // this.hasAdditionalParts = true;\r\n // this.additionalPartPartId = \"split_wall_crop\";\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n}\r\n\r\n","import WallCommon from \"./wallCommon\";\r\n\r\nexport default class CeilingPanels extends WallCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_panels';\r\n this.partName = 'Ceiling Panels';\r\n this.translateId = \"visualizer.bathroom.ceiling_panels\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.partName = 'Shower Glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.layerPriority = 12;\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../../../bvComponent/core/assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\"in\")[0];\r\n return {\r\n \"ShowerSize\": featureNameSplitted.length > 1 ? [featureNameSplitted.substr(featureNameSplitted.length - 2)] : ['60'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize(this);\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (counterTopSize === '72in' && layout.type === 1) {\r\n return feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n }\r\n return true\r\n })\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize(this);\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex() {}\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Walls from \"../../parts/walls\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {createPageToLoadArray, LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nexport default class ShowerWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_wall';\r\n this.partName = 'Shower Wall';\r\n this.translateId = \"visualizer.bathroom.shower.shower_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n if (isChild) {\r\n createPageToLoadArray(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n // if (wallParent && wallParent.splitWallType) {\r\n // conditions.push({\r\n // propName: \"SplitWallType\",\r\n // propValue: wallParent.splitWallType\r\n // })\r\n // }\r\n const wallParent = showerParent.layout.parts[Walls.id];\r\n if (getCurrentRoomType(showerParent.layout) === LOOK_ROOM_TYPES.as && wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerWallAccent && shower.showerWallAccent.canBeDisabled\r\n && !shower.showerWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerWallAccent.disabled = true;\r\n shower.showerWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.ShowerWallAccent;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n// import {ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LayoutType, LOOK_ROOM_TYPES, METADATA, ShowerComboTubType} from \"../../constants\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {};\r\n this.oneLayerPosition = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.previouslySelectedFeatures[layoutName] = {};\r\n })\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n dbFeature.lixilProductSubCategory = \"Shower Doors\"; // because some of them are missing this subcategory!\r\n return super.load(dbFeature);\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props);\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n const showerDoorHandle = showerParent.showerDoorHandle;\r\n if (showerDoorHandle && showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled || !showerDoorHandle.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n const accParent = showerParent.layout.parts[ShowerAccessories.id]\r\n if (!this.disabled && accParent && accParent.showerRod && !accParent.showerRod.disabled\r\n && accParent.showerRod) {\r\n accParent.showerRod.disabled = true\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n const accParent = shower.layout.parts[ShowerAccessories.id]\r\n if (accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n // setLayers(layout) {\r\n // const showerParent = this.getParent();\r\n // // const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n // // if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // if (showerParent.showerTubComboIsActive()) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n // if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.replacement_tub\r\n // && comboParent.replacementTub && comboParent.replacementTub.activeFeature && comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n // conditions.push({\r\n // propName: \"ShowerPanHeight\",\r\n // propValue: comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]\r\n // })\r\n if (showerParent.showerTubComboIsActive()) {\r\n if (comboParent && comboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n if (comboParent.replacementTub && comboParent.replacementTub.activeFeature\r\n && comboParent.replacementTub.activeFeature.metaData\r\n && comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: comboParent.replacementTub.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n } else {\r\n conditions.push({\r\n propName: \"NOT_EXISTING_METADATA\",\r\n propValue: \"whatever\"\r\n })\r\n }\r\n } else if (showerParent && showerParent.showerPanCombo\r\n && showerParent.showerPanCombo.activeFeature && showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 3, \"1\") && removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return true\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerSeat extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerSeat + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class SoapDish extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new SoapDish(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.SoapDish + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n}\r\n","import {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'corner_caddie';\r\n this.partName = 'Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerCaddie + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import {createParentPositions} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerCaddie + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import {METADATA, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n [SIDE_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] !== SIDE_POSITIONS[1] ? 1 : 2;\r\n return super.load_(dbFeature, new GrabBar(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize !== \"60\" && parent.activeFeature) {\r\n parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n }\r\n // parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n checkCenterGrabWall(clickedPosition) { // L or R and C can't be together\r\n if (!clickedPosition) {\r\n return\r\n }\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (clickedPosition === \"C\") {\r\n if (position !== \"C\") {\r\n this.layerPositions[position] = null;\r\n }\r\n } else if (position === \"C\") {\r\n this.layerPositions[position] = null;\r\n }\r\n })\r\n }\r\n\r\n checkCurrentPositions(position) {\r\n const feature = this.layerPositions[position];\r\n if (!feature) {\r\n return\r\n }\r\n const nameSplitted = feature.dbFeature.sharedFeatureName.split(\" \");\r\n const size = nameSplitted[nameSplitted.length - 1] ? nameSplitted[nameSplitted.length - 1].replace(\"in\", \"\") : \"\";\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!size || !this.layerPositions[newPosition]) {\r\n return\r\n }\r\n if (this.layerPositions[newPosition]) {\r\n const nameSplitted2 = this.layerPositions[newPosition].dbFeature.sharedFeatureName.split(\" \");\r\n const size2 = nameSplitted2[nameSplitted2.length - 1] ? nameSplitted2[nameSplitted2.length - 1].replace(\"in\", \"\") : \"\";\r\n if (!size || (+size2 === 12 && +size === 12)) { // last chance to keep other side layer\r\n return;\r\n }\r\n }\r\n this.layerPositions[newPosition] = null;\r\n }\r\n\r\n showLayerPositionsModal(forFeature) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent.showerSize() !== \"60\") {\r\n return false\r\n }\r\n return super.showLayerPositionsModal(forFeature)\r\n }\r\n\r\n}\r\n","import {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerShelf extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = \"corner_shelf\";\r\n this.partName = \"Corner Shelf\";\r\n this.translateId = \"visualizer.bathroom.accessories.corner_shelf\";\r\n this.dbName = \"Small Corner Shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Part\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"Part\"][0]\r\n : \"\"\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerShelf(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n\r\n // if (this.layerPositions) {\r\n // const windowParent = this.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n // Object.keys(this.layerPositions).forEach(key => {\r\n // if (!key.includes(\"3\") && this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.src = '';\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerShelf1 + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerPod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pod';\r\n this.partName = 'Shower Pod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_pod\";\r\n this.dbName = document.kvConfig.userId === 157639 ? 'Storage Pods' : 'Storage Pod'; // window.location.href.includes(\"american_standard_website\")\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (document.kvConfig.userId !== 157639 && dbFeature.groupName !== 'Storage Pod') {\r\n return false\r\n }\r\n return super.load_(dbFeature, new ShowerPod());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"Window Kit\") {\r\n const showerPodParent = this.getParent();\r\n const accessoriesParent = showerPodParent.getParent();\r\n accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n showerPodParent.disabled = false;\r\n this.handleClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const accessoriesParent = this.getParent();\r\n const windowParent = accessoriesParent.layout.parts.Window;\r\n if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n windowParent.windowKits.disabled = true;\r\n }\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // const zIndex = zIndexes.Accessories.ShowerPod;\r\n // if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = zIndex;\r\n // }\r\n // if (zIndexes && this.placeholderFeature) {\r\n // this.placeholderFeature.layer.zIndex = zIndex;\r\n // }\r\n // }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {createParentPositions, SIDE_POSITIONS} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class Seats extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_seats';\r\n this.partName = 'Seats';\r\n this.dbName = 'Seats';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_seats\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n this.conflictingPositions = [\"valve_trim\"];\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Seats(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n //\r\n // setZIndex(zIndexes) {\r\n // if (zIndexes) {\r\n // Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n // if (this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.zIndex = zIndexes.Accessories.Seats + keyIndex*10;\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerRod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_rod';\r\n this.partName = 'Shower Rod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_rod\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent()\r\n const showerParent = parent.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Window Kit\") {\r\n // const showerRodParent = this.getParent();\r\n // const accessoriesParent = showerRodParent.getParent();\r\n // accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n // showerRodParent.disabled = false;\r\n // this.handleClick();\r\n // }\r\n // }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (!this.disabled && showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n }\r\n\r\n // setZIndex(zIndexes) {\r\n // const zIndex = zIndexes.Accessories.ShowerRod;\r\n // if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = zIndex;\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ToiletBrush extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet_brush';\r\n this.partName = 'Toilet Brush';\r\n this.translateId = \"visualizer.bathroom.accessories.toilet_brush\";\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Toilet} from \"../../parts/toilet\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\n\r\nexport default class PaperHolder extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'paper_holder';\r\n this.partName = 'Paper Holder';\r\n this.translateId = \"visualizer.bathroom.accessories.paper_holder\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const toiletParent = this.getParent().layout.parts[Toilet.id];\r\n if (toiletParent && toiletParent.toilet && toiletParent.toilet.disabled) {\r\n toiletParent.toilet.disabled = this.disabled || !toiletParent.toilet.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return true\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\")\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions, LOOK_ROOM_TYPES, SIDE_POSITIONS} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class RobeHook extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'robe_hook';\r\n this.partName = 'Robe Hook';\r\n this.translateId = \"visualizer.bathroom.accessories.robe_hook\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return true\r\n }\r\n return removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelBar extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_bar';\r\n this.partName = 'Towel Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_bar\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_ROOM_TYPES, SIDE_POSITIONS} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class TowelRing extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_ring';\r\n this.partName = 'Towel Ring';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_ring\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.lixilProductSubCategory = \"Towel Rings\"; // hardcode to match other towel rings // LX-846\r\n return super.load(dbFeature);\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\", SIDE_POSITIONS[1])\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nexport default class GlassHolder extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'glass_holder';\r\n this.partName = 'Glass Holder';\r\n this.translateId = \"visualizer.bathroom.shower.glass_holder\";\r\n this.layerPriority = 13;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return IS_PRODUCT_JOURNEY\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TowelRack extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'towel_rack';\r\n this.partName = 'Towel Rack';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_rack\";\r\n this.canBeDisabled = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Wainscoting extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wainscoting';\r\n this.partName = 'Wainscoting';\r\n this.translateId = \"visualizer.bathroom.accessories.wainscoting\";\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Towel extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelRing extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_ring\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const towelRing = this.getParent().towelRing;\r\n if (towelRing && towelRing.layerPositions && towelRing.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: towelRing.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelBar extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_bar\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const towelBar = this.getParent().towelBar;\r\n if (towelBar && towelBar.layerPositions && towelBar.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: towelBar.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class TowelTowelHook extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"towel_towel_hook\";\r\n this.partName = \"Towel\";\r\n this.translateId = \"visualizer.bathroom.accessories.towel\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const robeHook = this.getParent().robeHook;\r\n if (robeHook && robeHook.layerPositions && robeHook.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: robeHook.activeFeature.getSplittedSku()\r\n });\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport {IS_LIXIL_SERVERS} from \"../../../../../config\";\r\n\r\nconst hardcodedSkus = [\"6438AM-FCOL.218\", \"6434AM-FCOL.218\", \"A8007D-FCO.020\", \"A8007D-FCO.020\", \"A8004L-CO.020\", \"4836SM-COL.218\"];\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n\r\n // Our Shower Doors only fit openings: 56\"-60\" (1422-1524mm) The skus below are too wide and would not be compatible.\r\n // If a user selects one of these shower bases please hide/do not display a shower door with it.\r\n if (IS_LIXIL_SERVERS && Array.isArray(dbFeature.metaData[\"ShowerPanHeight\"]) && hardcodedSkus.some(sku => dbFeature.sharedFeatureName === sku)) {\r\n dbFeature.metaData[\"ShowerPanHeight\"] = [\"99\"]; // do not show shower door for these sku's\r\n }\r\n dbFeature.metaData[\"CustomShowerPanSide\"] = (dbFeature.sharedFeatureName || \"\").includes(\"LHO\")\r\n ? \"LHO\"\r\n : (dbFeature.sharedFeatureName || \"\").includes(\"RHO\") ? \"RHO\" : \"\";\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Side\"][0] !== \"0\"\r\n ? dbFeature.metaData[\"Side\"][0]\r\n : (dbFeature.metaData[\"CustomShowerPanSide\"] === \"RHO\") ? \"R\" : SIDE_POSITIONS[0];\r\n dbFeature.metaData[\"CustomNameWithoutShowerPanSide\"] = (dbFeature.sharedFeatureName || \"\")\r\n .replace(/LHO/g, \"\").replace(/RHO/g, \"\");\r\n\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n disabledClick() {\r\n const shower = this.getParent();\r\n shower.showerFloorIsActive = !this.disabled;\r\n if (shower.showerDoor) {\r\n shower.showerDoor.disabled = this.disabled;\r\n shower.showerDoor.disabledClick(); // accessories and shower door handle\r\n }\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n return this.getParent().showerTubComboIsActive()\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n /**\r\n * @param navItems {[navItemInterface]}\r\n * @param forFeature {featureInterface}\r\n */\r\n filterNavigationItems = (navItems, forFeature = null) => {\r\n let finalNavItems = [];\r\n const forMeta = forFeature && forFeature.metaData && forFeature.metaData[\"CustomShowerPanSide\"] ? forFeature.metaData[\"CustomShowerPanSide\"] : \"LHO\";\r\n const leftNavItems = navItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"CustomShowerPanSide\"] || (navItem.part.metaData[\"CustomShowerPanSide\"] === forMeta)) {\r\n finalNavItems.push(navItem);\r\n return false\r\n }\r\n return true\r\n })\r\n leftNavItems.forEach(navItem => {\r\n if (!finalNavItems.some(existingNavItem => {\r\n if (IS_LIXIL_SERVERS) {\r\n return existingNavItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] &&\r\n navItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] === existingNavItem.part.metaData[\"CustomNameWithoutShowerPanSide\"]\r\n }\r\n return existingNavItem.part.metaData[\"MatchingFeature\"] && navItem.part.metaData[\"MatchingFeature\"] &&\r\n navItem.part.metaData[\"MatchingFeature\"][0] === existingNavItem.part.metaData[\"MatchingFeature\"][0]\r\n })) {\r\n finalNavItems.push(navItem)\r\n }\r\n })\r\n return finalNavItems\r\n }\r\n\r\n // /**\r\n // * @param neededPosition {string} LHO|RHO\r\n // * @param lookActiveFeature {featureInterface}\r\n // */\r\n // getMatchingOutletFeature = (neededPosition = \"\", lookActiveFeature) => {\r\n // if (IS_LIXIL_SERVERS) {\r\n // const nameWithoutPos = lookActiveFeature.metaData[\"CustomNameWithoutShowerPanSide\"];\r\n // const allNavItems = this.navigationSubItemsSimple();\r\n // return allNavItems.find(navItem => {\r\n // return (navItem.part.dbFeature.metaData[\"CustomShowerPanSide\"] === neededPosition)\r\n // && (navItem.part.metaData[\"CustomNameWithoutShowerPanSide\"] === nameWithoutPos)\r\n // })\r\n // }\r\n // const nameWithoutPos = lookActiveFeature.metaData[\"MatchingFeature\"];\r\n // const allNavItems = this.navigationSubItemsSimple();\r\n // return allNavItems.find(navItem => {\r\n // return (navItem.part.dbFeature.metaData[\"CustomShowerPanSide\"] === neededPosition)\r\n // && (navItem.part.metaData[\"MatchingFeature\"][0] === nameWithoutPos)\r\n // })\r\n // }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // return this.navigationSubItemsWithSides(filters, searchText);\r\n // }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // const showerParent = this.getParent();\r\n // conditions.push({\r\n // propName: \"ShowerSize\",\r\n // propValue: showerParent.showerSize()\r\n // });\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint() {\r\n const shower = this.getParent();\r\n return !shower.showerTubComboIsActive()\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled || !showerDoor.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n // const showerParent = this.getParent();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n //\r\n // let compatibleValue = \"None\";\r\n // if (showerComboParent.showerTubComboIsActive) {\r\n // if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n // compatibleValue = \"BathtubLiner\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n // compatibleValue = \"ReplacementTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // compatibleValue = \"WalkInTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n // compatibleValue = \"JettedTub\"\r\n // }\r\n // }\r\n //\r\n // const conditions = [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // },{\r\n // propName: 'CompatibleTub',\r\n // propValue: compatibleValue\r\n // }];\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Large) {\r\n // let showerDimensions = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerDimensions()\r\n // : showerParent.showerDimensions();\r\n //\r\n // showerDimensions = getMetadataByDimensions(showerDimensions);\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize(this);\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // conditions.push({\r\n // propName: \"EX L\",\r\n // propValue: showerDimensions\r\n // })\r\n // }\r\n //\r\n // if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n // const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n // const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // // console.log('doorCondition', doorCondition);\r\n // if (doorCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerDoor',\r\n // propValue: doorCondition\r\n // })\r\n // }\r\n // if (handleCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerHandle',\r\n // propValue: handleCondition\r\n // })\r\n // }\r\n // }\r\n //\r\n // if (!showerParent.showerTubComboIsActive()) {\r\n // if (showerParent.showerFloorIsActive) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: \"Threshold\"\r\n // })\r\n // } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n // })\r\n // }\r\n // }\r\n // // console.log('conditions', conditions);\r\n // return conditions\r\n // }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 11;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallCap;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const parent = this.getParent();\r\n // const layout = parent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n // if (layoutAbr === LayoutAbbreviation.Small){\r\n // const activeShower = parent.showerTubComboIsActive()\r\n // ? layout.parts[ShowerTubCombo.id]\r\n // : layout.parts[Shower.id];\r\n // const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n // return [{\r\n // propName: 'Shower',\r\n // propValue: 'Custom'\r\n // }, {\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }];\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n if (showerParent && showerParent.showerDoor && showerParent.showerDoor.activeFeature) {\r\n if (showerParent.showerDoor.activeFeature.metaData[\"ShowerPanHeight\"]) {\r\n conditions.push({\r\n propName: \"ShowerPanHeight\",\r\n propValue: showerParent.showerDoor.activeFeature.metaData[\"ShowerPanHeight\"]\r\n })\r\n }\r\n if (showerParent.showerDoor.activeFeature.metaData[\"DoorHeight\"]) {\r\n conditions.push({\r\n propName: \"DoorHeight\",\r\n propValue: showerParent.showerDoor.activeFeature.metaData[\"DoorHeight\"]\r\n })\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_OVERLAYS, ShowerBodyType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'Shower Floor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_OVERLAYS, ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerSize = this.getParent().showerSize();\r\n // let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize(this);\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // return [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }, {\r\n // propName: 'EX L',\r\n // propValue: showerDimensions\r\n // }];\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Threshold;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {createParentPositions, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport ShowerCommon from \"../showerNew/showerCommon\";\r\nimport store from \"../../../../../store\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerHead extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.partName = 'Shower Head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n // this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n Layout4: {},\r\n };\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props)\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerArm = this.getParent().showerArm;\r\n if (showerArm) {\r\n showerArm.disabled = this.disabled || !showerArm.canBeEnabled(); // true or check if it can be enabled\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm && this.activeFeature\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (this.hideLayerCondition()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.layerPositions && this.layerPositions && this.activeFeature) {\r\n Object.keys(showerParent.showerArm.layerPositions).forEach(position => {\r\n if (!this.layerPositions[position] && showerParent.showerArm.layerPositions[position]) {\r\n this.layerPositions[position] = this.getMatchingPositionFeature(position)\r\n } else if (this.layerPositions[position] && !showerParent.showerArm.layerPositions[position]) {\r\n const {wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n this.layerPositions[position] = null\r\n }\r\n }\r\n })\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.activeFeature && showerParent.showerArm.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: showerParent.showerArm.activeFeature.metaData[\"MountType\"][0]\r\n })\r\n }\r\n if (showerParent.showerArm && showerParent.showerArm.activeFeature && showerParent.showerArm.activeFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.showerArm.activeFeature.metaData[\"MountPosition\"][0]\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"../showerNew/showerCommon\";\r\nimport {createParentPositions, METADATA, ShowerHeadTypes} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\n\r\nexport default class ShowerArm extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_arm';\r\n this.partName = 'Shower Arm';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_arm\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 8;\r\n // this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n navigationSubItems(...props) {\r\n if (IS_QKB_UI) {\r\n return this.navigationSubItemsWithSides(...props)\r\n }\r\n return super.navigationSubItems(...props);\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] || (Array.isArray(dbFeature.metaData[\"Side\"]) && dbFeature.metaData[\"Side\"][0] === \"0\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature)\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n checkForSameMountPosition(newFeature) {\r\n if (newFeature.metaData[\"MountPosition\"] || newFeature.metaData[\"MountType\"]) {\r\n let conditions = [];\r\n if (newFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: newFeature.metaData[\"MountPosition\"]\r\n });\r\n }\r\n if (newFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: newFeature.metaData[\"MountType\"]\r\n });\r\n }\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if ((position !== newFeature.metaData.layerPosition) && this.layerPositions[position]\r\n && !this.layerPositions[position].matchesMetaForArrayOfConditions(conditions)) {\r\n this.layerPositions[position] = null; // erase current position\r\n }\r\n })\r\n }\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerHead = this.getParent().showerHead;\r\n if (showerHead) {\r\n showerHead.disabled = this.disabled || !showerHead.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm && this.activeFeature\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (this.hideLayerCondition()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (showerParent.showerHead && showerParent.showerHead.layerPositions && this.layerPositions && this.activeFeature) {\r\n Object.keys(showerParent.showerHead.layerPositions).forEach(position => {\r\n if (!this.layerPositions[position] && showerParent.showerHead.layerPositions[position]) {\r\n this.layerPositions[position] = this.getMatchingPositionFeature(position)\r\n } else if (this.layerPositions[position] && !showerParent.showerHead.layerPositions[position]) {\r\n const {wizardActiveItem} = store.getState().wizardState;\r\n if (!wizardActiveItem || !wizardActiveItem.hideItems) {\r\n this.layerPositions[position] = null\r\n }\r\n }\r\n })\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerHeadBundle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head_bundle';\r\n this.partName = 'Shower Head Bundle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head_bundle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 12;\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_head_bundle);\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && !showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"0\") && !showerParent.showerFixture.disabled) {\r\n // store.dispatch(setLookOverlayOpened(LOOK_OVERLAYS.notCompatiblePopup));\r\n // return;\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n super.handleClick();\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const showerParent = this.getParent().getParent();\r\n if (showerParent.showerFixture) {\r\n showerParent.showerFixture.disabled = true;\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_head_bundle && this.activeFeature\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (showerParent.showerHead && showerParent.showerHead.activeFeature && showerParent.showerHead.activeFeature.metaData[\"MountType\"]) {\r\n // conditions.push({\r\n // propName: \"MountType\",\r\n // propValue: showerParent.showerHead.activeFeature.metaData[\"MountType\"][0]\r\n // })\r\n // }\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type === ShowerHeadTypes.shower_head_bundle\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TubSpout extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tub_spout';\r\n this.partName = 'Tub Spout';\r\n this.translateId = \"visualizer.bathroom.shower.tub_spout\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n const showerComboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n if (!showerParent.showerTubComboIsActive() || showerComboParent.bottomTub !== \"replacement_tub\") {\r\n return true\r\n }\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n && showerParent.showerFixture.activeFeature.metaData[\"MountType\"].includes(\"T\")) { // S and 0 is ok\r\n return true;\r\n }\r\n return false\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n return showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"replacement_tub\";\r\n }\r\n\r\n}\r\n","import {ShowerHeadTypes, ShowerHandTypes} from \"../../constants\";\r\nimport ShowerCommon from \"../showerNew/showerCommon\";\r\n\r\nexport default class HandShowerKit extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_kit';\r\n this.partName = 'Hand Shower Kit';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_kit\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!Array.isArray(dbFeature.metaData[\"MountType\"])) {\r\n dbFeature.metaData[\"MountType\"] = [\"0\"]\r\n }\r\n return super.load_(dbFeature, new HandShowerKit());\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_kit);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_kit\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n if (showerParent.showerFixture && showerParent.showerFixture.activeFeature && showerParent.showerFixture.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: showerParent.showerFixture.activeFeature.metaData[\"MountType\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().shower_head_type !== ShowerHeadTypes.shower_head_bundle\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerCurb extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_curb';\r\n this.partName = 'Shower Curb';\r\n this.translateId = \"visualizer.bathroom.shower.shower_curb\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerSize = showerParent.showerSize();\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class BodySpray extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'body_spray';\r\n this.partName = 'Body Spray';\r\n this.translateId = \"visualizer.bathroom.shower.body_spray\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"MountPosition\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"MountPosition\"][0]\r\n : CORNER_SHELVES_POSITIONS[0] // should be \"\" here!!!\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new this.constructor(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType(); // body spray can be used with everything? not sure\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n // const showerParent = this.getParent();\r\n // if (showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || !this.isActiveFeatureGroup(\"diverterTrim\")) {\r\n // super.hideLayers();\r\n // return;\r\n // }\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n // conditions.push({\r\n // propName: \"MountPosition\",\r\n // propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n // ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n // : [\"2\"]\r\n // })\r\n // }\r\n // return conditions\r\n // }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class DiverterTrim extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'diverter_trim';\r\n this.partName = 'Diverter Trim';\r\n this.translateId = \"visualizer.bathroom.shower.diverter_trim\";\r\n this.canBeDisabled = true;\r\n this.disabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class HandShowerHolder extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_holder';\r\n this.partName = 'Hand Shower Holder';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_holder\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHandType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // let conditions = super.getArrayOfConditions(); //roomLayout\r\n // //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n // if (showerParent.wallUnion && showerParent.wallUnion.activeFeature && showerParent.wallUnion.activeFeature.metaData[\"MountPosition\"]) {\r\n // conditions.push({\r\n // propName: \"MountPosition\",\r\n // propValue: showerParent.showerFixture.activeFeature.metaData[\"MountPosition\"]\r\n // })\r\n // }\r\n // return conditions\r\n // }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class HandShowerOnly extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hand_shower_only';\r\n this.partName = 'Hand Shower Only';\r\n this.translateId = \"visualizer.bathroom.shower.hand_shower_only\";\r\n this.canBeDisabled = true;\r\n this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n //Hand Shower Kit should be displayed with the fixtures that have MountType: 0\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerHose extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_hose';\r\n this.partName = 'Shower Hose';\r\n this.translateId = \"visualizer.bathroom.shower.shower_hose\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_arm);\r\n showerParent.setShowerHandType(ShowerHandTypes.hand_shower_holder);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm || showerParent.shower_hand_type !== ShowerHandTypes.hand_shower_holder\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerSystem extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_system';\r\n this.partName = 'Shower System';\r\n this.translateId = \"visualizer.bathroom.shower.shower_system\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_system);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_system && this.activeFeature\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ShowerTrimKit extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_trim_kit';\r\n this.partName = 'Shower Trim Kit';\r\n this.translateId = \"visualizer.bathroom.shower.shower_trim_kit\";\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n const showerParent = this.getParent().getParent();\r\n showerParent.setShowerHeadType(ShowerHeadTypes.shower_trim_kit);\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_trim_kit && this.activeFeature\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class ValveTrim extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'valve_trim';\r\n this.partName = 'Valve Trim';\r\n this.translateId = \"visualizer.bathroom.shower.valve_trim\";\r\n this.canBeDisabled = true;\r\n this.conflictingPositions = [\"shower_seats\"];\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n}\r\n","import ShowerCommon from \"./showerCommon\";\r\nimport {createParentPositions, ShowerHandTypes, ShowerHeadTypes} from \"../../constants\";\r\n\r\nexport default class WallUnion extends ShowerCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_union';\r\n this.partName = 'Wall Union';\r\n this.translateId = \"visualizer.bathroom.shower.wall_union\";\r\n this.canBeDisabled = true;\r\n this.useMatchingFeatureReplacement = \"MountPosition\";\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n handleClick() {\r\n this.setArmHeadType();\r\n super.handleClick();\r\n }\r\n\r\n hideLayerCondition() {\r\n const showerParent = this.getParent();\r\n return showerParent.shower_head_type !== ShowerHeadTypes.shower_arm\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (showerParent.shower_hand_type === ShowerHandTypes.hand_shower_kit) {\r\n if (showerParent.handShowerKit && showerParent.handShowerKit.activeFeature && showerParent.handShowerKit.activeFeature.metaData[\"MountPosition\"]) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: [\"3\"]\r\n })\r\n }\r\n } else if (showerParent.shower_hand_type === ShowerHandTypes.hand_shower_holder) {\r\n if (showerParent.handShowerHolder && showerParent.handShowerHolder.activeFeature) {\r\n conditions.push({\r\n propName: \"MountPosition\",\r\n propValue: showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n ? showerParent.handShowerHolder.activeFeature.metaData[\"MountPosition\"]\r\n : [\"2\"]\r\n })\r\n }\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {windowThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport WindowKits from \"../subparts/window/windowKits\";\r\nimport WindowBody from \"../subparts/window/windowBody\";\r\n\r\nexport class WindowParent extends Part {\r\n static id = 'Window';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Window';\r\n this.homePageTitle = 'Windows';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.partThumbnail = windowThumbnail;\r\n this.windowBody = null;\r\n this.relatedGroupNames = [\"Window Kit\", \"Window\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Window Kit\":\r\n case \"Window Kits\": {\r\n relatedItemName = \"windowKits\";\r\n RelatedItemClass = WindowKits;\r\n break;\r\n }\r\n case \"Window\": {\r\n relatedItemName = \"windowBody\";\r\n RelatedItemClass = WindowBody;\r\n break;\r\n }\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class WindowKits extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"window_kits\";\r\n this.dbName = window.location.href.includes(\"quotekandb\") ? \"Window Kits\" : \"Window Kit\";\r\n this.partName = \"Window Kits\";\r\n this.translateId = \"visualizer.bathroom.window.kits\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const windowParent = this.getParent();\r\n // const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n // featuresToDisplay.forEach(feature => {\r\n // if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n // feature.matchesMetaFailed = \"shower_pod\";\r\n // } else if (accessoriesParent.cornerShelf && !accessoriesParent.cornerShelf.disabled\r\n // && CORNER_SHELVES_POSITIONS.some(pos => accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\"))) {\r\n // feature.matchesMetaFailed = \"corner_shelf\";\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Shower Pod\") {\r\n //\r\n // }\r\n // }\r\n handleChangeParent() {\r\n // this.removeInterferingParts();\r\n this.getParent().disabled = false;\r\n this.handleClick();\r\n }\r\n\r\n removeInterferingParts = () => {\r\n const kitsParent = this.getParent();\r\n const windowParent = kitsParent.getParent();\r\n const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent) {\r\n if (accessoriesParent.showerPod) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n if (accessoriesParent.cornerShelf) {\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n if (accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\")) {\r\n accessoriesParent.cornerShelf.layerPositions[pos] = null;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // disabledClick() {\r\n // if (!this.disabled) {\r\n // this.removeInterferingParts();\r\n // }\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const windowParent = this.getParent();\r\n const layout = windowParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type)) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Window.WindowKits;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class WindowBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window_body';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\nimport Walls from \"./walls\";\r\nimport {getCurrentRoomType} from \"../../../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../constants\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n this.relatedGroupNames = [\"Floor\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n const wallParent = layout.parts[Walls.id];\r\n if ((getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.Floor;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport ShowerWallMirror from \"../subparts/globals/showerWallMirror\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.toiletPaper = null;\r\n this.decor1 = null; // can be up to 10\r\n this.showerWallMirror = null; // mirror reflection\r\n this.lamp = null; // mirror reflection\r\n this.mirrors = null; // mirror reflection\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n case \"Shower Wall Mirror\": {\r\n relatedItemName = \"showerWallMirror\";\r\n RelatedItemClass = ShowerWallMirror;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] && dbFeature.sharedFeatureName.includes(\"ountertop\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (attFeature.metaData[\"MatchingFeature\"] && attFeature.metaData[\"MatchingFeature\"].includes(\"Splitwall\")) {\r\n const splitWall = layout.parts.Walls.splitWall;\r\n if (splitWall && !splitWall.disabled && splitWall.activeFeature && splitWall.activeFeature.layer.src\r\n && !matchingFeatures.some(alreadyAddedFeature => alreadyAddedFeature.metaData[\"MatchingFeature\"]\r\n && alreadyAddedFeature.metaData[\"MatchingFeature\"].includes(\"Splitwall\"))) {\r\n matchingFeatures.push(attFeature);\r\n }\r\n } else if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"ShowerSize\"]) {\r\n this.needShowerSizeMeta = true;\r\n }\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.needShowerSizeMeta) {\r\n const showerParent = this.getParent().layout.parts[\"Shower\"];\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport Walls from \"../../parts/walls\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerWallMirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_mirror\";\r\n this.partName = \"Shower Wall Mirror\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"MatchingWallName\"] = dbFeature.metaData[\"ActualDisplayedName\"];\r\n return super.load_(dbFeature, new ShowerWallMirror());\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = layout.parts[Shower.id];\r\n if (!showerParent || !showerParent.showerWall || !showerParent.showerWall.activeFeature || showerParent.showerWall.disabled) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const wallParent = layout.parts[Walls.id];\r\n\r\n const showerSize = showerParent ? showerParent.showerSize() : null;\r\n if (showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n })\r\n }\r\n if (wallParent && wallParent.splitWall) {\r\n conditions.push({\r\n propName: \"SplitWallType\",\r\n propValue: wallParent.getSplitWallType()\r\n })\r\n }\r\n if (showerParent && showerParent.showerWall && showerParent.showerWall.activeFeature) {\r\n conditions.push({\r\n propName: \"MatchingWallName\",\r\n propValue: showerParent.showerWall.activeFeature.dbFeature.sharedFeatureName\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n// import {BathTubType, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\nimport EnclosureTop from \"../subparts/bathTub/enclosureTop\";\r\nimport EnclosureBottom from \"../subparts/bathTub/enclosureBottom\";\r\nimport SkirtingBoard from \"../subparts/bathTub/skirtingBoard\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.bathTubBody = null;\r\n this.bathTubFixture = null;\r\n this.enclosureTop = null;\r\n this.enclosureBottom = null;\r\n this.skirtingBoard = null;\r\n this.relatedItems = [];\r\n this.relatedGroupNames = [\"Bathtub\", \"Bathtub Fixture\", \"Enclosure Top\", \"Enclosure Bottom\", \"Skirting Board\"];\r\n\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Bathtub Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n case \"Enclosure Top\":\r\n case \"EnclosureTop\":\r\n relatedItemName = \"enclosureTop\";\r\n RelatedItemClass = EnclosureTop;\r\n break;\r\n case \"Enclosure Bottom\":\r\n case \"EnclosureBottom\":\r\n relatedItemName = \"enclosureBottom\";\r\n RelatedItemClass = EnclosureBottom;\r\n break;\r\n case \"Skirting Board\":\r\n relatedItemName = \"skirtingBoard\";\r\n RelatedItemClass = SkirtingBoard;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n changeLayout() {\r\n // changeLayout(layoutType) {\r\n // if (layoutType === LayoutType.Layout1 && this.bathTubBody) {\r\n // // this.activeSubType_ = BathTubType.Custom60in;\r\n // // this.bathTubType_ = BathTubType.Custom60in;\r\n // if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = true;\r\n // }\r\n // }\r\n // } else {\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = false;\r\n // }\r\n // }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_body\";\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithoutEnclosures]; // remove enclosure top and bottom\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n const bathParent = this.getParent();\r\n [\"bathTubFixture\", \"enclosureTop\", \"enclosureBottom\"].forEach(relName => {\r\n if (bathParent[relName]) {\r\n bathParent[relName].disabled = this.disabled;\r\n }\r\n })\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.partName = \"Fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.dbName = \"Bathtub Fixture\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const bathTubBody = this.getParent().bathTubBody;\r\n if (bathTubBody) {\r\n bathTubBody.disabled = this.disabled || !bathTubBody.canBeEnabled(); // true or check if it can be enabled;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const bathtubParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n if (bathtubParent.bathTubBody && bathtubParent.bathTubBody.activeFeature && bathtubParent.bathTubBody.activeFeature.metaData[\"MountType\"]) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: bathtubParent.bathTubBody.activeFeature.metaData[\"MountType\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n return super.getArrayOfConditions()\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\n\r\nexport default class EnclosureTop extends EnclosureCommon {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'enclosure_top';\r\n this.dbName = 'EnclosureTop';\r\n this.partName = 'Enclosure Top';\r\n this.translateId = \"visualizer.bathroom.shower.enclosure_top\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\n\r\nexport default class EnclosureBottom extends EnclosureCommon {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'enclosure_bottom';\r\n this.dbName = 'EnclosureBottom';\r\n this.partName = 'Enclosure Bottom';\r\n this.translateId = \"visualizer.bathroom.shower.enclosure_bottom\";\r\n this.canBeDisabled = false;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n}\r\n","import EnclosureCommon from \"./enclosureCommon\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class SkirtingBoard extends EnclosureCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'skirting_board';\r\n this.partName = 'Skirting Board';\r\n this.translateId = \"visualizer.bathroom.accessories.skirting_board\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"BathType\"]) {\r\n dbFeature.metaData[\"BathType\"] = [METADATA.BathtubWithoutEnclosures]; // for free standing bath\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport { showerAccessoriesThumbnail } from '../../../bvComponent/core/assets';\r\n\r\nimport Table from \"../subparts/accessories/table\";\r\nimport Chair from \"../subparts/accessories/chair\";\r\nimport Carpet from \"../subparts/accessories/carpet\";\r\nimport Lamp from \"../subparts/accessories/lamp\";\r\nimport Basket from \"../subparts/accessories/basket\";\r\nimport Frame from \"../subparts/accessories/frame\";\r\nimport Plant from \"../subparts/accessories/plant\";\r\n\r\nexport class Accessories extends Part {\r\n static id = 'Accessories';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partThumbnail = showerAccessoriesThumbnail;\r\n this.partName = 'Accessories';\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n this.relatedItems = [];\r\n\r\n // related items\r\n this.table = null;\r\n this.chair = null;\r\n this.lamp = null;\r\n this.carpet = null;\r\n this.basket = null;\r\n this.frame = null;\r\n this.plant = null;\r\n\r\n //current active caddie type\r\n this.relatedGroupNames = [\"Table\", \"Chair\", \"Lamp\", \"Carpet\", \"Basket\", \"Frame\", \"Plant\"];\r\n }\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Table\": {\r\n relatedItemName = \"table\";\r\n RelatedItemClass = Table;\r\n break;\r\n }\r\n case \"Chair\": {\r\n relatedItemName = \"chair\";\r\n RelatedItemClass = Chair;\r\n break;\r\n }\r\n case \"Lamp\":\r\n case \"Lamps\": {\r\n relatedItemName = \"lamp\";\r\n RelatedItemClass = Lamp;\r\n break;\r\n }\r\n case \"Carpet\":\r\n case \"Carpets\": {\r\n relatedItemName = \"carpet\";\r\n RelatedItemClass = Carpet;\r\n break;\r\n }\r\n case \"Basket\": {\r\n relatedItemName = \"basket\";\r\n RelatedItemClass = Basket;\r\n break;\r\n }\r\n case \"Frame\": {\r\n relatedItemName = \"frame\";\r\n RelatedItemClass = Frame;\r\n break;\r\n }\r\n case \"Plant\": {\r\n relatedItemName = \"plant\";\r\n RelatedItemClass = Plant;\r\n break;\r\n }\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Table extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'table';\r\n this.partName = 'Table';\r\n this.translateId = \"visualizer.bathroom.shower.table\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Chair extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'chair';\r\n this.partName = 'Chair';\r\n this.translateId = \"visualizer.bathroom.shower.chair\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Carpet extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'carpet';\r\n this.partName = 'Carpet';\r\n this.translateId = \"visualizer.bathroom.shower.carpet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Lamp extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'lamp';\r\n this.partName = 'Lamp';\r\n this.translateId = \"visualizer.bathroom.shower.lamp\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Basket extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'basket';\r\n this.partName = 'Basket';\r\n this.translateId = \"visualizer.bathroom.basket\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Frame extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'frame';\r\n this.partName = 'Frame';\r\n this.translateId = \"visualizer.bathroom.frame\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Plant extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'plant';\r\n this.partName = 'Plant';\r\n this.translateId = \"visualizer.bathroom.plant\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, LOOK_ROOM_TYPES, LayoutAbbreviations} from \"../../constants\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityCountertop extends VanityCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"MatchingFeature\"]) {\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n }\r\n if (!dbFeature.metaData[\"Side\"]) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n disabledClick() {\r\n // this.getParent().toggleVanityParts(this.disabled); // temporary removed for demo\r\n }\r\n\r\n getArrayOfConditions() {\r\n const vanityParent = this.getParent();\r\n let conditions = super.getArrayOfConditions();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n const activeMatchingSink = vanityParent.getActiveMatchingMetaFromRelatedItem(\"vanity_sink\");\r\n const activeMatchingSinkSku = vanityParent.getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n if ((activeMatchingSink && activeMatchingSink.includes(METADATA.NO)) || activeMatchingSinkSku) {\r\n const propValue = !activeMatchingSink.includes(METADATA.NO) && activeMatchingSinkSku ? activeMatchingSinkSku : activeMatchingSink;\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue,\r\n });\r\n if (!(Array.isArray(propValue) && propValue[0] === METADATA.NO)) { // remove since we need to use Lixil matchingfeature logic\r\n conditions = conditions.filter(condition => condition.propName !== \"VanitySize\");\r\n }\r\n }\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n return conditions\r\n }\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {createParentPositions, LayoutAbbreviations, METADATA, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityBacksplash extends VanityCommon {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet\r\n || !vanityParent.vanityCabinet.activeFeature\r\n || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n || !vanityParent.vanityCabinet.activeFeature.metaData[\"MatchingFeature\"].includes(METADATA.NO)\r\n }\r\n\r\n}\r\n","import {Vanity} from \"../../parts/vanity\";\r\nimport VanityCommon from \"./vanityCommon\";\r\nimport {createParentPositions, METADATA} from \"../../constants\";\r\n\r\nexport default class Mirror extends VanityCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"VanitySize\"]) && dbFeature.metaData[\"VanitySize\"][0] === \"0\") {\r\n dbFeature.metaData[\"VanitySize\"] = [METADATA.ALL];\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"MirrorShape\"]) && dbFeature.metaData[\"MirrorShape\"][0] === \"00\") {\r\n dbFeature.metaData[\"MirrorShape\"] = [METADATA.ALL];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getSkuWithoutDot, removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {navFeatureCLick} from \"../../../lookNavigation/lookFunctions\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\nimport {findNextVanityTypeFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.Inner]\r\n }\r\n if (!dbFeature.metaData[\"MatchingFeature\"] || dbFeature.metaData[\"MountLevel\"]) {\r\n // added MountLevel for new sinks that can be applied for vanities with countertops\r\n dbFeature.metaData[\"MatchingFeature\"] = [METADATA.NO];\r\n dbFeature.metaData[\"CustomVanityType\"] = VANITY_TYPES.vanity_cabinet;\r\n }\r\n if (dbFeature.metaData[\"MountHoles\"] && dbFeature.metaData[\"MountHoles\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"0\", \"1\", \"4\", \"8\"]; // UnderMount Sinks - they can be used with all faucet types\r\n }\r\n // if (!dbFeature.metaData[\"SingleHole\"]) {\r\n // dbFeature.metaData[\"SingleHole\"] = dbFeature.lixilProductSubCategory === METADATA.WallHungSinks // todo change to filters\r\n // ? [METADATA.WallHungSinks]\r\n // : [METADATA.ALL];\r\n // }\r\n if (Array.isArray(dbFeature.metaData[\"SinkWidth\"]) && dbFeature.metaData[\"SinkWidth\"][0]) {\r\n dbFeature.metaData[\"SinkWidth\"] = +dbFeature.metaData[\"SinkWidth\"][0] + 5; // convert to number\r\n // for example, width is 23, 23 + 5 = 28, vanities with VanitySize 24 will be hidden\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"WaterLevel\"]) && dbFeature.metaData[\"WaterLevel\"][0]) {\r\n dbFeature.metaData[\"WaterLevel\"] = +dbFeature.metaData[\"WaterLevel\"][0] + 3; // convert to number and add 3! they should be higher + 3\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = !dbFeature.metaData[\"Side\"]\r\n ? SIDE_POSITIONS[0]\r\n : dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Sink(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions = {}) {\r\n const {firstOpenedConditions, returnAllFeatures} = restOptions;\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as && !IS_QKB_UI) {\r\n const featuresList = this.getFeaturesForNavigationFrom(returnAllFeatures);\r\n const filteredAvailableFeatures = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters, featuresList), searchText);\r\n let featuresToDisplay = this.navigationSubItemsWithFilterMultipleConditions(firstOpenedConditions || this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n filteredAvailableFeatures.forEach(feature => {\r\n if (!feature.metaData[\"CustomVanityType\"] || !feature.metaData[\"CustomVanityType\"].length\r\n && featuresToDisplay.every(shownFeature => shownFeature.dbFeature.id !== feature.dbFeature.id)) {\r\n featuresToDisplay.push(feature);\r\n }\r\n });\r\n let sinkFeatures = [];\r\n if (this.activeFeature && this.activeFeature.metaData.layerPosition && Array.isArray(this.activeFeature.metaData.MountType)) {\r\n for (let sinkFeature of featuresToDisplay) {\r\n const alreadyExistingIndex = sinkFeatures.findIndex(feature => {\r\n return feature.dbFeature.sharedFeatureName === sinkFeature.dbFeature.sharedFeatureName\r\n });\r\n if (alreadyExistingIndex > -1) {\r\n if (sinkFeature.metaData.layerPosition && (this.activeFeature.metaData.layerPosition === sinkFeature.metaData.layerPosition)\r\n && sinkFeature.metaData.MountType && (this.activeFeature.metaData.MountType[0] === sinkFeature.metaData.MountType[0])) {\r\n sinkFeatures.splice(alreadyExistingIndex, 1, sinkFeature)\r\n }\r\n } else {\r\n sinkFeatures.push(sinkFeature);\r\n }\r\n }\r\n } else {\r\n sinkFeatures = featuresToDisplay;\r\n }\r\n return this.navigationItemsWithOptions(filters, forFeature, filterGroups, sinkFeatures)\r\n }\r\n return super.navigationSubItems(filters, searchText, forFeature, filterGroups, restOptions)\r\n }\r\n\r\n getNextVanityTypeFeature(shouldCheckSize = false) {\r\n const vanityParent = this.getParent().getParent();\r\n const currentActiveMatchingFeatureSku = vanityParent.getActiveSkuFromRelatedItem(vanityParent.vanity_type);\r\n const currentActiveMatchingFeatureMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type);\r\n const sinkSku = getSkuWithoutDot(this.dbFeature.sharedFeatureName);\r\n\r\n const currentMatchingMatchingFeature = this.metaData[\"MatchingFeature\"] && (!currentActiveMatchingFeatureSku || !this.metaData[\"MatchingFeature\"].includes(currentActiveMatchingFeatureSku));\r\n const currentMatchingMatchingSku = currentActiveMatchingFeatureMeta && !currentActiveMatchingFeatureMeta.includes(sinkSku);\r\n if (currentMatchingMatchingFeature || currentMatchingMatchingSku) {\r\n const relatedItem = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (relatedItem) {\r\n return findNextVanityTypeFeature(this, relatedItem, shouldCheckSize)\r\n }\r\n }\r\n return null\r\n }\r\n\r\n handleClick(forceClick = false, setVanityOnly = false) {\r\n const asBathroom = getCurrentRoomType() === LOOK_ROOM_TYPES.as;\r\n const featureIsLocked = getFeatureIsLocked(this, forceClick);\r\n if (asBathroom && !featureIsLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n if (!this.metaData[\"CustomVanityType\"] || !this.metaData[\"CustomVanityType\"].length) {\r\n vanityParent.vanity_type = null;\r\n // } else if (!vanityParent.vanity_type || !this.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n } else if (!this.metaData[\"CustomVanityType\"].includes(vanityParent.vanity_type)) {\r\n vanityParent.vanity_type = this.metaData[\"CustomVanityType\"][0];\r\n }\r\n if (setVanityOnly) {\r\n return // vanity should be set after the sink updates it's layer positions\r\n }\r\n const matchFeature = this.getNextVanityTypeFeature();\r\n console.log(\"matchFeature\", matchFeature);\r\n // console.log(\"forceClick\", forceClick);\r\n if (matchFeature) {\r\n navFeatureCLick(matchFeature, false, forceClick, false)\r\n }\r\n // if (vanityParent.sink_type && vanityParent.sink_type.includes(SINK_TYPES.standAlone)) {\r\n // // vanityParent.vanityCabinet.disabled = true;\r\n // if (vanityParent.vanityCabinet.layerPositions) {\r\n // Object.keys(vanityParent.vanityCabinet.layerPositions).forEach(position => {\r\n // vanityParent.vanityCabinet.layerPositions[position] = null;\r\n // })\r\n // }\r\n // } else {\r\n // // vanityParent.vanityCabinet.disabled = false;\r\n // if (vanityParent.vanityCabinet.layerPositions) {\r\n // Object.keys(vanityParent.vanityCabinet.layerPositions).forEach(position => {\r\n // vanityParent.vanityCabinet.layerPositions[position] = vanityParent.vanityCabinet.getMatchingPositionFeature(position, vanityParent.vanityCabinet.activeFeature);\r\n // })\r\n // }\r\n // }\r\n }\r\n super.handleClick(forceClick);\r\n if (asBathroom && !featureIsLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.updateVanityParts();\r\n }\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures.find(feature => !feature.dbFeature.displayName.includes(\"laceholder\")) || filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n getCurrentFaucetMetaData() {\r\n const faucetParent = this.getParent().faucet;\r\n let metaObject = {};\r\n if (faucetParent && faucetParent.activeFeature) {\r\n const singleHoleMeta = faucetParent.activeFeature.dbFeature.lixilProductSubCategory === METADATA.SingleHole\r\n || faucetParent.activeFeature.dbFeature.lixilProductSubCategory === METADATA.WidespreadFaucets // todo change to filters\r\n ? METADATA.WallHungSinks\r\n : METADATA.ALL\r\n if (singleHoleMeta) {\r\n metaObject[\"SingleHole\"] = singleHoleMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n // getArrayOfConditions(forNavigation = false) {\r\n getArrayOfConditions(forNavigation = false) {\r\n const conditions = super.getArrayOfConditions();\r\n // const currentFaucetMetaData = this.getCurrentFaucetMetaData();\r\n // if (currentFaucetMetaData[\"SingleHole\"]) {\r\n // conditions.push({\r\n // propName: 'SingleHole',\r\n // propValue: currentFaucetMetaData[\"SingleHole\"]\r\n // })\r\n // }\r\n const vanityParent = this.getParent();\r\n if (getCurrentRoomType(vanityParent.layout) === LOOK_ROOM_TYPES.as) {\r\n if (vanityParent.vanity_type && !forNavigation) {\r\n conditions.push({\r\n propName: \"CustomVanityType\",\r\n propValue: vanityParent.vanity_type\r\n });\r\n const activeMatchingVanity = vanityParent.getActiveSkuFromRelatedItem(vanityParent.vanity_type);\r\n const activeMatchingFeatures = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type);\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingFeatures.includes(METADATA.NO) ? METADATA.NO : activeMatchingVanity\r\n });\r\n }\r\n if (activeMatchingFeatures) {\r\n conditions.push({\r\n propName: \"FeatureSku\",\r\n propValue: activeMatchingFeatures\r\n });\r\n }\r\n if (activeSideMeta && activeSideMeta.includes(\"C\") && !vanityParent.isDoubleVanity()) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n }\r\n }\r\n return conditions;\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n let arrayOfConditions = super.getArrayOfConditions();\r\n ['MountType', 'MountHoles'].forEach((propName) => {\r\n if (fromFeature.metaData[propName]) {\r\n arrayOfConditions.push({\r\n propName,\r\n propValue: fromFeature.metaData[propName]\r\n })\r\n }\r\n })\r\n return arrayOfConditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanity_type // pedestal sink only\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {createParentPositions, METADATA, SIDE_POSITIONS, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {getSkuWithoutDot, removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {navFeatureCLick} from \"../../../lookNavigation/lookFunctions\";\r\nimport store from \"../../../../../store\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.homePageTitle = 'Faucets';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.useMatchesFailedNavigation = true;\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.filterValueIDs && Array.isArray(dbFeature.filterValueIDs[\"27\"])) { // Collection\r\n const concettoTMIndex = dbFeature.filterValueIDs[\"27\"].findIndex(filterValueId => filterValueId === 10410);\r\n if (concettoTMIndex > -1) { // here we remove Concetto™ filter as it comes from the feed, we can't remove if rome dashboard\r\n // we replace it to \"Concetto\"\r\n dbFeature.filterValueIDs[\"27\"].includes(9755)\r\n ? dbFeature.filterValueIDs[\"27\"].splice(concettoTMIndex, 1)\r\n : dbFeature.filterValueIDs[\"27\"].splice(concettoTMIndex, 1, 9755)\r\n }\r\n }\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [METADATA.Inner]\r\n // } else if(dbFeature.metaData[\"MountType\"].includes(METADATA.Outer) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Inner)) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.Inner)\r\n // }\r\n }\r\n if (!dbFeature.metaData[\"MountHoles\"]) {\r\n if (dbFeature.customDisplayName.includes(\"8 inch\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"8\"]\r\n } else if (dbFeature.customDisplayName.includes(\"Single Hole\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"1\"]\r\n } else if (dbFeature.customDisplayName.includes(\"Centerset\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"4\"]\r\n } else {\r\n console.log(\"NO FAUCET DBFEATURE META MountHoles!\", dbFeature.customDisplayName);\r\n }\r\n // } else if(dbFeature.metaData[\"MountType\"].includes(METADATA.Outer) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Inner)) {\r\n // dbFeature.metaData[\"MountType\"].push(METADATA.Inner)\r\n // }\r\n } else if (dbFeature.metaData[\"MountHoles\"].includes(\"0\")) {\r\n dbFeature.metaData[\"MountHoles\"] = [\"0\", \"1\", \"4\", \"8\"]\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"Height\"]) && dbFeature.metaData[\"Height\"][0]) {\r\n dbFeature.metaData[\"Height\"] = +dbFeature.metaData[\"Height\"][0]; // convert to number\r\n }\r\n if (dbFeature.isFromAsRoom) {\r\n\r\n if (!dbFeature.metaData[\"MountLevel\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0]) {\r\n if (dbFeature.metaData[\"MountType\"][0] === \"U\") {\r\n dbFeature.metaData[\"MountLevel\"] = [\"0\"]\r\n } else if (dbFeature.metaData[\"MountType\"][0] === \"S\") {\r\n dbFeature.metaData[\"MountLevel\"] = [\"2\"]\r\n }\r\n } else {\r\n dbFeature.metaData[\"MountLevel\"] = [\"2\"]\r\n }\r\n }\r\n\r\n if (dbFeature.metaData[\"MountType\"].includes(METADATA.Outer)) {\r\n [\"ST\", \"T\", \"W\", \"S\", \"A\"].forEach(metaValue => {\r\n if (!dbFeature.metaData[\"MountType\"].includes(metaValue)) {\r\n dbFeature.metaData[\"MountType\"].push(metaValue);\r\n }\r\n })\r\n }\r\n if (dbFeature.metaData[\"MountType\"].includes(METADATA.StandAlone) && !dbFeature.metaData[\"MountType\"].includes(METADATA.Outer)) {\r\n dbFeature.metaData[\"MountType\"].push(METADATA.Outer);\r\n }\r\n }\r\n // if (!dbFeature.metaData[\"SingleHole\"]) {\r\n // dbFeature.metaData[\"SingleHole\"] = [dbFeature.lixilProductSubCategory]; // todo change to filters\r\n // }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new VanityFaucet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getMatchingSinks() { // method is used for feature, to find the same sink as the current one\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const sinkParent = vanityParent.sink;\r\n const layout = vanityParent.layout;\r\n const currentSinkNavItems = layout.designNavigationItems({part: sinkParent});\r\n const matchingByCabinetType = currentSinkNavItems.filter(navItem => {\r\n return faucetParent.getActiveFeatureConditions(this).every(condition => navItem.part.matchesMetaForCondition(condition.propName, condition.propValue))\r\n });\r\n const withCurrentVanityType = matchingByCabinetType.filter(navItem => {\r\n if (!vanityParent.vanity_type) {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n }\r\n return navItem.part.matchesMetaForCondition(\"CustomVanityType\", vanityParent.vanity_type)\r\n });\r\n const {filterGroups} = store.getState().filterState;\r\n const sinkCollectionName = vanityParent.sink && vanityParent.sink.activeFeature\r\n ? vanityParent.sink.activeFeature.getCollectionName(filterGroups)\r\n : \"\";\r\n const sinkCustomFullDisplayName = vanityParent.sink && vanityParent.sink.activeFeature\r\n ? vanityParent.sink.activeFeature.getCustomFullDisplayName()\r\n : \"\";\r\n const sameCollectionName = !sinkCollectionName ? withCurrentVanityType : withCurrentVanityType.filter(navItem => {\r\n return navItem.part.getCollectionName(filterGroups) === sinkCollectionName\r\n });\r\n const sameCustomName = !sinkCustomFullDisplayName ? sameCollectionName : sameCollectionName.filter(navItem => {\r\n return navItem.part.getCustomFullDisplayName() === sinkCustomFullDisplayName\r\n });\r\n return {\r\n matchingByCabinetType,\r\n withCurrentVanityType,\r\n sameCollectionName,\r\n sameCustomName,\r\n }\r\n }\r\n\r\n getSinkToClickFromMatchingSinks = (sinkActiveFeature) => {\r\n const {\r\n matchingByCabinetType,\r\n withCurrentVanityType,\r\n sameCollectionName,\r\n sameCustomName,\r\n } = this.getMatchingSinks();\r\n // console.log(\"matchingByCabinetType\", matchingByCabinetType);\r\n // console.log(\"withCurrentVanityType\", withCurrentVanityType);\r\n // console.log(\"sameCollectionName\", sameCollectionName);\r\n // console.log(\"sameCustomName\", sameCustomName);\r\n const fromWhereToPick = sameCustomName.length\r\n ? sameCustomName\r\n : sameCollectionName.length\r\n ? sameCollectionName\r\n : withCurrentVanityType.length\r\n ? withCurrentVanityType\r\n : matchingByCabinetType;\r\n let featureToCLick = null;\r\n if (sinkActiveFeature) {\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const relatedItem = vanityParent.relatedItems.find(relItem => relItem.partId === vanityParent.vanity_type);\r\n if (relatedItem && relatedItem.activeFeature && sinkActiveFeature.metaData[\"MatchingFeature\"]) {\r\n featureToCLick = fromWhereToPick.find(navItem => {\r\n return navItem.part.metaData[\"MatchingFeature\"].includes(getSkuWithoutDot(relatedItem.activeFeature.dbFeature.sharedFeatureName))\r\n })\r\n }\r\n if (!featureToCLick) {\r\n featureToCLick = fromWhereToPick.find(navItem => navItem.part.getColorName() === sinkActiveFeature.getColorName())\r\n }\r\n }\r\n if (!featureToCLick) {\r\n featureToCLick = fromWhereToPick[0];\r\n }\r\n console.log(\"featureToCLick\", featureToCLick);\r\n return featureToCLick ? featureToCLick.part : null;\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const faucetParent = this.getParent();\r\n const vanityParent = faucetParent.getParent();\r\n const sinkParent = vanityParent.sink;\r\n\r\n if (!sinkParent.activeFeature || !sinkParent.activeFeature.matchesMetaForArrayOfConditions(faucetParent.getActiveFeatureConditions(this))) {\r\n const featureToCLick = this.getSinkToClickFromMatchingSinks(sinkParent.activeFeature)\r\n if (featureToCLick) {\r\n console.log(\"sink featureToCLick\", featureToCLick);\r\n navFeatureCLick(featureToCLick, false, ignoreLocked, false);\r\n }\r\n }\r\n\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n // const singleHoleMeta = sinkParent.activeFeature.dbFeature.lixilProductSubCategory === \"Wall Hung Sinks\" //\r\n // if (singleHoleMeta) {\r\n // metaObject[\"SingleHole\"] = METADATA.SingleHole\r\n // }\r\n const mountHolesMeta = sinkParent.activeFeature.metaData[\"MountHoles\"] // American Standard\r\n if (mountHolesMeta && !(getCurrentRoomType() === LOOK_ROOM_TYPES.grohe && mountHolesMeta.includes(\"0\"))) {\r\n metaObject[\"MountHoles\"] = mountHolesMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions(forNavigation = false) {\r\n // const counterTopSize = this.getParent().counterTopSize(this);\r\n // const conditions = [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountHoles\"].forEach(propName => {\r\n if ((!forNavigation || ((getCurrentRoomType() === LOOK_ROOM_TYPES.grohe) && propName === \"MountType\")) && currentSinkMetaData[propName]\r\n && !(propName === \"MountHoles\" && currentSinkMetaData[propName].includes(\"0\") && currentSinkMetaData[\"MountType\"] && currentSinkMetaData[\"MountType\"].includes(\"U\"))) {\r\n if (propName === \"MountType\" && (currentSinkMetaData[propName] === \"V\")) { // do not check V sinks\r\n return\r\n }\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // if (currentSinkMetaData[\"SingleHole\"]) {\r\n // conditions.push({\r\n // propName: 'SingleHole',\r\n // propValue: currentSinkMetaData[\"SingleHole\"]\r\n // })\r\n // }\r\n const vanityParent = this.getParent();\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\") && !vanityParent.isDoubleVanity()) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n // const countertopSize = vanityParent.counterTopSize(this);\r\n // if (countertopSize) {\r\n // conditions.push({\r\n // propName: \"VanitySize\",\r\n // propValue: countertopSize && countertopSize[0] && (countertopSize[0] === \"32\") ? \"48\" : countertopSize\r\n // })\r\n // }\r\n if (vanityParent.sink && vanityParent.sink.activeFeature) {\r\n const sinkType = vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n if (sinkType) {\r\n conditions.push({\r\n propName: \"SinkType\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n })\r\n }\r\n const mountLevel = vanityParent.sink.activeFeature.metaData[\"MountLevel\"]\r\n if (mountLevel) {\r\n conditions.push({\r\n propName: \"MountLevel\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"MountLevel\"]\r\n });\r\n if ((Array.isArray(mountLevel) && mountLevel[0] === \"0\") || mountLevel === \"0\") {\r\n const waterLevel = vanityParent.sink.activeFeature.metaData[\"WaterLevel\"]\r\n if (waterLevel) {\r\n conditions.push({\r\n propName: \"WaterLevel\", // sink WaterLevel - is faucet Height, all logic is in the matchesMetaForCondition func\r\n propValue: vanityParent.sink.activeFeature.metaData[\"WaterLevel\"]\r\n })\r\n }\r\n }\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n arrayOfConditions = arrayOfConditions.map(condition => {\r\n if ((condition.propName === 'MountType' || condition.propName === 'MountHoles') && fromFeature.metaData[condition.propName]) {\r\n return {\r\n propName: condition.propName,\r\n propValue: fromFeature.metaData[condition.propName]\r\n }\r\n }\r\n return condition\r\n });\r\n if (fromFeature.metaData[\"MountLevel\"]) {\r\n arrayOfConditions.push({\r\n propName: \"MountLevel\",\r\n propValue: fromFeature.metaData[\"MountLevel\"]\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize(this)));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"MountType\", METADATA.Inner)\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return removeLookPointFor(parentObject, 6, \"1\", SIDE_POSITIONS[1])\r\n }\r\n return removeLookPointFor(parentObject, 3, \"2\", SIDE_POSITIONS[1])\r\n && removeLookPointFor(parentObject, 1, \"1\", SIDE_POSITIONS[1])\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class Ptrap extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_ptrap';\r\n this.partName = 'Ptrap';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_ptrap\";\r\n this.visible = [Vanity.Types.Custom];\r\n // this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n // handleClick(ignoreLocked) {\r\n // const vanityParent = this.getParent().getParent();\r\n // if ((vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand && vanityParent.vanity_type !== VANITY_TYPES.vanity_console)) {\r\n // if (vanityParent.vanityConsole && vanityParent.vanityConsole.activeFeature) {\r\n // vanityParent.vanityConsole.disabled = false;\r\n // vanityParent.vanity_type = VANITY_TYPES.vanity_console;\r\n // } else if (vanityParent.vanityWashstand && vanityParent.vanityWashstand.activeFeature) {\r\n // vanityParent.vanityWashstand.disabled = false;\r\n // vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n // }\r\n // }\r\n // super.handleClick(ignoreLocked);\r\n // vanityParent.updateVanityParts();\r\n // }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return (vanityParent.vanity_type === VANITY_TYPES.vanity_cabinet && (!vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature))\r\n || (vanityParent.vanity_type === VANITY_TYPES.vanity_washstand && (!vanityParent.vanityWashstand || !vanityParent.vanityWashstand.activeFeature))\r\n || (vanityParent.vanity_type === VANITY_TYPES.vanity_console && (!vanityParent.vanityConsole || !vanityParent.vanityConsole.activeFeature))\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // console.log(\"conditions\", conditions);\r\n // console.log(\"this\", this.activeFeature ? this.activeFeature.metaData : \"\");\r\n // return conditions\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(vanityParent.vanity_type, \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type && (vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet) && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nexport default class VanityWashstand extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_washstand';\r\n this.partName = 'Washstand';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_washstand\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n const vanityParent = this.getParent();\r\n if (vanityParent && vanityParent.wsTowelBar) {\r\n vanityParent.wsTowelBar.disabled = this.disabled || !vanityParent.wsTowelBar.canBeEnabled(); // true or check if it can be enabled;;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n super.handleClick(ignoreLocked);\r\n updateSinkWithNewFeature(this);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand && !!this.activeFeature\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_washstand && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class VanityMiddle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_middle';\r\n this.partName = 'Vanity Middle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_middle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet\r\n || !vanityParent.vanityCabinet.activeFeature\r\n || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n || (vanityParent.vanityCabinet.layerPositions && vanityParent.vanityCabinet.layerPositions[\"C\"])\r\n || (this.activeFeature && !this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingVanity = this.getParent().getActiveSkuFromRelatedItem(\"vanity_cabinet\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class DrawerPull extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_drawer_pull';\r\n this.partName = 'Drawer Pull';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_drawer_pull\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_cabinet;\r\n super.handleClick(ignoreLocked);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingVanity = this.getParent().getActiveSkuFromRelatedItem(VANITY_TYPES.vanity_cabinet);\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, VANITY_TYPES} from \"../../constants\";\r\n\r\nexport default class WSTowelBar extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_ws_towel_bar';\r\n this.partName = 'WS Towel Bar';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_ws_towel_bar\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_washstand;\r\n super.handleClick(ignoreLocked);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityWashstand || !vanityParent.vanityWashstand.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_washstand\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_washstand\");\r\n if (activeMatchingSink) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingSink\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint() {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_washstand\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES, LOOK_ROOM_TYPES} from \"../../constants\";\r\nimport {removeLookPointFor} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {getCurrentRoomType} from \"../../../../appLayout\";\r\n\r\nexport default class VanityLegs extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_legs';\r\n this.partName = 'Vanity Legs';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_legs\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return !vanityParent.vanityCabinet || !vanityParent.vanityCabinet.activeFeature || vanityParent.vanity_type !== VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n const activeMatchingVanity = vanityParent.getActiveSkuFromRelatedItem(\"vanity_cabinet\");\r\n if (activeMatchingVanity) {\r\n conditions.push({\r\n propName: \"MatchingFeature\",\r\n propValue: activeMatchingVanity\r\n });\r\n }\r\n const activeSideMeta = vanityParent.getActiveMatchingMetaFromRelatedItem(\"vanity_cabinet\", \"Side\");\r\n if (activeSideMeta && activeSideMeta.includes(\"C\")) {\r\n conditions.push({\r\n propName: \"Side\",\r\n propValue: activeSideMeta\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n if (getCurrentRoomType() === LOOK_ROOM_TYPES.as) {\r\n return parentObject.layerPosition !== SIDE_POSITIONS[0] && removeLookPointFor(parentObject, 6, \"1\")\r\n }\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_cabinet\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions, SIDE_POSITIONS, VANITY_TYPES} from \"../../constants\";\r\nimport {updateSinkWithNewFeature} from \"../../../lookNavigation/lookNavigationFunctions\";\r\n\r\nexport default class VanityConsole extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_console';\r\n this.partName = 'Console';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_console\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.toggleLayerPositions();\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const vanityParent = this.getParent().getParent();\r\n vanityParent.vanity_type = VANITY_TYPES.vanity_console;\r\n super.handleClick(ignoreLocked);\r\n updateSinkWithNewFeature(this);\r\n vanityParent.updateVanityParts();\r\n }\r\n\r\n hideLayerCondition() {\r\n const vanityParent = this.getParent();\r\n return vanityParent.vanity_type !== VANITY_TYPES.vanity_console && !!this.activeFeature\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const conditions = super.getArrayOfConditions();\r\n // const activeMatchingSink = this.getParent().getActiveSkuFromRelatedItem(\"vanity_sink\");\r\n // if (activeMatchingSink) {\r\n // conditions.push({\r\n // propName: \"MatchingFeature\",\r\n // propValue: activeMatchingSink\r\n // });\r\n // }\r\n // return conditions\r\n // }\r\n\r\n canDisplayDemoPoint(parentObject) {\r\n return this.getParent().vanity_type === VANITY_TYPES.vanity_console && (parentObject.layerPosition !== SIDE_POSITIONS[0])\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class DoorHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'door_handle';\r\n this.partName = 'Door Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.door_handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n return conditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {createParentPositions} from \"../../constants\";\r\n\r\nexport default class DrawerHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'drawer_handle';\r\n this.partName = 'Drawer Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.drawer_handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n if (isChild) {\r\n createParentPositions(this);\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.counterTopSize(this)\r\n })\r\n return conditions\r\n }\r\n}\r\n","import workspace from \"../../workspace\";\r\nimport {findLowestRightmostPoint} from \"../../../../../helpers/coordinatesHelper\";\r\nimport {canShapeBeAutoShifted, getLineDirection} from \"../../../../../helpers/shapeHelper\";\r\nimport sqftShapeManager from \"../../../store/sqftShapeManager\";\r\nimport {getPointDistance} from \"../../../../../helpers/sqftHelper\";\r\nimport {isHorizontalDirection, isVerticalDirection} from \"../../../helpers/lineHelper\";\r\nimport workspaceControllers from \"../../../store/workspaceControllers\";\r\nimport sqftShapeIntersectionsManager from \"../../../store/sqftShapeIntersectionsManager\";\r\n\r\nexport default class ShapeAutoShuffle {\r\n __shape;\r\n\r\n constructor(shape) {\r\n this.__shape = shape;\r\n }\r\n\r\n handlePlaceShapeOnTheLine = () => {\r\n //Auto Shuffle\r\n const hoveredLines = workspace.getHoveredLines([this.__shape.id]);\r\n\r\n if (hoveredLines.length > 0) {\r\n // Get relevant shapes and lines\r\n const hoveredLine = this.getHoveredLine(hoveredLines);\r\n const hoveredShape = hoveredLine.getParent();\r\n\r\n if (canShapeBeAutoShifted(this.__shape, hoveredShape)) {\r\n const newPosition = this.calculateNewPosition(hoveredLine, hoveredShape);\r\n\r\n if (newPosition) {\r\n // Move shape to new positions\r\n this.moveShapeToPositionAndRotate(newPosition, hoveredLine);\r\n\r\n //set same snapped shape group before get shapes to shift\r\n workspaceControllers.snappedShapeGroups.setSameSnappedShapesGroup(this.__shape, hoveredShape);\r\n\r\n //Get shapes to shift\r\n const shapesToShift = this.getShapesToShift(hoveredShape, newPosition);\r\n //console.log(\"shapesToShift\", shapesToShift);\r\n\r\n // Calculate new positions\r\n const [xDiff, yDiff] = this.calculatePositionDiffForOtherShapes(hoveredLine);\r\n this.moveShapesToPositions(shapesToShift, xDiff, yDiff);\r\n\r\n this.__shape.resetState();\r\n sqftShapeIntersectionsManager.updateShapesIntersections();\r\n workspaceControllers.snappedShapeGroups.updateShapesSnappedGroups(true);\r\n workspace.getHoveredLines(); // update hovered lines\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Will return line for the lowest and rightmost shape\r\n * @param hoveredLines\r\n */\r\n getHoveredLine = (hoveredLines) => {\r\n const hoveredLinesShapes = hoveredLines.map(line => line.getParent());\r\n const lowestRightmostPoint = findLowestRightmostPoint(hoveredLinesShapes.map(shape => shape.getPosition()));\r\n const shapeToShift = hoveredLinesShapes.find(shape => {\r\n return shape.getPosition() === lowestRightmostPoint\r\n && shape.id !== this.__shape.id // skip current moving shape\r\n });\r\n\r\n return hoveredLines.find(line => line.getParent().id === shapeToShift.id);\r\n }\r\n\r\n /**\r\n * Will return all shapes that are lower or on the same line then point\r\n * @param hoveredShape\r\n * @param point\r\n */\r\n getShapesToShift = (hoveredShape, point) => {\r\n const snappedShapeGroup = hoveredShape.shapeAbsolute.getSnappedShapeGroup();\r\n if (snappedShapeGroup !== null && snappedShapeGroup !== undefined) {\r\n const snappedShapes = workspaceControllers.snappedShapeGroups.getSnappedShapes(snappedShapeGroup);\r\n if (snappedShapes) {\r\n const snappedShapesWithoutMovingShape = snappedShapes.filter(shape =>\r\n shape.id !== this.__shape.id\r\n && (hoveredShape.partId === shape.partId\r\n || hoveredShape.partId === shape.parentPartId\r\n || (hoveredShape.parentPartId && hoveredShape.parentPartId === shape.partId) //add spacers\r\n )\r\n )\r\n return this.findShapesRightAndBelow(snappedShapesWithoutMovingShape, point);\r\n } else {\r\n return this.findShapesRightAndBelow(hoveredShape, point);\r\n }\r\n }\r\n return []\r\n }\r\n\r\n /**\r\n * TODO diagonal\r\n */\r\n calculateNewPosition(hoveredLine, shapeToShift) {\r\n const shapeToShiftMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([shapeToShift]);\r\n //console.log(\"shapeToShiftMeasurementPoints\", shapeToShiftMeasurementPoints);\r\n //console.log(\"shapeToShift\", shapeToShift);\r\n\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n\r\n let newShapePosition = null;\r\n const hoveredLinePointFromPosOnWorkspace = hoveredLine.from.getPointPosOnWorkspace();\r\n if (isVerticalDirection(hoveredLineDirection)) {\r\n // Check whether it is shape start or end\r\n if (shapeToShiftMeasurementPoints[1].x === hoveredLinePointFromPosOnWorkspace.x) {\r\n newShapePosition = shapeToShiftMeasurementPoints[1];\r\n // Shift shape only if it is first line\r\n } else if (shapeToShiftMeasurementPoints[0].x === hoveredLinePointFromPosOnWorkspace.x) {\r\n newShapePosition = shapeToShiftMeasurementPoints[0];\r\n }\r\n } else if (isHorizontalDirection(hoveredLineDirection)) {\r\n // Check whether it is shape start or end\r\n if (shapeToShiftMeasurementPoints[0].y === hoveredLinePointFromPosOnWorkspace.y) {\r\n newShapePosition = shapeToShiftMeasurementPoints[0];\r\n // Shift shape only if it is first line\r\n } else if (shapeToShiftMeasurementPoints[3].y === hoveredLinePointFromPosOnWorkspace.y) {\r\n newShapePosition = shapeToShiftMeasurementPoints[3];\r\n }\r\n }\r\n\r\n return newShapePosition\r\n }\r\n\r\n /**\r\n *\r\n */\r\n calculatePositionDiffForOtherShapes(hoveredLine) {\r\n let xDiff = 0;\r\n let yDiff = 0;\r\n const thisShapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([this.__shape]);\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n if (isVerticalDirection(hoveredLineDirection)) {\r\n xDiff = getPointDistance(thisShapeMeasurementPoints[0], thisShapeMeasurementPoints[1]);\r\n } else if (isHorizontalDirection(hoveredLineDirection)) {\r\n yDiff = getPointDistance(thisShapeMeasurementPoints[3], thisShapeMeasurementPoints[0]);\r\n }\r\n\r\n return [xDiff, yDiff]\r\n }\r\n\r\n /**\r\n *\r\n */\r\n moveShapesToPositions(shapesToShift, xDiff, yDiff) {\r\n shapesToShift.forEach(shape => {\r\n const shapeCurrentPos = shape.getPosition();\r\n const shapeNewPos = {x: shapeCurrentPos.x + xDiff, y: shapeCurrentPos.y + yDiff};\r\n shape.setPosition(shapeNewPos);\r\n shape.shapeAbsolute.setAbsolutePos(shapeNewPos);\r\n })\r\n }\r\n\r\n /**\r\n * Moves and rotates the shape based on the line's orientation and the current rotation angle.\r\n */\r\n moveShapeToPositionAndRotate(newPosition, hoveredLine) {\r\n // Set the new position\r\n this.__shape.setPosition(newPosition);\r\n this.__shape.shapeAbsolute.setAbsolutePos(newPosition);\r\n\r\n // Determine the required rotation based on the line direction\r\n const hoveredLineDirection = getLineDirection(hoveredLine.from, hoveredLine.to);\r\n\r\n const isHorizontal = isHorizontalDirection(hoveredLineDirection);\r\n const isVertical = isVerticalDirection(hoveredLineDirection);\r\n const hoveredShape = hoveredLine.getParent();\r\n\r\n // Rotate by -90 degrees (right) if the current angle is 90 and the line is vertical\r\n if (hoveredShape.rotatedDegrees === 270 && isHorizontal) {\r\n let desiredAngle = 270;\r\n let normalizedCurrentAngle = ((this.__shape.rotatedDegrees % 360) + 360) % 360;\r\n let angleDifference = desiredAngle - normalizedCurrentAngle;\r\n this.__shape.rotate(angleDifference, this.__shape.Direction.LEFT, false);\r\n //todo\r\n //console.log(\"shape.getPosition()\", this.__shape.getPosition());\r\n //this.moveShapesToPositions([this.__shape], -this.__shape.getWidth(), -this.__shape.getHeight());\r\n //console.log(\"shape.getPosition()\", this.__shape.getPosition());\r\n //debugger // eslint-disable-line no-debugger\r\n }\r\n // Rotate by 90 degrees if the current angle is 0 and the line is horizontal\r\n else if (this.__shape.rotatedDegrees === 0 && isHorizontal) {\r\n this.__shape.rotate(90, this.__shape.Direction.LEFT, false);\r\n }\r\n // Rotate by -90 degrees (right) if the current angle is 90 and the line is vertical\r\n else if (this.__shape.rotatedDegrees === 90 && isVertical) {\r\n this.__shape.rotate(-90, this.__shape.Direction.LEFT, false);\r\n }\r\n\r\n // Calculate the new coordinates for the upper left corner after potential rotation\r\n if (isHorizontalDirection(hoveredLineDirection)) {\r\n // Calculate shift is not needed if the center remains in place\r\n const cos = Math.cos(this.__shape.rotatedDegrees * Math.PI / 180);\r\n const sin = Math.sin(this.__shape.rotatedDegrees * Math.PI / 180);\r\n const originalWidth = this.__shape.getWidth();\r\n const originalHeight = this.__shape.getHeight();\r\n\r\n // Calculate the center coordinates\r\n const centerX = newPosition.x + originalWidth / 2;\r\n const centerY = newPosition.y + originalHeight / 2;\r\n\r\n // Coordinates of the upper left corner after rotation\r\n const upperLeftX = centerX - (originalWidth / 2 * cos + originalHeight / 2 * sin);\r\n const upperLeftY = centerY - (originalWidth / 2 * sin - originalHeight / 2 * cos);\r\n\r\n // Set the new coordinates for the upper left corner\r\n this.__shape.setPosition({\r\n x: upperLeftX,\r\n y: upperLeftY\r\n });\r\n this.__shape.shapeAbsolute.setAbsolutePos({\r\n x: upperLeftX,\r\n y: upperLeftY\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Function for finding all shapes that are to the right and below a point\r\n * @param {Array} shapes\r\n * @param referencePosition\r\n * @returns {Array}\r\n */\r\n findShapesRightAndBelow(shapes, referencePosition) {\r\n const resultShapes = [];\r\n\r\n shapes.forEach(shape => {\r\n const shapeMeasurementPoints = sqftShapeManager.getMinMaxShapesPointsOnWorkspace([shape]);\r\n const shapeTopLeftPoint = shapeMeasurementPoints[0];\r\n\r\n if (shapeTopLeftPoint.x >= referencePosition.x && shapeTopLeftPoint.y >= referencePosition.y) {\r\n resultShapes.push(shape);\r\n }\r\n });\r\n\r\n return resultShapes;\r\n }\r\n}\r\n","import Polygon from \"../shapes/layouts/polygon\";\r\nimport {IRONING_BOARD_DIRECTION} from \"./cabinetShapes\";\r\n\r\nexport const createIroningBoardShape = (width, height, radius, direction) => {\r\n const points = [];\r\n const steps = 20; // number of points for the arc\r\n\r\n // Straight lines\r\n points.push({ x: 0, y: 0 });\r\n points.push({ x: width, y: 0 });\r\n //points.push({ x: width, y: height});\r\n\r\n if (direction === IRONING_BOARD_DIRECTION.left) {\r\n for (let i = steps; i >= 0; i--) {\r\n const angle = (Math.PI / 2) * (i / steps); // quarter circle\r\n const x = width - radius * Math.cos(angle);\r\n const y = height - radius + radius * Math.sin(angle);\r\n points.push({x, y});\r\n }\r\n }\r\n\r\n if (direction === IRONING_BOARD_DIRECTION.right) {\r\n for (let i = 0; i <= steps; i++) {\r\n const angle = (Math.PI / 2) * (i / steps); // quarter circle\r\n const x = width - radius + radius * Math.cos(angle);\r\n const y = height - radius + radius * Math.sin(angle);\r\n points.push({ x, y });\r\n }\r\n }\r\n\r\n // Straight lines\r\n //points.push({ x: 0, y: height - radius });\r\n\r\n return new Polygon(points, true, true);\r\n};\r\n","import {post} from \"../../../api/api\";\r\n//import {getResponse, handleHttpError} from \"../../../api/api\";\r\n\r\nexport function getUrlBase() {\r\n let {subDomain} = document.kvConfig;\r\n let {domain} = document.kvConfig;\r\n domain = domain || 'quotesflooring.com';\r\n subDomain = subDomain ? subDomain + '.' : '';\r\n\r\n return (location.port === \"9007\" || document.kvConfig.kioskMode) ? `${subDomain}${domain}` : \"\";\r\n}\r\n\r\nexport const sqftPost = async (url, data, options = {}) => {\r\n return post(url, data, options);\r\n //void post;\r\n\r\n // const fullUrl = 'https://quotekitchenandbath.com' + url;\r\n // const isFormData = Object.prototype.toString.call(data) === '[object FormData]';\r\n // const headers = {\r\n // 'Accept': 'application/json'\r\n // };\r\n // if (!isFormData) {\r\n // headers['Content-Type'] = 'application/json';\r\n // }\r\n //\r\n // return fetch(fullUrl, {\r\n // method: 'post',\r\n // body: isFormData ? data : JSON.stringify(data),\r\n // headers: new Headers(headers),\r\n // signal: options.signal,\r\n // })\r\n // .then(handleHttpError)\r\n // .then(response => getResponse(response))\r\n // .catch(reason => {\r\n // if (reason.name === 'AbortError') {\r\n // console.log('Fetch aborted');\r\n // } else {\r\n // return Promise.reject(reason);\r\n // }\r\n // });\r\n};\r\n\r\nexport const fetchDataWithCancellation = (url, key, shouldSaveDataInStore = false) => {\r\n return async () => {\r\n const controller = new AbortController();\r\n const signal = controller.signal;\r\n\r\n store.dispatch({ type: 'REQUEST_STARTED', payload: { key, controller } });\r\n\r\n try {\r\n const response = await fetch(url, { signal });\r\n if (!response.ok) {\r\n throw new Error('Network response was not ok.');\r\n }\r\n\r\n const data = await response.json();\r\n store.dispatch({ type: 'REQUEST_SUCCESS', payload: { key, data: shouldSaveDataInStore ? data : null} });\r\n\r\n return data\r\n } catch (error) {\r\n if (error.name === 'AbortError') {\r\n console.log('Fetch aborted:', key);\r\n } else {\r\n store.dispatch({ type: 'REQUEST_FAILURE', payload: { key, error: error.message } });\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport const cancelFetch = (key) => {\r\n return () => {\r\n const state = store.getState();\r\n const controller = state.sqftState.requests[key];\r\n\r\n if (controller) {\r\n controller.abort();\r\n store.dispatch({ type: 'REQUEST_CANCELLED', payload: { key } });\r\n store.dispatch({ type: 'REMOVE_CONTROLLER', payload: { key } });\r\n }\r\n };\r\n};\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport Movable from \"./../mixin/movable\";\r\nimport COLOR_THEMES from \"../../../store/colorThemes\";\r\nimport PointV2, {CORE_POINT_LAYOUTS} from \"../../shapes/pointV2\";\r\nimport RenderFigures from \"../../../helpers/renderFigures\";\r\n\r\nexport default class Box {\r\n\r\n design = {\r\n fillStyle: '#6A6A6A',\r\n fillStyleDelete: 'rgba(208,1,27,0.3)', //'rgba(253,2,33, 0.5)',\r\n strokeStyle: COLOR_THEMES[config.activeTheme].primary,\r\n lineWidth: 1,\r\n borderRadius: 10,\r\n shadowColor: '#eeeeee',\r\n shadowBlur: 15,\r\n minimumHeight: 4,\r\n minimumWidth: 15,\r\n width: 50,\r\n height: 10\r\n };\r\n params = {\r\n isCenteredByY: false\r\n };\r\n points = {};\r\n children = [];\r\n _mixin = {\r\n movable: null\r\n };\r\n\r\n constructor(pos, design) {\r\n this.design = Object.assign(this.design, design);\r\n\r\n this.mixin.movable = new Movable(pos.x, pos.y, this.design.width, this.design.height, EventManager.priorities.SEGMENT, this);\r\n this.initPoints();\r\n this.initEvents();\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.BOX\r\n );\r\n\r\n EventManager.addEvent(\r\n EventManager.events.MOUSE_UP,\r\n this.onMouseUp.bind(this),\r\n this,\r\n EventManager.priorities.SEGMENT\r\n );\r\n }\r\n\r\n delete() {\r\n this.deleteEvents();\r\n workspace.textBoxManager.removeBox(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n if (this.mixin.movable) {\r\n this.mixin.movable.deregisterEvents();\r\n }\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].deregisterEvents();\r\n }\r\n }\r\n this.isHidden = true;\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n if (this.mixin.movable) {\r\n this.mixin.movable.reInitEvents();\r\n }\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].reInitEvents();\r\n }\r\n }\r\n this.isHidden = true;\r\n }\r\n\r\n deleteEvents() {\r\n EventManager.resetCursor(this);\r\n EventManager.removeEvent(this);\r\n EventManager.removeEvent(this.mixin.movable);\r\n\r\n for(let child of this.children) {\r\n child.delete();\r\n }\r\n\r\n for (const point in this.points) {\r\n if (this.points.hasOwnProperty(point)) {\r\n this.points[point].delete();\r\n }\r\n }\r\n }\r\n\r\n get width() {\r\n return this.design.width;\r\n }\r\n\r\n set width(value) {\r\n this.design.width = value;\r\n }\r\n\r\n get height() {\r\n return this.design.height;\r\n }\r\n\r\n set height(value) {\r\n this.design.height = value;\r\n }\r\n\r\n get mixin() {\r\n return this._mixin;\r\n }\r\n\r\n set mixin(value) {\r\n this._mixin = value;\r\n }\r\n\r\n get posX() {\r\n return this.mixin.movable.posX;\r\n }\r\n\r\n get posY() {\r\n return this.mixin.movable.posY;\r\n }\r\n\r\n set posX(value) {\r\n this.mixin.movable.posX = value;\r\n }\r\n\r\n set posY(value) {\r\n this.mixin.movable.posY = value;\r\n }\r\n\r\n initPoints() {\r\n let point;\r\n\r\n // 0 1 2\r\n // 3 4\r\n // 5 6 7\r\n\r\n let pointsParams = [\r\n // {x: 0, y: 0}, // {x: this.posX, y: this.posY},\r\n // {x: this.design.width / 2, y: 0},\r\n // {x: this.design.width, y: 0},\r\n // {x: 0, y: this.design.height / 2},\r\n {id: 'p4', x: this.design.width, y: this.design.height / 2, isCenteredByY: true, isResizedByPoint: true, isScaledByPoint: false, radius: 10, layout: CORE_POINT_LAYOUTS.ear},\r\n // {x: 0, y: this.design.height},\r\n // {x: this.design.width / 2, y: this.design.height},\r\n {id: 'p7', x: this.design.width, y: this.design.height, isCenteredByY: true, isResizedByPoint: false, isScaledByPoint: true, radius: 10, layout: CORE_POINT_LAYOUTS.resize}\r\n ];\r\n for (let [i, pointParams] of pointsParams.entries()) {\r\n void i;\r\n let pointState = {\r\n priority: EventManager.priorities.BOX_POINT,\r\n movable: true,\r\n isCenteredByY: pointParams.isCenteredByY,\r\n isResizedByPoint: pointParams.isResizedByPoint,\r\n isScaledByPoint: pointParams.isScaledByPoint,\r\n isVisibleOnHover: true\r\n };\r\n let pointDesign = {\r\n radius: pointParams.radius,\r\n lineWidth: 1,\r\n layout: pointParams.layout\r\n };\r\n point = new PointV2(pointParams.x, pointParams.y, this, pointState, pointDesign);\r\n point.isResizedByPoint = true;\r\n\r\n this.points[pointParams.id] = point;\r\n }\r\n }\r\n\r\n getOffset = function() {\r\n let self = this;\r\n\r\n return getPointField(self.posX, self.posY);\r\n };\r\n\r\n getPosition = function() {\r\n let self = this;\r\n\r\n return {x: self.posX, y: self.posY};\r\n };\r\n\r\n getPointField = function(posX, posY) {\r\n let fieldWidth = config.fieldWidth,\r\n center = fieldWidth / 2;\r\n\r\n let scale = workspace.getScale(),\r\n offset = workspace.getOffset();\r\n\r\n return {\r\n x: (posX * scale) + offset.x - center,\r\n y: (posY * scale) + offset.y - center\r\n };\r\n };\r\n\r\n onMouseUp = () => {\r\n if (EventManager.getCursor().indexOf(\"delete\") >= 0 && this.mixin.movable.state.hovering) {\r\n this.delete();\r\n }\r\n };\r\n\r\n render = (ctx) => {\r\n let pointField = getPointField(this.posX, this.posY);\r\n let scale = config.scale;\r\n let width = this.mixin.movable.width * scale;\r\n let height = this.mixin.movable.height * scale;\r\n let radius = this.design.borderRadius;\r\n let fill = this.design.fillStyle;\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.fillStyle = this.design.fillStyle;\r\n ctx.strokeStyle = this.design.strokeStyle;\r\n ctx.lineWidth = this.design.lineWidth;\r\n //ctx.shadowColor = this.design.shadowColor;\r\n //ctx.shadowBlur = this.design.shadowBlur;\r\n\r\n if(EventManager.getCursor().indexOf(\"delete\") >= 0 && this.mixin.movable.state.hovering) {\r\n ctx.fillStyle = this.design.fillStyleDelete;\r\n }\r\n\r\n //ctx.rect(pointField.x, pointField.y, this.design.width * scale, this.design.height * scale);\r\n //ctx.rect(pointField.x, pointField.y, this.mixin.movable.width * scale, this.mixin.movable.height * scale);\r\n RenderFigures.roundedRect(ctx, pointField.x, pointField.y, width, height, radius, fill, true);\r\n\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.closePath();\r\n ctx.restore();\r\n };\r\n}\r\n","import EventManager from \"../../../store/sqftEventManager\";\r\nimport workspace from \"../../workspace\";\r\nimport config from \"../../../store/sqftConfig\";\r\nimport ModelText from \"./model/modelText\";\r\nimport {getPointField} from \"../../../../../helpers/sqftHelper\";\r\nimport $ from \"jquery\";\r\nimport {setIsItextEditing} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport store from \"../../../../../../../store\";\r\n\r\nexport default class IText {\r\n\r\n _modelText;\r\n _fontHeight = 1;\r\n _hMargin = 11;\r\n wMargin = 14;\r\n fillStyle = '#999999'; // fontColor\r\n fillStyleGray = '#999999';\r\n fillStyleTransparent = \"rgba(255, 255, 255, 0.5)\";\r\n lineHeight = 1.2; //1.286;\r\n placeholder = 'Add text by dbl click';\r\n state = {\r\n active: false\r\n };\r\n\r\n constructor(txt, font, posX, posY, width, height, angle, parent = workspace) {\r\n if(txt === ''){\r\n txt = this.placeholder;\r\n }\r\n this.modelText = new ModelText(txt, font, posX, posY, width, height, angle, parent);\r\n this.initEvents();\r\n if(parent.children) {\r\n parent.children.push(this);\r\n }\r\n }\r\n\r\n get modelText() {\r\n return this._modelText;\r\n }\r\n\r\n set modelText(value) {\r\n this._modelText = value;\r\n }\r\n\r\n get fontHeight() {\r\n return this._fontHeight * config.scale / config.defaultScale + (this.getHeight() / 5); // todo wtf /5 ?\r\n }\r\n\r\n set fontHeight(value) {\r\n this._fontHeight = value;\r\n }\r\n\r\n get hMargin() {\r\n // todo perhaps make borders smaller\r\n // return this._hMargin * config.scale / config.defaultScale;\r\n return this._hMargin;\r\n }\r\n\r\n set hMargin(value) {\r\n this._hMargin = value;\r\n }\r\n\r\n initEvents() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n this.render.bind(this),\r\n this,\r\n EventManager.priorities.BOX\r\n );\r\n\r\n EventManager.addEvent(\r\n EventManager.events.DBLCLICK,\r\n this.onDblClick.bind(this),\r\n this,\r\n EventManager.priorities.IMAGE\r\n );\r\n\r\n //todo remove deleting from menu here\r\n // EventManager.addEvent(\r\n // EventManager.events.MOUSE_UP,\r\n // this.onMouseUp.bind(this),\r\n // this,\r\n // EventManager.priorities.BOX\r\n // );\r\n }\r\n\r\n delete() {\r\n this.deleteEvents();\r\n }\r\n\r\n deleteEvents() {\r\n EventManager.removeEvent(this);\r\n }\r\n\r\n deregisterEvents = () => {\r\n EventManager.removeEvent(this);\r\n this.isHidden = true;\r\n }\r\n\r\n reInitEvents = () => {\r\n this.initEvents();\r\n this.isHidden = false;\r\n }\r\n\r\n getWidth() {\r\n let scale = config.scale;\r\n let parentWidth = this.modelText.parent.width * scale;\r\n\r\n return parentWidth ? parentWidth: this.modelText.width * scale ;\r\n }\r\n\r\n getHeight() {\r\n let scale = config.scale;\r\n let parentHeight = this.modelText.parent.height * scale;\r\n\r\n return parentHeight ? parentHeight : this.modelText.height * scale ;\r\n }\r\n\r\n getPosX() {\r\n return this.modelText.parent.posX ? this.modelText.parent.posX : this.modelText.posX;\r\n }\r\n\r\n getPosY() {\r\n return this.modelText.parent.posY ? this.modelText.parent.posY : this.modelText.posY;\r\n }\r\n\r\n onDblClick(mousePos) {\r\n void mousePos;\r\n let self = this;\r\n let state = this.modelText.parent\r\n ? this.modelText.parent.mixin.movable.state\r\n : this.modelText.state; //todo\r\n\r\n if (state.hovering && !document.querySelector(\".i-text\")) {\r\n window.lineInputFocused = true;\r\n EventManager.stealCursor();\r\n const ENTER_KEY = 13;\r\n const textarea = this.createTextArea();\r\n\r\n document.querySelector(\".sqft-main-grid\").appendChild(textarea);\r\n\r\n textarea.focus();\r\n textarea.onkeydown = function(e) {\r\n if (e.keyCode === ENTER_KEY) {\r\n e.target.blur();\r\n }\r\n };\r\n\r\n const blur = function (e) {\r\n if (!e.target.closest('.i-text')) {\r\n textarea.blur();\r\n }\r\n };\r\n\r\n textarea.oninput = function() {\r\n this.style.height = \"5px\";\r\n this.style.height = (this.scrollHeight)+\"px\";\r\n };\r\n\r\n textarea.onblur = function () {\r\n window.lineInputFocused = false;\r\n self.modelText.txt = textarea.value;\r\n // restore placeholder\r\n if (textarea.value === '') {\r\n self.modelText.txt = self.placeholder;\r\n }\r\n self.fillStyle = self.fillStyleGray; // return color back to gray\r\n textarea.parentNode.removeChild(textarea);\r\n document.removeEventListener(\"click\", blur);\r\n store.dispatch(setIsItextEditing(false));\r\n };\r\n\r\n this.fillStyle = this.fillStyleTransparent; // make color transparent\r\n\r\n $(textarea).on(\"change keyup paste\", function() {\r\n self.modelText.txt = $(this).val();\r\n });\r\n textarea.onchange = function (event) {\r\n void event;\r\n self.modelText.txt = textarea.value;\r\n }.bind({ hoveredText: state.hoveredText});\r\n\r\n setTimeout(() => {\r\n document.addEventListener(\"click\", blur);\r\n }, 500);\r\n store.dispatch(setIsItextEditing(true));\r\n return false;\r\n }\r\n }\r\n\r\n wrapText(ctx, text, x, y, maxWidth, fontSize, fontFace) {\r\n let firstY = y;\r\n let lineHeight = fontSize * this.lineHeight;\r\n\r\n ctx.font = fontSize + \"px \" + fontFace; // Set the font for the context\r\n\r\n // Split the text into lines using wrapWord (handles word wrapping and ellipsis)\r\n let lines = this.wrapWords(ctx, text, maxWidth, 1);\r\n\r\n // Loop through each line and draw it on the canvas\r\n for (let line of lines) {\r\n ctx.fillText(line, x, y);\r\n y += lineHeight;\r\n }\r\n\r\n let scale = workspace.getScale();\r\n\r\n // Adjust the parent box height based on the new text block height\r\n this.modelText.parent.mixin.movable.height = (y - firstY) / scale + (lineHeight + this.hMargin * 2) / scale;\r\n\r\n // Adjust point positions based on the new height\r\n this.modelText.parent.points.p4.modelCorePoint.mixins.movable.posY = this.modelText.parent.mixin.movable.height / 2;\r\n this.modelText.parent.points.p7.modelCorePoint.mixins.movable.posY = this.modelText.parent.mixin.movable.height;\r\n }\r\n\r\n\r\n // onMouseUp = () => {\r\n // if (EventManager.getCursor().indexOf(\"delete\") >= 0 && this.modelText.parent.mixin.movable.state.hovering) {\r\n // this.delete();\r\n // }\r\n // };\r\n\r\n render(ctx) {\r\n //let angle = this.modelText.angle || 0;\r\n\r\n let fontHeight = this.fontHeight;\r\n let pointField = getPointField(this.modelText.posX, this.modelText.posY, this.modelText.parent);\r\n // let pointField = getPointField(this.getPosX(), this.getPosY(), this.modelText.parent);\r\n\r\n //let txtWidth = ctx.measureText(this.modelText.txt).width + 2 * this.hMargin;\r\n //let scale = config.scale;\r\n let width = this.getWidth();\r\n //let height = this.getHeight();\r\n\r\n ctx.save();\r\n ctx.font = fontHeight + 'px ' + this.modelText.font;\r\n ctx.textAlign = 'left';\r\n ctx.textBaseline = 'top';\r\n ctx.fillStyle = this.fillStyle;\r\n\r\n //TODO remove\r\n //ctx.translate(pointField.x, pointField.y);\r\n //ctx.translate(pointField.x + width / 2, pointField.y); //centering for scale\r\n //ctx.rotate(angle); // text rotation\r\n //ctx.lineWidth = 1;\r\n //ctx.strokeRect(-width / 2, 0, width, height); //rect around text\r\n //ctx.scale(width / txtWidth, height / fontHeight); // text scale\r\n //ctx.translate(this.hMargin, 0);\r\n //ctx.fillText(this.modelText.txt, -txtWidth/2, 0, width / 2);\r\n // this.wrapText(ctx, this.modelText.txt, -txtWidth/2, 0, width, this.fontHeight, this.modelText.font);\r\n //ctx.fillText(this.modelText.txt, pointField.x, pointField.y);\r\n this.wrapText(\r\n ctx,\r\n this.modelText.txt,\r\n pointField.x + this.wMargin,\r\n pointField.y + this.hMargin,\r\n width - this.wMargin,\r\n this.fontHeight,\r\n this.modelText.font\r\n );\r\n\r\n ctx.restore();\r\n }\r\n\r\n createTextArea() {\r\n let textarea = document.createElement(\"textarea\");\r\n let pointField = getPointField(this.modelText.posX, this.modelText.posY, this.modelText.parent);\r\n let scale = workspace.getScale();\r\n\r\n textarea.className = \"i-text\";\r\n textarea.style.left = pointField.x + this.wMargin + \"px\";\r\n textarea.style.top = pointField.y + this.hMargin + \"px\"; // todo -2 hook for first line\r\n textarea.style.width = this.getWidth() - this.wMargin + \"px\";\r\n // textarea.style.height = this.getHeight() + \"px\";\r\n textarea.style.height = this.modelText.parent.mixin.movable.height * scale + \"px\";\r\n textarea.style.fontSize = this.fontHeight + \"px\";\r\n textarea.style.lineHeight = this.fontHeight * this.lineHeight + 0.8 + \"px\"; // 2 hook for first line\r\n textarea.style.fontFamily = this.modelText.font;\r\n textarea.style.color = this.fillStyle;\r\n if (this.modelText.txt === this.placeholder) {\r\n textarea.value = '';\r\n } else {\r\n textarea.value = this.modelText.txt;\r\n }\r\n return textarea\r\n }\r\n\r\n /**\r\n * Split the text into lines using wrapWord (handles word wrapping and ellipsis)\r\n * @param ctx\r\n * @param testLine\r\n * @param maxWidth\r\n * @param spaces\r\n * @return {[]}\r\n */\r\n wrapWords(ctx, testLine, maxWidth, spaces) {\r\n let i = 0;\r\n let lines = [];\r\n let currentLine = '';\r\n const ellipsis = '...';\r\n\r\n // Split the text into individual words\r\n const words = testLine.split(' ');\r\n\r\n // Iterate through the words and add them to lines while checking for width\r\n for (let word of words) {\r\n let testLine = currentLine + word + ' ';\r\n let testWidth = ctx.measureText(testLine).width;\r\n\r\n // If adding the word exceeds maxWidth, move it to the next line\r\n if (testWidth > maxWidth) {\r\n // If the word itself is too long, truncate it and add ellipsis\r\n if (ctx.measureText(word).width > maxWidth) {\r\n while (ctx.measureText(word).width > maxWidth && i < word.length) {\r\n if (ctx.measureText(word.slice(0, i + spaces) + ellipsis).width >= maxWidth) {\r\n lines.push(word.slice(0, i) + ellipsis);\r\n return lines;\r\n }\r\n i++;\r\n }\r\n }\r\n // Push the current line and start a new line with the current word\r\n lines.push(currentLine.trim());\r\n currentLine = word + ' ';\r\n } else {\r\n currentLine = testLine; // Add the word to the current line\r\n }\r\n }\r\n\r\n // Add the last line to the lines array\r\n if (currentLine.length > 0) {\r\n lines.push(currentLine.trim());\r\n }\r\n\r\n return lines;\r\n }\r\n}\r\n","export default class ModelText {\r\n _txt;\r\n _font;\r\n _posX;\r\n _posY;\r\n _width;\r\n _height;\r\n _angle;\r\n _parent;\r\n\r\n constructor(txt, font, posX, posY, width, height, angle, parent) {\r\n this._txt = txt;\r\n this._font = font;\r\n this._posX = posX;\r\n this._posY = posY;\r\n this._width = width;\r\n this._height = height;\r\n this._angle = angle;\r\n this._parent = parent;\r\n }\r\n\r\n get txt() {\r\n return this._txt;\r\n }\r\n\r\n set txt(value) {\r\n this._txt = value;\r\n }\r\n\r\n get font() {\r\n return this._font;\r\n }\r\n\r\n set font(value) {\r\n this._font = value;\r\n }\r\n\r\n get posX() {\r\n return this._posX;\r\n }\r\n\r\n set posX(value) {\r\n this._posX = value;\r\n }\r\n\r\n get posY() {\r\n return this._posY;\r\n }\r\n\r\n set posY(value) {\r\n this._posY = value;\r\n }\r\n\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n set width(value) {\r\n this._width = value;\r\n }\r\n\r\n get height() {\r\n return this._height;\r\n }\r\n\r\n set height(value) {\r\n this._height = value;\r\n }\r\n\r\n get angle() {\r\n return this._angle;\r\n }\r\n\r\n set angle(value) {\r\n this._angle = value;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n set parent(value) {\r\n this._parent = value;\r\n }\r\n\r\n}\r\n","/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isBackspaceKeyCode = (e) => {\r\n return e.keyCode === 8\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isDeleteKeyCode = (e) => {\r\n return e.keyCode === 46\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isLengthKeyCode = (e) => {\r\n return isNumericKey(e) || isCommaKey(e) || isPeriodKey(e) || isSpace(e) || isSlash(e) || e.key === \"'\" || e.key === \"\\\"\"\r\n}\r\n\r\n/**\r\n * @param e KeyboardEvent\r\n */\r\nexport const isNumericKey = (e) => {\r\n return (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)\r\n}\r\n\r\n/**\r\n * is \",\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isCommaKey = (e) => {\r\n return e.keyCode === 188\r\n}\r\n\r\n/**\r\n * is \".\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isPeriodKey = (e) => {\r\n return e.keyCode === 190\r\n}\r\n\r\n/**\r\n * is \" \"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isSpace = (e) => {\r\n return e.keyCode === 32\r\n}\r\n\r\n/**\r\n * is \"/\"\r\n * @param e KeyboardEvent\r\n */\r\nexport const isSlash = (e) => {\r\n return e.keyCode === 191\r\n}\r\n","import uuid from \"uuid\";\r\nimport workspace from \"../workspace\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport store from \"../../../../../../store\";\r\nimport {addSqftCroppedSlabImage} from \"../../../../../../actions/sqftSlabFunctions\";\r\nimport {MOVABLE_IMAGE_TYPES, SHAPE_PART_ID} from \"../../../../constants\";\r\nimport {initTitle} from \"./labels/labelsHelper\";\r\nimport {SLAB_IMAGE_TYPES} from \"../../../../../../reducers/sqftSlabReducer\";\r\n\r\nconst Duplicate = function () {\r\n this.cloneShape = (shape) => {\r\n let shapeData = shape.export();\r\n const workspaceIds = workspace.getObjIds();\r\n const newId = workspaceIds + 1;\r\n const currentShapePosition = shape.getPosition();\r\n\r\n const newShape = workspace.importShape(shapeData);\r\n newShape.setPosition({\r\n x: currentShapePosition.x + 10,\r\n y: currentShapePosition.y + 10,\r\n });\r\n newShape.shapeSlab.__absolutePos = null;\r\n newShape.shapePieces = [];\r\n newShape.setId(newId);\r\n workspace.setObjIds(newId);\r\n this.cloneShapeLines(newShape);\r\n if (newShape.partId === SHAPE_PART_ID.slabPlaceHolder) {\r\n newShape.init({\r\n x: currentShapePosition.x + 10,\r\n y: currentShapePosition.y + 10,\r\n });\r\n initTitle('PLACEHOLDER', SLAB_IMAGE_TYPES.placeholder, newShape);\r\n }\r\n }\r\n this.cloneShapeLines = (shape) => {\r\n const lines = shape.getLines();\r\n for (const line of lines) {\r\n this.cloneShapeLine(line);\r\n }\r\n }\r\n this.cloneShapeLine = (line) => {\r\n const attachedResource = workspace.getAttachedTo(line);\r\n line.id = uuid();\r\n line.from.id = uuid();\r\n if (attachedResource) {\r\n line.isDisabledInPopup = attachedResource.isDisabledInPopup;\r\n attachResource(line, null, attachedResource.type, attachedResource.featureId, null, attachedResource.name, attachedResource.height, uuid());\r\n }\r\n }\r\n\r\n this.cloneMovableImage = (shape) => {\r\n let imageData = shape.export();\r\n const workspaceIds = workspace.getObjIds();\r\n const newId = workspaceIds + 1;\r\n const currentMovableImagePosition = shape.getPosition();\r\n const movableImage = workspace.importImage(imageData);\r\n movableImage.setPosition({\r\n x: currentMovableImagePosition.x + 10,\r\n y: currentMovableImagePosition.y + 10,\r\n });\r\n movableImage.setId(newId);\r\n workspace.setObjIds(newId);\r\n\r\n if (movableImage.type === MOVABLE_IMAGE_TYPES.slabImage) {\r\n store.dispatch(addSqftCroppedSlabImage(movableImage));\r\n }\r\n }\r\n}\r\n\r\nexport default new Duplicate()\r\n","import EventManager from \"../../store/sqftEventManager\";\r\nimport workspace from \"../workspace\";\r\nimport config from \"../../store/sqftConfig\";\r\n\r\nexport default new function() {\r\n var self = this;\r\n const fontColor = \"#999999\";\r\n\r\n this.init = function() {\r\n EventManager.addEvent(\r\n EventManager.events.RENDER,\r\n self.render,\r\n self,\r\n EventManager.priorities.OVERLAY - 1\r\n );\r\n };\r\n this.render = function(ctx) {\r\n let i, text, width, posText,\r\n canvas = workspace.getCanvas(),\r\n canvasWidth = canvas.width,\r\n canvasHeight = canvas.height,\r\n scale = config.scale,\r\n gridSize = config.workspace.gridSize * scale,\r\n adjustedSize = (gridSize / 3),\r\n rulerSize = adjustedSize + 6,\r\n pos = workspace.getPosition(),\r\n start = {\r\n x: (pos.x % gridSize) * -1,\r\n y: (pos.y % gridSize) * -1\r\n };\r\n while(start.y < rulerSize || start.y < 0) {\r\n start.y += gridSize;\r\n }\r\n while(start.x < rulerSize || start.x < 0) {\r\n start.x += gridSize;\r\n }\r\n //render ruler\r\n ctx.clearRect(0, 0, canvasWidth, rulerSize);\r\n ctx.clearRect(0, 0, rulerSize, canvasHeight);\r\n //horizontal ruler\r\n ctx.font = adjustedSize.toString() + \"px sans-serif\";\r\n ctx.fillStyle = fontColor;\r\n for(i = start.x; i < canvasWidth; i+=gridSize) {\r\n text = getText(pos.x + i);\r\n width = ctx.measureText(text).width;\r\n posText = {\r\n x: i - (width / 2),\r\n y: adjustedSize,\r\n width: width,\r\n height: adjustedSize,\r\n text: text\r\n };\r\n ctx.fillText(posText.text, posText.x, posText.y);\r\n }\r\n //vertical ruler\r\n for(i = start.y; i < canvasHeight; i+=gridSize) {\r\n text = Math.round((pos.y + i) / scale).toString();\r\n width = ctx.measureText(text).width;\r\n posText = {\r\n x: adjustedSize,\r\n y: i,\r\n width: width,\r\n height: adjustedSize,\r\n text: text\r\n };\r\n ctx.save();\r\n ctx.translate(posText.x, posText.y);\r\n ctx.rotate(-Math.PI/2);\r\n ctx.textAlign = \"center\";\r\n ctx.fillText(posText.text, 0, 0);\r\n ctx.restore();\r\n }\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = fontColor;\r\n ctx.moveTo(0,rulerSize);\r\n ctx.lineTo(canvasWidth, rulerSize);\r\n ctx.stroke();\r\n\r\n ctx.beginPath();\r\n ctx.lineWidth = 1;\r\n ctx.moveTo(rulerSize, 0);\r\n ctx.lineTo(rulerSize, canvasHeight);\r\n ctx.stroke();\r\n\r\n };\r\n function getText(pos) {\r\n let text = Math.round((pos) / config.scale * config.getMeasureMultiplier());\r\n if(config.measureUnit === \"Metric\") {\r\n text = Math.round(text / 100) * 100;\r\n }\r\n\r\n return text.toString();\r\n }\r\n};\r\n","import config from \"../../store/sqftConfig\";\r\nimport {enableRegularMode, enableSlabMode} from \"../../store/canvasHelper\";\r\nimport store from \"../../../../../../store\";\r\nimport SqftStore from \"../../store/sqftStore\";\r\nimport {showSlabTool} from \"../../../../../../actions/sqftSlabFunctions\";\r\nimport SlabWorkspace from \"../slab/slabWorkspace\";\r\nimport {renderSlabRightPart} from \"../slab/sqftSlabDraw\";\r\nimport sqftEventManager from \"../../store/sqftEventManager\";\r\nimport sqftImageManager from \"../../store/sqftImageManager\";\r\nimport sqftShapeManager from \"../../store/sqftShapeManager\";\r\nimport workspace from \"../workspace\";\r\nimport {MOVABLE_IMAGE_TYPES, SHAPE_PART_ID} from \"../../../../constants\";\r\n\r\nexport default class ResultImages {\r\n workspace;\r\n dimensionsMultiplier = 3;\r\n\r\n constructor(workspace) {\r\n this.workspace = workspace;\r\n }\r\n\r\n getCanvasImageScaled = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToSlabMode = false;\r\n if (isSlabMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n shouldReturnToSlabMode = true;\r\n }\r\n\r\n const pointsMinMax = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(this.workspace.getShapes());\r\n\r\n if (pointsMinMax.length > 0) {\r\n const minX = pointsMinMax[0].x;\r\n const minY = pointsMinMax[0].y;\r\n const maxX = pointsMinMax[2].x;\r\n const maxY = pointsMinMax[2].y;\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: minX * config.defaultScaleExport - offset,\r\n y: minY * config.defaultScaleExport - offset\r\n }\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n\r\n //todo not needed to change back\r\n void shouldReturnToSlabMode\r\n // if (shouldReturnToSlabMode) {\r\n // enableSlabMode();\r\n // store.dispatch(showSlabTool(true));\r\n // }\r\n\r\n return resultImage;\r\n }\r\n\r\n return \"\"\r\n };\r\n\r\n getSlabResultImage = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToRegularMode = false;\r\n if (!isSlabMode) {\r\n enableSlabMode();\r\n store.dispatch(showSlabTool(true));\r\n shouldReturnToRegularMode = true\r\n }\r\n\r\n //1. Lets get only countertop shapes\r\n const shapesWithoutSlabImages = this.workspace.getShapesWithoutAttachedResources().filter(shp => {\r\n return shp.partId !== SHAPE_PART_ID.slabPlaceHolder\r\n && shp.type !== MOVABLE_IMAGE_TYPES.slabImage\r\n });\r\n\r\n //2. Now get minimum point\r\n const pointsMinMaxRegular = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(shapesWithoutSlabImages, true);\r\n\r\n if (pointsMinMaxRegular.length > 0) {\r\n const minX = pointsMinMaxRegular[0].x;\r\n const minY = pointsMinMaxRegular[0].y;\r\n const maxX = pointsMinMaxRegular[2].x;\r\n const maxY = pointsMinMaxRegular[2].y;\r\n\r\n const workspacePos = workspace.getPosition();\r\n const offset = 200;\r\n\r\n //3. This is minimum point on field\r\n let startPoint = {\r\n x: (minX) * config.defaultScaleExport - offset - workspacePos.x,\r\n y: (minY) * config.defaultScaleExport - offset - workspacePos.y\r\n }\r\n\r\n //4.Canvas width\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n //5.Lets distract canvas width (see renderSlabRightPart staticOffset)\r\n startPoint = {\r\n x: startPoint.x + clippingWidth / 2,\r\n y: startPoint.y\r\n }\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasSlab\r\n );\r\n\r\n if (shouldReturnToRegularMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n\r\n return resultImage\r\n }\r\n\r\n return \"\"\r\n };\r\n\r\n getSlabCalcImage = () => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n let shouldReturnToRegularMode = false;\r\n if (!isSlabMode) {\r\n enableSlabMode();\r\n store.dispatch(showSlabTool(true));\r\n shouldReturnToRegularMode = true\r\n }\r\n SlabWorkspace.disableSlabImages();\r\n\r\n const pointsMinMax = sqftShapeManager.getMinMaxShapesPointsOnWorkspace(this.workspace.getShapes());\r\n\r\n if (pointsMinMax.length > 0) {\r\n const minX = pointsMinMax[0].x;\r\n const minY = pointsMinMax[0].y;\r\n const maxX = pointsMinMax[2].x;\r\n const maxY = pointsMinMax[2].y;\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: (minX) * config.defaultScaleExport - offset,\r\n y: (minY) * config.defaultScaleExport - offset\r\n }\r\n const clippingWidth = (maxX - minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (maxY - minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const resultImage = this.getCanvasScreen(\r\n config.defaultScaleExport,\r\n 0,\r\n 0,\r\n clippingWidth,\r\n clippingHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n\r\n if (shouldReturnToRegularMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n // else {\r\n // SlabWorkspace.init();\r\n // }\r\n\r\n return resultImage\r\n }\r\n\r\n return \"\"\r\n }\r\n\r\n /**\r\n * Will return array of zoomed shape + AppliancesThatShouldRenderMeasurementsInsideTheShape images. One image per shape\r\n * @return {*}\r\n */\r\n getCanvasApplianceImages = () => {\r\n const applianceImages = sqftImageManager.getAppliancesThatShouldRenderMeasurementsInsideTheShape();\r\n const createdImagesForShapes = new Set();\r\n\r\n return applianceImages.reduce((result, applianceImage) => {\r\n const outerShape = applianceImage.getOuterShape();\r\n if (outerShape) {\r\n\r\n if (createdImagesForShapes.has(outerShape.id)) {\r\n return result;\r\n }\r\n\r\n createdImagesForShapes.add(outerShape.id);\r\n\r\n const outerShapePosition = outerShape.getPosition();\r\n let shapesPoints = outerShape.getPoints();\r\n let pointsMinMax = sqftShapeManager.getMinMaxPoints(shapesPoints, false);\r\n\r\n const offset = 200;\r\n const startPoint = {\r\n x: (outerShapePosition.x + pointsMinMax.minX) * config.defaultScaleExport - offset,\r\n y: (outerShapePosition.y + pointsMinMax.minY) * config.defaultScaleExport - offset\r\n };\r\n const clippingWidth = (pointsMinMax.maxX - pointsMinMax.minX) * config.defaultScaleExport + offset * 2;\r\n const clippingHeight = (pointsMinMax.maxY - pointsMinMax.minY) * config.defaultScaleExport + offset * 2;\r\n\r\n const canvasImage = this.getCanvasImage(config.defaultScaleExport,\r\n startPoint,\r\n clippingWidth,\r\n clippingHeight\r\n );\r\n result.push(canvasImage);\r\n }\r\n return result;\r\n }, []);\r\n };\r\n\r\n getCanvasImage = (newScale = config.defaultScaleExport, startPoint, imageWidth, imageHeight) => {\r\n const isSlabMode = SqftStore.isSlabMode();\r\n if (isSlabMode) {\r\n enableRegularMode();\r\n store.dispatch(showSlabTool(false));\r\n }\r\n\r\n return this.getCanvasScreen(\r\n newScale,\r\n 0,\r\n 0,\r\n imageWidth,\r\n imageHeight,\r\n startPoint,\r\n this.updateCanvasAtStartPoint\r\n );\r\n };\r\n\r\n getCanvasScreen = (newScale, startClippingX, startClippingY, clippingWidth, clippingHeight, centerPoint, updateCallback) => {\r\n // fix transparent background by drawing canvas onto another canvas with a white background\r\n // https://stackoverflow.com/questions/18609715/html5-canvas-todataurl-image-has-no-background-color\r\n\r\n const srcCanvas = this.workspace.getCanvas();\r\n const temp = {\r\n scale: config.scale,\r\n width: srcCanvas.width,\r\n height: srcCanvas.height,\r\n };\r\n updateCallback(srcCanvas, newScale, clippingWidth, clippingHeight, centerPoint);\r\n\r\n //create a dummy CANVAS\r\n const destinationCanvas = document.createElement(\"canvas\");\r\n const destCtx = destinationCanvas.getContext('2d');\r\n destinationCanvas.width = srcCanvas.width ;\r\n destinationCanvas.height = srcCanvas.height ;\r\n\r\n //create a rectangle with the desired color\r\n destCtx.fillStyle = \"#FFFFFF\";\r\n destCtx.fillRect(0,0, destinationCanvas.width, destinationCanvas.height);\r\n\r\n //draw the original canvas onto the destination canvas\r\n if (clippingWidth > srcCanvas.width) clippingWidth = srcCanvas.width;\r\n if (clippingHeight > srcCanvas.height) clippingHeight = srcCanvas.height;\r\n\r\n destCtx.drawImage(\r\n srcCanvas,\r\n startClippingX,\r\n startClippingY,\r\n clippingWidth,\r\n clippingHeight,\r\n 0,\r\n 0,\r\n srcCanvas.width,\r\n srcCanvas.height\r\n );\r\n\r\n //restore canvas\r\n updateCallback(srcCanvas, temp.scale, temp.width, temp.height, centerPoint);\r\n\r\n return destinationCanvas.toDataURL();\r\n }\r\n\r\n updateCanvas = (srcCanvas, scale, width, height, centerPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n this.workspace.setCenter(centerPoint.width, centerPoint.height); // return canvas to default position\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n }\r\n\r\n updateCanvasAtStartPoint = (srcCanvas, scale, width, height, startPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n this.workspace.setPosition(startPoint); // return canvas to default position\r\n\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n sqftEventManager.trigger(sqftEventManager.events.RENDER);\r\n }\r\n\r\n updateCanvasSlab = (srcCanvas, scale, width, height, centerPoint) => {\r\n srcCanvas.width = width;\r\n srcCanvas.height = height;\r\n config.scale = scale;\r\n //this.workspace.setCenter(centerPoint.width, centerPoint.height); // return canvas to default position\r\n //this.workspace.setPosition({x: 0, y: 0}); // return canvas to default position NOTE setPosition will also update SlabWorkspace position\r\n SlabWorkspace.setPos(centerPoint); // return canvas to default position\r\n renderSlabRightPart(sqftEventManager.getCtx(), true);\r\n }\r\n}\r\n","import store from \"../../../../../../store\";\r\nimport {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport {ALLOWED_LABEL_NAV_ITEMS, BACKSPLASH_LABELS, COUNTERTOP_LABELS, EDGE_LABELS} from \"../../../../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../../../../config\";\r\nimport {SHAPE_HARDCODED_PART_IDS} from \"../../../../constantsFeature\";\r\n\r\n/**\r\n * is used for category switching available partIds\r\n * @param {string} partId default part id used for shape type\r\n * @return {string} final partId\r\n */\r\nexport const checkShapeForAvailablePartId = (partId) => {\r\n const {fabricatorState, qtState, sqftState, wizardState} = store.getState();\r\n const layout = getCurrentLayout();\r\n const wizardIsActive = wizardState.wizardIsActive;\r\n\r\n if (SHAPE_HARDCODED_PART_IDS.includes(partId)) {\r\n return partId\r\n }\r\n\r\n if (IS_LIXIL_UI || !layout.qtCategories && document.kvConfig.visualizerType === \"Fireplace\") {\r\n // lixil-1) if we opened feature from QuotingTool - try to assign this partId\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && !Object.keys(BACKSPLASH_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(EDGE_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && Object.keys(ALLOWED_LABEL_NAV_ITEMS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n }\r\n\r\n if (wizardIsActive) {\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && Object.keys(COUNTERTOP_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n return partId\r\n }\r\n\r\n if ((!fabricatorState.settings.useCategorySwitching || !layout.qtCategories || !qtState.qtActiveCategory)) {\r\n return partId\r\n }\r\n\r\n const currentCategory = layout.qtCategories.find(qtCat => qtCat.name === qtState.qtActiveCategory);\r\n if (!currentCategory || !currentCategory.subParts) {\r\n return partId\r\n }\r\n\r\n // 1) if we opened feature from QuotingTool - try to assign this partId\r\n if (sqftState.sqftFromFeature && sqftState.sqftFromFeature.cartFeature\r\n && currentCategory.subParts.some(subPart => subPart.part.partId === sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(BACKSPLASH_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && !Object.keys(EDGE_LABELS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n && Object.keys(ALLOWED_LABEL_NAV_ITEMS).includes(sqftState.sqftFromFeature.cartFeature.partId)\r\n ) {\r\n return sqftState.sqftFromFeature.cartFeature.partId\r\n }\r\n\r\n // 2) check for center island feature group\r\n const isCountertop = partId === \"countertop\" || partId === \"center_island_countertop\";\r\n if (isCountertop) {\r\n const countertopNavItem = currentCategory.subParts.find(subPart => {\r\n return subPart.part.partId.includes(partId)\r\n });\r\n\r\n if (countertopNavItem) {\r\n return countertopNavItem.part.partId\r\n }\r\n }\r\n\r\n // 3) check for existing navItem\r\n const existingPartId = currentCategory.subParts.some(subPart => {\r\n return subPart.part.partId === partId\r\n });\r\n if (existingPartId) {\r\n return partId\r\n }\r\n\r\n // 4) here we replace default partId with existing in category partId\r\n for (let i = 0; i < currentCategory.subParts.length; i++) {\r\n if (ALLOWED_LABEL_NAV_ITEMS[currentCategory.subParts[i].part.partId]) {\r\n return currentCategory.subParts[i].part.partId\r\n }\r\n }\r\n\r\n // 5) if nothing found - let it be at least default shape's partId\r\n return partId\r\n}\r\n","import {getCurrentLayout} from \"../../../../../appLayout\";\r\nimport cabinetWorkspace from \"./cabinetWorkspace\";\r\nimport {SHAPE_PART_ID} from \"../../../../constants\";\r\n\r\nclass CabinetShapesLayout {\r\n\r\n /**\r\n * Create cabinets from cabinets data\r\n * @param data\r\n */\r\n createShapesFromCabinetSet = (data) => {\r\n data.positions.forEach((cabinetData) => {\r\n if ([SHAPE_PART_ID.lower_cabinet_boxes, SHAPE_PART_ID.upper_cabinet_boxes].includes(cabinetData.partId)) {\r\n const layout = getCurrentLayout();\r\n const feature = layout.getFeatureById(cabinetData.featureId, true);\r\n const parentFeature = layout.getFeatureById(cabinetData.parentFeatureId);\r\n const position = {x: cabinetData.x, y: cabinetData.z};\r\n cabinetWorkspace.cabinetShapes.addShape(feature, parentFeature, position)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default CabinetShapesLayout;\r\n","// textBoxManager.js\r\nimport TextBox from \"./textBox\";\r\nimport workspace from \"../workspace\";\r\n\r\nclass TextBoxManager {\r\n constructor() {\r\n this.textBoxes = [];\r\n }\r\n\r\n getExportedTextBoxes = () => {\r\n return this.textBoxes.map(box => box.export());\r\n };\r\n\r\n setImportedTextBoxes = (_textBoxes) => {\r\n if (_textBoxes === undefined) {\r\n return []\r\n }\r\n for (let i = 0; i < _textBoxes.length; i++) {\r\n let textBox = new TextBox(_textBoxes[i].posOnField, _textBoxes[i].placeholder, _textBoxes[i].design);\r\n textBox.init();\r\n }\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n getTextBoxes = () => {\r\n return this.textBoxes;\r\n };\r\n\r\n getHoveredTextBox = () => {\r\n\r\n }\r\n\r\n addTextBox = (box) => {\r\n this.textBoxes.push(box);\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n removeBox = (box) => {\r\n let boxes = this.textBoxes.map((textBox => textBox.box));\r\n const index = boxes.indexOf(box);\r\n if (index > -1) {\r\n this.textBoxes.splice(index, 1);\r\n }\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n removeAllTextBoxes = () => {\r\n for (let i = this.textBoxes.length - 1; i >= 0; i--) {\r\n this.textBoxes[i].box.delete();\r\n //textBoxes[i].text.delete();\r\n }\r\n this.textBoxes = [];\r\n\r\n return this.textBoxes;\r\n };\r\n\r\n isBoxActive() {\r\n const boxes = workspace.textBoxManager.getTextBoxes();\r\n\r\n if (boxes.length > 0) {\r\n for (let textBox of boxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getHoveredTexBox() {\r\n const boxes = workspace.textBoxManager.getTextBoxes();\r\n\r\n if (boxes.length > 0) {\r\n for (let textBox of boxes) {\r\n if (textBox.box.mixin.movable.state.hovering) {\r\n return textBox;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n}\r\n\r\nexport default TextBoxManager;\r\n","import {getQtCatName} from \"../helpers/sqftQuotesHelper\";\r\n\r\nexport class FeatureObjectDTO {\r\n constructor(id, partId, featureId, quantity = 1) {\r\n this.id = id;\r\n this.qtCatName = getQtCatName();\r\n this.partId = partId;\r\n this.featureId = featureId;\r\n this.quantity = quantity;\r\n }\r\n\r\n addBumpoutArea(area) {\r\n this.area = area;\r\n }\r\n}\r\n","import JsonApi from \"./jsonApi\";\r\n\r\nexport const getMarkUpForFeatures = (featuresArray = []) => {\r\n const arrayIds = featuresArray.map(dbFeature => dbFeature.id);\r\n return JsonApi.getMarkUpForFeatures(arrayIds)\r\n .then(response => response.data)\r\n .catch(error => {\r\n console.log(\"Server error getMarkUpForFeatures \"+new Error(error));\r\n })\r\n};\r\n","import {getPercentage} from \"./misc2\";\r\nimport Config from \"../config\";\r\n\r\nexport const MARK_UP_APPLY_TO_TYPES = { // QKB\r\n retailPrice: \"retailPrice\",\r\n cost: \"cost\",\r\n retailPriceAndCost: \"retailPriceAndCost\",\r\n shippingCost: \"shippingCost\",\r\n discount: \"discount\",\r\n}\r\n\r\nconst MARK_UP_PROPS_MATCH = { // CAES\r\n Retail: \"cost\",\r\n Cost: \"price\",\r\n Discount: \"fabricatorCost\",\r\n};\r\n\r\n/**\r\n * @param dbFeaturesArray {[dbFeatureInterface]}\r\n * @param markUpResponse {object}\r\n * @return {[dbFeatureInterface]}\r\n */\r\nexport const setResponseFeaturesMarkUp = (dbFeaturesArray, markUpResponse) => {\r\n if (Config.isDevMode()) {\r\n console.log(\"markUpResponse\", markUpResponse);\r\n }\r\n if (!Array.isArray(dbFeaturesArray) || (typeof markUpResponse !== \"object\") || (markUpResponse === null)\r\n || !Object.keys(markUpResponse).length) {\r\n return dbFeaturesArray\r\n }\r\n Object.keys(markUpResponse).forEach(dbFeatureIdString => {\r\n const dbFeatureId = +dbFeatureIdString;\r\n let dbFeature = dbFeaturesArray.find(feature => feature.id === dbFeatureId);\r\n if (dbFeature && !dbFeature.markUpString) {\r\n // if (Config.isDevMode()) {\r\n // console.log(\"featureWithMarkUp\", dbFeature.customDisplayName, dbFeature);\r\n // }\r\n // here we update dbFeature with new mark up price!\r\n dbFeature = setFeaturePriceFromMarkItem(markUpResponse[dbFeatureIdString], dbFeature);\r\n }\r\n })\r\n return dbFeaturesArray\r\n}\r\n\r\nconst getUpdatedFeaturePriceFromMarkItem = (markUpListItem, originalValue, isCaes = false) => {\r\n const type = isCaes ? markUpListItem.Type : markUpListItem.type;\r\n const priceType = isCaes ? markUpListItem.PriceType : markUpListItem.priceType;\r\n const value = isCaes ? markUpListItem.Value : markUpListItem.value;\r\n\r\n const changeValue = (priceType === \"currency\")\r\n ? +value\r\n : getPercentage(+originalValue, +value);\r\n let newValue = (type === \"mark_up\" || type === \"MarkUp\")\r\n ? +originalValue + changeValue\r\n : +originalValue - changeValue;\r\n return newValue < 0 ? 0 : +(newValue.toFixed(2));\r\n}\r\n\r\n/**\r\n * QKB set\r\n * @param markUpItem {object}\r\n * @param dbFeature {dbFeatureInterface}\r\n * @return {dbFeatureInterface}\r\n */\r\nexport const setFeaturePriceFromMarkItemQKB = (markUpItem, dbFeature) => {\r\n // console.log(\"markUpItem\", markUpItem, newDbFeature);\r\n const {price, cost, shippingCost, discount} = markUpItem.originalValues;\r\n switch (markUpItem.applyTo) {\r\n case MARK_UP_APPLY_TO_TYPES.retailPrice: {\r\n dbFeature.price = getUpdatedFeaturePriceFromMarkItem(markUpItem, price);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.cost: {\r\n dbFeature.cost = getUpdatedFeaturePriceFromMarkItem(markUpItem, cost);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.retailPriceAndCost: {\r\n dbFeature.cost = getUpdatedFeaturePriceFromMarkItem(markUpItem, cost);\r\n dbFeature.price = getUpdatedFeaturePriceFromMarkItem(markUpItem, price);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.shippingCost: {\r\n dbFeature.shippingCost = getUpdatedFeaturePriceFromMarkItem(markUpItem, shippingCost);\r\n break;\r\n }\r\n case MARK_UP_APPLY_TO_TYPES.discount: {\r\n dbFeature.fabricatorCost = getUpdatedFeaturePriceFromMarkItem(markUpItem, discount);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n // console.log(\"newDbFeature\", newDbFeature);\r\n return dbFeature\r\n}\r\n\r\n/**\r\n * @param markUpString {string}\r\n * @param dbFeature {dbFeatureInterface}\r\n * @return {dbFeatureInterface}\r\n */\r\nconst setFeaturePriceFromMarkItem = (markUpString = \"\", dbFeature) => {\r\n if (!dbFeature || !markUpString) {\r\n return dbFeature\r\n }\r\n // console.log(\"markUpObject\", markUpObject, newDbFeature);\r\n const markUpObject = JSON.parse(markUpString); // {Retail: {Type: \"MarkUp\", Value: 10}, Cost, Discount}\r\n\r\n if (Array.isArray(markUpObject)) { // QKB format\r\n markUpObject.forEach(markUpListItem => {\r\n // console.log(\"dbFeature price cost\", dbFeature.price, dbFeature.cost);\r\n dbFeature = setFeaturePriceFromMarkItemQKB(markUpListItem, dbFeature);\r\n // console.log(\"dbFeature price cost\", dbFeature.price, dbFeature.cost);\r\n })\r\n } else if (typeof markUpObject === \"object\" && (markUpObject !== null)) { // CAES format!!\r\n // console.log(\"\", markUpObject);\r\n // {\r\n // Cost: {Type: 'MarkDown', Value: 10}\r\n // Discount : {Type: 'MarkDown', Value: 0}\r\n // Retail : {Type: 'MarkDown', Value: 10}\r\n // }\r\n Object.keys(markUpObject).forEach(key => {\r\n if (!markUpObject[key].Value || !MARK_UP_PROPS_MATCH[key]) {\r\n return\r\n }\r\n dbFeature[MARK_UP_PROPS_MATCH[key]] = getUpdatedFeaturePriceFromMarkItem(markUpObject[key], dbFeature[MARK_UP_PROPS_MATCH[key]], true);\r\n })\r\n }\r\n dbFeature.markUpString = markUpString; // just to be able to find it after job is saved on restore\r\n // console.log(\"newDbFeature\", newDbFeature);\r\n return dbFeature\r\n}\r\n","/**\r\n * // Example usage\r\n * const rate = 0.05 / 12; // Monthly interest rate (5% annual)\r\n * const nper = 60; // Number of payments (5 years)\r\n * const pv = 30000; // Loan amount (present value)\r\n * */\r\nexport function PMT(rate, nper, pv, fv = 0, type = 0) {\r\n if (rate === 0) {\r\n return -(pv + fv) / nper;\r\n }\r\n\r\n const pvif = Math.pow(1 + rate, nper);\r\n let pmt = (rate * (pv * pvif + fv)) / (pvif - 1);\r\n\r\n // Adjust for payments at the beginning of the period\r\n if (type === 1) {\r\n pmt /= (1 + rate);\r\n }\r\n\r\n return -pmt; // Return negative for outflow\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class Handle extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.handle\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 8;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 0 ? 1 : 2;\r\n return super.load_(dbFeature, new Handle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part 0 - показываем всегда\r\n // part 1 - только если выключен холодильник\r\n // part 2 - показываем всегда, но зависит от MountType part 2 нижних кабинетов (S, U или ST, FM, SM)\r\n // part 3 - если включен part 3 нижних кабинетов (это срабатывает при выключенной посудомойке)\r\n // part 4 - если включен part 4 нижних кабинетов (это срабатывает при выключенной плите)\r\n // part 5 - если включен part 2 верхних кабинетов (это срабатывает при выключенной вытяжке)\r\n // part 6 - если включен fridge и матчим по его метадате Width и Height, так же как и кабинеты\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"1\")\r\n && (!applianceParent || !applianceParent.fridge || !applianceParent.fridge.activeFeature && applianceParent.fridge.disabled)) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n if (cabinetParent && cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeatureParts) {\r\n const part2 = cabinetParent.bottomCabinet.activeFeatureParts.find(featuresPart => featuresPart.metaData[\"Part\"].includes(\"2\"));\r\n if (part2) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions,\r\n {propName: \"MountType\", propValue: part2.metaData[\"MountType\"]}\r\n ])\r\n }\r\n }\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.dishwasher && !applianceParent.dishwasher.disabled && applianceParent.dishwasher.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")\r\n && applianceParent && applianceParent.hood && !applianceParent.hood.disabled && applianceParent.hood.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Dishwasher extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'dishwasher';\r\n this.partName = 'Dishwasher';\r\n this.translateId = \"visualizer.kitchen.appliance.dishwasher\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Dishwasher());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nconst widthAndHeightArray = [\"Width\", \"Height\"];\r\n\r\nexport default class Fridge extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge';\r\n this.partName = 'Fridge';\r\n this.translateId = \"visualizer.kitchen.appliance.fridge\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fridge());\r\n }\r\n\r\n getFridgeWidthAndHeightConditions = () => {\r\n let widthHeightConditions = []\r\n if (!this.activeFeature || !this.activeFeature.metaData) {\r\n return widthHeightConditions\r\n }\r\n widthAndHeightArray.forEach(metaName => {\r\n if (this.activeFeature.metaData[metaName]) {\r\n widthHeightConditions.push({\r\n propName: metaName,\r\n propValue: Array.isArray(this.activeFeature.metaData[metaName])\r\n ? this.activeFeature.metaData[metaName][0]\r\n : this.activeFeature.metaData[metaName],\r\n })\r\n }\r\n });\r\n return widthHeightConditions\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Hood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hood';\r\n this.partName = 'Hood';\r\n this.translateId = \"visualizer.kitchen.appliance.hood\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Hood());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n if (applianceParent.stovetop && applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n // add dependency on stove width, if width is 24 - we need width 30, if stove is 60 - we need 48\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n const stove = applianceParent.stove;\r\n if (stove && !this.disabled && stove.disabled) {\r\n stove.disabled = false;\r\n }\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.microwave\r\n && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Microwave extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'microwave';\r\n this.partName = 'Microwave';\r\n this.translateId = \"visualizer.kitchen.appliance.microwave\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Microwave());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.stovetop && !applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = true;\r\n }\r\n if (applianceParent.oven && !applianceParent.oven.disabled) {\r\n applianceParent.oven.disabled = true;\r\n }\r\n if (applianceParent.range && applianceParent.range.disabled) {\r\n applianceParent.range.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.hood\r\n && !applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.appliance.range\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Range());\r\n // const rangeType = dbFeature.metaData && dbFeature.metaData[\"RangeType\"];\r\n // if (!rangeType) {\r\n // dbFeature.metaData[\"RangeType\"] = [\"ALL\"];\r\n // }\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n const applianceParent = this.getParent().getParent();\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n\r\n if (isEncore) {\r\n if (ignoreLocked || !featureIsLocked) {\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.hood && !applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = true;\r\n }\r\n if (applianceParent.oven && !applianceParent.oven.disabled) {\r\n applianceParent.oven.disabled = true;\r\n }\r\n if (applianceParent.microwave && applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n if (ignoreLocked || !featureIsLocked) {\r\n const currentHoodWidth = applianceParent.hood.activeFeature.metaData[\"Width\"];\r\n const newWidth = this.metaData[\"Width\"];\r\n if (newWidth && (!currentHoodWidth || (newWidth[0] !== currentHoodWidth[0]))) {\r\n const currentHoodNavItems = applianceParent.hood.navigationSubItems();\r\n const sameWidth = currentHoodNavItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"Width\"]) {\r\n return false\r\n }\r\n if (newWidth[0] === \"24\") {\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0] || navItem.part.metaData[\"Width\"][0] === \"30\"\r\n }\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0]\r\n });\r\n console.log(\"newWidth\", newWidth[0]);\r\n console.log(\"sameWidth\", sameWidth);\r\n if (sameWidth.length) { // here we can filter by the same name, color etc.\r\n applianceParent.hood.activeFeature = sameWidth[0].part;\r\n }\r\n }\r\n if (applianceParent && applianceParent.stove && !applianceParent.stove.disabled) {\r\n applianceParent.stove.disabled = true;\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.stovetop\r\n && !applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = true;\r\n }\r\n if (applianceParent.hood) {\r\n applianceParent.hood.disabled = this.disabled;\r\n }\r\n if (!this.disabled && applianceParent.stove && !applianceParent.stove.disabled) {\r\n applianceParent.stove.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Oven extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'oven';\r\n this.partName = 'Oven';\r\n this.translateId = \"visualizer.kitchen.appliance.oven\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Oven());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.stovetop && applianceParent.stovetop.disabled) {\r\n applianceParent.stovetop.disabled = false;\r\n }\r\n if (applianceParent.hood && applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = false;\r\n }\r\n if (applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n if (applianceParent.microwave && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n hideLayerCondition() {\r\n const applianceParent = this.getParent();\r\n // on the second layout we should show Oven only if stove has Metadata \"T\" (top)\r\n return (applianceParent.layout.type === 2) && applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature && (!applianceParent.stove.activeFeature.metaData[\"Stove Type\"]\r\n || (applianceParent.stove.activeFeature.metaData[\"Stove Type\"][0] !== \"T\"))\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.hideLayerCondition()) {\r\n conditions.push({\r\n propName: \"Stove Type\",\r\n propValue: \"F\"\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Stove extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stove';\r\n this.partName = 'Stove';\r\n this.translateId = \"visualizer.kitchen.appliance.stove\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stove());\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const applianceParent = this.getParent().getParent();\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n if (applianceParent && applianceParent.hood && applianceParent.hood.activeFeature) {\r\n const currentHoodWidth = applianceParent.hood.activeFeature.metaData[\"Width\"];\r\n const newWidth = this.metaData[\"Width\"];\r\n if (newWidth && (!currentHoodWidth || (newWidth[0] !== currentHoodWidth[0]))) {\r\n const currentHoodNavItems = applianceParent.hood.navigationSubItems();\r\n const sameWidth = currentHoodNavItems.filter(navItem => {\r\n if (!navItem.part.metaData[\"Width\"]) {\r\n return false\r\n }\r\n if (newWidth[0] === \"24\") {\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0] || navItem.part.metaData[\"Width\"][0] === \"30\"\r\n }\r\n return navItem.part.metaData[\"Width\"][0] === newWidth[0]\r\n });\r\n console.log(\"newWidth\", newWidth[0]);\r\n console.log(\"sameWidth\", sameWidth);\r\n if (sameWidth.length) { // here we can filter by the same name, color etc.\r\n applianceParent.hood.activeFeature = sameWidth[0].part;\r\n }\r\n }\r\n }\r\n if (applianceParent && applianceParent.range && applianceParent.range.activeFeature && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true\r\n }\r\n }\r\n super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n hideLayerCondition() {\r\n const applianceParent = this.getParent();\r\n const hideLayer = applianceParent && applianceParent.range && applianceParent.range.activeFeature\r\n && !applianceParent.range.disabled;\r\n if (hideLayer && !this.disabled) {\r\n this.disabled = true;\r\n }\r\n return hideLayer\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n if (applianceParent.hood) {\r\n applianceParent.hood.disabled = this.disabled;\r\n }\r\n if (!this.disabled && applianceParent.range && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class FridgeEnclosure extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'fridge_enclosure';\r\n this.partName = 'Fridge Enclosure';\r\n this.dbName = \"Fridge Enclosure\";\r\n this.visible = true;\r\n this.translateId = \"visualizer.kitchen.appliance.fridge_enclosure\";\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"Layout4\")) {\r\n dbFeature.metaData[\"Part\"] = [\"0\"]; // we don't have part 0 on Layout4\r\n }\r\n if (useOldCabinetLogic) {\r\n const partNumber = dbFeature.metaData[\"Part\"] ? +dbFeature.metaData[\"Part\"][0] : 0;\r\n return super.load_(dbFeature, new FridgeEnclosure(false, partNumber), true, partNumber === 0 ? 'features' : 'featuresParts');\r\n }\r\n const partNumber = dbFeature.metaData[\"Part\"] ? dbFeature.metaData[\"Part\"][0] : \"1\";\r\n return super.load_(dbFeature, new FridgeEnclosure(false, partNumber), true, partNumber === \"1\" ? 'features' : 'featuresParts');\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (layout.type === 4) {\r\n const fridge = this.getParent().fridge;\r\n // show layers only if fridge is disabled\r\n if (!(!fridge || fridge.disabled || !fridge.activeFeature || !fridge.activeFeature.layer || !fridge.activeFeature.layer.src)) {\r\n super.hideLayers();\r\n return\r\n }\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n const parent = this.getParent();\r\n //show second part only if fridge is disabled\r\n if (!parent.fridge || parent.fridge.disabled || !parent.fridge.activeFeature || !parent.fridge.activeFeature.layer || !parent.fridge.activeFeature.layer.src) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions, true);\r\n }\r\n return []\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const applianceParent = this.getParent();\r\n if (applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled && applianceParent.fridge.activeFeature) {\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n if (!fridgeConditions.some(condition => condition.propName === \"Width\")) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: \"36\"\r\n });\r\n }\r\n return [...conditions, ...fridgeConditions]\r\n }\r\n return conditions\r\n }\r\n\r\n getFridgeEnclosureSplittedFeatureName = () => {\r\n if (this._fridgeEnclosureSplittedFeatureName == null) {\r\n this._fridgeEnclosureSplittedFeatureName = this.getSplittedFeatureName().split(/.{5}$/)[0]; // \"Benton Maple Stone-NC-Aspen-00 1 21\" -> \"Benton Maple Stone-NC-Aspen-00\"\r\n }\r\n return this._fridgeEnclosureSplittedFeatureName\r\n };\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getFridgeEnclosureSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getFridgeEnclosureSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FridgeEnclosureHandle extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'fridge_enclosure_handle';\r\n this.partName = \"Fridge Enclosure Handle\";\r\n this.visible = true;\r\n this.translateId = \"visualizer.kitchen.appliance.fridge_enclosure_handle\";\r\n this.hasAdditionalParts = true;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"Layout4\")) {\r\n dbFeature.metaData[\"Part\"] = [\"0\"]; // we don't have part 0 on Layout4\r\n }\r\n const partNumber = dbFeature.metaData[\"Part\"] ? dbFeature.metaData[\"Part\"][0] : \"1\";\r\n return super.load_(dbFeature, new FridgeEnclosureHandle(false, partNumber), true, partNumber === \"1\" ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const applianceParent = this.getParent();\r\n if (applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled && applianceParent.fridge.activeFeature) {\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n if (!fridgeConditions.some(condition => condition.propName === \"Width\")) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: \"36\"\r\n });\r\n }\r\n return [...conditions, ...fridgeConditions]\r\n }\r\n return conditions\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (layout.type === 4) {\r\n const fridge = this.getParent().fridge;\r\n // show layers only if fridge is disabled\r\n if (!(!fridge || fridge.disabled || !fridge.activeFeature || !fridge.activeFeature.layer || !fridge.activeFeature.layer.src)) {\r\n super.hideLayers();\r\n return\r\n }\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n const parent = this.getParent();\r\n //show second part only if fridge is disabled\r\n if (!parent.fridge || parent.fridge.disabled || !parent.fridge.activeFeature || !parent.fridge.activeFeature.layer || !parent.fridge.activeFeature.layer.src) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions, true);\r\n }\r\n return []\r\n }\r\n\r\n getFridgeEnclosureSplittedFeatureName = () => {\r\n if (this._fridgeEnclosureSplittedFeatureName == null) {\r\n this._fridgeEnclosureSplittedFeatureName = this.getSplittedFeatureName().split(/.{5}$/)[0]; // \"Benton Maple Stone-NC-Aspen-00 1 21\" -> \"Benton Maple Stone-NC-Aspen-00\"\r\n }\r\n return this._fridgeEnclosureSplittedFeatureName\r\n };\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && Number.isInteger(fromFeature.partNumber)) {\r\n let activeFeaturePart;\r\n const name1 = fromFeature.getFridgeEnclosureSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n // if (this.partId === \"right_wall\") {\r\n // arrayOfConditions = arrayOfConditions.filter(condition => condition.propName !== \"MirrorSize\");\r\n // }\r\n activeFeatureParts = this.featuresParts.filter((feature) => name1 === feature.getFridgeEnclosureSplittedFeatureName());\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n if (activeFeatureParts.length) {\r\n activeFeaturePart = activeFeatureParts.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n if (!activeFeaturePart) {\r\n activeFeaturePart = activeFeatureParts[0];\r\n }\r\n }\r\n activeFeatureParts = activeFeaturePart ? [activeFeaturePart] : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n handleClick(ignoreLocked = false, clickFrom = \"\") {\r\n const {isEncore} = store.getState().fabricatorState;\r\n if (isEncore) {\r\n const featureIsLocked = getFeatureIsLocked(this, ignoreLocked);\r\n if (ignoreLocked || !featureIsLocked) {\r\n const applianceParent = this.getParent().getParent();\r\n if (applianceParent.layout.type === 6) {\r\n if (applianceParent.microwave && !applianceParent.microwave.disabled) {\r\n applianceParent.microwave.disabled = true;\r\n }\r\n if (applianceParent.hood && applianceParent.hood.disabled) {\r\n applianceParent.hood.disabled = false;\r\n }\r\n }\r\n }\r\n }\r\n return super.handleClick(ignoreLocked, clickFrom);\r\n }\r\n\r\n disabledClick() {\r\n const applianceParent = this.getParent();\r\n // if (!this.disabled) {\r\n // // centerIslandParent.cabinet.disabled = false;\r\n // // centerIslandParent.cabinet.disabledClick();\r\n // } else {\r\n // if (applianceParent.hood) {\r\n // applianceParent.hood.disabled = this.disabled;\r\n // }\r\n // }\r\n if ((applianceParent.layout.type === 6) && !this.disabled && applianceParent.range\r\n && !applianceParent.range.disabled) {\r\n applianceParent.range.disabled = true;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {LayoutAbbreviations, useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.canBeDisabled = false;\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new TopCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (useOldCabinetLogic) {\r\n return conditions\r\n }\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part1 - depends on hood - H hood enabled, С - disabled\r\n // part1 - depends on hood \"Width\"\r\n // part2 - depends on Fridge\r\n // part3 - was part 6\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (useOldCabinetLogic) {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && (!applianceParent || !applianceParent.hood || applianceParent.hood.disabled || !applianceParent.hood.activeFeature)) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (cabinetParent.layout.type === 4 && feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.fridge && (applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature)) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n } else {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {LayoutAbbreviations, useOldCabinetLogic} from \"../../constants\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\n\r\nexport default class TallCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'tall_cabinet';\r\n this.partName = 'Tall Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet\";\r\n this.canBeDisabled = false;\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new TallCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (useOldCabinetLogic) {\r\n return conditions\r\n }\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sinkIsVisible = countertopParent && countertopParent.sink && countertopParent.sink.activeFeature && !countertopParent.sink.disabled;\r\n if (sinkIsVisible) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sink = countertopParent.sink;\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n const withStoveConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\",\r\n }];\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (useOldCabinetLogic) {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && sink && !sink.disabled && sink.activeFeature) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions,\r\n {propName: \"MountType\", propValue: sink.activeFeature.metaData[\"MountType\"]}\r\n ])\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.dishwasher && !applianceParent.dishwasher.disabled && applianceParent.dishwasher.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n } else {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../../../kvComponent/core/constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.countertop.sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {METADATA, PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.countertop.faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"] && dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n const mountTypeMeta = dbFeature.metaData[\"MountType\"];\r\n if (mountTypeMeta && mountTypeMeta.includes(\"U\")) {\r\n METADATA.sinkUTypes.forEach(metaValue => {\r\n if (!mountTypeMeta.includes(metaValue)){\r\n mountTypeMeta.push(metaValue)\r\n }\r\n })\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n getCurrentSinkMetaData() {\r\n const sinkParent = this.getParent().sink;\r\n let metaObject = {};\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"MountType\"];\r\n if (sinkMeta && (sinkMeta !== \"0\") && !sinkMeta.includes(\"0\")) {\r\n metaObject[\"MountType\"] = Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n }\r\n const mountHolesMeta = sinkParent.activeFeature.metaData[\"MountHoles\"];\r\n if (mountHolesMeta && (mountHolesMeta !== \"0\") && !mountHolesMeta.includes(\"0\")) { // if 0 - we are showing all faucets\r\n metaObject[\"MountHoles\"] = mountHolesMeta\r\n }\r\n }\r\n return metaObject\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const currentSinkMetaData = this.getCurrentSinkMetaData();\r\n [\"MountType\", \"MountHoles\"].forEach(propName => {\r\n if (currentSinkMetaData[propName]) {\r\n conditions.push({\r\n propName,\r\n propValue: currentSinkMetaData[propName]\r\n })\r\n }\r\n })\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().sink;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class EdgeProfile extends EdgeCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'edge_profile';\r\n this.partName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.countertop.edge_profile\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n this.hasNoVisualizerLayers = true;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cutouts extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cutouts';\r\n this.partName = 'Cutouts';\r\n this.translateId = \"visualizer.kitchen.countertop.cutouts\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Cutouts());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Radius extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'radius';\r\n this.partName = 'Radius';\r\n this.translateId = \"visualizer.kitchen.countertop.radius\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Radius());\r\n }\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport store from \"../../../../../store\";\r\nimport {getColorFilterValue} from \"../../../../../misc/filtersFunctions\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\n\r\nexport default class CrownMolding extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'crown_molding';\r\n this.partName = 'Crown Molding';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n this.translateId = \"visualizer.kitchen.cabinet.crown_molding\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new CrownMolding(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n sortNavigationItems(navItems) {\r\n\r\n const cabinetParent = this.getParent();\r\n if (!cabinetParent.topCabinet || !cabinetParent.topCabinet.activeFeature) {\r\n return navItems\r\n }\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilterGroup = filterGroups.find(group => group.name === \"Color\");\r\n if (!colorFilterGroup) {\r\n return navItems\r\n }\r\n\r\n const currentTopCabinetColor = getColorFilterValue(cabinetParent.topCabinet.activeFeature, filterGroups, colorFilterGroup);\r\n if (!currentTopCabinetColor) {\r\n return navItems\r\n }\r\n\r\n navItems = orderBy(navItems, (navItem) => {\r\n const colorFilterValue = getColorFilterValue(navItem.part, filterGroups, colorFilterGroup);\r\n if (!colorFilterValue) {\r\n return false\r\n }\r\n return colorFilterValue.id === currentTopCabinetColor.id\r\n }, ['desc'])\r\n return navItems\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.crownMolding.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData[\"MatchingFeature\"]) {\r\n conditions.push({\r\n propName: 'MatchingFeature',\r\n propValue: cabinetParent.topCabinet.activeFeature.metaData[\"MatchingFeature\"]\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {LayoutAbbreviations, METADATA, useOldCabinetLogic} from \"../../constants\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 4;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // на этом лаяуте синки с разным маунтайпом, а у bottom есть только один парт с маунтайпом S, U\r\n // т.е. тут можно вообще игнорить маунттайп и матчить все синки с боттом кабинетами\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const applianceParent = this.getParent().layout.parts[Appliance.id];\r\n if (applianceParent && applianceParent.stovetop) {\r\n applianceParent.stovetop.disabled = this.disabled\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (useOldCabinetLogic) {\r\n return conditions\r\n }\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent && countertopParent.sink && countertopParent.sink.activeFeature\r\n && !countertopParent.sink.disabled && countertopParent.sink.featureGroupEnabled\r\n ? countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n : [\"U\"]\r\n });\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sink = countertopParent.sink;\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n }\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: rangeIsActive\r\n ? applianceParent.range.activeFeature.metaData[\"Width\"] || \"30\"\r\n : applianceParent\r\n && applianceParent.stove\r\n && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\"\r\n })\r\n // console.log(\"withStoveConditions\", withStoveConditions);\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (useOldCabinetLogic) {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")\r\n && sink && !sink.disabled && sink.activeFeature) {\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions,\r\n {propName: \"MountType\", propValue: sink.activeFeature.metaData[\"MountType\"]}\r\n ])\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")\r\n && applianceParent && applianceParent.dishwasher && !applianceParent.dishwasher.disabled && applianceParent.dishwasher.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")\r\n && applianceParent && applianceParent.stove && !applianceParent.stove.disabled && applianceParent.stove.activeFeature) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) { // 6 is fridge related\r\n if (!applianceParent || !applianceParent.fridge || applianceParent.fridge.disabled || !applianceParent.fridge.activeFeature) {\r\n return false\r\n }\r\n const fridgeConditions = applianceParent.fridge.getFridgeWidthAndHeightConditions();\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([...arrayOfConditions, ...fridgeConditions])\r\n }\r\n } else {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"U\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"U\")\r\n // }\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"S\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"S\")\r\n // }\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new BottomHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomHandle.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent && countertopParent.sink && countertopParent.sink.activeFeature\r\n && !countertopParent.sink.disabled && countertopParent.sink.featureGroupEnabled\r\n ? countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n : [\"U\"]\r\n });\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n }\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: rangeIsActive\r\n ? applianceParent.range.activeFeature.metaData[\"Width\"] || \"30\"\r\n : applianceParent\r\n && applianceParent.stove\r\n && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\"\r\n })\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new TopHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n // part1 - depends on hood - H hood enabled, С - disabled\r\n // part1 - depends on hood \"Width\"\r\n // part2 - depends on Fridge\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return name1 === feature.getSplittedFeatureName() && feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n return false\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport {METADATA} from \"../../constants\";\r\nimport Countertop from \"../countertop/countertop\";\r\n\r\nexport default class DoorHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'door_handle';\r\n this.partName = 'Door Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.door_handle\";\r\n this.hasAdditionalParts = true;\r\n // Door Handle and Drawer Handle are the same as Top Handle and Bottom Handle\r\n // Top Handle, part 1, size 30, H --> Door Handle, part 1, size 30, H\r\n // Top Handle, part 1, size 30, C --> Door Handle, part 1, size 30, C\r\n // Top Handle, part 2, size 36 --> Door Handle, part 2, size 36\r\n // Top Handle, part 3, size 30 --> Door Handle, part 3, size 30\r\n // 9:42\r\n // Bottom Handle, part 1, size 0, S U --> Drawer Handle, part 1, size 0, S U /// Placement Bottom\r\n // --> Door Handle, part 1, size 0, S U /// Placement Bottom\r\n // 2. Bottom Handle, part 3, size 30 --> Drawer Handle, part 3, size 30 /// Placement Bottom\r\n // --> Door Handle, part 3, size 30 /// Placement Bottom\r\n // 3. Bottom Handle, part 3, size 30, ST --> Drawer Handle, part 3, size 30, ST /// Placement Bottom\r\n // --> Door Handle, part 3, size 30, ST /// Placement Bottom\r\n // 4. Bottom Handle, part 4, size 36 --> Drawer Handle, part 4, size 36 /// Placement Bottom\r\n // --> Door Handle, part 4, size 36 /// Placement Bottom\r\n // 5. Bottom Handle, part 5, size 30, O --> Drawer Handle, part 5, size 30, O (edited) /// Placement Bottom\r\n }\r\n\r\n load(dbFeature) {\r\n if (((dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\") && dbFeature.metaData[\"Placement\"]\r\n && dbFeature.metaData[\"Placement\"].includes(\"Bottom\")) {\r\n dbFeature.metaData[\"Part\"] = [\"6\"];\r\n // console.log(\"dbFeaturedbF6\", dbFeature);\r\n } else if (((dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"3\") && dbFeature.metaData[\"Placement\"]\r\n && dbFeature.metaData[\"Placement\"].includes(\"Bottom\")) {\r\n dbFeature.metaData[\"Part\"] = [\"7\"];\r\n // console.log(\"dbFeaturedbFeature7\", dbFeature);\r\n }\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout6\") || dbFeature.metaData[\"RoomLayout\"].includes(\"6\"))) {\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new DoorHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const hoodIsVisible = applianceParent && applianceParent.hood && applianceParent.hood.activeFeature && !applianceParent.hood.disabled;\r\n const microwaveIsVisible = applianceParent && applianceParent.microwave && applianceParent.microwave.activeFeature && !applianceParent.microwave.disabled;\r\n conditions.push({\r\n propName: \"Hood\",\r\n propValue: hoodIsVisible || ((cabinetParent.layout.type === 6) && microwaveIsVisible) ? \"H\" : \"C\"\r\n });\r\n if (hoodIsVisible && applianceParent.hood.activeFeature.metaData[\"Width\"]) {\r\n conditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.hood.activeFeature.metaData[\"Width\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"Hood\" && metaObject.propName !== \"Width\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const countertopParent = cabinetParent.layout.parts[Countertop.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n if (rangeIsActive && applianceParent.range.activeFeature.metaData[\"Width\"]) {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.range.activeFeature.metaData[\"Width\"],\r\n })\r\n }\r\n } else {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\",\r\n })\r\n }\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n const fridgeIsVisible = applianceParent && applianceParent.fridge && !applianceParent.fridge.disabled\r\n && applianceParent.fridge.activeFeature;\r\n const fridgeConditions = applianceParent && applianceParent.fridge\r\n ? applianceParent.fridge.getFridgeWidthAndHeightConditions()\r\n : [];\r\n return feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"Fridge\",\r\n propValue: fridgeIsVisible ? \"F\" : \"C\"\r\n }, ...fridgeConditions\r\n ])\r\n } else if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"6\")) {\r\n if (countertopParent && countertopParent.sink && countertopParent.sink.activeFeature && !countertopParent.sink.disabled) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n ...arrayOfConditions, {\r\n propName: \"MountType\",\r\n propValue: countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n }])\r\n }\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"7\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class DrawerHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'drawer_handle';\r\n this.partName = 'Drawer Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.drawer_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"MountType\"]) && dbFeature.metaData[\"MountType\"][0] === \"0\") {\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"FM\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"FM\")\r\n }\r\n if (!dbFeature.metaData[\"MountType\"].includes(\"ST\")) {\r\n dbFeature.metaData[\"MountType\"].push(\"ST\")\r\n }\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout3\") || dbFeature.metaData[\"RoomLayout\"].includes(\"3\"))) {\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"U\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"U\")\r\n // }\r\n // if (!dbFeature.metaData[\"MountType\"].includes(\"S\")) {\r\n // dbFeature.metaData[\"MountType\"].push(\"S\")\r\n // }\r\n dbFeature.metaData[\"MountType\"] = METADATA.ALL\r\n }\r\n if (dbFeature.metaData[\"RoomLayout\"]\r\n && (dbFeature.metaData[\"RoomLayout\"].includes(\"Layout6\") || dbFeature.metaData[\"RoomLayout\"].includes(\"6\"))) {\r\n if (!dbFeature.metaData[\"Stovetop\"]) {\r\n dbFeature.metaData[\"Stovetop\"] = METADATA.NO\r\n }\r\n }\r\n const partNumber = (dbFeature.metaData[\"Part\"] && dbFeature.metaData[\"Part\"][0]) === \"1\" ? 1 : 2;\r\n return super.load_(dbFeature, new DrawerHandle(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomHandle.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const cabinetParent = this.getParent();\r\n const countertopParent = cabinetParent.layout.parts[CountertopGroup.id];\r\n // const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n const sinkIsVisible = countertopParent && countertopParent.sink && countertopParent.sink.activeFeature && !countertopParent.sink.disabled;\r\n if (sinkIsVisible) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: countertopParent.sink.activeFeature.metaData[\"MountType\"]\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions().filter(metaObject => {\r\n return metaObject.propName !== \"MountType\"\r\n })\r\n }\r\n\r\n getActiveFeaturePartsAccordingToActiveFeature(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n // console.log(\"name1\", name1);\r\n let arrayOfConditions = activeFeatureConditions.length\r\n ? activeFeatureConditions\r\n : this.getActiveFeatureConditions(fromFeature);\r\n\r\n const cabinetParent = this.getParent();\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n\r\n //part 1 will be with MountType\r\n // part 2 dishwasher - depends on dishwasher metaData Width\r\n //part 3 depends on stove metaData Width // on Room Layout 6 we have Range + Stovetop, not Stove\r\n // part 4 - fridge\r\n // part 5 - peninsula\r\n\r\n let withStoveConditions = [...arrayOfConditions];\r\n if (applianceParent && applianceParent.layout.type === 6) {\r\n const rangeIsActive = applianceParent && applianceParent.range && !applianceParent.range.disabled && applianceParent.range.activeFeature;\r\n withStoveConditions.push({\r\n propName: \"Stovetop\",\r\n propValue: rangeIsActive ? METADATA.NO : \"ST\",\r\n });\r\n if (rangeIsActive && applianceParent.range.activeFeature.metaData[\"Width\"]) {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent.range.activeFeature.metaData[\"Width\"],\r\n })\r\n }\r\n } else {\r\n withStoveConditions.push({\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.stove && applianceParent.stove.activeFeature\r\n && applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.stove.activeFeature.metaData[\"Width\"]\r\n : \"30\",\r\n })\r\n }\r\n const withDishWasherConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.dishwasher && applianceParent.dishwasher.activeFeature\r\n && applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.dishwasher.activeFeature.metaData[\"Width\"]\r\n : \"24\",\r\n }];\r\n const withFridgeConditions = [...arrayOfConditions, {\r\n propName: \"Width\",\r\n propValue: applianceParent && applianceParent.fridge && applianceParent.fridge.activeFeature\r\n && applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n ? applianceParent.fridge.activeFeature.metaData[\"Width\"]\r\n : \"36\",\r\n }];\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n if (name1 !== feature.getSplittedFeatureName()) {\r\n return false\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"2\")) {\r\n return feature.matchesMetaForArrayOfConditions(withDishWasherConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"3\")) {\r\n return feature.matchesMetaForArrayOfConditions(withStoveConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"4\")) {\r\n return feature.matchesMetaForArrayOfConditions(withFridgeConditions)\r\n }\r\n if (feature.metaData[\"Part\"] && feature.metaData[\"Part\"].includes(\"5\")) {\r\n if (!applianceParent || !applianceParent.oven || applianceParent.oven.disabled || !applianceParent.oven.activeFeature) {\r\n return false\r\n }\r\n }\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions)\r\n });\r\n\r\n // console.log(\"this.featuresParts\", this.featuresParts);\r\n // console.log(\"activeFeatureParts\", activeFeatureParts);\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n}\r\n","import React, {Fragment} from \"react\";\r\nimport {View, Text, Image} from \"@react-pdf/renderer\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {getCartItemName} from \"./printDocumentFunctions\";\r\n\r\nconst PrintDocumentBodyWizardItem = (props) => {\r\n\r\n const {styles, wizardGroup, selectedFeature, fabricatorData, printContext, locale, cartItemsThumbnails} = props;\r\n\r\n const baseInfo = (\r\n \r\n \r\n {selectedFeature\r\n ? getCartItemName(selectedFeature, fabricatorData, printContext, locale)\r\n : wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}\r\n \r\n \r\n \r\n {wizardGroup.productCartDescription || \"\"}\r\n \r\n \r\n \r\n )\r\n\r\n const withThumbnail = fabricatorData.receiptSettings && fabricatorData.receiptSettings.showThumbnailsAndDescriptions\r\n && cartItemsThumbnails\r\n && cartItemsThumbnails[wizardGroup.id];\r\n\r\n return (\r\n \r\n \r\n {wizardGroup.title || wizardGroup.groupName}\r\n \r\n \r\n {withThumbnail ? (\r\n \r\n \r\n \r\n \r\n \r\n {baseInfo}\r\n \r\n \r\n ) : baseInfo}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentBodyWizardItem.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n // locale: PropTypes.string.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentBodyWizardItem\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n getCurrencySign,\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice, sortByOrder,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\nimport {DISCOUNT_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\nimport {\r\n getDepositAmount, getDepositDiscount,\r\n getDiscountsForSection,\r\n getSubTotalPrice,\r\n shouldCalculateDiscount\r\n} from \"../../priceWorksheet/discountFunctions\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport PrintDocumentDisclaimer from \"./printDocumentDisclaimer\";\r\nimport {getShowPrice} from \"../../../misc/priceFunctions\";\r\nimport {getDifferentCurrencyCartItems} from \"../../../misc/misc2\";\r\nimport {isCafeCountetops} from \"../../../misc/fabricatorHardcode\";\r\n\r\nconst PrintDocumentTotal = (props) => {\r\n const {styles, priceWorksheetState, fabricatorData, locale, cartItems} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n const fabricatorSettings = fabricatorData.settings;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n if (fabricatorData.isAmericanImport) {\r\n return null\r\n }\r\n\r\n let subTotalPrice = getTotalPrice(null, false).materialPrice;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{name: \"\", materialTax: totalPrice.materialTaxes}];\r\n const showTaxes = allTaxes.some(tax => tax.materialTax > 0);\r\n\r\n const roundedPrice = (price) => toFixedPrice(Math.trunc(price * 100) / 100);\r\n\r\n const getDiscountPercentageAmount = (discountSections, discountSection, discount) => {\r\n const currentTotal = getSubTotalPrice(discountSections, discountSection, discount, true, customAddedDiscounts);\r\n const priceTaken = currentTotal * discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return roundedPrice(priceTaken);\r\n };\r\n\r\n let discountsTotalAmount = 0;\r\n if (discountSections.length) {\r\n discountSections.forEach(discountSection => {\r\n const allDiscounts = sortByOrder(getDiscountsForSection(discountSection, customAddedDiscounts));\r\n allDiscounts.forEach(discount => {\r\n if (shouldCalculateDiscount(discount)) {\r\n const discountAmount = (discount.type === DISCOUNT_TYPES.price)\r\n ? discount.amount\r\n : getDiscountPercentageAmount(discountSections, discountSection, discount);\r\n discountsTotalAmount = discountsTotalAmount + (+discountAmount);\r\n }\r\n })\r\n })\r\n }\r\n\r\n const showPrice = getShowPrice(fabricatorData, true);\r\n\r\n if (!showPrice) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, cartItems);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map((currObject, currObjectIndex) => {\r\n let currencySubTotal = getTotalPrice(null, false, currObject.cartItems).materialPrice;\r\n currencySubTotal = toFixedPrice(currencySubTotal, true);\r\n return (\r\n \r\n {printContext.messages[\"receipt.total.subTotal\"]}:\r\n \r\n {getCurrencySign(currObject.currency, fabricatorSettings) + currencySubTotal}\r\n \r\n \r\n )\r\n }) : null}\r\n \r\n {printContext.messages[\"receipt.total.subTotal\"]}:\r\n {getPriceWithCurrency(fabricatorSettings, subTotalPrice, null, false, true)}\r\n \r\n {discountsTotalAmount ? (\r\n \r\n {printContext.messages[\"receipt.total.discounts\"]}:\r\n -{getPriceWithCurrency(fabricatorSettings, roundedPrice(discountsTotalAmount), null, false, true)}\r\n \r\n ) : null}\r\n {showTaxes ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n const taxTotal = taxObject.materialTax;\r\n const taxName = taxObject.nameIntl && taxObject.nameIntl[locale]\r\n ? taxObject.nameIntl[locale]\r\n : taxObject.state || printContext.messages[\"receipt.total.tax\"]\r\n return (\r\n \r\n {taxName}\r\n {getPriceWithCurrency(fabricatorSettings, taxTotal, null, false, true)}\r\n \r\n )\r\n }) : null}\r\n {totalPrice.installationTaxes ? (\r\n \r\n {printContext.messages[\"receipt.total.installationTaxes\"]}\r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.installationTaxes, null, false, true)}\r\n \r\n ) : null}\r\n {fabricatorSettings.useShipping || isCafeCountetops ? (\r\n \r\n {printContext.messages[\"grohe.cart.confirm.columns.delivery\"]}\r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.totalDeliveryCost, null, false, true)}\r\n \r\n ) : null}\r\n {(fabricatorSettings.deposit && fabricatorSettings.enableDeposit) || getDepositDiscount(discountSections) ? (\r\n \r\n {printContext.messages[\"depositPopup.depositAmount\"]}:\r\n \r\n {getPriceWithCurrency(fabricatorSettings, getDepositAmount(discountSections, grandTotal, fabricatorData), null, false, true)}\r\n \r\n \r\n ) : null}\r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(null, true, currObject.cartItems);\r\n const total = toFixedPrice(getQuotePriceWithTaxes(currentTotal), true)\r\n return (\r\n \r\n {printContext.messages[\"receipt.total.total\"]}:\r\n {getCurrencySign(currObject.currency, fabricatorSettings) + total}\r\n \r\n )\r\n }) : null}\r\n \r\n {printContext.messages[\"receipt.total.total\"]}:\r\n {getPriceWithCurrency(fabricatorSettings, grandTotal, null, false, true)}\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentTotal.propTypes = {\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n fabricatorData: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n cartItems: PropTypes.array.isRequired,\r\n};\r\n\r\nexport default PrintDocumentTotal\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text, Image} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentSignature = (props) => {\r\n const {styles, isContractSign, receiptSignature, userInfo, assignQuotePopupCustomer, locale, fabricatorData} = props;\r\n const {receiptSettings} = fabricatorData;\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const customerName = assignQuotePopupCustomer\r\n ? assignQuotePopupCustomer.fullName\r\n : userInfo.firstName + (userInfo.lastName ? (\" \" + userInfo.lastName) : \"\");\r\n\r\n const formattedDate = (new Date().toLocaleString(locale,\r\n {year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit'}\r\n )).replace(/,/g, \"\");\r\n\r\n return (\r\n \r\n \r\n \r\n {receiptSettings && receiptSettings.doNotFillNameAndDate ? null : customerName}\r\n \r\n {printContext.messages[\"receipt.signature.name\"]}\r\n \r\n \r\n \r\n {receiptSettings && receiptSettings.doNotFillNameAndDate ? null : formattedDate}\r\n \r\n {printContext.messages[\"receipt.signature.date\"]}\r\n \r\n \r\n {receiptSignature && !isContractSign\r\n && !(fabricatorData.receiptSettings && fabricatorData.receiptSettings.hideSignatureField)\r\n ? \r\n : null}\r\n {printContext.messages[\"receipt.signature.signature\"]}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentSignature.propTypes = {\r\n styles: PropTypes.object.isRequired,\r\n locale: PropTypes.string.isRequired,\r\n userInfo: PropTypes.object.isRequired,\r\n assignQuotePopupCustomer: PropTypes.object,\r\n isContractSign: PropTypes.bool,\r\n receiptSignature: PropTypes.string,\r\n};\r\n\r\nexport default PrintDocumentSignature\r\n","import React from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PrintDocumentDiscount from \"./printDocumentDiscount\";\r\nimport {\r\n getDiscountsForSection,\r\n isSaveOnlyDiscount,\r\n shouldCalculateDiscount\r\n} from \"../../priceWorksheet/discountFunctions\";\r\nimport {getQuotePriceWithTaxes, getTotalPrice, sortByOrder} from \"../../../misc/helpers\";\r\nimport {DISCOUNT_SECTION_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\n\r\n\r\nconst PrintDocumentDiscountsList = (props) => {\r\n const {styles, priceWorksheetState, fabricatorSettings} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n\r\n const totalPrice = getTotalPrice();\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n return (\r\n \r\n {discountSections.map((discountSection, discountSectionIndex) => {\r\n if (discountSection.type === DISCOUNT_SECTION_TYPES.finance) {\r\n return null\r\n }\r\n const allDiscounts = getDiscountsForSection(discountSection, customAddedDiscounts);\r\n const displayDiscounts = sortByOrder(allDiscounts.filter(discount => {\r\n return shouldCalculateDiscount(discount) || isSaveOnlyDiscount(discount)\r\n }));\r\n if (!displayDiscounts.length) {\r\n return null\r\n }\r\n return (\r\n \r\n {discountSection.name}\r\n {displayDiscounts.map((discount, discountIndex) => {\r\n return \r\n })}\r\n \r\n )\r\n })}\r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscountsList.propTypes = {\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentDiscountsList\r\n","import React, {Fragment, useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {DISCOUNT_MAIN_TYPES, DISCOUNT_TYPES} from \"../../priceWorksheet/discounstInterface\";\r\nimport {getPriceWithCurrency, toFixedPrice} from \"../../../misc/helpers\";\r\nimport {getCustomDepositAmount, getSubTotalPrice} from \"../../priceWorksheet/discountFunctions\";\r\nimport PrintDocumentDiscountFinance from \"./printDocumentDiscountFinance\";\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\n\r\nconst PrintDocumentDiscount = (props) => {\r\n const {styles, discount, priceWorksheetState, discountSection, fabricatorSettings, grandTotal} = props;\r\n const {discountSections, customAddedDiscounts} = priceWorksheetState;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const getDiscountPercentageAmount = () => {\r\n const grandTotal = getSubTotalPrice(discountSections, discountSection, discount, true, customAddedDiscounts);\r\n const priceTaken = grandTotal * discount.amount / 100 // for ex. 25% from 2700 = 625\r\n return toFixedPrice(Math.trunc(priceTaken * 100) / 100);\r\n };\r\n\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n return (\r\n \r\n {discount.name}\r\n \r\n {getPriceWithCurrency(fabricatorSettings, getCustomDepositAmount(discountSections, grandTotal))}\r\n \r\n \r\n )\r\n }\r\n\r\n if (discount.discountType === DISCOUNT_MAIN_TYPES.finance) {\r\n return \r\n }\r\n\r\n const discountAmount = discount.type === DISCOUNT_TYPES.price\r\n ? \"-\" + getPriceWithCurrency(fabricatorSettings, toFixedPrice(discount.amount))\r\n : \"-\" + getPriceWithCurrency(fabricatorSettings, getDiscountPercentageAmount());\r\n\r\n const approveOptions = discount.approveOptions ? JSON.parse(discount.approveOptions) : null;\r\n\r\n return (\r\n \r\n \r\n \r\n {discount.name}\r\n {approveOptions && approveOptions.selectedOption ? (\r\n \r\n {printContext.messages[\"receipt.discount.approvedBy\"]}: \r\n {approveOptions.selectedOption}\r\n \r\n ) : null}\r\n \r\n {discountAmount}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscount.propTypes = {\r\n discount: PropTypes.object.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n discountSection: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n grandTotal: PropTypes.number,\r\n};\r\n\r\nexport default PrintDocumentDiscount\r\n","import React, {useContext} from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {PrintDocumentContext} from \"./printDocumentContext\";\r\nimport {DISCOUNT_SECTION_TYPES, DISCOUNT_FINANCE_CELLS} from \"../../priceWorksheet/discounstInterface\";\r\nimport {calculateCellValue} from \"../../priceWorksheet/discountFunctions\";\r\n\r\nconst PrintDocumentDiscountFinance = (props) => {\r\n const {styles, discount, priceWorksheetState, fabricatorSettings, grandTotal} = props;\r\n const {discountSections, financePercentage, financeCellsVisible} = priceWorksheetState;\r\n\r\n const printContext = useContext(PrintDocumentContext);\r\n\r\n const financeSection = discountSections.find(sec => sec.type === DISCOUNT_SECTION_TYPES.finance);\r\n if (!financeSection) {\r\n return null;\r\n }\r\n\r\n let parsedOptions = typeof discount.financeOptions === \"string\"\r\n ? JSON.parse(discount.financeOptions)\r\n : [];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {printContext.messages[\"shoppingCart.discounts.financeTitle\"]}\r\n \r\n \r\n \r\n \r\n {printContext.messages[\"shoppingCart.discounts.financeSubTitle\"]}\r\n \r\n \r\n {priceWorksheetState.financePercentage + \"%\"}\r\n \r\n \r\n \r\n \r\n {Object.keys(DISCOUNT_FINANCE_CELLS).map((property, propertyIndex) => {\r\n const cellStyles = propertyIndex === 1\r\n ? [styles.financeCell, styles.marginL10, styles.marginR10]\r\n : styles.financeCell;\r\n const selectedDiscount = financeSection.discounts.find(dis => dis.uuId === parsedOptions[propertyIndex]);\r\n return (\r\n \r\n \r\n {selectedDiscount\r\n ? selectedDiscount.financeMonths + \" \" + printContext.messages[\"shoppingCart.discounts.months\"]\r\n : null}\r\n \r\n \r\n \r\n {financeCellsVisible ? calculateCellValue(\r\n {discountSections, financePercentage, fabricatorSettings},\r\n selectedDiscount ? selectedDiscount.financeMonths : 0,\r\n grandTotal,\r\n ) : null}\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n};\r\n\r\nPrintDocumentDiscountFinance.propTypes = {\r\n discount: PropTypes.object.isRequired,\r\n priceWorksheetState: PropTypes.object.isRequired,\r\n discountSection: PropTypes.object.isRequired,\r\n fabricatorSettings: PropTypes.object.isRequired,\r\n styles: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PrintDocumentDiscountFinance\r\n","import React from \"react\";\r\nimport {View, Text} from '@react-pdf/renderer';\r\n\r\nconst PrintDocumentAsCentralText = (props) => {\r\n const {styles} = props;\r\n return (\r\n \r\n Buyer(s) listed above hereby jointly and severally agrees to purchase the goods and/or services listed below, in accordance with the prices and terms described on this Specification Sheet and the front and the reverse of the accompanying CUSTOM REMODELING AGREEMENT, of which this Specification Sheet is a part.\r\n \r\n )\r\n};\r\n\r\n\r\nexport default PrintDocumentAsCentralText\r\n","import {leadApiGet} from \"./api\";\r\nimport {fixWizardItem} from \"../../bvcomponents/look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon\";\r\n\r\nexport const getWizardListFromBackend = async () => {\r\n // const mainResponse = await leadApiGet(`/api/public/bvdata/${document.kvConfig.userId}/30?mode=leadForm`);\r\n const mainResponse = await leadApiGet(`/api/Public/Wizard/Get/${document.kvConfig.userId}/leadform`);\r\n // if (mainResponse.data) {\r\n // console.log(\"mainResponse\", mainResponse.data);\r\n // }\r\n if (mainResponse && mainResponse.data) {\r\n const wizardList = JSON.parse(mainResponse.data)\r\n .filter(wizardItem => wizardItem.enabled)\r\n .map((wizardItem, wizardItemIndex) => {\r\n wizardItem = fixWizardItem(wizardItem, wizardItemIndex,true);\r\n // wizardItem.id = getUpdatedWizardId(wizardItem.visualizer, wizardItem.id);\r\n return wizardItem\r\n });\r\n\r\n return {wizardList, error: mainResponse.data.error}\r\n }\r\n return {wizardList: [], error: mainResponse.error}\r\n}\r\n","import {getLixilCampaignInfo} from \"../lixilLogic/lixilActions\";\r\nimport {\r\n formatCalendarDateToMatchAvailableDate,\r\n getSelectedLixilDateObject\r\n} from \"../appointmentLogic/appointmentActions\";\r\nimport {replaceMaskToPassPhoneOnTheBackend} from \"../userLogic/userActions\";\r\n\r\n/**\r\n * returns feature compressed object that can be passed on the backend (without redundant info)\r\n * @param fromFeature {featureInterface}\r\n * @returns {object}\r\n */\r\nconst getCompressedFeature = (fromFeature) => {\r\n if (!fromFeature) {\r\n return null\r\n }\r\n return {\r\n partName: fromFeature.customDisplayName || fromFeature.displayName,\r\n sharedFeatureName: fromFeature.sharedFeatureName,\r\n dbFeatureId: fromFeature.id,\r\n sku: fromFeature.sku,\r\n partId: fromFeature.partId,\r\n groupName: fromFeature.groupName,\r\n featureDefinitionID: fromFeature.featureDefinitionID,\r\n }\r\n}\r\n\r\n/**\r\n * is used to compress the data that will be passed in the job data back and force\r\n * @param allWizardsValues {array}\r\n * @param allWizardsValues {array}\r\n */\r\nconst getCompressedAllWizardValues = (allWizardsValues) => {\r\n const allWizardsValuesToSave = allWizardsValues.map(newWizObject => {\r\n let wizValues = {};\r\n Object.keys(newWizObject.wizardSelectedValues).forEach(stepIndex => {\r\n wizValues[stepIndex] = Object.assign({}, newWizObject.wizardSelectedValues[stepIndex])\r\n if (newWizObject.wizardSelectedValues[stepIndex].wizardGroup) {\r\n wizValues[stepIndex].wizardGroup = Object.assign(\r\n {},\r\n newWizObject.wizardSelectedValues[stepIndex].wizardGroup,\r\n {featuresExcluded: [], featuresIncluded: []} // to keep clean in json\r\n )\r\n if (wizValues[stepIndex].wizardGroup.mergedGroups) {\r\n wizValues[stepIndex].wizardGroup.mergedGroups = wizValues[stepIndex].wizardGroup.mergedGroups.map(wizGroup => {\r\n return {id: wizGroup.id, groupName: wizGroup.groupName}\r\n });\r\n }\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeature) {\r\n wizValues[stepIndex].selectedFeature = getCompressedFeature(\r\n newWizObject.wizardSelectedValues[stepIndex].selectedFeature,\r\n newWizObject.quoteIndex\r\n ); // to keep clean in json\r\n }\r\n if (newWizObject.wizardSelectedValues[stepIndex].selectedFeatures) {\r\n wizValues[stepIndex].selectedFeatures = newWizObject.wizardSelectedValues[stepIndex].selectedFeatures.map(feature => getCompressedFeature(\r\n feature,\r\n newWizObject.quoteIndex\r\n ))\r\n }\r\n })\r\n return Object.assign({}, newWizObject, {wizardSelectedValues: wizValues})\r\n });\r\n // console.log(\"allWizardsValues to save ->\", allWizardsValuesToSave);\r\n return allWizardsValuesToSave\r\n}\r\nconst getJobRecords = (store) => {\r\n const {wizardState, userState} = store;\r\n return [{\r\n bvImage: \"\",\r\n features: [],\r\n imageUrl: null,\r\n installationCost: 0,\r\n installationTaxes: 0,\r\n isCreatedInSQFT: false,\r\n isVisibleInSQFT: false,\r\n layoutType: 1,\r\n leadFeatures: [],\r\n materialCost: 0,\r\n materialTaxes: 0,\r\n priceTaxes: [],\r\n qtCatName: \"\",\r\n room: \"LeadForm\",\r\n sFtCalcDataJson: null,\r\n sqFtCalcImage: null,\r\n staticCanvasImage: \"\",\r\n data: JSON.stringify({ // here is the main stored info\r\n id: 1,\r\n lookId: 1,\r\n layout_type: 1,\r\n cartState: {},\r\n navigationType: \"LeadForm\",\r\n toolVersion: 1,\r\n userState: Object.assign({}, userState, {\r\n userInfo: Object.assign({}, userState.userInfo, {\r\n phone: replaceMaskToPassPhoneOnTheBackend(userState.userInfo.phone)\r\n })\r\n }),\r\n allWizardsValues: getCompressedAllWizardValues(wizardState.allWizardsValues)\r\n })\r\n }]\r\n}\r\n\r\nexport const getSaveJobData = (store, isDelayedSave = false) => {\r\n const {globalState, userState, appointmentState} = store;\r\n\r\n const {salesRepID, appointmentDate, appointmentTimeSlot, availableAppointmentDates} = appointmentState;\r\n\r\n const lixilCampaignInfo = getLixilCampaignInfo(store);\r\n if (appointmentDate) {\r\n const appDate = new Date(appointmentDate);\r\n lixilCampaignInfo.appointment_date_stc = formatCalendarDateToMatchAvailableDate(appDate, true);\r\n if (appointmentTimeSlot) {\r\n const selectedLixilDateObject = getSelectedLixilDateObject(appDate, availableAppointmentDates);\r\n if (selectedLixilDateObject) {\r\n const timeSlotObject = selectedLixilDateObject.salesRepsInSlots.find(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)\r\n if (timeSlotObject && timeSlotObject.slotStartTime) {\r\n lixilCampaignInfo.appointment_time_stc = timeSlotObject.slotStartTime[0] === \"0\"\r\n ? timeSlotObject.slotStartTime.substring(1) // 04:00 -> 4:00\r\n : timeSlotObject.slotStartTime;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const lixilData = {\r\n salesRepID,\r\n receiveSmsCheckbox: userState.userInfo.receiveSmsCheckbox,\r\n ...lixilCampaignInfo,\r\n isDelayedSave,\r\n }\r\n\r\n const appForm = document.getElementById(\"app-form\");\r\n if (appForm && appForm.children) {\r\n [].slice.call(appForm.children).forEach(input => {\r\n if (input.name && input.value) {\r\n lixilData[input.name] = input.value;\r\n }\r\n })\r\n }\r\n\r\n const saveDataBeforeConverting = {\r\n // fast\r\n jobId: document.kvConfig.jobId || globalState.jobId,\r\n fromBV: true,\r\n fabricatorId: document.kvConfig.userId,\r\n notes: [],\r\n documents: [],\r\n employeeId: 0,\r\n shareUrl: \"\",\r\n discountSections: [],\r\n installations: [],\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n total: {\r\n materialCost: 0,\r\n installationCost: 0,\r\n installationTaxes: 0,\r\n materialTaxes: 0,\r\n priceTaxes: [],\r\n totalWithTaxes: 0,\r\n },\r\n records: getJobRecords(store),\r\n // fast end\r\n yesNoConsultationRequest: false,\r\n submit: true,\r\n fromCheckOutPage: false,\r\n sendConsumerEmail: true,\r\n customerEmail: userState.userInfo.email || userState.registeredUser.email || \"\",\r\n salesPerson: \"\",\r\n salesPersonEmail: \"\",\r\n leadOriginatorId: (window.salesPerson ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000)) : 0),\r\n postalCode: userState.userInfo.postal,\r\n // isNewUser: !(code below) || (userState.registeredUser.email !== userState.userInfo.email), // not sure if we need it\r\n isNewUser: !(document.kvConfig.jobId || globalState.jobId),\r\n state: \"quote\",\r\n fromTool: \"LF\", //\"BV\",\r\n toolVersion: document.kvConfig.toolVersion,\r\n visualizerType: \"LeadForm\",\r\n navigationType: \"LeadForm\",\r\n quoteRequestType: \"ScheduleAnAppointment\", // QuoteRequestType\r\n currency: \"USD\",\r\n installationTaxesRate: 0,\r\n materialTaxesRate: 0,\r\n fromDashboard: document.kvConfig.isBackend,\r\n callFabricator: document.kvConfig.callFabricatorOnSave || false,\r\n language: \"en-US\",\r\n salesRepID,\r\n lixilData,\r\n }\r\n console.log(\"saveData\", saveDataBeforeConverting);\r\n const formData = new FormData();\r\n formData.append('json', JSON.stringify(saveDataBeforeConverting));\r\n return formData\r\n}\r\n","import {leadApiPost} from \"./api\";\r\n\r\nexport const postSaveJob = async (postData) => {\r\n const mainResponse = await leadApiPost(`api/Public/SaveQuote/`, postData);\r\n console.log(\"post SaveQuote response\", mainResponse);\r\n return mainResponse\r\n}\r\n\r\nexport const postScheduleAppointment = async (postData) => {\r\n const mainResponse = await leadApiPost(`api/Public/Schedule/`, postData);\r\n console.log(\"post Schedule response\", mainResponse);\r\n return mainResponse\r\n}\r\n","import {getSelectedLixilDateObject} from \"../appointmentLogic/appointmentActions\";\r\n\r\nexport const getSaveAppointmentData = (store, jobId) => {\r\n const {appointmentDate, appointmentTime, appointmentTimeSlot, availableAppointmentDates} = store.appointmentState;\r\n const {useLixilCalendar} = store.fabricatorState;\r\n\r\n let timeToPass = appointmentTime;\r\n\r\n if (appointmentDate && useLixilCalendar && appointmentTimeSlot) {\r\n const appDate = new Date(appointmentDate);\r\n const selectedLixilDateObject = getSelectedLixilDateObject(appDate, availableAppointmentDates);\r\n if (selectedLixilDateObject) {\r\n const timeSlotObject = selectedLixilDateObject.salesRepsInSlots.find(timeSlotObject => timeSlotObject.timeSlot === appointmentTimeSlot)\r\n if (timeSlotObject && timeSlotObject.slotStartTime) {\r\n timeToPass = timeSlotObject.slotStartTime;\r\n }\r\n }\r\n }\r\n\r\n const splittedTime = timeToPass.split(\":00\");\r\n const am = splittedTime[1] && splittedTime[1].toLowerCase().includes(\"am\");\r\n\r\n let date = \"\"+appointmentDate.getDate();\r\n let month = \"\"+(appointmentDate.getMonth() + 1); // +1 because getMonth returns starting from 0 (January is 0)\r\n let year = \"\"+appointmentDate.getFullYear();\r\n\r\n date = date.length === 1 ? \"0\" + date : date;\r\n month = month.length === 1 ? \"0\" + month : month;\r\n\r\n const scheduleData = {\r\n scheduleEntryData: {\r\n // date: \"03/02/2024\",\r\n date: `${month}/${date}/${year}`,\r\n time: `${splittedTime[0].length === 1 ? \"0\" + splittedTime[0] : splittedTime[0]}:00`, // 1:00 -> 01:00\r\n am: am,\r\n duration: 60,\r\n alert: 30,\r\n appointmentType: 'Quote'\r\n },\r\n jobId,\r\n jobIdType: 'JobQuote'\r\n };\r\n\r\n console.log(\"scheduleData\", scheduleData);\r\n return scheduleData\r\n}\r\n","import {leadApiPost} from \"./api\";\r\nimport {parseUrl} from \"../helperFunctions\";\r\n\r\nconst parsedUrl = parseUrl();\r\n\r\nconst getUserRegisterOrUpdateData = (store) => {\r\n\r\n const {userInfo, userLocation} = store.userState;\r\n const {email, firstName, lastName, phone, city, state, country, postal, address2} = userInfo; // address is not used\r\n const {streetNumber, streetName} = userLocation;\r\n\r\n return {\r\n email,\r\n firstName,\r\n lastName,\r\n phone,\r\n address1: (streetNumber ? streetNumber + \" \" : \"\") + streetName,\r\n address2,\r\n city,\r\n state,\r\n country,\r\n phone2: \"\",\r\n agreedToTerms: true,\r\n subscribeToNewsletter: true,\r\n isNew: true,\r\n postal,\r\n salesPersonEmail: (window.salesPerson ? window.salesPerson.email : \"\"),\r\n salesPersonFullName: (window.salesPerson ? window.salesPerson.name : \"\"),\r\n employeeId: window.salesPerson\r\n ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000))\r\n : (parsedUrl && parsedUrl.p) ? +parsedUrl.p.split(\"/\")[0] : \"\",\r\n fabricatorId: document.kvConfig.userId || 61986,\r\n quoteRequestType: \"ScheduleAnAppointment\", // QuoteRequestType\r\n yesNoConsultationRequest: false,\r\n preferredCommunicationMethod: \"\",\r\n howDidYouHearAboutUs: \"\",\r\n language: \"en-US\",\r\n subId: document.subId && document.subId.toString ? document.subId.toString() : null,\r\n };\r\n}\r\n\r\nexport const registerUser = (store) => {\r\n return leadApiPost(\"/api/Public/RegisterClient\", getUserRegisterOrUpdateData(store))\r\n}\r\n\r\nexport const updateUser = (store) => {\r\n const {registeredUserAuthToken} = store.userState;\r\n const headers = {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": \"Bearer \" + registeredUserAuthToken,\r\n }\r\n return leadApiPost(\"/api/client/update-with-token\", getUserRegisterOrUpdateData(store), headers)\r\n}\r\n","export function parseUrl(queryString = null) {\r\n queryString = queryString || window.location.search;\r\n const query = {};\r\n const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\r\n for (let i = 0; i < pairs.length; i++) {\r\n let pair = pairs[i].split('=');\r\n query[decodeURIComponent(pair[0]).toLowerCase()] = decodeURIComponent(pair[1] || '');\r\n }\r\n return query;\r\n}\r\n","export const getErrorPopupObject = (text, buttons) => {\r\n return {\r\n visible: true,\r\n title: \"Error\",\r\n text,\r\n buttons: buttons || [{\r\n text: \"Close\",\r\n }],\r\n }\r\n}\r\n","import {IS_LIXIL_UI} from \"../config\";\r\nimport {getCurrentZIndexes} from \"../bvcomponents/appLayout\";\r\n\r\n\r\nexport const makeHoveringLayer = (layer, image, layoutType = \"Large\", canvasDimensions = null, fabricatorData = null) => {\r\n\r\n const zIndexesObject = getCurrentZIndexes();\r\n\r\n // console.log('layer+', layer);\r\n const withNewBackgrounds = [\"bvLook\", \"kvScene\", \"Fireplace\", \"LaundryRoom\"].some(visType => document.kvConfig.visualizerType === visType);\r\n\r\n const isBackgroundLayer =\r\n ((document.kvConfig.visualizerType === \"bvScene\") && Object.values(zIndexesObject.layouts[layoutType].Background).includes(layer.zIndex))\r\n || (withNewBackgrounds && layer.zIndex >= 50000);\r\n\r\n // step 1 - create an image from layer // get layerDimensions\r\n let layerDimensions = zIndexesObject.getLayerDimensions(withNewBackgrounds ? layer : layer.zIndex, layoutType, canvasDimensions);\r\n // console.log('layerDimensions+', layerDimensions);\r\n if (!layerDimensions) {\r\n console.log('layerDimensions not found!', layer);\r\n // return makeHoveringLayerOld(layer, image)\r\n layerDimensions = {\r\n polygonArray: [[0, 0], [canvasDimensions.width, 0], [canvasDimensions.width, canvasDimensions.height], [0, canvasDimensions.height]],\r\n width: canvasDimensions.width,\r\n height: canvasDimensions.height\r\n };\r\n // return makeHoveringLayerOld(layer, image)\r\n }\r\n\r\n const width = layer.cropCoords ? layer.cropCoords[2] - layer.cropCoords[0] : layerDimensions.width;\r\n const height = layer.cropCoords ? layer.cropCoords[3] - layer.cropCoords[1] : layerDimensions.height;\r\n\r\n // step 2 - create for each layer fake canvas\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\", { willReadFrequently: true });\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n // if (!backGroundIndexes.includes(layer.zIndex)) { // do it for all layers\r\n context2D.globalAlpha = fabricatorData && fabricatorData.isAmericanStandard ? 0.75 : 0.5;\r\n // }\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n const x1 = layer.cropCoords ? 0 : layerDimensions.polygonArray[0][0];\r\n const y1 = layer.cropCoords ? 0 : layerDimensions.polygonArray[0][1];\r\n context2D.drawImage(image, x1, y1, width, height, 0, 0, width, height);\r\n\r\n // step 5 - create green map for this layer\r\n let imageData = null\r\n try {\r\n imageData = context2D.getImageData(0, 0, width, height);\r\n } catch (error) {\r\n console.log(\"error creating hovering layer\", layer, image, layoutType, canvasDimensions, error);\r\n return null\r\n }\r\n // const imageData = context2D.getImageData(300, 400, 300, 400);\r\n\r\n const map = imageData.data;\r\n\r\n let r, g, b, a;\r\n\r\n const multipliers = {\r\n r: IS_LIXIL_UI ? 0 : 0.2,\r\n g: 0.7,\r\n b: IS_LIXIL_UI ? 1 : 0.2,\r\n }\r\n\r\n for (let p = 0, len = imageData.data.length; p < len; p += 4) {\r\n\r\n r = map[p];\r\n g = map[p + 1];\r\n b = map[p + 2];\r\n a = map[p + 3];\r\n\r\n if (a !== 0 && (r > 2) && (b > 2) && (g > 2)) { // not a background or not dark\r\n if (fabricatorData && fabricatorData.isAmericanStandard) {\r\n r = 231;\r\n g = 0;\r\n b = 38;\r\n } else {\r\n r = r * multipliers.r;\r\n g = g * multipliers.g;\r\n b = b * multipliers.b;\r\n }\r\n if (g > 255) {\r\n g = 255;\r\n }\r\n map[p] = r;\r\n map[p + 1] = g;\r\n map[p + 2] = b;\r\n map[p + 3] = a;\r\n } else if (isBackgroundLayer) {\r\n map[p] = 0;\r\n map[p + 1] = 0;\r\n map[p + 2] = 0;\r\n map[p + 3] = 0;\r\n }\r\n }\r\n\r\n // step 6 - put green map on canvas\r\n context2D.clearRect(0, 0, width, height);\r\n context2D.putImageData(imageData, 0, 0);\r\n\r\n const greenImage = fakeCanvas.toDataURL();\r\n const hoveringImage = new Image();\r\n hoveringImage.crossOrigin = 'Anonymous';\r\n hoveringImage.layerDimensions = layer.layerDimensions || null;\r\n hoveringImage.coords = layer.coords || null;\r\n try {\r\n hoveringImage.src = greenImage;\r\n } catch (e) {\r\n console.log(e, 'Can\\'t apply layer Hovering src', greenImage);\r\n }\r\n return {\r\n layer,\r\n context2D,\r\n layerDimensions,\r\n greenImage,\r\n hoveringImage,\r\n };\r\n};\r\n\r\nexport const makeHoveringLayerOld = (layer, image, width = 1620, height = 1080) => {\r\n // window.t0 = performance.now();\r\n\r\n // step 1 - create an image from layer // no needed it more, it comes rendered from this.draw() method\r\n // const img = new Image();\r\n // img.crossOrigin = \"Anonymous\";\r\n // img.src = layer.image;\r\n\r\n // step 2 - create for each layer fake canvas\r\n const fakeCanvas = document.createElement('canvas');\r\n fakeCanvas.setAttribute('height', `${height}px`);\r\n fakeCanvas.setAttribute('width', `${width}px`);\r\n const context2D = fakeCanvas.getContext(\"2d\", { willReadFrequently: true });\r\n\r\n // step 3 - make canvas layer 0.5 transparent\r\n context2D.globalAlpha = 0.5;\r\n\r\n // step 4 - put layer image on fake canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n\r\n if (!(image.complete && image.naturalHeight !== 0)) {\r\n return {\r\n layer,\r\n context2D,\r\n greenImage: \"\"\r\n }\r\n }\r\n\r\n context2D.drawImage(image, 0, 0);\r\n\r\n // step 5 - create green map for this layer\r\n const imageData = context2D.getImageData(0, 0, width, height);\r\n // const imageData = context2D.getImageData(300, 400, 300, 400);\r\n\r\n const map = imageData.data;\r\n\r\n let r, g, b, a;\r\n for (let p = 0, len = imageData.data.length; p < len; p += 4) {\r\n\r\n r = map[p];\r\n g = map[p + 1];\r\n b = map[p + 2];\r\n a = map[p + 3];\r\n\r\n if (a !== 0) {\r\n r = r * 0.2;\r\n b = b * 0.2;\r\n g = g * 0.7;\r\n if (g > 255) {\r\n g = 255;\r\n }\r\n map[p] = r;\r\n map[p + 1] = g;\r\n map[p + 2] = b;\r\n map[p + 3] = a;\r\n }\r\n }\r\n\r\n // step 6 - put green map on canvas\r\n context2D.clearRect(0, 0, fakeCanvas.width, fakeCanvas.height);\r\n context2D.putImageData(imageData, 0, 0);\r\n\r\n // step 7 - set values in reverse order (we need top layers to be hoverable first)\r\n // window.t1 = performance.now();\r\n // console.log(\"Call to doSomething took \" + (window.t1 - window.t0) + \" milliseconds.\");\r\n return {\r\n layer,\r\n context2D,\r\n greenImage: fakeCanvas.toDataURL()\r\n };\r\n\r\n};\r\n","/*\r\n\r\n Copyright (c) Manuel Stofer 2013 - today, PinchZoom.js\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated documentation files (the \"Software\"), to deal\r\n in the Software without restriction, including without limitation the rights\r\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n copies of the Software, and to permit persons to whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be included in\r\n all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n THE SOFTWARE.\r\n\r\n*/\r\n// import $ from 'jquery';\r\n// import ActionTypes from \"../misc/actionTypes\";\r\n\r\nimport pinchScroll from \"./pinchScroll\";\r\nimport ActionTypes from \"../misc/actionTypes\";\r\nimport {GROHE_CONFIG} from \"../bvcomponents/look/grohe/groheConfig\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport store from \"../store\";\r\nimport {setCanvasScale} from \"../actions/actionFunctions\";\r\n\r\n// polyfills\r\nif (typeof Object.assign != 'function') {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object, \"assign\", {\r\n value: function assign(target) { // .length of function is 2\r\n if (target == null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n var to = Object(target);\r\n\r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n\r\n if (nextSource != null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true\r\n });\r\n}\r\n\r\nif (typeof Array.from != 'function') {\r\n Array.from = function (object) {\r\n return [].slice.call(object);\r\n };\r\n}\r\n\r\n// utils\r\nvar buildElement = function(str) {\r\n // empty string as title argument required by IE and Edge\r\n var tmp = document.implementation.createHTMLDocument('');\r\n tmp.body.innerHTML = str;\r\n return Array.from(tmp.body.children)[0];\r\n};\r\n\r\nvar triggerEvent = function(el, name) {\r\n var event = document.createEvent('HTMLEvents');\r\n event.initEvent(name, true, false);\r\n el.dispatchEvent(event);\r\n};\r\n\r\nconst sanitizeValue = (newValue) => {\r\n return isNaN(newValue) ? 0 : newValue\r\n}\r\n\r\nvar definePinchZoom = function () {\r\n\r\n /**\r\n * Pinch zoom\r\n * @version 2.0.0\r\n * @author Manuel Stofer \r\n * @param el\r\n * @param options\r\n * @constructor\r\n */\r\n var PinchZoom = function (el, options) {\r\n this.el = el;\r\n this.elText = document.querySelector('.canvas-text');\r\n this.zoomFactor = 1;\r\n this.lastScale = 1;\r\n this.offset = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.mousePos = {\r\n x: 0,\r\n y: 0\r\n };\r\n this.coImage = null;\r\n this.containerScrolled = false;\r\n this.mouseDown = false;\r\n this.timerId = null;\r\n this.timerId = null;\r\n this.options = Object.assign({}, this.defaults, options);\r\n this.setupMarkup();\r\n this.bindEvents();\r\n if (this.options.canUseUpdate) {\r\n this.update();\r\n }\r\n // default enable.\r\n this.enable();\r\n\r\n },\r\n sum = function (a, b) {\r\n return a + b;\r\n },\r\n isCloseTo = function (value, expected) {\r\n return value > expected - 0.01 && value < expected + 0.01;\r\n },\r\n interaction = null;\r\n\r\n PinchZoom.prototype = {\r\n\r\n defaults: {\r\n tapZoomFactor: 1.75,\r\n zoomOutFactor: 1.3,\r\n animationDuration: 500,\r\n maxZoom: 1.75,\r\n minZoom: 1,\r\n lockDragAxis: false,\r\n use2d: true,\r\n dragPixelsBeforeClick: 6,\r\n zoomStartEventName: 'pz_zoomstart',\r\n zoomEndEventName: 'pz_zoomend',\r\n dragStartEventName: 'pz_dragstart',\r\n dragEndEventName: 'pz_dragend',\r\n doubleTapEventName: 'pz_doubletap',\r\n canUseUpdate: true\r\n },\r\n\r\n /**\r\n * Event handler for 'dragstart'\r\n * @param event\r\n * @param isMobile {boolean}\r\n */\r\n handleDragStart: function (event, isMobile = true) {\r\n triggerEvent(this.el, this.options.dragStartEventName);\r\n this.stopAnimation();\r\n this.lastDragPosition = false;\r\n this.hasInteraction = true;\r\n isMobile ? this.handleDrag(event) : this.handleMove(event);\r\n },\r\n\r\n /**\r\n * Event handler for 'drag'\r\n * @param event\r\n */\r\n handleDrag: function (event) {\r\n if (this.zoomFactor > 1.0) {\r\n var touch = this.getTouches(event)[0];\r\n this.drag(touch, this.lastDragPosition);\r\n this.offset = this.sanitizeOffset(this.offset);\r\n this.lastDragPosition = touch;\r\n }\r\n },\r\n /**\r\n * Event handler for 'drag'\r\n * @param event\r\n */\r\n handleMove: function (event) {\r\n let mousePos = this.getTouches({\r\n touches: [{\r\n pageX: event.pageX,\r\n pageY: event.pageY,\r\n }]\r\n })[0];\r\n // console.log(\"mousePos\", mousePos);\r\n this.drag(mousePos, this.lastDragPosition);\r\n this.offset = this.sanitizeOffset(this.offset);\r\n this.lastDragPosition = mousePos;\r\n },\r\n\r\n handleDragEnd: function () {\r\n triggerEvent(this.el, this.options.dragEndEventName);\r\n this.end();\r\n },\r\n\r\n /**\r\n * Event handler for 'zoomstart'\r\n * @param event\r\n */\r\n handleZoomStart: function () {\r\n triggerEvent(this.el, this.options.zoomStartEventName);\r\n this.stopAnimation();\r\n this.lastScale = 1;\r\n this.nthZoom = 0;\r\n this.lastZoomCenter = false;\r\n this.hasInteraction = true;\r\n },\r\n\r\n /**\r\n * Event handler for 'zoom'\r\n * @param event\r\n */\r\n handleZoom: function (event, newScale) {\r\n // a relative scale factor is used\r\n var touchCenter = this.getTouchCenter(this.getTouches(event)),\r\n scale = newScale / this.lastScale;\r\n this.lastScale = newScale;\r\n\r\n // the first touch events are thrown away since they are not precise\r\n this.nthZoom += 1;\r\n if (this.nthZoom > 3) {\r\n\r\n this.scale(scale, touchCenter);\r\n this.drag(touchCenter, this.lastZoomCenter);\r\n }\r\n this.lastZoomCenter = touchCenter;\r\n },\r\n\r\n handleZoomEnd: function () {\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n const closeToOne = isCloseTo(this.zoomFactor, 1);\r\n store.dispatch(setCanvasScale(closeToOne ? 1 : this.zoomFactor));\r\n this.end();\r\n },\r\n\r\n /**\r\n * Event handler for 'doubletap'\r\n * @param event\r\n */\r\n handleDoubleTap: function (event) {\r\n // document.querySelector('.canvas-text').innerHTML = 'doubleTap' + JSON.stringify(event);\r\n var center = this.getTouches(event)[0],\r\n zoomFactor = this.zoomFactor > 1 ? 1 : this.options.tapZoomFactor,\r\n startZoomFactor = this.zoomFactor,\r\n updateProgress = (function (progress) {\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\r\n }).bind(this);\r\n\r\n if (this.hasInteraction) {\r\n return;\r\n }\r\n if (startZoomFactor > zoomFactor) {\r\n center = this.getCurrentZoomCenter();\r\n }\r\n\r\n this.animate(this.options.animationDuration, updateProgress, this.swing);\r\n triggerEvent(this.el, this.options.doubleTapEventName);\r\n },\r\n\r\n /**\r\n * Zoom on canvas click\r\n * @param center {object}\r\n * @param zoomFactor {number}\r\n * @param allowMoving {boolean} // only for nav = product for similar products\r\n * @param withFeatureScreen {boolean} // determines whether we display feature selections with feature screen or only feature selections\r\n */\r\n zoomToCenter: function (center, zoomFactor, allowMoving = false, withFeatureScreen = true) {\r\n // this.elText.innerHTML = 'zoomToCenter' + this.isZooming;\r\n // var center = this.getTouches(event)[0],\r\n\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n\r\n const zoomOut = !center && zoomFactor === 1;\r\n const zoomOutFromLeft = zoomOut && this.offset.x < 0;\r\n\r\n if (!zoomFactor) {\r\n zoomFactor = this.zoomFactor > 1 ? this.zoomFactor : this.options.tapZoomFactor;\r\n }\r\n\r\n if (!center) {\r\n center = {\r\n x: this.el.clientWidth / 2,\r\n y: this.el.clientHeight / 2,\r\n }\r\n }\r\n\r\n // console.log(\"this.zoomFactor\", this.zoomFactor);\r\n // console.log(\"zoomFactor\", zoomFactor);\r\n\r\n // const alreadyZoomed = (this.zoomFactor > 1) && (zoomFactor > 1) && (zoomFactor !== this.options.maxZoom);\r\n // const alreadyZoomed = false; // here is always false, because we removed moving canvas in zoomed mode\r\n const alreadyZoomed = IS_PRODUCT_JOURNEY && allowMoving && (this.zoomFactor === this.options.maxZoom) // allow moving canvas in zoomed mode for new navigation type\r\n const startZoomFactor = this.zoomFactor;\r\n const startOffset = {\r\n x: this.zoomFactor === 1 ? 0 : this.offset.x,\r\n y: this.zoomFactor === 1 ? 0 : this.offset.y\r\n };\r\n const targetOffset = {\r\n x: sanitizeValue((zoomFactor - 1) * center.x),\r\n y: sanitizeValue((zoomFactor - 1) * center.y)\r\n };\r\n // console.log(\"this.offset\", this.offset);\r\n // console.log(\"targetOffset\", targetOffset);\r\n\r\n if (this.hasInteraction) {\r\n return;\r\n }\r\n if (startZoomFactor > zoomFactor) {\r\n center = this.getCurrentZoomCenter();\r\n }\r\n\r\n if (alreadyZoomed) { // keep it as is, old support, not sure how it works if we delete it\r\n\r\n const updateProgress = alreadyZoomed\r\n ? (function (progress) {\r\n this.offset.x = sanitizeValue(startOffset.x + progress * (targetOffset.x - startOffset.x));\r\n this.offset.y = sanitizeValue(startOffset.y + progress * (targetOffset.y - startOffset.y));\r\n this.update();\r\n }).bind(this)\r\n : (function (progress) {\r\n // console.log(\"startZoomFactor + progress * (zoomFactor - startZoomFactor)\", startZoomFactor + progress * (zoomFactor - startZoomFactor));\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center, false);\r\n }).bind(this);\r\n\r\n this.animate(this.options.animationDuration, updateProgress, this.swing, () => {\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n // console.log(\"finished\", );\r\n if (zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor);\r\n }\r\n this.stopAnimation();\r\n this.end();\r\n // if (this.isInsaneOffset(this.offset)) {\r\n // this.sanitizeOffsetAnimation();\r\n // }\r\n this.offset = targetOffset;\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n // console.log(\"end zoom\", );\r\n });\r\n } else {\r\n // console.log(\"targetOffset.x\", targetOffset.x);\r\n // if (targetOffset.x > 500) { // magic number to zoom in correct position\r\n // targetOffset.x = targetOffset.x * 1.8 // magic number to zoom in correct position\r\n // }\r\n this.update(targetOffset); // set canvas transform\r\n if (zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor);\r\n }\r\n this.scaleTo(zoomFactor, center, false);\r\n this.offset = this.sanitizeOffset(targetOffset);\r\n this.stopAnimation();\r\n this.hasInteraction = false;\r\n this.offset = this.sanitizeOffset(targetOffset);\r\n this.end();\r\n triggerEvent(this.el, this.options.zoomEndEventName);\r\n }\r\n\r\n if (!zoomOutFromLeft) {\r\n this.moveContainer(center, zoomFactor, withFeatureScreen);\r\n }\r\n },\r\n\r\n /**\r\n * removes container and blurres from the co image\r\n * @param withAnimation {boolean}\r\n */\r\n removeContainerScroll: function (withAnimation = false) {\r\n // if (this.coImage) {\r\n // this.coImage.classList.remove(\"blurred\");\r\n // }\r\n this.setContainerTransform(null, withAnimation);\r\n this.containerScrolled = false;\r\n\r\n // if (withAnimation) {\r\n // this.setContainerTransform(null, withAnimation);\r\n // this.containerScrolled = false;\r\n // } else {\r\n // const center = this.getCurrentZoomCenter();\r\n // const updateProgress = (function (progress) {\r\n // this.scaleTo(this.zoomFactor + progress * (1 - this.zoomFactor), center, false);\r\n // }).bind(this);\r\n // this.animate(this.options.animationDuration, updateProgress, this.swing, () => {\r\n // triggerEvent(this.el, this.options.zoomEndEventName);\r\n // this.offset = {x: 0, y: 0};\r\n // this.containerScrolled = false;\r\n // });\r\n // }\r\n\r\n },\r\n\r\n /**\r\n * moves container and blurres the co image\r\n * @param center\r\n * @param zoomFactor\r\n * @param withFeatureScreen {boolean}\r\n */\r\n moveContainer: function (center, zoomFactor, withFeatureScreen) {\r\n // console.log(\"moveContainer center\", center, zoomFactor);\r\n if (zoomFactor === 1 && this.containerScrolled) {\r\n this.removeContainerScroll();\r\n return\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n this.moveGroheContainer(center, zoomFactor, withFeatureScreen);\r\n return;\r\n }\r\n if (center && center.featureX) {\r\n if (center.isMobile) {\r\n // const menuWidth = 316;\r\n // const shiftX = center.clientWidth - (center.clientWidth * center.featureX / 100);\r\n // // console.log(\"shiftX\", shiftX);\r\n // if (shiftX < menuWidth) {\r\n // // if (center.x === center.clientWidth) {\r\n // this.setContainerTransform('translateX(-'+menuWidth+'px)');\r\n // this.containerScrolled = true;\r\n // }\r\n } else if (!center.x) {\r\n const offsetX = center.x === 0 ? 420 : 0;\r\n const percentX = center.clientWidth * center.featureX / 100;\r\n const shiftX = percentX > 420 ? 0 : 420 - percentX;\r\n const offsetY = 0;\r\n const transform2d = 'translate(' + (offsetX + shiftX) + 'px,' + offsetY + 'px)';\r\n this.setContainerTransform(transform2d);\r\n this.containerScrolled = true;\r\n // } else {\r\n // this.removeContainerScroll();\r\n }\r\n } else if (center && !center.isMobile && center.x && this.containerScrolled) {\r\n this.removeContainerScroll();\r\n }\r\n },\r\n\r\n /**\r\n * moves container and blurres the co image (for nav type = grohe)\r\n * @param center\r\n * @param zoomFactor\r\n * @param withFeatureScreen {boolean}\r\n */\r\n moveGroheContainer: function (center, zoomFactor, withFeatureScreen) {\r\n if (center && center.featureX) {\r\n const state = store.getState();\r\n let menuWidth = center.isMobile ? GROHE_CONFIG.sidebarWidth.mobile : GROHE_CONFIG.mainBarWidth.desktop;\r\n if ((state.groheState.similarProductsOpened || state.lookState.lookActiveCategory) && !center.isMobile) {\r\n menuWidth = withFeatureScreen ? menuWidth + GROHE_CONFIG.similarProductsWidth.desktop : GROHE_CONFIG.similarProductsWidth.desktop\r\n }\r\n // console.log(\"shiftX\", shiftX);\r\n // console.log(\"center.featureX\", center.featureX);\r\n if (center.featureX > 20 && (window.innerWidth <= 1920)) { // no need to move container on full hd monitors\r\n // if feature X is less than 20 - it is ok not to scroll anywhere\r\n let translate = 0;\r\n if (center.featureX > 80) {\r\n translate = menuWidth // for the very right positions\r\n } else {\r\n translate = center.featureX * 3.4 // magic number for moving container\r\n if (center.featureX > 70) {\r\n translate = translate + 20; // plus 20 pixels\r\n } else if (center.featureX > 60) {\r\n translate = translate + 50; // plus 50 pixels if more than 60\r\n } else if (center.featureX > 50) {\r\n translate = translate + 80; // plus 80 pixels if between 50 and 70\r\n }\r\n if (translate > menuWidth) {\r\n translate = menuWidth; // just in case we are overscrolling\r\n }\r\n }\r\n this.setContainerTransform('translateX(-' + translate + 'px)', true);\r\n this.containerScrolled = true;\r\n } else if (this.containerScrolled) {\r\n // this.removeContainerScroll(true);\r\n }\r\n } else if (center && !center.isMobile && center.x && this.containerScrolled) {\r\n this.removeContainerScroll(true);\r\n }\r\n },\r\n\r\n /**\r\n * sets container transform position\r\n * @param transform2d\r\n * @param withAnimation {boolean}\r\n */\r\n setContainerTransform: function (transform2d, withAnimation = false) {\r\n // this.elText.innerHTML = 'setContainerTransform' + withAnimation;\r\n\r\n if (transform2d) {\r\n // if (this.coImage && !this.coImage.classList.contains(\"blurred\")) {\r\n // this.coImage.classList.add(\"blurred\");\r\n // }\r\n if (!this.containerScrolled) {\r\n this.containerScrolled = true;\r\n }\r\n }\r\n clearTimeout(this.containerTransition);\r\n if (withAnimation) {\r\n this.container.style.transition = \"all 0.5s ease\";\r\n }\r\n this.container.style.webkitTransform = transform2d;\r\n this.container.style.mozTransform = transform2d;\r\n this.container.style.msTransform = transform2d;\r\n this.container.style.oTransform = transform2d;\r\n this.container.style.transform = transform2d;\r\n if (withAnimation) {\r\n this.containerTransition = setTimeout(() => {\r\n this.container.style.transition = \"none\";\r\n }, 500)\r\n }\r\n },\r\n\r\n /**\r\n * Max / min values for the offset\r\n * @param offset\r\n * @return {Object} the sanitized offset\r\n */\r\n sanitizeOffset: function (offset) {\r\n var maxX = (this.zoomFactor - 1) * this.getContainerX(),\r\n maxY = (this.zoomFactor - 1) * this.getContainerY(),\r\n maxOffsetX = Math.max(maxX, 0),\r\n maxOffsetY = Math.max(maxY, 0),\r\n minOffsetX = Math.min(maxX, 0),\r\n minOffsetY = Math.min(maxY, 0);\r\n\r\n return {\r\n x: sanitizeValue(Math.min(Math.max(offset.x, minOffsetX), maxOffsetX)),\r\n y: sanitizeValue(Math.min(Math.max(offset.y, minOffsetY), maxOffsetY))\r\n };\r\n },\r\n\r\n /**\r\n * Scale to a specific zoom factor (not relative)\r\n * @param zoomFactor\r\n * @param needToMoveContainer {boolean}\r\n * @param center\r\n */\r\n scaleTo: function (zoomFactor, center, needToMoveContainer = true) {\r\n this.scale(zoomFactor / this.zoomFactor, center);\r\n if (needToMoveContainer && zoomFactor === 1) {\r\n this.moveContainer(null, zoomFactor);\r\n }\r\n },\r\n\r\n /**\r\n * Scales the element from specified center\r\n * @param scale\r\n * @param center\r\n */\r\n scale: function (scale, center) {\r\n scale = this.scaleZoomFactor(scale);\r\n this.addOffset({\r\n x: sanitizeValue((scale - 1) * (center.x + this.offset.x)),\r\n y: sanitizeValue((scale - 1) * (center.y + this.offset.y))\r\n });\r\n },\r\n\r\n /**\r\n * Scales the zoom factor relative to current state\r\n * @param scale\r\n * @return the actual scale (can differ because of max min zoom factor)\r\n */\r\n scaleZoomFactor: function (scale) {\r\n var originalZoomFactor = this.zoomFactor;\r\n this.zoomFactor *= scale;\r\n this.zoomFactor = Math.round(Math.min(this.options.maxZoom, Math.max(this.zoomFactor, this.options.minZoom)) * 1000) / 1000;\r\n return this.zoomFactor / originalZoomFactor;\r\n },\r\n\r\n /**\r\n * Drags the element\r\n * @param center\r\n * @param lastCenter\r\n */\r\n drag: function (center, lastCenter) {\r\n if (lastCenter) {\r\n if(this.options.lockDragAxis) {\r\n // lock scroll to position that was changed the most\r\n if(Math.abs(center.x - lastCenter.x) > Math.abs(center.y - lastCenter.y)) {\r\n this.addOffset({\r\n x: -(center.x - lastCenter.x),\r\n y: 0\r\n });\r\n }\r\n else {\r\n this.addOffset({\r\n y: -(center.y - lastCenter.y),\r\n x: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.addOffset({\r\n y: -(center.y - lastCenter.y),\r\n x: -(center.x - lastCenter.x)\r\n });\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Calculates the touch center of multiple touches\r\n * @param touches\r\n * @return {Object}\r\n */\r\n getTouchCenter: function (touches) {\r\n return this.getVectorAvg(touches);\r\n },\r\n\r\n /**\r\n * Calculates the average of multiple vectors (x, y values)\r\n */\r\n getVectorAvg: function (vectors) {\r\n return {\r\n x: vectors.map(function (v) { return v.x; }).reduce(sum) / vectors.length,\r\n y: vectors.map(function (v) { return v.y; }).reduce(sum) / vectors.length\r\n };\r\n },\r\n\r\n /**\r\n * Adds an offset\r\n * @param offset the offset to add\r\n * @return return true when the offset change was accepted\r\n */\r\n addOffset: function (offset) {\r\n this.offset = {\r\n x: sanitizeValue(this.offset.x + offset.x),\r\n y: sanitizeValue(this.offset.y + offset.y)\r\n };\r\n },\r\n\r\n sanitize: function () {\r\n if (this.zoomFactor < this.options.zoomOutFactor) {\r\n this.zoomOutAnimation();\r\n } else if (this.isInsaneOffset(this.offset)) {\r\n this.sanitizeOffsetAnimation();\r\n }\r\n },\r\n\r\n /**\r\n * Checks if the offset is ok with the current zoom factor\r\n * @param offset\r\n * @return {Boolean}\r\n */\r\n isInsaneOffset: function (offset) {\r\n var sanitizedOffset = this.sanitizeOffset(offset);\r\n return sanitizedOffset.x !== offset.x ||\r\n sanitizedOffset.y !== offset.y;\r\n },\r\n\r\n /**\r\n * Creates an animation moving to a sane offset\r\n */\r\n sanitizeOffsetAnimation: function () {\r\n var targetOffset = this.sanitizeOffset(this.offset),\r\n startOffset = {\r\n x: this.offset.x,\r\n y: this.offset.y\r\n },\r\n updateProgress = (function (progress) {\r\n this.offset.x = sanitizeValue(startOffset.x + progress * (targetOffset.x - startOffset.x));\r\n this.offset.y = sanitizeValue(startOffset.y + progress * (targetOffset.y - startOffset.y));\r\n this.update();\r\n }).bind(this);\r\n\r\n this.animate(\r\n this.options.animationDuration,\r\n updateProgress,\r\n this.swing\r\n );\r\n },\r\n\r\n /**\r\n * Zooms back to the original position,\r\n * (no offset and zoom factor 1)\r\n */\r\n zoomOutAnimation: function () {\r\n var startZoomFactor = this.zoomFactor,\r\n zoomFactor = 1,\r\n center = this.getCurrentZoomCenter(),\r\n updateProgress = (function (progress) {\r\n this.scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\r\n }).bind(this);\r\n\r\n this.animate(\r\n this.options.animationDuration,\r\n updateProgress,\r\n this.swing\r\n );\r\n },\r\n\r\n /**\r\n * Updates the aspect ratio\r\n */\r\n updateAspectRatio: function () {\r\n this.setContainerY(this.getContainerX() / this.getAspectRatio());\r\n },\r\n\r\n /**\r\n * Calculates the initial zoom factor (for the element to fit into the container)\r\n * @return the initial zoom factor\r\n */\r\n getInitialZoomFactor: function () {\r\n return this.container.offsetWidth / this.el.offsetWidth;\r\n },\r\n\r\n /**\r\n * Calculates the aspect ratio of the element\r\n * @return the aspect ratio\r\n */\r\n getAspectRatio: function () {\r\n return this.el.offsetWidth / this.el.offsetHeight;\r\n },\r\n\r\n /**\r\n * Calculates the virtual zoom center for the current offset and zoom factor\r\n * (used for reverse zoom)\r\n * @return {Object} the current zoom center\r\n */\r\n getCurrentZoomCenter: function () {\r\n\r\n // uses following formula to calculate the zoom center x value\r\n // offset_left / offset_right = zoomcenter_x / (container_x - zoomcenter_x)\r\n var length = this.container.offsetWidth * this.zoomFactor,\r\n offsetLeft = this.offset.x,\r\n offsetRight = length - offsetLeft - this.container.offsetWidth,\r\n widthOffsetRatio = offsetLeft / offsetRight,\r\n centerX = widthOffsetRatio * this.container.offsetWidth / (widthOffsetRatio + 1),\r\n\r\n // the same for the zoomcenter y\r\n height = this.container.offsetHeight * this.zoomFactor,\r\n offsetTop = this.offset.y,\r\n offsetBottom = height - offsetTop - this.container.offsetHeight,\r\n heightOffsetRatio = offsetTop / offsetBottom,\r\n centerY = heightOffsetRatio * this.container.offsetHeight / (heightOffsetRatio + 1);\r\n\r\n // prevents division by zero\r\n if (offsetRight === 0) { centerX = this.container.offsetWidth; }\r\n if (offsetBottom === 0) { centerY = this.container.offsetHeight; }\r\n\r\n return {\r\n x: centerX,\r\n y: centerY\r\n };\r\n },\r\n\r\n canDrag: function () {\r\n return !isCloseTo(this.zoomFactor, 1);\r\n },\r\n\r\n /**\r\n * Returns the touches of an event relative to the container offset\r\n * @param event\r\n * @return array touches\r\n */\r\n getTouches: function (event) {\r\n var rect = this.container.getBoundingClientRect();\r\n var posTop = rect.top + document.body.scrollTop;\r\n var posLeft = rect.left + document.body.scrollLeft;\r\n\r\n return Array.prototype.slice.call(event.touches).map(function (touch) {\r\n return {\r\n x: touch.pageX - posLeft,\r\n y: touch.pageY - posTop,\r\n };\r\n });\r\n },\r\n //\r\n // /**\r\n // * Returns the touches of an event relative to the container offset\r\n // * @param event\r\n // * @return array touches\r\n // */\r\n // getMousePosition: function (event, container) {\r\n // var rect = container.getBoundingClientRect();\r\n // var posTop = rect.top + document.body.scrollTop;\r\n // var posLeft = rect.left + document.body.scrollLeft;\r\n //\r\n // return {\r\n // x: event.pageX - posLeft,\r\n // y: event.pageY - posTop,\r\n // };\r\n // },\r\n\r\n /**\r\n * Animation loop\r\n * does not support simultaneous animations\r\n * @param duration\r\n * @param framefn\r\n * @param timefn\r\n * @param callback\r\n */\r\n animate: function (duration, framefn, timefn, callback) {\r\n\r\n let start = performance.now();\r\n this.inAnimation = true;\r\n const _self = this;\r\n\r\n requestAnimationFrame(function animateNew(time) {\r\n // timeFraction изменяется от 0 до 1\r\n if (!_self.inAnimation) { return; }\r\n let timeFraction = (time - start) / duration;\r\n if (timeFraction > 1) timeFraction = 1;\r\n\r\n // вычисление текущего состояния анимации\r\n let progress = timeFraction;\r\n\r\n framefn(progress); // отрисовать её\r\n _self.update();\r\n\r\n if (timeFraction < 1) {\r\n requestAnimationFrame(animateNew);\r\n } else {\r\n framefn(1);\r\n if (callback) {\r\n callback();\r\n }\r\n _self.update();\r\n _self.stopAnimation();\r\n _self.update();\r\n }\r\n });\r\n\r\n // var startTime = new Date().getTime(),\r\n // renderFrame = (function () {\r\n // if (!this.inAnimation) { return; }\r\n // var frameTime = new Date().getTime() - startTime,\r\n // progress = frameTime / duration;\r\n // if (frameTime >= duration) {\r\n // framefn(1);\r\n // if (callback) {\r\n // callback();\r\n // }\r\n // this.update();\r\n // this.stopAnimation();\r\n // this.update();\r\n // } else {\r\n // if (timefn) {\r\n // progress = timefn(progress);\r\n // }\r\n // framefn(progress);\r\n // this.update();\r\n // requestAnimationFrame(renderFrame);\r\n // }\r\n // }).bind(this);\r\n // this.inAnimation = true;\r\n // requestAnimationFrame(renderFrame);\r\n },\r\n\r\n /**\r\n * Stops the animation\r\n */\r\n stopAnimation: function () {\r\n this.inAnimation = false;\r\n },\r\n\r\n /**\r\n * Swing timing function for animations\r\n * @param p\r\n * @return {Number}\r\n */\r\n swing: function (p) {\r\n return -Math.cos(p * Math.PI) / 2 + 0.5;\r\n },\r\n\r\n getContainerX: function () {\r\n return this.container.offsetWidth;\r\n },\r\n\r\n getContainerY: function () {\r\n return this.container.offsetHeight;\r\n },\r\n\r\n setContainerY: function (y) {\r\n return this.container.style.height = y + 'px';\r\n },\r\n\r\n /**\r\n * Creates the expected html structure\r\n */\r\n setupMarkup: function () {\r\n this.container = buildElement('
    ');\r\n this.coImage = document.getElementsByClassName(\"canvas-co-image\")[0];\r\n this.el.parentNode.insertBefore(this.container, this.el);\r\n this.container.appendChild(this.el);\r\n\r\n this.container.style.overflow = 'hidden';\r\n this.container.style.position = 'relative';\r\n\r\n this.el.style.webkitTransformOrigin = '0% 0%';\r\n this.el.style.mozTransformOrigin = '0% 0%';\r\n this.el.style.msTransformOrigin = '0% 0%';\r\n this.el.style.oTransformOrigin = '0% 0%';\r\n this.el.style.transformOrigin = '0% 0%';\r\n\r\n // this.el.style.position = 'absolute';\r\n },\r\n\r\n end: function () {\r\n this.hasInteraction = false;\r\n this.sanitize();\r\n // document.querySelector('.canvas-text').innerHTML = 'update end';\r\n this.update();\r\n },\r\n\r\n /**\r\n * Binds all required event listeners\r\n */\r\n bindEvents: function () {\r\n var self = this;\r\n detectGestures(this.container, this, this.elText);\r\n\r\n window.addEventListener('resize', this.updateCheck.bind(this));\r\n Array.from(this.el.querySelectorAll('img')).forEach(function(imgEl) {\r\n imgEl.addEventListener('load', self.update.bind(self));\r\n });\r\n\r\n if (this.el.nodeName === 'IMG') {\r\n this.el.addEventListener('load', this.update.bind(this));\r\n }\r\n },\r\n\r\n updateCheck: function () {\r\n if (!(window.canvasIsDragging || window.mobileMenuOpened)) {\r\n // document.querySelector('.canvas-text').innerHTML = 'update resize';\r\n this.update();\r\n }\r\n },\r\n\r\n getCanvasTransform: function (targetOffset = this.offset, targetZoomFactor = this.zoomFactor, useNewScale = false) {\r\n // if (useNewScale) {\r\n // debugger;//eslint-disable-line\r\n // }\r\n var zoomFactor = this.getInitialZoomFactor() * targetZoomFactor,\r\n offsetX = -targetOffset.x / zoomFactor,\r\n offsetY = -targetOffset.y / zoomFactor;\r\n if (useNewScale) {\r\n offsetX = offsetX * 1.8 // magic number to zoom in correct position\r\n }\r\n var transform3d = useNewScale\r\n ? 'translate3d(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px,0px)' + ' scale3d(' + zoomFactor + ', ' + zoomFactor + ',1)'\r\n : 'scale3d(' + zoomFactor + ', ' + zoomFactor + ',1)' + 'translate3d(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px,0px)',\r\n transform2d = useNewScale\r\n ? 'translate(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px)' + ' scale(' + zoomFactor + ', ' + zoomFactor + ')'\r\n : 'scale(' + zoomFactor + ', ' + zoomFactor + ') ' + 'translate(' + (offsetX > 0 ? 0 : offsetX) + 'px,' + offsetY + 'px)';\r\n\r\n return {zoomFactor, offsetX, offsetY, transform2d, transform3d}\r\n },\r\n\r\n setCanvasTransform: function (transform2d, transform3d = \"\") {\r\n this.el.style.webkitTransform = transform3d || transform2d;\r\n this.el.style.mozTransform = transform2d;\r\n this.el.style.msTransform = transform2d;\r\n this.el.style.oTransform = transform2d;\r\n this.el.style.transform = transform3d || transform2d;\r\n },\r\n\r\n /**\r\n * Updates the css values according to the current zoom factor and offset\r\n */\r\n update: function (targetOffset = this.offset) {\r\n if (this.updatePlaned || window.canvasIsDragging) {\r\n return;\r\n }\r\n this.updatePlaned = true;\r\n\r\n // document.querySelector('.canvas-text').innerHTML = 'ahahah update';\r\n // document.querySelector('.canvas-text').innerHTML = this.enabled;\r\n\r\n window.setTimeout((function () {\r\n this.updatePlaned = false;\r\n this.updateAspectRatio();\r\n\r\n // this.elText.innerHTML = this.offset.x + \" / \" + this.offset.y;\r\n const isMobile = this.el.dataset.mobile === \"true\";\r\n\r\n var {offsetX, transform2d, transform3d}\r\n = this.getCanvasTransform(targetOffset, this.zoomFactor, true); // new for desktop\r\n\r\n var removeClone = (function () {\r\n if (this.clone) {\r\n this.clone.parentNode.removeChild(this.clone);\r\n delete this.clone;\r\n }\r\n }).bind(this);\r\n\r\n const offsetXForContainer = offsetX / 1.8; // because we increased it in getCanvasTransform func\r\n if (offsetXForContainer > 0 && !interaction && !IS_PRODUCT_JOURNEY) {\r\n const shiftXFromLeft = isMobile ? 2 : 2.5;\r\n const translateX = offsetXForContainer > 10 ? offsetXForContainer * shiftXFromLeft : offsetXForContainer;\r\n this.setContainerTransform('translateX('+(translateX)+'px)');\r\n }\r\n\r\n // Scale 3d and translate3d are faster (at least on ios)\r\n // but they also reduce the quality.\r\n // PinchZoom uses the 3d transformations during interactions\r\n // after interactions it falls back to 2d transformations\r\n if (!this.options.use2d || this.hasInteraction || this.inAnimation) {\r\n this.is3d = true;\r\n removeClone();\r\n this.setCanvasTransform(transform2d, transform3d);\r\n } else {\r\n // When changing from 3d to 2d transform webkit has some glitches.\r\n // To avoid this, a copy of the 3d transformed element is displayed in the\r\n // foreground while the element is converted from 3d to 2d transform\r\n if (this.is3d) {\r\n this.clone = this.el.cloneNode(true);\r\n this.clone.style.pointerEvents = 'none';\r\n this.container.appendChild(this.clone);\r\n window.setTimeout(removeClone, 200);\r\n }\r\n\r\n this.setCanvasTransform(transform2d);\r\n\r\n this.is3d = false;\r\n }\r\n }).bind(this), 0);\r\n },\r\n\r\n /**\r\n * Enables event handling for gestures\r\n */\r\n enable: function() {\r\n this.enabled = true;\r\n },\r\n\r\n /**\r\n * Disables event handling for gestures\r\n */\r\n disable: function() {\r\n this.enabled = false;\r\n },\r\n\r\n /**\r\n * Returns scale\r\n */\r\n getScale: function() {\r\n return this.zoomFactor\r\n },\r\n\r\n reset: function() {\r\n // var currentTranslate = getTranslate(this.el);\r\n // this.elText.innerHTML = JSON.stringify(currentTranslate);\r\n this.zoomFactor = 1;\r\n this.offset = {\r\n x: 0,\r\n y: 0\r\n };\r\n // this.end();\r\n // this.elText.innerHTML = 'reset!';\r\n\r\n },\r\n\r\n imageCanvasScroll: function (canvasClass, removeAllClasses, layoutType) {\r\n\r\n // document.querySelector('.canvas-text').innerHTML = 'imageCanvasScroll ' + canvasClass;\r\n clearTimeout(this.timerId);\r\n if (removeAllClasses) {\r\n window.imageCanvasScroll = true;\r\n this.el.style.transition = 'all 0.5s ease';\r\n this.el.style.WebkitTransition = 'all 0.5s ease';\r\n this.el.style.MozTransition = 'all 0.5s ease';\r\n this.timerId = setTimeout(() => {\r\n if (this.el.style.transition === 'all 0.5s ease') {\r\n this.el.style.transition = 'none';\r\n this.el.style.WebkitTransition = 'none';\r\n this.el.style.MozTransition = 'none';\r\n }\r\n window.imageCanvasScroll = false;\r\n }, 500);\r\n } else {\r\n window.imageCanvasScroll2 = true;\r\n this.el.style.transition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.el.style.WebkitTransition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.el.style.MozTransition = 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)';\r\n this.timerId = setTimeout(() => {\r\n if (this.el.style.transition === 'all 1.3s cubic-bezier(0.4, 0.01, 0.51, 1)') {\r\n this.el.style.transition = 'none';\r\n this.el.style.WebkitTransition = 'none';\r\n this.el.style.MozTransition = 'none';\r\n }\r\n window.imageCanvasScroll2 = false;\r\n }, 1300);\r\n }\r\n\r\n const\r\n zoomFactor = 1,\r\n offsetX = pinchScroll(canvasClass, this.getContainerX(), layoutType),\r\n offsetY = '0';\r\n\r\n const transform2d = 'scale(' + zoomFactor + ', ' + zoomFactor + ') ' +\r\n 'translate(' + offsetX + ',' + offsetY + 'px)';\r\n this.setCanvasTransform(transform2d);\r\n },\r\n\r\n onMouseDown: function (event) {\r\n // console.log(\"mousedown\", );\r\n if (this.zoomFactor > 1) {\r\n this.firstMove = true; // was true\r\n this.mouseDown = [event.pageX, event.pageY];\r\n // this.elText.innerHTML = 'mousedown' + this.mousePos[0] + \"\";\r\n window.touchMove = false;\r\n }\r\n },\r\n onMouseMove: function (event) {\r\n if (this.mouseDown) {\r\n if (this.firstMove) {\r\n this.handleDragStart(event, false);\r\n triggerEvent(window, ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS);\r\n window.touchMove = true;\r\n this.el.classList.add(\"drag\");\r\n event.stopPropagation();\r\n event.preventDefault();\r\n } else {\r\n this.handleMove(event);\r\n this.update();\r\n }\r\n this.firstMove = false;\r\n }\r\n },\r\n onMouseUp: function (event, lookCanvasClick) {\r\n // console.log(\"mouseup\", );\r\n\r\n if (this.mouseDown) {\r\n const diffX = Math.abs(event.pageX - this.mouseDown[0]);\r\n const diffY = Math.abs(event.pageY - this.mouseDown[1]);\r\n\r\n this.mouseDown = null;\r\n window.touchMove = false;\r\n this.el.classList.remove(\"drag\");\r\n if (this.hasInteraction) {\r\n this.hasInteraction = false\r\n }\r\n\r\n if (diffX < this.options.dragPixelsBeforeClick && diffY < this.options.dragPixelsBeforeClick) {\r\n lookCanvasClick(event); // Click! we moved less than 6 pixels\r\n } else {\r\n // console.log(\"this.handleDragEnd :(\");\r\n // window.clearTimeout(this.mouseDownTimeoutId);\r\n this.handleDragEnd();\r\n }\r\n } else if (lookCanvasClick) {\r\n lookCanvasClick(event)\r\n }\r\n },\r\n\r\n };\r\n\r\n var detectGestures = function (el, target) {\r\n let fingers = 0,\r\n // lastTouchStart = null,\r\n startTouches = null,\r\n\r\n setInteraction = function (newInteraction, event) {\r\n if (interaction !== newInteraction) {\r\n\r\n if (interaction && !newInteraction) {\r\n switch (interaction) {\r\n case \"zoom\":\r\n target.handleZoomEnd(event);\r\n break;\r\n case 'drag':\r\n target.handleDragEnd(event);\r\n break;\r\n }\r\n }\r\n\r\n switch (newInteraction) {\r\n case 'zoom':\r\n target.handleZoomStart(event);\r\n break;\r\n case 'drag':\r\n target.handleDragStart(event);\r\n break;\r\n }\r\n }\r\n interaction = newInteraction;\r\n },\r\n\r\n updateInteraction = function (event) {\r\n if (fingers === 2) {\r\n setInteraction('zoom');\r\n } else if (fingers === 1 && target.canDrag()) {\r\n setInteraction('drag', event);\r\n } else {\r\n setInteraction(null, event);\r\n }\r\n },\r\n\r\n targetTouches = function (touches) {\r\n return Array.from(touches).map(function (touch) {\r\n return {\r\n x: touch.pageX,\r\n y: touch.pageY\r\n };\r\n });\r\n },\r\n\r\n getDistance = function (a, b) {\r\n var x, y;\r\n x = a.x - b.x;\r\n y = a.y - b.y;\r\n return Math.sqrt(x * x + y * y);\r\n },\r\n\r\n calculateScale = function (startTouches, endTouches) {\r\n var startDistance = getDistance(startTouches[0], startTouches[1]),\r\n endDistance = getDistance(endTouches[0], endTouches[1]);\r\n return endDistance / startDistance;\r\n },\r\n\r\n cancelEvent = function (event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n },\r\n\r\n // detectDoubleTap = function (event) {\r\n // var time = (new Date()).getTime();\r\n //\r\n // if (fingers > 1) {\r\n // lastTouchStart = null;\r\n // }\r\n //\r\n // if (time - lastTouchStart < 300) {\r\n // cancelEvent(event);\r\n //\r\n // target.handleDoubleTap(event);\r\n // switch (interaction) {\r\n // case \"zoom\":\r\n // target.handleZoomEnd(event);\r\n // break;\r\n // case 'drag':\r\n // target.handleDragEnd(event);\r\n // break;\r\n // }\r\n // }\r\n //\r\n // if (fingers === 1) {\r\n // lastTouchStart = time;\r\n // }\r\n // },\r\n firstMove = true;\r\n\r\n el.addEventListener('touchstart', function (event) {\r\n try {\r\n // target.elText.innerHTML = 'touchstart';\r\n if(target.enabled) {\r\n firstMove = true;\r\n fingers = event.touches.length;\r\n // target.elText.innerHTML = 'touchstart 2 ' + fingers;\r\n\r\n // if (!window.mobileMenuOpened) {\r\n // detectDoubleTap(event);\r\n // }\r\n }\r\n window.touchMove = false;\r\n } catch (e) {\r\n // alert(e)\r\n }\r\n\r\n });\r\n\r\n el.addEventListener('touchmove', function (event) {\r\n try {\r\n if(target.enabled) {\r\n if (firstMove) {\r\n updateInteraction(event);\r\n if (interaction) {\r\n cancelEvent(event);\r\n }\r\n startTouches = targetTouches(event.touches);\r\n } else {\r\n switch (interaction) {\r\n case 'zoom':\r\n target.handleZoom(event, calculateScale(startTouches, targetTouches(event.touches)));\r\n break;\r\n case 'drag':\r\n target.handleDrag(event);\r\n break;\r\n }\r\n if (interaction) {\r\n cancelEvent(event);\r\n target.update();\r\n }\r\n }\r\n\r\n firstMove = false;\r\n }\r\n // target.elText.innerHTML = 'touchmove';\r\n window.touchMove = true;\r\n } catch (e) {\r\n // alert(e)\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n });\r\n\r\n el.addEventListener('touchend', function (event) {\r\n try {\r\n // target.elText.innerHTML = 'touchend';\r\n window.touchMove = false;\r\n target.stopAnimation();\r\n if (+isCloseTo(target.zoomFactor, 1) && interaction) {\r\n // target.elText.innerHTML = 'touchend 2' + target.zoomFactor;\r\n target.handleDragEnd();\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n if (target.enabled) {\r\n // target.elText.innerHTML = 'touchend 1' + target.zoomFactor;\r\n fingers = event.touches.length;\r\n updateInteraction(event);\r\n }\r\n } catch (e) {\r\n // alert(e)\r\n target.reset();\r\n target.zoomOutAnimation()\r\n }\r\n });\r\n\r\n };\r\n\r\n return PinchZoom;\r\n};\r\n\r\nvar PinchZoom = definePinchZoom();\r\n\r\nexport default PinchZoom;\r\n","import KitchenZIndex from \"../bvcomponents/kvComponent/core/zIndex\";\r\nimport store from \"../store\";\r\n\r\nexport default function (canvasClass, containerX, layoutType, layoutScene) {\r\n // console.log('canvasClass', canvasClass);\r\n // console.log('layoutType', layoutType);\r\n // console.log('layoutScene', layoutScene);\r\n switch(document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\":\r\n switch (canvasClass) {\r\n case 'shower':\r\n case 'shower-shower':\r\n case 'shower-shower-body':\r\n case 'shower-interior-wall':\r\n case 'shower-shower-walls':\r\n case 'shower-fixture':\r\n case 'shower-shower_head':\r\n case 'shower-shower-head':\r\n case 'shower-floor':\r\n case 'shower-pan':\r\n case 'shower-tub-combo':\r\n case 'shower-shower-door':\r\n case 'shower-shower-door-handle':\r\n case 'shower-handle':\r\n case 'shower-shower-pan':\r\n case 'shower-interior-wall-accent':\r\n case 'shower-shower-walls-accent':\r\n case 'shower-tub-combo-wall-configuration':\r\n case 'shower-tub-combo-shower-door':\r\n case 'shower-tub-combo-handle':\r\n case 'shower-tub-combo-tub-liner':\r\n case 'shower-tub-combo-jetted-tub':\r\n case 'shower-tub-combo-replacement-tub':\r\n case 'shower-tub-combo-walk-in-tub':\r\n case 'shower-tub-combo-fixture':\r\n case 'shower-tub-combo-shower-head':\r\n case 'shower-tub-combo-shower_head':\r\n case 'shower-tub-combo-interior-wall':\r\n case 'shower-tub-combo-interior-wall-accent':\r\n case 'shower-tub-combo-shower-walls':\r\n case 'shower-tub-combo-shower-walls-accent':\r\n case 'shower-tub-combo-pony-wall-cap':\r\n case 'shower-tub-combo-pony-wall-glass':\r\n case 'shower-threshold':\r\n case 'shower-accessories':\r\n case 'shower-accessories-soap-dish':\r\n case 'shower-accessories-large-corner-seat':\r\n case 'shower-accessories-corner-caddie':\r\n case 'shower-accessories-large-corner-caddie':\r\n case 'shower-accessories-small-corner-shelf':\r\n case 'shower-accessories-grab-bar':\r\n return containerX < 680 ? '-38%' : '-33%';\r\n case 'shower-pony-wall':\r\n case 'shower-pony-wall-cap':\r\n case 'shower-pony-wall-glass':\r\n case 'pony-wall':\r\n case 'wall-pony-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-60%' : '-50%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-38%' : '-33%';\r\n }\r\n case 'window':\r\n case 'wall-c':\r\n case 'wall-wall-c':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'bathtub':\r\n case 'bathtub-bathtub':\r\n case 'bathtub-fixture':\r\n case 'bathtub-base':\r\n case 'bathtub-rim':\r\n case 'bathtub-spa':\r\n if (window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'toilet':\r\n case 'toilet-toilet':\r\n return containerX < 680 ? '-18%' : '-14.5%';\r\n case 'left-shower-wall':\r\n case 'wall-left-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n }\r\n case 'right-shower-wall':\r\n case 'wall-right-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n }\r\n case 'floor':\r\n return containerX < 680 ? '-40%' : '-35%';\r\n default:\r\n return \"0\"\r\n }\r\n case \"bvScene\":\r\n case \"bvLook\": {\r\n switch (canvasClass) {\r\n case 'shower':\r\n case 'shower-head':\r\n case 'shower-shower':\r\n case 'shower-shower-body':\r\n case 'shower-interior-wall':\r\n case 'shower-shower-walls':\r\n case 'shower-fixture':\r\n case 'shower-shower_head':\r\n case 'shower-shower-head':\r\n case 'shower-floor':\r\n case 'shower-pan':\r\n case 'shower-tub-combo':\r\n case 'shower-shower-door':\r\n case 'shower-shower-door-handle':\r\n case 'shower-handle':\r\n case 'shower-shower-pan':\r\n case 'shower-interior-wall-accent':\r\n case 'shower-shower-walls-accent':\r\n case 'shower-tub-combo-wall-configuration':\r\n case 'shower-tub-combo-shower-door':\r\n case 'shower-tub-combo-handle':\r\n case 'shower-tub-combo-tub-liner':\r\n case 'shower-tub-combo-jetted-tub':\r\n case 'shower-tub-combo-replacement-tub':\r\n case 'shower-tub-combo-walk-in-tub':\r\n case 'shower-tub-combo-fixture':\r\n case 'shower-tub-combo-shower-head':\r\n case 'shower-tub-combo-shower_head':\r\n case 'shower-tub-combo-interior-wall':\r\n case 'shower-tub-combo-interior-wall-accent':\r\n case 'shower-tub-combo-shower-walls':\r\n case 'shower-tub-combo-shower-walls-accent':\r\n case 'shower-tub-combo-pony-wall-cap':\r\n case 'shower-tub-combo-pony-wall-glass':\r\n case 'shower-threshold':\r\n case 'shower-accessories':\r\n case 'shower-accessories-soap-dish':\r\n case 'shower-accessories-large-corner-seat':\r\n case 'shower-accessories-corner-caddie':\r\n case 'shower-accessories-large-corner-caddie':\r\n case 'shower-accessories-small-corner-shelf':\r\n case 'shower-accessories-grab-bar':\r\n case 'shower-pony-wall':\r\n case 'shower-pony-wall-cap':\r\n case 'shower-pony-wall-glass':\r\n case 'pony-wall':\r\n case 'wall-pony-wall':\r\n if (layoutType === \"Layout4\") { // small room layout\r\n return containerX < 680 ? '-40%' : '-23%';\r\n } else { // large room layout\r\n return \"0\";\r\n }\r\n case 'window':\r\n case 'wall-c':\r\n case 'wall-wall-c':\r\n case 'right-wall':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'bathtub':\r\n case 'bathtub-bathtub':\r\n case 'bathtub-fixture':\r\n case 'bathtub-base':\r\n case 'bathtub-rim':\r\n case 'bathtub-spa':\r\n if (window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'toilet':\r\n case 'toilet-toilet': {\r\n switch (layoutType) {\r\n case \"Layout1\":\r\n return containerX < 680 ? '-18%' : '-14.5%';\r\n default:\r\n break;\r\n }\r\n break;\r\n }\r\n case 'left-shower-wall':\r\n case 'wall-left-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n }\r\n case 'right-shower-wall':\r\n case 'wall-right-shower-wall':\r\n if (layoutType === \"Small\") { // small room layout\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else { // large room layout\r\n return containerX < 680 ? '-50%' : '-45%';\r\n }\r\n case 'floor':\r\n return containerX < 680 ? '-22%' : '-18%';\r\n default:\r\n return \"0\"\r\n }\r\n return \"0\"\r\n }\r\n case \"Kitchen\":\r\n case \"KV\":\r\n switch (canvasClass) {\r\n //APPLIANCE\r\n case 'hood':\r\n case 'microwave':\r\n case 'range':\r\n case 'appliance-hood':\r\n case 'appliance-range':\r\n case 'appliance-microwave':\r\n return containerX < 680 ? '-39%' : '-37%';\r\n case 'dishwasher':\r\n case 'appliance-dishwasher':\r\n return containerX < 680 ? '-23%' : '-20%';\r\n case 'fridge':\r\n case 'appliance-fridge':\r\n switch (layoutType) {\r\n case \"Small\":\r\n case \"SmallWithPeninsula\":\r\n case \"SmallWithIsland\":\r\n case \"SmallWithPeninsulaWithIsland\":\r\n return containerX < 680 ? '-15%' : '-13%';\r\n default:\r\n return \"0\";\r\n }\r\n //CABINET\r\n case \"cabinet\":\r\n case \"top-cabinet\":\r\n case \"cabinet-top-cabinet\":\r\n case \"handle\":\r\n case \"cabinet-top-handle\":\r\n case \"cabinet-bottom-handle\":\r\n case \"crown-molding\":\r\n case \"cabinet-crown-molding\":\r\n case 'bottom-cabinet':\r\n case 'cabinet-bottom-cabinet': {\r\n if (document.hoveredLayer\r\n && (document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].Cabinet.Peninsula)\r\n && window.innerWidth < 991) {\r\n window.scrollTo({\r\n top: window.innerHeight,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n const module = store.getState().navigationState.moduleContextMenuModule;\r\n // console.log('module', module);\r\n switch (module) {\r\n case \"1\":\r\n case \"2\":\r\n case \"3\":\r\n return \"0\";\r\n case \"4\":\r\n return containerX < 680 ? '-19%' : '-17%';\r\n case \"5\":\r\n return containerX < 680 ? '-27%' : '-25%';\r\n case \"6\":\r\n return containerX < 680 ? '-43%' : '-40%';\r\n case null:\r\n default:\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n }\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n return containerX < 680 ? '-22%' : '-18%';\r\n case 'chairs':\r\n case 'center-island-chairs':\r\n return containerX < 680 ? '-5%' : '-4%';\r\n case 'center-island-handle':\r\n return containerX < 680 ? '-27%' : '-25%';\r\n //COUNTERTOP\r\n case 'countertop-countertop':\r\n case 'countertop-edge-profile':\r\n case 'countertop-sink':\r\n case 'countertop-faucet':\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case 'countertop':\r\n if (document.hoveredLayer) {\r\n switch (document.hoveredLayer.zIndex) {\r\n case KitchenZIndex.layouts[layoutType].CenterIsland.Countertop:\r\n return containerX < 680 ? '-22%' : '-18%';\r\n case KitchenZIndex.layouts[layoutType].CountertopGroup.Countertop2:\r\n return containerX < 680 ? '-60%' : '-50%';\r\n case KitchenZIndex.layouts[layoutType].CountertopGroup.Countertop:\r\n return containerX < 680 ? '-15%' : '-13%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n return \"0\";\r\n case 'faucet':\r\n if (document.hoveredLayer && document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].CenterIsland.Faucet) {\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else {\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n case 'sink':\r\n if (document.hoveredLayer && document.hoveredLayer.zIndex === KitchenZIndex.layouts[layoutType].CenterIsland.Sink) {\r\n return containerX < 680 ? '-22%' : '-18%';\r\n } else {\r\n return containerX < 680 ? '-60%' : '-50%';\r\n }\r\n //WALLS\r\n case \"backsplash\":\r\n case \"walls-backsplash\":\r\n case \"ceiling\":\r\n case \"walls-ceiling\":\r\n return containerX < 680 ? '-15%' : '-13%';\r\n case \"right-wall\":\r\n case \"walls-right-wall\":\r\n return containerX < 680 ? '-37%' : '-35%';\r\n default:\r\n return \"0\"\r\n }\r\n case \"kvScene\":\r\n switch(layoutType) {\r\n case \"Layout1\": {\r\n switch (layoutScene) {\r\n case \"1\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'chairs':\r\n case 'centerisland-chairs':\r\n case 'centerisland-handle':\r\n case 'centerisland-island-hood':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n return containerX < 680 ? '-15%' : '-10%';\r\n case 'walls-right-wall':\r\n return containerX < 680 ? '-40%' : '-32%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-front-wall':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"2\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'chairs':\r\n case 'centerisland-chairs':\r\n case 'centerisland-handle':\r\n case 'centerisland-island-hood':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n return containerX < 680 ? '-15%' : '-10%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-front-wall':\r\n case 'walls-right-wall':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"3\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-stovetop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-30%' : '-23%';\r\n case 'appliances-dishwasher':\r\n return containerX < 680 ? '-35%' : '-30%';\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'walls-right-wall':\r\n case 'countertop-edge-profile':\r\n case 'countertop-countertop':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"Layout2\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'countertop-edge-profile':\r\n case 'walls-front-wall':\r\n case 'countertop-countertop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-25%' : '-20%';\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-oven':\r\n return containerX < 680 ? '-45%' : '-37%';\r\n case 'walls-center-wall':\r\n return containerX < 680 ? '-48%' : '-44%';\r\n case 'walls-right-wall':\r\n case 'appliances-fridge':\r\n case 'appliances-fridge-enclosure':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n case \"Layout3\": {\r\n switch (canvasClass) {\r\n //CENTER ISLAND\r\n case 'faucet':\r\n case 'countertop-faucet':\r\n case 'sink':\r\n case 'countertop-sink':\r\n case 'countertop-edge-profile':\r\n case 'walls-front-wall':\r\n case 'countertop-countertop':\r\n case 'walls-backsplash':\r\n return containerX < 680 ? '-25%' : '-20%';\r\n case 'appliances-hood':\r\n case 'appliances-stove':\r\n case 'appliances-oven':\r\n return containerX < 680 ? '-18%' : '-15%';\r\n case 'center-island':\r\n case 'center-island-countertop':\r\n case 'center-island-island-countertop':\r\n case 'center-island-stovetop':\r\n case 'center-island-edge':\r\n case 'center-island-cabinet':\r\n case 'center-island-sink':\r\n case 'center-island-faucet':\r\n case 'centerisland':\r\n case 'centerisland-countertop':\r\n case 'centerisland-island-countertop':\r\n case 'centerisland-stovetop':\r\n case 'centerisland-edge':\r\n case 'centerisland-cabinet':\r\n case 'centerisland-sink':\r\n case 'centerisland-faucet':\r\n return '-50%';\r\n default:\r\n return \"0\"\r\n }\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n default:\r\n return \"0\"\r\n }\r\n}\r\n","import orderBy from \"lodash/orderBy\";\r\n\r\nimport {getCurrentRoomType} from \"../appLayout\";\r\nimport {LOOK_ROOM_TYPES} from \"../look/core/constants\";\r\n\r\nexport const getLayerPartToRender = (layerHovering, hoveredLayerIndex, layers) => {\r\n return {\r\n zIndex: layers[hoveredLayerIndex].zIndex,\r\n cropCoords: layers[hoveredLayerIndex].cropCoords,\r\n coords: layers[hoveredLayerIndex].coords,\r\n image: layerHovering.greenImage,\r\n layerDimensions: layerHovering.layerDimensions,\r\n partId: layerHovering.layer.partId || \"\",\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering.hoveringImage,\r\n }\r\n}\r\n\r\nexport const checkForLayerParts = (imageCanvasComponent, layers, hoveredLayerIndex, layerHovering, allLayers) => {\r\n // 1) add new Green Layer\r\n layers.splice(hoveredLayerIndex + 1, 0, getLayerPartToRender(layerHovering, hoveredLayerIndex, layers));\r\n\r\n // 2) Check if it needs additional Part\r\n // console.log(\"layerHovering\", layerHovering);\r\n // console.log(\"layersHoverings\", layersHoverings);\r\n switch (document.kvConfig.visualizerType) {\r\n case \"Bathroom\":\r\n case \"BV\": {\r\n const ShowerBodyIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Shower.Steam60in.Body;\r\n const ShowerIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Shower.Custom60in;\r\n if (layerHovering.layer.zIndex === ShowerBodyIndexes[\"1\"] || layerHovering.layer.zIndex === ShowerBodyIndexes[\"2\"]) {\r\n\r\n const missingBodyPart = layerHovering.layer.zIndex === ShowerBodyIndexes[\"1\"] ? \"2\" : \"1\";\r\n\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === ShowerBodyIndexes[missingBodyPart]\r\n });\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layerHovering2.layer.zIndex\r\n });\r\n\r\n layers.splice(hoveredLayerIndex + 1, 0, {\r\n zIndex: ShowerBodyIndexes[missingBodyPart],\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n if (layerHovering.layer.zIndex === ShowerIndexes.Wall || layerHovering.layer.zIndex === ShowerIndexes.Wall2\r\n || layerHovering.layer.zIndex === ShowerIndexes.WallAccent || layerHovering.layer.zIndex === ShowerIndexes.WallAccent2) {\r\n let missingZIndex = 0;\r\n if (layerHovering.layer.zIndex === ShowerIndexes.Wall || layerHovering.layer.zIndex === ShowerIndexes.Wall2) {\r\n missingZIndex = layerHovering.layer.zIndex === ShowerIndexes.Wall ? ShowerIndexes.Wall2 : ShowerIndexes.Wall;\r\n }\r\n if (layerHovering.layer.zIndex === ShowerIndexes.WallAccent || layerHovering.layer.zIndex === ShowerIndexes.WallAccent2) {\r\n missingZIndex = layerHovering.layer.zIndex === ShowerIndexes.WallAccent ? ShowerIndexes.WallAccent2 : ShowerIndexes.WallAccent;\r\n }\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZIndex\r\n });\r\n if (layerHovering2) {\r\n const hoveredLayerIndex = layers.findIndex((layer) => {\r\n return layer.zIndex === layerHovering2.layer.zIndex\r\n });\r\n layers.splice(hoveredLayerIndex + 1, 0, {\r\n zIndex: missingZIndex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"bvScene\": {\r\n // const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n // switch(layerHovering.layer.zIndex) {\r\n // case CabinetIndexes[\"CrownMolding\"]:\r\n // missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n // break;\r\n // }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"Kitchen\": {\r\n const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n const CountertopGroupIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].CountertopGroup;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n switch(layerHovering.layer.zIndex) {\r\n case CabinetIndexes[\"TopCabinet\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"TopCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet2\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"Peninsula\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"BottomCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding2\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop2\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop2\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle2\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle2\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle2\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle2\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle\"];\r\n break;\r\n }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"kvMaster\": {\r\n // 2) Check if it needs additional Part\r\n const CabinetIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].Cabinet;\r\n const CountertopGroupIndexes = imageCanvasComponent.props.layout.zIndexes[imageCanvasComponent.props.layoutType].CountertopGroup;\r\n let missingZindex = 0;\r\n let missingZindex2 = 0;\r\n switch(layerHovering.layer.zIndex) {\r\n case CabinetIndexes[\"TopCabinet\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"TopCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"TopCabinet\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet2\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"BottomCabinet2\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"Peninsula\"];\r\n break;\r\n case CabinetIndexes[\"Peninsula\"]:\r\n missingZindex = CabinetIndexes[\"BottomCabinet\"];\r\n missingZindex2 = CabinetIndexes[\"BottomCabinet2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding2\"];\r\n break;\r\n case CabinetIndexes[\"CrownMolding2\"]:\r\n missingZindex = CabinetIndexes[\"CrownMolding\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop2\"];\r\n break;\r\n case CountertopGroupIndexes[\"Countertop2\"]:\r\n missingZindex = CountertopGroupIndexes[\"Countertop\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle2\"];\r\n break;\r\n case CabinetIndexes[\"TopHandle2\"]:\r\n missingZindex = CabinetIndexes[\"TopHandle\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle2\"];\r\n break;\r\n case CabinetIndexes[\"BottomHandle2\"]:\r\n missingZindex = CabinetIndexes[\"BottomHandle\"];\r\n break;\r\n }\r\n if (missingZindex) {\r\n const layerHovering2 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex\r\n });\r\n const hoveredLayerIndex2 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex\r\n });\r\n if (layerHovering2 && hoveredLayerIndex2) {\r\n layers.splice(hoveredLayerIndex2 + 1, 0, {\r\n zIndex: missingZindex,\r\n image: layerHovering2.greenImage,\r\n layerDimensions: layerHovering2.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering2.hoveringImage,\r\n });\r\n }\r\n }\r\n if (missingZindex2) {\r\n const layerHovering3 = imageCanvasComponent.state.layersHoverings.find((layersHoveringItem) => {\r\n return layersHoveringItem.layer.zIndex === missingZindex2\r\n });\r\n const hoveredLayerIndex3 = layers.findIndex((layer) => {\r\n return layer.zIndex === missingZindex2\r\n });\r\n if (layerHovering3 && hoveredLayerIndex3) {\r\n layers.splice(hoveredLayerIndex3 + 1, 0, {\r\n zIndex: missingZindex2,\r\n image: layerHovering3.greenImage,\r\n layerDimensions: layerHovering3.layerDimensions,\r\n isGreenHovering: true,\r\n hoveringImage: layerHovering3.hoveringImage,\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case \"kvScene\":\r\n case \"bvLook\":\r\n case \"LaundryRoom\":\r\n case \"Laundryroom\":\r\n case \"laundryroom\":\r\n case \"laundryRoom\": {\r\n let needToCheck = false;\r\n if (document.kvConfig.visualizerType === \"kvScene\") {\r\n const withParts = [\"countertop\", \"top_cabinet\", \"bottom_cabinet\", \"handle\", \"crown_molding\",\r\n \"top_handle\", \"bottom_handle\", \"door_handle\", \"drawer_handle\"];\r\n needToCheck = withParts.includes(layerHovering.layer.partId);\r\n } else if (document.kvConfig.visualizerType === \"bvLook\") {\r\n needToCheck = getCurrentRoomType() === LOOK_ROOM_TYPES.as && layerHovering.layer.partId.includes(\"vanity_\");\r\n } else {\r\n const withParts = [\"slat_wall\", \"bottom_cabinet\", \"tall_cabinet\"];\r\n needToCheck = withParts.includes(layerHovering.layer.partId);\r\n }\r\n if (!needToCheck && !allLayers) {\r\n break;\r\n }\r\n imageCanvasComponent.state.layersHoverings.forEach(layerHov => {\r\n if (layerHov.layer.partId === layerHovering.layer.partId && (layerHov.layer.zIndex !== layerHovering.layer.zIndex)) {\r\n layers.push({\r\n zIndex: layerHov.layer.zIndex,\r\n cropCoords: layerHov.layer.cropCoords,\r\n image: layerHov.greenImage,\r\n layerDimensions: layerHov.layerDimensions,\r\n coords: layerHov.layer.coords || null,\r\n partId: layerHov.layer.partId || \"\",\r\n isGreenHovering: true,\r\n hoveringImage: layerHov.hoveringImage,\r\n });\r\n }\r\n });\r\n return orderBy(layers, ['zIndex'], ['desc']);\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n return layers;\r\n};\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {BathTubType, bathTubTypeToString, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubBase from \"../subparts/bathTub/bathTubBase\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\nimport BathTubRim from \"../subparts/bathTub/bathTubRim\";\r\nimport BathTubSpa from \"../subparts/bathTub/bathTubSpa\";\r\nimport BathTubTowelRack from \"../subparts/bathTub/bathTubTowelRack\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.activeSubType_ = BathTubType.FreeStanding;\r\n this.bathTubBody = null;\r\n this.towelRack = null;\r\n this.bathtubRim = null;\r\n this.bathTubBase = null;\r\n this.bathTubFixture = null;\r\n this.bathTubSpa = null;\r\n this.relatedItems = [];\r\n this.bathTubType_ = BathTubType.FreeStanding;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n case \"BathtubBase\":\r\n relatedItemName = \"bathTubBase\";\r\n RelatedItemClass = BathTubBase;\r\n break;\r\n case \"Bathtub - Spa\":\r\n relatedItemName = \"bathTubSpa\";\r\n RelatedItemClass = BathTubSpa;\r\n break;\r\n case \"BathtubRim\":\r\n relatedItemName = \"bathtubRim\";\r\n RelatedItemClass = BathTubRim;\r\n break;\r\n case \"Towel Rack\":\r\n relatedItemName = \"towelRack\";\r\n RelatedItemClass = BathTubTowelRack;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === LayoutType.Small) {\r\n // this.activeSubType_ = BathTubType.Custom60in;\r\n // this.bathTubType_ = BathTubType.Custom60in;\r\n if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n if (this.bathTubBody) {\r\n this.bathTubBody.disabled = true;\r\n }\r\n if (this.bathTubBase) {\r\n this.bathTubBase.disabled = true;\r\n this.bathTubBase.disabledClick();\r\n }\r\n }\r\n } else {\r\n if (this.bathTubBody) {\r\n this.bathTubBody.disabled = false;\r\n }\r\n if (this.bathTubBase) {\r\n this.bathTubBase.disabled = false;\r\n this.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Bathtub', this)\r\n }\r\n\r\n subTypes() {\r\n return (this.bathTubBody && this.bathTubBase\r\n && this.bathTubBody.features.some(feature => feature.partName && !feature.partName.includes(\"laceholder\"))\r\n && this.bathTubBase.features.some(feature => feature.partName && !feature.partName.includes(\"laceholder\"))\r\n ) ? [\r\n BathTubType.Custom60in,\r\n BathTubType.FreeStanding\r\n ] : [];\r\n }\r\n\r\n subTypeToString(subType) {\r\n return bathTubTypeToString(subType);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return true;\r\n }\r\n\r\n getRelatedItems() {\r\n return this.relatedItems.filter(item => item.visible.includes(this.bathTubType_))\r\n .sort((a, b) => a.partName !== b.partName ? a.partName < b.partName ? -1 : 1 : 0); // sort by partName\r\n }\r\n\r\n subParts() {\r\n return this.getRelatedItems().map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n this.getRelatedItems().forEach(relatedItem => relatedItem.setDefault(layout));\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n handleSubTypeClick(subType) {\r\n this.bathTubType_ = subType;\r\n this.activeSubType_ = subType; // BathTubType.Custom60in or BathTubType.FreeStanding\r\n this.bathTubFixture.disabled = (this.activeSubType_=== BathTubType.Custom60in)\r\n ? this.bathTubBase.disabled\r\n : this.bathTubBody.disabled\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n // return (this.bathTubType_ === BathTubType.Custom60in) ? this.subParts()[0] : null\r\n return this.subParts()[0]\r\n }\r\n\r\n activeSubType() {\r\n return this.activeSubType_;\r\n }\r\n\r\n getFixtureType() {\r\n if (this.activeSubType_ === BathTubType.FreeStanding && this.bathTubBody && this.bathTubBody.activeFeature) {\r\n return this.bathTubBody.activeFeature.metaData[\"Fixture\"]\r\n }\r\n return [\"All\"]\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub';\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.homePageTitle = 'Bathtubs';\r\n this.visible = [BathTubType.FreeStanding];\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // return super.load_(dbFeature, this, false);\r\n const feature = this.load_(dbFeature, new BathTubBody());\r\n if (feature) {\r\n BathTubBody.setAdditionalMetaData(feature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(feature) {\r\n if (!feature.metaData[\"Fixture\"]) {\r\n feature.metaData[\"Fixture\"] = [\"All\"];\r\n }\r\n if (!feature.metaData[\"CompatibleTub\"]) {\r\n feature.metaData[\"CompatibleTub\"] = [\"All\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const bathTubFixture = this.getParent().bathTubFixture;\r\n if (bathTubFixture) {\r\n bathTubFixture.disabled = this.disabled;\r\n }\r\n const bathtubParent = this.getParent();\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n const showerBody = bathtubParent.layout.parts.Shower.showerBody;\r\n if (showerBody) {\r\n showerBody.disabled = true;\r\n showerBody.disabledClick();\r\n }\r\n const comboPart = bathtubParent.layout.parts[ShowerTubCombo.id];\r\n if (comboPart) {\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathTubParent = this.getParent().getParent();\r\n bathTubParent.bathTubType_ = BathTubType.FreeStanding;\r\n bathTubParent.activeSubType_ = BathTubType.FreeStanding;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n const compatibleTubValue = (showerTubCombo.showerTubComboIsActive && showerTubCombo.bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? [\"All\"]\r\n : [\"All\", \"WalkInTub\"];\r\n return [{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleTubValue\r\n }];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Kingston Elegance 258GRA\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.FreeStanding.Base;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.FreeStanding.Base;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubLiner());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.Liner;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ReplacementTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.ReplacementTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WalkInTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n getFeatureByPartName(partName) {\r\n if (!partName) {\r\n return null\r\n }\r\n let walkInTubType = null;\r\n const possibleWalkInTubTypes = [\" AMD\", \" BSC\", \" WH\"];\r\n for (let i = 0; i < possibleWalkInTubTypes.length; i++) {\r\n if (partName.includes(possibleWalkInTubTypes[i])) {\r\n walkInTubType = possibleWalkInTubTypes[i];\r\n break;\r\n }\r\n }\r\n if (walkInTubType) {\r\n partName = partName.split(walkInTubType).join(\"\");\r\n }\r\n partName = partName.toLowerCase();\r\n if (partName[partName.length-1] === \"r\") {\r\n partName = partName.slice(0, partName.length-1);\r\n }\r\n return this.features.find(feature => {\r\n if (!feature.partName) {\r\n return false\r\n }\r\n let featurePartName = feature.partName;\r\n if (walkInTubType) {\r\n featurePartName = featurePartName.split(walkInTubType).join(\"\");\r\n }\r\n featurePartName = featurePartName.toLowerCase();\r\n if (featurePartName[featurePartName.length-1] === \"r\") {\r\n featurePartName = featurePartName.slice(0, featurePartName.length-1);\r\n }\r\n return partName === featurePartName\r\n });\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new JettedTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.JettedTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallConfiguration())\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WallConfiguration;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType} from \"../../constants\";\r\n\r\nexport default class BathTubBase extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_base';\r\n this.visible = [BathTubType.Custom60in];\r\n this.partName = 'Base';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_base\";\r\n this.dbName = 'BathtubBase';\r\n this.homePageTitle = 'Bathtubs';\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubBase());\r\n }\r\n\r\n disabledClick() {\r\n const bathtubParent = this.getParent();\r\n [bathtubParent.bathtubRim, bathtubParent.bathTubSpa, bathtubParent.bathTubFixture].forEach(subPart => {\r\n if (subPart) {\r\n subPart.disabled = this.disabled;\r\n }\r\n });\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n bathtubParent.layout.parts.Shower.showerBody.disabled = true;\r\n bathtubParent.layout.parts.Shower.showerBody.disabledClick();\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features;\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const sameStoneAsWalls = this.getParent().layout.parts.Walls.wallA.activeFeature\r\n && this.getParent().layout.parts.Walls.wallA.activeFeature.partName;\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(sameStoneAsWalls || \"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathtubParent = this.getParent().getParent();\r\n bathtubParent.bathTubType_ = BathTubType.Custom60in;\r\n bathtubParent.activeSubType_ = BathTubType.Custom60in;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Base;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Base;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType, LayoutType} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.visible = [BathTubType.Custom60in, BathTubType.FreeStanding];\r\n this.partName = 'Fixture';\r\n this.homePageTitle = 'Bathtub Fixtures';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const feature = this.load_(dbFeature, new BathTubFixture());\r\n if (feature) {\r\n BathTubFixture.setAdditionalMetaData(feature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(feature) {\r\n feature.metaData[\"Fixture\"] = [\"All\"];\r\n }\r\n\r\n disabledClick() {\r\n const bathTubBody = this.getParent().bathTubBody;\r\n if (bathTubBody && bathTubBody.disabled && !this.disabled) {\r\n bathTubBody.disabled = false;\r\n }\r\n const bathtubParent = this.getParent();\r\n if (bathtubParent.layout.type === LayoutType.Small && !this.disabled) { // switch off all shower features\r\n const showerBody = bathtubParent.layout.parts.Shower.showerBody;\r\n if (showerBody) {\r\n showerBody.disabled = true;\r\n showerBody.disabledClick();\r\n }\r\n const comboPart = bathtubParent.layout.parts[ShowerTubCombo.id];\r\n if (comboPart) {\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n let activeSubType = \"\";\r\n switch (this.getParent().activeSubType()) {\r\n case BathTubType.Custom60in:\r\n activeSubType = \"Custom60in\";\r\n break;\r\n case BathTubType.FreeStanding:\r\n activeSubType = \"FreeStanding\";\r\n break;\r\n }\r\n let floorMount = false;\r\n if (zIndexes && this.activeFeature) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const placeTypeGroup = filterGroups.find(filterGroup => filterGroup.name === \"PlaceType\");\r\n if (placeTypeGroup) {\r\n const featurePlaceTypeValue = this.activeFeature.dbFeature.filterValueIDs[placeTypeGroup.id];\r\n if (featurePlaceTypeValue && featurePlaceTypeValue.length) {\r\n const currentValue = placeTypeGroup.values.find(filterValue => filterValue.id === featurePlaceTypeValue[0]);\r\n if (currentValue && currentValue.value === \"FloorMount\") {\r\n floorMount = true;\r\n }\r\n }\r\n }\r\n floorMount\r\n ? this.activeFeature.layer.zIndex = zIndexes.BathTub[activeSubType].FixtureFloorMount\r\n : this.activeFeature.layer.zIndex = zIndexes.BathTub[activeSubType].Fixture\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n floorMount\r\n ? this.placeholderFeature.layer.zIndex = zIndexes.BathTub[activeSubType].FixtureFloorMount\r\n : this.placeholderFeature.layer.zIndex = zIndexes.BathTub[activeSubType].Fixture\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'Fixture',\r\n propValue: this.getParent().getFixtureType()\r\n }];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType} from \"../../constants\";\r\n\r\nexport default class BathTubRim extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_rim';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_rim\";\r\n this.visible = [BathTubType.Custom60in];\r\n this.partName = 'Rim';\r\n this.dbName = \"BathtubRim\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubRim());\r\n }\r\n\r\n disabledClick() {\r\n if (this.disabled) {\r\n this.getParent().bathTubBase.disabled = true;\r\n } else {\r\n this.getParent().bathTubBase.disabled = false;\r\n }\r\n }\r\n\r\n handleClick() {\r\n const bathtubParent = this.getParent().getParent();\r\n bathtubParent.bathTubType_ = BathTubType.Custom60in;\r\n bathtubParent.activeSubType_ = BathTubType.Custom60in;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // if (this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.BathTub.Custom60in.Top;\r\n // }\r\n // } else {\r\n // Exception.NotImplemented();\r\n // }\r\n if (zIndexes && this.getParent().activeSubType() === BathTubType.Custom60in) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Top;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Top;\r\n }\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features;\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {BathTubType} from \"../../constants\";\r\n\r\nexport default class BathTubSpa extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_spa';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_spa\";\r\n this.partName = 'Spa';\r\n this.visible = [BathTubType.Custom60in];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubSpa());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Spa;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.BathTub.Custom60in.Spa;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class BathTubTowelRack extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathtub_towel_rack';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_towel_rack\";\r\n this.partName = 'Towel Rack';\r\n this.visible = [];\r\n // this.visible = [BathTubType.Custom60in, BathTubType.FreeStanding];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubTowelRack());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Towel_Rack;\r\n // } else {\r\n // Exception.NotImplemented();\r\n // }\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Towel_Rack;\r\n }\r\n }\r\n}\r\n","import {Part} from \"./part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../assets\";\r\n\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'bathroom_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Flooring';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this)\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n this.getRelatedItems().forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature && relatedItem.activeFeature.layer.addTo(layers)\r\n });\r\n\r\n return layers;\r\n }\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.isStoneFeature = true;\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Floor;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class CompleteVanity extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity';\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity\";\r\n this.homePageTitle = 'Complete Vanities';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CompleteVanity());\r\n }\r\n\r\n setDefault(layout) {\r\n const availableCompleteFeatures = this.features.filter(feature => {\r\n return feature.metaData[\"Vanity\"] && feature.metaData[\"Vanity\"].includes(\"Complete\")\r\n });\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Buffalo Complete Sand 987SANBLK17VK24\");\r\n });\r\n // const placeholderDefault =\r\n // (\r\n // this.getParent().pedestalSink\r\n // && this.getParent().pedestalSink.features\r\n // && this.getParent().pedestalSink.features.length\r\n // && this.getParent().pedestalSink.features.find((feature) => +feature.vanitySize === 24 && feature.dbFeature.displayName.includes(\"laceholder\"))\r\n // ) || this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n // });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n });\r\n // console.log('this.features', this.features);\r\n // console.log('placeholderDefault', placeholderDefault);\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || availableCompleteFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n // setLayers(layout) {\r\n // // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // if (!this.activeFeature) {\r\n // this.setDefault(layout);\r\n // }\r\n //\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {\r\n // entityID: this.getParent().featureDefinitionId(this),\r\n // layout: layout.getCurrentLayoutAbbreviation()\r\n // });\r\n // if (!s3Binding) {\r\n // s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // }\r\n // this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityHandle())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n return [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features && this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize())) || [];\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.getAvailableFeatures();\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanityPedestal = this.getParent().pedestalSink;\r\n if (vanityPedestal && vanityPedestal.activeFeature) {\r\n const handleMeta = vanityPedestal.activeFeature.metaData[\"VanityHandle\"];\r\n const hardCodedWizardConditions = vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder\") &&\r\n (\r\n vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder52 in36 S\")\r\n || (handleMeta && handleMeta.includes(\"true\")) // WizardPlaceholder QC Liberty\r\n );\r\n if (handleMeta && handleMeta.includes(\"None\") || hardCodedWizardConditions) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Custom.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\n\r\nexport default class VanityPedestal extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanity\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityPedestal())\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize());\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize());\r\n // }\r\n\r\n setDefault(layout) {\r\n super.setDefault(layout);\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return +feature.vanitySize === 48\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout);\r\n this.placeholderFeature = this.features.find((feature) => {\r\n return +feature.vanitySize === 48\r\n && feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includes(\"laceholder\")\r\n && feature.dbFeature.displayName.includes(\"ustom\")\r\n }) || null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Cabinet;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Cabinet;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nexport default class VanityCountertop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCountertop())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n let counterTopsAvailable = filteredAvailableFeatures.filter(feature => {\r\n return feature.matchesMetaForCondition('CountertopSize', this.getParent().counterTopSize())\r\n })\r\n return uniqBy(counterTopsAvailable, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.CounterTop;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.CounterTop;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class LightingFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_lightning_fixture';\r\n this.partName = 'Lighting Fixture';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n }\r\n\r\n setZIndex() {\r\n console.log('layout');\r\n }\r\n}","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityBacksplash extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.dbName = 'Backsplash';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityBacksplash())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Aliveri\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Custom.VanityBacksplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {NotQCVanityDoorStylesFilters} from \"../../constants\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class Mirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Mirror())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let navItems = super.navigationSubItemsWithFilter('Pedestal', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // console.log('navItems1', navItems.slice());\r\n const vanityParent = this.getParent();\r\n const vanityPart = (vanityParent.activeSubType_ === Vanity.Types.Custom)\r\n ? vanityParent.pedestalSink\r\n : vanityParent.completeVanity;\r\n /*** return Mirrors with the same Color and DoorStyle or Material - as the current selected Vanity ***/\r\n if (vanityPart && vanityPart.activeFeature && vanityPart.activeFeature.dbFeature && vanityPart.activeFeature.dbFeature.filterValueIDs) {\r\n const oldVanityType = NotQCVanityDoorStylesFilters.some(filterName => {\r\n const partName = vanityPart.activeFeature.partName;\r\n return partName.includes(filterName) && !partName.includes(\"QC\");\r\n });\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorFilter = filterGroups.find(group => group.name === \"Color\");\r\n const activeFilterValueIDs = vanityPart.activeFeature.dbFeature.filterValueIDs;\r\n const secondFilter = filterGroups.find(group => group.name === (oldVanityType ? \"Material\" : \"DoorStyle\"));\r\n\r\n if (colorFilter && secondFilter) {\r\n navItems = navItems.map(item => {\r\n item.mathesToCurrentVanity = IntermediatePart.featureHasFilters(item.part, activeFilterValueIDs, colorFilter, secondFilter);\r\n return item\r\n }).sort((itemA, itemB) => {\r\n return (itemA.mathesToCurrentVanity < itemB.mathesToCurrentVanity)\r\n ? 1\r\n : ((itemB.mathesToCurrentVanity < itemA.mathesToCurrentVanity)\r\n ? -1\r\n : 0)\r\n });\r\n }\r\n\r\n // console.log('sorted!', navItems);\r\n }\r\n return navItems\r\n }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('Pedestal', counterTopSize)) || [];\r\n\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (name) {\r\n name = name.split(\" Single\")[0].split(\" Double\")[0].split(\" S\")[0].split(\" D\")[0]\r\n }\r\n\r\n if (!this.tryToSetTheSameFeatureByFilters(filteredFeatures) && !this.tryToSetTheSameFeature(filteredFeatures, name || null)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Elegant BLK\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.setPlaceholderFeature(filteredFeatures, layout);\r\n }\r\n }\r\n\r\n tryToSetTheSameFeatureByFilters(filteredFeatures, layout) {\r\n const vanityParent = this.getParent();\r\n const vanityPart = (vanityParent.activeSubType_ === Vanity.Types.Custom)\r\n ? vanityParent.pedestalSink\r\n : vanityParent.completeVanity;\r\n if (vanityPart && vanityPart.activeFeature && !vanityPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && vanityPart.activeFeature.dbFeature && vanityPart.activeFeature.dbFeature.filterValueIDs) {\r\n const vanityFilters = vanityPart.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const materialFilter = filterGroups.find(group => group.name === \"Material\");\r\n const colorFilter = filterGroups.find(group => group.name === \"Color\");\r\n\r\n const matchingFilterFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature && materialFilter && colorFilter\r\n && feature.dbFeature.filterValueIDs[materialFilter.id]\r\n && vanityFilters[materialFilter.id]\r\n && vanityFilters[colorFilter.id]\r\n && feature.dbFeature.filterValueIDs[materialFilter.id].includes(vanityFilters[materialFilter.id][0])\r\n && feature.dbFeature.filterValueIDs[colorFilter.id]\r\n && feature.dbFeature.filterValueIDs[colorFilter.id].includes(vanityFilters[colorFilter.id][0])\r\n });\r\n if (matchingFilterFeature) {\r\n this.activeFeature = matchingFilterFeature;\r\n this.setPlaceholderFeature(filteredFeatures, layout);\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures, partName, placeholderName) {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const nameSplitted = (partName || this.activeFeature.partName).split(\" FM\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n const currentNameSplitted = feature.partName.split(\" FM\")[0];\r\n return nameSplitted === currentNameSplitted\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return placeholderName\r\n ? feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n && feature.dbFeature.displayName.includes(placeholderName)\r\n : feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setPlaceholderFeature(filteredFeatures, layout) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('Pedestal', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if ((this.getParent().activeSubType_ === Vanity.Types.Custom) && this.activeFeature) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Vanity.Custom.Mirror;\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Mirror;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Mirror;\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Sink())\r\n }\r\n //\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilterWithInactive('VanitySize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n return [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().pedestalSink.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getAvailableFeatures();\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, name ? name.substring(0, name.length - 2) : null)) { // remove 2 last letters\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if(this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Sink;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Sink;\r\n }\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.homePageTitle = 'Faucets';\r\n this.useMatchesFailedNavigation = true;\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const vanityFaucetFeature = this.load_(dbFeature, new VanityFaucet());\r\n if (vanityFaucetFeature) {\r\n VanityFaucet.setAdditionalMetaData(vanityFaucetFeature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(vanityFaucetFeature) {\r\n const compatible = vanityFaucetFeature.metaData[\"SinkSize\"];\r\n const size = vanityFaucetFeature.metaData[\"Size\"];\r\n if (compatible && compatible.includes(\"Outer\") && !compatible.includes(\"Inner\")) {\r\n compatible.push(\"Inner\")\r\n }\r\n if (size && !compatible) {\r\n vanityFaucetFeature.metaData[\"SinkSize\"] = size.includes(\"21in\") ? [\"Outer\", \"Inner\"] : [];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getCurrentSinkSize() {\r\n const sinkParent = this.getParent().sink;\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"SinkSize\"];\r\n if (sinkMeta) {\r\n return Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n } else if (sinkParent.activeFeature.partName.includes(\"Placeholder\")) {\r\n return \"Outer\"\r\n }\r\n }\r\n return null\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const sinkSize = this.getCurrentSinkSize();\r\n if (sinkSize) {\r\n return super.navigationSubItemsWithFilterWithInactive('SinkSize', sinkSize, featuresToDisplay)\r\n }\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions(withSinkSize) {\r\n const counterTopSize = this.getParent().counterTopSize();\r\n const conditions = [{\r\n propName: 'VanitySize',\r\n propValue: counterTopSize\r\n }];\r\n if (withSinkSize) {\r\n conditions.push({\r\n propName: 'SinkSize',\r\n propValue: this.getCurrentSinkSize()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true))\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"SinkSize\", \"Inner\")\r\n } else {\r\n this.getParent().getParent().pedestalSink.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setDefault(layout) {\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true))) || [];\r\n let name = null;\r\n if (this.activeFeature) {\r\n name = this.activeFeature.partName\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, name ? name.substring(0, name.length - 2) : null)) { // remove 2 last letters // \"Platte 456AS D\"\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Platte 456AS\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Custom.Faucet;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Custom.Faucet;\r\n }\r\n }\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {LayoutType} from \"../constants\";\r\nimport {windowThumbnail} from \"../assets\";\r\nimport {NN} from \"../../../../misc/utils\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport class Window extends Part {\r\n static id = 'Window';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'window';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.homePageTitle = 'Window Coverings';\r\n this.dbName = 'Window Covering';\r\n this.partThumbnail = windowThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n const isWindowCovering = dbFeature.groupName === 'Window Covering';\r\n const isWindow = dbFeature.groupName === 'Window';\r\n\r\n if (!isWindowCovering && !isWindow)\r\n return false;\r\n\r\n const part = new WindowBody();\r\n part.getParent = () => this;\r\n\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n\r\n if (isWindowCovering) {\r\n part.load(dbFeature);\r\n } else {\r\n this.windowDefault = part;\r\n this.windowDefault.dbFeature = dbFeature;\r\n }\r\n return true\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n if (layout.type === LayoutType.Small)\r\n return null;\r\n\r\n if (!this.activeFeature)\r\n return null;\r\n\r\n const res = [];\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId()});\r\n let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId(), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.activeFeature.featureDefinitionId()});\r\n }\r\n\r\n if (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature)});\r\n }\r\n }\r\n\r\n this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // this.activeFeature.layer.addTo(res);\r\n\r\n if (this.placeholderFeature) {\r\n let s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.placeholderFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this.placeholderFeature)});\r\n }\r\n this.placeholderFeature.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n if (this.windowDefault && this.windowDefault.dbFeature.s3Bindings) {\r\n const dbFeature = this.windowDefault.dbFeature;\r\n s3Binding = dbFeature.s3Bindings[0];\r\n this.windowDefault.layer.fromS3Binding(s3Binding);\r\n this.windowDefault.layer.addTo(res);\r\n }\r\n\r\n (placeholdersNeeded && !this.placeholderChanged && this.placeholderFeature)\r\n ? this.placeholderFeature.layer.addTo(res)\r\n : this.activeFeature.layer.addTo(res);\r\n\r\n return res;\r\n }\r\n\r\n setDefault() {\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Stylewise Snowblind\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || this.features[0];\r\n this.placeholderFeature = placeholderDefault || this.features[0];\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if (layout.type === LayoutType.Large) {\r\n // NN(this.windowDefault, _ => _.layer.zIndex = Z.layouts.Large.Window_Default);\r\n // NN(this.activeFeature, _ => _.layer.zIndex = Z.layouts.Large.Window_Covering);\r\n // }\r\n if(zIndexes) {\r\n NN(this.windowDefault, _ => _.layer.zIndex = zIndexes.Window_Default);\r\n NN(this.activeFeature, _ => _.layer.zIndex = zIndexes.Window_Covering);\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Window_Covering;\r\n }\r\n }\r\n }\r\n\r\n subParts() {\r\n return [{\r\n text: this.partName,\r\n part: this\r\n }]\r\n }\r\n\r\n}\r\n\r\nclass WindowBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {ceilingThumbnail, ceilingPlaceholder} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport class Ceiling extends Part {\r\n static id = 'Ceiling';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'ceiling';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.bathroom.ceiling\";\r\n this.homePageTitle = 'Ceilings';\r\n this.partThumbnail = ceilingThumbnail;\r\n this.ceilingLight = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let part = null;\r\n switch (dbFeature.groupName) {\r\n case \"Ceiling\":\r\n part = new CeilingBody();\r\n break;\r\n case \"Ceiling Lights\":\r\n if (!this.ceilingLight) {\r\n this.ceilingLight = new CeilingLight(true);\r\n this.relatedItems.push(this.ceilingLight);\r\n }\r\n part = this.ceilingLight;\r\n break;\r\n }\r\n if (part) {\r\n part.getParent = () => this;\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n part.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded) {\r\n const layers = [];\r\n\r\n if (placeholdersNeeded && !this.placeholderChanged && this.placeholderFeature) {\r\n this.placeholderFeature.layer.src = ceilingPlaceholder;\r\n this.placeholderFeature.layer.fromS3 = false;\r\n this.placeholderFeature.layer.addTo(layers)\r\n } else if (this.activeFeature) {\r\n this.activeFeature.setLayers(layout);\r\n this.activeFeature.layer.addTo(layers);\r\n }\r\n\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n if (relatedItem && relatedItem.activeFeature) {\r\n relatedItem.activeFeature.layer.addTo(layers);\r\n }\r\n });\r\n\r\n return layers;\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"BR Frost\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || this.features[0];\r\n this.placeholderFeature = placeholderDefault || this.features[0];\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(this.partName, this);\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n this.relatedItems.forEach(_ => _.setZIndex(zIndexes));\r\n this.activeFeature && this.activeFeature.setZIndex(zIndexes);\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Ceiling;\r\n }\r\n }\r\n }\r\n\r\n subParts() {\r\n return [{\r\n text: this.partName,\r\n part: this\r\n }]\r\n }\r\n}\r\n\r\nclass CeilingBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n\r\n this.partName = 'Ceiling';\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n\r\n setLayers(layout) {\r\n // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n let s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n }\r\n this.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n setDefault(layout) {\r\n this.activeFeature = super.setDefault(layout) || this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes)\r\n this.layer.zIndex = zIndexes.Ceiling;\r\n }\r\n}\r\n\r\nclass CeilingLight extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partName = 'Ceiling Light';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CeilingLight());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature && this.activeFeature.layer) {\r\n this.activeFeature.layer.zIndex = zIndexes.Ceiling_Lights;\r\n }\r\n }\r\n}\r\n\r\n","import {Part} from \"./part\";\r\nimport {toiletThumbnail} from '../assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\nimport {Vanity} from \"./vanity\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n }\r\n\r\n setLayers(layout, placeholdersNeeded){\r\n const layers = [];\r\n this.relatedItems.forEach(relatedItem => {\r\n relatedItem.setLayers(layout);\r\n (placeholdersNeeded && !relatedItem.placeholderChanged && relatedItem.placeholderFeature)\r\n ? relatedItem.placeholderFeature.layer.addTo(layers)\r\n : relatedItem.activeFeature ? relatedItem.activeFeature.layer.addTo(layers) : null\r\n\r\n });\r\n return layers;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName === \"Toilet\") {\r\n if (!this.toilet) {\r\n this.toilet = new ToiletBody(true);\r\n this.relatedItems.push(this.toilet);\r\n this.toilet.getParent = () => this;\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this.toilet.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Toilet', this)\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ToiletBody());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanitySize = layout.parts[Vanity.id].counterTopSize();\r\n\r\n // console.log('Toilet - vanity size: ', vanitySize);\r\n if (vanitySize === '72in' || vanitySize === '60in') {\r\n // console.warn('Toilet - not visible for current vanity size: ', vanitySize);\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault(layout) {\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Melbourne MR4CGR\");\r\n });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || this.features[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {ShowerComboTubType} from \"../../constants\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.homePageTitle = 'Shower Fixtures';\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFixture());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if (shower.layout && shower.showerTubComboIsActive()\r\n && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n comboPart.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerFixtureParent = this.getParent();\r\n const shower = showerFixtureParent.getParent();\r\n if (shower.showerTubComboIsActive() && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub\r\n && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n && (showerParent.layout.parts[activeShowerPartId].bottomTub !== ShowerComboTubType.walk_in_tub)\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = this.getParent().activeSubType() === Shower.Type.Custom || this.getParent().showerTubComboIsActive()\r\n ? 'Custom60in'\r\n : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].Fixture;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Shower[ShowerType].Fixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.partName = 'Glass';\r\n this.visible = false;\r\n this.layerPriority = 12;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerGlass())\r\n }\r\n\r\n // navigationSubItems() {\r\n // const showerSize = this.getParent().showerSize().split('in')[0];\r\n // return super.navigationSubItemsWithFilter('ShowerSize', showerSize);\r\n // }\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n this.disabled = true;\r\n }\r\n this.activeFeature = this.features.find((feature) => {\r\n const showerBodyActiveFeature = this.getParent().showerBody.activeFeature;\r\n return showerBodyActiveFeature && feature.partName === showerBodyActiveFeature.partName // set the same glass as Body\r\n });\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.Custom60in.Glass;\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {ShowerType, LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new ShowerBody(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.type = ShowerType.Custom;\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\" \");\r\n return {\r\n \"ShowerSize\": featureName.includes(\"Custom\") ? [featureNameSplitted[2]] : ['60in'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (this.getParent().activeSubType_ === Shower.Type.Custom) {\r\n return counterTopSize === '72in' && layout.type === 1\r\n ? feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n : feature.showerBodyType === Shower.Type.Custom\r\n } else {\r\n return (feature.showerBodyType !== Shower.Type.Custom) && feature.partNumber === 1\r\n }\r\n })\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(filters), searchText);\r\n return filteredAvailableFeatures.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().activeSubType_ === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.src = '';\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n const showerDimensions = this.getParent().showerDimensions();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions === \"15X4\")) {\r\n // removed showerBodySelectedByUser detect cause we need to change shower body in any case! if it is not full!\r\n this.setDefault();\r\n } else if (counterTopSize !== '72in' && layout.type === 1 && !this.showerBodySelectedByUser // set default shower back\r\n && (showerDimensions !== \"15X4\")) {\r\n this.setDefault();\r\n }\r\n } else {\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = (this.getParent().activeSubType() === Shower.Type.Custom) ? 'Custom60in' : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].Body[this.activeFeature.partNumber];\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Shower[ShowerType].Body[activeFeaturePart.partNumber];\r\n })\r\n }\r\n }\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import isEqual from \"lodash/isEqual\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport { Shower } from \"../../parts/shower\";\r\nimport { ShowerTubCombo } from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerInteriorWall extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_interior_wall';\r\n this.partName = 'Shower Walls';\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.dbName = \"Shower Wall\";\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.shadowName = \"Interior Wall\";\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new ShowerInteriorWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new ShowerInteriorWall());\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n const shower = parent.getParent();\r\n if (shower.showerInteriorWallAccent && shower.showerInteriorWallAccent.canBeDisabled\r\n && !shower.showerInteriorWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerInteriorWallAccent.disabled = true;\r\n shower.showerInteriorWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(super.getFilteredFeaturesByFilters(filters)), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null, null, true);\r\n if (!matchingFeatureExist) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n this.placeholderFeature = placeholderDefault || null;\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n this.setShadowFeature();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.Wall;\r\n const zIndex2 = zIndexes.Shower.Custom60in.Wall2;\r\n const zIndex3 = zIndexes.Shower.Custom60in.WallShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2\r\n }\r\n })\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex3;\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n if (!fromFeature) {\r\n return []\r\n }\r\n const showerSize = fromFeature.metaData[\"ShowerSize\"];\r\n const name1 = fromFeature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n const activeFeaturePart = fromFeature && fromFeature.partNumber && showerSize ? this.featuresParts.find((feature) => {\r\n const showerSize2 = feature.metaData[\"ShowerSize\"];\r\n const name2 = feature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n return showerSize2 && isEqual(showerSize, showerSize2) && (feature.partName === fromFeature.partName || name1 === name2)\r\n }) : null;\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n return [activeFeaturePart]\r\n }\r\n return []\r\n }\r\n}\r\n","import isEqual from \"lodash/isEqual\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport { Shower } from \"../../parts/shower\";\r\nimport { ShowerTubCombo } from \"../../parts/showerTubCombo\";\r\n\r\nexport default class ShowerInteriorWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = \"shower_interior_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n // this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(\r\n dbFeature,\r\n new ShowerInteriorWallAccent(false, partNumber),\r\n true,\r\n partNumber === 1 ? 'features' : 'featuresParts'\r\n );\r\n } else {\r\n return super.load_(dbFeature, new ShowerInteriorWallAccent());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerInteriorWallAccent.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(this.availableFeatures(super.getFilteredFeaturesByFilters(filters)), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null, null, true);\r\n if (!matchingFeatureExist) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n } else {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n this.setShadowFeature();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.WallAccent;\r\n const zIndex2 = zIndexes.Shower.Custom60in.WallAccent2;\r\n\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2\r\n }\r\n })\r\n }\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeature = this.placeholderChanged ? this.activeFeature : this.placeholderFeature;\r\n if (activeFeature) {\r\n const showerSize = activeFeature.metaData[\"ShowerSize\"];\r\n const name1 = activeFeature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n const activeFeaturePart = activeFeature.partNumber && showerSize ? this.featuresParts.find((feature) => {\r\n const showerSize2 = feature.metaData[\"ShowerSize\"];\r\n const name2 = feature.getSplittedFeatureName().split(\"30in \")[0].split(\"60in \")[0];\r\n return showerSize2 && isEqual(showerSize, showerSize2) && (feature.partName === activeFeature.partName || name1 === name2)\r\n }) : [];\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled;\r\n return [activeFeaturePart]\r\n }\r\n }\r\n return []\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport { ShowerComboTubType } from \"../../constants\";\r\nimport { getMetadataByDimensions } from \"../../../../../misc/utils\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n const doorFeature = this.load_(dbFeature, new ShowerDoor());\r\n if (doorFeature) {\r\n ShowerDoor.setAdditionalMetaData(doorFeature);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(doorFeature) {\r\n if (!doorFeature.metaData[\"CompatibleTub\"]) {\r\n doorFeature.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoorHandle = this.getParent().showerDoorHandle;\r\n if (showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const shower = this.getParent();\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(shower.showerFloorIsActive), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const shower = this.getParent();\r\n const currentConditions = this.getArrayOfConditions(shower.showerFloorIsActive);\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer && this.activeFeature.matchesMetaForArrayOfConditions(currentConditions)) {\r\n this.checkIfPlaceHolderFits(currentConditions); // here we need to check if placeholder is the same as active feature\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n this.checkIfPlaceHolderFits(currentConditions);\r\n return super.setLayers(layout);\r\n }\r\n\r\n checkIfPlaceHolderFits(currentConditions) {\r\n if (this.activeFeature && !this.placeholderChanged) {\r\n const activeFeatureShowerPanCondition = this.activeFeature.metaData[\"ShowerPan\"];\r\n if (activeFeatureShowerPanCondition) {\r\n currentConditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: activeFeatureShowerPanCondition\r\n });\r\n if (!this.placeholderFeature || this.placeholderFeature.notAvailableInVisualizer\r\n || (this.placeholderFeature && !this.placeholderFeature.matchesMetaForArrayOfConditions(currentConditions))) {\r\n this.setNewPlaceHolderFeature(currentConditions);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setNewPlaceHolderFeature(newConditions) {\r\n // console.log('newConditions', newConditions);\r\n const filteredFeatures = this.features ? this.features.filter(f => f.matchesMetaForArrayOfConditions(newConditions)) : [];\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n\r\n getArrayOfConditions(showerFloorIsActive) {\r\n const layout = this.getParent().layout;\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = this.getParent();\r\n\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n\r\n let compatibleValue = \"None\";\r\n if (showerComboParent.showerTubComboIsActive) {\r\n if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n compatibleValue = \"BathtubLiner\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n compatibleValue = \"ReplacementTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n compatibleValue = \"WalkInTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n compatibleValue = \"JettedTub\"\r\n }\r\n }\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n },{\r\n propName: \"EX L\",\r\n propValue: showerDimensions\r\n },{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleValue\r\n }];\r\n if (!showerComboParent.showerTubComboIsActive) {\r\n if (showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: [\"Threshold\"]\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n let showerPanCondition = showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"];\r\n // console.log('showerPanCondition', showerPanCondition);\r\n if (showerPanCondition) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerPanCondition\r\n })\r\n }\r\n }\r\n }\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const currentConditions = this.getArrayOfConditions(shower.showerFloorIsActive)\r\n const filteredFeatures = this.features.filter(f => !f.notAvailableInVisualizer && f.matchesMetaForArrayOfConditions(currentConditions));\r\n if (!this.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"\", \"Placeholder\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n // shower.showerFloorIsActive = !!(this.activeFeature && this.activeFeature.metaData[\"ShowerPan\"]\r\n // && this.activeFeature.metaData[\"ShowerPan\"].includes(\"Threshold\"));\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures) {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const nameToFind = this.activeFeature.partName.replace(\" 30\", \"\").replace(\" 60\", \"\");\r\n this.activeFeature = !nameToFind.includes(\"laceholder\") && filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const fName = feature.partName.replace(\" 30\", \"\").replace(\" 60\", \"\");\r\n return fName.includes(nameToFind)\r\n }\r\n });\r\n this.placeholderFeature = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\")\r\n });\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDoor;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {getMetadataByDimensions, iStartWith} from \"../../../../../misc/utils\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport store from \"../../../../../store\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const showerPanComboParent = this.getParent();\r\n const shower = showerPanComboParent.getParent();\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n if ((shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n if (!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerPanValues = this.metaData[\"ShowerPan\"];\r\n\r\n if (showerSizeValues && showerPanValues) {\r\n const showerDoorParent = shower.showerDoor;\r\n const showerDoorsThatFits = showerDoorParent.features.filter(showerDoorFeature => {\r\n const showerSizeValues2 = showerDoorFeature.metaData[\"ShowerSize\"];\r\n const showerPanValues2 = showerDoorFeature.metaData[\"ShowerPan\"];\r\n let showerSizePassed = showerSizeValues2 && showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n let showerPanPassed = showerPanValues2 && showerPanValues.some(condPanValue => {\r\n return showerPanValues2.some(condPanValue2 => condPanValue === condPanValue2);\r\n });\r\n return showerSizePassed && showerPanPassed\r\n });\r\n if (showerDoorsThatFits && showerDoorsThatFits.length) {\r\n const showerDimensions = getMetadataByDimensions(showerDoorParent.getParent().showerBody.activeFeature.showerDimensions);\r\n const sameWallFeatures = showerDoorsThatFits.filter((showerDoorsThatFit) => {\r\n const wallValue = showerDoorsThatFit.metaData[\"Wall\"] || showerDoorsThatFit.metaData[\"EX L\"];\r\n return wallValue && wallValue.some(val => val === showerDimensions)\r\n });\r\n\r\n showerDoorParent.activeFeature = sameWallFeatures.length ? sameWallFeatures[0] : showerDoorsThatFits[0];\r\n showerDoorParent.placeholderFeature = (sameWallFeatures.length ? sameWallFeatures : showerDoorsThatFits).find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n }\r\n }\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues2 && showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer\r\n && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions(dontFilterByDoorPanMeta) {\r\n const showerParent = this.getParent();\r\n const showerSize = showerParent.showerSize();\r\n let showerDoorType = '';\r\n const showerDoor = showerParent.showerDoor;\r\n const showerDoorActiveFeature = showerDoor ? (showerDoor.activeFeature || showerDoor.placeholderFeature) : null;\r\n if (!dontFilterByDoorPanMeta && showerDoorActiveFeature) {\r\n const showerPanValues = showerDoorActiveFeature.metaData[\"ShowerPan\"];\r\n if (showerPanValues) {\r\n showerDoorType = showerPanValues;\r\n }\r\n }\r\n\r\n // console.log('showerDoorType', showerDoorType);\r\n // const showerDimensions = this.getParent().showerDimensions() === \"30X8\" ? \"Full\" : \"Half\";\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n if (!dontFilterByDoorPanMeta && showerDoorType) {\r\n conditions.push({\r\n propName: 'ShowerPan',\r\n propValue: showerDoorType\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => !f.notAvailableInVisualizer && f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n let currentShowerPanMetadata = this.activeFeature && this.activeFeature.metaData[\"ShowerPan\"]\r\n ? [...this.activeFeature.metaData[\"ShowerPan\"]]\r\n : null;\r\n let previousFeature = null;\r\n if (this.activeFeature) {\r\n previousFeature = Object.assign({} , this.activeFeature);\r\n }\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n let featureToSet = null;\r\n if (currentShowerPanMetadata) {\r\n\r\n let currentColorArrayValue = null;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const colorGroup = filterGroups.length && filterGroups.find(filterGroup => filterGroup.name === \"Color\");\r\n currentColorArrayValue = previousFeature.dbFeature.filterValueIDs\r\n && previousFeature.dbFeature.filterValueIDs[colorGroup.id];\r\n\r\n const existingPans = filteredFeatures.filter((feature) => {\r\n return feature.metaData[\"ShowerPan\"] && feature.metaData[\"ShowerPan\"].some((metaValue) => {\r\n return currentShowerPanMetadata.includes(metaValue)\r\n })\r\n });\r\n featureToSet = currentColorArrayValue\r\n ? existingPans.find(filteredFeature => {\r\n return filteredFeature.dbFeature.filterValueIDs\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id]\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id].some(filteredFeatureColor => {\r\n return currentColorArrayValue.some(col => col === filteredFeatureColor)\r\n })\r\n })\r\n : existingPans[0];\r\n if (!featureToSet) {\r\n let filteredByPan = [];\r\n if (currentShowerPanMetadata.includes(\"Low Threshold\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Designer\")\r\n } else if (currentShowerPanMetadata.includes(\"Designer\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Low Threshold\")\r\n } else if (currentShowerPanMetadata.includes(\"Custom\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Standard\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Made In The USA\");\r\n }\r\n } else if (currentShowerPanMetadata.includes(\"Standard\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Custom\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Made In The USA\");\r\n }\r\n } else if (currentShowerPanMetadata.includes(\"Made In The USA\")) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Custom\");\r\n if (!filteredByPan.length) {\r\n filteredByPan = super.getFeaturesWithMeta(filteredFeatures, \"ShowerPan\", \"Standart\");\r\n }\r\n }\r\n if (filteredByPan.length && previousFeature) {\r\n\r\n if (colorGroup && previousFeature.dbFeature.filterValueIDs) {\r\n const currentColorArrayValue = previousFeature.dbFeature.filterValueIDs[colorGroup.id];\r\n if (currentColorArrayValue) {\r\n featureToSet = filteredByPan.find(filteredFeature => {\r\n return filteredFeature.dbFeature.filterValueIDs\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id]\r\n && filteredFeature.dbFeature.filterValueIDs[colorGroup.id].some(filteredFeatureColor => {\r\n return currentColorArrayValue.some(col => col === filteredFeatureColor)\r\n })\r\n });\r\n // console.log('featureToSet', featureToSet);\r\n }\r\n }\r\n }\r\n if (!featureToSet && filteredByPan.length) {\r\n featureToSet = filteredByPan[0]\r\n }\r\n }\r\n }\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return iStartWith(feature.dbFeature.displayName, 'Shower Pan - Placeholder');\r\n });\r\n this.activeFeature = featureToSet || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerPanCombo;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerComboTubType, LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions} from \"../../../../../misc/utils\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = this.getParent();\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n\r\n let compatibleValue = \"None\";\r\n if (showerComboParent.showerTubComboIsActive) {\r\n if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n compatibleValue = \"BathtubLiner\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n compatibleValue = \"ReplacementTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n compatibleValue = \"WalkInTub\"\r\n } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n compatibleValue = \"JettedTub\"\r\n }\r\n }\r\n\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n },{\r\n propName: 'CompatibleTub',\r\n propValue: compatibleValue\r\n }];\r\n\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n conditions.push({\r\n propName: \"EX L\",\r\n propValue: showerDimensions\r\n })\r\n }\r\n\r\n if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // console.log('doorCondition', doorCondition);\r\n if (doorCondition) {\r\n conditions.push({\r\n propName: 'ShowerDoor',\r\n propValue: doorCondition\r\n })\r\n }\r\n if (handleCondition) {\r\n conditions.push({\r\n propName: 'ShowerHandle',\r\n propValue: handleCondition\r\n })\r\n }\r\n }\r\n\r\n if (!showerParent.showerTubComboIsActive()) {\r\n if (showerParent.showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: \"Threshold\"\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n })\r\n }\r\n }\r\n // console.log('conditions', conditions);\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.shadowName = \"Pony Wall Cap\";\r\n this.layerPriority = 11;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallCap());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWallCap;\r\n const zIndex2 = zIndexes.Shower.Custom60in.PonyWallCapShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbr === LayoutAbbreviation.Small){\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n return [{\r\n propName: 'Shower',\r\n propValue: 'Custom'\r\n }, {\r\n propName: 'Size',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallGlass());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWallGlass;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const layout = showerParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n const showerComboParent = this.getParent().layout.parts[ShowerTubCombo.id];\r\n let showerSize = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerSize()\r\n : showerParent.showerSize();\r\n return [{\r\n propName: 'Size',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Standard Pony Wall\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'ShowerFloor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.shadowName = \"Floor\";\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFloor())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: this.getParent().showerSize()\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Custom60in.Floor;\r\n const zIndex2 = zIndexes.Shower.Custom60in.FloorShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport { getMetadataByDimensions } from \"../../../../../misc/utils\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.shadowName = \"Pan\";\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData) {\r\n if(Array.isArray(dbFeature.metaData[\"EX L\"])) {\r\n if (dbFeature.metaData[\"EX L\"].includes(\"Full\") && !dbFeature.metaData[\"EX L\"].includes(\"Pony\")) {\r\n dbFeature.metaData[\"EX L\"].push(\"Pony\");\r\n } else if (dbFeature.metaData[\"EX L\"].includes(\"Pony\") && !dbFeature.metaData[\"EX L\"].includes(\"Full\")) {\r\n dbFeature.metaData[\"EX L\"].push(\"Full\");\r\n }\r\n } else if (!dbFeature.metaData[\"EX L\"] && Array.isArray(dbFeature.metaData[\"ShowerSize\"]) && dbFeature.metaData[\"ShowerSize\"][0] === \"30in\"\r\n && Array.isArray(dbFeature.s3Bindings) && dbFeature.s3Bindings[0] && dbFeature.s3Bindings[0].layout === \"SM\") {\r\n dbFeature.metaData[\"EX L\"] = [\"Full\", \"Pony\"];\r\n }\r\n }\r\n return super.load_(dbFeature, new Threshold())\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (!this.shadowFeature || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(conditions))) {\r\n this.setShadowFeature();\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n const showerSize = this.getParent().showerSize();\r\n let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n\r\n const vanity = layout.parts[Vanity.id];\r\n let counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n showerDimensions = \"Full\"\r\n }\r\n\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }, {\r\n propName: 'EX L',\r\n propValue: showerDimensions\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Custom60in.Threshold;\r\n const zIndex2 = zIndexes.Shower.Custom60in.ThresholdShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if(zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerDrain())\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerSize = this.getParent().showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerHead extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.partName = 'Shower Head';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n LG: {},\r\n SM: {}\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerHead());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const ShowerType = this.getParent().activeSubType() === Shower.Type.Custom || this.getParent().showerTubComboIsActive()\r\n ? 'Custom60in'\r\n : 'Steam60in';\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower[ShowerType].ShowerHead;\r\n }\r\n if(zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Shower[ShowerType].ShowerHead;\r\n }\r\n }\r\n}\r\n","import find from \"lodash/find\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {IntermediatePart} from \"./intermediatePart\";\r\n\r\nexport default class GlobalShadow extends Part {\r\n static id = 'Global Shadow';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Simple);\r\n this.partId = 'global_shadow';\r\n this.menuType = PartMenuType.Simple;\r\n this.partName = 'Global Shadow';\r\n }\r\n\r\n load(dbFeature) {\r\n let part = null;\r\n switch (dbFeature.groupName) {\r\n case \"Global Shadow\":\r\n part = new GlobalShadowBody();\r\n break;\r\n }\r\n if (part) {\r\n part.getParent = () => this;\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n part.load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setLayers(layout) {\r\n const layers = [];\r\n if (this.activeFeature) {\r\n this.activeFeature.setLayers(layout);\r\n this.activeFeature.layer.addTo(layers);\r\n }\r\n return layers;\r\n }\r\n\r\n setDefault() {\r\n this.activeFeature = this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.setZIndex(zIndexes);\r\n }\r\n }\r\n\r\n}\r\n\r\nclass GlobalShadowBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n\r\n this.partName = 'Global Shadow Body';\r\n }\r\n\r\n load(dbFeature) {\r\n super.load_.call(this.getParent(), dbFeature, this, false);\r\n }\r\n\r\n setLayers(layout) {\r\n // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n let s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this), layout: layout.getCurrentLayoutAbbreviation()});\r\n if (!s3Binding) {\r\n s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n }\r\n this.layer.fromS3Binding(s3Binding);\r\n }\r\n\r\n setDefault() {\r\n this.activeFeature = this.features[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes)\r\n this.layer.zIndex = zIndexes.Global_Shadow_Overlay;\r\n }\r\n}\r\n","import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class PonyWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall';\r\n this.translateId = \"visualizer.bathroom.walls.pony_wall\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.shadowName = \"Pony Wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWall());\r\n }\r\n\r\n disabledClick() {\r\n\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom) {\r\n super.handleClick(ignoreLocked);\r\n\r\n const wallParent = this.getParent().getParent();\r\n\r\n const layout = wallParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n if (layoutAbr === LayoutAbbreviation.Large) {\r\n if (clickFrom !== 'context' && clickFrom !== 'all_walls') {\r\n const wallExLFeature = wallParent.wallExL && wallParent.wallExL.features.find(feature => {\r\n return feature.partName === this.partName\r\n });\r\n if (wallExLFeature) {\r\n wallExLFeature.handleClick(ignoreLocked, 'context');\r\n }\r\n }\r\n }\r\n\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.PonyWall;\r\n const zIndex2 = zIndexes.Shower.Custom60in.PonyWallShadow;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.shadowFeature) {\r\n this.shadowFeature.layer.zIndex = zIndex2;\r\n }\r\n }\r\n\r\n getAvailableFeatures(filters) {\r\n const filteredAvailableFeatures = super.getFilteredFeaturesByFilters(filters);\r\n return super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n const showerParent = shower.getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\" || (!shower.showerTubComboIsActive()\r\n && shower.showerBody.disabled)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (!this.shadowFeature\r\n || (this.shadowFeature && !this.shadowFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.setShadowFeature();\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbr === LayoutAbbreviation.Small){\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n return [{\r\n propName: 'Shower',\r\n propValue: 'Custom'\r\n }, {\r\n propName: 'Size',\r\n propValue: showerSize\r\n }];\r\n }\r\n\r\n return []\r\n }\r\n\r\n setDefault(layout) {\r\n if (!layout)\r\n return ;\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, null, true)) {\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Pony Wall - Demo Model';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Pony Wall - Model[For=Shower=(Custom)=Size=(30in_60in)]';\r\n break;\r\n default:\r\n console.error('PonyWall - Unknown Layout Abr', layoutAbr);\r\n }\r\n\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName &&\r\n feature.dbFeature.displayName.includesCI(hardCodedName);\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\"placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n this.setShadowFeature();\r\n }\r\n }\r\n\r\n // changeLayout(layoutType) {\r\n changeLayout() {\r\n // this.activeFeature = null;\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallA extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_a';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall A';\r\n this.translateId = \"visualizer.bathroom.walls.wall_a\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallA());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_A;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_A;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallA)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallB extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_b';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall B';\r\n this.translateId = \"visualizer.bathroom.walls.wall_b\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallB());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_B;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_B;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallB)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\n\r\nexport default class WallC extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_c';\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.partName = 'Wall C';\r\n this.translateId = \"visualizer.bathroom.walls.wall_c\";\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.homePageTitle = \"Walls\"\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.displayName.includes(\"laceholder\")) { // exclude ALL s3binding since WALL C can not be ALL (only LG or SM)\r\n const layoutAbr = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n dbFeature.s3Bindings = dbFeature.s3Bindings && dbFeature.s3Bindings.filter(binding => {\r\n return (binding.layout !== \"ALL\") && (binding.layout === layoutAbr)\r\n });\r\n if (!dbFeature.s3Bindings || !dbFeature.s3Bindings.length) {\r\n return false\r\n }\r\n }\r\n return super.load_(dbFeature, new WallC());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_C;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_C;\r\n }\r\n }\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall') {\r\n // parent.allWallsApplied = true;\r\n // }\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // }\r\n // super.handleClick();\r\n // }\r\n\r\n // unCheckAllWalls(clickFrom, navPart) {\r\n // if (clickFrom === 'simpleWall') {\r\n // this.allWallsApplied = false;\r\n // }\r\n // if (!(navPart instanceof WallC)) {\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleClick();\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n}\r\n","import {LayoutAbbreviation} from \"../../constants\";\r\nimport {iIncludes} from \"../../../../../misc/utils\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport ExternallWall from \"./externallWall\";\r\n\r\nexport default class WallExR extends ExternallWall {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"right_shower_wall\";\r\n this.partName = \"Right Shower Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.right_shower_wall\";\r\n this.wallName = \"ExtrusionWallRight\";\r\n this.shadowName = \"Popout\";\r\n this.dbName = \"EX R\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallExR());\r\n }\r\n\r\n getShadowConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n getDefaultFeature() {\r\n const layout = this.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const filteredFeatures = this.getAvailableFeatures();\r\n\r\n let hardCodedName = '';\r\n switch (layoutAbr) {\r\n case LayoutAbbreviation.Small:\r\n hardCodedName = 'Rafter';\r\n break;\r\n case LayoutAbbreviation.Large:\r\n hardCodedName = 'Sahara Autumn Porcelain Tile';\r\n break;\r\n }\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return iIncludes(feature.dbFeature.displayName, hardCodedName);\r\n });\r\n return hardCodedDefault || filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const wallParent = this.getParent();\r\n const layout = wallParent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n const activeShowerPartId = wallParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = wallParent.layout.parts[activeShowerPartId].showerSize();\r\n\r\n const conditions = [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }];\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n let counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n conditions.push({\r\n propName: 'CountertopSize',\r\n propValue: counterTopSize\r\n });\r\n }\r\n\r\n return conditions;\r\n }\r\n}\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\nimport {getMetadataByDimensions} from \"../../../../../misc/utils\";\r\nimport ExternallWall from \"./externallWall\";\r\n\r\nexport default class WallExL extends ExternallWall {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"left_shower_wall\";\r\n this.partName = \"Left Shower Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.left_shower_wall\";\r\n this.wallName = \"ExtrusionWallLeft\";\r\n this.shadowName = \"Divider Wall\";\r\n this.shadowSmallRoomName = \"EX L\";\r\n this.dbName = \"EX L\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallExL());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const parent = this.getParent();\r\n const layout = parent.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n const activeShower = parent.showerTubComboIsActive()\r\n ? layout.parts[ShowerTubCombo.id]\r\n : layout.parts[Shower.id];\r\n\r\n const showerSize = activeShower.showerSize();\r\n const showerDimensions = activeShower.showerDimensions();\r\n\r\n const showerValue = (showerSize === \"60in\" || showerSize === \"30in\") ? \"Custom\" : showerSize;\r\n let counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n\r\n counterTopSize = (counterTopSize === '72in' || showerDimensions === \"30X8\") ? '72in' : counterTopSize;\r\n\r\n if (layoutAbr === LayoutAbbreviation.Small) {\r\n let wallWidth = (showerDimensions === '30X8') ? 'Thick' : 'Half';\r\n return [{\r\n propName: 'Shower',\r\n propValue: showerSize\r\n }, {\r\n propName: 'Width',\r\n propValue: wallWidth\r\n }];\r\n }\r\n\r\n return [{\r\n propName: 'Shower',\r\n propValue: showerValue\r\n }, {\r\n propName: 'CountertopSize',\r\n propValue: counterTopSize\r\n }];\r\n\r\n }\r\n\r\n getShadowConditions() {\r\n const layout = this.getParent().layout;\r\n const conditions = this.getArrayOfConditions();\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n const showerParent = layout.parts[Shower.id];\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n\r\n let showerDimensions = showerComboParent.showerTubComboIsActive\r\n ? showerComboParent.showerDimensions()\r\n : showerParent.showerDimensions();\r\n\r\n showerDimensions = getMetadataByDimensions(showerDimensions);\r\n\r\n if (!showerComboParent.showerTubComboIsActive && showerDimensions === \"Half\") {\r\n if (showerParent.showerFloorIsActive) {\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: [\"Threshold\"]\r\n })\r\n } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature && layoutAbr !== LayoutAbbreviation.Small) {\r\n let showerPanCondition = showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"];\r\n // console.log('showerPanCondition', showerPanCondition);\r\n conditions.push({\r\n propName: \"ShowerPan\",\r\n propValue: showerPanCondition\r\n })\r\n }\r\n }\r\n // console.log('shadow conditions', conditions);\r\n return conditions\r\n }\r\n\r\n setShadowFeature() {\r\n const parentGroup = this.getParent();\r\n\r\n let filteredAvailableFeatures = [];\r\n if (parentGroup.shadows && parentGroup.shadows.features && parentGroup.shadows.features.length) {\r\n const layout = parentGroup.layout;\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const shadowName = (layoutAbr === LayoutAbbreviation.Small) ? this.shadowSmallRoomName : this.shadowName;\r\n\r\n const filteredFeatures = parentGroup.shadows.features.filter((shadow) => {\r\n return Array.isArray(shadow.dbFeature.s3Bindings) && shadow.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n })\r\n });\r\n const compatibleFeatures = filteredFeatures.filter(shadowFeature => {\r\n return shadowFeature.partName && shadowName && shadowFeature.partName === shadowName\r\n });\r\n filteredAvailableFeatures = this.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), compatibleFeatures);\r\n }\r\n this.shadowFeature = filteredAvailableFeatures.length ? filteredAvailableFeatures[0] : null;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityAccent extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"accent_wall\";\r\n this.partName = \"Accent Wall\";\r\n this.translateId = \"visualizer.bathroom.walls.accent_wall\";\r\n this.dbName = \"VanityAccent\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.selectedByUser = false;\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n this.allWallsApplied = false;\r\n this.isStoneFeature = true;\r\n this.disabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityAccent());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n return super.navigationSubItemsWithFilter('CountertopSize', this.getParent().layout.parts[Vanity.id].counterTopSize(), filteredAvailableFeatures);\r\n }\r\n\r\n handleClick() {\r\n const wallParent = this.getParent().getParent();\r\n const vanityParent = wallParent.layout.parts[Vanity.id];\r\n if (vanityParent.vanityBacksplash && vanityParent.vanityBacksplash.canBeDisabled && !vanityParent.vanityBacksplash.placeholderChanged) {\r\n vanityParent.vanityBacksplash.disabled = true;\r\n }\r\n super.handleClick()\r\n }\r\n\r\n // handleClick(clickFrom) {\r\n // if (clickFrom === 'fromAllWalls') {\r\n // if (!this.getParent().vanityAccentSelectedByUser) {\r\n // super.handleClick();\r\n // }\r\n // } else {\r\n // this.getParent().handleChildClick(this);\r\n // this.getParent().vanityAccentSelectedByUser = true;\r\n // }\r\n //\r\n // }\r\n\r\n // handleClick(clickFrom) {\r\n // const parent = this.getParent();\r\n // if (clickFrom === 'simpleWall' || clickFrom === 'showerWall' || clickFrom === 'vanityWall') {\r\n // parent.activeFeatureBeforeAllWalls = parent.activeFeature;\r\n // if (!parent.placeholderChanged) {\r\n // parent.rememberToRecoverPlaceholder = true;\r\n // }\r\n // if (!parent.selectedByUser) {\r\n // super.handleClick();\r\n // }\r\n // } else {\r\n // super.handleClick();\r\n // parent.selectedByUser = true;\r\n // const wallB = this.getParent().getParent().layout.parts[\"Walls\"][\"wallB\"];\r\n // if (wallB.placeholderChanged && wallB.activeFeature.partName === this.partName) {\r\n // parent.selectedByUser = false;\r\n // }\r\n // }\r\n // this.featureClicked();\r\n // }\r\n //\r\n // unCheckAllWalls() {\r\n // if (!this.selectedByUser) {\r\n // const tempSelectedByUser = this.selectedByUser;\r\n // if (this.activeFeatureBeforeAllWalls) {\r\n // this.activeFeatureBeforeAllWalls.handleChildClick(this);\r\n // this.activeFeatureBeforeAllWalls = null;\r\n // }\r\n // this.selectedByUser = tempSelectedByUser;\r\n // if (this.rememberToRecoverPlaceholder) {\r\n // this.placeholderChanged = false;\r\n // this.rememberToRecoverPlaceholder = false;\r\n // }\r\n // }\r\n // }\r\n\r\n setDefault(layout) {\r\n const counterTopSize = this.getParent().layout.parts[Vanity.id].counterTopSize();\r\n const filteredFeatures = this.features && this.features.filter(f => f.matchesMetaForCondition('CountertopSize', counterTopSize)) || [];\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Tan Hexagon\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const counterTopSize = this.getParent().layout.parts[Vanity.id].counterTopSize();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForCondition('CountertopSize', counterTopSize)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Wall_A_Accent_Mask;\r\n this.activeFeature.layer.zIndex = zIndexes.Wall_A_Accent_Mask;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Wall_A_Accent_Mask;\r\n }\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\n\r\nimport {Part} from \"./part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LargeCornerSeat extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeCornerSeat());\r\n }\r\n\r\n // handleClick() {\r\n // const accessoriesParent = this.getParent().getParent();\r\n // accessoriesParent.caddie_type = \"corner_caddie\";\r\n // super.handleClick();\r\n // }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.LargeCornerSeat;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class SoapDish extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SoapDish());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.SoapDish;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive()\r\n ? [\"Tub\"]\r\n : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n }, {\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class SmallCornerShelf extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'small_corner_shelf';\r\n this.partName = 'Small Corner Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.small_corner_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SmallCornerShelf());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.SmallCornerShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class CornerCaddie extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'corner_caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.partName = 'Corner Caddie';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CornerCaddie());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.CornerCaddie;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LargeCornerCaddie extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeCornerCaddie());\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.LargeCornerCaddie;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../parts/intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new GrabBar());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n return uniqBy(featuresToDisplay, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n // setLayers(layout) {\r\n //\r\n // const conditions = this.getArrayOfConditions();\r\n // if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n // || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n // return super.setLayers(layout);\r\n // }\r\n //\r\n // this.setDefault();\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n getArrayOfConditions() {\r\n const accParent = this.getParent();\r\n const showerParent = accParent.layout.parts[Shower.id];\r\n const activeShowerPartId = showerParent && showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n return [{\r\n propName: 'ShowerSize',\r\n propValue: showerSize\r\n }]\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.Custom60in.GrabBar;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/parts/zIndex\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport ContextMenu from \"./contextMenu\";\r\nimport {\r\n setActiveNavigationNames, setNavigationLoading,\r\n setNavigationViewType,\r\n toggleDesktopNavigation\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\"\r\n || hoveredZone === \"vanity_custom\"\r\n || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\"\r\n || hoveredZone === \"shower_pony_wall\"\r\n || hoveredZone === \"wall_b_custom\"\r\n || hoveredZone === \"left_wall_custom\")\r\n && !this.state.showNavigation\r\n ) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n let contextMenuOpen = '';\r\n let ponyWallGroup = false;\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.openContextMenu(contextMenuOpen, ponyWallGroup, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n getShowerBodySelectionButtons = () => {\r\n const shower = this.state.designNavigationItems.find(desItem => desItem.text === \"Shower\");\r\n const currentShowerSize = shower.part.showerSize();\r\n const showerBody = shower && shower.part.showerBody;\r\n return (showerBody && showerBody.features.length) ? showerBody.features.filter((showerBodyFeature) => {\r\n return showerBodyFeature.partName.includes(currentShowerSize);\r\n }) : [1]\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, ponyWallGroup, event) => {\r\n const hoveredParent = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen === \"Shower Body Selection\") {\r\n contextMenuButtons = this.getShowerBodySelectionButtons()\r\n } else if (contextMenuOpen === \"wall_b_custom\") {\r\n contextMenuButtons = [1, 2, 3]\r\n } else {\r\n contextMenuButtons = hoveredParent.part.subParts();\r\n }\r\n if (contextMenuOpen === \"Shower\" || contextMenuOpen === \"Shower Tub Combo\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return ponyWallGroup ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\" : !menuButton.part.isPonyWallPart\r\n });\r\n }\r\n if (contextMenuOpen === \"Vanity\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return menuButton.part.partId !== \"vanity_mirror\" && menuButton.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuPonyWall: ponyWallGroup,\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked) => {\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item);\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n const nonCompatibleWith = item.part.partId === \"vanity_faucet\" ? \"sink\" : \"vanity\";\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (fabricatorSettings\r\n && (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n if (activeSubPart.partId === \"shower_interior_wall\") {\r\n const featuresToDisplay = activeSubPart.navigationSubItems();\r\n const tilePatternFilterGroup = this.props.filterGroups.find(group => group.name.trim() === \"TilePattern\");\r\n const acrylicPatternFilterGroup = this.props.filterGroups.find(group => group.name.trim() === \"AcrylicPattern\");\r\n const tileID = tilePatternFilterGroup && tilePatternFilterGroup.id;\r\n const acrID = acrylicPatternFilterGroup && acrylicPatternFilterGroup.id;\r\n useWizard = featuresToDisplay.some(navItem => {\r\n return (tileID && (navItem.part.dbFeature.filterValueIDs[tileID] || navItem.part.dbFeature.fabFilterValueIDs[tileID]))\r\n || (acrID && (navItem.part.dbFeature.filterValueIDs[acrID] || navItem.part.dbFeature.fabFilterValueIDs[acrID]))\r\n })\r\n } else {\r\n useWizard = true;\r\n }\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(activeSubPart.partId)];\r\n }\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const showSmallRoomLayout = fabricatorSettings &&\r\n (fabricatorSettings.showSmallDesignForClients\r\n || (fabricatorSettings.showSmallDesignFromDashboard && document.kvConfig.isBackend));\r\n\r\n const availableNavButtons = showSmallRoomLayout\r\n ? [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom]\r\n : [ContentType.Design, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {useWizard ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n const {visualizerTutorialStep, visualizerTutorialIsOpened} = store.tutorialState;\r\n\r\n return {\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n visualizerTutorialIsOpened,\r\n visualizerTutorialStep,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n setActiveNavigationNames,\r\n toggleDesktopNavigation,\r\n changeActivePartRelatedItemIndex,\r\n setNavigationLoading,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {PartMenuType} from \"../../constants\";\r\nimport Config from \"../../../../config\";\r\n\r\nimport Filters from \"../newFilters/filters\";\r\nimport * as actions from \"../../../../actions/actionFunctions\";\r\nimport OnScreenKeyboard from \"../../../common/OnScreenKeyboard/keyboard\";\r\nimport {getFeatureGroupName, getPartThemeThumbnail} from \"../../../../misc/helpers\";\r\nimport {getSideBarSubParts} from \"../navUtils\";\r\nimport $ from \"jquery\";\r\nimport ActionTypes from \"../../../../misc/actionTypes\";\r\n\r\nclass SidebarClass extends Component {\r\n\r\n static propTypes = {\r\n part: PropTypes.object,\r\n onBackClick: PropTypes.func.isRequired,\r\n onSubTypeClick: PropTypes.func.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n searchText: PropTypes.string,\r\n onSubPartClick: PropTypes.func.isRequired,\r\n onSubPartHover: PropTypes.func.isRequired,\r\n activeChildNavigationItem: PropTypes.object,\r\n updateSidebarItems: PropTypes.bool\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.updateSidebarItems) {\r\n this.forceUpdate();\r\n }\r\n }\r\n\r\n handleRefresh = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n\r\n getSideBarContent = () => {\r\n const {part, onSubPartClick, onSubPartHover, activeChildNavigationItem, activeNavigationFilter, activeTheme} = this.props;\r\n if (part.menuType === PartMenuType.Simple) {\r\n return
    \r\n } else if (activeChildNavigationItem && activeChildNavigationItem.part.partId === \"top_cabinet\"\r\n && activeNavigationFilter === \"inlay_type\") {\r\n return
    \r\n }\r\n const subParts = getSideBarSubParts(part);\r\n return (\r\n
      \r\n {subParts.map((dni, dniIndex) => {\r\n // if (name === \"Island Countertop\") {\r\n // name = \"Countertop\"\r\n // }\r\n return (\r\n
    • onSubPartHover(dni)}\r\n key={dni.text}\r\n data-index={dniIndex}\r\n data-text={dni.text}\r\n onClick={() => onSubPartClick(dni)}>\r\n {getFeatureGroupName(dni.part, this.props.intl, this.props.fabricatorData)}\r\n
    • \r\n )\r\n })}\r\n
    \r\n )\r\n };\r\n\r\n render() {\r\n\r\n const {onBackClick, searchText, handleSearchInputChange, intl} = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n 12 ? \" search-input--with-close\" : \"\")\r\n }\r\n value={searchText}\r\n onChange={handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n id=\"main-search\" />\r\n {searchText ?
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n {this.getSideBarContent()}\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {navigationCount} = store.lookState;\r\n return {\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n selectedFilters: store.filterState.selectedFilters,\r\n activeTheme: store.serverState.activeTheme,\r\n fabricatorData: store.fabricatorState,\r\n navigationCount, // update when newLayout features received\r\n };\r\n};\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n showFiltersIfHidden: () => dispatch(actions.showFiltersIfHidden('sidebar'))\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SidebarClass)\r\n);\r\n","import React, {PureComponent} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport OnScreenKeyboard from '../../../common/OnScreenKeyboard/keyboard';\r\nimport { browserIsSafari } from '../../../../misc/helpers';\r\nimport Analytics from './../../../../analytics';\r\n\r\nclass FiltersSearch extends PureComponent {\r\n static propTypes = {\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n searchVisible: false,\r\n };\r\n }\r\n\r\n handleToggleSearch = () => {\r\n Analytics.sendClickEvent('filter-search-' + (this.state.searchVisible ? 'hide' : 'show'));\r\n this.setState({searchVisible: !this.state.searchVisible}, () => this.state.searchVisible && $(this.searchInputNode).focus());\r\n };\r\n\r\n handleInputSearchFocus = () => {\r\n if (this.props.windowWidth < 991 && browserIsSafari()) { // scroll to the top of the window on mobile (Safari workarounds)\r\n window.scrollTo(0, 0);\r\n setTimeout(() => {\r\n window.scrollTo(0, 0);\r\n }, 0);\r\n setTimeout(() => {\r\n window.scrollTo(0, 0);\r\n }, 300)\r\n }\r\n };\r\n\r\n render() {\r\n const {intl} = this.props;\r\n return (\r\n
    this.handleToggleSearch()}>\r\n \r\n e.stopPropagation()}>\r\n this.searchInputNode = node}\r\n className=\"filters-header-input-search\"\r\n placeholder={intl.formatMessage({id: \"filterSelection.searchPlaceholder\"})}\r\n value={this.props.searchText}\r\n onFocus={this.handleInputSearchFocus}\r\n onChange={this.props.handleSearchInputChange}\r\n onClick={(e) => e.stopPropagation()}\r\n id=\"filter-search\"\r\n />\r\n this.props.handleSearchInputChange({target: {value: v}})}\r\n type=\"text\"\r\n prependTo=\".filters-container\"\r\n top=\"40px\"\r\n left=\"10px\"\r\n />\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FiltersSearch)\r\n)\r\n","import React from \"react\";\r\nimport KeyType from \"./keyboardKeyType\";\r\nimport Analytics from './../../../analytics';\r\n\r\nexport default class KeyboardKey extends React.PureComponent {\r\n handleClick = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n let key = this.props.keyValue;\r\n if (!this.props.raw && this.props.isUpperCase && this.props.keyValue2) {\r\n key = this.props.keyValue2;\r\n }\r\n Analytics.sendClickEvent('osk-keyboard-key');\r\n\r\n this.props.runKeyStroke(key);\r\n };\r\n\r\n render() {\r\n let enabled = true;\r\n if (this.props.isUpperCase) {\r\n if (!this.props.keyValue2) {\r\n enabled = false;\r\n }\r\n }\r\n\r\n let key = this.props.keyValue;\r\n switch (key) {\r\n case 'backspace':\r\n case \"|<\":\r\n case \"|>\":\r\n key = '';\r\n break;\r\n default:\r\n if (this.props.isUpperCase) {\r\n if (this.props.keyValue2) {\r\n key = this.props.keyValue2;\r\n } else if (this.props.type === KeyType.Types.RIGHT_PANEL) {\r\n key = key.toUpperCase();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n let className = KeyType.className(this.props.type);\r\n if (this.props.type === KeyType.Types.NORMAL) {\r\n if (!enabled) {\r\n className += \" keyboard-keys-shifted-enabled\";\r\n } else if (this.props.isUpperCase) {\r\n className += \" keyboard-keys-shifted\";\r\n }\r\n\r\n if (this.props.keyValue === 'backspace') {\r\n className += \" keyboard-backspace-key\";\r\n }\r\n }\r\n\r\n switch (this.props.type) {\r\n case KeyType.Types.NUMERIC:\r\n case KeyType.Types.NUMERIC_EXTENDED:\r\n return (\r\n
    {key}
    \r\n );\r\n case KeyType.Types.RIGHT_PANEL:\r\n return (
    {key}
    );\r\n default: {\r\n let img = null;\r\n if (this.props.image) {\r\n img = (\"\");\r\n }\r\n return (

    {this.props.keyValue2}

    {key}

    {img}\r\n
    );\r\n }\r\n }\r\n }\r\n}\r\n","export default {\r\n Types: {\r\n NORMAL: 'NORMAL',\r\n NUMERIC: 'NUMERIC',\r\n NUMERIC_EXTENDED: 'NUMERIC_EXTENDED',\r\n BACKSPACE: 'BACKSPACE',\r\n NORMAL_3: 'NORMAL_3',\r\n NORMAL_5: 'NORMAL_5',\r\n NORMAL_2_5: 'NORMAL_2_5',\r\n RIGHT_PANEL: 'RIGHT_PANEL'\r\n },\r\n /**\r\n *\r\n * @param type {string}\r\n */\r\n className: function (type) {\r\n switch (type) {\r\n case this.Types.NUMERIC:\r\n return \"numberpad-keys\";\r\n case this.Types.NUMERIC_EXTENDED:\r\n return \"numberpad-keys-extended\";\r\n case this.Types.BACKSPACE:\r\n return \"numberpad-keys-extended-special keyboard-backspace-key\";\r\n case this.Types.NORMAL:\r\n return 'keyboard-keys';\r\n case this.Types.NORMAL_3:\r\n return \"keyboard-keys keyboard-keys-extended-3x\";\r\n case this.Types.NORMAL_5:\r\n return \"keyboard-keys keyboard-keys-extended-5x\";\r\n case this.Types.NORMAL_2_5:\r\n return \"keyboard-keys keyboard-keys-extended-2point5x\";\r\n case this.Types.RIGHT_PANEL:\r\n return \"keybard-right-panel-buttons\";\r\n }\r\n }\r\n};","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../constants\";\r\nimport BodyPanel from \"./bodyPanel\";\r\nimport BodyItems from \"./bodyItems\";\r\nimport Analytics from \"../../../../analytics\";\r\nimport FilterSelection from \"../newFilters/filterSelection\";\r\nimport NavigationFilters from \"../newFilters/navigationFilters\";\r\nimport {CABINET_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport NavigationFiltersSteps from \"../newFilters/navigationFiltersSteps\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\nimport Config from \"../../../../config\";\r\nimport {getPartThemeThumbnail} from \"../../../../misc/helpers\";\r\n\r\nclass BodyClass extends Component {\r\n\r\n static propTypes = {\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n navWidth: PropTypes.number,\r\n searchText: PropTypes.string,\r\n onItemClick: PropTypes.func.isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func,\r\n isWallItem: PropTypes.func,\r\n handleSubTypeClick: PropTypes.func,\r\n showMenu: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n wizardGroups: PropTypes.array,\r\n useWizard: PropTypes.bool,\r\n showFeatureWizard: PropTypes.bool,\r\n enableFeatureWizard: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n useFilters: PropTypes.bool,\r\n removeFilterSelection: PropTypes.func,\r\n showFilterSelection: PropTypes.bool,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n refreshCB: PropTypes.func,\r\n setStateActiveFeature: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showLoader: false\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.selectedFilters.length) {\r\n let updateComponent = false;\r\n if (nextProps.selectedFilters.length === this.props.selectedFilters.length) {\r\n updateComponent = nextProps.selectedFilters.some((filter, index) => {\r\n return filter.filterId !== this.props.selectedFilters[index].filterId\r\n || filter.filterGroupId !== this.props.selectedFilters[index].filterGroupId\r\n });\r\n }\r\n if (updateComponent) {\r\n this.refreshItems();\r\n }\r\n }\r\n if (this.props.navigationLoadingActive && !nextProps.navigationLoadingActive) {\r\n this.refreshItems();\r\n }\r\n }\r\n\r\n refreshItems = () => {\r\n this.setState({\r\n showLoader: true\r\n }, () => {\r\n this.setState({\r\n showLoader: false\r\n })\r\n })\r\n };\r\n\r\n itemsDispatcher = () => {\r\n const parentItem = this.props.parentItem;\r\n if (!parentItem) {\r\n return (\r\n
      \r\n {this.level1Items()}\r\n
    \r\n )\r\n }\r\n // if (parentItem && !childItem) {\r\n // if (parentItem.part.isSubTypeWithItems()) {\r\n // return this.level2ItemsNew(parentItem.part.navigationSubItems(selectedFilters, this.props.searchText)); // complete Vanity, complete Bathtub\r\n // }\r\n // return [];\r\n // }\r\n return this.level2ItemsNew();\r\n };\r\n\r\n level1Items = () => {\r\n const layout = getCurrentLayout();\r\n const {searchText, parentItem, selectedFilters, activeTheme} = this.props;\r\n const items = layout.designNavigationItems(parentItem, selectedFilters, searchText)\r\n .filter(item => {\r\n if (Config.showAllVisualizerGroups()) {\r\n return true\r\n }\r\n if (item.part.menuType === PartMenuType.Simple) {\r\n return layout.designNavigationItems(item).length\r\n } else {\r\n const subParts = item.part.subParts();\r\n return subParts.length && subParts.some(subPart => layout.hasNavItemsLength(subPart))\r\n }\r\n });\r\n return items.map(item => {\r\n const style = {\r\n backgroundImage: `url(${getPartThemeThumbnail(item.part.partThumbnail, activeTheme)})`,\r\n };\r\n if (item.part.partThumbnailSize) {\r\n style.backgroundSize = item.part.partThumbnailSize\r\n }\r\n return (\r\n
  • {\r\n Analytics.sendClickEvent('item-clicked');\r\n Analytics.sendClickEvent('item-clicked-' + item.part.partName);\r\n this.props.onItemClick(item)\r\n }}>\r\n
    \r\n \r\n
    \r\n
  • \r\n )\r\n })\r\n };\r\n\r\n updateComponent = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n getFeatures = (layout) => {\r\n const {parentItem, childItem, searchText, selectedFilters} = this.props;\r\n const currentParent = (parentItem.part.menuType === PartMenuType.Simple) ? parentItem : childItem;\r\n if (!currentParent) {\r\n return []\r\n }\r\n return layout.designNavigationItems(currentParent, selectedFilters, searchText);\r\n };\r\n\r\n level2ItemsNew = () => {\r\n const layout = getCurrentLayout();\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const currentPart = activeSubPart || activePart;\r\n const allFeaturesReceived = currentPart && currentPart.allFeaturesReceived\r\n && (!(currentPart.nextFeaturesPageToLoadArray && !currentPart.nextFeaturesPageToLoadArray[layout.getCurrentLayoutAbbreviation()].page));\r\n\r\n return ;\r\n };\r\n\r\n render() {\r\n\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n\r\n const filterSelectionHasValues = (activeSubPart || activePart) && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeSubPart || activePart, this.props.fabricatorData\r\n ).length > 0;\r\n\r\n\r\n // const fabricatorSettings = this.props.fabricatorData.settings;\r\n // const useWizard = fabricatorSettings &&\r\n // (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n const useKVWizard = false; //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard && this.props.activeNavigationFilter && activeNavPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n let showNavigationFiltersSteps = showNavigationFilters && this.props.activeNavigationFilter !== \"inlay_type\";\r\n\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n return (\r\n
    \r\n {activePart\r\n ? \r\n : null}\r\n {this.props.useFilters && this.props.showFilterSelection && filterSelectionHasValues ? (\r\n \r\n ) : showNavigationFilters\r\n ? (\r\n \r\n ) : (\r\n this.state.showLoader\r\n ?
    \r\n : this.itemsDispatcher()\r\n // !this.state.showLoader\r\n // ? allFeaturesReceived\r\n // ? this.itemsDispatcher()\r\n // : (activeSubPart || activePart)\r\n // ? this.showLoadingItems(activeSubPart || activePart)\r\n // : this.itemsDispatcher()\r\n // :
    \r\n )}\r\n {showNavigationFiltersSteps ? (\r\n \r\n ) : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n filterGroups: store.filterState.filterGroups,\r\n filtersVisible: store.filterState.showFilters,\r\n selectedFilters: store.filterState.selectedFilters,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeTheme: store.serverState.activeTheme,\r\n };\r\n};\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyClass);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../../analytics\";\r\n\r\nexport default class BodyPanelCheckbox extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object.isRequired,\r\n toggleApplyWallsCheckbox: PropTypes.func.isRequired,\r\n };\r\n\r\n allWallsClick = () => {\r\n Analytics.sendClickEvent('all-walls-toggled');\r\n this.props.toggleApplyWallsCheckbox();\r\n setTimeout(() => {\r\n this.forceUpdate();\r\n }, 0)\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from 'prop-types';\r\n\r\nclass BodyPanelWizardSteps extends Component {\r\n\r\n static propTypes = {\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n setFeatureWizardStep: PropTypes.func,\r\n exitFeatureWizard: PropTypes.func,\r\n enableFeatureWizard: PropTypes.func,\r\n toggleWizardFilterSelection: PropTypes.func,\r\n getFilterDisplayName: PropTypes.func.isRequired,\r\n showFeatureWizard: PropTypes.bool,\r\n activeSubPart: PropTypes.object,\r\n };\r\n\r\n setFeatureWizardStep = (nextStep) => {\r\n switch (nextStep) {\r\n case \"back\":\r\n nextStep = this.props.featureWizardStep === 0 ? 0 : this.props.featureWizardStep - 1;\r\n break;\r\n case \"next\":\r\n if (this.props.featureWizardStep === (this.props.availableSteps.length - 1)) {\r\n this.props.exitFeatureWizard(this.state.availableSteps, this.props.featureWizardStep);\r\n } else {\r\n nextStep = this.props.featureWizardStep + 1;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n const currentStep = this.props.availableSteps[nextStep - 1];\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const allStepsCompleted = this.props.availableSteps.filter(step => !step.hidden).every(step => step.selectedValueId);\r\n if ((nextStep > this.props.featureWizardStep) && currentStep && !allStepsCompleted\r\n && (!currentStep.selectedValueId || (fabricatorSettings.leadCapture && currentStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated))) {\r\n return\r\n }\r\n if (this.props.showFeatureWizard) {\r\n this.props.setFeatureWizardStep(nextStep);\r\n if (nextStep === 0) {\r\n this.props.toggleWizardFilterSelection(false);\r\n }\r\n } else {\r\n this.props.enableFeatureWizard(nextStep);\r\n }\r\n };\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const availableSteps = this.props.availableSteps.filter(step => !step.hidden);\r\n const allStepsCompleted = availableSteps.every(step => step.selectedValueId);\r\n\r\n const activeSubPart = this.props.activeSubPart;\r\n const itemIsSelected = (!fabricatorSettings.leadCapture\r\n || (activeSubPart.activeFeature && !activeSubPart.activeFeature.partName.includes(\"WizardPlaceholder\")\r\n && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n return (\r\n
    \r\n
      \r\n
    • this.props.exitFeatureWizard(availableSteps, this.props.featureWizardStep)}>\r\n {/**/}\r\n \r\n \r\n \r\n
    • \r\n {availableSteps.map((wizardButton, index) => {\r\n const prevStep = availableSteps[index - 1];\r\n const disabled = this.props.showFeatureWizard\r\n ? (index && !allStepsCompleted && (!prevStep.selectedValueId\r\n || (fabricatorSettings.leadCapture && prevStep.selectedItemIsLocked && !this.props.isPhoneNumberValidated)))\r\n : (index && !itemIsSelected && !availableSteps[index - 1].selectedValueId);\r\n return (\r\n
    • this.setFeatureWizardStep(index)}>\r\n \r\n \r\n {this.props.getFilterDisplayName(wizardButton.filterName, this.props.intl)}\r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(BodyPanelWizardSteps)\r\n);\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType\r\n} from \"../../../../actions/navigationFunctions\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\n\r\nclass BodyPanelNavigationFiltersSteps extends Component {\r\n\r\n static propTypes = {\r\n activePart: PropTypes.object.isRequired,\r\n };\r\n\r\n setNavigationWizardStep = (buttonId, wizardButtonIndex) => {\r\n this.props.setActiveNavigationFilter(buttonId);\r\n this.props.setActiveNavigationFilterStepIndex(wizardButtonIndex);\r\n if (buttonId === COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setNavigationViewType(2)\r\n } else if (this.props.navigationViewType !== 3) {\r\n this.props.setNavigationViewType(3)\r\n }\r\n if (buttonId !== COUNTERTOP_WIZARD_BUTTONS[2].buttonId) {\r\n this.props.setSelectedFilters([]); // reset filters on stones & color step\r\n }\r\n };\r\n\r\n getAvailableSteps = () => {\r\n let wizardButtons = [];\r\n switch (this.props.activePart.partId) {\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n wizardButtons = CABINET_WIZARD_BUTTONS.filter(wizardButton => wizardButton.buttonId !== \"inlay_type\");\r\n break;\r\n case \"countertop\":\r\n case \"edge_profile\":\r\n case \"backsplash\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS;\r\n break;\r\n case \"center_island_countertop\":\r\n case \"center_island_edge\":\r\n wizardButtons = COUNTERTOP_WIZARD_BUTTONS.slice(0, 4);\r\n break;\r\n default:\r\n break;\r\n }\r\n return wizardButtons.map((wizardButton, wizardButtonIndex) => {\r\n wizardButton.onClick = () => this.setNavigationWizardStep(wizardButton.buttonId, wizardButtonIndex);\r\n return wizardButton\r\n })\r\n };\r\n\r\n render() {\r\n const countertopWizardPartIds = [\"countertop\", \"center_island_countertop\", \"edge_profile\", \"center_island_edge\", \"backsplash\"];\r\n let allowIcons = true;\r\n if (this.props.activePart.partId === \"backsplash\" && this.props.windowWidth < 1400) {\r\n allowIcons = false\r\n }\r\n\r\n return (\r\n
    \r\n
      \r\n {this.getAvailableSteps().map((wizardButton, index) => {\r\n const disabled = false;\r\n const buttonIcon = countertopWizardPartIds.includes(this.props.activePart.partId)\r\n && wizardButton.buttonId === \"all_products\" ? \"stones\" : wizardButton.buttonId;\r\n return (\r\n
    • {} : wizardButton.onClick}>\r\n {(buttonIcon !== CABINET_WIZARD_BUTTONS[0].buttonId) && allowIcons ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n // fabricatorSettings: store.fabricatorState.settings,\r\n windowWidth: store.serverState.windowWidth,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n activeNavigationFilterStepIndex: store.navigationState.activeNavigationFilterStepIndex,\r\n moduleContextMenuModule: store.navigationState.moduleContextMenuModule,\r\n moduleContextMenuModulePart: store.navigationState.moduleContextMenuModulePart,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setSelectedFilters\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BodyPanelNavigationFiltersSteps);\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport Switch from '@mui/material/Switch';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Popper from \"@mui/material/Popper\";\r\nimport Grow from \"@mui/material/Grow\";\r\n\r\nimport {useIsMounted} from \"../../../../misc/helperHooks\";\r\nimport {featureInterface} from \"../../../../interfaces/featureInterface\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\n\r\nlet timeoutId = null;\r\n\r\nconst LookAllWallsRadioButtonSmall = (props) => {\r\n\r\n const {allWallsCheckboxClick, translateId, checked, viewType, lookActiveCategory, showTutorialToolTip, isMobile,\r\n lookFeature} = props;\r\n\r\n const [showTooltip, setShowTooltip] = useState(false);\r\n const anchorRef = useRef(null);\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n return () => clearTimeout(timeoutId);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (showTutorialToolTip) {\r\n timeoutId = setTimeout(() => {\r\n if (isMounted()) {\r\n setShowTooltip(true);\r\n }\r\n }, 0);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isMounted, showTutorialToolTip]);\r\n\r\n const buttonClick = () => {\r\n setShowTooltip(true);\r\n clearTimeout(timeoutId);\r\n allWallsCheckboxClick();\r\n timeoutId = setTimeout(() => {\r\n if (isMounted()) {\r\n setShowTooltip(false);\r\n }\r\n }, 2000);\r\n }\r\n\r\n const placement = viewType !== 1 || showTutorialToolTip\r\n ? isMobile && IS_PRODUCT_JOURNEY ? \"left\" : \"right\"\r\n : \"bottom\";\r\n\r\n const getToolTipTranslate = () => {\r\n if (!showTutorialToolTip) {\r\n return translateId\r\n }\r\n switch (lookFeature ? lookFeature.partId : lookActiveCategory) {\r\n case \"countertop\":\r\n case \"center_island_countertop\":\r\n case \"vanity_countertop\":\r\n return \"look.allWallsOverlay.countertop.text\"\r\n case \"backsplash\":\r\n case \"vanity_backsplash\":\r\n return \"look.allWallsOverlay.backsplash.text\"\r\n case \"top_cabinet\":\r\n case \"bottom_cabinet\":\r\n case \"center_island_cabinet\":\r\n case \"fridge_enclosure\":\r\n return \"look.allWallsOverlay.cabinet.text\"\r\n case \"edge\":\r\n case \"edge_profile\":\r\n case \"center_island_edge\":\r\n return \"look.allWallsOverlay.edge.text\"\r\n default:\r\n return \"look.allWallsOverlay.text\"\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n \r\n }\r\n />\r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n \r\n : \r\n \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookAllWallsRadioButtonSmall.propTypes = {\r\n translateId: PropTypes.string,\r\n checked: PropTypes.bool.isRequired,\r\n allWallsCheckboxClick: PropTypes.func.isRequired,\r\n viewType: PropTypes.number,\r\n showTutorialToolTip: PropTypes.bool,\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveCategory,\r\n isMobile,\r\n };\r\n};\r\n\r\nexport default (\r\n connect(mapStateToProps)(LookAllWallsRadioButtonSmall)\r\n)\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {Grid} from 'react-virtualized';\r\nimport PropTypes from 'prop-types';\r\nimport $ from \"jquery\";\r\n\r\nimport NavigationItemsList from \"../navigationItemsList\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\nimport {getActivePartsCounts} from \"../navUtils\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage, setQtActiveCategory, toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo, toggleSelectionWindow\r\n} from \"../../../../actions/actionFunctions\";\r\n\r\nimport BodySwipable from \"./bodySwipable\";\r\nimport LoadingSpinner from \"../../../ui/loadingSpinner\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../../misc/filtersFunctions\";\r\n\r\nclass BodyItemsClass extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n onItemClick: PropTypes.func,\r\n showMenu: PropTypes.bool,\r\n existInQtCategory: PropTypes.bool,\r\n toggleUserPopup: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n searchText: PropTypes.string,\r\n layoutName: PropTypes.string,\r\n parentUpdate: PropTypes.func\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n reorderedFeatures: [],\r\n showLoader: false,\r\n childItemText: \"\",\r\n parentItemText: \"\",\r\n additionalFeaturesLoading: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n const childItem = this.props.childItem && this.props.childItem.part;\r\n if (childItem && childItem.partId.includes(\"countertop\") && this.props.selectedFilters.length && !this.props.activeNavigationFilter) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(this.props.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(childItem, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (\r\n (nextProps.childItem && (nextProps.childItem.text !== this.state.childItemText))\r\n || (nextProps.showMenu && !this.props.showMenu)\r\n || (!nextProps.childItem && nextProps.parentItem && (nextProps.parentItem.text !== this.state.parentItemText))\r\n || (this.props.selectedFilters.length !== nextProps.selectedFilters.length)\r\n || (this.props.searchText !== nextProps.searchText)\r\n || (nextProps.allFeaturesReceived && !this.props.allFeaturesReceived)\r\n || (nextProps.bvOpened && !this.props.bvOpened)\r\n || (this.props.features.length && nextProps.features.length && nextProps.features[0] && this.props.features[0]\r\n && nextProps.features[0].part.getParent && this.props.features[0].part.getParent\r\n && nextProps.features[0].part.getParent().partName !== this.props.features[0].part.getParent().partName)\r\n ) {\r\n this.setState({\r\n showLoader: true\r\n }, () => {\r\n this.reorderItems(nextProps);\r\n });\r\n }\r\n if (!nextProps.filtersVisible && this.props.filtersVisible) {\r\n setTimeout(() => {\r\n this.forceUpdate()\r\n }, 200);\r\n }\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.reorderItems(nextProps);\r\n }\r\n if (nextProps.childItem && nextProps.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, nextProps.childItem.part);\r\n if (checkPassed) {\r\n this.setState({\r\n additionalFeaturesLoading: true\r\n })\r\n this.getFeaturesFromBackendWithFilters(nextProps.childItem.part, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n reorderItems = (props) => {\r\n const selectedFirstItemIndex = this.getActiveItemIndex(props);\r\n const otherSelectedWallsIndexes = this.getSelectedWallIndexes(props.childItem, props.features, selectedFirstItemIndex); // this part is looking for the same stones that are already selected\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist ? [selectedFirstItemIndex, ...otherSelectedWallsIndexes] : [...otherSelectedWallsIndexes];\r\n\r\n // console.log('indexesToReplace', indexesToReplace);\r\n\r\n this.setState({\r\n childItemText: props.childItem ? props.childItem.text : \"\",\r\n parentItemText: props.parentItem ? props.parentItem.text : \"\",\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, props, selectedExist)\r\n }, () => {\r\n this.setState({\r\n showLoader: false\r\n });\r\n if (this.needToUpdate) {\r\n const $gridBody = $(\".categories-list .ReactVirtualized__Grid\");\r\n $gridBody.scrollLeft(this.needToUpdate);\r\n this.needToUpdate = false;\r\n }\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n\r\n if (this.props.userIsLoggedIn) {\r\n if (fabricatorSettings.twoFA) {\r\n if (!this.props.isPhoneNumberValidated) {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n } else {\r\n this.toggleMobileButton('userLogoutActive');\r\n }\r\n } else {\r\n this.toggleMobileButton('userLogoutActive');\r\n }\r\n } else {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true,\r\n userPopupType\r\n });\r\n if (userPopupType === UserPopupTypes.GetQuote) {\r\n window.allowClickLeadCapturePopup = false;\r\n }\r\n }\r\n };\r\n\r\n toggleMobileButton = (activeFeature) => {\r\n this.setState({\r\n [activeFeature]: !this.state[activeFeature]\r\n })\r\n };\r\n\r\n renderVirtualizedGrid = () => {\r\n\r\n const elements = this.getNavItemsList();\r\n const menuBody = document.querySelector(\".categories-list\");\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1; // 2\r\n const columnsCount = Math.ceil(elements.length / navigationViewType); // for ex. 28/3 = 10 columns\r\n\r\n const list = [[]]; // making list for React Virtualized\r\n if (navigationViewType === 2) {\r\n list.push([]);\r\n elements.forEach((element, index) => {\r\n let rowIndex = (index % navigationViewType === 0) ? 0 : 1;\r\n list[rowIndex].push(React.cloneElement(element))\r\n });\r\n } else {\r\n elements.forEach((element) => list[0].push(React.cloneElement(element)));\r\n }\r\n\r\n // console.log('list', list);\r\n\r\n return menuBody ? (\r\n \r\n \r\n {\r\n return
    \r\n {list[rowIndex][columnIndex]}\r\n
    \r\n }}>\r\n
    \r\n
    \r\n
    \r\n ) : null\r\n };\r\n\r\n renderLoadingList = (activePart) => {\r\n if (!activePart.counts) {\r\n return
    \r\n }\r\n\r\n const counts = getActivePartsCounts(activePart, this.props.layoutName);\r\n\r\n if (!counts) {\r\n return
    \r\n }\r\n\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n\r\n const elements = [];\r\n for (let i = 0; i < Math.ceil(counts / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n const currentIndex = j+(i*navigationViewType);\r\n if (currentIndex < counts) {\r\n innerElements.push(\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n render() {\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n\r\n return (\r\n
    \r\n {this.state.showLoader\r\n ? \r\n : this.props.allFeaturesReceived\r\n ? (\r\n \r\n {this.state.additionalFeaturesLoading || this.props.navigationLoadingActive ? this.getLoadingFeatures() : null}\r\n {this.renderVirtualizedGrid()}\r\n \r\n )\r\n : this.renderLoadingList(activeSubPart || activePart)\r\n }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated, userIsLoggedIn} = store.userState;\r\n return {\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n filtersVisible: store.filterState.showFilters,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n cartItems: store.cartState.cartItems,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n windowWidth: store.serverState.windowWidth, // re-render grid on resize\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen\r\n};\r\n\r\nconst BodyItems = connect(mapStateToProps, mapDispatchToProps)(BodyItemsClass);\r\n\r\n\r\nexport default BodyItems;\r\n","import React from 'react';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport classNames from 'classnames';\r\n\r\nimport {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../../misc/utils\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {UserPopupTypes} from \"../constants\";\r\nimport {getFeatureIsLocked, toFixedFeatureCost} from '../../../misc/helpers';\r\nimport FeatureName from \"../featureName\";\r\nimport {isFeatureEnabled} from \"../../../misc/displayLogic\";\r\nimport {getPriceWithIncluded} from \"../../../misc/priceFunctions\";\r\n\r\nconst navigationItem = (props) => {\r\n\r\n if (!props.currentFeature) {\r\n return props.isMobile\r\n ?
  • \r\n :
    \r\n }\r\n\r\n const { fabricatorData, isPhoneNumberValidated, currentFeatureCartItemsCount } = props;\r\n\r\n const currentFeature = props.currentFeature.part;\r\n\r\n let styles = {};\r\n if (currentFeature.dbFeature.thumbnailUrl) {\r\n const size = props.isMobile\r\n ? THUMBNAIL_SIZES.small\r\n : props.largeThumbnail ? null : THUMBNAIL_SIZES.medium\r\n styles.backgroundImage = `url('${s3FeatureImagePath(currentFeature.dbFeature.thumbnailUrl, size)}')`;\r\n } else if (props.currentFeature && currentFeature.customThumbnail) {\r\n styles.backgroundImage = `url('${currentFeature.customThumbnail}')`;\r\n }\r\n\r\n const featureIsEnabledForQt = isFeatureEnabled(currentFeature, \"quotingTool\");\r\n\r\n const fabricatorSettings = fabricatorData.settings;\r\n const allPagesEnabled = !document.kvConfig.visualizerOnly;\r\n\r\n let showPrice = false;\r\n if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n if (!featureIsEnabledForQt) {\r\n showPrice = false;\r\n } else if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !currentFeature.dbFeature.unlocked) {\r\n if (props.isPhoneNumberValidated) {\r\n showPrice = true\r\n }\r\n } else {\r\n showPrice = true\r\n }\r\n }\r\n\r\n const featureIsLocked = getFeatureIsLocked(currentFeature);\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote && !featureIsLocked;\r\n const quoteOrUnlockButtonVisible = featureIsLocked || (getQuoteEnabled && !isPhoneNumberValidated);\r\n\r\n const isAddToCartButtonVisible = props.isActive && allPagesEnabled && fabricatorSettings.showPricing && featureIsEnabledForQt && (\r\n (fabricatorSettings.leadCapture && (currentFeature.dbFeature.unlocked || props.isPhoneNumberValidated))\r\n || !(fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)))\r\n && props.existInQtCategory && !quoteOrUnlockButtonVisible;\r\n\r\n const price = toFixedFeatureCost(currentFeature, 1);\r\n\r\n return props.isMobile ? (\r\n
  • \r\n
    Analytics.sendClickEvent('feature-clicked-' + currentFeature.partName)\r\n && props.onItemClick(props.currentFeature, featureIsLocked, event)}>\r\n {currentFeature.notAvailableInVisualizer ? (\r\n \r\n ) : null}\r\n {currentFeatureCartItemsCount > 0 ?\r\n {currentFeatureCartItemsCount} : null\r\n }\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature, fabricatorData, props.intl.messages)}\r\n \r\n ) : null}\r\n {featureIsLocked\r\n ? \r\n : }\r\n
    \r\n
    \r\n {props.isActive && !currentFeature.dbFeature.autoAddToCart ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {allPagesEnabled && props.existInQtCategory && !isAddToCartButtonVisible && !quoteOrUnlockButtonVisible && featureIsEnabledForQt ? (\r\n {\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info') &&\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info-' + currentFeature.partName) &&\r\n props.switchToFeatureInfo(props.currentFeature)\r\n }}/>\r\n ) : null}\r\n
    \r\n ) : null}\r\n
  • \r\n ) : (\r\n
    Analytics.sendClickEvent('feature-clicked')\r\n && Analytics.sendClickEvent('feature-clicked-' + currentFeature.partName)\r\n && props.onItemClick(props.currentFeature, featureIsLocked, event)}>\r\n\r\n {currentFeature.vanitySize ?\r\n {currentFeature.vanitySize}\" : null\r\n }\r\n {currentFeatureCartItemsCount > 0 ?\r\n {currentFeatureCartItemsCount} : null\r\n }\r\n {props.isActive && !currentFeature.dbFeature.autoAddToCart ? (\r\n
    \r\n {isAddToCartButtonVisible ? (\r\n \r\n ) : null}\r\n {quoteOrUnlockButtonVisible ? (\r\n \r\n ) : null}\r\n {allPagesEnabled && props.existInQtCategory && featureIsEnabledForQt ? (\r\n {\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info') &&\r\n Analytics.sendClickEvent('feature-clicked-show-feature-info-' + currentFeature.partName) &&\r\n props.switchToFeatureInfo(props.currentFeature)\r\n }}/>\r\n ) : null}\r\n
    \r\n ) : null}\r\n {currentFeature.notAvailableInVisualizer ? (\r\n \r\n ) : null}\r\n
    \r\n {showPrice ? (\r\n \r\n {getPriceWithIncluded(price, currentFeature, fabricatorData, props.intl.messages)}\r\n \r\n ) : null}\r\n {!featureIsLocked ? : null}\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nnavigationItem.displayName = \"navigationItem\";\r\nexport default injectIntl(navigationItem)\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Ceiling extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Ceiling());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.Ceiling;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.LeftWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.RightWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PopoutWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'popout_wall';\r\n this.partName = 'Popout Wall';\r\n this.translateId = \"visualizer.kitchen.walls.popout_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PopoutWall());\r\n }\r\n\r\n setDefault() {\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n const leftWall = this.getParent().leftWall;\r\n let sameWallAsLeftWall = null;\r\n if (leftWall && leftWall.activeFeature && leftWall.activeFeature.partName) {\r\n const leftWallName = leftWall.activeFeature.getSplittedFeatureName();\r\n sameWallAsLeftWall = this.features.find(wall => wall.getSplittedFeatureName() === leftWallName);\r\n }\r\n this.activeFeature = sameWallAsLeftWall || this.features[0]\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.PopoutWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","// import $ from \"jquery\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport {BACKSPLASH_TYPES, LayoutAbbreviations} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../ui/loaderView\";\r\nimport Navigation from \"../../../../visComponents/navigation/navigation\";\r\n// import ActionTypes from \"../../../../../misc/actionTypes\";\r\n\r\nexport default class Backsplash extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.kitchen.walls.backsplash\";\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n this.toggleSwitchedOffByUser = false;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (Array.isArray(dbFeature.metaData[\"CabinetLayout\"])\r\n && dbFeature.metaData[\"CabinetLayout\"].includes(\"4\")\r\n && !dbFeature.metaData[\"CabinetLayout\"].includes(\"5\")) {\r\n dbFeature.metaData[\"CabinetLayout\"].push(\"5\");\r\n }\r\n // if (!(Array.isArray(dbFeature.metaData[\"backsplashType\"]) || Array.isArray(dbFeature.metaData[\"BacksplashType\"]))) {\r\n // if (dbFeature.description && dbFeature.description.includes(\"4in\")) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"4in\"];\r\n // } else if (dbFeature.description && dbFeature.description.includes(\"6in\")) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"6in\"];\r\n // } else if (dbFeature.metaData[\"CabinetLayout\"]) {\r\n // dbFeature.metaData[\"BacksplashType\"] = [\"18in\"];\r\n // }\r\n // console.log(\"backsplash custom\", dbFeature.sharedFeatureName, dbFeature.metaData[\"BacksplashType\"]);\r\n // }\r\n return super.load_(dbFeature, new Backsplash());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n if (this.activeFeature) {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // const filterByInchSize = withInches.find(bType => this.activeFeature.partName.includes(bType));\r\n featuresToDisplay = featuresToDisplay.filter(feature => {\r\n if (Array.isArray(this.activeFeature.metaData[\"BacksplashType\"]) && Array.isArray(feature.metaData[\"BacksplashType\"])) {\r\n return feature.metaData[\"BacksplashType\"].includes(this.activeFeature.metaData[\"BacksplashType\"][0])\r\n }\r\n return false\r\n // if (!feature.partName) {\r\n // return false\r\n // }\r\n // return filterByInchSize\r\n // ? feature.partName.includes(filterByInchSize)\r\n // : withInches.every(withInchesType => !feature.partName.includes(withInchesType))\r\n }); // filter by 4in, 6in, Full\r\n\r\n if (this.featureIsFullWall(this.activeFeature)) { // full backsplashes should be filtered by CabinetLayout metaData\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const cabinetLayoutMetaData = cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n if (cabinetLayoutMetaData) {\r\n featuresToDisplay = featuresToDisplay.filter(feature => feature.metaData && feature.metaData[\"CabinetLayout\"]\r\n && feature.metaData[\"CabinetLayout\"].includes(cabinetLayoutMetaData[0]))\r\n }\r\n }\r\n }\r\n\r\n return uniqBy(this.getUniqueFeatures(featuresToDisplay), (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getUniqueFeatures(featuresToDisplay) { // remove bathroom backsplashes (with the same name and not in visualizer)\r\n return featuresToDisplay.filter(feature => {\r\n const featureSplittedName = feature.getSplittedFeatureName();\r\n return !(feature.notAvailableInVisualizer && featuresToDisplay.some(countertop => {\r\n return countertop.getSplittedFeatureName() === featureSplittedName\r\n }));\r\n })\r\n }\r\n\r\n getFeatureByBacksplashType(neededType, featureName = \"\") {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n const matchingFeatures = this.features.filter(feature => {\r\n if (Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"].includes(neededType)) {\r\n return true\r\n }\r\n // return feature.partName && (withInches.includes(neededType)\r\n // ? feature.partName.includes(\" \"+neededType)\r\n // : withInches.every(withInchesType => !feature.partName.includes(withInchesType)))\r\n });\r\n\r\n let currentPartName = featureName;\r\n if (!currentPartName && this.activeFeature) {\r\n // currentPartName = this.activeFeature.removeLayoutFromPartName(this.activeFeature.partName); // remove layout name\r\n // withInches.forEach(bType => currentPartName = currentPartName.split(\" \"+bType).join(\"\")); // 2) remove 6in or 4in\r\n // currentPartName = this.activeFeature.removeCabinetLayoutFromPartName(currentPartName);\r\n currentPartName = this.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n }\r\n\r\n const matchByName = matchingFeatures.filter(feature => {\r\n // let featurePartName = feature.removeLayoutFromPartName(feature.partName); // remove layout name\r\n // withInches.forEach(bType => featurePartName = featurePartName.split(\" \"+bType).join(\"\")); // 2) remove 6in or 4in\r\n // featurePartName = feature.removeCabinetLayoutFromPartName(featurePartName);\r\n return feature.getCountertopGroupsSplittedFeatureName() === currentPartName\r\n });\r\n if (matchByName.length > 1) {\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n const sameCabinetType = matchByName.find(feature => {\r\n if (this.featureIsFullWall(feature)) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n }\r\n ])\r\n }\r\n });\r\n return sameCabinetType || matchByName[0];\r\n }\r\n return matchByName[0] || matchingFeatures[0];\r\n }\r\n\r\n featureIsFullWall = (feature) => {\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // return !withInches.some(bType => feature.partName.includes(bType))\r\n // || (Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"][0] === \"18in\");\r\n return Array.isArray(feature.metaData[\"BacksplashType\"]) && feature.metaData[\"BacksplashType\"][0] === \"18in\"\r\n }\r\n\r\n getCurrentActiveFeatureType() {\r\n if (this.activeFeature && Array.isArray(this.activeFeature.metaData[\"BacksplashType\"])) {\r\n return this.activeFeature.metaData[\"BacksplashType\"][0]\r\n }\r\n return \"18in\"\r\n // const withInches = BACKSPLASH_TYPES.filter(bType => bType.includes(\"in\"));\r\n // return this.activeFeature && (withInches.find(bType => {\r\n // return this.activeFeature.partName.includes(bType)\r\n // }) || BACKSPLASH_TYPES[2])\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.getArrayOfConditions\r\n ? this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))\r\n : this.features;\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist && !window.requestInProcess) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n if (this.setActiveFeatureParts) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n this.activeFeature = this.findFeatureByPartName(\r\n partName || this.activeFeature.getCountertopGroupsSplittedFeatureName(),\r\n !partName,\r\n filteredFeatures\r\n );\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n findFeatureByPartName(splittedName, alReadySplitted = true) {\r\n if (!alReadySplitted) {\r\n splittedName = this.removeLayoutFromPartName(splittedName);\r\n splittedName = this.removeCabinetLayoutFromPartName(splittedName);\r\n }\r\n const navFeature = this.navigationSubItems().find((feature) => {\r\n if (feature.part && feature.part.partName) {\r\n let currentFeatureSplittedName = feature.part.getCountertopGroupsSplittedFeatureName();\r\n return currentFeatureSplittedName === splittedName\r\n }\r\n });\r\n return navFeature && navFeature.part\r\n }\r\n\r\n setFeatureByName = async (passedName = \"\") => {\r\n window.requestInProcess = true;\r\n loaderEnable();\r\n const splittedName = passedName || this.activeFeature.getCountertopGroupsSplittedFeatureName();\r\n await Navigation.searchFeaturesByName(this, splittedName);\r\n const neededFeature = this.findFeatureByPartName(splittedName, true);\r\n if (neededFeature) {\r\n this.activeFeature = neededFeature;\r\n }\r\n window.requestInProcess = false;\r\n loaderDisable();\r\n // $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n return true\r\n };\r\n\r\n getTopCabinetCabinetLayoutMetadata() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n return cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const conditions = [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n\r\n if (cabinetLayoutMetaData && this.activeFeature) {\r\n if (this.featureIsFullWall(this.activeFeature)) {\r\n conditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n });\r\n }\r\n }\r\n return conditions;\r\n }\r\n\r\n removeBacksplashTypeFromPartName(partName) {\r\n BACKSPLASH_TYPES.forEach(abbr => {\r\n partName = partName.replace(\" \"+abbr, \"\")\r\n });\r\n return partName\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.Backsplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n return true\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {bottomCabinetModuleSystem} from \"./cabinetModuleSystem\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.layerPriority = 4;\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n if (isChild) {\r\n this.moduleSystem = bottomCabinetModuleSystem;\r\n this.defaultInlayType = \"Wood\";\r\n this.inlayTypes = []; // array of objects, for ex. {name: \"Cascade\", moduleParts: [\"3_2\", \"7_56\"]}\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n const module = dbFeature.metaData && dbFeature.metaData[\"Module\"];\r\n if (module && module[0] !== \"0\") {\r\n return super.load_(dbFeature, new BottomCabinet(false, null),true, 'moduleParts');\r\n } else if (parts) {\r\n dbFeature.displayName = dbFeature.displayName.replace(/M_0(.*?) /, \"M \").replace(/ Part1/, \"\");\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new BottomCabinet());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n featuresToDisplay = featuresToDisplay.filter((feature) => {\r\n if (feature.metaData[\"Module\"]) {\r\n return (feature.metaData[\"Module\"][0] === \"0\" && feature.metaData[\"Part\"][0] === \"1\")\r\n && feature.metaData[\"Appliance\"] && feature.metaData[\"Appliance\"].includes(\"Range\")\r\n }\r\n return true\r\n });\r\n\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n const arrayOfConditions = this.getArrayOfConditions();\r\n const applianceType = fromFeature.metaData[\"Appliance\"] ? fromFeature.metaData[\"Appliance\"][0] : null;\r\n const cabinetLayout = fromFeature.metaData[\"CabinetLayout\"] ? fromFeature.metaData[\"CabinetLayout\"][0] : null;\r\n const doorSet = fromFeature.metaData[\"DoorSet\"] ? fromFeature.metaData[\"DoorSet\"][0] : null;\r\n if (applianceType) {\r\n arrayOfConditions.push({\r\n propName: 'Appliance',\r\n propValue: applianceType\r\n })\r\n }\r\n if (cabinetLayout) {\r\n arrayOfConditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n })\r\n }\r\n if (doorSet) {\r\n arrayOfConditions.push({\r\n propName: 'DoorSet',\r\n propValue: doorSet\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.BottomCabinet;\r\n const zIndex2 = zIndexes.Cabinet.BottomCabinet2;\r\n const zIndex3 = zIndexes.Cabinet.Peninsula;\r\n const zIndexBox = zIndexes.Cabinet.BottomCabinetModuleBox;\r\n // const zIndexBox2 = zIndexes.Cabinet.BottomCabinetModuleBox2;\r\n if (this.activeFeature) {\r\n if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n this.activeFeature.layer.zIndex = zIndexBox;\r\n } else {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart, activeFeaturePartIndex) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n if (activeFeaturePart.metaData[\"Module\"] && !activeFeaturePart.metaData[\"Part\"]) {\r\n const module = activeFeaturePart.metaData[\"Module\"][0];\r\n const modulePart = activeFeaturePart.metaData[\"ModulePart\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.BottomCabinetModules[module+\"_\"+modulePart];\r\n } else {\r\n activeFeaturePart.layer.zIndex = activeFeaturePartIndex === 0 ? zIndex2 : zIndex3;\r\n // if (activeFeaturePart.partName.includes(\"Part2\")) {\r\n // if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n // activeFeaturePart.layer.zIndex = zIndexBox2;\r\n // } else {\r\n // activeFeaturePart.layer.zIndex = zIndex2;\r\n // }\r\n // } else if (activeFeaturePart.partName.includes(\"Part3\")) {\r\n // activeFeaturePart.layer.zIndex = zIndex3;\r\n // }\r\n }\r\n }\r\n });\r\n // go again & try to find the same zIndex, cause we might have 3_3 - 2 times...\r\n // this.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.layer)\r\n // .forEach((activeFeaturePart) => {\r\n // const hasTheSameZIndex = this.activeFeatureParts.some(testFeaturePart => {\r\n // return (testFeaturePart.layer.zIndex === activeFeaturePart.layer.zIndex)\r\n // && (testFeaturePart.partName !== activeFeaturePart.partName)\r\n // });\r\n // if (hasTheSameZIndex) {\r\n // activeFeaturePart.layer.zIndex++;\r\n // }\r\n // })\r\n }\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n if (fromFeature && fromFeature.metaData[\"Module\"]) {\r\n const featureName = fromFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const modulePart = this.moduleSystem[currentModuleSystemNumber][k];\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n return feature.metaData[\"ModulePartWidth\"] && feature.metaData[\"ModulePartHeight\"]\r\n && +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n });\r\n if (moduleMatchingPart) {\r\n activeFeatureParts.push(moduleMatchingPart);\r\n // } else { // this is for debugging only - look for features which are not exist\r\n // console.log(\"this.moduleSystem[i]\", i);\r\n // console.log(\"modulePartIndex\", k);\r\n }\r\n }\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return this.activeFeature && this.activeFeature.metaData[\"Module\"]\r\n && this.activeFeature.metaData[\"Module\"][0] === \"0\";\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {topCabinetModuleSystem} from \"./cabinetModuleSystem\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 1;\r\n if (isChild) {\r\n this.moduleSystem = topCabinetModuleSystem;\r\n this.defaultInlayType = \"Wood\"; // Cascade or Wood\r\n this.inlayTypes = [{\r\n name: \"Cascade\",\r\n moduleParts: [\"2_4\", \"2_5\", \"5_4\", \"5_5\",\"7_4\", \"7_5\",]\r\n }]; // array of objects, for ex. {name: \"Cascade\", moduleParts: [\"3_2\", \"7_56\"]}\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n const module = dbFeature.metaData && dbFeature.metaData[\"Module\"];\r\n if (module && module[0] !== \"0\") {\r\n return super.load_(dbFeature, new TopCabinet(false, null),true, 'moduleParts');\r\n } else if (parts) {\r\n dbFeature.displayName = dbFeature.displayName.replace(/M_0(.*?) /, \"M \").replace(/ Part1/, \"\");\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopCabinet(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new TopCabinet());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const topCabinetApplianceType = this.getParent().getTopCabinetApplianceType();\r\n const allowedPorticos = [\r\n \"Portico White Chocolate S Hood Layout 2\",\r\n \"Portico White Chocolate L Hood Layout 2\",\r\n \"Portico White Chocolate SP Hood Layout 2\",\r\n \"Portico White Chocolate S Microwave Layout 2\",\r\n \"Portico White Chocolate L Microwave Layout 2\",\r\n \"Portico White Chocolate SP Microwave Layout 2\"\r\n ];\r\n featuresToDisplay = featuresToDisplay\r\n .filter((feature) => {\r\n return feature.metaData[\"Appliance\"] && feature.metaData[\"Appliance\"].includes(topCabinetApplianceType)\r\n })\r\n .filter((feature) => {\r\n if (feature.metaData[\"Module\"]) {\r\n return (feature.metaData[\"Module\"][0] === \"0\" && feature.metaData[\"Part\"][0] === \"1\")\r\n }\r\n return true\r\n })\r\n .filter((feature) => {\r\n if (feature.partName.includes(\"Portico White Chocolate\") && !allowedPorticos.includes(feature.partName)) {\r\n return false\r\n }\r\n return true\r\n });\r\n\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n changeLayout() {\r\n if (this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n\r\n async handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n const layout = parent.getParent().layout;\r\n const backsplash = layout.parts[\"Walls\"] && layout.parts[\"Walls\"].backsplash;\r\n const backsplashActiveFeature = backsplash ? backsplash.activeFeature : null;\r\n\r\n if (backsplashActiveFeature && backsplash.featureIsFullWall(backsplashActiveFeature) && this.metaData[\"CabinetLayout\"]) {\r\n const splittedName = backsplashActiveFeature.getCountertopGroupsSplittedFeatureName();\r\n const conditions = [{\r\n propName: 'CabinetLayout',\r\n propValue: this.metaData[\"CabinetLayout\"]\r\n }];\r\n if (!backsplashActiveFeature.matchesMetaForArrayOfConditions(conditions)) {\r\n const matchedByName = backsplash.findFeatureByPartName(splittedName);\r\n if (!matchedByName || !matchedByName.matchesMetaForArrayOfConditions(conditions)) {\r\n await backsplash.setFeatureByName(splittedName);\r\n }\r\n }\r\n }\r\n\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n // },{\r\n // propName: 'Appliance',\r\n // propValue: cabinetParent.getTopCabinetApplianceType()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.TopCabinet;\r\n const zIndex2 = zIndexes.Cabinet.TopCabinet2;\r\n const zIndexBox = zIndexes.Cabinet.TopCabinetModuleBox;\r\n const zIndexBox2 = zIndexes.Cabinet.TopCabinetModuleBox2;\r\n if (this.activeFeature) {\r\n if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n this.activeFeature.layer.zIndex = zIndexBox;\r\n } else {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n if (activeFeaturePart.metaData[\"Module\"] && !activeFeaturePart.metaData[\"Part\"]) {\r\n const module = activeFeaturePart.metaData[\"Module\"][0];\r\n const modulePart = activeFeaturePart.metaData[\"ModulePart\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.TopCabinetModules[module+\"_\"+modulePart];\r\n } else if (this.activeFeature.metaData[\"Module\"] && this.activeFeature.metaData[\"Module\"][0] === \"0\") {\r\n activeFeaturePart.layer.zIndex = zIndexBox2;\r\n } else {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n }\r\n });\r\n // // go again & try to find the same zIndex, cause we might have 3_3 - 2 times...\r\n // this.activeFeatureParts\r\n // .filter(activeFeaturePart => activeFeaturePart && activeFeaturePart.layer)\r\n // .forEach((activeFeaturePart) => {\r\n // const hasTheSameZIndex = this.activeFeatureParts.some(testFeaturePart => {\r\n // return (testFeaturePart.layer.zIndex === activeFeaturePart.layer.zIndex)\r\n // && (testFeaturePart.partName !== activeFeaturePart.partName)\r\n // });\r\n // if (hasTheSameZIndex) {\r\n // activeFeaturePart.layer.zIndex++;\r\n // }\r\n // })\r\n }\r\n }\r\n }\r\n\r\n matchesInlayType(feature, module = \"1\", modulePart = \"1\") {\r\n\r\n const featureFilterValueIDs = feature.dbFeature.filterValueIDs;\r\n if (!featureFilterValueIDs) {\r\n return true\r\n }\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Inlay Type\");\r\n if (!filterGroup) {\r\n return true\r\n }\r\n\r\n const modulePartJoined = module + \"_\" + modulePart;\r\n\r\n if (this.inlayTypes.length) {\r\n for (let i = 0; i <= this.inlayTypes.length - 1; i++) {\r\n const inlayTypeObject = this.inlayTypes[i];\r\n const fValue = filterGroup.values.find(val => {\r\n return (inlayTypeObject.moduleParts.includes(modulePartJoined))\r\n ? val.value === inlayTypeObject.name\r\n : val.value === this.defaultInlayType\r\n });\r\n // console.log(\"fValue\", fValue);\r\n // console.log(\"featureFilterValueIDs[filterGroup.id]\", featureFilterValueIDs[filterGroup.id]);\r\n return fValue && featureFilterValueIDs[filterGroup.id] && featureFilterValueIDs[filterGroup.id].includes(fValue.id)\r\n }\r\n } else {\r\n const fValue = filterGroup.values.find(val => val.value === this.defaultInlayType);\r\n return fValue && featureFilterValueIDs[filterGroup.id] && featureFilterValueIDs[filterGroup.id].includes(fValue.id)\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getActiveFeatureConditions(fromFeature = this.activeFeature) {\r\n const arrayOfConditions = this.getArrayOfConditions();\r\n const applianceType = fromFeature.metaData[\"Appliance\"] ? fromFeature.metaData[\"Appliance\"][0] : null;\r\n const cabinetLayout = fromFeature.metaData[\"CabinetLayout\"] ? fromFeature.metaData[\"CabinetLayout\"][0] : null;\r\n const doorSet = fromFeature.metaData[\"DoorSet\"] ? fromFeature.metaData[\"DoorSet\"][0] : null;\r\n if (applianceType) {\r\n arrayOfConditions.push({\r\n propName: 'Appliance',\r\n propValue: applianceType\r\n })\r\n }\r\n if (cabinetLayout) {\r\n arrayOfConditions.push({\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n })\r\n }\r\n if (doorSet) {\r\n arrayOfConditions.push({\r\n propName: 'DoorSet',\r\n propValue: doorSet\r\n })\r\n }\r\n return arrayOfConditions\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n let activeFeatureParts = this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n if (fromFeature && fromFeature.metaData[\"Module\"]) {\r\n activeFeatureParts = [...activeFeatureParts, ...this.findFeaturesByModuleSystem(fromFeature)];\r\n if (fromFeature.metaData[\"Appliance\"] && fromFeature.metaData[\"Appliance\"].includes(\"Hood\")) {\r\n activeFeatureParts = activeFeatureParts.filter(fPart => fPart.metaData[\"Module\"]\r\n && !fPart.metaData[\"Module\"].includes(\"6\"))\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n findFeaturesByModuleSystem(fromFeature = this.activeFeature) {\r\n let activeFeatureParts = [];\r\n const featureName = fromFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const modulePart = this.moduleSystem[currentModuleSystemNumber][k];\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n return +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n && this.matchesInlayType(feature, feature.metaData[\"Module\"][0], modulePartSplitted[2])\r\n });\r\n if (moduleMatchingPart) {\r\n activeFeatureParts.push(moduleMatchingPart);\r\n // } else { // this is for debugging only - look for features which are not exist\r\n // console.log(\"this.moduleSystem[i]\", i);\r\n // console.log(\"modulePartIndex\", k);\r\n }\r\n }\r\n }\r\n return activeFeatureParts\r\n }\r\n\r\n getFilterGroupObjectByInlayType(inlayTypeName) {\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const filterGroup = filterGroups.find(group => group.name === \"Inlay Type\");\r\n return {\r\n filterGroup,\r\n fValue: filterGroup && filterGroup.values.find(val => val.value === inlayTypeName)\r\n };\r\n }\r\n\r\n findFeatureByModuleAndModulePart(modulePart = \"1_1\", inlayTypeName = \"Wood\") {\r\n const featureName = this.activeFeature.getModuleFeatureName();\r\n const availableFeatures = this.moduleParts.filter((currentFeature) => {\r\n // 1) filter by module names, e.g. \"Hudson Linen White\"\r\n return featureName === currentFeature.getModuleFeatureName();\r\n });\r\n const modulePartSplitted = modulePart.split(\"_\");\r\n const filterObject = this.getFilterGroupObjectByInlayType(inlayTypeName);\r\n\r\n for (let i = 1; i <= this.moduleSystem.length; i++ ) {\r\n const currentModuleSystemNumber = i - 1;\r\n for (let k = 0; k <= this.moduleSystem[currentModuleSystemNumber].length - 1; k++ ) {\r\n const moduleMatchingPart = availableFeatures.find((feature) => {\r\n\r\n if (!feature.dbFeature.filterValueIDs[filterObject.filterGroup.id]) {\r\n // console.log(\"No Inlay Type Filter\", feature);\r\n return false\r\n }\r\n\r\n return +feature.metaData[\"Module\"][0] === i\r\n && feature.metaData[\"ModulePartWidth\"][0] === modulePartSplitted[0]\r\n && feature.metaData[\"ModulePartHeight\"][0] === modulePartSplitted[1]\r\n && feature.metaData[\"ModulePart\"][0] === modulePartSplitted[2]\r\n && filterObject.filterGroup && filterObject.fValue &&\r\n feature.dbFeature.filterValueIDs[filterObject.filterGroup.id].includes(filterObject.fValue.id)\r\n });\r\n if (moduleMatchingPart) {\r\n return moduleMatchingPart\r\n }\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return this.activeFeature && this.activeFeature.metaData[\"Module\"]\r\n && this.activeFeature.metaData[\"Module\"][0] === \"0\";\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport Appliance from \"../../parts/appliance\";\r\nimport store from \"../../../../../store\";\r\n\r\nexport default class CrownMolding extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'crown_molding';\r\n this.partName = 'Crown Molding';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 3;\r\n this.dbName = \"crown Molding\";\r\n this.translateId = \"visualizer.kitchen.cabinet.crown_molding\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"HoodType\"]) {\r\n dbFeature.metaData[\"HoodType\"] = [\"All\"]// it can be \"Wood\"\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new CrownMolding(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new CrownMolding());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = this.getParent().topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.crownMolding.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n featuresToDisplay = this.getFilteredFeaturesByTopCabinetFilters(featuresToDisplay);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n getFilteredFeaturesByTopCabinetFilters(filteredFeatures) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n\r\n return filteredFeatures.filter((currentFeature) => {\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(currentFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n });\r\n }\r\n return filteredFeatures\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && this.matchesByMetaDataAndFilters()\r\n && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n matchesByMetaDataAndFilters() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(this.activeFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ]) && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n return this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const filteredFeaturesByTopCabinetFilters = this.getFilteredFeaturesByTopCabinetFilters(filteredFeatures);\r\n this.activeFeature = filteredFeaturesByTopCabinetFilters[0] || null;\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature) {\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n }\r\n return [{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n }, {\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n let hoodType = [\"All\"];\r\n const cabinetParent = this.getParent();\r\n const isHood = cabinetParent.getTopCabinetApplianceType() === \"Hood\";\r\n const isMicrowave = cabinetParent.getTopCabinetApplianceType() === \"Microwave\";\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n if (isHood && applianceParent.hood && applianceParent.hood.activeFeature\r\n && applianceParent.hood.activeFeature.metaData && applianceParent.hood.activeFeature.metaData[\"HoodType\"]) {\r\n hoodType = applianceParent.hood.activeFeature.metaData[\"HoodType\"][0];\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n conditions.push({\r\n propName: \"HoodType\",\r\n propValue: isMicrowave ? \"Wood\" : hoodType\r\n });\r\n return conditions\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Cabinet.CrownMolding;\r\n const zIndex2 = zIndexes.Cabinet.CrownMolding2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart && activeFeaturePart.layer) activeFeaturePart.layer.zIndex = zIndex2;\r\n })\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Fridge extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge';\r\n this.partName = 'Fridge';\r\n this.translateId = \"visualizer.kitchen.appliance.fridge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fridge());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Fridge;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FridgeShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fridge_shadow';\r\n this.partName = 'Fridge Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FridgeShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const fridge = this.getParent().fridge;\r\n if (fridge && fridge.disabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Appliances.FridgeShadow;\r\n }\r\n }\r\n}","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport store from \"../../../../../store\";\r\nimport {METADATA} from \"../../constants\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class Hood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hood';\r\n this.partName = 'Hood';\r\n this.canBeDisabled = true;\r\n this.translateId = \"visualizer.kitchen.appliance.hood\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData.Appliance = [\"Hood\"];\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [METADATA.ALL]\r\n }\r\n if (!dbFeature.metaData[\"Cabinet\"]) {\r\n dbFeature.metaData[\"Cabinet\"] = [METADATA.ALL]\r\n }\r\n return super.load_(dbFeature, new Hood());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // 1) set hood\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this, ignoreLocked)) {\r\n const parent = this.getParent();\r\n const applianceParent = parent.getParent();\r\n const cabinetParent = applianceParent.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.getTopCabinetApplianceType() !== \"Hood\") {\r\n const topCabinetConditions = cabinetParent.topCabinet.getArrayOfConditions();\r\n topCabinetConditions.push({\r\n propName: \"Appliance\",\r\n propValue: \"Hood\"\r\n });\r\n const matchingCabinets = super.navigationSubItemsWithFilterMultipleConditions(\r\n topCabinetConditions,\r\n cabinetParent.topCabinet.features\r\n );\r\n if (matchingCabinets.length) {\r\n const currentName = cabinetParent.topCabinet.activeFeature.partName.split(\" Microwave\")[0];\r\n const matchingCabinet = matchingCabinets.find(cabinet => {\r\n return cabinet.partName.split(\" Hood\")[0] === currentName\r\n });\r\n (matchingCabinet || matchingCabinets[0]).handleClick(ignoreLocked);\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n featuresToDisplay = [\r\n ...this.getFilteredFeaturesByTopCabinetFilters(featuresToDisplay),\r\n ...this.getFeaturesMatchingAllCabinets(featuresToDisplay)\r\n ];\r\n return uniqBy(featuresToDisplay, (feature) => feature.dbFeature.id)\r\n .map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.getTopCabinetApplianceType() === \"Microwave\") {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && ((\r\n this.matchesByMetaDataAndFilters() || this.getFeaturesMatchingAllCabinets()\r\n .some(feature => feature.dbFeature.id === this.activeFeature.dbFeature.id)\r\n ) || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n matchesByMetaDataAndFilters() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(this.activeFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n }\r\n return this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const filteredFeaturesByTopCabinetFilters = this.getFilteredFeaturesByTopCabinetFilters(filteredFeatures);\r\n const featuresMatchingAllCabinets = this.getFeaturesMatchingAllCabinets(filteredFeatures);\r\n if (filteredFeaturesByTopCabinetFilters.length) {\r\n this.activeFeature = filteredFeaturesByTopCabinetFilters[0]\r\n } else {\r\n // const matchingFeatureExist = super.tryToSetTheSameFeature(filteredFeatures, null);\r\n // if (!matchingFeatureExist) {\r\n this.activeFeature = featuresMatchingAllCabinets[0] || filteredFeatures[0] || null;\r\n // }\r\n }\r\n }\r\n\r\n getFeaturesMatchingAllCabinets(filteredFeatures = this.features) {\r\n return filteredFeatures.filter((feature) => {\r\n return feature.dbFeature.metaData[\"CabinetLayout\"].includes(METADATA.ALL)\r\n || feature.dbFeature.metaData[\"Cabinet\"].includes(METADATA.ALL)\r\n });\r\n }\r\n\r\n getFilteredFeaturesByTopCabinetFilters(filteredFeatures) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent.topCabinet;\r\n\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.dbFeature && topCabinet.activeFeature.dbFeature.filterValueIDs) {\r\n const activeTopCabinetFilters = topCabinet.activeFeature.dbFeature.filterValueIDs;\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const woodTypeFilter = filterGroups.find(group => group.name === \"WoodType\");\r\n const stainColorFilter = filterGroups.find(group => group.name === \"StainColor\");\r\n\r\n return filteredFeatures.filter((currentFeature) => {\r\n return woodTypeFilter && stainColorFilter && this.featureIsMatchingFilters(currentFeature, activeTopCabinetFilters, [\r\n woodTypeFilter, stainColorFilter\r\n ])\r\n });\r\n }\r\n return filteredFeatures\r\n }\r\n\r\n getArrayOfConditions(ignoreConditions) {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const conditions = [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetParent.getTopCabinetType()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetParent.getTopCabinetShadowLayout()\r\n }];\r\n if (!ignoreConditions) {\r\n conditions.push({\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Hood;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Dishwasher extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'dishwasher';\r\n this.partName = 'Dishwasher';\r\n this.translateId = \"visualizer.kitchen.appliance.dishwasher\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Dishwasher());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Dishwasher;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Microwave extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'microwave';\r\n this.partName = 'Microwave';\r\n this.translateId = \"visualizer.kitchen.appliance.microwave\";\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData.Appliance = [\"Microwave\"];\r\n return super.load_(dbFeature, new Microwave());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked); // 1) set microwave\r\n\r\n const applianceParent = parent.getParent();\r\n const cabinetParent = applianceParent.layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.getTopCabinetApplianceType() !== \"Microwave\") {\r\n const topCabinetConditions = cabinetParent.topCabinet.getArrayOfConditions();\r\n topCabinetConditions.push({\r\n propName: \"Appliance\",\r\n propValue: \"Microwave\"\r\n });\r\n const matchingCabinets = super.navigationSubItemsWithFilterMultipleConditions(\r\n topCabinetConditions,\r\n cabinetParent.topCabinet.features\r\n );\r\n if (matchingCabinets.length) {\r\n const currentName = cabinetParent.topCabinet.activeFeature.getSplittedFeatureName();\r\n const matchingCabinet = matchingCabinets.find(cabinet => {\r\n return cabinet.getSplittedFeatureName() === currentName\r\n });\r\n (matchingCabinet || matchingCabinets[0]).handleClick(ignoreLocked);\r\n }\r\n }\r\n\r\n if (cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.disabled && !this.disabled) {\r\n cabinetParent.topCabinet.disabled = this.disabled;\r\n cabinetParent.topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const topHandle = cabinetParent.topHandle;\r\n if (topHandle) {\r\n topHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n this.featureClicked();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const topCabinet = cabinetParent && cabinetParent.topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions(ignoreAppliance) {\r\n return ignoreAppliance\r\n ? []\r\n : [{\r\n propName: \"Appliance\",\r\n propValue: this.getParent().layout.parts[\"Cabinet\"].getTopCabinetApplianceType()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Microwave;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.appliance.range\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Range());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n if (cabinetParent && cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeature\r\n && cabinetParent.bottomCabinet.activeFeature.metaData[\"Appliance\"]\r\n && cabinetParent.bottomCabinet.activeFeature.metaData[\"Appliance\"].includes(\"None\")) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Appliances.Range;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport Appliance from \"../../parts/appliance\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.canBeDisabled = true;\r\n this.layerPriority = 2;\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"HoodType\"]) {\r\n dbFeature.metaData[\"HoodType\"] = [\"All\"]// it can be \"Wood\"\r\n }\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"DoorSet\"]) {\r\n dbFeature.metaData[\"DoorSet\"] = [\"All\"]\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopHandle(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new TopHandle());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.disabled && !this.disabled) {\r\n topCabinet.disabled = this.disabled;\r\n topCabinet.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const crownMolding = this.getParent().crownMolding;\r\n if (crownMolding) {\r\n crownMolding.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.partName.includes(\"Portico White Chocolate\")) {\r\n return []\r\n }\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)\r\n || (topCabinet && topCabinet.activeFeature && topCabinet.activeFeature.partName.includes(\"Portico White Chocolate\"))) {\r\n super.hideLayers();\r\n return\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n let doorSet = [\"All\"];\r\n if (cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature) {\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n if (cabinetParent.topCabinet.activeFeature.metaData[\"DoorSet\"]) {\r\n doorSet = cabinetParent.topCabinet.activeFeature.metaData[\"DoorSet\"][0];\r\n }\r\n }\r\n\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n },{\r\n propName: \"DoorSet\",\r\n propValue: doorSet\r\n }];\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n let hoodType = [\"All\"];\r\n const cabinetParent = this.getParent();\r\n const isHood = cabinetParent.getTopCabinetApplianceType() === \"Hood\";\r\n const applianceParent = cabinetParent.layout.parts[Appliance.id];\r\n if (isHood && applianceParent.hood && applianceParent.hood.activeFeature\r\n && applianceParent.hood.activeFeature.metaData && applianceParent.hood.activeFeature.metaData[\"HoodType\"]) {\r\n hoodType = applianceParent.hood.activeFeature.metaData[\"HoodType\"][0];\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n conditions.push({\r\n propName: \"HoodType\",\r\n propValue: hoodType\r\n });\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Cabinet.TopHandle;\r\n const zIndex2 = zIndexes.Cabinet.TopHandle2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CabinetLayout\"]) {\r\n dbFeature.metaData[\"CabinetLayout\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"DoorSet\"]) {\r\n dbFeature.metaData[\"DoorSet\"] = [\"All\"]\r\n }\r\n if (!dbFeature.metaData[\"Appliance\"]) {\r\n dbFeature.metaData[\"Appliance\"] = [\"All\"]\r\n }\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new BottomHandle(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new BottomHandle());\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const bottomCabinet = this.getParent().bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n let cabinetLayout = [\"All\"];\r\n let doorSet = [\"All\"];\r\n if (cabinetParent.bottomCabinet && cabinetParent.bottomCabinet.activeFeature) {\r\n if (cabinetParent.bottomCabinet.activeFeature.metaData[\"CabinetLayout\"]) {\r\n cabinetLayout = cabinetParent.bottomCabinet.activeFeature.metaData[\"CabinetLayout\"][0]\r\n }\r\n if (cabinetParent.bottomCabinet.activeFeature.metaData[\"DoorSet\"]) {\r\n doorSet = cabinetParent.bottomCabinet.activeFeature.metaData[\"DoorSet\"][0];\r\n }\r\n }\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getBottomCabinetApplianceType()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayout\r\n },{\r\n propName: \"DoorSet\",\r\n propValue: doorSet\r\n }];\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n const matchingFeatureExist = this.tryToSetTheSameFeature(filteredFeatures, null);\r\n if (!matchingFeatureExist) {\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n getActiveFeatureConditions() {\r\n return this.getArrayOfConditions()\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Cabinet.BottomHandle;\r\n const zIndex2 = zIndexes.Cabinet.BottomHandle2;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopCabinetShadow extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'top_cabinet_shadow';\r\n this.partName = 'Top Cabinet Shadow';\r\n this.visible = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return super.load_(dbFeature, new TopCabinetShadow(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new TopCabinetShadow());\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const topCabinet = this.getParent().topCabinet;\r\n if (topCabinet && (topCabinet.disabled || !topCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n const activeFeatureParts = fromFeature && fromFeature.partNumber ? this.featuresParts.filter((feature) => {\r\n const name1 = fromFeature.partName.split(\" Part\")[0];\r\n // console.log(\"name1\", name1);\r\n const name2 = feature.partName.split(\"Part2 \").join(\"\");\r\n // console.log(\"name2\", name2);\r\n return name1 === name2\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetParent = this.getParent();\r\n return [{\r\n propName: \"Appliance\",\r\n propValue: cabinetParent.getTopCabinetApplianceType()\r\n }, {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetParent.getTopCabinetShadowLayout()\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: cabinetParent.layout.getCurrentLayoutAbbreviation()\r\n }, {\r\n propName: 'CrownMolding',\r\n propValue: cabinetParent && cabinetParent.crownMolding &&\r\n cabinetParent.crownMolding.activeFeature && !cabinetParent.crownMolding.disabled ? \"On\" : \"Off\"\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Cabinet.TopCabinetShadow;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Cabinet.TopCabinetShadowPart2\r\n })\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinetShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_cabinet_shadow';\r\n this.partName = 'Bottom Cabinet Shadow';\r\n this.visible = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BottomCabinetShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const bottomCabinet = this.getParent().bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Cabinet.BottomCabinetShadow;\r\n }\r\n }\r\n}","import store from \"../../../../../store\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\nimport CountertopCommon from \"../countertopCommon\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const parts = dbFeature.metaData && dbFeature.metaData[\"Parts\"];\r\n if (parts) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n if (partNumber === 3) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"N\"))) || [];\r\n }\r\n return super.load_(dbFeature, new Countertop(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n } else {\r\n return super.load_(dbFeature, new Countertop());\r\n }\r\n }\r\n\r\n disabledClick() {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.countertop.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Countertop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart && activeFeaturePart.layer && activeFeaturePart.dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +activeFeaturePart.dbFeature.metaData[\"Part\"][0];\r\n activeFeaturePart.layer.zIndex = zIndexes.CountertopGroup[\"Countertop\"+partNumber];\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature) {\r\n let activeFeatureParts = [];\r\n if (fromFeature && fromFeature.partNumber) {\r\n const name1 = fromFeature.getCountertopGroupsSplittedFeatureName();\r\n const conditions = this.getArrayOfConditions();\r\n activeFeatureParts = this.featuresParts.filter((feature) => {\r\n const name2 = feature.getCountertopGroupsSplittedFeatureName();\r\n return (name1 === name2) && feature.matchesMetaForArrayOfConditions(conditions);\r\n });\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const edgeFilterGroup = filterGroups.find(group => group.name === \"Edge\" || group.name === \"Edge Profile\");\r\n const fromFeatureFilters = fromFeature.dbFeature.filterValueIDs;\r\n if (edgeFilterGroup && fromFeatureFilters && fromFeatureFilters[edgeFilterGroup.id]) {\r\n const edgeFilterGroupId = edgeFilterGroup.id;\r\n const realActiveFeaturePart = activeFeatureParts.find(activeFeaturePart => {\r\n return this.featureIsMatchingEdgeFilters(activeFeaturePart, fromFeatureFilters[edgeFilterGroupId], edgeFilterGroupId)\r\n });\r\n activeFeatureParts = realActiveFeaturePart ? [realActiveFeaturePart] : []\r\n }\r\n }\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n if(activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n featureIsMatchingEdgeFilters(currentCheckFeature, activeEdgeFilter, edgeFilterGroupId) {\r\n const currentFeatureEdgeFilters = currentCheckFeature && currentCheckFeature.dbFeature\r\n && currentCheckFeature.dbFeature.filterValueIDs\r\n && currentCheckFeature.dbFeature.filterValueIDs[edgeFilterGroupId];\r\n return currentFeatureEdgeFilters && currentFeatureEdgeFilters.some(filterValueId => filterValueId === activeEdgeFilter[0]);\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.countertop.faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const relatedSink = this.getParent().sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Faucet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.countertop.sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const relatedFaucet = this.getParent().faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Sink;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.countertop.stovetop\";\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Countertop)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CountertopGroup.Stovetop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cutouts extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cutouts';\r\n this.partName = 'Cutouts';\r\n this.translateId = \"visualizer.kitchen.countertop.cutouts\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Cutouts());\r\n }\r\n\r\n setZIndex() {\r\n\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class EdgeProfile extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'edge_profile';\r\n this.partName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.countertop.edge_profile\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new EdgeProfile());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Radius extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'radius';\r\n this.partName = 'Radius';\r\n this.translateId = \"visualizer.kitchen.countertop.radius\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Radius());\r\n }\r\n\r\n setZIndex() {\r\n\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.dbName = 'center Island';\r\n this.partId = 'center_island_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_cabinet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Cabinet());\r\n }\r\n\r\n changeLayout() {\r\n const layoutAbbreviation = this.getParent().layout.getCurrentLayoutAbbreviation();\r\n if (layoutAbbreviation.includes(\"I\") && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n centerIslandParent.relatedItems.forEach(relItem => {\r\n relItem.disabled = this.disabled;\r\n });\r\n }\r\n\r\n setDefault() {\r\n\r\n if (!this.tryToSetTheSameFeature(this.features)) {\r\n const layout = this.getParent().layout;\r\n if (layout.selectedLayoutFeatures[layout.type] && layout.selectedLayoutFeatures[layout.type][this.partId]) {\r\n this.activeFeature = this.getFeatureByPartName(layout.selectedLayoutFeatures[layout.type][this.partId]);\r\n } else {\r\n const existInSomeLayout = Object.keys(layout.selectedLayoutFeatures).find(layoutType => {\r\n return layout.selectedLayoutFeatures[layoutType] && layout.selectedLayoutFeatures[layoutType][this.partId];\r\n });\r\n if (existInSomeLayout) {\r\n this.activeFeature = this.getFeatureByPartName(layout.selectedLayoutFeatures[existInSomeLayout][this.partId]);\r\n }\r\n }\r\n if (!this.activeFeature) {\r\n this.activeFeature = this.features[0];\r\n }\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Cabinet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_countertop';\r\n this.dbName = 'Center Island Countertop';\r\n this.partName = 'Island Countertop';\r\n this.homePageTitle = 'Center Island Countertop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Countertop());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setDefault() { // this is added because of the layout\r\n const layout = this.getParent && this.getParent().layout;\r\n if (layout && layout.getCurrentLayoutAbbreviation) {\r\n const currentLayoutAbbreviation = layout.getCurrentLayoutAbbreviation();\r\n if (currentLayoutAbbreviation && !currentLayoutAbbreviation.includes(\"I\")) {\r\n return null\r\n }\r\n }\r\n return super.setDefault()\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Countertop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Chairs extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_chairs';\r\n this.partName = 'Chairs';\r\n this.dbName = 'Chair';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_chairs\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Chairs());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Chairs;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n const relatedSink = centerIslandParent.sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const sink = this.getParent().sink;\r\n if (sink && sink.activeFeature) {\r\n return [{\r\n propName: \"FaucetPlacement\",\r\n propValue: sink.activeFeature.metaData[\"FaucetPlacement\"] || \"Moved\"\r\n }]\r\n }\r\n return [];\r\n }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const splittedName = (partName || this.activeFeature.partName).split(\" M\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const splittedCurrentName = feature.partName.split(\" M\")[0];\r\n return splittedCurrentName === splittedName\r\n }\r\n return false\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Faucet;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n const relatedFaucet = centerIslandParent.faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Sink;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Handle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_handle';\r\n this.dbName = 'Center Island Handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_handle\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Handle());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetType = this.getParent().getCabinetType();\r\n return [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetType\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterIslandShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_shadow';\r\n this.partName = 'Center Island Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new CenterIslandShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const cabinetType = this.getParent().getCabinetType();\r\n return [{\r\n propName: \"Cabinet\",\r\n propValue: cabinetType\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.CenterIsland.CenterIslandShadow;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_stovetop';\r\n this.partName = 'Stovetop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n this.defaultDisabled = true;\r\n this.disabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) {\r\n return false\r\n }\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (!cabinet.featureGroupEnabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (!this.disabled && cabinet.disabled) {\r\n cabinet.disabled = false;\r\n cabinet.disabledClick();\r\n }\r\n const sink = centerIslandParent.sink;\r\n const range = centerIslandParent.range;\r\n if (sink && !this.disabled && !sink.disabled) {\r\n sink.disabled = true;\r\n sink.disabledClick();\r\n }\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const centerIslandParent = this.getParent();\r\n const sink = centerIslandParent.sink;\r\n const range = centerIslandParent.range;\r\n if ((sink && !sink.disabled) || (sink && !range.disabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Stovetop;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Range extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_range';\r\n this.partName = 'Range';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_range\";\r\n this.canBeDisabled = true;\r\n this.defaultDisabled = true;\r\n this.disabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if ((dbFeature.metaData && dbFeature.metaData[\"Placement\"]\r\n && !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island)) || !dbFeature.metaData[\"Placement\"]) {\r\n return false\r\n }\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new Range());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const sink = centerIslandParent.sink;\r\n const stovetop = centerIslandParent.stovetop;\r\n if (sink && !this.disabled && !sink.disabled) {\r\n sink.disabled = true;\r\n sink.disabledClick();\r\n }\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const centerIslandParent = this.getParent();\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (!cabinet.featureGroupEnabled) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (!this.disabled && cabinet.disabled) {\r\n cabinet.disabled = false;\r\n cabinet.disabledClick();\r\n }\r\n const sink = centerIslandParent.sink;\r\n const stovetop = centerIslandParent.stovetop;\r\n if ((sink && !sink.disabled) || (stovetop && !stovetop.disabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.CenterIsland.Range;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class Edge extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_edge';\r\n this.partName = 'Edge';\r\n this.dbName = 'Edge Profile';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_edge\";\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Edge());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ChairsShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_chairs_shadow';\r\n this.partName = 'Center Island Chairs Shadow';\r\n this.visible = false;\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n return super.load_(dbFeature, new ChairsShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const chairs = this.getParent().chairs;\r\n if (!chairs || (chairs.disabled || !chairs.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const chairsType = this.getParent().getChairType();\r\n return [{\r\n propName: \"Chair\",\r\n propValue: chairsType\r\n }, {\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.CenterIsland.ChairsShadow;\r\n }\r\n }\r\n}\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport FeatureWizardBodyItem from \"./featureWizardBodyItem\";\r\nimport FeatureWizardSelection from \"./featureWizardSelection\";\r\nimport {s3FilterImagePath} from \"../../../../misc/utils\";\r\n\r\nclass FeatureWizardBody extends Component {\r\n\r\n static propTypes = {\r\n currentStep: PropTypes.object.isRequired,\r\n activeSubPart: PropTypes.object.isRequired,\r\n filterGroups: PropTypes.array.isRequired,\r\n features: PropTypes.array,\r\n onItemClick: PropTypes.func.isRequired,\r\n onItemClickDisabled: PropTypes.func.isRequired,\r\n availableSteps: PropTypes.array,\r\n featureWizardStep: PropTypes.number,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n isMobile: PropTypes.bool,\r\n handleUserLoginClick: PropTypes.func,\r\n setFeatureWizardStep: PropTypes.func,\r\n showerWallWizardGroupsSelected: PropTypes.bool,\r\n searchText: PropTypes.string,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n currentValues: []\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setCurrentValues();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.currentStep && this.props.currentStep && (nextProps.currentStep.id !== this.props.currentStep.id)) {\r\n this.setCurrentValues(nextProps);\r\n }\r\n }\r\n\r\n setCurrentValues(nextProps = this.props) {\r\n const currentGroup = nextProps.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === nextProps.currentStep.id\r\n });\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n const filteredFeatures = nextProps.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n const selectedId = nextProps.currentStep.selectedValueId;\r\n const currentValues = nextProps.currentStep.values\r\n .map((wizardValueObject) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n const itemIsLocked = this.getLockedPropertyValueObjectById(currentFilterValue, filteredFeatures, wizardValueObject.filterValue, fabricatorSettings, nextProps);\r\n wizardValueObject.itemIsLocked = itemIsLocked;\r\n // console.log('wizardValueObject', wizardValueObject);\r\n return wizardValueObject\r\n })\r\n .sort((a,b) => {\r\n const selectedA = selectedId === a.filterValue;\r\n const selectedB = selectedId === b.filterValue;\r\n if (selectedA < selectedB) {\r\n return 1\r\n } else if (selectedB < selectedA) {\r\n return - 1\r\n } else {\r\n if (a.selectionAvailable < b.selectionAvailable) {\r\n return 1\r\n } else if (b.selectionAvailable < a.selectionAvailable) {\r\n return - 1\r\n } else {\r\n return (a.itemIsLocked > b.itemIsLocked) ? 1 : ((b.itemIsLocked > a.itemIsLocked) ? -1 : 0)\r\n }\r\n }\r\n });\r\n this.setState({\r\n currentValues\r\n })\r\n }\r\n\r\n getFilterValueObjectById = (currentGroup, filterValueId) => {\r\n return currentGroup.values.find(currentGroupValue => {\r\n return currentGroupValue.id === filterValueId\r\n });\r\n };\r\n\r\n getLockedPropertyValueObjectById = (currentFilterValue, filteredFeatures, filterValueId, fabricatorSettings, nextProps = this.props) => {\r\n\r\n const {isBackend, jobId, canSaveQuote, visualizerManagement} = document.kvConfig;\r\n\r\n if (!fabricatorSettings.leadCapture\r\n || (fabricatorSettings.leadCapture && visualizerManagement)\r\n || (fabricatorSettings.leadCapture && nextProps.isPhoneNumberValidated)\r\n || (fabricatorSettings.leadCapture && (isBackend && jobId && canSaveQuote))){\r\n return false\r\n }\r\n\r\n return currentFilterValue.lockedInWizard || !filteredFeatures.some(feature => {\r\n // console.log('bject.keys(feature.dbFeature.filterValueIDs)', Object.keys(feature.dbFeature.filterValueIDs));\r\n const filterToFind = feature.dbFeature.filterValueIDs[nextProps.currentStep.id];\r\n return filterToFind && filterToFind.includes(filterValueId) && feature.dbFeature.unlocked;\r\n })\r\n };\r\n\r\n getFeatureBodyItemThumbnail = (currentFilterValue) => {\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n // console.log('props.currentFilterValue', currentFilterValue);\r\n if (this.props.activeSubPart.partId === \"vanity_cabinet\" && this.props.currentStep.filterName === \"Color\") {\r\n const materialFilter = this.props.availableSteps.find(step => step.filterName === \"Material\");\r\n if (materialFilter && materialFilter.selectedValueId) {\r\n const neededImage = additionalImages.find(image => image.filterValueIds.includes(materialFilter.selectedValueId));\r\n if (neededImage && neededImage.imageUrl) {\r\n return neededImage.imageUrl\r\n }\r\n return additionalImages[0].imageUrl\r\n }\r\n }\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n };\r\n\r\n getFeatureWizardBodyItem = (currentFilterValue, currentGroup, wizardValueObject, filteredFeatures, fabricatorSettings, key) => {\r\n\r\n // const thumbNailPath = `${basePath}images/thumbnails/${parentGroup}/${props.isMobile ? \"100\" : \"400\"}/${featureName}.JPG`;\r\n // console.log('thumbNailPath', thumbNailPath);\r\n\r\n /*** image ***/\r\n const styles = {\r\n backgroundImage: \"url(\" + this.getFeatureBodyItemThumbnail(currentFilterValue) + \")\"\r\n };\r\n const bgFilterName = this.props.currentStep.filterName.replace(/ /g,\"\");\r\n const bgFilterNameFilters = [\"Material\", \"Color\", \"TilePattern\", \"AcrylicPattern\", \"AcrylicColor\"];\r\n const backGroundSizeCover = bgFilterNameFilters.includes(bgFilterName);\r\n\r\n // const parentGroup = props.currentStep.filterName.replace(/ /g,\"\");\r\n // let featureName = props.currentFilterValue.displayText.replace(/ /g,\"\");\r\n // if (parentGroup === \"Color\") {\r\n // const woodType = props.availableSteps.find(step => step.filterName === \"Material\");\r\n // featureName = woodType.selectedValueName.replace(/ /g,\"\") + \"_\" + featureName;\r\n // if (featureName === \"Alder_Eggshell\" || featureName === \"Alder_Graphite\" || featureName === \"Alder_White\" // temporary hardcode until we have BE for multi thumbnails ready\r\n // || featureName === \"Oak_Eggshell\" || featureName === \"Oak_Graphite\" || featureName === \"Oak_White\") {\r\n // featureName = \"custom/\" + featureName;\r\n // }\r\n // }\r\n\r\n /*** active ***/\r\n const isActive = currentFilterValue && (this.props.currentStep.selectedValueId === currentFilterValue.id);\r\n\r\n /*** locked ***/\r\n const itemIsLocked = this.getLockedPropertyValueObjectById(currentFilterValue, filteredFeatures, wizardValueObject.filterValue, fabricatorSettings);\r\n\r\n /*** pulsating ***/\r\n let isPulsating = false;\r\n if ((fabricatorSettings.leadCapture && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !this.props.isPhoneNumberValidated\r\n && !itemIsLocked) {\r\n if (!this.props.currentStep.selectedValueId) {\r\n isPulsating = true\r\n } else {\r\n const selectedFilterValue = this.getFilterValueObjectById(currentGroup, this.props.currentStep.selectedValueId);\r\n const selectedItemIsLocked = this.getLockedPropertyValueObjectById(selectedFilterValue, filteredFeatures, this.props.currentStep.selectedValueId, fabricatorSettings);\r\n if (selectedItemIsLocked) {\r\n isPulsating = true\r\n }\r\n }\r\n }\r\n\r\n /*** disabled ***/\r\n let disabled = (this.props.featureWizardStep === 0) ? false : !wizardValueObject.selectionAvailable;\r\n\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n\r\n return (\r\n \r\n )\r\n\r\n };\r\n\r\n renderItemsList = (currentGroup, filteredFeatures, values, fabricatorSettings) => {\r\n const navigationViewType = this.props.navigationViewType === 3 ? 2 : 1;\r\n\r\n const elements = [];\r\n\r\n for (let i = 0; i < Math.ceil(values.length / navigationViewType); i++ ) { // for ex. 28/3 = 10 columns\r\n const innerElements = [];\r\n for (let j = 0; j < navigationViewType;j++ ) {\r\n\r\n const currentIndex = j+(i*navigationViewType);\r\n const wizardValueObject = values[currentIndex];\r\n\r\n if (!wizardValueObject) {\r\n innerElements.push(\r\n
    \r\n );\r\n } else {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n innerElements.push(this.getFeatureWizardBodyItem(\r\n currentFilterValue,\r\n currentGroup,\r\n wizardValueObject,\r\n filteredFeatures,\r\n fabricatorSettings,\r\n \"item\"+j+i\r\n )\r\n );\r\n }\r\n }\r\n elements.push(\r\n
  • \r\n {innerElements}\r\n
  • \r\n );\r\n }\r\n // console.log('elements', elements);\r\n return elements\r\n };\r\n\r\n render() {\r\n // console.log('currentStep', this.props.currentStep);\r\n const currentGroup = this.props.filterGroups.find((filterGroup) => {\r\n return filterGroup.id === this.props.currentStep.id\r\n });\r\n const filteredFeatures = this.props.features.filter(feature => {\r\n return !feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n const fabricatorSettings = this.props.fabricatorSettings;\r\n\r\n const interiorShowerWallWizard = this.props.activeSubPart.partId === \"shower_interior_wall\";\r\n if (interiorShowerWallWizard && !this.props.showerWallWizardGroupsSelected) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n const values = this.props.searchText\r\n ? this.state.currentValues.filter((currentValue) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, currentValue.filterValue);\r\n return currentFilterValue && currentFilterValue.displayText.toLowerCase().includes(this.props.searchText.toLowerCase())\r\n })\r\n : this.state.currentValues;\r\n\r\n return this.props.isMobile ? (\r\n
    \r\n
      \r\n {values.map((wizardValueObject, filterValueIndex) => {\r\n const currentFilterValue = this.getFilterValueObjectById(currentGroup, wizardValueObject.filterValue);\r\n return this.getFeatureWizardBodyItem(\r\n currentFilterValue,\r\n currentGroup,\r\n wizardValueObject,\r\n filteredFeatures,\r\n fabricatorSettings,\r\n \"item\"+filterValueIndex\r\n )\r\n })}\r\n
    \r\n
    \r\n ) : (\r\n
      \r\n {this.renderItemsList(currentGroup, filteredFeatures, values, fabricatorSettings)}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorSettings: store.fabricatorState.settings,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n navigationViewType: store.navigationState.navigationViewType\r\n});\r\n\r\nconst mapDispatchToProps = () => ({});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FeatureWizardBody);\r\n","import React from 'react';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\n// import { basePath } from \"../../core/assets\";\r\nimport Analytics from './../../../../analytics';\r\nimport {UserPopupTypes} from \"../../constants\";\r\n\r\nconst FeatureWizardBodyItem = (props) => {\r\n return props.isMobile ? (\r\n
  • \r\n
    (props.disabled && !props.itemIsLocked)\r\n ? props.onItemClickDisabled(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)\r\n : props.onItemClick(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)}\r\n style={props.styles}>\r\n
    \r\n {props.itemIsLocked\r\n ? \r\n : {props.currentFilterValue.displayText}}\r\n
    \r\n
    \r\n {props.isActive && (props.itemIsLocked || (!props.userIsLoggedIn && props.getQuoteEnabled)) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
  • \r\n ) : (\r\n
    (props.disabled && !props.itemIsLocked)\r\n ? props.onItemClickDisabled(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)\r\n : props.onItemClick(props.currentFilterValue, props.itemIsLocked, props.currentStep.filterName)}>\r\n {props.isActive && (props.itemIsLocked || (!props.userIsLoggedIn && props.getQuoteEnabled)) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n {props.itemIsLocked ? null : (\r\n {props.currentFilterValue.displayText}\r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nFeatureWizardBodyItem.displayName = 'FeatureWizardBodyItem';\r\n\r\nexport default FeatureWizardBodyItem;\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport FeatureWizardSelectionItem from \"./featureWizardSelectionItem\";\r\n\r\nexport default class FeatureWizardSelection extends Component {\r\n\r\n static propTypes = {\r\n toggleWizardFilterSelection: PropTypes.func.isRequired,\r\n getFilterValueObjectById: PropTypes.func.isRequired,\r\n onItemClick: PropTypes.func.isRequired,\r\n exitFeatureWizard: PropTypes.func.isRequired,\r\n setFeatureWizardStep: PropTypes.func.isRequired,\r\n currentStep: PropTypes.object.isRequired,\r\n isMobile: PropTypes.bool,\r\n };\r\n\r\n componentDidMount() {\r\n this.props.setFeatureWizardStep(0);\r\n }\r\n\r\n setWizardValue = (clickedFilterValue) => {\r\n this.props.toggleWizardFilterSelection(true);\r\n this.props.onItemClick(clickedFilterValue, false, this.props.currentStep.filterName);\r\n this.props.setFeatureWizardStep(1);\r\n };\r\n\r\n setAllItems = () => {\r\n setTimeout(() => {\r\n this.props.toggleWizardFilterSelection(true);\r\n }, 300);\r\n this.props.exitFeatureWizard();\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
      \r\n
    • \r\n \r\n
    • \r\n {this.props.currentStep.values.map((wizardValueObject, index) => {\r\n const currentFilterValue = this.props.getFilterValueObjectById(this.props.currentGroup, wizardValueObject.filterValue);\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nconst FeatureWizardSelectionItem = (props) => {\r\n return (\r\n
  • props.setWizardValue(props.currentFilterValue)}>\r\n {props.currentFilterValue.displayText}\r\n
  • \r\n );\r\n};\r\n\r\nFeatureWizardSelectionItem.displayName = 'FeatureWizardSelectionItem';\r\n\r\nexport default FeatureWizardSelectionItem;","import React, {useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport RoomSceneNavigationItem from \"./roomSceneNavigationItem\";\r\nimport {getAvailableRoomScenes} from \"./navUtils\";\r\n\r\nconst RoomSceneNavigation = () => {\r\n\r\n const layout = getCurrentLayout();\r\n const [activeScene, setActiveScene] = useState(layout.scene);\r\n\r\n const availableRoomScenes = getAvailableRoomScenes();\r\n // console.log(\"availableRoomScenes\", availableRoomScenes);\r\n\r\n return (\r\n
    \r\n
      \r\n {availableRoomScenes.map(roomScene => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RoomSceneNavigation)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {createFakeLayout, getCurrentLayout} from \"../../appLayout\";\r\nimport LoadingSpinner from \"../../ui/loadingSpinner\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {getImagePromiseFromLayout} from \"../../../misc/getCanvasImageFromLayout\";\r\nimport {useIsMounted} from \"../../../misc/helperHooks\";\r\n\r\nconst RoomSceneNavigationItem = (props) => {\r\n\r\n const {roomScene, isActive, setActiveScene} = props;\r\n\r\n const [thumbnailUrl, setThumbnailUrl] = useState();\r\n const layout = getCurrentLayout();\r\n const isMounted = useIsMounted();\r\n\r\n useEffect(() => {\r\n if (!thumbnailUrl) {\r\n const getLayoutThumbnail = async () => {\r\n const fakeLayout = layout.scene === roomScene ? layout : createFakeLayout();\r\n if (!isActive) {\r\n await fakeLayout.selectLayout(layout.type, null, null, roomScene, null, true);\r\n }\r\n // console.log(\"layout.getLayers(showPlaceHolders)\", roomScene, fakeLayout, fakeLayout.getLayers(false));\r\n const imageResponse = await getImagePromiseFromLayout(fakeLayout);\r\n if (isMounted() && imageResponse) {\r\n setThumbnailUrl(imageResponse);\r\n }\r\n\r\n }\r\n getLayoutThumbnail();\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const roomSceneClick = async () => {\r\n if (!isActive) {\r\n loaderEnable();\r\n setActiveScene(roomScene);\r\n await layout.selectLayout(layout.type, null, null, roomScene);\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update canvas\r\n loaderDisable();\r\n }\r\n };\r\n\r\n return (\r\n
  • roomSceneClick(roomScene)}\r\n style={{backgroundImage: `url(${thumbnailUrl})`}}>\r\n {thumbnailUrl ? null : }\r\n
  • \r\n )\r\n};\r\n\r\nRoomSceneNavigationItem.propTypes = {\r\n roomScene: PropTypes.string.isRequired,\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RoomSceneNavigationItem)\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getAvailableLayouts} from \"./navUtils\";\r\nimport LayoutNavigationItem from \"../layoutNavigationItem\";\r\n\r\nconst DesktopNavigationLayoutsContent = (props) => {\r\n\r\n const {handleLayoutItemClick, desktopNavigationOpened} = props;\r\n\r\n const [allowLoading, setAllowLoading] = useState(desktopNavigationOpened);\r\n const timeoutRef = useRef();\r\n\r\n useEffect(() => {\r\n timeoutRef.current = setTimeout(() => {\r\n setAllowLoading(true);\r\n }, allowLoading ? 300 : 400)\r\n return () => {\r\n clearTimeout(timeoutRef.current)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n if (!allowLoading) {\r\n return null\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const layoutNames = getAvailableLayouts();\r\n return (\r\n
    \r\n
      \r\n {layoutNames.map(key => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nDesktopNavigationLayoutsContent.propTypes = {\r\n handleLayoutItemClick: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {desktopNavigationOpened} = store.navigationState;\r\n return {\r\n desktopNavigationOpened\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(DesktopNavigationLayoutsContent);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../../actions/actionFunctions\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport Z from \"../core/parts/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport ContextMenu from \"./contextMenu\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\nimport {setNavigationLoading, setNavigationViewType} from \"../../../actions/navigationFunctions\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n let ponyWallGroup = false;\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\" || hoveredZone === \"vanity_custom\" || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\" || hoveredZone === \"shower_pony_wall\" || hoveredZone === \"left_wall_custom\"\r\n || hoveredZone === \"wall_b_custom\") && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = '';\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n contextMenuPonyWall: ponyWallGroup,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, ponyWallGroup)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n if (item.matchesMetaFailed) {\r\n const nonCompatibleWith = item.part.partId === \"vanity_faucet\" ? \"sink\" : \"vanity\";\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = (activeSubPart || activePart) && (activeSubPart || activePart).allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n // console.log('featuresfeaturesfeatures', features);\r\n\r\n const useFilters = (activePart && activePart.partId === \"floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = (activeSubPart || activePart) && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeSubPart || activePart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n layoutParts: store.stepsState.layoutParts,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setVanityType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport {Grid} from 'react-virtualized';\r\n\r\nimport NavigationItemsList from \"../navigationItemsList\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport UserLoginButton from \"../../../ui/userLoginButton\";\r\nimport {UserPopupTypes} from \"../../constants\";\r\nimport {CABINET_WIZARD_BUTTONS} from \"../../../kvComponent/core/constants\";\r\nimport NavigationFilters from \"../newFilters/navigationFilters\";\r\nimport {getActivePartsCounts} from \"../navUtils\";\r\nimport {\r\n changeActivePartRelatedItemIndex, setCameFromPage, setQtActiveCategory, toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo, toggleSelectionWindow\r\n} from \"../../../../actions/actionFunctions\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../../../misc/filtersFunctions\";\r\n\r\nclass MobileNavigationBodyNewClass extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.arrayOf(PropTypes.instanceOf(DesignNavigationItem)),\r\n parentItem: PropTypes.instanceOf(DesignNavigationItem),\r\n childItem: PropTypes.instanceOf(DesignNavigationItem),\r\n toggleUserPopup: PropTypes.func,\r\n onItemClick: PropTypes.func,\r\n userIsLoggedIn: PropTypes.bool,\r\n showMobileMenu: PropTypes.bool,\r\n isPhoneNumberValidated: PropTypes.bool,\r\n activeFeature: PropTypes.object,\r\n searchText: PropTypes.string,\r\n allFeaturesReceived: PropTypes.bool,\r\n existInQtCategory: PropTypes.bool,\r\n layoutName: PropTypes.string\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n itemClicked: false,\r\n reorderedFeatures: [],\r\n // showLoader: false,\r\n };\r\n this.childItemText = \"\";\r\n this.parentItemText = \"\";\r\n // this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this.reorderItems(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (\r\n (nextProps.childItem && (nextProps.childItem.text !== this.childItemText))\r\n || (nextProps.showMobileMenu && !this.props.showMobileMenu)\r\n || (!nextProps.childItem && nextProps.parentItem && (nextProps.parentItem.text !== this.parentItemText))\r\n || (this.props.selectedFilters.length !== nextProps.selectedFilters.length)\r\n || (this.props.searchText !== nextProps.searchText)\r\n || (nextProps.allFeaturesReceived && !this.props.allFeaturesReceived)\r\n || (nextProps.bvOpened && !this.props.bvOpened)\r\n || (this.props.features.length !== nextProps.features.length)\r\n || (this.props.features.length && nextProps.features.length && nextProps.features[0] && this.props.features[0] &&\r\n nextProps.features[0].part.getParent().partName !== this.props.features[0].part.getParent().partName)\r\n ) {\r\n // this.setState({\r\n // showLoader: true\r\n // }, () => {\r\n // this.reorderItems(nextProps);\r\n // });\r\n this.reorderItems(nextProps);\r\n }\r\n\r\n if (!nextProps.isPhoneNumberValidated && this.props.isPhoneNumberValidated) { // if user logged out\r\n const fabricatorSettings = nextProps.fabricatorData.settings;\r\n if (fabricatorSettings.leadCapture\r\n && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) {\r\n setTimeout(() => {\r\n this.reorderItems(nextProps);\r\n },0)\r\n }\r\n }\r\n\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.reorderItems(nextProps);\r\n this.needToUpdate = false;\r\n }\r\n\r\n const childItem = nextProps.childItem && nextProps.childItem.part;\r\n if (childItem && nextProps.selectedFilters.length) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, childItem);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(nextProps.childItem.part, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n reorderItems = (props) => {\r\n const selectedFirstItemIndex = this.getActiveItemIndex(props);\r\n const otherSelectedWallsIndexes = this.getSelectedWallIndexes(props.childItem, props.features, selectedFirstItemIndex); // this part is looking for the same stones that are already selected\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist ? [selectedFirstItemIndex, ...otherSelectedWallsIndexes] : [...otherSelectedWallsIndexes];\r\n\r\n this.childItemText = props.childItem ? props.childItem.text : \"\";\r\n this.parentItemText = props.parentItem ? props.parentItem.text : \"\";\r\n this.setState({\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, props, selectedExist)\r\n // }, () => {\r\n // setTimeout(() => {\r\n // if (this._isMounted) {\r\n // this.setState({\r\n // showLoader: false\r\n // })\r\n // }\r\n // }, 50)\r\n });\r\n };\r\n\r\n handleUserLoginClick = (userPopupType = UserPopupTypes.Unlock) => {\r\n UserLoginButton.handleLoginClick({...this.props, userPopupType});\r\n };\r\n\r\n renderLoadingList = (activePart) => {\r\n if (!activePart.counts) {\r\n return
    \r\n }\r\n // console.log('ctivePart.counts', activePart.counts);\r\n const counts = getActivePartsCounts(activePart, this.props.layoutName);\r\n // console.log('counts', counts);\r\n\r\n if (!counts) {\r\n return
    \r\n }\r\n\r\n const elements = [];\r\n for (let i = 0; i < counts; i++ ) {\r\n elements.push(\r\n
  • \r\n
    \r\n
    \r\n
    \r\n
  • \r\n );\r\n }\r\n\r\n return elements\r\n };\r\n\r\n renderVirtualizedGrid = () => {\r\n\r\n const elements = this.getNavItemsList(true);\r\n\r\n const list = [[]]; // making list for React Virtualized\r\n let columnIndex = 0;\r\n elements.forEach((element, index) => {\r\n if (index % this.props.navigationViewType === 0 && (index !== 0)) {\r\n list.push([]);\r\n columnIndex++;\r\n }\r\n list[columnIndex].push(React.cloneElement(element))\r\n });\r\n // console.log('list', list);\r\n\r\n const menuBody = document.querySelector('.menu-body__content');\r\n const menuList = document.querySelector('.menu-list');\r\n return menuList ? (\r\n {\r\n cellRenderer={({columnIndex, key, rowIndex, style}) => {\r\n // if (isScrolling) {\r\n // return (
    \r\n // {this.emptyStone}\r\n // {this.emptyStone}\r\n //
    );\r\n //\r\n // // (
    {this.emptyStone}
    );\r\n // }\r\n // console.log('rowIndex:', rowIndex);\r\n // console.log('columnIndex:', columnIndex);\r\n // console.log('===================');\r\n // console.log('element', element);\r\n return
    \r\n {list[rowIndex][columnIndex]}\r\n
    \r\n }}>\r\n
    \r\n ) : null\r\n };\r\n\r\n render() {\r\n const activePart = this.props.parentItem ? this.props.parentItem.part : null;\r\n const activeSubPart = this.props.childItem ? this.props.childItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const useWizard = fabricatorSettings &&\r\n (fabricatorSettings.wizardConsumers || (fabricatorSettings.wizardClients && document.kvConfig.isBackend));\r\n\r\n const showNavigationFilters = useWizard && this.props.activeNavigationFilter && activeNavPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n // const showNavigationFiltersSteps = showNavigationFilters && this.props.activeNavigationFilter !== \"inlay_type\";\r\n\r\n return (\r\n
      \r\n {/*{this.state.showLoader ? (*/}\r\n {/*
      */}\r\n {/*) : this.renderItemsList()}*/}\r\n {this.props.allFeaturesReceived\r\n ? showNavigationFilters\r\n ? \r\n : (\r\n \r\n {this.state.additionalFeaturesLoading || this.props.navigationLoadingActive ? this.getLoadingFeatures() : null}\r\n {this.renderVirtualizedGrid()}\r\n \r\n )\r\n : this.renderLoadingList(activeNavPart)\r\n }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n fabricatorData: store.fabricatorState,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n navigationViewType: store.navigationState.navigationViewType,\r\n cartItems: store.cartState.cartItems,\r\n navigationLoadingActive: store.navigationState.navigationLoadingActive,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\nconst mapDispatchToProps = {\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setQtActiveCategory,\r\n toggleBathroomVisualizerOpen\r\n};\r\n\r\nconst MobileNavigationBodyNew = connect(mapStateToProps, mapDispatchToProps)(MobileNavigationBodyNewClass);\r\n\r\n\r\nexport default MobileNavigationBodyNew;\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport Analytics from \"../../../analytics\";\r\nimport {getFeatureGroupName} from \"../../../misc/helpers\";\r\n\r\nclass MobileParentNavigationItems extends Component {\r\n\r\n static propTypes = {\r\n onItemClick: PropTypes.func.isRequired\r\n };\r\n\r\n parentItemClick = (parentItemText) => {\r\n Analytics.sendClickEvent('mobile-category-clicked');\r\n Analytics.sendClickEvent('mobile-category-clicked-' + parentItemText);\r\n this.props.onItemClick(parentItemText)\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const parentItems = layout.designNavigationItems(); // no params, all default\r\n\r\n const {intl, fabricatorData} = this.props;\r\n\r\n return (\r\n
      \r\n {parentItems.map((parentItem, parentItemIndex) => {\r\n const style = {\r\n backgroundImage: `url(${parentItem.part.partThumbnail})`,//TODO\r\n };\r\n if (parentItem.part.partThumbnailSize) {\r\n style.backgroundSize = Math.round(parentItem.part.partThumbnailSize.split(\"%\")[0]/1.5)+\"%\";\r\n style.backgroundPosition = \"top 30% center\";\r\n }\r\n if (parentItem.part.partThumbnail.includes(\"countertop\")\r\n || parentItem.part.partThumbnail.includes(\"toilet\")) {\r\n style.backgroundSize = \"80%\";\r\n }\r\n return (\r\n
    • this.parentItemClick(parentItem.text)}>\r\n
      \r\n
      \r\n \r\n {getFeatureGroupName(parentItem.part, intl, fabricatorData)}\r\n \r\n
      \r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState\r\n }\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, {})(MobileParentNavigationItems)\r\n);\r\n\r\n\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport UserLoginButton from './../ui/userLoginButton';\r\nimport {toggleUserPopup} from \"../../actions/actionFunctions\";\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport {saveQuote} from \"../../api/server-api\";\r\nimport {QuoteRequestType, UserPopupTypes} from \"../visComponents/constants\";\r\nimport {showQuoteSavedNotification} from \"../ui/successNotification\";\r\n\r\nexport class QuoteButton extends Component {\r\n\r\n handleSaveQuote = () => {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const getQuoteEnabled = fabricatorSettings.enableQuote;\r\n if (!UserLoginButton.handleLoginClick({\r\n ...this.props,\r\n saveQuoteAfterLogin: true,\r\n userPopupType: UserPopupTypes.GetQuote\r\n })) {\r\n Analytics.sendClickEvent(getQuoteEnabled ? \"get-quote-button-show-login\" : \"quote-button-show-login\");\r\n } else {\r\n Analytics.sendClickEvent(getQuoteEnabled ? \"get-quote-button\" : \"quote-button\");\r\n this.saveQuoteSubmit();\r\n }\r\n };\r\n\r\n saveQuoteSubmit = () => {\r\n loaderEnable(\"loader.savingQuoteText\");\r\n $(document).trigger(ActionTypes.REMOVE_GREEN_ZONE_ON_CANVAS, () => {\r\n saveQuote({submit: true, yesNoConsultationRequest: false, quoteRequestType: QuoteRequestType.RequestQuote})\r\n .then((response) => {\r\n if (response) {\r\n let responseDataBase = response;\r\n if (response.data) {\r\n responseDataBase = response.data;\r\n }\r\n const responseData = typeof responseDataBase === 'object' ? responseDataBase : JSON.parse(responseDataBase);\r\n console.log('saveQuote response:', responseData);\r\n loaderDisable();\r\n }\r\n showQuoteSavedNotification(\"successNotification.titleQuoteRequested\");\r\n // downloadCanvasImageById(this.props.canvasId);\r\n }).catch((error) => {\r\n console.log('saveQuote error:', error);\r\n loaderDisable();\r\n })\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n})(QuoteButton);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport {toggleUserPopup, changeMessageBoxState} from \"../../actions/actionFunctions\";\r\n\r\n// import QuoteButton from \"./quoteButton\";\r\nimport ScheduleButton from \"./scheduleButton\";\r\nimport {ContentType} from \"../visComponents/constants\";\r\nimport {getShowOtherLayouts} from \"../visComponents/navigation/navUtils\";\r\n\r\nexport class DesignButton extends Component {\r\n\r\n static propTypes = {\r\n quoteEnabled: PropTypes.bool.isRequired,\r\n handleResetButtonClick: PropTypes.func.isRequired,\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 2 && this.props.visualizerTutorialStep === 1) {\r\n this.toggleDesignList();\r\n }\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n designListOpened: false,\r\n };\r\n }\r\n\r\n handleWrapperBlur = (e) => {\r\n if (!e.target.closest('.des-list__item .mobilebutton') && !e.target.closest('.des')) {\r\n this.toggleDesignList();\r\n }\r\n };\r\n\r\n toggleDesignList = () => {\r\n if(!this.state.designListOpened)\r\n Analytics.sendClickEvent('design-list-toggle-opened');\r\n else\r\n Analytics.sendClickEvent('design-list-toggle-closed');\r\n\r\n this.setState({\r\n designListOpened: !this.state.designListOpened\r\n }, () => {\r\n if (this.state.designListOpened) {\r\n document.addEventListener('click', this.handleWrapperBlur);\r\n } else {\r\n document.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n })\r\n };\r\n\r\n handleDesignButtonClick = (analyticsEvent, contentType) => {\r\n Analytics.sendClickEvent(analyticsEvent);\r\n $(document).trigger(ActionTypes.OPEN_MOBILE_NAVIGATION); // open navigation\r\n $(document).trigger(ActionTypes.CHANGE_MOBILE_MENU_CONTENT_TYPE, [contentType]); // set navigation type\r\n this.toggleDesignList(); // close design buttons //\r\n };\r\n\r\n handleDesignResetClick = () => {\r\n Analytics.sendClickEvent(\"design-buttons-reset-button\");\r\n this.toggleDesignList(); // close design buttons\r\n this.props.handleResetButtonClick();\r\n };\r\n\r\n render() {\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const showOtherLayouts = getShowOtherLayouts(fabricatorSettings);\r\n\r\n return (\r\n
    \r\n \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    • \r\n \r\n
    • \r\n {showOtherLayouts ? (\r\n
    • \r\n \r\n
    • \r\n ) : null}\r\n
    • \r\n \r\n
    • \r\n \r\n {/*{this.props.quoteEnabled ? (*/}\r\n {/*
    • */}\r\n {/**/}\r\n {/*
    • */}\r\n {/*) : null}*/}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\nconst mapStateToProps = (store) => ({\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizersLoadedLength: store.serverState.visualizersLoaded.length,\r\n});\r\nexport default connect(mapStateToProps, {\r\n toggleUserPopup,\r\n changeMessageBoxState\r\n})(DesignButton);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport goToMaterialPage from \"./goToMaterialPage\";\r\nimport {showMaterialsTutorial} from \"../../actions/tutorialFunctions\";\r\nimport {toggleBathroomVisualizerOpen} from \"../../actions/actionFunctions\";\r\n\r\nclass MinimizeButton extends React.Component {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.visualizerTutorialStep === 1 && !this.props.visualizerTutorialStep) {\r\n this.backToQuote();\r\n }\r\n }\r\n\r\n backToQuote = () => {\r\n goToMaterialPage('visualizer');\r\n this.props.toggleBathroomVisualizerOpen(false);\r\n if (!this.props.materialsTutorialFinished) {\r\n this.props.showMaterialsTutorial(true);\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n materialsTutorialFinished: store.tutorialState.materialsTutorialFinished,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleBathroomVisualizerOpen,\r\n showMaterialsTutorial\r\n})(MinimizeButton);\r\n","export function downloadCSV(data) {\r\n\r\n let csvRows = []; //https://gist.github.com/yangshun/01b81762e8d30f0d7f8f\r\n for (let i = 0; i < data.length; ++i) {\r\n // for (var j = 0; j < data[i].length; ++j) {\r\n // data[i][j] = '\\\"' + data[i][j] + '\\\"'; // Handle elements that contain commas\r\n // }\r\n csvRows.push(data[i].join(','));\r\n }\r\n\r\n const csvContent = csvRows.join('\\r\\n');\r\n\r\n// The download function takes a CSV string, the filename and mimeType as parameters\r\n// Scroll/look down at the bottom of this snippet to see how download is called\r\n const download = function(content) {\r\n const a = document.createElement('a');\r\n const fileName = 'download.csv';\r\n const blobConfig = {\r\n encoding: \"UTF-8\",\r\n type: \"text/plain;charset=UTF-8\" // 'application/octet-stream'; // 'text/csv;encoding:utf-8'\r\n };\r\n if (navigator.msSaveBlob) { // IE10\r\n navigator.msSaveBlob(new Blob([content], blobConfig), fileName);\r\n } else if (URL && 'download' in a) { //html5 A[download]\r\n a.href = URL.createObjectURL(new Blob([content], blobConfig));\r\n a.setAttribute('download', fileName);\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n } else {\r\n location.href = 'data:application/octet-stream,' + encodeURIComponent(content); // only this mime type is supported\r\n }\r\n };\r\n\r\n download(csvContent);\r\n}\r\n","import React from \"react\";\r\n\r\nconst DemoPoint = (props) => (\r\n
    \r\n \r\n \r\n \r\n
    \r\n);\r\n\r\nDemoPoint.displayName = \"DemoPoint\";\r\nexport default DemoPoint","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\n\r\n\r\nconst ExclamationMarkIcon = (props) => {\r\n\r\n const {activeTheme} = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = store => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n activeTheme\r\n }\r\n};\r\n\r\nexport default connect(mapStateToProps)(ExclamationMarkIcon)\r\n","import uniq from \"lodash/uniq\";\r\n\r\nimport Config from \"../config\";\r\nimport store from \"../store\";\r\nimport {setCustomAddedDiscounts, setDiscountSections, setFinancePercentage} from \"../actions/priceWorksheetActions\";\r\nimport {getBvFeatures, getDiscounts} from \"./server-api\";\r\nimport {getArrayOfIdsFromBvState} from \"../misc/helpers\";\r\nimport {setActiveQuoteIndex, setQuotes} from \"../actions/roomsFunctions\";\r\nimport {objectWithoutProperties} from \"../misc/helpers\";\r\nimport {createFakeLayout, getCurrentLayout, getVisualizerTypeFromBvScene} from \"../bvcomponents/appLayout\";\r\nimport {\r\n changeUserInfo,\r\n setFirstLoadedPreset, setStonePricing,\r\n setUserPhoneNumberValidated,\r\n toggleUserPopup\r\n} from \"../actions/actionFunctions\";\r\nimport {getImagePromiseFromLayout} from \"../misc/getCanvasImageFromLayout\";\r\nimport Misc from \"../misc/misc\";\r\nimport {setAmazonImageUrl} from \"../actions/serverFunctions\";\r\nimport {restorePaymentInfo} from \"../actions/paymentFunctions\";\r\nimport Analytics from \"../analytics\";\r\nimport {restoreAllWizardSelectedValues, setWizardList} from \"../actions/wizardFunctions\";\r\nimport {getQuoteInfo} from \"../misc/quotesFunctions\";\r\nimport JsonApi from \"./jsonApi\";\r\nimport {getParsedWizardList} from \"../bvcomponents/look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\nimport {parseMarkUp} from \"../misc/priceFunctions\";\r\nimport {setMarkUpLogic} from \"../actions/shoppingCartFunctions\";\r\nimport {DISCOUNT_MAIN_TYPES} from \"../bvcomponents/priceWorksheet/discounstInterface\";\r\n\r\n/**\r\n * Sets noteText for loaded features\r\n * @param notesFeatures {Array.}\r\n * @param layout\r\n */\r\nconst setNotesToFeatures = (notesFeatures = [], layout) => {\r\n const parents = layout.getFeatures(true); // we need other groups too\r\n notesFeatures.forEach((notesFeature) => {\r\n parents.forEach(parent => {\r\n const subParts = parent.subParts();\r\n subParts.forEach(subPart => {\r\n Object.keys(subPart.part.featuresList).forEach(layoutName => {\r\n const featureFound = subPart.part.featuresList[layoutName].find(feature => {\r\n return feature.dbFeature.id === notesFeature.id\r\n })\r\n if (featureFound) {\r\n featureFound.notesList[notesFeature.currentQuote] = notesFeature.noteText;\r\n // console.log(\"featureFound\", featureFound);\r\n }\r\n })\r\n });\r\n })\r\n })\r\n};\r\n\r\n\r\n/**\r\n * checks if we need to do multiple features requests\r\n * @param records {Array<{}>}\r\n * @param fabricatorState {object}\r\n * @param serverState {object}\r\n * @returns boolean\r\n */\r\nconst hasMultipleVisualizers = (records, fabricatorState, serverState) => {\r\n console.log(\"serverState.initialVisualizerType\", serverState.initialVisualizerType);\r\n return fabricatorState.settings.allowVisualizerSwitching\r\n && records.some(room => {\r\n return room.data && room.data.visualizerType && (room.data.visualizerType !== serverState.initialVisualizerType)\r\n })\r\n}\r\n\r\n/**\r\n * when the new customer is created - the system creates a job for him with only one userState property\r\n * @param jobResponse {object}\r\n * @param bvState {object}\r\n * @returns {boolean}\r\n */\r\nexport const isNewlyCreatedJob = (jobResponse, bvState) => {\r\n\r\n if (jobResponse && !bvState) {\r\n if (Array.isArray(jobResponse.records) && jobResponse.records.length) {\r\n const records = jobResponse.records.filter(record => record && record.data);\r\n if (records.length === 1) {\r\n bvState = records[0].data;\r\n }\r\n } else { // whoa, nothing there, so it's probably a brand new job, let's load default preset\r\n return true\r\n }\r\n }\r\n\r\n return bvState && (Object.keys(bvState).length === 1) && bvState.userState\r\n}\r\n\r\n/**\r\n * loads features and notes and also stone pricings\r\n * @param records {Array<{}>}\r\n * @param activeQuoteIndex {number}\r\n * @returns {Promise} loaded features\r\n */\r\nconst loadFeaturesAndNotesForMultipleLayouts = async (records, activeQuoteIndex) => {\r\n let featuresToReturn = [];\r\n\r\n const differentVisualizers = {};\r\n records.forEach((record, recordIndex) => {\r\n if (!differentVisualizers[record.data.visualizerType]) {\r\n differentVisualizers[record.data.visualizerType] = {\r\n arrayOfFeaturesIds: [],\r\n notesFeatures: [],\r\n }\r\n }\r\n const currentObject = differentVisualizers[record.data.visualizerType];\r\n record.features.forEach((feature) => {\r\n if (feature.fabricatorFeature_id) {\r\n if (!currentObject.arrayOfFeaturesIds.includes(feature.fabricatorFeature_id)) {\r\n currentObject.arrayOfFeaturesIds.push(feature.fabricatorFeature_id);\r\n }\r\n if (feature.noteText) {\r\n currentObject.notesFeatures.push({\r\n id: feature.fabricatorFeature_id,\r\n noteText: feature.noteText,\r\n currentQuote: recordIndex\r\n })\r\n }\r\n }\r\n });\r\n currentObject.arrayOfFeaturesIds = uniq([\r\n ...currentObject.arrayOfFeaturesIds, // here we add all cartItems features\r\n ...getArrayOfIdsFromBvState(record.data) // and then we add all active features from the quotes\r\n ]);\r\n });\r\n for (const visualizerType of Object.keys(differentVisualizers)) {\r\n const currentObject = differentVisualizers[visualizerType];\r\n const forLayout = getCurrentLayout(visualizerType);\r\n const featuresFromJob = await getBvFeatures(currentObject.arrayOfFeaturesIds, null, false, visualizerType);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const nextBvState = records[activeQuoteIndex] ? records[activeQuoteIndex].data : null;\r\n forLayout.loadNewFeatures(featuresFromJob.data, null, true, nextBvState);\r\n if (visualizerType === document.kvConfig.visualizerType) {\r\n featuresToReturn = featuresFromJob.data;\r\n }\r\n }\r\n setNotesToFeatures(currentObject.notesFeatures, forLayout) // here we set notes\r\n\r\n // we also need stone pricing!! to be able to show correct price\r\n if (visualizerType !== document.kvConfig.visualizerType) { // skip current, it was already downloaded\r\n const mainResponse = await JsonApi.getBathroomVisualizerData(30, visualizerType);\r\n console.log(\"mainResponse for stonePricing\", mainResponse);\r\n if (mainResponse && mainResponse.data && mainResponse.data.stonePricing) {\r\n store.dispatch(setStonePricing(mainResponse.data.stonePricing)); // we need to set stone pricing for cart features\r\n }\r\n if (mainResponse && mainResponse.data && (mainResponse.data.wizardData || mainResponse.data.wizardDataV2)) {\r\n const wizardList = getParsedWizardList(mainResponse.data, false, visualizerType);\r\n store.dispatch(setWizardList(wizardList));\r\n }\r\n }\r\n }\r\n\r\n return featuresToReturn\r\n}\r\n\r\nconst getBvStateProperty = (responseData, activeQuoteIndex, property = \"\") => {\r\n if (!responseData.records || !Array.isArray(responseData.records) || !responseData.records.length) {\r\n return null\r\n }\r\n return responseData.records[0].data[property] ||\r\n responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data\r\n ? responseData.records[activeQuoteIndex].data[property]\r\n : null;\r\n}\r\n\r\nexport const parseJobIdResponse = async (responseData, isDesignOnly = false) => {\r\n const {fabricatorState, serverState} = store.getState();\r\n const layout = getCurrentLayout();\r\n if (Config.isDevMode()) {\r\n console.log(`getJobId ${document.kvConfig.jobId}:`, responseData);\r\n }\r\n let activeQuoteIndex = 0;\r\n if (Array.isArray(responseData.records) && responseData.records.length) {\r\n responseData.records = responseData.records.filter(record => record && record.data);\r\n const firstRecord = responseData.records[0];\r\n if (firstRecord) {\r\n activeQuoteIndex = firstRecord.data.activeQuoteIndex || 0;\r\n let loadedFeaturesFromJob = [];\r\n if (hasMultipleVisualizers(responseData.records, fabricatorState, serverState)) {\r\n loadedFeaturesFromJob = await loadFeaturesAndNotesForMultipleLayouts(responseData.records, activeQuoteIndex);\r\n } else {\r\n let notesFeatures = [];\r\n let arrayOfFeaturesIds = [];\r\n responseData.records.forEach((rec, recIndex) => {\r\n if (Array.isArray(rec.features) && rec.features.length) {\r\n rec.features.forEach((feature) => {\r\n if (feature.fabricatorFeature_id) {\r\n arrayOfFeaturesIds.push(feature.fabricatorFeature_id)\r\n if (feature.noteText) {\r\n notesFeatures.push({\r\n id: feature.fabricatorFeature_id,\r\n noteText: feature.noteText,\r\n currentQuote: recIndex\r\n })\r\n }\r\n }\r\n })\r\n }\r\n });\r\n responseData.records.forEach((rec) => {\r\n arrayOfFeaturesIds = uniq([\r\n ...arrayOfFeaturesIds, // here we add all cartItems features\r\n ...getArrayOfIdsFromBvState(rec.data) // and then we add all active features from the quotes\r\n ])\r\n })\r\n const featuresFromJob = await getBvFeatures(arrayOfFeaturesIds);\r\n if (featuresFromJob && featuresFromJob.data) {\r\n loadedFeaturesFromJob = featuresFromJob.data;\r\n // console.log(\"featuresFromJob\", featuresFromJob.data);\r\n const nextBvState = responseData.records[activeQuoteIndex] ? responseData.records[activeQuoteIndex].data : null;\r\n layout.loadNewFeatures(featuresFromJob.data, null, true, nextBvState);\r\n }\r\n setNotesToFeatures(notesFeatures, layout) // here we set notes\r\n }\r\n\r\n // restore wizard before the cart! to make sure cart is restored with proper display logic items that need wizard selections\r\n const allWizardValues = getBvStateProperty(responseData, activeQuoteIndex, \"allWizardsValues\");\r\n if (allWizardValues) {\r\n await store.dispatch(restoreAllWizardSelectedValues([...allWizardValues]));\r\n delete firstRecord.data.allWizardsValues; // we don't need it anymore, prevent overwriting\r\n if (responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data && responseData.records[activeQuoteIndex].data.allWizardsValues) {\r\n delete responseData.records[activeQuoteIndex].data.allWizardsValues\r\n }\r\n }\r\n\r\n if (responseData.records[activeQuoteIndex] && responseData.records[activeQuoteIndex].data) { // just in case\r\n const restoreCartFeatures = isDesignOnly ? false : loadedFeaturesFromJob\r\n const nextBvState = responseData.records[activeQuoteIndex].data;\r\n if (isNewlyCreatedJob(null, nextBvState)) {\r\n if (restoreCartFeatures) {\r\n layout.setCartStateAndUserStateFromBvState(nextBvState);\r\n }\r\n } else {\r\n layout.setActiveFeaturesFromObject(\r\n responseData.records[activeQuoteIndex].data,\r\n restoreCartFeatures,\r\n false,\r\n true,\r\n true,\r\n false\r\n ); // here we set bvState! and restore cart!!\r\n }\r\n }\r\n if (firstRecord.imageUrl) {\r\n store.dispatch(setAmazonImageUrl(firstRecord.imageUrl));\r\n }\r\n if (firstRecord.data.id) {\r\n store.dispatch(setFirstLoadedPreset(firstRecord.data.id));\r\n }\r\n }\r\n\r\n let newQuotes = [];\r\n for (const [recordIndex, record] of responseData.records.entries()) {\r\n //1) detect visualizer layout\r\n const visType = getVisualizerTypeFromBvScene(record.data, record);\r\n\r\n record.room = visType; // this might change coming incorrect visualizer!\r\n\r\n let image = \"\";\r\n if (responseData.records.length === 1 || (recordIndex === activeQuoteIndex)) {\r\n image = await getImagePromiseFromLayout(layout, null, 0.7, true);\r\n } else {\r\n let fakeLayout = createFakeLayout(getCurrentLayout(visType));\r\n let bvState = record.data;\r\n if (responseData.records.length === 1 && Object.keys(bvState).length <= 2) { // new created quote\r\n bvState = layout.getActiveFeaturesAsObject(false, false, true);\r\n }\r\n //2) set visualizer layout features\r\n await fakeLayout.setItemsFromBvState(bvState, false, null, true);\r\n //3) create quote image\r\n image = await getImagePromiseFromLayout(fakeLayout, null, 0.7, true);\r\n }\r\n\r\n //4) set quote other info\r\n let quoteObject = await getQuoteInfo(recordIndex, null, false, \"\", image);\r\n\r\n quoteObject.quoteId = record.id;\r\n quoteObject.data = objectWithoutProperties(record.data, [\"installations\", \"cartState\", \"userState\", \"allWizardsValues\"]);\r\n quoteObject.layoutType = record.data.layout_type;\r\n quoteObject.room = record.room;\r\n quoteObject.sqFtCalcData = record.sqFtCalcData;\r\n quoteObject.bvImage = image;\r\n newQuotes.push(quoteObject);\r\n }\r\n\r\n if (newQuotes.length) {\r\n store.dispatch(setQuotes([...newQuotes]));\r\n if (newQuotes[activeQuoteIndex]) {\r\n store.dispatch(setActiveQuoteIndex(activeQuoteIndex));\r\n }\r\n }\r\n }\r\n if (Array.isArray(responseData.discountSections) && responseData.discountSections.length && !isDesignOnly) {\r\n await getDiscounts();\r\n let allDiscountSections = store.getState().priceWorksheetState.discountSections;\r\n // console.log(\"allDiscountSections\", allDiscountSections);\r\n // console.log(\"responseData.discountSections\", responseData.discountSections);\r\n const priceWorkSheetLogic = getBvStateProperty(responseData, activeQuoteIndex, \"priceWorkSheetLogic\");\r\n if (priceWorkSheetLogic) {\r\n if (Array.isArray(priceWorkSheetLogic.customAddedDiscounts) && priceWorkSheetLogic.customAddedDiscounts.length) {\r\n store.dispatch(setCustomAddedDiscounts(priceWorkSheetLogic.customAddedDiscounts));\r\n }\r\n if (priceWorkSheetLogic.financePercentage) {\r\n store.dispatch(setFinancePercentage(priceWorkSheetLogic.financePercentage));\r\n }\r\n if (priceWorkSheetLogic.selectedDiscounts) {\r\n allDiscountSections = allDiscountSections.map((discountSection) => {\r\n discountSection.discounts = discountSection.discounts.map(discount => {\r\n const sameDiscountSaved = priceWorkSheetLogic.selectedDiscounts.find(dis => {\r\n return (discount.uuId === dis.uuId) || (discount.id === dis.id && (discountSection.id === dis.categoryId))\r\n });\r\n if (sameDiscountSaved) {\r\n discount.selected = true;\r\n if (discount.isRidged) {\r\n discount.name = sameDiscountSaved.name;\r\n discount.amount = sameDiscountSaved.amount;\r\n } else if (sameDiscountSaved.discountType === DISCOUNT_MAIN_TYPES.deposit) {\r\n discount.amount = sameDiscountSaved.amount;\r\n discount.type = sameDiscountSaved.type; // if it was percentage - we convert it to price\r\n } else if (sameDiscountSaved.discountType === DISCOUNT_MAIN_TYPES.finance) {\r\n discount.financeOptions = sameDiscountSaved.financeOptions\r\n }\r\n }\r\n return discount\r\n })\r\n return discountSection\r\n })\r\n }\r\n } else {\r\n responseData.discountSections.forEach((selectedDiscountSection) => {\r\n let discountSectionFound = false;\r\n allDiscountSections = allDiscountSections.map((discountSection) => {\r\n if (selectedDiscountSection.id === discountSection.id || selectedDiscountSection.name === discountSection.name) {\r\n selectedDiscountSection.discounts.forEach(selectedDiscount => {\r\n let discountFound = false;\r\n discountSection.discounts.map(discount => {\r\n if (selectedDiscount.id === discount.id\r\n || [\"name\", \"amount\"].every(property => selectedDiscount[property] === discount[property])\r\n || [\"isRidged\", \"mode\", \"order\", \"type\"].every(property => selectedDiscount[property] === discount[property])) {\r\n discount.selected = true;\r\n discountFound = true;\r\n if (discount.isRidged) {\r\n discount.name = selectedDiscount.name;\r\n discount.amount = selectedDiscount.amount;\r\n }\r\n }\r\n return discount\r\n });\r\n if (!discountFound) {\r\n console.log(\"No discount found! Pls call administrator\"); // haha funny. this happens when discounts are changed, and old quotes opened\r\n selectedDiscount.id = Misc.getRandomInt(0, 9999999999);\r\n selectedDiscount.oldDeleted = true;\r\n discountSection.discounts.push(selectedDiscount)\r\n }\r\n })\r\n discountSectionFound = true;\r\n }\r\n return discountSection\r\n });\r\n if (!discountSectionFound) {\r\n selectedDiscountSection.discounts.forEach(disc => {\r\n disc.oldDeleted = true;\r\n })\r\n allDiscountSections.push(selectedDiscountSection)\r\n }\r\n })\r\n }\r\n store.dispatch(setDiscountSections(allDiscountSections));\r\n }\r\n if (responseData.user && responseData.user.values && !isDesignOnly) { // update user state\r\n const savedCountry = responseData.records\r\n && responseData.records[activeQuoteIndex]\r\n && responseData.records[activeQuoteIndex].data\r\n && responseData.records[activeQuoteIndex].data.userState\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo.shipping\r\n && responseData.records[activeQuoteIndex].data.userState.userInfo.shipping.country\r\n ? responseData.records[activeQuoteIndex].data.userState.userInfo.shipping.country\r\n : responseData.user.shippingAddress ? responseData.user.shippingAddress.country : \"\";\r\n const newUserInfo = Misc.parseUserResponse(responseData.user, savedCountry);\r\n if (Config.isDevMode()) {\r\n console.log(\"parseResponse newUserInfo\", newUserInfo);\r\n }\r\n store.dispatch(changeUserInfo(newUserInfo));\r\n store.dispatch(setUserPhoneNumberValidated(true));\r\n if (responseData.user.encodedUserId) {\r\n Analytics.setUserId(responseData.user.encodedUserId);\r\n store.dispatch(toggleUserPopup({\r\n encodedUserId: responseData.user.encodedUserId,\r\n }));\r\n }\r\n }\r\n if (responseData.user && (responseData.user.billingAddress || responseData.user.shippingAddress)) { // update user state\r\n store.dispatch(restorePaymentInfo(Misc.parseShippingAndBillingResponse(responseData.user)));\r\n }\r\n if (responseData.jobMarkUp) {// restore mark up\r\n const globalMarkUp = parseMarkUp(responseData.jobMarkUp);\r\n if (globalMarkUp) {\r\n store.dispatch(setMarkUpLogic(globalMarkUp)) // override cartState, because it was changed in the job board\r\n }\r\n }\r\n}\r\n","import uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {Part} from \"../part\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'kitchen_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Flooring';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this)\r\n }\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.isStoneFeature = true;\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const navSubItems = this.getFeaturesBySearchText(this.getFilteredFeaturesByFilters(filters), searchText)\r\n .map(_ => new DesignNavigationItem(_.featureName, _)); // 1) filter them by filters 2) filter them by search\r\n return uniqBy(navSubItems, (navItem) => navItem.part.dbFeature.sharedFeatureName)\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Floor;\r\n }\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport Baseboard from \"../subparts/globals/baseboard\";\r\n// import CeilingHighlights from \"../subparts/globals/ceilingHighlights\";\r\nimport CeilingLights from \"../subparts/globals/ceilingLights\";\r\nimport GlobalShadow from \"../subparts/globals/globalShadow\";\r\nimport Decor1 from \"../subparts/globals/decor1\";\r\nimport Decor2 from \"../subparts/globals/decor2\";\r\nimport Decor3 from \"../subparts/globals/decor3\";\r\n\r\nexport default class Globals extends Part {\r\n static id = 'Globals';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Globals';\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.baseboard = null;\r\n this.ceilingHighlights = null;\r\n this.ceilingLights = null;\r\n this.globalShadow = null;\r\n this.decor1 = null;\r\n this.decor2 = null;\r\n this.decor3 = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Baseboard\":\r\n relatedItemName = \"baseboard\";\r\n RelatedItemClass = Baseboard;\r\n break;\r\n // case \"Ceiling Highlight\":\r\n // relatedItemName = \"ceilingHighlights\";\r\n // RelatedItemClass = CeilingHighlights;\r\n // break;\r\n case \"Ceiling Lights\":\r\n relatedItemName = \"ceilingLights\";\r\n RelatedItemClass = CeilingLights;\r\n break;\r\n case \"Global Shadow\":\r\n relatedItemName = \"globalShadow\";\r\n RelatedItemClass = GlobalShadow;\r\n break;\r\n case \"Decor\":\r\n if (dbFeature.displayName.includes(\"Part2\")) {\r\n relatedItemName = \"decor2\";\r\n RelatedItemClass = Decor2;\r\n } else if (dbFeature.displayName.includes(\"Island\")) {\r\n relatedItemName = \"decor3\";\r\n RelatedItemClass = Decor3;\r\n } else {\r\n relatedItemName = \"decor1\";\r\n RelatedItemClass = Decor1;\r\n }\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Globals', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Baseboard extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'baseboard';\r\n this.partName = 'Baseboard';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Baseboard());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Baseboard;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CeilingLights extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_lights';\r\n this.partName = 'Ceiling Lights';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CeilingLights());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.CeilingLights;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class GlobalShadow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'global_shadow';\r\n this.partName = 'Global Shadow';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new GlobalShadow());\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.GlobalShadow;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Decor1 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_1';\r\n this.partName = 'Decor1';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor1());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor1;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CountertopGroup from \"../../parts/countertopGroup\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\n\r\nexport default class Decor2 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_2';\r\n this.partName = 'Decor2';\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Sink\"]) {\r\n dbFeature.metaData[\"Sink\"] = [\"All\"]\r\n }\r\n return super.load_(dbFeature, new Decor2());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n const bottomCabinet = cabinetParent && cabinetParent.bottomCabinet;\r\n if (bottomCabinet && (bottomCabinet.disabled || !bottomCabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const countertopGroup = this.getParent().layout.parts[CountertopGroup.id];\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n },{\r\n propName: 'Sink',\r\n propValue: (countertopGroup && countertopGroup.sink && countertopGroup.sink.disabled) ? 'None' : 'All'\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor2;\r\n }\r\n }\r\n}","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CenterIsland from \"../../parts/centerIsland\";\r\n\r\nexport default class Decor3 extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'decor_3';\r\n this.partName = 'Decor3';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor3());\r\n }\r\n\r\n setLayers(layout) {\r\n const centerIslandParent = this.getParent().layout.parts[CenterIsland.id];\r\n const cabinet = centerIslandParent.cabinet;\r\n\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault(layout);\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n return [{\r\n propName: 'RoomLayout',\r\n propValue: this.getParent().layout.getCurrentLayoutAbbreviation()\r\n }];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Decor3;\r\n }\r\n }\r\n}","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nconst alreadyExistingGroups = [\"Edge Profile\", \"Faucet\", \"Sink\", \"Stovetop\", \"Range\"];\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n if (alreadyExistingGroups.includes(dbFeature.groupName)) { // they should be loaded in their groups!\r\n return false\r\n }\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\nimport CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {CABINET_WIZARD_BUTTONS, COUNTERTOP_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Countertop\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"edge_profile\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"backsplash\")) {\r\n this.triggerOpenNavigationMenu(\"Backsplash\", \"Walls\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Walls\") {\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"countertop\")) {\r\n this.triggerOpenNavigationMenu(\"Countertop\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"edge_profile\")) {\r\n this.triggerOpenNavigationMenu(\"Edge Profile\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"CenterIsland\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = activeSubPart\r\n && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && this.props.activeNavigationFilter !== \"inlay_type\"\r\n && activeSubPart.canUseNavigationFilter && activeSubPart.canUseNavigationFilter() ;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\nimport CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP, COUNTERTOP_WIZARD_BUTTONS} from \"../core/constants\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CabinetSwitchers from \"./cabinetSwitchers\";\r\nimport CountertopSwitchers from \"./countertopSwitchers\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.activeNavigationFilter !== this.props.activeNavigationFilter\r\n && COUNTERTOP_WIZARD_BUTTONS.some(btn => btn.buttonId === nextProps.activeNavigationFilter)) {\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Countertop\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"edge_profile\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[4].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"backsplash\")) {\r\n this.triggerOpenNavigationMenu(\"Backsplash\", \"Walls\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"Walls\") {\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"countertop\")) {\r\n this.triggerOpenNavigationMenu(\"Countertop\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n if (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== \"edge_profile\")) {\r\n this.triggerOpenNavigationMenu(\"Edge Profile\", \"Countertop\", nextProps.activeNavigationFilter);\r\n }\r\n break;\r\n }\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.part.partName === \"CenterIsland\") {\r\n const subParts = this.state.parentNavigationItem.part.subParts();\r\n let subPart = null;\r\n switch (nextProps.activeNavigationFilter) {\r\n case COUNTERTOP_WIZARD_BUTTONS[0].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[1].buttonId:\r\n case COUNTERTOP_WIZARD_BUTTONS[2].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_countertop\");\r\n break;\r\n case COUNTERTOP_WIZARD_BUTTONS[3].buttonId:\r\n subPart = subParts.find(sPart => sPart.part.partId === \"center_island_edge\");\r\n break;\r\n }\r\n if (subPart && (!this.state.childNavigationItem\r\n || (this.state.childNavigationItem && this.state.childNavigationItem.part.partId !== subPart.part.partId))) {\r\n this.handleSubPartClick(subPart, nextProps.activeNavigationFilter)\r\n }\r\n }\r\n }\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n let hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer, canvas);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCabinet = activeSubPart && CABINET_GROUP.includes(activeSubPart.partId);\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (!currentDecorFeatureGroup // we skipped all decors, but didn't find the same\r\n || dbFeature.sharedFeatureName === this[\"decor\" + i].decorName // decors are matching by name\r\n || (dbFeature.metaData[\"MountPosition\"] && this[\"decor\" + i].features.some(feature => { // decors are matching by name\r\n return feature.metaData[\"MountPosition\"] && feature.matchesMetaForCondition(\"MountPosition\", dbFeature.metaData[\"MountPosition\"])\r\n }))) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount, dbFeature);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Attachment());\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n // console.log(\"activeFeatures\", activeFeatures);\r\n const matchingFeatures = this.features.filter(feature => {\r\n if (!feature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return false\r\n }\r\n return feature.metaData[\"MatchingFeature\"] && activeFeatures.some(cartItem => {\r\n if (cartItem.partId === this.partId) { // remove attachment active feature\r\n return false\r\n }\r\n return !cartItem.featureGroup.disabled && cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n && isEqual(feature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(feature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n })\r\n })\r\n // console.log(\"matchingFeatures\", matchingFeatures);\r\n return matchingFeatures;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n\r\n const getZIndex = (feature, partId = null) => {\r\n return feature.metaData[\"ZSorting\"] ? feature.metaData[\"ZSorting\"] * 1000 : zIndexes[partId || this.partId];\r\n }\r\n\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = getZIndex(activeFeaturePart, this.additionalPartPartId) - 1;\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport CenterIsland from \"../../parts/centerIsland\";\r\n\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount, dbFeature) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n if (dbFeature && dbFeature.metaData && dbFeature.metaData[\"CIShape\"]) {\r\n this.isCenterIslandDecor = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n if (this.isCenterIslandDecor) {\r\n const centerIslandParent = this.getParent().layout.parts[CenterIsland.id];\r\n if (centerIslandParent && centerIslandParent.cabinet) {\r\n if (centerIslandParent.cabinet.disabled) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: \"noCI\"\r\n })\r\n } else if (centerIslandParent.cabinet.activeFeature && centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"]) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"][0]\r\n })\r\n }\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Cabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.dbName = 'Center Island Cabinet';\r\n this.partId = 'center_island_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_cabinet\";\r\n this.canBeDisabled = true;\r\n this.allWallsCanBeApplied = true;\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n centerIslandParent.relatedItems.forEach(featureGroup => {\r\n featureGroup.disabled = this.disabled;\r\n })\r\n const ponyWall = centerIslandParent.layout && centerIslandParent.layout.parts && centerIslandParent.layout.parts.Walls\r\n ? centerIslandParent.layout.parts.Walls.ponyWall\r\n : null;\r\n if (ponyWall) {\r\n ponyWall.disabled = this.disabled;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Faucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_faucet';\r\n this.partName = 'Faucet';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_faucet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.s3Bindings && dbFeature.metaData && (!dbFeature.metaData[\"Placement\"]\r\n || !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island))) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Faucet());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const relatedSink = centerIslandParent.sink;\r\n if (relatedSink) {\r\n relatedSink.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const sink = this.getParent().sink;\r\n // if (sink && sink.activeFeature) {\r\n // return [{\r\n // propName: \"FaucetPlacement\",\r\n // propValue: sink.activeFeature.metaData[\"FaucetPlacement\"] || \"Moved\"\r\n // }]\r\n // }\r\n // return [];\r\n // }\r\n\r\n tryToSetTheSameFeature(filteredFeatures = [], partName = \"\") {\r\n if (this.activeFeature && this.activeFeature.partName) {\r\n const splittedName = (partName || this.activeFeature.partName).split(\" M\")[0];\r\n this.activeFeature = filteredFeatures.find(feature => {\r\n if (feature.partName) {\r\n const splittedCurrentName = feature.partName.split(\" M\")[0];\r\n return splittedCurrentName === splittedName\r\n }\r\n return false\r\n });\r\n // console.log('AF', filteredFeatures, this.activeFeature);\r\n if (this.activeFeature) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {PLACEMENTS} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_sink\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n // dbFeature.metaData[\"RoomLayout\"] = (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].filter(roomLayout => roomLayout.includes(\"I\"))) || [];\r\n if (dbFeature.s3Bindings && dbFeature.metaData && (!dbFeature.metaData[\"Placement\"]\r\n || !dbFeature.metaData[\"Placement\"].includes(PLACEMENTS.Island))) {\r\n return false\r\n }\r\n return super.load_(dbFeature, new Sink());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n const relatedFaucet = centerIslandParent.faucet;\r\n if (relatedFaucet) {\r\n relatedFaucet.disabled = this.disabled;\r\n }\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && !stovetop.disabled) {\r\n stovetop.disabled = true;\r\n }\r\n const range = centerIslandParent.range;\r\n if (range && !this.disabled && !range.disabled) {\r\n range.disabled = true;\r\n }\r\n }\r\n}\r\n","import EdgeCommon from \"../edgeCommon\";\r\n\r\nexport default class Edge extends EdgeCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_edge';\r\n this.partName = 'Edge';\r\n this.dbName = 'Edge Profile';\r\n // this.isStoneFeature = true;\r\n this.customClassName = \"edge\";\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_edge\";\r\n this.hasNoVisualizerLayers = true;\r\n }\r\n\r\n}\r\n","import CountertopCommon from \"../countertopCommon\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\n\r\nexport default class Countertop extends CountertopCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'center_island_countertop';\r\n this.dbName = 'Center Island Countertop';\r\n this.partName = 'Island Countertop';\r\n this.homePageTitle = 'Center Island Countertop';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_countertop\";\r\n this.isStoneFeature = true;\r\n this.toggleSwitchedOffByUser = false; // is used for returning toggle back when feature is found\r\n this.hasAdditionalParts = false;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet.disabled) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n this.fixEdgeMeta(dbFeature);\r\n if (dbFeature.metaData[\"RoomLayout\"] && dbFeature.metaData[\"RoomLayout\"].includes(\"6\")) {\r\n if (!dbFeature.metaData[\"MountType\"]) {\r\n dbFeature.metaData[\"MountType\"] = [\"0\"]\r\n }\r\n }\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new Countertop(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new Countertop())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const cabinet = this.getParent().cabinet;\r\n if (cabinet && (cabinet.disabled || !cabinet.featureGroupEnabled)) {\r\n super.hideLayers();\r\n return\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const centerIslandParent = this.getParent();\r\n if (centerIslandParent.layout.type === 6) {\r\n if (centerIslandParent.sink && centerIslandParent.sink.activeFeature) {\r\n conditions.push({\r\n propName: \"MountType\",\r\n propValue: centerIslandParent.sink.activeFeature.metaData && Array.isArray(centerIslandParent.sink.activeFeature.metaData[\"MountType\"])\r\n && centerIslandParent.sink.activeFeature.metaData[\"MountType\"].includes(\"ST\") ? \"ST\" : \"0\"\r\n })\r\n }\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n canUseNavigationFilterSteps() {\r\n const parent = this.getParent();\r\n return parent.edge // display filters only if edges exist\r\n }\r\n\r\n canUseNavigationFilter() {\r\n return true //TODO[Artem] add here features filters check\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class IslandHood extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_hood';\r\n this.partName = 'Island Hood';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_hood\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new IslandHood());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n } else {\r\n const stovetop = centerIslandParent.stovetop;\r\n if (stovetop && !this.disabled && stovetop.disabled) {\r\n stovetop.disabled = false;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Stovetop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_stovetop';\r\n this.partName = 'Stovetop';\r\n this.dbName = 'Island Stove'; // temporarily\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_stovetop\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Stovetop());\r\n }\r\n\r\n disabledClick() {\r\n const centerIslandParent = this.getParent();\r\n if (!this.disabled && centerIslandParent.cabinet) {\r\n centerIslandParent.cabinet.disabled = false;\r\n centerIslandParent.cabinet.disabledClick();\r\n } else {\r\n const islandHood = centerIslandParent.islandHood;\r\n if (islandHood) {\r\n islandHood.disabled = this.disabled;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Pendants extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_pendants';\r\n this.partName = 'Pendants';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_pendants\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Pendants());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightIsland extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_island_right_island';\r\n this.partName = 'Right Island';\r\n this.translateId = \"visualizer.kitchen.center_island.center_island_right_island\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightIsland());\r\n }\r\n}\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nconst alreadyExistingGroups = [\"Edge Profile\", \"Faucet\", \"Sink\"];\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n if (alreadyExistingGroups.includes(dbFeature.groupName)) { // they should be loaded in their groups!\r\n return false\r\n }\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n this.relatedGroupNames = [\"BG\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport CenterIsland from \"./centerIsland\";\r\nimport {METADATA} from \"../constants\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n this.relatedGroupNames = [\"Floor\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"CIShape\"]) {\r\n // if floor has no metadata CIShape and island has no metadata CIShape - just show without the meta\r\n dbFeature.metaData[\"CIShape\"] = METADATA.FloorWithIsland\r\n }\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const layout = this.getParent().layout;\r\n const centerIslandParent = layout.parts[CenterIsland.id];\r\n if (centerIslandParent && centerIslandParent.cabinet && (layout.type !== 4)) {\r\n if (centerIslandParent.cabinet.disabled) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: \"noCI\"\r\n })\r\n } else if (centerIslandParent.cabinet.activeFeature && centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"]) {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: centerIslandParent.cabinet.activeFeature.metaData[\"CIShape\"][0]\r\n })\r\n } else {\r\n conditions.push({\r\n propName: \"CIShape\",\r\n propValue: METADATA.FloorWithIsland\r\n })\r\n }\r\n }\r\n // console.log(\"floor conditions\", conditions);\r\n return conditions\r\n }\r\n\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport Backsplash from \"../subparts/walls/backsplash\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport PonyWall from \"../subparts/walls/ponyWall\";\r\nimport SplitWall from \"../subparts/walls/splitWall\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = wallsThumbnail;\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n this.splitWall = null;\r\n this.relatedGroupNames = [\"Backsplash\", \"Left Wall\", \"Right Wall\", \"Center Wall\", \"Front Wall\", \"Pony Wall\",\r\n \"Split Wall\"];\r\n }\r\n\r\n load(dbFeature, loadFeature = true) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Backsplash\":\r\n case \"backsplash\":\r\n relatedItemName = \"backsplash\";\r\n RelatedItemClass = Backsplash;\r\n break;\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Pony Wall\":\r\n relatedItemName = \"ponyWall\";\r\n RelatedItemClass = PonyWall;\r\n break;\r\n case \"Split Wall\":\r\n relatedItemName = \"splitWall\";\r\n RelatedItemClass = SplitWall;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n return this.loadCommon(relatedItemName, RelatedItemClass, dbFeature, loadFeature)\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Cabinet from \"../../parts/cabinet\";\r\nimport {LayoutAbbreviations} from \"../../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../../../config\";\r\n\r\nexport default class Backsplash extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.kitchen.walls.backsplash\";\r\n this.isStoneFeature = true;\r\n this.allWallsCanBeApplied = true;\r\n if (isChild) {\r\n this.nextFeaturesPageToLoadArray = {};\r\n LayoutAbbreviations.forEach(layoutAbbreviation => {\r\n this.nextFeaturesPageToLoadArray[layoutAbbreviation] = {\r\n page: 0,\r\n allReceived: false,\r\n };\r\n });\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Backsplash());\r\n }\r\n\r\n alreadyAddedIndex(featureList, name) {\r\n return featureList.findIndex(feature => feature.getSplittedFeatureName() === name)\r\n }\r\n\r\n getBacksplashNavItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let availableFeatures = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(true), filteredAvailableFeatures);\r\n let featuresToDisplay = [];\r\n const activeType = this.getFeatureBacksplashType(this.activeFeature);\r\n let cabinetLayoutMetaData = null;\r\n if (this.activeFeature && this.featureIsFullWall(this.activeFeature)) { // full backsplashes should be filtered by CabinetLayout metaData\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n cabinetLayoutMetaData = cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n for (let feature of availableFeatures) {\r\n const currentName = feature.getSplittedFeatureName();\r\n if (feature.notAvailableInVisualizer) {\r\n continue;\r\n }\r\n const alreadyAddedFeatureIndex = this.alreadyAddedIndex(featuresToDisplay, currentName);\r\n const matchByType = !activeType || (this.getFeatureBacksplashType(feature) === activeType);\r\n const matchByCabLayout = !cabinetLayoutMetaData || (feature.metaData && feature.metaData[\"CabinetLayout\"]\r\n && feature.metaData[\"CabinetLayout\"].includes(cabinetLayoutMetaData[0]));\r\n\r\n if (IS_LIXIL_UI) {\r\n if (alreadyAddedFeatureIndex > -1) {\r\n if (matchByType && matchByCabLayout) {\r\n featuresToDisplay.splice(alreadyAddedFeatureIndex, 1, feature);\r\n }\r\n } else {\r\n featuresToDisplay.push(feature);\r\n }\r\n } else if ((alreadyAddedFeatureIndex === -1) && matchByType && matchByCabLayout) {\r\n featuresToDisplay.push(feature);\r\n }\r\n }\r\n return featuresToDisplay\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const featuresToDisplay = this.getBacksplashNavItems(filters, searchText);\r\n return this.returnUniqueNavFeatures(featuresToDisplay);\r\n }\r\n\r\n getFeatureByBacksplashType(neededType, featureName = \"\", sameNameOnly = false) {\r\n const conditions = this.getArrayOfConditions();\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(conditions);\r\n const matchingFeatures = featuresToDisplay.filter(feature => this.getFeatureBacksplashType(feature) === neededType);\r\n\r\n let currentPartName = featureName;\r\n if (!currentPartName && this.activeFeature) {\r\n currentPartName = this.activeFeature.getSplittedFeatureName();\r\n }\r\n\r\n const matchByName = matchingFeatures.filter(feature => {\r\n return feature.getSplittedFeatureName() === currentPartName\r\n });\r\n if (matchByName.length > 1) {\r\n const cabinetLayoutMetaData = this.getTopCabinetCabinetLayoutMetadata();\r\n const sameCabinetType = matchByName.find(feature => {\r\n if (this.featureIsFullWall(feature)) {\r\n return feature.matchesMetaForArrayOfConditions([\r\n {\r\n propName: 'CabinetLayout',\r\n propValue: cabinetLayoutMetaData\r\n }\r\n ])\r\n }\r\n });\r\n return sameCabinetType || matchByName[0];\r\n }\r\n if (sameNameOnly) {\r\n return matchByName[0]\r\n }\r\n return matchByName[0] || matchingFeatures[0];\r\n }\r\n\r\n featureIsFullWall = (feature) => {\r\n return this.getFeatureBacksplashType(feature) === \"Full\"\r\n }\r\n\r\n getFeatureBacksplashType = (feature) => {\r\n return feature && Array.isArray(feature.metaData[\"BacksplashType\"]) ? feature.metaData[\"BacksplashType\"][0] : null\r\n }\r\n\r\n getCurrentActiveFeatureType() {\r\n return this.getFeatureBacksplashType(this.activeFeature)\r\n }\r\n\r\n // setFeatureByName = async () => {\r\n // window.requestInProcess = true;\r\n // loaderEnable();\r\n // const splittedName = this.activeFeature.getSplittedFeatureName();\r\n // await Navigation.searchFeaturesByName(this, splittedName);\r\n // const neededFeature = this.findFeatureByPartName(splittedName, true);\r\n // if (neededFeature) {\r\n // this.activeFeature = neededFeature;\r\n // }\r\n // window.requestInProcess = false;\r\n // loaderDisable();\r\n // $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n // };\r\n\r\n getTopCabinetCabinetLayoutMetadata() {\r\n const cabinetParent = this.getParent().layout.parts[Cabinet.id];\r\n return cabinetParent && cabinetParent.topCabinet && cabinetParent.topCabinet.activeFeature\r\n && cabinetParent.topCabinet.activeFeature.metaData && cabinetParent.topCabinet.activeFeature.metaData[\"CabinetLayout\"];\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class PonyWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall';\r\n this.visible = true;\r\n this.partName = 'Pony Wall';\r\n this.translateId = \"visualizer.bathroom.walls.pony_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData[\"Part\"]) {\r\n const partNumber = +dbFeature.metaData[\"Part\"][0];\r\n return this.load_(dbFeature, new this.constructor(false, partNumber), true, partNumber === 0 ? 'features' : 'featuresParts');\r\n }\r\n return this.load_(dbFeature, new this.constructor());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class SplitWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'split_wall';\r\n this.partName = 'Split Wall';\r\n this.translateId = \"visualizer.bathroom.walls.split_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new SplitWall());\r\n }\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = CenterIsland.id;\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.RoomScene, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n fabricatorData: store.fabricatorState,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport CabinetSwitchers from \"../../kvComponent/navigation/cabinetSwitchers\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport CenterIsland from \"../core/parts/centerIsland\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n let hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer, canvas);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = CenterIsland.id;\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const {fabricatorData} = this.props;\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Background\":\r\n switch (true) {\r\n case dbFeature.displayName.includes(\"BG \"):\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n this.windowNeededLayouts = [1];\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const layout = this.getParent().layout;\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerAccessoriesParent = layout.parts[ShowerAccessories.id];\r\n const showerParent = layout.parts[Shower.id];\r\n\r\n const windowBody = showerAccessoriesParent.windowBody;\r\n if (windowBody && this.windowNeededLayouts.includes(layout.type) && document.kvConfig.toolVersion !== 5) {\r\n conditions.push({\r\n propName: \"Window\",\r\n propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n })\r\n }\r\n\r\n if (showerParent && showerParent.showerSize() && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n }\r\n\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Background.BackgroundBG;\r\n }\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerSeat extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_seat';\r\n this.partName = 'Large Corner Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_seat\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new LargeCornerSeat(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (this.layerPositions[position] && this.layerPositions[position].metaData[\"layerPosition\"]) {\r\n this.checkRelatedFeatureGroupPositions(this.layerPositions[position].metaData[\"layerPosition\"]);\r\n }\r\n })\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n // const accessoriesParent = parent.getParent(); // it is removing corner shelf! but it shouldn't\r\n // accessoriesParent.caddie_type = this.partId;\r\n parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerSeat + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class BathTubLiner extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_liner\";\r\n this.bottomTubId = \"bathtub_liner\";\r\n this.visible = true;\r\n this.partName = \"Tub Liner\";\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.bathtub_liner\";\r\n this.dbName = \"Bathtub Liner\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubLiner());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.Liner;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class ReplacementTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'replacement_tub';\r\n this.bottomTubId = \"replacement_tub\";\r\n this.visible = true;\r\n this.partName = 'Replacement Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.replacement_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ReplacementTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.ReplacementTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class WalkInTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walk_in_tub';\r\n this.bottomTubId = \"walk_in_tub\";\r\n this.visible = true;\r\n this.partName = 'Walk In Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.walk_in_tub\";\r\n this.isStoneFeature = false;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new WalkInTub());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.WalkInTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import TubCommon from \"./tubCommon\";\r\n\r\nexport default class JettedTub extends TubCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'jetted_tub';\r\n this.bottomTubId = \"jetted_tub\";\r\n this.visible = true;\r\n this.partName = 'Jetted Tub';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.jetted_tub\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new JettedTub());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.TubCombo.JettedTub;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class WallConfiguration extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'wall_configuration';\r\n this.partName = 'Wall Configuration';\r\n this.translateId = \"visualizer.bathroom.shower_tub_combo.wall_configuration\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WallConfiguration())\r\n }\r\n\r\n // setLayers(layout) {\r\n // this.activeFeature = this.features.find((feature) => {\r\n // return feature.partName === this.getParent().showerBody.activeFeature.partName // set the same glass as Body\r\n // });\r\n // return super.setLayers(layout);\r\n // }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n const showerTubComboParent = this.getParent().getParent();\r\n showerTubComboParent.setShowerTubCombo();\r\n showerTubComboParent.setShowerSize(this.leftShowerWallType, this.showerComboSize);\r\n this.featureClicked();\r\n }\r\n\r\n setZIndex() {}\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\nimport {PAN_POSITIONS, ShowerComboTubType} from \"../../constants\";\r\nimport DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerFixture extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_fixture';\r\n this.partName = 'Fixture';\r\n this.translateId = \"visualizer.bathroom.shower.shower_fixture\";\r\n this.homePageTitle = 'Shower Fixtures';\r\n this.dbName = 'Shower Fixture';\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n // this.defaultLayerLayoutPositions = {\r\n // [LayoutType.Layout1]: \"L\",\r\n // [LayoutType.Layout4]: \"C\",\r\n // };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.id === 79104774 || dbFeature.id === 79104772) { // Modern 4 & townsend disabled\r\n return false\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new ShowerFixture(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n let featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n const filteredAvailableFeatures2 = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters, this.featuresParts), searchText);\r\n let featuresToDisplay2 = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures2);\r\n featuresToDisplay2.forEach(feature2 => {\r\n if (featuresToDisplay.every(feature => feature.dbFeature.sharedFeatureName !== feature2.dbFeature.sharedFeatureName)) {\r\n featuresToDisplay.push(feature2)\r\n }\r\n })\r\n return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if (shower.layout && shower.showerTubComboIsActive()\r\n && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n comboPart.bottomTub = ShowerComboTubType.bathtub_liner;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n\r\n const showerFixtureParent = this.getParent();\r\n const shower = showerFixtureParent.getParent();\r\n if (shower.showerTubComboIsActive() && shower.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub\r\n && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerParent.showerTubComboIsActive() ? \"Tub\" : \"Shower\"\r\n });\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Shower.ShowerFixture + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class ShowerGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_glass';\r\n this.partName = 'Glass';\r\n this.translateId = \"visualizer.bathroom.shower.shower_glass\";\r\n this.visible = false;\r\n this.layerPriority = 12;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerGlass())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n this.disabled = true;\r\n }\r\n this.activeFeature = this.features.find((feature) => {\r\n const showerBodyActiveFeature = this.getParent().showerBody.activeFeature;\r\n return showerBodyActiveFeature && feature.partName === showerBodyActiveFeature.partName // set the same glass as Body\r\n });\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType() === Shower.Type.Custom && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.Glass;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nimport {LayoutType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {\r\n custom30in15X4Shower,\r\n custom30in30X8Shower,\r\n custom30inPonyShower,\r\n custom60in15X4Shower,\r\n custom60in30X8Shower,\r\n custom60inPonyShower\r\n} from \"../../../../bvComponent/core/assets\";\r\n\r\nexport default class ShowerBody extends IntermediatePart {\r\n\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partId = 'shower_body';\r\n this.partName = 'Shower Body';\r\n this.translateId = \"visualizer.bathroom.shower.shower_body\";\r\n this.homePageTitle = 'Shower Doors & Glass';\r\n this.partNumber = partNumber;\r\n this.activeFeatureParts = [];\r\n this.canBeDisabled = false;\r\n this.placeholderChanged = true; // never show placeholder to body\r\n this.firstClick = {\r\n \"0\": true // never show placeholder to body\r\n }\r\n this.layerPriority = 1;\r\n this.createdManually = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const loadedShowerBody = super.load_(dbFeature, new ShowerBody());\r\n if (loadedShowerBody) { // it can be false (just skip it)\r\n const featureName = loadedShowerBody.dbFeature.sharedFeatureName;\r\n loadedShowerBody.featureName = featureName;\r\n loadedShowerBody.showerBodyType = 'Custom';\r\n loadedShowerBody.showerDimensions = this.loadShowerDimensions(featureName);\r\n loadedShowerBody.metaData = this.loadShowerMetaData(featureName, loadedShowerBody.showerDimensions);\r\n loadedShowerBody.showerBodyId = featureName.toLowerCase().replace(/ /gi, \"-\");\r\n loadedShowerBody.notAvailableInVisualizer = false;\r\n if (!loadedShowerBody.dbFeature.thumbnailUrl) {\r\n loadedShowerBody.customThumbnail = this.loadThumbnail(featureName)\r\n }\r\n }\r\n return loadedShowerBody\r\n }\r\n\r\n loadShowerDimensions(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return \"15X4\"\r\n case featureName.includes(\"Pony\"):\r\n return \"Pony\"\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return \"30X8\"\r\n }\r\n }\r\n\r\n loadShowerMetaData(featureName = this.activeFeature.featureName, showerDimensions) {\r\n const featureNameSplitted = featureName.split(\"in\")[0];\r\n return {\r\n \"ShowerSize\": featureNameSplitted.length > 1 ? [featureNameSplitted.substr(featureNameSplitted.length - 2)] : ['60'],\r\n \"CountertopSize\": showerDimensions === \"30X8\" ? [\"72in\"] : [\"20in\", \"24in\", \"30in\", \"36in\", \"48in\", \"60in\"]\r\n }\r\n }\r\n\r\n loadThumbnail(featureName = this.activeFeature.featureName) {\r\n switch (true) {\r\n case featureName.includes(\"15X4\"):\r\n return featureName.includes(\"30in\") ? custom30in15X4Shower : custom60in15X4Shower\r\n case featureName.includes(\"Pony\"):\r\n return featureName.includes(\"30in\") ? custom30inPonyShower : custom60inPonyShower\r\n case featureName.includes(\"30X8\"):\r\n default:\r\n return featureName.includes(\"30in\") ? custom30in30X8Shower : custom60in30X8Shower\r\n }\r\n }\r\n\r\n handleClick() {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick();\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.showerBody.activeFeature = this;\r\n }\r\n this.getParent().showerBodySelectedByUser = true;\r\n const shower = this.getParent().layout ? this.getParent() : this.getParent().getParent(); // workaround for complete & custom click\r\n if (shower.showerTubComboIsActive) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n showerParent.relatedItems.forEach((relItem) => {\r\n relItem.disabled = this.disabled;\r\n if (relItem.activeFeatureParts && relItem.activeFeatureParts.length) {\r\n relItem.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart) {\r\n activeFeaturePart.disabled = this.disabled\r\n }\r\n });\r\n }\r\n });\r\n if (showerParent.layout && showerParent.showerTubComboIsActive) {\r\n const comboPart = showerParent.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n const wallParent = showerParent.layout.parts.Walls;\r\n wallParent.wallExL.disabled = this.disabled;\r\n // wallParent.wallExR.disabled = this.disabled;\r\n\r\n const bathtubParent = showerParent.layout.parts.Bathtub;\r\n\r\n if (showerParent.layout.type === LayoutType.Small && !this.disabled && bathtubParent) { // switch off all bathtub features\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBody.disabled = true;\r\n }\r\n if (bathtubParent.bathTubBody) {\r\n bathtubParent.bathTubBase.disabled = true;\r\n bathtubParent.bathTubBase.disabledClick();\r\n }\r\n }\r\n }\r\n\r\n availableFeatures(filters) {\r\n const layout = this.getParent().layout;\r\n const filteredAvailableFeatures = filters ? super.getFilteredFeaturesByFilters(filters) : this.features;\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n return filteredAvailableFeatures.filter((feature) => {\r\n if (counterTopSize === '72in' && layout.type === 1) {\r\n return feature.showerDimensions === \"30X8\" || feature.showerDimensions === \"Pony\"\r\n }\r\n return true\r\n })\r\n }\r\n\r\n getArrayOfConditions() {\r\n return []\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const activeFeatureParts = (this.activeFeature && this.activeFeature.partNumber) ? this.featuresParts.filter((feature) => {\r\n return feature.partName === this.activeFeature.partName\r\n }) : [];\r\n activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n return activeFeatureParts\r\n }\r\n\r\n setDefault() {\r\n const availableFeatures = this.availableFeatures();\r\n const layout = this.getParent().layout;\r\n let hardCodedDefault = availableFeatures.find((feature) => {\r\n return feature.partName === \"Custom B 60in 15X4\";\r\n });\r\n const counterTopSize = layout.parts[Vanity.id].counterTopSize();\r\n if (counterTopSize === '72in' && layout.type === 1 && this.activeFeature) {\r\n hardCodedDefault = availableFeatures.find((feature) => {\r\n return this.activeFeature.partName.includes(\"60in\")\r\n ? feature.partName.includes(\"60in\")\r\n : feature.partName.includes(\"30in\")\r\n });\r\n }\r\n this.activeFeature = hardCodedDefault || availableFeatures[0];\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex() {}\r\n\r\n changeLayout(layoutType) {\r\n if (layoutType === 1 && this.disabled) {\r\n this.disabled = false;\r\n this.disabledClick();\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CompleteVanity extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity';\r\n this.partName = 'Vanity';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity\";\r\n this.homePageTitle = 'Complete Vanities';\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CompleteVanity());\r\n }\r\n\r\n setDefault(layout) {\r\n const availableCompleteFeatures = this.features.filter(feature => {\r\n return feature.metaData[\"Vanity\"] && feature.metaData[\"Vanity\"].includes(\"Complete\")\r\n });\r\n const hardCodedDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Buffalo Complete Sand 987SANBLK17VK24\");\r\n });\r\n // const placeholderDefault =\r\n // (\r\n // this.getParent().vanityCabinet\r\n // && this.getParent().vanityCabinet.features\r\n // && this.getParent().vanityCabinet.features.length\r\n // && this.getParent().vanityCabinet.features.find((feature) => +feature.vanitySize === 24 && feature.dbFeature.displayName.includes(\"laceholder\"))\r\n // ) || this.features.find((feature) => {\r\n // return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n // });\r\n const placeholderDefault = this.features.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Placeholder S\");\r\n });\r\n // console.log('this.features', this.features);\r\n // console.log('placeholderDefault', placeholderDefault);\r\n this.activeFeature = hardCodedDefault || super.setDefault(layout) || availableCompleteFeatures[0];\r\n this.placeholderFeature = placeholderDefault || super.setDefault(layout) || null;\r\n }\r\n\r\n // setLayers(layout) {\r\n // // const s3Binding = find(this.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // if (!this.activeFeature) {\r\n // this.setDefault(layout);\r\n // }\r\n //\r\n // let s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {\r\n // entityID: this.getParent().featureDefinitionId(this),\r\n // layout: layout.getCurrentLayoutAbbreviation()\r\n // });\r\n // if (!s3Binding) {\r\n // s3Binding = find(this.activeFeature.dbFeature.s3Bindings, {entityID: this.featureDefinitionId(this)});\r\n // }\r\n // this.activeFeature.layer.fromS3Binding(s3Binding);\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Complete.Cabinet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityHandle extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_handle\";\r\n this.dbName = \"Vanity Handle\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityHandle())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n getAvailableFeatures() {\r\n return this.features && this.features.filter(f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize())) || [];\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const vanityPedestal = this.getParent().vanityCabinet;\r\n if (vanityPedestal && vanityPedestal.activeFeature) {\r\n const handleMeta = vanityPedestal.activeFeature.metaData[\"VanityHandle\"];\r\n const hardCodedWizardConditions = vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder\") &&\r\n (\r\n vanityPedestal.activeFeature.partName.includes(\"WizardPlaceholder52 in36 S\")\r\n || (handleMeta && handleMeta.includes(\"true\")) // WizardPlaceholder QC Liberty\r\n );\r\n if (handleMeta && handleMeta.includes(\"None\") || hardCodedWizardConditions) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n const zIndex = zIndexes.Vanity.Handle;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport store from \"../../../../../store\";\r\nimport {Layout} from \"../../layout\";\r\n\r\nexport default class VanityCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_cabinet';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_cabinet\";\r\n this.dbName = \"Vanity\";\r\n this.homePageTitle = 'Vanity Bases';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.canUseWizard = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCabinet())\r\n }\r\n\r\n // navigationSubItems() {\r\n // return super.navigationSubItemsWithFilter('VanitySize', this.getParent().counterTopSize());\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n\r\n // console.log('filterName', filterName);\r\n // console.log('filterValue', filterValue);\r\n\r\n const filterGroups = store.getState().filterState.filterGroups;\r\n const group = filterGroups.find(group => group.name === filterName);\r\n const groupId = group.id;\r\n const filterValueId = Layout.getfilterValueIdByValue(groupId, filterValue);\r\n const filteredFeatures = this.features.filter(\r\n feature => feature.dbFeature && feature.dbFeature.filterValueIDs[groupId] && feature.dbFeature.filterValueIDs[groupId].includes(filterValueId)\r\n ); // find among all features only those, who have filter with value === props size\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, null, \"ustom\")) {\r\n this.activeFeature = filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\") && feature.dbFeature.displayName.includes(\"ustom\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n // getAvailableFeatures() {\r\n // return this.features.filter(f => f.vanitySize+'in' === this.getParent().counterTopSize());\r\n // }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Cabinet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Cabinet;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n// import uniqBy from \"lodash/uniqBy\";\r\n\r\nexport default class VanityCountertop extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_countertop\";\r\n this.homePageTitle = 'Countertops';\r\n this.visible = [Vanity.Types.Custom];\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityCountertop())\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.CounterTop;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.CounterTop;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class VanityBacksplash extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_backsplash';\r\n this.partName = 'Backsplash';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_backsplash\";\r\n this.dbName = 'Backsplash';\r\n this.visible = [Vanity.Types.Custom];\r\n this.canBeDisabled = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new VanityBacksplash())\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const vanityParent = this.getParent();\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: vanityParent.getCounterTopSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n const zIndex = zIndexes.Vanity.VanityBacksplash;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\n\r\nexport default class Mirror extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_mirror';\r\n this.partName = 'Mirror';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_mirror\";\r\n this.homePageTitle = 'Mirrors';\r\n this.visible = [Vanity.Types.Complete, Vanity.Types.Custom];\r\n this.canBeDisabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Mirror())\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n // if ((this.getParent().activeSubType_ === Vanity.Types.Custom) && this.activeFeature) {\r\n if (zIndexes && this.activeFeature) {\r\n // this.activeFeature.layer.zIndex = Z.layouts.Large.Vanity.Mirror;\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Mirror;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Sink extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_sink';\r\n this.partName = 'Sink';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_sink\";\r\n this.homePageTitle = 'Sinks';\r\n this.visible = [Vanity.Types.Custom];\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"SinkSize\"]) {\r\n dbFeature.metaData[\"SinkSize\"] = [METADATA.Inner]\r\n }\r\n return super.load_(dbFeature, new Sink())\r\n }\r\n //\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // return super.navigationSubItemsWithFilterWithInactive('VanitySize', this.getParent().counterTopSize(), filteredAvailableFeatures);\r\n // }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const counterTopSize = this.getParent().counterTopSize();\r\n // return [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"faucet\") {\r\n // some additional logic if needed\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setActiveFeatureByFilter(filterName, filterValue) {\r\n const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions());\r\n const filteredFeatures = featuresToDisplay.filter((feature) => {\r\n return feature.metaData[filterName] && feature.metaData[filterName].includes(filterValue);\r\n });\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.activeFeature = filteredFeatures.find(feature => !feature.dbFeature.displayName.includes(\"laceholder\")) || filteredFeatures[0];\r\n const placeholderAvailableFeatures = filteredFeatures.filter(feature => {\r\n return feature.dbFeature.displayName.includes(\"laceholder\")\r\n });\r\n this.placeholderFeature = placeholderAvailableFeatures[0];\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if(this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Sink;\r\n }\r\n if(this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Vanity.Sink;\r\n }\r\n }\r\n }\r\n}\r\n","import filter from 'lodash/filter';\r\n\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\nimport Config from \"../../../../../config\";\r\nimport { Vanity } from \"../../parts/vanity\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class VanityFaucet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'vanity_faucet';\r\n this.partName = 'Faucet';\r\n this.homePageTitle = 'Faucets';\r\n this.translateId = \"visualizer.bathroom.vanity.vanity_faucet\";\r\n this.visible = [Vanity.Types.Custom];\r\n this.useMatchesFailedNavigation = true;\r\n if (Config.isDevMode()) {\r\n this.canBeDisabled = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"SinkSize\"]) {\r\n dbFeature.metaData[\"SinkSize\"] = [METADATA.Inner]\r\n } else if(dbFeature.metaData[\"SinkSize\"].includes(METADATA.Outer) && !dbFeature.metaData[\"SinkSize\"].includes(METADATA.Inner)) (\r\n dbFeature.metaData[\"SinkSize\"].push(METADATA.Inner)\r\n )\r\n return this.load_(dbFeature, new VanityFaucet());\r\n }\r\n\r\n disabledClick() {\r\n this.getParent().toggleVanityParts(this.disabled);\r\n }\r\n\r\n getCurrentSinkSize() {\r\n const sinkParent = this.getParent().sink;\r\n if (sinkParent && sinkParent.activeFeature) {\r\n const sinkMeta = sinkParent.activeFeature.metaData[\"SinkSize\"];\r\n if (sinkMeta) {\r\n return Array.isArray(sinkMeta) ? sinkMeta[0] : sinkMeta\r\n } else if (sinkParent.activeFeature.partName.includes(\"Placeholder\")) {\r\n return \"Outer\"\r\n }\r\n }\r\n return null\r\n }\r\n\r\n getArrayOfConditions(withSinkSize = true) {\r\n // const counterTopSize = this.getParent().counterTopSize();\r\n // const conditions = [{\r\n // propName: 'VanitySize',\r\n // propValue: counterTopSize\r\n // }];\r\n const conditions = super.getArrayOfConditions();\r\n if (withSinkSize && this.getCurrentSinkSize()) {\r\n conditions.push({\r\n propName: 'SinkSize',\r\n propValue: this.getCurrentSinkSize()\r\n })\r\n }\r\n const vanityParent = this.getParent();\r\n const countertopSize = vanityParent.getCounterTopSize();\r\n if (countertopSize) {\r\n conditions.push({\r\n propName: \"VanitySize\",\r\n propValue: countertopSize && countertopSize[0] && (countertopSize[0] === \"32\") ? \"48\" : countertopSize\r\n })\r\n }\r\n const sinkType = vanityParent.sink && vanityParent.sink.activeFeature && vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n if (sinkType) {\r\n conditions.push({\r\n propName: \"SinkType\",\r\n propValue: vanityParent.sink.activeFeature.metaData[\"SinkType\"]\r\n })\r\n }\r\n // console.log(\"conditions\", conditions);\r\n return conditions;\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions(true)))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getAvailableFeatures() {\r\n return filter(this.features, f => f.matchesMetaForCondition('VanitySize', this.getParent().counterTopSize()));\r\n }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"sink\") {\r\n this.getParent().getParent().sink.setActiveFeatureByFilter(\"SinkSize\", \"Inner\")\r\n } else {\r\n this.getParent().getParent().vanityCabinet.setActiveFeatureByFilter(\"Size\", this.metaData[\"VanitySize\"] ? this.metaData[\"VanitySize\"][0] : null); // \"60in\", etc.\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.getParent().activeSubType_ === Vanity.Types.Custom) {\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Vanity.Faucet;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {ShowerComboTubType} from \"../../constants\";\r\n\r\nexport default class ShowerWall extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_interior_wall';\r\n this.partName = 'Shower Walls';\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.dbName = \"Shower Wall\";\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Shower\"]) {\r\n dbFeature.metaData[\"Shower\"] = [\"Shower\"];\r\n }\r\n return super.load_(dbFeature, new ShowerWall());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerInteriorWallAccent && shower.showerInteriorWallAccent.canBeDisabled\r\n && !shower.showerInteriorWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerInteriorWallAccent.disabled = true;\r\n shower.showerInteriorWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n availableFeatures(wallFeatures) {\r\n return wallFeatures.filter(wallFeature => wallFeature.partNumber === 1)\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n const showerCondition = showerParent.showerTubComboIsActive() && showerParent.layout.parts[ShowerTubCombo.id]\r\n && (showerParent.layout.parts[ShowerTubCombo.id].bottomTub === ShowerComboTubType.walk_in_tub)\r\n ? \"Tub\"\r\n : \"Shower\";\r\n conditions.push({\r\n propName: \"Shower\",\r\n propValue: showerCondition\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Background.ShowerWall;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nexport default class ShowerWallAccent extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"shower_wall_accent\";\r\n this.partName = \"Shower Walls Accent\";\r\n this.translateId = \"visualizer.bathroom.shower.shower_interior_wall_accent\";\r\n this.dbName = \"Shower Wall Accent\";\r\n this.homePageTitle = 'Interior Shower Walls';\r\n this.isStoneFeature = true;\r\n this.canUseWizard = true;\r\n this.layerPriority = 2;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerWallAccent());\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n const parent = this.getParent();\r\n super.handleClick(ignoreLocked);\r\n const shower = parent.getParent();\r\n if (shower.showerWallAccent && shower.showerWallAccent.canBeDisabled\r\n && !shower.showerWallAccent.placeholderChanged && !getFeatureIsLocked(this)) {\r\n shower.showerWallAccent.disabled = true;\r\n shower.showerWallAccent.disabledClick();\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.ShowerWallAccent;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport {LayoutType, ShowerComboTubType} from \"../../constants\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\n\r\nexport default class ShowerDoor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door';\r\n this.partName = 'Shower Door';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door\";\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.canBeDisabled = true;\r\n this.layerPriority = 5;\r\n\r\n /* only shower door properties */\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {};\r\n this.oneLayerPosition = true;\r\n Object.keys(LayoutType).forEach(layoutName => {\r\n this.previouslySelectedFeatures[layoutName] = {};\r\n })\r\n }\r\n this.currentShowerBodyId = \"\"; // for example \"custom-a-60in-30x8\"\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ShowerDoor());\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent();\r\n const showerDoorHandle = showerParent.showerDoorHandle;\r\n if (showerDoorHandle) {\r\n showerDoorHandle.disabled = this.disabled;\r\n }\r\n const accParent = showerParent.layout.parts[ShowerAccessories.id]\r\n if (!this.disabled && accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n if (!this.notAvailableInVisualizer && !getFeatureIsLocked(this)) {\r\n // this.getParent().getParent().setShowerTubCombo();\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n const shower = this.getParent().getParent();\r\n const showerPanCondition = this.metaData[\"ShowerPan\"];\r\n if (!shower.showerTubComboIsActive()) {\r\n shower.showerFloorIsActive = showerPanCondition && showerPanCondition.includes(\"Threshold\");\r\n }\r\n const accParent = shower.layout.parts[ShowerAccessories.id]\r\n if (accParent && accParent.showerRod && !accParent.showerRod.disabled) {\r\n accParent.showerRod.disabled = true\r\n }\r\n if(!this.matchesMetaForArrayOfConditions(this.getParent().getArrayOfConditions())) {\r\n const showerSizeValues = this.metaData[\"ShowerSize\"];\r\n const showerBodyParent = this.getParent().getParent().showerBody;\r\n if (showerSizeValues) {\r\n const showerBodyThatFits = showerBodyParent.features.filter(showerBodyFeature => {\r\n const showerSizeValues2 = showerBodyFeature.metaData[\"ShowerSize\"];\r\n return showerSizeValues.some(condValue => {\r\n return showerSizeValues2.some(condValue2 => condValue === condValue2);\r\n });\r\n });\r\n if (showerBodyThatFits.length && showerBodyThatFits.every(shBody => shBody.partName !== showerBodyParent.activeFeature.partName)) {\r\n let showerBodyToSet = showerBodyThatFits.find(shBody => {\r\n return shBody.showerDimensions === showerBodyParent.activeFeature.showerDimensions\r\n }) || showerBodyThatFits[0];\r\n showerBodyParent.showerBodySelectedByUser = true;\r\n showerBodyParent.activeFeature = showerBodyToSet;\r\n }\r\n }\r\n }\r\n this.featureClicked();\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n if (showerParent.showerTubComboIsActive() && comboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n super.hideLayers();\r\n return;\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n const comboParent = showerParent.layout.parts[ShowerTubCombo.id];\r\n const showerTubComboIsActive = showerParent.showerTubComboIsActive();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: IS_BATHROOM_OLD_BV_SCENE ? \"Type\" : \"Shower\",\r\n propValue: showerTubComboIsActive\r\n ? comboParent.bottomTub === ShowerComboTubType.walk_in_tub ? \"WalkInTub\" : \"Tub\" // WalkInTub removes items from nav\r\n : \"Pan\"\r\n })\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.ShowerDoor;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class ShowerPanCombo extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pan_combo';\r\n this.partName = 'Shower Pan';\r\n this.translateId = \"visualizer.bathroom.shower.shower_pan_combo\";\r\n this.dbName = \"Shower Pans\"; // americanstandard2020 // lowesdemo // bucket5\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 8;\r\n if (isChild) {\r\n this.oneLayerPosition = true;\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n return super.load_(dbFeature, new ShowerPanCombo())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = false;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked); // set active item & not in visualizer item\r\n this.applyFeatureIfNotCompatible();\r\n }\r\n\r\n navigationSubItems(filters, searchText) {\r\n return this.navigationSubItemsWithSides(filters, searchText);\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (showerParent.showerTubComboIsActive() || showerParent.showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && !this.activeFeature.notAvailableInVisualizer\r\n && this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerPanCombo;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n getMatchingPositionFeature = (position = \"\", forFeature = this.activeFeature) => {\r\n if (forFeature) { //just in case\r\n let arrayOfConditions = this.getArrayOfConditions();\r\n if (forFeature.metaData[\"SkuName\"]) {\r\n arrayOfConditions.push({\r\n propName: \"SkuName\",\r\n propValue: forFeature.metaData[\"SkuName\"]\r\n })\r\n }\r\n return this.features.find((feature) => {\r\n return feature.matchesMetaForArrayOfConditions(arrayOfConditions) && feature.metaData[\"layerPosition\"] === position\r\n });\r\n }\r\n return null\r\n };\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDoorHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_door_handle';\r\n this.partName = 'Handle';\r\n this.translateId = \"visualizer.bathroom.shower.shower_door_handle\";\r\n this.dbName = 'Shower Door Handle';\r\n this.visible = true;\r\n this.isStoneFeature = false;\r\n this.layerPriority = 9;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n const handle = this.load_(dbFeature, new ShowerDoorHandle());\r\n if (handle) {\r\n ShowerDoorHandle.setAdditionalMetaData(handle);\r\n }\r\n }\r\n\r\n static setAdditionalMetaData(handle) {\r\n const compatible = handle.metaData[\"CompatibleTub\"];\r\n const showerSize = handle.metaData[\"ShowerSize\"];\r\n if (!compatible) {\r\n handle.metaData[\"CompatibleTub\"] = [\"None\"];\r\n }\r\n if (!showerSize) {\r\n handle.metaData[\"ShowerSize\"] = [\"60in\"];\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const showerDoor = this.getParent().showerDoor;\r\n if (showerDoor) {\r\n showerDoor.disabled = this.disabled;\r\n }\r\n }\r\n\r\n handleClick() {\r\n super.handleClick();\r\n // this.getParent().getParent().setShowerTubCombo();\r\n //\r\n // let doorWithLiner = false;\r\n // if(this.metaData && this.metaData.length) {\r\n // const activeDoorMetadata = this.metaData.find(metaDataObject => metaDataObject.isFor);\r\n // const showerPanValues = activeDoorMetadata.conditions.find(condition => condition.name === \"BathtubLiner\");\r\n // if (showerPanValues) {\r\n // doorWithLiner = true;\r\n // }\r\n // }\r\n //\r\n // this.getParent().getParent().setLinerActive(doorWithLiner);\r\n // this.featureClicked();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent();\r\n\r\n if (!showerParent.showerDoor || !showerParent.showerDoor.activeFeature ||\r\n (showerParent.showerDoor.activeFeature.metaData && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"]\r\n && showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"][0] === \"None\")) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n // const showerParent = this.getParent();\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n //\r\n // let compatibleValue = \"None\";\r\n // if (showerComboParent.showerTubComboIsActive) {\r\n // if (showerComboParent.bottomTub === ShowerComboTubType.bathtub_liner) {\r\n // compatibleValue = \"BathtubLiner\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.replacement_tub) {\r\n // compatibleValue = \"ReplacementTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.walk_in_tub) {\r\n // compatibleValue = \"WalkInTub\"\r\n // } else if (showerComboParent.bottomTub === ShowerComboTubType.jetted_tub) {\r\n // compatibleValue = \"JettedTub\"\r\n // }\r\n // }\r\n //\r\n // const conditions = [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // },{\r\n // propName: 'CompatibleTub',\r\n // propValue: compatibleValue\r\n // }];\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Large) {\r\n // let showerDimensions = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerDimensions()\r\n // : showerParent.showerDimensions();\r\n //\r\n // showerDimensions = getMetadataByDimensions(showerDimensions);\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize();\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // conditions.push({\r\n // propName: \"EX L\",\r\n // propValue: showerDimensions\r\n // })\r\n // }\r\n //\r\n // if (showerParent.showerDoor && showerParent.showerDoor.activeFeature) { // add shower pan condition only if it is shower\r\n // const doorCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerDoor\"];\r\n // const handleCondition = showerParent.showerDoor.activeFeature.metaData[\"ShowerHandle\"];\r\n // // console.log('doorCondition', doorCondition);\r\n // if (doorCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerDoor',\r\n // propValue: doorCondition\r\n // })\r\n // }\r\n // if (handleCondition) {\r\n // conditions.push({\r\n // propName: 'ShowerHandle',\r\n // propValue: handleCondition\r\n // })\r\n // }\r\n // }\r\n //\r\n // if (!showerParent.showerTubComboIsActive()) {\r\n // if (showerParent.showerFloorIsActive) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: \"Threshold\"\r\n // })\r\n // } else if (showerParent.showerPanCombo && showerParent.showerPanCombo.activeFeature) {\r\n // conditions.push({\r\n // propName: \"ShowerPan\",\r\n // propValue: showerParent.showerPanCombo.activeFeature.metaData[\"ShowerPan\"]\r\n // })\r\n // }\r\n // }\r\n // // console.log('conditions', conditions);\r\n // return conditions\r\n // }\r\n\r\n setDefault() {\r\n const shower = this.getParent();\r\n const currentActiveFeature = this.activeFeature;\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n this.setDefaultAccordingToPreviousSelect(shower, filteredFeatures, \"Brantford\");\r\n }\r\n this.rememberPreviousSelection(shower, currentActiveFeature);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDoorHandle;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallCap extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_cap';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Cap';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_cap\";\r\n this.isStoneFeature = true;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 11;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallCap());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallCap;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature && this.activeFeature.s3Bindings && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const parent = this.getParent();\r\n // const layout = parent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n // if (layoutAbr === LayoutAbbreviation.Small){\r\n // const activeShower = parent.showerTubComboIsActive()\r\n // ? layout.parts[ShowerTubCombo.id]\r\n // : layout.parts[Shower.id];\r\n // const showerSize = activeShower.showerSize(); // 60in, 30in, ..\r\n // // const showerDimensions = activeShower.showerDimensions(); // 15x4, Pony, ...\r\n // return [{\r\n // propName: 'Shower',\r\n // propValue: 'Custom'\r\n // }, {\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }];\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures, '', '', true)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName\r\n && feature.dbFeature.displayName.includesCI(\"Pony Wall Cap - Model[For=Shower=(Custom)=Size=(30in_60in)]\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includesCI(\" - Placeholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutAbbreviation} from \"../../constants\";\r\n\r\nexport default class PonyWallGlass extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'pony_wall_glass';\r\n this.isPonyWallPart = true;\r\n this.visible = true;\r\n this.partName = 'Pony Wall Glass';\r\n this.translateId = \"visualizer.bathroom.shower.pony_wall_glass\";\r\n this.isStoneFeature = false;\r\n this.disableOnHomeSections = true;\r\n this.layerPriority = 10;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new PonyWallGlass());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.PonyWallGlass;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().getActiveShowerGroup();\r\n if (showerParent.showerDimensions() !== \"Pony\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n const matchesByBindings = this.activeFeature && this.activeFeature.dbFeature.s3Bindings.some(binding => {\r\n return binding.layout === LayoutAbbreviation.All || binding.layout === layoutAbr\r\n });\r\n\r\n if (matchesByBindings && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // const layout = showerParent.layout;\r\n // const layoutAbr = layout.getCurrentLayoutAbbreviation();\r\n //\r\n // if (layoutAbr === LayoutAbbreviation.Small) {\r\n // const showerComboParent = this.getParent().layout.parts[ShowerTubCombo.id];\r\n // let showerSize = showerComboParent.showerTubComboIsActive\r\n // ? showerComboParent.showerSize()\r\n // : showerParent.showerSize();\r\n // return [{\r\n // propName: 'Size',\r\n // propValue: showerSize\r\n // }]\r\n // }\r\n //\r\n // return []\r\n // }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Standard Pony Wall\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class ShowerFloor extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_floor';\r\n this.translateId = \"visualizer.bathroom.shower.shower_floor\";\r\n this.partName = 'Floor';\r\n this.homePageTitle = 'Shower Flooring';\r\n this.dbName = 'ShowerFloor';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 6;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerFloor())\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const threshold = shower.threshold;\r\n if (threshold && !threshold.selectedByUser) {\r\n const thresholdAvailableFeatures = threshold.navigationSubItems();\r\n const currentFloorName = this.getSplittedFeatureName();\r\n const sameThreshold = thresholdAvailableFeatures.find(tr => tr.part.getSplittedFeatureName() === currentFloorName);\r\n if (sameThreshold) {\r\n super.handleClick.call(sameThreshold.part);\r\n threshold.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n if (!super.tryToSetTheSameFeature(filteredFeatures)) {\r\n const hardCodedDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"Sahara Autumn Porcelain Tile\");\r\n });\r\n const placeholderDefault = filteredFeatures.find((feature) => {\r\n return feature.dbFeature.displayName && feature.dbFeature.displayName.includes(\"laceholder\");\r\n });\r\n this.activeFeature = hardCodedDefault || filteredFeatures[0];\r\n this.placeholderFeature = placeholderDefault || null;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Floor;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerBodyType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport store from \"../../../../../store\";\r\nimport {toggleNotCompatibleView} from \"../../../../../actions/selectionFunctions\";\r\n\r\nexport default class Threshold extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'threshold';\r\n this.partName = 'Threshold';\r\n this.translateId = \"visualizer.bathroom.shower.threshold\";\r\n this.homePageTitle = 'Threshold';\r\n this.dbName = 'ShowerPan';\r\n this.isStoneFeature = true;\r\n this.selectedByUser = false;\r\n this.layerPriority = 7;\r\n }\r\n\r\n applyFeatureIfNotCompatible() {\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n shower.showerFloorIsActive = true;\r\n if (shower.layout && shower.showerTubComboIsActive()) {\r\n const comboPart = shower.layout.parts[ShowerTubCombo.id];\r\n comboPart.showerTubComboIsActive = false;\r\n }\r\n }\r\n\r\n handleClick(ignoreLocked) {\r\n super.handleClick(ignoreLocked);\r\n if (this.notAvailableInVisualizer || getFeatureIsLocked(this)) {\r\n return\r\n }\r\n const parent = this.getParent();\r\n const shower = parent.getParent();\r\n if ((!shower.showerFloorIsActive || shower.showerTubComboIsActive()) && !window.location.hash.includes(\"visualizer\")) {\r\n store.dispatch(toggleNotCompatibleView(true));\r\n return;\r\n }\r\n\r\n this.applyFeatureIfNotCompatible();\r\n\r\n this.getParent().selectedByUser = true;\r\n const showerFloor = shower.showerFloor;\r\n if (showerFloor && !showerFloor.selectedByUser) {\r\n const showerFloorAvailableFeatures = showerFloor.navigationSubItems();\r\n const currentThresholdName = this.getSplittedFeatureName();\r\n const sameShowerFloor = showerFloorAvailableFeatures.find(navItemFloor => {\r\n return navItemFloor.part.getSplittedFeatureName() === currentThresholdName\r\n });\r\n if (sameShowerFloor) {\r\n super.handleClick.call(sameShowerFloor.part);\r\n showerFloor.selectedByUser = false;\r\n }\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Threshold())\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n if (this.getParent().showerTubComboIsActive() || !this.getParent().showerFloorIsActive) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.getParent().customBodyType === ShowerBodyType.Door) {\r\n const showerDoorParent = this.getParent().showerDoor;\r\n if (showerDoorParent && showerDoorParent.activeFeature) {\r\n const currentShowerPanCondition = showerDoorParent.activeFeature.metaData[\"ShowerPan\"];\r\n if (!currentShowerPanCondition || (currentShowerPanCondition && !currentShowerPanCondition.includes(\"Threshold\"))) {\r\n super.hideLayers();\r\n return;\r\n }\r\n }\r\n }\r\n const conditions = this.getArrayOfConditions();\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const layout = this.getParent().layout;\r\n // const showerSize = this.getParent().showerSize();\r\n // let showerDimensions = getMetadataByDimensions(this.getParent().showerDimensions());\r\n //\r\n // const vanity = layout.parts[Vanity.id];\r\n // let counterTopSize = vanity.counterTopSize();\r\n // if (counterTopSize === '72in' && layout.type === 1 && (showerDimensions !== \"Full\" || showerDimensions !== \"Pony\")) {\r\n // showerDimensions = \"Full\"\r\n // }\r\n //\r\n // return [{\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }, {\r\n // propName: 'EX L',\r\n // propValue: showerDimensions\r\n // }];\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (this.getParent().activeSubType() === Shower.Type.Custom) {\r\n const zIndex = zIndexes.Shower.Threshold;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class ShowerDrain extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_drain';\r\n this.partName = 'Shower Drain';\r\n this.translateId = \"visualizer.bathroom.shower.shower_drain\";\r\n this.homePageTitle = 'Shower Drain';\r\n this.visible = false;\r\n this.layerPriority = 14;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerDrain())\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent();\r\n if (!showerParent.showerFloorIsActive || showerParent.showerTubComboIsActive()) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const showerParent = this.getParent();\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n })\r\n return conditions\r\n }\r\n\r\n setDefault() {\r\n const filteredFeatures = this.features.filter(f => f.matchesMetaForArrayOfConditions(this.getArrayOfConditions()));\r\n this.activeFeature = filteredFeatures[0];\r\n this.placeholderFeature = filteredFeatures[0];\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Shower.ShowerDrain;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class ShowerHead extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_head';\r\n this.partName = 'Shower Head';\r\n this.translateId = \"visualizer.bathroom.shower.shower_head\";\r\n this.layerPriority = 4;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.previouslySelectedFeatures = {\r\n Layout1: {},\r\n Layout4: {},\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerHead());\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerTubCombo = this.getParent().layout.parts[ShowerTubCombo.id];\r\n\r\n if (this.getParent().showerTubComboIsActive() && showerTubCombo && showerTubCombo.walkInTub\r\n && showerTubCombo.bottomTub === showerTubCombo.walkInTub.bottomTubId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions())\r\n || (this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n // getArrayOfConditions() {\r\n // const showerParent = this.getParent();\r\n // const activeShowerPartId = showerParent.showerTubComboIsActive() ? ShowerTubCombo.id : Shower.id;\r\n // const showerSize = showerParent.layout.parts[activeShowerPartId].showerSize();\r\n // return [{\r\n // propName: \"Shower\",\r\n // propValue: showerParent.showerTubComboIsActive()\r\n // ? [\"Tub\"]\r\n // : showerParent.isComplete() ? \"Complete\" : \"Custom\"\r\n // }, {\r\n // propName: 'ShowerSize',\r\n // propValue: showerSize\r\n // }]\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const showerParent = this.getParent();\r\n if (!IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerParent.showerSize()\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Shower.ShowerHead;\r\n }\r\n }\r\n}\r\n","import {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {METADATA, PAN_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class SoapDish extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'soap_dish';\r\n this.partName = 'Soap Dish';\r\n this.translateId = \"visualizer.bathroom.accessories.soap_dish\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n if (Array.isArray(dbFeature.metaData[\"ShowerSize\"])\r\n && (dbFeature.metaData[\"ShowerSize\"].includes('30')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('30in')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('36')\r\n || dbFeature.metaData[\"ShowerSize\"].includes('36in'))) {\r\n // we don't have L uploaded for small Shower sizes, only C, but we show L features in the navigation\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n dbFeature.metaData[\"layerPosition\"] = METADATA.LeftSide;\r\n }\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new SoapDish(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if ((showerSize === \"30\" || showerSize === \"36\") && parent.activeFeature) {\r\n parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n }\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n const showerComboParent = layout.parts[ShowerTubCombo.id];\r\n\r\n if (showerParent && showerComboParent && showerParent.showerTubComboIsActive() && showerComboParent.bottomTub === \"walk_in_tub\") {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n const conditions = this.getArrayOfConditions();\r\n if ((this.activeFeature && this.activeFeature.matchesMetaForArrayOfConditions(conditions)\r\n || (this.activeFeature && this.activeFeature.notAvailableInVisualizer && this.placeholderFeature))) {\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.SoapDish + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'corner_caddie';\r\n this.partName = 'Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerCaddie(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerCaddie + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import {SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeCornerCaddie extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'large_corner_caddie';\r\n this.partName = 'Large Corner Caddie';\r\n this.translateId = \"visualizer.bathroom.accessories.large_corner_caddie\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new LargeCornerCaddie(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n return super.setLayers(layout);\r\n }\r\n\r\n this.setDefault();\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.LargeCornerCaddie + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import {METADATA, PAN_POSITIONS, SIDE_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n// import {Shower} from \"../../parts/shower\";\r\n\r\nexport default class GrabBar extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'grab_bar';\r\n this.partName = 'Grab Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.grab_bar\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [PAN_POSITIONS[0]]: null,\r\n [PAN_POSITIONS[1]]: null,\r\n [PAN_POSITIONS[2]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Shower\"]) {\r\n dbFeature.metaData[\"Shower\"] = [\"Shower\"];\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : METADATA.LeftSide;\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === PAN_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new GrabBar(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n if (!this.disabled && this.activeFeature) {\r\n this.activeFeature.handleClick() // check soapDish\r\n }\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n handleClick(ignoreLocked) { // \"this\" is feature!! not the feature group\r\n super.handleClick(ignoreLocked);\r\n // const parent = this.getParent();\r\n // const accessoriesParent = parent.getParent();\r\n // const showerParent = accessoriesParent.layout.parts[Shower.id];\r\n // const showerSize = showerParent.showerSize();\r\n // if (showerSize !== \"60\" && parent.activeFeature) {\r\n // parent.layerPositions[parent.activeFeature.metaData[\"layerPosition\"]] = parent.activeFeature;\r\n // }\r\n // parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n checkCurrentPositions(position) {\r\n const feature = this.layerPositions[position];\r\n if (!feature) {\r\n return\r\n }\r\n const nameSplitted = feature.dbFeature.sharedFeatureName.split(\" \");\r\n const size = nameSplitted[nameSplitted.length - 1] ? nameSplitted[nameSplitted.length - 1].replace(\"in\", \"\") : \"\";\r\n const newPosition = position === SIDE_POSITIONS[0] ? SIDE_POSITIONS[1] : SIDE_POSITIONS[0];\r\n if (!size || !this.layerPositions[newPosition]) {\r\n return\r\n }\r\n if (this.layerPositions[newPosition]) {\r\n const nameSplitted2 = this.layerPositions[newPosition].dbFeature.sharedFeatureName.split(\" \");\r\n const size2 = nameSplitted2[nameSplitted2.length - 1] ? nameSplitted2[nameSplitted2.length - 1].replace(\"in\", \"\") : \"\";\r\n if (!size || (+size2 === 12 && +size === 12)) { // last chance to keep other side layer\r\n return;\r\n }\r\n }\r\n this.layerPositions[newPosition] = null;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.GrabBar + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n // showLayerPositionsModal() {\r\n // const showerParent = this.getParent().layout.parts[Shower.id];\r\n // return showerParent.showerSize() === \"60\"\r\n // }\r\n\r\n}\r\n","import {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\nimport AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class CornerShelf extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = \"corner_shelf\";\r\n this.partName = \"Corner Shelf\";\r\n this.translateId = \"visualizer.bathroom.accessories.corner_shelf\";\r\n this.dbName = \"Small Corner Shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {};\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n this.layerPositions[pos] = null\r\n })\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n dbFeature.metaData[\"layerPosition\"] = (dbFeature.metaData[\"Side\"] && dbFeature.metaData[\"Part\"])\r\n ? dbFeature.metaData[\"Side\"][0] + dbFeature.metaData[\"Part\"][0]\r\n : \"\"\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === CORNER_SHELVES_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new CornerShelf(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick() {\r\n const accessoriesParent = this.getParent().getParent();\r\n accessoriesParent.caddie_type = this.partId;\r\n super.handleClick();\r\n }\r\n\r\n setLayers(layout) {\r\n\r\n const accessoriesParent = this.getParent();\r\n if (accessoriesParent.caddie_type !== this.partId) {\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n // this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n\r\n // if (this.layerPositions) {\r\n // const windowParent = this.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n // Object.keys(this.layerPositions).forEach(key => {\r\n // if (!key.includes(\"3\") && this.layerPositions[key]) {\r\n // this.layerPositions[key].layer.src = '';\r\n // }\r\n // })\r\n // }\r\n // }\r\n\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.CornerShelf1 + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerPod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_pod';\r\n this.partName = 'Shower Pod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_pod\";\r\n this.dbName = document.kvConfig.userId === 157639 ? 'Storage Pods' : 'Storage Pod'; // window.location.href.includes(\"american_standard_website\")\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n if (accessoriesParent && accessoriesParent.largeShelf && !accessoriesParent.largeShelf.disabled) {\r\n accessoriesParent.largeShelf.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n load(dbFeature) {\r\n if (document.kvConfig.userId !== 157639 && dbFeature.groupName !== 'Storage Pod') {\r\n return false\r\n }\r\n return super.load_(dbFeature, new ShowerPod());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n handleChangeParent(nonCompatibleWith) {\r\n if (nonCompatibleWith === \"Window Kit\") {\r\n const showerPodParent = this.getParent();\r\n const accessoriesParent = showerPodParent.getParent();\r\n accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n showerPodParent.disabled = false;\r\n this.handleClick();\r\n }\r\n }\r\n\r\n disabledClick() {\r\n const accessoriesParent = this.getParent();\r\n const windowParent = accessoriesParent.layout.parts.Window;\r\n if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled) {\r\n windowParent.windowKits.disabled = true;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShowerPod;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {SIDE_POSITIONS} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {ShowerTubCombo} from \"../../parts/showerTubCombo\";\r\n\r\nexport default class Seats extends AccessoryCommon {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'shower_seats';\r\n this.partName = 'Seats';\r\n this.dbName = 'Flip-Up Seat';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_seats\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n if (isChild) {\r\n this.layerPositions = {\r\n [SIDE_POSITIONS[0]]: null,\r\n [SIDE_POSITIONS[1]]: null,\r\n };\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.groupName !== \"Flip-Up Seat\") {\r\n return false\r\n }\r\n dbFeature.metaData[\"layerPosition\"] = dbFeature.metaData[\"Side\"] ? dbFeature.metaData[\"Side\"][0] : \"\";\r\n const partNumber = dbFeature.metaData[\"layerPosition\"] === SIDE_POSITIONS[0] ? 1 : 2;\r\n return super.load_(dbFeature, new Seats(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n Object.keys(this.layerPositions).forEach(position => {\r\n if (this.layerPositions[position] && this.layerPositions[position].metaData[\"layerPosition\"]) {\r\n this.checkRelatedFeatureGroupPositions(this.layerPositions[position].metaData[\"layerPosition\"]);\r\n }\r\n })\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n super.handleClick();\r\n const parent = this.getParent();\r\n const showerComboParent = parent.getParent().layout.parts[ShowerTubCombo.id]\r\n if (showerComboParent.showerTubComboIsActive) {\r\n showerComboParent.showerTubComboIsActive = false;\r\n }\r\n parent.checkRelatedFeatureGroupPositions(this.metaData[\"layerPosition\"]);\r\n }\r\n\r\n setLayers(layout) {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerTubComboIsActive()) { // shower tub combo - remove\r\n super.hideLayers();\r\n return;\r\n }\r\n\r\n return super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes) {\r\n Object.keys(this.layerPositions).forEach((key, keyIndex) => {\r\n if (this.layerPositions[key]) {\r\n this.layerPositions[key].layer.zIndex = zIndexes.Accessories.Seats + keyIndex*10;\r\n }\r\n })\r\n }\r\n }\r\n\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\n\r\nexport default class ShowerRod extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shower_rod';\r\n this.partName = 'Shower Rod';\r\n this.translateId = \"visualizer.bathroom.accessories.shower_rod\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShowerRod());\r\n }\r\n\r\n handleClick(ignoreLocked = false) {\r\n const parent = this.getParent()\r\n const showerParent = parent.getParent().layout.parts[Shower.id];\r\n if (showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n super.handleClick(ignoreLocked);\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const parent = this.getParent();\r\n // featuresToDisplay.forEach(feature => {\r\n // if (parent.layout.parts.Window && parent.layout.parts.Window.windowKits && !parent.layout.parts.Window.windowKits.disabled) {\r\n // feature.matchesMetaFailed = true;\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Window Kit\") {\r\n // const showerRodParent = this.getParent();\r\n // const accessoriesParent = showerRodParent.getParent();\r\n // accessoriesParent.layout.parts.Window.windowKits.disabled = true;\r\n // showerRodParent.disabled = false;\r\n // this.handleClick();\r\n // }\r\n // }\r\n\r\n disabledClick() {\r\n const showerParent = this.getParent().layout.parts[Shower.id];\r\n if (!this.disabled && showerParent && showerParent.showerDoor && !showerParent.showerDoor.disabled) { // shower tub combo - remove\r\n showerParent.showerDoor.disabled = true\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShowerRod;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class WindowBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'window_body';\r\n this.partName = 'Window';\r\n this.translateId = \"visualizer.bathroom.window\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WindowBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Accessories.WindowBody;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n// import DesignNavigationItem from \"../../../../visComponents/designNavigationItem\";\r\nimport {ShowerAccessories} from \"../../parts/showerAccessories\";\r\nimport {CORNER_SHELVES_POSITIONS} from \"../../constants\";\r\n\r\nexport default class WindowKits extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"window_kits\";\r\n this.dbName = \"Window Kit\";\r\n this.partName = \"Window Kits\";\r\n this.translateId = \"visualizer.bathroom.window.kits\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new WindowKits());\r\n }\r\n\r\n // navigationSubItems(filters, searchText) {\r\n // const filteredAvailableFeatures = super.getFeaturesBySearchText(super.getFilteredFeaturesByFilters(filters), searchText);\r\n // const featuresToDisplay = super.navigationSubItemsWithFilterMultipleConditions(this.getArrayOfConditions(), filteredAvailableFeatures);\r\n // const windowParent = this.getParent();\r\n // const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n // featuresToDisplay.forEach(feature => {\r\n // if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n // feature.matchesMetaFailed = \"shower_pod\";\r\n // } else if (accessoriesParent.cornerShelf && !accessoriesParent.cornerShelf.disabled\r\n // && CORNER_SHELVES_POSITIONS.some(pos => accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\"))) {\r\n // feature.matchesMetaFailed = \"corner_shelf\";\r\n // } else if (feature.matchesMetaFailed) {\r\n // feature.matchesMetaFailed = false;\r\n // }\r\n // });\r\n // return featuresToDisplay.map(_ => new DesignNavigationItem(_.featureName, _));\r\n // }\r\n\r\n // handleChangeParent(nonCompatibleWith) {\r\n // if (nonCompatibleWith === \"Shower Pod\") {\r\n //\r\n // }\r\n // }\r\n handleChangeParent() {\r\n // this.removeInterferingParts();\r\n this.getParent().disabled = false;\r\n this.handleClick();\r\n }\r\n\r\n removeInterferingParts = () => {\r\n const kitsParent = this.getParent();\r\n const windowParent = kitsParent.getParent();\r\n const accessoriesParent = windowParent.layout.parts[ShowerAccessories.id];\r\n if (accessoriesParent) {\r\n if (accessoriesParent.showerPod) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n if (accessoriesParent.cornerShelf) {\r\n CORNER_SHELVES_POSITIONS.forEach(pos => {\r\n if (accessoriesParent.cornerShelf.layerPositions[pos] && !pos.includes(\"3\")) {\r\n accessoriesParent.cornerShelf.layerPositions[pos] = null;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // disabledClick() {\r\n // if (!this.disabled) {\r\n // this.removeInterferingParts();\r\n // }\r\n // }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const windowParent = this.getParent();\r\n const layout = windowParent.layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n // if (windowBody && this.windowNeededLayouts.includes(layout.type) && document.kvConfig.toolVersion !== 5) {\r\n // conditions.push({\r\n // propName: \"Window\",\r\n // propValue: (windowBody && windowBody.activeFeature && windowBody.disabled) ? \"Off\" : \"On\"\r\n // })\r\n // }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Accessories.WindowKits;\r\n }\r\n }\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class LargeShelf extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'large_shelf';\r\n this.partName = 'Large Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.large_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LargeShelf());\r\n }\r\n\r\n handleClick() { // \"this\" is feature!! not the feature group\r\n const parent = this.getParent();\r\n const accessoriesParent = parent.getParent();\r\n if (accessoriesParent && accessoriesParent.showerPod && !accessoriesParent.showerPod.disabled) {\r\n accessoriesParent.showerPod.disabled = true;\r\n }\r\n super.handleClick();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.LargeShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TowelBar extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'towel_bar';\r\n this.partName = 'Towel Bar';\r\n this.translateId = \"visualizer.bathroom.accessories.towel_bar\";\r\n this.canBeDisabled = true;\r\n // if (isChild) {\r\n // createParentPositions(this);\r\n // }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.TowelBar;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n}\r\n","import AccessoryCommon from \"./accessoryCommon\";\r\n\r\nexport default class ShampooShelf extends AccessoryCommon {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'shampoo_shelf';\r\n this.partName = 'Shampoo Shelf';\r\n this.translateId = \"visualizer.bathroom.accessories.shampoo_shelf\";\r\n this.visible = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new ShampooShelf());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const zIndex = zIndexes.Accessories.ShampooShelf;\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {toiletThumbnail} from '../../../bvComponent/core/assets';\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../config\";\r\n\r\nexport class Toilet extends Part {\r\n static id = 'Toilet';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.partThumbnail = toiletThumbnail;\r\n this.toilet = null;\r\n this.paperHolder = null;\r\n this.relatedItems = [];\r\n\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Toilet\": {\r\n relatedItemName = \"toilet\";\r\n RelatedItemClass = ToiletBody;\r\n break;\r\n }\r\n case \"Paper Holder\": {\r\n relatedItemName = \"paperHolder\";\r\n RelatedItemClass = PaperHolder;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts() {\r\n return this.relatedItems.map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n setDefaultPartAfterSubTypeClick() {\r\n return this.subParts()[0]\r\n }\r\n\r\n setDefault(layout) {\r\n this.relatedItems.forEach(_ => _.setDefault(layout));\r\n }\r\n}\r\n\r\nclass ToiletBody extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'toilet';\r\n this.partName = 'Toilet';\r\n this.translateId = \"visualizer.bathroom.toilet\";\r\n this.homePageTitle = 'Toilets';\r\n this.canBeDisabled = true;\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize && !IS_BATHROOM_OLD_BV_SCENE) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n if (zIndexes && this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndexes.Toilet;\r\n }\r\n }\r\n}\r\n\r\n\r\nclass PaperHolder extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'paper_holder';\r\n this.partName = 'Paper Holder';\r\n this.translateId = \"visualizer.bathroom.accessories.paper_holder\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.PaperHolder;\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport {Shower} from \"./shower\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'bathroom_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bathroom_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.bathroom.floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n\r\n getArrayOfConditions() {\r\n let conditions = super.getArrayOfConditions(); //roomLayout\r\n const layout = this.getParent().layout;\r\n const showerParent = layout.parts[Shower.id];\r\n const showerSize = showerParent.showerSize();\r\n if (showerParent && showerSize && layout.type !== 4) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: showerSize\r\n });\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.Floor;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.bathroom.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.partsLayouts = [LayoutType.Layout4];\r\n }\r\n\r\n load(dbFeature) {\r\n const partsRoomLayouts = this.partsLayouts.map(pl => \"Layout\"+pl);\r\n const isPartFeature = !dbFeature.metaData[\"RoomLayout\"] || partsRoomLayouts.some(layoutType => {\r\n return dbFeature.metaData[\"RoomLayout\"].includes(layoutType)\r\n });\r\n if (isPartFeature) {\r\n const part1 = dbFeature.metaData[\"LayerType\"] && dbFeature.metaData[\"MirrorSize\"];\r\n const partNumber = part1 ? 1 : 2;\r\n return super.load_(dbFeature, new LeftWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new LeftWall(false, 1, true, \"features\"));\r\n }\r\n\r\n availableFeatures(features) {\r\n return features.filter(feature => feature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const layout = this.getParent().layout;\r\n const isPartsLayout = this.partsLayouts.includes(layout.type);\r\n if (zIndexes) {\r\n const zIndex = isPartsLayout ? zIndexes.Walls.LeftWall : zIndexes.Background.LeftWall;\r\n const zIndex2 = zIndexes.Background.LeftWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Vanity} from \"../../parts/vanity\";\r\nimport {LayoutType} from \"../../constants\";\r\nimport {Shower} from \"../../parts/shower\";\r\nimport {IS_BATHROOM_OLD_BV_SCENE} from \"../../../../../config\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.bathroom.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.partsLayouts = [LayoutType.Layout1];\r\n }\r\n\r\n load(dbFeature) {\r\n const partsRoomLayouts = this.partsLayouts.map(pl => \"Layout\"+pl);\r\n const isPartFeature = !dbFeature.metaData[\"RoomLayout\"] || partsRoomLayouts.some(layoutType => {\r\n return dbFeature.metaData[\"RoomLayout\"].includes(layoutType)\r\n });\r\n if (isPartFeature) {\r\n const part1 = dbFeature.metaData[\"LayerType\"] && dbFeature.metaData[\"MirrorSize\"];\r\n const partNumber = part1 ? 1 : 2;\r\n return super.load_(dbFeature, new RightWall(false, partNumber),\r\n true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n return super.load_(dbFeature, new RightWall(false, 1, true, \"features\"));\r\n }\r\n\r\n availableFeatures(cabinetFeatures) {\r\n return cabinetFeatures.filter(cabinetFeature => cabinetFeature.partNumber === 1)\r\n }\r\n\r\n setLayers(layout) {\r\n if (this.activeFeature && (this.activeFeature.matchesMetaForArrayOfConditions(this.getArrayOfConditions()))) {\r\n this.checkIfFeaturePartIsMatching();\r\n super.setLayers(layout);\r\n } else {\r\n this.setDefault();\r\n super.setLayers(layout);\r\n }\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions();\r\n const wallsParent = this.getParent();\r\n const layout = wallsParent.layout;\r\n const mirror = layout.parts[Vanity.id] && layout.parts[Vanity.id].mirror;\r\n if (this.partsLayouts.includes(layout.type) && mirror && mirror.activeFeature && mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"]) {\r\n conditions.push({\r\n propName: \"MirrorSize\",\r\n propValue: IS_BATHROOM_OLD_BV_SCENE\r\n ? mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0]\r\n : mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0] === \"32\" ? \"48\" : mirror.activeFeature.dbFeature.metaData[\"MirrorSize\"][0]\r\n })\r\n }\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions;\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n return this.getActiveFeaturePartsAccordingToActiveFeature(fromFeature, activeFeatureConditions);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n const layout = this.getParent().layout;\r\n const isPartsLayout = this.partsLayouts.includes(layout.type);\r\n if (zIndexes) {\r\n const zIndex = isPartsLayout ? zIndexes.Walls.RightWall : zIndexes.Background.RightWall;\r\n const zIndex2 = zIndexes.Background.RightWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n if (activeFeaturePart && activeFeaturePart.layer) {\r\n activeFeaturePart.layer.zIndex = zIndex2;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {Shower} from \"../../parts/shower\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Background.CenterWall;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n}\r\n","import {Shower} from \"../../parts/shower\";\r\nimport {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CeilingPanels extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'ceiling_panels';\r\n this.partName = 'Ceiling Panels';\r\n this.translateId = \"visualizer.bathroom.ceiling_panels\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (dbFeature.metaData && dbFeature.metaData[\"Coords\"]) {\r\n dbFeature.metaData[\"Coords\"] = null;\r\n }\r\n return super.load_(dbFeature, new CeilingPanels());\r\n }\r\n\r\n getArrayOfConditions() {\r\n const conditions = super.getArrayOfConditions(); // roomLayout\r\n const shower = this.getParent().layout.parts[Shower.id];\r\n if (shower && shower.showerSize()) {\r\n conditions.push({\r\n propName: \"ShowerSize\",\r\n propValue: shower.showerSize()\r\n })\r\n }\r\n return conditions\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if(zIndexes) {\r\n const zIndex = zIndexes.Walls.CeilingPanels;\r\n if (this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndex;\r\n }\r\n if (this.placeholderFeature) {\r\n this.placeholderFeature.layer.zIndex = zIndex;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\n// import ToiletPaper from \"../subparts/globals/toiletPaper\";\r\n// import Towel from \"../subparts/globals/towel\";\r\nimport LightFixture from \"../subparts/globals/lightFixture\";\r\nimport DecorWindow from \"../subparts/globals/decorWindow\";\r\nimport DecorSeat from \"../subparts/globals/decorSeat\";\r\n// import ToiletPaperHolder from \"../subparts/globals/toiletPaperHolder\";\r\nimport LampFixture from \"../subparts/globals/lampFixture\";\r\nimport Attachment from \"../subparts/globals/attachment\";\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n // this.toiletPaper = null;\r\n this.towel = null;\r\n this.lightFixture = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n case \"Decore\": {\r\n // if (dbFeature.displayName.includes(\"Towel\")) {\r\n // relatedItemName = \"towel\";\r\n // RelatedItemClass = Towel;\r\n // } else if (dbFeature.displayName.includes(\"Toilet Paper\")) {\r\n // relatedItemName = \"toiletPaper\";\r\n // RelatedItemClass = ToiletPaper;\r\n // } else if (dbFeature.displayName.includes(\"Toilet Paper Holder\")) {\r\n // relatedItemName = \"toiletPaperHolder\";\r\n // RelatedItemClass = ToiletPaperHolder;\r\n // } else\r\n if (dbFeature.displayName.includes(\"Light Fixture\")) {\r\n relatedItemName = \"lightFixture\";\r\n RelatedItemClass = LightFixture;\r\n } else if (dbFeature.displayName.includes(\"Lamp fixture\")) {\r\n relatedItemName = \"lampFixture\";\r\n RelatedItemClass = LampFixture;\r\n } else if (dbFeature.displayName.includes(\"Seat\")) {\r\n relatedItemName = \"lightFixture\";\r\n RelatedItemClass = DecorSeat;\r\n } else if (dbFeature.displayName.includes(\"Window\")) {\r\n relatedItemName = \"decorWindow\";\r\n RelatedItemClass = DecorWindow;\r\n }\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LightFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"light_fixture\";\r\n this.partName = \"Light Fixture\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LightFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.LightFixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {LayoutType} from \"../../constants\";\r\n\r\nexport default class DecorWindow extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"decor_window\";\r\n this.partName = \"Decor Window\";\r\n if (isChild) {\r\n this.showOnLayouts = [LayoutType.Layout4];\r\n }\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new DecorWindow());\r\n }\r\n\r\n setLayers(layout) {\r\n if (!this.showOnLayouts.includes(layout.type)) {\r\n super.hideLayers();\r\n return;\r\n }\r\n super.setLayers(layout);\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.DecorWindow;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class DecorSeat extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"decor_seat\";\r\n this.partName = \"Decor Seat\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new DecorSeat());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.DecorSeat;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LampFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"lamp_fixture\";\r\n this.partName = \"Lamp Fixture\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LampFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.LampFixture;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport {METADATA} from \"../../constants\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Side\"] && dbFeature.sharedFeatureName.includes(\"ountertop\")) {\r\n dbFeature.metaData[\"Side\"] = [METADATA.LeftSide];\r\n }\r\n return super.load(dbFeature);\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Globals.Towel;\r\n }\r\n let increase = 0;\r\n if (this.hasAdditionalParts && this.activeFeatureParts && this.activeFeatureParts.length) {\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.layer.zIndex = zIndexes.Globals.Towel + increase;\r\n increase = increase + 0.000001;\r\n });\r\n // console.log(\"this.activeFeatureParts\", this.activeFeatureParts);\r\n }\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n // console.log(\"selectFrom\", selectFrom);\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n// import {BathTubType, LayoutType} from \"../constants\";\r\nimport {bathTubThumbnail} from \"../../../bvComponent/core/assets\";\r\n\r\nimport BathTubBody from \"../subparts/bathTub/bathTubBody\";\r\nimport BathTubFixture from \"../subparts/bathTub/bathTubFixture\";\r\n\r\nexport class Bathtub extends Part {\r\n static id = 'Bathtub';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub\";\r\n this.partThumbnail = bathTubThumbnail;\r\n this.bathTubBody = null;\r\n this.bathTubFixture = null;\r\n this.relatedItems = [];\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Bathtub\":\r\n relatedItemName = \"bathTubBody\";\r\n RelatedItemClass = BathTubBody;\r\n break;\r\n case \"Bathtub Fixture\":\r\n relatedItemName = \"bathTubFixture\";\r\n RelatedItemClass = BathTubFixture;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n changeLayout() {\r\n // changeLayout(layoutType) {\r\n // if (layoutType === LayoutType.Layout1 && this.bathTubBody) {\r\n // // this.activeSubType_ = BathTubType.Custom60in;\r\n // // this.bathTubType_ = BathTubType.Custom60in;\r\n // if (!this.layout.parts.Shower.showerBody.disabled) { // disable bathtub if shower is active\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = true;\r\n // }\r\n // }\r\n // } else {\r\n // if (this.bathTubBody) {\r\n // this.bathTubBody.disabled = false;\r\n // }\r\n // }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BathTubBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_body\";\r\n this.partName = 'Bathtub';\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubBody());\r\n }\r\n\r\n disabledClick() {\r\n const bathTubFixture = this.getParent().bathTubFixture;\r\n if (bathTubFixture) {\r\n bathTubFixture.disabled = this.disabled;\r\n }\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Bathtub.BathTubBody;\r\n }\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BathTubFixture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"bathtub_fixture\";\r\n this.partName = \"Fixture\";\r\n this.translateId = \"visualizer.bathroom.bathtub.bathtub_fixture\";\r\n this.dbName = \"Bathtub Fixture\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BathTubFixture());\r\n }\r\n\r\n setZIndex(zIndexes) {\r\n if (zIndexes && this.activeFeature) {\r\n this.activeFeature.layer.zIndex = zIndexes.Bathtub.BathTubFixture;\r\n }\r\n }\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenu from \"./contextMenu\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\"\r\n || hoveredZone === \"vanity_custom\"\r\n || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\"\r\n || hoveredZone === \"shower_pony_wall\"\r\n || hoveredZone === \"wall_b_custom\"\r\n || hoveredZone === \"left_wall_custom\")\r\n && !this.state.showNavigation\r\n ) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n let contextMenuOpen = '';\r\n let ponyWallGroup = false;\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.openContextMenu(contextMenuOpen, ponyWallGroup, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, ponyWallGroup, event) => {\r\n const hoveredParent = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === contextMenuOpen\r\n });\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen === \"Shower Body Selection\") {\r\n contextMenuButtons = this.getShowerBodySelectionButtons()\r\n } else if (contextMenuOpen === \"wall_b_custom\") {\r\n contextMenuButtons = [1, 2, 3]\r\n } else {\r\n contextMenuButtons = hoveredParent.part.subParts();\r\n }\r\n if (contextMenuOpen === \"Shower\" || contextMenuOpen === \"Shower Tub Combo\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return ponyWallGroup ? menuButton.part.isPonyWallPart && menuButton.part.partId !== \"pony_wall\" : !menuButton.part.isPonyWallPart\r\n });\r\n }\r\n if (contextMenuOpen === \"Vanity\") {\r\n contextMenuButtons = contextMenuButtons.filter(menuButton => {\r\n return menuButton.part.partId !== \"vanity_mirror\" && menuButton.part.partId !== \"vanity_backsplash\";\r\n });\r\n }\r\n\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuPonyWall: ponyWallGroup,\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item); // set active feature\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n if (window.location.href.includes(\"new_bathroom_2021.quotesflooring\") || document.kvConfig.userId === 140045) {\r\n availableNavButtons.push(ContentType.RoomScene)\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {this.props.bvOpened ? : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React, {useEffect, useState} from \"react\";\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {CORNER_SHELVES_POSITIONS, PAN_POSITIONS, SIDE_POSITIONS} from \"../../bvSceneComponent/core/constants\";\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport {changeMessageBoxState, updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\n\r\nconst getPositionName = (position) => {\r\n switch (position) {\r\n case CORNER_SHELVES_POSITIONS[0]:\r\n case CORNER_SHELVES_POSITIONS[3]:\r\n return \"modalCheckboxPosition.top\"\r\n case CORNER_SHELVES_POSITIONS[1]:\r\n case CORNER_SHELVES_POSITIONS[4]:\r\n return \"modalCheckboxPosition.center\"\r\n case CORNER_SHELVES_POSITIONS[2]:\r\n case CORNER_SHELVES_POSITIONS[5]:\r\n return \"modalCheckboxPosition.bottom\"\r\n case SIDE_POSITIONS[0]:\r\n case PAN_POSITIONS[0]:\r\n return \"modalCheckboxPosition.left\"\r\n case SIDE_POSITIONS[1]:\r\n case PAN_POSITIONS[2]:\r\n return \"modalCheckboxPosition.right\"\r\n case PAN_POSITIONS[1]:\r\n return \"modalCheckboxPosition.center\"\r\n }\r\n return \"\"\r\n};\r\n\r\nconst NavItemPositionModalButton = (props) => {\r\n\r\n const {position, parent, checkboxesUpdated, updateCheckboxes, changeMessageBoxState, intl, updateCanvasCount,\r\n activeFeature} = props;\r\n const [checked, setChecked] = useState(false);\r\n const positionName = getPositionName(position);\r\n\r\n const updateChecked = () => {\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n const isChecked = parent.oneLayerPosition\r\n ? !parent.disabled && (parent.activeFeature && (parent.activeFeature.dbFeature.metaData[\"layerPosition\"] === position))\r\n && matchingPositionFeature && (matchingPositionFeature.getSplittedFeatureName() === parent.activeFeature.getSplittedFeatureName())\r\n : !parent.disabled && parent.layerPositions && !!parent.layerPositions[position] && matchingPositionFeature\r\n && (matchingPositionFeature.getSplittedFeatureName() === parent.layerPositions[position].getSplittedFeatureName())\r\n\r\n setChecked(isChecked)\r\n };\r\n\r\n useEffect(() => {\r\n updateChecked();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [checkboxesUpdated, position, activeFeature]);\r\n\r\n const buttonClick = (event, fromConflictingPopup = false) => {\r\n if (parent.conflictingPositions && !fromConflictingPopup) { // shower_seats & valve_trim\r\n const conflictingPositions = parent.checkConflictingPosition(position, activeFeature);\r\n if (conflictingPositions.length) {\r\n callConflictingPopup(conflictingPositions);\r\n return\r\n }\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick(); // disable also related parts\r\n if (!parent.oneLayerPosition) {\r\n Object.keys(parent.layerPositions).forEach(key => {\r\n if (key !== position) {\r\n parent.layerPositions[key] = null; // it can be only on one side on enable (if old feature exist and we clicked on another one)\r\n }\r\n })\r\n }\r\n }\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n if (parent.oneLayerPosition) {\r\n matchingPositionFeature.handleClick(true); // to apply not compatible and so on // ignore locked as we it should be visible if clicked feature is unlocked\r\n } else {\r\n if (parent.isShowerCommonGroup && matchingPositionFeature && !checked) {\r\n if (parent.partId === \"shower_arm\") {\r\n parent.checkForSameMountPosition(matchingPositionFeature); // this removes different mount position features\r\n }\r\n matchingPositionFeature.handleClick(true); // set active feature and shower head type\r\n } else if (parent.partId === \"shower_fixture\" && matchingPositionFeature && !checked && parent.getParent().setShowerHeadType) {\r\n // parent.getParent().setShowerHeadType(ShowerHeadTypes.shower_fixture);\r\n matchingPositionFeature.handleClick(true); // set active feature and shower head type\r\n } else if (parent.partId === \"replacement_tub_fixture\") {\r\n matchingPositionFeature.handleClick(true); // set tub combo // ignore locked as we it should be visible if clicked feature is unlocked\r\n }\r\n parent.layerPositions[position] = checked ? null : matchingPositionFeature;\r\n if (parent.isShowerCommonGroup) { // tool version 6 for now only\r\n if (parent.partId === \"shower_head\") {\r\n parent.togglePosition(position, \"shower_arm\");\r\n } else if (parent.partId === \"shower_arm\") {\r\n parent.togglePosition(position, \"shower_head\");\r\n } else if (parent.partId === \"hand_shower_only\") {\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"shower_hose\") {\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"hand_shower_holder\") {\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"wall_union\");\r\n } else if (parent.partId === \"wall_union\") {\r\n parent.togglePosition(position, \"hand_shower_only\");\r\n parent.togglePosition(position, \"shower_hose\");\r\n parent.togglePosition(position, \"hand_shower_holder\");\r\n }\r\n }\r\n // && (!matchingPositionFeature || (parent.layerPositions[position].dbFeature.id === matchingPositionFeature.dbFeature.id))) { //already selected\r\n }\r\n // const checkRelatedFeatureGroups = [\"grab_bar\", \"soap_dish\", \"shower_seats\", \"large_corner_seat\"];\r\n const checkRelatedFeatureGroups = [\"shower_seats\", \"large_corner_seat\"];\r\n if (checkRelatedFeatureGroups.includes(parent.partId)) {\r\n parent.checkRelatedFeatureGroupPositions(position);\r\n // if (parent.partId === \"grab_bar\") {\r\n // parent.checkCurrentPositions(position);\r\n // }\r\n }\r\n if (parent.partId === \"grab_bar\" && parent.checkCenterGrabWall) {\r\n parent.checkCenterGrabWall(position);\r\n }\r\n updateCheckboxes();\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n updateCanvasCount();\r\n };\r\n\r\n let checkboxDisabled = false;\r\n // if (parent.partId === \"corner_shelf\") { // disable top & center\r\n // const windowParent = parent.getParent().layout.parts.Window;\r\n // if (windowParent && windowParent.windowKits && !windowParent.windowKits.disabled && !position.includes(\"3\")) {\r\n // checkboxDisabled = true;\r\n // }\r\n // }\r\n if (parent.partId === \"shower_head\") { // disable top & center\r\n const showerArm = parent.getParent().showerArm;\r\n if (showerArm && !showerArm.disabled && showerArm.layerPositions && !showerArm.getMatchingPositionFeature(position)) {\r\n // we can't use !showerArm.layerPositions[position] because if we disable in modal ope position - it becomes disabled\r\n checkboxDisabled = true;\r\n }\r\n }\r\n\r\n const callConflictingPopup = (conflictingPositions) => {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: activeFeature.partId === \"shower_seats\" ? \"Seat\" : activeFeature.getParent().partName,\r\n featureName: activeFeature.getFeatureName(),\r\n nonCompatibleWith: conflictingPositions[0].getParent().partName,\r\n };\r\n changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n changeMessageBoxState({visible:false});\r\n }\r\n }, {\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n parent.applyConflictingPosition(position, activeFeature);\r\n buttonClick({}, true);\r\n changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n })\r\n }\r\n\r\n const disabledCheckboxClick = () => {\r\n if (parent.partId === \"corner_shelf\") { // disable top & center\r\n const matchingPositionFeature = parent.getMatchingPositionFeature(position, activeFeature);\r\n\r\n const featureIsLocked = getFeatureIsLocked(matchingPositionFeature);\r\n if (!featureIsLocked) {\r\n const message = {\r\n id: \"messageBox.metaDataMatchesFailed\",\r\n featureGroup: matchingPositionFeature.getParent().partName,\r\n featureName: intl.formatMessage({id: positionName}) + \" \" + matchingPositionFeature.getFeatureName(),\r\n nonCompatibleWith: \"Window Kit\"\r\n };\r\n changeMessageBoxState({\r\n visible: true,\r\n message,\r\n buttons: [{\r\n text: \"messageBox.buttonYes\",\r\n color: 'green',\r\n click: () => {\r\n const windowParent = parent.getParent().layout.parts.Window;\r\n windowParent.windowKits.disabled = true;\r\n buttonClick();\r\n changeMessageBoxState({visible:false});\r\n }\r\n },{\r\n text: \"messageBox.buttonNo\",\r\n color: \"blue\",\r\n click: () => {\r\n changeMessageBoxState({visible:false});\r\n }\r\n }]\r\n });\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nNavItemPositionModalButton.propTypes = {\r\n position: PropTypes.string.isRequired,\r\n parent: PropTypes.object.isRequired,\r\n checkboxesUpdated: PropTypes.bool.isRequired,\r\n updateCheckboxes: PropTypes.func.isRequired,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeMessageBoxState,\r\n updateCanvasCount,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModalButton)\r\n)\r\n","import React from \"react\";\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport ActionTypes from \"../../../misc/actionTypes\";\r\nimport {updateCanvasCount} from \"../../../actions/actionFunctions\";\r\nimport {featureInterface} from \"../../../interfaces/featureInterface\";\r\nimport {SLAT_WALL_POSITIONS} from \"../../commonVisualizer/core/constants\";\r\n\r\nconst NavItemPositionModalSlatWall = (props) => {\r\n\r\n const {parent, updateCheckboxes, updateCanvasCount, styles, triangleStyles, isWizard, activeFeature} = props;\r\n\r\n let checkboxDisabled = false;\r\n\r\n const isCurrentFeatureActive = parent.activeFeature && activeFeature\r\n && (activeFeature.getSplittedFeatureName() === parent.activeFeature.getSplittedFeatureName());\r\n\r\n const buttonClick = (position) => {\r\n if (checkboxDisabled) {\r\n return\r\n }\r\n if (parent.disabled) {\r\n parent.disabled = false;\r\n parent.disabledClick(); // disable also related parts\r\n }\r\n if (!isCurrentFeatureActive && activeFeature) {\r\n activeFeature.handleClick(); // to apply not compatible and so on\r\n }\r\n parent.slatWallType = position;\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n updateCheckboxes();\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n updateCanvasCount();\r\n };\r\n\r\n const getSlatWallButton = (position) => {\r\n const checkboxDisabled = false;\r\n const checked = isCurrentFeatureActive && (parent.slatWallType === position);\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n

    Side

    \r\n
    \r\n {SLAT_WALL_POSITIONS.slice(0, 2).map((position) => getSlatWallButton(position))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {SLAT_WALL_POSITIONS.slice(2, 4).map((position) => getSlatWallButton(position))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavItemPositionModalSlatWall.propTypes = {\r\n styles: PropTypes.object,\r\n triangleStyles: PropTypes.object,\r\n parent: PropTypes.object.isRequired,\r\n isWizard: PropTypes.bool,\r\n checkboxesUpdated: PropTypes.bool.isRequired,\r\n updateCheckboxes: PropTypes.func.isRequired,\r\n activeFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n navItemPositionModal: store.navigationState.navItemPositionModal\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(NavItemPositionModalSlatWall)\r\n)\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading, toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenu from \"./contextMenu\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../core/constants\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport LookAllWallsRadioButton from \"../../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n const layout = getCurrentLayout();\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const layoutType = layout.getCurrentLayoutName();\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(layoutType, document.hoveredLayer);\r\n let ponyWallGroup = false;\r\n\r\n if (hoveredZone) {\r\n if ((hoveredZone === \"shower_custom\" || hoveredZone === \"vanity_custom\" || hoveredZone === \"bathtub_custom\"\r\n || hoveredZone === \"shower_combo\" || hoveredZone === \"shower_pony_wall\" || hoveredZone === \"left_wall_custom\"\r\n || hoveredZone === \"wall_b_custom\") && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = '';\r\n switch (hoveredZone) {\r\n case \"shower_custom\":\r\n case \"shower_combo\":\r\n case \"shower_pony_wall\": {\r\n const showerGroup = this.state.designNavigationItems.find(navItem => {\r\n return navItem.text === \"Shower\"\r\n });\r\n contextMenuOpen = showerGroup.part.showerTubComboIsActive() ? \"Shower Tub Combo\" : \"Shower\";\r\n if (hoveredZone === \"shower_pony_wall\") {\r\n ponyWallGroup = true;\r\n }\r\n break;\r\n }\r\n case \"vanity_custom\":\r\n contextMenuOpen = \"Vanity\";\r\n break;\r\n case \"bathtub_custom\":\r\n contextMenuOpen = \"Bathtub\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"Shower Body Selection\";\r\n break;\r\n case \"wall_b_custom\":\r\n contextMenuOpen = \"wall_b_custom\";\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n contextMenuPonyWall: ponyWallGroup,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, ponyWallGroup)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n this.props.setActiveFeature(item.part); // set feature for modal\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize();\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize();\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP_BATHROOM.includes(activeSubPart.partId);\r\n // console.log(\"isCountertop\", isCountertop);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n {this.props.bvOpened ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\nimport $ from \"jquery\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading, toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuQKB from \"./contextMenuQKB\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../core/constants\";\r\nimport CountertopSwitchers from \"../../kvComponent/navigation/countertopSwitchers\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport LookAllWallsRadioButton from \"../lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n checkForContextMenu = (hoveredLayer, event) => {\r\n if (this.props.contextMenu.opened) {\r\n this.props.setLookContextMenu({\r\n opened: false\r\n })\r\n return true\r\n }\r\n if (!hoveredLayer || this.state.showNavigation) {\r\n return false\r\n }\r\n\r\n const {showButtons} = checkForContextMenuCommon(hoveredLayer.partId, hoveredLayer.layerPosition);\r\n if ((showButtons.length > 1) && !(hoveredLayer.partId && hoveredLayer.partId === \"vanity_legs\")) {\r\n this.props.setLookContextMenu({\r\n opened: true,\r\n partId: hoveredLayer.partId,\r\n layerPosition: hoveredLayer.layerPosition, // if needed\r\n position: {\r\n x: event.clientX,\r\n y: event.clientY,\r\n }\r\n });\r\n return true\r\n } else if (showButtons.length === 1 && showButtons[0].includes(\"_wizard\")) {\r\n // const wizardId = showButtons[0].split(\"-\")[1];\r\n // setWizardActiveItem(wizardList.find(wizardItem => wizardItem.id === wizardId));\r\n //\r\n // history.push(`${getLookIdUrl(false) + ROUTES.wizard}/${wizardId}`);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n handleContextMenuClick = (featureToClick, partId) => {\r\n const layout = getCurrentLayout();\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n clickedButton = featureGroup.partName;\r\n clickedParent = featureGroup.getParent().partName;\r\n }\r\n //\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n if (!clickedButton) {\r\n return\r\n }\r\n // console.log('menuItem', menuItem);\r\n // if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n // this.ponyWallAndLeftWallClick(menuItem);\r\n // }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (featureToClick && !isBacksplash) {\r\n featureToClick.handleClick();\r\n }\r\n });\r\n };\r\n\r\n bindCanvasClick = (event) => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.props.contextMenu.opened) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n\r\n if (this.checkForContextMenu(document.hoveredLayer, event)) {\r\n return false\r\n }\r\n\r\n const hoveredPartId = document.hoveredLayer.partId;\r\n\r\n if (hoveredPartId) {\r\n if (this.state.contentType === 0) {\r\n this.openMobileMenu();\r\n }\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(hoveredPartId);\r\n if (featureGroup) {\r\n this.triggerOpenNavigationMenu(featureGroup.partName, featureGroup.getParent().partName)\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(featureGroup.partName.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n const layout = getCurrentLayout();\r\n //console.log('item', item);\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n this.props.setActiveFeature(item.part); // set feature for modal\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"] ? item.part.metaData[\"SinkSize\"][0] : null;\r\n if (sinkSizeConditionValue && !this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n this.callMetaMathesFailedPopup(item, 'faucet');\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize(item.part);\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize(item.part);\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked)\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n handleSubPartClick = subNavigationItem => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if ((subItemPart.getParent() && subItemPart.getParent().partName === \"Walls\")\r\n || subItemPart.partName === \"Accent Wall\" && !window.canvasIsDragging) {\r\n this.props.setCanvasClass(subNavigationItem.text.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const isCountertop = activeSubPart && COUNTERTOP_GROUP_BATHROOM.includes(activeSubPart.partId);\r\n // console.log(\"isCountertop\", isCountertop);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n \r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n {this.props.bvOpened ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n countertopsApplyTo: store.navigationState.countertopsApplyTo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n contextMenu,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal,\r\n setLookContextMenu,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import React, {useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\n// import IconButton from \"@mui/material/IconButton\";\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\n\r\nimport {\r\n CONTEXT_MENU_VANITY_BUTTONS,\r\n CONTEXT_MENU_VANITY_ONLY,\r\n // CONTEXT_MENU_SHOWER_ALL,\r\n // CONTEXT_MENU_SHOWER_OTHER,\r\n LOOK_ROOM_TYPES,\r\n} from \"../core/constants\";\r\nimport {getCurrentLayout, getCurrentRoomType} from \"../../appLayout\";\r\n// import {getLookIdUrl} from \"./lookFunctions2\";\r\n// import {ROUTES} from \"../../../routes\";\r\nimport {getCommonVisualizerType} from \"../../../config\";\r\nimport {checkIfLookFeaturesReceived} from \"../../../api/look-api\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport goToMaterialPage from \"../../common/goToMaterialPage\";\r\n\r\n\r\nconst needToRequestFeatureGroupsOnClick = [\"vanity_washstand\", \"vanity_console\", \"shower_arm\", \"shower_head\"];\r\n\r\nconst ContextMenuQKBButtons = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, buttons, setButtons, handleContextMenuClick, activeQuoteIndex,\r\n renderGreenLayerByZindex} = props;\r\n\r\n const {partId, layerPosition} = contextMenu;\r\n const anchorRef = useRef(null);\r\n const [vanitySubMenuOpened, setVanitySubMenuOpened] = useState(false);\r\n const layout = getCurrentLayout();\r\n\r\n const {allButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n const isBathroom = getCommonVisualizerType() === \"bathroom\";\r\n const isVanity = isBathroom && CONTEXT_MENU_VANITY_BUTTONS.includes(partId);\r\n // const isShower = isBathroom && (CONTEXT_MENU_SHOWER_ALL.includes(partId) || CONTEXT_MENU_SHOWER_OTHER.includes(partId));\r\n\r\n const contextButtonClick = async (clickedButton) => {\r\n // console.log(\"currentPartId\", currentPartId);\r\n\r\n const {partId, isWizard, wizardId, hasSubMenu} = clickedButton;\r\n\r\n if (((isVanity && CONTEXT_MENU_VANITY_ONLY.includes(partId)) || hasSubMenu) && !vanitySubMenuOpened) {\r\n setVanitySubMenuOpened(true);\r\n if (isVanity) {\r\n const vanButtons = allButtons.filter(button => CONTEXT_MENU_VANITY_ONLY.includes(button.partId));\r\n if (vanButtons.length && vanButtons.length > 1) {\r\n setButtons(vanButtons);\r\n return false\r\n }\r\n } else if (partId === \"accessories\") {\r\n const {showButtons} = checkForContextMenuCommon(\"grab_bar\", layerPosition);\r\n setButtons(showButtons);\r\n return false\r\n }\r\n } else if (vanitySubMenuOpened) {\r\n // setVanitySubMenuOpened(false);\r\n }\r\n\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n clickedOnItem: partId,\r\n });\r\n\r\n let openPartId = partId;\r\n let clickedFeature = null;\r\n\r\n if (isVanity && (getCurrentRoomType(layout) === LOOK_ROOM_TYPES.as) && (partId === \"vanity_pedestal_sink\" || partId === \"vanity_sink\")) {\r\n openPartId = \"vanity_sink\";\r\n const sinkParent = layout.getFeatureGroupByPartId(openPartId);\r\n if (sinkParent) {\r\n const navItems = layout.designNavigationItems({part: sinkParent}, null, null, sinkParent.activeFeature);\r\n if (partId === \"vanity_pedestal_sink\") {\r\n const pedestalSink = navItems.find(navItem => {\r\n return navItem.part.metaData[\"MountType\"] && navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n });\r\n if (pedestalSink) {\r\n clickedFeature = pedestalSink.part;\r\n }\r\n } else {\r\n const isPedestal = sinkParent.activeFeature && sinkParent.activeFeature.metaData[\"MountType\"] && sinkParent.activeFeature.metaData[\"MountType\"].includes(\"ST\");\r\n if (isPedestal) {\r\n const regularSink = navItems.find(navItem => {\r\n return !navItem.part.metaData[\"MountType\"] || !navItem.part.metaData[\"MountType\"].includes(\"ST\")\r\n });\r\n if (regularSink) {\r\n clickedFeature = regularSink.part;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (isWizard) {\r\n goToMaterialPage(\"visualizer\", false, null, \"\",\r\n {wizardItemId: wizardId, quoteIndex: activeQuoteIndex});\r\n return false\r\n }\r\n\r\n const featureGroup = layout.getFeatureGroupByPartId(openPartId);\r\n if (featureGroup && !featureGroup.allFeaturesReceived && needToRequestFeatureGroupsOnClick.includes(openPartId)) {\r\n loaderEnable();\r\n await checkIfLookFeaturesReceived(featureGroup);\r\n loaderDisable();\r\n }\r\n\r\n // console.log(\"zoomedFeature\", clickedFeature);\r\n handleContextMenuClick(clickedFeature, openPartId);\r\n };\r\n\r\n const onMouseOver = (button) => {\r\n if (renderGreenLayerByZindex) {\r\n const featureGroup = layout.getFeatureGroupByPartId(button.partId);\r\n if (featureGroup && featureGroup.activeFeature && featureGroup.activeFeature.layer) {\r\n renderGreenLayerByZindex(featureGroup.activeFeature.layer.zIndex, button.partId);\r\n }\r\n }\r\n }\r\n\r\n let contextMenuStyles = buttons.length === 14 ? {maxWidth:\"210px\"} : null;\r\n\r\n console.log(\"buttons\", buttons);\r\n\r\n return (\r\n
    \r\n
    \r\n {buttons.map(button => {\r\n const isVanityParent = isVanity && CONTEXT_MENU_VANITY_ONLY.includes(button.partId);\r\n return (\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKBButtons.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n setButtons: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {wizardList} = store.wizardState;\r\n const fabricatorData = store.fabricatorState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n\r\n return {\r\n contextMenu,\r\n isMobile,\r\n wizardList,\r\n fabricatorData,\r\n activeQuoteIndex,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKBButtons)\r\n )\r\n)\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setNavigationViewType,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n updateCanvasCount\r\n} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuQKB from \"./contextMenuQKB\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\nimport {Vanity} from \"../core/parts/vanity\";\r\nimport NavItemPositionModal from \"../../visComponents/navigation/navItemPositionModal\";\r\nimport {checkForContextMenuCommon} from \"../lookNavigation/lookFunctions\";\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\nimport goToMaterialPage from \"../../common/goToMaterialPage\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n if (this.checkForContextMenu(document.hoveredLayer, event)) {\r\n return false\r\n }\r\n\r\n const hoveredPartId = document.hoveredLayer.partId;\r\n\r\n if (hoveredPartId) {\r\n if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(hoveredPartId);\r\n if (featureGroup) {\r\n this.triggerOpenNavigationMenu(featureGroup.partName, featureGroup.getParent().partName)\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n checkForContextMenu = (hoveredLayer, event) => {\r\n if (this.props.contextMenu.opened) {\r\n this.props.setLookContextMenu({\r\n opened: false\r\n })\r\n return true\r\n }\r\n if (!hoveredLayer) {\r\n return false\r\n }\r\n\r\n const {showButtons} = checkForContextMenuCommon(hoveredLayer.partId, hoveredLayer.layerPosition);\r\n if ((showButtons.length > 1) && !(hoveredLayer.partId && hoveredLayer.partId === \"vanity_legs\")) {\r\n this.props.setLookContextMenu({\r\n opened: true,\r\n partId: hoveredLayer.partId,\r\n layerPosition: hoveredLayer.layerPosition, // if needed\r\n position: {\r\n x: event.clientX,\r\n y: event.clientY,\r\n }\r\n });\r\n return true\r\n } else if (showButtons.length === 1 && showButtons[0].isWizard) {\r\n goToMaterialPage(\"visualizer\", false, null, \"\",\r\n {wizardItemId: showButtons.wizardId, quoteIndex: this.props.activeQuoteIndex});\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n handleContextMenuClick = (featureToClick, partId) => {\r\n const layout = getCurrentLayout();\r\n let clickedParent = \"\", clickedButton = \"\";\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n if (featureGroup) {\r\n clickedButton = featureGroup.partName;\r\n clickedParent = featureGroup.getParent().partName;\r\n }\r\n // console.log('clickedButton', clickedButton);\r\n // console.log('clickedParent', clickedParent);\r\n if (!clickedButton) {\r\n return\r\n }\r\n // console.log('menuItem', menuItem);\r\n // if (clickedParent === \"Walls\" && (clickedButton === \"Left Shower Wall\" || clickedButton === \"Pony Wall\")) {\r\n // this.ponyWallAndLeftWallClick(menuItem);\r\n // }\r\n\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.menuOpened();\r\n this.triggerOpenNavigationMenu(clickedButton, clickedParent);\r\n $(document).on('click', this.handleWrapperBlur);\r\n this.setNewActiveFeature();\r\n if (featureToClick && !isBacksplash) {\r\n featureToClick.handleClick();\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false, featureIsLocked, event) => {\r\n\r\n if (this.state.childNavigationItem\r\n && this.state.childNavigationItem.part.activeFeature\r\n && Array.isArray(this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"])\r\n && this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0]\r\n && Array.isArray(item.part.metaData[\"SkuName\"])\r\n && (this.state.childNavigationItem.part.activeFeature.metaData[\"SkuName\"][0] === item.part.metaData[\"SkuName\"][0])) {\r\n this.showPositionsPopup(item, event); // move modal to new position\r\n return false // don't change L to R // redundant click\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n this.navigationItemClickCommon(item); // set active feature\r\n\r\n const showPositionPopup = this.showPositionsPopup(item, event);\r\n if (showPositionPopup) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const updateSideBarIds = [\"shower_body\", \"wall_configuration\", \"vanity_cabinet\", \"shower_pan_combo\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n } else if (this.state.parentNavigationItem && this.state.parentNavigationItem.text === \"Shower Tub Combo\"\r\n && item.part.bottomTubId && (this.state.parentNavigationItem.part.bottomTub !== item.part.bottomTubId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n // console.log('this.state.parentNavigationItem', this.state.parentNavigationItem);\r\n // console.log('this.state.parentNavigationItem.part.subParts()', this.state.parentNavigationItem && this.state.parentNavigationItem.part && this.state.parentNavigationItem.part.subParts());\r\n\r\n if (item.matchesMetaFailed) {\r\n let nonCompatibleWith = \"\";\r\n switch (item.part.partId) {\r\n case \"vanity_faucet\":\r\n nonCompatibleWith = \"sink\";\r\n break;\r\n case \"sink\":\r\n nonCompatibleWith = \"vanity\";\r\n break;\r\n case \"shower_pod\":\r\n nonCompatibleWith = \"Window Kit\";\r\n break;\r\n case \"window_kits\":\r\n nonCompatibleWith = item.matchesMetaFailed === \"shower_pod\" ? \"Shower Pod\" : \"Corner Shelf\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.callMetaMathesFailedPopup(item, nonCompatibleWith);\r\n // } else if (item.part.partId === \"vanity_sink\" && this.state.parentNavigationItem.part.faucet\r\n // && this.state.parentNavigationItem.part.faucet.placeholderChanged\r\n // && this.state.parentNavigationItem.part.faucet.activeFeature) {\r\n //\r\n // const sinkSizeConditionValue = item.part.metaData[\"SinkSize\"][0];\r\n //\r\n // if (this.state.parentNavigationItem.part.faucet.activeFeature.matchesMetaForCondition('SinkSize', sinkSizeConditionValue)) {\r\n // this.itemClick(item, ignoreLocked)\r\n // } else {\r\n // this.callMetaMathesFailedPopup(item, 'faucet');\r\n // }\r\n } else if (item.part.partId === \"toilet\") {\r\n const vanity = layout.parts[Vanity.id];\r\n const counterTopSize = vanity.counterTopSize(item.part);\r\n if (counterTopSize === \"60in\" || counterTopSize === \"72in\") {\r\n this.callToiletFailPopup('toilet', item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n } else if (item.part.partId === \"vanity_cabinet\") {\r\n // let toilet = layout.parts[Toilet.id];\r\n // if (toilet) {\r\n // toilet = toilet.toilet; // toiletBody\r\n // }\r\n // const counterTopSize = item.part.vanitySize + 'in';\r\n // const vanity = layout.parts[Vanity.id];\r\n // const currentCounterTopSize = vanity.counterTopSize(item.part);\r\n // if (toilet && toilet.placeholderChanged && (counterTopSize === \"60in\" || counterTopSize === \"72in\")\r\n // && (currentCounterTopSize !== \"60in\" && currentCounterTopSize !== \"72in\")) {\r\n // this.callToiletFailPopup('vanity', item, ignoreLocked)\r\n // } else {\r\n // this.itemClick(item, ignoreLocked);\r\n // }\r\n this.itemClick(item, ignoreLocked);\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n ) {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n }\r\n } else if (item.part.partId === \"shower_interior_wall\") {\r\n if (!featureIsLocked && !item.part.partName.includes(\"laceholder\")) {\r\n this.setWizardFiltersFromActiveItem(item.part)\r\n }\r\n this.itemClick(item, ignoreLocked)\r\n } else {\r\n this.itemClick(item, ignoreLocked)\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.updateCanvasCount();\r\n }\r\n\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom, ContentType.RoomScene];\r\n\r\n return (\r\n \r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n
    \r\n {this.props.bvOpened ? : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n \r\n \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n\r\n return {\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n bvOpened: store.bathroomVisualizerState.bvOpened,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n contextMenu,\r\n fabricatorData: store.fabricatorState,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading,\r\n toggleNavItemPositionModal,\r\n updateCanvasCount,\r\n setLookContextMenu,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Background\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this);\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport store from \"../../../../store\";\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\nimport Ceiling from \"../subparts/walls/ceiling\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n case \"Ceiling\":\r\n relatedItemName = \"ceiling\";\r\n RelatedItemClass = Ceiling;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n subParts(withHidden = true) {\r\n return this.relatedItems\r\n .filter(item => this.filterRelatedItem(item, withHidden))\r\n .map(_ => new DesignNavigationItem(_.partName, _));\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n recoverPrevioslySelected(activeRelatedPart) {\r\n const {activeQuoteIndex} = store.getState().quotesState;\r\n this.relatedItems.forEach(relatedItem => {\r\n if (relatedItem.partId !== activeRelatedPart.partId && relatedItem.activeFeatureBeforeAllWalls) {\r\n if (relatedItem.activeFeatureBeforeAllWalls === \"placeholder\") {\r\n relatedItem.placeholderChanged = false;\r\n relatedItem.firstClick[activeQuoteIndex] = false;\r\n } else if (!relatedItem.selectedByUser) {\r\n relatedItem.activeFeatureBeforeAllWalls.clickFromAllWalls();\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Ceiling extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'walls_ceiling';\r\n this.partName = 'Ceiling';\r\n this.translateId = \"visualizer.kitchen.walls.walls_ceiling\";\r\n this.isStoneFeature = true;\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport Fireplace from \"../subparts/fireplace/fireplace\";\r\nimport Furniture from \"../subparts/globals/furniture\";\r\n\r\nexport default class FireplaceParent extends Part {\r\n static id = 'Fireplace';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Fireplace';\r\n this.translateId = \"visualizer.fireplace.fireplace\";\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Fireplace\":\r\n case \"Fierplace\":\r\n relatedItemName = \"fireplace\";\r\n RelatedItemClass = Fireplace;\r\n break;\r\n case \"Furniture\": {\r\n relatedItemName = \"furniture\";\r\n RelatedItemClass = Furniture;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Fireplace\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Fireplace extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'fireplace';\r\n this.partName = 'Fireplace';\r\n this.translateId = \"visualizer.fireplace.fireplace\";\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Fireplace());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Furniture extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"furniture\";\r\n this.translateId = \"furniture\";\r\n this.translateId = \"visualizer.fireplace.furniture\";\r\n\r\n this.partName = \"Furniture\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"Attachment\": {\r\n relatedItemName = \"attachment\";\r\n RelatedItemClass = Attachment;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport isEqual from \"lodash/isEqual\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = \"attachment\";\r\n this.partName = \"Attachment\";\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n checkIfFeaturePartIsMatching() {\r\n this.activeFeatureParts = this.setActiveFeatureParts();\r\n }\r\n\r\n setActiveFeatureParts() {\r\n const layout = this.getParent().layout;\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n let matchingFeatures = [];\r\n const currentConditions = this.getArrayOfConditions();\r\n const selectFrom = this.features.filter(attFeature => attFeature.matchesMetaForArrayOfConditions(currentConditions));\r\n activeFeatures.forEach(cartItem => {\r\n if (!cartItem.cartFeature || cartItem.featureGroup.disabled || !cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n || (cartItem.partId === this.partId)) {\r\n return\r\n }\r\n selectFrom.forEach(attFeature => {\r\n if (isEqual(attFeature.metaData[\"MatchingFeature\"], cartItem.cartFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], cartItem.cartFeature.metaData[\"Side\"])\r\n && !matchingFeatures.some(alreadyAddedFeature => {\r\n return isEqual(attFeature.metaData[\"MatchingFeature\"], alreadyAddedFeature.metaData[\"MatchingFeature\"])\r\n && isEqual(attFeature.metaData[\"Side\"], alreadyAddedFeature.metaData[\"Side\"])\r\n })) {\r\n matchingFeatures.push(attFeature)\r\n }\r\n })\r\n })\r\n return matchingFeatures;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport classNames from 'classnames';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter, setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\nimport {setDefaultSelectionGroup, changeActivePartRelatedItemIndex} from \"../../../actions/actionFunctions\";\r\nimport DesktopNavigationCommon from \"../../visComponents/navigation/desktopNavigationCommon\";\r\nimport Z from \"../core/zIndex\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nimport LockedView from \"../../common/lockedView\";\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n// import CabinetContextMenu from \"./cabinetContextMenu\";\r\nimport MobileMenuSelect from \"../../visComponents/navigation/mobile/mobileMenuSelect\";\r\nimport {setVisualizerTutorialStep, showVisualizerTutorial} from \"../../../actions/tutorialFunctions\";\r\n\r\nclass DesktopNavigation extends DesktopNavigationCommon {\r\n\r\n bindCanvasClick = (event) => {\r\n\r\n // const canvas = document.getElementById(this.props.canvasId);\r\n this.props.setHoveredLayer(event);\r\n\r\n if (document.hoveredLayer) {\r\n\r\n const hoveredZone = Z.getMenuByHoveredLayer(document.hoveredLayer);\r\n\r\n // console.log('hoveredZone', hoveredZone);\r\n\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n } else {\r\n this.openContextMenu(hoveredZone, event);\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n this.setState({\r\n showNavigation: true,\r\n contentType: ContentType.Design,\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n }, () => {\r\n this.setNewActiveFeature();\r\n this.menuOpened();\r\n setTimeout(() => {\r\n $(document).on('click', this.handleWrapperBlur);\r\n }, 0)\r\n });\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n openContextMenu = (contextMenuOpen, event) => {\r\n let contextMenuButtons = [];\r\n if (contextMenuOpen.contextMenuPartId === \"top_cabinet\") {\r\n // const hoveredParent = this.props.designNavigationItems.find(navItem => {\r\n // return navItem.text === \"Cabinet\"\r\n // });\r\n // if (hoveredParent) {\r\n //\r\n // }\r\n contextMenuButtons = [1, 2, 3, 4, 5]\r\n }\r\n // const receiveBackSplashes = () => {\r\n // const layout = getCurrentLayout();\r\n // const wallsParent = layout.parts[\"Walls\"];\r\n // const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n // this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n // };\r\n switch (contextMenuOpen.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n // receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n const isMobile = $(window).width() < 991;\r\n\r\n let left = isMobile ? '50%' : event.clientX - 50;\r\n let top = isMobile ? '50%' : event.clientY - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = contextMenuButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (contextMenuButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (contextMenuButtons.length > 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (contextMenuButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (contextMenuButtons.length > 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n this.setState({\r\n contextMenuOpen,\r\n hoveredLayer: document.hoveredLayer,\r\n contextMenuPosition: {\r\n left,\r\n right,\r\n top,\r\n }\r\n });\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n this.navigationItemClickCommon(item);\r\n this.itemClick(item, ignoreLocked);\r\n\r\n const updateSideBarIds = [\"center_island_cabinet\", \"top_cabinet\"];\r\n if (updateSideBarIds.includes(item.part.partId)) {\r\n this.updateSideBar();\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n // const fabricatorSettings = this.props.fabricatorSettings;\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n // const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n\r\n const useWizard = false, wizardGroups = [];\r\n\r\n let showNavigationFiltersSteps = false;\r\n\r\n if (activeSubPart && activeSubPart.canUseNavigationFilterSteps\r\n && activeSubPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = false;\r\n const availableNavButtons = [ContentType.Design, ContentType.Layout, ContentType.DisplayRoom];\r\n\r\n return (\r\n
    \r\n \r\n
    this.navWrapper = node}>\r\n
    \r\n
    \r\n {this.content(useWizard, wizardGroups, useFilters, activePart, activeSubPart)}\r\n
    \r\n
    \r\n {this.navigationMenuButtons(availableNavButtons)}\r\n {showNavigationFiltersSteps ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/*
    */}\r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n
    \r\n {showLockedView\r\n ? \r\n : null}\r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n visualizerTutorialStep: store.tutorialState.visualizerTutorialStep,\r\n visualizerTutorialIsOpened: store.tutorialState.visualizerTutorialIsOpened,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n toggleDesktopNavigation,\r\n setActiveNavigationNames,\r\n setModuleContextMenuType,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setVisualizerTutorialStep,\r\n showVisualizerTutorial,\r\n setNavigationLoading\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DesktopNavigation);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport MobileNavigationCommon from \"../../visComponents/navigation/mobileNavigationCommon\";\r\n\r\nimport {ContentType} from \"../../visComponents/constants\";\r\nimport Z from \"../core/zIndex\";\r\n\r\nimport MobileNavigationButtons from '../../visComponents/navigation/mobile/mobileNavigationButtons';\r\nimport MobileNavigationAllWallsCheckbox from '../../visComponents/navigation/mobile/mobileNavigationAllWallsCheckbox';\r\nimport FeatureWizardSteps from \"../../visComponents/navigation/featureWizard/featureWizardSteps\";\r\n\r\nimport {changeActivePartRelatedItemIndex, setDefaultSelectionGroup} from \"../../../actions/actionFunctions\";\r\nimport {\r\n setActiveNavigationFilter,\r\n setModuleContextMenuType,\r\n setModuleContextMenuModule,\r\n setActiveNavigationFilterStepIndex, setNavigationViewType, setNavigationLoading\r\n} from \"../../../actions/navigationFunctions\";\r\n\r\nimport MobileMenuSelect from '../../visComponents/navigation/mobile/mobileMenuSelect';\r\nimport LockedView from \"../../common/lockedView\";\r\n\r\nimport Filters from \"../../visComponents/navigation/newFilters/filters\";\r\nimport BodyPanelRadio from \"../../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport FilterSwitchers from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\nimport FilterSelection from \"../../visComponents/navigation/newFilters/filterSelection\";\r\n// import {CABINET_WIZARD_BUTTONS} from \"../core/constants\";\r\nimport NavigationFiltersSteps from \"../../visComponents/navigation/newFilters/navigationFiltersSteps\";\r\nimport ContextMenuSimple from \"./contextMenuSimple\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nclass MobileNavigation extends MobileNavigationCommon {\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this._componentWillReceiveProps(nextProps)\r\n }\r\n\r\n bindCanvasClick = (event) => {\r\n // console.log(\"bindCanvasClick event\");\r\n\r\n if (!window.touchMove && !this.state.showNavigation && !this.state.contextMenuOpen) {\r\n this.props.setHoveredLayer(event);\r\n }\r\n\r\n if (document.hoveredLayer && !window.touchMove) {\r\n // $('.canvas-text').html(`CLICK3`);\r\n const hoveredZone = Z.getMenuByHoveredLayer(document.hoveredLayer);\r\n if (hoveredZone) {\r\n if (hoveredZone.contextMenuPartId && !this.state.showNavigation) {\r\n if (this.state.contextMenuOpen) {\r\n this.setState({\r\n contextMenuOpen: false,\r\n hoveredLayer: {}\r\n });\r\n document.removeEventListener('click', this.handleContextMenuBlur);\r\n } else {\r\n let contextMenuOpen = \"\";\r\n\r\n const receiveBackSplashes = () => {\r\n const layout = getCurrentLayout();\r\n const wallsParent = layout.parts[\"Walls\"];\r\n const backsplashSubPart = wallsParent.subParts().find(subPart => subPart.part.partId === \"backsplash\");\r\n this.checkIfAllFeaturesReceived(backsplashSubPart);\r\n };\r\n\r\n switch (hoveredZone.contextMenuPartId) {\r\n case \"countertop_group_custom\":\r\n contextMenuOpen = \"Countertop\";\r\n break;\r\n case \"right_wall_custom\":\r\n contextMenuOpen = \"right_wall_custom\";\r\n break;\r\n case \"left_wall_custom\":\r\n contextMenuOpen = \"left_wall_custom\";\r\n break;\r\n case \"backsplash_custom_left\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_left\";\r\n break;\r\n }\r\n case \"backsplash_custom_right\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom_right\";\r\n break;\r\n }\r\n case \"backsplash_custom\": {\r\n receiveBackSplashes();\r\n contextMenuOpen = \"backsplash_custom\";\r\n break;\r\n }\r\n case \"center_island_custom\":\r\n contextMenuOpen = \"Center Island\";\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({\r\n contextMenuOpen: contextMenuOpen || hoveredZone,\r\n hoveredLayer: document.hoveredLayer\r\n }, () => {\r\n if (contextMenuOpen) {\r\n setTimeout(() => {\r\n document.addEventListener('click', this.handleContextMenuBlur);\r\n }, 0)\r\n }\r\n });\r\n }\r\n return false;\r\n } else if (this.state.contentType === 0) {\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass((hoveredZone.child || hoveredZone.parent || hoveredZone).toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n this.openMobileMenu();\r\n }\r\n\r\n hoveredZone.child\r\n ? this.triggerOpenNavigationMenu(hoveredZone.child, hoveredZone.parent, false)\r\n : this.triggerOpenNavigationMenu(hoveredZone)\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n handleNavigationItemClick = (item, ignoreLocked = false) => {\r\n\r\n if (window.location.port === '9007' || document.kvConfig.kioskMode) {\r\n console.log('item', item);\r\n }\r\n this.itemClick(item, ignoreLocked);\r\n\r\n this.props.setActiveFeature(item.part);\r\n\r\n const canvasClass = this.state.childNavigationItem\r\n ? this.state.parentNavigationItem.text + '-' + this.state.childNavigationItem.text\r\n : this.state.parentNavigationItem.text;\r\n\r\n if (!window.canvasIsDragging) {\r\n this.props.setCanvasClass(canvasClass.toLowerCase().replace(/ /g, \"-\"));\r\n }\r\n\r\n if (this.state.parentNavigationItem) { // update canvas only if it is child\r\n this.props.refreshCB();\r\n }\r\n if (item.part.partId === \"top_cabinet\" && !item.part.metaData[\"Module\"]) {\r\n this.props.setModuleContextMenuModule(null)\r\n }\r\n };\r\n\r\n handleSubPartClick = (subNavigationItem, activeNavigationFilter = null) => { // sidebar list item click\r\n const subItemPart = subNavigationItem.part;\r\n const childNavigationItemPartId = subItemPart.partId;\r\n subItemPart.getParent().handleSubPartClick(subItemPart);\r\n this.setState({\r\n childNavigationItem: subNavigationItem,\r\n showFilterSelection: subItemPart.allFeaturesReceived, // show filters only if subItemPart has all features\r\n showerWallWizardGroupsSelected: false,\r\n searchText: \"\"\r\n }, () => {\r\n this.scrollContentToTop();\r\n this.rememberWallsSelection();\r\n this.checkIfAllFeaturesReceived(subNavigationItem, \"childNavigationItem\");\r\n });\r\n /*set new materials page subIndex*/\r\n this.setActivePartRelatedItemIndex(subNavigationItem);\r\n // console.log('subItemPart', subItemPart);\r\n if (!window.canvasIsDragging) {\r\n const canvasClass = this.state.parentNavigationItem.text + '-' + subNavigationItem.text\r\n .toLowerCase().replace(/ /g, \"-\");\r\n this.props.setCanvasClass(canvasClass);\r\n }\r\n this.setNewActiveFeature(subNavigationItem);\r\n\r\n this.setNavigationFilterIfTheChildWasChanged(childNavigationItemPartId, activeNavigationFilter);\r\n\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n this.props.refreshCB(); // update canvas\r\n this.reRenderComponent(); // update nav items\r\n };\r\n\r\n render() {\r\n const layout = getCurrentLayout();\r\n const activePart = this.state.parentNavigationItem ? this.state.parentNavigationItem.part : null;\r\n const activeSubPart = this.state.childNavigationItem ? this.state.childNavigationItem.part : null;\r\n const activeNavPart = activeSubPart || activePart;\r\n const parentItems = layout.designNavigationItems(); // parent list without filters\r\n const allFeaturesReceived = activeNavPart && activeNavPart.allFeaturesReceived;\r\n\r\n // console.log('activePart', activePart);\r\n // console.log('activeSubPart', activeSubPart);\r\n // console.log('activePart.subTypes()', activePart && activePart.subTypes());\r\n // console.log('this.state.childNavigationItemv1111', this.state.childNavigationItem);\r\n\r\n let useWizard = false;\r\n let wizardGroups = [];\r\n if (this.props.fabricatorSettings\r\n && (this.props.fabricatorSettings.wizardConsumers || (this.props.fabricatorSettings.wizardClients && document.kvConfig.isBackend))\r\n && this.state.contentType === ContentType.Design && activeSubPart && activeSubPart.canUseWizard && activeSubPart.allFeaturesReceived) {\r\n useWizard = true;\r\n wizardGroups = this.state[this.getWizardGroupsByPartId(this.state.childNavigationItem.part.partId)];\r\n }\r\n\r\n const features = this.getFeatures(layout);\r\n\r\n const showLockedView = this.currentActiveItemIsLocked(useWizard);\r\n\r\n const useFilters = (activePart && activePart.partId === \"kitchen_floor\" && activePart.allFeaturesReceived)\r\n || (activeSubPart && (this.isWallItem(activeSubPart) || activeSubPart.partId === \"accent_wall\"\r\n || activeSubPart.partId === \"shower_interior_wall_accent\") && activeSubPart.allFeaturesReceived);\r\n\r\n const filterSelectionHasValues = activeNavPart && FilterSelection.getAvailableFilterValues(\r\n this.props.filterGroups, \"Material\", activeNavPart, this.props.fabricatorData\r\n ).length;\r\n\r\n const itemIsSelected = (!this.props.fabricatorSettings.leadCapture\r\n || (activeSubPart && activeSubPart.activeFeature && activeSubPart.firstClick[this.props.activeQuoteIndex] && activeSubPart.placeholderChanged));\r\n\r\n const useKVWizard = false;\r\n //TODO change it when BE is ready\r\n\r\n const showNavigationFilters = useKVWizard &&activeNavPart\r\n // && this.props.activeNavigationFilter !== CABINET_WIZARD_BUTTONS[0].buttonId\r\n && activeNavPart.canUseNavigationFilter && activeNavPart.canUseNavigationFilter();\r\n\r\n let showNavigationFiltersSteps = false;\r\n if (useKVWizard && activeNavPart && activeNavPart.canUseNavigationFilterSteps\r\n && activeNavPart.canUseNavigationFilterSteps()) {\r\n showNavigationFiltersSteps = !this.props.countertopNavigationFilterCompleted;\r\n }\r\n\r\n const cabinetsPartIds = [\"top_cabinet\", \"bottom_cabinet\", \"center_island_cabinet\"];\r\n const isCabinet = activeSubPart && cabinetsPartIds.includes(activeSubPart.partId);\r\n const countertopPartIds = [\"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n const isCountertop = activeSubPart && countertopPartIds.includes(activeSubPart.partId);\r\n\r\n return (\r\n
    \r\n
    \r\n {/*
    \r\n
    \r\n {this.state.contextMenuOpen && !this.state.contextMenuOpen.module\r\n ? \r\n : null}\r\n {showLockedView\r\n ? \r\n : null}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState,\r\n selectedFilters: store.filterState.selectedFilters,\r\n filtersVisible: store.filterState.showFilters,\r\n filterGroups: store.filterState.filterGroups,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n activeNavigationFilter: store.navigationState.activeNavigationFilter,\r\n countertopNavigationFilterCompleted: store.navigationState.countertopNavigationFilterCompleted,\r\n newLayoutType: store.sqftState.newLayoutType,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setNavigationViewType,\r\n setModuleContextMenuType,\r\n setDefaultSelectionGroup,\r\n changeActivePartRelatedItemIndex,\r\n setActiveNavigationFilter,\r\n setActiveNavigationFilterStepIndex,\r\n setModuleContextMenuModule,\r\n setNavigationLoading\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(MobileNavigation)\r\n);\r\n","import {LayoutType} from \"./constants\";\r\nimport {UseFullSizeImages} from \"../../../config\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\n\r\nlet layouts = {};\r\nObject.keys(LayoutType).forEach(layoutName => {\r\n layouts[layoutName] = {\r\n center_island_sink: 3100,\r\n walls_ceiling: 50900,\r\n kitchen_floor: 50025,\r\n // slat_wall: 50020,\r\n shower_wall_mirror: 50050,\r\n back_wall: 50100,\r\n front_wall: 50200,\r\n left_wall: 50500,\r\n right_wall: 54000,\r\n background_bg: 70000,\r\n };\r\n});\r\n\r\nconst getLayerDimensions = (layer, currentLayout, canvasDimensions) => {\r\n const fullImagesFactor = UseFullSizeImages ? 177.77 : 100;\r\n const sizeFactor = fullImagesFactor / 100;\r\n const {coords} = layer;\r\n\r\n if (!coords) {\r\n return null\r\n }\r\n\r\n const COORDS_MAX = 1;\r\n\r\n const x1Percentage = (coords.min_x * 100) / COORDS_MAX;\r\n const x2Percentage = (coords.max_x * 100) / COORDS_MAX;\r\n const y1Percentage = (coords.min_y * 100) / COORDS_MAX;\r\n const y2Percentage = (coords.max_y * 100) / COORDS_MAX;\r\n let x1 = sizeFactor*((canvasDimensions.width * x1Percentage) / 100);\r\n let x2 = sizeFactor*((canvasDimensions.width * x2Percentage) / 100);\r\n let y1 = sizeFactor*((canvasDimensions.height * y1Percentage) / 100);\r\n let y2 = sizeFactor*((canvasDimensions.height * y2Percentage) / 100);\r\n return {\r\n polygonArray: [[x1, y1], [x2, y1], [x2, y2], [x1, y2]],\r\n width: (x2 - x1),\r\n height:(y2 - y1)\r\n };\r\n};\r\n\r\nconst getMenuByHoveredLayer = (layer) => {\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(layer.partId);\r\n if (featureGroup) {\r\n return {\r\n parent: featureGroup.getParent().partName,\r\n child: featureGroup.partName\r\n }\r\n }\r\n return \"\"\r\n};\r\n\r\nexport default {\r\n layouts,\r\n getMenuByHoveredLayer,\r\n getLayerDimensions\r\n}\r\n\r\n\r\n","import snakeCase from \"lodash/snakeCase\";\r\nimport {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport NonVisualizerSubPart from \"../subparts/nonVisualizerSubPart\";\r\n\r\nexport default class Other extends Part {\r\n static id = 'Other';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Other';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n // console.log(\"load other\", dbFeature.groupName);\r\n const partId = snakeCase(dbFeature.groupName);\r\n let relatedItem = this.relatedItems.find(relatedItem => relatedItem.partId === partId);\r\n if (!relatedItem) {\r\n relatedItem = new NonVisualizerSubPart(true, partId, dbFeature.groupName);\r\n this.relatedItems.push(relatedItem);\r\n }\r\n relatedItem.getParent = () => this;\r\n relatedItem.load(dbFeature);\r\n return true\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Other', this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\nimport BackgroundBG from \"../subparts/backgrounds/BackgroundBG\";\r\n\r\nexport default class Background extends Part {\r\n static id = 'Background';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Background';\r\n this.categoryEnabled = false;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"BG\":\r\n relatedItemName = \"backgroundBG\";\r\n RelatedItemClass = BackgroundBG;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem(\"Background\", this);\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {\r\n\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BackgroundBG extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'background_bg';\r\n this.partName = 'Background BG';\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new BackgroundBG());\r\n }\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport {floorThumbnail} from \"../../../kvComponent/core/assets\";\r\n\r\nimport {IntermediatePart} from \"../intermediatePart\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nexport default class Floor extends Part {\r\n static id = 'Floor';\r\n\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n this.partId = 'parent_floor';\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.partThumbnail = floorThumbnail;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Flor\":\r\n case \"Floor\":\r\n relatedItemName = \"floorBody\";\r\n RelatedItemClass = FloorBody;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Floor', this);\r\n }\r\n\r\n}\r\n\r\nclass FloorBody extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'kitchen_floor';\r\n this.partName = 'Floor';\r\n this.translateId = \"visualizer.kitchen.kitchen_floor\";\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FloorBody());\r\n }\r\n}\r\n\r\n\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport LeftWall from \"../subparts/walls/leftWall\";\r\nimport RightWall from \"../subparts/walls/rightWall\";\r\nimport CenterWall from \"../subparts/walls/centerWall\";\r\nimport FrontWall from \"../subparts/walls/frontWall\";\r\n\r\nexport default class Walls extends Part {\r\n static id = 'Walls';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Walls';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.walls\";\r\n\r\n // related items\r\n this.leftWall = null;\r\n this.rightWall = null;\r\n this.centerWall = null;\r\n this.frontWall = null;\r\n this.ceiling = null;\r\n this.backsplash = null;\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Left Wall\":\r\n relatedItemName = \"leftWall\";\r\n RelatedItemClass = LeftWall;\r\n break;\r\n case \"Right Wall\":\r\n relatedItemName = \"rightWall\";\r\n RelatedItemClass = RightWall;\r\n break;\r\n case \"Center Wall\":\r\n relatedItemName = \"centerWall\";\r\n RelatedItemClass = CenterWall;\r\n break;\r\n case \"Front Wall\":\r\n relatedItemName = \"frontWall\";\r\n RelatedItemClass = FrontWall;\r\n break;\r\n // case \"Shower Shadow\":\r\n // if (\r\n // dbFeature.displayName.includes(\"Shower Shadow - Divider Wall\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX L\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - EX R\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Popout\")\r\n // || dbFeature.displayName.includes(\"Shower Shadow - Pony Wall\")\r\n // ) {\r\n // relatedItemName = \"shadows\";\r\n // RelatedItemClass = Shadow;\r\n // }\r\n // break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Walls', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class LeftWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'left_wall';\r\n this.partName = 'Left Wall';\r\n this.translateId = \"visualizer.kitchen.walls.left_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new LeftWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class RightWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'right_wall';\r\n this.partName = 'Right Wall';\r\n this.translateId = \"visualizer.kitchen.walls.right_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new RightWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CenterWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'center_wall';\r\n this.partName = 'Center Wall';\r\n this.translateId = \"visualizer.bathroom.walls.center_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new CenterWall());\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class FrontWall extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'front_wall';\r\n this.partName = 'Front Wall';\r\n this.translateId = \"visualizer.bathroom.walls.front_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n }\r\n\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new FrontWall());\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {wallsThumbnail} from \"../../../bvComponent/core/assets\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Decor from \"../subparts/globals/decor\";\r\nimport {DECORS_MAX} from \"../constants\";\r\nimport Basket from \"../subparts/globals/basket\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MountPosition\"] && checkFeature.matchesMetaForCondition(\"MountPosition\", dbFeatureLoading.metaData[\"MountPosition\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Globals extends Part {\r\n static id = \"Globals\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = \"Globals\";\r\n this.partThumbnail = wallsThumbnail;\r\n\r\n // related items\r\n this.decor1 = null; // can be up to 10\r\n this.basket = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Decor\":\r\n case \"Decore\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"decor\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"decor\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // case \"Attachment\": {\r\n // relatedItemName = \"attachment\";\r\n // RelatedItemClass = Attachment;\r\n // break;\r\n // }\r\n case \"Basket\": {\r\n relatedItemName = \"basket\";\r\n RelatedItemClass = Basket;\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Decor\" || dbFeature.groupName === \"Decore\") {\r\n this[relatedItemName] = new Decor(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n isSubTypeWithItems() {\r\n return false;\r\n }\r\n\r\n handleSubPartClick() {}\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nexport default class Decor extends IntermediatePart {\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"decor_\" + decorCount;\r\n this.partName = \"Decor \" + decorCount;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Decor(false, this.decorCount));\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Basket extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'basket';\r\n this.partName = 'Basket';\r\n this.translateId = \"visualizer.bathroom.basket\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nimport CabinetLeg from \"../subparts/cabinet/cabinetLeg\";\r\nimport Countertop from \"../subparts/cabinet/countertop\";\r\nimport Hook from \"../subparts/cabinet/hook\";\r\nimport CabinetGroup from \"../subparts/cabinet/cabinetGroup\";\r\nimport Slatwall from \"../subparts/cabinet/slatwall\";\r\nimport OverheadRack from \"../subparts/cabinet/overheadRack\";\r\nimport BottomCabinet from \"../subparts/cabinet/bottomCabinet\";\r\nimport TopCabinet from \"../subparts/cabinet/topCabinet\";\r\nimport TallCabinet from \"../subparts/cabinet/tallCabinet\";\r\nimport TallHandle from \"../subparts/cabinet/tallHandle\";\r\nimport TallCabinetLeg from \"../subparts/cabinet/tallCabinetLeg\";\r\nimport TopHandle from \"../subparts/cabinet/topHandle\";\r\nimport BottomHandle from \"../subparts/cabinet/bottomHandle\";\r\nimport BottomCabinetLeg from \"../subparts/cabinet/bottomCabinetLeg\";\r\n\r\nexport default class Cabinet extends Part {\r\n static id = 'Cabinet';\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Cabinet';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n\r\n // related items\r\n this.worktop = null;\r\n this.cabinetLeg = null;\r\n this.hook = null;\r\n this.slatWall = null;\r\n this.tallCabinet = null;\r\n this.tallHandle = null;\r\n this.tallCabinetLeg = null;\r\n this.relatedGroupNames = [\"Countertop\", \"Bottom Handle\", \"Top Handle\", \"Bottom Cabinet\", \"Top Cabinet\",\r\n \"Bottom Cabinet Leg\", \"Tall Cabinet\", \"Tall Cabinet Leg\", \"Tall Handle\"];\r\n }\r\n\r\n load(dbFeature) {\r\n let relatedItemName = \"\",\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Worktop\":\r\n case \"Countertop\":\r\n relatedItemName = \"countertop\";\r\n RelatedItemClass = Countertop;\r\n break;\r\n case \"Cabinet Leg\":\r\n relatedItemName = \"cabinetLeg\";\r\n RelatedItemClass = CabinetLeg;\r\n break;\r\n case \"Bottom Cabinet Leg\":\r\n relatedItemName = \"bottomCabinetLeg\";\r\n RelatedItemClass = BottomCabinetLeg;\r\n break;\r\n case \"Cabinet\":\r\n relatedItemName = \"cabinetGroup\";\r\n RelatedItemClass = CabinetGroup;\r\n break;\r\n case \"Hook\":\r\n case \"Double Hook\":\r\n case \"Kayak Hook\":\r\n case \"Single Hook\":\r\n case \"Vertical Bike Hook\":\r\n relatedItemName = \"hook\";\r\n RelatedItemClass = Hook;\r\n break;\r\n case \"Slatwall\":\r\n case \"Slat Wall\":\r\n relatedItemName = \"slatWall\";\r\n RelatedItemClass = Slatwall;\r\n break;\r\n case \"Overhead Rack\":\r\n relatedItemName = \"Overhead Rack\";\r\n RelatedItemClass = OverheadRack;\r\n break;\r\n case \"Bottom Cabinet\":\r\n relatedItemName = \"bottomCabinet\";\r\n RelatedItemClass = BottomCabinet;\r\n break;\r\n case \"Top Cabinet\":\r\n relatedItemName = \"topCabinet\";\r\n RelatedItemClass = TopCabinet;\r\n break;\r\n case \"Tall Cabinet\":\r\n relatedItemName = \"tallCabinet\";\r\n RelatedItemClass = TallCabinet;\r\n break;\r\n case \"Tall Handle\":\r\n case \"Tall Cabinet Handle\":\r\n relatedItemName = \"tallHandle\";\r\n RelatedItemClass = TallHandle;\r\n break;\r\n case \"Tall Cabinet Leg\":\r\n relatedItemName = \"tallCabinetLeg\";\r\n RelatedItemClass = TallCabinetLeg;\r\n break;\r\n case \"Top Handle\":\r\n relatedItemName = \"topHandle\";\r\n RelatedItemClass = TopHandle;\r\n break;\r\n case \"Bottom Handle\":\r\n relatedItemName = \"bottomHandle\";\r\n RelatedItemClass = BottomHandle;\r\n break;\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n if (relatedItemName !== \"shadows\") {\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Cabinet', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CabinetLeg extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cabinet_leg';\r\n this.partName = 'Cabinet Leg';\r\n this.translateId = \"visualizer.laundryRoom.cabinetLeg\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Countertop extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'countertop';\r\n this.partName = 'Countertop';\r\n this.translateId = \"visualizer.kitchen.countertop.countertop\";\r\n this.isStoneFeature = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Hook extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'hook';\r\n this.partName = 'Hook';\r\n this.translateId = \"visualizer.laundryRoom.hook\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class CabinetGroup extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'cabinet_group';\r\n this.partName = 'Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\nimport {SLAT_WALL_POSITIONS} from \"../../constants\";\r\n\r\nexport default class SlatWall extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'slat_wall';\r\n this.partName = 'Slatwall';\r\n this.translateId = \"visualizer.kitchen.walls.slat_wall\";\r\n this.activeFeatureBeforeAllWalls = null;\r\n this.allWallsApplied = true;\r\n this.isStoneFeature = true;\r\n this.slatWallType = SLAT_WALL_POSITIONS[0];\r\n this.hasAdditionalParts = true;\r\n }\r\n\r\n load(dbFeature) {\r\n if (!dbFeature.metaData[\"Part\"]) {\r\n dbFeature.metaData[\"Part\"] = [\"2\"];\r\n }\r\n if (!dbFeature.metaData[\"Height\"]) {\r\n dbFeature.metaData[\"Height\"] = [\"2\"];\r\n }\r\n const isMainFeature = (dbFeature.metaData[\"Part\"][0] === \"2\") && (dbFeature.metaData[\"Height\"][0] === \"2\");\r\n return super.load_(dbFeature, new SlatWall(false, SlatWall),\r\n true, isMainFeature ? 'features' : 'featuresParts');\r\n }\r\n\r\n setActiveFeatureParts(fromFeature = this.activeFeature, activeFeatureConditions = []) {\r\n if (!fromFeature) {\r\n return []\r\n }\r\n const currentConditions = activeFeatureConditions || this.getArrayOfConditions();\r\n const name1 = fromFeature.getSplittedFeatureName();\r\n const parts = this.featuresParts.filter(attFeature => {\r\n if (!attFeature.matchesMetaForArrayOfConditions(currentConditions) || (name1 !== attFeature.getSplittedFeatureName())) {\r\n return false\r\n }\r\n switch (this.slatWallType) {\r\n case SLAT_WALL_POSITIONS[0]: // center horizontal\r\n return (attFeature.matchesMetaForCondition(\"Part\", \"1\") && attFeature.matchesMetaForCondition(\"Height\", \"2\"))\r\n || (attFeature.matchesMetaForCondition(\"Part\", \"3\") && attFeature.matchesMetaForCondition(\"Height\", \"2\"))\r\n case SLAT_WALL_POSITIONS[1]:\r\n return false // only one center feature\r\n case SLAT_WALL_POSITIONS[2]: // center vertical\r\n return (attFeature.matchesMetaForCondition(\"Part\", \"2\") && attFeature.matchesMetaForCondition(\"Height\", \"1\"))\r\n || (attFeature.matchesMetaForCondition(\"Part\", \"2\") && attFeature.matchesMetaForCondition(\"Height\", \"3\"))\r\n case SLAT_WALL_POSITIONS[3]:\r\n return true // full wall, all are matching\r\n }\r\n });\r\n console.log(\"parts\", name1, parts);\r\n return parts\r\n }\r\n\r\n showLayerPositionsModal() {\r\n return true\r\n }\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class OverheadRack extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'overhead_rack';\r\n this.partName = 'Overhead Rack';\r\n this.translateId = \"visualizer.laundryRoom.overheadRack\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'bottom_cabinet';\r\n this.partName = 'Bottom Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 4;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new BottomCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.cabinetLeg) {\r\n cabinetParent.cabinetLeg.disabled = this.disabled;\r\n }\r\n if (cabinetParent.countertop) {\r\n cabinetParent.countertop.disabled = this.disabled;\r\n }\r\n if (cabinetParent.bottomHandle) {\r\n cabinetParent.bottomHandle.disabled = this.disabled;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopCabinet extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'top_cabinet';\r\n this.partName = 'Top Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.layerPriority = 1;\r\n this.allWallsCanBeApplied = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.topHandle) {\r\n cabinetParent.topHandle.disabled = this.disabled;\r\n }\r\n }\r\n\r\n}\r\n\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallCabinet extends IntermediatePart {\r\n constructor(isChild, partNumber = 0) {\r\n super(isChild);\r\n this.partNumber = partNumber;\r\n this.partId = 'tall_cabinet';\r\n this.partName = 'Tall Cabinet';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n load(dbFeature) {\r\n const partNumber = (dbFeature.metaData[\"Part\"] && +dbFeature.metaData[\"Part\"][0]) === 1 ? 1 : 2;\r\n return super.load_(dbFeature, new TallCabinet(false, partNumber), true, partNumber === 1 ? 'features' : 'featuresParts');\r\n }\r\n\r\n handleClick(ignoreLocked, clickFrom = \"\") {\r\n const parent = this.getParent();\r\n if (parent.getParent && parent.getParent()) {\r\n super.handleClick(ignoreLocked, clickFrom);\r\n parent.activeFeatureParts = parent.setActiveFeatureParts();\r\n } else {\r\n parent.bottomCabinet.activeFeature = this;\r\n }\r\n this.featureClicked();\r\n }\r\n\r\n disabledClick() {\r\n const cabinetParent = this.getParent();\r\n if (cabinetParent.tallCabinetLeg) {\r\n cabinetParent.tallCabinetLeg.disabled = this.disabled;\r\n }\r\n if (cabinetParent.tallHandle) {\r\n cabinetParent.tallHandle.disabled = this.disabled;\r\n }\r\n this.activeFeatureParts.forEach((activeFeaturePart) => {\r\n activeFeaturePart.disabled = this.disabled\r\n });\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tall_handle';\r\n this.partName = 'Tall Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TallCabinetLeg extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'tall_cabinet_leg';\r\n this.partName = 'Tall Cabinet Leg';\r\n this.translateId = \"visualizer.kitchen.cabinet.tall_cabinet_leg\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class TopHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'top_handle';\r\n this.partName = 'Top Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.top_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomHandle extends IntermediatePart {\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_handle';\r\n this.partName = 'Bottom Handle';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_handle\";\r\n this.hasAdditionalParts = true;\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class BottomCabinetLeg extends IntermediatePart {\r\n\r\n constructor(isChild) {\r\n super(isChild);\r\n this.partId = 'bottom_cabinet_leg';\r\n this.partName = 'Bottom Cabinet Leg';\r\n this.translateId = \"visualizer.kitchen.cabinet.bottom_cabinet_leg\";\r\n this.canBeDisabled = true;\r\n }\r\n\r\n}\r\n","import {Part} from \"../part\";\r\nimport {PartMenuType} from \"../../../visComponents/constants\";\r\n\r\nimport Attachment from \"../subparts/globals/attachment\";\r\nimport {DECORS_MAX} from \"../constants\";\r\nimport DesignNavigationItem from \"../../../visComponents/designNavigationItem\";\r\n\r\nconst compareMountPosition = (checkFeature, dbFeatureLoading) => {\r\n return checkFeature.metaData[\"MatchingFeature\"] && checkFeature.matchesMetaForCondition(\"MatchingFeature\", dbFeatureLoading.metaData[\"MatchingFeature\"])\r\n}\r\n\r\nconst checkForExistingDecor = (currentDecorFeatureGroup, dbFeature) => {\r\n if (!currentDecorFeatureGroup) { // we skipped all decors, but didn't find the same\r\n return true\r\n }\r\n if (dbFeature.sharedFeatureName === currentDecorFeatureGroup.decorName) { // decors are matching by name\r\n return true\r\n }\r\n if (dbFeature.metaData[\"MountPosition\"]) {\r\n if (Array.isArray(dbFeature.metaData[\"RoomLayout\"])) {\r\n return dbFeature.metaData[\"RoomLayout\"].some(layoutName => {\r\n return currentDecorFeatureGroup.featuresList && Array.isArray(currentDecorFeatureGroup.featuresList[layoutName])\r\n && currentDecorFeatureGroup.featuresList[layoutName].some(feature => compareMountPosition(feature, dbFeature))\r\n })\r\n } else {\r\n return currentDecorFeatureGroup.some(feature => compareMountPosition(feature, dbFeature))\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport default class Accessories extends Part {\r\n static id = \"Accessories\";\r\n constructor() {\r\n super(true, false, PartMenuType.Complex);\r\n\r\n this.menuType = PartMenuType.Complex;\r\n this.partName = 'Accessories';\r\n this.partThumbnail = \"\";\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n\r\n // related items\r\n this.attachment1 = null; // can be up to 10\r\n }\r\n\r\n load(dbFeature) {\r\n let\r\n relatedItemName = \"\",\r\n decorCount = 0,\r\n RelatedItemClass = null;\r\n switch (dbFeature.groupName) {\r\n case \"Attachment\": {\r\n for (let i = 1; i <= DECORS_MAX; i++) {\r\n const currentDecorFeatureGroup = this[\"attachment\" + i];\r\n if (checkForExistingDecor(currentDecorFeatureGroup, dbFeature)) {\r\n relatedItemName = \"attachment\" + i;\r\n decorCount = i;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (relatedItemName) {\r\n if (!this[relatedItemName]) {\r\n if (dbFeature.groupName === \"Attachment\") {\r\n this[relatedItemName] = new Attachment(true, decorCount);\r\n this[relatedItemName].decorName = dbFeature.sharedFeatureName;\r\n } else {\r\n this[relatedItemName] = new RelatedItemClass(true);\r\n }\r\n this.relatedItems.push(this[relatedItemName]);\r\n }\r\n if (!this.categoryEnabled) {\r\n this.categoryEnabled = true\r\n }\r\n this[relatedItemName].getParent = () => this;\r\n this[relatedItemName].load(dbFeature);\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n navigationItem() {\r\n return new DesignNavigationItem('Accessories', this);\r\n }\r\n\r\n}\r\n","import {IntermediatePart} from \"../../intermediatePart\";\r\n\r\nexport default class Attachment extends IntermediatePart {\r\n\r\n constructor(isChild, decorCount) {\r\n super(isChild);\r\n this.decorCount = decorCount;\r\n this.partId = \"attachment_\" + decorCount;\r\n this.partName = \"Attachment \" + decorCount;\r\n this.translateId = \"visualizer.bathroom.accessories2\";\r\n this.canBeDisabled = true;\r\n }\r\n load(dbFeature) {\r\n return super.load_(dbFeature, new Attachment(false, this.decorCount));\r\n }\r\n\r\n setLayers(layout) {\r\n const activeFeatures = layout.getActiveFeatures(true, true);\r\n if (this.activeFeature\r\n && this.activeFeature.metaData[\"MatchingFeature\"]\r\n && !activeFeatures.some(cartItem => cartItem.cartFeature.metaData[\"MatchingFeature\"]\r\n && cartItem.cartFeature.metaData[\"MatchingFeature\"][0] === this.activeFeature.metaData[\"MatchingFeature\"][0])) {\r\n return this.hideLayers();\r\n }\r\n return super.setLayers(layout);\r\n }\r\n\r\n}\r\n","import $ from 'jquery';\r\nimport * as types from '../actions/actionTypes';\r\nimport {IS_LIXIL_UI, UseFullSizeImages} from \"../config\";\r\nimport {LAYERS_SIZES} from \"../misc/utils\";\r\n\r\nconst initialState = {\r\n bvOpened: IS_LIXIL_UI,\r\n bvVisited: false,\r\n canvasId: \"\",\r\n bvFeatures: [],\r\n bvPresets: [],\r\n allVisualizersPresets: {},\r\n activePreset: 0,\r\n loadedPresets: [], // array of id's of already loaded presets (in order not to download them twice)\r\n presetWasChangedByUser: null, // preset id that user has clicked\r\n firstLoadedPreset: null, // the one that was loaded first (from url or job id, etc.)\r\n showRestorePopup: true,\r\n canvasDimensions: LAYERS_SIZES.normal,\r\n staticCanvasImage: window.location.href.includes(\"formwood_industries\")\r\n ? \"https://qc-static.s3.us-west-1.amazonaws.com/fabricator-static-files/Formwood+Stagnate+Vis.jpg\"\r\n : \"\",\r\n canvasCount: 0,\r\n canvasScale: 1,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_BATHROOM_VISUALIZER_OPEN:\r\n if (action.payload.bvOpened) {\r\n setTimeout(() => { // set timeout is needed because of BV menu wrapper blur click\r\n document.body.classList.add('body--bv');\r\n $(window).trigger('resize');\r\n }, 0);\r\n } else {\r\n setTimeout(() => { // set timeout is needed because of BV menu wrapper blur click\r\n document.body.classList.remove('body--bv');\r\n }, 0)\r\n }\r\n\r\n return Object.assign({}, state, {\r\n bvOpened: action.payload.bvOpened,\r\n bvVisited: true\r\n });\r\n case types.SET_BV_CANVAS_ID:\r\n return {...state, canvasId: action.payload.id};\r\n case types.SET_BV_FEATURES:\r\n case types.TOGGLE_SHOW_RESTORE_POPUP:\r\n case types.SET_BATHROOM_VISUALIZER_VISITED:\r\n case types.SET_STATIC_CANVAS_IMAGE:\r\n case types.SET_PRESET_WAS_CHANGED_BY_USER:\r\n case types.SET_FIRST_LOADED_PRESET:\r\n case types.SET_CANVAS_SCALE:\r\n case types.SET_LOADED_PRESETS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n })\r\n case types.SET_BV_PRESETS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n allVisualizersPresets: Object.assign({}, state.allVisualizersPresets, {\r\n [action.payload.visualizerType || document.kvConfig.visualizerType]: action.payload.bvPresets\r\n })\r\n })\r\n case types.UPDATE_FABRICATOR_SETTINGS: // update when visualizer is changed\r\n return Object.assign({}, state, {\r\n bvPresets: state.allVisualizersPresets[document.kvConfig.visualizerType] || []\r\n })\r\n case types.SET_ACTIVE_PRESET: {\r\n const loadedPresets = state.loadedPresets.includes(action.payload.activePreset)\r\n ? state.loadedPresets\r\n : [...state.loadedPresets, action.payload.activePreset];\r\n return Object.assign({}, state, {\r\n loadedPresets,\r\n ...action.payload\r\n })\r\n }\r\n case types.UPDATE_CANVAS_COUNT:\r\n return Object.assign({}, state, {\r\n canvasCount: state.canvasCount + 1\r\n })\r\n case types.SET_CANVAS_DIMENSIONS:\r\n // eslint-disable-next-line no-case-declarations\r\n const canvasDimensions = action.payload.canvasDimensions\r\n ? Object.assign({}, action.payload.canvasDimensions)\r\n : document.kvConfig.layersSize === \"full_hd\"\r\n ? UseFullSizeImages ? LAYERS_SIZES.full_hd_large : LAYERS_SIZES.full_hd\r\n : UseFullSizeImages ? LAYERS_SIZES.large : LAYERS_SIZES.normal\r\n if (canvasDimensions && canvasDimensions.width) {\r\n switch (canvasDimensions.width) {\r\n case LAYERS_SIZES.large.width:\r\n case LAYERS_SIZES.full_hd_large.width: {\r\n document.body.classList.add('bv--full-size');\r\n break;\r\n }\r\n case LAYERS_SIZES.full_hd.width: {\r\n document.body.classList.add('bv--full-hd');\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n return Object.assign({}, state, {canvasDimensions})\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n loaderOpened: false,\r\n loaderTitle: \"loader.defaultTitle\",\r\n loaderText: \"loader.defaultText\",\r\n loaderFullScreen: false,\r\n multiLoader: {\r\n visible: true,\r\n activeStep: 0,\r\n renderSteps: [\r\n {icon: \"doorStyle\", text: \"doorStyle\"},\r\n {icon: \"color\", text: \"color\"},\r\n {icon: \"layout\", text: \"layout\"},\r\n {icon: \"design1\", text: \"design1\"},\r\n {icon: \"4kOutput\", text: \"4kOutput\"},\r\n {icon: \"lighting\", text: \"lighting\"},\r\n {icon: \"design1\", text: \"design2\"},\r\n ]\r\n }\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch(action.type) {\r\n case types.TOGGLE_LOADER:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_MULTI_LOADER:\r\n return Object.assign({}, state, {\r\n multiLoader: {...state.multiLoader, ...action.payload}\r\n });\r\n\r\n }\r\n\r\n return state;\r\n}\r\n","import merge from 'lodash/merge';\r\nimport * as types from '../actions/actionTypes';\r\nimport Analytics from './../analytics';\r\nimport {UserPopupTypes, ConfirmPopupTypes, UserPopupContent} from \"../bvcomponents/visComponents/constants\";\r\nimport {parseQuery} from \"../misc/helpers\";\r\nimport {\r\n parseFabricatorSettings\r\n} from \"./fabricatorReducer\";\r\nimport {PREFERRED_COMMUNICATION_METHODS} from \"../bvcomponents/popups/assignQuotePopup/assignQuoteConstants\";\r\nimport Config from \"../config\";\r\nimport {hardCodeIsCaesarStone, hardCodeIsGraniteTransformationUK, hardCodeIsLowes} from \"../misc/fabricatorHardcode\";\r\n\r\nconst dashboardFramed = Config.isVisualizerManagement();\r\nconst parsedUrl = parseQuery();\r\n\r\nexport const countries = {\r\n \"GBP\": {\r\n name: \"United Kingdom\",\r\n iso2: \"gb\",\r\n dialCode: \"44\",\r\n priority: 0,\r\n areaCodes: null,\r\n },\r\n \"USD\": {\r\n areaCodes: null,\r\n dialCode: \"1\",\r\n iso2: \"us\",\r\n name: \"United States\",\r\n priority: 0\r\n },\r\n \"CAD\": {\r\n areaCodes: null,\r\n dialCode: \"1\",\r\n iso2: \"ca\",\r\n name: \"Canada\",\r\n priority: 1\r\n },\r\n \"AUS\": {\r\n areaCodes: null,\r\n dialCode: \"61\",\r\n iso2: \"au\",\r\n name: \"Australia\",\r\n priority: 0\r\n },\r\n \"PAB\": {\r\n areaCodes: null,\r\n dialCode: \"507\",\r\n iso2: \"pa\",\r\n name: \"Panama\",\r\n priority: 0\r\n },\r\n \"SPN\": {\r\n areaCodes: null,\r\n dialCode: \"37\",\r\n iso2: \"es\",\r\n name: \"Spain\",\r\n priority: 0\r\n },\r\n \"PLN\": {\r\n name: \"Poland (Polska)\",\r\n iso2: \"pl\",\r\n dialCode: \"48\",\r\n priority: 0,\r\n areaCodes: null,\r\n },\r\n};\r\n\r\nexport const getDefaultCountry = (fabricatorSettings) => {\r\n if (fabricatorSettings.currency === \"GBP\" || hardCodeIsGraniteTransformationUK()) {\r\n return countries.GBP\r\n } if (fabricatorSettings.currency === \"PLN\") {\r\n return countries.PLN\r\n } else if (hardCodeIsLowes()) {\r\n return countries.CAD\r\n }\r\n // const {intl} = this.props;\r\n // if (intl.locale === \"en-AU\" || this.props.fabricatorData.isCaesarStone) {\r\n // if (fabricatorState.isCaesarStone) {\r\n // return countries.AUS\r\n // }\r\n const currency = fabricatorSettings.currency === \"AUD\" ? \"AUS\" : fabricatorSettings.currency;\r\n return countries[currency] || countries.USD\r\n};\r\n\r\nconst initialState = {\r\n userPopupOpened: false,\r\n userPopupType: UserPopupTypes.Unlock,\r\n saveQuoteAfterLogin: false,\r\n userIsLoggedIn: dashboardFramed,\r\n userSchedulerOpened: false,\r\n checkout: false,\r\n userInfo: {\r\n phone: \"\",\r\n email: \"\",\r\n password: \"\",\r\n firstName: \"\",\r\n phoneNumber: \"\",\r\n postal: \"\",\r\n salesPersonEmail: (window.salesPerson ? window.salesPerson.email : \"\"),\r\n salesPersonFullName: (window.salesPerson ? window.salesPerson.name : \"\"),\r\n isNew: true,\r\n fabricatorId: document.kvConfig.userId || 61986,\r\n employeeId: window.salesPerson\r\n ? window.salesPerson.rawVal / ( Math.floor(Math.PI * 1000))\r\n : (parsedUrl && parsedUrl.p) ? +parsedUrl.p.split(\"/\")[0] : \"\",\r\n lastName: \"\",\r\n phone2: \"\",\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n preferredCommunicationMethod: \"\", // (I assume it will be constants - email or phone)\r\n howDidYouHearAboutUs: \"\", // (probably constants too, it is a select in the design)\r\n country: countries.USD, // should be set as an object! from Countries list\r\n provence: \"\", // can be received from getCustomerById response\r\n shipping: {}, // address can be received from getCustomerById response\r\n agreedToTerms: false,\r\n subscribeToNewsletter: true,\r\n },\r\n editToken: ((parsedUrl && parsedUrl.edittoken) ? parsedUrl.edittoken : null),\r\n userInfoErrors: {}, // {\"fullName\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n showAdditionalFields: false,\r\n employeesList: [],\r\n employeesListReceived: false,\r\n isPhoneNumberValidated: dashboardFramed,\r\n // clickLeadCapture: false,\r\n confirmPopupOpened: false,\r\n confirmPopupType: ConfirmPopupTypes.ConsultationRequest,\r\n confirmPopupTag: {}, // object - is used for passing data in the confirm popup\r\n showPrivacyPolicy: false,\r\n alreadyRegisteredUserInfo: {\r\n //... other fields from userLogin response\r\n userId: \"\", // custom field // this will be passed in register response\r\n assignQuote: false, // custom field // if it was clicked from assign quote popup\r\n withCheckoutLogic: false, // custom field // if it was clicked from assign quote popup and with checkout logic\r\n confirmedAssign: false // custom field // if it was confirmed from user (he wants to assign quote on already registered user) - is changing in confirm popup\r\n },\r\n userPopupContent: UserPopupContent.register,\r\n leadCaptureClickCount: 0,\r\n userTwoFa: {\r\n twoFALoading: false,\r\n twoFAToken: \"\",\r\n },\r\n optIn: false\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n switch (action.type) {\r\n case types.TOGGLE_USER_POPUP:\r\n Analytics.sendEvent(\"user-popup\", action.payload.userPopupOpened ? \"Opened\" : \"Closed\");\r\n return {\r\n ...merge(state, action.payload), // deep merge, otherwise userInfo gets overwritten.\r\n userPopupType: action.payload.userPopupType || UserPopupTypes.Unlock,\r\n saveQuoteAfterLogin: action.payload.saveQuoteAfterLogin || false,\r\n checkout: typeof(action.payload.checkout) === 'undefined' ? state.checkout : action.payload.checkout\r\n };\r\n case types.TOGGLE_ADDITIONAL_FIELDS:\r\n case types.TOGGLE_CONFIRM_POPUP:\r\n case types.SET_USER_POPUP_CONTENT:\r\n case types.SET_LEAD_CAPTURE_CLICK_COUNT:\r\n case types.SET_USER_OPT_IN:\r\n return {...state, ...action.payload};\r\n case types.SET_ALREADY_REGISTERED_USER:\r\n return {...state, alreadyRegisteredUserInfo: {...state.alreadyRegisteredUserInfo, ...action.payload.alreadyRegisteredUserInfo}};\r\n case types.CHANGE_USER_INFO: {\r\n let {userInfo} = state;\r\n userInfo = {...userInfo, ...action.payload.userInfo};\r\n return {...state, userInfo};\r\n }\r\n case types.CHANGE_USER_INFO_ERRORS: {\r\n let {userInfoErrors} = state;\r\n userInfoErrors = {...userInfoErrors, ...action.payload.userInfoErrors};\r\n return {...state, userInfoErrors};\r\n }\r\n case types.SET_USER_TWO_FA: {\r\n let {userTwoFa} = state;\r\n userTwoFa = {...userTwoFa, ...action.payload.userTwoFa};\r\n return {...state, userTwoFa};\r\n }\r\n case types.SET_EMPLOYEES_LIST:\r\n // console.log('action.payload', action.payload);\r\n return Object.assign({}, state, action.payload, {employeesListReceived: true});\r\n case types.SET_USER_PHONE_NUMBER_VALIDATED:\r\n return {...state, isPhoneNumberValidated: action.payload.isPhoneNumberValidated};\r\n case types.RESTORE_USER_STATE:\r\n if (action.payload.userInfo) {\r\n if (!action.payload.userInfo.country || !action.payload.userInfo.country.dialCode) {\r\n action.payload.userInfo.country = state.userInfo.country\r\n }\r\n if (action.payload.userInfo.firstName === \"N/A\") {\r\n action.payload.userInfo.firstName = \"\";\r\n }\r\n if (action.payload.userInfo.lastName === \"N/A\") {\r\n action.payload.userInfo.lastName = \"\";\r\n }\r\n }\r\n return {\r\n ...state,\r\n ...action.payload,\r\n userPopupOpened: false,\r\n userPopup2FAOpened: false,\r\n confirmPopupOpened: false,\r\n userIsLoggedIn: true,\r\n };\r\n case types.SHOW_SCHEDULER:\r\n action.payload.show\r\n ? document.body.classList.add(\"body--shedule\")\r\n : document.body.classList.remove(\"body--shedule\");\r\n return {...state, userSchedulerOpened: action.payload.show};\r\n case types.SET_FABRICATOR_DATA: {\r\n const userInfo = {...state.userInfo};\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n userInfo.country = getDefaultCountry(settings);\r\n if (hardCodeIsCaesarStone() && settings.currency === \"USD\") {\r\n userInfo.preferredCommunicationMethod = PREFERRED_COMMUNICATION_METHODS[0]\r\n }\r\n return {...state, userInfo};\r\n }\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n visible: false,\r\n message: '',\r\n error: '',\r\n title: \"\",\r\n inline: false,\r\n newStyles: false,\r\n buttons: [],\r\n click: null,\r\n // type: null, // added for look // not used\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.CHANGE_MESSAGE_BOX:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport cloneDeep from \"lodash/cloneDeep\";\r\nimport find from \"lodash/find\";\r\n\r\nconst initialState = {\r\n filterGroups: [],\r\n selectedFilters: [],\r\n expandedFilters: [],\r\n showFilters: false,\r\n filterVisible: '',\r\n filterId: \"\",\r\n availableFilterValues: {}, // { filterGroupId: arrayOf(filterValues) }\r\n filtersCount: 0, // to update component when filters received\r\n};\r\n\r\nfunction loadFilterGroups(filterGroups) {\r\n filterGroups.forEach(fg => {\r\n for(let i = fg.values.length - 1; i>= 0; i--) {\r\n let value = fg.values[i];\r\n if(value.parent_id) {\r\n let parent = find(fg.values, v => v.id == value.parent_id);\r\n parent.items = parent.items || [];\r\n parent.items.push(fg.values.splice(i, 1)[0]);\r\n }\r\n }\r\n });\r\n return filterGroups;\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.LOAD_FILTERS:\r\n newState.filterGroups = loadFilterGroups(cloneDeep(action.payload));\r\n break;\r\n case types.SET_SELECTED_FILTERS:\r\n newState.selectedFilters = [...action.payload];\r\n break;\r\n case types.SET_EXPANDED_FILTERS:\r\n newState.expandedFilters = [...action.payload];\r\n break;\r\n case types.SHOW_FILTERS:\r\n newState.showFilters = action.payload.show;\r\n newState.filterId = action.payload.filterId;\r\n newState.filterVisible = \"Others\";\r\n break;\r\n case types.SHOW_FILTERS_IF_NOT_VISIBLE:\r\n if(!newState.showFilters) {\r\n newState.showFilters = true;\r\n newState.filterId = action.payload;\r\n newState.filterVisible = \"Others\";\r\n }\r\n break;\r\n case types.SET_FILTER_VISIBLE:\r\n newState.filterVisible = action.payload;\r\n break;\r\n case types.SET_AVAILABLE_FILTER_VALUES:\r\n return Object.assign({}, state, {\r\n availableFilterValues: Object.assign({}, state.availableFilterValues, action.payload.availableFilterValues)\r\n });\r\n case types.UPDATE_FILTERS_COUNT:\r\n return Object.assign({}, state, {\r\n filtersCount: state.filtersCount + 1\r\n })\r\n case types.SET_COUNTERTOP_FILTERS_RECEIVED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n if (!action.payload.lookActiveCategory) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_SHOP_PAGE_OPENED:\r\n if (!action.payload.shopPageOpened) {\r\n return Object.assign({}, state, { selectedFilters: [] });\r\n }\r\n break;\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n if (state.selectedFilters.length) {\r\n return Object.assign({}, state, { selectedFilters: [] }); // always remove it on step change\r\n }\r\n break;\r\n }\r\n return newState;\r\n}\r\n","import $ from \"jquery\";\r\nimport * as types from '../actions/actionTypes';\r\nimport {\r\n MODULE_CONTEXT_MENU_TYPES,\r\n MODULE_CONTEXT_MENU_DIRECTIONS,\r\n CABINET_WIZARD_BUTTONS,\r\n COUNTERTOP_WIZARD_BUTTONS,\r\n CABINET_GROUP, COUNTERTOP_GROUP, EDGE_GROUP\r\n}\r\n from \"../bvcomponents/kvComponent/core/constants\";\r\nimport {\r\n COUNTERTOP_GROUP_BATHROOM,\r\n HANDLES_GROUP_BATHROOM,\r\n SHOWER_FLOOR_GROUP_BATHROOM\r\n} from \"../bvcomponents/bvSceneComponent/core/constants\";\r\n\r\nconst isNewBathroomOrKitchen = document.kvConfig.toolVersion >= 5;\r\n\r\nconst initialState = {\r\n mobileNav: [],\r\n desktopNavigationOpened: false,\r\n navigationViewType: 3,\r\n activeNavigationParentName: \"\",\r\n activeNavigationChildName: \"\",\r\n navigationLoadingActive: false, // to show when features are already downloaded\r\n moduleContextMenuType: MODULE_CONTEXT_MENU_TYPES.Filters,\r\n moduleContextMenuDirection: MODULE_CONTEXT_MENU_DIRECTIONS.Vertical,\r\n moduleContextMenuModule: null,\r\n moduleContextMenuModulePart: null,\r\n // cabinet module filters\r\n activeNavigationFilter: CABINET_WIZARD_BUTTONS[0].buttonId,\r\n activeNavigationFilterStepIndex: 0,\r\n cabinetNavigationFilterCompleted: false,\r\n countertopNavigationFilterCompleted: false,\r\n counterTopWizard: { // not needed for now, but probably we would need this logic in future\r\n [COUNTERTOP_WIZARD_BUTTONS[0].buttonId]: \"All\",\r\n [COUNTERTOP_WIZARD_BUTTONS[1].buttonId]: \"All\",\r\n },\r\n edgesApplyTo: EDGE_GROUP,\r\n cabinetsApplyTo: CABINET_GROUP,\r\n cabinetsApplyToBathroom: isNewBathroomOrKitchen ? [] : [\"vanity_cabinet\", \"vanity_mirror\"], // porselanosa enable matching countertops\r\n countertopsApplyToArray: COUNTERTOP_GROUP, // is used on lixil UI\r\n countertopsApplyToArrayBathroom: COUNTERTOP_GROUP_BATHROOM, // is used on lixil UI\r\n handlesApplyToBathroom: HANDLES_GROUP_BATHROOM,\r\n showerFloorApplyToBathroom: SHOWER_FLOOR_GROUP_BATHROOM,\r\n countertopsApplyTo: {\r\n \"countertop\": [\"center_island_countertop\", \"backsplash\"],\r\n \"center_island_countertop\": [\"countertop\", \"backsplash\"],\r\n \"backsplash\": [\"center_island_countertop\", \"countertop\"]\r\n },\r\n countertopsApplyToBathroom: {\r\n \"vanity_countertop\": [\"vanity_backsplash\"],\r\n \"vanity_backsplash\": [\"vanity_countertop\"]\r\n },\r\n useFeaturesLightRequest: {\r\n countertops: true,\r\n cabinets: true,\r\n },\r\n updateDisableFeatureGroupRadio: false,\r\n navItemPositionModal: {\r\n popupOpened: false,\r\n popupPosition: {},\r\n activePartId: \"\"\r\n }\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.LOAD_MOBILE_NAV:\r\n newState.mobileNav = [...action.payload];\r\n break;\r\n case types.SET_ACTIVE_NAVIGATION_NAMES:\r\n if (action.payload.activeNavigationParentName === \"walls\"\r\n || action.payload.activeNavigationParentName === \"cabinet\") {\r\n switch (action.payload.activeNavigationChildName) {\r\n case \"ceiling\":\r\n case \"right_wall\":\r\n case \"popout_wall\":\r\n case \"left_wall\":\r\n case \"crown_molding\":\r\n case \"top_cabinet\":\r\n $('html, body').animate({scrollTop: 0}, 500);\r\n break;\r\n }\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.TOGGLE_DESKTOP_NAVIGATION:\r\n case types.SET_NAVIGATION_VIEW_TYPE:\r\n case types.SET_MODULE_CONTEXT_MENU_TYPE:\r\n case types.SET_MODULE_CONTEXT_MENU_DIRECTION:\r\n case types.SET_MODULE_CONTEXT_MENU_MODULE:\r\n case types.SET_MODULE_CONTEXT_MENU_MODULE_PART:\r\n case types.SET_ACTIVE_NAVIGATION_FILTER:\r\n case types.SET_ACTIVE_NAVIGATION_FILTER_STEP_INDEX:\r\n case types.SET_CABINET_NAVIGATION_FILTER_COMPLETED:\r\n case types.SET_COUNTERTOP_NAVIGATION_FILTER_COMPLETED:\r\n case types.SET_NAVIGATION_LOADING:\r\n case types.UPDATE_DISABLE_FEATURE_GROUP_RADIO:\r\n case types.SET_APPLY_TO_COMMON:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_COUNTERTOP_WIZARD:\r\n return Object.assign({}, state, {\r\n counterTopWizard: Object.assign({}, state.counterTopWizard, action.payload.countertopWizard)\r\n });\r\n case types.SET_CABINETS_APPLY_TO:\r\n return Object.assign({}, state, {\r\n cabinetsApplyTo: [...action.payload.cabinetsApplyTo]\r\n });\r\n case types.SET_EDGES_APPLY_TO:\r\n return Object.assign({}, state, {\r\n edgesApplyTo: [...action.payload.edgesApplyTo]\r\n });\r\n case types.SET_CABINETS_APPLY_TO_BATHROOM:\r\n return Object.assign({}, state, {\r\n cabinetsApplyToBathroom: [...action.payload.cabinetsApplyToBathroom]\r\n });\r\n case types.SET_COUNTERTOPS_APPLY_TO:\r\n if (action.payload.newArrayLogic) {\r\n return Object.assign({}, state, {\r\n countertopsApplyToArray: [...action.payload.countertopsApplyTo]\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n countertopsApplyTo: Object.assign({}, state.countertopsApplyTo, action.payload.countertopsApplyTo)\r\n });\r\n case types.SET_COUNTERTOPS_APPLY_TO_BATHROOM:\r\n if (action.payload.newArrayLogic) {\r\n return Object.assign({}, state, {\r\n countertopsApplyToArrayBathroom: [...action.payload.countertopsApplyToBathroom]\r\n });\r\n }\r\n return Object.assign({}, state, {\r\n countertopsApplyToBathroom: Object.assign({}, state.countertopsApplyToBathroom, action.payload.countertopsApplyToBathroom)\r\n });\r\n case types.TOGGLE_NAV_ITEM_POSITION_MODAL:\r\n return Object.assign({}, state, {\r\n navItemPositionModal: Object.assign({}, state.navItemPositionModal, action.payload.navItemPositionModal)\r\n });\r\n case types.SET_USE_FEATURES_LIGHT_REQUEST:\r\n return Object.assign({}, state, {\r\n countertopsApplyToArray: !action.payload.useFeaturesLightRequest.countertops ? [] : state.countertopsApplyToArray,\r\n cabinetsApplyTo: !action.payload.useFeaturesLightRequest.cabinets ? [] : state.cabinetsApplyTo,\r\n useFeaturesLightRequest: Object.assign({}, state.useFeaturesLightRequest, action.payload.useFeaturesLightRequest)\r\n });\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {SQFT_MEASURE_UNIT, SQFT_VIEW_MODE} from \"../bvcomponents/sqft/constants\";\r\n\r\nconst initialState = {\r\n isSquareFootageEnabled: false,\r\n SQFTGroup: null, // used to display different sqft types ( like cabinets, area, etc..)\r\n SQFTViewMode: SQFT_VIEW_MODE.twoDMode, // used to display 2d - 3d view\r\n sqftLoaded: false,\r\n sqftUpdateType: null,\r\n squareFeet: 0,\r\n changeLayoutPopupOpened: false,\r\n layoutToApply: \"\",\r\n sqftFromFeature: null, // feature from SQFT was opened\r\n applyLayoutOnSqft: false, // this is needed to remember to change layout on popup ok click\r\n setNewLayoutOnSqft: false, // this is needed for change layout popup - after ok click - it send a postMessage to SQFT\r\n sqftFeaturesPopup: {\r\n enabled: true,\r\n opened: false,\r\n visited: false,\r\n sqftPassedData: null, // object passed from calculator\r\n previouslyAddedSqftFeatures: [] // remember previous selections to parse properly data\r\n },\r\n measureUnit: SQFT_MEASURE_UNIT.imperial,\r\n updateCalculations: false, // update sqft calculations\r\n // todo move this to new reducer\r\n abortRequestController: null,\r\n selectedCountertop: null,\r\n cabinetsGlb: null,\r\n cabinetsARBlobUrl: null,\r\n apiErrorMessage: null,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ENABLE_SQUARE_FOOTAGE:\r\n case types.SET_SQUARE_FOOTAGE_GROUP:\r\n case types.SET_SQFT_VIEW_MODE:\r\n case types.LOAD_SQFT:\r\n case types.UPDATE_SQFT:\r\n case types.UPDATE_SQFT_CALCULATIONS:\r\n case types.SET_SQFT_SQUARE_FEET:\r\n case types.SET_NEW_LAYOUT_ON_SQFT:\r\n case types.SET_SQFT_MEASURE_UNIT:\r\n case types.SQT_SQFT_FROM_FEATURE:\r\n case types.SET_CABINETS_GLB:\r\n case types.SET_CABINETS_AR_BLOB_URL:\r\n case types.SET_API_ERROR_MESSAGE:\r\n case types.SET_SELECTED_COUNTERTOP:\r\n case types.SET_ABORT_CONTROLLER:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.TOGGLE_CHANGE_LAYOUT_POPUP:\r\n return Object.assign({}, state, {\r\n changeLayoutPopupOpened: action.payload.changeLayoutPopupOpened,\r\n layoutToApply: action.payload.layoutToApply || state.layoutToApply,\r\n applyLayoutOnSqft: action.payload.applyLayoutOnSqft,\r\n });\r\n case types.CHANGE_SQFT_FEATURES_POPUP:\r\n state = {...state, sqftFeaturesPopup: Object.assign({}, state.sqftFeaturesPopup, action.payload.sqftFeaturesPopup)};\r\n break;\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import {SHOW_DOCUSIGN} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n show: false,\r\n callback: null\r\n}\r\n\r\nexport default function (state = initialState, {type, payload} = {}) {\r\n if (type === SHOW_DOCUSIGN) {\r\n return {...state, show: payload.show, callback: payload.callback}\r\n }\r\n return state;\r\n}\r\n\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n qtCategoriesLoaded: [], // includes visualizers\r\n qtCategoriesRequested: [], // includes visualizers\r\n qtActiveCategory: \"\", //string!! look for all the category here: layout.qtCategories.find(qtCategory => qtCategory.name === this.props.qtActiveCategory);\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_QT_CATEGORIES_LOADED:\r\n return Object.assign({}, state, {\r\n qtCategoriesLoaded: [...state.qtCategoriesLoaded, action.payload.qtCategoriesLoaded]\r\n });\r\n case types.SET_QT_CATEGORIES_REQUESTED:\r\n return Object.assign({}, state, {\r\n qtCategoriesRequested: [...state.qtCategoriesRequested, action.payload.qtCategoriesRequested]\r\n });\r\n case types.SET_QT_ACTIVE_CATEGORY:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport Config from \"../config\";\r\nimport {parseFabricatorSettings} from \"./fabricatorReducer\";\r\n\r\nconst removeTutorial = Config.isVisualizerManagement();\r\n\r\nconst initialState = {\r\n materialsTutorialIsOpened: false,\r\n materialsTutorialStep: 0,\r\n materialsTutorialFinished: removeTutorial,\r\n visualizerTutorialIsOpened: false,\r\n visualizerTutorialStep: 1,\r\n visualizerTutorialFinished: removeTutorial,\r\n materialsAgentTutorialIsOpened: false,\r\n materialsAgentTutorialFinished: false,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SHOW_MATERIALS_TUTORIAL:\r\n case types.SET_MATERIALS_TUTORIAL_STEP:\r\n case types.SET_MATERIALS_TUTORIAL_FINISHED:\r\n case types.SHOW_MATERIALS_AGENT_TUTORIAL:\r\n case types.SET_MATERIALS_AGENT_TUTORIAL_FINISHED:\r\n case types.SHOW_VISUALIZER_TUTORIAL:\r\n case types.SET_VISUALIZER_TUTORIAL_STEP:\r\n case types.SET_VISUALIZER_TUTORIAL_FINISHED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_FABRICATOR_DATA: {\r\n if (action.payload && action.payload.settings) {\r\n const {settings} = parseFabricatorSettings(action.payload);\r\n if (!settings.showVisualizerTutorial) {\r\n return Object.assign({}, state, {\r\n materialsTutorialFinished: true,\r\n visualizerTutorialFinished: true\r\n });\r\n }\r\n }\r\n return Object.assign({}, state);\r\n }\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import uuid from \"uuid\";\r\n\r\nimport {\r\n ADD_TO_CART,\r\n REMOVE_FROM_CART,\r\n CONTRACT_SIGNING_JOB_DOCUMENT,\r\n CONTRACT_SIGNING_POST_SIGNATURE,\r\n CONTRACT_SIGNING_SET_CONTRACTS_VALUES,\r\n CONTRACT_SIGNING_SET_STEP,\r\n CONTRACT_SIGNING_SHOW_SIGNATURE_PAD,\r\n SET_AFTER_CONTRACT_SIGN_CALLBACK,\r\n SET_CONTRACT_BLOB,\r\n SHOW_CONTRACT_SIGNING,\r\n CHANGE_CART_FEATURE,\r\n CHANGE_CART_QUANTITY,\r\n CONTRACT_SIGNING_RESTORE_VALUES,\r\n SET_WIZARD_SELECTED_VALUES,\r\n CHANGE_ALL_CART_ITEMS,\r\n SET_CART_ITEMS_ADDED_TO_PARENT_CART,\r\n TOGGLE_PRICE_WORKSHEET_OPENED,\r\n CONTRACT_SIGNING_SET_CONTRACTS_LIST,\r\n} from \"../actions/actionTypes\";\r\n\r\nconst initialState = {\r\n firstName: '',\r\n lastName: '',\r\n step: 1,\r\n isVisible: false,\r\n callback: null,\r\n signedDocumentUrl: null,\r\n jobDocumentUrl: null,\r\n isSignaturePadVisible: false,\r\n signaturePadTag: null,\r\n invoiceNumberOfPages: null,\r\n savedInvoiceNumberOfPages: null, // is used to update filled in fields when invoice is changed and we need to update the fields\r\n pagesCustomFieldsValue: {}, // old support\r\n afterContractSignCallback: null,\r\n contractBlob: null,\r\n contractLoading: false,\r\n needToUpdateContract: false, // it is a detection for if job was updated!! then we need a new contract\r\n contractId: uuid.v4(), // it is a cached id, so contract is refreshed every time it needs to be changed\r\n contractsList: [], // [contractInterface]\r\n contractsReceived: false,\r\n contractsValues: {}, // here we store all customer signs and contract data, it will be restored {contract.id: {}}\r\n}\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case SHOW_CONTRACT_SIGNING:\r\n return _show(state, action.payload);\r\n case CONTRACT_SIGNING_SET_STEP:\r\n return {...state, step: action.payload.step};\r\n case CONTRACT_SIGNING_POST_SIGNATURE:\r\n case SET_AFTER_CONTRACT_SIGN_CALLBACK:\r\n case SET_CONTRACT_BLOB:\r\n case CONTRACT_SIGNING_RESTORE_VALUES:\r\n case CONTRACT_SIGNING_SET_CONTRACTS_VALUES:\r\n return {...state, ...action.payload};\r\n case CONTRACT_SIGNING_SET_CONTRACTS_LIST:\r\n if (!state.contractsReceived && Object.keys(state.pagesCustomFieldsValue).length && document.kvConfig.jobId\r\n && !Object.keys(state.contractsValues).length && action.payload.contractsList\r\n && action.payload.contractsList.length) { // old support\r\n // here we have an old response logic with one contract restored, we need to restore contract fields to the\r\n // first contract found once the contracts are received (they are received later than the job restored)\r\n if (state.savedInvoiceNumberOfPages) {\r\n Object.keys(state.pagesCustomFieldsValue).forEach(oldPage => {\r\n // we were saving page id after the contract? now lets reve contract, so the page goes without the contract\r\n state.pagesCustomFieldsValue[oldPage - state.savedInvoiceNumberOfPages] = state.pagesCustomFieldsValue[oldPage];\r\n delete state.pagesCustomFieldsValue[oldPage]; // erase so new page is not filled with old page values\r\n });\r\n }\r\n return {...state, ...action.payload, contractsReceived: true, contractsValues: {\r\n [action.payload.contractsList[0].id]: state.pagesCustomFieldsValue,\r\n }, pagesCustomFieldsValue: {}} // we don't need them anymore\r\n }\r\n return {...state, ...action.payload, contractsReceived: true};\r\n case CONTRACT_SIGNING_SHOW_SIGNATURE_PAD:\r\n return {...state, isSignaturePadVisible: action.payload.show, signaturePadTag: action.payload.tag};\r\n case ADD_TO_CART:\r\n case REMOVE_FROM_CART:\r\n case CHANGE_CART_FEATURE:\r\n case CHANGE_CART_QUANTITY:\r\n case TOGGLE_PRICE_WORKSHEET_OPENED: // only if they opened, we cant set here set discount sections, because when restoring this is fired\r\n case SET_WIZARD_SELECTED_VALUES:\r\n case CHANGE_ALL_CART_ITEMS:\r\n case SET_CART_ITEMS_ADDED_TO_PARENT_CART:\r\n if (action.type === ADD_TO_CART && action.payload.cartItems.every(cItem => {\r\n return cItem.cartFeature && cItem.cartFeature.dbFeature.autoAddToCart\r\n })) {\r\n return state\r\n }\r\n if (!state.needToUpdateContract) {\r\n return {...state, needToUpdateContract: true, contractId: uuid.v4()};\r\n }\r\n return state\r\n case CONTRACT_SIGNING_JOB_DOCUMENT:\r\n if (Number.isInteger(action.payload.invoiceNumberOfPages)\r\n && Number.isInteger(state.savedInvoiceNumberOfPages)\r\n && (action.payload.invoiceNumberOfPages !== state.savedInvoiceNumberOfPages)\r\n && (Object.keys(state.pagesCustomFieldsValue).length)) {\r\n // on document load we are checking old receipt pages and new receipt pages, and then we update each selected value page\r\n console.log(\"receipt was changed, updating values... old pages and new pages:\", state.savedInvoiceNumberOfPages, action.payload.invoiceNumberOfPages);\r\n let newValues = {};\r\n Object.keys(state.pagesCustomFieldsValue).forEach(oldPage => {\r\n // for example, if filled in page was 5 and there were 3 pages in receipt, and now receipt has 1 page - 5-3+1 = 3 page new\r\n const originalContractPage = oldPage - state.savedInvoiceNumberOfPages;\r\n const newPage = originalContractPage + action.payload.invoiceNumberOfPages;\r\n newValues[newPage] = state.pagesCustomFieldsValue[oldPage];\r\n });\r\n return {...state,\r\n ...action.payload,\r\n needToUpdateContract: false,\r\n pagesCustomFieldsValue: newValues,\r\n savedInvoiceNumberOfPages: action.payload.invoiceNumberOfPages, // update with new number, for the next time we open\r\n };\r\n }\r\n return {\r\n ...state,\r\n ...action.payload,\r\n needToUpdateContract: false,\r\n savedInvoiceNumberOfPages: action.payload.invoiceNumberOfPages // update with current invoice pages count\r\n };\r\n }\r\n return state;\r\n}\r\n\r\n\r\nfunction _show(state, {show, callback}) {\r\n if (!show) {\r\n return {...state, isVisible: false, step: 1, firstName: '', lastName: ''};\r\n }\r\n\r\n return {...state, isVisible: true, callback};\r\n}\r\n\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n priceWorksheetOpened: false,\r\n discountsReceived: false,\r\n discountSections: [],\r\n customAddedDiscounts: [], // same as discountInterface[], but also {categoryId, uuid}\r\n financePercentage: \"\", // %\r\n allFinanceOptionsPopupVisible: false,\r\n financeCellsVisible: false, // boolean\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_PRICE_WORKSHEET_OPENED:\r\n case types.SET_CUSTOM_ADDED_DISCOUNTS:\r\n case types.SET_FINANCE_PERCENTAGE:\r\n case types.SET_ALL_FINANCE_OPTIONS_POPUP_VISIBLE:\r\n case types.SET_DISCOUNT_FINANCE_CELLS_VISIBLE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_DISCOUNT_SECTIONS:\r\n return Object.assign({}, state, {\r\n ...action.payload,\r\n discountsReceived: true\r\n });\r\n }\r\n\r\n return state;\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {LOOK_OVERLAYS} from \"../bvcomponents/look/core/constants\";\r\n\r\nconst initialState = {\r\n showUnlockCalculations: false,\r\n unlockCalculationsStep: 0,\r\n showCartItems: [],\r\n showTotalItems: [], // \"tax\", \"total\"\r\n showUnlockCalculationsTutorial: false,\r\n unlockCalculationsTutorialIsFinished: false,\r\n unlockCalculationsTutorialStep: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_SHOW_UNLOCK_CALCULATIONS:\r\n case types.SET_UNLOCK_CALCULATIONS_STEP:\r\n case types.SHOW_UNLOCK_CALCULATIONS_CART_ITEM:\r\n case types.SHOW_UNLOCK_CALCULATIONS_TOTAL_ITEM:\r\n case types.SHOW_UNLOCK_CALCULATIONS_TUTORIAL:\r\n case types.SET_UNLOCK_CALCULATIONS_TUTORIAL_STEP:\r\n case types.SET_UNLOCK_CALCULATIONS_TUTORIAL_FINISHED:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_OVERLAY_OPENED:\r\n if ((action.payload.lookOverlayOpened === LOOK_OVERLAYS.leadCapture) && state.showUnlockCalculations && (state.unlockCalculationsStep !== 4)) {\r\n const overlayElement = document.querySelector(\".look-overlay--style\");\r\n if (overlayElement) {\r\n $(overlayElement).fadeIn(300);\r\n }\r\n return Object.assign({}, state, {\r\n unlockCalculationsStep: 4\r\n });\r\n }\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n quotes: [\r\n {}\r\n ],\r\n activeQuoteIndex: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let updatedQuotes;\r\n switch(action.type) {\r\n case types.ADD_NEW_QUOTE:\r\n case types.SET_QUOTES:\r\n case types.SET_ACTIVE_QUOTE_INDEX:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.UPDATE_QUOTE:\r\n updatedQuotes = [...state.quotes];\r\n updatedQuotes[updatedQuotes.findIndex(item => item === action.payload.quote)] = action.payload.updatedQuote\r\n return Object.assign({}, state, {quotes: updatedQuotes});\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n showAdvancedQuoting: false,\r\n activeQuoteIndex: 0,\r\n advancedQuotingSearchItem: null, // is needed for materials page (item that was clicked to change)\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SHOW_ADVANCED_QUOTING:\r\n case types.SET_ADVANCED_QUOTING_SEARCH_ITEM:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n showAssignQuotePopup: false,\r\n assignQuotePopupSearchText: \"\",\r\n assignQuotePopupEmployee: null,\r\n assignQuotePopupCustomer: null,\r\n assignQuotePopupSuccessText: \"\",\r\n assignQuoteCloneMode: false,\r\n assignQuoteOfflineCustomers: [],\r\n assignQuoteOfflineEmployees: [],\r\n assignQuotePopupSaveButtons: \"all\", // save or checkout or updateTax\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.TOGGLE_SHOW_ASSIGN_QUOTE_POPUP:\r\n case types.SET_ASSIGN_QUOTE_POPUP_SEARCH_TEXT:\r\n case types.SET_ASSIGN_QUOTE_POPUP_EMPLOYEE:\r\n case types.SET_ASSIGN_QUOTE_POPUP_CUSTOMER:\r\n case types.SET_ASSIGN_QUOTE_POPUP_SUCCESS_TEXT:\r\n case types.SET_ASSIGN_QUOTE_CLONE_MODE:\r\n case types.SET_ASSIGN_QUOTE_OFFLINE_DATA:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n receiptUrl: \"\",\r\n receiptSignature: \"\", // pngBase64\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_RECEIPT_URL:\r\n case types.SET_RECEIPT_SIGNATURE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n attachedToLine: [],\r\n waterfallSectionsData: [],\r\n underlaymentSections: [],\r\n\r\n selectedFeature: null,\r\n selectedPartIds: [],\r\n resourceTypes: []\r\n};\r\n\r\nexport default function(state = {...initialState}, action) {\r\n let filteredResource;\r\n let resourceTypes;\r\n let newState;\r\n switch(action.type) {\r\n case types.SET_SELECTED_FEATURE:\r\n case types.SET_SELECTED_PART_IDS:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_RESOURCES:\r\n state = {...state, [action.payload.resourceType]: action.payload.resources};\r\n break;\r\n case types.ADD_RESOURCE:\r\n newState = {\r\n [action.payload.resourceType]: [...state[action.payload.resourceType], action.payload.resource],\r\n }\r\n if (!state.resourceTypes.includes(action.payload.resourceType)) {\r\n newState.resourceTypes = [...state.resourceTypes, action.payload.resourceType]\r\n }\r\n return Object.assign({}, state, newState);\r\n case types.CHANGE_RESOURCE:\r\n filteredResource = state[action.payload.resourceType].map((item) => {\r\n if (item.id !== action.payload.resource.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload.resource\r\n }\r\n })\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n\r\n case types.DELETE_RESOURCE:\r\n filteredResource = state[action.payload.resourceType].filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n case types.DELETE_RESOURCE_ATTACHED_TO:\r\n filteredResource = state[action.payload.resourceType].filter((row) => row.attachedToId !== action.payload.attachedTo.id);\r\n\r\n return Object.assign({}, state, {[action.payload.resourceType]: filteredResource });\r\n case types.DELETE_ALL_RESOURCES:\r\n resourceTypes = {}\r\n for (const resourceType of state.resourceTypes) {\r\n resourceTypes[resourceType] = [];\r\n }\r\n return Object.assign({}, state, resourceTypes);\r\n }\r\n\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n miteredSections: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let filteredMiteredSections;\r\n switch(action.type) {\r\n case types.SHOW_SLAB_TOOL:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_MITERED_SECTIONS:\r\n state = {...state, miteredSections: action.payload.miteredSections};\r\n break;\r\n case types.ADD_MITERED_SECTION:\r\n return Object.assign({}, state, {\r\n miteredSections: [...state.miteredSections, action.payload]\r\n });\r\n case types.CHANGE_MITERED_SECTION:\r\n filteredMiteredSections = state.miteredSections.map((item) => {\r\n if (item.id !== action.payload.id) { return item }\r\n\r\n return {\r\n ...item,\r\n ...action.payload\r\n }\r\n })\r\n\r\n return Object.assign({}, state, { miteredSections: filteredMiteredSections });\r\n\r\n case types.DELETE_MITERED_SECTION:\r\n if (state.miteredSections.length === 0) {\r\n return state\r\n }\r\n\r\n filteredMiteredSections = state.miteredSections.filter((row) => row.id !== action.payload.id);\r\n\r\n return Object.assign({}, state, { miteredSections: filteredMiteredSections });\r\n case types.DELETE_ALL_MITERED_SECTIONS:\r\n return Object.assign({}, state, { miteredSections: []});\r\n }\r\n\r\n return state;\r\n}\r\n","import $ from \"jquery\";\r\n\r\nimport * as types from '../actions/actionTypes';\r\nimport {LOOK_FEATURE_CONTENT, LOOK_WALLS_ONLY} from \"../bvcomponents/look/core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../config\";\r\nimport {hardCodeIsEncore} from \"../misc/fabricatorHardcode\";\r\n\r\nconst defaultCompatabilityObject = {\r\n visible: false,\r\n compatabilityLogic: [],\r\n clickedFeature: null,\r\n applyFunction: null\r\n};\r\n\r\nconst defaultLockedTutorialObject = {\r\n visible: false,\r\n step: 0,\r\n anchorDbFeatureId: null,\r\n finished: false,\r\n withGrid: false,\r\n firstLockedIndex: null,\r\n firstUnlockedIndex: null,\r\n};\r\n\r\nconst defaultAllWallsTutorialObject = {\r\n visible: false,\r\n lookFeature: null,\r\n finished: false,\r\n withGrid: false,\r\n left: 0,\r\n top: 0,\r\n height: 0,\r\n // featureIndex: null,\r\n};\r\n\r\nconst initialState = {\r\n lookOpened: false,\r\n lookExpanded: false,\r\n lookParentKeys: [],\r\n lookViewType: 1,\r\n lookViewTypeWasChanged: false,\r\n // wishlistPopupOpened: false,\r\n sidebarModalOpened: false,\r\n lookActiveFeature: null,\r\n lookActiveFeatureStockCount: 0, // to update not in stock\r\n lookActiveCategory: \"\", //partId\r\n moreInfoOpened: \"\", // main or select\r\n moreInfoContent: LOOK_FEATURE_CONTENT.info, // main or select,\r\n lookPageOpened: \"\",\r\n lookOverlayOpened: \"\", // overlay type from constant\r\n lookOverlayAction: \"\", // overlay sub type (added for sharing text)\r\n lookViewChangeOptions: {\r\n newLayoutType: 1,\r\n newScene: 1,\r\n itemsToRemove: [],\r\n }, // overlay type from constant\r\n lookStylePopup: {\r\n notMatchingFeatures: [],\r\n colors: []\r\n }, // overlay type from constant\r\n // lookRemovePopup: {\r\n // fromFeature: null,\r\n // }, // overlay type from constant\r\n introStep: 0,\r\n introHidden: true,\r\n contextMenu: {\r\n opened: false,\r\n partId: \"\",\r\n layerPosition: \"\",\r\n position: {x: 0, y: 0},\r\n clickedOnItem: \"\",\r\n },\r\n lookWallsApplyTo: hardCodeIsEncore() ? [...LOOK_WALLS_ONLY] : [],\r\n lookAllWallsOpened: false,\r\n lookReturnAction: \"\",\r\n lookDemoPointsClicked: false,\r\n lookActiveFeaturePositionInList: null, // is used for navigation only to prevent jumping (null || number)\r\n navigationCount: 0,\r\n featureGroupCount: 0, // is used when feature group receives its features, to update other components\r\n lookCompatabilityAlert: Object.assign({}, defaultCompatabilityObject),\r\n lookRestoreState: null,\r\n lookLockedTutorial: Object.assign({}, defaultLockedTutorialObject),\r\n lookAllWallsTutorial: Object.assign({}, defaultAllWallsTutorialObject),\r\n};\r\n\r\nconst removeMenuFromState = (state, payload) => {\r\n if (state.lookExpanded) {\r\n payload.lookExpanded = false;\r\n }\r\n // if (state.lookActiveFeature) {\r\n // payload.lookActiveFeature = null;\r\n // }\r\n if (state.moreInfoOpened) {\r\n payload.moreInfoOpened = \"\";\r\n }\r\n if (state.lookAllWallsOpened) {\r\n payload.lookAllWallsOpened = false;\r\n }\r\n if (state.contextMenu.clickedOnItem) {\r\n state.contextMenu.clickedOnItem = \"\";\r\n }\r\n // if (state.lookActiveCategory) {\r\n // payload.lookActiveCategory = \"\";\r\n // }\r\n if (document.body.style.overflow === \"hidden\") {\r\n document.body.style.overflow = \"\";\r\n }\r\n return payload\r\n}\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.SET_LOOK_OPENED:\r\n if (!action.payload.lookOpened) {\r\n action.payload = removeMenuFromState(state, action.payload);\r\n } else if (action.payload.isMobile) {\r\n document.body.style.overflow = \"hidden\";\r\n }\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_FEATURE:\r\n if (!action.payload.lookActiveFeature) {\r\n if (state.moreInfoOpened) {\r\n action.payload.moreInfoOpened = \"\";\r\n }\r\n if (state.lookRestoreState && !action.payload.isMobile) {\r\n action.payload.lookRestoreState = null;\r\n }\r\n }\r\n if (!IS_PRODUCT_JOURNEY) {\r\n action.payload.lookActiveCategory = action.payload.lookActiveFeature ? action.payload.lookActiveFeature.partId : \"\"\r\n }\r\n if (state.lookOpened && state.lookExpanded) {\r\n action.payload.lookExpanded = false;\r\n }\r\n if (state.lookOpened && state.lookExpanded) {\r\n action.payload.lookExpanded = false;\r\n }\r\n action.payload.lookCompatabilityAlert = Object.assign({}, defaultCompatabilityObject);\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_CATEGORY:\r\n if (state.moreInfoOpened) {\r\n action.payload.moreInfoOpened = \"\";\r\n }\r\n if (!action.payload.lookActiveCategory && state.lookRestoreState) {\r\n action.payload.lookRestoreState = null;\r\n }\r\n if (state.contextMenu.clickedOnItem\r\n && (!action.payload.lookActiveCategory || (action.payload.lookActiveCategory !== \"vanity_sink\"))) {\r\n state.contextMenu.clickedOnItem = \"\";\r\n }\r\n if (action.payload.lookActiveCategory && (action.payload.lookActiveCategory.includes(\"floor\"))) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n action.payload.lookCompatabilityAlert = Object.assign({}, defaultCompatabilityObject);\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_EXPANDED:\r\n case types.SET_LOOK_PARENT_KEYS:\r\n case types.SET_WISHLIST_POPUP_OPENED:\r\n case types.SET_SIDEBAR_MODAL_OPENED:\r\n case types.SET_LOOK_MORE_INFO_OPENED:\r\n case types.SET_LOOK_PAGE_OPENED:\r\n case types.SET_LOOK_OVERLAY_OPENED:\r\n case types.SET_LOOK_INTRO_STEP:\r\n case types.SET_LOOK_INTRO_HIDDEN:\r\n case types.SET_LOOK_WALLS_APPLY_TO:\r\n case types.SET_LOOK_ALL_WALLS_OPENED:\r\n case types.SET_LOOK_RETURN_ACTION:\r\n case types.SET_LOOK_DEMO_POINTS_CLICKED:\r\n case types.SET_LOOK_RESTORE_STATE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_VIEW_TYPE:\r\n return Object.assign({}, state, {\r\n ...action.payload, lookViewTypeWasChanged: true\r\n });\r\n case types.SET_LOOK_VIEW_CHANGE_OPTIONS:\r\n return Object.assign({}, state, {\r\n lookViewChangeOptions: Object.assign({}, state.lookViewChangeOptions, action.payload.lookViewChangeOptions)\r\n });\r\n case types.SET_LOOK_STYLE_POPUP:\r\n return Object.assign({}, state, {\r\n lookStylePopup: Object.assign({}, state.lookStylePopup, action.payload.lookStylePopup)\r\n });\r\n case types.SET_LOOK_REMOVE_POPUP:\r\n return Object.assign({}, state, {\r\n lookRemovePopup: Object.assign({}, state.lookRemovePopup, action.payload.lookRemovePopup)\r\n });\r\n case types.SET_LOOK_CONTEXT_MENU:\r\n return Object.assign({}, state, {\r\n contextMenu: Object.assign({}, state.contextMenu, action.payload.contextMenu)\r\n });\r\n case types.SET_LOOK_COMPATABILITY_ALERT:\r\n return Object.assign({}, state, {\r\n lookCompatabilityAlert: Object.assign({}, state.lookCompatabilityAlert, action.payload.lookCompatabilityAlert)\r\n });\r\n case types.SET_LOOK_LOCK_TUTORIAL:\r\n return Object.assign({}, state, {\r\n lookLockedTutorial: Object.assign({}, state.lookLockedTutorial, action.payload.lookLockedTutorial)\r\n });\r\n case types.SET_LOOK_ALL_WALLS_TUTORIAL:\r\n return Object.assign({}, state, {\r\n lookAllWallsTutorial: Object.assign({}, state.lookAllWallsTutorial, action.payload.lookAllWallsTutorial)\r\n });\r\n case types.UPDATE_LOOK_NAVIGATION_COUNT:\r\n return Object.assign({}, state, {\r\n navigationCount: state.navigationCount + 1\r\n });\r\n case types.UPDATE_LOOK_ACTIVE_FEATURE_STOCK_COUNT:\r\n return Object.assign({}, state, {\r\n lookActiveFeatureStockCount: state.lookActiveFeatureStockCount + 1\r\n });\r\n case types.SET_WIZARD_ACTIVE_ITEM:\r\n if (!state.lookOpened && action.payload.wizardActiveItem) {\r\n return Object.assign({}, state, {\r\n lookOpened: true,\r\n });\r\n }\r\n break;\r\n case types.SET_WIZARD_ACTIVE_STEP:\r\n return Object.assign({}, state, {\r\n moreInfoOpened: false,\r\n lookActiveFeaturePositionInList: null,\r\n });\r\n default:\r\n break;\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {getFeatureGroupFeaturesQuantity} from \"../bvcomponents/look/lookNavigation/lookNavigationFunctions\";\r\n\r\nconst initialState = {\r\n filtersOpened: false,\r\n similarFeature: null,\r\n similarProductsOpened: false,\r\n requiredButNotIncludedFeature: null,\r\n groheFiltersSearchText: \"\",\r\n lastOpenedFeature: null,\r\n lastOpenedCategory: null,\r\n subCategoryOpened: \"\",\r\n showAddedToTheCartSuccess: false,\r\n groheActiveFeatureQuantity: 1,\r\n groheShareButtonsOpened: false,\r\n groheSameColorActiveFeature: null,\r\n groheSameColorSectionOpened: false,\r\n groheSameColorCheckboxApplied: false,\r\n exisingTempId: \"\",\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_GROHE_FILTERS_OPENED:\r\n case types.SET_GROHE_SIMILAR_FEATURE:\r\n case types.SET_GROHE_SIMILAR_PRODUCTS_OPENED:\r\n case types.SET_GROHE_REQUIRED_BUT_NOT_INCLUDED_FEATURE:\r\n case types.SET_GROHE_FILTERS_SEARCH_TEXT:\r\n case types.SET_GROHE_LAST_OPENED_CATEGORY:\r\n case types.SET_GROHE_SUB_CATEGORY_OPENED:\r\n case types.SET_GROHE_SHOW_ADDED_TO_THE_CART_SUCCESS:\r\n case types.SET_GROHE_ACTIVE_FEATURE_QUANTITY:\r\n case types.SET_GROHE_SHARE_BUTTONS_OPENED:\r\n case types.SET_GROHE_SAME_COLOR_SECTION_OPENED:\r\n case types.SET_GROHE_SAME_COLOR_CHECKBOX_APPLIED:\r\n case types.SET_GROHE_SAME_COLOR_ACTIVE_FEATURE:\r\n case types.SET_GROHE_EXISTING_TEMP_ID:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_FEATURE: {\r\n return Object.assign({}, state, {\r\n lastOpenedFeature: action.payload.lookActiveFeature || state.lastOpenedFeature,\r\n subCategoryOpened: action.payload.lookActiveFeature ? \"\" : state.subCategoryOpened,\r\n groheActiveFeatureQuantity: getFeatureGroupFeaturesQuantity(action.payload.lookActiveFeature),\r\n });\r\n }\r\n case types.SET_LOOK_ACTIVE_CATEGORY: {\r\n return Object.assign({}, state, {\r\n lastOpenedCategory: action.payload.lookActiveCategory || state.lastOpenedCategory,\r\n filtersOpened: !action.payload.lookActiveCategory && state.filtersOpened ? false : state.filtersOpened,\r\n groheFiltersSearchText: !action.payload.lookActiveCategory && state.groheFiltersSearchText ? \"\" : state.groheFiltersSearchText, // always remove it on open/close\r\n });\r\n }\r\n case types.SET_LOOK_OPENED: {\r\n return Object.assign({}, state, {\r\n lastOpenedFeature: (!action.payload.lookOpened && state.lastOpenedFeature) ? null : state.lastOpenedFeature,\r\n lastOpenedCategory: (!action.payload.lookOpened && state.lastOpenedCategory) ? null : state.lastOpenedCategory,\r\n subCategoryOpened: \"\", // always remove it on open/close\r\n similarProductsOpened: false, // always remove it on open/close\r\n requiredButNotIncludedFeature: null, // always remove it on open/close\r\n groheActiveFeatureQuantity: !action.payload.lookOpened ? 1 : state.groheActiveFeatureQuantity,\r\n groheFiltersSearchText: \"\", // always remove it on open/close\r\n });\r\n }\r\n case types.SET_LOOK_PAGE_OPENED: {\r\n return Object.assign({}, state, {\r\n groheSameColorActiveFeature: (action.payload.lookPageOpened && state.groheSameColorActiveFeature) ? null : state.groheSameColorActiveFeature,\r\n });\r\n }\r\n case types.SET_WIZARD_ACTIVE_ITEM: {\r\n return Object.assign({}, state, {\r\n subCategoryOpened: \"\",\r\n groheFiltersSearchText: \"\", // always remove it on open/close\r\n });\r\n }\r\n case types.SET_WIZARD_ACTIVE_STEP: {\r\n if (state.groheFiltersSearchText) {\r\n return Object.assign({}, state, {\r\n groheFiltersSearchText: \"\", // always remove it on step change\r\n });\r\n }\r\n }\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n iframeIntegrationRequest: {},\r\n iframeIntegrationResponse: {},\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n let newState = {...state};\r\n switch(action.type) {\r\n case types.SET_IFRAME_INTEGRATION_REQUEST:\r\n return Object.assign({}, state, {\r\n iframeIntegrationRequest: {...action.payload.iframeIntegrationRequest}\r\n });\r\n case types.SET_IFRAME_INTEGRATION_RESPONSE:\r\n return Object.assign({}, state, {\r\n iframeIntegrationResponse: {...action.payload.iframeIntegrationResponse}\r\n });\r\n }\r\n return newState;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n wizardOpened: false,\r\n wizardName: \"\",\r\n wizardStep: -1,\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_GROHE_WIZARD_NAME:\r\n case types.SET_GROHE_WIZARD_OPENED:\r\n case types.SET_GROHE_WIZARD_STEP:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n cardInfo: {\r\n cardNumber: \"\", // ccNum\r\n cardName: \"\", // name\r\n expMonth: \"\",\r\n expYear: \"\",\r\n cvv: \"\",\r\n country: \"USA\",\r\n // zipCode: \"\",\r\n // country: defaultCountryValue,\r\n },\r\n cardErrors: {}, // {\"cardName\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n shippingErrors: {}, // {\"postal\": [\"too short\"]}, {\"phoneNumber\": [\"this field is required\"]}, etc.\r\n selectedShippingAddressIndex: 0, // not used anymore, we can't select shipping addresses\r\n selectedBillingAddressIndex: 0, // not used anymore, we can't select shipping addresses\r\n shippingAddress: {\r\n fullName: \"\", // name\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n stateShort: \"\", // used in google maps submit\r\n postal: \"\" // zip\r\n },\r\n billingAddress: {\r\n fullName: \"\", // name\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n stateShort: \"\", // used in google maps submit\r\n postal: \"\" // zip\r\n },\r\n billingSameAsShipping: false,\r\n};\r\n\r\nexport default function(state = initialState, action){\r\n switch (action.type) {\r\n case types.SET_PAYMENT_INFO:\r\n return Object.assign({}, state, {\r\n [action.payload.name]: action.payload.value\r\n });\r\n case types.SET_SHIPPING_INFO:\r\n return Object.assign({}, state, {\r\n shippingAddress: {\r\n ...state.shippingAddress, ...{[action.payload.name]: action.payload.value}\r\n }\r\n });\r\n case types.SET_BILLING_INFO:\r\n return Object.assign({}, state, {\r\n billingAddress: {\r\n ...state.billingAddress, ...{[action.payload.name]: action.payload.value}\r\n }\r\n });\r\n case types.SET_CARD_INFO:\r\n return Object.assign({}, state, {\r\n cardInfo: {\r\n ...state.cardInfo, ...{[action.payload.name]: action.payload.value}\r\n }\r\n })\r\n case types.SET_CARD_ERRORS:\r\n return Object.assign({}, state, {\r\n cardErrors: {...state.cardErrors, ...action.payload.cardErrors}\r\n })\r\n case types.SET_SHIPPING_ERRORS:\r\n return Object.assign({}, state, {\r\n shippingErrors: {...state.shippingErrors, ...action.payload.shippingErrors}\r\n })\r\n case types.RESTORE_PAYMENT_INFO:\r\n return Object.assign({}, state, Object.assign({}, action.payload))\r\n }\r\n return state;\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n layoutHistory: [],\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.ADD_LAYOUT_HISTORY: {\r\n const lastState = state.layoutHistory[state.layoutHistory.length - 1];\r\n if (lastState) {\r\n if (JSON.stringify(lastState) !== JSON.stringify(action.payload.layoutState)) {\r\n state.layoutHistory.push(action.payload.layoutState)\r\n }\r\n } else {\r\n state.layoutHistory.push(action.payload.layoutState)\r\n }\r\n return Object.assign({}, state, {\r\n layoutHistory: state.layoutHistory\r\n })\r\n }\r\n case types.SET_LAYOUT_HISTORY:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n })\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\nimport {ROUTES} from \"../routes\";\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\n\r\nconst initialState = {\r\n shopPageLoaded: false,\r\n shopPageOpened: false,\r\n shopLastPageVisited: ROUTES.shop,\r\n shopPageLeaved: false,\r\n // shopActiveCategory: \"\",\r\n // shopActiveFeature: \"\",\r\n};\r\n\r\nconst getLastVisitedShopPage = (partId, withFeature = null, currentPage = \"\") => {\r\n const layout = getCurrentLayout();\r\n if (!layout.partIdExistInQtCategory(partId, true)) {\r\n return ROUTES.shop\r\n }\r\n if (withFeature) {\r\n return `${ROUTES.shop}/${partId}/${withFeature.dbFeature.sku || withFeature.dbFeature.sharedFeatureName}`\r\n }\r\n if (currentPage && currentPage.includes(partId + \"/\")) { // + \"/\" - we are checking if there is anything more (feature opened)\r\n return currentPage\r\n }\r\n return `${ROUTES.shop}/${partId}`\r\n}\r\n\r\nexport default function (state = initialState, action) {\r\n\r\n switch (action.type) {\r\n\r\n case types.SET_SHOP_PAGE_LOADED:\r\n case types.SET_SHOP_PAGE_OPENED:\r\n case types.SET_SHOP_LAST_PAGE_VISITED:\r\n case types.SET_SHOP_PAGE_LEAVED:\r\n // case types.SET_SHOP_ACTIVE_CATEGORY:\r\n // case types.SET_SHOP_ACTIVE_FEATURE:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n case types.SET_LOOK_ACTIVE_CATEGORY: {\r\n if (!state.shopPageOpened && action.payload.lookActiveCategory) {\r\n const shopLastPageVisited = getLastVisitedShopPage(action.payload.lookActiveCategory, null, state.shopLastPageVisited);\r\n if (shopLastPageVisited !== state.shopLastPageVisited) {\r\n return Object.assign({}, state, {\r\n shopLastPageVisited\r\n });\r\n }\r\n }\r\n return state;\r\n }\r\n case types.SET_LOOK_ACTIVE_FEATURE: {\r\n if (!state.shopPageOpened && action.payload.lookActiveFeature) {\r\n const shopLastPageVisited = getLastVisitedShopPage(action.payload.lookActiveFeature.partId, action.payload.lookActiveFeature, state.shopLastPageVisited);\r\n if (shopLastPageVisited !== state.shopLastPageVisited) {\r\n return Object.assign({}, state, {\r\n shopLastPageVisited\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n // case types.SET_SHOP_ACTIVE_FEATURE:\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import * as types from '../actions/actionTypes';\r\n\r\nconst initialState = {\r\n isSwitching : false,\r\n activeStep: 0,\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n\r\n switch(action.type) {\r\n\r\n case types.SET_SQFT_TUTORIAL_STEP:\r\n if (state.isSwitching) {\r\n return Object.assign({}, state) // don't do anything until animation will finish\r\n }\r\n\r\n return Object.assign({}, state, {\r\n activeStep: action.payload.activeStep <= 0 ? 0 : action.payload.activeStep\r\n });\r\n\r\n case types.SET_SQFT_TUTORIAL_SWITCHING:\r\n return Object.assign({}, state, {\r\n ...action.payload\r\n });\r\n\r\n }\r\n\r\n return state;\r\n\r\n}\r\n","import React from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst UserFieldErrors = (props) => {\r\n\r\n const {property, userInfoErrors} = props;\r\n\r\n const errorsExist = Array.isArray(userInfoErrors[property]) && userInfoErrors[property].length;\r\n if (!errorsExist) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n {userInfoErrors[property].map((error) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n
    \r\n )\r\n};\r\n\r\nUserFieldErrors.propTypes = {\r\n property: PropTypes.string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, userInfoErrors} = store.userState;\r\n return {\r\n userInfo,\r\n userInfoErrors,\r\n // fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(UserFieldErrors)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport Axios from \"axios\";\r\nimport $ from \"jquery\";\r\n\r\nimport LoadingSpinner from \"../../ui/loadingSpinner\";\r\nimport {baseNewImagesPath} from \"../../assets\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\n\r\nconst getPrivacyPolicyUrl = (fabricatorData) => {\r\n if (fabricatorData.isRebath) {\r\n return \"rebathTerms.html\"\r\n } else if (fabricatorData.isLowes) {\r\n return \"lowesTerms.html\"\r\n } else if (fabricatorData.isNhance) {\r\n return \"nhanceTerms.html\"\r\n }\r\n return \"qcTerms.html\"\r\n}\r\n\r\nconst PrivacyPolicyTerms = (props) => {\r\n\r\n const {fabricatorData} = props;\r\n const [terms, setTerms] = useState(null);\r\n\r\n const privacyPolicyUrl = getPrivacyPolicyUrl(fabricatorData);\r\n\r\n useEffect(() => {\r\n const getTerms = async () => {\r\n const termsResponse = await Axios.get(baseNewImagesPath + \"privacyPolicy/\" + privacyPolicyUrl);\r\n if (termsResponse && termsResponse.data) {\r\n setTerms(termsResponse.data)\r\n }\r\n }\r\n getTerms();\r\n\r\n window.anchorScroll = (anchor) => {\r\n const $scrollableDiv = $(IS_LIXIL_UI ? \".grohe-lead__content\" : \".user-popup-terms\");\r\n const scrollToDiv = document.querySelector(`[data-anchor=${anchor}]`);\r\n // const scrollTop = $scrollToDiv ? $scrollToDiv.position().top - 50 : 0;\r\n const scrollTop = scrollToDiv ? scrollToDiv.offsetTop - 60 : 0;\r\n if (scrollTop) {\r\n $scrollableDiv.animate({scrollTop}, 1000);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return terms ?
    : \r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(PrivacyPolicyTerms)\r\n","import {closeSQFTTool} from \"../helpers/sqftHelperUi\";\r\nimport {getFeatureUrl} from \"../../look/lookNavigation/lookFunctions2\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport Analytics from \"../../../analytics\";\r\nimport isObject from \"lodash/isObject\";\r\nimport {SQFT_FEATURES} from \"../constants\";\r\nimport {IS_LIXIL_UI} from \"../../../config\";\r\nimport {isFirefox} from \"../../../misc/helpers\";\r\nimport {setShowAddedToTheCartSuccess} from \"../../../actions/groheFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {setCameFromPage} from \"../../../actions/actionFunctions\";\r\nimport {useChangeWizardStepRoute} from \"../../qkbPages/materialsWizard/useChangeWizardStepRoute\";\r\nimport {useHistory} from \"react-router-dom\";\r\nimport store from \"../../../store\";\r\n\r\nexport const useCloseSQFTCalc = () => {\r\n const {changeWizardStepRoute} = useChangeWizardStepRoute();\r\n const history = useHistory();\r\n const state = store.getState();\r\n const {cameFromPage} = state.cartState\r\n\r\n const closeLixilUi = (cameFromPage, shouldChangeWizardToNextStep) => {\r\n closeSQFTTool(cameFromPage, shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n const {wizardIsActive} = store.getState().wizardState;\r\n\r\n if (!wizardIsActive) {\r\n window.setTimeout(() => {\r\n store.dispatch(setShowAddedToTheCartSuccess(true));\r\n }, 300)\r\n history.push(getFeatureUrl(cameFromPage));\r\n history.push(`/cart`);\r\n }\r\n }\r\n\r\n const closeSQFTCalc = (shouldChangeWizardToNextStep = true) => {\r\n // if (payload && payload.measureUnit) {\r\n // props.setSqftMeasureUnit(payload.measureUnit);\r\n // }\r\n //this.sendPostMessageToSqft(SQFT_POST_MESSAGE_ACTIONS.stopRender);\r\n\r\n clearAllMenusEvents();\r\n Analytics.sendClickEvent('sqft-close');\r\n store.dispatch(setSqftFromFeature(null));\r\n\r\n const leaveSqft = () => {\r\n if (isObject(cameFromPage) && cameFromPage.partId && cameFromPage.partId !== SQFT_FEATURES.slabs) {\r\n if (IS_LIXIL_UI) {\r\n closeLixilUi(cameFromPage, shouldChangeWizardToNextStep)\r\n } else {\r\n closeSQFTTool(\"materials\", shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n }\r\n //props.toggleSelectionFeatureInfo(cameFromPage);\r\n } else {\r\n const redirectToPage = cameFromPage && cameFromPage !== \"sqft\" ? cameFromPage : \"materials\"\r\n closeSQFTTool(redirectToPage, shouldChangeWizardToNextStep, changeWizardStepRoute);\r\n }\r\n store.dispatch(setCameFromPage(\"sqft\"));\r\n };\r\n\r\n if (isFirefox()) {\r\n setTimeout(() => {\r\n leaveSqft();\r\n }, 0)\r\n } else {\r\n leaveSqft();\r\n }\r\n }\r\n\r\n return {closeSQFTCalc}\r\n};\r\n","import * as PropTypes from \"prop-types\";\r\n\r\nexport const customerInterface = {\r\n id: PropTypes.number,\r\n fullName: PropTypes.string,\r\n email: PropTypes.string,\r\n};\r\n\r\nexport const employeeInterface = {\r\n id: PropTypes.number,\r\n fullName: PropTypes.string,\r\n};\r\n","import React from \"react\";\r\n\r\nexport const initialContext = {\r\n inputsValidated: true,\r\n customerError: \"\",\r\n selectedContracts: [], // [\"id\"]\r\n}\r\n\r\nexport default React.createContext(initialContext);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport UiIcon from \"../ui/icons/uiIcon\";\r\n\r\nexport const subPartIsDone = (relatedIem, activeQuoteIndex, cartItems = []) => {\r\n const {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick} = relatedIem;\r\n const selectedFeature = activeFeature || activeNotInVisualizerFeature;\r\n return cartItems.some(cartItem => {\r\n return (cartItem.partId === relatedIem.partId) && (cartItem.currentQuote === activeQuoteIndex) && !cartItem.cartFeature.dbFeature.autoAddToCart\r\n }) || (placeholderChanged && firstClick[activeQuoteIndex] && selectedFeature && !selectedFeature.partName.includes(\"laceholder\"))\r\n}\r\n\r\nconst SubPartDoneCheckMark = (props) => {\r\n\r\n const {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick, activeQuoteIndex, partId, cartItems} = props;\r\n\r\n const selected = subPartIsDone(\r\n {placeholderChanged, activeFeature, activeNotInVisualizerFeature, firstClick, partId},\r\n activeQuoteIndex,\r\n cartItems\r\n );\r\n\r\n if (!selected) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nSubPartDoneCheckMark.propTypes = {\r\n relatedItem: PropTypes.object.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n return {\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n activeFeature: ownProps.relatedItem.activeFeature,\r\n activeNotInVisualizerFeature: ownProps.relatedItem.activeNotInVisualizerFeature,\r\n firstClick: ownProps.relatedItem.firstClick,\r\n placeholderChanged: ownProps.relatedItem.placeholderChanged,\r\n partId: ownProps.relatedItem.partId,\r\n cartItems: store.cartState.cartItems,\r\n fabricatorData: store.fabricatorState\r\n };\r\n};\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SubPartDoneCheckMark)\r\n","import React, { Fragment } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { FormattedMessage, injectIntl } from \"react-intl\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport { Look3DIcon, LookAugmentRealityIcon } from \"../../common/icons\";\r\nimport { LOOK_FEATURE_CONTENT } from \"../../look/core/constants\";\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\nimport config from \"../../sqft/components/canvas/store/sqftConfig\";\r\nimport {\r\n changeSqftFeaturesPopup,\r\n setAPIErrorMessage,\r\n setSqftCabinetsGlb,\r\n setSQFTViewMode\r\n} from \"../../../actions/sqftFunctions\";\r\nimport { setAbortController, setSQFTAr3dPopup } from \"../../../actions/sqftMenuFunctions\";\r\nimport { SQFT_VIEW_MODE } from \"../../sqft/constants\";\r\nimport { setCabinetGLBFromCabinetsSet } from \"../../sqft/helpers/sqft3dArHelper\";\r\nimport {setMultiLoader} from \"../../../actions/actionFunctions\";\r\n\r\nexport const SqftFeaturesPopup3dButtons = (props) => {\r\n const { changeSqftFeaturesPopup, isMobile, setSQFTViewMode, setMultiLoader, SQFTViewMode } = props;\r\n\r\n const threeDButtonClick = async () => {\r\n changeSqftFeaturesPopup({\r\n opened: false,\r\n sqftPassedData: null\r\n });\r\n if (SQFTViewMode === SQFT_VIEW_MODE.threeDMode) {\r\n setMultiLoader({activeStep: 0, visible: true, finished: false});\r\n }\r\n setSQFTViewMode(SQFT_VIEW_MODE.threeDMode);\r\n await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n // setSQFTAr3dPopup({isOpened: true, contentType: SQFT_AR3D_POPUP_CONTENT_TYPE.threeD})\r\n // await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n }\r\n\r\n const arButtonClick = async () => {\r\n changeSqftFeaturesPopup({\r\n opened: false,\r\n sqftPassedData: null\r\n });\r\n if (SQFTViewMode === SQFT_VIEW_MODE.augmentedReality) {\r\n setMultiLoader({activeStep: 0, visible: true, finished: false});\r\n }\r\n setSQFTViewMode(SQFT_VIEW_MODE.augmentedReality);\r\n await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n // setSQFTAr3dPopup({isOpened: true, contentType: SQFT_AR3D_POPUP_CONTENT_TYPE.ar})\r\n // await setCabinetGLBFromCabinetsSet().then(r => void r);\r\n }\r\n\r\n const threeDButtonID = isMobile ? 'sqft.popup.button.3dButtonMobile' : 'sqft.popup.button.3dButton';\r\n const augButtonID = isMobile ? 'sqft.popup.button.augButtonMobile' : 'sqft.popup.button.augButton';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n return {\r\n isMobile,\r\n abortRequestController: store.sqftState.abortRequestController,\r\n cabinetsGlb: store.sqftState.cabinetsGlb,\r\n SQFTViewMode: store.sqftState.SQFTViewMode,\r\n };\r\n};\r\nconst mapDispatchToProps = {\r\n setSqftCabinetsGlb,\r\n setSQFTAr3dPopup,\r\n changeSqftFeaturesPopup,\r\n setAPIErrorMessage,\r\n setAbortController,\r\n setSQFTViewMode,\r\n setMultiLoader,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SqftFeaturesPopup3dButtons)\r\n)\r\n","import React, {useEffect, useRef} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {animateButtons, hideButtons} from \"../../../../SqftUiFunctions\";\r\nimport {SIDEBAR_LAYOUTS_BUTTONS} from \"../../../../../constants\";\r\nimport Square from \"../../../../canvas/core/shapes/layouts/square\";\r\nimport WideAngle from \"../../../../canvas/core/shapes/layouts/wideAngle\";\r\nimport Horseshoe from \"../../../../canvas/core/shapes/layouts/horseshoe\";\r\nimport Rectangle from \"../../../../canvas/core/shapes/layouts/rectangle\";\r\nimport RectangleIsland from \"../../../../canvas/core/shapes/layouts/rectangleIsland\";\r\nimport WideAngleReverted from \"../../../../canvas/core/shapes/layouts/wideAngleReverted\";\r\nimport workspace from \"../../../../canvas/core/workspace\";\r\nimport eventManager from \"../../../../canvas/store/sqftEventManager\";\r\nimport config from \"../../../../canvas/store/sqftConfig\";\r\nimport {toggleChangeLayoutPopup, updateSQFTCalculations} from \"../../../../../../../actions/sqftFunctions\";\r\nimport store from \"../../../../../../../store\";\r\nimport {setSQFTRoomLayouts} from \"../../../../../../../actions/sqftMenuFunctions\";\r\nimport {getCountertopPartNames} from \"../../../../../helpers/shapeHelper\";\r\n\r\nexport const setNewLayout = (layoutName) => {\r\n workspace.removeAllShapes();\r\n eventManager.stealCursor(true);\r\n window.setNextLayout = layoutName;\r\n const [countertopPartName, centerIslandPartName] = getCountertopPartNames();\r\n\r\n switch (layoutName) {\r\n case \"S\":\r\n case \"SP\":\r\n workspace.addShape(new Rectangle(), 'square', null, countertopPartName, layoutName);\r\n break;\r\n case \"SI\":\r\n case \"SPI\":\r\n workspace.addShape(new RectangleIsland(config.shapeSize), 'square', null, countertopPartName, layoutName);\r\n break;\r\n case \"SN\":\r\n case \"SNI\":\r\n case \"SPN\":\r\n case \"SPNI\":\r\n workspace.addShape(new WideAngleReverted(config.shapeSize), 'wideangle', null, countertopPartName, layoutName);\r\n break;\r\n case \"L\":\r\n case \"LI\":\r\n workspace.addShape(new WideAngle(config.shapeSize), 'wideangle', null, countertopPartName, layoutName);\r\n break;\r\n case \"LN\":\r\n case \"LNI\":\r\n workspace.addShape(new Horseshoe(config.shapeSize), 'horseshoe', null, countertopPartName, layoutName);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (layoutName.includes(\"I\")) {\r\n workspace.addShape(new Square(config.shapeSize, true), 'square', null, centerIslandPartName, layoutName);\r\n }\r\n\r\n // todo sqft-react remove?\r\n // nodes.layoutButtons.forEach(function (layoutButton) {\r\n // layoutButton.classList.remove(\"shapes-icon--active\");\r\n // });\r\n // document.querySelector(\"[data-layout='\"+layoutName+\"']\").classList.add(\"shapes-icon--active\");\r\n\r\n if (window.innerHeight < 480 && window.innerWidth < 991) {\r\n // todo sqft-react\r\n //Menu.hideSidebarSide();\r\n //Menu.hideSideBarContent();\r\n }\r\n const state = store.getState();\r\n const updateCalculations = state.sqftState.updateCalculations;\r\n\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n};\r\n\r\nexport const setRoomLayouts = (itemName) => {\r\n const state = store.getState();\r\n const roomLayouts = state.sqftMenuState.roomLayouts;\r\n const activeRoomIndex = state.sqftMenuState.activeRoomIndex;\r\n const updatedRoomLayouts = [...roomLayouts];\r\n const roomLayoutIndex = updatedRoomLayouts.findIndex(roomLayout => roomLayout.roomIndex === activeRoomIndex);\r\n if (roomLayoutIndex >= 0) {\r\n updatedRoomLayouts[roomLayoutIndex].layoutName = itemName;\r\n setSQFTRoomLayouts(updatedRoomLayouts);\r\n } else {\r\n setSQFTRoomLayouts([...roomLayouts, {roomIndex: activeRoomIndex, layoutName: itemName}]);\r\n }\r\n}\r\n\r\nconst SqftNavLayouts = (props) => {\r\n // other popups, modals and so on\r\n const {menuOpened, activeButton, roomLayouts, activeRoomIndex, setSQFTRoomLayouts} = props;\r\n const expanded = activeButton && menuOpened === \"layouts\";\r\n const buttonRefs = useRef({});\r\n\r\n useEffect(() => {\r\n const buttons = Object.values(buttonRefs.current);\r\n if(expanded) {\r\n animateButtons(buttons);\r\n } else {\r\n hideButtons(buttons);\r\n }\r\n\r\n }, [expanded]);\r\n\r\n const handleButtonClick = async (event, itemName) => {\r\n console.log(\"itemName\", itemName);\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const shapesLength = workspace.getShapes().length;\r\n const isRoomHasLayout = roomLayouts.some(roomLayout => roomLayout.roomIndex === activeRoomIndex);\r\n\r\n if (isRoomHasLayout || shapesLength) {\r\n callChangeLayoutDataPopup(itemName, true);\r\n setRoomLayouts(itemName);\r\n } else {\r\n setNewLayout(itemName);\r\n setSQFTRoomLayouts([...roomLayouts, {roomIndex: activeRoomIndex, layoutName: itemName}]);\r\n }\r\n };\r\n\r\n //todo\r\n const callChangeLayoutDataPopup = (layoutName, applyLayoutOnSqft = false) => {\r\n props.toggleChangeLayoutPopup(true, layoutName, applyLayoutOnSqft);\r\n // window.parent.postMessage({\r\n // action: SQFT_POST_MESSAGE_ACTIONS.callChangeLayoutDataPopup,\r\n // payload: {\r\n // layoutName,\r\n // applyLayoutOnSqft\r\n // }\r\n // }, \"*\");\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n {\r\n SIDEBAR_LAYOUTS_BUTTONS.map((item, index) => (\r\n
    \r\n
    \r\n\r\n )\r\n\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n menuOpened: store.sqftMenuState.menuOpened,\r\n activeButton: store.sqftMenuState.activeButton,\r\n activeRoomType: store.sqftMenuState.activeRoomType,\r\n roomLayouts: store.sqftMenuState.roomLayouts,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n quotes: store.quotesState.quotes,\r\n activeRoomIndex: store.sqftMenuState.activeRoomIndex,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleChangeLayoutPopup,\r\n setSQFTRoomLayouts,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftNavLayouts);\r\n","import { useState, useEffect, useMemo } from 'react';\r\nimport { checkIfLookFeaturesReceived } from \"../../../api/look-api\";\r\nimport { getCurrentLayout } from \"../../appLayout\";\r\n\r\nconst useFetchFeatures = (partIds, searchText = \"\", shouldGetModelsOnlyWithThirdPartyAR3DUrls = false) => {\r\n const [featuresData, setFeaturesData] = useState({});\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n const layout = useMemo(() => getCurrentLayout(), []);\r\n\r\n useEffect(() => {\r\n const fetchAllRows = async () => {\r\n setIsLoading(true);\r\n const newFeaturesData = {};\r\n\r\n for (const partId of partIds) {\r\n const featureGroup = layout.getFeatureGroupByPartId(partId);\r\n let navItems = [];\r\n\r\n if (featureGroup) {\r\n // If features are not received and no request is in progress, wait for the promise\r\n if (!featureGroup.allFeaturesReceived && !featureGroup.requestInProgress) {\r\n await checkIfLookFeaturesReceived(featureGroup);\r\n }\r\n\r\n navItems = layout.designNavigationItems(\r\n { part: featureGroup },\r\n [],\r\n searchText,\r\n null,\r\n \"all\",\r\n [],\r\n { firstFeature: null, firstConditions: null },\r\n )\r\n\r\n if (shouldGetModelsOnlyWithThirdPartyAR3DUrls) {\r\n navItems = navItems.filter(feature => {\r\n return feature.part\r\n && feature.part.dbFeature\r\n && Array.isArray(feature.part.dbFeature.thirdPartyAR3DUrls)\r\n && feature.part.dbFeature.thirdPartyAR3DUrls.length > 0\r\n })\r\n }\r\n }\r\n\r\n newFeaturesData[partId] = {\r\n rows: navItems,\r\n featureGroup: featureGroup,\r\n };\r\n }\r\n\r\n setFeaturesData(newFeaturesData);\r\n setIsLoading(false);\r\n };\r\n\r\n fetchAllRows();\r\n }, [partIds, searchText, layout, shouldGetModelsOnlyWithThirdPartyAR3DUrls]);\r\n\r\n return { featuresData, isLoading };\r\n};\r\n\r\nexport default useFetchFeatures;\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ListIcon from \"@mui/icons-material/List\";\r\nimport ViewStreamIcon from '@mui/icons-material/ViewStream';\r\nimport ViewModuleIcon from '@mui/icons-material/ViewModule';\r\n\r\nimport {setLookViewType} from \"../../../../actions/lookFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n\r\nconst LookViewTypeSwitcher = (props) => {\r\n\r\n const {intl, lookExpanded, lookViewType, setLookViewType, isMobile} = props;\r\n\r\n const listButtonClick = () => {\r\n const newViewType = lookViewType === 4 ? 1 : lookViewType + 1;\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMenuHeaderViewType + newViewType);\r\n setLookViewType(newViewType);\r\n };\r\n\r\n const getViewIcon = () => {\r\n switch (lookViewType) {\r\n case 1:\r\n default:\r\n return \r\n case 2:\r\n return \r\n case 3:\r\n return \r\n case 4:\r\n return \r\n }\r\n }\r\n\r\n return (\r\n \r\n {getViewIcon(lookViewType)}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookExpanded,\r\n lookViewType,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookViewType\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookViewTypeSwitcher)\r\n)\r\n","import React, {useEffect, useMemo, useRef, useState} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport { Grid } from 'react-virtualized';\r\nimport 'react-virtualized/styles.css';\r\nimport {injectIntl} from 'react-intl';\r\nimport PropTypes from \"prop-types\";\r\nimport uniqBy from \"lodash/uniqBy\";\r\n\r\nimport {getCurrentLayout} from \"../../../../../../../appLayout\";\r\nimport {featureInterface} from \"../../../../../../../../interfaces/featureInterface\";\r\nimport SqftFeaturesChecker from \"./SqftFeaturesChecker\";\r\nimport SqftOptionsLoading from \"./SqftOptionsLoading\";\r\nimport SqftOptionsRelatedItemRow from \"./SqftOptionsRelatedItemRow\";\r\nimport {\r\n getFilteredRelatedFeatures,\r\n getRelatedFeaturesFromLayout,\r\n} from \"../../../../../../../../misc/helpers\";\r\nimport {getSortedFeatures} from \"../../../../../../helpers/featureHelper\";\r\nimport {loaderDisable, loaderEnable} from \"../../../../../../../ui/loaderView\";\r\n\r\nconst SqftOptionsRelatedItemList = (props) => {\r\n const { windowHeight, isMobile, activeFeature, itemClickCallback, partId, shouldSortByWidth, searchInputValue,\r\n reCacheMenuCounter, lookViewType, selectedFilters, groheFiltersSearchText } = props;\r\n const [activeItemIndex, setActiveItemIndex] = React.useState(0);\r\n const containerRef = useRef(null);\r\n const [containerHeight, setContainerHeight] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n const [parentFeature, setParentFeature] = useState(null);\r\n const [width, setWidth] = useState(296);\r\n\r\n useEffect(() => {\r\n setWidth(isMobile ? 238 : 296);\r\n }, [isMobile]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n if (containerRef.current) {\r\n setContainerHeight(containerRef.current.clientHeight);\r\n }\r\n };\r\n\r\n const setupResizeObserver = () => {\r\n const resizeObserver = new ResizeObserver(handleResize);\r\n const currentContainer = containerRef.current;\r\n\r\n if (currentContainer) {\r\n setContainerHeight(currentContainer.clientHeight);\r\n resizeObserver.observe(currentContainer);\r\n }\r\n\r\n return () => {\r\n if (currentContainer) {\r\n resizeObserver.unobserve(currentContainer);\r\n }\r\n };\r\n };\r\n\r\n // Set up observer after a short delay to ensure the ref is available\r\n const timeoutId = setTimeout(() => {\r\n setupResizeObserver();\r\n }, 0);\r\n\r\n return () => {\r\n clearTimeout(timeoutId);\r\n setupResizeObserver();\r\n };\r\n }, [containerRef]);\r\n\r\n useEffect(() => {\r\n if (containerRef.current) {\r\n setContainerHeight(containerRef.current.clientHeight);\r\n }\r\n }, [windowHeight]);\r\n\r\n const layout = useMemo(() => getCurrentLayout(), []);\r\n const featureGroup = useMemo(() => layout.getFeatureGroupByPartId(partId), [layout, partId]);\r\n\r\n useEffect(() => {\r\n if (featureGroup) {\r\n setLoading(!featureGroup.allFeaturesReceived);\r\n if (!featureGroup.allFeaturesReceived) {\r\n loaderEnable();\r\n }\r\n } else {\r\n setLoading(false);\r\n }\r\n }, [featureGroup]);\r\n\r\n useEffect(() => {\r\n if (!featureGroup) {\r\n setParentFeature(null);\r\n return;\r\n }\r\n\r\n let parentFeature;\r\n\r\n if (featureGroup.activeFeature) {\r\n parentFeature = featureGroup.activeFeature;\r\n } else if (!featureGroup.allFeaturesReceived) {\r\n setParentFeature(null);\r\n return;\r\n }\r\n\r\n if (!featureGroup.activeFeature) {\r\n //featureGroup.setDefault(layout, true);\r\n parentFeature = featureGroup.activeFeature ? featureGroup.activeFeature : featureGroup.activeNotInVisualizerFeature;\r\n }\r\n\r\n setParentFeature(parentFeature);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [featureGroup, layout, activeFeature, partId, loading, reCacheMenuCounter]);\r\n\r\n if (!featureGroup) {\r\n return \r\n }\r\n\r\n if (loading) {\r\n return (\r\n {\r\n if (featureGroup.allFeaturesReceived) {\r\n setLoading(false);\r\n loaderDisable();\r\n }\r\n }} />\r\n )\r\n }\r\n\r\n if (!parentFeature) {\r\n console.log(\"selected feature matched by name not found\", partId);\r\n console.log(\"parentFeature\", parentFeature);\r\n return null;\r\n }\r\n\r\n const relatedFeatures = parentFeature.getFeatureRelatedFeatures();\r\n\r\n if (!Array.isArray(relatedFeatures) || !relatedFeatures.length) {\r\n console.log(\"relatedFeatures are missing\", relatedFeatures);\r\n console.log(\"parentFeature\", parentFeature);\r\n return null;\r\n }\r\n\r\n // Helper function to replace abbreviations in search text\r\n const expandSearchText = (text) => {\r\n return text\r\n .replace(/\\bh(\\d)/gi, 'Height $1')\r\n .replace(/\\bw(\\d)/gi, 'Width $1')\r\n .replace(/\\bd(\\d)/gi, 'Depth $1')\r\n .replace(/\\bh\\b/gi, 'Height')\r\n .replace(/\\bw\\b/gi, 'Width')\r\n .replace(/\\bd\\b/gi, 'Depth');\r\n };\r\n const expandedGroheFiltersSearchText = expandSearchText(groheFiltersSearchText);\r\n\r\n //Now let's search for the related features\r\n const {noFeaturesFound, relatedFeaturesFound} = getRelatedFeaturesFromLayout(\r\n relatedFeatures,\r\n parentFeature,\r\n expandedGroheFiltersSearchText,\r\n selectedFilters\r\n );\r\n if (noFeaturesFound.length) {\r\n console.log(\"ERROR: noFeaturesFound\", noFeaturesFound);\r\n }\r\n\r\n let relatedItemsList = getFilteredRelatedFeatures(relatedFeaturesFound);\r\n relatedItemsList = uniqBy(relatedItemsList, (feature) => feature.dbFeature.id);\r\n let emptyUrlsLog = [];\r\n\r\n relatedItemsList = relatedItemsList.filter(feature => {\r\n if (!feature.dbFeature.thirdPartyAR3DUrls) {\r\n //todo we can remove this searchInputValue and search by filters\r\n if (searchInputValue && feature.getFeatureName().toLowerCase().includes(searchInputValue.toLowerCase())\r\n || !searchInputValue\r\n ) {\r\n emptyUrlsLog.push(feature.dbFeature.sharedFeatureName);\r\n }\r\n } else {\r\n return feature;\r\n }\r\n });\r\n\r\n // const relatedGroups = createRelatedGroups(relatedItemsList, [], activeQuoteIndex, intl, fabricatorData)\r\n // void relatedGroups\r\n // console.log(\"relatedGroups\", relatedGroups);\r\n //\r\n // const groupName = parentFeature.dbFeature.groupName;\r\n // void groupName;\r\n\r\n if (emptyUrlsLog.length > 0) {\r\n console.log(`Features with empty thirdPartyAR3DUrls: ${emptyUrlsLog.join(', ')}`);\r\n }\r\n\r\n if (shouldSortByWidth) {\r\n relatedItemsList = getSortedFeatures(relatedItemsList);\r\n }\r\n\r\n // Define column and row settings based on lookViewType\r\n let columnCount;\r\n let rowHeight;\r\n\r\n switch (lookViewType) {\r\n case 1:\r\n columnCount = 1;\r\n rowHeight = 104;\r\n break;\r\n case 2:\r\n columnCount = 2;\r\n rowHeight = 170;\r\n break;\r\n case 3:\r\n columnCount = 1;\r\n rowHeight = 320; // Increased row height\r\n break;\r\n case 4:\r\n columnCount = 3;\r\n rowHeight = 128;\r\n break;\r\n default:\r\n columnCount = 1;\r\n rowHeight = 135;\r\n }\r\n\r\n const columnWidth = Math.floor(width / columnCount) - 8 / columnCount; // Ensure width is an integer to avoid overflow\r\n const rowCount = Math.ceil(relatedItemsList.length / columnCount);\r\n\r\n return (\r\n
    \r\n {\r\n {\r\n const index = rowIndex * columnCount + columnIndex;\r\n if (index >= relatedItemsList.length) return null;\r\n return (\r\n \r\n )\r\n }}\r\n />\r\n }\r\n
    \r\n )\r\n};\r\n\r\nSqftOptionsRelatedItemList.propTypes = {\r\n activeFeature: PropTypes.shape(featureInterface),\r\n partId: PropTypes.string,\r\n shouldSortByWidth: PropTypes.bool,\r\n itemClickCallback: PropTypes.func,\r\n //searchInputValue: PropTypes.string\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const { menuOpened, reCacheMenuCounter } = store.sqftMenuState;\r\n const { visualizersLoaded } = store.serverState;\r\n const { windowHeight, isMobile } = store.serverState;\r\n const { activeQuoteIndex } = store.quotesState;\r\n const { sqftFromFeature } = store.sqftState;\r\n const { lookViewType } = store.lookState;\r\n const {groheFiltersSearchText} = store.groheState;\r\n const {selectedFilters} = store.filterState;\r\n\r\n return {\r\n menuOpened,\r\n windowHeight,\r\n isMobile,\r\n activeQuoteIndex,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n fabricatorData: store.fabricatorState,\r\n sqftFromFeature,\r\n reCacheMenuCounter,\r\n groheFiltersSearchText,\r\n selectedFilters,\r\n lookViewType,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SqftOptionsRelatedItemList)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst LookVirtualizedListLoadingItem = (props) => {\r\n\r\n const {style, currentType, lookExpanded} = props;\r\n\r\n return (\r\n
  • \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {currentType === 1 ? (\r\n
    \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n
  • \r\n )\r\n};\r\n\r\nLookVirtualizedListLoadingItem.propTypes = {\r\n style: PropTypes.object,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {lookExpanded, lookViewType} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {viewType} = ownProps;\r\n\r\n return {\r\n lookExpanded,\r\n currentType: viewType || lookViewType,\r\n isMobile,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookVirtualizedListLoadingItem)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {GroheLockIconSmall} from \"../../../../common/icons\";\r\nimport {pricingIsLocked} from \"../../lookNavigationFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {setLookOverlayOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../../../core/constants\";\r\n\r\nconst LookFeaturePriceLocked = (props) => {\r\n\r\n const {lookFeature, lockedText, setLookOverlayOpened} = props;\r\n\r\n let {showPrice} = pricingIsLocked();\r\n if (showPrice && lookFeature) {\r\n const layout = getCurrentLayout();\r\n showPrice = layout.partIdExistInQtCategory(lookFeature.partId);\r\n }\r\n\r\n const handlePriceLockClick = () => {\r\n console.log(\"lookFeature\", lookFeature);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n\r\n};\r\n\r\nLookFeaturePriceLocked.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n lockedText: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeaturePriceLocked)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {setSelectedFilters, showFilters} from \"../../../../actions/actionFunctions\";\r\nimport GroheFiltersSearchInputAsync from \"../../grohe/groheNavigation/groheFilters/groheFiltersSearchInputAsync\";\r\nimport LookFiltersList from \"./lookFiltersList\";\r\nimport LookFiltersReset from \"./lookFiltersReset\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {setSQFTActiveLevel3Button} from \"../../../../actions/sqftMenuFunctions\";\r\n\r\n\r\nconst LookFilters = (props) => {\r\n const { wrapperStyles, filtersOpened, intl, showFilters, lookActiveCategory, isMobile, lookActiveFeature,\r\n selectedFilters, groheFiltersSearchText } = props;\r\n const { isRelatedItemsFilters, shouldCloseLevel3Sidebar, setSQFTActiveLevel3Button } = props;\r\n\r\n const closeFilterClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersClose);\r\n showFilters(!filtersOpened);\r\n if (shouldCloseLevel3Sidebar) {\r\n setSQFTActiveLevel3Button(null);\r\n }\r\n };\r\n\r\n if (!lookActiveCategory) {\r\n return null\r\n }\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n {selectedFilters.length || groheFiltersSearchText ? : null}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookFilters.propTypes = {\r\n wrapperStyles: PropTypes.object,\r\n isRelatedItemsFilters: PropTypes.bool,\r\n shouldCloseLevel3Sidebar: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveCategory, lookActiveFeature} = store.lookState;\r\n const {showFilters, selectedFilters} = store.filterState;\r\n const {isMobile} = store.serverState;\r\n const {groheFiltersSearchText} = store.groheState;\r\n\r\n return {\r\n filtersOpened: showFilters,\r\n selectedFilters,\r\n lookActiveCategory,\r\n lookActiveFeature,\r\n isMobile,\r\n groheFiltersSearchText,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n showFilters,\r\n setSelectedFilters,\r\n setSQFTActiveLevel3Button,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFilters)\r\n);\r\n","import React from \"react\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {useLocation} from \"react-router-dom\";\r\n\r\nimport {IS_PRODUCT_JOURNEY} from \"../../config\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../analytics\";\r\nimport {ROUTES} from \"../../routes\";\r\nimport {isIframe} from \"../../misc/helpers\";\r\nimport {UserPopupContent} from \"../visComponents/constants\";\r\nimport {setUserPopupContent} from \"../../actions/userFunctions\";\r\nimport {setLookOverlayOpened} from \"../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"./core/constants\";\r\n\r\n\r\nconst LookPolicyLinks = (props) => {\r\n\r\n const {position, isSimple, lookPageOpened, isMobile, fabricatorData, setUserPopupContent, setLookOverlayOpened} = props;\r\n const location = useLocation();\r\n\r\n const openLink = (linkKey) => {\r\n const baseUrl = fabricatorData.isAmericanStandard\r\n ? \"https://www.americanstandard-us.com\"\r\n : window.location && window.location.ancestorOrigins && window.location.ancestorOrigins[\"0\"]\r\n ? window.location.ancestorOrigins[\"0\"]\r\n : \"https://grohe.us\";\r\n\r\n Analytics.sendClickEvent(lookPageOpened === ROUTES.list\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookListPolicyLinks + linkKey\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookCanvasPolicyLinks + linkKey\r\n );\r\n\r\n switch (linkKey) {\r\n case \"terms\": {\r\n const openUrl = fabricatorData.isAmericanStandard\r\n ? baseUrl + \"/terms-of-use#Terms%20of%20Use\"\r\n : baseUrl + \"/legal-info\";\r\n return window.open(openUrl, \"_blank\");\r\n }\r\n case \"privacy\": {\r\n const openUrl = fabricatorData.isAmericanStandard\r\n ? baseUrl + \"/privacy-policy#Privacy\"\r\n : baseUrl + \"/privacy-policy\";\r\n return window.open(openUrl, \"_blank\");\r\n }\r\n // case \"socialPolicy\":\r\n // return window.open(baseUrl + \"/social-policy\", \"_blank\");\r\n // case \"legalInfo\":\r\n // return window.open(baseUrl + (fabricatorData.isAmericanStandard ? \"/lead-generation-policy\" : \"/legal-info\"), \"_blank\");\r\n case \"privacyQC\": {\r\n setUserPopupContent(UserPopupContent.terms);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, \"termsOnly\");\r\n break;\r\n }\r\n default:\r\n return\r\n }\r\n }\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n\r\n return (\r\n
    \r\n
      \r\n {isLixil ? [\"terms\", \"privacy\"].map(linkKey => {\r\n return (\r\n
    • \r\n openLink(linkKey)}>\r\n \r\n \r\n
    • \r\n )\r\n }) : (\r\n
    • \r\n openLink(\"privacyQC\")}>\r\n \r\n \r\n
    • \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookPolicyLinks.propTypes = {\r\n position: PropTypes.string,\r\n isSimple: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookPageOpened} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n lookPageOpened,\r\n isMobile,\r\n fabricatorData\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setUserPopupContent,\r\n setLookOverlayOpened\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookPolicyLinks)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {postMessageToParent} from \"../lookMessaging\";\r\nimport {GROHE_ON_OPEN_ACTION, GROHE_POST_MESSAGES_ACTIONS} from \"../iframeIntegration\";\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getTempIdForPostMessage, LIXIL_USER_QUERY_PARAMS} from \"../../../api/look-api\";\r\nimport {getLookId} from \"../lookNavigation/lookFunctions2\";\r\nimport {loaderEnable} from \"../../ui/loaderView\";\r\n\r\nconst WithLoginPostMessage = (props) => {\r\n\r\n const {children, lookReturnAction, activePreset, bvPresets, exisingTempId} = props;\r\n\r\n const loginPostMessage = async (sessionEnded = false) => {\r\n loaderEnable();\r\n const layout = getCurrentLayout();\r\n await layout.updateLocalStorage();\r\n\r\n let tempId = await getTempIdForPostMessage(lookReturnAction || GROHE_ON_OPEN_ACTION.saveQuote, exisingTempId);\r\n let lookUrl = window.location.href;\r\n\r\n if (sessionEnded) {\r\n const searchParams = new URLSearchParams(\r\n (window.location.search).replace(/amp;/g, \"\")\r\n || (window.location.hash).replace(/(.*)\\?/g, \"\")\r\n || \"\"\r\n );\r\n LIXIL_USER_QUERY_PARAMS.forEach(param => searchParams.delete(param));\r\n\r\n let stringifiedParams = searchParams.toString();\r\n let baseHref = window.location.origin + window.location.pathname;\r\n if (baseHref[baseHref.length - 1] === \"/\") {\r\n baseHref.slice(0, -1);\r\n }\r\n if (stringifiedParams && stringifiedParams.length && stringifiedParams[0] !== \"?\") {\r\n stringifiedParams = \"?\" + stringifiedParams;\r\n }\r\n lookUrl = baseHref + stringifiedParams + window.location.hash;\r\n\r\n }\r\n\r\n if (!lookUrl.includes(\"look-\")) {\r\n const withHashUrl = new URL(lookUrl);\r\n const lookId = getLookId(activePreset, bvPresets);\r\n withHashUrl.hash = `#/look-${lookId}`;\r\n lookUrl = withHashUrl.href;\r\n }\r\n\r\n console.log(\"returnUrl: \", lookUrl);\r\n\r\n postMessageToParent({\r\n \"EventType\": GROHE_POST_MESSAGES_ACTIONS.signIn,\r\n \"returnUrl\": lookUrl,\r\n \"tempID\": tempId\r\n });\r\n }\r\n\r\n return children(loginPostMessage)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookReturnAction} = store.lookState;\r\n const {exisingTempId} = store.groheState;\r\n const {activePreset, bvPresets} = store.bathroomVisualizerState;\r\n\r\n return {\r\n lookReturnAction,\r\n activePreset,\r\n bvPresets,\r\n exisingTempId,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WithLoginPostMessage)\r\n","import React, {useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport {setLookOpened,\r\n setSidebarModalOpened,\r\n setLookActiveFeature,\r\n setLookActiveCategory} from \"../../../../actions/lookFunctions\";\r\nimport LookSideBarLayoutButton from \"./lookSideBarLayoutButton\";\r\nimport LookSideBarSaveButton from \"./lookSideBarSaveButton\";\r\n// import LookSideBarHomeButton from \"./lookSideBarHomeButton\";\r\nimport LookSideBarEditButton from \"./lookSideBarEditButton\";\r\nimport LookSideBarMoreButton from \"./lookSideBarMoreButton\";\r\nimport LookSideBarFiltersButton from \"./lookSideBarFiltersButton\";\r\nimport {LOOK_INTRO_STEPS, LOOK_OVERLAYS} from \"../../core/constants\";\r\nimport {zoomCanvasOut} from \"../lookFunctions\";\r\nimport {setCanvasScale} from \"../../../../actions/actionFunctions\";\r\nimport LookSideBarPingPilotButton from \"./lookSideBarPingPilotButton\";\r\nimport LookSideBarRevertButton from \"./lookSideBarRevertButton\";\r\nimport WithUpdateLookCartItem from \"../../hocs/withUpdateLookCartItem\";\r\nimport {useShowRoomLayoutsButton} from \"../../../../misc/helperHooks\";\r\n\r\nconst LookSidebar = (props) => {\r\n\r\n const {popupCloseClick, imageCanvas, lookOverlayOpened, lookPageOpened, isMobile, introStep, lookOpened, setLookOpened,\r\n setCanvasScale, setLookActiveFeature, setLookActiveCategory, activePreset, visualizersLoadedLength} = props;\r\n\r\n const highLightForDemo = [LOOK_INTRO_STEPS.wallsAndFloor, LOOK_INTRO_STEPS.layoutsAndRooms, LOOK_INTRO_STEPS.saveAndMore];\r\n\r\n const stylePopups = [LOOK_OVERLAYS.stylePairing, LOOK_OVERLAYS.styleColor, LOOK_OVERLAYS.styleRemove, LOOK_OVERLAYS.styleRemoveBack];\r\n const stylePopupOnMobile = isMobile && stylePopups.some(popupType => popupType === lookOverlayOpened);\r\n\r\n useEffect(() => {\r\n // if (lookPageOpened || lookOverlayOpened) {\r\n if (lookPageOpened) {\r\n zoomCanvasOut(imageCanvas, setCanvasScale)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lookPageOpened, lookOverlayOpened])\r\n\r\n const sidebarButtonClicked = () => { // closes opened menu and zooms out canvas\r\n if (lookOpened) {\r\n setLookOpened(null);\r\n setLookActiveCategory(\"\");\r\n setLookActiveFeature(null);\r\n }\r\n // revertFeatureBeforeChange(updateCanvasCount);\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n }\r\n\r\n const showRoomLayoutsButton = useShowRoomLayoutsButton(activePreset, isMobile, visualizersLoadedLength);\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nLookSidebar.propTypes = {\r\n popupCloseClick: PropTypes.func,\r\n imageCanvas: PropTypes.object,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookOpened, lookOverlayOpened, lookPageOpened, introStep} = store.lookState;\r\n const {activeTheme, isMobile, visualizersLoaded} = store.serverState;\r\n const {activePreset} = store.bathroomVisualizerState;\r\n\r\n return {\r\n lookOpened,\r\n activeTheme,\r\n lookOverlayOpened,\r\n isMobile,\r\n introStep,\r\n lookPageOpened,\r\n activePreset,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOpened,\r\n setSidebarModalOpened,\r\n setCanvasScale,\r\n setLookActiveFeature,\r\n setLookActiveCategory,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(connect(mapStateToProps, mapDispatchToProps)(LookSidebar))\r\n)\r\n","import {useEffect} from \"react\";\r\n\r\nexport const onInputBlur = (event, property, setInputValue, errorsObject, changeErrorsObject, getValidationErrors) => {\r\n const value = (event && event.target && event.target.value ? event.target.value : \"\").trim();\r\n setInputValue(property, value); // set trimmed version\r\n if (changeErrorsObject && getValidationErrors) {\r\n const errors = getValidationErrors(property, value);\r\n if (errors.length) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n } else if (!errors.length && errorsObject && errorsObject[property]) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport const onInputChange = (event, property, setInputValue, errorsObject, changeErrorsObject, getValidationErrors) => {\r\n const value = event.target.value;\r\n setInputValue(property, value);\r\n if (errorsObject && errorsObject[property] && getValidationErrors) {\r\n const errors = getValidationErrors(property, value);\r\n if (!errors.length && changeErrorsObject) {\r\n changeErrorsObject({\r\n [property]: errors\r\n })\r\n }\r\n }\r\n};\r\n\r\nexport const useInputsValidation = (inputsValidated, onBlur, inputValue) => {\r\n useEffect(() => {\r\n if (!inputsValidated) {\r\n onBlur({\r\n target: {\r\n value: inputValue\r\n }\r\n });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputsValidated]);\r\n};\r\n","import React, {Fragment, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport trim from \"lodash/trim\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport PhoneIcon from '@mui/icons-material/Phone';\r\nimport TextField from \"@mui/material/TextField\";\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport {setUserPopupContent, setUserTwoFa} from \"../../../actions/userFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport {UserPopupContent} from \"../../visComponents/constants\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {\r\n generateTwoFaAuthenticationToken,\r\n sendAuthenticationRequest,\r\n validateTwoFaAuthentication\r\n} from \"../../../api/user-api\";\r\nimport MaterialSpinner from \"../../ui/materialSpinner\";\r\nimport {changeUserInfo, setUserPhoneNumberValidated} from \"../../../actions/actionFunctions\";\r\n\r\nexport const sendAuthRequest = async (twoFALoading, analyticsLabel, userInfo, userIsLoggedIn, type, setUserTwoFa) => {\r\n if (twoFALoading) {\r\n return false\r\n }\r\n setUserTwoFa({\r\n twoFALoading: true\r\n });\r\n Analytics.sendClickEvent(analyticsLabel);\r\n const twoFAToken = await generateTwoFaAuthenticationToken();\r\n if (twoFAToken && userIsLoggedIn) {\r\n setUserTwoFa({ // set token to redux store, so the input can check it\r\n twoFAToken\r\n });\r\n await sendAuthenticationRequest(twoFAToken, `+${userInfo.country.dialCode} ${userInfo.phoneNumber}`, type);\r\n }\r\n setUserTwoFa({\r\n twoFALoading: false\r\n });\r\n}\r\n\r\nconst TwoFaCodeInput = (props) => {\r\n\r\n const {history, intl, setUserPhoneNumberValidated, userInfo, isPhoneNumberValidated, lookOverlayOpened,\r\n setUserPopupContent, userTwoFa, setUserTwoFa, closePopup, location} = props;\r\n const {twoFAToken, twoFALoading} = userTwoFa;\r\n\r\n const [authCode, setAuthCode] = useState(\"\");\r\n const [inValidCode, setInValidCode] = useState(\"\");\r\n const [isBlurred, setIsBlurred] = useState(false);\r\n\r\n const updatePhoneButtonClick = () => {\r\n if (twoFALoading) {\r\n return false\r\n }\r\n if (lookOverlayOpened === LOOK_OVERLAYS.leadCapture) {\r\n const analyticsLabel = IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.leadCapturePopupTwoFAUpdatePhone\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookLeadCapturePopupTwoFAUpdatePhone;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n setUserPopupContent(UserPopupContent.twoFA);\r\n return false\r\n }\r\n Analytics.sendClickEvent(PRODUCT_JOURNEY_ANALYTIC_EVENTS.cartTwoFAUpdatePhone);\r\n history.push(ROUTES.cartTwoFA);\r\n };\r\n\r\n const checkCode = async (newAuthCode) => {\r\n setUserTwoFa({\r\n twoFALoading: true\r\n });\r\n const validated = await validateTwoFaAuthentication(twoFAToken, newAuthCode, userInfo.phoneNumber);\r\n console.log(\"validated\", validated);\r\n setUserTwoFa({\r\n twoFALoading: false\r\n });\r\n Analytics.sendEvent(\"PhoneVerification\", validated ? \"Success\" : \"Failure\");\r\n if (validated) {\r\n setUserPhoneNumberValidated(true);\r\n const currentLocation = location.pathname;\r\n history.push(currentLocation + \"/phone-verified-thankyou\");\r\n setTimeout(() => {\r\n if (lookOverlayOpened === LOOK_OVERLAYS.leadCapture && closePopup) {\r\n history.push(currentLocation);\r\n closePopup();\r\n } else {\r\n history.push(ROUTES.cartTerms);\r\n }\r\n }, 2000);\r\n } else {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.incorrectCode\"}));\r\n }\r\n }\r\n\r\n const onUserInputChange = (e) => {\r\n const newAuthCode = trim(e.target.value).replace(/[^0-9]/g, \"\");\r\n setAuthCode(newAuthCode);\r\n\r\n if (newAuthCode.length === 6) {\r\n if (inValidCode) {\r\n setInValidCode();\r\n }\r\n checkCode(newAuthCode);\r\n } else if (newAuthCode.length > 6) {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.maxCode\"}));\r\n } else if (isBlurred && newAuthCode.length < 6) {\r\n setInValidCode(intl.formatMessage({id: \"look.inputs.errors.minCode\"}));\r\n } else if (inValidCode) {\r\n setInValidCode(\"\");\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n setIsBlurred(true)}\r\n error={!!inValidCode}\r\n helperText={inValidCode}\r\n variant=\"outlined\" />\r\n
    \r\n
    \r\n
    \r\n {isPhoneNumberValidated ? (\r\n \r\n \r\n \r\n ) : twoFALoading ? : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nTwoFaCodeInput.propTypes = {\r\n closePopup: PropTypes.func\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {userInfo, isPhoneNumberValidated, userIsLoggedIn, userTwoFa} = store.userState;\r\n const {lookOverlayOpened} = store.lookState;\r\n\r\n return {\r\n lookOverlayOpened,\r\n userInfo,\r\n isPhoneNumberValidated,\r\n userIsLoggedIn,\r\n userTwoFa,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n setUserPhoneNumberValidated,\r\n setUserTwoFa,\r\n setUserPopupContent,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(TwoFaCodeInput)\r\n )\r\n)\r\n","import React, {useMemo, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport $ from \"jquery\";\r\n\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\nimport Config, {IS_LIXIL_SERVERS, IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getCommonCoords, getFeatureCoords, getLayerCenter, navFeatureCLick, zoomCanvasOut} from \"../../lookFunctions\";\r\nimport {addToCart, setCanvasScale, updateCanvasCount} from \"../../../../../actions/actionFunctions\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {LOOK_WALLS_ONLY} from \"../../../core/constants\";\r\n\r\nimport {enableRelatedFeature, getPropertyToMatchActiveFeature} from \"../../lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport LookFeaturePrice from \"../lookListFeature/lookFeaturePrice\";\r\nimport {setWizardSelectedValues} from \"../../../../../actions/wizardFunctions\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookWizardSectionListFeatureQuantity from \"./lookWizardSectionListFeatureQuantity\";\r\nimport {\r\n setLookActiveFeature,\r\n setLookAllWallsTutorial,\r\n setLookCompatabilityAlert\r\n} from \"../../../../../actions/lookFunctions\";\r\nimport LookAllWallsRadioButton from \"../lookAllWallsRadioButton\";\r\nimport {\r\n checkForCompatabilityAlert,\r\n clickOnSimilarFeatures,\r\n getApplyToLogic,\r\n getShowMatchRadio,\r\n} from \"../../lookNavigationFunctions\";\r\nimport LookListActiveFeatureMobileButton from \"../lookListFeature/lookListActiveFeatureMobileButton\";\r\nimport {getAnalyticsEcommerceItem} from \"../../../../../analyticsEcommerceParams\";\r\nimport {getCorrectedCenter, shouldZoomPartId, shouldZoomToTheBottom} from \"../../../hocs/withZoomToFeature\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\n\r\nconst LookWizardSectionListFeature = (props) => {\r\n\r\n const {wizardGroup, lookFeature, lookViewType, featureGroup, updateCanvasCount, style, setLookActiveFeature, navItems,\r\n isMobile, addToCart, qtActiveCategory, setCanvasScale, wizardSelectedValues, wizardActiveStep, setWizardSelectedValues,\r\n imageCanvas, maxClickCountReached, updateLookCartItem, setLookCompatabilityAlert, isLixil, groheActiveFeatureQuantity,\r\n lookAllWallsTutorial, setLookAllWallsTutorial, isPhoneNumberValidated, lookLockedTutorial, isEncore, canvasScale,\r\n isAllWallsTutorialItem} = props;\r\n\r\n const featureElement = useRef();\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const featureIsLocked = useMemo(() => getFeatureIsLocked(lookFeature), [lookFeature, isPhoneNumberValidated]);\r\n\r\n const applyWizardItemClick = async (zoomFeature) => {\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n selectedFeature: lookFeature,\r\n partId: lookFeature.partId,\r\n singleFeature: navItems.length === 1,\r\n quantity: groheActiveFeatureQuantity\r\n }\r\n });\r\n\r\n const layout = getCurrentLayout();\r\n if (zoomFeature) {\r\n\r\n const parent = featureGroup || zoomFeature.getParent();\r\n Analytics.sendEcommerceEvent(\"select_item\", {\r\n item_list_id: zoomFeature.partId,\r\n item_list_name: parent.dbName || parent.partName || \"\",\r\n items: [getAnalyticsEcommerceItem(zoomFeature, 1)],\r\n });\r\n\r\n const featureLabel = Analytics.getSkuForAnalytics(zoomFeature);\r\n const analyticsLabel = LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardListFeature + featureLabel;\r\n Analytics.sendClickEvent(analyticsLabel);\r\n\r\n const positionInList = navItems ? navItems.findIndex(navItem => navItem.part.dbFeature.id === lookFeature.dbFeature.id) : null;\r\n setLookActiveFeature(zoomFeature, positionInList); // to set feature screen options // allow for look journey too\r\n\r\n if (showMatchRadio) { // before nav feature click\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n await clickOnSimilarFeatures(zoomFeature, applyToLogic, true);\r\n }\r\n }\r\n navFeatureCLick(zoomFeature);\r\n enableRelatedFeature(zoomFeature, addToCart, qtActiveCategory);\r\n\r\n // const parent = zoomFeature.getParent();\r\n // if (parent.disabled) {\r\n // parent.disabled = false;\r\n // parent.disabledClick();\r\n // }\r\n if (wizardGroup.multipleAddToCart) {\r\n return\r\n }\r\n updateCanvasCount();\r\n if (imageCanvas && imageCanvas.current && imageCanvas.current.pinchZoom && !LOOK_WALLS_ONLY.includes(zoomFeature.partId)\r\n && shouldZoomPartId(zoomFeature.partId, isMobile)) {\r\n if (zoomFeature.matchesMetaForArrayOfConditions(parent.getArrayOfConditions())) {\r\n const commonCoords = getFeatureCoords(zoomFeature, true) || getCommonCoords(parent, zoomFeature, imageCanvas.current.canvas);\r\n const {center} = getCorrectedCenter(\r\n getLayerCenter(commonCoords, imageCanvas.current.canvas, isMobile),\r\n null, zoomFeature, imageCanvas, isMobile\r\n );\r\n if (center) {\r\n imageCanvas.current.pinchZoom.zoomToCenter(center, 0, false, layout.partIdExistInQtCategory(zoomFeature.partId));\r\n setCanvasScale(imageCanvas.current.pinchZoom.options.tapZoomFactor)\r\n }\r\n }\r\n } else if (canvasScale !== 1) {\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n if (shouldZoomToTheBottom(zoomFeature.partId)) {\r\n $(\"html, body\").animate({scrollTop: document.body.scrollHeight}, 500);\r\n }\r\n }\r\n if (!lookAllWallsTutorial.finished && showMatchRadio && !featureIsLocked && !lookFeature.notAvailableInVisualizer\r\n && featureElement && featureElement.current && !isEncore) {\r\n const applyToLogic = getApplyToLogic(lookFeature);\r\n if (applyToLogic) {\r\n setLookAllWallsTutorial({\r\n visible: true,\r\n // withGrid: navItems.length === 1,\r\n // positionInList,\r\n lookFeature,\r\n top: featureElement.current.getBoundingClientRect().top,\r\n left: featureElement.current.getBoundingClientRect().left,\r\n height: style.height,\r\n width: style.width,\r\n // firstLockedIndex,\r\n // firstUnlockedIndex,\r\n })\r\n }\r\n }\r\n }\r\n updateLookCartItem(zoomFeature);\r\n }\r\n\r\n // const [canRender, setCanRender] = useState(false);\r\n const listFeatureClick = (event) => {\r\n if (event.target.closest(\".look-icon--delete\") || event.target.closest(\".gm-ios-checkbox\") || lookLockedTutorial.visible || isAllWallsTutorialItem) {\r\n return\r\n }\r\n if (Config.isDevMode() && lookFeature) {\r\n console.log(\"lookFeature\", lookFeature, lookFeature.metaData);\r\n }\r\n let zoomFeature = lookFeature;\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n const compatabilityLogic = isLixil ? [] : checkForCompatabilityAlert(zoomFeature);\r\n if (compatabilityLogic.length) {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookShowCompatabilityAlert);\r\n setLookCompatabilityAlert({\r\n visible: true,\r\n compatabilityLogic,\r\n clickedFeature: zoomFeature,\r\n applyFunction: applyWizardItemClick.bind(this, zoomFeature) // always apply features from this popup\r\n });\r\n return false\r\n }\r\n\r\n applyWizardItemClick(zoomFeature);\r\n }\r\n\r\n // const realFeatureGroup = (featureGroup || lookFeature.getParent())\r\n // const activeFeature = realFeatureGroup.activeNotInVisualizerFeature || realFeatureGroup.activeFeature;\r\n let isActive = false;\r\n if (wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].selectedFeature) {\r\n const propToMatch = getPropertyToMatchActiveFeature(wizardSelectedValues[wizardActiveStep].selectedFeature);\r\n isActive = lookFeature.dbFeature[propToMatch] === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature[propToMatch]\r\n }\r\n const nameLength = IS_PRODUCT_JOURNEY ? 40 : 500;\r\n\r\n const showMatchRadio = getShowMatchRadio(lookFeature);\r\n const showAllWalls = isActive && showMatchRadio;\r\n\r\n return (\r\n
  • \r\n
    \r\n {isActive ? (IS_PRODUCT_JOURNEY && isMobile) ? (\r\n \r\n ) : (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n \r\n {showAllWalls ? : null}\r\n
    \r\n
    \r\n \r\n \r\n \r\n {(wizardGroup.multipleAddToCart && !IS_PRODUCT_JOURNEY) || !IS_LIXIL_SERVERS ? null : (\r\n

    \r\n \r\n

    \r\n )}\r\n
    \r\n \r\n
    \r\n {wizardGroup.multipleAddToCart && !lookFeature.dbFeature.hideQuantity && !IS_PRODUCT_JOURNEY ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
  • \r\n )\r\n};\r\n\r\nLookWizardSectionListFeature.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n featureGroup: PropTypes.object,\r\n viewType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n style: PropTypes.object,\r\n imageCanvas: PropTypes.object.isRequired,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n navItems: PropTypes.array,\r\n isAllWallsTutorialItem: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookViewType, lookAllWallsTutorial, lookLockedTutorial} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {activePreset, bvPresets, canvasScale} = store.bathroomVisualizerState;\r\n const {qtActiveCategory} = store.qtState;\r\n const {wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n const {cabinetsApplyTo} = store.navigationState;\r\n const {isLixil, isEncore} = store.fabricatorState;\r\n const {groheActiveFeatureQuantity} = store.groheState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n\r\n return {\r\n lookViewType,\r\n isMobile,\r\n activePreset,\r\n bvPresets,\r\n qtActiveCategory,\r\n canvasScale,\r\n wizardSelectedValues,\r\n wizardActiveStep,\r\n cabinetsApplyTo,\r\n isLixil,\r\n groheActiveFeatureQuantity,\r\n lookAllWallsTutorial,\r\n isPhoneNumberValidated,\r\n lookLockedTutorial,\r\n isEncore,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateCanvasCount,\r\n addToCart,\r\n setCanvasScale,\r\n setWizardSelectedValues,\r\n setLookActiveFeature,\r\n setLookCompatabilityAlert,\r\n setLookAllWallsTutorial,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookWizardSectionListFeature)\r\n)\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {\r\n toggleSelectionWindow, toggleSelectionFeatureInfo, setCameFromPage,\r\n} from \"../../actions/actionFunctions\";\r\n\r\nimport Analytics from \"../../analytics\";\r\nimport {ROUTES} from \"../../routes\";\r\n\r\n\r\nconst ShoppingCartButton = (props) => {\r\n\r\n const {className, cartItems, setCameFromPage, selectionFeatureInfo, toggleSelectionFeatureInfo, toggleSelectionWindow,\r\n selectionOpened, selectionGroup, history, location} = props;\r\n\r\n const shCartButtonClick = () => {\r\n Analytics.sendClickEvent('go-to-shopping-cart');\r\n\r\n if (selectionOpened) {\r\n toggleSelectionWindow(false, selectionGroup);\r\n setCameFromPage(\"materials\");\r\n if (selectionFeatureInfo) {\r\n toggleSelectionFeatureInfo(null);\r\n }\r\n } else if (location && (location.pathname === ROUTES.home || location.pathname === ROUTES.quoteDesign)) {\r\n setCameFromPage(ROUTES.quoteDesign);\r\n }\r\n\r\n if (!window.location.href.includes('shoppingcart')) {\r\n history.push(ROUTES.shoppingcart);\r\n }\r\n\r\n };\r\n\r\n return (\r\n \r\n )\r\n\r\n}\r\n\r\nShoppingCartButton.propTypes = {\r\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n className: PropTypes.string\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {selectionFeatureInfo, selectionOpened, selectionGroup} = store.selectionState;\r\n\r\n return {\r\n cartItems,\r\n selectionFeatureInfo,\r\n selectionOpened,\r\n selectionGroup,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo,\r\n toggleSelectionWindow,\r\n}\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartButton)\r\n);\r\n","import React, {useEffect, useState} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {setLanguage} from \"../../actions/serverFunctions\";\r\nimport Config, {AVAILABLE_LANGUAGES, POST_MESSAGES} from \"../../config\";\r\nimport {isIframe} from \"../../misc/helpers\";\r\n\r\nconst LanguageSwitcher = (props) => {\r\n\r\n const {language, setLanguage, intl, fabricatorSettings} = props;\r\n const [dropdownVisible, setDropdownVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n return () => {\r\n window.removeEventListener('click', handleWrapperBlur)\r\n }\r\n }, []);\r\n\r\n if (!fabricatorSettings.showLanguageSelect || (!Config.isDevMode() && !document.kvConfig.isBackend)) {\r\n return null\r\n }\r\n\r\n const activeLanguage = language;\r\n\r\n const handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".language\", \".language-list\"];\r\n if (!disallowClasses.some(cls => e.target.closest(cls))) {\r\n setDropdownVisible(false)\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n const newVisible = !dropdownVisible;\r\n setDropdownVisible(newVisible);\r\n setTimeout(() => {\r\n newVisible\r\n ? window.addEventListener('click', handleWrapperBlur)\r\n : window.removeEventListener('click', handleWrapperBlur)\r\n }, 0)\r\n };\r\n\r\n const handleLocaleClick = (locale) => {\r\n setLanguage(locale);\r\n if (isIframe() && window.parent) {\r\n window.parent.postMessage({\r\n action: POST_MESSAGES.setIframeLanguage,\r\n payload: { language: locale }\r\n }, \"*\");\r\n }\r\n handleButtonClick();\r\n };\r\n\r\n const getLanguageName = (locale) => {\r\n switch (locale) {\r\n case \"en-US\":\r\n return intl.formatMessage({id: \"languageDropdown.english\"})\r\n case \"en-AU\":\r\n return intl.formatMessage({id: \"languageDropdown.australian\"})\r\n case \"fr-FR\":\r\n return intl.formatMessage({id: \"languageDropdown.french\"})\r\n case \"pl-PL\":\r\n return intl.formatMessage({id: \"languageDropdown.polish\"})\r\n case \"es-ES\":\r\n return intl.formatMessage({id: \"languageDropdown.spanish\"})\r\n default:\r\n return locale\r\n }\r\n };\r\n\r\n const styles = {\r\n height: dropdownVisible ? AVAILABLE_LANGUAGES.length * 50 : 0\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n {AVAILABLE_LANGUAGES.map((locale, languageIndex) => (\r\n
  • handleLocaleClick(locale)}>\r\n {getLanguageName(locale)}\r\n
  • \r\n ))}\r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n language: store.serverState.language,\r\n fabricatorSettings: store.fabricatorState.settings\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLanguage,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LanguageSwitcher)\r\n);\r\n","//********* TUTORIALS *********//\r\nimport * as types from \"./actionTypes\";\r\n\r\nexport const toggleShowAdvancedQuoting = (showAdvancedQuoting) => ({\r\n type: types.TOGGLE_SHOW_ADVANCED_QUOTING,\r\n payload: {showAdvancedQuoting}\r\n});\r\n\r\nexport const setAdvancedQuotingSearchItem = (advancedQuotingSearchItem) => ({\r\n type: types.SET_ADVANCED_QUOTING_SEARCH_ITEM,\r\n payload: {advancedQuotingSearchItem}\r\n});\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { toggleInstOpened } from \"../../actions/actionFunctions\";\r\n\r\nimport InstList from \"./instList\";\r\nimport Analytics from './../../analytics';\r\n\r\nclass InstView extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n unmount: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n Analytics.sendClickEvent('installations-close');\r\n if (!nextProps.instOpened && this.props.instOpened) {\r\n this.setState({\r\n unmount: true\r\n }, () => {\r\n setTimeout(() => {\r\n this.setState({\r\n unmount: false\r\n })\r\n }, 500)\r\n })\r\n }\r\n\r\n }\r\n\r\n closeInstallationView = () => {\r\n this.props.toggleInstOpened(false);\r\n };\r\n\r\n render() {\r\n\r\n return (\r\n
    \r\n
    \r\n

    \r\n

    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n instOpened: store.instState.instOpened,\r\n instState: store.instState.instState\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleInstOpened\r\n})(InstView);\r\n","import React from \"react\";\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {unlockPricing} from \"../../../actions/actionFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\n\r\nclass FeatureInfoPriceLocked extends React.Component {\r\n\r\n static propTypes = {\r\n textOnly: PropTypes.bool\r\n }\r\n\r\n handlePriceLockClick = () => {\r\n Analytics.sendClickEvent('feature-info-price-unlock');\r\n this.props.unlockPricing();\r\n };\r\n\r\n render() {\r\n return this.props.textOnly ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n unlockPricing\r\n})(FeatureInfoPriceLocked);\r\n","import React, {Fragment} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport FeatureDescription from \"../../visComponents/featureDescription\";\r\n\r\nconst FeatureInfoDescription = (props) => {\r\n\r\n const {fabricatorData, intl, selectionFeatureInfo, feature, brief} = props;\r\n const activeFeature = feature || selectionFeatureInfo;\r\n\r\n let pros = [];\r\n let subDescription = activeFeature.dbFeature.subDescription;\r\n if ((fabricatorData.isLowes || fabricatorData.isCaesarStone) && intl.messages) {\r\n if (intl.locale === \"fr-FR\" && intl.messages[\"transDoc.subDescription_FR.\" + activeFeature.dbFeature.sharedFeatureName]) {\r\n subDescription = intl.formatMessage({id: \"transDoc.subDescription_FR.\" + activeFeature.dbFeature.sharedFeatureName})\r\n } else if (intl.locale === \"pl-PL\" && intl.messages[\"transDoc.customSubDescription_PL.\" + activeFeature.dbFeature.sharedFeatureName]) {\r\n subDescription = intl.formatMessage({id: \"transDoc.customSubDescription_PL.\" + activeFeature.dbFeature.sharedFeatureName})\r\n }\r\n }\r\n if (!brief && subDescription && subDescription.length > 0) {\r\n pros = subDescription.split('\\n').filter(n => n);\r\n }\r\n\r\n return (\r\n \r\n \r\n {pros.length ? (\r\n
      \r\n {pros.map((pros, index) => {\r\n return
    • {pros}
    • \r\n })}\r\n
    \r\n ) : null}\r\n
    \r\n );\r\n};\r\n\r\nFeatureInfoDescription.propTypes = {\r\n feature: PropTypes.object,\r\n brief: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfoDescription)\r\n)\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\n\r\nimport WithClickCount from \"../../look/hocs/withClickCount\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {setWizardSelectedValues} from \"../../../actions/wizardFunctions\";\r\nimport {getFeatureGroupFromWizardGroup} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport MaterialsWizardSqftButton from \"../../qkbPages/materialsWizard/materialsWizardSqftButton\";\r\nimport {getWizardFeatureAsync} from \"../../look/lookNavigation/lookMain/lookWizard/wizardFunctionsCommon\";\r\n\r\nconst SelectionGridWizardGroupItem = (props) => {\r\n\r\n const {wizardGroup, wizardActiveStep, setWizardSelectedValues, wizardSelectedValues, styles, isRowItem,\r\n handleFeatureClick} = props;\r\n\r\n const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n\r\n // const {customImageUrl, uploadedImageUrl} = wizardGroup;\r\n\r\n const isActive = wizardSelectedValues[wizardActiveStep] && wizardSelectedValues[wizardActiveStep].wizardGroup\r\n && wizardSelectedValues[wizardActiveStep].wizardGroup.id === wizardGroup.id;\r\n\r\n const wizardItemClick = async (maxClickCountReached) => {\r\n // Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookWizardParent + Analytics.getStringForAnalytics(wizardGroup.groupName));\r\n\r\n if (maxClickCountReached()) { // fabricator settings click lead capture\r\n return false;\r\n }\r\n\r\n // const layout = getCurrentLayout();\r\n // const featureGroup = getFeatureGroupFromWizardGroup(wizardGroup);\r\n // if (featureGroup && featureGroup.activeFeature) {\r\n // if (featureGroup.partId === \"vanity_sink\" && wizardGroup.productCartTitle\r\n // && wizardGroup.productCartTitle.includes(\"edestal\") && featureGroup.getParent().vanity_type) {\r\n // const navItems = layout.designNavigationItems({part: featureGroup});\r\n // const nextPedestal = navItems.find(navItem => Array.isArray(navItem.part.metaData[\"MountType\"]) && navItem.part.metaData[\"MountType\"].includes(\"ST\"));\r\n // if (nextPedestal) {\r\n // navFeatureCLick(nextPedestal.part);\r\n // } else {\r\n // navFeatureCLick(featureGroup.activeFeature);\r\n // }\r\n // }\r\n // navFeatureCLick(featureGroup.activeFeature);\r\n // }\r\n\r\n setWizardSelectedValues({\r\n [wizardActiveStep]: {\r\n wizardGroup,\r\n partId: featureGroup ? featureGroup.partId : \"\"\r\n }\r\n });\r\n console.log(\"wizardGroupwizardGroup\", wizardGroup);\r\n if (wizardGroup.clickOnLogic && wizardGroup.clickOnLogic.enabled && wizardGroup.clickOnLogic.feature\r\n && wizardGroup.clickOnLogic.groupName && handleFeatureClick) {\r\n const featureFound = await getWizardFeatureAsync(wizardGroup.clickOnLogic.feature, wizardGroup.clickOnLogic.groupName);\r\n console.log(\"clickOnLogic featureFound\", featureFound);\r\n if (featureFound) {\r\n handleFeatureClick({part: featureFound}, null, wizardGroup.clickOnLogic);\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n {(maxClickCountReached) => isRowItem ? (\r\n
    wizardItemClick(maxClickCountReached)}>\r\n
    \r\n {wizardGroup.customImageUrl ? (\r\n
    \r\n \"\"/\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n

    {wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}

    \r\n
    {wizardGroup.productCartDescription}
    \r\n {window.location.href.includes(\"porcelanosa\") && wizardGroup.id === \"29\" ? ( // && wizardGroup.title === \"Xtone Underlayment\" // removed, they can rename\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n ) : (\r\n
    wizardItemClick(maxClickCountReached)}>\r\n
    \r\n {wizardGroup.customImageUrl\r\n ? \"\"/\r\n : null}\r\n
    \r\n
    \r\n {/*{showPrice ? (*/}\r\n {/* */}\r\n {/* {getPriceWithIncluded(price, currentFeature.part, fabricatorData, intl.messages)}\r\n {/**/}\r\n {/*) : null}*/}\r\n \r\n {wizardGroup.productCartTitle || wizardGroup.title || wizardGroup.groupName}\r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n )\r\n}\r\n\r\nSelectionGridWizardGroupItem.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n isRowItem: PropTypes.bool,\r\n handleFeatureClick: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardSelectedValues\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionGridWizardGroupItem);\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../misc/utils\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\n\r\nconst NotInVisualizerView = (props) => {\r\n\r\n const getThumbnail = () => {\r\n\r\n if (!props.activeFeature) {\r\n return null\r\n }\r\n\r\n let src = \"\";\r\n let styles = {};\r\n if (props.activeFeature.dbFeature.thumbnailUrl) {\r\n src = s3FeatureImagePath(\r\n props.activeFeature.dbFeature.thumbnailUrl,\r\n props.isMobile ? THUMBNAIL_SIZES.small : THUMBNAIL_SIZES.medium\r\n );\r\n } else if (props.currentFeature && props.activeFeature.customThumbnail) {\r\n src = props.activeFeature.customThumbnail;\r\n } else {\r\n src = `${baseNewImagesPath}images/image-not-found.png`;\r\n }\r\n // if (props.isMobile) {\r\n // const height = (props.listItemHeight - 32) / 2;\r\n // styles.height = height;\r\n // styles.width = height;\r\n // }\r\n // console.log(\"listItemHeight\", );\r\n return (\r\n
    \r\n \"not-in-visualizer-thumbnail\"\r\n
    \r\n )\r\n }\r\n\r\n if (props.allVisualizerNotAvailable) {\r\n return (\r\n
    \r\n {getThumbnail()}\r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n }\r\n\r\n const notAvailableAtAll = !props.activeFeature.dbFeature.s3Bindings || !props.activeFeature.dbFeature.s3Bindings.length;\r\n\r\n return !notAvailableAtAll ? (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n
    \r\n {getThumbnail()}\r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n};\r\n\r\nNotInVisualizerView.displayName = \"NotInVisualizerView\";\r\nNotInVisualizerView.propTypes = {\r\n goToBV: PropTypes.func,\r\n activeFeature: PropTypes.object,\r\n allVisualizerNotAvailable: PropTypes.bool,\r\n};\r\nexport default NotInVisualizerView\r\n","import {renderConfirmPopup} from \"../../../api/api-popups\";\r\nimport {ConfirmPopupTypes} from \"../../visComponents/constants\";\r\nimport store from \"../../../store\";\r\nimport {removeFromCart} from \"../../../actions/actionFunctions\";\r\n\r\n/**\r\n * Common func to call question popup\r\n * @param cartItem {cartItemInterface}\r\n * @param navItem {navItem}\r\n * @param quoteIndex {Number}\r\n * @param fromDelete {boolean}\r\n * @return {boolean}\r\n */\r\nexport const checkForDeletePopup = (cartItem, navItem, quoteIndex, fromDelete = false) => {\r\n const {fabricatorState, cartState} = store.getState();\r\n if (fabricatorState.settings.useCategorySwitching) {\r\n if (cartItem.partId === \"room\" && cartItem.cartFeature && (fromDelete || (navItem.part.dbFeature.id !== cartItem.cartFeature.dbFeature.id))\r\n && cartState.cartItems.some(cItem => cItem.partId !== \"room\" && cItem.currentQuote === quoteIndex)) {\r\n renderConfirmPopup(ConfirmPopupTypes.DeleteCartItemsPopup, {\r\n cartItem, // old\r\n navItem, // new\r\n fromDelete\r\n });\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n/**\r\n * Common func to remove features\r\n * @param quoteIndex {Number}\r\n * @return {boolean}\r\n */\r\nexport const removeCartItemsWithQuoteIndex = (quoteIndex) => {\r\n const {cartState} = store.getState();\r\n const cartItemsToRemove = cartState.cartItems.filter(cItem => cItem.currentQuote === quoteIndex);\r\n if (cartItemsToRemove.length) {\r\n cartItemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Cheks if we selected something from the previous wizard step\r\n * @param quoteIndex {number}\r\n * @param wizardItemId {number}\r\n * @param wizardStep {number}\r\n * @param applyFunction {function} // will be called on yes click\r\n * @return {boolean}\r\n */\r\nexport const checkForWizardPreviousChanges = (quoteIndex, wizardItemId, wizardStep, applyFunction) => {\r\n const {cartState} = store.getState();\r\n const cartItemsToRemove = cartState.cartItems.filter(cItem => {\r\n return cItem.currentQuote === quoteIndex && cItem.fromWizardId === wizardItemId && cItem.fromWizardStep > wizardStep\r\n });\r\n if (cartItemsToRemove.length) {\r\n console.log(\"cartItemsToRemove\", cartItemsToRemove);\r\n const finalFunction = () => {\r\n cartItemsToRemove.forEach(cItem => {\r\n store.dispatch(removeFromCart(cItem));\r\n })\r\n applyFunction()\r\n }\r\n renderConfirmPopup(ConfirmPopupTypes.ChangeWizardToPreviousStepSelection, {\r\n applyFunction: finalFunction.bind(this)\r\n });\r\n return true\r\n }\r\n return false\r\n}\r\n\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\n\r\nconst GroheFeatureNotInVisualizer = (props) => {\r\n const {intl, fabricatorData} = props;\r\n\r\n return (\r\n
    \r\n {fabricatorData.isAmericanStandard ? null : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n return {\r\n fabricatorData\r\n }\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps)(GroheFeatureNotInVisualizer)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport GroheMobile3dButton from \"./groheMobile3dButton\";\r\nimport FeatureName from \"../../../../visComponents/featureName\";\r\nimport FeatureThumbnail from \"../../../../visComponents/featureThumbnail\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {getFeatureIsLocked} from \"../../../../../misc/helpers\";\r\nimport LookLockedButton from \"../../../lookNavigation/lookMain/lookLockedButton\";\r\nimport LookFeatureNotInStock from \"../../../lookNavigation/lookMain/lookFeature/lookFeatureNotInStock\";\r\nimport LookFeatureSku from \"../../../lookNavigation/lookMain/lookFeature/lookFeatureSku\";\r\n\r\nconst GroheMobileFeatureTop = (props) => {\r\n\r\n const {lookActiveFeature} = props;\r\n\r\n if (!lookActiveFeature) {\r\n return null\r\n }\r\n\r\n const featureIsLocked = getFeatureIsLocked(lookActiveFeature);\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n

    \r\n \r\n

    \r\n {!IS_PRODUCT_JOURNEY ? : null}\r\n
    \r\n
    \r\n {featureIsLocked ? : }\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n\r\n return {\r\n lookActiveFeature,\r\n isPhoneNumberValidated,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(GroheMobileFeatureTop)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {isInStock} from \"../../lookFunctions2\";\r\n\r\nconst LookFeatureNotInStock = (props) => {\r\n\r\n const {lookFeature} = props;\r\n\r\n if (isInStock(lookFeature)) {\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nLookFeatureNotInStock.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeatureStockCount} = store.lookState;\r\n return {\r\n lookActiveFeatureStockCount,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookFeatureNotInStock)\r\n","import React, {useMemo} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport orderBy from \"lodash/orderBy\";\r\n\r\nimport MenuList from '@mui/material/MenuList';\r\n\r\nimport {getLookList} from \"../../../lookNavigation/lookFunctions\";\r\nimport {getFeatureGroupName} from \"../../../../../misc/helpers\";\r\nimport {setLookActiveCategory, setLookPageOpened} from \"../../../../../actions/lookFunctions\";\r\n// import GroheCategoriesMenuItemWizard from \"./groheCategoriesMenuItemWizard\";\r\nimport {setGroheWizardName} from \"../../../../../actions/groheQuotingToolFunctions\";\r\nimport GroheCategory from \"./groheCategory\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport LookMainWizardList from \"../../../lookNavigation/lookMain/lookMainWizardList\";\r\nimport {ROUTES} from \"../../../../../routes\";\r\nimport MaterialSpinner from \"../../../../ui/materialSpinner\";\r\n\r\nconst GroheCategoriesMenu = (props) => {\r\n\r\n const {intl, fabricatorData, isAccessory, showWizardItems, location, visualizersLoadedLength,\r\n qtCategoriesLoadedLength} = props;\r\n\r\n const isShopPage = location.pathname.includes(ROUTES.shop);\r\n\r\n let featureGroups = useMemo(() => {\r\n return getLookList(false, true, false, isShopPage, true)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [visualizersLoadedLength, qtCategoriesLoadedLength, isShopPage]);\r\n const featureGroupNameSort = (lmFeature) => getFeatureGroupName(lmFeature.featureGroup, intl, fabricatorData)\r\n featureGroups = orderBy(featureGroups,[featureGroupNameSort], ['asc'])\r\n\r\n // console.log(\"featureGroups\", featureGroups);\r\n if (!featureGroups) {\r\n return null\r\n }\r\n\r\n const ACCESSORIES = [\"paper_holder\", \"robe_hook\", \"towel_bar\", \"towel_ring\"];\r\n const acc_groups = featureGroups.filter(parentObject => ACCESSORIES.includes(parentObject.partId));\r\n if (acc_groups.length && IS_PRODUCT_JOURNEY) {\r\n featureGroups = isAccessory ? acc_groups : featureGroups.filter(parentObject => !ACCESSORIES.includes(parentObject.partId));\r\n if (!isAccessory) {\r\n featureGroups.push({partId: \"submenu_accessories\"});\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n {!qtCategoriesLoadedLength ? : (\r\n \r\n {featureGroups.map(lmFeature => {\r\n return \r\n })}\r\n {showWizardItems ? : null}\r\n {/**/}\r\n \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nGroheCategoriesMenu.propTypes = {\r\n isAccessory: PropTypes.bool,\r\n showWizardItems: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {visualizersLoaded} = store.serverState;\r\n const {qtCategoriesLoaded} = store.qtState;\r\n\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n qtCategoriesLoadedLength: qtCategoriesLoaded.length,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveCategory,\r\n setLookPageOpened,\r\n setGroheWizardName,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheCategoriesMenu)\r\n )\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {Grid} from \"react-virtualized\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport LookListFeature from \"../../../lookNavigation/lookMain/lookListFeature/lookListFeature\";\r\nimport {GROHE_CONFIG} from \"../../groheConfig\";\r\nimport LookWizardSectionListFeature from \"../../../lookNavigation/lookMain/lookWizard/lookWizardSectionListFeature\";\r\nimport {wizardGroupInterface} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport LookVirtualizedListLoadingItem\r\n from \"../../../lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem\";\r\n\r\nconst GroheVirtualizedList = (props) => {\r\n\r\n const {lookViewType, windowHeight, renderList, isMobile, onScrollHandler, isWizard, wizardGroup, wizardActiveItem,\r\n imageCanvas, maxClickCountReached, updateLookCartItem, loadingCount} = props;\r\n\r\n const width = isMobile ? GROHE_CONFIG.sidebarWidth.mobile : GROHE_CONFIG.sidebarWidth.desktop;\r\n let height = isMobile ? windowHeight - (wizardActiveItem ? 98 : 48) : windowHeight - 120;\r\n if (loadingCount) {\r\n height = isMobile ? height + 58 : height + 37;\r\n }\r\n\r\n const columnWidth = lookViewType === 2 ? width / 3 : width;\r\n const columnCount = lookViewType === 2 ? 3 : 1;\r\n const rowCount = Math.ceil((loadingCount || renderList.length) / columnCount);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height,\r\n rowHeight: lookViewType === 1\r\n ? 120\r\n : 124,\r\n overscanRowCount: 3,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n if (loadingCount) {\r\n return \r\n }\r\n const navItem = renderList[(listSettings.columnCount * rowIndex) + columnIndex];\r\n if (!navItem) {\r\n return null\r\n }\r\n if (isWizard) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nGroheVirtualizedList.propTypes = {\r\n imageCanvas: PropTypes.object,\r\n maxClickCountReached: PropTypes.func,\r\n updateLookCartItem: PropTypes.func,\r\n renderList: PropTypes.array,\r\n contentHeight: PropTypes.number,\r\n isMobile: PropTypes.bool,\r\n onScrollHandler: PropTypes.func,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n loadingCount: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookViewType} = store.lookState;\r\n const {windowHeight, isMobile} = store.serverState;\r\n const {wizardActiveItem} = store.wizardState;\r\n return {\r\n lookViewType,\r\n windowHeight,\r\n isMobile,\r\n wizardActiveItem,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(GroheVirtualizedList)\r\n","import React from \"react\";\r\n\r\nimport WithOverlay from \"../../popups/withOverlayHoc\";\r\nimport MaterialSpinner from \"../../ui/materialSpinner\";\r\nimport {COLORS} from \"../../../colorThemes\";\r\n\r\n\r\nconst NavigationLoader = (props) => {\r\n const {className = \"\"} = props;\r\n\r\n return (\r\n \r\n {() => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nexport default NavigationLoader\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {LOOK_FEATURE_CONTENT} from \"../../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport LookFeatureInfoContent from \"./lookFeatureInfoContent\";\r\nimport LookFeatureInfo3d from \"./lookFeatureInfo3d\";\r\nimport {setLookMoreInfoOpened} from \"../../../../../actions/lookFunctions\";\r\nimport LookFeatureInfoButtons from \"./lookFeatureInfoButtons\";\r\nimport LookFeatureInfoAug from \"./lookFeatureInfoAug\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\n\r\nconst LookFeatureInfo = (props) => {\r\n\r\n const {intl, lookActiveFeature, moreInfoOpened, moreInfoContent, setLookMoreInfoOpened, isMobile} = props;\r\n\r\n const backButtonClick = () => {\r\n Analytics.sendClickEvent(IS_PRODUCT_JOURNEY\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeatureInfoContentHeaderClose\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeatureInfoContentHeaderClose\r\n );\r\n setLookMoreInfoOpened(\"\", LOOK_FEATURE_CONTENT.threeD);\r\n }\r\n\r\n const mainContent = () => {\r\n // if (!moreInfoOpened && !isMobile) { // always render on mobile\r\n if (!lookActiveFeature) { // always render on mobile\r\n return null\r\n }\r\n switch (moreInfoContent) {\r\n case LOOK_FEATURE_CONTENT.info:\r\n default:\r\n return \r\n case LOOK_FEATURE_CONTENT.threeD:\r\n case LOOK_FEATURE_CONTENT.aug:\r\n if (!moreInfoOpened) {\r\n return null\r\n }\r\n return (\r\n
    \r\n {isMobile && !IS_PRODUCT_JOURNEY ? null : (\r\n \r\n \r\n \r\n )}\r\n {moreInfoContent === LOOK_FEATURE_CONTENT.threeD ? : }\r\n {isMobile ? null : (\r\n \r\n

    \r\n \r\n

    \r\n {moreInfoContent === LOOK_FEATURE_CONTENT.threeD ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n \r\n
    \r\n )}\r\n {isMobile && (moreInfoContent === LOOK_FEATURE_CONTENT.threeD) ? (\r\n

    \r\n \r\n

    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n }\r\n\r\n const classNames = !IS_PRODUCT_JOURNEY && isMobile\r\n ? \"lm-content lm-content--filters\" + (!moreInfoOpened ? \" lm-content--slide-up\" : \"\")\r\n : \"lm-content__info\" + (moreInfoOpened ? \" lm-content__info--active lm-content__info--\" + moreInfoContent : \"\")\r\n\r\n return (\r\n
    \r\n {mainContent()}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, moreInfoOpened, moreInfoContent} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveFeature,\r\n moreInfoOpened,\r\n moreInfoContent,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookMoreInfoOpened\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFeatureInfo)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n getCartItemObject,\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n toFixedPrice\r\n} from \"../../../../../misc/helpers\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\n\r\nconst LookWizardContentFinalPrice = (props) => {\r\n\r\n const {wizardSelectedValues, fabricatorSettings, qtActiveCategory} = props;\r\n\r\n if (!fabricatorSettings.showPricing) {\r\n return null\r\n }\r\n\r\n const cartItemsToCount = (Object.keys(wizardSelectedValues)).reduce((total, step) => {\r\n const selectedValue = wizardSelectedValues[step];\r\n if (!selectedValue || !selectedValue.selectedFeature) {\r\n return total\r\n }\r\n const parentPositions = selectedValue.selectedFeature.getParent().layerPositions\r\n const quantity = parentPositions\r\n ? Object.keys(parentPositions).filter(pos => parentPositions[pos]).length\r\n : 1;\r\n return [...total, getCartItemObject(selectedValue.selectedFeature, quantity, qtActiveCategory)]\r\n }, []);\r\n console.log(\"cartItemsToCount\", cartItemsToCount);\r\n\r\n const totalPrice = getTotalPrice(null, false, cartItemsToCount, true);\r\n const grandTotal = getQuotePriceWithTaxes(totalPrice);\r\n\r\n return (\r\n
    \r\n {IS_PRODUCT_JOURNEY ? (\r\n \r\n :\r\n \r\n ) : null}\r\n {getPriceWithCurrency(fabricatorSettings, toFixedPrice(grandTotal), null, true)}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardSelectedValues} = store.wizardState;\r\n const {settings} = store.fabricatorState;\r\n const {qtActiveCategory} = store.qtState;\r\n\r\n return {\r\n wizardSelectedValues,\r\n fabricatorSettings: settings,\r\n qtActiveCategory,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentFinalPrice)\r\n","export const loadScript = (url, callback, id = \"\") => {\r\n let script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n\r\n if (script.readyState) {\r\n script.onreadystatechange = function() {\r\n if (script.readyState === \"loaded\" || script.readyState === \"complete\") {\r\n script.onreadystatechange = null;\r\n if (callback) {\r\n callback()\r\n }\r\n }\r\n };\r\n } else if (callback) {\r\n script.onload = callback;\r\n }\r\n\r\n script.src = url;\r\n script.id = id;\r\n document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n};\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getPriceWithCurrency, getQuotePriceWithTaxes, getTotalPrice} from \"../../../../misc/helpers\";\r\nimport GroheCartDeliveryColumn from \"./groheCartDeliveryColumn\";\r\n\r\nconst GroheCartColumns = (props) => {\r\n\r\n const {activeQuoteIndex, discountSections, fabricatorSettings, isPhoneNumberValidated, language, intl, isShort,\r\n showUnlockCalculations, showTotalItems} = props;\r\n\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice, discountSections);\r\n const pricingIsLocked = (fabricatorSettings.leadCaptureOnQuote || fabricatorSettings.leadCaptureShoppingCart)\r\n && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated;\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{materialTax: totalPrice.materialTaxes}];\r\n let instTaxes = totalPrice.installationTaxes;\r\n // console.log(\"allTaxes\", allTaxes);\r\n // console.log(\"totalPrice\", totalPrice);\r\n // console.log(\"grandTotal\", grandTotal);\r\n\r\n // const showTaxes = (pricingIsLocked || allTaxes.some(tax => tax.materialTax > 0)) && (!showUnlockCalculations || showTotalItems.includes(\"tax\"));\r\n const showTaxes = !isShort;\r\n const showInstTaxes = instTaxes && (!showUnlockCalculations || showTotalItems.includes(\"tax\"));\r\n const showTotal = !isShort && (!showUnlockCalculations || showTotalItems.includes(\"total\"));\r\n\r\n let subTotalPrice = 0;\r\n // if (quotes.length > 1 && !showAllQuotesCartItemsList) {\r\n const quoteTotalPrice = getTotalPrice(activeQuoteIndex);\r\n // subTotalPrice = getQuotePriceWithTaxes(quoteTotalPrice, discountSections);\r\n subTotalPrice = quoteTotalPrice.materialPrice;\r\n allTaxes = quoteTotalPrice.priceTaxes.length\r\n ? quoteTotalPrice.priceTaxes\r\n : [{materialTax: quoteTotalPrice.materialTaxes}];\r\n instTaxes = quoteTotalPrice.installationTaxes;\r\n // }\r\n subTotalPrice = subTotalPrice.toFixed(2); // always round to 23.65, even if it is 23.00\r\n grandTotal = grandTotal.toFixed(2); // always round to 23.65, even if it is 23.00\r\n\r\n const getTaxColumn = (pricingIsLocked, taxObject, taxObjectIndex) => {\r\n // const showIncluded = !pricingIsLocked && (+taxObject.materialTax > 0);\r\n const taxTotal = taxObject.materialTax.toFixed(2); // always round to 23.65, even if it is 23.00\r\n // if (taxTotal <= 0) {\r\n // return null\r\n // }\r\n const taxName = taxObject.nameIntl && taxObject.nameIntl[language]\r\n ? taxObject.nameIntl[language]\r\n : taxObject.state || intl.formatMessage({id: \"grohe.cart.footer.tax\"})\r\n return (\r\n
    \r\n {taxName}\r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, taxTotal)}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n const LockedPrice = () => (\r\n {}}>\r\n \r\n \r\n )\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, subTotalPrice)}\r\n
    \r\n
    \r\n {showTaxes ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n return getTaxColumn(pricingIsLocked, taxObject, taxObjectIndex)\r\n }) : null}\r\n {showInstTaxes ? (\r\n
    \r\n \r\n {intl.formatMessage({id: \"grohe.cart.footer.instTax\"}) +\r\n (!pricingIsLocked && (+instTaxes > 0)\r\n ? intl.formatMessage({id: \"grohe.cart.footer.taxIncluded\"})\r\n : \"\")}\r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, instTaxes.toFixed(2))}\r\n
    \r\n
    \r\n ) : null}\r\n {/*{(quotes.length > 1) && !showAllQuotesCartItemsList && showTotal ? (*/}\r\n {/*
    */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/*
    */}\r\n {/* {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, subTotalPrice)}*/}\r\n {/*
    */}\r\n {/*
    */}\r\n {/*) : null}*/}\r\n {isShort ? null : }\r\n {showTotal ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n {pricingIsLocked ? : getPriceWithCurrency(fabricatorSettings, grandTotal, null, true)}\r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n};\r\n\r\nGroheCartColumns.propTypes = {\r\n isShort: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {settings} = store.fabricatorState;\r\n const {discountSections} = store.priceWorksheetState;\r\n const {cartItems, showAllQuotesCartItemsList, sureTax} = store.cartState;\r\n const {isPhoneNumberValidated} = store.userState;\r\n const {language} = store.serverState;\r\n const {quotes, activeQuoteIndex} = store.quotesState;\r\n const {showUnlockCalculations, showTotalItems} = store.unlockCalculationsState;\r\n\r\n return {\r\n fabricatorSettings: settings,\r\n discountSections,\r\n cartItems,\r\n showAllQuotesCartItemsList,\r\n isPhoneNumberValidated,\r\n language,\r\n quotes,\r\n activeQuoteIndex,\r\n showUnlockCalculations,\r\n showTotalItems,\r\n sureTax, // to update when response received\r\n // deliveryList, // to update when delivery changed\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default injectIntl(\r\n withRouter(connect(mapStateToProps, mapDispatchToProps)(GroheCartColumns))\r\n)\r\n","import {useCallback, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n setWizardActiveItem,\r\n setWizardActiveStep,\r\n setWizardSelectedValues\r\n} from \"../../../../../actions/wizardFunctions\";\r\nimport {getActiveWizardItem} from \"./lookWizardFunctions\";\r\nimport {setLookCompatabilityAlert} from \"../../../../../actions/lookFunctions\";\r\n\r\nconst LookWizard = (props) => {\r\n\r\n const {wizardList, location, setWizardActiveItem, wizardActiveItem, setWizardActiveStep, setWizardSelectedValues,\r\n children, lookCompatabilityAlert, setLookCompatabilityAlert, wizardActiveStep} = props;\r\n\r\n const closeCompatability = useCallback(() => {\r\n setLookCompatabilityAlert({\r\n visible: false,\r\n compatabilityLogic: [],\r\n clickedFeature: null,\r\n applyFunction: null\r\n })\r\n }, [setLookCompatabilityAlert])\r\n\r\n useEffect(() => {\r\n console.log(\"wizardActiveItem\", wizardActiveItem);\r\n if (!wizardActiveItem) {\r\n const wizardItem = getActiveWizardItem(wizardList, location);\r\n console.log(\"wizardItem\", wizardItem);\r\n if (wizardItem) {\r\n setWizardActiveItem(wizardItem)\r\n }\r\n }\r\n return () => {\r\n setWizardActiveItem(null);\r\n setWizardActiveStep(-1);\r\n setWizardSelectedValues({}, true);\r\n if (lookCompatabilityAlert && lookCompatabilityAlert.visible) {\r\n closeCompatability()\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [wizardList])\r\n\r\n useEffect(() => {\r\n if (lookCompatabilityAlert && lookCompatabilityAlert.visible) {\r\n closeCompatability()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [wizardActiveStep, wizardActiveItem]);\r\n\r\n if (!wizardActiveItem) {\r\n return null\r\n }\r\n\r\n return children\r\n};\r\n\r\nLookWizard.propTypes = {\r\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]).isRequired,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardList, wizardActiveItem, wizardActiveStep} = store.wizardState;\r\n const {lookCompatabilityAlert} = store.lookState;\r\n\r\n return {\r\n wizardList,\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n lookCompatabilityAlert,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setWizardActiveItem,\r\n setWizardActiveStep,\r\n setWizardSelectedValues,\r\n setLookCompatabilityAlert,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookWizard)\r\n)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentGroups} from \"./lookWizardFunctions\";\r\n\r\n\r\nconst LookWizardContentTitle = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = props;\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep === -1) {\r\n // return \r\n return wizardActiveItem.name\r\n }\r\n if (wizardActiveStep > -1 && currentGroups.length === 1) {\r\n return currentGroups[0].title\r\n }\r\n if (wizardActiveStep > -1 && !currentGroups.length) {\r\n return \r\n }\r\n if (wizardActiveStep === 0 && currentGroups.length > 1 && wizardActiveItem.startTitle) {\r\n return wizardActiveItem.startTitle\r\n }\r\n return null\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentTitle)\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentGroups} from \"./lookWizardFunctions\";\r\n\r\n\r\nconst LookWizardContentDescription = (props) => {\r\n\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = props;\r\n\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n\r\n if (wizardActiveStep === -1) {\r\n return wizardActiveItem.description\r\n }\r\n if (wizardActiveStep > -1 && currentGroups.length === 1) {\r\n return currentGroups[0].description\r\n }\r\n if (wizardActiveStep > -1 && !currentGroups.length) {\r\n return \r\n }\r\n if (wizardActiveStep === 0 && currentGroups.length > 1 && wizardActiveItem.startDescription) {\r\n return wizardActiveItem.startDescription\r\n }\r\n return null\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardActiveItem, wizardActiveStep, wizardSelectedValues} = store.wizardState;\r\n return {\r\n wizardActiveItem,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookWizardContentDescription)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport LookWizardSection from \"./lookWizard/lookWizardSection\";\r\nimport {getActiveWizardItem, getAvailableSteps, getCurrentGroups} from \"./lookWizard/lookWizardFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\nimport GroheFeaturesHeader from \"../../grohe/groheNavigation/groheFeatures/groheFeaturesHeader\";\r\n\r\nconst LookMainWizardSections = (props) => {\r\n\r\n const {wizardList, location, wizardActiveStep, wizardSelectedValues, isMobile, contentHeight, wizardActiveItem,\r\n shopPageOpened, lookCompatabilityAlert, filtersOpened} = props;\r\n\r\n const showWizard = (shopPageOpened && wizardActiveItem) || (location && location.pathname && location.pathname.includes(ROUTES.wizard));\r\n // console.log(\"showWizard\", showWizard);\r\n if (!showWizard) {\r\n return null\r\n }\r\n\r\n const wizardItem = wizardActiveItem || getActiveWizardItem(wizardList, location);\r\n if (!wizardItem) {\r\n return null\r\n }\r\n\r\n const wizardSteps = getAvailableSteps(wizardItem, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n\r\n const currentGroups = getCurrentGroups(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n\r\n const wizardSections = (\r\n \r\n {wizardSteps.map((wizardStep, wizardStepIndex) => {\r\n const currentGroups = getCurrentGroups(wizardItem, wizardStepIndex, wizardSelectedValues);\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n let classNames = \"grohe-features grohe-section--wizard\"\r\n + ((wizardActiveStep === wizardStepIndex) && !isCompletedStep ? \" grohe-features--opened\" : \"\")\r\n + (shopPageOpened ? \" grohe-section--shop\" : \"\");\r\n if (isMobile) {\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-left\"\r\n : \" lm-section--slide-right\"\r\n }\r\n }\r\n return (\r\n
    \r\n \r\n
    1) ? \"\" : \" lm-content--no-scroll lm-content--product\")}>\r\n {currentGroups.length ? : null}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n if (isMobile) {\r\n let classNames = \"lm-content lm-content--features lm-content--wizard\";\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-left lm-section--hidden\"\r\n : \" lm-section--slide-right lm-section--hidden\"\r\n }\r\n return (\r\n
    \r\n {currentGroups.length ? : null}\r\n
    \r\n )\r\n }\r\n let classNames = \"lm-section lm-section--feature lw-section lm-section--slide-right\";\r\n if (wizardActiveStep !== wizardStepIndex) {\r\n classNames += wizardActiveStep > wizardStepIndex && !isCompletedStep\r\n ? \" lm-section--slide-right-more lm-section--hidden\"\r\n : \" lm-section--slide-none lm-section--hidden\"\r\n }\r\n return (\r\n
    \r\n
    1 ? \"\" : \" lm-content--no-scroll\")\r\n + (filtersOpened || lookCompatabilityAlert.visible ? \" lm-content--slide-down\" : \"\")}>\r\n {currentGroups.length ? : null}\r\n
    \r\n
    \r\n )\r\n })}\r\n
    \r\n )\r\n\r\n if (IS_PRODUCT_JOURNEY && isMobile) {\r\n return (\r\n
    \r\n {wizardSections}\r\n
    \r\n )\r\n }\r\n\r\n return wizardSections\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {wizardList, wizardActiveStep, wizardSelectedValues, wizardActiveItem} = store.wizardState;\r\n const {isMobile} = store.serverState;\r\n const {shopPageOpened} = store.shopState;\r\n const {lookCompatabilityAlert} = store.lookState;\r\n const {filtersOpened} = store.groheState;\r\n\r\n return {\r\n wizardList,\r\n wizardActiveStep,\r\n wizardSelectedValues,\r\n isMobile,\r\n wizardActiveItem,\r\n shopPageOpened,\r\n lookCompatabilityAlert,\r\n filtersOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainWizardSections)\r\n )\r\n)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ErrorIcon from \"@mui/icons-material/Error\";\r\n\r\nimport {setLookCompatabilityAlert} from \"../../../../../actions/lookFunctions\";\r\nimport LookCompatabilitySectionButtons from \"./lookCompatabilitySectionButtons\";\r\nimport LookCompatabilitySectionContent from \"./lookCompatabilitySectionContent\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport $ from \"jquery\";\r\n\r\nconst LookCompatabilitySection = (props) => {\r\n const {lookCompatabilityAlert, wrapperStyles, intl, isMobile} = props;\r\n\r\n const compatabilityContentElem = useRef();\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n useEffect(() => {\r\n if (lookCompatabilityAlert.visible) {\r\n setTimeout(() => {\r\n if (compatabilityContentElem && compatabilityContentElem.current) {\r\n const buttons = $(compatabilityContentElem.current).find(\".look-popup__buttons\");\r\n if (buttons && buttons[0] && buttons[0].offsetTop) {\r\n $(compatabilityContentElem.current).animate({scrollTop: buttons[0].offsetTop}, 1300);\r\n }\r\n }\r\n }, 700);\r\n }\r\n }, [lookCompatabilityAlert])\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n

    \r\n \r\n

    \r\n \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nLookCompatabilitySection.propTypes = {\r\n wrapperStyles: PropTypes.object\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookCompatabilityAlert, lookActiveFeature} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n lookActiveFeature,\r\n lookCompatabilityAlert,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookCompatabilityAlert\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookCompatabilitySection)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nimport {setLookOpened} from \"../../../../actions/lookFunctions\";\r\nimport {ROUTES} from \"../../../../routes\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\nimport {zoomCanvasOut} from \"../lookFunctions\";\r\nimport {setCanvasScale} from \"../../../../actions/actionFunctions\";\r\nimport LookCanvasContext from \"../../lookCanvasContext\";\r\n\r\nconst LookMainHeaderCloseButton = (props) => {\r\n\r\n const {intl, history, setLookOpened, setCanvasScale} = props;\r\n\r\n const closeButtonClick = (imageCanvas) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMenuHeaderClose);\r\n setLookOpened(false);\r\n zoomCanvasOut(imageCanvas, setCanvasScale);\r\n history.push(ROUTES.home);\r\n };\r\n\r\n return (\r\n \r\n {(imageCanvas) => (\r\n closeButtonClick(imageCanvas)}>\r\n \r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOpened,\r\n setCanvasScale,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookMainHeaderCloseButton)\r\n )\r\n)\r\n","const ua = navigator.userAgent || navigator.vendor || window.opera;\r\nexport const isInstagram = ua.indexOf('Instagram') > -1\r\nexport const isFacebook = (ua.indexOf(\"FBAN\") > -1) || (ua.indexOf(\"FBAV\") > -1);\r\n\r\n// if (document.documentElement.classList) {\r\n// if (isInstagram) {\r\n// window.document.body.classList.add('bv--instagram');\r\n// }\r\n// }\r\n","import React, {useEffect, useRef, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\r\nimport Grow from '@mui/material/Grow';\r\nimport Popper from '@mui/material/Popper';\r\n\r\nimport {setLookContextMenu} from \"../../../actions/lookFunctions\";\r\n\r\nimport ContextMenuQKBButtons from \"./contextMenuQKBButtons\";\r\n\r\n// export const checkForContextMenuCommon = (partId, layerPosition) => {\r\nexport const checkForContextMenuCommon = () => {\r\n const returnObject = {\r\n allButtons: [], // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n showButtons: [] // {partId: \"\", translateId: \"\", isWizard: true, wizardId: sting|number, hasSubMenu: false}\r\n }\r\n return returnObject\r\n}\r\n\r\nconst getContextMenuPosition = (contextMenu, position, isMobile) => {\r\n const {partId, layerPosition} = contextMenu;\r\n const {showButtons} = checkForContextMenuCommon(partId, layerPosition);\r\n\r\n let left = isMobile ? '50%' : position.x - 50;\r\n let top = isMobile ? '50%' : position.y - 50;\r\n let right = 'auto';\r\n\r\n const maxAllowedWidth = showButtons.length > 2 ? 300 : 210;\r\n\r\n let maxAllowedHeight = 110;\r\n if (showButtons.length > 6) {\r\n maxAllowedHeight = 330;\r\n } else if (showButtons.length >= 3) {\r\n maxAllowedHeight = 220;\r\n }\r\n if (!isMobile && (left > window.innerWidth - maxAllowedWidth)) {\r\n left = 'auto';\r\n right = 0\r\n }\r\n if (!isMobile && (top > window.innerHeight - maxAllowedHeight)) {\r\n let negativeMargin = 50;\r\n if (showButtons.length > 6) {\r\n negativeMargin = 250;\r\n } else if (showButtons.length >= 3) {\r\n negativeMargin = 150;\r\n }\r\n top = top - negativeMargin;\r\n }\r\n\r\n return {left, top, right}\r\n}\r\n\r\nconst ContextMenuQKB = (props) => {\r\n\r\n const {contextMenu, setLookContextMenu, isMobile, handleContextMenuClick, renderGreenLayerByZindex} = props;\r\n const {opened, position} = contextMenu;\r\n const [styles, setStyles] = useState({left: 0, top: 0, right: 0});\r\n const [buttons, setButtons] = useState([]);\r\n const anchorRef = useRef(null);\r\n\r\n const handleClose = (event) => {\r\n if (document.hoveredLayer && event.target.closest(\".canvas-el\") && ALL_CONTEXT_MENU.includes(document.hoveredLayer.partId)) {\r\n return\r\n }\r\n setLookContextMenu({\r\n opened: false,\r\n layerPosition: \"\",\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!contextMenu.opened) {\r\n return null\r\n }\r\n setStyles(getContextMenuPosition(contextMenu, position, isMobile));\r\n const {showButtons} = checkForContextMenuCommon(contextMenu.partId, contextMenu.layerPosition);\r\n setButtons(showButtons);\r\n }, [contextMenu, position, isMobile]);\r\n\r\n // console.log(\"styles\", styles);\r\n\r\n let contextStyles = styles;\r\n if (buttons.length <= 4) {\r\n contextStyles = Object.assign({}, styles, {maxWidth: \"210px\"});\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {({ TransitionProps }) => (\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nContextMenuQKB.propTypes = {\r\n handleContextMenuClick: PropTypes.func,\r\n renderGreenLayerByZindex: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {contextMenu} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n contextMenu,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookContextMenu\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContextMenuQKB)\r\n","import Analytics from \"../../../analytics\";\r\nimport Config from \"../../../config\";\r\nimport {loaderDisable, loaderEnable} from \"../../ui/loaderView\";\r\nimport {saveQuote} from \"../../../api/server-api\";\r\nimport {renderErrorPopup} from \"../../../api/api-popups\";\r\nimport {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\n\r\nexport const handleBackToDashboard = () => {\r\n if (window.salesForceLoaded || typeof(sr) != 'undefined') {\r\n Analytics.sendClickEvent('see-job-in-salesforce');\r\n let payload = {QCJobId: document.kvConfig.jobId};\r\n console.log('attempting to view job in SalesForce', payload);\r\n let eventPayload = {name: 'quoteCountertops.viewJobInSF', payload }\r\n try {\r\n window.Sfdc.canvas.client.publish(sr.client, eventPayload);\r\n } catch(e) {\r\n console.log('unable to send via salesforce viewpage');\r\n }\r\n if (typeof(sfdcMessage) !== 'undefined') {\r\n sfdcMessage.postMessage(eventPayload);\r\n }\r\n } else {\r\n Analytics.sendClickEvent('back-to-dashboard');\r\n Config.parent && Config.parent.exitEditQuote && Config.parent.exitEditQuote();\r\n loaderDisable(); // in case it is not an iframe\r\n showQuoteSavedNotification();\r\n }\r\n};\r\n\r\nexport const handleSaveAndBackToDashboard = () => {\r\n\r\n if (!document.kvConfig.jobId) {\r\n renderErrorPopup(\"The Quote can not be saved, no JobId is assigned yet\");\r\n return false\r\n }\r\n\r\n loaderEnable(\"loader.savingQuoteText\");\r\n saveQuote({submit: true})\r\n .then(handleBackToDashboard)\r\n .catch(handleBackToDashboard)\r\n};\r\n","export const VIEW = {\r\n login: 0,\r\n register: 1,\r\n reset: 2,\r\n terms: 3\r\n};","import React from 'react';\r\nimport JsonApi from \"../../api/jsonApi\";\r\nimport PropTypes from 'prop-types';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport trim from \"lodash/trim\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport 'react-intl-tel-input/dist/main.css';\r\nimport {browserIsSafari} from \"../../misc/helpers\";\r\nimport OnScreenKeyboard from './OnScreenKeyboard/keyboard';\r\nimport Analytics from './../../analytics';\r\nimport misc from '../../misc/misc';\r\nimport {loaderDisable, loaderEnable} from \"../ui/loaderView\";\r\nimport store from '../../store';\r\nimport LookUserPhoneInput from \"../look/user/lookUserPhoneInput\";\r\nimport {changeUserInfo} from \"../../actions/actionFunctions\";\r\n//import autoPrefixer from 'gulp-autoprefixer';\r\n\r\nconst steps = {\r\n VerifyPhoneNumber: 0,\r\n TermsAndConditions: 1,\r\n UpdatePhone: 2,\r\n Updated: 3,\r\n Verified: 4\r\n};\r\n\r\n//const phoneUtil = PhoneNumberUtil.getInstance();\r\n\r\nexport const getPreferredCountries = () => {\r\n const {fabricatorState} = store.getState();\r\n if (fabricatorState.isCaesarStone && (fabricatorState.settings.currency === \"AUD\" || fabricatorState.settings.currency === \"AUS\")) {\r\n return [\"au\", \"us\", \"gb\", \"ca\"]\r\n }\r\n if (fabricatorState.isLixil) {\r\n return [\"us\", \"gb\", \"ca\"]\r\n }\r\n switch(fabricatorState.settings.currency) {\r\n case \"CAD\":\r\n return fabricatorState.isLowes ? [\"ca\"] : [\"ca\", \"us\", \"gb\", \"pa\", \"es\"];\r\n default:\r\n return [\"us\", \"gb\", \"ca\", \"pa\", \"es\"];\r\n }\r\n}\r\n\r\nclass TwoFactorAuthClass extends React.Component {\r\n static propTypes = {\r\n phoneNumber: PropTypes.string.isRequired,\r\n // (cancel = true, updatePhone = null)\r\n onClose: PropTypes.func.isRequired\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n step: steps.VerifyPhoneNumber,\r\n authCode: '',\r\n validating: false,\r\n valid: true,\r\n phoneUpdateError: false,\r\n oldPhoneNumber: \"\",\r\n oldCountry: {},\r\n };\r\n\r\n this.handleResendSMS();\r\n }\r\n\r\n setStep = (step) => {\r\n this.setState({step});\r\n };\r\n\r\n componentDidMount() {\r\n this.setOldValues();\r\n }\r\n\r\n setOldValues() {\r\n const {phoneNumber, country} = this.props;\r\n this.setState({oldPhoneNumber: phoneNumber, oldCountry: country})\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.getDialog()}\r\n
    \r\n );\r\n }\r\n\r\n getDialogContent = () => {\r\n let content = {\r\n title: \"Invalid Step\",\r\n content: null,\r\n footer: null\r\n };\r\n switch (this.state.step) {\r\n case steps.VerifyPhoneNumber:\r\n content = this.getVerifyPhoneNumberContent();\r\n break;\r\n case steps.TermsAndConditions:\r\n content = this.getTermsAndConditionsContent();\r\n break;\r\n case steps.UpdatePhone:\r\n content = this.getUpdatePhoneContent();\r\n break;\r\n }\r\n return content;\r\n };\r\n\r\n sendAuthenticationRequest = (token, to, type, message) => {\r\n if (message) {\r\n loaderEnable(null, message);\r\n setTimeout(() => {\r\n loaderDisable()\r\n }, 3000);\r\n }\r\n return JsonApi.sendAuthenticationRequest(token, to, type);\r\n };\r\n\r\n handleResendSMS = () => {\r\n Analytics.sendClickEvent(\"resend-sms\");\r\n JsonApi.generateAuthenticationToken()\r\n .then((t) => {\r\n var token = t.data ? t.data : t;\r\n this.setState({token});\r\n this.sendAuthenticationRequest(token, `+${this.props.country.dialCode + this.props.phoneNumber}`, 1, \"loader.authenticationSmsSendTitle\");\r\n }).catch(() => this.props.onClose(false, this.props.phoneNumber));\r\n };\r\n\r\n handleResendVoice = () => {\r\n Analytics.sendClickEvent(\"resend-voice\");\r\n JsonApi.generateAuthenticationToken()\r\n .then((t) => {\r\n var token = t.data ? t.data : t;\r\n this.setState({token});\r\n this.sendAuthenticationRequest(token, `+${this.props.country.dialCode + this.props.phoneNumber}`, 2, 'loader.authenticationCallBackTitle');\r\n }).catch(() => this.props.onClose(false, this.props.phoneNumber));\r\n };\r\n\r\n handleCheckVerificationCode = (e) => {\r\n const authCode = trim(e.target.value).replace(/[^0-9]/g, \"\");\r\n this.setState({authCode});\r\n if (authCode.length === 6) {\r\n this.setState({validating: true}, () => {\r\n JsonApi.validateAuthenticationRequest(this.state.token, authCode, this.props.phoneNumber)\r\n .then((success) => {\r\n if (success.data) {\r\n this.handlePostPhoneNumberUpdated();\r\n Analytics.sendEvent(\"PhoneVerification\", \"Success\");\r\n this.setStep(steps.Verified);\r\n window.setTimeout(() => this.props.onClose(false, this.props.phoneNumber), 3750);\r\n } else\r\n Analytics.sendEvent(\"PhoneVerification\", \"Failure\");\r\n this.setState({valid: false, validating: false}); //, validating: false\r\n });\r\n });\r\n }\r\n };\r\n\r\n handlePostPhoneNumberUpdated = () => {\r\n Analytics.sendClickEvent(\"phone-number-update\");\r\n };\r\n\r\n handleUpdatePhoneNumber = () => {\r\n const {country} = this.props;\r\n var iso2 = country.iso2 || \"US\";\r\n if (misc.isPhoneNumber(this.props.phoneNumber, iso2.toUpperCase())) {\r\n this.handlePostPhoneNumberUpdated();\r\n this.setStep(steps.VerifyPhoneNumber);\r\n this.setState({authCode: \"\"}); // erase previous\r\n this.setOldValues();\r\n this.handleResendSMS();\r\n } else {\r\n this.setState({phoneUpdateError: true});\r\n }\r\n };\r\n\r\n revertUserValues = () => {\r\n this.props.changeUserInfo({\r\n phoneNumber: this.state.oldPhoneNumber,\r\n country: this.state.oldCountry,\r\n }); // set previous values on back click\r\n }\r\n\r\n handleBackClick = () => {\r\n this.revertUserValues(); // set previous values on back click\r\n this.setStep(steps.VerifyPhoneNumber);\r\n }\r\n\r\n getVerifyPhoneNumberContent = () => {\r\n const {intl} = this.props;\r\n const {fabricatorState} = store.getState();\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.title\"}),\r\n content: (\r\n
    \r\n \r\n this.handleCheckVerificationCode({target: {value: v}})} type=\"numeric\"/>\r\n {!this.state.valid\r\n ?
    \r\n : null}\r\n {this.state.validating\r\n ? \"Validating...\"\r\n\r\n : null}\r\n
    \r\n \r\n {`+${this.props.country.dialCode} ${this.props.phoneNumber}`}\r\n {/*Please enter it or choose to receive a call with your verification code to unlock.*/}\r\n
    \r\n
    this.setStep(steps.UpdatePhone)}>\r\n \r\n
    \r\n
    \r\n
    this.handleResendSMS()}>
    \r\n
    this.handleResendVoice()}>
    \r\n
    \r\n {fabricatorState.isLowes ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    this.setStep(steps.TermsAndConditions)}>
    \r\n
    \r\n )\r\n }\r\n };\r\n\r\n getTermsAndConditionsContent = () => {\r\n const {intl} = this.props;\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.termsAndConditions\"}),\r\n content: (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    \r\n
    this.setStep(steps.VerifyPhoneNumber)}>\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n };\r\n };\r\n\r\n getUpdatePhoneContent = () => {\r\n const {intl} = this.props;\r\n return {\r\n title: intl.formatMessage({id: \"twoFA.updatePhoneNumber\"}),\r\n content: (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {this.state.phoneUpdateError ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n ),\r\n footer: (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n };\r\n };\r\n\r\n closeButtonClick = () => {\r\n this.revertUserValues();\r\n this.props.onClose(true);\r\n }\r\n\r\n getDialog = () => {\r\n if (this.state.step < steps.Updated) {\r\n let content = this.getDialogContent();\r\n const popupStyles = browserIsSafari() && this.props.windowWidth < 991 ? {height: this.props.windowHeight - 35} : {};\r\n return (\r\n
    \r\n
    \r\n
    {content.title}
    \r\n
    \r\n X\r\n
    \r\n
    \r\n {content.content}\r\n {content.footer}\r\n
    \r\n );\r\n } else {\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {phoneNumber, country} = store.userState.userInfo;\r\n return {\r\n phoneNumber,\r\n country,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeUserInfo,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(TwoFactorAuthClass)\r\n)\r\n","import React, {Component, Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n toggleConfirmPopup,\r\n setJobId\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n showContractSigning,\r\n setAfterContractSignCallback\r\n} from \"../../actions/contractsActions\";\r\nimport {updateSQFT} from \"../../actions/sqftFunctions\";\r\nimport {ConfirmPopupTypes, QuoteRequestType, SqftUpdateTypes, UserAction} from \"../visComponents/constants\";\r\nimport {setUserLoginResponse, userLogin, userRegister} from \"../../api/user-api\";\r\nimport Analytics from './../../analytics';\r\nimport WithCloseSQFtCalc from \"../sqft/hocs/withCloseSQFtCalc\";\r\nimport workspace from \"../sqft/components/canvas/core/workspace\";\r\nimport WithOverlay from \"./withOverlayHoc\";\r\nimport {setAssignQuotePopupCustomer} from \"../../actions/assignPopupFunctions\";\r\nimport {setAlreadyRegisteredUserInfo} from \"../../actions/userFunctions\";\r\nimport {loaderEnable} from \"../ui/loaderView\";\r\nimport {renderConfirmPopup} from \"../../api/api-popups\";\r\nimport {ROUTES} from \"../../routes\";\r\n\r\nclass ConfirmPopup extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (nextProps.applyPopupOpened && !this.props.applyPopupOpened) {\r\n document.body.classList.add('body--apply-popup');\r\n }\r\n }\r\n\r\n handleApply = (confirm, hideOverlay, closeSQFtCalc) => {\r\n // Analytics.sendClickEvent('confirm-popup-apply-' + (confirm ? 'yes': 'no'));\r\n hideOverlay(this.closePopup);\r\n document.body.classList.remove('body--apply-popup');\r\n const {confirmPopupType, confirmPopupTag} = this.props;\r\n switch (confirmPopupType) {\r\n case ConfirmPopupTypes.ConsultationRequest: {\r\n const data = {\r\n yesNoConsultationRequest: confirm,\r\n userPopupType: confirmPopupTag.userPopupType,\r\n fromConfirmationDialog: true,\r\n quoteRequestType: QuoteRequestType.RequestConsultation\r\n };\r\n confirm\r\n ? Analytics.sendClickEvent('design-consultation-yes')\r\n : Analytics.sendClickEvent('design-consultation-no');\r\n switch (confirmPopupTag.userAction) {\r\n case UserAction.Login:\r\n userLogin(data);\r\n break;\r\n case UserAction.Register:\r\n userRegister(data)\r\n break;\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.SqftResetChanges: {\r\n if (confirm) {\r\n this.props.updateSQFT(SqftUpdateTypes.Reset);\r\n closeSQFtCalc(false);\r\n workspace.removeAllShapes();\r\n workspace.textBoxManager.removeAllTextBoxes();\r\n workspace.removeAllSlabImages();\r\n setTimeout(() => {\r\n this.props.updateSQFT(null);\r\n }, 0)\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.SqftUpdateQuestion: {\r\n if (confirm) {\r\n this.props.updateSQFT(SqftUpdateTypes.UpdateData);\r\n setTimeout(() => {\r\n this.props.updateSQFT(null);\r\n }, 0)\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.AssignQuoteOnExistingUser: {\r\n if (confirm) {\r\n const {alreadyRegisteredUserInfo} = this.props;\r\n Analytics.sendClickEvent('confirm-assign-quote-on-existing-user');\r\n if (window.location.hash.includes(ROUTES.contract)) {\r\n // this.props.showContractSigning(false, () => {}); // why close contract?\r\n if (this.props.afterContractSignCallback) {\r\n this.props.setAfterContractSignCallback(null);\r\n }\r\n }\r\n if (alreadyRegisteredUserInfo.assignQuote) {\r\n this.props.setAssignQuotePopupCustomer({ // clear current selected customer\r\n id: alreadyRegisteredUserInfo.userId,\r\n email: alreadyRegisteredUserInfo.email,\r\n fullName: alreadyRegisteredUserInfo.values.firstName + (alreadyRegisteredUserInfo.values.lastName ? \" \" + alreadyRegisteredUserInfo.values.lastName : \"\"),\r\n });\r\n this.props.setAlreadyRegisteredUserInfo({confirmedAssign: true}); // trigger assign quote button\r\n } else {\r\n loaderEnable();\r\n setUserLoginResponse(alreadyRegisteredUserInfo, true);\r\n }\r\n }\r\n if (confirmPopupTag.applyFunction) {\r\n confirmPopupTag.applyFunction();\r\n }\r\n break;\r\n }\r\n case ConfirmPopupTypes.DeleteCartItemsPopup: {\r\n if (confirm) {\r\n renderConfirmPopup(0, {allowDelete: true}, false); // clear tag\r\n }\r\n break;\r\n }\r\n // case ConfirmPopupTypes.ChangeWizardToPreviousStepSelection:\r\n // case ConfirmPopupTypes.ReplaceRoomWhenItExistsInCartButWeAddNew: {\r\n // break;\r\n // }\r\n default: {\r\n if (confirm) {\r\n if (confirmPopupTag.applyFunction) {\r\n confirmPopupTag.applyFunction();\r\n }\r\n } else if (confirmPopupTag.declineFunction) {\r\n confirmPopupTag.declineFunction()\r\n }\r\n renderConfirmPopup(0, {}, false); // clear tag\r\n break;\r\n }\r\n }\r\n };\r\n\r\n getConfirmMessage = () => {\r\n const {intl, confirmPopupType, confirmPopupTag} = this.props;\r\n switch (confirmPopupType) {\r\n case ConfirmPopupTypes.ConsultationRequest:\r\n return intl.formatMessage({id: \"confirmPopup.consultationRequest\"});\r\n case ConfirmPopupTypes.SqftResetChanges:\r\n return intl.formatMessage({id: \"confirmPopup.sqftResetChanges\"});\r\n case ConfirmPopupTypes.SqftUpdateQuestion:\r\n return intl.formatMessage({id: \"confirmPopup.sqftUpdateQuestion\"});\r\n case ConfirmPopupTypes.DeleteCartItemsPopup:\r\n return intl.formatMessage({id: confirmPopupTag.fromDelete ? \"confirmPopup.deleteCartItems2\" : \"confirmPopup.deleteCartItems\"});\r\n case ConfirmPopupTypes.ChangeWizardToPreviousStepSelection:\r\n return intl.formatMessage({id: \"confirmPopup.deleteCartItemsWizard\"});\r\n case ConfirmPopupTypes.ReplaceRoomWhenItExistsInCartButWeAddNew:\r\n return intl.formatMessage({id: \"confirmPopup.replaceRoomWhenItExistsInCartButWeAddNew\"});\r\n case ConfirmPopupTypes.AssignQuoteOnExistingUser: {\r\n const {alreadyRegisteredUserInfo} = this.props;\r\n return (\r\n \r\n

    \r\n

    \r\n {alreadyRegisteredUserInfo.values ? (\r\n
    \r\n

    {alreadyRegisteredUserInfo.values.firstName + (alreadyRegisteredUserInfo.values.lastName ? \" \" + alreadyRegisteredUserInfo.values.lastName : \"\")}

    \r\n

    {alreadyRegisteredUserInfo.email}

    \r\n
    \r\n ) : null}\r\n
    \r\n );\r\n }\r\n default:\r\n return \"Text is not set up\"\r\n }\r\n };\r\n\r\n closePopup = () => {\r\n this.props.toggleConfirmPopup(false);\r\n };\r\n\r\n render() {\r\n const {confirmPopupOpened, confirmPopupType} = this.props;\r\n if (!confirmPopupOpened) {\r\n return null\r\n }\r\n return (\r\n \r\n {(hideOverlay) => (\r\n
    \r\n {/*
    */}\r\n {/*

    Would you like to add any visualized items to your cart?

    */}\r\n {/*
    */}\r\n
    \r\n {this.getConfirmMessage()}\r\n
    \r\n
    \r\n \r\n \r\n {(closeSQFtCalc) => (\r\n \r\n )}\r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {confirmPopupOpened, confirmPopupType, confirmPopupTag, alreadyRegisteredUserInfo} = store.userState;\r\n const {afterContractSignCallback} = store.contractSigningState;\r\n return {\r\n confirmPopupOpened,\r\n confirmPopupType,\r\n confirmPopupTag,\r\n alreadyRegisteredUserInfo,\r\n // contractSignIsOpened: isVisible,\r\n afterContractSignCallback,\r\n };\r\n};\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n setJobId,\r\n updateSQFT,\r\n setAssignQuotePopupCustomer,\r\n setAlreadyRegisteredUserInfo,\r\n showContractSigning,\r\n setAfterContractSignCallback,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ConfirmPopup)\r\n)\r\n","import {connect} from \"react-redux\";\r\n\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {setShowAddedToTheCartSuccess} from \"../../../actions/groheFunctions\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\n\r\nconst WithCloseSQFtCalc = (props) => {\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n return children(closeSQFTCalc);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n activePreset: store.bathroomVisualizerState.activePreset,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n toggleConfirmPopup,\r\n setSqftFromFeature,\r\n setShowAddedToTheCartSuccess,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithCloseSQFtCalc)\r\n);\r\n","import React, {Component} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {isFacebook, isInstagram} from \"../../misc/browsers\";\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport MobileRotateButtonIcon from \"./mobileRotateButtonIcon\";\r\nimport {AmericanStandardIcon, groheIcon} from \"../common/icons\";\r\n\r\n// const faceBookOldView = (isRebath) => (\r\n//
    \r\n//
    \r\n// Click HERE to open this tool in another browser\r\n//
    \r\n//
    \r\n// Facebook doesn’t support this visualizer in the Facebook app.\r\n//
    \r\n//
    \r\n// \"\"/\r\n//
    \r\n//
    \r\n//

    OR

    \r\n//

    Copy the following link into your browser:

    \r\n//

    {window.location.href.split(window.location.search)[0]}

    \r\n//
    \r\n//
    \r\n// );\r\n\r\nclass MobileRotateButton extends Component {\r\n\r\n getIcon = () => {\r\n if (this.props.fabricatorData.isAmericanStandard) {\r\n return AmericanStandardIcon\r\n }\r\n return groheIcon\r\n }\r\n\r\n getLogo = () => {\r\n switch (true) {\r\n case this.props.fabricatorData.isRebath:\r\n return `${baseNewImagesPath}images/Logos/rebath-logo.svg`\r\n case this.props.fabricatorData.isRona:\r\n return `https://qc-cdn.s3.amazonaws.com/Logos/rona.png`\r\n case this.props.fabricatorData.isRenoDepot:\r\n return `https://qc-cdn.s3.amazonaws.com/Logos/reno-depot.png`\r\n case this.props.fabricatorData.isLowes:\r\n return `${baseNewImagesPath}images/Logos/Lowes-Color-Logo.svg`\r\n case this.props.fabricatorData.isCaesarStone:\r\n return `${baseNewImagesPath}images/Logos/csconnect2.png`\r\n default:\r\n // return `${baseNewImagesPath}images/Logos/quote-logo-stacked.svg`\r\n return `${baseNewImagesPath}images/Logos/Quote-Kitchen-and-Bath.svg`\r\n }\r\n };\r\n\r\n render() {\r\n\r\n const {isRebath, isLowes, isRona, isRenoDepot, isAmericanStandard, isLixil} = this.props.fabricatorData;\r\n\r\n return isFacebook || isInstagram\r\n ? null : (\r\n
    \r\n
    \r\n {isLixil ? this.getIcon() : \"\"}\r\n
    \r\n \r\n

    \r\n \r\n

    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n fabricatorData: store.fabricatorState\r\n});\r\nexport default connect(mapStateToProps)(MobileRotateButton);\r\n","import React from \"react\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport {setAssignQuotePopupSearchText} from \"../../../actions/assignPopupFunctions\";\r\n\r\nconst AssignQuotePopupSearch = (props) => {\r\n\r\n const {setAssignQuotePopupSearchText, assignQuotePopupSearchText, intl} = props;\r\n\r\n const handleSearchInputChange = (event) => {\r\n setAssignQuotePopupSearchText(event.target.value)\r\n };\r\n\r\n const searchText = assignQuotePopupSearchText;\r\n\r\n return (\r\n
    \r\n 12 ? \" search-input--with-close\" : \"\")}\r\n value={searchText}\r\n onChange={handleSearchInputChange}\r\n placeholder={intl.formatMessage({id: \"mobileMenu.searchPlaceholder\"})}\r\n />\r\n \r\n {searchText ?
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n assignQuotePopupSearchText: store.assignQuoteState.assignQuotePopupSearchText\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setAssignQuotePopupSearchText\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(AssignQuotePopupSearch)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\nimport {List} from \"react-virtualized\";\r\n\r\nimport {customerInterface, employeeInterface} from \"./assignQuoteInterfaces\";\r\nimport {usePrevious} from \"../../../misc/helperHooks\";\r\nimport UiIcon from \"../../ui/icons/uiIcon\";\r\n// import LoadingSpinner from \"../../ui/loadingSpinner\";\r\n\r\nconst AssignQuoteVirtualizedList = (props) => {\r\n\r\n const {renderList, selectEntity, activeEntity, noEntitiesFound, title, contentDimensions, errorMessage,\r\n hideEmployeesColumn} = props;\r\n const [scrollToIndex, setScrollToIndex] = useState(0);\r\n const prevEntity = usePrevious(activeEntity);\r\n\r\n useEffect(() => {\r\n if (activeEntity && !prevEntity) {\r\n let scrollToIn = renderList.findIndex(item => item.id === activeEntity.id)\r\n if (scrollToIn > -1) {\r\n setScrollToIndex(scrollToIn + 3);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeEntity]);\r\n\r\n const listWidth = contentDimensions && contentDimensions.width\r\n ? hideEmployeesColumn\r\n ? contentDimensions.width - 10\r\n : (contentDimensions.width / 2) - 10\r\n : 320; // 10 is padding\r\n const listHeight = contentDimensions && contentDimensions.height ? contentDimensions.height - 15 : 245; // 15 is title\r\n\r\n const listSettings = {\r\n width: listWidth,\r\n height: listHeight,\r\n rowHeight: 40,\r\n overscanRowCount: 6,\r\n rowCount: renderList.length,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const rowRenderer = ({index, key, style}) => {\r\n const customer = renderList[index];\r\n return (\r\n
  • \r\n
    selectEntity(customer)}>\r\n
    \r\n \r\n
    \r\n
    \r\n selectEntity(customer)}>\r\n {customer.fullName} {customer.email ? ({customer.email}) : null}\r\n \r\n
  • \r\n );\r\n }\r\n\r\n const noRowsRenderer = () =>
    ;\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {errorMessage ? : null}\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nAssignQuoteVirtualizedList.propTypes = {\r\n renderList: PropTypes.array.isRequired,\r\n selectEntity: PropTypes.func.isRequired,\r\n activeEntity: PropTypes.oneOfType([\r\n PropTypes.shape(customerInterface),\r\n PropTypes.shape(employeeInterface)\r\n ]),\r\n title: PropTypes.string.isRequired,\r\n errorMessage: PropTypes.string,\r\n noEntitiesFound: PropTypes.string.isRequired,\r\n contentDimensions: PropTypes.shape({\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n }),\r\n}\r\n\r\nexport default injectIntl(AssignQuoteVirtualizedList)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport SqftFeaturesPopup from \"./sqftFeaturesPopup\";\r\nimport eventManager from \"../../sqft/components/canvas/store/sqftEventManager\";\r\nimport {changeSqftFeaturesPopup} from \"../../../actions/sqftFunctions\";\r\n\r\nconst SqftFeaturesPopupWrapper = (props) => {\r\n const { sqftFeaturesPopup, changeSqftFeaturesPopup } = props;\r\n const isOpened = sqftFeaturesPopup.opened;\r\n const wrapperRef = useRef(null);\r\n\r\n useEffect(() => {\r\n const closePopup = () => {\r\n changeSqftFeaturesPopup({ opened: false, sqftPassedData: null });\r\n };\r\n\r\n const handleClickOutside = (event) => {\r\n if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\r\n closePopup();\r\n }\r\n };\r\n\r\n if (isOpened) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_DOWN,\r\n closePopup,\r\n { name: \"popupWrapper\" },\r\n eventManager.priorities.OVERALL\r\n );\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [wrapperRef, isOpened, changeSqftFeaturesPopup]);\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {sqftFeaturesPopup, sqftFromFeature} = store.sqftState;\r\n return {\r\n sqftFeaturesPopup,\r\n sqftFromFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeSqftFeaturesPopup\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFeaturesPopupWrapper);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport FilterListIcon from '@mui/icons-material/FilterList';\r\nimport InfoIcon from \"@mui/icons-material/Info\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nimport {getFilterValueThumbnailAndStyles} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getFeatureGroupIconStyles, getFeatureGroupIconURL} from \"../../bvComponent/core/assets\";\r\nimport {wizardGroupInterface, wizardSelectedValueInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {featureGroupInterface} from \"../../../interfaces/featureInterface\";\r\n\r\n\r\nconst MaterialsWizardFooterStepThumbnail = (props) => {\r\n\r\n const {wizardGroup, wizardSelectedValue, allFilterGroups, isMobile, activeTheme, featureGroup} = props;\r\n\r\n let selectedFilter = wizardSelectedValue ? wizardSelectedValue.selectedFilter : null;\r\n\r\n // const notSelected = !wizardSelectedValue || !(Object.keys(wizardSelectedValue).length)\r\n // || (!selectedFeature && !selectedFilter);\r\n //\r\n // if (notSelected) {\r\n // const featureGroup = wizardGroup ? getFeatureGroupFromWizardGroup(wizardGroup) : null;\r\n // return
    \r\n //
    \r\n // }\r\n\r\n if (wizardGroup && selectedFilter && wizardGroup.nodeType === \"filter\") {\r\n if (isMobile) {\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n const filterGroup = allFilterGroups.find(group => group.id === selectedFilter.filterGroup_id);\r\n const {styles} = getFilterValueThumbnailAndStyles(selectedFilter, filterGroup || {});\r\n return
    \r\n } else if (wizardGroup) {\r\n return (\r\n
    \r\n )\r\n }\r\n\r\n // just in case\r\n return (\r\n
    \r\n {isMobile\r\n ? \r\n :
    }\r\n
    \r\n )\r\n\r\n};\r\n\r\nMaterialsWizardFooterStepThumbnail.propTypes = {\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n featureGroup: PropTypes.shape(featureGroupInterface),\r\n wizardSelectedValue: PropTypes.shape(wizardSelectedValueInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {filterGroups} = store.filterState;\r\n const {activeTheme} = store.serverState;\r\n\r\n return {\r\n allFilterGroups: filterGroups,\r\n activeTheme,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(MaterialsWizardFooterStepThumbnail)\r\n","import React from 'react';\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport { polyfill } from 'es6-promise';\r\npolyfill();\r\nimport \"./polyfills/object.dataset\";\r\nimport \"./polyfills/string.includes\";\r\nimport \"./polyfills/string.startsWith\";\r\nimport \"./polyfills/jquery.preBind\";\r\nimport \"./polyfills/arrayMethods\";\r\nimport \"./polyfills/objectMethods\";\r\nimport \"./polyfills/numberMethods\";\r\nimport \"./lib/wrapText\";\r\nimport \"./lib/fraction\";\r\n//import {getNonce} from \"../../misc/utils\";\r\n\r\nimport SqftFooter from \"./components/sqftFooter\";\r\nimport SqftIcons from \"./components/SqftIcons\";\r\nimport ChangeLayoutPopup from \"../popups/changeLayoutPopup\";\r\nimport SqftManualCalculateWindow from \"./components/manualCalculate/SqftManualCalculateWindow\";\r\nimport SqftNavSettingsWindow from \"./components/popup/SqftNavSettingsWindow\";\r\nimport SqftTutorial from \"./components/popup/SqftTutorial\";\r\n// import SqftCabinetsTutorial from \"./components/popup/SqftCabinetsTutorial\";\r\nimport SqftSystemMessage from \"./components/popup/SqftSystemMessage\";\r\nimport AR3DPopup from \"./components/popup/AR3DPopup\";\r\nimport ValidationPopupWindow from \"./components/popup/ValidationPopupWindow\";\r\nimport SqftSystemDeleteMessage from \"./components/popup/SqftSystemDeleteMessage\";\r\nimport SqftLoadSlabWindow from \"./components/slab/SqftLoadSlabWindow\";\r\nimport SqftPopupWindow from \"./components/popup/SqftPopupWindow\";\r\nimport SqftLabelsContextMenuCategorySwitching\r\n from \"./components/canvas/core/controls/labels/sqftLabelsContextMenuCategorySwitching\";\r\nimport SqftLabelsContextMenu from \"./components/canvas/core/controls/labels/sqftLabelsContextMenu\";\r\nimport {\r\n setIsRoomSwitcherVisible,\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType\r\n} from \"../../actions/sqftMenuFunctions\";\r\nimport SqftContextMenuV2 from \"./components/popup/SqftContextMenuV2\";\r\nimport ChangeValuePopupWindow from \"./components/popup/ChangeValuePopupWindow\";\r\nimport NavigationSidebar from \"./components/navigation/NavigationSidebar\";\r\nimport useUpdateSqftConfig from \"./hocs/onLoad/useUpdateSqftConfig\";\r\nimport useAddDeviceClass from \"./hocs/onLoad/useAddDeviceClass\";\r\n//import useImportSQFTData from \"./hocs/onLoad/useImportSQFTData\";\r\nimport useToggleRoomsSwitcher from \"./hocs/onLoad/useToggleRoomsSwitcher\";\r\nimport useOpenSQFTMenu from \"./hocs/onLoad/useOpenSQFTMenu\";\r\nimport useCheckWizardActiveItem from \"./hocs/onLoad/useCheckWizardActiveItem\";\r\nimport useResetState from \"./hocs/onLoad/useResetState\";\r\nimport SqftHeader from \"./components/header/SqftHeader\";\r\nimport useUpdateCabinetFeatures from \"./hocs/onLoad/useUpdateCabinetFeatures\";\r\nimport SquareFootageToolViewWorkspace from \"./squareFootageToolViewWorkspace\";\r\n//import NavigationSidebarRight from \"./components/navigation/NavigationSidebarRight\";\r\n//import useSetDefaultCabinetViewMode from \"./hocs/onLoad/useSetDefaultCabinetViewMode\";\r\n\r\nconst SquareFootageToolView = (props) => {\r\n const {visualizersLoaded} = props;\r\n const {cartItems, sqftPopup, fabricatorSettings,\r\n setSQFTActiveRoomIndex, setSQFTActiveRoomType, setSQFTActiveRoomId, activeQuoteIndex,\r\n setIsRoomSwitcherVisible, contextMenuV2, quotes, changeValuePopups, validationPopups, isSquareFootageEnabled} = props;\r\n\r\n useResetState();\r\n useUpdateSqftConfig();\r\n useAddDeviceClass();\r\n useToggleRoomsSwitcher( visualizersLoaded, fabricatorSettings, setIsRoomSwitcherVisible, quotes, setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex, setSQFTActiveRoomType, cartItems, activeQuoteIndex, isSquareFootageEnabled\r\n );\r\n //useSQFTRouting();\r\n //useSetDefaultCabinetViewMode(); //we assume is already in 2d\r\n useUpdateCabinetFeatures();\r\n\r\n useOpenSQFTMenu();\r\n useCheckWizardActiveItem();\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {/**/}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n {\r\n visualizersLoaded.length ? : null\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n fabricatorSettings.useCategorySwitching ? : \r\n }\r\n {\r\n changeValuePopups.map((changeValuePopup, index) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n {\r\n validationPopups.map((validationPopup, index) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n \r\n {/**/}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {sqftFeaturesPopup} = store.sqftState;\r\n\r\n return {\r\n quotes: store.quotesState.quotes,\r\n fabricatorData: store.fabricatorState,\r\n sqftVisited: sqftFeaturesPopup.visited,\r\n sqftPopup: store.sqftMenuState.sqftPopup,\r\n activeButton: store.sqftMenuState.activeButton,\r\n contextMenuV2: store.sqftMenuState.contextMenuV2,\r\n isMobile: store.serverState.isMobile,\r\n cartItems: store.cartState.cartItems,\r\n windowWidth: store.serverState.windowWidth,\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n isShowSlabTool: store.sqftSlabState.isShowSlabTool,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n changeValuePopups: store.sqftMenuState.changeValuePopups,\r\n validationPopups: store.sqftMenuState.validationPopups,\r\n isSquareFootageEnabled: store.sqftState.isSquareFootageEnabled,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveRoomId,\r\n setSQFTActiveRoomIndex,\r\n setSQFTActiveRoomType,\r\n setIsRoomSwitcherVisible,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SquareFootageToolView)\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setQuotes} from \"../../../actions/roomsFunctions\";\r\nimport {changeSqftFeaturesPopup, setSqftMeasureUnit, setSquareFeet} from \"../../../actions/sqftFunctions\";\r\nimport {setMaterialsPageSubSteps} from \"../../../actions/selectionFunctions\";\r\nimport {\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setCameFromPage,\r\n toggleSelectionFeatureInfo\r\n} from \"../../../actions/actionFunctions\";\r\nimport WithAddToQuote from \"../hocs/withAddToQuote\";\r\n\r\nconst SqftFooterAddToQuoteButton = (props) => {\r\n\r\n return (\r\n \r\n {(handleAddToQuoteClick) => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n measureUnit: store.sqftState.measureUnit,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n quotes: store.quotesState.quotes,\r\n cartItems: store.cartState.cartItems,\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n sqftVisited: store.sqftState.sqftFeaturesPopup.visited,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n useSqftCartPopup: store.sqftState.sqftFeaturesPopup.enabled,\r\n cameFromPage: store.cartState.cameFromPage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setQuotes,\r\n setSquareFeet,\r\n setMaterialsPageSubSteps,\r\n changeSqftFeaturesPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n changeCartItemQuantity,\r\n changeSelectionInfoQuantity,\r\n setSqftMeasureUnit,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFooterAddToQuoteButton);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport WithSqftFooterCancel from \"../hocs/withSqftFooterCancel\";\r\n\r\nconst SqftFooterCancelButton = (props) => {\r\n\r\n return (\r\n \r\n {(handleCloseSQFtCalc) => (\r\n \r\n )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftFooterCancelButton);\r\n","import {connect} from \"react-redux\";\r\nimport {manualCalculationsCheckForChangesApplied} from \"../helpers/sqftCalculations\";\r\nimport {ConfirmPopupTypes} from \"../../visComponents/constants\";\r\nimport {setCameFromPage, toggleConfirmPopup, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport {setSqftFromFeature} from \"../../../actions/sqftFunctions\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport workspaceHistory from \"../components/canvas/core/workspaceHistory\";\r\nimport {useCloseSQFTCalc} from \"./useCloseSQFTCalc\";\r\nimport {enableRegularMode} from \"../components/canvas/store/canvasHelper\";\r\nimport {clearAllMenusEvents} from \"../components/canvas/core/workspace/workspaceEvents\";\r\nimport {showSlabTool} from \"../../../actions/sqftSlabFunctions\";\r\n\r\nconst WithSqftFooterCancel = (props) => {\r\n const {showManualCalculation, toggleConfirmPopup, showSlabTool} = props;\r\n const {children} = props;\r\n const {closeSQFTCalc} = useCloseSQFTCalc();\r\n\r\n const handleCancelClick = () => {\r\n if (showManualCalculation) {\r\n manualCalculationsCheckForChangesApplied() ? callResetDataPopup() : closeSQFTCalc(false);\r\n } else {\r\n showSlabTool(false);\r\n enableRegularMode();\r\n clearAllMenusEvents();\r\n workspaceHistory.checkForChangesApplied() ? callResetDataPopup() : closeSQFTCalc(false);\r\n }\r\n };\r\n\r\n const callResetDataPopup = () => {\r\n toggleConfirmPopup(true, ConfirmPopupTypes.SqftResetChanges);\r\n };\r\n\r\n return children(handleCancelClick);\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n cameFromPage: store.cartState.cameFromPage,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n activePreset: store.bathroomVisualizerState.activePreset,\r\n bvPresets: store.bathroomVisualizerState.bvPresets,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleConfirmPopup,\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage,\r\n setSqftFromFeature,\r\n showSlabTool,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithSqftFooterCancel)\r\n);\r\n","import React from 'react'\r\nimport {connect} from \"react-redux\";\r\nimport {setSQFTActiveButton} from \"../../../../actions/sqftMenuFunctions\";\r\nimport {setSqftMeasureUnit} from \"../../../../actions/sqftFunctions\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nconst SqftPopupWindow = (props) => {\r\n const {title, content, isOpened} = props;\r\n const {confirmCallback, confirmText, cancelCallback, cancelText} = props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n {title}\r\n
    \r\n \r\n
    \r\n
    \r\n {content}\r\n
    \r\n
    \r\n {\r\n cancelText ?\r\n \r\n : null\r\n }\r\n {\r\n confirmText ?\r\n \r\n : null\r\n }\r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nSqftPopupWindow.propTypes = {\r\n title: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n content: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n isOpened: PropTypes.bool,\r\n confirmCallback: PropTypes.func,\r\n confirmText: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n cancelCallback: PropTypes.func,\r\n cancelText: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.object,\r\n PropTypes.instanceOf(FormattedMessage)\r\n ]),\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n activeButton: store.sqftMenuState.activeButton,\r\n measureUnit: store.sqftState.measureUnit,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTActiveButton,\r\n setSqftMeasureUnit\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftPopupWindow);\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\n\r\nconst Square = (size, isIsland = false) => {\r\n let points = isIsland ? [\r\n new point(0, 15, \"lefttop\"),\r\n new point(65, 15, \"righttop\"),\r\n new point(65, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ] : [\r\n new point(0, 0, \"lefttop\"),\r\n new point(65, 0, \"righttop\"),\r\n new point(65, 65, \"rightbottom\"),\r\n new point(0, 65, \"leftbottom\")\r\n ];\r\n\r\n return [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[0])\r\n ];\r\n};\r\n\r\nexport default Square\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst wideAngle = function() {\r\n let points;\r\n if(config.measureUnit === \"Metric\" ) {\r\n points = [\r\n new point(-13.62, -10, \"lefttop\"),\r\n new point(134, -10, \"righttop\"),\r\n new point(134, 13.62, \"rightbottom\"),\r\n new point(10, 13.62, \"rightbottom\", true),\r\n new point(10, 114, \"rightbottom\"),\r\n new point(-13.62, 114, \"leftbottom\")\r\n ];\r\n } else {\r\n points = [\r\n new point(-16, -10, \"lefttop\"),\r\n new point(134, -10, \"righttop\"),\r\n new point(134, 16, \"rightbottom\"),\r\n new point(10, 16, \"rightbottom\", true),\r\n new point(10, 114, \"rightbottom\"),\r\n new point(-16, 114, \"leftbottom\")\r\n ];\r\n }\r\n\r\n let lines = [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[4]),\r\n new line(points[4], points[5]),\r\n new line(points[5], points[0])\r\n ];\r\n\r\n return lines;\r\n};\r\n\r\nexport default wideAngle\r\n","import point from \"../point\";\r\nimport line from \"../line\";\r\nimport config from \"../../../store/sqftConfig\";\r\n\r\nconst horseshoe = function() {\r\n let points;\r\n if(config.measureUnit === \"Metric\" ) {\r\n points = [\r\n new point(0, -20, \"lefttop\"),\r\n new point(181, -20, \"righttop\"),\r\n new point(181, 80, \"rightbottom\"),\r\n new point(157.38, 80, \"leftbottom\"),\r\n new point(157.38, 3.62, \"leftbottom\", true),\r\n new point(23.62, 3.62, \"rightbottom\", true),\r\n new point(23.62, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ];\r\n } else {\r\n points = [\r\n new point(0, -20, \"lefttop\"),\r\n new point(181, -20, \"righttop\"),\r\n new point(181, 80, \"rightbottom\"),\r\n new point(155, 80, \"leftbottom\"),\r\n new point(155, 6, \"leftbottom\", true),\r\n new point(26, 6, \"rightbottom\", true),\r\n new point(26, 80, \"rightbottom\"),\r\n new point(0, 80, \"leftbottom\")\r\n ];\r\n }\r\n\r\n let lines = [\r\n new line(points[0], points[1]),\r\n new line(points[1], points[2]),\r\n new line(points[2], points[3]),\r\n new line(points[3], points[4]),\r\n new line(points[4], points[5]),\r\n new line(points[5], points[6]),\r\n new line(points[6], points[7]),\r\n new line(points[7], points[0])\r\n ];\r\n\r\n return lines;\r\n};\r\n\r\nexport default horseshoe\r\n","import React, {useEffect} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {setSwitcherPosition, toggleShowManualCalculation} from \"../../../../../actions/sqftManualCalculationFunctions\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst ManualCalculateSwitcher = (props) => {\r\n const {overlay, setSwitcherPosition, switcherPosition, showManualCalculation, toggleShowManualCalculation, isMobile,\r\n sideBarButtons} = props;\r\n\r\n const handleButtonClick = () => {\r\n // changeStateToQuote();\r\n toggleShowManualCalculation(!showManualCalculation);\r\n };\r\n\r\n useEffect(() => {\r\n if (!overlay) {\r\n const elem = document.getElementById(\"manual-switcher\");\r\n const rect = elem.getBoundingClientRect();\r\n setSwitcherPosition({rect})\r\n }\r\n }, [overlay, sideBarButtons, setSwitcherPosition]);\r\n\r\n const blockStyle = {\r\n left: overlay ? switcherPosition.rect.left : ''\r\n }\r\n isMobile\r\n ? blockStyle.bottom = overlay ? '13px' : ''\r\n : blockStyle.top = overlay ? switcherPosition.rect.top : ''\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nManualCalculateSwitcher.propTypes = {\r\n overlay: PropTypes.bool,\r\n sideBarButtons: PropTypes.array,\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n switcherPosition: store.sqftManualCalculationState.switcherPosition,\r\n isMobile: store.serverState.isMobile,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowManualCalculation,\r\n setSwitcherPosition,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ManualCalculateSwitcher);\r\n","// ExportButton.js\r\nimport React from 'react';\r\nimport {GLTFExporter} from \"three/examples/jsm/exporters/GLTFExporter\";\r\nimport SqftStore from \"../../../canvas/store/sqftStore\";\r\n\r\nconst ExportButton = () => {\r\n const exportScene = () => {\r\n const exporter = new GLTFExporter();\r\n const viewGL = SqftStore.viewGL;\r\n\r\n if (viewGL && viewGL.scene) {\r\n exporter.parse(viewGL.scene, (gltf) => {\r\n const blob = new Blob([JSON.stringify(gltf)], {type: 'text/plain'});\r\n const link = document.createElement('a');\r\n link.style.display = 'none';\r\n document.body.appendChild(link);\r\n link.href = URL.createObjectURL(blob);\r\n link.download = 'scene.gltf';\r\n link.click();\r\n });\r\n } else {\r\n console.error('GLBViewer instance or scene not found');\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ExportButton;\r\n","import React, {Fragment, useEffect} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {setAbortController, setSQFTAr3dPopup} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport ShapesGoogleModelViewer from \"./ShapesGoogleModelViewer\";\r\nimport ShapesThreeJsViewer from \"./ShapesThreeJsViewer\";\r\nimport MultiLoader from \"../../../../ui/multiLoader\";\r\nimport store from \"../../../../../store\";\r\nimport {setMultiLoader} from \"../../../../../actions/actionFunctions\";\r\n//import GroheFeatures from \"../../../look/grohe/groheNavigation/groheFeatures/groheFeatures\";\r\nimport {setLookActiveCategory, setLookOpened} from \"../../../../../actions/lookFunctions\";\r\nimport {setAPIErrorMessage, setSqftCabinetsGlb} from \"../../../../../actions/sqftFunctions\";\r\n//import {setCabinetGLBFromCabinetsSet} from \"../../../helpers/sqft3dArHelper\";\r\n//import sqftShapeManager from \"../canvas/store/sqftShapeManager\";\r\n//import {SHAPE_PART_ID} from \"../../../constants\";\r\n//import {isProd} from \"../../../../misc/fabricatorHardcode\";\r\nimport {IS_QKB_UI} from \"../../../../../config\";\r\nimport PropTypes from \"prop-types\";\r\nimport sqftConfig from \"../../canvas/store/sqftConfig\";\r\n\r\nconst ThreeDWorkspace = (props) => {\r\n const {apiErrorMessage, cabinetsGlb, setLookOpened,\r\n abortRequestController} = props;\r\n //const {lookActiveFeature, setLookActiveCategory, displayDoorsOnly} = props;\r\n\r\n useEffect(()=> {\r\n if (!IS_QKB_UI) {\r\n setLookOpened(false);\r\n }\r\n }, [setLookOpened])\r\n\r\n useEffect(()=> {\r\n return () => {\r\n if (abortRequestController) {\r\n abortRequestController.abort();\r\n }\r\n store.dispatch(setMultiLoader({activeStep: 8, visible: false, finished: true}));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n // //todo lookActiveFeature is always triggered\r\n // //todo CHANGE FEATURES FROM THREE D\r\n // useEffect(()=> {\r\n // // wi will display door styles for this category\r\n // //todo\r\n // setLookActiveCategory(SHAPE_PART_ID.top_cabinet);\r\n //\r\n // store.dispatch(setMultiLoader({activeStep: 0, visible: false, finished: false}));\r\n // store.dispatch(setMultiLoader({activeStep: 0, visible: true, finished: false}));\r\n //\r\n // //todo update lower and bottom separately\r\n // //sqftShapeManager.changeShapesFeatureIDIfColorWasChanged(lookActiveFeature);\r\n //\r\n // setCabinetGLBFromCabinetsSet(displayDoorsOnly).then(r => void r);\r\n //\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, [lookActiveFeature])\r\n\r\n return (\r\n
    \r\n {sqftConfig.threeD.useGoogleModelViewer\r\n ? \r\n : (\r\n \r\n {cabinetsGlb && !apiErrorMessage ? : null}\r\n {apiErrorMessage || }\r\n \r\n )}\r\n {/* TODO CHANGE FEATURES FROM THREE D */}\r\n {/*{ !isProd() ? : null}*/}\r\n
    \r\n )\r\n};\r\n\r\nThreeDWorkspace.propTypes = {\r\n displayDoorsOnly: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => ({\r\n cabinetsGlb: store.sqftState.cabinetsGlb,\r\n apiErrorMessage: store.sqftState.apiErrorMessage,\r\n abortRequestController: store.sqftState.abortRequestController,\r\n lookActiveFeature: store.lookState.lookActiveFeature,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTAr3dPopup,\r\n setLookActiveCategory,\r\n setSqftCabinetsGlb,\r\n setAPIErrorMessage,\r\n setAbortController,\r\n setLookOpened,\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ThreeDWorkspace);\r\n","import React, {useEffect} from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setMultiLoader} from \"../../actions/actionFunctions\";\r\nimport MultiLoaderSteps from \"./multiLoaderSteps\";\r\nimport MaterialSpinner from \"./materialSpinner\";\r\n\r\nconst MultiLoader = (props) => {\r\n\r\n const {multiLoader, setMultiLoader, useCabinetLoader} = props;\r\n\r\n useEffect(() => {\r\n setMultiLoader({finished: false, activeStep: 0, visible: true});\r\n return () => {\r\n setMultiLoader({finished: true, activeStep: 0});\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // useEffect(() => {\r\n // if (multiLoader.activeStep > multiLoader.renderSteps.length) {\r\n // setTimeout(() => {\r\n // setMultiLoader({visible: false});\r\n // }, 500)\r\n // }\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, [multiLoader.activeStep]);\r\n\r\n if (!multiLoader.visible) {\r\n return null\r\n }\r\n\r\n if (multiLoader.finished) {\r\n return \r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nMultiLoader.propTypes = {\r\n useCabinetLoader: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {multiLoader} = store.loaderState;\r\n return {\r\n multiLoader,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setMultiLoader,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MultiLoader)\r\n","import React, {useEffect, useState} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {setSQFTAr3dPopup} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport {generateQRCode} from \"../../../helpers/sqft3dArHelper\";\r\n//import GLBLoader from \"../ar3d/GLBLoader\";\r\n//import ARButton from \"../ar3d/ARButton\";\r\nimport MultiLoader from \"../../../../ui/multiLoader\";\r\nimport store from \"../../../../../store\";\r\nimport {setMultiLoader} from \"../../../../../actions/actionFunctions\";\r\nimport ARButton from \"./ARButton\";\r\nimport {DEVICE_TYPE, getDeviceType} from \"../../../helpers/sqftMobileHelper\";\r\nimport ARButtonGoogleWebXR from \"./ARButtonGoogleWebXR\";\r\n\r\nconst ARWorkspace = (props) => {\r\n const {cabinetsGlb, apiErrorMessage, abortRequestController} = props;\r\n const {isMobile} = props;\r\n const [qrImage, setQrImage] = useState(null)\r\n\r\n // useEffect(()=> {\r\n // if (isMobile && cabinetsGlb) {\r\n // new GLBLoader(cabinetsGlb);\r\n // }\r\n // }, [isMobile, cabinetsGlb])\r\n\r\n useEffect(()=> {\r\n return () => {\r\n if (abortRequestController) {\r\n abortRequestController.abort();\r\n }\r\n store.dispatch(setMultiLoader({activeStep: 8, visible: false, finished: true}));\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n if (!isMobile && cabinetsGlb) {\r\n const getARUrlForGlbFile = () => {\r\n const regex = /composed\\/(.*?)\\.glb/;\r\n const match = cabinetsGlb.match(regex);\r\n\r\n if (match && match.length > 1) {\r\n const extractedString = match[1];\r\n return window.location.origin + '/kitchen/#' + '/sqft-cabinets-ar/' + extractedString;\r\n }\r\n return ''\r\n }\r\n const arUrlForGlbFIle = getARUrlForGlbFile();\r\n generateQRCode(arUrlForGlbFIle).then((imageDataUrl) => {\r\n setQrImage(imageDataUrl);\r\n });\r\n }\r\n\r\n const getArButton = () => {\r\n switch (getDeviceType()) {\r\n case DEVICE_TYPE.Android:\r\n return \r\n case DEVICE_TYPE.iOS:\r\n case DEVICE_TYPE.unknown:\r\n return \r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {cabinetsGlb ? (\r\n isMobile ? (\r\n getArButton()\r\n ) : (\r\n
    \r\n \"QR\r\n
    \r\n )\r\n ) : apiErrorMessage ? (\r\n apiErrorMessage\r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\n// ARWorkspace.propTypes = {\r\n// displayDoorsOnly: PropTypes.bool\r\n// }\r\n\r\nconst mapStateToProps = (store) => ({\r\n ar3dPopup: store.sqftMenuState.ar3dPopup,\r\n cabinetsGlb: store.sqftState.cabinetsGlb,\r\n apiErrorMessage: store.sqftState.apiErrorMessage,\r\n isMobile: store.serverState.isMobile,\r\n abortRequestController: store.sqftState.abortRequestController,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTAr3dPopup\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ARWorkspace);\r\n","import React, {useEffect} from 'react';\r\nimport {injectIntl} from \"react-intl\";\r\nimport {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {LookAugmentRealityIcon} from \"../../../../common/icons\";\r\nimport GLBLoader from \"./GLBLoader\";\r\nimport PropTypes from \"prop-types\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Button from \"@mui/material/Button\";\r\n\r\nconst ARButton = (props) => {\r\n const {url, cabinetsARBlobUrl} = props;\r\n\r\n useEffect(() => {\r\n //let url = 'https://s3.amazonaws.com/qc-3dfiles/composed/' + file + '.glb'\r\n //url = 'https://discoverthreejs.com/examples/assets/models/Parrot.glb';\r\n //url = 'https://threejs.org/examples/models/gltf/AnisotropyBarnLamp.glb';\r\n //url = '/images/sqft-icons/3d/Chair.glb';\r\n //url = 'https://qc-3dfiles.s3.amazonaws.com/ar-composer/WBC3630_Brown.glb';\r\n new GLBLoader(url);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const makeImage = () => {\r\n const c = document.createElement('canvas');\r\n const i = new Image();\r\n i.src = c.toDataURL();\r\n\r\n return i;\r\n }\r\n\r\n const makeLink = (blobUrl) => {\r\n console.log(\"blobUrl\", blobUrl);\r\n return Object.assign(document.createElement('a'), {\r\n download: 'asset.usdz',\r\n rel: \"ar\",\r\n href: blobUrl //URL.createObjectURL(blob)\r\n });\r\n }\r\n\r\n const arClick = () => {\r\n const i = makeImage();\r\n const a = makeLink(cabinetsARBlobUrl)\r\n a.appendChild(i);\r\n\r\n a.click();\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nARButton.propTypes = {\r\n url: PropTypes.string,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n cabinetsARBlobUrl: store.sqftState.cabinetsARBlobUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ARButton)\r\n )\r\n);\r\n","export const getDeviceType = () => {\r\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\r\n\r\n // Проверка на iOS\r\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\r\n return DEVICE_TYPE.iOS;\r\n }\r\n\r\n // Проверка на Android\r\n if (/android/i.test(userAgent)) {\r\n return DEVICE_TYPE.Android;\r\n }\r\n\r\n return DEVICE_TYPE.unknown;\r\n};\r\n\r\nexport const DEVICE_TYPE = {\r\n iOS: 'iOS',\r\n Android: 'Android',\r\n unknown: 'unknown'\r\n}\r\n","import React from 'react';\r\n//import * as ReactDOM from 'react-dom';\r\nimport { injectIntl } from \"react-intl\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { LookAugmentRealityIcon } from \"../../../../common/icons\";\r\nimport PropTypes from \"prop-types\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport Button from \"@mui/material/Button\";\r\nimport WebXRGoogleModelViewer from \"./WebXRGoogleModelViewer\";\r\n\r\nconst ARButtonGoogleWebXR = (props) => {\r\n const { url } = props;\r\n\r\n const activateAR = () => {\r\n const modelViewer = document.querySelector('#arViewer');\r\n if (modelViewer) {\r\n modelViewer.activateAR();\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nARButtonGoogleWebXR.propTypes = {\r\n url: PropTypes.string,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoaded: store.serverState.visualizersLoaded,\r\n cabinetsARBlobUrl: store.sqftState.cabinetsARBlobUrl,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ARButtonGoogleWebXR)\r\n )\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {setSQFTSystemMessage} from \"../../../../actions/sqftMenuFunctions\";\r\n\r\nconst ValidationPopupWindow = (props) => {\r\n const {id, text, position, isHidden} = props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n {text}\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n validationMessage: store.sqftMenuState.validationMessage\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setSQFTSystemMessage\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ValidationPopupWindow);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {CONTEXT_MENU_TYPE} from \"../../../../../constants\";\r\nimport ContextmenuList from \"./contextmenu/contextmenuList\";\r\nimport ContextmenuButtons from \"./contextmenu/contextmenuButtons\";\r\n\r\nconst SqftContextMenu = (props) => {\r\n const {contextMenuType} = props;\r\n\r\n switch (contextMenuType) {\r\n case CONTEXT_MENU_TYPE.list:\r\n return \r\n case CONTEXT_MENU_TYPE.buttons:\r\n return \r\n }\r\n};\r\n\r\nconst mapStateToProps = () => ({\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftContextMenu);\r\n\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setSqftSlabToolVisited, addRoomWithVisitedSlabTool, showSlabTool} from \"../../../../../actions/sqftSlabFunctions\";\r\nimport {\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened\r\n} from \"../../../../../actions/sqftMenuFunctions\";\r\nimport {enableRegularMode, enableSlabMode} from \"../../canvas/store/canvasHelper\";\r\nimport {clearAllMenusEvents} from \"../../canvas/core/workspace/workspaceEvents\";\r\nimport {getQtCatName} from \"../../../helpers/sqftQuotesHelper\";\r\n\r\nconst SlabToolSwitcher = (props) => {\r\n const {isShowSlabTool, isSlabToolVisited, showSlabTool, setSQFTActiveButton, setSQFTMenuOpened,\r\n setSqftSlabToolVisited, addRoomWithVisitedSlabTool} = props;\r\n\r\n const handleButtonClick = () => {\r\n clearAllMenusEvents();\r\n !isShowSlabTool ? enableSlabMode(true) : enableRegularMode(); // before change isShowSlabTool we need to disable and restore shapes\r\n !isSlabToolVisited && setSqftSlabToolVisited(true);\r\n addRoomWithVisitedSlabTool(getQtCatName());\r\n showSlabTool(!isShowSlabTool);\r\n setSQFTActiveButton(\"\");\r\n setSQFTMenuOpened(\"\");\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => ({\r\n isShowSlabTool: store.sqftSlabState.isShowSlabTool,\r\n isSlabToolVisited: store.sqftSlabState.isSlabToolVisited,\r\n showManualCalculation: store.sqftManualCalculationState.showManualCalculation,\r\n switcherPosition: store.sqftManualCalculationState.switcherPosition,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n showSlabTool,\r\n setSQFTActiveButton,\r\n setSQFTMenuOpened,\r\n setSqftSlabToolVisited,\r\n addRoomWithVisitedSlabTool,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SlabToolSwitcher);\r\n","import eventManager from \"../../store/sqftEventManager\";\r\nimport config from \"../../store/sqftConfig\";\r\nimport workspace from \"../workspace\";\r\nimport store from \"../../../../../../store\";\r\nimport $ from \"jquery\";\r\nimport {iconPlusBlack, iconPlusBlue} from \"../../../../assetsSQFT\";\r\nimport {setSQFTMenuOpened} from \"../../../../../../actions/sqftMenuFunctions\";\r\nimport {updateSQFTCalculations} from \"../../../../../../actions/sqftFunctions\";\r\nimport {attachResource} from \"./resourseCanas\";\r\nimport {SIDEBAR_NAVIGATION_BUTTONS} from \"../../../../constants\";\r\n\r\nconst backsplashCanvas = function() {\r\n let self = this;\r\n this.backSplashFeature = {\r\n size: 0,\r\n name: \"\"\r\n };\r\n this.cursorImage = null;\r\n this.addedImages = null; //like in edges\r\n this.img = null;\r\n this.isWaitingToRestoreCursor = false;\r\n\r\n this.setBackSplashFeature = function (backSplashFeature) {\r\n this.backSplashFeature = backSplashFeature;\r\n };\r\n this.setHighlighting = function (disallowDemo) {\r\n eventManager.stealCursor(true); // remove all other cursors\r\n workspace.setAllowEdges(false); // removing sizing lines\r\n workspace.setAllowBumpoutEdges(false); // removing bumpout lines\r\n config.highlight.points = false;\t// remove radiuses\r\n config.highlight.lines = true; // enable lines highlighting\r\n\r\n if (!disallowDemo) {\r\n config.highlight.demoShow = true;\r\n }\r\n setTimeout(function () {\r\n config.highlight.demoShow = false;\r\n }, 1000);\r\n };\r\n\r\n this.setCursorImage = function () {\r\n let bounds = 18,\r\n imgWidth = bounds,\r\n imgHeight = bounds;\r\n\r\n let domImg = document.createElement('img');\r\n domImg.crossOrigin = \"Anonymous\";\r\n\r\n let $img = $(domImg);\r\n $img.css({\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px'\r\n });\r\n\r\n $img.attr({\r\n 'data-id': self.backSplashFeature.size,\r\n 'data-name': self.backSplashFeature.name,\r\n });\r\n\r\n function imgOnLoad() {\r\n var bounds = 18;\r\n let ratio;\r\n if(imgWidth > imgHeight) {\r\n ratio = imgHeight / imgWidth;\r\n imgWidth = bounds;\r\n imgHeight = bounds * ratio;\r\n } else {\r\n ratio = imgWidth / imgHeight;\r\n imgHeight = bounds;\r\n imgWidth = bounds * ratio;\r\n }\r\n eventManager.setCursor('edge-select', self, true);\r\n self.cursorImage = { image: domImg, width: imgWidth, height: imgHeight };\r\n self.registerEvents(); // only after image is load!\r\n }\r\n $img.on('load', imgOnLoad);\r\n $img.appendTo($('body'));\r\n\r\n if (self.backSplashFeature.size === \"wall\") {\r\n config.highlight.type = 'wall';\r\n $img.attr('src', iconPlusBlack);\r\n } else {\r\n config.highlight.type = 'backsplash';\r\n $img.attr('src', iconPlusBlue);\r\n }\r\n\r\n this.img = $img;\r\n config.highlight.id = self.backSplashFeature.size;\r\n };\r\n\r\n this.registerEvents = () => {\r\n eventManager.setCursor('radius-select', self, true);\r\n eventManager.addEvent(\r\n eventManager.events.RENDER,\r\n this.renderCursor,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n eventManager.addEvent(\r\n eventManager.events.MOUSE_UP,\r\n this.onMouseUp,\r\n this,\r\n eventManager.priorities.OVERALL\r\n );\r\n };\r\n this.deregisterEvents = () => {\r\n eventManager.resetCursor(this);\r\n eventManager.removeEvent(this);\r\n config.highlight.lines = false;\r\n //todo sqft-react\r\n //elements.navbacksplash.removeClass('steps-scope-config-button-selected');\r\n }\r\n this.destroy = function(protect, revertBackAfterMouseUp) {\r\n if (revertBackAfterMouseUp) {\r\n eventManager.removeEvent(self, eventManager.events.RENDER); //remove render only, but wait for mouse up to set cursor again\r\n this.isWaitingToRestoreCursor = true;\r\n } else {\r\n this.deregisterEvents();\r\n //$('img[data-id=\"' + this.img.data('id') +'\"]').remove();\r\n //this.addedImages = this.addedImages.filter(image => image.dataset.id === this.img.data('id'));\r\n }\r\n };\r\n this.onMouseUp = function(mousePos) {\r\n void mousePos;\r\n let hoverShape = workspace.getHoverShape();\r\n if (hoverShape && hoverShape.getHoverSegment) {\r\n const reduxState = store.getState();\r\n const activeButton = reduxState.sqftMenuState.activeButton;\r\n if (activeButton !== SIDEBAR_NAVIGATION_BUTTONS.backsplash) {\r\n return\r\n }\r\n\r\n const segCorner = hoverShape.getHoverSegmentOutlineCorner();\r\n const seg = hoverShape.getHoverSegment();\r\n if (seg || segCorner) {\r\n let resourceType = (self.backSplashFeature.size === \"wall\") ? \"wall\" : \"backsplash\";\r\n\r\n //remove incompatible resources\r\n if (seg && seg.isWithMitered()) {\r\n seg.deleteMitered();\r\n } else if (seg && (seg.isWithWaterfallToolEdge() || seg.isWithPeninsulaUnderwrapEdge())) {\r\n seg.deleteAttachedItem();\r\n }\r\n\r\n //add new resource\r\n attachResource(seg, segCorner, resourceType, null, null, this.backSplashFeature.name, this.backSplashFeature.size);\r\n\r\n // let attachedTo = workspace.getImagesAttachedTo(seg);\r\n // if (attachedTo) {\r\n // workspace.removeShape(attachedTo);\r\n // }\r\n //\r\n //\r\n // let historyCallBack;\r\n //\r\n // //add image to line or cornerLine\r\n // if (seg) {\r\n // historyCallBack = seg.addBacksplashToLine.bind(self, this.backSplashFeature.name, type, self.cursorImage.image.dataset.id);\r\n // } else if (segCorner) {\r\n // historyCallBack = segCorner.addBacksplashToCornerLine.bind(self, this.backSplashFeature.name, type, self.cursorImage.image.dataset.id);\r\n // }\r\n //\r\n // workspace.addImage(\r\n // self.cursorImage.image,\r\n // self.cursorImage.width / scale,\r\n // self.cursorImage.height / scale,\r\n // seg || segCorner,\r\n // hoverShape,\r\n // type,\r\n // historyCallBack\r\n // );\r\n //\r\n // historyCallBack();\r\n // config.highlight.lines = true;\r\n } else {\r\n store.dispatch(setSQFTMenuOpened('backsplash'));\r\n // \tderegisterEvents();\r\n // \telements.designDefault.click();\r\n }\r\n\r\n const updateCalculations = reduxState.sqftState.updateCalculations;\r\n store.dispatch(updateSQFTCalculations(updateCalculations + 1));\r\n }\r\n this.checkForRestoreCursor();\r\n };\r\n this.checkForRestoreCursor = function() {\r\n if (self.isWaitingToRestoreCursor) {\r\n self.isWaitingToRestoreCursor = false;\r\n eventManager.removeEvent(self, eventManager.events.MOUSE_UP); //remove mouse up, it will be added in setCursorImage\r\n self.setHighlighting(true);\r\n self.setCursorImage();\r\n }\r\n };\r\n this.renderCursor = function(ctx) {\r\n // if((this.backsplashSize > 0) && ($(window).width() > 768)) {\r\n // var mPos = eventManager.LastKnownMousePos;\r\n // if(mPos) {\r\n // ctx.save();\r\n // ctx.font = \"18px Arial\";\r\n // ctx.fillStyle = \"#000000\";\r\n // ctx.fillText(this.backsplashSize + \"\\\" Backsplash\", mPos.x + (12 * config.scale), mPos.y + 9);\r\n // ctx.restore();\r\n // }\r\n // }\r\n if(self.cursorImage.image && ($(window).width() > 768)) {\r\n var mPos = eventManager.LastKnownMousePos;\r\n if(mPos) {\r\n ctx.drawImage(self.cursorImage.image, mPos.x + 10, mPos.y + 10, self.cursorImage.width, self.cursorImage.height);\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default new backsplashCanvas();\r\n","import LookVirtualizedListLoadingItem\r\n from \"../../../../../../../look/lookNavigation/lookMain/lookCategory/lookVirtualizedListLoadingItem\";\r\nimport {Grid} from \"react-virtualized\";\r\nimport React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nexport const SqftOptionsLoading = (props) => {\r\n const {isMobile, windowHeight} = props;\r\n\r\n const rowHeight = 135;\r\n const width = isMobile ? 221 : 280;\r\n const columnWidth = width;\r\n const columnCount = 1;\r\n const height = isMobile ? windowHeight - 25 : windowHeight - 60;\r\n const rowCount = Math.floor(height / rowHeight);\r\n\r\n const listSettings = {\r\n width,\r\n columnCount,\r\n columnWidth,\r\n rowCount,\r\n height,\r\n rowHeight: rowHeight,\r\n overscanRowCount: 3,\r\n showScrollingPlaceholder: false,\r\n useDynamicRowHeight: false,\r\n }\r\n\r\n const cellRenderer = ({columnIndex, key, rowIndex, style}) => {\r\n void columnIndex;\r\n void rowIndex;\r\n\r\n return \r\n }\r\n\r\n const noRowsRenderer = () =>
    No Features found
    ;\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nSqftOptionsLoading.propTypes = {\r\n // maxClickCountReached: PropTypes.func,\r\n // renderList: PropTypes.array,\r\n // contentHeight: PropTypes.number,\r\n isMobile: PropTypes.bool,\r\n // onScrollHandler: PropTypes.func,\r\n // loadingCount: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {windowHeight, isMobile} = store.serverState;\r\n return {\r\n windowHeight,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SqftOptionsLoading);\r\n","import React, {useState} from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport TextInput from \"../../ui/textInput\";\r\nimport {updateFeatureInfoCount} from \"../../../actions/actionFunctions\";\r\nimport {EditIcon, GroheInkPenIcon} from \"../../common/icons\";\r\nimport COLOR_THEMES from \"../../../colorThemes\";\r\nimport {IS_QKB_UI} from \"../../../config\";\r\n\r\nconst FeaturePriceInput = (props) => {\r\n\r\n const {feature, updateFeatureInfoCount, fabricatorData, unit, activeTheme, price, className, showPrice} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const [priceEditing, setPriceEditing] = useState(false);\r\n\r\n const hidePrice = (typeof showPrice !== 'undefined') && !showPrice;\r\n\r\n const togglePriceEditing = () => setPriceEditing(!priceEditing);\r\n\r\n // if (selectionFeatureInfo && selectionFeatureInfo.dbFeature.id && document.kvConfig.isBackend) {\r\n // return \r\n // }\r\n\r\n const handlePriceOnChange = (newAmount) => {\r\n if (fabricatorSettings.useFabricatorCostPrices) {\r\n feature.dbFeature.price = newAmount;\r\n } else {\r\n feature.dbFeature.cost = newAmount;\r\n feature.dbFeature.fabricatorCost = newAmount;\r\n }\r\n feature.dbFeature.priceWasChanged = true;\r\n updateFeatureInfoCount();\r\n }\r\n\r\n return (\r\n
    \r\n {hidePrice ? null :\r\n {fabricatorSettings.currencySign}}\r\n \r\n {priceEditing || hidePrice\r\n ? null\r\n : IS_QKB_UI ? {price} : price}\r\n {unit && !hidePrice ? ({unit}) : null}\r\n \r\n
    \r\n )\r\n};\r\n\r\nFeaturePriceInput.propTypes = {\r\n feature: PropTypes.object,\r\n onBlur: PropTypes.func,\r\n unit: PropTypes.string,\r\n price: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n className: PropTypes.string,\r\n showPrice: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {activeTheme} = store.serverState;\r\n return {\r\n feature: ownProps.feature || store.selectionState.selectionFeatureInfo,\r\n fabricatorData: store.fabricatorState,\r\n featureInfoCount: store.selectionState.featureInfoCount,\r\n activeTheme,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n updateFeatureInfoCount\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeaturePriceInput)\r\n);\r\n","import React, {} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {miteredSectionInterface} from \"../../../../../../interfaces/sqftInterfaces\";\r\nimport NavMiteredSegment from \"./navMiteredSegment\";\r\n\r\nconst NavMiteredSection = (props) => {\r\n const {sectionName, miteredSection, index} = props;\r\n\r\n let SEGMENTS = miteredSection.getSegments();\r\n\r\n return (\r\n
    \r\n

    \r\n {/*${TranslatesProvider.translate(\"sqft.navigation.mitered.title\")}*/}\r\n {sectionName}\r\n \r\n {('0' + (index + 1)).slice(-2)}\r\n \r\n

    \r\n
    \r\n {\r\n SEGMENTS.map((miteredSegment, index) => {\r\n return \r\n })\r\n }\r\n
    \r\n
    \r\n )\r\n};\r\n\r\nNavMiteredSection.propTypes = {\r\n sectionName: PropTypes.string,\r\n miteredSection: PropTypes.shape(miteredSectionInterface)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n menuOpened: store.sqftMenuState.menuOpened,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NavMiteredSection);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport debounce from \"lodash/debounce\";\r\n\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport TextField from '@mui/material/TextField';\r\n\r\nimport COLOR_THEMES from \"../../../../../colorThemes\";\r\n\r\nimport {setGroheFiltersSearchText} from \"../../../../../actions/groheFunctions\";\r\nimport {searchProductRequest} from \"../../../../../api/search-api\";\r\nimport {getCurrentLayout} from \"../../../../appLayout\";\r\nimport {updateNavigationCount} from \"../../../../../actions/lookFunctions\";\r\nimport {setNavigationLoading} from \"../../../../../actions/navigationFunctions\";\r\n\r\nconst GroheFiltersSearchInput = (props) => {\r\n const {activeTheme, groheFiltersSearchText, setGroheFiltersSearchText, lookActiveCategory, updateNavigationCount,\r\n setNavigationLoading} = props;\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = layout.getFeatureGroupByPartId(lookActiveCategory);\r\n\r\n const debounceRequest = async (searchText) => {\r\n if (featureGroup && !featureGroup.getRealFeaturesReceivedProperty()) {\r\n return await searchProductRequest(featureGroup, searchText, (ended) => {\r\n setNavigationLoading(ended);\r\n if (!ended) {\r\n updateNavigationCount();\r\n }\r\n })\r\n }\r\n }\r\n\r\n const debounceFn = debounce(debounceRequest, 800);\r\n\r\n const handleSearchInputChange = async (event) => {\r\n setGroheFiltersSearchText(event.currentTarget.value);\r\n await debounceFn(event.target.value)\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {groheFiltersSearchText} = store.groheState;\r\n const {activeTheme} = store.serverState;\r\n const {lookActiveCategory} = store.lookState;\r\n\r\n return {\r\n groheFiltersSearchText,\r\n activeTheme,\r\n lookActiveCategory,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheFiltersSearchText,\r\n updateNavigationCount,\r\n setNavigationLoading,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFiltersSearchInput)\r\n);\r\n","import React, {useState, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport Accordion from '@mui/material/Accordion';\r\nimport AccordionDetails from '@mui/material/AccordionDetails';\r\nimport AccordionSummary from '@mui/material/AccordionSummary';\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport {setGroheFiltersOpened, setGroheFiltersSearchText} from \"../../../../actions/groheFunctions\";\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport GroheFiltersValues from \"../../grohe/groheNavigation/groheFilters/groheFiltersValues\";\r\nimport {getCurrentLayout} from \"../../../appLayout\";\r\n// import {AVAILABLE_FILTERS} from \"../../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../config\";\r\n\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n// import {COUNTERTOP_GROUP} from \"../../../kvComponent/core/constants\";\r\nimport {getFeatureGroupFilters} from \"../../../../misc/filtersFunctions\";\r\nimport MaterialSpinner from \"../../../ui/materialSpinner\";\r\nimport {getCurrentGroups, getFeatureGroupFromWizardGroup} from \"../lookMain/lookWizard/lookWizardFunctions\";\r\n\r\n\r\nconst LookFiltersList = (props) => {\r\n const { className, filtersOpened, intl, isMobile, lookActiveFeature, lookActiveCategory, wizardFeatureGroup,\r\n isRelatedItemsFilters } = props;\r\n const [activeFilterId, setActiveFilterId] = useState(null);\r\n\r\n useEffect(() => {\r\n setActiveFilterId(filtersOpened ? \"description\" : isMobile ? activeFilterId : \"\");\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [filtersOpened])\r\n\r\n const handleChange = (filterId, filterName) => (event, isExpanded) => {\r\n const underscoredText = Analytics.getSkuForAnalytics({dbFeature: {sku: filterName}}, false);\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(\r\n isExpanded\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersAccordionOpen + underscoredText\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersAccordionClose + underscoredText\r\n );\r\n } else {\r\n Analytics.sendClickEvent(\r\n isExpanded\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersAccordionOpen + underscoredText\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersAccordionClose + underscoredText\r\n );\r\n }\r\n\r\n setActiveFilterId(isExpanded ? filterId : false);\r\n };\r\n\r\n const layout = getCurrentLayout();\r\n const featureGroup = wizardFeatureGroup\r\n || (lookActiveFeature ? lookActiveFeature.getParent() : layout.getFeatureGroupByPartId(lookActiveCategory));\r\n\r\n const availableFilters = filtersOpened && (featureGroup.allFeaturesReceived || isRelatedItemsFilters)\r\n ? getFeatureGroupFilters(featureGroup)\r\n : [];\r\n\r\n if (!featureGroup) {\r\n return null\r\n }\r\n // .filter(filterGroup => AVAILABLE_FILTERS.includes(filterGroup.name));\r\n\r\n // if (!featureGroup.filtersReceived) {\r\n // return (\r\n //
    \r\n // \r\n //
    \r\n // )\r\n // }\r\n\r\n return (\r\n
    \r\n {availableFilters.map(availableFilter => {\r\n return (\r\n
  • \r\n \r\n }\r\n aria-label={intl.formatMessage({id:\"tooltip.editLook\"})}\r\n aria-controls=\"panel2bh-content\"\r\n id=\"panel2bh-header\"\r\n className=\"lk-info__header\"\r\n >\r\n
    \r\n \r\n {availableFilter.filterGroupName}\r\n {availableFilter.selectedFiltersLength ? ` (${availableFilter.selectedFiltersLength})` : null}\r\n \r\n {featureGroup.filtersReceived || featureGroup.realFeaturesReceived ? null : }\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
  • \r\n )\r\n })}\r\n
    \r\n )\r\n};\r\n\r\nLookFiltersList.propTypes = {\r\n className: PropTypes.string,\r\n isRelatedItemsFilters: PropTypes.bool\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookActiveCategory} = store.lookState;\r\n const {isMobile} = store.serverState;\r\n const {showFilters, selectedFilters, filtersCount} = store.filterState;\r\n const {filtersOpened} = store.groheState;\r\n const {featureGroupCount} = store.lookState;\r\n\r\n let wizardFeatureGroup = null\r\n const {wizardSelectedValues, wizardActiveItem, wizardActiveStep} = store.wizardState;\r\n if (filtersOpened && wizardActiveItem) {\r\n const currentGroups = getCurrentGroups(wizardActiveItem, wizardActiveStep, wizardSelectedValues);\r\n if (currentGroups.length === 1) {\r\n wizardFeatureGroup = getFeatureGroupFromWizardGroup(currentGroups[0])\r\n }\r\n }\r\n\r\n return {\r\n filtersOpened: showFilters || filtersOpened,\r\n filtersCount,\r\n isMobile,\r\n // allFilterGroups: filterGroups,\r\n lookActiveFeature,\r\n selectedFilters,\r\n lookActiveCategory,\r\n featureGroupCount,\r\n wizardFeatureGroup,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setGroheFiltersOpened,\r\n setGroheFiltersSearchText,\r\n setSelectedFilters,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFiltersList)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\n\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport FormGroup from '@mui/material/FormGroup';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\n\r\nimport PropTypes from \"prop-types\";\r\nimport {filterGroupInterface} from \"../../../../../interfaces/filterInterface\";\r\nimport {toggleFilterArrayValue} from \"../../../../visComponents/navigation/newFilters/filtersBody\";\r\nimport {setSelectedFilters} from \"../../../../../actions/actionFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS, PRODUCT_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {featureGroupInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {getFixedFilterValueName, weShouldHideFilterValue} from \"../../../filtersHardcode\";\r\n\r\nconst GroheFiltersValues = (props) => {\r\n const {availableFilter, selectedFilters, setSelectedFilters} = props;\r\n\r\n const setActiveFilterValue = (filterId, filterGroupId, filterValueText, selected) => {\r\n const underscoredText = Analytics.getSkuForAnalytics({dbFeature: {sku: filterValueText}}, false);\r\n\r\n if (IS_PRODUCT_JOURNEY) {\r\n Analytics.sendClickEvent(\r\n selected\r\n ? PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersValuerUnChecked + underscoredText\r\n : PRODUCT_JOURNEY_ANALYTIC_EVENTS.productFeaturesFiltersValueChecked + underscoredText\r\n )\r\n } else {\r\n Analytics.sendClickEvent(\r\n selected\r\n ? LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersValuerUnChecked + underscoredText\r\n : LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersValueChecked + underscoredText\r\n )\r\n }\r\n setSelectedFilters(toggleFilterArrayValue([...selectedFilters], {filterId, filterGroupId}));\r\n };\r\n\r\n return (\r\n
    \r\n \r\n {availableFilter.values.map(filterValue => {\r\n // we did this check already in the getAvailableFiltersForReceivedFilters function\r\n // if (COUNTERTOP_GROUP.includes(featureGroup.partId) && featureGroup && featureGroup.filtersReceived\r\n // && !featureGroup.filtersReceived.includes(filterValue.id)) {\r\n // return null\r\n // }\r\n if (weShouldHideFilterValue(filterValue)) {\r\n return null\r\n }\r\n const selected = selectedFilters.find((filter) => {\r\n return filter.filterGroupId === availableFilter.id && filter.filterId === filterValue.id\r\n })\r\n const checkboxClick = () => {\r\n return setActiveFilterValue(filterValue.id, availableFilter.id, filterValue.displayText, selected)\r\n }\r\n return (\r\n }\r\n />\r\n )}\r\n )}\r\n \r\n
    \r\n )\r\n};\r\n\r\nGroheFiltersValues.propTypes = {\r\n availableFilter: PropTypes.shape(filterGroupInterface),\r\n featureGroup: PropTypes.shape(featureGroupInterface),\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectedFilters} = store.filterState;\r\n return {\r\n selectedFilters\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(GroheFiltersValues)\r\n);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\r\n\r\nimport {setSelectedFilters} from \"../../../../actions/actionFunctions\";\r\nimport {setGroheFiltersSearchText} from \"../../../../actions/groheFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../analytics\";\r\n\r\n\r\nconst LookFiltersReset = (props) => {\r\n const {setSelectedFilters, intl, setGroheFiltersSearchText} = props;\r\n\r\n const resetFilterClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookFeaturesFiltersReset);\r\n setSelectedFilters([]);\r\n setGroheFiltersSearchText(\"\");\r\n };\r\n\r\n //console.log(\"availableFilters\", availableFilters);\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature} = store.lookState;\r\n const {showFilters} = store.filterState;\r\n return {\r\n filtersOpened: showFilters,\r\n lookActiveFeature,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters,\r\n setGroheFiltersSearchText,\r\n};\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookFiltersReset)\r\n);\r\n","import { useState, useEffect } from 'react';\r\n\r\nfunction getWindowDimensions() {\r\n const { innerWidth: windowWidth, innerHeight: windowHeight } = window;\r\n return {\r\n windowWidth,\r\n windowHeight\r\n };\r\n}\r\n\r\nexport default function useWindowDimensions() {\r\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return windowDimensions;\r\n}\r\n","import {useEffect, useState} from \"react\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport {getImagePromiseFromLayout} from \"../../../misc/getCanvasImageFromLayout\";\r\n\r\nconst WithCanvasImage = (props) => {\r\n\r\n const {children, visualizersLoadedLength} = props;\r\n\r\n const [canvasSrc, setCanvasSrc] = useState(\"\");\r\n\r\n const setCanvasImage = () => {\r\n const layout = getCurrentLayout();\r\n getImagePromiseFromLayout(layout)\r\n .then((response) => setCanvasSrc(response));\r\n };\r\n\r\n useEffect(() => {\r\n setCanvasImage()\r\n }, [visualizersLoadedLength])\r\n\r\n return children(canvasSrc)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n visualizersLoadedLength: store.serverState.visualizersLoaded.length,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(WithCanvasImage)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport LookListContentHeader from \"./lookListContentHeader\";\r\nimport LookListMain from \"./lookListMain\";\r\nimport WithCartAnimationsChecker from \"../hocs/withCartAnimationsChecker\";\r\n\r\nconst LookListContent = (props) => {\r\n\r\n const {onBackClick} = props;\r\n\r\n return (\r\n \r\n {() => (\r\n
    \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListContent.propTypes = {\r\n onBackClick: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {\r\n\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LookListContent)\r\n","import React, {Fragment} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {useLocation, withRouter} from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport IconButton from \"@mui/material/IconButton\";\r\n// import PrintIcon from \"@mui/icons-material/Print\";\r\nimport FavoriteBorderIcon from \"@mui/icons-material/FavoriteBorder\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n// import Button from \"@mui/material/Button\";\r\n\r\nimport {setLookOpened, setLookOverlayOpened, setLookPageOpened} from \"../../../actions/lookFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../config\";\r\nimport WithSavePostMessage from \"../hocs/withSavePostMessage\";\r\n// import {featureIsBundle, getBundledFeatures, isInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport {cartItemInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {isIframe} from \"../../../misc/helpers\";\r\n\r\nconst LookListContentHeaderRightSide = (props) => {\r\n\r\n const {intl, isMobile, onBackClick, setLookOverlayOpened, cartItems, userIsLoggedIn, setLookPageOpened, setLookOpened,\r\n history, withoutSave, fabricatorData} = props;\r\n\r\n const location = useLocation();\r\n\r\n // const printButtonClick = () => {\r\n // setLookOverlayOpened(LOOK_OVERLAYS.print)\r\n // }\r\n\r\n const closeCartClick = () => {\r\n setLookPageOpened(\"\");\r\n setLookOpened(null);\r\n history.push(ROUTES.home);\r\n }\r\n\r\n const saveButtonClick = (savePostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListHeaderSave);\r\n if (userIsLoggedIn) {\r\n savePostMessage();\r\n } else {\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n setLookOverlayOpened(isLixil ? LOOK_OVERLAYS.questionLogin : LOOK_OVERLAYS.leadCapture);\r\n }\r\n }\r\n\r\n let itemsToCount = 0;\r\n cartItems.forEach(cartItem => {\r\n if (!cartItem.relatedProductParent && cartItemInStock(cartItem)\r\n // || (featureIsBundle(cartItem.cartFeature, cartItems) && getBundledFeatures(cartItem.cartFeature).some(relFeature => relFeature.dbFeature.lixilAvailableQty > 0))\r\n ) {\r\n itemsToCount = itemsToCount + cartItem.quantity\r\n }\r\n }); // Items in visualizer should equal total quantity of items minus out of stock (Shower bundle will count as 1 not 7)\r\n\r\n return (\r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* {isMobile ? null : (*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* )}*/}\r\n {/*
    */}\r\n {withoutSave || fabricatorData.isGrohe || (!IS_PRODUCT_JOURNEY && isMobile) ? null : (\r\n \r\n {(savePostMessage) => (\r\n
    saveButtonClick(savePostMessage)}>\r\n \r\n \r\n \r\n {isMobile ? null : (\r\n \r\n \r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n )}\r\n {!isMobile || !location || !location.pathname ? null : (\r\n \r\n {!IS_PRODUCT_JOURNEY && !location.pathname.includes(ROUTES.cart) ? (\r\n
    \r\n \r\n \r\n \r\n
    \r\n ) : null}\r\n {/*{IS_PRODUCT_JOURNEY && (location.pathname === ROUTES.cartLogin) ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n {/*{IS_PRODUCT_JOURNEY && (location.pathname === ROUTES.cartRegister) ? (*/}\r\n {/* */}\r\n {/*) : null}*/}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nLookListContentHeaderRightSide.propTypes = {\r\n onBackClick: PropTypes.func,\r\n withoutSave: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isMobile} = store.serverState;\r\n const {cartItems} = store.cartState;\r\n const {userIsLoggedIn} = store.userState;\r\n const fabricatorData = store.fabricatorState;\r\n\r\n return {\r\n isMobile,\r\n cartItems,\r\n userIsLoggedIn,\r\n fabricatorData,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setLookPageOpened,\r\n setLookOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListContentHeaderRightSide)\r\n )\r\n)\r\n","import {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {getCartItemsCount} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {setLookOverlayOpened} from \"../../../actions/lookFunctions\";\r\nimport {setShowUnlockCalculations} from \"../../../actions/unlockCalculationsFunctions\";\r\n\r\nconst WithCartAnimationsChecker = (props) => {\r\n\r\n const {children, fabricatorSettings, isPhoneNumberValidated, setLookOverlayOpened, setShowUnlockCalculations, cartItems,\r\n instList} = props;\r\n const [leadPopupWasOpened, setLeadPopupWasOpened] = useState(false);\r\n\r\n const cartItemsLength = getCartItemsCount(cartItems);\r\n const shouldOpenLeadCapturePopup = fabricatorSettings.leadCaptureShoppingCart && !isPhoneNumberValidated && !!(cartItemsLength || instList.length);\r\n\r\n useEffect(() => {\r\n if (shouldOpenLeadCapturePopup) {\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n setShowUnlockCalculations(true);\r\n setLeadPopupWasOpened(true);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return children(leadPopupWasOpened, shouldOpenLeadCapturePopup)\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {isPhoneNumberValidated} = store.userState;\r\n const {settings} = store.fabricatorState;\r\n const {cartItems} = store.cartState;\r\n const {instList} = store.instState;\r\n\r\n return {\r\n isPhoneNumberValidated,\r\n fabricatorSettings: settings,\r\n cartItems,\r\n instList,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookOverlayOpened,\r\n setShowUnlockCalculations,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(WithCartAnimationsChecker)\r\n)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport SvgIcon from \"@mui/material/SvgIcon\";\r\nimport RequestQuoteOutlinedIcon from '@mui/icons-material/RequestQuoteOutlined';\r\n\r\nimport {LookCartIcon} from \"../../common/icons\";\r\nimport {\r\n getPriceWithCurrency,\r\n getQuotePriceWithTaxes,\r\n getTotalPrice,\r\n isIframe,\r\n toFixedPrice\r\n} from \"../../../misc/helpers\";\r\n// import {showQuoteSavedNotification} from \"../../ui/successNotification\";\r\n// import {saveQuote} from \"../../../api/server-api\";\r\nimport WithAddToCartPostMessage from \"../hocs/withAddToCartPostMessage\";\r\nimport {cartItemInStock} from \"../lookNavigation/lookFunctions2\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../analytics\";\r\nimport WithOpenMiniCartPostMessage from \"../hocs/withOpenMiniCartPostMessage\";\r\nimport {getCartItemsCount} from \"../grohe/groheNavigation/groheFunctions\";\r\nimport {ROUTES} from \"../../../routes\";\r\nimport {pricingIsLocked} from \"../lookNavigation/lookNavigationFunctions\";\r\nimport {setLookOverlayOpened, setLookPageOpened} from \"../../../actions/lookFunctions\";\r\nimport LookFeaturePriceLocked from \"../lookNavigation/lookMain/lookListFeature/lookFeaturePriceLocked\";\r\nimport {LOOK_OVERLAYS} from \"../core/constants\";\r\nimport {getAnalyticsEcommerceValues} from \"../../../analyticsEcommerceParams\";\r\n\r\n\r\nconst LookListFooter = (props) => {\r\n\r\n const {discountSections, fabricatorData, cartItems, isMobile, lookPageOpened, visualizersLoadedLength, history,\r\n setLookPageOpened, isPhoneNumberValidated, showUnlockCalculations, showTotalItems, setLookOverlayOpened,\r\n intl} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const isLixil = isIframe() && fabricatorData.isLixil;\r\n const withoutCheckout = !fabricatorSettings.checkout;\r\n const totalPrice = getTotalPrice();\r\n let grandTotal = getQuotePriceWithTaxes(totalPrice, discountSections);\r\n\r\n const requestQuoteClick = () => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListRequestQuote);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture, \"quotation\");\r\n };\r\n\r\n const viewCartClick = (openMiniCartPostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListOpenMiniCart);\r\n const {currency, value, items} = getAnalyticsEcommerceValues();\r\n Analytics.sendEcommerceEvent(\"view_cart\", {currency, value, items});\r\n openMiniCartPostMessage();\r\n };\r\n\r\n const disabled = cartItems.every(cartItem => !cartItemInStock(cartItem) || cartItem.isRemoved || !cartItem.quantity);\r\n\r\n let itemsToCount = getCartItemsCount(cartItems, intl);\r\n let {pricingLocked, showPrice} = pricingIsLocked();\r\n if (!pricingLocked && fabricatorSettings.enableQuote && !isPhoneNumberValidated) {\r\n pricingLocked = true;\r\n }\r\n const hideTotal = !showPrice || (showUnlockCalculations && !showTotalItems.includes(\"total\"));\r\n const hideCheckout = (showUnlockCalculations && !showTotalItems.includes(\"checkout\"));\r\n\r\n const getListFooterButtonText = () => {\r\n if (fabricatorSettings.enableQuote && !isPhoneNumberValidated) {\r\n return \"leadCapturePopup.getQuote\"\r\n } else if (withoutCheckout) {\r\n return \"leadCapturePopup.saveDesignButton\"\r\n } else if (pricingLocked) {\r\n return \"look.list.footer.addToCartButtonLocked\"\r\n // } else if (fabricatorSettings.checkout && fabricatorSettings.hasPaymentGateway) {\r\n // return \"buttons.checkout\"\r\n } else {\r\n return \"look.list.footer.addToCartButton\" // lixil text\r\n }\r\n }\r\n\r\n const checkoutClick = (addToCartPostMessage) => {\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookListAddToCart);\r\n if (isLixil || !fabricatorSettings.checkout) {\r\n addToCartPostMessage();\r\n } else if (pricingLocked) {\r\n window.clearTimeout(window.leadCaptureTimeoutId);\r\n setLookOverlayOpened(LOOK_OVERLAYS.leadCapture);\r\n } else {\r\n setLookPageOpened(ROUTES.cart);\r\n history.push(ROUTES.cart);\r\n }\r\n // saveQuote({\r\n // submit: true,\r\n // })\r\n // .then((responseData) => {\r\n // document.kvConfig.jobId = responseData.jobId;\r\n // showQuoteSavedNotification(\"successNotification.titleQuoteCreated\");\r\n // setIsLoading(false);\r\n // })\r\n // .catch(() => {\r\n // setIsLoading(false);\r\n // })\r\n };\r\n\r\n return (\r\n
    \r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {isMobile && (lookPageOpened !== ROUTES.list) ? null : (\r\n
    \r\n {isMobile || !isLixil || !fabricatorSettings.checkout ? null : (\r\n \r\n {(openMiniCartPostMessage) => (\r\n \r\n )}\r\n \r\n )}\r\n \r\n {(addToCartPostMessage) => hideCheckout || (fabricatorData.isGrohe && !fabricatorSettings.checkout) ? null : (\r\n \r\n )}\r\n \r\n {fabricatorSettings.callForPricing ? (\r\n \r\n ) : null}\r\n {hideTotal ? null : (\r\n
    \r\n \r\n \r\n \r\n \r\n {pricingLocked ? : getPriceWithCurrency(fabricatorSettings, toFixedPrice(grandTotal), null, true)}\r\n \r\n
    \r\n )}\r\n
    \r\n )}\r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const fabricatorData = store.fabricatorState;\r\n const {discountSections} = store.priceWorksheetState;\r\n const {cartItems, cItemsAddedToParentCart, sureTax} = store.cartState;\r\n const {isMobile, visualizersLoaded} = store.serverState;\r\n const {lookPageOpened} = store.lookState;\r\n const {isPhoneNumberValidated} = store.userState; // to update component when user is logged in\r\n const {showUnlockCalculations, showTotalItems} = store.unlockCalculationsState;\r\n\r\n return {\r\n fabricatorData,\r\n discountSections,\r\n cartItems,\r\n cItemsAddedToParentCart,\r\n isMobile,\r\n lookPageOpened,\r\n visualizersLoadedLength: visualizersLoaded.length,\r\n isPhoneNumberValidated,\r\n sureTax, // to update when response received\r\n showUnlockCalculations,\r\n showTotalItems\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookPageOpened,\r\n setLookOverlayOpened,\r\n};\r\n\r\nexport default injectIntl(\r\n withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListFooter)\r\n )\r\n)\r\n","import store from './../store';\r\nimport {useEffect, useState} from \"react\";\r\n\r\nimport {getCurrentLayout} from \"../bvcomponents/appLayout\";\r\nimport {setAllFeaturesLoaded} from \"./serverFunctions\";\r\nimport JsonApi from \"../api/jsonApi\";\r\nimport {useIsMounted} from \"../misc/helperHooks\";\r\nimport {getBvFeatures} from \"../api/server-api\";\r\n\r\n\r\nexport const downloadAllFeatures = async () => {\r\n const mainResponse = await JsonApi.getBathroomVisualizerData(100000);\r\n if (!mainResponse || !mainResponse.data || !mainResponse.data.features) {\r\n return false\r\n }\r\n const layout = getCurrentLayout();\r\n layout.loadNewFeatures(mainResponse.data);\r\n layout.getFeatures().forEach((parentGroup) => {\r\n parentGroup.relatedItems.forEach((relatedItem) => {\r\n relatedItem.allFeaturesReceived = true;\r\n })\r\n })\r\n store.dispatch(setAllFeaturesLoaded(document.kvConfig.visualizerType))\r\n return true\r\n};\r\n\r\nexport const useFeaturesRoomLayoutsChecker = () => { // not used for now!\r\n\r\n const [featuresLoaded, setFeaturesLoaded] = useState(false);\r\n const isMounted = useIsMounted();\r\n\r\n const checkFeatures = async () => {\r\n const layout = getCurrentLayout();\r\n const featureGroupsObjects = layout.getActiveFeatures(true, false, true)\r\n .filter(fgObject => !fgObject.partId.includes(\"decor_\") && !fgObject.partId.includes(\"attachment\")); // they are already received\r\n // console.log(\"featureGroupsObjects\", featureGroupsObjects);\r\n let needToRequestNames = [];\r\n featureGroupsObjects.forEach((featureGroupObject) => {\r\n if (featureGroupObject.featureGroup\r\n && !featureGroupObject.realFeaturesReceived\r\n && featureGroupObject.cartFeature\r\n && featureGroupObject.cartFeature.dbFeature\r\n && featureGroupObject.cartFeature.dbFeature.sharedFeatureName\r\n && !needToRequestNames.includes(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n && (!featureGroupObject.featureGroup.alreadyRequestedFeatureNames\r\n || !featureGroupObject.featureGroup.alreadyRequestedFeatureNames.includes(featureGroupObject.cartFeature.dbFeature.sharedFeatureName))) {\r\n if (!featureGroupObject.featureGroup.alreadyRequestedFeatureNames) {\r\n featureGroupObject.featureGroup.alreadyRequestedFeatureNames = [];\r\n }\r\n needToRequestNames.push(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n featureGroupObject.featureGroup.alreadyRequestedFeatureNames.push(featureGroupObject.cartFeature.dbFeature.sharedFeatureName)\r\n }\r\n });\r\n console.log(\"needToRequestNames\", needToRequestNames);\r\n if (!needToRequestNames.length) {\r\n setFeaturesLoaded(true)\r\n return\r\n }\r\n const missingSkusResponse = await getBvFeatures(null, needToRequestNames, true);\r\n if (missingSkusResponse && missingSkusResponse.data) {\r\n console.log(\"missingSkusResponse\", missingSkusResponse.data);\r\n layout.loadNewFeatures(missingSkusResponse.data);\r\n }\r\n if (isMounted()) {\r\n setFeaturesLoaded(true)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n checkFeatures()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return featuresLoaded\r\n}\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\n\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {checkIfFeatureDisabled} from \"../../lookFunctions\";\r\n\r\nconst LookListFeatureCheckmark = (props) => {\r\n\r\n const {lookFeature, lookActiveCategory, lookActiveFeature, isEmpty} = props;\r\n\r\n if (!lookActiveCategory || isEmpty || !lookActiveFeature) {\r\n return null\r\n }\r\n\r\n if (lookFeature.getSplittedFeatureName() !== lookActiveFeature.getSplittedFeatureName()) {\r\n return null\r\n }\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent, true);\r\n\r\n if (alreadyDisabled) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nLookListFeatureCheckmark.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface),\r\n isEmpty: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {lookActiveFeature, lookActiveCategory} = store.lookState;\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n return {\r\n lookActiveFeature,\r\n lookActiveCategory,\r\n canvasCount\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LookListFeatureCheckmark)\r\n","import React, {Fragment, useEffect} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\n\r\nimport {\r\n setUnlockCalculationsStep, showUnlockCalculationsCartItems,\r\n showUnlockCalculationsTotalItems\r\n} from \"../../../../../actions/unlockCalculationsFunctions\";\r\nimport {CART_ITEM_ADDED_BY} from \"../../../../shoppingCart/cartItemInterface\";\r\nimport UnlockCalculationStep from \"./unlockCalculationStep\";\r\nimport {IS_PRODUCT_JOURNEY} from \"../../../../../config\";\r\nimport {sortCartItemsForListPage} from \"../../../lookNavigation/lookFunctions2\";\r\nimport {ROUTES} from \"../../../../../routes\";\r\nimport {showWizardInsteadOfQT} from \"../../../lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../../../../interfaces/wizardItemInterface\";\r\nimport {isSameVisualizerWizard} from \"../../../lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nexport const getUnlockCalculationsCartItems = (cartItems, wizardList, wizardIsActive, allWizardsValues, lookPageOpened, quotes) => {\r\n let cartItemsToInclude = [];\r\n if (showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n quotes.forEach((quote, quoteIndex) => {\r\n wizardList.forEach(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n && isSameVisualizerWizard(wizSelObject)\r\n });\r\n if (existingAllObject && existingAllObject.wizardSelectedValues) {\r\n Object.keys(existingAllObject.wizardSelectedValues).forEach(key => {\r\n if (existingAllObject.wizardSelectedValues[key].wizardGroup\r\n && existingAllObject.wizardSelectedValues[key].wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom) {\r\n cartItemsToInclude.push({\r\n id: quoteIndex + existingAllObject.wizardSelectedValues[key].wizardGroup.id\r\n });\r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && +key === cartItem.fromWizardStep\r\n && !cartItemsToInclude.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n cartItemsToInclude = [...cartItemsToInclude, ...currentCartItems];\r\n }\r\n })\r\n }\r\n })\r\n cartItems.forEach(cartItem => {\r\n if (!cartItemsToInclude.some(cItem => cItem.id === cartItem.id)) {\r\n cartItemsToInclude = [...cartItemsToInclude, cartItem];\r\n }\r\n })\r\n })\r\n } else {\r\n cartItemsToInclude = cartItems;\r\n }\r\n if (IS_PRODUCT_JOURNEY) {\r\n cartItemsToInclude = cartItemsToInclude.filter(cItem => cItem.addedBy === CART_ITEM_ADDED_BY.user);\r\n } else if (lookPageOpened === ROUTES.list) {\r\n cartItemsToInclude = sortCartItemsForListPage(cartItemsToInclude)\r\n }\r\n\r\n return cartItemsToInclude\r\n}\r\n\r\nconst UnlockCalculationSteps = (props) => {\r\n\r\n const {setUnlockCalculationsStep, cartItems, showUnlockCalculationsCartItems, showUnlockCalculationsTotalItems,\r\n lookPageOpened, wizardList, wizardIsActive, allWizardsValues, quotes} = props;\r\n\r\n const cartItemsToInclude = getUnlockCalculationsCartItems(cartItems, wizardList, wizardIsActive,\r\n allWizardsValues, lookPageOpened, quotes);\r\n\r\n useEffect(() => {\r\n runAnimations()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n return () => {\r\n showUnlockCalculationsCartItems([]);\r\n showUnlockCalculationsTotalItems([]);\r\n setUnlockCalculationsStep(0);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const animateCartItems = async () => {\r\n let showCartItems = [];\r\n for (const [elementIndex, element] of cartItemsToInclude.entries()) {\r\n // const waitTime = this.props.cartItems.length < 7 ? 500*(index + 1) : 300*(index + 1);\r\n if (elementIndex <= 1) {\r\n await new Promise(resolve => setTimeout(resolve, 750));\r\n showCartItems.push(element.id);\r\n showUnlockCalculationsCartItems([...showCartItems]);\r\n } else {\r\n setTimeout(() => {\r\n showCartItems.push(element.id);\r\n showUnlockCalculationsCartItems([...showCartItems]);\r\n }, 750 * (elementIndex - 1))\r\n }\r\n }\r\n };\r\n\r\n const showTotalItems = async () => {\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n showUnlockCalculationsTotalItems([\"tax\"]);\r\n await new Promise(resolve => setTimeout(resolve, 1000));\r\n showUnlockCalculationsTotalItems([\"tax\", \"total\"]);\r\n await new Promise(resolve => setTimeout(resolve, 1500));\r\n showUnlockCalculationsTotalItems([\"tax\", \"total\", \"checkout\"]);\r\n };\r\n\r\n const runAnimations = async () => {\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n await animateCartItems();\r\n await new Promise(resolve => setTimeout(resolve, 1500));\r\n setUnlockCalculationsStep(1);\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n setUnlockCalculationsStep(2);\r\n await showTotalItems();\r\n await exitAnimations();\r\n };\r\n\r\n const exitAnimations = async () => {\r\n const overlayElement = document.querySelector(\".look-overlay--style\");\r\n if (overlayElement) {\r\n setUnlockCalculationsStep(3);\r\n $(overlayElement).fadeOut(300, () => {\r\n window.clearTimeout(window.leadCaptureTimeoutId);\r\n window.leadCaptureTimeoutId = setTimeout(() => {\r\n setUnlockCalculationsStep(4);\r\n $(overlayElement).fadeIn(300);\r\n }, 4000);\r\n })\r\n } else {\r\n setUnlockCalculationsStep(3);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {[0,1,2].map(stepIndex => )}\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {unlockCalculationsStep, showTotalItems} = store.unlockCalculationsState;\r\n const {cartItems} = store.cartState;\r\n const {lookPageOpened} = store.lookState;\r\n const {wizardList, wizardIsActive, allWizardsValues} = store.wizardState;\r\n const {quotes} = store.quotesState;\r\n\r\n return {\r\n cartItems,\r\n unlockCalculationsStep,\r\n showTotalItems,\r\n lookPageOpened,\r\n wizardList,\r\n wizardIsActive,\r\n allWizardsValues,\r\n quotes,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setUnlockCalculationsStep,\r\n showUnlockCalculationsCartItems,\r\n showUnlockCalculationsTotalItems,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(UnlockCalculationSteps)\r\n","import React from 'react';\r\n\r\nconst LoadingDots = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nLoadingDots.displayName = 'LoadingDots';\r\n\r\nexport default LoadingDots;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {featureInterface} from \"../../../../../interfaces/featureInterface\";\r\nimport {checkIfFeatureDisabled} from \"../../lookFunctions\";\r\nimport Analytics, {LOOK_JOURNEY_ANALYTIC_EVENTS} from \"../../../../../analytics\";\r\nimport {getFeatureSectionIsHidden, getFeatureUrl} from \"../../lookFunctions2\";\r\nimport {setLookActiveFeature} from \"../../../../../actions/lookFunctions\";\r\nimport LookMobileInfoButtonAnimatedIcon from \"../../../animations/lookMobileInfoButtonAnimatedIcon\";\r\nimport {setWizardShowFeatureSection} from \"../../../../../actions/wizardFunctions\";\r\n\r\nconst LookListActiveFeatureMobileButton = (props) => {\r\n\r\n const {lookFeature, setLookActiveFeature, history, isActive, lookLockedTutorial, isWizard,\r\n setWizardShowFeatureSection} = props;\r\n\r\n if (!isActive || lookLockedTutorial.visible) {\r\n return null\r\n }\r\n\r\n if (!isWizard) {\r\n const featureSectionIsHidden = getFeatureSectionIsHidden(lookFeature);\r\n if (featureSectionIsHidden) {\r\n return null\r\n }\r\n\r\n const parent = lookFeature.getParent();\r\n const alreadyDisabled = checkIfFeatureDisabled(lookFeature, parent, true);\r\n\r\n if (alreadyDisabled) {\r\n return null\r\n }\r\n }\r\n\r\n const infoButtonClick = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n Analytics.sendClickEvent(LOOK_JOURNEY_ANALYTIC_EVENTS.lookMobileActiveFeatureButton);\r\n\r\n if (isWizard) {\r\n setWizardShowFeatureSection(true);\r\n return\r\n }\r\n\r\n setLookActiveFeature(lookFeature);\r\n history.push(getFeatureUrl(lookFeature, true));\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n};\r\n\r\nLookListActiveFeatureMobileButton.propTypes = {\r\n lookFeature: PropTypes.shape(featureInterface).isRequired,\r\n isActive: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {canvasCount} = store.bathroomVisualizerState;\r\n const {lookLockedTutorial} = store.lookState;\r\n\r\n return {\r\n canvasCount,\r\n lookLockedTutorial,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setLookActiveFeature,\r\n setWizardShowFeatureSection,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(LookListActiveFeatureMobileButton)\r\n )\r\n)\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { toggleInstOpened } from \"../../actions/actionFunctions\";\r\n\r\nclass InstallButton extends Component {\r\n\r\n static propTypes = {\r\n questionShown: PropTypes.bool\r\n };\r\n\r\n render() {\r\n let fabSettings = this.props.fabricatorSettings;\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n questionNoClicked: store.cartState.questionNoClicked,\r\n instOpened: store.instState.instOpened,\r\n fabricatorSettings: store.fabricatorState.settings,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleInstOpened\r\n})(InstallButton);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport {toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} from \"../../actions/shoppingCartFunctions\";\r\n\r\nconst ShoppingCartListSwitcher = (props) => {\r\n\r\n const {quotes, showAllQuotesCartItemsList, toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} = props;\r\n\r\n if (quotes.length <= 1) {\r\n return null\r\n }\r\n\r\n const handleButtonClick = () => {\r\n toggleShowMobileQuotes(false);\r\n toggleShowAllQuotesCartItemsList(!showAllQuotesCartItemsList);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {showAllQuotesCartItemsList} = store.cartState;\r\n return {\r\n quotes: store.quotesState.quotes,\r\n showAllQuotesCartItemsList,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowAllQuotesCartItemsList,\r\n toggleShowMobileQuotes\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ShoppingCartListSwitcher);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport Analytics from \"../../../analytics\";\r\nimport {changeStateToQuote} from \"../../../actions/actionFunctions\";\r\nimport {toggleShowAdvancedQuoting} from \"../../../actions/advancedQuotingFunctions\";\r\nimport {toggleShowAllQuotesCartItemsList, toggleShowMobileQuotes} from \"../../../actions/shoppingCartFunctions\";\r\n\r\nconst AdvancedQuotingSwitcher = (props) => {\r\n\r\n const {showAdvancedQuoting, changeStateToQuote, toggleShowAdvancedQuoting, toggleShowMobileQuotes} = props;\r\n\r\n if (!document.kvConfig.isBackend) {\r\n return null\r\n }\r\n\r\n const handleButtonClick = () => {\r\n Analytics.sendClickEvent(`advanced-quoting-click-${!showAdvancedQuoting ? \"on\" : \"off\"}`);\r\n changeStateToQuote();\r\n toggleShowMobileQuotes(false);\r\n toggleShowAdvancedQuoting(!showAdvancedQuoting);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n return {\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n changeStateToQuote,\r\n toggleShowAdvancedQuoting,\r\n toggleShowAllQuotesCartItemsList,\r\n toggleShowMobileQuotes\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AdvancedQuotingSwitcher);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n// import {setJobId} from \"../../../actions/actionFunctions\";\r\nimport {setAssignQuoteCloneMode, toggleShowAssignQuotePopup} from \"../../../actions/assignPopupFunctions\";\r\nimport Analytics from \"../../../analytics\";\r\nimport Config from \"../../../config\";\r\n\r\nconst CloneQuoteButton = (props) => {\r\n\r\n // const {setJobId, toggleShowAssignQuotePopup} = props;\r\n const {toggleShowAssignQuotePopup, fabricatorData, setAssignQuoteCloneMode} = props;\r\n\r\n const cloneButtonIsVisible = Config.isDevMode() || (fabricatorData.isCaesarStone && document.kvConfig.showBackToDashboard);\r\n if (!cloneButtonIsVisible) {\r\n return null\r\n }\r\n\r\n const handleCloneQuoteClick = () => {\r\n Analytics.sendClickEvent(\"order-complete-clone-quote\");\r\n // document.kvConfig.jobId = null; // clear current job\r\n // setJobId(0); // clear current job\r\n setAssignQuoteCloneMode(true); // show new assign quote popup\r\n toggleShowAssignQuotePopup(true); // show new assign quote popup\r\n }\r\n\r\n return (\r\n \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n // setJobId,\r\n setAssignQuoteCloneMode,\r\n toggleShowAssignQuotePopup\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CloneQuoteButton)\r\n\r\n","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nimport {baseNewImagesPath} from \"../assets\";\r\nimport MobileMenu from \"../ui/mobileMenu\";\r\nimport ShoppingCartButton from \"../ui/shoppingCartButton\";\r\nimport UserLoginButton from './../ui/userLoginButton';\r\n\r\nclass ProjectScopeMobileHeader extends Component {\r\n\r\n render() {\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n const hardCodedLogo = `${baseNewImagesPath}images/Logos/QuoteCountertops-Logo.svg`;\r\n const logoStyles = this.props.fabricatorData.logoUrl ? {} : {\r\n maxWidth: \"500px\",\r\n width: \"100%\"\r\n };\r\n const initialFlowIsRunning = document.kvConfig.initialFlowEnabled && this.props.initialFlowStep !== 3;\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n {this.props.fabricatorData.received ? (\r\n
    \r\n \"Logo\"/\r\n
    \r\n ) : null}\r\n {fabricatorSettings.showPricing && !initialFlowIsRunning ? (\r\n
    \r\n \r\n
    \r\n ): null}\r\n {(fabricatorSettings.leadCaptureOnQuote && !initialFlowIsRunning &&\r\n !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n ? \r\n : null}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n fabricatorData: store.fabricatorState,\r\n initialFlowStep: store.initialFlowState.initialFlowStep\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ProjectScopeMobileHeader);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport { setCameFromPage, toggleSelectionWindow, toggleBathroomVisualizerOpen, changeActivePartRelatedItemIndex,\r\n setQtActiveCategory } from '../../actions/actionFunctions';\r\nimport { homePage, getFeatureGroupIconURL } from \"../bvComponent/core/assets\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport Analytics from './../../analytics';\r\nimport ProjectScopeFunctions from './projectScopeFunctions';\r\n\r\nclass ProjectScopeSections extends ProjectScopeFunctions {\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.updateSections);\r\n }\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.updateSections);\r\n }\r\n\r\n updateSections = () => {\r\n this.forceUpdate();\r\n };\r\n\r\n goToMaterialsPage = (subPart, parentName) => {\r\n Analytics.sendClickEvent('go-to-materials-' + subPart.partId);\r\n this.goToMaterialsPageCommon(subPart, parentName)\r\n };\r\n\r\n checkForWallsComplexGroup = (qtCategory) => {\r\n return qtCategory.subParts\r\n .map((subPart, subPartIndex) => {\r\n const parent = subPart.part.getParent && subPart.part.getParent(); // floor check\r\n if (parent && parent.partName === \"Walls\" && parent.subParts().every(wallsSubPart => {\r\n return qtCategory.subParts.some(qtCatSubPart => qtCatSubPart.part.partId === wallsSubPart.part.partId)\r\n })) { // here we check - if all walls are included - show just the first one\r\n if (subPartIndex) {\r\n return null\r\n } else {\r\n subPart.part.homePageTitle = \"Walls\";\r\n return subPart\r\n }\r\n }\r\n return subPart\r\n })\r\n .filter(subPart => subPart)\r\n };\r\n\r\n render() {\r\n const sections = this.getSections();\r\n return (\r\n
    \r\n {sections.map((section, index) => {\r\n return section.items && section.items.length ? (\r\n
    \r\n

    \r\n \r\n

    \r\n
      \r\n {section.items.map((subPart, index) => {\r\n // console.log('subPart.partId', subPart.part.partId);\r\n const image = subPart.part.featuredImage || homePage[subPart.part.partId]\r\n || subPart.part.customImageUrl || getFeatureGroupIconURL(subPart.part.partName);\r\n const isCustom = !homePage[subPart.part.partId] && subPart.part.customImageUrl;\r\n const style = {\r\n backgroundImage: image ? `url(${image})` : 'none'\r\n };\r\n if (subPart.part.featuredImage) {\r\n style.backgroundSize = \"contain\";\r\n }\r\n\r\n return (\r\n
    • this.goToMaterialsPage(subPart.part, section.title)}>\r\n
      \r\n {(subPart.part.activeFeature && subPart.part.activeFeature.dbFeature.customGroupName) || subPart.part.homePageTitle || subPart.text}\r\n
      \r\n
    • \r\n )\r\n })}\r\n
    \r\n
    \r\n ) : null\r\n })}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n layoutParts: store.stepsState.layoutParts,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionWindow,\r\n setCameFromPage,\r\n changeActivePartRelatedItemIndex,\r\n setQtActiveCategory\r\n})(ProjectScopeSections);\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {withRouter} from \"react-router-dom\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo,\r\n toggleUserPopup,\r\n changeSelectionInfoQuantity,\r\n unlockPricing,\r\n changeMaterialsInfoFeatureModules,\r\n addToRecentlyViewed,\r\n setQtActiveCategory,\r\n togglePulseFeatureInfoQuantity,\r\n setCameFromPage\r\n} from \"../../../actions/actionFunctions\";\r\nimport Quantity from \"../../ui/quantity\";\r\nimport InstView from \"../../installation/instView\";\r\nimport Analytics from './../../../analytics';\r\nimport {getCurrentLayout} from \"../../appLayout\";\r\nimport FeatureInfoAssociated from \"./featureInfoAssociated\";\r\nimport FeatureInfoDesc from \"./featureInfoDesc\";\r\nimport FeatureInfoPrice from \"./featureInfoPrice\";\r\nimport FeatureInfoImage from \"./featureInfoImage\";\r\nimport FeatureInfoDescription from \"./featureInfoDescription\";\r\nimport FeatureInfoImagesMobile from \"./featureInfoImagesMobile\";\r\nimport {\r\n canShowSqftButtonForFeature,\r\n canShowSqftCabinetButtonForFeature,\r\n getFeatureIsLocked,\r\n getFeatureUnit\r\n} from \"../../../misc/helpers\";\r\nimport AddProductNoteButton from \"../../ui/addProductNoteButton\";\r\nimport AddProductNoteEditor from \"./addProductNoteEditor\";\r\nimport {MEASURE_UNITS, SQFT_GROUP} from \"../../sqft/constants\";\r\nimport {COUNTERTOP_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {toggleNavItemPositionModal} from \"../../../actions/navigationFunctions\";\r\n// import {setCartItemEditFeature} from \"../../../actions/shoppingCartFunctions\";\r\nimport {enableSquareFootage, setSqftFromFeature, setSquareFootageGroup} from \"../../../actions/sqftFunctions\";\r\nimport {isEnglish} from \"../../../translatesProvider\";\r\nimport {showWizardInsteadOfQT} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {getFeatureGroupFeaturesQuantity} from \"../../look/lookNavigation/lookNavigationFunctions\";\r\n\r\nclass FeatureInfo extends Component {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n changeActivePartRelatedItem: PropTypes.func.isRequired,\r\n activePart: PropTypes.object,\r\n };\r\n\r\n componentDidMount() {\r\n const layout = getCurrentLayout();\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n if (this.props.fabricatorData.settings.showRecentlyViewedItems) {\r\n this.props.addToRecentlyViewed(activeFeature);\r\n }\r\n // console.log('selectionFeatureInfo', this.props.selectionFeatureInfo);\r\n const navItemParent = activeFeature.getParent();\r\n const parentSimple = (navItemParent.partName === \"Floor\" && navItemParent.partId !== \"shower_floor\")\r\n || navItemParent.partName === \"Toilet\"\r\n || (navItemParent.partName === \"Ceiling\" &&\r\n (document.kvConfig.visualizerType === \"Bathroom\" || document.kvConfig.visualizerType === \"BV\"))\r\n || navItemParent.partName === \"Window\";\r\n // console.log('parentSimple', parentSimple);\r\n // console.log('navItemParent', navItemParent);\r\n if (parentSimple && !layout.qtCategories) {\r\n this.props.changeActivePartRelatedItem(0)\r\n } else {\r\n const {wizardList, wizardIsActive} = this.props;\r\n let subParts = [];\r\n if (layout.qtCategories && this.props.qtActiveCategory && !showWizardInsteadOfQT(wizardList, wizardIsActive)) {\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === this.props.qtActiveCategory);\r\n subParts = qtActiveCategory ? qtActiveCategory.subParts : this.props.activePart.subParts(false)\r\n } else {\r\n subParts = this.props.activePart.subParts(false);\r\n }\r\n\r\n const nextActivePartRelatedItemIndex = subParts.findIndex((subPart) => {\r\n return subPart.part.partId === navItemParent.partId\r\n });\r\n // console.log('nextActivePartRelatedItemIndex', nextActivePartRelatedItemIndex);\r\n this.props.changeActivePartRelatedItem(nextActivePartRelatedItemIndex)\r\n }\r\n // console.log('cartItem', cartItem);\r\n if (this.props.selectionInfoQuantity <= 1) {\r\n this.props.changeSelectionInfoQuantity(this.getDefaultFeatureQuantity());\r\n }\r\n\r\n if ((document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\")\r\n && activeFeature.partId === \"top_cabinet\" && activeFeature.metaData[\"Module\"]) {\r\n const activeFeatures = this.props.activePart.layout.getActiveFeatures();\r\n const materialsInfoFeatureModules = activeFeatures\r\n .filter(feature => feature.partId.includes(\"top_cabinet_module\"))\r\n .map(feature => {\r\n const existInCart = this.props.cartItems.find(cartItem => cartItem.partId === feature.partId);\r\n return {\r\n ...feature,\r\n quantity: existInCart ? existInCart.quantity : feature.quantity\r\n }\r\n });\r\n // console.log(\"this.props.cartItems\", cartItems);\r\n // console.log(\"this.props.activePart.layout.getActiveFeatures\", activeFeatures);\r\n this.props.changeMaterialsInfoFeatureModules(materialsInfoFeatureModules)\r\n }\r\n\r\n if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.toggleSelectionFeatureInfo(null);\r\n this.props.changeMaterialsInfoFeatureModules([]);\r\n this.props.changeSelectionInfoQuantity(1);\r\n // if (this.props.cartItemEditFeature && !window.location.href.includes(\"sqft\")) {\r\n // this.props.setCartItemEditFeature(null);\r\n // }\r\n }\r\n\r\n getDefaultFeatureQuantity = () => {\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n // const cartItem = this.props.cartItems.find(cartItem => {\r\n // return (cartItem.cartFeature.dbFeature.id === activeFeature.dbFeature.id)\r\n // && (cartItem.currentQuote === this.props.activeQuoteIndex)\r\n // });\r\n // if (cartItem) {\r\n // return cartItem.quantity\r\n // }\r\n if (this.props.cartItemEditFeature) {\r\n return this.props.cartItemEditFeature.quantity\r\n } else if (this.props.advancedQuotingSearchItem) {\r\n return this.props.advancedQuotingSearchItem.quantity\r\n }\r\n\r\n const featureGroup = activeFeature.getParent();\r\n\r\n const sqftQuantity = (activeFeature.sqftQuantity && activeFeature.sqftQuantity[this.props.activeQuoteIndex])\r\n || (featureGroup.sqftQuantity && featureGroup.sqftQuantity[this.props.activeQuoteIndex]);\r\n if (sqftQuantity) {\r\n return sqftQuantity\r\n }\r\n\r\n const defaultOrPositionsQuantity = getFeatureGroupFeaturesQuantity(activeFeature, featureGroup);\r\n\r\n if (defaultOrPositionsQuantity && (defaultOrPositionsQuantity !== 1)) {\r\n return defaultOrPositionsQuantity\r\n }\r\n\r\n const zeroQuantityPartIdsArray = [\"vanity_countertop\", \"vanity_backsplash\", \"countertop\", \"backsplash\", \"center_island_countertop\"];\r\n if (zeroQuantityPartIdsArray.includes(activeFeature.partId)) {\r\n return 0\r\n }\r\n\r\n return 1;\r\n };\r\n\r\n handleChangeItemQuantity = (quantity) => {\r\n if (quantity && this.props.pulseFeatureInfoQuantity) {\r\n this.props.togglePulseFeatureInfoQuantity(false);\r\n }\r\n this.props.changeSelectionInfoQuantity(quantity);\r\n };\r\n\r\n handleSQFTButtonClick = () => {\r\n Analytics.sendClickEvent(\"sqft-opened\");\r\n this.props.setCameFromPage(this.props.selectionFeatureInfo);\r\n this.props.setSqftFromFeature(this.props.cartItemEditFeature || {cartFeature: this.props.selectionFeatureInfo});\r\n //enable sqft trough redux\r\n this.props.enableSquareFootage(true);\r\n\r\n //enable sqft trough url\r\n //hashHistory.push(\"sqft\");\r\n };\r\n\r\n handleSQFTCabnetButtonClick = () => {\r\n Analytics.sendClickEvent(\"sqft-opened\");\r\n this.props.setCameFromPage(this.props.selectionFeatureInfo);\r\n this.props.setSqftFromFeature(this.props.cartItemEditFeature || {cartFeature: this.props.selectionFeatureInfo});\r\n //enable sqft trough redux\r\n this.props.enableSquareFootage(true);\r\n this.props.setSquareFootageGroup(SQFT_GROUP.cabinets);\r\n\r\n //enable sqft trough url\r\n //hashHistory.push(\"sqft?cabinets=1\");\r\n };\r\n\r\n getFeatureModules = () => {\r\n const activeFeatures = this.props.activePart.layout.getActiveFeatures();\r\n return this.props.materialsInfoFeatureModules.map((materialsQuantity, materialsQuantityIndex) => {\r\n const activeFeature = activeFeatures.find(feature => feature.partId === materialsQuantity.partId);\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n {\r\n const materialsInfoFeatureModules = this.props.materialsInfoFeatureModules.map(mQuantity => {\r\n if (mQuantity.partId === materialsQuantity.partId) {\r\n mQuantity.quantity = quantity\r\n }\r\n return mQuantity\r\n });\r\n this.props.changeMaterialsInfoFeatureModules(materialsInfoFeatureModules);\r\n }}\r\n value={materialsQuantity.quantity}/>\r\n

    \r\n
    \r\n )\r\n })\r\n };\r\n\r\n render() {\r\n const activeFeature = this.props.selectionFeatureInfo;\r\n const {productNoteEditorVisible, fabricatorData, intl} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const relatedFeatures = activeFeature.getFeatureRelatedFeatures();\r\n const associatedProduct = Array.isArray(relatedFeatures) && relatedFeatures.length;\r\n\r\n const showPriceLocked = getFeatureIsLocked(activeFeature);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !showPriceLocked && !fabricatorData.hidePricesFromUser;\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n\r\n const showFeatureModules = (document.kvConfig.visualizerType === \"Kitchen\" || document.kvConfig.visualizerType === \"KV\")\r\n && activeFeature.partId === \"top_cabinet\" && activeFeature.metaData[\"Module\"];\r\n\r\n const availableMeasureUnits = [...COUNTERTOP_GROUP, \"edge\", \"edge_profile\", \"center_island_edge\"];\r\n const unit = getFeatureUnit(activeFeature, intl, fabricatorData, this.props.selectionInfoQuantity);\r\n const lowerCasedUnit = unit.toLowerCase();\r\n const allowDecimals = (fabricatorSettings.measureUnit === MEASURE_UNITS.Metric) && (\r\n availableMeasureUnits.includes(activeFeature.partId) || [\"lm\", \"sm\", \"mm\"].some(um => um === lowerCasedUnit)\r\n );\r\n const unitText = activeFeature.getParent ? activeFeature.getParent().unitText : null;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    \r\n \r\n

    \r\n {!isMobile ? : null}\r\n \r\n
    \r\n
    \r\n {showPrice ? : null}\r\n {activeFeature.dbFeature.hideQuantity ? null :\r\n showFeatureModules\r\n ? this.getFeatureModules()\r\n : (\r\n
    \r\n \r\n {(label) => (\r\n \r\n )}\r\n \r\n
    \r\n )\r\n }\r\n
    \r\n {canShowSqftButtonForFeature(activeFeature, fabricatorSettings) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {canShowSqftCabinetButtonForFeature(activeFeature, fabricatorSettings) ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n {isMobile ?
    : null}\r\n
    \r\n {isMobile ? null : }\r\n
    \r\n
    \r\n {isMobile ? : null}\r\n {isMobile ? : null}\r\n {associatedProduct ? : null}\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionInfoQuantity, pulseFeatureInfoQuantity, materialsInfoFeatureModules, selectionGroup,\r\n selectionFeatureInfo, productNoteEditorVisible, featureInfoCount} = store.selectionState;\r\n const {cartItems, cartItemEditFeature} = store.cartState;\r\n const {wizardList, wizardIsActive} = store.wizardState;\r\n return {\r\n selectionFeatureInfo,\r\n selectionGroup,\r\n selectionInfoQuantity,\r\n pulseFeatureInfoQuantity,\r\n materialsInfoFeatureModules,\r\n productNoteEditorVisible,\r\n windowWidth: store.serverState.windowWidth,\r\n cartItems,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n isPriceUnlocked: store.userState.userIsLoggedIn && store.userState.isPhoneNumberValidated,\r\n fabricatorData: store.fabricatorState,\r\n qtActiveCategory: store.qtState.qtActiveCategory,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n advancedQuotingSearchItem: store.advancedQuotingState.advancedQuotingSearchItem,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n cartItemEditFeature,\r\n featureInfoCount,\r\n wizardList,\r\n wizardIsActive,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleUserPopup,\r\n changeSelectionInfoQuantity,\r\n toggleSelectionFeatureInfo,\r\n changeMaterialsInfoFeatureModules,\r\n unlockPricing,\r\n setCameFromPage,\r\n addToRecentlyViewed,\r\n setQtActiveCategory,\r\n togglePulseFeatureInfoQuantity,\r\n toggleNavItemPositionModal,\r\n // setCartItemEditFeature,\r\n setSqftFromFeature,\r\n enableSquareFootage,\r\n setSquareFootageGroup,\r\n};\r\n\r\nexport default withRouter(\r\n injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(FeatureInfo)\r\n )\r\n);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {getFilterGroupValues, s3FilterImagePath} from \"../../../misc/utils\";\r\n\r\nconst FeatureInfoBrand = (props) => {\r\n\r\n const {selectionFeatureInfo, filterGroups, feature} = props;\r\n\r\n const currentFeature = feature || selectionFeatureInfo;\r\n\r\n const brandFilterGroup = filterGroups.find(group => group.name === \"Brand\");\r\n if (!brandFilterGroup) {\r\n return null\r\n }\r\n\r\n const featureBrandValues = getFilterGroupValues(currentFeature, brandFilterGroup);\r\n if (!featureBrandValues) {\r\n return null\r\n }\r\n\r\n const brandFilterValue = brandFilterGroup.values.find(val => val.id === featureBrandValues[0]);\r\n if (!brandFilterValue || !brandFilterValue.icon) {\r\n return null\r\n }\r\n\r\n const styles = {\r\n backgroundImage: `url(${s3FilterImagePath(brandFilterValue.icon)})`\r\n };\r\n\r\n return (\r\n
    \r\n );\r\n};\r\n\r\nFeatureInfoBrand.propTypes = {\r\n feature: PropTypes.object\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n selectionFeatureInfo: store.selectionState.selectionFeatureInfo,\r\n filterGroups: store.filterState.filterGroups,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FeatureInfoBrand);\r\n","import React, {Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\nimport uniq from \"lodash/uniq\";\r\nimport Config from \"../../config\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover, toggleShowRestorePopup, updateCanvasCount\r\n} from \"../../actions/actionFunctions\";\r\n\r\nimport {getEventPosition, getFeatureIsLocked} from \"../../misc/helpers\";\r\n// import {s3FeatureImagePath, THUMBNAIL_SIZES} from \"../../misc/utils\";\r\n\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport NavigationItemsList from \"../visComponents/navigation/navigationItemsList\";\r\nimport CountertopSwitchers from \"../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../kvComponent/navigation/cabinetSwitchers\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\nimport {UserPopupTypes} from \"../visComponents/constants\";\r\nimport {toggleNavItemPositionModal, toggleUpdateDisableFeatureGroupRadio} from \"../../actions/navigationFunctions\";\r\nimport {CABINET_GROUP_BATHROOM, COUNTERTOP_GROUP_BATHROOM} from \"../bvSceneComponent/core/constants\";\r\nimport SelectionMainVirtualizedList from \"./selectionRowList/selectionMainVirtualizedList\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport WizardList from \"./wizardList/wizardList\";\r\nimport SelectionMainVirtualizedGrid from \"./selectionGridList/selectionMainVirtualizedGrid\";\r\nimport SelectionMainVirtualizedGridMobile from \"./selectionGridList/selectionMainVirtualizedGridMobile\";\r\nimport {wizardGroupInterface} from \"../../interfaces/wizardItemInterface\";\r\nimport {checkIfNeedToReceiveFeaturesIfFiltersApplied} from \"../../misc/filtersFunctions\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {clickOnSimilarFeatures, getApplyToLogic} from \"../look/lookNavigation/lookNavigationFunctions\";\r\nimport {navFeatureCLick} from \"../look/lookNavigation/lookFunctions\";\r\nimport {featureCanChangeShowerSize, searchForSameNameWallsBeforeFeatureApply} from \"../look/bathroomFunctions\";\r\n\r\nclass SelectionMainList extends NavigationItemsList {\r\n\r\n static propTypes = {\r\n features: PropTypes.array.isRequired,\r\n handleUserLoginClick: PropTypes.func.isRequired,\r\n setRef: PropTypes.func.isRequired,\r\n currentParent: PropTypes.object,\r\n listItemHeight: PropTypes.number,\r\n showItemsList: PropTypes.bool.isRequired,\r\n layoutName: PropTypes.string,\r\n isWizard: PropTypes.bool,\r\n currentGroups: PropTypes.arrayOf(PropTypes.shape(wizardGroupInterface))\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showPlaceHolders: document.bvConfig ? document.bvConfig.showPlaceholders : false,\r\n reorderedFeatures: [],\r\n showLoader: false,\r\n currentParentText: \"\"\r\n };\r\n window.itemClickCountQuote = window.itemClickCountQuote || 0;\r\n window.itemClickCount = window.itemClickCount || 0;\r\n }\r\n\r\n componentDidMount() {\r\n this.updatePositions(this.props);\r\n $(document).on(ActionTypes.USER_IS_LOGGED_IN, () => { // click on current active item after unlock\r\n if (this.props.currentParent && (this.props.currentParent.activeLockedFeature || this.props.currentParent.activeFeature)) {\r\n this.handleFeatureClick({\r\n part: this.props.currentParent.activeLockedFeature || this.props.currentParent.activeFeature\r\n });\r\n }\r\n this.forceUpdate(() => {\r\n if (!this.props.listItemHeight || this.props.listItemHeight < 10) { // $(\".bv-item-list\").height()\r\n $(window).trigger('resize'); // squeeze features bug\r\n }\r\n });\r\n });\r\n // console.log(\"|this.props.currentParent\", this.props.currentParent);\r\n if (this.props.currentParent && this.props.currentParent.activeFeature) {\r\n this.props.setActiveFeature(this.props.currentParent.activeFeature);\r\n this.deleteNotInVisualizerFeature(this.props);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n $(document).off(ActionTypes.USER_IS_LOGGED_IN);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if ((nextProps.currentParent && this.props.currentParent && (nextProps.currentParent.partName !== this.props.currentParent.partName))\r\n || (nextProps.currentParent && (nextProps.currentParent.partName !== this.state.currentParentText)) || nextProps.features !== this.props.features) {\r\n this.updatePositions(nextProps);\r\n this.deleteNotInVisualizerFeature(nextProps);\r\n }\r\n if (this.needToUpdate && nextProps.features.length !== this.props.features.length) {\r\n this.updatePositions(nextProps);\r\n }\r\n\r\n let wizardSubStepIsActive = false;\r\n if (nextProps.wizardConfig.length) {\r\n const existingWizSetup = nextProps.wizardConfig.find(wizObject => {\r\n return wizObject.featureGroupName === nextProps.currentParent.dbName || wizObject.featureGroupName === nextProps.currentParent.partName\r\n })\r\n if (existingWizSetup && existingWizSetup.filterGroups.length) {\r\n wizardSubStepIsActive = true;\r\n }\r\n }\r\n\r\n if (nextProps.selectedFilters.length && !wizardSubStepIsActive && nextProps.currentParent) {\r\n const checkPassed = checkIfNeedToReceiveFeaturesIfFiltersApplied(nextProps.selectedFilters, nextProps.currentParent);\r\n if (checkPassed) {\r\n this.getFeaturesFromBackendWithFilters(nextProps.currentParent, checkPassed.arrayOfNeededFiltersToReceive, 1);\r\n }\r\n }\r\n }\r\n\r\n deleteNotInVisualizerFeature = (nextProps) => {\r\n if (nextProps.currentParent && nextProps.currentParent.activeNotInVisualizerFeature\r\n && nextProps.currentParent.activeFeature && !nextProps.currentParent.activeFeature.notAvailableInVisualizer) {\r\n nextProps.currentParent.activeNotInVisualizerFeature = null;\r\n }\r\n }\r\n\r\n updatePositions = (nextProps) => {\r\n this.setState({\r\n indexesToReplace: [],\r\n showLoader: true\r\n }, () => {\r\n this.setRelatedStones(nextProps);\r\n });\r\n };\r\n\r\n checkForDisabled = (navItem) => {\r\n if (!navItem || !navItem.part || !navItem.part.getParent) {\r\n return\r\n }\r\n const parent = navItem.part.getParent();\r\n if (parent.disabled) {\r\n const itemParent = navItem.part.getParent();\r\n let exLAndBathtubAndSmallRoom = false;\r\n if (itemParent.partId === \"left_shower_wall\" && itemParent.getParent().layout.type === 0) {\r\n const showerBody = itemParent.getParent().layout.parts.Shower.showerBody;\r\n if (showerBody && showerBody.disabled) {\r\n exLAndBathtubAndSmallRoom = true\r\n }\r\n }\r\n if (itemParent.disabled && !exLAndBathtubAndSmallRoom) {\r\n itemParent.disabled = false;\r\n itemParent.disabledClick(); // disable also related parts\r\n }\r\n }\r\n if (parent.getParent) { // enable shower if child is clicked\r\n const showerParent = parent.getParent();\r\n if (showerParent.partName === \"Shower\" && showerParent.showerBody && showerParent.showerBody.disabled) {\r\n showerParent.showerBody.disabled = false;\r\n showerParent.showerBody.disabledClick(); // enable also related parts\r\n }\r\n }\r\n }\r\n\r\n handleFeatureClick = async (activeFeature, event, wizardClickOnLogic = null) => {\r\n\r\n if (event && event.target.closest(\".feature-buttons\")) {\r\n return false; // do not set activeFeature again ! // prevent redundant feature click\r\n } else if (this.props.activeFeature && this.props.activeFeature.dbFeature.id === activeFeature.part.dbFeature.id\r\n && (this.props.currentParent && this.props.currentParent.firstClick[this.props.activeQuoteIndex])) {\r\n this.showPositionsPopup(activeFeature.part, event);\r\n if (this.props.handleFeatureClick) {\r\n this.props.handleFeatureClick(activeFeature.part)\r\n }\r\n return false; // the same feature clicked // prevent redundant feature click\r\n }\r\n\r\n if (Config.isDevMode()) {\r\n console.log(\"activeFeature\", activeFeature.part);\r\n console.log(\"sharedFeatureName:\", activeFeature.part.dbFeature.sharedFeatureName, \"\\ngetSplittedFeatureName:\", activeFeature.part.getSplittedFeatureName());\r\n }\r\n const fabricatorSettings = this.props.fabricatorData.settings;\r\n if(!this.props.userIsLoggedIn && fabricatorSettings.clickLeadCaptureOnQuote && fabricatorSettings.clickLeadCountOnQuote\r\n && (++window.itemClickCountQuote >= fabricatorSettings.clickLeadCountOnQuote)) {\r\n this.props.handleUserLoginClick(UserPopupTypes.NewDesign);\r\n return;\r\n }\r\n if (this.props.handleFeatureClick && !wizardClickOnLogic) {\r\n this.props.handleFeatureClick(activeFeature.part) // set wizard selected value\r\n }\r\n if (this.props.showRestorePopup) {\r\n this.props.toggleShowRestorePopup(false);\r\n }\r\n // if (this.isWallItem(activeFeature.part) && activeFeature.part.getParent().getParent().allWallsApplied) {\r\n // this.applyAllWalls(activeFeature.part, ignoreLocked);\r\n // }\r\n\r\n if (!wizardClickOnLogic) {\r\n this.props.setActiveFeature(activeFeature.part); // set selected feature\r\n }\r\n\r\n const showPositionPopup = this.showPositionsPopup(activeFeature.part, event);\r\n if (showPositionPopup && !wizardClickOnLogic) {\r\n return // don't click on feature!! we are clicking inside the modal window\r\n }\r\n\r\n const layout = getCurrentLayout();\r\n\r\n if ((layout.isNewLayout || (layout.visualizerType === \"bvScene\")) && featureCanChangeShowerSize(activeFeature.part)) {\r\n await searchForSameNameWallsBeforeFeatureApply(activeFeature.part);\r\n }\r\n\r\n if (layout.isNewLayout) {\r\n\r\n navFeatureCLick(activeFeature.part);\r\n\r\n const applyToLogic = getApplyToLogic(activeFeature.part);\r\n // const parent = zoomFeature.getParent();\r\n // setActiveFeaturesBeforeAllWalls([], parent); // we don't need it here, as we have remembering logic below\r\n if (applyToLogic && Array.isArray(applyToLogic.currentApplyToArray) && applyToLogic.currentApplyToArray.length) {\r\n clickOnSimilarFeatures(activeFeature.part, applyToLogic, true);\r\n }\r\n } else {\r\n\r\n activeFeature.part.handleClick(false, \"\", wizardClickOnLogic ? {skipNotCompatible: true} : null);\r\n\r\n if (CABINET_GROUP.includes(activeFeature.part.partId) || CABINET_GROUP_BATHROOM.includes(activeFeature.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(activeFeature.part);\r\n CabinetSwitchers.applyAllCabinets(activeFeature.part, !featureIsLocked);\r\n } else if (COUNTERTOP_GROUP.includes(activeFeature.part.partId) || COUNTERTOP_GROUP_BATHROOM.includes(activeFeature.part.partId)) {\r\n const featureIsLocked = getFeatureIsLocked(activeFeature.part);\r\n CountertopSwitchers.applyAllCountertops(activeFeature.part, !featureIsLocked);\r\n }\r\n }\r\n\r\n this.checkForDisabled(activeFeature);\r\n // this.props.toggleShowDescriptionCover(false);\r\n // console.log('is visible', $('.feature--selected').is(':visible'));\r\n\r\n if (activeFeature.part.partId === \"room\") {\r\n this.props.checkIfNeedToSwitchRoom(activeFeature.part);\r\n }\r\n\r\n this.props.toggleUpdateDisableFeatureGroupRadio(true);\r\n $(window).trigger(ActionTypes.CHANGE_LAYOUT); // update canvas\r\n this.props.updateCanvasCount();\r\n setTimeout(() => {\r\n this.props.toggleUpdateDisableFeatureGroupRadio(false);\r\n }, 0)\r\n\r\n };\r\n\r\n showPositionsPopup = (clickedFeature, event) => {\r\n if (clickedFeature && !clickedFeature.notAvailableInVisualizer\r\n && this.props.currentParent\r\n && this.props.currentParent.showLayerPositionsModal\r\n && this.props.currentParent.showLayerPositionsModal(clickedFeature)) {\r\n const eventPosition = getEventPosition(event);\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: true,\r\n popupPosition: {\r\n left: eventPosition.x,\r\n top: eventPosition.y\r\n },\r\n activePartId: clickedFeature.partId,\r\n });\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update buttons\r\n return true\r\n } else if (this.props.navItemPositionModal && this.props.navItemPositionModal.popupOpened) {\r\n this.props.toggleNavItemPositionModal({\r\n popupOpened: false,\r\n });\r\n }\r\n return false\r\n }\r\n\r\n // isWallItem = (itemPart) => {\r\n // const wallsPartIds = [\"wall_a\", \"wall_b\", \"wall_c\", \"right_shower_wall\", \"left_shower_wall\",\"pony_wall\"];\r\n // return wallsPartIds.includes(itemPart.partId);\r\n // };\r\n\r\n setRelatedStones(nextProps) {\r\n\r\n const selectedFirstItemIndex = this.getActiveItemIndex(nextProps);\r\n const features = nextProps.features.filter(feature => feature);\r\n let otherSelectedWallsIndexes = this.getSelectedWallIndexes(\r\n {part: nextProps.currentParent}, features, selectedFirstItemIndex\r\n );\r\n let unlockedIndexes = [];\r\n\r\n // console.log(\"otherSelectedWallsIndexes\", otherSelectedWallsIndexes);\r\n\r\n const fabricatorSettings = this.props.fabricatorData.settings; // set unlocked on the first positions\r\n if (nextProps.features.length && (fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote)) && !nextProps.isPhoneNumberValidated) {\r\n nextProps.features.forEach((feature, index) => {\r\n if (feature && feature.part && !getFeatureIsLocked(feature.part, false)) {\r\n unlockedIndexes.push(index);\r\n }\r\n });\r\n }\r\n\r\n const selectedExist = (selectedFirstItemIndex || selectedFirstItemIndex === 0) && selectedFirstItemIndex > -1;\r\n const indexesToReplace = selectedExist\r\n ? uniq([selectedFirstItemIndex, ...unlockedIndexes, ...otherSelectedWallsIndexes])\r\n : [...unlockedIndexes, ...otherSelectedWallsIndexes];\r\n this.setState({\r\n currentParentText: nextProps.currentParent ? nextProps.currentParent.partName : \"\",\r\n reorderedFeatures: this.getReorderedItems(indexesToReplace, nextProps, selectedExist, true),\r\n showLoader: false\r\n }, () => {\r\n if (this.needToUpdate) {\r\n const $gridBody = $(this.itemsList).find(\".ReactVirtualized__Grid\");\r\n if (this.props.windowWidth <= 991) {\r\n $gridBody.scrollLeft(this.needToUpdate);\r\n } else {\r\n $gridBody.scrollTop(this.needToUpdate);\r\n }\r\n this.needToUpdate = false;\r\n }\r\n });\r\n }\r\n\r\n getActiveItemIndex = (props) => {\r\n if (props.currentParent && props.currentParent.partId === \"room\") {\r\n return 0\r\n }\r\n const fabricatorSettings = props.fabricatorData.settings;\r\n const showPlaceHolders = document.bvConfig ? document.bvConfig.showPlaceholders : false;\r\n let isActiveItemIndex = null;\r\n if ((fabricatorSettings.leadCaptureOnQuote && !(document.kvConfig.isBackend && document.kvConfig.jobId && document.kvConfig.canSaveQuote))\r\n && !props.isPhoneNumberValidated && props.currentParent && props.currentParent.activeLockedFeature) {\r\n\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return props.currentParent.activeLockedFeature.dbFeature.id === item.part.id()\r\n });\r\n // console.log('props.currentParent', props.currentParent);\r\n }\r\n else if (props.currentParent && props.currentParent.activeNotInVisualizerFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return item && item.part && (props.currentParent.activeNotInVisualizerFeature.dbFeature.id === item.part.id())\r\n })\r\n } else if (props.currentParent && props.currentParent.activeFeature) {\r\n isActiveItemIndex = props.features.findIndex((item) => {\r\n return item && item.part && (props.currentParent.activeFeatureId(showPlaceHolders) === item.part.id())\r\n })\r\n }\r\n return isActiveItemIndex\r\n };\r\n\r\n checkIfFeatureSelected = (currentFeature, currentParent = this.props.currentParent) => {\r\n if (!currentFeature) {\r\n return false\r\n }\r\n\r\n const currentFeatureId = currentFeature.dbFeature.id;\r\n\r\n if (this.props.isWizard) {\r\n const {wizardSelectedValues, wizardActiveStep} = this.props;\r\n if (!wizardSelectedValues || !wizardSelectedValues[wizardActiveStep] || !wizardSelectedValues[wizardActiveStep].selectedFeature) {\r\n return false\r\n }\r\n if (currentFeature.dbFeature.sharedFeatureName && wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.sharedFeatureName) {\r\n return currentFeature.dbFeature.sharedFeatureName === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.sharedFeatureName\r\n }\r\n return currentFeatureId === wizardSelectedValues[wizardActiveStep].selectedFeature.dbFeature.id\r\n }\r\n\r\n let selected = false;\r\n if (currentFeatureId && currentParent\r\n && ((this.props.activeFeature && !this.props.activeFeature.notAvailableInVisualizer) || currentParent.firstClick[this.props.activeQuoteIndex])) {\r\n selected = currentParent.activeNotInVisualizerFeature\r\n ? currentParent.activeNotInVisualizerFeature.dbFeature.id === currentFeatureId\r\n : this.props.activeFeature && this.props.activeFeature.dbFeature.id === currentFeatureId\r\n }\r\n return selected\r\n };\r\n\r\n handleOnMobileGridScroll = ({clientWidth, scrollLeft, scrollWidth}) => {\r\n if (this.props.showItemsList && !this.state.showLoader) {\r\n const ceilScrollWidth = Math.ceil(scrollWidth);\r\n const floorScrollWidth = Math.floor(scrollWidth);\r\n const ceilScrollLeft = Math.ceil(scrollLeft);\r\n const floorScrollLeft = Math.floor(scrollLeft);\r\n if ((ceilScrollWidth - ceilScrollLeft === clientWidth)\r\n || (ceilScrollWidth - floorScrollLeft === clientWidth)\r\n || (floorScrollWidth - ceilScrollLeft === clientWidth)\r\n || (floorScrollWidth - floorScrollLeft === clientWidth)) {\r\n this.getNewFeaturesOnScroll(scrollLeft, {part: this.props.currentParent})\r\n }\r\n }\r\n };\r\n\r\n // getLoadingElementsForGrid = (isMobile) => {\r\n // const counts = getActivePartsCounts(this.props.currentParent, this.props.layoutName);\r\n // if (!counts) {\r\n // return null\r\n // }\r\n // let elements = [];\r\n // let styles = isMobile ? {} : {\r\n // height: this.props.listItemHeight\r\n // };\r\n // for (let i = 0; i <= counts ;i++ ) { // for ex. 28/3 = 10 columns\r\n // elements.push(\r\n //
    \r\n // \r\n //
    \r\n // );\r\n // }\r\n // return elements\r\n // };\r\n\r\n renderVirtualizedGrid = () => {\r\n const {windowWidth, currentParent, listItemHeight, handleUserLoginClick, isWizard, currentGroups,\r\n showListForce} = this.props;\r\n // console.log(\"renderDesktopVirtualizedGrid currentFeatures\", currentFeatures);\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n const currentFeatures = this.state.reorderedFeatures.filter(currentFeature => currentFeature);\r\n return (windowWidth || window.innerWidth) < 991 ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n\r\n handleOnDesktopGridScroll = ({clientHeight, scrollHeight, scrollTop}) => {\r\n if (this.props.showItemsList && !this.state.showLoader) {\r\n const ceilScrollHeight = Math.ceil(scrollHeight);\r\n const floorScrollHeight = Math.floor(scrollHeight);\r\n const ceilScrollTop = Math.ceil(scrollTop);\r\n const floorScrollTop = Math.floor(scrollTop);\r\n if ((ceilScrollHeight - ceilScrollTop === clientHeight)\r\n || (ceilScrollHeight - floorScrollTop === clientHeight)\r\n || (floorScrollHeight - ceilScrollTop === clientHeight)\r\n || (floorScrollHeight - floorScrollTop === clientHeight)) {\r\n this.getNewFeaturesOnScroll(scrollTop, {part: this.props.currentParent})\r\n }\r\n }\r\n };\r\n\r\n changeSet = (e) => {\r\n this.props.changeSet(e.target.dataset.set);\r\n };\r\n\r\n renderVirtualizedList = () => {\r\n const {currentParent, isWizard, currentGroups, showListForce} = this.props;\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n return \r\n }\r\n\r\n renderList = (isRowView) => {\r\n\r\n const {wizardConfig, currentParent, showListForce} = this.props;\r\n\r\n if (wizardConfig.length) {\r\n const existingWizSetup = wizardConfig.find(wizObject => {\r\n return wizObject.featureGroupName === currentParent.dbName || wizObject.featureGroupName === currentParent.partName\r\n })\r\n if (existingWizSetup && existingWizSetup.filterGroups.length && !existingWizSetup.isFinished && existingWizSetup.enableForQuoting) {\r\n if ((!showListForce && (currentParent && !currentParent.allFeaturesReceived)) || !this.itemsList) {\r\n return \r\n }\r\n return \r\n }\r\n }\r\n\r\n return isRowView\r\n ? this.renderVirtualizedList()\r\n : this.renderVirtualizedGrid()\r\n }\r\n\r\n render() {\r\n const {selectionWindowView} = this.props;\r\n const isRowView = selectionWindowView === 4;\r\n return (\r\n \r\n
    {\r\n this.itemsList = node;\r\n this.props.setRef(node);\r\n }}\r\n className={\"bv-item-list bv-item-list--\" + this.props.selectionWindowView\r\n + (this.props.filtersVisible ? \" bv-item-list--filters-visible\" : \"\")\r\n + (isRowView ? \" bv-item-list--row\" : \" bv-item-list--column\")}>\r\n {this.props.showItemsList && !this.state.showLoader\r\n ? this.renderList(isRowView)\r\n : \r\n }\r\n
    \r\n {this.state.additionalFeaturesLoading ? this.getLoadingFeatures() : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n\r\n const {wizardConfig, wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n\r\n return {\r\n selectionWindowView: store.selectionState.selectionWindowView,\r\n navigationViewType: store.selectionState.selectionWindowView, // needed for NavigationItemsList\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n windowWidth: store.serverState.windowWidth,\r\n activeFeature: store.selectionState.activeFeature,\r\n filtersVisible: store.filterState.showFilters,\r\n fabricatorData: store.fabricatorState,\r\n userPopupOpened: store.userState.userPopupOpened,\r\n filterGroups: store.filterState.filterGroups,\r\n showRestorePopup: store.bathroomVisualizerState.showRestorePopup,\r\n selectedFilters: store.filterState.selectedFilters,\r\n userIsLoggedIn: store.userState.userIsLoggedIn,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n navItemPositionModal: store.navigationState.navItemPositionModal,\r\n wizardConfig,\r\n wizardSelectedValues,\r\n wizardActiveStep,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleSelectionFeatureInfo,\r\n setActiveFeature,\r\n toggleShowDescriptionCover,\r\n toggleShowRestorePopup,\r\n toggleUpdateDisableFeatureGroupRadio,\r\n toggleNavItemPositionModal,\r\n updateCanvasCount,\r\n})(SelectionMainList);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {setCameFromPage, toggleSelectionFeatureInfo} from \"../../../actions/actionFunctions\";\r\nimport FeatureThumbnail from \"../../visComponents/featureThumbnail\";\r\nimport FeatureName from \"../../visComponents/featureName\";\r\nimport FeatureInfoDescription from \"../selectionFeatureInfo/featureInfoDescription\";\r\nimport FeatureInfoPrice from \"../selectionFeatureInfo/featureInfoPrice\";\r\nimport FeatureInfoPriceLocked from \"../selectionFeatureInfo/featureInfoPriceLocked\";\r\nimport {getFeatureIsLocked} from \"../../../misc/helpers\";\r\nimport SelectionMainListRowItemButtons from \"./rowItemButtons\";\r\nimport RowItemRelatedProductsButton from \"./rowItemRelatedProductsButton\";\r\nimport FeatureCartItemsCount from \"../featureCartItemsCount\";\r\nimport {wizardGroupInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {shouldReplaceSelectionInfoFeature} from \"../../qkbPages/materialsCommon/materialsCommonFunctions\";\r\n\r\n\r\nconst RowItem = (props) => {\r\n\r\n const {selected, currentFeature, fabricatorData, handleFeatureClick, toggleSelectionFeatureInfo, setCameFromPage,\r\n isRelated, windowWidth, isWizard, wizardGroup} = props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n const goToFeatureInfo = () => {\r\n if (isRelated) {\r\n return false\r\n }\r\n const selectedFeature = shouldReplaceSelectionInfoFeature(currentFeature);\r\n toggleSelectionFeatureInfo(selectedFeature);\r\n setCameFromPage(\"materials\"); // no more visualizer or shoppingcart switch\r\n };\r\n\r\n const showPriceLocked = getFeatureIsLocked(currentFeature);\r\n const showPrice = fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost\r\n && !showPriceLocked && !fabricatorData.hidePricesFromUser;\r\n\r\n const handleRowItemClick = (event) => {\r\n if (isRelated) {\r\n return false\r\n }\r\n const preventFeatureClickClasses = [\".m-button\", \".m-quantity\", \".m-triangle\"];\r\n if (!isWizard && event && preventFeatureClickClasses.some(className => event.target.closest(className))) {\r\n return false\r\n }\r\n handleFeatureClick({part: currentFeature}, event);\r\n };\r\n\r\n const isMobile = windowWidth < 991;\r\n\r\n const infoButtonVisible = !isWizard || !wizardGroup || !wizardGroup.skipProductInfo;\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {!isRelated && isMobile ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n
    \r\n
    \r\n

    \r\n \r\n
    \r\n
    \r\n {showPrice ? : null}\r\n {showPriceLocked ? : null}\r\n
    \r\n {!isRelated && !isMobile ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n};\r\n\r\nRowItem.propTypes = {\r\n selected: PropTypes.bool,\r\n isRelated: PropTypes.bool,\r\n isWizard: PropTypes.bool,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n currentFeature: PropTypes.object.isRequired,\r\n handleFeatureClick: PropTypes.func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {productNoteEditorVisible} = store.selectionState;\r\n return {\r\n productNoteEditorVisible,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionFeatureInfo,\r\n setCameFromPage\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RowItem);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst FeatureCartItemsCount = (props) => {\r\n\r\n const {currentFeatureId, cartItems, advancedQuotingSearchItem, activeQuoteIndex} = props;\r\n\r\n const getAddedCartItemsCount = () => {\r\n if (advancedQuotingSearchItem && advancedQuotingSearchItem.cartFeature) {\r\n if (advancedQuotingSearchItem.cartFeature.dbFeature.id === currentFeatureId) {\r\n return advancedQuotingSearchItem.quantity\r\n }\r\n return 0\r\n }\r\n let currentFeatureCartItemsCount = 0;\r\n const matchingCartItems = cartItems.filter((cartItem) => {\r\n return (currentFeatureId === cartItem.cartFeature.dbFeature.id) && (cartItem.currentQuote === activeQuoteIndex)\r\n });\r\n if (matchingCartItems.length) {\r\n currentFeatureCartItemsCount = matchingCartItems.reduce((total, cartItem) => {\r\n if (cartItem.partId === 'slabs') { // do not count slabs QCDES-1730\r\n return total + 0\r\n }\r\n return total + cartItem.quantity\r\n }, 0)\r\n }\r\n return +(+(currentFeatureCartItemsCount).toFixed(3)).toFixed(2)\r\n }\r\n\r\n const currentFeatureCartItemsCount = getAddedCartItemsCount();\r\n if (!currentFeatureCartItemsCount) {\r\n return null\r\n }\r\n\r\n return (\r\n {currentFeatureCartItemsCount}\r\n )\r\n};\r\n\r\nFeatureCartItemsCount.propTypes = {\r\n currentFeatureId: PropTypes.number.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {cartItems} = store.cartState;\r\n const {activeQuoteIndex} = store.quotesState;\r\n const {advancedQuotingSearchItem} = store.advancedQuotingState;\r\n return {\r\n cartItems,\r\n activeQuoteIndex,\r\n advancedQuotingSearchItem,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(FeatureCartItemsCount);\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {s3FilterImagePath} from \"../../../misc/utils\";\r\nimport {setSelectedFilters} from \"../../../actions/actionFunctions\";\r\nimport {replaceFilterArrayValue} from \"../../visComponents/navigation/newFilters/filterSwitchers\";\r\n\r\nconst WizardFilterItem = (props) => {\r\n const {currentFilterValue, filterGroup, selectedFilters, setSelectedFilters, listItemHeight, isMobile} = props;\r\n\r\n const getFilterItemThumbnail = () => {\r\n const additionalImages = currentFilterValue.additionalImages;\r\n if (Array.isArray(additionalImages) && additionalImages.length) {\r\n return additionalImages[0].imageUrl\r\n }\r\n return s3FilterImagePath(currentFilterValue.icon);\r\n }\r\n\r\n const wizardFilterValueClick = () => {\r\n if (Array.isArray(currentFilterValue.items) && currentFilterValue.items.length) {\r\n debugger;//eslint-disable-line\r\n this.setParentFilterValues(currentFilterValue.items.map(fValue => fValue.id))\r\n } else {\r\n setSelectedFilters(replaceFilterArrayValue([...selectedFilters], {\r\n filterId: currentFilterValue.id,\r\n filterGroupId: filterGroup.id\r\n }));\r\n }\r\n };\r\n\r\n let thumbnail = getFilterItemThumbnail();\r\n const isColor = (filterGroup.name || \"\").toLowerCase().includes(\"color\");\r\n\r\n const styles = {\r\n backgroundSize: isColor ? \"cover\" : \"inherit\",\r\n };\r\n if (thumbnail) {\r\n styles.backgroundImage = \"url(\" + thumbnail + \")\";\r\n }\r\n if (!thumbnail && currentFilterValue && isColor) {\r\n styles.backgroundColor = currentFilterValue.value;\r\n }\r\n\r\n const selected = selectedFilters.some(filterObject => {\r\n return filterObject.filterGroupId === filterGroup.id && filterObject.filterId === currentFilterValue.id\r\n });\r\n\r\n return (\r\n
    \r\n
    \r\n
    {currentFilterValue.displayText}
    \r\n
    \r\n )\r\n\r\n}\r\n\r\nWizardFilterItem.propTypes = {\r\n filterGroup: PropTypes.object.isRequired,\r\n currentFilterValue: PropTypes.object.isRequired,\r\n listItemHeight: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionWindowView} = store.selectionState;\r\n const {selectedFilters} = store.filterState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n selectionWindowView,\r\n selectedFilters,\r\n isMobile\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSelectedFilters\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WizardFilterItem)\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport {connect} from \"react-redux\";\r\nimport {shiftFilterTitleInterface} from \"../../../interfaces/shiftFilterTitleInterface\";\r\nimport SelectionGridFiltersTitleDropdown from \"./selectionGridFiltersTitleDropdown\";\r\n\r\nconst SelectionGridFiltersTitle = (props) => {\r\n\r\n const {style, filterTitle, allTitles, filtersGrid, isTopTitle, isHorizontal} = props;\r\n\r\n const prevTitle = allTitles.find(renderFeature => {\r\n return renderFeature.titleIndex === filterTitle.titleIndex - 1\r\n });\r\n const nextTitle = allTitles.find(renderFeature => {\r\n return renderFeature.titleIndex === filterTitle.titleIndex + 1\r\n });\r\n\r\n const scrollToTitle = (title) => {\r\n if (isHorizontal) {\r\n const scrollLeft = title.titleIndex === 0 ? 0 : title.scrollLeft + 1\r\n // console.log(\"title to scroll\", title);\r\n filtersGrid.current.scrollToPosition({scrollLeft});\r\n } else {\r\n const scrollTop = title.titleIndex === 0 ? 0 : title.scrollTop + 5\r\n // console.log(\"title to scroll\", title);\r\n filtersGrid.current.scrollToPosition({scrollTop});\r\n }\r\n\r\n\r\n // const nextTitleElement = document.querySelector(`[data-title=\"${nextTitle.titleIndex}\"]`);\r\n // console.log(\"nextTitleElement\", nextTitleElement);\r\n //\r\n // if (nextTitleElement) {\r\n // const computed = window.getComputedStyle(nextTitleElement);\r\n // const top = computed.getPropertyValue('top')\r\n // console.log(\"realTop.top\", top);\r\n // filtersGrid.current.scrollToPosition({scrollTop: top});\r\n // }\r\n // const {scrollTop} = filtersGrid.current.getOffsetForCell({rowIndex, columnIndex})\r\n // filtersGrid.current.scrollToPosition({scrollTop: scrollTop + 1});\r\n // filtersGrid.current.scrollToCell ({columnIndex, rowIndex});\r\n\r\n // animate({\r\n // fromValue: this.scrollTop,\r\n // toValue: offset,\r\n // onUpdate: (scrollTop, callback) => this.setState({scrollTop}, callback),\r\n // onComplete: () => console.log('Scroll animation complete!'),\r\n // });\r\n }\r\n\r\n const arrowUpDisabled = !prevTitle;\r\n const arrowDownDisabled = !nextTitle;\r\n\r\n return (\r\n
    \r\n {isHorizontal ? (\r\n {filterTitle.filterValue.displayText}\r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nSelectionGridFiltersTitle.propTypes = {\r\n style: PropTypes.object,\r\n filterTitle: PropTypes.shape(shiftFilterTitleInterface).isRequired,\r\n allTitles: PropTypes.array.isRequired,\r\n filtersGrid: PropTypes.any,\r\n isTopTitle: PropTypes.bool,\r\n isHorizontal: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionGridFiltersTitle)\r\n","import {useEffect, useState} from \"react\";\r\n\r\nimport {COUNTERTOP_GROUP} from \"../../kvComponent/core/constants\";\r\nimport {getFilterGroupValues} from \"../../../misc/utils\";\r\nimport {getBvGroupFilterValues} from \"../../../api/server-api\";\r\nimport {setActivePartFilterValues} from \"../../../misc/filtersFunctions\";\r\n\r\n/**\r\n *\r\n * @param currentParent {object}\r\n * @param currentFeatures {array}\r\n * @param filterGroups {array}\r\n * @param fabricatorData {object}\r\n * @returns {object}\r\n */\r\nexport const getWithFilters = (currentParent, currentFeatures, filterGroups, fabricatorData) => {\r\n\r\n if (!currentParent) {\r\n return {withFilters: false, filtersLoading: false}\r\n }\r\n\r\n let withFilters = false;\r\n const materialFilterGroup = filterGroups.find(filterGroup => filterGroup.name.trim() === \"Countertop Material\");\r\n\r\n const caesProfiles = fabricatorData.isCaesarStone && (\r\n (fabricatorData.fabricatorName && fabricatorData.fabricatorName.includes(\"QC Master Account US\"))\r\n || (fabricatorData.fabricatorName && fabricatorData.fabricatorName.includes(\"QC Master Account CAN\"))\r\n || (fabricatorData.fabricatorName && fabricatorData.fabricatorName === \"Caesarstone new versions NEW\")\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator.includes(\"QC Master Account US\"))\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator.includes(\"QC Master Account CAN\"))\r\n || (fabricatorData.wasCreatedFromFabricator && fabricatorData.wasCreatedFromFabricator === \"Caesarstone new versions NEW\")\r\n );\r\n\r\n if ((fabricatorData.isLowes || caesProfiles)\r\n && COUNTERTOP_GROUP.includes(currentParent.partId) && materialFilterGroup && materialFilterGroup.values) {\r\n if (!currentParent.filtersReceived) {\r\n return {withFilters, filtersLoading: true}\r\n } else if (materialFilterGroup.values.some(filterValue => currentParent.filtersReceived.includes(filterValue.id))) {\r\n const filterValuesAvailable = materialFilterGroup.values.filter(filterValue => {\r\n return currentParent.filtersReceived.includes(filterValue.id)\r\n })\r\n // console.log(\"filterValuesAvailable\", filterValuesAvailable);\r\n withFilters = filterValuesAvailable.some((filterValue) => {\r\n const countertopsFiltered = currentFeatures.filter(feature => {\r\n if (!feature || !feature.part) { // just in case\r\n return false\r\n }\r\n const countertopFilters = getFilterGroupValues(feature.part, materialFilterGroup);\r\n return countertopFilters && countertopFilters.includes(filterValue.id)\r\n });\r\n return countertopsFiltered.length\r\n })\r\n }\r\n }\r\n return {withFilters, filtersLoading: false}\r\n}\r\n\r\nexport const useGetFiltersRequest = (useRequest, requestFilters, featureGroup, allFilterGroups) => {\r\n\r\n const [filtersLoaded, setFiltersLoaded] = useState(!requestFilters);\r\n\r\n const checkFilters = async () => {\r\n const featureGroupFiltersResponse = await getBvGroupFilterValues(featureGroup.dbName || featureGroup.partName, null, false);\r\n setActivePartFilterValues(featureGroupFiltersResponse.data, featureGroup, allFilterGroups);\r\n setFiltersLoaded(true)\r\n }\r\n\r\n useEffect(() => {\r\n if (useRequest && requestFilters) {\r\n checkFilters();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [requestFilters, featureGroup])\r\n\r\n return filtersLoaded\r\n}\r\n","import React, {PureComponent} from 'react'\r\nimport { connect } from 'react-redux';\r\nimport classnames from 'classnames';\r\n\r\nimport Analytics from './../../analytics';\r\nimport {setGalleryActiveImageIndex, toggleGalleryVisible} from \"../../actions/selectionFunctions\";\r\nimport {featureThumbnailUrl} from \"../../misc/helpers\";\r\nimport {THUMBNAIL_SIZES} from \"../../misc/utils\";\r\n\r\nclass GalleryViewClass extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n images: [],\r\n galleryOpened: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const {activeFeature, galleryImages} = this.props;\r\n this.setState({\r\n images: [{\r\n id: 1,\r\n url: featureThumbnailUrl(activeFeature),\r\n preview: featureThumbnailUrl(activeFeature, THUMBNAIL_SIZES.medium)\r\n }, // main image thumbnail\r\n ...galleryImages\r\n ]\r\n });\r\n setTimeout(() => {\r\n this.setState({\r\n galleryOpened: true\r\n });\r\n }, 0)\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.setGalleryActiveImageIndex(0);\r\n }\r\n\r\n handleCloseClick = () => {\r\n Analytics.sendClickEvent('gallery-close');\r\n this.setState({\r\n galleryOpened: false\r\n }, () => {\r\n setTimeout(() => {\r\n this.props.toggleGalleryVisible(false);\r\n }, 300)\r\n })\r\n };\r\n\r\n thumbnailClick = (activeImage, activeImageIndex) => {\r\n Analytics.sendClickEvent('view-gallery-image-' + activeImage.id)\r\n this.props.setGalleryActiveImageIndex(activeImageIndex)\r\n };\r\n\r\n render() {\r\n const activeImage = this.state.images[this.props.galleryActiveImageIndex];\r\n return (\r\n
    \r\n
    e.stopPropagation()}>\r\n
    \r\n
    \r\n
    \r\n {activeImage\r\n ? {activeImage.name}\r\n window.open(activeImage.url, \"_blank\")}\r\n className=\"gallery-view__main-image\" />\r\n : null}\r\n
    \r\n
    \r\n
      \r\n {this.state.images.map((g, gIndex) => {\r\n return (\r\n
    • this.thumbnailClick(g, gIndex)}/>\r\n )\r\n })}\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n let { galleryActiveImageIndex, selectionFeatureInfo, galleryShowActiveFeature, activeFeature} = store.selectionState;\r\n const showFeature = galleryShowActiveFeature ? galleryShowActiveFeature : selectionFeatureInfo || activeFeature;\r\n return {\r\n galleryImages: showFeature.dbFeature.galleryImages || [],\r\n galleryActiveImageIndex,\r\n activeFeature: showFeature,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {\r\n toggleGalleryVisible,\r\n setGalleryActiveImageIndex\r\n})(GalleryViewClass);\r\n","import React, {useEffect, useState} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {connect} from \"react-redux\";\r\nimport {injectIntl} from 'react-intl';\r\n\r\nimport {toggleShowDescriptionCover} from \"../../actions/actionFunctions\";\r\nimport {wizardGroupInterface} from \"../../interfaces/wizardItemInterface\";\r\nimport {useIsMounted, usePrevious} from \"../../misc/helperHooks\";\r\nimport {getFeatureGroupDescription} from \"../look/grohe/groheNavigation/groheFunctions\";\r\n\r\nlet timeoutId = 0;\r\n\r\nconst SelectionDescriptionCover = (props) => {\r\n\r\n const {activePart, wizardGroup, intl, showDescriptionCover, toggleShowDescriptionCover, windowWidth,\r\n fabricatorData} = props;\r\n\r\n const isMounted = useIsMounted();\r\n const prevWizardGroup = usePrevious(wizardGroup);\r\n const prevActivePart = usePrevious(activePart);\r\n const [coverText, setCoverText] = useState(\"\");\r\n\r\n const getDescriptionText = () => {\r\n if (wizardGroup && wizardGroup.description) {\r\n return wizardGroup.description\r\n }\r\n if (!activePart) {\r\n return \"\"\r\n }\r\n return getFeatureGroupDescription(activePart.part, intl, fabricatorData)\r\n };\r\n\r\n const showCover = () => {\r\n clearTimeout(timeoutId);\r\n toggleShowDescriptionCover(false);\r\n timeoutId = setTimeout(() => {\r\n const descText = getDescriptionText();\r\n if (isMounted() && descText) {\r\n setCoverText(descText);\r\n toggleShowDescriptionCover(true);\r\n }\r\n }, 2000);\r\n }\r\n\r\n useEffect(() => {\r\n if (!prevWizardGroup && wizardGroup || (prevWizardGroup && wizardGroup && (prevWizardGroup.id !== wizardGroup.id))) {\r\n showCover();\r\n } else if (!prevActivePart && activePart || (prevActivePart && activePart && (prevActivePart.part.partName !== activePart.part.partName))) {\r\n showCover();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activePart, wizardGroup]);\r\n\r\n let styles = {};\r\n if (coverText && (coverText.length > 250) && (windowWidth < 991)) {\r\n styles = windowWidth < 640\r\n ? {fontSize: \"10px\"}\r\n : windowWidth < 800 ? {fontSize: \"13px\"} : {}\r\n }\r\n\r\n return (\r\n
    \r\n {coverText}\r\n
    \r\n )\r\n}\r\n\r\nSelectionDescriptionCover.propTypes = {\r\n activePart: PropTypes.object,\r\n wizardGroup: PropTypes.shape(wizardGroupInterface),\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n return {\r\n showDescriptionCover: store.selectionState.showDescriptionCover,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleShowDescriptionCover\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(SelectionDescriptionCover)\r\n)\r\n","import React, {useEffect, useRef} from \"react\";\r\nimport { Player } from 'video-react';\r\nimport { connect } from \"react-redux\";\r\nimport $ from 'jquery';\r\n\r\nimport {toggleNotCompatibleView} from \"../../actions/selectionFunctions\";\r\nimport {toggleShowDescriptionCover} from \"../../actions/actionFunctions\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\n\r\nconst NotCompatibleView = (props) => {\r\n\r\n const {activePartRelatedItemIndex, windowWidth, activeFeature} = props;\r\n const player = useRef(null);\r\n\r\n useEffect(() => {\r\n const isMobile = windowWidth < 991;\r\n if (!isMobile) {\r\n player.current.play();\r\n }\r\n props.toggleShowDescriptionCover(false);\r\n return () => {\r\n props.toggleNotCompatibleView(false); // on unmount component\r\n }\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n useEffect(() => {\r\n // skip initial render\r\n return () => {\r\n props.toggleNotCompatibleView(false); // on unmount component\r\n }\r\n }, [activePartRelatedItemIndex]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const updateDesignButtonClick = () => {\r\n const navFeature = activeFeature.getParent()\r\n .navigationSubItems()\r\n .find(navItem => navItem.part.dbFeature.id === activeFeature.dbFeature.id) // find the real feature\r\n if (navFeature) { // just in case\r\n navFeature.part.applyFeatureIfNotCompatible(); // first set new rules for this feature\r\n navFeature.part.handleClick(); // change item\r\n $(window).trigger(ActionTypes.UPDATE_ALL_ITEMS); // update footer items\r\n }\r\n props.toggleNotCompatibleView(false); // then remove the view\r\n }\r\n\r\n const videoPath = \"https://intro-videos.s3.amazonaws.com/not-compatible-icon_v1.webm\";\r\n const isMobile = windowWidth < 991;\r\n\r\n return (\r\n
    \r\n {isMobile ? null : (\r\n
    \r\n \r\n
    \r\n )}\r\n Not Compatible\r\n

    Item is not compatible with current design. Would you like to update your design?

    \r\n

    \r\n \r\n

    \r\n
    \r\n )\r\n};\r\n\r\nconst mapStateToProps = (store) => {\r\n const {activeFeature, activePartRelatedItemIndex} = store.selectionState;\r\n return {\r\n activeFeature,\r\n activePartRelatedItemIndex,\r\n windowWidth: store.serverState.windowWidth,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleNotCompatibleView,\r\n toggleShowDescriptionCover\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NotCompatibleView);\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from \"react-redux\";\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {\r\n setSelectionWindowView,\r\n} from \"../../actions/actionFunctions\";\r\nimport SelectionViewSwitchers from './selectionViewSwitchers';\r\n\r\nimport Analytics from './../../analytics';\r\n\r\nimport BacksplashSelect from './backsplashSelect';\r\nimport FiltersButton from './filtersButton';\r\nimport CountertopSwitchers from \"../kvComponent/navigation/countertopSwitchers\";\r\nimport CabinetSwitchers from \"../kvComponent/navigation/cabinetSwitchers\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport ShareButton from \"../common/shareButton\";\r\nimport BodyPanelRadio from \"../visComponents/navigation/desktop/bodyPanelRadio\";\r\nimport {CABINET_GROUP, COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\nimport LanguageSwitcher from \"../common/languageSwitcher\";\r\nimport ShoppingCartButton from \"../ui/shoppingCartButton\";\r\nimport {COUNTERTOP_GROUP_BATHROOM} from \"../bvSceneComponent/core/constants\";\r\nimport LookAllWallsRadioButton from \"../look/lookNavigation/lookMain/lookAllWallsRadioButton\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {getCommonVisualizerType} from \"../../config\";\r\n\r\n\r\nclass SelectionMainHeader extends Component {\r\n\r\n static propTypes = {\r\n activeSubPart: PropTypes.object,\r\n searchText: PropTypes.string.isRequired,\r\n handleSearchInputChange: PropTypes.func.isRequired,\r\n };\r\n\r\n handleChangeListView = (e) => {\r\n Analytics.sendClickEvent(\"change-list-view-\" + e.target.dataset.view);\r\n this.props.handleChangeListView(+e.target.dataset.view);\r\n };\r\n\r\n backsplashSelectClick = () => {\r\n $(window).trigger('resize');\r\n $(window).trigger(ActionTypes.UPDATE_QUOTING_TOOL);\r\n };\r\n\r\n render() {\r\n const {activeSubPart, fabricatorData, isMobile} = this.props;\r\n const layout = getCurrentLayout();\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n let subPartPartId = '';\r\n if (activeSubPart) {\r\n subPartPartId = activeSubPart.part.partId;\r\n }\r\n\r\n const isCabinet = CABINET_GROUP.includes(subPartPartId);\r\n\r\n const isCountertop = COUNTERTOP_GROUP.includes(subPartPartId) || COUNTERTOP_GROUP_BATHROOM.includes(subPartPartId);\r\n\r\n const showBacksplashSelect = subPartPartId === \"backsplash\" && (getCommonVisualizerType() === \"kitchen\");\r\n\r\n const showDisabledRadioButtons = activeSubPart && activeSubPart.part.canBeDisabled;\r\n\r\n return (\r\n
    \r\n {!fabricatorData.isCaesarStone && (showBacksplashSelect || isCabinet || isCountertop || showDisabledRadioButtons) ? (\r\n
    \r\n {showDisabledRadioButtons && activeSubPart ? : null}\r\n {showBacksplashSelect ? : null}\r\n {(isCabinet || isCountertop) && activeSubPart ? (\r\n
    \r\n {isCabinet\r\n ? layout.isNewLayout\r\n ? \r\n : \r\n : null}\r\n {isCountertop\r\n ? layout.isNewLayout\r\n ? \r\n : \r\n : null}\r\n
    \r\n ) : null}\r\n
    \r\n ) : null}\r\n
    \r\n {subPartPartId === \"backsplash\" && isMobile\r\n ? null\r\n : }\r\n
    \r\n \r\n {(placeholder) => (\r\n \r\n )}\r\n \r\n {this.props.searchText ? (\r\n
    \r\n
    \r\n {isMobile && fabricatorSettings.enableSharing ? : null}\r\n {isMobile ? : null}\r\n {fabricatorData.isCaesarStone ? null : }\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionWindowView, selectionFeatureInfo, activeFeature} = store.selectionState;\r\n const {isMobile} = store.serverState;\r\n return {\r\n selectionWindowView,\r\n selectionFeatureInfo,\r\n isMobile,\r\n fabricatorData: store.fabricatorState,\r\n activeFeature, // to update active feature\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n handleChangeListView: setSelectionWindowView,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SelectionMainHeader);\r\n","import React, {Component} from 'react';\r\nimport $ from 'jquery';\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {getCurrentLayout} from '../appLayout';\r\nimport SelectionFooterSubPart from \"./selectionFooterSubPart\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport BodySwipable from \"../visComponents/navigation/desktop/bodySwipable\";\r\n\r\nexport default class SelectionFooterSubParts extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n relatedItems: [],\r\n shadowLeft: -100,\r\n shadowRight: 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setRelatedItems(this.props);\r\n // this.footerList.addEventListener(\"scroll\", this.handleFooterListScroll);\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.updateItems);\r\n setTimeout(() => {\r\n this.scrollToActiveSubPart(this.props.activePartRelatedItemIndex, 0);\r\n }, 0)\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.updateItems);\r\n // this.footerList.removeEventListener(\"scroll\", this.handleFooterListScroll);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.props.visualizerIsChanging && !nextProps.visualizerIsChanging) {\r\n this.setRelatedItems(nextProps);\r\n }\r\n }\r\n\r\n scrollToActiveSubPart = (activePartRelatedItemIndex, animationTime = 500) => {\r\n if (this.footerList) {\r\n const maxScroll = this.footerList.scrollWidth - this.footerList.clientWidth;\r\n const scrollIndex = this.props.windowWidth < 991 ? 50 : 40;\r\n const neededScroll = scrollIndex*activePartRelatedItemIndex;\r\n const scrollLeft = (maxScroll > 0) && (neededScroll > maxScroll) ? maxScroll : neededScroll;\r\n $(this.footerList).animate({scrollLeft}, animationTime);\r\n }\r\n };\r\n\r\n handleFooterListScroll = (e) => {\r\n // console.log('e', e.target.scrollLeft);\r\n this.setState({\r\n shadowLeft: e.target.scrollLeft > 100 ? 0 : -100 + e.target.scrollLeft,\r\n shadowRight: e.target.scrollLeft > 100 ? -100 : 0 - e.target.scrollLeft\r\n });\r\n };\r\n\r\n updateItems = () => {\r\n this.setRelatedItems(this.props)\r\n };\r\n\r\n setRelatedItems = (nextProps = this.props) => {\r\n // console.log('nextProps.activePart', nextProps.activePart);\r\n // console.log('activePart.subParts(false)', activePart.subParts(false));\r\n const layout = getCurrentLayout();\r\n // console.log(\"setRelatedItems layout\", layout);\r\n if (layout.qtCategories && nextProps.qtActiveCategory) {\r\n const qtActiveCategory = layout.qtCategories.find(qtCategory => qtCategory.name === nextProps.qtActiveCategory)\r\n || layout.qtCategories[0]; // cases when visualizerType is changed\r\n this.setState({\r\n relatedItems: qtActiveCategory.subParts\r\n });\r\n } else {\r\n this.setState({\r\n relatedItems: nextProps.activePart.subParts(false)\r\n });\r\n }\r\n };\r\n\r\n getSubPartsList = (withShoppingCart = false) => {\r\n const {activePartRelatedItemIndex, showAdvancedQuoting, visualizersLoaded, networkConnection} = this.props;\r\n return (\r\n \r\n {/*
    */}\r\n
    this.footerList = el}>\r\n {this.state.relatedItems.map((item, index) => {\r\n if (!visualizersLoaded.includes(document.kvConfig.visualizerType)) {\r\n return null\r\n }\r\n if (showAdvancedQuoting && (index !== activePartRelatedItemIndex) && window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n if (item.part && item.part.partId === \"slabs\") {\r\n return null\r\n }\r\n return \r\n })}\r\n {withShoppingCart ? (\r\n \r\n ) : null}\r\n
    \r\n {/*
    */}\r\n \r\n )\r\n }\r\n}\r\n","import React from \"react\";\r\nimport {connect} from \"react-redux\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {FormattedMessage} from \"react-intl\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport {\r\n toggleSelectionFeatureInfo, toggleSelectionWindow, toggleBathroomVisualizerOpen\r\n} from \"../../../actions/actionFunctions\";\r\nimport {useChangeWizardStepRoute} from \"../materialsWizard/useChangeWizardStepRoute\";\r\n\r\nconst MaterialsFooterBackButton = (props) => {\r\n\r\n const {cameFromPage, selectionFeatureInfo, showAdvancedQuoting, toggleSelectionWindow, toggleBathroomVisualizerOpen,\r\n selectionGroup, toggleSelectionFeatureInfo, history, wizardActiveStep, checkForSubStepChange, subStepChange,\r\n isWizard} = props;\r\n\r\n const {changeWizardStepRoute} = useChangeWizardStepRoute();\r\n\r\n const handleBackButtonClick = () => {\r\n if (cameFromPage === \"visualizer\") {\r\n toggleSelectionWindow(false, selectionGroup);\r\n toggleBathroomVisualizerOpen(true);\r\n history.push('/visualizer');\r\n return;\r\n } else if (selectionFeatureInfo) {\r\n toggleSelectionFeatureInfo(null);\r\n if (cameFromPage === \"shoppingcart\") {\r\n history.push(\"/shoppingcart\");\r\n }\r\n return;\r\n } else if (showAdvancedQuoting) {\r\n history.push(\"/shoppingcart\");\r\n return;\r\n } else if (checkForSubStepChange && subStepChange && !checkForSubStepChange(\"back\")) {\r\n subStepChange();\r\n return;\r\n }\r\n if (isWizard) {\r\n changeWizardStepRoute(wizardActiveStep - 1);\r\n }\r\n }\r\n\r\n return (\r\n \r\n )\r\n\r\n};\r\n\r\nMaterialsFooterBackButton.propTypes = {\r\n isWizard: PropTypes.bool,\r\n checkForSubStepChange: PropTypes.func,\r\n subStepChange: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {selectionGroup, selectionFeatureInfo} = store.selectionState;\r\n const {cameFromPage} = store.cartState;\r\n const {wizardActiveStep} = store.wizardState;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n\r\n return {\r\n selectionGroup,\r\n selectionFeatureInfo,\r\n cameFromPage,\r\n wizardActiveStep,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n toggleSelectionWindow,\r\n toggleBathroomVisualizerOpen,\r\n toggleSelectionFeatureInfo,\r\n};\r\n\r\nexport default withRouter(\r\n connect(mapStateToProps, mapDispatchToProps)(MaterialsFooterBackButton)\r\n)\r\n","import React from 'react';\r\nimport $ from \"jquery\";\r\nimport {connect} from \"react-redux\";\r\nimport {FormattedMessage} from \"react-intl\";\r\n\r\nimport {setMaterialsAgentTutorialFinished, showMaterialsAgentTutorial} from \"../../actions/tutorialFunctions\";\r\nimport Tutorial from \"./tutorial\";\r\n\r\n\r\nclass MaterialsAgentTutorial extends Tutorial {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n ringStyles: {\r\n left: 0,\r\n top: 0,\r\n }\r\n };\r\n this.resizeId = 0;\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.props.materialsAgentTutorialFinished) {\r\n return null\r\n }\r\n const scriptAdded = document.getElementById(\"pingpilot\");\r\n if (!scriptAdded) {\r\n return null\r\n }\r\n const pingButton = document.querySelector(\".pingpilot-button\");\r\n if (!pingButton) {\r\n return null\r\n }\r\n window.materialsAgentTutorialTimeoutId = setTimeout(() => {\r\n this.props.showMaterialsAgentTutorial(true);\r\n this.setButtonsPositions();\r\n $(\".tutorial-overlay--materials\").fadeIn(300);\r\n $(\".tutorial-step__ring, .tutorial-step\").fadeIn(300, () => {\r\n this.setButtonsPositions();\r\n });\r\n window.addEventListener(\"resize\", this.handleResize);\r\n }, 30000);\r\n };\r\n\r\n handleResize = () => {\r\n clearTimeout(this.resizeId);\r\n this.resizeId = setTimeout(this.setButtonsPositions, 500);\r\n };\r\n\r\n setButtonsPositions = () => {\r\n this.changeHighlightRingPosition(\".omnibrowse-code-button\");\r\n };\r\n\r\n componentWillUnmount() {\r\n window.clearTimeout(window.materialsAgentTutorialTimeoutId);\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n }\r\n\r\n handleNextStepClick = () => {\r\n this.exitTutorial(true);\r\n };\r\n\r\n exitTutorial = (forever) => {\r\n $(\".tutorial-overlay--materials\").fadeOut(300, () => {\r\n this.props.showMaterialsAgentTutorial(false);\r\n if (forever) {\r\n this.props.setMaterialsAgentTutorialFinished(true);\r\n try {\r\n window.localStorage.setItem(\"materials_tutorial_finished\", true);\r\n } catch (ex) { console.log(\"localStorage exception\", ex); }\r\n }\r\n });\r\n };\r\n\r\n pingButtonClick = () => {\r\n this.exitTutorial(true);\r\n const pingButton = document.querySelector(\".pingpilot-button\");\r\n if (!pingButton) {\r\n return null\r\n }\r\n pingButton.click();\r\n }\r\n\r\n render() {\r\n\r\n const {materialsAgentTutorialIsOpened, materialsAgentTutorialFinished, isMobile} = this.props;\r\n\r\n if (!materialsAgentTutorialIsOpened || materialsAgentTutorialFinished) {\r\n return null\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n \r\n

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {materialsAgentTutorialIsOpened, materialsAgentTutorialFinished} = store.tutorialState;\r\n const {isMobile} = store.serverState;\r\n\r\n return {\r\n materialsAgentTutorialIsOpened,\r\n materialsAgentTutorialFinished,\r\n isMobile,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n showMaterialsAgentTutorial,\r\n setMaterialsAgentTutorialFinished,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MaterialsAgentTutorial);\r\n","import React, {useRef} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport BodySwipable from \"../../visComponents/navigation/desktop/bodySwipable\";\r\nimport MaterialsWizardFooterStep from \"./materialsWizardFooterStep\";\r\nimport {\r\n getWizardStepIsDisabled\r\n} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {wizardItemInterface} from \"../../../interfaces/wizardItemInterface\";\r\nimport {getNextWizardSteps} from \"../../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\n// const stepWidth = 92;\r\nconst MaterialsWizardFooterSteps = (props) => {\r\n\r\n const {wizardItem, wizardSelectedValues, wizardActiveStep, isShoppingCart, showAdvancedQuoting} = props;\r\n\r\n const scrollElementRef = useRef();\r\n\r\n // const stepWidth = isMobile ? 92 : 92;\r\n\r\n const wizardSteps = getNextWizardSteps(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n // console.log(\"wizardSteps\", wizardSteps);\r\n\r\n // const styles = {\r\n // width: (wizardSteps.length + (isShoppingCart ? 1 : 0)) * stepWidth\r\n // }\r\n\r\n // const currentGroups = getCurrentGroups(wizardItem, wizardActiveStep, wizardSelectedValues);\r\n // const isCompletedStep = wizardActiveStep > -1 && !currentGroups.length;\r\n // const menuWidth = windowWidth * 35 / 100; // 35% of screen\r\n // const useContainerOverFlow = styles.width >menuWidth;\r\n\r\n const content = (\r\n
    \r\n {wizardSteps.map((step) => {\r\n const stepDisabled = getWizardStepIsDisabled(step.stepIndex, wizardSelectedValues, wizardSteps);\r\n if (showAdvancedQuoting && (step.stepIndex !== wizardActiveStep) && window.location.href.includes(\"materials\")) {\r\n return null\r\n }\r\n return \r\n })}\r\n
    \r\n )\r\n\r\n // return useContainerOverFlow ? (\r\n // \r\n // {/*
    */}\r\n // {content}\r\n // \r\n // ) :
    {content}
    \r\n\r\n return (\r\n \r\n {content}\r\n \r\n )\r\n\r\n};\r\n\r\nMaterialsWizardFooterSteps.propTypes = {\r\n isShoppingCart: PropTypes.bool,\r\n wizardItem: PropTypes.shape(wizardItemInterface).isRequired,\r\n wizardValues: PropTypes.object,\r\n wizardStep: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (store, ownProps) => {\r\n const {wizardSelectedValues, wizardActiveStep} = store.wizardState;\r\n const {windowWidth, isMobile} = store.serverState;\r\n const {wizardValues} = ownProps;\r\n const {showAdvancedQuoting} = store.advancedQuotingState;\r\n\r\n return {\r\n wizardSelectedValues: wizardValues || wizardSelectedValues,\r\n wizardActiveStep,\r\n // wizardActiveStep: Number.isInteger(wizardStep) ? wizardStep : wizardActiveStep,\r\n windowWidth,\r\n isMobile,\r\n showAdvancedQuoting,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MaterialsWizardFooterSteps)\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport $ from \"jquery\";\r\n\r\nimport {togglePulseFeatureInfoQuantity} from \"../../../actions/actionFunctions\";\r\nimport {toggleProductNoteEditorVisible} from \"../../../actions/selectionFunctions\";\r\nimport {getCartItemObject} from \"../../../misc/helpers\";\r\n\r\n\r\nexport default (WrappedComponent) => {\r\n\r\n const WithMaterialsWizardFooterCommon = (props) => {\r\n\r\n const {selectionInfoQuantity, selectionFeatureInfo, togglePulseFeatureInfoQuantity, toggleProductNoteEditorVisible,\r\n relatedGroups, qtActiveCategory, selectionGroup} = props;\r\n\r\n const quantityIsZero = () => {\r\n if (!selectionInfoQuantity && selectionFeatureInfo && !selectionFeatureInfo.dbFeature.hideQuantity) {\r\n togglePulseFeatureInfoQuantity(true);\r\n toggleProductNoteEditorVisible(false); // exit add note mode\r\n const $scrollableInfoArea = $(\".selection-main__info-scrollable\");\r\n if ($scrollableInfoArea) {\r\n $scrollableInfoArea.animate({scrollTop: 0}, 500);\r\n }\r\n return true;\r\n }\r\n return false\r\n }\r\n\r\n const getCartFeatureParentName = (activeFeature) => {\r\n let parentName = selectionGroup;\r\n if (activeFeature.getParent) {\r\n const subPart = activeFeature.getParent();\r\n parentName = subPart.getParent ? subPart.getParent().partName : subPart.partName\r\n }\r\n return parentName\r\n }\r\n\r\n const getCurrentRelatedCartItems = (activeFeature, arrayToAddtoTheCart = []) => {\r\n if (Array.isArray(relatedGroups) && relatedGroups.length) {\r\n relatedGroups.forEach(relatedGroup => {\r\n relatedGroup.relatedFeatures.forEach(relatedFeature => {\r\n if (relatedFeature.cartQuantity) {\r\n const relatedItemCartObject = getCartItemObject(relatedFeature, relatedFeature.cartQuantity, qtActiveCategory);\r\n relatedItemCartObject.relatedProductParent = activeFeature;\r\n arrayToAddtoTheCart.push(relatedItemCartObject)\r\n }\r\n });\r\n });\r\n }\r\n return arrayToAddtoTheCart\r\n }\r\n\r\n return \r\n\r\n };\r\n\r\n const mapStateToProps = (store) => {\r\n const {selectionFeatureInfo, selectionInfoQuantity, relatedGroups, selectionGroup} = store.selectionState;\r\n const {qtActiveCategory} = store.qtState;\r\n\r\n return {\r\n selectionFeatureInfo,\r\n selectionInfoQuantity,\r\n relatedGroups,\r\n qtActiveCategory,\r\n selectionGroup,\r\n };\r\n };\r\n\r\n const mapDispatchToProps = {\r\n togglePulseFeatureInfoQuantity,\r\n toggleProductNoteEditorVisible,\r\n };\r\n\r\n return connect(mapStateToProps, mapDispatchToProps)(WithMaterialsWizardFooterCommon)\r\n}\r\n","import React, {Fragment} from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport {hashHistory} from \"react-router\";\r\nimport size from 'lodash/size';\r\nimport flatMap from 'lodash/flatMap';\r\nimport filter from 'lodash/filter';\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\n\r\nimport {\r\n removeFromCart,\r\n toggleSelectionWindow,\r\n changeStateToQuote,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n getCurrencySign,\r\n getFeatureGroupName, getPriceWithCurrency,\r\n getRoomName,\r\n getTotalPrice,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport Analytics from './../../analytics';\r\nimport CommonFeatureItemsMethods from \"../visComponents/commonFeatureItemsMethods\";\r\nimport ChangeRoomButton from \"./changeRoomButton\";\r\nimport ShoppingCartItemsListItem from \"./shoppingCartItemsListItem\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {changeQTRoutePath, changeRoutePath} from \"../../misc/changeRoutePath\";\r\nimport ShoppingCartDiscountsList from \"./shoppingCartDiscountsList\";\r\nimport ShoppingCartItemsListInstallationItem from \"./shoppingCartItemsListInstallationItem\";\r\nimport AdvancedQuotingList from \"./advancedQuoting/advancedQuotingList\";\r\nimport {setActiveQuoteIndex} from \"../../actions/roomsFunctions\";\r\nimport SimilarProducts from \"./similarProducts/similarProducts\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\nimport {showWizardInsteadOfQT} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\nimport {WIZARD_GROUP_TYPES} from \"../../interfaces/wizardItemInterface\";\r\nimport ShoppingCartItemsListWizardCustomItem from \"./shoppingCartItemsListWizardCustomItem\";\r\nimport {setNewActiveQuote} from \"../../misc/quotesFunctions\";\r\nimport LoadingSpinner from \"../ui/loadingSpinner\";\r\nimport {getDifferentCurrencyCartItems} from \"../../misc/misc2\";\r\nimport {switchToNewVisualizerType} from \"../../misc/visualizerSwitchingFunctions\";\r\nimport goToMaterialPage from \"../common/goToMaterialPage\";\r\nimport {getWizardGroupName} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions2\";\r\n\r\nclass ShoppingCartItemsList extends CommonFeatureItemsMethods {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {}\r\n }\r\n\r\n componentDidMount() {\r\n this.props.changeStateToQuote();\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return !nextProps.showAssignQuotePopup;\r\n }\r\n\r\n switchToMaterialsPageGroup = async (listItem, quoteIndex, cartItem = null) => {\r\n const {selectionGroup, featureGroupName, featureGroup} = listItem;\r\n Analytics.sendClickEvent(cartItem ? \"shopping-cart-edit-feature\" : \"shopping-cart-items-go-to-materials\");\r\n const {activeQuoteIndex, setActiveQuoteIndex} = this.props;\r\n if (cartItem && (cartItem.fromVisualizerType !== document.kvConfig.visualizerType)) {\r\n await switchToNewVisualizerType(cartItem.fromVisualizerType);\r\n // this.props.setActionAfterVisualizerTypeIsChanged();\r\n }\r\n if (quoteIndex !== activeQuoteIndex) {\r\n await setNewActiveQuote(quoteIndex);\r\n await setActiveQuoteIndex(quoteIndex);\r\n }\r\n if (featureGroup) {\r\n // const switchToProduct = cartItem.relatedProductParent || cartItem.cartFeature;\r\n let wizardAllObject = null;\r\n let stepIndex = 0;\r\n if (cartItem && cartItem.fromWizardId) {\r\n wizardAllObject = {wizardItemId: cartItem.fromWizardId, quoteIndex};\r\n stepIndex = cartItem.fromWizardStep;\r\n }\r\n goToMaterialPage(\"shoppingcart\", false, {part: featureGroup}, \"\", wizardAllObject, stepIndex);\r\n return\r\n }\r\n const layout = getCurrentLayout();\r\n if (layout.qtCategories) {\r\n let subPartIndex = 0;\r\n const neededQtCat = layout.qtCategories.find(qtCat => {\r\n const sIndex = qtCat.defaultSubParts.findIndex(sPart => {\r\n return (sPart.part.customGroupDisplayName || sPart.text) === featureGroupName\r\n })\r\n if (sIndex > -1) {\r\n subPartIndex = sIndex\r\n return true\r\n }\r\n return false\r\n }) || layout.qtCategories[0];\r\n this.props.setQtActiveCategory(neededQtCat.name);\r\n this.props.changeActivePartRelatedItemIndex(subPartIndex);\r\n changeQTRoutePath(neededQtCat.name, subPartIndex);\r\n } else {\r\n this.props.toggleSelectionWindow(true, selectionGroup);\r\n const parentGroup = layout.parts[selectionGroup];\r\n if (parentGroup) {\r\n const subPartIndex = parentGroup.subParts().findIndex(sPart => {\r\n return (sPart.part.customGroupDisplayName || sPart.text) === featureGroupName\r\n })\r\n changeRoutePath(parentGroup, subPartIndex > -1 ? subPartIndex : 0)\r\n } else {\r\n hashHistory.push('materials');\r\n }\r\n }\r\n };\r\n\r\n createCommonParentsList = () => {\r\n const {quotes, cartItems, activeQuoteIndex, showAllQuotesCartItemsList, intl, fabricatorData, wizardList,\r\n wizardIsActive, allWizardsValues} = this.props;\r\n const isWizard = showWizardInsteadOfQT(wizardList, wizardIsActive);\r\n let quotesList = {}; // {quoteIndex: ArrayOf({parentName: \"\", cartItem})}\r\n quotes.forEach((quote, quoteIndex) => {\r\n\r\n const layout = getCurrentLayout(fabricatorData.settings.allowVisualizerSwitching && quote.room ? quote.room : document.kvConfig.visualizerType);\r\n\r\n const cartList = []; //ArrayOf({parentName: \"\", cartItem})\r\n const quoteCartItems = cartItems.filter((cartItem) => cartItem.cartFeature && (cartItem.currentQuote === quoteIndex));\r\n if (showAllQuotesCartItemsList || quoteIndex === activeQuoteIndex) {\r\n let uniqueCartItemIds = [];\r\n\r\n const addToCartList = (cartItem, wizardGroup, wizardItemId) => {\r\n //todo get slab parentGroup and remove displayFakeFeatureGroupName\r\n const parentGroup = cartItem.cartFeature.getParent\r\n ? cartItem.cartFeature.getParent()\r\n : layout.getFeatureGroupByPartId(cartItem.cartFeature.partId);\r\n let featureGroupName;\r\n let featureGroupDisplayName;\r\n\r\n if (cartItem.displayFakeFeatureGroupName) {\r\n featureGroupName = cartItem.displayFakeFeatureGroupName;\r\n featureGroupDisplayName = intl.formatMessage({id: \"sqftFeaturesPopup.title.\" + cartItem.displayFakeFeatureGroupName});\r\n } else {\r\n featureGroupName = parentGroup ? parentGroup.customGroupDisplayName || parentGroup.partName : cartItem.selectionGroup;\r\n if (wizardGroup) {\r\n featureGroupDisplayName = getWizardGroupName(wizardGroup);\r\n }\r\n if (!featureGroupDisplayName || !wizardGroup) {\r\n featureGroupDisplayName = parentGroup ? getFeatureGroupName(parentGroup, intl, fabricatorData) : cartItem.selectionGroup;\r\n }\r\n }\r\n\r\n const parent = cartList.find(listItem => {\r\n if (isWizard && cartItem.fromWizardGroupId) {\r\n return listItem.wizardGroupId === cartItem.fromWizardGroupId && (listItem.wizardItemId === cartItem.fromWizardId)\r\n }\r\n return listItem.featureGroupName === featureGroupName\r\n });\r\n if (parent) {\r\n parent.cartItems.push(cartItem);\r\n } else {\r\n cartList.push({\r\n featureGroupName,\r\n featureGroupDisplayName,\r\n selectionGroup: cartItem.selectionGroup,\r\n cartItems: [cartItem],\r\n featureGroup: parentGroup,\r\n wizardGroupId: wizardGroup ? wizardGroup.id : null,\r\n wizardItemId,\r\n });\r\n }\r\n };\r\n\r\n if (isWizard) {\r\n wizardList.forEach(wizardItem => {\r\n const existingAllObject = allWizardsValues.find(wizSelObject => {\r\n return wizSelObject.wizardItemId === wizardItem.id && wizSelObject.quoteIndex === quoteIndex\r\n });\r\n if (existingAllObject && existingAllObject.wizardSelectedValues) {\r\n Object.keys(existingAllObject.wizardSelectedValues).forEach(key => {\r\n const wizardGroup = existingAllObject.wizardSelectedValues[key].wizardGroup\r\n if (wizardGroup && wizardGroup.nodeType === WIZARD_GROUP_TYPES.custom && !wizardGroup.hideInCartAndReceipt) {\r\n cartList.push({\r\n type: WIZARD_GROUP_TYPES.custom,\r\n wizardSelectedValue: existingAllObject.wizardSelectedValues[key],\r\n wizardAllObject: existingAllObject,\r\n stepIndex: key,\r\n wizardGroup,\r\n });\r\n return\r\n }\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (wizardGroup && cartItem.fromWizardGroupId\r\n ? (wizardGroup.id === cartItem.fromWizardGroupId)\r\n : +key === cartItem.fromWizardStep)\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n currentCartItems.forEach((cartItem) => addToCartList(cartItem, wizardGroup, wizardItem.id))\r\n // } else if (wizardGroup && !wizardGroup.hideInCartAndReceipt) {\r\n // cartList.push({\r\n // type: WIZARD_GROUP_TYPES.custom,\r\n // wizardSelectedValue: existingAllObject.wizardSelectedValues[key],\r\n // wizardAllObject: existingAllObject,\r\n // stepIndex: key,\r\n // wizardGroup,\r\n // });\r\n }\r\n })\r\n }\r\n });\r\n quoteCartItems.forEach((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n addToCartList(cartItem)\r\n }\r\n });\r\n } else if (layout.qtCategories) {\r\n layout.qtCategories.forEach(qtCategory => {\r\n qtCategory.subParts.forEach((subPart) => {\r\n let currentCartItems = cartItems.filter(cartItem => {\r\n if (cartItem.bundleParentId) {\r\n return false\r\n }\r\n return cartItem.cartFeature && (cartItem.currentQuote === quoteIndex)\r\n && (subPart.part.partId === cartItem.partId || (cartItem.relatedProductParent && subPart.part.partId === cartItem.relatedProductParent.partId))\r\n && !uniqueCartItemIds.includes(cartItem.id)\r\n });\r\n if (currentCartItems.length) {\r\n uniqueCartItemIds = [...uniqueCartItemIds, ...currentCartItems.map(cItem => cItem.id)];\r\n currentCartItems.forEach((cartItem) => addToCartList(cartItem))\r\n }\r\n })\r\n });\r\n quoteCartItems.forEach((cartItem) => {\r\n if (!uniqueCartItemIds.includes(cartItem.id) && !cartItem.bundleParentId) {\r\n uniqueCartItemIds.push(cartItem.id);\r\n addToCartList(cartItem)\r\n }\r\n })\r\n } else {\r\n quoteCartItems.forEach((cartItem) => addToCartList(cartItem))\r\n }\r\n cartList.push({\r\n type: \"similar\",\r\n quoteIndex\r\n });\r\n if (showAllQuotesCartItemsList) {\r\n cartList.push({\r\n type: \"subTotal\",\r\n quoteIndex\r\n });\r\n }\r\n }\r\n quotesList[quoteIndex] = cartList\r\n });\r\n // console.log(\"quotesList\", quotesList);\r\n return quotesList\r\n };\r\n\r\n getCartItemsList = (isMobile, fabricatorData, fabricatorSettings) => {\r\n const {cartItems, showAllQuotesCartItemsList, isPhoneNumberValidated, quotes, intl} = this.props;\r\n if (!cartItems.length) {\r\n // if (!cartItems.length || (Object.keys(quotesList).every(quoteIndex => !quotesList[quoteIndex].length))) {\r\n return (\r\n

    \r\n \r\n

    \r\n )\r\n }\r\n const quotesList = this.createCommonParentsList();\r\n const quotesListArray = Object.keys(quotesList);\r\n\r\n const {isBackend, jobId, canSaveQuote} = document.kvConfig;\r\n const pricingIsLocked = (fabricatorSettings.leadCaptureOnQuote || fabricatorSettings.leadCaptureShoppingCart)\r\n && !(isBackend && jobId && canSaveQuote) && !isPhoneNumberValidated;\r\n\r\n return quotesListArray.map(quoteIndex => {\r\n return (\r\n
    1) ? \" scart-room--bordered\" : \"\")} key={quoteIndex}>\r\n {showAllQuotesCartItemsList && (quotesListArray.length > 1) ? (\r\n

    \r\n : {getRoomName(quoteIndex, cartItems, quotes, intl.messages, intl.locale, fabricatorData)}\r\n

    \r\n ) : null}\r\n {quotesList[quoteIndex].map((listItem, index) => {\r\n if (this.props.showUnlockCalculations && listItem.cartItems && !listItem.cartItems.some(cartItem => {\r\n return this.props.showCartItems.includes(cartItem.id)\r\n })) {\r\n return false\r\n }\r\n if (listItem.type === \"subTotal\") {\r\n const quoteTotalPrice = getTotalPrice(listItem.quoteIndex, false);\r\n if (fabricatorData.isAmericanImport || (this.props.showUnlockCalculations && (this.props.unlockCalculationsStep < 2))) {\r\n return null\r\n }\r\n const quoteCartItems = fabricatorSettings.useDifferentCurrencies ? cartItems.filter(cartItem => cartItem.currentQuote === listItem.quoteIndex) : [];\r\n const differentCurrencyObjects = getDifferentCurrencyCartItems(fabricatorSettings, quoteCartItems);\r\n\r\n return (\r\n
    \r\n {differentCurrencyObjects.length ? differentCurrencyObjects.map(currObject => {\r\n const currentTotal = getTotalPrice(listItem.quoteIndex, false, currObject.cartItems);\r\n return (\r\n
    listItem.type === \"subTotal\") ? \" scart-block__subtotal--only\" : \"\"\r\n )}>\r\n : \r\n {pricingIsLocked ? (\r\n \r\n \r\n \r\n ) : getCurrencySign(currObject.currency, fabricatorSettings) + toFixedPrice(currentTotal.materialPrice, true)}\r\n
    \r\n )\r\n }) : null}\r\n
    listItem.type === \"subTotal\") ? \" scart-block__subtotal--only\" : \"\"\r\n )}>\r\n : \r\n {pricingIsLocked ? (\r\n \r\n \r\n \r\n ) : getPriceWithCurrency(fabricatorSettings, toFixedPrice(quoteTotalPrice.materialPrice))}\r\n
    \r\n
    \r\n )\r\n } else if (listItem.type === \"similar\") {\r\n return \r\n } else if (listItem.type === WIZARD_GROUP_TYPES.custom) {\r\n return \r\n }\r\n const isAddMoreDisabled = listItem.featureGroupName === SQFT_FEATURES.slabs;\r\n\r\n const editFeatureGroupClick = (event, editCartItem = null) => {\r\n if (!editCartItem && listItem.cartItems.length && listItem.cartItems[0].fromWizardId) {\r\n editCartItem = listItem.cartItems[0];\r\n }\r\n this.switchToMaterialsPageGroup(listItem, +quoteIndex, editCartItem)\r\n }\r\n // console.log(\"listItem\", listItem);\r\n return (\r\n
    \r\n

    {listItem.featureGroupDisplayName}

    \r\n {\r\n isAddMoreDisabled\r\n ? null\r\n : \r\n }\r\n
      \r\n {listItem.cartItems.map((cartItem, index2) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n )\r\n })\r\n };\r\n\r\n getInstallations = (isMobile, fabricatorData, fabricatorSettings, installations) => {\r\n\r\n const showInstallations = size(installations) && fabricatorSettings.separateLaborInCart\r\n && (!this.props.showUnlockCalculations || (this.props.unlockCalculationsStep >= 2));\r\n\r\n if (showInstallations) {\r\n return (\r\n
    \r\n

    \r\n \r\n

    \r\n
      \r\n {installations.map((instItem, instItemIndex) => {\r\n return \r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n return null\r\n };\r\n\r\n getTaxes = (isMobile, totalPrice, fabricatorSettings, sureTaxLoading) => {\r\n if (isMobile && this.props.cartItems.length && this.props.isPhoneNumberValidated) {\r\n\r\n if (sureTaxLoading) {\r\n return (\r\n
    \r\n

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n let allTaxes = totalPrice.priceTaxes.length\r\n ? totalPrice.priceTaxes\r\n : [{name: \"\", materialTax: totalPrice.materialTaxes}];\r\n\r\n const showTaxes = allTaxes.some(tax => tax.materialTax > 0);\r\n\r\n return (\r\n \r\n {showTaxes || ((allTaxes.length === 1) && fabricatorSettings.sureTax) ? allTaxes.map((taxObject, taxObjectIndex) => {\r\n const taxTotal = taxObject.materialTax.toFixed(2); // always round to 23.65, even if it is 23.00\r\n return (\r\n
    \r\n

    {taxObject.state || }

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n {getPriceWithCurrency(fabricatorSettings, taxTotal)}\r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n )\r\n }) : null}\r\n {totalPrice.installationTaxes ? (\r\n
    \r\n

    \r\n
      \r\n
    • \r\n
      \r\n
      \r\n \r\n {getPriceWithCurrency(fabricatorSettings, totalPrice.installationTaxes.toFixed(2))}\r\n \r\n
      \r\n
      \r\n
    • \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n )\r\n }\r\n return null\r\n };\r\n\r\n render() {\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n const totalPrice = getTotalPrice();\r\n const {fabricatorData, installations, showAdvancedQuoting, sureTaxLoading, cartItems} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n // console.log(\"this.props.cartItems\", this.props.cartItems);\r\n\r\n return (\r\n
    \r\n {showAdvancedQuoting ? : this.getCartItemsList(isMobile, fabricatorData, fabricatorSettings)}\r\n {this.getInstallations(isMobile, fabricatorData, fabricatorSettings, installations)}\r\n {this.getTaxes(isMobile, totalPrice, fabricatorSettings, sureTaxLoading)}\r\n {cartItems.length ? : null}\r\n {document.kvConfig.initialFlowEnabled ? : null}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const installations = flatMap(store.instState.instList, i => filter(i.services, {selected: true}));\r\n const {wizardList, wizardIsActive, allWizardsValues} = store.wizardState;\r\n const {sureTaxLoading} = store.cartState;\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n installations,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n layoutParts: store.stepsState.layoutParts,\r\n questionNoClicked: store.cartState.questionNoClicked,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n unlockCalculationsStep: store.unlockCalculationsState.unlockCalculationsStep,\r\n showCartItems: store.unlockCalculationsState.showCartItems,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n quotes: store.quotesState.quotes,\r\n showAllQuotesCartItemsList: store.cartState.showAllQuotesCartItemsList,\r\n showAdvancedQuoting: store.advancedQuotingState.showAdvancedQuoting,\r\n wizardList,\r\n wizardIsActive,\r\n allWizardsValues,\r\n showAssignQuotePopup: store.assignQuoteState.showAssignQuotePopup,\r\n sureTaxLoading,\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n toggleSelectionWindow,\r\n changeStateToQuote,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex,\r\n setActiveQuoteIndex\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartItemsList)\r\n);\r\n","import React from 'react';\r\nimport {connect} from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport $ from \"jquery\";\r\n\r\nimport {\r\n removeFromCart,\r\n changeMessageBoxState,\r\n toggleUserPopup,\r\n setQtActiveCategory,\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n toggleBathroomVisualizerOpen, setCameFromPage\r\n} from \"../../actions/actionFunctions\";\r\nimport {\r\n detectComplexLaborCartItem, getCartItemUnit,\r\n getFeatureIsLocked,\r\n getFeatureUnit, getTotalPrice,\r\n toFixedFeatureCost,\r\n toFixedPrice\r\n} from \"../../misc/helpers\";\r\nimport CommonFeatureItemsMethods from \"../visComponents/commonFeatureItemsMethods\";\r\nimport PriceInput from \"./priceInput\";\r\nimport {getCurrentLayout} from \"../appLayout\";\r\nimport {checkIfInCatProperty} from \"../../misc/displayLogic\";\r\nimport NoteEditor from \"./noteEditor\";\r\nimport ActionTypes from \"../../misc/actionTypes\";\r\nimport {cartItemInterface} from \"./cartItemInterface\";\r\nimport FeatureName from \"../visComponents/featureName\";\r\nimport {setActiveQuoteIndex} from \"../../actions/roomsFunctions\";\r\nimport Config from \"../../config\";\r\nimport {setCartItemEditFeature} from \"../../actions/shoppingCartFunctions\";\r\nimport {getPriceWithIncluded} from \"../../misc/priceFunctions\";\r\nimport {getWizardGroupFromCurrentSteps} from \"../look/lookNavigation/lookMain/lookWizard/lookWizardFunctions\";\r\n// import {setActionAfterVisualizerTypeIsChanged} from \"../../actions/serverFunctions\";\r\nimport {deleteCartItemFromSQFTCalcData, updateCurrentQuote} from \"../../misc/quotesFunctions\";\r\nimport ShoppingCartItemsBundledProducts from \"./shoppingCartItemsBundledProducts\";\r\nimport {SQFT_FEATURES} from \"../sqft/constants\";\r\n// import {COUNTERTOP_GROUP} from \"../kvComponent/core/constants\";\r\n// import {MEASURE_UNITS} from \"../sqft/constants\";\r\n\r\nclass ShoppingCartItemsListItem extends CommonFeatureItemsMethods {\r\n\r\n static propTypes = {\r\n cartItem: PropTypes.shape(cartItemInterface).isRequired,\r\n editFeatureGroupClick: PropTypes.func.isRequired,\r\n isBundleChild: PropTypes.bool,\r\n }\r\n\r\n state = {\r\n editorVisible: false,\r\n editorCanRender: true\r\n }\r\n\r\n componentDidMount() {\r\n $(window).on(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n }\r\n\r\n componentWillUnmount() {\r\n $(window).off(ActionTypes.UPDATE_ALL_ITEMS, this.handleRefresh);\r\n window.removeEventListener('click', this.handleWrapperBlur);\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return !nextProps.showAssignQuotePopup;\r\n }\r\n\r\n handleRefresh = () => {\r\n this.setState({\r\n editorVisible: false,\r\n editorCanRender: false\r\n }, () => {\r\n this.setState({\r\n editorCanRender: true\r\n })\r\n });\r\n this.forceUpdate();\r\n }\r\n\r\n handleRemoveClick = () => {\r\n const {cartItem, fabricatorData} = this.props;\r\n this.props.changeMessageBoxState({\r\n visible: true,\r\n message: {\r\n id: \"shoppingCart.fetureInCartRemovePopupQuestion\",\r\n featureName: cartItem.cartFeature.getFeatureName()\r\n },\r\n buttons: [{\r\n text: \"shoppingCart.fetureInCartRemovePopupNo\",\r\n color: \"blue\",\r\n click: () => {\r\n this.props.changeMessageBoxState({visible: false});\r\n }\r\n }, {\r\n text: \"shoppingCart.fetureInCartRemovePopupYes\",\r\n color: \"green\",\r\n click: async () => {\r\n this.props.removeFromCart(cartItem);\r\n this.props.changeMessageBoxState({visible: false});\r\n if (fabricatorData.settings.useCategorySwitching) {\r\n await updateCurrentQuote(cartItem.currentQuote, undefined, false);\r\n }\r\n deleteCartItemFromSQFTCalcData(cartItem).then(r => void r);\r\n }\r\n }]\r\n });\r\n };\r\n\r\n handleEditClick = () => {\r\n const {cartItem} = this.props;\r\n this.props.editFeatureGroupClick(null, cartItem);\r\n this.props.setCartItemEditFeature(cartItem);\r\n };\r\n\r\n handleAddNoteClick = () => {\r\n this.setState({\r\n editorVisible: !this.state.editorVisible\r\n }, () => {\r\n setTimeout(() => {\r\n this.state.editorVisible\r\n ? window.addEventListener('click', this.handleWrapperBlur)\r\n : window.removeEventListener('click', this.handleWrapperBlur)\r\n }, 0)\r\n })\r\n };\r\n\r\n handleWrapperBlur = (e) => {\r\n const disallowClasses = [\".product-note\", \".link--note\"];\r\n if (this.state.editorVisible && !disallowClasses.some(cls => e.target.closest(cls))) {\r\n this.setState({\r\n editorVisible: false\r\n })\r\n }\r\n };\r\n\r\n onNoteSave = () => {\r\n this.handleAddNoteClick();\r\n };\r\n\r\n toggleUserPopup = () => {\r\n this.props.toggleUserPopup({\r\n userPopupOpened: true\r\n })\r\n };\r\n\r\n render() {\r\n\r\n const layout = getCurrentLayout();\r\n const editingPriceAvailable = Config.isDevMode();\r\n\r\n const isMobile = this.props.windowWidth < 991;\r\n const {fabricatorData, cartItem, activeQuoteIndex, intl, wizardList, allWizardsValues, cartItems, isBundleChild,\r\n isSlabPricingEnabled} = this.props;\r\n const fabricatorSettings = fabricatorData.settings;\r\n\r\n if (this.props.showUnlockCalculations && !this.props.showCartItems.includes(cartItem.id)) {\r\n return false\r\n }\r\n const subPartName = cartItem.cartFeature.getParent ? cartItem.cartFeature.getParent().partName : \"\";\r\n let showPrice = false;\r\n let priceTotal = null;\r\n const priceIsLocked = getFeatureIsLocked(cartItem.cartFeature);\r\n if (fabricatorSettings.showPricing && !fabricatorData.hideCheckoutBreakdownCost && !fabricatorData.hidePricesFromUser) {\r\n const isComplexMultipliedUsed = detectComplexLaborCartItem(cartItem) && getTotalPrice().multipliedCostUsed;\r\n if (isComplexMultipliedUsed || cartItem.displayFakePrice === 0) {\r\n priceTotal = null\r\n } else {\r\n // not sure if we need displayFakePrice?\r\n // priceTotal = cartItem.displayFakePrice ? cartItem.displayFakePrice :\r\n // toFixedFeatureCost(cartItem.cartFeature, cartItem.quantity, cartItem.fromQtCategory, true, cartItem, cartItem.shouldUseSlabPricing);\r\n const shouldUseSlabPricing = cartItem.partId === SQFT_FEATURES.slabs && isSlabPricingEnabled;\r\n priceTotal = toFixedFeatureCost(\r\n cartItem.cartFeature,\r\n cartItem.quantity,\r\n cartItem.fromQtCategory,\r\n true,\r\n cartItem,\r\n shouldUseSlabPricing,\r\n cartItem.currentQuote\r\n );\r\n }\r\n showPrice = !priceIsLocked;\r\n }\r\n // const isEditable = !layout.qtCategories || cartItem.relatedProductParent ||(\r\n // layout.qtCategories.some(qtCategory => qtCategory.subParts && qtCategory.subParts.some(qtCatSubPart => {\r\n // return qtCatSubPart.part.partId === cartItem.cartFeature.partId\r\n // }))\r\n // );\r\n const featureUnit = getFeatureUnit(cartItem.cartFeature, intl, fabricatorData, cartItem.quantity);\r\n const cartItemUnit = getCartItemUnit(cartItem, intl);\r\n let isEditable = ![\"Slab\", \"Slabs\"].includes(cartItemUnit) && !isBundleChild; // always editable except slab, all logic is inside switchToFeatureInfo method\r\n if (cartItem.fromWizardGroupId && allWizardsValues) {\r\n const neededObject = allWizardsValues.find(wizValueObject => (wizValueObject.quoteIndex === cartItem.currentQuote)\r\n && (wizValueObject.wizardItemId === cartItem.fromWizardId));\r\n const selectedWizValues = neededObject && neededObject.wizardSelectedValues ? neededObject.wizardSelectedValues : null;\r\n const wizardItem = wizardList.find(wizItem => wizItem.id === cartItem.fromWizardId);\r\n const {neededStep} = getWizardGroupFromCurrentSteps(wizardItem, selectedWizValues, cartItem.fromWizardGroupId);\r\n if (!neededStep) {\r\n isEditable = false;\r\n }\r\n }\r\n const unit = cartItemUnit ? cartItemUnit : featureUnit;\r\n const getItemTitle = () => {\r\n let itemTitle;\r\n if (cartItem.cartFeature.inCatProperties) {\r\n itemTitle = checkIfInCatProperty(cartItem.cartFeature, \"inCatName\", cartItem.cartFeature.getFeatureName(), cartItem.fromQtCategory)\r\n }\r\n\r\n return itemTitle ? itemTitle : \r\n }\r\n\r\n const hasBundleProducts = cartItems.some(cItem => cItem.bundleParentId === cartItem.id);\r\n\r\n return (\r\n
  • \r\n
    \r\n
    \r\n

    \r\n {subPartName && !layout.qtCategories ? subPartName + \" - \" : null}\r\n { getItemTitle() }\r\n

    \r\n {cartItem.description ? (\r\n

    \r\n ) : null}\r\n {cartItem.isMinimumCharge && !cartItem.isMinimumChargeItems ? null : (\r\n

    \r\n {showPrice && isMobile ? (\r\n \r\n {getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, intl.messages)}\r\n \r\n ) : null}\r\n {priceIsLocked && isMobile ? (\r\n \r\n \r\n \r\n ) : null}\r\n {fabricatorSettings.useCategorySwitching && cartItem.partId === \"room\" ? null : (\r\n \r\n {unit}: {\r\n toFixedPrice(parseFloat(cartItem.displayFakeQuantity) === cartItem.displayFakeQuantity\r\n ? cartItem.displayFakeQuantity\r\n : cartItem.quantity, fabricatorSettings.useDifferentCurrencies)\r\n }\r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n {isMobile && !cartItem.isMinimumCharge && !cartItem.isAddedFromDisplayLogic ? (\r\n
    \r\n
    \r\n ) : cartItem.isMinimumCharge || cartItem.isAddedFromDisplayLogic ? null : (\r\n
    \r\n \r\n {cartItem.cartFeature.notesList[activeQuoteIndex]\r\n ? \r\n : }\r\n \r\n {isEditable ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n {!isMobile ? (\r\n
    \r\n\r\n {showPrice\r\n ? editingPriceAvailable\r\n ? \r\n : (\r\n {getPriceWithIncluded(priceTotal, cartItem.cartFeature, fabricatorData, intl.messages)}\r\n )\r\n : null}\r\n {priceIsLocked ? (\r\n \r\n \r\n \r\n ) : null}\r\n
    \r\n ) : null}\r\n
    \r\n {this.state.editorCanRender && !cartItem.isMinimumCharge && !cartItem.isAddedFromDisplayLogic ? (\r\n \r\n ) : null}\r\n {hasBundleProducts ? : null}\r\n
  • \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (store) => {\r\n const {allWizardsValues, wizardList} = store.wizardState;\r\n return {\r\n cartItems: store.cartState.cartItems,\r\n isPhoneNumberValidated: store.userState.isPhoneNumberValidated,\r\n windowWidth: store.serverState.windowWidth,\r\n fabricatorData: store.fabricatorState,\r\n showUnlockCalculations: store.unlockCalculationsState.showUnlockCalculations,\r\n showCartItems: store.unlockCalculationsState.showCartItems,\r\n activeQuoteIndex: store.quotesState.activeQuoteIndex,\r\n wizardList,\r\n allWizardsValues,\r\n showAssignQuotePopup: store.assignQuoteState.showAssignQuotePopup,\r\n isSlabPricingEnabled: store.sqftSlabState.isSlabPricingEnabled,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n changeMessageBoxState,\r\n toggleUserPopup,\r\n setQtActiveCategory,\r\n /*** CommonFeatureItemsMethods needs next methods: ***/\r\n changeActivePartRelatedItemIndex,\r\n toggleSelectionWindow,\r\n toggleSelectionFeatureInfo,\r\n toggleBathroomVisualizerOpen,\r\n setCameFromPage,\r\n /*** CommonFeatureItemsMethods needs methods end ***/\r\n setActiveQuoteIndex,\r\n setCartItemEditFeature\r\n}\r\n\r\nexport default injectIntl(\r\n connect(mapStateToProps, mapDispatchToProps)(ShoppingCartItemsListItem)\r\n)\r\n","import React, {useEffect, useState} from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport {FormattedMessage, injectIntl} from \"react-intl\";\r\nimport {changeCartFeature} from \"../../actions/actionFunctions\";\r\n\r\nconst NoteEditor = (props) => {\r\n\r\n let {intl, cartItem, closeEditor, editorVisible, cartItemId, dbFeatureId, quoteIndex, changeCartFeature} = props;\r\n const [noteText, setNoteText] = useState(\"\");\r\n\r\n useEffect(() => {\r\n setNoteText(cartItem.noteText || \"\");\r\n }, [cartItemId, dbFeatureId, quoteIndex]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const onNoteChange = (e) => {\r\n setNoteText(e.target.value);\r\n if (!editorVisible) {\r\n onNoteSaveClick(); // set parent's editor visible\r\n }\r\n };\r\n\r\n const onNoteFocus = () => {\r\n if (noteText && !editorVisible) {\r\n onNoteSaveClick(); // set parent's editor visible\r\n }\r\n };\r\n\r\n const onBlur = () => {\r\n changeCartFeature(Object.assign({}, cartItem, {\r\n noteText\r\n }), true);\r\n };\r\n\r\n const onNoteSaveClick = () => {\r\n changeCartFeature(Object.assign({}, cartItem, {\r\n noteText\r\n }), true);\r\n closeEditor();\r\n };\r\n\r\n return (\r\n
    \r\n {/*

    {noteText}

    */}\r\n